<?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>208537</bug_id>
          
          <creation_ts>2020-03-03 14:19:19 -0800</creation_ts>
          <short_desc>Refactor FixedVMPoolExecutableAllocator to not have member functions which are really just helper functions</short_desc>
          <delta_ts>2020-03-03 16:19:17 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>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>
          
          <blocked>208490</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>guijemont</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1625244</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-03-03 14:19:19 -0800</bug_when>
    <thetext>This will make it easier when implementing the 1GB executable space on arm64</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625247</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-03-03 14:19:53 -0800</bug_when>
    <thetext>*** Bug 208116 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625263</commentid>
    <comment_count>2</comment_count>
      <attachid>392336</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-03-03 14:41:00 -0800</bug_when>
    <thetext>Created attachment 392336
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625267</commentid>
    <comment_count>3</comment_count>
      <attachid>392336</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-03-03 14:57:59 -0800</bug_when>
    <thetext>Comment on attachment 392336
patch

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

&gt; Source/JavaScriptCore/jit/ExecutableAllocator.cpp:405
&gt;  private:

will fix the double &quot;private:&quot; in a row</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625270</commentid>
    <comment_count>4</comment_count>
      <attachid>392336</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-03-03 15:02:47 -0800</bug_when>
    <thetext>Comment on attachment 392336
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625274</commentid>
    <comment_count>5</comment_count>
      <attachid>392339</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-03-03 15:09:17 -0800</bug_when>
    <thetext>Created attachment 392339
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625308</commentid>
    <comment_count>6</comment_count>
      <attachid>392339</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-03-03 16:18:35 -0800</bug_when>
    <thetext>Comment on attachment 392339
patch for landing

Clearing flags on attachment: 392339

Committed r257812: &lt;https://trac.webkit.org/changeset/257812&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625309</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-03-03 16:18:37 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625310</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-03-03 16:19:17 -0800</bug_when>
    <thetext>&lt;rdar://problem/60018354&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392336</attachid>
            <date>2020-03-03 14:41:00 -0800</date>
            <delta_ts>2020-03-03 15:09:17 -0800</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>27083</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjU3ODAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBA
CisyMDIwLTAzLTAzICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFJlZmFjdG9yIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciB0byBub3QgaGF2ZSBtZW1i
ZXIgZnVuY3Rpb25zIHdoaWNoIGFyZSByZWFsbHkganVzdCBoZWxwZXIgZnVuY3Rpb25zCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg1MzcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGVyZSB3ZXJlIGEg
ZmV3IG1lbWJlciBmdW5jdGlvbnMgaW4gRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yIHRo
YXQgd2VyZQorICAgICAgICBlc3NlbnRpYWxseSBoZWxwZXIgZnVuY3Rpb25zLiBJJ3ZlIGZhY3Rv
cmVkIHRoZW0gb3V0LCBhbmQgbWFkZSBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IKKyAg
ICAgICAgY2FsbCB0aGVtIGRpcmVjdGx5LiBUaGlzIHJlZmFjdG9yaW5nIGlzIG5lZWRlZCB3aGVu
IEkgaW1wbGVtZW50IHRoZSAxR0IKKyAgICAgICAgZXhlY3V0YWJsZSBwb29sIG9uIGFybTY0IHNp
bmNlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGF0IHdpbGwgY3JlYXRlIHNwbGl0CisgICAgICAg
IGltcGxlbWVudGF0aW9ucyBvZiBzb21ldGhpbmcgbGlrZSBGaXhlZFZNUG9vbEV4ZWN1dGFibGVB
bGxvY2F0b3IuCisKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHA6CisgICAg
ICAgIChKU0M6OmppdFdyaXRlVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpnZW5lcmlj
V3JpdGVUb0pJVFJlZ2lvbik6CisgICAgICAgIChKU0M6OmluaXRpYWxpemVTZXBhcmF0ZWRXWEhl
YXBzKToKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZUpJVFBhZ2VSZXNlcnZhdGlvbik6CisgICAg
ICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmlzVmFsaWQgY29uc3QpOgorICAgICAgICAo
SlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZXNzdXJlKToKKyAgICAgICAg
KEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6bWVtb3J5UHJlc3N1cmVNdWx0aXBsaWVyKToKKyAg
ICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAoSlND
OjpFeGVjdXRhYmxlQWxsb2NhdG9yOjppc1ZhbGlkRXhlY3V0YWJsZU1lbW9yeSk6CisgICAgICAg
IChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmdldExvY2sgY29uc3QpOgorICAgICAgICAoSlND
OjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpjb21taXR0ZWRCeXRlQ291bnQpOgorICAgICAgICAoSlND
OjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSk6CisgICAgICAgIChKU0M6OnN0YXJ0
T2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sSW1wbCk6CisgICAgICAgIChKU0M6OmVuZE9mRml4
ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbEltcGwpOgorICAgICAgICAoSlNDOjppc0pJVFBDKToKKwog
MjAyMC0wMy0wMyAgQmFzdWtlIFN1enVraSAgPGJhc3VrZS5zdXp1a2lAc29ueS5jb20+CiAKICAg
ICAgICAgW1dpbkNhaXJvXVtQbGF5U3RhdGlvbl0gQWRkIGludGVyZmFjZSB0byBnZXQgbGlzdGVu
aW5nIHBvcnQgb2YgUmVtb3RlSW5zcGVjdG9yU2VydmVyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDI1Nzc1
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE1NCw2NiArMTU0LDIyNiBAQCB2b2lkIEV4ZWN1dGFibGVBbGxv
Y2F0b3I6OnNldEpJVEVuYWJsZWQoCiAjZW5kaWYKIH0KIAotY2xhc3MgRml4ZWRWTVBvb2xFeGVj
dXRhYmxlQWxsb2NhdG9yIGZpbmFsIDogcHVibGljIE1ldGFBbGxvY2F0b3IgewotICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFs
bG9jYXRvcigpCi0gICAgICAgIDogTWV0YUFsbG9jYXRvcihqaXRBbGxvY2F0aW9uR3JhbnVsZSkg
Ly8gcm91bmQgdXAgYWxsIGFsbG9jYXRpb25zIHRvIDMyIGJ5dGVzCi0gICAgewotICAgICAgICBp
ZiAoIWlzSklURW5hYmxlZCgpKQotICAgICAgICAgICAgcmV0dXJuOworI2lmIE9TKERBUldJTikg
JiYgSEFWRShSRU1BUF9KSVQpCisKKyNpZiBDUFUoQVJNNjQpICYmIFVTRShFWEVDVVRFX09OTFlf
SklUX1dSSVRFX0ZVTkNUSU9OKQorc3RhdGljIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBqaXRXcml0ZVRodW5rR2VuZXJhdG9yKHZvaWQqIHdyaXRh
YmxlQWRkciwgdm9pZCogc3R1YkJhc2UsIHNpemVfdCBzdHViU2l6ZSkKK3sKKyAgICB1c2luZyBu
YW1lc3BhY2UgQVJNNjRSZWdpc3RlcnM7CisgICAgdXNpbmcgVHJ1c3RlZEltbTMyID0gTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMjsKKworICAgIE1hY3JvQXNzZW1ibGVyIGppdDsKKworICAg
IGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CisgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIod3JpdGFibGVBZGRyKSwgeDcpOworICAgIGppdC5hZGRQdHIoeDcsIHgwKTsK
KworICAgIGppdC5tb3ZlKHgwLCB4Myk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc21hbGxD
b3B5ID0gaml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgeDIsIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tNjQoNjQpKTsKKworICAgIGppdC5hZGQ2NChUcnVzdGVkSW1tMzIoMzIp
LCB4Myk7CisgICAgaml0LmFuZDY0KFRydXN0ZWRJbW0zMigtMzIpLCB4Myk7CisgICAgaml0Lmxv
YWRQYWlyNjQoeDEsIHgxMiwgeDEzKTsKKyAgICBqaXQubG9hZFBhaXI2NCh4MSwgVHJ1c3RlZElt
bTMyKDE2KSwgeDE0LCB4MTUpOworICAgIGppdC5zdWI2NCh4MywgeDAsIHg1KTsKKyAgICBqaXQu
YWRkUHRyKHg1LCB4MSk7CisKKyAgICBqaXQubG9hZFBhaXI2NCh4MSwgeDgsIHg5KTsKKyAgICBq
aXQubG9hZFBhaXI2NCh4MSwgVHJ1c3RlZEltbTMyKDE2KSwgeDEwLCB4MTEpOworICAgIGppdC5h
ZGQ2NChUcnVzdGVkSW1tMzIoMzIpLCB4MSk7CisgICAgaml0LnN1YjY0KHg1LCB4Mik7CisgICAg
aml0LnN0b3JlUGFpcjY0KHgxMiwgeDEzLCB4MCk7CisgICAgaml0LnN0b3JlUGFpcjY0KHgxNCwg
eDE1LCB4MCwgVHJ1c3RlZEltbTMyKDE2KSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgY2xl
YW51cCA9IGppdC5icmFuY2hTdWI2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsLCBUcnVz
dGVkSW1tMzIoNjQpLCB4Mik7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgY29weUxvb3Ag
PSBqaXQubGFiZWwoKTsKKyAgICBqaXQuc3RvcmVQYWlyNjRXaXRoTm9uVGVtcG9yYWxBY2Nlc3Mo
eDgsIHg5LCB4Myk7CisgICAgaml0LnN0b3JlUGFpcjY0V2l0aE5vblRlbXBvcmFsQWNjZXNzKHgx
MCwgeDExLCB4MywgVHJ1c3RlZEltbTMyKDE2KSk7CisgICAgaml0LmFkZDY0KFRydXN0ZWRJbW0z
MigzMiksIHgzKTsKKyAgICBqaXQubG9hZFBhaXI2NFdpdGhOb25UZW1wb3JhbEFjY2Vzcyh4MSwg
eDgsIHg5KTsKKyAgICBqaXQubG9hZFBhaXI2NFdpdGhOb25UZW1wb3JhbEFjY2Vzcyh4MSwgVHJ1
c3RlZEltbTMyKDE2KSwgeDEwLCB4MTEpOworICAgIGppdC5hZGQ2NChUcnVzdGVkSW1tMzIoMzIp
LCB4MSk7CisgICAgaml0LmJyYW5jaFN1YjY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgVHJ1c3Rl
ZEltbTMyKDMyKSwgeDIpLmxpbmtUbyhjb3B5TG9vcCwgJmppdCk7CisKKyAgICBjbGVhbnVwLmxp
bmsoJmppdCk7CisgICAgaml0LmFkZDY0KHgyLCB4MSk7CisgICAgaml0LmxvYWRQYWlyNjQoeDEs
IHgxMiwgeDEzKTsKKyAgICBqaXQubG9hZFBhaXI2NCh4MSwgVHJ1c3RlZEltbTMyKDE2KSwgeDE0
LCB4MTUpOworICAgIGppdC5zdG9yZVBhaXI2NCh4OCwgeDksIHgzKTsKKyAgICBqaXQuc3RvcmVQ
YWlyNjQoeDEwLCB4MTEsIHgzLCBUcnVzdGVkSW1tMzIoMTYpKTsKKyAgICBqaXQuYWRkUHRyKHgy
LCB4Myk7CisgICAgaml0LnN0b3JlUGFpcjY0KHgxMiwgeDEzLCB4MywgVHJ1c3RlZEltbTMyKDMy
KSk7CisgICAgaml0LnN0b3JlUGFpcjY0KHgxNCwgeDE1LCB4MywgVHJ1c3RlZEltbTMyKDQ4KSk7
CisgICAgaml0LnJldCgpOworCisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvY2FsMCA9IGpp
dC5sYWJlbCgpOworICAgIGppdC5sb2FkNjQoeDEsIFBvc3RJbmRleCg4KSwgeDYpOworICAgIGpp
dC5zdG9yZTY0KHg2LCB4MywgUG9zdEluZGV4KDgpKTsKKyAgICBzbWFsbENvcHkubGluaygmaml0
KTsKKyAgICBqaXQuYnJhbmNoU3ViNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgVHJ1
c3RlZEltbTMyKDgpLCB4MikubGlua1RvKGxvY2FsMCwgJmppdCk7CisgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgbG9jYWwyID0gaml0LmJyYW5jaEFkZDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwg
VHJ1c3RlZEltbTMyKDgpLCB4Mik7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvY2FsMSA9
IGppdC5sYWJlbCgpOworICAgIGppdC5sb2FkOCh4MSwgUG9zdEluZGV4KDEpLCB4Nik7CisgICAg
aml0LnN0b3JlOCh4NiwgeDMsIFBvc3RJbmRleCgxKSk7CisgICAgaml0LmJyYW5jaFN1YjY0KE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgVHJ1c3RlZEltbTMyKDEpLCB4MikubGlua1RvKGxvY2Fs
MSwgJmppdCk7CisgICAgbG9jYWwyLmxpbmsoJmppdCk7CisgICAgaml0LnJldCgpOworCisgICAg
YXV0byBzdHViQmFzZUNvZGVQdHIgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8TGlua0J1ZmZlclB0
clRhZz4odGFnQ29kZVB0cjxMaW5rQnVmZmVyUHRyVGFnPihzdHViQmFzZSkpOworICAgIExpbmtC
dWZmZXIgbGlua0J1ZmZlcihqaXQsIHN0dWJCYXNlQ29kZVB0ciwgc3R1YlNpemUpOworICAgIC8v
IFdlIGRvbid0IHVzZSBGSU5BTElaRV9DT0RFKCkgZm9yIHR3byByZWFzb25zLgorICAgIC8vIFRo
ZSBmaXJzdCBpcyB0aGF0IHdlIGRvbid0IHdhbnQgdGhlIHdyaXRlYWJsZSBhZGRyZXNzLCBhcyBk
aXNhc3NlbWJsZWQgaW5zdHJ1Y3Rpb25zLAorICAgIC8vIHRvIGFwcGVhciBpbiB0aGUgY29uc29s
ZSBvciBhbnl3aGVyZSBpbiBtZW1vcnksIHZpYSB0aGUgUHJpbnRTdHJlYW0gYnVmZmVyLgorICAg
IC8vIFRoZSBzZWNvbmQgaXMgd2UgY2FuJ3QgZ3VhcmFudGVlIHRoYXQgdGhlIGNvZGUgaXMgcmVh
ZGFibGUgd2hlbiB1c2luZyB0aGUKKyAgICAvLyBhc3luY0Rpc2Fzc2VtYmx5IG9wdGlvbiBhcyBv
dXIgY2FsbGVyIHdpbGwgc2V0IG91ciBwYWdlcyBleGVjdXRlIG9ubHkuCisgICAgcmV0dXJuIGxp
bmtCdWZmZXIuZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5PEpJVFRodW5rUHRyVGFnPigp
OworfQorI2Vsc2UgLy8gbm90IENQVShBUk02NCkgJiYgVVNFKEVYRUNVVEVfT05MWV9KSVRfV1JJ
VEVfRlVOQ1RJT04pCitzdGF0aWMgdm9pZCBnZW5lcmljV3JpdGVUb0pJVFJlZ2lvbihvZmZfdCBv
ZmZzZXQsIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSkKK3sKKyAgICBtZW1jcHko
KHZvaWQqKShnX2pzY0NvbmZpZy5zdGFydE9mRml4ZWRXcml0YWJsZU1lbW9yeVBvb2wgKyBvZmZz
ZXQpLCBkYXRhLCBkYXRhU2l6ZSk7Cit9CisKK3N0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEFMV0FZU19JTkxJTkUgaml0V3JpdGVUaHVua0dlbmVyYXRvcih2b2lk
KiBhZGRyZXNzLCB2b2lkKiwgc2l6ZV90KQoreworICAgIGdfanNjQ29uZmlnLnN0YXJ0T2ZGaXhl
ZFdyaXRhYmxlTWVtb3J5UG9vbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihhZGRyZXNz
KTsKKyAgICB2b2lkKiBmdW5jdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KCZnZW5lcmlj
V3JpdGVUb0pJVFJlZ2lvbik7CisjaWYgQ1BVKEFSTV9USFVNQjIpCisgICAgLy8gSGFuZGxlIHRo
dW1iIG9mZnNldAorICAgIHVpbnRwdHJfdCBmdW5jdGlvbkFzSW50ID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3Q+KGZ1bmN0aW9uKTsKKyAgICBmdW5jdGlvbkFzSW50IC09IDE7CisgICAgZnVu
Y3Rpb24gPSByZWludGVycHJldF9jYXN0PHZvaWQqPihmdW5jdGlvbkFzSW50KTsKKyNlbmRpZgor
ICAgIGF1dG8gY29kZVB0ciA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4o
dGFnQ0Z1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPihmdW5jdGlvbikpOworICAgIHJldHVybiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENv
ZGVSZWYoY29kZVB0cik7Cit9CisjZW5kaWYgLy8gQ1BVKEFSTTY0KSAmJiBVU0UoRVhFQ1VURV9P
TkxZX0pJVF9XUklURV9GVU5DVElPTikKIAotICAgICAgICBzaXplX3QgcmVzZXJ2YXRpb25TaXpl
OwotICAgICAgICBpZiAoT3B0aW9uczo6aml0TWVtb3J5UmVzZXJ2YXRpb25TaXplKCkpCi0gICAg
ICAgICAgICByZXNlcnZhdGlvblNpemUgPSBPcHRpb25zOjpqaXRNZW1vcnlSZXNlcnZhdGlvblNp
emUoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzZXJ2YXRpb25TaXplID0gZml4ZWRF
eGVjdXRhYmxlTWVtb3J5UG9vbFNpemU7Ci0gICAgICAgIHJlc2VydmF0aW9uU2l6ZSA9IHN0ZDo6
bWF4KHJvdW5kVXBUb011bHRpcGxlT2YocGFnZVNpemUoKSwgcmVzZXJ2YXRpb25TaXplKSwgcGFn
ZVNpemUoKSAqIDIpOworc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBpbml0aWFsaXplU2VwYXJh
dGVkV1hIZWFwcyh2b2lkKiBzdHViQmFzZSwgc2l6ZV90IHN0dWJTaXplLCB2b2lkKiBqaXRCYXNl
LCBzaXplX3Qgaml0U2l6ZSkKK3sKKyAgICBtYWNoX3ZtX2FkZHJlc3NfdCB3cml0YWJsZUFkZHIg
PSAwOwogCi0gICAgICAgIGF1dG8gdHJ5Q3JlYXRlUGFnZVJlc2VydmF0aW9uID0gW10gKHNpemVf
dCByZXNlcnZhdGlvblNpemUpIHsKKyAgICAvLyBDcmVhdGUgYSBzZWNvbmQgbWFwcGluZyBvZiB0
aGUgSklUIHJlZ2lvbiBhdCBhIHJhbmRvbSBhZGRyZXNzLgorICAgIHZtX3Byb3RfdCBjdXIsIG1h
eDsKKyAgICBpbnQgcmVtYXBGbGFncyA9IFZNX0ZMQUdTX0FOWVdIRVJFOworI2lmIGRlZmluZWQo
Vk1fRkxBR1NfUkFORE9NX0FERFIpCisgICAgcmVtYXBGbGFncyB8PSBWTV9GTEFHU19SQU5ET01f
QUREUjsKKyNlbmRpZgorICAgIGtlcm5fcmV0dXJuX3QgcmV0ID0gbWFjaF92bV9yZW1hcChtYWNo
X3Rhc2tfc2VsZigpLCAmd3JpdGFibGVBZGRyLCBqaXRTaXplLCAwLAorICAgICAgICByZW1hcEZs
YWdzLAorICAgICAgICBtYWNoX3Rhc2tfc2VsZigpLCAobWFjaF92bV9hZGRyZXNzX3Qpaml0QmFz
ZSwgRkFMU0UsCisgICAgICAgICZjdXIsICZtYXgsIFZNX0lOSEVSSVRfREVGQVVMVCk7CisKKyAg
ICBib29sIHJlbWFwU3VjY2VlZGVkID0gKHJldCA9PSBLRVJOX1NVQ0NFU1MpOworICAgIGlmICgh
cmVtYXBTdWNjZWVkZWQpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEFzc2VtYmxlIGEgdGh1
bmsgdGhhdCB3aWxsIHNlcnZlIGFzIHRoZSBtZWFucyBmb3Igd3JpdGluZyBpbnRvIHRoZSBKSVQg
cmVnaW9uLgorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gd3JpdGVU
aHVuayA9IGppdFdyaXRlVGh1bmtHZW5lcmF0b3IocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4od3Jp
dGFibGVBZGRyKSwgc3R1YkJhc2UsIHN0dWJTaXplKTsKKworICAgIGludCByZXN1bHQgPSAwOwor
CisjaWYgVVNFKEVYRUNVVEVfT05MWV9KSVRfV1JJVEVfRlVOQ1RJT04pCisgICAgLy8gUHJldmVu
dCByZWFkaW5nIHRoZSB3cml0ZSB0aHVuayBjb2RlLgorICAgIHJlc3VsdCA9IHZtX3Byb3RlY3Qo
bWFjaF90YXNrX3NlbGYoKSwgcmVpbnRlcnByZXRfY2FzdDx2bV9hZGRyZXNzX3Q+KHN0dWJCYXNl
KSwgc3R1YlNpemUsIHRydWUsIFZNX1BST1RfRVhFQ1VURSk7CisgICAgUkVMRUFTRV9BU1NFUlQo
IXJlc3VsdCk7CisjZW5kaWYKKworICAgIC8vIFByZXZlbnQgd3JpdGluZyBpbnRvIHRoZSBleGVj
dXRhYmxlIEpJVCBtYXBwaW5nLgorICAgIHJlc3VsdCA9IHZtX3Byb3RlY3QobWFjaF90YXNrX3Nl
bGYoKSwgcmVpbnRlcnByZXRfY2FzdDx2bV9hZGRyZXNzX3Q+KGppdEJhc2UpLCBqaXRTaXplLCB0
cnVlLCBWTV9QUk9UX1JFQUQgfCBWTV9QUk9UX0VYRUNVVEUpOworICAgIFJFTEVBU0VfQVNTRVJU
KCFyZXN1bHQpOworCisgICAgLy8gUHJldmVudCBleGVjdXRpb24gaW4gdGhlIHdyaXRhYmxlIEpJ
VCBtYXBwaW5nLgorICAgIHJlc3VsdCA9IHZtX3Byb3RlY3QobWFjaF90YXNrX3NlbGYoKSwgc3Rh
dGljX2Nhc3Q8dm1fYWRkcmVzc190Pih3cml0YWJsZUFkZHIpLCBqaXRTaXplLCB0cnVlLCBWTV9Q
Uk9UX1JFQUQgfCBWTV9QUk9UX1dSSVRFKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0KTsK
KworICAgIC8vIFplcm8gb3V0IHdyaXRhYmxlQWRkciB0byBhdm9pZCBsZWFraW5nIHRoZSBhZGRy
ZXNzIG9mIHRoZSB3cml0YWJsZSBtYXBwaW5nLgorICAgIG1lbXNldF9zKCZ3cml0YWJsZUFkZHIs
IHNpemVvZih3cml0YWJsZUFkZHIpLCAwLCBzaXplb2Yod3JpdGFibGVBZGRyKSk7CisKKyNpZiBF
TkFCTEUoU0VQQVJBVEVEX1dYX0hFQVApCisgICAgZ19qc2NDb25maWcuaml0V3JpdGVTZXBhcmF0
ZUhlYXBzID0gcmVpbnRlcnByZXRfY2FzdDxKSVRXcml0ZVNlcGFyYXRlSGVhcHNGdW5jdGlvbj4o
d3JpdGVUaHVuay5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisjZW5kaWYKK30KKworI2Vs
c2UgLy8gT1MoREFSV0lOKSAmJiBIQVZFKFJFTUFQX0pJVCkKK3N0YXRpYyBBTFdBWVNfSU5MSU5F
IHZvaWQgaW5pdGlhbGl6ZVNlcGFyYXRlZFdYSGVhcHModm9pZCosIHNpemVfdCwgdm9pZCosIHNp
emVfdCkKK3sKK30KKyNlbmRpZgorCitzdHJ1Y3QgSklUUmVzZXJ2YXRpb24geworICAgIFBhZ2VS
ZXNlcnZhdGlvbiBwYWdlUmVzZXJ2YXRpb247CisgICAgdm9pZCogYmFzZSB7IG51bGxwdHIgfTsK
KyAgICBzaXplX3Qgc2l6ZSB7IDAgfTsKK307CisKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIEpJVFJl
c2VydmF0aW9uIGluaXRpYWxpemVKSVRQYWdlUmVzZXJ2YXRpb24oKQoreworICAgIEpJVFJlc2Vy
dmF0aW9uIHJlc2VydmF0aW9uOworICAgIGlmICghaXNKSVRFbmFibGVkKCkpCisgICAgICAgIHJl
dHVybiByZXNlcnZhdGlvbjsKKworICAgIGlmIChPcHRpb25zOjpqaXRNZW1vcnlSZXNlcnZhdGlv
blNpemUoKSkKKyAgICAgICAgcmVzZXJ2YXRpb24uc2l6ZSA9IE9wdGlvbnM6OmppdE1lbW9yeVJl
c2VydmF0aW9uU2l6ZSgpOworICAgIGVsc2UKKyAgICAgICAgcmVzZXJ2YXRpb24uc2l6ZSA9IGZp
eGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplOworICAgIHJlc2VydmF0aW9uLnNpemUgPSBzdGQ6
Om1heChyb3VuZFVwVG9NdWx0aXBsZU9mKHBhZ2VTaXplKCksIHJlc2VydmF0aW9uLnNpemUpLCBw
YWdlU2l6ZSgpICogMik7CisKKyAgICBhdXRvIHRyeUNyZWF0ZVBhZ2VSZXNlcnZhdGlvbiA9IFtd
IChzaXplX3QgcmVzZXJ2YXRpb25TaXplKSB7CiAjaWYgT1MoTElOVVgpCi0gICAgICAgICAgICAv
LyBJZiB3ZSB1c2UgdW5jb21taXR0ZWQgcmVzZXJ2YXRpb24sIG1tYXAgb3BlcmF0aW9uIGlzIHJl
Y29yZGVkIHdpdGggc21hbGwgcGFnZSBzaXplIGluIHBlcmYgY29tbWFuZCdzIG91dHB1dC4KLSAg
ICAgICAgICAgIC8vIFRoaXMgbWFrZXMgdGhlIGZvbGxvd2luZyBKSVQgY29kZSBsb2dnaW5nIGJy
b2tlbiBhbmQgc29tZSBvZiBKSVQgY29kZSBpcyBub3QgcmVjb3JkZWQgY29ycmVjdGx5LgotICAg
ICAgICAgICAgLy8gVG8gYXZvaWQgdGhpcyBwcm9ibGVtLCB3ZSB1c2UgY29tbWl0dGVkIHJlc2Vy
dmF0aW9uIGlmIHdlIG5lZWQgcGVyZiBKSVREdW1wIGxvZ2dpbmcuCi0gICAgICAgICAgICBpZiAo
T3B0aW9uczo6bG9nSklUQ29kZUZvclBlcmYoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUGFn
ZVJlc2VydmF0aW9uOjpyZXNlcnZlQW5kQ29tbWl0V2l0aEd1YXJkUGFnZXMocmVzZXJ2YXRpb25T
aXplLCBPU0FsbG9jYXRvcjo6SlNKSVRDb2RlUGFnZXMsIEVYRUNVVEFCTEVfUE9PTF9XUklUQUJM
RSwgdHJ1ZSk7CisgICAgICAgIC8vIElmIHdlIHVzZSB1bmNvbW1pdHRlZCByZXNlcnZhdGlvbiwg
bW1hcCBvcGVyYXRpb24gaXMgcmVjb3JkZWQgd2l0aCBzbWFsbCBwYWdlIHNpemUgaW4gcGVyZiBj
b21tYW5kJ3Mgb3V0cHV0LgorICAgICAgICAvLyBUaGlzIG1ha2VzIHRoZSBmb2xsb3dpbmcgSklU
IGNvZGUgbG9nZ2luZyBicm9rZW4gYW5kIHNvbWUgb2YgSklUIGNvZGUgaXMgbm90IHJlY29yZGVk
IGNvcnJlY3RseS4KKyAgICAgICAgLy8gVG8gYXZvaWQgdGhpcyBwcm9ibGVtLCB3ZSB1c2UgY29t
bWl0dGVkIHJlc2VydmF0aW9uIGlmIHdlIG5lZWQgcGVyZiBKSVREdW1wIGxvZ2dpbmcuCisgICAg
ICAgIGlmIChPcHRpb25zOjpsb2dKSVRDb2RlRm9yUGVyZigpKQorICAgICAgICAgICAgcmV0dXJu
IFBhZ2VSZXNlcnZhdGlvbjo6cmVzZXJ2ZUFuZENvbW1pdFdpdGhHdWFyZFBhZ2VzKHJlc2VydmF0
aW9uU2l6ZSwgT1NBbGxvY2F0b3I6OkpTSklUQ29kZVBhZ2VzLCBFWEVDVVRBQkxFX1BPT0xfV1JJ
VEFCTEUsIHRydWUpOwogI2VuZGlmCi0gICAgICAgICAgICByZXR1cm4gUGFnZVJlc2VydmF0aW9u
OjpyZXNlcnZlV2l0aEd1YXJkUGFnZXMocmVzZXJ2YXRpb25TaXplLCBPU0FsbG9jYXRvcjo6SlNK
SVRDb2RlUGFnZXMsIEVYRUNVVEFCTEVfUE9PTF9XUklUQUJMRSwgdHJ1ZSk7Ci0gICAgICAgIH07
CisgICAgICAgIHJldHVybiBQYWdlUmVzZXJ2YXRpb246OnJlc2VydmVXaXRoR3VhcmRQYWdlcyhy
ZXNlcnZhdGlvblNpemUsIE9TQWxsb2NhdG9yOjpKU0pJVENvZGVQYWdlcywgRVhFQ1VUQUJMRV9Q
T09MX1dSSVRBQkxFLCB0cnVlKTsKKyAgICB9OwogCi0gICAgICAgIG1fcmVzZXJ2YXRpb24gPSB0
cnlDcmVhdGVQYWdlUmVzZXJ2YXRpb24ocmVzZXJ2YXRpb25TaXplKTsKLSAgICAgICAgaWYgKG1f
cmVzZXJ2YXRpb24pIHsKLSAgICAgICAgICAgIEFTU0VSVChtX3Jlc2VydmF0aW9uLnNpemUoKSA9
PSByZXNlcnZhdGlvblNpemUpOwotICAgICAgICAgICAgdm9pZCogcmVzZXJ2YXRpb25CYXNlID0g
bV9yZXNlcnZhdGlvbi5iYXNlKCk7CisgICAgcmVzZXJ2YXRpb24ucGFnZVJlc2VydmF0aW9uID0g
dHJ5Q3JlYXRlUGFnZVJlc2VydmF0aW9uKHJlc2VydmF0aW9uLnNpemUpOworICAgIGlmIChyZXNl
cnZhdGlvbi5wYWdlUmVzZXJ2YXRpb24pIHsKKyAgICAgICAgQVNTRVJUKHJlc2VydmF0aW9uLnBh
Z2VSZXNlcnZhdGlvbi5zaXplKCkgPT0gcmVzZXJ2YXRpb24uc2l6ZSk7CisgICAgICAgIHJlc2Vy
dmF0aW9uLmJhc2UgPSByZXNlcnZhdGlvbi5wYWdlUmVzZXJ2YXRpb24uYmFzZSgpOwogCiAjaWYg
RU5BQkxFKEZBU1RfSklUX1BFUk1JU1NJT05TKSAmJiAhRU5BQkxFKFNFUEFSQVRFRF9XWF9IRUFQ
KQotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQob3NfdGhyZWFkX3NlbGZfcmVzdHJpY3Rfcnd4
X2lzX3N1cHBvcnRlZCgpKTsKLSAgICAgICAgICAgIG9zX3RocmVhZF9zZWxmX3Jlc3RyaWN0X3J3
eF90b19yeCgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChvc190aHJlYWRfc2VsZl9yZXN0cmlj
dF9yd3hfaXNfc3VwcG9ydGVkKCkpOworICAgICAgICBvc190aHJlYWRfc2VsZl9yZXN0cmljdF9y
d3hfdG9fcngoKTsKIAogI2Vsc2UgLy8gbm90IEVOQUJMRShGQVNUX0pJVF9QRVJNSVNTSU9OUykg
b3IgRU5BQkxFKFNFUEFSQVRFRF9XWF9IRUFQKQogI2lmIEVOQUJMRShGQVNUX0pJVF9QRVJNSVNT
SU9OUykKLSAgICAgICAgICAgIGlmIChvc190aHJlYWRfc2VsZl9yZXN0cmljdF9yd3hfaXNfc3Vw
cG9ydGVkKCkpIHsKLSAgICAgICAgICAgICAgICBnX2pzY0NvbmZpZy51c2VGYXN0UGVybWlzaW9u
c0pJVENvcHkgPSB0cnVlOwotICAgICAgICAgICAgICAgIG9zX3RocmVhZF9zZWxmX3Jlc3RyaWN0
X3J3eF90b19yeCgpOwotICAgICAgICAgICAgfSBlbHNlCisgICAgICAgIGlmIChvc190aHJlYWRf
c2VsZl9yZXN0cmljdF9yd3hfaXNfc3VwcG9ydGVkKCkpIHsKKyAgICAgICAgICAgIGdfanNjQ29u
ZmlnLnVzZUZhc3RQZXJtaXNpb25zSklUQ29weSA9IHRydWU7CisgICAgICAgICAgICBvc190aHJl
YWRfc2VsZl9yZXN0cmljdF9yd3hfdG9fcngoKTsKKyAgICAgICAgfSBlbHNlCiAjZW5kaWYKLSAg
ICAgICAgICAgIGlmIChPcHRpb25zOjp1c2VTZXBhcmF0ZWRXWEhlYXAoKSkgewotICAgICAgICAg
ICAgICAgIC8vIEZpcnN0IHBhZ2Ugb2Ygb3VyIEpJVCBhbGxvY2F0aW9uIGlzIHJlc2VydmVkLgot
ICAgICAgICAgICAgICAgIEFTU0VSVChyZXNlcnZhdGlvblNpemUgPj0gcGFnZVNpemUoKSAqIDIp
OwotICAgICAgICAgICAgICAgIHJlc2VydmF0aW9uQmFzZSA9ICh2b2lkKikoKHVpbnRwdHJfdCly
ZXNlcnZhdGlvbkJhc2UgKyBwYWdlU2l6ZSgpKTsKLSAgICAgICAgICAgICAgICByZXNlcnZhdGlv
blNpemUgLT0gcGFnZVNpemUoKTsKLSAgICAgICAgICAgICAgICBpbml0aWFsaXplU2VwYXJhdGVk
V1hIZWFwcyhtX3Jlc2VydmF0aW9uLmJhc2UoKSwgcGFnZVNpemUoKSwgcmVzZXJ2YXRpb25CYXNl
LCByZXNlcnZhdGlvblNpemUpOwotICAgICAgICAgICAgfQorICAgICAgICBpZiAoT3B0aW9uczo6
dXNlU2VwYXJhdGVkV1hIZWFwKCkpIHsKKyAgICAgICAgICAgIC8vIEZpcnN0IHBhZ2Ugb2Ygb3Vy
IEpJVCBhbGxvY2F0aW9uIGlzIHJlc2VydmVkLgorICAgICAgICAgICAgQVNTRVJUKHJlc2VydmF0
aW9uLnNpemUgPj0gcGFnZVNpemUoKSAqIDIpOworICAgICAgICAgICAgcmVzZXJ2YXRpb24uYmFz
ZSA9ICh2b2lkKikoKHVpbnRwdHJfdCkocmVzZXJ2YXRpb24uYmFzZSkgKyBwYWdlU2l6ZSgpKTsK
KyAgICAgICAgICAgIHJlc2VydmF0aW9uLnNpemUgLT0gcGFnZVNpemUoKTsKKyAgICAgICAgICAg
IGluaXRpYWxpemVTZXBhcmF0ZWRXWEhlYXBzKHJlc2VydmF0aW9uLnBhZ2VSZXNlcnZhdGlvbi5i
YXNlKCksIHBhZ2VTaXplKCksIHJlc2VydmF0aW9uLmJhc2UsIHJlc2VydmF0aW9uLnNpemUpOwor
ICAgICAgICB9CiAjZW5kaWYgLy8gbm90IEVOQUJMRShGQVNUX0pJVF9QRVJNSVNTSU9OUykgb3Ig
RU5BQkxFKFNFUEFSQVRFRF9XWF9IRUFQKQorICAgICAgICB2b2lkKiByZXNlcnZhdGlvbkVuZCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHJlc2VydmF0aW9uLmJhc2UpICsgcmVzZXJ2YXRp
b24uc2l6ZTsKIAotICAgICAgICAgICAgYWRkRnJlc2hGcmVlU3BhY2UocmVzZXJ2YXRpb25CYXNl
LCByZXNlcnZhdGlvblNpemUpOwotCi0gICAgICAgICAgICBBU1NFUlQoYnl0ZXNSZXNlcnZlZCgp
ID09IHJlc2VydmF0aW9uU2l6ZSk7IC8vIFNpbmNlIG91ciBleGVjdXRhYmxlIG1lbW9yeSBpcyBm
aXhlZC1zaXplZCwgYnl0ZXNSZXNlcnZlZCBpcyBuZXZlciBjaGFuZ2VkIGFmdGVyIGluaXRpYWxp
emF0aW9uLgorICAgICAgICBnX2pzY0NvbmZpZy5zdGFydEV4ZWN1dGFibGVNZW1vcnkgPSB0YWdD
b2RlUHRyPEV4ZWN1dGFibGVNZW1vcnlQdHJUYWc+KHJlc2VydmF0aW9uLmJhc2UpOworICAgICAg
ICBnX2pzY0NvbmZpZy5lbmRFeGVjdXRhYmxlTWVtb3J5ID0gdGFnQ29kZVB0cjxFeGVjdXRhYmxl
TWVtb3J5UHRyVGFnPihyZXNlcnZhdGlvbkVuZCk7CisgICAgfQogCi0gICAgICAgICAgICB2b2lk
KiByZXNlcnZhdGlvbkVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHJlc2VydmF0aW9u
QmFzZSkgKyByZXNlcnZhdGlvblNpemU7CisgICAgcmV0dXJuIHJlc2VydmF0aW9uOworfQogCi0g
ICAgICAgICAgICBnX2pzY0NvbmZpZy5zdGFydEV4ZWN1dGFibGVNZW1vcnkgPSB0YWdDb2RlUHRy
PEV4ZWN1dGFibGVNZW1vcnlQdHJUYWc+KHJlc2VydmF0aW9uQmFzZSk7Ci0gICAgICAgICAgICBn
X2pzY0NvbmZpZy5lbmRFeGVjdXRhYmxlTWVtb3J5ID0gdGFnQ29kZVB0cjxFeGVjdXRhYmxlTWVt
b3J5UHRyVGFnPihyZXNlcnZhdGlvbkVuZCk7CitjbGFzcyBGaXhlZFZNUG9vbEV4ZWN1dGFibGVB
bGxvY2F0b3IgZmluYWwgOiBwdWJsaWMgTWV0YUFsbG9jYXRvciB7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9y
KCkKKyAgICAgICAgOiBNZXRhQWxsb2NhdG9yKGppdEFsbG9jYXRpb25HcmFudWxlKSAvLyByb3Vu
ZCB1cCBhbGwgYWxsb2NhdGlvbnMgdG8gMzIgYnl0ZXMKKyAgICB7CisgICAgICAgIEpJVFJlc2Vy
dmF0aW9uIHJlc2VydmF0aW9uID0gaW5pdGlhbGl6ZUpJVFBhZ2VSZXNlcnZhdGlvbigpOworICAg
ICAgICBtX3Jlc2VydmF0aW9uID0gV1RGTW92ZShyZXNlcnZhdGlvbi5wYWdlUmVzZXJ2YXRpb24p
OworICAgICAgICBpZiAobV9yZXNlcnZhdGlvbikgeworICAgICAgICAgICAgYWRkRnJlc2hGcmVl
U3BhY2UocmVzZXJ2YXRpb24uYmFzZSwgcmVzZXJ2YXRpb24uc2l6ZSk7CisgICAgICAgICAgICBB
U1NFUlQoYnl0ZXNSZXNlcnZlZCgpID09IHJlc2VydmF0aW9uLnNpemUpOyAvLyBTaW5jZSBvdXIg
ZXhlY3V0YWJsZSBtZW1vcnkgaXMgZml4ZWQtc2l6ZWQsIGJ5dGVzUmVzZXJ2ZWQgaXMgbmV2ZXIg
Y2hhbmdlZCBhZnRlciBpbml0aWFsaXphdGlvbi4KICAgICAgICAgfQogICAgIH0KIApAQCAtMjMy
LDE3OCArMzkyLDE1IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgbm90aWZ5TmVlZFBhZ2Uodm9p
ZCogcGFnZSwgc2l6ZV90IGNvdW50KSBvdmVycmlkZQogICAgIHsKLSNpZiBVU0UoTUFEVl9GUkVF
X0ZPUl9KSVRfTUVNT1JZKQotICAgICAgICBVTlVTRURfUEFSQU0ocGFnZSk7Ci0gICAgICAgIFVO
VVNFRF9QQVJBTShjb3VudCk7Ci0jZWxzZQogICAgICAgICBtX3Jlc2VydmF0aW9uLmNvbW1pdChw
YWdlLCBwYWdlU2l6ZSgpICogY291bnQpOwotI2VuZGlmCiAgICAgfQogCiAgICAgdm9pZCBub3Rp
ZnlQYWdlSXNGcmVlKHZvaWQqIHBhZ2UsIHNpemVfdCBjb3VudCkgb3ZlcnJpZGUKICAgICB7Ci0j
aWYgVVNFKE1BRFZfRlJFRV9GT1JfSklUX01FTU9SWSkKLSAgICAgICAgZm9yICg7OykgewotICAg
ICAgICAgICAgaW50IHJlc3VsdCA9IG1hZHZpc2UocGFnZSwgcGFnZVNpemUoKSAqIGNvdW50LCBN
QURWX0ZSRUUpOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSAtMSk7Ci0gICAgICAgICAgICBpZiAo
ZXJybm8gIT0gRUFHQUlOKSB7Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsgLy8gSW4gZGVidWcgbW9kZSwgdGhpcyBzaG91bGQgYmUgYSBoYXJkIGZhaWx1cmUu
Ci0gICAgICAgICAgICAgICAgYnJlYWs7IC8vIEluIHJlbGVhc2UgbW9kZSwgd2Ugc2hvdWxkIGp1
c3QgaWdub3JlIHRoZSBlcnJvciAtIG5vdCByZXR1cm5pbmcgbWVtb3J5IHRvIHRoZSBPUyBpcyBi
ZXR0ZXIgdGhhbiBjcmFzaGluZywgZXNwZWNpYWxseSBzaW5jZSB3ZSBfd2lsbF8gYmUgYWJsZSB0
byByZXVzZSB0aGUgbWVtb3J5IGludGVybmFsbHkgYW55d2F5LgotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0jZWxzZQogICAgICAgICBtX3Jlc2VydmF0aW9uLmRlY29tbWl0KHBhZ2UsIHBhZ2VT
aXplKCkgKiBjb3VudCk7Ci0jZW5kaWYKICAgICB9CiAKIHByaXZhdGU6Ci0jaWYgT1MoREFSV0lO
KSAmJiBIQVZFKFJFTUFQX0pJVCkKLSAgICB2b2lkIGluaXRpYWxpemVTZXBhcmF0ZWRXWEhlYXBz
KHZvaWQqIHN0dWJCYXNlLCBzaXplX3Qgc3R1YlNpemUsIHZvaWQqIGppdEJhc2UsIHNpemVfdCBq
aXRTaXplKQotICAgIHsKLSAgICAgICAgbWFjaF92bV9hZGRyZXNzX3Qgd3JpdGFibGVBZGRyID0g
MDsKLQotICAgICAgICAvLyBDcmVhdGUgYSBzZWNvbmQgbWFwcGluZyBvZiB0aGUgSklUIHJlZ2lv
biBhdCBhIHJhbmRvbSBhZGRyZXNzLgotICAgICAgICB2bV9wcm90X3QgY3VyLCBtYXg7Ci0gICAg
ICAgIGludCByZW1hcEZsYWdzID0gVk1fRkxBR1NfQU5ZV0hFUkU7Ci0jaWYgZGVmaW5lZChWTV9G
TEFHU19SQU5ET01fQUREUikKLSAgICAgICAgcmVtYXBGbGFncyB8PSBWTV9GTEFHU19SQU5ET01f
QUREUjsKLSNlbmRpZgotICAgICAgICBrZXJuX3JldHVybl90IHJldCA9IG1hY2hfdm1fcmVtYXAo
bWFjaF90YXNrX3NlbGYoKSwgJndyaXRhYmxlQWRkciwgaml0U2l6ZSwgMCwKLSAgICAgICAgICAg
IHJlbWFwRmxhZ3MsCi0gICAgICAgICAgICBtYWNoX3Rhc2tfc2VsZigpLCAobWFjaF92bV9hZGRy
ZXNzX3Qpaml0QmFzZSwgRkFMU0UsCi0gICAgICAgICAgICAmY3VyLCAmbWF4LCBWTV9JTkhFUklU
X0RFRkFVTFQpOwotCi0gICAgICAgIGJvb2wgcmVtYXBTdWNjZWVkZWQgPSAocmV0ID09IEtFUk5f
U1VDQ0VTUyk7Ci0gICAgICAgIGlmICghcmVtYXBTdWNjZWVkZWQpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgLy8gQXNzZW1ibGUgYSB0aHVuayB0aGF0IHdpbGwgc2VydmUgYXMgdGhl
IG1lYW5zIGZvciB3cml0aW5nIGludG8gdGhlIEpJVCByZWdpb24uCi0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gd3JpdGVUaHVuayA9IGppdFdyaXRlVGh1bmtH
ZW5lcmF0b3IocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4od3JpdGFibGVBZGRyKSwgc3R1YkJhc2Us
IHN0dWJTaXplKTsKLQotICAgICAgICBpbnQgcmVzdWx0ID0gMDsKLQotI2lmIFVTRShFWEVDVVRF
X09OTFlfSklUX1dSSVRFX0ZVTkNUSU9OKQotICAgICAgICAvLyBQcmV2ZW50IHJlYWRpbmcgdGhl
IHdyaXRlIHRodW5rIGNvZGUuCi0gICAgICAgIHJlc3VsdCA9IHZtX3Byb3RlY3QobWFjaF90YXNr
X3NlbGYoKSwgcmVpbnRlcnByZXRfY2FzdDx2bV9hZGRyZXNzX3Q+KHN0dWJCYXNlKSwgc3R1YlNp
emUsIHRydWUsIFZNX1BST1RfRVhFQ1VURSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZXN1
bHQpOwotI2VuZGlmCi0KLSAgICAgICAgLy8gUHJldmVudCB3cml0aW5nIGludG8gdGhlIGV4ZWN1
dGFibGUgSklUIG1hcHBpbmcuCi0gICAgICAgIHJlc3VsdCA9IHZtX3Byb3RlY3QobWFjaF90YXNr
X3NlbGYoKSwgcmVpbnRlcnByZXRfY2FzdDx2bV9hZGRyZXNzX3Q+KGppdEJhc2UpLCBqaXRTaXpl
LCB0cnVlLCBWTV9QUk9UX1JFQUQgfCBWTV9QUk9UX0VYRUNVVEUpOwotICAgICAgICBSRUxFQVNF
X0FTU0VSVCghcmVzdWx0KTsKLQotICAgICAgICAvLyBQcmV2ZW50IGV4ZWN1dGlvbiBpbiB0aGUg
d3JpdGFibGUgSklUIG1hcHBpbmcuCi0gICAgICAgIHJlc3VsdCA9IHZtX3Byb3RlY3QobWFjaF90
YXNrX3NlbGYoKSwgc3RhdGljX2Nhc3Q8dm1fYWRkcmVzc190Pih3cml0YWJsZUFkZHIpLCBqaXRT
aXplLCB0cnVlLCBWTV9QUk9UX1JFQUQgfCBWTV9QUk9UX1dSSVRFKTsKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIXJlc3VsdCk7Ci0KLSAgICAgICAgLy8gWmVybyBvdXQgd3JpdGFibGVBZGRyIHRv
IGF2b2lkIGxlYWtpbmcgdGhlIGFkZHJlc3Mgb2YgdGhlIHdyaXRhYmxlIG1hcHBpbmcuCi0gICAg
ICAgIG1lbXNldF9zKCZ3cml0YWJsZUFkZHIsIHNpemVvZih3cml0YWJsZUFkZHIpLCAwLCBzaXpl
b2Yod3JpdGFibGVBZGRyKSk7Ci0KLSNpZiBFTkFCTEUoU0VQQVJBVEVEX1dYX0hFQVApCi0gICAg
ICAgIGdfanNjQ29uZmlnLmppdFdyaXRlU2VwYXJhdGVIZWFwcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
SklUV3JpdGVTZXBhcmF0ZUhlYXBzRnVuY3Rpb24+KHdyaXRlVGh1bmsuY29kZSgpLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpOwotI2VuZGlmCi0gICAgfQotCi0jaWYgQ1BVKEFSTTY0KSAmJiBVU0UoRVhF
Q1VURV9PTkxZX0pJVF9XUklURV9GVU5DVElPTikKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IGppdFdyaXRlVGh1bmtHZW5lcmF0b3Iodm9pZCogd3JpdGFibGVBZGRy
LCB2b2lkKiBzdHViQmFzZSwgc2l6ZV90IHN0dWJTaXplKQotICAgIHsKLSAgICAgICAgdXNpbmcg
bmFtZXNwYWNlIEFSTTY0UmVnaXN0ZXJzOwotICAgICAgICB1c2luZyBUcnVzdGVkSW1tMzIgPSBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyOwotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyIGpp
dDsKLQotICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwotICAgICAgICBqaXQubW92ZShN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih3cml0YWJsZUFkZHIpLCB4Nyk7Ci0gICAgICAg
IGppdC5hZGRQdHIoeDcsIHgwKTsKLQotICAgICAgICBqaXQubW92ZSh4MCwgeDMpOwotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbWFsbENvcHkgPSBqaXQuYnJhbmNoNjQoTWFjcm9Bc3Nl
bWJsZXI6OkJlbG93LCB4MiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NCg2NCkpOwotCi0g
ICAgICAgIGppdC5hZGQ2NChUcnVzdGVkSW1tMzIoMzIpLCB4Myk7Ci0gICAgICAgIGppdC5hbmQ2
NChUcnVzdGVkSW1tMzIoLTMyKSwgeDMpOwotICAgICAgICBqaXQubG9hZFBhaXI2NCh4MSwgeDEy
LCB4MTMpOwotICAgICAgICBqaXQubG9hZFBhaXI2NCh4MSwgVHJ1c3RlZEltbTMyKDE2KSwgeDE0
LCB4MTUpOwotICAgICAgICBqaXQuc3ViNjQoeDMsIHgwLCB4NSk7Ci0gICAgICAgIGppdC5hZGRQ
dHIoeDUsIHgxKTsKLQotICAgICAgICBqaXQubG9hZFBhaXI2NCh4MSwgeDgsIHg5KTsKLSAgICAg
ICAgaml0LmxvYWRQYWlyNjQoeDEsIFRydXN0ZWRJbW0zMigxNiksIHgxMCwgeDExKTsKLSAgICAg
ICAgaml0LmFkZDY0KFRydXN0ZWRJbW0zMigzMiksIHgxKTsKLSAgICAgICAgaml0LnN1YjY0KHg1
LCB4Mik7Ci0gICAgICAgIGppdC5zdG9yZVBhaXI2NCh4MTIsIHgxMywgeDApOwotICAgICAgICBq
aXQuc3RvcmVQYWlyNjQoeDE0LCB4MTUsIHgwLCBUcnVzdGVkSW1tMzIoMTYpKTsKLSAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgY2xlYW51cCA9IGppdC5icmFuY2hTdWI2NChNYWNyb0Fzc2Vt
Ymxlcjo6QmVsb3dPckVxdWFsLCBUcnVzdGVkSW1tMzIoNjQpLCB4Mik7Ci0KLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkxhYmVsIGNvcHlMb29wID0gaml0LmxhYmVsKCk7Ci0gICAgICAgIGppdC5z
dG9yZVBhaXI2NFdpdGhOb25UZW1wb3JhbEFjY2Vzcyh4OCwgeDksIHgzKTsKLSAgICAgICAgaml0
LnN0b3JlUGFpcjY0V2l0aE5vblRlbXBvcmFsQWNjZXNzKHgxMCwgeDExLCB4MywgVHJ1c3RlZElt
bTMyKDE2KSk7Ci0gICAgICAgIGppdC5hZGQ2NChUcnVzdGVkSW1tMzIoMzIpLCB4Myk7Ci0gICAg
ICAgIGppdC5sb2FkUGFpcjY0V2l0aE5vblRlbXBvcmFsQWNjZXNzKHgxLCB4OCwgeDkpOwotICAg
ICAgICBqaXQubG9hZFBhaXI2NFdpdGhOb25UZW1wb3JhbEFjY2Vzcyh4MSwgVHJ1c3RlZEltbTMy
KDE2KSwgeDEwLCB4MTEpOwotICAgICAgICBqaXQuYWRkNjQoVHJ1c3RlZEltbTMyKDMyKSwgeDEp
OwotICAgICAgICBqaXQuYnJhbmNoU3ViNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBUcnVzdGVk
SW1tMzIoMzIpLCB4MikubGlua1RvKGNvcHlMb29wLCAmaml0KTsKLQotICAgICAgICBjbGVhbnVw
LmxpbmsoJmppdCk7Ci0gICAgICAgIGppdC5hZGQ2NCh4MiwgeDEpOwotICAgICAgICBqaXQubG9h
ZFBhaXI2NCh4MSwgeDEyLCB4MTMpOwotICAgICAgICBqaXQubG9hZFBhaXI2NCh4MSwgVHJ1c3Rl
ZEltbTMyKDE2KSwgeDE0LCB4MTUpOwotICAgICAgICBqaXQuc3RvcmVQYWlyNjQoeDgsIHg5LCB4
Myk7Ci0gICAgICAgIGppdC5zdG9yZVBhaXI2NCh4MTAsIHgxMSwgeDMsIFRydXN0ZWRJbW0zMigx
NikpOwotICAgICAgICBqaXQuYWRkUHRyKHgyLCB4Myk7Ci0gICAgICAgIGppdC5zdG9yZVBhaXI2
NCh4MTIsIHgxMywgeDMsIFRydXN0ZWRJbW0zMigzMikpOwotICAgICAgICBqaXQuc3RvcmVQYWly
NjQoeDE0LCB4MTUsIHgzLCBUcnVzdGVkSW1tMzIoNDgpKTsKLSAgICAgICAgaml0LnJldCgpOwot
Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb2NhbDAgPSBqaXQubGFiZWwoKTsKLSAg
ICAgICAgaml0LmxvYWQ2NCh4MSwgUG9zdEluZGV4KDgpLCB4Nik7Ci0gICAgICAgIGppdC5zdG9y
ZTY0KHg2LCB4MywgUG9zdEluZGV4KDgpKTsKLSAgICAgICAgc21hbGxDb3B5LmxpbmsoJmppdCk7
Ci0gICAgICAgIGppdC5icmFuY2hTdWI2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBU
cnVzdGVkSW1tMzIoOCksIHgyKS5saW5rVG8obG9jYWwwLCAmaml0KTsKLSAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgbG9jYWwyID0gaml0LmJyYW5jaEFkZDY0KE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCwgVHJ1c3RlZEltbTMyKDgpLCB4Mik7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJl
bCBsb2NhbDEgPSBqaXQubGFiZWwoKTsKLSAgICAgICAgaml0LmxvYWQ4KHgxLCBQb3N0SW5kZXgo
MSksIHg2KTsKLSAgICAgICAgaml0LnN0b3JlOCh4NiwgeDMsIFBvc3RJbmRleCgxKSk7Ci0gICAg
ICAgIGppdC5icmFuY2hTdWI2NChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIFRydXN0ZWRJbW0z
MigxKSwgeDIpLmxpbmtUbyhsb2NhbDEsICZqaXQpOwotICAgICAgICBsb2NhbDIubGluaygmaml0
KTsKLSAgICAgICAgaml0LnJldCgpOwotCi0gICAgICAgIGF1dG8gc3R1YkJhc2VDb2RlUHRyID0g
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPExpbmtCdWZmZXJQdHJUYWc+KHRhZ0NvZGVQdHI8TGlua0J1
ZmZlclB0clRhZz4oc3R1YkJhc2UpKTsKLSAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGpp
dCwgc3R1YkJhc2VDb2RlUHRyLCBzdHViU2l6ZSk7Ci0gICAgICAgIC8vIFdlIGRvbid0IHVzZSBG
SU5BTElaRV9DT0RFKCkgZm9yIHR3byByZWFzb25zLgotICAgICAgICAvLyBUaGUgZmlyc3QgaXMg
dGhhdCB3ZSBkb24ndCB3YW50IHRoZSB3cml0ZWFibGUgYWRkcmVzcywgYXMgZGlzYXNzZW1ibGVk
IGluc3RydWN0aW9ucywKLSAgICAgICAgLy8gdG8gYXBwZWFyIGluIHRoZSBjb25zb2xlIG9yIGFu
eXdoZXJlIGluIG1lbW9yeSwgdmlhIHRoZSBQcmludFN0cmVhbSBidWZmZXIuCi0gICAgICAgIC8v
IFRoZSBzZWNvbmQgaXMgd2UgY2FuJ3QgZ3VhcmFudGVlIHRoYXQgdGhlIGNvZGUgaXMgcmVhZGFi
bGUgd2hlbiB1c2luZyB0aGUKLSAgICAgICAgLy8gYXN5bmNEaXNhc3NlbWJseSBvcHRpb24gYXMg
b3VyIGNhbGxlciB3aWxsIHNldCBvdXIgcGFnZXMgZXhlY3V0ZSBvbmx5LgotICAgICAgICByZXR1
cm4gbGlua0J1ZmZlci5maW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHk8SklUVGh1bmtQdHJU
YWc+KCk7Ci0gICAgfQotI2Vsc2UgLy8gbm90IENQVShBUk02NCkgJiYgVVNFKEVYRUNVVEVfT05M
WV9KSVRfV1JJVEVfRlVOQ1RJT04pCi0gICAgc3RhdGljIHZvaWQgZ2VuZXJpY1dyaXRlVG9KSVRS
ZWdpb24ob2ZmX3Qgb2Zmc2V0LCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QgZGF0YVNpemUpCi0g
ICAgewotICAgICAgICBtZW1jcHkoKHZvaWQqKShnX2pzY0NvbmZpZy5zdGFydE9mRml4ZWRXcml0
YWJsZU1lbW9yeVBvb2wgKyBvZmZzZXQpLCBkYXRhLCBkYXRhU2l6ZSk7Ci0gICAgfQotCi0gICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBqaXRXcml0ZVRodW5rR2VuZXJh
dG9yKHZvaWQqIGFkZHJlc3MsIHZvaWQqLCBzaXplX3QpCi0gICAgewotICAgICAgICBnX2pzY0Nv
bmZpZy5zdGFydE9mRml4ZWRXcml0YWJsZU1lbW9yeVBvb2wgPSByZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdD4oYWRkcmVzcyk7Ci0gICAgICAgIHZvaWQqIGZ1bmN0aW9uID0gcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oJmdlbmVyaWNXcml0ZVRvSklUUmVnaW9uKTsKLSNpZiBDUFUoQVJNX1RIVU1C
MikKLSAgICAgICAgLy8gSGFuZGxlIHRodW1iIG9mZnNldAotICAgICAgICB1aW50cHRyX3QgZnVu
Y3Rpb25Bc0ludCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihmdW5jdGlvbik7Ci0gICAg
ICAgIGZ1bmN0aW9uQXNJbnQgLT0gMTsKLSAgICAgICAgZnVuY3Rpb24gPSByZWludGVycHJldF9j
YXN0PHZvaWQqPihmdW5jdGlvbkFzSW50KTsKLSNlbmRpZgotICAgICAgICBhdXRvIGNvZGVQdHIg
PSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+KHRhZ0NGdW5jdGlvblB0cjxK
SVRUaHVua1B0clRhZz4oZnVuY3Rpb24pKTsKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihjb2RlUHRy
KTsKLSAgICB9Ci0jZW5kaWYgLy8gQ1BVKEFSTTY0KSAmJiBVU0UoRVhFQ1VURV9PTkxZX0pJVF9X
UklURV9GVU5DVElPTikKLQotI2Vsc2UgLy8gT1MoREFSV0lOKSAmJiBIQVZFKFJFTUFQX0pJVCkK
LSAgICB2b2lkIGluaXRpYWxpemVTZXBhcmF0ZWRXWEhlYXBzKHZvaWQqLCBzaXplX3QsIHZvaWQq
LCBzaXplX3QpCi0gICAgewotICAgIH0KLSNlbmRpZgogCiBwcml2YXRlOgogICAgIFBhZ2VSZXNl
cnZhdGlvbiBtX3Jlc2VydmF0aW9uOwpAQCAtNDI3LDcgKzQyNCw3IEBAIHZvaWQgRXhlY3V0YWJs
ZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZVVuZGUKIAogYm9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjpp
c1ZhbGlkKCkgY29uc3QKIHsKLSAgICBhdXRvKiBhbGxvY2F0b3IgPSBnX2pzY0NvbmZpZy5maXhl
ZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I7CisgICAgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxs
b2NhdG9yKiBhbGxvY2F0b3IgPSBnX2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxv
Y2F0b3I7CiAgICAgaWYgKCFhbGxvY2F0b3IpCiAgICAgICAgIHJldHVybiBCYXNlOjppc1ZhbGlk
KCk7CiAgICAgcmV0dXJuICEhYWxsb2NhdG9yLT5ieXRlc1Jlc2VydmVkKCk7CkBAIC00MzUsNyAr
NDMyLDcgQEAgYm9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppc1ZhbGlkKCkgY29ucwogCiBib29s
IEV4ZWN1dGFibGVBbGxvY2F0b3I6OnVuZGVyTWVtb3J5UHJlc3N1cmUoKQogewotICAgIGF1dG8q
IGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsK
KyAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNjQ29u
ZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKICAgICBpZiAoIWFsbG9jYXRvcikK
ICAgICAgICAgcmV0dXJuIEJhc2U6OnVuZGVyTWVtb3J5UHJlc3N1cmUoKTsKICAgICByZXR1cm4g
YWxsb2NhdG9yLT5ieXRlc0FsbG9jYXRlZCgpID4gYWxsb2NhdG9yLT5ieXRlc1Jlc2VydmVkKCkg
LyAyOwpAQCAtNDQzLDcgKzQ0MCw3IEBAIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6dW5kZXJN
ZW1vcnlQcmUKIAogZG91YmxlIEV4ZWN1dGFibGVBbGxvY2F0b3I6Om1lbW9yeVByZXNzdXJlTXVs
dGlwbGllcihzaXplX3QgYWRkZWRNZW1vcnlVc2FnZSkKIHsKLSAgICBhdXRvKiBhbGxvY2F0b3Ig
PSBnX2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I7CisgICAgRml4ZWRW
TVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBnX2pzY0NvbmZpZy5maXhlZFZN
UG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I7CiAgICAgaWYgKCFhbGxvY2F0b3IpCiAgICAgICAgIHJl
dHVybiBCYXNlOjptZW1vcnlQcmVzc3VyZU11bHRpcGxpZXIoYWRkZWRNZW1vcnlVc2FnZSk7CiAg
ICAgQVNTRVJUKGFsbG9jYXRvci0+Ynl0ZXNBbGxvY2F0ZWQoKSA8PSBhbGxvY2F0b3ItPmJ5dGVz
UmVzZXJ2ZWQoKSk7CkBAIC00NjMsNyArNDYwLDcgQEAgZG91YmxlIEV4ZWN1dGFibGVBbGxvY2F0
b3I6Om1lbW9yeVByZXNzdQogCiBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gRXhlY3V0
YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJ
RCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewotICAgIGF1dG8qIGFsbG9jYXRvciA9
IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKKyAgICBGaXhlZFZN
UG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Q
b29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKICAgICBpZiAoIWFsbG9jYXRvcikKICAgICAgICAgcmV0
dXJuIEJhc2U6OmFsbG9jYXRlKHNpemVJbkJ5dGVzLCBvd25lclVJRCwgZWZmb3J0KTsKICAgICBp
ZiAoT3B0aW9uczo6bG9nRXhlY3V0YWJsZUFsbG9jYXRpb24oKSkgewpAQCAtNTEyLDcgKzUwOSw3
IEBAIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBFeGVjdXRhYmwKIAogYm9vbCBFeGVj
dXRhYmxlQWxsb2NhdG9yOjppc1ZhbGlkRXhlY3V0YWJsZU1lbW9yeShjb25zdCBBYnN0cmFjdExv
Y2tlciYgbG9ja2VyLCB2b2lkKiBhZGRyZXNzKQogewotICAgIGF1dG8qIGFsbG9jYXRvciA9IGdf
anNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKKyAgICBGaXhlZFZNUG9v
bEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29s
RXhlY3V0YWJsZUFsbG9jYXRvcjsKICAgICBpZiAoIWFsbG9jYXRvcikKICAgICAgICAgcmV0dXJu
IEJhc2U6OmlzVmFsaWRFeGVjdXRhYmxlTWVtb3J5KGxvY2tlciwgYWRkcmVzcyk7CiAgICAgcmV0
dXJuIGFsbG9jYXRvci0+aXNJbkFsbG9jYXRlZE1lbW9yeShsb2NrZXIsIGFkZHJlc3MpOwpAQCAt
NTIwLDcgKzUxNyw3IEBAIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aXNWYWxpZEV4ZWN1dGEK
IAogTG9jayYgRXhlY3V0YWJsZUFsbG9jYXRvcjo6Z2V0TG9jaygpIGNvbnN0CiB7Ci0gICAgYXV0
byogYWxsb2NhdG9yID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9y
OworICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogYWxsb2NhdG9yID0gZ19qc2ND
b25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOwogICAgIGlmICghYWxsb2NhdG9y
KQogICAgICAgICByZXR1cm4gQmFzZTo6Z2V0TG9jaygpOwogICAgIHJldHVybiBhbGxvY2F0b3It
PmdldExvY2soKTsKQEAgLTUyOCw3ICs1MjUsNyBAQCBMb2NrJiBFeGVjdXRhYmxlQWxsb2NhdG9y
OjpnZXRMb2NrKCkgY29uCiAKIHNpemVfdCBFeGVjdXRhYmxlQWxsb2NhdG9yOjpjb21taXR0ZWRC
eXRlQ291bnQoKQogewotICAgIGF1dG8qIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Q
b29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKKyAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0
b3IqIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRv
cjsKICAgICBpZiAoIWFsbG9jYXRvcikKICAgICAgICAgcmV0dXJuIEJhc2U6OmNvbW1pdHRlZEJ5
dGVDb3VudCgpOwogICAgIHJldHVybiBhbGxvY2F0b3ItPmJ5dGVzQ29tbWl0dGVkKCk7CkBAIC01
MzcsNyArNTM0LDcgQEAgc2l6ZV90IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmNvbW1pdHRlZEJ5dAog
I2lmIEVOQUJMRShNRVRBX0FMTE9DQVRPUl9QUk9GSUxFKQogdm9pZCBFeGVjdXRhYmxlQWxsb2Nh
dG9yOjpkdW1wUHJvZmlsZSgpCiB7Ci0gICAgYXV0byogYWxsb2NhdG9yID0gZ19qc2NDb25maWcu
Zml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOworICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJs
ZUFsbG9jYXRvciogYWxsb2NhdG9yID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxl
QWxsb2NhdG9yOwogICAgIGlmICghYWxsb2NhdG9yKQogICAgICAgICByZXR1cm47CiAgICAgYWxs
b2NhdG9yLT5kdW1wUHJvZmlsZSgpOwpAQCAtNTQ2LDcgKzU0Myw3IEBAIHZvaWQgRXhlY3V0YWJs
ZUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUoKQogCiB2b2lkKiBzdGFydE9mRml4ZWRFeGVjdXRhYmxl
TWVtb3J5UG9vbEltcGwoKQogewotICAgIGF1dG8qIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZp
eGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKKyAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVB
bGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFs
bG9jYXRvcjsKICAgICBpZiAoIWFsbG9jYXRvcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgcmV0dXJuIGFsbG9jYXRvci0+bWVtb3J5U3RhcnQoKTsKQEAgLTU1NCw3ICs1NTEsNyBAQCB2
b2lkKiBzdGFydE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbEltCiAKIHZvaWQqIGVuZE9mRml4
ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbEltcGwoKQogewotICAgIGF1dG8qIGFsbG9jYXRvciA9IGdf
anNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKKyAgICBGaXhlZFZNUG9v
bEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29s
RXhlY3V0YWJsZUFsbG9jYXRvcjsKICAgICBpZiAoIWFsbG9jYXRvcikKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgcmV0dXJuIGFsbG9jYXRvci0+bWVtb3J5RW5kKCk7CkBAIC01NjIsNyAr
NTU5LDcgQEAgdm9pZCogZW5kT2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sSW1wbAogCiBib29s
IGlzSklUUEModm9pZCogcGMpCiB7Ci0gICAgYXV0byogYWxsb2NhdG9yID0gZ19qc2NDb25maWcu
Zml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOworICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJs
ZUFsbG9jYXRvciogYWxsb2NhdG9yID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxl
QWxsb2NhdG9yOwogICAgIHJldHVybiBhbGxvY2F0b3IgJiYgYWxsb2NhdG9yLT5pc0pJVFBDKHBj
KTsKIH0KIAo=
</data>
<flag name="review"
          id="407786"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392339</attachid>
            <date>2020-03-03 15:09:17 -0800</date>
            <delta_ts>2020-03-03 16:18:35 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>27083</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjU3ODAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBA
CisyMDIwLTAzLTAzICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFJlZmFjdG9yIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciB0byBub3QgaGF2ZSBtZW1i
ZXIgZnVuY3Rpb25zIHdoaWNoIGFyZSByZWFsbHkganVzdCBoZWxwZXIgZnVuY3Rpb25zCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg1MzcKKworICAg
ICAgICBSZXZpZXdlZCBieSBNYXJrIExhbS4KKworICAgICAgICBUaGVyZSB3ZXJlIGEgZmV3IG1l
bWJlciBmdW5jdGlvbnMgaW4gRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yIHRoYXQgd2Vy
ZQorICAgICAgICBlc3NlbnRpYWxseSBoZWxwZXIgZnVuY3Rpb25zLiBJJ3ZlIGZhY3RvcmVkIHRo
ZW0gb3V0LCBhbmQgbWFkZSBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IKKyAgICAgICAg
Y2FsbCB0aGVtIGRpcmVjdGx5LiBUaGlzIHJlZmFjdG9yaW5nIGlzIG5lZWRlZCB3aGVuIEkgaW1w
bGVtZW50IHRoZSAxR0IKKyAgICAgICAgZXhlY3V0YWJsZSBwb29sIG9uIGFybTY0IHNpbmNlIHRo
ZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGF0IHdpbGwgY3JlYXRlIHNwbGl0CisgICAgICAgIGltcGxl
bWVudGF0aW9ucyBvZiBzb21ldGhpbmcgbGlrZSBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0
b3IuCisKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHA6CisgICAgICAgIChK
U0M6OmppdFdyaXRlVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpnZW5lcmljV3JpdGVU
b0pJVFJlZ2lvbik6CisgICAgICAgIChKU0M6OmluaXRpYWxpemVTZXBhcmF0ZWRXWEhlYXBzKToK
KyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZUpJVFBhZ2VSZXNlcnZhdGlvbik6CisgICAgICAgIChK
U0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmlzVmFsaWQgY29uc3QpOgorICAgICAgICAoSlNDOjpF
eGVjdXRhYmxlQWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZXNzdXJlKToKKyAgICAgICAgKEpTQzo6
RXhlY3V0YWJsZUFsbG9jYXRvcjo6bWVtb3J5UHJlc3N1cmVNdWx0aXBsaWVyKToKKyAgICAgICAg
KEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpFeGVj
dXRhYmxlQWxsb2NhdG9yOjppc1ZhbGlkRXhlY3V0YWJsZU1lbW9yeSk6CisgICAgICAgIChKU0M6
OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmdldExvY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpFeGVj
dXRhYmxlQWxsb2NhdG9yOjpjb21taXR0ZWRCeXRlQ291bnQpOgorICAgICAgICAoSlNDOjpFeGVj
dXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSk6CisgICAgICAgIChKU0M6OnN0YXJ0T2ZGaXhl
ZEV4ZWN1dGFibGVNZW1vcnlQb29sSW1wbCk6CisgICAgICAgIChKU0M6OmVuZE9mRml4ZWRFeGVj
dXRhYmxlTWVtb3J5UG9vbEltcGwpOgorICAgICAgICAoSlNDOjppc0pJVFBDKToKKwogMjAyMC0w
My0wMyAgQmFzdWtlIFN1enVraSAgPGJhc3VrZS5zdXp1a2lAc29ueS5jb20+CiAKICAgICAgICAg
W1dpbkNhaXJvXVtQbGF5U3RhdGlvbl0gQWRkIGludGVyZmFjZSB0byBnZXQgbGlzdGVuaW5nIHBv
cnQgb2YgUmVtb3RlSW5zcGVjdG9yU2VydmVyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDI1Nzc1MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE1NCw2NiArMTU0LDIyNiBAQCB2b2lkIEV4ZWN1dGFibGVBbGxvY2F0b3I6
OnNldEpJVEVuYWJsZWQoCiAjZW5kaWYKIH0KIAotY2xhc3MgRml4ZWRWTVBvb2xFeGVjdXRhYmxl
QWxsb2NhdG9yIGZpbmFsIDogcHVibGljIE1ldGFBbGxvY2F0b3IgewotICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRv
cigpCi0gICAgICAgIDogTWV0YUFsbG9jYXRvcihqaXRBbGxvY2F0aW9uR3JhbnVsZSkgLy8gcm91
bmQgdXAgYWxsIGFsbG9jYXRpb25zIHRvIDMyIGJ5dGVzCi0gICAgewotICAgICAgICBpZiAoIWlz
SklURW5hYmxlZCgpKQotICAgICAgICAgICAgcmV0dXJuOworI2lmIE9TKERBUldJTikgJiYgSEFW
RShSRU1BUF9KSVQpCisKKyNpZiBDUFUoQVJNNjQpICYmIFVTRShFWEVDVVRFX09OTFlfSklUX1dS
SVRFX0ZVTkNUSU9OKQorc3RhdGljIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBqaXRXcml0ZVRodW5rR2VuZXJhdG9yKHZvaWQqIHdyaXRhYmxlQWRk
ciwgdm9pZCogc3R1YkJhc2UsIHNpemVfdCBzdHViU2l6ZSkKK3sKKyAgICB1c2luZyBuYW1lc3Bh
Y2UgQVJNNjRSZWdpc3RlcnM7CisgICAgdXNpbmcgVHJ1c3RlZEltbTMyID0gTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMjsKKworICAgIE1hY3JvQXNzZW1ibGVyIGppdDsKKworICAgIGppdC50
YWdSZXR1cm5BZGRyZXNzKCk7CisgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIod3JpdGFibGVBZGRyKSwgeDcpOworICAgIGppdC5hZGRQdHIoeDcsIHgwKTsKKworICAg
IGppdC5tb3ZlKHgwLCB4Myk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc21hbGxDb3B5ID0g
aml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgeDIsIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tNjQoNjQpKTsKKworICAgIGppdC5hZGQ2NChUcnVzdGVkSW1tMzIoMzIpLCB4Myk7
CisgICAgaml0LmFuZDY0KFRydXN0ZWRJbW0zMigtMzIpLCB4Myk7CisgICAgaml0LmxvYWRQYWly
NjQoeDEsIHgxMiwgeDEzKTsKKyAgICBqaXQubG9hZFBhaXI2NCh4MSwgVHJ1c3RlZEltbTMyKDE2
KSwgeDE0LCB4MTUpOworICAgIGppdC5zdWI2NCh4MywgeDAsIHg1KTsKKyAgICBqaXQuYWRkUHRy
KHg1LCB4MSk7CisKKyAgICBqaXQubG9hZFBhaXI2NCh4MSwgeDgsIHg5KTsKKyAgICBqaXQubG9h
ZFBhaXI2NCh4MSwgVHJ1c3RlZEltbTMyKDE2KSwgeDEwLCB4MTEpOworICAgIGppdC5hZGQ2NChU
cnVzdGVkSW1tMzIoMzIpLCB4MSk7CisgICAgaml0LnN1YjY0KHg1LCB4Mik7CisgICAgaml0LnN0
b3JlUGFpcjY0KHgxMiwgeDEzLCB4MCk7CisgICAgaml0LnN0b3JlUGFpcjY0KHgxNCwgeDE1LCB4
MCwgVHJ1c3RlZEltbTMyKDE2KSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgY2xlYW51cCA9
IGppdC5icmFuY2hTdWI2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsLCBUcnVzdGVkSW1t
MzIoNjQpLCB4Mik7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgY29weUxvb3AgPSBqaXQu
bGFiZWwoKTsKKyAgICBqaXQuc3RvcmVQYWlyNjRXaXRoTm9uVGVtcG9yYWxBY2Nlc3MoeDgsIHg5
LCB4Myk7CisgICAgaml0LnN0b3JlUGFpcjY0V2l0aE5vblRlbXBvcmFsQWNjZXNzKHgxMCwgeDEx
LCB4MywgVHJ1c3RlZEltbTMyKDE2KSk7CisgICAgaml0LmFkZDY0KFRydXN0ZWRJbW0zMigzMiks
IHgzKTsKKyAgICBqaXQubG9hZFBhaXI2NFdpdGhOb25UZW1wb3JhbEFjY2Vzcyh4MSwgeDgsIHg5
KTsKKyAgICBqaXQubG9hZFBhaXI2NFdpdGhOb25UZW1wb3JhbEFjY2Vzcyh4MSwgVHJ1c3RlZElt
bTMyKDE2KSwgeDEwLCB4MTEpOworICAgIGppdC5hZGQ2NChUcnVzdGVkSW1tMzIoMzIpLCB4MSk7
CisgICAgaml0LmJyYW5jaFN1YjY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgVHJ1c3RlZEltbTMy
KDMyKSwgeDIpLmxpbmtUbyhjb3B5TG9vcCwgJmppdCk7CisKKyAgICBjbGVhbnVwLmxpbmsoJmpp
dCk7CisgICAgaml0LmFkZDY0KHgyLCB4MSk7CisgICAgaml0LmxvYWRQYWlyNjQoeDEsIHgxMiwg
eDEzKTsKKyAgICBqaXQubG9hZFBhaXI2NCh4MSwgVHJ1c3RlZEltbTMyKDE2KSwgeDE0LCB4MTUp
OworICAgIGppdC5zdG9yZVBhaXI2NCh4OCwgeDksIHgzKTsKKyAgICBqaXQuc3RvcmVQYWlyNjQo
eDEwLCB4MTEsIHgzLCBUcnVzdGVkSW1tMzIoMTYpKTsKKyAgICBqaXQuYWRkUHRyKHgyLCB4Myk7
CisgICAgaml0LnN0b3JlUGFpcjY0KHgxMiwgeDEzLCB4MywgVHJ1c3RlZEltbTMyKDMyKSk7Cisg
ICAgaml0LnN0b3JlUGFpcjY0KHgxNCwgeDE1LCB4MywgVHJ1c3RlZEltbTMyKDQ4KSk7CisgICAg
aml0LnJldCgpOworCisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvY2FsMCA9IGppdC5sYWJl
bCgpOworICAgIGppdC5sb2FkNjQoeDEsIFBvc3RJbmRleCg4KSwgeDYpOworICAgIGppdC5zdG9y
ZTY0KHg2LCB4MywgUG9zdEluZGV4KDgpKTsKKyAgICBzbWFsbENvcHkubGluaygmaml0KTsKKyAg
ICBqaXQuYnJhbmNoU3ViNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgVHJ1c3RlZElt
bTMyKDgpLCB4MikubGlua1RvKGxvY2FsMCwgJmppdCk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgbG9jYWwyID0gaml0LmJyYW5jaEFkZDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgVHJ1c3Rl
ZEltbTMyKDgpLCB4Mik7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvY2FsMSA9IGppdC5s
YWJlbCgpOworICAgIGppdC5sb2FkOCh4MSwgUG9zdEluZGV4KDEpLCB4Nik7CisgICAgaml0LnN0
b3JlOCh4NiwgeDMsIFBvc3RJbmRleCgxKSk7CisgICAgaml0LmJyYW5jaFN1YjY0KE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgVHJ1c3RlZEltbTMyKDEpLCB4MikubGlua1RvKGxvY2FsMSwgJmpp
dCk7CisgICAgbG9jYWwyLmxpbmsoJmppdCk7CisgICAgaml0LnJldCgpOworCisgICAgYXV0byBz
dHViQmFzZUNvZGVQdHIgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8TGlua0J1ZmZlclB0clRhZz4o
dGFnQ29kZVB0cjxMaW5rQnVmZmVyUHRyVGFnPihzdHViQmFzZSkpOworICAgIExpbmtCdWZmZXIg
bGlua0J1ZmZlcihqaXQsIHN0dWJCYXNlQ29kZVB0ciwgc3R1YlNpemUpOworICAgIC8vIFdlIGRv
bid0IHVzZSBGSU5BTElaRV9DT0RFKCkgZm9yIHR3byByZWFzb25zLgorICAgIC8vIFRoZSBmaXJz
dCBpcyB0aGF0IHdlIGRvbid0IHdhbnQgdGhlIHdyaXRlYWJsZSBhZGRyZXNzLCBhcyBkaXNhc3Nl
bWJsZWQgaW5zdHJ1Y3Rpb25zLAorICAgIC8vIHRvIGFwcGVhciBpbiB0aGUgY29uc29sZSBvciBh
bnl3aGVyZSBpbiBtZW1vcnksIHZpYSB0aGUgUHJpbnRTdHJlYW0gYnVmZmVyLgorICAgIC8vIFRo
ZSBzZWNvbmQgaXMgd2UgY2FuJ3QgZ3VhcmFudGVlIHRoYXQgdGhlIGNvZGUgaXMgcmVhZGFibGUg
d2hlbiB1c2luZyB0aGUKKyAgICAvLyBhc3luY0Rpc2Fzc2VtYmx5IG9wdGlvbiBhcyBvdXIgY2Fs
bGVyIHdpbGwgc2V0IG91ciBwYWdlcyBleGVjdXRlIG9ubHkuCisgICAgcmV0dXJuIGxpbmtCdWZm
ZXIuZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5PEpJVFRodW5rUHRyVGFnPigpOworfQor
I2Vsc2UgLy8gbm90IENQVShBUk02NCkgJiYgVVNFKEVYRUNVVEVfT05MWV9KSVRfV1JJVEVfRlVO
Q1RJT04pCitzdGF0aWMgdm9pZCBnZW5lcmljV3JpdGVUb0pJVFJlZ2lvbihvZmZfdCBvZmZzZXQs
IGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSkKK3sKKyAgICBtZW1jcHkoKHZvaWQq
KShnX2pzY0NvbmZpZy5zdGFydE9mRml4ZWRXcml0YWJsZU1lbW9yeVBvb2wgKyBvZmZzZXQpLCBk
YXRhLCBkYXRhU2l6ZSk7Cit9CisKK3N0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEFMV0FZU19JTkxJTkUgaml0V3JpdGVUaHVua0dlbmVyYXRvcih2b2lkKiBhZGRy
ZXNzLCB2b2lkKiwgc2l6ZV90KQoreworICAgIGdfanNjQ29uZmlnLnN0YXJ0T2ZGaXhlZFdyaXRh
YmxlTWVtb3J5UG9vbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihhZGRyZXNzKTsKKyAg
ICB2b2lkKiBmdW5jdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KCZnZW5lcmljV3JpdGVU
b0pJVFJlZ2lvbik7CisjaWYgQ1BVKEFSTV9USFVNQjIpCisgICAgLy8gSGFuZGxlIHRodW1iIG9m
ZnNldAorICAgIHVpbnRwdHJfdCBmdW5jdGlvbkFzSW50ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3Q+KGZ1bmN0aW9uKTsKKyAgICBmdW5jdGlvbkFzSW50IC09IDE7CisgICAgZnVuY3Rpb24g
PSByZWludGVycHJldF9jYXN0PHZvaWQqPihmdW5jdGlvbkFzSW50KTsKKyNlbmRpZgorICAgIGF1
dG8gY29kZVB0ciA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4odGFnQ0Z1
bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPihmdW5jdGlvbikpOworICAgIHJldHVybiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYo
Y29kZVB0cik7Cit9CisjZW5kaWYgLy8gQ1BVKEFSTTY0KSAmJiBVU0UoRVhFQ1VURV9PTkxZX0pJ
VF9XUklURV9GVU5DVElPTikKKworc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBpbml0aWFsaXpl
U2VwYXJhdGVkV1hIZWFwcyh2b2lkKiBzdHViQmFzZSwgc2l6ZV90IHN0dWJTaXplLCB2b2lkKiBq
aXRCYXNlLCBzaXplX3Qgaml0U2l6ZSkKK3sKKyAgICBtYWNoX3ZtX2FkZHJlc3NfdCB3cml0YWJs
ZUFkZHIgPSAwOworCisgICAgLy8gQ3JlYXRlIGEgc2Vjb25kIG1hcHBpbmcgb2YgdGhlIEpJVCBy
ZWdpb24gYXQgYSByYW5kb20gYWRkcmVzcy4KKyAgICB2bV9wcm90X3QgY3VyLCBtYXg7CisgICAg
aW50IHJlbWFwRmxhZ3MgPSBWTV9GTEFHU19BTllXSEVSRTsKKyNpZiBkZWZpbmVkKFZNX0ZMQUdT
X1JBTkRPTV9BRERSKQorICAgIHJlbWFwRmxhZ3MgfD0gVk1fRkxBR1NfUkFORE9NX0FERFI7Cisj
ZW5kaWYKKyAgICBrZXJuX3JldHVybl90IHJldCA9IG1hY2hfdm1fcmVtYXAobWFjaF90YXNrX3Nl
bGYoKSwgJndyaXRhYmxlQWRkciwgaml0U2l6ZSwgMCwKKyAgICAgICAgcmVtYXBGbGFncywKKyAg
ICAgICAgbWFjaF90YXNrX3NlbGYoKSwgKG1hY2hfdm1fYWRkcmVzc190KWppdEJhc2UsIEZBTFNF
LAorICAgICAgICAmY3VyLCAmbWF4LCBWTV9JTkhFUklUX0RFRkFVTFQpOwogCi0gICAgICAgIHNp
emVfdCByZXNlcnZhdGlvblNpemU7Ci0gICAgICAgIGlmIChPcHRpb25zOjpqaXRNZW1vcnlSZXNl
cnZhdGlvblNpemUoKSkKLSAgICAgICAgICAgIHJlc2VydmF0aW9uU2l6ZSA9IE9wdGlvbnM6Ompp
dE1lbW9yeVJlc2VydmF0aW9uU2l6ZSgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXNl
cnZhdGlvblNpemUgPSBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZTsKLSAgICAgICAgcmVz
ZXJ2YXRpb25TaXplID0gc3RkOjptYXgocm91bmRVcFRvTXVsdGlwbGVPZihwYWdlU2l6ZSgpLCBy
ZXNlcnZhdGlvblNpemUpLCBwYWdlU2l6ZSgpICogMik7CisgICAgYm9vbCByZW1hcFN1Y2NlZWRl
ZCA9IChyZXQgPT0gS0VSTl9TVUNDRVNTKTsKKyAgICBpZiAoIXJlbWFwU3VjY2VlZGVkKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBBc3NlbWJsZSBhIHRodW5rIHRoYXQgd2lsbCBzZXJ2ZSBh
cyB0aGUgbWVhbnMgZm9yIHdyaXRpbmcgaW50byB0aGUgSklUIHJlZ2lvbi4KKyAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHdyaXRlVGh1bmsgPSBqaXRXcml0ZVRodW5r
R2VuZXJhdG9yKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHdyaXRhYmxlQWRkciksIHN0dWJCYXNl
LCBzdHViU2l6ZSk7CisKKyAgICBpbnQgcmVzdWx0ID0gMDsKKworI2lmIFVTRShFWEVDVVRFX09O
TFlfSklUX1dSSVRFX0ZVTkNUSU9OKQorICAgIC8vIFByZXZlbnQgcmVhZGluZyB0aGUgd3JpdGUg
dGh1bmsgY29kZS4KKyAgICByZXN1bHQgPSB2bV9wcm90ZWN0KG1hY2hfdGFza19zZWxmKCksIHJl
aW50ZXJwcmV0X2Nhc3Q8dm1fYWRkcmVzc190PihzdHViQmFzZSksIHN0dWJTaXplLCB0cnVlLCBW
TV9QUk9UX0VYRUNVVEUpOworICAgIFJFTEVBU0VfQVNTRVJUKCFyZXN1bHQpOworI2VuZGlmCisK
KyAgICAvLyBQcmV2ZW50IHdyaXRpbmcgaW50byB0aGUgZXhlY3V0YWJsZSBKSVQgbWFwcGluZy4K
KyAgICByZXN1bHQgPSB2bV9wcm90ZWN0KG1hY2hfdGFza19zZWxmKCksIHJlaW50ZXJwcmV0X2Nh
c3Q8dm1fYWRkcmVzc190PihqaXRCYXNlKSwgaml0U2l6ZSwgdHJ1ZSwgVk1fUFJPVF9SRUFEIHwg
Vk1fUFJPVF9FWEVDVVRFKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0KTsKKworICAgIC8v
IFByZXZlbnQgZXhlY3V0aW9uIGluIHRoZSB3cml0YWJsZSBKSVQgbWFwcGluZy4KKyAgICByZXN1
bHQgPSB2bV9wcm90ZWN0KG1hY2hfdGFza19zZWxmKCksIHN0YXRpY19jYXN0PHZtX2FkZHJlc3Nf
dD4od3JpdGFibGVBZGRyKSwgaml0U2l6ZSwgdHJ1ZSwgVk1fUFJPVF9SRUFEIHwgVk1fUFJPVF9X
UklURSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIXJlc3VsdCk7CisKKyAgICAvLyBaZXJvIG91dCB3
cml0YWJsZUFkZHIgdG8gYXZvaWQgbGVha2luZyB0aGUgYWRkcmVzcyBvZiB0aGUgd3JpdGFibGUg
bWFwcGluZy4KKyAgICBtZW1zZXRfcygmd3JpdGFibGVBZGRyLCBzaXplb2Yod3JpdGFibGVBZGRy
KSwgMCwgc2l6ZW9mKHdyaXRhYmxlQWRkcikpOworCisjaWYgRU5BQkxFKFNFUEFSQVRFRF9XWF9I
RUFQKQorICAgIGdfanNjQ29uZmlnLmppdFdyaXRlU2VwYXJhdGVIZWFwcyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8SklUV3JpdGVTZXBhcmF0ZUhlYXBzRnVuY3Rpb24+KHdyaXRlVGh1bmsuY29kZSgpLmV4
ZWN1dGFibGVBZGRyZXNzKCkpOworI2VuZGlmCit9CisKKyNlbHNlIC8vIE9TKERBUldJTikgJiYg
SEFWRShSRU1BUF9KSVQpCitzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIGluaXRpYWxpemVTZXBh
cmF0ZWRXWEhlYXBzKHZvaWQqLCBzaXplX3QsIHZvaWQqLCBzaXplX3QpCit7Cit9CisjZW5kaWYK
Kworc3RydWN0IEpJVFJlc2VydmF0aW9uIHsKKyAgICBQYWdlUmVzZXJ2YXRpb24gcGFnZVJlc2Vy
dmF0aW9uOworICAgIHZvaWQqIGJhc2UgeyBudWxscHRyIH07CisgICAgc2l6ZV90IHNpemUgeyAw
IH07Cit9OworCitzdGF0aWMgQUxXQVlTX0lOTElORSBKSVRSZXNlcnZhdGlvbiBpbml0aWFsaXpl
SklUUGFnZVJlc2VydmF0aW9uKCkKK3sKKyAgICBKSVRSZXNlcnZhdGlvbiByZXNlcnZhdGlvbjsK
KyAgICBpZiAoIWlzSklURW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gcmVzZXJ2YXRpb247CisK
KyAgICBpZiAoT3B0aW9uczo6aml0TWVtb3J5UmVzZXJ2YXRpb25TaXplKCkpCisgICAgICAgIHJl
c2VydmF0aW9uLnNpemUgPSBPcHRpb25zOjpqaXRNZW1vcnlSZXNlcnZhdGlvblNpemUoKTsKKyAg
ICBlbHNlCisgICAgICAgIHJlc2VydmF0aW9uLnNpemUgPSBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQ
b29sU2l6ZTsKKyAgICByZXNlcnZhdGlvbi5zaXplID0gc3RkOjptYXgocm91bmRVcFRvTXVsdGlw
bGVPZihwYWdlU2l6ZSgpLCByZXNlcnZhdGlvbi5zaXplKSwgcGFnZVNpemUoKSAqIDIpOwogCi0g
ICAgICAgIGF1dG8gdHJ5Q3JlYXRlUGFnZVJlc2VydmF0aW9uID0gW10gKHNpemVfdCByZXNlcnZh
dGlvblNpemUpIHsKKyAgICBhdXRvIHRyeUNyZWF0ZVBhZ2VSZXNlcnZhdGlvbiA9IFtdIChzaXpl
X3QgcmVzZXJ2YXRpb25TaXplKSB7CiAjaWYgT1MoTElOVVgpCi0gICAgICAgICAgICAvLyBJZiB3
ZSB1c2UgdW5jb21taXR0ZWQgcmVzZXJ2YXRpb24sIG1tYXAgb3BlcmF0aW9uIGlzIHJlY29yZGVk
IHdpdGggc21hbGwgcGFnZSBzaXplIGluIHBlcmYgY29tbWFuZCdzIG91dHB1dC4KLSAgICAgICAg
ICAgIC8vIFRoaXMgbWFrZXMgdGhlIGZvbGxvd2luZyBKSVQgY29kZSBsb2dnaW5nIGJyb2tlbiBh
bmQgc29tZSBvZiBKSVQgY29kZSBpcyBub3QgcmVjb3JkZWQgY29ycmVjdGx5LgotICAgICAgICAg
ICAgLy8gVG8gYXZvaWQgdGhpcyBwcm9ibGVtLCB3ZSB1c2UgY29tbWl0dGVkIHJlc2VydmF0aW9u
IGlmIHdlIG5lZWQgcGVyZiBKSVREdW1wIGxvZ2dpbmcuCi0gICAgICAgICAgICBpZiAoT3B0aW9u
czo6bG9nSklUQ29kZUZvclBlcmYoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUGFnZVJlc2Vy
dmF0aW9uOjpyZXNlcnZlQW5kQ29tbWl0V2l0aEd1YXJkUGFnZXMocmVzZXJ2YXRpb25TaXplLCBP
U0FsbG9jYXRvcjo6SlNKSVRDb2RlUGFnZXMsIEVYRUNVVEFCTEVfUE9PTF9XUklUQUJMRSwgdHJ1
ZSk7CisgICAgICAgIC8vIElmIHdlIHVzZSB1bmNvbW1pdHRlZCByZXNlcnZhdGlvbiwgbW1hcCBv
cGVyYXRpb24gaXMgcmVjb3JkZWQgd2l0aCBzbWFsbCBwYWdlIHNpemUgaW4gcGVyZiBjb21tYW5k
J3Mgb3V0cHV0LgorICAgICAgICAvLyBUaGlzIG1ha2VzIHRoZSBmb2xsb3dpbmcgSklUIGNvZGUg
bG9nZ2luZyBicm9rZW4gYW5kIHNvbWUgb2YgSklUIGNvZGUgaXMgbm90IHJlY29yZGVkIGNvcnJl
Y3RseS4KKyAgICAgICAgLy8gVG8gYXZvaWQgdGhpcyBwcm9ibGVtLCB3ZSB1c2UgY29tbWl0dGVk
IHJlc2VydmF0aW9uIGlmIHdlIG5lZWQgcGVyZiBKSVREdW1wIGxvZ2dpbmcuCisgICAgICAgIGlm
IChPcHRpb25zOjpsb2dKSVRDb2RlRm9yUGVyZigpKQorICAgICAgICAgICAgcmV0dXJuIFBhZ2VS
ZXNlcnZhdGlvbjo6cmVzZXJ2ZUFuZENvbW1pdFdpdGhHdWFyZFBhZ2VzKHJlc2VydmF0aW9uU2l6
ZSwgT1NBbGxvY2F0b3I6OkpTSklUQ29kZVBhZ2VzLCBFWEVDVVRBQkxFX1BPT0xfV1JJVEFCTEUs
IHRydWUpOwogI2VuZGlmCi0gICAgICAgICAgICByZXR1cm4gUGFnZVJlc2VydmF0aW9uOjpyZXNl
cnZlV2l0aEd1YXJkUGFnZXMocmVzZXJ2YXRpb25TaXplLCBPU0FsbG9jYXRvcjo6SlNKSVRDb2Rl
UGFnZXMsIEVYRUNVVEFCTEVfUE9PTF9XUklUQUJMRSwgdHJ1ZSk7Ci0gICAgICAgIH07CisgICAg
ICAgIHJldHVybiBQYWdlUmVzZXJ2YXRpb246OnJlc2VydmVXaXRoR3VhcmRQYWdlcyhyZXNlcnZh
dGlvblNpemUsIE9TQWxsb2NhdG9yOjpKU0pJVENvZGVQYWdlcywgRVhFQ1VUQUJMRV9QT09MX1dS
SVRBQkxFLCB0cnVlKTsKKyAgICB9OwogCi0gICAgICAgIG1fcmVzZXJ2YXRpb24gPSB0cnlDcmVh
dGVQYWdlUmVzZXJ2YXRpb24ocmVzZXJ2YXRpb25TaXplKTsKLSAgICAgICAgaWYgKG1fcmVzZXJ2
YXRpb24pIHsKLSAgICAgICAgICAgIEFTU0VSVChtX3Jlc2VydmF0aW9uLnNpemUoKSA9PSByZXNl
cnZhdGlvblNpemUpOwotICAgICAgICAgICAgdm9pZCogcmVzZXJ2YXRpb25CYXNlID0gbV9yZXNl
cnZhdGlvbi5iYXNlKCk7CisgICAgcmVzZXJ2YXRpb24ucGFnZVJlc2VydmF0aW9uID0gdHJ5Q3Jl
YXRlUGFnZVJlc2VydmF0aW9uKHJlc2VydmF0aW9uLnNpemUpOworICAgIGlmIChyZXNlcnZhdGlv
bi5wYWdlUmVzZXJ2YXRpb24pIHsKKyAgICAgICAgQVNTRVJUKHJlc2VydmF0aW9uLnBhZ2VSZXNl
cnZhdGlvbi5zaXplKCkgPT0gcmVzZXJ2YXRpb24uc2l6ZSk7CisgICAgICAgIHJlc2VydmF0aW9u
LmJhc2UgPSByZXNlcnZhdGlvbi5wYWdlUmVzZXJ2YXRpb24uYmFzZSgpOwogCiAjaWYgRU5BQkxF
KEZBU1RfSklUX1BFUk1JU1NJT05TKSAmJiAhRU5BQkxFKFNFUEFSQVRFRF9XWF9IRUFQKQotICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQob3NfdGhyZWFkX3NlbGZfcmVzdHJpY3Rfcnd4X2lzX3N1
cHBvcnRlZCgpKTsKLSAgICAgICAgICAgIG9zX3RocmVhZF9zZWxmX3Jlc3RyaWN0X3J3eF90b19y
eCgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChvc190aHJlYWRfc2VsZl9yZXN0cmljdF9yd3hf
aXNfc3VwcG9ydGVkKCkpOworICAgICAgICBvc190aHJlYWRfc2VsZl9yZXN0cmljdF9yd3hfdG9f
cngoKTsKIAogI2Vsc2UgLy8gbm90IEVOQUJMRShGQVNUX0pJVF9QRVJNSVNTSU9OUykgb3IgRU5B
QkxFKFNFUEFSQVRFRF9XWF9IRUFQKQogI2lmIEVOQUJMRShGQVNUX0pJVF9QRVJNSVNTSU9OUykK
LSAgICAgICAgICAgIGlmIChvc190aHJlYWRfc2VsZl9yZXN0cmljdF9yd3hfaXNfc3VwcG9ydGVk
KCkpIHsKLSAgICAgICAgICAgICAgICBnX2pzY0NvbmZpZy51c2VGYXN0UGVybWlzaW9uc0pJVENv
cHkgPSB0cnVlOwotICAgICAgICAgICAgICAgIG9zX3RocmVhZF9zZWxmX3Jlc3RyaWN0X3J3eF90
b19yeCgpOwotICAgICAgICAgICAgfSBlbHNlCisgICAgICAgIGlmIChvc190aHJlYWRfc2VsZl9y
ZXN0cmljdF9yd3hfaXNfc3VwcG9ydGVkKCkpIHsKKyAgICAgICAgICAgIGdfanNjQ29uZmlnLnVz
ZUZhc3RQZXJtaXNpb25zSklUQ29weSA9IHRydWU7CisgICAgICAgICAgICBvc190aHJlYWRfc2Vs
Zl9yZXN0cmljdF9yd3hfdG9fcngoKTsKKyAgICAgICAgfSBlbHNlCiAjZW5kaWYKLSAgICAgICAg
ICAgIGlmIChPcHRpb25zOjp1c2VTZXBhcmF0ZWRXWEhlYXAoKSkgewotICAgICAgICAgICAgICAg
IC8vIEZpcnN0IHBhZ2Ugb2Ygb3VyIEpJVCBhbGxvY2F0aW9uIGlzIHJlc2VydmVkLgotICAgICAg
ICAgICAgICAgIEFTU0VSVChyZXNlcnZhdGlvblNpemUgPj0gcGFnZVNpemUoKSAqIDIpOwotICAg
ICAgICAgICAgICAgIHJlc2VydmF0aW9uQmFzZSA9ICh2b2lkKikoKHVpbnRwdHJfdClyZXNlcnZh
dGlvbkJhc2UgKyBwYWdlU2l6ZSgpKTsKLSAgICAgICAgICAgICAgICByZXNlcnZhdGlvblNpemUg
LT0gcGFnZVNpemUoKTsKLSAgICAgICAgICAgICAgICBpbml0aWFsaXplU2VwYXJhdGVkV1hIZWFw
cyhtX3Jlc2VydmF0aW9uLmJhc2UoKSwgcGFnZVNpemUoKSwgcmVzZXJ2YXRpb25CYXNlLCByZXNl
cnZhdGlvblNpemUpOwotICAgICAgICAgICAgfQorICAgICAgICBpZiAoT3B0aW9uczo6dXNlU2Vw
YXJhdGVkV1hIZWFwKCkpIHsKKyAgICAgICAgICAgIC8vIEZpcnN0IHBhZ2Ugb2Ygb3VyIEpJVCBh
bGxvY2F0aW9uIGlzIHJlc2VydmVkLgorICAgICAgICAgICAgQVNTRVJUKHJlc2VydmF0aW9uLnNp
emUgPj0gcGFnZVNpemUoKSAqIDIpOworICAgICAgICAgICAgcmVzZXJ2YXRpb24uYmFzZSA9ICh2
b2lkKikoKHVpbnRwdHJfdCkocmVzZXJ2YXRpb24uYmFzZSkgKyBwYWdlU2l6ZSgpKTsKKyAgICAg
ICAgICAgIHJlc2VydmF0aW9uLnNpemUgLT0gcGFnZVNpemUoKTsKKyAgICAgICAgICAgIGluaXRp
YWxpemVTZXBhcmF0ZWRXWEhlYXBzKHJlc2VydmF0aW9uLnBhZ2VSZXNlcnZhdGlvbi5iYXNlKCks
IHBhZ2VTaXplKCksIHJlc2VydmF0aW9uLmJhc2UsIHJlc2VydmF0aW9uLnNpemUpOworICAgICAg
ICB9CiAjZW5kaWYgLy8gbm90IEVOQUJMRShGQVNUX0pJVF9QRVJNSVNTSU9OUykgb3IgRU5BQkxF
KFNFUEFSQVRFRF9XWF9IRUFQKQorICAgICAgICB2b2lkKiByZXNlcnZhdGlvbkVuZCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHJlc2VydmF0aW9uLmJhc2UpICsgcmVzZXJ2YXRpb24uc2l6
ZTsKIAotICAgICAgICAgICAgYWRkRnJlc2hGcmVlU3BhY2UocmVzZXJ2YXRpb25CYXNlLCByZXNl
cnZhdGlvblNpemUpOwotCi0gICAgICAgICAgICBBU1NFUlQoYnl0ZXNSZXNlcnZlZCgpID09IHJl
c2VydmF0aW9uU2l6ZSk7IC8vIFNpbmNlIG91ciBleGVjdXRhYmxlIG1lbW9yeSBpcyBmaXhlZC1z
aXplZCwgYnl0ZXNSZXNlcnZlZCBpcyBuZXZlciBjaGFuZ2VkIGFmdGVyIGluaXRpYWxpemF0aW9u
LgorICAgICAgICBnX2pzY0NvbmZpZy5zdGFydEV4ZWN1dGFibGVNZW1vcnkgPSB0YWdDb2RlUHRy
PEV4ZWN1dGFibGVNZW1vcnlQdHJUYWc+KHJlc2VydmF0aW9uLmJhc2UpOworICAgICAgICBnX2pz
Y0NvbmZpZy5lbmRFeGVjdXRhYmxlTWVtb3J5ID0gdGFnQ29kZVB0cjxFeGVjdXRhYmxlTWVtb3J5
UHRyVGFnPihyZXNlcnZhdGlvbkVuZCk7CisgICAgfQogCi0gICAgICAgICAgICB2b2lkKiByZXNl
cnZhdGlvbkVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHJlc2VydmF0aW9uQmFzZSkg
KyByZXNlcnZhdGlvblNpemU7CisgICAgcmV0dXJuIHJlc2VydmF0aW9uOworfQogCi0gICAgICAg
ICAgICBnX2pzY0NvbmZpZy5zdGFydEV4ZWN1dGFibGVNZW1vcnkgPSB0YWdDb2RlUHRyPEV4ZWN1
dGFibGVNZW1vcnlQdHJUYWc+KHJlc2VydmF0aW9uQmFzZSk7Ci0gICAgICAgICAgICBnX2pzY0Nv
bmZpZy5lbmRFeGVjdXRhYmxlTWVtb3J5ID0gdGFnQ29kZVB0cjxFeGVjdXRhYmxlTWVtb3J5UHRy
VGFnPihyZXNlcnZhdGlvbkVuZCk7CitjbGFzcyBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0
b3IgZmluYWwgOiBwdWJsaWMgTWV0YUFsbG9jYXRvciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKCkKKyAg
ICAgICAgOiBNZXRhQWxsb2NhdG9yKGppdEFsbG9jYXRpb25HcmFudWxlKSAvLyByb3VuZCB1cCBh
bGwgYWxsb2NhdGlvbnMgdG8gMzIgYnl0ZXMKKyAgICB7CisgICAgICAgIEpJVFJlc2VydmF0aW9u
IHJlc2VydmF0aW9uID0gaW5pdGlhbGl6ZUpJVFBhZ2VSZXNlcnZhdGlvbigpOworICAgICAgICBt
X3Jlc2VydmF0aW9uID0gV1RGTW92ZShyZXNlcnZhdGlvbi5wYWdlUmVzZXJ2YXRpb24pOworICAg
ICAgICBpZiAobV9yZXNlcnZhdGlvbikgeworICAgICAgICAgICAgYWRkRnJlc2hGcmVlU3BhY2Uo
cmVzZXJ2YXRpb24uYmFzZSwgcmVzZXJ2YXRpb24uc2l6ZSk7CisgICAgICAgICAgICBBU1NFUlQo
Ynl0ZXNSZXNlcnZlZCgpID09IHJlc2VydmF0aW9uLnNpemUpOyAvLyBTaW5jZSBvdXIgZXhlY3V0
YWJsZSBtZW1vcnkgaXMgZml4ZWQtc2l6ZWQsIGJ5dGVzUmVzZXJ2ZWQgaXMgbmV2ZXIgY2hhbmdl
ZCBhZnRlciBpbml0aWFsaXphdGlvbi4KICAgICAgICAgfQogICAgIH0KIApAQCAtMjMyLDE4MCAr
MzkyLDE1IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgbm90aWZ5TmVlZFBhZ2Uodm9pZCogcGFn
ZSwgc2l6ZV90IGNvdW50KSBvdmVycmlkZQogICAgIHsKLSNpZiBVU0UoTUFEVl9GUkVFX0ZPUl9K
SVRfTUVNT1JZKQotICAgICAgICBVTlVTRURfUEFSQU0ocGFnZSk7Ci0gICAgICAgIFVOVVNFRF9Q
QVJBTShjb3VudCk7Ci0jZWxzZQogICAgICAgICBtX3Jlc2VydmF0aW9uLmNvbW1pdChwYWdlLCBw
YWdlU2l6ZSgpICogY291bnQpOwotI2VuZGlmCiAgICAgfQogCiAgICAgdm9pZCBub3RpZnlQYWdl
SXNGcmVlKHZvaWQqIHBhZ2UsIHNpemVfdCBjb3VudCkgb3ZlcnJpZGUKICAgICB7Ci0jaWYgVVNF
KE1BRFZfRlJFRV9GT1JfSklUX01FTU9SWSkKLSAgICAgICAgZm9yICg7OykgewotICAgICAgICAg
ICAgaW50IHJlc3VsdCA9IG1hZHZpc2UocGFnZSwgcGFnZVNpemUoKSAqIGNvdW50LCBNQURWX0ZS
RUUpOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSAtMSk7Ci0gICAgICAgICAgICBpZiAoZXJybm8g
IT0gRUFHQUlOKSB7Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsgLy8gSW4gZGVidWcgbW9kZSwgdGhpcyBzaG91bGQgYmUgYSBoYXJkIGZhaWx1cmUuCi0gICAg
ICAgICAgICAgICAgYnJlYWs7IC8vIEluIHJlbGVhc2UgbW9kZSwgd2Ugc2hvdWxkIGp1c3QgaWdu
b3JlIHRoZSBlcnJvciAtIG5vdCByZXR1cm5pbmcgbWVtb3J5IHRvIHRoZSBPUyBpcyBiZXR0ZXIg
dGhhbiBjcmFzaGluZywgZXNwZWNpYWxseSBzaW5jZSB3ZSBfd2lsbF8gYmUgYWJsZSB0byByZXVz
ZSB0aGUgbWVtb3J5IGludGVybmFsbHkgYW55d2F5LgotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0jZWxzZQogICAgICAgICBtX3Jlc2VydmF0aW9uLmRlY29tbWl0KHBhZ2UsIHBhZ2VTaXplKCkg
KiBjb3VudCk7Ci0jZW5kaWYKICAgICB9CiAKIHByaXZhdGU6Ci0jaWYgT1MoREFSV0lOKSAmJiBI
QVZFKFJFTUFQX0pJVCkKLSAgICB2b2lkIGluaXRpYWxpemVTZXBhcmF0ZWRXWEhlYXBzKHZvaWQq
IHN0dWJCYXNlLCBzaXplX3Qgc3R1YlNpemUsIHZvaWQqIGppdEJhc2UsIHNpemVfdCBqaXRTaXpl
KQotICAgIHsKLSAgICAgICAgbWFjaF92bV9hZGRyZXNzX3Qgd3JpdGFibGVBZGRyID0gMDsKLQot
ICAgICAgICAvLyBDcmVhdGUgYSBzZWNvbmQgbWFwcGluZyBvZiB0aGUgSklUIHJlZ2lvbiBhdCBh
IHJhbmRvbSBhZGRyZXNzLgotICAgICAgICB2bV9wcm90X3QgY3VyLCBtYXg7Ci0gICAgICAgIGlu
dCByZW1hcEZsYWdzID0gVk1fRkxBR1NfQU5ZV0hFUkU7Ci0jaWYgZGVmaW5lZChWTV9GTEFHU19S
QU5ET01fQUREUikKLSAgICAgICAgcmVtYXBGbGFncyB8PSBWTV9GTEFHU19SQU5ET01fQUREUjsK
LSNlbmRpZgotICAgICAgICBrZXJuX3JldHVybl90IHJldCA9IG1hY2hfdm1fcmVtYXAobWFjaF90
YXNrX3NlbGYoKSwgJndyaXRhYmxlQWRkciwgaml0U2l6ZSwgMCwKLSAgICAgICAgICAgIHJlbWFw
RmxhZ3MsCi0gICAgICAgICAgICBtYWNoX3Rhc2tfc2VsZigpLCAobWFjaF92bV9hZGRyZXNzX3Qp
aml0QmFzZSwgRkFMU0UsCi0gICAgICAgICAgICAmY3VyLCAmbWF4LCBWTV9JTkhFUklUX0RFRkFV
TFQpOwotCi0gICAgICAgIGJvb2wgcmVtYXBTdWNjZWVkZWQgPSAocmV0ID09IEtFUk5fU1VDQ0VT
Uyk7Ci0gICAgICAgIGlmICghcmVtYXBTdWNjZWVkZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgLy8gQXNzZW1ibGUgYSB0aHVuayB0aGF0IHdpbGwgc2VydmUgYXMgdGhlIG1lYW5z
IGZvciB3cml0aW5nIGludG8gdGhlIEpJVCByZWdpb24uCi0gICAgICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gd3JpdGVUaHVuayA9IGppdFdyaXRlVGh1bmtHZW5lcmF0
b3IocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4od3JpdGFibGVBZGRyKSwgc3R1YkJhc2UsIHN0dWJT
aXplKTsKLQotICAgICAgICBpbnQgcmVzdWx0ID0gMDsKLQotI2lmIFVTRShFWEVDVVRFX09OTFlf
SklUX1dSSVRFX0ZVTkNUSU9OKQotICAgICAgICAvLyBQcmV2ZW50IHJlYWRpbmcgdGhlIHdyaXRl
IHRodW5rIGNvZGUuCi0gICAgICAgIHJlc3VsdCA9IHZtX3Byb3RlY3QobWFjaF90YXNrX3NlbGYo
KSwgcmVpbnRlcnByZXRfY2FzdDx2bV9hZGRyZXNzX3Q+KHN0dWJCYXNlKSwgc3R1YlNpemUsIHRy
dWUsIFZNX1BST1RfRVhFQ1VURSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZXN1bHQpOwot
I2VuZGlmCi0KLSAgICAgICAgLy8gUHJldmVudCB3cml0aW5nIGludG8gdGhlIGV4ZWN1dGFibGUg
SklUIG1hcHBpbmcuCi0gICAgICAgIHJlc3VsdCA9IHZtX3Byb3RlY3QobWFjaF90YXNrX3NlbGYo
KSwgcmVpbnRlcnByZXRfY2FzdDx2bV9hZGRyZXNzX3Q+KGppdEJhc2UpLCBqaXRTaXplLCB0cnVl
LCBWTV9QUk9UX1JFQUQgfCBWTV9QUk9UX0VYRUNVVEUpOwotICAgICAgICBSRUxFQVNFX0FTU0VS
VCghcmVzdWx0KTsKLQotICAgICAgICAvLyBQcmV2ZW50IGV4ZWN1dGlvbiBpbiB0aGUgd3JpdGFi
bGUgSklUIG1hcHBpbmcuCi0gICAgICAgIHJlc3VsdCA9IHZtX3Byb3RlY3QobWFjaF90YXNrX3Nl
bGYoKSwgc3RhdGljX2Nhc3Q8dm1fYWRkcmVzc190Pih3cml0YWJsZUFkZHIpLCBqaXRTaXplLCB0
cnVlLCBWTV9QUk9UX1JFQUQgfCBWTV9QUk9UX1dSSVRFKTsKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIXJlc3VsdCk7Ci0KLSAgICAgICAgLy8gWmVybyBvdXQgd3JpdGFibGVBZGRyIHRvIGF2b2lk
IGxlYWtpbmcgdGhlIGFkZHJlc3Mgb2YgdGhlIHdyaXRhYmxlIG1hcHBpbmcuCi0gICAgICAgIG1l
bXNldF9zKCZ3cml0YWJsZUFkZHIsIHNpemVvZih3cml0YWJsZUFkZHIpLCAwLCBzaXplb2Yod3Jp
dGFibGVBZGRyKSk7Ci0KLSNpZiBFTkFCTEUoU0VQQVJBVEVEX1dYX0hFQVApCi0gICAgICAgIGdf
anNjQ29uZmlnLmppdFdyaXRlU2VwYXJhdGVIZWFwcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8SklUV3Jp
dGVTZXBhcmF0ZUhlYXBzRnVuY3Rpb24+KHdyaXRlVGh1bmsuY29kZSgpLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpOwotI2VuZGlmCi0gICAgfQotCi0jaWYgQ1BVKEFSTTY0KSAmJiBVU0UoRVhFQ1VURV9P
TkxZX0pJVF9XUklURV9GVU5DVElPTikKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IGppdFdyaXRlVGh1bmtHZW5lcmF0b3Iodm9pZCogd3JpdGFibGVBZGRyLCB2b2lk
KiBzdHViQmFzZSwgc2l6ZV90IHN0dWJTaXplKQotICAgIHsKLSAgICAgICAgdXNpbmcgbmFtZXNw
YWNlIEFSTTY0UmVnaXN0ZXJzOwotICAgICAgICB1c2luZyBUcnVzdGVkSW1tMzIgPSBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyOwotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyIGppdDsKLQot
ICAgICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwotICAgICAgICBqaXQubW92ZShNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cih3cml0YWJsZUFkZHIpLCB4Nyk7Ci0gICAgICAgIGppdC5h
ZGRQdHIoeDcsIHgwKTsKLQotICAgICAgICBqaXQubW92ZSh4MCwgeDMpOwotICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBzbWFsbENvcHkgPSBqaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6
OkJlbG93LCB4MiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NCg2NCkpOwotCi0gICAgICAg
IGppdC5hZGQ2NChUcnVzdGVkSW1tMzIoMzIpLCB4Myk7Ci0gICAgICAgIGppdC5hbmQ2NChUcnVz
dGVkSW1tMzIoLTMyKSwgeDMpOwotICAgICAgICBqaXQubG9hZFBhaXI2NCh4MSwgeDEyLCB4MTMp
OwotICAgICAgICBqaXQubG9hZFBhaXI2NCh4MSwgVHJ1c3RlZEltbTMyKDE2KSwgeDE0LCB4MTUp
OwotICAgICAgICBqaXQuc3ViNjQoeDMsIHgwLCB4NSk7Ci0gICAgICAgIGppdC5hZGRQdHIoeDUs
IHgxKTsKLQotICAgICAgICBqaXQubG9hZFBhaXI2NCh4MSwgeDgsIHg5KTsKLSAgICAgICAgaml0
LmxvYWRQYWlyNjQoeDEsIFRydXN0ZWRJbW0zMigxNiksIHgxMCwgeDExKTsKLSAgICAgICAgaml0
LmFkZDY0KFRydXN0ZWRJbW0zMigzMiksIHgxKTsKLSAgICAgICAgaml0LnN1YjY0KHg1LCB4Mik7
Ci0gICAgICAgIGppdC5zdG9yZVBhaXI2NCh4MTIsIHgxMywgeDApOwotICAgICAgICBqaXQuc3Rv
cmVQYWlyNjQoeDE0LCB4MTUsIHgwLCBUcnVzdGVkSW1tMzIoMTYpKTsKLSAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgY2xlYW51cCA9IGppdC5icmFuY2hTdWI2NChNYWNyb0Fzc2VtYmxlcjo6
QmVsb3dPckVxdWFsLCBUcnVzdGVkSW1tMzIoNjQpLCB4Mik7Ci0KLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkxhYmVsIGNvcHlMb29wID0gaml0LmxhYmVsKCk7Ci0gICAgICAgIGppdC5zdG9yZVBh
aXI2NFdpdGhOb25UZW1wb3JhbEFjY2Vzcyh4OCwgeDksIHgzKTsKLSAgICAgICAgaml0LnN0b3Jl
UGFpcjY0V2l0aE5vblRlbXBvcmFsQWNjZXNzKHgxMCwgeDExLCB4MywgVHJ1c3RlZEltbTMyKDE2
KSk7Ci0gICAgICAgIGppdC5hZGQ2NChUcnVzdGVkSW1tMzIoMzIpLCB4Myk7Ci0gICAgICAgIGpp
dC5sb2FkUGFpcjY0V2l0aE5vblRlbXBvcmFsQWNjZXNzKHgxLCB4OCwgeDkpOwotICAgICAgICBq
aXQubG9hZFBhaXI2NFdpdGhOb25UZW1wb3JhbEFjY2Vzcyh4MSwgVHJ1c3RlZEltbTMyKDE2KSwg
eDEwLCB4MTEpOwotICAgICAgICBqaXQuYWRkNjQoVHJ1c3RlZEltbTMyKDMyKSwgeDEpOwotICAg
ICAgICBqaXQuYnJhbmNoU3ViNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBUcnVzdGVkSW1tMzIo
MzIpLCB4MikubGlua1RvKGNvcHlMb29wLCAmaml0KTsKLQotICAgICAgICBjbGVhbnVwLmxpbmso
JmppdCk7Ci0gICAgICAgIGppdC5hZGQ2NCh4MiwgeDEpOwotICAgICAgICBqaXQubG9hZFBhaXI2
NCh4MSwgeDEyLCB4MTMpOwotICAgICAgICBqaXQubG9hZFBhaXI2NCh4MSwgVHJ1c3RlZEltbTMy
KDE2KSwgeDE0LCB4MTUpOwotICAgICAgICBqaXQuc3RvcmVQYWlyNjQoeDgsIHg5LCB4Myk7Ci0g
ICAgICAgIGppdC5zdG9yZVBhaXI2NCh4MTAsIHgxMSwgeDMsIFRydXN0ZWRJbW0zMigxNikpOwot
ICAgICAgICBqaXQuYWRkUHRyKHgyLCB4Myk7Ci0gICAgICAgIGppdC5zdG9yZVBhaXI2NCh4MTIs
IHgxMywgeDMsIFRydXN0ZWRJbW0zMigzMikpOwotICAgICAgICBqaXQuc3RvcmVQYWlyNjQoeDE0
LCB4MTUsIHgzLCBUcnVzdGVkSW1tMzIoNDgpKTsKLSAgICAgICAgaml0LnJldCgpOwotCi0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb2NhbDAgPSBqaXQubGFiZWwoKTsKLSAgICAgICAg
aml0LmxvYWQ2NCh4MSwgUG9zdEluZGV4KDgpLCB4Nik7Ci0gICAgICAgIGppdC5zdG9yZTY0KHg2
LCB4MywgUG9zdEluZGV4KDgpKTsKLSAgICAgICAgc21hbGxDb3B5LmxpbmsoJmppdCk7Ci0gICAg
ICAgIGppdC5icmFuY2hTdWI2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBUcnVzdGVk
SW1tMzIoOCksIHgyKS5saW5rVG8obG9jYWwwLCAmaml0KTsKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgbG9jYWwyID0gaml0LmJyYW5jaEFkZDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwg
VHJ1c3RlZEltbTMyKDgpLCB4Mik7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb2Nh
bDEgPSBqaXQubGFiZWwoKTsKLSAgICAgICAgaml0LmxvYWQ4KHgxLCBQb3N0SW5kZXgoMSksIHg2
KTsKLSAgICAgICAgaml0LnN0b3JlOCh4NiwgeDMsIFBvc3RJbmRleCgxKSk7Ci0gICAgICAgIGpp
dC5icmFuY2hTdWI2NChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIFRydXN0ZWRJbW0zMigxKSwg
eDIpLmxpbmtUbyhsb2NhbDEsICZqaXQpOwotICAgICAgICBsb2NhbDIubGluaygmaml0KTsKLSAg
ICAgICAgaml0LnJldCgpOwotCi0gICAgICAgIGF1dG8gc3R1YkJhc2VDb2RlUHRyID0gTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPExpbmtCdWZmZXJQdHJUYWc+KHRhZ0NvZGVQdHI8TGlua0J1ZmZlclB0
clRhZz4oc3R1YkJhc2UpKTsKLSAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgc3R1
YkJhc2VDb2RlUHRyLCBzdHViU2l6ZSk7Ci0gICAgICAgIC8vIFdlIGRvbid0IHVzZSBGSU5BTEla
RV9DT0RFKCkgZm9yIHR3byByZWFzb25zLgotICAgICAgICAvLyBUaGUgZmlyc3QgaXMgdGhhdCB3
ZSBkb24ndCB3YW50IHRoZSB3cml0ZWFibGUgYWRkcmVzcywgYXMgZGlzYXNzZW1ibGVkIGluc3Ry
dWN0aW9ucywKLSAgICAgICAgLy8gdG8gYXBwZWFyIGluIHRoZSBjb25zb2xlIG9yIGFueXdoZXJl
IGluIG1lbW9yeSwgdmlhIHRoZSBQcmludFN0cmVhbSBidWZmZXIuCi0gICAgICAgIC8vIFRoZSBz
ZWNvbmQgaXMgd2UgY2FuJ3QgZ3VhcmFudGVlIHRoYXQgdGhlIGNvZGUgaXMgcmVhZGFibGUgd2hl
biB1c2luZyB0aGUKLSAgICAgICAgLy8gYXN5bmNEaXNhc3NlbWJseSBvcHRpb24gYXMgb3VyIGNh
bGxlciB3aWxsIHNldCBvdXIgcGFnZXMgZXhlY3V0ZSBvbmx5LgotICAgICAgICByZXR1cm4gbGlu
a0J1ZmZlci5maW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHk8SklUVGh1bmtQdHJUYWc+KCk7
Ci0gICAgfQotI2Vsc2UgLy8gbm90IENQVShBUk02NCkgJiYgVVNFKEVYRUNVVEVfT05MWV9KSVRf
V1JJVEVfRlVOQ1RJT04pCi0gICAgc3RhdGljIHZvaWQgZ2VuZXJpY1dyaXRlVG9KSVRSZWdpb24o
b2ZmX3Qgb2Zmc2V0LCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QgZGF0YVNpemUpCi0gICAgewot
ICAgICAgICBtZW1jcHkoKHZvaWQqKShnX2pzY0NvbmZpZy5zdGFydE9mRml4ZWRXcml0YWJsZU1l
bW9yeVBvb2wgKyBvZmZzZXQpLCBkYXRhLCBkYXRhU2l6ZSk7Ci0gICAgfQotCi0gICAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBqaXRXcml0ZVRodW5rR2VuZXJhdG9yKHZv
aWQqIGFkZHJlc3MsIHZvaWQqLCBzaXplX3QpCi0gICAgewotICAgICAgICBnX2pzY0NvbmZpZy5z
dGFydE9mRml4ZWRXcml0YWJsZU1lbW9yeVBvb2wgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4oYWRkcmVzcyk7Ci0gICAgICAgIHZvaWQqIGZ1bmN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oJmdlbmVyaWNXcml0ZVRvSklUUmVnaW9uKTsKLSNpZiBDUFUoQVJNX1RIVU1CMikKLSAg
ICAgICAgLy8gSGFuZGxlIHRodW1iIG9mZnNldAotICAgICAgICB1aW50cHRyX3QgZnVuY3Rpb25B
c0ludCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihmdW5jdGlvbik7Ci0gICAgICAgIGZ1
bmN0aW9uQXNJbnQgLT0gMTsKLSAgICAgICAgZnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PHZv
aWQqPihmdW5jdGlvbkFzSW50KTsKLSNlbmRpZgotICAgICAgICBhdXRvIGNvZGVQdHIgPSBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+KHRhZ0NGdW5jdGlvblB0cjxKSVRUaHVu
a1B0clRhZz4oZnVuY3Rpb24pKTsKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihjb2RlUHRyKTsKLSAg
ICB9Ci0jZW5kaWYgLy8gQ1BVKEFSTTY0KSAmJiBVU0UoRVhFQ1VURV9PTkxZX0pJVF9XUklURV9G
VU5DVElPTikKLQotI2Vsc2UgLy8gT1MoREFSV0lOKSAmJiBIQVZFKFJFTUFQX0pJVCkKLSAgICB2
b2lkIGluaXRpYWxpemVTZXBhcmF0ZWRXWEhlYXBzKHZvaWQqLCBzaXplX3QsIHZvaWQqLCBzaXpl
X3QpCi0gICAgewotICAgIH0KLSNlbmRpZgotCi1wcml2YXRlOgogICAgIFBhZ2VSZXNlcnZhdGlv
biBtX3Jlc2VydmF0aW9uOwogfTsKIApAQCAtNDI3LDcgKzQyMiw3IEBAIHZvaWQgRXhlY3V0YWJs
ZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZVVuZGUKIAogYm9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjpp
c1ZhbGlkKCkgY29uc3QKIHsKLSAgICBhdXRvKiBhbGxvY2F0b3IgPSBnX2pzY0NvbmZpZy5maXhl
ZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I7CisgICAgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxs
b2NhdG9yKiBhbGxvY2F0b3IgPSBnX2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxv
Y2F0b3I7CiAgICAgaWYgKCFhbGxvY2F0b3IpCiAgICAgICAgIHJldHVybiBCYXNlOjppc1ZhbGlk
KCk7CiAgICAgcmV0dXJuICEhYWxsb2NhdG9yLT5ieXRlc1Jlc2VydmVkKCk7CkBAIC00MzUsNyAr
NDMwLDcgQEAgYm9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppc1ZhbGlkKCkgY29ucwogCiBib29s
IEV4ZWN1dGFibGVBbGxvY2F0b3I6OnVuZGVyTWVtb3J5UHJlc3N1cmUoKQogewotICAgIGF1dG8q
IGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsK
KyAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNjQ29u
ZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKICAgICBpZiAoIWFsbG9jYXRvcikK
ICAgICAgICAgcmV0dXJuIEJhc2U6OnVuZGVyTWVtb3J5UHJlc3N1cmUoKTsKICAgICByZXR1cm4g
YWxsb2NhdG9yLT5ieXRlc0FsbG9jYXRlZCgpID4gYWxsb2NhdG9yLT5ieXRlc1Jlc2VydmVkKCkg
LyAyOwpAQCAtNDQzLDcgKzQzOCw3IEBAIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6dW5kZXJN
ZW1vcnlQcmUKIAogZG91YmxlIEV4ZWN1dGFibGVBbGxvY2F0b3I6Om1lbW9yeVByZXNzdXJlTXVs
dGlwbGllcihzaXplX3QgYWRkZWRNZW1vcnlVc2FnZSkKIHsKLSAgICBhdXRvKiBhbGxvY2F0b3Ig
PSBnX2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I7CisgICAgRml4ZWRW
TVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBnX2pzY0NvbmZpZy5maXhlZFZN
UG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I7CiAgICAgaWYgKCFhbGxvY2F0b3IpCiAgICAgICAgIHJl
dHVybiBCYXNlOjptZW1vcnlQcmVzc3VyZU11bHRpcGxpZXIoYWRkZWRNZW1vcnlVc2FnZSk7CiAg
ICAgQVNTRVJUKGFsbG9jYXRvci0+Ynl0ZXNBbGxvY2F0ZWQoKSA8PSBhbGxvY2F0b3ItPmJ5dGVz
UmVzZXJ2ZWQoKSk7CkBAIC00NjMsNyArNDU4LDcgQEAgZG91YmxlIEV4ZWN1dGFibGVBbGxvY2F0
b3I6Om1lbW9yeVByZXNzdQogCiBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gRXhlY3V0
YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJ
RCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewotICAgIGF1dG8qIGFsbG9jYXRvciA9
IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKKyAgICBGaXhlZFZN
UG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Q
b29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKICAgICBpZiAoIWFsbG9jYXRvcikKICAgICAgICAgcmV0
dXJuIEJhc2U6OmFsbG9jYXRlKHNpemVJbkJ5dGVzLCBvd25lclVJRCwgZWZmb3J0KTsKICAgICBp
ZiAoT3B0aW9uczo6bG9nRXhlY3V0YWJsZUFsbG9jYXRpb24oKSkgewpAQCAtNTEyLDcgKzUwNyw3
IEBAIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBFeGVjdXRhYmwKIAogYm9vbCBFeGVj
dXRhYmxlQWxsb2NhdG9yOjppc1ZhbGlkRXhlY3V0YWJsZU1lbW9yeShjb25zdCBBYnN0cmFjdExv
Y2tlciYgbG9ja2VyLCB2b2lkKiBhZGRyZXNzKQogewotICAgIGF1dG8qIGFsbG9jYXRvciA9IGdf
anNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKKyAgICBGaXhlZFZNUG9v
bEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29s
RXhlY3V0YWJsZUFsbG9jYXRvcjsKICAgICBpZiAoIWFsbG9jYXRvcikKICAgICAgICAgcmV0dXJu
IEJhc2U6OmlzVmFsaWRFeGVjdXRhYmxlTWVtb3J5KGxvY2tlciwgYWRkcmVzcyk7CiAgICAgcmV0
dXJuIGFsbG9jYXRvci0+aXNJbkFsbG9jYXRlZE1lbW9yeShsb2NrZXIsIGFkZHJlc3MpOwpAQCAt
NTIwLDcgKzUxNSw3IEBAIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aXNWYWxpZEV4ZWN1dGEK
IAogTG9jayYgRXhlY3V0YWJsZUFsbG9jYXRvcjo6Z2V0TG9jaygpIGNvbnN0CiB7Ci0gICAgYXV0
byogYWxsb2NhdG9yID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9y
OworICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogYWxsb2NhdG9yID0gZ19qc2ND
b25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOwogICAgIGlmICghYWxsb2NhdG9y
KQogICAgICAgICByZXR1cm4gQmFzZTo6Z2V0TG9jaygpOwogICAgIHJldHVybiBhbGxvY2F0b3It
PmdldExvY2soKTsKQEAgLTUyOCw3ICs1MjMsNyBAQCBMb2NrJiBFeGVjdXRhYmxlQWxsb2NhdG9y
OjpnZXRMb2NrKCkgY29uCiAKIHNpemVfdCBFeGVjdXRhYmxlQWxsb2NhdG9yOjpjb21taXR0ZWRC
eXRlQ291bnQoKQogewotICAgIGF1dG8qIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Q
b29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKKyAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0
b3IqIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRv
cjsKICAgICBpZiAoIWFsbG9jYXRvcikKICAgICAgICAgcmV0dXJuIEJhc2U6OmNvbW1pdHRlZEJ5
dGVDb3VudCgpOwogICAgIHJldHVybiBhbGxvY2F0b3ItPmJ5dGVzQ29tbWl0dGVkKCk7CkBAIC01
MzcsNyArNTMyLDcgQEAgc2l6ZV90IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmNvbW1pdHRlZEJ5dAog
I2lmIEVOQUJMRShNRVRBX0FMTE9DQVRPUl9QUk9GSUxFKQogdm9pZCBFeGVjdXRhYmxlQWxsb2Nh
dG9yOjpkdW1wUHJvZmlsZSgpCiB7Ci0gICAgYXV0byogYWxsb2NhdG9yID0gZ19qc2NDb25maWcu
Zml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOworICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJs
ZUFsbG9jYXRvciogYWxsb2NhdG9yID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxl
QWxsb2NhdG9yOwogICAgIGlmICghYWxsb2NhdG9yKQogICAgICAgICByZXR1cm47CiAgICAgYWxs
b2NhdG9yLT5kdW1wUHJvZmlsZSgpOwpAQCAtNTQ2LDcgKzU0MSw3IEBAIHZvaWQgRXhlY3V0YWJs
ZUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUoKQogCiB2b2lkKiBzdGFydE9mRml4ZWRFeGVjdXRhYmxl
TWVtb3J5UG9vbEltcGwoKQogewotICAgIGF1dG8qIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZp
eGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKKyAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVB
bGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFs
bG9jYXRvcjsKICAgICBpZiAoIWFsbG9jYXRvcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgcmV0dXJuIGFsbG9jYXRvci0+bWVtb3J5U3RhcnQoKTsKQEAgLTU1NCw3ICs1NDksNyBAQCB2
b2lkKiBzdGFydE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbEltCiAKIHZvaWQqIGVuZE9mRml4
ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbEltcGwoKQogewotICAgIGF1dG8qIGFsbG9jYXRvciA9IGdf
anNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKKyAgICBGaXhlZFZNUG9v
bEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29s
RXhlY3V0YWJsZUFsbG9jYXRvcjsKICAgICBpZiAoIWFsbG9jYXRvcikKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgcmV0dXJuIGFsbG9jYXRvci0+bWVtb3J5RW5kKCk7CkBAIC01NjIsNyAr
NTU3LDcgQEAgdm9pZCogZW5kT2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sSW1wbAogCiBib29s
IGlzSklUUEModm9pZCogcGMpCiB7Ci0gICAgYXV0byogYWxsb2NhdG9yID0gZ19qc2NDb25maWcu
Zml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOworICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJs
ZUFsbG9jYXRvciogYWxsb2NhdG9yID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxl
QWxsb2NhdG9yOwogICAgIHJldHVybiBhbGxvY2F0b3IgJiYgYWxsb2NhdG9yLT5pc0pJVFBDKHBj
KTsKIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>