<?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>121374</bug_id>
          
          <creation_ts>2013-09-14 18:21:00 -0700</creation_ts>
          <short_desc>Deoptimize deoptimization: make DFGOSRExitCompiler64.cpp more hackable</short_desc>
          <delta_ts>2013-09-27 11:38:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>121064</blocked>
    
    <blocked>122025</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-ews</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>929338</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-14 18:21:00 -0700</bug_when>
    <thetext>It used to be the case that OSR exits happened a lot, and we sometimes let them happen roughly in proportion to the number of times that a function completed successfully.  This was a long time ago - before we had good reoptimization heuristics and before we got our act together in other ways.  Now we don&apos;t OSR exit that much.  More than ~100 exits means that we reoptimize.  Hence while we want OSR exit to not be terribly slow and it still makes sense to emit JIT code for it, we don&apos;t really care if it makes great use of registers or anything like that.

But right now the OSRExitCompiler is still soooper optimized, and that makes the code hard to hack.  This makes adding new kinds of data formats, which the exit compiler must know about, rather difficult.  For example I couldn&apos;t figure out a good way of adding Int48 recoveries without either copy-pasting code or just adding a lot of confusing code paths.

So, the best thing to do is probably to rewrite the exit compiler to be a lot dumber.  The plan is to make it first dump all state into a scratch buffer (even if it&apos;s already in the stack in the right place!) and then dump back from the scratch buffer into the stack while performing the recoveries.  This will allow for example combining the code for reboxing an int that was in the stack in the right place, in the stack in the wrong place, or in a register - all of those cases will work the same now, which is pretty awesome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>929339</commentid>
    <comment_count>1</comment_count>
      <attachid>211678</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-14 18:21:36 -0700</bug_when>
    <thetext>Created attachment 211678
this is just the start</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>929344</commentid>
    <comment_count>2</comment_count>
      <attachid>211681</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-14 21:01:58 -0700</bug_when>
    <thetext>Created attachment 211681
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>929345</commentid>
    <comment_count>3</comment_count>
      <attachid>211681</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-09-14 21:11:08 -0700</bug_when>
    <thetext>Comment on attachment 211681
the patch

Attachment 211681 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/1861597</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>929346</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-14 21:14:15 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 211681 [details])
&gt; Attachment 211681 [details] did not pass efl-wk2-ews (efl-wk2):
&gt; Output: http://webkit-queues.appspot.com/results/1861597

That&apos;s easy to fix.  Just remove the variable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>929348</commentid>
    <comment_count>5</comment_count>
      <attachid>211681</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-09-14 21:24:07 -0700</bug_when>
    <thetext>Comment on attachment 211681
the patch

Attachment 211681 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/1817575</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>929353</commentid>
    <comment_count>6</comment_count>
      <attachid>211681</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-09-14 21:51:25 -0700</bug_when>
    <thetext>Comment on attachment 211681
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>929396</commentid>
    <comment_count>7</comment_count>
      <attachid>211681</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-09-15 02:16:48 -0700</bug_when>
    <thetext>Comment on attachment 211681
the patch

Attachment 211681 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/1878611</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>929397</commentid>
    <comment_count>8</comment_count>
      <attachid>211681</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-09-15 02:18:42 -0700</bug_when>
    <thetext>Comment on attachment 211681
the patch

Attachment 211681 did not pass qt-wk2-ews (qt-wk2):
Output: http://webkit-queues.appspot.com/results/1817643</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>929458</commentid>
    <comment_count>9</comment_count>
      <attachid>211715</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-15 11:02:23 -0700</bug_when>
    <thetext>Created attachment 211715
patch for landing

Just checking if I fixed the build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>929478</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-15 11:54:39 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/155820</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211678</attachid>
            <date>2013-09-14 18:21:36 -0700</date>
            <delta_ts>2013-09-14 21:01:58 -0700</delta_ts>
            <desc>this is just the start</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>5010</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3Zlcnku
aAkocmV2aXNpb24gMTU1Nzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Zh
bHVlUmVjb3ZlcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMzM2LDEwICszMzYsOCBAQCBwdWJsaWM6
CiAgICAgICAgIGNhc2UgRG9udEtub3c6CiAgICAgICAgICAgICBvdXQucHJpbnRmKCIhIik7CiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIG91dC5wcmlu
dGYoIj8lZCIsIHRlY2huaXF1ZSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAgIAogcHJpdmF0
ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENv
bXBpbGVyNjQuY3BwCShyZXZpc2lvbiAxNTU3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDYgKzE1
MCwxMDggQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgICAg
ICB9CiAgICAgfQogCisgICAgLy8gNCkgU2F2ZSBhbGwgc3RhdGUgZnJvbSBHUFJzIGludG8gdGhl
IHNjcmF0Y2ggYnVmZmVyLgorICAgIAorICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIg
PSBtX2ppdC52bSgpLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplb2YoRW5jb2RlZEpTVmFsdWUp
ICogb3BlcmFuZHMuc2l6ZSgpKTsKKyAgICBFbmNvZGVkSlNWYWx1ZSogc2NyYXRjaCA9IHNjcmF0
Y2hCdWZmZXIgPyBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRh
dGFCdWZmZXIoKSkgPyAwOworICAgIAorICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXgg
PCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVy
eSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07CisgICAgICAgIGludCBvcGVyYW5kID0gb3Bl
cmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAo
cmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAgICAgICAgY2FzZSBJbkdQUjoKKyAgICAgICAgY2Fz
ZSBVbmJveGVkSW50MzJJbkdQUjoKKyAgICAgICAgY2FzZSBVaW50MzJJbkdQUjoKKyAgICAgICAg
ICAgIG1faml0LnN0b3JlNjQocmVjb3ZlcnkuZ3ByKCksIHNjcmF0Y2ggKyBpbmRleCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gQW5kIHZvaWxhLCBhbGwg
cmVnaXN0ZXJzIGFyZSBmcmVlIHRvIHJldXNlLgorICAgIAorICAgIC8vIDUpIFNhdmUgYWxsIHN0
YXRlIGZyb20gRlBScyBpbnRvIHRoZSBzY3JhdGNoIGJ1ZmZlci4KKyAgICAKKyAgICBmb3IgKHNp
emVfdCBpbmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAg
ICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOworICAg
ICAgICBpbnQgb3BlcmFuZCA9IG9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCk7CisgICAg
ICAgIAorICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CisgICAgICAgIGNh
c2UgSW5GUFI6CisgICAgICAgICAgICBtX2ppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihzY3JhdGNoICsgaW5kZXgpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBt
X2ppdC5zdG9yZURvdWJsZShyZWNvdmVyeS5mcHIoKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIDUpIFNhdmUgYWxsIHN0YXRl
IGZyb20gdGhlIHN0YWNrIGludG8gdGhlIHNjcmF0Y2ggYnVmZmVyLiBGb3Igc2ltcGxpY2l0eSB3
ZQorICAgIC8vICAgIGRvIHRoaXMgZXZlbiBmb3Igc3RhdGUgdGhhdCdzIGFscmVhZHkgaW4gdGhl
IHJpZ2h0IHBsYWNlIG9uIHRoZSBzdGFjay4KKyAgICAvLyAgICBJdCBtYWtlcyB0aGluZ3Mgc2lt
cGxlciBsYXRlci4KKworICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5k
cy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3Zl
cnkgPSBvcGVyYW5kc1tpbmRleF07CisgICAgICAgIGludCBvcGVyYW5kID0gb3BlcmFuZHMub3Bl
cmFuZEZvckluZGV4KGluZGV4KTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAocmVjb3Zlcnku
dGVjaG5pcXVlKCkpIHsKKyAgICAgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAg
IGNhc2UgSW50MzJEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAgIGNhc2UgRG91YmxlRGlzcGxh
Y2VkSW5KU1N0YWNrOgorICAgICAgICAgICAgbV9qaXQubG9hZDY0KEFzc2VtYmx5SGVscGVyczo6
YWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnJlZ1QwKTsK
KyAgICAgICAgICAgIG1faml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIHNjcmF0Y2ggKyBpbmRl
eCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFscmVh
ZHlJbkpTU3RhY2tBc1VuYm94ZWRJbnQzMjoKKyAgICAgICAgY2FzZSBBbHJlYWR5SW5KU1N0YWNr
QXNVbmJveGVkRG91YmxlOgorICAgICAgICAgICAgbV9qaXQubG9hZDY0KEFzc2VtYmx5SGVscGVy
czphZGRyZXNzRm9yKG9wZXJhbmQpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBtX2pp
dC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBzY3JhdGNoICsgaW5kZXgpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gNikgRG8gYWxsIGRhdGEgZm9y
bWF0IGNvbnZlcnNpb25zIGFuZCBzdG9yZSB0aGUgcmVzdWx0cyBpbnRvIHRoZSBzdGFjay4KKyAg
ICAKKyAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGlkbmV4IDwgb3BlcmFuZHMuc2l6ZSgpOyAr
K2luZGV4KSB7CisgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFu
ZHNbaW5kZXhdOworICAgICAgICBpbnQgb3BlcmFuZCA9IG9wZXJhbmRzLm9wZXJhbmRGb3JJbmRl
eChpbmRleCk7CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgp
KSB7CisgICAgICAgIGNhc2UgSW5HUFI6CisgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNr
OgorICAgICAgICAgICAgbV9qaXQubG9hZDY0KHNjcmF0Y2ggKyBpbmRleCwgR1BSSW5mbzo6cmVn
VDApOworICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlI
ZWxwZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgQWxyZWFkeUluSlNTdGFja0FzVW5ib3hlZEludDMyOgorICAg
ICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgorICAgICAgICAgICAgbV9qaXQubG9hZDY0KHNj
cmF0Y2ggKyBpbmRleCwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgbV9qaXQuemVyb0V4
dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAg
IG1faml0Lm9yNjQoR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMCk7Cisg
ICAgICAgICAgICBtX2ppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6
OmFkZHJlc3NGb3Iob3BlcmFuZCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBBbHJlYWR5SW5KU1N0YWNrQXNVbmJveGVkRG91YmxlOgorICAgICAgICBj
YXNlIEluRlBSOgorICAgICAgICAgICAgbV9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoc2NyYXRjaCArIGluZGV4KSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAg
bV9qaXQubG9hZERvdWJsZShHUFJJbmZvOjpyZWdUMCwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAg
ICAgICAgICBtX2ppdC5ib3hEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgR1BSSW5mbzo6cmVnVDAp
OworICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxw
ZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgVUludDMySW5HUFI6CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQ29uc3RhbnQ6CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKICAgICAvLyA0KSBGaWd1cmUgb3V0IGhv
dyBtYW55IHNjcmF0Y2ggc2xvdHMgd2UnbGwgbmVlZC4gV2UgbmVlZCBvbmUgZm9yIGV2ZXJ5IEdQ
Ui9GUFIKICAgICAvLyAgICB3aG9zZSBkZXN0aW5hdGlvbiBpcyBub3cgb2NjdXBpZWQgYnkgYSBE
RkcgdmlydHVhbCByZWdpc3RlciwgYW5kIHdlIG5lZWQKICAgICAvLyAgICBvbmUgZm9yIGV2ZXJ5
IGRpc3BsYWNlZCB2aXJ0dWFsIHJlZ2lzdGVyIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211681</attachid>
            <date>2013-09-14 21:01:58 -0700</date>
            <delta_ts>2013-09-15 11:02:23 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>35519</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU1Nzk0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBA
CisyMDEzLTA5LTE0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RGVvcHRpbWl6ZSBkZW9wdGltaXphdGlvbjogbWFrZSBERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAg
bW9yZSBoYWNrYWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTIxMzc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAg
ICAgIAorICAgICAgICBUaGlzIHJlZHVjZXMgdGhlIHNpemUgb2YgREZHT1NSRXhpdENvbXBpbGVy
NjQuY3BwIGJ5IGFsbW9zdCA1MCUsIGFuZCBtYWtlcyBpdAorICAgICAgICBzdXBlciBlYXN5IHRv
IGFkZCBuZXcgcmVjb3Zlcnkga2luZHMuIEZvciByZWNvdmVyaWVzIHRoYXQgaW52b2x2ZSByZWJv
eGluZywgaXQKKyAgICAgICAgYWxsb3dzIHlvdSB0byBrZWVwIG1vc3Qgb2YgdGhlIGNvZGUgY29t
bW9uIGJldHdlZW4gdGhlIG9uLXN0YWNrIGFuZCBpbi1yZWcKKyAgICAgICAgY2FzZXM6IHRoZXkg
YWxsIGdldCBmdW5uZWxlZCB0aHJvdWdoIHRoZSAibG9hZCBmcm9tIHNjcmF0Y2ggYnVmZmVyLCBj
b252ZXJ0LAorICAgICAgICBhbmQgdGhlbiBzdG9yZSB0byBzdGFjayIgbG9naWMuCisgICAgICAg
IAorICAgICAgICBUaGlzIG9wZW5zIHVwIGEgYnVuY2ggb2YgcG9zc2liaWxpdGllcy4gSXQnbGwg
bWFrZSBhZGRpbmcgSW50NDggbXVjaCBlYXNpZXIsCisgICAgICAgIGFuZCBpdCBwcm9iYWJseSB3
aWxsIGNvbWUgaW4gaGFuZHkgYXMgd2UgZG8gdmFyaW91cyBERkcgc3RhY2sgbGF5b3V0IGNoYW5n
ZXMgaW4KKyAgICAgICAgc3VwcG9ydCBvZiB0aGUgRlRMLgorCisgICAgICAgICogYnl0ZWNvZGUv
VmFsdWVSZWNvdmVyeS5oOgorICAgICAgICAoSlNDOjpWYWx1ZVJlY292ZXJ5OjpkdW1wSW5Db250
ZXh0KToKKyAgICAgICAgKEpTQzo6VmFsdWVSZWNvdmVyeTo6ZHVtcCk6CisgICAgICAgICogZGZn
L0RGR09TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6c2hvcnRPcGVyYW5k
c0R1bXApOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6T1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdCk6CisKIDIwMTMtMDktMTQg
IEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBJdCBzaG91bGQgYmUg
ZWFzeSB0byBhZGQgbmV3IG5vZGVzIHRoYXQgZG8gT1NSIGZvcndhcmQgcmV3aXJpbmcgaW4gYm90
aCBERkcgYW5kIEZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UmVjb3ZlcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VmFsdWVSZWNvdmVyeS5oCShyZXZpc2lvbiAxNTU3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw4
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitzdHJ1Y3QgRHVtcENvbnRleHQ7CisKIC8vIERlc2Ny
aWJlcyBob3cgdG8gcmVjb3ZlciBhIGdpdmVuIGJ5dGVjb2RlIHZpcnR1YWwgcmVnaXN0ZXIgYXQg
YSBnaXZlbgogLy8gY29kZSBwb2ludC4KIGVudW0gVmFsdWVSZWNvdmVyeVRlY2huaXF1ZSB7CkBA
IC0yNzQsNzIgKzI3Niw3NSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpkZWNv
ZGUobV9zb3VyY2UuY29uc3RhbnQpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91
dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CiAgICAgewogICAgICAgICBzd2l0Y2ggKHRl
Y2huaXF1ZSgpKSB7CiAgICAgICAgIGNhc2UgQWxyZWFkeUluSlNTdGFjazoKICAgICAgICAgICAg
IG91dC5wcmludGYoIi0iKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICBjYXNlIEFscmVhZHlJbkpTU3RhY2tBc1VuYm94ZWRJbnQzMjoKICAgICAgICAg
ICAgIG91dC5wcmludGYoIihpbnQzMikiKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICBjYXNlIEFscmVhZHlJbkpTU3RhY2tBc1VuYm94ZWRDZWxsOgog
ICAgICAgICAgICAgb3V0LnByaW50ZigiKGNlbGwpIik7Ci0gICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBBbHJlYWR5SW5KU1N0YWNrQXNVbmJveGVk
Qm9vbGVhbjoKICAgICAgICAgICAgIG91dC5wcmludGYoIihib29sKSIpOwotICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgQWxyZWFkeUluSlNTdGFj
a0FzVW5ib3hlZERvdWJsZToKICAgICAgICAgICAgIG91dC5wcmludGYoIihkb3VibGUpIik7Ci0g
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBJbkdQ
UjoKICAgICAgICAgICAgIG91dC5wcmludGYoIiUlciVkIiwgZ3ByKCkpOwotICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5H
UFI6CiAgICAgICAgICAgICBvdXQucHJpbnRmKCJpbnQzMiglJXIlZCkiLCBncHIoKSk7Ci0gICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBVbmJveGVk
Qm9vbGVhbkluR1BSOgogICAgICAgICAgICAgb3V0LnByaW50ZigiYm9vbCglJXIlZCkiLCBncHIo
KSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2Fz
ZSBVSW50MzJJbkdQUjoKICAgICAgICAgICAgIG91dC5wcmludGYoInVpbnQzMiglJXIlZCkiLCBn
cHIoKSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
Y2FzZSBJbkZQUjoKICAgICAgICAgICAgIG91dC5wcmludGYoIiUlZnIlZCIsIGZwcigpKTsKLSAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuOwogI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCiAgICAgICAgIGNhc2UgSW5QYWlyOgogICAgICAgICAgICAgb3V0LnByaW50ZigicGFpcigl
JXIlZCwgJSVyJWQpIiwgdGFnR1BSKCksIHBheWxvYWRHUFIoKSk7Ci0gICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIHJldHVybjsKICNlbmRpZgogICAgICAgICBjYXNlIERpc3BsYWNlZElu
SlNTdGFjazoKICAgICAgICAgICAgIG91dC5wcmludGYoIiolZCIsIHZpcnR1YWxSZWdpc3Rlcigp
KTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNl
IEludDMyRGlzcGxhY2VkSW5KU1N0YWNrOgogICAgICAgICAgICAgb3V0LnByaW50ZigiKmludDMy
KCVkKSIsIHZpcnR1YWxSZWdpc3RlcigpKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluSlNTdGFjazoKICAgICAg
ICAgICAgIG91dC5wcmludGYoIipkb3VibGUoJWQpIiwgdmlydHVhbFJlZ2lzdGVyKCkpOwotICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgQ2VsbERp
c3BsYWNlZEluSlNTdGFjazoKICAgICAgICAgICAgIG91dC5wcmludGYoIipjZWxsKCVkKSIsIHZp
cnR1YWxSZWdpc3RlcigpKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICBjYXNlIEJvb2xlYW5EaXNwbGFjZWRJbkpTU3RhY2s6CiAgICAgICAgICAgICBv
dXQucHJpbnRmKCIqYm9vbCglZCkiLCB2aXJ0dWFsUmVnaXN0ZXIoKSk7Ci0gICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBBcmd1bWVudHNUaGF0V2Vy
ZU5vdENyZWF0ZWQ6CiAgICAgICAgICAgICBvdXQucHJpbnRmKCJhcmd1bWVudHMiKTsKLSAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNlIENvbnN0YW50
OgotICAgICAgICAgICAgb3V0LnByaW50KCJbIiwgY29uc3RhbnQoKSwgIl0iKTsKLSAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgb3V0LnByaW50KCJbIiwgaW5Db250ZXh0KGNvbnN0YW50
KCksIGNvbnRleHQpLCAiXSIpOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNlIERv
bnRLbm93OgogICAgICAgICAgICAgb3V0LnByaW50ZigiISIpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCI/JWQiLCB0ZWNobmlx
dWUoKSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGR1bXBJ
bkNvbnRleHQob3V0LCAwKTsKICAgICB9CiAgICAgCiBwcml2YXRlOgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHJldmlz
aW9uIDE1NTc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBp
bGVyNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsOTAgKzE1MCwxOSBAQCB2b2lkIE9TUkV4
aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgIH0KICAgICB9CiAKLSAgICAv
LyA0KSBGaWd1cmUgb3V0IGhvdyBtYW55IHNjcmF0Y2ggc2xvdHMgd2UnbGwgbmVlZC4gV2UgbmVl
ZCBvbmUgZm9yIGV2ZXJ5IEdQUi9GUFIKLSAgICAvLyAgICB3aG9zZSBkZXN0aW5hdGlvbiBpcyBu
b3cgb2NjdXBpZWQgYnkgYSBERkcgdmlydHVhbCByZWdpc3RlciwgYW5kIHdlIG5lZWQKLSAgICAv
LyAgICBvbmUgZm9yIGV2ZXJ5IGRpc3BsYWNlZCB2aXJ0dWFsIHJlZ2lzdGVyIGlmIHRoZXJlIGFy
ZSBtb3JlIHRoYW4KLSAgICAvLyAgICBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyBvZiB0aGVt
LiBBbHNvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGNvbnN0YW50cywKLSAgICAvLyAgICBhbnkgdW5k
ZWZpbmVkIHNsb3RzLCBhbnkgRlBSIHNsb3RzLCBhbmQgYW55IHVuYm94ZWQgaW50cy4KLSAgICAg
ICAgICAgIAotICAgIFZlY3Rvcjxib29sPiBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMob3BlcmFu
ZHMubnVtYmVyT2ZMb2NhbHMoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBvaXNv
bmVkVmlydHVhbFJlZ2lzdGVycy5zaXplKCk7ICsraSkKLSAgICAgICAgcG9pc29uZWRWaXJ0dWFs
UmVnaXN0ZXJzW2ldID0gZmFsc2U7Ci0KLSAgICB1bnNpZ25lZCBudW1iZXJPZlBvaXNvbmVkVmly
dHVhbFJlZ2lzdGVycyA9IDA7Ci0gICAgdW5zaWduZWQgbnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFs
UmVnaXN0ZXJzID0gMDsKKyAgICAvLyA0KSBTYXZlIGFsbCBzdGF0ZSBmcm9tIEdQUnMgaW50byB0
aGUgc2NyYXRjaCBidWZmZXIuCiAgICAgCi0gICAgLy8gQm9vbGVhbnMgZm9yIGZhc3QgY2hlY2tz
LiBXZSBleHBlY3QgdGhhdCBtb3N0IE9TUiBleGl0cyBkbyBub3QgaGF2ZSB0byByZWJveAotICAg
IC8vIEludDMycywgaGF2ZSBubyBGUFJzLCBhbmQgaGF2ZSBubyBjb25zdGFudHMuIElmIHRoZXJl
IGFyZSBjb25zdGFudHMsIHdlCi0gICAgLy8gZXhwZWN0IG1vc3Qgb2YgdGhlbSB0byBiZSBqc1Vu
ZGVmaW5lZCgpOyBpZiB0aGF0J3MgdHJ1ZSB0aGVuIHdlIGhhbmRsZSB0aGF0Ci0gICAgLy8gc3Bl
Y2lhbGx5IHRvIG1pbmltaXplIGNvZGUgc2l6ZSBhbmQgZXhlY3V0aW9uIHRpbWUuCi0gICAgYm9v
bCBoYXZlVW5ib3hlZEludDMycyA9IGZhbHNlOwotICAgIGJvb2wgaGF2ZVVuYm94ZWREb3VibGVz
ID0gZmFsc2U7Ci0gICAgYm9vbCBoYXZlRlBScyA9IGZhbHNlOwotICAgIGJvb2wgaGF2ZUNvbnN0
YW50cyA9IGZhbHNlOwotICAgIGJvb2wgaGF2ZVVuZGVmaW5lZCA9IGZhbHNlOwotICAgIGJvb2wg
aGF2ZVVJbnQzMnMgPSBmYWxzZTsKLSAgICBib29sIGhhdmVBcmd1bWVudHMgPSBmYWxzZTsKKyAg
ICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gbV9qaXQudm0oKS0+c2NyYXRjaEJ1ZmZl
ckZvclNpemUoc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG9wZXJhbmRzLnNpemUoKSk7CisgICAg
RW5jb2RlZEpTVmFsdWUqIHNjcmF0Y2ggPSBzY3JhdGNoQnVmZmVyID8gc3RhdGljX2Nhc3Q8RW5j
b2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpIDogMDsKICAgICAKICAg
ICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4
KSB7CiAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5k
ZXhdOworICAgICAgICAKICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewot
ICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICBjYXNlIERvdWJs
ZURpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6IHsK
LSAgICAgICAgICAgIG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycysrOwotICAgICAg
ICAgICAgQVNTRVJUKG9wZXJhbmRJc0xvY2FsKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSBtaWdodCBsaWtlIHRvIHN0
b3JlIHRvIHRoaXMgdmlydHVhbCByZWdpc3RlciBiZWZvcmUgZG9pbmcKLSAgICAgICAgICAgIC8v
IHZpcnR1YWwgcmVnaXN0ZXIgc2h1ZmZsaW5nLiBJZiBzbywgd2Ugc2F5IHRoYXQgdGhlIHZpcnR1
YWwgcmVnaXN0ZXIKLSAgICAgICAgICAgIC8vIGlzIHBvaXNvbmVkOiBpdCBjYW5ub3QgYmUgc3Rv
cmVkIHRvIHVudGlsIGFmdGVyIGRpc3BsYWNlZCB2aXJ0dWFsCi0gICAgICAgICAgICAvLyByZWdp
c3RlcnMgYXJlIGhhbmRsZWQuIFdlIHRyYWNrIHBvaXNvbmVkIHZpcnR1YWwgcmVnaXN0ZXIgY2Fy
ZWZ1bGx5Ci0gICAgICAgICAgICAvLyB0byBlbnN1cmUgdGhpcyBoYXBwZW5zIGVmZmljaWVudGx5
LiBOb3RlIHRoYXQgd2UgZXhwZWN0IHRoaXMgY2FzZQotICAgICAgICAgICAgLy8gdG8gYmUgcmFy
ZSwgc28gdGhlIGhhbmRsaW5nIG9mIGl0IGlzIG9wdGltaXplZCBmb3IgdGhlIGNhc2VzIGluCi0g
ICAgICAgICAgICAvLyB3aGljaCBpdCBkb2VzIG5vdCBoYXBwZW4uCi0gICAgICAgICAgICBpbnQg
bG9jYWwgPSBvcGVyYW5kVG9Mb2NhbChyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSk7Ci0gICAg
ICAgICAgICBpZiAobG9jYWwgPCAoaW50KW9wZXJhbmRzLm51bWJlck9mTG9jYWxzKCkpIHsKLSAg
ICAgICAgICAgICAgICBzd2l0Y2ggKG9wZXJhbmRzLmxvY2FsKGxvY2FsKS50ZWNobmlxdWUoKSkg
ewotICAgICAgICAgICAgICAgIGNhc2UgSW5HUFI6Ci0gICAgICAgICAgICAgICAgY2FzZSBVbmJv
eGVkSW50MzJJbkdQUjoKLSAgICAgICAgICAgICAgICBjYXNlIFVJbnQzMkluR1BSOgotICAgICAg
ICAgICAgICAgIGNhc2UgSW5GUFI6Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcG9pc29uZWRW
aXJ0dWFsUmVnaXN0ZXJzW2xvY2FsXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcG9pc29u
ZWRWaXJ0dWFsUmVnaXN0ZXJzW2xvY2FsXSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycysrOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgICAgICBjYXNlIElu
R1BSOgogICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgotICAgICAgICBjYXNlIEFscmVh
ZHlJbkpTU3RhY2tBc1VuYm94ZWRJbnQzMjoKLSAgICAgICAgICAgIGhhdmVVbmJveGVkSW50MzJz
ID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ug
QWxyZWFkeUluSlNTdGFja0FzVW5ib3hlZERvdWJsZToKLSAgICAgICAgICAgIGhhdmVVbmJveGVk
RG91YmxlcyA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIFVJbnQzMkluR1BSOgotICAgICAgICAgICAgaGF2ZVVJbnQzMnMgPSB0cnVlOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBJbkZQUjoKLSAgICAg
ICAgICAgIGhhdmVGUFJzID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Ci0gICAgICAgIGNhc2UgQ29uc3RhbnQ6Ci0gICAgICAgICAgICBoYXZlQ29uc3RhbnRzID0gdHJ1
ZTsKLSAgICAgICAgICAgIGlmIChyZWNvdmVyeS5jb25zdGFudCgpLmlzVW5kZWZpbmVkKCkpCi0g
ICAgICAgICAgICAgICAgaGF2ZVVuZGVmaW5lZCA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoK
LSAgICAgICAgICAgIGhhdmVBcmd1bWVudHMgPSB0cnVlOworICAgICAgICAgICAgbV9qaXQuc3Rv
cmU2NChyZWNvdmVyeS5ncHIoKSwgc2NyYXRjaCArIGluZGV4KTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6CkBAIC0yNDEsMzY3ICsxNzAsMTY0IEBA
IHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAgfQogICAg
IH0KICAgICAKLSNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgZGF0YUxvZ0YoIiAg
Iik7Ci0gICAgaWYgKG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzKQotICAgICAgICBk
YXRhTG9nRigiUG9pc29uZWQ9JXUgIiwgbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMp
OwotICAgIGlmIChudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMpCi0gICAgICAgIGRh
dGFMb2dGKCJEaXNwbGFjZWQ9JXUgIiwgbnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJz
KTsKLSAgICBpZiAoaGF2ZVVuYm94ZWRJbnQzMnMpCi0gICAgICAgIGRhdGFMb2dGKCJVbmJveGVk
SW50MzIgIik7Ci0gICAgaWYgKGhhdmVVbmJveGVkRG91YmxlcykKLSAgICAgICAgZGF0YUxvZ0Yo
IlVuYm94ZWREb3VibGVzICIpOwotICAgIGlmIChoYXZlVUludDMycykKLSAgICAgICAgZGF0YUxv
Z0YoIlVJbnQzMiAiKTsKLSAgICBpZiAoaGF2ZUZQUnMpCi0gICAgICAgIGRhdGFMb2dGKCJGUFIg
Iik7Ci0gICAgaWYgKGhhdmVDb25zdGFudHMpCi0gICAgICAgIGRhdGFMb2dGKCJDb25zdGFudHMg
Iik7Ci0gICAgaWYgKGhhdmVVbmRlZmluZWQpCi0gICAgICAgIGRhdGFMb2dGKCJVbmRlZmluZWQg
Iik7Ci0gICAgZGF0YUxvZ0YoIiAiKTsKLSNlbmRpZgotICAgIAotICAgIFNjcmF0Y2hCdWZmZXIq
IHNjcmF0Y2hCdWZmZXIgPSBtX2ppdC52bSgpLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpICogc3RkOjptYXgoaGF2ZVVJbnQzMnMgPyAydSA6IDB1LCBudW1iZXJP
ZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyArIChudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdp
c3RlcnMgPD0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPyAwIDogbnVtYmVyT2ZEaXNwbGFj
ZWRWaXJ0dWFsUmVnaXN0ZXJzKSkpOwotICAgIEVuY29kZWRKU1ZhbHVlKiBzY3JhdGNoRGF0YUJ1
ZmZlciA9IHNjcmF0Y2hCdWZmZXIgPyBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0
Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgOiAwOwotCi0gICAgLy8gRnJvbSBoZXJlIG9uLCB0aGUg
Y29kZSBhc3N1bWVzIHRoYXQgaXQgaXMgcHJvZml0YWJsZSB0byBtYXhpbWl6ZSB0aGUgZGlzdGFu
Y2UKLSAgICAvLyBiZXR3ZWVuIHdoZW4gc29tZXRoaW5nIGlzIGNvbXB1dGVkIGFuZCB3aGVuIGl0
IGlzIHN0b3JlZC4KLSAgICAKLSAgICAvLyA1KSBQZXJmb3JtIGFsbCByZWJveGluZyBvZiBpbnRl
Z2Vycy4KLSAgICAKLSAgICBpZiAoaGF2ZVVuYm94ZWRJbnQzMnMgfHwgaGF2ZVVJbnQzMnMpIHsK
LSAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsg
KytpbmRleCkgewotICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBv
cGVyYW5kc1tpbmRleF07Ci0gICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgp
KSB7Ci0gICAgICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgotICAgICAgICAgICAgICAg
IGlmIChyZWNvdmVyeS5ncHIoKSAhPSBhbHJlYWR5Qm94ZWQpCi0gICAgICAgICAgICAgICAgICAg
IG1faml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWNvdmVyeS5ncHIo
KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICBjYXNlIEFscmVhZHlJbkpTU3RhY2tBc1VuYm94ZWRJbnQzMjoKLSAgICAgICAgICAgICAgICBt
X2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVp
bnQzMl90PihUYWdUeXBlTnVtYmVyID4+IDMyKSksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKHN0
YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4
KSkpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGNhc2UgVUludDMySW5HUFI6IHsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIG9jY3VycyB3
aGVuIHRoZSBzcGVjdWxhdGl2ZSBKSVQgbGVmdCBhbiB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlcgot
ICAgICAgICAgICAgICAgIC8vIGluIGEgR1BSLiBJZiBpdCdzIHBvc2l0aXZlLCB3ZSBjYW4ganVz
dCBib3ggdGhlIGludC4gT3RoZXJ3aXNlIHdlCi0gICAgICAgICAgICAgICAgLy8gbmVlZCB0byB0
dXJuIGl0IGludG8gYSBib3hlZCBkb3VibGUuCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgLy8gV2UgZG9uJ3QgdHJ5IHRvIGJlIGNsZXZlciB3aXRoIHJlZ2lzdGVyIGFsbG9jYXRp
b24gaGVyZTsgd2UgYXNzdW1lCi0gICAgICAgICAgICAgICAgLy8gdGhhdCB0aGUgcHJvZ3JhbSBp
cyB1c2luZyBGUFJzIGFuZCB3ZSBkb24ndCB0cnkgdG8gZmlndXJlIG91dCB3aGljaAotICAgICAg
ICAgICAgICAgIC8vIG9uZXMgaXQgaXMgdXNpbmcuIEluc3RlYWQganVzdCB0ZW1wb3JhcmlseSBz
YXZlIGZwUmVnVDAgYW5kIHRoZW4KLSAgICAgICAgICAgICAgICAvLyByZXN0b3JlIGl0LiBUaGlz
IG1ha2VzIHNlbnNlIGJlY2F1c2UgdGhpcyBwYXRoIGlzIG5vdCBjaGVhcCB0byBiZWdpbgotICAg
ICAgICAgICAgICAgIC8vIHdpdGgsIGFuZCBzaG91bGQgaGFwcGVuIHZlcnkgcmFyZWx5LgotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEdQUlJlZyBhZGRyZXNzR1BSID0gR1BSSW5m
bzo6cmVnVDA7Ci0gICAgICAgICAgICAgICAgaWYgKGFkZHJlc3NHUFIgPT0gcmVjb3ZlcnkuZ3By
KCkpCi0gICAgICAgICAgICAgICAgICAgIGFkZHJlc3NHUFIgPSBHUFJJbmZvOjpyZWdUMTsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KGFkZHJlc3NHUFIs
IHNjcmF0Y2hEYXRhQnVmZmVyKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKEFzc2VtYmx5
SGVscGVyczo6VHJ1c3RlZEltbVB0cihzY3JhdGNoRGF0YUJ1ZmZlciArIDEpLCBhZGRyZXNzR1BS
KTsKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZURvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCBh
ZGRyZXNzR1BSKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBBc3NlbWJseUhl
bHBlcnM6Okp1bXAgcG9zaXRpdmUgPSBtX2ppdC5icmFuY2gzMihBc3NlbWJseUhlbHBlcnM6Okdy
ZWF0ZXJUaGFuT3JFcXVhbCwgcmVjb3ZlcnkuZ3ByKCksIEFzc2VtYmx5SGVscGVyczo6VHJ1c3Rl
ZEltbTMyKDApKTsKLQotICAgICAgICAgICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91Ymxl
KHJlY292ZXJ5LmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgICAgICBtX2pp
dC5hZGREb3VibGUoQXNzZW1ibHlIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoJkFzc2VtYmx5SGVs
cGVyczo6dHdvVG9UaGUzMiksIEZQUkluZm86OmZwUmVnVDApOwotICAgICAgICAgICAgICAgIG1f
aml0LmJveERvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCByZWNvdmVyeS5ncHIoKSk7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIGRvbmUgPSBt
X2ppdC5qdW1wKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcG9zaXRpdmUu
bGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1faml0Lm9y
NjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWNvdmVyeS5ncHIoKSk7Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShhZGRyZXNzR1BSLCBG
UFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkNjQoc2NyYXRjaERh
dGFCdWZmZXIsIGFkZHJlc3NHUFIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAv
LyA2KSBEdW1wIGFsbCBub24tcG9pc29uZWQgR1BScy4gRm9yIHBvaXNvbmVkIEdQUnMsIHNhdmUg
dGhlbSBpbnRvIHRoZSBzY3JhdGNoIHN0b3JhZ2UuCi0gICAgLy8gICAgTm90ZSB0aGF0IEdQUnMg
ZG8gbm90IGhhdmUgYSBmYXN0IGNoYW5nZSAobGlrZSBoYXZlRlBScykgYmVjYXVzZSB3ZSBleHBl
Y3QgdGhhdAotICAgIC8vICAgIG1vc3QgT1NSIGZhaWx1cmUgcG9pbnRzIHdpbGwgaGF2ZSBhdCBs
ZWFzdCBvbmUgR1BSIHRoYXQgbmVlZHMgdG8gYmUgZHVtcGVkLgorICAgIC8vIEFuZCB2b2lsYSwg
YWxsIEZQUnMgYXJlIGZyZWUgdG8gcmV1c2UuCiAgICAgCi0gICAgaW5pdGlhbGl6ZVBvaXNvbmVk
KG9wZXJhbmRzLm51bWJlck9mTG9jYWxzKCkpOwotICAgIHVuc2lnbmVkIGN1cnJlbnRQb2lzb25J
bmRleCA9IDA7CisgICAgLy8gNSkgU2F2ZSBhbGwgc3RhdGUgZnJvbSBGUFJzIGludG8gdGhlIHNj
cmF0Y2ggYnVmZmVyLgogICAgIAogICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBv
cGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYg
cmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07Ci0gICAgICAgIGludCBvcGVyYW5kID0gb3BlcmFu
ZHMub3BlcmFuZEZvckluZGV4KGluZGV4KTsKKyAgICAgICAgCiAgICAgICAgIHN3aXRjaCAocmVj
b3ZlcnkudGVjaG5pcXVlKCkpIHsKLSAgICAgICAgY2FzZSBJbkdQUjoKLSAgICAgICAgY2FzZSBV
bmJveGVkSW50MzJJbkdQUjoKLSAgICAgICAgY2FzZSBVSW50MzJJbkdQUjoKLSAgICAgICAgICAg
IGlmIChvcGVyYW5kcy5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lzb25lZFZpcnR1YWxSZWdpc3Rl
cnNbb3BlcmFuZHMudmFyaWFibGVGb3JJbmRleChpbmRleCldKSB7Ci0gICAgICAgICAgICAgICAg
bV9qaXQuc3RvcmU2NChyZWNvdmVyeS5ncHIoKSwgc2NyYXRjaERhdGFCdWZmZXIgKyBjdXJyZW50
UG9pc29uSW5kZXgpOwotICAgICAgICAgICAgICAgIG1fcG9pc29uU2NyYXRjaEluZGljZXNbb3Bl
cmFuZHMudmFyaWFibGVGb3JJbmRleChpbmRleCldID0gY3VycmVudFBvaXNvbkluZGV4OwotICAg
ICAgICAgICAgICAgIGN1cnJlbnRQb2lzb25JbmRleCsrOwotICAgICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChyZWNvdmVyeS5ncHIoKSwgQXNzZW1ibHlIZWxw
ZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZCkpOworICAgICAgICBjYXNl
IEluRlBSOgorICAgICAgICAgICAgbV9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoc2NyYXRjaCArIGluZGV4KSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgbV9q
aXQuc3RvcmVEb3VibGUocmVjb3ZlcnkuZnByKCksIEdQUkluZm86OnJlZ1QwKTsKICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICAvLyBBdCB0aGlzIHBvaW50IGFsbCBH
UFJzIGFyZSBhdmFpbGFibGUgZm9yIHNjcmF0Y2ggdXNlLgorICAgIC8vIE5vdywgYWxsIEZQUnMg
YXJlIGFsc28gZnJlZS4KICAgICAKLSAgICBpZiAoaGF2ZUZQUnMpIHsKLSAgICAgICAgLy8gNykg
Qm94IGFsbCBkb3VibGVzIChyZWxpZXMgb24gdGhlcmUgYmVpbmcgbW9yZSBHUFJzIHRoYW4gRlBS
cykKLSAgICAgICAgCi0gICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVy
YW5kcy5zaXplKCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3Zlcnkm
IHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwotICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnRl
Y2huaXF1ZSgpICE9IEluRlBSKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgRlBSUmVnIGZwciA9IHJlY292ZXJ5LmZwcigpOwotICAgICAgICAgICAgR1BSUmVnIGdwciA9
IEdQUkluZm86OnRvUmVnaXN0ZXIoRlBSSW5mbzo6dG9JbmRleChmcHIpKTsKLSAgICAgICAgICAg
IG1faml0LmJveERvdWJsZShmcHIsIGdwcik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IC8vIDgpIER1bXAgYWxsIGRvdWJsZXMgaW50byB0aGUgc3RhY2ssIG9yIHRvIHRoZSBzY3JhdGNo
IHN0b3JhZ2UgaWYKLSAgICAgICAgLy8gICAgdGhlIGRlc3RpbmF0aW9uIHZpcnR1YWwgcmVnaXN0
ZXIgaXMgcG9pc29uZWQuCisgICAgLy8gNSkgU2F2ZSBhbGwgc3RhdGUgZnJvbSB0aGUgc3RhY2sg
aW50byB0aGUgc2NyYXRjaCBidWZmZXIuIEZvciBzaW1wbGljaXR5IHdlCisgICAgLy8gICAgZG8g
dGhpcyBldmVuIGZvciBzdGF0ZSB0aGF0J3MgYWxyZWFkeSBpbiB0aGUgcmlnaHQgcGxhY2Ugb24g
dGhlIHN0YWNrLgorICAgIC8vICAgIEl0IG1ha2VzIHRoaW5ncyBzaW1wbGVyIGxhdGVyLgorCisg
ICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRl
eCkgeworICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2lu
ZGV4XTsKKyAgICAgICAgaW50IG9wZXJhbmQgPSBvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5k
ZXgpOwogICAgICAgICAKLSAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9w
ZXJhbmRzLnNpemUoKTsgKytpbmRleCkgewotICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVy
eSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07Ci0gICAgICAgICAgICBpZiAocmVjb3Zlcnku
dGVjaG5pcXVlKCkgIT0gSW5GUFIpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICBHUFJSZWcgZ3ByID0gR1BSSW5mbzo6dG9SZWdpc3RlcihGUFJJbmZvOjp0b0luZGV4KHJl
Y292ZXJ5LmZwcigpKSk7Ci0gICAgICAgICAgICBpZiAob3BlcmFuZHMuaXNWYXJpYWJsZShpbmRl
eCkgJiYgcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzW29wZXJhbmRzLnZhcmlhYmxlRm9ySW5kZXgo
aW5kZXgpXSkgewotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlNjQoZ3ByLCBzY3JhdGNoRGF0
YUJ1ZmZlciArIGN1cnJlbnRQb2lzb25JbmRleCk7Ci0gICAgICAgICAgICAgICAgbV9wb2lzb25T
Y3JhdGNoSW5kaWNlc1tvcGVyYW5kcy52YXJpYWJsZUZvckluZGV4KGluZGV4KV0gPSBjdXJyZW50
UG9pc29uSW5kZXg7Ci0gICAgICAgICAgICAgICAgY3VycmVudFBvaXNvbkluZGV4Kys7Ci0gICAg
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KGdwciwgQXNzZW1i
bHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFuZEZv
ckluZGV4KGluZGV4KSkpOworICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7
CisgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgICAgICBjYXNlIEludDMyRGlz
cGxhY2VkSW5KU1N0YWNrOgorICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluSlNTdGFjazoK
KyAgICAgICAgICAgIG1faml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IocmVj
b3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBt
X2ppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBzY3JhdGNoICsgaW5kZXgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBbHJlYWR5SW5KU1N0YWNrQXNV
bmJveGVkSW50MzI6CisgICAgICAgIGNhc2UgQWxyZWFkeUluSlNTdGFja0FzVW5ib3hlZERvdWJs
ZToKKyAgICAgICAgICAgIG1faml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Io
b3BlcmFuZCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQoR1BS
SW5mbzo6cmVnVDAsIHNjcmF0Y2ggKyBpbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgCi0gICAgLy8gQXQgdGhpcyBwb2ludCBhbGwgR1BScyBhbmQgRlBScyBhcmUg
YXZhaWxhYmxlIGZvciBzY3JhdGNoIHVzZS4KLSAgICAKLSAgICAvLyA5KSBCb3ggYWxsIHVuYm94
ZWQgZG91YmxlcyBpbiB0aGUgc3RhY2suCi0gICAgaWYgKGhhdmVVbmJveGVkRG91Ymxlcykgewot
ICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyAr
K2luZGV4KSB7Ci0gICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9w
ZXJhbmRzW2luZGV4XTsKLSAgICAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBB
bHJlYWR5SW5KU1N0YWNrQXNVbmJveGVkRG91YmxlKQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NG
b3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSwgRlBS
SW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAgICAgICBtX2ppdC5ib3hEb3VibGUoRlBSSW5mbzo6ZnBS
ZWdUMCwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChHUFJJbmZv
OjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3Bl
cmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOwotICAgICAgICB9Ci0gICAgfQorICAgIC8v
IDYpIERvIGFsbCBkYXRhIGZvcm1hdCBjb252ZXJzaW9ucyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMg
aW50byB0aGUgc3RhY2suCiAgICAgCi0gICAgQVNTRVJUKGN1cnJlbnRQb2lzb25JbmRleCA9PSBu
dW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyk7CisgICAgYm9vbCBoYXZlQXJndW1lbnRz
ID0gZmFsc2U7CiAgICAgCi0gICAgLy8gMTApIFJlc2h1ZmZsZSBkaXNwbGFjZWQgdmlydHVhbCBy
ZWdpc3RlcnMuIE9wdGltaXplIGZvciB0aGUgY2FzZSB0aGF0Ci0gICAgLy8gICAgdGhlIG51bWJl
ciBvZiBkaXNwbGFjZWQgdmlydHVhbCByZWdpc3RlcnMgaXMgbm90IG1vcmUgdGhhbiB0aGUgbnVt
YmVyCi0gICAgLy8gICAgb2YgYXZhaWxhYmxlIHBoeXNpY2FsIHJlZ2lzdGVycy4KLSAgICAKLSAg
ICBpZiAobnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzKSB7Ci0gICAgICAgIGlmIChu
dW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMgPD0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdp
c3RlcnMpIHsKLSAgICAgICAgICAgIC8vIFNvIGZhciB0aGlzIGFwcGVhcnMgdG8gYmUgdGhlIGNh
c2UgdGhhdCB0cmlnZ2VycyBhbGwgdGhlIHRpbWUsIGJ1dAotICAgICAgICAgICAgLy8gdGhhdCBp
cyBmYXIgZnJvbSBndWFyYW50ZWVkLgotICAgICAgICAKLSAgICAgICAgICAgIHVuc2lnbmVkIGRp
c3BsYWNlbWVudEluZGV4ID0gMDsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsg
aW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAgICAgICBjb25z
dCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKLSAgICAgICAgICAg
ICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChB
c3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBH
UFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspKTsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNhc2Ug
SW50MzJEaXNwbGFjZWRJbkpTU3RhY2s6IHsKLSAgICAgICAgICAgICAgICAgICAgR1BSUmVnIGdw
ciA9IEdQUkluZm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgrKyk7Ci0gICAgICAgICAg
ICAgICAgICAgIG1faml0LmxvYWQzMihBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IocmVjb3Zl
cnkudmlydHVhbFJlZ2lzdGVyKCkpLCBncHIpOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5v
cjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZ3ByKTsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluSlNTdGFjazogewotICAgICAgICAg
ICAgICAgICAgICBHUFJSZWcgZ3ByID0gR1BSSW5mbzo6dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJ
bmRleCsrKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZDY0KEFzc2VtYmx5SGVscGVy
czo6YWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIGdwcik7Ci0gICAgICAg
ICAgICAgICAgICAgIG1faml0LnN1YjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwg
Z3ByKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICAgICAgZGlzcGxhY2VtZW50SW5kZXggPSAwOwotICAgICAgICAgICAgZm9yIChz
aXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgewotICAg
ICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5k
ZXhdOwotICAgICAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKLSAg
ICAgICAgICAgICAgICBjYXNlIERpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgICAgICBj
YXNlIEludDMyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgICAgIGNhc2UgRG91Ymxl
RGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KEdQ
UkluZm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgrKyksIEFzc2VtYmx5SGVscGVyczo6
YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRl
eCkpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgdGhlIHNodWZmbGluZyBhbGdvcml0aG0gdGhh
dCB3ZSB1c2UKLSAgICAgICAgICAgIC8vIGZvciBzcGVjdWxhdGl2ZS0+bm9uLXNwZWN1bGF0aXZl
IGp1bXBzLCBpZiB3ZSBldmVyIGRpc2NvdmVyIHRoYXQKLSAgICAgICAgICAgIC8vIHNvbWUgaG90
IGNvZGUgd2l0aCBsb3RzIG9mIGxpdmUgdmFsdWVzIHRoYXQgZ2V0IGRpc3BsYWNlZCBhbmQKLSAg
ICAgICAgICAgIC8vIHNwaWxsZWQgcmVhbGx5IGVuam95cyBmcmVxdWVudGx5IGZhaWxpbmcgc3Bl
Y3VsYXRpb24uCi0gICAgICAgIAotICAgICAgICAgICAgLy8gRm9yIG5vdyB0aGlzIGNvZGUgaXMg
ZW5naW5lZXJlZCB0byBiZSBjb3JyZWN0IGJ1dCBwcm9iYWJseSBub3QKLSAgICAgICAgICAgIC8v
IHN1cGVyLiBJbiBwYXJ0aWN1bGFyLCBpdCBjb3JyZWN0bHkgaGFuZGxlcyBjYXNlcyB3aGVyZSBm
b3IgZXhhbXBsZQotICAgICAgICAgICAgLy8gdGhlIGRpc3BsYWNlbWVudHMgYXJlIGEgcGVybXV0
YXRpb24gb2YgdGhlIGRlc3RpbmF0aW9uIHZhbHVlcywgbGlrZQotICAgICAgICAgICAgLy8KLSAg
ICAgICAgICAgIC8vIDEgLT4gMgotICAgICAgICAgICAgLy8gMiAtPiAxCi0gICAgICAgICAgICAv
LwotICAgICAgICAgICAgLy8gSXQgYWNjb21wbGlzaGVzIHRoaXMgYnkgc2ltcGx5IGxpZnRpbmcg
YWxsIG9mIHRoZSB2aXJ0dWFsIHJlZ2lzdGVycwotICAgICAgICAgICAgLy8gZnJvbSB0aGVpciBv
bGQgKERGRyBKSVQpIGxvY2F0aW9ucyBhbmQgZHJvcHBpbmcgdGhlbSBpbiBhIHNjcmF0Y2gKLSAg
ICAgICAgICAgIC8vIGxvY2F0aW9uIGluIG1lbW9yeSwgYW5kIHRoZW4gdHJhbnNmZXJyaW5nIGZy
b20gdGhhdCBzY3JhdGNoIGxvY2F0aW9uCi0gICAgICAgICAgICAvLyB0byB0aGVpciBuZXcgKG9s
ZCBKSVQpIGxvY2F0aW9ucy4KLSAgICAgICAgCi0gICAgICAgICAgICB1bnNpZ25lZCBzY3JhdGNo
SW5kZXggPSBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyczsKLSAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsK
LSAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRz
W2luZGV4XTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlY292
ZXJ5LnRlY2huaXF1ZSgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3Rh
Y2s6Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OmFk
ZHJlc3NGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0g
ICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIHNjcmF0Y2hE
YXRhQnVmZmVyICsgc2NyYXRjaEluZGV4KyspOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNl
ZEluSlNTdGFjazogewotICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoQXNzZW1ibHlI
ZWxwZXJzOjphZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6
cmVnVDApOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5vcjY0KEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgICAgICBtX2pp
dC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBzY3JhdGNoRGF0YUJ1ZmZlciArIHNjcmF0Y2hJbmRl
eCsrKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNlZElu
SlNTdGFjazogewotICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkNjQoQXNzZW1ibHlIZWxw
ZXJzOjphZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6cmVn
VDApOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdWI2NChHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQu
c3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgc2NyYXRjaERhdGFCdWZmZXIgKyBzY3JhdGNoSW5kZXgr
Kyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgICAgIHNjcmF0Y2hJbmRleCA9IG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0
ZXJzOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRz
LnNpemUoKTsgKytpbmRleCkgewotICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3Zlcnkm
IHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwotICAgICAgICAgICAgICAgIHN3aXRjaCAocmVj
b3ZlcnkudGVjaG5pcXVlKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIERpc3BsYWNlZEluSlNT
dGFjazoKLSAgICAgICAgICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5KU1N0YWNrOgotICAg
ICAgICAgICAgICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5sb2FkNjQoc2NyYXRjaERhdGFCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKywg
R1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KEdQUklu
Zm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3Rlcilv
cGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
CisgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytp
bmRleCkgeworICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRz
W2luZGV4XTsKKyAgICAgICAgaW50IG9wZXJhbmQgPSBvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgo
aW5kZXgpOwogICAgICAgICAKLSAgICAgICAgICAgIEFTU0VSVChzY3JhdGNoSW5kZXggPT0gbnVt
YmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMgKyBudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxS
ZWdpc3RlcnMpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vIDExKSBEdW1wIGFsbCBw
b2lzb25lZCB2aXJ0dWFsIHJlZ2lzdGVycy4KLSAgICAKLSAgICBpZiAobnVtYmVyT2ZQb2lzb25l
ZFZpcnR1YWxSZWdpc3RlcnMpIHsKLSAgICAgICAgZm9yIChpbnQgdmlydHVhbFJlZ2lzdGVyID0g
MDsgdmlydHVhbFJlZ2lzdGVyIDwgKGludClvcGVyYW5kcy5udW1iZXJPZkxvY2FscygpOyArK3Zp
cnR1YWxSZWdpc3RlcikgewotICAgICAgICAgICAgaWYgKCFwb2lzb25lZFZpcnR1YWxSZWdpc3Rl
cnNbdmlydHVhbFJlZ2lzdGVyXSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
c3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgeworICAgICAgICBjYXNlIEluR1BSOgorICAg
ICAgICBjYXNlIERpc3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAgICAgIG1faml0LmxvYWQ2NChz
Y3JhdGNoICsgaW5kZXgsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIG1faml0LnN0b3Jl
NjQoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5kKSk7
CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAotICAgICAgICAgICAgY29uc3QgVmFs
dWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kcy5sb2NhbCh2aXJ0dWFsUmVnaXN0ZXIpOwot
ICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewotICAgICAgICAgICAg
Y2FzZSBJbkdQUjoKLSAgICAgICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6Ci0gICAgICAg
ICAgICBjYXNlIFVJbnQzMkluR1BSOgotICAgICAgICAgICAgY2FzZSBJbkZQUjoKLSAgICAgICAg
ICAgICAgICBtX2ppdC5sb2FkNjQoc2NyYXRjaERhdGFCdWZmZXIgKyBwb2lzb25JbmRleCh2aXJ0
dWFsUmVnaXN0ZXIpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3Rv
cmU2NChHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFs
UmVnaXN0ZXIpbG9jYWxUb09wZXJhbmQodmlydHVhbFJlZ2lzdGVyKSkpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBBbHJlYWR5SW5K
U1N0YWNrQXNVbmJveGVkSW50MzI6CisgICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6Cisg
ICAgICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAgICAgICBtX2ppdC5s
b2FkNjQoc2NyYXRjaCArIGluZGV4LCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBtX2pp
dC56ZXJvRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDApOworICAg
ICAgICAgICAgbV9qaXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIEFz
c2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5kKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFscmVhZHlJbkpTU3RhY2tBc1VuYm94ZWREb3Vi
bGU6CisgICAgICAgIGNhc2UgSW5GUFI6CisgICAgICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5K
U1N0YWNrOgorICAgICAgICAgICAgbV9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoc2NyYXRjaCArIGluZGV4KSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgbV9q
aXQubG9hZERvdWJsZShHUFJJbmZvOjpyZWdUMCwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAg
ICAgICBtX2ppdC5ib3hEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgR1BSSW5mbzo6cmVnVDApOwor
ICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJz
OjphZGRyZXNzRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgVUludDMySW5HUFI6IHsKKyAgICAgICAgICAgIG1faml0LmxvYWQ2NChz
Y3JhdGNoICsgaW5kZXgsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIG1faml0Lnplcm9F
eHRlbmQzMlRvUHRyKEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAg
ICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgcG9zaXRpdmUgPSBtX2ppdC5icmFuY2gzMigKKyAgICAg
ICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OkdyZWF0ZXJUaGFuT3JFcXVhbCwKKyAgICAgICAg
ICAgICAgICBHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkp
OworICAgICAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUoR1BSSW5mbzo6cmVnVDAs
IEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAgICAgbV9qaXQuYWRkRG91YmxlKAorICAgICAg
ICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKCZBc3NlbWJseUhlbHBl
cnM6OnR3b1RvVGhlMzIpLAorICAgICAgICAgICAgICAgIEZQUkluZm86OmZwUmVnVDApOworICAg
ICAgICAgICAgbV9qaXQuYm94RG91YmxlKEZQUkluZm86OmZwUmVnVDAsIEdQUkluZm86OnJlZ1Qw
KTsKKyAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgp
OworICAgICAgICAgICAgcG9zaXRpdmUubGluaygmbV9qaXQpOworICAgICAgICAgICAgbV9qaXQu
b3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QwKTsKKyAg
ICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChH
UFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQpKTsKKyAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vIDEyKSBEdW1w
IGFsbCBjb25zdGFudHMuIE9wdGltaXplIGZvciBVbmRlZmluZWQsIHNpbmNlIHRoYXQncyBhIGNv
bnN0YW50IHdlIHNlZQotICAgIC8vICAgICBvZnRlbi4KLQotICAgIGlmIChoYXZlQ29uc3RhbnRz
KSB7Ci0gICAgICAgIGlmIChoYXZlVW5kZWZpbmVkKQotICAgICAgICAgICAgbV9qaXQubW92ZShB
c3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgIAotICAgICAgICBmb3IgKHNpemVfdCBpbmRl
eCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICBj
b25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKLSAgICAgICAg
ICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBDb25zdGFudCkKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChyZWNvdmVyeS5jb25zdGFudCgpLmlzVW5kZWZp
bmVkKCkpCi0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgQXNz
ZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFu
ZEZvckluZGV4KGluZGV4KSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlNjQoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KHJlY292ZXJ5LmNvbnN0YW50KCkpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0
dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgQ29uc3RhbnQ6CisgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KAor
ICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShyZWNvdmVyeS5jb25zdGFudCgpKSksCisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxw
ZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgQXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkOgorICAgICAgICAg
ICAgaGF2ZUFyZ3VtZW50cyA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9
CiAgICAgCi0gICAgLy8gMTMpIEFkanVzdCB0aGUgb2xkIEpJVCdzIGV4ZWN1dGUgY291bnRlci4g
U2luY2Ugd2UgYXJlIGV4aXRpbmcgT1NSLCB3ZSBrbm93Ci0gICAgLy8gICAgIHRoYXQgYWxsIG5l
dyBjYWxscyBpbnRvIHRoaXMgY29kZSB3aWxsIGdvIHRvIHRoZSBuZXcgSklULCBzbyB0aGUgZXhl
Y3V0ZQotICAgIC8vICAgICBjb3VudGVyIG9ubHkgYWZmZWN0cyBjYWxsIGZyYW1lcyB0aGF0IHBl
cmZvcm1lZCBPU1IgZXhpdCBhbmQgY2FsbCBmcmFtZXMKLSAgICAvLyAgICAgdGhhdCB3ZXJlIHN0
aWxsIGV4ZWN1dGluZyB0aGUgb2xkIEpJVCBhdCB0aGUgdGltZSBvZiBhbm90aGVyIGNhbGwgZnJh
bWUncwotICAgIC8vICAgICBPU1IgZXhpdC4gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCB0aGUgZm9s
bG93aW5nIGlzIHRydWU6CisgICAgLy8gNykgQWRqdXN0IHRoZSBvbGQgSklUJ3MgZXhlY3V0ZSBj
b3VudGVyLiBTaW5jZSB3ZSBhcmUgZXhpdGluZyBPU1IsIHdlIGtub3cKKyAgICAvLyAgICB0aGF0
IGFsbCBuZXcgY2FsbHMgaW50byB0aGlzIGNvZGUgd2lsbCBnbyB0byB0aGUgbmV3IEpJVCwgc28g
dGhlIGV4ZWN1dGUKKyAgICAvLyAgICBjb3VudGVyIG9ubHkgYWZmZWN0cyBjYWxsIGZyYW1lcyB0
aGF0IHBlcmZvcm1lZCBPU1IgZXhpdCBhbmQgY2FsbCBmcmFtZXMKKyAgICAvLyAgICB0aGF0IHdl
cmUgc3RpbGwgZXhlY3V0aW5nIHRoZSBvbGQgSklUIGF0IHRoZSB0aW1lIG9mIGFub3RoZXIgY2Fs
bCBmcmFtZSdzCisgICAgLy8gICAgT1NSIGV4aXQuIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhl
IGZvbGxvd2luZyBpcyB0cnVlOgogICAgIC8vCi0gICAgLy8gICAgIChhKSBDb2RlIHRoZSBwZXJm
b3JtcyBhbiBPU1IgZXhpdCBnZXRzIGEgY2hhbmNlIHRvIHJlZW50ZXIgb3B0aW1pemVkCi0gICAg
Ly8gICAgICAgICBjb2RlIGV2ZW50dWFsbHksIHNpbmNlIG9wdGltaXplZCBjb2RlIGlzIGZhc3Rl
ci4gQnV0IHdlIGRvbid0Ci0gICAgLy8gICAgICAgICB3YW50IHRvIGRvIHN1Y2ggcmVlbnRlcnkg
dG9vIGFnZ3Jlc3NpdmVseSAoc2VlIChjKSBiZWxvdykuCisgICAgLy8gICAgKGEpIENvZGUgdGhl
IHBlcmZvcm1zIGFuIE9TUiBleGl0IGdldHMgYSBjaGFuY2UgdG8gcmVlbnRlciBvcHRpbWl6ZWQK
KyAgICAvLyAgICAgICAgY29kZSBldmVudHVhbGx5LCBzaW5jZSBvcHRpbWl6ZWQgY29kZSBpcyBm
YXN0ZXIuIEJ1dCB3ZSBkb24ndAorICAgIC8vICAgICAgICB3YW50IHRvIGRvIHN1Y2ggcmVlbnRl
cnkgdG9vIGFnZ3Jlc3NpdmVseSAoc2VlIChjKSBiZWxvdykuCiAgICAgLy8KLSAgICAvLyAgICAg
KGIpIElmIHRoZXJlIGlzIGNvZGUgb24gdGhlIGNhbGwgc3RhY2sgdGhhdCBpcyBzdGlsbCBydW5u
aW5nIHRoZSBvbGQKLSAgICAvLyAgICAgICAgIEpJVCdzIGNvZGUgYW5kIGhhcyBuZXZlciBPU1In
ZCwgdGhlbiBpdCBzaG91bGQgZ2V0IGEgY2hhbmNlIHRvCi0gICAgLy8gICAgICAgICBwZXJmb3Jt
IE9TUiBlbnRyeSBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgd2UndmUgZXhpdGVkLgorICAgIC8vICAg
IChiKSBJZiB0aGVyZSBpcyBjb2RlIG9uIHRoZSBjYWxsIHN0YWNrIHRoYXQgaXMgc3RpbGwgcnVu
bmluZyB0aGUgb2xkCisgICAgLy8gICAgICAgIEpJVCdzIGNvZGUgYW5kIGhhcyBuZXZlciBPU1In
ZCwgdGhlbiBpdCBzaG91bGQgZ2V0IGEgY2hhbmNlIHRvCisgICAgLy8gICAgICAgIHBlcmZvcm0g
T1NSIGVudHJ5IGRlc3BpdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBleGl0ZWQuCiAgICAgLy8KLSAg
ICAvLyAgICAgKGMpIENvZGUgdGhlIHBlcmZvcm1zIGFuIE9TUiBleGl0IHNob3VsZCBub3QgaW1t
ZWRpYXRlbHkgcmV0cnkgT1NSCi0gICAgLy8gICAgICAgICBlbnRyeSwgc2luY2UgYm90aCBmb3Jt
cyBvZiBPU1IgYXJlIGV4cGVuc2l2ZS4gT1NSIGVudHJ5IGlzCi0gICAgLy8gICAgICAgICBwYXJ0
aWN1bGFybHkgZXhwZW5zaXZlLgorICAgIC8vICAgIChjKSBDb2RlIHRoZSBwZXJmb3JtcyBhbiBP
U1IgZXhpdCBzaG91bGQgbm90IGltbWVkaWF0ZWx5IHJldHJ5IE9TUgorICAgIC8vICAgICAgICBl
bnRyeSwgc2luY2UgYm90aCBmb3JtcyBvZiBPU1IgYXJlIGV4cGVuc2l2ZS4gT1NSIGVudHJ5IGlz
CisgICAgLy8gICAgICAgIHBhcnRpY3VsYXJseSBleHBlbnNpdmUuCiAgICAgLy8KLSAgICAvLyAg
ICAgKGQpIEZyZXF1ZW50IE9TUiBmYWlsdXJlcywgZXZlbiB0aG9zZSB0aGF0IGRvIG5vdCByZXN1
bHQgaW4gdGhlIGNvZGUKLSAgICAvLyAgICAgICAgIHJ1bm5pbmcgaW4gYSBob3QgbG9vcCwgcmVz
dWx0IGluIHJlY29tcGlsYXRpb24gZ2V0dGluZyB0cmlnZ2VyZWQuCisgICAgLy8gICAgKGQpIEZy
ZXF1ZW50IE9TUiBmYWlsdXJlcywgZXZlbiB0aG9zZSB0aGF0IGRvIG5vdCByZXN1bHQgaW4gdGhl
IGNvZGUKKyAgICAvLyAgICAgICAgcnVubmluZyBpbiBhIGhvdCBsb29wLCByZXN1bHQgaW4gcmVj
b21waWxhdGlvbiBnZXR0aW5nIHRyaWdnZXJlZC4KICAgICAvLwotICAgIC8vICAgICBUbyBlbnN1
cmUgKGMpLCB3ZSdkIGxpa2UgdG8gc2V0IHRoZSBleGVjdXRlIGNvdW50ZXIgdG8KLSAgICAvLyAg
ICAgY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpLiBUaGlzIHNlZW1zIGxpa2Ug
aXQgd291bGQgZW5kYW5nZXIKLSAgICAvLyAgICAgKGEpIGFuZCAoYiksIHNpbmNlIHRoZW4gZXZl
cnkgT1NSIGV4aXQgd291bGQgZGVsYXkgdGhlIG9wcG9ydHVuaXR5IGZvcgotICAgIC8vICAgICBl
dmVyeSBjYWxsIGZyYW1lIHRvIHBlcmZvcm0gT1NSIGVudHJ5LiBFc3NlbnRpYWxseSwgaWYgT1NS
IGV4aXQgaGFwcGVucwotICAgIC8vICAgICBmcmVxdWVudGx5IGFuZCB0aGUgZnVuY3Rpb24gaGFz
IGZldyBsb29wcywgdGhlbiB0aGUgY291bnRlciB3aWxsIG5ldmVyCi0gICAgLy8gICAgIGJlY29t
ZSBub24tbmVnYXRpdmUgYW5kIE9TUiBlbnRyeSB3aWxsIG5ldmVyIGJlIHRyaWdnZXJlZC4gT1NS
IGVudHJ5Ci0gICAgLy8gICAgIHdpbGwgb25seSBoYXBwZW4gaWYgYSBsb29wIGdldHMgaG90IGlu
IHRoZSBvbGQgSklULCB3aGljaCBkb2VzIGEgcHJldHR5Ci0gICAgLy8gICAgIGdvb2Qgam9iIG9m
IGVuc3VyaW5nIChhKSBhbmQgKGIpLiBCdXQgdGhhdCBkb2Vzbid0IHRha2UgY2FyZSBvZiAoZCks
Ci0gICAgLy8gICAgIHNpbmNlIGVhY2ggc3BlY3VsYXRpb24gZmFpbHVyZSB3b3VsZCByZXNldCB0
aGUgZXhlY3V0ZSBjb3VudGVyLgotICAgIC8vICAgICBTbyB3ZSBjaGVjayBoZXJlIGlmIHRoZSBu
dW1iZXIgb2Ygc3BlY3VsYXRpb24gZmFpbHVyZXMgaXMgc2lnbmlmaWNhbnRseQotICAgIC8vICAg
ICBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIHN1Y2Nlc3NlcyAod2Ugd2FudCA5MCUgc3VjY2Vz
cyByYXRlKSwgYW5kIGlmCi0gICAgLy8gICAgIHRoZXJlIGhhdmUgYmVlbiBhIGxhcmdlIGVub3Vn
aCBudW1iZXIgb2YgZmFpbHVyZXMuIElmIHNvLCB3ZSBzZXQgdGhlCi0gICAgLy8gICAgIGNvdW50
ZXIgdG8gMDsgb3RoZXJ3aXNlIHdlIHNldCB0aGUgY291bnRlciB0bwotICAgIC8vICAgICBjb3Vu
dGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkuCisgICAgLy8gICAgVG8gZW5zdXJlIChj
KSwgd2UnZCBsaWtlIHRvIHNldCB0aGUgZXhlY3V0ZSBjb3VudGVyIHRvCisgICAgLy8gICAgY291
bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpLiBUaGlzIHNlZW1zIGxpa2UgaXQgd291
bGQgZW5kYW5nZXIKKyAgICAvLyAgICAoYSkgYW5kIChiKSwgc2luY2UgdGhlbiBldmVyeSBPU1Ig
ZXhpdCB3b3VsZCBkZWxheSB0aGUgb3Bwb3J0dW5pdHkgZm9yCisgICAgLy8gICAgZXZlcnkgY2Fs
bCBmcmFtZSB0byBwZXJmb3JtIE9TUiBlbnRyeS4gRXNzZW50aWFsbHksIGlmIE9TUiBleGl0IGhh
cHBlbnMKKyAgICAvLyAgICBmcmVxdWVudGx5IGFuZCB0aGUgZnVuY3Rpb24gaGFzIGZldyBsb29w
cywgdGhlbiB0aGUgY291bnRlciB3aWxsIG5ldmVyCisgICAgLy8gICAgYmVjb21lIG5vbi1uZWdh
dGl2ZSBhbmQgT1NSIGVudHJ5IHdpbGwgbmV2ZXIgYmUgdHJpZ2dlcmVkLiBPU1IgZW50cnkKKyAg
ICAvLyAgICB3aWxsIG9ubHkgaGFwcGVuIGlmIGEgbG9vcCBnZXRzIGhvdCBpbiB0aGUgb2xkIEpJ
VCwgd2hpY2ggZG9lcyBhIHByZXR0eQorICAgIC8vICAgIGdvb2Qgam9iIG9mIGVuc3VyaW5nIChh
KSBhbmQgKGIpLiBCdXQgdGhhdCBkb2Vzbid0IHRha2UgY2FyZSBvZiAoZCksCisgICAgLy8gICAg
c2luY2UgZWFjaCBzcGVjdWxhdGlvbiBmYWlsdXJlIHdvdWxkIHJlc2V0IHRoZSBleGVjdXRlIGNv
dW50ZXIuCisgICAgLy8gICAgU28gd2UgY2hlY2sgaGVyZSBpZiB0aGUgbnVtYmVyIG9mIHNwZWN1
bGF0aW9uIGZhaWx1cmVzIGlzIHNpZ25pZmljYW50bHkKKyAgICAvLyAgICBsYXJnZXIgdGhhbiB0
aGUgbnVtYmVyIG9mIHN1Y2Nlc3NlcyAod2Ugd2FudCA5MCUgc3VjY2VzcyByYXRlKSwgYW5kIGlm
CisgICAgLy8gICAgdGhlcmUgaGF2ZSBiZWVuIGEgbGFyZ2UgZW5vdWdoIG51bWJlciBvZiBmYWls
dXJlcy4gSWYgc28sIHdlIHNldCB0aGUKKyAgICAvLyAgICBjb3VudGVyIHRvIDA7IG90aGVyd2lz
ZSB3ZSBzZXQgdGhlIGNvdW50ZXIgdG8KKyAgICAvLyAgICBjb3VudGVyVmFsdWVGb3JPcHRpbWl6
ZUFmdGVyV2FybVVwKCkuCiAgICAgCiAgICAgaGFuZGxlRXhpdENvdW50cyhtX2ppdCwgZXhpdCk7
CiAgICAgCi0gICAgLy8gMTQpIFJlaWZ5IGlubGluZWQgY2FsbCBmcmFtZXMuCisgICAgLy8gOCkg
UmVpZnkgaW5saW5lZCBjYWxsIGZyYW1lcy4KICAgICAKICAgICByZWlmeUlubGluZWRDYWxsRnJh
bWVzKG1faml0LCBleGl0KTsKICAgICAKLSAgICAvLyAxNSkgQ3JlYXRlIGFyZ3VtZW50cyBpZiBu
ZWNlc3NhcnkgYW5kIHBsYWNlIHRoZW0gaW50byB0aGUgYXBwcm9wcmlhdGUgYWxpYXNlZAotICAg
IC8vICAgICByZWdpc3RlcnMuCisgICAgLy8gOSkgQ3JlYXRlIGFyZ3VtZW50cyBpZiBuZWNlc3Nh
cnkgYW5kIHBsYWNlIHRoZW0gaW50byB0aGUgYXBwcm9wcmlhdGUgYWxpYXNlZAorICAgIC8vICAg
IHJlZ2lzdGVycy4KICAgICAKICAgICBpZiAoaGF2ZUFyZ3VtZW50cykgewogICAgICAgICBIYXNo
U2V0PElubGluZUNhbGxGcmFtZSosIERlZmF1bHRIYXNoPElubGluZUNhbGxGcmFtZSo+OjpIYXNo
LApAQCAtNjUxLDEyICszNzcsMTIgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0
KGNvbnN0IAogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIC8vIDE2KSBMb2FkIHRoZSByZXN1
bHQgb2YgdGhlIGxhc3QgYnl0ZWNvZGUgb3BlcmF0aW9uIGludG8gcmVnVDAuCisgICAgLy8gMTAp
IExvYWQgdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBieXRlY29kZSBvcGVyYXRpb24gaW50byByZWdU
MC4KICAgICAKICAgICBpZiAoZXhpdC5tX2xhc3RTZXRPcGVyYW5kICE9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8aW50Pjo6bWF4KCkpCiAgICAgICAgIG1faml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6
OmFkZHJlc3NGb3IoZXhpdC5tX2xhc3RTZXRPcGVyYW5kKSwgR1BSSW5mbzo6Y2FjaGVkUmVzdWx0
UmVnaXN0ZXIpOwogICAgIAotICAgIC8vIDE3KSBBbmQgZmluaXNoLgorICAgIC8vIDExKSBBbmQg
ZmluaXNoLgogICAgIAogICAgIGFkanVzdEFuZEp1bXBUb1RhcmdldChtX2ppdCwgZXhpdCk7CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGls
ZXIuY3BwCShyZXZpc2lvbiAxNTU3ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEyICszMywyMSBAQAog
I2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKICNpbmNsdWRlICJERkdPU1JFeGl0UHJlcGFyYXRpb24u
aCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiT3BlcmFuZHNJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKICNp
bmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogCitzdGF0aWMgQ1N0cmluZyBzaG9ydE9wZXJhbmRzRHVtcChjb25zdCBPcGVy
YW5kczxWYWx1ZVJlY292ZXJ5PiYgb3BlcmFuZHMpCit7CisgICAgRHVtcENvbnRleHQgY29udGV4
dDsKKyAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7CisgICAgb3V0LnByaW50KGluQ29udGV4dChv
cGVyYW5kcywgJmNvbnRleHQpKTsKKyAgICByZXR1cm4gb3V0LnRvQ1N0cmluZygpOworfQorCiBl
eHRlcm4gIkMiIHsKIAogdm9pZCBjb21waWxlT1NSRXhpdChFeGVjU3RhdGUqIGV4ZWMpCkBAIC0x
MDEsOSArMTEwLDEwIEBAIHZvaWQgY29tcGlsZU9TUkV4aXQoRXhlY1N0YXRlKiBleGVjKQogICAg
ICAgICBleGl0Lm1fY29kZSA9IEZJTkFMSVpFX0NPREVfSUYoCiAgICAgICAgICAgICBzaG91bGRT
aG93RGlzYXNzZW1ibHkoKSwKICAgICAgICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAgICAg
KCJERkcgT1NSIGV4aXQgIyV1ICglcywgJXMpIGZyb20gJXMiLAorICAgICAgICAgICAgKCJERkcg
T1NSIGV4aXQgIyV1ICglcywgJXMpIGZyb20gJXMsIHdpdGggb3BlcmFuZHMgPSAlcyIsCiAgICAg
ICAgICAgICAgICAgZXhpdEluZGV4LCB0b0NTdHJpbmcoZXhpdC5tX2NvZGVPcmlnaW4pLmRhdGEo
KSwKLSAgICAgICAgICAgICAgICBleGl0S2luZFRvU3RyaW5nKGV4aXQubV9raW5kKSwgdG9DU3Ry
aW5nKCpjb2RlQmxvY2spLmRhdGEoKSkpOworICAgICAgICAgICAgICAgIGV4aXRLaW5kVG9TdHJp
bmcoZXhpdC5tX2tpbmQpLCB0b0NTdHJpbmcoKmNvZGVCbG9jaykuZGF0YSgpLAorICAgICAgICAg
ICAgICAgIHNob3J0T3BlcmFuZHNEdW1wKG9wZXJhbmRzKS5kYXRhKCkpKTsKICAgICB9CiAgICAg
CiAgICAgewo=
</data>
<flag name="review"
          id="233797"
          type_id="1"
          status="+"
          setter="ggaren"
    />
    <flag name="commit-queue"
          id="233798"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211715</attachid>
            <date>2013-09-15 11:02:23 -0700</date>
            <delta_ts>2013-09-15 11:02:23 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>37261</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU1Nzk0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBA
CisyMDEzLTA5LTE0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RGVvcHRpbWl6ZSBkZW9wdGltaXphdGlvbjogbWFrZSBERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAg
bW9yZSBoYWNrYWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTIxMzc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmZyZXkgR2FyZW4uCisgICAg
ICAgIAorICAgICAgICBUaGlzIHJlZHVjZXMgdGhlIHNpemUgb2YgREZHT1NSRXhpdENvbXBpbGVy
NjQuY3BwIGJ5IGFsbW9zdCA1MCUsIGFuZCBtYWtlcyBpdAorICAgICAgICBzdXBlciBlYXN5IHRv
IGFkZCBuZXcgcmVjb3Zlcnkga2luZHMuIEZvciByZWNvdmVyaWVzIHRoYXQgaW52b2x2ZSByZWJv
eGluZywgaXQKKyAgICAgICAgYWxsb3dzIHlvdSB0byBrZWVwIG1vc3Qgb2YgdGhlIGNvZGUgY29t
bW9uIGJldHdlZW4gdGhlIG9uLXN0YWNrIGFuZCBpbi1yZWcKKyAgICAgICAgY2FzZXM6IHRoZXkg
YWxsIGdldCBmdW5uZWxlZCB0aHJvdWdoIHRoZSAibG9hZCBmcm9tIHNjcmF0Y2ggYnVmZmVyLCBj
b252ZXJ0LAorICAgICAgICBhbmQgdGhlbiBzdG9yZSB0byBzdGFjayIgbG9naWMuCisgICAgICAg
IAorICAgICAgICBUaGlzIG9wZW5zIHVwIGEgYnVuY2ggb2YgcG9zc2liaWxpdGllcy4gSXQnbGwg
bWFrZSBhZGRpbmcgSW50NDggbXVjaCBlYXNpZXIsCisgICAgICAgIGFuZCBpdCBwcm9iYWJseSB3
aWxsIGNvbWUgaW4gaGFuZHkgYXMgd2UgZG8gdmFyaW91cyBERkcgc3RhY2sgbGF5b3V0IGNoYW5n
ZXMgaW4KKyAgICAgICAgc3VwcG9ydCBvZiB0aGUgRlRMLgorCisgICAgICAgICogYnl0ZWNvZGUv
VmFsdWVSZWNvdmVyeS5oOgorICAgICAgICAoSlNDOjpWYWx1ZVJlY292ZXJ5OjpkdW1wSW5Db250
ZXh0KToKKyAgICAgICAgKEpTQzo6VmFsdWVSZWNvdmVyeTo6ZHVtcCk6CisgICAgICAgICogZGZn
L0RGR09TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6c2hvcnRPcGVyYW5k
c0R1bXApOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6T1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdCk6CisKIDIwMTMtMDktMTQg
IEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBJdCBzaG91bGQgYmUg
ZWFzeSB0byBhZGQgbmV3IG5vZGVzIHRoYXQgZG8gT1NSIGZvcndhcmQgcmV3aXJpbmcgaW4gYm90
aCBERkcgYW5kIEZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UmVjb3ZlcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VmFsdWVSZWNvdmVyeS5oCShyZXZpc2lvbiAxNTU3OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw4
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitzdHJ1Y3QgRHVtcENvbnRleHQ7CisKIC8vIERlc2Ny
aWJlcyBob3cgdG8gcmVjb3ZlciBhIGdpdmVuIGJ5dGVjb2RlIHZpcnR1YWwgcmVnaXN0ZXIgYXQg
YSBnaXZlbgogLy8gY29kZSBwb2ludC4KIGVudW0gVmFsdWVSZWNvdmVyeVRlY2huaXF1ZSB7CkBA
IC0yNzQsNzIgKzI3Niw3NSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpkZWNv
ZGUobV9zb3VyY2UuY29uc3RhbnQpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91
dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CiAgICAgewogICAgICAgICBzd2l0Y2ggKHRl
Y2huaXF1ZSgpKSB7CiAgICAgICAgIGNhc2UgQWxyZWFkeUluSlNTdGFjazoKICAgICAgICAgICAg
IG91dC5wcmludGYoIi0iKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICBjYXNlIEFscmVhZHlJbkpTU3RhY2tBc1VuYm94ZWRJbnQzMjoKICAgICAgICAg
ICAgIG91dC5wcmludGYoIihpbnQzMikiKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICBjYXNlIEFscmVhZHlJbkpTU3RhY2tBc1VuYm94ZWRDZWxsOgog
ICAgICAgICAgICAgb3V0LnByaW50ZigiKGNlbGwpIik7Ci0gICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBBbHJlYWR5SW5KU1N0YWNrQXNVbmJveGVk
Qm9vbGVhbjoKICAgICAgICAgICAgIG91dC5wcmludGYoIihib29sKSIpOwotICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgQWxyZWFkeUluSlNTdGFj
a0FzVW5ib3hlZERvdWJsZToKICAgICAgICAgICAgIG91dC5wcmludGYoIihkb3VibGUpIik7Ci0g
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBJbkdQ
UjoKICAgICAgICAgICAgIG91dC5wcmludGYoIiUlciVkIiwgZ3ByKCkpOwotICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5H
UFI6CiAgICAgICAgICAgICBvdXQucHJpbnRmKCJpbnQzMiglJXIlZCkiLCBncHIoKSk7Ci0gICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBVbmJveGVk
Qm9vbGVhbkluR1BSOgogICAgICAgICAgICAgb3V0LnByaW50ZigiYm9vbCglJXIlZCkiLCBncHIo
KSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2Fz
ZSBVSW50MzJJbkdQUjoKICAgICAgICAgICAgIG91dC5wcmludGYoInVpbnQzMiglJXIlZCkiLCBn
cHIoKSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
Y2FzZSBJbkZQUjoKICAgICAgICAgICAgIG91dC5wcmludGYoIiUlZnIlZCIsIGZwcigpKTsKLSAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuOwogI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCiAgICAgICAgIGNhc2UgSW5QYWlyOgogICAgICAgICAgICAgb3V0LnByaW50ZigicGFpcigl
JXIlZCwgJSVyJWQpIiwgdGFnR1BSKCksIHBheWxvYWRHUFIoKSk7Ci0gICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIHJldHVybjsKICNlbmRpZgogICAgICAgICBjYXNlIERpc3BsYWNlZElu
SlNTdGFjazoKICAgICAgICAgICAgIG91dC5wcmludGYoIiolZCIsIHZpcnR1YWxSZWdpc3Rlcigp
KTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNl
IEludDMyRGlzcGxhY2VkSW5KU1N0YWNrOgogICAgICAgICAgICAgb3V0LnByaW50ZigiKmludDMy
KCVkKSIsIHZpcnR1YWxSZWdpc3RlcigpKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluSlNTdGFjazoKICAgICAg
ICAgICAgIG91dC5wcmludGYoIipkb3VibGUoJWQpIiwgdmlydHVhbFJlZ2lzdGVyKCkpOwotICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgQ2VsbERp
c3BsYWNlZEluSlNTdGFjazoKICAgICAgICAgICAgIG91dC5wcmludGYoIipjZWxsKCVkKSIsIHZp
cnR1YWxSZWdpc3RlcigpKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICBjYXNlIEJvb2xlYW5EaXNwbGFjZWRJbkpTU3RhY2s6CiAgICAgICAgICAgICBv
dXQucHJpbnRmKCIqYm9vbCglZCkiLCB2aXJ0dWFsUmVnaXN0ZXIoKSk7Ci0gICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBBcmd1bWVudHNUaGF0V2Vy
ZU5vdENyZWF0ZWQ6CiAgICAgICAgICAgICBvdXQucHJpbnRmKCJhcmd1bWVudHMiKTsKLSAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNlIENvbnN0YW50
OgotICAgICAgICAgICAgb3V0LnByaW50KCJbIiwgY29uc3RhbnQoKSwgIl0iKTsKLSAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgb3V0LnByaW50KCJbIiwgaW5Db250ZXh0KGNvbnN0YW50
KCksIGNvbnRleHQpLCAiXSIpOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNlIERv
bnRLbm93OgogICAgICAgICAgICAgb3V0LnByaW50ZigiISIpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCI/JWQiLCB0ZWNobmlx
dWUoKSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGR1bXBJ
bkNvbnRleHQob3V0LCAwKTsKICAgICB9CiAgICAgCiBwcml2YXRlOgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHJldmlz
aW9uIDE1NTc5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBp
bGVyNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSwxNCArNjksMTEgQEAgdm9pZCBPU1JFeGl0
Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgIC8vIDIpIFBlcmZvcm0gc3BlY3VsYXRp
b24gcmVjb3ZlcnkuIFRoaXMgb25seSBjb21lcyBpbnRvIHBsYXkgd2hlbiBhbiBvcGVyYXRpb24K
ICAgICAvLyAgICBzdGFydHMgbXV0YXRpbmcgc3RhdGUgYmVmb3JlIHZlcmlmeWluZyB0aGUgc3Bl
Y3VsYXRpb24gaXQgaGFzIGFscmVhZHkgbWFkZS4KICAgICAKLSAgICBHUFJSZWcgYWxyZWFkeUJv
eGVkID0gSW52YWxpZEdQUlJlZzsKLSAgICAKICAgICBpZiAocmVjb3ZlcnkpIHsKICAgICAgICAg
c3dpdGNoIChyZWNvdmVyeS0+dHlwZSgpKSB7CiAgICAgICAgIGNhc2UgU3BlY3VsYXRpdmVBZGQ6
CiAgICAgICAgICAgICBtX2ppdC5zdWIzMihyZWNvdmVyeS0+c3JjKCksIHJlY292ZXJ5LT5kZXN0
KCkpOwogICAgICAgICAgICAgbV9qaXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIsIHJlY292ZXJ5LT5kZXN0KCkpOwotICAgICAgICAgICAgYWxyZWFkeUJveGVkID0gcmVjb3Zl
cnktPmRlc3QoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2s6CkBAIC0xNDksOTEgKzE0NiwzMyBAQCB2b2lkIE9T
UkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgICAgICAgICAgbV9qaXQu
c3RvcmU2NChleGl0Lm1fanNWYWx1ZVNvdXJjZS5ncHIoKSwgYnVja2V0KTsKICAgICAgICAgfQog
ICAgIH0KKyAgICAKKyAgICAvLyBXaGF0IGZvbGxvd3MgaXMgYSBmYWlybHkgaW5lZmZpY2llbnQg
Y29kZWdlbiBmb3IgT1NSIGV4aXQuIE9TUiBleGl0cyBhcmUgcmFyZS4gV2UKKyAgICAvLyBlbnN1
cmUgdGhhdCB0aGV5IGFyZSByYXJlLiBUaGV5IGNhbm5vdCBiZSBjb21tb24uIFRoaXMgaXMgYmVj
YXVzZSBpZiBhbiBPU1IgZXhpdAorICAgIC8vIGlzIHRha2VuIG1vcmUgdGhhbiB+MTAwIHRpbWVz
LCB3ZSBqZXR0aXNvbiB0aGUgREZHIGNvZGUgYmxvY2sgYWxvbmcgd2l0aCBhbGwgb2YgaXRzCisg
ICAgLy8gZXhpdHMuIEl0IGlzIGltcG9zc2libGUgZm9yIGFuIE9TUiBleGl0IC0gaS5lLiB0aGUg
Y29kZSB3ZSBjb21waWxlIGJlbG93IC0gdG8KKyAgICAvLyBleGVjdXRlIGZyZXF1ZW50bHkgZW5v
dWdoIGZvciB0aGUgY29kZWdlbiB0byBtYXR0ZXIgdGhhdCBtdWNoLiBJdCBwcm9iYWJseSBtYXR0
ZXJzCisgICAgLy8gZW5vdWdoIHRoYXQgd2UgZG9uJ3Qgd2FudCB0byB0dXJuIHRoaXMgaW50byBz
b21lIHN1cGVyLXNsb3cgZnVuY3Rpb24gY2FsbCwgYnV0IHNvCisgICAgLy8gbG9uZyBhcyB3ZSdy
ZSBnZW5lcmF0aW5nIHN0cmFpZ2h0LWxpbmUgY29kZSwgdGhhdCBjb2RlIGNhbiBiZSBwcmV0dHkg
YmFkLiBBbHNvCisgICAgLy8gYmVjYXVzZSB3ZSB0ZW5kIHRvIGV4aXQgb25seSBhbG9uZyBvbmUg
T1NSIGV4aXQgZnJvbSBhbnkgREZHIGNvZGUgYmxvY2sgLSB0aGF0J3MgYW4KKyAgICAvLyBlbXBp
cmljYWwgcmVzdWx0IHRoYXQgd2UncmUgZXh0cmVtZWx5IGNvbmZpZGVudCBhYm91dCAtIHRoZSBj
b2RlIHNpemUgb2YgdGhpcworICAgIC8vIGRvZXNuJ3QgbWF0dGVyIG11Y2guIEhlbmNlIGFueSBh
dHRlbXB0IHRvIG9wdGltaXplIHRoZSBjb2RlZ2VuIGhlcmUgaXMganVzdCBwdXJlbHkKKyAgICAv
LyBoYXJtZnVsIHRvIHRoZSBzeXN0ZW06IGl0IHdpbGwgbm90IHJlZHVjZSBtZW1vcnkgdXNhZ2Ug
YW5kIGl0IHdpbGwgbm90IG1ha2UgdGhpbmdzCisgICAgLy8gZmFzdGVyLiBJdCdsbCBqdXN0IG1h
a2UgdGhpbmdzIG1vcmUgY29tcGxleC4KIAotICAgIC8vIDQpIEZpZ3VyZSBvdXQgaG93IG1hbnkg
c2NyYXRjaCBzbG90cyB3ZSdsbCBuZWVkLiBXZSBuZWVkIG9uZSBmb3IgZXZlcnkgR1BSL0ZQUgot
ICAgIC8vICAgIHdob3NlIGRlc3RpbmF0aW9uIGlzIG5vdyBvY2N1cGllZCBieSBhIERGRyB2aXJ0
dWFsIHJlZ2lzdGVyLCBhbmQgd2UgbmVlZAotICAgIC8vICAgIG9uZSBmb3IgZXZlcnkgZGlzcGxh
Y2VkIHZpcnR1YWwgcmVnaXN0ZXIgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbgotICAgIC8vICAgIEdQ
UkluZm86Om51bWJlck9mUmVnaXN0ZXJzIG9mIHRoZW0uIEFsc28gc2VlIGlmIHRoZXJlIGFyZSBh
bnkgY29uc3RhbnRzLAotICAgIC8vICAgIGFueSB1bmRlZmluZWQgc2xvdHMsIGFueSBGUFIgc2xv
dHMsIGFuZCBhbnkgdW5ib3hlZCBpbnRzLgotICAgICAgICAgICAgCi0gICAgVmVjdG9yPGJvb2w+
IHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyhvcGVyYW5kcy5udW1iZXJPZkxvY2FscygpKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzLnNpemUo
KTsgKytpKQotICAgICAgICBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbaV0gPSBmYWxzZTsKLQot
ICAgIHVuc2lnbmVkIG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzID0gMDsKLSAgICB1
bnNpZ25lZCBudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMgPSAwOworICAgIC8vIDQp
IFNhdmUgYWxsIHN0YXRlIGZyb20gR1BScyBpbnRvIHRoZSBzY3JhdGNoIGJ1ZmZlci4KICAgICAK
LSAgICAvLyBCb29sZWFucyBmb3IgZmFzdCBjaGVja3MuIFdlIGV4cGVjdCB0aGF0IG1vc3QgT1NS
IGV4aXRzIGRvIG5vdCBoYXZlIHRvIHJlYm94Ci0gICAgLy8gSW50MzJzLCBoYXZlIG5vIEZQUnMs
IGFuZCBoYXZlIG5vIGNvbnN0YW50cy4gSWYgdGhlcmUgYXJlIGNvbnN0YW50cywgd2UKLSAgICAv
LyBleHBlY3QgbW9zdCBvZiB0aGVtIHRvIGJlIGpzVW5kZWZpbmVkKCk7IGlmIHRoYXQncyB0cnVl
IHRoZW4gd2UgaGFuZGxlIHRoYXQKLSAgICAvLyBzcGVjaWFsbHkgdG8gbWluaW1pemUgY29kZSBz
aXplIGFuZCBleGVjdXRpb24gdGltZS4KLSAgICBib29sIGhhdmVVbmJveGVkSW50MzJzID0gZmFs
c2U7Ci0gICAgYm9vbCBoYXZlVW5ib3hlZERvdWJsZXMgPSBmYWxzZTsKLSAgICBib29sIGhhdmVG
UFJzID0gZmFsc2U7Ci0gICAgYm9vbCBoYXZlQ29uc3RhbnRzID0gZmFsc2U7Ci0gICAgYm9vbCBo
YXZlVW5kZWZpbmVkID0gZmFsc2U7Ci0gICAgYm9vbCBoYXZlVUludDMycyA9IGZhbHNlOwotICAg
IGJvb2wgaGF2ZUFyZ3VtZW50cyA9IGZhbHNlOworICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hC
dWZmZXIgPSBtX2ppdC52bSgpLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplb2YoRW5jb2RlZEpT
VmFsdWUpICogb3BlcmFuZHMuc2l6ZSgpKTsKKyAgICBFbmNvZGVkSlNWYWx1ZSogc2NyYXRjaCA9
IHNjcmF0Y2hCdWZmZXIgPyBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZm
ZXItPmRhdGFCdWZmZXIoKSkgOiAwOwogICAgIAogICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsg
aW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKICAgICAgICAgY29uc3QgVmFsdWVS
ZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07CisgICAgICAgIAogICAgICAgICBz
d2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7Ci0gICAgICAgIGNhc2UgSW50MzJEaXNwbGFj
ZWRJbkpTU3RhY2s6Ci0gICAgICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5KU1N0YWNrOgotICAg
ICAgICBjYXNlIERpc3BsYWNlZEluSlNTdGFjazogewotICAgICAgICAgICAgbnVtYmVyT2ZEaXNw
bGFjZWRWaXJ0dWFsUmVnaXN0ZXJzKys7Ci0gICAgICAgICAgICBBU1NFUlQob3BlcmFuZElzTG9j
YWwocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgLy8gU2VlIGlmIHdlIG1pZ2h0IGxpa2UgdG8gc3RvcmUgdG8gdGhpcyB2aXJ0dWFsIHJlZ2lz
dGVyIGJlZm9yZSBkb2luZwotICAgICAgICAgICAgLy8gdmlydHVhbCByZWdpc3RlciBzaHVmZmxp
bmcuIElmIHNvLCB3ZSBzYXkgdGhhdCB0aGUgdmlydHVhbCByZWdpc3RlcgotICAgICAgICAgICAg
Ly8gaXMgcG9pc29uZWQ6IGl0IGNhbm5vdCBiZSBzdG9yZWQgdG8gdW50aWwgYWZ0ZXIgZGlzcGxh
Y2VkIHZpcnR1YWwKLSAgICAgICAgICAgIC8vIHJlZ2lzdGVycyBhcmUgaGFuZGxlZC4gV2UgdHJh
Y2sgcG9pc29uZWQgdmlydHVhbCByZWdpc3RlciBjYXJlZnVsbHkKLSAgICAgICAgICAgIC8vIHRv
IGVuc3VyZSB0aGlzIGhhcHBlbnMgZWZmaWNpZW50bHkuIE5vdGUgdGhhdCB3ZSBleHBlY3QgdGhp
cyBjYXNlCi0gICAgICAgICAgICAvLyB0byBiZSByYXJlLCBzbyB0aGUgaGFuZGxpbmcgb2YgaXQg
aXMgb3B0aW1pemVkIGZvciB0aGUgY2FzZXMgaW4KLSAgICAgICAgICAgIC8vIHdoaWNoIGl0IGRv
ZXMgbm90IGhhcHBlbi4KLSAgICAgICAgICAgIGludCBsb2NhbCA9IG9wZXJhbmRUb0xvY2FsKHJl
Y292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKTsKLSAgICAgICAgICAgIGlmIChsb2NhbCA8IChpbnQp
b3BlcmFuZHMubnVtYmVyT2ZMb2NhbHMoKSkgewotICAgICAgICAgICAgICAgIHN3aXRjaCAob3Bl
cmFuZHMubG9jYWwobG9jYWwpLnRlY2huaXF1ZSgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBJ
bkdQUjoKLSAgICAgICAgICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgotICAgICAgICAg
ICAgICAgIGNhc2UgVUludDMySW5HUFI6Ci0gICAgICAgICAgICAgICAgY2FzZSBJbkZQUjoKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCFwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbbG9jYWxdKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbbG9jYWxd
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mUG9pc29uZWRWaXJ0dWFs
UmVnaXN0ZXJzKys7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9CisgICAgICAgIGNhc2UgSW5HUFI6CiAgICAgICAgIGNhc2UgVW5ib3hl
ZEludDMySW5HUFI6Ci0gICAgICAgIGNhc2UgQWxyZWFkeUluSlNTdGFja0FzVW5ib3hlZEludDMy
OgotICAgICAgICAgICAgaGF2ZVVuYm94ZWRJbnQzMnMgPSB0cnVlOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBbHJlYWR5SW5KU1N0YWNrQXNVbmJveGVk
RG91YmxlOgotICAgICAgICAgICAgaGF2ZVVuYm94ZWREb3VibGVzID0gdHJ1ZTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgVUludDMySW5HUFI6Ci0gICAg
ICAgICAgICBoYXZlVUludDMycyA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIAotICAgICAgICBjYXNlIEluRlBSOgotICAgICAgICAgICAgaGF2ZUZQUnMgPSB0cnVlOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBDb25zdGFudDoK
LSAgICAgICAgICAgIGhhdmVDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgaWYgKHJlY292
ZXJ5LmNvbnN0YW50KCkuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICBoYXZlVW5kZWZp
bmVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNh
c2UgQXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkOgotICAgICAgICAgICAgaGF2ZUFyZ3VtZW50
cyA9IHRydWU7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KHJlY292ZXJ5LmdwcigpLCBzY3Jh
dGNoICsgaW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAg
ZGVmYXVsdDoKQEAgLTI0MSwzNjcgKzE4MCwxNjQgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNv
bXBpbGVFeGl0KGNvbnN0IAogICAgICAgICB9CiAgICAgfQogICAgIAotI2lmIERGR19FTkFCTEUo
REVCVUdfVkVSQk9TRSkKLSAgICBkYXRhTG9nRigiICAiKTsKLSAgICBpZiAobnVtYmVyT2ZQb2lz
b25lZFZpcnR1YWxSZWdpc3RlcnMpCi0gICAgICAgIGRhdGFMb2dGKCJQb2lzb25lZD0ldSAiLCBu
dW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyk7Ci0gICAgaWYgKG51bWJlck9mRGlzcGxh
Y2VkVmlydHVhbFJlZ2lzdGVycykKLSAgICAgICAgZGF0YUxvZ0YoIkRpc3BsYWNlZD0ldSAiLCBu
dW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMpOwotICAgIGlmIChoYXZlVW5ib3hlZElu
dDMycykKLSAgICAgICAgZGF0YUxvZ0YoIlVuYm94ZWRJbnQzMiAiKTsKLSAgICBpZiAoaGF2ZVVu
Ym94ZWREb3VibGVzKQotICAgICAgICBkYXRhTG9nRigiVW5ib3hlZERvdWJsZXMgIik7Ci0gICAg
aWYgKGhhdmVVSW50MzJzKQotICAgICAgICBkYXRhTG9nRigiVUludDMyICIpOwotICAgIGlmICho
YXZlRlBScykKLSAgICAgICAgZGF0YUxvZ0YoIkZQUiAiKTsKLSAgICBpZiAoaGF2ZUNvbnN0YW50
cykKLSAgICAgICAgZGF0YUxvZ0YoIkNvbnN0YW50cyAiKTsKLSAgICBpZiAoaGF2ZVVuZGVmaW5l
ZCkKLSAgICAgICAgZGF0YUxvZ0YoIlVuZGVmaW5lZCAiKTsKLSAgICBkYXRhTG9nRigiICIpOwot
I2VuZGlmCi0gICAgCi0gICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IG1faml0LnZt
KCktPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBzdGQ6Om1h
eChoYXZlVUludDMycyA/IDJ1IDogMHUsIG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJz
ICsgKG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycyA8PSBHUFJJbmZvOjpudW1iZXJP
ZlJlZ2lzdGVycyA/IDAgOiBudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMpKSk7Ci0g
ICAgRW5jb2RlZEpTVmFsdWUqIHNjcmF0Y2hEYXRhQnVmZmVyID0gc2NyYXRjaEJ1ZmZlciA/IHN0
YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSA6
IDA7Ci0KLSAgICAvLyBGcm9tIGhlcmUgb24sIHRoZSBjb2RlIGFzc3VtZXMgdGhhdCBpdCBpcyBw
cm9maXRhYmxlIHRvIG1heGltaXplIHRoZSBkaXN0YW5jZQotICAgIC8vIGJldHdlZW4gd2hlbiBz
b21ldGhpbmcgaXMgY29tcHV0ZWQgYW5kIHdoZW4gaXQgaXMgc3RvcmVkLgotICAgIAotICAgIC8v
IDUpIFBlcmZvcm0gYWxsIHJlYm94aW5nIG9mIGludGVnZXJzLgotICAgIAotICAgIGlmIChoYXZl
VW5ib3hlZEludDMycyB8fCBoYXZlVUludDMycykgewotICAgICAgICBmb3IgKHNpemVfdCBpbmRl
eCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICBj
b25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKLSAgICAgICAg
ICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgVW5i
b3hlZEludDMySW5HUFI6Ci0gICAgICAgICAgICAgICAgaWYgKHJlY292ZXJ5LmdwcigpICE9IGFs
cmVhZHlCb3hlZCkKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQub3I2NChHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIsIHJlY292ZXJ5LmdwcigpKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQWxyZWFkeUluSlNTdGFja0Fz
VW5ib3hlZEludDMyOgotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KFRhZ1R5cGVOdW1iZXIgPj4g
MzIpKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVy
PihvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSkpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBVSW50MzJJbkdQUjogewot
ICAgICAgICAgICAgICAgIC8vIFRoaXMgb2NjdXJzIHdoZW4gdGhlIHNwZWN1bGF0aXZlIEpJVCBs
ZWZ0IGFuIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyCi0gICAgICAgICAgICAgICAgLy8gaW4gYSBH
UFIuIElmIGl0J3MgcG9zaXRpdmUsIHdlIGNhbiBqdXN0IGJveCB0aGUgaW50LiBPdGhlcndpc2Ug
d2UKLSAgICAgICAgICAgICAgICAvLyBuZWVkIHRvIHR1cm4gaXQgaW50byBhIGJveGVkIGRvdWJs
ZS4KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCB0cnkgdG8g
YmUgY2xldmVyIHdpdGggcmVnaXN0ZXIgYWxsb2NhdGlvbiBoZXJlOyB3ZSBhc3N1bWUKLSAgICAg
ICAgICAgICAgICAvLyB0aGF0IHRoZSBwcm9ncmFtIGlzIHVzaW5nIEZQUnMgYW5kIHdlIGRvbid0
IHRyeSB0byBmaWd1cmUgb3V0IHdoaWNoCi0gICAgICAgICAgICAgICAgLy8gb25lcyBpdCBpcyB1
c2luZy4gSW5zdGVhZCBqdXN0IHRlbXBvcmFyaWx5IHNhdmUgZnBSZWdUMCBhbmQgdGhlbgotICAg
ICAgICAgICAgICAgIC8vIHJlc3RvcmUgaXQuIFRoaXMgbWFrZXMgc2Vuc2UgYmVjYXVzZSB0aGlz
IHBhdGggaXMgbm90IGNoZWFwIHRvIGJlZ2luCi0gICAgICAgICAgICAgICAgLy8gd2l0aCwgYW5k
IHNob3VsZCBoYXBwZW4gdmVyeSByYXJlbHkuCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgR1BSUmVnIGFkZHJlc3NHUFIgPSBHUFJJbmZvOjpyZWdUMDsKLSAgICAgICAgICAgICAg
ICBpZiAoYWRkcmVzc0dQUiA9PSByZWNvdmVyeS5ncHIoKSkKLSAgICAgICAgICAgICAgICAgICAg
YWRkcmVzc0dQUiA9IEdQUkluZm86OnJlZ1QxOwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIG1faml0LnN0b3JlNjQoYWRkcmVzc0dQUiwgc2NyYXRjaERhdGFCdWZmZXIpOwotICAg
ICAgICAgICAgICAgIG1faml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHNj
cmF0Y2hEYXRhQnVmZmVyICsgMSksIGFkZHJlc3NHUFIpOwotICAgICAgICAgICAgICAgIG1faml0
LnN0b3JlRG91YmxlKEZQUkluZm86OmZwUmVnVDAsIGFkZHJlc3NHUFIpOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcCBwb3NpdGl2ZSA9IG1f
aml0LmJyYW5jaDMyKEFzc2VtYmx5SGVscGVyczo6R3JlYXRlclRoYW5PckVxdWFsLCByZWNvdmVy
eS5ncHIoKSwgQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkpOwotCi0gICAgICAgICAg
ICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUocmVjb3ZlcnkuZ3ByKCksIEZQUkluZm86
OmZwUmVnVDApOwotICAgICAgICAgICAgICAgIG1faml0LmFkZERvdWJsZShBc3NlbWJseUhlbHBl
cnM6OkFic29sdXRlQWRkcmVzcygmQXNzZW1ibHlIZWxwZXJzOjp0d29Ub1RoZTMyKSwgRlBSSW5m
bzo6ZnBSZWdUMCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuYm94RG91YmxlKEZQUkluZm86OmZw
UmVnVDAsIHJlY292ZXJ5LmdwcigpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBwb3NpdGl2ZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgbV9qaXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIsIHJlY292ZXJ5LmdwcigpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBtX2ppdC5sb2FkRG91YmxlKGFkZHJlc3NHUFIsIEZQUkluZm86OmZwUmVnVDApOwotICAgICAg
ICAgICAgICAgIG1faml0LmxvYWQ2NChzY3JhdGNoRGF0YUJ1ZmZlciwgYWRkcmVzc0dQUik7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vIDYpIER1bXAgYWxsIG5vbi1wb2lzb25l
ZCBHUFJzLiBGb3IgcG9pc29uZWQgR1BScywgc2F2ZSB0aGVtIGludG8gdGhlIHNjcmF0Y2ggc3Rv
cmFnZS4KLSAgICAvLyAgICBOb3RlIHRoYXQgR1BScyBkbyBub3QgaGF2ZSBhIGZhc3QgY2hhbmdl
IChsaWtlIGhhdmVGUFJzKSBiZWNhdXNlIHdlIGV4cGVjdCB0aGF0Ci0gICAgLy8gICAgbW9zdCBP
U1IgZmFpbHVyZSBwb2ludHMgd2lsbCBoYXZlIGF0IGxlYXN0IG9uZSBHUFIgdGhhdCBuZWVkcyB0
byBiZSBkdW1wZWQuCisgICAgLy8gQW5kIHZvaWxhLCBhbGwgRlBScyBhcmUgZnJlZSB0byByZXVz
ZS4KICAgICAKLSAgICBpbml0aWFsaXplUG9pc29uZWQob3BlcmFuZHMubnVtYmVyT2ZMb2NhbHMo
KSk7Ci0gICAgdW5zaWduZWQgY3VycmVudFBvaXNvbkluZGV4ID0gMDsKKyAgICAvLyA1KSBTYXZl
IGFsbCBzdGF0ZSBmcm9tIEZQUnMgaW50byB0aGUgc2NyYXRjaCBidWZmZXIuCiAgICAgCiAgICAg
Zm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkg
ewogICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4
XTsKLSAgICAgICAgaW50IG9wZXJhbmQgPSBvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgp
OworICAgICAgICAKICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewotICAg
ICAgICBjYXNlIEluR1BSOgotICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgotICAgICAg
ICBjYXNlIFVJbnQzMkluR1BSOgotICAgICAgICAgICAgaWYgKG9wZXJhbmRzLmlzVmFyaWFibGUo
aW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tvcGVyYW5kcy52YXJpYWJsZUZvcklu
ZGV4KGluZGV4KV0pIHsKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KHJlY292ZXJ5Lmdw
cigpLCBzY3JhdGNoRGF0YUJ1ZmZlciArIGN1cnJlbnRQb2lzb25JbmRleCk7Ci0gICAgICAgICAg
ICAgICAgbV9wb2lzb25TY3JhdGNoSW5kaWNlc1tvcGVyYW5kcy52YXJpYWJsZUZvckluZGV4KGlu
ZGV4KV0gPSBjdXJyZW50UG9pc29uSW5kZXg7Ci0gICAgICAgICAgICAgICAgY3VycmVudFBvaXNv
bkluZGV4Kys7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9y
ZTY0KHJlY292ZXJ5LmdwcigpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxS
ZWdpc3RlcilvcGVyYW5kKSk7CisgICAgICAgIGNhc2UgSW5GUFI6CisgICAgICAgICAgICBtX2pp
dC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihzY3JhdGNoICsgaW5kZXgpLCBH
UFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZURvdWJsZShyZWNvdmVyeS5m
cHIoKSwgR1BSSW5mbzo6cmVnVDApOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAK
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQog
ICAgIAotICAgIC8vIEF0IHRoaXMgcG9pbnQgYWxsIEdQUnMgYXJlIGF2YWlsYWJsZSBmb3Igc2Ny
YXRjaCB1c2UuCisgICAgLy8gTm93LCBhbGwgRlBScyBhcmUgYWxzbyBmcmVlLgogICAgIAotICAg
IGlmIChoYXZlRlBScykgewotICAgICAgICAvLyA3KSBCb3ggYWxsIGRvdWJsZXMgKHJlbGllcyBv
biB0aGVyZSBiZWluZyBtb3JlIEdQUnMgdGhhbiBGUFJzKQotICAgICAgICAKLSAgICAgICAgZm9y
IChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgewot
ICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRl
eF07Ci0gICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gSW5GUFIpCi0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBGUFJSZWcgZnByID0gcmVjb3Zlcnku
ZnByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgZ3ByID0gR1BSSW5mbzo6dG9SZWdpc3RlcihGUFJJ
bmZvOjp0b0luZGV4KGZwcikpOwotICAgICAgICAgICAgbV9qaXQuYm94RG91YmxlKGZwciwgZ3By
KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gOCkgRHVtcCBhbGwgZG91YmxlcyBp
bnRvIHRoZSBzdGFjaywgb3IgdG8gdGhlIHNjcmF0Y2ggc3RvcmFnZSBpZgotICAgICAgICAvLyAg
ICB0aGUgZGVzdGluYXRpb24gdmlydHVhbCByZWdpc3RlciBpcyBwb2lzb25lZC4KKyAgICAvLyA1
KSBTYXZlIGFsbCBzdGF0ZSBmcm9tIHRoZSBzdGFjayBpbnRvIHRoZSBzY3JhdGNoIGJ1ZmZlci4g
Rm9yIHNpbXBsaWNpdHkgd2UKKyAgICAvLyAgICBkbyB0aGlzIGV2ZW4gZm9yIHN0YXRlIHRoYXQn
cyBhbHJlYWR5IGluIHRoZSByaWdodCBwbGFjZSBvbiB0aGUgc3RhY2suCisgICAgLy8gICAgSXQg
bWFrZXMgdGhpbmdzIHNpbXBsZXIgbGF0ZXIuCisKKyAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7
IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgIGNvbnN0IFZhbHVl
UmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOworICAgICAgICBpbnQgb3BlcmFu
ZCA9IG9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCk7CiAgICAgICAgIAotICAgICAgICBm
b3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7
Ci0gICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2lu
ZGV4XTsKLSAgICAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBJbkZQUikKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIEdQUlJlZyBncHIgPSBHUFJJbmZv
Ojp0b1JlZ2lzdGVyKEZQUkluZm86OnRvSW5kZXgocmVjb3ZlcnkuZnByKCkpKTsKLSAgICAgICAg
ICAgIGlmIChvcGVyYW5kcy5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lzb25lZFZpcnR1YWxSZWdp
c3RlcnNbb3BlcmFuZHMudmFyaWFibGVGb3JJbmRleChpbmRleCldKSB7Ci0gICAgICAgICAgICAg
ICAgbV9qaXQuc3RvcmU2NChncHIsIHNjcmF0Y2hEYXRhQnVmZmVyICsgY3VycmVudFBvaXNvbklu
ZGV4KTsKLSAgICAgICAgICAgICAgICBtX3BvaXNvblNjcmF0Y2hJbmRpY2VzW29wZXJhbmRzLnZh
cmlhYmxlRm9ySW5kZXgoaW5kZXgpXSA9IGN1cnJlbnRQb2lzb25JbmRleDsKLSAgICAgICAgICAg
ICAgICBjdXJyZW50UG9pc29uSW5kZXgrKzsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgICAgIG1faml0LnN0b3JlNjQoZ3ByLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZp
cnR1YWxSZWdpc3RlcilvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAg
IHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAgICAgICAgY2FzZSBEaXNwbGFjZWRJ
bkpTU3RhY2s6CisgICAgICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAg
IGNhc2UgRG91YmxlRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgICAgICAgICAgbV9qaXQubG9hZDY0
KEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSks
IEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQoR1BSSW5mbzo6cmVn
VDAsIHNjcmF0Y2ggKyBpbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIEFscmVhZHlJbkpTU3RhY2tBc1VuYm94ZWRJbnQzMjoKKyAgICAgICAgY2Fz
ZSBBbHJlYWR5SW5KU1N0YWNrQXNVbmJveGVkRG91YmxlOgorICAgICAgICAgICAgbV9qaXQubG9h
ZDY0KEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5kKSwgR1BSSW5mbzo6cmVnVDAp
OworICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgc2NyYXRjaCArIGlu
ZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICAvLyBBdCB0
aGlzIHBvaW50IGFsbCBHUFJzIGFuZCBGUFJzIGFyZSBhdmFpbGFibGUgZm9yIHNjcmF0Y2ggdXNl
LgorICAgIC8vIDYpIERvIGFsbCBkYXRhIGZvcm1hdCBjb252ZXJzaW9ucyBhbmQgc3RvcmUgdGhl
IHJlc3VsdHMgaW50byB0aGUgc3RhY2suCiAgICAgCi0gICAgLy8gOSkgQm94IGFsbCB1bmJveGVk
IGRvdWJsZXMgaW4gdGhlIHN0YWNrLgotICAgIGlmIChoYXZlVW5ib3hlZERvdWJsZXMpIHsKLSAg
ICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytp
bmRleCkgewotICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVy
YW5kc1tpbmRleF07Ci0gICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gQWxy
ZWFkeUluSlNTdGFja0FzVW5ib3hlZERvdWJsZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9y
KChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KSksIEZQUklu
Zm86OmZwUmVnVDApOwotICAgICAgICAgICAgbV9qaXQuYm94RG91YmxlKEZQUkluZm86OmZwUmVn
VDAsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIG1faml0LnN0b3JlNjQoR1BSSW5mbzo6
cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJh
bmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAg
ICBBU1NFUlQoY3VycmVudFBvaXNvbkluZGV4ID09IG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVn
aXN0ZXJzKTsKKyAgICBib29sIGhhdmVBcmd1bWVudHMgPSBmYWxzZTsKICAgICAKLSAgICAvLyAx
MCkgUmVzaHVmZmxlIGRpc3BsYWNlZCB2aXJ0dWFsIHJlZ2lzdGVycy4gT3B0aW1pemUgZm9yIHRo
ZSBjYXNlIHRoYXQKLSAgICAvLyAgICB0aGUgbnVtYmVyIG9mIGRpc3BsYWNlZCB2aXJ0dWFsIHJl
Z2lzdGVycyBpcyBub3QgbW9yZSB0aGFuIHRoZSBudW1iZXIKLSAgICAvLyAgICBvZiBhdmFpbGFi
bGUgcGh5c2ljYWwgcmVnaXN0ZXJzLgotICAgIAotICAgIGlmIChudW1iZXJPZkRpc3BsYWNlZFZp
cnR1YWxSZWdpc3RlcnMpIHsKLSAgICAgICAgaWYgKG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJl
Z2lzdGVycyA8PSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycykgewotICAgICAgICAgICAgLy8g
U28gZmFyIHRoaXMgYXBwZWFycyB0byBiZSB0aGUgY2FzZSB0aGF0IHRyaWdnZXJzIGFsbCB0aGUg
dGltZSwgYnV0Ci0gICAgICAgICAgICAvLyB0aGF0IGlzIGZhciBmcm9tIGd1YXJhbnRlZWQuCi0g
ICAgICAgIAotICAgICAgICAgICAgdW5zaWduZWQgZGlzcGxhY2VtZW50SW5kZXggPSAwOwotICAg
ICAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsg
KytpbmRleCkgewotICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5
ID0gb3BlcmFuZHNbaW5kZXhdOwotICAgICAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVj
aG5pcXVlKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIERpc3BsYWNlZEluSlNTdGFjazoKLSAg
ICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZDY0KEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zv
cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnRvUmVnaXN0ZXIoZGlzcGxh
Y2VtZW50SW5kZXgrKykpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluSlNTdGFjazog
ewotICAgICAgICAgICAgICAgICAgICBHUFJSZWcgZ3ByID0gR1BSSW5mbzo6dG9SZWdpc3Rlcihk
aXNwbGFjZW1lbnRJbmRleCsrKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKEFz
c2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIGdw
cik7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyLCBncHIpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNhc2UgRG91Ymxl
RGlzcGxhY2VkSW5KU1N0YWNrOiB7Ci0gICAgICAgICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBH
UFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspOwotICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHJlY292ZXJ5LnZp
cnR1YWxSZWdpc3RlcigpKSwgZ3ByKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3ViNjQo
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBncHIpOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgICAgICBkaXNwbGFjZW1l
bnRJbmRleCA9IDA7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwg
b3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgVmFsdWVS
ZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07Ci0gICAgICAgICAgICAgICAgc3dp
dGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgRGlzcGxh
Y2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJbkpTU3Rh
Y2s6Ci0gICAgICAgICAgICAgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAg
ICAgICAgICAgICAgICAgIG1faml0LnN0b3JlNjQoR1BSSW5mbzo6dG9SZWdpc3RlcihkaXNwbGFj
ZW1lbnRJbmRleCsrKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0
ZXIpb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IHVzZSB0aGUgc2h1ZmZsaW5nIGFsZ29yaXRobSB0aGF0IHdlIHVzZQotICAgICAgICAgICAgLy8g
Zm9yIHNwZWN1bGF0aXZlLT5ub24tc3BlY3VsYXRpdmUganVtcHMsIGlmIHdlIGV2ZXIgZGlzY292
ZXIgdGhhdAotICAgICAgICAgICAgLy8gc29tZSBob3QgY29kZSB3aXRoIGxvdHMgb2YgbGl2ZSB2
YWx1ZXMgdGhhdCBnZXQgZGlzcGxhY2VkIGFuZAotICAgICAgICAgICAgLy8gc3BpbGxlZCByZWFs
bHkgZW5qb3lzIGZyZXF1ZW50bHkgZmFpbGluZyBzcGVjdWxhdGlvbi4KLSAgICAgICAgCi0gICAg
ICAgICAgICAvLyBGb3Igbm93IHRoaXMgY29kZSBpcyBlbmdpbmVlcmVkIHRvIGJlIGNvcnJlY3Qg
YnV0IHByb2JhYmx5IG5vdAotICAgICAgICAgICAgLy8gc3VwZXIuIEluIHBhcnRpY3VsYXIsIGl0
IGNvcnJlY3RseSBoYW5kbGVzIGNhc2VzIHdoZXJlIGZvciBleGFtcGxlCi0gICAgICAgICAgICAv
LyB0aGUgZGlzcGxhY2VtZW50cyBhcmUgYSBwZXJtdXRhdGlvbiBvZiB0aGUgZGVzdGluYXRpb24g
dmFsdWVzLCBsaWtlCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gMSAtPiAyCi0gICAg
ICAgICAgICAvLyAyIC0+IDEKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBJdCBhY2Nv
bXBsaXNoZXMgdGhpcyBieSBzaW1wbHkgbGlmdGluZyBhbGwgb2YgdGhlIHZpcnR1YWwgcmVnaXN0
ZXJzCi0gICAgICAgICAgICAvLyBmcm9tIHRoZWlyIG9sZCAoREZHIEpJVCkgbG9jYXRpb25zIGFu
ZCBkcm9wcGluZyB0aGVtIGluIGEgc2NyYXRjaAotICAgICAgICAgICAgLy8gbG9jYXRpb24gaW4g
bWVtb3J5LCBhbmQgdGhlbiB0cmFuc2ZlcnJpbmcgZnJvbSB0aGF0IHNjcmF0Y2ggbG9jYXRpb24K
LSAgICAgICAgICAgIC8vIHRvIHRoZWlyIG5ldyAob2xkIEpJVCkgbG9jYXRpb25zLgotICAgICAg
ICAKLSAgICAgICAgICAgIHVuc2lnbmVkIHNjcmF0Y2hJbmRleCA9IG51bWJlck9mUG9pc29uZWRW
aXJ0dWFsUmVnaXN0ZXJzOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRl
eCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgewotICAgICAgICAgICAgICAgIGNvbnN0IFZh
bHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKLSAgICAg
ICAgICAgICAgICBjYXNlIERpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgICAgICAgICAg
bV9qaXQubG9hZDY0KEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFs
UmVnaXN0ZXIoKSksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQu
c3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgc2NyYXRjaERhdGFCdWZmZXIgKyBzY3JhdGNoSW5kZXgr
Kyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5KU1N0YWNrOiB7Ci0gICAgICAgICAg
ICAgICAgICAgIG1faml0LmxvYWQzMihBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IocmVjb3Zl
cnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAg
ICAgIG1faml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBHUFJJbmZvOjpy
ZWdUMCk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAs
IHNjcmF0Y2hEYXRhQnVmZmVyICsgc2NyYXRjaEluZGV4KyspOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5KU1N0YWNrOiB7Ci0gICAgICAgICAgICAg
ICAgICAgIG1faml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IocmVjb3Zlcnku
dmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgICAg
IG1faml0LnN1YjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVn
VDApOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBz
Y3JhdGNoRGF0YUJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrKTsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAgICAgc2NyYXRjaEluZGV4
ID0gbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnM7Ci0gICAgICAgICAgICBmb3IgKHNp
emVfdCBpbmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7Ci0gICAg
ICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRl
eF07Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewotICAg
ICAgICAgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgICAgIGNh
c2UgSW50MzJEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICAgICAgY2FzZSBEb3VibGVE
aXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChzY3Jh
dGNoRGF0YUJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAg
ICAgICAgICAgICAgIG1faml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVy
czo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChp
bmRleCkpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICBmb3IgKHNpemVfdCBpbmRleCA9
IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgIGNvbnN0IFZh
bHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOworICAgICAgICBpbnQgb3Bl
cmFuZCA9IG9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCk7CiAgICAgICAgIAotICAgICAg
ICAgICAgQVNTRVJUKHNjcmF0Y2hJbmRleCA9PSBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lz
dGVycyArIG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycyk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgCi0gICAgLy8gMTEpIER1bXAgYWxsIHBvaXNvbmVkIHZpcnR1YWwgcmVnaXN0ZXJz
LgotICAgIAotICAgIGlmIChudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycykgewotICAg
ICAgICBmb3IgKGludCB2aXJ0dWFsUmVnaXN0ZXIgPSAwOyB2aXJ0dWFsUmVnaXN0ZXIgPCAoaW50
KW9wZXJhbmRzLm51bWJlck9mTG9jYWxzKCk7ICsrdmlydHVhbFJlZ2lzdGVyKSB7Ci0gICAgICAg
ICAgICBpZiAoIXBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1t2aXJ0dWFsUmVnaXN0ZXJdKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1
ZSgpKSB7CisgICAgICAgIGNhc2UgSW5HUFI6CisgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0
YWNrOgorICAgICAgICAgICAgbV9qaXQubG9hZDY0KHNjcmF0Y2ggKyBpbmRleCwgR1BSSW5mbzo6
cmVnVDApOworICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgQXNzZW1i
bHlIZWxwZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9w
ZXJhbmRzLmxvY2FsKHZpcnR1YWxSZWdpc3Rlcik7Ci0gICAgICAgICAgICBzd2l0Y2ggKHJlY292
ZXJ5LnRlY2huaXF1ZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEluR1BSOgotICAgICAgICAgICAg
Y2FzZSBVbmJveGVkSW50MzJJbkdQUjoKLSAgICAgICAgICAgIGNhc2UgVUludDMySW5HUFI6Ci0g
ICAgICAgICAgICBjYXNlIEluRlBSOgotICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChzY3Jh
dGNoRGF0YUJ1ZmZlciArIHBvaXNvbkluZGV4KHZpcnR1YWxSZWdpc3RlciksIEdQUkluZm86OnJl
Z1QwKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBBc3Nl
bWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3Rlcilsb2NhbFRvT3BlcmFuZCh2
aXJ0dWFsUmVnaXN0ZXIpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQorICAgICAgICBjYXNlIEFscmVhZHlJbkpTU3RhY2tBc1VuYm94ZWRJbnQzMjoKKyAg
ICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKKyAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNl
ZEluSlNTdGFjazoKKyAgICAgICAgICAgIG1faml0LmxvYWQ2NChzY3JhdGNoICsgaW5kZXgsIEdQ
UkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIG1faml0Lnplcm9FeHRlbmQzMlRvUHRyKEdQUklu
Zm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBtX2ppdC5vcjY0KEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAg
bV9qaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9y
KG9wZXJhbmQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgQWxyZWFkeUluSlNTdGFja0FzVW5ib3hlZERvdWJsZToKKyAgICAgICAgY2FzZSBJbkZQUjoK
KyAgICAgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAgICAgICBtX2pp
dC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihzY3JhdGNoICsgaW5kZXgpLCBH
UFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKEdQUkluZm86OnJl
Z1QwLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIG1faml0LmJveERvdWJsZShGUFJJ
bmZvOjpmcFJlZ1QwLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTY0
KEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Iob3BlcmFuZCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBVSW50MzJJbkdQ
UjogeworICAgICAgICAgICAgbV9qaXQubG9hZDY0KHNjcmF0Y2ggKyBpbmRleCwgR1BSSW5mbzo6
cmVnVDApOworICAgICAgICAgICAgbV9qaXQuemVyb0V4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmVn
VDAsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcCBw
b3NpdGl2ZSA9IG1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVy
czo6R3JlYXRlclRoYW5PckVxdWFsLAorICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QwLCBB
c3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSk7CisgICAgICAgICAgICBtX2ppdC5jb252
ZXJ0SW50MzJUb0RvdWJsZShHUFJJbmZvOjpyZWdUMCwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAg
ICAgICAgICBtX2ppdC5hZGREb3VibGUoCisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJz
OjpBYnNvbHV0ZUFkZHJlc3MoJkFzc2VtYmx5SGVscGVyczo6dHdvVG9UaGUzMiksCisgICAgICAg
ICAgICAgICAgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICBtX2ppdC5ib3hEb3VibGUo
RlBSSW5mbzo6ZnBSZWdUMCwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgQXNzZW1ibHlI
ZWxwZXJzOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgICAgICBwb3NpdGl2ZS5s
aW5rKCZtX2ppdCk7CisgICAgICAgICAgICBtX2ppdC5vcjY0KEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgZG9uZS5saW5rKCZtX2pp
dCk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhl
bHBlcnM6OmFkZHJlc3NGb3Iob3BlcmFuZCkpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KLSAgICB9Ci0gICAgCi0gICAgLy8gMTIpIER1bXAgYWxsIGNvbnN0YW50cy4gT3B0aW1pemUg
Zm9yIFVuZGVmaW5lZCwgc2luY2UgdGhhdCdzIGEgY29uc3RhbnQgd2Ugc2VlCi0gICAgLy8gICAg
IG9mdGVuLgotCi0gICAgaWYgKGhhdmVDb25zdGFudHMpIHsKLSAgICAgICAgaWYgKGhhdmVVbmRl
ZmluZWQpCi0gICAgICAgICAgICBtX2ppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIEdQUkluZm86OnJlZ1QwKTsKLSAg
ICAgICAgCi0gICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5z
aXplKCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292
ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwotICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1
ZSgpICE9IENvbnN0YW50KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
aWYgKHJlY292ZXJ5LmNvbnN0YW50KCkuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICBt
X2ppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Io
KFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChBc3NlbWJseUhlbHBl
cnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUocmVjb3ZlcnkuY29uc3RhbnQoKSkpLCBB
c3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kcy5vcGVy
YW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDb25zdGFu
dDoKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQoCisgICAgICAgICAgICAgICAgQXNzZW1ibHlI
ZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHJlY292ZXJ5LmNvbnN0YW50KCkp
KSwKKyAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Iob3BlcmFuZCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcmd1bWVu
dHNUaGF0V2VyZU5vdENyZWF0ZWQ6CisgICAgICAgICAgICBoYXZlQXJndW1lbnRzID0gdHJ1ZTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICAvLyAxMykgQWRqdXN0
IHRoZSBvbGQgSklUJ3MgZXhlY3V0ZSBjb3VudGVyLiBTaW5jZSB3ZSBhcmUgZXhpdGluZyBPU1Is
IHdlIGtub3cKLSAgICAvLyAgICAgdGhhdCBhbGwgbmV3IGNhbGxzIGludG8gdGhpcyBjb2RlIHdp
bGwgZ28gdG8gdGhlIG5ldyBKSVQsIHNvIHRoZSBleGVjdXRlCi0gICAgLy8gICAgIGNvdW50ZXIg
b25seSBhZmZlY3RzIGNhbGwgZnJhbWVzIHRoYXQgcGVyZm9ybWVkIE9TUiBleGl0IGFuZCBjYWxs
IGZyYW1lcwotICAgIC8vICAgICB0aGF0IHdlcmUgc3RpbGwgZXhlY3V0aW5nIHRoZSBvbGQgSklU
IGF0IHRoZSB0aW1lIG9mIGFub3RoZXIgY2FsbCBmcmFtZSdzCi0gICAgLy8gICAgIE9TUiBleGl0
LiBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZToKKyAgICAvLyA3
KSBBZGp1c3QgdGhlIG9sZCBKSVQncyBleGVjdXRlIGNvdW50ZXIuIFNpbmNlIHdlIGFyZSBleGl0
aW5nIE9TUiwgd2Uga25vdworICAgIC8vICAgIHRoYXQgYWxsIG5ldyBjYWxscyBpbnRvIHRoaXMg
Y29kZSB3aWxsIGdvIHRvIHRoZSBuZXcgSklULCBzbyB0aGUgZXhlY3V0ZQorICAgIC8vICAgIGNv
dW50ZXIgb25seSBhZmZlY3RzIGNhbGwgZnJhbWVzIHRoYXQgcGVyZm9ybWVkIE9TUiBleGl0IGFu
ZCBjYWxsIGZyYW1lcworICAgIC8vICAgIHRoYXQgd2VyZSBzdGlsbCBleGVjdXRpbmcgdGhlIG9s
ZCBKSVQgYXQgdGhlIHRpbWUgb2YgYW5vdGhlciBjYWxsIGZyYW1lJ3MKKyAgICAvLyAgICBPU1Ig
ZXhpdC4gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCB0aGUgZm9sbG93aW5nIGlzIHRydWU6CiAgICAg
Ly8KLSAgICAvLyAgICAgKGEpIENvZGUgdGhlIHBlcmZvcm1zIGFuIE9TUiBleGl0IGdldHMgYSBj
aGFuY2UgdG8gcmVlbnRlciBvcHRpbWl6ZWQKLSAgICAvLyAgICAgICAgIGNvZGUgZXZlbnR1YWxs
eSwgc2luY2Ugb3B0aW1pemVkIGNvZGUgaXMgZmFzdGVyLiBCdXQgd2UgZG9uJ3QKLSAgICAvLyAg
ICAgICAgIHdhbnQgdG8gZG8gc3VjaCByZWVudGVyeSB0b28gYWdncmVzc2l2ZWx5IChzZWUgKGMp
IGJlbG93KS4KKyAgICAvLyAgICAoYSkgQ29kZSB0aGUgcGVyZm9ybXMgYW4gT1NSIGV4aXQgZ2V0
cyBhIGNoYW5jZSB0byByZWVudGVyIG9wdGltaXplZAorICAgIC8vICAgICAgICBjb2RlIGV2ZW50
dWFsbHksIHNpbmNlIG9wdGltaXplZCBjb2RlIGlzIGZhc3Rlci4gQnV0IHdlIGRvbid0CisgICAg
Ly8gICAgICAgIHdhbnQgdG8gZG8gc3VjaCByZWVudGVyeSB0b28gYWdncmVzc2l2ZWx5IChzZWUg
KGMpIGJlbG93KS4KICAgICAvLwotICAgIC8vICAgICAoYikgSWYgdGhlcmUgaXMgY29kZSBvbiB0
aGUgY2FsbCBzdGFjayB0aGF0IGlzIHN0aWxsIHJ1bm5pbmcgdGhlIG9sZAotICAgIC8vICAgICAg
ICAgSklUJ3MgY29kZSBhbmQgaGFzIG5ldmVyIE9TUidkLCB0aGVuIGl0IHNob3VsZCBnZXQgYSBj
aGFuY2UgdG8KLSAgICAvLyAgICAgICAgIHBlcmZvcm0gT1NSIGVudHJ5IGRlc3BpdGUgdGhlIGZh
Y3QgdGhhdCB3ZSd2ZSBleGl0ZWQuCisgICAgLy8gICAgKGIpIElmIHRoZXJlIGlzIGNvZGUgb24g
dGhlIGNhbGwgc3RhY2sgdGhhdCBpcyBzdGlsbCBydW5uaW5nIHRoZSBvbGQKKyAgICAvLyAgICAg
ICAgSklUJ3MgY29kZSBhbmQgaGFzIG5ldmVyIE9TUidkLCB0aGVuIGl0IHNob3VsZCBnZXQgYSBj
aGFuY2UgdG8KKyAgICAvLyAgICAgICAgcGVyZm9ybSBPU1IgZW50cnkgZGVzcGl0ZSB0aGUgZmFj
dCB0aGF0IHdlJ3ZlIGV4aXRlZC4KICAgICAvLwotICAgIC8vICAgICAoYykgQ29kZSB0aGUgcGVy
Zm9ybXMgYW4gT1NSIGV4aXQgc2hvdWxkIG5vdCBpbW1lZGlhdGVseSByZXRyeSBPU1IKLSAgICAv
LyAgICAgICAgIGVudHJ5LCBzaW5jZSBib3RoIGZvcm1zIG9mIE9TUiBhcmUgZXhwZW5zaXZlLiBP
U1IgZW50cnkgaXMKLSAgICAvLyAgICAgICAgIHBhcnRpY3VsYXJseSBleHBlbnNpdmUuCisgICAg
Ly8gICAgKGMpIENvZGUgdGhlIHBlcmZvcm1zIGFuIE9TUiBleGl0IHNob3VsZCBub3QgaW1tZWRp
YXRlbHkgcmV0cnkgT1NSCisgICAgLy8gICAgICAgIGVudHJ5LCBzaW5jZSBib3RoIGZvcm1zIG9m
IE9TUiBhcmUgZXhwZW5zaXZlLiBPU1IgZW50cnkgaXMKKyAgICAvLyAgICAgICAgcGFydGljdWxh
cmx5IGV4cGVuc2l2ZS4KICAgICAvLwotICAgIC8vICAgICAoZCkgRnJlcXVlbnQgT1NSIGZhaWx1
cmVzLCBldmVuIHRob3NlIHRoYXQgZG8gbm90IHJlc3VsdCBpbiB0aGUgY29kZQotICAgIC8vICAg
ICAgICAgcnVubmluZyBpbiBhIGhvdCBsb29wLCByZXN1bHQgaW4gcmVjb21waWxhdGlvbiBnZXR0
aW5nIHRyaWdnZXJlZC4KKyAgICAvLyAgICAoZCkgRnJlcXVlbnQgT1NSIGZhaWx1cmVzLCBldmVu
IHRob3NlIHRoYXQgZG8gbm90IHJlc3VsdCBpbiB0aGUgY29kZQorICAgIC8vICAgICAgICBydW5u
aW5nIGluIGEgaG90IGxvb3AsIHJlc3VsdCBpbiByZWNvbXBpbGF0aW9uIGdldHRpbmcgdHJpZ2dl
cmVkLgogICAgIC8vCi0gICAgLy8gICAgIFRvIGVuc3VyZSAoYyksIHdlJ2QgbGlrZSB0byBzZXQg
dGhlIGV4ZWN1dGUgY291bnRlciB0bwotICAgIC8vICAgICBjb3VudGVyVmFsdWVGb3JPcHRpbWl6
ZUFmdGVyV2FybVVwKCkuIFRoaXMgc2VlbXMgbGlrZSBpdCB3b3VsZCBlbmRhbmdlcgotICAgIC8v
ICAgICAoYSkgYW5kIChiKSwgc2luY2UgdGhlbiBldmVyeSBPU1IgZXhpdCB3b3VsZCBkZWxheSB0
aGUgb3Bwb3J0dW5pdHkgZm9yCi0gICAgLy8gICAgIGV2ZXJ5IGNhbGwgZnJhbWUgdG8gcGVyZm9y
bSBPU1IgZW50cnkuIEVzc2VudGlhbGx5LCBpZiBPU1IgZXhpdCBoYXBwZW5zCi0gICAgLy8gICAg
IGZyZXF1ZW50bHkgYW5kIHRoZSBmdW5jdGlvbiBoYXMgZmV3IGxvb3BzLCB0aGVuIHRoZSBjb3Vu
dGVyIHdpbGwgbmV2ZXIKLSAgICAvLyAgICAgYmVjb21lIG5vbi1uZWdhdGl2ZSBhbmQgT1NSIGVu
dHJ5IHdpbGwgbmV2ZXIgYmUgdHJpZ2dlcmVkLiBPU1IgZW50cnkKLSAgICAvLyAgICAgd2lsbCBv
bmx5IGhhcHBlbiBpZiBhIGxvb3AgZ2V0cyBob3QgaW4gdGhlIG9sZCBKSVQsIHdoaWNoIGRvZXMg
YSBwcmV0dHkKLSAgICAvLyAgICAgZ29vZCBqb2Igb2YgZW5zdXJpbmcgKGEpIGFuZCAoYikuIEJ1
dCB0aGF0IGRvZXNuJ3QgdGFrZSBjYXJlIG9mIChkKSwKLSAgICAvLyAgICAgc2luY2UgZWFjaCBz
cGVjdWxhdGlvbiBmYWlsdXJlIHdvdWxkIHJlc2V0IHRoZSBleGVjdXRlIGNvdW50ZXIuCi0gICAg
Ly8gICAgIFNvIHdlIGNoZWNrIGhlcmUgaWYgdGhlIG51bWJlciBvZiBzcGVjdWxhdGlvbiBmYWls
dXJlcyBpcyBzaWduaWZpY2FudGx5Ci0gICAgLy8gICAgIGxhcmdlciB0aGFuIHRoZSBudW1iZXIg
b2Ygc3VjY2Vzc2VzICh3ZSB3YW50IDkwJSBzdWNjZXNzIHJhdGUpLCBhbmQgaWYKLSAgICAvLyAg
ICAgdGhlcmUgaGF2ZSBiZWVuIGEgbGFyZ2UgZW5vdWdoIG51bWJlciBvZiBmYWlsdXJlcy4gSWYg
c28sIHdlIHNldCB0aGUKLSAgICAvLyAgICAgY291bnRlciB0byAwOyBvdGhlcndpc2Ugd2Ugc2V0
IHRoZSBjb3VudGVyIHRvCi0gICAgLy8gICAgIGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJX
YXJtVXAoKS4KKyAgICAvLyAgICBUbyBlbnN1cmUgKGMpLCB3ZSdkIGxpa2UgdG8gc2V0IHRoZSBl
eGVjdXRlIGNvdW50ZXIgdG8KKyAgICAvLyAgICBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVy
V2FybVVwKCkuIFRoaXMgc2VlbXMgbGlrZSBpdCB3b3VsZCBlbmRhbmdlcgorICAgIC8vICAgIChh
KSBhbmQgKGIpLCBzaW5jZSB0aGVuIGV2ZXJ5IE9TUiBleGl0IHdvdWxkIGRlbGF5IHRoZSBvcHBv
cnR1bml0eSBmb3IKKyAgICAvLyAgICBldmVyeSBjYWxsIGZyYW1lIHRvIHBlcmZvcm0gT1NSIGVu
dHJ5LiBFc3NlbnRpYWxseSwgaWYgT1NSIGV4aXQgaGFwcGVucworICAgIC8vICAgIGZyZXF1ZW50
bHkgYW5kIHRoZSBmdW5jdGlvbiBoYXMgZmV3IGxvb3BzLCB0aGVuIHRoZSBjb3VudGVyIHdpbGwg
bmV2ZXIKKyAgICAvLyAgICBiZWNvbWUgbm9uLW5lZ2F0aXZlIGFuZCBPU1IgZW50cnkgd2lsbCBu
ZXZlciBiZSB0cmlnZ2VyZWQuIE9TUiBlbnRyeQorICAgIC8vICAgIHdpbGwgb25seSBoYXBwZW4g
aWYgYSBsb29wIGdldHMgaG90IGluIHRoZSBvbGQgSklULCB3aGljaCBkb2VzIGEgcHJldHR5Cisg
ICAgLy8gICAgZ29vZCBqb2Igb2YgZW5zdXJpbmcgKGEpIGFuZCAoYikuIEJ1dCB0aGF0IGRvZXNu
J3QgdGFrZSBjYXJlIG9mIChkKSwKKyAgICAvLyAgICBzaW5jZSBlYWNoIHNwZWN1bGF0aW9uIGZh
aWx1cmUgd291bGQgcmVzZXQgdGhlIGV4ZWN1dGUgY291bnRlci4KKyAgICAvLyAgICBTbyB3ZSBj
aGVjayBoZXJlIGlmIHRoZSBudW1iZXIgb2Ygc3BlY3VsYXRpb24gZmFpbHVyZXMgaXMgc2lnbmlm
aWNhbnRseQorICAgIC8vICAgIGxhcmdlciB0aGFuIHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2VzICh3
ZSB3YW50IDkwJSBzdWNjZXNzIHJhdGUpLCBhbmQgaWYKKyAgICAvLyAgICB0aGVyZSBoYXZlIGJl
ZW4gYSBsYXJnZSBlbm91Z2ggbnVtYmVyIG9mIGZhaWx1cmVzLiBJZiBzbywgd2Ugc2V0IHRoZQor
ICAgIC8vICAgIGNvdW50ZXIgdG8gMDsgb3RoZXJ3aXNlIHdlIHNldCB0aGUgY291bnRlciB0bwor
ICAgIC8vICAgIGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKS4KICAgICAKICAg
ICBoYW5kbGVFeGl0Q291bnRzKG1faml0LCBleGl0KTsKICAgICAKLSAgICAvLyAxNCkgUmVpZnkg
aW5saW5lZCBjYWxsIGZyYW1lcy4KKyAgICAvLyA4KSBSZWlmeSBpbmxpbmVkIGNhbGwgZnJhbWVz
LgogICAgIAogICAgIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMobV9qaXQsIGV4aXQpOwogICAgIAot
ICAgIC8vIDE1KSBDcmVhdGUgYXJndW1lbnRzIGlmIG5lY2Vzc2FyeSBhbmQgcGxhY2UgdGhlbSBp
bnRvIHRoZSBhcHByb3ByaWF0ZSBhbGlhc2VkCi0gICAgLy8gICAgIHJlZ2lzdGVycy4KKyAgICAv
LyA5KSBDcmVhdGUgYXJndW1lbnRzIGlmIG5lY2Vzc2FyeSBhbmQgcGxhY2UgdGhlbSBpbnRvIHRo
ZSBhcHByb3ByaWF0ZSBhbGlhc2VkCisgICAgLy8gICAgcmVnaXN0ZXJzLgogICAgIAogICAgIGlm
IChoYXZlQXJndW1lbnRzKSB7CiAgICAgICAgIEhhc2hTZXQ8SW5saW5lQ2FsbEZyYW1lKiwgRGVm
YXVsdEhhc2g8SW5saW5lQ2FsbEZyYW1lKj46Okhhc2gsCkBAIC02NTEsMTIgKzM4NywxMiBAQCB2
b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgIH0KICAgICB9
CiAgICAgCi0gICAgLy8gMTYpIExvYWQgdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBieXRlY29kZSBv
cGVyYXRpb24gaW50byByZWdUMC4KKyAgICAvLyAxMCkgTG9hZCB0aGUgcmVzdWx0IG9mIHRoZSBs
YXN0IGJ5dGVjb2RlIG9wZXJhdGlvbiBpbnRvIHJlZ1QwLgogICAgIAogICAgIGlmIChleGl0Lm1f
bGFzdFNldE9wZXJhbmQgIT0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKICAgICAg
ICAgbV9qaXQubG9hZDY0KEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihleGl0Lm1fbGFzdFNl
dE9wZXJhbmQpLCBHUFJJbmZvOjpjYWNoZWRSZXN1bHRSZWdpc3Rlcik7CiAgICAgCi0gICAgLy8g
MTcpIEFuZCBmaW5pc2guCisgICAgLy8gMTEpIEFuZCBmaW5pc2guCiAgICAgCiAgICAgYWRqdXN0
QW5kSnVtcFRvVGFyZ2V0KG1faml0LCBleGl0KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDE1NTc5NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzMsMTIgKzMzLDIxIEBACiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgog
I2luY2x1ZGUgIkRGR09TUkV4aXRQcmVwYXJhdGlvbi5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIu
aCIKKyNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgi
CiAjaW5jbHVkZSAiUmVwYXRjaEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0
cmVhbS5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK3N0YXRpYyBDU3Ry
aW5nIHNob3J0T3BlcmFuZHNEdW1wKGNvbnN0IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVy
YW5kcykKK3sKKyAgICBEdW1wQ29udGV4dCBjb250ZXh0OworICAgIFN0cmluZ1ByaW50U3RyZWFt
IG91dDsKKyAgICBvdXQucHJpbnQoaW5Db250ZXh0KG9wZXJhbmRzLCAmY29udGV4dCkpOworICAg
IHJldHVybiBvdXQudG9DU3RyaW5nKCk7Cit9CisKIGV4dGVybiAiQyIgewogCiB2b2lkIGNvbXBp
bGVPU1JFeGl0KEV4ZWNTdGF0ZSogZXhlYykKQEAgLTEwMSw5ICsxMTAsMTAgQEAgdm9pZCBjb21w
aWxlT1NSRXhpdChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIGV4aXQubV9jb2RlID0gRklOQUxJ
WkVfQ09ERV9JRigKICAgICAgICAgICAgIHNob3VsZFNob3dEaXNhc3NlbWJseSgpLAogICAgICAg
ICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICAgICAoIkRGRyBPU1IgZXhpdCAjJXUgKCVzLCAl
cykgZnJvbSAlcyIsCisgICAgICAgICAgICAoIkRGRyBPU1IgZXhpdCAjJXUgKCVzLCAlcykgZnJv
bSAlcywgd2l0aCBvcGVyYW5kcyA9ICVzIiwKICAgICAgICAgICAgICAgICBleGl0SW5kZXgsIHRv
Q1N0cmluZyhleGl0Lm1fY29kZU9yaWdpbikuZGF0YSgpLAotICAgICAgICAgICAgICAgIGV4aXRL
aW5kVG9TdHJpbmcoZXhpdC5tX2tpbmQpLCB0b0NTdHJpbmcoKmNvZGVCbG9jaykuZGF0YSgpKSk7
CisgICAgICAgICAgICAgICAgZXhpdEtpbmRUb1N0cmluZyhleGl0Lm1fa2luZCksIHRvQ1N0cmlu
ZygqY29kZUJsb2NrKS5kYXRhKCksCisgICAgICAgICAgICAgICAgc2hvcnRPcGVyYW5kc0R1bXAo
b3BlcmFuZHMpLmRhdGEoKSkpOwogICAgIH0KICAgICAKICAgICB7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>