<?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>120047</bug_id>
          
          <creation_ts>2013-08-19 18:27:22 -0700</creation_ts>
          <short_desc>Relatively slow performance on emscripten-compiled memops benchmark</short_desc>
          <delta_ts>2014-07-02 15:31:56 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>112840</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Alon Zakai">alonzakai</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>918901</commentid>
    <comment_count>0</comment_count>
      <attachid>209146</attachid>
    <who name="Alon Zakai">alonzakai</who>
    <bug_when>2013-08-19 18:27:22 -0700</bug_when>
    <thetext>Created attachment 209146
memops benchmark

Attached is the &quot;memops&quot; benchmark from emscripten. The numbers on my 64-bit linux machine are

jsc  5.532 seconds
sm   1.551
v8   1.488

It is possible to run the benchmark for a longer time period if that is useful, by giving it an argument of 4 or 5 (-- 4 for jsc or v8, just 4 for sm). The results are overall similar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>918947</commentid>
    <comment_count>1</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-08-19 23:21:30 -0700</bug_when>
    <thetext>&lt;rdar://problem/14781573&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>919133</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-20 11:24:31 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; Created an attachment (id=209146) [details]
&gt; memops benchmark
&gt; 
&gt; Attached is the &quot;memops&quot; benchmark from emscripten. The numbers on my 64-bit linux machine are
&gt; 
&gt; jsc  5.532 seconds
&gt; sm   1.551
&gt; v8   1.488
&gt; 
&gt; It is possible to run the benchmark for a longer time period if that is useful, by giving it an argument of 4 or 5 (-- 4 for jsc or v8, just 4 for sm). The results are overall similar.

Interesting, will look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>919140</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-20 11:42:02 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (In reply to comment #0)
&gt; &gt; Created an attachment (id=209146) [details] [details]
&gt; &gt; memops benchmark
&gt; &gt; 
&gt; &gt; Attached is the &quot;memops&quot; benchmark from emscripten. The numbers on my 64-bit linux machine are
&gt; &gt; 
&gt; &gt; jsc  5.532 seconds
&gt; &gt; sm   1.551
&gt; &gt; v8   1.488
&gt; &gt; 
&gt; &gt; It is possible to run the benchmark for a longer time period if that is useful, by giving it an argument of 4 or 5 (-- 4 for jsc or v8, just 4 for sm). The results are overall similar.
&gt; 
&gt; Interesting, will look.

OK - I think that something is terribly wrong on Linux, or V8 and SM got a lot faster.  On my 64-bit Mac, I see:

Chrome 28: 3.162 sec
A recent WebKit: 5.382 sec

So, clearly we&apos;re slower and we should fix that, but we&apos;re not *that* much slower.

Can you check, for sanity, if you see a difference between Chrome 28 (the latest Chrome on the release channel) and the V8 you have?

For posterity I post the HTML-ified version of the benchmark I used to run in browser.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>919141</commentid>
    <comment_count>4</comment_count>
      <attachid>209212</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-20 11:42:32 -0700</bug_when>
    <thetext>Created attachment 209212
memops htmlified</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>919145</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-20 11:49:18 -0700</bug_when>
    <thetext>Oh - never mind.  Chrome Canary scores really well: 1696 ms.

So it&apos;s a real bug, and it&apos;s not Linux-only.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>919153</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-20 11:58:35 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Oh - never mind.  Chrome Canary scores really well: 1696 ms.
&gt; 
&gt; So it&apos;s a real bug, and it&apos;s not Linux-only.

Here&apos;s basically what&apos;s going wrong:

- the HEAP8/HEAP32 variables are closure variables, which makes sense.  But our closure variable support still requires *way too many loads*.

- since the DFG cannot reason about GetClosureVar in a non-block-local way, the hottest basic block of the hottest loop of the memops benchmark ends up repeatedly loading the scope, loading the registers, loading the closure variable, type checking the thing it loaded to see that it&apos;s a typed array, and then loading the typed array&apos;s vector, and then loading from that vector.  omgwtfbbq.

There are four paths for solving this:

- The obvious: FTL JIT.  https://bugs.webkit.org/show_bug.cgi?id=112840.  This higher-tier JIT will give us LICM on all of those things, resulting in inter-block reasoning about closure variables and everything else.

- The frustrating: reduce the number of loads needed to get to a closure variable.  Reduce the number of loads needed to get to a value in a typed array.  Reduce the number of loads needed to check that something is a typed array.  And so on.

- The hilarious: constant inference for closure variables, which will make us compile the code with HEAP8/HEAP32/etc being cell constants.  Look, ma, no type checks!  I don&apos;t know if this will make any sense, though.

- The outrageous: recognize the emscripten idioms.  I don&apos;t want to do this.

I&apos;m going to add this benchmark to our repertoire and I&apos;ll use it for FTL testing.  Before I can do that, though, I&apos;ll need to finally add typed arrays to the FTL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>919281</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-20 16:49:47 -0700</bug_when>
    <thetext>Added the memops benchmark to JSRegress in http://trac.webkit.org/changeset/154376.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>919687</commentid>
    <comment_count>8</comment_count>
    <who name="Alon Zakai">alonzakai</who>
    <bug_when>2013-08-21 17:25:05 -0700</bug_when>
    <thetext>Btw, is there something emscripten could emit differently that would be easier for JSC to optimize?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>919708</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-21 20:49:38 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Btw, is there something emscripten could emit differently that would be easier for JSC to optimize?

Good question.  I think you&apos;re emitting optimal code, and we&apos;re just doing a poor job right now - and we will fix that.

Question though:  is the &apos;asm = (function ...&apos; thing really meant to be executed once, or multiple times?  If it&apos;s meant to be executed once, then what you&apos;re doing right now is going to be optimal in the long run and we just have to get that right: closure variables that arise in run-once functions, that are initialized once and never reassigned, should be optimized down to constants in our engine.  They aren&apos;t yet but they will be eventually.  It&apos;s such an obvious trick that I wouldn&apos;t be surprised if other engines did this already.  So, I wouldn&apos;t recommend changing this aspect of your code generation even though it&apos;s a pain point for us right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>919710</commentid>
    <comment_count>10</comment_count>
    <who name="Alon Zakai">alonzakai</who>
    <bug_when>2013-08-21 21:03:18 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Question though:  is the &apos;asm = (function ...&apos; thing really meant to be executed once, or multiple times?

Exactly once. The function is not named and immediately executed, so there is in fact no way to execute it more than once. And as you say, the important locals inside it like HEAP8 are assigned to exactly once, so there is a guarantee that it is ok to optimize accesses of them.

&gt; If it&apos;s meant to be executed once, then what you&apos;re doing right now is going to be optimal in the long run and we just have to get that right: closure variables that arise in run-once functions, that are initialized once and never reassigned, should be optimized down to constants in our engine.  They aren&apos;t yet but they will be eventually.  It&apos;s such an obvious trick that I wouldn&apos;t be surprised if other engines did this already.

Yes, sm does something along those lines. Not sure what v8 does.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020070</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-02 15:31:56 -0700</bug_when>
    <thetext>I believe that this is no longer a problem.

*** This bug has been marked as a duplicate of bug 112840 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>209146</attachid>
            <date>2013-08-19 18:27:22 -0700</date>
            <delta_ts>2013-08-19 18:27:22 -0700</delta_ts>
            <desc>memops benchmark</desc>
            <filename>memops.js</filename>
            <type>application/x-javascript</type>
            <size>211083</size>
            <attacher name="Alon Zakai">alonzakai</attacher>
            
              <data encoding="base64">Ly8gTm90ZTogRm9yIG1heGltdW0tc3BlZWQgY29kZSwgc2VlICJPcHRpbWl6aW5nIENvZGUiIG9u
IHRoZSBFbXNjcmlwdGVuIHdpa2ksIGh0dHBzOi8vZ2l0aHViLmNvbS9rcmlwa2VuL2Vtc2NyaXB0
ZW4vd2lraS9PcHRpbWl6aW5nLUNvZGUKLy8gTm90ZTogU29tZSBFbXNjcmlwdGVuIHNldHRpbmdz
IG1heSBsaW1pdCB0aGUgc3BlZWQgb2YgdGhlIGdlbmVyYXRlZCBjb2RlLgovLyBUaGUgTW9kdWxl
IG9iamVjdDogT3VyIGludGVyZmFjZSB0byB0aGUgb3V0c2lkZSB3b3JsZC4gV2UgaW1wb3J0Ci8v
IGFuZCBleHBvcnQgdmFsdWVzIG9uIGl0LCBhbmQgZG8gdGhlIHdvcmsgdG8gZ2V0IHRoYXQgdGhy
b3VnaAovLyBjbG9zdXJlIGNvbXBpbGVyIGlmIG5lY2Vzc2FyeS4gVGhlcmUgYXJlIHZhcmlvdXMg
d2F5cyBNb2R1bGUgY2FuIGJlIHVzZWQ6Ci8vIDEuIE5vdCBkZWZpbmVkLiBXZSBjcmVhdGUgaXQg
aGVyZQovLyAyLiBBIGZ1bmN0aW9uIHBhcmFtZXRlciwgZnVuY3Rpb24oTW9kdWxlKSB7IC4uZ2Vu
ZXJhdGVkIGNvZGUuLiB9Ci8vIDMuIHByZS1ydW4gYXBwZW5kZWQgaXQsIHZhciBNb2R1bGUgPSB7
fTsgLi5nZW5lcmF0ZWQgY29kZS4uCi8vIDQuIEV4dGVybmFsIHNjcmlwdCB0YWcgZGVmaW5lcyB2
YXIgTW9kdWxlLgovLyBXZSBuZWVkIHRvIGRvIGFuIGV2YWwgaW4gb3JkZXIgdG8gaGFuZGxlIHRo
ZSBjbG9zdXJlIGNvbXBpbGVyCi8vIGNhc2UsIHdoZXJlIHRoaXMgY29kZSBoZXJlIGlzIG1pbmlm
aWVkIGJ1dCBNb2R1bGUgd2FzIGRlZmluZWQKLy8gZWxzZXdoZXJlIChlLmcuIGNhc2UgNCBhYm92
ZSkuIFdlIGFsc28gbmVlZCB0byBjaGVjayBpZiBNb2R1bGUKLy8gYWxyZWFkeSBleGlzdHMgKGUu
Zy4gY2FzZSAzIGFib3ZlKS4KLy8gTm90ZSB0aGF0IGlmIHlvdSB3YW50IHRvIHJ1biBjbG9zdXJl
LCBhbmQgYWxzbyB0byB1c2UgTW9kdWxlCi8vIGFmdGVyIHRoZSBnZW5lcmF0ZWQgY29kZSwgeW91
IHdpbGwgbmVlZCB0byBkZWZpbmUgICB2YXIgTW9kdWxlID0ge307Ci8vIGJlZm9yZSB0aGUgY29k
ZS4gVGhlbiB0aGF0IG9iamVjdCB3aWxsIGJlIHVzZWQgaW4gdGhlIGNvZGUsIGFuZCB5b3UKLy8g
Y2FuIGNvbnRpbnVlIHRvIHVzZSBNb2R1bGUgYWZ0ZXJ3YXJkcyBhcyB3ZWxsLgp2YXIgTW9kdWxl
OwppZiAoIU1vZHVsZSkgTW9kdWxlID0gZXZhbCgnKGZ1bmN0aW9uKCkgeyB0cnkgeyByZXR1cm4g
TW9kdWxlIHx8IHt9IH0gY2F0Y2goZSkgeyByZXR1cm4ge30gfSB9KSgpJyk7Ci8vIFNvbWV0aW1l
cyBhbiBleGlzdGluZyBNb2R1bGUgb2JqZWN0IGV4aXN0cyB3aXRoIHByb3BlcnRpZXMKLy8gbWVh
bnQgdG8gb3ZlcndyaXRlIHRoZSBkZWZhdWx0IG1vZHVsZSBmdW5jdGlvbmFsaXR5LiBIZXJlCi8v
IHdlIGNvbGxlY3QgdGhvc2UgcHJvcGVydGllcyBhbmQgcmVhcHBseSBfYWZ0ZXJfIHdlIGNvbmZp
Z3VyZQovLyB0aGUgY3VycmVudCBlbnZpcm9ubWVudCdzIGRlZmF1bHRzIHRvIGF2b2lkIGhhdmlu
ZyB0byBiZSBzbwovLyBkZWZlbnNpdmUgZHVyaW5nIGluaXRpYWxpemF0aW9uLgp2YXIgbW9kdWxl
T3ZlcnJpZGVzID0ge307CmZvciAodmFyIGtleSBpbiBNb2R1bGUpIHsKICBpZiAoTW9kdWxlLmhh
c093blByb3BlcnR5KGtleSkpIHsKICAgIG1vZHVsZU92ZXJyaWRlc1trZXldID0gTW9kdWxlW2tl
eV07CiAgfQp9Ci8vIFRoZSBlbnZpcm9ubWVudCBzZXR1cCBjb2RlIGJlbG93IGlzIGN1c3RvbWl6
ZWQgdG8gdXNlIE1vZHVsZS4KLy8gKioqIEVudmlyb25tZW50IHNldHVwIGNvZGUgKioqCnZhciBF
TlZJUk9OTUVOVF9JU19OT0RFID0gdHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHR5cGVv
ZiByZXF1aXJlID09PSAnZnVuY3Rpb24nOwp2YXIgRU5WSVJPTk1FTlRfSVNfV0VCID0gdHlwZW9m
IHdpbmRvdyA9PT0gJ29iamVjdCc7CnZhciBFTlZJUk9OTUVOVF9JU19XT1JLRVIgPSB0eXBlb2Yg
aW1wb3J0U2NyaXB0cyA9PT0gJ2Z1bmN0aW9uJzsKdmFyIEVOVklST05NRU5UX0lTX1NIRUxMID0g
IUVOVklST05NRU5UX0lTX1dFQiAmJiAhRU5WSVJPTk1FTlRfSVNfTk9ERSAmJiAhRU5WSVJPTk1F
TlRfSVNfV09SS0VSOwppZiAoRU5WSVJPTk1FTlRfSVNfTk9ERSkgewogIC8vIEV4cG9zZSBmdW5j
dGlvbmFsaXR5IGluIHRoZSBzYW1lIHNpbXBsZSB3YXkgdGhhdCB0aGUgc2hlbGxzIHdvcmsKICAv
LyBOb3RlIHRoYXQgd2UgcG9sbHV0ZSB0aGUgZ2xvYmFsIG5hbWVzcGFjZSBoZXJlLCBvdGhlcndp
c2Ugd2UgYnJlYWsgaW4gbm9kZQogIE1vZHVsZVsncHJpbnQnXSA9IGZ1bmN0aW9uKHgpIHsKICAg
IHByb2Nlc3NbJ3N0ZG91dCddLndyaXRlKHggKyAnXG4nKTsKICB9OwogIE1vZHVsZVsncHJpbnRF
cnInXSA9IGZ1bmN0aW9uKHgpIHsKICAgIHByb2Nlc3NbJ3N0ZGVyciddLndyaXRlKHggKyAnXG4n
KTsKICB9OwogIHZhciBub2RlRlMgPSByZXF1aXJlKCdmcycpOwogIHZhciBub2RlUGF0aCA9IHJl
cXVpcmUoJ3BhdGgnKTsKICBNb2R1bGVbJ3JlYWQnXSA9IGZ1bmN0aW9uKGZpbGVuYW1lLCBiaW5h
cnkpIHsKICAgIGZpbGVuYW1lID0gbm9kZVBhdGhbJ25vcm1hbGl6ZSddKGZpbGVuYW1lKTsKICAg
IHZhciByZXQgPSBub2RlRlNbJ3JlYWRGaWxlU3luYyddKGZpbGVuYW1lKTsKICAgIC8vIFRoZSBw
YXRoIGlzIGFic29sdXRlIGlmIHRoZSBub3JtYWxpemVkIHZlcnNpb24gaXMgdGhlIHNhbWUgYXMg
dGhlIHJlc29sdmVkLgogICAgaWYgKCFyZXQgJiYgZmlsZW5hbWUgIT0gbm9kZVBhdGhbJ3Jlc29s
dmUnXShmaWxlbmFtZSkpIHsKICAgICAgZmlsZW5hbWUgPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAn
Li4nLCAnc3JjJywgZmlsZW5hbWUpOwogICAgICByZXQgPSBub2RlRlNbJ3JlYWRGaWxlU3luYydd
KGZpbGVuYW1lKTsKICAgIH0KICAgIGlmIChyZXQgJiYgIWJpbmFyeSkgcmV0ID0gcmV0LnRvU3Ry
aW5nKCk7CiAgICByZXR1cm4gcmV0OwogIH07CiAgTW9kdWxlWydyZWFkQmluYXJ5J10gPSBmdW5j
dGlvbihmaWxlbmFtZSkgeyByZXR1cm4gTW9kdWxlWydyZWFkJ10oZmlsZW5hbWUsIHRydWUpIH07
CiAgTW9kdWxlWydsb2FkJ10gPSBmdW5jdGlvbihmKSB7CiAgICBnbG9iYWxFdmFsKHJlYWQoZikp
OwogIH07CiAgTW9kdWxlWydhcmd1bWVudHMnXSA9IHByb2Nlc3NbJ2FyZ3YnXS5zbGljZSgyKTsK
ICBtb2R1bGUuZXhwb3J0cyA9IE1vZHVsZTsKfQplbHNlIGlmIChFTlZJUk9OTUVOVF9JU19TSEVM
TCkgewogIE1vZHVsZVsncHJpbnQnXSA9IHByaW50OwogIGlmICh0eXBlb2YgcHJpbnRFcnIgIT0g
J3VuZGVmaW5lZCcpIE1vZHVsZVsncHJpbnRFcnInXSA9IHByaW50RXJyOyAvLyBub3QgcHJlc2Vu
dCBpbiB2OCBvciBvbGRlciBzbQogIGlmICh0eXBlb2YgcmVhZCAhPSAndW5kZWZpbmVkJykgewog
ICAgTW9kdWxlWydyZWFkJ10gPSByZWFkOwogIH0gZWxzZSB7CiAgICBNb2R1bGVbJ3JlYWQnXSA9
IGZ1bmN0aW9uKCkgeyB0aHJvdyAnbm8gcmVhZCgpIGF2YWlsYWJsZSAoanNjPyknIH07CiAgfQog
IE1vZHVsZVsncmVhZEJpbmFyeSddID0gZnVuY3Rpb24oZikgewogICAgcmV0dXJuIHJlYWQoZiwg
J2JpbmFyeScpOwogIH07CiAgaWYgKHR5cGVvZiBzY3JpcHRBcmdzICE9ICd1bmRlZmluZWQnKSB7
CiAgICBNb2R1bGVbJ2FyZ3VtZW50cyddID0gc2NyaXB0QXJnczsKICB9IGVsc2UgaWYgKHR5cGVv
ZiBhcmd1bWVudHMgIT0gJ3VuZGVmaW5lZCcpIHsKICAgIE1vZHVsZVsnYXJndW1lbnRzJ10gPSBh
cmd1bWVudHM7CiAgfQogIHRoaXNbJ01vZHVsZSddID0gTW9kdWxlOwp9CmVsc2UgaWYgKEVOVklS
T05NRU5UX0lTX1dFQiB8fCBFTlZJUk9OTUVOVF9JU19XT1JLRVIpIHsKICBNb2R1bGVbJ3JlYWQn
XSA9IGZ1bmN0aW9uKHVybCkgewogICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwog
ICAgeGhyLm9wZW4oJ0dFVCcsIHVybCwgZmFsc2UpOwogICAgeGhyLnNlbmQobnVsbCk7CiAgICBy
ZXR1cm4geGhyLnJlc3BvbnNlVGV4dDsKICB9OwogIGlmICh0eXBlb2YgYXJndW1lbnRzICE9ICd1
bmRlZmluZWQnKSB7CiAgICBNb2R1bGVbJ2FyZ3VtZW50cyddID0gYXJndW1lbnRzOwogIH0KICBp
ZiAoRU5WSVJPTk1FTlRfSVNfV0VCKSB7CiAgICBNb2R1bGVbJ3ByaW50J10gPSBmdW5jdGlvbih4
KSB7CiAgICAgIGNvbnNvbGUubG9nKHgpOwogICAgfTsKICAgIE1vZHVsZVsncHJpbnRFcnInXSA9
IGZ1bmN0aW9uKHgpIHsKICAgICAgY29uc29sZS5sb2coeCk7CiAgICB9OwogICAgdGhpc1snTW9k
dWxlJ10gPSBNb2R1bGU7CiAgfSBlbHNlIGlmIChFTlZJUk9OTUVOVF9JU19XT1JLRVIpIHsKICAg
IC8vIFdlIGNhbiBkbyB2ZXJ5IGxpdHRsZSBoZXJlLi4uCiAgICB2YXIgVFJZX1VTRV9EVU1QID0g
ZmFsc2U7CiAgICBNb2R1bGVbJ3ByaW50J10gPSAoVFJZX1VTRV9EVU1QICYmICh0eXBlb2YoZHVt
cCkgIT09ICJ1bmRlZmluZWQiKSA/IChmdW5jdGlvbih4KSB7CiAgICAgIGR1bXAoeCk7CiAgICB9
KSA6IChmdW5jdGlvbih4KSB7CiAgICAgIC8vIHNlbGYucG9zdE1lc3NhZ2UoeCk7IC8vIGVuYWJs
ZSB0aGlzIGlmIHlvdSB3YW50IHN0ZG91dCB0byBiZSBzZW50IGFzIG1lc3NhZ2VzCiAgICB9KSk7
CiAgICBNb2R1bGVbJ2xvYWQnXSA9IGltcG9ydFNjcmlwdHM7CiAgfQp9CmVsc2UgewogIC8vIFVu
cmVhY2hhYmxlIGJlY2F1c2UgU0hFTEwgaXMgZGVwZW5kYW50IG9uIHRoZSBvdGhlcnMKICB0aHJv
dyAnVW5rbm93biBydW50aW1lIGVudmlyb25tZW50LiBXaGVyZSBhcmUgd2U/JzsKfQpmdW5jdGlv
biBnbG9iYWxFdmFsKHgpIHsKICBldmFsLmNhbGwobnVsbCwgeCk7Cn0KaWYgKCFNb2R1bGVbJ2xv
YWQnXSA9PSAndW5kZWZpbmVkJyAmJiBNb2R1bGVbJ3JlYWQnXSkgewogIE1vZHVsZVsnbG9hZCdd
ID0gZnVuY3Rpb24oZikgewogICAgZ2xvYmFsRXZhbChNb2R1bGVbJ3JlYWQnXShmKSk7CiAgfTsK
fQppZiAoIU1vZHVsZVsncHJpbnQnXSkgewogIE1vZHVsZVsncHJpbnQnXSA9IGZ1bmN0aW9uKCl7
fTsKfQppZiAoIU1vZHVsZVsncHJpbnRFcnInXSkgewogIE1vZHVsZVsncHJpbnRFcnInXSA9IE1v
ZHVsZVsncHJpbnQnXTsKfQppZiAoIU1vZHVsZVsnYXJndW1lbnRzJ10pIHsKICBNb2R1bGVbJ2Fy
Z3VtZW50cyddID0gW107Cn0KLy8gKioqIEVudmlyb25tZW50IHNldHVwIGNvZGUgKioqCi8vIENs
b3N1cmUgaGVscGVycwpNb2R1bGUucHJpbnQgPSBNb2R1bGVbJ3ByaW50J107Ck1vZHVsZS5wcmlu
dEVyciA9IE1vZHVsZVsncHJpbnRFcnInXTsKLy8gQ2FsbGJhY2tzCk1vZHVsZVsncHJlUnVuJ10g
PSBbXTsKTW9kdWxlWydwb3N0UnVuJ10gPSBbXTsKLy8gTWVyZ2UgYmFjayBpbiB0aGUgb3ZlcnJp
ZGVzCmZvciAodmFyIGtleSBpbiBtb2R1bGVPdmVycmlkZXMpIHsKICBpZiAobW9kdWxlT3ZlcnJp
ZGVzLmhhc093blByb3BlcnR5KGtleSkpIHsKICAgIE1vZHVsZVtrZXldID0gbW9kdWxlT3ZlcnJp
ZGVzW2tleV07CiAgfQp9Ci8vID09PSBBdXRvLWdlbmVyYXRlZCBwcmVhbWJsZSBsaWJyYXJ5IHN0
dWZmID09PQovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy8gUnVu
dGltZSBjb2RlIHNoYXJlZCB3aXRoIGNvbXBpbGVyCi8vPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQp2YXIgUnVudGltZSA9IHsKICBzdGFja1NhdmU6IGZ1bmN0aW9uICgp
IHsKICAgIHJldHVybiBTVEFDS1RPUDsKICB9LAogIHN0YWNrUmVzdG9yZTogZnVuY3Rpb24gKHN0
YWNrVG9wKSB7CiAgICBTVEFDS1RPUCA9IHN0YWNrVG9wOwogIH0sCiAgZm9yY2VBbGlnbjogZnVu
Y3Rpb24gKHRhcmdldCwgcXVhbnR1bSkgewogICAgcXVhbnR1bSA9IHF1YW50dW0gfHwgNDsKICAg
IGlmIChxdWFudHVtID09IDEpIHJldHVybiB0YXJnZXQ7CiAgICBpZiAoaXNOdW1iZXIodGFyZ2V0
KSAmJiBpc051bWJlcihxdWFudHVtKSkgewogICAgICByZXR1cm4gTWF0aC5jZWlsKHRhcmdldC9x
dWFudHVtKSpxdWFudHVtOwogICAgfSBlbHNlIGlmIChpc051bWJlcihxdWFudHVtKSAmJiBpc1Bv
d2VyT2ZUd28ocXVhbnR1bSkpIHsKICAgICAgdmFyIGxvZ2cgPSBsb2cyKHF1YW50dW0pOwogICAg
ICByZXR1cm4gJygoKCgnICt0YXJnZXQgKyAnKSsnICsgKHF1YW50dW0tMSkgKyAnKT4+JyArIGxv
Z2cgKyAnKTw8JyArIGxvZ2cgKyAnKSc7CiAgICB9CiAgICByZXR1cm4gJ01hdGguY2VpbCgoJyAr
IHRhcmdldCArICcpLycgKyBxdWFudHVtICsgJykqJyArIHF1YW50dW07CiAgfSwKICBpc051bWJl
clR5cGU6IGZ1bmN0aW9uICh0eXBlKSB7CiAgICByZXR1cm4gdHlwZSBpbiBSdW50aW1lLklOVF9U
WVBFUyB8fCB0eXBlIGluIFJ1bnRpbWUuRkxPQVRfVFlQRVM7CiAgfSwKICBpc1BvaW50ZXJUeXBl
OiBmdW5jdGlvbiBpc1BvaW50ZXJUeXBlKHR5cGUpIHsKICByZXR1cm4gdHlwZVt0eXBlLmxlbmd0
aC0xXSA9PSAnKic7Cn0sCiAgaXNTdHJ1Y3RUeXBlOiBmdW5jdGlvbiBpc1N0cnVjdFR5cGUodHlw
ZSkgewogIGlmIChpc1BvaW50ZXJUeXBlKHR5cGUpKSByZXR1cm4gZmFsc2U7CiAgaWYgKGlzQXJy
YXlUeXBlKHR5cGUpKSByZXR1cm4gdHJ1ZTsKICBpZiAoLzw/eyA/W159XSogP30+Py8udGVzdCh0
eXBlKSkgcmV0dXJuIHRydWU7IC8vIHsgaTMyLCBpOCB9IGV0Yy4gLSBhbm9ueW1vdXMgc3RydWN0
IHR5cGVzCiAgLy8gU2VlIGNvbW1lbnQgaW4gaXNTdHJ1Y3RQb2ludGVyVHlwZSgpCiAgcmV0dXJu
IHR5cGVbMF0gPT0gJyUnOwp9LAogIElOVF9UWVBFUzogeyJpMSI6MCwiaTgiOjAsImkxNiI6MCwi
aTMyIjowLCJpNjQiOjB9LAogIEZMT0FUX1RZUEVTOiB7ImZsb2F0IjowLCJkb3VibGUiOjB9LAog
IG9yNjQ6IGZ1bmN0aW9uICh4LCB5KSB7CiAgICB2YXIgbCA9ICh4IHwgMCkgfCAoeSB8IDApOwog
ICAgdmFyIGggPSAoTWF0aC5yb3VuZCh4IC8gNDI5NDk2NzI5NikgfCBNYXRoLnJvdW5kKHkgLyA0
Mjk0OTY3Mjk2KSkgKiA0Mjk0OTY3Mjk2OwogICAgcmV0dXJuIGwgKyBoOwogIH0sCiAgYW5kNjQ6
IGZ1bmN0aW9uICh4LCB5KSB7CiAgICB2YXIgbCA9ICh4IHwgMCkgJiAoeSB8IDApOwogICAgdmFy
IGggPSAoTWF0aC5yb3VuZCh4IC8gNDI5NDk2NzI5NikgJiBNYXRoLnJvdW5kKHkgLyA0Mjk0OTY3
Mjk2KSkgKiA0Mjk0OTY3Mjk2OwogICAgcmV0dXJuIGwgKyBoOwogIH0sCiAgeG9yNjQ6IGZ1bmN0
aW9uICh4LCB5KSB7CiAgICB2YXIgbCA9ICh4IHwgMCkgXiAoeSB8IDApOwogICAgdmFyIGggPSAo
TWF0aC5yb3VuZCh4IC8gNDI5NDk2NzI5NikgXiBNYXRoLnJvdW5kKHkgLyA0Mjk0OTY3Mjk2KSkg
KiA0Mjk0OTY3Mjk2OwogICAgcmV0dXJuIGwgKyBoOwogIH0sCiAgZ2V0TmF0aXZlVHlwZVNpemU6
IGZ1bmN0aW9uICh0eXBlLCBxdWFudHVtU2l6ZSkgewogICAgaWYgKFJ1bnRpbWUuUVVBTlRVTV9T
SVpFID09IDEpIHJldHVybiAxOwogICAgdmFyIHNpemUgPSB7CiAgICAgICclaTEnOiAxLAogICAg
ICAnJWk4JzogMSwKICAgICAgJyVpMTYnOiAyLAogICAgICAnJWkzMic6IDQsCiAgICAgICclaTY0
JzogOCwKICAgICAgIiVmbG9hdCI6IDQsCiAgICAgICIlZG91YmxlIjogOAogICAgfVsnJScrdHlw
ZV07IC8vIGFkZCAnJScgc2luY2UgZmxvYXQgYW5kIGRvdWJsZSBjb25mdXNlIENsb3N1cmUgY29t
cGlsZXIgYXMga2V5cywgYW5kIGFsc28gc3BpZGVybW9ua2V5IGFzIGEgY29tcGlsZXIgd2lsbCBy
ZW1vdmUgJ3MgZnJvbSAnX2k4JyBldGMKICAgIGlmICghc2l6ZSkgewogICAgICBpZiAodHlwZS5j
aGFyQXQodHlwZS5sZW5ndGgtMSkgPT0gJyonKSB7CiAgICAgICAgc2l6ZSA9IFJ1bnRpbWUuUVVB
TlRVTV9TSVpFOyAvLyBBIHBvaW50ZXIKICAgICAgfSBlbHNlIGlmICh0eXBlWzBdID09ICdpJykg
ewogICAgICAgIHZhciBiaXRzID0gcGFyc2VJbnQodHlwZS5zdWJzdHIoMSkpOwogICAgICAgIGFz
c2VydChiaXRzICUgOCA9PSAwKTsKICAgICAgICBzaXplID0gYml0cy84OwogICAgICB9CiAgICB9
CiAgICByZXR1cm4gc2l6ZTsKICB9LAogIGdldE5hdGl2ZUZpZWxkU2l6ZTogZnVuY3Rpb24gKHR5
cGUpIHsKICAgIHJldHVybiBNYXRoLm1heChSdW50aW1lLmdldE5hdGl2ZVR5cGVTaXplKHR5cGUp
LCBSdW50aW1lLlFVQU5UVU1fU0laRSk7CiAgfSwKICBkZWR1cDogZnVuY3Rpb24gZGVkdXAoaXRl
bXMsIGlkZW50KSB7CiAgdmFyIHNlZW4gPSB7fTsKICBpZiAoaWRlbnQpIHsKICAgIHJldHVybiBp
dGVtcy5maWx0ZXIoZnVuY3Rpb24oaXRlbSkgewogICAgICBpZiAoc2VlbltpdGVtW2lkZW50XV0p
IHJldHVybiBmYWxzZTsKICAgICAgc2VlbltpdGVtW2lkZW50XV0gPSB0cnVlOwogICAgICByZXR1
cm4gdHJ1ZTsKICAgIH0pOwogIH0gZWxzZSB7CiAgICByZXR1cm4gaXRlbXMuZmlsdGVyKGZ1bmN0
aW9uKGl0ZW0pIHsKICAgICAgaWYgKHNlZW5baXRlbV0pIHJldHVybiBmYWxzZTsKICAgICAgc2Vl
bltpdGVtXSA9IHRydWU7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSk7CiAgfQp9LAogIHNldDog
ZnVuY3Rpb24gc2V0KCkgewogIHZhciBhcmdzID0gdHlwZW9mIGFyZ3VtZW50c1swXSA9PT0gJ29i
amVjdCcgPyBhcmd1bWVudHNbMF0gOiBhcmd1bWVudHM7CiAgdmFyIHJldCA9IHt9OwogIGZvciAo
dmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykgewogICAgcmV0W2FyZ3NbaV1dID0gMDsK
ICB9CiAgcmV0dXJuIHJldDsKfSwKICBTVEFDS19BTElHTjogOCwKICBnZXRBbGlnblNpemU6IGZ1
bmN0aW9uICh0eXBlLCBzaXplLCB2YXJhcmcpIHsKICAgIC8vIHdlIGFsaWduIGk2NHMgYW5kIGRv
dWJsZXMgb24gNjQtYml0IGJvdW5kYXJpZXMsIHVubGlrZSB4ODYKICAgIGlmICh0eXBlID09ICdp
NjQnIHx8IHR5cGUgPT0gJ2RvdWJsZScgfHwgdmFyYXJnKSByZXR1cm4gODsKICAgIGlmICghdHlw
ZSkgcmV0dXJuIE1hdGgubWluKHNpemUsIDgpOyAvLyBhbGlnbiBzdHJ1Y3R1cmVzIGludGVybmFs
bHkgdG8gNjQgYml0cwogICAgcmV0dXJuIE1hdGgubWluKHNpemUgfHwgKHR5cGUgPyBSdW50aW1l
LmdldE5hdGl2ZUZpZWxkU2l6ZSh0eXBlKSA6IDApLCBSdW50aW1lLlFVQU5UVU1fU0laRSk7CiAg
fSwKICBjYWxjdWxhdGVTdHJ1Y3RBbGlnbm1lbnQ6IGZ1bmN0aW9uIGNhbGN1bGF0ZVN0cnVjdEFs
aWdubWVudCh0eXBlKSB7CiAgICB0eXBlLmZsYXRTaXplID0gMDsKICAgIHR5cGUuYWxpZ25TaXpl
ID0gMDsKICAgIHZhciBkaWZmcyA9IFtdOwogICAgdmFyIHByZXYgPSAtMTsKICAgIHZhciBpbmRl
eCA9IDA7CiAgICB0eXBlLmZsYXRJbmRleGVzID0gdHlwZS5maWVsZHMubWFwKGZ1bmN0aW9uKGZp
ZWxkKSB7CiAgICAgIGluZGV4Kys7CiAgICAgIHZhciBzaXplLCBhbGlnblNpemU7CiAgICAgIGlm
IChSdW50aW1lLmlzTnVtYmVyVHlwZShmaWVsZCkgfHwgUnVudGltZS5pc1BvaW50ZXJUeXBlKGZp
ZWxkKSkgewogICAgICAgIHNpemUgPSBSdW50aW1lLmdldE5hdGl2ZVR5cGVTaXplKGZpZWxkKTsg
Ly8gcGFjayBjaGFyOyBjaGFyOyBpbiBzdHJ1Y3RzLCBhbHNvIGNoYXJbWF1zLgogICAgICAgIGFs
aWduU2l6ZSA9IFJ1bnRpbWUuZ2V0QWxpZ25TaXplKGZpZWxkLCBzaXplKTsKICAgICAgfSBlbHNl
IGlmIChSdW50aW1lLmlzU3RydWN0VHlwZShmaWVsZCkpIHsKICAgICAgICBpZiAoZmllbGRbMV0g
PT09ICcwJykgewogICAgICAgICAgLy8gdGhpcyBpcyBbMCB4IHNvbWV0aGluZ10uIFdoZW4gaW5z
aWRlIGFub3RoZXIgc3RydWN0dXJlIGxpa2UgaGVyZSwgaXQgbXVzdCBiZSBhdCB0aGUgZW5kLAog
ICAgICAgICAgLy8gYW5kIGl0IGFkZHMgbm8gc2l6ZQogICAgICAgICAgLy8gWFhYIHRoaXMgaGFw
cGVucyBpbiBqYXZhLW5ib2R5IGZvciBleGFtcGxlLi4uIGFzc2VydChpbmRleCA9PT0gdHlwZS5m
aWVsZHMubGVuZ3RoLCAnemVyby1sZW5ndGggaW4gdGhlIG1pZGRsZSEnKTsKICAgICAgICAgIHNp
emUgPSAwOwogICAgICAgICAgYWxpZ25TaXplID0gdHlwZS5hbGlnblNpemUgfHwgUVVBTlRVTV9T
SVpFOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzaXplID0gVHlwZXMudHlwZXNbZmllbGRd
LmZsYXRTaXplOwogICAgICAgICAgYWxpZ25TaXplID0gUnVudGltZS5nZXRBbGlnblNpemUobnVs
bCwgVHlwZXMudHlwZXNbZmllbGRdLmFsaWduU2l6ZSk7CiAgICAgICAgfQogICAgICB9IGVsc2Ug
aWYgKGZpZWxkWzBdID09ICdiJykgewogICAgICAgIC8vIGJOLCBsYXJnZSBudW1iZXIgZmllbGQs
IGxpa2UgYSBbTiB4IGk4XQogICAgICAgIHNpemUgPSBmaWVsZC5zdWJzdHIoMSl8MDsKICAgICAg
ICBhbGlnblNpemUgPSAxOwogICAgICB9IGVsc2UgewogICAgICAgIHRocm93ICdVbmNsZWFyIHR5
cGUgaW4gc3RydWN0OiAnICsgZmllbGQgKyAnLCBpbiAnICsgdHlwZS5uYW1lXyArICcgOjogJyAr
IGR1bXAoVHlwZXMudHlwZXNbdHlwZS5uYW1lX10pOwogICAgICB9CiAgICAgIGlmICh0eXBlLnBh
Y2tlZCkgYWxpZ25TaXplID0gMTsKICAgICAgdHlwZS5hbGlnblNpemUgPSBNYXRoLm1heCh0eXBl
LmFsaWduU2l6ZSwgYWxpZ25TaXplKTsKICAgICAgdmFyIGN1cnIgPSBSdW50aW1lLmFsaWduTWVt
b3J5KHR5cGUuZmxhdFNpemUsIGFsaWduU2l6ZSk7IC8vIGlmIG5lY2Vzc2FyeSwgcGxhY2UgdGhp
cyBvbiBhbGlnbmVkIG1lbW9yeQogICAgICB0eXBlLmZsYXRTaXplID0gY3VyciArIHNpemU7CiAg
ICAgIGlmIChwcmV2ID49IDApIHsKICAgICAgICBkaWZmcy5wdXNoKGN1cnItcHJldik7CiAgICAg
IH0KICAgICAgcHJldiA9IGN1cnI7CiAgICAgIHJldHVybiBjdXJyOwogICAgfSk7CiAgICB0eXBl
LmZsYXRTaXplID0gUnVudGltZS5hbGlnbk1lbW9yeSh0eXBlLmZsYXRTaXplLCB0eXBlLmFsaWdu
U2l6ZSk7CiAgICBpZiAoZGlmZnMubGVuZ3RoID09IDApIHsKICAgICAgdHlwZS5mbGF0RmFjdG9y
ID0gdHlwZS5mbGF0U2l6ZTsKICAgIH0gZWxzZSBpZiAoUnVudGltZS5kZWR1cChkaWZmcykubGVu
Z3RoID09IDEpIHsKICAgICAgdHlwZS5mbGF0RmFjdG9yID0gZGlmZnNbMF07CiAgICB9CiAgICB0
eXBlLm5lZWRzRmxhdHRlbmluZyA9ICh0eXBlLmZsYXRGYWN0b3IgIT0gMSk7CiAgICByZXR1cm4g
dHlwZS5mbGF0SW5kZXhlczsKICB9LAogIGdlbmVyYXRlU3RydWN0SW5mbzogZnVuY3Rpb24gKHN0
cnVjdCwgdHlwZU5hbWUsIG9mZnNldCkgewogICAgdmFyIHR5cGUsIGFsaWdubWVudDsKICAgIGlm
ICh0eXBlTmFtZSkgewogICAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDsKICAgICAgdHlwZSA9ICh0
eXBlb2YgVHlwZXMgPT09ICd1bmRlZmluZWQnID8gUnVudGltZS50eXBlSW5mbyA6IFR5cGVzLnR5
cGVzKVt0eXBlTmFtZV07CiAgICAgIGlmICghdHlwZSkgcmV0dXJuIG51bGw7CiAgICAgIGlmICh0
eXBlLmZpZWxkcy5sZW5ndGggIT0gc3RydWN0Lmxlbmd0aCkgewogICAgICAgIHByaW50RXJyKCdO
dW1iZXIgb2YgbmFtZWQgZmllbGRzIG11c3QgbWF0Y2ggdGhlIHR5cGUgZm9yICcgKyB0eXBlTmFt
ZSArICc6IHBvc3NpYmx5IGR1cGxpY2F0ZSBzdHJ1Y3QgbmFtZXMuIENhbm5vdCByZXR1cm4gc3Ry
dWN0SW5mbycpOwogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGFsaWdubWVudCA9
IHR5cGUuZmxhdEluZGV4ZXM7CiAgICB9IGVsc2UgewogICAgICB2YXIgdHlwZSA9IHsgZmllbGRz
OiBzdHJ1Y3QubWFwKGZ1bmN0aW9uKGl0ZW0pIHsgcmV0dXJuIGl0ZW1bMF0gfSkgfTsKICAgICAg
YWxpZ25tZW50ID0gUnVudGltZS5jYWxjdWxhdGVTdHJ1Y3RBbGlnbm1lbnQodHlwZSk7CiAgICB9
CiAgICB2YXIgcmV0ID0gewogICAgICBfX3NpemVfXzogdHlwZS5mbGF0U2l6ZQogICAgfTsKICAg
IGlmICh0eXBlTmFtZSkgewogICAgICBzdHJ1Y3QuZm9yRWFjaChmdW5jdGlvbihpdGVtLCBpKSB7
CiAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJykgewogICAgICAgICAgcmV0W2l0
ZW1dID0gYWxpZ25tZW50W2ldICsgb2Zmc2V0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAv
LyBlbWJlZGRlZCBzdHJ1Y3QKICAgICAgICAgIHZhciBrZXk7CiAgICAgICAgICBmb3IgKHZhciBr
IGluIGl0ZW0pIGtleSA9IGs7CiAgICAgICAgICByZXRba2V5XSA9IFJ1bnRpbWUuZ2VuZXJhdGVT
dHJ1Y3RJbmZvKGl0ZW1ba2V5XSwgdHlwZS5maWVsZHNbaV0sIGFsaWdubWVudFtpXSk7CiAgICAg
ICAgfQogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIHN0cnVjdC5mb3JFYWNoKGZ1bmN0aW9u
KGl0ZW0sIGkpIHsKICAgICAgICByZXRbaXRlbVsxXV0gPSBhbGlnbm1lbnRbaV07CiAgICAgIH0p
OwogICAgfQogICAgcmV0dXJuIHJldDsKICB9LAogIGR5bkNhbGw6IGZ1bmN0aW9uIChzaWcsIHB0
ciwgYXJncykgewogICAgaWYgKGFyZ3MgJiYgYXJncy5sZW5ndGgpIHsKICAgICAgaWYgKCFhcmdz
LnNwbGljZSkgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpOwogICAgICBh
cmdzLnNwbGljZSgwLCAwLCBwdHIpOwogICAgICByZXR1cm4gTW9kdWxlWydkeW5DYWxsXycgKyBz
aWddLmFwcGx5KG51bGwsIGFyZ3MpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIE1vZHVsZVsn
ZHluQ2FsbF8nICsgc2lnXS5jYWxsKG51bGwsIHB0cik7CiAgICB9CiAgfSwKICBmdW5jdGlvblBv
aW50ZXJzOiBbXSwKICBhZGRGdW5jdGlvbjogZnVuY3Rpb24gKGZ1bmMpIHsKICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgUnVudGltZS5mdW5jdGlvblBvaW50ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAg
IGlmICghUnVudGltZS5mdW5jdGlvblBvaW50ZXJzW2ldKSB7CiAgICAgICAgUnVudGltZS5mdW5j
dGlvblBvaW50ZXJzW2ldID0gZnVuYzsKICAgICAgICByZXR1cm4gMiArIDIqaTsKICAgICAgfQog
ICAgfQogICAgdGhyb3cgJ0ZpbmlzaGVkIHVwIGFsbCByZXNlcnZlZCBmdW5jdGlvbiBwb2ludGVy
cy4gVXNlIGEgaGlnaGVyIHZhbHVlIGZvciBSRVNFUlZFRF9GVU5DVElPTl9QT0lOVEVSUy4nOwog
IH0sCiAgcmVtb3ZlRnVuY3Rpb246IGZ1bmN0aW9uIChpbmRleCkgewogICAgUnVudGltZS5mdW5j
dGlvblBvaW50ZXJzWyhpbmRleC0yKS8yXSA9IG51bGw7CiAgfSwKICB3YXJuT25jZTogZnVuY3Rp
b24gKHRleHQpIHsKICAgIGlmICghUnVudGltZS53YXJuT25jZS5zaG93bikgUnVudGltZS53YXJu
T25jZS5zaG93biA9IHt9OwogICAgaWYgKCFSdW50aW1lLndhcm5PbmNlLnNob3duW3RleHRdKSB7
CiAgICAgIFJ1bnRpbWUud2Fybk9uY2Uuc2hvd25bdGV4dF0gPSAxOwogICAgICBNb2R1bGUucHJp
bnRFcnIodGV4dCk7CiAgICB9CiAgfSwKICBmdW5jV3JhcHBlcnM6IHt9LAogIGdldEZ1bmNXcmFw
cGVyOiBmdW5jdGlvbiAoZnVuYywgc2lnKSB7CiAgICBhc3NlcnQoc2lnKTsKICAgIGlmICghUnVu
dGltZS5mdW5jV3JhcHBlcnNbZnVuY10pIHsKICAgICAgUnVudGltZS5mdW5jV3JhcHBlcnNbZnVu
Y10gPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gUnVudGltZS5keW5DYWxsKHNpZywgZnVu
YywgYXJndW1lbnRzKTsKICAgICAgfTsKICAgIH0KICAgIHJldHVybiBSdW50aW1lLmZ1bmNXcmFw
cGVyc1tmdW5jXTsKICB9LAogIFVURjhQcm9jZXNzb3I6IGZ1bmN0aW9uICgpIHsKICAgIHZhciBi
dWZmZXIgPSBbXTsKICAgIHZhciBuZWVkZWQgPSAwOwogICAgdGhpcy5wcm9jZXNzQ0NoYXIgPSBm
dW5jdGlvbiAoY29kZSkgewogICAgICBjb2RlID0gY29kZSAmIDB4ZmY7CiAgICAgIGlmIChuZWVk
ZWQpIHsKICAgICAgICBidWZmZXIucHVzaChjb2RlKTsKICAgICAgICBuZWVkZWQtLTsKICAgICAg
fQogICAgICBpZiAoYnVmZmVyLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgaWYgKGNvZGUgPCAxMjgp
IHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpOwogICAgICAgIGJ1ZmZlci5wdXNoKGNv
ZGUpOwogICAgICAgIGlmIChjb2RlID4gMTkxICYmIGNvZGUgPCAyMjQpIHsKICAgICAgICAgIG5l
ZWRlZCA9IDE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG5lZWRlZCA9IDI7CiAgICAgICAg
fQogICAgICAgIHJldHVybiAnJzsKICAgICAgfQogICAgICBpZiAobmVlZGVkID4gMCkgcmV0dXJu
ICcnOwogICAgICB2YXIgYzEgPSBidWZmZXJbMF07CiAgICAgIHZhciBjMiA9IGJ1ZmZlclsxXTsK
ICAgICAgdmFyIGMzID0gYnVmZmVyWzJdOwogICAgICB2YXIgcmV0OwogICAgICBpZiAoYzEgPiAx
OTEgJiYgYzEgPCAyMjQpIHsKICAgICAgICByZXQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCgoYzEg
JiAzMSkgPDwgNikgfCAoYzIgJiA2MykpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldCA9IFN0
cmluZy5mcm9tQ2hhckNvZGUoKChjMSAmIDE1KSA8PCAxMikgfCAoKGMyICYgNjMpIDw8IDYpIHwg
KGMzICYgNjMpKTsKICAgICAgfQogICAgICBidWZmZXIubGVuZ3RoID0gMDsKICAgICAgcmV0dXJu
IHJldDsKICAgIH0KICAgIHRoaXMucHJvY2Vzc0pTU3RyaW5nID0gZnVuY3Rpb24oc3RyaW5nKSB7
CiAgICAgIHN0cmluZyA9IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmcpKTsKICAg
ICAgdmFyIHJldCA9IFtdOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7
IGkrKykgewogICAgICAgIHJldC5wdXNoKHN0cmluZy5jaGFyQ29kZUF0KGkpKTsKICAgICAgfQog
ICAgICByZXR1cm4gcmV0OwogICAgfQogIH0sCiAgc3RhY2tBbGxvYzogZnVuY3Rpb24gKHNpemUp
IHsgdmFyIHJldCA9IFNUQUNLVE9QO1NUQUNLVE9QID0gKFNUQUNLVE9QICsgc2l6ZSl8MDtTVEFD
S1RPUCA9ICgoKChTVEFDS1RPUCkrNyk+PjMpPDwzKTsgcmV0dXJuIHJldDsgfSwKICBzdGF0aWNB
bGxvYzogZnVuY3Rpb24gKHNpemUpIHsgdmFyIHJldCA9IFNUQVRJQ1RPUDtTVEFUSUNUT1AgPSAo
U1RBVElDVE9QICsgc2l6ZSl8MDtTVEFUSUNUT1AgPSAoKCgoU1RBVElDVE9QKSs3KT4+Myk8PDMp
OyByZXR1cm4gcmV0OyB9LAogIGR5bmFtaWNBbGxvYzogZnVuY3Rpb24gKHNpemUpIHsgdmFyIHJl
dCA9IERZTkFNSUNUT1A7RFlOQU1JQ1RPUCA9IChEWU5BTUlDVE9QICsgc2l6ZSl8MDtEWU5BTUlD
VE9QID0gKCgoKERZTkFNSUNUT1ApKzcpPj4zKTw8Myk7IGlmIChEWU5BTUlDVE9QID49IFRPVEFM
X01FTU9SWSkgZW5sYXJnZU1lbW9yeSgpOzsgcmV0dXJuIHJldDsgfSwKICBhbGlnbk1lbW9yeTog
ZnVuY3Rpb24gKHNpemUscXVhbnR1bSkgeyB2YXIgcmV0ID0gc2l6ZSA9IE1hdGguY2VpbCgoc2l6
ZSkvKHF1YW50dW0gPyBxdWFudHVtIDogOCkpKihxdWFudHVtID8gcXVhbnR1bSA6IDgpOyByZXR1
cm4gcmV0OyB9LAogIG1ha2VCaWdJbnQ6IGZ1bmN0aW9uIChsb3csaGlnaCx1bnNpZ25lZCkgeyB2
YXIgcmV0ID0gKHVuc2lnbmVkID8gKCgrKCgobG93KT4+PigwKSkpKSsoKCsoKChoaWdoKT4+Pigw
KSkpKSooKyg0Mjk0OTY3Mjk2KSkpKSA6ICgoKygoKGxvdyk+Pj4oMCkpKSkrKCgrKCgoaGlnaCl8
KDApKSkpKigrKDQyOTQ5NjcyOTYpKSkpKTsgcmV0dXJuIHJldDsgfSwKICBHTE9CQUxfQkFTRTog
OCwKICBRVUFOVFVNX1NJWkU6IDQsCiAgX19kdW1teV9fOiAwCn0KLy89PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci8vIFJ1bnRpbWUgZXNzZW50aWFscwovLz09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KdmFyIF9fVEhSRVdfXyA9IDA7IC8vIFVz
ZWQgaW4gY2hlY2tpbmcgZm9yIHRocm93biBleGNlcHRpb25zLgp2YXIgQUJPUlQgPSBmYWxzZTsg
Ly8gd2hldGhlciB3ZSBhcmUgcXVpdHRpbmcgdGhlIGFwcGxpY2F0aW9uLiBubyBjb2RlIHNob3Vs
ZCBydW4gYWZ0ZXIgdGhpcy4gc2V0IGluIGV4aXQoKSBhbmQgYWJvcnQoKQp2YXIgRVhJVFNUQVRV
UyA9IDA7CnZhciB1bmRlZiA9IDA7Ci8vIHRlbXBJbnQgaXMgdXNlZCBmb3IgMzItYml0IHNpZ25l
ZCB2YWx1ZXMgb3Igc21hbGxlci4gdGVtcEJpZ0ludCBpcyB1c2VkCi8vIGZvciAzMi1iaXQgdW5z
aWduZWQgdmFsdWVzIG9yIG1vcmUgdGhhbiAzMiBiaXRzLiBUT0RPOiBhdWRpdCBhbGwgdXNlcyBv
ZiB0ZW1wSW50CnZhciB0ZW1wVmFsdWUsIHRlbXBJbnQsIHRlbXBCaWdJbnQsIHRlbXBJbnQyLCB0
ZW1wQmlnSW50MiwgdGVtcFBhaXIsIHRlbXBCaWdJbnRJLCB0ZW1wQmlnSW50UiwgdGVtcEJpZ0lu
dFMsIHRlbXBCaWdJbnRQLCB0ZW1wQmlnSW50RDsKdmFyIHRlbXBJNjQsIHRlbXBJNjRiOwp2YXIg
dGVtcFJldDAsIHRlbXBSZXQxLCB0ZW1wUmV0MiwgdGVtcFJldDMsIHRlbXBSZXQ0LCB0ZW1wUmV0
NSwgdGVtcFJldDYsIHRlbXBSZXQ3LCB0ZW1wUmV0OCwgdGVtcFJldDk7CmZ1bmN0aW9uIGFzc2Vy
dChjb25kaXRpb24sIHRleHQpIHsKICBpZiAoIWNvbmRpdGlvbikgewogICAgYWJvcnQoJ0Fzc2Vy
dGlvbiBmYWlsZWQ6ICcgKyB0ZXh0KTsKICB9Cn0KdmFyIGdsb2JhbFNjb3BlID0gdGhpczsKLy8g
QyBjYWxsaW5nIGludGVyZmFjZS4gQSBjb252ZW5pZW50IHdheSB0byBjYWxsIEMgZnVuY3Rpb25z
IChpbiBDIGZpbGVzLCBvcgovLyBkZWZpbmVkIHdpdGggZXh0ZXJuICJDIikuCi8vCi8vIE5vdGU6
IExMVk0gb3B0aW1pemF0aW9ucyBjYW4gaW5saW5lIGFuZCByZW1vdmUgZnVuY3Rpb25zLCBhZnRl
ciB3aGljaCB5b3Ugd2lsbCBub3QgYmUKLy8gICAgICAgYWJsZSB0byBjYWxsIHRoZW0uIENsb3N1
cmUgY2FuIGFsc28gZG8gc28uIFRvIGF2b2lkIHRoYXQsIGFkZCB5b3VyIGZ1bmN0aW9uIHRvCi8v
ICAgICAgIHRoZSBleHBvcnRzIHVzaW5nIHNvbWV0aGluZyBsaWtlCi8vCi8vICAgICAgICAgLXMg
RVhQT1JURURfRlVOQ1RJT05TPSdbIl9tYWluIiwgIl9teWZ1bmMiXScKLy8KLy8gQHBhcmFtIGlk
ZW50ICAgICAgVGhlIG5hbWUgb2YgdGhlIEMgZnVuY3Rpb24gKG5vdGUgdGhhdCBDKysgZnVuY3Rp
b25zIHdpbGwgYmUgbmFtZS1tYW5nbGVkIC0gdXNlIGV4dGVybiAiQyIpCi8vIEBwYXJhbSByZXR1
cm5UeXBlIFRoZSByZXR1cm4gdHlwZSBvZiB0aGUgZnVuY3Rpb24sIG9uZSBvZiB0aGUgSlMgdHlw
ZXMgJ251bWJlcicsICdzdHJpbmcnIG9yICdhcnJheScgKHVzZSAnbnVtYmVyJyBmb3IgYW55IEMg
cG9pbnRlciwgYW5kCi8vICAgICAgICAgICAgICAgICAgICdhcnJheScgZm9yIEphdmFTY3JpcHQg
YXJyYXlzIGFuZCB0eXBlZCBhcnJheXM7IG5vdGUgdGhhdCBhcnJheXMgYXJlIDgtYml0KS4KLy8g
QHBhcmFtIGFyZ1R5cGVzICAgQW4gYXJyYXkgb2YgdGhlIHR5cGVzIG9mIGFyZ3VtZW50cyBmb3Ig
dGhlIGZ1bmN0aW9uIChpZiB0aGVyZSBhcmUgbm8gYXJndW1lbnRzLCB0aGlzIGNhbiBiZSBvbW1p
dHRlZCkuIFR5cGVzIGFyZSBhcyBpbiByZXR1cm5UeXBlLAovLyAgICAgICAgICAgICAgICAgICBl
eGNlcHQgdGhhdCAnYXJyYXknIGlzIG5vdCBwb3NzaWJsZSAodGhlcmUgaXMgbm8gd2F5IGZvciB1
cyB0byBrbm93IHRoZSBsZW5ndGggb2YgdGhlIGFycmF5KQovLyBAcGFyYW0gYXJncyAgICAgICBB
biBhcnJheSBvZiB0aGUgYXJndW1lbnRzIHRvIHRoZSBmdW5jdGlvbiwgYXMgbmF0aXZlIEpTIHZh
bHVlcyAoYXMgaW4gcmV0dXJuVHlwZSkKLy8gICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IHN0
cmluZyBhcmd1bWVudHMgd2lsbCBiZSBzdG9yZWQgb24gdGhlIHN0YWNrICh0aGUgSlMgc3RyaW5n
IHdpbGwgYmVjb21lIGEgQyBzdHJpbmcgb24gdGhlIHN0YWNrKS4KLy8gQHJldHVybiAgICAgICAg
ICAgVGhlIHJldHVybiB2YWx1ZSwgYXMgYSBuYXRpdmUgSlMgdmFsdWUgKGFzIGluIHJldHVyblR5
cGUpCmZ1bmN0aW9uIGNjYWxsKGlkZW50LCByZXR1cm5UeXBlLCBhcmdUeXBlcywgYXJncykgewog
IHJldHVybiBjY2FsbEZ1bmMoZ2V0Q0Z1bmMoaWRlbnQpLCByZXR1cm5UeXBlLCBhcmdUeXBlcywg
YXJncyk7Cn0KTW9kdWxlWyJjY2FsbCJdID0gY2NhbGw7Ci8vIFJldHVybnMgdGhlIEMgZnVuY3Rp
b24gd2l0aCBhIHNwZWNpZmllZCBpZGVudGlmaWVyIChmb3IgQysrLCB5b3UgbmVlZCB0byBkbyBt
YW51YWwgbmFtZSBtYW5nbGluZykKZnVuY3Rpb24gZ2V0Q0Z1bmMoaWRlbnQpIHsKICB0cnkgewog
ICAgdmFyIGZ1bmMgPSBNb2R1bGVbJ18nICsgaWRlbnRdOyAvLyBjbG9zdXJlIGV4cG9ydGVkIGZ1
bmN0aW9uCiAgICBpZiAoIWZ1bmMpIGZ1bmMgPSBldmFsKCdfJyArIGlkZW50KTsgLy8gZXhwbGlj
aXQgbG9va3VwCiAgfSBjYXRjaChlKSB7CiAgfQogIGFzc2VydChmdW5jLCAnQ2Fubm90IGNhbGwg
dW5rbm93biBmdW5jdGlvbiAnICsgaWRlbnQgKyAnIChwZXJoYXBzIExMVk0gb3B0aW1pemF0aW9u
cyBvciBjbG9zdXJlIHJlbW92ZWQgaXQ/KScpOwogIHJldHVybiBmdW5jOwp9Ci8vIEludGVybmFs
IGZ1bmN0aW9uIHRoYXQgZG9lcyBhIEMgY2FsbCB1c2luZyBhIGZ1bmN0aW9uLCBub3QgYW4gaWRl
bnRpZmllcgpmdW5jdGlvbiBjY2FsbEZ1bmMoZnVuYywgcmV0dXJuVHlwZSwgYXJnVHlwZXMsIGFy
Z3MpIHsKICB2YXIgc3RhY2sgPSAwOwogIGZ1bmN0aW9uIHRvQyh2YWx1ZSwgdHlwZSkgewogICAg
aWYgKHR5cGUgPT0gJ3N0cmluZycpIHsKICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVl
ID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IDApIHJldHVybiAwOyAvLyBudWxsIHN0cmluZwog
ICAgICBpZiAoIXN0YWNrKSBzdGFjayA9IFJ1bnRpbWUuc3RhY2tTYXZlKCk7CiAgICAgIHZhciBy
ZXQgPSBSdW50aW1lLnN0YWNrQWxsb2ModmFsdWUubGVuZ3RoKzEpOwogICAgICB3cml0ZVN0cmlu
Z1RvTWVtb3J5KHZhbHVlLCByZXQpOwogICAgICByZXR1cm4gcmV0OwogICAgfSBlbHNlIGlmICh0
eXBlID09ICdhcnJheScpIHsKICAgICAgaWYgKCFzdGFjaykgc3RhY2sgPSBSdW50aW1lLnN0YWNr
U2F2ZSgpOwogICAgICB2YXIgcmV0ID0gUnVudGltZS5zdGFja0FsbG9jKHZhbHVlLmxlbmd0aCk7
CiAgICAgIHdyaXRlQXJyYXlUb01lbW9yeSh2YWx1ZSwgcmV0KTsKICAgICAgcmV0dXJuIHJldDsK
ICAgIH0KICAgIHJldHVybiB2YWx1ZTsKICB9CiAgZnVuY3Rpb24gZnJvbUModmFsdWUsIHR5cGUp
IHsKICAgIGlmICh0eXBlID09ICdzdHJpbmcnKSB7CiAgICAgIHJldHVybiBQb2ludGVyX3N0cmlu
Z2lmeSh2YWx1ZSk7CiAgICB9CiAgICBhc3NlcnQodHlwZSAhPSAnYXJyYXknKTsKICAgIHJldHVy
biB2YWx1ZTsKICB9CiAgdmFyIGkgPSAwOwogIHZhciBjQXJncyA9IGFyZ3MgPyBhcmdzLm1hcChm
dW5jdGlvbihhcmcpIHsKICAgIHJldHVybiB0b0MoYXJnLCBhcmdUeXBlc1tpKytdKTsKICB9KSA6
IFtdOwogIHZhciByZXQgPSBmcm9tQyhmdW5jLmFwcGx5KG51bGwsIGNBcmdzKSwgcmV0dXJuVHlw
ZSk7CiAgaWYgKHN0YWNrKSBSdW50aW1lLnN0YWNrUmVzdG9yZShzdGFjayk7CiAgcmV0dXJuIHJl
dDsKfQovLyBSZXR1cm5zIGEgbmF0aXZlIEpTIHdyYXBwZXIgZm9yIGEgQyBmdW5jdGlvbi4gVGhp
cyBpcyBzaW1pbGFyIHRvIGNjYWxsLCBidXQKLy8gcmV0dXJucyBhIGZ1bmN0aW9uIHlvdSBjYW4g
Y2FsbCByZXBlYXRlZGx5IGluIGEgbm9ybWFsIHdheS4gRm9yIGV4YW1wbGU6Ci8vCi8vICAgdmFy
IG15X2Z1bmN0aW9uID0gY3dyYXAoJ215X2NfZnVuY3Rpb24nLCAnbnVtYmVyJywgWydudW1iZXIn
LCAnbnVtYmVyJ10pOwovLyAgIGFsZXJ0KG15X2Z1bmN0aW9uKDUsIDIyKSk7Ci8vICAgYWxlcnQo
bXlfZnVuY3Rpb24oOTksIDEyKSk7Ci8vCmZ1bmN0aW9uIGN3cmFwKGlkZW50LCByZXR1cm5UeXBl
LCBhcmdUeXBlcykgewogIHZhciBmdW5jID0gZ2V0Q0Z1bmMoaWRlbnQpOwogIHJldHVybiBmdW5j
dGlvbigpIHsKICAgIHJldHVybiBjY2FsbEZ1bmMoZnVuYywgcmV0dXJuVHlwZSwgYXJnVHlwZXMs
IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpOwogIH0KfQpNb2R1bGVbImN3
cmFwIl0gPSBjd3JhcDsKLy8gU2V0cyBhIHZhbHVlIGluIG1lbW9yeSBpbiBhIGR5bmFtaWMgd2F5
IGF0IHJ1bi10aW1lLiBVc2VzIHRoZQovLyB0eXBlIGRhdGEuIFRoaXMgaXMgdGhlIHNhbWUgYXMg
bWFrZVNldFZhbHVlLCBleGNlcHQgdGhhdAovLyBtYWtlU2V0VmFsdWUgaXMgZG9uZSBhdCBjb21w
aWxlLXRpbWUgYW5kIGdlbmVyYXRlcyB0aGUgbmVlZGVkCi8vIGNvZGUgdGhlbiwgd2hlcmVhcyB0
aGlzIGZ1bmN0aW9uIHBpY2tzIHRoZSByaWdodCBjb2RlIGF0Ci8vIHJ1bi10aW1lLgovLyBOb3Rl
IHRoYXQgc2V0VmFsdWUgYW5kIGdldFZhbHVlIG9ubHkgZG8gKmFsaWduZWQqIHdyaXRlcyBhbmQg
cmVhZHMhCi8vIE5vdGUgdGhhdCBjY2FsbCB1c2VzIEpTIHR5cGVzIGFzIGZvciBkZWZpbmluZyB0
eXBlcywgd2hpbGUgc2V0VmFsdWUgYW5kCi8vIGdldFZhbHVlIG5lZWQgTExWTSB0eXBlcyAoJ2k4
JywgJ2kzMicpIC0gdGhpcyBpcyBhIGxvd2VyLWxldmVsIG9wZXJhdGlvbgpmdW5jdGlvbiBzZXRW
YWx1ZShwdHIsIHZhbHVlLCB0eXBlLCBub1NhZmUpIHsKICB0eXBlID0gdHlwZSB8fCAnaTgnOwog
IGlmICh0eXBlLmNoYXJBdCh0eXBlLmxlbmd0aC0xKSA9PT0gJyonKSB0eXBlID0gJ2kzMic7IC8v
IHBvaW50ZXJzIGFyZSAzMi1iaXQKICAgIHN3aXRjaCh0eXBlKSB7CiAgICAgIGNhc2UgJ2kxJzog
SEVBUDhbKHB0cildPXZhbHVlOyBicmVhazsKICAgICAgY2FzZSAnaTgnOiBIRUFQOFsocHRyKV09
dmFsdWU7IGJyZWFrOwogICAgICBjYXNlICdpMTYnOiBIRUFQMTZbKChwdHIpPj4xKV09dmFsdWU7
IGJyZWFrOwogICAgICBjYXNlICdpMzInOiBIRUFQMzJbKChwdHIpPj4yKV09dmFsdWU7IGJyZWFr
OwogICAgICBjYXNlICdpNjQnOiAodGVtcEk2NCA9IFt2YWx1ZT4+PjAsKChNYXRoLm1pbigoKyhN
YXRoLmZsb29yKCh2YWx1ZSkvKCsoNDI5NDk2NzI5NikpKSkpLCAoKyg0Mjk0OTY3Mjk1KSkpKXww
KT4+PjBdLEhFQVAzMlsoKHB0cik+PjIpXT10ZW1wSTY0WzBdLEhFQVAzMlsoKChwdHIpKyg0KSk+
PjIpXT10ZW1wSTY0WzFdKTsgYnJlYWs7CiAgICAgIGNhc2UgJ2Zsb2F0JzogSEVBUEYzMlsoKHB0
cik+PjIpXT12YWx1ZTsgYnJlYWs7CiAgICAgIGNhc2UgJ2RvdWJsZSc6IEhFQVBGNjRbKChwdHIp
Pj4zKV09dmFsdWU7IGJyZWFrOwogICAgICBkZWZhdWx0OiBhYm9ydCgnaW52YWxpZCB0eXBlIGZv
ciBzZXRWYWx1ZTogJyArIHR5cGUpOwogICAgfQp9Ck1vZHVsZVsnc2V0VmFsdWUnXSA9IHNldFZh
bHVlOwovLyBQYXJhbGxlbCB0byBzZXRWYWx1ZS4KZnVuY3Rpb24gZ2V0VmFsdWUocHRyLCB0eXBl
LCBub1NhZmUpIHsKICB0eXBlID0gdHlwZSB8fCAnaTgnOwogIGlmICh0eXBlLmNoYXJBdCh0eXBl
Lmxlbmd0aC0xKSA9PT0gJyonKSB0eXBlID0gJ2kzMic7IC8vIHBvaW50ZXJzIGFyZSAzMi1iaXQK
ICAgIHN3aXRjaCh0eXBlKSB7CiAgICAgIGNhc2UgJ2kxJzogcmV0dXJuIEhFQVA4WyhwdHIpXTsK
ICAgICAgY2FzZSAnaTgnOiByZXR1cm4gSEVBUDhbKHB0cildOwogICAgICBjYXNlICdpMTYnOiBy
ZXR1cm4gSEVBUDE2WygocHRyKT4+MSldOwogICAgICBjYXNlICdpMzInOiByZXR1cm4gSEVBUDMy
WygocHRyKT4+MildOwogICAgICBjYXNlICdpNjQnOiByZXR1cm4gSEVBUDMyWygocHRyKT4+Mild
OwogICAgICBjYXNlICdmbG9hdCc6IHJldHVybiBIRUFQRjMyWygocHRyKT4+MildOwogICAgICBj
YXNlICdkb3VibGUnOiByZXR1cm4gSEVBUEY2NFsoKHB0cik+PjMpXTsKICAgICAgZGVmYXVsdDog
YWJvcnQoJ2ludmFsaWQgdHlwZSBmb3Igc2V0VmFsdWU6ICcgKyB0eXBlKTsKICAgIH0KICByZXR1
cm4gbnVsbDsKfQpNb2R1bGVbJ2dldFZhbHVlJ10gPSBnZXRWYWx1ZTsKdmFyIEFMTE9DX05PUk1B
TCA9IDA7IC8vIFRyaWVzIHRvIHVzZSBfbWFsbG9jKCkKdmFyIEFMTE9DX1NUQUNLID0gMTsgLy8g
TGl2ZXMgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgY3VycmVudCBmdW5jdGlvbiBjYWxsCnZhciBB
TExPQ19TVEFUSUMgPSAyOyAvLyBDYW5ub3QgYmUgZnJlZWQKdmFyIEFMTE9DX0RZTkFNSUMgPSAz
OyAvLyBDYW5ub3QgYmUgZnJlZWQgZXhjZXB0IHRocm91Z2ggc2Jyawp2YXIgQUxMT0NfTk9ORSA9
IDQ7IC8vIERvIG5vdCBhbGxvY2F0ZQpNb2R1bGVbJ0FMTE9DX05PUk1BTCddID0gQUxMT0NfTk9S
TUFMOwpNb2R1bGVbJ0FMTE9DX1NUQUNLJ10gPSBBTExPQ19TVEFDSzsKTW9kdWxlWydBTExPQ19T
VEFUSUMnXSA9IEFMTE9DX1NUQVRJQzsKTW9kdWxlWydBTExPQ19EWU5BTUlDJ10gPSBBTExPQ19E
WU5BTUlDOwpNb2R1bGVbJ0FMTE9DX05PTkUnXSA9IEFMTE9DX05PTkU7Ci8vIGFsbG9jYXRlKCk6
IFRoaXMgaXMgZm9yIGludGVybmFsIHVzZS4gWW91IGNhbiB1c2UgaXQgeW91cnNlbGYgYXMgd2Vs
bCwgYnV0IHRoZSBpbnRlcmZhY2UKLy8gICAgICAgICAgICAgaXMgYSBsaXR0bGUgdHJpY2t5IChz
ZWUgZG9jcyByaWdodCBiZWxvdykuIFRoZSByZWFzb24gaXMgdGhhdCBpdCBpcyBvcHRpbWl6ZWQK
Ly8gICAgICAgICAgICAgZm9yIG11bHRpcGxlIHN5bnRheGVzIHRvIHNhdmUgc3BhY2UgaW4gZ2Vu
ZXJhdGVkIGNvZGUuIFNvIHlvdSBzaG91bGQKLy8gICAgICAgICAgICAgbm9ybWFsbHkgbm90IHVz
ZSBhbGxvY2F0ZSgpLCBhbmQgaW5zdGVhZCBhbGxvY2F0ZSBtZW1vcnkgdXNpbmcgX21hbGxvYygp
LAovLyAgICAgICAgICAgICBpbml0aWFsaXplIGl0IHdpdGggc2V0VmFsdWUoKSwgYW5kIHNvIGZv
cnRoLgovLyBAc2xhYjogQW4gYXJyYXkgb2YgZGF0YSwgb3IgYSBudW1iZXIuIElmIGEgbnVtYmVy
LCB0aGVuIHRoZSBzaXplIG9mIHRoZSBibG9jayB0byBhbGxvY2F0ZSwKLy8gICAgICAgIGluICpi
eXRlcyogKG5vdGUgdGhhdCB0aGlzIGlzIHNvbWV0aW1lcyBjb25mdXNpbmc6IHRoZSBuZXh0IHBh
cmFtZXRlciBkb2VzIG5vdAovLyAgICAgICAgYWZmZWN0IHRoaXMhKQovLyBAdHlwZXM6IEVpdGhl
ciBhbiBhcnJheSBvZiB0eXBlcywgb25lIGZvciBlYWNoIGJ5dGUgKG9yIDAgaWYgbm8gdHlwZSBh
dCB0aGF0IHBvc2l0aW9uKSwKLy8gICAgICAgICBvciBhIHNpbmdsZSB0eXBlIHdoaWNoIGlzIHVz
ZWQgZm9yIHRoZSBlbnRpcmUgYmxvY2suIFRoaXMgb25seSBtYXR0ZXJzIGlmIHRoZXJlCi8vICAg
ICAgICAgaXMgaW5pdGlhbCBkYXRhIC0gaWYgQHNsYWIgaXMgYSBudW1iZXIsIHRoZW4gdGhpcyBk
b2VzIG5vdCBtYXR0ZXIgYXQgYWxsIGFuZCBpcwovLyAgICAgICAgIGlnbm9yZWQuCi8vIEBhbGxv
Y2F0b3I6IEhvdyB0byBhbGxvY2F0ZSBtZW1vcnksIHNlZSBBTExPQ18qCmZ1bmN0aW9uIGFsbG9j
YXRlKHNsYWIsIHR5cGVzLCBhbGxvY2F0b3IsIHB0cikgewogIHZhciB6ZXJvaW5pdCwgc2l6ZTsK
ICBpZiAodHlwZW9mIHNsYWIgPT09ICdudW1iZXInKSB7CiAgICB6ZXJvaW5pdCA9IHRydWU7CiAg
ICBzaXplID0gc2xhYjsKICB9IGVsc2UgewogICAgemVyb2luaXQgPSBmYWxzZTsKICAgIHNpemUg
PSBzbGFiLmxlbmd0aDsKICB9CiAgdmFyIHNpbmdsZVR5cGUgPSB0eXBlb2YgdHlwZXMgPT09ICdz
dHJpbmcnID8gdHlwZXMgOiBudWxsOwogIHZhciByZXQ7CiAgaWYgKGFsbG9jYXRvciA9PSBBTExP
Q19OT05FKSB7CiAgICByZXQgPSBwdHI7CiAgfSBlbHNlIHsKICAgIHJldCA9IFtfbWFsbG9jLCBS
dW50aW1lLnN0YWNrQWxsb2MsIFJ1bnRpbWUuc3RhdGljQWxsb2MsIFJ1bnRpbWUuZHluYW1pY0Fs
bG9jXVthbGxvY2F0b3IgPT09IHVuZGVmaW5lZCA/IEFMTE9DX1NUQVRJQyA6IGFsbG9jYXRvcl0o
TWF0aC5tYXgoc2l6ZSwgc2luZ2xlVHlwZSA/IDEgOiB0eXBlcy5sZW5ndGgpKTsKICB9CiAgaWYg
KHplcm9pbml0KSB7CiAgICB2YXIgcHRyID0gcmV0LCBzdG9wOwogICAgYXNzZXJ0KChyZXQgJiAz
KSA9PSAwKTsKICAgIHN0b3AgPSByZXQgKyAoc2l6ZSAmIH4zKTsKICAgIGZvciAoOyBwdHIgPCBz
dG9wOyBwdHIgKz0gNCkgewogICAgICBIRUFQMzJbKChwdHIpPj4yKV09MDsKICAgIH0KICAgIHN0
b3AgPSByZXQgKyBzaXplOwogICAgd2hpbGUgKHB0ciA8IHN0b3ApIHsKICAgICAgSEVBUDhbKChw
dHIrKyl8MCldPTA7CiAgICB9CiAgICByZXR1cm4gcmV0OwogIH0KICBpZiAoc2luZ2xlVHlwZSA9
PT0gJ2k4JykgewogICAgaWYgKHNsYWIuc3ViYXJyYXkgfHwgc2xhYi5zbGljZSkgewogICAgICBI
RUFQVTguc2V0KHNsYWIsIHJldCk7CiAgICB9IGVsc2UgewogICAgICBIRUFQVTguc2V0KG5ldyBV
aW50OEFycmF5KHNsYWIpLCByZXQpOwogICAgfQogICAgcmV0dXJuIHJldDsKICB9CiAgdmFyIGkg
PSAwLCB0eXBlLCB0eXBlU2l6ZSwgcHJldmlvdXNUeXBlOwogIHdoaWxlIChpIDwgc2l6ZSkgewog
ICAgdmFyIGN1cnIgPSBzbGFiW2ldOwogICAgaWYgKHR5cGVvZiBjdXJyID09PSAnZnVuY3Rpb24n
KSB7CiAgICAgIGN1cnIgPSBSdW50aW1lLmdldEZ1bmN0aW9uSW5kZXgoY3Vycik7CiAgICB9CiAg
ICB0eXBlID0gc2luZ2xlVHlwZSB8fCB0eXBlc1tpXTsKICAgIGlmICh0eXBlID09PSAwKSB7CiAg
ICAgIGkrKzsKICAgICAgY29udGludWU7CiAgICB9CiAgICBpZiAodHlwZSA9PSAnaTY0JykgdHlw
ZSA9ICdpMzInOyAvLyBzcGVjaWFsIGNhc2U6IHdlIGhhdmUgb25lIGkzMiBoZXJlLCBhbmQgb25l
IGkzMiBsYXRlcgogICAgc2V0VmFsdWUocmV0K2ksIGN1cnIsIHR5cGUpOwogICAgLy8gbm8gbmVl
ZCB0byBsb29rIHVwIHNpemUgdW5sZXNzIHR5cGUgY2hhbmdlcywgc28gY2FjaGUgaXQKICAgIGlm
IChwcmV2aW91c1R5cGUgIT09IHR5cGUpIHsKICAgICAgdHlwZVNpemUgPSBSdW50aW1lLmdldE5h
dGl2ZVR5cGVTaXplKHR5cGUpOwogICAgICBwcmV2aW91c1R5cGUgPSB0eXBlOwogICAgfQogICAg
aSArPSB0eXBlU2l6ZTsKICB9CiAgcmV0dXJuIHJldDsKfQpNb2R1bGVbJ2FsbG9jYXRlJ10gPSBh
bGxvY2F0ZTsKZnVuY3Rpb24gUG9pbnRlcl9zdHJpbmdpZnkocHRyLCAvKiBvcHRpb25hbCAqLyBs
ZW5ndGgpIHsKICAvLyBGaW5kIHRoZSBsZW5ndGgsIGFuZCBjaGVjayBmb3IgVVRGIHdoaWxlIGRv
aW5nIHNvCiAgdmFyIGhhc1V0ZiA9IGZhbHNlOwogIHZhciB0OwogIHZhciBpID0gMDsKICB3aGls
ZSAoMSkgewogICAgdCA9IEhFQVBVOFsoKChwdHIpKyhpKSl8MCldOwogICAgaWYgKHQgPj0gMTI4
KSBoYXNVdGYgPSB0cnVlOwogICAgZWxzZSBpZiAodCA9PSAwICYmICFsZW5ndGgpIGJyZWFrOwog
ICAgaSsrOwogICAgaWYgKGxlbmd0aCAmJiBpID09IGxlbmd0aCkgYnJlYWs7CiAgfQogIGlmICgh
bGVuZ3RoKSBsZW5ndGggPSBpOwogIHZhciByZXQgPSAnJzsKICBpZiAoIWhhc1V0ZikgewogICAg
dmFyIE1BWF9DSFVOSyA9IDEwMjQ7IC8vIHNwbGl0IHVwIGludG8gY2h1bmtzLCBiZWNhdXNlIC5h
cHBseSBvbiBhIGh1Z2Ugc3RyaW5nIGNhbiBvdmVyZmxvdyB0aGUgc3RhY2sKICAgIHZhciBjdXJy
OwogICAgd2hpbGUgKGxlbmd0aCA+IDApIHsKICAgICAgY3VyciA9IFN0cmluZy5mcm9tQ2hhckNv
ZGUuYXBwbHkoU3RyaW5nLCBIRUFQVTguc3ViYXJyYXkocHRyLCBwdHIgKyBNYXRoLm1pbihsZW5n
dGgsIE1BWF9DSFVOSykpKTsKICAgICAgcmV0ID0gcmV0ID8gcmV0ICsgY3VyciA6IGN1cnI7CiAg
ICAgIHB0ciArPSBNQVhfQ0hVTks7CiAgICAgIGxlbmd0aCAtPSBNQVhfQ0hVTks7CiAgICB9CiAg
ICByZXR1cm4gcmV0OwogIH0KICB2YXIgdXRmOCA9IG5ldyBSdW50aW1lLlVURjhQcm9jZXNzb3Io
KTsKICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgIHQgPSBIRUFQVThbKCgocHRy
KSsoaSkpfDApXTsKICAgIHJldCArPSB1dGY4LnByb2Nlc3NDQ2hhcih0KTsKICB9CiAgcmV0dXJu
IHJldDsKfQpNb2R1bGVbJ1BvaW50ZXJfc3RyaW5naWZ5J10gPSBQb2ludGVyX3N0cmluZ2lmeTsK
Ly8gTWVtb3J5IG1hbmFnZW1lbnQKdmFyIFBBR0VfU0laRSA9IDQwOTY7CmZ1bmN0aW9uIGFsaWdu
TWVtb3J5UGFnZSh4KSB7CiAgcmV0dXJuICgoeCs0MDk1KT4+MTIpPDwxMjsKfQp2YXIgSEVBUDsK
dmFyIEhFQVA4LCBIRUFQVTgsIEhFQVAxNiwgSEVBUFUxNiwgSEVBUDMyLCBIRUFQVTMyLCBIRUFQ
RjMyLCBIRUFQRjY0Owp2YXIgU1RBVElDX0JBU0UgPSAwLCBTVEFUSUNUT1AgPSAwLCBzdGF0aWNT
ZWFsZWQgPSBmYWxzZTsgLy8gc3RhdGljIGFyZWEKdmFyIFNUQUNLX0JBU0UgPSAwLCBTVEFDS1RP
UCA9IDAsIFNUQUNLX01BWCA9IDA7IC8vIHN0YWNrIGFyZWEKdmFyIERZTkFNSUNfQkFTRSA9IDAs
IERZTkFNSUNUT1AgPSAwOyAvLyBkeW5hbWljIGFyZWEgaGFuZGxlZCBieSBzYnJrCmZ1bmN0aW9u
IGVubGFyZ2VNZW1vcnkoKSB7CiAgYWJvcnQoJ0Nhbm5vdCBlbmxhcmdlIG1lbW9yeSBhcnJheXMg
aW4gYXNtLmpzLiBFaXRoZXIgKDEpIGNvbXBpbGUgd2l0aCAtcyBUT1RBTF9NRU1PUlk9WCB3aXRo
IFggaGlnaGVyIHRoYW4gdGhlIGN1cnJlbnQgdmFsdWUsIG9yICgyKSBzZXQgTW9kdWxlLlRPVEFM
X01FTU9SWSBiZWZvcmUgdGhlIHByb2dyYW0gcnVucy4nKTsKfQp2YXIgVE9UQUxfU1RBQ0sgPSBN
b2R1bGVbJ1RPVEFMX1NUQUNLJ10gfHwgNTI0Mjg4MDsKdmFyIFRPVEFMX01FTU9SWSA9IE1vZHVs
ZVsnVE9UQUxfTUVNT1JZJ10gfHwgMTM0MjE3NzI4Owp2YXIgRkFTVF9NRU1PUlkgPSBNb2R1bGVb
J0ZBU1RfTUVNT1JZJ10gfHwgMjA5NzE1MjsKLy8gSW5pdGlhbGl6ZSB0aGUgcnVudGltZSdzIG1l
bW9yeQovLyBjaGVjayBmb3IgZnVsbCBlbmdpbmUgc3VwcG9ydCAodXNlIHN0cmluZyAnc3ViYXJy
YXknIHRvIGF2b2lkIGNsb3N1cmUgY29tcGlsZXIgY29uZnVzaW9uKQphc3NlcnQoISFJbnQzMkFy
cmF5ICYmICEhRmxvYXQ2NEFycmF5ICYmICEhKG5ldyBJbnQzMkFycmF5KDEpWydzdWJhcnJheSdd
KSAmJiAhIShuZXcgSW50MzJBcnJheSgxKVsnc2V0J10pLAogICAgICAgJ0Nhbm5vdCBmYWxsYmFj
ayB0byBub24tdHlwZWQgYXJyYXkgY2FzZTogQ29kZSBpcyB0b28gc3BlY2lhbGl6ZWQnKTsKdmFy
IGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihUT1RBTF9NRU1PUlkpOwpIRUFQOCA9IG5ldyBJbnQ4
QXJyYXkoYnVmZmVyKTsKSEVBUDE2ID0gbmV3IEludDE2QXJyYXkoYnVmZmVyKTsKSEVBUDMyID0g
bmV3IEludDMyQXJyYXkoYnVmZmVyKTsKSEVBUFU4ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTsK
SEVBUFUxNiA9IG5ldyBVaW50MTZBcnJheShidWZmZXIpOwpIRUFQVTMyID0gbmV3IFVpbnQzMkFy
cmF5KGJ1ZmZlcik7CkhFQVBGMzIgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlcik7CkhFQVBGNjQg
PSBuZXcgRmxvYXQ2NEFycmF5KGJ1ZmZlcik7Ci8vIEVuZGlhbm5lc3MgY2hlY2sgKG5vdGU6IGFz
c3VtZXMgY29tcGlsZXIgYXJjaCB3YXMgbGl0dGxlLWVuZGlhbikKSEVBUDMyWzBdID0gMjU1Owph
c3NlcnQoSEVBUFU4WzBdID09PSAyNTUgJiYgSEVBUFU4WzNdID09PSAwLCAnVHlwZWQgYXJyYXlz
IDIgbXVzdCBiZSBydW4gb24gYSBsaXR0bGUtZW5kaWFuIHN5c3RlbScpOwpNb2R1bGVbJ0hFQVAn
XSA9IEhFQVA7Ck1vZHVsZVsnSEVBUDgnXSA9IEhFQVA4OwpNb2R1bGVbJ0hFQVAxNiddID0gSEVB
UDE2OwpNb2R1bGVbJ0hFQVAzMiddID0gSEVBUDMyOwpNb2R1bGVbJ0hFQVBVOCddID0gSEVBUFU4
OwpNb2R1bGVbJ0hFQVBVMTYnXSA9IEhFQVBVMTY7Ck1vZHVsZVsnSEVBUFUzMiddID0gSEVBUFUz
MjsKTW9kdWxlWydIRUFQRjMyJ10gPSBIRUFQRjMyOwpNb2R1bGVbJ0hFQVBGNjQnXSA9IEhFQVBG
NjQ7CmZ1bmN0aW9uIGNhbGxSdW50aW1lQ2FsbGJhY2tzKGNhbGxiYWNrcykgewogIHdoaWxlKGNh
bGxiYWNrcy5sZW5ndGggPiAwKSB7CiAgICB2YXIgY2FsbGJhY2sgPSBjYWxsYmFja3Muc2hpZnQo
KTsKICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT0gJ2Z1bmN0aW9uJykgewogICAgICBjYWxsYmFj
aygpOwogICAgICBjb250aW51ZTsKICAgIH0KICAgIHZhciBmdW5jID0gY2FsbGJhY2suZnVuYzsK
ICAgIGlmICh0eXBlb2YgZnVuYyA9PT0gJ251bWJlcicpIHsKICAgICAgaWYgKGNhbGxiYWNrLmFy
ZyA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgUnVudGltZS5keW5DYWxsKCd2JywgZnVuYyk7CiAg
ICAgIH0gZWxzZSB7CiAgICAgICAgUnVudGltZS5keW5DYWxsKCd2aScsIGZ1bmMsIFtjYWxsYmFj
ay5hcmddKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgZnVuYyhjYWxsYmFjay5hcmcgPT09
IHVuZGVmaW5lZCA/IG51bGwgOiBjYWxsYmFjay5hcmcpOwogICAgfQogIH0KfQp2YXIgX19BVFBS
RVJVTl9fICA9IFtdOyAvLyBmdW5jdGlvbnMgY2FsbGVkIGJlZm9yZSB0aGUgcnVudGltZSBpcyBp
bml0aWFsaXplZAp2YXIgX19BVElOSVRfXyAgICA9IFtdOyAvLyBmdW5jdGlvbnMgY2FsbGVkIGR1
cmluZyBzdGFydHVwCnZhciBfX0FUTUFJTl9fICAgID0gW107IC8vIGZ1bmN0aW9ucyBjYWxsZWQg
d2hlbiBtYWluKCkgaXMgdG8gYmUgcnVuCnZhciBfX0FURVhJVF9fICAgID0gW107IC8vIGZ1bmN0
aW9ucyBjYWxsZWQgZHVyaW5nIHNodXRkb3duCnZhciBfX0FUUE9TVFJVTl9fID0gW107IC8vIGZ1
bmN0aW9ucyBjYWxsZWQgYWZ0ZXIgdGhlIHJ1bnRpbWUgaGFzIGV4aXRlZAp2YXIgcnVudGltZUlu
aXRpYWxpemVkID0gZmFsc2U7CmZ1bmN0aW9uIHByZVJ1bigpIHsKICAvLyBjb21wYXRpYmlsaXR5
IC0gbWVyZ2UgaW4gYW55dGhpbmcgZnJvbSBNb2R1bGVbJ3ByZVJ1biddIGF0IHRoaXMgdGltZQog
IGlmIChNb2R1bGVbJ3ByZVJ1biddKSB7CiAgICBpZiAodHlwZW9mIE1vZHVsZVsncHJlUnVuJ10g
PT0gJ2Z1bmN0aW9uJykgTW9kdWxlWydwcmVSdW4nXSA9IFtNb2R1bGVbJ3ByZVJ1biddXTsKICAg
IHdoaWxlIChNb2R1bGVbJ3ByZVJ1biddLmxlbmd0aCkgewogICAgICBhZGRPblByZVJ1bihNb2R1
bGVbJ3ByZVJ1biddLnNoaWZ0KCkpOwogICAgfQogIH0KICBjYWxsUnVudGltZUNhbGxiYWNrcyhf
X0FUUFJFUlVOX18pOwp9CmZ1bmN0aW9uIGVuc3VyZUluaXRSdW50aW1lKCkgewogIGlmIChydW50
aW1lSW5pdGlhbGl6ZWQpIHJldHVybjsKICBydW50aW1lSW5pdGlhbGl6ZWQgPSB0cnVlOwogIGNh
bGxSdW50aW1lQ2FsbGJhY2tzKF9fQVRJTklUX18pOwp9CmZ1bmN0aW9uIHByZU1haW4oKSB7CiAg
Y2FsbFJ1bnRpbWVDYWxsYmFja3MoX19BVE1BSU5fXyk7Cn0KZnVuY3Rpb24gZXhpdFJ1bnRpbWUo
KSB7CiAgY2FsbFJ1bnRpbWVDYWxsYmFja3MoX19BVEVYSVRfXyk7Cn0KZnVuY3Rpb24gcG9zdFJ1
bigpIHsKICAvLyBjb21wYXRpYmlsaXR5IC0gbWVyZ2UgaW4gYW55dGhpbmcgZnJvbSBNb2R1bGVb
J3Bvc3RSdW4nXSBhdCB0aGlzIHRpbWUKICBpZiAoTW9kdWxlWydwb3N0UnVuJ10pIHsKICAgIGlm
ICh0eXBlb2YgTW9kdWxlWydwb3N0UnVuJ10gPT0gJ2Z1bmN0aW9uJykgTW9kdWxlWydwb3N0UnVu
J10gPSBbTW9kdWxlWydwb3N0UnVuJ11dOwogICAgd2hpbGUgKE1vZHVsZVsncG9zdFJ1biddLmxl
bmd0aCkgewogICAgICBhZGRPblBvc3RSdW4oTW9kdWxlWydwb3N0UnVuJ10uc2hpZnQoKSk7CiAg
ICB9CiAgfQogIGNhbGxSdW50aW1lQ2FsbGJhY2tzKF9fQVRQT1NUUlVOX18pOwp9CmZ1bmN0aW9u
IGFkZE9uUHJlUnVuKGNiKSB7CiAgX19BVFBSRVJVTl9fLnVuc2hpZnQoY2IpOwp9Ck1vZHVsZVsn
YWRkT25QcmVSdW4nXSA9IE1vZHVsZS5hZGRPblByZVJ1biA9IGFkZE9uUHJlUnVuOwpmdW5jdGlv
biBhZGRPbkluaXQoY2IpIHsKICBfX0FUSU5JVF9fLnVuc2hpZnQoY2IpOwp9Ck1vZHVsZVsnYWRk
T25Jbml0J10gPSBNb2R1bGUuYWRkT25Jbml0ID0gYWRkT25Jbml0OwpmdW5jdGlvbiBhZGRPblBy
ZU1haW4oY2IpIHsKICBfX0FUTUFJTl9fLnVuc2hpZnQoY2IpOwp9Ck1vZHVsZVsnYWRkT25QcmVN
YWluJ10gPSBNb2R1bGUuYWRkT25QcmVNYWluID0gYWRkT25QcmVNYWluOwpmdW5jdGlvbiBhZGRP
bkV4aXQoY2IpIHsKICBfX0FURVhJVF9fLnVuc2hpZnQoY2IpOwp9Ck1vZHVsZVsnYWRkT25FeGl0
J10gPSBNb2R1bGUuYWRkT25FeGl0ID0gYWRkT25FeGl0OwpmdW5jdGlvbiBhZGRPblBvc3RSdW4o
Y2IpIHsKICBfX0FUUE9TVFJVTl9fLnVuc2hpZnQoY2IpOwp9Ck1vZHVsZVsnYWRkT25Qb3N0UnVu
J10gPSBNb2R1bGUuYWRkT25Qb3N0UnVuID0gYWRkT25Qb3N0UnVuOwovLyBUb29scwovLyBUaGlz
IHByb2Nlc3NlcyBhIEpTIHN0cmluZyBpbnRvIGEgQy1saW5lIGFycmF5IG9mIG51bWJlcnMsIDAt
dGVybWluYXRlZC4KLy8gRm9yIExMVk0tb3JpZ2luYXRpbmcgc3RyaW5ncywgc2VlIHBhcnNlci5q
czpwYXJzZUxMVk1TdHJpbmcgZnVuY3Rpb24KZnVuY3Rpb24gaW50QXJyYXlGcm9tU3RyaW5nKHN0
cmluZ3ksIGRvbnRBZGROdWxsLCBsZW5ndGggLyogb3B0aW9uYWwgKi8pIHsKICB2YXIgcmV0ID0g
KG5ldyBSdW50aW1lLlVURjhQcm9jZXNzb3IoKSkucHJvY2Vzc0pTU3RyaW5nKHN0cmluZ3kpOwog
IGlmIChsZW5ndGgpIHsKICAgIHJldC5sZW5ndGggPSBsZW5ndGg7CiAgfQogIGlmICghZG9udEFk
ZE51bGwpIHsKICAgIHJldC5wdXNoKDApOwogIH0KICByZXR1cm4gcmV0Owp9Ck1vZHVsZVsnaW50
QXJyYXlGcm9tU3RyaW5nJ10gPSBpbnRBcnJheUZyb21TdHJpbmc7CmZ1bmN0aW9uIGludEFycmF5
VG9TdHJpbmcoYXJyYXkpIHsKICB2YXIgcmV0ID0gW107CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBh
cnJheS5sZW5ndGg7IGkrKykgewogICAgdmFyIGNociA9IGFycmF5W2ldOwogICAgaWYgKGNociA+
IDB4RkYpIHsKICAgICAgY2hyICY9IDB4RkY7CiAgICB9CiAgICByZXQucHVzaChTdHJpbmcuZnJv
bUNoYXJDb2RlKGNocikpOwogIH0KICByZXR1cm4gcmV0LmpvaW4oJycpOwp9Ck1vZHVsZVsnaW50
QXJyYXlUb1N0cmluZyddID0gaW50QXJyYXlUb1N0cmluZzsKLy8gV3JpdGUgYSBKYXZhc2NyaXB0
IGFycmF5IHRvIHNvbWV3aGVyZSBpbiB0aGUgaGVhcApmdW5jdGlvbiB3cml0ZVN0cmluZ1RvTWVt
b3J5KHN0cmluZywgYnVmZmVyLCBkb250QWRkTnVsbCkgewogIHZhciBhcnJheSA9IGludEFycmF5
RnJvbVN0cmluZyhzdHJpbmcsIGRvbnRBZGROdWxsKTsKICB2YXIgaSA9IDA7CiAgd2hpbGUgKGkg
PCBhcnJheS5sZW5ndGgpIHsKICAgIHZhciBjaHIgPSBhcnJheVtpXTsKICAgIEhFQVA4WygoKGJ1
ZmZlcikrKGkpKXwwKV09Y2hyCiAgICBpID0gaSArIDE7CiAgfQp9Ck1vZHVsZVsnd3JpdGVTdHJp
bmdUb01lbW9yeSddID0gd3JpdGVTdHJpbmdUb01lbW9yeTsKZnVuY3Rpb24gd3JpdGVBcnJheVRv
TWVtb3J5KGFycmF5LCBidWZmZXIpIHsKICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0
aDsgaSsrKSB7CiAgICBIRUFQOFsoKChidWZmZXIpKyhpKSl8MCldPWFycmF5W2ldOwogIH0KfQpN
b2R1bGVbJ3dyaXRlQXJyYXlUb01lbW9yeSddID0gd3JpdGVBcnJheVRvTWVtb3J5OwpmdW5jdGlv
biB1blNpZ24odmFsdWUsIGJpdHMsIGlnbm9yZSwgc2lnKSB7CiAgaWYgKHZhbHVlID49IDApIHsK
ICAgIHJldHVybiB2YWx1ZTsKICB9CiAgcmV0dXJuIGJpdHMgPD0gMzIgPyAyKk1hdGguYWJzKDEg
PDwgKGJpdHMtMSkpICsgdmFsdWUgLy8gTmVlZCBzb21lIHRyaWNrZXJ5LCBzaW5jZSBpZiBiaXRz
ID09IDMyLCB3ZSBhcmUgcmlnaHQgYXQgdGhlIGxpbWl0IG9mIHRoZSBiaXRzIEpTIHVzZXMgaW4g
Yml0c2hpZnRzCiAgICAgICAgICAgICAgICAgICAgOiBNYXRoLnBvdygyLCBiaXRzKSAgICAgICAg
ICsgdmFsdWU7Cn0KZnVuY3Rpb24gcmVTaWduKHZhbHVlLCBiaXRzLCBpZ25vcmUsIHNpZykgewog
IGlmICh2YWx1ZSA8PSAwKSB7CiAgICByZXR1cm4gdmFsdWU7CiAgfQogIHZhciBoYWxmID0gYml0
cyA8PSAzMiA/IE1hdGguYWJzKDEgPDwgKGJpdHMtMSkpIC8vIGFicyBpcyBuZWVkZWQgaWYgYml0
cyA9PSAzMgogICAgICAgICAgICAgICAgICAgICAgICA6IE1hdGgucG93KDIsIGJpdHMtMSk7CiAg
aWYgKHZhbHVlID49IGhhbGYgJiYgKGJpdHMgPD0gMzIgfHwgdmFsdWUgPiBoYWxmKSkgeyAvLyBm
b3IgaHVnZSB2YWx1ZXMsIHdlIGNhbiBoaXQgdGhlIHByZWNpc2lvbiBsaW1pdCBhbmQgYWx3YXlz
IGdldCB0cnVlIGhlcmUuIHNvIGRvbid0IGRvIHRoYXQKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ1dCwgaW4gZ2VuZXJhbCB0aGVyZSBp
cyBubyBwZXJmZWN0IHNvbHV0aW9uIGhlcmUuIFdpdGggNjQtYml0IGludHMsIHdlIGdldCByb3Vu
ZGluZyBhbmQgZXJyb3JzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBUT0RPOiBJbiBpNjQgbW9kZSAxLCByZXNpZ24gdGhlIHR3byBwYXJ0
cyBzZXBhcmF0ZWx5IGFuZCBzYWZlbHkKICAgIHZhbHVlID0gLTIqaGFsZiArIHZhbHVlOyAvLyBD
YW5ub3QgYml0c2hpZnQgaGFsZiwgYXMgaXQgbWF5IGJlIGF0IHRoZSBsaW1pdCBvZiB0aGUgYml0
cyBKUyB1c2VzIGluIGJpdHNoaWZ0cwogIH0KICByZXR1cm4gdmFsdWU7Cn0KaWYgKCFNYXRoWydp
bXVsJ10pIE1hdGhbJ2ltdWwnXSA9IGZ1bmN0aW9uKGEsIGIpIHsKICB2YXIgYWggID0gYSA+Pj4g
MTY7CiAgdmFyIGFsID0gYSAmIDB4ZmZmZjsKICB2YXIgYmggID0gYiA+Pj4gMTY7CiAgdmFyIGJs
ID0gYiAmIDB4ZmZmZjsKICByZXR1cm4gKGFsKmJsICsgKChhaCpibCArIGFsKmJoKSA8PCAxNikp
fDA7Cn07Ck1hdGguaW11bCA9IE1hdGhbJ2ltdWwnXTsKLy8gQSBjb3VudGVyIG9mIGRlcGVuZGVu
Y2llcyBmb3IgY2FsbGluZyBydW4oKS4gSWYgd2UgbmVlZCB0bwovLyBkbyBhc3luY2hyb25vdXMg
d29yayBiZWZvcmUgcnVubmluZywgaW5jcmVtZW50IHRoaXMgYW5kCi8vIGRlY3JlbWVudCBpdC4g
SW5jcmVtZW50aW5nIG11c3QgaGFwcGVuIGluIGEgcGxhY2UgbGlrZQovLyBQUkVfUlVOX0FERElU
SU9OUyAodXNlZCBieSBlbWNjIHRvIGFkZCBmaWxlIHByZWxvYWRpbmcpLgovLyBOb3RlIHRoYXQg
eW91IGNhbiBhZGQgZGVwZW5kZW5jaWVzIGluIHByZVJ1biwgZXZlbiB0aG91Z2gKLy8gaXQgaGFw
cGVucyByaWdodCBiZWZvcmUgcnVuIC0gcnVuIHdpbGwgYmUgcG9zdHBvbmVkIHVudGlsCi8vIHRo
ZSBkZXBlbmRlbmNpZXMgYXJlIG1ldC4KdmFyIHJ1bkRlcGVuZGVuY2llcyA9IDA7CnZhciBydW5E
ZXBlbmRlbmN5VHJhY2tpbmcgPSB7fTsKdmFyIGNhbGxlZEluaXQgPSBmYWxzZSwgY2FsbGVkUnVu
ID0gZmFsc2U7CnZhciBydW5EZXBlbmRlbmN5V2F0Y2hlciA9IG51bGw7CmZ1bmN0aW9uIGFkZFJ1
bkRlcGVuZGVuY3koaWQpIHsKICBydW5EZXBlbmRlbmNpZXMrKzsKICBpZiAoTW9kdWxlWydtb25p
dG9yUnVuRGVwZW5kZW5jaWVzJ10pIHsKICAgIE1vZHVsZVsnbW9uaXRvclJ1bkRlcGVuZGVuY2ll
cyddKHJ1bkRlcGVuZGVuY2llcyk7CiAgfQogIGlmIChpZCkgewogICAgYXNzZXJ0KCFydW5EZXBl
bmRlbmN5VHJhY2tpbmdbaWRdKTsKICAgIHJ1bkRlcGVuZGVuY3lUcmFja2luZ1tpZF0gPSAxOwog
IH0gZWxzZSB7CiAgICBNb2R1bGUucHJpbnRFcnIoJ3dhcm5pbmc6IHJ1biBkZXBlbmRlbmN5IGFk
ZGVkIHdpdGhvdXQgSUQnKTsKICB9Cn0KTW9kdWxlWydhZGRSdW5EZXBlbmRlbmN5J10gPSBhZGRS
dW5EZXBlbmRlbmN5OwpmdW5jdGlvbiByZW1vdmVSdW5EZXBlbmRlbmN5KGlkKSB7CiAgcnVuRGVw
ZW5kZW5jaWVzLS07CiAgaWYgKE1vZHVsZVsnbW9uaXRvclJ1bkRlcGVuZGVuY2llcyddKSB7CiAg
ICBNb2R1bGVbJ21vbml0b3JSdW5EZXBlbmRlbmNpZXMnXShydW5EZXBlbmRlbmNpZXMpOwogIH0K
ICBpZiAoaWQpIHsKICAgIGFzc2VydChydW5EZXBlbmRlbmN5VHJhY2tpbmdbaWRdKTsKICAgIGRl
bGV0ZSBydW5EZXBlbmRlbmN5VHJhY2tpbmdbaWRdOwogIH0gZWxzZSB7CiAgICBNb2R1bGUucHJp
bnRFcnIoJ3dhcm5pbmc6IHJ1biBkZXBlbmRlbmN5IHJlbW92ZWQgd2l0aG91dCBJRCcpOwogIH0K
ICBpZiAocnVuRGVwZW5kZW5jaWVzID09IDApIHsKICAgIGlmIChydW5EZXBlbmRlbmN5V2F0Y2hl
ciAhPT0gbnVsbCkgewogICAgICBjbGVhckludGVydmFsKHJ1bkRlcGVuZGVuY3lXYXRjaGVyKTsK
ICAgICAgcnVuRGVwZW5kZW5jeVdhdGNoZXIgPSBudWxsOwogICAgfSAKICAgIC8vIElmIHJ1biBo
YXMgbmV2ZXIgYmVlbiBjYWxsZWQsIGFuZCB3ZSBzaG91bGQgY2FsbCBydW4gKElOVk9LRV9SVU4g
aXMgdHJ1ZSwgYW5kIE1vZHVsZS5ub0luaXRpYWxSdW4gaXMgbm90IGZhbHNlKQogICAgaWYgKCFj
YWxsZWRSdW4gJiYgc2hvdWxkUnVuTm93KSBydW4oW10uY29uY2F0KE1vZHVsZVsiYXJndW1lbnRz
Il0pKTsKICB9Cn0KTW9kdWxlWydyZW1vdmVSdW5EZXBlbmRlbmN5J10gPSByZW1vdmVSdW5EZXBl
bmRlbmN5OwpNb2R1bGVbInByZWxvYWRlZEltYWdlcyJdID0ge307IC8vIG1hcHMgdXJsIHRvIGlt
YWdlIGRhdGEKTW9kdWxlWyJwcmVsb2FkZWRBdWRpb3MiXSA9IHt9OyAvLyBtYXBzIHVybCB0byBh
dWRpbyBkYXRhCmZ1bmN0aW9uIGxvYWRNZW1vcnlJbml0aWFsaXplcihmaWxlbmFtZSkgewogIGZ1
bmN0aW9uIGFwcGx5RGF0YShkYXRhKSB7CiAgICBIRUFQVTguc2V0KGRhdGEsIFNUQVRJQ19CQVNF
KTsKICB9CiAgLy8gYWx3YXlzIGRvIHRoaXMgYXN5bmNocm9ub3VzbHksIHRvIGtlZXAgc2hlbGwg
YW5kIHdlYiBhcyBzaW1pbGFyIGFzIHBvc3NpYmxlCiAgYWRkT25QcmVSdW4oZnVuY3Rpb24oKSB7
CiAgICBpZiAoRU5WSVJPTk1FTlRfSVNfTk9ERSB8fCBFTlZJUk9OTUVOVF9JU19TSEVMTCkgewog
ICAgICBhcHBseURhdGEoTW9kdWxlWydyZWFkQmluYXJ5J10oZmlsZW5hbWUpKTsKICAgIH0gZWxz
ZSB7CiAgICAgIEJyb3dzZXIuYXN5bmNMb2FkKGZpbGVuYW1lLCBmdW5jdGlvbihkYXRhKSB7CiAg
ICAgICAgYXBwbHlEYXRhKGRhdGEpOwogICAgICB9LCBmdW5jdGlvbihkYXRhKSB7CiAgICAgICAg
dGhyb3cgJ2NvdWxkIG5vdCBsb2FkIG1lbW9yeSBpbml0aWFsaXplciAnICsgZmlsZW5hbWU7CiAg
ICAgIH0pOwogICAgfQogIH0pOwp9Ci8vID09PSBCb2R5ID09PQpTVEFUSUNfQkFTRSA9IDg7ClNU
QVRJQ1RPUCA9IFNUQVRJQ19CQVNFICsgNTI4OwovKiBnbG9iYWwgaW5pdGlhbGl6ZXJzICovIF9f
QVRJTklUX18ucHVzaCh7IGZ1bmM6IGZ1bmN0aW9uKCkgeyBydW5Qb3N0U2V0cygpIH0gfSk7Ci8q
IG1lbW9yeSBpbml0aWFsaXplciAqLyBhbGxvY2F0ZShbMTAyLDEwNSwxMTAsOTcsMTA4LDU4LDMy
LDM3LDEwMCw0NiwxMCwwLDAsMCwwLDAsMTAxLDExNCwxMTQsMTExLDExNCw1OCwzMiwzNywxMDAs
MTAsMCwwLDAsMCwwLDBdLCAiaTgiLCBBTExPQ19OT05FLCBSdW50aW1lLkdMT0JBTF9CQVNFKQp2
YXIgdGVtcERvdWJsZVB0ciA9IFJ1bnRpbWUuYWxpZ25NZW1vcnkoYWxsb2NhdGUoMTIsICJpOCIs
IEFMTE9DX1NUQVRJQyksIDgpOwphc3NlcnQodGVtcERvdWJsZVB0ciAlIDggPT0gMCk7CmZ1bmN0
aW9uIGNvcHlUZW1wRmxvYXQocHRyKSB7IC8vIGZ1bmN0aW9ucywgYmVjYXVzZSBpbmxpbmluZyB0
aGlzIGNvZGUgaW5jcmVhc2VzIGNvZGUgc2l6ZSB0b28gbXVjaAogIEhFQVA4W3RlbXBEb3VibGVQ
dHJdID0gSEVBUDhbcHRyXTsKICBIRUFQOFt0ZW1wRG91YmxlUHRyKzFdID0gSEVBUDhbcHRyKzFd
OwogIEhFQVA4W3RlbXBEb3VibGVQdHIrMl0gPSBIRUFQOFtwdHIrMl07CiAgSEVBUDhbdGVtcERv
dWJsZVB0ciszXSA9IEhFQVA4W3B0ciszXTsKfQpmdW5jdGlvbiBjb3B5VGVtcERvdWJsZShwdHIp
IHsKICBIRUFQOFt0ZW1wRG91YmxlUHRyXSA9IEhFQVA4W3B0cl07CiAgSEVBUDhbdGVtcERvdWJs
ZVB0cisxXSA9IEhFQVA4W3B0cisxXTsKICBIRUFQOFt0ZW1wRG91YmxlUHRyKzJdID0gSEVBUDhb
cHRyKzJdOwogIEhFQVA4W3RlbXBEb3VibGVQdHIrM10gPSBIRUFQOFtwdHIrM107CiAgSEVBUDhb
dGVtcERvdWJsZVB0cis0XSA9IEhFQVA4W3B0cis0XTsKICBIRUFQOFt0ZW1wRG91YmxlUHRyKzVd
ID0gSEVBUDhbcHRyKzVdOwogIEhFQVA4W3RlbXBEb3VibGVQdHIrNl0gPSBIRUFQOFtwdHIrNl07
CiAgSEVBUDhbdGVtcERvdWJsZVB0cis3XSA9IEhFQVA4W3B0cis3XTsKfQogIHZhciBFUlJOT19D
T0RFUz17RVBFUk06MSxFTk9FTlQ6MixFU1JDSDozLEVJTlRSOjQsRUlPOjUsRU5YSU86NixFMkJJ
Rzo3LEVOT0VYRUM6OCxFQkFERjo5LEVDSElMRDoxMCxFQUdBSU46MTEsRVdPVUxEQkxPQ0s6MTEs
RU5PTUVNOjEyLEVBQ0NFUzoxMyxFRkFVTFQ6MTQsRU5PVEJMSzoxNSxFQlVTWToxNixFRVhJU1Q6
MTcsRVhERVY6MTgsRU5PREVWOjE5LEVOT1RESVI6MjAsRUlTRElSOjIxLEVJTlZBTDoyMixFTkZJ
TEU6MjMsRU1GSUxFOjI0LEVOT1RUWToyNSxFVFhUQlNZOjI2LEVGQklHOjI3LEVOT1NQQzoyOCxF
U1BJUEU6MjksRVJPRlM6MzAsRU1MSU5LOjMxLEVQSVBFOjMyLEVET006MzMsRVJBTkdFOjM0LEVO
T01TRzozNSxFSURSTTozNixFQ0hSTkc6MzcsRUwyTlNZTkM6MzgsRUwzSExUOjM5LEVMM1JTVDo0
MCxFTE5STkc6NDEsRVVOQVRDSDo0MixFTk9DU0k6NDMsRUwySExUOjQ0LEVERUFETEs6NDUsRU5P
TENLOjQ2LEVCQURFOjUwLEVCQURSOjUxLEVYRlVMTDo1MixFTk9BTk86NTMsRUJBRFJRQzo1NCxF
QkFEU0xUOjU1LEVERUFETE9DSzo1NixFQkZPTlQ6NTcsRU5PU1RSOjYwLEVOT0RBVEE6NjEsRVRJ
TUU6NjIsRU5PU1I6NjMsRU5PTkVUOjY0LEVOT1BLRzo2NSxFUkVNT1RFOjY2LEVOT0xJTks6Njcs
RUFEVjo2OCxFU1JNTlQ6NjksRUNPTU06NzAsRVBST1RPOjcxLEVNVUxUSUhPUDo3NCxFRE9URE9U
Ojc2LEVCQURNU0c6NzcsRU5PVFVOSVE6ODAsRUJBREZEOjgxLEVSRU1DSEc6ODIsRUxJQkFDQzo4
MyxFTElCQkFEOjg0LEVMSUJTQ046ODUsRUxJQk1BWDo4NixFTElCRVhFQzo4NyxFTk9TWVM6ODgs
RU5PVEVNUFRZOjkwLEVOQU1FVE9PTE9ORzo5MSxFTE9PUDo5MixFT1BOT1RTVVBQOjk1LEVQRk5P
U1VQUE9SVDo5NixFQ09OTlJFU0VUOjEwNCxFTk9CVUZTOjEwNSxFQUZOT1NVUFBPUlQ6MTA2LEVQ
Uk9UT1RZUEU6MTA3LEVOT1RTT0NLOjEwOCxFTk9QUk9UT09QVDoxMDksRVNIVVRET1dOOjExMCxF
Q09OTlJFRlVTRUQ6MTExLEVBRERSSU5VU0U6MTEyLEVDT05OQUJPUlRFRDoxMTMsRU5FVFVOUkVB
Q0g6MTE0LEVORVRET1dOOjExNSxFVElNRURPVVQ6MTE2LEVIT1NURE9XTjoxMTcsRUhPU1RVTlJF
QUNIOjExOCxFSU5QUk9HUkVTUzoxMTksRUFMUkVBRFk6MTIwLEVERVNUQUREUlJFUToxMjEsRU1T
R1NJWkU6MTIyLEVQUk9UT05PU1VQUE9SVDoxMjMsRVNPQ0tUTk9TVVBQT1JUOjEyNCxFQUREUk5P
VEFWQUlMOjEyNSxFTkVUUkVTRVQ6MTI2LEVJU0NPTk46MTI3LEVOT1RDT05OOjEyOCxFVE9PTUFO
WVJFRlM6MTI5LEVVU0VSUzoxMzEsRURRVU9UOjEzMixFU1RBTEU6MTMzLEVOT1RTVVA6MTM0LEVO
T01FRElVTToxMzUsRUlMU0VROjEzOCxFT1ZFUkZMT1c6MTM5LEVDQU5DRUxFRDoxNDAsRU5PVFJF
Q09WRVJBQkxFOjE0MSxFT1dORVJERUFEOjE0MixFU1RSUElQRToxNDN9OwogIHZhciBFUlJOT19N
RVNTQUdFUz17MDoiU3VjY2VzcyIsMToiTm90IHN1cGVyLXVzZXIiLDI6Ik5vIHN1Y2ggZmlsZSBv
ciBkaXJlY3RvcnkiLDM6Ik5vIHN1Y2ggcHJvY2VzcyIsNDoiSW50ZXJydXB0ZWQgc3lzdGVtIGNh
bGwiLDU6IkkvTyBlcnJvciIsNjoiTm8gc3VjaCBkZXZpY2Ugb3IgYWRkcmVzcyIsNzoiQXJnIGxp
c3QgdG9vIGxvbmciLDg6IkV4ZWMgZm9ybWF0IGVycm9yIiw5OiJCYWQgZmlsZSBudW1iZXIiLDEw
OiJObyBjaGlsZHJlbiIsMTE6Ik5vIG1vcmUgcHJvY2Vzc2VzIiwxMjoiTm90IGVub3VnaCBjb3Jl
IiwxMzoiUGVybWlzc2lvbiBkZW5pZWQiLDE0OiJCYWQgYWRkcmVzcyIsMTU6IkJsb2NrIGRldmlj
ZSByZXF1aXJlZCIsMTY6Ik1vdW50IGRldmljZSBidXN5IiwxNzoiRmlsZSBleGlzdHMiLDE4OiJD
cm9zcy1kZXZpY2UgbGluayIsMTk6Ik5vIHN1Y2ggZGV2aWNlIiwyMDoiTm90IGEgZGlyZWN0b3J5
IiwyMToiSXMgYSBkaXJlY3RvcnkiLDIyOiJJbnZhbGlkIGFyZ3VtZW50IiwyMzoiVG9vIG1hbnkg
b3BlbiBmaWxlcyBpbiBzeXN0ZW0iLDI0OiJUb28gbWFueSBvcGVuIGZpbGVzIiwyNToiTm90IGEg
dHlwZXdyaXRlciIsMjY6IlRleHQgZmlsZSBidXN5IiwyNzoiRmlsZSB0b28gbGFyZ2UiLDI4OiJO
byBzcGFjZSBsZWZ0IG9uIGRldmljZSIsMjk6IklsbGVnYWwgc2VlayIsMzA6IlJlYWQgb25seSBm
aWxlIHN5c3RlbSIsMzE6IlRvbyBtYW55IGxpbmtzIiwzMjoiQnJva2VuIHBpcGUiLDMzOiJNYXRo
IGFyZyBvdXQgb2YgZG9tYWluIG9mIGZ1bmMiLDM0OiJNYXRoIHJlc3VsdCBub3QgcmVwcmVzZW50
YWJsZSIsMzU6Ik5vIG1lc3NhZ2Ugb2YgZGVzaXJlZCB0eXBlIiwzNjoiSWRlbnRpZmllciByZW1v
dmVkIiwzNzoiQ2hhbm5lbCBudW1iZXIgb3V0IG9mIHJhbmdlIiwzODoiTGV2ZWwgMiBub3Qgc3lu
Y2hyb25pemVkIiwzOToiTGV2ZWwgMyBoYWx0ZWQiLDQwOiJMZXZlbCAzIHJlc2V0Iiw0MToiTGlu
ayBudW1iZXIgb3V0IG9mIHJhbmdlIiw0MjoiUHJvdG9jb2wgZHJpdmVyIG5vdCBhdHRhY2hlZCIs
NDM6Ik5vIENTSSBzdHJ1Y3R1cmUgYXZhaWxhYmxlIiw0NDoiTGV2ZWwgMiBoYWx0ZWQiLDQ1OiJE
ZWFkbG9jayBjb25kaXRpb24iLDQ2OiJObyByZWNvcmQgbG9ja3MgYXZhaWxhYmxlIiw1MDoiSW52
YWxpZCBleGNoYW5nZSIsNTE6IkludmFsaWQgcmVxdWVzdCBkZXNjcmlwdG9yIiw1MjoiRXhjaGFu
Z2UgZnVsbCIsNTM6Ik5vIGFub2RlIiw1NDoiSW52YWxpZCByZXF1ZXN0IGNvZGUiLDU1OiJJbnZh
bGlkIHNsb3QiLDU2OiJGaWxlIGxvY2tpbmcgZGVhZGxvY2sgZXJyb3IiLDU3OiJCYWQgZm9udCBm
aWxlIGZtdCIsNjA6IkRldmljZSBub3QgYSBzdHJlYW0iLDYxOiJObyBkYXRhIChmb3Igbm8gZGVs
YXkgaW8pIiw2MjoiVGltZXIgZXhwaXJlZCIsNjM6Ik91dCBvZiBzdHJlYW1zIHJlc291cmNlcyIs
NjQ6Ik1hY2hpbmUgaXMgbm90IG9uIHRoZSBuZXR3b3JrIiw2NToiUGFja2FnZSBub3QgaW5zdGFs
bGVkIiw2NjoiVGhlIG9iamVjdCBpcyByZW1vdGUiLDY3OiJUaGUgbGluayBoYXMgYmVlbiBzZXZl
cmVkIiw2ODoiQWR2ZXJ0aXNlIGVycm9yIiw2OToiU3Jtb3VudCBlcnJvciIsNzA6IkNvbW11bmlj
YXRpb24gZXJyb3Igb24gc2VuZCIsNzE6IlByb3RvY29sIGVycm9yIiw3NDoiTXVsdGlob3AgYXR0
ZW1wdGVkIiw3NjoiQ3Jvc3MgbW91bnQgcG9pbnQgKG5vdCByZWFsbHkgZXJyb3IpIiw3NzoiVHJ5
aW5nIHRvIHJlYWQgdW5yZWFkYWJsZSBtZXNzYWdlIiw4MDoiR2l2ZW4gbG9nLiBuYW1lIG5vdCB1
bmlxdWUiLDgxOiJmLmQuIGludmFsaWQgZm9yIHRoaXMgb3BlcmF0aW9uIiw4MjoiUmVtb3RlIGFk
ZHJlc3MgY2hhbmdlZCIsODM6IkNhbiAgIGFjY2VzcyBhIG5lZWRlZCBzaGFyZWQgbGliIiw4NDoi
QWNjZXNzaW5nIGEgY29ycnVwdGVkIHNoYXJlZCBsaWIiLDg1OiIubGliIHNlY3Rpb24gaW4gYS5v
dXQgY29ycnVwdGVkIiw4NjoiQXR0ZW1wdGluZyB0byBsaW5rIGluIHRvbyBtYW55IGxpYnMiLDg3
OiJBdHRlbXB0aW5nIHRvIGV4ZWMgYSBzaGFyZWQgbGlicmFyeSIsODg6IkZ1bmN0aW9uIG5vdCBp
bXBsZW1lbnRlZCIsOTA6IkRpcmVjdG9yeSBub3QgZW1wdHkiLDkxOiJGaWxlIG9yIHBhdGggbmFt
ZSB0b28gbG9uZyIsOTI6IlRvbyBtYW55IHN5bWJvbGljIGxpbmtzIiw5NToiT3BlcmF0aW9uIG5v
dCBzdXBwb3J0ZWQgb24gdHJhbnNwb3J0IGVuZHBvaW50Iiw5NjoiUHJvdG9jb2wgZmFtaWx5IG5v
dCBzdXBwb3J0ZWQiLDEwNDoiQ29ubmVjdGlvbiByZXNldCBieSBwZWVyIiwxMDU6Ik5vIGJ1ZmZl
ciBzcGFjZSBhdmFpbGFibGUiLDEwNjoiQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBw
cm90b2NvbCBmYW1pbHkiLDEwNzoiUHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0IiwxMDg6
IlNvY2tldCBvcGVyYXRpb24gb24gbm9uLXNvY2tldCIsMTA5OiJQcm90b2NvbCBub3QgYXZhaWxh
YmxlIiwxMTA6IkNhbid0IHNlbmQgYWZ0ZXIgc29ja2V0IHNodXRkb3duIiwxMTE6IkNvbm5lY3Rp
b24gcmVmdXNlZCIsMTEyOiJBZGRyZXNzIGFscmVhZHkgaW4gdXNlIiwxMTM6IkNvbm5lY3Rpb24g
YWJvcnRlZCIsMTE0OiJOZXR3b3JrIGlzIHVucmVhY2hhYmxlIiwxMTU6Ik5ldHdvcmsgaW50ZXJm
YWNlIGlzIG5vdCBjb25maWd1cmVkIiwxMTY6IkNvbm5lY3Rpb24gdGltZWQgb3V0IiwxMTc6Ikhv
c3QgaXMgZG93biIsMTE4OiJIb3N0IGlzIHVucmVhY2hhYmxlIiwxMTk6IkNvbm5lY3Rpb24gYWxy
ZWFkeSBpbiBwcm9ncmVzcyIsMTIwOiJTb2NrZXQgYWxyZWFkeSBjb25uZWN0ZWQiLDEyMToiRGVz
dGluYXRpb24gYWRkcmVzcyByZXF1aXJlZCIsMTIyOiJNZXNzYWdlIHRvbyBsb25nIiwxMjM6IlVu
a25vd24gcHJvdG9jb2wiLDEyNDoiU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZCIsMTI1OiJBZGRy
ZXNzIG5vdCBhdmFpbGFibGUiLDEyNjoiQ29ubmVjdGlvbiByZXNldCBieSBuZXR3b3JrIiwxMjc6
IlNvY2tldCBpcyBhbHJlYWR5IGNvbm5lY3RlZCIsMTI4OiJTb2NrZXQgaXMgbm90IGNvbm5lY3Rl
ZCIsMTI5OiJUb28gbWFueSByZWZlcmVuY2VzIiwxMzE6IlRvbyBtYW55IHVzZXJzIiwxMzI6IlF1
b3RhIGV4Y2VlZGVkIiwxMzM6IlN0YWxlIGZpbGUgaGFuZGxlIiwxMzQ6Ik5vdCBzdXBwb3J0ZWQi
LDEzNToiTm8gbWVkaXVtIChpbiB0YXBlIGRyaXZlKSIsMTM4OiJJbGxlZ2FsIGJ5dGUgc2VxdWVu
Y2UiLDEzOToiVmFsdWUgdG9vIGxhcmdlIGZvciBkZWZpbmVkIGRhdGEgdHlwZSIsMTQwOiJPcGVy
YXRpb24gY2FuY2VsZWQiLDE0MToiU3RhdGUgbm90IHJlY292ZXJhYmxlIiwxNDI6IlByZXZpb3Vz
IG93bmVyIGRpZWQiLDE0MzoiU3RyZWFtcyBwaXBlIGVycm9yIn07CiAgdmFyIF9fX2Vycm5vX3N0
YXRlPTA7ZnVuY3Rpb24gX19fc2V0RXJyTm8odmFsdWUpIHsKICAgICAgLy8gRm9yIGNvbnZlbmll
bnQgc2V0dGluZyBhbmQgcmV0dXJuaW5nIG9mIGVycm5vLgogICAgICBIRUFQMzJbKChfX19lcnJu
b19zdGF0ZSk+PjIpXT12YWx1ZQogICAgICByZXR1cm4gdmFsdWU7CiAgICB9CiAgdmFyIFZGUz11
bmRlZmluZWQ7CiAgdmFyIFBBVEg9e3NwbGl0UGF0aDpmdW5jdGlvbiAoZmlsZW5hbWUpIHsKICAg
ICAgICB2YXIgc3BsaXRQYXRoUmUgPSAvXihcLz98KShbXHNcU10qPykoKD86XC57MSwyfXxbXlwv
XSs/fCkoXC5bXi5cL10qfCkpKD86W1wvXSopJC87CiAgICAgICAgcmV0dXJuIHNwbGl0UGF0aFJl
LmV4ZWMoZmlsZW5hbWUpLnNsaWNlKDEpOwogICAgICB9LG5vcm1hbGl6ZUFycmF5OmZ1bmN0aW9u
IChwYXJ0cywgYWxsb3dBYm92ZVJvb3QpIHsKICAgICAgICAvLyBpZiB0aGUgcGF0aCB0cmllcyB0
byBnbyBhYm92ZSB0aGUgcm9vdCwgYHVwYCBlbmRzIHVwID4gMAogICAgICAgIHZhciB1cCA9IDA7
CiAgICAgICAgZm9yICh2YXIgaSA9IHBhcnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAg
ICAgICAgICB2YXIgbGFzdCA9IHBhcnRzW2ldOwogICAgICAgICAgaWYgKGxhc3QgPT09ICcuJykg
ewogICAgICAgICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7CiAgICAgICAgICB9IGVsc2UgaWYgKGxh
c3QgPT09ICcuLicpIHsKICAgICAgICAgICAgcGFydHMuc3BsaWNlKGksIDEpOwogICAgICAgICAg
ICB1cCsrOwogICAgICAgICAgfSBlbHNlIGlmICh1cCkgewogICAgICAgICAgICBwYXJ0cy5zcGxp
Y2UoaSwgMSk7CiAgICAgICAgICAgIHVwLS07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAg
IC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUg
bGVhZGluZyAuLnMKICAgICAgICBpZiAoYWxsb3dBYm92ZVJvb3QpIHsKICAgICAgICAgIGZvciAo
OyB1cC0tOyB1cCkgewogICAgICAgICAgICBwYXJ0cy51bnNoaWZ0KCcuLicpOwogICAgICAgICAg
fQogICAgICAgIH0KICAgICAgICByZXR1cm4gcGFydHM7CiAgICAgIH0sbm9ybWFsaXplOmZ1bmN0
aW9uIChwYXRoKSB7CiAgICAgICAgdmFyIGlzQWJzb2x1dGUgPSBwYXRoLmNoYXJBdCgwKSA9PT0g
Jy8nLAogICAgICAgICAgICB0cmFpbGluZ1NsYXNoID0gcGF0aC5zdWJzdHIoLTEpID09PSAnLyc7
CiAgICAgICAgLy8gTm9ybWFsaXplIHRoZSBwYXRoCiAgICAgICAgcGF0aCA9IFBBVEgubm9ybWFs
aXplQXJyYXkocGF0aC5zcGxpdCgnLycpLmZpbHRlcihmdW5jdGlvbihwKSB7CiAgICAgICAgICBy
ZXR1cm4gISFwOwogICAgICAgIH0pLCAhaXNBYnNvbHV0ZSkuam9pbignLycpOwogICAgICAgIGlm
ICghcGF0aCAmJiAhaXNBYnNvbHV0ZSkgewogICAgICAgICAgcGF0aCA9ICcuJzsKICAgICAgICB9
CiAgICAgICAgaWYgKHBhdGggJiYgdHJhaWxpbmdTbGFzaCkgewogICAgICAgICAgcGF0aCArPSAn
Lyc7CiAgICAgICAgfQogICAgICAgIHJldHVybiAoaXNBYnNvbHV0ZSA/ICcvJyA6ICcnKSArIHBh
dGg7CiAgICAgIH0sZGlybmFtZTpmdW5jdGlvbiAocGF0aCkgewogICAgICAgIHZhciByZXN1bHQg
PSBQQVRILnNwbGl0UGF0aChwYXRoKSwKICAgICAgICAgICAgcm9vdCA9IHJlc3VsdFswXSwKICAg
ICAgICAgICAgZGlyID0gcmVzdWx0WzFdOwogICAgICAgIGlmICghcm9vdCAmJiAhZGlyKSB7CiAg
ICAgICAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXIKICAgICAgICAgIHJldHVybiAnLic7CiAg
ICAgICAgfQogICAgICAgIGlmIChkaXIpIHsKICAgICAgICAgIC8vIEl0IGhhcyBhIGRpcm5hbWUs
IHN0cmlwIHRyYWlsaW5nIHNsYXNoCiAgICAgICAgICBkaXIgPSBkaXIuc3Vic3RyKDAsIGRpci5s
ZW5ndGggLSAxKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJvb3QgKyBkaXI7CiAgICAgIH0s
YmFzZW5hbWU6ZnVuY3Rpb24gKHBhdGgsIGV4dCkgewogICAgICAgIC8vIEVNU0NSSVBURU4gcmV0
dXJuICcvJycgZm9yICcvJywgbm90IGFuIGVtcHR5IHN0cmluZwogICAgICAgIGlmIChwYXRoID09
PSAnLycpIHJldHVybiAnLyc7CiAgICAgICAgdmFyIGYgPSBQQVRILnNwbGl0UGF0aChwYXRoKVsy
XTsKICAgICAgICBpZiAoZXh0ICYmIGYuc3Vic3RyKC0xICogZXh0Lmxlbmd0aCkgPT09IGV4dCkg
ewogICAgICAgICAgZiA9IGYuc3Vic3RyKDAsIGYubGVuZ3RoIC0gZXh0Lmxlbmd0aCk7CiAgICAg
ICAgfQogICAgICAgIHJldHVybiBmOwogICAgICB9LGpvaW46ZnVuY3Rpb24gKCkgewogICAgICAg
IHZhciBwYXRocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7CiAg
ICAgICAgcmV0dXJuIFBBVEgubm9ybWFsaXplKHBhdGhzLmZpbHRlcihmdW5jdGlvbihwLCBpbmRl
eCkgewogICAgICAgICAgaWYgKHR5cGVvZiBwICE9PSAnc3RyaW5nJykgewogICAgICAgICAgICB0
aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5n
cycpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHA7CiAgICAgICAgfSkuam9pbignLycp
KTsKICAgICAgfSxyZXNvbHZlOmZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgcmVzb2x2ZWRQYXRo
ID0gJycsCiAgICAgICAgICByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7CiAgICAgICAgZm9yICh2
YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IC0xICYmICFyZXNvbHZlZEFic29sdXRl
OyBpLS0pIHsKICAgICAgICAgIHZhciBwYXRoID0gKGkgPj0gMCkgPyBhcmd1bWVudHNbaV0gOiBG
Uy5jd2QoKTsKICAgICAgICAgIC8vIFNraXAgZW1wdHkgYW5kIGludmFsaWQgZW50cmllcwogICAg
ICAgICAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykgewogICAgICAgICAgICB0aHJvdyBu
ZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncycp
OwogICAgICAgICAgfSBlbHNlIGlmICghcGF0aCkgewogICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgIH0KICAgICAgICAgIHJlc29sdmVkUGF0aCA9IHBhdGggKyAnLycgKyByZXNvbHZlZFBh
dGg7CiAgICAgICAgICByZXNvbHZlZEFic29sdXRlID0gcGF0aC5jaGFyQXQoMCkgPT09ICcvJzsK
ICAgICAgICB9CiAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgcGF0aCBzaG91bGQgYmUgcmVz
b2x2ZWQgdG8gYSBmdWxsIGFic29sdXRlIHBhdGgsIGJ1dAogICAgICAgIC8vIGhhbmRsZSByZWxh
dGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpIGZh
aWxzKQogICAgICAgIHJlc29sdmVkUGF0aCA9IFBBVEgubm9ybWFsaXplQXJyYXkocmVzb2x2ZWRQ
YXRoLnNwbGl0KCcvJykuZmlsdGVyKGZ1bmN0aW9uKHApIHsKICAgICAgICAgIHJldHVybiAhIXA7
CiAgICAgICAgfSksICFyZXNvbHZlZEFic29sdXRlKS5qb2luKCcvJyk7CiAgICAgICAgcmV0dXJu
ICgocmVzb2x2ZWRBYnNvbHV0ZSA/ICcvJyA6ICcnKSArIHJlc29sdmVkUGF0aCkgfHwgJy4nOwog
ICAgICB9LHJlbGF0aXZlOmZ1bmN0aW9uIChmcm9tLCB0bykgewogICAgICAgIGZyb20gPSBQQVRI
LnJlc29sdmUoZnJvbSkuc3Vic3RyKDEpOwogICAgICAgIHRvID0gUEFUSC5yZXNvbHZlKHRvKS5z
dWJzdHIoMSk7CiAgICAgICAgZnVuY3Rpb24gdHJpbShhcnIpIHsKICAgICAgICAgIHZhciBzdGFy
dCA9IDA7CiAgICAgICAgICBmb3IgKDsgc3RhcnQgPCBhcnIubGVuZ3RoOyBzdGFydCsrKSB7CiAg
ICAgICAgICAgIGlmIChhcnJbc3RhcnRdICE9PSAnJykgYnJlYWs7CiAgICAgICAgICB9CiAgICAg
ICAgICB2YXIgZW5kID0gYXJyLmxlbmd0aCAtIDE7CiAgICAgICAgICBmb3IgKDsgZW5kID49IDA7
IGVuZC0tKSB7CiAgICAgICAgICAgIGlmIChhcnJbZW5kXSAhPT0gJycpIGJyZWFrOwogICAgICAg
ICAgfQogICAgICAgICAgaWYgKHN0YXJ0ID4gZW5kKSByZXR1cm4gW107CiAgICAgICAgICByZXR1
cm4gYXJyLnNsaWNlKHN0YXJ0LCBlbmQgLSBzdGFydCArIDEpOwogICAgICAgIH0KICAgICAgICB2
YXIgZnJvbVBhcnRzID0gdHJpbShmcm9tLnNwbGl0KCcvJykpOwogICAgICAgIHZhciB0b1BhcnRz
ID0gdHJpbSh0by5zcGxpdCgnLycpKTsKICAgICAgICB2YXIgbGVuZ3RoID0gTWF0aC5taW4oZnJv
bVBhcnRzLmxlbmd0aCwgdG9QYXJ0cy5sZW5ndGgpOwogICAgICAgIHZhciBzYW1lUGFydHNMZW5n
dGggPSBsZW5ndGg7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewog
ICAgICAgICAgaWYgKGZyb21QYXJ0c1tpXSAhPT0gdG9QYXJ0c1tpXSkgewogICAgICAgICAgICBz
YW1lUGFydHNMZW5ndGggPSBpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAg
ICB9CiAgICAgICAgdmFyIG91dHB1dFBhcnRzID0gW107CiAgICAgICAgZm9yICh2YXIgaSA9IHNh
bWVQYXJ0c0xlbmd0aDsgaSA8IGZyb21QYXJ0cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgb3V0
cHV0UGFydHMucHVzaCgnLi4nKTsKICAgICAgICB9CiAgICAgICAgb3V0cHV0UGFydHMgPSBvdXRw
dXRQYXJ0cy5jb25jYXQodG9QYXJ0cy5zbGljZShzYW1lUGFydHNMZW5ndGgpKTsKICAgICAgICBy
ZXR1cm4gb3V0cHV0UGFydHMuam9pbignLycpOwogICAgICB9fTsKICB2YXIgVFRZPXt0dHlzOltd
LHJlZ2lzdGVyOmZ1bmN0aW9uIChkZXYsIG9wcykgewogICAgICAgIFRUWS50dHlzW2Rldl0gPSB7
IGlucHV0OiBbXSwgb3V0cHV0OiBbXSwgb3BzOiBvcHMgfTsKICAgICAgICBGUy5yZWdpc3RlckRl
dmljZShkZXYsIFRUWS5zdHJlYW1fb3BzKTsKICAgICAgfSxzdHJlYW1fb3BzOntvcGVuOmZ1bmN0
aW9uIChzdHJlYW0pIHsKICAgICAgICAgIC8vIHRoaXMgd291bGRuJ3QgYmUgcmVxdWlyZWQgaWYg
dGhlIGxpYnJhcnkgd2Fzbid0IGV2YWwnZCBhdCBmaXJzdC4uLgogICAgICAgICAgaWYgKCFUVFku
dXRmOCkgewogICAgICAgICAgICBUVFkudXRmOCA9IG5ldyBSdW50aW1lLlVURjhQcm9jZXNzb3Io
KTsKICAgICAgICAgIH0KICAgICAgICAgIHZhciB0dHkgPSBUVFkudHR5c1tzdHJlYW0ubm9kZS5y
ZGV2XTsKICAgICAgICAgIGlmICghdHR5KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJu
b0Vycm9yKEVSUk5PX0NPREVTLkVOT0RFVik7CiAgICAgICAgICB9CiAgICAgICAgICBzdHJlYW0u
dHR5ID0gdHR5OwogICAgICAgICAgc3RyZWFtLnNlZWthYmxlID0gZmFsc2U7CiAgICAgICAgfSxj
bG9zZTpmdW5jdGlvbiAoc3RyZWFtKSB7CiAgICAgICAgICAvLyBmbHVzaCBhbnkgcGVuZGluZyBs
aW5lIGRhdGEKICAgICAgICAgIGlmIChzdHJlYW0udHR5Lm91dHB1dC5sZW5ndGgpIHsKICAgICAg
ICAgICAgc3RyZWFtLnR0eS5vcHMucHV0X2NoYXIoc3RyZWFtLnR0eSwgMTApOwogICAgICAgICAg
fQogICAgICAgIH0scmVhZDpmdW5jdGlvbiAoc3RyZWFtLCBidWZmZXIsIG9mZnNldCwgbGVuZ3Ro
LCBwb3MgLyogaWdub3JlZCAqLykgewogICAgICAgICAgaWYgKCFzdHJlYW0udHR5IHx8ICFzdHJl
YW0udHR5Lm9wcy5nZXRfY2hhcikgewogICAgICAgICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJv
cihFUlJOT19DT0RFUy5FTlhJTyk7CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgYnl0ZXNSZWFk
ID0gMDsKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAg
ICAgICAgdmFyIHJlc3VsdDsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICByZXN1bHQg
PSBzdHJlYW0udHR5Lm9wcy5nZXRfY2hhcihzdHJlYW0udHR5KTsKICAgICAgICAgICAgfSBjYXRj
aCAoZSkgewogICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVT
LkVJTyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVk
ICYmIGJ5dGVzUmVhZCA9PT0gMCkgewogICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vy
cm9yKEVSUk5PX0NPREVTLkVBR0FJTik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHJl
c3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHVuZGVmaW5lZCkgYnJlYWs7CiAgICAgICAgICAg
IGJ5dGVzUmVhZCsrOwogICAgICAgICAgICBidWZmZXJbb2Zmc2V0K2ldID0gcmVzdWx0OwogICAg
ICAgICAgfQogICAgICAgICAgaWYgKGJ5dGVzUmVhZCkgewogICAgICAgICAgICBzdHJlYW0ubm9k
ZS50aW1lc3RhbXAgPSBEYXRlLm5vdygpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGJ5
dGVzUmVhZDsKICAgICAgICB9LHdyaXRlOmZ1bmN0aW9uIChzdHJlYW0sIGJ1ZmZlciwgb2Zmc2V0
LCBsZW5ndGgsIHBvcykgewogICAgICAgICAgaWYgKCFzdHJlYW0udHR5IHx8ICFzdHJlYW0udHR5
Lm9wcy5wdXRfY2hhcikgewogICAgICAgICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJO
T19DT0RFUy5FTlhJTyk7CiAgICAgICAgICB9CiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgc3RyZWFtLnR0
eS5vcHMucHV0X2NoYXIoc3RyZWFtLnR0eSwgYnVmZmVyW29mZnNldCtpXSk7CiAgICAgICAgICAg
IH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJO
T19DT0RFUy5FSU8pOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAobGVu
Z3RoKSB7CiAgICAgICAgICAgIHN0cmVhbS5ub2RlLnRpbWVzdGFtcCA9IERhdGUubm93KCk7CiAg
ICAgICAgICB9CiAgICAgICAgICByZXR1cm4gaTsKICAgICAgICB9fSxkZWZhdWx0X3R0eV9vcHM6
e2dldF9jaGFyOmZ1bmN0aW9uICh0dHkpIHsKICAgICAgICAgIGlmICghdHR5LmlucHV0Lmxlbmd0
aCkgewogICAgICAgICAgICB2YXIgcmVzdWx0ID0gbnVsbDsKICAgICAgICAgICAgaWYgKEVOVklS
T05NRU5UX0lTX05PREUpIHsKICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5zdGRpbi5kZXN0cm95
ZWQpIHsKICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgIHJlc3VsdCA9IHByb2Nlc3Muc3RkaW4ucmVhZCgpOwogICAgICAgICAgICB9
IGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYKICAgICAgICAgICAgICB0
eXBlb2Ygd2luZG93LnByb21wdCA9PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgICAgICAgLy8gQnJv
d3Nlci4KICAgICAgICAgICAgICByZXN1bHQgPSB3aW5kb3cucHJvbXB0KCdJbnB1dDogJyk7ICAv
LyByZXR1cm5zIG51bGwgb24gY2FuY2VsCiAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gbnVs
bCkgewogICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdcbic7CiAgICAgICAgICAgICAgfQogICAg
ICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiByZWFkbGluZSA9PSAnZnVuY3Rpb24nKSB7CiAgICAg
ICAgICAgICAgLy8gQ29tbWFuZCBsaW5lLgogICAgICAgICAgICAgIHJlc3VsdCA9IHJlYWRsaW5l
KCk7CiAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAg
cmVzdWx0ICs9ICdcbic7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAg
IGlmICghcmVzdWx0KSB7CiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0K
ICAgICAgICAgICAgdHR5LmlucHV0ID0gaW50QXJyYXlGcm9tU3RyaW5nKHJlc3VsdCwgdHJ1ZSk7
CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdHR5LmlucHV0LnNoaWZ0KCk7CiAgICAgICAg
fSxwdXRfY2hhcjpmdW5jdGlvbiAodHR5LCB2YWwpIHsKICAgICAgICAgIGlmICh2YWwgPT09IG51
bGwgfHwgdmFsID09PSAxMCkgewogICAgICAgICAgICBNb2R1bGVbJ3ByaW50J10odHR5Lm91dHB1
dC5qb2luKCcnKSk7CiAgICAgICAgICAgIHR0eS5vdXRwdXQgPSBbXTsKICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgIHR0eS5vdXRwdXQucHVzaChUVFkudXRmOC5wcm9jZXNzQ0NoYXIodmFs
KSk7CiAgICAgICAgICB9CiAgICAgICAgfX0sZGVmYXVsdF90dHkxX29wczp7cHV0X2NoYXI6ZnVu
Y3Rpb24gKHR0eSwgdmFsKSB7CiAgICAgICAgICBpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0g
MTApIHsKICAgICAgICAgICAgTW9kdWxlWydwcmludEVyciddKHR0eS5vdXRwdXQuam9pbignJykp
OwogICAgICAgICAgICB0dHkub3V0cHV0ID0gW107CiAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICB0dHkub3V0cHV0LnB1c2goVFRZLnV0ZjgucHJvY2Vzc0NDaGFyKHZhbCkpOwogICAgICAg
ICAgfQogICAgICAgIH19fTsKICB2YXIgTUVNRlM9e21vdW50OmZ1bmN0aW9uIChtb3VudCkgewog
ICAgICAgIHJldHVybiBNRU1GUy5jcmVhdGVfbm9kZShudWxsLCAnLycsIDAwNDAwMDAgfCAwNzc3
LCAwKTsKICAgICAgfSxjcmVhdGVfbm9kZTpmdW5jdGlvbiAocGFyZW50LCBuYW1lLCBtb2RlLCBk
ZXYpIHsKICAgICAgICBpZiAoRlMuaXNCbGtkZXYobW9kZSkgfHwgRlMuaXNGSUZPKG1vZGUpKSB7
CiAgICAgICAgICAvLyBubyBzdXBwb3J0ZWQKICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vy
cm9yKEVSUk5PX0NPREVTLkVQRVJNKTsKICAgICAgICB9CiAgICAgICAgdmFyIG5vZGUgPSBGUy5j
cmVhdGVOb2RlKHBhcmVudCwgbmFtZSwgbW9kZSwgZGV2KTsKICAgICAgICBpZiAoRlMuaXNEaXIo
bm9kZS5tb2RlKSkgewogICAgICAgICAgbm9kZS5ub2RlX29wcyA9IHsKICAgICAgICAgICAgZ2V0
YXR0cjogTUVNRlMubm9kZV9vcHMuZ2V0YXR0ciwKICAgICAgICAgICAgc2V0YXR0cjogTUVNRlMu
bm9kZV9vcHMuc2V0YXR0ciwKICAgICAgICAgICAgbG9va3VwOiBNRU1GUy5ub2RlX29wcy5sb29r
dXAsCiAgICAgICAgICAgIG1rbm9kOiBNRU1GUy5ub2RlX29wcy5ta25vZCwKICAgICAgICAgICAg
bWtub2Q6IE1FTUZTLm5vZGVfb3BzLm1rbm9kLAogICAgICAgICAgICByZW5hbWU6IE1FTUZTLm5v
ZGVfb3BzLnJlbmFtZSwKICAgICAgICAgICAgdW5saW5rOiBNRU1GUy5ub2RlX29wcy51bmxpbmss
CiAgICAgICAgICAgIHJtZGlyOiBNRU1GUy5ub2RlX29wcy5ybWRpciwKICAgICAgICAgICAgcmVh
ZGRpcjogTUVNRlMubm9kZV9vcHMucmVhZGRpciwKICAgICAgICAgICAgc3ltbGluazogTUVNRlMu
bm9kZV9vcHMuc3ltbGluawogICAgICAgICAgfTsKICAgICAgICAgIG5vZGUuc3RyZWFtX29wcyA9
IHsKICAgICAgICAgICAgbGxzZWVrOiBNRU1GUy5zdHJlYW1fb3BzLmxsc2VlawogICAgICAgICAg
fTsKICAgICAgICAgIG5vZGUuY29udGVudHMgPSB7fTsKICAgICAgICB9IGVsc2UgaWYgKEZTLmlz
RmlsZShub2RlLm1vZGUpKSB7CiAgICAgICAgICBub2RlLm5vZGVfb3BzID0gewogICAgICAgICAg
ICBnZXRhdHRyOiBNRU1GUy5ub2RlX29wcy5nZXRhdHRyLAogICAgICAgICAgICBzZXRhdHRyOiBN
RU1GUy5ub2RlX29wcy5zZXRhdHRyCiAgICAgICAgICB9OwogICAgICAgICAgbm9kZS5zdHJlYW1f
b3BzID0gewogICAgICAgICAgICBsbHNlZWs6IE1FTUZTLnN0cmVhbV9vcHMubGxzZWVrLAogICAg
ICAgICAgICByZWFkOiBNRU1GUy5zdHJlYW1fb3BzLnJlYWQsCiAgICAgICAgICAgIHdyaXRlOiBN
RU1GUy5zdHJlYW1fb3BzLndyaXRlLAogICAgICAgICAgICBhbGxvY2F0ZTogTUVNRlMuc3RyZWFt
X29wcy5hbGxvY2F0ZSwKICAgICAgICAgICAgbW1hcDogTUVNRlMuc3RyZWFtX29wcy5tbWFwCiAg
ICAgICAgICB9OwogICAgICAgICAgbm9kZS5jb250ZW50cyA9IFtdOwogICAgICAgIH0gZWxzZSBp
ZiAoRlMuaXNMaW5rKG5vZGUubW9kZSkpIHsKICAgICAgICAgIG5vZGUubm9kZV9vcHMgPSB7CiAg
ICAgICAgICAgIGdldGF0dHI6IE1FTUZTLm5vZGVfb3BzLmdldGF0dHIsCiAgICAgICAgICAgIHNl
dGF0dHI6IE1FTUZTLm5vZGVfb3BzLnNldGF0dHIsCiAgICAgICAgICAgIHJlYWRsaW5rOiBNRU1G
Uy5ub2RlX29wcy5yZWFkbGluawogICAgICAgICAgfTsKICAgICAgICAgIG5vZGUuc3RyZWFtX29w
cyA9IHt9OwogICAgICAgIH0gZWxzZSBpZiAoRlMuaXNDaHJkZXYobm9kZS5tb2RlKSkgewogICAg
ICAgICAgbm9kZS5ub2RlX29wcyA9IHsKICAgICAgICAgICAgZ2V0YXR0cjogTUVNRlMubm9kZV9v
cHMuZ2V0YXR0ciwKICAgICAgICAgICAgc2V0YXR0cjogTUVNRlMubm9kZV9vcHMuc2V0YXR0cgog
ICAgICAgICAgfTsKICAgICAgICAgIG5vZGUuc3RyZWFtX29wcyA9IEZTLmNocmRldl9zdHJlYW1f
b3BzOwogICAgICAgIH0KICAgICAgICBub2RlLnRpbWVzdGFtcCA9IERhdGUubm93KCk7CiAgICAg
ICAgLy8gYWRkIHRoZSBuZXcgbm9kZSB0byB0aGUgcGFyZW50CiAgICAgICAgaWYgKHBhcmVudCkg
ewogICAgICAgICAgcGFyZW50LmNvbnRlbnRzW25hbWVdID0gbm9kZTsKICAgICAgICB9CiAgICAg
ICAgcmV0dXJuIG5vZGU7CiAgICAgIH0sbm9kZV9vcHM6e2dldGF0dHI6ZnVuY3Rpb24gKG5vZGUp
IHsKICAgICAgICAgIHZhciBhdHRyID0ge307CiAgICAgICAgICAvLyBkZXZpY2UgbnVtYmVycyBy
ZXVzZSBpbm9kZSBudW1iZXJzLgogICAgICAgICAgYXR0ci5kZXYgPSBGUy5pc0NocmRldihub2Rl
Lm1vZGUpID8gbm9kZS5pZCA6IDE7CiAgICAgICAgICBhdHRyLmlubyA9IG5vZGUuaWQ7CiAgICAg
ICAgICBhdHRyLm1vZGUgPSBub2RlLm1vZGU7CiAgICAgICAgICBhdHRyLm5saW5rID0gMTsKICAg
ICAgICAgIGF0dHIudWlkID0gMDsKICAgICAgICAgIGF0dHIuZ2lkID0gMDsKICAgICAgICAgIGF0
dHIucmRldiA9IG5vZGUucmRldjsKICAgICAgICAgIGlmIChGUy5pc0Rpcihub2RlLm1vZGUpKSB7
CiAgICAgICAgICAgIGF0dHIuc2l6ZSA9IDQwOTY7CiAgICAgICAgICB9IGVsc2UgaWYgKEZTLmlz
RmlsZShub2RlLm1vZGUpKSB7CiAgICAgICAgICAgIGF0dHIuc2l6ZSA9IG5vZGUuY29udGVudHMu
bGVuZ3RoOwogICAgICAgICAgfSBlbHNlIGlmIChGUy5pc0xpbmsobm9kZS5tb2RlKSkgewogICAg
ICAgICAgICBhdHRyLnNpemUgPSBub2RlLmxpbmsubGVuZ3RoOwogICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgYXR0ci5zaXplID0gMDsKICAgICAgICAgIH0KICAgICAgICAgIGF0dHIuYXRp
bWUgPSBuZXcgRGF0ZShub2RlLnRpbWVzdGFtcCk7CiAgICAgICAgICBhdHRyLm10aW1lID0gbmV3
IERhdGUobm9kZS50aW1lc3RhbXApOwogICAgICAgICAgYXR0ci5jdGltZSA9IG5ldyBEYXRlKG5v
ZGUudGltZXN0YW1wKTsKICAgICAgICAgIC8vIE5PVEU6IEluIG91ciBpbXBsZW1lbnRhdGlvbiwg
c3RfYmxvY2tzID0gTWF0aC5jZWlsKHN0X3NpemUvc3RfYmxrc2l6ZSksCiAgICAgICAgICAvLyAg
ICAgICBidXQgdGhpcyBpcyBub3QgcmVxdWlyZWQgYnkgdGhlIHN0YW5kYXJkLgogICAgICAgICAg
YXR0ci5ibGtzaXplID0gNDA5NjsKICAgICAgICAgIGF0dHIuYmxvY2tzID0gTWF0aC5jZWlsKGF0
dHIuc2l6ZSAvIGF0dHIuYmxrc2l6ZSk7CiAgICAgICAgICByZXR1cm4gYXR0cjsKICAgICAgICB9
LHNldGF0dHI6ZnVuY3Rpb24gKG5vZGUsIGF0dHIpIHsKICAgICAgICAgIGlmIChhdHRyLm1vZGUg
IT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICBub2RlLm1vZGUgPSBhdHRyLm1vZGU7CiAgICAg
ICAgICB9CiAgICAgICAgICBpZiAoYXR0ci50aW1lc3RhbXAgIT09IHVuZGVmaW5lZCkgewogICAg
ICAgICAgICBub2RlLnRpbWVzdGFtcCA9IGF0dHIudGltZXN0YW1wOwogICAgICAgICAgfQogICAg
ICAgICAgaWYgKGF0dHIuc2l6ZSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIHZhciBjb250
ZW50cyA9IG5vZGUuY29udGVudHM7CiAgICAgICAgICAgIGlmIChhdHRyLnNpemUgPCBjb250ZW50
cy5sZW5ndGgpIGNvbnRlbnRzLmxlbmd0aCA9IGF0dHIuc2l6ZTsKICAgICAgICAgICAgZWxzZSB3
aGlsZSAoYXR0ci5zaXplID4gY29udGVudHMubGVuZ3RoKSBjb250ZW50cy5wdXNoKDApOwogICAg
ICAgICAgfQogICAgICAgIH0sbG9va3VwOmZ1bmN0aW9uIChwYXJlbnQsIG5hbWUpIHsKICAgICAg
ICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVOT0VOVCk7CiAgICAgICAg
fSxta25vZDpmdW5jdGlvbiAocGFyZW50LCBuYW1lLCBtb2RlLCBkZXYpIHsKICAgICAgICAgIHJl
dHVybiBNRU1GUy5jcmVhdGVfbm9kZShwYXJlbnQsIG5hbWUsIG1vZGUsIGRldik7CiAgICAgICAg
fSxyZW5hbWU6ZnVuY3Rpb24gKG9sZF9ub2RlLCBuZXdfZGlyLCBuZXdfbmFtZSkgewogICAgICAg
ICAgLy8gaWYgd2UncmUgb3ZlcndyaXRpbmcgYSBkaXJlY3RvcnkgYXQgbmV3X25hbWUsIG1ha2Ug
c3VyZSBpdCdzIGVtcHR5LgogICAgICAgICAgaWYgKEZTLmlzRGlyKG9sZF9ub2RlLm1vZGUpKSB7
CiAgICAgICAgICAgIHZhciBuZXdfbm9kZTsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAg
ICBuZXdfbm9kZSA9IEZTLmxvb2t1cE5vZGUobmV3X2RpciwgbmV3X25hbWUpOwogICAgICAgICAg
ICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKG5ld19ub2RlKSB7
CiAgICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBuZXdfbm9kZS5jb250ZW50cykgewogICAgICAg
ICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRU5PVEVNUFRZKTsK
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIC8vIGRv
IHRoZSBpbnRlcm5hbCByZXdpcmluZwogICAgICAgICAgZGVsZXRlIG9sZF9ub2RlLnBhcmVudC5j
b250ZW50c1tvbGRfbm9kZS5uYW1lXTsKICAgICAgICAgIG9sZF9ub2RlLm5hbWUgPSBuZXdfbmFt
ZTsKICAgICAgICAgIG5ld19kaXIuY29udGVudHNbbmV3X25hbWVdID0gb2xkX25vZGU7CiAgICAg
ICAgfSx1bmxpbms6ZnVuY3Rpb24gKHBhcmVudCwgbmFtZSkgewogICAgICAgICAgZGVsZXRlIHBh
cmVudC5jb250ZW50c1tuYW1lXTsKICAgICAgICB9LHJtZGlyOmZ1bmN0aW9uIChwYXJlbnQsIG5h
bWUpIHsKICAgICAgICAgIHZhciBub2RlID0gRlMubG9va3VwTm9kZShwYXJlbnQsIG5hbWUpOwog
ICAgICAgICAgZm9yICh2YXIgaSBpbiBub2RlLmNvbnRlbnRzKSB7CiAgICAgICAgICAgIHRocm93
IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVOT1RFTVBUWSk7CiAgICAgICAgICB9CiAg
ICAgICAgICBkZWxldGUgcGFyZW50LmNvbnRlbnRzW25hbWVdOwogICAgICAgIH0scmVhZGRpcjpm
dW5jdGlvbiAobm9kZSkgewogICAgICAgICAgdmFyIGVudHJpZXMgPSBbJy4nLCAnLi4nXQogICAg
ICAgICAgZm9yICh2YXIga2V5IGluIG5vZGUuY29udGVudHMpIHsKICAgICAgICAgICAgaWYgKCFu
b2RlLmNvbnRlbnRzLmhhc093blByb3BlcnR5KGtleSkpIHsKICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbnRyaWVzLnB1c2goa2V5KTsKICAgICAgICAg
IH0KICAgICAgICAgIHJldHVybiBlbnRyaWVzOwogICAgICAgIH0sc3ltbGluazpmdW5jdGlvbiAo
cGFyZW50LCBuZXduYW1lLCBvbGRwYXRoKSB7CiAgICAgICAgICB2YXIgbm9kZSA9IE1FTUZTLmNy
ZWF0ZV9ub2RlKHBhcmVudCwgbmV3bmFtZSwgMDc3NyB8IDAxMjAwMDAsIDApOwogICAgICAgICAg
bm9kZS5saW5rID0gb2xkcGF0aDsKICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgIH0scmVh
ZGxpbms6ZnVuY3Rpb24gKG5vZGUpIHsKICAgICAgICAgIGlmICghRlMuaXNMaW5rKG5vZGUubW9k
ZSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUlO
VkFMKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBub2RlLmxpbms7CiAgICAgICAgfX0s
c3RyZWFtX29wczp7cmVhZDpmdW5jdGlvbiAoc3RyZWFtLCBidWZmZXIsIG9mZnNldCwgbGVuZ3Ro
LCBwb3NpdGlvbikgewogICAgICAgICAgdmFyIGNvbnRlbnRzID0gc3RyZWFtLm5vZGUuY29udGVu
dHM7CiAgICAgICAgICB2YXIgc2l6ZSA9IE1hdGgubWluKGNvbnRlbnRzLmxlbmd0aCAtIHBvc2l0
aW9uLCBsZW5ndGgpOwogICAgICAgICAgaWYgKGNvbnRlbnRzLnN1YmFycmF5KSB7IC8vIHR5cGVk
IGFycmF5CiAgICAgICAgICAgIGJ1ZmZlci5zZXQoY29udGVudHMuc3ViYXJyYXkocG9zaXRpb24s
IHBvc2l0aW9uICsgc2l6ZSksIG9mZnNldCk7CiAgICAgICAgICB9IGVsc2UKICAgICAgICAgIHsK
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKICAgICAgICAgICAg
ICBidWZmZXJbb2Zmc2V0ICsgaV0gPSBjb250ZW50c1twb3NpdGlvbiArIGldOwogICAgICAgICAg
ICB9CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gc2l6ZTsKICAgICAgICB9LHdyaXRlOmZ1
bmN0aW9uIChzdHJlYW0sIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uKSB7CiAgICAg
ICAgICB2YXIgY29udGVudHMgPSBzdHJlYW0ubm9kZS5jb250ZW50czsKICAgICAgICAgIHdoaWxl
IChjb250ZW50cy5sZW5ndGggPCBwb3NpdGlvbikgY29udGVudHMucHVzaCgwKTsKICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgY29udGVudHNb
cG9zaXRpb24gKyBpXSA9IGJ1ZmZlcltvZmZzZXQgKyBpXTsKICAgICAgICAgIH0KICAgICAgICAg
IHN0cmVhbS5ub2RlLnRpbWVzdGFtcCA9IERhdGUubm93KCk7CiAgICAgICAgICByZXR1cm4gbGVu
Z3RoOwogICAgICAgIH0sbGxzZWVrOmZ1bmN0aW9uIChzdHJlYW0sIG9mZnNldCwgd2hlbmNlKSB7
CiAgICAgICAgICB2YXIgcG9zaXRpb24gPSBvZmZzZXQ7CiAgICAgICAgICBpZiAod2hlbmNlID09
PSAxKSB7ICAvLyBTRUVLX0NVUi4KICAgICAgICAgICAgcG9zaXRpb24gKz0gc3RyZWFtLnBvc2l0
aW9uOwogICAgICAgICAgfSBlbHNlIGlmICh3aGVuY2UgPT09IDIpIHsgIC8vIFNFRUtfRU5ELgog
ICAgICAgICAgICBpZiAoRlMuaXNGaWxlKHN0cmVhbS5ub2RlLm1vZGUpKSB7CiAgICAgICAgICAg
ICAgcG9zaXRpb24gKz0gc3RyZWFtLm5vZGUuY29udGVudHMubGVuZ3RoOwogICAgICAgICAgICB9
CiAgICAgICAgICB9CiAgICAgICAgICBpZiAocG9zaXRpb24gPCAwKSB7CiAgICAgICAgICAgIHRo
cm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVJTlZBTCk7CiAgICAgICAgICB9CiAg
ICAgICAgICBzdHJlYW0udW5nb3R0ZW4gPSBbXTsKICAgICAgICAgIHN0cmVhbS5wb3NpdGlvbiA9
IHBvc2l0aW9uOwogICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOwogICAgICAgIH0sYWxsb2NhdGU6
ZnVuY3Rpb24gKHN0cmVhbSwgb2Zmc2V0LCBsZW5ndGgpIHsKICAgICAgICAgIHZhciBjb250ZW50
cyA9IHN0cmVhbS5ub2RlLmNvbnRlbnRzOwogICAgICAgICAgdmFyIGxpbWl0ID0gb2Zmc2V0ICsg
bGVuZ3RoOwogICAgICAgICAgd2hpbGUgKGxpbWl0ID4gY29udGVudHMubGVuZ3RoKSBjb250ZW50
cy5wdXNoKDApOwogICAgICAgIH0sbW1hcDpmdW5jdGlvbiAoc3RyZWFtLCBidWZmZXIsIG9mZnNl
dCwgbGVuZ3RoLCBwb3NpdGlvbiwgcHJvdCwgZmxhZ3MpIHsKICAgICAgICAgIGlmICghRlMuaXNG
aWxlKHN0cmVhbS5ub2RlLm1vZGUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vy
cm9yKEVSUk5PX0NPREVTLkVOT0RFVik7CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgcHRyOwog
ICAgICAgICAgdmFyIGFsbG9jYXRlZDsKICAgICAgICAgIHZhciBjb250ZW50cyA9IHN0cmVhbS5u
b2RlLmNvbnRlbnRzOwogICAgICAgICAgLy8gT25seSBtYWtlIGEgbmV3IGNvcHkgd2hlbiBNQVBf
UFJJVkFURSBpcyBzcGVjaWZpZWQuCiAgICAgICAgICBpZiAoIShmbGFncyAmIDB4MDIpKSB7CiAg
ICAgICAgICAgIC8vIFdlIGNhbid0IGVtdWxhdGUgTUFQX1NIQVJFRCB3aGVuIHRoZSBmaWxlIGlz
IG5vdCBiYWNrZWQgYnkgdGhlIGJ1ZmZlcgogICAgICAgICAgICAvLyB3ZSdyZSBtYXBwaW5nIHRv
IChlLmcuIHRoZSBIRUFQIGJ1ZmZlcikuCiAgICAgICAgICAgIGFzc2VydChjb250ZW50cy5idWZm
ZXIgPT09IGJ1ZmZlciB8fCBjb250ZW50cy5idWZmZXIgPT09IGJ1ZmZlci5idWZmZXIpOwogICAg
ICAgICAgICBhbGxvY2F0ZWQgPSBmYWxzZTsKICAgICAgICAgICAgcHRyID0gY29udGVudHMuYnl0
ZU9mZnNldDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIFRyeSB0byBhdm9pZCB1
bm5lY2Vzc2FyeSBzbGljZXMuCiAgICAgICAgICAgIGlmIChwb3NpdGlvbiA+IDAgfHwgcG9zaXRp
b24gKyBsZW5ndGggPCBjb250ZW50cy5sZW5ndGgpIHsKICAgICAgICAgICAgICBpZiAoY29udGVu
dHMuc3ViYXJyYXkpIHsKICAgICAgICAgICAgICAgIGNvbnRlbnRzID0gY29udGVudHMuc3ViYXJy
YXkocG9zaXRpb24sIHBvc2l0aW9uICsgbGVuZ3RoKTsKICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgY29udGVudHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChjb250
ZW50cywgcG9zaXRpb24sIHBvc2l0aW9uICsgbGVuZ3RoKTsKICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgIH0KICAgICAgICAgICAgYWxsb2NhdGVkID0gdHJ1ZTsKICAgICAgICAgICAgcHRyID0g
X21hbGxvYyhsZW5ndGgpOwogICAgICAgICAgICBpZiAoIXB0cikgewogICAgICAgICAgICAgIHRo
cm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVOT01FTSk7CiAgICAgICAgICAgIH0K
ICAgICAgICAgICAgYnVmZmVyLnNldChjb250ZW50cywgcHRyKTsKICAgICAgICAgIH0KICAgICAg
ICAgIHJldHVybiB7IHB0cjogcHRyLCBhbGxvY2F0ZWQ6IGFsbG9jYXRlZCB9OwogICAgICAgIH19
fTsKICB2YXIgX3N0ZGluPWFsbG9jYXRlKDEsICJpMzIqIiwgQUxMT0NfU1RBVElDKTsKICB2YXIg
X3N0ZG91dD1hbGxvY2F0ZSgxLCAiaTMyKiIsIEFMTE9DX1NUQVRJQyk7CiAgdmFyIF9zdGRlcnI9
YWxsb2NhdGUoMSwgImkzMioiLCBBTExPQ19TVEFUSUMpOwogIGZ1bmN0aW9uIF9mZmx1c2goc3Ry
ZWFtKSB7CiAgICAgIC8vIGludCBmZmx1c2goRklMRSAqc3RyZWFtKTsKICAgICAgLy8gaHR0cDov
L3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwMDA5NTM5OS9mdW5jdGlvbnMvZmZsdXNo
Lmh0bWwKICAgICAgLy8gd2UgZG9uJ3QgY3VycmVudGx5IHBlcmZvcm0gYW55IHVzZXItc3BhY2Ug
YnVmZmVyaW5nIG9mIGRhdGEKICAgIH12YXIgRlM9e3Jvb3Q6bnVsbCxub2RlczpbbnVsbF0sZGV2
aWNlczpbbnVsbF0sc3RyZWFtczpbbnVsbF0sbmV4dElub2RlOjEsbmFtZV90YWJsZTpudWxsLGN1
cnJlbnRQYXRoOiIvIixpbml0aWFsaXplZDpmYWxzZSxpZ25vcmVQZXJtaXNzaW9uczp0cnVlLEVy
cm5vRXJyb3I6ZnVuY3Rpb24gRXJybm9FcnJvcihlcnJubykgewogICAgICAgICAgdGhpcy5lcnJu
byA9IGVycm5vOwogICAgICAgICAgZm9yICh2YXIga2V5IGluIEVSUk5PX0NPREVTKSB7CiAgICAg
ICAgICAgIGlmIChFUlJOT19DT0RFU1trZXldID09PSBlcnJubykgewogICAgICAgICAgICAgIHRo
aXMuY29kZSA9IGtleTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAg
ICAgfQogICAgICAgICAgdGhpcy5tZXNzYWdlID0gRVJSTk9fTUVTU0FHRVNbZXJybm9dOwogICAg
ICAgIH0saGFuZGxlRlNFcnJvcjpmdW5jdGlvbiAoZSkgewogICAgICAgIGlmICghKGUgaW5zdGFu
Y2VvZiBGUy5FcnJub0Vycm9yKSkgdGhyb3cgZSArICcgOiAnICsgbmV3IEVycm9yKCkuc3RhY2s7
CiAgICAgICAgcmV0dXJuIF9fX3NldEVyck5vKGUuZXJybm8pOwogICAgICB9LGhhc2hOYW1lOmZ1
bmN0aW9uIChwYXJlbnRpZCwgbmFtZSkgewogICAgICAgIHZhciBoYXNoID0gMDsKICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IG5hbWUubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGhhc2ggPSAo
KGhhc2ggPDwgNSkgLSBoYXNoICsgbmFtZS5jaGFyQ29kZUF0KGkpKSB8IDA7CiAgICAgICAgfQog
ICAgICAgIHJldHVybiAoKHBhcmVudGlkICsgaGFzaCkgPj4+IDApICUgRlMubmFtZV90YWJsZS5s
ZW5ndGg7CiAgICAgIH0saGFzaEFkZE5vZGU6ZnVuY3Rpb24gKG5vZGUpIHsKICAgICAgICB2YXIg
aGFzaCA9IEZTLmhhc2hOYW1lKG5vZGUucGFyZW50LmlkLCBub2RlLm5hbWUpOwogICAgICAgIG5v
ZGUubmFtZV9uZXh0ID0gRlMubmFtZV90YWJsZVtoYXNoXTsKICAgICAgICBGUy5uYW1lX3RhYmxl
W2hhc2hdID0gbm9kZTsKICAgICAgfSxoYXNoUmVtb3ZlTm9kZTpmdW5jdGlvbiAobm9kZSkgewog
ICAgICAgIHZhciBoYXNoID0gRlMuaGFzaE5hbWUobm9kZS5wYXJlbnQuaWQsIG5vZGUubmFtZSk7
CiAgICAgICAgaWYgKEZTLm5hbWVfdGFibGVbaGFzaF0gPT09IG5vZGUpIHsKICAgICAgICAgIEZT
Lm5hbWVfdGFibGVbaGFzaF0gPSBub2RlLm5hbWVfbmV4dDsKICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgdmFyIGN1cnJlbnQgPSBGUy5uYW1lX3RhYmxlW2hhc2hdOwogICAgICAgICAgd2hpbGUg
KGN1cnJlbnQpIHsKICAgICAgICAgICAgaWYgKGN1cnJlbnQubmFtZV9uZXh0ID09PSBub2RlKSB7
CiAgICAgICAgICAgICAgY3VycmVudC5uYW1lX25leHQgPSBub2RlLm5hbWVfbmV4dDsKICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBjdXJyZW50ID0gY3VycmVu
dC5uYW1lX25leHQ7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LGxvb2t1cE5vZGU6ZnVu
Y3Rpb24gKHBhcmVudCwgbmFtZSkgewogICAgICAgIHZhciBlcnIgPSBGUy5tYXlMb29rdXAocGFy
ZW50KTsKICAgICAgICBpZiAoZXJyKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJv
cihlcnIpOwogICAgICAgIH0KICAgICAgICB2YXIgaGFzaCA9IEZTLmhhc2hOYW1lKHBhcmVudC5p
ZCwgbmFtZSk7CiAgICAgICAgZm9yICh2YXIgbm9kZSA9IEZTLm5hbWVfdGFibGVbaGFzaF07IG5v
ZGU7IG5vZGUgPSBub2RlLm5hbWVfbmV4dCkgewogICAgICAgICAgaWYgKG5vZGUucGFyZW50Lmlk
ID09PSBwYXJlbnQuaWQgJiYgbm9kZS5uYW1lID09PSBuYW1lKSB7CiAgICAgICAgICAgIHJldHVy
biBub2RlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBpZiB3ZSBmYWlsZWQgdG8g
ZmluZCBpdCBpbiB0aGUgY2FjaGUsIGNhbGwgaW50byB0aGUgVkZTCiAgICAgICAgcmV0dXJuIEZT
Lmxvb2t1cChwYXJlbnQsIG5hbWUpOwogICAgICB9LGNyZWF0ZU5vZGU6ZnVuY3Rpb24gKHBhcmVu
dCwgbmFtZSwgbW9kZSwgcmRldikgewogICAgICAgIHZhciBub2RlID0gewogICAgICAgICAgaWQ6
IEZTLm5leHRJbm9kZSsrLAogICAgICAgICAgbmFtZTogbmFtZSwKICAgICAgICAgIG1vZGU6IG1v
ZGUsCiAgICAgICAgICBub2RlX29wczoge30sCiAgICAgICAgICBzdHJlYW1fb3BzOiB7fSwKICAg
ICAgICAgIHJkZXY6IHJkZXYsCiAgICAgICAgICBwYXJlbnQ6IG51bGwsCiAgICAgICAgICBtb3Vu
dDogbnVsbAogICAgICAgIH07CiAgICAgICAgaWYgKCFwYXJlbnQpIHsKICAgICAgICAgIHBhcmVu
dCA9IG5vZGU7ICAvLyByb290IG5vZGUgc2V0cyBwYXJlbnQgdG8gaXRzZWxmCiAgICAgICAgfQog
ICAgICAgIG5vZGUucGFyZW50ID0gcGFyZW50OwogICAgICAgIG5vZGUubW91bnQgPSBwYXJlbnQu
bW91bnQ7CiAgICAgICAgLy8gY29tcGF0aWJpbGl0eQogICAgICAgIHZhciByZWFkTW9kZSA9IDI5
MiB8IDczOwogICAgICAgIHZhciB3cml0ZU1vZGUgPSAxNDY7CiAgICAgICAgLy8gTk9URSB3ZSBt
dXN0IHVzZSBPYmplY3QuZGVmaW5lUHJvcGVydGllcyBpbnN0ZWFkIG9mIGluZGl2aWR1YWwgY2Fs
bHMgdG8KICAgICAgICAvLyBPYmplY3QuZGVmaW5lUHJvcGVydHkgaW4gb3JkZXIgdG8gbWFrZSBj
bG9zdXJlIGNvbXBpbGVyIGhhcHB5CiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobm9k
ZSwgewogICAgICAgICAgcmVhZDogewogICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1
cm4gKG5vZGUubW9kZSAmIHJlYWRNb2RlKSA9PT0gcmVhZE1vZGU7IH0sCiAgICAgICAgICAgIHNl
dDogZnVuY3Rpb24odmFsKSB7IHZhbCA/IG5vZGUubW9kZSB8PSByZWFkTW9kZSA6IG5vZGUubW9k
ZSAmPSB+cmVhZE1vZGU7IH0KICAgICAgICAgIH0sCiAgICAgICAgICB3cml0ZTogewogICAgICAg
ICAgICBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gKG5vZGUubW9kZSAmIHdyaXRlTW9kZSkgPT09
IHdyaXRlTW9kZTsgfSwKICAgICAgICAgICAgc2V0OiBmdW5jdGlvbih2YWwpIHsgdmFsID8gbm9k
ZS5tb2RlIHw9IHdyaXRlTW9kZSA6IG5vZGUubW9kZSAmPSB+d3JpdGVNb2RlOyB9CiAgICAgICAg
ICB9LAogICAgICAgICAgaXNGb2xkZXI6IHsKICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsg
cmV0dXJuIEZTLmlzRGlyKG5vZGUubW9kZSk7IH0sCiAgICAgICAgICB9LAogICAgICAgICAgaXNE
ZXZpY2U6IHsKICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIEZTLmlzQ2hyZGV2
KG5vZGUubW9kZSk7IH0sCiAgICAgICAgICB9LAogICAgICAgIH0pOwogICAgICAgIEZTLmhhc2hB
ZGROb2RlKG5vZGUpOwogICAgICAgIHJldHVybiBub2RlOwogICAgICB9LGRlc3Ryb3lOb2RlOmZ1
bmN0aW9uIChub2RlKSB7CiAgICAgICAgRlMuaGFzaFJlbW92ZU5vZGUobm9kZSk7CiAgICAgIH0s
aXNSb290OmZ1bmN0aW9uIChub2RlKSB7CiAgICAgICAgcmV0dXJuIG5vZGUgPT09IG5vZGUucGFy
ZW50OwogICAgICB9LGlzTW91bnRwb2ludDpmdW5jdGlvbiAobm9kZSkgewogICAgICAgIHJldHVy
biBub2RlLm1vdW50ZWQ7CiAgICAgIH0saXNGaWxlOmZ1bmN0aW9uIChtb2RlKSB7CiAgICAgICAg
cmV0dXJuIChtb2RlICYgMDE3MDAwMCkgPT09IDAxMDAwMDA7CiAgICAgIH0saXNEaXI6ZnVuY3Rp
b24gKG1vZGUpIHsKICAgICAgICByZXR1cm4gKG1vZGUgJiAwMTcwMDAwKSA9PT0gMDA0MDAwMDsK
ICAgICAgfSxpc0xpbms6ZnVuY3Rpb24gKG1vZGUpIHsKICAgICAgICByZXR1cm4gKG1vZGUgJiAw
MTcwMDAwKSA9PT0gMDEyMDAwMDsKICAgICAgfSxpc0NocmRldjpmdW5jdGlvbiAobW9kZSkgewog
ICAgICAgIHJldHVybiAobW9kZSAmIDAxNzAwMDApID09PSAwMDIwMDAwOwogICAgICB9LGlzQmxr
ZGV2OmZ1bmN0aW9uIChtb2RlKSB7CiAgICAgICAgcmV0dXJuIChtb2RlICYgMDE3MDAwMCkgPT09
IDAwNjAwMDA7CiAgICAgIH0saXNGSUZPOmZ1bmN0aW9uIChtb2RlKSB7CiAgICAgICAgcmV0dXJu
IChtb2RlICYgMDE3MDAwMCkgPT09IDAwMTAwMDA7CiAgICAgIH0sY3dkOmZ1bmN0aW9uICgpIHsK
ICAgICAgICByZXR1cm4gRlMuY3VycmVudFBhdGg7CiAgICAgIH0sbG9va3VwUGF0aDpmdW5jdGlv
biAocGF0aCwgb3B0cykgewogICAgICAgIHBhdGggPSBQQVRILnJlc29sdmUoRlMuY3VycmVudFBh
dGgsIHBhdGgpOwogICAgICAgIG9wdHMgPSBvcHRzIHx8IHsgcmVjdXJzZV9jb3VudDogMCB9Owog
ICAgICAgIGlmIChvcHRzLnJlY3Vyc2VfY291bnQgPiA4KSB7ICAvLyBtYXggcmVjdXJzaXZlIGxv
b2t1cCBvZiA4CiAgICAgICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5F
TE9PUCk7CiAgICAgICAgfQogICAgICAgIC8vIHNwbGl0IHRoZSBwYXRoCiAgICAgICAgdmFyIHBh
cnRzID0gUEFUSC5ub3JtYWxpemVBcnJheShwYXRoLnNwbGl0KCcvJykuZmlsdGVyKGZ1bmN0aW9u
KHApIHsKICAgICAgICAgIHJldHVybiAhIXA7CiAgICAgICAgfSksIGZhbHNlKTsKICAgICAgICAv
LyBzdGFydCBhdCB0aGUgcm9vdAogICAgICAgIHZhciBjdXJyZW50ID0gRlMucm9vdDsKICAgICAg
ICB2YXIgY3VycmVudF9wYXRoID0gJy8nOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFy
dHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHZhciBpc2xhc3QgPSAoaSA9PT0gcGFydHMubGVu
Z3RoLTEpOwogICAgICAgICAgaWYgKGlzbGFzdCAmJiBvcHRzLnBhcmVudCkgewogICAgICAgICAg
ICAvLyBzdG9wIHJlc29sdmluZwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAg
ICAgIGN1cnJlbnQgPSBGUy5sb29rdXBOb2RlKGN1cnJlbnQsIHBhcnRzW2ldKTsKICAgICAgICAg
IGN1cnJlbnRfcGF0aCA9IFBBVEguam9pbihjdXJyZW50X3BhdGgsIHBhcnRzW2ldKTsKICAgICAg
ICAgIC8vIGp1bXAgdG8gdGhlIG1vdW50J3Mgcm9vdCBub2RlIGlmIHRoaXMgaXMgYSBtb3VudHBv
aW50CiAgICAgICAgICBpZiAoRlMuaXNNb3VudHBvaW50KGN1cnJlbnQpKSB7CiAgICAgICAgICAg
IGN1cnJlbnQgPSBjdXJyZW50Lm1vdW50LnJvb3Q7CiAgICAgICAgICB9CiAgICAgICAgICAvLyBm
b2xsb3cgc3ltbGlua3MKICAgICAgICAgIC8vIGJ5IGRlZmF1bHQsIGxvb2t1cFBhdGggd2lsbCBu
b3QgZm9sbG93IGEgc3ltbGluayBpZiBpdCBpcyB0aGUgZmluYWwgcGF0aCBjb21wb25lbnQuCiAg
ICAgICAgICAvLyBzZXR0aW5nIG9wdHMuZm9sbG93ID0gdHJ1ZSB3aWxsIG92ZXJyaWRlIHRoaXMg
YmVoYXZpb3IuCiAgICAgICAgICBpZiAoIWlzbGFzdCB8fCBvcHRzLmZvbGxvdykgewogICAgICAg
ICAgICB2YXIgY291bnQgPSAwOwogICAgICAgICAgICB3aGlsZSAoRlMuaXNMaW5rKGN1cnJlbnQu
bW9kZSkpIHsKICAgICAgICAgICAgICB2YXIgbGluayA9IEZTLnJlYWRsaW5rKGN1cnJlbnRfcGF0
aCk7CiAgICAgICAgICAgICAgY3VycmVudF9wYXRoID0gUEFUSC5yZXNvbHZlKFBBVEguZGlybmFt
ZShjdXJyZW50X3BhdGgpLCBsaW5rKTsKICAgICAgICAgICAgICB2YXIgbG9va3VwID0gRlMubG9v
a3VwUGF0aChjdXJyZW50X3BhdGgsIHsgcmVjdXJzZV9jb3VudDogb3B0cy5yZWN1cnNlX2NvdW50
IH0pOwogICAgICAgICAgICAgIGN1cnJlbnQgPSBsb29rdXAubm9kZTsKICAgICAgICAgICAgICBp
ZiAoY291bnQrKyA+IDQwKSB7ICAvLyBsaW1pdCBtYXggY29uc2VjdXRpdmUgc3ltbGlua3MgdG8g
NDAgKFNZTUxPT1BfTUFYKS4KICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9y
KEVSUk5PX0NPREVTLkVMT09QKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAg
ICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsgcGF0aDogY3VycmVudF9wYXRoLCBub2Rl
OiBjdXJyZW50IH07CiAgICAgIH0sZ2V0UGF0aDpmdW5jdGlvbiAobm9kZSkgewogICAgICAgIHZh
ciBwYXRoOwogICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICBpZiAoRlMuaXNSb290KG5v
ZGUpKSB7CiAgICAgICAgICAgIHJldHVybiBwYXRoID8gUEFUSC5qb2luKG5vZGUubW91bnQubW91
bnRwb2ludCwgcGF0aCkgOiBub2RlLm1vdW50Lm1vdW50cG9pbnQ7CiAgICAgICAgICB9CiAgICAg
ICAgICBwYXRoID0gcGF0aCA/IFBBVEguam9pbihub2RlLm5hbWUsIHBhdGgpIDogbm9kZS5uYW1l
OwogICAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50OwogICAgICAgIH0KICAgICAgfSxmbGFnTW9k
ZXM6eyJyIjowLCJycyI6ODE5MiwicisiOjIsInciOjE1MzcsInd4IjozNTg1LCJ4dyI6MzU4NSwi
dysiOjE1MzgsInd4KyI6MzU4NiwieHcrIjozNTg2LCJhIjo1MjEsImF4IjoyNTY5LCJ4YSI6MjU2
OSwiYSsiOjUyMiwiYXgrIjoyNTcwLCJ4YSsiOjI1NzB9LG1vZGVTdHJpbmdUb0ZsYWdzOmZ1bmN0
aW9uIChzdHIpIHsKICAgICAgICB2YXIgZmxhZ3MgPSBGUy5mbGFnTW9kZXNbc3RyXTsKICAgICAg
ICBpZiAodHlwZW9mIGZsYWdzID09PSAndW5kZWZpbmVkJykgewogICAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCdVbmtub3duIGZpbGUgb3BlbiBtb2RlOiAnICsgc3RyKTsKICAgICAgICB9CiAgICAg
ICAgcmV0dXJuIGZsYWdzOwogICAgICB9LGZsYWdzVG9QZXJtaXNzaW9uU3RyaW5nOmZ1bmN0aW9u
IChmbGFnKSB7CiAgICAgICAgdmFyIGFjY21vZGUgPSBmbGFnICYgMzsKICAgICAgICB2YXIgcGVy
bXMgPSBbJ3InLCAndycsICdydyddW2FjY21vZGVdOwogICAgICAgIGlmICgoZmxhZyAmIDEwMjQp
KSB7CiAgICAgICAgICBwZXJtcyArPSAndyc7CiAgICAgICAgfQogICAgICAgIHJldHVybiBwZXJt
czsKICAgICAgfSxub2RlUGVybWlzc2lvbnM6ZnVuY3Rpb24gKG5vZGUsIHBlcm1zKSB7CiAgICAg
ICAgaWYgKEZTLmlnbm9yZVBlcm1pc3Npb25zKSB7CiAgICAgICAgICByZXR1cm4gMDsKICAgICAg
ICB9CiAgICAgICAgLy8gcmV0dXJuIDAgaWYgYW55IHVzZXIsIGdyb3VwIG9yIG93bmVyIGJpdHMg
YXJlIHNldC4KICAgICAgICBpZiAocGVybXMuaW5kZXhPZigncicpICE9PSAtMSAmJiAhKG5vZGUu
bW9kZSAmIDI5MikpIHsKICAgICAgICAgIHJldHVybiBFUlJOT19DT0RFUy5FQUNDRVM7CiAgICAg
ICAgfSBlbHNlIGlmIChwZXJtcy5pbmRleE9mKCd3JykgIT09IC0xICYmICEobm9kZS5tb2RlICYg
MTQ2KSkgewogICAgICAgICAgcmV0dXJuIEVSUk5PX0NPREVTLkVBQ0NFUzsKICAgICAgICB9IGVs
c2UgaWYgKHBlcm1zLmluZGV4T2YoJ3gnKSAhPT0gLTEgJiYgIShub2RlLm1vZGUgJiA3MykpIHsK
ICAgICAgICAgIHJldHVybiBFUlJOT19DT0RFUy5FQUNDRVM7CiAgICAgICAgfQogICAgICAgIHJl
dHVybiAwOwogICAgICB9LG1heUxvb2t1cDpmdW5jdGlvbiAoZGlyKSB7CiAgICAgICAgcmV0dXJu
IEZTLm5vZGVQZXJtaXNzaW9ucyhkaXIsICd4Jyk7CiAgICAgIH0sbWF5TWtub2Q6ZnVuY3Rpb24g
KG1vZGUpIHsKICAgICAgICBzd2l0Y2ggKG1vZGUgJiAwMTcwMDAwKSB7CiAgICAgICAgICBjYXNl
IDAxMDAwMDA6CiAgICAgICAgICBjYXNlIDAwMjAwMDA6CiAgICAgICAgICBjYXNlIDAwNjAwMDA6
CiAgICAgICAgICBjYXNlIDAwMTAwMDA6CiAgICAgICAgICBjYXNlIDAxNDAwMDA6CiAgICAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIEVSUk5P
X0NPREVTLkVJTlZBTDsKICAgICAgICB9CiAgICAgIH0sbWF5Q3JlYXRlOmZ1bmN0aW9uIChkaXIs
IG5hbWUpIHsKICAgICAgICB0cnkgewogICAgICAgICAgdmFyIG5vZGUgPSBGUy5sb29rdXBOb2Rl
KGRpciwgbmFtZSk7CiAgICAgICAgICByZXR1cm4gRVJSTk9fQ09ERVMuRUVYSVNUOwogICAgICAg
IH0gY2F0Y2ggKGUpIHsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIEZTLm5vZGVQZXJtaXNzaW9u
cyhkaXIsICd3eCcpOwogICAgICB9LG1heURlbGV0ZTpmdW5jdGlvbiAoZGlyLCBuYW1lLCBpc2Rp
cikgewogICAgICAgIHZhciBub2RlOwogICAgICAgIHRyeSB7CiAgICAgICAgICBub2RlID0gRlMu
bG9va3VwTm9kZShkaXIsIG5hbWUpOwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgIHJl
dHVybiBlLmVycm5vOwogICAgICAgIH0KICAgICAgICB2YXIgZXJyID0gRlMubm9kZVBlcm1pc3Np
b25zKGRpciwgJ3d4Jyk7CiAgICAgICAgaWYgKGVycikgewogICAgICAgICAgcmV0dXJuIGVycjsK
ICAgICAgICB9CiAgICAgICAgaWYgKGlzZGlyKSB7CiAgICAgICAgICBpZiAoIUZTLmlzRGlyKG5v
ZGUubW9kZSkpIHsKICAgICAgICAgICAgcmV0dXJuIEVSUk5PX0NPREVTLkVOT1RESVI7CiAgICAg
ICAgICB9CiAgICAgICAgICBpZiAoRlMuaXNSb290KG5vZGUpIHx8IEZTLmdldFBhdGgobm9kZSkg
PT09IEZTLmN1cnJlbnRQYXRoKSB7CiAgICAgICAgICAgIHJldHVybiBFUlJOT19DT0RFUy5FQlVT
WTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKEZTLmlzRGlyKG5v
ZGUubW9kZSkpIHsKICAgICAgICAgICAgcmV0dXJuIEVSUk5PX0NPREVTLkVJU0RJUjsKICAgICAg
ICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH0sbWF5T3BlbjpmdW5jdGlv
biAobm9kZSwgZmxhZ3MpIHsKICAgICAgICBpZiAoIW5vZGUpIHsKICAgICAgICAgIHJldHVybiBF
UlJOT19DT0RFUy5FTk9FTlQ7CiAgICAgICAgfQogICAgICAgIGlmIChGUy5pc0xpbmsobm9kZS5t
b2RlKSkgewogICAgICAgICAgcmV0dXJuIEVSUk5PX0NPREVTLkVMT09QOwogICAgICAgIH0gZWxz
ZSBpZiAoRlMuaXNEaXIobm9kZS5tb2RlKSkgewogICAgICAgICAgaWYgKChmbGFncyAmIDMpICE9
PSAwIHx8ICAvLyBvcGVuaW5nIGZvciB3cml0ZQogICAgICAgICAgICAgIChmbGFncyAmIDEwMjQp
KSB7CiAgICAgICAgICAgIHJldHVybiBFUlJOT19DT0RFUy5FSVNESVI7CiAgICAgICAgICB9CiAg
ICAgICAgfQogICAgICAgIHJldHVybiBGUy5ub2RlUGVybWlzc2lvbnMobm9kZSwgRlMuZmxhZ3NU
b1Blcm1pc3Npb25TdHJpbmcoZmxhZ3MpKTsKICAgICAgfSxjaHJkZXZfc3RyZWFtX29wczp7b3Bl
bjpmdW5jdGlvbiAoc3RyZWFtKSB7CiAgICAgICAgICB2YXIgZGV2aWNlID0gRlMuZ2V0RGV2aWNl
KHN0cmVhbS5ub2RlLnJkZXYpOwogICAgICAgICAgLy8gb3ZlcnJpZGUgbm9kZSdzIHN0cmVhbSBv
cHMgd2l0aCB0aGUgZGV2aWNlJ3MKICAgICAgICAgIHN0cmVhbS5zdHJlYW1fb3BzID0gZGV2aWNl
LnN0cmVhbV9vcHM7CiAgICAgICAgICAvLyBmb3J3YXJkIHRoZSBvcGVuIGNhbGwKICAgICAgICAg
IGlmIChzdHJlYW0uc3RyZWFtX29wcy5vcGVuKSB7CiAgICAgICAgICAgIHN0cmVhbS5zdHJlYW1f
b3BzLm9wZW4oc3RyZWFtKTsKICAgICAgICAgIH0KICAgICAgICB9LGxsc2VlazpmdW5jdGlvbiAo
KSB7CiAgICAgICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FU1BJUEUp
OwogICAgICAgIH19LG1ham9yOmZ1bmN0aW9uIChkZXYpIHsKICAgICAgICByZXR1cm4gKChkZXYp
ID4+IDgpOwogICAgICB9LG1pbm9yOmZ1bmN0aW9uIChkZXYpIHsKICAgICAgICByZXR1cm4gKChk
ZXYpICYgMHhmZik7CiAgICAgIH0sbWFrZWRldjpmdW5jdGlvbiAobWEsIG1pKSB7CiAgICAgICAg
cmV0dXJuICgobWEpIDw8IDggfCAobWkpKTsKICAgICAgfSxyZWdpc3RlckRldmljZTpmdW5jdGlv
biAoZGV2LCBvcHMpIHsKICAgICAgICBGUy5kZXZpY2VzW2Rldl0gPSB7IHN0cmVhbV9vcHM6IG9w
cyB9OwogICAgICB9LGdldERldmljZTpmdW5jdGlvbiAoZGV2KSB7CiAgICAgICAgcmV0dXJuIEZT
LmRldmljZXNbZGV2XTsKICAgICAgfSxNQVhfT1BFTl9GRFM6NDA5NixuZXh0ZmQ6ZnVuY3Rpb24g
KGZkX3N0YXJ0LCBmZF9lbmQpIHsKICAgICAgICBmZF9zdGFydCA9IGZkX3N0YXJ0IHx8IDE7CiAg
ICAgICAgZmRfZW5kID0gZmRfZW5kIHx8IEZTLk1BWF9PUEVOX0ZEUzsKICAgICAgICBmb3IgKHZh
ciBmZCA9IGZkX3N0YXJ0OyBmZCA8PSBmZF9lbmQ7IGZkKyspIHsKICAgICAgICAgIGlmICghRlMu
c3RyZWFtc1tmZF0pIHsKICAgICAgICAgICAgcmV0dXJuIGZkOwogICAgICAgICAgfQogICAgICAg
IH0KICAgICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FTUZJTEUpOwog
ICAgICB9LGdldFN0cmVhbTpmdW5jdGlvbiAoZmQpIHsKICAgICAgICByZXR1cm4gRlMuc3RyZWFt
c1tmZF07CiAgICAgIH0sY3JlYXRlU3RyZWFtOmZ1bmN0aW9uIChzdHJlYW0sIGZkX3N0YXJ0LCBm
ZF9lbmQpIHsKICAgICAgICB2YXIgZmQgPSBGUy5uZXh0ZmQoZmRfc3RhcnQsIGZkX2VuZCk7CiAg
ICAgICAgc3RyZWFtLmZkID0gZmQ7CiAgICAgICAgLy8gY29tcGF0aWJpbGl0eQogICAgICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0aWVzKHN0cmVhbSwgewogICAgICAgICAgb2JqZWN0OiB7CiAgICAg
ICAgICAgIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBzdHJlYW0ubm9kZTsgfSwKICAgICAgICAg
ICAgc2V0OiBmdW5jdGlvbih2YWwpIHsgc3RyZWFtLm5vZGUgPSB2YWw7IH0KICAgICAgICAgIH0s
CiAgICAgICAgICBpc1JlYWQ6IHsKICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJu
IChzdHJlYW0uZmxhZ3MgJiAzKSAhPT0gMTsgfQogICAgICAgICAgfSwKICAgICAgICAgIGlzV3Jp
dGU6IHsKICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIChzdHJlYW0uZmxhZ3Mg
JiAzKSAhPT0gMDsgfQogICAgICAgICAgfSwKICAgICAgICAgIGlzQXBwZW5kOiB7CiAgICAgICAg
ICAgIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiAoc3RyZWFtLmZsYWdzICYgOCk7IH0KICAgICAg
ICAgIH0KICAgICAgICB9KTsKICAgICAgICBGUy5zdHJlYW1zW2ZkXSA9IHN0cmVhbTsKICAgICAg
ICByZXR1cm4gc3RyZWFtOwogICAgICB9LGNsb3NlU3RyZWFtOmZ1bmN0aW9uIChmZCkgewogICAg
ICAgIEZTLnN0cmVhbXNbZmRdID0gbnVsbDsKICAgICAgfSxnZXRNb2RlOmZ1bmN0aW9uIChjYW5S
ZWFkLCBjYW5Xcml0ZSkgewogICAgICAgIHZhciBtb2RlID0gMDsKICAgICAgICBpZiAoY2FuUmVh
ZCkgbW9kZSB8PSAyOTIgfCA3MzsKICAgICAgICBpZiAoY2FuV3JpdGUpIG1vZGUgfD0gMTQ2Owog
ICAgICAgIHJldHVybiBtb2RlOwogICAgICB9LGpvaW5QYXRoOmZ1bmN0aW9uIChwYXJ0cywgZm9y
Y2VSZWxhdGl2ZSkgewogICAgICAgIHZhciBwYXRoID0gUEFUSC5qb2luLmFwcGx5KG51bGwsIHBh
cnRzKTsKICAgICAgICBpZiAoZm9yY2VSZWxhdGl2ZSAmJiBwYXRoWzBdID09ICcvJykgcGF0aCA9
IHBhdGguc3Vic3RyKDEpOwogICAgICAgIHJldHVybiBwYXRoOwogICAgICB9LGFic29sdXRlUGF0
aDpmdW5jdGlvbiAocmVsYXRpdmUsIGJhc2UpIHsKICAgICAgICByZXR1cm4gUEFUSC5yZXNvbHZl
KGJhc2UsIHJlbGF0aXZlKTsKICAgICAgfSxzdGFuZGFyZGl6ZVBhdGg6ZnVuY3Rpb24gKHBhdGgp
IHsKICAgICAgICByZXR1cm4gUEFUSC5ub3JtYWxpemUocGF0aCk7CiAgICAgIH0sZmluZE9iamVj
dDpmdW5jdGlvbiAocGF0aCwgZG9udFJlc29sdmVMYXN0TGluaykgewogICAgICAgIHZhciByZXQg
PSBGUy5hbmFseXplUGF0aChwYXRoLCBkb250UmVzb2x2ZUxhc3RMaW5rKTsKICAgICAgICBpZiAo
cmV0LmV4aXN0cykgewogICAgICAgICAgcmV0dXJuIHJldC5vYmplY3Q7CiAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgIF9fX3NldEVyck5vKHJldC5lcnJvcik7CiAgICAgICAgICByZXR1cm4gbnVs
bDsKICAgICAgICB9CiAgICAgIH0sYW5hbHl6ZVBhdGg6ZnVuY3Rpb24gKHBhdGgsIGRvbnRSZXNv
bHZlTGFzdExpbmspIHsKICAgICAgICAvLyBvcGVyYXRlIGZyb20gd2l0aGluIHRoZSBjb250ZXh0
IG9mIHRoZSBzeW1saW5rJ3MgdGFyZ2V0CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHZhciBsb29r
dXAgPSBGUy5sb29rdXBQYXRoKHBhdGgsIHsgZm9sbG93OiAhZG9udFJlc29sdmVMYXN0TGluayB9
KTsKICAgICAgICAgIHBhdGggPSBsb29rdXAucGF0aDsKICAgICAgICB9IGNhdGNoIChlKSB7CiAg
ICAgICAgfQogICAgICAgIHZhciByZXQgPSB7CiAgICAgICAgICBpc1Jvb3Q6IGZhbHNlLCBleGlz
dHM6IGZhbHNlLCBlcnJvcjogMCwgbmFtZTogbnVsbCwgcGF0aDogbnVsbCwgb2JqZWN0OiBudWxs
LAogICAgICAgICAgcGFyZW50RXhpc3RzOiBmYWxzZSwgcGFyZW50UGF0aDogbnVsbCwgcGFyZW50
T2JqZWN0OiBudWxsCiAgICAgICAgfTsKICAgICAgICB0cnkgewogICAgICAgICAgdmFyIGxvb2t1
cCA9IEZTLmxvb2t1cFBhdGgocGF0aCwgeyBwYXJlbnQ6IHRydWUgfSk7CiAgICAgICAgICByZXQu
cGFyZW50RXhpc3RzID0gdHJ1ZTsKICAgICAgICAgIHJldC5wYXJlbnRQYXRoID0gbG9va3VwLnBh
dGg7CiAgICAgICAgICByZXQucGFyZW50T2JqZWN0ID0gbG9va3VwLm5vZGU7CiAgICAgICAgICBy
ZXQubmFtZSA9IFBBVEguYmFzZW5hbWUocGF0aCk7CiAgICAgICAgICBsb29rdXAgPSBGUy5sb29r
dXBQYXRoKHBhdGgsIHsgZm9sbG93OiAhZG9udFJlc29sdmVMYXN0TGluayB9KTsKICAgICAgICAg
IHJldC5leGlzdHMgPSB0cnVlOwogICAgICAgICAgcmV0LnBhdGggPSBsb29rdXAucGF0aDsKICAg
ICAgICAgIHJldC5vYmplY3QgPSBsb29rdXAubm9kZTsKICAgICAgICAgIHJldC5uYW1lID0gbG9v
a3VwLm5vZGUubmFtZTsKICAgICAgICAgIHJldC5pc1Jvb3QgPSBsb29rdXAucGF0aCA9PT0gJy8n
OwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgIHJldC5lcnJvciA9IGUuZXJybm87CiAg
ICAgICAgfTsKICAgICAgICByZXR1cm4gcmV0OwogICAgICB9LGNyZWF0ZUZvbGRlcjpmdW5jdGlv
biAocGFyZW50LCBuYW1lLCBjYW5SZWFkLCBjYW5Xcml0ZSkgewogICAgICAgIHZhciBwYXRoID0g
UEFUSC5qb2luKHR5cGVvZiBwYXJlbnQgPT09ICdzdHJpbmcnID8gcGFyZW50IDogRlMuZ2V0UGF0
aChwYXJlbnQpLCBuYW1lKTsKICAgICAgICB2YXIgbW9kZSA9IEZTLmdldE1vZGUoY2FuUmVhZCwg
Y2FuV3JpdGUpOwogICAgICAgIHJldHVybiBGUy5ta2RpcihwYXRoLCBtb2RlKTsKICAgICAgfSxj
cmVhdGVQYXRoOmZ1bmN0aW9uIChwYXJlbnQsIHBhdGgsIGNhblJlYWQsIGNhbldyaXRlKSB7CiAg
ICAgICAgcGFyZW50ID0gdHlwZW9mIHBhcmVudCA9PT0gJ3N0cmluZycgPyBwYXJlbnQgOiBGUy5n
ZXRQYXRoKHBhcmVudCk7CiAgICAgICAgdmFyIHBhcnRzID0gcGF0aC5zcGxpdCgnLycpLnJldmVy
c2UoKTsKICAgICAgICB3aGlsZSAocGFydHMubGVuZ3RoKSB7CiAgICAgICAgICB2YXIgcGFydCA9
IHBhcnRzLnBvcCgpOwogICAgICAgICAgaWYgKCFwYXJ0KSBjb250aW51ZTsKICAgICAgICAgIHZh
ciBjdXJyZW50ID0gUEFUSC5qb2luKHBhcmVudCwgcGFydCk7CiAgICAgICAgICB0cnkgewogICAg
ICAgICAgICBGUy5ta2RpcihjdXJyZW50LCAwNzc3KTsKICAgICAgICAgIH0gY2F0Y2ggKGUpIHsK
ICAgICAgICAgICAgLy8gaWdub3JlIEVFWElTVAogICAgICAgICAgfQogICAgICAgICAgcGFyZW50
ID0gY3VycmVudDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7CiAgICAgIH0sY3Jl
YXRlRmlsZTpmdW5jdGlvbiAocGFyZW50LCBuYW1lLCBwcm9wZXJ0aWVzLCBjYW5SZWFkLCBjYW5X
cml0ZSkgewogICAgICAgIHZhciBwYXRoID0gUEFUSC5qb2luKHR5cGVvZiBwYXJlbnQgPT09ICdz
dHJpbmcnID8gcGFyZW50IDogRlMuZ2V0UGF0aChwYXJlbnQpLCBuYW1lKTsKICAgICAgICB2YXIg
bW9kZSA9IEZTLmdldE1vZGUoY2FuUmVhZCwgY2FuV3JpdGUpOwogICAgICAgIHJldHVybiBGUy5j
cmVhdGUocGF0aCwgbW9kZSk7CiAgICAgIH0sY3JlYXRlRGF0YUZpbGU6ZnVuY3Rpb24gKHBhcmVu
dCwgbmFtZSwgZGF0YSwgY2FuUmVhZCwgY2FuV3JpdGUpIHsKICAgICAgICB2YXIgcGF0aCA9IFBB
VEguam9pbih0eXBlb2YgcGFyZW50ID09PSAnc3RyaW5nJyA/IHBhcmVudCA6IEZTLmdldFBhdGgo
cGFyZW50KSwgbmFtZSk7CiAgICAgICAgdmFyIG1vZGUgPSBGUy5nZXRNb2RlKGNhblJlYWQsIGNh
bldyaXRlKTsKICAgICAgICB2YXIgbm9kZSA9IEZTLmNyZWF0ZShwYXRoLCBtb2RlKTsKICAgICAg
ICBpZiAoZGF0YSkgewogICAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykgewog
ICAgICAgICAgICB2YXIgYXJyID0gbmV3IEFycmF5KGRhdGEubGVuZ3RoKTsKICAgICAgICAgICAg
Zm9yICh2YXIgaSA9IDAsIGxlbiA9IGRhdGEubGVuZ3RoOyBpIDwgbGVuOyArK2kpIGFycltpXSA9
IGRhdGEuY2hhckNvZGVBdChpKTsKICAgICAgICAgICAgZGF0YSA9IGFycjsKICAgICAgICAgIH0K
ICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBjYW4gd3JpdGUgdG8gdGhlIGZpbGUKICAgICAgICAg
IEZTLmNobW9kKHBhdGgsIG1vZGUgfCAxNDYpOwogICAgICAgICAgdmFyIHN0cmVhbSA9IEZTLm9w
ZW4ocGF0aCwgJ3cnKTsKICAgICAgICAgIEZTLndyaXRlKHN0cmVhbSwgZGF0YSwgMCwgZGF0YS5s
ZW5ndGgsIDApOwogICAgICAgICAgRlMuY2xvc2Uoc3RyZWFtKTsKICAgICAgICAgIEZTLmNobW9k
KHBhdGgsIG1vZGUpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgfSxjcmVh
dGVEZXZpY2U6ZnVuY3Rpb24gKHBhcmVudCwgbmFtZSwgaW5wdXQsIG91dHB1dCkgewogICAgICAg
IHZhciBwYXRoID0gUEFUSC5qb2luKHR5cGVvZiBwYXJlbnQgPT09ICdzdHJpbmcnID8gcGFyZW50
IDogRlMuZ2V0UGF0aChwYXJlbnQpLCBuYW1lKTsKICAgICAgICB2YXIgbW9kZSA9IGlucHV0ICYm
IG91dHB1dCA/IDA3NzcgOiAoaW5wdXQgPyAwMzMzIDogMDU1NSk7CiAgICAgICAgaWYgKCFGUy5j
cmVhdGVEZXZpY2UubWFqb3IpIEZTLmNyZWF0ZURldmljZS5tYWpvciA9IDY0OwogICAgICAgIHZh
ciBkZXYgPSBGUy5tYWtlZGV2KEZTLmNyZWF0ZURldmljZS5tYWpvcisrLCAwKTsKICAgICAgICAv
LyBDcmVhdGUgYSBmYWtlIGRldmljZSB0aGF0IGEgc2V0IG9mIHN0cmVhbSBvcHMgdG8gZW11bGF0
ZQogICAgICAgIC8vIHRoZSBvbGQgYmVoYXZpb3IuCiAgICAgICAgRlMucmVnaXN0ZXJEZXZpY2Uo
ZGV2LCB7CiAgICAgICAgICBvcGVuOiBmdW5jdGlvbihzdHJlYW0pIHsKICAgICAgICAgICAgc3Ry
ZWFtLnNlZWthYmxlID0gZmFsc2U7CiAgICAgICAgICB9LAogICAgICAgICAgY2xvc2U6IGZ1bmN0
aW9uKHN0cmVhbSkgewogICAgICAgICAgICAvLyBmbHVzaCBhbnkgcGVuZGluZyBsaW5lIGRhdGEK
ICAgICAgICAgICAgaWYgKG91dHB1dCAmJiBvdXRwdXQuYnVmZmVyICYmIG91dHB1dC5idWZmZXIu
bGVuZ3RoKSB7CiAgICAgICAgICAgICAgb3V0cHV0KDEwKTsKICAgICAgICAgICAgfQogICAgICAg
ICAgfSwKICAgICAgICAgIHJlYWQ6IGZ1bmN0aW9uKHN0cmVhbSwgYnVmZmVyLCBvZmZzZXQsIGxl
bmd0aCwgcG9zIC8qIGlnbm9yZWQgKi8pIHsKICAgICAgICAgICAgdmFyIGJ5dGVzUmVhZCA9IDA7
CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAg
ICAgICB2YXIgcmVzdWx0OwogICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICByZXN1
bHQgPSBpbnB1dCgpOwogICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAg
IHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVJTyk7CiAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCAmJiBieXRlc1JlYWQgPT09
IDApIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVT
LkVBR0FJTik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51
bGwgfHwgcmVzdWx0ID09PSB1bmRlZmluZWQpIGJyZWFrOwogICAgICAgICAgICAgIGJ5dGVzUmVh
ZCsrOwogICAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQraV0gPSByZXN1bHQ7CiAgICAgICAgICAg
IH0KICAgICAgICAgICAgaWYgKGJ5dGVzUmVhZCkgewogICAgICAgICAgICAgIHN0cmVhbS5ub2Rl
LnRpbWVzdGFtcCA9IERhdGUubm93KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJu
IGJ5dGVzUmVhZDsKICAgICAgICAgIH0sCiAgICAgICAgICB3cml0ZTogZnVuY3Rpb24oc3RyZWFt
LCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3MpIHsKICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAg
ICBvdXRwdXQoYnVmZmVyW29mZnNldCtpXSk7CiAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewog
ICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUlPKTsK
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGxlbmd0aCkgewog
ICAgICAgICAgICAgIHN0cmVhbS5ub2RlLnRpbWVzdGFtcCA9IERhdGUubm93KCk7CiAgICAgICAg
ICAgIH0KICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAg
ICAgcmV0dXJuIEZTLm1rZGV2KHBhdGgsIG1vZGUsIGRldik7CiAgICAgIH0sY3JlYXRlTGluazpm
dW5jdGlvbiAocGFyZW50LCBuYW1lLCB0YXJnZXQsIGNhblJlYWQsIGNhbldyaXRlKSB7CiAgICAg
ICAgdmFyIHBhdGggPSBQQVRILmpvaW4odHlwZW9mIHBhcmVudCA9PT0gJ3N0cmluZycgPyBwYXJl
bnQgOiBGUy5nZXRQYXRoKHBhcmVudCksIG5hbWUpOwogICAgICAgIHJldHVybiBGUy5zeW1saW5r
KHRhcmdldCwgcGF0aCk7CiAgICAgIH0sZm9yY2VMb2FkRmlsZTpmdW5jdGlvbiAob2JqKSB7CiAg
ICAgICAgaWYgKG9iai5pc0RldmljZSB8fCBvYmouaXNGb2xkZXIgfHwgb2JqLmxpbmsgfHwgb2Jq
LmNvbnRlbnRzKSByZXR1cm4gdHJ1ZTsKICAgICAgICB2YXIgc3VjY2VzcyA9IHRydWU7CiAgICAg
ICAgaWYgKHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAg
IHRocm93IG5ldyBFcnJvcigiTGF6eSBsb2FkaW5nIHNob3VsZCBoYXZlIGJlZW4gcGVyZm9ybWVk
IChjb250ZW50cyBzZXQpIGluIGNyZWF0ZUxhenlGaWxlLCBidXQgaXQgd2FzIG5vdC4gTGF6eSBs
b2FkaW5nIG9ubHkgd29ya3MgaW4gd2ViIHdvcmtlcnMuIFVzZSAtLWVtYmVkLWZpbGUgb3IgLS1w
cmVsb2FkLWZpbGUgaW4gZW1jYyBvbiB0aGUgbWFpbiB0aHJlYWQuIik7CiAgICAgICAgfSBlbHNl
IGlmIChNb2R1bGVbJ3JlYWQnXSkgewogICAgICAgICAgLy8gQ29tbWFuZC1saW5lLgogICAgICAg
ICAgdHJ5IHsKICAgICAgICAgICAgLy8gV0FSTklORzogQ2FuJ3QgcmVhZCBiaW5hcnkgZmlsZXMg
aW4gVjgncyBkOCBvciB0cmFjZW1vbmtleSdzIGpzLCBhcwogICAgICAgICAgICAvLyAgICAgICAg
ICByZWFkKCkgd2lsbCB0cnkgdG8gcGFyc2UgVVRGOC4KICAgICAgICAgICAgb2JqLmNvbnRlbnRz
ID0gaW50QXJyYXlGcm9tU3RyaW5nKE1vZHVsZVsncmVhZCddKG9iai51cmwpLCB0cnVlKTsKICAg
ICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwogICAgICAg
ICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBs
b2FkIHdpdGhvdXQgcmVhZCgpIG9yIFhNTEh0dHBSZXF1ZXN0LicpOwogICAgICAgIH0KICAgICAg
ICBpZiAoIXN1Y2Nlc3MpIF9fX3NldEVyck5vKEVSUk5PX0NPREVTLkVJTyk7CiAgICAgICAgcmV0
dXJuIHN1Y2Nlc3M7CiAgICAgIH0sY3JlYXRlTGF6eUZpbGU6ZnVuY3Rpb24gKHBhcmVudCwgbmFt
ZSwgdXJsLCBjYW5SZWFkLCBjYW5Xcml0ZSkgewogICAgICAgIGlmICh0eXBlb2YgWE1MSHR0cFJl
cXVlc3QgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgICBpZiAoIUVOVklST05NRU5UX0lTX1dP
UktFUikgdGhyb3cgJ0Nhbm5vdCBkbyBzeW5jaHJvbm91cyBiaW5hcnkgWEhScyBvdXRzaWRlIHdl
YndvcmtlcnMgaW4gbW9kZXJuIGJyb3dzZXJzLiBVc2UgLS1lbWJlZC1maWxlIG9yIC0tcHJlbG9h
ZC1maWxlIGluIGVtY2MnOwogICAgICAgICAgLy8gTGF6eSBjaHVua2VkIFVpbnQ4QXJyYXkgKGlt
cGxlbWVudHMgZ2V0IGFuZCBsZW5ndGggZnJvbSBVaW50OEFycmF5KS4gQWN0dWFsIGdldHRpbmcg
aXMgYWJzdHJhY3RlZCBhd2F5IGZvciBldmVudHVhbCByZXVzZS4KICAgICAgICAgIHZhciBMYXp5
VWludDhBcnJheSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB0aGlzLmxlbmd0aEtub3duID0g
ZmFsc2U7CiAgICAgICAgICAgIHRoaXMuY2h1bmtzID0gW107IC8vIExvYWRlZCBjaHVua3MuIElu
ZGV4IGlzIHRoZSBjaHVuayBudW1iZXIKICAgICAgICAgIH0KICAgICAgICAgIExhenlVaW50OEFy
cmF5LnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihpZHgpIHsKICAgICAgICAgICAgaWYgKGlkeCA+
IHRoaXMubGVuZ3RoLTEgfHwgaWR4IDwgMCkgewogICAgICAgICAgICAgIHJldHVybiB1bmRlZmlu
ZWQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIGNodW5rT2Zmc2V0ID0gaWR4ICUgdGhp
cy5jaHVua1NpemU7CiAgICAgICAgICAgIHZhciBjaHVua051bSA9IE1hdGguZmxvb3IoaWR4IC8g
dGhpcy5jaHVua1NpemUpOwogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXR0ZXIoY2h1bmtOdW0p
W2NodW5rT2Zmc2V0XTsKICAgICAgICAgIH0KICAgICAgICAgIExhenlVaW50OEFycmF5LnByb3Rv
dHlwZS5zZXREYXRhR2V0dGVyID0gZnVuY3Rpb24oZ2V0dGVyKSB7CiAgICAgICAgICAgIHRoaXMu
Z2V0dGVyID0gZ2V0dGVyOwogICAgICAgICAgfQogICAgICAgICAgTGF6eVVpbnQ4QXJyYXkucHJv
dG90eXBlLmNhY2hlTGVuZ3RoID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgLy8gRmluZCBs
ZW5ndGgKICAgICAgICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CiAgICAg
ICAgICAgICAgeGhyLm9wZW4oJ0hFQUQnLCB1cmwsIGZhbHNlKTsKICAgICAgICAgICAgICB4aHIu
c2VuZChudWxsKTsKICAgICAgICAgICAgICBpZiAoISh4aHIuc3RhdHVzID49IDIwMCAmJiB4aHIu
c3RhdHVzIDwgMzAwIHx8IHhoci5zdGF0dXMgPT09IDMwNCkpIHRocm93IG5ldyBFcnJvcigiQ291
bGRuJ3QgbG9hZCAiICsgdXJsICsgIi4gU3RhdHVzOiAiICsgeGhyLnN0YXR1cyk7CiAgICAgICAg
ICAgICAgdmFyIGRhdGFsZW5ndGggPSBOdW1iZXIoeGhyLmdldFJlc3BvbnNlSGVhZGVyKCJDb250
ZW50LWxlbmd0aCIpKTsKICAgICAgICAgICAgICB2YXIgaGVhZGVyOwogICAgICAgICAgICAgIHZh
ciBoYXNCeXRlU2VydmluZyA9IChoZWFkZXIgPSB4aHIuZ2V0UmVzcG9uc2VIZWFkZXIoIkFjY2Vw
dC1SYW5nZXMiKSkgJiYgaGVhZGVyID09PSAiYnl0ZXMiOwogICAgICAgICAgICAgIHZhciBjaHVu
a1NpemUgPSAxMDI0KjEwMjQ7IC8vIENodW5rIHNpemUgaW4gYnl0ZXMKICAgICAgICAgICAgICBp
ZiAoIWhhc0J5dGVTZXJ2aW5nKSBjaHVua1NpemUgPSBkYXRhbGVuZ3RoOwogICAgICAgICAgICAg
IC8vIEZ1bmN0aW9uIHRvIGdldCBhIHJhbmdlIGZyb20gdGhlIHJlbW90ZSBVUkwuCiAgICAgICAg
ICAgICAgdmFyIGRvWEhSID0gKGZ1bmN0aW9uKGZyb20sIHRvKSB7CiAgICAgICAgICAgICAgICBp
ZiAoZnJvbSA+IHRvKSB0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcmFuZ2UgKCIgKyBmcm9tICsg
IiwgIiArIHRvICsgIikgb3Igbm8gYnl0ZXMgcmVxdWVzdGVkISIpOwogICAgICAgICAgICAgICAg
aWYgKHRvID4gZGF0YWxlbmd0aC0xKSB0aHJvdyBuZXcgRXJyb3IoIm9ubHkgIiArIGRhdGFsZW5n
dGggKyAiIGJ5dGVzIGF2YWlsYWJsZSEgcHJvZ3JhbW1lciBlcnJvciEiKTsKICAgICAgICAgICAg
ICAgIC8vIFRPRE86IFVzZSBtb3pSZXNwb25zZUFycmF5QnVmZmVyLCByZXNwb25zZVN0cmVhbSwg
ZXRjLiBpZiBhdmFpbGFibGUuCiAgICAgICAgICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBS
ZXF1ZXN0KCk7CiAgICAgICAgICAgICAgICB4aHIub3BlbignR0VUJywgdXJsLCBmYWxzZSk7CiAg
ICAgICAgICAgICAgICBpZiAoZGF0YWxlbmd0aCAhPT0gY2h1bmtTaXplKSB4aHIuc2V0UmVxdWVz
dEhlYWRlcigiUmFuZ2UiLCAiYnl0ZXM9IiArIGZyb20gKyAiLSIgKyB0byk7CiAgICAgICAgICAg
ICAgICAvLyBTb21lIGhpbnRzIHRvIHRoZSBicm93c2VyIHRoYXQgd2Ugd2FudCBiaW5hcnkgZGF0
YS4KICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgVWludDhBcnJheSAhPSAndW5kZWZpbmVkJykg
eGhyLnJlc3BvbnNlVHlwZSA9ICdhcnJheWJ1ZmZlcic7CiAgICAgICAgICAgICAgICBpZiAoeGhy
Lm92ZXJyaWRlTWltZVR5cGUpIHsKICAgICAgICAgICAgICAgICAgeGhyLm92ZXJyaWRlTWltZVR5
cGUoJ3RleHQvcGxhaW47IGNoYXJzZXQ9eC11c2VyLWRlZmluZWQnKTsKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgIHhoci5zZW5kKG51bGwpOwogICAgICAgICAgICAgICAgaWYgKCEo
eGhyLnN0YXR1cyA+PSAyMDAgJiYgeGhyLnN0YXR1cyA8IDMwMCB8fCB4aHIuc3RhdHVzID09PSAz
MDQpKSB0aHJvdyBuZXcgRXJyb3IoIkNvdWxkbid0IGxvYWQgIiArIHVybCArICIuIFN0YXR1czog
IiArIHhoci5zdGF0dXMpOwogICAgICAgICAgICAgICAgaWYgKHhoci5yZXNwb25zZSAhPT0gdW5k
ZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSh4aHIucmVz
cG9uc2UgfHwgW10pOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAg
cmV0dXJuIGludEFycmF5RnJvbVN0cmluZyh4aHIucmVzcG9uc2VUZXh0IHx8ICcnLCB0cnVlKTsK
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB2YXIgbGF6
eUFycmF5ID0gdGhpczsKICAgICAgICAgICAgICBsYXp5QXJyYXkuc2V0RGF0YUdldHRlcihmdW5j
dGlvbihjaHVua051bSkgewogICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gY2h1bmtOdW0gKiBj
aHVua1NpemU7CiAgICAgICAgICAgICAgICB2YXIgZW5kID0gKGNodW5rTnVtKzEpICogY2h1bmtT
aXplIC0gMTsgLy8gaW5jbHVkaW5nIHRoaXMgYnl0ZQogICAgICAgICAgICAgICAgZW5kID0gTWF0
aC5taW4oZW5kLCBkYXRhbGVuZ3RoLTEpOyAvLyBpZiBkYXRhbGVuZ3RoLTEgaXMgc2VsZWN0ZWQs
IHRoaXMgaXMgdGhlIGxhc3QgYmxvY2sKICAgICAgICAgICAgICAgIGlmICh0eXBlb2YobGF6eUFy
cmF5LmNodW5rc1tjaHVua051bV0pID09PSAidW5kZWZpbmVkIikgewogICAgICAgICAgICAgICAg
ICBsYXp5QXJyYXkuY2h1bmtzW2NodW5rTnVtXSA9IGRvWEhSKHN0YXJ0LCBlbmQpOwogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHR5cGVvZihsYXp5QXJyYXkuY2h1bmtzW2No
dW5rTnVtXSkgPT09ICJ1bmRlZmluZWQiKSB0aHJvdyBuZXcgRXJyb3IoImRvWEhSIGZhaWxlZCEi
KTsKICAgICAgICAgICAgICAgIHJldHVybiBsYXp5QXJyYXkuY2h1bmtzW2NodW5rTnVtXTsKICAg
ICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB0aGlzLl9sZW5ndGggPSBkYXRhbGVuZ3RoOwog
ICAgICAgICAgICAgIHRoaXMuX2NodW5rU2l6ZSA9IGNodW5rU2l6ZTsKICAgICAgICAgICAgICB0
aGlzLmxlbmd0aEtub3duID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIHZhciBsYXp5QXJy
YXkgPSBuZXcgTGF6eVVpbnQ4QXJyYXkoKTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShsYXp5QXJyYXksICJsZW5ndGgiLCB7CiAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsK
ICAgICAgICAgICAgICAgICAgaWYoIXRoaXMubGVuZ3RoS25vd24pIHsKICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMuY2FjaGVMZW5ndGgoKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fbGVuZ3RoOwogICAgICAgICAgICAgIH0KICAgICAgICAgIH0p
OwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGxhenlBcnJheSwgImNodW5rU2l6ZSIs
IHsKICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICBpZigh
dGhpcy5sZW5ndGhLbm93bikgewogICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWNoZUxlbmd0
aCgpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9j
aHVua1NpemU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICB2YXIgcHJv
cGVydGllcyA9IHsgaXNEZXZpY2U6IGZhbHNlLCBjb250ZW50czogbGF6eUFycmF5IH07CiAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgIHZhciBwcm9wZXJ0aWVzID0geyBpc0RldmljZTogZmFsc2Us
IHVybDogdXJsIH07CiAgICAgICAgfQogICAgICAgIHZhciBub2RlID0gRlMuY3JlYXRlRmlsZShw
YXJlbnQsIG5hbWUsIHByb3BlcnRpZXMsIGNhblJlYWQsIGNhbldyaXRlKTsKICAgICAgICAvLyBU
aGlzIGlzIGEgdG90YWwgaGFjaywgYnV0IEkgd2FudCB0byBnZXQgdGhpcyBsYXp5IGZpbGUgY29k
ZSBvdXQgb2YgdGhlCiAgICAgICAgLy8gY29yZSBvZiBNRU1GUy4gSWYgd2Ugd2FudCB0byBrZWVw
IHRoaXMgbGF6eSBmaWxlIGNvbmNlcHQgSSBmZWVsIGl0IHNob3VsZAogICAgICAgIC8vIGJlIGl0
cyBvd24gdGhpbiBMQVpZRlMgcHJveHlpbmcgY2FsbHMgdG8gTUVNRlMuCiAgICAgICAgaWYgKHBy
b3BlcnRpZXMuY29udGVudHMpIHsKICAgICAgICAgIG5vZGUuY29udGVudHMgPSBwcm9wZXJ0aWVz
LmNvbnRlbnRzOwogICAgICAgIH0gZWxzZSBpZiAocHJvcGVydGllcy51cmwpIHsKICAgICAgICAg
IG5vZGUuY29udGVudHMgPSBudWxsOwogICAgICAgICAgbm9kZS51cmwgPSBwcm9wZXJ0aWVzLnVy
bDsKICAgICAgICB9CiAgICAgICAgLy8gb3ZlcnJpZGUgZWFjaCBzdHJlYW0gb3Agd2l0aCBvbmUg
dGhhdCB0cmllcyB0byBmb3JjZSBsb2FkIHRoZSBsYXp5IGZpbGUgZmlyc3QKICAgICAgICB2YXIg
c3RyZWFtX29wcyA9IHt9OwogICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMobm9kZS5zdHJl
YW1fb3BzKTsKICAgICAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7CiAgICAgICAgICB2
YXIgZm4gPSBub2RlLnN0cmVhbV9vcHNba2V5XTsKICAgICAgICAgIHN0cmVhbV9vcHNba2V5XSA9
IGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZiAoIUZTLmZvcmNlTG9hZEZpbGUobm9kZSkpIHsK
ICAgICAgICAgICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FSU8pOwog
ICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseShudWxsLCBhcmd1bWVudHMp
OwogICAgICAgICAgfTsKICAgICAgICB9KTsKICAgICAgICAvLyB1c2UgYSBjdXN0b20gcmVhZCBm
dW5jdGlvbgogICAgICAgIHN0cmVhbV9vcHMucmVhZCA9IGZ1bmN0aW9uKHN0cmVhbSwgYnVmZmVy
LCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24pIHsKICAgICAgICAgIGlmICghRlMuZm9yY2VMb2Fk
RmlsZShub2RlKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19D
T0RFUy5FSU8pOwogICAgICAgICAgfQogICAgICAgICAgdmFyIGNvbnRlbnRzID0gc3RyZWFtLm5v
ZGUuY29udGVudHM7CiAgICAgICAgICB2YXIgc2l6ZSA9IE1hdGgubWluKGNvbnRlbnRzLmxlbmd0
aCAtIHBvc2l0aW9uLCBsZW5ndGgpOwogICAgICAgICAgaWYgKGNvbnRlbnRzLnNsaWNlKSB7IC8v
IG5vcm1hbCBhcnJheQogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykg
ewogICAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQgKyBpXSA9IGNvbnRlbnRzW3Bvc2l0aW9uICsg
aV07CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7IC8vIExhenlVaW50OEFycmF5IGZyb20gc3luYyBiaW5h
cnkgWEhSCiAgICAgICAgICAgICAgYnVmZmVyW29mZnNldCArIGldID0gY29udGVudHMuZ2V0KHBv
c2l0aW9uICsgaSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBz
aXplOwogICAgICAgIH07CiAgICAgICAgbm9kZS5zdHJlYW1fb3BzID0gc3RyZWFtX29wczsKICAg
ICAgICByZXR1cm4gbm9kZTsKICAgICAgfSxjcmVhdGVQcmVsb2FkZWRGaWxlOmZ1bmN0aW9uIChw
YXJlbnQsIG5hbWUsIHVybCwgY2FuUmVhZCwgY2FuV3JpdGUsIG9ubG9hZCwgb25lcnJvciwgZG9u
dENyZWF0ZUZpbGUpIHsKICAgICAgICBCcm93c2VyLmluaXQoKTsKICAgICAgICAvLyBUT0RPIHdl
IHNob3VsZCBhbGxvdyBwZW9wbGUgdG8ganVzdCBwYXNzIGluIGEgY29tcGxldGUgZmlsZW5hbWUg
aW5zdGVhZAogICAgICAgIC8vIG9mIHBhcmVudCBhbmQgbmFtZSBiZWluZyB0aGF0IHdlIGp1c3Qg
am9pbiB0aGVtIGFueXdheXMKICAgICAgICB2YXIgZnVsbG5hbWUgPSBQQVRILnJlc29sdmUoUEFU
SC5qb2luKHBhcmVudCwgbmFtZSkpOwogICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NEYXRhKGJ5dGVB
cnJheSkgewogICAgICAgICAgZnVuY3Rpb24gZmluaXNoKGJ5dGVBcnJheSkgewogICAgICAgICAg
ICBpZiAoIWRvbnRDcmVhdGVGaWxlKSB7CiAgICAgICAgICAgICAgRlMuY3JlYXRlRGF0YUZpbGUo
cGFyZW50LCBuYW1lLCBieXRlQXJyYXksIGNhblJlYWQsIGNhbldyaXRlKTsKICAgICAgICAgICAg
fQogICAgICAgICAgICBpZiAob25sb2FkKSBvbmxvYWQoKTsKICAgICAgICAgICAgcmVtb3ZlUnVu
RGVwZW5kZW5jeSgnY3AgJyArIGZ1bGxuYW1lKTsKICAgICAgICAgIH0KICAgICAgICAgIHZhciBo
YW5kbGVkID0gZmFsc2U7CiAgICAgICAgICBNb2R1bGVbJ3ByZWxvYWRQbHVnaW5zJ10uZm9yRWFj
aChmdW5jdGlvbihwbHVnaW4pIHsKICAgICAgICAgICAgaWYgKGhhbmRsZWQpIHJldHVybjsKICAg
ICAgICAgICAgaWYgKHBsdWdpblsnY2FuSGFuZGxlJ10oZnVsbG5hbWUpKSB7CiAgICAgICAgICAg
ICAgcGx1Z2luWydoYW5kbGUnXShieXRlQXJyYXksIGZ1bGxuYW1lLCBmaW5pc2gsIGZ1bmN0aW9u
KCkgewogICAgICAgICAgICAgICAgaWYgKG9uZXJyb3IpIG9uZXJyb3IoKTsKICAgICAgICAgICAg
ICAgIHJlbW92ZVJ1bkRlcGVuZGVuY3koJ2NwICcgKyBmdWxsbmFtZSk7CiAgICAgICAgICAgICAg
fSk7CiAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAg
IH0pOwogICAgICAgICAgaWYgKCFoYW5kbGVkKSBmaW5pc2goYnl0ZUFycmF5KTsKICAgICAgICB9
CiAgICAgICAgYWRkUnVuRGVwZW5kZW5jeSgnY3AgJyArIGZ1bGxuYW1lKTsKICAgICAgICBpZiAo
dHlwZW9mIHVybCA9PSAnc3RyaW5nJykgewogICAgICAgICAgQnJvd3Nlci5hc3luY0xvYWQodXJs
LCBmdW5jdGlvbihieXRlQXJyYXkpIHsKICAgICAgICAgICAgcHJvY2Vzc0RhdGEoYnl0ZUFycmF5
KTsKICAgICAgICAgIH0sIG9uZXJyb3IpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBwcm9j
ZXNzRGF0YSh1cmwpOwogICAgICAgIH0KICAgICAgfSxjcmVhdGVEZWZhdWx0RGlyZWN0b3JpZXM6
ZnVuY3Rpb24gKCkgewogICAgICAgIEZTLm1rZGlyKCcvdG1wJywgMDc3Nyk7CiAgICAgIH0sY3Jl
YXRlRGVmYXVsdERldmljZXM6ZnVuY3Rpb24gKCkgewogICAgICAgIC8vIGNyZWF0ZSAvZGV2CiAg
ICAgICAgRlMubWtkaXIoJy9kZXYnLCAwNzc3KTsKICAgICAgICAvLyBzZXR1cCAvZGV2L251bGwK
ICAgICAgICBGUy5yZWdpc3RlckRldmljZShGUy5tYWtlZGV2KDEsIDMpLCB7CiAgICAgICAgICBy
ZWFkOiBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH0sCiAgICAgICAgICB3cml0ZTogZnVuY3Rpb24o
KSB7IHJldHVybiAwOyB9CiAgICAgICAgfSk7CiAgICAgICAgRlMubWtkZXYoJy9kZXYvbnVsbCcs
IDA2NjYsIEZTLm1ha2VkZXYoMSwgMykpOwogICAgICAgIC8vIHNldHVwIC9kZXYvdHR5IGFuZCAv
ZGV2L3R0eTEKICAgICAgICAvLyBzdGRlcnIgbmVlZHMgdG8gcHJpbnQgb3V0cHV0IHVzaW5nIE1v
ZHVsZVsncHJpbnRFcnInXQogICAgICAgIC8vIHNvIHdlIHJlZ2lzdGVyIGEgc2Vjb25kIHR0eSBq
dXN0IGZvciBpdC4KICAgICAgICBUVFkucmVnaXN0ZXIoRlMubWFrZWRldig1LCAwKSwgVFRZLmRl
ZmF1bHRfdHR5X29wcyk7CiAgICAgICAgVFRZLnJlZ2lzdGVyKEZTLm1ha2VkZXYoNiwgMCksIFRU
WS5kZWZhdWx0X3R0eTFfb3BzKTsKICAgICAgICBGUy5ta2RldignL2Rldi90dHknLCAwNjY2LCBG
Uy5tYWtlZGV2KDUsIDApKTsKICAgICAgICBGUy5ta2RldignL2Rldi90dHkxJywgMDY2NiwgRlMu
bWFrZWRldig2LCAwKSk7CiAgICAgICAgLy8gd2UncmUgbm90IGdvaW5nIHRvIGVtdWxhdGUgdGhl
IGFjdHVhbCBzaG0gZGV2aWNlLAogICAgICAgIC8vIGp1c3QgY3JlYXRlIHRoZSB0bXAgZGlycyB0
aGF0IHJlc2lkZSBpbiBpdCBjb21tb25seQogICAgICAgIEZTLm1rZGlyKCcvZGV2L3NobScsIDA3
NzcpOwogICAgICAgIEZTLm1rZGlyKCcvZGV2L3NobS90bXAnLCAwNzc3KTsKICAgICAgfSxjcmVh
dGVTdGFuZGFyZFN0cmVhbXM6ZnVuY3Rpb24gKCkgewogICAgICAgIC8vIFRPRE8gZGVwcmVjYXRl
IHRoZSBvbGQgZnVuY3Rpb25hbGl0eSBvZiBhIHNpbmdsZQogICAgICAgIC8vIGlucHV0IC8gb3V0
cHV0IGNhbGxiYWNrIGFuZCB0aGF0IHV0aWxpemVzIEZTLmNyZWF0ZURldmljZQogICAgICAgIC8v
IGFuZCBpbnN0ZWFkIHJlcXVpcmUgYSB1bmlxdWUgc2V0IG9mIHN0cmVhbSBvcHMKICAgICAgICAv
LyBieSBkZWZhdWx0LCB3ZSBzeW1saW5rIHRoZSBzdGFuZGFyZCBzdHJlYW1zIHRvIHRoZQogICAg
ICAgIC8vIGRlZmF1bHQgdHR5IGRldmljZXMuIGhvd2V2ZXIsIGlmIHRoZSBzdGFuZGFyZCBzdHJl
YW1zCiAgICAgICAgLy8gaGF2ZSBiZWVuIG92ZXJ3cml0dGVuIHdlIGNyZWF0ZSBhIHVuaXF1ZSBk
ZXZpY2UgZm9yCiAgICAgICAgLy8gdGhlbSBpbnN0ZWFkLgogICAgICAgIGlmIChNb2R1bGVbJ3N0
ZGluJ10pIHsKICAgICAgICAgIEZTLmNyZWF0ZURldmljZSgnL2RldicsICdzdGRpbicsIE1vZHVs
ZVsnc3RkaW4nXSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIEZTLnN5bWxpbmsoJy9kZXYv
dHR5JywgJy9kZXYvc3RkaW4nKTsKICAgICAgICB9CiAgICAgICAgaWYgKE1vZHVsZVsnc3Rkb3V0
J10pIHsKICAgICAgICAgIEZTLmNyZWF0ZURldmljZSgnL2RldicsICdzdGRvdXQnLCBudWxsLCBN
b2R1bGVbJ3N0ZG91dCddKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgRlMuc3ltbGluaygn
L2Rldi90dHknLCAnL2Rldi9zdGRvdXQnKTsKICAgICAgICB9CiAgICAgICAgaWYgKE1vZHVsZVsn
c3RkZXJyJ10pIHsKICAgICAgICAgIEZTLmNyZWF0ZURldmljZSgnL2RldicsICdzdGRlcnInLCBu
dWxsLCBNb2R1bGVbJ3N0ZGVyciddKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgRlMuc3lt
bGluaygnL2Rldi90dHkxJywgJy9kZXYvc3RkZXJyJyk7CiAgICAgICAgfQogICAgICAgIC8vIG9w
ZW4gZGVmYXVsdCBzdHJlYW1zIGZvciB0aGUgc3RkaW4sIHN0ZG91dCBhbmQgc3RkZXJyIGRldmlj
ZXMKICAgICAgICB2YXIgc3RkaW4gPSBGUy5vcGVuKCcvZGV2L3N0ZGluJywgJ3InKTsKICAgICAg
ICBIRUFQMzJbKChfc3RkaW4pPj4yKV09c3RkaW4uZmQ7CiAgICAgICAgYXNzZXJ0KHN0ZGluLmZk
ID09PSAxLCAnaW52YWxpZCBoYW5kbGUgZm9yIHN0ZGluICgnICsgc3RkaW4uZmQgKyAnKScpOwog
ICAgICAgIHZhciBzdGRvdXQgPSBGUy5vcGVuKCcvZGV2L3N0ZG91dCcsICd3Jyk7CiAgICAgICAg
SEVBUDMyWygoX3N0ZG91dCk+PjIpXT1zdGRvdXQuZmQ7CiAgICAgICAgYXNzZXJ0KHN0ZG91dC5m
ZCA9PT0gMiwgJ2ludmFsaWQgaGFuZGxlIGZvciBzdGRvdXQgKCcgKyBzdGRvdXQuZmQgKyAnKScp
OwogICAgICAgIHZhciBzdGRlcnIgPSBGUy5vcGVuKCcvZGV2L3N0ZGVycicsICd3Jyk7CiAgICAg
ICAgSEVBUDMyWygoX3N0ZGVycik+PjIpXT1zdGRlcnIuZmQ7CiAgICAgICAgYXNzZXJ0KHN0ZGVy
ci5mZCA9PT0gMywgJ2ludmFsaWQgaGFuZGxlIGZvciBzdGRlcnIgKCcgKyBzdGRlcnIuZmQgKyAn
KScpOwogICAgICB9LHN0YXRpY0luaXQ6ZnVuY3Rpb24gKCkgewogICAgICAgIEZTLm5hbWVfdGFi
bGUgPSBuZXcgQXJyYXkoNDA5Nik7CiAgICAgICAgRlMucm9vdCA9IEZTLmNyZWF0ZU5vZGUobnVs
bCwgJy8nLCAwMDQwMDAwIHwgMDc3NywgMCk7CiAgICAgICAgRlMubW91bnQoTUVNRlMsIHt9LCAn
LycpOwogICAgICAgIEZTLmNyZWF0ZURlZmF1bHREaXJlY3RvcmllcygpOwogICAgICAgIEZTLmNy
ZWF0ZURlZmF1bHREZXZpY2VzKCk7CiAgICAgIH0saW5pdDpmdW5jdGlvbiAoaW5wdXQsIG91dHB1
dCwgZXJyb3IpIHsKICAgICAgICBhc3NlcnQoIUZTLmluaXQuaW5pdGlhbGl6ZWQsICdGUy5pbml0
IHdhcyBwcmV2aW91c2x5IGNhbGxlZC4gSWYgeW91IHdhbnQgdG8gaW5pdGlhbGl6ZSBsYXRlciB3
aXRoIGN1c3RvbSBwYXJhbWV0ZXJzLCByZW1vdmUgYW55IGVhcmxpZXIgY2FsbHMgKG5vdGUgdGhh
dCBvbmUgaXMgYXV0b21hdGljYWxseSBhZGRlZCB0byB0aGUgZ2VuZXJhdGVkIGNvZGUpJyk7CiAg
ICAgICAgRlMuaW5pdC5pbml0aWFsaXplZCA9IHRydWU7CiAgICAgICAgLy8gQWxsb3cgTW9kdWxl
LnN0ZGluIGV0Yy4gdG8gcHJvdmlkZSBkZWZhdWx0cywgaWYgbm9uZSBleHBsaWNpdGx5IHBhc3Nl
ZCB0byB1cyBoZXJlCiAgICAgICAgTW9kdWxlWydzdGRpbiddID0gaW5wdXQgfHwgTW9kdWxlWydz
dGRpbiddOwogICAgICAgIE1vZHVsZVsnc3Rkb3V0J10gPSBvdXRwdXQgfHwgTW9kdWxlWydzdGRv
dXQnXTsKICAgICAgICBNb2R1bGVbJ3N0ZGVyciddID0gZXJyb3IgfHwgTW9kdWxlWydzdGRlcnIn
XTsKICAgICAgICBGUy5jcmVhdGVTdGFuZGFyZFN0cmVhbXMoKTsKICAgICAgfSxxdWl0OmZ1bmN0
aW9uICgpIHsKICAgICAgICBGUy5pbml0LmluaXRpYWxpemVkID0gZmFsc2U7CiAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBGUy5zdHJlYW1zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICB2YXIg
c3RyZWFtID0gRlMuc3RyZWFtc1tpXTsKICAgICAgICAgIGlmICghc3RyZWFtKSB7CiAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgRlMuY2xvc2Uoc3RyZWFtKTsKICAg
ICAgICB9CiAgICAgIH0sbW91bnQ6ZnVuY3Rpb24gKHR5cGUsIG9wdHMsIG1vdW50cG9pbnQpIHsK
ICAgICAgICB2YXIgbW91bnQgPSB7CiAgICAgICAgICB0eXBlOiB0eXBlLAogICAgICAgICAgb3B0
czogb3B0cywKICAgICAgICAgIG1vdW50cG9pbnQ6IG1vdW50cG9pbnQsCiAgICAgICAgICByb290
OiBudWxsCiAgICAgICAgfTsKICAgICAgICB2YXIgbG9va3VwOwogICAgICAgIGlmIChtb3VudHBv
aW50KSB7CiAgICAgICAgICBsb29rdXAgPSBGUy5sb29rdXBQYXRoKG1vdW50cG9pbnQsIHsgZm9s
bG93OiBmYWxzZSB9KTsKICAgICAgICB9CiAgICAgICAgLy8gY3JlYXRlIGEgcm9vdCBub2RlIGZv
ciB0aGUgZnMKICAgICAgICB2YXIgcm9vdCA9IHR5cGUubW91bnQobW91bnQpOwogICAgICAgIHJv
b3QubW91bnQgPSBtb3VudDsKICAgICAgICBtb3VudC5yb290ID0gcm9vdDsKICAgICAgICAvLyBh
c3NpZ24gdGhlIG1vdW50IGluZm8gdG8gdGhlIG1vdW50cG9pbnQncyBub2RlCiAgICAgICAgaWYg
KGxvb2t1cCkgewogICAgICAgICAgbG9va3VwLm5vZGUubW91bnQgPSBtb3VudDsKICAgICAgICAg
IGxvb2t1cC5ub2RlLm1vdW50ZWQgPSB0cnVlOwogICAgICAgICAgLy8gY29tcGF0aWJpbGl0eSB1
cGRhdGUgRlMucm9vdCBpZiB3ZSBtb3VudCB0byAvCiAgICAgICAgICBpZiAobW91bnRwb2ludCA9
PT0gJy8nKSB7CiAgICAgICAgICAgIEZTLnJvb3QgPSBtb3VudC5yb290OwogICAgICAgICAgfQog
ICAgICAgIH0KICAgICAgICByZXR1cm4gcm9vdDsKICAgICAgfSxsb29rdXA6ZnVuY3Rpb24gKHBh
cmVudCwgbmFtZSkgewogICAgICAgIHJldHVybiBwYXJlbnQubm9kZV9vcHMubG9va3VwKHBhcmVu
dCwgbmFtZSk7CiAgICAgIH0sbWtub2Q6ZnVuY3Rpb24gKHBhdGgsIG1vZGUsIGRldikgewogICAg
ICAgIHZhciBsb29rdXAgPSBGUy5sb29rdXBQYXRoKHBhdGgsIHsgcGFyZW50OiB0cnVlIH0pOwog
ICAgICAgIHZhciBwYXJlbnQgPSBsb29rdXAubm9kZTsKICAgICAgICB2YXIgbmFtZSA9IFBBVEgu
YmFzZW5hbWUocGF0aCk7CiAgICAgICAgdmFyIGVyciA9IEZTLm1heUNyZWF0ZShwYXJlbnQsIG5h
bWUpOwogICAgICAgIGlmIChlcnIpIHsKICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9y
KGVycik7CiAgICAgICAgfQogICAgICAgIGlmICghcGFyZW50Lm5vZGVfb3BzLm1rbm9kKSB7CiAg
ICAgICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FUEVSTSk7CiAgICAg
ICAgfQogICAgICAgIHJldHVybiBwYXJlbnQubm9kZV9vcHMubWtub2QocGFyZW50LCBuYW1lLCBt
b2RlLCBkZXYpOwogICAgICB9LGNyZWF0ZTpmdW5jdGlvbiAocGF0aCwgbW9kZSkgewogICAgICAg
IG1vZGUgJj0gNDA5NTsKICAgICAgICBtb2RlIHw9IDAxMDAwMDA7CiAgICAgICAgcmV0dXJuIEZT
Lm1rbm9kKHBhdGgsIG1vZGUsIDApOwogICAgICB9LG1rZGlyOmZ1bmN0aW9uIChwYXRoLCBtb2Rl
KSB7CiAgICAgICAgbW9kZSAmPSA1MTEgfCAwMDAxMDAwOwogICAgICAgIG1vZGUgfD0gMDA0MDAw
MDsKICAgICAgICByZXR1cm4gRlMubWtub2QocGF0aCwgbW9kZSwgMCk7CiAgICAgIH0sbWtkZXY6
ZnVuY3Rpb24gKHBhdGgsIG1vZGUsIGRldikgewogICAgICAgIG1vZGUgfD0gMDAyMDAwMDsKICAg
ICAgICByZXR1cm4gRlMubWtub2QocGF0aCwgbW9kZSwgZGV2KTsKICAgICAgfSxzeW1saW5rOmZ1
bmN0aW9uIChvbGRwYXRoLCBuZXdwYXRoKSB7CiAgICAgICAgdmFyIGxvb2t1cCA9IEZTLmxvb2t1
cFBhdGgobmV3cGF0aCwgeyBwYXJlbnQ6IHRydWUgfSk7CiAgICAgICAgdmFyIHBhcmVudCA9IGxv
b2t1cC5ub2RlOwogICAgICAgIHZhciBuZXduYW1lID0gUEFUSC5iYXNlbmFtZShuZXdwYXRoKTsK
ICAgICAgICB2YXIgZXJyID0gRlMubWF5Q3JlYXRlKHBhcmVudCwgbmV3bmFtZSk7CiAgICAgICAg
aWYgKGVycikgewogICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoZXJyKTsKICAgICAg
ICB9CiAgICAgICAgaWYgKCFwYXJlbnQubm9kZV9vcHMuc3ltbGluaykgewogICAgICAgICAgdGhy
b3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRVBFUk0pOwogICAgICAgIH0KICAgICAg
ICByZXR1cm4gcGFyZW50Lm5vZGVfb3BzLnN5bWxpbmsocGFyZW50LCBuZXduYW1lLCBvbGRwYXRo
KTsKICAgICAgfSxyZW5hbWU6ZnVuY3Rpb24gKG9sZF9wYXRoLCBuZXdfcGF0aCkgewogICAgICAg
IHZhciBvbGRfZGlybmFtZSA9IFBBVEguZGlybmFtZShvbGRfcGF0aCk7CiAgICAgICAgdmFyIG5l
d19kaXJuYW1lID0gUEFUSC5kaXJuYW1lKG5ld19wYXRoKTsKICAgICAgICB2YXIgb2xkX25hbWUg
PSBQQVRILmJhc2VuYW1lKG9sZF9wYXRoKTsKICAgICAgICB2YXIgbmV3X25hbWUgPSBQQVRILmJh
c2VuYW1lKG5ld19wYXRoKTsKICAgICAgICAvLyBwYXJlbnRzIG11c3QgZXhpc3QKICAgICAgICB2
YXIgbG9va3VwLCBvbGRfZGlyLCBuZXdfZGlyOwogICAgICAgIHRyeSB7CiAgICAgICAgICBsb29r
dXAgPSBGUy5sb29rdXBQYXRoKG9sZF9wYXRoLCB7IHBhcmVudDogdHJ1ZSB9KTsKICAgICAgICAg
IG9sZF9kaXIgPSBsb29rdXAubm9kZTsKICAgICAgICAgIGxvb2t1cCA9IEZTLmxvb2t1cFBhdGgo
bmV3X3BhdGgsIHsgcGFyZW50OiB0cnVlIH0pOwogICAgICAgICAgbmV3X2RpciA9IGxvb2t1cC5u
b2RlOwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vy
cm9yKEVSUk5PX0NPREVTLkVCVVNZKTsKICAgICAgICB9CiAgICAgICAgLy8gbmVlZCB0byBiZSBw
YXJ0IG9mIHRoZSBzYW1lIG1vdW50CiAgICAgICAgaWYgKG9sZF9kaXIubW91bnQgIT09IG5ld19k
aXIubW91bnQpIHsKICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVT
LkVYREVWKTsKICAgICAgICB9CiAgICAgICAgLy8gc291cmNlIG11c3QgZXhpc3QKICAgICAgICB2
YXIgb2xkX25vZGUgPSBGUy5sb29rdXBOb2RlKG9sZF9kaXIsIG9sZF9uYW1lKTsKICAgICAgICAv
LyBvbGQgcGF0aCBzaG91bGQgbm90IGJlIGFuIGFuY2VzdG9yIG9mIHRoZSBuZXcgcGF0aAogICAg
ICAgIHZhciByZWxhdGl2ZSA9IFBBVEgucmVsYXRpdmUob2xkX3BhdGgsIG5ld19kaXJuYW1lKTsK
ICAgICAgICBpZiAocmVsYXRpdmUuY2hhckF0KDApICE9PSAnLicpIHsKICAgICAgICAgIHRocm93
IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVJTlZBTCk7CiAgICAgICAgfQogICAgICAg
IC8vIG5ldyBwYXRoIHNob3VsZCBub3QgYmUgYW4gYW5jZXN0b3Igb2YgdGhlIG9sZCBwYXRoCiAg
ICAgICAgcmVsYXRpdmUgPSBQQVRILnJlbGF0aXZlKG5ld19wYXRoLCBvbGRfZGlybmFtZSk7CiAg
ICAgICAgaWYgKHJlbGF0aXZlLmNoYXJBdCgwKSAhPT0gJy4nKSB7CiAgICAgICAgICB0aHJvdyBu
ZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FTk9URU1QVFkpOwogICAgICAgIH0KICAgICAg
ICAvLyBzZWUgaWYgdGhlIG5ldyBwYXRoIGFscmVhZHkgZXhpc3RzCiAgICAgICAgdmFyIG5ld19u
b2RlOwogICAgICAgIHRyeSB7CiAgICAgICAgICBuZXdfbm9kZSA9IEZTLmxvb2t1cE5vZGUobmV3
X2RpciwgbmV3X25hbWUpOwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgIC8vIG5vdCBm
YXRhbAogICAgICAgIH0KICAgICAgICAvLyBlYXJseSBvdXQgaWYgbm90aGluZyBuZWVkcyB0byBj
aGFuZ2UKICAgICAgICBpZiAob2xkX25vZGUgPT09IG5ld19ub2RlKSB7CiAgICAgICAgICByZXR1
cm47CiAgICAgICAgfQogICAgICAgIC8vIHdlJ2xsIG5lZWQgdG8gZGVsZXRlIHRoZSBvbGQgZW50
cnkKICAgICAgICB2YXIgaXNkaXIgPSBGUy5pc0RpcihvbGRfbm9kZS5tb2RlKTsKICAgICAgICB2
YXIgZXJyID0gRlMubWF5RGVsZXRlKG9sZF9kaXIsIG9sZF9uYW1lLCBpc2Rpcik7CiAgICAgICAg
aWYgKGVycikgewogICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoZXJyKTsKICAgICAg
ICB9CiAgICAgICAgLy8gbmVlZCBkZWxldGUgcGVybWlzc2lvbnMgaWYgd2UnbGwgYmUgb3Zlcndy
aXRpbmcuCiAgICAgICAgLy8gbmVlZCBjcmVhdGUgcGVybWlzc2lvbnMgaWYgbmV3IGRvZXNuJ3Qg
YWxyZWFkeSBleGlzdC4KICAgICAgICBlcnIgPSBuZXdfbm9kZSA/CiAgICAgICAgICBGUy5tYXlE
ZWxldGUobmV3X2RpciwgbmV3X25hbWUsIGlzZGlyKSA6CiAgICAgICAgICBGUy5tYXlDcmVhdGUo
bmV3X2RpciwgbmV3X25hbWUpOwogICAgICAgIGlmIChlcnIpIHsKICAgICAgICAgIHRocm93IG5l
dyBGUy5FcnJub0Vycm9yKGVycik7CiAgICAgICAgfQogICAgICAgIGlmICghb2xkX2Rpci5ub2Rl
X29wcy5yZW5hbWUpIHsKICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NP
REVTLkVQRVJNKTsKICAgICAgICB9CiAgICAgICAgaWYgKEZTLmlzTW91bnRwb2ludChvbGRfbm9k
ZSkgfHwgKG5ld19ub2RlICYmIEZTLmlzTW91bnRwb2ludChuZXdfbm9kZSkpKSB7CiAgICAgICAg
ICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FQlVTWSk7CiAgICAgICAgfQog
ICAgICAgIC8vIGlmIHdlIGFyZSBnb2luZyB0byBjaGFuZ2UgdGhlIHBhcmVudCwgY2hlY2sgd3Jp
dGUgcGVybWlzc2lvbnMKICAgICAgICBpZiAobmV3X2RpciAhPT0gb2xkX2RpcikgewogICAgICAg
ICAgZXJyID0gRlMubm9kZVBlcm1pc3Npb25zKG9sZF9kaXIsICd3Jyk7CiAgICAgICAgICBpZiAo
ZXJyKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKGVycik7CiAgICAgICAg
ICB9CiAgICAgICAgfQogICAgICAgIC8vIHJlbW92ZSB0aGUgbm9kZSBmcm9tIHRoZSBsb29rdXAg
aGFzaAogICAgICAgIEZTLmhhc2hSZW1vdmVOb2RlKG9sZF9ub2RlKTsKICAgICAgICAvLyBkbyB0
aGUgdW5kZXJseWluZyBmcyByZW5hbWUKICAgICAgICB0cnkgewogICAgICAgICAgb2xkX2Rpci5u
b2RlX29wcy5yZW5hbWUob2xkX25vZGUsIG5ld19kaXIsIG5ld19uYW1lKTsKICAgICAgICB9IGNh
dGNoIChlKSB7CiAgICAgICAgICB0aHJvdyBlOwogICAgICAgIH0gZmluYWxseSB7CiAgICAgICAg
ICAvLyBhZGQgdGhlIG5vZGUgYmFjayB0byB0aGUgaGFzaCAoaW4gY2FzZSBub2RlX29wcy5yZW5h
bWUKICAgICAgICAgIC8vIGNoYW5nZWQgaXRzIG5hbWUpCiAgICAgICAgICBGUy5oYXNoQWRkTm9k
ZShvbGRfbm9kZSk7CiAgICAgICAgfQogICAgICB9LHJtZGlyOmZ1bmN0aW9uIChwYXRoKSB7CiAg
ICAgICAgdmFyIGxvb2t1cCA9IEZTLmxvb2t1cFBhdGgocGF0aCwgeyBwYXJlbnQ6IHRydWUgfSk7
CiAgICAgICAgdmFyIHBhcmVudCA9IGxvb2t1cC5ub2RlOwogICAgICAgIHZhciBuYW1lID0gUEFU
SC5iYXNlbmFtZShwYXRoKTsKICAgICAgICB2YXIgbm9kZSA9IEZTLmxvb2t1cE5vZGUocGFyZW50
LCBuYW1lKTsKICAgICAgICB2YXIgZXJyID0gRlMubWF5RGVsZXRlKHBhcmVudCwgbmFtZSwgdHJ1
ZSk7CiAgICAgICAgaWYgKGVycikgewogICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3Io
ZXJyKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFwYXJlbnQubm9kZV9vcHMucm1kaXIpIHsKICAg
ICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVQRVJNKTsKICAgICAg
ICB9CiAgICAgICAgaWYgKEZTLmlzTW91bnRwb2ludChub2RlKSkgewogICAgICAgICAgdGhyb3cg
bmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUJVU1kpOwogICAgICAgIH0KICAgICAgICBw
YXJlbnQubm9kZV9vcHMucm1kaXIocGFyZW50LCBuYW1lKTsKICAgICAgICBGUy5kZXN0cm95Tm9k
ZShub2RlKTsKICAgICAgfSxyZWFkZGlyOmZ1bmN0aW9uIChwYXRoKSB7CiAgICAgICAgdmFyIGxv
b2t1cCA9IEZTLmxvb2t1cFBhdGgocGF0aCwgeyBmb2xsb3c6IHRydWUgfSk7CiAgICAgICAgdmFy
IG5vZGUgPSBsb29rdXAubm9kZTsKICAgICAgICBpZiAoIW5vZGUubm9kZV9vcHMucmVhZGRpcikg
ewogICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRU5PVERJUik7
CiAgICAgICAgfQogICAgICAgIHJldHVybiBub2RlLm5vZGVfb3BzLnJlYWRkaXIobm9kZSk7CiAg
ICAgIH0sdW5saW5rOmZ1bmN0aW9uIChwYXRoKSB7CiAgICAgICAgdmFyIGxvb2t1cCA9IEZTLmxv
b2t1cFBhdGgocGF0aCwgeyBwYXJlbnQ6IHRydWUgfSk7CiAgICAgICAgdmFyIHBhcmVudCA9IGxv
b2t1cC5ub2RlOwogICAgICAgIHZhciBuYW1lID0gUEFUSC5iYXNlbmFtZShwYXRoKTsKICAgICAg
ICB2YXIgbm9kZSA9IEZTLmxvb2t1cE5vZGUocGFyZW50LCBuYW1lKTsKICAgICAgICB2YXIgZXJy
ID0gRlMubWF5RGVsZXRlKHBhcmVudCwgbmFtZSwgZmFsc2UpOwogICAgICAgIGlmIChlcnIpIHsK
ICAgICAgICAgIC8vIFBPU0lYIHNheXMgdW5saW5rIHNob3VsZCBzZXQgRVBFUk0sIG5vdCBFSVNE
SVIKICAgICAgICAgIGlmIChlcnIgPT09IEVSUk5PX0NPREVTLkVJU0RJUikgZXJyID0gRVJSTk9f
Q09ERVMuRVBFUk07CiAgICAgICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihlcnIpOwogICAg
ICAgIH0KICAgICAgICBpZiAoIXBhcmVudC5ub2RlX29wcy51bmxpbmspIHsKICAgICAgICAgIHRo
cm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVQRVJNKTsKICAgICAgICB9CiAgICAg
ICAgaWYgKEZTLmlzTW91bnRwb2ludChub2RlKSkgewogICAgICAgICAgdGhyb3cgbmV3IEZTLkVy
cm5vRXJyb3IoRVJSTk9fQ09ERVMuRUJVU1kpOwogICAgICAgIH0KICAgICAgICBwYXJlbnQubm9k
ZV9vcHMudW5saW5rKHBhcmVudCwgbmFtZSk7CiAgICAgICAgRlMuZGVzdHJveU5vZGUobm9kZSk7
CiAgICAgIH0scmVhZGxpbms6ZnVuY3Rpb24gKHBhdGgpIHsKICAgICAgICB2YXIgbG9va3VwID0g
RlMubG9va3VwUGF0aChwYXRoLCB7IGZvbGxvdzogZmFsc2UgfSk7CiAgICAgICAgdmFyIGxpbmsg
PSBsb29rdXAubm9kZTsKICAgICAgICBpZiAoIWxpbmsubm9kZV9vcHMucmVhZGxpbmspIHsKICAg
ICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVJTlZBTCk7CiAgICAg
ICAgfQogICAgICAgIHJldHVybiBsaW5rLm5vZGVfb3BzLnJlYWRsaW5rKGxpbmspOwogICAgICB9
LHN0YXQ6ZnVuY3Rpb24gKHBhdGgsIGRvbnRGb2xsb3cpIHsKICAgICAgICB2YXIgbG9va3VwID0g
RlMubG9va3VwUGF0aChwYXRoLCB7IGZvbGxvdzogIWRvbnRGb2xsb3cgfSk7CiAgICAgICAgdmFy
IG5vZGUgPSBsb29rdXAubm9kZTsKICAgICAgICBpZiAoIW5vZGUubm9kZV9vcHMuZ2V0YXR0cikg
ewogICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRVBFUk0pOwog
ICAgICAgIH0KICAgICAgICByZXR1cm4gbm9kZS5ub2RlX29wcy5nZXRhdHRyKG5vZGUpOwogICAg
ICB9LGxzdGF0OmZ1bmN0aW9uIChwYXRoKSB7CiAgICAgICAgcmV0dXJuIEZTLnN0YXQocGF0aCwg
dHJ1ZSk7CiAgICAgIH0sY2htb2Q6ZnVuY3Rpb24gKHBhdGgsIG1vZGUsIGRvbnRGb2xsb3cpIHsK
ICAgICAgICB2YXIgbm9kZTsKICAgICAgICBpZiAodHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKSB7
CiAgICAgICAgICB2YXIgbG9va3VwID0gRlMubG9va3VwUGF0aChwYXRoLCB7IGZvbGxvdzogIWRv
bnRGb2xsb3cgfSk7CiAgICAgICAgICBub2RlID0gbG9va3VwLm5vZGU7CiAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgIG5vZGUgPSBwYXRoOwogICAgICAgIH0KICAgICAgICBpZiAoIW5vZGUubm9k
ZV9vcHMuc2V0YXR0cikgewogICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9f
Q09ERVMuRVBFUk0pOwogICAgICAgIH0KICAgICAgICBub2RlLm5vZGVfb3BzLnNldGF0dHIobm9k
ZSwgewogICAgICAgICAgbW9kZTogKG1vZGUgJiA0MDk1KSB8IChub2RlLm1vZGUgJiB+NDA5NSks
CiAgICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCkKICAgICAgICB9KTsKICAgICAgfSxsY2ht
b2Q6ZnVuY3Rpb24gKHBhdGgsIG1vZGUpIHsKICAgICAgICBGUy5jaG1vZChwYXRoLCBtb2RlLCB0
cnVlKTsKICAgICAgfSxmY2htb2Q6ZnVuY3Rpb24gKGZkLCBtb2RlKSB7CiAgICAgICAgdmFyIHN0
cmVhbSA9IEZTLmdldFN0cmVhbShmZCk7CiAgICAgICAgaWYgKCFzdHJlYW0pIHsKICAgICAgICAg
IHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVCQURGKTsKICAgICAgICB9CiAg
ICAgICAgRlMuY2htb2Qoc3RyZWFtLm5vZGUsIG1vZGUpOwogICAgICB9LGNob3duOmZ1bmN0aW9u
IChwYXRoLCB1aWQsIGdpZCwgZG9udEZvbGxvdykgewogICAgICAgIHZhciBub2RlOwogICAgICAg
IGlmICh0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycpIHsKICAgICAgICAgIHZhciBsb29rdXAgPSBG
Uy5sb29rdXBQYXRoKHBhdGgsIHsgZm9sbG93OiAhZG9udEZvbGxvdyB9KTsKICAgICAgICAgIG5v
ZGUgPSBsb29rdXAubm9kZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbm9kZSA9IHBhdGg7
CiAgICAgICAgfQogICAgICAgIGlmICghbm9kZS5ub2RlX29wcy5zZXRhdHRyKSB7CiAgICAgICAg
ICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FUEVSTSk7CiAgICAgICAgfQog
ICAgICAgIG5vZGUubm9kZV9vcHMuc2V0YXR0cihub2RlLCB7CiAgICAgICAgICB0aW1lc3RhbXA6
IERhdGUubm93KCkKICAgICAgICAgIC8vIHdlIGlnbm9yZSB0aGUgdWlkIC8gZ2lkIGZvciBub3cK
ICAgICAgICB9KTsKICAgICAgfSxsY2hvd246ZnVuY3Rpb24gKHBhdGgsIHVpZCwgZ2lkKSB7CiAg
ICAgICAgRlMuY2hvd24ocGF0aCwgdWlkLCBnaWQsIHRydWUpOwogICAgICB9LGZjaG93bjpmdW5j
dGlvbiAoZmQsIHVpZCwgZ2lkKSB7CiAgICAgICAgdmFyIHN0cmVhbSA9IEZTLmdldFN0cmVhbShm
ZCk7CiAgICAgICAgaWYgKCFzdHJlYW0pIHsKICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vy
cm9yKEVSUk5PX0NPREVTLkVCQURGKTsKICAgICAgICB9CiAgICAgICAgRlMuY2hvd24oc3RyZWFt
Lm5vZGUsIHVpZCwgZ2lkKTsKICAgICAgfSx0cnVuY2F0ZTpmdW5jdGlvbiAocGF0aCwgbGVuKSB7
CiAgICAgICAgaWYgKGxlbiA8IDApIHsKICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9y
KEVSUk5PX0NPREVTLkVJTlZBTCk7CiAgICAgICAgfQogICAgICAgIHZhciBub2RlOwogICAgICAg
IGlmICh0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycpIHsKICAgICAgICAgIHZhciBsb29rdXAgPSBG
Uy5sb29rdXBQYXRoKHBhdGgsIHsgZm9sbG93OiB0cnVlIH0pOwogICAgICAgICAgbm9kZSA9IGxv
b2t1cC5ub2RlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBub2RlID0gcGF0aDsKICAgICAg
ICB9CiAgICAgICAgaWYgKCFub2RlLm5vZGVfb3BzLnNldGF0dHIpIHsKICAgICAgICAgIHRocm93
IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVQRVJNKTsKICAgICAgICB9CiAgICAgICAg
aWYgKEZTLmlzRGlyKG5vZGUubW9kZSkpIHsKICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vy
cm9yKEVSUk5PX0NPREVTLkVJU0RJUik7CiAgICAgICAgfQogICAgICAgIGlmICghRlMuaXNGaWxl
KG5vZGUubW9kZSkpIHsKICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NP
REVTLkVJTlZBTCk7CiAgICAgICAgfQogICAgICAgIHZhciBlcnIgPSBGUy5ub2RlUGVybWlzc2lv
bnMobm9kZSwgJ3cnKTsKICAgICAgICBpZiAoZXJyKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRlMu
RXJybm9FcnJvcihlcnIpOwogICAgICAgIH0KICAgICAgICBub2RlLm5vZGVfb3BzLnNldGF0dHIo
bm9kZSwgewogICAgICAgICAgc2l6ZTogbGVuLAogICAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5v
dygpCiAgICAgICAgfSk7CiAgICAgIH0sZnRydW5jYXRlOmZ1bmN0aW9uIChmZCwgbGVuKSB7CiAg
ICAgICAgdmFyIHN0cmVhbSA9IEZTLmdldFN0cmVhbShmZCk7CiAgICAgICAgaWYgKCFzdHJlYW0p
IHsKICAgICAgICAgIHRocm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVCQURGKTsK
ICAgICAgICB9CiAgICAgICAgaWYgKChzdHJlYW0uZmxhZ3MgJiAzKSA9PT0gMCkgewogICAgICAg
ICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUlOVkFMKTsKICAgICAgICB9
CiAgICAgICAgRlMudHJ1bmNhdGUoc3RyZWFtLm5vZGUsIGxlbik7CiAgICAgIH0sdXRpbWU6ZnVu
Y3Rpb24gKHBhdGgsIGF0aW1lLCBtdGltZSkgewogICAgICAgIHZhciBsb29rdXAgPSBGUy5sb29r
dXBQYXRoKHBhdGgsIHsgZm9sbG93OiB0cnVlIH0pOwogICAgICAgIHZhciBub2RlID0gbG9va3Vw
Lm5vZGU7CiAgICAgICAgbm9kZS5ub2RlX29wcy5zZXRhdHRyKG5vZGUsIHsKICAgICAgICAgIHRp
bWVzdGFtcDogTWF0aC5tYXgoYXRpbWUsIG10aW1lKQogICAgICAgIH0pOwogICAgICB9LG9wZW46
ZnVuY3Rpb24gKHBhdGgsIGZsYWdzLCBtb2RlLCBmZF9zdGFydCwgZmRfZW5kKSB7CiAgICAgICAg
cGF0aCA9IFBBVEgubm9ybWFsaXplKHBhdGgpOwogICAgICAgIGZsYWdzID0gdHlwZW9mIGZsYWdz
ID09PSAnc3RyaW5nJyA/IEZTLm1vZGVTdHJpbmdUb0ZsYWdzKGZsYWdzKSA6IGZsYWdzOwogICAg
ICAgIG1vZGUgPSB0eXBlb2YgbW9kZSA9PT0gJ3VuZGVmaW5lZCcgPyAwNjY2IDogbW9kZTsKICAg
ICAgICBpZiAoKGZsYWdzICYgNTEyKSkgewogICAgICAgICAgbW9kZSA9IChtb2RlICYgNDA5NSkg
fCAwMTAwMDAwOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBtb2RlID0gMDsKICAgICAgICB9
CiAgICAgICAgdmFyIG5vZGU7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHZhciBsb29rdXAgPSBG
Uy5sb29rdXBQYXRoKHBhdGgsIHsKICAgICAgICAgICAgZm9sbG93OiAhKGZsYWdzICYgMDIwMDAw
MCkKICAgICAgICAgIH0pOwogICAgICAgICAgbm9kZSA9IGxvb2t1cC5ub2RlOwogICAgICAgICAg
cGF0aCA9IGxvb2t1cC5wYXRoOwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgIC8vIGln
bm9yZQogICAgICAgIH0KICAgICAgICAvLyBwZXJoYXBzIHdlIG5lZWQgdG8gY3JlYXRlIHRoZSBu
b2RlCiAgICAgICAgaWYgKChmbGFncyAmIDUxMikpIHsKICAgICAgICAgIGlmIChub2RlKSB7CiAg
ICAgICAgICAgIC8vIGlmIE9fQ1JFQVQgYW5kIE9fRVhDTCBhcmUgc2V0LCBlcnJvciBvdXQgaWYg
dGhlIG5vZGUgYWxyZWFkeSBleGlzdHMKICAgICAgICAgICAgaWYgKChmbGFncyAmIDIwNDgpKSB7
CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUVYSVNU
KTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gbm9kZSBk
b2Vzbid0IGV4aXN0LCB0cnkgdG8gY3JlYXRlIGl0CiAgICAgICAgICAgIG5vZGUgPSBGUy5ta25v
ZChwYXRoLCBtb2RlLCAwKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCFub2Rl
KSB7CiAgICAgICAgICB0aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FTk9FTlQp
OwogICAgICAgIH0KICAgICAgICAvLyBjYW4ndCB0cnVuY2F0ZSBhIGRldmljZQogICAgICAgIGlm
IChGUy5pc0NocmRldihub2RlLm1vZGUpKSB7CiAgICAgICAgICBmbGFncyAmPSB+MTAyNDsKICAg
ICAgICB9CiAgICAgICAgLy8gY2hlY2sgcGVybWlzc2lvbnMKICAgICAgICB2YXIgZXJyID0gRlMu
bWF5T3Blbihub2RlLCBmbGFncyk7CiAgICAgICAgaWYgKGVycikgewogICAgICAgICAgdGhyb3cg
bmV3IEZTLkVycm5vRXJyb3IoZXJyKTsKICAgICAgICB9CiAgICAgICAgLy8gZG8gdHJ1bmNhdGlv
biBpZiBuZWNlc3NhcnkKICAgICAgICBpZiAoKGZsYWdzICYgMTAyNCkpIHsKICAgICAgICAgIEZT
LnRydW5jYXRlKG5vZGUsIDApOwogICAgICAgIH0KICAgICAgICAvLyByZWdpc3RlciB0aGUgc3Ry
ZWFtIHdpdGggdGhlIGZpbGVzeXN0ZW0KICAgICAgICB2YXIgc3RyZWFtID0gRlMuY3JlYXRlU3Ry
ZWFtKHsKICAgICAgICAgIHBhdGg6IHBhdGgsCiAgICAgICAgICBub2RlOiBub2RlLAogICAgICAg
ICAgZmxhZ3M6IGZsYWdzLAogICAgICAgICAgc2Vla2FibGU6IHRydWUsCiAgICAgICAgICBwb3Np
dGlvbjogMCwKICAgICAgICAgIHN0cmVhbV9vcHM6IG5vZGUuc3RyZWFtX29wcywKICAgICAgICAg
IC8vIHVzZWQgYnkgdGhlIGZpbGUgZmFtaWx5IGxpYmMgY2FsbHMgKGZvcGVuLCBmd3JpdGUsIGZl
cnJvciwgZXRjLikKICAgICAgICAgIHVuZ290dGVuOiBbXSwKICAgICAgICAgIGVycm9yOiBmYWxz
ZQogICAgICAgIH0sIGZkX3N0YXJ0LCBmZF9lbmQpOwogICAgICAgIC8vIGNhbGwgdGhlIG5ldyBz
dHJlYW0ncyBvcGVuIGZ1bmN0aW9uCiAgICAgICAgaWYgKHN0cmVhbS5zdHJlYW1fb3BzLm9wZW4p
IHsKICAgICAgICAgIHN0cmVhbS5zdHJlYW1fb3BzLm9wZW4oc3RyZWFtKTsKICAgICAgICB9CiAg
ICAgICAgcmV0dXJuIHN0cmVhbTsKICAgICAgfSxjbG9zZTpmdW5jdGlvbiAoc3RyZWFtKSB7CiAg
ICAgICAgdHJ5IHsKICAgICAgICAgIGlmIChzdHJlYW0uc3RyZWFtX29wcy5jbG9zZSkgewogICAg
ICAgICAgICBzdHJlYW0uc3RyZWFtX29wcy5jbG9zZShzdHJlYW0pOwogICAgICAgICAgfQogICAg
ICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgIHRocm93IGU7CiAgICAgICAgfSBmaW5hbGx5IHsK
ICAgICAgICAgIEZTLmNsb3NlU3RyZWFtKHN0cmVhbS5mZCk7CiAgICAgICAgfQogICAgICB9LGxs
c2VlazpmdW5jdGlvbiAoc3RyZWFtLCBvZmZzZXQsIHdoZW5jZSkgewogICAgICAgIGlmICghc3Ry
ZWFtLnNlZWthYmxlIHx8ICFzdHJlYW0uc3RyZWFtX29wcy5sbHNlZWspIHsKICAgICAgICAgIHRo
cm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVTUElQRSk7CiAgICAgICAgfQogICAg
ICAgIHJldHVybiBzdHJlYW0uc3RyZWFtX29wcy5sbHNlZWsoc3RyZWFtLCBvZmZzZXQsIHdoZW5j
ZSk7CiAgICAgIH0scmVhZDpmdW5jdGlvbiAoc3RyZWFtLCBidWZmZXIsIG9mZnNldCwgbGVuZ3Ro
LCBwb3NpdGlvbikgewogICAgICAgIGlmIChsZW5ndGggPCAwIHx8IHBvc2l0aW9uIDwgMCkgewog
ICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUlOVkFMKTsKICAg
ICAgICB9CiAgICAgICAgaWYgKChzdHJlYW0uZmxhZ3MgJiAzKSA9PT0gMSkgewogICAgICAgICAg
dGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUJBREYpOwogICAgICAgIH0KICAg
ICAgICBpZiAoRlMuaXNEaXIoc3RyZWFtLm5vZGUubW9kZSkpIHsKICAgICAgICAgIHRocm93IG5l
dyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVJU0RJUik7CiAgICAgICAgfQogICAgICAgIGlm
ICghc3RyZWFtLnN0cmVhbV9vcHMucmVhZCkgewogICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5v
RXJyb3IoRVJSTk9fQ09ERVMuRUlOVkFMKTsKICAgICAgICB9CiAgICAgICAgdmFyIHNlZWtpbmcg
PSB0cnVlOwogICAgICAgIGlmICh0eXBlb2YgcG9zaXRpb24gPT09ICd1bmRlZmluZWQnKSB7CiAg
ICAgICAgICBwb3NpdGlvbiA9IHN0cmVhbS5wb3NpdGlvbjsKICAgICAgICAgIHNlZWtpbmcgPSBm
YWxzZTsKICAgICAgICB9IGVsc2UgaWYgKCFzdHJlYW0uc2Vla2FibGUpIHsKICAgICAgICAgIHRo
cm93IG5ldyBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVTUElQRSk7CiAgICAgICAgfQogICAg
ICAgIHZhciBieXRlc1JlYWQgPSBzdHJlYW0uc3RyZWFtX29wcy5yZWFkKHN0cmVhbSwgYnVmZmVy
LCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24pOwogICAgICAgIGlmICghc2Vla2luZykgc3RyZWFt
LnBvc2l0aW9uICs9IGJ5dGVzUmVhZDsKICAgICAgICByZXR1cm4gYnl0ZXNSZWFkOwogICAgICB9
LHdyaXRlOmZ1bmN0aW9uIChzdHJlYW0sIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9u
KSB7CiAgICAgICAgaWYgKGxlbmd0aCA8IDAgfHwgcG9zaXRpb24gPCAwKSB7CiAgICAgICAgICB0
aHJvdyBuZXcgRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FSU5WQUwpOwogICAgICAgIH0KICAg
ICAgICBpZiAoKHN0cmVhbS5mbGFncyAmIDMpID09PSAwKSB7CiAgICAgICAgICB0aHJvdyBuZXcg
RlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FQkFERik7CiAgICAgICAgfQogICAgICAgIGlmIChG
Uy5pc0RpcihzdHJlYW0ubm9kZS5tb2RlKSkgewogICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5v
RXJyb3IoRVJSTk9fQ09ERVMuRUlTRElSKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFzdHJlYW0u
c3RyZWFtX29wcy53cml0ZSkgewogICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJS
Tk9fQ09ERVMuRUlOVkFMKTsKICAgICAgICB9CiAgICAgICAgdmFyIHNlZWtpbmcgPSB0cnVlOwog
ICAgICAgIGlmICh0eXBlb2YgcG9zaXRpb24gPT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgICBw
b3NpdGlvbiA9IHN0cmVhbS5wb3NpdGlvbjsKICAgICAgICAgIHNlZWtpbmcgPSBmYWxzZTsKICAg
ICAgICB9IGVsc2UgaWYgKCFzdHJlYW0uc2Vla2FibGUpIHsKICAgICAgICAgIHRocm93IG5ldyBG
Uy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVTUElQRSk7CiAgICAgICAgfQogICAgICAgIGlmIChz
dHJlYW0uZmxhZ3MgJiA4KSB7CiAgICAgICAgICAvLyBzZWVrIHRvIHRoZSBlbmQgYmVmb3JlIHdy
aXRpbmcgaW4gYXBwZW5kIG1vZGUKICAgICAgICAgIEZTLmxsc2VlayhzdHJlYW0sIDAsIDIpOwog
ICAgICAgIH0KICAgICAgICB2YXIgYnl0ZXNXcml0dGVuID0gc3RyZWFtLnN0cmVhbV9vcHMud3Jp
dGUoc3RyZWFtLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbik7CiAgICAgICAgaWYg
KCFzZWVraW5nKSBzdHJlYW0ucG9zaXRpb24gKz0gYnl0ZXNXcml0dGVuOwogICAgICAgIHJldHVy
biBieXRlc1dyaXR0ZW47CiAgICAgIH0sYWxsb2NhdGU6ZnVuY3Rpb24gKHN0cmVhbSwgb2Zmc2V0
LCBsZW5ndGgpIHsKICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCBsZW5ndGggPD0gMCkgewogICAg
ICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUlOVkFMKTsKICAgICAg
ICB9CiAgICAgICAgaWYgKChzdHJlYW0uZmxhZ3MgJiAzKSA9PT0gMCkgewogICAgICAgICAgdGhy
b3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUJBREYpOwogICAgICAgIH0KICAgICAg
ICBpZiAoIUZTLmlzRmlsZShzdHJlYW0ubm9kZS5tb2RlKSAmJiAhRlMuaXNEaXIobm9kZS5tb2Rl
KSkgewogICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRU5PREVW
KTsKICAgICAgICB9CiAgICAgICAgaWYgKCFzdHJlYW0uc3RyZWFtX29wcy5hbGxvY2F0ZSkgewog
ICAgICAgICAgdGhyb3cgbmV3IEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRU9QTk9UU1VQUCk7
CiAgICAgICAgfQogICAgICAgIHN0cmVhbS5zdHJlYW1fb3BzLmFsbG9jYXRlKHN0cmVhbSwgb2Zm
c2V0LCBsZW5ndGgpOwogICAgICB9LG1tYXA6ZnVuY3Rpb24gKHN0cmVhbSwgYnVmZmVyLCBvZmZz
ZXQsIGxlbmd0aCwgcG9zaXRpb24sIHByb3QsIGZsYWdzKSB7CiAgICAgICAgLy8gVE9ETyBpZiBQ
Uk9UIGlzIFBST1RfV1JJVEUsIG1ha2Ugc3VyZSB3ZSBoYXZlIHdyaXRlIGFjY2VzcwogICAgICAg
IGlmICgoc3RyZWFtLmZsYWdzICYgMykgPT09IDEpIHsKICAgICAgICAgIHRocm93IG5ldyBGUy5F
cnJub0Vycm9yKEVSUk5PX0NPREVTLkVBQ0NFUyk7CiAgICAgICAgfQogICAgICAgIGlmICghc3Ry
ZWFtLnN0cmVhbV9vcHMubW1hcCkgewogICAgICAgICAgdGhyb3cgbmV3IEZTLmVycm5vRXJyb3Io
RVJSTk9fQ09ERVMuRU5PREVWKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHN0cmVhbS5zdHJl
YW1fb3BzLm1tYXAoc3RyZWFtLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgcHJv
dCwgZmxhZ3MpOwogICAgICB9fTsKICBmdW5jdGlvbiBfc2VuZChmZCwgYnVmLCBsZW4sIGZsYWdz
KSB7CiAgICAgIHZhciBpbmZvID0gRlMuZ2V0U3RyZWFtKGZkKTsKICAgICAgaWYgKCFpbmZvKSB7
CiAgICAgICAgX19fc2V0RXJyTm8oRVJSTk9fQ09ERVMuRUJBREYpOwogICAgICAgIHJldHVybiAt
MTsKICAgICAgfQogICAgICBpZiAoaW5mby5zb2NrZXQucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0
LkNMT1NJTkcgfHwgaW5mby5zb2NrZXQucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0LkNMT1NFRCkg
ewogICAgICAgIF9fX3NldEVyck5vKEVSUk5PX0NPREVTLkVOT1RDT05OKTsKICAgICAgICByZXR1
cm4gLTE7CiAgICAgIH0gZWxzZSBpZiAoaW5mby5zb2NrZXQucmVhZHlTdGF0ZSA9PT0gV2ViU29j
a2V0LkNPTk5FQ1RJTkcpIHsKICAgICAgICBfX19zZXRFcnJObyhFUlJOT19DT0RFUy5FQUdBSU4p
OwogICAgICAgIHJldHVybiAtMTsKICAgICAgfQogICAgICBpbmZvLnNlbmRlcihIRUFQVTguc3Vi
YXJyYXkoYnVmLCBidWYrbGVuKSk7CiAgICAgIHJldHVybiBsZW47CiAgICB9CiAgZnVuY3Rpb24g
X3B3cml0ZShmaWxkZXMsIGJ1ZiwgbmJ5dGUsIG9mZnNldCkgewogICAgICAvLyBzc2l6ZV90IHB3
cml0ZShpbnQgZmlsZGVzLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBuYnl0ZSwgb2ZmX3Qgb2Zm
c2V0KTsKICAgICAgLy8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwMDA5
NTM5OS9mdW5jdGlvbnMvd3JpdGUuaHRtbAogICAgICB2YXIgc3RyZWFtID0gRlMuZ2V0U3RyZWFt
KGZpbGRlcyk7CiAgICAgIGlmICghc3RyZWFtKSB7CiAgICAgICAgX19fc2V0RXJyTm8oRVJSTk9f
Q09ERVMuRUJBREYpOwogICAgICAgIHJldHVybiAtMTsKICAgICAgfQogICAgICB0cnkgewogICAg
ICAgIHZhciBzbGFiID0gSEVBUDg7CiAgICAgICAgcmV0dXJuIEZTLndyaXRlKHN0cmVhbSwgc2xh
YiwgYnVmLCBuYnl0ZSwgb2Zmc2V0KTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIEZTLmhh
bmRsZUZTRXJyb3IoZSk7CiAgICAgICAgcmV0dXJuIC0xOwogICAgICB9CiAgICB9ZnVuY3Rpb24g
X3dyaXRlKGZpbGRlcywgYnVmLCBuYnl0ZSkgewogICAgICAvLyBzc2l6ZV90IHdyaXRlKGludCBm
aWxkZXMsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IG5ieXRlKTsKICAgICAgLy8gaHR0cDovL3B1
YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwMDA5NTM5OS9mdW5jdGlvbnMvd3JpdGUuaHRt
bAogICAgICB2YXIgc3RyZWFtID0gRlMuZ2V0U3RyZWFtKGZpbGRlcyk7CiAgICAgIGlmICghc3Ry
ZWFtKSB7CiAgICAgICAgX19fc2V0RXJyTm8oRVJSTk9fQ09ERVMuRUJBREYpOwogICAgICAgIHJl
dHVybiAtMTsKICAgICAgfQogICAgICBpZiAoc3RyZWFtICYmICgnc29ja2V0JyBpbiBzdHJlYW0p
KSB7CiAgICAgICAgcmV0dXJuIF9zZW5kKGZpbGRlcywgYnVmLCBuYnl0ZSwgMCk7CiAgICAgIH0K
ICAgICAgdHJ5IHsKICAgICAgICB2YXIgc2xhYiA9IEhFQVA4OwogICAgICAgIHJldHVybiBGUy53
cml0ZShzdHJlYW0sIHNsYWIsIGJ1ZiwgbmJ5dGUpOwogICAgICB9IGNhdGNoIChlKSB7CiAgICAg
ICAgRlMuaGFuZGxlRlNFcnJvcihlKTsKICAgICAgICByZXR1cm4gLTE7CiAgICAgIH0KICAgIH1m
dW5jdGlvbiBfZndyaXRlKHB0ciwgc2l6ZSwgbml0ZW1zLCBzdHJlYW0pIHsKICAgICAgLy8gc2l6
ZV90IGZ3cml0ZShjb25zdCB2b2lkICpyZXN0cmljdCBwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qg
bml0ZW1zLCBGSUxFICpyZXN0cmljdCBzdHJlYW0pOwogICAgICAvLyBodHRwOi8vcHVicy5vcGVu
Z3JvdXAub3JnL29ubGluZXB1YnMvMDAwMDk1Mzk5L2Z1bmN0aW9ucy9md3JpdGUuaHRtbAogICAg
ICB2YXIgYnl0ZXNUb1dyaXRlID0gbml0ZW1zICogc2l6ZTsKICAgICAgaWYgKGJ5dGVzVG9Xcml0
ZSA9PSAwKSByZXR1cm4gMDsKICAgICAgdmFyIGJ5dGVzV3JpdHRlbiA9IF93cml0ZShzdHJlYW0s
IHB0ciwgYnl0ZXNUb1dyaXRlKTsKICAgICAgaWYgKGJ5dGVzV3JpdHRlbiA9PSAtMSkgewogICAg
ICAgIHZhciBzdHJlYW1PYmogPSBGUy5nZXRTdHJlYW0oc3RyZWFtKTsKICAgICAgICBpZiAoc3Ry
ZWFtT2JqKSBzdHJlYW1PYmouZXJyb3IgPSB0cnVlOwogICAgICAgIHJldHVybiAwOwogICAgICB9
IGVsc2UgewogICAgICAgIHJldHVybiBNYXRoLmZsb29yKGJ5dGVzV3JpdHRlbiAvIHNpemUpOwog
ICAgICB9CiAgICB9CiAgTW9kdWxlWyJfc3RybGVuIl0gPSBfc3RybGVuOwogIGZ1bmN0aW9uIF9f
cmVhbGx5TmVnYXRpdmUoeCkgewogICAgICByZXR1cm4geCA8IDAgfHwgKHggPT09IDAgJiYgKDEv
eCkgPT09IC1JbmZpbml0eSk7CiAgICB9ZnVuY3Rpb24gX19mb3JtYXRTdHJpbmcoZm9ybWF0LCB2
YXJhcmdzKSB7CiAgICAgIHZhciB0ZXh0SW5kZXggPSBmb3JtYXQ7CiAgICAgIHZhciBhcmdJbmRl
eCA9IDA7CiAgICAgIGZ1bmN0aW9uIGdldE5leHRBcmcodHlwZSkgewogICAgICAgIC8vIE5PVEU6
IEV4cGxpY2l0bHkgaWdub3JpbmcgdHlwZSBzYWZldHkuIE90aGVyd2lzZSB0aGlzIGZhaWxzOgog
ICAgICAgIC8vICAgICAgIGludCB4ID0gNDsgcHJpbnRmKCIlY1xuIiwgKGNoYXIpeCk7CiAgICAg
ICAgdmFyIHJldDsKICAgICAgICBpZiAodHlwZSA9PT0gJ2RvdWJsZScpIHsKICAgICAgICAgIHJl
dCA9IEhFQVBGNjRbKCgodmFyYXJncykrKGFyZ0luZGV4KSk+PjMpXTsKICAgICAgICB9IGVsc2Ug
aWYgKHR5cGUgPT0gJ2k2NCcpIHsKICAgICAgICAgIHJldCA9IFtIRUFQMzJbKCgodmFyYXJncykr
KGFyZ0luZGV4KSk+PjIpXSwKICAgICAgICAgICAgICAgICBIRUFQMzJbKCgodmFyYXJncykrKGFy
Z0luZGV4KzgpKT4+MildXTsKICAgICAgICAgIGFyZ0luZGV4ICs9IDg7IC8vIGVhY2ggMzItYml0
IGNodW5rIGlzIGluIGEgNjQtYml0IGJsb2NrCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHR5
cGUgPSAnaTMyJzsgLy8gdmFyYXJncyBhcmUgYWx3YXlzIGkzMiwgaTY0LCBvciBkb3VibGUKICAg
ICAgICAgIHJldCA9IEhFQVAzMlsoKCh2YXJhcmdzKSsoYXJnSW5kZXgpKT4+MildOwogICAgICAg
IH0KICAgICAgICBhcmdJbmRleCArPSBNYXRoLm1heChSdW50aW1lLmdldE5hdGl2ZUZpZWxkU2l6
ZSh0eXBlKSwgUnVudGltZS5nZXRBbGlnblNpemUodHlwZSwgbnVsbCwgdHJ1ZSkpOwogICAgICAg
IHJldHVybiByZXQ7CiAgICAgIH0KICAgICAgdmFyIHJldCA9IFtdOwogICAgICB2YXIgY3Vyciwg
bmV4dCwgY3VyckFyZzsKICAgICAgd2hpbGUoMSkgewogICAgICAgIHZhciBzdGFydFRleHRJbmRl
eCA9IHRleHRJbmRleDsKICAgICAgICBjdXJyID0gSEVBUDhbKHRleHRJbmRleCldOwogICAgICAg
IGlmIChjdXJyID09PSAwKSBicmVhazsKICAgICAgICBuZXh0ID0gSEVBUDhbKCh0ZXh0SW5kZXgr
MSl8MCldOwogICAgICAgIGlmIChjdXJyID09IDM3KSB7CiAgICAgICAgICAvLyBIYW5kbGUgZmxh
Z3MuCiAgICAgICAgICB2YXIgZmxhZ0Fsd2F5c1NpZ25lZCA9IGZhbHNlOwogICAgICAgICAgdmFy
IGZsYWdMZWZ0QWxpZ24gPSBmYWxzZTsKICAgICAgICAgIHZhciBmbGFnQWx0ZXJuYXRpdmUgPSBm
YWxzZTsKICAgICAgICAgIHZhciBmbGFnWmVyb1BhZCA9IGZhbHNlOwogICAgICAgICAgZmxhZ3NM
b29wOiB3aGlsZSAoMSkgewogICAgICAgICAgICBzd2l0Y2ggKG5leHQpIHsKICAgICAgICAgICAg
ICBjYXNlIDQzOgogICAgICAgICAgICAgICAgZmxhZ0Fsd2F5c1NpZ25lZCA9IHRydWU7CiAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlIDQ1OgogICAgICAgICAgICAgICAg
ZmxhZ0xlZnRBbGlnbiA9IHRydWU7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICBjYXNlIDM1OgogICAgICAgICAgICAgICAgZmxhZ0FsdGVybmF0aXZlID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgNDg6CiAgICAgICAgICAgICAgICBp
ZiAoZmxhZ1plcm9QYWQpIHsKICAgICAgICAgICAgICAgICAgYnJlYWsgZmxhZ3NMb29wOwogICAg
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgZmxhZ1plcm9QYWQgPSB0cnVl
OwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgICAgYnJlYWsgZmxhZ3NMb29wOwogICAgICAgICAgICB9
CiAgICAgICAgICAgIHRleHRJbmRleCsrOwogICAgICAgICAgICBuZXh0ID0gSEVBUDhbKCh0ZXh0
SW5kZXgrMSl8MCldOwogICAgICAgICAgfQogICAgICAgICAgLy8gSGFuZGxlIHdpZHRoLgogICAg
ICAgICAgdmFyIHdpZHRoID0gMDsKICAgICAgICAgIGlmIChuZXh0ID09IDQyKSB7CiAgICAgICAg
ICAgIHdpZHRoID0gZ2V0TmV4dEFyZygnaTMyJyk7CiAgICAgICAgICAgIHRleHRJbmRleCsrOwog
ICAgICAgICAgICBuZXh0ID0gSEVBUDhbKCh0ZXh0SW5kZXgrMSl8MCldOwogICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgd2hpbGUgKG5leHQgPj0gNDggJiYgbmV4dCA8PSA1NykgewogICAg
ICAgICAgICAgIHdpZHRoID0gd2lkdGggKiAxMCArIChuZXh0IC0gNDgpOwogICAgICAgICAgICAg
IHRleHRJbmRleCsrOwogICAgICAgICAgICAgIG5leHQgPSBIRUFQOFsoKHRleHRJbmRleCsxKXww
KV07CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIC8vIEhhbmRsZSBwcmVjaXNp
b24uCiAgICAgICAgICB2YXIgcHJlY2lzaW9uU2V0ID0gZmFsc2U7CiAgICAgICAgICBpZiAobmV4
dCA9PSA0NikgewogICAgICAgICAgICB2YXIgcHJlY2lzaW9uID0gMDsKICAgICAgICAgICAgcHJl
Y2lzaW9uU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgdGV4dEluZGV4Kys7CiAgICAgICAgICAgIG5l
eHQgPSBIRUFQOFsoKHRleHRJbmRleCsxKXwwKV07CiAgICAgICAgICAgIGlmIChuZXh0ID09IDQy
KSB7CiAgICAgICAgICAgICAgcHJlY2lzaW9uID0gZ2V0TmV4dEFyZygnaTMyJyk7CiAgICAgICAg
ICAgICAgdGV4dEluZGV4Kys7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgd2hp
bGUoMSkgewogICAgICAgICAgICAgICAgdmFyIHByZWNpc2lvbkNociA9IEhFQVA4WygodGV4dElu
ZGV4KzEpfDApXTsKICAgICAgICAgICAgICAgIGlmIChwcmVjaXNpb25DaHIgPCA0OCB8fAogICAg
ICAgICAgICAgICAgICAgIHByZWNpc2lvbkNociA+IDU3KSBicmVhazsKICAgICAgICAgICAgICAg
IHByZWNpc2lvbiA9IHByZWNpc2lvbiAqIDEwICsgKHByZWNpc2lvbkNociAtIDQ4KTsKICAgICAg
ICAgICAgICAgIHRleHRJbmRleCsrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAg
ICAgICAgICBuZXh0ID0gSEVBUDhbKCh0ZXh0SW5kZXgrMSl8MCldOwogICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgdmFyIHByZWNpc2lvbiA9IDY7IC8vIFN0YW5kYXJkIGRlZmF1bHQuCiAg
ICAgICAgICB9CiAgICAgICAgICAvLyBIYW5kbGUgaW50ZWdlciBzaXplcy4gV0FSTklORzogVGhl
c2UgYXNzdW1lIGEgMzItYml0IGFyY2hpdGVjdHVyZSEKICAgICAgICAgIHZhciBhcmdTaXplOwog
ICAgICAgICAgc3dpdGNoIChTdHJpbmcuZnJvbUNoYXJDb2RlKG5leHQpKSB7CiAgICAgICAgICAg
IGNhc2UgJ2gnOgogICAgICAgICAgICAgIHZhciBuZXh0TmV4dCA9IEhFQVA4WygodGV4dEluZGV4
KzIpfDApXTsKICAgICAgICAgICAgICBpZiAobmV4dE5leHQgPT0gMTA0KSB7CiAgICAgICAgICAg
ICAgICB0ZXh0SW5kZXgrKzsKICAgICAgICAgICAgICAgIGFyZ1NpemUgPSAxOyAvLyBjaGFyIChh
Y3R1YWxseSBpMzIgaW4gdmFyYXJncykKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgYXJnU2l6ZSA9IDI7IC8vIHNob3J0IChhY3R1YWxseSBpMzIgaW4gdmFyYXJncykKICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2wnOgog
ICAgICAgICAgICAgIHZhciBuZXh0TmV4dCA9IEhFQVA4WygodGV4dEluZGV4KzIpfDApXTsKICAg
ICAgICAgICAgICBpZiAobmV4dE5leHQgPT0gMTA4KSB7CiAgICAgICAgICAgICAgICB0ZXh0SW5k
ZXgrKzsKICAgICAgICAgICAgICAgIGFyZ1NpemUgPSA4OyAvLyBsb25nIGxvbmcKICAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgYXJnU2l6ZSA9IDQ7IC8vIGxvbmcKICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ0wnOiAvLyBs
b25nIGxvbmcKICAgICAgICAgICAgY2FzZSAncSc6IC8vIGludDY0X3QKICAgICAgICAgICAgY2Fz
ZSAnaic6IC8vIGludG1heF90CiAgICAgICAgICAgICAgYXJnU2l6ZSA9IDg7CiAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3onOiAvLyBzaXplX3QKICAgICAgICAgICAgY2Fz
ZSAndCc6IC8vIHB0cmRpZmZfdAogICAgICAgICAgICBjYXNlICdJJzogLy8gc2lnbmVkIHB0cmRp
ZmZfdCBvciB1bnNpZ25lZCBzaXplX3QKICAgICAgICAgICAgICBhcmdTaXplID0gNDsKICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICBhcmdTaXpl
ID0gbnVsbDsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChhcmdTaXplKSB0ZXh0SW5kZXgrKzsK
ICAgICAgICAgIG5leHQgPSBIRUFQOFsoKHRleHRJbmRleCsxKXwwKV07CiAgICAgICAgICAvLyBI
YW5kbGUgdHlwZSBzcGVjaWZpZXIuCiAgICAgICAgICBzd2l0Y2ggKFN0cmluZy5mcm9tQ2hhckNv
ZGUobmV4dCkpIHsKICAgICAgICAgICAgY2FzZSAnZCc6IGNhc2UgJ2knOiBjYXNlICd1JzogY2Fz
ZSAnbyc6IGNhc2UgJ3gnOiBjYXNlICdYJzogY2FzZSAncCc6IHsKICAgICAgICAgICAgICAvLyBJ
bnRlZ2VyLgogICAgICAgICAgICAgIHZhciBzaWduZWQgPSBuZXh0ID09IDEwMCB8fCBuZXh0ID09
IDEwNTsKICAgICAgICAgICAgICBhcmdTaXplID0gYXJnU2l6ZSB8fCA0OwogICAgICAgICAgICAg
IHZhciBjdXJyQXJnID0gZ2V0TmV4dEFyZygnaScgKyAoYXJnU2l6ZSAqIDgpKTsKICAgICAgICAg
ICAgICB2YXIgYXJnVGV4dDsKICAgICAgICAgICAgICAvLyBGbGF0dGVuIGk2NC0xIFtsb3csIGhp
Z2hdIGludG8gYSAoc2xpZ2h0bHkgcm91bmRlZCkgZG91YmxlCiAgICAgICAgICAgICAgaWYgKGFy
Z1NpemUgPT0gOCkgewogICAgICAgICAgICAgICAgY3VyckFyZyA9IFJ1bnRpbWUubWFrZUJpZ0lu
dChjdXJyQXJnWzBdLCBjdXJyQXJnWzFdLCBuZXh0ID09IDExNyk7CiAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgIC8vIFRydW5jYXRlIHRvIHJlcXVlc3RlZCBzaXplLgogICAgICAgICAgICAg
IGlmIChhcmdTaXplIDw9IDQpIHsKICAgICAgICAgICAgICAgIHZhciBsaW1pdCA9IE1hdGgucG93
KDI1NiwgYXJnU2l6ZSkgLSAxOwogICAgICAgICAgICAgICAgY3VyckFyZyA9IChzaWduZWQgPyBy
ZVNpZ24gOiB1blNpZ24pKGN1cnJBcmcgJiBsaW1pdCwgYXJnU2l6ZSAqIDgpOwogICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAvLyBGb3JtYXQgdGhlIG51bWJlci4KICAgICAgICAgICAgICB2
YXIgY3VyckFic0FyZyA9IE1hdGguYWJzKGN1cnJBcmcpOwogICAgICAgICAgICAgIHZhciBwcmVm
aXggPSAnJzsKICAgICAgICAgICAgICBpZiAobmV4dCA9PSAxMDAgfHwgbmV4dCA9PSAxMDUpIHsK
ICAgICAgICAgICAgICAgIGFyZ1RleHQgPSByZVNpZ24oY3VyckFyZywgOCAqIGFyZ1NpemUsIDEp
LnRvU3RyaW5nKDEwKTsKICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5leHQgPT0gMTE3KSB7CiAg
ICAgICAgICAgICAgICBhcmdUZXh0ID0gdW5TaWduKGN1cnJBcmcsIDggKiBhcmdTaXplLCAxKS50
b1N0cmluZygxMCk7CiAgICAgICAgICAgICAgICBjdXJyQXJnID0gTWF0aC5hYnMoY3VyckFyZyk7
CiAgICAgICAgICAgICAgfSBlbHNlIGlmIChuZXh0ID09IDExMSkgewogICAgICAgICAgICAgICAg
YXJnVGV4dCA9IChmbGFnQWx0ZXJuYXRpdmUgPyAnMCcgOiAnJykgKyBjdXJyQWJzQXJnLnRvU3Ry
aW5nKDgpOwogICAgICAgICAgICAgIH0gZWxzZSBpZiAobmV4dCA9PSAxMjAgfHwgbmV4dCA9PSA4
OCkgewogICAgICAgICAgICAgICAgcHJlZml4ID0gKGZsYWdBbHRlcm5hdGl2ZSAmJiBjdXJyQXJn
ICE9IDApID8gJzB4JyA6ICcnOwogICAgICAgICAgICAgICAgaWYgKGN1cnJBcmcgPCAwKSB7CiAg
ICAgICAgICAgICAgICAgIC8vIFJlcHJlc2VudCBuZWdhdGl2ZSBudW1iZXJzIGluIGhleCBhcyAy
J3MgY29tcGxlbWVudC4KICAgICAgICAgICAgICAgICAgY3VyckFyZyA9IC1jdXJyQXJnOwogICAg
ICAgICAgICAgICAgICBhcmdUZXh0ID0gKGN1cnJBYnNBcmcgLSAxKS50b1N0cmluZygxNik7CiAg
ICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSBbXTsKICAgICAgICAgICAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBhcmdUZXh0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAg
YnVmZmVyLnB1c2goKDB4RiAtIHBhcnNlSW50KGFyZ1RleHRbaV0sIDE2KSkudG9TdHJpbmcoMTYp
KTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBhcmdUZXh0ID0gYnVmZmVy
LmpvaW4oJycpOwogICAgICAgICAgICAgICAgICB3aGlsZSAoYXJnVGV4dC5sZW5ndGggPCBhcmdT
aXplICogMikgYXJnVGV4dCA9ICdmJyArIGFyZ1RleHQ7CiAgICAgICAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgICAgICBhcmdUZXh0ID0gY3VyckFic0FyZy50b1N0cmluZygxNik7CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAobmV4dCA9PSA4OCkgewogICAgICAg
ICAgICAgICAgICBwcmVmaXggPSBwcmVmaXgudG9VcHBlckNhc2UoKTsKICAgICAgICAgICAgICAg
ICAgYXJnVGV4dCA9IGFyZ1RleHQudG9VcHBlckNhc2UoKTsKICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKG5leHQgPT0gMTEyKSB7CiAgICAgICAgICAgICAgICBpZiAo
Y3VyckFic0FyZyA9PT0gMCkgewogICAgICAgICAgICAgICAgICBhcmdUZXh0ID0gJyhuaWwpJzsK
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHByZWZpeCA9ICcweCc7
CiAgICAgICAgICAgICAgICAgIGFyZ1RleHQgPSBjdXJyQWJzQXJnLnRvU3RyaW5nKDE2KTsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKHByZWNpc2lv
blNldCkgewogICAgICAgICAgICAgICAgd2hpbGUgKGFyZ1RleHQubGVuZ3RoIDwgcHJlY2lzaW9u
KSB7CiAgICAgICAgICAgICAgICAgIGFyZ1RleHQgPSAnMCcgKyBhcmdUZXh0OwogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAvLyBBZGQgc2lnbiBpZiBuZWVk
ZWQKICAgICAgICAgICAgICBpZiAoZmxhZ0Fsd2F5c1NpZ25lZCkgewogICAgICAgICAgICAgICAg
aWYgKGN1cnJBcmcgPCAwKSB7CiAgICAgICAgICAgICAgICAgIHByZWZpeCA9ICctJyArIHByZWZp
eDsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHByZWZpeCA9ICcr
JyArIHByZWZpeDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgLy8gQWRkIHBhZGRpbmcuCiAgICAgICAgICAgICAgd2hpbGUgKHByZWZpeC5sZW5ndGggKyBh
cmdUZXh0Lmxlbmd0aCA8IHdpZHRoKSB7CiAgICAgICAgICAgICAgICBpZiAoZmxhZ0xlZnRBbGln
bikgewogICAgICAgICAgICAgICAgICBhcmdUZXh0ICs9ICcgJzsKICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgIGlmIChmbGFnWmVyb1BhZCkgewogICAgICAgICAgICAg
ICAgICAgIGFyZ1RleHQgPSAnMCcgKyBhcmdUZXh0OwogICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgICAgICAgIHByZWZpeCA9ICcgJyArIHByZWZpeDsKICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAv
LyBJbnNlcnQgdGhlIHJlc3VsdCBpbnRvIHRoZSBidWZmZXIuCiAgICAgICAgICAgICAgYXJnVGV4
dCA9IHByZWZpeCArIGFyZ1RleHQ7CiAgICAgICAgICAgICAgYXJnVGV4dC5zcGxpdCgnJykuZm9y
RWFjaChmdW5jdGlvbihjaHIpIHsKICAgICAgICAgICAgICAgIHJldC5wdXNoKGNoci5jaGFyQ29k
ZUF0KDApKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgfQogICAgICAgICAgICBjYXNlICdmJzogY2FzZSAnRic6IGNhc2UgJ2UnOiBjYXNlICdFJzog
Y2FzZSAnZyc6IGNhc2UgJ0cnOiB7CiAgICAgICAgICAgICAgLy8gRmxvYXQuCiAgICAgICAgICAg
ICAgdmFyIGN1cnJBcmcgPSBnZXROZXh0QXJnKCdkb3VibGUnKTsKICAgICAgICAgICAgICB2YXIg
YXJnVGV4dDsKICAgICAgICAgICAgICBpZiAoaXNOYU4oY3VyckFyZykpIHsKICAgICAgICAgICAg
ICAgIGFyZ1RleHQgPSAnbmFuJzsKICAgICAgICAgICAgICAgIGZsYWdaZXJvUGFkID0gZmFsc2U7
CiAgICAgICAgICAgICAgfSBlbHNlIGlmICghaXNGaW5pdGUoY3VyckFyZykpIHsKICAgICAgICAg
ICAgICAgIGFyZ1RleHQgPSAoY3VyckFyZyA8IDAgPyAnLScgOiAnJykgKyAnaW5mJzsKICAgICAg
ICAgICAgICAgIGZsYWdaZXJvUGFkID0gZmFsc2U7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgIHZhciBpc0dlbmVyYWwgPSBmYWxzZTsKICAgICAgICAgICAgICAgIHZhciBl
ZmZlY3RpdmVQcmVjaXNpb24gPSBNYXRoLm1pbihwcmVjaXNpb24sIDIwKTsKICAgICAgICAgICAg
ICAgIC8vIENvbnZlcnQgZy9HIHRvIGYvRiBvciBlL0UsIGFzIHBlcjoKICAgICAgICAgICAgICAg
IC8vIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5L2Z1bmN0
aW9ucy9wcmludGYuaHRtbAogICAgICAgICAgICAgICAgaWYgKG5leHQgPT0gMTAzIHx8IG5leHQg
PT0gNzEpIHsKICAgICAgICAgICAgICAgICAgaXNHZW5lcmFsID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICAgcHJlY2lzaW9uID0gcHJlY2lzaW9uIHx8IDE7CiAgICAgICAgICAgICAgICAgIHZhciBl
eHBvbmVudCA9IHBhcnNlSW50KGN1cnJBcmcudG9FeHBvbmVudGlhbChlZmZlY3RpdmVQcmVjaXNp
b24pLnNwbGl0KCdlJylbMV0sIDEwKTsKICAgICAgICAgICAgICAgICAgaWYgKHByZWNpc2lvbiA+
IGV4cG9uZW50ICYmIGV4cG9uZW50ID49IC00KSB7CiAgICAgICAgICAgICAgICAgICAgbmV4dCA9
ICgobmV4dCA9PSAxMDMpID8gJ2YnIDogJ0YnKS5jaGFyQ29kZUF0KDApOwogICAgICAgICAgICAg
ICAgICAgIHByZWNpc2lvbiAtPSBleHBvbmVudCArIDE7CiAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgICAgbmV4dCA9ICgobmV4dCA9PSAxMDMpID8gJ2UnIDogJ0Un
KS5jaGFyQ29kZUF0KDApOwogICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbi0tOwogICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVmZmVjdGl2ZVByZWNpc2lvbiA9IE1hdGgu
bWluKHByZWNpc2lvbiwgMjApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYg
KG5leHQgPT0gMTAxIHx8IG5leHQgPT0gNjkpIHsKICAgICAgICAgICAgICAgICAgYXJnVGV4dCA9
IGN1cnJBcmcudG9FeHBvbmVudGlhbChlZmZlY3RpdmVQcmVjaXNpb24pOwogICAgICAgICAgICAg
ICAgICAvLyBNYWtlIHN1cmUgdGhlIGV4cG9uZW50IGhhcyBhdCBsZWFzdCAyIGRpZ2l0cy4KICAg
ICAgICAgICAgICAgICAgaWYgKC9bZUVdWy0rXVxkJC8udGVzdChhcmdUZXh0KSkgewogICAgICAg
ICAgICAgICAgICAgIGFyZ1RleHQgPSBhcmdUZXh0LnNsaWNlKDAsIC0xKSArICcwJyArIGFyZ1Rl
eHQuc2xpY2UoLTEpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKG5leHQgPT0gMTAyIHx8IG5leHQgPT0gNzApIHsKICAgICAgICAgICAgICAgICAgYXJnVGV4
dCA9IGN1cnJBcmcudG9GaXhlZChlZmZlY3RpdmVQcmVjaXNpb24pOwogICAgICAgICAgICAgICAg
ICBpZiAoY3VyckFyZyA9PT0gMCAmJiBfX3JlYWxseU5lZ2F0aXZlKGN1cnJBcmcpKSB7CiAgICAg
ICAgICAgICAgICAgICAgYXJnVGV4dCA9ICctJyArIGFyZ1RleHQ7CiAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHZhciBwYXJ0cyA9IGFyZ1RleHQu
c3BsaXQoJ2UnKTsKICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYWwgJiYgIWZsYWdBbHRlcm5h
dGl2ZSkgewogICAgICAgICAgICAgICAgICAvLyBEaXNjYXJkIHRyYWlsaW5nIHplcm9zIGFuZCBw
ZXJpb2RzLgogICAgICAgICAgICAgICAgICB3aGlsZSAocGFydHNbMF0ubGVuZ3RoID4gMSAmJiBw
YXJ0c1swXS5pbmRleE9mKCcuJykgIT0gLTEgJiYKICAgICAgICAgICAgICAgICAgICAgICAgIChw
YXJ0c1swXS5zbGljZSgtMSkgPT0gJzAnIHx8IHBhcnRzWzBdLnNsaWNlKC0xKSA9PSAnLicpKSB7
CiAgICAgICAgICAgICAgICAgICAgcGFydHNbMF0gPSBwYXJ0c1swXS5zbGljZSgwLCAtMSk7CiAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGEgcGVyaW9kIGluIGFsdGVybmF0aXZlIG1vZGUuCiAg
ICAgICAgICAgICAgICAgIGlmIChmbGFnQWx0ZXJuYXRpdmUgJiYgYXJnVGV4dC5pbmRleE9mKCcu
JykgPT0gLTEpIHBhcnRzWzBdICs9ICcuJzsKICAgICAgICAgICAgICAgICAgLy8gWmVybyBwYWQg
dW50aWwgcmVxdWlyZWQgcHJlY2lzaW9uLgogICAgICAgICAgICAgICAgICB3aGlsZSAocHJlY2lz
aW9uID4gZWZmZWN0aXZlUHJlY2lzaW9uKyspIHBhcnRzWzBdICs9ICcwJzsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgIGFyZ1RleHQgPSBwYXJ0c1swXSArIChwYXJ0cy5sZW5ndGgg
PiAxID8gJ2UnICsgcGFydHNbMV0gOiAnJyk7CiAgICAgICAgICAgICAgICAvLyBDYXBpdGFsaXpl
ICdFJyBpZiBuZWVkZWQuCiAgICAgICAgICAgICAgICBpZiAobmV4dCA9PSA2OSkgYXJnVGV4dCA9
IGFyZ1RleHQudG9VcHBlckNhc2UoKTsKICAgICAgICAgICAgICAgIC8vIEFkZCBzaWduLgogICAg
ICAgICAgICAgICAgaWYgKGZsYWdBbHdheXNTaWduZWQgJiYgY3VyckFyZyA+PSAwKSB7CiAgICAg
ICAgICAgICAgICAgIGFyZ1RleHQgPSAnKycgKyBhcmdUZXh0OwogICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAvLyBBZGQgcGFkZGluZy4KICAgICAgICAgICAg
ICB3aGlsZSAoYXJnVGV4dC5sZW5ndGggPCB3aWR0aCkgewogICAgICAgICAgICAgICAgaWYgKGZs
YWdMZWZ0QWxpZ24pIHsKICAgICAgICAgICAgICAgICAgYXJnVGV4dCArPSAnICc7CiAgICAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICBpZiAoZmxhZ1plcm9QYWQgJiYgKGFy
Z1RleHRbMF0gPT0gJy0nIHx8IGFyZ1RleHRbMF0gPT0gJysnKSkgewogICAgICAgICAgICAgICAg
ICAgIGFyZ1RleHQgPSBhcmdUZXh0WzBdICsgJzAnICsgYXJnVGV4dC5zbGljZSgxKTsKICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBhcmdUZXh0ID0gKGZsYWda
ZXJvUGFkID8gJzAnIDogJyAnKSArIGFyZ1RleHQ7CiAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgLy8gQWRqdXN0IGNhc2Uu
CiAgICAgICAgICAgICAgaWYgKG5leHQgPCA5NykgYXJnVGV4dCA9IGFyZ1RleHQudG9VcHBlckNh
c2UoKTsKICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIHJlc3VsdCBpbnRvIHRoZSBidWZmZXIu
CiAgICAgICAgICAgICAgYXJnVGV4dC5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbihjaHIpIHsK
ICAgICAgICAgICAgICAgIHJldC5wdXNoKGNoci5jaGFyQ29kZUF0KDApKTsKICAgICAgICAgICAg
ICB9KTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBjYXNl
ICdzJzogewogICAgICAgICAgICAgIC8vIFN0cmluZy4KICAgICAgICAgICAgICB2YXIgYXJnID0g
Z2V0TmV4dEFyZygnaTgqJyk7CiAgICAgICAgICAgICAgdmFyIGFyZ0xlbmd0aCA9IGFyZyA/IF9z
dHJsZW4oYXJnKSA6ICcobnVsbCknLmxlbmd0aDsKICAgICAgICAgICAgICBpZiAocHJlY2lzaW9u
U2V0KSBhcmdMZW5ndGggPSBNYXRoLm1pbihhcmdMZW5ndGgsIHByZWNpc2lvbik7CiAgICAgICAg
ICAgICAgaWYgKCFmbGFnTGVmdEFsaWduKSB7CiAgICAgICAgICAgICAgICB3aGlsZSAoYXJnTGVu
Z3RoIDwgd2lkdGgtLSkgewogICAgICAgICAgICAgICAgICByZXQucHVzaCgzMik7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChhcmcpIHsKICAgICAg
ICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJnTGVuZ3RoOyBpKyspIHsKICAgICAgICAg
ICAgICAgICAgcmV0LnB1c2goSEVBUFU4WygoYXJnKyspfDApXSk7CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldCA9IHJldC5jb25jYXQo
aW50QXJyYXlGcm9tU3RyaW5nKCcobnVsbCknLnN1YnN0cigwLCBhcmdMZW5ndGgpLCB0cnVlKSk7
CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChmbGFnTGVmdEFsaWduKSB7CiAgICAg
ICAgICAgICAgICB3aGlsZSAoYXJnTGVuZ3RoIDwgd2lkdGgtLSkgewogICAgICAgICAgICAgICAg
ICByZXQucHVzaCgzMik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNhc2UgJ2MnOiB7CiAgICAg
ICAgICAgICAgLy8gQ2hhcmFjdGVyLgogICAgICAgICAgICAgIGlmIChmbGFnTGVmdEFsaWduKSBy
ZXQucHVzaChnZXROZXh0QXJnKCdpOCcpKTsKICAgICAgICAgICAgICB3aGlsZSAoLS13aWR0aCA+
IDApIHsKICAgICAgICAgICAgICAgIHJldC5wdXNoKDMyKTsKICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgaWYgKCFmbGFnTGVmdEFsaWduKSByZXQucHVzaChnZXROZXh0QXJnKCdpOCcpKTsK
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBjYXNlICduJzog
ewogICAgICAgICAgICAgIC8vIFdyaXRlIHRoZSBsZW5ndGggd3JpdHRlbiBzbyBmYXIgdG8gdGhl
IG5leHQgcGFyYW1ldGVyLgogICAgICAgICAgICAgIHZhciBwdHIgPSBnZXROZXh0QXJnKCdpMzIq
Jyk7CiAgICAgICAgICAgICAgSEVBUDMyWygocHRyKT4+MildPXJldC5sZW5ndGgKICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBjYXNlICclJzogewogICAgICAg
ICAgICAgIC8vIExpdGVyYWwgcGVyY2VudCBzaWduLgogICAgICAgICAgICAgIHJldC5wdXNoKGN1
cnIpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGRlZmF1
bHQ6IHsKICAgICAgICAgICAgICAvLyBVbmtub3duIHNwZWNpZmllcnMgcmVtYWluIHVudG91Y2hl
ZC4KICAgICAgICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRUZXh0SW5kZXg7IGkgPCB0ZXh0SW5k
ZXggKyAyOyBpKyspIHsKICAgICAgICAgICAgICAgIHJldC5wdXNoKEhFQVA4WyhpKV0pOwogICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgdGV4dEluZGV4
ICs9IDI7CiAgICAgICAgICAvLyBUT0RPOiBTdXBwb3J0IGEvQSAoaGV4IGZsb2F0KSBhbmQgbSAo
bGFzdCBlcnJvcikgc3BlY2lmaWVycy4KICAgICAgICAgIC8vIFRPRE86IFN1cHBvcnQgJTEke3Nw
ZWNpZmllcn0gZm9yIGFyZyBzZWxlY3Rpb24uCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJl
dC5wdXNoKGN1cnIpOwogICAgICAgICAgdGV4dEluZGV4ICs9IDE7CiAgICAgICAgfQogICAgICB9
CiAgICAgIHJldHVybiByZXQ7CiAgICB9ZnVuY3Rpb24gX2ZwcmludGYoc3RyZWFtLCBmb3JtYXQs
IHZhcmFyZ3MpIHsKICAgICAgLy8gaW50IGZwcmludGYoRklMRSAqcmVzdHJpY3Qgc3RyZWFtLCBj
b25zdCBjaGFyICpyZXN0cmljdCBmb3JtYXQsIC4uLik7CiAgICAgIC8vIGh0dHA6Ly9wdWJzLm9w
ZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDAwOTUzOTkvZnVuY3Rpb25zL3ByaW50Zi5odG1sCiAg
ICAgIHZhciByZXN1bHQgPSBfX2Zvcm1hdFN0cmluZyhmb3JtYXQsIHZhcmFyZ3MpOwogICAgICB2
YXIgc3RhY2sgPSBSdW50aW1lLnN0YWNrU2F2ZSgpOwogICAgICB2YXIgcmV0ID0gX2Z3cml0ZShh
bGxvY2F0ZShyZXN1bHQsICdpOCcsIEFMTE9DX1NUQUNLKSwgMSwgcmVzdWx0Lmxlbmd0aCwgc3Ry
ZWFtKTsKICAgICAgUnVudGltZS5zdGFja1Jlc3RvcmUoc3RhY2spOwogICAgICByZXR1cm4gcmV0
OwogICAgfWZ1bmN0aW9uIF9wcmludGYoZm9ybWF0LCB2YXJhcmdzKSB7CiAgICAgIC8vIGludCBw
cmludGYoY29uc3QgY2hhciAqcmVzdHJpY3QgZm9ybWF0LCAuLi4pOwogICAgICAvLyBodHRwOi8v
cHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDAwMDk1Mzk5L2Z1bmN0aW9ucy9wcmludGYu
aHRtbAogICAgICB2YXIgc3Rkb3V0ID0gSEVBUDMyWygoX3N0ZG91dCk+PjIpXTsKICAgICAgcmV0
dXJuIF9mcHJpbnRmKHN0ZG91dCwgZm9ybWF0LCB2YXJhcmdzKTsKICAgIH0KICBmdW5jdGlvbiBf
YWJvcnQoKSB7CiAgICAgIE1vZHVsZVsnYWJvcnQnXSgpOwogICAgfQogIGZ1bmN0aW9uIF9fX2Vy
cm5vX2xvY2F0aW9uKCkgewogICAgICByZXR1cm4gX19fZXJybm9fc3RhdGU7CiAgICB9dmFyIF9f
X2Vycm5vPV9fX2Vycm5vX2xvY2F0aW9uOwogIE1vZHVsZVsiX21lbWNweSJdID0gX21lbWNweTt2
YXIgX2xsdm1fbWVtY3B5X3AwaThfcDBpOF9pMzI9X21lbWNweTsKICBmdW5jdGlvbiBfc2Jyayhi
eXRlcykgewogICAgICAvLyBJbXBsZW1lbnQgYSBMaW51eC1saWtlICdtZW1vcnkgYXJlYScgZm9y
IG91ciAncHJvY2VzcycuCiAgICAgIC8vIENoYW5nZXMgdGhlIHNpemUgb2YgdGhlIG1lbW9yeSBh
cmVhIGJ5IHxieXRlc3w7IHJldHVybnMgdGhlCiAgICAgIC8vIGFkZHJlc3Mgb2YgdGhlIHByZXZp
b3VzIHRvcCAoJ2JyZWFrJykgb2YgdGhlIG1lbW9yeSBhcmVhCiAgICAgIC8vIFdlIGNvbnRyb2wg
dGhlICJkeW5hbWljIiBtZW1vcnkgLSBEWU5BTUlDX0JBU0UgdG8gRFlOQU1JQ1RPUAogICAgICB2
YXIgc2VsZiA9IF9zYnJrOwogICAgICBpZiAoIXNlbGYuY2FsbGVkKSB7CiAgICAgICAgRFlOQU1J
Q1RPUCA9IGFsaWduTWVtb3J5UGFnZShEWU5BTUlDVE9QKTsgLy8gbWFrZSBzdXJlIHdlIHN0YXJ0
IG91dCBhbGlnbmVkCiAgICAgICAgc2VsZi5jYWxsZWQgPSB0cnVlOwogICAgICAgIGFzc2VydChS
dW50aW1lLmR5bmFtaWNBbGxvYyk7CiAgICAgICAgc2VsZi5hbGxvYyA9IFJ1bnRpbWUuZHluYW1p
Y0FsbG9jOwogICAgICAgIFJ1bnRpbWUuZHluYW1pY0FsbG9jID0gZnVuY3Rpb24oKSB7IGFib3J0
KCdjYW5ub3QgZHluYW1pY2FsbHkgYWxsb2NhdGUsIHNicmsgbm93IGhhcyBjb250cm9sJykgfTsK
ICAgICAgfQogICAgICB2YXIgcmV0ID0gRFlOQU1JQ1RPUDsKICAgICAgaWYgKGJ5dGVzICE9IDAp
IHNlbGYuYWxsb2MoYnl0ZXMpOwogICAgICByZXR1cm4gcmV0OyAgLy8gUHJldmlvdXMgYnJlYWsg
bG9jYXRpb24uCiAgICB9CiAgZnVuY3Rpb24gX3N5c2NvbmYobmFtZSkgewogICAgICAvLyBsb25n
IHN5c2NvbmYoaW50IG5hbWUpOwogICAgICAvLyBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29u
bGluZXB1YnMvMDA5Njk1Mzk5L2Z1bmN0aW9ucy9zeXNjb25mLmh0bWwKICAgICAgc3dpdGNoKG5h
bWUpIHsKICAgICAgICBjYXNlIDg6IHJldHVybiBQQUdFX1NJWkU7CiAgICAgICAgY2FzZSA1NDoK
ICAgICAgICBjYXNlIDU2OgogICAgICAgIGNhc2UgMjE6CiAgICAgICAgY2FzZSA2MToKICAgICAg
ICBjYXNlIDYzOgogICAgICAgIGNhc2UgMjI6CiAgICAgICAgY2FzZSA2NzoKICAgICAgICBjYXNl
IDIzOgogICAgICAgIGNhc2UgMjQ6CiAgICAgICAgY2FzZSAyNToKICAgICAgICBjYXNlIDI2Ogog
ICAgICAgIGNhc2UgMjc6CiAgICAgICAgY2FzZSA2OToKICAgICAgICBjYXNlIDI4OgogICAgICAg
IGNhc2UgMTAxOgogICAgICAgIGNhc2UgNzA6CiAgICAgICAgY2FzZSA3MToKICAgICAgICBjYXNl
IDI5OgogICAgICAgIGNhc2UgMzA6CiAgICAgICAgY2FzZSAxOTk6CiAgICAgICAgY2FzZSA3NToK
ICAgICAgICBjYXNlIDc2OgogICAgICAgIGNhc2UgMzI6CiAgICAgICAgY2FzZSA0MzoKICAgICAg
ICBjYXNlIDQ0OgogICAgICAgIGNhc2UgODA6CiAgICAgICAgY2FzZSA0NjoKICAgICAgICBjYXNl
IDQ3OgogICAgICAgIGNhc2UgNDU6CiAgICAgICAgY2FzZSA0ODoKICAgICAgICBjYXNlIDQ5Ogog
ICAgICAgIGNhc2UgNDI6CiAgICAgICAgY2FzZSA4MjoKICAgICAgICBjYXNlIDMzOgogICAgICAg
IGNhc2UgNzoKICAgICAgICBjYXNlIDEwODoKICAgICAgICBjYXNlIDEwOToKICAgICAgICBjYXNl
IDEwNzoKICAgICAgICBjYXNlIDExMjoKICAgICAgICBjYXNlIDExOToKICAgICAgICBjYXNlIDEy
MToKICAgICAgICAgIHJldHVybiAyMDA4MDk7CiAgICAgICAgY2FzZSAxMzoKICAgICAgICBjYXNl
IDEwNDoKICAgICAgICBjYXNlIDk0OgogICAgICAgIGNhc2UgOTU6CiAgICAgICAgY2FzZSAzNDoK
ICAgICAgICBjYXNlIDM1OgogICAgICAgIGNhc2UgNzc6CiAgICAgICAgY2FzZSA4MToKICAgICAg
ICBjYXNlIDgzOgogICAgICAgIGNhc2UgODQ6CiAgICAgICAgY2FzZSA4NToKICAgICAgICBjYXNl
IDg2OgogICAgICAgIGNhc2UgODc6CiAgICAgICAgY2FzZSA4ODoKICAgICAgICBjYXNlIDg5Ogog
ICAgICAgIGNhc2UgOTA6CiAgICAgICAgY2FzZSA5MToKICAgICAgICBjYXNlIDk0OgogICAgICAg
IGNhc2UgOTU6CiAgICAgICAgY2FzZSAxMTA6CiAgICAgICAgY2FzZSAxMTE6CiAgICAgICAgY2Fz
ZSAxMTM6CiAgICAgICAgY2FzZSAxMTQ6CiAgICAgICAgY2FzZSAxMTU6CiAgICAgICAgY2FzZSAx
MTY6CiAgICAgICAgY2FzZSAxMTc6CiAgICAgICAgY2FzZSAxMTg6CiAgICAgICAgY2FzZSAxMjA6
CiAgICAgICAgY2FzZSA0MDoKICAgICAgICBjYXNlIDE2OgogICAgICAgIGNhc2UgNzk6CiAgICAg
ICAgY2FzZSAxOToKICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICBjYXNlIDkyOgogICAgICAg
IGNhc2UgOTM6CiAgICAgICAgY2FzZSA1OgogICAgICAgIGNhc2UgNzI6CiAgICAgICAgY2FzZSA2
OgogICAgICAgIGNhc2UgNzQ6CiAgICAgICAgY2FzZSA5MjoKICAgICAgICBjYXNlIDkzOgogICAg
ICAgIGNhc2UgOTY6CiAgICAgICAgY2FzZSA5NzoKICAgICAgICBjYXNlIDk4OgogICAgICAgIGNh
c2UgOTk6CiAgICAgICAgY2FzZSAxMDI6CiAgICAgICAgY2FzZSAxMDM6CiAgICAgICAgY2FzZSAx
MDU6CiAgICAgICAgICByZXR1cm4gMTsKICAgICAgICBjYXNlIDM4OgogICAgICAgIGNhc2UgNjY6
CiAgICAgICAgY2FzZSA1MDoKICAgICAgICBjYXNlIDUxOgogICAgICAgIGNhc2UgNDoKICAgICAg
ICAgIHJldHVybiAxMDI0OwogICAgICAgIGNhc2UgMTU6CiAgICAgICAgY2FzZSA2NDoKICAgICAg
ICBjYXNlIDQxOgogICAgICAgICAgcmV0dXJuIDMyOwogICAgICAgIGNhc2UgNTU6CiAgICAgICAg
Y2FzZSAzNzoKICAgICAgICBjYXNlIDE3OgogICAgICAgICAgcmV0dXJuIDIxNDc0ODM2NDc7CiAg
ICAgICAgY2FzZSAxODoKICAgICAgICBjYXNlIDE6CiAgICAgICAgICByZXR1cm4gNDc4Mzk7CiAg
ICAgICAgY2FzZSA1OToKICAgICAgICBjYXNlIDU3OgogICAgICAgICAgcmV0dXJuIDk5OwogICAg
ICAgIGNhc2UgNjg6CiAgICAgICAgY2FzZSA1ODoKICAgICAgICAgIHJldHVybiAyMDQ4OwogICAg
ICAgIGNhc2UgMDogcmV0dXJuIDIwOTcxNTI7CiAgICAgICAgY2FzZSAzOiByZXR1cm4gNjU1MzY7
CiAgICAgICAgY2FzZSAxNDogcmV0dXJuIDMyNzY4OwogICAgICAgIGNhc2UgNzM6IHJldHVybiAz
Mjc2NzsKICAgICAgICBjYXNlIDM5OiByZXR1cm4gMTYzODQ7CiAgICAgICAgY2FzZSA2MDogcmV0
dXJuIDEwMDA7CiAgICAgICAgY2FzZSAxMDY6IHJldHVybiA3MDA7CiAgICAgICAgY2FzZSA1Mjog
cmV0dXJuIDI1NjsKICAgICAgICBjYXNlIDYyOiByZXR1cm4gMjU1OwogICAgICAgIGNhc2UgMjog
cmV0dXJuIDEwMDsKICAgICAgICBjYXNlIDY1OiByZXR1cm4gNjQ7CiAgICAgICAgY2FzZSAzNjog
cmV0dXJuIDIwOwogICAgICAgIGNhc2UgMTAwOiByZXR1cm4gMTY7CiAgICAgICAgY2FzZSAyMDog
cmV0dXJuIDY7CiAgICAgICAgY2FzZSA1MzogcmV0dXJuIDQ7CiAgICAgICAgY2FzZSAxMDogcmV0
dXJuIDE7CiAgICAgIH0KICAgICAgX19fc2V0RXJyTm8oRVJSTk9fQ09ERVMuRUlOVkFMKTsKICAg
ICAgcmV0dXJuIC0xOwogICAgfQogIGZ1bmN0aW9uIF90aW1lKHB0cikgewogICAgICB2YXIgcmV0
ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpLzEwMDApOwogICAgICBpZiAocHRyKSB7CiAgICAgICAg
SEVBUDMyWygocHRyKT4+MildPXJldAogICAgICB9CiAgICAgIHJldHVybiByZXQ7CiAgICB9CiAg
TW9kdWxlWyJfbWVtc2V0Il0gPSBfbWVtc2V0OwogIHZhciBCcm93c2VyPXttYWluTG9vcDp7c2No
ZWR1bGVyOm51bGwsc2hvdWxkUGF1c2U6ZmFsc2UscGF1c2VkOmZhbHNlLHF1ZXVlOltdLHBhdXNl
OmZ1bmN0aW9uICgpIHsKICAgICAgICAgIEJyb3dzZXIubWFpbkxvb3Auc2hvdWxkUGF1c2UgPSB0
cnVlOwogICAgICAgIH0scmVzdW1lOmZ1bmN0aW9uICgpIHsKICAgICAgICAgIGlmIChCcm93c2Vy
Lm1haW5Mb29wLnBhdXNlZCkgewogICAgICAgICAgICBCcm93c2VyLm1haW5Mb29wLnBhdXNlZCA9
IGZhbHNlOwogICAgICAgICAgICBCcm93c2VyLm1haW5Mb29wLnNjaGVkdWxlcigpOwogICAgICAg
ICAgfQogICAgICAgICAgQnJvd3Nlci5tYWluTG9vcC5zaG91bGRQYXVzZSA9IGZhbHNlOwogICAg
ICAgIH0sdXBkYXRlU3RhdHVzOmZ1bmN0aW9uICgpIHsKICAgICAgICAgIGlmIChNb2R1bGVbJ3Nl
dFN0YXR1cyddKSB7CiAgICAgICAgICAgIHZhciBtZXNzYWdlID0gTW9kdWxlWydzdGF0dXNNZXNz
YWdlJ10gfHwgJ1BsZWFzZSB3YWl0Li4uJzsKICAgICAgICAgICAgdmFyIHJlbWFpbmluZyA9IEJy
b3dzZXIubWFpbkxvb3AucmVtYWluaW5nQmxvY2tlcnM7CiAgICAgICAgICAgIHZhciBleHBlY3Rl
ZCA9IEJyb3dzZXIubWFpbkxvb3AuZXhwZWN0ZWRCbG9ja2VyczsKICAgICAgICAgICAgaWYgKHJl
bWFpbmluZykgewogICAgICAgICAgICAgIGlmIChyZW1haW5pbmcgPCBleHBlY3RlZCkgewogICAg
ICAgICAgICAgICAgTW9kdWxlWydzZXRTdGF0dXMnXShtZXNzYWdlICsgJyAoJyArIChleHBlY3Rl
ZCAtIHJlbWFpbmluZykgKyAnLycgKyBleHBlY3RlZCArICcpJyk7CiAgICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgIE1vZHVsZVsnc2V0U3RhdHVzJ10obWVzc2FnZSk7CiAgICAg
ICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIE1vZHVsZVsnc2V0
U3RhdHVzJ10oJycpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfX0saXNGdWxs
U2NyZWVuOmZhbHNlLHBvaW50ZXJMb2NrOmZhbHNlLG1vZHVsZUNvbnRleHRDcmVhdGVkQ2FsbGJh
Y2tzOltdLHdvcmtlcnM6W10saW5pdDpmdW5jdGlvbiAoKSB7CiAgICAgICAgaWYgKCFNb2R1bGVb
InByZWxvYWRQbHVnaW5zIl0pIE1vZHVsZVsicHJlbG9hZFBsdWdpbnMiXSA9IFtdOyAvLyBuZWVk
cyB0byBleGlzdCBldmVuIGluIHdvcmtlcnMKICAgICAgICBpZiAoQnJvd3Nlci5pbml0dGVkIHx8
IEVOVklST05NRU5UX0lTX1dPUktFUikgcmV0dXJuOwogICAgICAgIEJyb3dzZXIuaW5pdHRlZCA9
IHRydWU7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIG5ldyBCbG9iKCk7CiAgICAgICAgICBCcm93
c2VyLmhhc0Jsb2JDb25zdHJ1Y3RvciA9IHRydWU7CiAgICAgICAgfSBjYXRjaChlKSB7CiAgICAg
ICAgICBCcm93c2VyLmhhc0Jsb2JDb25zdHJ1Y3RvciA9IGZhbHNlOwogICAgICAgICAgY29uc29s
ZS5sb2coIndhcm5pbmc6IG5vIGJsb2IgY29uc3RydWN0b3IsIGNhbm5vdCBjcmVhdGUgYmxvYnMg
d2l0aCBtaW1ldHlwZXMiKTsKICAgICAgICB9CiAgICAgICAgQnJvd3Nlci5CbG9iQnVpbGRlciA9
IHR5cGVvZiBNb3pCbG9iQnVpbGRlciAhPSAidW5kZWZpbmVkIiA/IE1vekJsb2JCdWlsZGVyIDog
KHR5cGVvZiBXZWJLaXRCbG9iQnVpbGRlciAhPSAidW5kZWZpbmVkIiA/IFdlYktpdEJsb2JCdWls
ZGVyIDogKCFCcm93c2VyLmhhc0Jsb2JDb25zdHJ1Y3RvciA/IGNvbnNvbGUubG9nKCJ3YXJuaW5n
OiBubyBCbG9iQnVpbGRlciIpIDogbnVsbCkpOwogICAgICAgIEJyb3dzZXIuVVJMT2JqZWN0ID0g
dHlwZW9mIHdpbmRvdyAhPSAidW5kZWZpbmVkIiA/ICh3aW5kb3cuVVJMID8gd2luZG93LlVSTCA6
IHdpbmRvdy53ZWJraXRVUkwpIDogdW5kZWZpbmVkOwogICAgICAgIGlmICghTW9kdWxlLm5vSW1h
Z2VEZWNvZGluZyAmJiB0eXBlb2YgQnJvd3Nlci5VUkxPYmplY3QgPT09ICd1bmRlZmluZWQnKSB7
CiAgICAgICAgICBjb25zb2xlLmxvZygid2FybmluZzogQnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0
IGNyZWF0aW5nIG9iamVjdCBVUkxzLiBCdWlsdC1pbiBicm93c2VyIGltYWdlIGRlY29kaW5nIHdp
bGwgbm90IGJlIGF2YWlsYWJsZS4iKTsKICAgICAgICAgIE1vZHVsZS5ub0ltYWdlRGVjb2Rpbmcg
PSB0cnVlOwogICAgICAgIH0KICAgICAgICAvLyBTdXBwb3J0IGZvciBwbHVnaW5zIHRoYXQgY2Fu
IHByb2Nlc3MgcHJlbG9hZGVkIGZpbGVzLiBZb3UgY2FuIGFkZCBtb3JlIG9mIHRoZXNlIHRvCiAg
ICAgICAgLy8geW91ciBhcHAgYnkgY3JlYXRpbmcgYW5kIGFwcGVuZGluZyB0byBNb2R1bGUucHJl
bG9hZFBsdWdpbnMuCiAgICAgICAgLy8KICAgICAgICAvLyBFYWNoIHBsdWdpbiBpcyBhc2tlZCBp
ZiBpdCBjYW4gaGFuZGxlIGEgZmlsZSBiYXNlZCBvbiB0aGUgZmlsZSdzIG5hbWUuIElmIGl0IGNh
biwKICAgICAgICAvLyBpdCBpcyBnaXZlbiB0aGUgZmlsZSdzIHJhdyBkYXRhLiBXaGVuIGl0IGlz
IGRvbmUsIGl0IGNhbGxzIGEgY2FsbGJhY2sgd2l0aCB0aGUgZmlsZSdzCiAgICAgICAgLy8gKHBv
c3NpYmx5IG1vZGlmaWVkKSBkYXRhLiBGb3IgZXhhbXBsZSwgYSBwbHVnaW4gbWlnaHQgZGVjb21w
cmVzcyBhIGZpbGUsIG9yIGl0CiAgICAgICAgLy8gbWlnaHQgY3JlYXRlIHNvbWUgc2lkZSBkYXRh
IHN0cnVjdHVyZSBmb3IgdXNlIGxhdGVyIChsaWtlIGFuIEltYWdlIGVsZW1lbnQsIGV0Yy4pLgog
ICAgICAgIHZhciBpbWFnZVBsdWdpbiA9IHt9OwogICAgICAgIGltYWdlUGx1Z2luWydjYW5IYW5k
bGUnXSA9IGZ1bmN0aW9uKG5hbWUpIHsKICAgICAgICAgIHJldHVybiAhTW9kdWxlLm5vSW1hZ2VE
ZWNvZGluZyAmJiAvXC4oanBnfGpwZWd8cG5nfGJtcCkkL2kudGVzdChuYW1lKTsKICAgICAgICB9
OwogICAgICAgIGltYWdlUGx1Z2luWydoYW5kbGUnXSA9IGZ1bmN0aW9uKGJ5dGVBcnJheSwgbmFt
ZSwgb25sb2FkLCBvbmVycm9yKSB7CiAgICAgICAgICB2YXIgYiA9IG51bGw7CiAgICAgICAgICBp
ZiAoQnJvd3Nlci5oYXNCbG9iQ29uc3RydWN0b3IpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAg
ICAgICAgICBiID0gbmV3IEJsb2IoW2J5dGVBcnJheV0sIHsgdHlwZTogQnJvd3Nlci5nZXRNaW1l
dHlwZShuYW1lKSB9KTsKICAgICAgICAgICAgICBpZiAoYi5zaXplICE9PSBieXRlQXJyYXkubGVu
Z3RoKSB7IC8vIFNhZmFyaSBidWcgIzExODYzMAogICAgICAgICAgICAgICAgLy8gU2FmYXJpJ3Mg
QmxvYiBjYW4gb25seSB0YWtlIGFuIEFycmF5QnVmZmVyCiAgICAgICAgICAgICAgICBiID0gbmV3
IEJsb2IoWyhuZXcgVWludDhBcnJheShieXRlQXJyYXkpKS5idWZmZXJdLCB7IHR5cGU6IEJyb3dz
ZXIuZ2V0TWltZXR5cGUobmFtZSkgfSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGNh
dGNoKGUpIHsKICAgICAgICAgICAgICBSdW50aW1lLndhcm5PbmNlKCdCbG9iIGNvbnN0cnVjdG9y
IHByZXNlbnQgYnV0IGZhaWxzOiAnICsgZSArICc7IGZhbGxpbmcgYmFjayB0byBibG9iIGJ1aWxk
ZXInKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKCFiKSB7CiAgICAg
ICAgICAgIHZhciBiYiA9IG5ldyBCcm93c2VyLkJsb2JCdWlsZGVyKCk7CiAgICAgICAgICAgIGJi
LmFwcGVuZCgobmV3IFVpbnQ4QXJyYXkoYnl0ZUFycmF5KSkuYnVmZmVyKTsgLy8gd2UgbmVlZCB0
byBwYXNzIGEgYnVmZmVyLCBhbmQgbXVzdCBjb3B5IHRoZSBhcnJheSB0byBnZXQgdGhlIHJpZ2h0
IGRhdGEgcmFuZ2UKICAgICAgICAgICAgYiA9IGJiLmdldEJsb2IoKTsKICAgICAgICAgIH0KICAg
ICAgICAgIHZhciB1cmwgPSBCcm93c2VyLlVSTE9iamVjdC5jcmVhdGVPYmplY3RVUkwoYik7CiAg
ICAgICAgICB2YXIgaW1nID0gbmV3IEltYWdlKCk7CiAgICAgICAgICBpbWcub25sb2FkID0gZnVu
Y3Rpb24oKSB7CiAgICAgICAgICAgIGFzc2VydChpbWcuY29tcGxldGUsICdJbWFnZSAnICsgbmFt
ZSArICcgY291bGQgbm90IGJlIGRlY29kZWQnKTsKICAgICAgICAgICAgdmFyIGNhbnZhcyA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpOwogICAgICAgICAgICBjYW52YXMud2lkdGgg
PSBpbWcud2lkdGg7CiAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBpbWcuaGVpZ2h0OwogICAg
ICAgICAgICB2YXIgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7CiAgICAgICAgICAgIGN0
eC5kcmF3SW1hZ2UoaW1nLCAwLCAwKTsKICAgICAgICAgICAgTW9kdWxlWyJwcmVsb2FkZWRJbWFn
ZXMiXVtuYW1lXSA9IGNhbnZhczsKICAgICAgICAgICAgQnJvd3Nlci5VUkxPYmplY3QucmV2b2tl
T2JqZWN0VVJMKHVybCk7CiAgICAgICAgICAgIGlmIChvbmxvYWQpIG9ubG9hZChieXRlQXJyYXkp
OwogICAgICAgICAgfTsKICAgICAgICAgIGltZy5vbmVycm9yID0gZnVuY3Rpb24oZXZlbnQpIHsK
ICAgICAgICAgICAgY29uc29sZS5sb2coJ0ltYWdlICcgKyB1cmwgKyAnIGNvdWxkIG5vdCBiZSBk
ZWNvZGVkJyk7CiAgICAgICAgICAgIGlmIChvbmVycm9yKSBvbmVycm9yKCk7CiAgICAgICAgICB9
OwogICAgICAgICAgaW1nLnNyYyA9IHVybDsKICAgICAgICB9OwogICAgICAgIE1vZHVsZVsncHJl
bG9hZFBsdWdpbnMnXS5wdXNoKGltYWdlUGx1Z2luKTsKICAgICAgICB2YXIgYXVkaW9QbHVnaW4g
PSB7fTsKICAgICAgICBhdWRpb1BsdWdpblsnY2FuSGFuZGxlJ10gPSBmdW5jdGlvbihuYW1lKSB7
CiAgICAgICAgICByZXR1cm4gIU1vZHVsZS5ub0F1ZGlvRGVjb2RpbmcgJiYgbmFtZS5zdWJzdHIo
LTQpIGluIHsgJy5vZ2cnOiAxLCAnLndhdic6IDEsICcubXAzJzogMSB9OwogICAgICAgIH07CiAg
ICAgICAgYXVkaW9QbHVnaW5bJ2hhbmRsZSddID0gZnVuY3Rpb24oYnl0ZUFycmF5LCBuYW1lLCBv
bmxvYWQsIG9uZXJyb3IpIHsKICAgICAgICAgIHZhciBkb25lID0gZmFsc2U7CiAgICAgICAgICBm
dW5jdGlvbiBmaW5pc2goYXVkaW8pIHsKICAgICAgICAgICAgaWYgKGRvbmUpIHJldHVybjsKICAg
ICAgICAgICAgZG9uZSA9IHRydWU7CiAgICAgICAgICAgIE1vZHVsZVsicHJlbG9hZGVkQXVkaW9z
Il1bbmFtZV0gPSBhdWRpbzsKICAgICAgICAgICAgaWYgKG9ubG9hZCkgb25sb2FkKGJ5dGVBcnJh
eSk7CiAgICAgICAgICB9CiAgICAgICAgICBmdW5jdGlvbiBmYWlsKCkgewogICAgICAgICAgICBp
ZiAoZG9uZSkgcmV0dXJuOwogICAgICAgICAgICBkb25lID0gdHJ1ZTsKICAgICAgICAgICAgTW9k
dWxlWyJwcmVsb2FkZWRBdWRpb3MiXVtuYW1lXSA9IG5ldyBBdWRpbygpOyAvLyBlbXB0eSBzaGlt
CiAgICAgICAgICAgIGlmIChvbmVycm9yKSBvbmVycm9yKCk7CiAgICAgICAgICB9CiAgICAgICAg
ICBpZiAoQnJvd3Nlci5oYXNCbG9iQ29uc3RydWN0b3IpIHsKICAgICAgICAgICAgdHJ5IHsKICAg
ICAgICAgICAgICB2YXIgYiA9IG5ldyBCbG9iKFtieXRlQXJyYXldLCB7IHR5cGU6IEJyb3dzZXIu
Z2V0TWltZXR5cGUobmFtZSkgfSk7CiAgICAgICAgICAgIH0gY2F0Y2goZSkgewogICAgICAgICAg
ICAgIHJldHVybiBmYWlsKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHVybCA9IEJy
b3dzZXIuVVJMT2JqZWN0LmNyZWF0ZU9iamVjdFVSTChiKTsgLy8gWFhYIHdlIG5ldmVyIHJldm9r
ZSB0aGlzIQogICAgICAgICAgICB2YXIgYXVkaW8gPSBuZXcgQXVkaW8oKTsKICAgICAgICAgICAg
YXVkaW8uYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCBmdW5jdGlvbigpIHsgZmlu
aXNoKGF1ZGlvKSB9LCBmYWxzZSk7IC8vIHVzZSBhZGRFdmVudExpc3RlbmVyIGR1ZSB0byBjaHJv
bWl1bSBidWcgMTI0OTI2CiAgICAgICAgICAgIGF1ZGlvLm9uZXJyb3IgPSBmdW5jdGlvbihldmVu
dCkgewogICAgICAgICAgICAgIGlmIChkb25lKSByZXR1cm47CiAgICAgICAgICAgICAgY29uc29s
ZS5sb2coJ3dhcm5pbmc6IGJyb3dzZXIgY291bGQgbm90IGZ1bGx5IGRlY29kZSBhdWRpbyAnICsg
bmFtZSArICcsIHRyeWluZyBzbG93ZXIgYmFzZTY0IGFwcHJvYWNoJyk7CiAgICAgICAgICAgICAg
ZnVuY3Rpb24gZW5jb2RlNjQoZGF0YSkgewogICAgICAgICAgICAgICAgdmFyIEJBU0UgPSAnQUJD
REVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3
ODkrLyc7CiAgICAgICAgICAgICAgICB2YXIgUEFEID0gJz0nOwogICAgICAgICAgICAgICAgdmFy
IHJldCA9ICcnOwogICAgICAgICAgICAgICAgdmFyIGxlZnRjaGFyID0gMDsKICAgICAgICAgICAg
ICAgIHZhciBsZWZ0Yml0cyA9IDA7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGRhdGEubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgbGVmdGNoYXIgPSAobGVmdGNo
YXIgPDwgOCkgfCBkYXRhW2ldOwogICAgICAgICAgICAgICAgICBsZWZ0Yml0cyArPSA4OwogICAg
ICAgICAgICAgICAgICB3aGlsZSAobGVmdGJpdHMgPj0gNikgewogICAgICAgICAgICAgICAgICAg
IHZhciBjdXJyID0gKGxlZnRjaGFyID4+IChsZWZ0Yml0cy02KSkgJiAweDNmOwogICAgICAgICAg
ICAgICAgICAgIGxlZnRiaXRzIC09IDY7CiAgICAgICAgICAgICAgICAgICAgcmV0ICs9IEJBU0Vb
Y3Vycl07CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIGlmIChsZWZ0Yml0cyA9PSAyKSB7CiAgICAgICAgICAgICAgICAgIHJldCArPSBCQVNFWyhs
ZWZ0Y2hhciYzKSA8PCA0XTsKICAgICAgICAgICAgICAgICAgcmV0ICs9IFBBRCArIFBBRDsKICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdGJpdHMgPT0gNCkgewogICAgICAgICAgICAgICAg
ICByZXQgKz0gQkFTRVsobGVmdGNoYXImMHhmKSA8PCAyXTsKICAgICAgICAgICAgICAgICAgcmV0
ICs9IFBBRDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CiAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgIGF1ZGlvLnNyYyA9ICdkYXRhOmF1ZGlvL3gtJyAr
IG5hbWUuc3Vic3RyKC0zKSArICc7YmFzZTY0LCcgKyBlbmNvZGU2NChieXRlQXJyYXkpOwogICAg
ICAgICAgICAgIGZpbmlzaChhdWRpbyk7IC8vIHdlIGRvbid0IHdhaXQgZm9yIGNvbmZpcm1hdGlv
biB0aGlzIHdvcmtlZCAtIGJ1dCBpdCdzIHdvcnRoIHRyeWluZwogICAgICAgICAgICB9OwogICAg
ICAgICAgICBhdWRpby5zcmMgPSB1cmw7CiAgICAgICAgICAgIC8vIHdvcmthcm91bmQgZm9yIGNo
cm9tZSBidWcgMTI0OTI2IC0gd2UgZG8gbm90IGFsd2F5cyBnZXQgb25jYW5wbGF5dGhyb3VnaCBv
ciBvbmVycm9yCiAgICAgICAgICAgIEJyb3dzZXIuc2FmZVNldFRpbWVvdXQoZnVuY3Rpb24oKSB7
CiAgICAgICAgICAgICAgZmluaXNoKGF1ZGlvKTsgLy8gdHJ5IHRvIHVzZSBpdCBldmVuIHRob3Vn
aCBpdCBpcyBub3QgbmVjZXNzYXJpbHkgcmVhZHkgdG8gcGxheQogICAgICAgICAgICB9LCAxMDAw
MCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gZmFpbCgpOwogICAgICAg
ICAgfQogICAgICAgIH07CiAgICAgICAgTW9kdWxlWydwcmVsb2FkUGx1Z2lucyddLnB1c2goYXVk
aW9QbHVnaW4pOwogICAgICAgIC8vIENhbnZhcyBldmVudCBzZXR1cAogICAgICAgIHZhciBjYW52
YXMgPSBNb2R1bGVbJ2NhbnZhcyddOwogICAgICAgIGNhbnZhcy5yZXF1ZXN0UG9pbnRlckxvY2sg
PSBjYW52YXNbJ3JlcXVlc3RQb2ludGVyTG9jayddIHx8CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhbnZhc1snbW96UmVxdWVzdFBvaW50ZXJMb2NrJ10gfHwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzWyd3ZWJraXRSZXF1ZXN0UG9pbnRlckxv
Y2snXTsKICAgICAgICBjYW52YXMuZXhpdFBvaW50ZXJMb2NrID0gZG9jdW1lbnRbJ2V4aXRQb2lu
dGVyTG9jayddIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50Wydt
b3pFeGl0UG9pbnRlckxvY2snXSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
b2N1bWVudFsnd2Via2l0RXhpdFBvaW50ZXJMb2NrJ10gfHwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZnVuY3Rpb24oKXt9OyAvLyBuby1vcCBpZiBmdW5jdGlvbiBkb2VzIG5vdCBl
eGlzdAogICAgICAgIGNhbnZhcy5leGl0UG9pbnRlckxvY2sgPSBjYW52YXMuZXhpdFBvaW50ZXJM
b2NrLmJpbmQoZG9jdW1lbnQpOwogICAgICAgIGZ1bmN0aW9uIHBvaW50ZXJMb2NrQ2hhbmdlKCkg
ewogICAgICAgICAgQnJvd3Nlci5wb2ludGVyTG9jayA9IGRvY3VtZW50Wydwb2ludGVyTG9ja0Vs
ZW1lbnQnXSA9PT0gY2FudmFzIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9j
dW1lbnRbJ21velBvaW50ZXJMb2NrRWxlbWVudCddID09PSBjYW52YXMgfHwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkb2N1bWVudFsnd2Via2l0UG9pbnRlckxvY2tFbGVtZW50J10g
PT09IGNhbnZhczsKICAgICAgICB9CiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcign
cG9pbnRlcmxvY2tjaGFuZ2UnLCBwb2ludGVyTG9ja0NoYW5nZSwgZmFsc2UpOwogICAgICAgIGRv
Y3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21venBvaW50ZXJsb2NrY2hhbmdlJywgcG9pbnRlckxv
Y2tDaGFuZ2UsIGZhbHNlKTsKICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd3ZWJr
aXRwb2ludGVybG9ja2NoYW5nZScsIHBvaW50ZXJMb2NrQ2hhbmdlLCBmYWxzZSk7CiAgICAgICAg
aWYgKE1vZHVsZVsnZWxlbWVudFBvaW50ZXJMb2NrJ10pIHsKICAgICAgICAgIGNhbnZhcy5hZGRF
dmVudExpc3RlbmVyKCJjbGljayIsIGZ1bmN0aW9uKGV2KSB7CiAgICAgICAgICAgIGlmICghQnJv
d3Nlci5wb2ludGVyTG9jayAmJiBjYW52YXMucmVxdWVzdFBvaW50ZXJMb2NrKSB7CiAgICAgICAg
ICAgICAgY2FudmFzLnJlcXVlc3RQb2ludGVyTG9jaygpOwogICAgICAgICAgICAgIGV2LnByZXZl
bnREZWZhdWx0KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sIGZhbHNlKTsKICAgICAgICB9
CiAgICAgIH0sY3JlYXRlQ29udGV4dDpmdW5jdGlvbiAoY2FudmFzLCB1c2VXZWJHTCwgc2V0SW5N
b2R1bGUpIHsKICAgICAgICB2YXIgY3R4OwogICAgICAgIHRyeSB7CiAgICAgICAgICBpZiAodXNl
V2ViR0wpIHsKICAgICAgICAgICAgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRh
bC13ZWJnbCcsIHsKICAgICAgICAgICAgICBhbHBoYTogZmFsc2UKICAgICAgICAgICAgfSk7CiAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQn
KTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghY3R4KSB0aHJvdyAnOignOwogICAgICAgIH0g
Y2F0Y2ggKGUpIHsKICAgICAgICAgIE1vZHVsZS5wcmludCgnQ291bGQgbm90IGNyZWF0ZSBjYW52
YXMgLSAnICsgZSk7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgaWYg
KHVzZVdlYkdMKSB7CiAgICAgICAgICAvLyBTZXQgdGhlIGJhY2tncm91bmQgb2YgdGhlIFdlYkdM
IGNhbnZhcyB0byBibGFjawogICAgICAgICAgY2FudmFzLnN0eWxlLmJhY2tncm91bmRDb2xvciA9
ICJibGFjayI7CiAgICAgICAgICAvLyBXYXJuIG9uIGNvbnRleHQgbG9zcwogICAgICAgICAgY2Fu
dmFzLmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dGxvc3QnLCBmdW5jdGlvbihldmVudCkg
ewogICAgICAgICAgICBhbGVydCgnV2ViR0wgY29udGV4dCBsb3N0LiBZb3Ugd2lsbCBuZWVkIHRv
IHJlbG9hZCB0aGUgcGFnZS4nKTsKICAgICAgICAgIH0sIGZhbHNlKTsKICAgICAgICB9CiAgICAg
ICAgaWYgKHNldEluTW9kdWxlKSB7CiAgICAgICAgICBNb2R1bGUuY3R4ID0gY3R4OwogICAgICAg
ICAgTW9kdWxlLnVzZVdlYkdMID0gdXNlV2ViR0w7CiAgICAgICAgICBCcm93c2VyLm1vZHVsZUNv
bnRleHRDcmVhdGVkQ2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24oY2FsbGJhY2spIHsgY2FsbGJh
Y2soKSB9KTsKICAgICAgICAgIEJyb3dzZXIuaW5pdCgpOwogICAgICAgIH0KICAgICAgICByZXR1
cm4gY3R4OwogICAgICB9LGRlc3Ryb3lDb250ZXh0OmZ1bmN0aW9uIChjYW52YXMsIHVzZVdlYkdM
LCBzZXRJbk1vZHVsZSkge30sZnVsbFNjcmVlbkhhbmRsZXJzSW5zdGFsbGVkOmZhbHNlLGxvY2tQ
b2ludGVyOnVuZGVmaW5lZCxyZXNpemVDYW52YXM6dW5kZWZpbmVkLHJlcXVlc3RGdWxsU2NyZWVu
OmZ1bmN0aW9uIChsb2NrUG9pbnRlciwgcmVzaXplQ2FudmFzKSB7CiAgICAgICAgQnJvd3Nlci5s
b2NrUG9pbnRlciA9IGxvY2tQb2ludGVyOwogICAgICAgIEJyb3dzZXIucmVzaXplQ2FudmFzID0g
cmVzaXplQ2FudmFzOwogICAgICAgIGlmICh0eXBlb2YgQnJvd3Nlci5sb2NrUG9pbnRlciA9PT0g
J3VuZGVmaW5lZCcpIEJyb3dzZXIubG9ja1BvaW50ZXIgPSB0cnVlOwogICAgICAgIGlmICh0eXBl
b2YgQnJvd3Nlci5yZXNpemVDYW52YXMgPT09ICd1bmRlZmluZWQnKSBCcm93c2VyLnJlc2l6ZUNh
bnZhcyA9IGZhbHNlOwogICAgICAgIHZhciBjYW52YXMgPSBNb2R1bGVbJ2NhbnZhcyddOwogICAg
ICAgIGZ1bmN0aW9uIGZ1bGxTY3JlZW5DaGFuZ2UoKSB7CiAgICAgICAgICBCcm93c2VyLmlzRnVs
bFNjcmVlbiA9IGZhbHNlOwogICAgICAgICAgaWYgKChkb2N1bWVudFsnd2Via2l0RnVsbFNjcmVl
bkVsZW1lbnQnXSB8fCBkb2N1bWVudFsnd2Via2l0RnVsbHNjcmVlbkVsZW1lbnQnXSB8fAogICAg
ICAgICAgICAgICBkb2N1bWVudFsnbW96RnVsbFNjcmVlbkVsZW1lbnQnXSB8fCBkb2N1bWVudFsn
bW96RnVsbHNjcmVlbkVsZW1lbnQnXSB8fAogICAgICAgICAgICAgICBkb2N1bWVudFsnZnVsbFNj
cmVlbkVsZW1lbnQnXSB8fCBkb2N1bWVudFsnZnVsbHNjcmVlbkVsZW1lbnQnXSkgPT09IGNhbnZh
cykgewogICAgICAgICAgICBjYW52YXMuY2FuY2VsRnVsbFNjcmVlbiA9IGRvY3VtZW50WydjYW5j
ZWxGdWxsU2NyZWVuJ10gfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
b2N1bWVudFsnbW96Q2FuY2VsRnVsbFNjcmVlbiddIHx8CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZG9jdW1lbnRbJ3dlYmtpdENhbmNlbEZ1bGxTY3JlZW4nXTsKICAgICAg
ICAgICAgY2FudmFzLmNhbmNlbEZ1bGxTY3JlZW4gPSBjYW52YXMuY2FuY2VsRnVsbFNjcmVlbi5i
aW5kKGRvY3VtZW50KTsKICAgICAgICAgICAgaWYgKEJyb3dzZXIubG9ja1BvaW50ZXIpIGNhbnZh
cy5yZXF1ZXN0UG9pbnRlckxvY2soKTsKICAgICAgICAgICAgQnJvd3Nlci5pc0Z1bGxTY3JlZW4g
PSB0cnVlOwogICAgICAgICAgICBpZiAoQnJvd3Nlci5yZXNpemVDYW52YXMpIEJyb3dzZXIuc2V0
RnVsbFNjcmVlbkNhbnZhc1NpemUoKTsKICAgICAgICAgIH0gZWxzZSBpZiAoQnJvd3Nlci5yZXNp
emVDYW52YXMpewogICAgICAgICAgICBCcm93c2VyLnNldFdpbmRvd2VkQ2FudmFzU2l6ZSgpOwog
ICAgICAgICAgfQogICAgICAgICAgaWYgKE1vZHVsZVsnb25GdWxsU2NyZWVuJ10pIE1vZHVsZVsn
b25GdWxsU2NyZWVuJ10oQnJvd3Nlci5pc0Z1bGxTY3JlZW4pOwogICAgICAgIH0KICAgICAgICBp
ZiAoIUJyb3dzZXIuZnVsbFNjcmVlbkhhbmRsZXJzSW5zdGFsbGVkKSB7CiAgICAgICAgICBCcm93
c2VyLmZ1bGxTY3JlZW5IYW5kbGVyc0luc3RhbGxlZCA9IHRydWU7CiAgICAgICAgICBkb2N1bWVu
dC5hZGRFdmVudExpc3RlbmVyKCdmdWxsc2NyZWVuY2hhbmdlJywgZnVsbFNjcmVlbkNoYW5nZSwg
ZmFsc2UpOwogICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW96ZnVsbHNjcmVl
bmNoYW5nZScsIGZ1bGxTY3JlZW5DaGFuZ2UsIGZhbHNlKTsKICAgICAgICAgIGRvY3VtZW50LmFk
ZEV2ZW50TGlzdGVuZXIoJ3dlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UnLCBmdWxsU2NyZWVuQ2hhbmdl
LCBmYWxzZSk7CiAgICAgICAgfQogICAgICAgIGNhbnZhcy5yZXF1ZXN0RnVsbFNjcmVlbiA9IGNh
bnZhc1sncmVxdWVzdEZ1bGxTY3JlZW4nXSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhbnZhc1snbW96UmVxdWVzdEZ1bGxTY3JlZW4nXSB8fAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChjYW52YXNbJ3dlYmtpdFJlcXVlc3RGdWxsU2NyZWVuJ10gPyBm
dW5jdGlvbigpIHsgY2FudmFzWyd3ZWJraXRSZXF1ZXN0RnVsbFNjcmVlbiddKEVsZW1lbnRbJ0FM
TE9XX0tFWUJPQVJEX0lOUFVUJ10pIH0gOiBudWxsKTsKICAgICAgICBjYW52YXMucmVxdWVzdEZ1
bGxTY3JlZW4oKTsKICAgICAgfSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWU6ZnVuY3Rpb24gKGZ1bmMp
IHsKICAgICAgICBpZiAoIXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHsKICAgICAgICAg
IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSB3aW5kb3dbJ3JlcXVlc3RBbmltYXRpb25G
cmFtZSddIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93
Wydtb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXSB8fAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdpbmRvd1snd2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lJ10gfHwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dbJ21zUmVxdWVz
dEFuaW1hdGlvbkZyYW1lJ10gfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3aW5kb3dbJ29SZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXSB8fAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd1snc2V0VGltZW91dCddOwogICAgICAgIH0K
ICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmMpOwogICAgICB9LHNhZmVD
YWxsYmFjazpmdW5jdGlvbiAoZnVuYykgewogICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAg
ICAgICAgIGlmICghQUJPUlQpIHJldHVybiBmdW5jLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CiAg
ICAgICAgfTsKICAgICAgfSxzYWZlUmVxdWVzdEFuaW1hdGlvbkZyYW1lOmZ1bmN0aW9uIChmdW5j
KSB7CiAgICAgICAgcmV0dXJuIEJyb3dzZXIucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9u
KCkgewogICAgICAgICAgaWYgKCFBQk9SVCkgZnVuYygpOwogICAgICAgIH0pOwogICAgICB9LHNh
ZmVTZXRUaW1lb3V0OmZ1bmN0aW9uIChmdW5jLCB0aW1lb3V0KSB7CiAgICAgICAgcmV0dXJuIHNl
dFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICBpZiAoIUFCT1JUKSBmdW5jKCk7CiAgICAg
ICAgfSwgdGltZW91dCk7CiAgICAgIH0sc2FmZVNldEludGVydmFsOmZ1bmN0aW9uIChmdW5jLCB0
aW1lb3V0KSB7CiAgICAgICAgcmV0dXJuIHNldEludGVydmFsKGZ1bmN0aW9uKCkgewogICAgICAg
ICAgaWYgKCFBQk9SVCkgZnVuYygpOwogICAgICAgIH0sIHRpbWVvdXQpOwogICAgICB9LGdldE1p
bWV0eXBlOmZ1bmN0aW9uIChuYW1lKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICdqcGcn
OiAnaW1hZ2UvanBlZycsCiAgICAgICAgICAnanBlZyc6ICdpbWFnZS9qcGVnJywKICAgICAgICAg
ICdwbmcnOiAnaW1hZ2UvcG5nJywKICAgICAgICAgICdibXAnOiAnaW1hZ2UvYm1wJywKICAgICAg
ICAgICdvZ2cnOiAnYXVkaW8vb2dnJywKICAgICAgICAgICd3YXYnOiAnYXVkaW8vd2F2JywKICAg
ICAgICAgICdtcDMnOiAnYXVkaW8vbXBlZycKICAgICAgICB9W25hbWUuc3Vic3RyKG5hbWUubGFz
dEluZGV4T2YoJy4nKSsxKV07CiAgICAgIH0sZ2V0VXNlck1lZGlhOmZ1bmN0aW9uIChmdW5jKSB7
CiAgICAgICAgaWYoIXdpbmRvdy5nZXRVc2VyTWVkaWEpIHsKICAgICAgICAgIHdpbmRvdy5nZXRV
c2VyTWVkaWEgPSBuYXZpZ2F0b3JbJ2dldFVzZXJNZWRpYSddIHx8CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbmF2aWdhdG9yWydtb3pHZXRVc2VyTWVkaWEnXTsKICAgICAgICB9CiAg
ICAgICAgd2luZG93LmdldFVzZXJNZWRpYShmdW5jKTsKICAgICAgfSxnZXRNb3ZlbWVudFg6ZnVu
Y3Rpb24gKGV2ZW50KSB7CiAgICAgICAgcmV0dXJuIGV2ZW50Wydtb3ZlbWVudFgnXSB8fAogICAg
ICAgICAgICAgICBldmVudFsnbW96TW92ZW1lbnRYJ10gfHwKICAgICAgICAgICAgICAgZXZlbnRb
J3dlYmtpdE1vdmVtZW50WCddIHx8CiAgICAgICAgICAgICAgIDA7CiAgICAgIH0sZ2V0TW92ZW1l
bnRZOmZ1bmN0aW9uIChldmVudCkgewogICAgICAgIHJldHVybiBldmVudFsnbW92ZW1lbnRZJ10g
fHwKICAgICAgICAgICAgICAgZXZlbnRbJ21vek1vdmVtZW50WSddIHx8CiAgICAgICAgICAgICAg
IGV2ZW50Wyd3ZWJraXRNb3ZlbWVudFknXSB8fAogICAgICAgICAgICAgICAwOwogICAgICB9LG1v
dXNlWDowLG1vdXNlWTowLG1vdXNlTW92ZW1lbnRYOjAsbW91c2VNb3ZlbWVudFk6MCxjYWxjdWxh
dGVNb3VzZUV2ZW50OmZ1bmN0aW9uIChldmVudCkgeyAvLyBldmVudCBzaG91bGQgYmUgbW91c2Vt
b3ZlLCBtb3VzZWRvd24gb3IgbW91c2V1cAogICAgICAgIGlmIChCcm93c2VyLnBvaW50ZXJMb2Nr
KSB7CiAgICAgICAgICAvLyBXaGVuIHRoZSBwb2ludGVyIGlzIGxvY2tlZCwgY2FsY3VsYXRlIHRo
ZSBjb29yZGluYXRlcwogICAgICAgICAgLy8gYmFzZWQgb24gdGhlIG1vdmVtZW50IG9mIHRoZSBt
b3VzZS4KICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIEZpcmVmb3ggYnVnIDc2NDQ5OAogICAg
ICAgICAgaWYgKGV2ZW50LnR5cGUgIT0gJ21vdXNlbW92ZScgJiYKICAgICAgICAgICAgICAoJ21v
ek1vdmVtZW50WCcgaW4gZXZlbnQpKSB7CiAgICAgICAgICAgIEJyb3dzZXIubW91c2VNb3ZlbWVu
dFggPSBCcm93c2VyLm1vdXNlTW92ZW1lbnRZID0gMDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgIEJyb3dzZXIubW91c2VNb3ZlbWVudFggPSBCcm93c2VyLmdldE1vdmVtZW50WChldmVu
dCk7CiAgICAgICAgICAgIEJyb3dzZXIubW91c2VNb3ZlbWVudFkgPSBCcm93c2VyLmdldE1vdmVt
ZW50WShldmVudCk7CiAgICAgICAgICB9CiAgICAgICAgICAvLyBjaGVjayBpZiBTREwgaXMgYXZh
aWxhYmxlCiAgICAgICAgICBpZiAodHlwZW9mIFNETCAhPSAidW5kZWZpbmVkIikgewogICAgICAg
ICAgCUJyb3dzZXIubW91c2VYID0gU0RMLm1vdXNlWCArIEJyb3dzZXIubW91c2VNb3ZlbWVudFg7
CiAgICAgICAgICAJQnJvd3Nlci5tb3VzZVkgPSBTREwubW91c2VZICsgQnJvd3Nlci5tb3VzZU1v
dmVtZW50WTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAJLy8ganVzdCBhZGQgdGhlIG1v
dXNlIGRlbHRhIHRvIHRoZSBjdXJyZW50IGFic29sdXQgbW91c2UgcG9zaXRpb24KICAgICAgICAg
IAkvLyBGSVhNRTogaWRlYWxseSB0aGlzIHNob3VsZCBiZSBjbGFtcGVkIGFnYWluc3QgdGhlIGNh
bnZhcyBzaXplIGFuZCB6ZXJvCiAgICAgICAgICAJQnJvd3Nlci5tb3VzZVggKz0gQnJvd3Nlci5t
b3VzZU1vdmVtZW50WDsKICAgICAgICAgIAlCcm93c2VyLm1vdXNlWSArPSBCcm93c2VyLm1vdXNl
TW92ZW1lbnRZOwogICAgICAgICAgfSAgICAgICAgCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
IC8vIE90aGVyd2lzZSwgY2FsY3VsYXRlIHRoZSBtb3ZlbWVudCBiYXNlZCBvbiB0aGUgY2hhbmdl
cwogICAgICAgICAgLy8gaW4gdGhlIGNvb3JkaW5hdGVzLgogICAgICAgICAgdmFyIHJlY3QgPSBN
b2R1bGVbImNhbnZhcyJdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgdmFyIHgg
PSBldmVudC5wYWdlWCAtICh3aW5kb3cuc2Nyb2xsWCArIHJlY3QubGVmdCk7CiAgICAgICAgICB2
YXIgeSA9IGV2ZW50LnBhZ2VZIC0gKHdpbmRvdy5zY3JvbGxZICsgcmVjdC50b3ApOwogICAgICAg
ICAgLy8gdGhlIGNhbnZhcyBtaWdodCBiZSBDU1Mtc2NhbGVkIGNvbXBhcmVkIHRvIGl0cyBiYWNr
YnVmZmVyOwogICAgICAgICAgLy8gU0RMLXVzaW5nIGNvbnRlbnQgd2lsbCB3YW50IG1vdXNlIGNv
b3JkaW5hdGVzIGluIHRlcm1zCiAgICAgICAgICAvLyBvZiBiYWNrYnVmZmVyIHVuaXRzLgogICAg
ICAgICAgdmFyIGN3ID0gTW9kdWxlWyJjYW52YXMiXS53aWR0aDsKICAgICAgICAgIHZhciBjaCA9
IE1vZHVsZVsiY2FudmFzIl0uaGVpZ2h0OwogICAgICAgICAgeCA9IHggKiAoY3cgLyByZWN0Lndp
ZHRoKTsKICAgICAgICAgIHkgPSB5ICogKGNoIC8gcmVjdC5oZWlnaHQpOwogICAgICAgICAgQnJv
d3Nlci5tb3VzZU1vdmVtZW50WCA9IHggLSBCcm93c2VyLm1vdXNlWDsKICAgICAgICAgIEJyb3dz
ZXIubW91c2VNb3ZlbWVudFkgPSB5IC0gQnJvd3Nlci5tb3VzZVk7CiAgICAgICAgICBCcm93c2Vy
Lm1vdXNlWCA9IHg7CiAgICAgICAgICBCcm93c2VyLm1vdXNlWSA9IHk7CiAgICAgICAgfQogICAg
ICB9LHhockxvYWQ6ZnVuY3Rpb24gKHVybCwgb25sb2FkLCBvbmVycm9yKSB7CiAgICAgICAgdmFy
IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwogICAgICAgIHhoci5vcGVuKCdHRVQnLCB1cmws
IHRydWUpOwogICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInOwogICAgICAg
IHhoci5vbmxvYWQgPSBmdW5jdGlvbigpIHsKICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09IDIw
MCB8fCAoeGhyLnN0YXR1cyA9PSAwICYmIHhoci5yZXNwb25zZSkpIHsgLy8gZmlsZSBVUkxzIGNh
biByZXR1cm4gMAogICAgICAgICAgICBvbmxvYWQoeGhyLnJlc3BvbnNlKTsKICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgIG9uZXJyb3IoKTsKICAgICAgICAgIH0KICAgICAgICB9OwogICAg
ICAgIHhoci5vbmVycm9yID0gb25lcnJvcjsKICAgICAgICB4aHIuc2VuZChudWxsKTsKICAgICAg
fSxhc3luY0xvYWQ6ZnVuY3Rpb24gKHVybCwgb25sb2FkLCBvbmVycm9yLCBub1J1bkRlcCkgewog
ICAgICAgIEJyb3dzZXIueGhyTG9hZCh1cmwsIGZ1bmN0aW9uKGFycmF5QnVmZmVyKSB7CiAgICAg
ICAgICBhc3NlcnQoYXJyYXlCdWZmZXIsICdMb2FkaW5nIGRhdGEgZmlsZSAiJyArIHVybCArICci
IGZhaWxlZCAobm8gYXJyYXlCdWZmZXIpLicpOwogICAgICAgICAgb25sb2FkKG5ldyBVaW50OEFy
cmF5KGFycmF5QnVmZmVyKSk7CiAgICAgICAgICBpZiAoIW5vUnVuRGVwKSByZW1vdmVSdW5EZXBl
bmRlbmN5KCdhbCAnICsgdXJsKTsKICAgICAgICB9LCBmdW5jdGlvbihldmVudCkgewogICAgICAg
ICAgaWYgKG9uZXJyb3IpIHsKICAgICAgICAgICAgb25lcnJvcigpOwogICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgdGhyb3cgJ0xvYWRpbmcgZGF0YSBmaWxlICInICsgdXJsICsgJyIgZmFp
bGVkLic7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgaWYgKCFub1J1bkRlcCkgYWRk
UnVuRGVwZW5kZW5jeSgnYWwgJyArIHVybCk7CiAgICAgIH0scmVzaXplTGlzdGVuZXJzOltdLHVw
ZGF0ZVJlc2l6ZUxpc3RlbmVyczpmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGNhbnZhcyA9IE1v
ZHVsZVsnY2FudmFzJ107CiAgICAgICAgQnJvd3Nlci5yZXNpemVMaXN0ZW5lcnMuZm9yRWFjaChm
dW5jdGlvbihsaXN0ZW5lcikgewogICAgICAgICAgbGlzdGVuZXIoY2FudmFzLndpZHRoLCBjYW52
YXMuaGVpZ2h0KTsKICAgICAgICB9KTsKICAgICAgfSxzZXRDYW52YXNTaXplOmZ1bmN0aW9uICh3
aWR0aCwgaGVpZ2h0LCBub1VwZGF0ZXMpIHsKICAgICAgICB2YXIgY2FudmFzID0gTW9kdWxlWydj
YW52YXMnXTsKICAgICAgICBjYW52YXMud2lkdGggPSB3aWR0aDsKICAgICAgICBjYW52YXMuaGVp
Z2h0ID0gaGVpZ2h0OwogICAgICAgIGlmICghbm9VcGRhdGVzKSBCcm93c2VyLnVwZGF0ZVJlc2l6
ZUxpc3RlbmVycygpOwogICAgICB9LHdpbmRvd2VkV2lkdGg6MCx3aW5kb3dlZEhlaWdodDowLHNl
dEZ1bGxTY3JlZW5DYW52YXNTaXplOmZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgY2FudmFzID0g
TW9kdWxlWydjYW52YXMnXTsKICAgICAgICB0aGlzLndpbmRvd2VkV2lkdGggPSBjYW52YXMud2lk
dGg7CiAgICAgICAgdGhpcy53aW5kb3dlZEhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7CiAgICAgICAg
Y2FudmFzLndpZHRoID0gc2NyZWVuLndpZHRoOwogICAgICAgIGNhbnZhcy5oZWlnaHQgPSBzY3Jl
ZW4uaGVpZ2h0OwogICAgICAgIC8vIGNoZWNrIGlmIFNETCBpcyBhdmFpbGFibGUgICAKICAgICAg
ICBpZiAodHlwZW9mIFNETCAhPSAidW5kZWZpbmVkIikgewogICAgICAgIAl2YXIgZmxhZ3MgPSBI
RUFQVTMyWygoU0RMLnNjcmVlbitSdW50aW1lLlFVQU5UVU1fU0laRSowKT4+MildOwogICAgICAg
IAlmbGFncyA9IGZsYWdzIHwgMHgwMDgwMDAwMDsgLy8gc2V0IFNETF9GVUxMU0NSRUVOIGZsYWcK
ICAgICAgICAJSEVBUDMyWygoU0RMLnNjcmVlbitSdW50aW1lLlFVQU5UVU1fU0laRSowKT4+Mild
PWZsYWdzCiAgICAgICAgfQogICAgICAgIEJyb3dzZXIudXBkYXRlUmVzaXplTGlzdGVuZXJzKCk7
CiAgICAgIH0sc2V0V2luZG93ZWRDYW52YXNTaXplOmZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIg
Y2FudmFzID0gTW9kdWxlWydjYW52YXMnXTsKICAgICAgICBjYW52YXMud2lkdGggPSB0aGlzLndp
bmRvd2VkV2lkdGg7CiAgICAgICAgY2FudmFzLmhlaWdodCA9IHRoaXMud2luZG93ZWRIZWlnaHQ7
CiAgICAgICAgLy8gY2hlY2sgaWYgU0RMIGlzIGF2YWlsYWJsZSAgICAgICAKICAgICAgICBpZiAo
dHlwZW9mIFNETCAhPSAidW5kZWZpbmVkIikgewogICAgICAgIAl2YXIgZmxhZ3MgPSBIRUFQVTMy
WygoU0RMLnNjcmVlbitSdW50aW1lLlFVQU5UVU1fU0laRSowKT4+MildOwogICAgICAgIAlmbGFn
cyA9IGZsYWdzICYgfjB4MDA4MDAwMDA7IC8vIGNsZWFyIFNETF9GVUxMU0NSRUVOIGZsYWcKICAg
ICAgICAJSEVBUDMyWygoU0RMLnNjcmVlbitSdW50aW1lLlFVQU5UVU1fU0laRSowKT4+MildPWZs
YWdzCiAgICAgICAgfQogICAgICAgIEJyb3dzZXIudXBkYXRlUmVzaXplTGlzdGVuZXJzKCk7CiAg
ICAgIH19OwpGUy5zdGF0aWNJbml0KCk7X19BVElOSVRfXy51bnNoaWZ0KHsgZnVuYzogZnVuY3Rp
b24oKSB7IGlmICghTW9kdWxlWyJub0ZTSW5pdCJdICYmICFGUy5pbml0LmluaXRpYWxpemVkKSBG
Uy5pbml0KCkgfSB9KTtfX0FUTUFJTl9fLnB1c2goeyBmdW5jOiBmdW5jdGlvbigpIHsgRlMuaWdu
b3JlUGVybWlzc2lvbnMgPSBmYWxzZSB9IH0pO19fQVRFWElUX18ucHVzaCh7IGZ1bmM6IGZ1bmN0
aW9uKCkgeyBGUy5xdWl0KCkgfSB9KTtNb2R1bGVbIkZTX2NyZWF0ZUZvbGRlciJdID0gRlMuY3Jl
YXRlRm9sZGVyO01vZHVsZVsiRlNfY3JlYXRlUGF0aCJdID0gRlMuY3JlYXRlUGF0aDtNb2R1bGVb
IkZTX2NyZWF0ZURhdGFGaWxlIl0gPSBGUy5jcmVhdGVEYXRhRmlsZTtNb2R1bGVbIkZTX2NyZWF0
ZVByZWxvYWRlZEZpbGUiXSA9IEZTLmNyZWF0ZVByZWxvYWRlZEZpbGU7TW9kdWxlWyJGU19jcmVh
dGVMYXp5RmlsZSJdID0gRlMuY3JlYXRlTGF6eUZpbGU7TW9kdWxlWyJGU19jcmVhdGVMaW5rIl0g
PSBGUy5jcmVhdGVMaW5rO01vZHVsZVsiRlNfY3JlYXRlRGV2aWNlIl0gPSBGUy5jcmVhdGVEZXZp
Y2U7Cl9fX2Vycm5vX3N0YXRlID0gUnVudGltZS5zdGF0aWNBbGxvYyg0KTsgSEVBUDMyWygoX19f
ZXJybm9fc3RhdGUpPj4yKV09MDsKTW9kdWxlWyJyZXF1ZXN0RnVsbFNjcmVlbiJdID0gZnVuY3Rp
b24obG9ja1BvaW50ZXIsIHJlc2l6ZUNhbnZhcykgeyBCcm93c2VyLnJlcXVlc3RGdWxsU2NyZWVu
KGxvY2tQb2ludGVyLCByZXNpemVDYW52YXMpIH07CiAgTW9kdWxlWyJyZXF1ZXN0QW5pbWF0aW9u
RnJhbWUiXSA9IGZ1bmN0aW9uKGZ1bmMpIHsgQnJvd3Nlci5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUo
ZnVuYykgfTsKICBNb2R1bGVbInNldENhbnZhc1NpemUiXSA9IGZ1bmN0aW9uKHdpZHRoLCBoZWln
aHQsIG5vVXBkYXRlcykgeyBCcm93c2VyLnNldENhbnZhc1NpemUod2lkdGgsIGhlaWdodCwgbm9V
cGRhdGVzKSB9OwogIE1vZHVsZVsicGF1c2VNYWluTG9vcCJdID0gZnVuY3Rpb24oKSB7IEJyb3dz
ZXIubWFpbkxvb3AucGF1c2UoKSB9OwogIE1vZHVsZVsicmVzdW1lTWFpbkxvb3AiXSA9IGZ1bmN0
aW9uKCkgeyBCcm93c2VyLm1haW5Mb29wLnJlc3VtZSgpIH07CiAgTW9kdWxlWyJnZXRVc2VyTWVk
aWEiXSA9IGZ1bmN0aW9uKCkgeyBCcm93c2VyLmdldFVzZXJNZWRpYSgpIH0KU1RBQ0tfQkFTRSA9
IFNUQUNLVE9QID0gUnVudGltZS5hbGlnbk1lbW9yeShTVEFUSUNUT1ApOwpzdGF0aWNTZWFsZWQg
PSB0cnVlOyAvLyBzZWFsIHRoZSBzdGF0aWMgcG9ydGlvbiBvZiBtZW1vcnkKU1RBQ0tfTUFYID0g
U1RBQ0tfQkFTRSArIDUyNDI4ODA7CkRZTkFNSUNfQkFTRSA9IERZTkFNSUNUT1AgPSBSdW50aW1l
LmFsaWduTWVtb3J5KFNUQUNLX01BWCk7CmFzc2VydChEWU5BTUlDX0JBU0UgPCBUT1RBTF9NRU1P
UlkpOyAvLyBTdGFjayBtdXN0IGZpdCBpbiBUT1RBTF9NRU1PUlk7IGFsbG9jYXRpb25zIGZyb20g
aGVyZSBvbiBtYXkgZW5sYXJnZSBUT1RBTF9NRU1PUlkKdmFyIE1hdGhfbWluID0gTWF0aC5taW47
CmZ1bmN0aW9uIGludm9rZV9paShpbmRleCxhMSkgewogIHRyeSB7CiAgICByZXR1cm4gTW9kdWxl
WyJkeW5DYWxsX2lpIl0oaW5kZXgsYTEpOwogIH0gY2F0Y2goZSkgewogICAgaWYgKHR5cGVvZiBl
ICE9PSAnbnVtYmVyJyAmJiBlICE9PSAnbG9uZ2ptcCcpIHRocm93IGU7CiAgICBhc21bInNldFRo
cmV3Il0oMSwgMCk7CiAgfQp9CmZ1bmN0aW9uIGludm9rZV92KGluZGV4KSB7CiAgdHJ5IHsKICAg
IE1vZHVsZVsiZHluQ2FsbF92Il0oaW5kZXgpOwogIH0gY2F0Y2goZSkgewogICAgaWYgKHR5cGVv
ZiBlICE9PSAnbnVtYmVyJyAmJiBlICE9PSAnbG9uZ2ptcCcpIHRocm93IGU7CiAgICBhc21bInNl
dFRocmV3Il0oMSwgMCk7CiAgfQp9CmZ1bmN0aW9uIGludm9rZV9paWkoaW5kZXgsYTEsYTIpIHsK
ICB0cnkgewogICAgcmV0dXJuIE1vZHVsZVsiZHluQ2FsbF9paWkiXShpbmRleCxhMSxhMik7CiAg
fSBjYXRjaChlKSB7CiAgICBpZiAodHlwZW9mIGUgIT09ICdudW1iZXInICYmIGUgIT09ICdsb25n
am1wJykgdGhyb3cgZTsKICAgIGFzbVsic2V0VGhyZXciXSgxLCAwKTsKICB9Cn0KZnVuY3Rpb24g
aW52b2tlX3ZpKGluZGV4LGExKSB7CiAgdHJ5IHsKICAgIE1vZHVsZVsiZHluQ2FsbF92aSJdKGlu
ZGV4LGExKTsKICB9IGNhdGNoKGUpIHsKICAgIGlmICh0eXBlb2YgZSAhPT0gJ251bWJlcicgJiYg
ZSAhPT0gJ2xvbmdqbXAnKSB0aHJvdyBlOwogICAgYXNtWyJzZXRUaHJldyJdKDEsIDApOwogIH0K
fQpmdW5jdGlvbiBhc21QcmludEludCh4LCB5KSB7CiAgTW9kdWxlLnByaW50KCdpbnQgJyArIHgg
KyAnLCcgKyB5KTsvLyArICcgJyArIG5ldyBFcnJvcigpLnN0YWNrKTsKfQpmdW5jdGlvbiBhc21Q
cmludEZsb2F0KHgsIHkpIHsKICBNb2R1bGUucHJpbnQoJ2Zsb2F0ICcgKyB4ICsgJywnICsgeSk7
Ly8gKyAnICcgKyBuZXcgRXJyb3IoKS5zdGFjayk7Cn0KLy8gRU1TQ1JJUFRFTl9TVEFSVF9BU00K
dmFyIGFzbSA9IChmdW5jdGlvbihnbG9iYWwsIGVudiwgYnVmZmVyKSB7CiAgJ3VzZSBhc20nOwog
IHZhciBIRUFQOCA9IG5ldyBnbG9iYWwuSW50OEFycmF5KGJ1ZmZlcik7CiAgdmFyIEhFQVAxNiA9
IG5ldyBnbG9iYWwuSW50MTZBcnJheShidWZmZXIpOwogIHZhciBIRUFQMzIgPSBuZXcgZ2xvYmFs
LkludDMyQXJyYXkoYnVmZmVyKTsKICB2YXIgSEVBUFU4ID0gbmV3IGdsb2JhbC5VaW50OEFycmF5
KGJ1ZmZlcik7CiAgdmFyIEhFQVBVMTYgPSBuZXcgZ2xvYmFsLlVpbnQxNkFycmF5KGJ1ZmZlcik7
CiAgdmFyIEhFQVBVMzIgPSBuZXcgZ2xvYmFsLlVpbnQzMkFycmF5KGJ1ZmZlcik7CiAgdmFyIEhF
QVBGMzIgPSBuZXcgZ2xvYmFsLkZsb2F0MzJBcnJheShidWZmZXIpOwogIHZhciBIRUFQRjY0ID0g
bmV3IGdsb2JhbC5GbG9hdDY0QXJyYXkoYnVmZmVyKTsKICB2YXIgU1RBQ0tUT1A9ZW52LlNUQUNL
VE9QfDA7CiAgdmFyIFNUQUNLX01BWD1lbnYuU1RBQ0tfTUFYfDA7CiAgdmFyIHRlbXBEb3VibGVQ
dHI9ZW52LnRlbXBEb3VibGVQdHJ8MDsKICB2YXIgQUJPUlQ9ZW52LkFCT1JUfDA7CiAgdmFyIE5h
Tj0rZW52Lk5hTjsKICB2YXIgSW5maW5pdHk9K2Vudi5JbmZpbml0eTsKICB2YXIgX19USFJFV19f
ID0gMDsKICB2YXIgdGhyZXdWYWx1ZSA9IDA7CiAgdmFyIHNldGptcElkID0gMDsKICB2YXIgdW5k
ZWYgPSAwOwogIHZhciB0ZW1wSW50ID0gMCwgdGVtcEJpZ0ludCA9IDAsIHRlbXBCaWdJbnRQID0g
MCwgdGVtcEJpZ0ludFMgPSAwLCB0ZW1wQmlnSW50UiA9IDAuMCwgdGVtcEJpZ0ludEkgPSAwLCB0
ZW1wQmlnSW50RCA9IDAsIHRlbXBWYWx1ZSA9IDAsIHRlbXBEb3VibGUgPSAwLjA7CiAgdmFyIHRl
bXBSZXQwID0gMDsKICB2YXIgdGVtcFJldDEgPSAwOwogIHZhciB0ZW1wUmV0MiA9IDA7CiAgdmFy
IHRlbXBSZXQzID0gMDsKICB2YXIgdGVtcFJldDQgPSAwOwogIHZhciB0ZW1wUmV0NSA9IDA7CiAg
dmFyIHRlbXBSZXQ2ID0gMDsKICB2YXIgdGVtcFJldDcgPSAwOwogIHZhciB0ZW1wUmV0OCA9IDA7
CiAgdmFyIHRlbXBSZXQ5ID0gMDsKICB2YXIgTWF0aF9mbG9vcj1nbG9iYWwuTWF0aC5mbG9vcjsK
ICB2YXIgTWF0aF9hYnM9Z2xvYmFsLk1hdGguYWJzOwogIHZhciBNYXRoX3NxcnQ9Z2xvYmFsLk1h
dGguc3FydDsKICB2YXIgTWF0aF9wb3c9Z2xvYmFsLk1hdGgucG93OwogIHZhciBNYXRoX2Nvcz1n
bG9iYWwuTWF0aC5jb3M7CiAgdmFyIE1hdGhfc2luPWdsb2JhbC5NYXRoLnNpbjsKICB2YXIgTWF0
aF90YW49Z2xvYmFsLk1hdGgudGFuOwogIHZhciBNYXRoX2Fjb3M9Z2xvYmFsLk1hdGguYWNvczsK
ICB2YXIgTWF0aF9hc2luPWdsb2JhbC5NYXRoLmFzaW47CiAgdmFyIE1hdGhfYXRhbj1nbG9iYWwu
TWF0aC5hdGFuOwogIHZhciBNYXRoX2F0YW4yPWdsb2JhbC5NYXRoLmF0YW4yOwogIHZhciBNYXRo
X2V4cD1nbG9iYWwuTWF0aC5leHA7CiAgdmFyIE1hdGhfbG9nPWdsb2JhbC5NYXRoLmxvZzsKICB2
YXIgTWF0aF9jZWlsPWdsb2JhbC5NYXRoLmNlaWw7CiAgdmFyIE1hdGhfaW11bD1nbG9iYWwuTWF0
aC5pbXVsOwogIHZhciBhYm9ydD1lbnYuYWJvcnQ7CiAgdmFyIGFzc2VydD1lbnYuYXNzZXJ0Owog
IHZhciBhc21QcmludEludD1lbnYuYXNtUHJpbnRJbnQ7CiAgdmFyIGFzbVByaW50RmxvYXQ9ZW52
LmFzbVByaW50RmxvYXQ7CiAgdmFyIE1hdGhfbWluPWVudi5taW47CiAgdmFyIGludm9rZV9paT1l
bnYuaW52b2tlX2lpOwogIHZhciBpbnZva2Vfdj1lbnYuaW52b2tlX3Y7CiAgdmFyIGludm9rZV9p
aWk9ZW52Lmludm9rZV9paWk7CiAgdmFyIGludm9rZV92aT1lbnYuaW52b2tlX3ZpOwogIHZhciBf
cHdyaXRlPWVudi5fcHdyaXRlOwogIHZhciBfc3lzY29uZj1lbnYuX3N5c2NvbmY7CiAgdmFyIF9z
YnJrPWVudi5fc2JyazsKICB2YXIgX19fc2V0RXJyTm89ZW52Ll9fX3NldEVyck5vOwogIHZhciBf
ZndyaXRlPWVudi5fZndyaXRlOwogIHZhciBfX3JlYWxseU5lZ2F0aXZlPWVudi5fX3JlYWxseU5l
Z2F0aXZlOwogIHZhciBfdGltZT1lbnYuX3RpbWU7CiAgdmFyIF9fZm9ybWF0U3RyaW5nPWVudi5f
X2Zvcm1hdFN0cmluZzsKICB2YXIgX3NlbmQ9ZW52Ll9zZW5kOwogIHZhciBfd3JpdGU9ZW52Ll93
cml0ZTsKICB2YXIgX2Fib3J0PWVudi5fYWJvcnQ7CiAgdmFyIF9mcHJpbnRmPWVudi5fZnByaW50
ZjsKICB2YXIgX3ByaW50Zj1lbnYuX3ByaW50ZjsKICB2YXIgX19fZXJybm9fbG9jYXRpb249ZW52
Ll9fX2Vycm5vX2xvY2F0aW9uOwogIHZhciBfZmZsdXNoPWVudi5fZmZsdXNoOwovLyBFTVNDUklQ
VEVOX1NUQVJUX0ZVTkNTCmZ1bmN0aW9uIHN0YWNrQWxsb2MoaTEpIHsKIGkxID0gaTEgfCAwOwog
dmFyIGkyID0gMDsKIGkyID0gU1RBQ0tUT1A7CiBTVEFDS1RPUCA9IFNUQUNLVE9QICsgaTEgfCAw
OwogU1RBQ0tUT1AgPSBTVEFDS1RPUCArIDcgPj4gMyA8PCAzOwogcmV0dXJuIGkyIHwgMDsKfQpm
dW5jdGlvbiBzdGFja1NhdmUoKSB7CiByZXR1cm4gU1RBQ0tUT1AgfCAwOwp9CmZ1bmN0aW9uIHN0
YWNrUmVzdG9yZShpMSkgewogaTEgPSBpMSB8IDA7CiBTVEFDS1RPUCA9IGkxOwp9CmZ1bmN0aW9u
IHNldFRocmV3KGkxLCBpMikgewogaTEgPSBpMSB8IDA7CiBpMiA9IGkyIHwgMDsKIGlmICgoX19U
SFJFV19fIHwgMCkgPT0gMCkgewogIF9fVEhSRVdfXyA9IGkxOwogIHRocmV3VmFsdWUgPSBpMjsK
IH0KfQpmdW5jdGlvbiBjb3B5VGVtcEZsb2F0KGkxKSB7CiBpMSA9IGkxIHwgMDsKIEhFQVA4W3Rl
bXBEb3VibGVQdHJdID0gSEVBUDhbaTFdOwogSEVBUDhbdGVtcERvdWJsZVB0ciArIDEgfCAwXSA9
IEhFQVA4W2kxICsgMSB8IDBdOwogSEVBUDhbdGVtcERvdWJsZVB0ciArIDIgfCAwXSA9IEhFQVA4
W2kxICsgMiB8IDBdOwogSEVBUDhbdGVtcERvdWJsZVB0ciArIDMgfCAwXSA9IEhFQVA4W2kxICsg
MyB8IDBdOwp9CmZ1bmN0aW9uIGNvcHlUZW1wRG91YmxlKGkxKSB7CiBpMSA9IGkxIHwgMDsKIEhF
QVA4W3RlbXBEb3VibGVQdHJdID0gSEVBUDhbaTFdOwogSEVBUDhbdGVtcERvdWJsZVB0ciArIDEg
fCAwXSA9IEhFQVA4W2kxICsgMSB8IDBdOwogSEVBUDhbdGVtcERvdWJsZVB0ciArIDIgfCAwXSA9
IEhFQVA4W2kxICsgMiB8IDBdOwogSEVBUDhbdGVtcERvdWJsZVB0ciArIDMgfCAwXSA9IEhFQVA4
W2kxICsgMyB8IDBdOwogSEVBUDhbdGVtcERvdWJsZVB0ciArIDQgfCAwXSA9IEhFQVA4W2kxICsg
NCB8IDBdOwogSEVBUDhbdGVtcERvdWJsZVB0ciArIDUgfCAwXSA9IEhFQVA4W2kxICsgNSB8IDBd
OwogSEVBUDhbdGVtcERvdWJsZVB0ciArIDYgfCAwXSA9IEhFQVA4W2kxICsgNiB8IDBdOwogSEVB
UDhbdGVtcERvdWJsZVB0ciArIDcgfCAwXSA9IEhFQVA4W2kxICsgNyB8IDBdOwp9CmZ1bmN0aW9u
IHNldFRlbXBSZXQwKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHRlbXBSZXQwID0gaTE7Cn0KZnVuY3Rp
b24gc2V0VGVtcFJldDEoaTEpIHsKIGkxID0gaTEgfCAwOwogdGVtcFJldDEgPSBpMTsKfQpmdW5j
dGlvbiBzZXRUZW1wUmV0MihpMSkgewogaTEgPSBpMSB8IDA7CiB0ZW1wUmV0MiA9IGkxOwp9CmZ1
bmN0aW9uIHNldFRlbXBSZXQzKGkxKSB7CiBpMSA9IGkxIHwgMDsKIHRlbXBSZXQzID0gaTE7Cn0K
ZnVuY3Rpb24gc2V0VGVtcFJldDQoaTEpIHsKIGkxID0gaTEgfCAwOwogdGVtcFJldDQgPSBpMTsK
fQpmdW5jdGlvbiBzZXRUZW1wUmV0NShpMSkgewogaTEgPSBpMSB8IDA7CiB0ZW1wUmV0NSA9IGkx
Owp9CmZ1bmN0aW9uIHNldFRlbXBSZXQ2KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHRlbXBSZXQ2ID0g
aTE7Cn0KZnVuY3Rpb24gc2V0VGVtcFJldDcoaTEpIHsKIGkxID0gaTEgfCAwOwogdGVtcFJldDcg
PSBpMTsKfQpmdW5jdGlvbiBzZXRUZW1wUmV0OChpMSkgewogaTEgPSBpMSB8IDA7CiB0ZW1wUmV0
OCA9IGkxOwp9CmZ1bmN0aW9uIHNldFRlbXBSZXQ5KGkxKSB7CiBpMSA9IGkxIHwgMDsKIHRlbXBS
ZXQ5ID0gaTE7Cn0KZnVuY3Rpb24gcnVuUG9zdFNldHMoKSB7Cn0KZnVuY3Rpb24gX21haW4oaTEs
IGkyKSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogdmFyIGkzID0gMCwgaTQgPSAwLCBp
NSA9IDAsIGk2ID0gMCwgaTcgPSAwLCBpOCA9IDAsIGk5ID0gMCwgaTEwID0gMCwgaTExID0gMDsK
IGkzID0gU1RBQ0tUT1A7CiBkbyB7CiAgaWYgKChpMSB8IDApID4gMSkgewogICBpNCA9IEhFQVA4
W0hFQVAzMltpMiArIDQgPj4gMl0gfCAwXSB8IDA7CiAgIGlmICgoaTQgfCAwKSA9PSA1MCkgewog
ICAgaTUgPSA0MDA7CiAgICBicmVhazsKICAgfSBlbHNlIGlmICgoaTQgfCAwKSA9PSA1MSkgewog
ICAgaTYgPSA0OwogICAgYnJlYWs7CiAgIH0gZWxzZSBpZiAoKGk0IHwgMCkgPT0gNTIpIHsKICAg
IGk1ID0gNGUzOwogICAgYnJlYWs7CiAgIH0gZWxzZSBpZiAoKGk0IHwgMCkgPT0gNTMpIHsKICAg
IGk1ID0gOGUzOwogICAgYnJlYWs7CiAgIH0gZWxzZSBpZiAoKGk0IHwgMCkgPT0gNDkpIHsKICAg
IGk1ID0gNTU7CiAgICBicmVhazsKICAgfSBlbHNlIGlmICgoaTQgfCAwKSA9PSA0OCkgewogICAg
aTcgPSAwOwogICAgU1RBQ0tUT1AgPSBpMzsKICAgIHJldHVybiBpNyB8IDA7CiAgIH0gZWxzZSB7
CiAgICBfcHJpbnRmKDI0LCAoaTggPSBTVEFDS1RPUCwgU1RBQ0tUT1AgPSBTVEFDS1RPUCArIDgg
fCAwLCBIRUFQMzJbaTggPj4gMl0gPSBpNCAtIDQ4LCBpOCkgfCAwKSB8IDA7CiAgICBTVEFDS1RP
UCA9IGk4OwogICAgaTcgPSAtMTsKICAgIFNUQUNLVE9QID0gaTM7CiAgICByZXR1cm4gaTcgfCAw
OwogICB9CiAgfSBlbHNlIHsKICAgaTYgPSA0OwogIH0KIH0gd2hpbGUgKDApOwogaWYgKChpNiB8
IDApID09IDQpIHsKICBpNSA9IDgwMDsKIH0KIGk2ID0gX21hbGxvYygxMDQ4NTc2KSB8IDA7CiBp
MiA9IDA7CiBpMSA9IDA7CiBkbyB7CiAgaTQgPSAwOwogIHdoaWxlICgxKSB7CiAgIEhFQVA4W2k2
ICsgaTQgfCAwXSA9IGk0ICsgaTIgJiAyNTU7CiAgIGk5ID0gaTQgKyAxIHwgMDsKICAgaWYgKChp
OSB8IDApIDwgMTA0ODU3NikgewogICAgaTQgPSBpOTsKICAgfSBlbHNlIHsKICAgIGkxMCA9IGky
OwogICAgaTExID0gMDsKICAgIGJyZWFrOwogICB9CiAgfQogIGRvIHsKICAgaTEwID0gKEhFQVA4
W2k2ICsgaTExIHwgMF0gJiAxKSArIGkxMCB8IDA7CiAgIGkxMSA9IGkxMSArIDEgfCAwOwogIH0g
d2hpbGUgKChpMTEgfCAwKSA8IDEwNDg1NzYpOwogIGkyID0gKGkxMCB8IDApICUgMWUzIHwgMDsK
ICBpMSA9IGkxICsgMSB8IDA7CiB9IHdoaWxlICgoaTEgfCAwKSA8IChpNSB8IDApKTsKIF9wcmlu
dGYoOCwgKGk4ID0gU1RBQ0tUT1AsIFNUQUNLVE9QID0gU1RBQ0tUT1AgKyA4IHwgMCwgSEVBUDMy
W2k4ID4+IDJdID0gaTIsIGk4KSB8IDApIHwgMDsKIFNUQUNLVE9QID0gaTg7CiBpNyA9IDA7CiBT
VEFDS1RPUCA9IGkzOwogcmV0dXJuIGk3IHwgMDsKfQpmdW5jdGlvbiBfbWFsbG9jKGkxKSB7CiBp
MSA9IGkxIHwgMDsKIHZhciBpMiA9IDAsIGkzID0gMCwgaTQgPSAwLCBpNSA9IDAsIGk2ID0gMCwg
aTcgPSAwLCBpOCA9IDAsIGk5ID0gMCwgaTEwID0gMCwgaTExID0gMCwgaTEyID0gMCwgaTEzID0g
MCwgaTE0ID0gMCwgaTE1ID0gMCwgaTE2ID0gMCwgaTE3ID0gMCwgaTE4ID0gMCwgaTE5ID0gMCwg
aTIwID0gMCwgaTIxID0gMCwgaTIyID0gMCwgaTIzID0gMCwgaTI0ID0gMCwgaTI1ID0gMCwgaTI2
ID0gMCwgaTI3ID0gMCwgaTI4ID0gMCwgaTI5ID0gMCwgaTMwID0gMCwgaTMxID0gMCwgaTMyID0g
MCwgaTMzID0gMCwgaTM0ID0gMCwgaTM1ID0gMCwgaTM2ID0gMCwgaTM3ID0gMCwgaTM4ID0gMCwg
aTM5ID0gMCwgaTQwID0gMCwgaTQxID0gMCwgaTQyID0gMCwgaTQzID0gMCwgaTQ0ID0gMCwgaTQ1
ID0gMCwgaTQ2ID0gMCwgaTQ3ID0gMCwgaTQ4ID0gMCwgaTQ5ID0gMCwgaTUwID0gMCwgaTUxID0g
MCwgaTUyID0gMCwgaTUzID0gMCwgaTU0ID0gMCwgaTU1ID0gMCwgaTU2ID0gMCwgaTU3ID0gMCwg
aTU4ID0gMCwgaTU5ID0gMCwgaTYwID0gMCwgaTYxID0gMCwgaTYyID0gMCwgaTYzID0gMCwgaTY0
ID0gMCwgaTY1ID0gMCwgaTY2ID0gMCwgaTY3ID0gMCwgaTY4ID0gMCwgaTY5ID0gMCwgaTcwID0g
MCwgaTcxID0gMCwgaTcyID0gMCwgaTczID0gMCwgaTc0ID0gMCwgaTc1ID0gMCwgaTc2ID0gMCwg
aTc3ID0gMCwgaTc4ID0gMCwgaTc5ID0gMCwgaTgwID0gMCwgaTgxID0gMCwgaTgyID0gMCwgaTgz
ID0gMCwgaTg0ID0gMCwgaTg1ID0gMCwgaTg2ID0gMDsKIGRvIHsKICBpZiAoaTEgPj4+IDAgPCAy
NDUpIHsKICAgaWYgKGkxID4+PiAwIDwgMTEpIHsKICAgIGkyID0gMTY7CiAgIH0gZWxzZSB7CiAg
ICBpMiA9IGkxICsgMTEgJiAtODsKICAgfQogICBpMyA9IGkyID4+PiAzOwogICBpNCA9IEhFQVAz
MlsxNl0gfCAwOwogICBpNSA9IGk0ID4+PiAoaTMgPj4+IDApOwogICBpZiAoKGk1ICYgMyB8IDAp
ICE9IDApIHsKICAgIGk2ID0gKGk1ICYgMSBeIDEpICsgaTMgfCAwOwogICAgaTcgPSBpNiA8PCAx
OwogICAgaTggPSAxMDQgKyAoaTcgPDwgMikgfCAwOwogICAgaTkgPSAxMDQgKyAoaTcgKyAyIDw8
IDIpIHwgMDsKICAgIGk3ID0gSEVBUDMyW2k5ID4+IDJdIHwgMDsKICAgIGkxMCA9IGk3ICsgOCB8
IDA7CiAgICBpMTEgPSBIRUFQMzJbaTEwID4+IDJdIHwgMDsKICAgIGRvIHsKICAgICBpZiAoKGk4
IHwgMCkgPT0gKGkxMSB8IDApKSB7CiAgICAgIEhFQVAzMlsxNl0gPSBpNCAmIH4oMSA8PCBpNik7
CiAgICAgfSBlbHNlIHsKICAgICAgaWYgKGkxMSA+Pj4gMCA8IChIRUFQMzJbMjBdIHwgMCkgPj4+
IDApIHsKICAgICAgIF9hYm9ydCgpOwogICAgICAgcmV0dXJuIDA7CiAgICAgIH0KICAgICAgaTEy
ID0gaTExICsgMTIgfCAwOwogICAgICBpZiAoKEhFQVAzMltpMTIgPj4gMl0gfCAwKSA9PSAoaTcg
fCAwKSkgewogICAgICAgSEVBUDMyW2kxMiA+PiAyXSA9IGk4OwogICAgICAgSEVBUDMyW2k5ID4+
IDJdID0gaTExOwogICAgICAgYnJlYWs7CiAgICAgIH0gZWxzZSB7CiAgICAgICBfYWJvcnQoKTsK
ICAgICAgIHJldHVybiAwOwogICAgICB9CiAgICAgfQogICAgfSB3aGlsZSAoMCk7CiAgICBpMTEg
PSBpNiA8PCAzOwogICAgSEVBUDMyW2k3ICsgNCA+PiAyXSA9IGkxMSB8IDM7CiAgICBpOSA9IGk3
ICsgKGkxMSB8IDQpIHwgMDsKICAgIEhFQVAzMltpOSA+PiAyXSA9IEhFQVAzMltpOSA+PiAyXSB8
IDE7CiAgICBpMTMgPSBpMTA7CiAgICByZXR1cm4gaTEzIHwgMDsKICAgfQogICBpZiAoaTIgPj4+
IDAgPD0gKEhFQVAzMlsxOF0gfCAwKSA+Pj4gMCkgewogICAgaTE0ID0gaTI7CiAgICBicmVhazsK
ICAgfQogICBpZiAoKGk1IHwgMCkgIT0gMCkgewogICAgaTkgPSAyIDw8IGkzOwogICAgaTExID0g
aTUgPDwgaTMgJiAoaTkgfCAtaTkpOwogICAgaTkgPSAoaTExICYgLWkxMSkgLSAxIHwgMDsKICAg
IGkxMSA9IGk5ID4+PiAxMiAmIDE2OwogICAgaTggPSBpOSA+Pj4gKGkxMSA+Pj4gMCk7CiAgICBp
OSA9IGk4ID4+PiA1ICYgODsKICAgIGkxMiA9IGk4ID4+PiAoaTkgPj4+IDApOwogICAgaTggPSBp
MTIgPj4+IDIgJiA0OwogICAgaTE1ID0gaTEyID4+PiAoaTggPj4+IDApOwogICAgaTEyID0gaTE1
ID4+PiAxICYgMjsKICAgIGkxNiA9IGkxNSA+Pj4gKGkxMiA+Pj4gMCk7CiAgICBpMTUgPSBpMTYg
Pj4+IDEgJiAxOwogICAgaTE3ID0gKGk5IHwgaTExIHwgaTggfCBpMTIgfCBpMTUpICsgKGkxNiA+
Pj4gKGkxNSA+Pj4gMCkpIHwgMDsKICAgIGkxNSA9IGkxNyA8PCAxOwogICAgaTE2ID0gMTA0ICsg
KGkxNSA8PCAyKSB8IDA7CiAgICBpMTIgPSAxMDQgKyAoaTE1ICsgMiA8PCAyKSB8IDA7CiAgICBp
MTUgPSBIRUFQMzJbaTEyID4+IDJdIHwgMDsKICAgIGk4ID0gaTE1ICsgOCB8IDA7CiAgICBpMTEg
PSBIRUFQMzJbaTggPj4gMl0gfCAwOwogICAgZG8gewogICAgIGlmICgoaTE2IHwgMCkgPT0gKGkx
MSB8IDApKSB7CiAgICAgIEhFQVAzMlsxNl0gPSBpNCAmIH4oMSA8PCBpMTcpOwogICAgIH0gZWxz
ZSB7CiAgICAgIGlmIChpMTEgPj4+IDAgPCAoSEVBUDMyWzIwXSB8IDApID4+PiAwKSB7CiAgICAg
ICBfYWJvcnQoKTsKICAgICAgIHJldHVybiAwOwogICAgICB9CiAgICAgIGk5ID0gaTExICsgMTIg
fCAwOwogICAgICBpZiAoKEhFQVAzMltpOSA+PiAyXSB8IDApID09IChpMTUgfCAwKSkgewogICAg
ICAgSEVBUDMyW2k5ID4+IDJdID0gaTE2OwogICAgICAgSEVBUDMyW2kxMiA+PiAyXSA9IGkxMTsK
ICAgICAgIGJyZWFrOwogICAgICB9IGVsc2UgewogICAgICAgX2Fib3J0KCk7CiAgICAgICByZXR1
cm4gMDsKICAgICAgfQogICAgIH0KICAgIH0gd2hpbGUgKDApOwogICAgaTExID0gaTE3IDw8IDM7
CiAgICBpMTIgPSBpMTEgLSBpMiB8IDA7CiAgICBIRUFQMzJbaTE1ICsgNCA+PiAyXSA9IGkyIHwg
MzsKICAgIGkxNiA9IGkxNTsKICAgIGk0ID0gaTE2ICsgaTIgfCAwOwogICAgSEVBUDMyW2kxNiAr
IChpMiB8IDQpID4+IDJdID0gaTEyIHwgMTsKICAgIEhFQVAzMltpMTYgKyBpMTEgPj4gMl0gPSBp
MTI7CiAgICBpMTEgPSBIRUFQMzJbMThdIHwgMDsKICAgIGlmICgoaTExIHwgMCkgIT0gMCkgewog
ICAgIGkxNiA9IEhFQVAzMlsyMV0gfCAwOwogICAgIGkzID0gaTExID4+PiAzOwogICAgIGkxMSA9
IGkzIDw8IDE7CiAgICAgaTUgPSAxMDQgKyAoaTExIDw8IDIpIHwgMDsKICAgICBpMTAgPSBIRUFQ
MzJbMTZdIHwgMDsKICAgICBpNyA9IDEgPDwgaTM7CiAgICAgZG8gewogICAgICBpZiAoKGkxMCAm
IGk3IHwgMCkgPT0gMCkgewogICAgICAgSEVBUDMyWzE2XSA9IGkxMCB8IGk3OwogICAgICAgaTE4
ID0gaTU7CiAgICAgICBpMTkgPSAxMDQgKyAoaTExICsgMiA8PCAyKSB8IDA7CiAgICAgIH0gZWxz
ZSB7CiAgICAgICBpMyA9IDEwNCArIChpMTEgKyAyIDw8IDIpIHwgMDsKICAgICAgIGk2ID0gSEVB
UDMyW2kzID4+IDJdIHwgMDsKICAgICAgIGlmIChpNiA+Pj4gMCA+PSAoSEVBUDMyWzIwXSB8IDAp
ID4+PiAwKSB7CiAgICAgICAgaTE4ID0gaTY7CiAgICAgICAgaTE5ID0gaTM7CiAgICAgICAgYnJl
YWs7CiAgICAgICB9CiAgICAgICBfYWJvcnQoKTsKICAgICAgIHJldHVybiAwOwogICAgICB9CiAg
ICAgfSB3aGlsZSAoMCk7CiAgICAgSEVBUDMyW2kxOSA+PiAyXSA9IGkxNjsKICAgICBIRUFQMzJb
aTE4ICsgMTIgPj4gMl0gPSBpMTY7CiAgICAgSEVBUDMyW2kxNiArIDggPj4gMl0gPSBpMTg7CiAg
ICAgSEVBUDMyW2kxNiArIDEyID4+IDJdID0gaTU7CiAgICB9CiAgICBIRUFQMzJbMThdID0gaTEy
OwogICAgSEVBUDMyWzIxXSA9IGk0OwogICAgaTEzID0gaTg7CiAgICByZXR1cm4gaTEzIHwgMDsK
ICAgfQogICBpMTEgPSBIRUFQMzJbMTddIHwgMDsKICAgaWYgKChpMTEgfCAwKSA9PSAwKSB7CiAg
ICBpMTQgPSBpMjsKICAgIGJyZWFrOwogICB9CiAgIGk3ID0gKGkxMSAmIC1pMTEpIC0gMSB8IDA7
CiAgIGkxMSA9IGk3ID4+PiAxMiAmIDE2OwogICBpMTAgPSBpNyA+Pj4gKGkxMSA+Pj4gMCk7CiAg
IGk3ID0gaTEwID4+PiA1ICYgODsKICAgaTE1ID0gaTEwID4+PiAoaTcgPj4+IDApOwogICBpMTAg
PSBpMTUgPj4+IDIgJiA0OwogICBpMTcgPSBpMTUgPj4+IChpMTAgPj4+IDApOwogICBpMTUgPSBp
MTcgPj4+IDEgJiAyOwogICBpMyA9IGkxNyA+Pj4gKGkxNSA+Pj4gMCk7CiAgIGkxNyA9IGkzID4+
PiAxICYgMTsKICAgaTYgPSBIRUFQMzJbMzY4ICsgKChpNyB8IGkxMSB8IGkxMCB8IGkxNSB8IGkx
NykgKyAoaTMgPj4+IChpMTcgPj4+IDApKSA8PCAyKSA+PiAyXSB8IDA7CiAgIGkxNyA9IGk2Owog
ICBpMyA9IGk2OwogICBpMTUgPSAoSEVBUDMyW2k2ICsgNCA+PiAyXSAmIC04KSAtIGkyIHwgMDsK
ICAgd2hpbGUgKDEpIHsKICAgIGk2ID0gSEVBUDMyW2kxNyArIDE2ID4+IDJdIHwgMDsKICAgIGlm
ICgoaTYgfCAwKSA9PSAwKSB7CiAgICAgaTEwID0gSEVBUDMyW2kxNyArIDIwID4+IDJdIHwgMDsK
ICAgICBpZiAoKGkxMCB8IDApID09IDApIHsKICAgICAgYnJlYWs7CiAgICAgfSBlbHNlIHsKICAg
ICAgaTIwID0gaTEwOwogICAgIH0KICAgIH0gZWxzZSB7CiAgICAgaTIwID0gaTY7CiAgICB9CiAg
ICBpNiA9IChIRUFQMzJbaTIwICsgNCA+PiAyXSAmIC04KSAtIGkyIHwgMDsKICAgIGkxMCA9IGk2
ID4+PiAwIDwgaTE1ID4+PiAwOwogICAgaTE3ID0gaTIwOwogICAgaTMgPSBpMTAgPyBpMjAgOiBp
MzsKICAgIGkxNSA9IGkxMCA/IGk2IDogaTE1OwogICB9CiAgIGkxNyA9IGkzOwogICBpOCA9IEhF
QVAzMlsyMF0gfCAwOwogICBpZiAoaTE3ID4+PiAwIDwgaTggPj4+IDApIHsKICAgIF9hYm9ydCgp
OwogICAgcmV0dXJuIDA7CiAgIH0KICAgaTQgPSBpMTcgKyBpMiB8IDA7CiAgIGkxMiA9IGk0Owog
ICBpZiAoaTE3ID4+PiAwID49IGk0ID4+PiAwKSB7CiAgICBfYWJvcnQoKTsKICAgIHJldHVybiAw
OwogICB9CiAgIGk0ID0gSEVBUDMyW2kzICsgMjQgPj4gMl0gfCAwOwogICBpNSA9IEhFQVAzMltp
MyArIDEyID4+IDJdIHwgMDsKICAgZG8gewogICAgaWYgKChpNSB8IDApID09IChpMyB8IDApKSB7
CiAgICAgaTE2ID0gaTMgKyAyMCB8IDA7CiAgICAgaTYgPSBIRUFQMzJbaTE2ID4+IDJdIHwgMDsK
ICAgICBpZiAoKGk2IHwgMCkgPT0gMCkgewogICAgICBpMTAgPSBpMyArIDE2IHwgMDsKICAgICAg
aTExID0gSEVBUDMyW2kxMCA+PiAyXSB8IDA7CiAgICAgIGlmICgoaTExIHwgMCkgPT0gMCkgewog
ICAgICAgaTIxID0gMDsKICAgICAgIGJyZWFrOwogICAgICB9IGVsc2UgewogICAgICAgaTIyID0g
aTExOwogICAgICAgaTIzID0gaTEwOwogICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgaTIyID0g
aTY7CiAgICAgIGkyMyA9IGkxNjsKICAgICB9CiAgICAgd2hpbGUgKDEpIHsKICAgICAgaTE2ID0g
aTIyICsgMjAgfCAwOwogICAgICBpNiA9IEhFQVAzMltpMTYgPj4gMl0gfCAwOwogICAgICBpZiAo
KGk2IHwgMCkgIT0gMCkgewogICAgICAgaTIyID0gaTY7CiAgICAgICBpMjMgPSBpMTY7CiAgICAg
ICBjb250aW51ZTsKICAgICAgfQogICAgICBpMTYgPSBpMjIgKyAxNiB8IDA7CiAgICAgIGk2ID0g
SEVBUDMyW2kxNiA+PiAyXSB8IDA7CiAgICAgIGlmICgoaTYgfCAwKSA9PSAwKSB7CiAgICAgICBi
cmVhazsKICAgICAgfSBlbHNlIHsKICAgICAgIGkyMiA9IGk2OwogICAgICAgaTIzID0gaTE2Owog
ICAgICB9CiAgICAgfQogICAgIGlmIChpMjMgPj4+IDAgPCBpOCA+Pj4gMCkgewogICAgICBfYWJv
cnQoKTsKICAgICAgcmV0dXJuIDA7CiAgICAgfSBlbHNlIHsKICAgICAgSEVBUDMyW2kyMyA+PiAy
XSA9IDA7CiAgICAgIGkyMSA9IGkyMjsKICAgICAgYnJlYWs7CiAgICAgfQogICAgfSBlbHNlIHsK
ICAgICBpMTYgPSBIRUFQMzJbaTMgKyA4ID4+IDJdIHwgMDsKICAgICBpZiAoaTE2ID4+PiAwIDwg
aTggPj4+IDApIHsKICAgICAgX2Fib3J0KCk7CiAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBp
NiA9IGkxNiArIDEyIHwgMDsKICAgICBpZiAoKEhFQVAzMltpNiA+PiAyXSB8IDApICE9IChpMyB8
IDApKSB7CiAgICAgIF9hYm9ydCgpOwogICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgaTEwID0g
aTUgKyA4IHwgMDsKICAgICBpZiAoKEhFQVAzMltpMTAgPj4gMl0gfCAwKSA9PSAoaTMgfCAwKSkg
ewogICAgICBIRUFQMzJbaTYgPj4gMl0gPSBpNTsKICAgICAgSEVBUDMyW2kxMCA+PiAyXSA9IGkx
NjsKICAgICAgaTIxID0gaTU7CiAgICAgIGJyZWFrOwogICAgIH0gZWxzZSB7CiAgICAgIF9hYm9y
dCgpOwogICAgICByZXR1cm4gMDsKICAgICB9CiAgICB9CiAgIH0gd2hpbGUgKDApOwogICBMMTAw
IDogZG8gewogICAgaWYgKChpNCB8IDApICE9IDApIHsKICAgICBpNSA9IGkzICsgMjggfCAwOwog
ICAgIGk4ID0gMzY4ICsgKEhFQVAzMltpNSA+PiAyXSA8PCAyKSB8IDA7CiAgICAgZG8gewogICAg
ICBpZiAoKGkzIHwgMCkgPT0gKEhFQVAzMltpOCA+PiAyXSB8IDApKSB7CiAgICAgICBIRUFQMzJb
aTggPj4gMl0gPSBpMjE7CiAgICAgICBpZiAoKGkyMSB8IDApICE9IDApIHsKICAgICAgICBicmVh
azsKICAgICAgIH0KICAgICAgIEhFQVAzMlsxN10gPSBIRUFQMzJbMTddICYgfigxIDw8IEhFQVAz
MltpNSA+PiAyXSk7CiAgICAgICBicmVhayBMMTAwOwogICAgICB9IGVsc2UgewogICAgICAgaWYg
KGk0ID4+PiAwIDwgKEhFQVAzMlsyMF0gfCAwKSA+Pj4gMCkgewogICAgICAgIF9hYm9ydCgpOwog
ICAgICAgIHJldHVybiAwOwogICAgICAgfQogICAgICAgaTE2ID0gaTQgKyAxNiB8IDA7CiAgICAg
ICBpZiAoKEhFQVAzMltpMTYgPj4gMl0gfCAwKSA9PSAoaTMgfCAwKSkgewogICAgICAgIEhFQVAz
MltpMTYgPj4gMl0gPSBpMjE7CiAgICAgICB9IGVsc2UgewogICAgICAgIEhFQVAzMltpNCArIDIw
ID4+IDJdID0gaTIxOwogICAgICAgfQogICAgICAgaWYgKChpMjEgfCAwKSA9PSAwKSB7CiAgICAg
ICAgYnJlYWsgTDEwMDsKICAgICAgIH0KICAgICAgfQogICAgIH0gd2hpbGUgKDApOwogICAgIGlm
IChpMjEgPj4+IDAgPCAoSEVBUDMyWzIwXSB8IDApID4+PiAwKSB7CiAgICAgIF9hYm9ydCgpOwog
ICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgSEVBUDMyW2kyMSArIDI0ID4+IDJdID0gaTQ7CiAg
ICAgaTUgPSBIRUFQMzJbaTMgKyAxNiA+PiAyXSB8IDA7CiAgICAgZG8gewogICAgICBpZiAoKGk1
IHwgMCkgIT0gMCkgewogICAgICAgaWYgKGk1ID4+PiAwIDwgKEhFQVAzMlsyMF0gfCAwKSA+Pj4g
MCkgewogICAgICAgIF9hYm9ydCgpOwogICAgICAgIHJldHVybiAwOwogICAgICAgfSBlbHNlIHsK
ICAgICAgICBIRUFQMzJbaTIxICsgMTYgPj4gMl0gPSBpNTsKICAgICAgICBIRUFQMzJbaTUgKyAy
NCA+PiAyXSA9IGkyMTsKICAgICAgICBicmVhazsKICAgICAgIH0KICAgICAgfQogICAgIH0gd2hp
bGUgKDApOwogICAgIGk1ID0gSEVBUDMyW2kzICsgMjAgPj4gMl0gfCAwOwogICAgIGlmICgoaTUg
fCAwKSA9PSAwKSB7CiAgICAgIGJyZWFrOwogICAgIH0KICAgICBpZiAoaTUgPj4+IDAgPCAoSEVB
UDMyWzIwXSB8IDApID4+PiAwKSB7CiAgICAgIF9hYm9ydCgpOwogICAgICByZXR1cm4gMDsKICAg
ICB9IGVsc2UgewogICAgICBIRUFQMzJbaTIxICsgMjAgPj4gMl0gPSBpNTsKICAgICAgSEVBUDMy
W2k1ICsgMjQgPj4gMl0gPSBpMjE7CiAgICAgIGJyZWFrOwogICAgIH0KICAgIH0KICAgfSB3aGls
ZSAoMCk7CiAgIGlmIChpMTUgPj4+IDAgPCAxNikgewogICAgaTQgPSBpMTUgKyBpMiB8IDA7CiAg
ICBIRUFQMzJbaTMgKyA0ID4+IDJdID0gaTQgfCAzOwogICAgaTUgPSBpMTcgKyAoaTQgKyA0KSB8
IDA7CiAgICBIRUFQMzJbaTUgPj4gMl0gPSBIRUFQMzJbaTUgPj4gMl0gfCAxOwogICB9IGVsc2Ug
ewogICAgSEVBUDMyW2kzICsgNCA+PiAyXSA9IGkyIHwgMzsKICAgIEhFQVAzMltpMTcgKyAoaTIg
fCA0KSA+PiAyXSA9IGkxNSB8IDE7CiAgICBIRUFQMzJbaTE3ICsgKGkxNSArIGkyKSA+PiAyXSA9
IGkxNTsKICAgIGk1ID0gSEVBUDMyWzE4XSB8IDA7CiAgICBpZiAoKGk1IHwgMCkgIT0gMCkgewog
ICAgIGk0ID0gSEVBUDMyWzIxXSB8IDA7CiAgICAgaTggPSBpNSA+Pj4gMzsKICAgICBpNSA9IGk4
IDw8IDE7CiAgICAgaTE2ID0gMTA0ICsgKGk1IDw8IDIpIHwgMDsKICAgICBpMTAgPSBIRUFQMzJb
MTZdIHwgMDsKICAgICBpNiA9IDEgPDwgaTg7CiAgICAgZG8gewogICAgICBpZiAoKGkxMCAmIGk2
IHwgMCkgPT0gMCkgewogICAgICAgSEVBUDMyWzE2XSA9IGkxMCB8IGk2OwogICAgICAgaTI0ID0g
aTE2OwogICAgICAgaTI1ID0gMTA0ICsgKGk1ICsgMiA8PCAyKSB8IDA7CiAgICAgIH0gZWxzZSB7
CiAgICAgICBpOCA9IDEwNCArIChpNSArIDIgPDwgMikgfCAwOwogICAgICAgaTExID0gSEVBUDMy
W2k4ID4+IDJdIHwgMDsKICAgICAgIGlmIChpMTEgPj4+IDAgPj0gKEhFQVAzMlsyMF0gfCAwKSA+
Pj4gMCkgewogICAgICAgIGkyNCA9IGkxMTsKICAgICAgICBpMjUgPSBpODsKICAgICAgICBicmVh
azsKICAgICAgIH0KICAgICAgIF9hYm9ydCgpOwogICAgICAgcmV0dXJuIDA7CiAgICAgIH0KICAg
ICB9IHdoaWxlICgwKTsKICAgICBIRUFQMzJbaTI1ID4+IDJdID0gaTQ7CiAgICAgSEVBUDMyW2ky
NCArIDEyID4+IDJdID0gaTQ7CiAgICAgSEVBUDMyW2k0ICsgOCA+PiAyXSA9IGkyNDsKICAgICBI
RUFQMzJbaTQgKyAxMiA+PiAyXSA9IGkxNjsKICAgIH0KICAgIEhFQVAzMlsxOF0gPSBpMTU7CiAg
ICBIRUFQMzJbMjFdID0gaTEyOwogICB9CiAgIGk1ID0gaTMgKyA4IHwgMDsKICAgaWYgKChpNSB8
IDApID09IDApIHsKICAgIGkxNCA9IGkyOwogICAgYnJlYWs7CiAgIH0gZWxzZSB7CiAgICBpMTMg
PSBpNTsKICAgfQogICByZXR1cm4gaTEzIHwgMDsKICB9IGVsc2UgewogICBpZiAoaTEgPj4+IDAg
PiA0Mjk0OTY3MjMxKSB7CiAgICBpMTQgPSAtMTsKICAgIGJyZWFrOwogICB9CiAgIGk1ID0gaTEg
KyAxMSB8IDA7CiAgIGk2ID0gaTUgJiAtODsKICAgaTEwID0gSEVBUDMyWzE3XSB8IDA7CiAgIGlm
ICgoaTEwIHwgMCkgPT0gMCkgewogICAgaTE0ID0gaTY7CiAgICBicmVhazsKICAgfQogICBpMTcg
PSAtaTYgfCAwOwogICBpOCA9IGk1ID4+PiA4OwogICBkbyB7CiAgICBpZiAoKGk4IHwgMCkgPT0g
MCkgewogICAgIGkyNiA9IDA7CiAgICB9IGVsc2UgewogICAgIGlmIChpNiA+Pj4gMCA+IDE2Nzc3
MjE1KSB7CiAgICAgIGkyNiA9IDMxOwogICAgICBicmVhazsKICAgICB9CiAgICAgaTUgPSAoaTgg
KyAxMDQ4MzIwIHwgMCkgPj4+IDE2ICYgODsKICAgICBpMTEgPSBpOCA8PCBpNTsKICAgICBpNyA9
IChpMTEgKyA1MjAxOTIgfCAwKSA+Pj4gMTYgJiA0OwogICAgIGk5ID0gaTExIDw8IGk3OwogICAg
IGkxMSA9IChpOSArIDI0NTc2MCB8IDApID4+PiAxNiAmIDI7CiAgICAgaTI3ID0gMTQgLSAoaTcg
fCBpNSB8IGkxMSkgKyAoaTkgPDwgaTExID4+PiAxNSkgfCAwOwogICAgIGkyNiA9IGk2ID4+PiAo
KGkyNyArIDcgfCAwKSA+Pj4gMCkgJiAxIHwgaTI3IDw8IDE7CiAgICB9CiAgIH0gd2hpbGUgKDAp
OwogICBpOCA9IEhFQVAzMlszNjggKyAoaTI2IDw8IDIpID4+IDJdIHwgMDsKICAgTDE0OCA6IGRv
IHsKICAgIGlmICgoaTggfCAwKSA9PSAwKSB7CiAgICAgaTI4ID0gMDsKICAgICBpMjkgPSBpMTc7
CiAgICAgaTMwID0gMDsKICAgIH0gZWxzZSB7CiAgICAgaWYgKChpMjYgfCAwKSA9PSAzMSkgewog
ICAgICBpMzEgPSAwOwogICAgIH0gZWxzZSB7CiAgICAgIGkzMSA9IDI1IC0gKGkyNiA+Pj4gMSkg
fCAwOwogICAgIH0KICAgICBpMyA9IDA7CiAgICAgaTEyID0gaTE3OwogICAgIGkxNSA9IGk4Owog
ICAgIGkxNiA9IGk2IDw8IGkzMTsKICAgICBpNCA9IDA7CiAgICAgd2hpbGUgKDEpIHsKICAgICAg
aTI3ID0gSEVBUDMyW2kxNSArIDQgPj4gMl0gJiAtODsKICAgICAgaTExID0gaTI3IC0gaTYgfCAw
OwogICAgICBpZiAoaTExID4+PiAwIDwgaTEyID4+PiAwKSB7CiAgICAgICBpZiAoKGkyNyB8IDAp
ID09IChpNiB8IDApKSB7CiAgICAgICAgaTI4ID0gaTE1OwogICAgICAgIGkyOSA9IGkxMTsKICAg
ICAgICBpMzAgPSBpMTU7CiAgICAgICAgYnJlYWsgTDE0ODsKICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgaTMyID0gaTE1OwogICAgICAgIGkzMyA9IGkxMTsKICAgICAgIH0KICAgICAgfSBlbHNlIHsK
ICAgICAgIGkzMiA9IGkzOwogICAgICAgaTMzID0gaTEyOwogICAgICB9CiAgICAgIGkxMSA9IEhF
QVAzMltpMTUgKyAyMCA+PiAyXSB8IDA7CiAgICAgIGkyNyA9IEhFQVAzMltpMTUgKyAxNiArIChp
MTYgPj4+IDMxIDw8IDIpID4+IDJdIHwgMDsKICAgICAgaTkgPSAoaTExIHwgMCkgPT0gMCB8IChp
MTEgfCAwKSA9PSAoaTI3IHwgMCkgPyBpNCA6IGkxMTsKICAgICAgaWYgKChpMjcgfCAwKSA9PSAw
KSB7CiAgICAgICBpMjggPSBpMzI7CiAgICAgICBpMjkgPSBpMzM7CiAgICAgICBpMzAgPSBpOTsK
ICAgICAgIGJyZWFrOwogICAgICB9IGVsc2UgewogICAgICAgaTMgPSBpMzI7CiAgICAgICBpMTIg
PSBpMzM7CiAgICAgICBpMTUgPSBpMjc7CiAgICAgICBpMTYgPSBpMTYgPDwgMTsKICAgICAgIGk0
ID0gaTk7CiAgICAgIH0KICAgICB9CiAgICB9CiAgIH0gd2hpbGUgKDApOwogICBpZiAoKGkzMCB8
IDApID09IDAgJiAoaTI4IHwgMCkgPT0gMCkgewogICAgaTggPSAyIDw8IGkyNjsKICAgIGkxNyA9
IChpOCB8IC1pOCkgJiBpMTA7CiAgICBpZiAoKGkxNyB8IDApID09IDApIHsKICAgICBpMTQgPSBp
NjsKICAgICBicmVhazsKICAgIH0KICAgIGk4ID0gKGkxNyAmIC1pMTcpIC0gMSB8IDA7CiAgICBp
MTcgPSBpOCA+Pj4gMTIgJiAxNjsKICAgIGk0ID0gaTggPj4+IChpMTcgPj4+IDApOwogICAgaTgg
PSBpNCA+Pj4gNSAmIDg7CiAgICBpMTYgPSBpNCA+Pj4gKGk4ID4+PiAwKTsKICAgIGk0ID0gaTE2
ID4+PiAyICYgNDsKICAgIGkxNSA9IGkxNiA+Pj4gKGk0ID4+PiAwKTsKICAgIGkxNiA9IGkxNSA+
Pj4gMSAmIDI7CiAgICBpMTIgPSBpMTUgPj4+IChpMTYgPj4+IDApOwogICAgaTE1ID0gaTEyID4+
PiAxICYgMTsKICAgIGkzNCA9IEhFQVAzMlszNjggKyAoKGk4IHwgaTE3IHwgaTQgfCBpMTYgfCBp
MTUpICsgKGkxMiA+Pj4gKGkxNSA+Pj4gMCkpIDw8IDIpID4+IDJdIHwgMDsKICAgfSBlbHNlIHsK
ICAgIGkzNCA9IGkzMDsKICAgfQogICBpZiAoKGkzNCB8IDApID09IDApIHsKICAgIGkzNSA9IGky
OTsKICAgIGkzNiA9IGkyODsKICAgfSBlbHNlIHsKICAgIGkxNSA9IGkzNDsKICAgIGkxMiA9IGky
OTsKICAgIGkxNiA9IGkyODsKICAgIHdoaWxlICgxKSB7CiAgICAgaTQgPSAoSEVBUDMyW2kxNSAr
IDQgPj4gMl0gJiAtOCkgLSBpNiB8IDA7CiAgICAgaTE3ID0gaTQgPj4+IDAgPCBpMTIgPj4+IDA7
CiAgICAgaTggPSBpMTcgPyBpNCA6IGkxMjsKICAgICBpNCA9IGkxNyA/IGkxNSA6IGkxNjsKICAg
ICBpMTcgPSBIRUFQMzJbaTE1ICsgMTYgPj4gMl0gfCAwOwogICAgIGlmICgoaTE3IHwgMCkgIT0g
MCkgewogICAgICBpMTUgPSBpMTc7CiAgICAgIGkxMiA9IGk4OwogICAgICBpMTYgPSBpNDsKICAg
ICAgY29udGludWU7CiAgICAgfQogICAgIGkxNyA9IEhFQVAzMltpMTUgKyAyMCA+PiAyXSB8IDA7
CiAgICAgaWYgKChpMTcgfCAwKSA9PSAwKSB7CiAgICAgIGkzNSA9IGk4OwogICAgICBpMzYgPSBp
NDsKICAgICAgYnJlYWs7CiAgICAgfSBlbHNlIHsKICAgICAgaTE1ID0gaTE3OwogICAgICBpMTIg
PSBpODsKICAgICAgaTE2ID0gaTQ7CiAgICAgfQogICAgfQogICB9CiAgIGlmICgoaTM2IHwgMCkg
PT0gMCkgewogICAgaTE0ID0gaTY7CiAgICBicmVhazsKICAgfQogICBpZiAoaTM1ID4+PiAwID49
ICgoSEVBUDMyWzE4XSB8IDApIC0gaTYgfCAwKSA+Pj4gMCkgewogICAgaTE0ID0gaTY7CiAgICBi
cmVhazsKICAgfQogICBpMTYgPSBpMzY7CiAgIGkxMiA9IEhFQVAzMlsyMF0gfCAwOwogICBpZiAo
aTE2ID4+PiAwIDwgaTEyID4+PiAwKSB7CiAgICBfYWJvcnQoKTsKICAgIHJldHVybiAwOwogICB9
CiAgIGkxNSA9IGkxNiArIGk2IHwgMDsKICAgaTEwID0gaTE1OwogICBpZiAoaTE2ID4+PiAwID49
IGkxNSA+Pj4gMCkgewogICAgX2Fib3J0KCk7CiAgICByZXR1cm4gMDsKICAgfQogICBpNCA9IEhF
QVAzMltpMzYgKyAyNCA+PiAyXSB8IDA7CiAgIGk4ID0gSEVBUDMyW2kzNiArIDEyID4+IDJdIHwg
MDsKICAgZG8gewogICAgaWYgKChpOCB8IDApID09IChpMzYgfCAwKSkgewogICAgIGkxNyA9IGkz
NiArIDIwIHwgMDsKICAgICBpMyA9IEhFQVAzMltpMTcgPj4gMl0gfCAwOwogICAgIGlmICgoaTMg
fCAwKSA9PSAwKSB7CiAgICAgIGk5ID0gaTM2ICsgMTYgfCAwOwogICAgICBpMjcgPSBIRUFQMzJb
aTkgPj4gMl0gfCAwOwogICAgICBpZiAoKGkyNyB8IDApID09IDApIHsKICAgICAgIGkzNyA9IDA7
CiAgICAgICBicmVhazsKICAgICAgfSBlbHNlIHsKICAgICAgIGkzOCA9IGkyNzsKICAgICAgIGkz
OSA9IGk5OwogICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgaTM4ID0gaTM7CiAgICAgIGkzOSA9
IGkxNzsKICAgICB9CiAgICAgd2hpbGUgKDEpIHsKICAgICAgaTE3ID0gaTM4ICsgMjAgfCAwOwog
ICAgICBpMyA9IEhFQVAzMltpMTcgPj4gMl0gfCAwOwogICAgICBpZiAoKGkzIHwgMCkgIT0gMCkg
ewogICAgICAgaTM4ID0gaTM7CiAgICAgICBpMzkgPSBpMTc7CiAgICAgICBjb250aW51ZTsKICAg
ICAgfQogICAgICBpMTcgPSBpMzggKyAxNiB8IDA7CiAgICAgIGkzID0gSEVBUDMyW2kxNyA+PiAy
XSB8IDA7CiAgICAgIGlmICgoaTMgfCAwKSA9PSAwKSB7CiAgICAgICBicmVhazsKICAgICAgfSBl
bHNlIHsKICAgICAgIGkzOCA9IGkzOwogICAgICAgaTM5ID0gaTE3OwogICAgICB9CiAgICAgfQog
ICAgIGlmIChpMzkgPj4+IDAgPCBpMTIgPj4+IDApIHsKICAgICAgX2Fib3J0KCk7CiAgICAgIHJl
dHVybiAwOwogICAgIH0gZWxzZSB7CiAgICAgIEhFQVAzMltpMzkgPj4gMl0gPSAwOwogICAgICBp
MzcgPSBpMzg7CiAgICAgIGJyZWFrOwogICAgIH0KICAgIH0gZWxzZSB7CiAgICAgaTE3ID0gSEVB
UDMyW2kzNiArIDggPj4gMl0gfCAwOwogICAgIGlmIChpMTcgPj4+IDAgPCBpMTIgPj4+IDApIHsK
ICAgICAgX2Fib3J0KCk7CiAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBpMyA9IGkxNyArIDEy
IHwgMDsKICAgICBpZiAoKEhFQVAzMltpMyA+PiAyXSB8IDApICE9IChpMzYgfCAwKSkgewogICAg
ICBfYWJvcnQoKTsKICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIGk5ID0gaTggKyA4IHwgMDsK
ICAgICBpZiAoKEhFQVAzMltpOSA+PiAyXSB8IDApID09IChpMzYgfCAwKSkgewogICAgICBIRUFQ
MzJbaTMgPj4gMl0gPSBpODsKICAgICAgSEVBUDMyW2k5ID4+IDJdID0gaTE3OwogICAgICBpMzcg
PSBpODsKICAgICAgYnJlYWs7CiAgICAgfSBlbHNlIHsKICAgICAgX2Fib3J0KCk7CiAgICAgIHJl
dHVybiAwOwogICAgIH0KICAgIH0KICAgfSB3aGlsZSAoMCk7CiAgIEwxOTggOiBkbyB7CiAgICBp
ZiAoKGk0IHwgMCkgIT0gMCkgewogICAgIGk4ID0gaTM2ICsgMjggfCAwOwogICAgIGkxMiA9IDM2
OCArIChIRUFQMzJbaTggPj4gMl0gPDwgMikgfCAwOwogICAgIGRvIHsKICAgICAgaWYgKChpMzYg
fCAwKSA9PSAoSEVBUDMyW2kxMiA+PiAyXSB8IDApKSB7CiAgICAgICBIRUFQMzJbaTEyID4+IDJd
ID0gaTM3OwogICAgICAgaWYgKChpMzcgfCAwKSAhPSAwKSB7CiAgICAgICAgYnJlYWs7CiAgICAg
ICB9CiAgICAgICBIRUFQMzJbMTddID0gSEVBUDMyWzE3XSAmIH4oMSA8PCBIRUFQMzJbaTggPj4g
Ml0pOwogICAgICAgYnJlYWsgTDE5ODsKICAgICAgfSBlbHNlIHsKICAgICAgIGlmIChpNCA+Pj4g
MCA8IChIRUFQMzJbMjBdIHwgMCkgPj4+IDApIHsKICAgICAgICBfYWJvcnQoKTsKICAgICAgICBy
ZXR1cm4gMDsKICAgICAgIH0KICAgICAgIGkxNyA9IGk0ICsgMTYgfCAwOwogICAgICAgaWYgKChI
RUFQMzJbaTE3ID4+IDJdIHwgMCkgPT0gKGkzNiB8IDApKSB7CiAgICAgICAgSEVBUDMyW2kxNyA+
PiAyXSA9IGkzNzsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgSEVBUDMyW2k0ICsgMjAgPj4gMl0g
PSBpMzc7CiAgICAgICB9CiAgICAgICBpZiAoKGkzNyB8IDApID09IDApIHsKICAgICAgICBicmVh
ayBMMTk4OwogICAgICAgfQogICAgICB9CiAgICAgfSB3aGlsZSAoMCk7CiAgICAgaWYgKGkzNyA+
Pj4gMCA8IChIRUFQMzJbMjBdIHwgMCkgPj4+IDApIHsKICAgICAgX2Fib3J0KCk7CiAgICAgIHJl
dHVybiAwOwogICAgIH0KICAgICBIRUFQMzJbaTM3ICsgMjQgPj4gMl0gPSBpNDsKICAgICBpOCA9
IEhFQVAzMltpMzYgKyAxNiA+PiAyXSB8IDA7CiAgICAgZG8gewogICAgICBpZiAoKGk4IHwgMCkg
IT0gMCkgewogICAgICAgaWYgKGk4ID4+PiAwIDwgKEhFQVAzMlsyMF0gfCAwKSA+Pj4gMCkgewog
ICAgICAgIF9hYm9ydCgpOwogICAgICAgIHJldHVybiAwOwogICAgICAgfSBlbHNlIHsKICAgICAg
ICBIRUFQMzJbaTM3ICsgMTYgPj4gMl0gPSBpODsKICAgICAgICBIRUFQMzJbaTggKyAyNCA+PiAy
XSA9IGkzNzsKICAgICAgICBicmVhazsKICAgICAgIH0KICAgICAgfQogICAgIH0gd2hpbGUgKDAp
OwogICAgIGk4ID0gSEVBUDMyW2kzNiArIDIwID4+IDJdIHwgMDsKICAgICBpZiAoKGk4IHwgMCkg
PT0gMCkgewogICAgICBicmVhazsKICAgICB9CiAgICAgaWYgKGk4ID4+PiAwIDwgKEhFQVAzMlsy
MF0gfCAwKSA+Pj4gMCkgewogICAgICBfYWJvcnQoKTsKICAgICAgcmV0dXJuIDA7CiAgICAgfSBl
bHNlIHsKICAgICAgSEVBUDMyW2kzNyArIDIwID4+IDJdID0gaTg7CiAgICAgIEhFQVAzMltpOCAr
IDI0ID4+IDJdID0gaTM3OwogICAgICBicmVhazsKICAgICB9CiAgICB9CiAgIH0gd2hpbGUgKDAp
OwogICBkbyB7CiAgICBpZiAoaTM1ID4+PiAwIDwgMTYpIHsKICAgICBpNCA9IGkzNSArIGk2IHwg
MDsKICAgICBIRUFQMzJbaTM2ICsgNCA+PiAyXSA9IGk0IHwgMzsKICAgICBpOCA9IGkxNiArIChp
NCArIDQpIHwgMDsKICAgICBIRUFQMzJbaTggPj4gMl0gPSBIRUFQMzJbaTggPj4gMl0gfCAxOwog
ICAgfSBlbHNlIHsKICAgICBIRUFQMzJbaTM2ICsgNCA+PiAyXSA9IGk2IHwgMzsKICAgICBIRUFQ
MzJbaTE2ICsgKGk2IHwgNCkgPj4gMl0gPSBpMzUgfCAxOwogICAgIEhFQVAzMltpMTYgKyAoaTM1
ICsgaTYpID4+IDJdID0gaTM1OwogICAgIGk4ID0gaTM1ID4+PiAzOwogICAgIGlmIChpMzUgPj4+
IDAgPCAyNTYpIHsKICAgICAgaTQgPSBpOCA8PCAxOwogICAgICBpMTIgPSAxMDQgKyAoaTQgPDwg
MikgfCAwOwogICAgICBpMTcgPSBIRUFQMzJbMTZdIHwgMDsKICAgICAgaTkgPSAxIDw8IGk4Owog
ICAgICBkbyB7CiAgICAgICBpZiAoKGkxNyAmIGk5IHwgMCkgPT0gMCkgewogICAgICAgIEhFQVAz
MlsxNl0gPSBpMTcgfCBpOTsKICAgICAgICBpNDAgPSBpMTI7CiAgICAgICAgaTQxID0gMTA0ICsg
KGk0ICsgMiA8PCAyKSB8IDA7CiAgICAgICB9IGVsc2UgewogICAgICAgIGk4ID0gMTA0ICsgKGk0
ICsgMiA8PCAyKSB8IDA7CiAgICAgICAgaTMgPSBIRUFQMzJbaTggPj4gMl0gfCAwOwogICAgICAg
IGlmIChpMyA+Pj4gMCA+PSAoSEVBUDMyWzIwXSB8IDApID4+PiAwKSB7CiAgICAgICAgIGk0MCA9
IGkzOwogICAgICAgICBpNDEgPSBpODsKICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAg
IF9hYm9ydCgpOwogICAgICAgIHJldHVybiAwOwogICAgICAgfQogICAgICB9IHdoaWxlICgwKTsK
ICAgICAgSEVBUDMyW2k0MSA+PiAyXSA9IGkxMDsKICAgICAgSEVBUDMyW2k0MCArIDEyID4+IDJd
ID0gaTEwOwogICAgICBIRUFQMzJbaTE2ICsgKGk2ICsgOCkgPj4gMl0gPSBpNDA7CiAgICAgIEhF
QVAzMltpMTYgKyAoaTYgKyAxMikgPj4gMl0gPSBpMTI7CiAgICAgIGJyZWFrOwogICAgIH0KICAg
ICBpNCA9IGkxNTsKICAgICBpOSA9IGkzNSA+Pj4gODsKICAgICBkbyB7CiAgICAgIGlmICgoaTkg
fCAwKSA9PSAwKSB7CiAgICAgICBpNDIgPSAwOwogICAgICB9IGVsc2UgewogICAgICAgaWYgKGkz
NSA+Pj4gMCA+IDE2Nzc3MjE1KSB7CiAgICAgICAgaTQyID0gMzE7CiAgICAgICAgYnJlYWs7CiAg
ICAgICB9CiAgICAgICBpMTcgPSAoaTkgKyAxMDQ4MzIwIHwgMCkgPj4+IDE2ICYgODsKICAgICAg
IGk4ID0gaTkgPDwgaTE3OwogICAgICAgaTMgPSAoaTggKyA1MjAxOTIgfCAwKSA+Pj4gMTYgJiA0
OwogICAgICAgaTI3ID0gaTggPDwgaTM7CiAgICAgICBpOCA9IChpMjcgKyAyNDU3NjAgfCAwKSA+
Pj4gMTYgJiAyOwogICAgICAgaTExID0gMTQgLSAoaTMgfCBpMTcgfCBpOCkgKyAoaTI3IDw8IGk4
ID4+PiAxNSkgfCAwOwogICAgICAgaTQyID0gaTM1ID4+PiAoKGkxMSArIDcgfCAwKSA+Pj4gMCkg
JiAxIHwgaTExIDw8IDE7CiAgICAgIH0KICAgICB9IHdoaWxlICgwKTsKICAgICBpOSA9IDM2OCAr
IChpNDIgPDwgMikgfCAwOwogICAgIEhFQVAzMltpMTYgKyAoaTYgKyAyOCkgPj4gMl0gPSBpNDI7
CiAgICAgSEVBUDMyW2kxNiArIChpNiArIDIwKSA+PiAyXSA9IDA7CiAgICAgSEVBUDMyW2kxNiAr
IChpNiArIDE2KSA+PiAyXSA9IDA7CiAgICAgaTEyID0gSEVBUDMyWzE3XSB8IDA7CiAgICAgaTEx
ID0gMSA8PCBpNDI7CiAgICAgaWYgKChpMTIgJiBpMTEgfCAwKSA9PSAwKSB7CiAgICAgIEhFQVAz
MlsxN10gPSBpMTIgfCBpMTE7CiAgICAgIEhFQVAzMltpOSA+PiAyXSA9IGk0OwogICAgICBIRUFQ
MzJbaTE2ICsgKGk2ICsgMjQpID4+IDJdID0gaTk7CiAgICAgIEhFQVAzMltpMTYgKyAoaTYgKyAx
MikgPj4gMl0gPSBpNDsKICAgICAgSEVBUDMyW2kxNiArIChpNiArIDgpID4+IDJdID0gaTQ7CiAg
ICAgIGJyZWFrOwogICAgIH0KICAgICBpZiAoKGk0MiB8IDApID09IDMxKSB7CiAgICAgIGk0MyA9
IDA7CiAgICAgfSBlbHNlIHsKICAgICAgaTQzID0gMjUgLSAoaTQyID4+PiAxKSB8IDA7CiAgICAg
fQogICAgIGkxMSA9IGkzNSA8PCBpNDM7CiAgICAgaTEyID0gSEVBUDMyW2k5ID4+IDJdIHwgMDsK
ICAgICB3aGlsZSAoMSkgewogICAgICBpZiAoKEhFQVAzMltpMTIgKyA0ID4+IDJdICYgLTggfCAw
KSA9PSAoaTM1IHwgMCkpIHsKICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGk0NCA9IGkxMiAr
IDE2ICsgKGkxMSA+Pj4gMzEgPDwgMikgfCAwOwogICAgICBpOSA9IEhFQVAzMltpNDQgPj4gMl0g
fCAwOwogICAgICBpZiAoKGk5IHwgMCkgPT0gMCkgewogICAgICAgaTQ1ID0gMTY4OwogICAgICAg
YnJlYWs7CiAgICAgIH0gZWxzZSB7CiAgICAgICBpMTEgPSBpMTEgPDwgMTsKICAgICAgIGkxMiA9
IGk5OwogICAgICB9CiAgICAgfQogICAgIGlmICgoaTQ1IHwgMCkgPT0gMTY4KSB7CiAgICAgIGlm
IChpNDQgPj4+IDAgPCAoSEVBUDMyWzIwXSB8IDApID4+PiAwKSB7CiAgICAgICBfYWJvcnQoKTsK
ICAgICAgIHJldHVybiAwOwogICAgICB9IGVsc2UgewogICAgICAgSEVBUDMyW2k0NCA+PiAyXSA9
IGk0OwogICAgICAgSEVBUDMyW2kxNiArIChpNiArIDI0KSA+PiAyXSA9IGkxMjsKICAgICAgIEhF
QVAzMltpMTYgKyAoaTYgKyAxMikgPj4gMl0gPSBpNDsKICAgICAgIEhFQVAzMltpMTYgKyAoaTYg
KyA4KSA+PiAyXSA9IGk0OwogICAgICAgYnJlYWs7CiAgICAgIH0KICAgICB9CiAgICAgaTExID0g
aTEyICsgOCB8IDA7CiAgICAgaTkgPSBIRUFQMzJbaTExID4+IDJdIHwgMDsKICAgICBpOCA9IEhF
QVAzMlsyMF0gfCAwOwogICAgIGlmIChpMTIgPj4+IDAgPCBpOCA+Pj4gMCkgewogICAgICBfYWJv
cnQoKTsKICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIGlmIChpOSA+Pj4gMCA8IGk4ID4+PiAw
KSB7CiAgICAgIF9hYm9ydCgpOwogICAgICByZXR1cm4gMDsKICAgICB9IGVsc2UgewogICAgICBI
RUFQMzJbaTkgKyAxMiA+PiAyXSA9IGk0OwogICAgICBIRUFQMzJbaTExID4+IDJdID0gaTQ7CiAg
ICAgIEhFQVAzMltpMTYgKyAoaTYgKyA4KSA+PiAyXSA9IGk5OwogICAgICBIRUFQMzJbaTE2ICsg
KGk2ICsgMTIpID4+IDJdID0gaTEyOwogICAgICBIRUFQMzJbaTE2ICsgKGk2ICsgMjQpID4+IDJd
ID0gMDsKICAgICAgYnJlYWs7CiAgICAgfQogICAgfQogICB9IHdoaWxlICgwKTsKICAgaTE2ID0g
aTM2ICsgOCB8IDA7CiAgIGlmICgoaTE2IHwgMCkgPT0gMCkgewogICAgaTE0ID0gaTY7CiAgICBi
cmVhazsKICAgfSBlbHNlIHsKICAgIGkxMyA9IGkxNjsKICAgfQogICByZXR1cm4gaTEzIHwgMDsK
ICB9CiB9IHdoaWxlICgwKTsKIGkzNiA9IEhFQVAzMlsxOF0gfCAwOwogaWYgKGkxNCA+Pj4gMCA8
PSBpMzYgPj4+IDApIHsKICBpNDQgPSBpMzYgLSBpMTQgfCAwOwogIGkzNSA9IEhFQVAzMlsyMV0g
fCAwOwogIGlmIChpNDQgPj4+IDAgPiAxNSkgewogICBpNDMgPSBpMzU7CiAgIEhFQVAzMlsyMV0g
PSBpNDMgKyBpMTQ7CiAgIEhFQVAzMlsxOF0gPSBpNDQ7CiAgIEhFQVAzMltpNDMgKyAoaTE0ICsg
NCkgPj4gMl0gPSBpNDQgfCAxOwogICBIRUFQMzJbaTQzICsgaTM2ID4+IDJdID0gaTQ0OwogICBI
RUFQMzJbaTM1ICsgNCA+PiAyXSA9IGkxNCB8IDM7CiAgfSBlbHNlIHsKICAgSEVBUDMyWzE4XSA9
IDA7CiAgIEhFQVAzMlsyMV0gPSAwOwogICBIRUFQMzJbaTM1ICsgNCA+PiAyXSA9IGkzNiB8IDM7
CiAgIGk0NCA9IGkzNSArIChpMzYgKyA0KSB8IDA7CiAgIEhFQVAzMltpNDQgPj4gMl0gPSBIRUFQ
MzJbaTQ0ID4+IDJdIHwgMTsKICB9CiAgaTEzID0gaTM1ICsgOCB8IDA7CiAgcmV0dXJuIGkxMyB8
IDA7CiB9CiBpMzUgPSBIRUFQMzJbMTldIHwgMDsKIGlmIChpMTQgPj4+IDAgPCBpMzUgPj4+IDAp
IHsKICBpNDQgPSBpMzUgLSBpMTQgfCAwOwogIEhFQVAzMlsxOV0gPSBpNDQ7CiAgaTM1ID0gSEVB
UDMyWzIyXSB8IDA7CiAgaTM2ID0gaTM1OwogIEhFQVAzMlsyMl0gPSBpMzYgKyBpMTQ7CiAgSEVB
UDMyW2kzNiArIChpMTQgKyA0KSA+PiAyXSA9IGk0NCB8IDE7CiAgSEVBUDMyW2kzNSArIDQgPj4g
Ml0gPSBpMTQgfCAzOwogIGkxMyA9IGkzNSArIDggfCAwOwogIHJldHVybiBpMTMgfCAwOwogfQog
ZG8gewogIGlmICgoSEVBUDMyWzEwXSB8IDApID09IDApIHsKICAgaTM1ID0gX3N5c2NvbmYoOCkg
fCAwOwogICBpZiAoKGkzNSAtIDEgJiBpMzUgfCAwKSA9PSAwKSB7CiAgICBIRUFQMzJbMTJdID0g
aTM1OwogICAgSEVBUDMyWzExXSA9IGkzNTsKICAgIEhFQVAzMlsxM10gPSAtMTsKICAgIEhFQVAz
MlsxNF0gPSAtMTsKICAgIEhFQVAzMlsxNV0gPSAwOwogICAgSEVBUDMyWzEyN10gPSAwOwogICAg
SEVBUDMyWzEwXSA9IChfdGltZSgwKSB8IDApICYgLTE2IF4gMTQzMTY1NTc2ODsKICAgIGJyZWFr
OwogICB9IGVsc2UgewogICAgX2Fib3J0KCk7CiAgICByZXR1cm4gMDsKICAgfQogIH0KIH0gd2hp
bGUgKDApOwogaTM1ID0gaTE0ICsgNDggfCAwOwogaTQ0ID0gSEVBUDMyWzEyXSB8IDA7CiBpMzYg
PSBpMTQgKyA0NyB8IDA7CiBpNDMgPSBpNDQgKyBpMzYgfCAwOwogaTQyID0gLWk0NCB8IDA7CiBp
NDQgPSBpNDMgJiBpNDI7CiBpZiAoaTQ0ID4+PiAwIDw9IGkxNCA+Pj4gMCkgewogIGkxMyA9IDA7
CiAgcmV0dXJuIGkxMyB8IDA7CiB9CiBpNDAgPSBIRUFQMzJbMTI2XSB8IDA7CiBkbyB7CiAgaWYg
KChpNDAgfCAwKSAhPSAwKSB7CiAgIGk0MSA9IEhFQVAzMlsxMjRdIHwgMDsKICAgaTM3ID0gaTQx
ICsgaTQ0IHwgMDsKICAgaWYgKGkzNyA+Pj4gMCA8PSBpNDEgPj4+IDAgfCBpMzcgPj4+IDAgPiBp
NDAgPj4+IDApIHsKICAgIGkxMyA9IDA7CiAgIH0gZWxzZSB7CiAgICBicmVhazsKICAgfQogICBy
ZXR1cm4gaTEzIHwgMDsKICB9CiB9IHdoaWxlICgwKTsKIEwyOTAgOiBkbyB7CiAgaWYgKChIRUFQ
MzJbMTI3XSAmIDQgfCAwKSA9PSAwKSB7CiAgIGk0MCA9IEhFQVAzMlsyMl0gfCAwOwogICBMMjky
IDogZG8gewogICAgaWYgKChpNDAgfCAwKSA9PSAwKSB7CiAgICAgaTQ1ID0gMTk4OwogICAgfSBl
bHNlIHsKICAgICBpMzcgPSBpNDA7CiAgICAgaTQxID0gNTEyOwogICAgIHdoaWxlICgxKSB7CiAg
ICAgIGk0NiA9IGk0MSB8IDA7CiAgICAgIGkzOCA9IEhFQVAzMltpNDYgPj4gMl0gfCAwOwogICAg
ICBpZiAoaTM4ID4+PiAwIDw9IGkzNyA+Pj4gMCkgewogICAgICAgaTQ3ID0gaTQxICsgNCB8IDA7
CiAgICAgICBpZiAoKGkzOCArIChIRUFQMzJbaTQ3ID4+IDJdIHwgMCkgfCAwKSA+Pj4gMCA+IGkz
NyA+Pj4gMCkgewogICAgICAgIGJyZWFrOwogICAgICAgfQogICAgICB9CiAgICAgIGkzOCA9IEhF
QVAzMltpNDEgKyA4ID4+IDJdIHwgMDsKICAgICAgaWYgKChpMzggfCAwKSA9PSAwKSB7CiAgICAg
ICBpNDUgPSAxOTg7CiAgICAgICBicmVhayBMMjkyOwogICAgICB9IGVsc2UgewogICAgICAgaTQx
ID0gaTM4OwogICAgICB9CiAgICAgfQogICAgIGlmICgoaTQxIHwgMCkgPT0gMCkgewogICAgICBp
NDUgPSAxOTg7CiAgICAgIGJyZWFrOwogICAgIH0KICAgICBpMzcgPSBpNDMgLSAoSEVBUDMyWzE5
XSB8IDApICYgaTQyOwogICAgIGlmIChpMzcgPj4+IDAgPj0gMjE0NzQ4MzY0NykgewogICAgICBp
NDggPSAwOwogICAgICBicmVhazsKICAgICB9CiAgICAgaTEyID0gX3NicmsoaTM3IHwgMCkgfCAw
OwogICAgIGk0ID0gKGkxMiB8IDApID09ICgoSEVBUDMyW2k0NiA+PiAyXSB8IDApICsgKEhFQVAz
MltpNDcgPj4gMl0gfCAwKSB8IDApOwogICAgIGk0OSA9IGk0ID8gaTEyIDogLTE7CiAgICAgaTUw
ID0gaTQgPyBpMzcgOiAwOwogICAgIGk1MSA9IGkxMjsKICAgICBpNTIgPSBpMzc7CiAgICAgaTQ1
ID0gMjA3OwogICAgfQogICB9IHdoaWxlICgwKTsKICAgZG8gewogICAgaWYgKChpNDUgfCAwKSA9
PSAxOTgpIHsKICAgICBpNDAgPSBfc2JyaygwKSB8IDA7CiAgICAgaWYgKChpNDAgfCAwKSA9PSAt
MSkgewogICAgICBpNDggPSAwOwogICAgICBicmVhazsKICAgICB9CiAgICAgaTYgPSBpNDA7CiAg
ICAgaTM3ID0gSEVBUDMyWzExXSB8IDA7CiAgICAgaTEyID0gaTM3IC0gMSB8IDA7CiAgICAgaWYg
KChpMTIgJiBpNiB8IDApID09IDApIHsKICAgICAgaTUzID0gaTQ0OwogICAgIH0gZWxzZSB7CiAg
ICAgIGk1MyA9IGk0NCAtIGk2ICsgKGkxMiArIGk2ICYgLWkzNykgfCAwOwogICAgIH0KICAgICBp
MzcgPSBIRUFQMzJbMTI0XSB8IDA7CiAgICAgaTYgPSBpMzcgKyBpNTMgfCAwOwogICAgIGlmICgh
KGk1MyA+Pj4gMCA+IGkxNCA+Pj4gMCAmIGk1MyA+Pj4gMCA8IDIxNDc0ODM2NDcpKSB7CiAgICAg
IGk0OCA9IDA7CiAgICAgIGJyZWFrOwogICAgIH0KICAgICBpMTIgPSBIRUFQMzJbMTI2XSB8IDA7
CiAgICAgaWYgKChpMTIgfCAwKSAhPSAwKSB7CiAgICAgIGlmIChpNiA+Pj4gMCA8PSBpMzcgPj4+
IDAgfCBpNiA+Pj4gMCA+IGkxMiA+Pj4gMCkgewogICAgICAgaTQ4ID0gMDsKICAgICAgIGJyZWFr
OwogICAgICB9CiAgICAgfQogICAgIGkxMiA9IF9zYnJrKGk1MyB8IDApIHwgMDsKICAgICBpNiA9
IChpMTIgfCAwKSA9PSAoaTQwIHwgMCk7CiAgICAgaTQ5ID0gaTYgPyBpNDAgOiAtMTsKICAgICBp
NTAgPSBpNiA/IGk1MyA6IDA7CiAgICAgaTUxID0gaTEyOwogICAgIGk1MiA9IGk1MzsKICAgICBp
NDUgPSAyMDc7CiAgICB9CiAgIH0gd2hpbGUgKDApOwogICBMMzEyIDogZG8gewogICAgaWYgKChp
NDUgfCAwKSA9PSAyMDcpIHsKICAgICBpMTIgPSAtaTUyIHwgMDsKICAgICBpZiAoKGk0OSB8IDAp
ICE9IC0xKSB7CiAgICAgIGk1NCA9IGk1MDsKICAgICAgaTU1ID0gaTQ5OwogICAgICBpNDUgPSAy
MTg7CiAgICAgIGJyZWFrIEwyOTA7CiAgICAgfQogICAgIGRvIHsKICAgICAgaWYgKChpNTEgfCAw
KSAhPSAtMSAmIGk1MiA+Pj4gMCA8IDIxNDc0ODM2NDcgJiBpNTIgPj4+IDAgPCBpMzUgPj4+IDAp
IHsKICAgICAgIGk2ID0gSEVBUDMyWzEyXSB8IDA7CiAgICAgICBpNDAgPSBpMzYgLSBpNTIgKyBp
NiAmIC1pNjsKICAgICAgIGlmIChpNDAgPj4+IDAgPj0gMjE0NzQ4MzY0NykgewogICAgICAgIGk1
NiA9IGk1MjsKICAgICAgICBicmVhazsKICAgICAgIH0KICAgICAgIGlmICgoX3NicmsoaTQwIHwg
MCkgfCAwKSA9PSAtMSkgewogICAgICAgIF9zYnJrKGkxMiB8IDApIHwgMDsKICAgICAgICBpNDgg
PSBpNTA7CiAgICAgICAgYnJlYWsgTDMxMjsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgaTU2ID0g
aTQwICsgaTUyIHwgMDsKICAgICAgICBicmVhazsKICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAg
ICAgIGk1NiA9IGk1MjsKICAgICAgfQogICAgIH0gd2hpbGUgKDApOwogICAgIGlmICgoaTUxIHwg
MCkgPT0gLTEpIHsKICAgICAgaTQ4ID0gaTUwOwogICAgIH0gZWxzZSB7CiAgICAgIGk1NCA9IGk1
NjsKICAgICAgaTU1ID0gaTUxOwogICAgICBpNDUgPSAyMTg7CiAgICAgIGJyZWFrIEwyOTA7CiAg
ICAgfQogICAgfQogICB9IHdoaWxlICgwKTsKICAgSEVBUDMyWzEyN10gPSBIRUFQMzJbMTI3XSB8
IDQ7CiAgIGk1NyA9IGk0ODsKICAgaTQ1ID0gMjE1OwogIH0gZWxzZSB7CiAgIGk1NyA9IDA7CiAg
IGk0NSA9IDIxNTsKICB9CiB9IHdoaWxlICgwKTsKIGRvIHsKICBpZiAoKGk0NSB8IDApID09IDIx
NSkgewogICBpZiAoaTQ0ID4+PiAwID49IDIxNDc0ODM2NDcpIHsKICAgIGJyZWFrOwogICB9CiAg
IGk0OCA9IF9zYnJrKGk0NCB8IDApIHwgMDsKICAgaTUxID0gX3NicmsoMCkgfCAwOwogICBpZiAo
ISgoaTUxIHwgMCkgIT0gLTEgJiAoaTQ4IHwgMCkgIT0gLTEgJiBpNDggPj4+IDAgPCBpNTEgPj4+
IDApKSB7CiAgICBicmVhazsKICAgfQogICBpNTYgPSBpNTEgLSBpNDggfCAwOwogICBpNTEgPSBp
NTYgPj4+IDAgPiAoaTE0ICsgNDAgfCAwKSA+Pj4gMDsKICAgaTUwID0gaTUxID8gaTQ4IDogLTE7
CiAgIGlmICgoaTUwIHwgMCkgIT0gLTEpIHsKICAgIGk1NCA9IGk1MSA/IGk1NiA6IGk1NzsKICAg
IGk1NSA9IGk1MDsKICAgIGk0NSA9IDIxODsKICAgfQogIH0KIH0gd2hpbGUgKDApOwogZG8gewog
IGlmICgoaTQ1IHwgMCkgPT0gMjE4KSB7CiAgIGk1NyA9IChIRUFQMzJbMTI0XSB8IDApICsgaTU0
IHwgMDsKICAgSEVBUDMyWzEyNF0gPSBpNTc7CiAgIGlmIChpNTcgPj4+IDAgPiAoSEVBUDMyWzEy
NV0gfCAwKSA+Pj4gMCkgewogICAgSEVBUDMyWzEyNV0gPSBpNTc7CiAgIH0KICAgaTU3ID0gSEVB
UDMyWzIyXSB8IDA7CiAgIEwzMzIgOiBkbyB7CiAgICBpZiAoKGk1NyB8IDApID09IDApIHsKICAg
ICBpNDQgPSBIRUFQMzJbMjBdIHwgMDsKICAgICBpZiAoKGk0NCB8IDApID09IDAgfCBpNTUgPj4+
IDAgPCBpNDQgPj4+IDApIHsKICAgICAgSEVBUDMyWzIwXSA9IGk1NTsKICAgICB9CiAgICAgSEVB
UDMyWzEyOF0gPSBpNTU7CiAgICAgSEVBUDMyWzEyOV0gPSBpNTQ7CiAgICAgSEVBUDMyWzEzMV0g
PSAwOwogICAgIEhFQVAzMlsyNV0gPSBIRUFQMzJbMTBdOwogICAgIEhFQVAzMlsyNF0gPSAtMTsK
ICAgICBpNDQgPSAwOwogICAgIGRvIHsKICAgICAgaTUwID0gaTQ0IDw8IDE7CiAgICAgIGk1NiA9
IDEwNCArIChpNTAgPDwgMikgfCAwOwogICAgICBIRUFQMzJbMTA0ICsgKGk1MCArIDMgPDwgMikg
Pj4gMl0gPSBpNTY7CiAgICAgIEhFQVAzMlsxMDQgKyAoaTUwICsgMiA8PCAyKSA+PiAyXSA9IGk1
NjsKICAgICAgaTQ0ID0gaTQ0ICsgMSB8IDA7CiAgICAgfSB3aGlsZSAoaTQ0ID4+PiAwIDwgMzIp
OwogICAgIGk0NCA9IGk1NSArIDggfCAwOwogICAgIGlmICgoaTQ0ICYgNyB8IDApID09IDApIHsK
ICAgICAgaTU4ID0gMDsKICAgICB9IGVsc2UgewogICAgICBpNTggPSAtaTQ0ICYgNzsKICAgICB9
CiAgICAgaTQ0ID0gaTU0IC0gNDAgLSBpNTggfCAwOwogICAgIEhFQVAzMlsyMl0gPSBpNTUgKyBp
NTg7CiAgICAgSEVBUDMyWzE5XSA9IGk0NDsKICAgICBIRUFQMzJbaTU1ICsgKGk1OCArIDQpID4+
IDJdID0gaTQ0IHwgMTsKICAgICBIRUFQMzJbaTU1ICsgKGk1NCAtIDM2KSA+PiAyXSA9IDQwOwog
ICAgIEhFQVAzMlsyM10gPSBIRUFQMzJbMTRdOwogICAgfSBlbHNlIHsKICAgICBpNDQgPSA1MTI7
CiAgICAgd2hpbGUgKDEpIHsKICAgICAgaTU5ID0gSEVBUDMyW2k0NCA+PiAyXSB8IDA7CiAgICAg
IGk2MCA9IGk0NCArIDQgfCAwOwogICAgICBpNjEgPSBIRUFQMzJbaTYwID4+IDJdIHwgMDsKICAg
ICAgaWYgKChpNTUgfCAwKSA9PSAoaTU5ICsgaTYxIHwgMCkpIHsKICAgICAgIGk0NSA9IDIzMDsK
ICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGk1NiA9IEhFQVAzMltpNDQgKyA4ID4+IDJdIHwg
MDsKICAgICAgaWYgKChpNTYgfCAwKSA9PSAwKSB7CiAgICAgICBicmVhazsKICAgICAgfSBlbHNl
IHsKICAgICAgIGk0NCA9IGk1NjsKICAgICAgfQogICAgIH0KICAgICBkbyB7CiAgICAgIGlmICgo
aTQ1IHwgMCkgPT0gMjMwKSB7CiAgICAgICBpZiAoKEhFQVAzMltpNDQgKyAxMiA+PiAyXSAmIDgg
fCAwKSAhPSAwKSB7CiAgICAgICAgYnJlYWs7CiAgICAgICB9CiAgICAgICBpNTYgPSBpNTc7CiAg
ICAgICBpZiAoIShpNTYgPj4+IDAgPj0gaTU5ID4+PiAwICYgaTU2ID4+PiAwIDwgaTU1ID4+PiAw
KSkgewogICAgICAgIGJyZWFrOwogICAgICAgfQogICAgICAgSEVBUDMyW2k2MCA+PiAyXSA9IGk2
MSArIGk1NDsKICAgICAgIGk1NiA9IEhFQVAzMlsyMl0gfCAwOwogICAgICAgaTUwID0gKEhFQVAz
MlsxOV0gfCAwKSArIGk1NCB8IDA7CiAgICAgICBpNTEgPSBpNTY7CiAgICAgICBpNDggPSBpNTYg
KyA4IHwgMDsKICAgICAgIGlmICgoaTQ4ICYgNyB8IDApID09IDApIHsKICAgICAgICBpNjIgPSAw
OwogICAgICAgfSBlbHNlIHsKICAgICAgICBpNjIgPSAtaTQ4ICYgNzsKICAgICAgIH0KICAgICAg
IGk0OCA9IGk1MCAtIGk2MiB8IDA7CiAgICAgICBIRUFQMzJbMjJdID0gaTUxICsgaTYyOwogICAg
ICAgSEVBUDMyWzE5XSA9IGk0ODsKICAgICAgIEhFQVAzMltpNTEgKyAoaTYyICsgNCkgPj4gMl0g
PSBpNDggfCAxOwogICAgICAgSEVBUDMyW2k1MSArIChpNTAgKyA0KSA+PiAyXSA9IDQwOwogICAg
ICAgSEVBUDMyWzIzXSA9IEhFQVAzMlsxNF07CiAgICAgICBicmVhayBMMzMyOwogICAgICB9CiAg
ICAgfSB3aGlsZSAoMCk7CiAgICAgaWYgKGk1NSA+Pj4gMCA8IChIRUFQMzJbMjBdIHwgMCkgPj4+
IDApIHsKICAgICAgSEVBUDMyWzIwXSA9IGk1NTsKICAgICB9CiAgICAgaTQ0ID0gaTU1ICsgaTU0
IHwgMDsKICAgICBpNTAgPSA1MTI7CiAgICAgd2hpbGUgKDEpIHsKICAgICAgaTYzID0gaTUwIHwg
MDsKICAgICAgaWYgKChIRUFQMzJbaTYzID4+IDJdIHwgMCkgPT0gKGk0NCB8IDApKSB7CiAgICAg
ICBpNDUgPSAyNDA7CiAgICAgICBicmVhazsKICAgICAgfQogICAgICBpNTEgPSBIRUFQMzJbaTUw
ICsgOCA+PiAyXSB8IDA7CiAgICAgIGlmICgoaTUxIHwgMCkgPT0gMCkgewogICAgICAgYnJlYWs7
CiAgICAgIH0gZWxzZSB7CiAgICAgICBpNTAgPSBpNTE7CiAgICAgIH0KICAgICB9CiAgICAgZG8g
ewogICAgICBpZiAoKGk0NSB8IDApID09IDI0MCkgewogICAgICAgaWYgKChIRUFQMzJbaTUwICsg
MTIgPj4gMl0gJiA4IHwgMCkgIT0gMCkgewogICAgICAgIGJyZWFrOwogICAgICAgfQogICAgICAg
SEVBUDMyW2k2MyA+PiAyXSA9IGk1NTsKICAgICAgIGk0NCA9IGk1MCArIDQgfCAwOwogICAgICAg
SEVBUDMyW2k0NCA+PiAyXSA9IChIRUFQMzJbaTQ0ID4+IDJdIHwgMCkgKyBpNTQ7CiAgICAgICBp
NDQgPSBpNTUgKyA4IHwgMDsKICAgICAgIGlmICgoaTQ0ICYgNyB8IDApID09IDApIHsKICAgICAg
ICBpNjQgPSAwOwogICAgICAgfSBlbHNlIHsKICAgICAgICBpNjQgPSAtaTQ0ICYgNzsKICAgICAg
IH0KICAgICAgIGk0NCA9IGk1NSArIChpNTQgKyA4KSB8IDA7CiAgICAgICBpZiAoKGk0NCAmIDcg
fCAwKSA9PSAwKSB7CiAgICAgICAgaTY1ID0gMDsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgaTY1
ID0gLWk0NCAmIDc7CiAgICAgICB9CiAgICAgICBpNDQgPSBpNTUgKyAoaTY1ICsgaTU0KSB8IDA7
CiAgICAgICBpNTEgPSBpNDQ7CiAgICAgICBpNDggPSBpNjQgKyBpMTQgfCAwOwogICAgICAgaTU2
ID0gaTU1ICsgaTQ4IHwgMDsKICAgICAgIGk1MiA9IGk1NjsKICAgICAgIGkzNiA9IGk0NCAtIChp
NTUgKyBpNjQpIC0gaTE0IHwgMDsKICAgICAgIEhFQVAzMltpNTUgKyAoaTY0ICsgNCkgPj4gMl0g
PSBpMTQgfCAzOwogICAgICAgZG8gewogICAgICAgIGlmICgoaTUxIHwgMCkgPT0gKEhFQVAzMlsy
Ml0gfCAwKSkgewogICAgICAgICBpMzUgPSAoSEVBUDMyWzE5XSB8IDApICsgaTM2IHwgMDsKICAg
ICAgICAgSEVBUDMyWzE5XSA9IGkzNTsKICAgICAgICAgSEVBUDMyWzIyXSA9IGk1MjsKICAgICAg
ICAgSEVBUDMyW2k1NSArIChpNDggKyA0KSA+PiAyXSA9IGkzNSB8IDE7CiAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgaWYgKChpNTEgfCAwKSA9PSAoSEVBUDMyWzIxXSB8IDApKSB7CiAgICAgICAg
ICBpMzUgPSAoSEVBUDMyWzE4XSB8IDApICsgaTM2IHwgMDsKICAgICAgICAgIEhFQVAzMlsxOF0g
PSBpMzU7CiAgICAgICAgICBIRUFQMzJbMjFdID0gaTUyOwogICAgICAgICAgSEVBUDMyW2k1NSAr
IChpNDggKyA0KSA+PiAyXSA9IGkzNSB8IDE7CiAgICAgICAgICBIRUFQMzJbaTU1ICsgKGkzNSAr
IGk0OCkgPj4gMl0gPSBpMzU7CiAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBp
MzUgPSBpNTQgKyA0IHwgMDsKICAgICAgICAgaTQ5ID0gSEVBUDMyW2k1NSArIChpNjUgKyBpMzUp
ID4+IDJdIHwgMDsKICAgICAgICAgaWYgKChpNDkgJiAzIHwgMCkgPT0gMSkgewogICAgICAgICAg
aTUzID0gaTQ5ICYgLTg7CiAgICAgICAgICBpNDcgPSBpNDkgPj4+IDM7CiAgICAgICAgICBMMzc3
IDogZG8gewogICAgICAgICAgIGlmIChpNDkgPj4+IDAgPCAyNTYpIHsKICAgICAgICAgICAgaTQ2
ID0gSEVBUDMyW2k1NSArICgoaTY1IHwgOCkgKyBpNTQpID4+IDJdIHwgMDsKICAgICAgICAgICAg
aTQyID0gSEVBUDMyW2k1NSArIChpNTQgKyAxMiArIGk2NSkgPj4gMl0gfCAwOwogICAgICAgICAg
ICBpNDMgPSAxMDQgKyAoaTQ3IDw8IDEgPDwgMikgfCAwOwogICAgICAgICAgICBkbyB7CiAgICAg
ICAgICAgICBpZiAoKGk0NiB8IDApICE9IChpNDMgfCAwKSkgewogICAgICAgICAgICAgIGlmIChp
NDYgPj4+IDAgPCAoSEVBUDMyWzIwXSB8IDApID4+PiAwKSB7CiAgICAgICAgICAgICAgIF9hYm9y
dCgpOwogICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgaWYgKChIRUFQMzJbaTQ2ICsgMTIgPj4gMl0gfCAwKSA9PSAoaTUxIHwgMCkpIHsKICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9hYm9ydCgpOwog
ICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQogICAgICAgICAgICB9IHdoaWxl
ICgwKTsKICAgICAgICAgICAgaWYgKChpNDIgfCAwKSA9PSAoaTQ2IHwgMCkpIHsKICAgICAgICAg
ICAgIEhFQVAzMlsxNl0gPSBIRUFQMzJbMTZdICYgfigxIDw8IGk0Nyk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICBpZiAoKGk0
MiB8IDApID09IChpNDMgfCAwKSkgewogICAgICAgICAgICAgIGk2NiA9IGk0MiArIDggfCAwOwog
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBpZiAoaTQyID4+PiAwIDwgKEhFQVAz
MlsyMF0gfCAwKSA+Pj4gMCkgewogICAgICAgICAgICAgICBfYWJvcnQoKTsKICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGkxMiA9IGk0MiArIDgg
fCAwOwogICAgICAgICAgICAgIGlmICgoSEVBUDMyW2kxMiA+PiAyXSB8IDApID09IChpNTEgfCAw
KSkgewogICAgICAgICAgICAgICBpNjYgPSBpMTI7CiAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICBfYWJvcnQoKTsKICAgICAgICAgICAgICByZXR1cm4g
MDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSB3aGlsZSAoMCk7CiAgICAgICAgICAgIEhF
QVAzMltpNDYgKyAxMiA+PiAyXSA9IGk0MjsKICAgICAgICAgICAgSEVBUDMyW2k2NiA+PiAyXSA9
IGk0NjsKICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpNDMgPSBpNDQ7CiAgICAgICAg
ICAgIGkxMiA9IEhFQVAzMltpNTUgKyAoKGk2NSB8IDI0KSArIGk1NCkgPj4gMl0gfCAwOwogICAg
ICAgICAgICBpNDEgPSBIRUFQMzJbaTU1ICsgKGk1NCArIDEyICsgaTY1KSA+PiAyXSB8IDA7CiAg
ICAgICAgICAgIGRvIHsKICAgICAgICAgICAgIGlmICgoaTQxIHwgMCkgPT0gKGk0MyB8IDApKSB7
CiAgICAgICAgICAgICAgaTQwID0gaTY1IHwgMTY7CiAgICAgICAgICAgICAgaTYgPSBpNTUgKyAo
aTQwICsgaTM1KSB8IDA7CiAgICAgICAgICAgICAgaTM3ID0gSEVBUDMyW2k2ID4+IDJdIHwgMDsK
ICAgICAgICAgICAgICBpZiAoKGkzNyB8IDApID09IDApIHsKICAgICAgICAgICAgICAgaTQgPSBp
NTUgKyAoaTQwICsgaTU0KSB8IDA7CiAgICAgICAgICAgICAgIGk0MCA9IEhFQVAzMltpNCA+PiAy
XSB8IDA7CiAgICAgICAgICAgICAgIGlmICgoaTQwIHwgMCkgPT0gMCkgewogICAgICAgICAgICAg
ICAgaTY3ID0gMDsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgICAgaTY4ID0gaTQwOwogICAgICAgICAgICAgICAgaTY5ID0gaTQ7CiAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICBpNjgg
PSBpMzc7CiAgICAgICAgICAgICAgIGk2OSA9IGk2OwogICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICB3aGlsZSAoMSkgewogICAgICAgICAgICAgICBpNiA9IGk2OCArIDIwIHwgMDsKICAgICAg
ICAgICAgICAgaTM3ID0gSEVBUDMyW2k2ID4+IDJdIHwgMDsKICAgICAgICAgICAgICAgaWYgKChp
MzcgfCAwKSAhPSAwKSB7CiAgICAgICAgICAgICAgICBpNjggPSBpMzc7CiAgICAgICAgICAgICAg
ICBpNjkgPSBpNjsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgIGk2ID0gaTY4ICsgMTYgfCAwOwogICAgICAgICAgICAgICBpMzcgPSBIRUFQ
MzJbaTYgPj4gMl0gfCAwOwogICAgICAgICAgICAgICBpZiAoKGkzNyB8IDApID09IDApIHsKICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgaTY4ID0gaTM3OwogICAgICAgICAgICAgICAgaTY5ID0gaTY7CiAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKGk2OSA+Pj4gMCA8IChIRUFQMzJbMjBd
IHwgMCkgPj4+IDApIHsKICAgICAgICAgICAgICAgX2Fib3J0KCk7CiAgICAgICAgICAgICAgIHJl
dHVybiAwOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgIEhFQVAzMltpNjkg
Pj4gMl0gPSAwOwogICAgICAgICAgICAgICBpNjcgPSBpNjg7CiAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgaTYg
PSBIRUFQMzJbaTU1ICsgKChpNjUgfCA4KSArIGk1NCkgPj4gMl0gfCAwOwogICAgICAgICAgICAg
IGlmIChpNiA+Pj4gMCA8IChIRUFQMzJbMjBdIHwgMCkgPj4+IDApIHsKICAgICAgICAgICAgICAg
X2Fib3J0KCk7CiAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICBpMzcgPSBpNiArIDEyIHwgMDsKICAgICAgICAgICAgICBpZiAoKEhFQVAzMltpMzcg
Pj4gMl0gfCAwKSAhPSAoaTQzIHwgMCkpIHsKICAgICAgICAgICAgICAgX2Fib3J0KCk7CiAgICAg
ICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpNCA9IGk0
MSArIDggfCAwOwogICAgICAgICAgICAgIGlmICgoSEVBUDMyW2k0ID4+IDJdIHwgMCkgPT0gKGk0
MyB8IDApKSB7CiAgICAgICAgICAgICAgIEhFQVAzMltpMzcgPj4gMl0gPSBpNDE7CiAgICAgICAg
ICAgICAgIEhFQVAzMltpNCA+PiAyXSA9IGk2OwogICAgICAgICAgICAgICBpNjcgPSBpNDE7CiAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
IF9hYm9ydCgpOwogICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgIH0gd2hpbGUgKDApOwogICAgICAgICAgICBpZiAoKGkxMiB8
IDApID09IDApIHsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAg
IGk0MSA9IGk1NSArIChpNTQgKyAyOCArIGk2NSkgfCAwOwogICAgICAgICAgICBpNDYgPSAzNjgg
KyAoSEVBUDMyW2k0MSA+PiAyXSA8PCAyKSB8IDA7CiAgICAgICAgICAgIGRvIHsKICAgICAgICAg
ICAgIGlmICgoaTQzIHwgMCkgPT0gKEhFQVAzMltpNDYgPj4gMl0gfCAwKSkgewogICAgICAgICAg
ICAgIEhFQVAzMltpNDYgPj4gMl0gPSBpNjc7CiAgICAgICAgICAgICAgaWYgKChpNjcgfCAwKSAh
PSAwKSB7CiAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICBIRUFQMzJbMTddID0gSEVBUDMyWzE3XSAmIH4oMSA8PCBIRUFQMzJbaTQxID4+IDJdKTsKICAg
ICAgICAgICAgICBicmVhayBMMzc3OwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICBpZiAoaTEyID4+PiAwIDwgKEhFQVAzMlsyMF0gfCAwKSA+Pj4gMCkgewogICAgICAgICAgICAg
ICBfYWJvcnQoKTsKICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgIGk0MiA9IGkxMiArIDE2IHwgMDsKICAgICAgICAgICAgICBpZiAoKEhFQVAzMltp
NDIgPj4gMl0gfCAwKSA9PSAoaTQzIHwgMCkpIHsKICAgICAgICAgICAgICAgSEVBUDMyW2k0MiA+
PiAyXSA9IGk2NzsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICBIRUFQMzJb
aTEyICsgMjAgPj4gMl0gPSBpNjc7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICgo
aTY3IHwgMCkgPT0gMCkgewogICAgICAgICAgICAgICBicmVhayBMMzc3OwogICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSB3aGlsZSAoMCk7CiAgICAgICAgICAgIGlm
IChpNjcgPj4+IDAgPCAoSEVBUDMyWzIwXSB8IDApID4+PiAwKSB7CiAgICAgICAgICAgICBfYWJv
cnQoKTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIEhF
QVAzMltpNjcgKyAyNCA+PiAyXSA9IGkxMjsKICAgICAgICAgICAgaTQzID0gaTY1IHwgMTY7CiAg
ICAgICAgICAgIGk0MSA9IEhFQVAzMltpNTUgKyAoaTQzICsgaTU0KSA+PiAyXSB8IDA7CiAgICAg
ICAgICAgIGRvIHsKICAgICAgICAgICAgIGlmICgoaTQxIHwgMCkgIT0gMCkgewogICAgICAgICAg
ICAgIGlmIChpNDEgPj4+IDAgPCAoSEVBUDMyWzIwXSB8IDApID4+PiAwKSB7CiAgICAgICAgICAg
ICAgIF9hYm9ydCgpOwogICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICBIRUFQMzJbaTY3ICsgMTYgPj4gMl0gPSBpNDE7CiAgICAgICAg
ICAgICAgIEhFQVAzMltpNDEgKyAyNCA+PiAyXSA9IGk2NzsKICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICB9IHdoaWxlICgwKTsK
ICAgICAgICAgICAgaTQxID0gSEVBUDMyW2k1NSArIChpNDMgKyBpMzUpID4+IDJdIHwgMDsKICAg
ICAgICAgICAgaWYgKChpNDEgfCAwKSA9PSAwKSB7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgfQogICAgICAgICAgICBpZiAoaTQxID4+PiAwIDwgKEhFQVAzMlsyMF0gfCAwKSA+Pj4g
MCkgewogICAgICAgICAgICAgX2Fib3J0KCk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEhFQVAzMltpNjcgKyAyMCA+PiAyXSA9IGk0MTsK
ICAgICAgICAgICAgIEhFQVAzMltpNDEgKyAyNCA+PiAyXSA9IGk2NzsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgfQogICAgICAgICAgfSB3aGlsZSAoMCk7CiAg
ICAgICAgICBpNzAgPSBpNTUgKyAoKGk1MyB8IGk2NSkgKyBpNTQpIHwgMDsKICAgICAgICAgIGk3
MSA9IGk1MyArIGkzNiB8IDA7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpNzAgPSBpNTE7
CiAgICAgICAgICBpNzEgPSBpMzY7CiAgICAgICAgIH0KICAgICAgICAgaTM1ID0gaTcwICsgNCB8
IDA7CiAgICAgICAgIEhFQVAzMltpMzUgPj4gMl0gPSBIRUFQMzJbaTM1ID4+IDJdICYgLTI7CiAg
ICAgICAgIEhFQVAzMltpNTUgKyAoaTQ4ICsgNCkgPj4gMl0gPSBpNzEgfCAxOwogICAgICAgICBI
RUFQMzJbaTU1ICsgKGk3MSArIGk0OCkgPj4gMl0gPSBpNzE7CiAgICAgICAgIGkzNSA9IGk3MSA+
Pj4gMzsKICAgICAgICAgaWYgKGk3MSA+Pj4gMCA8IDI1NikgewogICAgICAgICAgaTQ3ID0gaTM1
IDw8IDE7CiAgICAgICAgICBpNDkgPSAxMDQgKyAoaTQ3IDw8IDIpIHwgMDsKICAgICAgICAgIGk0
MSA9IEhFQVAzMlsxNl0gfCAwOwogICAgICAgICAgaTEyID0gMSA8PCBpMzU7CiAgICAgICAgICBk
byB7CiAgICAgICAgICAgaWYgKChpNDEgJiBpMTIgfCAwKSA9PSAwKSB7CiAgICAgICAgICAgIEhF
QVAzMlsxNl0gPSBpNDEgfCBpMTI7CiAgICAgICAgICAgIGk3MiA9IGk0OTsKICAgICAgICAgICAg
aTczID0gMTA0ICsgKGk0NyArIDIgPDwgMikgfCAwOwogICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgIGkzNSA9IDEwNCArIChpNDcgKyAyIDw8IDIpIHwgMDsKICAgICAgICAgICAgaTQ2ID0g
SEVBUDMyW2kzNSA+PiAyXSB8IDA7CiAgICAgICAgICAgIGlmIChpNDYgPj4+IDAgPj0gKEhFQVAz
MlsyMF0gfCAwKSA+Pj4gMCkgewogICAgICAgICAgICAgaTcyID0gaTQ2OwogICAgICAgICAgICAg
aTczID0gaTM1OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAg
X2Fib3J0KCk7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgIH0KICAgICAgICAgIH0g
d2hpbGUgKDApOwogICAgICAgICAgSEVBUDMyW2k3MyA+PiAyXSA9IGk1MjsKICAgICAgICAgIEhF
QVAzMltpNzIgKyAxMiA+PiAyXSA9IGk1MjsKICAgICAgICAgIEhFQVAzMltpNTUgKyAoaTQ4ICsg
OCkgPj4gMl0gPSBpNzI7CiAgICAgICAgICBIRUFQMzJbaTU1ICsgKGk0OCArIDEyKSA+PiAyXSA9
IGk0OTsKICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGk0NyA9IGk1NjsKICAg
ICAgICAgaTEyID0gaTcxID4+PiA4OwogICAgICAgICBkbyB7CiAgICAgICAgICBpZiAoKGkxMiB8
IDApID09IDApIHsKICAgICAgICAgICBpNzQgPSAwOwogICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICBpZiAoaTcxID4+PiAwID4gMTY3NzcyMTUpIHsKICAgICAgICAgICAgaTc0ID0gMzE7CiAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIH0KICAgICAgICAgICBpNDEgPSAoaTEyICsgMTA0
ODMyMCB8IDApID4+PiAxNiAmIDg7CiAgICAgICAgICAgaTUzID0gaTEyIDw8IGk0MTsKICAgICAg
ICAgICBpMzUgPSAoaTUzICsgNTIwMTkyIHwgMCkgPj4+IDE2ICYgNDsKICAgICAgICAgICBpNDYg
PSBpNTMgPDwgaTM1OwogICAgICAgICAgIGk1MyA9IChpNDYgKyAyNDU3NjAgfCAwKSA+Pj4gMTYg
JiAyOwogICAgICAgICAgIGk0MiA9IDE0IC0gKGkzNSB8IGk0MSB8IGk1MykgKyAoaTQ2IDw8IGk1
MyA+Pj4gMTUpIHwgMDsKICAgICAgICAgICBpNzQgPSBpNzEgPj4+ICgoaTQyICsgNyB8IDApID4+
PiAwKSAmIDEgfCBpNDIgPDwgMTsKICAgICAgICAgIH0KICAgICAgICAgfSB3aGlsZSAoMCk7CiAg
ICAgICAgIGkxMiA9IDM2OCArIChpNzQgPDwgMikgfCAwOwogICAgICAgICBIRUFQMzJbaTU1ICsg
KGk0OCArIDI4KSA+PiAyXSA9IGk3NDsKICAgICAgICAgSEVBUDMyW2k1NSArIChpNDggKyAyMCkg
Pj4gMl0gPSAwOwogICAgICAgICBIRUFQMzJbaTU1ICsgKGk0OCArIDE2KSA+PiAyXSA9IDA7CiAg
ICAgICAgIGk0OSA9IEhFQVAzMlsxN10gfCAwOwogICAgICAgICBpNDIgPSAxIDw8IGk3NDsKICAg
ICAgICAgaWYgKChpNDkgJiBpNDIgfCAwKSA9PSAwKSB7CiAgICAgICAgICBIRUFQMzJbMTddID0g
aTQ5IHwgaTQyOwogICAgICAgICAgSEVBUDMyW2kxMiA+PiAyXSA9IGk0NzsKICAgICAgICAgIEhF
QVAzMltpNTUgKyAoaTQ4ICsgMjQpID4+IDJdID0gaTEyOwogICAgICAgICAgSEVBUDMyW2k1NSAr
IChpNDggKyAxMikgPj4gMl0gPSBpNDc7CiAgICAgICAgICBIRUFQMzJbaTU1ICsgKGk0OCArIDgp
ID4+IDJdID0gaTQ3OwogICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKChp
NzQgfCAwKSA9PSAzMSkgewogICAgICAgICAgaTc1ID0gMDsKICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgIGk3NSA9IDI1IC0gKGk3NCA+Pj4gMSkgfCAwOwogICAgICAgICB9CiAgICAgICAgIGk0
MiA9IGk3MSA8PCBpNzU7CiAgICAgICAgIGk0OSA9IEhFQVAzMltpMTIgPj4gMl0gfCAwOwogICAg
ICAgICB3aGlsZSAoMSkgewogICAgICAgICAgaWYgKChIRUFQMzJbaTQ5ICsgNCA+PiAyXSAmIC04
IHwgMCkgPT0gKGk3MSB8IDApKSB7CiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAg
ICAgICBpNzYgPSBpNDkgKyAxNiArIChpNDIgPj4+IDMxIDw8IDIpIHwgMDsKICAgICAgICAgIGkx
MiA9IEhFQVAzMltpNzYgPj4gMl0gfCAwOwogICAgICAgICAgaWYgKChpMTIgfCAwKSA9PSAwKSB7
CiAgICAgICAgICAgaTQ1ID0gMzEzOwogICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICBpNDIgPSBpNDIgPDwgMTsKICAgICAgICAgICBpNDkgPSBpMTI7CiAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKChpNDUgfCAwKSA9PSAzMTMpIHsKICAgICAg
ICAgIGlmIChpNzYgPj4+IDAgPCAoSEVBUDMyWzIwXSB8IDApID4+PiAwKSB7CiAgICAgICAgICAg
X2Fib3J0KCk7CiAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgIEhFQVAzMltpNzYgPj4gMl0gPSBpNDc7CiAgICAgICAgICAgSEVBUDMyW2k1NSArIChpNDgg
KyAyNCkgPj4gMl0gPSBpNDk7CiAgICAgICAgICAgSEVBUDMyW2k1NSArIChpNDggKyAxMikgPj4g
Ml0gPSBpNDc7CiAgICAgICAgICAgSEVBUDMyW2k1NSArIChpNDggKyA4KSA+PiAyXSA9IGk0NzsK
ICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpNDIgPSBp
NDkgKyA4IHwgMDsKICAgICAgICAgaTEyID0gSEVBUDMyW2k0MiA+PiAyXSB8IDA7CiAgICAgICAg
IGk1MyA9IEhFQVAzMlsyMF0gfCAwOwogICAgICAgICBpZiAoaTQ5ID4+PiAwIDwgaTUzID4+PiAw
KSB7CiAgICAgICAgICBfYWJvcnQoKTsKICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAg
ICAgICAgIGlmIChpMTIgPj4+IDAgPCBpNTMgPj4+IDApIHsKICAgICAgICAgIF9hYm9ydCgpOwog
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBIRUFQMzJbaTEy
ICsgMTIgPj4gMl0gPSBpNDc7CiAgICAgICAgICBIRUFQMzJbaTQyID4+IDJdID0gaTQ3OwogICAg
ICAgICAgSEVBUDMyW2k1NSArIChpNDggKyA4KSA+PiAyXSA9IGkxMjsKICAgICAgICAgIEhFQVAz
MltpNTUgKyAoaTQ4ICsgMTIpID4+IDJdID0gaTQ5OwogICAgICAgICAgSEVBUDMyW2k1NSArIChp
NDggKyAyNCkgPj4gMl0gPSAwOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICB9
CiAgICAgICB9IHdoaWxlICgwKTsKICAgICAgIGkxMyA9IGk1NSArIChpNjQgfCA4KSB8IDA7CiAg
ICAgICByZXR1cm4gaTEzIHwgMDsKICAgICAgfQogICAgIH0gd2hpbGUgKDApOwogICAgIGk1MCA9
IGk1NzsKICAgICBpNDggPSA1MTI7CiAgICAgd2hpbGUgKDEpIHsKICAgICAgaTc3ID0gSEVBUDMy
W2k0OCA+PiAyXSB8IDA7CiAgICAgIGlmIChpNzcgPj4+IDAgPD0gaTUwID4+PiAwKSB7CiAgICAg
ICBpNzggPSBIRUFQMzJbaTQ4ICsgNCA+PiAyXSB8IDA7CiAgICAgICBpNzkgPSBpNzcgKyBpNzgg
fCAwOwogICAgICAgaWYgKGk3OSA+Pj4gMCA+IGk1MCA+Pj4gMCkgewogICAgICAgIGJyZWFrOwog
ICAgICAgfQogICAgICB9CiAgICAgIGk0OCA9IEhFQVAzMltpNDggKyA4ID4+IDJdIHwgMDsKICAg
ICB9CiAgICAgaTQ4ID0gaTc3ICsgKGk3OCAtIDM5KSB8IDA7CiAgICAgaWYgKChpNDggJiA3IHwg
MCkgPT0gMCkgewogICAgICBpODAgPSAwOwogICAgIH0gZWxzZSB7CiAgICAgIGk4MCA9IC1pNDgg
JiA3OwogICAgIH0KICAgICBpNDggPSBpNzcgKyAoaTc4IC0gNDcgKyBpODApIHwgMDsKICAgICBp
NTYgPSBpNDggPj4+IDAgPCAoaTU3ICsgMTYgfCAwKSA+Pj4gMCA/IGk1MCA6IGk0ODsKICAgICBp
NDggPSBpNTYgKyA4IHwgMDsKICAgICBpNTIgPSBpNTUgKyA4IHwgMDsKICAgICBpZiAoKGk1MiAm
IDcgfCAwKSA9PSAwKSB7CiAgICAgIGk4MSA9IDA7CiAgICAgfSBlbHNlIHsKICAgICAgaTgxID0g
LWk1MiAmIDc7CiAgICAgfQogICAgIGk1MiA9IGk1NCAtIDQwIC0gaTgxIHwgMDsKICAgICBIRUFQ
MzJbMjJdID0gaTU1ICsgaTgxOwogICAgIEhFQVAzMlsxOV0gPSBpNTI7CiAgICAgSEVBUDMyW2k1
NSArIChpODEgKyA0KSA+PiAyXSA9IGk1MiB8IDE7CiAgICAgSEVBUDMyW2k1NSArIChpNTQgLSAz
NikgPj4gMl0gPSA0MDsKICAgICBIRUFQMzJbMjNdID0gSEVBUDMyWzE0XTsKICAgICBIRUFQMzJb
aTU2ICsgNCA+PiAyXSA9IDI3OwogICAgIEhFQVAzMltpNDggPj4gMl0gPSBIRUFQMzJbMTI4XTsK
ICAgICBIRUFQMzJbaTQ4ICsgNCA+PiAyXSA9IEhFQVAzMls1MTYgPj4gMl07CiAgICAgSEVBUDMy
W2k0OCArIDggPj4gMl0gPSBIRUFQMzJbNTIwID4+IDJdOwogICAgIEhFQVAzMltpNDggKyAxMiA+
PiAyXSA9IEhFQVAzMls1MjQgPj4gMl07CiAgICAgSEVBUDMyWzEyOF0gPSBpNTU7CiAgICAgSEVB
UDMyWzEyOV0gPSBpNTQ7CiAgICAgSEVBUDMyWzEzMV0gPSAwOwogICAgIEhFQVAzMlsxMzBdID0g
aTQ4OwogICAgIGk0OCA9IGk1NiArIDI4IHwgMDsKICAgICBIRUFQMzJbaTQ4ID4+IDJdID0gNzsK
ICAgICBpZiAoKGk1NiArIDMyIHwgMCkgPj4+IDAgPCBpNzkgPj4+IDApIHsKICAgICAgaTUyID0g
aTQ4OwogICAgICB3aGlsZSAoMSkgewogICAgICAgaTQ4ID0gaTUyICsgNCB8IDA7CiAgICAgICBI
RUFQMzJbaTQ4ID4+IDJdID0gNzsKICAgICAgIGlmICgoaTUyICsgOCB8IDApID4+PiAwIDwgaTc5
ID4+PiAwKSB7CiAgICAgICAgaTUyID0gaTQ4OwogICAgICAgfSBlbHNlIHsKICAgICAgICBicmVh
azsKICAgICAgIH0KICAgICAgfQogICAgIH0KICAgICBpZiAoKGk1NiB8IDApID09IChpNTAgfCAw
KSkgewogICAgICBicmVhazsKICAgICB9CiAgICAgaTUyID0gaTU2IC0gaTU3IHwgMDsKICAgICBp
NDggPSBpNTAgKyAoaTUyICsgNCkgfCAwOwogICAgIEhFQVAzMltpNDggPj4gMl0gPSBIRUFQMzJb
aTQ4ID4+IDJdICYgLTI7CiAgICAgSEVBUDMyW2k1NyArIDQgPj4gMl0gPSBpNTIgfCAxOwogICAg
IEhFQVAzMltpNTAgKyBpNTIgPj4gMl0gPSBpNTI7CiAgICAgaTQ4ID0gaTUyID4+PiAzOwogICAg
IGlmIChpNTIgPj4+IDAgPCAyNTYpIHsKICAgICAgaTM2ID0gaTQ4IDw8IDE7CiAgICAgIGk1MSA9
IDEwNCArIChpMzYgPDwgMikgfCAwOwogICAgICBpNDQgPSBIRUFQMzJbMTZdIHwgMDsKICAgICAg
aTEyID0gMSA8PCBpNDg7CiAgICAgIGRvIHsKICAgICAgIGlmICgoaTQ0ICYgaTEyIHwgMCkgPT0g
MCkgewogICAgICAgIEhFQVAzMlsxNl0gPSBpNDQgfCBpMTI7CiAgICAgICAgaTgyID0gaTUxOwog
ICAgICAgIGk4MyA9IDEwNCArIChpMzYgKyAyIDw8IDIpIHwgMDsKICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgaTQ4ID0gMTA0ICsgKGkzNiArIDIgPDwgMikgfCAwOwogICAgICAgIGk0MiA9IEhFQVAz
MltpNDggPj4gMl0gfCAwOwogICAgICAgIGlmIChpNDIgPj4+IDAgPj0gKEhFQVAzMlsyMF0gfCAw
KSA+Pj4gMCkgewogICAgICAgICBpODIgPSBpNDI7CiAgICAgICAgIGk4MyA9IGk0ODsKICAgICAg
ICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIF9hYm9ydCgpOwogICAgICAgIHJldHVybiAwOwog
ICAgICAgfQogICAgICB9IHdoaWxlICgwKTsKICAgICAgSEVBUDMyW2k4MyA+PiAyXSA9IGk1NzsK
ICAgICAgSEVBUDMyW2k4MiArIDEyID4+IDJdID0gaTU3OwogICAgICBIRUFQMzJbaTU3ICsgOCA+
PiAyXSA9IGk4MjsKICAgICAgSEVBUDMyW2k1NyArIDEyID4+IDJdID0gaTUxOwogICAgICBicmVh
azsKICAgICB9CiAgICAgaTM2ID0gaTU3OwogICAgIGkxMiA9IGk1MiA+Pj4gODsKICAgICBkbyB7
CiAgICAgIGlmICgoaTEyIHwgMCkgPT0gMCkgewogICAgICAgaTg0ID0gMDsKICAgICAgfSBlbHNl
IHsKICAgICAgIGlmIChpNTIgPj4+IDAgPiAxNjc3NzIxNSkgewogICAgICAgIGk4NCA9IDMxOwog
ICAgICAgIGJyZWFrOwogICAgICAgfQogICAgICAgaTQ0ID0gKGkxMiArIDEwNDgzMjAgfCAwKSA+
Pj4gMTYgJiA4OwogICAgICAgaTUwID0gaTEyIDw8IGk0NDsKICAgICAgIGk1NiA9IChpNTAgKyA1
MjAxOTIgfCAwKSA+Pj4gMTYgJiA0OwogICAgICAgaTQ4ID0gaTUwIDw8IGk1NjsKICAgICAgIGk1
MCA9IChpNDggKyAyNDU3NjAgfCAwKSA+Pj4gMTYgJiAyOwogICAgICAgaTQyID0gMTQgLSAoaTU2
IHwgaTQ0IHwgaTUwKSArIChpNDggPDwgaTUwID4+PiAxNSkgfCAwOwogICAgICAgaTg0ID0gaTUy
ID4+PiAoKGk0MiArIDcgfCAwKSA+Pj4gMCkgJiAxIHwgaTQyIDw8IDE7CiAgICAgIH0KICAgICB9
IHdoaWxlICgwKTsKICAgICBpMTIgPSAzNjggKyAoaTg0IDw8IDIpIHwgMDsKICAgICBIRUFQMzJb
aTU3ICsgMjggPj4gMl0gPSBpODQ7CiAgICAgSEVBUDMyW2k1NyArIDIwID4+IDJdID0gMDsKICAg
ICBIRUFQMzJbaTU3ICsgMTYgPj4gMl0gPSAwOwogICAgIGk1MSA9IEhFQVAzMlsxN10gfCAwOwog
ICAgIGk0MiA9IDEgPDwgaTg0OwogICAgIGlmICgoaTUxICYgaTQyIHwgMCkgPT0gMCkgewogICAg
ICBIRUFQMzJbMTddID0gaTUxIHwgaTQyOwogICAgICBIRUFQMzJbaTEyID4+IDJdID0gaTM2Owog
ICAgICBIRUFQMzJbaTU3ICsgMjQgPj4gMl0gPSBpMTI7CiAgICAgIEhFQVAzMltpNTcgKyAxMiA+
PiAyXSA9IGk1NzsKICAgICAgSEVBUDMyW2k1NyArIDggPj4gMl0gPSBpNTc7CiAgICAgIGJyZWFr
OwogICAgIH0KICAgICBpZiAoKGk4NCB8IDApID09IDMxKSB7CiAgICAgIGk4NSA9IDA7CiAgICAg
fSBlbHNlIHsKICAgICAgaTg1ID0gMjUgLSAoaTg0ID4+PiAxKSB8IDA7CiAgICAgfQogICAgIGk0
MiA9IGk1MiA8PCBpODU7CiAgICAgaTUxID0gSEVBUDMyW2kxMiA+PiAyXSB8IDA7CiAgICAgd2hp
bGUgKDEpIHsKICAgICAgaWYgKChIRUFQMzJbaTUxICsgNCA+PiAyXSAmIC04IHwgMCkgPT0gKGk1
MiB8IDApKSB7CiAgICAgICBicmVhazsKICAgICAgfQogICAgICBpODYgPSBpNTEgKyAxNiArIChp
NDIgPj4+IDMxIDw8IDIpIHwgMDsKICAgICAgaTEyID0gSEVBUDMyW2k4NiA+PiAyXSB8IDA7CiAg
ICAgIGlmICgoaTEyIHwgMCkgPT0gMCkgewogICAgICAgaTQ1ID0gMzQ4OwogICAgICAgYnJlYWs7
CiAgICAgIH0gZWxzZSB7CiAgICAgICBpNDIgPSBpNDIgPDwgMTsKICAgICAgIGk1MSA9IGkxMjsK
ICAgICAgfQogICAgIH0KICAgICBpZiAoKGk0NSB8IDApID09IDM0OCkgewogICAgICBpZiAoaTg2
ID4+PiAwIDwgKEhFQVAzMlsyMF0gfCAwKSA+Pj4gMCkgewogICAgICAgX2Fib3J0KCk7CiAgICAg
ICByZXR1cm4gMDsKICAgICAgfSBlbHNlIHsKICAgICAgIEhFQVAzMltpODYgPj4gMl0gPSBpMzY7
CiAgICAgICBIRUFQMzJbaTU3ICsgMjQgPj4gMl0gPSBpNTE7CiAgICAgICBIRUFQMzJbaTU3ICsg
MTIgPj4gMl0gPSBpNTc7CiAgICAgICBIRUFQMzJbaTU3ICsgOCA+PiAyXSA9IGk1NzsKICAgICAg
IGJyZWFrOwogICAgICB9CiAgICAgfQogICAgIGk0MiA9IGk1MSArIDggfCAwOwogICAgIGk1MiA9
IEhFQVAzMltpNDIgPj4gMl0gfCAwOwogICAgIGkxMiA9IEhFQVAzMlsyMF0gfCAwOwogICAgIGlm
IChpNTEgPj4+IDAgPCBpMTIgPj4+IDApIHsKICAgICAgX2Fib3J0KCk7CiAgICAgIHJldHVybiAw
OwogICAgIH0KICAgICBpZiAoaTUyID4+PiAwIDwgaTEyID4+PiAwKSB7CiAgICAgIF9hYm9ydCgp
OwogICAgICByZXR1cm4gMDsKICAgICB9IGVsc2UgewogICAgICBIRUFQMzJbaTUyICsgMTIgPj4g
Ml0gPSBpMzY7CiAgICAgIEhFQVAzMltpNDIgPj4gMl0gPSBpMzY7CiAgICAgIEhFQVAzMltpNTcg
KyA4ID4+IDJdID0gaTUyOwogICAgICBIRUFQMzJbaTU3ICsgMTIgPj4gMl0gPSBpNTE7CiAgICAg
IEhFQVAzMltpNTcgKyAyNCA+PiAyXSA9IDA7CiAgICAgIGJyZWFrOwogICAgIH0KICAgIH0KICAg
fSB3aGlsZSAoMCk7CiAgIGk1NyA9IEhFQVAzMlsxOV0gfCAwOwogICBpZiAoaTU3ID4+PiAwIDw9
IGkxNCA+Pj4gMCkgewogICAgYnJlYWs7CiAgIH0KICAgaTUyID0gaTU3IC0gaTE0IHwgMDsKICAg
SEVBUDMyWzE5XSA9IGk1MjsKICAgaTU3ID0gSEVBUDMyWzIyXSB8IDA7CiAgIGk0MiA9IGk1NzsK
ICAgSEVBUDMyWzIyXSA9IGk0MiArIGkxNDsKICAgSEVBUDMyW2k0MiArIChpMTQgKyA0KSA+PiAy
XSA9IGk1MiB8IDE7CiAgIEhFQVAzMltpNTcgKyA0ID4+IDJdID0gaTE0IHwgMzsKICAgaTEzID0g
aTU3ICsgOCB8IDA7CiAgIHJldHVybiBpMTMgfCAwOwogIH0KIH0gd2hpbGUgKDApOwogSEVBUDMy
WyhfX19lcnJub19sb2NhdGlvbigpIHwgMCkgPj4gMl0gPSAxMjsKIGkxMyA9IDA7CiByZXR1cm4g
aTEzIHwgMDsKfQpmdW5jdGlvbiBfZnJlZShpMSkgewogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAw
LCBpMyA9IDAsIGk0ID0gMCwgaTUgPSAwLCBpNiA9IDAsIGk3ID0gMCwgaTggPSAwLCBpOSA9IDAs
IGkxMCA9IDAsIGkxMSA9IDAsIGkxMiA9IDAsIGkxMyA9IDAsIGkxNCA9IDAsIGkxNSA9IDAsIGkx
NiA9IDAsIGkxNyA9IDAsIGkxOCA9IDAsIGkxOSA9IDAsIGkyMCA9IDAsIGkyMSA9IDAsIGkyMiA9
IDAsIGkyMyA9IDAsIGkyNCA9IDAsIGkyNSA9IDAsIGkyNiA9IDAsIGkyNyA9IDAsIGkyOCA9IDAs
IGkyOSA9IDAsIGkzMCA9IDAsIGkzMSA9IDAsIGkzMiA9IDAsIGkzMyA9IDAsIGkzNCA9IDAsIGkz
NSA9IDAsIGkzNiA9IDAsIGkzNyA9IDAsIGkzOCA9IDAsIGkzOSA9IDAsIGk0MCA9IDA7CiBpZiAo
KGkxIHwgMCkgPT0gMCkgewogIHJldHVybjsKIH0KIGkyID0gaTEgLSA4IHwgMDsKIGkzID0gaTI7
CiBpNCA9IEhFQVAzMlsyMF0gfCAwOwogaWYgKGkyID4+PiAwIDwgaTQgPj4+IDApIHsKICBfYWJv
cnQoKTsKIH0KIGk1ID0gSEVBUDMyW2kxIC0gNCA+PiAyXSB8IDA7CiBpNiA9IGk1ICYgMzsKIGlm
ICgoaTYgfCAwKSA9PSAxKSB7CiAgX2Fib3J0KCk7CiB9CiBpNyA9IGk1ICYgLTg7CiBpOCA9IGkx
ICsgKGk3IC0gOCkgfCAwOwogaTkgPSBpODsKIEw1NDkgOiBkbyB7CiAgaWYgKChpNSAmIDEgfCAw
KSA9PSAwKSB7CiAgIGkxMCA9IEhFQVAzMltpMiA+PiAyXSB8IDA7CiAgIGlmICgoaTYgfCAwKSA9
PSAwKSB7CiAgICByZXR1cm47CiAgIH0KICAgaTExID0gLTggLSBpMTAgfCAwOwogICBpMTIgPSBp
MSArIGkxMSB8IDA7CiAgIGkxMyA9IGkxMjsKICAgaTE0ID0gaTEwICsgaTcgfCAwOwogICBpZiAo
aTEyID4+PiAwIDwgaTQgPj4+IDApIHsKICAgIF9hYm9ydCgpOwogICB9CiAgIGlmICgoaTEzIHwg
MCkgPT0gKEhFQVAzMlsyMV0gfCAwKSkgewogICAgaTE1ID0gaTEgKyAoaTcgLSA0KSB8IDA7CiAg
ICBpZiAoKEhFQVAzMltpMTUgPj4gMl0gJiAzIHwgMCkgIT0gMykgewogICAgIGkxNiA9IGkxMzsK
ICAgICBpMTcgPSBpMTQ7CiAgICAgYnJlYWs7CiAgICB9CiAgICBIRUFQMzJbMThdID0gaTE0Owog
ICAgSEVBUDMyW2kxNSA+PiAyXSA9IEhFQVAzMltpMTUgPj4gMl0gJiAtMjsKICAgIEhFQVAzMltp
MSArIChpMTEgKyA0KSA+PiAyXSA9IGkxNCB8IDE7CiAgICBIRUFQMzJbaTggPj4gMl0gPSBpMTQ7
CiAgICByZXR1cm47CiAgIH0KICAgaTE1ID0gaTEwID4+PiAzOwogICBpZiAoaTEwID4+PiAwIDwg
MjU2KSB7CiAgICBpMTAgPSBIRUFQMzJbaTEgKyAoaTExICsgOCkgPj4gMl0gfCAwOwogICAgaTE4
ID0gSEVBUDMyW2kxICsgKGkxMSArIDEyKSA+PiAyXSB8IDA7CiAgICBpMTkgPSAxMDQgKyAoaTE1
IDw8IDEgPDwgMikgfCAwOwogICAgZG8gewogICAgIGlmICgoaTEwIHwgMCkgIT0gKGkxOSB8IDAp
KSB7CiAgICAgIGlmIChpMTAgPj4+IDAgPCBpNCA+Pj4gMCkgewogICAgICAgX2Fib3J0KCk7CiAg
ICAgIH0KICAgICAgaWYgKChIRUFQMzJbaTEwICsgMTIgPj4gMl0gfCAwKSA9PSAoaTEzIHwgMCkp
IHsKICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIF9hYm9ydCgpOwogICAgIH0KICAgIH0gd2hp
bGUgKDApOwogICAgaWYgKChpMTggfCAwKSA9PSAoaTEwIHwgMCkpIHsKICAgICBIRUFQMzJbMTZd
ID0gSEVBUDMyWzE2XSAmIH4oMSA8PCBpMTUpOwogICAgIGkxNiA9IGkxMzsKICAgICBpMTcgPSBp
MTQ7CiAgICAgYnJlYWs7CiAgICB9CiAgICBkbyB7CiAgICAgaWYgKChpMTggfCAwKSA9PSAoaTE5
IHwgMCkpIHsKICAgICAgaTIwID0gaTE4ICsgOCB8IDA7CiAgICAgfSBlbHNlIHsKICAgICAgaWYg
KGkxOCA+Pj4gMCA8IGk0ID4+PiAwKSB7CiAgICAgICBfYWJvcnQoKTsKICAgICAgfQogICAgICBp
MjEgPSBpMTggKyA4IHwgMDsKICAgICAgaWYgKChIRUFQMzJbaTIxID4+IDJdIHwgMCkgPT0gKGkx
MyB8IDApKSB7CiAgICAgICBpMjAgPSBpMjE7CiAgICAgICBicmVhazsKICAgICAgfQogICAgICBf
YWJvcnQoKTsKICAgICB9CiAgICB9IHdoaWxlICgwKTsKICAgIEhFQVAzMltpMTAgKyAxMiA+PiAy
XSA9IGkxODsKICAgIEhFQVAzMltpMjAgPj4gMl0gPSBpMTA7CiAgICBpMTYgPSBpMTM7CiAgICBp
MTcgPSBpMTQ7CiAgICBicmVhazsKICAgfQogICBpMTkgPSBpMTI7CiAgIGkxNSA9IEhFQVAzMltp
MSArIChpMTEgKyAyNCkgPj4gMl0gfCAwOwogICBpMjEgPSBIRUFQMzJbaTEgKyAoaTExICsgMTIp
ID4+IDJdIHwgMDsKICAgZG8gewogICAgaWYgKChpMjEgfCAwKSA9PSAoaTE5IHwgMCkpIHsKICAg
ICBpMjIgPSBpMSArIChpMTEgKyAyMCkgfCAwOwogICAgIGkyMyA9IEhFQVAzMltpMjIgPj4gMl0g
fCAwOwogICAgIGlmICgoaTIzIHwgMCkgPT0gMCkgewogICAgICBpMjQgPSBpMSArIChpMTEgKyAx
NikgfCAwOwogICAgICBpMjUgPSBIRUFQMzJbaTI0ID4+IDJdIHwgMDsKICAgICAgaWYgKChpMjUg
fCAwKSA9PSAwKSB7CiAgICAgICBpMjYgPSAwOwogICAgICAgYnJlYWs7CiAgICAgIH0gZWxzZSB7
CiAgICAgICBpMjcgPSBpMjU7CiAgICAgICBpMjggPSBpMjQ7CiAgICAgIH0KICAgICB9IGVsc2Ug
ewogICAgICBpMjcgPSBpMjM7CiAgICAgIGkyOCA9IGkyMjsKICAgICB9CiAgICAgd2hpbGUgKDEp
IHsKICAgICAgaTIyID0gaTI3ICsgMjAgfCAwOwogICAgICBpMjMgPSBIRUFQMzJbaTIyID4+IDJd
IHwgMDsKICAgICAgaWYgKChpMjMgfCAwKSAhPSAwKSB7CiAgICAgICBpMjcgPSBpMjM7CiAgICAg
ICBpMjggPSBpMjI7CiAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBpMjIgPSBpMjcgKyAx
NiB8IDA7CiAgICAgIGkyMyA9IEhFQVAzMltpMjIgPj4gMl0gfCAwOwogICAgICBpZiAoKGkyMyB8
IDApID09IDApIHsKICAgICAgIGJyZWFrOwogICAgICB9IGVsc2UgewogICAgICAgaTI3ID0gaTIz
OwogICAgICAgaTI4ID0gaTIyOwogICAgICB9CiAgICAgfQogICAgIGlmIChpMjggPj4+IDAgPCBp
NCA+Pj4gMCkgewogICAgICBfYWJvcnQoKTsKICAgICB9IGVsc2UgewogICAgICBIRUFQMzJbaTI4
ID4+IDJdID0gMDsKICAgICAgaTI2ID0gaTI3OwogICAgICBicmVhazsKICAgICB9CiAgICB9IGVs
c2UgewogICAgIGkyMiA9IEhFQVAzMltpMSArIChpMTEgKyA4KSA+PiAyXSB8IDA7CiAgICAgaWYg
KGkyMiA+Pj4gMCA8IGk0ID4+PiAwKSB7CiAgICAgIF9hYm9ydCgpOwogICAgIH0KICAgICBpMjMg
PSBpMjIgKyAxMiB8IDA7CiAgICAgaWYgKChIRUFQMzJbaTIzID4+IDJdIHwgMCkgIT0gKGkxOSB8
IDApKSB7CiAgICAgIF9hYm9ydCgpOwogICAgIH0KICAgICBpMjQgPSBpMjEgKyA4IHwgMDsKICAg
ICBpZiAoKEhFQVAzMltpMjQgPj4gMl0gfCAwKSA9PSAoaTE5IHwgMCkpIHsKICAgICAgSEVBUDMy
W2kyMyA+PiAyXSA9IGkyMTsKICAgICAgSEVBUDMyW2kyNCA+PiAyXSA9IGkyMjsKICAgICAgaTI2
ID0gaTIxOwogICAgICBicmVhazsKICAgICB9IGVsc2UgewogICAgICBfYWJvcnQoKTsKICAgICB9
CiAgICB9CiAgIH0gd2hpbGUgKDApOwogICBpZiAoKGkxNSB8IDApID09IDApIHsKICAgIGkxNiA9
IGkxMzsKICAgIGkxNyA9IGkxNDsKICAgIGJyZWFrOwogICB9CiAgIGkyMSA9IGkxICsgKGkxMSAr
IDI4KSB8IDA7CiAgIGkxMiA9IDM2OCArIChIRUFQMzJbaTIxID4+IDJdIDw8IDIpIHwgMDsKICAg
ZG8gewogICAgaWYgKChpMTkgfCAwKSA9PSAoSEVBUDMyW2kxMiA+PiAyXSB8IDApKSB7CiAgICAg
SEVBUDMyW2kxMiA+PiAyXSA9IGkyNjsKICAgICBpZiAoKGkyNiB8IDApICE9IDApIHsKICAgICAg
YnJlYWs7CiAgICAgfQogICAgIEhFQVAzMlsxN10gPSBIRUFQMzJbMTddICYgfigxIDw8IEhFQVAz
MltpMjEgPj4gMl0pOwogICAgIGkxNiA9IGkxMzsKICAgICBpMTcgPSBpMTQ7CiAgICAgYnJlYWsg
TDU0OTsKICAgIH0gZWxzZSB7CiAgICAgaWYgKGkxNSA+Pj4gMCA8IChIRUFQMzJbMjBdIHwgMCkg
Pj4+IDApIHsKICAgICAgX2Fib3J0KCk7CiAgICAgfQogICAgIGkxMCA9IGkxNSArIDE2IHwgMDsK
ICAgICBpZiAoKEhFQVAzMltpMTAgPj4gMl0gfCAwKSA9PSAoaTE5IHwgMCkpIHsKICAgICAgSEVB
UDMyW2kxMCA+PiAyXSA9IGkyNjsKICAgICB9IGVsc2UgewogICAgICBIRUFQMzJbaTE1ICsgMjAg
Pj4gMl0gPSBpMjY7CiAgICAgfQogICAgIGlmICgoaTI2IHwgMCkgPT0gMCkgewogICAgICBpMTYg
PSBpMTM7CiAgICAgIGkxNyA9IGkxNDsKICAgICAgYnJlYWsgTDU0OTsKICAgICB9CiAgICB9CiAg
IH0gd2hpbGUgKDApOwogICBpZiAoaTI2ID4+PiAwIDwgKEhFQVAzMlsyMF0gfCAwKSA+Pj4gMCkg
ewogICAgX2Fib3J0KCk7CiAgIH0KICAgSEVBUDMyW2kyNiArIDI0ID4+IDJdID0gaTE1OwogICBp
MTkgPSBIRUFQMzJbaTEgKyAoaTExICsgMTYpID4+IDJdIHwgMDsKICAgZG8gewogICAgaWYgKChp
MTkgfCAwKSAhPSAwKSB7CiAgICAgaWYgKGkxOSA+Pj4gMCA8IChIRUFQMzJbMjBdIHwgMCkgPj4+
IDApIHsKICAgICAgX2Fib3J0KCk7CiAgICAgfSBlbHNlIHsKICAgICAgSEVBUDMyW2kyNiArIDE2
ID4+IDJdID0gaTE5OwogICAgICBIRUFQMzJbaTE5ICsgMjQgPj4gMl0gPSBpMjY7CiAgICAgIGJy
ZWFrOwogICAgIH0KICAgIH0KICAgfSB3aGlsZSAoMCk7CiAgIGkxOSA9IEhFQVAzMltpMSArIChp
MTEgKyAyMCkgPj4gMl0gfCAwOwogICBpZiAoKGkxOSB8IDApID09IDApIHsKICAgIGkxNiA9IGkx
MzsKICAgIGkxNyA9IGkxNDsKICAgIGJyZWFrOwogICB9CiAgIGlmIChpMTkgPj4+IDAgPCAoSEVB
UDMyWzIwXSB8IDApID4+PiAwKSB7CiAgICBfYWJvcnQoKTsKICAgfSBlbHNlIHsKICAgIEhFQVAz
MltpMjYgKyAyMCA+PiAyXSA9IGkxOTsKICAgIEhFQVAzMltpMTkgKyAyNCA+PiAyXSA9IGkyNjsK
ICAgIGkxNiA9IGkxMzsKICAgIGkxNyA9IGkxNDsKICAgIGJyZWFrOwogICB9CiAgfSBlbHNlIHsK
ICAgaTE2ID0gaTM7CiAgIGkxNyA9IGk3OwogIH0KIH0gd2hpbGUgKDApOwogaTMgPSBpMTY7CiBp
ZiAoaTMgPj4+IDAgPj0gaTggPj4+IDApIHsKICBfYWJvcnQoKTsKIH0KIGkyNiA9IGkxICsgKGk3
IC0gNCkgfCAwOwogaTQgPSBIRUFQMzJbaTI2ID4+IDJdIHwgMDsKIGlmICgoaTQgJiAxIHwgMCkg
PT0gMCkgewogIF9hYm9ydCgpOwogfQogZG8gewogIGlmICgoaTQgJiAyIHwgMCkgPT0gMCkgewog
ICBpZiAoKGk5IHwgMCkgPT0gKEhFQVAzMlsyMl0gfCAwKSkgewogICAgaTI3ID0gKEhFQVAzMlsx
OV0gfCAwKSArIGkxNyB8IDA7CiAgICBIRUFQMzJbMTldID0gaTI3OwogICAgSEVBUDMyWzIyXSA9
IGkxNjsKICAgIEhFQVAzMltpMTYgKyA0ID4+IDJdID0gaTI3IHwgMTsKICAgIGlmICgoaTE2IHwg
MCkgIT0gKEhFQVAzMlsyMV0gfCAwKSkgewogICAgIHJldHVybjsKICAgIH0KICAgIEhFQVAzMlsy
MV0gPSAwOwogICAgSEVBUDMyWzE4XSA9IDA7CiAgICByZXR1cm47CiAgIH0KICAgaWYgKChpOSB8
IDApID09IChIRUFQMzJbMjFdIHwgMCkpIHsKICAgIGkyNyA9IChIRUFQMzJbMThdIHwgMCkgKyBp
MTcgfCAwOwogICAgSEVBUDMyWzE4XSA9IGkyNzsKICAgIEhFQVAzMlsyMV0gPSBpMTY7CiAgICBI
RUFQMzJbaTE2ICsgNCA+PiAyXSA9IGkyNyB8IDE7CiAgICBIRUFQMzJbaTMgKyBpMjcgPj4gMl0g
PSBpMjc7CiAgICByZXR1cm47CiAgIH0KICAgaTI3ID0gKGk0ICYgLTgpICsgaTE3IHwgMDsKICAg
aTI4ID0gaTQgPj4+IDM7CiAgIEw2NTIgOiBkbyB7CiAgICBpZiAoaTQgPj4+IDAgPCAyNTYpIHsK
ICAgICBpMjAgPSBIRUFQMzJbaTEgKyBpNyA+PiAyXSB8IDA7CiAgICAgaTYgPSBIRUFQMzJbaTEg
KyAoaTcgfCA0KSA+PiAyXSB8IDA7CiAgICAgaTIgPSAxMDQgKyAoaTI4IDw8IDEgPDwgMikgfCAw
OwogICAgIGRvIHsKICAgICAgaWYgKChpMjAgfCAwKSAhPSAoaTIgfCAwKSkgewogICAgICAgaWYg
KGkyMCA+Pj4gMCA8IChIRUFQMzJbMjBdIHwgMCkgPj4+IDApIHsKICAgICAgICBfYWJvcnQoKTsK
ICAgICAgIH0KICAgICAgIGlmICgoSEVBUDMyW2kyMCArIDEyID4+IDJdIHwgMCkgPT0gKGk5IHwg
MCkpIHsKICAgICAgICBicmVhazsKICAgICAgIH0KICAgICAgIF9hYm9ydCgpOwogICAgICB9CiAg
ICAgfSB3aGlsZSAoMCk7CiAgICAgaWYgKChpNiB8IDApID09IChpMjAgfCAwKSkgewogICAgICBI
RUFQMzJbMTZdID0gSEVBUDMyWzE2XSAmIH4oMSA8PCBpMjgpOwogICAgICBicmVhazsKICAgICB9
CiAgICAgZG8gewogICAgICBpZiAoKGk2IHwgMCkgPT0gKGkyIHwgMCkpIHsKICAgICAgIGkyOSA9
IGk2ICsgOCB8IDA7CiAgICAgIH0gZWxzZSB7CiAgICAgICBpZiAoaTYgPj4+IDAgPCAoSEVBUDMy
WzIwXSB8IDApID4+PiAwKSB7CiAgICAgICAgX2Fib3J0KCk7CiAgICAgICB9CiAgICAgICBpNSA9
IGk2ICsgOCB8IDA7CiAgICAgICBpZiAoKEhFQVAzMltpNSA+PiAyXSB8IDApID09IChpOSB8IDAp
KSB7CiAgICAgICAgaTI5ID0gaTU7CiAgICAgICAgYnJlYWs7CiAgICAgICB9CiAgICAgICBfYWJv
cnQoKTsKICAgICAgfQogICAgIH0gd2hpbGUgKDApOwogICAgIEhFQVAzMltpMjAgKyAxMiA+PiAy
XSA9IGk2OwogICAgIEhFQVAzMltpMjkgPj4gMl0gPSBpMjA7CiAgICB9IGVsc2UgewogICAgIGky
ID0gaTg7CiAgICAgaTUgPSBIRUFQMzJbaTEgKyAoaTcgKyAxNikgPj4gMl0gfCAwOwogICAgIGkx
OSA9IEhFQVAzMltpMSArIChpNyB8IDQpID4+IDJdIHwgMDsKICAgICBkbyB7CiAgICAgIGlmICgo
aTE5IHwgMCkgPT0gKGkyIHwgMCkpIHsKICAgICAgIGkxNSA9IGkxICsgKGk3ICsgMTIpIHwgMDsK
ICAgICAgIGkyMSA9IEhFQVAzMltpMTUgPj4gMl0gfCAwOwogICAgICAgaWYgKChpMjEgfCAwKSA9
PSAwKSB7CiAgICAgICAgaTEyID0gaTEgKyAoaTcgKyA4KSB8IDA7CiAgICAgICAgaTEwID0gSEVB
UDMyW2kxMiA+PiAyXSB8IDA7CiAgICAgICAgaWYgKChpMTAgfCAwKSA9PSAwKSB7CiAgICAgICAg
IGkzMCA9IDA7CiAgICAgICAgIGJyZWFrOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgIGkzMSA9
IGkxMDsKICAgICAgICAgaTMyID0gaTEyOwogICAgICAgIH0KICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgaTMxID0gaTIxOwogICAgICAgIGkzMiA9IGkxNTsKICAgICAgIH0KICAgICAgIHdoaWxlICgx
KSB7CiAgICAgICAgaTE1ID0gaTMxICsgMjAgfCAwOwogICAgICAgIGkyMSA9IEhFQVAzMltpMTUg
Pj4gMl0gfCAwOwogICAgICAgIGlmICgoaTIxIHwgMCkgIT0gMCkgewogICAgICAgICBpMzEgPSBp
MjE7CiAgICAgICAgIGkzMiA9IGkxNTsKICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAg
ICAgIGkxNSA9IGkzMSArIDE2IHwgMDsKICAgICAgICBpMjEgPSBIRUFQMzJbaTE1ID4+IDJdIHwg
MDsKICAgICAgICBpZiAoKGkyMSB8IDApID09IDApIHsKICAgICAgICAgYnJlYWs7CiAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgaTMxID0gaTIxOwogICAgICAgICBpMzIgPSBpMTU7CiAgICAgICAg
fQogICAgICAgfQogICAgICAgaWYgKGkzMiA+Pj4gMCA8IChIRUFQMzJbMjBdIHwgMCkgPj4+IDAp
IHsKICAgICAgICBfYWJvcnQoKTsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgSEVBUDMyW2kzMiA+
PiAyXSA9IDA7CiAgICAgICAgaTMwID0gaTMxOwogICAgICAgIGJyZWFrOwogICAgICAgfQogICAg
ICB9IGVsc2UgewogICAgICAgaTE1ID0gSEVBUDMyW2kxICsgaTcgPj4gMl0gfCAwOwogICAgICAg
aWYgKGkxNSA+Pj4gMCA8IChIRUFQMzJbMjBdIHwgMCkgPj4+IDApIHsKICAgICAgICBfYWJvcnQo
KTsKICAgICAgIH0KICAgICAgIGkyMSA9IGkxNSArIDEyIHwgMDsKICAgICAgIGlmICgoSEVBUDMy
W2kyMSA+PiAyXSB8IDApICE9IChpMiB8IDApKSB7CiAgICAgICAgX2Fib3J0KCk7CiAgICAgICB9
CiAgICAgICBpMTIgPSBpMTkgKyA4IHwgMDsKICAgICAgIGlmICgoSEVBUDMyW2kxMiA+PiAyXSB8
IDApID09IChpMiB8IDApKSB7CiAgICAgICAgSEVBUDMyW2kyMSA+PiAyXSA9IGkxOTsKICAgICAg
ICBIRUFQMzJbaTEyID4+IDJdID0gaTE1OwogICAgICAgIGkzMCA9IGkxOTsKICAgICAgICBicmVh
azsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgX2Fib3J0KCk7CiAgICAgICB9CiAgICAgIH0KICAg
ICB9IHdoaWxlICgwKTsKICAgICBpZiAoKGk1IHwgMCkgPT0gMCkgewogICAgICBicmVhazsKICAg
ICB9CiAgICAgaTE5ID0gaTEgKyAoaTcgKyAyMCkgfCAwOwogICAgIGkyMCA9IDM2OCArIChIRUFQ
MzJbaTE5ID4+IDJdIDw8IDIpIHwgMDsKICAgICBkbyB7CiAgICAgIGlmICgoaTIgfCAwKSA9PSAo
SEVBUDMyW2kyMCA+PiAyXSB8IDApKSB7CiAgICAgICBIRUFQMzJbaTIwID4+IDJdID0gaTMwOwog
ICAgICAgaWYgKChpMzAgfCAwKSAhPSAwKSB7CiAgICAgICAgYnJlYWs7CiAgICAgICB9CiAgICAg
ICBIRUFQMzJbMTddID0gSEVBUDMyWzE3XSAmIH4oMSA8PCBIRUFQMzJbaTE5ID4+IDJdKTsKICAg
ICAgIGJyZWFrIEw2NTI7CiAgICAgIH0gZWxzZSB7CiAgICAgICBpZiAoaTUgPj4+IDAgPCAoSEVB
UDMyWzIwXSB8IDApID4+PiAwKSB7CiAgICAgICAgX2Fib3J0KCk7CiAgICAgICB9CiAgICAgICBp
NiA9IGk1ICsgMTYgfCAwOwogICAgICAgaWYgKChIRUFQMzJbaTYgPj4gMl0gfCAwKSA9PSAoaTIg
fCAwKSkgewogICAgICAgIEhFQVAzMltpNiA+PiAyXSA9IGkzMDsKICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgSEVBUDMyW2k1ICsgMjAgPj4gMl0gPSBpMzA7CiAgICAgICB9CiAgICAgICBpZiAoKGkz
MCB8IDApID09IDApIHsKICAgICAgICBicmVhayBMNjUyOwogICAgICAgfQogICAgICB9CiAgICAg
fSB3aGlsZSAoMCk7CiAgICAgaWYgKGkzMCA+Pj4gMCA8IChIRUFQMzJbMjBdIHwgMCkgPj4+IDAp
IHsKICAgICAgX2Fib3J0KCk7CiAgICAgfQogICAgIEhFQVAzMltpMzAgKyAyNCA+PiAyXSA9IGk1
OwogICAgIGkyID0gSEVBUDMyW2kxICsgKGk3ICsgOCkgPj4gMl0gfCAwOwogICAgIGRvIHsKICAg
ICAgaWYgKChpMiB8IDApICE9IDApIHsKICAgICAgIGlmIChpMiA+Pj4gMCA8IChIRUFQMzJbMjBd
IHwgMCkgPj4+IDApIHsKICAgICAgICBfYWJvcnQoKTsKICAgICAgIH0gZWxzZSB7CiAgICAgICAg
SEVBUDMyW2kzMCArIDE2ID4+IDJdID0gaTI7CiAgICAgICAgSEVBUDMyW2kyICsgMjQgPj4gMl0g
PSBpMzA7CiAgICAgICAgYnJlYWs7CiAgICAgICB9CiAgICAgIH0KICAgICB9IHdoaWxlICgwKTsK
ICAgICBpMiA9IEhFQVAzMltpMSArIChpNyArIDEyKSA+PiAyXSB8IDA7CiAgICAgaWYgKChpMiB8
IDApID09IDApIHsKICAgICAgYnJlYWs7CiAgICAgfQogICAgIGlmIChpMiA+Pj4gMCA8IChIRUFQ
MzJbMjBdIHwgMCkgPj4+IDApIHsKICAgICAgX2Fib3J0KCk7CiAgICAgfSBlbHNlIHsKICAgICAg
SEVBUDMyW2kzMCArIDIwID4+IDJdID0gaTI7CiAgICAgIEhFQVAzMltpMiArIDI0ID4+IDJdID0g
aTMwOwogICAgICBicmVhazsKICAgICB9CiAgICB9CiAgIH0gd2hpbGUgKDApOwogICBIRUFQMzJb
aTE2ICsgNCA+PiAyXSA9IGkyNyB8IDE7CiAgIEhFQVAzMltpMyArIGkyNyA+PiAyXSA9IGkyNzsK
ICAgaWYgKChpMTYgfCAwKSAhPSAoSEVBUDMyWzIxXSB8IDApKSB7CiAgICBpMzMgPSBpMjc7CiAg
ICBicmVhazsKICAgfQogICBIRUFQMzJbMThdID0gaTI3OwogICByZXR1cm47CiAgfSBlbHNlIHsK
ICAgSEVBUDMyW2kyNiA+PiAyXSA9IGk0ICYgLTI7CiAgIEhFQVAzMltpMTYgKyA0ID4+IDJdID0g
aTE3IHwgMTsKICAgSEVBUDMyW2kzICsgaTE3ID4+IDJdID0gaTE3OwogICBpMzMgPSBpMTc7CiAg
fQogfSB3aGlsZSAoMCk7CiBpMTcgPSBpMzMgPj4+IDM7CiBpZiAoaTMzID4+PiAwIDwgMjU2KSB7
CiAgaTMgPSBpMTcgPDwgMTsKICBpNCA9IDEwNCArIChpMyA8PCAyKSB8IDA7CiAgaTI2ID0gSEVB
UDMyWzE2XSB8IDA7CiAgaTMwID0gMSA8PCBpMTc7CiAgZG8gewogICBpZiAoKGkyNiAmIGkzMCB8
IDApID09IDApIHsKICAgIEhFQVAzMlsxNl0gPSBpMjYgfCBpMzA7CiAgICBpMzQgPSBpNDsKICAg
IGkzNSA9IDEwNCArIChpMyArIDIgPDwgMikgfCAwOwogICB9IGVsc2UgewogICAgaTE3ID0gMTA0
ICsgKGkzICsgMiA8PCAyKSB8IDA7CiAgICBpNyA9IEhFQVAzMltpMTcgPj4gMl0gfCAwOwogICAg
aWYgKGk3ID4+PiAwID49IChIRUFQMzJbMjBdIHwgMCkgPj4+IDApIHsKICAgICBpMzQgPSBpNzsK
ICAgICBpMzUgPSBpMTc7CiAgICAgYnJlYWs7CiAgICB9CiAgICBfYWJvcnQoKTsKICAgfQogIH0g
d2hpbGUgKDApOwogIEhFQVAzMltpMzUgPj4gMl0gPSBpMTY7CiAgSEVBUDMyW2kzNCArIDEyID4+
IDJdID0gaTE2OwogIEhFQVAzMltpMTYgKyA4ID4+IDJdID0gaTM0OwogIEhFQVAzMltpMTYgKyAx
MiA+PiAyXSA9IGk0OwogIHJldHVybjsKIH0KIGk0ID0gaTE2OwogaTM0ID0gaTMzID4+PiA4Owog
ZG8gewogIGlmICgoaTM0IHwgMCkgPT0gMCkgewogICBpMzYgPSAwOwogIH0gZWxzZSB7CiAgIGlm
IChpMzMgPj4+IDAgPiAxNjc3NzIxNSkgewogICAgaTM2ID0gMzE7CiAgICBicmVhazsKICAgfQog
ICBpMzUgPSAoaTM0ICsgMTA0ODMyMCB8IDApID4+PiAxNiAmIDg7CiAgIGkzID0gaTM0IDw8IGkz
NTsKICAgaTMwID0gKGkzICsgNTIwMTkyIHwgMCkgPj4+IDE2ICYgNDsKICAgaTI2ID0gaTMgPDwg
aTMwOwogICBpMyA9IChpMjYgKyAyNDU3NjAgfCAwKSA+Pj4gMTYgJiAyOwogICBpMTcgPSAxNCAt
IChpMzAgfCBpMzUgfCBpMykgKyAoaTI2IDw8IGkzID4+PiAxNSkgfCAwOwogICBpMzYgPSBpMzMg
Pj4+ICgoaTE3ICsgNyB8IDApID4+PiAwKSAmIDEgfCBpMTcgPDwgMTsKICB9CiB9IHdoaWxlICgw
KTsKIGkzNCA9IDM2OCArIChpMzYgPDwgMikgfCAwOwogSEVBUDMyW2kxNiArIDI4ID4+IDJdID0g
aTM2OwogSEVBUDMyW2kxNiArIDIwID4+IDJdID0gMDsKIEhFQVAzMltpMTYgKyAxNiA+PiAyXSA9
IDA7CiBpMTcgPSBIRUFQMzJbMTddIHwgMDsKIGkzID0gMSA8PCBpMzY7CiBkbyB7CiAgaWYgKChp
MTcgJiBpMyB8IDApID09IDApIHsKICAgSEVBUDMyWzE3XSA9IGkxNyB8IGkzOwogICBIRUFQMzJb
aTM0ID4+IDJdID0gaTQ7CiAgIEhFQVAzMltpMTYgKyAyNCA+PiAyXSA9IGkzNDsKICAgSEVBUDMy
W2kxNiArIDEyID4+IDJdID0gaTE2OwogICBIRUFQMzJbaTE2ICsgOCA+PiAyXSA9IGkxNjsKICB9
IGVsc2UgewogICBpZiAoKGkzNiB8IDApID09IDMxKSB7CiAgICBpMzcgPSAwOwogICB9IGVsc2Ug
ewogICAgaTM3ID0gMjUgLSAoaTM2ID4+PiAxKSB8IDA7CiAgIH0KICAgaTI2ID0gaTMzIDw8IGkz
NzsKICAgaTM1ID0gSEVBUDMyW2kzNCA+PiAyXSB8IDA7CiAgIHdoaWxlICgxKSB7CiAgICBpZiAo
KEhFQVAzMltpMzUgKyA0ID4+IDJdICYgLTggfCAwKSA9PSAoaTMzIHwgMCkpIHsKICAgICBicmVh
azsKICAgIH0KICAgIGkzOCA9IGkzNSArIDE2ICsgKGkyNiA+Pj4gMzEgPDwgMikgfCAwOwogICAg
aTMwID0gSEVBUDMyW2kzOCA+PiAyXSB8IDA7CiAgICBpZiAoKGkzMCB8IDApID09IDApIHsKICAg
ICBpMzkgPSA1MjU7CiAgICAgYnJlYWs7CiAgICB9IGVsc2UgewogICAgIGkyNiA9IGkyNiA8PCAx
OwogICAgIGkzNSA9IGkzMDsKICAgIH0KICAgfQogICBpZiAoKGkzOSB8IDApID09IDUyNSkgewog
ICAgaWYgKGkzOCA+Pj4gMCA8IChIRUFQMzJbMjBdIHwgMCkgPj4+IDApIHsKICAgICBfYWJvcnQo
KTsKICAgIH0gZWxzZSB7CiAgICAgSEVBUDMyW2kzOCA+PiAyXSA9IGk0OwogICAgIEhFQVAzMltp
MTYgKyAyNCA+PiAyXSA9IGkzNTsKICAgICBIRUFQMzJbaTE2ICsgMTIgPj4gMl0gPSBpMTY7CiAg
ICAgSEVBUDMyW2kxNiArIDggPj4gMl0gPSBpMTY7CiAgICAgYnJlYWs7CiAgICB9CiAgIH0KICAg
aTI2ID0gaTM1ICsgOCB8IDA7CiAgIGkyNyA9IEhFQVAzMltpMjYgPj4gMl0gfCAwOwogICBpMzAg
PSBIRUFQMzJbMjBdIHwgMDsKICAgaWYgKGkzNSA+Pj4gMCA8IGkzMCA+Pj4gMCkgewogICAgX2Fi
b3J0KCk7CiAgIH0KICAgaWYgKGkyNyA+Pj4gMCA8IGkzMCA+Pj4gMCkgewogICAgX2Fib3J0KCk7
CiAgIH0gZWxzZSB7CiAgICBIRUFQMzJbaTI3ICsgMTIgPj4gMl0gPSBpNDsKICAgIEhFQVAzMltp
MjYgPj4gMl0gPSBpNDsKICAgIEhFQVAzMltpMTYgKyA4ID4+IDJdID0gaTI3OwogICAgSEVBUDMy
W2kxNiArIDEyID4+IDJdID0gaTM1OwogICAgSEVBUDMyW2kxNiArIDI0ID4+IDJdID0gMDsKICAg
IGJyZWFrOwogICB9CiAgfQogfSB3aGlsZSAoMCk7CiBpMTYgPSAoSEVBUDMyWzI0XSB8IDApIC0g
MSB8IDA7CiBIRUFQMzJbMjRdID0gaTE2OwogaWYgKChpMTYgfCAwKSA9PSAwKSB7CiAgaTQwID0g
NTIwOwogfSBlbHNlIHsKICByZXR1cm47CiB9CiB3aGlsZSAoMSkgewogIGkxNiA9IEhFQVAzMltp
NDAgPj4gMl0gfCAwOwogIGlmICgoaTE2IHwgMCkgPT0gMCkgewogICBicmVhazsKICB9IGVsc2Ug
ewogICBpNDAgPSBpMTYgKyA4IHwgMDsKICB9CiB9CiBIRUFQMzJbMjRdID0gLTE7CiByZXR1cm47
Cn0KZnVuY3Rpb24gX3N0cmxlbihpMSkgewogaTEgPSBpMSB8IDA7CiB2YXIgaTIgPSAwOwogaTIg
PSBpMTsKIHdoaWxlIChIRUFQOFtpMl0gfCAwKSB7CiAgaTIgPSBpMiArIDEgfCAwOwogfQogcmV0
dXJuIGkyIC0gaTEgfCAwOwp9CmZ1bmN0aW9uIF9tZW1jcHkoaTEsIGkyLCBpMykgewogaTEgPSBp
MSB8IDA7CiBpMiA9IGkyIHwgMDsKIGkzID0gaTMgfCAwOwogdmFyIGk0ID0gMDsKIGk0ID0gaTEg
fCAwOwogaWYgKChpMSAmIDMpID09IChpMiAmIDMpKSB7CiAgd2hpbGUgKGkxICYgMykgewogICBp
ZiAoKGkzIHwgMCkgPT0gMCkgcmV0dXJuIGk0IHwgMDsKICAgSEVBUDhbaTFdID0gSEVBUDhbaTJd
IHwgMDsKICAgaTEgPSBpMSArIDEgfCAwOwogICBpMiA9IGkyICsgMSB8IDA7CiAgIGkzID0gaTMg
LSAxIHwgMDsKICB9CiAgd2hpbGUgKChpMyB8IDApID49IDQpIHsKICAgSEVBUDMyW2kxID4+IDJd
ID0gSEVBUDMyW2kyID4+IDJdOwogICBpMSA9IGkxICsgNCB8IDA7CiAgIGkyID0gaTIgKyA0IHwg
MDsKICAgaTMgPSBpMyAtIDQgfCAwOwogIH0KIH0KIHdoaWxlICgoaTMgfCAwKSA+IDApIHsKICBI
RUFQOFtpMV0gPSBIRUFQOFtpMl0gfCAwOwogIGkxID0gaTEgKyAxIHwgMDsKICBpMiA9IGkyICsg
MSB8IDA7CiAgaTMgPSBpMyAtIDEgfCAwOwogfQogcmV0dXJuIGk0IHwgMDsKfQpmdW5jdGlvbiBf
bWVtc2V0KGkxLCBpMiwgaTMpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7CiBpMyA9IGkz
IHwgMDsKIHZhciBpNCA9IDAsIGk1ID0gMCwgaTYgPSAwOwogaTQgPSBpMSArIGkzIHwgMDsKIGlm
ICgoaTMgfCAwKSA+PSAyMCkgewogIGkyID0gaTIgJiAyNTU7CiAgaTMgPSBpMSAmIDM7CiAgaTUg
PSBpMiB8IGkyIDw8IDggfCBpMiA8PCAxNiB8IGkyIDw8IDI0OwogIGk2ID0gaTQgJiB+MzsKICBp
ZiAoaTMpIHsKICAgaTMgPSBpMSArIDQgLSBpMyB8IDA7CiAgIHdoaWxlICgoaTEgfCAwKSA8IChp
MyB8IDApKSB7CiAgICBIRUFQOFtpMV0gPSBpMjsKICAgIGkxID0gaTEgKyAxIHwgMDsKICAgfQog
IH0KICB3aGlsZSAoKGkxIHwgMCkgPCAoaTYgfCAwKSkgewogICBIRUFQMzJbaTEgPj4gMl0gPSBp
NTsKICAgaTEgPSBpMSArIDQgfCAwOwogIH0KIH0KIHdoaWxlICgoaTEgfCAwKSA8IChpNCB8IDAp
KSB7CiAgSEVBUDhbaTFdID0gaTI7CiAgaTEgPSBpMSArIDEgfCAwOwogfQp9CmZ1bmN0aW9uIGR5
bkNhbGxfaWkoaTEsIGkyKSB7CiBpMSA9IGkxIHwgMDsKIGkyID0gaTIgfCAwOwogcmV0dXJuIEZV
TkNUSU9OX1RBQkxFX2lpW2kxICYgMV0oaTIgfCAwKSB8IDA7Cn0KZnVuY3Rpb24gZHluQ2FsbF92
KGkxKSB7CiBpMSA9IGkxIHwgMDsKIEZVTkNUSU9OX1RBQkxFX3ZbaTEgJiAxXSgpOwp9CmZ1bmN0
aW9uIGR5bkNhbGxfaWlpKGkxLCBpMiwgaTMpIHsKIGkxID0gaTEgfCAwOwogaTIgPSBpMiB8IDA7
CiBpMyA9IGkzIHwgMDsKIHJldHVybiBGVU5DVElPTl9UQUJMRV9paWlbaTEgJiAxXShpMiB8IDAs
IGkzIHwgMCkgfCAwOwp9CmZ1bmN0aW9uIGR5bkNhbGxfdmkoaTEsIGkyKSB7CiBpMSA9IGkxIHwg
MDsKIGkyID0gaTIgfCAwOwogRlVOQ1RJT05fVEFCTEVfdmlbaTEgJiAxXShpMiB8IDApOwp9CmZ1
bmN0aW9uIGIwKGkxKSB7CiBpMSA9IGkxIHwgMDsKIGFib3J0KDApOwogcmV0dXJuIDA7Cn0KZnVu
Y3Rpb24gYjEoKSB7CiBhYm9ydCgxKTsKfQpmdW5jdGlvbiBiMihpMSwgaTIpIHsKIGkxID0gaTEg
fCAwOwogaTIgPSBpMiB8IDA7CiBhYm9ydCgyKTsKIHJldHVybiAwOwp9CmZ1bmN0aW9uIGIzKGkx
KSB7CiBpMSA9IGkxIHwgMDsKIGFib3J0KDMpOwp9Ci8vIEVNU0NSSVBURU5fRU5EX0ZVTkNTCiAg
dmFyIEZVTkNUSU9OX1RBQkxFX2lpID0gW2IwLGIwXTsKICB2YXIgRlVOQ1RJT05fVEFCTEVfdiA9
IFtiMSxiMV07CiAgdmFyIEZVTkNUSU9OX1RBQkxFX2lpaSA9IFtiMixiMl07CiAgdmFyIEZVTkNU
SU9OX1RBQkxFX3ZpID0gW2IzLGIzXTsKICByZXR1cm4geyBfc3RybGVuOiBfc3RybGVuLCBfZnJl
ZTogX2ZyZWUsIF9tYWluOiBfbWFpbiwgX21lbXNldDogX21lbXNldCwgX21hbGxvYzogX21hbGxv
YywgX21lbWNweTogX21lbWNweSwgcnVuUG9zdFNldHM6IHJ1blBvc3RTZXRzLCBzdGFja0FsbG9j
OiBzdGFja0FsbG9jLCBzdGFja1NhdmU6IHN0YWNrU2F2ZSwgc3RhY2tSZXN0b3JlOiBzdGFja1Jl
c3RvcmUsIHNldFRocmV3OiBzZXRUaHJldywgc2V0VGVtcFJldDA6IHNldFRlbXBSZXQwLCBzZXRU
ZW1wUmV0MTogc2V0VGVtcFJldDEsIHNldFRlbXBSZXQyOiBzZXRUZW1wUmV0Miwgc2V0VGVtcFJl
dDM6IHNldFRlbXBSZXQzLCBzZXRUZW1wUmV0NDogc2V0VGVtcFJldDQsIHNldFRlbXBSZXQ1OiBz
ZXRUZW1wUmV0NSwgc2V0VGVtcFJldDY6IHNldFRlbXBSZXQ2LCBzZXRUZW1wUmV0Nzogc2V0VGVt
cFJldDcsIHNldFRlbXBSZXQ4OiBzZXRUZW1wUmV0OCwgc2V0VGVtcFJldDk6IHNldFRlbXBSZXQ5
LCBkeW5DYWxsX2lpOiBkeW5DYWxsX2lpLCBkeW5DYWxsX3Y6IGR5bkNhbGxfdiwgZHluQ2FsbF9p
aWk6IGR5bkNhbGxfaWlpLCBkeW5DYWxsX3ZpOiBkeW5DYWxsX3ZpIH07Cn0pCi8vIEVNU0NSSVBU
RU5fRU5EX0FTTQooeyAiTWF0aCI6IE1hdGgsICJJbnQ4QXJyYXkiOiBJbnQ4QXJyYXksICJJbnQx
NkFycmF5IjogSW50MTZBcnJheSwgIkludDMyQXJyYXkiOiBJbnQzMkFycmF5LCAiVWludDhBcnJh
eSI6IFVpbnQ4QXJyYXksICJVaW50MTZBcnJheSI6IFVpbnQxNkFycmF5LCAiVWludDMyQXJyYXki
OiBVaW50MzJBcnJheSwgIkZsb2F0MzJBcnJheSI6IEZsb2F0MzJBcnJheSwgIkZsb2F0NjRBcnJh
eSI6IEZsb2F0NjRBcnJheSB9LCB7ICJhYm9ydCI6IGFib3J0LCAiYXNzZXJ0IjogYXNzZXJ0LCAi
YXNtUHJpbnRJbnQiOiBhc21QcmludEludCwgImFzbVByaW50RmxvYXQiOiBhc21QcmludEZsb2F0
LCAibWluIjogTWF0aF9taW4sICJpbnZva2VfaWkiOiBpbnZva2VfaWksICJpbnZva2VfdiI6IGlu
dm9rZV92LCAiaW52b2tlX2lpaSI6IGludm9rZV9paWksICJpbnZva2VfdmkiOiBpbnZva2Vfdmks
ICJfcHdyaXRlIjogX3B3cml0ZSwgIl9zeXNjb25mIjogX3N5c2NvbmYsICJfc2JyayI6IF9zYnJr
LCAiX19fc2V0RXJyTm8iOiBfX19zZXRFcnJObywgIl9md3JpdGUiOiBfZndyaXRlLCAiX19yZWFs
bHlOZWdhdGl2ZSI6IF9fcmVhbGx5TmVnYXRpdmUsICJfdGltZSI6IF90aW1lLCAiX19mb3JtYXRT
dHJpbmciOiBfX2Zvcm1hdFN0cmluZywgIl9zZW5kIjogX3NlbmQsICJfd3JpdGUiOiBfd3JpdGUs
ICJfYWJvcnQiOiBfYWJvcnQsICJfZnByaW50ZiI6IF9mcHJpbnRmLCAiX3ByaW50ZiI6IF9wcmlu
dGYsICJfX19lcnJub19sb2NhdGlvbiI6IF9fX2Vycm5vX2xvY2F0aW9uLCAiX2ZmbHVzaCI6IF9m
Zmx1c2gsICJTVEFDS1RPUCI6IFNUQUNLVE9QLCAiU1RBQ0tfTUFYIjogU1RBQ0tfTUFYLCAidGVt
cERvdWJsZVB0ciI6IHRlbXBEb3VibGVQdHIsICJBQk9SVCI6IEFCT1JULCAiTmFOIjogTmFOLCAi
SW5maW5pdHkiOiBJbmZpbml0eSB9LCBidWZmZXIpOwp2YXIgX3N0cmxlbiA9IE1vZHVsZVsiX3N0
cmxlbiJdID0gYXNtWyJfc3RybGVuIl07CnZhciBfZnJlZSA9IE1vZHVsZVsiX2ZyZWUiXSA9IGFz
bVsiX2ZyZWUiXTsKdmFyIF9tYWluID0gTW9kdWxlWyJfbWFpbiJdID0gYXNtWyJfbWFpbiJdOwp2
YXIgX21lbXNldCA9IE1vZHVsZVsiX21lbXNldCJdID0gYXNtWyJfbWVtc2V0Il07CnZhciBfbWFs
bG9jID0gTW9kdWxlWyJfbWFsbG9jIl0gPSBhc21bIl9tYWxsb2MiXTsKdmFyIF9tZW1jcHkgPSBN
b2R1bGVbIl9tZW1jcHkiXSA9IGFzbVsiX21lbWNweSJdOwp2YXIgcnVuUG9zdFNldHMgPSBNb2R1
bGVbInJ1blBvc3RTZXRzIl0gPSBhc21bInJ1blBvc3RTZXRzIl07CnZhciBkeW5DYWxsX2lpID0g
TW9kdWxlWyJkeW5DYWxsX2lpIl0gPSBhc21bImR5bkNhbGxfaWkiXTsKdmFyIGR5bkNhbGxfdiA9
IE1vZHVsZVsiZHluQ2FsbF92Il0gPSBhc21bImR5bkNhbGxfdiJdOwp2YXIgZHluQ2FsbF9paWkg
PSBNb2R1bGVbImR5bkNhbGxfaWlpIl0gPSBhc21bImR5bkNhbGxfaWlpIl07CnZhciBkeW5DYWxs
X3ZpID0gTW9kdWxlWyJkeW5DYWxsX3ZpIl0gPSBhc21bImR5bkNhbGxfdmkiXTsKUnVudGltZS5z
dGFja0FsbG9jID0gZnVuY3Rpb24oc2l6ZSkgeyByZXR1cm4gYXNtWydzdGFja0FsbG9jJ10oc2l6
ZSkgfTsKUnVudGltZS5zdGFja1NhdmUgPSBmdW5jdGlvbigpIHsgcmV0dXJuIGFzbVsnc3RhY2tT
YXZlJ10oKSB9OwpSdW50aW1lLnN0YWNrUmVzdG9yZSA9IGZ1bmN0aW9uKHRvcCkgeyBhc21bJ3N0
YWNrUmVzdG9yZSddKHRvcCkgfTsKLy8gV2FybmluZzogcHJpbnRpbmcgb2YgaTY0IHZhbHVlcyBt
YXkgYmUgc2xpZ2h0bHkgcm91bmRlZCEgTm8gZGVlcCBpNjQgbWF0aCB1c2VkLCBzbyBwcmVjaXNl
IGk2NCBjb2RlIG5vdCBpbmNsdWRlZAp2YXIgaTY0TWF0aCA9IG51bGw7Ci8vID09PSBBdXRvLWdl
bmVyYXRlZCBwb3N0YW1ibGUgc2V0dXAgZW50cnkgc3R1ZmYgPT09CmZ1bmN0aW9uIEV4aXRTdGF0
dXMoc3RhdHVzKSB7CiAgdGhpcy5uYW1lID0gIkV4aXRTdGF0dXMiOwogIHRoaXMubWVzc2FnZSA9
ICJQcm9ncmFtIHRlcm1pbmF0ZWQgd2l0aCBleGl0KCIgKyBzdGF0dXMgKyAiKSI7CiAgdGhpcy5z
dGF0dXMgPSBzdGF0dXM7Cn07CkV4aXRTdGF0dXMucHJvdG90eXBlID0gbmV3IEVycm9yKCk7CkV4
aXRTdGF0dXMucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRXhpdFN0YXR1czsKdmFyIGluaXRpYWxT
dGFja1RvcDsKdmFyIHByZWxvYWRTdGFydFRpbWUgPSBudWxsOwpNb2R1bGVbJ2NhbGxNYWluJ10g
PSBNb2R1bGUuY2FsbE1haW4gPSBmdW5jdGlvbiBjYWxsTWFpbihhcmdzKSB7CiAgYXNzZXJ0KHJ1
bkRlcGVuZGVuY2llcyA9PSAwLCAnY2Fubm90IGNhbGwgbWFpbiB3aGVuIGFzeW5jIGRlcGVuZGVu
Y2llcyByZW1haW4hIChsaXN0ZW4gb24gX19BVE1BSU5fXyknKTsKICBhc3NlcnQoX19BVFBSRVJV
Tl9fLmxlbmd0aCA9PSAwLCAnY2Fubm90IGNhbGwgbWFpbiB3aGVuIHByZVJ1biBmdW5jdGlvbnMg
cmVtYWluIHRvIGJlIGNhbGxlZCcpOwogIGFyZ3MgPSBhcmdzIHx8IFtdOwogIGlmIChFTlZJUk9O
TUVOVF9JU19XRUIgJiYgcHJlbG9hZFN0YXJ0VGltZSAhPT0gbnVsbCkgewogICAgTW9kdWxlLnBy
aW50RXJyKCdwcmVsb2FkIHRpbWU6ICcgKyAoRGF0ZS5ub3coKSAtIHByZWxvYWRTdGFydFRpbWUp
ICsgJyBtcycpOwogIH0KICBlbnN1cmVJbml0UnVudGltZSgpOwogIHZhciBhcmdjID0gYXJncy5s
ZW5ndGgrMTsKICBmdW5jdGlvbiBwYWQoKSB7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQtMTsg
aSsrKSB7CiAgICAgIGFyZ3YucHVzaCgwKTsKICAgIH0KICB9CiAgdmFyIGFyZ3YgPSBbYWxsb2Nh
dGUoaW50QXJyYXlGcm9tU3RyaW5nKCIvYmluL3RoaXMucHJvZ3JhbSIpLCAnaTgnLCBBTExPQ19O
T1JNQUwpIF07CiAgcGFkKCk7CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdjLTE7IGkgPSBpICsg
MSkgewogICAgYXJndi5wdXNoKGFsbG9jYXRlKGludEFycmF5RnJvbVN0cmluZyhhcmdzW2ldKSwg
J2k4JywgQUxMT0NfTk9STUFMKSk7CiAgICBwYWQoKTsKICB9CiAgYXJndi5wdXNoKDApOwogIGFy
Z3YgPSBhbGxvY2F0ZShhcmd2LCAnaTMyJywgQUxMT0NfTk9STUFMKTsKICBpbml0aWFsU3RhY2tU
b3AgPSBTVEFDS1RPUDsKICB0cnkgewogICAgdmFyIHJldCA9IE1vZHVsZVsnX21haW4nXShhcmdj
LCBhcmd2LCAwKTsKICAgIC8vIGlmIHdlJ3JlIG5vdCBydW5uaW5nIGFuIGV2ZW50ZWQgbWFpbiBs
b29wLCBpdCdzIHRpbWUgdG8gZXhpdAogICAgaWYgKCFNb2R1bGVbJ25vRXhpdFJ1bnRpbWUnXSkg
ewogICAgICBleGl0KHJldCk7CiAgICB9CiAgfQogIGNhdGNoKGUpIHsKICAgIGlmIChlIGluc3Rh
bmNlb2YgRXhpdFN0YXR1cykgewogICAgICAvLyBleGl0KCkgdGhyb3dzIHRoaXMgb25jZSBpdCdz
IGRvbmUgdG8gbWFrZSBzdXJlIGV4ZWN1dGlvbgogICAgICAvLyBoYXMgYmVlbiBzdG9wcGVkIGNv
bXBsZXRlbHkKICAgICAgcmV0dXJuOwogICAgfSBlbHNlIGlmIChlID09ICdTaW11bGF0ZUluZmlu
aXRlTG9vcCcpIHsKICAgICAgLy8gcnVubmluZyBhbiBldmVudGVkIG1haW4gbG9vcCwgZG9uJ3Qg
aW1tZWRpYXRlbHkgZXhpdAogICAgICBNb2R1bGVbJ25vRXhpdFJ1bnRpbWUnXSA9IHRydWU7CiAg
ICAgIHJldHVybjsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IGU7CiAgICB9CiAgfQp9CmZ1bmN0
aW9uIHJ1bihhcmdzKSB7CiAgYXJncyA9IGFyZ3MgfHwgTW9kdWxlWydhcmd1bWVudHMnXTsKICBp
ZiAocHJlbG9hZFN0YXJ0VGltZSA9PT0gbnVsbCkgcHJlbG9hZFN0YXJ0VGltZSA9IERhdGUubm93
KCk7CiAgaWYgKHJ1bkRlcGVuZGVuY2llcyA+IDApIHsKICAgIE1vZHVsZS5wcmludEVycigncnVu
KCkgY2FsbGVkLCBidXQgZGVwZW5kZW5jaWVzIHJlbWFpbiwgc28gbm90IHJ1bm5pbmcnKTsKICAg
IHJldHVybjsKICB9CiAgcHJlUnVuKCk7CiAgaWYgKHJ1bkRlcGVuZGVuY2llcyA+IDApIHsKICAg
IC8vIGEgcHJlUnVuIGFkZGVkIGEgZGVwZW5kZW5jeSwgcnVuIHdpbGwgYmUgY2FsbGVkIGxhdGVy
CiAgICByZXR1cm47CiAgfQogIGZ1bmN0aW9uIGRvUnVuKCkgewogICAgZW5zdXJlSW5pdFJ1bnRp
bWUoKTsKICAgIHByZU1haW4oKTsKICAgIGNhbGxlZFJ1biA9IHRydWU7CiAgICBpZiAoTW9kdWxl
WydfbWFpbiddICYmIHNob3VsZFJ1bk5vdykgewogICAgICBNb2R1bGVbJ2NhbGxNYWluJ10oYXJn
cyk7CiAgICB9CiAgICBwb3N0UnVuKCk7CiAgfQogIGlmIChNb2R1bGVbJ3NldFN0YXR1cyddKSB7
CiAgICBNb2R1bGVbJ3NldFN0YXR1cyddKCdSdW5uaW5nLi4uJyk7CiAgICBzZXRUaW1lb3V0KGZ1
bmN0aW9uKCkgewogICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgIE1vZHVsZVsn
c2V0U3RhdHVzJ10oJycpOwogICAgICB9LCAxKTsKICAgICAgaWYgKCFBQk9SVCkgZG9SdW4oKTsK
ICAgIH0sIDEpOwogIH0gZWxzZSB7CiAgICBkb1J1bigpOwogIH0KfQpNb2R1bGVbJ3J1biddID0g
TW9kdWxlLnJ1biA9IHJ1bjsKZnVuY3Rpb24gZXhpdChzdGF0dXMpIHsKICBBQk9SVCA9IHRydWU7
CiAgRVhJVFNUQVRVUyA9IHN0YXR1czsKICBTVEFDS1RPUCA9IGluaXRpYWxTdGFja1RvcDsKICAv
LyBleGl0IHRoZSBydW50aW1lCiAgZXhpdFJ1bnRpbWUoKTsKICAvLyB0aHJvdyBhbiBleGNlcHRp
b24gdG8gaGFsdCB0aGUgY3VycmVudCBleGVjdXRpb24KICB0aHJvdyBuZXcgRXhpdFN0YXR1cyhz
dGF0dXMpOwp9Ck1vZHVsZVsnZXhpdCddID0gTW9kdWxlLmV4aXQgPSBleGl0OwpmdW5jdGlvbiBh
Ym9ydCh0ZXh0KSB7CiAgaWYgKHRleHQpIHsKICAgIE1vZHVsZS5wcmludCh0ZXh0KTsKICAgIE1v
ZHVsZS5wcmludEVycih0ZXh0KTsKICB9CiAgQUJPUlQgPSB0cnVlOwogIEVYSVRTVEFUVVMgPSAx
OwogIHRocm93ICdhYm9ydCgpIGF0ICcgKyAobmV3IEVycm9yKCkuc3RhY2spOwp9Ck1vZHVsZVsn
YWJvcnQnXSA9IE1vZHVsZS5hYm9ydCA9IGFib3J0OwovLyB7e1BSRV9SVU5fQURESVRJT05TfX0K
aWYgKE1vZHVsZVsncHJlSW5pdCddKSB7CiAgaWYgKHR5cGVvZiBNb2R1bGVbJ3ByZUluaXQnXSA9
PSAnZnVuY3Rpb24nKSBNb2R1bGVbJ3ByZUluaXQnXSA9IFtNb2R1bGVbJ3ByZUluaXQnXV07CiAg
d2hpbGUgKE1vZHVsZVsncHJlSW5pdCddLmxlbmd0aCA+IDApIHsKICAgIE1vZHVsZVsncHJlSW5p
dCddLnBvcCgpKCk7CiAgfQp9Ci8vIHNob3VsZFJ1bk5vdyByZWZlcnMgdG8gY2FsbGluZyBtYWlu
KCksIG5vdCBydW4oKS4KdmFyIHNob3VsZFJ1bk5vdyA9IHRydWU7CmlmIChNb2R1bGVbJ25vSW5p
dGlhbFJ1biddKSB7CiAgc2hvdWxkUnVuTm93ID0gZmFsc2U7Cn0KcnVuKFtdLmNvbmNhdChNb2R1
bGVbImFyZ3VtZW50cyJdKSk7Ci8vIHt7UE9TVF9SVU5fQURESVRJT05TfX0KLy8ge3tNT0RVTEVf
QURESVRJT05TfX0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>209212</attachid>
            <date>2013-08-20 11:42:32 -0700</date>
            <delta_ts>2013-08-20 11:42:32 -0700</delta_ts>
            <desc>memops htmlified</desc>
            <filename>memops.tar.gz</filename>
            <type>application/x-gzip</type>
            <size>50361</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">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
</data>

          </attachment>
      

    </bug>

</bugzilla>