<?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>233424</bug_id>
          
          <creation_ts>2021-11-22 07:28:02 -0800</creation_ts>
          <short_desc>[JSC] Unify most Baseline ops between JSVALUE64 and JSVALUE32_64</short_desc>
          <delta_ts>2021-11-30 07:44:36 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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="Geza Lore">glore</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1817287</commentid>
    <comment_count>0</comment_count>
    <who name="Geza Lore">glore</who>
    <bug_when>2021-11-22 07:28:02 -0800</bug_when>
    <thetext>[JSC] Unify most Baseline ops between JSVALUE64 and JSVALUE32_64</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817294</commentid>
    <comment_count>1</comment_count>
      <attachid>444968</attachid>
    <who name="Geza Lore">glore</who>
    <bug_when>2021-11-22 08:26:11 -0800</bug_when>
    <thetext>Created attachment 444968
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817303</commentid>
    <comment_count>2</comment_count>
      <attachid>444975</attachid>
    <who name="Geza Lore">glore</who>
    <bug_when>2021-11-22 09:51:49 -0800</bug_when>
    <thetext>Created attachment 444975
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817425</commentid>
    <comment_count>3</comment_count>
      <attachid>445019</attachid>
    <who name="Geza Lore">glore</who>
    <bug_when>2021-11-23 02:16:32 -0800</bug_when>
    <thetext>Created attachment 445019
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817627</commentid>
    <comment_count>4</comment_count>
      <attachid>445093</attachid>
    <who name="Geza Lore">glore</who>
    <bug_when>2021-11-24 05:51:29 -0800</bug_when>
    <thetext>Created attachment 445093
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818206</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-11-29 07:28:19 -0800</bug_when>
    <thetext>&lt;rdar://problem/85815818&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818425</commentid>
    <comment_count>6</comment_count>
      <attachid>445093</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-11-29 13:00:43 -0800</bug_when>
    <thetext>Comment on attachment 445093
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=445093&amp;action=review

r=me

&gt; Source/JavaScriptCore/jit/JIT.h:336
&gt; +        static inline constexpr bool is_profiled_op = std::is_same_v&lt;decltype(Op::Metadata::m_profile), ValueProfile&gt;;

Rename it to isProfiledOp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818662</commentid>
    <comment_count>7</comment_count>
      <attachid>445401</attachid>
    <who name="Geza Lore">glore</who>
    <bug_when>2021-11-30 02:40:48 -0800</bug_when>
    <thetext>Created attachment 445401
Fix nit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818721</commentid>
    <comment_count>8</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-11-30 07:44:33 -0800</bug_when>
    <thetext>Committed r286296 (244655@main): &lt;https://commits.webkit.org/244655@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 445401.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444968</attachid>
            <date>2021-11-22 08:26:11 -0800</date>
            <delta_ts>2021-11-22 09:51:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233424-20211122162609.patch</filename>
            <type>text/plain</type>
            <size>149573</size>
            <attacher name="Geza Lore">glore</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MTExCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
ZjJhM2Q1MWYxMGQ1YzZlYmM0MWNkN2RmNzUwOTQzZDNlNzMzNjAzLi44OTNlNDc5ZjhhZjAwMWNj
ZDU4NGNiMGFhNDNkMzhlNzFiZDA3OTdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMjAgQEAKKzIwMjEtMTEtMjIgIEdlemEgTG9yZSAgPGdsb3JlQGlnYWxpYS5jb20+CisK
KyAgICAgICAgW0pTQ10gVW5pZnkgbW9zdCBCYXNlbGluZSBvcHMgYmV0d2VlbiBKU1ZBTFVFNjQg
YW5kIEpTVkFMVUUzMl82NAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjMzNDI0CisKKyAgICAgICAgVGhpcyBwYXRjaCB1bmlmaWVzIHRoZSBCYXNlbGlu
ZSBKSVQgaW1wbGVtZW50YXRpb25zIG9mIG1vc3QgYnl0ZWNvZGUKKyAgICAgICAgb3BzIGJldHdl
ZW4gdGhlIEpTVkFMVUUzMl82NCBhbmQgSlNWQUxVRTY0IHBsYXRmb3Jtcy4gVGhlcmUgYXJlIHZl
cnkKKyAgICAgICAgZmV3IGNoYW5nZXMgdG8gdGhlIGdlbmVyYXRlZCBjb2RlIG9uIEpTVkFMVUU2
NCAoYW5kIGFsbCBhcmUgZmFpcmx5CisgICAgICAgIHRyaXZpYWwsIGUuZy46IHJlbW92YWwgb2Yg
cmVkdW5kYW50IG1vdmVzIGluIHRoZSBzbG93IHBhdGgpLCBhcGFydAorICAgICAgICBmcm9tIG1h
Y2hpbmUgcmVnaXN0ZXIgc3Vic3RpdHV0aW9ucy4gTXkgbWVhc3VyZW1lbnRzIG9uIHg4Nl82NAor
ICAgICAgICBpbmRpY2F0ZSB0aGUgcGF0Y2ggaXMgcGVyZm9ybWFuY2UgbmV1dHJhbCB0aGVyZSAo
d2hpY2ggaXMgd2hhdCB3ZQorICAgICAgICBleHBlY3QpLgorCisgICAgICAgIE9uIEFSTXY3L1Ro
dW1iLTIgSmV0U3RyZWFtMiBzaG93cyBhIDAuNCUgaW1wcm92ZW1lbnQuIFRoaXMgaXMgZHVlIHRv
CisgICAgICAgIHNvbWUgb2YgdGhlIGltcHJvdmVkIGltcGxlbWVudGF0aW9ucyBwaWNrZWQgdXAg
ZnJvbSB0aGUgSlNWQUxVRTY0CisgICAgICAgIHZlcnNpb25zLgorCisgICAgICAgIEFsc28gcmVt
b3ZlIHZhcmlvdXMgdW51c2VkIGNvZGUuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAq
IGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
U3R1YkluZm86OmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyk6CisgICAg
ICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBl
cnM6OmJyYW5jaElmQm9vbGVhbik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YnJh
bmNoSWZOb3RCb29sZWFuKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjppc1VuZGVm
aW5lZCk6CisgICAgICAgICogaml0L0dQUkluZm8uaDoKKyAgICAgICAgKiBqaXQvSklULmNwcDoK
KyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0aWMuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdW5zaWduZWQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBh
cmVVbnNpZ25lZEFuZEp1bXBJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVV
bnNpZ25lZEltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93
SW1wbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbmMpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfZGVjKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX21vZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfYml0bm90KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UmlnaHRTaGlmdEZh
c3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TWF0aElDRmFzdCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdE1hdGhJQ1Nsb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGl2
KToKKyAgICAgICAgKiBqaXQvSklUQXJpdGhtZXRpYzMyXzY0LmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKiBqaXQvSklUSW5s
aW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2Fk
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmxvYWRDb2RlQmxvY2tDb25zdGFudFBheWxvYWQpOgorICAgICAgICAqIGppdC9KSVRNdWxHZW5l
cmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpKSVRNdWxHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBh
dGgpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfaW5zdGFuY2VvZik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2Vv
Zik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc19lbXB0eSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2lzX2Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfbnVtYmVy
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2JpZ19pbnQpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5cGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfaXNfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX3ByaW1pdGl2
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3Bfbm90KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2p1
bmRlZmluZWRfb3JfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5l
ZF9vcl9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2plcV9wdHIpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9wdHIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVxKToKKyAgICAgICAgKEpTQzo6
SklUOjpjb21waWxlT3BTdHJpY3RFcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19u
dW1iZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF90b19zdHJpbmcpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfdG9fb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9wYXJlbnRfc2NvcGUpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX3Ro
aXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX25ld19yZWdleHApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Z2V0X3Jlc3RfbGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9wcm90b3R5
cGVfb2YpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OmNvbXBpbGVPcEVxQ29tbW9uKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BF
cVNsb3dDb21tb24pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZXEpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfbmVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2plcSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmVxKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9qZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX2puZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVxQ29t
bW9uKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N0cmljdGVxKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX25zdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9q
c3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5zdHJpY3RlcSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9qbnN0cmljdGVxKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZSk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Vu
dW1lcmF0b3JfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9lbnVtZXJhdG9y
X2hhc19wcm9wZXJ0eUltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRXcml0ZUJhcnJpZXIp
OgorICAgICAgICAqIGppdC9KU0ludGVyZmFjZUpJVC5oOgorICAgICAgICAoSlNDOjpKU0ludGVy
ZmFjZUpJVDo6ZW1pdExvYWRKU0NlbGwpOgorCiAyMDIxLTExLTIyICBHZXphIExvcmUgIDxnbG9y
ZUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtKU0NdIE1ha2Ugc2hhcmluZyBvZiB1bmxpbmtlZCBi
YXNlbGluZSBjb2RlIHBvc3NpYmxlIG9uIEpTVkFMVUUzMl82NApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCA3ZDc2OGI3ODY0NjhiNzhlNjU2MzZkODNiYzI4ZjcyOWJjZTc4YjVjLi5h
Mzk4ZjQ3Y2E0MDViMjQ4NzU4YjgzMzcyNGM1ZDE5ZTYxMWIxNzlhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtNDcyOSw3ICs0NzI5LDYgQEAKIAkJQTc0REVGOEUxODJEOTkxNDAw
NTIyQzIyIC8qIE1hcEl0ZXJhdG9yUHJvdG90eXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1hcEl0ZXJhdG9yUHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE3NERFRjhGMTgyRDk5MTQwMDUyMkMyMiAvKiBKU01hcEl0ZXJhdG9yLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWFwSXRlcmF0b3IuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzRERUY5MDE4MkQ5OTE0MDA1MjJDMjIgLyogSlNN
YXBJdGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU01hcEl0ZXJh
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE3NTcwNkREMTE4QTJCQ0YwMDU3
Rjg4RiAvKiBKSVRBcml0aG1ldGljMzJfNjQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSklUQXJpdGhtZXRpYzMyXzY0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTc1RUU5QjAxOEFBQjdFMjAwQUFEMDQzIC8qIEJ1aWx0aW5OYW1lcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCdWlsdGluTmFtZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTc2N0I1QjMxN0EwQjk2NTAwNjNEOTQwIC8qIERGR0xvb3BQcmVI
ZWFkZXJDcmVhdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdMb29w
UHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUE3NjdCNUI0MTdBMEI5NjUwMDYzRDk0MCAvKiBERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFz
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdMb29wUHJlSGVhZGVyQ3Jl
YXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02Mzc3LDcgKzYzNzYsNiBAQAogCQkJCUZF
MTIyMDI2MUJFN0Y1NjQwMDM5RTZGMiAvKiBKSVRBZGRHZW5lcmF0b3IuaCAqLywKIAkJCQkwRjc1
QTA2NTIwMTNFNEVGMDAzOEUyQ0YgLyogSklUQWxsb2NhdG9yLmggKi8sCiAJCQkJODZBOTBFQ0Yw
RUU3RDUxRjAwQUIzNTBEIC8qIEpJVEFyaXRobWV0aWMuY3BwICovLAotCQkJCUE3NTcwNkREMTE4
QTJCQ0YwMDU3Rjg4RiAvKiBKSVRBcml0aG1ldGljMzJfNjQuY3BwICovLAogCQkJCUZFM0EwNkFE
MUMxMENCNkYwMDM5MEZERCAvKiBKSVRCaXRBbmRHZW5lcmF0b3IuY3BwICovLAogCQkJCUZFM0Ew
NkFFMUMxMENCNkYwMDM5MEZERCAvKiBKSVRCaXRBbmRHZW5lcmF0b3IuaCAqLywKIAkJCQlGRTNB
MDZBNzFDMTBCQzc0MDAzOTBGREQgLyogSklUQml0QmluYXJ5T3BHZW5lcmF0b3IuaCAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCBlMGRlNmI3MmY4YzA4Y2Y0MGQwOGQ4MzQzOWQy
N2VmMDc3YzlmY2IwLi5jOWUzZWExYzkwMmQ3NWEzN2RkY2ZhZTY3YmMyOWVmYTliNDcwMDVjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CkBAIC02MzksNyArNjM5LDYgQEAgaml0L0ludHJp
bnNpY0VtaXR0ZXIuY3BwCiBqaXQvSklULmNwcAogaml0L0pJVEFkZEdlbmVyYXRvci5jcHAKIGpp
dC9KSVRBcml0aG1ldGljLmNwcAotaml0L0pJVEFyaXRobWV0aWMzMl82NC5jcHAKIGppdC9KSVRC
aXRBbmRHZW5lcmF0b3IuY3BwCiBqaXQvSklUQml0T3JHZW5lcmF0b3IuY3BwCiBqaXQvSklUQml0
WG9yR2VuZXJhdG9yLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCmluZGV4IGFhN2VjMDFlMzg0OGFkYTlmY2FiOTUw
NDIzMmY2ODdjMDM0OGMzMTAuLjA0NWRlZmVkYjE1NGZkMDg5YTJiNjhkY2Q2MzE4MTE5NzEwMDFl
MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJYODZfNjQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyWDg2XzY0LmgKQEAgLTg5Nyw2ICs4OTcsMTIgQEAgcHVibGljOgogICAgICAgICBt
X2Fzc2VtYmxlci54b3JxX2lyKGltbS5tX3ZhbHVlLCBzcmNEZXN0KTsKICAgICB9CiAKKyAgICB2
b2lkIHhvcjY0KFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBtb3ZlKHNyYywgZGVzdCk7CisgICAgICAgIHhvcjY0KGltbSwg
ZGVzdCk7CisgICAgfQorCiAgICAgdm9pZCB4b3I2NChUcnVzdGVkSW1tNjQgaW1tLCBSZWdpc3Rl
cklEIHNyY0Rlc3QpCiAgICAgewogICAgICAgICBtb3ZlKGltbSwgc2NyYXRjaFJlZ2lzdGVyKCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJJbmZvLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5jcHAKaW5kZXggOTAxZmM1MzY5YTdjZTY4YzM3YTcyMWE5YjRjYTk0ZWQzMjdmZGNmZi4u
ZDIxMDQxNzQyYmQ0OTViNjZlY2E0NTA4ZDczYjhkMzhjYWNmZjE1YyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCkBAIC01
NjQsMTkgKzU2NCwxNCBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjppbml0aWFsaXplRnJvbVVu
bGlua2VkU3RydWN0dXJlU3R1YkluZm8oQ29kZUJsb2NrKiwgVW5saQogICAgIGNhc2UgQWNjZXNz
VHlwZTo6SW5zdGFuY2VPZjoKICAgICAgICAgaGFzQ29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7
CiAgICAgICAgIHByb3RvdHlwZUlzS25vd25PYmplY3QgPSBmYWxzZTsKLSNpZiBVU0UoSlNWQUxV
RTY0KQotICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1
ZTsKLSAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3Vs
dDsKLSAgICAgICAgcmVncy5wcm90b3R5cGVHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3Rl
cnM6OnByb3RvOwotICAgICAgICBtX3N0dWJJbmZvR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVn
aXN0ZXJzOjpzdHViSW5mbzsKLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIGJhc2VH
UFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlSlNSLnBheWxvYWRHUFIoKTsK
LSAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3VsdEdQ
UjsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3Vs
dEpTUi5wYXlsb2FkR1BSKCk7CiAgICAgICAgIHJlZ3MucHJvdG90eXBlR1BSID0gQmFzZWxpbmVJ
bnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90b0pTUi5wYXlsb2FkR1BSKCk7CiAgICAgICAgIG1fc3R1
YkluZm9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvR1BSOwotICAg
ICAgICBiYXNlVGFnR1BSID0gSW52YWxpZEdQUlJlZzsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQor
ICAgICAgICBiYXNlVGFnR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZUpT
Ui50YWdHUFIoKTsKICAgICAgICAgdmFsdWVUYWdHUFIgPSBJbnZhbGlkR1BSUmVnOwotICAgICAg
ICB2LnByb3BlcnR5VGFnR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgdi5wcm9wZXJ0eVRh
Z0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG9KU1IudGFnR1BSKCk7CiAj
ZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKaW5kZXggOTg3MmQ1Njlk
NDMzYjllMjc0ZGFkM2MzMmVjNWMzYjM0ZGRhOTc4MC4uZTZjNzM2YzY3Y2ExMDJkNTI1NzBhNzE4
OWMxMDA2MmVlYTVjNDI3YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9B
c3NlbWJseUhlbHBlcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5oCkBAIC04MjEsOCArODIxLDcgQEAgcHVibGljOgogICAgIHsKICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgICAgICBBU1NFUlQodGVtcEdQUiAhPSBJbnZhbGlkR1BSUmVnKTsKLSAgICAg
ICAgbW92ZShncHIsIHRlbXBHUFIpOwotICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VmFsdWVGYWxzZSksIHRlbXBHUFIpOworICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VmFsdWVGYWxzZSksIGdwciwgdGVtcEdQUik7CiAgICAgICAgIHJldHVybiBicmFuY2hU
ZXN0NjQoWmVybywgdGVtcEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4x
KSkpOwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKHRlbXBHUFIpOwpAQCAtODQ1LDggKzg0
NCw3IEBAIHB1YmxpYzoKICAgICB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgQVNTRVJU
KHRlbXBHUFIgIT0gSW52YWxpZEdQUlJlZyk7Ci0gICAgICAgIG1vdmUoZ3ByLCB0ZW1wR1BSKTsK
LSAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCB0ZW1wR1BS
KTsKKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBncHIs
IHRlbXBHUFIpOwogICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDY0KE5vblplcm8sIHRlbXBHUFIs
IFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKTsKICNlbHNlCiAgICAgICAg
IFVOVVNFRF9QQVJBTSh0ZW1wR1BSKTsKQEAgLTEwMzMsNiArMTAzMSwxNSBAQCBwdWJsaWM6CiAj
ZW5kaWYKICAgICB9CiAKKyAgICB2b2lkIGlzVW5kZWZpbmVkKEpTVmFsdWVSZWdzIHJlZ3MsIEdQ
UlJlZyBkc3QpCisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIGNvbXBhcmU2NChF
cXVhbCwgcmVncy5wYXlsb2FkR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVm
aW5lZCksIGRzdCk7CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBjb21wYXJlMzIo
RXF1YWwsIHJlZ3MudGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpVbmRlZmluZWRUYWcp
LCBkc3QpOworI2VuZGlmCisgICAgfQorCiAgICAgLy8gTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24g
ZG9lcyBub3QgcmVzcGVjdCBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLgogICAgIEp1bXAgYnJhbmNo
SWZVbmRlZmluZWQoR1BSUmVnIGdwcikKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0dQUkluZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5m
by5oCmluZGV4IDJmOGU1NDQ3M2Y3MjEzYzkyZDg4NmExOTZhZTJjOTFjMWU0NDZkYzkuLmYxYzk4
ZDkzYmUzZDQxMDhiMTUzZTMzMTc5NjlmYmEyZDQxNDYzODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvR1BSSW5mby5oCkBAIC05MzksOSArOTM5LDExIEBAIHB1YmxpYzoKICNpZiBVU0UoSlNWQUxV
RTY0KQogICAgIHN0YXRpYyBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MganNSZWdUMTAgeyBHUFJJbmZv
OjpyZWdUMCB9OwogICAgIHN0YXRpYyBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MganNSZWdUMzIgeyBH
UFJJbmZvOjpyZWdUMiB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MganNSZWdU
NTQgeyBHUFJJbmZvOjpyZWdUNCB9OwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBzdGF0
aWMgY29uc3RleHByIEpTVmFsdWVSZWdzIGpzUmVnVDEwIHsgR1BSSW5mbzo6cmVnVDEsIEdQUklu
Zm86OnJlZ1QwIH07CiAgICAgc3RhdGljIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBqc1JlZ1QzMiB7
IEdQUkluZm86OnJlZ1QzLCBHUFJJbmZvOjpyZWdUMiB9OworICAgIHN0YXRpYyBjb25zdGV4cHIg
SlNWYWx1ZVJlZ3MganNSZWdUNTQgeyBHUFJJbmZvOjpyZWdUNSwgR1BSSW5mbzo6cmVnVDQgfTsK
ICNlbmRpZgogCiAgICAgLy8gUmV0dXJuIHZhbHVlIHJlZ2lzdGVyCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5jcHAKaW5kZXggMGM2YmYzZDFlNzUwNjM2YjgwNzAwMDQ4NDRlZDNlNTM2MzMwM2E4MS4u
MmIzMWNhZTAxYmJiY2FjMDRhN2VkZDMxMzg5YWQ5ZGViODA2ZjgwNSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmNwcApAQCAtMTI2LDE2ICsxMjYsNiBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0
aW1pemF0aW9uQ2hlY2soKQogfQogI2VuZGlmCiAKLXZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGUo
V2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGlmICghc2V0IHx8IHNldC0+c3RhdGUoKSA9PSBJ
c0ludmFsaWRhdGVkKSB7Ci0gICAgICAgIGFkZFNsb3dDYXNlKEp1bXAoKSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWJz
b2x1dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFs
aWRhdGVkKSkpOwotfQotCiB2b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJS
ZWcgcG9pbnRlclRvU2V0KQogewogICAgIGF1dG8gb2sgPSBicmFuY2hUZXN0UHRyKFplcm8sIHBv
aW50ZXJUb1NldCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAppbmRleCBkNjMwNjZmNzkwNzAwNDcy
Yzk5NjNlYzgzNTA3NzFjMmNhZDRjMGNjLi41NGQ1ODJlMGZmYmM0ZTA4NGQ5NzQwNWU4MjQwOGFk
MGE0MmExY2ExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKQEAgLTI1NCw4ICsyNTQsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIGxvYWRHbG9iYWxPYmpl
Y3QoR1BSUmVnKTsKICAgICAgICAgdm9pZCBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoVmlydHVhbFJl
Z2lzdGVyLCBKU1ZhbHVlUmVncyk7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgdm9p
ZCBsb2FkQ29kZUJsb2NrQ29uc3RhbnRQYXlsb2FkKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJ
RCk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgdm9pZCBsb2FkQ29kZUJsb2NrQ29u
c3RhbnRUYWcoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKTsKICNlbmRpZgogCkBAIC0zMTMs
MzEgKzMxMywzNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
T3A+CiAgICAgICAgIHZvaWQgZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmKTsKIAorI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPiB2b2lkIGNvbXBpbGVP
cFN0cmljdEVxKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE9wPiB2b2lkIGNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJbnN0cnVjdGlvbiopOwotICAg
ICAgICBlbnVtIGNsYXNzIENvbXBpbGVPcEVxVHlwZSB7IEVxLCBORXEgfTsKLSAgICAgICAgdm9p
ZCBjb21waWxlT3BFcUp1bXBTbG93KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBD
b21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKLSAgICAgICAgYm9vbCBpc09wZXJhbmRD
b25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIpOwotICAgICAgICAKKyNlbGlmIFVTRShKU1ZB
TFVFMzJfNjQpCisgICAgICAgIHZvaWQgY29tcGlsZU9wRXFDb21tb24oVmlydHVhbFJlZ2lzdGVy
IHNyYzEsIFZpcnR1YWxSZWdpc3RlciBzcmMyKTsKKyAgICAgICAgdm9pZCBjb21waWxlT3BFcVNs
b3dDb21tb24oVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lk
IGNvbXBpbGVPcFN0cmljdEVxQ29tbW9uKFZpcnR1YWxSZWdpc3RlciBzcmMxLCAgVmlydHVhbFJl
Z2lzdGVyIHNyYzIpOworI2VuZGlmCisKICAgICAgICAgZW51bSBXcml0ZUJhcnJpZXJNb2RlIHsg
VW5jb25kaXRpb25hbFdyaXRlQmFycmllciwgU2hvdWxkRmlsdGVyQmFzZSwgU2hvdWxkRmlsdGVy
VmFsdWUsIFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB9OwogICAgICAgICAvLyB2YWx1ZSByZWdp
c3RlciBpbiB3cml0ZSBiYXJyaWVyIGlzIHVzZWQgYmVmb3JlIGFueSBzY3JhdGNoIHJlZ2lzdGVy
cwogICAgICAgICAvLyBzbyBtYXkgc2FmZWx5IGJlIHRoZSBzYW1lIGFzIGVpdGhlciBvZiB0aGUg
c2NyYXRjaCByZWdpc3RlcnMuCiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihWaXJ0dWFs
UmVnaXN0ZXIgb3duZXIsIFdyaXRlQmFycmllck1vZGUpOwogICAgICAgICB2b2lkIGVtaXRXcml0
ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdy
aXRlQmFycmllck1vZGUpOwotICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBv
d25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlKTsKICAgICAgICAg
dm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIpOwogICAgICAgICB2b2lkIGVtaXRX
cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyKTsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Y29uc3QgQnl0ZWNvZGUmLCBHUFJSZWcpOwotI2VuZGlmCiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEJ5dGVjb2RlPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUm
LCBKU1ZhbHVlUmVncyk7CiAKLSAgICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVl
IHRvIHByb2ZpbGUgaXMgaW4gcmVnVDAgKHJlZ1QxL3JlZ1QwIG9uIEpTVkFMVUUzMl82NCkuCi0g
ICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoLi4uKTsK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8
c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQcm9m
aWxlPjo6dmFsdWUsIHZvaWQ+Ci0gICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2Zp
bGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKTsKKyAgICAgICAgc3RhdGljIGlubGluZSBjb25zdGV4cHIg
Ym9vbCBpc19wcm9maWxlZF9vcCA9IHN0ZDo6aXNfc2FtZV92PGRlY2x0eXBlKE9wOjpNZXRhZGF0
YTo6bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
T3A+CisgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8aXNfcHJvZmlsZWRfb3A8T3A+LCB2b2lkPgor
ICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShPcCBieXRlY29k
ZSkKKyAgICAgICAgeyAvLyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdmFsdWUgdG8gcHJvZmlsZSBp
cyBpbiBqc1JlZ1QxMC4KKyAgICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUsIGpzUmVnVDEwKTsKKyAgICAgICAgfQorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4K
KyAgICAgICAgc3RkOjplbmFibGVfaWZfdDwhaXNfcHJvZmlsZWRfb3A8T3A+LCB2b2lkPgorICAg
ICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShPcCkKKyAgICAgICAg
eyB9CiAKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgogICAgICAgICB2b2lk
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRlY29kZSYsIFJlZ2lzdGVy
SUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKQEAgLTM0Nyw1NyArMzUzLDIzIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAg
RUNNQU1vZGUgZWNtYU1vZGUoT3ApOwogCi0gICAgICAgIC8vIERldGVybWluZXMgdGhlIHR5cGUg
b2YgcHJpdmF0ZSBmaWVsZCBhY2Nlc3MgZm9yIGEgYnl0ZWNvZGUuCi0gICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgotICAgICAgICBQcml2YXRlRmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1
dEtpbmQoT3ApOwotCiAgICAgICAgIHZvaWQgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFs
UmVnaXN0ZXIgc3JjLCBKU1ZhbHVlUmVncyBkc3QpOwogICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJQYXlsb2FkKFZpcnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQgZHN0KTsK
ICAgICAgICAgdm9pZCBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3Qs
IEpTVmFsdWVSZWdzIHNyYyk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3Rl
ciwgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVn
aXN0ZXIpOwotCi0gICAgICAgIGludDMyX3QgZ2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxS
ZWdpc3RlciBzcmMpOwotICAgICAgICBkb3VibGUgZ2V0T3BlcmFuZENvbnN0YW50RG91YmxlKFZp
cnR1YWxSZWdpc3RlciBzcmMpOwogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgYm9v
bCBnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lz
dGVyIG9wMiwgVmlydHVhbFJlZ2lzdGVyJiBvcCwgaW50MzJfdCYgY29uc3RhbnQpOwotCi0gICAg
ICAgIHZvaWQgZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJlZ2lzdGVySUQgdmFs
dWUpOwotCi0gICAgICAgIHZvaWQgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0
ZXIgc3JjLCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkKTsKICAgICAgICAgdm9p
ZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKFZpcnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVy
SUQgZHN0KTsKLQotICAgICAgICB2b2lkIGVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lz
dGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFt
ZVJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIs
IFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7Ci0gICAgICAg
IHZvaWQgZW1pdFN0b3JlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCwg
Ym9vbCBpbmRleElzQ2VsbCA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmVCb29sKFZp
cnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNCb29sID0gZmFs
c2UpOwotCi0gICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxS
ZWdpc3Rlcik7Ci0gICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1
YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcpOwotICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEKTsKLQotICAgICAgICAvLyBBcml0aG1ldGljIG9wY29k
ZSBoZWxwZXJzCi0gICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBl
bWl0QmluYXJ5RG91YmxlT3AoY29uc3QgSW5zdHJ1Y3Rpb24gKiwgT3BlcmFuZFR5cGVzLCBKdW1w
TGlzdCYgbm90SW50MzJPcDEsIEp1bXBMaXN0JiBub3RJbnQzMk9wMiwgYm9vbCBvcDFJc0luUmVn
aXN0ZXJzID0gdHJ1ZSwgYm9vbCBvcDJJc0luUmVnaXN0ZXJzID0gdHJ1ZSk7Ci0KLSNlbHNlIC8v
IFVTRShKU1ZBTFVFMzJfNjQpCisjZWxpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAvLyBNYWNo
aW5lIHJlZ2lzdGVyIHZhcmlhbnRzIHB1cmVseSBmb3IgY29udmVuaWVuY2UKICAgICAgICAgdm9p
ZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQg
ZHN0KTsKLSAgICAgICAgdm9pZCBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rl
ciBkc3QsIFJlZ2lzdGVySUQgZnJvbSA9IHJlZ1QwKTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmVD
ZWxsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCAvKiBvbmx5
IHVzZWQgaW4gSlNWYWx1ZTMyXzY0ICovID0gZmFsc2UpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBwYXlsb2FkKTsKLSAgICAgICAgfQorICAgICAg
ICB2b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0
ZXJJRCBmcm9tKTsKIAotICAgICAgICBKdW1wIGVtaXRKdW1wSWZCb3RoSlNDZWxscyhSZWdpc3Rl
cklELCBSZWdpc3RlcklELCBSZWdpc3RlcklEKTsKLSAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dD
YXNlSWZKU0NlbGwoUmVnaXN0ZXJJRCk7Ci0gICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKFJlZ2lzdGVySUQpOwotICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChSZWdpc3RlcklELCBWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBKdW1wIGVtaXRK
dW1wSWZOb3RJbnQoUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCBzY3JhdGNoKTsK
LSAgICAgICAgUGF0Y2hhYmxlSnVtcCBlbWl0UGF0Y2hhYmxlSnVtcElmTm90SW50KFJlZ2lzdGVy
SUQpOwotICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChSZWdpc3RlcklEKTsK
LSAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3ROdW1iZXIoUmVnaXN0ZXJJRCk7CiAg
ICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KFJlZ2lzdGVySUQsIFJlZ2lzdGVy
SUQsIFJlZ2lzdGVySUQgc2NyYXRjaCk7Ci0jZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKKyAg
ICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoUmVnaXN0ZXJJRCk7CisjZW5kaWYK
KworICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChKU1ZhbHVlUmVncyk7CiAK
ICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoSlNWYWx1ZVJlZ3MpOwog
ICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChKU1ZhbHVlUmVncywgVmly
dHVhbFJlZ2lzdGVyKTsKQEAgLTY0Nyw5ICs2MTksNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdm9pZCBlbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogCi0gICAgICAgIHZvaWQgZW1pdFJpZ2h0
U2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBib29sIGlzVW5zaWduZWQpOwotICAgICAgICB2b2lk
IGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsKLQogICAgICAgICB2b2lkIGVt
aXRIYXNQcml2YXRlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBW
aXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlPckJyYW5kLCBBY2Nlc3NUeXBlKTsKICAgICAgICAgdm9p
ZCBlbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVy
IGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNjZXNzVHlwZSk7CiAKQEAgLTY1OSwx
NiArNjI4LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXROZXdGdW5jRXhw
ckNvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcpOwogICAgICAgICB2
b2lkIGVtaXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlLCBHUFJSZWcgc2NyYXRjaEdQUik7
Ci0gICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqKTsKICAgICAgICAg
dm9pZCBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KEdQUlJlZyBwb2ludGVyVG9TZXQpOwogCiAg
ICAgICAgIHZvaWQgZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwogCi0gICAgICAg
IHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVh
bFJlZ2lzdGVyKTsKLQogICAgICAgICBib29sIGlzS25vd25DZWxsKFZpcnR1YWxSZWdpc3Rlcik7
CisKICAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsK
KworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnREb3Vi
bGUoVmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAgZG91YmxlIGdldE9wZXJhbmRDb25zdGFudERv
dWJsZShWaXJ0dWFsUmVnaXN0ZXIgc3JjKTsKKyNlbmRpZgogICAgICAgICBib29sIGlzT3BlcmFu
ZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgIGludDMyX3QgZ2V0T3BlcmFu
ZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpOwogICAgICAgICBib29sIGlzT3BlcmFu
ZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIpOwogCiAgICAgICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0
eXBlbmFtZSBOb25Qcm9maWxlZEZ1bmN0aW9uPgpAQCAtNzI5LDEyICs3MDIsNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgICAgICAgICBpdGVyLT5mcm9tLmxpbmsodGhpcyk7CiAgICAgICAg
ICAgICArK2l0ZXI7CiAgICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rRHVtbXlTbG93Q2FzZShW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBBU1NFUlQoIWl0ZXItPmZyb20uaXNTZXQoKSk7Ci0gICAgICAgICAgICArK2l0ZXI7Ci0g
ICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgdm9pZCBs
aW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNs
b3dDYXNlcywKICAgICAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBC
eXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQXJpdGhtZXRpYy5jcHAKaW5kZXggOGY0ZDgwYjk5Y2ZjOWU5MWZlMjMzZDRiZTkyNmY1
NjM3ZjY2ZWM2ZS4uZjg2NzU4MzJhODdjYmVkYWFmMTZiY2E4NzE1ZjhiMzVjZDVhZjkzMyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCkBAIC0xNDQsMTkg
KzE0NCwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qYmVsb3dlcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcDxPcEpi
ZWxvd2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEJlbG93T3JFcXVhbCk7CiB9CiAKLSNpZiBVU0Uo
SlNWQUxVRTY0KQotCiB2b2lkIEpJVDo6ZW1pdF9vcF91bnNpZ25lZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wVW5zaWduZWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29w
ZXJhbmQ7CiAgICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDMyKExlc3NUaGFuLCByZWdUMCwgVHJ1c3RlZEltbTMyKDApKSk7Ci0gICAgYm94SW50MzIocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHQsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwganNSZWdUMTAp
OworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChqc1JlZ1QxMCk7CisgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoMzIoTGVzc1RoYW4sIGpzUmVnVDEwLnBheWxvYWRHUFIoKSwgVHJ1c3RlZEltbTMy
KDApKSk7CisgICAgYm94SW50MzIoanNSZWdUMTAucGF5bG9hZEdQUigpLCBqc1JlZ1QxMCk7Cisg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIGpzUmVnVDEwKTsKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CkBAIC0xNzgsNDYgKzE3Niw0NyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21w
YXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwg
dW5zaQogCiAgICAgYm9vbCBkaXNhbGxvd0FsbG9jYXRpb24gPSBmYWxzZTsKICAgICBpZiAoaXNP
cGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDIsIHJlZ1QwKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBqc1JlZ1QxMCk7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChqc1JlZ1QxMCkpOwogICAgICAgICBKdW1w
TGlzdCBmYWlsdXJlczsKLSAgICAgICAgZW1pdExvYWRDaGFyYWN0ZXJTdHJpbmcocmVnVDAsIHJl
Z1QwLCBmYWlsdXJlcyk7CisgICAgICAgIGVtaXRMb2FkQ2hhcmFjdGVyU3RyaW5nKGpzUmVnVDEw
LnBheWxvYWRHUFIoKSwgcmVnVDAsIGZhaWx1cmVzKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoZmFp
bHVyZXMpOwogICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmVn
VDAsIEltbTMyKGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChvcDEpKS0+dHJ5R2V0VmFsdWUo
ZGlzYWxsb3dBbGxvY2F0aW9uKVswXSkpLCB0YXJnZXQpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AyKSkgewotICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOwotICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGpz
UmVnVDEwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGpzUmVnVDEwKSk7
CiAgICAgICAgIEp1bXBMaXN0IGZhaWx1cmVzOwotICAgICAgICBlbWl0TG9hZENoYXJhY3RlclN0
cmluZyhyZWdUMCwgcmVnVDAsIGZhaWx1cmVzKTsKKyAgICAgICAgZW1pdExvYWRDaGFyYWN0ZXJT
dHJpbmcoanNSZWdUMTAucGF5bG9hZEdQUigpLCByZWdUMCwgZmFpbHVyZXMpOwogICAgICAgICBh
ZGRTbG93Q2FzZShmYWlsdXJlcyk7CiAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9u
LCByZWdUMCwgSW1tMzIoYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMikpLT50cnlHZXRW
YWx1ZShkaXNhbGxvd0FsbG9jYXRpb24pWzBdKSksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SW50KHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGpz
UmVnVDEwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGpzUmVnVDEwKTsKICAg
ICAgICAgaW50MzJfdCBvcDJpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKTsKLSAgICAg
ICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIHJlZ1QwLCBJbW0zMihvcDJpbW0pKSwgdGFy
Z2V0KTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIGpzUmVnVDEwLnBheWxv
YWRHUFIoKSwgSW1tMzIob3AyaW1tKSksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKLSAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QxKTsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW50KHJlZ1QxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGpzUmVnVDMy
KTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGpzUmVnVDMyKTsKICAgICAgICAg
aW50MzJfdCBvcDFpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKTsKLSAgICAgICAgYWRk
SnVtcChicmFuY2gzMihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1QxLCBJbW0zMihvcDFpbW0pKSwg
dGFyZ2V0KTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb21tdXRlKGNvbmRpdGlvbiksIGpz
UmVnVDMyLnBheWxvYWRHUFIoKSwgSW1tMzIob3AxaW1tKSksIHRhcmdldCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SW50KHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDEp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBqc1JlZ1QxMCk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDIsIGpzUmVnVDMyKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RJbnQoanNSZWdUMTApOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChqc1JlZ1QzMik7
CiAKLSAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0
KTsKKyAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwganNSZWdUMTAucGF5bG9hZEdQUigp
LCBqc1JlZ1QzMi5wYXlsb2FkR1BSKCkpLCB0YXJnZXQpOwogfQogCisKIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogewpA
QCAtMjMxLDE2ICsyMzAsMTYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVt
cChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWwKIHZvaWQgSklUOjpl
bWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1
YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25k
aXRpb24pCiB7CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlclBheWxvYWQob3AxLCByZWdUMCk7CiAgICAgICAgIGludDMyX3Qgb3AyaW1tID0g
Z2V0T3BlcmFuZENvbnN0YW50SW50KG9wMik7CiAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29u
ZGl0aW9uLCByZWdUMCwgSW1tMzIob3AyaW1tKSksIHRhcmdldCk7CiAgICAgfSBlbHNlIGlmIChp
c09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AyLCByZWdUMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKG9w
MiwgcmVnVDEpOwogICAgICAgICBpbnQzMl90IG9wMWltbSA9IGdldE9wZXJhbmRDb25zdGFudElu
dChvcDEpOwogICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmVn
VDEsIEltbTMyKG9wMWltbSkpLCB0YXJnZXQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AyLCByZWdUMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2Fk
KG9wMSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChvcDIs
IHJlZ1QxKTsKICAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIHJlZ1QwLCByZWdU
MSksIHRhcmdldCk7CiAgICAgfQogfQpAQCAtMjU4LDIwICsyNTcsMjAgQEAgdm9pZCBKSVQ6OmVt
aXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRp
b25hbENvbmRpdGkKIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJl
Z2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVs
YXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50
SW50KG9wMikpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQob3AxLCByZWdUMCk7CiAgICAg
ICAgIGludDMyX3Qgb3AyaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMik7CiAgICAgICAg
IGNvbXBhcmUzMihjb25kaXRpb24sIHJlZ1QwLCBJbW0zMihvcDJpbW0pLCByZWdUMCk7CiAgICAg
fSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0gICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJQYXlsb2FkKG9wMiwgcmVnVDApOwogICAgICAgICBpbnQzMl90IG9wMWltbSA9IGdldE9wZXJh
bmRDb25zdGFudEludChvcDEpOwogICAgICAgICBjb21wYXJlMzIoY29tbXV0ZShjb25kaXRpb24p
LCByZWdUMCwgSW1tMzIob3AxaW1tKSwgcmVnVDApOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AyLCByZWdUMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXls
b2FkKG9wMSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChv
cDIsIHJlZ1QxKTsKICAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwgcmVnVDAsIHJlZ1QxLCBy
ZWdUMCk7CiAgICAgfQotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGJveEJvb2xlYW4ocmVn
VDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwganNSZWdUMTAp
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgU2xvd09wZXJhdGlvbj4KQEAg
LTI5NSwyNiArMjk0LDM3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwo
VmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwKICAgICBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKICAg
ICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMSwgYXJndW1lbnRHUFIxKTsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDIsIGFyZ3VtZW50R1BSMik7Ci0gICAgICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRH
UFIwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIGFyZ3VtZW50R1BSMCwgYXJn
dW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2Jh
bE9iamVjdEdQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7Cisg
ICAgICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBhcmcxSlNSID0gcHJlZmVycmVkQXJndW1lbnRK
U1I8U2xvd09wZXJhdGlvbiwgMT4oKTsKKyAgICAgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGFy
ZzJKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxTbG93T3BlcmF0aW9uLCAyPigpOworCisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmcxSlNSKTsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZzJKU1IpOworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0
KGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBnbG9i
YWxPYmplY3RHUFIsIGFyZzFKU1IsIGFyZzJKU1IpOwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hv
dChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwg
dGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGF1dG8gdW5ib3hEb3VibGUg
PSBbdGhpc10oSlNWYWx1ZVJlZ3Mgc3JjLCBGUFJSZWcgZHN0KSB7CisjaWYgVVNFKEpTVkFMVUU2
NCkKKyAgICAgICAgdGhpcy0+dW5ib3hEb3VibGVXaXRob3V0QXNzZXJ0aW9ucyhzcmMucGF5bG9h
ZEdQUigpLCBzcmMucGF5bG9hZEdQUigpLCBkc3QpOworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkK
KyAgICAgICAgdGhpcy0+dW5ib3hEb3VibGUoc3JjLCBkc3QpOworI2VuZGlmCisgICAgfTsKKwog
ICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7CiAgICAgICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKICAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7Ci0g
ICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApOwotICAgICAg
ICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICAgICAgICAgIG1vdmU2
NFRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKKyAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFu
Y2hJZk5vdE51bWJlcihqc1JlZ1QxMCwgcmVnVDQpOworICAgICAgICAgICAgdW5ib3hEb3VibGUo
anNSZWdUMTAsIGZwUmVnVDApOwogCiAgICAgICAgICAgICBpbnQzMl90IG9wMmltbSA9IGdldENv
bnN0YW50T3BlcmFuZChvcDIpLmFzSW50MzIoKTsKIAotICAgICAgICAgICAgbW92ZShJbW0zMihv
cDJpbW0pLCByZWdUMSk7Ci0gICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyZWdUMSwg
ZnBSZWdUMSk7CisgICAgICAgICAgICBtb3ZlKEltbTMyKG9wMmltbSksIHJlZ1QyKTsKKyAgICAg
ICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJlZ1QyLCBmcFJlZ1QxKTsKIAogICAgICAgICAg
ICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoRG91YmxlKGNvbmRpdGlvbiwgZnBSZWdUMCwgZnBS
ZWdUMSksIHRhcmdldCk7CiAKQEAgLTMyMyw5ICszMzMsOSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBv
cDIsCiAgICAgICAgICAgICBmYWlsMS5saW5rKHRoaXMpOwogICAgICAgICB9CiAKLSAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QxKTsKLSAgICAgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMiwgcmVn
VDAsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGpzUmVnVDMy
KTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uLCByZWdUNCwganNSZWdUMTAsIGpzUmVnVDMyKTsKICAgICAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5W
YWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zMzQsOSArMzQ0
LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0
ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLAogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwogCiAgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewotICAgICAgICAg
ICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QxKTsKLSAgICAgICAgICAgIGFk
ZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7Ci0gICAgICAgICAgICBtb3ZlNjRUb0RvdWJs
ZShyZWdUMSwgZnBSZWdUMSk7CisgICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3RO
dW1iZXIoanNSZWdUMzIsIHJlZ1Q0KTsKKyAgICAgICAgICAgIHVuYm94RG91YmxlKGpzUmVnVDMy
LCBmcFJlZ1QxKTsKIAogICAgICAgICAgICAgaW50MzJfdCBvcDFpbW0gPSBnZXRDb25zdGFudE9w
ZXJhbmQob3AxKS5hc0ludDMyKCk7CiAKQEAgLTM1MCw5ICszNTksOSBAQCB2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdp
c3RlciBvcDIsCiAgICAgICAgICAgICBmYWlsMS5saW5rKHRoaXMpOwogICAgICAgICB9CiAKLSAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QyKTsKLSAgICAgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUMyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdU
MywgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGpz
UmVnVDEwKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uLCByZWdUNCwganNSZWdUMTAsIGpzUmVnVDMyKTsKICAgICAgICAg
ZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCBy
ZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNjAs
MTMgKzM2OSwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1
YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsCiAgICAgbGlua1Nsb3dDYXNlKGl0
ZXIpOyAvLyBMSFMgaXMgbm90IEludC4KIAogICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQo
KSkgewotICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApOwotICAg
ICAgICBKdW1wIGZhaWwyID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDEpOwotICAgICAgICBKdW1w
IGZhaWwzID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgICAgIGFkZDY0KG51bWJlclRhZ1Jl
Z2lzdGVyLCByZWdUMCk7Ci0gICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7
Ci0gICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKLSAgICAgICAgbW92ZTY0
VG9Eb3VibGUocmVnVDEsIGZwUmVnVDEpOworICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZO
b3ROdW1iZXIoanNSZWdUMTAsIHJlZ1Q0KTsKKyAgICAgICAgSnVtcCBmYWlsMiA9IGJyYW5jaElm
Tm90TnVtYmVyKGpzUmVnVDMyLCByZWdUNCk7CisgICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJ
ZkludDMyKGpzUmVnVDMyKTsKKyAgICAgICAgdW5ib3hEb3VibGUoanNSZWdUMTAsIGZwUmVnVDAp
OworICAgICAgICB1bmJveERvdWJsZShqc1JlZ1QzMiwgZnBSZWdUMSk7CiAKICAgICAgICAgZW1p
dEp1bXBTbG93VG9Ib3QoYnJhbmNoRG91YmxlKGNvbmRpdGlvbiwgZnBSZWdUMCwgZnBSZWdUMSks
IHRhcmdldCk7CiAKQEAgLTM3OCw4ICszODUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsCiAg
ICAgfQogCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90IEludC4KLSAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVn
VDIsIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1Q0LCBqc1JlZ1QxMCwganNSZWdUMzIpOwogICAgIGVt
aXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0
dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC0zODgsMTEgKzM5NSwxMSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9pbmMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluYz4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEludChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0
ZWRJbW0zMigxKSwgcmVnVDApKTsKLSAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIGpzUmVnVDEwKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbnQoanNSZWdUMTApOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKE92ZXJmbG93
LCBUcnVzdGVkSW1tMzIoMSksIGpzUmVnVDEwLnBheWxvYWRHUFIoKSkpOworICAgIGJveEludDMy
KGpzUmVnVDEwLnBheWxvYWRHUFIoKSwganNSZWdUMTApOworICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjRHN0LCBqc1JlZ1QxMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlYyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDAwLDExICs0MDcsMTEgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWM+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0OwogCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbnQocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFN1YjMyKE92ZXJmbG93
LCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7Ci0gICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVS
ZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCBqc1JlZ1QxMCk7CisgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW50KGpzUmVnVDEwKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hTdWIzMihP
dmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBqc1JlZ1QxMC5wYXlsb2FkR1BSKCkpKTsKKyAgICBi
b3hJbnQzMihqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHNyY0RzdCwganNSZWdUMTApOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gQkVHSU46IE9QX01PRCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gKi8KQEAgLTQ0MCw4ICs0NDcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBKdW1wIG51bWVyYXRvclBvc2l0aXZl
ID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCByZWdUNCwgVHJ1c3RlZEltbTMyKDApKTsK
ICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywgZWR4KSk7CiAgICAgbnVtZXJhdG9y
UG9zaXRpdmUubGluayh0aGlzKTsKLSAgICBib3hJbnQzMihlZHgsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQpOworICAgIGJveEludDMy
KGVkeCwganNSZWdUMTApOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCBqc1Jl
Z1QxMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKQEAgLTQ2OSwyNjQgKzQ3Niw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJikKIAogLyogLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVORDogT1BfTU9EIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSAqLwogCi0jZWxzZSAvLyBVU0UoSlNWQUxVRTY0KQotCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQotewotICAg
IEp1bXBMaXN0IG5vdEludDMyT3AxOwotICAgIEp1bXBMaXN0IG5vdEludDMyT3AyOwotCi0gICAg
YXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVj
b2RlLm1fcmhzOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotCi0gICAgLy8gQ2hhcmFjdGVyIGxlc3MuCi0gICAg
aWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AyLCByZWdUMSwgcmVnVDApOwotICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdENlbGwocmVnVDEpKTsKLSAgICAgICAgSnVtcExpc3QgZmFpbHVyZXM7Ci0gICAgICAgIGVt
aXRMb2FkQ2hhcmFjdGVyU3RyaW5nKHJlZ1QwLCByZWdUMCwgZmFpbHVyZXMpOwotICAgICAgICBh
ZGRTbG93Q2FzZShmYWlsdXJlcyk7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29tbXV0ZShj
b25kaXRpb24pLCByZWdUMCwgSW1tMzIoYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkp
LT50cnlHZXRWYWx1ZSgpWzBdKSksIHRhcmdldCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AxLCByZWdUMSwgcmVnVDApOwotICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdENlbGwocmVnVDEpKTsKLSAgICAgICAgSnVtcExpc3QgZmFpbHVyZXM7Ci0gICAgICAg
IGVtaXRMb2FkQ2hhcmFjdGVyU3RyaW5nKHJlZ1QwLCByZWdUMCwgZmFpbHVyZXMpOwotICAgICAg
ICBhZGRTbG93Q2FzZShmYWlsdXJlcyk7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0
aW9uLCByZWdUMCwgSW1tMzIoYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMikpLT50cnlH
ZXRWYWx1ZSgpWzBdKSksIHRhcmdldCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9IAotICAgIGlm
IChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AyLCByZWdUMywgcmVnVDIpOwotICAgICAgICBub3RJbnQzMk9wMi5hcHBlbmQoYnJh
bmNoSWZOb3RJbnQzMihyZWdUMykpOwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbW11dGUo
Y29uZGl0aW9uKSwgcmVnVDIsIEltbTMyKGdldENvbnN0YW50T3BlcmFuZChvcDEpLmFzSW50MzIo
KSkpLCB0YXJnZXQpOwotICAgIH0gZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkg
ewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDEsIHJlZ1QwKTsKLSAg
ICAgICAgbm90SW50MzJPcDEuYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmVnVDEpKTsKLSAgICAg
ICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIHJlZ1QwLCBJbW0zMihnZXRDb25zdGFudE9w
ZXJhbmQob3AyKS5hc0ludDMyKCkpKSwgdGFyZ2V0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDEsIHJlZ1QwKTsKLSAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QzLCByZWdUMik7Ci0gICAgICAgIG5vdEludDMyT3Ax
LmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJlZ1QxKSk7Ci0gICAgICAgIG5vdEludDMyT3AyLmFw
cGVuZChicmFuY2hJZk5vdEludDMyKHJlZ1QzKSk7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIo
Y29uZGl0aW9uLCByZWdUMCwgcmVnVDIpLCB0YXJnZXQpOwotICAgIH0KLQotICAgIGlmICghc3Vw
cG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKLSAgICAgICAgYWRkU2xvd0Nhc2Uobm90SW50MzJPcDEp
OwotICAgICAgICBhZGRTbG93Q2FzZShub3RJbnQzMk9wMik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgSnVtcCBlbmQgPSBqdW1wKCk7Ci0KLSAgICAvLyBEb3VibGUgbGVzcy4KLSAgICBl
bWl0QmluYXJ5RG91YmxlT3A8T3A+KGluc3RydWN0aW9uLCBPcGVyYW5kVHlwZXMoKSwgbm90SW50
MzJPcDEsIG5vdEludDMyT3AyLCAhaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSwgaXNPcGVyYW5k
Q29uc3RhbnRJbnQob3AxKSB8fCAhaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSk7Ci0gICAgZW5k
LmxpbmsodGhpcyk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0
X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBS
ZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5t
X2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7Ci0gICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7Ci0KLSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDMsIHJlZ1QyKTsKLSAgICAgICAgYWRkSnVt
cChicmFuY2gzMihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1QyLCBJbW0zMihnZXRDb25zdGFudE9w
ZXJhbmQob3AxKS5hc0ludDMyKCkpKSwgdGFyZ2V0KTsKLSAgICB9IGVsc2UgaWYgKGlzT3BlcmFu
ZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEs
IHJlZ1QxLCByZWdUMCk7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdU
MCwgSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMikuYXNJbnQzMigpKSksIHRhcmdldCk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QxLCBy
ZWdUMCk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMywgcmVnVDIp
OwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgcmVnVDAsIHJlZ1QyKSwgdGFy
Z2V0KTsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0
X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9u
YWxDb25kaXRpb24gY29uZGl0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3A+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7Ci0KLSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJ
bnQob3AxKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDMsIHJl
Z1QyKTsKLSAgICAgICAgY29tcGFyZTMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmVnVDIsIEltbTMy
KGdldENvbnN0YW50T3BlcmFuZChvcDEpLmFzSW50MzIoKSksIHJlZ1QwKTsKLSAgICB9IGVsc2Ug
aWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDEsIHJlZ1QxLCByZWdUMCk7Ci0gICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24s
IHJlZ1QwLCBJbW0zMihnZXRDb25zdGFudE9wZXJhbmQob3AyKS5hc0ludDMyKCkpLCByZWdUMCk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1Qx
LCByZWdUMCk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMywgcmVn
VDIpOwotICAgICAgICBjb21wYXJlMzIoY29uZGl0aW9uLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsK
LSAgICB9Ci0gICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKLX0KLQotdGVtcGxhdGUgPHR5
cGVuYW1lIE9wLCB0eXBlbmFtZSBTbG93T3BlcmF0aW9uPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0
aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0
aW9uLT5hczxPcD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwotICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OwotCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AxLCByZWdUMSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ay
LCByZWdUMywgcmVnVDIpOwotICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uLCByZWdUNCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVz
dDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7Ci19
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0QmluYXJ5RG91YmxlT3Ao
Y29uc3QgSW5zdHJ1Y3Rpb24gKmluc3RydWN0aW9uLCBPcGVyYW5kVHlwZXMgdHlwZXMsIEp1bXBM
aXN0JiBub3RJbnQzMk9wMSwgSnVtcExpc3QmIG5vdEludDMyT3AyLCBib29sIG9wMUlzSW5SZWdp
c3RlcnMsIGJvb2wgb3AySXNJblJlZ2lzdGVycykKLXsKLSAgICBKdW1wTGlzdCBlbmQ7Ci0KLSAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBvcGNvZGVJ
RCA9IE9wOjpvcGNvZGVJRDsKLSAgICBpbnQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5
dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsK
LQotICAgIGlmICghbm90SW50MzJPcDEuZW1wdHkoKSkgewotICAgICAgICAvLyBEb3VibGUgY2Fz
ZSAxOiBPcDEgaXMgbm90IGludDMyOyBPcDIgaXMgdW5rbm93bi4KLSAgICAgICAgbm90SW50MzJP
cDEubGluayh0aGlzKTsKLQotICAgICAgICBBU1NFUlQob3AxSXNJblJlZ2lzdGVycyk7Ci0KLSAg
ICAgICAgLy8gVmVyaWZ5IE9wMSBpcyBkb3VibGUuCi0gICAgICAgIGlmICghdHlwZXMuZmlyc3Qo
KS5kZWZpbml0ZWx5SXNOdW1iZXIoKSkKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMy
KEFib3ZlLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKLQotICAg
ICAgICBpZiAoIW9wMklzSW5SZWdpc3RlcnMpCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMiwgcmVnVDMsIHJlZ1QyKTsKLQotICAgICAgICBKdW1wIGRvdWJsZU9wMiA9IGJy
YW5jaDMyKEJlbG93LCByZWdUMywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpOwot
Ci0gICAgICAgIGlmICghdHlwZXMuc2Vjb25kKCkuZGVmaW5pdGVseUlzTnVtYmVyKCkpCi0gICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEludDMyKHJlZ1QzKSk7Ci0KLSAgICAgICAg
Y29udmVydEludDMyVG9Eb3VibGUocmVnVDIsIGZwUmVnVDApOwotICAgICAgICBKdW1wIGRvVGhl
TWF0aCA9IGp1bXAoKTsKLQotICAgICAgICAvLyBMb2FkIE9wMiBhcyBkb3VibGUgaW50byBkb3Vi
bGUgcmVnaXN0ZXIuCi0gICAgICAgIGRvdWJsZU9wMi5saW5rKHRoaXMpOwotICAgICAgICBlbWl0
TG9hZERvdWJsZShvcDIsIGZwUmVnVDApOwotCi0gICAgICAgIC8vIERvIHRoZSBtYXRoLgotICAg
ICAgICBkb1RoZU1hdGgubGluayh0aGlzKTsKLSAgICAgICAgc3dpdGNoIChvcGNvZGVJRCkgewot
ICAgICAgICBjYXNlIG9wX2psZXNzOgotICAgICAgICAgICAgZW1pdExvYWREb3VibGUob3AxLCBm
cFJlZ1QyKTsKLSAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFu
QW5kT3JkZXJlZCwgZnBSZWdUMiwgZnBSZWdUMCksIHRhcmdldCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBvcF9qbGVzc2VxOgotICAgICAgICAgICAgZW1pdExvYWREb3VibGUo
b3AxLCBmcFJlZ1QyKTsKLSAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUxl
c3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIGZwUmVnVDIsIGZwUmVnVDApLCB0YXJnZXQpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ugb3BfamdyZWF0ZXI6Ci0gICAgICAgICAgICBl
bWl0TG9hZERvdWJsZShvcDEsIGZwUmVnVDIpOwotICAgICAgICAgICAgYWRkSnVtcChicmFuY2hE
b3VibGUoRG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVkLCBmcFJlZ1QyLCBmcFJlZ1QwKSwgdGFy
Z2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIG9wX2pncmVhdGVyZXE6Ci0g
ICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDEsIGZwUmVnVDIpOwotICAgICAgICAgICAgYWRk
SnVtcChicmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCwgZnBS
ZWdUMiwgZnBSZWdUMCksIHRhcmdldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBvcF9qbmxlc3M6Ci0gICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDEsIGZwUmVnVDIpOwot
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlTGVzc1RoYW5PckVxdWFsT3JV
bm9yZGVyZWQsIGZwUmVnVDAsIGZwUmVnVDIpLCB0YXJnZXQpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2Ugb3Bfam5sZXNzZXE6Ci0gICAgICAgICAgICBlbWl0TG9hZERvdWJsZShv
cDEsIGZwUmVnVDIpOwotICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlTGVz
c1RoYW5PclVub3JkZXJlZCwgZnBSZWdUMCwgZnBSZWdUMiksIHRhcmdldCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBvcF9qbmdyZWF0ZXI6Ci0gICAgICAgICAgICBlbWl0TG9h
ZERvdWJsZShvcDEsIGZwUmVnVDIpOwotICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUo
RG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIGZwUmVnVDAsIGZwUmVnVDIpLCB0
YXJnZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6
Ci0gICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDEsIGZwUmVnVDIpOwotICAgICAgICAgICAg
YWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCwgZnBSZWdU
MCwgZnBSZWdUMiksIHRhcmdldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKCFub3RJbnQzMk9wMi5lbXB0eSgpKQotICAgICAgICAgICAgZW5k
LmFwcGVuZChqdW1wKCkpOwotICAgIH0KLQotICAgIGlmICghbm90SW50MzJPcDIuZW1wdHkoKSkg
ewotICAgICAgICAvLyBEb3VibGUgY2FzZSAyOiBPcDEgaXMgaW50MzI7IE9wMiBpcyBub3QgaW50
MzIuCi0gICAgICAgIG5vdEludDMyT3AyLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgQVNTRVJUKG9w
MklzSW5SZWdpc3RlcnMpOwotCi0gICAgICAgIGlmICghb3AxSXNJblJlZ2lzdGVycykKLSAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKG9wMSwgcmVnVDApOwotCi0gICAg
ICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKLQotICAgICAgICAvLyBW
ZXJpZnkgb3AyIGlzIGRvdWJsZS4KLSAgICAgICAgaWYgKCF0eXBlcy5zZWNvbmQoKS5kZWZpbml0
ZWx5SXNOdW1iZXIoKSkKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlLCBy
ZWdUMywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKLQotICAgICAgICAvLyBE
byB0aGUgbWF0aC4KLSAgICAgICAgc3dpdGNoIChvcGNvZGVJRCkgewotICAgICAgICBjYXNlIG9w
X2psZXNzOgotICAgICAgICAgICAgZW1pdExvYWREb3VibGUob3AyLCBmcFJlZ1QxKTsKLSAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCwgZnBS
ZWdUMCwgZnBSZWdUMSksIHRhcmdldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBvcF9qbGVzc2VxOgotICAgICAgICAgICAgZW1pdExvYWREb3VibGUob3AyLCBmcFJlZ1QxKTsK
LSAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFuT3JFcXVhbEFu
ZE9yZGVyZWQsIGZwUmVnVDAsIGZwUmVnVDEpLCB0YXJnZXQpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2Ugb3BfamdyZWF0ZXI6Ci0gICAgICAgICAgICBlbWl0TG9hZERvdWJsZShv
cDIsIGZwUmVnVDEpOwotICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlR3Jl
YXRlclRoYW5BbmRPcmRlcmVkLCBmcFJlZ1QwLCBmcFJlZ1QxKSwgdGFyZ2V0KTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIG9wX2pncmVhdGVyZXE6Ci0gICAgICAgICAgICBlbWl0
TG9hZERvdWJsZShvcDIsIGZwUmVnVDEpOwotICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3Vi
bGUoRG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCwgZnBSZWdUMCwgZnBSZWdUMSks
IHRhcmdldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBvcF9qbmxlc3M6Ci0g
ICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDIsIGZwUmVnVDEpOwotICAgICAgICAgICAgYWRk
SnVtcChicmFuY2hEb3VibGUoRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIGZwUmVn
VDEsIGZwUmVnVDApLCB0YXJnZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
b3Bfam5sZXNzZXE6Ci0gICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDIsIGZwUmVnVDEpOwot
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlTGVzc1RoYW5PclVub3JkZXJl
ZCwgZnBSZWdUMSwgZnBSZWdUMCksIHRhcmdldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBvcF9qbmdyZWF0ZXI6Ci0gICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDIsIGZw
UmVnVDEpOwotICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRo
YW5PckVxdWFsT3JVbm9yZGVyZWQsIGZwUmVnVDEsIGZwUmVnVDApLCB0YXJnZXQpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6Ci0gICAgICAgICAgICBl
bWl0TG9hZERvdWJsZShvcDIsIGZwUmVnVDEpOwotICAgICAgICAgICAgYWRkSnVtcChicmFuY2hE
b3VibGUoRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCwgZnBSZWdUMSwgZnBSZWdUMCksIHRh
cmdldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBl
bmQubGluayh0aGlzKTsKLX0KLQotI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCi0KIHZvaWQgSklU
OjplbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVC
bG9jay0+dW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4o
KS5tX3Byb2ZpbGVJbmRleCk7CkBAIC03NTMsMTcgKzUwMiwxMCBAQCB2b2lkIEpJVDo6ZW1pdEJp
dEJpbmFyeU9wRmFzdFBhdGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
UHJvZmlsaQogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEpT
VmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsK
LSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdU
Mik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gcmVnVDQ7Ci0jZW5kaWYKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgbGVm
dFJlZ3MgPSBqc1JlZ1QxMDsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0g
anNSZWdUMzI7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVn
czsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKIAogICAgIFNuaXBw
ZXRPcGVyYW5kIGxlZnRPcGVyYW5kOwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZDsK
QEAgLTc5OSwyMyArNTQxLDE3IEBAIHZvaWQgSklUOjplbWl0X29wX2JpdG5vdChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9v
cGVyYW5kOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotI2VuZGlmCisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDEsIGpzUmVnVDEwKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBs
ZWZ0UmVncyk7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEludDMyKGxlZnRSZWdzKSk7
Ci0gICAgbm90MzIobGVmdFJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdEludDMyKGpzUmVnVDEwKSk7CisgICAgbm90MzIoanNSZWdUMTAucGF5bG9hZEdQUigp
KTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGJveEludDMyKGxlZnRSZWdzLnBheWxvYWRHUFIo
KSwgbGVmdFJlZ3MpOworICAgIGJveEludDMyKGpzUmVnVDEwLnBheWxvYWRHUFIoKSwganNSZWdU
MTApOwogI2VuZGlmCiAKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29k
ZShieXRlY29kZSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgbGVmdFJl
Z3MpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCBqc1JlZ1QxMCk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2JpdGFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQpAQCAtODYxLDE3ICs1OTcsMTAgQEAgdm9pZCBKSVQ6OmVtaXRSaWdodFNoaWZ0RmFz
dFBhdGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgSklUUmlnaHQKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1Zh
bHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyBy
aWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7Ci0jZWxzZQotICAg
IEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBK
U1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHJlZ1Q0OwotI2VuZGlmCisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0ganNS
ZWdUMTA7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IGpzUmVnVDMyOwor
ICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgY29u
c3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CiAKICAgICBTbmlwcGV0T3BlcmFuZCBs
ZWZ0T3BlcmFuZDsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQ7CkBAIC05MzIsMTcg
KzY2MSwxMiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8R2VuZXJh
dG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogYwogICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgY29uc3RleHByIEdQ
UlJlZyBnbG9iYWxPYmplY3RHUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxQcm9maWxlZEZ1bmN0
aW9uLCAwPigpOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBzcmNSZWdzID0gcHJlZmVycmVk
QXJndW1lbnRKU1I8UHJvZmlsZWRGdW5jdGlvbiwgMT4oKTsKICAgICAvLyBBcml0aE5lZ2F0ZSBi
ZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0LgotICAg
IC8vIFNpbmNlIHJlZ1QxPT1hcmd1bWVudEdQUjEsIHVzaW5nIHJlZ1QxIGF2b2lkIHNodWZmbGlu
ZyByZWdpc3RlciB0byBjYWxsIHRoZSBzbG93IHBhdGguCi0gICAgSlNWYWx1ZVJlZ3Mgc3JjUmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDEpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7Ci0jZWxzZQot
ICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7Ci0jZW5kaWYKKyAgICBjb25zdGV4cHIgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IHNyY1JlZ3M7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNo
R1BSID0gZ2xvYmFsT2JqZWN0R1BSOworICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKHNyY1Jl
Z3MsIHNjcmF0Y2hHUFIpKTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8g
aW5saW5lU3RhcnQgPSBsYWJlbCgpOwpAQCAtOTU3LDExICs2ODEsMTEgQEAgdm9pZCBKSVQ6OmVt
aXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5z
dHJ1Y3Rpb24qIGMKICAgICBib29sIGdlbmVyYXRlZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVy
YXRlSW5saW5lKCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUpOwogICAgIGlmICghZ2VuZXJh
dGVkSW5saW5lQ29kZSkgewogICAgICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
ID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKLSAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3Jh
dGNoR1BSKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOwogICAg
ICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3Ms
IHNjcmF0Y2hHUFIsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAgICAgICAgICBjYWxsT3Bl
cmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBnbG9iYWxPYmpl
Y3RHUFIsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3Ms
IHNjcmF0Y2hHUFIsIHNyY1JlZ3MpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1
bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgZ2xvYmFsT2JqZWN0R1BSLCBzcmNS
ZWdzKTsKICAgICB9IGVsc2UKICAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0
YXRlLnNsb3dQYXRoSnVtcHMpOwogCkBAIC05ODQsMTcgKzcwOCwxMyBAQCB2b2lkIEpJVDo6ZW1p
dE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5z
dHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAg
IFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAotI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAg
SlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDIpOwotICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSByZWdUMzsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwot
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7Ci0jZW5kaWYKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFByb2ZpbGVkRnVuY3Rp
b24sIDA+KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gcHJlZmVycmVk
QXJndW1lbnRKU1I8UHJvZmlsZWRGdW5jdGlvbiwgMT4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1
ZVJlZ3MgcmlnaHRSZWdzID0gcHJlZmVycmVkQXJndW1lbnRKU1I8UHJvZmlsZWRGdW5jdGlvbiwg
Mj4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJldHVyblZhbHVl
SlNSOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q1OworICAgIHN0YXRp
Y19hc3NlcnQobm9PdmVybGFwKGxlZnRSZWdzLCByaWdodFJlZ3MsIHNjcmF0Y2hHUFIpKTsKKyAg
ICBzdGF0aWNfYXNzZXJ0KG5vT3ZlcmxhcChyZXN1bHRSZWdzLCBzY3JhdGNoR1BSKSk7CiAKICAg
ICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJz
dCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5k
VHlwZXMuc2Vjb25kKCkpOwpAQCAtMTAyOCwxMSArNzQ4LDExIEBAIHZvaWQgSklUOjplbWl0TWF0
aElDRmFzdChKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVj
dGlvbioKICAgICAgICAgZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwogICAgICAgICBCaW5h
cnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7Ci0g
ICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAgICAgIGxvYWRHbG9iYWxP
YmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91
bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChw
cm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRS
ZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQo
cHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgZ2xvYmFsT2JqZWN0R1BSLCBsZWZ0UmVncywg
cmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3Jh
dGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25X
aXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIGdsb2JhbE9iamVjdEdQ
UiwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGFkZFNsb3dDYXNl
KG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAtMTA1NiwyNyArNzc2
LDIzIEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+
KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5
dGVjb2RlLm1fZHN0OwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBzcmNS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMCk7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpOwotI2VuZGlmCisgICAgY29uc3RleHByIEdQUlJlZyBnbG9i
YWxPYmpldEdQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFByb2ZpbGVkRnVuY3Rpb24sIDA+KCk7
CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBwcmVmZXJyZWRBcmd1bWVudEpT
UjxQcm9maWxlZEZ1bmN0aW9uLCAxPigpOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gcmV0dXJuVmFsdWVKU1I7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAg
ICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogI2VuZGlmCiAKICAgICBVbmFyeUFyaXRo
UHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKLSAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1Q0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamV0R1BS
KTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAg
ICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAg
ICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0dKTWljPihwcm9m
aWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVk
SW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQ
YXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRP
cGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgZ2xv
YmFsT2JqZXRHUFIsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCByZWdUNCwg
c3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9u
LCByZXN1bHRSZWdzLCBnbG9iYWxPYmpldEdQUiwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAg
ICB9IGVsc2UKLSAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pN
aWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVk
SW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhD
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJh
dGlvbl9HSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgZ2xvYmFsT2JqZXRHUFIs
IHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19T
VEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKQEAgLTExMDUsMTYgKzgyMSwx
MSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4q
IG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5
dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsK
IAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0j
ZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIp
OwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSNlbmRpZgotICAgIAor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZXRHUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQ
UjxQcm9maWxlZEZ1bmN0aW9uLCAwPigpOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBsZWZ0
UmVncyA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFByb2ZpbGVkRnVuY3Rpb24sIDE+KCk7CisgICAg
Y29uc3RleHByIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFBy
b2ZpbGVkRnVuY3Rpb24sIDI+KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSByZXR1cm5WYWx1ZUpTUjsKKwogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5
dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0
T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7CiAKQEAgLTExMzUsMTQg
Kzg0NiwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVy
YXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qCiAjZW5kaWYKIAogICAgIEJpbmFyeUFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKLSAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamV0
R1BSKTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewog
ICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkK
LSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9m
aWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRS
ZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlv
blN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2Fz
dDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0
UmVncywgZ2xvYmFsT2JqZXRHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIo
bWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9u
LCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsK
KyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBnbG9iYWxPYmpl
dEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAg
ICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHJlcGF0Y2hGdW5j
dGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1t
UHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dK
Sk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgZ2xvYmFsT2JqZXRHUFIsIGxlZnRS
ZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAKICNpZiBFTkFCTEUoTUFU
SF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKQEAgLTExNjcsMTgg
Kzg3OCwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0jaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsK
LSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0g
cmVnVDI7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OwotI2VuZGlmCi0gICAgRlBSUmVnIHNjcmF0Y2hGUFIg
PSBmcFJlZ1QyOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IGpzUmVnVDEw
OworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBqc1JlZ1QzMjsKKyAgICBj
b25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworICAgIGNvbnN0ZXhwciBGUFJSZWcgc2NyYXRj
aEZQUiA9IGZwUmVnVDI7CiAKICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
IG51bGxwdHI7CiAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYzMyXzY0LmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYzMyXzY0LmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMmRkYmNiMzA2OGJlZDliNzU4NzQ1ODEzZGM1NTQzZWVlOThkNWEzYy4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMzMl82NC5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwxMDMgKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBt
ZXQ6Ci0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0q
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0qIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0q
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLQotI2lmIEVOQUJMRShKSVQpCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSNpbmNsdWRl
ICJKSVQuaCIKLQotI2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIkpJVElubGluZXMu
aCIKLSNpbmNsdWRlICJKU0FycmF5LmgiCi0jaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgotI2luY2x1
ZGUgIkludGVycHJldGVyLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlJl
c3VsdFR5cGUuaCIKLSNpbmNsdWRlICJTbG93UGF0aENhbGwuaCIKLQotCi1uYW1lc3BhY2UgSlND
IHsKLQotdm9pZCBKSVQ6OmVtaXRfb3BfdW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFVuc2lnbmVkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwot
ICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMSwgcmVnVDApOwotICAg
IAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SW50MzIocmVnVDEpKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2gzMihMZXNzVGhhbiwgcmVnVDAsIFRydXN0ZWRJbW0zMigwKSkpOwotICAgIGVt
aXRTdG9yZUludDMyKHJlc3VsdCwgcmVnVDAsIHJlc3VsdCA9PSBvcDEpOwotfQotCi12b2lkIEpJ
VDo6ZW1pdF9vcF9pbmMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsK
LSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluYz4oKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7Ci0KLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDEsIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90SW50MzIocmVnVDEpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQz
MihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOwotICAgIGVtaXRTdG9yZUludDMy
KHNyY0RzdCwgcmVnVDAsIHRydWUpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
RHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
Y0RzdCwgcmVnVDEsIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SW50MzIo
cmVnVDEpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hTdWIzMihPdmVyZmxvdywgVHJ1c3RlZElt
bTMyKDEpLCByZWdUMCkpOwotICAgIGVtaXRTdG9yZUludDMyKHNyY0RzdCwgcmVnVDAsIHRydWUp
OwotfQotCi0vLyBNb2QgKCUpCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBC
RUdJTjogT1BfTU9EIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi12b2lkIEpJ
VDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsK
LSAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgc2xvd19wYXRoX21vZCk7Ci0gICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKLX0KLQotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKQotewotICAgIC8vIFdlIHdvdWxkIGhhdmUgcmVhbGx5IHVzZWZ1bCBh
c3NlcnRpb25zIGhlcmUgaWYgaXQgd2Fzbid0IGZvciB0aGUgY29tcGlsZXIncwotICAgIC8vIGlu
c2lzdGVuY2Ugb24gYXR0cmlidXRlIG5vcmV0dXJuLgotICAgIC8vIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFTkQ6
IE9QX01PRCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotfSAvLyBuYW1lc3Bh
Y2UgSlNDCi0KLSNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQotI2VuZGlmIC8vIEVOQUJMRShK
SVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hl
R2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2Vu
ZXJhdG9yLmgKaW5kZXggZjMyMGNiYmMyOGJiODc0MWM5ZWQ2OWY4Y2UxYTFmNTE4YTk5NGM5MS4u
M2UyNmRiOTU3ZTNlZDQ2ZGY4NWNlZWI3ZTNkNTJiYWI0ZDRjNTQxMSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaApAQCAtMjcs
NiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKEpJVCkKIAorI2luY2x1ZGUgIkFzc2VtYmx5SGVscGVy
cy5oIgogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJKSVRPcGVyYXRpb25WYWxp
ZGF0aW9uLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgpAQCAtMTEzLDI1ICsxMTQsMjUg
QEAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDMgPSBHUFJJbmZvOjpyZWdUNTsKIAog
bmFtZXNwYWNlIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVycyB7CiAjaWYgVVNFKEpTVkFMVUU2
NCkKLWNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0IHsgR1BSSW5mbzo6cmVnVDAgfTsKLWNvbnN0ZXhw
ciBHUFJSZWcgdmFsdWUgeyBHUFJJbmZvOjphcmd1bWVudEdQUjIgfTsKLWNvbnN0ZXhwciBHUFJS
ZWcgcHJvdG8geyBHUFJJbmZvOjphcmd1bWVudEdQUjMgfTsKLWNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm8geyBHUFJJbmZvOjphcmd1bWVudEdQUjEgfTsKLWNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aDEgeyBHUFJJbmZvOjpub25BcmdHUFIwIH07Ci1jb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyIHsg
R1BSSW5mbzo6bm9uQXJnR1BSMSB9OworY29uc3RleHByIEpTVmFsdWVSZWdzIHJlc3VsdEpTUiB7
IEdQUkluZm86OnJlZ1QwIH07Citjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgdmFsdWVKU1IgeyBHUFJJ
bmZvOjphcmd1bWVudEdQUjIgfTsKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyBwcm90b0pTUiB7IEdQ
UkluZm86OmFyZ3VtZW50R1BSMyB9OworY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiB7IEdQ
UkluZm86OmFyZ3VtZW50R1BSMSB9OworY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMUdQUiB7IEdQ
UkluZm86Om5vbkFyZ0dQUjAgfTsKK2NvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDJHUFIgeyBHUFJJ
bmZvOjpub25BcmdHUFIxIH07CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotY29uc3RleHByIEdQ
UlJlZyByZXN1bHRHUFIgeyBHUFJJbmZvOjpyZWdUMCB9OwotY29uc3RleHByIEpTVmFsdWVSZWdz
IHZhbHVlSlNSICB7IEdQUkluZm86OmFyZ3VtZW50R1BSMywgR1BSSW5mbzo6YXJndW1lbnRHUFIy
IH07Ci1jb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcHJvdG9KU1IgIHsgR1BSSW5mbzo6cmVnVDUsIEdQ
UkluZm86OnJlZ1Q0IH07Citjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmVzdWx0SlNSIHsgSlNSSW5m
bzo6anNSZWdUMTAgfTsKKyNpZiBDUFUoTUlQUykKK2NvbnN0ZXhwciBKU1ZhbHVlUmVncyB2YWx1
ZUpTUiB7IEdQUkluZm86OmFyZ3VtZW50R1BSMywgR1BSSW5mbzo6YXJndW1lbnRHUFIyIH07Cisj
ZWxzZQorY29uc3RleHByIEpTVmFsdWVSZWdzIHZhbHVlSlNSIHsgSlNSSW5mbzo6anNSZWdUMzIg
fTsKKyNlbmRpZgorY29uc3RleHByIEpTVmFsdWVSZWdzIHByb3RvSlNSIHsgSlNSSW5mbzo6anNS
ZWdUNTQgfTsKIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgeyBHUFJJbmZvOjpyZWdUMSB9
OwogY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMUdQUiB7IEdQUkluZm86OnJlZ1Q2IH07CiBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2gyR1BSIHsgR1BSSW5mbzo6cmVnVDcgfTsKLXN0YXRpY19hc3Nl
cnQoIXZhbHVlSlNSLnVzZXMocmVzdWx0R1BSKSk7Ci1zdGF0aWNfYXNzZXJ0KCF2YWx1ZUpTUi5v
dmVybGFwcyhwcm90b0pTUikpOwotc3RhdGljX2Fzc2VydCghdmFsdWVKU1IudXNlcyhzdHViSW5m
b0dQUikpOwotc3RhdGljX2Fzc2VydCghdmFsdWVKU1IudXNlcyhzY3JhdGNoMUdQUikpOwotc3Rh
dGljX2Fzc2VydCghdmFsdWVKU1IudXNlcyhzY3JhdGNoMkdQUikpOwogI2VuZGlmCitzdGF0aWNf
YXNzZXJ0KEFzc2VtYmx5SGVscGVyczo6bm9PdmVybGFwKHZhbHVlSlNSLCBwcm90b0pTUiwgc3R1
YkluZm9HUFIsIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUikpOwogfQogCiBuYW1lc3BhY2UgQmFz
ZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVz
LmgKaW5kZXggZGI4MTkwN2Y5YjA0NDBmNjdiZmNkODYyZGM4YTRlMjhjZjliODU0YS4uMGU1MmQ4
ZjYyZjhkN2E1NzIxNTg0MTVjNjJmOTg2ZjgzZWNkMmQwNCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRJbmxpbmVzLmgKQEAgLTMzLDYgKzMzLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
KyNpZiBVU0UoSlNWQUxVRTY0KQogQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29u
c3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICBpZiAoIXNyYy5pc0NvbnN0
YW50KCkpCkBAIC00MSw2ICs0Miw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFu
ZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKIH0KKyNl
bmRpZgogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEludChWaXJ0
dWFsUmVnaXN0ZXIgc3JjKQogewpAQCAtNjksMTcgKzcxLDYgQEAgQUxXQVlTX0lOTElORSBKU1Zh
bHVlIEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBzcmMpCiAgICAgcmV0
dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CiB9CiAKLUFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZy
b20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKLXsKLSAgICBBU1NFUlQoZW50cnkuaXNIZWFkZXIo
KSk7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpJbnQzMlRhZyksIHRhZ0ZvcihlbnRyeSkpOwotICAgIHN0b3JlMzIoZnJvbSwgcGF5bG9h
ZEZvcihlbnRyeSkpOwotI2Vsc2UKLSAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZW50cnkp
KTsKLSNlbmRpZgotfQotCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0TG9hZENoYXJhY3Rl
clN0cmluZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QsIEp1bXBMaXN0JiBmYWlsdXJl
cykKIHsKICAgICBmYWlsdXJlcy5hcHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcoc3JjKSk7CkBAIC0x
OTAsMTIgKzE4MSw2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoCiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlSlNSKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKLXsKLSAgICBpZiAoIWlzS25vd25DZWxs
KHJlZykpCi0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLX0KLQogQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6bGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgoVmVjdG9yPFNsb3dDYXNl
RW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIs
IEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKICAgICB3aGlsZSAoaXRlciAhPSBzbG93
Q2FzZXMuZW5kKCkgJiYgaXRlci0+dG8gPT0gYnl0ZWNvZGVJbmRleCkKQEAgLTMwNywxNCArMjky
LDYgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1
YWxSZWdpc3RlciBzcmMpCiAgICAgcmV0dXJuIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3Ry
aW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5n
dGgoKSA9PSAxOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWlubGluZSBzdGQ6OmVuYWJs
ZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6Om1fcHJvZmlsZSksIFZh
bHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPiBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlBy
b2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKQotewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIGpzUmVnVDEwKTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9m
aWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZSguLi4pIHsgfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBC
eXRlY29kZT4KIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBC
eXRlY29kZSYgYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHZhbHVlKQogewpAQCAtMzI1LDE0ICszMDIs
NiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNv
ZGUmIGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB2YQogICAgIHN0b3JlVmFsdWUodmFsdWUsIEFkZHJl
c3Moc19tZXRhZGF0YUdQUiwgb2Zmc2V0KSk7CiB9CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotdGVt
cGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBHUFJSZWcgcmVzdWx0UmVnKQotewot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJl
ZykpOwotfQotI2VuZGlmCi0KIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KIGlubGluZSB2
b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBi
eXRlY29kZSwgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlLCBSZWdpc3RlcklEIGNlbGxH
UFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKIHsKQEAgLTM1MywxMCArMzIyLDEyIEBAIEFMV0FZ
U19JTkxJTkUgaW50MzJfdCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0
ZXIgc3JjKQogICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0ludDMyKCk7CiB9
CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQogQUxXQVlTX0lOTElORSBkb3VibGUgSklUOjpnZXRPcGVy
YW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICByZXR1cm4gZ2V0
Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNEb3VibGUoKTsKIH0KKyNlbmRpZgogCiBBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CkBA
IC0zODEsMTQgKzM1MiwxMSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIEpTVmFsdWVSZWdzCiAgICAgc3RvcmVWYWx1
ZShmcm9tLCBhZGRyZXNzRm9yKGRzdCkpOwogfQogCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLUFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lz
dGVyIHNyYywgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCkKLXsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgSlNWYWx1ZVJlZ3MgeyB0YWcsIHBheWxvYWQgfSk7Ci19
Ci0KIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2Fk
KFZpcnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQgZHN0KQogeworI2lmIFVTRShKU1ZBTFVF
NjQpCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIEpTVmFsdWVSZWdzIHsgZHN0IH0p
OworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsg
Ly8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRo
IGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KICAgICBpZiAoc3Jj
LmlzQ29uc3RhbnQoKSkgewogICAgICAgICBpZiAobV9wcm9maWxlZENvZGVCbG9jay0+aXNDb25z
dGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayhzcmMpKQpAQCAtMzk4LDggKzM2NiwxMCBAQCBB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChWaXJ0
dWFsUmVnaXN0ZXIgc3JjLCBSZWdpcwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGxvYWQz
MihwYXlsb2FkRm9yKHNyYyksIGRzdCk7CisjZW5kaWYKIH0KIAorI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKFZp
cnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQgZHN0KQogewogICAgIEFTU0VSVChtX2J5dGVj
b2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhv
dC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgpA
QCAtNDE4LDEyNSArMzg4LDEwIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCBkCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMsIEpTVmFsdWVSZWdzIHsgZHN0IH0pOwogfQogCi1BTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChWaXJ0dWFsUmVn
aXN0ZXIgc3JjLCBSZWdpc3RlcklEIGRzdCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywgSlNWYWx1ZVJlZ3MgeyBkc3QgfSk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBm
cm9tKQogewogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyB7IGZy
b20gfSk7CiB9Ci0jZW5kaWYKLQotCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLQotaW5saW5lIHZv
aWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQg
dmFsdWUpCi17Ci0gICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgQVNTRVJUKG1f
cHJvZmlsZWRDb2RlQmxvY2stPmlzQ29uc3RhbnRPd25lZEJ5VW5saW5rZWRDb2RlQmxvY2socmVn
KSk7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7Ci0gICAgICAgIGxvYWREb3Vi
bGUoVHJ1c3RlZEltbVB0cigmaW5Db25zdGFudFBvb2wpLCB2YWx1ZSk7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0ZvcihyZWcpLCB2YWx1ZSk7Ci19Ci0KLQotaW5saW5l
IHZvaWQgSklUOjplbWl0U3RvcmUoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcs
IFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlKQotewotICAgIHN0b3JlMzIocGF5
bG9hZCwgcGF5bG9hZEZvcihyZWcsIGJhc2UpKTsKLSAgICBzdG9yZTMyKHRhZywgdGFnRm9yKHJl
ZywgYmFzZSkpOwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUludDMyKFZpcnR1YWxS
ZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIpCi17Ci0g
ICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHJlZykpOwotICAgIGlmICghaW5kZXhJc0lu
dDMyKQotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRh
Z0ZvcihyZWcpKTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVDZWxsKFZpcnR1YWxS
ZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQ2VsbCkKLXsKLSAg
ICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IocmVnKSk7Ci0gICAgaWYgKCFpbmRleElzQ2Vs
bCkKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhZ0Zv
cihyZWcpKTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVCb29sKFZpcnR1YWxSZWdp
c3RlciByZWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQm9vbCkKLXsKLSAgICBz
dG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IocmVnKSk7Ci0gICAgaWYgKCFpbmRleElzQm9vbCkK
LSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyksIHRhZ0Zv
cihyZWcpKTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoVmlydHVhbFJlZ2lzdGVy
IHJlZywgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVnaXN0ZXJJRCBiYXNlKQotewotICAgIHN0
b3JlMzIoSW1tMzIoY29uc3RhbnQucGF5bG9hZCgpKSwgcGF5bG9hZEZvcihyZWcsIGJhc2UpKTsK
LSAgICBzdG9yZTMyKEltbTMyKGNvbnN0YW50LnRhZygpKSwgdGFnRm9yKHJlZywgYmFzZSkpOwot
fQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFs
UmVnaXN0ZXIgcmVnKQotewotICAgIGlmICghaXNLbm93bkNlbGwocmVnKSkgewotICAgICAgICBp
ZiAocmVnLmlzQ29uc3RhbnQoKSkKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGVtaXRKdW1wSWZOb3RKU0NlbGwo
cmVnKSk7Ci0gICAgfQotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZykKLXsKLSAgICBpZiAo
IWlzS25vd25DZWxsKHJlZykpIHsKLSAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCi0gICAg
ICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwodGFnKSk7Ci0gICAgfQotfQotCi1BTFdBWVNfSU5M
SU5FIGJvb2wgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIG9wMSwg
VmlydHVhbFJlZ2lzdGVyIG9wMiwgVmlydHVhbFJlZ2lzdGVyJiBvcCwgaW50MzJfdCYgY29uc3Rh
bnQpCi17Ci0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKLSAgICAgICAgY29u
c3RhbnQgPSBnZXRDb25zdGFudE9wZXJhbmQob3AxKS5hc0ludDMyKCk7Ci0gICAgICAgIG9wID0g
b3AyOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoaXNPcGVyYW5kQ29u
c3RhbnRJbnQob3AyKSkgewotICAgICAgICBjb25zdGFudCA9IGdldENvbnN0YW50T3BlcmFuZChv
cDIpLmFzSW50MzIoKTsKLSAgICAgICAgb3AgPSBvcDE7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLSNlbHNlIC8vIFVTRShKU1ZBTFVF
MzJfNjQpCi0KLUFMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZkJvdGhKU0Nl
bGxzKFJlZ2lzdGVySUQgcmVnMSwgUmVnaXN0ZXJJRCByZWcyLCBSZWdpc3RlcklEIHNjcmF0Y2gp
Ci17Ci0gICAgbW92ZShyZWcxLCBzY3JhdGNoKTsKLSAgICBvcjY0KHJlZzIsIHNjcmF0Y2gpOwot
ICAgIHJldHVybiBicmFuY2hJZkNlbGwoc2NyYXRjaCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZkpTQ2VsbChSZWdpc3RlcklEIHJlZykKLXsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnKSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJlZywgVmlydHVhbFJl
Z2lzdGVyIHZSZWcpCi17Ci0gICAgaWYgKCFpc0tub3duQ2VsbCh2UmVnKSkKLSAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZyk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgSklUOjpQ
YXRjaGFibGVKdW1wIEpJVDo6ZW1pdFBhdGNoYWJsZUp1bXBJZk5vdEludChSZWdpc3RlcklEIHJl
ZykKLXsKLSAgICByZXR1cm4gcGF0Y2hhYmxlQnJhbmNoNjQoQmVsb3csIHJlZywgbnVtYmVyVGFn
UmVnaXN0ZXIpOwotfQogCiBBTFdBWVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmVtaXRKdW1wSWZO
b3RJbnQoUmVnaXN0ZXJJRCByZWcxLCBSZWdpc3RlcklEIHJlZzIsIFJlZ2lzdGVySUQgc2NyYXRj
aCkKIHsKQEAgLTU0NSwyNiArNDAwLDIwIEBAIEFMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6
ZW1pdEp1bXBJZk5vdEludChSZWdpc3RlcklEIHJlZzEsIFJlZ2lzdGVySUQgcmVnMiwKICAgICBy
ZXR1cm4gYnJhbmNoSWZOb3RJbnQzMihzY3JhdGNoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KFJlZ2lzdGVySUQgcmVnKQotewotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90SW50MzIocmVnKSk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChSZWdpc3RlcklEIHJlZzEsIFJlZ2lzdGVy
SUQgcmVnMiwgUmVnaXN0ZXJJRCBzY3JhdGNoKQogewogICAgIGFkZFNsb3dDYXNlKGVtaXRKdW1w
SWZOb3RJbnQocmVnMSwgcmVnMiwgc2NyYXRjaCkpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3ROdW1iZXIoUmVnaXN0ZXJJRCByZWcpCitBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoUmVnaXN0ZXJJRCBncHIp
CiB7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnKSk7CisgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW50KEpTVmFsdWVSZWdzIHsgZ3ByIH0pOwogfQorI2VuZGlmCiAKLSNl
bmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcpCitBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoSlNWYWx1ZVJlZ3MganNyKQogewotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWcpKTsKKyAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdEludDMyKGpzcikpOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoSlNWYWx1ZVJlZ3MgcmVnKQpAQCAtNjYyLDEzICs1MTEsMTkg
QEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZENvZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxS
ZWdpc3RlciBjb25zdGFudCwgSlNWYWx1ZVIKICAgICBsb2FkVmFsdWUoQWRkcmVzcyhkc3QucGF5
bG9hZEdQUigpLCBjb25zdGFudC50b0NvbnN0YW50SW5kZXgoKSAqIHNpemVvZihSZWdpc3Rlcikp
LCBkc3QpOwogfQogCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKIEFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudFBheWxvYWQoVmlydHVhbFJlZ2lzdGVyIGNvbnN0YW50
LCBSZWdpc3RlcklEIGRzdCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudC5pc0NvbnN0
YW50KCkpOwogICAgIGxvYWRBZGRyT2ZDb2RlQmxvY2tDb25zdGFudEJ1ZmZlcigqdGhpcywgZHN0
KTsKLSAgICBsb2FkMzIoQWRkcmVzcyhkc3QsIGNvbnN0YW50LnRvQ29uc3RhbnRJbmRleCgpICog
c2l6ZW9mKFJlZ2lzdGVyKSArIFBheWxvYWRPZmZzZXQpLCBkc3QpOworICAgIEFkZHJlc3MgYWRk
cmVzcyhkc3QsIGNvbnN0YW50LnRvQ29uc3RhbnRJbmRleCgpICogc2l6ZW9mKFJlZ2lzdGVyKSk7
CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBsb2FkNjQoYWRkcmVzcywgZHN0KTsKKyNlbGlmIFVT
RShKU1ZBTFVFMzJfNjQpCisgICAgbG9hZDMyKGFkZHJlc3Mud2l0aE9mZnNldChQYXlsb2FkT2Zm
c2V0KSwgZHN0KTsKKyNlbmRpZgogfQorCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKIEFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudFRhZyhWaXJ0dWFsUmVnaXN0ZXIg
Y29uc3RhbnQsIFJlZ2lzdGVySUQgZHN0KQogewogICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50
LmlzQ29uc3RhbnQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE11bEdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE11bEdlbmVy
YXRvci5jcHAKaW5kZXggNDdmMzJlY2YzYzdhZjZjZTVkNmFhYzU5ZmNhM2EwNjRjNDMzNjY4OC4u
YjRiNTcwN2Y5ZmYwOTk0ZTk0M2E4MTc1ZTE4ZTg1ZTMxZWNhMjU0MiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNdWxHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUTXVsR2VuZXJhdG9yLmNwcApAQCAtOTQsMTEgKzk0LDExIEBA
IGJvb2wgSklUTXVsR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0
LCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0CiAgICAgQVNTRVJUKG1fc2NyYXRjaEdQUiAhPSBJbnZh
bGlkR1BSUmVnKTsKICAgICBBU1NFUlQobV9zY3JhdGNoR1BSICE9IG1fbGVmdC5wYXlsb2FkR1BS
KCkpOwogICAgIEFTU0VSVChtX3NjcmF0Y2hHUFIgIT0gbV9yaWdodC5wYXlsb2FkR1BSKCkpOwot
I2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgQVNTRVJUKG1fc2NyYXRjaEdQUiAhPSBtX3Jlc3VsdC5w
YXlsb2FkR1BSKCkpOwotI2Vsc2UKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIEFTU0VSVCht
X3NjcmF0Y2hHUFIgIT0gbV9sZWZ0LnRhZ0dQUigpKTsKICAgICBBU1NFUlQobV9zY3JhdGNoR1BS
ICE9IG1fcmlnaHQudGFnR1BSKCkpOworICAgIEFTU0VSVChtX3NjcmF0Y2hHUFIgIT0gbV9yZXN1
bHQudGFnR1BSKCkpOwogI2VuZGlmCiAKICAgICBBU1NFUlQoIW1fbGVmdE9wZXJhbmQuaXNQb3Np
dGl2ZUNvbnN0SW50MzIoKSB8fCAhbV9yaWdodE9wZXJhbmQuaXNQb3NpdGl2ZUNvbnN0SW50MzIo
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAppbmRleCA0YzJmMzJk
YWRiNWUzYWJkZGFiYjI5Y2NkNmJiNDZmZjA5ZDlkZDMyLi40Yzg2MzE0OWFkYjljOTMwMDM0OTg4
NzE3MTExYzAyNDk3MzVmM2ZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
cy5jcHAKQEAgLTEyMCw3ICsxMjAsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUpTUik7CiB9CiAKLSNpZiBVU0Uo
SlNWQUxVRTY0KQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CkBAIC0xMjksMjYgKzEyOCwy
MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0cnVj
dG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFzSW5z
dGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJQYXlsb2FkKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QyKTsKIAogICAgIC8vIFdl
IGRvbid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4K
KyAgICBtb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwogICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDEpOwotICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RF
cXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVj
dCwgbV9mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbikpKTsKLQotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QwKTsKLQorICAgIEp1bXAgY3Vz
dG9tSGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDIsIEFkZHJlc3Mo
cmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV9mdW5jdGlvblByb3RvSGFz
SW5zdGFuY2VTeW1ib2xGdW5jdGlvbikpKTsKKyAgICAvLyBXZSBrbm93IHRoYXQgY29uc3RydWN0
b3IgaXMgYW4gb2JqZWN0IGZyb20gdGhlIHdheSBieXRlY29kZSBpcyBlbWl0dGVkIGZvciBpbnN0
YW5jZW9mIGV4cHJlc3Npb25zLgorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGNv
bnN0cnVjdG9yLCByZWdUMik7CiAgICAgLy8gQ2hlY2sgdGhhdCBjb25zdHJ1Y3RvciAnSW1wbGVt
ZW50c0RlZmF1bHRIYXNJbnN0YW5jZScgaS5lLiB0aGUgb2JqZWN0IGlzIG5vdCBhIEMtQVBJIHVz
ZXIgbm9yIGEgYm91bmQgZnVuY3Rpb24uCi0gICAgdGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSW1wbGVtZW50c0Rl
ZmF1bHRIYXNJbnN0YW5jZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICB0ZXN0OChaZXJv
LCBBZGRyZXNzKHJlZ1QyLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgcmVnVDApOworICAgIGN1c3RvbUhh
c0luc3RhbmNlVmFsdWUubGluayh0aGlzKTsKIAotICAgIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUu
bGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCBy
ZWdUMCk7Ci0KLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgIGJveEJvb2xlYW4ocmVnVDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwganNSZWdUMTApOwogfQogCisKIHZvaWQgSklUOjplbWl0X29wX2lu
c3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7CkBA
IC0xNTYsMjYgKzE1MiwyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29k
ZS5tX3Byb3RvdHlwZTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGlu
ZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvdG9H
UFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpyZXN1bHQ7Ci0g
ICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lz
dGVyczo6c3R1YkluZm87CisgICAgdXNpbmcgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpy
ZXN1bHRKU1I7CisgICAgdXNpbmcgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZUpT
UjsKKyAgICB1c2luZyBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvSlNSOworICAg
IHVzaW5nIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm9HUFI7CisgICAgdXNp
bmcgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMUdQUjsKKyAgICB1c2luZyBC
YXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnNjcmF0Y2gyR1BSOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvdG8sIHByb3RvR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2
YWx1ZUpTUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcHJvdG9KU1IpOwog
ICAgIAogICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUg
YSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJ
bnN0YW5jZS4KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodmFsdWVHUFIsIHZhbHVl
KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvdG9HUFIsIHByb3RvKTsKKyAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodmFsdWVKU1IsIHZhbHVlKTsKKyAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvdG9KU1IsIHByb3RvKTsKIAogICAgIEpJVEluc3Rh
bmNlT2ZHZW5lcmF0b3IgZ2VuKAogICAgICAgICBudWxscHRyLCBudWxscHRyLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksCiAgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKLSAgICAgICAgcmVzdWx0R1BSLAotICAgICAgICB2YWx1ZUdQUiwKLSAgICAgICAg
cHJvdG9HUFIsCisgICAgICAgIHJlc3VsdEpTUi5wYXlsb2FkR1BSKCksCisgICAgICAgIHZhbHVl
SlNSLnBheWxvYWRHUFIoKSwKKyAgICAgICAgcHJvdG9KU1IucGF5bG9hZEdQUigpLAogICAgICAg
ICBzdHViSW5mb0dQUiwKLSAgICAgICAgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3Jh
dGNoMSwgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMik7CisgICAgICAgIHNj
cmF0Y2gxR1BSLCBzY3JhdGNoMkdQUik7CiAKICAgICBhdXRvIFsgc3R1YkluZm8sIHN0dWJJbmZv
SW5kZXggXSA9IGFkZFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oKTsKICAgICBzdHViSW5mby0+
YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6Okluc3RhbmNlT2Y7CkBAIC0xODQsMTAgKzE4MiwxMyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOwogCiAg
ICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRl
eCwgc3R1YkluZm9HUFIpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgYm94Qm9vbGVhbihy
ZXN1bHRKU1IucGF5bG9hZEdQUigpLCByZXN1bHRKU1IpOworI2VuZGlmCiAgICAgYWRkU2xvd0Nh
c2UoKTsKICAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRK
U1IpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQpAQCAtMjAxLDEyICsyMDIsMjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3Rh
bmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAg
ICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIHN0YXRpY19hc3Nl
cnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbyA9PSBhcmd1bWVudEdQUjEp
OwotICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZSA9
PSBhcmd1bWVudEdQUjIpOwotICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVn
aXN0ZXJzOjpwcm90byA9PSBhcmd1bWVudEdQUjMpOwotICAgIGxvYWRHbG9iYWxPYmplY3QoYXJn
dW1lbnRHUFIwKTsKLSAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0
YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Ci0gICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVy
YXRpb25JbnN0YW5jZU9mT3B0aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJl
U3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKKyAgICB1c2lu
ZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5cGUob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJlZEFyZ3VtZW50
R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDE+KCk7CisgICAgdXNpbmcg
QmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZUpTUjsKKyAgICBzdGF0aWNfYXNzZXJ0
KHZhbHVlSlNSID09IHByZWZlcnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDI+KCkpOwor
ICAgIHVzaW5nIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG9KU1I7CisgICAgLy8g
T24gSlNWQUxVRTMyXzY0LCAncHJvdG8nIHdpbGwgYmUgcGFzc2VkIG9uIHN0YWNrIGFueXdheQor
ICAgIHN0YXRpY19hc3NlcnQocHJvdG9KU1IgPT0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09w
ZXJhdGlvbiwgMz4oKSB8fCBpczMyQml0KCkpOworICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFw
KGdsb2JhbE9iamVjdEdQUiwgc3R1YkluZm9HUFIsIHZhbHVlSlNSLCBwcm90b0pTUikpOworCisg
ICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGxvYWRDb25zdGFudChn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIGNh
bGxPcGVyYXRpb248U2xvd09wZXJhdGlvbj4oCisgICAgICAgIEFkZHJlc3Moc3R1YkluZm9HUFIs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksCisgICAgICAgIHJl
c3VsdFZSZWcsCisgICAgICAgIGdsb2JhbE9iamVjdEdQUiwgc3R1YkluZm9HUFIsIHZhbHVlSlNS
LCBwcm90b0pTUik7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBD
YWxsKCkpOwogfQogCkBAIC0yMTYsMTQgKzIyNywxNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19l
bXB0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX29wZXJhbmQ7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCByZWdUMCk7Ci0KLSAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLX0KLQorI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKHZhbHVlLCByZWdUMCk7CiAjZW5kaWYKKyAgICBpc0Vt
cHR5KHJlZ1QwLCByZWdUMCk7CisKKyAgICBib3hCb29sZWFuKHJlZ1QwLCBqc1JlZ1QxMCk7Cisg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGpzUmVnVDEwKTsKK30KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewpAQCAtMjM0LDExICsyNDcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90eXBl
b2ZfaXNfdW5kZWZpbmVkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwganNSZWdUMTApOwogICAgIEp1bXAgaXND
ZWxsID0gYnJhbmNoSWZDZWxsKGpzUmVnVDEwKTsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
Y29tcGFyZTY0KEVxdWFsLCBqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlZ1QwKTsKLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0g
ICAgY29tcGFyZTMyKEVxdWFsLCBqc1JlZ1QxMC50YWdHUFIoKSwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSNlbmRpZgorICAgIGlzVW5kZWZpbmVkKGpzUmVn
VDEwLCByZWdUMCk7CiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogICAgIAogICAgIGlzQ2VsbC5s
aW5rKHRoaXMpOwpAQCAtMjczLDE5ICsyODIsMjQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5k
ZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwganNSZWdUMTApOwogfQogCi0jaWYgVVNFKEpT
VkFMVUU2NCkKIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29w
ZXJhbmQ7Ci0gICAgCisKKyNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVGYWxzZSksIHJlZ1QwKTsKICAgICB0ZXN0NjQoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihz
dGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJUYWco
dmFsdWUsIHJlZ1QwKTsKKyAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6Qm9vbGVhblRhZyksIHJlZ1QwKTsKKyNlbmRpZgorCisgICAgYm94Qm9vbGVhbihy
ZWdUMCwganNSZWdUMTApOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBqc1JlZ1Qx
MCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtMjkzLDExICszMDcsMTggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaXNfbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAorCisjaWYgVVNFKEpTVkFMVUU2
NCkKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgdGVzdDY0
KE5vblplcm8sIHJlZ1QwLCBudW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwotICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyVGFnKHZhbHVlLCByZWdUMCk7CisgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdU
MCk7CisgICAgY29tcGFyZTMyKEJlbG93LCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxv
d2VzdFRhZyArIDEpLCByZWdUMCk7CisjZW5kaWYKKworICAgIGJveEJvb2xlYW4ocmVnVDAsIGpz
UmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwganNSZWdUMTApOwogfQog
CiAjaWYgVVNFKEJJR0lOVDMyKQpAQCAtMzEzLDE1ICszMzQsMTUgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaXNfYmlnX2ludChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAg
IG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHJlZ1QxKTsKICAgICBh
bmQ2NChyZWdUMSwgcmVnVDApOwogICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgIGJveEJvb2xlYW4ocmVnVDAsIGpzUmVnVDEw
KTsKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKICAgICBpc0NlbGwubGluayh0aGlzKTsKICAg
ICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50VHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgIGJveEJvb2xlYW4ocmVnVDAs
IGpzUmVnVDEwKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGpzUmVnVDEwKTsK
IH0KICNlbHNlIC8vIGlmICFVU0UoQklHSU5UMzIpCiBOT19SRVRVUk4gdm9pZCBKSVQ6OmVtaXRf
b3BfaXNfYmlnX2ludChjb25zdCBJbnN0cnVjdGlvbiopCkBAIC0zMzgsMTggKzM1OSwxNSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKICAgICBpbnQgdHlwZSA9IGJ5dGVjb2RlLm1fdHlwZTsKIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5j
aElmTm90Q2VsbChyZWdUMCk7Ci0KLSAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVnVDAp
OwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVt
cCBkb25lID0ganVtcCgpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGpzUmVn
VDMyKTsKIAorICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAgSnVtcCBpc05v
dENlbGwgPSBicmFuY2hJZk5vdENlbGwoanNSZWdUMzIpOworICAgIGNvbXBhcmU4KEVxdWFsLCBB
ZGRyZXNzKGpzUmVnVDMyLnBheWxvYWRHUFIoKSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVnVDApOwogICAgIGlzTm90Q2VsbC5saW5rKHRoaXMp
OwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CiAK
LSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIGJveEJvb2xlYW4ocmVnVDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwganNSZWdUMTApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM1OCwxOCArMzc2LDE1IEBA
IHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc05vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOwotCi0gICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9i
amVjdFR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwganNSZWdUMzIpOwogCisgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1Qw
KTsKKyAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChqc1JlZ1QzMik7CisgICAg
Y29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKGpzUmVnVDMyLnBheWxvYWRHUFIoKSwgSlND
ZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVn
VDApOwogICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGJveEJvb2xlYW4ocmVnVDAsIGpzUmVn
VDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwganNSZWdUMTApOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKQEAgLTM3OCwxNCArMzkzLDE0IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3By
aW1pdGl2ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
ID0gYnl0ZWNvZGUubV9zcmM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVn
VDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBqc1JlZ1QxMCk7CiAgICAgCi0g
ICAgSnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZPYmplY3QocmVnVDApKTsKKyAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxs
KGpzUmVnVDEwKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdChqc1JlZ1QxMC5wYXls
b2FkR1BSKCkpKTsKICAgICBpc0ltbS5saW5rKHRoaXMpOwogCiAgICAgaWYgKGRzdCAhPSBzcmMp
Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIGpzUmVnVDEwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9f
cHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0z
OTQsMTkgKzQwOSwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1f
c3JjOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywganNSZWdUMTApOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKSk7Ci0gICAgSnVtcCBkb25lID0gYnJhbmNoSWZTeW1ib2wocmVn
VDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGpzUmVnVDEwKSk7CisgICAgSnVtcCBkb25lID0gYnJh
bmNoSWZTeW1ib2woanNSZWdUMTAucGF5bG9hZEdQUigpKTsKKyAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdFN0cmluZyhqc1JlZ1QxMC5wYXlsb2FkR1BSKCkpKTsKIAogICAgIGRvbmUubGluayh0
aGlzKTsKICAgICBpZiAoc3JjICE9IGRzdCkKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwganNSZWdUMTApOwog
fQogCi0jZW5kaWYKLQogdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKQEAgLTQyMiwyNSAr
NDM1LDE3IEBAIHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25T
ZXRGdW5jdGlvbk5hbWUsIGdsb2JhbE9iamVjdEdQUiwgZnVuY3Rpb25HUFIsIG5hbWVKU1IpOwog
fQogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLQogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOb3Q+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX29wZXJhbmQsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fb3BlcmFuZCwganNSZWdUMTApOwogCi0gICAgLy8gSW52ZXJ0IGFnYWluc3Qg
SlNWYWx1ZShmYWxzZSk7IGlmIHRoZSB2YWx1ZSB3YXMgdGFnZ2VkIGFzIGEgYm9vbGVhbiwgdGhl
biBhbGwgYml0cyB3aWxsIGJlCi0gICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAo
d2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVs
eSkuCi0gICAgLy8gVGhlbiBpbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKHRydWUpLCB3aGljaCB3aWxs
IGFkZCB0aGUgdGFnIGJhY2sgaW4sIGFuZCBmbGlwIHRoZSBsb3cgYml0LgotICAgIHhvcjY0KFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxp
bnQzMl90Pih+MSkpKSk7Ci0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1
ZSksIHJlZ1QwKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEJvb2xlYW4oanNSZWdUMTAs
IHJlZ1QyKSk7CisgICAgeG9yUHRyKFRydXN0ZWRJbW0zMigxKSwganNSZWdUMTAucGF5bG9hZEdQ
UigpKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIGpzUmVnVDEwKTsKIH0KIAot
I2VuZGlmCi0KIHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSmZhbHNlPigpOwpAQCAtNTQ3LDE4ICs1NTIsMjAgQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfam5lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAg
d2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CiB9CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotCiB2
b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEp1bmRlZmluZWRPck51bGw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBqc1JlZ1QxMCk7CisjZWxpZiBVU0UoSlNWQUxV
RTMyXzY0KQorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJUYWcodmFsdWUsIGpzUmVnVDEwLnRh
Z0dQUigpKTsKKyNlbmRpZgogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRl
ZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgZW1p
dFR1cm5VbmRlZmluZWRJbnRvTnVsbChqc1JlZ1QxMCk7CisgICAgYWRkSnVtcChicmFuY2hJZk51
bGwoanNSZWdUMTApLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5l
ZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC01Njcs
MTAgKzU3NCwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBqc1JlZ1QxMCk7CisjZWxpZiBVU0UoSlNW
QUxVRTMyXzY0KQorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJUYWcodmFsdWUsIGpzUmVnVDEw
LnRhZ0dQUigpKTsKKyNlbmRpZgogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpV
bmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7Cisg
ICAgZW1pdFR1cm5VbmRlZmluZWRJbnRvTnVsbChqc1JlZ1QxMCk7CisgICAgYWRkSnVtcChicmFu
Y2hJZk5vdE51bGwoanNSZWdUMTApLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9q
ZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC01NzksOSAr
NTkwLDE2IEBAIHZvaWQgSklUOjplbWl0X29wX2plcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92
YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywgcmVnVDApOwotICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChieXRlY29kZS5tX3NwZWNp
YWxQb2ludGVyLCBKU1ZhbHVlUmVncyB7IHJlZ1QxIH0pOwotICAgIGFkZEp1bXAoYnJhbmNoUHRy
KEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjLCBqc1JlZ1QxMCk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAvLyBPTiBKU1ZB
TFVFNjQgdGhlIHBvaW50ZXIgY29tcGFyaXNvbiBiZWxvdyBjYXRjaGVzIHRoaXMgY2FzZQorICAg
IEp1bXAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChqc1JlZ1QxMCk7CisjZW5kaWYKKyAgICBs
b2FkQ29kZUJsb2NrQ29uc3RhbnRQYXlsb2FkKGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIsIHJl
Z1QyKTsKKyAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwganNSZWdUMTAucGF5bG9hZEdQUigp
LCByZWdUMiksIHRhcmdldCk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBub3RDZWxsLmxp
bmsodGhpcyk7CisjZW5kaWYKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTU5MCwxNCArNjA4LDIzIEBAIHZv
aWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOwogICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBy
ZWdUMCk7Ci0gICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50
ZXIsIEpTVmFsdWVSZWdzIHsgcmVnVDEgfSk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFs
ID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjLCBqc1JlZ1QxMCk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAvLyBPTiBK
U1ZBTFVFNjQgdGhlIHBvaW50ZXIgY29tcGFyaXNvbiBiZWxvdyBjYXRjaGVzIHRoaXMgY2FzZQor
ICAgIEp1bXAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChqc1JlZ1QxMCk7CisjZW5kaWYKKyAg
ICBsb2FkQ29kZUJsb2NrQ29uc3RhbnRQYXlsb2FkKGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIs
IHJlZ1QyKTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWws
IGpzUmVnVDEwLnBheWxvYWRHUFIoKSwgcmVnVDIpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisg
ICAgbm90Q2VsbC5saW5rKHRoaXMpOworI2VuZGlmCiAgICAgc3RvcmU4VG9NZXRhZGF0YShUcnVz
dGVkSW1tMzIoMSksIGJ5dGVjb2RlLCBPcEpuZXFQdHI6Ok1ldGFkYXRhOjpvZmZzZXRPZkhhc0p1
bXBlZCgpKTsKICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKICAgICBlcXVhbC5saW5rKHRo
aXMpOwogfQogCisjaWYgVVNFKEpTVkFMVUU2NCkKKwogdm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwpAQCAtNjA1LDggKzYzMiw4IEBAIHZv
aWQgSklUOjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3JocywgcmVnVDEpOwogICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKICAgICBjb21w
YXJlMzIoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2RzdCk7CisgICAgYm94Qm9vbGVhbihyZWdUMCwganNSZWdUMTApOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIGpzUmVnVDEwKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC02ODcsOSArNzE0LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3JocywgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVn
VDEsIHJlZ1QyKTsKICAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDAp
OwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgYm94
Qm9vbGVhbihyZWdUMCwganNSZWdUMTApOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2RzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rz
dCwganNSZWdUMTApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC04MzEsOSArODU4LDkgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVPcFN0cmljdEVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CiAgICAgZWxzZQog
ICAgICAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgYm94Qm9vbGVhbihy
ZWdUMCwganNSZWdUMTApOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBqc1JlZ1QxMCk7CiAjZW5kaWYKIH0KIApAQCAt
OTQ5LDE4ICs5NzYsMjEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICBlbWl0SnVtcFNs
b3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQog
CisjZW5kaWYKKwogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwot
ICAgIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CiAKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmNWUmVnLCBqc1JlZ1QxMCk7CisgICAgCisgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3ROdW1iZXIoanNSZWdUMTAsIHJlZ1QyKSk7CisKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCBqc1JlZ1QxMCk7CiAgICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykK
LSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnLCBqc1JlZ1QxMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTk2OCwzMSArOTk4LDM1IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFRvTnVtZXJpYz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0
ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVn
VDApOwogCi0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChyZWdUMCkpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywganNSZWdUMTApOworCisgICAgSnVtcCBpc05vdENlbGwg
PSBicmFuY2hJZk5vdENlbGwoanNSZWdUMTApOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
SGVhcEJpZ0ludChqc1JlZ1QxMC5wYXlsb2FkR1BSKCkpKTsKICAgICBKdW1wIGlzQmlnSW50ID0g
anVtcCgpOwogCiAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3ROdW1iZXIocmVnVDApKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJl
cihqc1JlZ1QxMCwgcmVnVDIpKTsKICAgICBpc0JpZ0ludC5saW5rKHRoaXMpOwogCi0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIGpzUmVnVDEwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVn
KQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOworICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcsIGpzUmVnVDEwKTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fc3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4o
KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVn
VDApKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIGpzUmVnVDEwKTsKIAot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90Q2VsbChqc1JlZ1QxMCkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90U3RyaW5nKGpzUmVnVDEwLnBheWxvYWRHUFIoKSkpOworCisgICAgaWYgKHNyY1ZSZWcgIT0g
ZHN0VlJlZykKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnLCBqc1JlZ1Qx
MCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtMTAwMCwxNCArMTAzNCwxNSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF90b19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvT2JqZWN0PigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dENlbGwocmVnVDApKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywganNSZWdUMTApOwogCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOworICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90Q2VsbChqc1JlZ1QxMCkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
T2JqZWN0KGpzUmVnVDEwLnBheWxvYWRHUFIoKSkpOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwganNSZWdUMTApOwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCi0g
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CisgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZywganNSZWdUMTApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTAxNyw3
ICsxMDUyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKICAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAKICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIobV92bSksIHJlZ1QzKTsKLSAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxG
cmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJl
Z2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNzKHJl
Z1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwogCiAgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
QEAgLTEwMzgsMTEgKzEwNzMsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVy
KHZtKCkpOwogICAgIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uLmxpbmsodGhpcyk7CiAKLSAgICBtb3Zl
KHJldHVyblZhbHVlR1BSLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2V4Y2VwdGlvbik7CisgICAgYm94Q2VsbChyZXR1cm5WYWx1ZUdQUiwganNSZWdUMTAp
OworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9leGNlcHRpb24sIGpzUmVn
VDEwKTsKIAotICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBFeGNlcHRpb246OnZhbHVlT2Zmc2V0
KCkpLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Rocm93
blZhbHVlKTsKKyAgICBsb2FkVmFsdWUoQWRkcmVzcyhqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIEV4
Y2VwdGlvbjo6dmFsdWVPZmZzZXQoKSksIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fdGhyb3duVmFsdWUsIGpzUmVnVDEwKTsKIAogI2lmIEVOQUJMRShE
RkdfSklUKQogICAgIC8vIEZJWE1FOiBjb25zaWRlciBpbmxpbmUgY2FjaGluZyB0aGUgcHJvY2Vz
cyBvZiBkb2luZyBPU1IgZW50cnksIGluY2x1ZGluZwpAQCAtMTA2NiwxMyArMTEwMSwxMiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY3VycmVudFNj
b3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJl
bnRTY29wZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGN1cnJl
bnRTY29wZSwgcmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zm
c2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5tX2RzdCwg
cmVnVDApOworICAgIGJveENlbGwocmVnVDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCBqc1JlZ1QxMCk7CiB9CiAKLSNlbmRpZgotCiB2b2lk
IEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BT
d2l0Y2hJbW0+KCk7CkBAIC0xMjEyLDggKzEyNDYsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFf
bnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCBqc1JlZ1QxMCk7CiB9CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQot
CiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopCiB7CiAgICAgLy8g
RXZlbiB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0
YW50CkBAIC0xMzM3LDE3ICsxMzY5LDE4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0
cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgcmVnVDApOwotICAgIGVtaXRT
dG9yZUNlbGwoZHN0LCByZWdUMCk7CisgICAgYm94Q2VsbChyZWdUMCwganNSZWdUMTApOworICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBqc1JlZ1QxMCk7CiB9CiAKLSNlbmRpZgotCiB2
b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BU
b1RoaXM+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdCwg
anNSZWdUMTApOworICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0Rz
dDsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChqc1JlZ1QxMCk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIGpzUmVnVDEwKTsKKworICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChqc1JlZ1QxMCwgc3JjRHN0KTsKIAogICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90VHlwZShqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIEZpbmFsT2JqZWN0VHlwZSkpOwog
ICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29kZSwgT3BUb1RoaXM6Ok1ldGFkYXRhOjpvZmZz
ZXRPZkNhY2hlZFN0cnVjdHVyZUlEKCksIHJlZ1QyKTsKQEAgLTEzODksMTUgKzE0MjIsMTggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCBq
c1JlZ1QxMCk7CiB9CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9j
aGVja190ZHooY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENoZWNrVGR6PigpOworI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Rh
cmdldFZpcnR1YWxSZWdpc3RlciwgcmVnVDApOworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lz
dGVyLCByZWdUMCk7CisjZW5kaWYKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1Qw
KSk7CiB9CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQogCiAvLyBTbG93IGNhc2VzCiAKQEAgLTE2Mjks
NyArMTY2NSw4IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19yZWdleHAoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBHUFJSZWcgZ2xvYmFsR1BSID0gYXJndW1lbnRH
UFIwOwogICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsR1BSKTsKICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld1JlZ2V4cCwgZ2xvYmFsR1BSLCBqc0Nhc3Q8UmVnRXhwKj4obV91bmxpbmtl
ZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhwKSkpOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0
LCByZXR1cm5WYWx1ZUdQUik7CisgICAgYm94Q2VsbChyZXR1cm5WYWx1ZUdQUiwgcmV0dXJuVmFs
dWVKU1IpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUpTUik7
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtMTg3NiwyOSArMTkxMywxOSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldFJlc3RMZW5ndGg+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIHVuc2lnbmVkIG51bVBhcmFtc1RvU2tpcCA9IGJ5dGVjb2RlLm1fbnVtUGFyYW1l
dGVyc1RvU2tpcDsKKwogICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDApOwogICAgIHN1YjMyKFRydXN0ZWRJbW0zMigx
KSwgcmVnVDApOwogICAgIEp1bXAgemVyb0xlbmd0aCA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVh
bCwgcmVnVDAsIEltbTMyKG51bVBhcmFtc1RvU2tpcCkpOwogICAgIHN1YjMyKEltbTMyKG51bVBh
cmFtc1RvU2tpcCksIHJlZ1QwKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGJveEludDMyKHJl
Z1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotI2VuZGlmCisgICAgYm94SW50MzIocmVnVDAsIGpz
UmVnVDEwKTsKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKICAgICB6ZXJvTGVuZ3RoLmxpbmso
dGhpcyk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNOdW1iZXIoMCkpKSwgcmVnVDApOwotI2Vsc2UKLSAgICBtb3ZlKFRydXN0ZWRJ
bW0zMigwKSwgcmVnVDApOwotI2VuZGlmCisgICAgbW92ZVRydXN0ZWRWYWx1ZShqc051bWJlcigw
KSwganNSZWdUMTApOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwotI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKLSNlbHNlCi0gICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZWdUMSk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwotI2VuZGlmCisg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGpzUmVnVDEwKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC0xOTI0LDI3ICsxOTUxLDE3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm90b3R5
cGVfb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByb3RvdHlwZU9mPigpOwog
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDApOwot
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDIpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BS
ID0gcmVnVDM7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
OwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHJlZ1QxOwotICAgIEFTU0VSVCh2YWx1ZVJlZ3MudGFnR1BSKCkgPT0gc2Ny
YXRjaEdQUik7Ci0jZW5kaWYKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
dmFsdWUsIHZhbHVlUmVncyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3ZhbHVlLCBqc1JlZ1QxMCk7CiAKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgc2xvd0Nh
c2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwodmFsdWVSZWdzKSk7Ci0gICAgc2xvd0Nhc2VzLmFw
cGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKSk7CisgICAgc2xv
d0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwoanNSZWdUMTApKTsKKyAgICBzbG93Q2FzZXMu
YXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGpzUmVnVDEwLnBheWxvYWRHUFIoKSkpOwogCi0gICAg
ZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVn
cywgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKKyAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCBq
c1JlZ1QxMC5wYXlsb2FkR1BSKCksIGpzUmVnVDMyLCByZWdUNCwgc2xvd0Nhc2VzKTsKICAgICBh
ZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2RzdCwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
anNSZWdUMzIpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIGpz
UmVnVDMyKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKaW5kZXggMTIyYzlhYWFmNjE4NjkyNDVkODcyNWRl
NjRjZDJlOTc3NWMwMjVkNy4uNzQxNTAyYzViMDhmZTNmZDM5MGQ2NDYxYjNmOTBkNGJlMDdjYzBi
MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcApA
QCAtMzMsNTI3ICszMywxMzMgQEAKICNpbmNsdWRlICJCYXNpY0Jsb2NrTG9jYXRpb24uaCIKICNp
bmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5o
IgotI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2lu
Y2x1ZGUgIkludGVycHJldGVySW5saW5lcy5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKLSNp
bmNsdWRlICJKU0FycmF5LmgiCi0jaW5jbHVkZSAiSlNDYXN0LmgiCiAjaW5jbHVkZSAiSlNGdW5j
dGlvbi5oIgotI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgotI2luY2x1ZGUg
IkxpbmtCdWZmZXIuaCIKLSNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5o
IgotI2luY2x1ZGUgIk9wY29kZUlubGluZXMuaCIKICNpbmNsdWRlICJTbG93UGF0aENhbGwuaCIK
ICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIu
aCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNf
aW5zdGFuY2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklU
Ojpjb21waWxlT3BFcUNvbW1vbihWaXJ0dWFsUmVnaXN0ZXIgc3JjMSwgVmlydHVhbFJlZ2lzdGVy
IHNyYzIpCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BP
dmVycmlkZXNIYXNJbnN0YW5jZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9j
b25zdHJ1Y3RvcjsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVj
b2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEs
IGpzUmVnVDEwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIGpzUmVnVDMyKTsK
KyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwganNSZWdUMTAudGFnR1BSKCksIGpz
UmVnVDMyLnRhZ0dQUigpKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKGpzUmVnVDEw
KSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQmVsb3csIGpzUmVnVDEwLnBheWxvYWRHUFIo
KSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKK30KIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKLSAgICAvLyBX
ZSBkb24ndCBqdW1wIGlmIHdlIGtub3cgd2hhdCBTeW1ib2wuaGFzSW5zdGFuY2Ugd291bGQgZG8u
Ci0gICAgSnVtcCBoYXNJbnN0YW5jZVZhbHVlTm90Q2VsbCA9IGVtaXRKdW1wSWZOb3RKU0NlbGwo
aGFzSW5zdGFuY2VWYWx1ZSk7Ci0gICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMSk7Ci0gICAgSnVt
cCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgQWRk
cmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX2Z1bmN0aW9uUHJv
dG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKSkpOwordm9pZCBKSVQ6OmNvbXBpbGVPcEVxU2xv
d0NvbW1vbihWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIEp1
bXBMaXN0IGdlbmVyaWNDYXNlOwogCi0gICAgLy8gV2Uga25vdyB0aGF0IGNvbnN0cnVjdG9yIGlz
IGFuIG9iamVjdCBmcm9tIHRoZSB3YXkgYnl0ZWNvZGUgaXMgZW1pdHRlZCBmb3IgaW5zdGFuY2Vv
ZiBleHByZXNzaW9ucy4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChjb25zdHJ1
Y3RvciwgcmVnVDApOworICAgIGdlbmVyaWNDYXNlLmFwcGVuZChnZXRTbG93Q2FzZShpdGVyKSk7
IC8vIHRhZ3Mgbm90IGVxdWFsCiAKLSAgICAvLyBDaGVjayB0aGF0IGNvbnN0cnVjdG9yICdJbXBs
ZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlJyBpLmUuIHRoZSBvYmplY3QgaXMgbm90IGEgQy1BUEkg
dXNlciBub3IgYSBib3VuZCBmdW5jdGlvbi4KLSAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1Qw
LCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJbXBsZW1lbnRz
RGVmYXVsdEhhc0luc3RhbmNlKSwgcmVnVDApOworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8g
dGFncyBlcXVhbCBhbmQgSlNDZWxsCisgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElmTm90
U3RyaW5nKGpzUmVnVDEwLnBheWxvYWRHUFIoKSkpOworICAgIGdlbmVyaWNDYXNlLmFwcGVuZChi
cmFuY2hJZk5vdFN0cmluZyhqc1JlZ1QzMi5wYXlsb2FkR1BSKCkpKTsKKworICAgIC8vIFN0cmlu
ZyBjYXNlLgorICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCByZWdUNCwganNSZWdUMTAucGF5bG9hZEdQUigpLCBq
c1JlZ1QzMi5wYXlsb2FkR1BSKCkpOwogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGhh
c0luc3RhbmNlVmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgY3VzdG9taGFzSW5zdGFuY2VW
YWx1ZS5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CisgICAg
Ly8gR2VuZXJpYyBjYXNlLgorICAgIGdlbmVyaWNDYXNlLmFwcGVuZChnZXRTbG93Q2FzZShpdGVy
KSk7IC8vIGRvdWJsZXMKKyAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOworICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBy
ZWdUNCwganNSZWdUMTAsIGpzUmVnVDMyKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBl
bWl0U3RvcmVCb29sKGRzdCwgcmVnVDApOwotCi19Ci0KLXZvaWQgSklUOjplbWl0X29wX2luc3Rh
bmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHByb3RvID0g
Ynl0ZWNvZGUubV9wcm90b3R5cGU7Ci0KLSAgICB1c2luZyBCYXNlbGluZUluc3RhbmNlb2ZSZWdp
c3RlcnM6OnJlc3VsdEdQUjsKLSAgICB1c2luZyBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6
OnZhbHVlSlNSOwotICAgIHVzaW5nIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG9K
U1I7Ci0gICAgdXNpbmcgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mb0dQUjsK
LSAgICB1c2luZyBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnNjcmF0Y2gxR1BSOwotICAg
IHVzaW5nIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c2NyYXRjaDJHUFI7Ci0KLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZCh2YWx1ZSwgdmFsdWVKU1IucGF5bG9hZEdQUigp
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChwcm90bywgcHJvdG9KU1IucGF5
bG9hZEdQUigpKTsKLQotICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFs
IG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5
bWJvbC5oYXNJbnN0YW5jZS4KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodmFsdWUp
OwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm90byk7Ci0gICAgCi0gICAgSklU
SW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCi0gICAgICAgIG51bGxwdHIsIG51bGxwdHIsIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAotICAgICAgICByZXN1bHRHUFIsCi0gICAgICAgIHZhbHVlSlNSLnBheWxv
YWRHUFIoKSwKLSAgICAgICAgcHJvdG9KU1IucGF5bG9hZEdQUigpLAotICAgICAgICBzdHViSW5m
b0dQUiwKLSAgICAgICAgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSKTsKLQotICAgIGF1dG8gWyBz
dHViSW5mbywgc3R1YkluZm9JbmRleCBdID0gYWRkVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbygp
OwotICAgIHN0dWJJbmZvLT5hY2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjsKLSAg
ICBzdHViSW5mby0+Ynl0ZWNvZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKLSAgICBnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7Ci0gICAgZ2VuLm1f
dW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOwotCi0gICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVE
YXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOwotICAgIGFk
ZFNsb3dDYXNlKCk7Ci0gICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKLSAgICAKLSAgICBl
bWl0U3RvcmVCb29sKGRzdCwgcmVzdWx0R1BSKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotICAgIAotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSW5zdGFuY2VvZj4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsKLSAgICAKLSAgICBK
SVRJbnN0YW5jZU9mR2VuZXJhdG9yJiBnZW4gPSBtX2luc3RhbmNlT2ZzW21faW5zdGFuY2VPZklu
ZGV4KytdOwotCi0gICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICB1c2lu
ZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5cGUob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKTsK
LSAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJlZEFyZ3VtZW50
R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDE+KCk7Ci0gICAgdXNpbmcg
QmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZUpTUjsKLSAgICB1c2luZyBCYXNlbGlu
ZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvSlNSOwotICAgIHN0YXRpY19hc3NlcnQodmFsdWVK
U1IgPT0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMj4oKSk7Ci0gICAgLy8g
UHJvdG8gd2lsbCBiZSBwYXNzZWQgb24gc3RhY2ssIGp1c3QgbWFrZSBzdXJlIG5vIG92ZXJsYXAK
LSAgICBzdGF0aWNfYXNzZXJ0KG5vT3ZlcmxhcCh2YWx1ZUpTUiwgcHJvdG9KU1IsIGdsb2JhbE9i
amVjdEdQUiwgc3R1YkluZm9HUFIpKTsKLQotICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2Jq
ZWN0R1BSKTsKLSAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50
SW5kZXgsIHN0dWJJbmZvR1BSKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKHZhbHVl
LCB2YWx1ZUpTUi50YWdHUFIoKSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclRhZyhwcm90
bywgcHJvdG9KU1IudGFnR1BSKCkpOwotICAgIGNhbGxPcGVyYXRpb248U2xvd09wZXJhdGlvbj4o
Ci0gICAgICAgIEFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZlNsb3dPcGVyYXRpb24oKSksCi0gICAgICAgIGRzdCwKLSAgICAgICAgZ2xvYmFsT2JqZWN0R1BS
LCBzdHViSW5mb0dQUiwgdmFsdWVKU1IsIHByb3RvSlNSKTsKLSAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2lz
X2VtcHR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0VtcHR5PigpOwotICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QxLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZyksIHJlZ1QwKTsKLQotICAgIGVtaXRT
dG9yZUJvb2woZHN0LCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4o
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJU
YWcodmFsdWUsIHJlZ1QwKTsKLSAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVCb29sKGRzdCwg
cmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcElzTnVtYmVyPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29w
ZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclRhZyh2YWx1ZSwgcmVnVDAp
OwotICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIGNvbXBhcmUzMihCZWxv
dywgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcgKyAxKSwgcmVnVDApOwot
ICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7Ci19Ci0KLU5PX1JFVFVSTiB2b2lkIEpJVDo6
ZW1pdF9vcF9pc19iaWdfaW50KGNvbnN0IEluc3RydWN0aW9uKikKLXsKLSAgICAvLyBXZSBlbWl0
IGlzX2NlbGxfd2l0aF90eXBlIGluc3RlYWQsIHNpbmNlIEJpZ0ludDMyIGlzIG5vdCBzdXBwb3J0
ZWQgb24gMzItYml0IHBsYXRmb3Jtcy4KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSXNDZWxsV2l0aFR5cGU+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fb3BlcmFuZDsKLSAgICBpbnQgdHlwZSA9IGJ5dGVjb2RlLm1fdHlwZTsKLQotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgSnVtcCBpc05v
dENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDEpOwotCi0gICAgY29tcGFyZTgoRXF1YWwsIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
dHlwZSksIHJlZ1QwKTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0KLSAgICBpc05vdENlbGwu
bGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwotCi0gICAgZG9u
ZS5saW5rKHRoaXMpOwotICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7Ci19Ci0KLXZvaWQg
SklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNP
YmplY3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLQotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgSnVtcCBpc05vdENl
bGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDEpOwotCi0gICAgY29tcGFyZTgoQWJvdmVPckVxdWFs
LCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKE9iamVjdFR5cGUpLCByZWdUMCk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwotCi0gICAg
aXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsK
LQotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDApOwot
fQotCi12b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7Ci0K
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDEsIHJlZ1QwKTsKLQotICAgIEp1
bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwocmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmT2JqZWN0KHJlZ1QwKSk7Ci0gICAgaXNJbW0ubGluayh0aGlzKTsKLQotICAgIGlmIChkc3Qg
IT0gc3JjKQotICAgICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwotfQotCi12b2lk
IEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFRvUHJvcGVydHlLZXk+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKLQotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMSwgcmVnVDApOwotCi0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKSk7Ci0gICAgSnVtcCBkb25lID0gYnJhbmNoSWZT
eW1ib2wocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7
Ci0KLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgaWYgKHNyYyAhPSBkc3QpCi0gICAgICAgIGVt
aXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX25vdChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNv
ZGUubV9vcGVyYW5kOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclRhZyhzcmMsIHJlZ1Qw
KTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMSwgcmVnVDApOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Qm9vbGVhbihyZWdUMSwgSW52YWxpZEdQUlJlZykpOwot
ICAgIHhvcjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotCi0gICAgZW1pdFN0b3JlQm9vbChk
c3QsIHJlZ1QwLCAoZHN0ID09IHNyYykpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZp
bmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEp1bmRlZmluZWRPck51
bGw+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKHZhbHVl
LCByZWdUMCk7Ci0gICAgc3RhdGljX2Fzc2VydCgoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnICsgMSA9
PSBKU1ZhbHVlOjpOdWxsVGFnKSAmJiAoSlNWYWx1ZTo6TnVsbFRhZyAmIDB4MSksICIiKTsKLSAg
ICBvcjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoSWZOdWxs
KHJlZ1QwKSwgdGFyZ2V0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3Jf
bnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm51bmRlZmluZWRPck51bGw+KCk7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKHZhbHVlLCByZWdU
MCk7Ci0gICAgc3RhdGljX2Fzc2VydCgoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnICsgMSA9PSBKU1Zh
bHVlOjpOdWxsVGFnKSAmJiAoSlNWYWx1ZTo6TnVsbFRhZyAmIDB4MSksICIiKTsKLSAgICBvcjMy
KFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoSWZOb3ROdWxsKHJl
Z1QwKSwgdGFyZ2V0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfamVxX3B0cihjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxUHRyPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMg
PSBieXRlY29kZS5tX3ZhbHVlOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLQotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMSwgcmVnVDApOwotICAgIEp1bXAgbm90Q2VsbCA9IGJy
YW5jaElmTm90Q2VsbChyZWdUMSk7Ci0gICAgbG9hZENvZGVCbG9ja0NvbnN0YW50UGF5bG9hZChi
eXRlY29kZS5tX3NwZWNpYWxQb2ludGVyLCByZWdUMik7Ci0gICAgYWRkSnVtcChicmFuY2hQdHIo
RXF1YWwsIHJlZ1QwLCByZWdUMiksIHRhcmdldCk7Ci0gICAgbm90Q2VsbC5saW5rKHRoaXMpOwot
fQotCi12b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSm5lcVB0cj4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92
YWx1ZTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywgcmVnVDEsIHJlZ1QwKTsKLSAgICBKdW1wIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
cmVnVDEpOwotICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudFBheWxvYWQoYnl0ZWNvZGUubV9zcGVj
aWFsUG9pbnRlciwgcmVnVDIpOwotICAgIEp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJl
Z1QwLCByZWdUMik7Ci0gICAgbm90Q2VsbC5saW5rKHRoaXMpOwotICAgIHN0b3JlOFRvTWV0YWRh
dGEoVHJ1c3RlZEltbTMyKDEpLCBieXRlY29kZSwgT3BKbmVxUHRyOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZIYXNKdW1wZWQoKSk7Ci0gICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7Ci0gICAgZXF1YWwu
bGluayh0aGlzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEVxPigpOwogCi0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKKyAgICBjb21waWxlT3BFcUNv
bW1vbihieXRlY29kZS5tX2xocywgYnl0ZWNvZGUubV9yaHMpOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMxLCByZWdUMSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjMiwgcmVnVDMsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDEsIHJlZ1QzKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QxKSk7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQmVsb3csIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6TG93ZXN0VGFnKSkpOwotCi0gICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMCwgcmVnVDIs
IHJlZ1QwKTsKLQotICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7CisgICAgY29tcGFyZTMy
KEVxdWFsLCBqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIGpzUmVnVDMyLnBheWxvYWRHUFIoKSwgcmVn
VDApOworICAgIGJveEJvb2xlYW4ocmVnVDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCBqc1JlZ1QxMCk7CiB9CiAKLXZvaWQgSklUOjplbWl0
U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfb3BfbmVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BOZXE+KCk7CiAKLSAgICBKdW1wTGlzdCBzdG9yZVJlc3VsdDsKLSAgICBKdW1w
TGlzdCBnZW5lcmljQ2FzZTsKKyAgICBjb21waWxlT3BFcUNvbW1vbihieXRlY29kZS5tX2xocywg
Ynl0ZWNvZGUubV9yaHMpOwogCi0gICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0
ZXIpKTsgLy8gdGFncyBub3QgZXF1YWwKLQotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gdGFn
cyBlcXVhbCBhbmQgSlNDZWxsCi0gICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElmTm90U3Ry
aW5nKHJlZ1QwKSk7Ci0gICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElmTm90U3RyaW5nKHJl
Z1QyKSk7Ci0KLSAgICAvLyBTdHJpbmcgY2FzZS4KLSAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qx
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgcmVnVDEsIHJl
Z1QwLCByZWdUMik7Ci0gICAgc3RvcmVSZXN1bHQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAvLyBH
ZW5lcmljIGNhc2UuCi0gICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0ZXIpKTsg
Ly8gZG91YmxlcwotICAgIGdlbmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0gICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUNCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1Q0
LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsK
LQotICAgIHN0b3JlUmVzdWx0LmxpbmsodGhpcyk7Ci0gICAgZW1pdFN0b3JlQm9vbChkc3QsIHJl
dHVyblZhbHVlR1BSKTsKKyAgICBjb21wYXJlMzIoTm90RXF1YWwsIGpzUmVnVDEwLnBheWxvYWRH
UFIoKSwganNSZWdUMzIucGF5bG9hZEdQUigpLCByZWdUMCk7CisgICAgYm94Qm9vbGVhbihyZWdU
MCwganNSZWdUMTApOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qs
IGpzUmVnVDEwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIg
PSBieXRlY29kZS5tX3JoczsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVn
VDEsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIHJlZ1QzLCByZWdU
Mik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMykpOwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMSkpOwotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDMyKEJlbG93LCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsK
KyAgICBjb21waWxlT3BFcUNvbW1vbihieXRlY29kZS5tX2xocywgYnl0ZWNvZGUubV9yaHMpOwog
Ci0gICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QyKSwgdGFyZ2V0KTsKLX0K
LQotdm9pZCBKSVQ6OmNvbXBpbGVPcEVxSnVtcFNsb3coVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlciwgQ29tcGlsZU9wRXFUeXBlIHR5cGUsIGludCBqdW1wVGFyZ2V0KQotewot
ICAgIEp1bXBMaXN0IGRvbmU7Ci0gICAgSnVtcExpc3QgZ2VuZXJpY0Nhc2U7Ci0KLSAgICBnZW5l
cmljQ2FzZS5hcHBlbmQoZ2V0U2xvd0Nhc2UoaXRlcikpOyAvLyB0YWdzIG5vdCBlcXVhbAotCi0g
ICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyB0YWdzIGVxdWFsIGFuZCBKU0NlbGwKLSAgICBnZW5l
cmljQ2FzZS5hcHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKLSAgICBnZW5lcmljQ2Fz
ZS5hcHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDIpKTsKLQotICAgIC8vIFN0cmluZyBjYXNl
LgotICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZVN0cmluZ0VxLCByZWdUMSwgcmVnVDAsIHJlZ1QyKTsKLSAgICBlbWl0SnVtcFNs
b3dUb0hvdChicmFuY2hUZXN0MzIodHlwZSA9PSBDb21waWxlT3BFcVR5cGU6OkVxID8gTm9uWmVy
byA6IFplcm8sIHJldHVyblZhbHVlR1BSKSwganVtcFRhcmdldCk7Ci0gICAgZG9uZS5hcHBlbmQo
anVtcCgpKTsKLQotICAgIC8vIEdlbmVyaWMgY2FzZS4KLSAgICBnZW5lcmljQ2FzZS5hcHBlbmQo
Z2V0U2xvd0Nhc2UoaXRlcikpOyAvLyBkb3VibGVzCi0gICAgZ2VuZXJpY0Nhc2UubGluayh0aGlz
KTsKLSAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVFcSwgcmVnVDQsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMikpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMih0
eXBlID09IENvbXBpbGVPcEVxVHlwZTo6RXEgPyBOb25aZXJvIDogWmVybywgcmV0dXJuVmFsdWVH
UFIpLCBqdW1wVGFyZ2V0KTsKLQotICAgIGRvbmUubGluayh0aGlzKTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKLSAgICBjb21waWxlT3BFcUp1bXBTbG93KGl0ZXIsIENvbXBpbGVPcEVxVHlwZTo6RXEsIHRh
cmdldCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTmVxPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYzEsIHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmMyLCByZWdUMywgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMSwgcmVnVDMpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDEpKTsKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihCZWxvdywgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpMb3dlc3RUYWcpKSk7Ci0KLSAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwg
cmVnVDApOwotCi0gICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLQotICAgIEp1bXBMaXN0IHN0b3JlUmVzdWx0OwotICAg
IEp1bXBMaXN0IGdlbmVyaWNDYXNlOwotCi0gICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dD
YXNlKGl0ZXIpKTsgLy8gdGFncyBub3QgZXF1YWwKLQotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsg
Ly8gdGFncyBlcXVhbCBhbmQgSlNDZWxsCi0gICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElm
Tm90U3RyaW5nKHJlZ1QwKSk7Ci0gICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElmTm90U3Ry
aW5nKHJlZ1QyKSk7Ci0KLSAgICAvLyBTdHJpbmcgY2FzZS4KLSAgICBsb2FkR2xvYmFsT2JqZWN0
KHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgcmVn
VDEsIHJlZ1QwLCByZWdUMik7Ci0gICAgc3RvcmVSZXN1bHQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAg
ICAvLyBHZW5lcmljIGNhc2UuCi0gICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0
ZXIpKTsgLy8gZG91YmxlcwotICAgIGdlbmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0gICAgbG9hZEds
b2JhbE9iamVjdChyZWdUNCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEs
IHJlZ1Q0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVn
VDIpKTsKLQotICAgIHN0b3JlUmVzdWx0LmxpbmsodGhpcyk7Ci0gICAgeG9yMzIoVHJ1c3RlZElt
bTMyKDB4MSksIHJldHVyblZhbHVlR1BSKTsKLSAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmV0dXJu
VmFsdWVHUFIpOworICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIGpzUmVnVDEwLnBheWxvYWRH
UFIoKSwganNSZWdUMzIucGF5bG9hZEdQUigpKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xo
czsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjMiwgcmVnVDMsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QzKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxs
KHJlZ1QxKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQmVsb3csIHJlZ1QxLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOworICAgIGNvbXBpbGVPcEVxQ29tbW9uKGJ5dGVj
b2RlLm1fbGhzLCBieXRlY29kZS5tX3Jocyk7CiAKLSAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgcmVnVDIpLCB0YXJnZXQpOworICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1
YWwsIGpzUmVnVDEwLnBheWxvYWRHUFIoKSwganNSZWdUMzIucGF5bG9hZEdQUigpKSwgdGFyZ2V0
KTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7
CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKKwor
ICAgIGNvbXBpbGVPcEVxU2xvd0NvbW1vbihpdGVyKTsKKworICAgIGJveEJvb2xlYW4ocmV0dXJu
VmFsdWVHUFIsIHJldHVyblZhbHVlSlNSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUpTUik7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKKworICAgIGNvbXBpbGVPcEVxU2xvd0NvbW1vbihp
dGVyKTsKKworICAgIHhvcjMyKFRydXN0ZWRJbW0zMigxKSwgcmV0dXJuVmFsdWVHUFIpOworICAg
IGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIHJldHVyblZhbHVlSlNSKTsKKyAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUpTUik7Cit9CisKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7CisKKyAgICBjb21waWxlT3BFcVNsb3dDb21tb24oaXRlcik7CisKKyAgICBlbWl0
SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJn
ZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4o
KTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY29tcGlsZU9wRXFKdW1wU2xvdyhpdGVyLCBD
b21waWxlT3BFcVR5cGU6Ok5FcSwgdGFyZ2V0KTsKKworICAgIGNvbXBpbGVPcEVxU2xvd0NvbW1v
bihpdGVyKTsKKworICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1
cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLXZvaWQg
SklUOjpjb21waWxlT3BTdHJpY3RFcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQordm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxQ29tbW9uKFZpcnR1YWxSZWdpc3RlciBz
cmMxLCAgVmlydHVhbFJlZ2lzdGVyIHNyYzIpCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKLQotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYzIsIHJlZ1QzLCByZWdUMik7Ci0KLSAgICAvLyBCYWlsIGlmIHRoZSB0YWdzIGRp
ZmZlciwgb3IgYXJlIGRvdWJsZS4KLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDEsIHJlZ1QzKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQmVsb3csIHJlZ1QxLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOwotCi0gICAgLy8gSnVtcCB0byBhIHNs
b3cgY2FzZSBpZiBib3RoIGFyZSBzdHJpbmdzIG9yIHN5bWJvbHMgKG5vbiBvYmplY3QpLgotICAg
IEp1bXAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7Ci0gICAgSnVtcCBmaXJzdElz
T2JqZWN0ID0gYnJhbmNoSWZPYmplY3QocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90T2JqZWN0KHJlZ1QyKSk7Ci0gICAgbm90Q2VsbC5saW5rKHRoaXMpOwotICAgIGZpcnN0SXNP
YmplY3QubGluayh0aGlzKTsKLQotICAgIC8vIFNpbXBseSBjb21wYXJlIHRoZSBwYXlsb2Fkcy4K
LSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZTxPcCwgT3BTdHJpY3RlcT46OnZhbHVlKQot
ICAgICAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwotICAgIGVsc2UK
LSAgICAgICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKLQotICAg
IGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3N0cmlj
dGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgY29tcGls
ZU9wU3RyaWN0RXE8T3BTdHJpY3RlcT4oY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQotdm9pZCBK
SVQ6OmVtaXRfb3BfbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCi17Ci0gICAgY29tcGlsZU9wU3RyaWN0RXE8T3BOc3RyaWN0ZXE+KGN1cnJlbnRJbnN0cnVj
dGlvbik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmNvbXBpbGVPcFN0
cmljdEVxSnVtcChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOwotCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMxLCBqc1JlZ1QxMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmMyLCBqc1JlZ1QzMik7CiAKQEAgLTU2NywyMiArMTczLDQ4IEBAIHZvaWQgSklUOjpjb21waWxl
T3BTdHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChqc1JlZ1QzMi5wYXlsb2FkR1BSKCkpKTsK
ICAgICBub3RDZWxsLmxpbmsodGhpcyk7CiAgICAgZmlyc3RJc09iamVjdC5saW5rKHRoaXMpOwor
fQogCi0gICAgLy8gU2ltcGx5IGNvbXBhcmUgdGhlIHBheWxvYWRzLgotICAgIGlmIGNvbnN0ZXhw
ciAoc3RkOjppc19zYW1lPE9wLCBPcEpzdHJpY3RlcT46OnZhbHVlKQotICAgICAgICBhZGRKdW1w
KGJyYW5jaDMyKEVxdWFsLCBqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIGpzUmVnVDMyLnBheWxvYWRH
UFIoKSksIHRhcmdldCk7Ci0gICAgZWxzZQotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVx
dWFsLCBqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIGpzUmVnVDMyLnBheWxvYWRHUFIoKSksIHRhcmdl
dCk7Cit2b2lkIEpJVDo6ZW1pdF9vcF9zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wU3RyaWN0ZXE+KCk7CisgICAgY29tcGlsZU9wU3RyaWN0RXFDb21tb24oYnl0ZWNvZGUu
bV9saHMsIGJ5dGVjb2RlLm1fcmhzKTsKKworICAgIGNvbXBhcmUzMihFcXVhbCwganNSZWdUMTAu
cGF5bG9hZEdQUigpLCBqc1JlZ1QzMi5wYXlsb2FkR1BSKCksIHJlZ1QwKTsKKworICAgIGJveEJv
b2xlYW4ocmVnVDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZHN0LCBqc1JlZ1QxMCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX25zdHJpY3RlcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTnN0cmljdGVxPigpOworICAgIGNvbXBpbGVP
cFN0cmljdEVxQ29tbW9uKGJ5dGVjb2RlLm1fbGhzLCBieXRlY29kZS5tX3Jocyk7CisKKyAgICBj
b21wYXJlMzIoTm90RXF1YWwsIGpzUmVnVDEwLnBheWxvYWRHUFIoKSwganNSZWdUMzIucGF5bG9h
ZEdQUigpLCByZWdUMCk7CisKKyAgICBib3hCb29sZWFuKHJlZ1QwLCBqc1JlZ1QxMCk7CisgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwganNSZWdUMTApOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBjb21waWxlT3BTdHJpY3RFcUp1bXA8T3BKc3RyaWN0ZXE+KGN1cnJl
bnRJbnN0cnVjdGlvbik7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BKc3RyaWN0ZXE+KCk7CisgICAgaW50IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKworICAgIGNvbXBpbGVPcFN0cmlj
dEVxQ29tbW9uKGJ5dGVjb2RlLm1fbGhzLCBieXRlY29kZS5tX3Jocyk7CisKKyAgICBhZGRKdW1w
KGJyYW5jaDMyKEVxdWFsLCBqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIGpzUmVnVDMyLnBheWxvYWRH
UFIoKSksIHRhcmdldCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2puc3RyaWN0ZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBjb21waWxlT3BTdHJpY3RF
cUp1bXA8T3BKbnN0cmljdGVxPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKKyAgICBpbnQgdGFy
Z2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOworCisgICAgY29tcGlsZU9wU3RyaWN0RXFDb21tb24oYnl0ZWNvZGUubV9saHMsIGJ5dGVj
b2RlLm1fcmhzKTsKKworICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIGpzUmVnVDEwLnBh
eWxvYWRHUFIoKSwganNSZWdUMzIucGF5bG9hZEdQUigpKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtNTkyLDcg
KzIyNCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OwogICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUNCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21w
YXJlU3RyaWN0RXEsIHJlZ1Q0LCBqc1JlZ1QxMCwganNSZWdUMzIpOwogICAgIGVtaXRKdW1wU2xv
d1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9
CiAKQEAgLTYwMywxNzggKzIzNSwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3Rl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7CiAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1Q0LCBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVnVDQsIGpzUmVnVDEwLCBqc1JlZ1QzMik7
CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BS
KSwgdGFyZ2V0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMSwgcmVnVDAp
OwotCi0gICAgSnVtcCBpc0ludDMyID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
Okxvd2VzdFRhZykpKTsKLSAgICBpc0ludDMyLmxpbmsodGhpcyk7Ci0KLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKLSAgICBp
ZiAoc3JjICE9IGRzdCkKLSAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKLX0K
LQotdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wVG9OdW1lcmljPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAg
IEpTVmFsdWVSZWdzIGFyZ3VtZW50VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0KLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDEsIHJlZ1QwKTsKLQotICAgIEp1bXAgaXNOb3RD
ZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dEhlYXBCaWdJbnQocmVnVDApKTsKLSAgICBKdW1wIGlzQmlnSW50ID0ganVtcCgpOwotCi0gICAg
aXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIo
YXJndW1lbnRWYWx1ZVJlZ3MsIHJlZ1QyKSk7Ci0gICAgaXNCaWdJbnQubGluayh0aGlzKTsKLQot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCkpOwotICAgIGlmIChzcmMgIT0gZHN0KQotICAgICAgICBlbWl0U3RvcmUoZHN0LCByZWdU
MSwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF90b19zdHJpbmcoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFRvU3RyaW5nPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9v
cGVyYW5kOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QxLCByZWdUMCk7
Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDEpKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOwotCi0gICAgaWYgKHNyYyAhPSBkc3QpCi0g
ICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0
X29wX3RvX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewot
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9PYmplY3Q+KCk7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYywgcmVnVDEsIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
Q2VsbChyZWdUMSkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7
Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApKTsKLSAgICBpZiAoc3JjICE9IGRzdCkKLSAgICAgICAgZW1pdFN0b3JlKGRzdCwg
cmVnVDEsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcENhdGNoPigpOwotCi0gICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJv
bUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwotCi0gICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1fdm0pLCByZWdUMyk7Ci0gICAgLy8gb3BlcmF0aW9uVGhyb3cg
cmV0dXJucyB0aGUgY2FsbEZyYW1lIGZvciB0aGUgaGFuZGxlci4KLSAgICBsb2FkMzIoQWRkcmVz
cyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rl
cik7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihudWxscHRyKSwgQWRkcmVzcyhyZWdUMywg
Vk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpKTsKLQotICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0KLSAg
ICAvLyBXaGVuIHRoZSBMTEludCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB0aGVyZSBpcyBhIGNoYW5j
ZSB0aGF0IHdlJ3ZlIGFscmVhZHkgdGllcmVkIHVwCi0gICAgLy8gdGhlIHNhbWUgQ29kZUJsb2Nr
IHRvIGJhc2VsaW5lLCBhbmQgd2UnbGwgY2F0Y2ggdGhlIGV4Y2VwdGlvbiBpbiB0aGUgYmFzZWxp
bmUgSklUIChiZWNhdXNlCi0gICAgLy8gd2UgdXBkYXRlZCB0aGUgZXhjZXB0aW9uIGhhbmRsZXJz
IHRvIHBvaW50IGhlcmUpLiBCZWNhdXNlIHRoZSBMTEludCB1c2VzIGEgZGlmZmVyZW50IHZhbHVl
Ci0gICAgLy8gaW5zaWRlIHNfY29uc3RhbnRzR1BSLCB0aGUgY2FsbGVlIHNhdmVzIHdlIHJlc3Rv
cmUgYWJvdmUgbWF5IG5vdCBjb250YWluIHRoZSBjb3JyZWN0IHJlZ2lzdGVyLgotICAgIC8vIFNv
IHdlIHJlcGxlbmlzaCBpdCBoZXJlLgotICAgIHsKLSAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9y
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKLSAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURGF0YSgpKSwgcmVnVDApOwotICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6SklURGF0YTo6b2Zmc2V0T2ZKSVRD
b25zdGFudFBvb2woKSksIHNfY29uc3RhbnRzR1BSKTsKLSAgICB9Ci0KLSAgICBjYWxsT3BlcmF0
aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZD
YXRjaGFibGUsICZ2bSgpKTsKLSAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNo
VGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKLSAgICBqdW1wVG9FeGNlcHRpb25IYW5k
bGVyKHZtKCkpOwotICAgIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uLmxpbmsodGhpcyk7Ci0KLSAgICAv
LyBOb3cgc3RvcmUgdGhlIGV4Y2VwdGlvbiByZXR1cm5lZCBieSBvcGVyYXRpb25UaHJvdy4KLSAg
ICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6Q2VsbFRhZyksIHJlZ1QxKTsKLQotICAgIGVtaXRTdG9yZShieXRlY29kZS5tX2V4Y2Vw
dGlvbiwgcmVnVDEsIHJlZ1QyKTsKLQotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QyLCBFeGNlcHRp
b246OnZhbHVlT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5
bG9hZCkpLCByZWdUMCk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDIsIEV4Y2VwdGlvbjo6dmFs
dWVPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVn
VDEpOwotCi0gICAgZW1pdFN0b3JlKGJ5dGVjb2RlLm1fdGhyb3duVmFsdWUsIHJlZ1QxLCByZWdU
MCk7Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAvLyBGSVhNRTogY29uc2lkZXIgaW5saW5l
IGNhY2hpbmcgdGhlIHByb2Nlc3Mgb2YgZG9pbmcgT1NSIGVudHJ5LCBpbmNsdWRpbmcKLSAgICAv
LyBhcmd1bWVudCB0eXBlIHByb29mcywgc3RvcmluZyBsb2NhbHMgdG8gdGhlIGJ1ZmZlciwgZXRj
Ci0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU5OAot
Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJB
dENhdGNoQW5kVmFsdWVQcm9maWxlLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsK
LSAgICBhdXRvIHNraXBPU1JFbnRyeSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVH
UFIpOwotICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKLSAgICBmYXJKdW1wKHJldHVyblZh
bHVlR1BSLCBOb1B0clRhZyk7Ci0gICAgc2tpcE9TUkVudHJ5LmxpbmsodGhpcyk7Ci0jZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCi19Ci0KLXZvaWQgSklUOjplbWl0X29wX2lkZW50aXR5X3dpdGhf
cHJvZmlsZShjb25zdCBJbnN0cnVjdGlvbiopCi17Ci0gICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBk
byBhbnl0aGluZyBoZXJlLi4uCi19Ci0KLXZvaWQgSklUOjplbWl0X29wX2dldF9wYXJlbnRfc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFBhcmVudFNjb3BlPigpOwotICAg
IFZpcnR1YWxSZWdpc3RlciBjdXJyZW50U2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGN1cnJlbnRTY29wZSwgcmVnVDApOwotICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0g
ICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5tX2RzdCwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6
ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewot
ICAgIGVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCk7Ci0gICAgCi0gICAgLy8gRXZlbiB0aG91
Z2ggSklUIGNvZGUgZG9lc24ndCB1c2UgdGhlbSwgd2UgaW5pdGlhbGl6ZSBvdXIgY29uc3RhbnQK
LSAgICAvLyByZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vz
c2FyaWx5IHByb2xvbmdpbmcKLSAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcg
R0MgcHJlc3N1cmUuCi0gICAgc2l6ZV90IGNvdW50ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVt
VmFycygpOwotICAgIGZvciAoc2l6ZV90IGkgPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxs
ZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaSA8IGNvdW50OyArK2kpCi0gICAgICAg
IGVtaXRTdG9yZSh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwganNVbmRlZmluZWQoKSk7Ci0K
LSAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgc2xvd19wYXRoX2VudGVyKTsKLSAgICBzbG93UGF0aENhbGwuY2FsbCgpOwotfQotCi12b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dFNjb3BlPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJl
Z1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2Nv
cGVDaGFpbigpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7Ci19Ci0K
LXZvaWQgSklUOjplbWl0X29wX2NoZWNrX3Rkeihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wQ2hlY2tUZHo+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclRhZyhieXRlY29kZS5t
X3RhcmdldFZpcnR1YWxSZWdpc3RlciwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
RW1wdHkocmVnVDApKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBVU0Uo
SlNWQUxVRTMyXzY0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzLmNwcAppbmRleCBmMDJmNGFhNTlkOTZhZTE1NTVlYTMyZWMxYTJmNTE3MDVmNGIxZTg2
Li4xMTRhNzRkNGU0OTEzNzZkY2M1MjVlZDIxNWQxMTljZTUwNzU2ZmE1IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcApAQCAtMTQ5LDggKzE0
OSw4IEBAIHZvaWQgSklUOjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY29uc3QgT3Bjb2RlVHlw
ZSYgYnl0ZWNvZGUsIFZlY3RvcjxTbG93Q2FzZUVuCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0u
Z2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlSlNSKTsKKyAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVKU1IpOwogI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBDYWxsKCkpOwpAQCAtMjgwLDggKzI4MCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRl
X25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUsIHJldHVyblZhbHVlSlNSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0
dXJuVmFsdWVKU1IpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwpAQCAtMTI3Myw4
ICsxMjczLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmUKICAgICBlbWl0TmFrZWROZWFyQ2Fs
bCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENU
SVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVKU1IpOwor
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVKU1IpOwog
I2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwpAQCAtMTM2OSw4ICsxMzY5LDggQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2wKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNl
cHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVKU1IpOworICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVKU1IpOwogI2VuZGlmIC8vIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBDYWxsKCkpOwpAQCAtMTQxMyw4ICsxNDEzLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmVzdWx0SlNSKTsKIH0K
IAotI2lmIFVTRShKU1ZBTFVFNjQpCi0KICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX2dldF9ieV9p
ZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYgdm0pCiB7CkBAIC0xNDUyLDggKzE0NTAsNiBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfYnlf
aWRfcHJlcGFyZUNhbGxHZW5lcmF0bwogfQogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogCi0jZW5kaWYKLQogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3Ro
aXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwpA
QCAtMTUwMywxNSArMTQ5OSwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dp
dGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLAogICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzX3By
ZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCByZXR1cm5WYWx1ZUdQUik7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRW
UmVnLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgcmV0dXJuVmFsdWVKU1IpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJl
ZywgcmV0dXJuVmFsdWVKU1IpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQog
CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQog
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLQogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfZ2V0X2J5X2lk
X3dpdGhfdGhpc19wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYgdm0pCiB7CkBAIC0xNTUxLDggKzE1
NDUsNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19v
cF9nZXRfYnlfaWRfd2l0aF90aGlzX3ByZXBhcmVDYQogfQogI2VuZGlmIC8vIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogCi0jZW5kaWYKLQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwpAQCAtMjkzMSw4ICsyOTIz
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKICAgICBkb25lQ2FzZXMubGluayh0aGlzKTsK
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3Vs
dEdQUikpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUpTUik7CisgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlSlNSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMjk2Niw3
ICsyOTU4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24KICAgICBzbG93Q2FzZXMuYXBwZW5k
KGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwogCiAgICAgbW92ZShUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZWdUMCk7CiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCiAgICAgc2xvd0Nhc2VzLmxp
bmsodGhpcyk7CkBAIC0zMDI2LDYzICszMDE4LDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1l
cmF0b3JfaGFzX293bl9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
CiAKICNlbmRpZgogCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIg
b3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQorewor
ICAgIC8vIHZhbHVlIG1heSBiZSBpbnZhbGlkIFZpcnR1YWxSZWdpc3RlciBpZiBtb2RlIGlzIFVu
Y29uZGl0aW9uYWxXcml0ZUJhcnJpZXIgb3IgU2hvdWxkRmlsdGVyQmFzZS4KKyAgICBKdW1wIHZh
bHVlTm90Q2VsbDsKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09
IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0KLXZvaWQg
SklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCi17Ci0gICAgLy8gdmFsdWUgbWF5IGJl
IGludmFsaWQgVmlydHVhbFJlZ2lzdGVyIGlmIG1vZGUgaXMgVW5jb25kaXRpb25hbFdyaXRlQmFy
cmllciBvciBTaG91bGRGaWx0ZXJCYXNlLgotICAgIEp1bXAgdmFsdWVOb3RDZWxsOwotICAgIGlm
IChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFu
ZFZhbHVlKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsK
LSAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICB9Ci0K
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG93bmVyLCByZWdUMCk7Ci0gICAgSnVtcCBvd25l
ck5vdENlbGw7Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1v
ZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKLSAgICAgICAgb3duZXJOb3RDZWxsID0gYnJhbmNoSWZO
b3RDZWxsKHJlZ1QwKTsKLQotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJh
cnJpZXJCcmFuY2godm0oKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNl
cHRpb25DaGVjayhvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIHJlZ1QwKTsK
LSAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7Ci0KLSAgICBpZiAobW9k
ZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNl
KQotICAgICAgICBvd25lck5vdENlbGwubGluayh0aGlzKTsKLSAgICBpZiAobW9kZSA9PSBTaG91
bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkKLSAgICAg
ICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0V3JpdGVCYXJy
aWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9k
ZSBtb2RlKQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAg
ICBKdW1wIHZhbHVlTm90Q2VsbDsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkK
LSAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLQotICAgIGVt
aXRXcml0ZUJhcnJpZXIob3duZXIpOwotCi0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFs
dWUpCi0gICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOwotfQotCiAjZWxpZiBVU0UoSlNW
QUxVRTMyXzY0KQotCi12b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIg
b3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQotewot
ICAgIC8vIHZhbHVlIG1heSBiZSBpbnZhbGlkIFZpcnR1YWxSZWdpc3RlciBpZiBtb2RlIGlzIFVu
Y29uZGl0aW9uYWxXcml0ZUJhcnJpZXIgb3IgU2hvdWxkRmlsdGVyQmFzZS4KLSAgICBKdW1wIHZh
bHVlTm90Q2VsbDsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09
IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyVGFnKHZhbHVlLCByZWdUMCk7CisjZW5kaWYKICAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKTsKICAgICB9CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG93bmVyLCByZWdUMCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIs
IGpzUmVnVDEwKTsKICAgICBKdW1wIG93bmVyTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBTaG91
bGRGaWx0ZXJCYXNlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKQotICAgICAg
ICBvd25lck5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgICAgICBvd25lck5v
dENlbGwgPSBicmFuY2hJZk5vdENlbGwoanNSZWdUMTApOwogCi0gICAgSnVtcCBvd25lcklzUmVt
ZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCByZWdUMSwgcmVnVDIpOwotICAg
IGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQ
YXRoLCAmdm0oKSwgcmVnVDEpOworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9
IGJhcnJpZXJCcmFuY2godm0oKSwganNSZWdUMTAucGF5bG9hZEdQUigpLCByZWdUMik7CisgICAg
Y2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1Bh
dGgsICZ2bSgpLCBqc1JlZ1QxMC5wYXlsb2FkR1BSKCkpOwogICAgIG93bmVySXNSZW1lbWJlcmVk
T3JJbkVkZW4ubGluayh0aGlzKTsKIAogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2Ug
fHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpCkBAIC0zMDkxLDIyICszMDQ2LDYg
QEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmEKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhp
cyk7CiB9CiAKLXZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQotewotICAgIEp1bXAgdmFs
dWVOb3RDZWxsOwotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKSB7Ci0gICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJUYWcodmFsdWUsIHJlZ1QwKTsKLSAgICAgICAgdmFsdWVO
b3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICB9Ci0KLSAgICBlbWl0V3JpdGVC
YXJyaWVyKG93bmVyKTsKLQotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKQotICAg
ICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKLX0KLQotI2VuZGlmCi0KIHZvaWQgSklUOjpl
bWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgV3JpdGVCYXJyaWVyTW9kZSBt
b2RlKQogewogICAgIEFTU0VSVChtb2RlID09IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIgfHwg
bW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJ
bnRlcmZhY2VKSVQuaAppbmRleCBmMTg2ZmI4MmIxZmY5NzhkOGY2N2E0ZjA1MzM4ZTljZmI0Yzgy
Mzc0Li40YjQyOWEyNjdjY2VlMmM2NDczZWRhNzFjOWZjOTQ1NGM1ODIzMDBjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCkBAIC00OSwxNSArNDksNiBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWRJbnQzMihWaXJ0dWFs
UmVnaXN0ZXIsIFJlZ2lzdGVySUQgZHN0KTsKICAgICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWRE
b3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHNjcmF0
Y2gpOwogCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgaW5saW5lIEp1bXAgZW1pdEp1
bXBJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIpOwotI2VuZGlmCi0KLSAgICAgICAgdm9pZCBl
bWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihWaXJ0dWFsUmVnaXN0ZXIgZW50cnksIFJlZ2lz
dGVySUQgdG8sIFJlZ2lzdGVySUQgZnJvbSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAg
dm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVn
aXN0ZXIgZW50cnkpOwotICAgICAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcih2b2lk
KiB2YWx1ZSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KTsKLSAgICAgICAgdm9pZCBlbWl0UHV0Q2Vs
bFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5
KTsKLQogICAgICAgICBWTSogdm0oKSBjb25zdCB7IHJldHVybiBtX3ZtOyB9CiAKICAgICAgICAg
Vk0qIG1fdm07CkBAIC02NSwxNyArNTYsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQogICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFj
ZUpJVDo6ZW1pdExvYWRKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgUmVn
aXN0ZXJJRCBwYXlsb2FkKQotICAgIHsKLSAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1
YWxSZWdpc3RlciksIHBheWxvYWQpOwotICAgICAgICByZXR1cm4gZW1pdEp1bXBJZk5vdEpTQ2Vs
bCh2aXJ0dWFsUmVnaXN0ZXIpOwotICAgIH0KLQotICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6
SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdEp1bXBJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyKQogICAgIHsKICAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3RlciA8
IFZpcnR1YWxSZWdpc3RlcihGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCkpOworICAgICAgICBs
b2FkUHRyKHBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgcGF5bG9hZCk7CiAgICAgICAgIHJl
dHVybiBicmFuY2gzMihOb3RFcXVhbCwgdGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CiAgICAgfQotICAgIAorCiAgICAgaW5saW5lIEpTSW50
ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEludDMyKFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAgICAgICAgQVNT
RVJUKHZpcnR1YWxSZWdpc3RlciA8IFZpcnR1YWxSZWdpc3RlcihGaXJzdENvbnN0YW50UmVnaXN0
ZXJJbmRleCkpOwpAQCAtOTcsMTYgKzgzLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBk
b25lLmxpbmsodGhpcyk7CiAgICAgICAgIHJldHVybiBub3RJbnQ7CiAgICAgfQotCi0jZW5kaWYK
LQotI2lmIFVTRShKU1ZBTFVFNjQpCisjZWxpZiBVU0UoSlNWQUxVRTY0KQogICAgIGlubGluZSBK
U0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRKU0NlbGwoVmlydHVh
bFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAg
ICBsb2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBkc3QpOwogICAgICAgICByZXR1
cm4gYnJhbmNoSWZOb3RDZWxsKGRzdCk7CiAgICAgfQotICAgIAorCiAgICAgaW5saW5lIEpTSW50
ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEludDMyKFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAgICAgICAgbG9h
ZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZHN0KTsKQEAgLTEyOSwzNSArMTEyLDYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfQogI2VuZGlmCiAKLSAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgSlNJbnRlcmZhY2VKSVQ6OmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFZpcnR1YWxS
ZWdpc3RlciBlbnRyeSwgUmVnaXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9tKQotICAgIHsKLSAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKGZyb20sIGVudHJ5Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lz
dGVyKSksIHRvKTsKLSAgICB9Ci0KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VK
SVQ6OmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdp
c3RlciBlbnRyeSkKLSAgICB7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgc3RvcmVQ
dHIoZnJvbSwgcGF5bG9hZEZvcihlbnRyeSkpOwotI2Vsc2UKLSAgICAgICAgc3RvcmU2NChmcm9t
LCBhZGRyZXNzRm9yKGVudHJ5KSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgSlNJbnRlcmZhY2VKSVQ6OmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcih2b2lkKiB2YWx1
ZSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQotICAgIHsKLSAgICAgICAgc3RvcmVQdHIoVHJ1c3Rl
ZEltbVB0cih2YWx1ZSksIGFkZHJlc3NGb3IoZW50cnkpKTsKLSAgICB9Ci0KLSAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6OmVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIo
UmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCi0gICAgewotI2lmIFVTRShK
U1ZBTFVFMzJfNjQpCi0gICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxU
YWcpLCB0YWdGb3IoZW50cnkpKTsKLSAgICAgICAgc3RvcmUzMihmcm9tLCBwYXlsb2FkRm9yKGVu
dHJ5KSk7Ci0jZWxzZQotICAgICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZW50cnkpKTsK
LSNlbmRpZgotICAgIH0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUo
SklUKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444975</attachid>
            <date>2021-11-22 09:51:49 -0800</date>
            <delta_ts>2021-11-23 02:16:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233424-20211122175148.patch</filename>
            <type>text/plain</type>
            <size>148586</size>
            <attacher name="Geza Lore">glore</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MTExCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
ZjJhM2Q1MWYxMGQ1YzZlYmM0MWNkN2RmNzUwOTQzZDNlNzMzNjAzLi40ZjVjMTJlMmY4NWRlYjIx
MDU1ZDg1NDkyM2ViMzU3MWUzMzNkYTk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMTggQEAKKzIwMjEtMTEtMjIgIEdlemEgTG9yZSAgPGdsb3JlQGlnYWxpYS5jb20+CisK
KyAgICAgICAgW0pTQ10gVW5pZnkgbW9zdCBCYXNlbGluZSBvcHMgYmV0d2VlbiBKU1ZBTFVFNjQg
YW5kIEpTVkFMVUUzMl82NAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjMzNDI0CisKKyAgICAgICAgVGhpcyBwYXRjaCB1bmlmaWVzIHRoZSBCYXNlbGlu
ZSBKSVQgaW1wbGVtZW50YXRpb25zIG9mIG1vc3QgYnl0ZWNvZGUKKyAgICAgICAgb3BzIGJldHdl
ZW4gdGhlIEpTVkFMVUUzMl82NCBhbmQgSlNWQUxVRTY0IHBsYXRmb3Jtcy4gVGhlcmUgYXJlIHZl
cnkKKyAgICAgICAgZmV3IGNoYW5nZXMgdG8gdGhlIGdlbmVyYXRlZCBjb2RlIG9uIEpTVkFMVUU2
NCAoYW5kIGFsbCBhcmUgZmFpcmx5CisgICAgICAgIHRyaXZpYWwsIGUuZy46IHJlbW92YWwgb2Yg
cmVkdW5kYW50IG1vdmVzIGluIHRoZSBzbG93IHBhdGgpLCBhcGFydAorICAgICAgICBmcm9tIG1h
Y2hpbmUgcmVnaXN0ZXIgc3Vic3RpdHV0aW9ucy4gTXkgbWVhc3VyZW1lbnRzIG9uIHg4Nl82NAor
ICAgICAgICBpbmRpY2F0ZSB0aGUgcGF0Y2ggaXMgcGVyZm9ybWFuY2UgbmV1dHJhbCB0aGVyZSAo
d2hpY2ggaXMgd2hhdCB3ZQorICAgICAgICBleHBlY3QpLgorCisgICAgICAgIE9uIEFSTXY3L1Ro
dW1iLTIgSmV0U3RyZWFtMiBzaG93cyBhIDAuNCUgaW1wcm92ZW1lbnQuIFRoaXMgaXMgZHVlIHRv
CisgICAgICAgIHNvbWUgb2YgdGhlIGltcHJvdmVkIGltcGxlbWVudGF0aW9ucyBwaWNrZWQgdXAg
ZnJvbSB0aGUgSlNWQUxVRTY0CisgICAgICAgIHZlcnNpb25zLgorCisgICAgICAgIEFsc28gcmVt
b3ZlIHZhcmlvdXMgdW51c2VkIGNvZGUuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAq
IGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
U3R1YkluZm86OmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyk6CisgICAg
ICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBl
cnM6OmJyYW5jaElmQm9vbGVhbik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YnJh
bmNoSWZOb3RCb29sZWFuKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjppc1VuZGVm
aW5lZCk6CisgICAgICAgICogaml0L0dQUkluZm8uaDoKKyAgICAgICAgKiBqaXQvSklULmNwcDoK
KyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0aWMuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdW5zaWduZWQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBh
cmVVbnNpZ25lZEFuZEp1bXBJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVV
bnNpZ25lZEltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93
SW1wbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbmMpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfZGVjKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX21vZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfYml0bm90KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UmlnaHRTaGlmdEZh
c3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TWF0aElDRmFzdCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdE1hdGhJQ1Nsb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGl2
KToKKyAgICAgICAgKiBqaXQvSklUQXJpdGhtZXRpYzMyXzY0LmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKiBqaXQvSklUSW5s
aW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2Fk
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmxvYWRDb2RlQmxvY2tDb25zdGFudFBheWxvYWQpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVz
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2Up
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZik6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9pc19lbXB0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZp
bmVkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2Jvb2xlYW4pOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2lzX2JpZ19pbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5
cGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF90b19wcm9wZXJ0eV9rZXkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfbm90KToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2plcV9wdHIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9wdHIp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfbmVxKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BTdHJpY3RFcSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19udW1iZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfdG9fbnVtZXJpYyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19zdHJpbmcp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9wYXJl
bnRfc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3RvX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfY2hlY2tfdGR6KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19yZWdleHApOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2dldF9wcm90b3R5cGVfb2YpOgorICAgICAgICAqIGppdC9KSVRPcGNv
ZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcEVxQ29tbW9uKToKKyAg
ICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BFcVNsb3dDb21tb24pOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVxKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2plcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9q
bmVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9lcSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfbmVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9q
ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2puZXEpOgorICAgICAgICAoSlND
OjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVxQ29tbW9uKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3N0cmljdGVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25zdHJpY3RlcSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3Bfam5zdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfanN0
cmljdGVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKToKKyAg
ICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6Omdl
bmVyYXRlR2V0QnlWYWxTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X3ByaXZhdGVfbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkX2RpcmVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRXcml0ZUJhcnJpZXIpOgorICAgICAgICAqIGppdC9KU0ludGVyZmFjZUpJ
VC5oOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRKU0NlbGwpOgorCiAy
MDIxLTExLTIyICBHZXphIExvcmUgIDxnbG9yZUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtKU0Nd
IE1ha2Ugc2hhcmluZyBvZiB1bmxpbmtlZCBiYXNlbGluZSBjb2RlIHBvc3NpYmxlIG9uIEpTVkFM
VUUzMl82NApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA3ZDc2OGI3ODY0NjhiNzhl
NjU2MzZkODNiYzI4ZjcyOWJjZTc4YjVjLi5hMzk4ZjQ3Y2E0MDViMjQ4NzU4YjgzMzcyNGM1ZDE5
ZTYxMWIxNzlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDcyOSw3ICs0NzI5
LDYgQEAKIAkJQTc0REVGOEUxODJEOTkxNDAwNTIyQzIyIC8qIE1hcEl0ZXJhdG9yUHJvdG90eXBl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcEl0ZXJhdG9yUHJvdG90eXBl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NERFRjhGMTgyRDk5MTQwMDUyMkMy
MiAvKiBKU01hcEl0ZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTTWFwSXRlcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzRE
RUY5MDE4MkQ5OTE0MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU01hcEl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUE3NTcwNkREMTE4QTJCQ0YwMDU3Rjg4RiAvKiBKSVRBcml0aG1ldGljMzJfNjQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUQXJpdGhtZXRpYzMyXzY0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc1RUU5QjAxOEFBQjdFMjAwQUFE
MDQzIC8qIEJ1aWx0aW5OYW1lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBC
dWlsdGluTmFtZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc2N0I1QjMxN0Ew
Qjk2NTAwNjNEOTQwIC8qIERGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBo
YXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NjdCNUI0MTdBMEI5NjUwMDYzRDk0MCAvKiBE
RkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR0xv
b3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC02Mzc3LDcgKzYzNzYsNiBAQAogCQkJCUZFMTIyMDI2MUJFN0Y1NjQwMDM5RTZGMiAvKiBKSVRB
ZGRHZW5lcmF0b3IuaCAqLywKIAkJCQkwRjc1QTA2NTIwMTNFNEVGMDAzOEUyQ0YgLyogSklUQWxs
b2NhdG9yLmggKi8sCiAJCQkJODZBOTBFQ0YwRUU3RDUxRjAwQUIzNTBEIC8qIEpJVEFyaXRobWV0
aWMuY3BwICovLAotCQkJCUE3NTcwNkREMTE4QTJCQ0YwMDU3Rjg4RiAvKiBKSVRBcml0aG1ldGlj
MzJfNjQuY3BwICovLAogCQkJCUZFM0EwNkFEMUMxMENCNkYwMDM5MEZERCAvKiBKSVRCaXRBbmRH
ZW5lcmF0b3IuY3BwICovLAogCQkJCUZFM0EwNkFFMUMxMENCNkYwMDM5MEZERCAvKiBKSVRCaXRB
bmRHZW5lcmF0b3IuaCAqLywKIAkJCQlGRTNBMDZBNzFDMTBCQzc0MDAzOTBGREQgLyogSklUQml0
QmluYXJ5T3BHZW5lcmF0b3IuaCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCBl
MGRlNmI3MmY4YzA4Y2Y0MGQwOGQ4MzQzOWQyN2VmMDc3YzlmY2IwLi5jOWUzZWExYzkwMmQ3NWEz
N2RkY2ZhZTY3YmMyOWVmYTliNDcwMDVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CkBA
IC02MzksNyArNjM5LDYgQEAgaml0L0ludHJpbnNpY0VtaXR0ZXIuY3BwCiBqaXQvSklULmNwcAog
aml0L0pJVEFkZEdlbmVyYXRvci5jcHAKIGppdC9KSVRBcml0aG1ldGljLmNwcAotaml0L0pJVEFy
aXRobWV0aWMzMl82NC5jcHAKIGppdC9KSVRCaXRBbmRHZW5lcmF0b3IuY3BwCiBqaXQvSklUQml0
T3JHZW5lcmF0b3IuY3BwCiBqaXQvSklUQml0WG9yR2VuZXJhdG9yLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCmlu
ZGV4IGFhN2VjMDFlMzg0OGFkYTlmY2FiOTUwNDIzMmY2ODdjMDM0OGMzMTAuLjA0NWRlZmVkYjE1
NGZkMDg5YTJiNjhkY2Q2MzE4MTE5NzEwMDFlMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKQEAgLTg5Nyw2ICs4
OTcsMTIgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci54b3JxX2lyKGltbS5tX3ZhbHVl
LCBzcmNEZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIHhvcjY0KFRydXN0ZWRJbW0zMiBpbW0sIFJl
Z2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtb3ZlKHNyYywg
ZGVzdCk7CisgICAgICAgIHhvcjY0KGltbSwgZGVzdCk7CisgICAgfQorCiAgICAgdm9pZCB4b3I2
NChUcnVzdGVkSW1tNjQgaW1tLCBSZWdpc3RlcklEIHNyY0Rlc3QpCiAgICAgewogICAgICAgICBt
b3ZlKGltbSwgc2NyYXRjaFJlZ2lzdGVyKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKaW5kZXggOTAxZmM1MzY5YTdjZTY4
YzM3YTcyMWE5YjRjYTk0ZWQzMjdmZGNmZi4uZDIxMDQxNzQyYmQ0OTViNjZlY2E0NTA4ZDczYjhk
MzhjYWNmZjE1YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uY3BwCkBAIC01NjQsMTkgKzU2NCwxNCBAQCB2b2lkIFN0cnVjdHVy
ZVN0dWJJbmZvOjppbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oQ29kZUJs
b2NrKiwgVW5saQogICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjoKICAgICAgICAgaGFz
Q29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CiAgICAgICAgIHByb3RvdHlwZUlzS25vd25PYmpl
Y3QgPSBmYWxzZTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBiYXNlR1BSID0gQmFzZWxp
bmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZTsKLSAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGlu
ZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3VsdDsKLSAgICAgICAgcmVncy5wcm90b3R5cGVHUFIg
PSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvOwotICAgICAgICBtX3N0dWJJbmZv
R1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbzsKLSNlbGlmIFVTRShK
U1ZBTFVFMzJfNjQpCiAgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3Rl
cnM6OnZhbHVlSlNSLnBheWxvYWRHUFIoKTsKLSAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUlu
c3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3VsdEdQUjsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGlu
ZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3VsdEpTUi5wYXlsb2FkR1BSKCk7CiAgICAgICAgIHJl
Z3MucHJvdG90eXBlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90b0pTUi5w
YXlsb2FkR1BSKCk7CiAgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZS
ZWdpc3RlcnM6OnN0dWJJbmZvR1BSOwotICAgICAgICBiYXNlVGFnR1BSID0gSW52YWxpZEdQUlJl
ZzsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBiYXNlVGFnR1BSID0gQmFzZWxpbmVJ
bnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZUpTUi50YWdHUFIoKTsKICAgICAgICAgdmFsdWVUYWdH
UFIgPSBJbnZhbGlkR1BSUmVnOwotICAgICAgICB2LnByb3BlcnR5VGFnR1BSID0gSW52YWxpZEdQ
UlJlZzsKKyAgICAgICAgdi5wcm9wZXJ0eVRhZ0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lz
dGVyczo6cHJvdG9KU1IudGFnR1BSKCk7CiAjZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1i
bHlIZWxwZXJzLmgKaW5kZXggOTg3MmQ1NjlkNDMzYjllMjc0ZGFkM2MzMmVjNWMzYjM0ZGRhOTc4
MC4uZTZjNzM2YzY3Y2ExMDJkNTI1NzBhNzE4OWMxMDA2MmVlYTVjNDI3YyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCkBAIC04MjEsOCArODIxLDcgQEAg
cHVibGljOgogICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBBU1NFUlQodGVtcEdQ
UiAhPSBJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgbW92ZShncHIsIHRlbXBHUFIpOwotICAgICAg
ICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHRlbXBHUFIpOworICAg
ICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIGdwciwgdGVtcEdQ
Uik7CiAgICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQoWmVybywgdGVtcEdQUiwgVHJ1c3RlZElt
bTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpOwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BB
UkFNKHRlbXBHUFIpOwpAQCAtODQ1LDggKzg0NCw3IEBAIHB1YmxpYzoKICAgICB7CiAjaWYgVVNF
KEpTVkFMVUU2NCkKICAgICAgICAgQVNTRVJUKHRlbXBHUFIgIT0gSW52YWxpZEdQUlJlZyk7Ci0g
ICAgICAgIG1vdmUoZ3ByLCB0ZW1wR1BSKTsKLSAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCB0ZW1wR1BSKTsKKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBncHIsIHRlbXBHUFIpOwogICAgICAgICByZXR1cm4gYnJh
bmNoVGVzdDY0KE5vblplcm8sIHRlbXBHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQz
Ml90Pih+MSkpKTsKICNlbHNlCiAgICAgICAgIFVOVVNFRF9QQVJBTSh0ZW1wR1BSKTsKQEAgLTEw
MzMsNiArMTAzMSwxNSBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAKKyAgICB2b2lkIGlzVW5k
ZWZpbmVkKEpTVmFsdWVSZWdzIHJlZ3MsIEdQUlJlZyBkc3QpCisgICAgeworI2lmIFVTRShKU1ZB
TFVFNjQpCisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVncy5wYXlsb2FkR1BSKCksIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIGRzdCk7CisjZWxpZiBVU0UoSlNWQUxV
RTMyXzY0KQorICAgICAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ3MudGFnR1BSKCksIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBkc3QpOworI2VuZGlmCisgICAgfQorCiAgICAg
Ly8gTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmVzcGVjdCBNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLgogICAgIEp1bXAgYnJhbmNoSWZVbmRlZmluZWQoR1BSUmVnIGdwcikKICAgICB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCmluZGV4IDJmOGU1NDQ3M2Y3MjEzYzkyZDg4
NmExOTZhZTJjOTFjMWU0NDZkYzkuLmYxYzk4ZDkzYmUzZDQxMDhiMTUzZTMzMTc5NjlmYmEyZDQx
NDYzODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCkBAIC05MzksOSArOTM5LDEx
IEBAIHB1YmxpYzoKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIHN0YXRpYyBjb25zdGV4cHIgSlNW
YWx1ZVJlZ3MganNSZWdUMTAgeyBHUFJJbmZvOjpyZWdUMCB9OwogICAgIHN0YXRpYyBjb25zdGV4
cHIgSlNWYWx1ZVJlZ3MganNSZWdUMzIgeyBHUFJJbmZvOjpyZWdUMiB9OworICAgIHN0YXRpYyBj
b25zdGV4cHIgSlNWYWx1ZVJlZ3MganNSZWdUNTQgeyBHUFJJbmZvOjpyZWdUNCB9OwogI2VsaWYg
VVNFKEpTVkFMVUUzMl82NCkKICAgICBzdGF0aWMgY29uc3RleHByIEpTVmFsdWVSZWdzIGpzUmVn
VDEwIHsgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwIH07CiAgICAgc3RhdGljIGNvbnN0
ZXhwciBKU1ZhbHVlUmVncyBqc1JlZ1QzMiB7IEdQUkluZm86OnJlZ1QzLCBHUFJJbmZvOjpyZWdU
MiB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MganNSZWdUNTQgeyBHUFJJbmZv
OjpyZWdUNSwgR1BSSW5mbzo6cmVnVDQgfTsKICNlbmRpZgogCiAgICAgLy8gUmV0dXJuIHZhbHVl
IHJlZ2lzdGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKaW5kZXggMGM2YmYzZDFlNzUwNjM2
YjgwNzAwMDQ4NDRlZDNlNTM2MzMwM2E4MS4uMmIzMWNhZTAxYmJiY2FjMDRhN2VkZDMxMzg5YWQ5
ZGViODA2ZjgwNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcApAQCAtMTI2LDE2ICsxMjYs
NiBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKQogfQogI2VuZGlmCiAK
LXZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGUoV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGlm
ICghc2V0IHx8IHNldC0+c3RhdGUoKSA9PSBJc0ludmFsaWRhdGVkKSB7Ci0gICAgICAgIGFkZFNs
b3dDYXNlKEp1bXAoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mU3Rh
dGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwotfQotCiB2b2lkIEpJVDo6ZW1p
dE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRlclRvU2V0KQogewogICAgIGF1dG8g
b2sgPSBicmFuY2hUZXN0UHRyKFplcm8sIHBvaW50ZXJUb1NldCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAppbmRleCBkNjMwNjZmNzkwNzAwNDcyYzk5NjNlYzgzNTA3NzFjMmNhZDRjMGNjLi41NGQ1
ODJlMGZmYmM0ZTA4NGQ5NzQwNWU4MjQwOGFkMGE0MmExY2ExIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgKQEAgLTI1NCw4ICsyNTQsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwcml2YXRlOgog
ICAgICAgICB2b2lkIGxvYWRHbG9iYWxPYmplY3QoR1BSUmVnKTsKICAgICAgICAgdm9pZCBsb2Fk
Q29kZUJsb2NrQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyLCBKU1ZhbHVlUmVncyk7Ci0jaWYgVVNF
KEpTVkFMVUUzMl82NCkKICAgICAgICAgdm9pZCBsb2FkQ29kZUJsb2NrQ29uc3RhbnRQYXlsb2Fk
KFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAg
ICAgICAgdm9pZCBsb2FkQ29kZUJsb2NrQ29uc3RhbnRUYWcoVmlydHVhbFJlZ2lzdGVyLCBSZWdp
c3RlcklEKTsKICNlbmRpZgogCkBAIC0zMTMsMzEgKzMxMywzNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdFB1dENhbGxS
ZXN1bHQoY29uc3QgT3AmKTsKIAorI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPiB2b2lkIGNvbXBpbGVPcFN0cmljdEVxKGNvbnN0IEluc3RydWN0aW9uKik7
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPiB2b2lkIGNvbXBpbGVPcFN0cmljdEVxSnVt
cChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICBlbnVtIGNsYXNzIENvbXBpbGVPcEVxVHlw
ZSB7IEVxLCBORXEgfTsKLSAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0
KTsKLSAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIp
OwotICAgICAgICAKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHZvaWQgY29tcGls
ZU9wRXFDb21tb24oVmlydHVhbFJlZ2lzdGVyIHNyYzEsIFZpcnR1YWxSZWdpc3RlciBzcmMyKTsK
KyAgICAgICAgdm9pZCBjb21waWxlT3BFcVNsb3dDb21tb24oVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGNvbXBpbGVPcFN0cmljdEVxQ29tbW9uKFZpcnR1
YWxSZWdpc3RlciBzcmMxLCAgVmlydHVhbFJlZ2lzdGVyIHNyYzIpOworI2VuZGlmCisKICAgICAg
ICAgZW51bSBXcml0ZUJhcnJpZXJNb2RlIHsgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciwgU2hv
dWxkRmlsdGVyQmFzZSwgU2hvdWxkRmlsdGVyVmFsdWUsIFNob3VsZEZpbHRlckJhc2VBbmRWYWx1
ZSB9OwogICAgICAgICAvLyB2YWx1ZSByZWdpc3RlciBpbiB3cml0ZSBiYXJyaWVyIGlzIHVzZWQg
YmVmb3JlIGFueSBzY3JhdGNoIHJlZ2lzdGVycwogICAgICAgICAvLyBzbyBtYXkgc2FmZWx5IGJl
IHRoZSBzYW1lIGFzIGVpdGhlciBvZiB0aGUgc2NyYXRjaCByZWdpc3RlcnMuCiAgICAgICAgIHZv
aWQgZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFdyaXRlQmFycmllck1v
ZGUpOwogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVy
LCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUpOwotICAgICAgICB2b2lk
IGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBX
cml0ZUJhcnJpZXJNb2RlKTsKICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCog
b3duZXIpOwogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyKTsKIAot
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2
b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBHUFJSZWcpOwotI2Vu
ZGlmCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2b2lkIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBKU1ZhbHVlUmVncyk7CiAKLSAgICAgICAgLy8g
VGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHByb2ZpbGUgaXMgaW4gcmVnVDAgKHJlZ1Qx
L3JlZ1QwIG9uIEpTVkFMVUUzMl82NCkuCi0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZUlmUHJvZmlsZWRPcGNvZGUoLi4uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
Ci0gICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRh
ZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+Ci0gICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKTsKKyAgICAg
ICAgc3RhdGljIGlubGluZSBjb25zdGV4cHIgYm9vbCBpc19wcm9maWxlZF9vcCA9IHN0ZDo6aXNf
c2FtZV92PGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjsK
KyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CisgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8
aXNfcHJvZmlsZWRfb3A8T3A+LCB2b2lkPgorICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
SWZQcm9maWxlZE9wY29kZShPcCBieXRlY29kZSkKKyAgICAgICAgeyAvLyBUaGlzIGFzc3VtZXMg
dGhhdCB0aGUgdmFsdWUgdG8gcHJvZmlsZSBpcyBpbiBqc1JlZ1QxMC4KKyAgICAgICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIGpzUmVnVDEwKTsKKyAgICAgICAgfQorICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KKyAgICAgICAgc3RkOjplbmFibGVfaWZfdDwhaXNf
cHJvZmlsZWRfb3A8T3A+LCB2b2lkPgorICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQ
cm9maWxlZE9wY29kZShPcCkKKyAgICAgICAgeyB9CiAKICAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEJ5dGVjb2RlPgogICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2Vs
bChjb25zdCBCeXRlY29kZSYsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNo
R1BSKTsKQEAgLTM0Nyw1NyArMzUzLDIzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgRUNNQU1vZGUgZWNtYU1vZGUoT3ApOwogCi0gICAg
ICAgIC8vIERldGVybWluZXMgdGhlIHR5cGUgb2YgcHJpdmF0ZSBmaWVsZCBhY2Nlc3MgZm9yIGEg
Ynl0ZWNvZGUuCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBQcml2YXRl
RmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtpbmQoT3ApOwotCiAgICAgICAgIHZvaWQgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBKU1ZhbHVlUmVncyBkc3Qp
OwogICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKFZpcnR1YWxSZWdp
c3RlciBzcmMsIFJlZ2lzdGVySUQgZHN0KTsKICAgICAgICAgdm9pZCBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIEpTVmFsdWVSZWdzIHNyYyk7Ci0gICAgICAgIHZv
aWQgZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3RlciwgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVn
aXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwotCi0gICAgICAgIGludDMyX3QgZ2V0
T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpOwotICAgICAgICBkb3VibGUg
Z2V0T3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpOwogCiAjaWYgVVNF
KEpTVkFMVUUzMl82NCkKLSAgICAgICAgYm9vbCBnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVh
bFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgVmlydHVhbFJlZ2lzdGVyJiBvcCwg
aW50MzJfdCYgY29uc3RhbnQpOwotCi0gICAgICAgIHZvaWQgZW1pdExvYWREb3VibGUoVmlydHVh
bFJlZ2lzdGVyLCBGUFJlZ2lzdGVySUQgdmFsdWUpOwotCi0gICAgICAgIHZvaWQgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIHRhZywgUmVnaXN0
ZXJJRCBwYXlsb2FkKTsKICAgICAgICAgdm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKFZp
cnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQgZHN0KTsKLQotICAgICAgICB2b2lkIGVtaXRT
dG9yZShWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQs
IFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBlbWl0
U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRl
eElzSW50MzIgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChWaXJ0dWFsUmVn
aXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQ2VsbCA9IGZhbHNlKTsKLSAg
ICAgICAgdm9pZCBlbWl0U3RvcmVCb29sKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXls
b2FkLCBib29sIGluZGV4SXNCb29sID0gZmFsc2UpOwotCi0gICAgICAgIHZvaWQgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3Rlcik7Ci0gICAgICAgIHZvaWQgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcpOwot
ICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEKTsKLQot
ICAgICAgICAvLyBBcml0aG1ldGljIG9wY29kZSBoZWxwZXJzCi0gICAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBlbWl0QmluYXJ5RG91YmxlT3AoY29uc3QgSW5zdHJ1
Y3Rpb24gKiwgT3BlcmFuZFR5cGVzLCBKdW1wTGlzdCYgbm90SW50MzJPcDEsIEp1bXBMaXN0JiBu
b3RJbnQzMk9wMiwgYm9vbCBvcDFJc0luUmVnaXN0ZXJzID0gdHJ1ZSwgYm9vbCBvcDJJc0luUmVn
aXN0ZXJzID0gdHJ1ZSk7Ci0KLSNlbHNlIC8vIFVTRShKU1ZBTFVFMzJfNjQpCisjZWxpZiBVU0Uo
SlNWQUxVRTY0KQorICAgICAgICAvLyBNYWNoaW5lIHJlZ2lzdGVyIHZhcmlhbnRzIHB1cmVseSBm
b3IgY29udmVuaWVuY2UKICAgICAgICAgdm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1
YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQgZHN0KTsKLSAgICAgICAgdm9pZCBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJvbSA9IHJlZ1Qw
KTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmVDZWxsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lz
dGVySUQgcGF5bG9hZCwgYm9vbCAvKiBvbmx5IHVzZWQgaW4gSlNWYWx1ZTMyXzY0ICovID0gZmFs
c2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBw
YXlsb2FkKTsKLSAgICAgICAgfQorICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
VmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tKTsKIAotICAgICAgICBKdW1wIGVt
aXRKdW1wSWZCb3RoSlNDZWxscyhSZWdpc3RlcklELCBSZWdpc3RlcklELCBSZWdpc3RlcklEKTsK
LSAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZKU0NlbGwoUmVnaXN0ZXJJRCk7Ci0gICAg
ICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQpOwotICAgICAg
ICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklELCBWaXJ0dWFsUmVn
aXN0ZXIpOwogICAgICAgICBKdW1wIGVtaXRKdW1wSWZOb3RJbnQoUmVnaXN0ZXJJRCwgUmVnaXN0
ZXJJRCwgUmVnaXN0ZXJJRCBzY3JhdGNoKTsKLSAgICAgICAgUGF0Y2hhYmxlSnVtcCBlbWl0UGF0
Y2hhYmxlSnVtcElmTm90SW50KFJlZ2lzdGVySUQpOwotICAgICAgICB2b2lkIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChSZWdpc3RlcklEKTsKLSAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNl
SWZOb3ROdW1iZXIoUmVnaXN0ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SW50KFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQgc2NyYXRjaCk7Ci0jZW5k
aWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RJbnQoUmVnaXN0ZXJJRCk7CisjZW5kaWYKKworICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEludChKU1ZhbHVlUmVncyk7CiAKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoSlNWYWx1ZVJlZ3MpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChKU1ZhbHVlUmVncywgVmlydHVhbFJlZ2lzdGVyKTsKQEAgLTY0Nyw5ICs2MTks
NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2l0ZXJhdG9yX25leHQo
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9u
ZXh0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwogCi0gICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBib29s
IGlzVW5zaWduZWQpOwotICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBpc1Vu
c2lnbmVkKTsKLQogICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRlKFZpcnR1YWxSZWdpc3RlciBk
c3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlPckJyYW5k
LCBBY2Nlc3NUeXBlKTsKICAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJl
Z2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0
eSwgQWNjZXNzVHlwZSk7CiAKQEAgLTY1OSwxNiArNjI4LDIwIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB2b2lkIGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwog
ICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzLCBHUFJSZWcpOwogICAgICAgICB2b2lkIGVtaXRWYXJSZWFkT25seUNoZWNrKFJlc29s
dmVUeXBlLCBHUFJSZWcgc2NyYXRjaEdQUik7Ci0gICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRl
KFdhdGNocG9pbnRTZXQqKTsKICAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50
KEdQUlJlZyBwb2ludGVyVG9TZXQpOwogCiAgICAgICAgIHZvaWQgZW1pdEluaXRSZWdpc3RlcihW
aXJ0dWFsUmVnaXN0ZXIpOwogCi0gICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVh
ZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKLQogICAgICAgICBib29sIGlz
S25vd25DZWxsKFZpcnR1YWxSZWdpc3Rlcik7CisKICAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFu
dE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAg
IGJvb2wgaXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAg
ZG91YmxlIGdldE9wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgc3JjKTsKKyNl
bmRpZgogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3Rlcik7
CisgICAgICAgIGludDMyX3QgZ2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBz
cmMpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIp
OwogCiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0
eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOb25Qcm9maWxlZEZ1bmN0aW9uPgpA
QCAtNzI5LDEyICs3MDIsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgICAgICBpdGVy
LT5mcm9tLmxpbmsodGhpcyk7CiAgICAgICAgICAgICArK2l0ZXI7CiAgICAgICAgIH0KLSAgICAg
ICAgdm9pZCBsaW5rRHVtbXlTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoIWl0ZXItPmZyb20uaXNTZXQo
KSk7Ci0gICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xv
d0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgVmlydHVh
bFJlZ2lzdGVyKTsKICAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRl
eChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywKICAgICAgICAgICAgIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKaW5kZXggOGY0
ZDgwYjk5Y2ZjOWU5MWZlMjMzZDRiZTkyNmY1NjM3ZjY2ZWM2ZS4uZjg2NzU4MzJhODdjYmVkYWFm
MTZiY2E4NzE1ZjhiMzVjZDVhZjkzMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRBcml0aG1ldGljLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VEFyaXRobWV0aWMuY3BwCkBAIC0xNDQsMTkgKzE0NCwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9q
YmVsb3dlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRf
Y29tcGFyZVVuc2lnbmVkQW5kSnVtcDxPcEpiZWxvd2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEJl
bG93T3JFcXVhbCk7CiB9CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotCiB2b2lkIEpJVDo6ZW1pdF9v
cF91bnNpZ25lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVW5zaWduZWQ+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVn
VDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKExlc3NUaGFuLCByZWdUMCwgVHJ1c3RlZElt
bTMyKDApKSk7Ci0gICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlZ1QwKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMSwganNSZWdUMTApOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChqc1JlZ1QxMCk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTGVzc1RoYW4sIGpzUmVnVDEw
LnBheWxvYWRHUFIoKSwgVHJ1c3RlZEltbTMyKDApKSk7CisgICAgYm94SW50MzIoanNSZWdUMTAu
cGF5bG9hZEdQUigpLCBqc1JlZ1QxMCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1
bHQsIGpzUmVnVDEwKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC0xNzgsNDYgKzE3
Niw0NyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVy
IG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaQogCiAgICAgYm9vbCBkaXNhbGxvd0FsbG9j
YXRpb24gPSBmYWxzZTsKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsKLSAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QwKTsKLSAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AyLCBqc1JlZ1QxMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2Vs
bChqc1JlZ1QxMCkpOwogICAgICAgICBKdW1wTGlzdCBmYWlsdXJlczsKLSAgICAgICAgZW1pdExv
YWRDaGFyYWN0ZXJTdHJpbmcocmVnVDAsIHJlZ1QwLCBmYWlsdXJlcyk7CisgICAgICAgIGVtaXRM
b2FkQ2hhcmFjdGVyU3RyaW5nKGpzUmVnVDEwLnBheWxvYWRHUFIoKSwgcmVnVDAsIGZhaWx1cmVz
KTsKICAgICAgICAgYWRkU2xvd0Nhc2UoZmFpbHVyZXMpOwogICAgICAgICBhZGRKdW1wKGJyYW5j
aDMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmVnVDAsIEltbTMyKGFzU3RyaW5nKGdldENvbnN0YW50
T3BlcmFuZChvcDEpKS0+dHJ5R2V0VmFsdWUoZGlzYWxsb3dBbGxvY2F0aW9uKVswXSkpLCB0YXJn
ZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENo
YXIob3AyKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOwot
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGpzUmVnVDEwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RDZWxsKGpzUmVnVDEwKSk7CiAgICAgICAgIEp1bXBMaXN0IGZhaWx1cmVzOwot
ICAgICAgICBlbWl0TG9hZENoYXJhY3RlclN0cmluZyhyZWdUMCwgcmVnVDAsIGZhaWx1cmVzKTsK
KyAgICAgICAgZW1pdExvYWRDaGFyYWN0ZXJTdHJpbmcoanNSZWdUMTAucGF5bG9hZEdQUigpLCBy
ZWdUMCwgZmFpbHVyZXMpOwogICAgICAgICBhZGRTbG93Q2FzZShmYWlsdXJlcyk7CiAgICAgICAg
IGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIoYXNTdHJpbmcoZ2V0Q29u
c3RhbnRPcGVyYW5kKG9wMikpLT50cnlHZXRWYWx1ZShkaXNhbGxvd0FsbG9jYXRpb24pWzBdKSks
IHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0
YW50SW50KG9wMikpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1Qw
KTsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGpzUmVnVDEwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SW50KGpzUmVnVDEwKTsKICAgICAgICAgaW50MzJfdCBvcDJpbW0gPSBnZXRPcGVy
YW5kQ29uc3RhbnRJbnQob3AyKTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24s
IHJlZ1QwLCBJbW0zMihvcDJpbW0pKSwgdGFyZ2V0KTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gz
Mihjb25kaXRpb24sIGpzUmVnVDEwLnBheWxvYWRHUFIoKSwgSW1tMzIob3AyaW1tKSksIHRhcmdl
dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50
KG9wMSkpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QxKTsKLSAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QxKTsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDIsIGpzUmVnVDMyKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SW50KGpzUmVnVDMyKTsKICAgICAgICAgaW50MzJfdCBvcDFpbW0gPSBnZXRPcGVyYW5kQ29u
c3RhbnRJbnQob3AxKTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb21tdXRlKGNvbmRpdGlv
biksIHJlZ1QxLCBJbW0zMihvcDFpbW0pKSwgdGFyZ2V0KTsKKyAgICAgICAgYWRkSnVtcChicmFu
Y2gzMihjb21tdXRlKGNvbmRpdGlvbiksIGpzUmVnVDMyLnBheWxvYWRHUFIoKSwgSW1tMzIob3Ax
aW1tKSksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ay
LCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AxLCBqc1JlZ1QxMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGpzUmVnVDMy
KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoanNSZWdUMTApOworICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEludChqc1JlZ1QzMik7CiAKLSAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRp
dGlvbiwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRp
dGlvbiwganNSZWdUMTAucGF5bG9hZEdQUigpLCBqc1JlZ1QzMi5wYXlsb2FkR1BSKCkpLCB0YXJn
ZXQpOwogfQogCisKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZVVuc2lnbmVkQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9u
YWxDb25kaXRpb24gY29uZGl0aW9uKQogewpAQCAtMjMxLDE2ICsyMzAsMTYgQEAgdm9pZCBKSVQ6
OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIFJlbGF0aW9uYWwKIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBs
KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdl
dCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgaWYgKGlzT3BlcmFuZENv
bnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJl
Z1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQob3AxLCByZWdUMCk7
CiAgICAgICAgIGludDMyX3Qgb3AyaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMik7CiAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIob3AyaW1tKSks
IHRhcmdldCk7CiAgICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0g
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKG9wMiwgcmVnVDEpOwogICAgICAgICBpbnQzMl90IG9w
MWltbSA9IGdldE9wZXJhbmRDb25zdGFudEludChvcDEpOwogICAgICAgICBhZGRKdW1wKGJyYW5j
aDMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmVnVDEsIEltbTMyKG9wMWltbSkpLCB0YXJnZXQpOwog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7
Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKG9wMSwgcmVnVDApOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChvcDIsIHJlZ1QxKTsKICAgICAgICAgYWRkSnVtcChicmFu
Y2gzMihjb25kaXRpb24sIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CiAgICAgfQogfQpAQCAtMjU4
LDIwICsyNTcsMjAgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IEluc3Ry
dWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGkKIHZvaWQgSklUOjplbWl0X2Nv
bXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9w
MSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7
CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
clBheWxvYWQob3AxLCByZWdUMCk7CiAgICAgICAgIGludDMyX3Qgb3AyaW1tID0gZ2V0T3BlcmFu
ZENvbnN0YW50SW50KG9wMik7CiAgICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIHJlZ1QwLCBJ
bW0zMihvcDJpbW0pLCByZWdUMCk7CiAgICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudElu
dChvcDEpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKG9wMiwgcmVnVDApOwogICAgICAg
ICBpbnQzMl90IG9wMWltbSA9IGdldE9wZXJhbmRDb25zdGFudEludChvcDEpOwogICAgICAgICBj
b21wYXJlMzIoY29tbXV0ZShjb25kaXRpb24pLCByZWdUMCwgSW1tMzIob3AxaW1tKSwgcmVnVDAp
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdU
MCk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKG9wMSwgcmVnVDApOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChvcDIsIHJlZ1QxKTsKICAgICAgICAgY29tcGFyZTMy
KGNvbmRpdGlvbiwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CiAgICAgfQotICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgIGJveEJvb2xlYW4ocmVnVDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwganNSZWdUMTApOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwg
dHlwZW5hbWUgU2xvd09wZXJhdGlvbj4KQEAgLTI5NSwyNiArMjk0LDM3IEBAIHZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJl
Z2lzdGVyIG9wMiwKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVy
YW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKICAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
IAotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIxKTsKLSAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMik7Ci0gICAgICAg
IGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb24sIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOworICAg
ICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJlZEFyZ3VtZW50
R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBh
cmcxSlNSID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMT4oKTsKKyAgICAg
ICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGFyZzJKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxT
bG93T3BlcmF0aW9uLCAyPigpOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ax
LCBhcmcxSlNSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZzJKU1Ip
OworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uLCBnbG9iYWxPYmplY3RHUFIsIGFyZzFKU1IsIGFyZzJKU1Ip
OwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6
IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAorICAgIGF1dG8gdW5ib3hEb3VibGUgPSBbdGhpc10oSlNWYWx1ZVJlZ3Mgc3JjLCBGUFJS
ZWcgZHN0KSB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgdGhpcy0+dW5ib3hEb3VibGVX
aXRob3V0QXNzZXJ0aW9ucyhzcmMucGF5bG9hZEdQUigpLCBzcmMucGF5bG9hZEdQUigpLCBkc3Qp
OworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgdGhpcy0+dW5ib3hEb3VibGUoc3Jj
LCBkc3QpOworI2VuZGlmCisgICAgfTsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChv
cDIpKSB7CiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICAgICAgaWYgKHN1
cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7Ci0gICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNo
SWZOb3ROdW1iZXIocmVnVDApOwotICAgICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIs
IHJlZ1QwKTsKLSAgICAgICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKKyAg
ICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihqc1JlZ1QxMCwgcmVnVDQp
OworICAgICAgICAgICAgdW5ib3hEb3VibGUoanNSZWdUMTAsIGZwUmVnVDApOwogCiAgICAgICAg
ICAgICBpbnQzMl90IG9wMmltbSA9IGdldENvbnN0YW50T3BlcmFuZChvcDIpLmFzSW50MzIoKTsK
IAotICAgICAgICAgICAgbW92ZShJbW0zMihvcDJpbW0pLCByZWdUMSk7Ci0gICAgICAgICAgICBj
b252ZXJ0SW50MzJUb0RvdWJsZShyZWdUMSwgZnBSZWdUMSk7CisgICAgICAgICAgICBtb3ZlKElt
bTMyKG9wMmltbSksIHJlZ1QyKTsKKyAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJl
Z1QyLCBmcFJlZ1QxKTsKIAogICAgICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoRG91
YmxlKGNvbmRpdGlvbiwgZnBSZWdUMCwgZnBSZWdUMSksIHRhcmdldCk7CiAKQEAgLTMyMyw5ICsz
MzMsOSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdp
c3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsCiAgICAgICAgICAgICBmYWlsMS5saW5rKHRo
aXMpOwogICAgICAgICB9CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJl
Z1QxKTsKLSAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7Ci0gICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDIsIGpzUmVnVDMyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUNCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUNCwganNSZWdUMTAs
IGpzUmVnVDMyKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVy
dCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CkBAIC0zMzQsOSArMzQ0LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLAog
ICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgICAgIGlmIChzdXBwb3J0c0Zs
b2F0aW5nUG9pbnQoKSkgewotICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVt
YmVyKHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7
Ci0gICAgICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMSwgZnBSZWdUMSk7CisgICAgICAgICAg
ICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIoanNSZWdUMzIsIHJlZ1Q0KTsKKyAgICAg
ICAgICAgIHVuYm94RG91YmxlKGpzUmVnVDMyLCBmcFJlZ1QxKTsKIAogICAgICAgICAgICAgaW50
MzJfdCBvcDFpbW0gPSBnZXRDb25zdGFudE9wZXJhbmQob3AxKS5hc0ludDMyKCk7CiAKQEAgLTM1
MCw5ICszNTksOSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1
YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsCiAgICAgICAgICAgICBmYWlsMS5s
aW5rKHRoaXMpOwogICAgICAgICB9CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDEsIHJlZ1QyKTsKLSAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7Ci0gICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMywgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGpzUmVnVDEwKTsKKyAgICAgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUNCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUNCwganNS
ZWdUMTAsIGpzUmVnVDMyKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMy
KGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC0zNjAsMTMgKzM2OSwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3Rl
ciBvcDIsCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBMSFMgaXMgbm90IEludC4KIAogICAg
IGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewotICAgICAgICBKdW1wIGZhaWwxID0gYnJh
bmNoSWZOb3ROdW1iZXIocmVnVDApOwotICAgICAgICBKdW1wIGZhaWwyID0gYnJhbmNoSWZOb3RO
dW1iZXIocmVnVDEpOwotICAgICAgICBKdW1wIGZhaWwzID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7
Ci0gICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7Ci0gICAgICAgIGFkZDY0
KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7Ci0gICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1Qw
LCBmcFJlZ1QwKTsKLSAgICAgICAgbW92ZTY0VG9Eb3VibGUocmVnVDEsIGZwUmVnVDEpOworICAg
ICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIoanNSZWdUMTAsIHJlZ1Q0KTsKKyAg
ICAgICAgSnVtcCBmYWlsMiA9IGJyYW5jaElmTm90TnVtYmVyKGpzUmVnVDMyLCByZWdUNCk7Cisg
ICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKGpzUmVnVDMyKTsKKyAgICAgICAgdW5i
b3hEb3VibGUoanNSZWdUMTAsIGZwUmVnVDApOworICAgICAgICB1bmJveERvdWJsZShqc1JlZ1Qz
MiwgZnBSZWdUMSk7CiAKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoRG91YmxlKGNv
bmRpdGlvbiwgZnBSZWdUMCwgZnBSZWdUMSksIHRhcmdldCk7CiAKQEAgLTM3OCw4ICszODUsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBv
cDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsCiAgICAgfQogCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OyAvLyBSSFMgaXMgbm90IEludC4KLSAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUNCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1Q0LCBq
c1JlZ1QxMCwganNSZWdUMzIpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihp
bnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBA
IC0zODgsMTEgKzM5NSwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbmMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEluYz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNv
ZGUubV9zcmNEc3Q7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDAp
OwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsKLSAgICBib3hJ
bnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHNyY0RzdCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIGpzUmVn
VDEwKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoanNSZWdUMTApOworICAgIGFkZFNs
b3dDYXNlKGJyYW5jaEFkZDMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGpzUmVnVDEwLnBh
eWxvYWRHUFIoKSkpOworICAgIGJveEludDMyKGpzUmVnVDEwLnBheWxvYWRHUFIoKSwganNSZWdU
MTApOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCBqc1JlZ1QxMCk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtNDAwLDExICs0MDcsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BEZWM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9
IGJ5dGVjb2RlLm1fc3JjRHN0OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3Qs
IHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaFN1YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7Ci0g
ICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihzcmNEc3QpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0
LCBqc1JlZ1QxMCk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGpzUmVnVDEwKTsKKyAg
ICBhZGRTbG93Q2FzZShicmFuY2hTdWIzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBqc1Jl
Z1QxMC5wYXlsb2FkR1BSKCkpKTsKKyAgICBib3hJbnQzMihqc1JlZ1QxMC5wYXlsb2FkR1BSKCks
IGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwganNSZWdUMTAp
OwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQkVHSU46IE9QX01PRCAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTQ0MCw4ICs0NDcsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICBKdW1wIG51bWVyYXRvclBvc2l0aXZlID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFs
LCByZWdUNCwgVHJ1c3RlZEltbTMyKDApKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIo
WmVybywgZWR4KSk7CiAgICAgbnVtZXJhdG9yUG9zaXRpdmUubGluayh0aGlzKTsKLSAgICBib3hJ
bnQzMihlZHgsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihyZXN1bHQpOworICAgIGJveEludDMyKGVkeCwganNSZWdUMTApOworICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCBqc1JlZ1QxMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xv
d19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTQ2OSwyNjQgKzQ3Niw2IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJikKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVO
RDogT1BfTU9EIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0jZWxzZSAvLyBV
U0UoSlNWQUxVRTY0KQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxD
b25kaXRpb24gY29uZGl0aW9uKQotewotICAgIEp1bXBMaXN0IG5vdEludDMyT3AxOwotICAgIEp1
bXBMaXN0IG5vdEludDMyT3AyOwotCi0gICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwotICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotCi0g
ICAgLy8gQ2hhcmFjdGVyIGxlc3MuCi0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEp
KSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSwgcmVnVDApOwot
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDEpKTsKLSAgICAgICAgSnVt
cExpc3QgZmFpbHVyZXM7Ci0gICAgICAgIGVtaXRMb2FkQ2hhcmFjdGVyU3RyaW5nKHJlZ1QwLCBy
ZWdUMCwgZmFpbHVyZXMpOwotICAgICAgICBhZGRTbG93Q2FzZShmYWlsdXJlcyk7Ci0gICAgICAg
IGFkZEp1bXAoYnJhbmNoMzIoY29tbXV0ZShjb25kaXRpb24pLCByZWdUMCwgSW1tMzIoYXNTdHJp
bmcoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkpLT50cnlHZXRWYWx1ZSgpWzBdKSksIHRhcmdldCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihv
cDIpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMSwgcmVnVDAp
OwotICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDEpKTsKLSAgICAgICAg
SnVtcExpc3QgZmFpbHVyZXM7Ci0gICAgICAgIGVtaXRMb2FkQ2hhcmFjdGVyU3RyaW5nKHJlZ1Qw
LCByZWdUMCwgZmFpbHVyZXMpOwotICAgICAgICBhZGRTbG93Q2FzZShmYWlsdXJlcyk7Ci0gICAg
ICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIoYXNTdHJpbmcoZ2V0
Q29uc3RhbnRPcGVyYW5kKG9wMikpLT50cnlHZXRWYWx1ZSgpWzBdKSksIHRhcmdldCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9IAotICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7
Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMywgcmVnVDIpOwotICAg
ICAgICBub3RJbnQzMk9wMi5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyZWdUMykpOwotICAgICAg
ICBhZGRKdW1wKGJyYW5jaDMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmVnVDIsIEltbTMyKGdldENv
bnN0YW50T3BlcmFuZChvcDEpLmFzSW50MzIoKSkpLCB0YXJnZXQpOwotICAgIH0gZWxzZSBpZiAo
aXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMSwgcmVnVDEsIHJlZ1QwKTsKLSAgICAgICAgbm90SW50MzJPcDEuYXBwZW5kKGJyYW5j
aElmTm90SW50MzIocmVnVDEpKTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24s
IHJlZ1QwLCBJbW0zMihnZXRDb25zdGFudE9wZXJhbmQob3AyKS5hc0ludDMyKCkpKSwgdGFyZ2V0
KTsKLSAgICB9IGVsc2UgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVn
VDEsIHJlZ1QwKTsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QzLCBy
ZWdUMik7Ci0gICAgICAgIG5vdEludDMyT3AxLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJlZ1Qx
KSk7Ci0gICAgICAgIG5vdEludDMyT3AyLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJlZ1QzKSk7
Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgcmVnVDIpLCB0YXJn
ZXQpOwotICAgIH0KLQotICAgIGlmICghc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKLSAgICAg
ICAgYWRkU2xvd0Nhc2Uobm90SW50MzJPcDEpOwotICAgICAgICBhZGRTbG93Q2FzZShub3RJbnQz
Mk9wMik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgSnVtcCBlbmQgPSBqdW1wKCk7Ci0K
LSAgICAvLyBEb3VibGUgbGVzcy4KLSAgICBlbWl0QmluYXJ5RG91YmxlT3A8T3A+KGluc3RydWN0
aW9uLCBPcGVyYW5kVHlwZXMoKSwgbm90SW50MzJPcDEsIG5vdEludDMyT3AyLCAhaXNPcGVyYW5k
Q29uc3RhbnRJbnQob3AxKSwgaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSB8fCAhaXNPcGVyYW5k
Q29uc3RhbnRJbnQob3AyKSk7Ci0gICAgZW5kLmxpbmsodGhpcyk7Ci19Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikK
LXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIFZpcnR1
YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
ID0gYnl0ZWNvZGUubV9yaHM7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0KLSAgICBpZiAoaXNPcGVyYW5kQ29u
c3RhbnRJbnQob3AxKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVn
VDMsIHJlZ1QyKTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb21tdXRlKGNvbmRpdGlvbiks
IHJlZ1QyLCBJbW0zMihnZXRDb25zdGFudE9wZXJhbmQob3AxKS5hc0ludDMyKCkpKSwgdGFyZ2V0
KTsKLSAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QxLCByZWdUMCk7Ci0gICAgICAgIGFkZEp1
bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKG9w
MikuYXNJbnQzMigpKSksIHRhcmdldCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QxLCByZWdUMCk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AyLCByZWdUMywgcmVnVDIpOwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNv
bmRpdGlvbiwgcmVnVDAsIHJlZ1QyKSwgdGFyZ2V0KTsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQotewotICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRl
Y29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7Ci0K
LSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDMsIHJlZ1QyKTsKLSAgICAgICAgY29tcGFyZTMyKGNvbW11
dGUoY29uZGl0aW9uKSwgcmVnVDIsIEltbTMyKGdldENvbnN0YW50T3BlcmFuZChvcDEpLmFzSW50
MzIoKSksIHJlZ1QwKTsKLSAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikp
IHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QxLCByZWdUMCk7Ci0g
ICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIHJlZ1QwLCBJbW0zMihnZXRDb25zdGFudE9wZXJh
bmQob3AyKS5hc0ludDMyKCkpLCByZWdUMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QxLCByZWdUMCk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AyLCByZWdUMywgcmVnVDIpOwotICAgICAgICBjb21wYXJlMzIoY29uZGl0
aW9uLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKLSAgICB9Ci0gICAgZW1pdFN0b3JlQm9vbChkc3Qs
IHJlZ1QwKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbG93T3BlcmF0
aW9uPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9u
ICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwg
Ym9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0g
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5
dGVjb2RlLm1fcmhzOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMSwgcmVnVDApOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMywgcmVnVDIpOwotICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDQpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUNCwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7Ci0gICAg
ZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCBy
ZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLXZv
aWQgSklUOjplbWl0QmluYXJ5RG91YmxlT3AoY29uc3QgSW5zdHJ1Y3Rpb24gKmluc3RydWN0aW9u
LCBPcGVyYW5kVHlwZXMgdHlwZXMsIEp1bXBMaXN0JiBub3RJbnQzMk9wMSwgSnVtcExpc3QmIG5v
dEludDMyT3AyLCBib29sIG9wMUlzSW5SZWdpc3RlcnMsIGJvb2wgb3AySXNJblJlZ2lzdGVycykK
LXsKLSAgICBKdW1wTGlzdCBlbmQ7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24t
PmFzPE9wPigpOwotICAgIGludCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKLSAgICBpbnQgdGFy
Z2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdp
c3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKLQotICAgIGlmICghbm90SW50MzJPcDEuZW1wdHko
KSkgewotICAgICAgICAvLyBEb3VibGUgY2FzZSAxOiBPcDEgaXMgbm90IGludDMyOyBPcDIgaXMg
dW5rbm93bi4KLSAgICAgICAgbm90SW50MzJPcDEubGluayh0aGlzKTsKLQotICAgICAgICBBU1NF
UlQob3AxSXNJblJlZ2lzdGVycyk7Ci0KLSAgICAgICAgLy8gVmVyaWZ5IE9wMSBpcyBkb3VibGUu
Ci0gICAgICAgIGlmICghdHlwZXMuZmlyc3QoKS5kZWZpbml0ZWx5SXNOdW1iZXIoKSkKLSAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6Okxvd2VzdFRhZykpKTsKLQotICAgICAgICBpZiAoIW9wMklzSW5SZWdpc3RlcnMpCi0g
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDMsIHJlZ1QyKTsKLQot
ICAgICAgICBKdW1wIGRvdWJsZU9wMiA9IGJyYW5jaDMyKEJlbG93LCByZWdUMywgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpOwotCi0gICAgICAgIGlmICghdHlwZXMuc2Vjb25kKCku
ZGVmaW5pdGVseUlzTnVtYmVyKCkpCi0gICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dEludDMyKHJlZ1QzKSk7Ci0KLSAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmVnVDIsIGZw
UmVnVDApOwotICAgICAgICBKdW1wIGRvVGhlTWF0aCA9IGp1bXAoKTsKLQotICAgICAgICAvLyBM
b2FkIE9wMiBhcyBkb3VibGUgaW50byBkb3VibGUgcmVnaXN0ZXIuCi0gICAgICAgIGRvdWJsZU9w
Mi5saW5rKHRoaXMpOwotICAgICAgICBlbWl0TG9hZERvdWJsZShvcDIsIGZwUmVnVDApOwotCi0g
ICAgICAgIC8vIERvIHRoZSBtYXRoLgotICAgICAgICBkb1RoZU1hdGgubGluayh0aGlzKTsKLSAg
ICAgICAgc3dpdGNoIChvcGNvZGVJRCkgewotICAgICAgICBjYXNlIG9wX2psZXNzOgotICAgICAg
ICAgICAgZW1pdExvYWREb3VibGUob3AxLCBmcFJlZ1QyKTsKLSAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCwgZnBSZWdUMiwgZnBSZWdUMCks
IHRhcmdldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBvcF9qbGVzc2VxOgot
ICAgICAgICAgICAgZW1pdExvYWREb3VibGUob3AxLCBmcFJlZ1QyKTsKLSAgICAgICAgICAgIGFk
ZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIGZwUmVn
VDIsIGZwUmVnVDApLCB0YXJnZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
b3BfamdyZWF0ZXI6Ci0gICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDEsIGZwUmVnVDIpOwot
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW5BbmRPcmRl
cmVkLCBmcFJlZ1QyLCBmcFJlZ1QwKSwgdGFyZ2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIG9wX2pncmVhdGVyZXE6Ci0gICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDEs
IGZwUmVnVDIpOwotICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlR3JlYXRl
clRoYW5PckVxdWFsQW5kT3JkZXJlZCwgZnBSZWdUMiwgZnBSZWdUMCksIHRhcmdldCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBvcF9qbmxlc3M6Ci0gICAgICAgICAgICBlbWl0
TG9hZERvdWJsZShvcDEsIGZwUmVnVDIpOwotICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3Vi
bGUoRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIGZwUmVnVDAsIGZwUmVnVDIpLCB0
YXJnZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ugb3Bfam5sZXNzZXE6Ci0g
ICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDEsIGZwUmVnVDIpOwotICAgICAgICAgICAgYWRk
SnVtcChicmFuY2hEb3VibGUoRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCwgZnBSZWdUMCwgZnBS
ZWdUMiksIHRhcmdldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBvcF9qbmdy
ZWF0ZXI6Ci0gICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDEsIGZwUmVnVDIpOwotICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9y
ZGVyZWQsIGZwUmVnVDAsIGZwUmVnVDIpLCB0YXJnZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6Ci0gICAgICAgICAgICBlbWl0TG9hZERvdWJsZShv
cDEsIGZwUmVnVDIpOwotICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlR3Jl
YXRlclRoYW5PclVub3JkZXJlZCwgZnBSZWdUMCwgZnBSZWdUMiksIHRhcmdldCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFub3RJbnQzMk9w
Mi5lbXB0eSgpKQotICAgICAgICAgICAgZW5kLmFwcGVuZChqdW1wKCkpOwotICAgIH0KLQotICAg
IGlmICghbm90SW50MzJPcDIuZW1wdHkoKSkgewotICAgICAgICAvLyBEb3VibGUgY2FzZSAyOiBP
cDEgaXMgaW50MzI7IE9wMiBpcyBub3QgaW50MzIuCi0gICAgICAgIG5vdEludDMyT3AyLmxpbmso
dGhpcyk7Ci0KLSAgICAgICAgQVNTRVJUKG9wMklzSW5SZWdpc3RlcnMpOwotCi0gICAgICAgIGlm
ICghb3AxSXNJblJlZ2lzdGVycykKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQ
YXlsb2FkKG9wMSwgcmVnVDApOwotCi0gICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJlZ1Qw
LCBmcFJlZ1QwKTsKLQotICAgICAgICAvLyBWZXJpZnkgb3AyIGlzIGRvdWJsZS4KLSAgICAgICAg
aWYgKCF0eXBlcy5zZWNvbmQoKS5kZWZpbml0ZWx5SXNOdW1iZXIoKSkKLSAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlLCByZWdUMywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxv
d2VzdFRhZykpKTsKLQotICAgICAgICAvLyBEbyB0aGUgbWF0aC4KLSAgICAgICAgc3dpdGNoIChv
cGNvZGVJRCkgewotICAgICAgICBjYXNlIG9wX2psZXNzOgotICAgICAgICAgICAgZW1pdExvYWRE
b3VibGUob3AyLCBmcFJlZ1QxKTsKLSAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERv
dWJsZUxlc3NUaGFuQW5kT3JkZXJlZCwgZnBSZWdUMCwgZnBSZWdUMSksIHRhcmdldCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBvcF9qbGVzc2VxOgotICAgICAgICAgICAgZW1p
dExvYWREb3VibGUob3AyLCBmcFJlZ1QxKTsKLSAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91
YmxlKERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIGZwUmVnVDAsIGZwUmVnVDEpLCB0
YXJnZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ugb3BfamdyZWF0ZXI6Ci0g
ICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDIsIGZwUmVnVDEpOwotICAgICAgICAgICAgYWRk
SnVtcChicmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVkLCBmcFJlZ1QwLCBm
cFJlZ1QxKSwgdGFyZ2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIG9wX2pn
cmVhdGVyZXE6Ci0gICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDIsIGZwUmVnVDEpOwotICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5k
T3JkZXJlZCwgZnBSZWdUMCwgZnBSZWdUMSksIHRhcmdldCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBvcF9qbmxlc3M6Ci0gICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDIs
IGZwUmVnVDEpOwotICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlTGVzc1Ro
YW5PckVxdWFsT3JVbm9yZGVyZWQsIGZwUmVnVDEsIGZwUmVnVDApLCB0YXJnZXQpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ugb3Bfam5sZXNzZXE6Ci0gICAgICAgICAgICBlbWl0
TG9hZERvdWJsZShvcDIsIGZwUmVnVDEpOwotICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3Vi
bGUoRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCwgZnBSZWdUMSwgZnBSZWdUMCksIHRhcmdldCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBvcF9qbmdyZWF0ZXI6Ci0gICAgICAg
ICAgICBlbWl0TG9hZERvdWJsZShvcDIsIGZwUmVnVDEpOwotICAgICAgICAgICAgYWRkSnVtcChi
cmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIGZwUmVnVDEs
IGZwUmVnVDApLCB0YXJnZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ugb3Bf
am5ncmVhdGVyZXE6Ci0gICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDIsIGZwUmVnVDEpOwot
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW5PclVub3Jk
ZXJlZCwgZnBSZWdUMSwgZnBSZWdUMCksIHRhcmdldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBlbmQubGluayh0aGlzKTsKLX0KLQotI2VuZGlmIC8v
IFVTRShKU1ZBTFVFNjQpCi0KIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+dW5hcnlBcml0aFByb2ZpbGUoY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKS5tX3Byb2ZpbGVJbmRleCk7CkBAIC03NTMsMTcg
KzUwMiwxMCBAQCB2b2lkIEpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsaQogICAgIFZpcnR1YWxSZWdpc3RlciBv
cDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUu
bV9yaHM7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7Ci0jZW5kaWYKKyAg
ICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBqc1JlZ1QxMDsKKyAgICBjb25zdGV4
cHIgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0ganNSZWdUMzI7CisgICAgY29uc3RleHByIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2hHUFIgPSByZWdUNDsKIAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kOwogICAgIFNu
aXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZDsKQEAgLTc5OSwyMyArNTQxLDE3IEBAIHZvaWQgSklU
OjplbWl0X29wX2JpdG5vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSNlbHNlCi0g
ICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotI2Vu
ZGlmCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGpzUmVnVDEwKTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0KLSAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdEludDMyKGxlZnRSZWdzKSk7Ci0gICAgbm90MzIobGVmdFJlZ3MucGF5bG9hZEdQ
UigpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEludDMyKGpzUmVnVDEwKSk7CisgICAg
bm90MzIoanNSZWdUMTAucGF5bG9hZEdQUigpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGJv
eEludDMyKGxlZnRSZWdzLnBheWxvYWRHUFIoKSwgbGVmdFJlZ3MpOworICAgIGJveEludDMyKGpz
UmVnVDEwLnBheWxvYWRHUFIoKSwganNSZWdUMTApOwogI2VuZGlmCiAKICAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShieXRlY29kZSk7CiAKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHJlc3VsdCwgbGVmdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0LCBqc1JlZ1QxMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2JpdGFuZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtODYxLDE3ICs1OTcsMTAgQEAg
dm9pZCBKSVQ6OmVtaXRSaWdodFNoaWZ0RmFzdFBhdGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgSklUUmlnaHQKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNv
ZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7
Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gcmVnVDI7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVn
czsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OwotI2VuZGlmCisgICAgY29uc3RleHBy
IEpTVmFsdWVSZWdzIGxlZnRSZWdzID0ganNSZWdUMTA7CisgICAgY29uc3RleHByIEpTVmFsdWVS
ZWdzIHJpZ2h0UmVncyA9IGpzUmVnVDMyOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVn
VDQ7CiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZDsKICAgICBTbmlwcGV0T3BlcmFu
ZCByaWdodE9wZXJhbmQ7CkBAIC05MzIsMTcgKzY2MSwxMiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJ
Q0Zhc3QoSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlv
biogYwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBwcmVmZXJy
ZWRBcmd1bWVudEdQUjxQcm9maWxlZEZ1bmN0aW9uLCAwPigpOworICAgIGNvbnN0ZXhwciBKU1Zh
bHVlUmVncyBzcmNSZWdzID0gcHJlZmVycmVkQXJndW1lbnRKU1I8UHJvZmlsZWRGdW5jdGlvbiwg
MT4oKTsKICAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJl
Z2lzdGVyIGFzIHNyYyBhbmQgZHN0LgotICAgIC8vIFNpbmNlIHJlZ1QxPT1hcmd1bWVudEdQUjEs
IHVzaW5nIHJlZ1QxIGF2b2lkIHNodWZmbGluZyByZWdpc3RlciB0byBjYWxsIHRoZSBzbG93IHBh
dGguCi0gICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gcmVnVDI7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7Ci0j
ZW5kaWYKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHNyY1JlZ3M7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gZ2xvYmFsT2JqZWN0R1BSOworICAgIHN0
YXRpY19hc3NlcnQobm9PdmVybGFwKHNyY1JlZ3MsIHNjcmF0Y2hHUFIpKTsKIAogI2lmIEVOQUJM
RShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gaW5saW5lU3RhcnQgPSBsYWJlbCgpOwpAQCAtOTU3
LDExICs2ODEsMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPEdl
bmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGMKICAgICBib29sIGdlbmVyYXRl
ZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBtYXRoSUNHZW5lcmF0
aW9uU3RhdGUpOwogICAgIGlmICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgewogICAgICAgICBVbmFy
eUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKLSAg
ICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICAgICAgbG9hZEdsb2JhbE9i
amVjdChnbG9iYWxPYmplY3RHUFIpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3Vs
ZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHBy
b2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3MsIGFyaXRoUHJv
ZmlsZSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0
aW9uLCByZXN1bHRSZWdzLCBnbG9iYWxPYmplY3RHUFIsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblBy
b2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3MpOworICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0
UmVncywgZ2xvYmFsT2JqZWN0R1BSLCBzcmNSZWdzKTsKICAgICB9IGVsc2UKICAgICAgICAgYWRk
U2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOwogCkBAIC05ODQs
MTcgKzcwOCwxMyBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDPEdl
bmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29k
ZS5tX3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMCk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMzsKLSNlbHNlCi0gICAgSlNWYWx1
ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVS
ZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7
Ci0jZW5kaWYKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJl
ZEFyZ3VtZW50R1BSPFByb2ZpbGVkRnVuY3Rpb24sIDA+KCk7CisgICAgY29uc3RleHByIEpTVmFs
dWVSZWdzIGxlZnRSZWdzID0gcHJlZmVycmVkQXJndW1lbnRKU1I8UHJvZmlsZWRGdW5jdGlvbiwg
MT4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gcHJlZmVycmVkQXJn
dW1lbnRKU1I8UHJvZmlsZWRGdW5jdGlvbiwgMj4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IHJldHVyblZhbHVlSlNSOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHJlZ1Q1OworICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKGxlZnRSZWdzLCBy
aWdodFJlZ3MsIHNjcmF0Y2hHUFIpKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG5vT3ZlcmxhcChyZXN1
bHRSZWdzLCBzY3JhdGNoR1BSKSk7CiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChi
eXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdo
dE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwpAQCAtMTAyOCwxMSAr
NzQ4LDExIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUM8R2VuZXJh
dG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbioKICAgICAgICAgZWxzZSBpZiAocmlnaHRP
cGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ay
LCByaWdodFJlZ3MpOwogICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7Ci0gICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRj
aEdQUik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKICAgICAg
ICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBz
Y3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAg
ICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywg
Z2xvYmFsT2JqZWN0R1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxl
ZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsK
KyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24s
IHJlc3VsdFJlZ3MsIGdsb2JhbE9iamVjdEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CiAgICAg
fSBlbHNlCiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0
aEp1bXBzKTsKIApAQCAtMTA1NiwyNyArNzc2LDIzIEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xv
dyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBj
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogCi0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0jZWxzZQotICAg
IEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotI2VuZGlm
CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmpldEdQUiA9IHByZWZlcnJlZEFyZ3VtZW50
R1BSPFByb2ZpbGVkRnVuY3Rpb24sIDA+KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHNy
Y1JlZ3MgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxQcm9maWxlZEZ1bmN0aW9uLCAxPigpOworICAg
IGNvbnN0ZXhwciBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmV0dXJuVmFsdWVKU1I7CiAKICNp
ZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBsYWJlbCgp
OwogI2VuZGlmCiAKICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElD
LT5hcml0aFByb2ZpbGUoKTsKLSAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KGdsb2JhbE9iamV0R1BSKTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNo
b3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRl
LnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0
PEpfSklUT3BlcmF0aW9uX0dKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJl
Z3MsIHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAg
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRj
aEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgZ2xvYmFsT2JqZXRHUFIsIHNyY1JlZ3MsIFRydXN0ZWRJ
bW1QdHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1
bmN0aW9uLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAg
ICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBnbG9iYWxPYmpldEdQUiwg
c3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0aElDR2VuZXJh
dGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJw
cmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJl
Z3MsIHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRo
SUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQo
cmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwg
cmVzdWx0UmVncywgZ2xvYmFsT2JqZXRHUFIsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElD
KSk7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0g
bGFiZWwoKTsKQEAgLTExMDUsMTYgKzgyMSwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3co
SklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdp
c3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNW
YWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3Mg
cmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mg
PSBsZWZ0UmVnczsKLSNlbmRpZgotICAgIAorICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2Jq
ZXRHUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxQcm9maWxlZEZ1bmN0aW9uLCAwPigpOworICAg
IGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFBy
b2ZpbGVkRnVuY3Rpb24sIDE+KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHJpZ2h0UmVn
cyA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFByb2ZpbGVkRnVuY3Rpb24sIDI+KCk7CisgICAgY29u
c3RleHByIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXR1cm5WYWx1ZUpTUjsKKwogICAgIFNu
aXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkp
OwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBl
cy5zZWNvbmQoKSk7CiAKQEAgLTExMzUsMTQgKzg0NiwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJ
Q1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rp
b24qCiAjZW5kaWYKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0
aElDLT5hcml0aFByb2ZpbGUoKTsKLSAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamV0R1BSKTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYm
IHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0
YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8
Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJl
Z3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwor
ICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHByb2Zp
bGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgZ2xvYmFsT2JqZXRHUFIsIGxlZnRSZWdz
LCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3Ms
IHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0
aW9uLCByZXN1bHRSZWdzLCBnbG9iYWxPYmpldEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJp
dGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNs
b3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9w
ZXJhdGlvbl9HSkpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0
UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0
d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0
UmVncywgZ2xvYmFsT2JqZXRHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIo
bWF0aElDKSk7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRo
RW5kID0gbGFiZWwoKTsKQEAgLTExNjcsMTggKzg3OCwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9k
aXYoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5
dGVjb2RlLm1fcmhzOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdz
OwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdz
IGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyBy
aWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OwotI2Vu
ZGlmCi0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgIGNvbnN0ZXhwciBKU1Zh
bHVlUmVncyBsZWZ0UmVncyA9IGpzUmVnVDEwOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBy
aWdodFJlZ3MgPSBqc1JlZ1QzMjsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IGxlZnRSZWdzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0Owor
ICAgIGNvbnN0ZXhwciBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CiAKICAgICBCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG51bGxwdHI7CiAgICAgaWYgKHNob3VsZEVtaXRQ
cm9maWxpbmcoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJp
dGhtZXRpYzMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRp
YzMyXzY0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRkYmNiMzA2OGJlZDli
NzU4NzQ1ODEzZGM1NTQzZWVlOThkNWEzYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMz
Ml82NC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKgotKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgotKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0qIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0q
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShKSVQpCi0jaWYg
VVNFKEpTVkFMVUUzMl82NCkKLSNpbmNsdWRlICJKSVQuaCIKLQotI2luY2x1ZGUgIkNvZGVCbG9j
ay5oIgotI2luY2x1ZGUgIkpJVElubGluZXMuaCIKLSNpbmNsdWRlICJKU0FycmF5LmgiCi0jaW5j
bHVkZSAiSlNGdW5jdGlvbi5oIgotI2luY2x1ZGUgIkludGVycHJldGVyLmgiCi0jaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlJlc3VsdFR5cGUuaCIKLSNpbmNsdWRlICJTbG93UGF0
aENhbGwuaCIKLQotCi1uYW1lc3BhY2UgSlNDIHsKLQotdm9pZCBKSVQ6OmVtaXRfb3BfdW5zaWdu
ZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpOwotICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AxLCByZWdUMSwgcmVnVDApOwotICAgIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
SW50MzIocmVnVDEpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihMZXNzVGhhbiwgcmVnVDAs
IFRydXN0ZWRJbW0zMigwKSkpOwotICAgIGVtaXRTdG9yZUludDMyKHJlc3VsdCwgcmVnVDAsIHJl
c3VsdCA9PSBvcDEpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9pbmMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEluYz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0
ZWNvZGUubV9zcmNEc3Q7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVn
VDEsIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SW50MzIocmVnVDEpKTsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBy
ZWdUMCkpOwotICAgIGVtaXRTdG9yZUludDMyKHNyY0RzdCwgcmVnVDAsIHRydWUpOwotfQotCi12
b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYz4o
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7Ci0KLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDEsIHJlZ1QwKTsKLQotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90SW50MzIocmVnVDEpKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hTdWIzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOwotICAgIGVtaXRTdG9y
ZUludDMyKHNyY0RzdCwgcmVnVDAsIHRydWUpOwotfQotCi0vLyBNb2QgKCUpCi0KLS8qIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCRUdJTjogT1BfTU9EIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSAqLwotCi12b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhD
YWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX21vZCk7Ci0gICAgc2xvd1Bh
dGhDYWxsLmNhbGwoKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKQotewotICAgIC8vIFdl
IHdvdWxkIGhhdmUgcmVhbGx5IHVzZWZ1bCBhc3NlcnRpb25zIGhlcmUgaWYgaXQgd2Fzbid0IGZv
ciB0aGUgY29tcGlsZXIncwotICAgIC8vIGluc2lzdGVuY2Ugb24gYXR0cmlidXRlIG5vcmV0dXJu
LgotICAgIC8vIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLS8qIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFTkQ6IE9QX01PRCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gKi8KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBVU0UoSlNWQUxV
RTMyXzY0KQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKaW5kZXggZjMyMGNiYmMyOGJiODc0
MWM5ZWQ2OWY4Y2UxYTFmNTE4YTk5NGM5MS4uM2UyNmRiOTU3ZTNlZDQ2ZGY4NWNlZWI3ZTNkNTJi
YWI0ZDRjNTQxMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxp
bmVDYWNoZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3IuaApAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKEpJVCkK
IAorI2luY2x1ZGUgIkFzc2VtYmx5SGVscGVycy5oIgogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIK
ICNpbmNsdWRlICJKSVRPcGVyYXRpb25WYWxpZGF0aW9uLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgpAQCAtMTEzLDI1ICsxMTQsMjUgQEAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaDMgPSBHUFJJbmZvOjpyZWdUNTsKIAogbmFtZXNwYWNlIEJhc2VsaW5lSW5zdGFuY2VvZlJl
Z2lzdGVycyB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLWNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0IHsg
R1BSSW5mbzo6cmVnVDAgfTsKLWNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgeyBHUFJJbmZvOjphcmd1
bWVudEdQUjIgfTsKLWNvbnN0ZXhwciBHUFJSZWcgcHJvdG8geyBHUFJJbmZvOjphcmd1bWVudEdQ
UjMgfTsKLWNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8geyBHUFJJbmZvOjphcmd1bWVudEdQUjEg
fTsKLWNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgeyBHUFJJbmZvOjpub25BcmdHUFIwIH07Ci1j
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyIHsgR1BSSW5mbzo6bm9uQXJnR1BSMSB9OworY29uc3Rl
eHByIEpTVmFsdWVSZWdzIHJlc3VsdEpTUiB7IEdQUkluZm86OnJlZ1QwIH07Citjb25zdGV4cHIg
SlNWYWx1ZVJlZ3MgdmFsdWVKU1IgeyBHUFJJbmZvOjphcmd1bWVudEdQUjIgfTsKK2NvbnN0ZXhw
ciBKU1ZhbHVlUmVncyBwcm90b0pTUiB7IEdQUkluZm86OmFyZ3VtZW50R1BSMyB9OworY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiB7IEdQUkluZm86OmFyZ3VtZW50R1BSMSB9OworY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoMUdQUiB7IEdQUkluZm86Om5vbkFyZ0dQUjAgfTsKK2NvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaDJHUFIgeyBHUFJJbmZvOjpub25BcmdHUFIxIH07CiAjZWxpZiBVU0Uo
SlNWQUxVRTMyXzY0KQotY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgeyBHUFJJbmZvOjpyZWdU
MCB9OwotY29uc3RleHByIEpTVmFsdWVSZWdzIHZhbHVlSlNSICB7IEdQUkluZm86OmFyZ3VtZW50
R1BSMywgR1BSSW5mbzo6YXJndW1lbnRHUFIyIH07Ci1jb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcHJv
dG9KU1IgIHsgR1BSSW5mbzo6cmVnVDUsIEdQUkluZm86OnJlZ1Q0IH07Citjb25zdGV4cHIgSlNW
YWx1ZVJlZ3MgcmVzdWx0SlNSIHsgSlNSSW5mbzo6anNSZWdUMTAgfTsKKyNpZiBDUFUoTUlQUykK
K2NvbnN0ZXhwciBKU1ZhbHVlUmVncyB2YWx1ZUpTUiB7IEdQUkluZm86OmFyZ3VtZW50R1BSMywg
R1BSSW5mbzo6YXJndW1lbnRHUFIyIH07CisjZWxzZQorY29uc3RleHByIEpTVmFsdWVSZWdzIHZh
bHVlSlNSIHsgSlNSSW5mbzo6anNSZWdUMzIgfTsKKyNlbmRpZgorY29uc3RleHByIEpTVmFsdWVS
ZWdzIHByb3RvSlNSIHsgSlNSSW5mbzo6anNSZWdUNTQgfTsKIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgeyBHUFJJbmZvOjpyZWdUMSB9OwogY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMUdQ
UiB7IEdQUkluZm86OnJlZ1Q2IH07CiBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyR1BSIHsgR1BS
SW5mbzo6cmVnVDcgfTsKLXN0YXRpY19hc3NlcnQoIXZhbHVlSlNSLnVzZXMocmVzdWx0R1BSKSk7
Ci1zdGF0aWNfYXNzZXJ0KCF2YWx1ZUpTUi5vdmVybGFwcyhwcm90b0pTUikpOwotc3RhdGljX2Fz
c2VydCghdmFsdWVKU1IudXNlcyhzdHViSW5mb0dQUikpOwotc3RhdGljX2Fzc2VydCghdmFsdWVK
U1IudXNlcyhzY3JhdGNoMUdQUikpOwotc3RhdGljX2Fzc2VydCghdmFsdWVKU1IudXNlcyhzY3Jh
dGNoMkdQUikpOwogI2VuZGlmCitzdGF0aWNfYXNzZXJ0KEFzc2VtYmx5SGVscGVyczo6bm9PdmVy
bGFwKHZhbHVlSlNSLCBwcm90b0pTUiwgc3R1YkluZm9HUFIsIHNjcmF0Y2gxR1BSLCBzY3JhdGNo
MkdQUikpOwogfQogCiBuYW1lc3BhY2UgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKaW5kZXggZGI4MTkwN2Y5YjA0NDBmNjdiZmNk
ODYyZGM4YTRlMjhjZjliODU0YS4uMGU1MmQ4ZjYyZjhkN2E1NzIxNTg0MTVjNjJmOTg2ZjgzZWNk
MmQwNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKQEAgLTMzLDYgKzMz
LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQogQUxXQVlTX0lO
TElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHNy
YykKIHsKICAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCkBAIC00MSw2ICs0Miw3IEBAIEFMV0FZ
U19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3Rl
ciBzcmMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVy
YW5kKHNyYykuaXNEb3VibGUoKTsKIH0KKyNlbmRpZgogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklU
Ojppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewpAQCAtNjksMTcg
KzcxLDYgQEAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5kKFZp
cnR1YWxSZWdpc3RlciBzcmMpCiAgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENv
bnN0YW50KHNyYyk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRUb0Nh
bGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKLXsK
LSAgICBBU1NFUlQoZW50cnkuaXNIZWFkZXIoKSk7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAg
ICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0ZvcihlbnRyeSkp
OwotICAgIHN0b3JlMzIoZnJvbSwgcGF5bG9hZEZvcihlbnRyeSkpOwotI2Vsc2UKLSAgICBzdG9y
ZTY0KGZyb20sIGFkZHJlc3NGb3IoZW50cnkpKTsKLSNlbmRpZgotfQotCiBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0TG9hZENoYXJhY3RlclN0cmluZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBkc3QsIEp1bXBMaXN0JiBmYWlsdXJlcykKIHsKICAgICBmYWlsdXJlcy5hcHBlbmQoYnJh
bmNoSWZOb3RTdHJpbmcoc3JjKSk7CkBAIC0xOTAsMTIgKzE4MSw2IEBAIEFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0
aFByb2ZpbGUoCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlSlNS
KTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwo
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJl
ZykKLXsKLSAgICBpZiAoIWlzS25vd25DZWxsKHJlZykpCi0gICAgICAgIGxpbmtTbG93Q2FzZShp
dGVyKTsKLX0KLQogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua0FsbFNsb3dDYXNlc0ZvckJ5
dGVjb2RlSW5kZXgoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkK
IHsKICAgICB3aGlsZSAoaXRlciAhPSBzbG93Q2FzZXMuZW5kKCkgJiYgaXRlci0+dG8gPT0gYnl0
ZWNvZGVJbmRleCkKQEAgLTMwNywxNCArMjkyLDYgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6
aXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3RlciBzcmMpCiAgICAgcmV0dXJuIGdl
dENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRP
cGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KLWlubGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShP
cDo6TWV0YWRhdGE6Om1fcHJvZmlsZSksIFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPiBKSVQ6
OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKQotewot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIGpzUmVnVDEwKTsKLX0KLQotaW5s
aW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZSguLi4p
IHsgfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KIGlubGluZSB2b2lkIEpJVDo6ZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEpTVmFsdWVSZWdz
IHZhbHVlKQogewpAQCAtMzI1LDE0ICszMDIsNiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB2YQog
ICAgIHN0b3JlVmFsdWUodmFsdWUsIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgb2Zmc2V0KSk7CiB9
CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+Ci1pbmxp
bmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVj
b2RlLCBHUFJSZWcgcmVzdWx0UmVnKQotewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOwotfQotI2VuZGlmCi0KIHRlbXBsYXRlIDx0
eXBlbmFtZSBCeXRlY29kZT4KIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgcHRyZGlmZl90IG9mZnNldE9mQXJy
YXlQcm9maWxlLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKIHsK
QEAgLTM1MywxMCArMzIyLDEyIEBAIEFMV0FZU19JTkxJTkUgaW50MzJfdCBKSVQ6OmdldE9wZXJh
bmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogICAgIHJldHVybiBnZXRDb25zdGFu
dE9wZXJhbmQoc3JjKS5hc0ludDMyKCk7CiB9CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQogQUxXQVlT
X0lOTElORSBkb3VibGUgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lz
dGVyIHNyYykKIHsKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNEb3VibGUo
KTsKIH0KKyNlbmRpZgogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVy
KFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CkBAIC0zODEsMTQgKzM1MiwxMSBAQCBBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3Qs
IEpTVmFsdWVSZWdzCiAgICAgc3RvcmVWYWx1ZShmcm9tLCBhZGRyZXNzRm9yKGRzdCkpOwogfQog
Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lz
dGVySUQgcGF5bG9hZCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgSlNWYWx1
ZVJlZ3MgeyB0YWcsIHBheWxvYWQgfSk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKFZpcnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVy
SUQgZHN0KQogeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmMsIEpTVmFsdWVSZWdzIHsgZHN0IH0pOworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKICAg
ICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUg
Y2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29k
ZUluZGV4IGlzIHNldC4KICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBpZiAo
bV9wcm9maWxlZENvZGVCbG9jay0+aXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayhz
cmMpKQpAQCAtMzk4LDggKzM2NiwxMCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0
VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpcwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIGxvYWQzMihwYXlsb2FkRm9yKHNyYyksIGRzdCk7CisjZW5k
aWYKIH0KIAorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKFZpcnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQg
ZHN0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91
bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhh
dCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgpAQCAtNDE4LDEyNSArMzg4LDEwIEBAIEFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNy
YywgUmVnaXN0ZXJJRCBkCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIEpTVmFsdWVS
ZWdzIHsgZHN0IH0pOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVh
bFJlZ2lzdGVyUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIGRzdCkKLXsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgSlNWYWx1ZVJlZ3MgeyBkc3QgfSk7Ci19
Ci0KIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQogewogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyB7IGZyb20gfSk7CiB9Ci0jZW5kaWYKLQotCi0jaWYgVVNF
KEpTVkFMVUUzMl82NCkKLQotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFs
UmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCi17Ci0gICAgaWYgKHJlZy5pc0NvbnN0
YW50KCkpIHsKLSAgICAgICAgQVNTRVJUKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlzQ29uc3RhbnRP
d25lZEJ5VW5saW5rZWRDb2RlQmxvY2socmVnKSk7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiYgaW5Db25zdGFudFBvb2wgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFJlZ2lz
dGVyKHJlZyk7Ci0gICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmaW5Db25zdGFudFBv
b2wpLCB2YWx1ZSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0Zvcihy
ZWcpLCB2YWx1ZSk7Ci19Ci0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoVmlydHVhbFJl
Z2lzdGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJ
RCBiYXNlKQotewotICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihyZWcsIGJhc2UpKTsK
LSAgICBzdG9yZTMyKHRhZywgdGFnRm9yKHJlZywgYmFzZSkpOwotfQotCi1pbmxpbmUgdm9pZCBK
SVQ6OmVtaXRTdG9yZUludDMyKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgcGF5bG9h
ZCwgYm9vbCBpbmRleElzSW50MzIpCi17Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9y
KHJlZykpOwotICAgIGlmICghaW5kZXhJc0ludDMyKQotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0ZvcihyZWcpKTsKLX0KLQotaW5saW5lIHZvaWQg
SklUOjplbWl0U3RvcmVDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgcGF5bG9h
ZCwgYm9vbCBpbmRleElzQ2VsbCkKLXsKLSAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3Io
cmVnKSk7Ci0gICAgaWYgKCFpbmRleElzQ2VsbCkKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhZ0ZvcihyZWcpKTsKLX0KLQotaW5saW5lIHZvaWQgSklU
OjplbWl0U3RvcmVCb29sKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwg
Ym9vbCBpbmRleElzQm9vbCkKLXsKLSAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IocmVn
KSk7Ci0gICAgaWYgKCFpbmRleElzQm9vbCkKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6Qm9vbGVhblRhZyksIHRhZ0ZvcihyZWcpKTsKLX0KLQotaW5saW5lIHZvaWQgSklU
OjplbWl0U3RvcmUoVmlydHVhbFJlZ2lzdGVyIHJlZywgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwg
UmVnaXN0ZXJJRCBiYXNlKQotewotICAgIHN0b3JlMzIoSW1tMzIoY29uc3RhbnQucGF5bG9hZCgp
KSwgcGF5bG9hZEZvcihyZWcsIGJhc2UpKTsKLSAgICBzdG9yZTMyKEltbTMyKGNvbnN0YW50LnRh
ZygpKSwgdGFnRm9yKHJlZywgYmFzZSkpOwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQotewotICAgIGlmICghaXNL
bm93bkNlbGwocmVnKSkgewotICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKLSAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGVtaXRKdW1wSWZOb3RKU0NlbGwocmVnKSk7Ci0gICAgfQotfQotCi1pbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBS
ZWdpc3RlcklEIHRhZykKLXsKLSAgICBpZiAoIWlzS25vd25DZWxsKHJlZykpIHsKLSAgICAgICAg
aWYgKHJlZy5pc0NvbnN0YW50KCkpCi0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwodGFn
KSk7Ci0gICAgfQotfQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpnZXRPcGVyYW5kQ29uc3Rh
bnRJbnQoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgVmlydHVhbFJl
Z2lzdGVyJiBvcCwgaW50MzJfdCYgY29uc3RhbnQpCi17Ci0gICAgaWYgKGlzT3BlcmFuZENvbnN0
YW50SW50KG9wMSkpIHsKLSAgICAgICAgY29uc3RhbnQgPSBnZXRDb25zdGFudE9wZXJhbmQob3Ax
KS5hc0ludDMyKCk7Ci0gICAgICAgIG9wID0gb3AyOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewotICAgICAgICBjb25z
dGFudCA9IGdldENvbnN0YW50T3BlcmFuZChvcDIpLmFzSW50MzIoKTsKLSAgICAgICAgb3AgPSBv
cDE7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLSNlbHNlIC8vIFVTRShKU1ZBTFVFMzJfNjQpCi0KLUFMV0FZU19JTkxJTkUgSklUOjpK
dW1wIEpJVDo6ZW1pdEp1bXBJZkJvdGhKU0NlbGxzKFJlZ2lzdGVySUQgcmVnMSwgUmVnaXN0ZXJJ
RCByZWcyLCBSZWdpc3RlcklEIHNjcmF0Y2gpCi17Ci0gICAgbW92ZShyZWcxLCBzY3JhdGNoKTsK
LSAgICBvcjY0KHJlZzIsIHNjcmF0Y2gpOwotICAgIHJldHVybiBicmFuY2hJZkNlbGwoc2NyYXRj
aCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZkpTQ2Vs
bChSZWdpc3RlcklEIHJlZykKLXsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnKSk7
Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChSZWdpc3RlcklEIHJlZywgVmlydHVhbFJlZ2lzdGVyIHZSZWcpCi17Ci0gICAgaWYgKCFpc0tu
b3duQ2VsbCh2UmVnKSkKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZyk7
Ci19Ci0KLUFMV0FZU19JTkxJTkUgSklUOjpQYXRjaGFibGVKdW1wIEpJVDo6ZW1pdFBhdGNoYWJs
ZUp1bXBJZk5vdEludChSZWdpc3RlcklEIHJlZykKLXsKLSAgICByZXR1cm4gcGF0Y2hhYmxlQnJh
bmNoNjQoQmVsb3csIHJlZywgbnVtYmVyVGFnUmVnaXN0ZXIpOwotfQogCiBBTFdBWVNfSU5MSU5F
IEpJVDo6SnVtcCBKSVQ6OmVtaXRKdW1wSWZOb3RJbnQoUmVnaXN0ZXJJRCByZWcxLCBSZWdpc3Rl
cklEIHJlZzIsIFJlZ2lzdGVySUQgc2NyYXRjaCkKIHsKQEAgLTU0NSwyNiArNDAwLDIwIEBAIEFM
V0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZk5vdEludChSZWdpc3RlcklEIHJl
ZzEsIFJlZ2lzdGVySUQgcmVnMiwKICAgICByZXR1cm4gYnJhbmNoSWZOb3RJbnQzMihzY3JhdGNo
KTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50
KFJlZ2lzdGVySUQgcmVnKQotewotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SW50MzIocmVn
KSk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChSZWdpc3RlcklEIHJlZzEsIFJlZ2lzdGVySUQgcmVnMiwgUmVnaXN0ZXJJRCBzY3JhdGNoKQog
ewogICAgIGFkZFNsb3dDYXNlKGVtaXRKdW1wSWZOb3RJbnQocmVnMSwgcmVnMiwgc2NyYXRjaCkp
OwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3ROdW1i
ZXIoUmVnaXN0ZXJJRCByZWcpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbnQoUmVnaXN0ZXJJRCBncHIpCiB7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3ROdW1iZXIocmVnKSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KEpTVmFsdWVSZWdz
IHsgZ3ByIH0pOwogfQorI2VuZGlmCiAKLSNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQotCi1B
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0
ZXJJRCByZWcpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQoSlNWYWx1ZVJlZ3MganNyKQogewotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChy
ZWcpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEludDMyKGpzcikpOwogfQogCiBBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoSlNWYWx1ZVJl
Z3MgcmVnKQpAQCAtNjYyLDEzICs1MTEsMTkgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9h
ZENvZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciBjb25zdGFudCwgSlNWYWx1ZVIKICAg
ICBsb2FkVmFsdWUoQWRkcmVzcyhkc3QucGF5bG9hZEdQUigpLCBjb25zdGFudC50b0NvbnN0YW50
SW5kZXgoKSAqIHNpemVvZihSZWdpc3RlcikpLCBkc3QpOwogfQogCi0jaWYgVVNFKEpTVkFMVUUz
Ml82NCkKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudFBheWxv
YWQoVmlydHVhbFJlZ2lzdGVyIGNvbnN0YW50LCBSZWdpc3RlcklEIGRzdCkKIHsKICAgICBSRUxF
QVNFX0FTU0VSVChjb25zdGFudC5pc0NvbnN0YW50KCkpOwogICAgIGxvYWRBZGRyT2ZDb2RlQmxv
Y2tDb25zdGFudEJ1ZmZlcigqdGhpcywgZHN0KTsKLSAgICBsb2FkMzIoQWRkcmVzcyhkc3QsIGNv
bnN0YW50LnRvQ29uc3RhbnRJbmRleCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBheWxvYWRPZmZz
ZXQpLCBkc3QpOworICAgIEFkZHJlc3MgYWRkcmVzcyhkc3QsIGNvbnN0YW50LnRvQ29uc3RhbnRJ
bmRleCgpICogc2l6ZW9mKFJlZ2lzdGVyKSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBsb2Fk
NjQoYWRkcmVzcywgZHN0KTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgbG9hZDMyKGFk
ZHJlc3Mud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KSwgZHN0KTsKKyNlbmRpZgogfQorCisjaWYg
VVNFKEpTVkFMVUUzMl82NCkKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb2RlQmxvY2tD
b25zdGFudFRhZyhWaXJ0dWFsUmVnaXN0ZXIgY29uc3RhbnQsIFJlZ2lzdGVySUQgZHN0KQogewog
ICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50LmlzQ29uc3RhbnQoKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAppbmRleCA0YzJmMzJkYWRiNWUzYWJkZGFiYjI5Y2Nk
NmJiNDZmZjA5ZDlkZDMyLi40Yzg2MzE0OWFkYjljOTMwMDM0OTg4NzE3MTExYzAyNDk3MzVmM2Zm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKQEAgLTEyMCw3ICsx
MjAsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXR1cm5WYWx1ZUpTUik7CiB9CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CkBAIC0xMjksMjYgKzEyOCwyMyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9j
b25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVj
b2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFz
SW5zdGFuY2VWYWx1ZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2Fk
KGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QyKTsKIAogICAgIC8vIFdlIGRvbid0IGp1bXAgaWYgd2Ug
a25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4KKyAgICBtb3ZlKFRydXN0ZWRJ
bW0zMigxKSwgcmVnVDApOwogICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOwotICAgIEp1bXAg
Y3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIEFkZHJl
c3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV9mdW5jdGlvblByb3Rv
SGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbikpKTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoY29uc3RydWN0b3IsIHJlZ1QwKTsKLQorICAgIEp1bXAgY3VzdG9tSGFzSW5zdGFuY2VWYWx1
ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZT
RVRPRihKU0dsb2JhbE9iamVjdCwgbV9mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5j
dGlvbikpKTsKKyAgICAvLyBXZSBrbm93IHRoYXQgY29uc3RydWN0b3IgaXMgYW4gb2JqZWN0IGZy
b20gdGhlIHdheSBieXRlY29kZSBpcyBlbWl0dGVkIGZvciBpbnN0YW5jZW9mIGV4cHJlc3Npb25z
LgorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGNvbnN0cnVjdG9yLCByZWdUMik7
CiAgICAgLy8gQ2hlY2sgdGhhdCBjb25zdHJ1Y3RvciAnSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0
YW5jZScgaS5lLiB0aGUgb2JqZWN0IGlzIG5vdCBhIEMtQVBJIHVzZXIgbm9yIGEgYm91bmQgZnVu
Y3Rpb24uCi0gICAgdGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSks
IHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwot
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QyLCBK
U0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVm
YXVsdEhhc0luc3RhbmNlKSwgcmVnVDApOworICAgIGN1c3RvbUhhc0luc3RhbmNlVmFsdWUubGlu
ayh0aGlzKTsKIAotICAgIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUubGluayh0aGlzKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7Ci0KLSAgICBkb25l
LmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGJveEJv
b2xlYW4ocmVnVDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
anNSZWdUMTApOwogfQogCisKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7CkBAIC0xNTYsMjYgKzE1MiwyOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsKIAot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3Rl
cnM6OnZhbHVlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvdG9HUFIgPSBCYXNlbGluZUluc3Rh
bmNlb2ZSZWdpc3RlcnM6OnByb3RvOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0g
QmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpyZXN1bHQ7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm87Cisg
ICAgdXNpbmcgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpyZXN1bHRKU1I7CisgICAgdXNp
bmcgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZUpTUjsKKyAgICB1c2luZyBCYXNl
bGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvSlNSOworICAgIHVzaW5nIEJhc2VsaW5lSW5z
dGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm9HUFI7CisgICAgdXNpbmcgQmFzZWxpbmVJbnN0YW5j
ZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMUdQUjsKKyAgICB1c2luZyBCYXNlbGluZUluc3RhbmNlb2ZS
ZWdpc3RlcnM6OnNjcmF0Y2gyR1BSOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgdmFsdWVHUFIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHByb3RvR1BS
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUpTUik7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcHJvdG9KU1IpOwogICAgIAogICAgIC8vIENoZWNr
IHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBj
aGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodmFsdWVHUFIsIHZhbHVlKTsKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocHJvdG9HUFIsIHByb3RvKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwodmFsdWVKU1IsIHZhbHVlKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocHJvdG9KU1IsIHByb3RvKTsKIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2Vu
KAogICAgICAgICBudWxscHRyLCBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCiAg
ICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAg
cmVzdWx0R1BSLAotICAgICAgICB2YWx1ZUdQUiwKLSAgICAgICAgcHJvdG9HUFIsCisgICAgICAg
IHJlc3VsdEpTUi5wYXlsb2FkR1BSKCksCisgICAgICAgIHZhbHVlSlNSLnBheWxvYWRHUFIoKSwK
KyAgICAgICAgcHJvdG9KU1IucGF5bG9hZEdQUigpLAogICAgICAgICBzdHViSW5mb0dQUiwKLSAg
ICAgICAgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMSwgQmFzZWxpbmVJbnN0
YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMik7CisgICAgICAgIHNjcmF0Y2gxR1BSLCBzY3JhdGNo
MkdQUik7CiAKICAgICBhdXRvIFsgc3R1YkluZm8sIHN0dWJJbmZvSW5kZXggXSA9IGFkZFVubGlu
a2VkU3RydWN0dXJlU3R1YkluZm8oKTsKICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vz
c1R5cGU6Okluc3RhbmNlT2Y7CkBAIC0xODQsMTAgKzE4MiwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOwogCiAgICAgZ2VuLmdlbmVyYXRlQmFz
ZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOwor
I2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgYm94Qm9vbGVhbihyZXN1bHRKU1IucGF5bG9hZEdQ
UigpLCByZXN1bHRKU1IpOworI2VuZGlmCiAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luc3Rh
bmNlT2ZzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRKU1IpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMjAxLDEy
ICsyMDIsMjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICAKICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5j
ZW9mUmVnaXN0ZXJzOjpzdHViSW5mbyA9PSBhcmd1bWVudEdQUjEpOwotICAgIHN0YXRpY19hc3Nl
cnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZSA9PSBhcmd1bWVudEdQUjIpOwot
ICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90byA9PSBh
cmd1bWVudEdQUjMpOwotICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50
R1BSMSk7Ci0gICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25JbnN0YW5jZU9mT3B0
aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9m
U2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKKyAgICB1c2luZyBTbG93T3BlcmF0aW9uID0g
ZGVjbHR5cGUob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24s
IDA+KCk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHByZWZlcnJlZEFyZ3Vt
ZW50R1BSPFNsb3dPcGVyYXRpb24sIDE+KCk7CisgICAgdXNpbmcgQmFzZWxpbmVJbnN0YW5jZW9m
UmVnaXN0ZXJzOjp2YWx1ZUpTUjsKKyAgICBzdGF0aWNfYXNzZXJ0KHZhbHVlSlNSID09IHByZWZl
cnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDI+KCkpOworICAgIHVzaW5nIEJhc2VsaW5l
SW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG9KU1I7CisgICAgLy8gT24gSlNWQUxVRTMyXzY0LCAn
cHJvdG8nIHdpbGwgYmUgcGFzc2VkIG9uIHN0YWNrIGFueXdheQorICAgIHN0YXRpY19hc3NlcnQo
cHJvdG9KU1IgPT0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMz4oKSB8fCBp
czMyQml0KCkpOworICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKGdsb2JhbE9iamVjdEdQUiwg
c3R1YkluZm9HUFIsIHZhbHVlSlNSLCBwcm90b0pTUikpOworCisgICAgbG9hZEdsb2JhbE9iamVj
dChnbG9iYWxPYmplY3RHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIGNhbGxPcGVyYXRpb248U2xvd09w
ZXJhdGlvbj4oCisgICAgICAgIEFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksCisgICAgICAgIHJlc3VsdFZSZWcsCisgICAgICAg
IGdsb2JhbE9iamVjdEdQUiwgc3R1YkluZm9HUFIsIHZhbHVlSlNSLCBwcm90b0pTUik7CiAgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCkBAIC0y
MTYsMTQgKzIyNywxNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJh
bmQ7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCByZWdUMCk7Ci0KLSAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKLX0KLQorI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyVGFnKHZhbHVlLCByZWdUMCk7CiAjZW5kaWYKKyAgICBpc0VtcHR5KHJlZ1QwLCByZWdUMCk7
CisKKyAgICBib3hCb29sZWFuKHJlZ1QwLCBqc1JlZ1QxMCk7CisgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIGpzUmVnVDEwKTsKK30KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lz
X3VuZGVmaW5lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewpAQCAt
MjM0LDExICsyNDcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwganNSZWdUMTApOwogICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxs
KGpzUmVnVDEwKTsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgY29tcGFyZTY0KEVxdWFsLCBq
c1JlZ1QxMC5wYXlsb2FkR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5l
ZCksIHJlZ1QwKTsKLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgY29tcGFyZTMyKEVxdWFs
LCBqc1JlZ1QxMC50YWdHUFIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyks
IHJlZ1QwKTsKLSNlbmRpZgorICAgIGlzVW5kZWZpbmVkKGpzUmVnVDEwLCByZWdUMCk7CiAgICAg
SnVtcCBkb25lID0ganVtcCgpOwogICAgIAogICAgIGlzQ2VsbC5saW5rKHRoaXMpOwpAQCAtMjcz
LDE5ICsyODIsMjQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwganNSZWdUMTApOwogfQogCi0jaWYgVVNFKEpTVkFMVUU2NCkKIAogdm9pZCBK
SVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNC
b29sZWFuPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCisKKyNp
ZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsK
ICAgICB0ZXN0NjQoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90
Pih+MSkpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisjZWxpZiBVU0UoSlNWQUxV
RTMyXzY0KQorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJUYWcodmFsdWUsIHJlZ1QwKTsKKyAg
ICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRh
ZyksIHJlZ1QwKTsKKyNlbmRpZgorCisgICAgYm94Qm9vbGVhbihyZWdUMCwganNSZWdUMTApOwor
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBqc1JlZ1QxMCk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2lzX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtMjkzLDExICszMDcsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV9vcGVyYW5kOwotICAgIAorCisjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCBu
dW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworI2VsaWYg
VVNFKEpTVkFMVUUzMl82NCkKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKHZhbHVlLCBy
ZWdUMCk7CisgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CisgICAgY29tcGFyZTMy
KEJlbG93LCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZyArIDEpLCByZWdU
MCk7CisjZW5kaWYKKworICAgIGJveEJvb2xlYW4ocmVnVDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwganNSZWdUMTApOwogfQogCiAjaWYgVVNFKEJJR0lOVDMy
KQpAQCAtMzEzLDE1ICszMzQsMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYmlnX2ludChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIG1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHJlZ1QxKTsKICAgICBhbmQ2NChyZWdUMSwgcmVnVDAp
OwogICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJ
bnQzMlRhZyksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOworICAgIGJveEJvb2xlYW4ocmVnVDAsIGpzUmVnVDEwKTsKICAgICBKdW1wIGRvbmUg
PSBqdW1wKCk7CiAKICAgICBpc0NlbGwubGluayh0aGlzKTsKICAgICBjb21wYXJlOChFcXVhbCwg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihIZWFwQmlnSW50VHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOworICAgIGJveEJvb2xlYW4ocmVnVDAsIGpzUmVnVDEwKTsKIAogICAg
IGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGpzUmVnVDEwKTsKIH0KICNlbHNlIC8vIGlmICFV
U0UoQklHSU5UMzIpCiBOT19SRVRVUk4gdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYmlnX2ludChjb25z
dCBJbnN0cnVjdGlvbiopCkBAIC0zMzgsMTggKzM1OSwxNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9p
c19jZWxsX3dpdGhfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBpbnQg
dHlwZSA9IGJ5dGVjb2RlLm1fdHlwZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7
Ci0KLSAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5
cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGpzUmVnVDMyKTsKIAorICAgIG1vdmUo
VHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5v
dENlbGwoanNSZWdUMzIpOworICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKGpzUmVnVDMyLnBh
eWxvYWRHUFIoKSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0
eXBlKSwgcmVnVDApOwogICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CiAKLSAgICBkb25lLmxpbmsodGhp
cyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGJveEJvb2xlYW4ocmVn
VDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwganNSZWdUMTAp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM1OCwxOCArMzc2LDE1IEBAIHZvaWQgSklUOjplbWl0X29w
X2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVn
VDApOwotCi0gICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZWdUMCk7
Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwganNSZWdU
MzIpOwogCisgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKKyAgICBKdW1wIGlzTm90
Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChqc1JlZ1QzMik7CisgICAgY29tcGFyZTgoQWJvdmVPckVx
dWFsLCBBZGRyZXNzKGpzUmVnVDMyLnBheWxvYWRHUFIoKSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDApOwogICAgIGlzTm90Q2Vs
bC5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2Up
LCByZWdUMCk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIGJveEJvb2xlYW4ocmVnVDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwganNSZWdUMTApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90
b19wcmltaXRpdmUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM3
OCwxNCArMzkzLDE0IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjLCBqc1JlZ1QxMCk7CiAgICAgCi0gICAgSnVtcCBpc0ltbSA9IGJy
YW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QocmVn
VDApKTsKKyAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKGpzUmVnVDEwKTsKKyAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdChqc1JlZ1QxMC5wYXlsb2FkR1BSKCkpKTsKICAgICBp
c0ltbS5saW5rKHRoaXMpOwogCiAgICAgaWYgKGRzdCAhPSBzcmMpCi0gICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IGpzUmVnVDEwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zOTQsMTkgKzQwOSwxNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywganNSZWdUMTApOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KSk7Ci0gICAgSnVtcCBkb25lID0gYnJhbmNoSWZTeW1ib2wocmVnVDApOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RDZWxsKGpzUmVnVDEwKSk7CisgICAgSnVtcCBkb25lID0gYnJhbmNoSWZTeW1ib2woanNSZWdU
MTAucGF5bG9hZEdQUigpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhqc1Jl
Z1QxMC5wYXlsb2FkR1BSKCkpKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKICAgICBpZiAoc3Jj
ICE9IGRzdCkKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwganNSZWdUMTApOwogfQogCi0jZW5kaWYKLQogdm9p
ZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKQEAgLTQyMiwyNSArNDM1LDE3IEBAIHZvaWQgSklU
OjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIGds
b2JhbE9iamVjdEdQUiwgZnVuY3Rpb25HUFIsIG5hbWVKU1IpOwogfQogCi0jaWYgVVNFKEpTVkFM
VUU2NCkKLQogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BOb3Q+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJh
bmQsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFu
ZCwganNSZWdUMTApOwogCi0gICAgLy8gSW52ZXJ0IGFnYWluc3QgSlNWYWx1ZShmYWxzZSk7IGlm
IHRoZSB2YWx1ZSB3YXMgdGFnZ2VkIGFzIGEgYm9vbGVhbiwgdGhlbiBhbGwgYml0cyB3aWxsIGJl
Ci0gICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9y
IDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVseSkuCi0gICAgLy8gVGhlbiBp
bnZlcnQgYWdhaW5zdCBKU1ZhbHVlKHRydWUpLCB3aGljaCB3aWxsIGFkZCB0aGUgdGFnIGJhY2sg
aW4sIGFuZCBmbGlwIHRoZSBsb3cgYml0LgotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZUZhbHNlKSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9u
WmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7Ci0g
ICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKKyAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdEJvb2xlYW4oanNSZWdUMTAsIHJlZ1QyKSk7CisgICAgeG9y
UHRyKFRydXN0ZWRJbW0zMigxKSwganNSZWdUMTAucGF5bG9hZEdQUigpKTsKIAotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3QsIGpzUmVnVDEwKTsKIH0KIAotI2VuZGlmCi0KIHZvaWQgSklU
OjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmZhbHNlPigp
OwpAQCAtNTQ3LDE4ICs1NTIsMjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgd2FzTm90SW1tZWRpYXRlLmxp
bmsodGhpcyk7CiB9CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9q
dW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEp1bmRlZmlu
ZWRPck51bGw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCBqc1JlZ1QxMCk7CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJUYWcodmFsdWUsIGpzUmVnVDEwLnRhZ0dQUigpKTsKKyNlbmRpZgog
Ci0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7
Ci0gICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgZW1pdFR1cm5VbmRlZmluZWRJbnRv
TnVsbChqc1JlZ1QxMCk7CisgICAgYWRkSnVtcChicmFuY2hJZk51bGwoanNSZWdUMTApLCB0YXJn
ZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC01NjcsMTAgKzU3NCwxNCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCBqc1JlZ1QxMCk7CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJUYWcodmFsdWUsIGpzUmVnVDEwLnRhZ0dQUigpKTsKKyNlbmRp
ZgogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdU
MCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgZW1pdFR1cm5VbmRlZmlu
ZWRJbnRvTnVsbChqc1JlZ1QxMCk7CisgICAgYWRkSnVtcChicmFuY2hJZk5vdE51bGwoanNSZWdU
MTApLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfcHRyKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC01NzksOSArNTkwLDE2IEBAIHZvaWQgSklU
OjplbWl0X29wX2plcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAg
IGxvYWRDb2RlQmxvY2tDb25zdGFudChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyLCBKU1ZhbHVl
UmVncyB7IHJlZ1QxIH0pOwotICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVn
VDEpLCB0YXJnZXQpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBqc1JlZ1QxMCk7
CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAvLyBPTiBKU1ZBTFVFNjQgdGhlIHBvaW50ZXIg
Y29tcGFyaXNvbiBiZWxvdyBjYXRjaGVzIHRoaXMgY2FzZQorICAgIEp1bXAgbm90Q2VsbCA9IGJy
YW5jaElmTm90Q2VsbChqc1JlZ1QxMCk7CisjZW5kaWYKKyAgICBsb2FkQ29kZUJsb2NrQ29uc3Rh
bnRQYXlsb2FkKGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIsIHJlZ1QyKTsKKyAgICBhZGRKdW1w
KGJyYW5jaFB0cihFcXVhbCwganNSZWdUMTAucGF5bG9hZEdQUigpLCByZWdUMiksIHRhcmdldCk7
CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBub3RDZWxsLmxpbmsodGhpcyk7CisjZW5kaWYK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTU5MCwxNCArNjA4LDIzIEBAIHZvaWQgSklUOjplbWl0X29wX2pu
ZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwog
ICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgbG9hZENv
ZGVCbG9ja0NvbnN0YW50KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIsIEpTVmFsdWVSZWdzIHsg
cmVnVDEgfSk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFs
LCByZWdUMCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBqc1JlZ1Qx
MCk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAvLyBPTiBKU1ZBTFVFNjQgdGhlIHBvaW50
ZXIgY29tcGFyaXNvbiBiZWxvdyBjYXRjaGVzIHRoaXMgY2FzZQorICAgIEp1bXAgbm90Q2VsbCA9
IGJyYW5jaElmTm90Q2VsbChqc1JlZ1QxMCk7CisjZW5kaWYKKyAgICBsb2FkQ29kZUJsb2NrQ29u
c3RhbnRQYXlsb2FkKGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIsIHJlZ1QyKTsKKyAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIGpzUmVnVDEwLnBheWxvYWRH
UFIoKSwgcmVnVDIpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgbm90Q2VsbC5saW5rKHRo
aXMpOworI2VuZGlmCiAgICAgc3RvcmU4VG9NZXRhZGF0YShUcnVzdGVkSW1tMzIoMSksIGJ5dGVj
b2RlLCBPcEpuZXFQdHI6Ok1ldGFkYXRhOjpvZmZzZXRPZkhhc0p1bXBlZCgpKTsKICAgICBhZGRK
dW1wKGp1bXAoKSwgdGFyZ2V0KTsKICAgICBlcXVhbC5saW5rKHRoaXMpOwogfQogCisjaWYgVVNF
KEpTVkFMVUU2NCkKKwogdm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEVxPigpOwpAQCAtNjA1LDggKzYzMiw4IEBAIHZvaWQgSklUOjplbWl0X29wX2Vx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3JocywgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKICAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1Qx
LCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAg
Ym94Qm9vbGVhbihyZWdUMCwganNSZWdUMTApOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3QsIGpzUmVnVDEwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02ODcsOSArNzE0LDkgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3JocywgcmVnVDEpOwog
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKICAgICBj
b21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgYm94Qm9vbGVhbihyZWdUMCwganNS
ZWdUMTApOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7Cisg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwganNSZWdUMTApOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC04MzEsOSArODU4LDkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAgIGNvbXBhcmU2NChF
cXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CiAgICAgZWxzZQogICAgICAgICBjb21wYXJlNjQo
Tm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgYm94Qm9vbGVhbihyZWdUMCwganNSZWdUMTApOwog
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCBqc1JlZ1QxMCk7CiAjZW5kaWYKIH0KIApAQCAtOTQ5LDE4ICs5NzYsMjEgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0
MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCisjZW5kaWYKKwogdm9pZCBK
SVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051
bWJlcj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwotICAgIAotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVn
LCBqc1JlZ1QxMCk7CisgICAgCisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIoanNS
ZWdUMTAsIHJlZ1QyKSk7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBq
c1JlZ1QxMCk7CiAgICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3RWUmVnLCBqc1JlZ1QxMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTk2OCwzMSArOTk4LDM1IEBA
IHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFRvTnVtZXJpYz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwogCi0gICAgSnVtcCBp
c05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90SGVhcEJpZ0ludChyZWdUMCkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
VlJlZywganNSZWdUMTApOworCisgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
anNSZWdUMTApOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChqc1JlZ1Qx
MC5wYXlsb2FkR1BSKCkpKTsKICAgICBKdW1wIGlzQmlnSW50ID0ganVtcCgpOwogCiAgICAgaXNO
b3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVn
VDApKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihqc1JlZ1QxMCwgcmVnVDIp
KTsKICAgICBpc0JpZ0ludC5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IGpzUmVnVDEwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQotICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdFZSZWcsIGpzUmVnVDEwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmNW
UmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
VlJlZywgcmVnVDApOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIGpzUmVnVDEwKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2Vs
bChqc1JlZ1QxMCkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKGpzUmVnVDEw
LnBheWxvYWRHUFIoKSkpOworCisgICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnLCBqc1JlZ1QxMCk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtMTAwMCwxNCArMTAzNCwxNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvT2JqZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcg
PSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVn
LCByZWdUMCk7CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjVlJlZywganNSZWdUMTApOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmVnVDApOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChq
c1JlZ1QxMCkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KGpzUmVnVDEwLnBh
eWxvYWRHUFIoKSkpOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwganNS
ZWdUMTApOwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCi0gICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
VlJlZywganNSZWdUMTApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTAxNyw3ICsxMDUyLDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZt
KCkudG9wRW50cnlGcmFtZSk7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bSksIHJlZ1Qz
KTsKLSAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0
KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBWTTo6
Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBzdG9y
ZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1l
Rm9yQ2F0Y2hPZmZzZXQoKSkpOwogCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50
ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2Fs
bEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKQEAgLTEwMzgsMTEgKzEwNzMs
MTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogICAgIGlzQ2F0
Y2hhYmxlRXhjZXB0aW9uLmxpbmsodGhpcyk7CiAKLSAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBy
ZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2V4Y2VwdGlvbik7
CisgICAgYm94Q2VsbChyZXR1cm5WYWx1ZUdQUiwganNSZWdUMTApOworICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9leGNlcHRpb24sIGpzUmVnVDEwKTsKIAotICAgIGxvYWQ2
NChBZGRyZXNzKHJlZ1QwLCBFeGNlcHRpb246OnZhbHVlT2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Rocm93blZhbHVlKTsKKyAgICBsb2Fk
VmFsdWUoQWRkcmVzcyhqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIEV4Y2VwdGlvbjo6dmFsdWVPZmZz
ZXQoKSksIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
dGhyb3duVmFsdWUsIGpzUmVnVDEwKTsKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8vIEZJ
WE1FOiBjb25zaWRlciBpbmxpbmUgY2FjaGluZyB0aGUgcHJvY2VzcyBvZiBkb2luZyBPU1IgZW50
cnksIGluY2x1ZGluZwpAQCAtMTA2NiwxMyArMTEwMSwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfcGFyZW50X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJlbnRT
Y29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY3VycmVudFNjb3BlID0gYnl0ZWNvZGUubV9z
Y29wZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRTY29wZSwgcmVnVDApOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGN1cnJlbnRTY29wZSwgcmVnVDApOwog
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdU
MCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5tX2RzdCwgcmVnVDApOworICAgIGJveENl
bGwocmVnVDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZHN0LCBqc1JlZ1QxMCk7CiB9CiAKLSNlbmRpZgotCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0
Y2hfaW1tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTd2l0Y2hJbW0+KCk7CkBAIC0x
MjEyLDggKzEyNDYsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCBqc1JlZ1QxMCk7CiB9CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotCiB2b2lkIEpJVDo6ZW1pdF9v
cF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopCiB7CiAgICAgLy8gRXZlbiB0aG91Z2ggQ1RJIGRv
ZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50CkBAIC0xMzM3LDE3ICsx
MzY5LDE4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90Ojpj
YWxsZWUsIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246Om9m
ZnNldE9mU2NvcGVDaGFpbigpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdU
MCk7CisgICAgYm94Q2VsbChyZWdUMCwganNSZWdUMTApOworICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCBqc1JlZ1QxMCk7CiB9CiAKLSNlbmRpZgotCiB2b2lkIEpJVDo6ZW1pdF9vcF90
b190aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdCwganNSZWdUMTApOworICAgIFZp
cnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdDsKIAotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChqc1JlZ1QxMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmNEc3QsIGpzUmVnVDEwKTsKKworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChq
c1JlZ1QxMCwgc3JjRHN0KTsKIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlwZShqc1Jl
Z1QxMC5wYXlsb2FkR1BSKCksIEZpbmFsT2JqZWN0VHlwZSkpOwogICAgIGxvYWQzMkZyb21NZXRh
ZGF0YShieXRlY29kZSwgT3BUb1RoaXM6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhY2hlZFN0cnVjdHVy
ZUlEKCksIHJlZ1QyKTsKQEAgLTEzODksMTUgKzE0MjIsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Y3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCBqc1JlZ1QxMCk7CiB9CiAKLSNp
ZiBVU0UoSlNWQUxVRTY0KQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190ZHooY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcENoZWNrVGR6PigpOworI2lmIFVTRShKU1ZBTFVFNjQpCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3Rl
ciwgcmVnVDApOworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyVGFnKGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyLCByZWdUMCk7CisjZW5k
aWYKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CiB9CiAKKyNpZiBVU0Uo
SlNWQUxVRTY0KQogCiAvLyBTbG93IGNhc2VzCiAKQEAgLTE2MjksNyArMTY2NSw4IEBAIHZvaWQg
SklUOjplbWl0X29wX25ld19yZWdleHAoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKICAgICBHUFJSZWcgZ2xvYmFsR1BSID0gYXJndW1lbnRHUFIwOwogICAgIGxvYWRHbG9i
YWxPYmplY3QoZ2xvYmFsR1BSKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4
cCwgZ2xvYmFsR1BSLCBqc0Nhc3Q8UmVnRXhwKj4obV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29u
c3RhbnQocmVnZXhwKSkpOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7
CisgICAgYm94Q2VsbChyZXR1cm5WYWx1ZUdQUiwgcmV0dXJuVmFsdWVKU1IpOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUpTUik7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIE9wPgpAQCAtMTg3NiwyOSArMTkxMywxOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
cmVzdF9sZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIHVuc2lnbmVk
IG51bVBhcmFtc1RvU2tpcCA9IGJ5dGVjb2RlLm1fbnVtUGFyYW1ldGVyc1RvU2tpcDsKKwogICAg
IGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKSwgcmVnVDApOwogICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwogICAgIEp1
bXAgemVyb0xlbmd0aCA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG51
bVBhcmFtc1RvU2tpcCkpOwogICAgIHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tpcCksIHJlZ1Qw
KTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyhy
ZWdUMCkpOwotI2VuZGlmCisgICAgYm94SW50MzIocmVnVDAsIGpzUmVnVDEwKTsKICAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7CiAKICAgICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7Ci0jaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIo
MCkpKSwgcmVnVDApOwotI2Vsc2UKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwot
I2VuZGlmCisgICAgbW92ZVRydXN0ZWRWYWx1ZShqc051bWJlcigwKSwganNSZWdUMTApOwogCiAg
ICAgZG9uZS5saW5rKHRoaXMpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKLSNlbHNlCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6SW50MzJUYWcpLCByZWdUMSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwotI2VuZGlmCisgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIGpzUmVnVDEwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3Vt
ZW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xOTI0LDI3ICsx
OTUxLDE3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm90b3R5cGVfb2YoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldFByb3RvdHlwZU9mPigpOwogCi0jaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MocmVnVDIpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7Ci0jZWxzZQot
ICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Qx
OwotICAgIEFTU0VSVCh2YWx1ZVJlZ3MudGFnR1BSKCkgPT0gc2NyYXRjaEdQUik7Ci0jZW5kaWYK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlUmVncyk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBqc1JlZ1QxMCk7
CiAKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJ
Zk5vdENlbGwodmFsdWVSZWdzKSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9i
amVjdCh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKSk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2hJZk5vdENlbGwoanNSZWdUMTApKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90
T2JqZWN0KGpzUmVnVDEwLnBheWxvYWRHUFIoKSkpOwogCi0gICAgZW1pdExvYWRQcm90b3R5cGUo
dm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc2xv
d0Nhc2VzKTsKKyAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCBqc1JlZ1QxMC5wYXlsb2FkR1BS
KCksIGpzUmVnVDMyLCByZWdUNCwgc2xvd0Nhc2VzKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2Fz
ZXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVncyk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwganNSZWdUMzIpOworICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIGpzUmVnVDMyKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMz
Ml82NC5jcHAKaW5kZXggMTIyYzlhYWFmNjE4NjkyNDVkODcyNWRlNjRjZDJlOTc3NWMwMjVkNy4u
NzQxNTAyYzViMDhmZTNmZDM5MGQ2NDYxYjNmOTBkNGJlMDdjYzBiMiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcApAQCAtMzMsNTI3ICszMywxMzMg
QEAKICNpbmNsdWRlICJCYXNpY0Jsb2NrTG9jYXRpb24uaCIKICNpbmNsdWRlICJCeXRlY29kZUdl
bmVyYXRvci5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgotI2luY2x1ZGUgIkNDYWxs
SGVscGVycy5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkludGVycHJldGVy
SW5saW5lcy5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKLSNpbmNsdWRlICJKU0FycmF5Lmgi
Ci0jaW5jbHVkZSAiSlNDYXN0LmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgotI2luY2x1ZGUg
IkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgotI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKLSNp
bmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oIgotI2luY2x1ZGUgIk9wY29k
ZUlubGluZXMuaCIKICNpbmNsdWRlICJTbG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJUeXBlUHJv
ZmlsZXJMb2cuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKIAogbmFtZXNwYWNlIEpT
QyB7CiAKLXZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjpjb21waWxlT3BFcUNvbW1v
bihWaXJ0dWFsUmVnaXN0ZXIgc3JjMSwgVmlydHVhbFJlZ2lzdGVyIHNyYzIpCiB7Ci0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0YW5j
ZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VW
YWx1ZTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIGpzUmVnVDEwKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIGpzUmVnVDMyKTsKKyAgICBhZGRTbG93Q2FzZShi
cmFuY2gzMihOb3RFcXVhbCwganNSZWdUMTAudGFnR1BSKCksIGpzUmVnVDMyLnRhZ0dQUigpKSk7
CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKGpzUmVnVDEwKSk7CisgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoMzIoQmVsb3csIGpzUmVnVDEwLnBheWxvYWRHUFIoKSwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6Okxvd2VzdFRhZykpKTsKK30KIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXls
b2FkKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKLSAgICAvLyBXZSBkb24ndCBqdW1wIGlmIHdl
IGtub3cgd2hhdCBTeW1ib2wuaGFzSW5zdGFuY2Ugd291bGQgZG8uCi0gICAgSnVtcCBoYXNJbnN0
YW5jZVZhbHVlTm90Q2VsbCA9IGVtaXRKdW1wSWZOb3RKU0NlbGwoaGFzSW5zdGFuY2VWYWx1ZSk7
Ci0gICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMSk7Ci0gICAgSnVtcCBjdXN0b21oYXNJbnN0YW5j
ZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgT0JKRUNU
X09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX2Z1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJv
bEZ1bmN0aW9uKSkpOwordm9pZCBKSVQ6OmNvbXBpbGVPcEVxU2xvd0NvbW1vbihWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIEp1bXBMaXN0IGdlbmVyaWNDYXNl
OwogCi0gICAgLy8gV2Uga25vdyB0aGF0IGNvbnN0cnVjdG9yIGlzIGFuIG9iamVjdCBmcm9tIHRo
ZSB3YXkgYnl0ZWNvZGUgaXMgZW1pdHRlZCBmb3IgaW5zdGFuY2VvZiBleHByZXNzaW9ucy4KLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChjb25zdHJ1Y3RvciwgcmVnVDApOworICAg
IGdlbmVyaWNDYXNlLmFwcGVuZChnZXRTbG93Q2FzZShpdGVyKSk7IC8vIHRhZ3Mgbm90IGVxdWFs
CiAKLSAgICAvLyBDaGVjayB0aGF0IGNvbnN0cnVjdG9yICdJbXBsZW1lbnRzRGVmYXVsdEhhc0lu
c3RhbmNlJyBpLmUuIHRoZSBvYmplY3QgaXMgbm90IGEgQy1BUEkgdXNlciBub3IgYSBib3VuZCBm
dW5jdGlvbi4KLSAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZv
RmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNl
KSwgcmVnVDApOworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gdGFncyBlcXVhbCBhbmQgSlND
ZWxsCisgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElmTm90U3RyaW5nKGpzUmVnVDEwLnBh
eWxvYWRHUFIoKSkpOworICAgIGdlbmVyaWNDYXNlLmFwcGVuZChicmFuY2hJZk5vdFN0cmluZyhq
c1JlZ1QzMi5wYXlsb2FkR1BSKCkpKTsKKworICAgIC8vIFN0cmluZyBjYXNlLgorICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0
cmluZ0VxLCByZWdUNCwganNSZWdUMTAucGF5bG9hZEdQUigpLCBqc1JlZ1QzMi5wYXlsb2FkR1BS
KCkpOwogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGhhc0luc3RhbmNlVmFsdWVOb3RD
ZWxsLmxpbmsodGhpcyk7Ci0gICAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZS5saW5rKHRoaXMpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CisgICAgLy8gR2VuZXJpYyBjYXNlLgor
ICAgIGdlbmVyaWNDYXNlLmFwcGVuZChnZXRTbG93Q2FzZShpdGVyKSk7IC8vIGRvdWJsZXMKKyAg
ICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUNCwganNSZWdUMTAsIGpz
UmVnVDMyKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0U3RvcmVCb29sKGRzdCwg
cmVnVDApOwotCi19Ci0KLXZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5
cGU7Ci0KLSAgICB1c2luZyBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3VsdEdQUjsK
LSAgICB1c2luZyBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlSlNSOwotICAgIHVz
aW5nIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG9KU1I7Ci0gICAgdXNpbmcgQmFz
ZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mb0dQUjsKLSAgICB1c2luZyBCYXNlbGlu
ZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnNjcmF0Y2gxR1BSOwotICAgIHVzaW5nIEJhc2VsaW5lSW5z
dGFuY2VvZlJlZ2lzdGVyczo6c2NyYXRjaDJHUFI7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyUGF5bG9hZCh2YWx1ZSwgdmFsdWVKU1IucGF5bG9hZEdQUigpKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyUGF5bG9hZChwcm90bywgcHJvdG9KU1IucGF5bG9hZEdQUigpKTsKLQotICAg
IC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0g
dGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4K
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodmFsdWUpOwotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChwcm90byk7Ci0gICAgCi0gICAgSklUSW5zdGFuY2VPZkdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG51bGxwdHIsIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAg
ICAgICByZXN1bHRHUFIsCi0gICAgICAgIHZhbHVlSlNSLnBheWxvYWRHUFIoKSwKLSAgICAgICAg
cHJvdG9KU1IucGF5bG9hZEdQUigpLAotICAgICAgICBzdHViSW5mb0dQUiwKLSAgICAgICAgc2Ny
YXRjaDFHUFIsIHNjcmF0Y2gyR1BSKTsKLQotICAgIGF1dG8gWyBzdHViSW5mbywgc3R1YkluZm9J
bmRleCBdID0gYWRkVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbygpOwotICAgIHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjsKLSAgICBzdHViSW5mby0+Ynl0ZWNv
ZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKLSAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7Ci0gICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9
IHN0dWJJbmZvOwotCi0gICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhp
cywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOwotICAgIGFkZFNsb3dDYXNlKCk7Ci0gICAg
bV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKLSAgICAKLSAgICBlbWl0U3RvcmVCb29sKGRzdCwg
cmVzdWx0R1BSKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIAotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJv
dG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsKLSAgICAKLSAgICBKSVRJbnN0YW5jZU9mR2VuZXJh
dG9yJiBnZW4gPSBtX2luc3RhbmNlT2ZzW21faW5zdGFuY2VPZkluZGV4KytdOwotCi0gICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICB1c2luZyBTbG93T3BlcmF0aW9uID0g
ZGVjbHR5cGUob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKTsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24s
IDA+KCk7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHByZWZlcnJlZEFyZ3Vt
ZW50R1BSPFNsb3dPcGVyYXRpb24sIDE+KCk7Ci0gICAgdXNpbmcgQmFzZWxpbmVJbnN0YW5jZW9m
UmVnaXN0ZXJzOjp2YWx1ZUpTUjsKLSAgICB1c2luZyBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3Rl
cnM6OnByb3RvSlNSOwotICAgIHN0YXRpY19hc3NlcnQodmFsdWVKU1IgPT0gcHJlZmVycmVkQXJn
dW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMj4oKSk7Ci0gICAgLy8gUHJvdG8gd2lsbCBiZSBwYXNz
ZWQgb24gc3RhY2ssIGp1c3QgbWFrZSBzdXJlIG5vIG92ZXJsYXAKLSAgICBzdGF0aWNfYXNzZXJ0
KG5vT3ZlcmxhcCh2YWx1ZUpTUiwgcHJvdG9KU1IsIGdsb2JhbE9iamVjdEdQUiwgc3R1YkluZm9H
UFIpKTsKLQotICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BS
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKHZhbHVlLCB2YWx1ZUpTUi50YWdHUFIo
KSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclRhZyhwcm90bywgcHJvdG9KU1IudGFnR1BS
KCkpOwotICAgIGNhbGxPcGVyYXRpb248U2xvd09wZXJhdGlvbj4oCi0gICAgICAgIEFkZHJlc3Mo
c3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSks
Ci0gICAgICAgIGRzdCwKLSAgICAgICAgZ2xvYmFsT2JqZWN0R1BSLCBzdHViSW5mb0dQUiwgdmFs
dWVKU1IsIHByb3RvSlNSKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIENhbGwoKSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BJc0VtcHR5PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEs
IHJlZ1QwKTsKLSAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6RW1wdHlWYWx1ZVRhZyksIHJlZ1QwKTsKLQotICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdU
MCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVy
YW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJUYWcodmFsdWUsIHJlZ1QwKTsK
LSAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVh
blRhZyksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDApOwotfQotCi12b2lk
IEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElz
TnVtYmVyPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlclRhZyh2YWx1ZSwgcmVnVDApOwotICAgIGFkZDMyKFRydXN0
ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIGNvbXBhcmUzMihCZWxvdywgcmVnVDAsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcgKyAxKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUJvb2wo
ZHN0LCByZWdUMCk7Ci19Ci0KLU5PX1JFVFVSTiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19iaWdfaW50
KGNvbnN0IEluc3RydWN0aW9uKikKLXsKLSAgICAvLyBXZSBlbWl0IGlzX2NlbGxfd2l0aF90eXBl
IGluc3RlYWQsIHNpbmNlIEJpZ0ludDMyIGlzIG5vdCBzdXBwb3J0ZWQgb24gMzItYml0IHBsYXRm
b3Jtcy4KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIEpJVDo6
ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SXNDZWxsV2l0aFR5cGU+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAg
ICBpbnQgdHlwZSA9IGJ5dGVjb2RlLm1fdHlwZTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5v
dENlbGwocmVnVDEpOwotCi0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlZ1QwKTsKLSAg
ICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0KLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwotCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAg
IGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2lzX29i
amVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNPYmplY3Q+KCk7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENl
bGwocmVnVDEpOwotCi0gICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCBy
ZWdUMCk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwotCi0gICAgaXNOb3RDZWxsLmxpbmsodGhp
cyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKLQotICAgIGRvbmUubGluayh0
aGlzKTsKLSAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1p
dF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
LXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0
aXZlPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7Ci0KLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyYywgcmVnVDEsIHJlZ1QwKTsKLQotICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJ
Zk5vdENlbGwocmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7
Ci0gICAgaXNJbW0ubGluayh0aGlzKTsKLQotICAgIGlmIChkc3QgIT0gc3JjKQotICAgICAgICBl
bWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF90b19w
cm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvUHJvcGVydHlLZXk+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjLCByZWdUMSwgcmVnVDApOwotCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QxKSk7Ci0gICAgSnVtcCBkb25lID0gYnJhbmNoSWZTeW1ib2wocmVnVDApOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7Ci0KLSAgICBkb25lLmxpbmso
dGhpcyk7Ci0gICAgaWYgKHNyYyAhPSBkc3QpCi0gICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1Qx
LCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTm90PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclRhZyhzcmMsIHJlZ1QwKTsKLQotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90Qm9vbGVhbihyZWdUMSwgSW52YWxpZEdQUlJlZykpOwotICAgIHhvcjMyKFRydXN0ZWRJ
bW0zMigxKSwgcmVnVDApOwotCi0gICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwLCAoZHN0ID09
IHNyYykpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEp1bmRlZmluZWRPck51bGw+KCk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKHZhbHVlLCByZWdUMCk7Ci0gICAgc3Rh
dGljX2Fzc2VydCgoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnICsgMSA9PSBKU1ZhbHVlOjpOdWxsVGFn
KSAmJiAoSlNWYWx1ZTo6TnVsbFRhZyAmIDB4MSksICIiKTsKLSAgICBvcjMyKFRydXN0ZWRJbW0z
MigxKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoSWZOdWxsKHJlZ1QwKSwgdGFyZ2V0KTsK
LX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSm51bmRlZmluZWRPck51bGw+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0KLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKHZhbHVlLCByZWdUMCk7Ci0gICAgc3RhdGljX2Fz
c2VydCgoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnICsgMSA9PSBKU1ZhbHVlOjpOdWxsVGFnKSAmJiAo
SlNWYWx1ZTo6TnVsbFRhZyAmIDB4MSksICIiKTsKLSAgICBvcjMyKFRydXN0ZWRJbW0zMigxKSwg
cmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoSWZOb3ROdWxsKHJlZ1QwKSwgdGFyZ2V0KTsKLX0K
LQotdm9pZCBKSVQ6OmVtaXRfb3BfamVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSmVxUHRyPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVl
OwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
LCByZWdUMSwgcmVnVDApOwotICAgIEp1bXAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MSk7Ci0gICAgbG9hZENvZGVCbG9ja0NvbnN0YW50UGF5bG9hZChieXRlY29kZS5tX3NwZWNpYWxQ
b2ludGVyLCByZWdUMik7Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCByZWdU
MiksIHRhcmdldCk7Ci0gICAgbm90Q2VsbC5saW5rKHRoaXMpOwotfQotCi12b2lkIEpJVDo6ZW1p
dF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewot
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcVB0cj4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDEsIHJlZ1Qw
KTsKLSAgICBKdW1wIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDEpOwotICAgIGxvYWRD
b2RlQmxvY2tDb25zdGFudFBheWxvYWQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlciwgcmVnVDIp
OwotICAgIEp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMik7Ci0gICAg
bm90Q2VsbC5saW5rKHRoaXMpOwotICAgIHN0b3JlOFRvTWV0YWRhdGEoVHJ1c3RlZEltbTMyKDEp
LCBieXRlY29kZSwgT3BKbmVxUHRyOjpNZXRhZGF0YTo6b2Zmc2V0T2ZIYXNKdW1wZWQoKSk7Ci0g
ICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7Ci0gICAgZXF1YWwubGluayh0aGlzKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigp
OwogCi0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNy
YzIgPSBieXRlY29kZS5tX3JoczsKKyAgICBjb21waWxlT3BFcUNvbW1vbihieXRlY29kZS5tX2xo
cywgYnl0ZWNvZGUubV9yaHMpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCBy
ZWdUMSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgcmVnVDMsIHJl
Z1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QzKSk7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QxKSk7Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoMzIoQmVsb3csIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkp
OwotCi0gICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKLQotICAgIGVt
aXRTdG9yZUJvb2woZHN0LCByZWdUMCk7CisgICAgY29tcGFyZTMyKEVxdWFsLCBqc1JlZ1QxMC5w
YXlsb2FkR1BSKCksIGpzUmVnVDMyLnBheWxvYWRHUFIoKSwgcmVnVDApOworICAgIGJveEJvb2xl
YW4ocmVnVDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZHN0LCBqc1JlZ1QxMCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BFcT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7
CiAKLSAgICBKdW1wTGlzdCBzdG9yZVJlc3VsdDsKLSAgICBKdW1wTGlzdCBnZW5lcmljQ2FzZTsK
KyAgICBjb21waWxlT3BFcUNvbW1vbihieXRlY29kZS5tX2xocywgYnl0ZWNvZGUubV9yaHMpOwog
Ci0gICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0ZXIpKTsgLy8gdGFncyBub3Qg
ZXF1YWwKLQotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gdGFncyBlcXVhbCBhbmQgSlNDZWxs
Ci0gICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7Ci0gICAg
Z2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QyKSk7Ci0KLSAgICAvLyBT
dHJpbmcgY2FzZS4KLSAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgcmVnVDEsIHJlZ1QwLCByZWdUMik7Ci0gICAg
c3RvcmVSZXN1bHQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAvLyBHZW5lcmljIGNhc2UuCi0gICAg
Z2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0ZXIpKTsgLy8gZG91YmxlcwotICAgIGdl
bmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0gICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1Q0LCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKLQotICAgIHN0b3JlUmVzdWx0
LmxpbmsodGhpcyk7Ci0gICAgZW1pdFN0b3JlQm9vbChkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAg
ICBjb21wYXJlMzIoTm90RXF1YWwsIGpzUmVnVDEwLnBheWxvYWRHUFIoKSwganNSZWdUMzIucGF5
bG9hZEdQUigpLCByZWdUMCk7CisgICAgYm94Qm9vbGVhbihyZWdUMCwganNSZWdUMTApOworICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIGpzUmVnVDEwKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+
KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0
ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIHJlZ1QzLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMykpOwotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmQ2VsbChyZWdUMSkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEJlbG93LCByZWdU
MSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKKyAgICBjb21waWxlT3BFcUNv
bW1vbihieXRlY29kZS5tX2xocywgYnl0ZWNvZGUubV9yaHMpOwogCi0gICAgYWRkSnVtcChicmFu
Y2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QyKSwgdGFyZ2V0KTsKLX0KLQotdm9pZCBKSVQ6OmNvbXBp
bGVPcEVxSnVtcFNsb3coVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQ29t
cGlsZU9wRXFUeXBlIHR5cGUsIGludCBqdW1wVGFyZ2V0KQotewotICAgIEp1bXBMaXN0IGRvbmU7
Ci0gICAgSnVtcExpc3QgZ2VuZXJpY0Nhc2U7Ci0KLSAgICBnZW5lcmljQ2FzZS5hcHBlbmQoZ2V0
U2xvd0Nhc2UoaXRlcikpOyAvLyB0YWdzIG5vdCBlcXVhbAotCi0gICAgbGlua1Nsb3dDYXNlKGl0
ZXIpOyAvLyB0YWdzIGVxdWFsIGFuZCBKU0NlbGwKLSAgICBnZW5lcmljQ2FzZS5hcHBlbmQoYnJh
bmNoSWZOb3RTdHJpbmcocmVnVDApKTsKLSAgICBnZW5lcmljQ2FzZS5hcHBlbmQoYnJhbmNoSWZO
b3RTdHJpbmcocmVnVDIpKTsKLQotICAgIC8vIFN0cmluZyBjYXNlLgotICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0Vx
LCByZWdUMSwgcmVnVDAsIHJlZ1QyKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0
MzIodHlwZSA9PSBDb21waWxlT3BFcVR5cGU6OkVxID8gTm9uWmVybyA6IFplcm8sIHJldHVyblZh
bHVlR1BSKSwganVtcFRhcmdldCk7Ci0gICAgZG9uZS5hcHBlbmQoanVtcCgpKTsKLQotICAgIC8v
IEdlbmVyaWMgY2FzZS4KLSAgICBnZW5lcmljQ2FzZS5hcHBlbmQoZ2V0U2xvd0Nhc2UoaXRlcikp
OyAvLyBkb3VibGVzCi0gICAgZ2VuZXJpY0Nhc2UubGluayh0aGlzKTsKLSAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1Q0KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVn
VDQsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikp
OwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMih0eXBlID09IENvbXBpbGVPcEVx
VHlwZTo6RXEgPyBOb25aZXJvIDogWmVybywgcmV0dXJuVmFsdWVHUFIpLCBqdW1wVGFyZ2V0KTsK
LQotICAgIGRvbmUubGluayh0aGlzKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjb21waWxlT3BF
cUp1bXBTbG93KGl0ZXIsIENvbXBpbGVPcEVxVHlwZTo6RXEsIHRhcmdldCk7Ci19Ci0KLXZvaWQg
SklUOjplbWl0X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQot
ewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwot
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0g
Ynl0ZWNvZGUubV9yaHM7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1Qx
LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCByZWdUMywgcmVnVDIp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDMpKTsKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDEpKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2gzMihCZWxvdywgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7Ci0K
LSAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwotCi0gICAgZW1p
dFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKLQotICAgIEp1bXBMaXN0IHN0b3JlUmVzdWx0OwotICAgIEp1bXBMaXN0IGdlbmVyaWND
YXNlOwotCi0gICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0ZXIpKTsgLy8gdGFn
cyBub3QgZXF1YWwKLQotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gdGFncyBlcXVhbCBhbmQg
SlNDZWxsCi0gICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7
Ci0gICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QyKSk7Ci0KLSAg
ICAvLyBTdHJpbmcgY2FzZS4KLSAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgcmVnVDEsIHJlZ1QwLCByZWdUMik7
Ci0gICAgc3RvcmVSZXN1bHQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAvLyBHZW5lcmljIGNhc2Uu
Ci0gICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0ZXIpKTsgLy8gZG91Ymxlcwot
ICAgIGdlbmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0gICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1Q0LCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKLQotICAgIHN0b3Jl
UmVzdWx0LmxpbmsodGhpcyk7Ci0gICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJldHVyblZh
bHVlR1BSKTsKLSAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGFk
ZEp1bXAoYnJhbmNoMzIoRXF1YWwsIGpzUmVnVDEwLnBheWxvYWRHUFIoKSwganNSZWdUMzIucGF5
bG9hZEdQUigpKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmMxLCByZWdUMSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwg
cmVnVDMsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEs
IHJlZ1QzKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QxKSk7Ci0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoQmVsb3csIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93
ZXN0VGFnKSkpOworICAgIGNvbXBpbGVPcEVxQ29tbW9uKGJ5dGVjb2RlLm1fbGhzLCBieXRlY29k
ZS5tX3Jocyk7CiAKLSAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIp
LCB0YXJnZXQpOworICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIGpzUmVnVDEwLnBheWxv
YWRHUFIoKSwganNSZWdUMzIucGF5bG9hZEdQUigpKSwgdGFyZ2V0KTsKK30KKwordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKKworICAgIGNvbXBpbGVPcEVxU2xv
d0NvbW1vbihpdGVyKTsKKworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIHJldHVyblZh
bHVlSlNSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1
cm5WYWx1ZUpTUik7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE5lcT4oKTsKKworICAgIGNvbXBpbGVPcEVxU2xvd0NvbW1vbihpdGVyKTsKKworICAgIHhvcjMy
KFRydXN0ZWRJbW0zMigxKSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGJveEJvb2xlYW4ocmV0dXJu
VmFsdWVHUFIsIHJldHVyblZhbHVlSlNSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUpTUik7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisKKyAgICBj
b21waWxlT3BFcVNsb3dDb21tb24oaXRlcik7CisKKyAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFu
Y2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7Ci0gICAgY29tcGlsZU9wRXFKdW1wU2xvdyhpdGVyLCBDb21waWxlT3BFcVR5cGU6Ok5F
cSwgdGFyZ2V0KTsKKworICAgIGNvbXBpbGVPcEVxU2xvd0NvbW1vbihpdGVyKTsKKworICAgIGVt
aXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdl
dCk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjpjb21waWxlT3BTdHJp
Y3RFcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmNv
bXBpbGVPcFN0cmljdEVxQ29tbW9uKFZpcnR1YWxSZWdpc3RlciBzcmMxLCAgVmlydHVhbFJlZ2lz
dGVyIHNyYzIpCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3A+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZp
cnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHNyYzIgPSBieXRlY29kZS5tX3JoczsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
MSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIHJlZ1Qz
LCByZWdUMik7Ci0KLSAgICAvLyBCYWlsIGlmIHRoZSB0YWdzIGRpZmZlciwgb3IgYXJlIGRvdWJs
ZS4KLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QzKSk7Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQmVsb3csIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6TG93ZXN0VGFnKSkpOwotCi0gICAgLy8gSnVtcCB0byBhIHNsb3cgY2FzZSBpZiBib3RoIGFy
ZSBzdHJpbmdzIG9yIHN5bWJvbHMgKG5vbiBvYmplY3QpLgotICAgIEp1bXAgbm90Q2VsbCA9IGJy
YW5jaElmTm90Q2VsbChyZWdUMSk7Ci0gICAgSnVtcCBmaXJzdElzT2JqZWN0ID0gYnJhbmNoSWZP
YmplY3QocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QyKSk7
Ci0gICAgbm90Q2VsbC5saW5rKHRoaXMpOwotICAgIGZpcnN0SXNPYmplY3QubGluayh0aGlzKTsK
LQotICAgIC8vIFNpbXBseSBjb21wYXJlIHRoZSBwYXlsb2Fkcy4KLSAgICBpZiBjb25zdGV4cHIg
KHN0ZDo6aXNfc2FtZTxPcCwgT3BTdHJpY3RlcT46OnZhbHVlKQotICAgICAgICBjb21wYXJlMzIo
RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwotICAgIGVsc2UKLSAgICAgICAgY29tcGFyZTMy
KE5vdEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKLQotICAgIGVtaXRTdG9yZUJvb2woZHN0
LCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3N0cmljdGVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgY29tcGlsZU9wU3RyaWN0RXE8T3BTdHJp
Y3RlcT4oY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfbnN0cmlj
dGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgY29tcGls
ZU9wU3RyaWN0RXE8T3BOc3RyaWN0ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
MiA9IGJ5dGVjb2RlLm1fcmhzOwotCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCBq
c1JlZ1QxMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCBqc1JlZ1QzMik7CiAK
QEAgLTU2NywyMiArMTczLDQ4IEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXAoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdE9iamVjdChqc1JlZ1QzMi5wYXlsb2FkR1BSKCkpKTsKICAgICBub3RDZWxsLmxpbmso
dGhpcyk7CiAgICAgZmlyc3RJc09iamVjdC5saW5rKHRoaXMpOworfQogCi0gICAgLy8gU2ltcGx5
IGNvbXBhcmUgdGhlIHBheWxvYWRzLgotICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lPE9w
LCBPcEpzdHJpY3RlcT46OnZhbHVlKQotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCBq
c1JlZ1QxMC5wYXlsb2FkR1BSKCksIGpzUmVnVDMyLnBheWxvYWRHUFIoKSksIHRhcmdldCk7Ci0g
ICAgZWxzZQotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCBqc1JlZ1QxMC5wYXls
b2FkR1BSKCksIGpzUmVnVDMyLnBheWxvYWRHUFIoKSksIHRhcmdldCk7Cit2b2lkIEpJVDo6ZW1p
dF9vcF9zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQorewor
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3RyaWN0ZXE+KCk7
CisgICAgY29tcGlsZU9wU3RyaWN0RXFDb21tb24oYnl0ZWNvZGUubV9saHMsIGJ5dGVjb2RlLm1f
cmhzKTsKKworICAgIGNvbXBhcmUzMihFcXVhbCwganNSZWdUMTAucGF5bG9hZEdQUigpLCBqc1Jl
Z1QzMi5wYXlsb2FkR1BSKCksIHJlZ1QwKTsKKworICAgIGJveEJvb2xlYW4ocmVnVDAsIGpzUmVn
VDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCBqc1JlZ1Qx
MCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX25zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTnN0cmljdGVxPigpOworICAgIGNvbXBpbGVPcFN0cmljdEVxQ29tbW9uKGJ5
dGVjb2RlLm1fbGhzLCBieXRlY29kZS5tX3Jocyk7CisKKyAgICBjb21wYXJlMzIoTm90RXF1YWws
IGpzUmVnVDEwLnBheWxvYWRHUFIoKSwganNSZWdUMzIucGF5bG9hZEdQUigpLCByZWdUMCk7CisK
KyAgICBib3hCb29sZWFuKHJlZ1QwLCBqc1JlZ1QxMCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2RzdCwganNSZWdUMTApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9q
c3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBj
b21waWxlT3BTdHJpY3RFcUp1bXA8T3BKc3RyaWN0ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7Cisg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7
CisgICAgaW50IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKKworICAgIGNvbXBpbGVPcFN0cmljdEVxQ29tbW9uKGJ5dGVjb2Rl
Lm1fbGhzLCBieXRlY29kZS5tX3Jocyk7CisKKyAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCBq
c1JlZ1QxMC5wYXlsb2FkR1BSKCksIGpzUmVnVDMyLnBheWxvYWRHUFIoKSksIHRhcmdldCk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKLSAgICBjb21waWxlT3BTdHJpY3RFcUp1bXA8T3BKbnN0cmljdGVx
PihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKKyAgICBpbnQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworCisgICAgY29tcGls
ZU9wU3RyaWN0RXFDb21tb24oYnl0ZWNvZGUubV9saHMsIGJ5dGVjb2RlLm1fcmhzKTsKKworICAg
IGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIGpzUmVnVDEwLnBheWxvYWRHUFIoKSwganNSZWdU
MzIucGF5bG9hZEdQUigpKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pz
dHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtNTkyLDcgKzIyNCw3IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDQpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVx
LCByZWdUNCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJl
Z1QyKSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1Q0
LCBqc1JlZ1QxMCwganNSZWdUMzIpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3Qz
MihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTYwMywxNzggKzIz
NSwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
CiAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Db21wYXJlU3RyaWN0RXEsIHJlZ1Q0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVTdHJpY3RFcSwgcmVnVDQsIGpzUmVnVDEwLCBqc1JlZ1QzMik7CiAgICAgZW1pdEp1bXBTbG93
VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BUb051bWJlcj4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLQotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMSwgcmVnVDApOwotCi0gICAgSnVtcCBpc0lu
dDMyID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJv
dmVPckVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKLSAg
ICBpc0ludDMyLmxpbmsodGhpcyk7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKLSAgICBpZiAoc3JjICE9IGRzdCkKLSAg
ICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRf
b3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewot
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1lcmljPigp
OwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIEpTVmFsdWVSZWdzIGFyZ3Vt
ZW50VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywgcmVnVDEsIHJlZ1QwKTsKLQotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJbnQocmVnVDAp
KTsKLSAgICBKdW1wIGlzQmlnSW50ID0ganVtcCgpOwotCi0gICAgaXNOb3RDZWxsLmxpbmsodGhp
cyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIoYXJndW1lbnRWYWx1ZVJlZ3Ms
IHJlZ1QyKSk7Ci0gICAgaXNCaWdJbnQubGluayh0aGlzKTsKLQotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwotICAgIGlmIChz
cmMgIT0gZHN0KQotICAgICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwotfQotCi12
b2lkIEpJVDo6ZW1pdF9vcF90b19zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFRvU3RyaW5nPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QxLCByZWdUMCk7Ci0KLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdENlbGwocmVnVDEpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0
cmluZyhyZWdUMCkpOwotCi0gICAgaWYgKHNyYyAhPSBkc3QpCi0gICAgICAgIGVtaXRTdG9yZShk
c3QsIHJlZ1QxLCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3RvX29iamVjdChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9PYmplY3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRl
Y29kZS5tX29wZXJhbmQ7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDEs
IHJlZ1QwKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMSkpOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7Ci0KLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKLSAgICBp
ZiAoc3JjICE9IGRzdCkKLSAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKLX0K
LQotdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cENhdGNoPigpOwotCi0gICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwotCi0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1fdm0pLCByZWdUMyk7Ci0gICAgLy8gb3BlcmF0aW9uVGhyb3cgcmV0dXJucyB0aGUgY2FsbEZy
YW1lIGZvciB0aGUgaGFuZGxlci4KLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxG
cmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgc3RvcmVQdHIo
VHJ1c3RlZEltbVB0cihudWxscHRyKSwgQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNh
dGNoT2Zmc2V0KCkpKTsKLQotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zm
c2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0KLSAgICAvLyBXaGVuIHRoZSBMTElu
dCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB0aGVyZSBpcyBhIGNoYW5jZSB0aGF0IHdlJ3ZlIGFscmVh
ZHkgdGllcmVkIHVwCi0gICAgLy8gdGhlIHNhbWUgQ29kZUJsb2NrIHRvIGJhc2VsaW5lLCBhbmQg
d2UnbGwgY2F0Y2ggdGhlIGV4Y2VwdGlvbiBpbiB0aGUgYmFzZWxpbmUgSklUIChiZWNhdXNlCi0g
ICAgLy8gd2UgdXBkYXRlZCB0aGUgZXhjZXB0aW9uIGhhbmRsZXJzIHRvIHBvaW50IGhlcmUpLiBC
ZWNhdXNlIHRoZSBMTEludCB1c2VzIGEgZGlmZmVyZW50IHZhbHVlCi0gICAgLy8gaW5zaWRlIHNf
Y29uc3RhbnRzR1BSLCB0aGUgY2FsbGVlIHNhdmVzIHdlIHJlc3RvcmUgYWJvdmUgbWF5IG5vdCBj
b250YWluIHRoZSBjb3JyZWN0IHJlZ2lzdGVyLgotICAgIC8vIFNvIHdlIHJlcGxlbmlzaCBpdCBo
ZXJlLgotICAgIHsKLSAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIHJlZ1QwKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxv
Y2s6Om9mZnNldE9mSklURGF0YSgpKSwgcmVnVDApOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIENvZGVCbG9jazo6SklURGF0YTo6b2Zmc2V0T2ZKSVRDb25zdGFudFBvb2woKSksIHNf
Y29uc3RhbnRzR1BSKTsKLSAgICB9Ci0KLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVj
ayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUsICZ2bSgpKTsK
LSAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJl
dHVyblZhbHVlR1BSKTsKLSAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwotICAgIGlz
Q2F0Y2hhYmxlRXhjZXB0aW9uLmxpbmsodGhpcyk7Ci0KLSAgICAvLyBOb3cgc3RvcmUgdGhlIGV4
Y2VwdGlvbiByZXR1cm5lZCBieSBvcGVyYXRpb25UaHJvdy4KLSAgICBtb3ZlKHJldHVyblZhbHVl
R1BSLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJl
Z1QxKTsKLQotICAgIGVtaXRTdG9yZShieXRlY29kZS5tX2V4Y2VwdGlvbiwgcmVnVDEsIHJlZ1Qy
KTsKLQotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QyLCBFeGNlcHRpb246OnZhbHVlT2Zmc2V0KCkg
KyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdUMCk7Ci0g
ICAgbG9hZDMyKEFkZHJlc3MocmVnVDIsIEV4Y2VwdGlvbjo6dmFsdWVPZmZzZXQoKSArIE9CSkVD
VF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVnVDEpOwotCi0gICAgZW1pdFN0
b3JlKGJ5dGVjb2RlLm1fdGhyb3duVmFsdWUsIHJlZ1QxLCByZWdUMCk7Ci0KLSNpZiBFTkFCTEUo
REZHX0pJVCkKLSAgICAvLyBGSVhNRTogY29uc2lkZXIgaW5saW5lIGNhY2hpbmcgdGhlIHByb2Nl
c3Mgb2YgZG9pbmcgT1NSIGVudHJ5LCBpbmNsdWRpbmcKLSAgICAvLyBhcmd1bWVudCB0eXBlIHBy
b29mcywgc3RvcmluZyBsb2NhbHMgdG8gdGhlIGJ1ZmZlciwgZXRjCi0gICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU5OAotCi0gICAgY2FsbE9wZXJhdGlv
bk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9m
aWxlLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKLSAgICBhdXRvIHNraXBPU1JF
bnRyeSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwotICAgIGVtaXRSZXN0
b3JlQ2FsbGVlU2F2ZXMoKTsKLSAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBOb1B0clRhZyk7
Ci0gICAgc2tpcE9TUkVudHJ5LmxpbmsodGhpcyk7Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2lkZW50aXR5X3dpdGhfcHJvZmlsZShjb25zdCBJbnN0
cnVjdGlvbiopCi17Ci0gICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBoZXJlLi4u
Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2dldF9wYXJlbnRfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldFBhcmVudFNjb3BlPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBj
dXJyZW50U2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJQYXlsb2FkKGN1cnJlbnRTY29wZSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChi
eXRlY29kZS5tX2RzdCwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGVtaXRFbnRlck9wdGlt
aXphdGlvbkNoZWNrKCk7Ci0gICAgCi0gICAgLy8gRXZlbiB0aG91Z2ggSklUIGNvZGUgZG9lc24n
dCB1c2UgdGhlbSwgd2UgaW5pdGlhbGl6ZSBvdXIgY29uc3RhbnQKLSAgICAvLyByZWdpc3RlcnMg
dG8gemFwIHN0YWxlIHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcK
LSAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCi0gICAg
c2l6ZV90IGNvdW50ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtVmFycygpOwotICAgIGZvciAo
c2l6ZV90IGkgPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1
YWxSZWdpc3RlcnMoKTsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIGVtaXRTdG9yZSh2aXJ0dWFs
UmVnaXN0ZXJGb3JMb2NhbChpKSwganNVbmRlZmluZWQoKSk7Ci0KLSAgICBKSVRTbG93UGF0aENh
bGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2VudGVy
KTsKLSAgICBzbG93UGF0aENhbGwuY2FsbCgpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFNjb3BlPigpOwotICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBlbWl0R2V0RnJvbUNhbGxG
cmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgcmVnVDAp
OwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29w
X2NoZWNrX3Rkeihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2hlY2tUZHo+KCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclRhZyhieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdp
c3RlciwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKLX0K
LQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAppbmRleCBm
MDJmNGFhNTlkOTZhZTE1NTVlYTMyZWMxYTJmNTE3MDVmNGIxZTg2Li4xMTRhNzRkNGU0OTEzNzZk
Y2M1MjVlZDIxNWQxMTljZTUwNzU2ZmE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcApAQCAtMTQ5LDggKzE0OSw4IEBAIHZvaWQgSklUOjpn
ZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY29uc3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUsIFZlY3Rv
cjxTbG93Q2FzZUVuCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29w
X2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIHJldHVyblZhbHVlSlNSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmV0dXJuVmFsdWVKU1IpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQog
CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwpAQCAt
MjgwLDggKzI4MCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlCiAgICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVy
blZhbHVlR1BSKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVH
UFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlSlNS
KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVKU1IpOwogI2Vu
ZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwpAQCAtMTI3Myw4ICsxMjczLDggQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmUKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNs
b3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRp
b25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVKU1IpOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVKU1IpOwogI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBDYWxsKCkpOwpAQCAtMTM2OSw4ICsxMzY5LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2wKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lk
X3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1
bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmV0dXJuVmFsdWVKU1IpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
VlJlZywgcmV0dXJuVmFsdWVKU1IpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwpA
QCAtMTQxMyw4ICsxNDEzLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhp
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmVzdWx0SlNSKTsKIH0KIAotI2lmIFVTRShKU1ZBTFVF
NjQpCi0KICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVy
YXRvcihWTSYgdm0pCiB7CkBAIC0xNDUyLDggKzE0NTAsNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5l
cmF0bwogfQogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0jZW5kaWYKLQog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKIHsKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwpAQCAtMTUwMywxNSArMTQ5OSwx
MyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLAogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQ
Uik7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQ
Uik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVKU1Ip
OworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVKU1Ip
OwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCi0jaWYgVVNFKEpTVkFMVUU2
NCkKLQogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpc19wcmVwYXJl
Q2FsbEdlbmVyYXRvcihWTSYgdm0pCiB7CkBAIC0xNTUxLDggKzE1NDUsNiBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfYnlfaWRfd2l0aF90
aGlzX3ByZXBhcmVDYQogfQogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0j
ZW5kaWYKLQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BQdXRCeUlkPigpOwpAQCAtMjkzMSw4ICsyOTIzLDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAKICAgICBkb25lQ2FzZXMubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCByZXR1cm5WYWx1ZUpTUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
dHVyblZhbHVlSlNSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VudW1lcmF0b3JfZ2V0
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMjk2Niw3ICsyOTU4LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24KICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRT
dHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwogCiAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CiAgICAg
SnVtcCBkb25lID0ganVtcCgpOwogCiAgICAgc2xvd0Nhc2VzLmxpbmsodGhpcyk7CkBAIC0zMDI2
LDYzICszMDE4LDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9w
ZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0CiAKICNlbmRpZgogCit2b2lk
IEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQoreworICAgIC8vIHZhbHVlIG1heSBi
ZSBpbnZhbGlkIFZpcnR1YWxSZWdpc3RlciBpZiBtb2RlIGlzIFVuY29uZGl0aW9uYWxXcml0ZUJh
cnJpZXIgb3IgU2hvdWxkRmlsdGVyQmFzZS4KKyAgICBKdW1wIHZhbHVlTm90Q2VsbDsKKyAgICBp
ZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VB
bmRWYWx1ZSkgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0KLXZvaWQgSklUOjplbWl0V3JpdGVCYXJy
aWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJh
cnJpZXJNb2RlIG1vZGUpCi17Ci0gICAgLy8gdmFsdWUgbWF5IGJlIGludmFsaWQgVmlydHVhbFJl
Z2lzdGVyIGlmIG1vZGUgaXMgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciBvciBTaG91bGRGaWx0
ZXJCYXNlLgotICAgIEp1bXAgdmFsdWVOb3RDZWxsOwotICAgIGlmIChtb2RlID09IFNob3VsZEZp
bHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSB7CiAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICAgICAgdmFsdWVOb3RD
ZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICB9Ci0KLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG93bmVyLCByZWdUMCk7Ci0gICAgSnVtcCBvd25lck5vdENlbGw7Ci0gICAgaWYg
KG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVy
QmFzZSkKLSAgICAgICAgb3duZXJOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLQot
ICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwg
cmVnVDAsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRp
b25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIHJlZ1QwKTsKLSAgICBvd25lcklzUmVtZW1i
ZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7Ci0KLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJC
YXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKQotICAgICAgICBvd25lck5v
dENlbGwubGluayh0aGlzKTsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBt
b2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkKLSAgICAgICAgdmFsdWVOb3RDZWxsLmxp
bmsodGhpcyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIs
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQotewotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIHZhbHVlTm90Q2Vs
bDsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkKLSAgICAgICAgdmFsdWVOb3RD
ZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLQotICAgIGVtaXRXcml0ZUJhcnJpZXIob3du
ZXIpOwotCi0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpCi0gICAgICAgIHZhbHVl
Tm90Q2VsbC5saW5rKHRoaXMpOwotfQotCiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotCi12b2lk
IEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQotewotICAgIC8vIHZhbHVlIG1heSBi
ZSBpbnZhbGlkIFZpcnR1YWxSZWdpc3RlciBpZiBtb2RlIGlzIFVuY29uZGl0aW9uYWxXcml0ZUJh
cnJpZXIgb3IgU2hvdWxkRmlsdGVyQmFzZS4KLSAgICBKdW1wIHZhbHVlTm90Q2VsbDsKLSAgICBp
ZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VB
bmRWYWx1ZSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKHZhbHVlLCByZWdU
MCk7CisjZW5kaWYKICAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKICAgICB9CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG93bmVyLCByZWdUMCwgcmVn
VDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIsIGpzUmVnVDEwKTsKICAgICBK
dW1wIG93bmVyTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlIHx8IG1v
ZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKQotICAgICAgICBvd25lck5vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOworICAgICAgICBvd25lck5vdENlbGwgPSBicmFuY2hJZk5v
dENlbGwoanNSZWdUMTApOwogCi0gICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0g
YmFycmllckJyYW5jaCh2bSgpLCByZWdUMSwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4
Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgcmVnVDEp
OworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0o
KSwganNSZWdUMTAucGF5bG9hZEdQUigpLCByZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhj
ZXB0aW9uQ2hlY2sob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCBqc1JlZ1Qx
MC5wYXlsb2FkR1BSKCkpOwogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlz
KTsKIAogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2UgfHwgbW9kZSA9PSBTaG91bGRG
aWx0ZXJCYXNlQW5kVmFsdWUpCkBAIC0zMDkxLDIyICszMDQ2LDYgQEAgdm9pZCBKSVQ6OmVtaXRX
cml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUs
IFdyaXRlQmEKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklU
OjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwg
V3JpdGVCYXJyaWVyTW9kZSBtb2RlKQotewotICAgIEp1bXAgdmFsdWVOb3RDZWxsOwotICAgIGlm
IChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJUYWcodmFsdWUsIHJlZ1QwKTsKLSAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZO
b3RDZWxsKHJlZ1QwKTsKLSAgICB9Ci0KLSAgICBlbWl0V3JpdGVCYXJyaWVyKG93bmVyKTsKLQot
ICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKQotICAgICAgICB2YWx1ZU5vdENlbGwu
bGluayh0aGlzKTsKLX0KLQotI2VuZGlmCi0KIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZp
cnR1YWxSZWdpc3RlciBvd25lciwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogewogICAgIEFTU0VS
VChtb2RlID09IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIgfHwgbW9kZSA9PSBTaG91bGRGaWx0
ZXJCYXNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZh
Y2VKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaAppbmRl
eCBmMTg2ZmI4MmIxZmY5NzhkOGY2N2E0ZjA1MzM4ZTljZmI0YzgyMzc0Li40YjQyOWEyNjdjY2Vl
MmM2NDczZWRhNzFjOWZjOTQ1NGM1ODIzMDBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KU0ludGVyZmFjZUpJVC5oCkBAIC00OSwxNSArNDksNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVy
SUQgZHN0KTsKICAgICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lz
dGVyLCBGUFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpOwogCi0jaWYgVVNFKEpT
VkFMVUUzMl82NCkKLSAgICAgICAgaW5saW5lIEp1bXAgZW1pdEp1bXBJZk5vdEpTQ2VsbChWaXJ0
dWFsUmVnaXN0ZXIpOwotI2VuZGlmCi0KLSAgICAgICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFt
ZUhlYWRlclB0cihWaXJ0dWFsUmVnaXN0ZXIgZW50cnksIFJlZ2lzdGVySUQgdG8sIFJlZ2lzdGVy
SUQgZnJvbSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBlbWl0UHV0VG9DYWxs
RnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpOwotICAg
ICAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcih2b2lkKiB2YWx1ZSwgVmlydHVhbFJl
Z2lzdGVyIGVudHJ5KTsKLSAgICAgICAgdm9pZCBlbWl0UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVy
KFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KTsKLQogICAgICAgICBWTSog
dm0oKSBjb25zdCB7IHJldHVybiBtX3ZtOyB9CiAKICAgICAgICAgVk0qIG1fdm07CkBAIC02NSwx
NyArNTYsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAg
IGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRKU0Nl
bGwoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkKQot
ICAgIHsKLSAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIHBheWxv
YWQpOwotICAgICAgICByZXR1cm4gZW1pdEp1bXBJZk5vdEpTQ2VsbCh2aXJ0dWFsUmVnaXN0ZXIp
OwotICAgIH0KLQotICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJ
VDo6ZW1pdEp1bXBJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3RlciA8IFZpcnR1YWxSZWdpc3RlcihG
aXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCkpOworICAgICAgICBsb2FkUHRyKHBheWxvYWRGb3Io
dmlydHVhbFJlZ2lzdGVyKSwgcGF5bG9hZCk7CiAgICAgICAgIHJldHVybiBicmFuY2gzMihOb3RF
cXVhbCwgdGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxs
VGFnKSk7CiAgICAgfQotICAgIAorCiAgICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpT
SW50ZXJmYWNlSklUOjplbWl0TG9hZEludDMyKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0
ZXIsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3Rl
ciA8IFZpcnR1YWxSZWdpc3RlcihGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCkpOwpAQCAtOTcs
MTYgKzgzLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBkb25lLmxpbmsodGhpcyk7CiAg
ICAgICAgIHJldHVybiBub3RJbnQ7CiAgICAgfQotCi0jZW5kaWYKLQotI2lmIFVTRShKU1ZBTFVF
NjQpCisjZWxpZiBVU0UoSlNWQUxVRTY0KQogICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVt
cCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxS
ZWdpc3RlciwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBsb2FkNjQoYWRkcmVzc0Zv
cih2aXJ0dWFsUmVnaXN0ZXIpLCBkc3QpOwogICAgICAgICByZXR1cm4gYnJhbmNoSWZOb3RDZWxs
KGRzdCk7CiAgICAgfQotICAgIAorCiAgICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpT
SW50ZXJmYWNlSklUOjplbWl0TG9hZEludDMyKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0
ZXIsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAgICAgICAgbG9hZDY0KGFkZHJlc3NGb3Iodmly
dHVhbFJlZ2lzdGVyKSwgZHN0KTsKQEAgLTEyOSwzNSArMTEyLDYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgfQogI2VuZGlmCiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6
OmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFZpcnR1YWxSZWdpc3RlciBlbnRyeSwgUmVn
aXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9tKQotICAgIHsKLSAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKGZyb20sIGVudHJ5Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKLSAgICB9
Ci0KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6OmVtaXRQdXRUb0NhbGxG
cmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKLSAgICB7
Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgc3RvcmVQdHIoZnJvbSwgcGF5bG9hZEZv
cihlbnRyeSkpOwotI2Vsc2UKLSAgICAgICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9yKGVudHJ5
KSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VK
SVQ6OmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcih2b2lkKiB2YWx1ZSwgVmlydHVhbFJlZ2lzdGVy
IGVudHJ5KQotICAgIHsKLSAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cih2YWx1ZSksIGFk
ZHJlc3NGb3IoZW50cnkpKTsKLSAgICB9Ci0KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRl
cmZhY2VKSVQ6OmVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBW
aXJ0dWFsUmVnaXN0ZXIgZW50cnkpCi0gICAgewotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAg
ICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCB0YWdGb3IoZW50cnkp
KTsKLSAgICAgICAgc3RvcmUzMihmcm9tLCBwYXlsb2FkRm9yKGVudHJ5KSk7Ci0jZWxzZQotICAg
ICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZW50cnkpKTsKLSNlbmRpZgotICAgIH0KLQog
fSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445019</attachid>
            <date>2021-11-23 02:16:32 -0800</date>
            <delta_ts>2021-11-24 05:51:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233424-20211123101631.patch</filename>
            <type>text/plain</type>
            <size>148586</size>
            <attacher name="Geza Lore">glore</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MTI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
ZjJhM2Q1MWYxMGQ1YzZlYmM0MWNkN2RmNzUwOTQzZDNlNzMzNjAzLi40ZjVjMTJlMmY4NWRlYjIx
MDU1ZDg1NDkyM2ViMzU3MWUzMzNkYTk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMTggQEAKKzIwMjEtMTEtMjIgIEdlemEgTG9yZSAgPGdsb3JlQGlnYWxpYS5jb20+CisK
KyAgICAgICAgW0pTQ10gVW5pZnkgbW9zdCBCYXNlbGluZSBvcHMgYmV0d2VlbiBKU1ZBTFVFNjQg
YW5kIEpTVkFMVUUzMl82NAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjMzNDI0CisKKyAgICAgICAgVGhpcyBwYXRjaCB1bmlmaWVzIHRoZSBCYXNlbGlu
ZSBKSVQgaW1wbGVtZW50YXRpb25zIG9mIG1vc3QgYnl0ZWNvZGUKKyAgICAgICAgb3BzIGJldHdl
ZW4gdGhlIEpTVkFMVUUzMl82NCBhbmQgSlNWQUxVRTY0IHBsYXRmb3Jtcy4gVGhlcmUgYXJlIHZl
cnkKKyAgICAgICAgZmV3IGNoYW5nZXMgdG8gdGhlIGdlbmVyYXRlZCBjb2RlIG9uIEpTVkFMVUU2
NCAoYW5kIGFsbCBhcmUgZmFpcmx5CisgICAgICAgIHRyaXZpYWwsIGUuZy46IHJlbW92YWwgb2Yg
cmVkdW5kYW50IG1vdmVzIGluIHRoZSBzbG93IHBhdGgpLCBhcGFydAorICAgICAgICBmcm9tIG1h
Y2hpbmUgcmVnaXN0ZXIgc3Vic3RpdHV0aW9ucy4gTXkgbWVhc3VyZW1lbnRzIG9uIHg4Nl82NAor
ICAgICAgICBpbmRpY2F0ZSB0aGUgcGF0Y2ggaXMgcGVyZm9ybWFuY2UgbmV1dHJhbCB0aGVyZSAo
d2hpY2ggaXMgd2hhdCB3ZQorICAgICAgICBleHBlY3QpLgorCisgICAgICAgIE9uIEFSTXY3L1Ro
dW1iLTIgSmV0U3RyZWFtMiBzaG93cyBhIDAuNCUgaW1wcm92ZW1lbnQuIFRoaXMgaXMgZHVlIHRv
CisgICAgICAgIHNvbWUgb2YgdGhlIGltcHJvdmVkIGltcGxlbWVudGF0aW9ucyBwaWNrZWQgdXAg
ZnJvbSB0aGUgSlNWQUxVRTY0CisgICAgICAgIHZlcnNpb25zLgorCisgICAgICAgIEFsc28gcmVt
b3ZlIHZhcmlvdXMgdW51c2VkIGNvZGUuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAq
IGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
U3R1YkluZm86OmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyk6CisgICAg
ICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBl
cnM6OmJyYW5jaElmQm9vbGVhbik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YnJh
bmNoSWZOb3RCb29sZWFuKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjppc1VuZGVm
aW5lZCk6CisgICAgICAgICogaml0L0dQUkluZm8uaDoKKyAgICAgICAgKiBqaXQvSklULmNwcDoK
KyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0aWMuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdW5zaWduZWQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBh
cmVVbnNpZ25lZEFuZEp1bXBJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVV
bnNpZ25lZEltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93
SW1wbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbmMpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfZGVjKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX21vZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfYml0bm90KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UmlnaHRTaGlmdEZh
c3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TWF0aElDRmFzdCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdE1hdGhJQ1Nsb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGl2
KToKKyAgICAgICAgKiBqaXQvSklUQXJpdGhtZXRpYzMyXzY0LmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKiBqaXQvSklUSW5s
aW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2Fk
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmxvYWRDb2RlQmxvY2tDb25zdGFudFBheWxvYWQpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVz
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2Up
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZik6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9pc19lbXB0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZp
bmVkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2Jvb2xlYW4pOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2lzX2JpZ19pbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5
cGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF90b19wcm9wZXJ0eV9rZXkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfbm90KToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2plcV9wdHIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9wdHIp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfbmVxKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BTdHJpY3RFcSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19udW1iZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfdG9fbnVtZXJpYyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19zdHJpbmcp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9wYXJl
bnRfc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3RvX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfY2hlY2tfdGR6KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19yZWdleHApOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2dldF9wcm90b3R5cGVfb2YpOgorICAgICAgICAqIGppdC9KSVRPcGNv
ZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcEVxQ29tbW9uKToKKyAg
ICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BFcVNsb3dDb21tb24pOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVxKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2plcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9q
bmVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9lcSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfbmVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9q
ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2puZXEpOgorICAgICAgICAoSlND
OjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVxQ29tbW9uKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3N0cmljdGVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25zdHJpY3RlcSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3Bfam5zdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfanN0
cmljdGVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKToKKyAg
ICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6Omdl
bmVyYXRlR2V0QnlWYWxTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X3ByaXZhdGVfbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkX2RpcmVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRXcml0ZUJhcnJpZXIpOgorICAgICAgICAqIGppdC9KU0ludGVyZmFjZUpJ
VC5oOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRKU0NlbGwpOgorCiAy
MDIxLTExLTIyICBHZXphIExvcmUgIDxnbG9yZUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtKU0Nd
IE1ha2Ugc2hhcmluZyBvZiB1bmxpbmtlZCBiYXNlbGluZSBjb2RlIHBvc3NpYmxlIG9uIEpTVkFM
VUUzMl82NApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA3ZDc2OGI3ODY0NjhiNzhl
NjU2MzZkODNiYzI4ZjcyOWJjZTc4YjVjLi5hMzk4ZjQ3Y2E0MDViMjQ4NzU4YjgzMzcyNGM1ZDE5
ZTYxMWIxNzlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDcyOSw3ICs0NzI5
LDYgQEAKIAkJQTc0REVGOEUxODJEOTkxNDAwNTIyQzIyIC8qIE1hcEl0ZXJhdG9yUHJvdG90eXBl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcEl0ZXJhdG9yUHJvdG90eXBl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NERFRjhGMTgyRDk5MTQwMDUyMkMy
MiAvKiBKU01hcEl0ZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTTWFwSXRlcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzRE
RUY5MDE4MkQ5OTE0MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU01hcEl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUE3NTcwNkREMTE4QTJCQ0YwMDU3Rjg4RiAvKiBKSVRBcml0aG1ldGljMzJfNjQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUQXJpdGhtZXRpYzMyXzY0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc1RUU5QjAxOEFBQjdFMjAwQUFE
MDQzIC8qIEJ1aWx0aW5OYW1lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBC
dWlsdGluTmFtZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc2N0I1QjMxN0Ew
Qjk2NTAwNjNEOTQwIC8qIERGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBo
YXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NjdCNUI0MTdBMEI5NjUwMDYzRDk0MCAvKiBE
RkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR0xv
b3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC02Mzc3LDcgKzYzNzYsNiBAQAogCQkJCUZFMTIyMDI2MUJFN0Y1NjQwMDM5RTZGMiAvKiBKSVRB
ZGRHZW5lcmF0b3IuaCAqLywKIAkJCQkwRjc1QTA2NTIwMTNFNEVGMDAzOEUyQ0YgLyogSklUQWxs
b2NhdG9yLmggKi8sCiAJCQkJODZBOTBFQ0YwRUU3RDUxRjAwQUIzNTBEIC8qIEpJVEFyaXRobWV0
aWMuY3BwICovLAotCQkJCUE3NTcwNkREMTE4QTJCQ0YwMDU3Rjg4RiAvKiBKSVRBcml0aG1ldGlj
MzJfNjQuY3BwICovLAogCQkJCUZFM0EwNkFEMUMxMENCNkYwMDM5MEZERCAvKiBKSVRCaXRBbmRH
ZW5lcmF0b3IuY3BwICovLAogCQkJCUZFM0EwNkFFMUMxMENCNkYwMDM5MEZERCAvKiBKSVRCaXRB
bmRHZW5lcmF0b3IuaCAqLywKIAkJCQlGRTNBMDZBNzFDMTBCQzc0MDAzOTBGREQgLyogSklUQml0
QmluYXJ5T3BHZW5lcmF0b3IuaCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCBl
MGRlNmI3MmY4YzA4Y2Y0MGQwOGQ4MzQzOWQyN2VmMDc3YzlmY2IwLi5jOWUzZWExYzkwMmQ3NWEz
N2RkY2ZhZTY3YmMyOWVmYTliNDcwMDVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CkBA
IC02MzksNyArNjM5LDYgQEAgaml0L0ludHJpbnNpY0VtaXR0ZXIuY3BwCiBqaXQvSklULmNwcAog
aml0L0pJVEFkZEdlbmVyYXRvci5jcHAKIGppdC9KSVRBcml0aG1ldGljLmNwcAotaml0L0pJVEFy
aXRobWV0aWMzMl82NC5jcHAKIGppdC9KSVRCaXRBbmRHZW5lcmF0b3IuY3BwCiBqaXQvSklUQml0
T3JHZW5lcmF0b3IuY3BwCiBqaXQvSklUQml0WG9yR2VuZXJhdG9yLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCmlu
ZGV4IGFhN2VjMDFlMzg0OGFkYTlmY2FiOTUwNDIzMmY2ODdjMDM0OGMzMTAuLjA0NWRlZmVkYjE1
NGZkMDg5YTJiNjhkY2Q2MzE4MTE5NzEwMDFlMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKQEAgLTg5Nyw2ICs4
OTcsMTIgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci54b3JxX2lyKGltbS5tX3ZhbHVl
LCBzcmNEZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIHhvcjY0KFRydXN0ZWRJbW0zMiBpbW0sIFJl
Z2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtb3ZlKHNyYywg
ZGVzdCk7CisgICAgICAgIHhvcjY0KGltbSwgZGVzdCk7CisgICAgfQorCiAgICAgdm9pZCB4b3I2
NChUcnVzdGVkSW1tNjQgaW1tLCBSZWdpc3RlcklEIHNyY0Rlc3QpCiAgICAgewogICAgICAgICBt
b3ZlKGltbSwgc2NyYXRjaFJlZ2lzdGVyKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKaW5kZXggOTAxZmM1MzY5YTdjZTY4
YzM3YTcyMWE5YjRjYTk0ZWQzMjdmZGNmZi4uZDIxMDQxNzQyYmQ0OTViNjZlY2E0NTA4ZDczYjhk
MzhjYWNmZjE1YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uY3BwCkBAIC01NjQsMTkgKzU2NCwxNCBAQCB2b2lkIFN0cnVjdHVy
ZVN0dWJJbmZvOjppbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oQ29kZUJs
b2NrKiwgVW5saQogICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjoKICAgICAgICAgaGFz
Q29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CiAgICAgICAgIHByb3RvdHlwZUlzS25vd25PYmpl
Y3QgPSBmYWxzZTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBiYXNlR1BSID0gQmFzZWxp
bmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZTsKLSAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGlu
ZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3VsdDsKLSAgICAgICAgcmVncy5wcm90b3R5cGVHUFIg
PSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvOwotICAgICAgICBtX3N0dWJJbmZv
R1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbzsKLSNlbGlmIFVTRShK
U1ZBTFVFMzJfNjQpCiAgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3Rl
cnM6OnZhbHVlSlNSLnBheWxvYWRHUFIoKTsKLSAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUlu
c3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3VsdEdQUjsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGlu
ZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3VsdEpTUi5wYXlsb2FkR1BSKCk7CiAgICAgICAgIHJl
Z3MucHJvdG90eXBlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90b0pTUi5w
YXlsb2FkR1BSKCk7CiAgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZS
ZWdpc3RlcnM6OnN0dWJJbmZvR1BSOwotICAgICAgICBiYXNlVGFnR1BSID0gSW52YWxpZEdQUlJl
ZzsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBiYXNlVGFnR1BSID0gQmFzZWxpbmVJ
bnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZUpTUi50YWdHUFIoKTsKICAgICAgICAgdmFsdWVUYWdH
UFIgPSBJbnZhbGlkR1BSUmVnOwotICAgICAgICB2LnByb3BlcnR5VGFnR1BSID0gSW52YWxpZEdQ
UlJlZzsKKyAgICAgICAgdi5wcm9wZXJ0eVRhZ0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lz
dGVyczo6cHJvdG9KU1IudGFnR1BSKCk7CiAjZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1i
bHlIZWxwZXJzLmgKaW5kZXggOTg3MmQ1NjlkNDMzYjllMjc0ZGFkM2MzMmVjNWMzYjM0ZGRhOTc4
MC4uZTZjNzM2YzY3Y2ExMDJkNTI1NzBhNzE4OWMxMDA2MmVlYTVjNDI3YyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCkBAIC04MjEsOCArODIxLDcgQEAg
cHVibGljOgogICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBBU1NFUlQodGVtcEdQ
UiAhPSBJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgbW92ZShncHIsIHRlbXBHUFIpOwotICAgICAg
ICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHRlbXBHUFIpOworICAg
ICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIGdwciwgdGVtcEdQ
Uik7CiAgICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQoWmVybywgdGVtcEdQUiwgVHJ1c3RlZElt
bTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpOwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BB
UkFNKHRlbXBHUFIpOwpAQCAtODQ1LDggKzg0NCw3IEBAIHB1YmxpYzoKICAgICB7CiAjaWYgVVNF
KEpTVkFMVUU2NCkKICAgICAgICAgQVNTRVJUKHRlbXBHUFIgIT0gSW52YWxpZEdQUlJlZyk7Ci0g
ICAgICAgIG1vdmUoZ3ByLCB0ZW1wR1BSKTsKLSAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCB0ZW1wR1BSKTsKKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBncHIsIHRlbXBHUFIpOwogICAgICAgICByZXR1cm4gYnJh
bmNoVGVzdDY0KE5vblplcm8sIHRlbXBHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQz
Ml90Pih+MSkpKTsKICNlbHNlCiAgICAgICAgIFVOVVNFRF9QQVJBTSh0ZW1wR1BSKTsKQEAgLTEw
MzMsNiArMTAzMSwxNSBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAKKyAgICB2b2lkIGlzVW5k
ZWZpbmVkKEpTVmFsdWVSZWdzIHJlZ3MsIEdQUlJlZyBkc3QpCisgICAgeworI2lmIFVTRShKU1ZB
TFVFNjQpCisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVncy5wYXlsb2FkR1BSKCksIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIGRzdCk7CisjZWxpZiBVU0UoSlNWQUxV
RTMyXzY0KQorICAgICAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ3MudGFnR1BSKCksIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBkc3QpOworI2VuZGlmCisgICAgfQorCiAgICAg
Ly8gTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmVzcGVjdCBNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLgogICAgIEp1bXAgYnJhbmNoSWZVbmRlZmluZWQoR1BSUmVnIGdwcikKICAgICB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCmluZGV4IDJmOGU1NDQ3M2Y3MjEzYzkyZDg4
NmExOTZhZTJjOTFjMWU0NDZkYzkuLmYxYzk4ZDkzYmUzZDQxMDhiMTUzZTMzMTc5NjlmYmEyZDQx
NDYzODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCkBAIC05MzksOSArOTM5LDEx
IEBAIHB1YmxpYzoKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIHN0YXRpYyBjb25zdGV4cHIgSlNW
YWx1ZVJlZ3MganNSZWdUMTAgeyBHUFJJbmZvOjpyZWdUMCB9OwogICAgIHN0YXRpYyBjb25zdGV4
cHIgSlNWYWx1ZVJlZ3MganNSZWdUMzIgeyBHUFJJbmZvOjpyZWdUMiB9OworICAgIHN0YXRpYyBj
b25zdGV4cHIgSlNWYWx1ZVJlZ3MganNSZWdUNTQgeyBHUFJJbmZvOjpyZWdUNCB9OwogI2VsaWYg
VVNFKEpTVkFMVUUzMl82NCkKICAgICBzdGF0aWMgY29uc3RleHByIEpTVmFsdWVSZWdzIGpzUmVn
VDEwIHsgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwIH07CiAgICAgc3RhdGljIGNvbnN0
ZXhwciBKU1ZhbHVlUmVncyBqc1JlZ1QzMiB7IEdQUkluZm86OnJlZ1QzLCBHUFJJbmZvOjpyZWdU
MiB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MganNSZWdUNTQgeyBHUFJJbmZv
OjpyZWdUNSwgR1BSSW5mbzo6cmVnVDQgfTsKICNlbmRpZgogCiAgICAgLy8gUmV0dXJuIHZhbHVl
IHJlZ2lzdGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKaW5kZXggMGM2YmYzZDFlNzUwNjM2
YjgwNzAwMDQ4NDRlZDNlNTM2MzMwM2E4MS4uMmIzMWNhZTAxYmJiY2FjMDRhN2VkZDMxMzg5YWQ5
ZGViODA2ZjgwNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcApAQCAtMTI2LDE2ICsxMjYs
NiBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKQogfQogI2VuZGlmCiAK
LXZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGUoV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGlm
ICghc2V0IHx8IHNldC0+c3RhdGUoKSA9PSBJc0ludmFsaWRhdGVkKSB7Ci0gICAgICAgIGFkZFNs
b3dDYXNlKEp1bXAoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mU3Rh
dGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwotfQotCiB2b2lkIEpJVDo6ZW1p
dE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRlclRvU2V0KQogewogICAgIGF1dG8g
b2sgPSBicmFuY2hUZXN0UHRyKFplcm8sIHBvaW50ZXJUb1NldCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAppbmRleCBkNjMwNjZmNzkwNzAwNDcyYzk5NjNlYzgzNTA3NzFjMmNhZDRjMGNjLi41NGQ1
ODJlMGZmYmM0ZTA4NGQ5NzQwNWU4MjQwOGFkMGE0MmExY2ExIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgKQEAgLTI1NCw4ICsyNTQsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwcml2YXRlOgog
ICAgICAgICB2b2lkIGxvYWRHbG9iYWxPYmplY3QoR1BSUmVnKTsKICAgICAgICAgdm9pZCBsb2Fk
Q29kZUJsb2NrQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyLCBKU1ZhbHVlUmVncyk7Ci0jaWYgVVNF
KEpTVkFMVUUzMl82NCkKICAgICAgICAgdm9pZCBsb2FkQ29kZUJsb2NrQ29uc3RhbnRQYXlsb2Fk
KFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAg
ICAgICAgdm9pZCBsb2FkQ29kZUJsb2NrQ29uc3RhbnRUYWcoVmlydHVhbFJlZ2lzdGVyLCBSZWdp
c3RlcklEKTsKICNlbmRpZgogCkBAIC0zMTMsMzEgKzMxMywzNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdFB1dENhbGxS
ZXN1bHQoY29uc3QgT3AmKTsKIAorI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPiB2b2lkIGNvbXBpbGVPcFN0cmljdEVxKGNvbnN0IEluc3RydWN0aW9uKik7
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPiB2b2lkIGNvbXBpbGVPcFN0cmljdEVxSnVt
cChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICBlbnVtIGNsYXNzIENvbXBpbGVPcEVxVHlw
ZSB7IEVxLCBORXEgfTsKLSAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0
KTsKLSAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIp
OwotICAgICAgICAKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHZvaWQgY29tcGls
ZU9wRXFDb21tb24oVmlydHVhbFJlZ2lzdGVyIHNyYzEsIFZpcnR1YWxSZWdpc3RlciBzcmMyKTsK
KyAgICAgICAgdm9pZCBjb21waWxlT3BFcVNsb3dDb21tb24oVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGNvbXBpbGVPcFN0cmljdEVxQ29tbW9uKFZpcnR1
YWxSZWdpc3RlciBzcmMxLCAgVmlydHVhbFJlZ2lzdGVyIHNyYzIpOworI2VuZGlmCisKICAgICAg
ICAgZW51bSBXcml0ZUJhcnJpZXJNb2RlIHsgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciwgU2hv
dWxkRmlsdGVyQmFzZSwgU2hvdWxkRmlsdGVyVmFsdWUsIFNob3VsZEZpbHRlckJhc2VBbmRWYWx1
ZSB9OwogICAgICAgICAvLyB2YWx1ZSByZWdpc3RlciBpbiB3cml0ZSBiYXJyaWVyIGlzIHVzZWQg
YmVmb3JlIGFueSBzY3JhdGNoIHJlZ2lzdGVycwogICAgICAgICAvLyBzbyBtYXkgc2FmZWx5IGJl
IHRoZSBzYW1lIGFzIGVpdGhlciBvZiB0aGUgc2NyYXRjaCByZWdpc3RlcnMuCiAgICAgICAgIHZv
aWQgZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFdyaXRlQmFycmllck1v
ZGUpOwogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVy
LCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUpOwotICAgICAgICB2b2lk
IGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBX
cml0ZUJhcnJpZXJNb2RlKTsKICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCog
b3duZXIpOwogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyKTsKIAot
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2
b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBHUFJSZWcpOwotI2Vu
ZGlmCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2b2lkIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBKU1ZhbHVlUmVncyk7CiAKLSAgICAgICAgLy8g
VGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHByb2ZpbGUgaXMgaW4gcmVnVDAgKHJlZ1Qx
L3JlZ1QwIG9uIEpTVkFMVUUzMl82NCkuCi0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZUlmUHJvZmlsZWRPcGNvZGUoLi4uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
Ci0gICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRh
ZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+Ci0gICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKTsKKyAgICAg
ICAgc3RhdGljIGlubGluZSBjb25zdGV4cHIgYm9vbCBpc19wcm9maWxlZF9vcCA9IHN0ZDo6aXNf
c2FtZV92PGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjsK
KyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CisgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8
aXNfcHJvZmlsZWRfb3A8T3A+LCB2b2lkPgorICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
SWZQcm9maWxlZE9wY29kZShPcCBieXRlY29kZSkKKyAgICAgICAgeyAvLyBUaGlzIGFzc3VtZXMg
dGhhdCB0aGUgdmFsdWUgdG8gcHJvZmlsZSBpcyBpbiBqc1JlZ1QxMC4KKyAgICAgICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIGpzUmVnVDEwKTsKKyAgICAgICAgfQorICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KKyAgICAgICAgc3RkOjplbmFibGVfaWZfdDwhaXNf
cHJvZmlsZWRfb3A8T3A+LCB2b2lkPgorICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQ
cm9maWxlZE9wY29kZShPcCkKKyAgICAgICAgeyB9CiAKICAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEJ5dGVjb2RlPgogICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2Vs
bChjb25zdCBCeXRlY29kZSYsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNo
R1BSKTsKQEAgLTM0Nyw1NyArMzUzLDIzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgRUNNQU1vZGUgZWNtYU1vZGUoT3ApOwogCi0gICAg
ICAgIC8vIERldGVybWluZXMgdGhlIHR5cGUgb2YgcHJpdmF0ZSBmaWVsZCBhY2Nlc3MgZm9yIGEg
Ynl0ZWNvZGUuCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBQcml2YXRl
RmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtpbmQoT3ApOwotCiAgICAgICAgIHZvaWQgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBKU1ZhbHVlUmVncyBkc3Qp
OwogICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKFZpcnR1YWxSZWdp
c3RlciBzcmMsIFJlZ2lzdGVySUQgZHN0KTsKICAgICAgICAgdm9pZCBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIEpTVmFsdWVSZWdzIHNyYyk7Ci0gICAgICAgIHZv
aWQgZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3RlciwgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVn
aXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwotCi0gICAgICAgIGludDMyX3QgZ2V0
T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpOwotICAgICAgICBkb3VibGUg
Z2V0T3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpOwogCiAjaWYgVVNF
KEpTVkFMVUUzMl82NCkKLSAgICAgICAgYm9vbCBnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVh
bFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgVmlydHVhbFJlZ2lzdGVyJiBvcCwg
aW50MzJfdCYgY29uc3RhbnQpOwotCi0gICAgICAgIHZvaWQgZW1pdExvYWREb3VibGUoVmlydHVh
bFJlZ2lzdGVyLCBGUFJlZ2lzdGVySUQgdmFsdWUpOwotCi0gICAgICAgIHZvaWQgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIHRhZywgUmVnaXN0
ZXJJRCBwYXlsb2FkKTsKICAgICAgICAgdm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKFZp
cnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQgZHN0KTsKLQotICAgICAgICB2b2lkIGVtaXRT
dG9yZShWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQs
IFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBlbWl0
U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRl
eElzSW50MzIgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChWaXJ0dWFsUmVn
aXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQ2VsbCA9IGZhbHNlKTsKLSAg
ICAgICAgdm9pZCBlbWl0U3RvcmVCb29sKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXls
b2FkLCBib29sIGluZGV4SXNCb29sID0gZmFsc2UpOwotCi0gICAgICAgIHZvaWQgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3Rlcik7Ci0gICAgICAgIHZvaWQgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcpOwot
ICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEKTsKLQot
ICAgICAgICAvLyBBcml0aG1ldGljIG9wY29kZSBoZWxwZXJzCi0gICAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBlbWl0QmluYXJ5RG91YmxlT3AoY29uc3QgSW5zdHJ1
Y3Rpb24gKiwgT3BlcmFuZFR5cGVzLCBKdW1wTGlzdCYgbm90SW50MzJPcDEsIEp1bXBMaXN0JiBu
b3RJbnQzMk9wMiwgYm9vbCBvcDFJc0luUmVnaXN0ZXJzID0gdHJ1ZSwgYm9vbCBvcDJJc0luUmVn
aXN0ZXJzID0gdHJ1ZSk7Ci0KLSNlbHNlIC8vIFVTRShKU1ZBTFVFMzJfNjQpCisjZWxpZiBVU0Uo
SlNWQUxVRTY0KQorICAgICAgICAvLyBNYWNoaW5lIHJlZ2lzdGVyIHZhcmlhbnRzIHB1cmVseSBm
b3IgY29udmVuaWVuY2UKICAgICAgICAgdm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1
YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQgZHN0KTsKLSAgICAgICAgdm9pZCBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJvbSA9IHJlZ1Qw
KTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmVDZWxsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lz
dGVySUQgcGF5bG9hZCwgYm9vbCAvKiBvbmx5IHVzZWQgaW4gSlNWYWx1ZTMyXzY0ICovID0gZmFs
c2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBw
YXlsb2FkKTsKLSAgICAgICAgfQorICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
VmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tKTsKIAotICAgICAgICBKdW1wIGVt
aXRKdW1wSWZCb3RoSlNDZWxscyhSZWdpc3RlcklELCBSZWdpc3RlcklELCBSZWdpc3RlcklEKTsK
LSAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZKU0NlbGwoUmVnaXN0ZXJJRCk7Ci0gICAg
ICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQpOwotICAgICAg
ICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklELCBWaXJ0dWFsUmVn
aXN0ZXIpOwogICAgICAgICBKdW1wIGVtaXRKdW1wSWZOb3RJbnQoUmVnaXN0ZXJJRCwgUmVnaXN0
ZXJJRCwgUmVnaXN0ZXJJRCBzY3JhdGNoKTsKLSAgICAgICAgUGF0Y2hhYmxlSnVtcCBlbWl0UGF0
Y2hhYmxlSnVtcElmTm90SW50KFJlZ2lzdGVySUQpOwotICAgICAgICB2b2lkIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChSZWdpc3RlcklEKTsKLSAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNl
SWZOb3ROdW1iZXIoUmVnaXN0ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SW50KFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQgc2NyYXRjaCk7Ci0jZW5k
aWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RJbnQoUmVnaXN0ZXJJRCk7CisjZW5kaWYKKworICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEludChKU1ZhbHVlUmVncyk7CiAKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoSlNWYWx1ZVJlZ3MpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChKU1ZhbHVlUmVncywgVmlydHVhbFJlZ2lzdGVyKTsKQEAgLTY0Nyw5ICs2MTks
NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2l0ZXJhdG9yX25leHQo
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9u
ZXh0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwogCi0gICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBib29s
IGlzVW5zaWduZWQpOwotICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBpc1Vu
c2lnbmVkKTsKLQogICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRlKFZpcnR1YWxSZWdpc3RlciBk
c3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlPckJyYW5k
LCBBY2Nlc3NUeXBlKTsKICAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJl
Z2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0
eSwgQWNjZXNzVHlwZSk7CiAKQEAgLTY1OSwxNiArNjI4LDIwIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB2b2lkIGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwog
ICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzLCBHUFJSZWcpOwogICAgICAgICB2b2lkIGVtaXRWYXJSZWFkT25seUNoZWNrKFJlc29s
dmVUeXBlLCBHUFJSZWcgc2NyYXRjaEdQUik7Ci0gICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRl
KFdhdGNocG9pbnRTZXQqKTsKICAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50
KEdQUlJlZyBwb2ludGVyVG9TZXQpOwogCiAgICAgICAgIHZvaWQgZW1pdEluaXRSZWdpc3RlcihW
aXJ0dWFsUmVnaXN0ZXIpOwogCi0gICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVh
ZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKLQogICAgICAgICBib29sIGlz
S25vd25DZWxsKFZpcnR1YWxSZWdpc3Rlcik7CisKICAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFu
dE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAg
IGJvb2wgaXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAg
ZG91YmxlIGdldE9wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgc3JjKTsKKyNl
bmRpZgogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3Rlcik7
CisgICAgICAgIGludDMyX3QgZ2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBz
cmMpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIp
OwogCiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0
eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOb25Qcm9maWxlZEZ1bmN0aW9uPgpA
QCAtNzI5LDEyICs3MDIsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgICAgICBpdGVy
LT5mcm9tLmxpbmsodGhpcyk7CiAgICAgICAgICAgICArK2l0ZXI7CiAgICAgICAgIH0KLSAgICAg
ICAgdm9pZCBsaW5rRHVtbXlTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoIWl0ZXItPmZyb20uaXNTZXQo
KSk7Ci0gICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xv
d0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgVmlydHVh
bFJlZ2lzdGVyKTsKICAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRl
eChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywKICAgICAgICAgICAgIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKaW5kZXggOGY0
ZDgwYjk5Y2ZjOWU5MWZlMjMzZDRiZTkyNmY1NjM3ZjY2ZWM2ZS4uZjg2NzU4MzJhODdjYmVkYWFm
MTZiY2E4NzE1ZjhiMzVjZDVhZjkzMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRBcml0aG1ldGljLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VEFyaXRobWV0aWMuY3BwCkBAIC0xNDQsMTkgKzE0NCwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9q
YmVsb3dlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRf
Y29tcGFyZVVuc2lnbmVkQW5kSnVtcDxPcEpiZWxvd2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEJl
bG93T3JFcXVhbCk7CiB9CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotCiB2b2lkIEpJVDo6ZW1pdF9v
cF91bnNpZ25lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVW5zaWduZWQ+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVn
VDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKExlc3NUaGFuLCByZWdUMCwgVHJ1c3RlZElt
bTMyKDApKSk7Ci0gICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlZ1QwKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMSwganNSZWdUMTApOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChqc1JlZ1QxMCk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTGVzc1RoYW4sIGpzUmVnVDEw
LnBheWxvYWRHUFIoKSwgVHJ1c3RlZEltbTMyKDApKSk7CisgICAgYm94SW50MzIoanNSZWdUMTAu
cGF5bG9hZEdQUigpLCBqc1JlZ1QxMCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1
bHQsIGpzUmVnVDEwKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC0xNzgsNDYgKzE3
Niw0NyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVy
IG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaQogCiAgICAgYm9vbCBkaXNhbGxvd0FsbG9j
YXRpb24gPSBmYWxzZTsKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsKLSAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QwKTsKLSAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AyLCBqc1JlZ1QxMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2Vs
bChqc1JlZ1QxMCkpOwogICAgICAgICBKdW1wTGlzdCBmYWlsdXJlczsKLSAgICAgICAgZW1pdExv
YWRDaGFyYWN0ZXJTdHJpbmcocmVnVDAsIHJlZ1QwLCBmYWlsdXJlcyk7CisgICAgICAgIGVtaXRM
b2FkQ2hhcmFjdGVyU3RyaW5nKGpzUmVnVDEwLnBheWxvYWRHUFIoKSwgcmVnVDAsIGZhaWx1cmVz
KTsKICAgICAgICAgYWRkU2xvd0Nhc2UoZmFpbHVyZXMpOwogICAgICAgICBhZGRKdW1wKGJyYW5j
aDMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmVnVDAsIEltbTMyKGFzU3RyaW5nKGdldENvbnN0YW50
T3BlcmFuZChvcDEpKS0+dHJ5R2V0VmFsdWUoZGlzYWxsb3dBbGxvY2F0aW9uKVswXSkpLCB0YXJn
ZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENo
YXIob3AyKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOwot
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGpzUmVnVDEwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RDZWxsKGpzUmVnVDEwKSk7CiAgICAgICAgIEp1bXBMaXN0IGZhaWx1cmVzOwot
ICAgICAgICBlbWl0TG9hZENoYXJhY3RlclN0cmluZyhyZWdUMCwgcmVnVDAsIGZhaWx1cmVzKTsK
KyAgICAgICAgZW1pdExvYWRDaGFyYWN0ZXJTdHJpbmcoanNSZWdUMTAucGF5bG9hZEdQUigpLCBy
ZWdUMCwgZmFpbHVyZXMpOwogICAgICAgICBhZGRTbG93Q2FzZShmYWlsdXJlcyk7CiAgICAgICAg
IGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIoYXNTdHJpbmcoZ2V0Q29u
c3RhbnRPcGVyYW5kKG9wMikpLT50cnlHZXRWYWx1ZShkaXNhbGxvd0FsbG9jYXRpb24pWzBdKSks
IHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0
YW50SW50KG9wMikpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1Qw
KTsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGpzUmVnVDEwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SW50KGpzUmVnVDEwKTsKICAgICAgICAgaW50MzJfdCBvcDJpbW0gPSBnZXRPcGVy
YW5kQ29uc3RhbnRJbnQob3AyKTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24s
IHJlZ1QwLCBJbW0zMihvcDJpbW0pKSwgdGFyZ2V0KTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gz
Mihjb25kaXRpb24sIGpzUmVnVDEwLnBheWxvYWRHUFIoKSwgSW1tMzIob3AyaW1tKSksIHRhcmdl
dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50
KG9wMSkpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QxKTsKLSAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QxKTsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDIsIGpzUmVnVDMyKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SW50KGpzUmVnVDMyKTsKICAgICAgICAgaW50MzJfdCBvcDFpbW0gPSBnZXRPcGVyYW5kQ29u
c3RhbnRJbnQob3AxKTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb21tdXRlKGNvbmRpdGlv
biksIHJlZ1QxLCBJbW0zMihvcDFpbW0pKSwgdGFyZ2V0KTsKKyAgICAgICAgYWRkSnVtcChicmFu
Y2gzMihjb21tdXRlKGNvbmRpdGlvbiksIGpzUmVnVDMyLnBheWxvYWRHUFIoKSwgSW1tMzIob3Ax
aW1tKSksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ay
LCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AxLCBqc1JlZ1QxMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGpzUmVnVDMy
KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoanNSZWdUMTApOworICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEludChqc1JlZ1QzMik7CiAKLSAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRp
dGlvbiwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRp
dGlvbiwganNSZWdUMTAucGF5bG9hZEdQUigpLCBqc1JlZ1QzMi5wYXlsb2FkR1BSKCkpLCB0YXJn
ZXQpOwogfQogCisKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZVVuc2lnbmVkQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9u
YWxDb25kaXRpb24gY29uZGl0aW9uKQogewpAQCAtMjMxLDE2ICsyMzAsMTYgQEAgdm9pZCBKSVQ6
OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIFJlbGF0aW9uYWwKIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBs
KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdl
dCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgaWYgKGlzT3BlcmFuZENv
bnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJl
Z1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQob3AxLCByZWdUMCk7
CiAgICAgICAgIGludDMyX3Qgb3AyaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMik7CiAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIob3AyaW1tKSks
IHRhcmdldCk7CiAgICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0g
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKG9wMiwgcmVnVDEpOwogICAgICAgICBpbnQzMl90IG9w
MWltbSA9IGdldE9wZXJhbmRDb25zdGFudEludChvcDEpOwogICAgICAgICBhZGRKdW1wKGJyYW5j
aDMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmVnVDEsIEltbTMyKG9wMWltbSkpLCB0YXJnZXQpOwog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7
Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKG9wMSwgcmVnVDApOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChvcDIsIHJlZ1QxKTsKICAgICAgICAgYWRkSnVtcChicmFu
Y2gzMihjb25kaXRpb24sIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CiAgICAgfQogfQpAQCAtMjU4
LDIwICsyNTcsMjAgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IEluc3Ry
dWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGkKIHZvaWQgSklUOjplbWl0X2Nv
bXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9w
MSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7
CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
clBheWxvYWQob3AxLCByZWdUMCk7CiAgICAgICAgIGludDMyX3Qgb3AyaW1tID0gZ2V0T3BlcmFu
ZENvbnN0YW50SW50KG9wMik7CiAgICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIHJlZ1QwLCBJ
bW0zMihvcDJpbW0pLCByZWdUMCk7CiAgICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudElu
dChvcDEpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKG9wMiwgcmVnVDApOwogICAgICAg
ICBpbnQzMl90IG9wMWltbSA9IGdldE9wZXJhbmRDb25zdGFudEludChvcDEpOwogICAgICAgICBj
b21wYXJlMzIoY29tbXV0ZShjb25kaXRpb24pLCByZWdUMCwgSW1tMzIob3AxaW1tKSwgcmVnVDAp
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdU
MCk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKG9wMSwgcmVnVDApOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChvcDIsIHJlZ1QxKTsKICAgICAgICAgY29tcGFyZTMy
KGNvbmRpdGlvbiwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CiAgICAgfQotICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgIGJveEJvb2xlYW4ocmVnVDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwganNSZWdUMTApOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwg
dHlwZW5hbWUgU2xvd09wZXJhdGlvbj4KQEAgLTI5NSwyNiArMjk0LDM3IEBAIHZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJl
Z2lzdGVyIG9wMiwKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVy
YW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKICAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
IAotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIxKTsKLSAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMik7Ci0gICAgICAg
IGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb24sIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOworICAg
ICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJlZEFyZ3VtZW50
R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBh
cmcxSlNSID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMT4oKTsKKyAgICAg
ICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGFyZzJKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxT
bG93T3BlcmF0aW9uLCAyPigpOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ax
LCBhcmcxSlNSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZzJKU1Ip
OworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uLCBnbG9iYWxPYmplY3RHUFIsIGFyZzFKU1IsIGFyZzJKU1Ip
OwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6
IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAorICAgIGF1dG8gdW5ib3hEb3VibGUgPSBbdGhpc10oSlNWYWx1ZVJlZ3Mgc3JjLCBGUFJS
ZWcgZHN0KSB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgdGhpcy0+dW5ib3hEb3VibGVX
aXRob3V0QXNzZXJ0aW9ucyhzcmMucGF5bG9hZEdQUigpLCBzcmMucGF5bG9hZEdQUigpLCBkc3Qp
OworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgdGhpcy0+dW5ib3hEb3VibGUoc3Jj
LCBkc3QpOworI2VuZGlmCisgICAgfTsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChv
cDIpKSB7CiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICAgICAgaWYgKHN1
cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7Ci0gICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNo
SWZOb3ROdW1iZXIocmVnVDApOwotICAgICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIs
IHJlZ1QwKTsKLSAgICAgICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKKyAg
ICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihqc1JlZ1QxMCwgcmVnVDQp
OworICAgICAgICAgICAgdW5ib3hEb3VibGUoanNSZWdUMTAsIGZwUmVnVDApOwogCiAgICAgICAg
ICAgICBpbnQzMl90IG9wMmltbSA9IGdldENvbnN0YW50T3BlcmFuZChvcDIpLmFzSW50MzIoKTsK
IAotICAgICAgICAgICAgbW92ZShJbW0zMihvcDJpbW0pLCByZWdUMSk7Ci0gICAgICAgICAgICBj
b252ZXJ0SW50MzJUb0RvdWJsZShyZWdUMSwgZnBSZWdUMSk7CisgICAgICAgICAgICBtb3ZlKElt
bTMyKG9wMmltbSksIHJlZ1QyKTsKKyAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJl
Z1QyLCBmcFJlZ1QxKTsKIAogICAgICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoRG91
YmxlKGNvbmRpdGlvbiwgZnBSZWdUMCwgZnBSZWdUMSksIHRhcmdldCk7CiAKQEAgLTMyMyw5ICsz
MzMsOSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdp
c3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsCiAgICAgICAgICAgICBmYWlsMS5saW5rKHRo
aXMpOwogICAgICAgICB9CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJl
Z1QxKTsKLSAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7Ci0gICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDIsIGpzUmVnVDMyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUNCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUNCwganNSZWdUMTAs
IGpzUmVnVDMyKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVy
dCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CkBAIC0zMzQsOSArMzQ0LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLAog
ICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgICAgIGlmIChzdXBwb3J0c0Zs
b2F0aW5nUG9pbnQoKSkgewotICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVt
YmVyKHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7
Ci0gICAgICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMSwgZnBSZWdUMSk7CisgICAgICAgICAg
ICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIoanNSZWdUMzIsIHJlZ1Q0KTsKKyAgICAg
ICAgICAgIHVuYm94RG91YmxlKGpzUmVnVDMyLCBmcFJlZ1QxKTsKIAogICAgICAgICAgICAgaW50
MzJfdCBvcDFpbW0gPSBnZXRDb25zdGFudE9wZXJhbmQob3AxKS5hc0ludDMyKCk7CiAKQEAgLTM1
MCw5ICszNTksOSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1
YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsCiAgICAgICAgICAgICBmYWlsMS5s
aW5rKHRoaXMpOwogICAgICAgICB9CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDEsIHJlZ1QyKTsKLSAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7Ci0gICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMywgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGpzUmVnVDEwKTsKKyAgICAgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUNCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUNCwganNS
ZWdUMTAsIGpzUmVnVDMyKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMy
KGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC0zNjAsMTMgKzM2OSwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3Rl
ciBvcDIsCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBMSFMgaXMgbm90IEludC4KIAogICAg
IGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewotICAgICAgICBKdW1wIGZhaWwxID0gYnJh
bmNoSWZOb3ROdW1iZXIocmVnVDApOwotICAgICAgICBKdW1wIGZhaWwyID0gYnJhbmNoSWZOb3RO
dW1iZXIocmVnVDEpOwotICAgICAgICBKdW1wIGZhaWwzID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7
Ci0gICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7Ci0gICAgICAgIGFkZDY0
KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7Ci0gICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1Qw
LCBmcFJlZ1QwKTsKLSAgICAgICAgbW92ZTY0VG9Eb3VibGUocmVnVDEsIGZwUmVnVDEpOworICAg
ICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIoanNSZWdUMTAsIHJlZ1Q0KTsKKyAg
ICAgICAgSnVtcCBmYWlsMiA9IGJyYW5jaElmTm90TnVtYmVyKGpzUmVnVDMyLCByZWdUNCk7Cisg
ICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKGpzUmVnVDMyKTsKKyAgICAgICAgdW5i
b3hEb3VibGUoanNSZWdUMTAsIGZwUmVnVDApOworICAgICAgICB1bmJveERvdWJsZShqc1JlZ1Qz
MiwgZnBSZWdUMSk7CiAKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoRG91YmxlKGNv
bmRpdGlvbiwgZnBSZWdUMCwgZnBSZWdUMSksIHRhcmdldCk7CiAKQEAgLTM3OCw4ICszODUsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBv
cDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsCiAgICAgfQogCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OyAvLyBSSFMgaXMgbm90IEludC4KLSAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUNCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1Q0LCBq
c1JlZ1QxMCwganNSZWdUMzIpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihp
bnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBA
IC0zODgsMTEgKzM5NSwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbmMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEluYz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNv
ZGUubV9zcmNEc3Q7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDAp
OwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsKLSAgICBib3hJ
bnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHNyY0RzdCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIGpzUmVn
VDEwKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoanNSZWdUMTApOworICAgIGFkZFNs
b3dDYXNlKGJyYW5jaEFkZDMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGpzUmVnVDEwLnBh
eWxvYWRHUFIoKSkpOworICAgIGJveEludDMyKGpzUmVnVDEwLnBheWxvYWRHUFIoKSwganNSZWdU
MTApOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCBqc1JlZ1QxMCk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtNDAwLDExICs0MDcsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BEZWM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9
IGJ5dGVjb2RlLm1fc3JjRHN0OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3Qs
IHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaFN1YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7Ci0g
ICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihzcmNEc3QpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0
LCBqc1JlZ1QxMCk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGpzUmVnVDEwKTsKKyAg
ICBhZGRTbG93Q2FzZShicmFuY2hTdWIzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBqc1Jl
Z1QxMC5wYXlsb2FkR1BSKCkpKTsKKyAgICBib3hJbnQzMihqc1JlZ1QxMC5wYXlsb2FkR1BSKCks
IGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwganNSZWdUMTAp
OwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQkVHSU46IE9QX01PRCAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTQ0MCw4ICs0NDcsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICBKdW1wIG51bWVyYXRvclBvc2l0aXZlID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFs
LCByZWdUNCwgVHJ1c3RlZEltbTMyKDApKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIo
WmVybywgZWR4KSk7CiAgICAgbnVtZXJhdG9yUG9zaXRpdmUubGluayh0aGlzKTsKLSAgICBib3hJ
bnQzMihlZHgsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihyZXN1bHQpOworICAgIGJveEludDMyKGVkeCwganNSZWdUMTApOworICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCBqc1JlZ1QxMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xv
d19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTQ2OSwyNjQgKzQ3Niw2IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJikKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVO
RDogT1BfTU9EIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0jZWxzZSAvLyBV
U0UoSlNWQUxVRTY0KQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxD
b25kaXRpb24gY29uZGl0aW9uKQotewotICAgIEp1bXBMaXN0IG5vdEludDMyT3AxOwotICAgIEp1
bXBMaXN0IG5vdEludDMyT3AyOwotCi0gICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwotICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotCi0g
ICAgLy8gQ2hhcmFjdGVyIGxlc3MuCi0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEp
KSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSwgcmVnVDApOwot
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDEpKTsKLSAgICAgICAgSnVt
cExpc3QgZmFpbHVyZXM7Ci0gICAgICAgIGVtaXRMb2FkQ2hhcmFjdGVyU3RyaW5nKHJlZ1QwLCBy
ZWdUMCwgZmFpbHVyZXMpOwotICAgICAgICBhZGRTbG93Q2FzZShmYWlsdXJlcyk7Ci0gICAgICAg
IGFkZEp1bXAoYnJhbmNoMzIoY29tbXV0ZShjb25kaXRpb24pLCByZWdUMCwgSW1tMzIoYXNTdHJp
bmcoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkpLT50cnlHZXRWYWx1ZSgpWzBdKSksIHRhcmdldCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihv
cDIpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMSwgcmVnVDAp
OwotICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDEpKTsKLSAgICAgICAg
SnVtcExpc3QgZmFpbHVyZXM7Ci0gICAgICAgIGVtaXRMb2FkQ2hhcmFjdGVyU3RyaW5nKHJlZ1Qw
LCByZWdUMCwgZmFpbHVyZXMpOwotICAgICAgICBhZGRTbG93Q2FzZShmYWlsdXJlcyk7Ci0gICAg
ICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIoYXNTdHJpbmcoZ2V0
Q29uc3RhbnRPcGVyYW5kKG9wMikpLT50cnlHZXRWYWx1ZSgpWzBdKSksIHRhcmdldCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9IAotICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7
Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMywgcmVnVDIpOwotICAg
ICAgICBub3RJbnQzMk9wMi5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyZWdUMykpOwotICAgICAg
ICBhZGRKdW1wKGJyYW5jaDMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmVnVDIsIEltbTMyKGdldENv
bnN0YW50T3BlcmFuZChvcDEpLmFzSW50MzIoKSkpLCB0YXJnZXQpOwotICAgIH0gZWxzZSBpZiAo
aXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMSwgcmVnVDEsIHJlZ1QwKTsKLSAgICAgICAgbm90SW50MzJPcDEuYXBwZW5kKGJyYW5j
aElmTm90SW50MzIocmVnVDEpKTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24s
IHJlZ1QwLCBJbW0zMihnZXRDb25zdGFudE9wZXJhbmQob3AyKS5hc0ludDMyKCkpKSwgdGFyZ2V0
KTsKLSAgICB9IGVsc2UgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVn
VDEsIHJlZ1QwKTsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QzLCBy
ZWdUMik7Ci0gICAgICAgIG5vdEludDMyT3AxLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJlZ1Qx
KSk7Ci0gICAgICAgIG5vdEludDMyT3AyLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJlZ1QzKSk7
Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgcmVnVDIpLCB0YXJn
ZXQpOwotICAgIH0KLQotICAgIGlmICghc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKLSAgICAg
ICAgYWRkU2xvd0Nhc2Uobm90SW50MzJPcDEpOwotICAgICAgICBhZGRTbG93Q2FzZShub3RJbnQz
Mk9wMik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgSnVtcCBlbmQgPSBqdW1wKCk7Ci0K
LSAgICAvLyBEb3VibGUgbGVzcy4KLSAgICBlbWl0QmluYXJ5RG91YmxlT3A8T3A+KGluc3RydWN0
aW9uLCBPcGVyYW5kVHlwZXMoKSwgbm90SW50MzJPcDEsIG5vdEludDMyT3AyLCAhaXNPcGVyYW5k
Q29uc3RhbnRJbnQob3AxKSwgaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSB8fCAhaXNPcGVyYW5k
Q29uc3RhbnRJbnQob3AyKSk7Ci0gICAgZW5kLmxpbmsodGhpcyk7Ci19Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikK
LXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIFZpcnR1
YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
ID0gYnl0ZWNvZGUubV9yaHM7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0KLSAgICBpZiAoaXNPcGVyYW5kQ29u
c3RhbnRJbnQob3AxKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVn
VDMsIHJlZ1QyKTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb21tdXRlKGNvbmRpdGlvbiks
IHJlZ1QyLCBJbW0zMihnZXRDb25zdGFudE9wZXJhbmQob3AxKS5hc0ludDMyKCkpKSwgdGFyZ2V0
KTsKLSAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QxLCByZWdUMCk7Ci0gICAgICAgIGFkZEp1
bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKG9w
MikuYXNJbnQzMigpKSksIHRhcmdldCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QxLCByZWdUMCk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AyLCByZWdUMywgcmVnVDIpOwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNv
bmRpdGlvbiwgcmVnVDAsIHJlZ1QyKSwgdGFyZ2V0KTsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQotewotICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRl
Y29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7Ci0K
LSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDMsIHJlZ1QyKTsKLSAgICAgICAgY29tcGFyZTMyKGNvbW11
dGUoY29uZGl0aW9uKSwgcmVnVDIsIEltbTMyKGdldENvbnN0YW50T3BlcmFuZChvcDEpLmFzSW50
MzIoKSksIHJlZ1QwKTsKLSAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikp
IHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QxLCByZWdUMCk7Ci0g
ICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIHJlZ1QwLCBJbW0zMihnZXRDb25zdGFudE9wZXJh
bmQob3AyKS5hc0ludDMyKCkpLCByZWdUMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QxLCByZWdUMCk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AyLCByZWdUMywgcmVnVDIpOwotICAgICAgICBjb21wYXJlMzIoY29uZGl0
aW9uLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKLSAgICB9Ci0gICAgZW1pdFN0b3JlQm9vbChkc3Qs
IHJlZ1QwKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbG93T3BlcmF0
aW9uPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9u
ICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwg
Ym9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0g
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5
dGVjb2RlLm1fcmhzOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMSwgcmVnVDApOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMywgcmVnVDIpOwotICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDQpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUNCwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7Ci0gICAg
ZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCBy
ZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLXZv
aWQgSklUOjplbWl0QmluYXJ5RG91YmxlT3AoY29uc3QgSW5zdHJ1Y3Rpb24gKmluc3RydWN0aW9u
LCBPcGVyYW5kVHlwZXMgdHlwZXMsIEp1bXBMaXN0JiBub3RJbnQzMk9wMSwgSnVtcExpc3QmIG5v
dEludDMyT3AyLCBib29sIG9wMUlzSW5SZWdpc3RlcnMsIGJvb2wgb3AySXNJblJlZ2lzdGVycykK
LXsKLSAgICBKdW1wTGlzdCBlbmQ7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24t
PmFzPE9wPigpOwotICAgIGludCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKLSAgICBpbnQgdGFy
Z2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdp
c3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKLQotICAgIGlmICghbm90SW50MzJPcDEuZW1wdHko
KSkgewotICAgICAgICAvLyBEb3VibGUgY2FzZSAxOiBPcDEgaXMgbm90IGludDMyOyBPcDIgaXMg
dW5rbm93bi4KLSAgICAgICAgbm90SW50MzJPcDEubGluayh0aGlzKTsKLQotICAgICAgICBBU1NF
UlQob3AxSXNJblJlZ2lzdGVycyk7Ci0KLSAgICAgICAgLy8gVmVyaWZ5IE9wMSBpcyBkb3VibGUu
Ci0gICAgICAgIGlmICghdHlwZXMuZmlyc3QoKS5kZWZpbml0ZWx5SXNOdW1iZXIoKSkKLSAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6Okxvd2VzdFRhZykpKTsKLQotICAgICAgICBpZiAoIW9wMklzSW5SZWdpc3RlcnMpCi0g
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDMsIHJlZ1QyKTsKLQot
ICAgICAgICBKdW1wIGRvdWJsZU9wMiA9IGJyYW5jaDMyKEJlbG93LCByZWdUMywgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpOwotCi0gICAgICAgIGlmICghdHlwZXMuc2Vjb25kKCku
ZGVmaW5pdGVseUlzTnVtYmVyKCkpCi0gICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dEludDMyKHJlZ1QzKSk7Ci0KLSAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmVnVDIsIGZw
UmVnVDApOwotICAgICAgICBKdW1wIGRvVGhlTWF0aCA9IGp1bXAoKTsKLQotICAgICAgICAvLyBM
b2FkIE9wMiBhcyBkb3VibGUgaW50byBkb3VibGUgcmVnaXN0ZXIuCi0gICAgICAgIGRvdWJsZU9w
Mi5saW5rKHRoaXMpOwotICAgICAgICBlbWl0TG9hZERvdWJsZShvcDIsIGZwUmVnVDApOwotCi0g
ICAgICAgIC8vIERvIHRoZSBtYXRoLgotICAgICAgICBkb1RoZU1hdGgubGluayh0aGlzKTsKLSAg
ICAgICAgc3dpdGNoIChvcGNvZGVJRCkgewotICAgICAgICBjYXNlIG9wX2psZXNzOgotICAgICAg
ICAgICAgZW1pdExvYWREb3VibGUob3AxLCBmcFJlZ1QyKTsKLSAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCwgZnBSZWdUMiwgZnBSZWdUMCks
IHRhcmdldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBvcF9qbGVzc2VxOgot
ICAgICAgICAgICAgZW1pdExvYWREb3VibGUob3AxLCBmcFJlZ1QyKTsKLSAgICAgICAgICAgIGFk
ZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIGZwUmVn
VDIsIGZwUmVnVDApLCB0YXJnZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
b3BfamdyZWF0ZXI6Ci0gICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDEsIGZwUmVnVDIpOwot
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW5BbmRPcmRl
cmVkLCBmcFJlZ1QyLCBmcFJlZ1QwKSwgdGFyZ2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIG9wX2pncmVhdGVyZXE6Ci0gICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDEs
IGZwUmVnVDIpOwotICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlR3JlYXRl
clRoYW5PckVxdWFsQW5kT3JkZXJlZCwgZnBSZWdUMiwgZnBSZWdUMCksIHRhcmdldCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBvcF9qbmxlc3M6Ci0gICAgICAgICAgICBlbWl0
TG9hZERvdWJsZShvcDEsIGZwUmVnVDIpOwotICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3Vi
bGUoRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIGZwUmVnVDAsIGZwUmVnVDIpLCB0
YXJnZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ugb3Bfam5sZXNzZXE6Ci0g
ICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDEsIGZwUmVnVDIpOwotICAgICAgICAgICAgYWRk
SnVtcChicmFuY2hEb3VibGUoRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCwgZnBSZWdUMCwgZnBS
ZWdUMiksIHRhcmdldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBvcF9qbmdy
ZWF0ZXI6Ci0gICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDEsIGZwUmVnVDIpOwotICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9y
ZGVyZWQsIGZwUmVnVDAsIGZwUmVnVDIpLCB0YXJnZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6Ci0gICAgICAgICAgICBlbWl0TG9hZERvdWJsZShv
cDEsIGZwUmVnVDIpOwotICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlR3Jl
YXRlclRoYW5PclVub3JkZXJlZCwgZnBSZWdUMCwgZnBSZWdUMiksIHRhcmdldCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFub3RJbnQzMk9w
Mi5lbXB0eSgpKQotICAgICAgICAgICAgZW5kLmFwcGVuZChqdW1wKCkpOwotICAgIH0KLQotICAg
IGlmICghbm90SW50MzJPcDIuZW1wdHkoKSkgewotICAgICAgICAvLyBEb3VibGUgY2FzZSAyOiBP
cDEgaXMgaW50MzI7IE9wMiBpcyBub3QgaW50MzIuCi0gICAgICAgIG5vdEludDMyT3AyLmxpbmso
dGhpcyk7Ci0KLSAgICAgICAgQVNTRVJUKG9wMklzSW5SZWdpc3RlcnMpOwotCi0gICAgICAgIGlm
ICghb3AxSXNJblJlZ2lzdGVycykKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQ
YXlsb2FkKG9wMSwgcmVnVDApOwotCi0gICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJlZ1Qw
LCBmcFJlZ1QwKTsKLQotICAgICAgICAvLyBWZXJpZnkgb3AyIGlzIGRvdWJsZS4KLSAgICAgICAg
aWYgKCF0eXBlcy5zZWNvbmQoKS5kZWZpbml0ZWx5SXNOdW1iZXIoKSkKLSAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlLCByZWdUMywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxv
d2VzdFRhZykpKTsKLQotICAgICAgICAvLyBEbyB0aGUgbWF0aC4KLSAgICAgICAgc3dpdGNoIChv
cGNvZGVJRCkgewotICAgICAgICBjYXNlIG9wX2psZXNzOgotICAgICAgICAgICAgZW1pdExvYWRE
b3VibGUob3AyLCBmcFJlZ1QxKTsKLSAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERv
dWJsZUxlc3NUaGFuQW5kT3JkZXJlZCwgZnBSZWdUMCwgZnBSZWdUMSksIHRhcmdldCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBvcF9qbGVzc2VxOgotICAgICAgICAgICAgZW1p
dExvYWREb3VibGUob3AyLCBmcFJlZ1QxKTsKLSAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91
YmxlKERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIGZwUmVnVDAsIGZwUmVnVDEpLCB0
YXJnZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ugb3BfamdyZWF0ZXI6Ci0g
ICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDIsIGZwUmVnVDEpOwotICAgICAgICAgICAgYWRk
SnVtcChicmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVkLCBmcFJlZ1QwLCBm
cFJlZ1QxKSwgdGFyZ2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIG9wX2pn
cmVhdGVyZXE6Ci0gICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDIsIGZwUmVnVDEpOwotICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5k
T3JkZXJlZCwgZnBSZWdUMCwgZnBSZWdUMSksIHRhcmdldCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBvcF9qbmxlc3M6Ci0gICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDIs
IGZwUmVnVDEpOwotICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlTGVzc1Ro
YW5PckVxdWFsT3JVbm9yZGVyZWQsIGZwUmVnVDEsIGZwUmVnVDApLCB0YXJnZXQpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ugb3Bfam5sZXNzZXE6Ci0gICAgICAgICAgICBlbWl0
TG9hZERvdWJsZShvcDIsIGZwUmVnVDEpOwotICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3Vi
bGUoRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCwgZnBSZWdUMSwgZnBSZWdUMCksIHRhcmdldCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBvcF9qbmdyZWF0ZXI6Ci0gICAgICAg
ICAgICBlbWl0TG9hZERvdWJsZShvcDIsIGZwUmVnVDEpOwotICAgICAgICAgICAgYWRkSnVtcChi
cmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIGZwUmVnVDEs
IGZwUmVnVDApLCB0YXJnZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ugb3Bf
am5ncmVhdGVyZXE6Ci0gICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDIsIGZwUmVnVDEpOwot
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW5PclVub3Jk
ZXJlZCwgZnBSZWdUMSwgZnBSZWdUMCksIHRhcmdldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBlbmQubGluayh0aGlzKTsKLX0KLQotI2VuZGlmIC8v
IFVTRShKU1ZBTFVFNjQpCi0KIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+dW5hcnlBcml0aFByb2ZpbGUoY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKS5tX3Byb2ZpbGVJbmRleCk7CkBAIC03NTMsMTcg
KzUwMiwxMCBAQCB2b2lkIEpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsaQogICAgIFZpcnR1YWxSZWdpc3RlciBv
cDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUu
bV9yaHM7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7Ci0jZW5kaWYKKyAg
ICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBqc1JlZ1QxMDsKKyAgICBjb25zdGV4
cHIgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0ganNSZWdUMzI7CisgICAgY29uc3RleHByIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2hHUFIgPSByZWdUNDsKIAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kOwogICAgIFNu
aXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZDsKQEAgLTc5OSwyMyArNTQxLDE3IEBAIHZvaWQgSklU
OjplbWl0X29wX2JpdG5vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSNlbHNlCi0g
ICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotI2Vu
ZGlmCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGpzUmVnVDEwKTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0KLSAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdEludDMyKGxlZnRSZWdzKSk7Ci0gICAgbm90MzIobGVmdFJlZ3MucGF5bG9hZEdQ
UigpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEludDMyKGpzUmVnVDEwKSk7CisgICAg
bm90MzIoanNSZWdUMTAucGF5bG9hZEdQUigpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGJv
eEludDMyKGxlZnRSZWdzLnBheWxvYWRHUFIoKSwgbGVmdFJlZ3MpOworICAgIGJveEludDMyKGpz
UmVnVDEwLnBheWxvYWRHUFIoKSwganNSZWdUMTApOwogI2VuZGlmCiAKICAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShieXRlY29kZSk7CiAKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHJlc3VsdCwgbGVmdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0LCBqc1JlZ1QxMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2JpdGFuZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtODYxLDE3ICs1OTcsMTAgQEAg
dm9pZCBKSVQ6OmVtaXRSaWdodFNoaWZ0RmFzdFBhdGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgSklUUmlnaHQKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNv
ZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7
Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gcmVnVDI7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVn
czsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OwotI2VuZGlmCisgICAgY29uc3RleHBy
IEpTVmFsdWVSZWdzIGxlZnRSZWdzID0ganNSZWdUMTA7CisgICAgY29uc3RleHByIEpTVmFsdWVS
ZWdzIHJpZ2h0UmVncyA9IGpzUmVnVDMyOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVn
VDQ7CiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZDsKICAgICBTbmlwcGV0T3BlcmFu
ZCByaWdodE9wZXJhbmQ7CkBAIC05MzIsMTcgKzY2MSwxMiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJ
Q0Zhc3QoSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlv
biogYwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBwcmVmZXJy
ZWRBcmd1bWVudEdQUjxQcm9maWxlZEZ1bmN0aW9uLCAwPigpOworICAgIGNvbnN0ZXhwciBKU1Zh
bHVlUmVncyBzcmNSZWdzID0gcHJlZmVycmVkQXJndW1lbnRKU1I8UHJvZmlsZWRGdW5jdGlvbiwg
MT4oKTsKICAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJl
Z2lzdGVyIGFzIHNyYyBhbmQgZHN0LgotICAgIC8vIFNpbmNlIHJlZ1QxPT1hcmd1bWVudEdQUjEs
IHVzaW5nIHJlZ1QxIGF2b2lkIHNodWZmbGluZyByZWdpc3RlciB0byBjYWxsIHRoZSBzbG93IHBh
dGguCi0gICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gcmVnVDI7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7Ci0j
ZW5kaWYKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHNyY1JlZ3M7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gZ2xvYmFsT2JqZWN0R1BSOworICAgIHN0
YXRpY19hc3NlcnQobm9PdmVybGFwKHNyY1JlZ3MsIHNjcmF0Y2hHUFIpKTsKIAogI2lmIEVOQUJM
RShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gaW5saW5lU3RhcnQgPSBsYWJlbCgpOwpAQCAtOTU3
LDExICs2ODEsMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPEdl
bmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGMKICAgICBib29sIGdlbmVyYXRl
ZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBtYXRoSUNHZW5lcmF0
aW9uU3RhdGUpOwogICAgIGlmICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgewogICAgICAgICBVbmFy
eUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKLSAg
ICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICAgICAgbG9hZEdsb2JhbE9i
amVjdChnbG9iYWxPYmplY3RHUFIpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3Vs
ZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHBy
b2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3MsIGFyaXRoUHJv
ZmlsZSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0
aW9uLCByZXN1bHRSZWdzLCBnbG9iYWxPYmplY3RHUFIsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblBy
b2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3MpOworICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0
UmVncywgZ2xvYmFsT2JqZWN0R1BSLCBzcmNSZWdzKTsKICAgICB9IGVsc2UKICAgICAgICAgYWRk
U2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOwogCkBAIC05ODQs
MTcgKzcwOCwxMyBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDPEdl
bmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29k
ZS5tX3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMCk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMzsKLSNlbHNlCi0gICAgSlNWYWx1
ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVS
ZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7
Ci0jZW5kaWYKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJl
ZEFyZ3VtZW50R1BSPFByb2ZpbGVkRnVuY3Rpb24sIDA+KCk7CisgICAgY29uc3RleHByIEpTVmFs
dWVSZWdzIGxlZnRSZWdzID0gcHJlZmVycmVkQXJndW1lbnRKU1I8UHJvZmlsZWRGdW5jdGlvbiwg
MT4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gcHJlZmVycmVkQXJn
dW1lbnRKU1I8UHJvZmlsZWRGdW5jdGlvbiwgMj4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IHJldHVyblZhbHVlSlNSOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHJlZ1Q1OworICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKGxlZnRSZWdzLCBy
aWdodFJlZ3MsIHNjcmF0Y2hHUFIpKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG5vT3ZlcmxhcChyZXN1
bHRSZWdzLCBzY3JhdGNoR1BSKSk7CiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChi
eXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdo
dE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwpAQCAtMTAyOCwxMSAr
NzQ4LDExIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUM8R2VuZXJh
dG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbioKICAgICAgICAgZWxzZSBpZiAocmlnaHRP
cGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ay
LCByaWdodFJlZ3MpOwogICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7Ci0gICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRj
aEdQUik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKICAgICAg
ICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBz
Y3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAg
ICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywg
Z2xvYmFsT2JqZWN0R1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxl
ZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsK
KyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24s
IHJlc3VsdFJlZ3MsIGdsb2JhbE9iamVjdEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CiAgICAg
fSBlbHNlCiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0
aEp1bXBzKTsKIApAQCAtMTA1NiwyNyArNzc2LDIzIEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xv
dyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBj
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogCi0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0jZWxzZQotICAg
IEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotI2VuZGlm
CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmpldEdQUiA9IHByZWZlcnJlZEFyZ3VtZW50
R1BSPFByb2ZpbGVkRnVuY3Rpb24sIDA+KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHNy
Y1JlZ3MgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxQcm9maWxlZEZ1bmN0aW9uLCAxPigpOworICAg
IGNvbnN0ZXhwciBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmV0dXJuVmFsdWVKU1I7CiAKICNp
ZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBsYWJlbCgp
OwogI2VuZGlmCiAKICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElD
LT5hcml0aFByb2ZpbGUoKTsKLSAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KGdsb2JhbE9iamV0R1BSKTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNo
b3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRl
LnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0
PEpfSklUT3BlcmF0aW9uX0dKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJl
Z3MsIHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAg
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRj
aEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgZ2xvYmFsT2JqZXRHUFIsIHNyY1JlZ3MsIFRydXN0ZWRJ
bW1QdHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1
bmN0aW9uLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAg
ICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBnbG9iYWxPYmpldEdQUiwg
c3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0aElDR2VuZXJh
dGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJw
cmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJl
Z3MsIHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRo
SUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQo
cmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwg
cmVzdWx0UmVncywgZ2xvYmFsT2JqZXRHUFIsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElD
KSk7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0g
bGFiZWwoKTsKQEAgLTExMDUsMTYgKzgyMSwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3co
SklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdp
c3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNW
YWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3Mg
cmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mg
PSBsZWZ0UmVnczsKLSNlbmRpZgotICAgIAorICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2Jq
ZXRHUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxQcm9maWxlZEZ1bmN0aW9uLCAwPigpOworICAg
IGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFBy
b2ZpbGVkRnVuY3Rpb24sIDE+KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHJpZ2h0UmVn
cyA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFByb2ZpbGVkRnVuY3Rpb24sIDI+KCk7CisgICAgY29u
c3RleHByIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXR1cm5WYWx1ZUpTUjsKKwogICAgIFNu
aXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkp
OwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBl
cy5zZWNvbmQoKSk7CiAKQEAgLTExMzUsMTQgKzg0NiwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJ
Q1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rp
b24qCiAjZW5kaWYKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0
aElDLT5hcml0aFByb2ZpbGUoKTsKLSAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamV0R1BSKTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYm
IHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0
YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8
Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJl
Z3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwor
ICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHByb2Zp
bGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgZ2xvYmFsT2JqZXRHUFIsIGxlZnRSZWdz
LCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3Ms
IHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0
aW9uLCByZXN1bHRSZWdzLCBnbG9iYWxPYmpldEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJp
dGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNs
b3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9w
ZXJhdGlvbl9HSkpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0
UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0
d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0
UmVncywgZ2xvYmFsT2JqZXRHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIo
bWF0aElDKSk7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRo
RW5kID0gbGFiZWwoKTsKQEAgLTExNjcsMTggKzg3OCwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9k
aXYoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5
dGVjb2RlLm1fcmhzOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdz
OwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdz
IGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyBy
aWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OwotI2Vu
ZGlmCi0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgIGNvbnN0ZXhwciBKU1Zh
bHVlUmVncyBsZWZ0UmVncyA9IGpzUmVnVDEwOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBy
aWdodFJlZ3MgPSBqc1JlZ1QzMjsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IGxlZnRSZWdzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0Owor
ICAgIGNvbnN0ZXhwciBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CiAKICAgICBCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG51bGxwdHI7CiAgICAgaWYgKHNob3VsZEVtaXRQ
cm9maWxpbmcoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJp
dGhtZXRpYzMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRp
YzMyXzY0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRkYmNiMzA2OGJlZDli
NzU4NzQ1ODEzZGM1NTQzZWVlOThkNWEzYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMz
Ml82NC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKgotKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgotKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0qIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0q
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShKSVQpCi0jaWYg
VVNFKEpTVkFMVUUzMl82NCkKLSNpbmNsdWRlICJKSVQuaCIKLQotI2luY2x1ZGUgIkNvZGVCbG9j
ay5oIgotI2luY2x1ZGUgIkpJVElubGluZXMuaCIKLSNpbmNsdWRlICJKU0FycmF5LmgiCi0jaW5j
bHVkZSAiSlNGdW5jdGlvbi5oIgotI2luY2x1ZGUgIkludGVycHJldGVyLmgiCi0jaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlJlc3VsdFR5cGUuaCIKLSNpbmNsdWRlICJTbG93UGF0
aENhbGwuaCIKLQotCi1uYW1lc3BhY2UgSlNDIHsKLQotdm9pZCBKSVQ6OmVtaXRfb3BfdW5zaWdu
ZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpOwotICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AxLCByZWdUMSwgcmVnVDApOwotICAgIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
SW50MzIocmVnVDEpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihMZXNzVGhhbiwgcmVnVDAs
IFRydXN0ZWRJbW0zMigwKSkpOwotICAgIGVtaXRTdG9yZUludDMyKHJlc3VsdCwgcmVnVDAsIHJl
c3VsdCA9PSBvcDEpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9pbmMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEluYz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0
ZWNvZGUubV9zcmNEc3Q7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVn
VDEsIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SW50MzIocmVnVDEpKTsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBy
ZWdUMCkpOwotICAgIGVtaXRTdG9yZUludDMyKHNyY0RzdCwgcmVnVDAsIHRydWUpOwotfQotCi12
b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYz4o
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7Ci0KLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDEsIHJlZ1QwKTsKLQotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90SW50MzIocmVnVDEpKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hTdWIzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOwotICAgIGVtaXRTdG9y
ZUludDMyKHNyY0RzdCwgcmVnVDAsIHRydWUpOwotfQotCi0vLyBNb2QgKCUpCi0KLS8qIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCRUdJTjogT1BfTU9EIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSAqLwotCi12b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhD
YWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX21vZCk7Ci0gICAgc2xvd1Bh
dGhDYWxsLmNhbGwoKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKQotewotICAgIC8vIFdl
IHdvdWxkIGhhdmUgcmVhbGx5IHVzZWZ1bCBhc3NlcnRpb25zIGhlcmUgaWYgaXQgd2Fzbid0IGZv
ciB0aGUgY29tcGlsZXIncwotICAgIC8vIGluc2lzdGVuY2Ugb24gYXR0cmlidXRlIG5vcmV0dXJu
LgotICAgIC8vIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLS8qIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFTkQ6IE9QX01PRCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gKi8KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBVU0UoSlNWQUxV
RTMyXzY0KQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKaW5kZXggZjMyMGNiYmMyOGJiODc0
MWM5ZWQ2OWY4Y2UxYTFmNTE4YTk5NGM5MS4uM2UyNmRiOTU3ZTNlZDQ2ZGY4NWNlZWI3ZTNkNTJi
YWI0ZDRjNTQxMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxp
bmVDYWNoZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3IuaApAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKEpJVCkK
IAorI2luY2x1ZGUgIkFzc2VtYmx5SGVscGVycy5oIgogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIK
ICNpbmNsdWRlICJKSVRPcGVyYXRpb25WYWxpZGF0aW9uLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgpAQCAtMTEzLDI1ICsxMTQsMjUgQEAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaDMgPSBHUFJJbmZvOjpyZWdUNTsKIAogbmFtZXNwYWNlIEJhc2VsaW5lSW5zdGFuY2VvZlJl
Z2lzdGVycyB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLWNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0IHsg
R1BSSW5mbzo6cmVnVDAgfTsKLWNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgeyBHUFJJbmZvOjphcmd1
bWVudEdQUjIgfTsKLWNvbnN0ZXhwciBHUFJSZWcgcHJvdG8geyBHUFJJbmZvOjphcmd1bWVudEdQ
UjMgfTsKLWNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8geyBHUFJJbmZvOjphcmd1bWVudEdQUjEg
fTsKLWNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgeyBHUFJJbmZvOjpub25BcmdHUFIwIH07Ci1j
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyIHsgR1BSSW5mbzo6bm9uQXJnR1BSMSB9OworY29uc3Rl
eHByIEpTVmFsdWVSZWdzIHJlc3VsdEpTUiB7IEdQUkluZm86OnJlZ1QwIH07Citjb25zdGV4cHIg
SlNWYWx1ZVJlZ3MgdmFsdWVKU1IgeyBHUFJJbmZvOjphcmd1bWVudEdQUjIgfTsKK2NvbnN0ZXhw
ciBKU1ZhbHVlUmVncyBwcm90b0pTUiB7IEdQUkluZm86OmFyZ3VtZW50R1BSMyB9OworY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiB7IEdQUkluZm86OmFyZ3VtZW50R1BSMSB9OworY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoMUdQUiB7IEdQUkluZm86Om5vbkFyZ0dQUjAgfTsKK2NvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaDJHUFIgeyBHUFJJbmZvOjpub25BcmdHUFIxIH07CiAjZWxpZiBVU0Uo
SlNWQUxVRTMyXzY0KQotY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgeyBHUFJJbmZvOjpyZWdU
MCB9OwotY29uc3RleHByIEpTVmFsdWVSZWdzIHZhbHVlSlNSICB7IEdQUkluZm86OmFyZ3VtZW50
R1BSMywgR1BSSW5mbzo6YXJndW1lbnRHUFIyIH07Ci1jb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcHJv
dG9KU1IgIHsgR1BSSW5mbzo6cmVnVDUsIEdQUkluZm86OnJlZ1Q0IH07Citjb25zdGV4cHIgSlNW
YWx1ZVJlZ3MgcmVzdWx0SlNSIHsgSlNSSW5mbzo6anNSZWdUMTAgfTsKKyNpZiBDUFUoTUlQUykK
K2NvbnN0ZXhwciBKU1ZhbHVlUmVncyB2YWx1ZUpTUiB7IEdQUkluZm86OmFyZ3VtZW50R1BSMywg
R1BSSW5mbzo6YXJndW1lbnRHUFIyIH07CisjZWxzZQorY29uc3RleHByIEpTVmFsdWVSZWdzIHZh
bHVlSlNSIHsgSlNSSW5mbzo6anNSZWdUMzIgfTsKKyNlbmRpZgorY29uc3RleHByIEpTVmFsdWVS
ZWdzIHByb3RvSlNSIHsgSlNSSW5mbzo6anNSZWdUNTQgfTsKIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgeyBHUFJJbmZvOjpyZWdUMSB9OwogY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMUdQ
UiB7IEdQUkluZm86OnJlZ1Q2IH07CiBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyR1BSIHsgR1BS
SW5mbzo6cmVnVDcgfTsKLXN0YXRpY19hc3NlcnQoIXZhbHVlSlNSLnVzZXMocmVzdWx0R1BSKSk7
Ci1zdGF0aWNfYXNzZXJ0KCF2YWx1ZUpTUi5vdmVybGFwcyhwcm90b0pTUikpOwotc3RhdGljX2Fz
c2VydCghdmFsdWVKU1IudXNlcyhzdHViSW5mb0dQUikpOwotc3RhdGljX2Fzc2VydCghdmFsdWVK
U1IudXNlcyhzY3JhdGNoMUdQUikpOwotc3RhdGljX2Fzc2VydCghdmFsdWVKU1IudXNlcyhzY3Jh
dGNoMkdQUikpOwogI2VuZGlmCitzdGF0aWNfYXNzZXJ0KEFzc2VtYmx5SGVscGVyczo6bm9PdmVy
bGFwKHZhbHVlSlNSLCBwcm90b0pTUiwgc3R1YkluZm9HUFIsIHNjcmF0Y2gxR1BSLCBzY3JhdGNo
MkdQUikpOwogfQogCiBuYW1lc3BhY2UgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKaW5kZXggZGI4MTkwN2Y5YjA0NDBmNjdiZmNk
ODYyZGM4YTRlMjhjZjliODU0YS4uMGU1MmQ4ZjYyZjhkN2E1NzIxNTg0MTVjNjJmOTg2ZjgzZWNk
MmQwNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKQEAgLTMzLDYgKzMz
LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQogQUxXQVlTX0lO
TElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHNy
YykKIHsKICAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCkBAIC00MSw2ICs0Miw3IEBAIEFMV0FZ
U19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3Rl
ciBzcmMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVy
YW5kKHNyYykuaXNEb3VibGUoKTsKIH0KKyNlbmRpZgogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklU
Ojppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewpAQCAtNjksMTcg
KzcxLDYgQEAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5kKFZp
cnR1YWxSZWdpc3RlciBzcmMpCiAgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENv
bnN0YW50KHNyYyk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRUb0Nh
bGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKLXsK
LSAgICBBU1NFUlQoZW50cnkuaXNIZWFkZXIoKSk7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAg
ICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0ZvcihlbnRyeSkp
OwotICAgIHN0b3JlMzIoZnJvbSwgcGF5bG9hZEZvcihlbnRyeSkpOwotI2Vsc2UKLSAgICBzdG9y
ZTY0KGZyb20sIGFkZHJlc3NGb3IoZW50cnkpKTsKLSNlbmRpZgotfQotCiBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0TG9hZENoYXJhY3RlclN0cmluZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBkc3QsIEp1bXBMaXN0JiBmYWlsdXJlcykKIHsKICAgICBmYWlsdXJlcy5hcHBlbmQoYnJh
bmNoSWZOb3RTdHJpbmcoc3JjKSk7CkBAIC0xOTAsMTIgKzE4MSw2IEBAIEFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0
aFByb2ZpbGUoCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlSlNS
KTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwo
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJl
ZykKLXsKLSAgICBpZiAoIWlzS25vd25DZWxsKHJlZykpCi0gICAgICAgIGxpbmtTbG93Q2FzZShp
dGVyKTsKLX0KLQogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua0FsbFNsb3dDYXNlc0ZvckJ5
dGVjb2RlSW5kZXgoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkK
IHsKICAgICB3aGlsZSAoaXRlciAhPSBzbG93Q2FzZXMuZW5kKCkgJiYgaXRlci0+dG8gPT0gYnl0
ZWNvZGVJbmRleCkKQEAgLTMwNywxNCArMjkyLDYgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6
aXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3RlciBzcmMpCiAgICAgcmV0dXJuIGdl
dENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRP
cGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KLWlubGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShP
cDo6TWV0YWRhdGE6Om1fcHJvZmlsZSksIFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPiBKSVQ6
OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKQotewot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIGpzUmVnVDEwKTsKLX0KLQotaW5s
aW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZSguLi4p
IHsgfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KIGlubGluZSB2b2lkIEpJVDo6ZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEpTVmFsdWVSZWdz
IHZhbHVlKQogewpAQCAtMzI1LDE0ICszMDIsNiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB2YQog
ICAgIHN0b3JlVmFsdWUodmFsdWUsIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgb2Zmc2V0KSk7CiB9
CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+Ci1pbmxp
bmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVj
b2RlLCBHUFJSZWcgcmVzdWx0UmVnKQotewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOwotfQotI2VuZGlmCi0KIHRlbXBsYXRlIDx0
eXBlbmFtZSBCeXRlY29kZT4KIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgcHRyZGlmZl90IG9mZnNldE9mQXJy
YXlQcm9maWxlLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKIHsK
QEAgLTM1MywxMCArMzIyLDEyIEBAIEFMV0FZU19JTkxJTkUgaW50MzJfdCBKSVQ6OmdldE9wZXJh
bmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogICAgIHJldHVybiBnZXRDb25zdGFu
dE9wZXJhbmQoc3JjKS5hc0ludDMyKCk7CiB9CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQogQUxXQVlT
X0lOTElORSBkb3VibGUgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lz
dGVyIHNyYykKIHsKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNEb3VibGUo
KTsKIH0KKyNlbmRpZgogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVy
KFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CkBAIC0zODEsMTQgKzM1MiwxMSBAQCBBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3Qs
IEpTVmFsdWVSZWdzCiAgICAgc3RvcmVWYWx1ZShmcm9tLCBhZGRyZXNzRm9yKGRzdCkpOwogfQog
Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lz
dGVySUQgcGF5bG9hZCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgSlNWYWx1
ZVJlZ3MgeyB0YWcsIHBheWxvYWQgfSk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKFZpcnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVy
SUQgZHN0KQogeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmMsIEpTVmFsdWVSZWdzIHsgZHN0IH0pOworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKICAg
ICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUg
Y2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29k
ZUluZGV4IGlzIHNldC4KICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBpZiAo
bV9wcm9maWxlZENvZGVCbG9jay0+aXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayhz
cmMpKQpAQCAtMzk4LDggKzM2NiwxMCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0
VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpcwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIGxvYWQzMihwYXlsb2FkRm9yKHNyYyksIGRzdCk7CisjZW5k
aWYKIH0KIAorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKFZpcnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQg
ZHN0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91
bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhh
dCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgpAQCAtNDE4LDEyNSArMzg4LDEwIEBAIEFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNy
YywgUmVnaXN0ZXJJRCBkCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIEpTVmFsdWVS
ZWdzIHsgZHN0IH0pOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVh
bFJlZ2lzdGVyUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIGRzdCkKLXsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgSlNWYWx1ZVJlZ3MgeyBkc3QgfSk7Ci19
Ci0KIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQogewogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyB7IGZyb20gfSk7CiB9Ci0jZW5kaWYKLQotCi0jaWYgVVNF
KEpTVkFMVUUzMl82NCkKLQotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFs
UmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCi17Ci0gICAgaWYgKHJlZy5pc0NvbnN0
YW50KCkpIHsKLSAgICAgICAgQVNTRVJUKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlzQ29uc3RhbnRP
d25lZEJ5VW5saW5rZWRDb2RlQmxvY2socmVnKSk7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiYgaW5Db25zdGFudFBvb2wgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFJlZ2lz
dGVyKHJlZyk7Ci0gICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmaW5Db25zdGFudFBv
b2wpLCB2YWx1ZSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0Zvcihy
ZWcpLCB2YWx1ZSk7Ci19Ci0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoVmlydHVhbFJl
Z2lzdGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJ
RCBiYXNlKQotewotICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihyZWcsIGJhc2UpKTsK
LSAgICBzdG9yZTMyKHRhZywgdGFnRm9yKHJlZywgYmFzZSkpOwotfQotCi1pbmxpbmUgdm9pZCBK
SVQ6OmVtaXRTdG9yZUludDMyKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgcGF5bG9h
ZCwgYm9vbCBpbmRleElzSW50MzIpCi17Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9y
KHJlZykpOwotICAgIGlmICghaW5kZXhJc0ludDMyKQotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0ZvcihyZWcpKTsKLX0KLQotaW5saW5lIHZvaWQg
SklUOjplbWl0U3RvcmVDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgcGF5bG9h
ZCwgYm9vbCBpbmRleElzQ2VsbCkKLXsKLSAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3Io
cmVnKSk7Ci0gICAgaWYgKCFpbmRleElzQ2VsbCkKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhZ0ZvcihyZWcpKTsKLX0KLQotaW5saW5lIHZvaWQgSklU
OjplbWl0U3RvcmVCb29sKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwg
Ym9vbCBpbmRleElzQm9vbCkKLXsKLSAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IocmVn
KSk7Ci0gICAgaWYgKCFpbmRleElzQm9vbCkKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6Qm9vbGVhblRhZyksIHRhZ0ZvcihyZWcpKTsKLX0KLQotaW5saW5lIHZvaWQgSklU
OjplbWl0U3RvcmUoVmlydHVhbFJlZ2lzdGVyIHJlZywgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwg
UmVnaXN0ZXJJRCBiYXNlKQotewotICAgIHN0b3JlMzIoSW1tMzIoY29uc3RhbnQucGF5bG9hZCgp
KSwgcGF5bG9hZEZvcihyZWcsIGJhc2UpKTsKLSAgICBzdG9yZTMyKEltbTMyKGNvbnN0YW50LnRh
ZygpKSwgdGFnRm9yKHJlZywgYmFzZSkpOwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQotewotICAgIGlmICghaXNL
bm93bkNlbGwocmVnKSkgewotICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKLSAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGVtaXRKdW1wSWZOb3RKU0NlbGwocmVnKSk7Ci0gICAgfQotfQotCi1pbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBS
ZWdpc3RlcklEIHRhZykKLXsKLSAgICBpZiAoIWlzS25vd25DZWxsKHJlZykpIHsKLSAgICAgICAg
aWYgKHJlZy5pc0NvbnN0YW50KCkpCi0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwodGFn
KSk7Ci0gICAgfQotfQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpnZXRPcGVyYW5kQ29uc3Rh
bnRJbnQoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgVmlydHVhbFJl
Z2lzdGVyJiBvcCwgaW50MzJfdCYgY29uc3RhbnQpCi17Ci0gICAgaWYgKGlzT3BlcmFuZENvbnN0
YW50SW50KG9wMSkpIHsKLSAgICAgICAgY29uc3RhbnQgPSBnZXRDb25zdGFudE9wZXJhbmQob3Ax
KS5hc0ludDMyKCk7Ci0gICAgICAgIG9wID0gb3AyOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewotICAgICAgICBjb25z
dGFudCA9IGdldENvbnN0YW50T3BlcmFuZChvcDIpLmFzSW50MzIoKTsKLSAgICAgICAgb3AgPSBv
cDE7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLSNlbHNlIC8vIFVTRShKU1ZBTFVFMzJfNjQpCi0KLUFMV0FZU19JTkxJTkUgSklUOjpK
dW1wIEpJVDo6ZW1pdEp1bXBJZkJvdGhKU0NlbGxzKFJlZ2lzdGVySUQgcmVnMSwgUmVnaXN0ZXJJ
RCByZWcyLCBSZWdpc3RlcklEIHNjcmF0Y2gpCi17Ci0gICAgbW92ZShyZWcxLCBzY3JhdGNoKTsK
LSAgICBvcjY0KHJlZzIsIHNjcmF0Y2gpOwotICAgIHJldHVybiBicmFuY2hJZkNlbGwoc2NyYXRj
aCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZkpTQ2Vs
bChSZWdpc3RlcklEIHJlZykKLXsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnKSk7
Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChSZWdpc3RlcklEIHJlZywgVmlydHVhbFJlZ2lzdGVyIHZSZWcpCi17Ci0gICAgaWYgKCFpc0tu
b3duQ2VsbCh2UmVnKSkKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZyk7
Ci19Ci0KLUFMV0FZU19JTkxJTkUgSklUOjpQYXRjaGFibGVKdW1wIEpJVDo6ZW1pdFBhdGNoYWJs
ZUp1bXBJZk5vdEludChSZWdpc3RlcklEIHJlZykKLXsKLSAgICByZXR1cm4gcGF0Y2hhYmxlQnJh
bmNoNjQoQmVsb3csIHJlZywgbnVtYmVyVGFnUmVnaXN0ZXIpOwotfQogCiBBTFdBWVNfSU5MSU5F
IEpJVDo6SnVtcCBKSVQ6OmVtaXRKdW1wSWZOb3RJbnQoUmVnaXN0ZXJJRCByZWcxLCBSZWdpc3Rl
cklEIHJlZzIsIFJlZ2lzdGVySUQgc2NyYXRjaCkKIHsKQEAgLTU0NSwyNiArNDAwLDIwIEBAIEFM
V0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZk5vdEludChSZWdpc3RlcklEIHJl
ZzEsIFJlZ2lzdGVySUQgcmVnMiwKICAgICByZXR1cm4gYnJhbmNoSWZOb3RJbnQzMihzY3JhdGNo
KTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50
KFJlZ2lzdGVySUQgcmVnKQotewotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SW50MzIocmVn
KSk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChSZWdpc3RlcklEIHJlZzEsIFJlZ2lzdGVySUQgcmVnMiwgUmVnaXN0ZXJJRCBzY3JhdGNoKQog
ewogICAgIGFkZFNsb3dDYXNlKGVtaXRKdW1wSWZOb3RJbnQocmVnMSwgcmVnMiwgc2NyYXRjaCkp
OwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3ROdW1i
ZXIoUmVnaXN0ZXJJRCByZWcpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbnQoUmVnaXN0ZXJJRCBncHIpCiB7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3ROdW1iZXIocmVnKSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KEpTVmFsdWVSZWdz
IHsgZ3ByIH0pOwogfQorI2VuZGlmCiAKLSNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQotCi1B
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0
ZXJJRCByZWcpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQoSlNWYWx1ZVJlZ3MganNyKQogewotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChy
ZWcpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEludDMyKGpzcikpOwogfQogCiBBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoSlNWYWx1ZVJl
Z3MgcmVnKQpAQCAtNjYyLDEzICs1MTEsMTkgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9h
ZENvZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciBjb25zdGFudCwgSlNWYWx1ZVIKICAg
ICBsb2FkVmFsdWUoQWRkcmVzcyhkc3QucGF5bG9hZEdQUigpLCBjb25zdGFudC50b0NvbnN0YW50
SW5kZXgoKSAqIHNpemVvZihSZWdpc3RlcikpLCBkc3QpOwogfQogCi0jaWYgVVNFKEpTVkFMVUUz
Ml82NCkKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudFBheWxv
YWQoVmlydHVhbFJlZ2lzdGVyIGNvbnN0YW50LCBSZWdpc3RlcklEIGRzdCkKIHsKICAgICBSRUxF
QVNFX0FTU0VSVChjb25zdGFudC5pc0NvbnN0YW50KCkpOwogICAgIGxvYWRBZGRyT2ZDb2RlQmxv
Y2tDb25zdGFudEJ1ZmZlcigqdGhpcywgZHN0KTsKLSAgICBsb2FkMzIoQWRkcmVzcyhkc3QsIGNv
bnN0YW50LnRvQ29uc3RhbnRJbmRleCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBheWxvYWRPZmZz
ZXQpLCBkc3QpOworICAgIEFkZHJlc3MgYWRkcmVzcyhkc3QsIGNvbnN0YW50LnRvQ29uc3RhbnRJ
bmRleCgpICogc2l6ZW9mKFJlZ2lzdGVyKSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBsb2Fk
NjQoYWRkcmVzcywgZHN0KTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgbG9hZDMyKGFk
ZHJlc3Mud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KSwgZHN0KTsKKyNlbmRpZgogfQorCisjaWYg
VVNFKEpTVkFMVUUzMl82NCkKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb2RlQmxvY2tD
b25zdGFudFRhZyhWaXJ0dWFsUmVnaXN0ZXIgY29uc3RhbnQsIFJlZ2lzdGVySUQgZHN0KQogewog
ICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50LmlzQ29uc3RhbnQoKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAppbmRleCA0YzJmMzJkYWRiNWUzYWJkZGFiYjI5Y2Nk
NmJiNDZmZjA5ZDlkZDMyLi40Yzg2MzE0OWFkYjljOTMwMDM0OTg4NzE3MTExYzAyNDk3MzVmM2Zm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKQEAgLTEyMCw3ICsx
MjAsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXR1cm5WYWx1ZUpTUik7CiB9CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CkBAIC0xMjksMjYgKzEyOCwyMyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9j
b25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVj
b2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFz
SW5zdGFuY2VWYWx1ZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2Fk
KGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QyKTsKIAogICAgIC8vIFdlIGRvbid0IGp1bXAgaWYgd2Ug
a25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4KKyAgICBtb3ZlKFRydXN0ZWRJ
bW0zMigxKSwgcmVnVDApOwogICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOwotICAgIEp1bXAg
Y3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIEFkZHJl
c3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV9mdW5jdGlvblByb3Rv
SGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbikpKTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoY29uc3RydWN0b3IsIHJlZ1QwKTsKLQorICAgIEp1bXAgY3VzdG9tSGFzSW5zdGFuY2VWYWx1
ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZT
RVRPRihKU0dsb2JhbE9iamVjdCwgbV9mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5j
dGlvbikpKTsKKyAgICAvLyBXZSBrbm93IHRoYXQgY29uc3RydWN0b3IgaXMgYW4gb2JqZWN0IGZy
b20gdGhlIHdheSBieXRlY29kZSBpcyBlbWl0dGVkIGZvciBpbnN0YW5jZW9mIGV4cHJlc3Npb25z
LgorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGNvbnN0cnVjdG9yLCByZWdUMik7
CiAgICAgLy8gQ2hlY2sgdGhhdCBjb25zdHJ1Y3RvciAnSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0
YW5jZScgaS5lLiB0aGUgb2JqZWN0IGlzIG5vdCBhIEMtQVBJIHVzZXIgbm9yIGEgYm91bmQgZnVu
Y3Rpb24uCi0gICAgdGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSks
IHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwot
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QyLCBK
U0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVm
YXVsdEhhc0luc3RhbmNlKSwgcmVnVDApOworICAgIGN1c3RvbUhhc0luc3RhbmNlVmFsdWUubGlu
ayh0aGlzKTsKIAotICAgIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUubGluayh0aGlzKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7Ci0KLSAgICBkb25l
LmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGJveEJv
b2xlYW4ocmVnVDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
anNSZWdUMTApOwogfQogCisKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7CkBAIC0xNTYsMjYgKzE1MiwyOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsKIAot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3Rl
cnM6OnZhbHVlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvdG9HUFIgPSBCYXNlbGluZUluc3Rh
bmNlb2ZSZWdpc3RlcnM6OnByb3RvOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0g
QmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpyZXN1bHQ7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm87Cisg
ICAgdXNpbmcgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpyZXN1bHRKU1I7CisgICAgdXNp
bmcgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZUpTUjsKKyAgICB1c2luZyBCYXNl
bGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvSlNSOworICAgIHVzaW5nIEJhc2VsaW5lSW5z
dGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm9HUFI7CisgICAgdXNpbmcgQmFzZWxpbmVJbnN0YW5j
ZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMUdQUjsKKyAgICB1c2luZyBCYXNlbGluZUluc3RhbmNlb2ZS
ZWdpc3RlcnM6OnNjcmF0Y2gyR1BSOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgdmFsdWVHUFIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHByb3RvR1BS
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUpTUik7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcHJvdG9KU1IpOwogICAgIAogICAgIC8vIENoZWNr
IHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBj
aGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodmFsdWVHUFIsIHZhbHVlKTsKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocHJvdG9HUFIsIHByb3RvKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwodmFsdWVKU1IsIHZhbHVlKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocHJvdG9KU1IsIHByb3RvKTsKIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2Vu
KAogICAgICAgICBudWxscHRyLCBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCiAg
ICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAg
cmVzdWx0R1BSLAotICAgICAgICB2YWx1ZUdQUiwKLSAgICAgICAgcHJvdG9HUFIsCisgICAgICAg
IHJlc3VsdEpTUi5wYXlsb2FkR1BSKCksCisgICAgICAgIHZhbHVlSlNSLnBheWxvYWRHUFIoKSwK
KyAgICAgICAgcHJvdG9KU1IucGF5bG9hZEdQUigpLAogICAgICAgICBzdHViSW5mb0dQUiwKLSAg
ICAgICAgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMSwgQmFzZWxpbmVJbnN0
YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMik7CisgICAgICAgIHNjcmF0Y2gxR1BSLCBzY3JhdGNo
MkdQUik7CiAKICAgICBhdXRvIFsgc3R1YkluZm8sIHN0dWJJbmZvSW5kZXggXSA9IGFkZFVubGlu
a2VkU3RydWN0dXJlU3R1YkluZm8oKTsKICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vz
c1R5cGU6Okluc3RhbmNlT2Y7CkBAIC0xODQsMTAgKzE4MiwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOwogCiAgICAgZ2VuLmdlbmVyYXRlQmFz
ZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOwor
I2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgYm94Qm9vbGVhbihyZXN1bHRKU1IucGF5bG9hZEdQ
UigpLCByZXN1bHRKU1IpOworI2VuZGlmCiAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luc3Rh
bmNlT2ZzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRKU1IpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMjAxLDEy
ICsyMDIsMjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICAKICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5j
ZW9mUmVnaXN0ZXJzOjpzdHViSW5mbyA9PSBhcmd1bWVudEdQUjEpOwotICAgIHN0YXRpY19hc3Nl
cnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZSA9PSBhcmd1bWVudEdQUjIpOwot
ICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90byA9PSBh
cmd1bWVudEdQUjMpOwotICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50
R1BSMSk7Ci0gICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25JbnN0YW5jZU9mT3B0
aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9m
U2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKKyAgICB1c2luZyBTbG93T3BlcmF0aW9uID0g
ZGVjbHR5cGUob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24s
IDA+KCk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHByZWZlcnJlZEFyZ3Vt
ZW50R1BSPFNsb3dPcGVyYXRpb24sIDE+KCk7CisgICAgdXNpbmcgQmFzZWxpbmVJbnN0YW5jZW9m
UmVnaXN0ZXJzOjp2YWx1ZUpTUjsKKyAgICBzdGF0aWNfYXNzZXJ0KHZhbHVlSlNSID09IHByZWZl
cnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDI+KCkpOworICAgIHVzaW5nIEJhc2VsaW5l
SW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG9KU1I7CisgICAgLy8gT24gSlNWQUxVRTMyXzY0LCAn
cHJvdG8nIHdpbGwgYmUgcGFzc2VkIG9uIHN0YWNrIGFueXdheQorICAgIHN0YXRpY19hc3NlcnQo
cHJvdG9KU1IgPT0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMz4oKSB8fCBp
czMyQml0KCkpOworICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKGdsb2JhbE9iamVjdEdQUiwg
c3R1YkluZm9HUFIsIHZhbHVlSlNSLCBwcm90b0pTUikpOworCisgICAgbG9hZEdsb2JhbE9iamVj
dChnbG9iYWxPYmplY3RHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIGNhbGxPcGVyYXRpb248U2xvd09w
ZXJhdGlvbj4oCisgICAgICAgIEFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksCisgICAgICAgIHJlc3VsdFZSZWcsCisgICAgICAg
IGdsb2JhbE9iamVjdEdQUiwgc3R1YkluZm9HUFIsIHZhbHVlSlNSLCBwcm90b0pTUik7CiAgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCkBAIC0y
MTYsMTQgKzIyNywxNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJh
bmQ7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCByZWdUMCk7Ci0KLSAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKLX0KLQorI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyVGFnKHZhbHVlLCByZWdUMCk7CiAjZW5kaWYKKyAgICBpc0VtcHR5KHJlZ1QwLCByZWdUMCk7
CisKKyAgICBib3hCb29sZWFuKHJlZ1QwLCBqc1JlZ1QxMCk7CisgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIGpzUmVnVDEwKTsKK30KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lz
X3VuZGVmaW5lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewpAQCAt
MjM0LDExICsyNDcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwganNSZWdUMTApOwogICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxs
KGpzUmVnVDEwKTsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgY29tcGFyZTY0KEVxdWFsLCBq
c1JlZ1QxMC5wYXlsb2FkR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5l
ZCksIHJlZ1QwKTsKLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgY29tcGFyZTMyKEVxdWFs
LCBqc1JlZ1QxMC50YWdHUFIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyks
IHJlZ1QwKTsKLSNlbmRpZgorICAgIGlzVW5kZWZpbmVkKGpzUmVnVDEwLCByZWdUMCk7CiAgICAg
SnVtcCBkb25lID0ganVtcCgpOwogICAgIAogICAgIGlzQ2VsbC5saW5rKHRoaXMpOwpAQCAtMjcz
LDE5ICsyODIsMjQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwganNSZWdUMTApOwogfQogCi0jaWYgVVNFKEpTVkFMVUU2NCkKIAogdm9pZCBK
SVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNC
b29sZWFuPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCisKKyNp
ZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsK
ICAgICB0ZXN0NjQoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90
Pih+MSkpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisjZWxpZiBVU0UoSlNWQUxV
RTMyXzY0KQorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJUYWcodmFsdWUsIHJlZ1QwKTsKKyAg
ICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRh
ZyksIHJlZ1QwKTsKKyNlbmRpZgorCisgICAgYm94Qm9vbGVhbihyZWdUMCwganNSZWdUMTApOwor
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBqc1JlZ1QxMCk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2lzX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtMjkzLDExICszMDcsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV9vcGVyYW5kOwotICAgIAorCisjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCBu
dW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworI2VsaWYg
VVNFKEpTVkFMVUUzMl82NCkKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKHZhbHVlLCBy
ZWdUMCk7CisgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CisgICAgY29tcGFyZTMy
KEJlbG93LCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZyArIDEpLCByZWdU
MCk7CisjZW5kaWYKKworICAgIGJveEJvb2xlYW4ocmVnVDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwganNSZWdUMTApOwogfQogCiAjaWYgVVNFKEJJR0lOVDMy
KQpAQCAtMzEzLDE1ICszMzQsMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYmlnX2ludChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIG1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHJlZ1QxKTsKICAgICBhbmQ2NChyZWdUMSwgcmVnVDAp
OwogICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJ
bnQzMlRhZyksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOworICAgIGJveEJvb2xlYW4ocmVnVDAsIGpzUmVnVDEwKTsKICAgICBKdW1wIGRvbmUg
PSBqdW1wKCk7CiAKICAgICBpc0NlbGwubGluayh0aGlzKTsKICAgICBjb21wYXJlOChFcXVhbCwg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihIZWFwQmlnSW50VHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOworICAgIGJveEJvb2xlYW4ocmVnVDAsIGpzUmVnVDEwKTsKIAogICAg
IGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGpzUmVnVDEwKTsKIH0KICNlbHNlIC8vIGlmICFV
U0UoQklHSU5UMzIpCiBOT19SRVRVUk4gdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYmlnX2ludChjb25z
dCBJbnN0cnVjdGlvbiopCkBAIC0zMzgsMTggKzM1OSwxNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9p
c19jZWxsX3dpdGhfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBpbnQg
dHlwZSA9IGJ5dGVjb2RlLm1fdHlwZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7
Ci0KLSAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5
cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGpzUmVnVDMyKTsKIAorICAgIG1vdmUo
VHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5v
dENlbGwoanNSZWdUMzIpOworICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKGpzUmVnVDMyLnBh
eWxvYWRHUFIoKSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0
eXBlKSwgcmVnVDApOwogICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CiAKLSAgICBkb25lLmxpbmsodGhp
cyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGJveEJvb2xlYW4ocmVn
VDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwganNSZWdUMTAp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM1OCwxOCArMzc2LDE1IEBAIHZvaWQgSklUOjplbWl0X29w
X2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVn
VDApOwotCi0gICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZWdUMCk7
Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwganNSZWdU
MzIpOwogCisgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKKyAgICBKdW1wIGlzTm90
Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChqc1JlZ1QzMik7CisgICAgY29tcGFyZTgoQWJvdmVPckVx
dWFsLCBBZGRyZXNzKGpzUmVnVDMyLnBheWxvYWRHUFIoKSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDApOwogICAgIGlzTm90Q2Vs
bC5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2Up
LCByZWdUMCk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIGJveEJvb2xlYW4ocmVnVDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwganNSZWdUMTApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90
b19wcmltaXRpdmUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM3
OCwxNCArMzkzLDE0IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjLCBqc1JlZ1QxMCk7CiAgICAgCi0gICAgSnVtcCBpc0ltbSA9IGJy
YW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QocmVn
VDApKTsKKyAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKGpzUmVnVDEwKTsKKyAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdChqc1JlZ1QxMC5wYXlsb2FkR1BSKCkpKTsKICAgICBp
c0ltbS5saW5rKHRoaXMpOwogCiAgICAgaWYgKGRzdCAhPSBzcmMpCi0gICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IGpzUmVnVDEwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zOTQsMTkgKzQwOSwxNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywganNSZWdUMTApOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KSk7Ci0gICAgSnVtcCBkb25lID0gYnJhbmNoSWZTeW1ib2wocmVnVDApOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RDZWxsKGpzUmVnVDEwKSk7CisgICAgSnVtcCBkb25lID0gYnJhbmNoSWZTeW1ib2woanNSZWdU
MTAucGF5bG9hZEdQUigpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhqc1Jl
Z1QxMC5wYXlsb2FkR1BSKCkpKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKICAgICBpZiAoc3Jj
ICE9IGRzdCkKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwganNSZWdUMTApOwogfQogCi0jZW5kaWYKLQogdm9p
ZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKQEAgLTQyMiwyNSArNDM1LDE3IEBAIHZvaWQgSklU
OjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIGds
b2JhbE9iamVjdEdQUiwgZnVuY3Rpb25HUFIsIG5hbWVKU1IpOwogfQogCi0jaWYgVVNFKEpTVkFM
VUU2NCkKLQogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BOb3Q+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJh
bmQsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFu
ZCwganNSZWdUMTApOwogCi0gICAgLy8gSW52ZXJ0IGFnYWluc3QgSlNWYWx1ZShmYWxzZSk7IGlm
IHRoZSB2YWx1ZSB3YXMgdGFnZ2VkIGFzIGEgYm9vbGVhbiwgdGhlbiBhbGwgYml0cyB3aWxsIGJl
Ci0gICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9y
IDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVseSkuCi0gICAgLy8gVGhlbiBp
bnZlcnQgYWdhaW5zdCBKU1ZhbHVlKHRydWUpLCB3aGljaCB3aWxsIGFkZCB0aGUgdGFnIGJhY2sg
aW4sIGFuZCBmbGlwIHRoZSBsb3cgYml0LgotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZUZhbHNlKSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9u
WmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7Ci0g
ICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKKyAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdEJvb2xlYW4oanNSZWdUMTAsIHJlZ1QyKSk7CisgICAgeG9y
UHRyKFRydXN0ZWRJbW0zMigxKSwganNSZWdUMTAucGF5bG9hZEdQUigpKTsKIAotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3QsIGpzUmVnVDEwKTsKIH0KIAotI2VuZGlmCi0KIHZvaWQgSklU
OjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmZhbHNlPigp
OwpAQCAtNTQ3LDE4ICs1NTIsMjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgd2FzTm90SW1tZWRpYXRlLmxp
bmsodGhpcyk7CiB9CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9q
dW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEp1bmRlZmlu
ZWRPck51bGw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCBqc1JlZ1QxMCk7CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJUYWcodmFsdWUsIGpzUmVnVDEwLnRhZ0dQUigpKTsKKyNlbmRpZgog
Ci0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7
Ci0gICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgZW1pdFR1cm5VbmRlZmluZWRJbnRv
TnVsbChqc1JlZ1QxMCk7CisgICAgYWRkSnVtcChicmFuY2hJZk51bGwoanNSZWdUMTApLCB0YXJn
ZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC01NjcsMTAgKzU3NCwxNCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCBqc1JlZ1QxMCk7CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJUYWcodmFsdWUsIGpzUmVnVDEwLnRhZ0dQUigpKTsKKyNlbmRp
ZgogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdU
MCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgZW1pdFR1cm5VbmRlZmlu
ZWRJbnRvTnVsbChqc1JlZ1QxMCk7CisgICAgYWRkSnVtcChicmFuY2hJZk5vdE51bGwoanNSZWdU
MTApLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfcHRyKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC01NzksOSArNTkwLDE2IEBAIHZvaWQgSklU
OjplbWl0X29wX2plcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAg
IGxvYWRDb2RlQmxvY2tDb25zdGFudChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyLCBKU1ZhbHVl
UmVncyB7IHJlZ1QxIH0pOwotICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVn
VDEpLCB0YXJnZXQpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBqc1JlZ1QxMCk7
CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAvLyBPTiBKU1ZBTFVFNjQgdGhlIHBvaW50ZXIg
Y29tcGFyaXNvbiBiZWxvdyBjYXRjaGVzIHRoaXMgY2FzZQorICAgIEp1bXAgbm90Q2VsbCA9IGJy
YW5jaElmTm90Q2VsbChqc1JlZ1QxMCk7CisjZW5kaWYKKyAgICBsb2FkQ29kZUJsb2NrQ29uc3Rh
bnRQYXlsb2FkKGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIsIHJlZ1QyKTsKKyAgICBhZGRKdW1w
KGJyYW5jaFB0cihFcXVhbCwganNSZWdUMTAucGF5bG9hZEdQUigpLCByZWdUMiksIHRhcmdldCk7
CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBub3RDZWxsLmxpbmsodGhpcyk7CisjZW5kaWYK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTU5MCwxNCArNjA4LDIzIEBAIHZvaWQgSklUOjplbWl0X29wX2pu
ZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwog
ICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgbG9hZENv
ZGVCbG9ja0NvbnN0YW50KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIsIEpTVmFsdWVSZWdzIHsg
cmVnVDEgfSk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFs
LCByZWdUMCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBqc1JlZ1Qx
MCk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAvLyBPTiBKU1ZBTFVFNjQgdGhlIHBvaW50
ZXIgY29tcGFyaXNvbiBiZWxvdyBjYXRjaGVzIHRoaXMgY2FzZQorICAgIEp1bXAgbm90Q2VsbCA9
IGJyYW5jaElmTm90Q2VsbChqc1JlZ1QxMCk7CisjZW5kaWYKKyAgICBsb2FkQ29kZUJsb2NrQ29u
c3RhbnRQYXlsb2FkKGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIsIHJlZ1QyKTsKKyAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIGpzUmVnVDEwLnBheWxvYWRH
UFIoKSwgcmVnVDIpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgbm90Q2VsbC5saW5rKHRo
aXMpOworI2VuZGlmCiAgICAgc3RvcmU4VG9NZXRhZGF0YShUcnVzdGVkSW1tMzIoMSksIGJ5dGVj
b2RlLCBPcEpuZXFQdHI6Ok1ldGFkYXRhOjpvZmZzZXRPZkhhc0p1bXBlZCgpKTsKICAgICBhZGRK
dW1wKGp1bXAoKSwgdGFyZ2V0KTsKICAgICBlcXVhbC5saW5rKHRoaXMpOwogfQogCisjaWYgVVNF
KEpTVkFMVUU2NCkKKwogdm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEVxPigpOwpAQCAtNjA1LDggKzYzMiw4IEBAIHZvaWQgSklUOjplbWl0X29wX2Vx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3JocywgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKICAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1Qx
LCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAg
Ym94Qm9vbGVhbihyZWdUMCwganNSZWdUMTApOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3QsIGpzUmVnVDEwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02ODcsOSArNzE0LDkgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3JocywgcmVnVDEpOwog
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKICAgICBj
b21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgYm94Qm9vbGVhbihyZWdUMCwganNS
ZWdUMTApOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7Cisg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwganNSZWdUMTApOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC04MzEsOSArODU4LDkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAgIGNvbXBhcmU2NChF
cXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CiAgICAgZWxzZQogICAgICAgICBjb21wYXJlNjQo
Tm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgYm94Qm9vbGVhbihyZWdUMCwganNSZWdUMTApOwog
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCBqc1JlZ1QxMCk7CiAjZW5kaWYKIH0KIApAQCAtOTQ5LDE4ICs5NzYsMjEgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0
MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCisjZW5kaWYKKwogdm9pZCBK
SVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051
bWJlcj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwotICAgIAotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVn
LCBqc1JlZ1QxMCk7CisgICAgCisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIoanNS
ZWdUMTAsIHJlZ1QyKSk7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBq
c1JlZ1QxMCk7CiAgICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3RWUmVnLCBqc1JlZ1QxMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTk2OCwzMSArOTk4LDM1IEBA
IHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFRvTnVtZXJpYz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwogCi0gICAgSnVtcCBp
c05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90SGVhcEJpZ0ludChyZWdUMCkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
VlJlZywganNSZWdUMTApOworCisgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
anNSZWdUMTApOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChqc1JlZ1Qx
MC5wYXlsb2FkR1BSKCkpKTsKICAgICBKdW1wIGlzQmlnSW50ID0ganVtcCgpOwogCiAgICAgaXNO
b3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVn
VDApKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihqc1JlZ1QxMCwgcmVnVDIp
KTsKICAgICBpc0JpZ0ludC5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IGpzUmVnVDEwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQotICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdFZSZWcsIGpzUmVnVDEwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmNW
UmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
VlJlZywgcmVnVDApOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIGpzUmVnVDEwKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2Vs
bChqc1JlZ1QxMCkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKGpzUmVnVDEw
LnBheWxvYWRHUFIoKSkpOworCisgICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnLCBqc1JlZ1QxMCk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtMTAwMCwxNCArMTAzNCwxNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvT2JqZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcg
PSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVn
LCByZWdUMCk7CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjVlJlZywganNSZWdUMTApOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmVnVDApOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChq
c1JlZ1QxMCkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KGpzUmVnVDEwLnBh
eWxvYWRHUFIoKSkpOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwganNS
ZWdUMTApOwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCi0gICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
VlJlZywganNSZWdUMTApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTAxNyw3ICsxMDUyLDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZt
KCkudG9wRW50cnlGcmFtZSk7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bSksIHJlZ1Qz
KTsKLSAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0
KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBWTTo6
Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBzdG9y
ZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1l
Rm9yQ2F0Y2hPZmZzZXQoKSkpOwogCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50
ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2Fs
bEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKQEAgLTEwMzgsMTEgKzEwNzMs
MTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogICAgIGlzQ2F0
Y2hhYmxlRXhjZXB0aW9uLmxpbmsodGhpcyk7CiAKLSAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBy
ZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2V4Y2VwdGlvbik7
CisgICAgYm94Q2VsbChyZXR1cm5WYWx1ZUdQUiwganNSZWdUMTApOworICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9leGNlcHRpb24sIGpzUmVnVDEwKTsKIAotICAgIGxvYWQ2
NChBZGRyZXNzKHJlZ1QwLCBFeGNlcHRpb246OnZhbHVlT2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Rocm93blZhbHVlKTsKKyAgICBsb2Fk
VmFsdWUoQWRkcmVzcyhqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIEV4Y2VwdGlvbjo6dmFsdWVPZmZz
ZXQoKSksIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
dGhyb3duVmFsdWUsIGpzUmVnVDEwKTsKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8vIEZJ
WE1FOiBjb25zaWRlciBpbmxpbmUgY2FjaGluZyB0aGUgcHJvY2VzcyBvZiBkb2luZyBPU1IgZW50
cnksIGluY2x1ZGluZwpAQCAtMTA2NiwxMyArMTEwMSwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfcGFyZW50X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJlbnRT
Y29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY3VycmVudFNjb3BlID0gYnl0ZWNvZGUubV9z
Y29wZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRTY29wZSwgcmVnVDApOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGN1cnJlbnRTY29wZSwgcmVnVDApOwog
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdU
MCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5tX2RzdCwgcmVnVDApOworICAgIGJveENl
bGwocmVnVDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZHN0LCBqc1JlZ1QxMCk7CiB9CiAKLSNlbmRpZgotCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0
Y2hfaW1tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTd2l0Y2hJbW0+KCk7CkBAIC0x
MjEyLDggKzEyNDYsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCBqc1JlZ1QxMCk7CiB9CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotCiB2b2lkIEpJVDo6ZW1pdF9v
cF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopCiB7CiAgICAgLy8gRXZlbiB0aG91Z2ggQ1RJIGRv
ZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50CkBAIC0xMzM3LDE3ICsx
MzY5LDE4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90Ojpj
YWxsZWUsIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246Om9m
ZnNldE9mU2NvcGVDaGFpbigpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdU
MCk7CisgICAgYm94Q2VsbChyZWdUMCwganNSZWdUMTApOworICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCBqc1JlZ1QxMCk7CiB9CiAKLSNlbmRpZgotCiB2b2lkIEpJVDo6ZW1pdF9vcF90
b190aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdCwganNSZWdUMTApOworICAgIFZp
cnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdDsKIAotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChqc1JlZ1QxMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmNEc3QsIGpzUmVnVDEwKTsKKworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChq
c1JlZ1QxMCwgc3JjRHN0KTsKIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlwZShqc1Jl
Z1QxMC5wYXlsb2FkR1BSKCksIEZpbmFsT2JqZWN0VHlwZSkpOwogICAgIGxvYWQzMkZyb21NZXRh
ZGF0YShieXRlY29kZSwgT3BUb1RoaXM6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhY2hlZFN0cnVjdHVy
ZUlEKCksIHJlZ1QyKTsKQEAgLTEzODksMTUgKzE0MjIsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Y3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCBqc1JlZ1QxMCk7CiB9CiAKLSNp
ZiBVU0UoSlNWQUxVRTY0KQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190ZHooY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcENoZWNrVGR6PigpOworI2lmIFVTRShKU1ZBTFVFNjQpCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3Rl
ciwgcmVnVDApOworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyVGFnKGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyLCByZWdUMCk7CisjZW5k
aWYKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CiB9CiAKKyNpZiBVU0Uo
SlNWQUxVRTY0KQogCiAvLyBTbG93IGNhc2VzCiAKQEAgLTE2MjksNyArMTY2NSw4IEBAIHZvaWQg
SklUOjplbWl0X29wX25ld19yZWdleHAoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKICAgICBHUFJSZWcgZ2xvYmFsR1BSID0gYXJndW1lbnRHUFIwOwogICAgIGxvYWRHbG9i
YWxPYmplY3QoZ2xvYmFsR1BSKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4
cCwgZ2xvYmFsR1BSLCBqc0Nhc3Q8UmVnRXhwKj4obV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29u
c3RhbnQocmVnZXhwKSkpOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7
CisgICAgYm94Q2VsbChyZXR1cm5WYWx1ZUdQUiwgcmV0dXJuVmFsdWVKU1IpOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUpTUik7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIE9wPgpAQCAtMTg3NiwyOSArMTkxMywxOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
cmVzdF9sZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIHVuc2lnbmVk
IG51bVBhcmFtc1RvU2tpcCA9IGJ5dGVjb2RlLm1fbnVtUGFyYW1ldGVyc1RvU2tpcDsKKwogICAg
IGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKSwgcmVnVDApOwogICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwogICAgIEp1
bXAgemVyb0xlbmd0aCA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG51
bVBhcmFtc1RvU2tpcCkpOwogICAgIHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tpcCksIHJlZ1Qw
KTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyhy
ZWdUMCkpOwotI2VuZGlmCisgICAgYm94SW50MzIocmVnVDAsIGpzUmVnVDEwKTsKICAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7CiAKICAgICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7Ci0jaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIo
MCkpKSwgcmVnVDApOwotI2Vsc2UKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwot
I2VuZGlmCisgICAgbW92ZVRydXN0ZWRWYWx1ZShqc051bWJlcigwKSwganNSZWdUMTApOwogCiAg
ICAgZG9uZS5saW5rKHRoaXMpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKLSNlbHNlCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6SW50MzJUYWcpLCByZWdUMSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwotI2VuZGlmCisgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIGpzUmVnVDEwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3Vt
ZW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xOTI0LDI3ICsx
OTUxLDE3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm90b3R5cGVfb2YoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldFByb3RvdHlwZU9mPigpOwogCi0jaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MocmVnVDIpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7Ci0jZWxzZQot
ICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Qx
OwotICAgIEFTU0VSVCh2YWx1ZVJlZ3MudGFnR1BSKCkgPT0gc2NyYXRjaEdQUik7Ci0jZW5kaWYK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlUmVncyk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBqc1JlZ1QxMCk7
CiAKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJ
Zk5vdENlbGwodmFsdWVSZWdzKSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9i
amVjdCh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKSk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2hJZk5vdENlbGwoanNSZWdUMTApKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90
T2JqZWN0KGpzUmVnVDEwLnBheWxvYWRHUFIoKSkpOwogCi0gICAgZW1pdExvYWRQcm90b3R5cGUo
dm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc2xv
d0Nhc2VzKTsKKyAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCBqc1JlZ1QxMC5wYXlsb2FkR1BS
KCksIGpzUmVnVDMyLCByZWdUNCwgc2xvd0Nhc2VzKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2Fz
ZXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVncyk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwganNSZWdUMzIpOworICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIGpzUmVnVDMyKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMz
Ml82NC5jcHAKaW5kZXggMTIyYzlhYWFmNjE4NjkyNDVkODcyNWRlNjRjZDJlOTc3NWMwMjVkNy4u
NzQxNTAyYzViMDhmZTNmZDM5MGQ2NDYxYjNmOTBkNGJlMDdjYzBiMiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcApAQCAtMzMsNTI3ICszMywxMzMg
QEAKICNpbmNsdWRlICJCYXNpY0Jsb2NrTG9jYXRpb24uaCIKICNpbmNsdWRlICJCeXRlY29kZUdl
bmVyYXRvci5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgotI2luY2x1ZGUgIkNDYWxs
SGVscGVycy5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkludGVycHJldGVy
SW5saW5lcy5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKLSNpbmNsdWRlICJKU0FycmF5Lmgi
Ci0jaW5jbHVkZSAiSlNDYXN0LmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgotI2luY2x1ZGUg
IkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgotI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKLSNp
bmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oIgotI2luY2x1ZGUgIk9wY29k
ZUlubGluZXMuaCIKICNpbmNsdWRlICJTbG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJUeXBlUHJv
ZmlsZXJMb2cuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKIAogbmFtZXNwYWNlIEpT
QyB7CiAKLXZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjpjb21waWxlT3BFcUNvbW1v
bihWaXJ0dWFsUmVnaXN0ZXIgc3JjMSwgVmlydHVhbFJlZ2lzdGVyIHNyYzIpCiB7Ci0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0YW5j
ZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VW
YWx1ZTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIGpzUmVnVDEwKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIGpzUmVnVDMyKTsKKyAgICBhZGRTbG93Q2FzZShi
cmFuY2gzMihOb3RFcXVhbCwganNSZWdUMTAudGFnR1BSKCksIGpzUmVnVDMyLnRhZ0dQUigpKSk7
CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKGpzUmVnVDEwKSk7CisgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoMzIoQmVsb3csIGpzUmVnVDEwLnBheWxvYWRHUFIoKSwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6Okxvd2VzdFRhZykpKTsKK30KIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXls
b2FkKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKLSAgICAvLyBXZSBkb24ndCBqdW1wIGlmIHdl
IGtub3cgd2hhdCBTeW1ib2wuaGFzSW5zdGFuY2Ugd291bGQgZG8uCi0gICAgSnVtcCBoYXNJbnN0
YW5jZVZhbHVlTm90Q2VsbCA9IGVtaXRKdW1wSWZOb3RKU0NlbGwoaGFzSW5zdGFuY2VWYWx1ZSk7
Ci0gICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMSk7Ci0gICAgSnVtcCBjdXN0b21oYXNJbnN0YW5j
ZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgT0JKRUNU
X09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX2Z1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJv
bEZ1bmN0aW9uKSkpOwordm9pZCBKSVQ6OmNvbXBpbGVPcEVxU2xvd0NvbW1vbihWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIEp1bXBMaXN0IGdlbmVyaWNDYXNl
OwogCi0gICAgLy8gV2Uga25vdyB0aGF0IGNvbnN0cnVjdG9yIGlzIGFuIG9iamVjdCBmcm9tIHRo
ZSB3YXkgYnl0ZWNvZGUgaXMgZW1pdHRlZCBmb3IgaW5zdGFuY2VvZiBleHByZXNzaW9ucy4KLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChjb25zdHJ1Y3RvciwgcmVnVDApOworICAg
IGdlbmVyaWNDYXNlLmFwcGVuZChnZXRTbG93Q2FzZShpdGVyKSk7IC8vIHRhZ3Mgbm90IGVxdWFs
CiAKLSAgICAvLyBDaGVjayB0aGF0IGNvbnN0cnVjdG9yICdJbXBsZW1lbnRzRGVmYXVsdEhhc0lu
c3RhbmNlJyBpLmUuIHRoZSBvYmplY3QgaXMgbm90IGEgQy1BUEkgdXNlciBub3IgYSBib3VuZCBm
dW5jdGlvbi4KLSAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZv
RmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNl
KSwgcmVnVDApOworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gdGFncyBlcXVhbCBhbmQgSlND
ZWxsCisgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElmTm90U3RyaW5nKGpzUmVnVDEwLnBh
eWxvYWRHUFIoKSkpOworICAgIGdlbmVyaWNDYXNlLmFwcGVuZChicmFuY2hJZk5vdFN0cmluZyhq
c1JlZ1QzMi5wYXlsb2FkR1BSKCkpKTsKKworICAgIC8vIFN0cmluZyBjYXNlLgorICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0
cmluZ0VxLCByZWdUNCwganNSZWdUMTAucGF5bG9hZEdQUigpLCBqc1JlZ1QzMi5wYXlsb2FkR1BS
KCkpOwogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAotICAgIGhhc0luc3RhbmNlVmFsdWVOb3RD
ZWxsLmxpbmsodGhpcyk7Ci0gICAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZS5saW5rKHRoaXMpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CisgICAgLy8gR2VuZXJpYyBjYXNlLgor
ICAgIGdlbmVyaWNDYXNlLmFwcGVuZChnZXRTbG93Q2FzZShpdGVyKSk7IC8vIGRvdWJsZXMKKyAg
ICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUNCwganNSZWdUMTAsIGpz
UmVnVDMyKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0U3RvcmVCb29sKGRzdCwg
cmVnVDApOwotCi19Ci0KLXZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5
cGU7Ci0KLSAgICB1c2luZyBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3VsdEdQUjsK
LSAgICB1c2luZyBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlSlNSOwotICAgIHVz
aW5nIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG9KU1I7Ci0gICAgdXNpbmcgQmFz
ZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mb0dQUjsKLSAgICB1c2luZyBCYXNlbGlu
ZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnNjcmF0Y2gxR1BSOwotICAgIHVzaW5nIEJhc2VsaW5lSW5z
dGFuY2VvZlJlZ2lzdGVyczo6c2NyYXRjaDJHUFI7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyUGF5bG9hZCh2YWx1ZSwgdmFsdWVKU1IucGF5bG9hZEdQUigpKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyUGF5bG9hZChwcm90bywgcHJvdG9KU1IucGF5bG9hZEdQUigpKTsKLQotICAg
IC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0g
dGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4K
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodmFsdWUpOwotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChwcm90byk7Ci0gICAgCi0gICAgSklUSW5zdGFuY2VPZkdlbmVyYXRv
ciBnZW4oCi0gICAgICAgIG51bGxwdHIsIG51bGxwdHIsIEpJVFR5cGU6OkJhc2VsaW5lSklULCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSwKLSAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAg
ICAgICByZXN1bHRHUFIsCi0gICAgICAgIHZhbHVlSlNSLnBheWxvYWRHUFIoKSwKLSAgICAgICAg
cHJvdG9KU1IucGF5bG9hZEdQUigpLAotICAgICAgICBzdHViSW5mb0dQUiwKLSAgICAgICAgc2Ny
YXRjaDFHUFIsIHNjcmF0Y2gyR1BSKTsKLQotICAgIGF1dG8gWyBzdHViSW5mbywgc3R1YkluZm9J
bmRleCBdID0gYWRkVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbygpOwotICAgIHN0dWJJbmZvLT5h
Y2Nlc3NUeXBlID0gQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjsKLSAgICBzdHViSW5mby0+Ynl0ZWNv
ZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKLSAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCA9IHN0dWJJbmZvSW5kZXg7Ci0gICAgZ2VuLm1fdW5saW5rZWRTdHViSW5mbyA9
IHN0dWJJbmZvOwotCi0gICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhp
cywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOwotICAgIGFkZFNsb3dDYXNlKCk7Ci0gICAg
bV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKLSAgICAKLSAgICBlbWl0U3RvcmVCb29sKGRzdCwg
cmVzdWx0R1BSKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIAotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJv
dG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsKLSAgICAKLSAgICBKSVRJbnN0YW5jZU9mR2VuZXJh
dG9yJiBnZW4gPSBtX2luc3RhbmNlT2ZzW21faW5zdGFuY2VPZkluZGV4KytdOwotCi0gICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICB1c2luZyBTbG93T3BlcmF0aW9uID0g
ZGVjbHR5cGUob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKTsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24s
IDA+KCk7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHByZWZlcnJlZEFyZ3Vt
ZW50R1BSPFNsb3dPcGVyYXRpb24sIDE+KCk7Ci0gICAgdXNpbmcgQmFzZWxpbmVJbnN0YW5jZW9m
UmVnaXN0ZXJzOjp2YWx1ZUpTUjsKLSAgICB1c2luZyBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3Rl
cnM6OnByb3RvSlNSOwotICAgIHN0YXRpY19hc3NlcnQodmFsdWVKU1IgPT0gcHJlZmVycmVkQXJn
dW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMj4oKSk7Ci0gICAgLy8gUHJvdG8gd2lsbCBiZSBwYXNz
ZWQgb24gc3RhY2ssIGp1c3QgbWFrZSBzdXJlIG5vIG92ZXJsYXAKLSAgICBzdGF0aWNfYXNzZXJ0
KG5vT3ZlcmxhcCh2YWx1ZUpTUiwgcHJvdG9KU1IsIGdsb2JhbE9iamVjdEdQUiwgc3R1YkluZm9H
UFIpKTsKLQotICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICBsb2Fk
Q29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BS
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKHZhbHVlLCB2YWx1ZUpTUi50YWdHUFIo
KSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclRhZyhwcm90bywgcHJvdG9KU1IudGFnR1BS
KCkpOwotICAgIGNhbGxPcGVyYXRpb248U2xvd09wZXJhdGlvbj4oCi0gICAgICAgIEFkZHJlc3Mo
c3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSks
Ci0gICAgICAgIGRzdCwKLSAgICAgICAgZ2xvYmFsT2JqZWN0R1BSLCBzdHViSW5mb0dQUiwgdmFs
dWVKU1IsIHByb3RvSlNSKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIENhbGwoKSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BJc0VtcHR5PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEs
IHJlZ1QwKTsKLSAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6RW1wdHlWYWx1ZVRhZyksIHJlZ1QwKTsKLQotICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdU
MCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVy
YW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJUYWcodmFsdWUsIHJlZ1QwKTsK
LSAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVh
blRhZyksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDApOwotfQotCi12b2lk
IEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElz
TnVtYmVyPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlclRhZyh2YWx1ZSwgcmVnVDApOwotICAgIGFkZDMyKFRydXN0
ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIGNvbXBhcmUzMihCZWxvdywgcmVnVDAsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcgKyAxKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUJvb2wo
ZHN0LCByZWdUMCk7Ci19Ci0KLU5PX1JFVFVSTiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19iaWdfaW50
KGNvbnN0IEluc3RydWN0aW9uKikKLXsKLSAgICAvLyBXZSBlbWl0IGlzX2NlbGxfd2l0aF90eXBl
IGluc3RlYWQsIHNpbmNlIEJpZ0ludDMyIGlzIG5vdCBzdXBwb3J0ZWQgb24gMzItYml0IHBsYXRm
b3Jtcy4KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIEpJVDo6
ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SXNDZWxsV2l0aFR5cGU+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAg
ICBpbnQgdHlwZSA9IGJ5dGVjb2RlLm1fdHlwZTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5v
dENlbGwocmVnVDEpOwotCi0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlZ1QwKTsKLSAg
ICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0KLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwotCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAg
IGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2lzX29i
amVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNPYmplY3Q+KCk7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENl
bGwocmVnVDEpOwotCi0gICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCBy
ZWdUMCk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwotCi0gICAgaXNOb3RDZWxsLmxpbmsodGhp
cyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKLQotICAgIGRvbmUubGluayh0
aGlzKTsKLSAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1p
dF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
LXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0
aXZlPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7Ci0KLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyYywgcmVnVDEsIHJlZ1QwKTsKLQotICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJ
Zk5vdENlbGwocmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7
Ci0gICAgaXNJbW0ubGluayh0aGlzKTsKLQotICAgIGlmIChkc3QgIT0gc3JjKQotICAgICAgICBl
bWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF90b19w
cm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvUHJvcGVydHlLZXk+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjLCByZWdUMSwgcmVnVDApOwotCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QxKSk7Ci0gICAgSnVtcCBkb25lID0gYnJhbmNoSWZTeW1ib2wocmVnVDApOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7Ci0KLSAgICBkb25lLmxpbmso
dGhpcyk7Ci0gICAgaWYgKHNyYyAhPSBkc3QpCi0gICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1Qx
LCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTm90PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclRhZyhzcmMsIHJlZ1QwKTsKLQotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90Qm9vbGVhbihyZWdUMSwgSW52YWxpZEdQUlJlZykpOwotICAgIHhvcjMyKFRydXN0ZWRJ
bW0zMigxKSwgcmVnVDApOwotCi0gICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwLCAoZHN0ID09
IHNyYykpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEp1bmRlZmluZWRPck51bGw+KCk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKHZhbHVlLCByZWdUMCk7Ci0gICAgc3Rh
dGljX2Fzc2VydCgoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnICsgMSA9PSBKU1ZhbHVlOjpOdWxsVGFn
KSAmJiAoSlNWYWx1ZTo6TnVsbFRhZyAmIDB4MSksICIiKTsKLSAgICBvcjMyKFRydXN0ZWRJbW0z
MigxKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoSWZOdWxsKHJlZ1QwKSwgdGFyZ2V0KTsK
LX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSm51bmRlZmluZWRPck51bGw+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0KLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKHZhbHVlLCByZWdUMCk7Ci0gICAgc3RhdGljX2Fz
c2VydCgoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnICsgMSA9PSBKU1ZhbHVlOjpOdWxsVGFnKSAmJiAo
SlNWYWx1ZTo6TnVsbFRhZyAmIDB4MSksICIiKTsKLSAgICBvcjMyKFRydXN0ZWRJbW0zMigxKSwg
cmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoSWZOb3ROdWxsKHJlZ1QwKSwgdGFyZ2V0KTsKLX0K
LQotdm9pZCBKSVQ6OmVtaXRfb3BfamVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSmVxUHRyPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVl
OwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
LCByZWdUMSwgcmVnVDApOwotICAgIEp1bXAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MSk7Ci0gICAgbG9hZENvZGVCbG9ja0NvbnN0YW50UGF5bG9hZChieXRlY29kZS5tX3NwZWNpYWxQ
b2ludGVyLCByZWdUMik7Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCByZWdU
MiksIHRhcmdldCk7Ci0gICAgbm90Q2VsbC5saW5rKHRoaXMpOwotfQotCi12b2lkIEpJVDo6ZW1p
dF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewot
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcVB0cj4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDEsIHJlZ1Qw
KTsKLSAgICBKdW1wIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDEpOwotICAgIGxvYWRD
b2RlQmxvY2tDb25zdGFudFBheWxvYWQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlciwgcmVnVDIp
OwotICAgIEp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMik7Ci0gICAg
bm90Q2VsbC5saW5rKHRoaXMpOwotICAgIHN0b3JlOFRvTWV0YWRhdGEoVHJ1c3RlZEltbTMyKDEp
LCBieXRlY29kZSwgT3BKbmVxUHRyOjpNZXRhZGF0YTo6b2Zmc2V0T2ZIYXNKdW1wZWQoKSk7Ci0g
ICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7Ci0gICAgZXF1YWwubGluayh0aGlzKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigp
OwogCi0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNy
YzIgPSBieXRlY29kZS5tX3JoczsKKyAgICBjb21waWxlT3BFcUNvbW1vbihieXRlY29kZS5tX2xo
cywgYnl0ZWNvZGUubV9yaHMpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCBy
ZWdUMSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgcmVnVDMsIHJl
Z1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QzKSk7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QxKSk7Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoMzIoQmVsb3csIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkp
OwotCi0gICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKLQotICAgIGVt
aXRTdG9yZUJvb2woZHN0LCByZWdUMCk7CisgICAgY29tcGFyZTMyKEVxdWFsLCBqc1JlZ1QxMC5w
YXlsb2FkR1BSKCksIGpzUmVnVDMyLnBheWxvYWRHUFIoKSwgcmVnVDApOworICAgIGJveEJvb2xl
YW4ocmVnVDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZHN0LCBqc1JlZ1QxMCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BFcT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7
CiAKLSAgICBKdW1wTGlzdCBzdG9yZVJlc3VsdDsKLSAgICBKdW1wTGlzdCBnZW5lcmljQ2FzZTsK
KyAgICBjb21waWxlT3BFcUNvbW1vbihieXRlY29kZS5tX2xocywgYnl0ZWNvZGUubV9yaHMpOwog
Ci0gICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0ZXIpKTsgLy8gdGFncyBub3Qg
ZXF1YWwKLQotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gdGFncyBlcXVhbCBhbmQgSlNDZWxs
Ci0gICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7Ci0gICAg
Z2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QyKSk7Ci0KLSAgICAvLyBT
dHJpbmcgY2FzZS4KLSAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgcmVnVDEsIHJlZ1QwLCByZWdUMik7Ci0gICAg
c3RvcmVSZXN1bHQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAvLyBHZW5lcmljIGNhc2UuCi0gICAg
Z2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0ZXIpKTsgLy8gZG91YmxlcwotICAgIGdl
bmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0gICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1Q0LCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKLQotICAgIHN0b3JlUmVzdWx0
LmxpbmsodGhpcyk7Ci0gICAgZW1pdFN0b3JlQm9vbChkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAg
ICBjb21wYXJlMzIoTm90RXF1YWwsIGpzUmVnVDEwLnBheWxvYWRHUFIoKSwganNSZWdUMzIucGF5
bG9hZEdQUigpLCByZWdUMCk7CisgICAgYm94Qm9vbGVhbihyZWdUMCwganNSZWdUMTApOworICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIGpzUmVnVDEwKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+
KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0
ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsK
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIHJlZ1QzLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMykpOwotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmQ2VsbChyZWdUMSkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEJlbG93LCByZWdU
MSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKKyAgICBjb21waWxlT3BFcUNv
bW1vbihieXRlY29kZS5tX2xocywgYnl0ZWNvZGUubV9yaHMpOwogCi0gICAgYWRkSnVtcChicmFu
Y2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QyKSwgdGFyZ2V0KTsKLX0KLQotdm9pZCBKSVQ6OmNvbXBp
bGVPcEVxSnVtcFNsb3coVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQ29t
cGlsZU9wRXFUeXBlIHR5cGUsIGludCBqdW1wVGFyZ2V0KQotewotICAgIEp1bXBMaXN0IGRvbmU7
Ci0gICAgSnVtcExpc3QgZ2VuZXJpY0Nhc2U7Ci0KLSAgICBnZW5lcmljQ2FzZS5hcHBlbmQoZ2V0
U2xvd0Nhc2UoaXRlcikpOyAvLyB0YWdzIG5vdCBlcXVhbAotCi0gICAgbGlua1Nsb3dDYXNlKGl0
ZXIpOyAvLyB0YWdzIGVxdWFsIGFuZCBKU0NlbGwKLSAgICBnZW5lcmljQ2FzZS5hcHBlbmQoYnJh
bmNoSWZOb3RTdHJpbmcocmVnVDApKTsKLSAgICBnZW5lcmljQ2FzZS5hcHBlbmQoYnJhbmNoSWZO
b3RTdHJpbmcocmVnVDIpKTsKLQotICAgIC8vIFN0cmluZyBjYXNlLgotICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0Vx
LCByZWdUMSwgcmVnVDAsIHJlZ1QyKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0
MzIodHlwZSA9PSBDb21waWxlT3BFcVR5cGU6OkVxID8gTm9uWmVybyA6IFplcm8sIHJldHVyblZh
bHVlR1BSKSwganVtcFRhcmdldCk7Ci0gICAgZG9uZS5hcHBlbmQoanVtcCgpKTsKLQotICAgIC8v
IEdlbmVyaWMgY2FzZS4KLSAgICBnZW5lcmljQ2FzZS5hcHBlbmQoZ2V0U2xvd0Nhc2UoaXRlcikp
OyAvLyBkb3VibGVzCi0gICAgZ2VuZXJpY0Nhc2UubGluayh0aGlzKTsKLSAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1Q0KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVn
VDQsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikp
OwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMih0eXBlID09IENvbXBpbGVPcEVx
VHlwZTo6RXEgPyBOb25aZXJvIDogWmVybywgcmV0dXJuVmFsdWVHUFIpLCBqdW1wVGFyZ2V0KTsK
LQotICAgIGRvbmUubGluayh0aGlzKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjb21waWxlT3BF
cUp1bXBTbG93KGl0ZXIsIENvbXBpbGVPcEVxVHlwZTo6RXEsIHRhcmdldCk7Ci19Ci0KLXZvaWQg
SklUOjplbWl0X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQot
ewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwot
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0g
Ynl0ZWNvZGUubV9yaHM7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1Qx
LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCByZWdUMywgcmVnVDIp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDMpKTsKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDEpKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2gzMihCZWxvdywgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7Ci0K
LSAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwotCi0gICAgZW1p
dFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKLQotICAgIEp1bXBMaXN0IHN0b3JlUmVzdWx0OwotICAgIEp1bXBMaXN0IGdlbmVyaWND
YXNlOwotCi0gICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0ZXIpKTsgLy8gdGFn
cyBub3QgZXF1YWwKLQotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gdGFncyBlcXVhbCBhbmQg
SlNDZWxsCi0gICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7
Ci0gICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QyKSk7Ci0KLSAg
ICAvLyBTdHJpbmcgY2FzZS4KLSAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgcmVnVDEsIHJlZ1QwLCByZWdUMik7
Ci0gICAgc3RvcmVSZXN1bHQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAvLyBHZW5lcmljIGNhc2Uu
Ci0gICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0ZXIpKTsgLy8gZG91Ymxlcwot
ICAgIGdlbmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0gICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1Q0LCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKLQotICAgIHN0b3Jl
UmVzdWx0LmxpbmsodGhpcyk7Ci0gICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJldHVyblZh
bHVlR1BSKTsKLSAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGFk
ZEp1bXAoYnJhbmNoMzIoRXF1YWwsIGpzUmVnVDEwLnBheWxvYWRHUFIoKSwganNSZWdUMzIucGF5
bG9hZEdQUigpKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmMxLCByZWdUMSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwg
cmVnVDMsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEs
IHJlZ1QzKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QxKSk7Ci0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoQmVsb3csIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93
ZXN0VGFnKSkpOworICAgIGNvbXBpbGVPcEVxQ29tbW9uKGJ5dGVjb2RlLm1fbGhzLCBieXRlY29k
ZS5tX3Jocyk7CiAKLSAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIp
LCB0YXJnZXQpOworICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIGpzUmVnVDEwLnBheWxv
YWRHUFIoKSwganNSZWdUMzIucGF5bG9hZEdQUigpKSwgdGFyZ2V0KTsKK30KKwordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKKworICAgIGNvbXBpbGVPcEVxU2xv
d0NvbW1vbihpdGVyKTsKKworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIHJldHVyblZh
bHVlSlNSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCByZXR1
cm5WYWx1ZUpTUik7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE5lcT4oKTsKKworICAgIGNvbXBpbGVPcEVxU2xvd0NvbW1vbihpdGVyKTsKKworICAgIHhvcjMy
KFRydXN0ZWRJbW0zMigxKSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGJveEJvb2xlYW4ocmV0dXJu
VmFsdWVHUFIsIHJldHVyblZhbHVlSlNSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZHN0LCByZXR1cm5WYWx1ZUpTUik7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisKKyAgICBj
b21waWxlT3BFcVNsb3dDb21tb24oaXRlcik7CisKKyAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFu
Y2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7Ci0gICAgY29tcGlsZU9wRXFKdW1wU2xvdyhpdGVyLCBDb21waWxlT3BFcVR5cGU6Ok5F
cSwgdGFyZ2V0KTsKKworICAgIGNvbXBpbGVPcEVxU2xvd0NvbW1vbihpdGVyKTsKKworICAgIGVt
aXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdl
dCk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjpjb21waWxlT3BTdHJp
Y3RFcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmNv
bXBpbGVPcFN0cmljdEVxQ29tbW9uKFZpcnR1YWxSZWdpc3RlciBzcmMxLCAgVmlydHVhbFJlZ2lz
dGVyIHNyYzIpCiB7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3A+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZp
cnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHNyYzIgPSBieXRlY29kZS5tX3JoczsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
MSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIHJlZ1Qz
LCByZWdUMik7Ci0KLSAgICAvLyBCYWlsIGlmIHRoZSB0YWdzIGRpZmZlciwgb3IgYXJlIGRvdWJs
ZS4KLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QzKSk7Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQmVsb3csIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6TG93ZXN0VGFnKSkpOwotCi0gICAgLy8gSnVtcCB0byBhIHNsb3cgY2FzZSBpZiBib3RoIGFy
ZSBzdHJpbmdzIG9yIHN5bWJvbHMgKG5vbiBvYmplY3QpLgotICAgIEp1bXAgbm90Q2VsbCA9IGJy
YW5jaElmTm90Q2VsbChyZWdUMSk7Ci0gICAgSnVtcCBmaXJzdElzT2JqZWN0ID0gYnJhbmNoSWZP
YmplY3QocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QyKSk7
Ci0gICAgbm90Q2VsbC5saW5rKHRoaXMpOwotICAgIGZpcnN0SXNPYmplY3QubGluayh0aGlzKTsK
LQotICAgIC8vIFNpbXBseSBjb21wYXJlIHRoZSBwYXlsb2Fkcy4KLSAgICBpZiBjb25zdGV4cHIg
KHN0ZDo6aXNfc2FtZTxPcCwgT3BTdHJpY3RlcT46OnZhbHVlKQotICAgICAgICBjb21wYXJlMzIo
RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwotICAgIGVsc2UKLSAgICAgICAgY29tcGFyZTMy
KE5vdEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKLQotICAgIGVtaXRTdG9yZUJvb2woZHN0
LCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3N0cmljdGVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgY29tcGlsZU9wU3RyaWN0RXE8T3BTdHJp
Y3RlcT4oY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfbnN0cmlj
dGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgY29tcGls
ZU9wU3RyaWN0RXE8T3BOc3RyaWN0ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
MiA9IGJ5dGVjb2RlLm1fcmhzOwotCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCBq
c1JlZ1QxMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCBqc1JlZ1QzMik7CiAK
QEAgLTU2NywyMiArMTczLDQ4IEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXAoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdE9iamVjdChqc1JlZ1QzMi5wYXlsb2FkR1BSKCkpKTsKICAgICBub3RDZWxsLmxpbmso
dGhpcyk7CiAgICAgZmlyc3RJc09iamVjdC5saW5rKHRoaXMpOworfQogCi0gICAgLy8gU2ltcGx5
IGNvbXBhcmUgdGhlIHBheWxvYWRzLgotICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lPE9w
LCBPcEpzdHJpY3RlcT46OnZhbHVlKQotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCBq
c1JlZ1QxMC5wYXlsb2FkR1BSKCksIGpzUmVnVDMyLnBheWxvYWRHUFIoKSksIHRhcmdldCk7Ci0g
ICAgZWxzZQotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCBqc1JlZ1QxMC5wYXls
b2FkR1BSKCksIGpzUmVnVDMyLnBheWxvYWRHUFIoKSksIHRhcmdldCk7Cit2b2lkIEpJVDo6ZW1p
dF9vcF9zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQorewor
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3RyaWN0ZXE+KCk7
CisgICAgY29tcGlsZU9wU3RyaWN0RXFDb21tb24oYnl0ZWNvZGUubV9saHMsIGJ5dGVjb2RlLm1f
cmhzKTsKKworICAgIGNvbXBhcmUzMihFcXVhbCwganNSZWdUMTAucGF5bG9hZEdQUigpLCBqc1Jl
Z1QzMi5wYXlsb2FkR1BSKCksIHJlZ1QwKTsKKworICAgIGJveEJvb2xlYW4ocmVnVDAsIGpzUmVn
VDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCBqc1JlZ1Qx
MCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX25zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTnN0cmljdGVxPigpOworICAgIGNvbXBpbGVPcFN0cmljdEVxQ29tbW9uKGJ5
dGVjb2RlLm1fbGhzLCBieXRlY29kZS5tX3Jocyk7CisKKyAgICBjb21wYXJlMzIoTm90RXF1YWws
IGpzUmVnVDEwLnBheWxvYWRHUFIoKSwganNSZWdUMzIucGF5bG9hZEdQUigpLCByZWdUMCk7CisK
KyAgICBib3hCb29sZWFuKHJlZ1QwLCBqc1JlZ1QxMCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2RzdCwganNSZWdUMTApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9q
c3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBj
b21waWxlT3BTdHJpY3RFcUp1bXA8T3BKc3RyaWN0ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbik7Cisg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7
CisgICAgaW50IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKKworICAgIGNvbXBpbGVPcFN0cmljdEVxQ29tbW9uKGJ5dGVjb2Rl
Lm1fbGhzLCBieXRlY29kZS5tX3Jocyk7CisKKyAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCBq
c1JlZ1QxMC5wYXlsb2FkR1BSKCksIGpzUmVnVDMyLnBheWxvYWRHUFIoKSksIHRhcmdldCk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKLSAgICBjb21waWxlT3BTdHJpY3RFcUp1bXA8T3BKbnN0cmljdGVx
PihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKKyAgICBpbnQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOworCisgICAgY29tcGls
ZU9wU3RyaWN0RXFDb21tb24oYnl0ZWNvZGUubV9saHMsIGJ5dGVjb2RlLm1fcmhzKTsKKworICAg
IGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIGpzUmVnVDEwLnBheWxvYWRHUFIoKSwganNSZWdU
MzIucGF5bG9hZEdQUigpKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pz
dHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtNTkyLDcgKzIyNCw3IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDQpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVx
LCByZWdUNCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJl
Z1QyKSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1Q0
LCBqc1JlZ1QxMCwganNSZWdUMzIpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3Qz
MihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTYwMywxNzggKzIz
NSwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
CiAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Db21wYXJlU3RyaWN0RXEsIHJlZ1Q0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVTdHJpY3RFcSwgcmVnVDQsIGpzUmVnVDEwLCBqc1JlZ1QzMik7CiAgICAgZW1pdEp1bXBTbG93
VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BUb051bWJlcj4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLQotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMSwgcmVnVDApOwotCi0gICAgSnVtcCBpc0lu
dDMyID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJv
dmVPckVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKLSAg
ICBpc0ludDMyLmxpbmsodGhpcyk7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKLSAgICBpZiAoc3JjICE9IGRzdCkKLSAg
ICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRf
b3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewot
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1lcmljPigp
OwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIEpTVmFsdWVSZWdzIGFyZ3Vt
ZW50VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywgcmVnVDEsIHJlZ1QwKTsKLQotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJbnQocmVnVDAp
KTsKLSAgICBKdW1wIGlzQmlnSW50ID0ganVtcCgpOwotCi0gICAgaXNOb3RDZWxsLmxpbmsodGhp
cyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIoYXJndW1lbnRWYWx1ZVJlZ3Ms
IHJlZ1QyKSk7Ci0gICAgaXNCaWdJbnQubGluayh0aGlzKTsKLQotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwotICAgIGlmIChz
cmMgIT0gZHN0KQotICAgICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwotfQotCi12
b2lkIEpJVDo6ZW1pdF9vcF90b19zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFRvU3RyaW5nPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QxLCByZWdUMCk7Ci0KLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdENlbGwocmVnVDEpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0
cmluZyhyZWdUMCkpOwotCi0gICAgaWYgKHNyYyAhPSBkc3QpCi0gICAgICAgIGVtaXRTdG9yZShk
c3QsIHJlZ1QxLCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3RvX29iamVjdChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9PYmplY3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRl
Y29kZS5tX29wZXJhbmQ7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDEs
IHJlZ1QwKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMSkpOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7Ci0KLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKLSAgICBp
ZiAoc3JjICE9IGRzdCkKLSAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKLX0K
LQotdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cENhdGNoPigpOwotCi0gICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwotCi0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1fdm0pLCByZWdUMyk7Ci0gICAgLy8gb3BlcmF0aW9uVGhyb3cgcmV0dXJucyB0aGUgY2FsbEZy
YW1lIGZvciB0aGUgaGFuZGxlci4KLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxG
cmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgc3RvcmVQdHIo
VHJ1c3RlZEltbVB0cihudWxscHRyKSwgQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNh
dGNoT2Zmc2V0KCkpKTsKLQotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zm
c2V0Rm9yKG1fdW5saW5rZWRDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0KLSAgICAvLyBXaGVuIHRoZSBMTElu
dCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB0aGVyZSBpcyBhIGNoYW5jZSB0aGF0IHdlJ3ZlIGFscmVh
ZHkgdGllcmVkIHVwCi0gICAgLy8gdGhlIHNhbWUgQ29kZUJsb2NrIHRvIGJhc2VsaW5lLCBhbmQg
d2UnbGwgY2F0Y2ggdGhlIGV4Y2VwdGlvbiBpbiB0aGUgYmFzZWxpbmUgSklUIChiZWNhdXNlCi0g
ICAgLy8gd2UgdXBkYXRlZCB0aGUgZXhjZXB0aW9uIGhhbmRsZXJzIHRvIHBvaW50IGhlcmUpLiBC
ZWNhdXNlIHRoZSBMTEludCB1c2VzIGEgZGlmZmVyZW50IHZhbHVlCi0gICAgLy8gaW5zaWRlIHNf
Y29uc3RhbnRzR1BSLCB0aGUgY2FsbGVlIHNhdmVzIHdlIHJlc3RvcmUgYWJvdmUgbWF5IG5vdCBj
b250YWluIHRoZSBjb3JyZWN0IHJlZ2lzdGVyLgotICAgIC8vIFNvIHdlIHJlcGxlbmlzaCBpdCBo
ZXJlLgotICAgIHsKLSAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIHJlZ1QwKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxv
Y2s6Om9mZnNldE9mSklURGF0YSgpKSwgcmVnVDApOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIENvZGVCbG9jazo6SklURGF0YTo6b2Zmc2V0T2ZKSVRDb25zdGFudFBvb2woKSksIHNf
Y29uc3RhbnRzR1BSKTsKLSAgICB9Ci0KLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVj
ayhvcGVyYXRpb25SZXRyaWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUsICZ2bSgpKTsK
LSAgICBKdW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJl
dHVyblZhbHVlR1BSKTsKLSAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwotICAgIGlz
Q2F0Y2hhYmxlRXhjZXB0aW9uLmxpbmsodGhpcyk7Ci0KLSAgICAvLyBOb3cgc3RvcmUgdGhlIGV4
Y2VwdGlvbiByZXR1cm5lZCBieSBvcGVyYXRpb25UaHJvdy4KLSAgICBtb3ZlKHJldHVyblZhbHVl
R1BSLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJl
Z1QxKTsKLQotICAgIGVtaXRTdG9yZShieXRlY29kZS5tX2V4Y2VwdGlvbiwgcmVnVDEsIHJlZ1Qy
KTsKLQotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QyLCBFeGNlcHRpb246OnZhbHVlT2Zmc2V0KCkg
KyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdUMCk7Ci0g
ICAgbG9hZDMyKEFkZHJlc3MocmVnVDIsIEV4Y2VwdGlvbjo6dmFsdWVPZmZzZXQoKSArIE9CSkVD
VF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVnVDEpOwotCi0gICAgZW1pdFN0
b3JlKGJ5dGVjb2RlLm1fdGhyb3duVmFsdWUsIHJlZ1QxLCByZWdUMCk7Ci0KLSNpZiBFTkFCTEUo
REZHX0pJVCkKLSAgICAvLyBGSVhNRTogY29uc2lkZXIgaW5saW5lIGNhY2hpbmcgdGhlIHByb2Nl
c3Mgb2YgZG9pbmcgT1NSIGVudHJ5LCBpbmNsdWRpbmcKLSAgICAvLyBhcmd1bWVudCB0eXBlIHBy
b29mcywgc3RvcmluZyBsb2NhbHMgdG8gdGhlIGJ1ZmZlciwgZXRjCi0gICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU5OAotCi0gICAgY2FsbE9wZXJhdGlv
bk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9m
aWxlLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKLSAgICBhdXRvIHNraXBPU1JF
bnRyeSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwotICAgIGVtaXRSZXN0
b3JlQ2FsbGVlU2F2ZXMoKTsKLSAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBOb1B0clRhZyk7
Ci0gICAgc2tpcE9TUkVudHJ5LmxpbmsodGhpcyk7Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2lkZW50aXR5X3dpdGhfcHJvZmlsZShjb25zdCBJbnN0
cnVjdGlvbiopCi17Ci0gICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBoZXJlLi4u
Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2dldF9wYXJlbnRfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldFBhcmVudFNjb3BlPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBj
dXJyZW50U2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJQYXlsb2FkKGN1cnJlbnRTY29wZSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChi
eXRlY29kZS5tX2RzdCwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGVtaXRFbnRlck9wdGlt
aXphdGlvbkNoZWNrKCk7Ci0gICAgCi0gICAgLy8gRXZlbiB0aG91Z2ggSklUIGNvZGUgZG9lc24n
dCB1c2UgdGhlbSwgd2UgaW5pdGlhbGl6ZSBvdXIgY29uc3RhbnQKLSAgICAvLyByZWdpc3RlcnMg
dG8gemFwIHN0YWxlIHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcK
LSAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCi0gICAg
c2l6ZV90IGNvdW50ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtVmFycygpOwotICAgIGZvciAo
c2l6ZV90IGkgPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1
YWxSZWdpc3RlcnMoKTsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIGVtaXRTdG9yZSh2aXJ0dWFs
UmVnaXN0ZXJGb3JMb2NhbChpKSwganNVbmRlZmluZWQoKSk7Ci0KLSAgICBKSVRTbG93UGF0aENh
bGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2VudGVy
KTsKLSAgICBzbG93UGF0aENhbGwuY2FsbCgpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFNjb3BlPigpOwotICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBlbWl0R2V0RnJvbUNhbGxG
cmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlZ1QwKTsKLSAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgcmVnVDAp
OwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29w
X2NoZWNrX3Rkeihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2hlY2tUZHo+KCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclRhZyhieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdp
c3RlciwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKLX0K
LQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAppbmRleCBm
MDJmNGFhNTlkOTZhZTE1NTVlYTMyZWMxYTJmNTE3MDVmNGIxZTg2Li4xMTRhNzRkNGU0OTEzNzZk
Y2M1MjVlZDIxNWQxMTljZTUwNzU2ZmE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcApAQCAtMTQ5LDggKzE0OSw4IEBAIHZvaWQgSklUOjpn
ZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY29uc3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUsIFZlY3Rv
cjxTbG93Q2FzZUVuCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29w
X2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIHJldHVyblZhbHVlSlNSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmV0dXJuVmFsdWVKU1IpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQog
CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwpAQCAt
MjgwLDggKzI4MCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlCiAgICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVy
blZhbHVlR1BSKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVH
UFIpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlSlNS
KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVKU1IpOwogI2Vu
ZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwpAQCAtMTI3Myw4ICsxMjczLDggQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmUKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNs
b3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRp
b25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVKU1IpOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVKU1IpOwogI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBDYWxsKCkpOwpAQCAtMTM2OSw4ICsxMzY5LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2wKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X2lk
X3ByZXBhcmVDYWxsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1
bHRWUmVnLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmV0dXJuVmFsdWVKU1IpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
VlJlZywgcmV0dXJuVmFsdWVKU1IpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwpA
QCAtMTQxMyw4ICsxNDEzLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhp
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmVzdWx0SlNSKTsKIH0KIAotI2lmIFVTRShKU1ZBTFVF
NjQpCi0KICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVy
YXRvcihWTSYgdm0pCiB7CkBAIC0xNDUyLDggKzE0NTAsNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5l
cmF0bwogfQogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0jZW5kaWYKLQog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKIHsKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwpAQCAtMTUwMywxNSArMTQ5OSwx
MyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLAogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdl
dENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQ
Uik7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUdQ
Uik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVKU1Ip
OworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZywgcmV0dXJuVmFsdWVKU1Ip
OwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiAgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCi0jaWYgVVNFKEpTVkFMVUU2
NCkKLQogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpc19wcmVwYXJl
Q2FsbEdlbmVyYXRvcihWTSYgdm0pCiB7CkBAIC0xNTUxLDggKzE1NDUsNiBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfYnlfaWRfd2l0aF90
aGlzX3ByZXBhcmVDYQogfQogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0j
ZW5kaWYKLQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BQdXRCeUlkPigpOwpAQCAtMjkzMSw4ICsyOTIzLDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAKICAgICBkb25lQ2FzZXMubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCByZXR1cm5WYWx1ZUpTUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
dHVyblZhbHVlSlNSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VudW1lcmF0b3JfZ2V0
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMjk2Niw3ICsyOTU4LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24KICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRT
dHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwogCiAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CiAgICAg
SnVtcCBkb25lID0ganVtcCgpOwogCiAgICAgc2xvd0Nhc2VzLmxpbmsodGhpcyk7CkBAIC0zMDI2
LDYzICszMDE4LDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9w
ZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0CiAKICNlbmRpZgogCit2b2lk
IEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQoreworICAgIC8vIHZhbHVlIG1heSBi
ZSBpbnZhbGlkIFZpcnR1YWxSZWdpc3RlciBpZiBtb2RlIGlzIFVuY29uZGl0aW9uYWxXcml0ZUJh
cnJpZXIgb3IgU2hvdWxkRmlsdGVyQmFzZS4KKyAgICBKdW1wIHZhbHVlTm90Q2VsbDsKKyAgICBp
ZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VB
bmRWYWx1ZSkgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0KLXZvaWQgSklUOjplbWl0V3JpdGVCYXJy
aWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJh
cnJpZXJNb2RlIG1vZGUpCi17Ci0gICAgLy8gdmFsdWUgbWF5IGJlIGludmFsaWQgVmlydHVhbFJl
Z2lzdGVyIGlmIG1vZGUgaXMgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciBvciBTaG91bGRGaWx0
ZXJCYXNlLgotICAgIEp1bXAgdmFsdWVOb3RDZWxsOwotICAgIGlmIChtb2RlID09IFNob3VsZEZp
bHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSB7CiAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICAgICAgdmFsdWVOb3RD
ZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICB9Ci0KLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG93bmVyLCByZWdUMCk7Ci0gICAgSnVtcCBvd25lck5vdENlbGw7Ci0gICAgaWYg
KG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVy
QmFzZSkKLSAgICAgICAgb3duZXJOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLQot
ICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwg
cmVnVDAsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRp
b25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIHJlZ1QwKTsKLSAgICBvd25lcklzUmVtZW1i
ZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7Ci0KLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJC
YXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKQotICAgICAgICBvd25lck5v
dENlbGwubGluayh0aGlzKTsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBt
b2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkKLSAgICAgICAgdmFsdWVOb3RDZWxsLmxp
bmsodGhpcyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIs
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQotewotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIHZhbHVlTm90Q2Vs
bDsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkKLSAgICAgICAgdmFsdWVOb3RD
ZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLQotICAgIGVtaXRXcml0ZUJhcnJpZXIob3du
ZXIpOwotCi0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpCi0gICAgICAgIHZhbHVl
Tm90Q2VsbC5saW5rKHRoaXMpOwotfQotCiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotCi12b2lk
IEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQotewotICAgIC8vIHZhbHVlIG1heSBi
ZSBpbnZhbGlkIFZpcnR1YWxSZWdpc3RlciBpZiBtb2RlIGlzIFVuY29uZGl0aW9uYWxXcml0ZUJh
cnJpZXIgb3IgU2hvdWxkRmlsdGVyQmFzZS4KLSAgICBKdW1wIHZhbHVlTm90Q2VsbDsKLSAgICBp
ZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VB
bmRWYWx1ZSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKHZhbHVlLCByZWdU
MCk7CisjZW5kaWYKICAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKICAgICB9CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG93bmVyLCByZWdUMCwgcmVn
VDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIsIGpzUmVnVDEwKTsKICAgICBK
dW1wIG93bmVyTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlIHx8IG1v
ZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKQotICAgICAgICBvd25lck5vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOworICAgICAgICBvd25lck5vdENlbGwgPSBicmFuY2hJZk5v
dENlbGwoanNSZWdUMTApOwogCi0gICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0g
YmFycmllckJyYW5jaCh2bSgpLCByZWdUMSwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4
Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgcmVnVDEp
OworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0o
KSwganNSZWdUMTAucGF5bG9hZEdQUigpLCByZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhj
ZXB0aW9uQ2hlY2sob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCBqc1JlZ1Qx
MC5wYXlsb2FkR1BSKCkpOwogICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlz
KTsKIAogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2UgfHwgbW9kZSA9PSBTaG91bGRG
aWx0ZXJCYXNlQW5kVmFsdWUpCkBAIC0zMDkxLDIyICszMDQ2LDYgQEAgdm9pZCBKSVQ6OmVtaXRX
cml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUs
IFdyaXRlQmEKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklU
OjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwg
V3JpdGVCYXJyaWVyTW9kZSBtb2RlKQotewotICAgIEp1bXAgdmFsdWVOb3RDZWxsOwotICAgIGlm
IChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJUYWcodmFsdWUsIHJlZ1QwKTsKLSAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZO
b3RDZWxsKHJlZ1QwKTsKLSAgICB9Ci0KLSAgICBlbWl0V3JpdGVCYXJyaWVyKG93bmVyKTsKLQot
ICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKQotICAgICAgICB2YWx1ZU5vdENlbGwu
bGluayh0aGlzKTsKLX0KLQotI2VuZGlmCi0KIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZp
cnR1YWxSZWdpc3RlciBvd25lciwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogewogICAgIEFTU0VS
VChtb2RlID09IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIgfHwgbW9kZSA9PSBTaG91bGRGaWx0
ZXJCYXNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZh
Y2VKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaAppbmRl
eCBmMTg2ZmI4MmIxZmY5NzhkOGY2N2E0ZjA1MzM4ZTljZmI0YzgyMzc0Li40YjQyOWEyNjdjY2Vl
MmM2NDczZWRhNzFjOWZjOTQ1NGM1ODIzMDBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KU0ludGVyZmFjZUpJVC5oCkBAIC00OSwxNSArNDksNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVy
SUQgZHN0KTsKICAgICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lz
dGVyLCBGUFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpOwogCi0jaWYgVVNFKEpT
VkFMVUUzMl82NCkKLSAgICAgICAgaW5saW5lIEp1bXAgZW1pdEp1bXBJZk5vdEpTQ2VsbChWaXJ0
dWFsUmVnaXN0ZXIpOwotI2VuZGlmCi0KLSAgICAgICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFt
ZUhlYWRlclB0cihWaXJ0dWFsUmVnaXN0ZXIgZW50cnksIFJlZ2lzdGVySUQgdG8sIFJlZ2lzdGVy
SUQgZnJvbSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBlbWl0UHV0VG9DYWxs
RnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpOwotICAg
ICAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcih2b2lkKiB2YWx1ZSwgVmlydHVhbFJl
Z2lzdGVyIGVudHJ5KTsKLSAgICAgICAgdm9pZCBlbWl0UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVy
KFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KTsKLQogICAgICAgICBWTSog
dm0oKSBjb25zdCB7IHJldHVybiBtX3ZtOyB9CiAKICAgICAgICAgVk0qIG1fdm07CkBAIC02NSwx
NyArNTYsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAg
IGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRKU0Nl
bGwoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkKQot
ICAgIHsKLSAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIHBheWxv
YWQpOwotICAgICAgICByZXR1cm4gZW1pdEp1bXBJZk5vdEpTQ2VsbCh2aXJ0dWFsUmVnaXN0ZXIp
OwotICAgIH0KLQotICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJ
VDo6ZW1pdEp1bXBJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3RlciA8IFZpcnR1YWxSZWdpc3RlcihG
aXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCkpOworICAgICAgICBsb2FkUHRyKHBheWxvYWRGb3Io
dmlydHVhbFJlZ2lzdGVyKSwgcGF5bG9hZCk7CiAgICAgICAgIHJldHVybiBicmFuY2gzMihOb3RF
cXVhbCwgdGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxs
VGFnKSk7CiAgICAgfQotICAgIAorCiAgICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpT
SW50ZXJmYWNlSklUOjplbWl0TG9hZEludDMyKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0
ZXIsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3Rl
ciA8IFZpcnR1YWxSZWdpc3RlcihGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCkpOwpAQCAtOTcs
MTYgKzgzLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBkb25lLmxpbmsodGhpcyk7CiAg
ICAgICAgIHJldHVybiBub3RJbnQ7CiAgICAgfQotCi0jZW5kaWYKLQotI2lmIFVTRShKU1ZBTFVF
NjQpCisjZWxpZiBVU0UoSlNWQUxVRTY0KQogICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVt
cCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxS
ZWdpc3RlciwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBsb2FkNjQoYWRkcmVzc0Zv
cih2aXJ0dWFsUmVnaXN0ZXIpLCBkc3QpOwogICAgICAgICByZXR1cm4gYnJhbmNoSWZOb3RDZWxs
KGRzdCk7CiAgICAgfQotICAgIAorCiAgICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpT
SW50ZXJmYWNlSklUOjplbWl0TG9hZEludDMyKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0
ZXIsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAgICAgICAgbG9hZDY0KGFkZHJlc3NGb3Iodmly
dHVhbFJlZ2lzdGVyKSwgZHN0KTsKQEAgLTEyOSwzNSArMTEyLDYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgfQogI2VuZGlmCiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6
OmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFZpcnR1YWxSZWdpc3RlciBlbnRyeSwgUmVn
aXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9tKQotICAgIHsKLSAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKGZyb20sIGVudHJ5Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKLSAgICB9
Ci0KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6OmVtaXRQdXRUb0NhbGxG
cmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKLSAgICB7
Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgc3RvcmVQdHIoZnJvbSwgcGF5bG9hZEZv
cihlbnRyeSkpOwotI2Vsc2UKLSAgICAgICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9yKGVudHJ5
KSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VK
SVQ6OmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcih2b2lkKiB2YWx1ZSwgVmlydHVhbFJlZ2lzdGVy
IGVudHJ5KQotICAgIHsKLSAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cih2YWx1ZSksIGFk
ZHJlc3NGb3IoZW50cnkpKTsKLSAgICB9Ci0KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRl
cmZhY2VKSVQ6OmVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBW
aXJ0dWFsUmVnaXN0ZXIgZW50cnkpCi0gICAgewotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAg
ICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCB0YWdGb3IoZW50cnkp
KTsKLSAgICAgICAgc3RvcmUzMihmcm9tLCBwYXlsb2FkRm9yKGVudHJ5KSk7Ci0jZWxzZQotICAg
ICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZW50cnkpKTsKLSNlbmRpZgotICAgIH0KLQog
fSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445093</attachid>
            <date>2021-11-24 05:51:29 -0800</date>
            <delta_ts>2021-11-30 02:40:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233424-20211124135127.patch</filename>
            <type>text/plain</type>
            <size>148582</size>
            <attacher name="Geza Lore">glore</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MTI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
ZjJhM2Q1MWYxMGQ1YzZlYmM0MWNkN2RmNzUwOTQzZDNlNzMzNjAzLi40ZjVjMTJlMmY4NWRlYjIx
MDU1ZDg1NDkyM2ViMzU3MWUzMzNkYTk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMTggQEAKKzIwMjEtMTEtMjIgIEdlemEgTG9yZSAgPGdsb3JlQGlnYWxpYS5jb20+CisK
KyAgICAgICAgW0pTQ10gVW5pZnkgbW9zdCBCYXNlbGluZSBvcHMgYmV0d2VlbiBKU1ZBTFVFNjQg
YW5kIEpTVkFMVUUzMl82NAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjMzNDI0CisKKyAgICAgICAgVGhpcyBwYXRjaCB1bmlmaWVzIHRoZSBCYXNlbGlu
ZSBKSVQgaW1wbGVtZW50YXRpb25zIG9mIG1vc3QgYnl0ZWNvZGUKKyAgICAgICAgb3BzIGJldHdl
ZW4gdGhlIEpTVkFMVUUzMl82NCBhbmQgSlNWQUxVRTY0IHBsYXRmb3Jtcy4gVGhlcmUgYXJlIHZl
cnkKKyAgICAgICAgZmV3IGNoYW5nZXMgdG8gdGhlIGdlbmVyYXRlZCBjb2RlIG9uIEpTVkFMVUU2
NCAoYW5kIGFsbCBhcmUgZmFpcmx5CisgICAgICAgIHRyaXZpYWwsIGUuZy46IHJlbW92YWwgb2Yg
cmVkdW5kYW50IG1vdmVzIGluIHRoZSBzbG93IHBhdGgpLCBhcGFydAorICAgICAgICBmcm9tIG1h
Y2hpbmUgcmVnaXN0ZXIgc3Vic3RpdHV0aW9ucy4gTXkgbWVhc3VyZW1lbnRzIG9uIHg4Nl82NAor
ICAgICAgICBpbmRpY2F0ZSB0aGUgcGF0Y2ggaXMgcGVyZm9ybWFuY2UgbmV1dHJhbCB0aGVyZSAo
d2hpY2ggaXMgd2hhdCB3ZQorICAgICAgICBleHBlY3QpLgorCisgICAgICAgIE9uIEFSTXY3L1Ro
dW1iLTIgSmV0U3RyZWFtMiBzaG93cyBhIDAuNCUgaW1wcm92ZW1lbnQuIFRoaXMgaXMgZHVlIHRv
CisgICAgICAgIHNvbWUgb2YgdGhlIGltcHJvdmVkIGltcGxlbWVudGF0aW9ucyBwaWNrZWQgdXAg
ZnJvbSB0aGUgSlNWQUxVRTY0CisgICAgICAgIHZlcnNpb25zLgorCisgICAgICAgIEFsc28gcmVt
b3ZlIHZhcmlvdXMgdW51c2VkIGNvZGUuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAq
IGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
U3R1YkluZm86OmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyk6CisgICAg
ICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBl
cnM6OmJyYW5jaElmQm9vbGVhbik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YnJh
bmNoSWZOb3RCb29sZWFuKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjppc1VuZGVm
aW5lZCk6CisgICAgICAgICogaml0L0dQUkluZm8uaDoKKyAgICAgICAgKiBqaXQvSklULmNwcDoK
KyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0aWMuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdW5zaWduZWQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBh
cmVVbnNpZ25lZEFuZEp1bXBJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVV
bnNpZ25lZEltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93
SW1wbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbmMpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfZGVjKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX21vZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfYml0bm90KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UmlnaHRTaGlmdEZh
c3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TWF0aElDRmFzdCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdE1hdGhJQ1Nsb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGl2
KToKKyAgICAgICAgKiBqaXQvSklUQXJpdGhtZXRpYzMyXzY0LmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKiBqaXQvSklUSW5s
aW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2Fk
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmxvYWRDb2RlQmxvY2tDb25zdGFudFBheWxvYWQpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVz
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2Up
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZik6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9pc19lbXB0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZp
bmVkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2Jvb2xlYW4pOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2lzX2JpZ19pbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5
cGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF90b19wcm9wZXJ0eV9rZXkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfbm90KToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2plcV9wdHIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9wdHIp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfbmVxKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BTdHJpY3RFcSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19udW1iZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfdG9fbnVtZXJpYyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19zdHJpbmcp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9wYXJl
bnRfc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3RvX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfY2hlY2tfdGR6KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19yZWdleHApOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2dldF9wcm90b3R5cGVfb2YpOgorICAgICAgICAqIGppdC9KSVRPcGNv
ZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcEVxQ29tbW9uKToKKyAg
ICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BFcVNsb3dDb21tb24pOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVxKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2plcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9q
bmVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9lcSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfbmVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9q
ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2puZXEpOgorICAgICAgICAoSlND
OjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVxQ29tbW9uKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3N0cmljdGVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25zdHJpY3RlcSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3Bfam5zdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfanN0
cmljdGVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKToKKyAg
ICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6Omdl
bmVyYXRlR2V0QnlWYWxTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X3ByaXZhdGVfbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X2lkX2RpcmVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRXcml0ZUJhcnJpZXIpOgorICAgICAgICAqIGppdC9KU0ludGVyZmFjZUpJ
VC5oOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRKU0NlbGwpOgorCiAy
MDIxLTExLTIyICBHZXphIExvcmUgIDxnbG9yZUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtKU0Nd
IE1ha2Ugc2hhcmluZyBvZiB1bmxpbmtlZCBiYXNlbGluZSBjb2RlIHBvc3NpYmxlIG9uIEpTVkFM
VUUzMl82NApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA3ZDc2OGI3ODY0NjhiNzhl
NjU2MzZkODNiYzI4ZjcyOWJjZTc4YjVjLi5hMzk4ZjQ3Y2E0MDViMjQ4NzU4YjgzMzcyNGM1ZDE5
ZTYxMWIxNzlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDcyOSw3ICs0NzI5
LDYgQEAKIAkJQTc0REVGOEUxODJEOTkxNDAwNTIyQzIyIC8qIE1hcEl0ZXJhdG9yUHJvdG90eXBl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcEl0ZXJhdG9yUHJvdG90eXBl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NERFRjhGMTgyRDk5MTQwMDUyMkMy
MiAvKiBKU01hcEl0ZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTTWFwSXRlcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzRE
RUY5MDE4MkQ5OTE0MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU01hcEl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUE3NTcwNkREMTE4QTJCQ0YwMDU3Rjg4RiAvKiBKSVRBcml0aG1ldGljMzJfNjQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUQXJpdGhtZXRpYzMyXzY0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc1RUU5QjAxOEFBQjdFMjAwQUFE
MDQzIC8qIEJ1aWx0aW5OYW1lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBC
dWlsdGluTmFtZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc2N0I1QjMxN0Ew
Qjk2NTAwNjNEOTQwIC8qIERGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBo
YXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NjdCNUI0MTdBMEI5NjUwMDYzRDk0MCAvKiBE
RkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR0xv
b3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC02Mzc3LDcgKzYzNzYsNiBAQAogCQkJCUZFMTIyMDI2MUJFN0Y1NjQwMDM5RTZGMiAvKiBKSVRB
ZGRHZW5lcmF0b3IuaCAqLywKIAkJCQkwRjc1QTA2NTIwMTNFNEVGMDAzOEUyQ0YgLyogSklUQWxs
b2NhdG9yLmggKi8sCiAJCQkJODZBOTBFQ0YwRUU3RDUxRjAwQUIzNTBEIC8qIEpJVEFyaXRobWV0
aWMuY3BwICovLAotCQkJCUE3NTcwNkREMTE4QTJCQ0YwMDU3Rjg4RiAvKiBKSVRBcml0aG1ldGlj
MzJfNjQuY3BwICovLAogCQkJCUZFM0EwNkFEMUMxMENCNkYwMDM5MEZERCAvKiBKSVRCaXRBbmRH
ZW5lcmF0b3IuY3BwICovLAogCQkJCUZFM0EwNkFFMUMxMENCNkYwMDM5MEZERCAvKiBKSVRCaXRB
bmRHZW5lcmF0b3IuaCAqLywKIAkJCQlGRTNBMDZBNzFDMTBCQzc0MDAzOTBGREQgLyogSklUQml0
QmluYXJ5T3BHZW5lcmF0b3IuaCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCBl
MGRlNmI3MmY4YzA4Y2Y0MGQwOGQ4MzQzOWQyN2VmMDc3YzlmY2IwLi5jOWUzZWExYzkwMmQ3NWEz
N2RkY2ZhZTY3YmMyOWVmYTliNDcwMDVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CkBA
IC02MzksNyArNjM5LDYgQEAgaml0L0ludHJpbnNpY0VtaXR0ZXIuY3BwCiBqaXQvSklULmNwcAog
aml0L0pJVEFkZEdlbmVyYXRvci5jcHAKIGppdC9KSVRBcml0aG1ldGljLmNwcAotaml0L0pJVEFy
aXRobWV0aWMzMl82NC5jcHAKIGppdC9KSVRCaXRBbmRHZW5lcmF0b3IuY3BwCiBqaXQvSklUQml0
T3JHZW5lcmF0b3IuY3BwCiBqaXQvSklUQml0WG9yR2VuZXJhdG9yLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCmlu
ZGV4IGFhN2VjMDFlMzg0OGFkYTlmY2FiOTUwNDIzMmY2ODdjMDM0OGMzMTAuLjA0NWRlZmVkYjE1
NGZkMDg5YTJiNjhkY2Q2MzE4MTE5NzEwMDFlMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKQEAgLTg5Nyw2ICs4
OTcsMTIgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci54b3JxX2lyKGltbS5tX3ZhbHVl
LCBzcmNEZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIHhvcjY0KFRydXN0ZWRJbW0zMiBpbW0sIFJl
Z2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtb3ZlKHNyYywg
ZGVzdCk7CisgICAgICAgIHhvcjY0KGltbSwgZGVzdCk7CisgICAgfQorCiAgICAgdm9pZCB4b3I2
NChUcnVzdGVkSW1tNjQgaW1tLCBSZWdpc3RlcklEIHNyY0Rlc3QpCiAgICAgewogICAgICAgICBt
b3ZlKGltbSwgc2NyYXRjaFJlZ2lzdGVyKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKaW5kZXggOTAxZmM1MzY5YTdjZTY4
YzM3YTcyMWE5YjRjYTk0ZWQzMjdmZGNmZi4uZDIxMDQxNzQyYmQ0OTViNjZlY2E0NTA4ZDczYjhk
MzhjYWNmZjE1YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uY3BwCkBAIC01NjQsMTkgKzU2NCwxNCBAQCB2b2lkIFN0cnVjdHVy
ZVN0dWJJbmZvOjppbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oQ29kZUJs
b2NrKiwgVW5saQogICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjoKICAgICAgICAgaGFz
Q29uc3RhbnRJZGVudGlmaWVyID0gZmFsc2U7CiAgICAgICAgIHByb3RvdHlwZUlzS25vd25PYmpl
Y3QgPSBmYWxzZTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBiYXNlR1BSID0gQmFzZWxp
bmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZTsKLSAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGlu
ZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3VsdDsKLSAgICAgICAgcmVncy5wcm90b3R5cGVHUFIg
PSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvOwotICAgICAgICBtX3N0dWJJbmZv
R1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbzsKLSNlbGlmIFVTRShK
U1ZBTFVFMzJfNjQpCiAgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3Rl
cnM6OnZhbHVlSlNSLnBheWxvYWRHUFIoKTsKLSAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUlu
c3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3VsdEdQUjsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGlu
ZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnJlc3VsdEpTUi5wYXlsb2FkR1BSKCk7CiAgICAgICAgIHJl
Z3MucHJvdG90eXBlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90b0pTUi5w
YXlsb2FkR1BSKCk7CiAgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZS
ZWdpc3RlcnM6OnN0dWJJbmZvR1BSOwotICAgICAgICBiYXNlVGFnR1BSID0gSW52YWxpZEdQUlJl
ZzsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBiYXNlVGFnR1BSID0gQmFzZWxpbmVJ
bnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZUpTUi50YWdHUFIoKTsKICAgICAgICAgdmFsdWVUYWdH
UFIgPSBJbnZhbGlkR1BSUmVnOwotICAgICAgICB2LnByb3BlcnR5VGFnR1BSID0gSW52YWxpZEdQ
UlJlZzsKKyAgICAgICAgdi5wcm9wZXJ0eVRhZ0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lz
dGVyczo6cHJvdG9KU1IudGFnR1BSKCk7CiAjZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1i
bHlIZWxwZXJzLmgKaW5kZXggOTg3MmQ1NjlkNDMzYjllMjc0ZGFkM2MzMmVjNWMzYjM0ZGRhOTc4
MC4uZTZjNzM2YzY3Y2ExMDJkNTI1NzBhNzE4OWMxMDA2MmVlYTVjNDI3YyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCkBAIC04MjEsOCArODIxLDcgQEAg
cHVibGljOgogICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBBU1NFUlQodGVtcEdQ
UiAhPSBJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgbW92ZShncHIsIHRlbXBHUFIpOwotICAgICAg
ICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHRlbXBHUFIpOworICAg
ICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIGdwciwgdGVtcEdQ
Uik7CiAgICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQoWmVybywgdGVtcEdQUiwgVHJ1c3RlZElt
bTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpOwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BB
UkFNKHRlbXBHUFIpOwpAQCAtODQ1LDggKzg0NCw3IEBAIHB1YmxpYzoKICAgICB7CiAjaWYgVVNF
KEpTVkFMVUU2NCkKICAgICAgICAgQVNTRVJUKHRlbXBHUFIgIT0gSW52YWxpZEdQUlJlZyk7Ci0g
ICAgICAgIG1vdmUoZ3ByLCB0ZW1wR1BSKTsKLSAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlRmFsc2UpLCB0ZW1wR1BSKTsKKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlRmFsc2UpLCBncHIsIHRlbXBHUFIpOwogICAgICAgICByZXR1cm4gYnJh
bmNoVGVzdDY0KE5vblplcm8sIHRlbXBHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQz
Ml90Pih+MSkpKTsKICNlbHNlCiAgICAgICAgIFVOVVNFRF9QQVJBTSh0ZW1wR1BSKTsKQEAgLTEw
MzMsNiArMTAzMSwxNSBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAKKyAgICB2b2lkIGlzVW5k
ZWZpbmVkKEpTVmFsdWVSZWdzIHJlZ3MsIEdQUlJlZyBkc3QpCisgICAgeworI2lmIFVTRShKU1ZB
TFVFNjQpCisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVncy5wYXlsb2FkR1BSKCksIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIGRzdCk7CisjZWxpZiBVU0UoSlNWQUxV
RTMyXzY0KQorICAgICAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ3MudGFnR1BSKCksIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBkc3QpOworI2VuZGlmCisgICAgfQorCiAgICAg
Ly8gTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmVzcGVjdCBNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLgogICAgIEp1bXAgYnJhbmNoSWZVbmRlZmluZWQoR1BSUmVnIGdwcikKICAgICB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCmluZGV4IDJmOGU1NDQ3M2Y3MjEzYzkyZDg4
NmExOTZhZTJjOTFjMWU0NDZkYzkuLmYxYzk4ZDkzYmUzZDQxMDhiMTUzZTMzMTc5NjlmYmEyZDQx
NDYzODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCkBAIC05MzksOSArOTM5LDEx
IEBAIHB1YmxpYzoKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIHN0YXRpYyBjb25zdGV4cHIgSlNW
YWx1ZVJlZ3MganNSZWdUMTAgeyBHUFJJbmZvOjpyZWdUMCB9OwogICAgIHN0YXRpYyBjb25zdGV4
cHIgSlNWYWx1ZVJlZ3MganNSZWdUMzIgeyBHUFJJbmZvOjpyZWdUMiB9OworICAgIHN0YXRpYyBj
b25zdGV4cHIgSlNWYWx1ZVJlZ3MganNSZWdUNTQgeyBHUFJJbmZvOjpyZWdUNCB9OwogI2VsaWYg
VVNFKEpTVkFMVUUzMl82NCkKICAgICBzdGF0aWMgY29uc3RleHByIEpTVmFsdWVSZWdzIGpzUmVn
VDEwIHsgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwIH07CiAgICAgc3RhdGljIGNvbnN0
ZXhwciBKU1ZhbHVlUmVncyBqc1JlZ1QzMiB7IEdQUkluZm86OnJlZ1QzLCBHUFJJbmZvOjpyZWdU
MiB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MganNSZWdUNTQgeyBHUFJJbmZv
OjpyZWdUNSwgR1BSSW5mbzo6cmVnVDQgfTsKICNlbmRpZgogCiAgICAgLy8gUmV0dXJuIHZhbHVl
IHJlZ2lzdGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKaW5kZXggMGM2YmYzZDFlNzUwNjM2
YjgwNzAwMDQ4NDRlZDNlNTM2MzMwM2E4MS4uMmIzMWNhZTAxYmJiY2FjMDRhN2VkZDMxMzg5YWQ5
ZGViODA2ZjgwNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcApAQCAtMTI2LDE2ICsxMjYs
NiBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKQogfQogI2VuZGlmCiAK
LXZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGUoV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGlm
ICghc2V0IHx8IHNldC0+c3RhdGUoKSA9PSBJc0ludmFsaWRhdGVkKSB7Ci0gICAgICAgIGFkZFNs
b3dDYXNlKEp1bXAoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mU3Rh
dGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwotfQotCiB2b2lkIEpJVDo6ZW1p
dE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRlclRvU2V0KQogewogICAgIGF1dG8g
b2sgPSBicmFuY2hUZXN0UHRyKFplcm8sIHBvaW50ZXJUb1NldCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAppbmRleCBkNjMwNjZmNzkwNzAwNDcyYzk5NjNlYzgzNTA3NzFjMmNhZDRjMGNjLi41NGQ1
ODJlMGZmYmM0ZTA4NGQ5NzQwNWU4MjQwOGFkMGE0MmExY2ExIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgKQEAgLTI1NCw4ICsyNTQsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwcml2YXRlOgog
ICAgICAgICB2b2lkIGxvYWRHbG9iYWxPYmplY3QoR1BSUmVnKTsKICAgICAgICAgdm9pZCBsb2Fk
Q29kZUJsb2NrQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyLCBKU1ZhbHVlUmVncyk7Ci0jaWYgVVNF
KEpTVkFMVUUzMl82NCkKICAgICAgICAgdm9pZCBsb2FkQ29kZUJsb2NrQ29uc3RhbnRQYXlsb2Fk
KFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAg
ICAgICAgdm9pZCBsb2FkQ29kZUJsb2NrQ29uc3RhbnRUYWcoVmlydHVhbFJlZ2lzdGVyLCBSZWdp
c3RlcklEKTsKICNlbmRpZgogCkBAIC0zMTMsMzEgKzMxMywzNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdFB1dENhbGxS
ZXN1bHQoY29uc3QgT3AmKTsKIAorI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPiB2b2lkIGNvbXBpbGVPcFN0cmljdEVxKGNvbnN0IEluc3RydWN0aW9uKik7
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPiB2b2lkIGNvbXBpbGVPcFN0cmljdEVxSnVt
cChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICBlbnVtIGNsYXNzIENvbXBpbGVPcEVxVHlw
ZSB7IEVxLCBORXEgfTsKLSAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0
KTsKLSAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIp
OwotICAgICAgICAKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHZvaWQgY29tcGls
ZU9wRXFDb21tb24oVmlydHVhbFJlZ2lzdGVyIHNyYzEsIFZpcnR1YWxSZWdpc3RlciBzcmMyKTsK
KyAgICAgICAgdm9pZCBjb21waWxlT3BFcVNsb3dDb21tb24oVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGNvbXBpbGVPcFN0cmljdEVxQ29tbW9uKFZpcnR1
YWxSZWdpc3RlciBzcmMxLCAgVmlydHVhbFJlZ2lzdGVyIHNyYzIpOworI2VuZGlmCisKICAgICAg
ICAgZW51bSBXcml0ZUJhcnJpZXJNb2RlIHsgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciwgU2hv
dWxkRmlsdGVyQmFzZSwgU2hvdWxkRmlsdGVyVmFsdWUsIFNob3VsZEZpbHRlckJhc2VBbmRWYWx1
ZSB9OwogICAgICAgICAvLyB2YWx1ZSByZWdpc3RlciBpbiB3cml0ZSBiYXJyaWVyIGlzIHVzZWQg
YmVmb3JlIGFueSBzY3JhdGNoIHJlZ2lzdGVycwogICAgICAgICAvLyBzbyBtYXkgc2FmZWx5IGJl
IHRoZSBzYW1lIGFzIGVpdGhlciBvZiB0aGUgc2NyYXRjaCByZWdpc3RlcnMuCiAgICAgICAgIHZv
aWQgZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFdyaXRlQmFycmllck1v
ZGUpOwogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVy
LCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUpOwotICAgICAgICB2b2lk
IGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBX
cml0ZUJhcnJpZXJNb2RlKTsKICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCog
b3duZXIpOwogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyKTsKIAot
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2
b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBHUFJSZWcpOwotI2Vu
ZGlmCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2b2lkIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBKU1ZhbHVlUmVncyk7CiAKLSAgICAgICAgLy8g
VGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHByb2ZpbGUgaXMgaW4gcmVnVDAgKHJlZ1Qx
L3JlZ1QwIG9uIEpTVkFMVUUzMl82NCkuCi0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZUlmUHJvZmlsZWRPcGNvZGUoLi4uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
Ci0gICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRh
ZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+Ci0gICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKTsKKyAgICAg
ICAgc3RhdGljIGlubGluZSBjb25zdGV4cHIgYm9vbCBpc19wcm9maWxlZF9vcCA9IHN0ZDo6aXNf
c2FtZV92PGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjsK
KyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CisgICAgICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8
aXNfcHJvZmlsZWRfb3A8T3A+LCB2b2lkPgorICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
SWZQcm9maWxlZE9wY29kZShPcCBieXRlY29kZSkKKyAgICAgICAgeyAvLyBUaGlzIGFzc3VtZXMg
dGhhdCB0aGUgdmFsdWUgdG8gcHJvZmlsZSBpcyBpbiBqc1JlZ1QxMC4KKyAgICAgICAgICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIGpzUmVnVDEwKTsKKyAgICAgICAgfQorICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KKyAgICAgICAgc3RkOjplbmFibGVfaWZfdDwhaXNf
cHJvZmlsZWRfb3A8T3A+LCB2b2lkPgorICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQ
cm9maWxlZE9wY29kZShPcCkKKyAgICAgICAgeyB9CiAKICAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEJ5dGVjb2RlPgogICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2Vs
bChjb25zdCBCeXRlY29kZSYsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNo
R1BSKTsKQEAgLTM0Nyw1NyArMzUzLDIzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgRUNNQU1vZGUgZWNtYU1vZGUoT3ApOwogCi0gICAg
ICAgIC8vIERldGVybWluZXMgdGhlIHR5cGUgb2YgcHJpdmF0ZSBmaWVsZCBhY2Nlc3MgZm9yIGEg
Ynl0ZWNvZGUuCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBQcml2YXRl
RmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtpbmQoT3ApOwotCiAgICAgICAgIHZvaWQgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBKU1ZhbHVlUmVncyBkc3Qp
OwogICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKFZpcnR1YWxSZWdp
c3RlciBzcmMsIFJlZ2lzdGVySUQgZHN0KTsKICAgICAgICAgdm9pZCBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIEpTVmFsdWVSZWdzIHNyYyk7Ci0gICAgICAgIHZv
aWQgZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3RlciwgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVn
aXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwotCi0gICAgICAgIGludDMyX3QgZ2V0
T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpOwotICAgICAgICBkb3VibGUg
Z2V0T3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpOwogCiAjaWYgVVNF
KEpTVkFMVUUzMl82NCkKLSAgICAgICAgYm9vbCBnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVh
bFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgVmlydHVhbFJlZ2lzdGVyJiBvcCwg
aW50MzJfdCYgY29uc3RhbnQpOwotCi0gICAgICAgIHZvaWQgZW1pdExvYWREb3VibGUoVmlydHVh
bFJlZ2lzdGVyLCBGUFJlZ2lzdGVySUQgdmFsdWUpOwotCi0gICAgICAgIHZvaWQgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIHRhZywgUmVnaXN0
ZXJJRCBwYXlsb2FkKTsKICAgICAgICAgdm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKFZp
cnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQgZHN0KTsKLQotICAgICAgICB2b2lkIGVtaXRT
dG9yZShWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQs
IFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBlbWl0
U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRl
eElzSW50MzIgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChWaXJ0dWFsUmVn
aXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQ2VsbCA9IGZhbHNlKTsKLSAg
ICAgICAgdm9pZCBlbWl0U3RvcmVCb29sKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXls
b2FkLCBib29sIGluZGV4SXNCb29sID0gZmFsc2UpOwotCi0gICAgICAgIHZvaWQgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3Rlcik7Ci0gICAgICAgIHZvaWQgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcpOwot
ICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEKTsKLQot
ICAgICAgICAvLyBBcml0aG1ldGljIG9wY29kZSBoZWxwZXJzCi0gICAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBPcD4KLSAgICAgICAgdm9pZCBlbWl0QmluYXJ5RG91YmxlT3AoY29uc3QgSW5zdHJ1
Y3Rpb24gKiwgT3BlcmFuZFR5cGVzLCBKdW1wTGlzdCYgbm90SW50MzJPcDEsIEp1bXBMaXN0JiBu
b3RJbnQzMk9wMiwgYm9vbCBvcDFJc0luUmVnaXN0ZXJzID0gdHJ1ZSwgYm9vbCBvcDJJc0luUmVn
aXN0ZXJzID0gdHJ1ZSk7Ci0KLSNlbHNlIC8vIFVTRShKU1ZBTFVFMzJfNjQpCisjZWxpZiBVU0Uo
SlNWQUxVRTY0KQorICAgICAgICAvLyBNYWNoaW5lIHJlZ2lzdGVyIHZhcmlhbnRzIHB1cmVseSBm
b3IgY29udmVuaWVuY2UKICAgICAgICAgdm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1
YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQgZHN0KTsKLSAgICAgICAgdm9pZCBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJvbSA9IHJlZ1Qw
KTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmVDZWxsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lz
dGVySUQgcGF5bG9hZCwgYm9vbCAvKiBvbmx5IHVzZWQgaW4gSlNWYWx1ZTMyXzY0ICovID0gZmFs
c2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBw
YXlsb2FkKTsKLSAgICAgICAgfQorICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
VmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tKTsKIAotICAgICAgICBKdW1wIGVt
aXRKdW1wSWZCb3RoSlNDZWxscyhSZWdpc3RlcklELCBSZWdpc3RlcklELCBSZWdpc3RlcklEKTsK
LSAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZKU0NlbGwoUmVnaXN0ZXJJRCk7Ci0gICAg
ICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQpOwotICAgICAg
ICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklELCBWaXJ0dWFsUmVn
aXN0ZXIpOwogICAgICAgICBKdW1wIGVtaXRKdW1wSWZOb3RJbnQoUmVnaXN0ZXJJRCwgUmVnaXN0
ZXJJRCwgUmVnaXN0ZXJJRCBzY3JhdGNoKTsKLSAgICAgICAgUGF0Y2hhYmxlSnVtcCBlbWl0UGF0
Y2hhYmxlSnVtcElmTm90SW50KFJlZ2lzdGVySUQpOwotICAgICAgICB2b2lkIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChSZWdpc3RlcklEKTsKLSAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNl
SWZOb3ROdW1iZXIoUmVnaXN0ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SW50KFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQgc2NyYXRjaCk7Ci0jZW5k
aWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RJbnQoUmVnaXN0ZXJJRCk7CisjZW5kaWYKKworICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEludChKU1ZhbHVlUmVncyk7CiAKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoSlNWYWx1ZVJlZ3MpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChKU1ZhbHVlUmVncywgVmlydHVhbFJlZ2lzdGVyKTsKQEAgLTY0Nyw5ICs2MTks
NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2l0ZXJhdG9yX25leHQo
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9u
ZXh0KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwogCi0gICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBib29s
IGlzVW5zaWduZWQpOwotICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBpc1Vu
c2lnbmVkKTsKLQogICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRlKFZpcnR1YWxSZWdpc3RlciBk
c3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlPckJyYW5k
LCBBY2Nlc3NUeXBlKTsKICAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJl
Z2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0
eSwgQWNjZXNzVHlwZSk7CiAKQEAgLTY1OSwxNiArNjI4LDIwIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB2b2lkIGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwog
ICAgICAgICB2b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzLCBHUFJSZWcpOwogICAgICAgICB2b2lkIGVtaXRWYXJSZWFkT25seUNoZWNrKFJlc29s
dmVUeXBlLCBHUFJSZWcgc2NyYXRjaEdQUik7Ci0gICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRl
KFdhdGNocG9pbnRTZXQqKTsKICAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50
KEdQUlJlZyBwb2ludGVyVG9TZXQpOwogCiAgICAgICAgIHZvaWQgZW1pdEluaXRSZWdpc3RlcihW
aXJ0dWFsUmVnaXN0ZXIpOwogCi0gICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVh
ZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKLQogICAgICAgICBib29sIGlz
S25vd25DZWxsKFZpcnR1YWxSZWdpc3Rlcik7CisKICAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFu
dE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAg
IGJvb2wgaXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAg
ZG91YmxlIGdldE9wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgc3JjKTsKKyNl
bmRpZgogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3Rlcik7
CisgICAgICAgIGludDMyX3QgZ2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBz
cmMpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIp
OwogCiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0
eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOb25Qcm9maWxlZEZ1bmN0aW9uPgpA
QCAtNzI5LDEyICs3MDIsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgICAgICBpdGVy
LT5mcm9tLmxpbmsodGhpcyk7CiAgICAgICAgICAgICArK2l0ZXI7CiAgICAgICAgIH0KLSAgICAg
ICAgdm9pZCBsaW5rRHVtbXlTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoIWl0ZXItPmZyb20uaXNTZXQo
KSk7Ci0gICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xv
d0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgVmlydHVh
bFJlZ2lzdGVyKTsKICAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRl
eChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywKICAgICAgICAgICAgIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKaW5kZXggOGY0
ZDgwYjk5Y2ZjOWU5MWZlMjMzZDRiZTkyNmY1NjM3ZjY2ZWM2ZS4uZjg2NzU4MzJhODdjYmVkYWFm
MTZiY2E4NzE1ZjhiMzVjZDVhZjkzMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRBcml0aG1ldGljLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VEFyaXRobWV0aWMuY3BwCkBAIC0xNDQsMTkgKzE0NCwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9q
YmVsb3dlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRf
Y29tcGFyZVVuc2lnbmVkQW5kSnVtcDxPcEpiZWxvd2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEJl
bG93T3JFcXVhbCk7CiB9CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotCiB2b2lkIEpJVDo6ZW1pdF9v
cF91bnNpZ25lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVW5zaWduZWQ+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVn
VDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKExlc3NUaGFuLCByZWdUMCwgVHJ1c3RlZElt
bTMyKDApKSk7Ci0gICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlZ1QwKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMSwganNSZWdUMTApOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChqc1JlZ1QxMCk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTGVzc1RoYW4sIGpzUmVnVDEw
LnBheWxvYWRHUFIoKSwgVHJ1c3RlZEltbTMyKDApKSk7CisgICAgYm94SW50MzIoanNSZWdUMTAu
cGF5bG9hZEdQUigpLCBqc1JlZ1QxMCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1
bHQsIGpzUmVnVDEwKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC0xNzgsNDYgKzE3
Niw0NyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVy
IG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaQogCiAgICAgYm9vbCBkaXNhbGxvd0FsbG9j
YXRpb24gPSBmYWxzZTsKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsKLSAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QwKTsKLSAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AyLCBqc1JlZ1QxMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2Vs
bChqc1JlZ1QxMCkpOwogICAgICAgICBKdW1wTGlzdCBmYWlsdXJlczsKLSAgICAgICAgZW1pdExv
YWRDaGFyYWN0ZXJTdHJpbmcocmVnVDAsIHJlZ1QwLCBmYWlsdXJlcyk7CisgICAgICAgIGVtaXRM
b2FkQ2hhcmFjdGVyU3RyaW5nKGpzUmVnVDEwLnBheWxvYWRHUFIoKSwgcmVnVDAsIGZhaWx1cmVz
KTsKICAgICAgICAgYWRkU2xvd0Nhc2UoZmFpbHVyZXMpOwogICAgICAgICBhZGRKdW1wKGJyYW5j
aDMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmVnVDAsIEltbTMyKGFzU3RyaW5nKGdldENvbnN0YW50
T3BlcmFuZChvcDEpKS0+dHJ5R2V0VmFsdWUoZGlzYWxsb3dBbGxvY2F0aW9uKVswXSkpLCB0YXJn
ZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENo
YXIob3AyKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOwot
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGpzUmVnVDEwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RDZWxsKGpzUmVnVDEwKSk7CiAgICAgICAgIEp1bXBMaXN0IGZhaWx1cmVzOwot
ICAgICAgICBlbWl0TG9hZENoYXJhY3RlclN0cmluZyhyZWdUMCwgcmVnVDAsIGZhaWx1cmVzKTsK
KyAgICAgICAgZW1pdExvYWRDaGFyYWN0ZXJTdHJpbmcoanNSZWdUMTAucGF5bG9hZEdQUigpLCBy
ZWdUMCwgZmFpbHVyZXMpOwogICAgICAgICBhZGRTbG93Q2FzZShmYWlsdXJlcyk7CiAgICAgICAg
IGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIoYXNTdHJpbmcoZ2V0Q29u
c3RhbnRPcGVyYW5kKG9wMikpLT50cnlHZXRWYWx1ZShkaXNhbGxvd0FsbG9jYXRpb24pWzBdKSks
IHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0
YW50SW50KG9wMikpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1Qw
KTsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGpzUmVnVDEwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SW50KGpzUmVnVDEwKTsKICAgICAgICAgaW50MzJfdCBvcDJpbW0gPSBnZXRPcGVy
YW5kQ29uc3RhbnRJbnQob3AyKTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24s
IHJlZ1QwLCBJbW0zMihvcDJpbW0pKSwgdGFyZ2V0KTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gz
Mihjb25kaXRpb24sIGpzUmVnVDEwLnBheWxvYWRHUFIoKSwgSW1tMzIob3AyaW1tKSksIHRhcmdl
dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50
KG9wMSkpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QxKTsKLSAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QxKTsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDIsIGpzUmVnVDMyKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SW50KGpzUmVnVDMyKTsKICAgICAgICAgaW50MzJfdCBvcDFpbW0gPSBnZXRPcGVyYW5kQ29u
c3RhbnRJbnQob3AxKTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb21tdXRlKGNvbmRpdGlv
biksIHJlZ1QxLCBJbW0zMihvcDFpbW0pKSwgdGFyZ2V0KTsKKyAgICAgICAgYWRkSnVtcChicmFu
Y2gzMihjb21tdXRlKGNvbmRpdGlvbiksIGpzUmVnVDMyLnBheWxvYWRHUFIoKSwgSW1tMzIob3Ax
aW1tKSksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ay
LCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AxLCBqc1JlZ1QxMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGpzUmVnVDMy
KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoanNSZWdUMTApOworICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEludChqc1JlZ1QzMik7CiAKLSAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRp
dGlvbiwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRp
dGlvbiwganNSZWdUMTAucGF5bG9hZEdQUigpLCBqc1JlZ1QzMi5wYXlsb2FkR1BSKCkpLCB0YXJn
ZXQpOwogfQogCisKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZVVuc2lnbmVkQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9u
YWxDb25kaXRpb24gY29uZGl0aW9uKQogewpAQCAtMjMxLDE2ICsyMzAsMTYgQEAgdm9pZCBKSVQ6
OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIFJlbGF0aW9uYWwKIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBs
KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdl
dCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgaWYgKGlzT3BlcmFuZENv
bnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJl
Z1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQob3AxLCByZWdUMCk7
CiAgICAgICAgIGludDMyX3Qgb3AyaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMik7CiAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIob3AyaW1tKSks
IHRhcmdldCk7CiAgICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0g
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKG9wMiwgcmVnVDEpOwogICAgICAgICBpbnQzMl90IG9w
MWltbSA9IGdldE9wZXJhbmRDb25zdGFudEludChvcDEpOwogICAgICAgICBhZGRKdW1wKGJyYW5j
aDMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmVnVDEsIEltbTMyKG9wMWltbSkpLCB0YXJnZXQpOwog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7
Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKG9wMSwgcmVnVDApOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChvcDIsIHJlZ1QxKTsKICAgICAgICAgYWRkSnVtcChicmFu
Y2gzMihjb25kaXRpb24sIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CiAgICAgfQogfQpAQCAtMjU4
LDIwICsyNTcsMjAgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IEluc3Ry
dWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGkKIHZvaWQgSklUOjplbWl0X2Nv
bXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9w
MSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7
CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
clBheWxvYWQob3AxLCByZWdUMCk7CiAgICAgICAgIGludDMyX3Qgb3AyaW1tID0gZ2V0T3BlcmFu
ZENvbnN0YW50SW50KG9wMik7CiAgICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIHJlZ1QwLCBJ
bW0zMihvcDJpbW0pLCByZWdUMCk7CiAgICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudElu
dChvcDEpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKG9wMiwgcmVnVDApOwogICAgICAg
ICBpbnQzMl90IG9wMWltbSA9IGdldE9wZXJhbmRDb25zdGFudEludChvcDEpOwogICAgICAgICBj
b21wYXJlMzIoY29tbXV0ZShjb25kaXRpb24pLCByZWdUMCwgSW1tMzIob3AxaW1tKSwgcmVnVDAp
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdU
MCk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKG9wMSwgcmVnVDApOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChvcDIsIHJlZ1QxKTsKICAgICAgICAgY29tcGFyZTMy
KGNvbmRpdGlvbiwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CiAgICAgfQotICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgIGJveEJvb2xlYW4ocmVnVDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwganNSZWdUMTApOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwg
dHlwZW5hbWUgU2xvd09wZXJhdGlvbj4KQEAgLTI5NSwyNiArMjk0LDM3IEBAIHZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJl
Z2lzdGVyIG9wMiwKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVy
YW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKICAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
IAotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIxKTsKLSAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMik7Ci0gICAgICAg
IGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb24sIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOworICAg
ICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJlZEFyZ3VtZW50
R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBh
cmcxSlNSID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMT4oKTsKKyAgICAg
ICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGFyZzJKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxT
bG93T3BlcmF0aW9uLCAyPigpOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ax
LCBhcmcxSlNSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZzJKU1Ip
OworICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uLCBnbG9iYWxPYmplY3RHUFIsIGFyZzFKU1IsIGFyZzJKU1Ip
OwogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6
IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAorICAgIGF1dG8gdW5ib3hEb3VibGUgPSBbdGhpc10oSlNWYWx1ZVJlZ3Mgc3JjLCBGUFJS
ZWcgZHN0KSB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgdGhpcy0+dW5ib3hEb3VibGVX
aXRob3V0QXNzZXJ0aW9ucyhzcmMucGF5bG9hZEdQUigpLCBzcmMucGF5bG9hZEdQUigpLCBkc3Qp
OworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgdGhpcy0+dW5ib3hEb3VibGUoc3Jj
LCBkc3QpOworI2VuZGlmCisgICAgfTsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChv
cDIpKSB7CiAgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICAgICAgaWYgKHN1
cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7Ci0gICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNo
SWZOb3ROdW1iZXIocmVnVDApOwotICAgICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIs
IHJlZ1QwKTsKLSAgICAgICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKKyAg
ICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihqc1JlZ1QxMCwgcmVnVDQp
OworICAgICAgICAgICAgdW5ib3hEb3VibGUoanNSZWdUMTAsIGZwUmVnVDApOwogCiAgICAgICAg
ICAgICBpbnQzMl90IG9wMmltbSA9IGdldENvbnN0YW50T3BlcmFuZChvcDIpLmFzSW50MzIoKTsK
IAotICAgICAgICAgICAgbW92ZShJbW0zMihvcDJpbW0pLCByZWdUMSk7Ci0gICAgICAgICAgICBj
b252ZXJ0SW50MzJUb0RvdWJsZShyZWdUMSwgZnBSZWdUMSk7CisgICAgICAgICAgICBtb3ZlKElt
bTMyKG9wMmltbSksIHJlZ1QyKTsKKyAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJl
Z1QyLCBmcFJlZ1QxKTsKIAogICAgICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoRG91
YmxlKGNvbmRpdGlvbiwgZnBSZWdUMCwgZnBSZWdUMSksIHRhcmdldCk7CiAKQEAgLTMyMyw5ICsz
MzMsOSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdp
c3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsCiAgICAgICAgICAgICBmYWlsMS5saW5rKHRo
aXMpOwogICAgICAgICB9CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJl
Z1QxKTsKLSAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7Ci0gICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDIsIGpzUmVnVDMyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUNCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUNCwganNSZWdUMTAs
IGpzUmVnVDMyKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVy
dCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CkBAIC0zMzQsOSArMzQ0LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLAog
ICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgICAgIGlmIChzdXBwb3J0c0Zs
b2F0aW5nUG9pbnQoKSkgewotICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVt
YmVyKHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7
Ci0gICAgICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMSwgZnBSZWdUMSk7CisgICAgICAgICAg
ICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIoanNSZWdUMzIsIHJlZ1Q0KTsKKyAgICAg
ICAgICAgIHVuYm94RG91YmxlKGpzUmVnVDMyLCBmcFJlZ1QxKTsKIAogICAgICAgICAgICAgaW50
MzJfdCBvcDFpbW0gPSBnZXRDb25zdGFudE9wZXJhbmQob3AxKS5hc0ludDMyKCk7CiAKQEAgLTM1
MCw5ICszNTksOSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1
YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsCiAgICAgICAgICAgICBmYWlsMS5s
aW5rKHRoaXMpOwogICAgICAgICB9CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDEsIHJlZ1QyKTsKLSAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7Ci0gICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMywgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGpzUmVnVDEwKTsKKyAgICAgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUNCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUNCwganNS
ZWdUMTAsIGpzUmVnVDMyKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMy
KGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC0zNjAsMTMgKzM2OSwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3Rl
ciBvcDIsCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBMSFMgaXMgbm90IEludC4KIAogICAg
IGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewotICAgICAgICBKdW1wIGZhaWwxID0gYnJh
bmNoSWZOb3ROdW1iZXIocmVnVDApOwotICAgICAgICBKdW1wIGZhaWwyID0gYnJhbmNoSWZOb3RO
dW1iZXIocmVnVDEpOwotICAgICAgICBKdW1wIGZhaWwzID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7
Ci0gICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7Ci0gICAgICAgIGFkZDY0
KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7Ci0gICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1Qw
LCBmcFJlZ1QwKTsKLSAgICAgICAgbW92ZTY0VG9Eb3VibGUocmVnVDEsIGZwUmVnVDEpOworICAg
ICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIoanNSZWdUMTAsIHJlZ1Q0KTsKKyAg
ICAgICAgSnVtcCBmYWlsMiA9IGJyYW5jaElmTm90TnVtYmVyKGpzUmVnVDMyLCByZWdUNCk7Cisg
ICAgICAgIEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKGpzUmVnVDMyKTsKKyAgICAgICAgdW5i
b3hEb3VibGUoanNSZWdUMTAsIGZwUmVnVDApOworICAgICAgICB1bmJveERvdWJsZShqc1JlZ1Qz
MiwgZnBSZWdUMSk7CiAKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoRG91YmxlKGNv
bmRpdGlvbiwgZnBSZWdUMCwgZnBSZWdUMSksIHRhcmdldCk7CiAKQEAgLTM3OCw4ICszODUsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBv
cDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsCiAgICAgfQogCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OyAvLyBSSFMgaXMgbm90IEludC4KLSAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUNCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1Q0LCBq
c1JlZ1QxMCwganNSZWdUMzIpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihp
bnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBA
IC0zODgsMTEgKzM5NSwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbmMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEluYz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNv
ZGUubV9zcmNEc3Q7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDAp
OwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsKLSAgICBib3hJ
bnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHNyY0RzdCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIGpzUmVn
VDEwKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoanNSZWdUMTApOworICAgIGFkZFNs
b3dDYXNlKGJyYW5jaEFkZDMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGpzUmVnVDEwLnBh
eWxvYWRHUFIoKSkpOworICAgIGJveEludDMyKGpzUmVnVDEwLnBheWxvYWRHUFIoKSwganNSZWdU
MTApOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCBqc1JlZ1QxMCk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtNDAwLDExICs0MDcsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BEZWM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9
IGJ5dGVjb2RlLm1fc3JjRHN0OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3Qs
IHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaFN1YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7Ci0g
ICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihzcmNEc3QpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0
LCBqc1JlZ1QxMCk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGpzUmVnVDEwKTsKKyAg
ICBhZGRTbG93Q2FzZShicmFuY2hTdWIzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBqc1Jl
Z1QxMC5wYXlsb2FkR1BSKCkpKTsKKyAgICBib3hJbnQzMihqc1JlZ1QxMC5wYXlsb2FkR1BSKCks
IGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwganNSZWdUMTAp
OwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQkVHSU46IE9QX01PRCAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTQ0MCw4ICs0NDcsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICBKdW1wIG51bWVyYXRvclBvc2l0aXZlID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFs
LCByZWdUNCwgVHJ1c3RlZEltbTMyKDApKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIo
WmVybywgZWR4KSk7CiAgICAgbnVtZXJhdG9yUG9zaXRpdmUubGluayh0aGlzKTsKLSAgICBib3hJ
bnQzMihlZHgsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihyZXN1bHQpOworICAgIGJveEludDMyKGVkeCwganNSZWdUMTApOworICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCBqc1JlZ1QxMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xv
d19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTQ2OSwyNjQgKzQ3Niw2IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJikKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVO
RDogT1BfTU9EIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0jZWxzZSAvLyBV
U0UoSlNWQUxVRTY0KQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxD
b25kaXRpb24gY29uZGl0aW9uKQotewotICAgIEp1bXBMaXN0IG5vdEludDMyT3AxOwotICAgIEp1
bXBMaXN0IG5vdEludDMyT3AyOwotCi0gICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwotICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotCi0g
ICAgLy8gQ2hhcmFjdGVyIGxlc3MuCi0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEp
KSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSwgcmVnVDApOwot
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDEpKTsKLSAgICAgICAgSnVt
cExpc3QgZmFpbHVyZXM7Ci0gICAgICAgIGVtaXRMb2FkQ2hhcmFjdGVyU3RyaW5nKHJlZ1QwLCBy
ZWdUMCwgZmFpbHVyZXMpOwotICAgICAgICBhZGRTbG93Q2FzZShmYWlsdXJlcyk7Ci0gICAgICAg
IGFkZEp1bXAoYnJhbmNoMzIoY29tbXV0ZShjb25kaXRpb24pLCByZWdUMCwgSW1tMzIoYXNTdHJp
bmcoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkpLT50cnlHZXRWYWx1ZSgpWzBdKSksIHRhcmdldCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihv
cDIpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMSwgcmVnVDAp
OwotICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDEpKTsKLSAgICAgICAg
SnVtcExpc3QgZmFpbHVyZXM7Ci0gICAgICAgIGVtaXRMb2FkQ2hhcmFjdGVyU3RyaW5nKHJlZ1Qw
LCByZWdUMCwgZmFpbHVyZXMpOwotICAgICAgICBhZGRTbG93Q2FzZShmYWlsdXJlcyk7Ci0gICAg
ICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIoYXNTdHJpbmcoZ2V0
Q29uc3RhbnRPcGVyYW5kKG9wMikpLT50cnlHZXRWYWx1ZSgpWzBdKSksIHRhcmdldCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9IAotICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7
Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMywgcmVnVDIpOwotICAg
ICAgICBub3RJbnQzMk9wMi5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyZWdUMykpOwotICAgICAg
ICBhZGRKdW1wKGJyYW5jaDMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmVnVDIsIEltbTMyKGdldENv
bnN0YW50T3BlcmFuZChvcDEpLmFzSW50MzIoKSkpLCB0YXJnZXQpOwotICAgIH0gZWxzZSBpZiAo
aXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMSwgcmVnVDEsIHJlZ1QwKTsKLSAgICAgICAgbm90SW50MzJPcDEuYXBwZW5kKGJyYW5j
aElmTm90SW50MzIocmVnVDEpKTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24s
IHJlZ1QwLCBJbW0zMihnZXRDb25zdGFudE9wZXJhbmQob3AyKS5hc0ludDMyKCkpKSwgdGFyZ2V0
KTsKLSAgICB9IGVsc2UgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVn
VDEsIHJlZ1QwKTsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QzLCBy
ZWdUMik7Ci0gICAgICAgIG5vdEludDMyT3AxLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJlZ1Qx
KSk7Ci0gICAgICAgIG5vdEludDMyT3AyLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJlZ1QzKSk7
Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgcmVnVDIpLCB0YXJn
ZXQpOwotICAgIH0KLQotICAgIGlmICghc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKLSAgICAg
ICAgYWRkU2xvd0Nhc2Uobm90SW50MzJPcDEpOwotICAgICAgICBhZGRTbG93Q2FzZShub3RJbnQz
Mk9wMik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgSnVtcCBlbmQgPSBqdW1wKCk7Ci0K
LSAgICAvLyBEb3VibGUgbGVzcy4KLSAgICBlbWl0QmluYXJ5RG91YmxlT3A8T3A+KGluc3RydWN0
aW9uLCBPcGVyYW5kVHlwZXMoKSwgbm90SW50MzJPcDEsIG5vdEludDMyT3AyLCAhaXNPcGVyYW5k
Q29uc3RhbnRJbnQob3AxKSwgaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSB8fCAhaXNPcGVyYW5k
Q29uc3RhbnRJbnQob3AyKSk7Ci0gICAgZW5kLmxpbmsodGhpcyk7Ci19Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikK
LXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIFZpcnR1
YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Ay
ID0gYnl0ZWNvZGUubV9yaHM7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0KLSAgICBpZiAoaXNPcGVyYW5kQ29u
c3RhbnRJbnQob3AxKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVn
VDMsIHJlZ1QyKTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb21tdXRlKGNvbmRpdGlvbiks
IHJlZ1QyLCBJbW0zMihnZXRDb25zdGFudE9wZXJhbmQob3AxKS5hc0ludDMyKCkpKSwgdGFyZ2V0
KTsKLSAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QxLCByZWdUMCk7Ci0gICAgICAgIGFkZEp1
bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKG9w
MikuYXNJbnQzMigpKSksIHRhcmdldCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QxLCByZWdUMCk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AyLCByZWdUMywgcmVnVDIpOwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNv
bmRpdGlvbiwgcmVnVDAsIHJlZ1QyKSwgdGFyZ2V0KTsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQotewotICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRl
Y29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7Ci0K
LSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDMsIHJlZ1QyKTsKLSAgICAgICAgY29tcGFyZTMyKGNvbW11
dGUoY29uZGl0aW9uKSwgcmVnVDIsIEltbTMyKGdldENvbnN0YW50T3BlcmFuZChvcDEpLmFzSW50
MzIoKSksIHJlZ1QwKTsKLSAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikp
IHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QxLCByZWdUMCk7Ci0g
ICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIHJlZ1QwLCBJbW0zMihnZXRDb25zdGFudE9wZXJh
bmQob3AyKS5hc0ludDMyKCkpLCByZWdUMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QxLCByZWdUMCk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AyLCByZWdUMywgcmVnVDIpOwotICAgICAgICBjb21wYXJlMzIoY29uZGl0
aW9uLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKLSAgICB9Ci0gICAgZW1pdFN0b3JlQm9vbChkc3Qs
IHJlZ1QwKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbG93T3BlcmF0
aW9uPgotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9u
ICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwg
Ym9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0g
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5
dGVjb2RlLm1fcmhzOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMSwgcmVnVDApOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMywgcmVnVDIpOwotICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDQpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUNCwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7Ci0gICAg
ZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCBy
ZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLXZv
aWQgSklUOjplbWl0QmluYXJ5RG91YmxlT3AoY29uc3QgSW5zdHJ1Y3Rpb24gKmluc3RydWN0aW9u
LCBPcGVyYW5kVHlwZXMgdHlwZXMsIEp1bXBMaXN0JiBub3RJbnQzMk9wMSwgSnVtcExpc3QmIG5v
dEludDMyT3AyLCBib29sIG9wMUlzSW5SZWdpc3RlcnMsIGJvb2wgb3AySXNJblJlZ2lzdGVycykK
LXsKLSAgICBKdW1wTGlzdCBlbmQ7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24t
PmFzPE9wPigpOwotICAgIGludCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKLSAgICBpbnQgdGFy
Z2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdp
c3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKLQotICAgIGlmICghbm90SW50MzJPcDEuZW1wdHko
KSkgewotICAgICAgICAvLyBEb3VibGUgY2FzZSAxOiBPcDEgaXMgbm90IGludDMyOyBPcDIgaXMg
dW5rbm93bi4KLSAgICAgICAgbm90SW50MzJPcDEubGluayh0aGlzKTsKLQotICAgICAgICBBU1NF
UlQob3AxSXNJblJlZ2lzdGVycyk7Ci0KLSAgICAgICAgLy8gVmVyaWZ5IE9wMSBpcyBkb3VibGUu
Ci0gICAgICAgIGlmICghdHlwZXMuZmlyc3QoKS5kZWZpbml0ZWx5SXNOdW1iZXIoKSkKLSAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6Okxvd2VzdFRhZykpKTsKLQotICAgICAgICBpZiAoIW9wMklzSW5SZWdpc3RlcnMpCi0g
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDMsIHJlZ1QyKTsKLQot
ICAgICAgICBKdW1wIGRvdWJsZU9wMiA9IGJyYW5jaDMyKEJlbG93LCByZWdUMywgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpOwotCi0gICAgICAgIGlmICghdHlwZXMuc2Vjb25kKCku
ZGVmaW5pdGVseUlzTnVtYmVyKCkpCi0gICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dEludDMyKHJlZ1QzKSk7Ci0KLSAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmVnVDIsIGZw
UmVnVDApOwotICAgICAgICBKdW1wIGRvVGhlTWF0aCA9IGp1bXAoKTsKLQotICAgICAgICAvLyBM
b2FkIE9wMiBhcyBkb3VibGUgaW50byBkb3VibGUgcmVnaXN0ZXIuCi0gICAgICAgIGRvdWJsZU9w
Mi5saW5rKHRoaXMpOwotICAgICAgICBlbWl0TG9hZERvdWJsZShvcDIsIGZwUmVnVDApOwotCi0g
ICAgICAgIC8vIERvIHRoZSBtYXRoLgotICAgICAgICBkb1RoZU1hdGgubGluayh0aGlzKTsKLSAg
ICAgICAgc3dpdGNoIChvcGNvZGVJRCkgewotICAgICAgICBjYXNlIG9wX2psZXNzOgotICAgICAg
ICAgICAgZW1pdExvYWREb3VibGUob3AxLCBmcFJlZ1QyKTsKLSAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCwgZnBSZWdUMiwgZnBSZWdUMCks
IHRhcmdldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBvcF9qbGVzc2VxOgot
ICAgICAgICAgICAgZW1pdExvYWREb3VibGUob3AxLCBmcFJlZ1QyKTsKLSAgICAgICAgICAgIGFk
ZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIGZwUmVn
VDIsIGZwUmVnVDApLCB0YXJnZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
b3BfamdyZWF0ZXI6Ci0gICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDEsIGZwUmVnVDIpOwot
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW5BbmRPcmRl
cmVkLCBmcFJlZ1QyLCBmcFJlZ1QwKSwgdGFyZ2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIG9wX2pncmVhdGVyZXE6Ci0gICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDEs
IGZwUmVnVDIpOwotICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlR3JlYXRl
clRoYW5PckVxdWFsQW5kT3JkZXJlZCwgZnBSZWdUMiwgZnBSZWdUMCksIHRhcmdldCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBvcF9qbmxlc3M6Ci0gICAgICAgICAgICBlbWl0
TG9hZERvdWJsZShvcDEsIGZwUmVnVDIpOwotICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3Vi
bGUoRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIGZwUmVnVDAsIGZwUmVnVDIpLCB0
YXJnZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ugb3Bfam5sZXNzZXE6Ci0g
ICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDEsIGZwUmVnVDIpOwotICAgICAgICAgICAgYWRk
SnVtcChicmFuY2hEb3VibGUoRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCwgZnBSZWdUMCwgZnBS
ZWdUMiksIHRhcmdldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBvcF9qbmdy
ZWF0ZXI6Ci0gICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDEsIGZwUmVnVDIpOwotICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9y
ZGVyZWQsIGZwUmVnVDAsIGZwUmVnVDIpLCB0YXJnZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6Ci0gICAgICAgICAgICBlbWl0TG9hZERvdWJsZShv
cDEsIGZwUmVnVDIpOwotICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlR3Jl
YXRlclRoYW5PclVub3JkZXJlZCwgZnBSZWdUMCwgZnBSZWdUMiksIHRhcmdldCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFub3RJbnQzMk9w
Mi5lbXB0eSgpKQotICAgICAgICAgICAgZW5kLmFwcGVuZChqdW1wKCkpOwotICAgIH0KLQotICAg
IGlmICghbm90SW50MzJPcDIuZW1wdHkoKSkgewotICAgICAgICAvLyBEb3VibGUgY2FzZSAyOiBP
cDEgaXMgaW50MzI7IE9wMiBpcyBub3QgaW50MzIuCi0gICAgICAgIG5vdEludDMyT3AyLmxpbmso
dGhpcyk7Ci0KLSAgICAgICAgQVNTRVJUKG9wMklzSW5SZWdpc3RlcnMpOwotCi0gICAgICAgIGlm
ICghb3AxSXNJblJlZ2lzdGVycykKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQ
YXlsb2FkKG9wMSwgcmVnVDApOwotCi0gICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJlZ1Qw
LCBmcFJlZ1QwKTsKLQotICAgICAgICAvLyBWZXJpZnkgb3AyIGlzIGRvdWJsZS4KLSAgICAgICAg
aWYgKCF0eXBlcy5zZWNvbmQoKS5kZWZpbml0ZWx5SXNOdW1iZXIoKSkKLSAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlLCByZWdUMywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxv
d2VzdFRhZykpKTsKLQotICAgICAgICAvLyBEbyB0aGUgbWF0aC4KLSAgICAgICAgc3dpdGNoIChv
cGNvZGVJRCkgewotICAgICAgICBjYXNlIG9wX2psZXNzOgotICAgICAgICAgICAgZW1pdExvYWRE
b3VibGUob3AyLCBmcFJlZ1QxKTsKLSAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERv
dWJsZUxlc3NUaGFuQW5kT3JkZXJlZCwgZnBSZWdUMCwgZnBSZWdUMSksIHRhcmdldCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBvcF9qbGVzc2VxOgotICAgICAgICAgICAgZW1p
dExvYWREb3VibGUob3AyLCBmcFJlZ1QxKTsKLSAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91
YmxlKERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIGZwUmVnVDAsIGZwUmVnVDEpLCB0
YXJnZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ugb3BfamdyZWF0ZXI6Ci0g
ICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDIsIGZwUmVnVDEpOwotICAgICAgICAgICAgYWRk
SnVtcChicmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVkLCBmcFJlZ1QwLCBm
cFJlZ1QxKSwgdGFyZ2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIG9wX2pn
cmVhdGVyZXE6Ci0gICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDIsIGZwUmVnVDEpOwotICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5k
T3JkZXJlZCwgZnBSZWdUMCwgZnBSZWdUMSksIHRhcmdldCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBvcF9qbmxlc3M6Ci0gICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDIs
IGZwUmVnVDEpOwotICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlTGVzc1Ro
YW5PckVxdWFsT3JVbm9yZGVyZWQsIGZwUmVnVDEsIGZwUmVnVDApLCB0YXJnZXQpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ugb3Bfam5sZXNzZXE6Ci0gICAgICAgICAgICBlbWl0
TG9hZERvdWJsZShvcDIsIGZwUmVnVDEpOwotICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3Vi
bGUoRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCwgZnBSZWdUMSwgZnBSZWdUMCksIHRhcmdldCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBvcF9qbmdyZWF0ZXI6Ci0gICAgICAg
ICAgICBlbWl0TG9hZERvdWJsZShvcDIsIGZwUmVnVDEpOwotICAgICAgICAgICAgYWRkSnVtcChi
cmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIGZwUmVnVDEs
IGZwUmVnVDApLCB0YXJnZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ugb3Bf
am5ncmVhdGVyZXE6Ci0gICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDIsIGZwUmVnVDEpOwot
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW5PclVub3Jk
ZXJlZCwgZnBSZWdUMSwgZnBSZWdUMCksIHRhcmdldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBlbmQubGluayh0aGlzKTsKLX0KLQotI2VuZGlmIC8v
IFVTRShKU1ZBTFVFNjQpCi0KIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSAmbV91bmxpbmtlZENvZGVCbG9jay0+dW5hcnlBcml0aFByb2ZpbGUoY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKS5tX3Byb2ZpbGVJbmRleCk7CkBAIC03NTMsMTcg
KzUwMiwxMCBAQCB2b2lkIEpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsaQogICAgIFZpcnR1YWxSZWdpc3RlciBv
cDEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUu
bV9yaHM7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7Ci0jZW5kaWYKKyAg
ICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBqc1JlZ1QxMDsKKyAgICBjb25zdGV4
cHIgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0ganNSZWdUMzI7CisgICAgY29uc3RleHByIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2hHUFIgPSByZWdUNDsKIAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kOwogICAgIFNu
aXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZDsKQEAgLTc5OSwyMyArNTQxLDE3IEBAIHZvaWQgSklU
OjplbWl0X29wX2JpdG5vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSNlbHNlCi0g
ICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotI2Vu
ZGlmCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGpzUmVnVDEwKTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0KLSAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdEludDMyKGxlZnRSZWdzKSk7Ci0gICAgbm90MzIobGVmdFJlZ3MucGF5bG9hZEdQ
UigpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEludDMyKGpzUmVnVDEwKSk7CisgICAg
bm90MzIoanNSZWdUMTAucGF5bG9hZEdQUigpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGJv
eEludDMyKGxlZnRSZWdzLnBheWxvYWRHUFIoKSwgbGVmdFJlZ3MpOworICAgIGJveEludDMyKGpz
UmVnVDEwLnBheWxvYWRHUFIoKSwganNSZWdUMTApOwogI2VuZGlmCiAKICAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShieXRlY29kZSk7CiAKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHJlc3VsdCwgbGVmdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0LCBqc1JlZ1QxMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2JpdGFuZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtODYxLDE3ICs1OTcsMTAgQEAg
dm9pZCBKSVQ6OmVtaXRSaWdodFNoaWZ0RmFzdFBhdGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgSklUUmlnaHQKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNv
ZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7
Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gcmVnVDI7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVn
czsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OwotI2VuZGlmCisgICAgY29uc3RleHBy
IEpTVmFsdWVSZWdzIGxlZnRSZWdzID0ganNSZWdUMTA7CisgICAgY29uc3RleHByIEpTVmFsdWVS
ZWdzIHJpZ2h0UmVncyA9IGpzUmVnVDMyOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVn
VDQ7CiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZDsKICAgICBTbmlwcGV0T3BlcmFu
ZCByaWdodE9wZXJhbmQ7CkBAIC05MzIsMTcgKzY2MSwxMiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJ
Q0Zhc3QoSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlv
biogYwogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBwcmVmZXJy
ZWRBcmd1bWVudEdQUjxQcm9maWxlZEZ1bmN0aW9uLCAwPigpOworICAgIGNvbnN0ZXhwciBKU1Zh
bHVlUmVncyBzcmNSZWdzID0gcHJlZmVycmVkQXJndW1lbnRKU1I8UHJvZmlsZWRGdW5jdGlvbiwg
MT4oKTsKICAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJl
Z2lzdGVyIGFzIHNyYyBhbmQgZHN0LgotICAgIC8vIFNpbmNlIHJlZ1QxPT1hcmd1bWVudEdQUjEs
IHVzaW5nIHJlZ1QxIGF2b2lkIHNodWZmbGluZyByZWdpc3RlciB0byBjYWxsIHRoZSBzbG93IHBh
dGguCi0gICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gcmVnVDI7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7Ci0j
ZW5kaWYKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHNyY1JlZ3M7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gZ2xvYmFsT2JqZWN0R1BSOworICAgIHN0
YXRpY19hc3NlcnQobm9PdmVybGFwKHNyY1JlZ3MsIHNjcmF0Y2hHUFIpKTsKIAogI2lmIEVOQUJM
RShNQVRIX0lDX1NUQVRTKQogICAgIGF1dG8gaW5saW5lU3RhcnQgPSBsYWJlbCgpOwpAQCAtOTU3
LDExICs2ODEsMTEgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPEdl
bmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGMKICAgICBib29sIGdlbmVyYXRl
ZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBtYXRoSUNHZW5lcmF0
aW9uU3RhdGUpOwogICAgIGlmICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgewogICAgICAgICBVbmFy
eUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKLSAg
ICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICAgICAgbG9hZEdsb2JhbE9i
amVjdChnbG9iYWxPYmplY3RHUFIpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3Vs
ZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHBy
b2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3MsIGFyaXRoUHJv
ZmlsZSk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0
aW9uLCByZXN1bHRSZWdzLCBnbG9iYWxPYmplY3RHUFIsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblBy
b2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3MpOworICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0
UmVncywgZ2xvYmFsT2JqZWN0R1BSLCBzcmNSZWdzKTsKICAgICB9IGVsc2UKICAgICAgICAgYWRk
U2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOwogCkBAIC05ODQs
MTcgKzcwOCwxMyBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDPEdl
bmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29k
ZS5tX3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMCk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMzsKLSNlbHNlCi0gICAgSlNWYWx1
ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVS
ZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7
Ci0jZW5kaWYKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJl
ZEFyZ3VtZW50R1BSPFByb2ZpbGVkRnVuY3Rpb24sIDA+KCk7CisgICAgY29uc3RleHByIEpTVmFs
dWVSZWdzIGxlZnRSZWdzID0gcHJlZmVycmVkQXJndW1lbnRKU1I8UHJvZmlsZWRGdW5jdGlvbiwg
MT4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gcHJlZmVycmVkQXJn
dW1lbnRKU1I8UHJvZmlsZWRGdW5jdGlvbiwgMj4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IHJldHVyblZhbHVlSlNSOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHJlZ1Q1OworICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKGxlZnRSZWdzLCBy
aWdodFJlZ3MsIHNjcmF0Y2hHUFIpKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG5vT3ZlcmxhcChyZXN1
bHRSZWdzLCBzY3JhdGNoR1BSKSk7CiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChi
eXRlY29kZS5tX29wZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdo
dE9wZXJhbmQoYnl0ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwpAQCAtMTAyOCwxMSAr
NzQ4LDExIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUM8R2VuZXJh
dG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbioKICAgICAgICAgZWxzZSBpZiAocmlnaHRP
cGVyYW5kLmlzQ29uc3QoKSkKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ay
LCByaWdodFJlZ3MpOwogICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7Ci0gICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRj
aEdQUik7CisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKICAgICAg
ICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBz
Y3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAg
ICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywg
Z2xvYmFsT2JqZWN0R1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxl
ZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsK
KyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24s
IHJlc3VsdFJlZ3MsIGdsb2JhbE9iamVjdEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CiAgICAg
fSBlbHNlCiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0
aEp1bXBzKTsKIApAQCAtMTA1NiwyNyArNzc2LDIzIEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xv
dyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBj
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogCi0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0jZWxzZQotICAg
IEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotI2VuZGlm
CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmpldEdQUiA9IHByZWZlcnJlZEFyZ3VtZW50
R1BSPFByb2ZpbGVkRnVuY3Rpb24sIDA+KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHNy
Y1JlZ3MgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxQcm9maWxlZEZ1bmN0aW9uLCAxPigpOworICAg
IGNvbnN0ZXhwciBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmV0dXJuVmFsdWVKU1I7CiAKICNp
ZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBsYWJlbCgp
OwogI2VuZGlmCiAKICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElD
LT5hcml0aFByb2ZpbGUoKTsKLSAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KGdsb2JhbE9iamV0R1BSKTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNo
b3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRl
LnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0
PEpfSklUT3BlcmF0aW9uX0dKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJl
Z3MsIHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAg
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRj
aEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgZ2xvYmFsT2JqZXRHUFIsIHNyY1JlZ3MsIFRydXN0ZWRJ
bW1QdHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1
bmN0aW9uLCByZXN1bHRSZWdzLCByZWdUNCwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAg
ICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBnbG9iYWxPYmpldEdQUiwg
c3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0aElDR2VuZXJh
dGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJw
cmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJl
Z3MsIHJlZ1Q0LCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRo
SUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQo
cmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwg
cmVzdWx0UmVncywgZ2xvYmFsT2JqZXRHUFIsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElD
KSk7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0g
bGFiZWwoKTsKQEAgLTExMDUsMTYgKzgyMSwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3co
SklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdp
c3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNW
YWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3Mg
cmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mg
PSBsZWZ0UmVnczsKLSNlbmRpZgotICAgIAorICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2Jq
ZXRHUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxQcm9maWxlZEZ1bmN0aW9uLCAwPigpOworICAg
IGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFBy
b2ZpbGVkRnVuY3Rpb24sIDE+KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHJpZ2h0UmVn
cyA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFByb2ZpbGVkRnVuY3Rpb24sIDI+KCk7CisgICAgY29u
c3RleHByIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXR1cm5WYWx1ZUpTUjsKKwogICAgIFNu
aXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkp
OwogICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBl
cy5zZWNvbmQoKSk7CiAKQEAgLTExMzUsMTQgKzg0NiwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJ
Q1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rp
b24qCiAjZW5kaWYKIAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0
aElDLT5hcml0aFByb2ZpbGUoKTsKLSAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamV0R1BSKTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYm
IHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0
YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8
Sl9KSVRPcGVyYXRpb25fR0pKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJl
Z3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwor
ICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHByb2Zp
bGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgZ2xvYmFsT2JqZXRHUFIsIGxlZnRSZWdz
LCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3Ms
IHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0
aW9uLCByZXN1bHRSZWdzLCBnbG9iYWxPYmpldEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJp
dGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNs
b3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9w
ZXJhdGlvbl9HSkpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0
UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0
d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0
UmVncywgZ2xvYmFsT2JqZXRHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIo
bWF0aElDKSk7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRo
RW5kID0gbGFiZWwoKTsKQEAgLTExNjcsMTggKzg3OCwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9k
aXYoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5
dGVjb2RlLm1fcmhzOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdz
OwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdz
IGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyBy
aWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OwotI2Vu
ZGlmCi0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgIGNvbnN0ZXhwciBKU1Zh
bHVlUmVncyBsZWZ0UmVncyA9IGpzUmVnVDEwOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBy
aWdodFJlZ3MgPSBqc1JlZ1QzMjsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IGxlZnRSZWdzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0Owor
ICAgIGNvbnN0ZXhwciBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CiAKICAgICBCaW5hcnlB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG51bGxwdHI7CiAgICAgaWYgKHNob3VsZEVtaXRQ
cm9maWxpbmcoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJp
dGhtZXRpYzMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRp
YzMyXzY0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRkYmNiMzA2OGJlZDli
NzU4NzQ1ODEzZGM1NTQzZWVlOThkNWEzYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMz
Ml82NC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKgotKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgotKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0qIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0q
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShKSVQpCi0jaWYg
VVNFKEpTVkFMVUUzMl82NCkKLSNpbmNsdWRlICJKSVQuaCIKLQotI2luY2x1ZGUgIkNvZGVCbG9j
ay5oIgotI2luY2x1ZGUgIkpJVElubGluZXMuaCIKLSNpbmNsdWRlICJKU0FycmF5LmgiCi0jaW5j
bHVkZSAiSlNGdW5jdGlvbi5oIgotI2luY2x1ZGUgIkludGVycHJldGVyLmgiCi0jaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlJlc3VsdFR5cGUuaCIKLSNpbmNsdWRlICJTbG93UGF0
aENhbGwuaCIKLQotCi1uYW1lc3BhY2UgSlNDIHsKLQotdm9pZCBKSVQ6OmVtaXRfb3BfdW5zaWdu
ZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpOwotICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AxLCByZWdUMSwgcmVnVDApOwotICAgIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
SW50MzIocmVnVDEpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihMZXNzVGhhbiwgcmVnVDAs
IFRydXN0ZWRJbW0zMigwKSkpOwotICAgIGVtaXRTdG9yZUludDMyKHJlc3VsdCwgcmVnVDAsIHJl
c3VsdCA9PSBvcDEpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9pbmMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEluYz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0
ZWNvZGUubV9zcmNEc3Q7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVn
VDEsIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SW50MzIocmVnVDEpKTsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBy
ZWdUMCkpOwotICAgIGVtaXRTdG9yZUludDMyKHNyY0RzdCwgcmVnVDAsIHRydWUpOwotfQotCi12
b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYz4o
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7Ci0KLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDEsIHJlZ1QwKTsKLQotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90SW50MzIocmVnVDEpKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2hTdWIzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOwotICAgIGVtaXRTdG9y
ZUludDMyKHNyY0RzdCwgcmVnVDAsIHRydWUpOwotfQotCi0vLyBNb2QgKCUpCi0KLS8qIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCRUdJTjogT1BfTU9EIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSAqLwotCi12b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhD
YWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX21vZCk7Ci0gICAgc2xvd1Bh
dGhDYWxsLmNhbGwoKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKQotewotICAgIC8vIFdl
IHdvdWxkIGhhdmUgcmVhbGx5IHVzZWZ1bCBhc3NlcnRpb25zIGhlcmUgaWYgaXQgd2Fzbid0IGZv
ciB0aGUgY29tcGlsZXIncwotICAgIC8vIGluc2lzdGVuY2Ugb24gYXR0cmlidXRlIG5vcmV0dXJu
LgotICAgIC8vIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLS8qIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFTkQ6IE9QX01PRCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gKi8KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBVU0UoSlNWQUxV
RTMyXzY0KQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmgKaW5kZXggZjMyMGNiYmMyOGJiODc0
MWM5ZWQ2OWY4Y2UxYTFmNTE4YTk5NGM5MS4uM2UyNmRiOTU3ZTNlZDQ2ZGY4NWNlZWI3ZTNkNTJi
YWI0ZDRjNTQxMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxp
bmVDYWNoZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3IuaApAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKEpJVCkK
IAorI2luY2x1ZGUgIkFzc2VtYmx5SGVscGVycy5oIgogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIK
ICNpbmNsdWRlICJKSVRPcGVyYXRpb25WYWxpZGF0aW9uLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgpAQCAtMTEzLDI1ICsxMTQsMjUgQEAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaDMgPSBHUFJJbmZvOjpyZWdUNTsKIAogbmFtZXNwYWNlIEJhc2VsaW5lSW5zdGFuY2VvZlJl
Z2lzdGVycyB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLWNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0IHsg
R1BSSW5mbzo6cmVnVDAgfTsKLWNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgeyBHUFJJbmZvOjphcmd1
bWVudEdQUjIgfTsKLWNvbnN0ZXhwciBHUFJSZWcgcHJvdG8geyBHUFJJbmZvOjphcmd1bWVudEdQ
UjMgfTsKLWNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm8geyBHUFJJbmZvOjphcmd1bWVudEdQUjEg
fTsKLWNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgeyBHUFJJbmZvOjpub25BcmdHUFIwIH07Ci1j
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyIHsgR1BSSW5mbzo6bm9uQXJnR1BSMSB9OworY29uc3Rl
eHByIEpTVmFsdWVSZWdzIHJlc3VsdEpTUiB7IEdQUkluZm86OnJlZ1QwIH07Citjb25zdGV4cHIg
SlNWYWx1ZVJlZ3MgdmFsdWVKU1IgeyBHUFJJbmZvOjphcmd1bWVudEdQUjIgfTsKK2NvbnN0ZXhw
ciBKU1ZhbHVlUmVncyBwcm90b0pTUiB7IEdQUkluZm86OmFyZ3VtZW50R1BSMyB9OworY29uc3Rl
eHByIEdQUlJlZyBzdHViSW5mb0dQUiB7IEdQUkluZm86OmFyZ3VtZW50R1BSMSB9OworY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoMUdQUiB7IEdQUkluZm86Om5vbkFyZ0dQUjAgfTsKK2NvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaDJHUFIgeyBHUFJJbmZvOjpub25BcmdHUFIxIH07CiAjZWxpZiBVU0Uo
SlNWQUxVRTMyXzY0KQotY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgeyBHUFJJbmZvOjpyZWdU
MCB9OwotY29uc3RleHByIEpTVmFsdWVSZWdzIHZhbHVlSlNSICB7IEdQUkluZm86OmFyZ3VtZW50
R1BSMywgR1BSSW5mbzo6YXJndW1lbnRHUFIyIH07Ci1jb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcHJv
dG9KU1IgIHsgR1BSSW5mbzo6cmVnVDUsIEdQUkluZm86OnJlZ1Q0IH07Citjb25zdGV4cHIgSlNW
YWx1ZVJlZ3MgcmVzdWx0SlNSIHsgSlNSSW5mbzo6anNSZWdUMTAgfTsKKyNpZiBDUFUoTUlQUykK
K2NvbnN0ZXhwciBKU1ZhbHVlUmVncyB2YWx1ZUpTUiB7IEdQUkluZm86OmFyZ3VtZW50R1BSMywg
R1BSSW5mbzo6YXJndW1lbnRHUFIyIH07CisjZWxzZQorY29uc3RleHByIEpTVmFsdWVSZWdzIHZh
bHVlSlNSIHsgSlNSSW5mbzo6anNSZWdUMzIgfTsKKyNlbmRpZgorY29uc3RleHByIEpTVmFsdWVS
ZWdzIHByb3RvSlNSIHsgSlNSSW5mbzo6anNSZWdUNTQgfTsKIGNvbnN0ZXhwciBHUFJSZWcgc3R1
YkluZm9HUFIgeyBHUFJJbmZvOjpyZWdUMSB9OwogY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMUdQ
UiB7IEdQUkluZm86OnJlZ1Q2IH07CiBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyR1BSIHsgR1BS
SW5mbzo6cmVnVDcgfTsKLXN0YXRpY19hc3NlcnQoIXZhbHVlSlNSLnVzZXMocmVzdWx0R1BSKSk7
Ci1zdGF0aWNfYXNzZXJ0KCF2YWx1ZUpTUi5vdmVybGFwcyhwcm90b0pTUikpOwotc3RhdGljX2Fz
c2VydCghdmFsdWVKU1IudXNlcyhzdHViSW5mb0dQUikpOwotc3RhdGljX2Fzc2VydCghdmFsdWVK
U1IudXNlcyhzY3JhdGNoMUdQUikpOwotc3RhdGljX2Fzc2VydCghdmFsdWVKU1IudXNlcyhzY3Jh
dGNoMkdQUikpOwogI2VuZGlmCitzdGF0aWNfYXNzZXJ0KEFzc2VtYmx5SGVscGVyczo6bm9PdmVy
bGFwKHZhbHVlSlNSLCBwcm90b0pTUiwgc3R1YkluZm9HUFIsIHNjcmF0Y2gxR1BSLCBzY3JhdGNo
MkdQUikpOwogfQogCiBuYW1lc3BhY2UgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKaW5kZXggZGI4MTkwN2Y5YjA0NDBmNjdiZmNk
ODYyZGM4YTRlMjhjZjliODU0YS4uMGU1MmQ4ZjYyZjhkN2E1NzIxNTg0MTVjNjJmOTg2ZjgzZWNk
MmQwNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKQEAgLTMzLDYgKzMz
LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQogQUxXQVlTX0lO
TElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHNy
YykKIHsKICAgICBpZiAoIXNyYy5pc0NvbnN0YW50KCkpCkBAIC00MSw2ICs0Miw3IEBAIEFMV0FZ
U19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3Rl
ciBzcmMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVy
YW5kKHNyYykuaXNEb3VibGUoKTsKIH0KKyNlbmRpZgogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklU
Ojppc09wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewpAQCAtNjksMTcg
KzcxLDYgQEAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5kKFZp
cnR1YWxSZWdpc3RlciBzcmMpCiAgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENv
bnN0YW50KHNyYyk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRUb0Nh
bGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKLXsK
LSAgICBBU1NFUlQoZW50cnkuaXNIZWFkZXIoKSk7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAg
ICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0ZvcihlbnRyeSkp
OwotICAgIHN0b3JlMzIoZnJvbSwgcGF5bG9hZEZvcihlbnRyeSkpOwotI2Vsc2UKLSAgICBzdG9y
ZTY0KGZyb20sIGFkZHJlc3NGb3IoZW50cnkpKTsKLSNlbmRpZgotfQotCiBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0TG9hZENoYXJhY3RlclN0cmluZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBkc3QsIEp1bXBMaXN0JiBmYWlsdXJlcykKIHsKICAgICBmYWlsdXJlcy5hcHBlbmQoYnJh
bmNoSWZOb3RTdHJpbmcoc3JjKSk7CkBAIC0xOTAsMTIgKzE4MSw2IEBAIEFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0
aFByb2ZpbGUoCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlSlNS
KTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwo
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJl
ZykKLXsKLSAgICBpZiAoIWlzS25vd25DZWxsKHJlZykpCi0gICAgICAgIGxpbmtTbG93Q2FzZShp
dGVyKTsKLX0KLQogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua0FsbFNsb3dDYXNlc0ZvckJ5
dGVjb2RlSW5kZXgoVmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkK
IHsKICAgICB3aGlsZSAoaXRlciAhPSBzbG93Q2FzZXMuZW5kKCkgJiYgaXRlci0+dG8gPT0gYnl0
ZWNvZGVJbmRleCkKQEAgLTMwNywxNCArMjkyLDYgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6
aXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3RlciBzcmMpCiAgICAgcmV0dXJuIGdl
dENvbnN0YW50T3BlcmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRP
cGVyYW5kKHNyYykuYXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KLWlubGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShP
cDo6TWV0YWRhdGE6Om1fcHJvZmlsZSksIFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPiBKSVQ6
OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKQotewot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIGpzUmVnVDEwKTsKLX0KLQotaW5s
aW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZSguLi4p
IHsgfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KIGlubGluZSB2b2lkIEpJVDo6ZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEpTVmFsdWVSZWdz
IHZhbHVlKQogewpAQCAtMzI1LDE0ICszMDIsNiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB2YQog
ICAgIHN0b3JlVmFsdWUodmFsdWUsIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgb2Zmc2V0KSk7CiB9
CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+Ci1pbmxp
bmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVj
b2RlLCBHUFJSZWcgcmVzdWx0UmVnKQotewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIEpTVmFsdWVSZWdzKHJlc3VsdFJlZykpOwotfQotI2VuZGlmCi0KIHRlbXBsYXRlIDx0
eXBlbmFtZSBCeXRlY29kZT4KIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0
ZVdpdGhDZWxsKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgcHRyZGlmZl90IG9mZnNldE9mQXJy
YXlQcm9maWxlLCBSZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKIHsK
QEAgLTM1MywxMCArMzIyLDEyIEBAIEFMV0FZU19JTkxJTkUgaW50MzJfdCBKSVQ6OmdldE9wZXJh
bmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogICAgIHJldHVybiBnZXRDb25zdGFu
dE9wZXJhbmQoc3JjKS5hc0ludDMyKCk7CiB9CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQogQUxXQVlT
X0lOTElORSBkb3VibGUgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lz
dGVyIHNyYykKIHsKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNEb3VibGUo
KTsKIH0KKyNlbmRpZgogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVy
KFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CkBAIC0zODEsMTQgKzM1MiwxMSBAQCBBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3Qs
IEpTVmFsdWVSZWdzCiAgICAgc3RvcmVWYWx1ZShmcm9tLCBhZGRyZXNzRm9yKGRzdCkpOwogfQog
Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lz
dGVySUQgcGF5bG9hZCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgSlNWYWx1
ZVJlZ3MgeyB0YWcsIHBheWxvYWQgfSk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKFZpcnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVy
SUQgZHN0KQogeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmMsIEpTVmFsdWVSZWdzIHsgZHN0IH0pOworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKICAg
ICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUg
Y2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29k
ZUluZGV4IGlzIHNldC4KICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBpZiAo
bV9wcm9maWxlZENvZGVCbG9jay0+aXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayhz
cmMpKQpAQCAtMzk4LDggKzM2NiwxMCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0
VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpcwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIGxvYWQzMihwYXlsb2FkRm9yKHNyYyksIGRzdCk7CisjZW5k
aWYKIH0KIAorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKFZpcnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQg
ZHN0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91
bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhh
dCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgpAQCAtNDE4LDEyNSArMzg4LDEwIEBAIEFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNy
YywgUmVnaXN0ZXJJRCBkCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIEpTVmFsdWVS
ZWdzIHsgZHN0IH0pOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVh
bFJlZ2lzdGVyUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIGRzdCkKLXsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgSlNWYWx1ZVJlZ3MgeyBkc3QgfSk7Ci19
Ci0KIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQogewogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyB7IGZyb20gfSk7CiB9Ci0jZW5kaWYKLQotCi0jaWYgVVNF
KEpTVkFMVUUzMl82NCkKLQotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFs
UmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCi17Ci0gICAgaWYgKHJlZy5pc0NvbnN0
YW50KCkpIHsKLSAgICAgICAgQVNTRVJUKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlzQ29uc3RhbnRP
d25lZEJ5VW5saW5rZWRDb2RlQmxvY2socmVnKSk7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiYgaW5Db25zdGFudFBvb2wgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFJlZ2lz
dGVyKHJlZyk7Ci0gICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmaW5Db25zdGFudFBv
b2wpLCB2YWx1ZSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0Zvcihy
ZWcpLCB2YWx1ZSk7Ci19Ci0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoVmlydHVhbFJl
Z2lzdGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJ
RCBiYXNlKQotewotICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihyZWcsIGJhc2UpKTsK
LSAgICBzdG9yZTMyKHRhZywgdGFnRm9yKHJlZywgYmFzZSkpOwotfQotCi1pbmxpbmUgdm9pZCBK
SVQ6OmVtaXRTdG9yZUludDMyKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgcGF5bG9h
ZCwgYm9vbCBpbmRleElzSW50MzIpCi17Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9y
KHJlZykpOwotICAgIGlmICghaW5kZXhJc0ludDMyKQotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0ZvcihyZWcpKTsKLX0KLQotaW5saW5lIHZvaWQg
SklUOjplbWl0U3RvcmVDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgcGF5bG9h
ZCwgYm9vbCBpbmRleElzQ2VsbCkKLXsKLSAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3Io
cmVnKSk7Ci0gICAgaWYgKCFpbmRleElzQ2VsbCkKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhZ0ZvcihyZWcpKTsKLX0KLQotaW5saW5lIHZvaWQgSklU
OjplbWl0U3RvcmVCb29sKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwg
Ym9vbCBpbmRleElzQm9vbCkKLXsKLSAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IocmVn
KSk7Ci0gICAgaWYgKCFpbmRleElzQm9vbCkKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6Qm9vbGVhblRhZyksIHRhZ0ZvcihyZWcpKTsKLX0KLQotaW5saW5lIHZvaWQgSklU
OjplbWl0U3RvcmUoVmlydHVhbFJlZ2lzdGVyIHJlZywgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwg
UmVnaXN0ZXJJRCBiYXNlKQotewotICAgIHN0b3JlMzIoSW1tMzIoY29uc3RhbnQucGF5bG9hZCgp
KSwgcGF5bG9hZEZvcihyZWcsIGJhc2UpKTsKLSAgICBzdG9yZTMyKEltbTMyKGNvbnN0YW50LnRh
ZygpKSwgdGFnRm9yKHJlZywgYmFzZSkpOwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQotewotICAgIGlmICghaXNL
bm93bkNlbGwocmVnKSkgewotICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKLSAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGVtaXRKdW1wSWZOb3RKU0NlbGwocmVnKSk7Ci0gICAgfQotfQotCi1pbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBS
ZWdpc3RlcklEIHRhZykKLXsKLSAgICBpZiAoIWlzS25vd25DZWxsKHJlZykpIHsKLSAgICAgICAg
aWYgKHJlZy5pc0NvbnN0YW50KCkpCi0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwodGFn
KSk7Ci0gICAgfQotfQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpnZXRPcGVyYW5kQ29uc3Rh
bnRJbnQoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgVmlydHVhbFJl
Z2lzdGVyJiBvcCwgaW50MzJfdCYgY29uc3RhbnQpCi17Ci0gICAgaWYgKGlzT3BlcmFuZENvbnN0
YW50SW50KG9wMSkpIHsKLSAgICAgICAgY29uc3RhbnQgPSBnZXRDb25zdGFudE9wZXJhbmQob3Ax
KS5hc0ludDMyKCk7Ci0gICAgICAgIG9wID0gb3AyOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewotICAgICAgICBjb25z
dGFudCA9IGdldENvbnN0YW50T3BlcmFuZChvcDIpLmFzSW50MzIoKTsKLSAgICAgICAgb3AgPSBv
cDE7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLSNlbHNlIC8vIFVTRShKU1ZBTFVFMzJfNjQpCi0KLUFMV0FZU19JTkxJTkUgSklUOjpK
dW1wIEpJVDo6ZW1pdEp1bXBJZkJvdGhKU0NlbGxzKFJlZ2lzdGVySUQgcmVnMSwgUmVnaXN0ZXJJ
RCByZWcyLCBSZWdpc3RlcklEIHNjcmF0Y2gpCi17Ci0gICAgbW92ZShyZWcxLCBzY3JhdGNoKTsK
LSAgICBvcjY0KHJlZzIsIHNjcmF0Y2gpOwotICAgIHJldHVybiBicmFuY2hJZkNlbGwoc2NyYXRj
aCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZkpTQ2Vs
bChSZWdpc3RlcklEIHJlZykKLXsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnKSk7
Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChSZWdpc3RlcklEIHJlZywgVmlydHVhbFJlZ2lzdGVyIHZSZWcpCi17Ci0gICAgaWYgKCFpc0tu
b3duQ2VsbCh2UmVnKSkKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZyk7
Ci19Ci0KLUFMV0FZU19JTkxJTkUgSklUOjpQYXRjaGFibGVKdW1wIEpJVDo6ZW1pdFBhdGNoYWJs
ZUp1bXBJZk5vdEludChSZWdpc3RlcklEIHJlZykKLXsKLSAgICByZXR1cm4gcGF0Y2hhYmxlQnJh
bmNoNjQoQmVsb3csIHJlZywgbnVtYmVyVGFnUmVnaXN0ZXIpOwotfQogCiBBTFdBWVNfSU5MSU5F
IEpJVDo6SnVtcCBKSVQ6OmVtaXRKdW1wSWZOb3RJbnQoUmVnaXN0ZXJJRCByZWcxLCBSZWdpc3Rl
cklEIHJlZzIsIFJlZ2lzdGVySUQgc2NyYXRjaCkKIHsKQEAgLTU0NSwyNiArNDAwLDIwIEBAIEFM
V0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZk5vdEludChSZWdpc3RlcklEIHJl
ZzEsIFJlZ2lzdGVySUQgcmVnMiwKICAgICByZXR1cm4gYnJhbmNoSWZOb3RJbnQzMihzY3JhdGNo
KTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50
KFJlZ2lzdGVySUQgcmVnKQotewotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SW50MzIocmVn
KSk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChSZWdpc3RlcklEIHJlZzEsIFJlZ2lzdGVySUQgcmVnMiwgUmVnaXN0ZXJJRCBzY3JhdGNoKQog
ewogICAgIGFkZFNsb3dDYXNlKGVtaXRKdW1wSWZOb3RJbnQocmVnMSwgcmVnMiwgc2NyYXRjaCkp
OwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3ROdW1i
ZXIoUmVnaXN0ZXJJRCByZWcpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbnQoUmVnaXN0ZXJJRCBncHIpCiB7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3ROdW1iZXIocmVnKSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KEpTVmFsdWVSZWdz
IHsgZ3ByIH0pOwogfQorI2VuZGlmCiAKLSNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQotCi1B
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0
ZXJJRCByZWcpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQoSlNWYWx1ZVJlZ3MganNyKQogewotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChy
ZWcpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEludDMyKGpzcikpOwogfQogCiBBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoSlNWYWx1ZVJl
Z3MgcmVnKQpAQCAtNjYyLDEzICs1MTEsMTkgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9h
ZENvZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciBjb25zdGFudCwgSlNWYWx1ZVIKICAg
ICBsb2FkVmFsdWUoQWRkcmVzcyhkc3QucGF5bG9hZEdQUigpLCBjb25zdGFudC50b0NvbnN0YW50
SW5kZXgoKSAqIHNpemVvZihSZWdpc3RlcikpLCBkc3QpOwogfQogCi0jaWYgVVNFKEpTVkFMVUUz
Ml82NCkKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudFBheWxv
YWQoVmlydHVhbFJlZ2lzdGVyIGNvbnN0YW50LCBSZWdpc3RlcklEIGRzdCkKIHsKICAgICBSRUxF
QVNFX0FTU0VSVChjb25zdGFudC5pc0NvbnN0YW50KCkpOwogICAgIGxvYWRBZGRyT2ZDb2RlQmxv
Y2tDb25zdGFudEJ1ZmZlcigqdGhpcywgZHN0KTsKLSAgICBsb2FkMzIoQWRkcmVzcyhkc3QsIGNv
bnN0YW50LnRvQ29uc3RhbnRJbmRleCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBheWxvYWRPZmZz
ZXQpLCBkc3QpOworICAgIEFkZHJlc3MgYWRkcmVzcyhkc3QsIGNvbnN0YW50LnRvQ29uc3RhbnRJ
bmRleCgpICogc2l6ZW9mKFJlZ2lzdGVyKSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBsb2Fk
NjQoYWRkcmVzcywgZHN0KTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgbG9hZDMyKGFk
ZHJlc3Mud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KSwgZHN0KTsKKyNlbmRpZgogfQorCisjaWYg
VVNFKEpTVkFMVUUzMl82NCkKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb2RlQmxvY2tD
b25zdGFudFRhZyhWaXJ0dWFsUmVnaXN0ZXIgY29uc3RhbnQsIFJlZ2lzdGVySUQgZHN0KQogewog
ICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50LmlzQ29uc3RhbnQoKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAppbmRleCA0YzJmMzJkYWRiNWUzYWJkZGFiYjI5Y2Nk
NmJiNDZmZjA5ZDlkZDMyLi40Yzg2MzE0OWFkYjljOTMwMDM0OTg4NzE3MTExYzAyNDk3MzVmM2Zm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKQEAgLTEyMCw3ICsx
MjAsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXR1cm5WYWx1ZUpTUik7CiB9CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CkBAIC0xMjksMjYgKzEyOCwyMyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9j
b25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVj
b2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFz
SW5zdGFuY2VWYWx1ZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2Fk
KGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QyKTsKIAogICAgIC8vIFdlIGRvbid0IGp1bXAgaWYgd2Ug
a25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4KKyAgICBtb3ZlKFRydXN0ZWRJ
bW0zMigxKSwgcmVnVDApOwogICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOwotICAgIEp1bXAg
Y3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIEFkZHJl
c3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV9mdW5jdGlvblByb3Rv
SGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbikpKTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoY29uc3RydWN0b3IsIHJlZ1QwKTsKLQorICAgIEp1bXAgY3VzdG9tSGFzSW5zdGFuY2VWYWx1
ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZT
RVRPRihKU0dsb2JhbE9iamVjdCwgbV9mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5j
dGlvbikpKTsKKyAgICAvLyBXZSBrbm93IHRoYXQgY29uc3RydWN0b3IgaXMgYW4gb2JqZWN0IGZy
b20gdGhlIHdheSBieXRlY29kZSBpcyBlbWl0dGVkIGZvciBpbnN0YW5jZW9mIGV4cHJlc3Npb25z
LgorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGNvbnN0cnVjdG9yLCByZWdUMik7
CiAgICAgLy8gQ2hlY2sgdGhhdCBjb25zdHJ1Y3RvciAnSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0
YW5jZScgaS5lLiB0aGUgb2JqZWN0IGlzIG5vdCBhIEMtQVBJIHVzZXIgbm9yIGEgYm91bmQgZnVu
Y3Rpb24uCi0gICAgdGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSks
IHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwot
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QyLCBK
U0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVm
YXVsdEhhc0luc3RhbmNlKSwgcmVnVDApOworICAgIGN1c3RvbUhhc0luc3RhbmNlVmFsdWUubGlu
ayh0aGlzKTsKIAotICAgIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUubGluayh0aGlzKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7Ci0KLSAgICBkb25l
LmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGJveEJv
b2xlYW4ocmVnVDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
anNSZWdUMTApOwogfQogCisKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7CkBAIC0xNTYsMjYgKzE1MiwyOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsKIAot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3Rl
cnM6OnZhbHVlOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvdG9HUFIgPSBCYXNlbGluZUluc3Rh
bmNlb2ZSZWdpc3RlcnM6OnByb3RvOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0g
QmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpyZXN1bHQ7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBzdHViSW5mb0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm87Cisg
ICAgdXNpbmcgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpyZXN1bHRKU1I7CisgICAgdXNp
bmcgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZUpTUjsKKyAgICB1c2luZyBCYXNl
bGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvSlNSOworICAgIHVzaW5nIEJhc2VsaW5lSW5z
dGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm9HUFI7CisgICAgdXNpbmcgQmFzZWxpbmVJbnN0YW5j
ZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMUdQUjsKKyAgICB1c2luZyBCYXNlbGluZUluc3RhbmNlb2ZS
ZWdpc3RlcnM6OnNjcmF0Y2gyR1BSOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgdmFsdWVHUFIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHByb3RvR1BS
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUpTUik7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm90bywgcHJvdG9KU1IpOwogICAgIAogICAgIC8vIENoZWNr
IHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBj
aGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodmFsdWVHUFIsIHZhbHVlKTsKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocHJvdG9HUFIsIHByb3RvKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwodmFsdWVKU1IsIHZhbHVlKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocHJvdG9KU1IsIHByb3RvKTsKIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2Vu
KAogICAgICAgICBudWxscHRyLCBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCiAg
ICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAg
cmVzdWx0R1BSLAotICAgICAgICB2YWx1ZUdQUiwKLSAgICAgICAgcHJvdG9HUFIsCisgICAgICAg
IHJlc3VsdEpTUi5wYXlsb2FkR1BSKCksCisgICAgICAgIHZhbHVlSlNSLnBheWxvYWRHUFIoKSwK
KyAgICAgICAgcHJvdG9KU1IucGF5bG9hZEdQUigpLAogICAgICAgICBzdHViSW5mb0dQUiwKLSAg
ICAgICAgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMSwgQmFzZWxpbmVJbnN0
YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMik7CisgICAgICAgIHNjcmF0Y2gxR1BSLCBzY3JhdGNo
MkdQUik7CiAKICAgICBhdXRvIFsgc3R1YkluZm8sIHN0dWJJbmZvSW5kZXggXSA9IGFkZFVubGlu
a2VkU3RydWN0dXJlU3R1YkluZm8oKTsKICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vz
c1R5cGU6Okluc3RhbmNlT2Y7CkBAIC0xODQsMTAgKzE4MiwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAg
Z2VuLm1fdW5saW5rZWRTdHViSW5mbyA9IHN0dWJJbmZvOwogCiAgICAgZ2VuLmdlbmVyYXRlQmFz
ZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOwor
I2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgYm94Qm9vbGVhbihyZXN1bHRKU1IucGF5bG9hZEdQ
UigpLCByZXN1bHRKU1IpOworI2VuZGlmCiAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luc3Rh
bmNlT2ZzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRKU1IpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMjAxLDEy
ICsyMDIsMjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICAKICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5j
ZW9mUmVnaXN0ZXJzOjpzdHViSW5mbyA9PSBhcmd1bWVudEdQUjEpOwotICAgIHN0YXRpY19hc3Nl
cnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZSA9PSBhcmd1bWVudEdQUjIpOwot
ICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90byA9PSBh
cmd1bWVudEdQUjMpOwotICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICBs
b2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50
R1BSMSk7Ci0gICAgY2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25JbnN0YW5jZU9mT3B0
aW1pemUpPihBZGRyZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9m
U2xvd09wZXJhdGlvbigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IGFyZ3VtZW50R1BSMiwgYXJndW1lbnRHUFIzKTsKKyAgICB1c2luZyBTbG93T3BlcmF0aW9uID0g
ZGVjbHR5cGUob3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24s
IDA+KCk7CisgICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHByZWZlcnJlZEFyZ3Vt
ZW50R1BSPFNsb3dPcGVyYXRpb24sIDE+KCk7CisgICAgdXNpbmcgQmFzZWxpbmVJbnN0YW5jZW9m
UmVnaXN0ZXJzOjp2YWx1ZUpTUjsKKyAgICBzdGF0aWNfYXNzZXJ0KHZhbHVlSlNSID09IHByZWZl
cnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDI+KCkpOworICAgIHVzaW5nIEJhc2VsaW5l
SW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG9KU1I7CisgICAgLy8gT24gSlNWQUxVRTMyXzY0LCAn
cHJvdG8nIHdpbGwgYmUgcGFzc2VkIG9uIHN0YWNrIGFueXdheQorICAgIHN0YXRpY19hc3NlcnQo
cHJvdG9KU1IgPT0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMz4oKSB8fCBp
czMyQml0KCkpOworICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKGdsb2JhbE9iamVjdEdQUiwg
c3R1YkluZm9HUFIsIHZhbHVlSlNSLCBwcm90b0pTUikpOworCisgICAgbG9hZEdsb2JhbE9iamVj
dChnbG9iYWxPYmplY3RHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJ
bmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOworICAgIGNhbGxPcGVyYXRpb248U2xvd09w
ZXJhdGlvbj4oCisgICAgICAgIEFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksCisgICAgICAgIHJlc3VsdFZSZWcsCisgICAgICAg
IGdsb2JhbE9iamVjdEdQUiwgc3R1YkluZm9HUFIsIHZhbHVlSlNSLCBwcm90b0pTUik7CiAgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCkBAIC0y
MTYsMTQgKzIyNywxNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJh
bmQ7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCByZWdUMCk7Ci0KLSAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKLX0KLQorI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyVGFnKHZhbHVlLCByZWdUMCk7CiAjZW5kaWYKKyAgICBpc0VtcHR5KHJlZ1QwLCByZWdUMCk7
CisKKyAgICBib3hCb29sZWFuKHJlZ1QwLCBqc1JlZ1QxMCk7CisgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIGpzUmVnVDEwKTsKK30KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lz
X3VuZGVmaW5lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewpAQCAt
MjM0LDExICsyNDcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwganNSZWdUMTApOwogICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxs
KGpzUmVnVDEwKTsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgY29tcGFyZTY0KEVxdWFsLCBq
c1JlZ1QxMC5wYXlsb2FkR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5l
ZCksIHJlZ1QwKTsKLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgY29tcGFyZTMyKEVxdWFs
LCBqc1JlZ1QxMC50YWdHUFIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyks
IHJlZ1QwKTsKLSNlbmRpZgorICAgIGlzVW5kZWZpbmVkKGpzUmVnVDEwLCByZWdUMCk7CiAgICAg
SnVtcCBkb25lID0ganVtcCgpOwogICAgIAogICAgIGlzQ2VsbC5saW5rKHRoaXMpOwpAQCAtMjcz
LDE5ICsyODIsMjQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwganNSZWdUMTApOwogfQogCi0jaWYgVVNFKEpTVkFMVUU2NCkKIAogdm9pZCBK
SVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNC
b29sZWFuPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCisKKyNp
ZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKICAgICB4b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsK
ICAgICB0ZXN0NjQoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90
Pih+MSkpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisjZWxpZiBVU0UoSlNWQUxV
RTMyXzY0KQorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJUYWcodmFsdWUsIHJlZ1QwKTsKKyAg
ICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRh
ZyksIHJlZ1QwKTsKKyNlbmRpZgorCisgICAgYm94Qm9vbGVhbihyZWdUMCwganNSZWdUMTApOwor
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBqc1JlZ1QxMCk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2lzX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtMjkzLDExICszMDcsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNv
ZGUubV9vcGVyYW5kOwotICAgIAorCisjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCBu
dW1iZXJUYWdSZWdpc3RlciwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworI2VsaWYg
VVNFKEpTVkFMVUUzMl82NCkKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKHZhbHVlLCBy
ZWdUMCk7CisgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CisgICAgY29tcGFyZTMy
KEJlbG93LCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZyArIDEpLCByZWdU
MCk7CisjZW5kaWYKKworICAgIGJveEJvb2xlYW4ocmVnVDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwganNSZWdUMTApOwogfQogCiAjaWYgVVNFKEJJR0lOVDMy
KQpAQCAtMzEzLDE1ICszMzQsMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYmlnX2ludChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIG1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OkJpZ0ludDMyTWFzayksIHJlZ1QxKTsKICAgICBhbmQ2NChyZWdUMSwgcmVnVDAp
OwogICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJ
bnQzMlRhZyksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOworICAgIGJveEJvb2xlYW4ocmVnVDAsIGpzUmVnVDEwKTsKICAgICBKdW1wIGRvbmUg
PSBqdW1wKCk7CiAKICAgICBpc0NlbGwubGluayh0aGlzKTsKICAgICBjb21wYXJlOChFcXVhbCwg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihIZWFwQmlnSW50VHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOworICAgIGJveEJvb2xlYW4ocmVnVDAsIGpzUmVnVDEwKTsKIAogICAg
IGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGpzUmVnVDEwKTsKIH0KICNlbHNlIC8vIGlmICFV
U0UoQklHSU5UMzIpCiBOT19SRVRVUk4gdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYmlnX2ludChjb25z
dCBJbnN0cnVjdGlvbiopCkBAIC0zMzgsMTggKzM1OSwxNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9p
c19jZWxsX3dpdGhfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBpbnQg
dHlwZSA9IGJ5dGVjb2RlLm1fdHlwZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7
Ci0KLSAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5
cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGpzUmVnVDMyKTsKIAorICAgIG1vdmUo
VHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5v
dENlbGwoanNSZWdUMzIpOworICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKGpzUmVnVDMyLnBh
eWxvYWRHUFIoKSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0
eXBlKSwgcmVnVDApOwogICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CiAKLSAgICBkb25lLmxpbmsodGhp
cyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGJveEJvb2xlYW4ocmVn
VDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwganNSZWdUMTAp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM1OCwxOCArMzc2LDE1IEBAIHZvaWQgSklUOjplbWl0X29w
X2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVn
VDApOwotCi0gICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZWdUMCk7
Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwganNSZWdU
MzIpOwogCisgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKKyAgICBKdW1wIGlzTm90
Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChqc1JlZ1QzMik7CisgICAgY29tcGFyZTgoQWJvdmVPckVx
dWFsLCBBZGRyZXNzKGpzUmVnVDMyLnBheWxvYWRHUFIoKSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDApOwogICAgIGlzTm90Q2Vs
bC5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2Up
LCByZWdUMCk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOworICAgIGJveEJvb2xlYW4ocmVnVDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwganNSZWdUMTApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90
b19wcmltaXRpdmUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM3
OCwxNCArMzkzLDE0IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjLCBqc1JlZ1QxMCk7CiAgICAgCi0gICAgSnVtcCBpc0ltbSA9IGJy
YW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QocmVn
VDApKTsKKyAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKGpzUmVnVDEwKTsKKyAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdChqc1JlZ1QxMC5wYXlsb2FkR1BSKCkpKTsKICAgICBp
c0ltbS5saW5rKHRoaXMpOwogCiAgICAgaWYgKGRzdCAhPSBzcmMpCi0gICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IGpzUmVnVDEwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zOTQsMTkgKzQwOSwxNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywganNSZWdUMTApOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KSk7Ci0gICAgSnVtcCBkb25lID0gYnJhbmNoSWZTeW1ib2wocmVnVDApOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RDZWxsKGpzUmVnVDEwKSk7CisgICAgSnVtcCBkb25lID0gYnJhbmNoSWZTeW1ib2woanNSZWdU
MTAucGF5bG9hZEdQUigpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhqc1Jl
Z1QxMC5wYXlsb2FkR1BSKCkpKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKICAgICBpZiAoc3Jj
ICE9IGRzdCkKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwganNSZWdUMTApOwogfQogCi0jZW5kaWYKLQogdm9p
ZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKQEAgLTQyMiwyNSArNDM1LDE3IEBAIHZvaWQgSklU
OjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIGds
b2JhbE9iamVjdEdQUiwgZnVuY3Rpb25HUFIsIG5hbWVKU1IpOwogfQogCi0jaWYgVVNFKEpTVkFM
VUU2NCkKLQogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BOb3Q+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJh
bmQsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFu
ZCwganNSZWdUMTApOwogCi0gICAgLy8gSW52ZXJ0IGFnYWluc3QgSlNWYWx1ZShmYWxzZSk7IGlm
IHRoZSB2YWx1ZSB3YXMgdGFnZ2VkIGFzIGEgYm9vbGVhbiwgdGhlbiBhbGwgYml0cyB3aWxsIGJl
Ci0gICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9y
IDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVseSkuCi0gICAgLy8gVGhlbiBp
bnZlcnQgYWdhaW5zdCBKU1ZhbHVlKHRydWUpLCB3aGljaCB3aWxsIGFkZCB0aGUgdGFnIGJhY2sg
aW4sIGFuZCBmbGlwIHRoZSBsb3cgYml0LgotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZUZhbHNlKSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9u
WmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7Ci0g
ICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKKyAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdEJvb2xlYW4oanNSZWdUMTAsIHJlZ1QyKSk7CisgICAgeG9y
UHRyKFRydXN0ZWRJbW0zMigxKSwganNSZWdUMTAucGF5bG9hZEdQUigpKTsKIAotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3QsIGpzUmVnVDEwKTsKIH0KIAotI2VuZGlmCi0KIHZvaWQgSklU
OjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmZhbHNlPigp
OwpAQCAtNTQ3LDE4ICs1NTIsMjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgd2FzTm90SW1tZWRpYXRlLmxp
bmsodGhpcyk7CiB9CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9q
dW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEp1bmRlZmlu
ZWRPck51bGw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCBqc1JlZ1QxMCk7CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJUYWcodmFsdWUsIGpzUmVnVDEwLnRhZ0dQUigpKTsKKyNlbmRpZgog
Ci0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7
Ci0gICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgZW1pdFR1cm5VbmRlZmluZWRJbnRv
TnVsbChqc1JlZ1QxMCk7CisgICAgYWRkSnVtcChicmFuY2hJZk51bGwoanNSZWdUMTApLCB0YXJn
ZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC01NjcsMTAgKzU3NCwxNCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCBqc1JlZ1QxMCk7CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJUYWcodmFsdWUsIGpzUmVnVDEwLnRhZ0dQUigpKTsKKyNlbmRp
ZgogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdU
MCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgZW1pdFR1cm5VbmRlZmlu
ZWRJbnRvTnVsbChqc1JlZ1QxMCk7CisgICAgYWRkSnVtcChicmFuY2hJZk5vdE51bGwoanNSZWdU
MTApLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfcHRyKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC01NzksOSArNTkwLDE2IEBAIHZvaWQgSklU
OjplbWl0X29wX2plcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAg
IGxvYWRDb2RlQmxvY2tDb25zdGFudChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyLCBKU1ZhbHVl
UmVncyB7IHJlZ1QxIH0pOwotICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVn
VDEpLCB0YXJnZXQpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBqc1JlZ1QxMCk7
CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAvLyBPTiBKU1ZBTFVFNjQgdGhlIHBvaW50ZXIg
Y29tcGFyaXNvbiBiZWxvdyBjYXRjaGVzIHRoaXMgY2FzZQorICAgIEp1bXAgbm90Q2VsbCA9IGJy
YW5jaElmTm90Q2VsbChqc1JlZ1QxMCk7CisjZW5kaWYKKyAgICBsb2FkQ29kZUJsb2NrQ29uc3Rh
bnRQYXlsb2FkKGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIsIHJlZ1QyKTsKKyAgICBhZGRKdW1w
KGJyYW5jaFB0cihFcXVhbCwganNSZWdUMTAucGF5bG9hZEdQUigpLCByZWdUMiksIHRhcmdldCk7
CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBub3RDZWxsLmxpbmsodGhpcyk7CisjZW5kaWYK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTU5MCwxNCArNjA4LDIzIEBAIHZvaWQgSklUOjplbWl0X29wX2pu
ZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwog
ICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgbG9hZENv
ZGVCbG9ja0NvbnN0YW50KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIsIEpTVmFsdWVSZWdzIHsg
cmVnVDEgfSk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFs
LCByZWdUMCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBqc1JlZ1Qx
MCk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAvLyBPTiBKU1ZBTFVFNjQgdGhlIHBvaW50
ZXIgY29tcGFyaXNvbiBiZWxvdyBjYXRjaGVzIHRoaXMgY2FzZQorICAgIEp1bXAgbm90Q2VsbCA9
IGJyYW5jaElmTm90Q2VsbChqc1JlZ1QxMCk7CisjZW5kaWYKKyAgICBsb2FkQ29kZUJsb2NrQ29u
c3RhbnRQYXlsb2FkKGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIsIHJlZ1QyKTsKKyAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIGpzUmVnVDEwLnBheWxvYWRH
UFIoKSwgcmVnVDIpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgbm90Q2VsbC5saW5rKHRo
aXMpOworI2VuZGlmCiAgICAgc3RvcmU4VG9NZXRhZGF0YShUcnVzdGVkSW1tMzIoMSksIGJ5dGVj
b2RlLCBPcEpuZXFQdHI6Ok1ldGFkYXRhOjpvZmZzZXRPZkhhc0p1bXBlZCgpKTsKICAgICBhZGRK
dW1wKGp1bXAoKSwgdGFyZ2V0KTsKICAgICBlcXVhbC5saW5rKHRoaXMpOwogfQogCisjaWYgVVNF
KEpTVkFMVUU2NCkKKwogdm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEVxPigpOwpAQCAtNjA1LDggKzYzMiw4IEBAIHZvaWQgSklUOjplbWl0X29wX2Vx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3JocywgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKICAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1Qx
LCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAg
Ym94Qm9vbGVhbihyZWdUMCwganNSZWdUMTApOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3QsIGpzUmVnVDEwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02ODcsOSArNzE0LDkgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3JocywgcmVnVDEpOwog
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKICAgICBj
b21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgYm94Qm9vbGVhbihyZWdUMCwganNS
ZWdUMTApOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7Cisg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwganNSZWdUMTApOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC04MzEsOSArODU4LDkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAgIGNvbXBhcmU2NChF
cXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CiAgICAgZWxzZQogICAgICAgICBjb21wYXJlNjQo
Tm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgYm94Qm9vbGVhbihyZWdUMCwganNSZWdUMTApOwog
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCBqc1JlZ1QxMCk7CiAjZW5kaWYKIH0KIApAQCAtOTQ5LDE4ICs5NzYsMjEgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0
MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCisjZW5kaWYKKwogdm9pZCBK
SVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051
bWJlcj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwotICAgIAotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVn
LCBqc1JlZ1QxMCk7CisgICAgCisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIoanNS
ZWdUMTAsIHJlZ1QyKSk7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBq
c1JlZ1QxMCk7CiAgICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3RWUmVnLCBqc1JlZ1QxMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTk2OCwzMSArOTk4LDM1IEBA
IHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFRvTnVtZXJpYz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwogCi0gICAgSnVtcCBp
c05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90SGVhcEJpZ0ludChyZWdUMCkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
VlJlZywganNSZWdUMTApOworCisgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
anNSZWdUMTApOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChqc1JlZ1Qx
MC5wYXlsb2FkR1BSKCkpKTsKICAgICBKdW1wIGlzQmlnSW50ID0ganVtcCgpOwogCiAgICAgaXNO
b3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVn
VDApKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihqc1JlZ1QxMCwgcmVnVDIp
KTsKICAgICBpc0JpZ0ludC5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgcmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IGpzUmVnVDEwKTsKICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQotICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdFZSZWcsIGpzUmVnVDEwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmNW
UmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
VlJlZywgcmVnVDApOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIGpzUmVnVDEwKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2Vs
bChqc1JlZ1QxMCkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKGpzUmVnVDEw
LnBheWxvYWRHUFIoKSkpOworCisgICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKKyAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnLCBqc1JlZ1QxMCk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtMTAwMCwxNCArMTAzNCwxNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvT2JqZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcg
PSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVn
LCByZWdUMCk7CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjVlJlZywganNSZWdUMTApOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmVnVDApOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChq
c1JlZ1QxMCkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KGpzUmVnVDEwLnBh
eWxvYWRHUFIoKSkpOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwganNS
ZWdUMTApOwogICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCi0gICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0VlJlZyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
VlJlZywganNSZWdUMTApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTAxNyw3ICsxMDUyLDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZt
KCkudG9wRW50cnlGcmFtZSk7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bSksIHJlZ1Qz
KTsKLSAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0
KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBWTTo6
Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBzdG9y
ZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1l
Rm9yQ2F0Y2hPZmZzZXQoKSkpOwogCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50
ZXJPZmZzZXRGb3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2Fs
bEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKQEAgLTEwMzgsMTEgKzEwNzMs
MTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogICAgIGlzQ2F0
Y2hhYmxlRXhjZXB0aW9uLmxpbmsodGhpcyk7CiAKLSAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBy
ZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2V4Y2VwdGlvbik7
CisgICAgYm94Q2VsbChyZXR1cm5WYWx1ZUdQUiwganNSZWdUMTApOworICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9leGNlcHRpb24sIGpzUmVnVDEwKTsKIAotICAgIGxvYWQ2
NChBZGRyZXNzKHJlZ1QwLCBFeGNlcHRpb246OnZhbHVlT2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Rocm93blZhbHVlKTsKKyAgICBsb2Fk
VmFsdWUoQWRkcmVzcyhqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIEV4Y2VwdGlvbjo6dmFsdWVPZmZz
ZXQoKSksIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
dGhyb3duVmFsdWUsIGpzUmVnVDEwKTsKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8vIEZJ
WE1FOiBjb25zaWRlciBpbmxpbmUgY2FjaGluZyB0aGUgcHJvY2VzcyBvZiBkb2luZyBPU1IgZW50
cnksIGluY2x1ZGluZwpAQCAtMTA2NiwxMyArMTEwMSwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfcGFyZW50X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJlbnRT
Y29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY3VycmVudFNjb3BlID0gYnl0ZWNvZGUubV9z
Y29wZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRTY29wZSwgcmVnVDApOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGN1cnJlbnRTY29wZSwgcmVnVDApOwog
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdU
MCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5tX2RzdCwgcmVnVDApOworICAgIGJveENl
bGwocmVnVDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZHN0LCBqc1JlZ1QxMCk7CiB9CiAKLSNlbmRpZgotCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0
Y2hfaW1tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTd2l0Y2hJbW0+KCk7CkBAIC0x
MjEyLDggKzEyNDYsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCBqc1JlZ1QxMCk7CiB9CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotCiB2b2lkIEpJVDo6ZW1pdF9v
cF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopCiB7CiAgICAgLy8gRXZlbiB0aG91Z2ggQ1RJIGRv
ZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50CkBAIC0xMzM3LDE3ICsx
MzY5LDE4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90Ojpj
YWxsZWUsIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246Om9m
ZnNldE9mU2NvcGVDaGFpbigpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdU
MCk7CisgICAgYm94Q2VsbChyZWdUMCwganNSZWdUMTApOworICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCBqc1JlZ1QxMCk7CiB9CiAKLSNlbmRpZgotCiB2b2lkIEpJVDo6ZW1pdF9vcF90
b190aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdCwganNSZWdUMTApOworICAgIFZp
cnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdDsKIAotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChqc1JlZ1QxMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmNEc3QsIGpzUmVnVDEwKTsKKworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChq
c1JlZ1QxMCwgc3JjRHN0KTsKIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlwZShqc1Jl
Z1QxMC5wYXlsb2FkR1BSKCksIEZpbmFsT2JqZWN0VHlwZSkpOwogICAgIGxvYWQzMkZyb21NZXRh
ZGF0YShieXRlY29kZSwgT3BUb1RoaXM6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhY2hlZFN0cnVjdHVy
ZUlEKCksIHJlZ1QyKTsKQEAgLTEzODksMTUgKzE0MjIsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Y3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCBqc1JlZ1QxMCk7CiB9CiAKLSNp
ZiBVU0UoSlNWQUxVRTY0KQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190ZHooY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcENoZWNrVGR6PigpOworI2lmIFVTRShKU1ZBTFVFNjQpCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3Rl
ciwgcmVnVDApOworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyVGFnKGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyLCByZWdUMCk7CisjZW5k
aWYKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CiB9CiAKKyNpZiBVU0Uo
SlNWQUxVRTY0KQogCiAvLyBTbG93IGNhc2VzCiAKQEAgLTE2MjksNyArMTY2NSw4IEBAIHZvaWQg
SklUOjplbWl0X29wX25ld19yZWdleHAoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKICAgICBHUFJSZWcgZ2xvYmFsR1BSID0gYXJndW1lbnRHUFIwOwogICAgIGxvYWRHbG9i
YWxPYmplY3QoZ2xvYmFsR1BSKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4
cCwgZ2xvYmFsR1BSLCBqc0Nhc3Q8UmVnRXhwKj4obV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29u
c3RhbnQocmVnZXhwKSkpOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7
CisgICAgYm94Q2VsbChyZXR1cm5WYWx1ZUdQUiwgcmV0dXJuVmFsdWVKU1IpOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUpTUik7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIE9wPgpAQCAtMTg3NiwyOSArMTkxMywxOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
cmVzdF9sZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIHVuc2lnbmVk
IG51bVBhcmFtc1RvU2tpcCA9IGJ5dGVjb2RlLm1fbnVtUGFyYW1ldGVyc1RvU2tpcDsKKwogICAg
IGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKSwgcmVnVDApOwogICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwogICAgIEp1
bXAgemVyb0xlbmd0aCA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG51
bVBhcmFtc1RvU2tpcCkpOwogICAgIHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tpcCksIHJlZ1Qw
KTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyhy
ZWdUMCkpOwotI2VuZGlmCisgICAgYm94SW50MzIocmVnVDAsIGpzUmVnVDEwKTsKICAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7CiAKICAgICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7Ci0jaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIo
MCkpKSwgcmVnVDApOwotI2Vsc2UKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwot
I2VuZGlmCisgICAgbW92ZVRydXN0ZWRWYWx1ZShqc051bWJlcigwKSwganNSZWdUMTApOwogCiAg
ICAgZG9uZS5saW5rKHRoaXMpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKLSNlbHNlCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6SW50MzJUYWcpLCByZWdUMSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwotI2VuZGlmCisgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIGpzUmVnVDEwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3Vt
ZW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xOTI0LDI3ICsx
OTUxLDE3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm90b3R5cGVfb2YoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldFByb3RvdHlwZU9mPigpOwogCi0jaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MocmVnVDIpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7Ci0jZWxzZQot
ICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Qx
OwotICAgIEFTU0VSVCh2YWx1ZVJlZ3MudGFnR1BSKCkgPT0gc2NyYXRjaEdQUik7Ci0jZW5kaWYK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlUmVncyk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBqc1JlZ1QxMCk7
CiAKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJ
Zk5vdENlbGwodmFsdWVSZWdzKSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9i
amVjdCh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKSk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2hJZk5vdENlbGwoanNSZWdUMTApKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90
T2JqZWN0KGpzUmVnVDEwLnBheWxvYWRHUFIoKSkpOwogCi0gICAgZW1pdExvYWRQcm90b3R5cGUo
dm0oKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc2xv
d0Nhc2VzKTsKKyAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCBqc1JlZ1QxMC5wYXlsb2FkR1BS
KCksIGpzUmVnVDMyLCByZWdUNCwgc2xvd0Nhc2VzKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2Fz
ZXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVncyk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwganNSZWdUMzIpOworICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIGpzUmVnVDMyKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMz
Ml82NC5jcHAKaW5kZXggMTIyYzlhYWFmNjE4NjkyNDVkODcyNWRlNjRjZDJlOTc3NWMwMjVkNy4u
NDQyOTQ4NTM2ZTczMWViZTA2YThhZTcwZjgzNjQzZWIyMzYyZjQwMiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcApAQCAtMzMsNTI3ICszMywxMzMg
QEAKICNpbmNsdWRlICJCYXNpY0Jsb2NrTG9jYXRpb24uaCIKICNpbmNsdWRlICJCeXRlY29kZUdl
bmVyYXRvci5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgotI2luY2x1ZGUgIkNDYWxs
SGVscGVycy5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkludGVycHJldGVy
SW5saW5lcy5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKLSNpbmNsdWRlICJKU0FycmF5Lmgi
Ci0jaW5jbHVkZSAiSlNDYXN0LmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgotI2luY2x1ZGUg
IkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgotI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKLSNp
bmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oIgotI2luY2x1ZGUgIk9wY29k
ZUlubGluZXMuaCIKICNpbmNsdWRlICJTbG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJUeXBlUHJv
ZmlsZXJMb2cuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKIAogbmFtZXNwYWNlIEpT
QyB7CiAKLXZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjpjb21waWxlT3BFcUNvbW1v
bihWaXJ0dWFsUmVnaXN0ZXIgc3JjMSwgVmlydHVhbFJlZ2lzdGVyIHNyYzIpCiB7Ci0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0YW5j
ZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VW
YWx1ZTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIGpzUmVnVDEwKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIGpzUmVnVDMyKTsKKyAgICBhZGRTbG93Q2FzZShi
cmFuY2gzMihOb3RFcXVhbCwganNSZWdUMTAudGFnR1BSKCksIGpzUmVnVDMyLnRhZ0dQUigpKSk7
CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKGpzUmVnVDEwKSk7CisgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoMzIoQmVsb3csIGpzUmVnVDEwLnRhZ0dQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6TG93ZXN0VGFnKSkpOworfQogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQo
aGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOwotICAgIC8vIFdlIGRvbid0IGp1bXAgaWYgd2Uga25v
dyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4KLSAgICBKdW1wIGhhc0luc3RhbmNl
VmFsdWVOb3RDZWxsID0gZW1pdEp1bXBJZk5vdEpTQ2VsbChoYXNJbnN0YW5jZVZhbHVlKTsKLSAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKLSAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFs
dWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZG
U0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVu
Y3Rpb24pKSk7Cit2b2lkIEpJVDo6Y29tcGlsZU9wRXFTbG93Q29tbW9uKFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgSnVtcExpc3QgZ2VuZXJpY0Nhc2U7CiAK
LSAgICAvLyBXZSBrbm93IHRoYXQgY29uc3RydWN0b3IgaXMgYW4gb2JqZWN0IGZyb20gdGhlIHdh
eSBieXRlY29kZSBpcyBlbWl0dGVkIGZvciBpbnN0YW5jZW9mIGV4cHJlc3Npb25zLgotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGNvbnN0cnVjdG9yLCByZWdUMCk7CisgICAgZ2Vu
ZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0ZXIpKTsgLy8gdGFncyBub3QgZXF1YWwKIAot
ICAgIC8vIENoZWNrIHRoYXQgY29uc3RydWN0b3IgJ0ltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFu
Y2UnIGkuZS4gdGhlIG9iamVjdCBpcyBub3QgYSBDLUFQSSB1c2VyIG5vciBhIGJvdW5kIGZ1bmN0
aW9uLgotICAgIHRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFn
c09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpLCBy
ZWdUMCk7CisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyB0YWdzIGVxdWFsIGFuZCBKU0NlbGwK
KyAgICBnZW5lcmljQ2FzZS5hcHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcoanNSZWdUMTAucGF5bG9h
ZEdQUigpKSk7CisgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElmTm90U3RyaW5nKGpzUmVn
VDMyLnBheWxvYWRHUFIoKSkpOworCisgICAgLy8gU3RyaW5nIGNhc2UuCisgICAgbG9hZEdsb2Jh
bE9iamVjdChyZWdUNCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5n
RXEsIHJlZ1Q0LCBqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIGpzUmVnVDMyLnBheWxvYWRHUFIoKSk7
CiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogCi0gICAgaGFzSW5zdGFuY2VWYWx1ZU5vdENlbGwu
bGluayh0aGlzKTsKLSAgICBjdXN0b21oYXNJbnN0YW5jZVZhbHVlLmxpbmsodGhpcyk7Ci0gICAg
bW92ZShUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKKyAgICAvLyBHZW5lcmljIGNhc2UuCisgICAg
Z2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0ZXIpKTsgLy8gZG91YmxlcworICAgIGdl
bmVyaWNDYXNlLmxpbmsodGhpcyk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1Q0LCBqc1JlZ1QxMCwganNSZWdU
MzIpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdU
MCk7Ci0KLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsK
LQotICAgIHVzaW5nIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cmVzdWx0R1BSOwotICAg
IHVzaW5nIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFsdWVKU1I7Ci0gICAgdXNpbmcg
QmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90b0pTUjsKLSAgICB1c2luZyBCYXNlbGlu
ZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnN0dWJJbmZvR1BSOwotICAgIHVzaW5nIEJhc2VsaW5lSW5z
dGFuY2VvZlJlZ2lzdGVyczo6c2NyYXRjaDFHUFI7Ci0gICAgdXNpbmcgQmFzZWxpbmVJbnN0YW5j
ZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMkdQUjsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQ
YXlsb2FkKHZhbHVlLCB2YWx1ZUpTUi5wYXlsb2FkR1BSKCkpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJQYXlsb2FkKHByb3RvLCBwcm90b0pTUi5wYXlsb2FkR1BSKCkpOwotCi0gICAgLy8g
Q2hlY2sgdGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlz
IGlzIGNoZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh2YWx1ZSk7Ci0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHByb3RvKTsKLSAgICAKLSAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdl
bigKLSAgICAgICAgbnVsbHB0ciwgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVP
cmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAot
ICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAg
IHJlc3VsdEdQUiwKLSAgICAgICAgdmFsdWVKU1IucGF5bG9hZEdQUigpLAotICAgICAgICBwcm90
b0pTUi5wYXlsb2FkR1BSKCksCi0gICAgICAgIHN0dWJJbmZvR1BSLAotICAgICAgICBzY3JhdGNo
MUdQUiwgc2NyYXRjaDJHUFIpOwotCi0gICAgYXV0byBbIHN0dWJJbmZvLCBzdHViSW5mb0luZGV4
IF0gPSBhZGRVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKCk7Ci0gICAgc3R1YkluZm8tPmFjY2Vz
c1R5cGUgPSBBY2Nlc3NUeXBlOjpJbnN0YW5jZU9mOwotICAgIHN0dWJJbmZvLT5ieXRlY29kZUlu
ZGV4ID0gbV9ieXRlY29kZUluZGV4OwotICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFu
dEluZGV4ID0gc3R1YkluZm9JbmRleDsKLSAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1
YkluZm87Ci0KLSAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBz
dHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7Ci0gICAgYWRkU2xvd0Nhc2UoKTsKLSAgICBtX2lu
c3RhbmNlT2ZzLmFwcGVuZChnZW4pOwotICAgIAotICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZXN1
bHRHUFIpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgCi0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwotICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIFZpcnR1YWxSZWdpc3RlciBwcm90byA9
IGJ5dGVjb2RlLm1fcHJvdG90eXBlOwotICAgIAotICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3Im
IGdlbiA9IG1faW5zdGFuY2VPZnNbbV9pbnN0YW5jZU9mSW5kZXgrK107Ci0KLSAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIHVzaW5nIFNsb3dPcGVyYXRpb24gPSBkZWNs
dHlwZShvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUpOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
Z2xvYmFsT2JqZWN0R1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMD4o
KTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcHJlZmVycmVkQXJndW1lbnRH
UFI8U2xvd09wZXJhdGlvbiwgMT4oKTsKLSAgICB1c2luZyBCYXNlbGluZUluc3RhbmNlb2ZSZWdp
c3RlcnM6OnZhbHVlSlNSOwotICAgIHVzaW5nIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6
cHJvdG9KU1I7Ci0gICAgc3RhdGljX2Fzc2VydCh2YWx1ZUpTUiA9PSBwcmVmZXJyZWRBcmd1bWVu
dEpTUjxTbG93T3BlcmF0aW9uLCAyPigpKTsKLSAgICAvLyBQcm90byB3aWxsIGJlIHBhc3NlZCBv
biBzdGFjaywganVzdCBtYWtlIHN1cmUgbm8gb3ZlcmxhcAotICAgIHN0YXRpY19hc3NlcnQobm9P
dmVybGFwKHZhbHVlSlNSLCBwcm90b0pTUiwgZ2xvYmFsT2JqZWN0R1BSLCBzdHViSW5mb0dQUikp
OwotCi0gICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOwotICAgIGxvYWRDb25z
dGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJUYWcodmFsdWUsIHZhbHVlSlNSLnRhZ0dQUigpKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKHByb3RvLCBwcm90b0pTUi50YWdHUFIoKSk7
Ci0gICAgY2FsbE9wZXJhdGlvbjxTbG93T3BlcmF0aW9uPigKLSAgICAgICAgQWRkcmVzcyhzdHVi
SW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwKLSAg
ICAgICAgZHN0LAotICAgICAgICBnbG9iYWxPYmplY3RHUFIsIHN0dWJJbmZvR1BSLCB2YWx1ZUpT
UiwgcHJvdG9KU1IpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Q2FsbCgpKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfaXNfZW1wdHkoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSwgcmVn
VDApOwotICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpF
bXB0eVZhbHVlVGFnKSwgcmVnVDApOwotCi0gICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsK
LX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSXNCb29sZWFuPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7
Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclRhZyh2YWx1ZSwgcmVnVDApOwotICAg
IGNvbXBhcmUzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFn
KSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7Ci19Ci0KLXZvaWQgSklU
OjplbWl0X29wX2lzX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNOdW1i
ZXI+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyVGFnKHZhbHVlLCByZWdUMCk7Ci0gICAgYWRkMzIoVHJ1c3RlZElt
bTMyKDEpLCByZWdUMCk7Ci0gICAgY29tcGFyZTMyKEJlbG93LCByZWdUMCwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6Okxvd2VzdFRhZyArIDEpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQm9vbChkc3Qs
IHJlZ1QwKTsKLX0KLQotTk9fUkVUVVJOIHZvaWQgSklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29u
c3QgSW5zdHJ1Y3Rpb24qKQotewotICAgIC8vIFdlIGVtaXQgaXNfY2VsbF93aXRoX3R5cGUgaW5z
dGVhZCwgc2luY2UgQmlnSW50MzIgaXMgbm90IHN1cHBvcnRlZCBvbiAzMi1iaXQgcGxhdGZvcm1z
LgotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0
X29wX2lzX2NlbGxfd2l0aF90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0Nl
bGxXaXRoVHlwZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGlu
dCB0eXBlID0gYnl0ZWNvZGUubV90eXBlOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2Vs
bChyZWdUMSk7Ci0KLSAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0
eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVnVDApOwotICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKLQotICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIG1vdmUo
VHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Ci0KLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1p
dFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc09iamVjdD4oKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChy
ZWdUMSk7Ci0KLSAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlZ1Qw
KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0KLSAgICBpc05vdENlbGwubGluayh0aGlzKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwotCi0gICAgZG9uZS5saW5rKHRoaXMp
OwotICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29w
X3RvX3ByaW1pdGl2ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewot
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9QcmltaXRpdmU+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjLCByZWdUMSwgcmVnVDApOwotCi0gICAgSnVtcCBpc0ltbSA9IGJyYW5jaElmTm90
Q2VsbChyZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QocmVnVDApKTsKLSAg
ICBpc0ltbS5saW5rKHRoaXMpOwotCi0gICAgaWYgKGRzdCAhPSBzcmMpCi0gICAgICAgIGVtaXRT
dG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3RvX3Byb3Bl
cnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9Qcm9wZXJ0eUtleT4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmMsIHJlZ1QxLCByZWdUMCk7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwo
cmVnVDEpKTsKLSAgICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdUMCk7Ci0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKLQotICAgIGRvbmUubGluayh0aGlz
KTsKLSAgICBpZiAoc3JjICE9IGRzdCkKLSAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJl
Z1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BOb3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0KLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKHNyYywgcmVnVDApOwotCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMsIHJlZ1QxLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RCb29sZWFuKHJlZ1QxLCBJbnZhbGlkR1BSUmVnKSk7Ci0gICAgeG9yMzIoVHJ1c3RlZEltbTMy
KDEpLCByZWdUMCk7Ci0KLSAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDAsIChkc3QgPT0gc3Jj
KSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnVuZGVmaW5lZE9yTnVsbD4oKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLQot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJUYWcodmFsdWUsIHJlZ1QwKTsKLSAgICBzdGF0aWNf
YXNzZXJ0KChKU1ZhbHVlOjpVbmRlZmluZWRUYWcgKyAxID09IEpTVmFsdWU6Ok51bGxUYWcpICYm
IChKU1ZhbHVlOjpOdWxsVGFnICYgMHgxKSwgIiIpOwotICAgIG9yMzIoVHJ1c3RlZEltbTMyKDEp
LCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2hJZk51bGwocmVnVDApLCB0YXJnZXQpOwotfQot
Ci12b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKbnVuZGVmaW5lZE9yTnVsbD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLQotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJUYWcodmFsdWUsIHJlZ1QwKTsKLSAgICBzdGF0aWNfYXNzZXJ0
KChKU1ZhbHVlOjpVbmRlZmluZWRUYWcgKyAxID09IEpTVmFsdWU6Ok51bGxUYWcpICYmIChKU1Zh
bHVlOjpOdWxsVGFnICYgMHgxKSwgIiIpOwotICAgIG9yMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdU
MCk7Ci0gICAgYWRkSnVtcChicmFuY2hJZk5vdE51bGwocmVnVDApLCB0YXJnZXQpOwotfQotCi12
b2lkIEpJVDo6ZW1pdF9vcF9qZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BK
ZXFQdHI+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0g
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJl
Z1QxLCByZWdUMCk7Ci0gICAgSnVtcCBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsK
LSAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnRQYXlsb2FkKGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50
ZXIsIHJlZ1QyKTsKLSAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHJlZ1QyKSwg
dGFyZ2V0KTsKLSAgICBub3RDZWxsLmxpbmsodGhpcyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29w
X2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxUHRyPigpOwotICAg
IFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIHVuc2lnbmVkIHRh
cmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExh
YmVsKTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMSwgcmVnVDApOwot
ICAgIEp1bXAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7Ci0gICAgbG9hZENvZGVC
bG9ja0NvbnN0YW50UGF5bG9hZChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyLCByZWdUMik7Ci0g
ICAgSnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHJlZ1QyKTsKLSAgICBub3RD
ZWxsLmxpbmsodGhpcyk7Ci0gICAgc3RvcmU4VG9NZXRhZGF0YShUcnVzdGVkSW1tMzIoMSksIGJ5
dGVjb2RlLCBPcEpuZXFQdHI6Ok1ldGFkYXRhOjpvZmZzZXRPZkhhc0p1bXBlZCgpKTsKLSAgICBh
ZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKLSAgICBlcXVhbC5saW5rKHRoaXMpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7CiAK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9
IGJ5dGVjb2RlLm1fcmhzOworICAgIGNvbXBpbGVPcEVxQ29tbW9uKGJ5dGVjb2RlLm1fbGhzLCBi
eXRlY29kZS5tX3Jocyk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1Qx
LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCByZWdUMywgcmVnVDIp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDMpKTsKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDEpKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2gzMihCZWxvdywgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7Ci0K
LSAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwotCi0gICAgZW1pdFN0
b3JlQm9vbChkc3QsIHJlZ1QwKTsKKyAgICBjb21wYXJlMzIoRXF1YWwsIGpzUmVnVDEwLnBheWxv
YWRHUFIoKSwganNSZWdUMzIucGF5bG9hZEdQUigpLCByZWdUMCk7CisgICAgYm94Qm9vbGVhbihy
ZWdUMCwganNSZWdUMTApOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QsIGpzUmVnVDEwKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEVxPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKIAot
ICAgIEp1bXBMaXN0IHN0b3JlUmVzdWx0OwotICAgIEp1bXBMaXN0IGdlbmVyaWNDYXNlOworICAg
IGNvbXBpbGVPcEVxQ29tbW9uKGJ5dGVjb2RlLm1fbGhzLCBieXRlY29kZS5tX3Jocyk7CiAKLSAg
ICBnZW5lcmljQ2FzZS5hcHBlbmQoZ2V0U2xvd0Nhc2UoaXRlcikpOyAvLyB0YWdzIG5vdCBlcXVh
bAotCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyB0YWdzIGVxdWFsIGFuZCBKU0NlbGwKLSAg
ICBnZW5lcmljQ2FzZS5hcHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKLSAgICBnZW5l
cmljQ2FzZS5hcHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDIpKTsKLQotICAgIC8vIFN0cmlu
ZyBjYXNlLgotICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCByZWdUMSwgcmVnVDAsIHJlZ1QyKTsKLSAgICBzdG9y
ZVJlc3VsdC5hcHBlbmQoanVtcCgpKTsKLQotICAgIC8vIEdlbmVyaWMgY2FzZS4KLSAgICBnZW5l
cmljQ2FzZS5hcHBlbmQoZ2V0U2xvd0Nhc2UoaXRlcikpOyAvLyBkb3VibGVzCi0gICAgZ2VuZXJp
Y0Nhc2UubGluayh0aGlzKTsKLSAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDQsIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwotCi0gICAgc3RvcmVSZXN1bHQubGlu
ayh0aGlzKTsKLSAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGNv
bXBhcmUzMihOb3RFcXVhbCwganNSZWdUMTAucGF5bG9hZEdQUigpLCBqc1JlZ1QzMi5wYXlsb2Fk
R1BSKCksIHJlZ1QwKTsKKyAgICBib3hCb29sZWFuKHJlZ1QwLCBqc1JlZ1QxMCk7CisgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwganNSZWdUMTApOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsK
ICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29k
ZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMSwgcmVnVDApOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgcmVnVDMsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QzKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZDZWxsKHJlZ1QxKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQmVsb3csIHJlZ1QxLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOworICAgIGNvbXBpbGVPcEVxQ29tbW9u
KGJ5dGVjb2RlLm1fbGhzLCBieXRlY29kZS5tX3Jocyk7CiAKLSAgICBhZGRKdW1wKGJyYW5jaDMy
KEVxdWFsLCByZWdUMCwgcmVnVDIpLCB0YXJnZXQpOwotfQotCi12b2lkIEpJVDo6Y29tcGlsZU9w
RXFKdW1wU2xvdyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBDb21waWxl
T3BFcVR5cGUgdHlwZSwgaW50IGp1bXBUYXJnZXQpCi17Ci0gICAgSnVtcExpc3QgZG9uZTsKLSAg
ICBKdW1wTGlzdCBnZW5lcmljQ2FzZTsKLQotICAgIGdlbmVyaWNDYXNlLmFwcGVuZChnZXRTbG93
Q2FzZShpdGVyKSk7IC8vIHRhZ3Mgbm90IGVxdWFsCi0KLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
IC8vIHRhZ3MgZXF1YWwgYW5kIEpTQ2VsbAotICAgIGdlbmVyaWNDYXNlLmFwcGVuZChicmFuY2hJ
Zk5vdFN0cmluZyhyZWdUMCkpOwotICAgIGdlbmVyaWNDYXNlLmFwcGVuZChicmFuY2hJZk5vdFN0
cmluZyhyZWdUMikpOwotCi0gICAgLy8gU3RyaW5nIGNhc2UuCi0gICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIHJl
Z1QxLCByZWdUMCwgcmVnVDIpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMih0
eXBlID09IENvbXBpbGVPcEVxVHlwZTo6RXEgPyBOb25aZXJvIDogWmVybywgcmV0dXJuVmFsdWVH
UFIpLCBqdW1wVGFyZ2V0KTsKLSAgICBkb25lLmFwcGVuZChqdW1wKCkpOwotCi0gICAgLy8gR2Vu
ZXJpYyBjYXNlLgotICAgIGdlbmVyaWNDYXNlLmFwcGVuZChnZXRTbG93Q2FzZShpdGVyKSk7IC8v
IGRvdWJsZXMKLSAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAgIGxvYWRHbG9iYWxPYmpl
Y3QocmVnVDQpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUNCwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7Ci0g
ICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKHR5cGUgPT0gQ29tcGlsZU9wRXFUeXBl
OjpFcSA/IE5vblplcm8gOiBaZXJvLCByZXR1cm5WYWx1ZUdQUiksIGp1bXBUYXJnZXQpOwotCi0g
ICAgZG9uZS5saW5rKHRoaXMpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKZXE+KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNvbXBpbGVPcEVxSnVt
cFNsb3coaXRlciwgQ29tcGlsZU9wRXFUeXBlOjpFcSwgdGFyZ2V0KTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0g
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBzcmMxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRl
Y29kZS5tX3JoczsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDEsIHJl
Z1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIHJlZ1QzLCByZWdUMik7Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMykpOwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMSkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMy
KEJlbG93LCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKLQotICAg
IGNvbXBhcmUzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7Ci0KLSAgICBlbWl0U3Rv
cmVCb29sKGRzdCwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BOZXE+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwotCi0gICAgSnVtcExpc3Qgc3RvcmVSZXN1bHQ7Ci0gICAgSnVtcExpc3QgZ2VuZXJpY0Nhc2U7
Ci0KLSAgICBnZW5lcmljQ2FzZS5hcHBlbmQoZ2V0U2xvd0Nhc2UoaXRlcikpOyAvLyB0YWdzIG5v
dCBlcXVhbAotCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyB0YWdzIGVxdWFsIGFuZCBKU0Nl
bGwKLSAgICBnZW5lcmljQ2FzZS5hcHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKLSAg
ICBnZW5lcmljQ2FzZS5hcHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDIpKTsKLQotICAgIC8v
IFN0cmluZyBjYXNlLgotICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCByZWdUMSwgcmVnVDAsIHJlZ1QyKTsKLSAg
ICBzdG9yZVJlc3VsdC5hcHBlbmQoanVtcCgpKTsKLQotICAgIC8vIEdlbmVyaWMgY2FzZS4KLSAg
ICBnZW5lcmljQ2FzZS5hcHBlbmQoZ2V0U2xvd0Nhc2UoaXRlcikpOyAvLyBkb3VibGVzCi0gICAg
Z2VuZXJpY0Nhc2UubGluayh0aGlzKTsKLSAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDQsIEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwotCi0gICAgc3RvcmVSZXN1
bHQubGluayh0aGlzKTsKLSAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmV0dXJuVmFsdWVH
UFIpOwotICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgYWRkSnVt
cChicmFuY2gzMihFcXVhbCwganNSZWdUMTAucGF5bG9hZEdQUigpLCBqc1JlZ1QzMi5wYXlsb2Fk
R1BSKCkpLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
YzEsIHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCByZWdU
MywgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgcmVn
VDMpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDEpKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2gzMihCZWxvdywgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RU
YWcpKSk7CisgICAgY29tcGlsZU9wRXFDb21tb24oYnl0ZWNvZGUubV9saHMsIGJ5dGVjb2RlLm1f
cmhzKTsKIAotICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiksIHRh
cmdldCk7CisgICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwganNSZWdUMTAucGF5bG9hZEdQ
UigpLCBqc1JlZ1QzMi5wYXlsb2FkR1BSKCkpLCB0YXJnZXQpOworfQorCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOworCisgICAgY29tcGlsZU9wRXFTbG93Q29t
bW9uKGl0ZXIpOworCisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgcmV0dXJuVmFsdWVK
U1IpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZh
bHVlSlNSKTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVx
PigpOworCisgICAgY29tcGlsZU9wRXFTbG93Q29tbW9uKGl0ZXIpOworCisgICAgeG9yMzIoVHJ1
c3RlZEltbTMyKDEpLCByZXR1cm5WYWx1ZUdQUik7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1
ZUdQUiwgcmV0dXJuVmFsdWVKU1IpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9kc3QsIHJldHVyblZhbHVlSlNSKTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSmVxPigpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKworICAgIGNvbXBp
bGVPcEVxU2xvd0NvbW1vbihpdGVyKTsKKworICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRl
c3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKLSAgICBjb21waWxlT3BFcUp1bXBTbG93KGl0ZXIsIENvbXBpbGVPcEVxVHlwZTo6TkVxLCB0
YXJnZXQpOworCisgICAgY29tcGlsZU9wRXFTbG93Q29tbW9uKGl0ZXIpOworCisgICAgZW1pdEp1
bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsK
IH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6Y29tcGls
ZU9wU3RyaWN0RXFDb21tb24oVmlydHVhbFJlZ2lzdGVyIHNyYzEsICBWaXJ0dWFsUmVnaXN0ZXIg
c3JjMikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4o
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
MiA9IGJ5dGVjb2RlLm1fcmhzOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCBy
ZWdUMSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgcmVnVDMsIHJl
Z1QyKTsKLQotICAgIC8vIEJhaWwgaWYgdGhlIHRhZ3MgZGlmZmVyLCBvciBhcmUgZG91YmxlLgot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDMpKTsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2gzMihCZWxvdywgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpM
b3dlc3RUYWcpKSk7Ci0KLSAgICAvLyBKdW1wIHRvIGEgc2xvdyBjYXNlIGlmIGJvdGggYXJlIHN0
cmluZ3Mgb3Igc3ltYm9scyAobm9uIG9iamVjdCkuCi0gICAgSnVtcCBub3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKHJlZ1QxKTsKLSAgICBKdW1wIGZpcnN0SXNPYmplY3QgPSBicmFuY2hJZk9iamVj
dChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDIpKTsKLSAg
ICBub3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgZmlyc3RJc09iamVjdC5saW5rKHRoaXMpOwotCi0g
ICAgLy8gU2ltcGx5IGNvbXBhcmUgdGhlIHBheWxvYWRzLgotICAgIGlmIGNvbnN0ZXhwciAoc3Rk
Ojppc19zYW1lPE9wLCBPcFN0cmljdGVxPjo6dmFsdWUpCi0gICAgICAgIGNvbXBhcmUzMihFcXVh
bCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7Ci0gICAgZWxzZQotICAgICAgICBjb21wYXJlMzIoTm90
RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwotCi0gICAgZW1pdFN0b3JlQm9vbChkc3QsIHJl
Z1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bfc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBjb21waWxlT3BTdHJpY3RFcTxPcFN0cmljdGVx
PihjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9uc3RyaWN0ZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBjb21waWxlT3BT
dHJpY3RFcTxPcE5zdHJpY3RlcT4oY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0g
Ynl0ZWNvZGUubV9yaHM7Ci0KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIGpzUmVn
VDEwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIGpzUmVnVDMyKTsKIApAQCAt
NTY3LDIyICsxNzMsNDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90T2JqZWN0KGpzUmVnVDMyLnBheWxvYWRHUFIoKSkpOwogICAgIG5vdENlbGwubGluayh0aGlz
KTsKICAgICBmaXJzdElzT2JqZWN0LmxpbmsodGhpcyk7Cit9CiAKLSAgICAvLyBTaW1wbHkgY29t
cGFyZSB0aGUgcGF5bG9hZHMuCi0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWU8T3AsIE9w
SnN0cmljdGVxPjo6dmFsdWUpCi0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIGpzUmVn
VDEwLnBheWxvYWRHUFIoKSwganNSZWdUMzIucGF5bG9hZEdQUigpKSwgdGFyZ2V0KTsKLSAgICBl
bHNlCi0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIGpzUmVnVDEwLnBheWxvYWRH
UFIoKSwganNSZWdUMzIucGF5bG9hZEdQUigpKSwgdGFyZ2V0KTsKK3ZvaWQgSklUOjplbWl0X29w
X3N0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdHJpY3RlcT4oKTsKKyAg
ICBjb21waWxlT3BTdHJpY3RFcUNvbW1vbihieXRlY29kZS5tX2xocywgYnl0ZWNvZGUubV9yaHMp
OworCisgICAgY29tcGFyZTMyKEVxdWFsLCBqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIGpzUmVnVDMy
LnBheWxvYWRHUFIoKSwgcmVnVDApOworCisgICAgYm94Qm9vbGVhbihyZWdUMCwganNSZWdUMTAp
OworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIGpzUmVnVDEwKTsK
K30KKwordm9pZCBKSVQ6OmVtaXRfb3BfbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BOc3RyaWN0ZXE+KCk7CisgICAgY29tcGlsZU9wU3RyaWN0RXFDb21tb24oYnl0ZWNv
ZGUubV9saHMsIGJ5dGVjb2RlLm1fcmhzKTsKKworICAgIGNvbXBhcmUzMihOb3RFcXVhbCwganNS
ZWdUMTAucGF5bG9hZEdQUigpLCBqc1JlZ1QzMi5wYXlsb2FkR1BSKCksIHJlZ1QwKTsKKworICAg
IGJveEJvb2xlYW4ocmVnVDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZHN0LCBqc1JlZ1QxMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pzdHJp
Y3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGNvbXBp
bGVPcFN0cmljdEVxSnVtcDxPcEpzdHJpY3RlcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKKyAg
ICBpbnQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOworCisgICAgY29tcGlsZU9wU3RyaWN0RXFDb21tb24oYnl0ZWNvZGUubV9s
aHMsIGJ5dGVjb2RlLm1fcmhzKTsKKworICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIGpzUmVn
VDEwLnBheWxvYWRHUFIoKSwganNSZWdUMzIucGF5bG9hZEdQUigpKSwgdGFyZ2V0KTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewotICAgIGNvbXBpbGVPcFN0cmljdEVxSnVtcDxPcEpuc3RyaWN0ZXE+KGN1
cnJlbnRJbnN0cnVjdGlvbik7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKbnN0cmljdGVxPigpOworICAgIGludCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisKKyAgICBjb21waWxlT3BT
dHJpY3RFcUNvbW1vbihieXRlY29kZS5tX2xocywgYnl0ZWNvZGUubV9yaHMpOworCisgICAgYWRk
SnVtcChicmFuY2gzMihOb3RFcXVhbCwganNSZWdUMTAucGF5bG9hZEdQUigpLCBqc1JlZ1QzMi5w
YXlsb2FkR1BSKCkpLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmlj
dGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC01OTIsNyArMjI0LDcgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2wKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgbG9hZEdsb2JhbE9iamVj
dChyZWdUNCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJl
Z1Q0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIp
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVnVDQsIGpz
UmVnVDEwLCBqc1JlZ1QzMik7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5v
blplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtNjAzLDE3OCArMjM1LDEw
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVTdHJpY3RFcSwgcmVnVDQsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0
cmljdEVxLCByZWdUNCwganNSZWdUMTAsIGpzUmVnVDMyKTsKICAgICBlbWl0SnVtcFNsb3dUb0hv
dChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCi12b2lk
IEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRv
TnVtYmVyPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QxLCByZWdUMCk7Ci0KLSAgICBKdW1wIGlzSW50MzIg
PSBicmFuY2hJZkludDMyKHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9y
RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOwotICAgIGlz
SW50MzIubGluayh0aGlzKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwotICAgIGlmIChzcmMgIT0gZHN0KQotICAgICAg
ICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF90
b19udW1lcmljKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgSlNWYWx1ZVJlZ3MgYXJndW1lbnRW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
LCByZWdUMSwgcmVnVDApOwotCi0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
cmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChyZWdUMCkpOwot
ICAgIEp1bXAgaXNCaWdJbnQgPSBqdW1wKCk7Ci0KLSAgICBpc05vdENlbGwubGluayh0aGlzKTsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihhcmd1bWVudFZhbHVlUmVncywgcmVn
VDIpKTsKLSAgICBpc0JpZ0ludC5saW5rKHRoaXMpOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7Ci0gICAgaWYgKHNyYyAh
PSBkc3QpCi0gICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7Ci19Ci0KLXZvaWQg
SklUOjplbWl0X29wX3RvX3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9T
dHJpbmc+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0KLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDEsIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90Q2VsbChyZWdUMSkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5n
KHJlZ1QwKSk7Ci0KLSAgICBpZiAoc3JjICE9IGRzdCkKLSAgICAgICAgZW1pdFN0b3JlKGRzdCwg
cmVnVDEsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMSwgcmVn
VDApOwotCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKSk7Ci0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKLQotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwotICAgIGlmIChz
cmMgIT0gZHN0KQotICAgICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwotfQotCi12
b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0
Y2g+KCk7Ci0KLSAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7Ci0KLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92
bSksIHJlZ1QzKTsKLSAgICAvLyBvcGVyYXRpb25UaHJvdyByZXR1cm5zIHRoZSBjYWxsRnJhbWUg
Zm9yIHRoZSBoYW5kbGVyLgotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1l
Rm9yQ2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICBzdG9yZVB0cihUcnVz
dGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hP
ZmZzZXQoKSkpOwotCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRG
b3IobV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVn
aXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLQotICAgIC8vIFdoZW4gdGhlIExMSW50IHRo
cm93cyBhbiBleGNlcHRpb24sIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2UndmUgYWxyZWFkeSB0
aWVyZWQgdXAKLSAgICAvLyB0aGUgc2FtZSBDb2RlQmxvY2sgdG8gYmFzZWxpbmUsIGFuZCB3ZSds
bCBjYXRjaCB0aGUgZXhjZXB0aW9uIGluIHRoZSBiYXNlbGluZSBKSVQgKGJlY2F1c2UKLSAgICAv
LyB3ZSB1cGRhdGVkIHRoZSBleGNlcHRpb24gaGFuZGxlcnMgdG8gcG9pbnQgaGVyZSkuIEJlY2F1
c2UgdGhlIExMSW50IHVzZXMgYSBkaWZmZXJlbnQgdmFsdWUKLSAgICAvLyBpbnNpZGUgc19jb25z
dGFudHNHUFIsIHRoZSBjYWxsZWUgc2F2ZXMgd2UgcmVzdG9yZSBhYm92ZSBtYXkgbm90IGNvbnRh
aW4gdGhlIGNvcnJlY3QgcmVnaXN0ZXIuCi0gICAgLy8gU28gd2UgcmVwbGVuaXNoIGl0IGhlcmUu
Ci0gICAgewotICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrKSwgcmVnVDApOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6
b2Zmc2V0T2ZKSVREYXRhKCkpLCByZWdUMCk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgQ29kZUJsb2NrOjpKSVREYXRhOjpvZmZzZXRPZkpJVENvbnN0YW50UG9vbCgpKSwgc19jb25z
dGFudHNHUFIpOwotICAgIH0KLQotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9w
ZXJhdGlvblJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgJnZtKCkpOwotICAg
IEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJu
VmFsdWVHUFIpOwotICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7Ci0gICAgaXNDYXRj
aGFibGVFeGNlcHRpb24ubGluayh0aGlzKTsKLQotICAgIC8vIE5vdyBzdG9yZSB0aGUgZXhjZXB0
aW9uIHJldHVybmVkIGJ5IG9wZXJhdGlvblRocm93LgotICAgIG1vdmUocmV0dXJuVmFsdWVHUFIs
IHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVnVDEp
OwotCi0gICAgZW1pdFN0b3JlKGJ5dGVjb2RlLm1fZXhjZXB0aW9uLCByZWdUMSwgcmVnVDIpOwot
Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDIsIEV4Y2VwdGlvbjo6dmFsdWVPZmZzZXQoKSArIE9C
SkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlZ1QwKTsKLSAgICBs
b2FkMzIoQWRkcmVzcyhyZWdUMiwgRXhjZXB0aW9uOjp2YWx1ZU9mZnNldCgpICsgT0JKRUNUX09G
RlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZWdUMSk7Ci0KLSAgICBlbWl0U3RvcmUo
Ynl0ZWNvZGUubV90aHJvd25WYWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLQotI2lmIEVOQUJMRShERkdf
SklUKQotICAgIC8vIEZJWE1FOiBjb25zaWRlciBpbmxpbmUgY2FjaGluZyB0aGUgcHJvY2VzcyBv
ZiBkb2luZyBPU1IgZW50cnksIGluY2x1ZGluZwotICAgIC8vIGFyZ3VtZW50IHR5cGUgcHJvb2Zz
LCBzdG9yaW5nIGxvY2FscyB0byB0aGUgYnVmZmVyLCBldGMKLSAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4Ci0KLSAgICBjYWxsT3BlcmF0aW9uTm9F
eGNlcHRpb25DaGVjayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUs
ICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwotICAgIGF1dG8gc2tpcE9TUkVudHJ5
ID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUik7Ci0gICAgZW1pdFJlc3RvcmVD
YWxsZWVTYXZlcygpOwotICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIE5vUHRyVGFnKTsKLSAg
ICBza2lwT1NSRW50cnkubGluayh0aGlzKTsKLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLX0K
LQotdm9pZCBKSVQ6OmVtaXRfb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlKGNvbnN0IEluc3RydWN0
aW9uKikKLXsKLSAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIGhlcmUuLi4KLX0K
LQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3BhcmVudF9zY29wZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2NvcGU+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGN1cnJl
bnRTY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBh
eWxvYWQoY3VycmVudFNjb3BlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVDZWxsKGJ5dGVj
b2RlLm1fZHN0LCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgZW1pdEVudGVyT3B0aW1pemF0
aW9uQ2hlY2soKTsKLSAgICAKLSAgICAvLyBFdmVuIHRob3VnaCBKSVQgY29kZSBkb2Vzbid0IHVz
ZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91ciBjb25zdGFudAotICAgIC8vIHJlZ2lzdGVycyB0byB6
YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwotICAg
IC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KLSAgICBzaXpl
X3QgY291bnQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1WYXJzKCk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJl
Z2lzdGVycygpOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgZW1pdFN0b3JlKHZpcnR1YWxSZWdp
c3RlckZvckxvY2FsKGkpLCBqc1VuZGVmaW5lZCgpKTsKLQotICAgIEpJVFNsb3dQYXRoQ2FsbCBz
bG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZW50ZXIpOwot
ICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2dldF9zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1l
SGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCByZWdUMCk7Ci0g
ICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfY2hl
Y2tfdGR6KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDaGVja1Rkej4oKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVy
LCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOwotfQotCiB9
IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCmluZGV4IGYwMmY0
YWE1OWQ5NmFlMTU1NWVhMzJlYzFhMmY1MTcwNWY0YjFlODYuLjExNGE3NGQ0ZTQ5MTM3NmRjYzUy
NWVkMjE1ZDExOWNlNTA3NTZmYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwCkBAIC0xNDksOCArMTQ5LDggQEAgdm9pZCBKSVQ6OmdlbmVy
YXRlR2V0QnlWYWxTbG93Q2FzZShjb25zdCBPcGNvZGVUeXBlJiBieXRlY29kZSwgVmVjdG9yPFNs
b3dDYXNlRW4KICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0
X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgcmV0dXJuVmFsdWVKU1IpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXR1cm5WYWx1ZUpTUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CkBAIC0yODAs
OCArMjgwLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmUKICAgICBlbWl0TmFrZWROZWFyQ2Fs
bCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2
bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFs
dWVHUFIpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVKU1IpOwor
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUpTUik7CiAjZW5kaWYg
Ly8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CkBAIC0xMjczLDggKzEyNzMsOCBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19v
cF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUpTUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUpTUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IENhbGwoKSk7CkBAIC0xMzY5LDggKzEzNjksOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbAog
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJl
cGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUsIHJldHVyblZhbHVlR1BSKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZS
ZWcsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCByZXR1cm5WYWx1ZUpTUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVn
LCByZXR1cm5WYWx1ZUpTUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAK
ICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CkBAIC0x
NDEzLDggKzE0MTMsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihyZXN1bHRWUmVnLCByZXN1bHRKU1IpOwogfQogCi0jaWYgVVNFKEpTVkFMVUU2NCkK
LQogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KFZNJiB2bSkKIHsKQEAgLTE0NTIsOCArMTQ1MCw2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRv
CiB9CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSNlbmRpZgotCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CkBAIC0xNTAzLDE1ICsxNDk5LDEzIEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihzbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXNfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJ
U3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
IAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUpTUik7Cisg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUpTUik7CiAj
ZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICBnZW4ucmVwb3J0U2xvd1Bh
dGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQot
CiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzX3ByZXBhcmVDYWxs
R2VuZXJhdG9yKFZNJiB2bSkKIHsKQEAgLTE1NTEsOCArMTU0NSw2IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXNf
cHJlcGFyZUNhCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSNlbmRp
ZgotCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dEJ5SWQ+KCk7CkBAIC0yOTMxLDggKzI5MjMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9lbnVtZXJhdG9yX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIAogICAgIGRvbmVDYXNlcy5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IHJldHVyblZhbHVlSlNSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJu
VmFsdWVKU1IpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZW51bWVyYXRvcl9nZXRfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC0yOTY2LDcgKzI5NTgsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbgogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVj
dHVyZUlET2Zmc2V0KCkpKSk7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKICAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7CiAKICAgICBzbG93Q2FzZXMubGluayh0aGlzKTsKQEAgLTMwMjYsNjMg
KzMwMTgsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3QKIAogI2VuZGlmCiAKK3ZvaWQgSklU
OjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCit7CisgICAgLy8gdmFsdWUgbWF5IGJlIGlu
dmFsaWQgVmlydHVhbFJlZ2lzdGVyIGlmIG1vZGUgaXMgVW5jb25kaXRpb25hbFdyaXRlQmFycmll
ciBvciBTaG91bGRGaWx0ZXJCYXNlLgorICAgIEp1bXAgdmFsdWVOb3RDZWxsOworICAgIGlmICht
b2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZh
bHVlKSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLQotdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIo
VmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmll
ck1vZGUgbW9kZSkKLXsKLSAgICAvLyB2YWx1ZSBtYXkgYmUgaW52YWxpZCBWaXJ0dWFsUmVnaXN0
ZXIgaWYgbW9kZSBpcyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIG9yIFNob3VsZEZpbHRlckJh
c2UuCi0gICAgSnVtcCB2YWx1ZU5vdENlbGw7Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVy
VmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgICAgICB2YWx1ZU5vdENlbGwg
PSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgIH0KLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3duZXIsIHJlZ1QwKTsKLSAgICBKdW1wIG93bmVyTm90Q2VsbDsKLSAgICBpZiAobW9k
ZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNl
KQotICAgICAgICBvd25lck5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotCi0gICAg
SnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCByZWdU
MCwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbldy
aXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgcmVnVDApOwotICAgIG93bmVySXNSZW1lbWJlcmVk
T3JJbkVkZW4ubGluayh0aGlzKTsKLQotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VB
bmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCi0gICAgICAgIG93bmVyTm90Q2Vs
bC5saW5rKHRoaXMpOwotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUg
PT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKQotICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0
aGlzKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCi17Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgdmFsdWVOb3RDZWxsOwot
ICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKQotICAgICAgICB2YWx1ZU5vdENlbGwg
PSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotCi0gICAgZW1pdFdyaXRlQmFycmllcihvd25lcik7
Ci0KLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkKLSAgICAgICAgdmFsdWVOb3RD
ZWxsLmxpbmsodGhpcyk7Ci19Ci0KICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0KLXZvaWQgSklU
OjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCi17Ci0gICAgLy8gdmFsdWUgbWF5IGJlIGlu
dmFsaWQgVmlydHVhbFJlZ2lzdGVyIGlmIG1vZGUgaXMgVW5jb25kaXRpb25hbFdyaXRlQmFycmll
ciBvciBTaG91bGRGaWx0ZXJCYXNlLgotICAgIEp1bXAgdmFsdWVOb3RDZWxsOwotICAgIGlmICht
b2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZh
bHVlKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJUYWcodmFsdWUsIHJlZ1QwKTsK
KyNlbmRpZgogICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwog
ICAgIH0KIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIsIHJlZ1QwLCByZWdUMSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihvd25lciwganNSZWdUMTApOwogICAgIEp1bXAg
b3duZXJOb3RDZWxsOwogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2UgfHwgbW9kZSA9
PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpCi0gICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5j
aElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaElmTm90Q2Vs
bChqc1JlZ1QxMCk7CiAKLSAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJy
aWVyQnJhbmNoKHZtKCksIHJlZ1QxLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0
aW9uQ2hlY2sob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCByZWdUMSk7Cisg
ICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBq
c1JlZ1QxMC5wYXlsb2FkR1BSKCksIHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRp
b25DaGVjayhvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIGpzUmVnVDEwLnBh
eWxvYWRHUFIoKSk7CiAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwog
CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSB8fCBtb2RlID09IFNob3VsZEZpbHRl
ckJhc2VBbmRWYWx1ZSkKQEAgLTMwOTEsMjIgKzMwNDYsNiBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRl
QmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3Jp
dGVCYQogICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0
ZUJhcnJpZXJNb2RlIG1vZGUpCi17Ci0gICAgSnVtcCB2YWx1ZU5vdENlbGw7Ci0gICAgaWYgKG1v
ZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
clRhZyh2YWx1ZSwgcmVnVDApOwotICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENl
bGwocmVnVDApOwotICAgIH0KLQotICAgIGVtaXRXcml0ZUJhcnJpZXIob3duZXIpOwotCi0gICAg
aWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpCi0gICAgICAgIHZhbHVlTm90Q2VsbC5saW5r
KHRoaXMpOwotfQotCi0jZW5kaWYKLQogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVh
bFJlZ2lzdGVyIG93bmVyLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7CiAgICAgQVNTRVJUKG1v
ZGUgPT0gVW5jb25kaXRpb25hbFdyaXRlQmFycmllciB8fCBtb2RlID09IFNob3VsZEZpbHRlckJh
c2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJ
VC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCmluZGV4IGYx
ODZmYjgyYjFmZjk3OGQ4ZjY3YTRmMDUzMzhlOWNmYjRjODIzNzQuLjRiNDI5YTI2N2NjZWUyYzY0
NzNlZGE3MWM5ZmM5NDU0YzU4MjMwMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSlNJbnRlcmZhY2VKSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pT
SW50ZXJmYWNlSklULmgKQEAgLTQ5LDE1ICs0OSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBpbmxpbmUgSnVtcCBlbWl0TG9hZEludDMyKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBk
c3QpOwogICAgICAgICBpbmxpbmUgSnVtcCBlbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIs
IEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCk7CiAKLSNpZiBVU0UoSlNWQUxV
RTMyXzY0KQotICAgICAgICBpbmxpbmUgSnVtcCBlbWl0SnVtcElmTm90SlNDZWxsKFZpcnR1YWxS
ZWdpc3Rlcik7Ci0jZW5kaWYKLQotICAgICAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVh
ZGVyUHRyKFZpcnR1YWxSZWdpc3RlciBlbnRyeSwgUmVnaXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBm
cm9tID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFt
ZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSk7Ci0gICAgICAg
IHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQqIHZhbHVlLCBWaXJ0dWFsUmVnaXN0
ZXIgZW50cnkpOwotICAgICAgICB2b2lkIGVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIoUmVn
aXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpOwotCiAgICAgICAgIFZNKiB2bSgp
IGNvbnN0IHsgcmV0dXJuIG1fdm07IH0KIAogICAgICAgICBWTSogbV92bTsKQEAgLTY1LDE3ICs1
NiwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgaW5s
aW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEpTQ2VsbChW
aXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHBheWxvYWQpCi0gICAg
ewotICAgICAgICBsb2FkUHRyKHBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgcGF5bG9hZCk7
Ci0gICAgICAgIHJldHVybiBlbWl0SnVtcElmTm90SlNDZWxsKHZpcnR1YWxSZWdpc3Rlcik7Ci0g
ICAgfQotCi0gICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjpl
bWl0SnVtcElmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCiAgICAg
ewogICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyIDwgVmlydHVhbFJlZ2lzdGVyKEZpcnN0
Q29uc3RhbnRSZWdpc3RlckluZGV4KSk7CisgICAgICAgIGxvYWRQdHIocGF5bG9hZEZvcih2aXJ0
dWFsUmVnaXN0ZXIpLCBwYXlsb2FkKTsKICAgICAgICAgcmV0dXJuIGJyYW5jaDMyKE5vdEVxdWFs
LCB0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcp
KTsKICAgICB9Ci0gICAgCisKICAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRl
cmZhY2VKSVQ6OmVtaXRMb2FkSW50MzIoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3Rlciwg
UmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyIDwg
VmlydHVhbFJlZ2lzdGVyKEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KSk7CkBAIC05NywxNiAr
ODMsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGRvbmUubGluayh0aGlzKTsKICAgICAg
ICAgcmV0dXJuIG5vdEludDsKICAgICB9Ci0KLSNlbmRpZgotCi0jaWYgVVNFKEpTVkFMVUU2NCkK
KyNlbGlmIFVTRShKU1ZBTFVFNjQpCiAgICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpT
SW50ZXJmYWNlSklUOjplbWl0TG9hZEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lz
dGVyLCBSZWdpc3RlcklEIGRzdCkKICAgICB7CiAgICAgICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZp
cnR1YWxSZWdpc3RlciksIGRzdCk7CiAgICAgICAgIHJldHVybiBicmFuY2hJZk5vdENlbGwoZHN0
KTsKICAgICB9Ci0gICAgCisKICAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRl
cmZhY2VKSVQ6OmVtaXRMb2FkSW50MzIoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3Rlciwg
UmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBsb2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFs
UmVnaXN0ZXIpLCBkc3QpOwpAQCAtMTI5LDM1ICsxMTIsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICB9CiAjZW5kaWYKIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1p
dEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoVmlydHVhbFJlZ2lzdGVyIGVudHJ5LCBSZWdpc3Rl
cklEIHRvLCBSZWdpc3RlcklEIGZyb20pCi0gICAgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
ZnJvbSwgZW50cnkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgdG8pOwotICAgIH0KLQot
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dFRvQ2FsbEZyYW1l
SGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQotICAgIHsKLSNp
ZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBzdG9yZVB0cihmcm9tLCBwYXlsb2FkRm9yKGVu
dHJ5KSk7Ci0jZWxzZQotICAgICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZW50cnkpKTsK
LSNlbmRpZgotICAgIH0KLQotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6
ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQqIHZhbHVlLCBWaXJ0dWFsUmVnaXN0ZXIgZW50
cnkpCi0gICAgewotICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKHZhbHVlKSwgYWRkcmVz
c0ZvcihlbnRyeSkpOwotICAgIH0KLQotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFj
ZUpJVDo6ZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1
YWxSZWdpc3RlciBlbnRyeSkKLSAgICB7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAg
c3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhZ0ZvcihlbnRyeSkpOwot
ICAgICAgICBzdG9yZTMyKGZyb20sIHBheWxvYWRGb3IoZW50cnkpKTsKLSNlbHNlCi0gICAgICAg
IHN0b3JlNjQoZnJvbSwgYWRkcmVzc0ZvcihlbnRyeSkpOwotI2VuZGlmCi0gICAgfQotCiB9IC8v
IG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445401</attachid>
            <date>2021-11-30 02:40:48 -0800</date>
            <delta_ts>2021-11-30 07:44:35 -0800</delta_ts>
            <desc>Fix nit</desc>
            <filename>bug-233424-20211130104046.patch</filename>
            <type>text/plain</type>
            <size>148627</size>
            <attacher name="Geza Lore">glore</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2Mjg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
ZDMyZjViZDg4MjUwOTk0ZTEwNmRmZGYwYTFkZTQ5YzZkMGFkZjZlLi5mMzMwMGU0MGNmYzQ5YWUw
NjIwZWZmNTdmN2UwMWNlODQ0MjMzZWI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMjAgQEAKKzIwMjEtMTEtMzAgIEdlemEgTG9yZSAgPGdsb3JlQGlnYWxpYS5jb20+CisK
KyAgICAgICAgW0pTQ10gVW5pZnkgbW9zdCBCYXNlbGluZSBvcHMgYmV0d2VlbiBKU1ZBTFVFNjQg
YW5kIEpTVkFMVUUzMl82NAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjMzNDI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1enVraS4KKwor
ICAgICAgICBUaGlzIHBhdGNoIHVuaWZpZXMgdGhlIEJhc2VsaW5lIEpJVCBpbXBsZW1lbnRhdGlv
bnMgb2YgbW9zdCBieXRlY29kZQorICAgICAgICBvcHMgYmV0d2VlbiB0aGUgSlNWQUxVRTMyXzY0
IGFuZCBKU1ZBTFVFNjQgcGxhdGZvcm1zLiBUaGVyZSBhcmUgdmVyeQorICAgICAgICBmZXcgY2hh
bmdlcyB0byB0aGUgZ2VuZXJhdGVkIGNvZGUgb24gSlNWQUxVRTY0IChhbmQgYWxsIGFyZSBmYWly
bHkKKyAgICAgICAgdHJpdmlhbCwgZS5nLjogcmVtb3ZhbCBvZiByZWR1bmRhbnQgbW92ZXMgaW4g
dGhlIHNsb3cgcGF0aCksIGFwYXJ0CisgICAgICAgIGZyb20gbWFjaGluZSByZWdpc3RlciBzdWJz
dGl0dXRpb25zLiBNeSBtZWFzdXJlbWVudHMgb24geDg2XzY0CisgICAgICAgIGluZGljYXRlIHRo
ZSBwYXRjaCBpcyBwZXJmb3JtYW5jZSBuZXV0cmFsIHRoZXJlICh3aGljaCBpcyB3aGF0IHdlCisg
ICAgICAgIGV4cGVjdCkuCisKKyAgICAgICAgT24gQVJNdjcvVGh1bWItMiBKZXRTdHJlYW0yIHNo
b3dzIGEgMC40JSBpbXByb3ZlbWVudC4gVGhpcyBpcyBkdWUgdG8KKyAgICAgICAgc29tZSBvZiB0
aGUgaW1wcm92ZWQgaW1wbGVtZW50YXRpb25zIHBpY2tlZCB1cCBmcm9tIHRoZSBKU1ZBTFVFNjQK
KyAgICAgICAgdmVyc2lvbnMuCisKKyAgICAgICAgQWxzbyByZW1vdmUgdmFyaW91cyB1bnVzZWQg
Y29kZS4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdGlhbGl6
ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlI
ZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YnJhbmNoSWZCb29sZWFu
KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpicmFuY2hJZk5vdEJvb2xlYW4pOgor
ICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmlzVW5kZWZpbmVkKToKKyAgICAgICAgKiBq
aXQvR1BSSW5mby5oOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAqIGppdC9KSVQu
aDoKKyAgICAgICAgKiBqaXQvSklUQXJpdGhtZXRpYy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF91bnNpZ25lZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJlQW5kSnVt
cEltcGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcElt
cGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2luYyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWMpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbW9kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
Qml0QmluYXJ5T3BGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9iaXRub3Qp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRSaWdodFNoaWZ0RmFzdFBhdGgpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRNYXRoSUNGYXN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TWF0aElD
U2xvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kaXYpOgorICAgICAgICAqIGppdC9K
SVRBcml0aG1ldGljMzJfNjQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGppdC9KSVRJbmxpbmVD
YWNoZUdlbmVyYXRvci5oOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVzLmg6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEludCk6CisgICAgICAgIChKU0M6OkpJVDo6bG9hZENvZGVCbG9ja0NvbnN0
YW50UGF5bG9hZCk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9p
bnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2VtcHR5KToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9p
c19udW1iZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfYmlnX2ludCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9pc19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9f
cHJpbWl0aXZlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9ub3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfanVuZGVmaW5lZF9vcl9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pu
dW5kZWZpbmVkX29yX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamVxX3B0cik6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxX3B0cik6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXEpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RvX251bWJlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19udW1lcmljKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX3N0cmluZyk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF90b19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3BhcmVudF9zY29wZSk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfdG9fdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jaGVja190ZHopOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4cCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0
X3Byb3RvdHlwZV9vZik6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAg
ICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wRXFDb21tb24pOgorICAgICAgICAoSlNDOjpKSVQ6OmNv
bXBpbGVPcEVxU2xvd0NvbW1vbik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lcSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfamVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXEpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX2VxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9u
ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2plcSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3Bfam5lcSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wU3Ry
aWN0RXFDb21tb24pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3RyaWN0ZXEpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbnN0cmljdGVxKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2pzdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbnN0cmljdGVx
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEpOgorICAgICAgICAqIGppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dD
YXNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2Vu
dW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFdyaXRl
QmFycmllcik6CisgICAgICAgICogaml0L0pTSW50ZXJmYWNlSklULmg6CisgICAgICAgIChKU0M6
OkpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEpTQ2VsbCk6CisKIDIwMjEtMTEtMjkgIFl1c3VrZSBT
dXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBqdW1wRm9yVHlwZWRB
cnJheU91dE9mQm91bmRzIHNob3VsZCB1c2UgYXNBbnlJbnQgc2luY2UgaXQgdXNlcyBpc0FueUlu
dApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmNDJmOTQyZmE1MjJlODFjM2E5Y2I5
OTVlN2IwZTBmYzMzMjE5NDYwLi4zMzBlMzEyZDE5N2UxM2M1OTIwMmY2YWYxNTk1ODM3NWZkZjM5
OWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDcyOCw3ICs0NzI4LDYgQEAK
IAkJQTc0REVGOEUxODJEOTkxNDAwNTIyQzIyIC8qIE1hcEl0ZXJhdG9yUHJvdG90eXBlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcEl0ZXJhdG9yUHJvdG90eXBlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NERFRjhGMTgyRDk5MTQwMDUyMkMyMiAvKiBK
U01hcEl0ZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
TWFwSXRlcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzRERUY5MDE4
MkQ5OTE0MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU01hcEl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUE3NTcwNkREMTE4QTJCQ0YwMDU3Rjg4RiAvKiBKSVRBcml0aG1ldGljMzJfNjQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUQXJpdGhtZXRpYzMyXzY0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc1RUU5QjAxOEFBQjdFMjAwQUFEMDQzIC8q
IEJ1aWx0aW5OYW1lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCdWlsdGlu
TmFtZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc2N0I1QjMxN0EwQjk2NTAw
NjNEOTQwIC8qIERGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmNw
cDsgcGF0aCA9IGRmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NjdCNUI0MTdBMEI5NjUwMDYzRDk0MCAvKiBERkdMb29w
UHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR0xvb3BQcmVI
ZWFkZXJDcmVhdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02Mzc1
LDcgKzYzNzQsNiBAQAogCQkJCUZFMTIyMDI2MUJFN0Y1NjQwMDM5RTZGMiAvKiBKSVRBZGRHZW5l
cmF0b3IuaCAqLywKIAkJCQkwRjc1QTA2NTIwMTNFNEVGMDAzOEUyQ0YgLyogSklUQWxsb2NhdG9y
LmggKi8sCiAJCQkJODZBOTBFQ0YwRUU3RDUxRjAwQUIzNTBEIC8qIEpJVEFyaXRobWV0aWMuY3Bw
ICovLAotCQkJCUE3NTcwNkREMTE4QTJCQ0YwMDU3Rjg4RiAvKiBKSVRBcml0aG1ldGljMzJfNjQu
Y3BwICovLAogCQkJCUZFM0EwNkFEMUMxMENCNkYwMDM5MEZERCAvKiBKSVRCaXRBbmRHZW5lcmF0
b3IuY3BwICovLAogCQkJCUZFM0EwNkFFMUMxMENCNkYwMDM5MEZERCAvKiBKSVRCaXRBbmRHZW5l
cmF0b3IuaCAqLywKIAkJCQlGRTNBMDZBNzFDMTBCQzc0MDAzOTBGREQgLyogSklUQml0QmluYXJ5
T3BHZW5lcmF0b3IuaCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3Vy
Y2VzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCBlMGRlNmI3
MmY4YzA4Y2Y0MGQwOGQ4MzQzOWQyN2VmMDc3YzlmY2IwLi5jOWUzZWExYzkwMmQ3NWEzN2RkY2Zh
ZTY3YmMyOWVmYTliNDcwMDVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291
cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CkBAIC02Mzks
NyArNjM5LDYgQEAgaml0L0ludHJpbnNpY0VtaXR0ZXIuY3BwCiBqaXQvSklULmNwcAogaml0L0pJ
VEFkZEdlbmVyYXRvci5jcHAKIGppdC9KSVRBcml0aG1ldGljLmNwcAotaml0L0pJVEFyaXRobWV0
aWMzMl82NC5jcHAKIGppdC9KSVRCaXRBbmRHZW5lcmF0b3IuY3BwCiBqaXQvSklUQml0T3JHZW5l
cmF0b3IuY3BwCiBqaXQvSklUQml0WG9yR2VuZXJhdG9yLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCmluZGV4IGFh
N2VjMDFlMzg0OGFkYTlmY2FiOTUwNDIzMmY2ODdjMDM0OGMzMTAuLjA0NWRlZmVkYjE1NGZkMDg5
YTJiNjhkY2Q2MzE4MTE5NzEwMDFlMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKQEAgLTg5Nyw2ICs4OTcsMTIg
QEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci54b3JxX2lyKGltbS5tX3ZhbHVlLCBzcmNE
ZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIHhvcjY0KFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVy
SUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtb3ZlKHNyYywgZGVzdCk7
CisgICAgICAgIHhvcjY0KGltbSwgZGVzdCk7CisgICAgfQorCiAgICAgdm9pZCB4b3I2NChUcnVz
dGVkSW1tNjQgaW1tLCBSZWdpc3RlcklEIHNyY0Rlc3QpCiAgICAgewogICAgICAgICBtb3ZlKGlt
bSwgc2NyYXRjaFJlZ2lzdGVyKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKaW5kZXggOTAxZmM1MzY5YTdjZTY4YzM3YTcy
MWE5YjRjYTk0ZWQzMjdmZGNmZi4uZDIxMDQxNzQyYmQ0OTViNjZlY2E0NTA4ZDczYjhkMzhjYWNm
ZjE1YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uY3BwCkBAIC01NjQsMTkgKzU2NCwxNCBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJ
bmZvOjppbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oQ29kZUJsb2NrKiwg
VW5saQogICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjoKICAgICAgICAgaGFzQ29uc3Rh
bnRJZGVudGlmaWVyID0gZmFsc2U7CiAgICAgICAgIHByb3RvdHlwZUlzS25vd25PYmplY3QgPSBm
YWxzZTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBiYXNlR1BSID0gQmFzZWxpbmVJbnN0
YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZTsKLSAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluc3Rh
bmNlb2ZSZWdpc3RlcnM6OnJlc3VsdDsKLSAgICAgICAgcmVncy5wcm90b3R5cGVHUFIgPSBCYXNl
bGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvOwotICAgICAgICBtX3N0dWJJbmZvR1BSID0g
QmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzdHViSW5mbzsKLSNlbGlmIFVTRShKU1ZBTFVF
MzJfNjQpCiAgICAgICAgIGJhc2VHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZh
bHVlSlNSLnBheWxvYWRHUFIoKTsKLSAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluc3RhbmNl
b2ZSZWdpc3RlcnM6OnJlc3VsdEdQUjsKKyAgICAgICAgdmFsdWVHUFIgPSBCYXNlbGluZUluc3Rh
bmNlb2ZSZWdpc3RlcnM6OnJlc3VsdEpTUi5wYXlsb2FkR1BSKCk7CiAgICAgICAgIHJlZ3MucHJv
dG90eXBlR1BSID0gQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90b0pTUi5wYXlsb2Fk
R1BSKCk7CiAgICAgICAgIG1fc3R1YkluZm9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3Rl
cnM6OnN0dWJJbmZvR1BSOwotICAgICAgICBiYXNlVGFnR1BSID0gSW52YWxpZEdQUlJlZzsKKyNp
ZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBiYXNlVGFnR1BSID0gQmFzZWxpbmVJbnN0YW5j
ZW9mUmVnaXN0ZXJzOjp2YWx1ZUpTUi50YWdHUFIoKTsKICAgICAgICAgdmFsdWVUYWdHUFIgPSBJ
bnZhbGlkR1BSUmVnOwotICAgICAgICB2LnByb3BlcnR5VGFnR1BSID0gSW52YWxpZEdQUlJlZzsK
KyAgICAgICAgdi5wcm9wZXJ0eVRhZ0dQUiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6
cHJvdG9KU1IudGFnR1BSKCk7CiAjZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nl
c3NUeXBlOjpJbkJ5VmFsOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9B
c3NlbWJseUhlbHBlcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxw
ZXJzLmgKaW5kZXggOTg3MmQ1NjlkNDMzYjllMjc0ZGFkM2MzMmVjNWMzYjM0ZGRhOTc4MC4uZTZj
NzM2YzY3Y2ExMDJkNTI1NzBhNzE4OWMxMDA2MmVlYTVjNDI3YyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCkBAIC04MjEsOCArODIxLDcgQEAgcHVibGlj
OgogICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBBU1NFUlQodGVtcEdQUiAhPSBJ
bnZhbGlkR1BSUmVnKTsKLSAgICAgICAgbW92ZShncHIsIHRlbXBHUFIpOwotICAgICAgICB4b3I2
NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHRlbXBHUFIpOworICAgICAgICB4
b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIGdwciwgdGVtcEdQUik7CiAg
ICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQoWmVybywgdGVtcEdQUiwgVHJ1c3RlZEltbTMyKHN0
YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpOwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKHRl
bXBHUFIpOwpAQCAtODQ1LDggKzg0NCw3IEBAIHB1YmxpYzoKICAgICB7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKICAgICAgICAgQVNTRVJUKHRlbXBHUFIgIT0gSW52YWxpZEdQUlJlZyk7Ci0gICAgICAg
IG1vdmUoZ3ByLCB0ZW1wR1BSKTsKLSAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlRmFsc2UpLCB0ZW1wR1BSKTsKKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlRmFsc2UpLCBncHIsIHRlbXBHUFIpOwogICAgICAgICByZXR1cm4gYnJhbmNoVGVz
dDY0KE5vblplcm8sIHRlbXBHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+
MSkpKTsKICNlbHNlCiAgICAgICAgIFVOVVNFRF9QQVJBTSh0ZW1wR1BSKTsKQEAgLTEwMzMsNiAr
MTAzMSwxNSBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAKKyAgICB2b2lkIGlzVW5kZWZpbmVk
KEpTVmFsdWVSZWdzIHJlZ3MsIEdQUlJlZyBkc3QpCisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQp
CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVncy5wYXlsb2FkR1BSKCksIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIGRzdCk7CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0
KQorICAgICAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ3MudGFnR1BSKCksIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBkc3QpOworI2VuZGlmCisgICAgfQorCiAgICAgLy8gTm90
ZSB0aGF0IHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmVzcGVjdCBNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLgogICAgIEp1bXAgYnJhbmNoSWZVbmRlZmluZWQoR1BSUmVnIGdwcikKICAgICB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCmluZGV4IDJmOGU1NDQ3M2Y3MjEzYzkyZDg4NmExOTZh
ZTJjOTFjMWU0NDZkYzkuLmYxYzk4ZDkzYmUzZDQxMDhiMTUzZTMzMTc5NjlmYmEyZDQxNDYzODcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCkBAIC05MzksOSArOTM5LDExIEBAIHB1
YmxpYzoKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIHN0YXRpYyBjb25zdGV4cHIgSlNWYWx1ZVJl
Z3MganNSZWdUMTAgeyBHUFJJbmZvOjpyZWdUMCB9OwogICAgIHN0YXRpYyBjb25zdGV4cHIgSlNW
YWx1ZVJlZ3MganNSZWdUMzIgeyBHUFJJbmZvOjpyZWdUMiB9OworICAgIHN0YXRpYyBjb25zdGV4
cHIgSlNWYWx1ZVJlZ3MganNSZWdUNTQgeyBHUFJJbmZvOjpyZWdUNCB9OwogI2VsaWYgVVNFKEpT
VkFMVUUzMl82NCkKICAgICBzdGF0aWMgY29uc3RleHByIEpTVmFsdWVSZWdzIGpzUmVnVDEwIHsg
R1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwIH07CiAgICAgc3RhdGljIGNvbnN0ZXhwciBK
U1ZhbHVlUmVncyBqc1JlZ1QzMiB7IEdQUkluZm86OnJlZ1QzLCBHUFJJbmZvOjpyZWdUMiB9Owor
ICAgIHN0YXRpYyBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MganNSZWdUNTQgeyBHUFJJbmZvOjpyZWdU
NSwgR1BSSW5mbzo6cmVnVDQgfTsKICNlbmRpZgogCiAgICAgLy8gUmV0dXJuIHZhbHVlIHJlZ2lz
dGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKaW5kZXggMGM2YmYzZDFlNzUwNjM2YjgwNzAw
MDQ4NDRlZDNlNTM2MzMwM2E4MS4uMmIzMWNhZTAxYmJiY2FjMDRhN2VkZDMxMzg5YWQ5ZGViODA2
ZjgwNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcApAQCAtMTI2LDE2ICsxMjYsNiBAQCB2
b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKQogfQogI2VuZGlmCiAKLXZvaWQg
SklUOjplbWl0Tm90aWZ5V3JpdGUoV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGlmICghc2V0
IHx8IHNldC0+c3RhdGUoKSA9PSBJc0ludmFsaWRhdGVkKSB7Ci0gICAgICAgIGFkZFNsb3dDYXNl
KEp1bXAoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mU3RhdGUoKSks
IFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwotfQotCiB2b2lkIEpJVDo6ZW1pdE5vdGlm
eVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRlclRvU2V0KQogewogICAgIGF1dG8gb2sgPSBi
cmFuY2hUZXN0UHRyKFplcm8sIHBvaW50ZXJUb1NldCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApp
bmRleCBkNjMwNjZmNzkwNzAwNDcyYzk5NjNlYzgzNTA3NzFjMmNhZDRjMGNjLi5mMjVmOWY5NzRl
MjRlNmM0MjA4YTEwNTA3NDk4ODljNzAxZmU1YTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgK
QEAgLTI1NCw4ICsyNTQsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwcml2YXRlOgogICAgICAg
ICB2b2lkIGxvYWRHbG9iYWxPYmplY3QoR1BSUmVnKTsKICAgICAgICAgdm9pZCBsb2FkQ29kZUJs
b2NrQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyLCBKU1ZhbHVlUmVncyk7Ci0jaWYgVVNFKEpTVkFM
VUUzMl82NCkKICAgICAgICAgdm9pZCBsb2FkQ29kZUJsb2NrQ29uc3RhbnRQYXlsb2FkKFZpcnR1
YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAg
dm9pZCBsb2FkQ29kZUJsb2NrQ29uc3RhbnRUYWcoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklE
KTsKICNlbmRpZgogCkBAIC0zMTMsMzEgKzMxMywzNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdFB1dENhbGxSZXN1bHQo
Y29uc3QgT3AmKTsKIAorI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPiB2b2lkIGNvbXBpbGVPcFN0cmljdEVxKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPiB2b2lkIGNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25z
dCBJbnN0cnVjdGlvbiopOwotICAgICAgICBlbnVtIGNsYXNzIENvbXBpbGVPcEVxVHlwZSB7IEVx
LCBORXEgfTsKLSAgICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKLSAg
ICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIpOwotICAg
ICAgICAKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHZvaWQgY29tcGlsZU9wRXFD
b21tb24oVmlydHVhbFJlZ2lzdGVyIHNyYzEsIFZpcnR1YWxSZWdpc3RlciBzcmMyKTsKKyAgICAg
ICAgdm9pZCBjb21waWxlT3BFcVNsb3dDb21tb24oVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOworICAgICAgICB2b2lkIGNvbXBpbGVPcFN0cmljdEVxQ29tbW9uKFZpcnR1YWxSZWdp
c3RlciBzcmMxLCAgVmlydHVhbFJlZ2lzdGVyIHNyYzIpOworI2VuZGlmCisKICAgICAgICAgZW51
bSBXcml0ZUJhcnJpZXJNb2RlIHsgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciwgU2hvdWxkRmls
dGVyQmFzZSwgU2hvdWxkRmlsdGVyVmFsdWUsIFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB9Owog
ICAgICAgICAvLyB2YWx1ZSByZWdpc3RlciBpbiB3cml0ZSBiYXJyaWVyIGlzIHVzZWQgYmVmb3Jl
IGFueSBzY3JhdGNoIHJlZ2lzdGVycwogICAgICAgICAvLyBzbyBtYXkgc2FmZWx5IGJlIHRoZSBz
YW1lIGFzIGVpdGhlciBvZiB0aGUgc2NyYXRjaCByZWdpc3RlcnMuCiAgICAgICAgIHZvaWQgZW1p
dFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFdyaXRlQmFycmllck1vZGUpOwog
ICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUpOwotICAgICAgICB2b2lkIGVtaXRX
cml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJh
cnJpZXJNb2RlKTsKICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIp
OwogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyKTsKIAotI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2b2lkIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBHUFJSZWcpOwotI2VuZGlmCiAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoY29uc3QgQnl0ZWNvZGUmLCBKU1ZhbHVlUmVncyk7CiAKLSAgICAgICAgLy8gVGhpcyBh
c3N1bWVzIHRoYXQgdGhlIHZhbHVlIHRvIHByb2ZpbGUgaXMgaW4gcmVnVDAgKHJlZ1QxL3JlZ1Qw
IG9uIEpTVkFMVUUzMl82NCkuCi0gICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlm
UHJvZmlsZWRPcGNvZGUoLi4uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAg
ICAgIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6
bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+Ci0gICAgICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKTsKKyAgICAgICAgc3Rh
dGljIGlubGluZSBjb25zdGV4cHIgYm9vbCBpc1Byb2ZpbGVkT3AgPSBzdGQ6OmlzX3NhbWVfdjxk
ZWNsdHlwZShPcDo6TWV0YWRhdGE6Om1fcHJvZmlsZSksIFZhbHVlUHJvZmlsZT47CisgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgorICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PGlzUHJvZmls
ZWRPcDxPcD4sIHZvaWQ+CisgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVk
T3Bjb2RlKE9wIGJ5dGVjb2RlKQorICAgICAgICB7IC8vIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB2
YWx1ZSB0byBwcm9maWxlIGlzIGluIGpzUmVnVDEwLgorICAgICAgICAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwganNSZWdUMTApOworICAgICAgICB9CisgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgorICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PCFpc1Byb2ZpbGVkT3A8
T3A+LCB2b2lkPgorICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29k
ZShPcCkKKyAgICAgICAgeyB9CiAKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2Rl
PgogICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChjb25zdCBCeXRl
Y29kZSYsIFJlZ2lzdGVySUQgY2VsbEdQUiwgUmVnaXN0ZXJJRCBzY3JhdGNoR1BSKTsKQEAgLTM0
Nyw1NyArMzUzLDIzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KICAgICAgICAgRUNNQU1vZGUgZWNtYU1vZGUoT3ApOwogCi0gICAgICAgIC8vIERldGVy
bWluZXMgdGhlIHR5cGUgb2YgcHJpdmF0ZSBmaWVsZCBhY2Nlc3MgZm9yIGEgYnl0ZWNvZGUuCi0g
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBQcml2YXRlRmllbGRQdXRLaW5k
IHByaXZhdGVGaWVsZFB1dEtpbmQoT3ApOwotCiAgICAgICAgIHZvaWQgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBKU1ZhbHVlUmVncyBkc3QpOwogICAgICAgICB2
b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKFZpcnR1YWxSZWdpc3RlciBzcmMsIFJl
Z2lzdGVySUQgZHN0KTsKICAgICAgICAgdm9pZCBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1
YWxSZWdpc3RlciBkc3QsIEpTVmFsdWVSZWdzIHNyYyk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3Jl
KFZpcnR1YWxSZWdpc3RlciwgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVnaXN0ZXJJRCBiYXNl
ID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwotCi0gICAgICAgIGludDMyX3QgZ2V0T3BlcmFuZENvbnN0
YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpOwotICAgICAgICBkb3VibGUgZ2V0T3BlcmFuZENv
bnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpOwogCiAjaWYgVVNFKEpTVkFMVUUzMl82
NCkKLSAgICAgICAgYm9vbCBnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIG9w
MSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgVmlydHVhbFJlZ2lzdGVyJiBvcCwgaW50MzJfdCYgY29u
c3RhbnQpOwotCi0gICAgICAgIHZvaWQgZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyLCBG
UFJlZ2lzdGVySUQgdmFsdWUpOwotCi0gICAgICAgIHZvaWQgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2Fk
KTsKICAgICAgICAgdm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKFZpcnR1YWxSZWdpc3Rl
ciBzcmMsIFJlZ2lzdGVySUQgZHN0KTsKLQotICAgICAgICB2b2lkIGVtaXRTdG9yZShWaXJ0dWFs
UmVnaXN0ZXIsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQg
YmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmVJbnQzMihW
aXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBm
YWxzZSk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lz
dGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQ2VsbCA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCBl
bWl0U3RvcmVCb29sKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGlu
ZGV4SXNCb29sID0gZmFsc2UpOwotCi0gICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKFZpcnR1YWxSZWdpc3Rlcik7Ci0gICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcpOwotICAgICAgICB2b2lk
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEKTsKLQotICAgICAgICAvLyBB
cml0aG1ldGljIG9wY29kZSBoZWxwZXJzCi0gICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4K
LSAgICAgICAgdm9pZCBlbWl0QmluYXJ5RG91YmxlT3AoY29uc3QgSW5zdHJ1Y3Rpb24gKiwgT3Bl
cmFuZFR5cGVzLCBKdW1wTGlzdCYgbm90SW50MzJPcDEsIEp1bXBMaXN0JiBub3RJbnQzMk9wMiwg
Ym9vbCBvcDFJc0luUmVnaXN0ZXJzID0gdHJ1ZSwgYm9vbCBvcDJJc0luUmVnaXN0ZXJzID0gdHJ1
ZSk7Ci0KLSNlbHNlIC8vIFVTRShKU1ZBTFVFMzJfNjQpCisjZWxpZiBVU0UoSlNWQUxVRTY0KQor
ICAgICAgICAvLyBNYWNoaW5lIHJlZ2lzdGVyIHZhcmlhbnRzIHB1cmVseSBmb3IgY29udmVuaWVu
Y2UKICAgICAgICAgdm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBz
cmMsIFJlZ2lzdGVySUQgZHN0KTsKLSAgICAgICAgdm9pZCBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJvbSA9IHJlZ1QwKTsKLSAgICAgICAg
dm9pZCBlbWl0U3RvcmVDZWxsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgcGF5bG9h
ZCwgYm9vbCAvKiBvbmx5IHVzZWQgaW4gSlNWYWx1ZTMyXzY0ICovID0gZmFsc2UpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBwYXlsb2FkKTsKLSAg
ICAgICAgfQorICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lz
dGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tKTsKIAotICAgICAgICBKdW1wIGVtaXRKdW1wSWZCb3Ro
SlNDZWxscyhSZWdpc3RlcklELCBSZWdpc3RlcklELCBSZWdpc3RlcklEKTsKLSAgICAgICAgdm9p
ZCBlbWl0SnVtcFNsb3dDYXNlSWZKU0NlbGwoUmVnaXN0ZXJJRCk7Ci0gICAgICAgIHZvaWQgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQpOwotICAgICAgICB2b2lkIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklELCBWaXJ0dWFsUmVnaXN0ZXIpOwogICAg
ICAgICBKdW1wIGVtaXRKdW1wSWZOb3RJbnQoUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCwgUmVnaXN0
ZXJJRCBzY3JhdGNoKTsKLSAgICAgICAgUGF0Y2hhYmxlSnVtcCBlbWl0UGF0Y2hhYmxlSnVtcElm
Tm90SW50KFJlZ2lzdGVySUQpOwotICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChSZWdpc3RlcklEKTsKLSAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3ROdW1iZXIo
UmVnaXN0ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KFJlZ2lz
dGVySUQsIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQgc2NyYXRjaCk7Ci0jZW5kaWYgLy8gVVNFKEpT
VkFMVUUzMl82NCkKKyAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoUmVnaXN0
ZXJJRCk7CisjZW5kaWYKKworICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChK
U1ZhbHVlUmVncyk7CiAKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
SlNWYWx1ZVJlZ3MpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChK
U1ZhbHVlUmVncywgVmlydHVhbFJlZ2lzdGVyKTsKQEAgLTY0Nyw5ICs2MTksNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogCi0gICAgICAg
IHZvaWQgZW1pdFJpZ2h0U2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBib29sIGlzVW5zaWduZWQp
OwotICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0U2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgYm9vbCBpc1Vuc2lnbmVkKTsKLQog
ICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxS
ZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlPckJyYW5kLCBBY2Nlc3NUeXBl
KTsKICAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0ZVNsb3coVmlydHVhbFJlZ2lzdGVyIGRzdCwg
VmlydHVhbFJlZ2lzdGVyIGJhc2UsIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSwgQWNjZXNzVHlw
ZSk7CiAKQEAgLTY1OSwxNiArNjI4LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJS
ZWcpOwogICAgICAgICB2b2lkIGVtaXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlLCBHUFJS
ZWcgc2NyYXRjaEdQUik7Ci0gICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRT
ZXQqKTsKICAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KEdQUlJlZyBwb2lu
dGVyVG9TZXQpOwogCiAgICAgICAgIHZvaWQgZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0
ZXIpOwogCi0gICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVy
SUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyKTsKLQogICAgICAgICBib29sIGlzS25vd25DZWxsKFZp
cnR1YWxSZWdpc3Rlcik7CisKICAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFudE9wZXJhbmQoVmly
dHVhbFJlZ2lzdGVyKTsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIGJvb2wgaXNPcGVy
YW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAgZG91YmxlIGdldE9w
ZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgc3JjKTsKKyNlbmRpZgogICAgICAg
ICBib29sIGlzT3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgIGlu
dDMyX3QgZ2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpOwogICAgICAg
ICBib29sIGlzT3BlcmFuZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIpOwogCiAgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9m
aWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOb25Qcm9maWxlZEZ1bmN0aW9uPgpAQCAtNzI5LDEyICs3
MDIsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgICAgICBpdGVyLT5mcm9tLmxpbmso
dGhpcyk7CiAgICAgICAgICAgICArK2l0ZXI7CiAgICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5r
RHVtbXlTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoIWl0ZXItPmZyb20uaXNTZXQoKSk7Ci0gICAgICAg
ICAgICArK2l0ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpT
Q2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgVmlydHVhbFJlZ2lzdGVyKTsK
ICAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0b3I8U2xv
d0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywKICAgICAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKaW5kZXggOGY0ZDgwYjk5Y2ZjOWU5
MWZlMjMzZDRiZTkyNmY1NjM3ZjY2ZWM2ZS4uZjg2NzU4MzJhODdjYmVkYWFmMTZiY2E4NzE1Zjhi
MzVjZDVhZjkzMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0
aG1ldGljLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMu
Y3BwCkBAIC0xNDQsMTkgKzE0NCwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qYmVsb3dlcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRfY29tcGFyZVVuc2ln
bmVkQW5kSnVtcDxPcEpiZWxvd2VxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIEJlbG93T3JFcXVhbCk7
CiB9CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotCiB2b2lkIEpJVDo6ZW1pdF9vcF91bnNpZ25lZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVW5zaWduZWQ+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEg
PSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDEsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDMyKExlc3NUaGFuLCByZWdUMCwgVHJ1c3RlZEltbTMyKDApKSk7Ci0g
ICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMSwganNSZWdUMTApOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChqc1JlZ1QxMCk7
CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTGVzc1RoYW4sIGpzUmVnVDEwLnBheWxvYWRHUFIo
KSwgVHJ1c3RlZEltbTMyKDApKSk7CisgICAgYm94SW50MzIoanNSZWdUMTAucGF5bG9hZEdQUigp
LCBqc1JlZ1QxMCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIGpzUmVnVDEw
KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC0xNzgsNDYgKzE3Niw0NyBAQCB2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVh
bFJlZ2lzdGVyIG9wMiwgdW5zaQogCiAgICAgYm9vbCBkaXNhbGxvd0FsbG9jYXRpb24gPSBmYWxz
ZTsKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsKLSAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QwKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBq
c1JlZ1QxMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChqc1JlZ1QxMCkp
OwogICAgICAgICBKdW1wTGlzdCBmYWlsdXJlczsKLSAgICAgICAgZW1pdExvYWRDaGFyYWN0ZXJT
dHJpbmcocmVnVDAsIHJlZ1QwLCBmYWlsdXJlcyk7CisgICAgICAgIGVtaXRMb2FkQ2hhcmFjdGVy
U3RyaW5nKGpzUmVnVDEwLnBheWxvYWRHUFIoKSwgcmVnVDAsIGZhaWx1cmVzKTsKICAgICAgICAg
YWRkU2xvd0Nhc2UoZmFpbHVyZXMpOwogICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbW11dGUo
Y29uZGl0aW9uKSwgcmVnVDAsIEltbTMyKGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChvcDEp
KS0+dHJ5R2V0VmFsdWUoZGlzYWxsb3dBbGxvY2F0aW9uKVswXSkpLCB0YXJnZXQpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AyKSkgewot
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOwotICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDEsIGpzUmVnVDEwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RD
ZWxsKGpzUmVnVDEwKSk7CiAgICAgICAgIEp1bXBMaXN0IGZhaWx1cmVzOwotICAgICAgICBlbWl0
TG9hZENoYXJhY3RlclN0cmluZyhyZWdUMCwgcmVnVDAsIGZhaWx1cmVzKTsKKyAgICAgICAgZW1p
dExvYWRDaGFyYWN0ZXJTdHJpbmcoanNSZWdUMTAucGF5bG9hZEdQUigpLCByZWdUMCwgZmFpbHVy
ZXMpOwogICAgICAgICBhZGRTbG93Q2FzZShmYWlsdXJlcyk7CiAgICAgICAgIGFkZEp1bXAoYnJh
bmNoMzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIoYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5k
KG9wMikpLT50cnlHZXRWYWx1ZShkaXNhbGxvd0FsbG9jYXRpb24pWzBdKSksIHRhcmdldCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikp
IHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKLSAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDEsIGpzUmVnVDEwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50
KGpzUmVnVDEwKTsKICAgICAgICAgaW50MzJfdCBvcDJpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJ
bnQob3AyKTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIHJlZ1QwLCBJbW0z
MihvcDJpbW0pKSwgdGFyZ2V0KTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24s
IGpzUmVnVDEwLnBheWxvYWRHUFIoKSwgSW1tMzIob3AyaW1tKSksIHRhcmdldCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKLSAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QxKTsKLSAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDIsIGpzUmVnVDMyKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGpzUmVn
VDMyKTsKICAgICAgICAgaW50MzJfdCBvcDFpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3Ax
KTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1QxLCBJ
bW0zMihvcDFpbW0pKSwgdGFyZ2V0KTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb21tdXRl
KGNvbmRpdGlvbiksIGpzUmVnVDMyLnBheWxvYWRHUFIoKSwgSW1tMzIob3AxaW1tKSksIHRhcmdl
dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7Ci0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbnQocmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBqc1JlZ1Qx
MCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGpzUmVnVDMyKTsKKyAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQoanNSZWdUMTApOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEludChqc1JlZ1QzMik7CiAKLSAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgcmVnVDAs
IHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwganNSZWdU
MTAucGF5bG9hZEdQUigpLCBqc1JlZ1QzMi5wYXlsb2FkR1BSKCkpLCB0YXJnZXQpOwogfQogCisK
IHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5k
SnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24g
Y29uZGl0aW9uKQogewpAQCAtMjMxLDE2ICsyMzAsMTYgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZVVuc2lnbmVkQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9u
YWwKIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdp
c3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25h
bENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9w
MikpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQob3AxLCByZWdUMCk7CiAgICAgICAgIGlu
dDMyX3Qgb3AyaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMik7CiAgICAgICAgIGFkZEp1
bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIob3AyaW1tKSksIHRhcmdldCk7CiAg
ICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0gICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJQYXlsb2FkKG9wMiwgcmVnVDEpOwogICAgICAgICBpbnQzMl90IG9wMWltbSA9IGdldE9w
ZXJhbmRDb25zdGFudEludChvcDEpOwogICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbW11dGUo
Y29uZGl0aW9uKSwgcmVnVDEsIEltbTMyKG9wMWltbSkpLCB0YXJnZXQpOwogICAgIH0gZWxzZSB7
Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7Ci0gICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJQYXlsb2FkKG9wMSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyUGF5bG9hZChvcDIsIHJlZ1QxKTsKICAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRp
b24sIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CiAgICAgfQogfQpAQCAtMjU4LDIwICsyNTcsMjAg
QEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGkKIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25l
ZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJl
Z2lzdGVyIG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgaWYgKGlz
T3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDEsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQob3Ax
LCByZWdUMCk7CiAgICAgICAgIGludDMyX3Qgb3AyaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50
KG9wMik7CiAgICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIHJlZ1QwLCBJbW0zMihvcDJpbW0p
LCByZWdUMCk7CiAgICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0g
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKG9wMiwgcmVnVDApOwogICAgICAgICBpbnQzMl90IG9w
MWltbSA9IGdldE9wZXJhbmRDb25zdGFudEludChvcDEpOwogICAgICAgICBjb21wYXJlMzIoY29t
bXV0ZShjb25kaXRpb24pLCByZWdUMCwgSW1tMzIob3AxaW1tKSwgcmVnVDApOwogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7Ci0gICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJQYXlsb2FkKG9wMSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyUGF5bG9hZChvcDIsIHJlZ1QxKTsKICAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwg
cmVnVDAsIHJlZ1QxLCByZWdUMCk7CiAgICAgfQotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFs
dWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
IGJveEJvb2xlYW4ocmVnVDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwganNSZWdUMTApOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgU2xv
d09wZXJhdGlvbj4KQEAgLTI5NSwyNiArMjk0LDM3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwK
ICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVyYW5kQ29uc3RhbnRD
aGFyKG9wMikpIHsKICAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIxKTsKLSAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMik7Ci0gICAgICAgIGxvYWRHbG9iYWxP
YmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIGFy
Z3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOworICAgICAgICBjb25zdGV4
cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVy
YXRpb24sIDA+KCk7CisgICAgICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBhcmcxSlNSID0gcHJl
ZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMT4oKTsKKyAgICAgICAgY29uc3RleHBy
IEpTVmFsdWVSZWdzIGFyZzJKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxTbG93T3BlcmF0aW9u
LCAyPigpOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBhcmcxSlNSKTsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZzJKU1IpOworICAgICAgICBs
b2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uLCBnbG9iYWxPYmplY3RHUFIsIGFyZzFKU1IsIGFyZzJKU1IpOwogICAgICAgICBl
bWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJl
dHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGF1
dG8gdW5ib3hEb3VibGUgPSBbdGhpc10oSlNWYWx1ZVJlZ3Mgc3JjLCBGUFJSZWcgZHN0KSB7Cisj
aWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgdGhpcy0+dW5ib3hEb3VibGVXaXRob3V0QXNzZXJ0
aW9ucyhzcmMucGF5bG9hZEdQUigpLCBzcmMucGF5bG9hZEdQUigpLCBkc3QpOworI2VsaWYgVVNF
KEpTVkFMVUUzMl82NCkKKyAgICAgICAgdGhpcy0+dW5ib3hEb3VibGUoc3JjLCBkc3QpOworI2Vu
ZGlmCisgICAgfTsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7CiAgICAg
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXRp
bmdQb2ludCgpKSB7Ci0gICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIo
cmVnVDApOwotICAgICAgICAgICAgYWRkNjQobnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKLSAg
ICAgICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKKyAgICAgICAgICAgIEp1
bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihqc1JlZ1QxMCwgcmVnVDQpOworICAgICAgICAg
ICAgdW5ib3hEb3VibGUoanNSZWdUMTAsIGZwUmVnVDApOwogCiAgICAgICAgICAgICBpbnQzMl90
IG9wMmltbSA9IGdldENvbnN0YW50T3BlcmFuZChvcDIpLmFzSW50MzIoKTsKIAotICAgICAgICAg
ICAgbW92ZShJbW0zMihvcDJpbW0pLCByZWdUMSk7Ci0gICAgICAgICAgICBjb252ZXJ0SW50MzJU
b0RvdWJsZShyZWdUMSwgZnBSZWdUMSk7CisgICAgICAgICAgICBtb3ZlKEltbTMyKG9wMmltbSks
IHJlZ1QyKTsKKyAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJlZ1QyLCBmcFJlZ1Qx
KTsKIAogICAgICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoRG91YmxlKGNvbmRpdGlv
biwgZnBSZWdUMCwgZnBSZWdUMSksIHRhcmdldCk7CiAKQEAgLTMyMyw5ICszMzMsOSBAQCB2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZp
cnR1YWxSZWdpc3RlciBvcDIsCiAgICAgICAgICAgICBmYWlsMS5saW5rKHRoaXMpOwogICAgICAg
ICB9CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QxKTsKLSAgICAg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uLCByZWdUMiwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDIsIGpzUmVnVDMyKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUNCwganNSZWdUMTAsIGpzUmVnVDMyKTsK
ICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBO
b25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CkBAIC0zMzQsOSArMzQ0LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93SW1w
bChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLAogICAgICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQo
KSkgewotICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QxKTsK
LSAgICAgICAgICAgIGFkZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMSk7Ci0gICAgICAgICAg
ICBtb3ZlNjRUb0RvdWJsZShyZWdUMSwgZnBSZWdUMSk7CisgICAgICAgICAgICBKdW1wIGZhaWwx
ID0gYnJhbmNoSWZOb3ROdW1iZXIoanNSZWdUMzIsIHJlZ1Q0KTsKKyAgICAgICAgICAgIHVuYm94
RG91YmxlKGpzUmVnVDMyLCBmcFJlZ1QxKTsKIAogICAgICAgICAgICAgaW50MzJfdCBvcDFpbW0g
PSBnZXRDb25zdGFudE9wZXJhbmQob3AxKS5hc0ludDMyKCk7CiAKQEAgLTM1MCw5ICszNTksOSBA
QCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBv
cDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsCiAgICAgICAgICAgICBmYWlsMS5saW5rKHRoaXMpOwog
ICAgICAgICB9CiAKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QyKTsK
LSAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uLCByZWdUMywgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDEsIGpzUmVnVDEwKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUNCwganNSZWdUMTAsIGpzUmVn
VDMyKTsKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFpl
cm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC0zNjAsMTMgKzM2OSwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsCiAgICAg
bGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBMSFMgaXMgbm90IEludC4KIAogICAgIGlmIChzdXBwb3J0
c0Zsb2F0aW5nUG9pbnQoKSkgewotICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1i
ZXIocmVnVDApOwotICAgICAgICBKdW1wIGZhaWwyID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDEp
OwotICAgICAgICBKdW1wIGZhaWwzID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgICAgIGFk
ZDY0KG51bWJlclRhZ1JlZ2lzdGVyLCByZWdUMCk7Ci0gICAgICAgIGFkZDY0KG51bWJlclRhZ1Jl
Z2lzdGVyLCByZWdUMSk7Ci0gICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsK
LSAgICAgICAgbW92ZTY0VG9Eb3VibGUocmVnVDEsIGZwUmVnVDEpOworICAgICAgICBKdW1wIGZh
aWwxID0gYnJhbmNoSWZOb3ROdW1iZXIoanNSZWdUMTAsIHJlZ1Q0KTsKKyAgICAgICAgSnVtcCBm
YWlsMiA9IGJyYW5jaElmTm90TnVtYmVyKGpzUmVnVDMyLCByZWdUNCk7CisgICAgICAgIEp1bXAg
ZmFpbDMgPSBicmFuY2hJZkludDMyKGpzUmVnVDMyKTsKKyAgICAgICAgdW5ib3hEb3VibGUoanNS
ZWdUMTAsIGZwUmVnVDApOworICAgICAgICB1bmJveERvdWJsZShqc1JlZ1QzMiwgZnBSZWdUMSk7
CiAKICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoRG91YmxlKGNvbmRpdGlvbiwgZnBS
ZWdUMCwgZnBSZWdUMSksIHRhcmdldCk7CiAKQEAgLTM3OCw4ICszODUsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxS
ZWdpc3RlciBvcDIsCiAgICAgfQogCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBSSFMgaXMg
bm90IEludC4KLSAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbiwgcmVnVDIsIHJlZ1QwLCByZWdUMSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUNCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1Q0LCBqc1JlZ1QxMCwganNS
ZWdUMzIpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJv
IDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC0zODgsMTEgKzM5
NSwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbmMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEluYz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOwotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIo
T3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsKLSAgICBib3hJbnQzMihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0Rz
dCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIGpzUmVnVDEwKTsKKyAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoanNSZWdUMTApOworICAgIGFkZFNsb3dDYXNlKGJyYW5j
aEFkZDMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIGpzUmVnVDEwLnBheWxvYWRHUFIoKSkp
OworICAgIGJveEludDMyKGpzUmVnVDEwLnBheWxvYWRHUFIoKSwganNSZWdUMTApOworICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCBqc1JlZ1QxMCk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNDAw
LDExICs0MDcsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BEZWM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1f
c3JjRHN0OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aFN1YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7Ci0gICAgYm94SW50MzIo
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihzcmNEc3QpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCBqc1JlZ1QxMCk7
CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGpzUmVnVDEwKTsKKyAgICBhZGRTbG93Q2Fz
ZShicmFuY2hTdWIzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCBqc1JlZ1QxMC5wYXlsb2Fk
R1BSKCkpKTsKKyAgICBib3hJbnQzMihqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIGpzUmVnVDEwKTsK
KyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwganNSZWdUMTApOwogfQogCiAvKiAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQkVHSU46IE9QX01PRCAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTQ0MCw4ICs0NDcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBKdW1wIG51
bWVyYXRvclBvc2l0aXZlID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCByZWdUNCwgVHJ1
c3RlZEltbTMyKDApKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywgZWR4KSk7
CiAgICAgbnVtZXJhdG9yUG9zaXRpdmUubGluayh0aGlzKTsKLSAgICBib3hJbnQzMihlZHgsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQp
OworICAgIGJveEludDMyKGVkeCwganNSZWdUMTApOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0LCBqc1JlZ1QxMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKQEAgLTQ2OSwyNjQgKzQ3Niw2IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJikKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVORDogT1BfTU9EIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0jZWxzZSAvLyBVU0UoSlNWQUxVRTY0
KQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVt
cChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZGl0aW9uKQotewotICAgIEp1bXBMaXN0IG5vdEludDMyT3AxOwotICAgIEp1bXBMaXN0IG5vdElu
dDMyT3AyOwotCi0gICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotCi0gICAgLy8gQ2hhcmFj
dGVyIGxlc3MuCi0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7Ci0gICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSwgcmVnVDApOwotICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDEpKTsKLSAgICAgICAgSnVtcExpc3QgZmFpbHVy
ZXM7Ci0gICAgICAgIGVtaXRMb2FkQ2hhcmFjdGVyU3RyaW5nKHJlZ1QwLCByZWdUMCwgZmFpbHVy
ZXMpOwotICAgICAgICBhZGRTbG93Q2FzZShmYWlsdXJlcyk7Ci0gICAgICAgIGFkZEp1bXAoYnJh
bmNoMzIoY29tbXV0ZShjb25kaXRpb24pLCByZWdUMCwgSW1tMzIoYXNTdHJpbmcoZ2V0Q29uc3Rh
bnRPcGVyYW5kKG9wMSkpLT50cnlHZXRWYWx1ZSgpWzBdKSksIHRhcmdldCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7Ci0gICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMSwgcmVnVDApOwotICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDEpKTsKLSAgICAgICAgSnVtcExpc3QgZmFp
bHVyZXM7Ci0gICAgICAgIGVtaXRMb2FkQ2hhcmFjdGVyU3RyaW5nKHJlZ1QwLCByZWdUMCwgZmFp
bHVyZXMpOwotICAgICAgICBhZGRTbG93Q2FzZShmYWlsdXJlcyk7Ci0gICAgICAgIGFkZEp1bXAo
YnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIoYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVy
YW5kKG9wMikpLT50cnlHZXRWYWx1ZSgpWzBdKSksIHRhcmdldCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9IAotICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0gICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMywgcmVnVDIpOwotICAgICAgICBub3RJbnQz
Mk9wMi5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyZWdUMykpOwotICAgICAgICBhZGRKdW1wKGJy
YW5jaDMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmVnVDIsIEltbTMyKGdldENvbnN0YW50T3BlcmFu
ZChvcDEpLmFzSW50MzIoKSkpLCB0YXJnZXQpOwotICAgIH0gZWxzZSBpZiAoaXNPcGVyYW5kQ29u
c3RhbnRJbnQob3AyKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVn
VDEsIHJlZ1QwKTsKLSAgICAgICAgbm90SW50MzJPcDEuYXBwZW5kKGJyYW5jaElmTm90SW50MzIo
cmVnVDEpKTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIHJlZ1QwLCBJbW0z
MihnZXRDb25zdGFudE9wZXJhbmQob3AyKS5hc0ludDMyKCkpKSwgdGFyZ2V0KTsKLSAgICB9IGVs
c2UgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDEsIHJlZ1QwKTsK
LSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QzLCByZWdUMik7Ci0gICAg
ICAgIG5vdEludDMyT3AxLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJlZ1QxKSk7Ci0gICAgICAg
IG5vdEludDMyT3AyLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJlZ1QzKSk7Ci0gICAgICAgIGFk
ZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgcmVnVDIpLCB0YXJnZXQpOwotICAgIH0K
LQotICAgIGlmICghc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKLSAgICAgICAgYWRkU2xvd0Nh
c2Uobm90SW50MzJPcDEpOwotICAgICAgICBhZGRTbG93Q2FzZShub3RJbnQzMk9wMik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgSnVtcCBlbmQgPSBqdW1wKCk7Ci0KLSAgICAvLyBEb3Vi
bGUgbGVzcy4KLSAgICBlbWl0QmluYXJ5RG91YmxlT3A8T3A+KGluc3RydWN0aW9uLCBPcGVyYW5k
VHlwZXMoKSwgbm90SW50MzJPcDEsIG5vdEludDMyT3AyLCAhaXNPcGVyYW5kQ29uc3RhbnRJbnQo
b3AxKSwgaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSB8fCAhaXNPcGVyYW5kQ29uc3RhbnRJbnQo
b3AyKSk7Ci0gICAgZW5kLmxpbmsodGhpcyk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBPcD4K
LXZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKLXsKLSAgICBhdXRv
IGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBv
cDEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUu
bV9yaHM7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0KLSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3Ax
KSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDMsIHJlZ1QyKTsK
LSAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1QyLCBJbW0z
MihnZXRDb25zdGFudE9wZXJhbmQob3AxKS5hc0ludDMyKCkpKSwgdGFyZ2V0KTsKLSAgICB9IGVs
c2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDEsIHJlZ1QxLCByZWdUMCk7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIo
Y29uZGl0aW9uLCByZWdUMCwgSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMikuYXNJbnQzMigp
KSksIHRhcmdldCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDEsIHJlZ1QxLCByZWdUMCk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ay
LCByZWdUMywgcmVnVDIpOwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgcmVn
VDAsIHJlZ1QyKSwgdGFyZ2V0KTsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBPcD4K
LXZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQotewotICAgIGF1dG8gYnl0ZWNv
ZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7Ci0KLSAgICBpZiAoaXNP
cGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMiwgcmVnVDMsIHJlZ1QyKTsKLSAgICAgICAgY29tcGFyZTMyKGNvbW11dGUoY29uZGl0aW9u
KSwgcmVnVDIsIEltbTMyKGdldENvbnN0YW50T3BlcmFuZChvcDEpLmFzSW50MzIoKSksIHJlZ1Qw
KTsKLSAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QxLCByZWdUMCk7Ci0gICAgICAgIGNvbXBh
cmUzMihjb25kaXRpb24sIHJlZ1QwLCBJbW0zMihnZXRDb25zdGFudE9wZXJhbmQob3AyKS5hc0lu
dDMyKCkpLCByZWdUMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDEsIHJlZ1QxLCByZWdUMCk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AyLCByZWdUMywgcmVnVDIpOwotICAgICAgICBjb21wYXJlMzIoY29uZGl0aW9uLCByZWdUMCwg
cmVnVDIsIHJlZ1QwKTsKLSAgICB9Ci0gICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKLX0K
LQotdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBTbG93T3BlcmF0aW9uPgotdm9pZCBK
SVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlv
biwgRG91YmxlQ29uZGl0aW9uLCBTbG93T3BlcmF0aW9uIG9wZXJhdGlvbiwgYm9vbCBpbnZlcnQs
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0g
Ynl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhz
OwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOwotCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AyLCByZWdUMywgcmVnVDIpOwotICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDQpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUNCwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7Ci0gICAgZW1pdEp1bXBTbG93
VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQ
UiksIHRhcmdldCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KLXZvaWQgSklUOjplbWl0
QmluYXJ5RG91YmxlT3AoY29uc3QgSW5zdHJ1Y3Rpb24gKmluc3RydWN0aW9uLCBPcGVyYW5kVHlw
ZXMgdHlwZXMsIEp1bXBMaXN0JiBub3RJbnQzMk9wMSwgSnVtcExpc3QmIG5vdEludDMyT3AyLCBi
b29sIG9wMUlzSW5SZWdpc3RlcnMsIGJvb2wgb3AySXNJblJlZ2lzdGVycykKLXsKLSAgICBKdW1w
TGlzdCBlbmQ7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwot
ICAgIGludCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKLSAgICBpbnQgdGFyZ2V0ID0ganVtcFRh
cmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBi
eXRlY29kZS5tX3JoczsKLQotICAgIGlmICghbm90SW50MzJPcDEuZW1wdHkoKSkgewotICAgICAg
ICAvLyBEb3VibGUgY2FzZSAxOiBPcDEgaXMgbm90IGludDMyOyBPcDIgaXMgdW5rbm93bi4KLSAg
ICAgICAgbm90SW50MzJPcDEubGluayh0aGlzKTsKLQotICAgICAgICBBU1NFUlQob3AxSXNJblJl
Z2lzdGVycyk7Ci0KLSAgICAgICAgLy8gVmVyaWZ5IE9wMSBpcyBkb3VibGUuCi0gICAgICAgIGlm
ICghdHlwZXMuZmlyc3QoKS5kZWZpbml0ZWx5SXNOdW1iZXIoKSkKLSAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKEFib3ZlLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2Vz
dFRhZykpKTsKLQotICAgICAgICBpZiAoIW9wMklzSW5SZWdpc3RlcnMpCi0gICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDMsIHJlZ1QyKTsKLQotICAgICAgICBKdW1w
IGRvdWJsZU9wMiA9IGJyYW5jaDMyKEJlbG93LCByZWdUMywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
Okxvd2VzdFRhZykpOwotCi0gICAgICAgIGlmICghdHlwZXMuc2Vjb25kKCkuZGVmaW5pdGVseUlz
TnVtYmVyKCkpCi0gICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEludDMyKHJlZ1Qz
KSk7Ci0KLSAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmVnVDIsIGZwUmVnVDApOwotICAg
ICAgICBKdW1wIGRvVGhlTWF0aCA9IGp1bXAoKTsKLQotICAgICAgICAvLyBMb2FkIE9wMiBhcyBk
b3VibGUgaW50byBkb3VibGUgcmVnaXN0ZXIuCi0gICAgICAgIGRvdWJsZU9wMi5saW5rKHRoaXMp
OwotICAgICAgICBlbWl0TG9hZERvdWJsZShvcDIsIGZwUmVnVDApOwotCi0gICAgICAgIC8vIERv
IHRoZSBtYXRoLgotICAgICAgICBkb1RoZU1hdGgubGluayh0aGlzKTsKLSAgICAgICAgc3dpdGNo
IChvcGNvZGVJRCkgewotICAgICAgICBjYXNlIG9wX2psZXNzOgotICAgICAgICAgICAgZW1pdExv
YWREb3VibGUob3AxLCBmcFJlZ1QyKTsKLSAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91Ymxl
KERvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCwgZnBSZWdUMiwgZnBSZWdUMCksIHRhcmdldCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBvcF9qbGVzc2VxOgotICAgICAgICAgICAg
ZW1pdExvYWREb3VibGUob3AxLCBmcFJlZ1QyKTsKLSAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNo
RG91YmxlKERvdWJsZUxlc3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIGZwUmVnVDIsIGZwUmVnVDAp
LCB0YXJnZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ugb3BfamdyZWF0ZXI6
Ci0gICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDEsIGZwUmVnVDIpOwotICAgICAgICAgICAg
YWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVkLCBmcFJlZ1Qy
LCBmcFJlZ1QwKSwgdGFyZ2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIG9w
X2pncmVhdGVyZXE6Ci0gICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDEsIGZwUmVnVDIpOwot
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW5PckVxdWFs
QW5kT3JkZXJlZCwgZnBSZWdUMiwgZnBSZWdUMCksIHRhcmdldCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBvcF9qbmxlc3M6Ci0gICAgICAgICAgICBlbWl0TG9hZERvdWJsZShv
cDEsIGZwUmVnVDIpOwotICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlTGVz
c1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIGZwUmVnVDAsIGZwUmVnVDIpLCB0YXJnZXQpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ugb3Bfam5sZXNzZXE6Ci0gICAgICAgICAgICBl
bWl0TG9hZERvdWJsZShvcDEsIGZwUmVnVDIpOwotICAgICAgICAgICAgYWRkSnVtcChicmFuY2hE
b3VibGUoRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCwgZnBSZWdUMCwgZnBSZWdUMiksIHRhcmdl
dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBvcF9qbmdyZWF0ZXI6Ci0gICAg
ICAgICAgICBlbWl0TG9hZERvdWJsZShvcDEsIGZwUmVnVDIpOwotICAgICAgICAgICAgYWRkSnVt
cChicmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIGZwUmVn
VDAsIGZwUmVnVDIpLCB0YXJnZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
b3Bfam5ncmVhdGVyZXE6Ci0gICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDEsIGZwUmVnVDIp
OwotICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW5PclVu
b3JkZXJlZCwgZnBSZWdUMCwgZnBSZWdUMiksIHRhcmdldCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFub3RJbnQzMk9wMi5lbXB0eSgpKQot
ICAgICAgICAgICAgZW5kLmFwcGVuZChqdW1wKCkpOwotICAgIH0KLQotICAgIGlmICghbm90SW50
MzJPcDIuZW1wdHkoKSkgewotICAgICAgICAvLyBEb3VibGUgY2FzZSAyOiBPcDEgaXMgaW50MzI7
IE9wMiBpcyBub3QgaW50MzIuCi0gICAgICAgIG5vdEludDMyT3AyLmxpbmsodGhpcyk7Ci0KLSAg
ICAgICAgQVNTRVJUKG9wMklzSW5SZWdpc3RlcnMpOwotCi0gICAgICAgIGlmICghb3AxSXNJblJl
Z2lzdGVycykKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKG9wMSwg
cmVnVDApOwotCi0gICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsK
LQotICAgICAgICAvLyBWZXJpZnkgb3AyIGlzIGRvdWJsZS4KLSAgICAgICAgaWYgKCF0eXBlcy5z
ZWNvbmQoKS5kZWZpbml0ZWx5SXNOdW1iZXIoKSkKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDMyKEFib3ZlLCByZWdUMywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsK
LQotICAgICAgICAvLyBEbyB0aGUgbWF0aC4KLSAgICAgICAgc3dpdGNoIChvcGNvZGVJRCkgewot
ICAgICAgICBjYXNlIG9wX2psZXNzOgotICAgICAgICAgICAgZW1pdExvYWREb3VibGUob3AyLCBm
cFJlZ1QxKTsKLSAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFu
QW5kT3JkZXJlZCwgZnBSZWdUMCwgZnBSZWdUMSksIHRhcmdldCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBvcF9qbGVzc2VxOgotICAgICAgICAgICAgZW1pdExvYWREb3VibGUo
b3AyLCBmcFJlZ1QxKTsKLSAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUxl
c3NUaGFuT3JFcXVhbEFuZE9yZGVyZWQsIGZwUmVnVDAsIGZwUmVnVDEpLCB0YXJnZXQpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ugb3BfamdyZWF0ZXI6Ci0gICAgICAgICAgICBl
bWl0TG9hZERvdWJsZShvcDIsIGZwUmVnVDEpOwotICAgICAgICAgICAgYWRkSnVtcChicmFuY2hE
b3VibGUoRG91YmxlR3JlYXRlclRoYW5BbmRPcmRlcmVkLCBmcFJlZ1QwLCBmcFJlZ1QxKSwgdGFy
Z2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIG9wX2pncmVhdGVyZXE6Ci0g
ICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDIsIGZwUmVnVDEpOwotICAgICAgICAgICAgYWRk
SnVtcChicmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW5PckVxdWFsQW5kT3JkZXJlZCwgZnBS
ZWdUMCwgZnBSZWdUMSksIHRhcmdldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBvcF9qbmxlc3M6Ci0gICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDIsIGZwUmVnVDEpOwot
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlTGVzc1RoYW5PckVxdWFsT3JV
bm9yZGVyZWQsIGZwUmVnVDEsIGZwUmVnVDApLCB0YXJnZXQpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2Ugb3Bfam5sZXNzZXE6Ci0gICAgICAgICAgICBlbWl0TG9hZERvdWJsZShv
cDIsIGZwUmVnVDEpOwotICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlTGVz
c1RoYW5PclVub3JkZXJlZCwgZnBSZWdUMSwgZnBSZWdUMCksIHRhcmdldCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBvcF9qbmdyZWF0ZXI6Ci0gICAgICAgICAgICBlbWl0TG9h
ZERvdWJsZShvcDIsIGZwUmVnVDEpOwotICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUo
RG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIGZwUmVnVDEsIGZwUmVnVDApLCB0
YXJnZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6
Ci0gICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDIsIGZwUmVnVDEpOwotICAgICAgICAgICAg
YWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCwgZnBSZWdU
MSwgZnBSZWdUMCksIHRhcmdldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBlbmQubGluayh0aGlzKTsKLX0KLQotI2VuZGlmIC8vIFVTRShKU1ZBTFVF
NjQpCi0KIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIFVuYXJ5QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAm
bV91bmxpbmtlZENvZGVCbG9jay0+dW5hcnlBcml0aFByb2ZpbGUoY3VycmVudEluc3RydWN0aW9u
LT5hczxPcE5lZ2F0ZT4oKS5tX3Byb2ZpbGVJbmRleCk7CkBAIC03NTMsMTcgKzUwMiwxMCBAQCB2
b2lkIEpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgUHJvZmlsaQogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29k
ZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsK
LSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSByZWdUMjsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdz
OwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7Ci0jZW5kaWYKKyAgICBjb25zdGV4cHIg
SlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBqc1JlZ1QxMDsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJl
Z3MgcmlnaHRSZWdzID0ganNSZWdUMzI7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSBsZWZ0UmVnczsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdU
NDsKIAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kOwogICAgIFNuaXBwZXRPcGVyYW5k
IHJpZ2h0T3BlcmFuZDsKQEAgLTc5OSwyMyArNTQxLDE3IEBAIHZvaWQgSklUOjplbWl0X29wX2Jp
dG5vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Ax
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVl
UmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSNlbHNlCi0gICAgSlNWYWx1ZVJl
Z3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotI2VuZGlmCisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGpzUmVnVDEwKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdElu
dDMyKGxlZnRSZWdzKSk7Ci0gICAgbm90MzIobGVmdFJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdEludDMyKGpzUmVnVDEwKSk7CisgICAgbm90MzIoanNSZWdU
MTAucGF5bG9hZEdQUigpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGJveEludDMyKGxlZnRS
ZWdzLnBheWxvYWRHUFIoKSwgbGVmdFJlZ3MpOworICAgIGJveEludDMyKGpzUmVnVDEwLnBheWxv
YWRHUFIoKSwganNSZWdUMTApOwogI2VuZGlmCiAKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
SWZQcm9maWxlZE9wY29kZShieXRlY29kZSk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdCwgbGVmdFJlZ3MpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCBq
c1JlZ1QxMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2JpdGFuZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtODYxLDE3ICs1OTcsMTAgQEAgdm9pZCBKSVQ6OmVt
aXRSaWdodFNoaWZ0RmFzdFBhdGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgSklUUmlnaHQKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAg
ICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVn
VDI7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywg
cmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OwotI2VuZGlmCisgICAgY29uc3RleHByIEpTVmFsdWVSZWdz
IGxlZnRSZWdzID0ganNSZWdUMTA7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHJpZ2h0UmVn
cyA9IGpzUmVnVDMyOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVm
dFJlZ3M7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CiAKICAgICBT
bmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZDsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJh
bmQ7CkBAIC05MzIsMTcgKzY2MSwxMiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5h
cnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiogYwogICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCisg
ICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQ
UjxQcm9maWxlZEZ1bmN0aW9uLCAwPigpOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBzcmNS
ZWdzID0gcHJlZmVycmVkQXJndW1lbnRKU1I8UHJvZmlsZWRGdW5jdGlvbiwgMT4oKTsKICAgICAv
LyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHNy
YyBhbmQgZHN0LgotICAgIC8vIFNpbmNlIHJlZ1QxPT1hcmd1bWVudEdQUjEsIHVzaW5nIHJlZ1Qx
IGF2b2lkIHNodWZmbGluZyByZWdpc3RlciB0byBjYWxsIHRoZSBzbG93IHBhdGguCi0gICAgSlNW
YWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0g
cmVnVDI7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MywgcmVnVDIpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7Ci0jZW5kaWYKKyAgICBj
b25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHNyY1JlZ3M7CisgICAgY29uc3RleHBy
IEdQUlJlZyBzY3JhdGNoR1BSID0gZ2xvYmFsT2JqZWN0R1BSOworICAgIHN0YXRpY19hc3NlcnQo
bm9PdmVybGFwKHNyY1JlZ3MsIHNjcmF0Y2hHUFIpKTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NU
QVRTKQogICAgIGF1dG8gaW5saW5lU3RhcnQgPSBsYWJlbCgpOwpAQCAtOTU3LDExICs2ODEsMTEg
QEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1h
dGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGMKICAgICBib29sIGdlbmVyYXRlZElubGluZUNvZGUg
PSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUpOwog
ICAgIGlmICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgewogICAgICAgICBVbmFyeUFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKLSAgICAgICAgbG9hZEds
b2JhbE9iamVjdChzY3JhdGNoR1BSKTsKKyAgICAgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxP
YmplY3RHUFIpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxp
bmcoKSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rp
b24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CisgICAg
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRS
ZWdzLCBnbG9iYWxPYmplY3RHUFIsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rp
b24sIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNyY1JlZ3MpOworICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgZ2xvYmFs
T2JqZWN0R1BSLCBzcmNSZWdzKTsKICAgICB9IGVsc2UKICAgICAgICAgYWRkU2xvd0Nhc2UobWF0
aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOwogCkBAIC05ODQsMTcgKzcwOCwxMyBA
QCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1h
dGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVj
b2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAot
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDIp
OwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0gICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMzsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7Ci0jZW5kaWYKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BS
PFByb2ZpbGVkRnVuY3Rpb24sIDA+KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGxlZnRS
ZWdzID0gcHJlZmVycmVkQXJndW1lbnRKU1I8UHJvZmlsZWRGdW5jdGlvbiwgMT4oKTsKKyAgICBj
b25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gcHJlZmVycmVkQXJndW1lbnRKU1I8UHJv
ZmlsZWRGdW5jdGlvbiwgMj4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IHJldHVyblZhbHVlSlNSOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IHJl
Z1Q1OworICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKGxlZnRSZWdzLCByaWdodFJlZ3MsIHNj
cmF0Y2hHUFIpKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG5vT3ZlcmxhcChyZXN1bHRSZWdzLCBzY3Jh
dGNoR1BSKSk7CiAKICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChieXRlY29kZS5tX29w
ZXJhbmRUeXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoYnl0
ZWNvZGUubV9vcGVyYW5kVHlwZXMuc2Vjb25kKCkpOwpAQCAtMTAyOCwxMSArNzQ4LDExIEBAIHZv
aWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElD
LCBjb25zdCBJbnN0cnVjdGlvbioKICAgICAgICAgZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29u
c3QoKSkKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3Mp
OwogICAgICAgICBCaW5hcnlBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJp
dGhQcm9maWxlKCk7Ci0gICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUik7CisgICAg
ICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKICAgICAgICAgaWYgKGFyaXRo
UHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0
aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBs
ZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgZ2xvYmFsT2JqZWN0
R1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCBy
ZXN1bHRSZWdzLCBzY3JhdGNoR1BSLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKKyAgICAgICAgICAg
IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3Ms
IGdsb2JhbE9iamVjdEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CiAgICAgfSBlbHNlCiAgICAg
ICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApA
QCAtMTA1NiwyNyArNzc2LDIzIEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1h
dGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBK
U1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdz
IHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotI2VuZGlmCisgICAgY29uc3Rl
eHByIEdQUlJlZyBnbG9iYWxPYmpldEdQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFByb2ZpbGVk
RnVuY3Rpb24sIDA+KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBwcmVm
ZXJyZWRBcmd1bWVudEpTUjxQcm9maWxlZEZ1bmN0aW9uLCAxPigpOworICAgIGNvbnN0ZXhwciBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmV0dXJuVmFsdWVKU1I7CiAKICNpZiBFTkFCTEUoTUFU
SF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogI2VuZGlmCiAK
ICAgICBVbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2Zp
bGUoKTsKLSAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGdsb2JhbE9iamV0R1BSKTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9m
aWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQ
YXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0
aW9uX0dKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBz
cmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0aElDR2VuZXJh
dGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJw
cmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fR0pNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwg
cmVzdWx0UmVncywgZ2xvYmFsT2JqZXRHUFIsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElD
KSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93
UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1
bHRSZWdzLCByZWdUNCwgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIG1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChw
cm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBnbG9iYWxPYmpldEdQUiwgc3JjUmVncywgYXJp
dGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNs
b3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9K
SVRPcGVyYXRpb25fR0pNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBz
cmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNHZW5lcmF0aW9u
U3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRf
Y2FzdDxKX0pJVE9wZXJhdGlvbl9HSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywg
Z2xvYmFsT2JqZXRHUFIsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAKICNpZiBF
TkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKQEAg
LTExMDUsMTYgKzgyMSwxMSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0
aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBi
eXRlY29kZS5tX3JoczsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVm
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMCk7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsK
LSNlbmRpZgotICAgIAorICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZXRHUFIgPSBwcmVm
ZXJyZWRBcmd1bWVudEdQUjxQcm9maWxlZEZ1bmN0aW9uLCAwPigpOworICAgIGNvbnN0ZXhwciBK
U1ZhbHVlUmVncyBsZWZ0UmVncyA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFByb2ZpbGVkRnVuY3Rp
b24sIDE+KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IHByZWZlcnJl
ZEFyZ3VtZW50SlNSPFByb2ZpbGVkRnVuY3Rpb24sIDI+KCk7CisgICAgY29uc3RleHByIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MgPSByZXR1cm5WYWx1ZUpTUjsKKwogICAgIFNuaXBwZXRPcGVyYW5k
IGxlZnRPcGVyYW5kKGJ5dGVjb2RlLm1fb3BlcmFuZFR5cGVzLmZpcnN0KCkpOwogICAgIFNuaXBw
ZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChieXRlY29kZS5tX29wZXJhbmRUeXBlcy5zZWNvbmQoKSk7
CiAKQEAgLTExMzUsMTQgKzg0NiwxNCBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmlu
YXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qCiAjZW5kaWYK
IAogICAgIEJpbmFyeUFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFBy
b2ZpbGUoKTsKLSAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGdsb2JhbE9iamV0R1BSKTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQ
cm9maWxpbmcoKSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNs
b3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0
aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRp
b25fR0pKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBs
ZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAg
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1
bmN0aW9uKSwgcmVzdWx0UmVncywgZ2xvYmFsT2JqZXRHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3Ms
IFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChw
cm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCByZWdUNCwgbGVmdFJlZ3MsIHJpZ2h0UmVncywg
YXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0
aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRS
ZWdzLCBnbG9iYWxPYmpldEdQUiwgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsK
ICAgICB9IGVsc2UKLSAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9HSkpN
aWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHJlZ1Q0LCBsZWZ0UmVncywgcmlnaHRS
ZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3Rh
dGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpf
SklUT3BlcmF0aW9uX0dKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgZ2xvYmFs
T2JqZXRHUFIsIGxlZnRSZWdzLCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAK
ICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwo
KTsKQEAgLTExNjcsMTggKzg3OCwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0g
Ynl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhz
OwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gcmVnVDI7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBs
ZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OwotI2VuZGlmCi0gICAgRlBS
UmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBsZWZ0
UmVncyA9IGpzUmVnVDEwOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBq
c1JlZ1QzMjsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdz
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworICAgIGNvbnN0ZXhw
ciBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CiAKICAgICBCaW5hcnlBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSA9IG51bGxwdHI7CiAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYzMyXzY0
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYzMyXzY0LmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRkYmNiMzA2OGJlZDliNzU4NzQ1ODEzZGM1
NTQzZWVlOThkNWEzYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMzMl82NC5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0qIGFyZSBtZXQ6Ci0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0qIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0qIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0qIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShKSVQpCi0jaWYgVVNFKEpTVkFMVUUz
Ml82NCkKLSNpbmNsdWRlICJKSVQuaCIKLQotI2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1
ZGUgIkpJVElubGluZXMuaCIKLSNpbmNsdWRlICJKU0FycmF5LmgiCi0jaW5jbHVkZSAiSlNGdW5j
dGlvbi5oIgotI2luY2x1ZGUgIkludGVycHJldGVyLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgotI2luY2x1ZGUgIlJlc3VsdFR5cGUuaCIKLSNpbmNsdWRlICJTbG93UGF0aENhbGwuaCIKLQot
Ci1uYW1lc3BhY2UgSlNDIHsKLQotdm9pZCBKSVQ6OmVtaXRfb3BfdW5zaWduZWQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBy
ZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNv
ZGUubV9vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdU
MSwgcmVnVDApOwotICAgIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SW50MzIocmVnVDEp
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihMZXNzVGhhbiwgcmVnVDAsIFRydXN0ZWRJbW0z
MigwKSkpOwotICAgIGVtaXRTdG9yZUludDMyKHJlc3VsdCwgcmVnVDAsIHJlc3VsdCA9PSBvcDEp
OwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9pbmMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEluYz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNE
c3Q7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDEsIHJlZ1QwKTsK
LQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SW50MzIocmVnVDEpKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOwotICAg
IGVtaXRTdG9yZUludDMyKHNyY0RzdCwgcmVnVDAsIHRydWUpOwotfQotCi12b2lkIEpJVDo6ZW1p
dF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYz4oKTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7Ci0KLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDEsIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90SW50MzIocmVnVDEpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hTdWIzMihPdmVy
ZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOwotICAgIGVtaXRTdG9yZUludDMyKHNyY0Rz
dCwgcmVnVDAsIHRydWUpOwotfQotCi0vLyBNb2QgKCUpCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBCRUdJTjogT1BfTU9EIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSAqLwotCi12b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKLXsKLSAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX21vZCk7Ci0gICAgc2xvd1BhdGhDYWxsLmNhbGwo
KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKQotewotICAgIC8vIFdlIHdvdWxkIGhhdmUg
cmVhbGx5IHVzZWZ1bCBhc3NlcnRpb25zIGhlcmUgaWYgaXQgd2Fzbid0IGZvciB0aGUgY29tcGls
ZXIncwotICAgIC8vIGluc2lzdGVuY2Ugb24gYXR0cmlidXRlIG5vcmV0dXJuLgotICAgIC8vIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBFTkQ6IE9QX01PRCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8K
LQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQotI2Vu
ZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZUNhY2hlR2VuZXJhdG9yLmgKaW5kZXggZjMyMGNiYmMyOGJiODc0MWM5ZWQ2OWY4Y2Ux
YTFmNTE4YTk5NGM5MS4uM2UyNmRiOTU3ZTNlZDQ2ZGY4NWNlZWI3ZTNkNTJiYWI0ZDRjNTQxMSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVy
YXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lQ2FjaGVHZW5l
cmF0b3IuaApAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKEpJVCkKIAorI2luY2x1ZGUg
IkFzc2VtYmx5SGVscGVycy5oIgogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJK
SVRPcGVyYXRpb25WYWxpZGF0aW9uLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgpAQCAt
MTEzLDI1ICsxMTQsMjUgQEAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDMgPSBHUFJJ
bmZvOjpyZWdUNTsKIAogbmFtZXNwYWNlIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVycyB7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKLWNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0IHsgR1BSSW5mbzo6cmVn
VDAgfTsKLWNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgeyBHUFJJbmZvOjphcmd1bWVudEdQUjIgfTsK
LWNvbnN0ZXhwciBHUFJSZWcgcHJvdG8geyBHUFJJbmZvOjphcmd1bWVudEdQUjMgfTsKLWNvbnN0
ZXhwciBHUFJSZWcgc3R1YkluZm8geyBHUFJJbmZvOjphcmd1bWVudEdQUjEgfTsKLWNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaDEgeyBHUFJJbmZvOjpub25BcmdHUFIwIH07Ci1jb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2gyIHsgR1BSSW5mbzo6bm9uQXJnR1BSMSB9OworY29uc3RleHByIEpTVmFsdWVS
ZWdzIHJlc3VsdEpTUiB7IEdQUkluZm86OnJlZ1QwIH07Citjb25zdGV4cHIgSlNWYWx1ZVJlZ3Mg
dmFsdWVKU1IgeyBHUFJJbmZvOjphcmd1bWVudEdQUjIgfTsKK2NvbnN0ZXhwciBKU1ZhbHVlUmVn
cyBwcm90b0pTUiB7IEdQUkluZm86OmFyZ3VtZW50R1BSMyB9OworY29uc3RleHByIEdQUlJlZyBz
dHViSW5mb0dQUiB7IEdQUkluZm86OmFyZ3VtZW50R1BSMSB9OworY29uc3RleHByIEdQUlJlZyBz
Y3JhdGNoMUdQUiB7IEdQUkluZm86Om5vbkFyZ0dQUjAgfTsKK2NvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaDJHUFIgeyBHUFJJbmZvOjpub25BcmdHUFIxIH07CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0
KQotY29uc3RleHByIEdQUlJlZyByZXN1bHRHUFIgeyBHUFJJbmZvOjpyZWdUMCB9OwotY29uc3Rl
eHByIEpTVmFsdWVSZWdzIHZhbHVlSlNSICB7IEdQUkluZm86OmFyZ3VtZW50R1BSMywgR1BSSW5m
bzo6YXJndW1lbnRHUFIyIH07Ci1jb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcHJvdG9KU1IgIHsgR1BS
SW5mbzo6cmVnVDUsIEdQUkluZm86OnJlZ1Q0IH07Citjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmVz
dWx0SlNSIHsgSlNSSW5mbzo6anNSZWdUMTAgfTsKKyNpZiBDUFUoTUlQUykKK2NvbnN0ZXhwciBK
U1ZhbHVlUmVncyB2YWx1ZUpTUiB7IEdQUkluZm86OmFyZ3VtZW50R1BSMywgR1BSSW5mbzo6YXJn
dW1lbnRHUFIyIH07CisjZWxzZQorY29uc3RleHByIEpTVmFsdWVSZWdzIHZhbHVlSlNSIHsgSlNS
SW5mbzo6anNSZWdUMzIgfTsKKyNlbmRpZgorY29uc3RleHByIEpTVmFsdWVSZWdzIHByb3RvSlNS
IHsgSlNSSW5mbzo6anNSZWdUNTQgfTsKIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIgeyBH
UFJJbmZvOjpyZWdUMSB9OwogY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMUdQUiB7IEdQUkluZm86
OnJlZ1Q2IH07CiBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyR1BSIHsgR1BSSW5mbzo6cmVnVDcg
fTsKLXN0YXRpY19hc3NlcnQoIXZhbHVlSlNSLnVzZXMocmVzdWx0R1BSKSk7Ci1zdGF0aWNfYXNz
ZXJ0KCF2YWx1ZUpTUi5vdmVybGFwcyhwcm90b0pTUikpOwotc3RhdGljX2Fzc2VydCghdmFsdWVK
U1IudXNlcyhzdHViSW5mb0dQUikpOwotc3RhdGljX2Fzc2VydCghdmFsdWVKU1IudXNlcyhzY3Jh
dGNoMUdQUikpOwotc3RhdGljX2Fzc2VydCghdmFsdWVKU1IudXNlcyhzY3JhdGNoMkdQUikpOwog
I2VuZGlmCitzdGF0aWNfYXNzZXJ0KEFzc2VtYmx5SGVscGVyczo6bm9PdmVybGFwKHZhbHVlSlNS
LCBwcm90b0pTUiwgc3R1YkluZm9HUFIsIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUikpOwogfQog
CiBuYW1lc3BhY2UgQmFzZWxpbmVJbkJ5VmFsUmVnaXN0ZXJzIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRJbmxpbmVzLmgKaW5kZXggZGI4MTkwN2Y5YjA0NDBmNjdiZmNkODYyZGM4YTRlMjhj
ZjliODU0YS4uMGU1MmQ4ZjYyZjhkN2E1NzIxNTg0MTVjNjJmOTg2ZjgzZWNkMmQwNCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKQEAgLTMzLDYgKzMzLDcgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQogQUxXQVlTX0lOTElORSBib29sIEpJ
VDo6aXNPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICBp
ZiAoIXNyYy5pc0NvbnN0YW50KCkpCkBAIC00MSw2ICs0Miw3IEBAIEFMV0FZU19JTkxJTkUgYm9v
bCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNE
b3VibGUoKTsKIH0KKyNlbmRpZgogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRD
b25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewpAQCAtNjksMTcgKzcxLDYgQEAgQUxX
QVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3Rl
ciBzcmMpCiAgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7
CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRl
cihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKLXsKLSAgICBBU1NFUlQo
ZW50cnkuaXNIZWFkZXIoKSk7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBzdG9yZTMyKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0ZvcihlbnRyeSkpOwotICAgIHN0b3Jl
MzIoZnJvbSwgcGF5bG9hZEZvcihlbnRyeSkpOwotI2Vsc2UKLSAgICBzdG9yZTY0KGZyb20sIGFk
ZHJlc3NGb3IoZW50cnkpKTsKLSNlbmRpZgotfQotCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpl
bWl0TG9hZENoYXJhY3RlclN0cmluZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QsIEp1
bXBMaXN0JiBmYWlsdXJlcykKIHsKICAgICBmYWlsdXJlcy5hcHBlbmQoYnJhbmNoSWZOb3RTdHJp
bmcoc3JjKSk7CkBAIC0xOTAsMTIgKzE4MSw2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoCiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlSlNSKTsKIH0KIAotQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKLXsKLSAgICBp
ZiAoIWlzS25vd25DZWxsKHJlZykpCi0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLX0KLQog
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlSW5kZXgo
VmVjdG9yPFNsb3dDYXNlRW50cnk+JiBzbG93Q2FzZXMsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCkKIHsKICAgICB3aGls
ZSAoaXRlciAhPSBzbG93Q2FzZXMuZW5kKCkgJiYgaXRlci0+dG8gPT0gYnl0ZWNvZGVJbmRleCkK
QEAgLTMwNywxNCArMjkyLDYgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29u
c3RhbnRDaGFyKFZpcnR1YWxSZWdpc3RlciBzcmMpCiAgICAgcmV0dXJuIGdldENvbnN0YW50T3Bl
cmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYyku
YXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWlu
bGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6
Om1fcHJvZmlsZSksIFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPiBKSVQ6OmVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKQotewotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIGpzUmVnVDEwKTsKLX0KLQotaW5saW5lIHZvaWQgSklU
OjplbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZSguLi4pIHsgfQotCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHZhbHVlKQogewpA
QCAtMzI1LDE0ICszMDIsNiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB2YQogICAgIHN0b3JlVmFs
dWUodmFsdWUsIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgb2Zmc2V0KSk7CiB9CiAKLSNpZiBVU0Uo
SlNWQUxVRTY0KQotdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+Ci1pbmxpbmUgdm9pZCBKSVQ6
OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBHUFJSZWcg
cmVzdWx0UmVnKQotewotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFs
dWVSZWdzKHJlc3VsdFJlZykpOwotfQotI2VuZGlmCi0KIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRl
Y29kZT4KIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKGNv
bnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgcHRyZGlmZl90IG9mZnNldE9mQXJyYXlQcm9maWxlLCBS
ZWdpc3RlcklEIGNlbGxHUFIsIFJlZ2lzdGVySUQgc2NyYXRjaEdQUikKIHsKQEAgLTM1MywxMCAr
MzIyLDEyIEBAIEFMV0FZU19JTkxJTkUgaW50MzJfdCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudElu
dChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogICAgIHJldHVybiBnZXRDb25zdGFudE9wZXJhbmQoc3Jj
KS5hc0ludDMyKCk7CiB9CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQogQUxXQVlTX0lOTElORSBkb3Vi
bGUgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsK
ICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNEb3VibGUoKTsKIH0KKyNlbmRp
ZgogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdp
c3RlciBkc3QpCiB7CkBAIC0zODEsMTQgKzM1MiwxMSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIEpTVmFsdWVSZWdz
CiAgICAgc3RvcmVWYWx1ZShmcm9tLCBhZGRyZXNzRm9yKGRzdCkpOwogfQogCi0jaWYgVVNFKEpT
VkFMVUUzMl82NCkKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9h
ZCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgSlNWYWx1ZVJlZ3MgeyB0YWcs
IHBheWxvYWQgfSk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJQYXlsb2FkKFZpcnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQgZHN0KQogewor
I2lmIFVTRShKU1ZBTFVFNjQpCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIEpTVmFs
dWVSZWdzIHsgZHN0IH0pOworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBBU1NFUlQobV9i
eXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmlu
ZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNl
dC4KICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBpZiAobV9wcm9maWxlZENv
ZGVCbG9jay0+aXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayhzcmMpKQpAQCAtMzk4
LDggKzM2NiwxMCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lz
dGVyUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpcwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIGxvYWQzMihwYXlsb2FkRm9yKHNyYyksIGRzdCk7CisjZW5kaWYKIH0KIAorI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVh
bFJlZ2lzdGVyVGFnKFZpcnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQgZHN0KQogewogICAg
IEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBj
YWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2Rl
SW5kZXggaXMgc2V0LgpAQCAtNDE4LDEyNSArMzg4LDEwIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJ
RCBkCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIEpTVmFsdWVSZWdzIHsgZHN0IH0p
OwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5
bG9hZChWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIGRzdCkKLXsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYywgSlNWYWx1ZVJlZ3MgeyBkc3QgfSk7Ci19Ci0KIEFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRz
dCwgUmVnaXN0ZXJJRCBmcm9tKQogewogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBK
U1ZhbHVlUmVncyB7IGZyb20gfSk7CiB9Ci0jZW5kaWYKLQotCi0jaWYgVVNFKEpTVkFMVUUzMl82
NCkKLQotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVn
LCBGUFJlZ2lzdGVySUQgdmFsdWUpCi17Ci0gICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKLSAg
ICAgICAgQVNTRVJUKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlzQ29uc3RhbnRPd25lZEJ5VW5saW5r
ZWRDb2RlQmxvY2socmVnKSk7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25z
dGFudFBvb2wgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7Ci0g
ICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmaW5Db25zdGFudFBvb2wpLCB2YWx1ZSk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0ZvcihyZWcpLCB2YWx1ZSk7
Ci19Ci0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoVmlydHVhbFJlZ2lzdGVyIHJlZywg
UmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlKQotewot
ICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihyZWcsIGJhc2UpKTsKLSAgICBzdG9yZTMy
KHRhZywgdGFnRm9yKHJlZywgYmFzZSkpOwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9y
ZUludDMyKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRl
eElzSW50MzIpCi17Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHJlZykpOwotICAg
IGlmICghaW5kZXhJc0ludDMyKQotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpJbnQzMlRhZyksIHRhZ0ZvcihyZWcpKTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0U3Rv
cmVDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRl
eElzQ2VsbCkKLXsKLSAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IocmVnKSk7Ci0gICAg
aWYgKCFpbmRleElzQ2VsbCkKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Q2VsbFRhZyksIHRhZ0ZvcihyZWcpKTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVC
b29sKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElz
Qm9vbCkKLXsKLSAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IocmVnKSk7Ci0gICAgaWYg
KCFpbmRleElzQm9vbCkKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9v
bGVhblRhZyksIHRhZ0ZvcihyZWcpKTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUo
VmlydHVhbFJlZ2lzdGVyIHJlZywgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVnaXN0ZXJJRCBi
YXNlKQotewotICAgIHN0b3JlMzIoSW1tMzIoY29uc3RhbnQucGF5bG9hZCgpKSwgcGF5bG9hZEZv
cihyZWcsIGJhc2UpKTsKLSAgICBzdG9yZTMyKEltbTMyKGNvbnN0YW50LnRhZygpKSwgdGFnRm9y
KHJlZywgYmFzZSkpOwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnKQotewotICAgIGlmICghaXNLbm93bkNlbGwocmVn
KSkgewotICAgICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkKLSAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGp1bXAoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGVtaXRK
dW1wSWZOb3RKU0NlbGwocmVnKSk7Ci0gICAgfQotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRh
ZykKLXsKLSAgICBpZiAoIWlzS25vd25DZWxsKHJlZykpIHsKLSAgICAgICAgaWYgKHJlZy5pc0Nv
bnN0YW50KCkpCi0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwodGFnKSk7Ci0gICAgfQot
fQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVh
bFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgVmlydHVhbFJlZ2lzdGVyJiBvcCwg
aW50MzJfdCYgY29uc3RhbnQpCi17Ci0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkp
IHsKLSAgICAgICAgY29uc3RhbnQgPSBnZXRDb25zdGFudE9wZXJhbmQob3AxKS5hc0ludDMyKCk7
Ci0gICAgICAgIG9wID0gb3AyOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewotICAgICAgICBjb25zdGFudCA9IGdldENv
bnN0YW50T3BlcmFuZChvcDIpLmFzSW50MzIoKTsKLSAgICAgICAgb3AgPSBvcDE7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLSNlbHNl
IC8vIFVTRShKU1ZBTFVFMzJfNjQpCi0KLUFMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1p
dEp1bXBJZkJvdGhKU0NlbGxzKFJlZ2lzdGVySUQgcmVnMSwgUmVnaXN0ZXJJRCByZWcyLCBSZWdp
c3RlcklEIHNjcmF0Y2gpCi17Ci0gICAgbW92ZShyZWcxLCBzY3JhdGNoKTsKLSAgICBvcjY0KHJl
ZzIsIHNjcmF0Y2gpOwotICAgIHJldHVybiBicmFuY2hJZkNlbGwoc2NyYXRjaCk7Ci19Ci0KLUFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZkpTQ2VsbChSZWdpc3RlcklE
IHJlZykKLXsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnKSk7Ci19Ci0KLUFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklE
IHJlZywgVmlydHVhbFJlZ2lzdGVyIHZSZWcpCi17Ci0gICAgaWYgKCFpc0tub3duQ2VsbCh2UmVn
KSkKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZyk7Ci19Ci0KLUFMV0FZ
U19JTkxJTkUgSklUOjpQYXRjaGFibGVKdW1wIEpJVDo6ZW1pdFBhdGNoYWJsZUp1bXBJZk5vdElu
dChSZWdpc3RlcklEIHJlZykKLXsKLSAgICByZXR1cm4gcGF0Y2hhYmxlQnJhbmNoNjQoQmVsb3cs
IHJlZywgbnVtYmVyVGFnUmVnaXN0ZXIpOwotfQogCiBBTFdBWVNfSU5MSU5FIEpJVDo6SnVtcCBK
SVQ6OmVtaXRKdW1wSWZOb3RJbnQoUmVnaXN0ZXJJRCByZWcxLCBSZWdpc3RlcklEIHJlZzIsIFJl
Z2lzdGVySUQgc2NyYXRjaCkKIHsKQEAgLTU0NSwyNiArNDAwLDIwIEBAIEFMV0FZU19JTkxJTkUg
SklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZk5vdEludChSZWdpc3RlcklEIHJlZzEsIFJlZ2lzdGVy
SUQgcmVnMiwKICAgICByZXR1cm4gYnJhbmNoSWZOb3RJbnQzMihzY3JhdGNoKTsKIH0KIAotQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KFJlZ2lzdGVySUQg
cmVnKQotewotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SW50MzIocmVnKSk7Ci19Ci0KIEFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChSZWdpc3RlcklE
IHJlZzEsIFJlZ2lzdGVySUQgcmVnMiwgUmVnaXN0ZXJJRCBzY3JhdGNoKQogewogICAgIGFkZFNs
b3dDYXNlKGVtaXRKdW1wSWZOb3RJbnQocmVnMSwgcmVnMiwgc2NyYXRjaCkpOwogfQogCi1BTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3ROdW1iZXIoUmVnaXN0ZXJJ
RCByZWcpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQo
UmVnaXN0ZXJJRCBncHIpCiB7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVn
KSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KEpTVmFsdWVSZWdzIHsgZ3ByIH0pOwog
fQorI2VuZGlmCiAKLSNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQotCi1BTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcpCitB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoSlNWYWx1ZVJl
Z3MganNyKQogewotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWcpKTsKKyAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdEludDMyKGpzcikpOwogfQogCiBBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoSlNWYWx1ZVJlZ3MgcmVnKQpAQCAt
NjYyLDEzICs1MTEsMTkgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZENvZGVCbG9ja0Nv
bnN0YW50KFZpcnR1YWxSZWdpc3RlciBjb25zdGFudCwgSlNWYWx1ZVIKICAgICBsb2FkVmFsdWUo
QWRkcmVzcyhkc3QucGF5bG9hZEdQUigpLCBjb25zdGFudC50b0NvbnN0YW50SW5kZXgoKSAqIHNp
emVvZihSZWdpc3RlcikpLCBkc3QpOwogfQogCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKIEFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudFBheWxvYWQoVmlydHVhbFJl
Z2lzdGVyIGNvbnN0YW50LCBSZWdpc3RlcklEIGRzdCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChj
b25zdGFudC5pc0NvbnN0YW50KCkpOwogICAgIGxvYWRBZGRyT2ZDb2RlQmxvY2tDb25zdGFudEJ1
ZmZlcigqdGhpcywgZHN0KTsKLSAgICBsb2FkMzIoQWRkcmVzcyhkc3QsIGNvbnN0YW50LnRvQ29u
c3RhbnRJbmRleCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBheWxvYWRPZmZzZXQpLCBkc3QpOwor
ICAgIEFkZHJlc3MgYWRkcmVzcyhkc3QsIGNvbnN0YW50LnRvQ29uc3RhbnRJbmRleCgpICogc2l6
ZW9mKFJlZ2lzdGVyKSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBsb2FkNjQoYWRkcmVzcywg
ZHN0KTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgbG9hZDMyKGFkZHJlc3Mud2l0aE9m
ZnNldChQYXlsb2FkT2Zmc2V0KSwgZHN0KTsKKyNlbmRpZgogfQorCisjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudFRhZyhW
aXJ0dWFsUmVnaXN0ZXIgY29uc3RhbnQsIFJlZ2lzdGVySUQgZHN0KQogewogICAgIFJFTEVBU0Vf
QVNTRVJUKGNvbnN0YW50LmlzQ29uc3RhbnQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzLmNwcAppbmRleCA0YzJmMzJkYWRiNWUzYWJkZGFiYjI5Y2NkNmJiNDZmZjA5ZDlk
ZDMyLi40Yzg2MzE0OWFkYjljOTMwMDM0OTg4NzE3MTExYzAyNDk3MzVmM2ZmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKQEAgLTEyMCw3ICsxMjAsNiBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8UwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1
cm5WYWx1ZUpTUik7CiB9CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CkBAIC0xMjksMjYgKzEyOCwyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlk
ZXNfaGFzX2luc3RhbmNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5z
dGFuY2VWYWx1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1
ZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGhhc0luc3RhbmNl
VmFsdWUsIHJlZ1QyKTsKIAogICAgIC8vIFdlIGRvbid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5
bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4KKyAgICBtb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVn
VDApOwogICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOwotICAgIEp1bXAgY3VzdG9taGFzSW5z
dGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIE9C
SkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV9mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VT
eW1ib2xGdW5jdGlvbikpKTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0
b3IsIHJlZ1QwKTsKLQorICAgIEp1bXAgY3VzdG9tSGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0
cihOb3RFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2Jh
bE9iamVjdCwgbV9mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbikpKTsKKyAg
ICAvLyBXZSBrbm93IHRoYXQgY29uc3RydWN0b3IgaXMgYW4gb2JqZWN0IGZyb20gdGhlIHdheSBi
eXRlY29kZSBpcyBlbWl0dGVkIGZvciBpbnN0YW5jZW9mIGV4cHJlc3Npb25zLgorICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGNvbnN0cnVjdG9yLCByZWdUMik7CiAgICAgLy8gQ2hl
Y2sgdGhhdCBjb25zdHJ1Y3RvciAnSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZScgaS5lLiB0
aGUgb2JqZWN0IGlzIG5vdCBhIEMtQVBJIHVzZXIgbm9yIGEgYm91bmQgZnVuY3Rpb24uCi0gICAg
dGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSksIHJlZ1QwKTsKLSAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9u
ZSA9IGp1bXAoKTsKKyAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QyLCBKU0NlbGw6OnR5cGVJ
bmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3Rh
bmNlKSwgcmVnVDApOworICAgIGN1c3RvbUhhc0luc3RhbmNlVmFsdWUubGluayh0aGlzKTsKIAot
ICAgIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZWdUMCk7Ci0KLSAgICBkb25lLmxpbmsodGhpcyk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGJveEJvb2xlYW4ocmVnVDAs
IGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwganNSZWdUMTApOwog
fQogCisKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7CkBAIC0xNTYsMjYgKzE1MiwyOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsKIAotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgdmFsdWVHUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVlOwot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgcHJvdG9HUFIgPSBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3Rl
cnM6OnByb3RvOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0R1BSID0gQmFzZWxpbmVJbnN0
YW5jZW9mUmVnaXN0ZXJzOjpyZXN1bHQ7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c3R1YkluZm87CisgICAgdXNpbmcgQmFz
ZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpyZXN1bHRKU1I7CisgICAgdXNpbmcgQmFzZWxpbmVJ
bnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZUpTUjsKKyAgICB1c2luZyBCYXNlbGluZUluc3RhbmNl
b2ZSZWdpc3RlcnM6OnByb3RvSlNSOworICAgIHVzaW5nIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lz
dGVyczo6c3R1YkluZm9HUFI7CisgICAgdXNpbmcgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJz
OjpzY3JhdGNoMUdQUjsKKyAgICB1c2luZyBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnNj
cmF0Y2gyR1BSOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVHUFIp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHByb3RvR1BSKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUpTUik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm90bywgcHJvdG9KU1IpOwogICAgIAogICAgIC8vIENoZWNrIHRoYXQgcHJvdG8g
YXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRo
ZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwodmFsdWVHUFIsIHZhbHVlKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocHJvdG9HUFIsIHByb3RvKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
dmFsdWVKU1IsIHZhbHVlKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvdG9K
U1IsIHByb3RvKTsKIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAogICAgICAgICBu
dWxscHRyLCBudWxscHRyLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVj
b2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksCiAgICAgICAgIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgcmVzdWx0R1BSLAot
ICAgICAgICB2YWx1ZUdQUiwKLSAgICAgICAgcHJvdG9HUFIsCisgICAgICAgIHJlc3VsdEpTUi5w
YXlsb2FkR1BSKCksCisgICAgICAgIHZhbHVlSlNSLnBheWxvYWRHUFIoKSwKKyAgICAgICAgcHJv
dG9KU1IucGF5bG9hZEdQUigpLAogICAgICAgICBzdHViSW5mb0dQUiwKLSAgICAgICAgQmFzZWxp
bmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMSwgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0
ZXJzOjpzY3JhdGNoMik7CisgICAgICAgIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUik7CiAKICAg
ICBhdXRvIFsgc3R1YkluZm8sIHN0dWJJbmZvSW5kZXggXSA9IGFkZFVubGlua2VkU3RydWN0dXJl
U3R1YkluZm8oKTsKICAgICBzdHViSW5mby0+YWNjZXNzVHlwZSA9IEFjY2Vzc1R5cGU6Okluc3Rh
bmNlT2Y7CkBAIC0xODQsMTAgKzE4MiwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9m
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZ2VuLm1fdW5saW5r
ZWRTdHViSW5mbyA9IHN0dWJJbmZvOwogCiAgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNG
YXN0UGF0aCgqdGhpcywgc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOworI2lmIFVTRShKU1ZB
TFVFMzJfNjQpCisgICAgYm94Qm9vbGVhbihyZXN1bHRKU1IucGF5bG9hZEdQUigpLCByZXN1bHRK
U1IpOworI2VuZGlmCiAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2luc3RhbmNlT2ZzLmFwcGVu
ZChnZW4pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRKU1IpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQpAQCAtMjAxLDEyICsyMDIsMjIgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKIAotICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJz
OjpzdHViSW5mbyA9PSBhcmd1bWVudEdQUjEpOwotICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVJ
bnN0YW5jZW9mUmVnaXN0ZXJzOjp2YWx1ZSA9PSBhcmd1bWVudEdQUjIpOwotICAgIHN0YXRpY19h
c3NlcnQoQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpwcm90byA9PSBhcmd1bWVudEdQUjMp
OwotICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICBsb2FkQ29uc3RhbnQo
Z2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIGFyZ3VtZW50R1BSMSk7Ci0gICAg
Y2FsbE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUpPihBZGRy
ZXNzKGFyZ3VtZW50R1BSMSwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlv
bigpKSwgcmVzdWx0VlJlZywgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BS
MiwgYXJndW1lbnRHUFIzKTsKKyAgICB1c2luZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5cGUob3Bl
cmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9i
amVjdEdQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAg
Y29uc3RleHByIEdQUlJlZyBzdHViSW5mb0dQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dP
cGVyYXRpb24sIDE+KCk7CisgICAgdXNpbmcgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjp2
YWx1ZUpTUjsKKyAgICBzdGF0aWNfYXNzZXJ0KHZhbHVlSlNSID09IHByZWZlcnJlZEFyZ3VtZW50
SlNSPFNsb3dPcGVyYXRpb24sIDI+KCkpOworICAgIHVzaW5nIEJhc2VsaW5lSW5zdGFuY2VvZlJl
Z2lzdGVyczo6cHJvdG9KU1I7CisgICAgLy8gT24gSlNWQUxVRTMyXzY0LCAncHJvdG8nIHdpbGwg
YmUgcGFzc2VkIG9uIHN0YWNrIGFueXdheQorICAgIHN0YXRpY19hc3NlcnQocHJvdG9KU1IgPT0g
cHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMz4oKSB8fCBpczMyQml0KCkpOwor
ICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKGdsb2JhbE9iamVjdEdQUiwgc3R1YkluZm9HUFIs
IHZhbHVlSlNSLCBwcm90b0pTUikpOworCisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmpl
Y3RHUFIpOworICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJ
bmRleCwgc3R1YkluZm9HUFIpOworICAgIGNhbGxPcGVyYXRpb248U2xvd09wZXJhdGlvbj4oCisg
ICAgICAgIEFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNs
b3dPcGVyYXRpb24oKSksCisgICAgICAgIHJlc3VsdFZSZWcsCisgICAgICAgIGdsb2JhbE9iamVj
dEdQUiwgc3R1YkluZm9HUFIsIHZhbHVlSlNSLCBwcm90b0pTUik7CiAgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCkBAIC0yMTYsMTQgKzIyNywx
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKKyNpZiBV
U0UoSlNWQUxVRTY0KQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsK
LSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSkpLCByZWdUMCk7Ci0KLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLX0KLQorI2Vs
aWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKHZhbHVl
LCByZWdUMCk7CiAjZW5kaWYKKyAgICBpc0VtcHR5KHJlZ1QwLCByZWdUMCk7CisKKyAgICBib3hC
b29sZWFuKHJlZ1QwLCBqc1JlZ1QxMCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IGpzUmVnVDEwKTsKK30KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewpAQCAtMjM0LDExICsyNDcs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwganNSZWdUMTApOwogICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKGpzUmVnVDEwKTsK
IAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgY29tcGFyZTY0KEVxdWFsLCBqc1JlZ1QxMC5wYXls
b2FkR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlZ1QwKTsK
LSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgY29tcGFyZTMyKEVxdWFsLCBqc1JlZ1QxMC50
YWdHUFIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSNl
bmRpZgorICAgIGlzVW5kZWZpbmVkKGpzUmVnVDEwLCByZWdUMCk7CiAgICAgSnVtcCBkb25lID0g
anVtcCgpOwogICAgIAogICAgIGlzQ2VsbC5saW5rKHRoaXMpOwpAQCAtMjczLDE5ICsyODIsMjQg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
anNSZWdUMTApOwogfQogCi0jaWYgVVNFKEpTVkFMVUU2NCkKIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
aXNfYm9vbGVhbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCisKKyNpZiBVU0UoSlNWQUxV
RTY0KQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICB4b3I2
NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlZ1QwKTsKICAgICB0ZXN0NjQo
WmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpLCByZWdU
MCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJUYWcodmFsdWUsIHJlZ1QwKTsKKyAgICBjb21wYXJlMzIo
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyksIHJlZ1QwKTsK
KyNlbmRpZgorCisgICAgYm94Qm9vbGVhbihyZWdUMCwganNSZWdUMTApOworICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCBqc1JlZ1QxMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lz
X251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjkzLDEx
ICszMDcsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BJc051bWJlcj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5k
OwotICAgIAorCisjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMCk7CiAgICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCBudW1iZXJUYWdSZWdp
c3RlciwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworI2VsaWYgVVNFKEpTVkFMVUUz
Ml82NCkKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKHZhbHVlLCByZWdUMCk7CisgICAg
YWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CisgICAgY29tcGFyZTMyKEJlbG93LCByZWdU
MCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZyArIDEpLCByZWdUMCk7CisjZW5kaWYK
KworICAgIGJveEJvb2xlYW4ocmVnVDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwganNSZWdUMTApOwogfQogCiAjaWYgVVNFKEJJR0lOVDMyKQpAQCAtMzEzLDE1
ICszMzQsMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYmlnX2ludChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OkJp
Z0ludDMyTWFzayksIHJlZ1QxKTsKICAgICBhbmQ2NChyZWdUMSwgcmVnVDApOwogICAgIGNvbXBh
cmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCaWdJbnQzMlRhZyksIHJl
Z1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAg
IGJveEJvb2xlYW4ocmVnVDAsIGpzUmVnVDEwKTsKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAK
ICAgICBpc0NlbGwubGluayh0aGlzKTsKICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihIZWFwQmlnSW50
VHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOworICAgIGJveEJvb2xlYW4ocmVnVDAsIGpzUmVnVDEwKTsKIAogICAgIGRvbmUubGluayh0
aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIGpzUmVnVDEwKTsKIH0KICNlbHNlIC8vIGlmICFVU0UoQklHSU5UMzIp
CiBOT19SRVRVUk4gdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYmlnX2ludChjb25zdCBJbnN0cnVjdGlv
biopCkBAIC0zMzgsMTggKzM1OSwxNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhf
dHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBpbnQgdHlwZSA9IGJ5dGVj
b2RlLm1fdHlwZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsK
LSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0KLSAgICBjb21w
YXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMih0eXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFs
dWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGpzUmVnVDMyKTsKIAorICAgIG1vdmUoVHJ1c3RlZEltbTMy
KDApLCByZWdUMCk7CisgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoanNSZWdU
MzIpOworICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKGpzUmVnVDMyLnBheWxvYWRHUFIoKSwg
SlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVnVDAp
OwogICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CiAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGJveEJvb2xlYW4ocmVnVDAsIGpzUmVnVDEw
KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwganNSZWdUMTApOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTM1OCwxOCArMzc2LDE1IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7Ci0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotCi0gICAg
Y29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlw
ZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1w
KCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwganNSZWdUMzIpOwogCisgICAg
bW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKKyAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5j
aElmTm90Q2VsbChqc1JlZ1QzMik7CisgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNz
KGpzUmVnVDMyLnBheWxvYWRHUFIoKSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDApOwogICAgIGlzTm90Q2VsbC5saW5rKHRoaXMp
OwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CiAK
LSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIGJveEJvb2xlYW4ocmVnVDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwganNSZWdUMTApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTM3OCwxNCArMzkzLDE0
IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjLCBqc1JlZ1QxMCk7CiAgICAgCi0gICAgSnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2Vs
bChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QocmVnVDApKTsKKyAgICBK
dW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKGpzUmVnVDEwKTsKKyAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk9iamVjdChqc1JlZ1QxMC5wYXlsb2FkR1BSKCkpKTsKICAgICBpc0ltbS5saW5rKHRo
aXMpOwogCiAgICAgaWYgKGRzdCAhPSBzcmMpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGpzUmVnVDEwKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zOTQsMTkgKzQwOSwxNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzcmMsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywganNSZWdU
MTApOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7Ci0gICAgSnVt
cCBkb25lID0gYnJhbmNoSWZTeW1ib2wocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90U3RyaW5nKHJlZ1QwKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGpzUmVn
VDEwKSk7CisgICAgSnVtcCBkb25lID0gYnJhbmNoSWZTeW1ib2woanNSZWdUMTAucGF5bG9hZEdQ
UigpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhqc1JlZ1QxMC5wYXlsb2Fk
R1BSKCkpKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKICAgICBpZiAoc3JjICE9IGRzdCkKLSAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwganNSZWdUMTApOwogfQogCi0jZW5kaWYKLQogdm9pZCBKSVQ6OmVtaXRf
b3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1
bmN0aW9uTmFtZT4oKTsKQEAgLTQyMiwyNSArNDM1LDE3IEBAIHZvaWQgSklUOjplbWl0X29wX3Nl
dF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIGdsb2JhbE9iamVjdEdQ
UiwgZnVuY3Rpb25HUFIsIG5hbWVKU1IpOwogfQogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLQogdm9p
ZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOb3Q+KCk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJhbmQsIHJlZ1QwKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZCwganNSZWdUMTAp
OwogCi0gICAgLy8gSW52ZXJ0IGFnYWluc3QgSlNWYWx1ZShmYWxzZSk7IGlmIHRoZSB2YWx1ZSB3
YXMgdGFnZ2VkIGFzIGEgYm9vbGVhbiwgdGhlbiBhbGwgYml0cyB3aWxsIGJlCi0gICAgLy8gY2xl
YXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZhbHNl
IG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVseSkuCi0gICAgLy8gVGhlbiBpbnZlcnQgYWdhaW5z
dCBKU1ZhbHVlKHRydWUpLCB3aGljaCB3aWxsIGFkZCB0aGUgdGFnIGJhY2sgaW4sIGFuZCBmbGlw
IHRoZSBsb3cgYml0LgotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNl
KSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDAs
IFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7Ci0gICAgeG9yNjQoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlZ1QwKTsKKyAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdEJvb2xlYW4oanNSZWdUMTAsIHJlZ1QyKSk7CisgICAgeG9yUHRyKFRydXN0ZWRJ
bW0zMigxKSwganNSZWdUMTAucGF5bG9hZEdQUigpKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9kc3QsIGpzUmVnVDEwKTsKIH0KIAotI2VuZGlmCi0KIHZvaWQgSklUOjplbWl0X29wX2pm
YWxzZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmZhbHNlPigpOwpAQCAtNTQ3LDE4
ICs1NTIsMjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CiB9
CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29y
X251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEp1bmRlZmluZWRPck51bGw+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBq
c1JlZ1QxMCk7CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJUYWcodmFsdWUsIGpzUmVnVDEwLnRhZ0dQUigpKTsKKyNlbmRpZgogCi0gICAgYW5kNjQo
VHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVt
cChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNO
dWxsKCkpKSksIHRhcmdldCk7CisgICAgZW1pdFR1cm5VbmRlZmluZWRJbnRvTnVsbChqc1JlZ1Qx
MCk7CisgICAgYWRkSnVtcChicmFuY2hJZk51bGwoanNSZWdUMTApLCB0YXJnZXQpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC01NjcsMTAgKzU3NCwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9qbnVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCBqc1JlZ1QxMCk7CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJUYWcodmFsdWUsIGpzUmVnVDEwLnRhZ0dQUigpKTsKKyNlbmRpZgogCi0gICAgYW5k
NjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRk
SnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisgICAgZW1pdFR1cm5VbmRlZmluZWRJbnRvTnVsbChq
c1JlZ1QxMCk7CisgICAgYWRkSnVtcChicmFuY2hJZk5vdE51bGwoanNSZWdUMTApLCB0YXJnZXQp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC01NzksOSArNTkwLDE2IEBAIHZvaWQgSklUOjplbWl0X29wX2pl
cV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIGxvYWRDb2RlQmxv
Y2tDb25zdGFudChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyLCBKU1ZhbHVlUmVncyB7IHJlZ1Qx
IH0pOwotICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBqc1JlZ1QxMCk7CisjaWYgVVNFKEpT
VkFMVUUzMl82NCkKKyAgICAvLyBPTiBKU1ZBTFVFNjQgdGhlIHBvaW50ZXIgY29tcGFyaXNvbiBi
ZWxvdyBjYXRjaGVzIHRoaXMgY2FzZQorICAgIEp1bXAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2Vs
bChqc1JlZ1QxMCk7CisjZW5kaWYKKyAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnRQYXlsb2FkKGJ5
dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIsIHJlZ1QyKTsKKyAgICBhZGRKdW1wKGJyYW5jaFB0cihF
cXVhbCwganNSZWdUMTAucGF5bG9hZEdQUigpLCByZWdUMiksIHRhcmdldCk7CisjaWYgVVNFKEpT
VkFMVUUzMl82NCkKKyAgICBub3RDZWxsLmxpbmsodGhpcyk7CisjZW5kaWYKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTU5MCwxNCArNjA4LDIzIEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgbG9hZENvZGVCbG9ja0NvbnN0
YW50KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIsIEpTVmFsdWVSZWdzIHsgcmVnVDEgfSk7Ci0g
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVn
VDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBqc1JlZ1QxMCk7CisjaWYgVVNF
KEpTVkFMVUUzMl82NCkKKyAgICAvLyBPTiBKU1ZBTFVFNjQgdGhlIHBvaW50ZXIgY29tcGFyaXNv
biBiZWxvdyBjYXRjaGVzIHRoaXMgY2FzZQorICAgIEp1bXAgbm90Q2VsbCA9IGJyYW5jaElmTm90
Q2VsbChqc1JlZ1QxMCk7CisjZW5kaWYKKyAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnRQYXlsb2Fk
KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIsIHJlZ1QyKTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1
bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIGpzUmVnVDEwLnBheWxvYWRHUFIoKSwgcmVnVDIp
OworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgbm90Q2VsbC5saW5rKHRoaXMpOworI2VuZGlm
CiAgICAgc3RvcmU4VG9NZXRhZGF0YShUcnVzdGVkSW1tMzIoMSksIGJ5dGVjb2RlLCBPcEpuZXFQ
dHI6Ok1ldGFkYXRhOjpvZmZzZXRPZkhhc0p1bXBlZCgpKTsKICAgICBhZGRKdW1wKGp1bXAoKSwg
dGFyZ2V0KTsKICAgICBlcXVhbC5saW5rKHRoaXMpOwogfQogCisjaWYgVVNFKEpTVkFMVUU2NCkK
Kwogdm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVx
PigpOwpAQCAtNjA1LDggKzYzMiw4IEBAIHZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3JocywgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdU
MCwgcmVnVDEsIHJlZ1QyKTsKICAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVn
VDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgYm94Qm9vbGVhbihy
ZWdUMCwganNSZWdUMTApOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3QsIGpzUmVnVDEwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC02ODcsOSArNzE0LDkgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3JocywgcmVnVDEpOwogICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKICAgICBjb21wYXJlMzIoTm90
RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFs
dWVSZWdzIHsgcmVnVDAgfSk7CisgICAgYm94Qm9vbGVhbihyZWdUMCwganNSZWdUMTApOwogCi0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwganNSZWdUMTApOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC04
MzEsOSArODU4LDkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDEs
IHJlZ1QwLCByZWdUMCk7CiAgICAgZWxzZQogICAgICAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJl
Z1QxLCByZWdUMCwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsg
cmVnVDAgfSk7CisgICAgYm94Qm9vbGVhbihyZWdUMCwganNSZWdUMTApOwogCi0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBq
c1JlZ1QxMCk7CiAjZW5kaWYKIH0KIApAQCAtOTQ5LDE4ICs5NzYsMjEgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFMKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0
dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCisjZW5kaWYKKwogdm9pZCBKSVQ6OmVtaXRfb3Bf
dG9fbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwotICAgIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90TnVtYmVyKHJlZ1QwKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCBqc1JlZ1QxMCk7
CisgICAgCisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIoanNSZWdUMTAsIHJlZ1Qy
KSk7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBqc1JlZ1QxMCk7CiAg
ICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3RWUmVnKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnLCBqc1Jl
Z1QxMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTk2OCwzMSArOTk4LDM1IEBAIHZvaWQgSklUOjpl
bWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvTnVtZXJpYz4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZp
cnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwogCi0gICAgSnVtcCBpc05vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJp
Z0ludChyZWdUMCkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywganNSZWdU
MTApOworCisgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoanNSZWdUMTApOwor
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChqc1JlZ1QxMC5wYXlsb2FkR1BS
KCkpKTsKICAgICBKdW1wIGlzQmlnSW50ID0ganVtcCgpOwogCiAgICAgaXNOb3RDZWxsLmxpbmso
dGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKKyAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihqc1JlZ1QxMCwgcmVnVDIpKTsKICAgICBpc0Jp
Z0ludC5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
cmVnVDApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIGpzUmVnVDEwKTsK
ICAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdFZSZWcpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcsIGpz
UmVnVDEwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmNWUmVnID0gYnl0ZWNv
ZGUubV9vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDAp
OwogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyY1ZSZWcsIGpzUmVnVDEwKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9kc3QpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChqc1JlZ1QxMCkp
OworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKGpzUmVnVDEwLnBheWxvYWRHUFIo
KSkpOworCisgICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3RWUmVnLCBqc1JlZ1QxMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Rv
X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTAwMCwx
NCArMTAzNCwxNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFRvT2JqZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5t
X29wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CiAK
LSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjVlJlZywganNSZWdUMTApOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgcmVnVDApOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChqc1JlZ1QxMCkpOwor
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KGpzUmVnVDEwLnBheWxvYWRHUFIoKSkp
OworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwganNSZWdUMTApOwogICAg
IGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0VlJlZyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZywganNSZWdU
MTApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMTAxNyw3ICsxMDUyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Y2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICByZXN0b3Jl
Q2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlG
cmFtZSk7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bSksIHJlZ1QzKTsKLSAgICBsb2Fk
NjQoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJh
bWVSZWdpc3Rlcik7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9y
Q2F0Y2hPZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBzdG9yZVB0cihUcnVzdGVk
SW1tUHRyKG51bGxwdHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZz
ZXQoKSkpOwogCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3Io
bV91bmxpbmtlZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0
ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKQEAgLTEwMzgsMTEgKzEwNzMsMTEgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogICAgIGlzQ2F0Y2hhYmxlRXhjZXB0
aW9uLmxpbmsodGhpcyk7CiAKLSAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZWdUMCk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2V4Y2VwdGlvbik7CisgICAgYm94Q2Vs
bChyZXR1cm5WYWx1ZUdQUiwganNSZWdUMTApOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9leGNlcHRpb24sIGpzUmVnVDEwKTsKIAotICAgIGxvYWQ2NChBZGRyZXNzKHJl
Z1QwLCBFeGNlcHRpb246OnZhbHVlT2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3Rocm93blZhbHVlKTsKKyAgICBsb2FkVmFsdWUoQWRkcmVz
cyhqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIEV4Y2VwdGlvbjo6dmFsdWVPZmZzZXQoKSksIGpzUmVn
VDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhyb3duVmFsdWUs
IGpzUmVnVDEwKTsKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8vIEZJWE1FOiBjb25zaWRl
ciBpbmxpbmUgY2FjaGluZyB0aGUgcHJvY2VzcyBvZiBkb2luZyBPU1IgZW50cnksIGluY2x1ZGlu
ZwpAQCAtMTA2NiwxMyArMTEwMSwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgY3VycmVudFNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRTY29wZSwgcmVnVDApOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGN1cnJlbnRTY29wZSwgcmVnVDApOwogICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1p
dFN0b3JlQ2VsbChieXRlY29kZS5tX2RzdCwgcmVnVDApOworICAgIGJveENlbGwocmVnVDAsIGpz
UmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCBqc1Jl
Z1QxMCk7CiB9CiAKLSNlbmRpZgotCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTd2l0Y2hJbW0+KCk7CkBAIC0xMjEyLDggKzEyNDYs
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBqc1JlZ1QxMCk7
CiB9CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25z
dCBJbnN0cnVjdGlvbiopCiB7CiAgICAgLy8gRXZlbiB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRo
ZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50CkBAIC0xMzM3LDE3ICsxMzY5LDE4IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBl
bWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlZ1Qw
KTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVD
aGFpbigpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7CisgICAgYm94
Q2VsbChyZWdUMCwganNSZWdUMTApOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBq
c1JlZ1QxMCk7CiB9CiAKLSNlbmRpZgotCiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdCwganNSZWdUMTApOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdDsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChqc1JlZ1QxMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIGpz
UmVnVDEwKTsKKworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChqc1JlZ1QxMCwgc3Jj
RHN0KTsKIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlwZShqc1JlZ1QxMC5wYXlsb2Fk
R1BSKCksIEZpbmFsT2JqZWN0VHlwZSkpOwogICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29k
ZSwgT3BUb1RoaXM6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhY2hlZFN0cnVjdHVyZUlEKCksIHJlZ1Qy
KTsKQEAgLTEzODksMTUgKzE0MjIsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCBqc1JlZ1QxMCk7CiB9CiAKLSNpZiBVU0UoSlNWQUxV
RTY0KQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190ZHooY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcENoZWNrVGR6PigpOworI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlciwgcmVnVDApOwor
I2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKGJ5
dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyLCByZWdUMCk7CisjZW5kaWYKICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CiB9CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQog
CiAvLyBTbG93IGNhc2VzCiAKQEAgLTE2MjksNyArMTY2NSw4IEBAIHZvaWQgSklUOjplbWl0X29w
X25ld19yZWdleHAoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBH
UFJSZWcgZ2xvYmFsR1BSID0gYXJndW1lbnRHUFIwOwogICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xv
YmFsR1BSKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgZ2xvYmFsR1BS
LCBqc0Nhc3Q8UmVnRXhwKj4obV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQocmVnZXhw
KSkpOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgYm94Q2Vs
bChyZXR1cm5WYWx1ZUdQUiwgcmV0dXJuVmFsdWVKU1IpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUpTUik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpA
QCAtMTg3NiwyOSArMTkxMywxOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIHVuc2lnbmVkIG51bVBhcmFtc1Rv
U2tpcCA9IGJ5dGVjb2RlLm1fbnVtUGFyYW1ldGVyc1RvU2tpcDsKKwogICAgIGxvYWQzMihwYXls
b2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDAp
OwogICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwogICAgIEp1bXAgemVyb0xlbmd0
aCA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG51bVBhcmFtc1RvU2tp
cCkpOwogICAgIHN1YjMyKEltbTMyKG51bVBhcmFtc1RvU2tpcCksIHJlZ1QwKTsKLSNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotI2Vu
ZGlmCisgICAgYm94SW50MzIocmVnVDAsIGpzUmVnVDEwKTsKICAgICBKdW1wIGRvbmUgPSBqdW1w
KCk7CiAKICAgICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpKSwgcmVnVDAp
OwotI2Vsc2UKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwotI2VuZGlmCisgICAg
bW92ZVRydXN0ZWRWYWx1ZShqc051bWJlcigwKSwganNSZWdUMTApOwogCiAgICAgZG9uZS5saW5r
KHRoaXMpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJlZ1QwKTsKLSNlbHNlCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJU
YWcpLCByZWdUMSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCkpOwotI2VuZGlmCisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IGpzUmVnVDEwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xOTI0LDI3ICsxOTUxLDE3IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9wcm90b3R5cGVfb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldFByb3RvdHlwZU9mPigpOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1Zh
bHVlUmVncyB2YWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVn
VDIpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7Ci0jZWxzZQotICAgIEpTVmFsdWVS
ZWdzIHZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mo
cmVnVDMsIHJlZ1QyKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QxOwotICAgIEFTU0VS
VCh2YWx1ZVJlZ3MudGFnR1BSKCkgPT0gc2NyYXRjaEdQUik7Ci0jZW5kaWYKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlUmVncyk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCBqc1JlZ1QxMCk7CiAKICAgICBKdW1w
TGlzdCBzbG93Q2FzZXM7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwodmFs
dWVSZWdzKSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE9iamVjdCh2YWx1ZVJl
Z3MucGF5bG9hZEdQUigpKSk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwo
anNSZWdUMTApKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KGpzUmVn
VDEwLnBheWxvYWRHUFIoKSkpOwogCi0gICAgZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVS
ZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgc2xvd0Nhc2VzKTsKKyAg
ICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCBqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIGpzUmVnVDMy
LCByZWdUNCwgc2xvd0Nhc2VzKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwganNSZWdUMzIpOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIGpzUmVnVDMyKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82
NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKaW5k
ZXggMTIyYzlhYWFmNjE4NjkyNDVkODcyNWRlNjRjZDJlOTc3NWMwMjVkNy4uNDQyOTQ4NTM2ZTcz
MWViZTA2YThhZTcwZjgzNjQzZWIyMzYyZjQwMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcApAQCAtMzMsNTI3ICszMywxMzMgQEAKICNpbmNsdWRl
ICJCYXNpY0Jsb2NrTG9jYXRpb24uaCIKICNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgog
I2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgotI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgot
I2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkludGVycHJldGVySW5saW5lcy5oIgog
I2luY2x1ZGUgIkpJVElubGluZXMuaCIKLSNpbmNsdWRlICJKU0FycmF5LmgiCi0jaW5jbHVkZSAi
SlNDYXN0LmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgotI2luY2x1ZGUgIkpTUHJvcGVydHlO
YW1lRW51bWVyYXRvci5oIgotI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKLSNpbmNsdWRlICJNYXhG
cmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oIgotI2luY2x1ZGUgIk9wY29kZUlubGluZXMuaCIK
ICNpbmNsdWRlICJTbG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIK
ICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQg
SklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjpjb21waWxlT3BFcUNvbW1vbihWaXJ0dWFsUmVn
aXN0ZXIgc3JjMSwgVmlydHVhbFJlZ2lzdGVyIHNyYzIpCiB7Ci0gICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0YW5jZT4oKTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIGpzUmVnVDEwKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyYzIsIGpzUmVnVDMyKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RF
cXVhbCwganNSZWdUMTAudGFnR1BSKCksIGpzUmVnVDMyLnRhZ0dQUigpKSk7CisgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZDZWxsKGpzUmVnVDEwKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
QmVsb3csIGpzUmVnVDEwLnRhZ0dQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFn
KSkpOworfQogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoaGFzSW5zdGFuY2VW
YWx1ZSwgcmVnVDApOwotICAgIC8vIFdlIGRvbid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJv
bC5oYXNJbnN0YW5jZSB3b3VsZCBkby4KLSAgICBKdW1wIGhhc0luc3RhbmNlVmFsdWVOb3RDZWxs
ID0gZW1pdEp1bXBJZk5vdEpTQ2VsbChoYXNJbnN0YW5jZVZhbHVlKTsKLSAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QxKTsKLSAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQ
dHIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9i
YWxPYmplY3QsIG1fZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24pKSk7Cit2
b2lkIEpJVDo6Y29tcGlsZU9wRXFTbG93Q29tbW9uKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit7CisgICAgSnVtcExpc3QgZ2VuZXJpY0Nhc2U7CiAKLSAgICAvLyBXZSBr
bm93IHRoYXQgY29uc3RydWN0b3IgaXMgYW4gb2JqZWN0IGZyb20gdGhlIHdheSBieXRlY29kZSBp
cyBlbWl0dGVkIGZvciBpbnN0YW5jZW9mIGV4cHJlc3Npb25zLgotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJQYXlsb2FkKGNvbnN0cnVjdG9yLCByZWdUMCk7CisgICAgZ2VuZXJpY0Nhc2UuYXBw
ZW5kKGdldFNsb3dDYXNlKGl0ZXIpKTsgLy8gdGFncyBub3QgZXF1YWwKIAotICAgIC8vIENoZWNr
IHRoYXQgY29uc3RydWN0b3IgJ0ltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UnIGkuZS4gdGhl
IG9iamVjdCBpcyBub3QgYSBDLUFQSSB1c2VyIG5vciBhIGJvdW5kIGZ1bmN0aW9uLgotICAgIHRl
c3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpLCByZWdUMCk7CisgICAg
bGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyB0YWdzIGVxdWFsIGFuZCBKU0NlbGwKKyAgICBnZW5lcmlj
Q2FzZS5hcHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcoanNSZWdUMTAucGF5bG9hZEdQUigpKSk7Cisg
ICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElmTm90U3RyaW5nKGpzUmVnVDMyLnBheWxvYWRH
UFIoKSkpOworCisgICAgLy8gU3RyaW5nIGNhc2UuCisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
NCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIHJlZ1Q0LCBq
c1JlZ1QxMC5wYXlsb2FkR1BSKCksIGpzUmVnVDMyLnBheWxvYWRHUFIoKSk7CiAgICAgSnVtcCBk
b25lID0ganVtcCgpOwogCi0gICAgaGFzSW5zdGFuY2VWYWx1ZU5vdENlbGwubGluayh0aGlzKTsK
LSAgICBjdXN0b21oYXNJbnN0YW5jZVZhbHVlLmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVk
SW1tMzIoMSksIHJlZ1QwKTsKKyAgICAvLyBHZW5lcmljIGNhc2UuCisgICAgZ2VuZXJpY0Nhc2Uu
YXBwZW5kKGdldFNsb3dDYXNlKGl0ZXIpKTsgLy8gZG91YmxlcworICAgIGdlbmVyaWNDYXNlLmxp
bmsodGhpcyk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1Q0LCBqc1JlZ1QxMCwganNSZWdUMzIpOwogCiAgICAg
ZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7Ci0KLX0KLQot
dm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSW5zdGFuY2VvZj4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgcHJvdG8gPSBieXRlY29kZS5tX3Byb3RvdHlwZTsKLQotICAgIHVzaW5n
IEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cmVzdWx0R1BSOwotICAgIHVzaW5nIEJhc2Vs
aW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6dmFsdWVKU1I7Ci0gICAgdXNpbmcgQmFzZWxpbmVJbnN0
YW5jZW9mUmVnaXN0ZXJzOjpwcm90b0pTUjsKLSAgICB1c2luZyBCYXNlbGluZUluc3RhbmNlb2ZS
ZWdpc3RlcnM6OnN0dWJJbmZvR1BSOwotICAgIHVzaW5nIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lz
dGVyczo6c2NyYXRjaDFHUFI7Ci0gICAgdXNpbmcgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJz
OjpzY3JhdGNoMkdQUjsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKHZhbHVl
LCB2YWx1ZUpTUi5wYXlsb2FkR1BSKCkpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXls
b2FkKHByb3RvLCBwcm90b0pTUi5wYXlsb2FkR1BSKCkpOwotCi0gICAgLy8gQ2hlY2sgdGhhdCBw
cm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQg
YnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbCh2YWx1ZSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KHByb3RvKTsKLSAgICAKLSAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
bnVsbHB0ciwgbnVsbHB0ciwgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAotICAgICAgICBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIHJlc3VsdEdQUiwK
LSAgICAgICAgdmFsdWVKU1IucGF5bG9hZEdQUigpLAotICAgICAgICBwcm90b0pTUi5wYXlsb2Fk
R1BSKCksCi0gICAgICAgIHN0dWJJbmZvR1BSLAotICAgICAgICBzY3JhdGNoMUdQUiwgc2NyYXRj
aDJHUFIpOwotCi0gICAgYXV0byBbIHN0dWJJbmZvLCBzdHViSW5mb0luZGV4IF0gPSBhZGRVbmxp
bmtlZFN0cnVjdHVyZVN0dWJJbmZvKCk7Ci0gICAgc3R1YkluZm8tPmFjY2Vzc1R5cGUgPSBBY2Nl
c3NUeXBlOjpJbnN0YW5jZU9mOwotICAgIHN0dWJJbmZvLT5ieXRlY29kZUluZGV4ID0gbV9ieXRl
Y29kZUluZGV4OwotICAgIGdlbi5tX3VubGlua2VkU3R1YkluZm9Db25zdGFudEluZGV4ID0gc3R1
YkluZm9JbmRleDsKLSAgICBnZW4ubV91bmxpbmtlZFN0dWJJbmZvID0gc3R1YkluZm87Ci0KLSAg
ICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzLCBzdHViSW5mb0luZGV4
LCBzdHViSW5mb0dQUik7Ci0gICAgYWRkU2xvd0Nhc2UoKTsKLSAgICBtX2luc3RhbmNlT2ZzLmFw
cGVuZChnZW4pOwotICAgIAotICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZXN1bHRHUFIpOwotfQot
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQot
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgCi0gICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwotICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlOwotICAgIFZpcnR1YWxSZWdpc3RlciBwcm90byA9IGJ5dGVjb2RlLm1f
cHJvdG90eXBlOwotICAgIAotICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3ImIGdlbiA9IG1faW5z
dGFuY2VPZnNbbV9pbnN0YW5jZU9mSW5kZXgrK107Ci0KLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKLQotICAgIHVzaW5nIFNsb3dPcGVyYXRpb24gPSBkZWNsdHlwZShvcGVyYXRp
b25JbnN0YW5jZU9mT3B0aW1pemUpOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0
R1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMD4oKTsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIHN0dWJJbmZvR1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJh
dGlvbiwgMT4oKTsKLSAgICB1c2luZyBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnZhbHVl
SlNSOwotICAgIHVzaW5nIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG9KU1I7Ci0g
ICAgc3RhdGljX2Fzc2VydCh2YWx1ZUpTUiA9PSBwcmVmZXJyZWRBcmd1bWVudEpTUjxTbG93T3Bl
cmF0aW9uLCAyPigpKTsKLSAgICAvLyBQcm90byB3aWxsIGJlIHBhc3NlZCBvbiBzdGFjaywganVz
dCBtYWtlIHN1cmUgbm8gb3ZlcmxhcAotICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKHZhbHVl
SlNSLCBwcm90b0pTUiwgZ2xvYmFsT2JqZWN0R1BSLCBzdHViSW5mb0dQUikpOwotCi0gICAgbG9h
ZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOwotICAgIGxvYWRDb25zdGFudChnZW4ubV91
bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJUYWcodmFsdWUsIHZhbHVlSlNSLnRhZ0dQUigpKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyVGFnKHByb3RvLCBwcm90b0pTUi50YWdHUFIoKSk7Ci0gICAgY2FsbE9w
ZXJhdGlvbjxTbG93T3BlcmF0aW9uPigKLSAgICAgICAgQWRkcmVzcyhzdHViSW5mb0dQUiwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwKLSAgICAgICAgZHN0LAot
ICAgICAgICBnbG9iYWxPYmplY3RHUFIsIHN0dWJJbmZvR1BSLCB2YWx1ZUpTUiwgcHJvdG9KU1Ip
OwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKLX0K
LQotdm9pZCBKSVQ6OmVtaXRfb3BfaXNfZW1wdHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcElzRW1wdHk+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSwgcmVnVDApOwotICAgIGNv
bXBhcmUzMihFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFn
KSwgcmVnVDApOwotCi0gICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKLX0KLQotdm9pZCBK
SVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNC
b29sZWFuPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlclRhZyh2YWx1ZSwgcmVnVDApOwotICAgIGNvbXBhcmUzMihF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwgcmVnVDApOwot
ICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2lz
X251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNOdW1iZXI+KCk7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyVGFnKHZhbHVlLCByZWdUMCk7Ci0gICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdU
MCk7Ci0gICAgY29tcGFyZTMyKEJlbG93LCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxv
d2VzdFRhZyArIDEpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKLX0K
LQotTk9fUkVUVVJOIHZvaWQgSklUOjplbWl0X29wX2lzX2JpZ19pbnQoY29uc3QgSW5zdHJ1Y3Rp
b24qKQotewotICAgIC8vIFdlIGVtaXQgaXNfY2VsbF93aXRoX3R5cGUgaW5zdGVhZCwgc2luY2Ug
QmlnSW50MzIgaXMgbm90IHN1cHBvcnRlZCBvbiAzMi1iaXQgcGxhdGZvcm1zLgotICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2lzX2NlbGxf
d2l0aF90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0NlbGxXaXRoVHlwZT4o
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotICAgIGludCB0eXBlID0gYnl0
ZWNvZGUubV90eXBlOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEs
IHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7Ci0K
LSAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVnVDApOwotICAgIEp1bXAgZG9uZSA9IGp1
bXAoKTsKLQotICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMy
KDApLCByZWdUMCk7Ci0KLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFN0b3JlQm9vbChk
c3QsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BJc09iamVjdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV9vcGVyYW5kOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEsIHJl
Z1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7Ci0KLSAg
ICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9U
eXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlZ1QwKTsKLSAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7Ci0KLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW0zMigwKSwgcmVnVDApOwotCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRT
dG9yZUJvb2woZHN0LCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9QcmltaXRpdmU+KCk7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBz
cmMgPSBieXRlY29kZS5tX3NyYzsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBy
ZWdUMSwgcmVnVDApOwotCi0gICAgSnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QocmVnVDApKTsKLSAgICBpc0ltbS5saW5r
KHRoaXMpOwotCi0gICAgaWYgKGRzdCAhPSBzcmMpCi0gICAgICAgIGVtaXRTdG9yZShkc3QsIHJl
Z1QxLCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9Qcm9wZXJ0eUtleT4oKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9
IGJ5dGVjb2RlLm1fc3JjOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1Qx
LCByZWdUMCk7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDEpKTsKLSAg
ICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RTdHJpbmcocmVnVDApKTsKLQotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBpZiAo
c3JjICE9IGRzdCkKLSAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKLX0KLQot
dm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOb3Q+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0KLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyVGFnKHNyYywgcmVnVDApOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmMsIHJlZ1QxLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RCb29sZWFuKHJl
Z1QxLCBJbnZhbGlkR1BSUmVnKSk7Ci0gICAgeG9yMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7
Ci0KLSAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDAsIChkc3QgPT0gc3JjKSk7Ci19Ci0KLXZv
aWQgSklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSnVuZGVmaW5lZE9yTnVsbD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLQotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJUYWcodmFsdWUsIHJlZ1QwKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChKU1Zh
bHVlOjpVbmRlZmluZWRUYWcgKyAxID09IEpTVmFsdWU6Ok51bGxUYWcpICYmIChKU1ZhbHVlOjpO
dWxsVGFnICYgMHgxKSwgIiIpOwotICAgIG9yMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0g
ICAgYWRkSnVtcChicmFuY2hJZk51bGwocmVnVDApLCB0YXJnZXQpOwotfQotCi12b2lkIEpJVDo6
ZW1pdF9vcF9qbnVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BKbnVuZGVmaW5lZE9yTnVsbD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLQotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJUYWcodmFsdWUsIHJlZ1QwKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChKU1ZhbHVlOjpV
bmRlZmluZWRUYWcgKyAxID09IEpTVmFsdWU6Ok51bGxUYWcpICYmIChKU1ZhbHVlOjpOdWxsVGFn
ICYgMHgxKSwgIiIpOwotICAgIG9yMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgYWRk
SnVtcChicmFuY2hJZk5vdE51bGwocmVnVDApLCB0YXJnZXQpOwotfQotCi12b2lkIEpJVDo6ZW1p
dF9vcF9qZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0g
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXFQdHI+KCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0
TGFiZWwpOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QxLCByZWdUMCk7
Ci0gICAgSnVtcCBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKLSAgICBsb2FkQ29k
ZUJsb2NrQ29uc3RhbnRQYXlsb2FkKGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIsIHJlZ1QyKTsK
LSAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHJlZ1QyKSwgdGFyZ2V0KTsKLSAg
ICBub3RDZWxsLmxpbmsodGhpcyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxUHRyPigpOwotICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLQotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMSwgcmVnVDApOwotICAgIEp1bXAgbm90
Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7Ci0gICAgbG9hZENvZGVCbG9ja0NvbnN0YW50
UGF5bG9hZChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyLCByZWdUMik7Ci0gICAgSnVtcCBlcXVh
bCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHJlZ1QyKTsKLSAgICBub3RDZWxsLmxpbmsodGhp
cyk7Ci0gICAgc3RvcmU4VG9NZXRhZGF0YShUcnVzdGVkSW1tMzIoMSksIGJ5dGVjb2RlLCBPcEpu
ZXFQdHI6Ok1ldGFkYXRhOjpvZmZzZXRPZkhhc0p1bXBlZCgpKTsKLSAgICBhZGRKdW1wKGp1bXAo
KSwgdGFyZ2V0KTsKLSAgICBlcXVhbC5saW5rKHRoaXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7CiAKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEg
PSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1f
cmhzOworICAgIGNvbXBpbGVPcEVxQ29tbW9uKGJ5dGVjb2RlLm1fbGhzLCBieXRlY29kZS5tX3Jo
cyk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QxLCByZWdUMCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCByZWdUMywgcmVnVDIpOwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDMpKTsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZkNlbGwocmVnVDEpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihCZWxvdywg
cmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7Ci0KLSAgICBjb21wYXJl
MzIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwotCi0gICAgZW1pdFN0b3JlQm9vbChkc3Qs
IHJlZ1QwKTsKKyAgICBjb21wYXJlMzIoRXF1YWwsIGpzUmVnVDEwLnBheWxvYWRHUFIoKSwganNS
ZWdUMzIucGF5bG9hZEdQUigpLCByZWdUMCk7CisgICAgYm94Qm9vbGVhbihyZWdUMCwganNSZWdU
MTApOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIGpzUmVnVDEw
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2
b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigp
OwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKIAotICAgIEp1bXBMaXN0
IHN0b3JlUmVzdWx0OwotICAgIEp1bXBMaXN0IGdlbmVyaWNDYXNlOworICAgIGNvbXBpbGVPcEVx
Q29tbW9uKGJ5dGVjb2RlLm1fbGhzLCBieXRlY29kZS5tX3Jocyk7CiAKLSAgICBnZW5lcmljQ2Fz
ZS5hcHBlbmQoZ2V0U2xvd0Nhc2UoaXRlcikpOyAvLyB0YWdzIG5vdCBlcXVhbAotCi0gICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOyAvLyB0YWdzIGVxdWFsIGFuZCBKU0NlbGwKLSAgICBnZW5lcmljQ2Fz
ZS5hcHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKLSAgICBnZW5lcmljQ2FzZS5hcHBl
bmQoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDIpKTsKLQotICAgIC8vIFN0cmluZyBjYXNlLgotICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZVN0cmluZ0VxLCByZWdUMSwgcmVnVDAsIHJlZ1QyKTsKLSAgICBzdG9yZVJlc3VsdC5hcHBl
bmQoanVtcCgpKTsKLQotICAgIC8vIEdlbmVyaWMgY2FzZS4KLSAgICBnZW5lcmljQ2FzZS5hcHBl
bmQoZ2V0U2xvd0Nhc2UoaXRlcikpOyAvLyBkb3VibGVzCi0gICAgZ2VuZXJpY0Nhc2UubGluayh0
aGlzKTsKLSAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDQsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QzLCByZWdUMikpOwotCi0gICAgc3RvcmVSZXN1bHQubGluayh0aGlzKTsKLSAg
ICBlbWl0U3RvcmVCb29sKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGNvbXBhcmUzMihOb3RF
cXVhbCwganNSZWdUMTAucGF5bG9hZEdQUigpLCBqc1JlZ1QzMi5wYXlsb2FkR1BSKCksIHJlZ1Qw
KTsKKyAgICBib3hCb29sZWFuKHJlZ1QwLCBqc1JlZ1QxMCk7CisgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2RzdCwganNSZWdUMTApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjMiwgcmVnVDMsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDEsIHJlZ1QzKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1Qx
KSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQmVsb3csIHJlZ1QxLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6TG93ZXN0VGFnKSkpOworICAgIGNvbXBpbGVPcEVxQ29tbW9uKGJ5dGVjb2RlLm1f
bGhzLCBieXRlY29kZS5tX3Jocyk7CiAKLSAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCByZWdU
MCwgcmVnVDIpLCB0YXJnZXQpOwotfQotCi12b2lkIEpJVDo6Y29tcGlsZU9wRXFKdW1wU2xvdyhW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBDb21waWxlT3BFcVR5cGUgdHlw
ZSwgaW50IGp1bXBUYXJnZXQpCi17Ci0gICAgSnVtcExpc3QgZG9uZTsKLSAgICBKdW1wTGlzdCBn
ZW5lcmljQ2FzZTsKLQotICAgIGdlbmVyaWNDYXNlLmFwcGVuZChnZXRTbG93Q2FzZShpdGVyKSk7
IC8vIHRhZ3Mgbm90IGVxdWFsCi0KLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHRhZ3MgZXF1
YWwgYW5kIEpTQ2VsbAotICAgIGdlbmVyaWNDYXNlLmFwcGVuZChicmFuY2hJZk5vdFN0cmluZyhy
ZWdUMCkpOwotICAgIGdlbmVyaWNDYXNlLmFwcGVuZChicmFuY2hJZk5vdFN0cmluZyhyZWdUMikp
OwotCi0gICAgLy8gU3RyaW5nIGNhc2UuCi0gICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMSk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIHJlZ1QxLCByZWdUMCwg
cmVnVDIpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMih0eXBlID09IENvbXBp
bGVPcEVxVHlwZTo6RXEgPyBOb25aZXJvIDogWmVybywgcmV0dXJuVmFsdWVHUFIpLCBqdW1wVGFy
Z2V0KTsKLSAgICBkb25lLmFwcGVuZChqdW1wKCkpOwotCi0gICAgLy8gR2VuZXJpYyBjYXNlLgot
ICAgIGdlbmVyaWNDYXNlLmFwcGVuZChnZXRTbG93Q2FzZShpdGVyKSk7IC8vIGRvdWJsZXMKLSAg
ICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUNCwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7Ci0gICAgZW1pdEp1bXBT
bG93VG9Ib3QoYnJhbmNoVGVzdDMyKHR5cGUgPT0gQ29tcGlsZU9wRXFUeXBlOjpFcSA/IE5vblpl
cm8gOiBaZXJvLCByZXR1cm5WYWx1ZUdQUiksIGp1bXBUYXJnZXQpOwotCi0gICAgZG9uZS5saW5r
KHRoaXMpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+
KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNvbXBpbGVPcEVxSnVtcFNsb3coaXRlciwg
Q29tcGlsZU9wRXFUeXBlOjpFcSwgdGFyZ2V0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfbmVx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0
ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsK
LQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIHJlZ1QzLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMykpOwotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmQ2VsbChyZWdUMSkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEJlbG93LCByZWdU
MSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKLQotICAgIGNvbXBhcmUzMihO
b3RFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7Ci0KLSAgICBlbWl0U3RvcmVCb29sKGRzdCwg
cmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotCi0gICAgSnVt
cExpc3Qgc3RvcmVSZXN1bHQ7Ci0gICAgSnVtcExpc3QgZ2VuZXJpY0Nhc2U7Ci0KLSAgICBnZW5l
cmljQ2FzZS5hcHBlbmQoZ2V0U2xvd0Nhc2UoaXRlcikpOyAvLyB0YWdzIG5vdCBlcXVhbAotCi0g
ICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyB0YWdzIGVxdWFsIGFuZCBKU0NlbGwKLSAgICBnZW5l
cmljQ2FzZS5hcHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKLSAgICBnZW5lcmljQ2Fz
ZS5hcHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDIpKTsKLQotICAgIC8vIFN0cmluZyBjYXNl
LgotICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZVN0cmluZ0VxLCByZWdUMSwgcmVnVDAsIHJlZ1QyKTsKLSAgICBzdG9yZVJlc3Vs
dC5hcHBlbmQoanVtcCgpKTsKLQotICAgIC8vIEdlbmVyaWMgY2FzZS4KLSAgICBnZW5lcmljQ2Fz
ZS5hcHBlbmQoZ2V0U2xvd0Nhc2UoaXRlcikpOyAvLyBkb3VibGVzCi0gICAgZ2VuZXJpY0Nhc2Uu
bGluayh0aGlzKTsKLSAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDQsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwotCi0gICAgc3RvcmVSZXN1bHQubGluayh0aGlz
KTsKLSAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmV0dXJuVmFsdWVHUFIpOwotICAgIGVt
aXRTdG9yZUJvb2woZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgYWRkSnVtcChicmFuY2gzMihF
cXVhbCwganNSZWdUMTAucGF5bG9hZEdQUigpLCBqc1JlZ1QzMi5wYXlsb2FkR1BSKCkpLCB0YXJn
ZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0
ZWNvZGUubV9yaHM7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QxLCBy
ZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCByZWdUMywgcmVnVDIpOwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDMpKTsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDEpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihCZWxvdywgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CisgICAg
Y29tcGlsZU9wRXFDb21tb24oYnl0ZWNvZGUubV9saHMsIGJ5dGVjb2RlLm1fcmhzKTsKIAotICAg
IGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiksIHRhcmdldCk7CisgICAg
YWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwganNSZWdUMTAucGF5bG9hZEdQUigpLCBqc1JlZ1Qz
Mi5wYXlsb2FkR1BSKCkpLCB0YXJnZXQpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEVxPigpOworCisgICAgY29tcGlsZU9wRXFTbG93Q29tbW9uKGl0ZXIpOwor
CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgcmV0dXJuVmFsdWVKU1IpOworICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlSlNSKTsKK30K
Kwordm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOworCisgICAg
Y29tcGlsZU9wRXFTbG93Q29tbW9uKGl0ZXIpOworCisgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDEp
LCByZXR1cm5WYWx1ZUdQUik7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgcmV0dXJu
VmFsdWVKU1IpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJl
dHVyblZhbHVlSlNSKTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSmVxPigpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKKworICAgIGNvbXBpbGVPcEVxU2xvd0Nv
bW1vbihpdGVyKTsKKworICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJv
LCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9q
bmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjb21w
aWxlT3BFcUp1bXBTbG93KGl0ZXIsIENvbXBpbGVPcEVxVHlwZTo6TkVxLCB0YXJnZXQpOworCisg
ICAgY29tcGlsZU9wRXFTbG93Q29tbW9uKGl0ZXIpOworCisgICAgZW1pdEp1bXBTbG93VG9Ib3Qo
YnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAotdGVtcGxh
dGUgPHR5cGVuYW1lIE9wPgotdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXFD
b21tb24oVmlydHVhbFJlZ2lzdGVyIHNyYzEsICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMikKIHsKLSAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNy
YzEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2Rl
Lm1fcmhzOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMSwgcmVnVDAp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgcmVnVDMsIHJlZ1QyKTsKLQotICAg
IC8vIEJhaWwgaWYgdGhlIHRhZ3MgZGlmZmVyLCBvciBhcmUgZG91YmxlLgotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDMpKTsKLSAgICBhZGRTbG93Q2FzZShi
cmFuY2gzMihCZWxvdywgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7
Ci0KLSAgICAvLyBKdW1wIHRvIGEgc2xvdyBjYXNlIGlmIGJvdGggYXJlIHN0cmluZ3Mgb3Igc3lt
Ym9scyAobm9uIG9iamVjdCkuCi0gICAgSnVtcCBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJl
Z1QxKTsKLSAgICBKdW1wIGZpcnN0SXNPYmplY3QgPSBicmFuY2hJZk9iamVjdChyZWdUMCk7Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDIpKTsKLSAgICBub3RDZWxsLmxp
bmsodGhpcyk7Ci0gICAgZmlyc3RJc09iamVjdC5saW5rKHRoaXMpOwotCi0gICAgLy8gU2ltcGx5
IGNvbXBhcmUgdGhlIHBheWxvYWRzLgotICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lPE9w
LCBPcFN0cmljdGVxPjo6dmFsdWUpCi0gICAgICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDAsIHJl
Z1QyLCByZWdUMCk7Ci0gICAgZWxzZQotICAgICAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1Qw
LCByZWdUMiwgcmVnVDApOwotCi0gICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKLX0KLQot
dm9pZCBKSVQ6OmVtaXRfb3Bfc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKLXsKLSAgICBjb21waWxlT3BTdHJpY3RFcTxPcFN0cmljdGVxPihjdXJyZW50SW5z
dHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9uc3RyaWN0ZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBjb21waWxlT3BTdHJpY3RFcTxPcE5z
dHJpY3RlcT4oY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgT3A+
Ci12b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3A+KCk7Ci0gICAgaW50IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0
aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9
IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9y
aHM7Ci0KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIGpzUmVnVDEwKTsKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIGpzUmVnVDMyKTsKIApAQCAtNTY3LDIyICsxNzMs
NDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KGpz
UmVnVDMyLnBheWxvYWRHUFIoKSkpOwogICAgIG5vdENlbGwubGluayh0aGlzKTsKICAgICBmaXJz
dElzT2JqZWN0LmxpbmsodGhpcyk7Cit9CiAKLSAgICAvLyBTaW1wbHkgY29tcGFyZSB0aGUgcGF5
bG9hZHMuCi0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWU8T3AsIE9wSnN0cmljdGVxPjo6
dmFsdWUpCi0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIGpzUmVnVDEwLnBheWxvYWRH
UFIoKSwganNSZWdUMzIucGF5bG9hZEdQUigpKSwgdGFyZ2V0KTsKLSAgICBlbHNlCi0gICAgICAg
IGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIGpzUmVnVDEwLnBheWxvYWRHUFIoKSwganNSZWdU
MzIucGF5bG9hZEdQUigpKSwgdGFyZ2V0KTsKK3ZvaWQgSklUOjplbWl0X29wX3N0cmljdGVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdHJpY3RlcT4oKTsKKyAgICBjb21waWxlT3BT
dHJpY3RFcUNvbW1vbihieXRlY29kZS5tX2xocywgYnl0ZWNvZGUubV9yaHMpOworCisgICAgY29t
cGFyZTMyKEVxdWFsLCBqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIGpzUmVnVDMyLnBheWxvYWRHUFIo
KSwgcmVnVDApOworCisgICAgYm94Qm9vbGVhbihyZWdUMCwganNSZWdUMTApOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIGpzUmVnVDEwKTsKK30KKwordm9pZCBK
SVQ6OmVtaXRfb3BfbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOc3Ry
aWN0ZXE+KCk7CisgICAgY29tcGlsZU9wU3RyaWN0RXFDb21tb24oYnl0ZWNvZGUubV9saHMsIGJ5
dGVjb2RlLm1fcmhzKTsKKworICAgIGNvbXBhcmUzMihOb3RFcXVhbCwganNSZWdUMTAucGF5bG9h
ZEdQUigpLCBqc1JlZ1QzMi5wYXlsb2FkR1BSKCksIHJlZ1QwKTsKKworICAgIGJveEJvb2xlYW4o
cmVnVDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
ZHN0LCBqc1JlZ1QxMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pzdHJpY3RlcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGNvbXBpbGVPcFN0cmljdEVx
SnVtcDxPcEpzdHJpY3RlcT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKKyAgICBpbnQgdGFyZ2V0
ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OworCisgICAgY29tcGlsZU9wU3RyaWN0RXFDb21tb24oYnl0ZWNvZGUubV9saHMsIGJ5dGVjb2Rl
Lm1fcmhzKTsKKworICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIGpzUmVnVDEwLnBheWxvYWRH
UFIoKSwganNSZWdUMzIucGF5bG9hZEdQUigpKSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVt
aXRfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewotICAgIGNvbXBpbGVPcFN0cmljdEVxSnVtcDxPcEpuc3RyaWN0ZXE+KGN1cnJlbnRJbnN0cnVj
dGlvbik7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0
cmljdGVxPigpOworICAgIGludCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CisKKyAgICBjb21waWxlT3BTdHJpY3RFcUNvbW1v
bihieXRlY29kZS5tX2xocywgYnl0ZWNvZGUubV9yaHMpOworCisgICAgYWRkSnVtcChicmFuY2gz
MihOb3RFcXVhbCwganNSZWdUMTAucGF5bG9hZEdQUigpLCBqc1JlZ1QzMi5wYXlsb2FkR1BSKCkp
LCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCkBAIC01OTIsNyArMjI0LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pz
dHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2wK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4o
KTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1Q0LCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVnVDQsIGpzUmVnVDEwLCBqc1Jl
Z1QzMik7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVy
blZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtNjAzLDE3OCArMjM1LDEwIEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1Q0KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RF
cSwgcmVnVDQsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCBy
ZWdUMikpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdU
NCwganNSZWdUMTAsIGpzUmVnVDMyKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0
MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9v
cF90b19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvTnVtYmVyPigpOwot
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzcmMsIHJlZ1QxLCByZWdUMCk7Ci0KLSAgICBKdW1wIGlzSW50MzIgPSBicmFuY2hJZklu
dDMyKHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1Qx
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOwotICAgIGlzSW50MzIubGluayh0
aGlzKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCkpOwotICAgIGlmIChzcmMgIT0gZHN0KQotICAgICAgICBlbWl0U3RvcmUo
ZHN0LCByZWdUMSwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF90b19udW1lcmljKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWVyaWM+KCk7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBi
eXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgSlNWYWx1ZVJlZ3MgYXJndW1lbnRWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMSwgcmVn
VDApOwotCi0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDEpOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChyZWdUMCkpOwotICAgIEp1bXAgaXNC
aWdJbnQgPSBqdW1wKCk7Ci0KLSAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdE51bWJlcihhcmd1bWVudFZhbHVlUmVncywgcmVnVDIpKTsKLSAgICBp
c0JpZ0ludC5saW5rKHRoaXMpOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7Ci0gICAgaWYgKHNyYyAhPSBkc3QpCi0gICAg
ICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29w
X3RvX3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyYywgcmVnVDEsIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2Vs
bChyZWdUMSkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7Ci0K
LSAgICBpZiAoc3JjICE9IGRzdCkKLSAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1Qw
KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BUb09iamVjdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
LQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMSwgcmVnVDApOwotCi0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RPYmplY3QocmVnVDApKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwotICAgIGlmIChzcmMgIT0gZHN0KQot
ICAgICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1p
dF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCk7Ci0KLSAg
ICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCku
dG9wRW50cnlGcmFtZSk7Ci0KLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bSksIHJlZ1QzKTsK
LSAgICAvLyBvcGVyYXRpb25UaHJvdyByZXR1cm5zIHRoZSBjYWxsRnJhbWUgZm9yIHRoZSBoYW5k
bGVyLgotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZz
ZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51
bGxwdHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkpOwot
Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV91bmxpbmtl
ZENvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKLQotICAgIC8vIFdoZW4gdGhlIExMSW50IHRocm93cyBhbiBleGNl
cHRpb24sIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2UndmUgYWxyZWFkeSB0aWVyZWQgdXAKLSAg
ICAvLyB0aGUgc2FtZSBDb2RlQmxvY2sgdG8gYmFzZWxpbmUsIGFuZCB3ZSdsbCBjYXRjaCB0aGUg
ZXhjZXB0aW9uIGluIHRoZSBiYXNlbGluZSBKSVQgKGJlY2F1c2UKLSAgICAvLyB3ZSB1cGRhdGVk
IHRoZSBleGNlcHRpb24gaGFuZGxlcnMgdG8gcG9pbnQgaGVyZSkuIEJlY2F1c2UgdGhlIExMSW50
IHVzZXMgYSBkaWZmZXJlbnQgdmFsdWUKLSAgICAvLyBpbnNpZGUgc19jb25zdGFudHNHUFIsIHRo
ZSBjYWxsZWUgc2F2ZXMgd2UgcmVzdG9yZSBhYm92ZSBtYXkgbm90IGNvbnRhaW4gdGhlIGNvcnJl
Y3QgcmVnaXN0ZXIuCi0gICAgLy8gU28gd2UgcmVwbGVuaXNoIGl0IGhlcmUuCi0gICAgewotICAg
ICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDAp
OwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVRE
YXRhKCkpLCByZWdUMCk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgQ29kZUJsb2Nr
OjpKSVREYXRhOjpvZmZzZXRPZkpJVENvbnN0YW50UG9vbCgpKSwgc19jb25zdGFudHNHUFIpOwot
ICAgIH0KLQotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblJldHJp
ZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgJnZtKCkpOwotICAgIEp1bXAgaXNDYXRj
aGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOwot
ICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7Ci0gICAgaXNDYXRjaGFibGVFeGNlcHRp
b24ubGluayh0aGlzKTsKLQotICAgIC8vIE5vdyBzdG9yZSB0aGUgZXhjZXB0aW9uIHJldHVybmVk
IGJ5IG9wZXJhdGlvblRocm93LgotICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlZ1QyKTsKLSAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVnVDEpOwotCi0gICAgZW1p
dFN0b3JlKGJ5dGVjb2RlLm1fZXhjZXB0aW9uLCByZWdUMSwgcmVnVDIpOwotCi0gICAgbG9hZDMy
KEFkZHJlc3MocmVnVDIsIEV4Y2VwdGlvbjo6dmFsdWVPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRP
RihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlZ1QwKTsKLSAgICBsb2FkMzIoQWRkcmVz
cyhyZWdUMiwgRXhjZXB0aW9uOjp2YWx1ZU9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFs
dWUsIHUuYXNCaXRzLnRhZykpLCByZWdUMSk7Ci0KLSAgICBlbWl0U3RvcmUoYnl0ZWNvZGUubV90
aHJvd25WYWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLQotI2lmIEVOQUJMRShERkdfSklUKQotICAgIC8v
IEZJWE1FOiBjb25zaWRlciBpbmxpbmUgY2FjaGluZyB0aGUgcHJvY2VzcyBvZiBkb2luZyBPU1Ig
ZW50cnksIGluY2x1ZGluZwotICAgIC8vIGFyZ3VtZW50IHR5cGUgcHJvb2ZzLCBzdG9yaW5nIGxv
Y2FscyB0byB0aGUgYnVmZmVyLCBldGMKLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc1NTk4Ci0KLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVj
ayhvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1ZVByb2ZpbGUsICZ2bSgpLCBtX2J5
dGVjb2RlSW5kZXguYXNCaXRzKCkpOwotICAgIGF1dG8gc2tpcE9TUkVudHJ5ID0gYnJhbmNoVGVz
dFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUik7Ci0gICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygp
OwotICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIE5vUHRyVGFnKTsKLSAgICBza2lwT1NSRW50
cnkubGluayh0aGlzKTsKLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLX0KLQotdm9pZCBKSVQ6
OmVtaXRfb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlKGNvbnN0IEluc3RydWN0aW9uKikKLXsKLSAg
ICAvLyBXZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIGhlcmUuLi4KLX0KLQotdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X3BhcmVudF9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0UGFyZW50U2NvcGU+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGN1cnJlbnRTY29wZSA9IGJ5
dGVjb2RlLm1fc2NvcGU7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoY3VycmVu
dFNjb3BlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZz
ZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVDZWxsKGJ5dGVjb2RlLm1fZHN0LCBy
ZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKTsK
LSAgICAKLSAgICAvLyBFdmVuIHRob3VnaCBKSVQgY29kZSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBp
bml0aWFsaXplIG91ciBjb25zdGFudAotICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9p
bnRlcnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwotICAgIC8vIG9iamVjdCBs
aWZldGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KLSAgICBzaXplX3QgY291bnQgPSBt
X3VubGlua2VkQ29kZUJsb2NrLT5udW1WYXJzKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IENvZGVC
bG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBp
IDwgY291bnQ7ICsraSkKLSAgICAgICAgZW1pdFN0b3JlKHZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KGkpLCBqc1VuZGVmaW5lZCgpKTsKLQotICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwo
dGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZW50ZXIpOwotICAgIHNsb3dQYXRo
Q2FsbC5jYWxsKCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
SlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3Jl
Q2VsbChkc3QsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDaGVja1Rkej4oKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyVGFnKGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyLCByZWdUMCk7Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOwotfQotCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCmluZGV4IGYwMmY0YWE1OWQ5NmFlMTU1
NWVhMzJlYzFhMmY1MTcwNWY0YjFlODYuLjExNGE3NGQ0ZTQ5MTM3NmRjYzUyNWVkMjE1ZDExOWNl
NTA3NTZmYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MuY3BwCkBAIC0xNDksOCArMTQ5LDggQEAgdm9pZCBKSVQ6OmdlbmVyYXRlR2V0QnlWYWxT
bG93Q2FzZShjb25zdCBPcGNvZGVUeXBlJiBieXRlY29kZSwgVmVjdG9yPFNsb3dDYXNlRW4KICAg
ICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVw
YXJlQ2FsbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgcmV0dXJuVmFsdWVHUFIpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1
cm5WYWx1ZUdQUik7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJu
VmFsdWVKU1IpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUpT
Uik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CkBAIC0yODAsOCArMjgwLDggQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmUKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElT
dHViKHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHVi
KGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCi0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVKU1IpOworICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUpTUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIENhbGwoKSk7CkBAIC0xMjczLDggKzEyNzMsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRf
cHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgZW1p
dE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dFZSZWcsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCByZXR1cm5WYWx1ZUpTUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRW
UmVnLCByZXR1cm5WYWx1ZUpTUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CkBA
IC0xMzY5LDggKzEzNjksOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbAogICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxHZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZh
bHVlR1BSKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZh
bHVlR1BSKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1
ZUpTUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1
ZUpTUik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CkBAIC0xNDEzLDggKzE0MTMs
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1
bHRWUmVnLCByZXN1bHRKU1IpOwogfQogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLQogI2lmIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSVQ6OnNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJiB2bSkKIHsK
QEAgLTE0NTIsOCArMTQ1MCw2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSklUOjpzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvCiB9CiAjZW5kaWYg
Ly8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSNlbmRpZgotCiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CkBAIC0xNTAzLDE1ICsxNDk5LDEzIEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29w
X2dldF9ieV9pZF93aXRoX3RoaXNfcHJlcGFyZUNhbGxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7CiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4
Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUpTUik7CisgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXR1cm5WYWx1ZUpTUik7CiAjZW5kaWYgLy8gRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotCiAjaWYgRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEpJVDo6c2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZN
JiB2bSkKIHsKQEAgLTE1NTEsOCArMTU0NSw2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUOjpzbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXNfcHJlcGFyZUNhCiB9
CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSNlbmRpZgotCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5
SWQ+KCk7CkBAIC0yOTMxLDggKzI5MjMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9y
X2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogICAg
IGRvbmVDYXNlcy5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRl
Y29kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVl
SlNSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVKU1IpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCkBAIC0yOTY2LDcgKzI5NTgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9lbnVtZXJh
dG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bgogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNz
KHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0
KCkpKSk7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFu
KHRydWUpKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKICAgICBKdW1wIGRvbmUgPSBqdW1w
KCk7CiAKICAgICBzbG93Q2FzZXMubGluayh0aGlzKTsKQEAgLTMwMjYsNjMgKzMwMTgsMjYgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3QKIAogI2VuZGlmCiAKK3ZvaWQgSklUOjplbWl0V3JpdGVC
YXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0
ZUJhcnJpZXJNb2RlIG1vZGUpCit7CisgICAgLy8gdmFsdWUgbWF5IGJlIGludmFsaWQgVmlydHVh
bFJlZ2lzdGVyIGlmIG1vZGUgaXMgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciBvciBTaG91bGRG
aWx0ZXJCYXNlLgorICAgIEp1bXAgdmFsdWVOb3RDZWxsOworICAgIGlmIChtb2RlID09IFNob3Vs
ZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSB7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKLQotdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lz
dGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkK
LXsKLSAgICAvLyB2YWx1ZSBtYXkgYmUgaW52YWxpZCBWaXJ0dWFsUmVnaXN0ZXIgaWYgbW9kZSBp
cyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIG9yIFNob3VsZEZpbHRlckJhc2UuCi0gICAgSnVt
cCB2YWx1ZU5vdENlbGw7Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9k
ZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5v
dENlbGwocmVnVDApOwotICAgIH0KLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIs
IHJlZ1QwKTsKLSAgICBKdW1wIG93bmVyTm90Q2VsbDsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRG
aWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKQotICAgICAgICBv
d25lck5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotCi0gICAgSnVtcCBvd25lcklz
UmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCByZWdUMCwgcmVnVDEpOwot
ICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbldyaXRlQmFycmllclNs
b3dQYXRoLCAmdm0oKSwgcmVnVDApOwotICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGlu
ayh0aGlzKTsKLQotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBt
b2RlID09IFNob3VsZEZpbHRlckJhc2UpCi0gICAgICAgIG93bmVyTm90Q2VsbC5saW5rKHRoaXMp
OwotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmls
dGVyQmFzZUFuZFZhbHVlKQotICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKLX0KLQot
dm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgdmFsdWVOb3RDZWxsOwotICAgIGlmIChtb2Rl
ID09IFNob3VsZEZpbHRlclZhbHVlKQotICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5v
dENlbGwocmVnVDApOwotCi0gICAgZW1pdFdyaXRlQmFycmllcihvd25lcik7Ci0KLSAgICBpZiAo
bW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkKLSAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhp
cyk7Ci19Ci0KICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0KLXZvaWQgSklUOjplbWl0V3JpdGVC
YXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0
ZUJhcnJpZXJNb2RlIG1vZGUpCi17Ci0gICAgLy8gdmFsdWUgbWF5IGJlIGludmFsaWQgVmlydHVh
bFJlZ2lzdGVyIGlmIG1vZGUgaXMgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciBvciBTaG91bGRG
aWx0ZXJCYXNlLgotICAgIEp1bXAgdmFsdWVOb3RDZWxsOwotICAgIGlmIChtb2RlID09IFNob3Vs
ZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSB7CiAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJUYWcodmFsdWUsIHJlZ1QwKTsKKyNlbmRpZgogICAg
ICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwogICAgIH0KIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIsIHJlZ1QwLCByZWdUMSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihvd25lciwganNSZWdUMTApOwogICAgIEp1bXAgb3duZXJOb3RDZWxs
OwogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2UgfHwgbW9kZSA9PSBTaG91bGRGaWx0
ZXJCYXNlQW5kVmFsdWUpCi0gICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChy
ZWdUMCk7CisgICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChqc1JlZ1QxMCk7
CiAKLSAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZt
KCksIHJlZ1QxLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3Bl
cmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCByZWdUMSk7CisgICAgSnVtcCBvd25l
cklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBqc1JlZ1QxMC5wYXls
b2FkR1BSKCksIHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVy
YXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIGpzUmVnVDEwLnBheWxvYWRHUFIoKSk7
CiAgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwogCiAgICAgaWYgKG1v
ZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1
ZSkKQEAgLTMwOTEsMjIgKzMwNDYsNiBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0
dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYQogICAgICAg
ICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJp
ZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2Rl
IG1vZGUpCi17Ci0gICAgSnVtcCB2YWx1ZU5vdENlbGw7Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxk
RmlsdGVyVmFsdWUpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclRhZyh2YWx1ZSwg
cmVnVDApOwotICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwot
ICAgIH0KLQotICAgIGVtaXRXcml0ZUJhcnJpZXIob3duZXIpOwotCi0gICAgaWYgKG1vZGUgPT0g
U2hvdWxkRmlsdGVyVmFsdWUpCi0gICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOwotfQot
Ci0jZW5kaWYKLQogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93
bmVyLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7CiAgICAgQVNTRVJUKG1vZGUgPT0gVW5jb25k
aXRpb25hbFdyaXRlQmFycmllciB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCmluZGV4IGYxODZmYjgyYjFmZjk3
OGQ4ZjY3YTRmMDUzMzhlOWNmYjRjODIzNzQuLjRiNDI5YTI2N2NjZWUyYzY0NzNlZGE3MWM5ZmM5
NDU0YzU4MjMwMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRl
cmZhY2VKSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklU
LmgKQEAgLTQ5LDE1ICs0OSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBpbmxpbmUgSnVt
cCBlbWl0TG9hZEludDMyKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBkc3QpOwogICAgICAg
ICBpbmxpbmUgSnVtcCBlbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJ
RCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCk7CiAKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAg
ICAgICBpbmxpbmUgSnVtcCBlbWl0SnVtcElmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3Rlcik7Ci0j
ZW5kaWYKLQotICAgICAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFZpcnR1
YWxSZWdpc3RlciBlbnRyeSwgUmVnaXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9tID0gY2FsbEZy
YW1lUmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihSZWdp
c3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSk7Ci0gICAgICAgIHZvaWQgZW1pdFB1
dFRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQqIHZhbHVlLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpOwot
ICAgICAgICB2b2lkIGVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9t
LCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpOwotCiAgICAgICAgIFZNKiB2bSgpIGNvbnN0IHsgcmV0
dXJuIG1fdm07IH0KIAogICAgICAgICBWTSogbV92bTsKQEAgLTY1LDE3ICs1NiwxMiBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgaW5saW5lIEpTSW50ZXJm
YWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEpTQ2VsbChWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHBheWxvYWQpCi0gICAgewotICAgICAgICBs
b2FkUHRyKHBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgcGF5bG9hZCk7Ci0gICAgICAgIHJl
dHVybiBlbWl0SnVtcElmTm90SlNDZWxsKHZpcnR1YWxSZWdpc3Rlcik7Ci0gICAgfQotCi0gICAg
aW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0SnVtcElmTm90
SlNDZWxsKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCiAgICAgewogICAgICAgICBB
U1NFUlQodmlydHVhbFJlZ2lzdGVyIDwgVmlydHVhbFJlZ2lzdGVyKEZpcnN0Q29uc3RhbnRSZWdp
c3RlckluZGV4KSk7CisgICAgICAgIGxvYWRQdHIocGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIp
LCBwYXlsb2FkKTsKICAgICAgICAgcmV0dXJuIGJyYW5jaDMyKE5vdEVxdWFsLCB0YWdGb3Iodmly
dHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKICAgICB9Ci0g
ICAgCisKICAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVt
aXRMb2FkSW50MzIoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBk
c3QpCiAgICAgewogICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyIDwgVmlydHVhbFJlZ2lz
dGVyKEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KSk7CkBAIC05NywxNiArODMsMTMgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIGRvbmUubGluayh0aGlzKTsKICAgICAgICAgcmV0dXJuIG5v
dEludDsKICAgICB9Ci0KLSNlbmRpZgotCi0jaWYgVVNFKEpTVkFMVUU2NCkKKyNlbGlmIFVTRShK
U1ZBTFVFNjQpCiAgICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklU
OjplbWl0TG9hZEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBSZWdpc3Rl
cklEIGRzdCkKICAgICB7CiAgICAgICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3Rl
ciksIGRzdCk7CiAgICAgICAgIHJldHVybiBicmFuY2hJZk5vdENlbGwoZHN0KTsKICAgICB9Ci0g
ICAgCisKICAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVt
aXRMb2FkSW50MzIoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBk
c3QpCiAgICAgewogICAgICAgICBsb2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBk
c3QpOwpAQCAtMTI5LDM1ICsxMTIsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9CiAjZW5kaWYK
IAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdEdldEZyb21DYWxs
RnJhbWVIZWFkZXJQdHIoVmlydHVhbFJlZ2lzdGVyIGVudHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdp
c3RlcklEIGZyb20pCi0gICAgewotICAgICAgICBsb2FkUHRyKEFkZHJlc3MoZnJvbSwgZW50cnku
b2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgdG8pOwotICAgIH0KLQotICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lz
dGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQotICAgIHsKLSNpZiBVU0UoSlNWQUxV
RTMyXzY0KQotICAgICAgICBzdG9yZVB0cihmcm9tLCBwYXlsb2FkRm9yKGVudHJ5KSk7Ci0jZWxz
ZQotICAgICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZW50cnkpKTsKLSNlbmRpZgotICAg
IH0KLQotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dFRvQ2Fs
bEZyYW1lSGVhZGVyKHZvaWQqIHZhbHVlLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCi0gICAgewot
ICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKHZhbHVlKSwgYWRkcmVzc0ZvcihlbnRyeSkp
OwotICAgIH0KLQotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1
dENlbGxUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBl
bnRyeSkKLSAgICB7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgc3RvcmUzMihUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhZ0ZvcihlbnRyeSkpOwotICAgICAgICBzdG9y
ZTMyKGZyb20sIHBheWxvYWRGb3IoZW50cnkpKTsKLSNlbHNlCi0gICAgICAgIHN0b3JlNjQoZnJv
bSwgYWRkcmVzc0ZvcihlbnRyeSkpOwotI2VuZGlmCi0gICAgfQotCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>