<?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>59053</bug_id>
          
          <creation_ts>2011-04-20 17:52:47 -0700</creation_ts>
          <short_desc>REGRESSION (r83386): Typing in WSJ.com search field doesn&apos;t clear placeholder text</short_desc>
          <delta_ts>2011-05-01 07:15:32 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P1</priority>
          <bug_severity>Major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adele Peterson">adele</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>adele</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>mitz</cc>
    
    <cc>morrita</cc>
    
    <cc>tonyg</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>389700</commentid>
    <comment_count>0</comment_count>
    <who name="Adele Peterson">adele</who>
    <bug_when>2011-04-20 17:52:47 -0700</bug_when>
    <thetext>Typing in WSJ.com search field doesn&apos;t clear placeholder text

Bisecting indicates this was caused by http://trac.webkit.org/changeset/84039

Steps to reproduce:
- Go to http://www.wsj.com
- Click in the search field on the upper right, with the placeholder text &quot;News, Quotes, Companies, Videos&quot; (I don&apos;t think this is a placeholder attribute)
- type

It should clear the placeholder text.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389702</commentid>
    <comment_count>1</comment_count>
    <who name="Adele Peterson">adele</who>
    <bug_when>2011-04-20 17:53:26 -0700</bug_when>
    <thetext>&lt;rdar://problem/9305025&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389817</commentid>
    <comment_count>2</comment_count>
    <who name="">mitz</who>
    <bug_when>2011-04-20 21:13:54 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; (I don&apos;t think this is a placeholder attribute)

It is not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389824</commentid>
    <comment_count>3</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-04-20 21:22:01 -0700</bug_when>
    <thetext>I am having trouble reproducing. I am on Version 5.0.4 (6533.20.27, r84360). Click on the search field immediately clears the placeholder text. Is this what should be happening?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389826</commentid>
    <comment_count>4</comment_count>
    <who name="Adele Peterson">adele</who>
    <bug_when>2011-04-20 21:25:22 -0700</bug_when>
    <thetext>I can get this to work sometimes, but most of the time it fails.  When it fails, if I click over &quot;Quotes&quot;, I end up entering text in the middle of that word.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390024</commentid>
    <comment_count>5</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-04-21 07:52:04 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; I can get this to work sometimes, but most of the time it fails.  When it fails, if I click over &quot;Quotes&quot;, I end up entering text in the middle of that word.

Morrita-san and I will try to repro again today. It would be great to have a better reduction.

The revision you mentioned looks rather doubtful to be the culprit in any of this, since the WSJ site doesn&apos;t travel any of the affected code. They don&apos;t use &lt;summary&gt;/&lt;details&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390109</commentid>
    <comment_count>6</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-04-21 10:08:59 -0700</bug_when>
    <thetext>I think this bug has more to do with the racing in loading of scripts. According to the code in http://sj.wsj.net/djscript/bucket/NA_WSJ/page/0_0_WH_0001_public/provided/j_global_slim/version/20110419230428.js:

1) focus event triggers loading of http://s.wsj.net/djscript/j_networkHat-201134.js
2) when the script is loaded, a function &quot;searchFieldOnFocus&quot; from this script is called
3) the function clears the value of the input.

Since I can&apos;t reproduce the bug in Chromium or WebKit nightly, I can&apos;t tell exactly where this chain breaks down, but it&apos;s definitely not the r84039.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390111</commentid>
    <comment_count>7</comment_count>
      <attachid>90551</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-04-21 10:09:49 -0700</bug_when>
    <thetext>Created attachment 90551
Beautified WSJ script that contains misbehaving code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390117</commentid>
    <comment_count>8</comment_count>
    <who name="">mitz</who>
    <bug_when>2011-04-21 10:20:44 -0700</bug_when>
    <thetext>Thanks. I was now able to reproduce the bug with a build of a revision earlier than r84039.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390130</commentid>
    <comment_count>9</comment_count>
    <who name="">mitz</who>
    <bug_when>2011-04-21 10:29:17 -0700</bug_when>
    <thetext>Further testing suggests that this was caused by r83386.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390135</commentid>
    <comment_count>10</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-04-21 10:34:01 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Further testing suggests that this was caused by r83386.

Ha! Still me :)

Are you using just standard WebKit nightly and Safari 5 on Snow Leopard or some other magic thing to repro this? I am flying blind, since I can&apos;t repro locally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390175</commentid>
    <comment_count>11</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-04-21 11:23:54 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; Further testing suggests that this was caused by r83386.
&gt; 
&gt; Ha! Still me :)
&gt; 
&gt; Are you using just standard WebKit nightly and Safari 5 on Snow Leopard or some other magic thing to repro this? I am flying blind, since I can&apos;t repro locally.

I am able to reproduce now. The trick is to rest the cursor over the search box a bit before clicking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390196</commentid>
    <comment_count>12</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-04-21 11:37:31 -0700</bug_when>
    <thetext>I am a bad boy. Fix coming up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390439</commentid>
    <comment_count>13</comment_count>
      <attachid>90629</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-04-21 16:24:34 -0700</bug_when>
    <thetext>Created attachment 90629
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390538</commentid>
    <comment_count>14</comment_count>
      <attachid>90629</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-21 19:01:45 -0700</bug_when>
    <thetext>Comment on attachment 90629
Patch

Clearing flags on attachment: 90629

Committed r84587: &lt;http://trac.webkit.org/changeset/84587&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390539</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-21 19:01:50 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395897</commentid>
    <comment_count>16</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-05-01 07:15:32 -0700</bug_when>
    <thetext>*** Bug 59685 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>90551</attachid>
            <date>2011-04-21 10:09:49 -0700</date>
            <delta_ts>2011-04-21 10:09:49 -0700</delta_ts>
            <desc>Beautified WSJ script that contains misbehaving code.</desc>
            <filename>wsj.js</filename>
            <type>application/x-javascript</type>
            <size>655750</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">ZG9qby5wcm92aWRlKCJuaWVsc2VuVHJhY2tpbmciKTsKCm5pZWxzZW5UcmFja2luZyA9IHsKICAg
IGluaXQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAvLyAgaWYoZGoudXRpbC5SZWdpb24uZ2V0Vmll
d0J5UmVnaW9uKCkgPT09ICJuYSx1cyIpIHsKICAgICAgICB2YXIgZCA9IG5ldyBJbWFnZSgxLCAx
KTsKICAgICAgICBkLm9uZXJyb3IgPSBkLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAg
ICAgZC5vbmVycm9yID0gZC5vbmxvYWQgPSBudWxsOwogICAgICAgIH07CiAgICAgICAgZC5zcmMg
PSBbIi8vc2VjdXJlLXVzLmltcndvcmxkd2lkZS5jb20vY2dpLWJpbi9tP2NpPXVzLTQwMzc0M2gm
Y2c9MCZjYz0xJnNpPSIsIGVzY2FwZSh3aW5kb3cubG9jYXRpb24uaHJlZiksICImcnA9IiwgZXNj
YXBlKGRvY3VtZW50LnJlZmVycmVyKSwgIiZ0cz1jb21wYWN0JnJuZD0iLCAobmV3IERhdGUoKSku
Z2V0VGltZSgpXS5qb2luKCcnKTsKICAgICAgICAvLyAgICAgICAgfQogICAgfQoKfTsKZG9qby5w
cm92aWRlKCJzd2ZvYmplY3Quc3dmb2JqZWN0XzFfNS5zd2ZvYmplY3QiKTsKLyoqCiAqIFNXRk9i
amVjdCB2MS41OiBGbGFzaCBQbGF5ZXIgZGV0ZWN0aW9uIGFuZCBlbWJlZCAtIGh0dHA6Ly9ibG9n
LmRlY29uY2VwdC5jb20vc3dmb2JqZWN0LwogKgogKiBTV0ZPYmplY3QgaXMgKGMpIDIwMDcgR2Vv
ZmYgU3RlYXJucyBhbmQgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlOgogKiBodHRw
Oi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocAogKgogKi8KaWYg
KHR5cGVvZiBkZWNvbmNlcHQgPT0gInVuZGVmaW5lZCIpIHsKICAgIHZhciBkZWNvbmNlcHQgPSBu
ZXcgT2JqZWN0KCk7Cn0KaWYgKHR5cGVvZiBkZWNvbmNlcHQudXRpbCA9PSAidW5kZWZpbmVkIikg
ewogICAgZGVjb25jZXB0LnV0aWwgPSBuZXcgT2JqZWN0KCk7Cn0KaWYgKHR5cGVvZiBkZWNvbmNl
cHQuU1dGT2JqZWN0VXRpbCA9PSAidW5kZWZpbmVkIikgewogICAgZGVjb25jZXB0LlNXRk9iamVj
dFV0aWwgPSBuZXcgT2JqZWN0KCk7Cn0KZGVjb25jZXB0LlNXRk9iamVjdCA9IGZ1bmN0aW9uIChf
MSwgaWQsIHcsIGgsIF81LCBjLCBfNywgXzgsIF85LCBfYSkgewogICAgaWYgKCFkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCkgewogICAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMuREVURUNUX0tF
WSA9IF9hID8gX2EgOiAiZGV0ZWN0Zmxhc2giOwogICAgdGhpcy5za2lwRGV0ZWN0ID0gZGVjb25j
ZXB0LnV0aWwuZ2V0UmVxdWVzdFBhcmFtZXRlcih0aGlzLkRFVEVDVF9LRVkpOwogICAgdGhpcy5w
YXJhbXMgPSBuZXcgT2JqZWN0KCk7CiAgICB0aGlzLnZhcmlhYmxlcyA9IG5ldyBPYmplY3QoKTsK
ICAgIHRoaXMuYXR0cmlidXRlcyA9IG5ldyBBcnJheSgpOwogICAgaWYgKF8xKSB7CiAgICAgICAg
dGhpcy5zZXRBdHRyaWJ1dGUoInN3ZiIsIF8xKTsKICAgIH0KICAgIGlmIChpZCkgewogICAgICAg
IHRoaXMuc2V0QXR0cmlidXRlKCJpZCIsIGlkKTsKICAgIH0KICAgIGlmICh3KSB7CiAgICAgICAg
dGhpcy5zZXRBdHRyaWJ1dGUoIndpZHRoIiwgdyk7CiAgICB9CiAgICBpZiAoaCkgewogICAgICAg
IHRoaXMuc2V0QXR0cmlidXRlKCJoZWlnaHQiLCBoKTsKICAgIH0KICAgIGlmIChfNSkgewogICAg
ICAgIHRoaXMuc2V0QXR0cmlidXRlKCJ2ZXJzaW9uIiwgbmV3IGRlY29uY2VwdC5QbGF5ZXJWZXJz
aW9uKF81LnRvU3RyaW5nKCkuc3BsaXQoIi4iKSkpOwogICAgfQogICAgdGhpcy5pbnN0YWxsZWRW
ZXIgPSBkZWNvbmNlcHQuU1dGT2JqZWN0VXRpbC5nZXRQbGF5ZXJWZXJzaW9uKCk7CiAgICBpZiAo
IXdpbmRvdy5vcGVyYSAmJiBkb2N1bWVudC5hbGwgJiYgdGhpcy5pbnN0YWxsZWRWZXIubWFqb3Ig
PiA3KSB7CiAgICAgICAgZGVjb25jZXB0LlNXRk9iamVjdC5kb1ByZXBVbmxvYWQgPSB0cnVlOwog
ICAgfQogICAgaWYgKGMpIHsKICAgICAgICB0aGlzLmFkZFBhcmFtKCJiZ2NvbG9yIiwgYyk7CiAg
ICB9CiAgICB2YXIgcSA9IF83ID8gXzcgOiAiaGlnaCI7CiAgICB0aGlzLmFkZFBhcmFtKCJxdWFs
aXR5IiwgcSk7CiAgICB0aGlzLnNldEF0dHJpYnV0ZSgidXNlRXhwcmVzc0luc3RhbGwiLCBmYWxz
ZSk7CiAgICB0aGlzLnNldEF0dHJpYnV0ZSgiZG9FeHByZXNzSW5zdGFsbCIsIGZhbHNlKTsKICAg
IHZhciBfYyA9IChfOCkgPyBfOCA6IHdpbmRvdy5sb2NhdGlvbjsKICAgIHRoaXMuc2V0QXR0cmli
dXRlKCJ4aVJlZGlyZWN0VXJsIiwgX2MpOwogICAgdGhpcy5zZXRBdHRyaWJ1dGUoInJlZGlyZWN0
VXJsIiwgIiIpOwogICAgaWYgKF85KSB7CiAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoInJlZGly
ZWN0VXJsIiwgXzkpOwogICAgfQp9OwpkZWNvbmNlcHQuU1dGT2JqZWN0LnByb3RvdHlwZSA9IHsK
ICAgIHVzZUV4cHJlc3NJbnN0YWxsOiBmdW5jdGlvbiAoX2QpIHsKICAgICAgICB0aGlzLnhpU1dG
UGF0aCA9ICFfZCA/ICJleHByZXNzaW5zdGFsbC5zd2YiIDogX2Q7CiAgICAgICAgdGhpcy5zZXRB
dHRyaWJ1dGUoInVzZUV4cHJlc3NJbnN0YWxsIiwgdHJ1ZSk7CiAgICB9LAogICAgc2V0QXR0cmli
dXRlOiBmdW5jdGlvbiAoX2UsIF9mKSB7CiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW19lXSA9IF9m
OwogICAgfSwKICAgIGdldEF0dHJpYnV0ZTogZnVuY3Rpb24gKF8xMCkgewogICAgICAgIHJldHVy
biB0aGlzLmF0dHJpYnV0ZXNbXzEwXTsKICAgIH0sCiAgICBhZGRQYXJhbTogZnVuY3Rpb24gKF8x
MSwgXzEyKSB7CiAgICAgICAgdGhpcy5wYXJhbXNbXzExXSA9IF8xMjsKICAgIH0sCiAgICBnZXRQ
YXJhbXM6IGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4gdGhpcy5wYXJhbXM7CiAgICB9LAog
ICAgYWRkVmFyaWFibGU6IGZ1bmN0aW9uIChfMTMsIF8xNCkgewogICAgICAgIHRoaXMudmFyaWFi
bGVzW18xM10gPSBfMTQ7CiAgICB9LAogICAgZ2V0VmFyaWFibGU6IGZ1bmN0aW9uIChfMTUpIHsK
ICAgICAgICByZXR1cm4gdGhpcy52YXJpYWJsZXNbXzE1XTsKICAgIH0sCiAgICBnZXRWYXJpYWJs
ZXM6IGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4gdGhpcy52YXJpYWJsZXM7CiAgICB9LAog
ICAgZ2V0VmFyaWFibGVQYWlyczogZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBfMTYgPSBuZXcg
QXJyYXkoKTsKICAgICAgICB2YXIga2V5OwogICAgICAgIHZhciBfMTggPSB0aGlzLmdldFZhcmlh
YmxlcygpOwogICAgICAgIGZvciAoa2V5IGluIF8xOCkgewogICAgICAgICAgICBfMTZbXzE2Lmxl
bmd0aF0gPSBrZXkgKyAiPSIgKyBfMThba2V5XTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIF8x
NjsKICAgIH0sCiAgICBnZXRTV0ZIVE1MOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIF8xOSA9
ICIiOwogICAgICAgIGlmIChuYXZpZ2F0b3IucGx1Z2lucyAmJiBuYXZpZ2F0b3IubWltZVR5cGVz
ICYmIG5hdmlnYXRvci5taW1lVHlwZXMubGVuZ3RoKSB7CiAgICAgICAgICAgIGlmICh0aGlzLmdl
dEF0dHJpYnV0ZSgiZG9FeHByZXNzSW5zdGFsbCIpKSB7CiAgICAgICAgICAgICAgICB0aGlzLmFk
ZFZhcmlhYmxlKCJNTXBsYXllclR5cGUiLCAiUGx1Z0luIik7CiAgICAgICAgICAgICAgICB0aGlz
LnNldEF0dHJpYnV0ZSgic3dmIiwgdGhpcy54aVNXRlBhdGgpOwogICAgICAgICAgICB9CiAgICAg
ICAgICAgIF8xOSA9ICI8ZW1iZWQgdHlwZT1cImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNo
XCIgc3JjPVwiIiArIHRoaXMuZ2V0QXR0cmlidXRlKCJzd2YiKSArICJcIiB3aWR0aD1cIiIgKyB0
aGlzLmdldEF0dHJpYnV0ZSgid2lkdGgiKSArICJcIiBoZWlnaHQ9XCIiICsgdGhpcy5nZXRBdHRy
aWJ1dGUoImhlaWdodCIpICsgIlwiIHN0eWxlPVwiIiArIHRoaXMuZ2V0QXR0cmlidXRlKCJzdHls
ZSIpICsgIlwiIjsKICAgICAgICAgICAgXzE5ICs9ICIgaWQ9XCIiICsgdGhpcy5nZXRBdHRyaWJ1
dGUoImlkIikgKyAiXCIgbmFtZT1cIiIgKyB0aGlzLmdldEF0dHJpYnV0ZSgiaWQiKSArICJcIiAi
OwogICAgICAgICAgICB2YXIgXzFhID0gdGhpcy5nZXRQYXJhbXMoKTsKICAgICAgICAgICAgZm9y
ICh2YXIga2V5IGluIF8xYSkgewogICAgICAgICAgICAgICAgXzE5ICs9IFtrZXldICsgIj1cIiIg
KyBfMWFba2V5XSArICJcIiAiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBfMWMgPSB0
aGlzLmdldFZhcmlhYmxlUGFpcnMoKS5qb2luKCImIik7CiAgICAgICAgICAgIGlmIChfMWMubGVu
Z3RoID4gMCkgewogICAgICAgICAgICAgICAgXzE5ICs9ICJmbGFzaHZhcnM9XCIiICsgXzFjICsg
IlwiIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBfMTkgKz0gIi8+IjsKICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICBpZiAodGhpcy5nZXRBdHRyaWJ1dGUoImRvRXhwcmVzc0luc3RhbGwi
KSkgewogICAgICAgICAgICAgICAgdGhpcy5hZGRWYXJpYWJsZSgiTU1wbGF5ZXJUeXBlIiwgIkFj
dGl2ZVgiKTsKICAgICAgICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCJzd2YiLCB0aGlzLnhp
U1dGUGF0aCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgXzE5ID0gIjxvYmplY3QgaWQ9XCIi
ICsgdGhpcy5nZXRBdHRyaWJ1dGUoImlkIikgKyAiXCIgY2xhc3NpZD1cImNsc2lkOkQyN0NEQjZF
LUFFNkQtMTFjZi05NkI4LTQ0NDU1MzU0MDAwMFwiIHdpZHRoPVwiIiArIHRoaXMuZ2V0QXR0cmli
dXRlKCJ3aWR0aCIpICsgIlwiIGhlaWdodD1cIiIgKyB0aGlzLmdldEF0dHJpYnV0ZSgiaGVpZ2h0
IikgKyAiXCIgc3R5bGU9XCIiICsgdGhpcy5nZXRBdHRyaWJ1dGUoInN0eWxlIikgKyAiXCI+IjsK
ICAgICAgICAgICAgXzE5ICs9ICI8cGFyYW0gbmFtZT1cIm1vdmllXCIgdmFsdWU9XCIiICsgdGhp
cy5nZXRBdHRyaWJ1dGUoInN3ZiIpICsgIlwiIC8+IjsKICAgICAgICAgICAgdmFyIF8xZCA9IHRo
aXMuZ2V0UGFyYW1zKCk7CiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBfMWQpIHsKICAgICAg
ICAgICAgICAgIF8xOSArPSAiPHBhcmFtIG5hbWU9XCIiICsga2V5ICsgIlwiIHZhbHVlPVwiIiAr
IF8xZFtrZXldICsgIlwiIC8+IjsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgXzFmID0g
dGhpcy5nZXRWYXJpYWJsZVBhaXJzKCkuam9pbigiJiIpOwogICAgICAgICAgICBpZiAoXzFmLmxl
bmd0aCA+IDApIHsKICAgICAgICAgICAgICAgIF8xOSArPSAiPHBhcmFtIG5hbWU9XCJmbGFzaHZh
cnNcIiB2YWx1ZT1cIiIgKyBfMWYgKyAiXCIgLz4iOwogICAgICAgICAgICB9CiAgICAgICAgICAg
IF8xOSArPSAiPC9vYmplY3Q+IjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIF8xOTsKICAgIH0s
CiAgICB3cml0ZTogZnVuY3Rpb24gKF8yMCkgewogICAgICAgIGlmICh0aGlzLmdldEF0dHJpYnV0
ZSgidXNlRXhwcmVzc0luc3RhbGwiKSkgewogICAgICAgICAgICB2YXIgXzIxID0gbmV3IGRlY29u
Y2VwdC5QbGF5ZXJWZXJzaW9uKFs2LCAwLCA2NV0pOwogICAgICAgICAgICBpZiAodGhpcy5pbnN0
YWxsZWRWZXIudmVyc2lvbklzVmFsaWQoXzIxKSAmJiAhdGhpcy5pbnN0YWxsZWRWZXIudmVyc2lv
bklzVmFsaWQodGhpcy5nZXRBdHRyaWJ1dGUoInZlcnNpb24iKSkpIHsKICAgICAgICAgICAgICAg
IHRoaXMuc2V0QXR0cmlidXRlKCJkb0V4cHJlc3NJbnN0YWxsIiwgdHJ1ZSk7CiAgICAgICAgICAg
ICAgICB0aGlzLmFkZFZhcmlhYmxlKCJNTXJlZGlyZWN0VVJMIiwgZXNjYXBlKHRoaXMuZ2V0QXR0
cmlidXRlKCJ4aVJlZGlyZWN0VXJsIikpKTsKICAgICAgICAgICAgICAgIGRvY3VtZW50LnRpdGxl
ID0gZG9jdW1lbnQudGl0bGUuc2xpY2UoMCwgNDcpICsgIiAtIEZsYXNoIFBsYXllciBJbnN0YWxs
YXRpb24iOwogICAgICAgICAgICAgICAgdGhpcy5hZGRWYXJpYWJsZSgiTU1kb2N0aXRsZSIsIGRv
Y3VtZW50LnRpdGxlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5z
a2lwRGV0ZWN0IHx8IHRoaXMuZ2V0QXR0cmlidXRlKCJkb0V4cHJlc3NJbnN0YWxsIikgfHwgdGhp
cy5pbnN0YWxsZWRWZXIudmVyc2lvbklzVmFsaWQodGhpcy5nZXRBdHRyaWJ1dGUoInZlcnNpb24i
KSkpIHsKICAgICAgICAgICAgdmFyIG4gPSAodHlwZW9mIF8yMCA9PSAic3RyaW5nIikgPyBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZChfMjApIDogXzIwOwogICAgICAgICAgICBuLmlubmVySFRNTCA9
IHRoaXMuZ2V0U1dGSFRNTCgpOwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICBpZiAodGhpcy5nZXRBdHRyaWJ1dGUoInJlZGlyZWN0VXJsIikgIT0g
IiIpIHsKICAgICAgICAgICAgICAgIGRvY3VtZW50LmxvY2F0aW9uLnJlcGxhY2UodGhpcy5nZXRB
dHRyaWJ1dGUoInJlZGlyZWN0VXJsIikpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAg
IHJldHVybiBmYWxzZTsKICAgIH0KfTsKZGVjb25jZXB0LlNXRk9iamVjdFV0aWwuZ2V0UGxheWVy
VmVyc2lvbiA9IGZ1bmN0aW9uICgpIHsKICAgIHZhciBfMjMgPSBuZXcgZGVjb25jZXB0LlBsYXll
clZlcnNpb24oWzAsIDAsIDBdKTsKICAgIGlmIChuYXZpZ2F0b3IucGx1Z2lucyAmJiBuYXZpZ2F0
b3IubWltZVR5cGVzLmxlbmd0aCkgewogICAgICAgIHZhciB4ID0gbmF2aWdhdG9yLnBsdWdpbnNb
IlNob2Nrd2F2ZSBGbGFzaCJdOwogICAgICAgIGlmICh4ICYmIHguZGVzY3JpcHRpb24pIHsKICAg
ICAgICAgICAgXzIzID0gbmV3IGRlY29uY2VwdC5QbGF5ZXJWZXJzaW9uKHguZGVzY3JpcHRpb24u
cmVwbGFjZSgvKFthLXpBLVpdfFxzKSsvLCAiIikucmVwbGFjZSgvKFxzK3J8XHMrYlswLTldKykv
LCAiLiIpLnNwbGl0KCIuIikpOwogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKG5h
dmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJXaW5kb3dz
IENFIikgPj0gMCkgewogICAgICAgICAgICB2YXIgYXhvID0gMTsKICAgICAgICAgICAgdmFyIF8y
NiA9IDM7CiAgICAgICAgICAgIHdoaWxlIChheG8pIHsKICAgICAgICAgICAgICAgIHRyeSB7CiAg
ICAgICAgICAgICAgICAgICAgXzI2Kys7CiAgICAgICAgICAgICAgICAgICAgYXhvID0gbmV3IEFj
dGl2ZVhPYmplY3QoIlNob2Nrd2F2ZUZsYXNoLlNob2Nrd2F2ZUZsYXNoLiIgKyBfMjYpOwogICAg
ICAgICAgICAgICAgICAgIF8yMyA9IG5ldyBkZWNvbmNlcHQuUGxheWVyVmVyc2lvbihbXzI2LCAw
LCAwXSk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICAgICAg
YXhvID0gbnVsbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICB2YXIgYXhvID0gbmV3IEFjdGl2
ZVhPYmplY3QoIlNob2Nrd2F2ZUZsYXNoLlNob2Nrd2F2ZUZsYXNoLjciKTsKICAgICAgICAgICAg
fSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICB2
YXIgYXhvID0gbmV3IEFjdGl2ZVhPYmplY3QoIlNob2Nrd2F2ZUZsYXNoLlNob2Nrd2F2ZUZsYXNo
LjYiKTsKICAgICAgICAgICAgICAgICAgICBfMjMgPSBuZXcgZGVjb25jZXB0LlBsYXllclZlcnNp
b24oWzYsIDAsIDIxXSk7CiAgICAgICAgICAgICAgICAgICAgYXhvLkFsbG93U2NyaXB0QWNjZXNz
ID0gImFsd2F5cyI7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAg
ICAgICAgaWYgKF8yMy5tYWpvciA9PSA2KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBfMjM7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICBheG8gPSBuZXcgQWN0aXZlWE9iamVjdCgi
U2hvY2t3YXZlRmxhc2guU2hvY2t3YXZlRmxhc2giKTsKICAgICAgICAgICAgICAgIH0gY2F0Y2gg
KGUpIHt9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGF4byAhPSBudWxsKSB7CiAgICAg
ICAgICAgICAgICBfMjMgPSBuZXcgZGVjb25jZXB0LlBsYXllclZlcnNpb24oYXhvLkdldFZhcmlh
YmxlKCIkdmVyc2lvbiIpLnNwbGl0KCIgIilbMV0uc3BsaXQoIiwiKSk7CiAgICAgICAgICAgIH0K
ICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gXzIzOwp9OwpkZWNvbmNlcHQuUGxheWVyVmVyc2lv
biA9IGZ1bmN0aW9uIChfMjkpIHsKICAgIHRoaXMubWFqb3IgPSBfMjlbMF0gIT0gbnVsbCA/IHBh
cnNlSW50KF8yOVswXSkgOiAwOwogICAgdGhpcy5taW5vciA9IF8yOVsxXSAhPSBudWxsID8gcGFy
c2VJbnQoXzI5WzFdKSA6IDA7CiAgICB0aGlzLnJldiA9IF8yOVsyXSAhPSBudWxsID8gcGFyc2VJ
bnQoXzI5WzJdKSA6IDA7Cn07CmRlY29uY2VwdC5QbGF5ZXJWZXJzaW9uLnByb3RvdHlwZS52ZXJz
aW9uSXNWYWxpZCA9IGZ1bmN0aW9uIChmdikgewogICAgaWYgKHRoaXMubWFqb3IgPCBmdi5tYWpv
cikgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmICh0aGlzLm1ham9yID4gZnYu
bWFqb3IpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmICh0aGlzLm1pbm9yIDwg
ZnYubWlub3IpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZiAodGhpcy5taW5v
ciA+IGZ2Lm1pbm9yKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAodGhpcy5y
ZXYgPCBmdi5yZXYpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1
ZTsKfTsKZGVjb25jZXB0LnV0aWwgPSB7CiAgICBnZXRSZXF1ZXN0UGFyYW1ldGVyOiBmdW5jdGlv
biAoXzJiKSB7CiAgICAgICAgdmFyIHEgPSBkb2N1bWVudC5sb2NhdGlvbi5zZWFyY2ggfHwgZG9j
dW1lbnQubG9jYXRpb24uaGFzaDsKICAgICAgICBpZiAoXzJiID09IG51bGwpIHsKICAgICAgICAg
ICAgcmV0dXJuIHE7CiAgICAgICAgfQogICAgICAgIGlmIChxKSB7CiAgICAgICAgICAgIHZhciBf
MmQgPSBxLnN1YnN0cmluZygxKS5zcGxpdCgiJiIpOwogICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IF8yZC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgaWYgKF8yZFtpXS5zdWJz
dHJpbmcoMCwgXzJkW2ldLmluZGV4T2YoIj0iKSkgPT0gXzJiKSB7CiAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIF8yZFtpXS5zdWJzdHJpbmcoKF8yZFtpXS5pbmRleE9mKCI9IikgKyAxKSk7CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICIi
OwogICAgfQp9OwpkZWNvbmNlcHQuU1dGT2JqZWN0VXRpbC5jbGVhbnVwU1dGcyA9IGZ1bmN0aW9u
ICgpIHsKICAgIHZhciBfMmYgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiT0JKRUNU
Iik7CiAgICBmb3IgKHZhciBpID0gXzJmLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAg
ICAgXzJmW2ldLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgICAgZm9yICh2YXIgeCBpbiBf
MmZbaV0pIHsKICAgICAgICAgICAgaWYgKHR5cGVvZiBfMmZbaV1beF0gPT0gImZ1bmN0aW9uIikg
ewogICAgICAgICAgICAgICAgXzJmW2ldW3hdID0gZnVuY3Rpb24gKCkge307CiAgICAgICAgICAg
IH0KICAgICAgICB9CiAgICB9Cn07CmlmIChkZWNvbmNlcHQuU1dGT2JqZWN0LmRvUHJlcFVubG9h
ZCkgewogICAgaWYgKCFkZWNvbmNlcHQudW5sb2FkU2V0KSB7CiAgICAgICAgZGVjb25jZXB0LlNX
Rk9iamVjdFV0aWwucHJlcFVubG9hZCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgX19mbGFz
aF91bmxvYWRIYW5kbGVyID0gZnVuY3Rpb24gKCkge307CiAgICAgICAgICAgIF9fZmxhc2hfc2F2
ZWRVbmxvYWRIYW5kbGVyID0gZnVuY3Rpb24gKCkge307CiAgICAgICAgICAgIHdpbmRvdy5hdHRh
Y2hFdmVudCgib251bmxvYWQiLCBkZWNvbmNlcHQuU1dGT2JqZWN0VXRpbC5jbGVhbnVwU1dGcyk7
CiAgICAgICAgfTsKICAgICAgICB3aW5kb3cuYXR0YWNoRXZlbnQoIm9uYmVmb3JldW5sb2FkIiwg
ZGVjb25jZXB0LlNXRk9iamVjdFV0aWwucHJlcFVubG9hZCk7CiAgICAgICAgZGVjb25jZXB0LnVu
bG9hZFNldCA9IHRydWU7CiAgICB9Cn0KaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCAmJiBk
b2N1bWVudC5hbGwpIHsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkID0gZnVuY3Rpb24gKGlk
KSB7CiAgICAgICAgcmV0dXJuIGRvY3VtZW50LmFsbFtpZF07CiAgICB9Owp9CnZhciBnZXRRdWVy
eVBhcmFtVmFsdWUgPSBkZWNvbmNlcHQudXRpbC5nZXRSZXF1ZXN0UGFyYW1ldGVyOwp2YXIgRmxh
c2hPYmplY3QgPSBkZWNvbmNlcHQuU1dGT2JqZWN0Owp2YXIgU1dGT2JqZWN0ID0gZGVjb25jZXB0
LlNXRk9iamVjdDsKLyogIFNXRk9iamVjdCB2Mi4yIDxodHRwOi8vY29kZS5nb29nbGUuY29tL3Av
c3dmb2JqZWN0Lz4KICBpcyByZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgPGh0dHA6Ly93
d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwPgoqLwpkb2pvLnByb3Zp
ZGUoInN3Zm9iamVjdC5zd2ZvYmplY3RfMl8yLnN3Zm9iamVjdCIpOwoKc3dmb2JqZWN0ID0gZnVu
Y3Rpb24gKCkgewoKICAgIHZhciBVTkRFRiA9ICJ1bmRlZmluZWQiLAogICAgICAgIE9CSkVDVCA9
ICJvYmplY3QiLAogICAgICAgIFNIT0NLV0FWRV9GTEFTSCA9ICJTaG9ja3dhdmUgRmxhc2giLAog
ICAgICAgIFNIT0NLV0FWRV9GTEFTSF9BWCA9ICJTaG9ja3dhdmVGbGFzaC5TaG9ja3dhdmVGbGFz
aCIsCiAgICAgICAgRkxBU0hfTUlNRV9UWVBFID0gImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZs
YXNoIiwKICAgICAgICBFWFBSRVNTX0lOU1RBTExfSUQgPSAiU1dGT2JqZWN0RXhwckluc3QiLAog
ICAgICAgIE9OX1JFQURZX1NUQVRFX0NIQU5HRSA9ICJvbnJlYWR5c3RhdGVjaGFuZ2UiLAoKICAg
ICAgICB3aW4gPSB3aW5kb3csCiAgICAgICAgZG9jID0gZG9jdW1lbnQsCiAgICAgICAgbmF2ID0g
bmF2aWdhdG9yLAoKICAgICAgICBwbHVnaW4gPSBmYWxzZSwKICAgICAgICBkb21Mb2FkRm5BcnIg
PSBbbWFpbl0sCiAgICAgICAgcmVnT2JqQXJyID0gW10sCiAgICAgICAgb2JqSWRBcnIgPSBbXSwK
ICAgICAgICBsaXN0ZW5lcnNBcnIgPSBbXSwKICAgICAgICBzdG9yZWRBbHRDb250ZW50LCBzdG9y
ZWRBbHRDb250ZW50SWQsIHN0b3JlZENhbGxiYWNrRm4sIHN0b3JlZENhbGxiYWNrT2JqLCBpc0lu
aXREZWxheWVkID0gdHJ1ZSwKICAgICAgICBpc0RvbUxvYWRlZCA9IGlzSW5pdERlbGF5ZWQsCiAg
ICAgICAgaXNFeHByZXNzSW5zdGFsbEFjdGl2ZSA9IGZhbHNlLAogICAgICAgIGR5bmFtaWNTdHls
ZXNoZWV0LCBkeW5hbWljU3R5bGVzaGVldE1lZGlhLCBhdXRvSGlkZVNob3cgPSB0cnVlLAoKLyog
Q2VudHJhbGl6ZWQgZnVuY3Rpb24gZm9yIGJyb3dzZXIgZmVhdHVyZSBkZXRlY3Rpb24KCQktIFVz
ZXIgYWdlbnQgc3RyaW5nIGRldGVjdGlvbiBpcyBvbmx5IHVzZWQgd2hlbiBubyBnb29kIGFsdGVy
bmF0aXZlIGlzIHBvc3NpYmxlCgkJLSBJcyBleGVjdXRlZCBkaXJlY3RseSBmb3Igb3B0aW1hbCBw
ZXJmb3JtYW5jZQoJKi8KICAgICAgICB1YSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFy
IHczY2RvbSA9IHR5cGVvZiBkb2MuZ2V0RWxlbWVudEJ5SWQgIT0gVU5ERUYgJiYgdHlwZW9mIGRv
Yy5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPSBVTkRFRiAmJiB0eXBlb2YgZG9jLmNyZWF0ZUVsZW1l
bnQgIT0gVU5ERUYsCiAgICAgICAgICAgICAgICB1ID0gbmF2LnVzZXJBZ2VudC50b0xvd2VyQ2Fz
ZSgpLAogICAgICAgICAgICAgICAgcCA9IG5hdi5wbGF0Zm9ybS50b0xvd2VyQ2FzZSgpLAogICAg
ICAgICAgICAgICAgd2luZG93cyA9IHAgPyAvd2luLy50ZXN0KHApIDogL3dpbi8udGVzdCh1KSwK
ICAgICAgICAgICAgICAgIG1hYyA9IHAgPyAvbWFjLy50ZXN0KHApIDogL21hYy8udGVzdCh1KSwK
ICAgICAgICAgICAgICAgIHdlYmtpdCA9IC93ZWJraXQvLnRlc3QodSkgPyBwYXJzZUZsb2F0KHUu
cmVwbGFjZSgvXi4qd2Via2l0XC8oXGQrKFwuXGQrKT8pLiokLywgIiQxIikpIDogZmFsc2UsCiAg
ICAgICAgICAgICAgICAvLyByZXR1cm5zIGVpdGhlciB0aGUgd2Via2l0IHZlcnNpb24gb3IgZmFs
c2UgaWYgbm90IHdlYmtpdAogICAgICAgICAgICAgICAgaWUgPSAhKyJcdjEiLAogICAgICAgICAg
ICAgICAgLy8gZmVhdHVyZSBkZXRlY3Rpb24gYmFzZWQgb24gQW5kcmVhIEdpYW1tYXJjaGkncyBz
b2x1dGlvbjogaHR0cDovL3dlYnJlZmxlY3Rpb24uYmxvZ3Nwb3QuY29tLzIwMDkvMDEvMzItYnl0
ZXMtdG8ta25vdy1pZi15b3VyLWJyb3dzZXItaXMtaWUuaHRtbAogICAgICAgICAgICAgICAgcGxh
eWVyVmVyc2lvbiA9IFswLCAwLCAwXSwKICAgICAgICAgICAgICAgIGQgPSBudWxsOwogICAgICAg
ICAgICBpZiAodHlwZW9mIG5hdi5wbHVnaW5zICE9IFVOREVGICYmIHR5cGVvZiBuYXYucGx1Z2lu
c1tTSE9DS1dBVkVfRkxBU0hdID09IE9CSkVDVCkgewogICAgICAgICAgICAgICAgZCA9IG5hdi5w
bHVnaW5zW1NIT0NLV0FWRV9GTEFTSF0uZGVzY3JpcHRpb247CiAgICAgICAgICAgICAgICBpZiAo
ZCAmJiAhKHR5cGVvZiBuYXYubWltZVR5cGVzICE9IFVOREVGICYmIG5hdi5taW1lVHlwZXNbRkxB
U0hfTUlNRV9UWVBFXSAmJiAhbmF2Lm1pbWVUeXBlc1tGTEFTSF9NSU1FX1RZUEVdLmVuYWJsZWRQ
bHVnaW4pKSB7IC8vIG5hdmlnYXRvci5taW1lVHlwZXNbImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZl
LWZsYXNoIl0uZW5hYmxlZFBsdWdpbiBpbmRpY2F0ZXMgd2hldGhlciBwbHVnLWlucyBhcmUgZW5h
YmxlZCBvciBkaXNhYmxlZCBpbiBTYWZhcmkgMysKICAgICAgICAgICAgICAgICAgICBwbHVnaW4g
PSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGllID0gZmFsc2U7IC8vIGNhc2NhZGVkIGZlYXR1
cmUgZGV0ZWN0aW9uIGZvciBJbnRlcm5ldCBFeHBsb3JlcgogICAgICAgICAgICAgICAgICAgIGQg
PSBkLnJlcGxhY2UoL14uKlxzKyhcUytccytcUyskKS8sICIkMSIpOwogICAgICAgICAgICAgICAg
ICAgIHBsYXllclZlcnNpb25bMF0gPSBwYXJzZUludChkLnJlcGxhY2UoL14oLiopXC4uKiQvLCAi
JDEiKSwgMTApOwogICAgICAgICAgICAgICAgICAgIHBsYXllclZlcnNpb25bMV0gPSBwYXJzZUlu
dChkLnJlcGxhY2UoL14uKlwuKC4qKVxzLiokLywgIiQxIiksIDEwKTsKICAgICAgICAgICAgICAg
ICAgICBwbGF5ZXJWZXJzaW9uWzJdID0gL1thLXpBLVpdLy50ZXN0KGQpID8gcGFyc2VJbnQoZC5y
ZXBsYWNlKC9eLipbYS16QS1aXSsoLiopJC8sICIkMSIpLCAxMCkgOiAwOwogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB3aW4uQWN0aXZlWE9iamVjdCAhPSBV
TkRFRikgewogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICB2YXIgYSA9
IG5ldyBBY3RpdmVYT2JqZWN0KFNIT0NLV0FWRV9GTEFTSF9BWCk7CiAgICAgICAgICAgICAgICAg
ICAgaWYgKGEpIHsgLy8gYSB3aWxsIHJldHVybiBudWxsIHdoZW4gQWN0aXZlWCBpcyBkaXNhYmxl
ZAogICAgICAgICAgICAgICAgICAgICAgICBkID0gYS5HZXRWYXJpYWJsZSgiJHZlcnNpb24iKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGQpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGllID0gdHJ1ZTsgLy8gY2FzY2FkZWQgZmVhdHVyZSBkZXRlY3Rpb24gZm9yIEludGVybmV0
IEV4cGxvcmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gZC5zcGxpdCgiICIpWzFd
LnNwbGl0KCIsIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF5ZXJWZXJzaW9uID0g
W3BhcnNlSW50KGRbMF0sIDEwKSwgcGFyc2VJbnQoZFsxXSwgMTApLCBwYXJzZUludChkWzJdLCAx
MCldOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgfSBjYXRjaCAoZSkge30KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1
cm4gewogICAgICAgICAgICAgICAgdzM6IHczY2RvbSwKICAgICAgICAgICAgICAgIHB2OiBwbGF5
ZXJWZXJzaW9uLAogICAgICAgICAgICAgICAgd2s6IHdlYmtpdCwKICAgICAgICAgICAgICAgIGll
OiBpZSwKICAgICAgICAgICAgICAgIHdpbjogd2luZG93cywKICAgICAgICAgICAgICAgIG1hYzog
bWFjCiAgICAgICAgICAgIH07CiAgICAgICAgfSgpLAoKLyogQ3Jvc3MtYnJvd3NlciBvbkRvbUxv
YWQKCQktIFdpbGwgZmlyZSBhbiBldmVudCBhcyBzb29uIGFzIHRoZSBET00gb2YgYSB3ZWIgcGFn
ZSBpcyBsb2FkZWQKCQktIEludGVybmV0IEV4cGxvcmVyIHdvcmthcm91bmQgYmFzZWQgb24gRGll
Z28gUGVyaW5pJ3Mgc29sdXRpb246IGh0dHA6Ly9qYXZhc2NyaXB0Lm53Ym94LmNvbS9JRUNvbnRl
bnRMb2FkZWQvCgkJLSBSZWd1bGFyIG9ubG9hZCBzZXJ2ZXMgYXMgZmFsbGJhY2sKCSovCiAgICAg
ICAgb25Eb21Mb2FkID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICBpZiAoIXVhLnczKSB7CiAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCh0eXBl
b2YgZG9jLnJlYWR5U3RhdGUgIT0gVU5ERUYgJiYgZG9jLnJlYWR5U3RhdGUgPT0gImNvbXBsZXRl
IikgfHwgKHR5cGVvZiBkb2MucmVhZHlTdGF0ZSA9PSBVTkRFRiAmJiAoZG9jLmdldEVsZW1lbnRz
QnlUYWdOYW1lKCJib2R5IilbMF0gfHwgZG9jLmJvZHkpKSkgeyAvLyBmdW5jdGlvbiBpcyBmaXJl
ZCBhZnRlciBvbmxvYWQsIGUuZy4gd2hlbiBzY3JpcHQgaXMgaW5zZXJ0ZWQgZHluYW1pY2FsbHkg
CiAgICAgICAgICAgICAgICBjYWxsRG9tTG9hZEZ1bmN0aW9ucygpOwogICAgICAgICAgICB9CiAg
ICAgICAgICAgIGlmICghaXNEb21Mb2FkZWQpIHsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yg
ZG9jLmFkZEV2ZW50TGlzdGVuZXIgIT0gVU5ERUYpIHsKICAgICAgICAgICAgICAgICAgICBkb2Mu
YWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIGNhbGxEb21Mb2FkRnVuY3Rpb25z
LCBmYWxzZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAodWEuaWUgJiYg
dWEud2luKSB7CiAgICAgICAgICAgICAgICAgICAgZG9jLmF0dGFjaEV2ZW50KE9OX1JFQURZX1NU
QVRFX0NIQU5HRSwgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG9j
LnJlYWR5U3RhdGUgPT0gImNvbXBsZXRlIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZG9jLmRldGFjaEV2ZW50KE9OX1JFQURZX1NUQVRFX0NIQU5HRSwgYXJndW1lbnRzLmNhbGxlZSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsRG9tTG9hZEZ1bmN0aW9ucygpOwogICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAg
ICAgICAgICAgaWYgKHdpbiA9PSB0b3ApIHsgLy8gaWYgbm90IGluc2lkZSBhbiBpZnJhbWUKICAg
ICAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChpc0RvbUxvYWRlZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jLmRvY3Vt
ZW50RWxlbWVudC5kb1Njcm9sbCgibGVmdCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQo
YXJndW1lbnRzLmNhbGxlZSwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2FsbERvbUxvYWRGdW5jdGlvbnMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSko
KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICBpZiAodWEud2spIHsKICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gKCkgewogICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoaXNEb21Mb2FkZWQpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIS9sb2FkZWR8Y29tcGxldGUvLnRlc3QoZG9jLnJlYWR5U3RhdGUpKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGFyZ3VtZW50cy5jYWxsZWUsIDAp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxEb21Mb2FkRnVuY3Rpb25zKCk7CiAg
ICAgICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
IGFkZExvYWRFdmVudChjYWxsRG9tTG9hZEZ1bmN0aW9ucyk7CiAgICAgICAgICAgIH0KICAgICAg
ICB9KCk7CgogICAgZnVuY3Rpb24gY2FsbERvbUxvYWRGdW5jdGlvbnMoKSB7CiAgICAgICAgaWYg
KGlzRG9tTG9hZGVkKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdHJ5
IHsgLy8gdGVzdCBpZiB3ZSBjYW4gcmVhbGx5IGFkZC9yZW1vdmUgZWxlbWVudHMgdG8vZnJvbSB0
aGUgRE9NOyB3ZSBkb24ndCB3YW50IHRvIGZpcmUgaXQgdG9vIGVhcmx5CiAgICAgICAgICAgIHZh
ciB0ID0gZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF0uYXBwZW5kQ2hpbGQoY3Jl
YXRlRWxlbWVudCgic3BhbiIpKTsKICAgICAgICAgICAgdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxk
KHQpOwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0K
ICAgICAgICBpc0RvbUxvYWRlZCA9IHRydWU7CiAgICAgICAgdmFyIGRsID0gZG9tTG9hZEZuQXJy
Lmxlbmd0aDsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRsOyBpKyspIHsKICAgICAgICAg
ICAgZG9tTG9hZEZuQXJyW2ldKCk7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGFkZERv
bUxvYWRFdmVudChmbikgewogICAgICAgIGlmIChpc0RvbUxvYWRlZCkgewogICAgICAgICAgICBm
bigpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGRvbUxvYWRGbkFycltkb21Mb2FkRm5B
cnIubGVuZ3RoXSA9IGZuOyAvLyBBcnJheS5wdXNoKCkgaXMgb25seSBhdmFpbGFibGUgaW4gSUU1
LjUrCiAgICAgICAgfQogICAgfQoKLyogQ3Jvc3MtYnJvd3NlciBvbmxvYWQKCQktIEJhc2VkIG9u
IEphbWVzIEVkd2FyZHMnIHNvbHV0aW9uOiBodHRwOi8vYnJvdGhlcmNha2UuY29tL3NpdGUvcmVz
b3VyY2VzL3NjcmlwdHMvb25sb2FkLwoJCS0gV2lsbCBmaXJlIGFuIGV2ZW50IGFzIHNvb24gYXMg
YSB3ZWIgcGFnZSBpbmNsdWRpbmcgYWxsIG9mIGl0cyBhc3NldHMgYXJlIGxvYWRlZCAKCSAqLwoK
ICAgIGZ1bmN0aW9uIGFkZExvYWRFdmVudChmbikgewogICAgICAgIGlmICh0eXBlb2Ygd2luLmFk
ZEV2ZW50TGlzdGVuZXIgIT0gVU5ERUYpIHsKICAgICAgICAgICAgd2luLmFkZEV2ZW50TGlzdGVu
ZXIoImxvYWQiLCBmbiwgZmFsc2UpOwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGRvYy5hZGRF
dmVudExpc3RlbmVyICE9IFVOREVGKSB7CiAgICAgICAgICAgIGRvYy5hZGRFdmVudExpc3RlbmVy
KCJsb2FkIiwgZm4sIGZhbHNlKTsKICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB3aW4uYXR0YWNo
RXZlbnQgIT0gVU5ERUYpIHsKICAgICAgICAgICAgYWRkTGlzdGVuZXIod2luLCAib25sb2FkIiwg
Zm4pOwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHdpbi5vbmxvYWQgPT0gImZ1bmN0aW9uIikg
ewogICAgICAgICAgICB2YXIgZm5PbGQgPSB3aW4ub25sb2FkOwogICAgICAgICAgICB3aW4ub25s
b2FkID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgZm5PbGQoKTsKICAgICAgICAgICAg
ICAgIGZuKCk7CiAgICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgd2lu
Lm9ubG9hZCA9IGZuOwogICAgICAgIH0KICAgIH0KCi8qIE1haW4gZnVuY3Rpb24KCQktIFdpbGwg
cHJlZmVyYWJseSBleGVjdXRlIG9uRG9tTG9hZCwgb3RoZXJ3aXNlIG9ubG9hZCAoYXMgYSBmYWxs
YmFjaykKCSovCgogICAgZnVuY3Rpb24gbWFpbigpIHsKICAgICAgICBpZiAocGx1Z2luKSB7CiAg
ICAgICAgICAgIHRlc3RQbGF5ZXJWZXJzaW9uKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgbWF0Y2hWZXJzaW9ucygpOwogICAgICAgIH0KICAgIH0KCi8qIERldGVjdCB0aGUgRmxhc2gg
UGxheWVyIHZlcnNpb24gZm9yIG5vbi1JbnRlcm5ldCBFeHBsb3JlciBicm93c2VycwoJCS0gRGV0
ZWN0aW5nIHRoZSBwbHVnLWluIHZlcnNpb24gdmlhIHRoZSBvYmplY3QgZWxlbWVudCBpcyBtb3Jl
IHByZWNpc2UgdGhhbiB1c2luZyB0aGUgcGx1Z2lucyBjb2xsZWN0aW9uIGl0ZW0ncyBkZXNjcmlw
dGlvbjoKCQkgIGEuIEJvdGggcmVsZWFzZSBhbmQgYnVpbGQgbnVtYmVycyBjYW4gYmUgZGV0ZWN0
ZWQKCQkgIGIuIEF2b2lkIHdyb25nIGRlc2NyaXB0aW9ucyBieSBjb3JydXB0IGluc3RhbGxlcnMg
cHJvdmlkZWQgYnkgQWRvYmUKCQkgIGMuIEF2b2lkIHdyb25nIGRlc2NyaXB0aW9ucyBieSBtdWx0
aXBsZSBGbGFzaCBQbGF5ZXIgZW50cmllcyBpbiB0aGUgcGx1Z2luIEFycmF5LCBjYXVzZWQgYnkg
aW5jb3JyZWN0IGJyb3dzZXIgaW1wb3J0cwoJCS0gRGlzYWR2YW50YWdlIG9mIHRoaXMgbWV0aG9k
IGlzIHRoYXQgaXQgZGVwZW5kcyBvbiB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoZSBET00sIHdoaWxl
IHRoZSBwbHVnaW5zIGNvbGxlY3Rpb24gaXMgaW1tZWRpYXRlbHkgYXZhaWxhYmxlCgkqLwoKICAg
IGZ1bmN0aW9uIHRlc3RQbGF5ZXJWZXJzaW9uKCkgewogICAgICAgIHZhciBiID0gZG9jLmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07CiAgICAgICAgdmFyIG8gPSBjcmVhdGVFbGVtZW50
KE9CSkVDVCk7CiAgICAgICAgby5zZXRBdHRyaWJ1dGUoInR5cGUiLCBGTEFTSF9NSU1FX1RZUEUp
OwogICAgICAgIHZhciB0ID0gYi5hcHBlbmRDaGlsZChvKTsKICAgICAgICBpZiAodCkgewogICAg
ICAgICAgICB2YXIgY291bnRlciA9IDA7CiAgICAgICAgICAgIChmdW5jdGlvbiAoKSB7CiAgICAg
ICAgICAgICAgICBpZiAodHlwZW9mIHQuR2V0VmFyaWFibGUgIT0gVU5ERUYpIHsKICAgICAgICAg
ICAgICAgICAgICB2YXIgZCA9IHQuR2V0VmFyaWFibGUoIiR2ZXJzaW9uIik7CiAgICAgICAgICAg
ICAgICAgICAgaWYgKGQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZCA9IGQuc3BsaXQoIiAi
KVsxXS5zcGxpdCgiLCIpOwogICAgICAgICAgICAgICAgICAgICAgICB1YS5wdiA9IFtwYXJzZUlu
dChkWzBdLCAxMCksIHBhcnNlSW50KGRbMV0sIDEwKSwgcGFyc2VJbnQoZFsyXSwgMTApXTsKICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvdW50ZXIgPCAx
MCkgewogICAgICAgICAgICAgICAgICAgIGNvdW50ZXIrKzsKICAgICAgICAgICAgICAgICAgICBz
ZXRUaW1lb3V0KGFyZ3VtZW50cy5jYWxsZWUsIDEwKTsKICAgICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBiLnJlbW92ZUNoaWxkKG8pOwog
ICAgICAgICAgICAgICAgdCA9IG51bGw7CiAgICAgICAgICAgICAgICBtYXRjaFZlcnNpb25zKCk7
CiAgICAgICAgICAgIH0pKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbWF0Y2hWZXJz
aW9ucygpOwogICAgICAgIH0KICAgIH0KCi8qIFBlcmZvcm0gRmxhc2ggUGxheWVyIGFuZCBTV0Yg
dmVyc2lvbiBtYXRjaGluZzsgc3RhdGljIHB1Ymxpc2hpbmcgb25seQoJKi8KCiAgICBmdW5jdGlv
biBtYXRjaFZlcnNpb25zKCkgewogICAgICAgIHZhciBybCA9IHJlZ09iakFyci5sZW5ndGg7CiAg
ICAgICAgaWYgKHJsID4gMCkgewogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJsOyBp
KyspIHsgLy8gZm9yIGVhY2ggcmVnaXN0ZXJlZCBvYmplY3QgZWxlbWVudAogICAgICAgICAgICAg
ICAgdmFyIGlkID0gcmVnT2JqQXJyW2ldLmlkOwogICAgICAgICAgICAgICAgdmFyIGNiID0gcmVn
T2JqQXJyW2ldLmNhbGxiYWNrRm47CiAgICAgICAgICAgICAgICB2YXIgY2JPYmogPSB7CiAgICAg
ICAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgaWQ6IGlk
CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgaWYgKHVhLnB2WzBdID4gMCkgewog
ICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSBnZXRFbGVtZW50QnlJZChpZCk7CiAgICAgICAg
ICAgICAgICAgICAgaWYgKG9iaikgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUGxh
eWVyVmVyc2lvbihyZWdPYmpBcnJbaV0uc3dmVmVyc2lvbikgJiYgISh1YS53ayAmJiB1YS53ayA8
IDMxMikpIHsgLy8gRmxhc2ggUGxheWVyIHZlcnNpb24gPj0gcHVibGlzaGVkIFNXRiB2ZXJzaW9u
OiBIb3VzdG9uLCB3ZSBoYXZlIGEgbWF0Y2ghCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZXRWaXNpYmlsaXR5KGlkLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChj
YikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNiT2JqLnN1Y2Nlc3MgPSB0cnVl
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNiT2JqLnJlZiA9IGdldE9iamVjdEJ5
SWQoaWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNiKGNiT2JqKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChyZWdPYmpBcnJbaV0uZXhwcmVzc0luc3RhbGwgJiYgY2FuRXhwcmVzc0luc3RhbGwoKSkgeyAv
LyBzaG93IHRoZSBBZG9iZSBFeHByZXNzIEluc3RhbGwgZGlhbG9nIGlmIHNldCBieSB0aGUgd2Vi
IHBhZ2UgYXV0aG9yIGFuZCBpZiBzdXBwb3J0ZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBhdHQgPSB7fTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dC5kYXRhID0gcmVn
T2JqQXJyW2ldLmV4cHJlc3NJbnN0YWxsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0
LndpZHRoID0gb2JqLmdldEF0dHJpYnV0ZSgid2lkdGgiKSB8fCAiMCI7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhdHQuaGVpZ2h0ID0gb2JqLmdldEF0dHJpYnV0ZSgiaGVpZ2h0IikgfHwg
IjAiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iai5nZXRBdHRyaWJ1dGUoImNs
YXNzIikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHQuc3R5bGVjbGFzcyA9
IG9iai5nZXRBdHRyaWJ1dGUoImNsYXNzIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqLmdldEF0dHJpYnV0ZSgiYWxpZ24i
KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dC5hbGlnbiA9IG9iai5nZXRB
dHRyaWJ1dGUoImFsaWduIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBwYXJzZSBIVE1MIG9iamVjdCBwYXJhbSBlbGVtZW50J3Mg
bmFtZS12YWx1ZSBwYWlycwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhciA9IHt9
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHAgPSBvYmouZ2V0RWxlbWVudHNCeVRh
Z05hbWUoInBhcmFtIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGwgPSBwLmxl
bmd0aDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcGw7
IGorKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwW2pdLmdldEF0dHJp
YnV0ZSgibmFtZSIpLnRvTG93ZXJDYXNlKCkgIT0gIm1vdmllIikgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwYXJbcFtqXS5nZXRBdHRyaWJ1dGUoIm5hbWUiKV0gPSBwW2pd
LmdldEF0dHJpYnV0ZSgidmFsdWUiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaG93RXhwcmVzc0luc3RhbGwoYXR0LCBwYXIsIGlkLCBjYik7CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7IC8vIEZsYXNoIFBsYXllciBhbmQgU1dGIHZlcnNpb24gbWlzbWF0Y2gg
b3IgYW4gb2xkZXIgV2Via2l0IGVuZ2luZSB0aGF0IGlnbm9yZXMgdGhlIEhUTUwgb2JqZWN0IGVs
ZW1lbnQncyBuZXN0ZWQgcGFyYW0gZWxlbWVudHM6IGRpc3BsYXkgYWx0ZXJuYXRpdmUgY29udGVu
dCBpbnN0ZWFkIG9mIFNXRgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUFsdENv
bnRlbnQob2JqKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYikgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNiKGNiT2JqKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8vIGlmIG5vIEZsYXNoIFBsYXllciBpcyBpbnN0YWxs
ZWQgb3IgdGhlIGZwIHZlcnNpb24gY2Fubm90IGJlIGRldGVjdGVkIHdlIGxldCB0aGUgSFRNTCBv
YmplY3QgZWxlbWVudCBkbyBpdHMgam9iIChlaXRoZXIgc2hvdyBhIFNXRiBvciBhbHRlcm5hdGl2
ZSBjb250ZW50KQogICAgICAgICAgICAgICAgICAgIHNldFZpc2liaWxpdHkoaWQsIHRydWUpOwog
ICAgICAgICAgICAgICAgICAgIGlmIChjYikgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIg
byA9IGdldE9iamVjdEJ5SWQoaWQpOyAvLyB0ZXN0IHdoZXRoZXIgdGhlcmUgaXMgYW4gSFRNTCBv
YmplY3QgZWxlbWVudCBvciBub3QKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG8gJiYgdHlw
ZW9mIG8uU2V0VmFyaWFibGUgIT0gVU5ERUYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNiT2JqLnN1Y2Nlc3MgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2JPYmou
cmVmID0gbzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICBjYihjYk9iaik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGdldE9iamVjdEJ5SWQob2Jq
ZWN0SWRTdHIpIHsKICAgICAgICB2YXIgciA9IG51bGw7CiAgICAgICAgdmFyIG8gPSBnZXRFbGVt
ZW50QnlJZChvYmplY3RJZFN0cik7CiAgICAgICAgaWYgKG8gJiYgby5ub2RlTmFtZSA9PSAiT0JK
RUNUIikgewogICAgICAgICAgICBpZiAodHlwZW9mIG8uU2V0VmFyaWFibGUgIT0gVU5ERUYpIHsK
ICAgICAgICAgICAgICAgIHIgPSBvOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgdmFyIG4gPSBvLmdldEVsZW1lbnRzQnlUYWdOYW1lKE9CSkVDVClbMF07CiAgICAgICAgICAg
ICAgICBpZiAobikgewogICAgICAgICAgICAgICAgICAgIHIgPSBuOwogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiByOwogICAgfQoKLyogUmVx
dWlyZW1lbnRzIGZvciBBZG9iZSBFeHByZXNzIEluc3RhbGwKCQktIG9ubHkgb25lIGluc3RhbmNl
IGNhbiBiZSBhY3RpdmUgYXQgYSB0aW1lCgkJLSBmcCA2LjAuNjUgb3IgaGlnaGVyCgkJLSBXaW4v
TWFjIE9TIG9ubHkKCQktIG5vIFdlYmtpdCBlbmdpbmVzIG9sZGVyIHRoYW4gdmVyc2lvbiAzMTIK
CSovCgogICAgZnVuY3Rpb24gY2FuRXhwcmVzc0luc3RhbGwoKSB7CiAgICAgICAgcmV0dXJuICFp
c0V4cHJlc3NJbnN0YWxsQWN0aXZlICYmIGhhc1BsYXllclZlcnNpb24oIjYuMC42NSIpICYmICh1
YS53aW4gfHwgdWEubWFjKSAmJiAhKHVhLndrICYmIHVhLndrIDwgMzEyKTsKICAgIH0KCi8qIFNo
b3cgdGhlIEFkb2JlIEV4cHJlc3MgSW5zdGFsbCBkaWFsb2cKCQktIFJlZmVyZW5jZTogaHR0cDov
L3d3dy5hZG9iZS5jb20vY2Z1c2lvbi9rbm93bGVkZ2ViYXNlL2luZGV4LmNmbT9pZD02YTI1M2I3
NQoJKi8KCiAgICBmdW5jdGlvbiBzaG93RXhwcmVzc0luc3RhbGwoYXR0LCBwYXIsIHJlcGxhY2VF
bGVtSWRTdHIsIGNhbGxiYWNrRm4pIHsKICAgICAgICBpc0V4cHJlc3NJbnN0YWxsQWN0aXZlID0g
dHJ1ZTsKICAgICAgICBzdG9yZWRDYWxsYmFja0ZuID0gY2FsbGJhY2tGbiB8fCBudWxsOwogICAg
ICAgIHN0b3JlZENhbGxiYWNrT2JqID0gewogICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSwKICAg
ICAgICAgICAgaWQ6IHJlcGxhY2VFbGVtSWRTdHIKICAgICAgICB9OwogICAgICAgIHZhciBvYmog
PSBnZXRFbGVtZW50QnlJZChyZXBsYWNlRWxlbUlkU3RyKTsKICAgICAgICBpZiAob2JqKSB7CiAg
ICAgICAgICAgIGlmIChvYmoubm9kZU5hbWUgPT0gIk9CSkVDVCIpIHsgLy8gc3RhdGljIHB1Ymxp
c2hpbmcKICAgICAgICAgICAgICAgIHN0b3JlZEFsdENvbnRlbnQgPSBhYnN0cmFjdEFsdENvbnRl
bnQob2JqKTsKICAgICAgICAgICAgICAgIHN0b3JlZEFsdENvbnRlbnRJZCA9IG51bGw7CiAgICAg
ICAgICAgIH0gZWxzZSB7IC8vIGR5bmFtaWMgcHVibGlzaGluZwogICAgICAgICAgICAgICAgc3Rv
cmVkQWx0Q29udGVudCA9IG9iajsKICAgICAgICAgICAgICAgIHN0b3JlZEFsdENvbnRlbnRJZCA9
IHJlcGxhY2VFbGVtSWRTdHI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYXR0LmlkID0gRVhQ
UkVTU19JTlNUQUxMX0lEOwogICAgICAgICAgICBpZiAodHlwZW9mIGF0dC53aWR0aCA9PSBVTkRF
RiB8fCAoIS8lJC8udGVzdChhdHQud2lkdGgpICYmIHBhcnNlSW50KGF0dC53aWR0aCwgMTApIDwg
MzEwKSkgewogICAgICAgICAgICAgICAgYXR0LndpZHRoID0gIjMxMCI7CiAgICAgICAgICAgIH0K
ICAgICAgICAgICAgaWYgKHR5cGVvZiBhdHQuaGVpZ2h0ID09IFVOREVGIHx8ICghLyUkLy50ZXN0
KGF0dC5oZWlnaHQpICYmIHBhcnNlSW50KGF0dC5oZWlnaHQsIDEwKSA8IDEzNykpIHsKICAgICAg
ICAgICAgICAgIGF0dC5oZWlnaHQgPSAiMTM3IjsKICAgICAgICAgICAgfQogICAgICAgICAgICBk
b2MudGl0bGUgPSBkb2MudGl0bGUuc2xpY2UoMCwgNDcpICsgIiAtIEZsYXNoIFBsYXllciBJbnN0
YWxsYXRpb24iOwogICAgICAgICAgICB2YXIgcHQgPSB1YS5pZSAmJiB1YS53aW4gPyAiQWN0aXZl
WCIgOiAiUGx1Z0luIiwKICAgICAgICAgICAgICAgIGZ2ID0gIk1NcmVkaXJlY3RVUkw9IiArIHdp
bi5sb2NhdGlvbi50b1N0cmluZygpLnJlcGxhY2UoLyYvZywgIiUyNiIpICsgIiZNTXBsYXllclR5
cGU9IiArIHB0ICsgIiZNTWRvY3RpdGxlPSIgKyBkb2MudGl0bGU7CiAgICAgICAgICAgIGlmICh0
eXBlb2YgcGFyLmZsYXNodmFycyAhPSBVTkRFRikgewogICAgICAgICAgICAgICAgcGFyLmZsYXNo
dmFycyArPSAiJiIgKyBmdjsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHBh
ci5mbGFzaHZhcnMgPSBmdjsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBJRSBvbmx5OiB3
aGVuIGEgU1dGIGlzIGxvYWRpbmcgKEFORDogbm90IGF2YWlsYWJsZSBpbiBjYWNoZSkgd2FpdCBm
b3IgdGhlIHJlYWR5U3RhdGUgb2YgdGhlIG9iamVjdCBlbGVtZW50IHRvIGJlY29tZSA0IGJlZm9y
ZSByZW1vdmluZyBpdCwKICAgICAgICAgICAgLy8gYmVjYXVzZSB5b3UgY2Fubm90IHByb3Blcmx5
IGNhbmNlbCBhIGxvYWRpbmcgU1dGIGZpbGUgd2l0aG91dCBicmVha2luZyBicm93c2VyIGxvYWQg
cmVmZXJlbmNlcywgYWxzbyBvYmoub25yZWFkeXN0YXRlY2hhbmdlIGRvZXNuJ3Qgd29yawogICAg
ICAgICAgICBpZiAodWEuaWUgJiYgdWEud2luICYmIG9iai5yZWFkeVN0YXRlICE9IDQpIHsKICAg
ICAgICAgICAgICAgIHZhciBuZXdPYmogPSBjcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICAg
ICAgICAgIHJlcGxhY2VFbGVtSWRTdHIgKz0gIlNXRk9iamVjdE5ldyI7CiAgICAgICAgICAgICAg
ICBuZXdPYmouc2V0QXR0cmlidXRlKCJpZCIsIHJlcGxhY2VFbGVtSWRTdHIpOwogICAgICAgICAg
ICAgICAgb2JqLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5ld09iaiwgb2JqKTsgLy8gaW5zZXJ0
IHBsYWNlaG9sZGVyIGRpdiB0aGF0IHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlIG9iamVjdCBlbGVt
ZW50IHRoYXQgbG9hZHMgZXhwcmVzc2luc3RhbGwuc3dmCiAgICAgICAgICAgICAgICBvYmouc3R5
bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgICAgICAgICAgIChmdW5jdGlvbiAoKSB7CiAgICAg
ICAgICAgICAgICAgICAgaWYgKG9iai5yZWFkeVN0YXRlID09IDQpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgb2JqLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQob2JqKTsKICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGFyZ3VtZW50
cy5jYWxsZWUsIDEwKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KSgp
OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNyZWF0ZVNXRihhdHQsIHBhciwgcmVwbGFjZUVs
ZW1JZFN0cik7CiAgICAgICAgfQogICAgfQoKLyogRnVuY3Rpb25zIHRvIGFic3RyYWN0IGFuZCBk
aXNwbGF5IGFsdGVybmF0aXZlIGNvbnRlbnQKCSovCgogICAgZnVuY3Rpb24gZGlzcGxheUFsdENv
bnRlbnQob2JqKSB7CiAgICAgICAgaWYgKHVhLmllICYmIHVhLndpbiAmJiBvYmoucmVhZHlTdGF0
ZSAhPSA0KSB7CiAgICAgICAgICAgIC8vIElFIG9ubHk6IHdoZW4gYSBTV0YgaXMgbG9hZGluZyAo
QU5EOiBub3QgYXZhaWxhYmxlIGluIGNhY2hlKSB3YWl0IGZvciB0aGUgcmVhZHlTdGF0ZSBvZiB0
aGUgb2JqZWN0IGVsZW1lbnQgdG8gYmVjb21lIDQgYmVmb3JlIHJlbW92aW5nIGl0LAogICAgICAg
ICAgICAvLyBiZWNhdXNlIHlvdSBjYW5ub3QgcHJvcGVybHkgY2FuY2VsIGEgbG9hZGluZyBTV0Yg
ZmlsZSB3aXRob3V0IGJyZWFraW5nIGJyb3dzZXIgbG9hZCByZWZlcmVuY2VzLCBhbHNvIG9iai5v
bnJlYWR5c3RhdGVjaGFuZ2UgZG9lc24ndCB3b3JrCiAgICAgICAgICAgIHZhciBlbCA9IGNyZWF0
ZUVsZW1lbnQoImRpdiIpOwogICAgICAgICAgICBvYmoucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUo
ZWwsIG9iaik7IC8vIGluc2VydCBwbGFjZWhvbGRlciBkaXYgdGhhdCB3aWxsIGJlIHJlcGxhY2Vk
IGJ5IHRoZSBhbHRlcm5hdGl2ZSBjb250ZW50CiAgICAgICAgICAgIGVsLnBhcmVudE5vZGUucmVw
bGFjZUNoaWxkKGFic3RyYWN0QWx0Q29udGVudChvYmopLCBlbCk7CiAgICAgICAgICAgIG9iai5z
dHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICAgICAgICAoZnVuY3Rpb24gKCkgewogICAgICAg
ICAgICAgICAgaWYgKG9iai5yZWFkeVN0YXRlID09IDQpIHsKICAgICAgICAgICAgICAgICAgICBv
YmoucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvYmopOwogICAgICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGFyZ3VtZW50cy5jYWxsZWUsIDEwKTsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSkoKTsKICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICBvYmoucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoYWJzdHJhY3RBbHRDb250ZW50KG9iaiks
IG9iaik7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGFic3RyYWN0QWx0Q29udGVudChv
YmopIHsKICAgICAgICB2YXIgYWMgPSBjcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICBpZiAo
dWEud2luICYmIHVhLmllKSB7CiAgICAgICAgICAgIGFjLmlubmVySFRNTCA9IG9iai5pbm5lckhU
TUw7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIG5lc3RlZE9iaiA9IG9iai5nZXRF
bGVtZW50c0J5VGFnTmFtZShPQkpFQ1QpWzBdOwogICAgICAgICAgICBpZiAobmVzdGVkT2JqKSB7
CiAgICAgICAgICAgICAgICB2YXIgYyA9IG5lc3RlZE9iai5jaGlsZE5vZGVzOwogICAgICAgICAg
ICAgICAgaWYgKGMpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgY2wgPSBjLmxlbmd0aDsKICAg
ICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNsOyBpKyspIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCEoY1tpXS5ub2RlVHlwZSA9PSAxICYmIGNbaV0ubm9kZU5hbWUg
PT0gIlBBUkFNIikgJiYgIShjW2ldLm5vZGVUeXBlID09IDgpKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhYy5hcHBlbmRDaGlsZChjW2ldLmNsb25lTm9kZSh0cnVlKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFjOwogICAgfQoKLyogQ3Jv
c3MtYnJvd3NlciBkeW5hbWljIFNXRiBjcmVhdGlvbgoJKi8KCiAgICBmdW5jdGlvbiBjcmVhdGVT
V0YoYXR0T2JqLCBwYXJPYmosIGlkKSB7CiAgICAgICAgdmFyIHIsIGVsID0gZ2V0RWxlbWVudEJ5
SWQoaWQpOwogICAgICAgIGlmICh1YS53ayAmJiB1YS53ayA8IDMxMikgewogICAgICAgICAgICBy
ZXR1cm4gcjsKICAgICAgICB9CiAgICAgICAgaWYgKGVsKSB7CiAgICAgICAgICAgIGlmICh0eXBl
b2YgYXR0T2JqLmlkID09IFVOREVGKSB7IC8vIGlmIG5vICdpZCcgaXMgZGVmaW5lZCBmb3IgdGhl
IG9iamVjdCBlbGVtZW50LCBpdCB3aWxsIGluaGVyaXQgdGhlICdpZCcgZnJvbSB0aGUgYWx0ZXJu
YXRpdmUgY29udGVudAogICAgICAgICAgICAgICAgYXR0T2JqLmlkID0gaWQ7CiAgICAgICAgICAg
IH0KICAgICAgICAgICAgaWYgKHVhLmllICYmIHVhLndpbikgeyAvLyBJbnRlcm5ldCBFeHBsb3Jl
ciArIHRoZSBIVE1MIG9iamVjdCBlbGVtZW50ICsgVzNDIERPTSBtZXRob2RzIGRvIG5vdCBjb21i
aW5lOiBmYWxsIGJhY2sgdG8gb3V0ZXJIVE1MCiAgICAgICAgICAgICAgICB2YXIgYXR0ID0gIiI7
CiAgICAgICAgICAgICAgICBmb3IgKHZhciBpIGluIGF0dE9iaikgewogICAgICAgICAgICAgICAg
ICAgIGlmIChhdHRPYmpbaV0gIT0gT2JqZWN0LnByb3RvdHlwZVtpXSkgeyAvLyBmaWx0ZXIgb3V0
IHByb3RvdHlwZSBhZGRpdGlvbnMgZnJvbSBvdGhlciBwb3RlbnRpYWwgbGlicmFyaWVzCiAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChpLnRvTG93ZXJDYXNlKCkgPT0gImRhdGEiKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYXJPYmoubW92aWUgPSBhdHRPYmpbaV07CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaS50b0xvd2VyQ2FzZSgpID09ICJzdHlsZWNsYXNz
IikgeyAvLyAnY2xhc3MnIGlzIGFuIEVDTUE0IHJlc2VydmVkIGtleXdvcmQKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGF0dCArPSAnIGNsYXNzPSInICsgYXR0T2JqW2ldICsgJyInOwogICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkudG9Mb3dlckNhc2UoKSAhPSAiY2xhc3Np
ZCIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dCArPSAnICcgKyBpICsgJz0iJyAr
IGF0dE9ialtpXSArICciJzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHZhciBwYXIgPSAiIjsK
ICAgICAgICAgICAgICAgIGZvciAodmFyIGogaW4gcGFyT2JqKSB7CiAgICAgICAgICAgICAgICAg
ICAgaWYgKHBhck9ialtqXSAhPSBPYmplY3QucHJvdG90eXBlW2pdKSB7IC8vIGZpbHRlciBvdXQg
cHJvdG90eXBlIGFkZGl0aW9ucyBmcm9tIG90aGVyIHBvdGVudGlhbCBsaWJyYXJpZXMKICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyICs9ICc8cGFyYW0gbmFtZT0iJyArIGogKyAnIiB2YWx1ZT0i
JyArIHBhck9ialtqXSArICciIC8+JzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICBlbC5vdXRlckhUTUwgPSAnPG9iamVjdCBjbGFzc2lkPSJj
bHNpZDpEMjdDREI2RS1BRTZELTExY2YtOTZCOC00NDQ1NTM1NDAwMDAiJyArIGF0dCArICc+JyAr
IHBhciArICc8L29iamVjdD4nOwogICAgICAgICAgICAgICAgb2JqSWRBcnJbb2JqSWRBcnIubGVu
Z3RoXSA9IGF0dE9iai5pZDsgLy8gc3RvcmVkIHRvIGZpeCBvYmplY3QgJ2xlYWtzJyBvbiB1bmxv
YWQgKGR5bmFtaWMgcHVibGlzaGluZyBvbmx5KQogICAgICAgICAgICAgICAgciA9IGdldEVsZW1l
bnRCeUlkKGF0dE9iai5pZCk7CiAgICAgICAgICAgIH0gZWxzZSB7IC8vIHdlbGwtYmVoYXZpbmcg
YnJvd3NlcnMKICAgICAgICAgICAgICAgIHZhciBvID0gY3JlYXRlRWxlbWVudChPQkpFQ1QpOwog
ICAgICAgICAgICAgICAgby5zZXRBdHRyaWJ1dGUoInR5cGUiLCBGTEFTSF9NSU1FX1RZUEUpOwog
ICAgICAgICAgICAgICAgZm9yICh2YXIgbSBpbiBhdHRPYmopIHsKICAgICAgICAgICAgICAgICAg
ICBpZiAoYXR0T2JqW21dICE9IE9iamVjdC5wcm90b3R5cGVbbV0pIHsgLy8gZmlsdGVyIG91dCBw
cm90b3R5cGUgYWRkaXRpb25zIGZyb20gb3RoZXIgcG90ZW50aWFsIGxpYnJhcmllcwogICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobS50b0xvd2VyQ2FzZSgpID09ICJzdHlsZWNsYXNzIikgeyAv
LyAnY2xhc3MnIGlzIGFuIEVDTUE0IHJlc2VydmVkIGtleXdvcmQKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG8uc2V0QXR0cmlidXRlKCJjbGFzcyIsIGF0dE9ialttXSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAobS50b0xvd2VyQ2FzZSgpICE9ICJjbGFzc2lkIikgeyAv
LyBmaWx0ZXIgb3V0IElFIHNwZWNpZmljIGF0dHJpYnV0ZQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgby5zZXRBdHRyaWJ1dGUobSwgYXR0T2JqW21dKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIGZvciAodmFyIG4gaW4gcGFyT2JqKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHBhck9i
altuXSAhPSBPYmplY3QucHJvdG90eXBlW25dICYmIG4udG9Mb3dlckNhc2UoKSAhPSAibW92aWUi
KSB7IC8vIGZpbHRlciBvdXQgcHJvdG90eXBlIGFkZGl0aW9ucyBmcm9tIG90aGVyIHBvdGVudGlh
bCBsaWJyYXJpZXMgYW5kIElFIHNwZWNpZmljIHBhcmFtIGVsZW1lbnQKICAgICAgICAgICAgICAg
ICAgICAgICAgY3JlYXRlT2JqUGFyYW0obywgbiwgcGFyT2JqW25dKTsKICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbC5wYXJlbnROb2RlLnJl
cGxhY2VDaGlsZChvLCBlbCk7CiAgICAgICAgICAgICAgICByID0gbzsKICAgICAgICAgICAgfQog
ICAgICAgIH0KICAgICAgICByZXR1cm4gcjsKICAgIH0KCiAgICBmdW5jdGlvbiBjcmVhdGVPYmpQ
YXJhbShlbCwgcE5hbWUsIHBWYWx1ZSkgewogICAgICAgIHZhciBwID0gY3JlYXRlRWxlbWVudCgi
cGFyYW0iKTsKICAgICAgICBwLnNldEF0dHJpYnV0ZSgibmFtZSIsIHBOYW1lKTsKICAgICAgICBw
LnNldEF0dHJpYnV0ZSgidmFsdWUiLCBwVmFsdWUpOwogICAgICAgIGVsLmFwcGVuZENoaWxkKHAp
OwogICAgfQoKLyogQ3Jvc3MtYnJvd3NlciBTV0YgcmVtb3ZhbAoJCS0gRXNwZWNpYWxseSBuZWVk
ZWQgdG8gc2FmZWx5IGFuZCBjb21wbGV0ZWx5IHJlbW92ZSBhIFNXRiBpbiBJbnRlcm5ldCBFeHBs
b3JlcgoJKi8KCiAgICBmdW5jdGlvbiByZW1vdmVTV0YoaWQpIHsKICAgICAgICB2YXIgb2JqID0g
Z2V0RWxlbWVudEJ5SWQoaWQpOwogICAgICAgIGlmIChvYmogJiYgb2JqLm5vZGVOYW1lID09ICJP
QkpFQ1QiKSB7CiAgICAgICAgICAgIGlmICh1YS5pZSAmJiB1YS53aW4pIHsKICAgICAgICAgICAg
ICAgIG9iai5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICAgICAgICAgICAgKGZ1bmN0aW9u
ICgpIHsKICAgICAgICAgICAgICAgICAgICBpZiAob2JqLnJlYWR5U3RhdGUgPT0gNCkgewogICAg
ICAgICAgICAgICAgICAgICAgICByZW1vdmVPYmplY3RJbklFKGlkKTsKICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGFyZ3VtZW50
cy5jYWxsZWUsIDEwKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KSgp
OwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgb2JqLnBhcmVudE5vZGUucmVt
b3ZlQ2hpbGQob2JqKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlv
biByZW1vdmVPYmplY3RJbklFKGlkKSB7CiAgICAgICAgdmFyIG9iaiA9IGdldEVsZW1lbnRCeUlk
KGlkKTsKICAgICAgICBpZiAob2JqKSB7CiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gb2JqKSB7
CiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9ialtpXSA9PSAiZnVuY3Rpb24iKSB7CiAgICAg
ICAgICAgICAgICAgICAgb2JqW2ldID0gbnVsbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgfQogICAgICAgICAgICBvYmoucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvYmopOwogICAgICAg
IH0KICAgIH0KCi8qIEZ1bmN0aW9ucyB0byBvcHRpbWl6ZSBKYXZhU2NyaXB0IGNvbXByZXNzaW9u
CgkqLwoKICAgIGZ1bmN0aW9uIGdldEVsZW1lbnRCeUlkKGlkKSB7CiAgICAgICAgdmFyIGVsID0g
bnVsbDsKICAgICAgICB0cnkgewogICAgICAgICAgICBlbCA9IGRvYy5nZXRFbGVtZW50QnlJZChp
ZCk7CiAgICAgICAgfSBjYXRjaCAoZSkge30KICAgICAgICByZXR1cm4gZWw7CiAgICB9CgogICAg
ZnVuY3Rpb24gY3JlYXRlRWxlbWVudChlbCkgewogICAgICAgIHJldHVybiBkb2MuY3JlYXRlRWxl
bWVudChlbCk7CiAgICB9CgovKiBVcGRhdGVkIGF0dGFjaEV2ZW50IGZ1bmN0aW9uIGZvciBJbnRl
cm5ldCBFeHBsb3JlcgoJCS0gU3RvcmVzIGF0dGFjaEV2ZW50IGluZm9ybWF0aW9uIGluIGFuIEFy
cmF5LCBzbyBvbiB1bmxvYWQgdGhlIGRldGFjaEV2ZW50IGZ1bmN0aW9ucyBjYW4gYmUgY2FsbGVk
IHRvIGF2b2lkIG1lbW9yeSBsZWFrcwoJKi8KCiAgICBmdW5jdGlvbiBhZGRMaXN0ZW5lcih0YXJn
ZXQsIGV2ZW50VHlwZSwgZm4pIHsKICAgICAgICB0YXJnZXQuYXR0YWNoRXZlbnQoZXZlbnRUeXBl
LCBmbik7CiAgICAgICAgbGlzdGVuZXJzQXJyW2xpc3RlbmVyc0Fyci5sZW5ndGhdID0gW3Rhcmdl
dCwgZXZlbnRUeXBlLCBmbl07CiAgICB9CgovKiBGbGFzaCBQbGF5ZXIgYW5kIFNXRiBjb250ZW50
IHZlcnNpb24gbWF0Y2hpbmcKCSovCgogICAgZnVuY3Rpb24gaGFzUGxheWVyVmVyc2lvbihydikg
ewogICAgICAgIHZhciBwdiA9IHVhLnB2LAogICAgICAgICAgICB2ID0gcnYuc3BsaXQoIi4iKTsK
ICAgICAgICB2WzBdID0gcGFyc2VJbnQodlswXSwgMTApOwogICAgICAgIHZbMV0gPSBwYXJzZUlu
dCh2WzFdLCAxMCkgfHwgMDsgLy8gc3VwcG9ydHMgc2hvcnQgbm90YXRpb24sIGUuZy4gIjkiIGlu
c3RlYWQgb2YgIjkuMC4wIgogICAgICAgIHZbMl0gPSBwYXJzZUludCh2WzJdLCAxMCkgfHwgMDsK
ICAgICAgICByZXR1cm4gKHB2WzBdID4gdlswXSB8fCAocHZbMF0gPT0gdlswXSAmJiBwdlsxXSA+
IHZbMV0pIHx8IChwdlswXSA9PSB2WzBdICYmIHB2WzFdID09IHZbMV0gJiYgcHZbMl0gPj0gdlsy
XSkpID8gdHJ1ZSA6IGZhbHNlOwogICAgfQoKLyogQ3Jvc3MtYnJvd3NlciBkeW5hbWljIENTUyBj
cmVhdGlvbgoJCS0gQmFzZWQgb24gQm9iYnkgdmFuIGRlciBTbHVpcycgc29sdXRpb246IGh0dHA6
Ly93d3cuYm9iYnl2YW5kZXJzbHVpcy5jb20vYXJ0aWNsZXMvZHluYW1pY0NTUy5waHAKCSovCgog
ICAgZnVuY3Rpb24gY3JlYXRlQ1NTKHNlbCwgZGVjbCwgbWVkaWEsIG5ld1N0eWxlKSB7CiAgICAg
ICAgaWYgKHVhLmllICYmIHVhLm1hYykgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQog
ICAgICAgIHZhciBoID0gZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF07CiAgICAg
ICAgaWYgKCFoKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9IC8vIHRvIGFsc28gc3Vw
cG9ydCBiYWRseSBhdXRob3JlZCBIVE1MIHBhZ2VzIHRoYXQgbGFjayBhIGhlYWQgZWxlbWVudAog
ICAgICAgIHZhciBtID0gKG1lZGlhICYmIHR5cGVvZiBtZWRpYSA9PSAic3RyaW5nIikgPyBtZWRp
YSA6ICJzY3JlZW4iOwogICAgICAgIGlmIChuZXdTdHlsZSkgewogICAgICAgICAgICBkeW5hbWlj
U3R5bGVzaGVldCA9IG51bGw7CiAgICAgICAgICAgIGR5bmFtaWNTdHlsZXNoZWV0TWVkaWEgPSBu
dWxsOwogICAgICAgIH0KICAgICAgICBpZiAoIWR5bmFtaWNTdHlsZXNoZWV0IHx8IGR5bmFtaWNT
dHlsZXNoZWV0TWVkaWEgIT0gbSkgewogICAgICAgICAgICAvLyBjcmVhdGUgZHluYW1pYyBzdHls
ZXNoZWV0ICsgZ2V0IGEgZ2xvYmFsIHJlZmVyZW5jZSB0byBpdAogICAgICAgICAgICB2YXIgcyA9
IGNyZWF0ZUVsZW1lbnQoInN0eWxlIik7CiAgICAgICAgICAgIHMuc2V0QXR0cmlidXRlKCJ0eXBl
IiwgInRleHQvY3NzIik7CiAgICAgICAgICAgIHMuc2V0QXR0cmlidXRlKCJtZWRpYSIsIG0pOwog
ICAgICAgICAgICBkeW5hbWljU3R5bGVzaGVldCA9IGguYXBwZW5kQ2hpbGQocyk7CiAgICAgICAg
ICAgIGlmICh1YS5pZSAmJiB1YS53aW4gJiYgdHlwZW9mIGRvYy5zdHlsZVNoZWV0cyAhPSBVTkRF
RiAmJiBkb2Muc3R5bGVTaGVldHMubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgZHluYW1p
Y1N0eWxlc2hlZXQgPSBkb2Muc3R5bGVTaGVldHNbZG9jLnN0eWxlU2hlZXRzLmxlbmd0aCAtIDFd
OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGR5bmFtaWNTdHlsZXNoZWV0TWVkaWEgPSBtOwog
ICAgICAgIH0KICAgICAgICAvLyBhZGQgc3R5bGUgcnVsZQogICAgICAgIGlmICh1YS5pZSAmJiB1
YS53aW4pIHsKICAgICAgICAgICAgaWYgKGR5bmFtaWNTdHlsZXNoZWV0ICYmIHR5cGVvZiBkeW5h
bWljU3R5bGVzaGVldC5hZGRSdWxlID09IE9CSkVDVCkgewogICAgICAgICAgICAgICAgZHluYW1p
Y1N0eWxlc2hlZXQuYWRkUnVsZShzZWwsIGRlY2wpOwogICAgICAgICAgICB9CiAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgaWYgKGR5bmFtaWNTdHlsZXNoZWV0ICYmIHR5cGVvZiBkb2MuY3Jl
YXRlVGV4dE5vZGUgIT0gVU5ERUYpIHsKICAgICAgICAgICAgICAgIGR5bmFtaWNTdHlsZXNoZWV0
LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZShzZWwgKyAiIHsiICsgZGVjbCArICJ9Iikp
OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIHNldFZpc2liaWxp
dHkoaWQsIGlzVmlzaWJsZSkgewogICAgICAgIGlmICghYXV0b0hpZGVTaG93KSB7CiAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdmFyIHYgPSBpc1Zpc2libGUgPyAidmlzaWJs
ZSIgOiAiaGlkZGVuIjsKICAgICAgICBpZiAoaXNEb21Mb2FkZWQgJiYgZ2V0RWxlbWVudEJ5SWQo
aWQpKSB7CiAgICAgICAgICAgIGdldEVsZW1lbnRCeUlkKGlkKS5zdHlsZS52aXNpYmlsaXR5ID0g
djsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjcmVhdGVDU1MoIiMiICsgaWQsICJ2aXNp
YmlsaXR5OiIgKyB2KTsKICAgICAgICB9CiAgICB9CgovKiBGaWx0ZXIgdG8gYXZvaWQgWFNTIGF0
dGFja3MKCSovCgogICAgZnVuY3Rpb24gdXJsRW5jb2RlSWZOZWNlc3NhcnkocykgewogICAgICAg
IHZhciByZWdleCA9IC9bXFxcIjw+XC47XS87CiAgICAgICAgdmFyIGhhc0JhZENoYXJzID0gcmVn
ZXguZXhlYyhzKSAhPSBudWxsOwogICAgICAgIHJldHVybiBoYXNCYWRDaGFycyAmJiB0eXBlb2Yg
ZW5jb2RlVVJJQ29tcG9uZW50ICE9IFVOREVGID8gZW5jb2RlVVJJQ29tcG9uZW50KHMpIDogczsK
ICAgIH0KCi8qIFJlbGVhc2UgbWVtb3J5IHRvIGF2b2lkIG1lbW9yeSBsZWFrcyBjYXVzZWQgYnkg
Y2xvc3VyZXMsIGZpeCBoYW5naW5nIGF1ZGlvL3ZpZGVvIHRocmVhZHMgYW5kIGZvcmNlIG9wZW4g
c29ja2V0cy9OZXRDb25uZWN0aW9ucyB0byBkaXNjb25uZWN0IChJbnRlcm5ldCBFeHBsb3JlciBv
bmx5KQoJKi8KICAgIHZhciBjbGVhbnVwID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICBpZiAo
dWEuaWUgJiYgdWEud2luKSB7CiAgICAgICAgICAgICAgICB3aW5kb3cuYXR0YWNoRXZlbnQoIm9u
dW5sb2FkIiwgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBsaXN0
ZW5lcnMgdG8gYXZvaWQgbWVtb3J5IGxlYWtzCiAgICAgICAgICAgICAgICAgICAgdmFyIGxsID0g
bGlzdGVuZXJzQXJyLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGxsOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzQXJyW2ldWzBd
LmRldGFjaEV2ZW50KGxpc3RlbmVyc0FycltpXVsxXSwgbGlzdGVuZXJzQXJyW2ldWzJdKTsKICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgLy8gY2xlYW51cCBkeW5hbWlj
YWxseSBlbWJlZGRlZCBvYmplY3RzIHRvIGZpeCBhdWRpby92aWRlbyB0aHJlYWRzIGFuZCBmb3Jj
ZSBvcGVuIHNvY2tldHMgYW5kIE5ldENvbm5lY3Rpb25zIHRvIGRpc2Nvbm5lY3QKICAgICAgICAg
ICAgICAgICAgICB2YXIgaWwgPSBvYmpJZEFyci5sZW5ndGg7CiAgICAgICAgICAgICAgICAgICAg
Zm9yICh2YXIgaiA9IDA7IGogPCBpbDsgaisrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJl
bW92ZVNXRihvYmpJZEFycltqXSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgIC8vIGNsZWFudXAgbGlicmFyeSdzIG1haW4gY2xvc3VyZXMgdG8gYXZvaWQgbWVtb3J5
IGxlYWtzCiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgayBpbiB1YSkgewogICAgICAgICAg
ICAgICAgICAgICAgICB1YVtrXSA9IG51bGw7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgIHVhID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBsIGlu
IHN3Zm9iamVjdCkgewogICAgICAgICAgICAgICAgICAgICAgICBzd2ZvYmplY3RbbF0gPSBudWxs
OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBzd2ZvYmplY3QgPSBu
dWxsOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9KCk7CgogICAg
dmFyIHB1YmxpY0FwaSA9IHsKLyogUHVibGljIEFQSQoJCQktIFJlZmVyZW5jZTogaHR0cDovL2Nv
ZGUuZ29vZ2xlLmNvbS9wL3N3Zm9iamVjdC93aWtpL2RvY3VtZW50YXRpb24KCQkqLwogICAgICAg
IHJlZ2lzdGVyT2JqZWN0OiBmdW5jdGlvbiAob2JqZWN0SWRTdHIsIHN3ZlZlcnNpb25TdHIsIHhp
U3dmVXJsU3RyLCBjYWxsYmFja0ZuKSB7CiAgICAgICAgICAgIGlmICh1YS53MyAmJiBvYmplY3RJ
ZFN0ciAmJiBzd2ZWZXJzaW9uU3RyKSB7CiAgICAgICAgICAgICAgICB2YXIgcmVnT2JqID0ge307
CiAgICAgICAgICAgICAgICByZWdPYmouaWQgPSBvYmplY3RJZFN0cjsKICAgICAgICAgICAgICAg
IHJlZ09iai5zd2ZWZXJzaW9uID0gc3dmVmVyc2lvblN0cjsKICAgICAgICAgICAgICAgIHJlZ09i
ai5leHByZXNzSW5zdGFsbCA9IHhpU3dmVXJsU3RyOwogICAgICAgICAgICAgICAgcmVnT2JqLmNh
bGxiYWNrRm4gPSBjYWxsYmFja0ZuOwogICAgICAgICAgICAgICAgcmVnT2JqQXJyW3JlZ09iakFy
ci5sZW5ndGhdID0gcmVnT2JqOwogICAgICAgICAgICAgICAgc2V0VmlzaWJpbGl0eShvYmplY3RJ
ZFN0ciwgZmFsc2UpOwogICAgICAgICAgICB9IGVsc2UgaWYgKGNhbGxiYWNrRm4pIHsKICAgICAg
ICAgICAgICAgIGNhbGxiYWNrRm4oewogICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNl
LAogICAgICAgICAgICAgICAgICAgIGlkOiBvYmplY3RJZFN0cgogICAgICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICBnZXRPYmplY3RCeUlkOiBmdW5jdGlv
biAob2JqZWN0SWRTdHIpIHsKICAgICAgICAgICAgaWYgKHVhLnczKSB7CiAgICAgICAgICAgICAg
ICByZXR1cm4gZ2V0T2JqZWN0QnlJZChvYmplY3RJZFN0cik7CiAgICAgICAgICAgIH0KICAgICAg
ICB9LAoKICAgICAgICBlbWJlZFNXRjogZnVuY3Rpb24gKHN3ZlVybFN0ciwgcmVwbGFjZUVsZW1J
ZFN0ciwgd2lkdGhTdHIsIGhlaWdodFN0ciwgc3dmVmVyc2lvblN0ciwgeGlTd2ZVcmxTdHIsIGZs
YXNodmFyc09iaiwgcGFyT2JqLCBhdHRPYmosIGNhbGxiYWNrRm4pIHsKICAgICAgICAgICAgdmFy
IGNhbGxiYWNrT2JqID0gewogICAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsCiAgICAgICAg
ICAgICAgICBpZDogcmVwbGFjZUVsZW1JZFN0cgogICAgICAgICAgICB9OwogICAgICAgICAgICBp
ZiAodWEudzMgJiYgISh1YS53ayAmJiB1YS53ayA8IDMxMikgJiYgc3dmVXJsU3RyICYmIHJlcGxh
Y2VFbGVtSWRTdHIgJiYgd2lkdGhTdHIgJiYgaGVpZ2h0U3RyICYmIHN3ZlZlcnNpb25TdHIpIHsK
ICAgICAgICAgICAgICAgIHNldFZpc2liaWxpdHkocmVwbGFjZUVsZW1JZFN0ciwgZmFsc2UpOwog
ICAgICAgICAgICAgICAgYWRkRG9tTG9hZEV2ZW50KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAg
ICAgICAgICB3aWR0aFN0ciArPSAiIjsgLy8gYXV0by1jb252ZXJ0IHRvIHN0cmluZwogICAgICAg
ICAgICAgICAgICAgIGhlaWdodFN0ciArPSAiIjsKICAgICAgICAgICAgICAgICAgICB2YXIgYXR0
ID0ge307CiAgICAgICAgICAgICAgICAgICAgaWYgKGF0dE9iaiAmJiB0eXBlb2YgYXR0T2JqID09
PSBPQkpFQ1QpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBhdHRPYmop
IHsgLy8gY29weSBvYmplY3QgdG8gYXZvaWQgdGhlIHVzZSBvZiByZWZlcmVuY2VzLCBiZWNhdXNl
IHdlYiBhdXRob3JzIG9mdGVuIHJldXNlIGF0dE9iaiBmb3IgbXVsdGlwbGUgU1dGcwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXR0W2ldID0gYXR0T2JqW2ldOwogICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGF0dC5k
YXRhID0gc3dmVXJsU3RyOwogICAgICAgICAgICAgICAgICAgIGF0dC53aWR0aCA9IHdpZHRoU3Ry
OwogICAgICAgICAgICAgICAgICAgIGF0dC5oZWlnaHQgPSBoZWlnaHRTdHI7CiAgICAgICAgICAg
ICAgICAgICAgdmFyIHBhciA9IHt9OwogICAgICAgICAgICAgICAgICAgIGlmIChwYXJPYmogJiYg
dHlwZW9mIHBhck9iaiA9PT0gT0JKRUNUKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
dmFyIGogaW4gcGFyT2JqKSB7IC8vIGNvcHkgb2JqZWN0IHRvIGF2b2lkIHRoZSB1c2Ugb2YgcmVm
ZXJlbmNlcywgYmVjYXVzZSB3ZWIgYXV0aG9ycyBvZnRlbiByZXVzZSBwYXJPYmogZm9yIG11bHRp
cGxlIFNXRnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcltqXSA9IHBhck9ialtqXTsK
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICBpZiAoZmxhc2h2YXJzT2JqICYmIHR5cGVvZiBmbGFzaHZhcnNPYmogPT09IE9C
SkVDVCkgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrIGluIGZsYXNodmFyc09i
aikgeyAvLyBjb3B5IG9iamVjdCB0byBhdm9pZCB0aGUgdXNlIG9mIHJlZmVyZW5jZXMsIGJlY2F1
c2Ugd2ViIGF1dGhvcnMgb2Z0ZW4gcmV1c2UgZmxhc2h2YXJzT2JqIGZvciBtdWx0aXBsZSBTV0Zz
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBhci5mbGFzaHZhcnMgIT0g
VU5ERUYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXIuZmxhc2h2YXJzICs9
ICImIiArIGsgKyAiPSIgKyBmbGFzaHZhcnNPYmpba107CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhci5mbGFzaHZh
cnMgPSBrICsgIj0iICsgZmxhc2h2YXJzT2JqW2tdOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgIGlmIChoYXNQbGF5ZXJWZXJzaW9uKHN3ZlZlcnNpb25TdHIpKSB7IC8v
IGNyZWF0ZSBTV0YKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iaiA9IGNyZWF0ZVNXRihh
dHQsIHBhciwgcmVwbGFjZUVsZW1JZFN0cik7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChh
dHQuaWQgPT0gcmVwbGFjZUVsZW1JZFN0cikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2V0VmlzaWJpbGl0eShyZXBsYWNlRWxlbUlkU3RyLCB0cnVlKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja09iai5zdWNjZXNzID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tPYmoucmVmID0gb2JqOwogICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoeGlTd2ZVcmxTdHIgJiYgY2FuRXhwcmVzc0luc3RhbGwo
KSkgeyAvLyBzaG93IEFkb2JlIEV4cHJlc3MgSW5zdGFsbAogICAgICAgICAgICAgICAgICAgICAg
ICBhdHQuZGF0YSA9IHhpU3dmVXJsU3RyOwogICAgICAgICAgICAgICAgICAgICAgICBzaG93RXhw
cmVzc0luc3RhbGwoYXR0LCBwYXIsIHJlcGxhY2VFbGVtSWRTdHIsIGNhbGxiYWNrRm4pOwogICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsg
Ly8gc2hvdyBhbHRlcm5hdGl2ZSBjb250ZW50CiAgICAgICAgICAgICAgICAgICAgICAgIHNldFZp
c2liaWxpdHkocmVwbGFjZUVsZW1JZFN0ciwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja0ZuKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIGNhbGxiYWNrRm4oY2FsbGJhY2tPYmopOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgIH0pOwogICAgICAgICAgICB9IGVsc2UgaWYgKGNhbGxiYWNrRm4pIHsKICAgICAg
ICAgICAgICAgIGNhbGxiYWNrRm4oY2FsbGJhY2tPYmopOwogICAgICAgICAgICB9CiAgICAgICAg
fSwKCiAgICAgICAgc3dpdGNoT2ZmQXV0b0hpZGVTaG93OiBmdW5jdGlvbiAoKSB7CiAgICAgICAg
ICAgIGF1dG9IaWRlU2hvdyA9IGZhbHNlOwogICAgICAgIH0sCgogICAgICAgIHVhOiB1YSwKCiAg
ICAgICAgZ2V0Rmxhc2hQbGF5ZXJWZXJzaW9uOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJl
dHVybiB7CiAgICAgICAgICAgICAgICBtYWpvcjogdWEucHZbMF0sCiAgICAgICAgICAgICAgICBt
aW5vcjogdWEucHZbMV0sCiAgICAgICAgICAgICAgICByZWxlYXNlOiB1YS5wdlsyXQogICAgICAg
ICAgICB9OwogICAgICAgIH0sCgogICAgICAgIGhhc0ZsYXNoUGxheWVyVmVyc2lvbjogaGFzUGxh
eWVyVmVyc2lvbiwKCiAgICAgICAgY3JlYXRlU1dGOiBmdW5jdGlvbiAoYXR0T2JqLCBwYXJPYmos
IHJlcGxhY2VFbGVtSWRTdHIpIHsKICAgICAgICAgICAgaWYgKHVhLnczKSB7CiAgICAgICAgICAg
ICAgICByZXR1cm4gY3JlYXRlU1dGKGF0dE9iaiwgcGFyT2JqLCByZXBsYWNlRWxlbUlkU3RyKTsK
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CiAg
ICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICBzaG93RXhwcmVzc0luc3RhbGw6IGZ1bmN0
aW9uIChhdHQsIHBhciwgcmVwbGFjZUVsZW1JZFN0ciwgY2FsbGJhY2tGbikgewogICAgICAgICAg
ICBpZiAodWEudzMgJiYgY2FuRXhwcmVzc0luc3RhbGwoKSkgewogICAgICAgICAgICAgICAgc2hv
d0V4cHJlc3NJbnN0YWxsKGF0dCwgcGFyLCByZXBsYWNlRWxlbUlkU3RyLCBjYWxsYmFja0ZuKTsK
ICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIHJlbW92ZVNXRjogZnVuY3Rpb24gKG9i
akVsZW1JZFN0cikgewogICAgICAgICAgICBpZiAodWEudzMpIHsKICAgICAgICAgICAgICAgIHJl
bW92ZVNXRihvYmpFbGVtSWRTdHIpOwogICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAg
Y3JlYXRlQ1NTOiBmdW5jdGlvbiAoc2VsU3RyLCBkZWNsU3RyLCBtZWRpYVN0ciwgbmV3U3R5bGVC
b29sZWFuKSB7CiAgICAgICAgICAgIGlmICh1YS53MykgewogICAgICAgICAgICAgICAgY3JlYXRl
Q1NTKHNlbFN0ciwgZGVjbFN0ciwgbWVkaWFTdHIsIG5ld1N0eWxlQm9vbGVhbik7CiAgICAgICAg
ICAgIH0KICAgICAgICB9LAoKICAgICAgICBhZGREb21Mb2FkRXZlbnQ6IGFkZERvbUxvYWRFdmVu
dCwKCiAgICAgICAgYWRkTG9hZEV2ZW50OiBhZGRMb2FkRXZlbnQsCgogICAgICAgIGdldFF1ZXJ5
UGFyYW1WYWx1ZTogZnVuY3Rpb24gKHBhcmFtKSB7CiAgICAgICAgICAgIHZhciBxID0gZG9jLmxv
Y2F0aW9uLnNlYXJjaCB8fCBkb2MubG9jYXRpb24uaGFzaDsKICAgICAgICAgICAgaWYgKHEpIHsK
ICAgICAgICAgICAgICAgIGlmICgvXD8vLnRlc3QocSkpIHsKICAgICAgICAgICAgICAgICAgICBx
ID0gcS5zcGxpdCgiPyIpWzFdOwogICAgICAgICAgICAgICAgfSAvLyBzdHJpcCBxdWVzdGlvbiBt
YXJrCiAgICAgICAgICAgICAgICBpZiAocGFyYW0gPT0gbnVsbCkgewogICAgICAgICAgICAgICAg
ICAgIHJldHVybiB1cmxFbmNvZGVJZk5lY2Vzc2FyeShxKTsKICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgIHZhciBwYWlycyA9IHEuc3BsaXQoIiYiKTsKICAgICAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgcGFpcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAg
ICBpZiAocGFpcnNbaV0uc3Vic3RyaW5nKDAsIHBhaXJzW2ldLmluZGV4T2YoIj0iKSkgPT0gcGFy
YW0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVybEVuY29kZUlmTmVjZXNzYXJ5
KHBhaXJzW2ldLnN1YnN0cmluZygocGFpcnNbaV0uaW5kZXhPZigiPSIpICsgMSkpKTsKICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAg
ICAgcmV0dXJuICIiOwogICAgICAgIH0sCgogICAgICAgIC8vIEZvciBpbnRlcm5hbCB1c2FnZSBv
bmx5CiAgICAgICAgZXhwcmVzc0luc3RhbGxDYWxsYmFjazogZnVuY3Rpb24gKCkgewogICAgICAg
ICAgICBpZiAoaXNFeHByZXNzSW5zdGFsbEFjdGl2ZSkgewogICAgICAgICAgICAgICAgdmFyIG9i
aiA9IGdldEVsZW1lbnRCeUlkKEVYUFJFU1NfSU5TVEFMTF9JRCk7CiAgICAgICAgICAgICAgICBp
ZiAob2JqICYmIHN0b3JlZEFsdENvbnRlbnQpIHsKICAgICAgICAgICAgICAgICAgICBvYmoucGFy
ZW50Tm9kZS5yZXBsYWNlQ2hpbGQoc3RvcmVkQWx0Q29udGVudCwgb2JqKTsKICAgICAgICAgICAg
ICAgICAgICBpZiAoc3RvcmVkQWx0Q29udGVudElkKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IHNldFZpc2liaWxpdHkoc3RvcmVkQWx0Q29udGVudElkLCB0cnVlKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHVhLmllICYmIHVhLndpbikgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RvcmVkQWx0Q29udGVudC5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBp
ZiAoc3RvcmVkQ2FsbGJhY2tGbikgewogICAgICAgICAgICAgICAgICAgICAgICBzdG9yZWRDYWxs
YmFja0ZuKHN0b3JlZENhbGxiYWNrT2JqKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICBpc0V4cHJlc3NJbnN0YWxsQWN0aXZlID0gZmFsc2U7
CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwoKICAgIGlmIChpc0luaXREZWxheWVkKSB7
CiAgICAgICAgdmFyIHRoYXQgPSB0aGlzLAogICAgICAgICAgICBpc0luaXRpYWxpemVkID0gZmFs
c2U7CiAgICAgICAgZm9yICh2YXIgZm4gaW4gcHVibGljQXBpKSB7CiAgICAgICAgICAgIChmdW5j
dGlvbiAob2xkRm4pIHsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2xkRm4gPT09ICJmdW5j
dGlvbiIpIHsKICAgICAgICAgICAgICAgICAgICBwdWJsaWNBcGlbZm5dID0gZnVuY3Rpb24gKCkg
ewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6ZWQpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1haW4oKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlz
SW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBvbGRGbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpOwogICAgICAg
ICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0ocHVibGljQXBp
W2ZuXSkpOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gcHVibGljQXBpOwp9KCk7Cgpkb2pv
LnByb3ZpZGUoJ3RyaW1wYXRoLlRyaW1QYXRoJyk7Ci8qKgogKiBUcmltUGF0aCBUZW1wbGF0ZS4g
UmVsZWFzZSAxLjEuMi4KICogQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwNyBUcmltUGF0aC4KICoK
ICogVHJpbVBhdGggVGVtcGxhdGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCiAqIGFuZCB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLCBhcyBm
b2xsb3dzOgogKgogKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCiAqIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIHByb2dyYW0gaXMg
ZGlzdHJpYnV0ZWQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUKICogaW1w
bGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuCiAqIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkg
VGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICoK
ICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJM
aWNlbnNlIik7CiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFu
Y2Ugd2l0aCB0aGUgTGljZW5zZS4KICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNl
bnNlIGF0CiAqCiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAog
KgogKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdy
aXRpbmcsIHNvZnR3YXJlCiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3Ry
aWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05E
SVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogKiBTZWUgdGhl
IExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMg
YW5kCiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKi8KaWYgKHR5cGVvZiAoVHJp
bVBhdGgpID09ICd1bmRlZmluZWQnKSB7CiAgICBUcmltUGF0aCA9IHt9Owp9CgovLyBUT0RPOiBE
ZWJ1Z2dpbmcgbW9kZSB2cyBzdG9wLW9uLWVycm9yIG1vZGUgLSBydW50aW1lIGZsYWcuCi8vIFRP
RE86IEhhbmRsZSB8fCAob3IpIGNoYXJhY3RlcnMgYW5kIGJhY2tzbGFzaGVzLgovLyBUT0RPOiBB
ZGQgbW9yZSBtb2RpZmllcnMuCihmdW5jdGlvbiAoKSB7IC8vIFVzaW5nIGEgY2xvc3VyZSB0byBr
ZWVwIGdsb2JhbCBuYW1lc3BhY2UgY2xlYW4uCiAgICBpZiAoVHJpbVBhdGguZXZhbEV4ID09IG51
bGwpIHsKICAgICAgICBUcmltUGF0aC5ldmFsRXggPSBmdW5jdGlvbiAoc3JjKSB7CiAgICAgICAg
ICAgIHJldHVybiBldmFsKHNyYyk7CiAgICAgICAgfTsKICAgIH0KCiAgICB2YXIgVU5ERUZJTkVE
OwogICAgaWYgKEFycmF5LnByb3RvdHlwZS5wb3AgPT0gbnVsbCkgewogICAgICAgIEFycmF5LnBy
b3RvdHlwZS5wb3AgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIGlmICh0aGlzLmxlbmd0aCA9
PT0gMCkgewogICAgICAgICAgICAgICAgcmV0dXJuIFVOREVGSU5FRDsKICAgICAgICAgICAgfQog
ICAgICAgICAgICByZXR1cm4gdGhpc1stLXRoaXMubGVuZ3RoXTsKICAgICAgICB9OwogICAgfQog
ICAgaWYgKEFycmF5LnByb3RvdHlwZS5wdXNoID09IG51bGwpIHsKICAgICAgICBBcnJheS5wcm90
b3R5cGUucHVzaCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBhcmd1bWVudHMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgICAgIHRoaXNbdGhpcy5sZW5n
dGhdID0gYXJndW1lbnRzW2ldOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiB0aGlz
Lmxlbmd0aDsKICAgICAgICB9OwogICAgfQoKICAgIFRyaW1QYXRoLnBhcnNlVGVtcGxhdGUgPSBm
dW5jdGlvbiAodG1wbENvbnRlbnQsIG9wdFRtcGxOYW1lLCBvcHRFdGMpIHsKICAgICAgICBpZiAo
b3B0RXRjID09IG51bGwpIHsKICAgICAgICAgICAgb3B0RXRjID0gVHJpbVBhdGgucGFyc2VUZW1w
bGF0ZV9ldGM7CiAgICAgICAgfQogICAgICAgIHZhciBmdW5jU3JjID0gcGFyc2UodG1wbENvbnRl
bnQsIG9wdFRtcGxOYW1lLCBvcHRFdGMpOwogICAgICAgIHZhciBmdW5jID0gVHJpbVBhdGguZXZh
bEV4KGZ1bmNTcmMsIG9wdFRtcGxOYW1lLCAxKTsKICAgICAgICBpZiAoZnVuYyAhPSBudWxsKSB7
CiAgICAgICAgICAgIHJldHVybiBuZXcgb3B0RXRjLlRlbXBsYXRlKG9wdFRtcGxOYW1lLCB0bXBs
Q29udGVudCwgZnVuY1NyYywgZnVuYywgb3B0RXRjKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJu
IG51bGw7CiAgICB9CgogICAgdmFyIGV4Y2VwdGlvbkRldGFpbHMgPSBmdW5jdGlvbiAoZSkgewog
ICAgICAgICAgICByZXR1cm4gKGUudG9TdHJpbmcoKSkgKyAiO1xuICIgKyAoZS5tZXNzYWdlKSAr
ICI7XG4gIiArIChlLm5hbWUpICsgIjtcbiAiICsgKGUuc3RhY2sgfHwgJ25vIHN0YWNrIHRyYWNl
JykgKyAiO1xuICIgKyAoZS5kZXNjcmlwdGlvbiB8fCAnbm8gZnVydGhlciBkZXNjcmlwdGlvbicp
ICsgIjtcbiAiICsgKGUuZmlsZU5hbWUgfHwgJ25vIGZpbGUgbmFtZScpICsgIjtcbiAiICsgKGUu
bGluZU51bWJlciB8fCAnbm8gbGluZSBudW1iZXInKTsKICAgICAgICB9CgogICAgdHJ5IHsKICAg
ICAgICBTdHJpbmcucHJvdG90eXBlLnByb2Nlc3MgPSBmdW5jdGlvbiAoY29udGV4dCwgb3B0Rmxh
Z3MpIHsKICAgICAgICAgICAgdmFyIHRlbXBsYXRlID0gVHJpbVBhdGgucGFyc2VUZW1wbGF0ZSh0
aGlzLCBudWxsKTsKICAgICAgICAgICAgaWYgKHRlbXBsYXRlICE9IG51bGwpIHsKICAgICAgICAg
ICAgICAgIHJldHVybiB0ZW1wbGF0ZS5wcm9jZXNzKGNvbnRleHQsIG9wdEZsYWdzKTsKICAgICAg
ICAgICAgfQogICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CiAgICB9IGNhdGNoIChl
KSB7IC8vIFN3YWxsb3cgZXhjZXB0aW9uLCBzdWNoIGFzIHdoZW4gU3RyaW5nLnByb3RvdHlwZSBp
cyBzZWFsZWQuCiAgICB9CgogICAgVHJpbVBhdGgucGFyc2VUZW1wbGF0ZV9ldGMgPSB7fTsgLy8g
RXhwb3NlZCBmb3IgZXh0ZW5zaWJpbGl0eS4KICAgIFRyaW1QYXRoLnBhcnNlVGVtcGxhdGVfZXRj
LnN0YXRlbWVudFRhZyA9ICJmb3JlbHNlfGZvcnxpZnxlbHNlaWZ8ZWxzZXx2YXJ8bWFjcm8iOwog
ICAgVHJpbVBhdGgucGFyc2VUZW1wbGF0ZV9ldGMuc3RhdGVtZW50RGVmID0geyAvLyBMb29rdXAg
dGFibGUgZm9yIHN0YXRlbWVudCB0YWdzLgogICAgICAgICJpZiI6IHsKICAgICAgICAgICAgZGVs
dGE6IDEsCiAgICAgICAgICAgIHByZWZpeDogImlmICgiLAogICAgICAgICAgICBzdWZmaXg6ICIp
IHsiLAogICAgICAgICAgICBwYXJhbU1pbjogMQogICAgICAgIH0sCiAgICAgICAgImVsc2UiOiB7
CiAgICAgICAgICAgIGRlbHRhOiAwLAogICAgICAgICAgICBwcmVmaXg6ICJ9IGVsc2UgeyIKICAg
ICAgICB9LAogICAgICAgICJlbHNlaWYiOiB7CiAgICAgICAgICAgIGRlbHRhOiAwLAogICAgICAg
ICAgICBwcmVmaXg6ICJ9IGVsc2UgaWYgKCIsCiAgICAgICAgICAgIHN1ZmZpeDogIikgeyIsCiAg
ICAgICAgICAgIHBhcmFtRGVmYXVsdDogInRydWUiCiAgICAgICAgfSwKICAgICAgICAiL2lmIjog
ewogICAgICAgICAgICBkZWx0YTogLTEsCiAgICAgICAgICAgIHByZWZpeDogIn0iCiAgICAgICAg
fSwKICAgICAgICAiZm9yIjogewogICAgICAgICAgICBkZWx0YTogMSwKICAgICAgICAgICAgcGFy
YW1NaW46IDMsCiAgICAgICAgICAgIHByZWZpeEZ1bmM6IGZ1bmN0aW9uIChzdG10UGFydHMsIHN0
YXRlLCB0bXBsTmFtZSwgZXRjKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RtdFBhcnRzWzJdICE9
ICJpbiIpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXRjLlBhcnNlRXJyb3IodG1w
bE5hbWUsIHN0YXRlLmxpbmUsICJiYWQgZm9yIGxvb3Agc3RhdGVtZW50OiAiICsgc3RtdFBhcnRz
LmpvaW4oJyAnKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB2YXIgaXRlclZh
ciA9IHN0bXRQYXJ0c1sxXTsKICAgICAgICAgICAgICAgIHZhciBsaXN0VmFyID0gIl9fTElTVF9f
IiArIGl0ZXJWYXI7CiAgICAgICAgICAgICAgICByZXR1cm4gWyJ2YXIgIiwgbGlzdFZhciwgIiA9
ICIsIHN0bXRQYXJ0c1szXSwgIjsiLAogICAgICAgICAgICAgICAgLy8gRml4IGZyb20gUm9zcyBT
aGF1bGwgZm9yIGhhc2ggbG9vcGluZywgbWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBhbiBhcnJheSBv
ZiBsb29wIGxlbmd0aHMgdG8gdHJlYXQgbGlrZSBhIHN0YWNrLgogICAgICAgICAgICAgICAgInZh
ciBfX0xFTkdUSF9TVEFDS19fOyIsICJpZiAodHlwZW9mKF9fTEVOR1RIX1NUQUNLX18pID09ICd1
bmRlZmluZWQnIHx8ICFfX0xFTkdUSF9TVEFDS19fLmxlbmd0aCkgX19MRU5HVEhfU1RBQ0tfXyA9
IG5ldyBBcnJheSgpOyIsICJfX0xFTkdUSF9TVEFDS19fW19fTEVOR1RIX1NUQUNLX18ubGVuZ3Ro
XSA9IDA7IiwgLy8gUHVzaCBhIG5ldyBmb3ItbG9vcCBvbnRvIHRoZSBzdGFjayBvZiBsb29wIGxl
bmd0aHMuCiAgICAgICAgICAgICAgICAiaWYgKCgiLCBsaXN0VmFyLCAiKSAhPSBudWxsKSB7ICIs
ICJ2YXIgIiwgaXRlclZhciwgIl9jdCA9IDA7IiwgLy8gaXRlclZhcl9jdCB2YXJpYWJsZSwgYWRk
ZWQgYnkgQi4gQml0dG1hbgogICAgICAgICAgICAgICAgImZvciAodmFyICIsIGl0ZXJWYXIsICJf
aW5kZXggaW4gIiwgbGlzdFZhciwgIikgeyAiLCBpdGVyVmFyLCAiX2N0Kys7IiwgImlmICh0eXBl
b2YoIiwgbGlzdFZhciwgIlsiLCBpdGVyVmFyLCAiX2luZGV4XSkgPT0gJ2Z1bmN0aW9uJykge2Nv
bnRpbnVlO30iLCAvLyBJRSA1LnggZml4IGZyb20gSWdvciBQb3RlcnlhZXYuCiAgICAgICAgICAg
ICAgICAiX19MRU5HVEhfU1RBQ0tfX1tfX0xFTkdUSF9TVEFDS19fLmxlbmd0aCAtIDFdKys7Iiwg
InZhciAiLCBpdGVyVmFyLCAiID0gIiwgbGlzdFZhciwgIlsiLCBpdGVyVmFyLCAiX2luZGV4XTsi
XS5qb2luKCIiKTsKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImZvcmVsc2UiOiB7
CiAgICAgICAgICAgIGRlbHRhOiAwLAogICAgICAgICAgICBwcmVmaXg6ICJ9IH0gaWYgKF9fTEVO
R1RIX1NUQUNLX19bX19MRU5HVEhfU1RBQ0tfXy5sZW5ndGggLSAxXSA9PSAwKSB7IGlmICgiLAog
ICAgICAgICAgICBzdWZmaXg6ICIpIHsiLAogICAgICAgICAgICBwYXJhbURlZmF1bHQ6ICJ0cnVl
IgogICAgICAgIH0sCiAgICAgICAgIi9mb3IiOiB7CiAgICAgICAgICAgIGRlbHRhOiAtMSwKICAg
ICAgICAgICAgcHJlZml4OiAifSB9OyBkZWxldGUgX19MRU5HVEhfU1RBQ0tfX1tfX0xFTkdUSF9T
VEFDS19fLmxlbmd0aCAtIDFdOyIKICAgICAgICB9LAogICAgICAgIC8vIFJlbW92ZSB0aGUganVz
dC1maW5pc2hlZCBmb3ItbG9vcCBmcm9tIHRoZSBzdGFjayBvZiBsb29wIGxlbmd0aHMuCiAgICAg
ICAgInZhciI6IHsKICAgICAgICAgICAgZGVsdGE6IDAsCiAgICAgICAgICAgIHByZWZpeDogInZh
ciAiLAogICAgICAgICAgICBzdWZmaXg6ICI7IgogICAgICAgIH0sCiAgICAgICAgIm1hY3JvIjog
ewogICAgICAgICAgICBkZWx0YTogMSwKICAgICAgICAgICAgcHJlZml4RnVuYzogZnVuY3Rpb24g
KHN0bXRQYXJ0cywgc3RhdGUsIHRtcGxOYW1lLCBldGMpIHsKICAgICAgICAgICAgICAgIHZhciBt
YWNyb05hbWUgPSBzdG10UGFydHNbMV0uc3BsaXQoJygnKVswXTsKICAgICAgICAgICAgICAgIHJl
dHVybiBbInZhciAiLCBtYWNyb05hbWUsICIgPSBmdW5jdGlvbiIsIHN0bXRQYXJ0cy5zbGljZSgx
KS5qb2luKCcgJykuc3Vic3RyaW5nKG1hY3JvTmFtZS5sZW5ndGgpLCAieyB2YXIgX09VVF9hcnIg
PSBbXTsgdmFyIF9PVVQgPSB7IHdyaXRlOiBmdW5jdGlvbihtKSB7IGlmIChtKSBfT1VUX2Fyci5w
dXNoKG0pOyB9IH07ICJdLmpvaW4oJycpOwogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAg
ICAiL21hY3JvIjogewogICAgICAgICAgICBkZWx0YTogLTEsCiAgICAgICAgICAgIHByZWZpeDog
IiByZXR1cm4gX09VVF9hcnIuam9pbignJyk7IH07IgogICAgICAgIH0KICAgIH0KICAgIFRyaW1Q
YXRoLnBhcnNlVGVtcGxhdGVfZXRjLm1vZGlmaWVyRGVmID0gewogICAgICAgICJlYXQiOiBmdW5j
dGlvbiAodikgewogICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgfSwKICAgICAgICAiZXNj
YXBlIjogZnVuY3Rpb24gKHMpIHsKICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhzKS5yZXBsYWNl
KC8mL2csICImYW1wOyIpLnJlcGxhY2UoLzwvZywgIiZsdDsiKS5yZXBsYWNlKC8+L2csICImZ3Q7
Iik7CiAgICAgICAgfSwKICAgICAgICAiY2FwaXRhbGl6ZSI6IGZ1bmN0aW9uIChzKSB7CiAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcocykudG9VcHBlckNhc2UoKTsKICAgICAgICB9LAogICAgICAg
ICJkZWZhdWx0IjogZnVuY3Rpb24gKHMsIGQpIHsKICAgICAgICAgICAgcmV0dXJuIHMgIT0gbnVs
bCA/IHMgOiBkOwogICAgICAgIH0KICAgIH0KICAgIFRyaW1QYXRoLnBhcnNlVGVtcGxhdGVfZXRj
Lm1vZGlmaWVyRGVmLmggPSBUcmltUGF0aC5wYXJzZVRlbXBsYXRlX2V0Yy5tb2RpZmllckRlZi5l
c2NhcGU7CgogICAgVHJpbVBhdGgucGFyc2VUZW1wbGF0ZV9ldGMuVGVtcGxhdGUgPSBmdW5jdGlv
biAodG1wbE5hbWUsIHRtcGxDb250ZW50LCBmdW5jU3JjLCBmdW5jLCBldGMpIHsKICAgICAgICB0
aGlzLnByb2Nlc3MgPSBmdW5jdGlvbiAoY29udGV4dCwgZmxhZ3MpIHsKICAgICAgICAgICAgaWYg
KGNvbnRleHQgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgY29udGV4dCA9IHt9OwogICAgICAg
ICAgICB9CiAgICAgICAgICAgIGlmIChjb250ZXh0Ll9NT0RJRklFUlMgPT0gbnVsbCkgewogICAg
ICAgICAgICAgICAgY29udGV4dC5fTU9ESUZJRVJTID0ge307CiAgICAgICAgICAgIH0KICAgICAg
ICAgICAgaWYgKGNvbnRleHQuZGVmaW5lZCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICBjb250
ZXh0LmRlZmluZWQgPSBmdW5jdGlvbiAoc3RyKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IChjb250ZXh0W3N0cl0gIT0gdW5kZWZpbmVkKTsKICAgICAgICAgICAgICAgIH07CiAgICAgICAg
ICAgIH0KICAgICAgICAgICAgZm9yICh2YXIgayBpbiBldGMubW9kaWZpZXJEZWYpIHsKICAgICAg
ICAgICAgICAgIGlmIChjb250ZXh0Ll9NT0RJRklFUlNba10gPT0gbnVsbCkgewogICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQuX01PRElGSUVSU1trXSA9IGV0Yy5tb2RpZmllckRlZltrXTsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoZmxhZ3MgPT0gbnVs
bCkgewogICAgICAgICAgICAgICAgZmxhZ3MgPSB7fTsKICAgICAgICAgICAgfQogICAgICAgICAg
ICB2YXIgcmVzdWx0QXJyID0gW107CiAgICAgICAgICAgIHZhciByZXN1bHRPdXQgPSB7CiAgICAg
ICAgICAgICAgICB3cml0ZTogZnVuY3Rpb24gKG0pIHsKICAgICAgICAgICAgICAgICAgICByZXN1
bHRBcnIucHVzaChtKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKICAgICAgICAg
ICAgdHJ5IHsKICAgICAgICAgICAgICAgIGZ1bmMocmVzdWx0T3V0LCBjb250ZXh0LCBmbGFncyk7
CiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgIGlmIChmbGFncy50aHJv
d0V4Y2VwdGlvbnMgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgIHRocm93IGU7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IFN0cmluZyhyZXN1
bHRBcnIuam9pbigiIikgKyAiW0VSUk9SOiB0ZW1wbGF0ZTogPHByZT4iICsgZXhjZXB0aW9uRGV0
YWlscyhlKSArICI8L3ByZT5dIik7CiAgICAgICAgICAgICAgICByZXN1bHRbImV4Y2VwdGlvbiJd
ID0gZTsKICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgIH0KICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdEFyci5qb2luKCIiKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5u
YW1lID0gdG1wbE5hbWU7CiAgICAgICAgdGhpcy5zb3VyY2UgPSB0bXBsQ29udGVudDsKICAgICAg
ICB0aGlzLnNvdXJjZUZ1bmMgPSBmdW5jU3JjOwogICAgICAgIHRoaXMudG9TdHJpbmcgPSBmdW5j
dGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVybiAiVHJpbVBhdGguVGVtcGxhdGUgWyIgKyB0bXBs
TmFtZSArICJdIjsKICAgICAgICB9CiAgICB9CiAgICBUcmltUGF0aC5wYXJzZVRlbXBsYXRlX2V0
Yy5QYXJzZUVycm9yID0gZnVuY3Rpb24gKG5hbWUsIGxpbmUsIG1lc3NhZ2UpIHsKICAgICAgICB0
aGlzLm5hbWUgPSBuYW1lOwogICAgICAgIHRoaXMubGluZSA9IGxpbmU7CiAgICAgICAgdGhpcy5t
ZXNzYWdlID0gbWVzc2FnZTsKICAgIH0KICAgIFRyaW1QYXRoLnBhcnNlVGVtcGxhdGVfZXRjLlBh
cnNlRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVy
biAoIlRyaW1QYXRoIHRlbXBsYXRlIFBhcnNlRXJyb3IgaW4gIiArIHRoaXMubmFtZSArICI6IGxp
bmUgIiArIHRoaXMubGluZSArICIsICIgKyB0aGlzLm1lc3NhZ2UpOwogICAgfQoKICAgIHZhciBw
YXJzZSA9IGZ1bmN0aW9uIChib2R5LCB0bXBsTmFtZSwgZXRjKSB7CiAgICAgICAgICAgIGJvZHkg
PSBjbGVhbldoaXRlU3BhY2UoYm9keSk7CiAgICAgICAgICAgIHZhciBmdW5jVGV4dCA9IFsidmFy
IFRyaW1QYXRoX1RlbXBsYXRlX1RFTVAgPSBmdW5jdGlvbihfT1VULCBfQ09OVEVYVCwgX0ZMQUdT
KSB7IHdpdGggKF9DT05URVhUKSB7Il07CiAgICAgICAgICAgIHZhciBzdGF0ZSA9IHsKICAgICAg
ICAgICAgICAgIHN0YWNrOiBbXSwKICAgICAgICAgICAgICAgIGxpbmU6IDEKICAgICAgICAgICAg
fTsgLy8gVE9ETzogRml4IGxpbmUgbnVtYmVyIGNvdW50aW5nLgogICAgICAgICAgICB2YXIgZW5k
U3RtdFByZXYgPSAtMTsKICAgICAgICAgICAgd2hpbGUgKGVuZFN0bXRQcmV2ICsgMSA8IGJvZHku
bGVuZ3RoKSB7CiAgICAgICAgICAgICAgICB2YXIgYmVnU3RtdCA9IGVuZFN0bXRQcmV2OwogICAg
ICAgICAgICAgICAgLy8gU2NhbiB1bnRpbCB3ZSBmaW5kIHNvbWUgc3RhdGVtZW50IG1hcmt1cC4K
ICAgICAgICAgICAgICAgIGJlZ1N0bXQgPSBib2R5LmluZGV4T2YoInsiLCBiZWdTdG10ICsgMSk7
CiAgICAgICAgICAgICAgICB3aGlsZSAoYmVnU3RtdCA+PSAwKSB7CiAgICAgICAgICAgICAgICAg
ICAgdmFyIGVuZFN0bXQgPSBib2R5LmluZGV4T2YoJ30nLCBiZWdTdG10ICsgMSk7CiAgICAgICAg
ICAgICAgICAgICAgdmFyIHN0bXQgPSBib2R5LnN1YnN0cmluZyhiZWdTdG10LCBlbmRTdG10KTsK
ICAgICAgICAgICAgICAgICAgICB2YXIgYmxvY2tyeCA9IHN0bXQubWF0Y2goL15ceyhjZGF0YXxt
aW5pZnl8ZXZhbCkvKTsgLy8gRnJvbSBCLiBCaXR0bWFuLCBtaW5pZnkvZXZhbC9jZGF0YSBpbXBs
ZW1lbnRhdGlvbi4KICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2tyeCkgewogICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgYmxvY2tUeXBlID0gYmxvY2tyeFsxXTsKICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIGJsb2NrTWFya2VyQmVnID0gYmVnU3RtdCArIGJsb2NrVHlwZS5sZW5ndGgg
KyAxOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmxvY2tNYXJrZXJFbmQgPSBib2R5Lmlu
ZGV4T2YoJ30nLCBibG9ja01hcmtlckJlZyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChi
bG9ja01hcmtlckVuZCA+PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmxv
Y2tNYXJrZXI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2tNYXJrZXJFbmQg
LSBibG9ja01hcmtlckJlZyA8PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YmxvY2tNYXJrZXIgPSAiey8iICsgYmxvY2tUeXBlICsgIn0iOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja01h
cmtlciA9IGJvZHkuc3Vic3RyaW5nKGJsb2NrTWFya2VyQmVnICsgMSwgYmxvY2tNYXJrZXJFbmQp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBibG9ja0VuZCA9IGJvZHkuaW5kZXhPZihibG9ja01hcmtlciwgYmxvY2tNYXJrZXJF
bmQgKyAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChibG9ja0VuZCA+PSAwKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdFNlY3Rpb25UZXh0KGJvZHkuc3Vi
c3RyaW5nKGVuZFN0bXRQcmV2ICsgMSwgYmVnU3RtdCksIGZ1bmNUZXh0KTsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIGJsb2NrVGV4dCA9IGJvZHkuc3Vic3RyaW5nKGJsb2Nr
TWFya2VyRW5kICsgMSwgYmxvY2tFbmQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChibG9ja1R5cGUgPT0gJ2NkYXRhJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbWl0VGV4dChibG9ja1RleHQsIGZ1bmNUZXh0KTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJsb2NrVHlwZSA9PSAnbWluaWZ5JykgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0VGV4dChzY3J1YldoaXRlU3BhY2UoYmxv
Y2tUZXh0KSwgZnVuY1RleHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoYmxvY2tUeXBlID09ICdldmFsJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoYmxvY2tUZXh0ICE9IG51bGwgJiYgYmxvY2tUZXh0Lmxlbmd0aCA+IDApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNUZXh0LnB1c2goJ19P
VVQud3JpdGUoIChmdW5jdGlvbigpIHsgJyArIGJsb2NrVGV4dCArICcgfSkoKSApOycpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ1N0bXQgPSBlbmRT
dG10UHJldiA9IGJsb2NrRW5kICsgYmxvY2tNYXJrZXIubGVuZ3RoIC0gMTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoYm9keS5jaGFyQXQoYmVnU3RtdCAtIDEpICE9ICckJyAmJiAvLyBO
b3QgYW4gZXhwcmVzc2lvbiBvciBiYWNrc2xhc2hlZCwKICAgICAgICAgICAgICAgICAgICBib2R5
LmNoYXJBdChiZWdTdG10IC0gMSkgIT0gJ1xcJykgeyAvLyBzbyBjaGVjayBpZiBpdCBpcyBhIHN0
YXRlbWVudCB0YWcuCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAoYm9keS5j
aGFyQXQoYmVnU3RtdCArIDEpID09ICcvJyA/IDIgOiAxKTsgLy8gQ2xvc2UgdGFncyBvZmZzZXQg
b2YgMiBza2lwcyAnLycuCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEwIGlzIGxhcmdlciB0
aGFuIG1heGltdW0gc3RhdGVtZW50IHRhZyBsZW5ndGguCiAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChib2R5LnN1YnN0cmluZyhiZWdTdG10ICsgb2Zmc2V0LCBiZWdTdG10ICsgMTAgKyBvZmZz
ZXQpLnNlYXJjaChUcmltUGF0aC5wYXJzZVRlbXBsYXRlX2V0Yy5zdGF0ZW1lbnRUYWcpID09IDAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBGb3VuZCBhIG1hdGNoLgog
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgIGJlZ1N0bXQgPSBib2R5LmluZGV4T2YoInsiLCBiZWdTdG10ICsgMSk7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoYmVnU3RtdCA8IDApIHsKICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHZhciBl
bmRTdG10ID0gYm9keS5pbmRleE9mKCJ9IiwgYmVnU3RtdCArIDEpOyAvLyBJbiAiYXtmb3J9YyIs
IGVuZFN0bXQgd2lsbCBiZSA1LgogICAgICAgICAgICAgICAgaWYgKGVuZFN0bXQgPCAwKSB7CiAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICBlbWl0U2VjdGlvblRleHQoYm9keS5zdWJzdHJpbmcoZW5kU3RtdFByZXYgKyAxLCBiZWdTdG10
KSwgZnVuY1RleHQpOwogICAgICAgICAgICAgICAgZW1pdFN0YXRlbWVudChib2R5LnN1YnN0cmlu
ZyhiZWdTdG10LCBlbmRTdG10ICsgMSksIHN0YXRlLCBmdW5jVGV4dCwgdG1wbE5hbWUsIGV0Yyk7
CiAgICAgICAgICAgICAgICBlbmRTdG10UHJldiA9IGVuZFN0bXQ7CiAgICAgICAgICAgIH0KICAg
ICAgICAgICAgZW1pdFNlY3Rpb25UZXh0KGJvZHkuc3Vic3RyaW5nKGVuZFN0bXRQcmV2ICsgMSks
IGZ1bmNUZXh0KTsKICAgICAgICAgICAgaWYgKHN0YXRlLnN0YWNrLmxlbmd0aCAhPSAwKSB7CiAg
ICAgICAgICAgICAgICB0aHJvdyBuZXcgZXRjLlBhcnNlRXJyb3IodG1wbE5hbWUsIHN0YXRlLmxp
bmUsICJ1bmNsb3NlZCwgdW5tYXRjaGVkIHN0YXRlbWVudChzKTogIiArIHN0YXRlLnN0YWNrLmpv
aW4oIiwiKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY1RleHQucHVzaCgifX07IFRy
aW1QYXRoX1RlbXBsYXRlX1RFTVAiKTsKICAgICAgICAgICAgcmV0dXJuIGZ1bmNUZXh0LmpvaW4o
IiIpOwogICAgICAgIH0KCiAgICB2YXIgZW1pdFN0YXRlbWVudCA9IGZ1bmN0aW9uIChzdG10U3Ry
LCBzdGF0ZSwgZnVuY1RleHQsIHRtcGxOYW1lLCBldGMpIHsKICAgICAgICAgICAgdmFyIHBhcnRz
ID0gc3RtdFN0ci5zbGljZSgxLCAtMSkuc3BsaXQoJyAnKTsKICAgICAgICAgICAgdmFyIHN0bXQg
PSBldGMuc3RhdGVtZW50RGVmW3BhcnRzWzBdXTsgLy8gSGVyZSwgcGFydHNbMF0gPT0gZm9yL2lm
L2Vsc2UvLi4uCiAgICAgICAgICAgIGlmIChzdG10ID09IG51bGwpIHsgLy8gTm90IGEgcmVhbCBz
dGF0ZW1lbnQuCiAgICAgICAgICAgICAgICBlbWl0U2VjdGlvblRleHQoc3RtdFN0ciwgZnVuY1Rl
eHQpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlm
IChzdG10LmRlbHRhIDwgMCkgewogICAgICAgICAgICAgICAgaWYgKHN0YXRlLnN0YWNrLmxlbmd0
aCA8PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGV0Yy5QYXJzZUVycm9yKHRt
cGxOYW1lLCBzdGF0ZS5saW5lLCAiY2xvc2UgdGFnIGRvZXMgbm90IG1hdGNoIGFueSBwcmV2aW91
cyBzdGF0ZW1lbnQ6ICIgKyBzdG10U3RyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIHN0YXRlLnN0YWNrLnBvcCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzdG10
LmRlbHRhID4gMCkgewogICAgICAgICAgICAgICAgc3RhdGUuc3RhY2sucHVzaChzdG10U3RyKTsK
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKHN0bXQucGFyYW1NaW4gIT0gbnVsbCAmJiBz
dG10LnBhcmFtTWluID49IHBhcnRzLmxlbmd0aCkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3
IGV0Yy5QYXJzZUVycm9yKHRtcGxOYW1lLCBzdGF0ZS5saW5lLCAic3RhdGVtZW50IG5lZWRzIG1v
cmUgcGFyYW1ldGVyczogIiArIHN0bXRTdHIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlm
IChzdG10LnByZWZpeEZ1bmMgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgZnVuY1RleHQucHVz
aChzdG10LnByZWZpeEZ1bmMocGFydHMsIHN0YXRlLCB0bXBsTmFtZSwgZXRjKSk7CiAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBmdW5jVGV4dC5wdXNoKHN0bXQucHJlZml4KTsK
ICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoc3RtdC5zdWZmaXggIT0gbnVsbCkgewogICAg
ICAgICAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA8PSAxKSB7CiAgICAgICAgICAgICAgICAgICAg
aWYgKHN0bXQucGFyYW1EZWZhdWx0ICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ZnVuY1RleHQucHVzaChzdG10LnBhcmFtRGVmYXVsdCk7CiAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0g
MTsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChp
ID4gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY1RleHQucHVzaCgnICcpOwog
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNUZXh0
LnB1c2gocGFydHNbaV0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIGZ1bmNUZXh0LnB1c2goc3RtdC5zdWZmaXgpOwogICAgICAgICAgICB9
CiAgICAgICAgfQoKICAgIHZhciBlbWl0U2VjdGlvblRleHQgPSBmdW5jdGlvbiAodGV4dCwgZnVu
Y1RleHQpIHsKICAgICAgICAgICAgaWYgKHRleHQubGVuZ3RoIDw9IDApIHsKICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgbmxQcmVmaXggPSAwOyAv
LyBJbmRleCB0byBmaXJzdCBub24tbmV3bGluZSBpbiBwcmVmaXguCiAgICAgICAgICAgIHZhciBu
bFN1ZmZpeCA9IHRleHQubGVuZ3RoIC0gMTsgLy8gSW5kZXggdG8gZmlyc3Qgbm9uLXNwYWNlL3Rh
YiBpbiBzdWZmaXguCiAgICAgICAgICAgIHdoaWxlIChubFByZWZpeCA8IHRleHQubGVuZ3RoICYm
ICh0ZXh0LmNoYXJBdChubFByZWZpeCkgPT0gJ1xuJykpIHsKICAgICAgICAgICAgICAgIG5sUHJl
Zml4Kys7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgd2hpbGUgKG5sU3VmZml4ID49IDAgJiYg
KHRleHQuY2hhckF0KG5sU3VmZml4KSA9PSAnICcgfHwgdGV4dC5jaGFyQXQobmxTdWZmaXgpID09
ICdcdCcpKSB7CiAgICAgICAgICAgICAgICBubFN1ZmZpeC0tOwogICAgICAgICAgICB9CiAgICAg
ICAgICAgIGlmIChubFN1ZmZpeCA8IG5sUHJlZml4KSB7CiAgICAgICAgICAgICAgICBubFN1ZmZp
eCA9IG5sUHJlZml4OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChubFByZWZpeCA+IDAp
IHsKICAgICAgICAgICAgICAgIGZ1bmNUZXh0LnB1c2goJ2lmIChfRkxBR1Mua2VlcFdoaXRlc3Bh
Y2UgPT0gdHJ1ZSkgX09VVC53cml0ZSgiJyk7CiAgICAgICAgICAgICAgICB2YXIgcyA9IHRleHQu
c3Vic3RyaW5nKDAsIG5sUHJlZml4KS5yZXBsYWNlKCdcbicsICdcXG4nKTsgLy8gQSBtYWNybyBJ
RSBmaXggZnJvbSBCSmVzc2VuLgogICAgICAgICAgICAgICAgaWYgKHMuY2hhckF0KHMubGVuZ3Ro
IC0gMSkgPT0gJ1xuJykgewogICAgICAgICAgICAgICAgICAgIHMgPSBzLnN1YnN0cmluZygwLCBz
Lmxlbmd0aCAtIDEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZnVuY1RleHQu
cHVzaChzKTsKICAgICAgICAgICAgICAgIGZ1bmNUZXh0LnB1c2goJyIpOycpOwogICAgICAgICAg
ICB9CiAgICAgICAgICAgIHZhciBsaW5lcyA9IHRleHQuc3Vic3RyaW5nKG5sUHJlZml4LCBubFN1
ZmZpeCArIDEpLnNwbGl0KCdcbicpOwogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxp
bmVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBlbWl0U2VjdGlvblRleHRMaW5lKGxp
bmVzW2ldLCBmdW5jVGV4dCk7CiAgICAgICAgICAgICAgICBpZiAoaSA8IGxpbmVzLmxlbmd0aCAt
IDEpIHsKICAgICAgICAgICAgICAgICAgICBmdW5jVGV4dC5wdXNoKCdfT1VULndyaXRlKCJcXG4i
KTtcbicpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChu
bFN1ZmZpeCArIDEgPCB0ZXh0Lmxlbmd0aCkgewogICAgICAgICAgICAgICAgZnVuY1RleHQucHVz
aCgnaWYgKF9GTEFHUy5rZWVwV2hpdGVzcGFjZSA9PSB0cnVlKSBfT1VULndyaXRlKCInKTsKICAg
ICAgICAgICAgICAgIHZhciBzID0gdGV4dC5zdWJzdHJpbmcobmxTdWZmaXggKyAxKS5yZXBsYWNl
KCdcbicsICdcXG4nKTsKICAgICAgICAgICAgICAgIGlmIChzLmNoYXJBdChzLmxlbmd0aCAtIDEp
ID09ICdcbicpIHsKICAgICAgICAgICAgICAgICAgICBzID0gcy5zdWJzdHJpbmcoMCwgcy5sZW5n
dGggLSAxKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZ1bmNUZXh0LnB1c2go
cyk7CiAgICAgICAgICAgICAgICBmdW5jVGV4dC5wdXNoKCciKTsnKTsKICAgICAgICAgICAgfQog
ICAgICAgIH0KCiAgICB2YXIgZW1pdFNlY3Rpb25UZXh0TGluZSA9IGZ1bmN0aW9uIChsaW5lLCBm
dW5jVGV4dCkgewogICAgICAgICAgICB2YXIgZW5kTWFya1ByZXYgPSAnfSc7CiAgICAgICAgICAg
IHZhciBlbmRFeHByUHJldiA9IC0xOwogICAgICAgICAgICB3aGlsZSAoZW5kRXhwclByZXYgKyBl
bmRNYXJrUHJldi5sZW5ndGggPCBsaW5lLmxlbmd0aCkgewogICAgICAgICAgICAgICAgdmFyIGJl
Z01hcmsgPSAiJHsiLAogICAgICAgICAgICAgICAgICAgIGVuZE1hcmsgPSAifSI7CiAgICAgICAg
ICAgICAgICB2YXIgYmVnRXhwciA9IGxpbmUuaW5kZXhPZihiZWdNYXJrLCBlbmRFeHByUHJldiAr
IGVuZE1hcmtQcmV2Lmxlbmd0aCk7IC8vIEluICJhJHtifWMiLCBiZWdFeHByID09IDEKICAgICAg
ICAgICAgICAgIGlmIChiZWdFeHByIDwgMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGxpbmUuY2hhckF0KGJlZ0V4cHIg
KyAyKSA9PSAnJScpIHsKICAgICAgICAgICAgICAgICAgICBiZWdNYXJrID0gIiR7JSI7CiAgICAg
ICAgICAgICAgICAgICAgZW5kTWFyayA9ICIlfSI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICB2YXIgZW5kRXhwciA9IGxpbmUuaW5kZXhPZihlbmRNYXJrLCBiZWdFeHByICsgYmVn
TWFyay5sZW5ndGgpOyAvLyBJbiAiYSR7Yn1jIiwgZW5kRXhwciA9PSA0OwogICAgICAgICAgICAg
ICAgaWYgKGVuZEV4cHIgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICBlbWl0VGV4dChsaW5lLnN1YnN0cmluZyhlbmRFeHBy
UHJldiArIGVuZE1hcmtQcmV2Lmxlbmd0aCwgYmVnRXhwciksIGZ1bmNUZXh0KTsKICAgICAgICAg
ICAgICAgIC8vIEV4YW1wbGU6IGV4cHJzID09ICdmaXJzdE5hbWV8ZGVmYXVsdDoiSm9obiBEb2Ui
fGNhcGl0YWxpemUnLnNwbGl0KCd8JykKICAgICAgICAgICAgICAgIHZhciBleHByQXJyID0gbGlu
ZS5zdWJzdHJpbmcoYmVnRXhwciArIGJlZ01hcmsubGVuZ3RoLCBlbmRFeHByKS5yZXBsYWNlKC9c
fFx8L2csICIjQEAjIikuc3BsaXQoJ3wnKTsKICAgICAgICAgICAgICAgIGZvciAodmFyIGsgaW4g
ZXhwckFycikgewogICAgICAgICAgICAgICAgICAgIGlmIChleHByQXJyW2tdLnJlcGxhY2UpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgZXhwckFycltrXSA9IGV4cHJBcnJba10ucmVwbGFjZSgv
I0BAIy9nLCAnfHwnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICBmdW5jVGV4dC5wdXNoKCdfT1VULndyaXRlKCcpOwogICAgICAgICAgICAg
ICAgZW1pdEV4cHJlc3Npb24oZXhwckFyciwgZXhwckFyci5sZW5ndGggLSAxLCBmdW5jVGV4dCk7
CiAgICAgICAgICAgICAgICBmdW5jVGV4dC5wdXNoKCcpOycpOwogICAgICAgICAgICAgICAgZW5k
RXhwclByZXYgPSBlbmRFeHByOwogICAgICAgICAgICAgICAgZW5kTWFya1ByZXYgPSBlbmRNYXJr
OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVtaXRUZXh0KGxpbmUuc3Vic3RyaW5nKGVuZEV4
cHJQcmV2ICsgZW5kTWFya1ByZXYubGVuZ3RoKSwgZnVuY1RleHQpOwogICAgICAgIH0KCiAgICB2
YXIgZW1pdFRleHQgPSBmdW5jdGlvbiAodGV4dCwgZnVuY1RleHQpIHsKICAgICAgICAgICAgaWYg
KHRleHQgPT0gbnVsbCB8fCB0ZXh0Lmxlbmd0aCA8PSAwKSB7CiAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFwvZywg
J1xcXFwnKTsKICAgICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXG4vZywgJ1xcbicpOwog
ICAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8iL2csICdcXCInKTsKICAgICAgICAgICAg
ZnVuY1RleHQucHVzaCgnX09VVC53cml0ZSgiJyk7CiAgICAgICAgICAgIGZ1bmNUZXh0LnB1c2go
dGV4dCk7CiAgICAgICAgICAgIGZ1bmNUZXh0LnB1c2goJyIpOycpOwogICAgICAgIH0KCiAgICB2
YXIgZW1pdEV4cHJlc3Npb24gPSBmdW5jdGlvbiAoZXhwckFyciwgaW5kZXgsIGZ1bmNUZXh0KSB7
CiAgICAgICAgICAgIC8vIEV4OiBmb298YTp4fGI6eTEseTJ8Yzp6MSx6MiBpcyBlbWl0dGVkIGFz
IGMoYihhKGZvbyx4KSx5MSx5MiksejEsejIpCiAgICAgICAgICAgIHZhciBleHByID0gZXhwckFy
cltpbmRleF07IC8vIEV4OiBleHByQXJyID09IFtmaXJzdE5hbWUsY2FwaXRhbGl6ZSxkZWZhdWx0
OiJKb2huIERvZSJdCiAgICAgICAgICAgIGlmIChpbmRleCA8PSAwKSB7IC8vIEV4OiBleHByICAg
ID09ICdkZWZhdWx0OiJKb2huIERvZSInCiAgICAgICAgICAgICAgICBmdW5jVGV4dC5wdXNoKGV4
cHIpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZh
ciBwYXJ0cyA9IGV4cHIuc3BsaXQoJzonKTsKICAgICAgICAgICAgZnVuY1RleHQucHVzaCgnX01P
RElGSUVSU1siJyk7CiAgICAgICAgICAgIGZ1bmNUZXh0LnB1c2gocGFydHNbMF0pOyAvLyBUaGUg
cGFydHNbMF0gaXMgYSBtb2RpZmllciBmdW5jdGlvbiBuYW1lLCBsaWtlIGNhcGl0YWxpemUuCiAg
ICAgICAgICAgIGZ1bmNUZXh0LnB1c2goJyJdKCcpOwogICAgICAgICAgICBlbWl0RXhwcmVzc2lv
bihleHByQXJyLCBpbmRleCAtIDEsIGZ1bmNUZXh0KTsKICAgICAgICAgICAgaWYgKHBhcnRzLmxl
bmd0aCA+IDEpIHsKICAgICAgICAgICAgICAgIGZ1bmNUZXh0LnB1c2goJywnKTsKICAgICAgICAg
ICAgICAgIGZ1bmNUZXh0LnB1c2gocGFydHNbMV0pOwogICAgICAgICAgICB9CiAgICAgICAgICAg
IGZ1bmNUZXh0LnB1c2goJyknKTsKICAgICAgICB9CgogICAgdmFyIGNsZWFuV2hpdGVTcGFjZSA9
IGZ1bmN0aW9uIChyZXN1bHQpIHsKICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2Uo
L1x0L2csICIgICAgIik7CiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC9cclxu
L2csICJcbiIpOwogICAgICAgICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvXHIvZywgIlxu
Iik7CiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC9eKFxzKlxTKihccytcUysp
KilccyokLywgJyQxJyk7IC8vIFJpZ2h0IHRyaW0gYnkgSWdvciBQb3RlcnlhZXYuCiAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfQoKICAgIHZhciBzY3J1YldoaXRlU3BhY2UgPSBm
dW5jdGlvbiAocmVzdWx0KSB7CiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC9e
XHMrL2csICIiKTsKICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoL1xzKyQvZywg
IiIpOwogICAgICAgICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvXHMrL2csICIgIik7CiAg
ICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC9eKFxzKlxTKihccytcUyspKilccyok
LywgJyQxJyk7IC8vIFJpZ2h0IHRyaW0gYnkgSWdvciBQb3RlcnlhZXYuCiAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgICAgfQoKICAgICAgICAvLyBUaGUgRE9NIGhlbHBlciBmdW5jdGlv
bnMgZGVwZW5kIG9uIERPTS9ESFRNTCwgc28gdGhleSBvbmx5IHdvcmsgaW4gYSBicm93c2VyLgog
ICAgICAgIC8vIEhvd2V2ZXIsIHRoZXNlIGFyZSBub3QgY29uc2lkZXJlZCBjb3JlIHRvIHRoZSBl
bmdpbmUuCiAgICAgICAgLy8KICAgICAgICBUcmltUGF0aC5wYXJzZURPTVRlbXBsYXRlID0gZnVu
Y3Rpb24gKGVsZW1lbnRJZCwgb3B0RG9jdW1lbnQsIG9wdEV0YykgewogICAgICAgICAgICBpZiAo
b3B0RG9jdW1lbnQgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgb3B0RG9jdW1lbnQgPSBkb2N1
bWVudDsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgZWxlbWVudCA9IG9wdERvY3VtZW50
LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7CiAgICAgICAgICAgIHZhciBjb250ZW50ID0gZWxl
bWVudC52YWx1ZTsgLy8gTGlrZSB0ZXh0YXJlYS52YWx1ZS4KICAgICAgICAgICAgaWYgKGNvbnRl
bnQgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgY29udGVudCA9IGVsZW1lbnQuaW5uZXJIVE1M
OyAvLyBMaWtlIHRleHRhcmVhLmlubmVySFRNTC4KICAgICAgICAgICAgfQogICAgICAgICAgICBj
b250ZW50ID0gY29udGVudC5yZXBsYWNlKC8mbHQ7L2csICI8IikucmVwbGFjZSgvJmd0Oy9nLCAi
PiIpOwogICAgICAgICAgICByZXR1cm4gVHJpbVBhdGgucGFyc2VUZW1wbGF0ZShjb250ZW50LCBl
bGVtZW50SWQsIG9wdEV0Yyk7CiAgICAgICAgfQoKICAgIFRyaW1QYXRoLnByb2Nlc3NET01UZW1w
bGF0ZSA9IGZ1bmN0aW9uIChlbGVtZW50SWQsIGNvbnRleHQsIG9wdEZsYWdzLCBvcHREb2N1bWVu
dCwgb3B0RXRjKSB7CiAgICAgICAgcmV0dXJuIFRyaW1QYXRoLnBhcnNlRE9NVGVtcGxhdGUoZWxl
bWVudElkLCBvcHREb2N1bWVudCwgb3B0RXRjKS5wcm9jZXNzKGNvbnRleHQsIG9wdEZsYWdzKTsK
ICAgIH0KfSkoKTsKZG9qby5wcm92aWRlKCJkai51dGlsLkZvcm0iKTsKZGoudXRpbC5Gb3JtID0g
ewogICAgc3VibWl0T25FdmVudDogZnVuY3Rpb24gKGEsIGIsIGMpIHsKICAgICAgICBjID0gYyB8
fCAib25jbGljayI7CiAgICAgICAgYSA9IGRvam8uYnlJZChhKTsKICAgICAgICB2YXIgZSA9IGRv
Y3VtZW50W2JdOwogICAgICAgIGlmIChhID09PSBudWxsIHx8IHR5cGVvZiBlID09PSAidW5kZWZp
bmVkIiB8fCBlID09PSBudWxsKSBjb25zb2xlLndhcm4oIntkai51dGlsLkZvcm19IGVsZW1lbnQg
YW5kL29yIGZvcm0gbm90IGZvdW5kIik7CiAgICAgICAgZWxzZSByZXR1cm4gZG9qby5jb25uZWN0
KGEsIGMsIGZ1bmN0aW9uIChmKSB7CiAgICAgICAgICAgIGRvam8uc3RvcEV2ZW50KGYpOwogICAg
ICAgICAgICBlLnN1Ym1pdCgpCiAgICAgICAgfSkKICAgIH0sCiAgICBjbGVhck9yRGVmYXVsdFZh
bHVlOiBmdW5jdGlvbiAoYSkgewogICAgICAgIGEgPSBkb2pvLmJ5SWQoYSk7CiAgICAgICAgZG9q
by5jb25uZWN0KGEsICJvbmZvY3VzIiwgdGhpcywgZnVuY3Rpb24gKGIpIHsKICAgICAgICAgICAg
YiA9IGIuc3JjRWxlbWVudCB8fCBiLnRhcmdldDsKICAgICAgICAgICAgaWYgKGIudmFsdWUgPT09
IGIuZGVmYXVsdFZhbHVlKSBiLnZhbHVlID0gIiIKICAgICAgICB9KTsKICAgICAgICBkb2pvLmNv
bm5lY3QoYSwgIm9uYmx1ciIsIHRoaXMsIGZ1bmN0aW9uIChiKSB7CiAgICAgICAgICAgIGIgPSBi
LnNyY0VsZW1lbnQgfHwgYi50YXJnZXQ7CiAgICAgICAgICAgIGlmIChiLnZhbHVlID09PSAiIikg
Yi52YWx1ZSA9IGIuZGVmYXVsdFZhbHVlCiAgICAgICAgfSkKICAgIH0sCiAgICBjbGVhclZhbHVl
OiBmdW5jdGlvbiAoYSwgYikgewogICAgICAgIHZhciBjID0gW10sCiAgICAgICAgICAgIGUgPSBk
b2pvLmJ5SWQoYSk7CiAgICAgICAgaWYgKGUgPT09IG51bGwpIHRocm93IEVycm9yKCJ7ZGoudXRp
bC5Gb3JtfSBlbGVtZW50IG5vdCBmb3VuZCIpOwogICAgICAgIHZhciBmID0gZG9qby50cmltKGUu
dmFsdWUpOwogICAgICAgIGlmICh0eXBlb2YgYiA9PSAidW5kZWZpbmVkIikgZS52YWx1ZSA9ICIg
IjsKICAgICAgICBlbHNlIGlmIChkb2pvLmlzQXJyYXkoYikpIGMgPSBiOwogICAgICAgIGVsc2Ug
Yy5wdXNoKGIpOwogICAgICAgIGZvciAodmFyIGcgPSAwLCBoID0gYy5sZW5ndGg7IGcgPCBoOyBn
KyspIGlmIChjW2ddID09IGYpIGUudmFsdWUgPSAiIgogICAgfSwKICAgIGNoZWNrRW1wdHk6IGZ1
bmN0aW9uIChhKSB7CiAgICAgICAgYSA9IGRvam8uYnlJZChhKTsKICAgICAgICBpZiAoYSA9PT0g
bnVsbCkgdGhyb3cgRXJyb3IoIntkai51dGlsLkZvcm19IGVsZW1lbnQgbm90IGZvdW5kIik7CiAg
ICAgICAgcmV0dXJuIGRvam8udHJpbShhLnZhbHVlKSA9PT0gIiIKICAgIH0sCiAgICB2YWxpZGF0
ZUVtYWlsQWRkcmVzc2VzOiBmdW5jdGlvbiAoYSkgewogICAgICAgIHJldHVybiAvXihbQS1aYS16
MC05X1wtXC5dKStcQChbQS1aYS16MC05X1wtXC5dKStcLihbQS1aYS16XXsyLDR9KSQvLnRlc3Qo
YSkKICAgIH0sCiAgICBoYXNWYWxpZENvbnRlbnQ6IGZ1bmN0aW9uIChhLCBiKSB7CiAgICAgICAg
aWYgKGIgIT09ICIiKSByZXR1cm4gYS50ZXN0KGIpOwogICAgICAgIHJldHVybiBmYWxzZQogICAg
fQp9Owpkb2pvLnByb3ZpZGUoImRqLnV0aWwuVGVtcGxhdGUiKTsKZG9qby5yZXF1aXJlKCJ0cmlt
cGF0aC5UcmltUGF0aCIpOwpkai51dGlsLlRlbXBsYXRlID0gewogICAgcHJvY2Vzc0RPTVRlbXBs
YXRlOiBmdW5jdGlvbiAoYSwgYikgewogICAgICAgIHJldHVybiBUcmltUGF0aC5wcm9jZXNzRE9N
VGVtcGxhdGUoYSwgYikKICAgIH0sCiAgICBwYXJzZVRlbXBsYXRlOiBmdW5jdGlvbiAoYSwgYiwg
YykgewogICAgICAgIHJldHVybiBUcmltUGF0aC5wYXJzZVRlbXBsYXRlKGEsIGIsIGMpCiAgICB9
Cn07CmRvam8ucHJvdmlkZSgiZGoudXRpbC5Db25maWciKTsKZG9qby5yZXF1aXJlKCJkai51dGls
Lk9ic2VydmVyIik7CmRvam8uZGVjbGFyZSgiZGoudXRpbC5Db25maWciLCBudWxsLCB7CiAgICBj
b25zdHJ1Y3RvcjogZnVuY3Rpb24gKGEpIHsKICAgICAgICB0aGlzLnNldE93bmVyKGEpOwogICAg
ICAgIHRoaXMuY2ZnID0ge307CiAgICAgICAgdGhpcy5vYnMgPSB7fTsKICAgICAgICB0aGlzLmhh
c0ZpcmVkID0ge30KICAgIH0sCiAgICBnZXRPd25lcjogZnVuY3Rpb24gKCkgewogICAgICAgIHJl
dHVybiB0aGlzLm93bmVyCiAgICB9LAogICAgc2V0T3duZXI6IGZ1bmN0aW9uIChhKSB7CiAgICAg
ICAgdGhpcy5vd25lciA9IGEKICAgIH0sCiAgICBhZGRQcm9wZXJ0eTogZnVuY3Rpb24gKGEsIGIp
IHsKICAgICAgICBhID0gYS50b0xvd2VyQ2FzZSgpOwogICAgICAgIGlmICh0eXBlb2YgYiA9PSAi
dW5kZWZpbmVkIikgdGhyb3cgRXJyb3IoIkNvbmZpZyB7a2V5OiAnXycsIHZhbHVlOiAnXyd9IG11
c3QgYmUgc2V0IGZvciBrZXkgJyIgKyBhICsgIicuIik7CiAgICAgICAgZWxzZSBpZiAodHlwZW9m
IGIudmFsdWUgPT0gInVuZGVmaW5lZCIpIHRocm93IEVycm9yKCJDb25maWcgdmFsdWUgbXVzdCBi
ZSBkZWZpbmVkIGZvciBrZXkgJyIgKyBhICsgIicuIik7CiAgICAgICAgZWxzZSBpZiAodHlwZW9m
IGIuaGFuZGxlciA9PSAidW5kZWZpbmVkIikgewogICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5
KGEsIGIudmFsdWUsIHRydWUpOwogICAgICAgICAgICByZXR1cm4KICAgICAgICB9CiAgICAgICAg
dmFyIGMgPSBuZXcgZGoudXRpbC5PYnNlcnZlciwKICAgICAgICAgICAgZSA9IHRoaXMuZ2V0T3du
ZXIoKTsKICAgICAgICBjLnN1YnNjcmliZShiLmhhbmRsZXIsIGUpOwogICAgICAgIHRoaXMub2Jz
W2FdID0gYzsKICAgICAgICB0aGlzLnNldFByb3BlcnR5KGEsIGIudmFsdWUsIHRydWUpCiAgICB9
LAogICAgZ2V0UHJvcGVydHk6IGZ1bmN0aW9uIChhKSB7CiAgICAgICAgYSA9IGEudG9Mb3dlckNh
c2UoKTsKICAgICAgICByZXR1cm4gdGhpcy5jZmdbYV0KICAgIH0sCiAgICBzZXRQcm9wZXJ0eTog
ZnVuY3Rpb24gKGEsIGIsIGMpIHsKICAgICAgICBhID0gYS50b0xvd2VyQ2FzZSgpOwogICAgICAg
IHRoaXMuY2ZnW2FdID0gYjsKICAgICAgICB2YXIgZSA9IG51bGw7CiAgICAgICAgaWYgKCFjKSB7
CiAgICAgICAgICAgIGUgPSB0aGlzLm9ic1thXTsKICAgICAgICAgICAgZS5maXJlKGIpCiAgICAg
ICAgfQogICAgfSwKICAgIGFwcGx5Q29uZmlnOiBmdW5jdGlvbiAoYSkgewogICAgICAgIGZvciAo
dmFyIGIgaW4gYSkgYS5oYXNPd25Qcm9wZXJ0eShiKSAmJiB0aGlzLnNldFByb3BlcnR5KGIsIGFb
Yl0sIHRydWUpCiAgICB9LAogICAgZmlyZVF1ZXVlOiBmdW5jdGlvbiAoYSkgewogICAgICAgIGEg
PSB0eXBlb2YgYSA9PSAidW5kZWZpbmVkIiA/IGZhbHNlIDogYTsKICAgICAgICB2YXIgYiA9IG51
bGwsCiAgICAgICAgICAgIGM7CiAgICAgICAgZm9yIChjIGluIHRoaXMuY2ZnKSBpZiAodGhpcy5j
ZmcuaGFzT3duUHJvcGVydHkoYykpIHsKICAgICAgICAgICAgdmFyIGUgPSB0aGlzLmNmZ1tjXTsK
ICAgICAgICAgICAgaWYgKCFhICYmIHRoaXMuaGFzRmlyZWRbY10pIGJyZWFrOwogICAgICAgICAg
ICBiID0gdGhpcy5vYnNbY107CiAgICAgICAgICAgIGlmICh0eXBlb2YgYiA9PSAidW5kZWZpbmVk
IikgYnJlYWs7CiAgICAgICAgICAgIGIuZmlyZShlKTsKICAgICAgICAgICAgdGhpcy5oYXNGaXJl
ZFtjXSA9IHRydWUKICAgICAgICB9CiAgICB9Cn0pOwpkb2pvLnByb3ZpZGUoImRqLnV0aWwubGl2
ZVdpZGdldCIpOwpkb2pvLnJlcXVpcmUoImRqLmxhbmciKTsKZG9qby5yZXF1aXJlKCJkai51dGls
LkVsZW1lbnQiKTsKZGoudXRpbC5saXZlV2lkZ2V0ID0gewogICAgcmVnaXN0ZXI6IGZ1bmN0aW9u
IChhLCBiLCBjKSB7CiAgICAgICAgaWYgKHR5cGVvZiBhICE9PSAic3RyaW5nIiB8fCAhYSB8fCB0
eXBlb2YgYiAhPT0gImZ1bmN0aW9uIikgdGhyb3cgRXJyb3IoIntsaXZlV2lkZ2V0LnJlZ2lzdGVy
fSB3aWRnZXROYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nLCBhbmQgY2FsbGJhY2sgLS0g
YSBmdW5jdGlvbiIpOwogICAgICAgIHZhciBlID0gdGhpczsKICAgICAgICB0aGlzLl93aWRnZXRF
dmVudHNbYV0gPSBkai5sYW5nLmFkZExpdmVFdmVudCgiZGl2W2RhdGEtZGotbGl2ZS13aWRnZXQ9
IiArIGEgKyAiXSIsICJjbGljayIsIGZ1bmN0aW9uIChmKSB7CiAgICAgICAgICAgIGlmICghZS5f
aXNJbml0aWFsaXplZCh0aGlzKSkgewogICAgICAgICAgICAgICAgZS5fbWFya0FzSW5pdGlhbGl6
ZWQodGhpcyk7CiAgICAgICAgICAgICAgICB2YXIgZyA9IGRqLnV0aWwuRWxlbWVudC5nZXREYXRh
c2V0KHRoaXMpOwogICAgICAgICAgICAgICAgZGVsZXRlIGcuZGpMaXZlV2lkZ2V0OwogICAgICAg
ICAgICAgICAgZiA9IHsKICAgICAgICAgICAgICAgICAgICBkb21Ob2RlOiB0aGlzLAogICAgICAg
ICAgICAgICAgICAgIGV2ZW50OiBmCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAg
dHJ5IHsKICAgICAgICAgICAgICAgICAgICBiLmNhbGwoYywgZiwgZykKICAgICAgICAgICAgICAg
IH0gY2F0Y2ggKGgpIHsKICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJ7bGl2ZVdp
ZGdldH0gJyVzJzogJW8gdGhyZXc6ICVvIiwgYSwgdGhpcywgaC5tZXNzYWdlKQogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSkKICAgIH0sCiAgICB1bnJlZ2lzdGVyOiBm
dW5jdGlvbiAoYSkgewogICAgICAgIGlmICh0eXBlb2YgYSAhPT0gInN0cmluZyIgfHwgIWEpIHRo
cm93IEVycm9yKCJ7bGl2ZVdpZGdldC51bnJlZ2lzdGVyfSB3aWRnZXROYW1lIG11c3QgYmUgYSBu
b24tZW1wdHkgc3RyaW5nIik7CiAgICAgICAgKGEgPSB0aGlzLl93aWRnZXRFdmVudHNbYV0pICYm
IGRqLmxhbmcucmVtb3ZlTGl2ZUV2ZW50KGEpCiAgICB9LAogICAgX2lzSW5pdGlhbGl6ZWQ6IGZ1
bmN0aW9uIChhKSB7CiAgICAgICAgcmV0dXJuIGRqLnV0aWwuRWxlbWVudC5nZXREYXRhKGEsICJp
c0luaXRpYWxpemVkIikgPT0gInRydWUiCiAgICB9LAogICAgX21hcmtBc0luaXRpYWxpemVkOiBm
dW5jdGlvbiAoYSkgewogICAgICAgIGRqLnV0aWwuRWxlbWVudC5zZXREYXRhKGEsICJpc0luaXRp
YWxpemVkIiwgInRydWUiKQogICAgfSwKICAgIF93aWRnZXRFdmVudHM6IFtdCn07CmRvam8ucHJv
dmlkZSgiZGoud2lkZ2V0LlByb2dyZXNzQmFyIik7CmRvam8uZGVjbGFyZSgiZGoud2lkZ2V0LlBy
b2dyZXNzQmFyIiwgbnVsbCwgewogICAgVFlQRVM6IFsiaG9yaXpvbnRhbCJdLAogICAgY29uc3Ry
dWN0b3I6IGZ1bmN0aW9uIChjb250YWluZXIsIGNvbmZpZykgewogICAgICAgIHRoaXMuY2ZnID0g
ZG9qby5taXhpbih7CiAgICAgICAgICAgIGluZGljYXRvcjogImRpdiIsCiAgICAgICAgICAgIGZw
czogMzAsCiAgICAgICAgICAgIHRpbWVyOiA0LAogICAgICAgICAgICB0eXBlOiAiaG9yaXpvbnRh
bCIKICAgICAgICB9LCAoY29uZmlnIHx8IHt9KSk7CiAgICAgICAgdGhpcy5vQ250ID0gZG9qby5i
eUlkKGNvbnRhaW5lcik7CiAgICAgICAgdGhpcy5vSW5kID0gZG9qby5jcmVhdGUodGhpcy5jZmcu
aW5kaWNhdG9yLCB7CiAgICAgICAgICAgIHdpZHRoOiAiMTAwJSIKICAgICAgICB9LCB0aGlzLm9D
bnQpOwogICAgICAgIHRoaXMuX2FuaW0gPSBudWxsOwogICAgfSwKICAgIGRlc3RydWN0b3I6IGZ1
bmN0aW9uICgpIHsKICAgICAgICBpZiAodGhpcy5fYW5pbSkgewogICAgICAgICAgICB0aGlzLl9h
bmltLnN0b3AoKTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMub0luZCkgewogICAgICAgICAg
ICBkb2pvLmRlc3Ryb3kodGhpcy5vSW5kKTsKICAgICAgICB9CiAgICB9LAogICAgcGxheTogZnVu
Y3Rpb24gKCkgewogICAgICAgIGlmICh0aGlzLl9hbmltICE9PSBudWxsKSB7CiAgICAgICAgICAg
IGlmICh0aGlzLl9hbmltLnN0YXR1cyA9PSAic3RvcHBlZCIpIHsKICAgICAgICAgICAgICAgIHRo
aXMuX2FuaW0ucGxheSgwLCB0cnVlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgIHRoaXMuX2FuaW0uZ290b1BlcmNlbnQoMCwgdHJ1ZSk7CiAgICAgICAgICAgIH0KICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB0aGlzLl9jcmVhdGVBbmltYXRpb24oKTsK
ICAgICAgICB0aGlzLl9hbmltLnBsYXkoKTsKICAgIH0sCiAgICBwYXVzZTogZnVuY3Rpb24gKCkg
ewogICAgICAgIGlmICh0aGlzLl9hbmltID09PSBudWxsKSB7CiAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICB9CiAgICAgICAgdGhpcy5fYW5pbS5wYXVzZSgpOwogICAgfSwKICAgIHN0b3A6IGZ1
bmN0aW9uICgpIHsKICAgICAgICBpZiAodGhpcy5fYW5pbSA9PT0gbnVsbCkgewogICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRoaXMuX2FuaW0uc3RvcCgpOwogICAgICAgIHRo
aXMuX2FuaW0uZ290b1BlcmNlbnQoMCk7CiAgICAgICAgZG9qby5zdHlsZSh0aGlzLm9JbmQsICJs
ZWZ0IiwgMCk7CiAgICB9LAogICAgX2NyZWF0ZUFuaW1hdGlvbjogZnVuY3Rpb24gKCkgewogICAg
ICAgIHZhciBtYXhMZWZ0ID0gdGhpcy5fZ2V0TWF4TGVmdCgpLAogICAgICAgICAgICBkdXJhdGlv
bkluTWlsbGlzID0gKHRoaXMuY2ZnLnRpbWVyICogMTAwMCksCiAgICAgICAgICAgIGFuaW1DZmcg
PSB7CiAgICAgICAgICAgICAgICBub2RlOiB0aGlzLm9JbmQsCiAgICAgICAgICAgICAgICBkdXJh
dGlvbjogZHVyYXRpb25Jbk1pbGxpcywKICAgICAgICAgICAgICAgIGVhc2luZzogZnVuY3Rpb24g
KHgpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4geDsKICAgICAgICAgICAgICAgIH0sCiAg
ICAgICAgICAgICAgICBvbkJlZ2luOiB0aGlzLmNmZy5iZWZvcmVTdGFydCwKICAgICAgICAgICAg
ICAgIG9uRW5kOiB0aGlzLmNmZy5hZnRlckZpbmlzaCwKICAgICAgICAgICAgICAgIHByb3BlcnRp
ZXM6IHsKICAgICAgICAgICAgICAgICAgICBsZWZ0OiBtYXhMZWZ0CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgIH07CiAgICAgICAgdGhpcy5fYW5pbSA9IGRvam8uYW5pbWF0ZVByb3BlcnR5
KGFuaW1DZmcpOwogICAgfSwKICAgIF9nZXRNYXhMZWZ0OiBmdW5jdGlvbiAoKSB7CiAgICAgICAg
aWYgKHRoaXMuX21heExlZnRDYWNoZSkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5fbWF4TGVm
dENhY2hlOwogICAgICAgIH0KICAgICAgICB2YXIgcG9zID0gZG9qby5wb3NpdGlvbih0aGlzLm9D
bnQpOwogICAgICAgIHRoaXMuX21heExlZnRDYWNoZSA9IHBvcy53OwogICAgICAgIHJldHVybiBw
b3MudzsKICAgIH0KfSk7CmRvam8ucHJvdmlkZSgiZGoud2lkZ2V0LlNsaWRlciIpOwpkb2pvLmRl
Y2xhcmUoImRqLndpZGdldC5TbGlkZXIiLCBudWxsLCB7CiAgICBjb25zdHJ1Y3RvcjogZnVuY3Rp
b24gKGhhbmRsZSwgdHJhY2ssIG9wdGlvbnMpIHsKICAgICAgICB0aGlzLl9ldmVudENvbm5lY3RI
YW5kbGVzID0gW107CiAgICAgICAgdmFyIHNsaWRlciA9IHRoaXM7CiAgICAgICAgaWYgKGRvam8u
aXNBcnJheShoYW5kbGUpKSB7CiAgICAgICAgICAgIHRoaXMuaGFuZGxlcyA9IFtdOwogICAgICAg
ICAgICBmb3IgKHZhciBjb3VudCA9IDAsIG1heCA9IGhhbmRsZS5sZW5ndGg7IGNvdW50IDwgbWF4
OyBjb3VudCsrKSB7CiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZXMucHVzaChkb2pvLmJ5SWQo
aGFuZGxlW2NvdW50XSkpOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgdGhpcy5oYW5kbGVzID0gW2Rvam8uYnlJZChoYW5kbGUpXTsKICAgICAgICB9CiAgICAgICAg
dGhpcy50cmFjayA9IGRvam8uYnlJZCh0cmFjayk7CiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0
aW9ucyB8fCB7fTsKICAgICAgICB0aGlzLmF4aXMgPSB0aGlzLm9wdGlvbnMuYXhpcyB8fCAnaG9y
aXpvbnRhbCc7CiAgICAgICAgdGhpcy5pbmNyZW1lbnQgPSB0aGlzLm9wdGlvbnMuaW5jcmVtZW50
IHx8IDE7CiAgICAgICAgdGhpcy5zdGVwID0gcGFyc2VJbnQodGhpcy5vcHRpb25zLnN0ZXAgfHwg
JzEnLCAxMCk7CiAgICAgICAgdGhpcy5yYW5nZSA9IHRoaXMub3B0aW9ucy5yYW5nZSB8fCB7CiAg
ICAgICAgICAgIHN0YXJ0OiAwLAogICAgICAgICAgICBlbmQ6IDEKICAgICAgICB9OwogICAgICAg
IHRoaXMudmFsdWUgPSAwOwogICAgICAgIHRoaXMudmFsdWVzID0gW107CiAgICAgICAgZG9qby5m
b3JFYWNoKHRoaXMuaGFuZGxlcywgZG9qby5oaXRjaCh0aGlzLCBmdW5jdGlvbiAoKSB7CiAgICAg
ICAgICAgIHRoaXMudmFsdWVzLnB1c2goMCk7CiAgICAgICAgfSkpOwogICAgICAgIHRoaXMuc3Bh
bnMgPSB0aGlzLm9wdGlvbnMuc3BhbnMgPyBkb2pvLmZvckVhY2godGhpcy5vcHRpb25zLnNwYW5z
LCBmdW5jdGlvbiAocykgewogICAgICAgICAgICByZXR1cm4gZG9qby5ieUlkKHMpOwogICAgICAg
IH0pIDogZmFsc2U7CiAgICAgICAgdGhpcy5vcHRpb25zLnN0YXJ0U3BhbiA9IGRvam8uYnlJZCh0
aGlzLm9wdGlvbnMuc3RhcnRTcGFuIHx8IG51bGwpOwogICAgICAgIHRoaXMub3B0aW9ucy5lbmRT
cGFuID0gZG9qby5ieUlkKHRoaXMub3B0aW9ucy5lbmRTcGFuIHx8IG51bGwpOwogICAgICAgIHRo
aXMucmVzdHJpY3RlZCA9IHRoaXMub3B0aW9ucy5yZXN0cmljdGVkIHx8IGZhbHNlOwogICAgICAg
IHRoaXMubWF4aW11bSA9IHRoaXMub3B0aW9ucy5tYXhpbXVtIHx8IHRoaXMucmFuZ2UuZW5kOwog
ICAgICAgIHRoaXMubWluaW11bSA9IHRoaXMub3B0aW9ucy5taW5pbXVtIHx8IHRoaXMucmFuZ2Uu
c3RhcnQ7CiAgICAgICAgdGhpcy5hbGlnblggPSBwYXJzZUludCh0aGlzLm9wdGlvbnMuYWxpZ25Y
IHx8ICcwJywgMTApOwogICAgICAgIHRoaXMuYWxpZ25ZID0gcGFyc2VJbnQodGhpcy5vcHRpb25z
LmFsaWduWSB8fCAnMCcsIDEwKTsKICAgICAgICB0aGlzLnRyYWNrTGVuZ3RoID0gdGhpcy5tYXhp
bXVtT2Zmc2V0KCkgLSB0aGlzLm1pbmltdW1PZmZzZXQoKTsKICAgICAgICB0aGlzLmhhbmRsZUxl
bmd0aCA9IHRoaXMuaXNWZXJ0aWNhbCgpID8gKHRoaXMuaGFuZGxlc1swXS5vZmZzZXRIZWlnaHQg
IT09IDAgPyB0aGlzLmhhbmRsZXNbMF0ub2Zmc2V0SGVpZ2h0IDogdGhpcy5oYW5kbGVzWzBdLnN0
eWxlLmhlaWdodC5yZXBsYWNlKC9weCQvLCAiIikpIDogKHRoaXMuaGFuZGxlc1swXS5vZmZzZXRX
aWR0aCAhPT0gMCA/IHRoaXMuaGFuZGxlc1swXS5vZmZzZXRXaWR0aCA6IHRoaXMuaGFuZGxlc1sw
XS5zdHlsZS53aWR0aC5yZXBsYWNlKC9weCQvLCAiIikpOwogICAgICAgIHRoaXMuYWN0aXZlID0g
ZmFsc2U7CiAgICAgICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlOwogICAgICAgIHRoaXMuZGlzYWJs
ZWQgPSBmYWxzZTsKICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRpc2FibGVkKSB7CiAgICAgICAg
ICAgIHRoaXMuc2V0RGlzYWJsZWQoKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5hbGxvd2VkVmFs
dWVzID0gdGhpcy5vcHRpb25zLnZhbHVlcyA/IHRoaXMub3B0aW9ucy52YWx1ZXMuc29ydCgpIDog
ZmFsc2U7CiAgICAgICAgaWYgKHRoaXMuYWxsb3dlZFZhbHVlcykgewogICAgICAgICAgICB0aGlz
Lm1pbmltdW0gPSAodGhpcy5hbGxvd2VkVmFsdWVzLmxlbmd0aCA+IDApID8gdGhpcy5hbGxvd2Vk
VmFsdWVzWzBdIDogMDsKICAgICAgICAgICAgdGhpcy5tYXhpbXVtID0gKHRoaXMuYWxsb3dlZFZh
bHVlcy5sZW5ndGggPiAwKSA/IHRoaXMuYWxsb3dlZFZhbHVlc1t0aGlzLmFsbG93ZWRWYWx1ZXMu
bGVuZ3RoIC0gMV0gOiAwOwogICAgICAgIH0KICAgICAgICB0aGlzLmV2ZW50TW91c2VEb3duID0g
ZG9qby5oaXRjaCh0aGlzLCB0aGlzLnN0YXJ0RHJhZyk7CiAgICAgICAgdGhpcy5ldmVudE1vdXNl
VXAgPSBkb2pvLmhpdGNoKHRoaXMsIHRoaXMuZW5kRHJhZyk7CiAgICAgICAgdGhpcy5ldmVudE1v
dXNlTW92ZSA9IGRvam8uaGl0Y2godGhpcywgdGhpcy51cGRhdGUpOwogICAgICAgIGRvam8uZm9y
RWFjaCh0aGlzLmhhbmRsZXMsIGZ1bmN0aW9uIChoLCBpKSB7CiAgICAgICAgICAgIGkgPSBzbGlk
ZXIuaGFuZGxlcy5sZW5ndGggLSAxIC0gaTsKICAgICAgICAgICAgc2xpZGVyLnNldFZhbHVlKHBh
cnNlRmxvYXQoKGRvam8uaXNBcnJheShzbGlkZXIub3B0aW9ucy5zbGlkZXJWYWx1ZSkgPyBzbGlk
ZXIub3B0aW9ucy5zbGlkZXJWYWx1ZVtpXSA6IHNsaWRlci5vcHRpb25zLnNsaWRlclZhbHVlKSB8
fCBzbGlkZXIucmFuZ2Uuc3RhcnQpLCBpKTsKICAgICAgICAgICAgaWYgKGguc3R5bGUucG9zaXRp
b24gJiYgaC5zdHlsZS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpIHsKICAgICAgICAgICAgICAgIGgu
c3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnOwogICAgICAgICAgICAgICAgaWYgKGRvam8uaXNP
cGVyYSkgewogICAgICAgICAgICAgICAgICAgIGguc3R5bGUudG9wID0gMDsKICAgICAgICAgICAg
ICAgICAgICBoLnN0eWxlLmxlZnQgPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9
CiAgICAgICAgICAgIHNsaWRlci5fZXZlbnRDb25uZWN0SGFuZGxlcy5wdXNoKGRvam8uY29ubmVj
dChoLCAnb25tb3VzZWRvd24nLCBzbGlkZXIuZXZlbnRNb3VzZURvd24pKTsKICAgICAgICB9KTsK
ICAgICAgICB0aGlzLl9ldmVudENvbm5lY3RIYW5kbGVzLnB1c2goZG9qby5jb25uZWN0KHRoaXMu
dHJhY2ssICdvbm1vdXNlZG93bicsIHRoaXMuZXZlbnRNb3VzZURvd24pKTsKICAgICAgICB0aGlz
Ll9ldmVudENvbm5lY3RIYW5kbGVzLnB1c2goZG9qby5jb25uZWN0KGRvY3VtZW50LCAnb25tb3Vz
ZXVwJywgdGhpcy5ldmVudE1vdXNlVXApKTsKICAgICAgICB0aGlzLl9ldmVudENvbm5lY3RIYW5k
bGVzLnB1c2goZG9qby5jb25uZWN0KGRvY3VtZW50LCAnb25tb3VzZW1vdmUnLCB0aGlzLmV2ZW50
TW91c2VNb3ZlKSk7CiAgICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7CiAgICB9LAogICAg
ZGlzcG9zZTogZnVuY3Rpb24gKCkgewogICAgICAgIGRvam8uZm9yRWFjaCh0aGlzLl9ldmVudENv
bm5lY3RIYW5kbGVzLCBkb2pvLmRpc2Nvbm5lY3QpOwogICAgfSwKICAgIHNldERpc2FibGVkOiBm
dW5jdGlvbiAoKSB7CiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IHRydWU7CiAgICB9LAogICAgc2V0
RW5hYmxlZDogZnVuY3Rpb24gKCkgewogICAgICAgIHRoaXMuZGlzYWJsZWQgPSBmYWxzZTsKICAg
IH0sCiAgICBnZXROZWFyZXN0VmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkgewogICAgICAgIGlmICh0
aGlzLmFsbG93ZWRWYWx1ZXMpIHsKICAgICAgICAgICAgdmFyIG1heCA9ICh0aGlzLmFsbG93ZWRW
YWx1ZXMubGVuZ3RoID4gMCkgPyB0aGlzLmFsbG93ZWRWYWx1ZXNbdGhpcy5hbGxvd2VkVmFsdWVz
Lmxlbmd0aCAtIDFdIDogMDsKICAgICAgICAgICAgaWYgKHZhbHVlID49IG1heCkgewogICAgICAg
ICAgICAgICAgcmV0dXJuIChtYXgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBtaW4g
PSAodGhpcy5hbGxvd2VkVmFsdWVzLmxlbmd0aCA+IDApID8gdGhpcy5hbGxvd2VkVmFsdWVzWzBd
IDogMDsKICAgICAgICAgICAgaWYgKHZhbHVlIDw9IG1pbikgewogICAgICAgICAgICAgICAgcmV0
dXJuIChtaW4pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBvZmZzZXQgPSBNYXRoLmFi
cyh0aGlzLmFsbG93ZWRWYWx1ZXNbMF0gLSB2YWx1ZSk7CiAgICAgICAgICAgIHZhciBuZXdWYWx1
ZSA9IHRoaXMuYWxsb3dlZFZhbHVlc1swXTsKICAgICAgICAgICAgZG9qby5mb3JFYWNoKHRoaXMu
YWxsb3dlZFZhbHVlcywgZnVuY3Rpb24gKHYpIHsKICAgICAgICAgICAgICAgIHZhciBjdXJyZW50
T2Zmc2V0ID0gTWF0aC5hYnModiAtIHZhbHVlKTsKICAgICAgICAgICAgICAgIGlmIChjdXJyZW50
T2Zmc2V0IDw9IG9mZnNldCkgewogICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gdjsKICAg
ICAgICAgICAgICAgICAgICBvZmZzZXQgPSBjdXJyZW50T2Zmc2V0OwogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgcmV0dXJuIG5ld1ZhbHVlOwogICAgICAgIH0K
ICAgICAgICBpZiAodmFsdWUgPiB0aGlzLnJhbmdlLmVuZCkgewogICAgICAgICAgICByZXR1cm4g
dGhpcy5yYW5nZS5lbmQ7CiAgICAgICAgfQogICAgICAgIGlmICh2YWx1ZSA8IHRoaXMucmFuZ2Uu
c3RhcnQpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFuZ2Uuc3RhcnQ7CiAgICAgICAgfQog
ICAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0sCiAgICBzZXRWYWx1ZTogZnVuY3Rpb24gKHNsaWRl
clZhbHVlLCBoYW5kbGVJZHgpIHsKICAgICAgICBpZiAoIXRoaXMuYWN0aXZlKSB7CiAgICAgICAg
ICAgIHRoaXMuYWN0aXZlSGFuZGxlSWR4ID0gaGFuZGxlSWR4IHx8IDA7CiAgICAgICAgICAgIHRo
aXMuYWN0aXZlSGFuZGxlID0gdGhpcy5oYW5kbGVzW3RoaXMuYWN0aXZlSGFuZGxlSWR4XTsKICAg
ICAgICAgICAgdGhpcy51cGRhdGVTdHlsZXMoKTsKICAgICAgICB9CiAgICAgICAgaGFuZGxlSWR4
ID0gaGFuZGxlSWR4IHx8IHRoaXMuYWN0aXZlSGFuZGxlSWR4IHx8IDA7CiAgICAgICAgaWYgKHRo
aXMuaW5pdGlhbGl6ZWQgJiYgdGhpcy5yZXN0cmljdGVkKSB7CiAgICAgICAgICAgIGlmICgoaGFu
ZGxlSWR4ID4gMCkgJiYgKHNsaWRlclZhbHVlIDwgdGhpcy52YWx1ZXNbaGFuZGxlSWR4IC0gMV0p
KSB7CiAgICAgICAgICAgICAgICBzbGlkZXJWYWx1ZSA9IHRoaXMudmFsdWVzW2hhbmRsZUlkeCAt
IDFdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgoaGFuZGxlSWR4IDwgKHRoaXMuaGFu
ZGxlcy5sZW5ndGggLSAxKSkgJiYgKHNsaWRlclZhbHVlID4gdGhpcy52YWx1ZXNbaGFuZGxlSWR4
ICsgMV0pKSB7CiAgICAgICAgICAgICAgICBzbGlkZXJWYWx1ZSA9IHRoaXMudmFsdWVzW2hhbmRs
ZUlkeCArIDFdOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHNsaWRlclZhbHVlID0g
dGhpcy5nZXROZWFyZXN0VmFsdWUoc2xpZGVyVmFsdWUpOwogICAgICAgIHRoaXMudmFsdWVzW2hh
bmRsZUlkeF0gPSBzbGlkZXJWYWx1ZTsKICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZXNb
MF07CiAgICAgICAgdGhpcy5oYW5kbGVzW2hhbmRsZUlkeF0uc3R5bGVbdGhpcy5pc1ZlcnRpY2Fs
KCkgPyAndG9wJyA6ICdsZWZ0J10gPSB0aGlzLnRyYW5zbGF0ZVRvUHgoc2xpZGVyVmFsdWUpOwog
ICAgICAgIHRoaXMuZHJhd1NwYW5zKCk7CiAgICAgICAgaWYgKCF0aGlzLmRyYWdnaW5nIHx8ICF0
aGlzLmV2ZW50KSB7CiAgICAgICAgICAgIHRoaXMudXBkYXRlRmluaXNoZWQoKTsKICAgICAgICB9
CiAgICB9LAogICAgc2V0VmFsdWVCeTogZnVuY3Rpb24gKGRlbHRhLCBoYW5kbGVJZHgpIHsKICAg
ICAgICB0aGlzLnNldFZhbHVlKHRoaXMudmFsdWVzW2hhbmRsZUlkeCB8fCB0aGlzLmFjdGl2ZUhh
bmRsZUlkeCB8fCAwXSArIGRlbHRhLCBoYW5kbGVJZHggfHwgdGhpcy5hY3RpdmVIYW5kbGVJZHgg
fHwgMCk7CiAgICB9LAogICAgdHJhbnNsYXRlVG9QeDogZnVuY3Rpb24gKHZhbHVlKSB7CiAgICAg
ICAgcmV0dXJuIE1hdGgucm91bmQoKCh0aGlzLnRyYWNrTGVuZ3RoIC0gdGhpcy5oYW5kbGVMZW5n
dGgpIC8gKHRoaXMucmFuZ2UuZW5kIC0gdGhpcy5yYW5nZS5zdGFydCkpICogKHZhbHVlIC0gdGhp
cy5yYW5nZS5zdGFydCkpICsgInB4IjsKICAgIH0sCiAgICB0cmFuc2xhdGVUb1ZhbHVlOiBmdW5j
dGlvbiAob2Zmc2V0KSB7CiAgICAgICAgcmV0dXJuICgob2Zmc2V0IC8gKHRoaXMudHJhY2tMZW5n
dGggLSB0aGlzLmhhbmRsZUxlbmd0aCkgKiAodGhpcy5yYW5nZS5lbmQgLSB0aGlzLnJhbmdlLnN0
YXJ0KSkgKyB0aGlzLnJhbmdlLnN0YXJ0KTsKICAgIH0sCiAgICBnZXRSYW5nZTogZnVuY3Rpb24g
KHJhbmdlKSB7CiAgICAgICAgdmFyIHYgPSB0aGlzLnZhbHVlcy5zb3J0KCk7CiAgICAgICAgcmFu
Z2UgPSByYW5nZSB8fCAwOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHN0YXJ0OiB2W3Jh
bmdlXSwKICAgICAgICAgICAgZW5kOiB2W3JhbmdlICsgMV0KICAgICAgICB9OwogICAgfSwKICAg
IG1pbmltdW1PZmZzZXQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4gKHRoaXMuaXNWZXJ0
aWNhbCgpID8gdGhpcy5hbGlnblkgOiB0aGlzLmFsaWduWCk7CiAgICB9LAogICAgbWF4aW11bU9m
ZnNldDogZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiAodGhpcy5pc1ZlcnRpY2FsKCkgPyAo
dGhpcy50cmFjay5vZmZzZXRIZWlnaHQgIT09IDAgPyB0aGlzLnRyYWNrLm9mZnNldEhlaWdodCA6
IHRoaXMudHJhY2suc3R5bGUuaGVpZ2h0LnJlcGxhY2UoL3B4JC8sICIiKSkgLSB0aGlzLmFsaWdu
WSA6ICh0aGlzLnRyYWNrLm9mZnNldFdpZHRoICE9PSAwID8gdGhpcy50cmFjay5vZmZzZXRXaWR0
aCA6IHRoaXMudHJhY2suc3R5bGUud2lkdGgucmVwbGFjZSgvcHgkLywgIiIpKSAtIHRoaXMuYWxp
Z25YKTsKICAgIH0sCiAgICBpc1ZlcnRpY2FsOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgcmV0dXJu
ICh0aGlzLmF4aXMgPT0gJ3ZlcnRpY2FsJyk7CiAgICB9LAogICAgZHJhd1NwYW5zOiBmdW5jdGlv
biAoKSB7CiAgICAgICAgdmFyIHNsaWRlciA9IHRoaXM7CiAgICAgICAgaWYgKHRoaXMuc3BhbnMp
IHsKICAgICAgICAgICAgZm9yICh2YXIgY291bnQgPSAwLCBtYXggPSB0aGlzLnNwYW5zLmxlbmd0
aCAtIDE7IGNvdW50IDw9IG1heDsgY291bnQrKykgewogICAgICAgICAgICAgICAgc2xpZGVyLnNl
dFNwYW4oc2xpZGVyLnNwYW5zW2NvdW50XSwgc2xpZGVyLmdldFJhbmdlKGNvdW50KSk7CiAgICAg
ICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zdGFydFNwYW4pIHsK
ICAgICAgICAgICAgdGhpcy5zZXRTcGFuKHRoaXMub3B0aW9ucy5zdGFydFNwYW4sIHsKICAgICAg
ICAgICAgICAgIHN0YXJ0OiAwLAogICAgICAgICAgICAgICAgZW5kOiB0aGlzLnZhbHVlcy5sZW5n
dGggPiAxID8gdGhpcy5nZXRSYW5nZSgwKS5zdGFydCA6IHRoaXMudmFsdWUKICAgICAgICAgICAg
fSk7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZW5kU3BhbikgewogICAgICAg
ICAgICB0aGlzLnNldFNwYW4odGhpcy5vcHRpb25zLmVuZFNwYW4sIHsKICAgICAgICAgICAgICAg
IHN0YXJ0OiB0aGlzLnZhbHVlcy5sZW5ndGggPiAxID8gdGhpcy5nZXRSYW5nZSh0aGlzLnNwYW5z
Lmxlbmd0aCAtIDEpLmVuZCA6IHRoaXMudmFsdWUsCiAgICAgICAgICAgICAgICBlbmQ6IHRoaXMu
bWF4aW11bQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICB9LAogICAgc2V0U3BhbjogZnVu
Y3Rpb24gKHNwYW4sIHJhbmdlKSB7CiAgICAgICAgaWYgKHRoaXMuaXNWZXJ0aWNhbCgpKSB7CiAg
ICAgICAgICAgIHNwYW4uc3R5bGUudG9wID0gdGhpcy50cmFuc2xhdGVUb1B4KHJhbmdlLnN0YXJ0
KTsKICAgICAgICAgICAgc3Bhbi5zdHlsZS5oZWlnaHQgPSB0aGlzLnRyYW5zbGF0ZVRvUHgocmFu
Z2UuZW5kIC0gcmFuZ2Uuc3RhcnQgKyB0aGlzLnJhbmdlLnN0YXJ0KTsKICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICBzcGFuLnN0eWxlLmxlZnQgPSB0aGlzLnRyYW5zbGF0ZVRvUHgocmFuZ2Uu
c3RhcnQpOwogICAgICAgICAgICBzcGFuLnN0eWxlLndpZHRoID0gdGhpcy50cmFuc2xhdGVUb1B4
KHJhbmdlLmVuZCAtIHJhbmdlLnN0YXJ0ICsgdGhpcy5yYW5nZS5zdGFydCk7CiAgICAgICAgfQog
ICAgfSwKICAgIHVwZGF0ZVN0eWxlczogZnVuY3Rpb24gKCkgewogICAgICAgIGRvam8uZm9yRWFj
aCh0aGlzLmhhbmRsZXMsIGZ1bmN0aW9uIChoKSB7CiAgICAgICAgICAgIGRvam8ucmVtb3ZlQ2xh
c3MoaCwgJ3NlbGVjdGVkJyk7CiAgICAgICAgfSk7CiAgICAgICAgZG9qby5hZGRDbGFzcyh0aGlz
LmFjdGl2ZUhhbmRsZSwgJ3NlbGVjdGVkJyk7CiAgICB9LAogICAgc3RhcnREcmFnOiBmdW5jdGlv
biAoZXZlbnQpIHsKICAgICAgICBpZiAoZG9qby5tb3VzZUJ1dHRvbnMuaXNMZWZ0KGV2ZW50KSkg
ewogICAgICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHsKICAgICAgICAgICAgICAgIHRoaXMu
YWN0aXZlID0gdHJ1ZTsKICAgICAgICAgICAgICAgIHZhciBoYW5kbGUgPSBldmVudC50YXJnZXQ7
CiAgICAgICAgICAgICAgICB2YXIgcG9pbnRlciA9IFtldmVudC5jbGllbnRYLCBldmVudC5jbGll
bnRZXTsKICAgICAgICAgICAgICAgIHZhciB0cmFjayA9IGhhbmRsZTsKICAgICAgICAgICAgICAg
IGlmICh0cmFjayA9PSB0aGlzLnRyYWNrKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHRyYWNr
UG9zaXRpb24gPSBkb2pvLnBvc2l0aW9uKHRoaXMudHJhY2spOwogICAgICAgICAgICAgICAgICAg
IHRoaXMuZXZlbnQgPSBldmVudDsKICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlKHRo
aXMudHJhbnNsYXRlVG9WYWx1ZSgodGhpcy5pc1ZlcnRpY2FsKCkgPyBwb2ludGVyWzFdIC0gdHJh
Y2tQb3NpdGlvbi55IDogcG9pbnRlclswXSAtIHRyYWNrUG9zaXRpb24ueCkgLSAodGhpcy5oYW5k
bGVMZW5ndGggLyAyKSkpOwogICAgICAgICAgICAgICAgICAgIHZhciBoYW5kbGVQb3NpdGlvbiA9
IGRvam8ucG9zaXRpb24odGhpcy5hY3RpdmVIYW5kbGUpOwogICAgICAgICAgICAgICAgICAgIHRo
aXMub2Zmc2V0WCA9IChwb2ludGVyWzBdIC0gaGFuZGxlUG9zaXRpb24ueCk7CiAgICAgICAgICAg
ICAgICAgICAgdGhpcy5vZmZzZXRZID0gKHBvaW50ZXJbMV0gLSBoYW5kbGVQb3NpdGlvbi55KTsK
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChkb2pv
LmluZGV4T2YodGhpcy5oYW5kbGVzLCBoYW5kbGUpID09IC0xKSAmJiBoYW5kbGUucGFyZW50Tm9k
ZSkgewogICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUgPSBoYW5kbGUucGFyZW50Tm9kZTsK
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGRvam8uaW5kZXhP
Zih0aGlzLmhhbmRsZXMsIGhhbmRsZSkgIT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5hY3RpdmVIYW5kbGUgPSBoYW5kbGU7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
YWN0aXZlSGFuZGxlSWR4ID0gZG9qby5pbmRleE9mKHRoaXMuaGFuZGxlcywgdGhpcy5hY3RpdmVI
YW5kbGUpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN0eWxlcygpOwogICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgYWN0aXZlSGFuZGxlUG9zaXRpb24gPSBkb2pvLnBvc2l0
aW9uKHRoaXMuYWN0aXZlSGFuZGxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vZmZz
ZXRYID0gKHBvaW50ZXJbMF0gLSBhY3RpdmVIYW5kbGVQb3NpdGlvbi54KTsKICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5vZmZzZXRZID0gKHBvaW50ZXJbMV0gLSBhY3RpdmVIYW5kbGVQb3Np
dGlvbi55KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgIH0KICAgICAgICAgICAgZG9qby5zdG9wRXZlbnQoZXZlbnQpOwogICAgICAgIH0KICAgIH0s
CiAgICB1cGRhdGU6IGZ1bmN0aW9uIChldmVudCkgewogICAgICAgIGlmICh0aGlzLmFjdGl2ZSkg
ewogICAgICAgICAgICBpZiAoIXRoaXMuZHJhZ2dpbmcpIHsKICAgICAgICAgICAgICAgIHRoaXMu
ZHJhZ2dpbmcgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuZHJhdyhldmVu
dCk7CiAgICAgICAgICAgIGlmIChkb2pvLmlzV2ViS2l0KSB7CiAgICAgICAgICAgICAgICB3aW5k
b3cuc2Nyb2xsQnkoMCwgMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZG9qby5zdG9wRXZl
bnQoZXZlbnQpOwogICAgICAgIH0KICAgIH0sCiAgICBkcmF3OiBmdW5jdGlvbiAoZXZlbnQpIHsK
ICAgICAgICB2YXIgcG9pbnRlciA9IFtldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZXTsKICAg
ICAgICB2YXIgdHJhY2tQb3NpdGlvbiA9IGRvam8ucG9zaXRpb24odGhpcy50cmFjayk7CiAgICAg
ICAgcG9pbnRlclswXSAtPSB0aGlzLm9mZnNldFggKyB0cmFja1Bvc2l0aW9uLng7CiAgICAgICAg
cG9pbnRlclsxXSAtPSB0aGlzLm9mZnNldFkgKyB0cmFja1Bvc2l0aW9uLnk7CiAgICAgICAgdGhp
cy5ldmVudCA9IGV2ZW50OwogICAgICAgIHRoaXMuc2V0VmFsdWUodGhpcy50cmFuc2xhdGVUb1Zh
bHVlKHRoaXMuaXNWZXJ0aWNhbCgpID8gcG9pbnRlclsxXSA6IHBvaW50ZXJbMF0pKTsKICAgICAg
ICBpZiAodGhpcy5pbml0aWFsaXplZCAmJiB0aGlzLm9wdGlvbnMub25TbGlkZSkgewogICAgICAg
ICAgICB0aGlzLm9wdGlvbnMub25TbGlkZSh0aGlzLnZhbHVlcy5sZW5ndGggPiAxID8gdGhpcy52
YWx1ZXMgOiB0aGlzLnZhbHVlLCB0aGlzKTsKICAgICAgICB9CiAgICB9LAogICAgZW5kRHJhZzog
ZnVuY3Rpb24gKGV2ZW50KSB7CiAgICAgICAgaWYgKHRoaXMuYWN0aXZlICYmIHRoaXMuZHJhZ2dp
bmcpIHsKICAgICAgICAgICAgdGhpcy5maW5pc2hEcmFnKGV2ZW50LCB0cnVlKTsKICAgICAgICAg
ICAgZG9qby5zdG9wRXZlbnQoZXZlbnQpOwogICAgICAgIH0KICAgICAgICB0aGlzLmFjdGl2ZSA9
IGZhbHNlOwogICAgICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZTsKICAgIH0sCiAgICBmaW5pc2hE
cmFnOiBmdW5jdGlvbiAoZXZlbnQsIHN1Y2Nlc3MpIHsKICAgICAgICB0aGlzLmFjdGl2ZSA9IGZh
bHNlOwogICAgICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZTsKICAgICAgICB0aGlzLnVwZGF0ZUZp
bmlzaGVkKCk7CiAgICB9LAogICAgdXBkYXRlRmluaXNoZWQ6IGZ1bmN0aW9uICgpIHsKICAgICAg
ICBpZiAodGhpcy5pbml0aWFsaXplZCAmJiB0aGlzLm9wdGlvbnMub25DaGFuZ2UpIHsKICAgICAg
ICAgICAgdGhpcy5vcHRpb25zLm9uQ2hhbmdlKHRoaXMudmFsdWVzLmxlbmd0aCA+IDEgPyB0aGlz
LnZhbHVlcyA6IHRoaXMudmFsdWUsIHRoaXMpOwogICAgICAgIH0KICAgICAgICB0aGlzLmV2ZW50
ID0gbnVsbDsKICAgIH0KfSk7CmRvam8ucHJvdmlkZSgiZGoud2lkZ2V0LnBhbmVscy5QYW5lbERU
TyIpOwpkb2pvLmRlY2xhcmUoImRqLndpZGdldC5wYW5lbHMuUGFuZWxEVE8iLCBudWxsLCB7CiAg
ICBjb25zdHJ1Y3RvcjogZnVuY3Rpb24gKGlkLCBwb3NpdGlvbikgewogICAgICAgIHRoaXMuX2lk
ID0gbnVsbDsKICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IG51bGw7CiAgICAgICAgaWYgKHR5cGVv
ZiBpZCAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgdGhpcy5zZXRJZChpZCk7CiAgICAg
ICAgfQogICAgICAgIGlmICh0eXBlb2YgcG9zaXRpb24gIT09ICJ1bmRlZmluZWQiKSB7CiAgICAg
ICAgICAgIHRoaXMuc2V0UG9zaXRpb24ocG9zaXRpb24pOwogICAgICAgIH0KICAgIH0sCiAgICBn
ZXRJZDogZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiB0aGlzLl9pZDsKICAgIH0sCiAgICBz
ZXRJZDogZnVuY3Rpb24gKGlkKSB7CiAgICAgICAgaWYgKHR5cGVvZiBpZCA9PT0gInVuZGVmaW5l
ZCIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJRCBtdXN0IGJlIGRlZmluZWQuIik7
CiAgICAgICAgfQogICAgICAgIHRoaXMuX2lkID0gaWQ7CiAgICB9LAogICAgZ2V0UG9zaXRpb246
IGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb247CiAgICB9LAogICAg
c2V0UG9zaXRpb246IGZ1bmN0aW9uIChwb3NpdGlvbikgewogICAgICAgIGlmICh0eXBlb2YgcG9z
aXRpb24gIT09ICJudW1iZXIiKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIlBv
c2l0aW9uIG11c3QgYmUgYSBudW1iZXIuIik7CiAgICAgICAgfQogICAgICAgIHRoaXMuX3Bvc2l0
aW9uID0gcG9zaXRpb247CiAgICB9Cn0pOwpkb2pvLnByb3ZpZGUoImRqLndpZGdldC5wYW5lbHMu
dmlldy5QYWdpbmF0aW9uIik7CmRvam8uZGVjbGFyZSgiZGoud2lkZ2V0LnBhbmVscy52aWV3LlBh
Z2luYXRpb24iLCBudWxsLCB7CiAgICBjb25zdHJ1Y3RvcjogZnVuY3Rpb24gKG1vZGVsLCBwYWdD
bnQsIGNvbmZpZykgewogICAgICAgIHRoaXMuX21vZGVsID0gbW9kZWw7CiAgICAgICAgdGhpcy5f
cGFnQ250ID0gcGFnQ250OwogICAgICAgIHRoaXMucGFuZWxJbmNyZW1lbnQgPSBjb25maWcucGFu
ZWxJbmNyZW1lbnQ7CiAgICAgICAgdGhpcy5wYWdpbmF0aW9uRGl2aWRlciA9IGNvbmZpZy5wYWdp
bmF0aW9uRGl2aWRlcjsKICAgIH0sCiAgICBkaXNwbGF5QWN0aXZlU3VjY2VzczogZnVuY3Rpb24g
KCkgewogICAgICAgIHZhciBhcCA9IHRoaXMuX21vZGVsLmdldEFjdGl2ZSgpOwogICAgICAgIHZh
ciBudW0gPSB0aGlzLl9tb2RlbC5nZXROdW1iZXJPZlBhbmVscygpOwogICAgICAgIHZhciBzdGFy
dCA9IE1hdGguY2VpbChhcC5nZXRQb3NpdGlvbigpIC8gdGhpcy5wYW5lbEluY3JlbWVudCkgKyAo
YXAuZ2V0UG9zaXRpb24oKSAlIHRoaXMucGFuZWxJbmNyZW1lbnQgPiAxID8gMSA6IDApOwogICAg
ICAgIHRoaXMuX3BhZ0NudC5pbm5lckhUTUwgPSBzdGFydCArICIgIiArIHRoaXMucGFnaW5hdGlv
bkRpdmlkZXIgKyAiICIgKyBNYXRoLmNlaWwobnVtIC8gdGhpcy5wYW5lbEluY3JlbWVudCk7CiAg
ICB9Cn0pOwpkb2pvLnByb3ZpZGUoImRqLndpZGdldC5wYW5lbHMuY29udHJvbGxlci5OYXZBcnJv
d3MiKTsKZG9qby5yZXF1aXJlKCJkai5sYW5nIik7CmRvam8uZGVjbGFyZSgiZGoud2lkZ2V0LnBh
bmVscy5jb250cm9sbGVyLk5hdkFycm93cyIsIG51bGwsIHsKICAgIERFRkFVTFRfQ09ORklHOiB7
CiAgICAgICAgcGFuZWxJbmNyZW1lbnQ6IDEsCiAgICAgICAgZG9TdG9wRXZlbnQ6IHRydWUKICAg
IH0sCiAgICBjb25zdHJ1Y3RvcjogZnVuY3Rpb24gKG1vZGVsLCBuYXYsIGNmZykgewogICAgICAg
IHRoaXMuX2NmZyA9IGRqLmxhbmcuY2xvbmVNaXhpbih0aGlzLkRFRkFVTFRfQ09ORklHLCBjZmcp
OwogICAgICAgIHRoaXMuX21vZGVsID0gbW9kZWw7CiAgICAgICAgdGhpcy5fbmF2ID0gbmF2Owog
ICAgICAgIHRoaXMuX3Byb2NzID0gW107CiAgICAgICAgdGhpcy5jb25uZWN0SGFuZGxlcyA9IFtd
OwogICAgfSwKICAgIHNldExhc3RBY3RpdmU6IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgbWRs
ID0gdGhpcy5fbW9kZWw7CiAgICAgICAgaWYgKG1kbC5pc0xvY2tlZCgpKSB7CiAgICAgICAgICAg
IHRoaXMuX2VucXVldWVQcm9jKHRoaXMuc2V0TmV4dEFjdGl2ZSk7CiAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICB9CiAgICAgICAgbWRsLnNldEFjdGl2ZUJ5UG9zaXRpb24obWRsLmdldE51bWJl
ck9mUGFuZWxzKCkgLSBtZGwuZ2V0Vmlld0FyZWEoKSArIDEpOwogICAgfSwKICAgIHNldEZpcnN0
QWN0aXZlOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgaWYgKHRoaXMuX21vZGVsLmlzTG9ja2VkKCkp
IHsKICAgICAgICAgICAgdGhpcy5fZW5xdWV1ZVByb2ModGhpcy5zZXRQcmV2aW91c0FjdGl2ZSk7
CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdGhpcy5fbW9kZWwuc2V0RGly
ZWN0aW9uKHRoaXMuX21vZGVsLkRJUkVDVElPTi5QUkVWSU9VUyk7CiAgICAgICAgdGhpcy5fbW9k
ZWwuc2V0QWN0aXZlQnlQb3NpdGlvbigxKTsKICAgIH0sCiAgICBzZXRQcmV2aW91c0FjdGl2ZTog
ZnVuY3Rpb24gKCkgewogICAgICAgIGlmICh0aGlzLl9tb2RlbC5pc0xvY2tlZCgpKSB7CiAgICAg
ICAgICAgIHRoaXMuX2VucXVldWVQcm9jKHRoaXMuc2V0UHJldmlvdXNBY3RpdmUpOwogICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRoaXMuX21vZGVsLnNldERpcmVjdGlvbih0
aGlzLl9tb2RlbC5ESVJFQ1RJT04uUFJFVklPVVMpOwogICAgICAgIHRoaXMuX21vZGVsLnNldEFj
dGl2ZUJ5UG9zaXRpb24odGhpcy5fbW9kZWwuZ2V0QWN0aXZlKCkuZ2V0UG9zaXRpb24oKSAtIHRo
aXMuX2NmZy5wYW5lbEluY3JlbWVudCk7CiAgICB9LAogICAgc2V0TmV4dEFjdGl2ZTogZnVuY3Rp
b24gKCkgewogICAgICAgIHZhciBtZGwgPSB0aGlzLl9tb2RlbDsKICAgICAgICBpZiAobWRsLmlz
TG9ja2VkKCkpIHsKICAgICAgICAgICAgdGhpcy5fZW5xdWV1ZVByb2ModGhpcy5zZXROZXh0QWN0
aXZlKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB2YXIgdHJ5TmV4dFBv
c2l0aW9uID0gKHRoaXMuX21vZGVsLmdldEFjdGl2ZSgpLmdldFBvc2l0aW9uKCkgKyB0aGlzLl9j
ZmcucGFuZWxJbmNyZW1lbnQpOwogICAgICAgIHZhciBueHQgPSBtZGwuZ2V0QnlQb3NpdGlvbih0
cnlOZXh0UG9zaXRpb24pOwogICAgICAgIGlmIChtZGwuZ2V0Um90YXRpb25UeXBlKCkgPT0gbWRs
LlJPVEFUSU9OX1RZUEUuTElORUFSKSB7CiAgICAgICAgICAgIHZhciBoYXNNb3JlID0gKCgobWRs
LmdldE51bWJlck9mUGFuZWxzKCkgLSAobWRsLmdldFZpZXdBcmVhKCkgfHwgMCkpIC0gbWRsLmdl
dEFjdGl2ZSgpLmdldFBvc2l0aW9uKCkpID49IDApOwogICAgICAgICAgICBpZiAoaGFzTW9yZSA9
PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgIG1kbC5fYWN0aXZlUGFuZWxPYnNlcnZlci5maXJl
QnlOYW1lKCJmYWlsdXJlIiwgdHJ5TmV4dFBvc2l0aW9uKTsKICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBtZGwuc2V0RGlyZWN0aW9uKG1kbC5E
SVJFQ1RJT04uTkVYVCk7CiAgICAgICAgbWRsLnNldEFjdGl2ZUJ5UG9zaXRpb24odHJ5TmV4dFBv
c2l0aW9uKTsKICAgIH0sCiAgICBhZGRFdmVudHM6IGZ1bmN0aW9uICgpIHsKICAgICAgICBpZiAo
dGhpcy5fbmF2LnByZXZCdXR0b24pIHsKICAgICAgICAgICAgdGhpcy5fYWRkRXZlbnRGb3JUeXBl
KHRoaXMuX25hdi5wcmV2QnV0dG9uLCAicHJldiIpOwogICAgICAgIH0KICAgICAgICBpZiAodGhp
cy5fbmF2Lm5leHRCdXR0b24pIHsKICAgICAgICAgICAgdGhpcy5fYWRkRXZlbnRGb3JUeXBlKHRo
aXMuX25hdi5uZXh0QnV0dG9uLCAibmV4dCIpOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5f
bmF2LmZpcnN0QnV0dG9uKSB7CiAgICAgICAgICAgIHRoaXMuX2FkZEV2ZW50Rm9yVHlwZSh0aGlz
Ll9uYXYuZmlyc3RCdXR0b24sICJmaXJzdCIpOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5f
bmF2Lmxhc3RCdXR0b24pIHsKICAgICAgICAgICAgdGhpcy5fYWRkRXZlbnRGb3JUeXBlKHRoaXMu
X25hdi5sYXN0QnV0dG9uLCAibGFzdCIpOwogICAgICAgIH0KICAgIH0sCiAgICByZW1vdmVFdmVu
dHM6IGZ1bmN0aW9uICgpIHsKICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5jb25u
ZWN0SGFuZGxlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICBkb2pvLmRpc2Nv
bm5lY3QodGhpcy5jb25uZWN0SGFuZGxlc1tpXSk7CiAgICAgICAgfQogICAgfSwKICAgIF9lbnF1
ZXVlUHJvYzogZnVuY3Rpb24gKHByb2MpIHsKICAgICAgICB0aGlzLl9wcm9jcy5wdXNoKHByb2Mp
OwogICAgICAgIHRoaXMuX21vZGVsLmFkZExvY2tMaXN0ZW5lcihmdW5jdGlvbiAoKSB7CiAgICAg
ICAgICAgIHZhciBwciA9IHRoaXMuX3Byb2NzLnNoaWZ0KCk7CiAgICAgICAgICAgIGlmIChwcikg
ewogICAgICAgICAgICAgICAgcHIuY2FsbCh0aGlzKTsKICAgICAgICAgICAgfQogICAgICAgIH0s
IHRoaXMpOwogICAgfSwKICAgIF9hZGRFdmVudEZvclR5cGU6IGZ1bmN0aW9uIChvQnRuLCBidG5U
eXBlLCBkb1JlbW92ZUV2ZW50KSB7CiAgICAgICAgdGhpcy5jb25uZWN0SGFuZGxlcy5wdXNoKGRv
am8uY29ubmVjdChvQnRuLCAib25jbGljayIsIHRoaXMsIHRoaXMuX3N0b3BFdmVudEJyaWRnZSkp
OwogICAgICAgIHRoaXMuY29ubmVjdEhhbmRsZXMucHVzaChkb2pvLmNvbm5lY3Qob0J0biwgJ29u
bW91c2Vkb3duJywgdGhpcywgZnVuY3Rpb24gKGV2KSB7CiAgICAgICAgICAgIHRoaXMuX3N0b3BF
dmVudEJyaWRnZShldik7CiAgICAgICAgICAgIHRoaXMuX3NldEFjdGl2ZUJ5VHlwZU9yQmVnaW5J
bnRlcnZhbChidG5UeXBlKTsKICAgICAgICB9KSk7CiAgICAgICAgdGhpcy5jb25uZWN0SGFuZGxl
cy5wdXNoKGRvam8uY29ubmVjdChvQnRuLCAnb25tb3VzZXVwJywgdGhpcywgdGhpcy5fZW5kRXZl
bnRCcmlkZ2UpKTsKICAgICAgICB0aGlzLmNvbm5lY3RIYW5kbGVzLnB1c2goZG9qby5jb25uZWN0
KG9CdG4sICdvbm1vdXNlb3V0JywgdGhpcywgdGhpcy5fZW5kRXZlbnRCcmlkZ2UpKTsKICAgIH0s
CiAgICBfc3RvcEV2ZW50QnJpZGdlOiBmdW5jdGlvbiAoZXYpIHsKICAgICAgICBpZiAodGhpcy5f
Y2ZnLmRvU3RvcEV2ZW50ID09PSB0cnVlKSB7CiAgICAgICAgICAgIGRvam8uc3RvcEV2ZW50KGV2
KTsKICAgICAgICB9CiAgICB9LAogICAgX3NldEFjdGl2ZUJ5VHlwZU9yQmVnaW5JbnRlcnZhbDog
ZnVuY3Rpb24gKHR5cGUpIHsKICAgICAgICBpZiAoIXRoaXMuX25leHRJbnRlcnZhbCB8fCB0aGlz
Ll9uZXh0SW50ZXJ2YWwgPT09IG51bGwpIHsKICAgICAgICAgICAgdGhpcy5fc2V0QWN0aXZlQnlU
eXBlKHR5cGUpOwogICAgICAgIH0KICAgICAgICB0aGlzLl9uZXh0SW50ZXJ2YWwgPSBzZXRJbnRl
cnZhbChkb2pvLmhpdGNoKHRoaXMsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhpcy5fc2V0
QWN0aXZlQnlUeXBlKHR5cGUpOwogICAgICAgIH0pLCA0MDApOwogICAgfSwKICAgIF9lbmRFdmVu
dEJyaWRnZTogZnVuY3Rpb24gKCkgewogICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5fbmV4dElu
dGVydmFsKTsKICAgICAgICB0aGlzLl9uZXh0SW50ZXJ2YWwgPSBudWxsOwogICAgfSwKICAgIF9z
ZXRBY3RpdmVCeVR5cGU6IGZ1bmN0aW9uICh0eXBlKSB7CiAgICAgICAgdmFyIHByb2M7CiAgICAg
ICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgY2FzZSAicHJldiI6CiAgICAgICAgICAgIHByb2Mg
PSB0aGlzLnNldFByZXZpb3VzQWN0aXZlOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNl
ICJmaXJzdCI6CiAgICAgICAgICAgIHByb2MgPSB0aGlzLnNldEZpcnN0QWN0aXZlOwogICAgICAg
ICAgICBicmVhazsKICAgICAgICBjYXNlICJsYXN0IjoKICAgICAgICAgICAgcHJvYyA9IHRoaXMu
c2V0TGFzdEFjdGl2ZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgcHJvYyA9IHRoaXMuc2V0TmV4dEFjdGl2ZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgfQogICAgICAgIHByb2MuY2FsbCh0aGlzKTsKICAgIH0KfSk7CmRvam8ucHJvdmlkZSgiZGou
d2lkZ2V0LnBhbmVscy5jb250cm9sbGVyLk5hdlRhYnMiKTsKZG9qby5yZXF1aXJlKCJkai5sYW5n
Iik7CmRvam8uZGVjbGFyZSgiZGoud2lkZ2V0LnBhbmVscy5jb250cm9sbGVyLk5hdlRhYnMiLCBu
dWxsLCB7CiAgICBERUZBVUxUX0NPTkZJRzogewogICAgICAgIGFjdGl2ZUV2ZW50OiAib25jbGlj
ayIsCiAgICAgICAgZG9TdG9wRXZlbnQ6IHRydWUKICAgIH0sCiAgICBjb25zdHJ1Y3RvcjogZnVu
Y3Rpb24gKG1vZGVsLCB0YWJzLCBjZmcpIHsKICAgICAgICB0aGlzLl9jZmcgPSBkai5sYW5nLmNs
b25lTWl4aW4odGhpcy5ERUZBVUxUX0NPTkZJRywgY2ZnKTsKICAgICAgICB0aGlzLm1vZGVsID0g
bW9kZWw7CiAgICAgICAgdGhpcy50YWJzID0gdGFiczsKICAgICAgICB0aGlzLmNvbm5lY3RIYW5k
bGVzID0gW107CiAgICB9LAogICAgc2V0QWN0aXZlOiBmdW5jdGlvbiAodGlkKSB7CiAgICAgICAg
dGhpcy5tb2RlbC5zZXRBY3RpdmVCeUlkKHRpZCk7CiAgICB9LAogICAgYWRkRXZlbnRzOiBmdW5j
dGlvbiAoZG9SZW1vdmVFdmVudHMpIHsKICAgICAgICBmb3IgKHZhciB0aWQgaW4gdGhpcy50YWJz
KSB7CiAgICAgICAgICAgIGlmICh0aGlzLnRhYnMuaGFzT3duUHJvcGVydHkodGlkKSkgewogICAg
ICAgICAgICAgICAgdGhpcy5fYWRkRXZlbnRGb3JUYWIodGhpcy50YWJzW3RpZF0pOwogICAgICAg
ICAgICB9CiAgICAgICAgfQogICAgfSwKICAgIHJlbW92ZUV2ZW50czogZnVuY3Rpb24gKCkgewog
ICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB0aGlzLmNvbm5lY3RIYW5kbGVzLmxlbmd0aDsg
aSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgIGRvam8uZGlzY29ubmVjdCh0aGlzLmNvbm5lY3RI
YW5kbGVzW2ldKTsKICAgICAgICB9CiAgICB9LAogICAgX2FkZEV2ZW50Rm9yVGFiOiBmdW5jdGlv
biAodGFiKSB7CiAgICAgICAgdGhpcy5jb25uZWN0SGFuZGxlcy5wdXNoKGRvam8uY29ubmVjdCh0
YWIuZ2V0RWxlbWVudCgpLCB0aGlzLl9jZmcuYWN0aXZlRXZlbnQsIGRvam8uaGl0Y2godGhpcywg
ZnVuY3Rpb24gKGV2KSB7CiAgICAgICAgICAgIGlmICh0aGlzLl9jZmcuZG9TdG9wRXZlbnQgPT09
IHRydWUpIHsKICAgICAgICAgICAgICAgIGRvam8uc3RvcEV2ZW50KGV2KTsKICAgICAgICAgICAg
fQogICAgICAgICAgICB0aGlzLnNldEFjdGl2ZSh0YWIuZ2V0SWQoKSk7CiAgICAgICAgfSkpKTsK
ICAgIH0KfSk7CmRvam8ucHJvdmlkZSgiZGoud2lkZ2V0LnBhbmVscy5QYW5lbE1vZGVsIik7CmRv
am8ucmVxdWlyZSgiZGoudXRpbC5PYnNlcnZlciIpOwpkb2pvLmRlY2xhcmUoImRqLndpZGdldC5w
YW5lbHMuUGFuZWxNb2RlbCIsIG51bGwsIHsKICAgIFJPVEFUSU9OX1RZUEU6IHsKICAgICAgICBM
SU5FQVI6IDAsCiAgICAgICAgQ0lSQ1VMQVI6IDEKICAgIH0sCiAgICBESVJFQ1RJT046IHsKICAg
ICAgICBQUkVWSU9VUzogMCwKICAgICAgICBORVhUOiAxCiAgICB9LAogICAgREVGQVVMVF9DT05G
SUc6IHsKICAgICAgICByb3RhdGlvblR5cGU6IDAKICAgIH0sCiAgICBjb25zdHJ1Y3RvcjogZnVu
Y3Rpb24gKHBhbmVscywgY2ZnKSB7CiAgICAgICAgdGhpcy5fY2ZnID0gZG9qby5taXhpbihkb2pv
LmNsb25lKHRoaXMuREVGQVVMVF9DT05GSUcpLCBjZmcpOwogICAgICAgIHRoaXMuX2hQYW5lbHMg
PSB7fTsKICAgICAgICB0aGlzLl9wYW5lbElkcyA9IFtdOwogICAgICAgIHRoaXMuX3ByZXZJbkhp
c3RvcnkgPSBudWxsOwogICAgICAgIHRoaXMuX2xhc3RQb3NpdGlvbiA9IDE7CiAgICAgICAgdGhp
cy5fYWN0aXZlUGFuZWwgPSBudWxsOwogICAgICAgIHRoaXMuX2FjdGl2ZVBhbmVsT2JzZXJ2ZXIg
PSBuZXcgZGoudXRpbC5PYnNlcnZlcigpOwogICAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IHRoaXMu
RElSRUNUSU9OLk5FWFQ7CiAgICAgICAgdGhpcy5faXNMb2NrZWQgPSBmYWxzZTsKICAgICAgICB0
aGlzLl9sb2NrT2JzZXJ2ZXIgPSBuZXcgZGoudXRpbC5PYnNlcnZlcigpOwogICAgICAgIHRoaXMu
X3JvdGF0aW9uU3RhdGUgPSAxOwogICAgICAgIGlmIChwYW5lbHMpIHsKICAgICAgICAgICAgdGhp
cy5hZGRQYW5lbHMocGFuZWxzKTsKICAgICAgICB9CiAgICB9LAogICAgYWRkUGFuZWw6IGZ1bmN0
aW9uIChwYW5lbElkKSB7CiAgICAgICAgdmFyIHBhbmVsID0gbmV3IGRqLndpZGdldC5wYW5lbHMu
UGFuZWwocGFuZWxJZCwgdGhpcy5fbGFzdFBvc2l0aW9uKTsKICAgICAgICB0aGlzLl9wYW5lbElk
c1t0aGlzLl9sYXN0UG9zaXRpb25dID0gcGFuZWwuZ2V0SWQoKTsKICAgICAgICB0aGlzLl9oUGFu
ZWxzW3BhbmVsSWRdID0gcGFuZWw7CiAgICAgICAgdGhpcy5fbGFzdFBvc2l0aW9uKys7CiAgICB9
LAogICAgYWRkUGFuZWxzOiBmdW5jdGlvbiAocGFuZWxzKSB7CiAgICAgICAgZm9yICh2YXIgcGlk
IGluIHBhbmVscykgewogICAgICAgICAgICBpZiAocGFuZWxzLmhhc093blByb3BlcnR5KHBpZCkp
IHsKICAgICAgICAgICAgICAgIHZhciBwYW5lbCA9IHBhbmVsc1twaWRdLAogICAgICAgICAgICAg
ICAgICAgIHBhbmVsSWQgPSBwYW5lbC5nZXRJZCgpOwogICAgICAgICAgICAgICAgdGhpcy5fcGFu
ZWxJZHNbdGhpcy5fbGFzdFBvc2l0aW9uXSA9IHBhbmVsSWQ7CiAgICAgICAgICAgICAgICB0aGlz
Ll9oUGFuZWxzW3BhbmVsSWRdID0gcGFuZWw7CiAgICAgICAgICAgICAgICB0aGlzLl9sYXN0UG9z
aXRpb24rKzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0sCiAgICBoYXNJZDogZnVuY3Rp
b24gKHBhbmVsSWQpIHsKICAgICAgICByZXR1cm4gKHR5cGVvZiB0aGlzLl9oUGFuZWxzW3BhbmVs
SWRdICE9PSAidW5kZWZpbmVkIik7CiAgICB9LAogICAgaGFzUG9zaXRpb246IGZ1bmN0aW9uIChw
YW5lbFBvc2l0aW9uKSB7CiAgICAgICAgcmV0dXJuICgocGFuZWxQb3NpdGlvbiA+IDApICYmIChw
YW5lbFBvc2l0aW9uIDwgdGhpcy5fcGFuZWxJZHMubGVuZ3RoKSk7CiAgICB9LAogICAgZ2V0QnlJ
ZDogZnVuY3Rpb24gKHBhbmVsSWQpIHsKICAgICAgICBpZiAoIXRoaXMuaGFzSWQocGFuZWxJZCkp
IHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOb1N1Y2hFbGVtZW50RXhjZXB0aW9uIik7
CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLl9oUGFuZWxzW3BhbmVsSWRdOwogICAgfSwK
ICAgIGdldEJ5UG9zaXRpb246IGZ1bmN0aW9uIChwYW5lbFBvc2l0aW9uKSB7CiAgICAgICAgaWYg
KCF0aGlzLmhhc1Bvc2l0aW9uKHBhbmVsUG9zaXRpb24pKSB7CiAgICAgICAgICAgIGlmICh0aGlz
Ll9jZmcucm90YXRpb25UeXBlID09PSB0aGlzLlJPVEFUSU9OX1RZUEUuQ0lSQ1VMQVIpIHsKICAg
ICAgICAgICAgICAgIHZhciBudW1PZlBhbiA9IHRoaXMuZ2V0TnVtYmVyT2ZQYW5lbHMoKTsKICAg
ICAgICAgICAgICAgIHBhbmVsUG9zaXRpb24gPSAocGFuZWxQb3NpdGlvbiAlIG51bU9mUGFuKTsK
ICAgICAgICAgICAgICAgIHBhbmVsUG9zaXRpb24gPSAocGFuZWxQb3NpdGlvbiA9PT0gMCkgPyBu
dW1PZlBhbiA6IHBhbmVsUG9zaXRpb247CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdmFyIHBpZCA9IHRo
aXMuX3BhbmVsSWRzW3BhbmVsUG9zaXRpb25dOwogICAgICAgIHJldHVybiB0aGlzLl9oUGFuZWxz
W3BpZF07CiAgICB9LAogICAgZ2V0QWN0aXZlOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgcmV0dXJu
IHRoaXMuX2FjdGl2ZVBhbmVsOwogICAgfSwKICAgIGdldFByZXZJbkhpc3Rvcnk6IGZ1bmN0aW9u
ICgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fcHJldkluSGlzdG9yeTsKICAgIH0sCiAgICBnZXRB
bGw6IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgdmFsdWVzID0gW107CiAgICAgICAgZm9yICh2
YXIgdmFsdWUgaW4gdGhpcy5faFBhbmVscykgewogICAgICAgICAgICBpZiAodGhpcy5faFBhbmVs
cy5oYXNPd25Qcm9wZXJ0eSh2YWx1ZSkpIHsKICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKHRo
aXMuX2hQYW5lbHNbdmFsdWVdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1
cm4gdmFsdWVzOwogICAgfSwKICAgIGdldE51bWJlck9mUGFuZWxzOiBmdW5jdGlvbiAoKSB7CiAg
ICAgICAgcmV0dXJuICh0aGlzLl9wYW5lbElkcy5sZW5ndGggLSAxKTsKICAgIH0sCiAgICBnZXRS
b3RhdGlvblN0YXRlOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX3JvdGF0aW9u
U3RhdGU7CiAgICB9LAogICAgZ2V0Um90YXRpb25UeXBlOiBmdW5jdGlvbiAoKSB7CiAgICAgICAg
cmV0dXJuIHRoaXMuX2NmZy5yb3RhdGlvblR5cGU7CiAgICB9LAogICAgZ2V0RGlyZWN0aW9uOiBm
dW5jdGlvbiAoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX2RpcmVjdGlvbjsKICAgIH0sCiAgICBz
ZXRSb3RhdGlvblN0YXRlOiBmdW5jdGlvbiAoc3RhdGUpIHsKICAgICAgICBpZiAoc3RhdGUgPCAw
IHx8IHN0YXRlID4gMSkgewogICAgICAgICAgICB0aGlzLl9hY3RpdmVQYW5lbE9ic2VydmVyLmZp
cmVCeU5hbWUoInJvdGF0aW9uU3RhdGVGYWlsdXJlIiwgc3RhdGUpOwogICAgICAgIH0KICAgICAg
ICB0aGlzLl9yb3RhdGlvblN0YXRlID0gc3RhdGU7CiAgICAgICAgdGhpcy5fYWN0aXZlUGFuZWxP
YnNlcnZlci5maXJlQnlOYW1lKCJyb3RhdGlvblN0YXRlU3VjY2VzcyIsIHN0YXRlKTsKICAgIH0s
CiAgICBzZXREaXJlY3Rpb246IGZ1bmN0aW9uIChkaXIpIHsKICAgICAgICBpZiAoZGlyIDwgMCB8
fCBkaXIgPiAxKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiSW5kZXhPdXRPZkJvdW5k
c0V4Y2VwdGlvbiIpOwogICAgICAgIH0KICAgICAgICB0aGlzLl9kaXJlY3Rpb24gPSBkaXI7CiAg
ICB9LAogICAgc2V0QWN0aXZlOiBmdW5jdGlvbiAocGFuZWwpIHsKICAgICAgICBpZiAocGFuZWwg
JiYgcGFuZWwuZ2V0SWQpIHsKICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVCeUlkKHBhbmVsLmdl
dElkKCkpOwogICAgICAgIH0KICAgIH0sCiAgICBzZXRBY3RpdmVCeUlkOiBmdW5jdGlvbiAocGFu
ZWxJZCkgewogICAgICAgIGlmICghdGhpcy5oYXNJZChwYW5lbElkKSkgewogICAgICAgICAgICB0
aGlzLl9hY3RpdmVQYW5lbE9ic2VydmVyLmZpcmVCeU5hbWUoImZhaWx1cmUiLCBwYW5lbElkKTsK
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB2YXIgcGFuZWwgPSB0aGlzLmdl
dEJ5SWQocGFuZWxJZCk7CiAgICAgICAgdGhpcy5fcHJldkluSGlzdG9yeSA9IHRoaXMuX2FjdGl2
ZVBhbmVsOwogICAgICAgIHRoaXMuX2FjdGl2ZVBhbmVsID0gcGFuZWw7CiAgICAgICAgdGhpcy5f
YWN0aXZlUGFuZWxPYnNlcnZlci5maXJlQnlOYW1lKCJzdWNjZXNzIiwgcGFuZWwpOwogICAgfSwK
ICAgIHNldEFjdGl2ZUJ5UG9zaXRpb246IGZ1bmN0aW9uIChwYW5lbFBvc2l0aW9uKSB7CiAgICAg
ICAgaWYgKCF0aGlzLmhhc1Bvc2l0aW9uKHBhbmVsUG9zaXRpb24pKSB7CiAgICAgICAgICAgIGlm
ICh0aGlzLl9jZmcucm90YXRpb25UeXBlID09PSB0aGlzLlJPVEFUSU9OX1RZUEUuQ0lSQ1VMQVIp
IHsKICAgICAgICAgICAgICAgIHZhciBudW1PZlBhbiA9IHRoaXMuZ2V0TnVtYmVyT2ZQYW5lbHMo
KTsKICAgICAgICAgICAgICAgIHBhbmVsUG9zaXRpb24gPSAocGFuZWxQb3NpdGlvbiAlIG51bU9m
UGFuKTsKICAgICAgICAgICAgICAgIHBhbmVsUG9zaXRpb24gPSAocGFuZWxQb3NpdGlvbiA9PT0g
MCkgPyBudW1PZlBhbiA6IHBhbmVsUG9zaXRpb247CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAgICB0aGlzLl9hY3RpdmVQYW5lbE9ic2VydmVyLmZpcmVCeU5hbWUoImZhaWx1cmUi
LCBwYW5lbFBvc2l0aW9uKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQog
ICAgICAgIH0KICAgICAgICB2YXIgcGlkID0gdGhpcy5fcGFuZWxJZHNbcGFuZWxQb3NpdGlvbl07
CiAgICAgICAgdGhpcy5zZXRBY3RpdmVCeUlkKHBpZCk7CiAgICB9LAogICAgYWRkQ2hhbmdlTGlz
dGVuZXI6IGZ1bmN0aW9uIChldmVudCwgbGlzdGVuZXIsIGNvbnRleHQpIHsKICAgICAgICBpZiAo
YXJndW1lbnRzLmxlbmd0aCA8IDMgJiYgKHR5cGVvZiBldmVudCA9PT0gImZ1bmN0aW9uIikpIHsK
ICAgICAgICAgICAgY29udGV4dCA9IGxpc3RlbmVyOwogICAgICAgICAgICBsaXN0ZW5lciA9IGV2
ZW50OwogICAgICAgICAgICBldmVudCA9ICJzdWNjZXNzIjsKICAgICAgICB9CiAgICAgICAgY29u
dGV4dCA9ICh0eXBlb2YgY29udGV4dCAhPT0gInVuZGVmaW5lZCIpID8gY29udGV4dCA6IHRoaXM7
CiAgICAgICAgdGhpcy5fYWN0aXZlUGFuZWxPYnNlcnZlci5zdWJzY3JpYmVCeU5hbWUoZXZlbnQs
IGxpc3RlbmVyLCBjb250ZXh0KTsKICAgIH0sCiAgICBpc0xvY2tlZDogZnVuY3Rpb24gKCkgewog
ICAgICAgIHJldHVybiB0aGlzLl9pc0xvY2tlZDsKICAgIH0sCiAgICBhZGRMb2NrTGlzdGVuZXI6
IGZ1bmN0aW9uIChjYiwgY29udGV4dCkgewogICAgICAgIHRoaXMuX2xvY2tPYnNlcnZlci5zdWJz
Y3JpYmUoY2IsIGNvbnRleHQpOwogICAgfSwKICAgIGRvTG9jazogZnVuY3Rpb24gKCkgewogICAg
ICAgIHRoaXMuX2lzTG9ja2VkID0gdHJ1ZTsKICAgIH0sCiAgICByZWxlYXNlTG9jazogZnVuY3Rp
b24gKCkgewogICAgICAgIHRoaXMuX2lzTG9ja2VkID0gZmFsc2U7CiAgICAgICAgdGhpcy5fbG9j
a09ic2VydmVyLmZpcmUoKTsKICAgIH0sCiAgICBydW5BZnRlckxvY2tSZWxlYXNlZDogZnVuY3Rp
b24gKGNiLCBjdHgpIHsKICAgICAgICBpZiAodGhpcy5faXNMb2NrZWQpIHsKICAgICAgICAgICAg
dGhpcy5hZGRMb2NrTGlzdGVuZXIoY2IsIGN0eCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgY2IuY2FsbChjdHgpOwogICAgICAgIH0KICAgIH0sCiAgICBnZXRWaWV3QXJlYTogZnVuY3Rp
b24gKCkgewogICAgICAgIHJldHVybiB0aGlzLl92aWV3QXJlYTsKICAgIH0sCiAgICBzZXRWaWV3
QXJlYTogZnVuY3Rpb24gKHZhKSB7CiAgICAgICAgdGhpcy5fdmlld0FyZWEgPSB2YTsKICAgIH0s
CiAgICBnZXRBY3RpdmVQYW5lbDogZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiB0aGlzLmdl
dEFjdGl2ZSgpLmdldElkKCk7CiAgICB9LAogICAgc2V0QWN0aXZlUGFuZWw6IGZ1bmN0aW9uIChw
aWQpIHsKICAgICAgICB2YXIgbWV0aCA9ICh0eXBlb2YgcGlkID09ICJzdHJpbmciKSA/IHRoaXMu
c2V0QWN0aXZlQnlJZCA6IHRoaXMuc2V0QWN0aXZlQnlQb3NpdGlvbjsKICAgICAgICByZXR1cm4g
bWV0aC5jYWxsKHRoaXMsIHBpZCk7CiAgICB9LAogICAgaGFzUGFuZWw6IGZ1bmN0aW9uIChwYW5l
bCkgewogICAgICAgIHZhciBwaWQgPSAocGFuZWwuZ2V0SWQpID8gcGFuZWwuZ2V0SWQoKSA6IHBh
bmVsOwogICAgICAgIHJldHVybiB0aGlzLmhhc0lkKHBpZCk7CiAgICB9LAogICAgb2JzZXJ2ZVBh
bmVsczogZnVuY3Rpb24gKGNhbGxiYWNrKSB7CiAgICAgICAgdGhpcy5hZGRDaGFuZ2VMaXN0ZW5l
cihmdW5jdGlvbiAocGFuZWwpIHsKICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhpcywgW3Bh
bmVsLmdldElkKCksIHBhbmVsLmdldElkKCldKTsKICAgICAgICB9LCB0aGlzKTsKICAgIH0KfSk7
CmRvam8ucHJvdmlkZSgiZGoud2lkZ2V0LnBhbmVscy52aWV3LkJhc2VQYW5lbCIpOwpkb2pvLnJl
cXVpcmUoImRqLmxhbmciKTsKZG9qby5kZWNsYXJlKCJkai53aWRnZXQucGFuZWxzLnZpZXcuQmFz
ZVBhbmVsIiwgbnVsbCwgewogICAgREVGQVVMVF9DT05GSUc6IHsKICAgICAgICBhbmltYXRpb25E
dXJhdGlvbjogMC4zLAogICAgICAgIGFuaW1hdGlvblR5cGU6ICJzbGlkZSIsCiAgICAgICAgb3Jp
ZW50YXRpb246ICJob3Jpem9udGFsIgogICAgfSwKICAgIGVuYWJsZUxhenlJbWFnZXM6IGZ1bmN0
aW9uIChtb2RlbCwgcGFuZWxHcm91cCkgewogICAgICAgIHZhciBhID0gbW9kZWwuZ2V0QWN0aXZl
UGFuZWwoKTsKICAgICAgICB2YXIgdiA9IG1vZGVsLmdldFZpZXdBcmVhKCk7CiAgICAgICAgdmFy
IHVsQ291bnQgPSBkb2pvLnF1ZXJ5KCd1bC5uZXdzSXRlbScsIHBhbmVsR3JvdXAucGFyZW50Tm9k
ZSkubGVuZ3RoOwogICAgICAgIGZvciAoaiA9IDA7IGogPCB1bENvdW50OyBqKyspIHsKICAgICAg
ICAgICAgZm9yIChpID0gYTsgaSA8IGEgKyAoMiAqIHYpOyBpKyspIHsKICAgICAgICAgICAgICAg
IHZhciBVTHMgPSBkb2pvLnF1ZXJ5KCd1bC5uZXdzSXRlbScsIHBhbmVsR3JvdXAucGFyZW50Tm9k
ZSk7CiAgICAgICAgICAgICAgICB2YXIgaW1hZ2UgPSBkb2pvLnF1ZXJ5KCdpbWcnLCBVTHNbal0p
W2ldOwogICAgICAgICAgICAgICAgaWYgKCFpbWFnZSkgewogICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGltYWdlLmdldEF0dHJp
YnV0ZSgnZGF0YS1zcmMnKSkgewogICAgICAgICAgICAgICAgICAgIGltYWdlLnNldEF0dHJpYnV0
ZSgnc3JjJywgaW1hZ2UuZ2V0QXR0cmlidXRlKCdkYXRhLXNyYycpKTsKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfSk7CmRvam8ucHJvdmlkZSgiZGoud2lk
Z2V0LnBhbmVscy52aWV3Lk5hdkFycm93cyIpOwpkb2pvLnJlcXVpcmUoImRqLmxhbmciKTsKZG9q
by5kZWNsYXJlKCJkai53aWRnZXQucGFuZWxzLnZpZXcuTmF2QXJyb3dzIiwgbnVsbCwgewogICAg
REVGQVVMVF9DT05GSUc6IHsKICAgICAgICBwcmV2QnV0dG9uRW5hYmxlZFN0eWxlOiAiZW5hYmxl
ZFByZXYiLAogICAgICAgIG5leHRCdXR0b25FbmFibGVkU3R5bGU6ICJlbmFibGVkTmV4dCIsCiAg
ICAgICAgZmlyc3RCdXR0b25FbmFibGVkU3R5bGU6ICJlbmFibGVkRmlyc3QiLAogICAgICAgIGxh
c3RCdXR0b25FbmFibGVkU3R5bGU6ICJlbmFibGVkTGFzdCIsCiAgICAgICAgcGFuZWxJbmNyZW1l
bnQ6IDEKICAgIH0sCiAgICBjb25zdHJ1Y3RvcjogZnVuY3Rpb24gKG1vZGVsLCBuYXYsIGNmZykg
ewogICAgICAgIHRoaXMuX2NmZyA9IGRqLmxhbmcuY2xvbmVNaXhpbih0aGlzLkRFRkFVTFRfQ09O
RklHLCBjZmcpOwogICAgICAgIHRoaXMuX21vZGVsID0gbW9kZWw7CiAgICAgICAgdGhpcy5fbmF2
ID0gbmF2OwogICAgfSwKICAgIGRpc3BsYXlBY3RpdmVTdWNjZXNzOiBmdW5jdGlvbiAocGFuZWwp
IHsKICAgICAgICB0aGlzLl91cGRhdGVQcmV2aW91cygpOwogICAgICAgIHRoaXMuX3VwZGF0ZU5l
eHQoKTsKICAgIH0sCiAgICBfdXBkYXRlUHJldmlvdXM6IGZ1bmN0aW9uICgpIHsKICAgICAgICB2
YXIgbW9kID0gdGhpcy5fbW9kZWwsCiAgICAgICAgICAgIHBwID0gbW9kLmdldEJ5UG9zaXRpb24o
bW9kLmdldEFjdGl2ZSgpLmdldFBvc2l0aW9uKCkgLSB0aGlzLl9jZmcucGFuZWxJbmNyZW1lbnQp
OwogICAgICAgIGlmICghcHApIHsKICAgICAgICAgICAgZG9qby5yZW1vdmVDbGFzcyh0aGlzLl9u
YXYucHJldkJ1dHRvbiwgdGhpcy5fY2ZnLnByZXZCdXR0b25FbmFibGVkU3R5bGUpOwogICAgICAg
ICAgICBpZiAodGhpcy5fbmF2LmZpcnN0QnV0dG9uKSB7CiAgICAgICAgICAgICAgICBkb2pvLnJl
bW92ZUNsYXNzKHRoaXMuX25hdi5maXJzdEJ1dHRvbiwgdGhpcy5fY2ZnLmZpcnN0QnV0dG9uRW5h
YmxlZFN0eWxlKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGRv
am8uYWRkQ2xhc3ModGhpcy5fbmF2LnByZXZCdXR0b24sIHRoaXMuX2NmZy5wcmV2QnV0dG9uRW5h
YmxlZFN0eWxlKTsKICAgICAgICAgICAgaWYgKHRoaXMuX25hdi5maXJzdEJ1dHRvbikgewogICAg
ICAgICAgICAgICAgZG9qby5hZGRDbGFzcyh0aGlzLl9uYXYuZmlyc3RCdXR0b24sIHRoaXMuX2Nm
Zy5maXJzdEJ1dHRvbkVuYWJsZWRTdHlsZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9
LAogICAgX3VwZGF0ZU5leHQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgbW9kID0gdGhpcy5f
bW9kZWwsCiAgICAgICAgICAgIG5wID0gbW9kLmdldEJ5UG9zaXRpb24obW9kLmdldEFjdGl2ZSgp
LmdldFBvc2l0aW9uKCkgKyBtb2QuZ2V0Vmlld0FyZWEoKSk7CiAgICAgICAgaWYgKCFucCkgewog
ICAgICAgICAgICBkb2pvLnJlbW92ZUNsYXNzKHRoaXMuX25hdi5uZXh0QnV0dG9uLCB0aGlzLl9j
ZmcubmV4dEJ1dHRvbkVuYWJsZWRTdHlsZSk7CiAgICAgICAgICAgIGlmICh0aGlzLl9uYXYubGFz
dEJ1dHRvbikgewogICAgICAgICAgICAgICAgZG9qby5yZW1vdmVDbGFzcyh0aGlzLl9uYXYubGFz
dEJ1dHRvbiwgdGhpcy5fY2ZnLmxhc3RCdXR0b25FbmFibGVkU3R5bGUpOwogICAgICAgICAgICB9
CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZG9qby5hZGRDbGFzcyh0aGlzLl9uYXYubmV4
dEJ1dHRvbiwgdGhpcy5fY2ZnLm5leHRCdXR0b25FbmFibGVkU3R5bGUpOwogICAgICAgICAgICBp
ZiAodGhpcy5fbmF2Lmxhc3RCdXR0b24pIHsKICAgICAgICAgICAgICAgIGRvam8uYWRkQ2xhc3Mo
dGhpcy5fbmF2Lmxhc3RCdXR0b24sIHRoaXMuX2NmZy5sYXN0QnV0dG9uRW5hYmxlZFN0eWxlKTsK
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfSk7CmRvam8ucHJvdmlkZSgiZGoud2lkZ2V0
LnBhbmVscy52aWV3LlBhbmVsIik7CmRvam8ucmVxdWlyZSgiZGoubGFuZyIpOwpkb2pvLmRlY2xh
cmUoImRqLndpZGdldC5wYW5lbHMudmlldy5QYW5lbCIsIG51bGwsIHsKICAgIERFRkFVTFRfQ09O
RklHOiB7CiAgICAgICAgc2VsZWN0ZWRDbGFzczogIiIsCiAgICAgICAgZGVzZWxlY3RlZENsYXNz
OiAiaGlkZGVuIgogICAgfSwKICAgIGNvbnN0cnVjdG9yOiBmdW5jdGlvbiAobW9kZWwsIHBhbmVs
cywgY2ZnKSB7CiAgICAgICAgdGhpcy5fY2ZnID0gZGoubGFuZy5jbG9uZU1peGluKHRoaXMuREVG
QVVMVF9DT05GSUcsIGNmZyk7CiAgICAgICAgdGhpcy5fbW9kZWwgPSBtb2RlbDsKICAgICAgICB0
aGlzLl9vUGFuZWxzID0gcGFuZWxzOwogICAgfSwKICAgIGRpc3BsYXlBY3RpdmVTdWNjZXNzOiBm
dW5jdGlvbiAocGFuZWwpIHsKICAgICAgICB0aGlzLl9kZXNlbGVjdEFsbEV4Y2VwdChwYW5lbCk7
CiAgICAgICAgdGhpcy5fc2VsZWN0KHBhbmVsKTsKICAgIH0sCiAgICBnZXRDb250YWluZXI6IGZ1
bmN0aW9uICgpIHsKICAgICAgICBpZiAodGhpcy5fb0NudCkgewogICAgICAgICAgICByZXR1cm4g
dGhpcy5fb0NudDsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuX2NmZy5jb250YWluZXIgJiYg
dGhpcy5fY2ZnLmNvbnRhaW5lciAhPT0gIiIpIHsKICAgICAgICAgICAgdGhpcy5fb0NudCA9IGRv
am8uYnlJZCh0aGlzLl9jZmcuY29udGFpbmVyKTsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29D
bnQ7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLl9vUGFuZWxHcm91cCkgewogICAgICAgICAg
ICB0aGlzLl9vQ250ID0gdGhpcy5fb1BhbmVsR3JvdXAucGFyZW50Tm9kZTsKICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX29DbnQ7CiAgICAgICAgfQogICAgICAgIHZhciBhcCA9IHRoaXMuX21vZGVs
LmdldEJ5UG9zaXRpb24oMSk7CiAgICAgICAgdmFyIGVsID0gdGhpcy5fb1BhbmVsc1thcC5nZXRJ
ZCgpXTsKICAgICAgICBpZiAoIWVsLnBhcmVudE5vZGUgfHwgIWVsLnBhcmVudE5vZGUucGFyZW50
Tm9kZSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgdmFyIGdy
cCA9IGVsLnBhcmVudE5vZGU7CiAgICAgICAgdGhpcy5fb0NudCA9IGdycC5wYXJlbnROb2RlOwog
ICAgICAgIHJldHVybiB0aGlzLl9vQ250OwogICAgfSwKICAgIGdldFBhbmVsQnlQb3NpdGlvbjog
ZnVuY3Rpb24gKHBvcykgewogICAgICAgIHJldHVybiB0aGlzLl9vUGFuZWxzW3Bvc107CiAgICB9
LAogICAgX2Rlc2VsZWN0QWxsRXhjZXB0OiBmdW5jdGlvbiAocGFuZWxOb3RUb0hpZGUpIHsKICAg
ICAgICB2YXIgcGFuZWwgPSBudWxsOwogICAgICAgIGZvciAodmFyIHBpZCBpbiB0aGlzLl9vUGFu
ZWxzKSB7CiAgICAgICAgICAgIGlmICh0aGlzLl9vUGFuZWxzLmhhc093blByb3BlcnR5KHBpZCkp
IHsKICAgICAgICAgICAgICAgIHBhbmVsID0gdGhpcy5fb1BhbmVsc1twaWRdOwogICAgICAgICAg
ICAgICAgaWYgKHBhbmVsTm90VG9IaWRlLmdldElkKCkgPT0gcGlkKSB7CiAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkb2pvLnJl
bW92ZUNsYXNzKHBhbmVsLmdldEVsZW1lbnQoKSwgdGhpcy5fY2ZnLnNlbGVjdGVkQ2xhc3MpOwog
ICAgICAgICAgICAgICAgZG9qby5hZGRDbGFzcyhwYW5lbC5nZXRFbGVtZW50KCksIHRoaXMuX2Nm
Zy5kZXNlbGVjdGVkQ2xhc3MpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSwKICAgIF9z
ZWxlY3Q6IGZ1bmN0aW9uIChwYW5lbCkgewogICAgICAgIHZhciBwaWQgPSBwYW5lbC5nZXRJZCgp
OwogICAgICAgIHZhciBvUGFuID0gdGhpcy5fb1BhbmVsc1twaWRdOwogICAgICAgIGlmICghb1Bh
bikgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGRvam8ucmVtb3ZlQ2xh
c3Mob1Bhbi5nZXRFbGVtZW50KCksIHRoaXMuX2NmZy5kZXNlbGVjdGVkQ2xhc3MpOwogICAgICAg
IGRvam8uYWRkQ2xhc3Mob1Bhbi5nZXRFbGVtZW50KCksIHRoaXMuX2NmZy5zZWxlY3RlZENsYXNz
KTsKICAgIH0KfSk7CmRvam8ucHJvdmlkZSgiZGoud2lkZ2V0LnBhbmVscy52aWV3LlRpbWVyIik7
CmRvam8ucmVxdWlyZSgiZGoubGFuZyIpOwpkb2pvLmRlY2xhcmUoImRqLndpZGdldC5wYW5lbHMu
dmlldy5UaW1lciIsIG51bGwsIHsKICAgIERFRkFVTFRfQ09ORklHOiB7CiAgICAgICAgcGF1c2VC
dXR0b25FbmFibGVkU3R5bGU6ICJlbmFibGVkUGF1c2UiCiAgICB9LAogICAgY29uc3RydWN0b3I6
IGZ1bmN0aW9uIChtb2RlbCwgbmF2LCBjZmcpIHsKICAgICAgICB0aGlzLl9jZmcgPSBkai5sYW5n
LmNsb25lTWl4aW4odGhpcy5ERUZBVUxUX0NPTkZJRywgY2ZnKTsKICAgICAgICB0aGlzLl9tb2Rl
bCA9IG1vZGVsOwogICAgICAgIHRoaXMuX25hdiA9IG5hdjsKICAgIH0sCiAgICByb3RhdGlvblN0
YXRlU3VjY2VzczogZnVuY3Rpb24gKHN0YXRlKSB7CiAgICAgICAgdmFyIGlzUGxheVN0YXRlID0g
KHN0YXRlID09IDEpOwogICAgICAgIGlmIChpc1BsYXlTdGF0ZSkgewogICAgICAgICAgICBkb2pv
LnJlbW92ZUNsYXNzKHRoaXMuX25hdi5wYXVzZUJ1dHRvbiwgdGhpcy5fY2ZnLnBhdXNlQnV0dG9u
RW5hYmxlZFN0eWxlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBkb2pvLmFkZENsYXNz
KHRoaXMuX25hdi5wYXVzZUJ1dHRvbiwgdGhpcy5fY2ZnLnBhdXNlQnV0dG9uRW5hYmxlZFN0eWxl
KTsKICAgICAgICB9CiAgICB9Cn0pOwpkb2pvLnByb3ZpZGUoImRqLndpZGdldC5wYW5lbHMuY29u
dHJvbGxlci5UaW1lciIpOwpkb2pvLnJlcXVpcmUoImRqLndpZGdldC5Qcm9ncmVzc0JhciIpOwpk
b2pvLnJlcXVpcmUoImRqLmxhbmciKTsKZG9qby5kZWNsYXJlKCJkai53aWRnZXQucGFuZWxzLmNv
bnRyb2xsZXIuVGltZXIiLCBudWxsLCB7CiAgICBERUZBVUxUX0NPTkZJRzogewogICAgICAgIHJv
dGF0ZVRpbWU6IDQsCiAgICAgICAgcm90YXRlSXRlcmF0aW9uczogMywKICAgICAgICBwcm9ncmVz
c0JhcjogIi5wcm9ncmVzc2JhckJveCIsCiAgICAgICAgcGF1c2VCdXR0b246ICIubmF2LWlubGlu
ZSAucGF1c2UiCiAgICB9LAogICAgY29uc3RydWN0b3I6IGZ1bmN0aW9uIChtb2RlbCwgY2ZnKSB7
CiAgICAgICAgdGhpcy5fY2ZnID0gZGoubGFuZy5jbG9uZU1peGluKHRoaXMuREVGQVVMVF9DT05G
SUcsIGNmZyk7CiAgICAgICAgdGhpcy5fbW9kZWwgPSBtb2RlbDsKICAgICAgICB0aGlzLmNvbm5l
Y3RIYW5kbGVzID0gW107CiAgICB9LAogICAgYWRkRXZlbnRzOiBmdW5jdGlvbiAoKSB7CiAgICAg
ICAgdGhpcy5fc2V0dXBQcm9ncmVzc0JhcnMoKTsKICAgICAgICB0aGlzLl9zZXR1cFBhdXNlQnV0
dG9uKCk7CiAgICAgICAgdGhpcy5fc3RhcnRUaW1lcih0aGlzLl9jZmcucm90YXRlVGltZSk7CiAg
ICAgICAgdGhpcy5fYWRkRXZlbnRzKCk7CiAgICAgICAgdGhpcy5fbW9kZWwuYWRkQ2hhbmdlTGlz
dGVuZXIoInJvdGF0aW9uU3RhdGVTdWNjZXNzIiwgZnVuY3Rpb24gKHN0YXRlKSB7CiAgICAgICAg
ICAgIGlmIChzdGF0ZSA9PT0gMCkgewogICAgICAgICAgICAgICAgdGhpcy5fcGF1c2UoKTsKICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRoaXMuX3BsYXkoKTsKICAgICAgICAg
ICAgfQogICAgICAgIH0sIHRoaXMpOwogICAgfSwKICAgIHJlbW92ZUV2ZW50czogZnVuY3Rpb24g
KCkgewogICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB0aGlzLmNvbm5lY3RIYW5kbGVzLmxl
bmd0aDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgIGRvam8uZGlzY29ubmVjdCh0aGlzLmNv
bm5lY3RIYW5kbGVzW2ldKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5fcGF1c2UoKTsKICAgICAg
ICB0aGlzLl9kZXN0cm95UHJvZ3Jlc3NCYXJzKCk7CiAgICB9LAogICAgX3NldHVwUHJvZ3Jlc3NC
YXJzOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIHByb2dyZXNzQmFyID0gdGhpcy5fY2ZnLnBy
b2dyZXNzQmFyOwogICAgICAgIHZhciByb3RhdGVUaW1lID0gdGhpcy5fY2ZnLnJvdGF0ZVRpbWU7
CiAgICAgICAgdmFyIHBicyA9IFtdOwogICAgICAgIHZhciBvUGIgPSBkb2pvLnF1ZXJ5KHByb2dy
ZXNzQmFyLCB0aGlzLl9jZmcuY29udGFpbmVyKS5lbXB0eShvUGIpOwogICAgICAgIGZvciAodmFy
IGkgPSAwLCBsZW4gPSBvUGIubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgcGJz
LnB1c2gobmV3IGRqLndpZGdldC5Qcm9ncmVzc0JhcihvUGJbaV0sIHsKICAgICAgICAgICAgICAg
IHRpbWVyOiByb3RhdGVUaW1lCiAgICAgICAgICAgIH0pKTsKICAgICAgICB9CiAgICAgICAgdGhp
cy5fcGJTdGF0ZSA9ICJtdCI7CiAgICAgICAgdGhpcy5fcGJJcnVwdCA9IGZhbHNlOwogICAgICAg
IHRoaXMuX3Byb2dyZXNzQmFycyA9IHBiczsKICAgICAgICB2YXIgYWN0aXZlUG9zID0gdGhpcy5f
bW9kZWwuZ2V0QWN0aXZlKCkuZ2V0UG9zaXRpb24oKSAtIDE7CiAgICAgICAgdmFyIGlwYiA9IHRo
aXMuX3Byb2dyZXNzQmFyc1thY3RpdmVQb3NdOwogICAgICAgIGlmIChpcGIpIHsKICAgICAgICAg
ICAgaXBiLnBsYXkoKTsKICAgICAgICB9CiAgICB9LAogICAgX2Rlc3Ryb3lQcm9ncmVzc0JhcnM6
IGZ1bmN0aW9uICgpIHsKICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5fcHJvZ3Jl
c3NCYXJzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgIHRoaXMuX3Byb2dyZXNz
QmFyc1tpXS5kZXN0cnVjdG9yKCk7CiAgICAgICAgfQogICAgfSwKICAgIF9zZXR1cFBhdXNlQnV0
dG9uOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIG9QYXVzZSA9IGRvam8ucXVlcnkodGhpcy5f
Y2ZnLnBhdXNlQnV0dG9uLCB0aGlzLl9jZmcuY29udGFpbmVyKTsKICAgICAgICBpZiAob1BhdXNl
Lmxlbmd0aCA8IDEpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgIG9QYXVzZSA9IG9QYXVzZVswXTsKICAgICAgICB9CiAgICAgICAgdmFyIGJ0bk9uID0g
dGhpcy5fY2ZnLnBhdXNlQnV0dG9uRW5hYmxlZFN0eWxlOwogICAgICAgIHRoaXMuY29ubmVjdEhh
bmRsZXMucHVzaChkb2pvLmNvbm5lY3Qob1BhdXNlLCAib25jbGljayIsIHRoaXMsIGZ1bmN0aW9u
IChldikgewogICAgICAgICAgICBkb2pvLnN0b3BFdmVudChldik7CiAgICAgICAgICAgIGlmICh0
aGlzLl9tb2RlbC5nZXRSb3RhdGlvblN0YXRlKCkgPT09IDApIHsKICAgICAgICAgICAgICAgIHRo
aXMuX21vZGVsLnNldFJvdGF0aW9uU3RhdGUoMSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAgICB0aGlzLl9tb2RlbC5zZXRSb3RhdGlvblN0YXRlKDApOwogICAgICAgICAgICB9
CiAgICAgICAgfSkpOwogICAgfSwKICAgIF9zdGFydFRpbWVyOiBmdW5jdGlvbiAoc2Vjb25kcykg
ewogICAgICAgIGlmICgoKHR5cGVvZiB0aGlzLl9pbnRlcnZhbElkICE9ICJ1bmRlZmluZWQiKSAm
JiAodGhpcy5faW50ZXJ2YWxJZCAhPT0gbnVsbCkpIHx8ICh0eXBlb2Ygc2Vjb25kcyA9PSAidW5k
ZWZpbmVkIikgfHwgKHNlY29uZHMgPT09IDApKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICB9CiAgICAgICAgdmFyIG1vZGVsID0gdGhpcy5fbW9kZWw7CiAgICAgICAgdmFyIG5leHRQYW5l
bCA9IG51bGw7CiAgICAgICAgdGhpcy5fbWF4SXRlciA9IHRoaXMuX21heEl0ZXIgfHwgKHRoaXMu
X2NmZy5yb3RhdGVJdGVyYXRpb25zICogbW9kZWwuZ2V0TnVtYmVyT2ZQYW5lbHMoKSk7CiAgICAg
ICAgdGhpcy5faXRlcmF0aW9uID0gKHRoaXMuX2l0ZXJhdGlvbiB8fCAxKTsKICAgICAgICB2YXIg
dGhhdCA9IHRoaXM7CiAgICAgICAgdGhpcy5faW50ZXJ2YWxJZCA9IHNldEludGVydmFsKGZ1bmN0
aW9uICgpIHsKICAgICAgICAgICAgaWYgKHRoYXQuX2l0ZXJhdGlvbiA+IHRoYXQuX21heEl0ZXIp
IHsKICAgICAgICAgICAgICAgIHRoYXQuX2ludGVydmFsSWQgPSBudWxsOwogICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG5leHRQYW5lbCA9IChtb2RlbC5n
ZXRCeVBvc2l0aW9uKG1vZGVsLmdldEFjdGl2ZSgpLmdldFBvc2l0aW9uKCkgKyAxKSB8fCBtb2Rl
bC5nZXRCeVBvc2l0aW9uKDEpKTsKICAgICAgICAgICAgbW9kZWwuc2V0QWN0aXZlQnlQb3NpdGlv
bihuZXh0UGFuZWwuZ2V0UG9zaXRpb24oKSk7CiAgICAgICAgICAgIHZhciBwYiA9IHRoYXQuX3By
b2dyZXNzQmFyc1tuZXh0UGFuZWwuZ2V0UG9zaXRpb24oKSAtIDFdOwogICAgICAgICAgICBpZiAo
dHlwZW9mIHBiICE9PSAidW5kZWZpbmVkIikgewogICAgICAgICAgICAgICAgaWYgKHRoYXQuX3Bi
SXJ1cHQgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgcGIuc3RvcCgpOwogICAgICAg
ICAgICAgICAgICAgIHBiLnBsYXkoKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgcGIucGF1c2UoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQog
ICAgICAgICAgICB0aGF0Ll9pdGVyYXRpb24rKzsKICAgICAgICB9LCBzZWNvbmRzICogMTAwMCk7
CiAgICB9LAogICAgX2FkZEV2ZW50czogZnVuY3Rpb24gKCkgewogICAgICAgIHRoaXMuY29ubmVj
dEhhbmRsZXMucHVzaChkb2pvLmNvbm5lY3QodGhpcy5fY2ZnLmNvbnRhaW5lciwgIm9ubW91c2Vv
dmVyIiwgdGhpcywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgdGlkID0gdGhpcy5fbW9k
ZWwuZ2V0QWN0aXZlKCkuZ2V0UG9zaXRpb24oKTsKICAgICAgICAgICAgdGhpcy5fcGF1c2UodGlk
KTsKICAgICAgICB9KSk7CiAgICAgICAgdGhpcy5jb25uZWN0SGFuZGxlcy5wdXNoKGRvam8uY29u
bmVjdCh0aGlzLl9jZmcuY29udGFpbmVyLCAib25tb3VzZW91dCIsIHRoaXMsIGZ1bmN0aW9uICgp
IHsKICAgICAgICAgICAgdmFyIHRpZCA9IHRoaXMuX21vZGVsLmdldEFjdGl2ZSgpLmdldFBvc2l0
aW9uKCk7CiAgICAgICAgICAgIHRoaXMuX3BsYXkodGlkKTsKICAgICAgICB9KSk7CiAgICB9LAog
ICAgX3BsYXk6IGZ1bmN0aW9uICh0YWJOdW0pIHsKICAgICAgICBpZiAodGhpcy5fcGJTdGF0ZSA9
PT0gIm10IiB8fCAodGhpcy5fbW9kZWwuZ2V0Um90YXRpb25TdGF0ZSgpID09PSAwKSkgewogICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5fcGJTdGF0
ZSA9ICJtdCI7CiAgICAgICAgfQogICAgICAgIHRoaXMuX3BiSXJ1cHQgPSB0cnVlOwogICAgICAg
IHRoaXMuX3N0YXJ0VGltZXIodGhpcy5fY2ZnLnJvdGF0ZVRpbWUpOwogICAgICAgIHRoaXMuX3Bi
SXJ1cHQgPSBmYWxzZTsKICAgICAgICB2YXIgcGIgPSB0aGlzLl9wcm9ncmVzc0JhcnNbdGFiTnVt
IC0gMV07CiAgICAgICAgaWYgKHBiKSB7CiAgICAgICAgICAgIHBiLnBsYXkoKTsKICAgICAgICB9
CiAgICB9LAogICAgX3BhdXNlOiBmdW5jdGlvbiAodGFiTnVtKSB7CiAgICAgICAgaWYgKHRoaXMu
X3BiU3RhdGUgPT09ICJtciIpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgIHRoaXMuX3BiU3RhdGUgPSAibXIiOwogICAgICAgIH0KICAgICAgICBpZiAo
dGhpcy5faW50ZXJ2YWxJZCkgewogICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMuX2ludGVy
dmFsSWQpOwogICAgICAgICAgICB0aGlzLl9pbnRlcnZhbElkID0gbnVsbDsKICAgICAgICB9CiAg
ICAgICAgdmFyIHBiID0gdGhpcy5fcHJvZ3Jlc3NCYXJzW3RhYk51bSAtIDFdOwogICAgICAgIGlm
IChwYikgewogICAgICAgICAgICBwYi5wYXVzZSgpOwogICAgICAgIH0KICAgIH0KfSk7CmRvam8u
cHJvdmlkZSgiZGoud2lkZ2V0LnBhbmVscy5QYW5lbCIpOwpkb2pvLnJlcXVpcmUoImRqLndpZGdl
dC5wYW5lbHMuUGFuZWxEVE8iKTsKZG9qby5kZWNsYXJlKCJkai53aWRnZXQucGFuZWxzLlBhbmVs
IiwgZGoud2lkZ2V0LnBhbmVscy5QYW5lbERUTywgewogICAgY29uc3RydWN0b3I6IGZ1bmN0aW9u
IChpZCwgcG9zaXRpb24sIGVsZW1lbnQpIHsKICAgICAgICB0aGlzLl9lbGVtZW50ID0gbnVsbDsK
ICAgICAgICBpZiAodHlwZW9mIGVsZW1lbnQgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAg
IHRoaXMuc2V0RWxlbWVudChlbGVtZW50KTsKICAgICAgICB9CiAgICB9LAogICAgZ2V0RWxlbWVu
dDogZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiB0aGlzLl9lbGVtZW50OwogICAgfSwKICAg
IHNldEVsZW1lbnQ6IGZ1bmN0aW9uIChlbGVtZW50KSB7CiAgICAgICAgaWYgKHR5cGVvZiBlbGVt
ZW50ICE9PSAib2JqZWN0IikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJFbGVt
ZW50IG11c3QgYmUgYW4gb2JqZWN0LiIpOwogICAgICAgIH0KICAgICAgICB0aGlzLl9lbGVtZW50
ID0gZWxlbWVudDsKICAgIH0KfSk7CmRvam8ucHJvdmlkZSgiZGoud2lkZ2V0LnBhbmVscy52aWV3
LlNsaWRlUGFuZWwiKTsKZG9qby5yZXF1aXJlKCJkai53aWRnZXQucGFuZWxzLnZpZXcuQmFzZVBh
bmVsIik7CmRvam8ucmVxdWlyZSgiZGoubGFuZyIpOwpkb2pvLmRlY2xhcmUoImRqLndpZGdldC5w
YW5lbHMudmlldy5TbGlkZVBhbmVsIiwgZGoud2lkZ2V0LnBhbmVscy52aWV3LkJhc2VQYW5lbCwg
ewogICAgREVGQVVMVF9DT05GSUc6IHsKICAgICAgICBhbmltYXRpb25EdXJhdGlvbjogMC4zLAog
ICAgICAgIGFuaW1hdGlvblR5cGU6ICJzbGlkZSIsCiAgICAgICAgb3JpZW50YXRpb246ICJob3Jp
em9udGFsIgogICAgfSwKICAgIGNvbnN0cnVjdG9yOiBmdW5jdGlvbiAobW9kZWwsIHBhbmVscywg
Y2ZnKSB7CiAgICAgICAgdGhpcy5fY2ZnID0gZGoubGFuZy5jbG9uZU1peGluKHRoaXMuREVGQVVM
VF9DT05GSUcsIGNmZyk7CiAgICAgICAgdGhpcy5faXNPcmllbnRWZXJ0ID0gKHRoaXMuX2NmZy5v
cmllbnRhdGlvbiA9PSAidmVydGljYWwiKTsKICAgICAgICB0aGlzLl9pc09yaWVudEhvcml6ID0g
KHRoaXMuX2NmZy5vcmllbnRhdGlvbiA9PSAiaG9yaXpvbnRhbCIpOwogICAgICAgIHRoaXMuX21v
ZGVsID0gbW9kZWw7CiAgICAgICAgdGhpcy5fcGFuZWxzID0gcGFuZWxzOwogICAgICAgIHRoaXMu
X2lzU2V0dXBEb25lID0gZmFsc2U7CiAgICAgICAgdGhpcy5fYW5pbWF0aW9uID0gbnVsbDsKICAg
ICAgICB0aGlzLl92ZWN0b3JNYXAgPSB7fTsKICAgICAgICB0aGlzLl9vQ250ID0gdGhpcy5fY2Zn
LmNvbnRhaW5lcjsKICAgICAgICB0aGlzLl9lbmFibGVMYXp5SW1hZ2VzID0gdGhpcy5fY2ZnLmVu
YWJsZUxhenlJbWFnZXM7CiAgICB9LAogICAgZGlzcGxheUFjdGl2ZVN1Y2Nlc3M6IGZ1bmN0aW9u
IChhY3RpdmVQYW5lbCkgewogICAgICAgIHRoaXMuX21vZGVsLmRvTG9jaygpOwogICAgICAgIHRo
aXMuX2RvU2V0dXAoKTsKICAgICAgICBpZiAodGhpcy5faXNQYW5lbEdyb3VwTGFyZ2VyVGhhbkFs
bFBhbmVscygpKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKHRo
aXMuX2lzUm90YXRpb25DaXJjdWxhcikgewogICAgICAgICAgICB0aGlzLl9kb0NpcmN1bGFyQWN0
aXZlU3VjY2VzcyhhY3RpdmVQYW5lbCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhp
cy5fZG9MaW5lYXJBY3RpdmVTdWNjZXNzKGFjdGl2ZVBhbmVsKTsKICAgICAgICB9CiAgICB9LAog
ICAgX2RvQ2lyY3VsYXJBY3RpdmVTdWNjZXNzOiBmdW5jdGlvbiAoYWN0aXZlUGFuZWwpIHsKICAg
ICAgICB2YXIgcHJldlBhbmVsID0gdGhpcy5fbW9kZWwuZ2V0UHJldkluSGlzdG9yeSgpLAogICAg
ICAgICAgICBwcnZQb3MgPSBwcmV2UGFuZWwuZ2V0UG9zaXRpb24oKSwKICAgICAgICAgICAgYXZl
UG9zID0gYWN0aXZlUGFuZWwuZ2V0UG9zaXRpb24oKSwKICAgICAgICAgICAgdGhhdCA9IHRoaXMs
CiAgICAgICAgICAgIGlzSW5jcmVhc2luZyA9ICh0aGlzLl9tb2RlbC5nZXREaXJlY3Rpb24oKSA9
PSB0aGlzLl9tb2RlbC5ESVJFQ1RJT04uTkVYVCksCiAgICAgICAgICAgIGRlbHRhID0gMDsKICAg
ICAgICB2YXIgaXNJbmNGbGlwID0gZmFsc2U7CiAgICAgICAgdmFyIGlzRGVjckZsaXAgPSBmYWxz
ZTsKICAgICAgICBpZiAoaXNJbmNyZWFzaW5nICYmIChwcnZQb3MgPT0gdGhpcy5fbnVtYmVyT2ZQ
YW5lbHMpICYmIChhdmVQb3MgPT0gMSkpIHsKICAgICAgICAgICAgaXNJbmNGbGlwID0gdHJ1ZTsK
ICAgICAgICAgICAgZGVsdGEgPSAodGhhdC5faXNPcmllbnRWZXJ0KSA/IC10aGlzLl9wYW5lbEhl
aWdodCA6IC10aGlzLl9wYW5lbFdpZHRoOwogICAgICAgIH0gZWxzZSBpZiAoIWlzSW5jcmVhc2lu
ZyAmJiAocHJ2UG9zID09IDEpICYmIChhdmVQb3MgPT0gdGhpcy5fbnVtYmVyT2ZQYW5lbHMpKSB7
CiAgICAgICAgICAgIGlzRGVjckZsaXAgPSB0cnVlOwogICAgICAgICAgICBkZWx0YSA9ICh0aGF0
Ll9pc09yaWVudFZlcnQpID8gdGhpcy5fcGFuZWxIZWlnaHQgOiB0aGlzLl9wYW5lbFdpZHRoOwog
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGRlbHRhID0gdGhpcy5fZ2V0VmVjdG9yKHByZXZQ
YW5lbCwgYWN0aXZlUGFuZWwpOwogICAgICAgIH0KICAgICAgICBhZnRlckZpbiA9IGZ1bmN0aW9u
ICgpIHsKICAgICAgICAgICAgaWYgKHRoaXMuX2VuYWJsZUxhenlJbWFnZXMpIHsKICAgICAgICAg
ICAgICAgIHRoaXMuZW5hYmxlTGF6eUltYWdlcyh0aGlzLl9tb2RlbCwgdGhpcy5fb1BhbmVsR3Jv
dXApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChpc0luY0ZsaXApIHsKICAgICAgICAg
ICAgICAgIHZhciBvZmZzZXRUeXBlID0gKHRoYXQuX2lzT3JpZW50VmVydCkgPyAidG9wIiA6ICJs
ZWZ0IjsKICAgICAgICAgICAgICAgIHRoYXQuX29QYW5lbEdyb3VwLnN0eWxlW29mZnNldFR5cGVd
ID0gIjBweCI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhhdC5fbW9kZWwuc2V0Vmlld0Fy
ZWEodGhhdC5nZXRWaWV3QXJlYSgpKTsKICAgICAgICAgICAgdGhhdC5fbW9kZWwucmVsZWFzZUxv
Y2soKTsKICAgICAgICB9OwogICAgICAgIGJlZm9yZVN0ciA9IGZ1bmN0aW9uICgpIHsKICAgICAg
ICAgICAgaWYgKGlzRGVjckZsaXApIHsKICAgICAgICAgICAgICAgIHZhciBtdiwgb2Zmc2V0VG9w
T3JMZWZ0LCBvZmZzZXRIZWlnaHRPcldpZHRoOwogICAgICAgICAgICAgICAgaWYgKHRoYXQuX2lz
T3JpZW50VmVydCkgewogICAgICAgICAgICAgICAgICAgIG9mZnNldFRvcE9yTGVmdCA9ICJ0b3Ai
OwogICAgICAgICAgICAgICAgICAgIG9mZnNldEhlaWdodE9yV2lkdGggPSAiX3BhbmVsSGVpZ2h0
IjsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhhdC5faXNPcmllbnRIb3JpeikgewogICAg
ICAgICAgICAgICAgICAgIG9mZnNldFRvcE9yTGVmdCA9ICJsZWZ0IjsKICAgICAgICAgICAgICAg
ICAgICBvZmZzZXRIZWlnaHRPcldpZHRoID0gIl9wYW5lbFdpZHRoIjsKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgIG12ID0gdGhhdC5fZ2V0VmVjdG9yKHByZXZQYW5lbCwgYWN0aXZl
UGFuZWwpIC0gdGhhdFtvZmZzZXRIZWlnaHRPcldpZHRoXTsKICAgICAgICAgICAgICAgIHRoaXMu
cHJvcGVydGllcy5sZWZ0ID0gKG12ICsgdGhpcy5wcm9wZXJ0aWVzLnhEKTsKICAgICAgICAgICAg
ICAgIGRvam8uc3R5bGUodGhhdC5fb1BhbmVsR3JvdXAsIG9mZnNldFRvcE9yTGVmdCwgbXYgKyAi
cHgiKTsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgdGhpcy5fZG9TY3JvbGxBbmlt
YXRpb24oZGVsdGEsIGJlZm9yZVN0ciwgYWZ0ZXJGaW4pOwogICAgfSwKICAgIF9kb0xpbmVhckFj
dGl2ZVN1Y2Nlc3M6IGZ1bmN0aW9uIChhY3RpdmVQYW5lbCkgewogICAgICAgIHZhciBwcmV2UGFu
ZWwgPSB0aGlzLl9tb2RlbC5nZXRQcmV2SW5IaXN0b3J5KCksCiAgICAgICAgICAgIGFmdGVyRmlu
ID0gZG9qby5oaXRjaCh0aGlzLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBpZiAodGhp
cy5fZW5hYmxlTGF6eUltYWdlcykgewogICAgICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlTGF6
eUltYWdlcyh0aGlzLl9tb2RlbCwgdGhpcy5fb1BhbmVsR3JvdXApOwogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgdGhpcy5fbW9kZWwuc2V0Vmlld0FyZWEodGhpcy5nZXRWaWV3QXJl
YSgpKTsKICAgICAgICAgICAgICAgIHRoaXMuX21vZGVsLnJlbGVhc2VMb2NrKCk7CiAgICAgICAg
ICAgIH0pLAogICAgICAgICAgICBiZWZvcmVTdHIgPSBmdW5jdGlvbiAoKSB7fTsKICAgICAgICBk
ZWx0YSA9IHRoaXMuX2dldFZlY3RvcihwcmV2UGFuZWwsIGFjdGl2ZVBhbmVsKTsKICAgICAgICB0
aGlzLl9kb1Njcm9sbEFuaW1hdGlvbihkZWx0YSwgYmVmb3JlU3RyLCBhZnRlckZpbik7CiAgICB9
LAogICAgX2RvU2V0dXA6IGZ1bmN0aW9uICgpIHsKICAgICAgICBpZiAodGhpcy5faXNTZXR1cERv
bmUpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB0aGlzLl9pc1NldHVw
RG9uZSA9IHRydWU7CiAgICAgICAgdGhpcy5fc2V0Q29yZVZhbHVlcygpOwogICAgICAgIHRoaXMu
X3Jlc2V0U3R5bGUoKTsKICAgICAgICBpZiAodGhpcy5faXNSb3RhdGlvbkNpcmN1bGFyICYmICF0
aGlzLl9pc1BhbmVsR3JvdXBMYXJnZXJUaGFuQWxsUGFuZWxzKCkpIHsKICAgICAgICAgICAgdGhp
cy5fY2lyY3VsYXJMb29wU2V0dXAoKTsKICAgICAgICB9CiAgICB9LAogICAgX2RvU2Nyb2xsQW5p
bWF0aW9uOiBmdW5jdGlvbiAoZGVsdGEsIGJlZm9yZVN0ciwgYWZ0ZXJGaW4pIHsKICAgICAgICB2
YXIgeEQsIHlEOwogICAgICAgIGlmICh0aGlzLl9pc09yaWVudFZlcnQpIHsKICAgICAgICAgICAg
eEQgPSAwOwogICAgICAgICAgICB5RCA9IGRlbHRhOwogICAgICAgIH0gZWxzZSBpZiAodGhpcy5f
aXNPcmllbnRIb3JpeikgewogICAgICAgICAgICB4RCA9IGRlbHRhOwogICAgICAgICAgICB5RCA9
IDA7CiAgICAgICAgfQogICAgICAgIHZhciBuZXdMZWZ0ID0gKGRvam8uc3R5bGUodGhpcy5fb1Bh
bmVsR3JvdXAsICJsZWZ0IikgKyB4RCksCiAgICAgICAgICAgIG5ld1RvcCA9IChkb2pvLnN0eWxl
KHRoaXMuX29QYW5lbEdyb3VwLCAidG9wIikgKyB5RCksCiAgICAgICAgICAgIGFuaW1hdGlvbkR1
cmF0aW9uSW5NaWxsaXMgPSAodGhpcy5fY2ZnLmFuaW1hdGlvbkR1cmF0aW9uICogMTAwMCk7CiAg
ICAgICAgdmFyIGFuaW1DZmcgPSB7CiAgICAgICAgICAgIG5vZGU6IHRoaXMuX29QYW5lbEdyb3Vw
LAogICAgICAgICAgICBkdXJhdGlvbjogYW5pbWF0aW9uRHVyYXRpb25Jbk1pbGxpcywKICAgICAg
ICAgICAgYmVmb3JlQmVnaW46IGJlZm9yZVN0ciwKICAgICAgICAgICAgb25FbmQ6IGFmdGVyRmlu
LAogICAgICAgICAgICBwcm9wZXJ0aWVzOiB7CiAgICAgICAgICAgICAgICAieEQiOiB4RCwKICAg
ICAgICAgICAgICAgICJ5RCI6IHlELAogICAgICAgICAgICAgICAgbGVmdDogbmV3TGVmdCwKICAg
ICAgICAgICAgICAgIHRvcDogbmV3VG9wCiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAg
IHRoaXMuX2FuaW1hdGlvbiA9IGRvam8uYW5pbWF0ZVByb3BlcnR5KGFuaW1DZmcpOwogICAgICAg
IHRoaXMuX2FuaW1hdGlvbi5wbGF5KCk7CiAgICB9LAogICAgZ2V0Q29udGFpbmVyOiBmdW5jdGlv
biAoKSB7CiAgICAgICAgaWYgKHRoaXMuX29DbnQpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X29DbnQ7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLl9jZmcuY29udGFpbmVyICYmIHRoaXMu
X2NmZy5jb250YWluZXIgIT09ICIiKSB7CiAgICAgICAgICAgIHRoaXMuX29DbnQgPSBkb2pvLmJ5
SWQodGhpcy5fY2ZnLmNvbnRhaW5lcik7CiAgICAgICAgICAgIHJldHVybiB0aGlzLl9vQ250Owog
ICAgICAgIH0KICAgICAgICBpZiAodGhpcy5fb1BhbmVsR3JvdXApIHsKICAgICAgICAgICAgdGhp
cy5fb0NudCA9IHRoaXMuX29QYW5lbEdyb3VwLnBhcmVudE5vZGU7CiAgICAgICAgICAgIHJldHVy
biB0aGlzLl9vQ250OwogICAgICAgIH0KICAgICAgICB2YXIgYXAgPSB0aGlzLl9wYW5lbHNbdGhp
cy5fbW9kZWwuZ2V0QnlQb3NpdGlvbigxKS5nZXRJZCgpXTsKICAgICAgICB2YXIgZWwgPSBhcC5n
ZXRFbGVtZW50KCk7CiAgICAgICAgaWYgKCFlbC5wYXJlbnROb2RlIHx8ICFlbC5wYXJlbnROb2Rl
LnBhcmVudE5vZGUpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAg
IHZhciBncnAgPSBlbC5wYXJlbnROb2RlOwogICAgICAgIHRoaXMuX29DbnQgPSBncnAucGFyZW50
Tm9kZTsKICAgICAgICByZXR1cm4gdGhpcy5fb0NudDsKICAgIH0sCiAgICBnZXRQYW5lbEJ5UG9z
aXRpb246IGZ1bmN0aW9uIChwb3MpIHsKICAgICAgICB2YXIgZWwgPSB0aGlzLl9tb2RlbC5nZXRC
eVBvc2l0aW9uKHBvcyk7CiAgICAgICAgcmV0dXJuIHRoaXMuX3BhbmVsc1tlbC5nZXRJZCgpXTsK
ICAgIH0sCiAgICBkZXN0cm95OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgdGhpcy5fcmVzZXRTdHls
ZSgpOwogICAgfSwKICAgIGdldFZpZXdBcmVhOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIHZp
ZXdBcmVhID0gMDsKICAgICAgICBpZiAodHlwZW9mIHRoaXMuX2NmZy52aWV3QXJlYSA9PSAibnVt
YmVyIikgewogICAgICAgICAgICB2aWV3QXJlYSA9IHRoaXMuX2NmZy52aWV3QXJlYTsKICAgICAg
ICB9IGVsc2UgaWYgKHRoaXMuX2lzUm90YXRpb25DaXJjdWxhciB8fCB0aGlzLl9pc0ZpeGVkU2l6
ZVBhbmVscygpKSB7CiAgICAgICAgICAgIHZpZXdBcmVhID0gdGhpcy5fZ2V0Rml4ZWRTaXplVmll
d0FyZWEoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2aWV3QXJlYSA9IHRoaXMuX2dl
dER5bmFtaWNTaXplVmlld0FyZWEoKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5fbW9kZWwuc2V0
Vmlld0FyZWEodmlld0FyZWEpOwogICAgICAgIHJldHVybiB2aWV3QXJlYTsKICAgIH0sCiAgICBf
Z2V0Rml4ZWRTaXplVmlld0FyZWE6IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZWwgPSAodGhp
cy5fcGFuZWxzW3RoaXMuX21vZGVsLmdldEJ5UG9zaXRpb24oMSkuZ2V0SWQoKV0pLmdldEVsZW1l
bnQoKSwKICAgICAgICAgICAgY250ID0gZWwucGFyZW50Tm9kZS5wYXJlbnROb2RlLAogICAgICAg
ICAgICBoT3JXID0gKHRoaXMuX2lzT3JpZW50VmVydCkgPyAiaCIgOiAidyIsCiAgICAgICAgICAg
IHZpZXdBcmVhID0gTWF0aC5yb3VuZChkb2pvLnBvc2l0aW9uKGNudClbaE9yV10gLyBkb2pvLnBv
c2l0aW9uKGVsKVtoT3JXXSk7CiAgICAgICAgcmV0dXJuIHZpZXdBcmVhOwogICAgfSwKICAgIF9n
ZXREeW5hbWljU2l6ZVZpZXdBcmVhOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIHZpZXdBcmVh
ID0gMCwKICAgICAgICAgICAgYWN0aXZlUGFuZWwgPSB0aGlzLl9wYW5lbHNbdGhpcy5fbW9kZWwu
Z2V0QWN0aXZlKCkuZ2V0SWQoKV0sCiAgICAgICAgICAgIGNudCA9IGFjdGl2ZVBhbmVsLmdldEVs
ZW1lbnQoKS5wYXJlbnROb2RlLnBhcmVudE5vZGUsCiAgICAgICAgICAgIG51bU9mUGFuZWxzID0g
dGhpcy5fbW9kZWwuZ2V0TnVtYmVyT2ZQYW5lbHMoKSwKICAgICAgICAgICAgaE9yVyA9ICh0aGlz
Ll9pc09yaWVudFZlcnQpID8gImgiIDogInciLAogICAgICAgICAgICBjbnRXaWR0aE9ySGVpZ2h0
ID0gZG9qby5wb3NpdGlvbihjbnQpW2hPclddLAogICAgICAgICAgICB0b3RhbFdpZHRoT3JIZWln
aHQgPSAwOwogICAgICAgIGZvciAodmFyIGkgPSBhY3RpdmVQYW5lbC5nZXRQb3NpdGlvbigpOyBp
IDw9IG51bU9mUGFuZWxzOyBpKyspIHsKICAgICAgICAgICAgdmFyIHBhbmVsID0gdGhpcy5fcGFu
ZWxzW3RoaXMuX21vZGVsLmdldEJ5UG9zaXRpb24oaSkuZ2V0SWQoKV07CiAgICAgICAgICAgIHRv
dGFsV2lkdGhPckhlaWdodCArPSBkb2pvLnBvc2l0aW9uKHBhbmVsLmdldEVsZW1lbnQoKSlbaE9y
V107CiAgICAgICAgICAgIGlmICh0b3RhbFdpZHRoT3JIZWlnaHQgPiBjbnRXaWR0aE9ySGVpZ2h0
KSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICB2aWV3
QXJlYSsrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdmlld0FyZWE7CiAgICB9LAogICAgX2lz
Rml4ZWRTaXplUGFuZWxzOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9f
aXNGaXhlZExlbmd0aFBhbmVscyA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgdGhpcy5f
X2lzRml4ZWRMZW5ndGhQYW5lbHMgPSB0cnVlOwogICAgICAgICAgICB2YXIgaE9yVyA9ICh0aGlz
Ll9pc09yaWVudFZlcnQpID8gImgiIDogInciLAogICAgICAgICAgICAgICAgcHJldkxlbiA9IE1h
dGgucm91bmQoZG9qby5wb3NpdGlvbih0aGlzLmdldFBhbmVsQnlQb3NpdGlvbigxKS5nZXRFbGVt
ZW50KCkpW2hPclddKTsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDI7IGkgPD0gdGhpcy5fbW9k
ZWwuZ2V0TnVtYmVyT2ZQYW5lbHMoKTsgaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIgbGVuID0g
TWF0aC5yb3VuZChkb2pvLnBvc2l0aW9uKHRoaXMuZ2V0UGFuZWxCeVBvc2l0aW9uKGkpLmdldEVs
ZW1lbnQoKSlbaE9yV10pOwogICAgICAgICAgICAgICAgaWYgKHByZXZMZW4gIT09IGxlbikgewog
ICAgICAgICAgICAgICAgICAgIHRoaXMuX19pc0ZpeGVkTGVuZ3RoUGFuZWxzID0gZmFsc2U7CiAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICBwcmV2TGVuID0gbGVuOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiB0
aGlzLl9faXNGaXhlZExlbmd0aFBhbmVsczsKICAgIH0sCiAgICBfZ2V0V2lkdGhPckhlaWdodE9m
UGFuZWxzOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl93aWR0aE9ySGVp
Z2h0T2ZQYW5lbHMgPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgdmFyIGxhc3RQYW5lbCA9
IHRoaXMuZ2V0UGFuZWxCeVBvc2l0aW9uKHRoaXMuX21vZGVsLmdldE51bWJlck9mUGFuZWxzKCkp
LAogICAgICAgICAgICAgICAgbGFzdFBhbmVsQm94ID0gZG9qby5tYXJnaW5Cb3gobGFzdFBhbmVs
LmdldEVsZW1lbnQoKSk7CiAgICAgICAgICAgIHRoaXMuX3dpZHRoT3JIZWlnaHRPZlBhbmVscyA9
ICh0aGlzLl9pc09yaWVudFZlcnQpID8gKGxhc3RQYW5lbC5nZXRFbGVtZW50KCkub2Zmc2V0VG9w
ICsgbGFzdFBhbmVsQm94LmgpIDogKGxhc3RQYW5lbC5nZXRFbGVtZW50KCkub2Zmc2V0TGVmdCAr
IGxhc3RQYW5lbEJveC53KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoT3JI
ZWlnaHRPZlBhbmVsczsKICAgIH0sCiAgICBfZ2V0VmVjdG9yOiBmdW5jdGlvbiAocHJldlBhbmVs
LCBjdXJyUGFuZWwpIHsKICAgICAgICB2YXIgZXhpc3RpbmdWZWN0b3IgPSB0aGlzLl9nZXRFeGlz
dGluZ1ZlY3RvcihwcmV2UGFuZWwsIGN1cnJQYW5lbCk7CiAgICAgICAgaWYgKGV4aXN0aW5nVmVj
dG9yKSB7CiAgICAgICAgICAgIHJldHVybiBleGlzdGluZ1ZlY3RvcjsKICAgICAgICB9CiAgICAg
ICAgY3VyclBhbmVsID0gdGhpcy5fcGFuZWxzW2N1cnJQYW5lbC5nZXRJZCgpXTsKICAgICAgICB2
YXIgaXNJbmMgPSAoKGN1cnJQYW5lbC5nZXRQb3NpdGlvbigpIC0gcHJldlBhbmVsLmdldFBvc2l0
aW9uKCkpID4gMCk7CiAgICAgICAgdmFyIG9mZnNldFR5cGUgPSAodGhpcy5faXNPcmllbnRWZXJ0
KSA/ICJvZmZzZXRUb3AiIDogIm9mZnNldExlZnQiLAogICAgICAgICAgICB0b3BPckxlZnQgPSAo
dGhpcy5faXNPcmllbnRWZXJ0KSA/ICJ0IiA6ICJsIiwKICAgICAgICAgICAgaGVpZ2h0T3JXaWR0
aCA9ICh0aGlzLl9pc09yaWVudFZlcnQpID8gImgiIDogInciLAogICAgICAgICAgICB5T3J4ID0g
KHRoaXMuX2lzT3JpZW50VmVydCkgPyAieSIgOiAieCIsCiAgICAgICAgICAgIHBhbmVsc0hlaWdo
dE9yV2lkdGggPSB0aGlzLl9nZXRXaWR0aE9ySGVpZ2h0T2ZQYW5lbHMoKTsKICAgICAgICB2YXIg
cGFuZWxHcm91cEJveCA9IGRvam8ubWFyZ2luQm94KHRoaXMuX29QYW5lbEdyb3VwKSwKICAgICAg
ICAgICAgcGFuZWxHcm91cE9mZnNldCA9IHRoaXMuX29QYW5lbEdyb3VwW29mZnNldFR5cGVdLAog
ICAgICAgICAgICBwcmV2T2Zmc2V0ID0gTWF0aC5hYnMocGFuZWxHcm91cEJveFt0b3BPckxlZnRd
KSwKICAgICAgICAgICAgY3VyclBhbmVsQm94ID0gZG9qby5tYXJnaW5Cb3goY3VyclBhbmVsLmdl
dEVsZW1lbnQoKSksCiAgICAgICAgICAgIGN1cnJPZmZzZXQgPSBNYXRoLmFicyhjdXJyUGFuZWwu
Z2V0RWxlbWVudCgpW29mZnNldFR5cGVdKTsKICAgICAgICBpZiAoIWlzSW5jICYmIChjdXJyT2Zm
c2V0ID4gcHJldk9mZnNldCkpIHsKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAg
ICAgIGRlbHRhID0gTWF0aC5hYnMoY3Vyck9mZnNldCAtIHByZXZPZmZzZXQpOwogICAgICAgIHZl
Y3RvciA9ICgoaXNJbmMpID8gKGRlbHRhICogLTEpIDogZGVsdGEpOwogICAgICAgIGlmICghdGhp
cy5faXNSb3RhdGlvbkNpcmN1bGFyICYmICF0aGlzLl9pc0ZpeGVkU2l6ZVBhbmVscygpKSB7CiAg
ICAgICAgICAgIHZhciBwYW5lbEdyb3VwUG9zID0gZG9qby5wb3NpdGlvbih0aGlzLl9vUGFuZWxH
cm91cC5wYXJlbnROb2RlKSwKICAgICAgICAgICAgICAgIG5ld1BvcyA9IChwYW5lbEdyb3VwQm94
W3RvcE9yTGVmdF0gKyB2ZWN0b3IpLAogICAgICAgICAgICAgICAgbWF4UG9zID0gKHBhbmVsR3Jv
dXBQb3NbaGVpZ2h0T3JXaWR0aF0gLSBwYW5lbHNIZWlnaHRPcldpZHRoKSwKICAgICAgICAgICAg
ICAgIGRpZmYgPSAobWF4UG9zIC0gbmV3UG9zKTsKICAgICAgICAgICAgaWYgKGlzSW5jICYmIChk
aWZmID4gMCkpIHsKICAgICAgICAgICAgICAgIHZlY3RvciArPSBkaWZmOwogICAgICAgICAgICB9
CiAgICAgICAgfQogICAgICAgIHRoaXMuX3NldEV4aXN0aW5nVmVjdG9yKHByZXZQYW5lbCwgY3Vy
clBhbmVsLCB2ZWN0b3IpOwogICAgICAgIHJldHVybiB2ZWN0b3I7CiAgICB9LAogICAgX2dldEV4
aXN0aW5nVmVjdG9yOiBmdW5jdGlvbiAocGFuZWwxLCBwYW5lbDIpIHsKICAgICAgICByZXR1cm4g
dGhpcy5fdmVjdG9yTWFwW3BhbmVsMS5nZXRJZCgpICsgIl8iICsgcGFuZWwyLmdldElkKCldOwog
ICAgfSwKICAgIF9zZXRFeGlzdGluZ1ZlY3RvcjogZnVuY3Rpb24gKHBhbmVsMSwgcGFuZWwyLCB2
ZWN0b3IpIHsKICAgICAgICB0aGlzLl92ZWN0b3JNYXBbcGFuZWwxLmdldElkKCkgKyAiXyIgKyBw
YW5lbDIuZ2V0SWQoKV0gPSB2ZWN0b3I7CiAgICB9LAogICAgX2lzUGFuZWxHcm91cExhcmdlclRo
YW5BbGxQYW5lbHM6IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgaGVpZ2h0T3JXaWR0aCA9ICh0
aGlzLl9pc09yaWVudFZlcnQpID8gImgiIDogInciLAogICAgICAgICAgICBwYW5lbHNIZWlnaHRP
cldpZHRoID0gdGhpcy5fZ2V0V2lkdGhPckhlaWdodE9mUGFuZWxzKCksCiAgICAgICAgICAgIHBh
bmVsR3JvdXBQb3MgPSBkb2pvLnBvc2l0aW9uKHRoaXMuX29QYW5lbEdyb3VwLnBhcmVudE5vZGUp
OwogICAgICAgIHJldHVybiAocGFuZWxHcm91cFBvc1toZWlnaHRPcldpZHRoXSA+IHBhbmVsc0hl
aWdodE9yV2lkdGgpOwogICAgfSwKICAgIF9zZXRDb3JlVmFsdWVzOiBmdW5jdGlvbiAoKSB7CiAg
ICAgICAgaWYgKHRoaXMuX2lzQ29yZVZhbHVlc1NldCkgewogICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgfQogICAgICAgIHZhciBtb2RlbCA9IHRoaXMuX21vZGVsLAogICAgICAgICAgICBhcCA9
IHRoaXMuX3BhbmVsc1ttb2RlbC5nZXRCeVBvc2l0aW9uKDEpLmdldElkKCldOwogICAgICAgIHRo
aXMuX29QYW5lbEdyb3VwID0gZG9qby5xdWVyeSh0aGlzLl9jZmcucGFuZWxHcm91cCwgdGhpcy5n
ZXRDb250YWluZXIoKSlbMF07CiAgICAgICAgdGhpcy5fbnVtYmVyT2ZQYW5lbHMgPSBtb2RlbC5n
ZXROdW1iZXJPZlBhbmVscygpOwogICAgICAgIHRoaXMuX2lzUm90YXRpb25DaXJjdWxhciA9ICht
b2RlbC5nZXRSb3RhdGlvblR5cGUoKSA9PSBtb2RlbC5ST1RBVElPTl9UWVBFLkNJUkNVTEFSKTsK
ICAgICAgICBpZiAodGhpcy5faXNPcmllbnRWZXJ0KSB7CiAgICAgICAgICAgIHRoaXMuX3BhbmVs
SGVpZ2h0ID0gZG9qby5wb3NpdGlvbihhcC5nZXRFbGVtZW50KCkpLmg7CiAgICAgICAgfSBlbHNl
IGlmICh0aGlzLl9pc09yaWVudEhvcml6KSB7CiAgICAgICAgICAgIHRoaXMuX3BhbmVsV2lkdGgg
PSBkb2pvLnBvc2l0aW9uKGFwLmdldEVsZW1lbnQoKSkudzsKICAgICAgICB9CiAgICAgICAgdGhp
cy5faXNDb3JlVmFsdWVzU2V0ID0gdHJ1ZTsKICAgIH0sCiAgICBfcmVzZXRTdHlsZTogZnVuY3Rp
b24gKCkgewogICAgICAgIGlmICh0eXBlb2YgdGhpcy5fb1BhbmVsR3JvdXAgPT09ICJvYmplY3Qi
KSB7CiAgICAgICAgICAgIGRvam8uc3R5bGUodGhpcy5fb1BhbmVsR3JvdXAsIHsKICAgICAgICAg
ICAgICAgIGxlZnQ6IDAsCiAgICAgICAgICAgICAgICB0b3A6IDAKICAgICAgICAgICAgfSk7CiAg
ICAgICAgfQogICAgfSwKICAgIF9jaXJjdWxhckxvb3BTZXR1cDogZnVuY3Rpb24gKCkgewogICAg
ICAgIGZvciAodmFyIGkgPSAxLCBlbGVtZW50ID0gbnVsbCwgY2xvbmUgPSBudWxsLCBsZW4gPSB0
aGlzLmdldFZpZXdBcmVhKCk7IGkgPD0gbGVuOyBpKyspIHsKICAgICAgICAgICAgZWxlbWVudCA9
IHRoaXMuX3BhbmVsc1t0aGlzLl9tb2RlbC5nZXRCeVBvc2l0aW9uKGkpLmdldElkKCldLmdldEVs
ZW1lbnQoKTsKICAgICAgICAgICAgY2xvbmUgPSBlbGVtZW50LmNsb25lTm9kZSh0cnVlKTsKICAg
ICAgICAgICAgdGhpcy5fb1BhbmVsR3JvdXAuYXBwZW5kQ2hpbGQoY2xvbmUpOwogICAgICAgIH0K
ICAgIH0KfSk7CmRvam8ucHJvdmlkZSgiZGoud2lkZ2V0LnBhbmVscy5QYW5lbHNGYWN0b3J5Iik7
CmRvam8ucmVxdWlyZSgiZGoubGFuZyIpOwpkb2pvLnJlcXVpcmUoImRqLndpZGdldC5wYW5lbHMu
UGFuZWxEVE8iKTsKZG9qby5yZXF1aXJlKCJkai53aWRnZXQucGFuZWxzLlBhbmVsIik7CmRvam8u
cmVxdWlyZSgiZGoud2lkZ2V0LnBhbmVscy5QYW5lbE1vZGVsIik7CmRqLndpZGdldC5wYW5lbHMu
UGFuZWxzRmFjdG9yeSA9IHsKICAgIF9DT05GSUc6IHsKICAgICAgICBjb3JlOiB7CiAgICAgICAg
ICAgIHBhbmVsR3JvdXA6ICIubmV3c0l0ZW0iLAogICAgICAgICAgICBwYW5lbDogIj4gbGkiLAog
ICAgICAgICAgICBwYW5lbFByZWZpeDogInBhbmVsc1BhbmVsXyIsCiAgICAgICAgICAgIHBhbmVs
czogdW5kZWZpbmVkLAogICAgICAgICAgICBwYW5lbFRvZ2dsZVN0eWxlOiAiaGlkZGVuIiwKICAg
ICAgICAgICAgYWN0aXZlUGFuZWw6IDEsCiAgICAgICAgICAgIGRpc2FibGVkUGFuZWxzOiB1bmRl
ZmluZWQsCiAgICAgICAgICAgIHBhbmVsSW5jcmVtZW50OiAxLAogICAgICAgICAgICB2aWV3QXJl
YTogdW5kZWZpbmVkLAogICAgICAgICAgICBwYWdpbmF0aW9uRGl2aWRlcjogIi8iLAogICAgICAg
ICAgICBwYWdpbmF0aW9uQ29udGFpbmVyOiAiLnBhZ2luYXRpb24iLAogICAgICAgICAgICBjb250
cm9sbGVyOiB1bmRlZmluZWQsCiAgICAgICAgICAgIGVuYWJsZUJyb3dzZXJIaXN0b3J5OiBmYWxz
ZSwKICAgICAgICAgICAgYW5pbWF0aW9uRHVyYXRpb246IDAuMwogICAgICAgIH0sCiAgICAgICAg
dGFiczogewogICAgICAgICAgICB0YWJQcmVmaXg6ICJwYW5lbHNUYWJfIiwKICAgICAgICAgICAg
dGFiR3JvdXA6ICIubmV3c0l0ZW0iLAogICAgICAgICAgICB0YWI6ICI+IGxpIiwKICAgICAgICAg
ICAgbmF2Q29udGFpbmVyOiAiLm5hdi1pbmxpbmUiLAogICAgICAgICAgICBwcmV2QnV0dG9uOiAi
LnByZXYiLAogICAgICAgICAgICBuZXh0QnV0dG9uOiAiLm5leHQiLAogICAgICAgICAgICBuYXZC
dXR0b25FbmFibGVkU3R5bGU6ICJlbmFibGVkIiwKICAgICAgICAgICAgdGFiT25FdmVudDogImNs
aWNrIiwKICAgICAgICAgICAgdGFiT25TdHlsZTogImFjdGl2ZSIsCiAgICAgICAgICAgIHRhYk9m
ZlN0eWxlOiAiZGVzZWxlY3RlZCIKICAgICAgICB9LAogICAgICAgIGNhcm91c2VsOiB7CiAgICAg
ICAgICAgIG9yaWVudGF0aW9uOiAiaG9yaXpvbnRhbCIsCiAgICAgICAgICAgIG5hdkNvbnRhaW5l
cjogIi5uYXYtaW5saW5lIiwKICAgICAgICAgICAgcHJldkJ1dHRvbjogIi5wcmV2IiwKICAgICAg
ICAgICAgbmV4dEJ1dHRvbjogIi5uZXh0IiwKICAgICAgICAgICAgcHJldkJ1dHRvbkVuYWJsZWRT
dHlsZTogImVuYWJsZWRQcmV2IiwKICAgICAgICAgICAgbmV4dEJ1dHRvbkVuYWJsZWRTdHlsZTog
ImVuYWJsZWROZXh0IgogICAgICAgIH0sCiAgICAgICAgcm90YXRvcjogewogICAgICAgICAgICBy
b3RhdGVUaW1lOiA4LAogICAgICAgICAgICByb3RhdGVJdGVyYXRpb25zOiAzLAogICAgICAgICAg
ICBwYXVzZU9uTW91c2VPdmVyOiBmYWxzZSwKICAgICAgICAgICAgcGF1c2VCdXR0b246ICIubmF2
LWlubGluZSAucGF1c2UiLAogICAgICAgICAgICBwYXVzZUJ1dHRvbkVuYWJsZWRTdHlsZTogImVu
YWJsZWRQYXVzZSIsCiAgICAgICAgICAgIHByb2dyZXNzQmFyOiAiLnByb2dyZXNzYmFyQm94Igog
ICAgICAgIH0KICAgIH0sCiAgICBfcGFuZWxzVHlwZTogewogICAgICAgIE5PTkU6IDAsCiAgICAg
ICAgU0xJREU6IDEsCiAgICAgICAgU1dJVENIOiAyCiAgICB9LAogICAgX3BhZ2luYXRpb25UeXBl
OiB7CiAgICAgICAgU0lNUExFOiAwLAogICAgICAgIFJBTkdFOiAxCiAgICB9LAogICAgX2xvb2t1
cFR5cGU6IHsKICAgICAgICBOT05FOiAwLAogICAgICAgIFNFTEVDVE9SOiAxLAogICAgICAgIFBS
RUZJWDogMgogICAgfSwKICAgIGNyZWF0ZTogZnVuY3Rpb24gKGNvbnRhaW5lciwgY2ZnLCBkb0ln
bm9yZU9wdENhY2hlKSB7CiAgICAgICAgaWYgKCFjb250YWluZXIgfHwgKHR5cGVvZiBjZmcgIT09
ICJvYmplY3QiKSkgewogICAgICAgICAgICBjb25zb2xlLndhcm4oIntQYW5lbHN9IG5vIGNvbnRh
aW5lciBvciBjb25maWcgc3BlY2lmaWVkLiIpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAg
fQogICAgICAgIGNvbnRhaW5lciA9IGRvam8uYnlJZChjb250YWluZXIpOwogICAgICAgIGlmIChj
b250YWluZXIgJiYgIWRvSWdub3JlT3B0Q2FjaGUpIHsKICAgICAgICAgICAgaWYgKHRoaXMuX2lz
UmVpbml0aWFsaXplZEFuZFNldENhY2hlKGNvbnRhaW5lciwgY2ZnKSkgewogICAgICAgICAgICAg
ICAgY29uc29sZS53YXJuKCJ7UGFuZWxzfSBwcmV2ZW50ZWQgYXR0ZW1wdCB0byByZWluaXRpYWxp
emUgXCIiICsgY29udGFpbmVyLmlkICsgIlwiLiIpOwogICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHZhciBtdmMg
PSB0aGlzLl9zZXR1cE12Yyhjb250YWluZXIsIGNmZyk7CiAgICAgICAgICAgIHRoaXMuX2FkZENv
bXBhdGliaWxpdHlNZXRob2RzKG12YywgY29udGFpbmVyLCBjZmcpOwogICAgICAgICAgICByZXR1
cm4gbXZjLm1vZGVsOwogICAgICAgIH0gY2F0Y2ggKGV4KSB7CiAgICAgICAgICAgIGNvbnNvbGUu
aW5mbyhleC5tZXNzYWdlKTsKICAgICAgICB9CiAgICB9LAogICAgX2lzUmVpbml0aWFsaXplZEFu
ZFNldENhY2hlOiBmdW5jdGlvbiAoY29udGFpbmVyLCBjZmcpIHsKICAgICAgICB2YXIgb3B0Q2Fj
aGUgPSBbJ3snLCBjb250YWluZXIuaWQsICc6ICcsIGRqLmxhbmcub2JqZWN0VG9TdHJpbmcoY2Zn
LCB0cnVlKSwgJ30nXS5qb2luKCcnKSwKICAgICAgICAgICAgY250T3B0ID0gY29udGFpbmVyLmdl
dEF0dHJpYnV0ZSgiZGp3X29wdGNhY2hlIik7CiAgICAgICAgaWYgKGNudE9wdCkgewogICAgICAg
ICAgICB2YXIgb3B0cyA9IGNudE9wdC5zcGxpdCgiXyIpOwogICAgICAgICAgICBmb3IgKHZhciBp
ID0gMCwgbGVuID0gb3B0cy5sZW5ndGg7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAg
aWYgKG9wdHNbaV0gPT0gb3B0Q2FjaGUpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAo
Y250T3B0KSB7CiAgICAgICAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoImRqd19vcHRjYWNo
ZSIsIFtvcHRDYWNoZSwgY250T3B0XS5qb2luKCJfIikpOwogICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoImRqd19vcHRjYWNoZSIsIG9wdENhY2hlKTsK
ICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSwKICAgIGNyZWF0ZVBhbmVsczog
ZnVuY3Rpb24gKHVzZXJDZmcpIHsKICAgICAgICB2YXIgZGp3cCA9IGRqLndpZGdldC5wYW5lbHMs
CiAgICAgICAgICAgIF9sb29rdXBUeXBlID0gdGhpcy5fbG9va3VwVHlwZSwKICAgICAgICAgICAg
X3BhblR5cGUgPSB0aGlzLl9wYW5lbHNUeXBlLAogICAgICAgICAgICBfZCA9IGRvam8sCiAgICAg
ICAgICAgIG1vZGVsID0gbnVsbCwKICAgICAgICAgICAgdmlld3MgPSB7fSwKICAgICAgICAgICAg
Y29udHJvbGxlcnMgPSB7fTsKICAgICAgICB2YXIgY29uZmlnID0gZG9qby5jbG9uZSh0aGlzLl9D
T05GSUcuY29yZSk7CiAgICAgICAgY29uZmlnLmNvbnRhaW5lciA9ICIiOwogICAgICAgIGNvbmZp
Zy5kb0FkZENoYW5nZUxpc3RlbmVycyA9IHRydWU7CiAgICAgICAgY29uZmlnLnBhbmVsc1R5cGUg
PSBfcGFuVHlwZS5TV0lUQ0g7CiAgICAgICAgY29uZmlnLnBhbmVsc0xvb2t1cFR5cGUgPSBfbG9v
a3VwVHlwZS5TRUxFQ1RPUjsKICAgICAgICBkb2pvLm1peGluKGNvbmZpZywgdXNlckNmZyk7CiAg
ICAgICAgdmFyIHBhbmVscyA9IG51bGw7CiAgICAgICAgc3dpdGNoIChjb25maWcucGFuZWxzTG9v
a3VwVHlwZSkgewogICAgICAgIGNhc2UgX2xvb2t1cFR5cGUuUFJFRklYOgogICAgICAgICAgICBw
YW5lbHMgPSB0aGlzLmxvb2t1cEJ5UHJlZml4KGNvbmZpZy5wYW5lbFByZWZpeCwgY29uZmlnLnBh
bmVscyk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgX2xvb2t1cFR5cGUuU0VMRUNU
T1I6CiAgICAgICAgICAgIHBhbmVscyA9IHRoaXMubG9va3VwQnlTZWxlY3Rvcihjb25maWcuY29u
dGFpbmVyLCBjb25maWcucGFuZWxHcm91cCwgY29uZmlnLnBhbmVsKTsKICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAg
ICB2YXIgcm90VHlwZSA9ICgoKGNvbmZpZy50eXBlID09IGRqd3AuUGFuZWxNb2RlbC5wcm90b3R5
cGUuUk9UQVRJT05fVFlQRS5DSVJDVUxBUikgfHwgKGNvbmZpZy50eXBlID09ICJjaXJjdWxhciIp
KSA/IGRqd3AuUGFuZWxNb2RlbC5wcm90b3R5cGUuUk9UQVRJT05fVFlQRS5DSVJDVUxBUiA6IGRq
d3AuUGFuZWxNb2RlbC5wcm90b3R5cGUuUk9UQVRJT05fVFlQRS5MSU5FQVIpOwogICAgICAgIG1v
ZGVsID0gbmV3IGRqd3AuUGFuZWxNb2RlbCh0aGlzLnBhbmVsc1RvUGFuZWxzRFRPKHBhbmVscyks
IHsKICAgICAgICAgICAgcm90YXRpb25UeXBlOiByb3RUeXBlCiAgICAgICAgfSk7CiAgICAgICAg
bW9kZWwuc2V0QWN0aXZlQnlQb3NpdGlvbihjb25maWcuYWN0aXZlUGFuZWwpOwogICAgICAgIHZh
ciB2aWV3ID0gbnVsbCwKICAgICAgICAgICAgdmlld1BhbmVsQ29uZmlnLCB2aWV3UGFuZWxUeXBl
OwogICAgICAgIHN3aXRjaCAoY29uZmlnLnBhbmVsc1R5cGUpIHsKICAgICAgICBjYXNlIF9wYW5U
eXBlLlNMSURFOgogICAgICAgICAgICBfZC5yZXF1aXJlKCJkai53aWRnZXQucGFuZWxzLnZpZXcu
U2xpZGVQYW5lbCIpOwogICAgICAgICAgICB2aWV3UGFuZWxUeXBlID0gIlNsaWRlUGFuZWwiOwog
ICAgICAgICAgICB2aWV3UGFuZWxDb25maWcgPSB7CiAgICAgICAgICAgICAgICBhbmltYXRpb25E
dXJhdGlvbjogY29uZmlnLmFuaW1hdGlvbkR1cmF0aW9uLAogICAgICAgICAgICAgICAgdmlld0Fy
ZWE6IGNvbmZpZy52aWV3QXJlYSwKICAgICAgICAgICAgICAgIG9yaWVudGF0aW9uOiBjb25maWcu
b3JpZW50YXRpb24sCiAgICAgICAgICAgICAgICBwYW5lbEdyb3VwOiBjb25maWcucGFuZWxHcm91
cCwKICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogY29uZmlnLmNvbnRhaW5lciwKICAgICAgICAg
ICAgICAgIGVuYWJsZUxhenlJbWFnZXM6IGNvbmZpZy5lbmFibGVMYXp5SW1hZ2VzCiAgICAgICAg
ICAgIH07CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgX3BhblR5cGUuU1dJVENIOgog
ICAgICAgICAgICBfZC5yZXF1aXJlKCJkai53aWRnZXQucGFuZWxzLnZpZXcuUGFuZWwiKTsKICAg
ICAgICAgICAgdmlld1BhbmVsVHlwZSA9ICJQYW5lbCI7CiAgICAgICAgICAgIHZpZXdQYW5lbENv
bmZpZyA9IHsKICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2xhc3M6IGNvbmZpZy5zZWxlY3RlZFBh
bmVsQ2xhc3MsCiAgICAgICAgICAgICAgICBkZXNlbGVjdGVkQ2xhc3M6IGNvbmZpZy5kZXNlbGVj
dGVkUGFuZWxDbGFzcwogICAgICAgICAgICB9OwogICAgICAgICAgICBicmVhazsKICAgICAgICB9
CiAgICAgICAgdmlldyA9IG5ldyBkandwLnZpZXdbdmlld1BhbmVsVHlwZV0obW9kZWwsIHBhbmVs
cywgdmlld1BhbmVsQ29uZmlnKTsKICAgICAgICB2aWV3cy5wYW5lbHMgPSB2aWV3OwogICAgICAg
IGlmIChjb25maWcuZG9BZGRDaGFuZ2VMaXN0ZW5lcnMpIHsKICAgICAgICAgICAgbW9kZWwuYWRk
Q2hhbmdlTGlzdGVuZXIoInN1Y2Nlc3MiLCB2aWV3LmRpc3BsYXlBY3RpdmVTdWNjZXNzLCB2aWV3
KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgIm1vZGVsIjogbW9kZWws
CiAgICAgICAgICAgICJ2aWV3cyI6IHZpZXdzLAogICAgICAgICAgICAiY29udHJvbGxlcnMiOiBj
b250cm9sbGVycwogICAgICAgIH07CiAgICB9LAogICAgYWRkTW9kdWxlTmF2QXJyb3dzOiBmdW5j
dGlvbiAobXZjLCB1c2VyQ2ZnKSB7CiAgICAgICAgdmFyIF9sb29rdXBUeXBlID0gdGhpcy5fbG9v
a3VwVHlwZSwKICAgICAgICAgICAgbW9kZWwgPSBtdmMubW9kZWwsCiAgICAgICAgICAgIHZpZXdz
ID0gbXZjLnZpZXdzLAogICAgICAgICAgICBjb250cm9sbGVycyA9IG12Yy5jb250cm9sbGVycywK
ICAgICAgICAgICAgX2QgPSBkb2pvOwogICAgICAgIHZhciBjb25maWcgPSBfZC5jbG9uZSh0aGlz
Ll9DT05GSUcuY2Fyb3VzZWwpOwogICAgICAgIGNvbmZpZy5jb250YWluZXIgPSAiIjsKICAgICAg
ICBjb25maWcuZG9BZGRFdmVudHMgPSB0cnVlOwogICAgICAgIGNvbmZpZy5kb0FkZENoYW5nZUxp
c3RlbmVycyA9IHRydWU7CiAgICAgICAgY29uZmlnLmRvSGlkZSA9IGZhbHNlOwogICAgICAgIGRq
LmxhbmcubWl4aW4oY29uZmlnLCB1c2VyQ2ZnKTsKICAgICAgICBpZiAoIWNvbmZpZy5jb250YWlu
ZXIgJiYgdmlld3MucGFuZWxzICYmIHZpZXdzLnBhbmVscy5nZXRDb250YWluZXIpIHsKICAgICAg
ICAgICAgY29uZmlnLmNvbnRhaW5lciA9IHZpZXdzLnBhbmVscy5nZXRDb250YWluZXIoKTsKICAg
ICAgICB9CiAgICAgICAgdmFyIG5hdkFycm93c0xvb2t1cFR5cGUgPSBfbG9va3VwVHlwZS5OT05F
OwogICAgICAgIGlmICghY29uZmlnLmxvb2t1cFR5cGUpIHsKICAgICAgICAgICAgbmF2QXJyb3dz
TG9va3VwVHlwZSA9IChjb25maWcpID8gX2xvb2t1cFR5cGUuU0VMRUNUT1IgOiBuYXZBcnJvd3NM
b29rdXBUeXBlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG5hdkFycm93c0xvb2t1cFR5
cGUgPSBjb25maWcubG9va3VwVHlwZTsKICAgICAgICB9CiAgICAgICAgdmFyIG5hdkFycm93cyA9
IHt9OwogICAgICAgIGlmIChuYXZBcnJvd3NMb29rdXBUeXBlID09IF9sb29rdXBUeXBlLlNFTEVD
VE9SKSB7CiAgICAgICAgICAgIG5hdkFycm93cy5uYXZDb250YWluZXIgPSBfZC5xdWVyeShjb25m
aWcubmF2Q29udGFpbmVyLCBjb25maWcuY29udGFpbmVyKVswXTsKICAgICAgICAgICAgaWYgKG5h
dkFycm93cy5uYXZDb250YWluZXIpIHsKICAgICAgICAgICAgICAgIG5hdkFycm93cy5wcmV2QnV0
dG9uID0gX2QucXVlcnkoY29uZmlnLnByZXZCdXR0b24sIG5hdkFycm93cy5uYXZDb250YWluZXIp
WzBdOwogICAgICAgICAgICAgICAgbmF2QXJyb3dzLm5leHRCdXR0b24gPSBfZC5xdWVyeShjb25m
aWcubmV4dEJ1dHRvbiwgbmF2QXJyb3dzLm5hdkNvbnRhaW5lcilbMF07CiAgICAgICAgICAgICAg
ICBuYXZBcnJvd3MubGFzdEJ1dHRvbiA9IChjb25maWcubGFzdEJ1dHRvbikgPyBfZC5xdWVyeShj
b25maWcubGFzdEJ1dHRvbiwgbmF2QXJyb3dzLm5hdkNvbnRhaW5lcilbMF0gOiBudWxsOwogICAg
ICAgICAgICAgICAgbmF2QXJyb3dzLmZpcnN0QnV0dG9uID0gKGNvbmZpZy5maXJzdEJ1dHRvbikg
PyBfZC5xdWVyeShjb25maWcuZmlyc3RCdXR0b24sIG5hdkFycm93cy5uYXZDb250YWluZXIpWzBd
IDogbnVsbDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9
CiAgICAgICAgaWYgKGNvbmZpZy5kb0hpZGUpIHsKICAgICAgICAgICAgbmF2QXJyb3dzLm5hdkNv
bnRhaW5lci5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7CiAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICB9IGVsc2UgaWYgKG5hdkFycm93cy5uYXZDb250YWluZXIuc3R5bGUudmlzaWJpbGl0
eSA9PT0gImhpZGRlbiIpIHsKICAgICAgICAgICAgbmF2QXJyb3dzLm5hdkNvbnRhaW5lci5zdHls
ZS52aXNpYmlsaXR5ID0gIiI7CiAgICAgICAgfQogICAgICAgIF9kLnJlcXVpcmUoImRqLndpZGdl
dC5wYW5lbHMuY29udHJvbGxlci5OYXZBcnJvd3MiKTsKICAgICAgICB2YXIgY29udHJvbGxlciA9
IG5ldyBkai53aWRnZXQucGFuZWxzLmNvbnRyb2xsZXIuTmF2QXJyb3dzKG1vZGVsLCBuYXZBcnJv
d3MsIGNvbmZpZyk7CiAgICAgICAgY29udHJvbGxlcnMubmF2QXJyb3dzID0gY29udHJvbGxlcjsK
ICAgICAgICBfZC5yZXF1aXJlKCJkai53aWRnZXQucGFuZWxzLnZpZXcuTmF2QXJyb3dzIik7CiAg
ICAgICAgdmFyIHZpZXcgPSBuZXcgZGoud2lkZ2V0LnBhbmVscy52aWV3Lk5hdkFycm93cyhtb2Rl
bCwgbmF2QXJyb3dzLCBjb25maWcpOwogICAgICAgIHZpZXcuZGlzcGxheUFjdGl2ZVN1Y2Nlc3Mo
KTsKICAgICAgICB2aWV3cy5uYXZBcnJvd3MgPSB2aWV3OwogICAgICAgIGlmIChjb25maWcuZG9B
ZGRFdmVudHMpIHsKICAgICAgICAgICAgY29udHJvbGxlci5hZGRFdmVudHMoKTsKICAgICAgICB9
CiAgICAgICAgaWYgKGNvbmZpZy5kb0FkZENoYW5nZUxpc3RlbmVycykgewogICAgICAgICAgICBt
b2RlbC5hZGRDaGFuZ2VMaXN0ZW5lcigic3VjY2VzcyIsIHZpZXcuZGlzcGxheUFjdGl2ZVN1Y2Nl
c3MsIHZpZXcpOwogICAgICAgIH0KICAgIH0sCiAgICBhZGRNb2R1bGVOYXZUYWJzOiBmdW5jdGlv
biAobXZjLCB1c2VyQ2ZnKSB7CiAgICAgICAgdmFyIF9sb29rdXBUeXBlID0gdGhpcy5fbG9va3Vw
VHlwZSwKICAgICAgICAgICAgbW9kZWwgPSBtdmMubW9kZWwsCiAgICAgICAgICAgIHZpZXdzID0g
bXZjLnZpZXdzLAogICAgICAgICAgICBjb250cm9sbGVycyA9IG12Yy5jb250cm9sbGVycywKICAg
ICAgICAgICAgX2QgPSBkb2pvOwogICAgICAgIHZhciBjb25maWcgPSBkb2pvLmNsb25lKHRoaXMu
X0NPTkZJRy50YWJzKTsKICAgICAgICBjb25maWcuY29udGFpbmVyID0gIiI7CiAgICAgICAgY29u
ZmlnLnBhbmVscyA9IHRoaXMuX0NPTkZJRy5jb3JlLnBhbmVsczsKICAgICAgICBjb25maWcuZG9B
ZGRFdmVudHMgPSB0cnVlOwogICAgICAgIGNvbmZpZy5kb0FkZENoYW5nZUxpc3RlbmVycyA9IHRy
dWU7CiAgICAgICAgZGoubGFuZy5taXhpbihjb25maWcsIHVzZXJDZmcpOwogICAgICAgIGlmICgh
Y29uZmlnLmNvbnRhaW5lciAmJiB2aWV3cy5wYW5lbHMgJiYgdmlld3MucGFuZWxzLmdldENvbnRh
aW5lcikgewogICAgICAgICAgICBjb25maWcuY29udGFpbmVyID0gdmlld3MucGFuZWxzLmdldENv
bnRhaW5lcigpOwogICAgICAgIH0KICAgICAgICB2YXIgbmF2VGFic0xvb2t1cFR5cGUgPSBfbG9v
a3VwVHlwZS5OT05FOwogICAgICAgIGlmICghY29uZmlnLmxvb2t1cFR5cGUpIHsKICAgICAgICAg
ICAgbmF2VGFic0xvb2t1cFR5cGUgPSAodXNlckNmZykgPyBfbG9va3VwVHlwZS5TRUxFQ1RPUiA6
IG5hdlRhYnNMb29rdXBUeXBlOwogICAgICAgICAgICBuYXZUYWJzTG9va3VwVHlwZSA9ICh1c2Vy
Q2ZnICYmIHVzZXJDZmcudGFiUHJlZml4KSA/IF9sb29rdXBUeXBlLlBSRUZJWCA6IG5hdlRhYnNM
b29rdXBUeXBlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG5hdlRhYnNMb29rdXBUeXBl
ID0gY29uZmlnLmxvb2t1cFR5cGU7CiAgICAgICAgfQogICAgICAgIHZhciBuYXZUYWJzID0gbnVs
bDsKICAgICAgICBzd2l0Y2ggKG5hdlRhYnNMb29rdXBUeXBlKSB7CiAgICAgICAgY2FzZSBfbG9v
a3VwVHlwZS5QUkVGSVg6CiAgICAgICAgICAgIG5hdlRhYnMgPSB0aGlzLmxvb2t1cEJ5UHJlZml4
KGNvbmZpZy50YWJQcmVmaXgsIGNvbmZpZy5wYW5lbHMpOwogICAgICAgICAgICBicmVhazsKICAg
ICAgICBjYXNlIF9sb29rdXBUeXBlLlNFTEVDVE9SOgogICAgICAgICAgICBuYXZUYWJzID0gdGhp
cy5sb29rdXBCeVNlbGVjdG9yKGNvbmZpZy5jb250YWluZXIsIGNvbmZpZy50YWJHcm91cCwgY29u
ZmlnLnRhYik7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
IHJldHVybjsKICAgICAgICB9CiAgICAgICAgX2QucmVxdWlyZSgiZGoud2lkZ2V0LnBhbmVscy52
aWV3LlBhbmVsIik7CiAgICAgICAgdmFyIHZpZXcgPSBuZXcgZGoud2lkZ2V0LnBhbmVscy52aWV3
LlBhbmVsKG1vZGVsLCBuYXZUYWJzLCB7CiAgICAgICAgICAgIHNlbGVjdGVkQ2xhc3M6IGNvbmZp
Zy50YWJPblN0eWxlLAogICAgICAgICAgICBkZXNlbGVjdGVkQ2xhc3M6IGNvbmZpZy50YWJPZmZT
dHlsZQogICAgICAgIH0pOwogICAgICAgIF9kLnJlcXVpcmUoImRqLndpZGdldC5wYW5lbHMuY29u
dHJvbGxlci5OYXZUYWJzIik7CiAgICAgICAgdmFyIGNvbnRyb2xsZXIgPSBuZXcgZGoud2lkZ2V0
LnBhbmVscy5jb250cm9sbGVyLk5hdlRhYnMobW9kZWwsIG5hdlRhYnMsIHsKICAgICAgICAgICAg
YWN0aXZlRXZlbnQ6IGNvbmZpZy50YWJPbkV2ZW50CiAgICAgICAgfSk7CiAgICAgICAgdmlld3Mu
bmF2VGFicyA9IHZpZXc7CiAgICAgICAgY29udHJvbGxlcnMubmF2VGFicyA9IGNvbnRyb2xsZXI7
CiAgICAgICAgaWYgKGNvbmZpZy5kb0FkZEV2ZW50cykgewogICAgICAgICAgICBjb250cm9sbGVy
LmFkZEV2ZW50cygpOwogICAgICAgIH0KICAgICAgICBpZiAoY29uZmlnLmRvQWRkQ2hhbmdlTGlz
dGVuZXJzKSB7CiAgICAgICAgICAgIG1vZGVsLmFkZENoYW5nZUxpc3RlbmVyKCJzdWNjZXNzIiwg
dmlldy5kaXNwbGF5QWN0aXZlU3VjY2Vzcywgdmlldyk7CiAgICAgICAgfQogICAgfSwKICAgIGFk
ZE1vZHVsZVBhZ2luYXRpb246IGZ1bmN0aW9uIChtdmMsIHVzZXJDZmcpIHsKICAgICAgICB2YXIg
Y29uZmlnID0ge30sCiAgICAgICAgICAgIF9kID0gZG9qbzsKICAgICAgICB2YXIgbW9kZWwgPSBt
dmMubW9kZWwsCiAgICAgICAgICAgIHZpZXdzID0gbXZjLnZpZXdzOwogICAgICAgIGRqLmxhbmcu
bWl4aW4oKGNvbmZpZyA9IHsKICAgICAgICAgICAgY29udGFpbmVyOiAiIiwKICAgICAgICAgICAg
ZG9BZGRDaGFuZ2VMaXN0ZW5lcnM6IHRydWUsCiAgICAgICAgICAgIHBhZ2luYXRpb25Db250YWlu
ZXI6IHRoaXMuX0NPTkZJRy5jb3JlLnBhZ2luYXRpb25Db250YWluZXIsCiAgICAgICAgICAgIGRv
SGlkZTogZmFsc2UKICAgICAgICB9KSwgdXNlckNmZyk7CiAgICAgICAgaWYgKCFjb25maWcuY29u
dGFpbmVyICYmIHZpZXdzLnBhbmVscyAmJiB2aWV3cy5wYW5lbHMuZ2V0Q29udGFpbmVyKSB7CiAg
ICAgICAgICAgIGNvbmZpZy5jb250YWluZXIgPSB2aWV3cy5wYW5lbHMuZ2V0Q29udGFpbmVyKCk7
CiAgICAgICAgfQogICAgICAgIHZhciBvUGFnaW5hdGlvbkNudCA9IF9kLnF1ZXJ5KGNvbmZpZy5w
YWdpbmF0aW9uQ29udGFpbmVyLCBjb25maWcuY29udGFpbmVyKVswXTsKICAgICAgICBpZiAoIW9Q
YWdpbmF0aW9uQ250KSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYg
KGNvbmZpZy5kb0hpZGUpIHsKICAgICAgICAgICAgb1BhZ2luYXRpb25DbnQuc3R5bGUudmlzaWJp
bGl0eSA9ICJoaWRkZW4iOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHZh
ciB2aWV3LCBpc1R5cGVSYW5nZVBhZ2luYXRpb24gPSAoY29uZmlnLnR5cGUgJiYgY29uZmlnLnR5
cGUgPT0gdGhpcy5fcGFnaW5hdGlvblR5cGUuUkFOR0UpLAogICAgICAgICAgICByZXF1aXJlQ2xh
c3NOYW1lID0gKGlzVHlwZVJhbmdlUGFnaW5hdGlvbikgPyAiUmFuZ2VQYWdpbmF0aW9uIiA6ICJQ
YWdpbmF0aW9uIjsKICAgICAgICBpZiAoaXNUeXBlUmFuZ2VQYWdpbmF0aW9uKSB7CiAgICAgICAg
ICAgIHZhciBvdG90YWxSZXN1bHRzQ250ID0gX2QucXVlcnkoY29uZmlnLnRvdGFsUmVzdWx0c0Nv
bnRhaW5lciwgY29uZmlnLmNvbnRhaW5lcilbMF07CiAgICAgICAgICAgIHZhciB0b3RhbENudCA9
IG90b3RhbFJlc3VsdHNDbnQuaW5uZXJIVE1MOwogICAgICAgICAgICBfZC5yZXF1aXJlKCJkai53
aWRnZXQucGFuZWxzLnZpZXcuUmFuZ2VQYWdpbmF0aW9uIik7CiAgICAgICAgICAgIHZpZXcgPSBu
ZXcgZGoud2lkZ2V0LnBhbmVscy52aWV3LlJhbmdlUGFnaW5hdGlvbihtb2RlbCwgb1BhZ2luYXRp
b25DbnQsIHRvdGFsQ250LCBvdG90YWxSZXN1bHRzQ250LCBjb25maWcucGFnZVNpemUpOwogICAg
ICAgICAgICBtb2RlbC5zZXRWaWV3QXJlYSgxKTsKICAgICAgICAgICAgbW9kZWwuc2V0QWN0aXZl
QnlQb3NpdGlvbigxKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBfZC5yZXF1aXJlKCJk
ai53aWRnZXQucGFuZWxzLnZpZXcuUGFnaW5hdGlvbiIpOwogICAgICAgICAgICB2aWV3ID0gbmV3
IGRqLndpZGdldC5wYW5lbHMudmlldy5QYWdpbmF0aW9uKG1vZGVsLCBvUGFnaW5hdGlvbkNudCwg
Y29uZmlnKTsKICAgICAgICB9CiAgICAgICAgdmlldy5kaXNwbGF5QWN0aXZlU3VjY2VzcygpOwog
ICAgICAgIHZpZXdzLnBhZ2luYXRpb24gPSB2aWV3OwogICAgICAgIGlmIChjb25maWcuZG9BZGRD
aGFuZ2VMaXN0ZW5lcnMpIHsKICAgICAgICAgICAgbW9kZWwuYWRkQ2hhbmdlTGlzdGVuZXIoInN1
Y2Nlc3MiLCB2aWV3LmRpc3BsYXlBY3RpdmVTdWNjZXNzLCB2aWV3KTsKICAgICAgICB9CiAgICB9
LAogICAgYWRkTW9kdWxlVGltZXI6IGZ1bmN0aW9uIChtdmMsIHVzZXJDZmcpIHsKICAgICAgICB2
YXIgX2QgPSBkb2pvLAogICAgICAgICAgICBjb25maWcgPSBfZC5jbG9uZSh0aGlzLl9DT05GSUcu
cm90YXRvcik7CiAgICAgICAgY29uZmlnLmNvbnRhaW5lciA9ICIiOwogICAgICAgIGNvbmZpZy5k
b0FkZEV2ZW50cyA9IHRydWU7CiAgICAgICAgY29uZmlnLmRvQWRkQ2hhbmdlTGlzdGVuZXJzID0g
dHJ1ZTsKICAgICAgICBkai5sYW5nLm1peGluKGNvbmZpZywgdXNlckNmZyk7CiAgICAgICAgdmFy
IGNvbnRyb2xsZXJzID0gbXZjLmNvbnRyb2xsZXJzOwogICAgICAgIF9kLnJlcXVpcmUoImRqLndp
ZGdldC5wYW5lbHMuY29udHJvbGxlci5UaW1lciIpOwogICAgICAgIGNvbnRyb2xsZXJzLnRpbWVy
ID0gbmV3IGRqLndpZGdldC5wYW5lbHMuY29udHJvbGxlci5UaW1lcihtdmMubW9kZWwsIGNvbmZp
Zyk7CiAgICAgICAgdmFyIG9QYXVzZSA9IF9kLnF1ZXJ5KGNvbmZpZy5wYXVzZUJ1dHRvbiwgY29u
ZmlnLmNvbnRhaW5lcilbMF07CiAgICAgICAgaWYgKG9QYXVzZSkgewogICAgICAgICAgICBfZC5y
ZXF1aXJlKCJkai53aWRnZXQucGFuZWxzLnZpZXcuVGltZXIiKTsKICAgICAgICAgICAgdmFyIHZp
ZXcgPSBuZXcgZGoud2lkZ2V0LnBhbmVscy52aWV3LlRpbWVyKG12Yy5tb2RlbCwgewogICAgICAg
ICAgICAgICAgcGF1c2VCdXR0b246IG9QYXVzZQogICAgICAgICAgICB9LCB1c2VyQ2ZnKTsKICAg
ICAgICAgICAgaWYgKGNvbmZpZy5kb0FkZENoYW5nZUxpc3RlbmVycykgewogICAgICAgICAgICAg
ICAgbXZjLm1vZGVsLmFkZENoYW5nZUxpc3RlbmVyKCJyb3RhdGlvblN0YXRlU3VjY2VzcyIsIHZp
ZXcucm90YXRpb25TdGF0ZVN1Y2Nlc3MsIHZpZXcpOwogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgICAgIGlmIChjb25maWcuZG9BZGRFdmVudHMpIHsKICAgICAgICAgICAgY29udHJvbGxlcnMu
dGltZXIuYWRkRXZlbnRzKCk7CiAgICAgICAgfQogICAgfSwKICAgIGFkZE1vZHVsZUJyb3dzZXJI
aXN0b3J5OiBmdW5jdGlvbiAobXZjLCB1c2VyQ2ZnKSB7CiAgICAgICAgdmFyIGNvbmZpZyA9IHt9
LAogICAgICAgICAgICBfZCA9IGRvam87CiAgICAgICAgZGoubGFuZy5taXhpbigoY29uZmlnID0g
ewogICAgICAgICAgICBkb0FkZEV2ZW50czogdHJ1ZQogICAgICAgIH0pLCB1c2VyQ2ZnKTsKICAg
ICAgICBfZC5yZXF1aXJlKCJkai53aWRnZXQucGFuZWxzLmNvbnRyb2xsZXIuSGlzdG9yeSIpOwog
ICAgICAgIG12Yy5jb250cm9sbGVycy5icm93c2VySGlzdG9yeSA9IG5ldyBkai53aWRnZXQucGFu
ZWxzLmNvbnRyb2xsZXIuSGlzdG9yeShtdmMubW9kZWwsIGNvbmZpZyk7CiAgICAgICAgaWYgKGNv
bmZpZy5kb0FkZEV2ZW50cykgewogICAgICAgICAgICBjb250cm9sbGVycy5icm93c2VySGlzdG9y
eS5hZGRFdmVudHMoKTsKICAgICAgICB9CiAgICB9LAogICAgYWRkQ29udHJvbGxlcjogZnVuY3Rp
b24gKG12YywgY012YykgewogICAgICAgIGlmICghY012YyB8fCAhY012Yy5tb2RlbCB8fCAhY012
Yy5tb2RlbC5hZGRDaGFuZ2VMaXN0ZW5lciB8fCAhbXZjIHx8ICFtdmMubW9kZWwpIHsKICAgICAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCJ7UGFuZWxzLmFkZENvbnRyb2xsZXJ9IG12YyBhbmQvb3Ig
Y29udHJvbGxlciBpcyBpbnZhbGlkLiIpOwogICAgICAgIH0KICAgICAgICB2YXIgbW9kZWwgPSBt
dmMubW9kZWwsCiAgICAgICAgICAgIGNvbnRyb2xsZXJNb2RlbCA9IGNNdmMubW9kZWw7CiAgICAg
ICAgY29udHJvbGxlck1vZGVsLmFkZENoYW5nZUxpc3RlbmVyKCJzdWNjZXNzIiwgZnVuY3Rpb24g
KHBhbmVsKSB7CiAgICAgICAgICAgIG1vZGVsLnNldEFjdGl2ZShwYW5lbCk7CiAgICAgICAgfSk7
CiAgICB9LAogICAgX3NldHVwTXZjOiBmdW5jdGlvbiAoY29udGFpbmVyLCB1c2VyQ29uZmlnKSB7
CiAgICAgICAgdmFyIG9DbnQgPSBkb2pvLmJ5SWQoY29udGFpbmVyKTsKICAgICAgICBjb250YWlu
ZXIgPSAob0NudC5pZCB8fCBjb250YWluZXIpOwogICAgICAgIHZhciBjb25maWcgPSBkai5sYW5n
LmNsb25lTWl4aW4odGhpcy5fQ09ORklHLCB1c2VyQ29uZmlnKSwKICAgICAgICAgICAgdHlwZUNm
ZyA9IHRoaXMuX2dldFBhbmVsc1R5cGVDb25maWcodXNlckNvbmZpZywgY29uZmlnKTsKICAgICAg
ICB2YXIgcGFuZWxzQ2ZnID0gewogICAgICAgICAgICBjb250YWluZXI6IG9DbnQsCiAgICAgICAg
ICAgIGRvQWRkQ2hhbmdlTGlzdGVuZXJzOiBmYWxzZSwKICAgICAgICAgICAgcGFuZWxzVHlwZTog
dHlwZUNmZy5wYW5lbHNUeXBlLAogICAgICAgICAgICBwYW5lbHNMb29rdXBUeXBlOiB0eXBlQ2Zn
LnBhbmVsc0xvb2t1cFR5cGUKICAgICAgICB9OwogICAgICAgIGRqLmxhbmcubWl4aW4ocGFuZWxz
Q2ZnLCBjb25maWcuY29yZSk7CiAgICAgICAgaWYgKHR5cGVDZmcucGFuZWxzVHlwZSA9PSB0aGlz
Ll9wYW5lbHNUeXBlLlNXSVRDSCkgewogICAgICAgICAgICBkai5sYW5nLm1peGluKHBhbmVsc0Nm
ZywgY29uZmlnLnRhYnMpOwogICAgICAgIH0gZWxzZSBpZiAodHlwZUNmZy5wYW5lbHNUeXBlID09
IHRoaXMuX3BhbmVsc1R5cGUuU0xJREUpIHsKICAgICAgICAgICAgZGoubGFuZy5taXhpbihwYW5l
bHNDZmcsIGNvbmZpZy5jYXJvdXNlbCk7CiAgICAgICAgfQogICAgICAgIHZhciBtdmMgPSB0aGlz
LmNyZWF0ZVBhbmVscyhwYW5lbHNDZmcpOwogICAgICAgIGlmIChtdmMubW9kZWwuZ2V0TnVtYmVy
T2ZQYW5lbHMoKSA9PSAtMSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIntQYW5lbHN9
IGNvbnRhaW5lciBcIiIgKyBjb250YWluZXIgKyAiXCIgaGFzIG5vIHBhbmVscy4iKTsKICAgICAg
ICB9CiAgICAgICAgdmFyIG1vZGVsID0gbXZjLm1vZGVsLAogICAgICAgICAgICB2aWV3cyA9IG12
Yy52aWV3cywKICAgICAgICAgICAgY29udHJvbGxlcnMgPSBtdmMuY29udHJvbGxlcnM7CiAgICAg
ICAgaWYgKHR5cGVDZmcuaGFzTmF2VGFicykgewogICAgICAgICAgICB2YXIgbmF2VGFiQ2ZnID0g
Y29uZmlnLnRhYnM7CiAgICAgICAgICAgIG5hdlRhYkNmZy5jb250YWluZXIgPSBvQ250OwogICAg
ICAgICAgICBuYXZUYWJDZmcucGFuZWxzID0gY29uZmlnLmNvcmUucGFuZWxzOwogICAgICAgICAg
ICBuYXZUYWJDZmcuZG9BZGRFdmVudHMgPSBmYWxzZTsKICAgICAgICAgICAgbmF2VGFiQ2ZnLmRv
QWRkQ2hhbmdlTGlzdGVuZXJzID0gZmFsc2U7CiAgICAgICAgICAgIG5hdlRhYkNmZy5sb29rdXBU
eXBlID0gdHlwZUNmZy5uYXZUYWJzTG9va3VwVHlwZTsKICAgICAgICAgICAgdGhpcy5hZGRNb2R1
bGVOYXZUYWJzKG12YywgbmF2VGFiQ2ZnKTsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVDZmcu
aGFzTmF2QXJyb3dzKSB7CiAgICAgICAgICAgIHZhciBuYXZBcnJDZmcgPSBjb25maWcuY2Fyb3Vz
ZWw7CiAgICAgICAgICAgIG5hdkFyckNmZy5jb250YWluZXIgPSBvQ250OwogICAgICAgICAgICBu
YXZBcnJDZmcuZG9BZGRFdmVudHMgPSBmYWxzZTsKICAgICAgICAgICAgbmF2QXJyQ2ZnLmRvQWRk
Q2hhbmdlTGlzdGVuZXJzID0gZmFsc2U7CiAgICAgICAgICAgIG5hdkFyckNmZy5sb29rdXBUeXBl
ID0gdHlwZUNmZy5uYXZBcnJvd3NMb29rdXBUeXBlOwogICAgICAgICAgICBuYXZBcnJDZmcucGFu
ZWxJbmNyZW1lbnQgPSBjb25maWcuY29yZS5wYW5lbEluY3JlbWVudDsKICAgICAgICAgICAgbmF2
QXJyQ2ZnLmRvSGlkZSA9ICgodHlwZUNmZy5wYW5lbHNUeXBlID09IHRoaXMuX3BhbmVsc1R5cGUu
U0xJREUpICYmICh2aWV3cy5wYW5lbHMuZ2V0Vmlld0FyZWEoKSA+PSBtb2RlbC5nZXROdW1iZXJP
ZlBhbmVscygpKSAmJiAhY29uZmlnLmNhcm91c2VsLnNob3dOYXZCdXR0b25zKTsKICAgICAgICAg
ICAgdGhpcy5hZGRNb2R1bGVOYXZBcnJvd3MobXZjLCBuYXZBcnJDZmcpOwogICAgICAgIH0KICAg
ICAgICB2YXIgZW5hYmxlUGFnaW5hdGlvbiA9IGNvbmZpZy5jb3JlLmVuYWJsZVBhZ2luYXRpb247
CiAgICAgICAgaWYgKCh0eXBlQ2ZnLnBhbmVsc1R5cGUgPT0gdGhpcy5fcGFuZWxzVHlwZS5TTElE
RSAmJiAodmlld3MucGFuZWxzLmdldFZpZXdBcmVhKCkgPD0gMSkpIHx8IGVuYWJsZVBhZ2luYXRp
b24pIHsKICAgICAgICAgICAgdmFyIHBhZ2luQ2ZnID0gewogICAgICAgICAgICAgICAgY29udGFp
bmVyOiBvQ250LAogICAgICAgICAgICAgICAgcGFnaW5hdGlvbkNvbnRhaW5lcjogY29uZmlnLmNv
cmUucGFnaW5hdGlvbkNvbnRhaW5lciwKICAgICAgICAgICAgICAgIHBhbmVsSW5jcmVtZW50OiBj
b25maWcuY29yZS5wYW5lbEluY3JlbWVudCwKICAgICAgICAgICAgICAgIHBhZ2luYXRpb25EaXZp
ZGVyOiBjb25maWcuY29yZS5wYWdpbmF0aW9uRGl2aWRlciwKICAgICAgICAgICAgICAgIGRvQWRk
RXZlbnRzOiBmYWxzZSwKICAgICAgICAgICAgICAgIGRvQWRkQ2hhbmdlTGlzdGVuZXJzOiBmYWxz
ZSwKICAgICAgICAgICAgICAgIGRvSGlkZTogKHZpZXdzLnBhbmVscy5nZXRWaWV3QXJlYSgpID09
IDEgJiYgZW5hYmxlUGFnaW5hdGlvbikKICAgICAgICAgICAgfTsKICAgICAgICAgICAgdGhpcy5h
ZGRNb2R1bGVQYWdpbmF0aW9uKG12YywgcGFnaW5DZmcpOwogICAgICAgIH0KICAgICAgICBpZiAo
dHlwZUNmZy5oYXNUaW1lcikgewogICAgICAgICAgICB2YXIgdGltZXJDZmcgPSBjb25maWcucm90
YXRvcjsKICAgICAgICAgICAgdGltZXJDZmcuY29udGFpbmVyID0gb0NudDsKICAgICAgICAgICAg
dGltZXJDZmcuZG9BZGRFdmVudHMgPSBmYWxzZTsKICAgICAgICAgICAgdGhpcy5hZGRNb2R1bGVU
aW1lcihtdmMsIHRpbWVyQ2ZnKTsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVDZmcuaGFzQnJv
d3Nlckhpc3RvcnkpIHsKICAgICAgICAgICAgdmFyIGhpc3RDb25mID0gewogICAgICAgICAgICAg
ICAgY29udGFpbmVyOiAodHlwZUNmZy5wYW5lbHNMb29rdXBUeXBlID09IHRoaXMuX2xvb2t1cFR5
cGUuU0VMRUNUT1IpID8gb0NudC5pZCA6IGNvbnRhaW5lciwKICAgICAgICAgICAgICAgIGRvQWRk
RXZlbnRzOiBmYWxzZQogICAgICAgICAgICB9OwogICAgICAgICAgICB0aGlzLmFkZE1vZHVsZUJy
b3dzZXJIaXN0b3J5KG12YywgaGlzdENvbmYpOwogICAgICAgIH0KICAgICAgICBpZiAodHlwZUNm
Zy5oYXNDb250cm9sbGVyKSB7CiAgICAgICAgICAgIHRoaXMuYWRkQ29udHJvbGxlcihtdmMsIGNv
bmZpZy5jb3JlLmNvbnRyb2xsZXIpOwogICAgICAgIH0KICAgICAgICB0aGlzLl9hZGRWaWV3Q2hh
bmdlTGlzdGVuZXJzVG9Nb2RlbChtb2RlbCwgdmlld3MpOwogICAgICAgIHRoaXMuX2FkZEV2ZW50
c1RvQ29udHJvbGxlcnMoY29udHJvbGxlcnMpOwogICAgICAgIGlmICghdHlwZUNmZy5oYXNCcm93
c2VySGlzdG9yeSAmJiB0eXBlQ2ZnLnBhbmVsc1R5cGUgPT0gdGhpcy5fcGFuZWxzVHlwZS5TV0lU
Q0gpIHsKICAgICAgICAgICAgbW9kZWwuc2V0QWN0aXZlQnlQb3NpdGlvbihwYW5lbHNDZmcuYWN0
aXZlUGFuZWwpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbXZjOwogICAgfSwKICAgIF9nZXRQ
YW5lbHNUeXBlQ29uZmlnOiBmdW5jdGlvbiAodXNlckNvbmZpZywgY29uZmlnKSB7CiAgICAgICAg
dmFyIF9wYW5UeXBlID0gdGhpcy5fcGFuZWxzVHlwZTsKICAgICAgICB2YXIgX2xvb2tUeXBlID0g
dGhpcy5fbG9va3VwVHlwZTsKICAgICAgICB2YXIgdHlwZUNmZyA9IHt9OwogICAgICAgIHR5cGVD
ZmcucGFuZWxzVHlwZSA9IF9wYW5UeXBlLk5PTkU7CiAgICAgICAgdHlwZUNmZy5wYW5lbHNUeXBl
ID0gKHVzZXJDb25maWcuY29yZSkgPyBfcGFuVHlwZS5TV0lUQ0ggOiB0eXBlQ2ZnLnBhbmVsc1R5
cGU7CiAgICAgICAgdHlwZUNmZy5wYW5lbHNUeXBlID0gKHVzZXJDb25maWcuY2Fyb3VzZWwpID8g
X3BhblR5cGUuU0xJREUgOiB0eXBlQ2ZnLnBhbmVsc1R5cGU7CiAgICAgICAgdHlwZUNmZy5wYW5l
bHNMb29rdXBUeXBlID0gX2xvb2tUeXBlLlNFTEVDVE9SOwogICAgICAgIHR5cGVDZmcucGFuZWxz
TG9va3VwVHlwZSA9ICh1c2VyQ29uZmlnLmNvcmUgJiYgdXNlckNvbmZpZy5jb3JlLnBhbmVsUHJl
Zml4KSA/IF9sb29rVHlwZS5QUkVGSVggOiB0eXBlQ2ZnLnBhbmVsc0xvb2t1cFR5cGU7CiAgICAg
ICAgdHlwZUNmZy5uYXZUYWJzTG9va3VwVHlwZSA9IF9sb29rVHlwZS5OT05FOwogICAgICAgIHR5
cGVDZmcubmF2VGFic0xvb2t1cFR5cGUgPSAodXNlckNvbmZpZy50YWJzKSA/IF9sb29rVHlwZS5T
RUxFQ1RPUiA6IHR5cGVDZmcubmF2VGFic0xvb2t1cFR5cGU7CiAgICAgICAgdHlwZUNmZy5uYXZU
YWJzTG9va3VwVHlwZSA9ICh1c2VyQ29uZmlnLnRhYnMgJiYgdXNlckNvbmZpZy50YWJzLnRhYlBy
ZWZpeCkgPyBfbG9va1R5cGUuUFJFRklYIDogdHlwZUNmZy5uYXZUYWJzTG9va3VwVHlwZTsKICAg
ICAgICB0eXBlQ2ZnLm5hdkFycm93c0xvb2t1cFR5cGUgPSBfbG9va1R5cGUuTk9ORTsKICAgICAg
ICB0eXBlQ2ZnLm5hdkFycm93c0xvb2t1cFR5cGUgPSAodXNlckNvbmZpZy5jYXJvdXNlbCkgPyBf
bG9va1R5cGUuU0VMRUNUT1IgOiB0eXBlQ2ZnLm5hdkFycm93c0xvb2t1cFR5cGU7CiAgICAgICAg
dHlwZUNmZy5uYXZBcnJvd3NMb29rdXBUeXBlID0gKHVzZXJDb25maWcudGFiICYmIHVzZXJDb25m
aWcudGFiLm5hdkNvbnRhaW5lcikgPyBfbG9va1R5cGUuU0VMRUNUT1IgOiB0eXBlQ2ZnLm5hdkFy
cm93c0xvb2t1cFR5cGU7CiAgICAgICAgdHlwZUNmZy5oYXNDb250cm9sbGVyID0gKHVzZXJDb25m
aWcuY29yZSAmJiAodHlwZW9mIHVzZXJDb25maWcuY29yZS5jb250cm9sbGVyID09ICJvYmplY3Qi
KSk7CiAgICAgICAgdHlwZUNmZy5oYXNOYXZBcnJvd3MgPSAodHlwZUNmZy5uYXZBcnJvd3NMb29r
dXBUeXBlICE9PSBfbG9va1R5cGUuTk9ORSk7CiAgICAgICAgdHlwZUNmZy5oYXNOYXZUYWJzID0g
KHR5cGVDZmcubmF2VGFic0xvb2t1cFR5cGUgIT09IF9sb29rVHlwZS5OT05FKTsKICAgICAgICB0
eXBlQ2ZnLmhhc1RpbWVyID0gKHR5cGVvZiB1c2VyQ29uZmlnLnJvdGF0b3IgPT0gIm9iamVjdCIg
JiYgdXNlckNvbmZpZy5yb3RhdG9yLnJvdGF0ZVRpbWUgPiAwKTsKICAgICAgICB0eXBlQ2ZnLmhh
c0Jyb3dzZXJIaXN0b3J5ID0gKGNvbmZpZy5jb3JlLmVuYWJsZUJyb3dzZXJIaXN0b3J5KTsKICAg
ICAgICByZXR1cm4gdHlwZUNmZzsKICAgIH0sCiAgICBfYWRkVmlld0NoYW5nZUxpc3RlbmVyc1Rv
TW9kZWw6IGZ1bmN0aW9uIChtb2RlbCwgdmlld3MpIHsKICAgICAgICB2YXIgdmlldyA9IG51bGw7
CiAgICAgICAgZm9yICh2YXIgdmlld05hbWUgaW4gdmlld3MpIHsKICAgICAgICAgICAgaWYgKHZp
ZXdzLmhhc093blByb3BlcnR5KHZpZXdOYW1lKSkgewogICAgICAgICAgICAgICAgdmlldyA9IHZp
ZXdzW3ZpZXdOYW1lXTsKICAgICAgICAgICAgICAgIGlmICh2aWV3LmRpc3BsYXlBY3RpdmVTdWNj
ZXNzKSB7CiAgICAgICAgICAgICAgICAgICAgbW9kZWwuYWRkQ2hhbmdlTGlzdGVuZXIoInN1Y2Nl
c3MiLCB2aWV3LmRpc3BsYXlBY3RpdmVTdWNjZXNzLCB2aWV3KTsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIGlmICh2aWV3LmRpc3BsYXlBY3RpdmVGYWlsdXJlKSB7CiAgICAgICAg
ICAgICAgICAgICAgbW9kZWwuYWRkQ2hhbmdlTGlzdGVuZXIoImZhaWx1cmUiLCB2aWV3LmRpc3Bs
YXlBY3RpdmVGYWlsdXJlLCB2aWV3KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQog
ICAgICAgIH0KICAgIH0sCiAgICBfYWRkRXZlbnRzVG9Db250cm9sbGVyczogZnVuY3Rpb24gKGNv
bnRyb2xsZXJzKSB7CiAgICAgICAgdmFyIGNvbnRyb2xsZXIgPSBudWxsOwogICAgICAgIGZvciAo
dmFyIGNvbnRyb2xsZXJOYW1lIGluIGNvbnRyb2xsZXJzKSB7CiAgICAgICAgICAgIGlmIChjb250
cm9sbGVycy5oYXNPd25Qcm9wZXJ0eShjb250cm9sbGVyTmFtZSkpIHsKICAgICAgICAgICAgICAg
IGNvbnRyb2xsZXIgPSBjb250cm9sbGVyc1tjb250cm9sbGVyTmFtZV07CiAgICAgICAgICAgICAg
ICBjb250cm9sbGVyLmFkZEV2ZW50cygpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSwK
ICAgIF9hZGRDb21wYXRpYmlsaXR5TWV0aG9kczogZnVuY3Rpb24gKG12YywgY29udGFpbmVyLCBj
b25maWcpIHsKICAgICAgICB2YXIgdGhhdCA9IHRoaXM7CiAgICAgICAgaWYgKHR5cGVvZiBtdmMu
bW9kZWwudXBkYXRlID09PSAidW5kZWZpbmVkIikgewogICAgICAgICAgICBtdmMubW9kZWwudXBk
YXRlID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgdGhhdC5kZXN0cm95KG12Yyk7CiAg
ICAgICAgICAgICAgICBtdmMgPSB0aGF0LmNyZWF0ZSgoY29udGFpbmVyLmlkIHx8IGNvbnRhaW5l
ciksIGNvbmZpZywgdHJ1ZSk7CiAgICAgICAgICAgICAgICByZXR1cm4gbXZjOwogICAgICAgICAg
ICB9OwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIG12Yy5tb2RlbC5kZXN0cm95ID09PSAi
dW5kZWZpbmVkIikgewogICAgICAgICAgICBtdmMubW9kZWwuZGVzdHJveSA9IGZ1bmN0aW9uICgp
IHsKICAgICAgICAgICAgICAgIHRoYXQuZGVzdHJveShtdmMpOwogICAgICAgICAgICB9OwogICAg
ICAgIH0KICAgICAgICBpZiAobXZjLmNvbnRyb2xsZXJzICYmIG12Yy5jb250cm9sbGVycy5uYXZU
YWJzKSB7CiAgICAgICAgICAgIHZhciB0YWJzID0gbXZjLmNvbnRyb2xsZXJzLm5hdlRhYnMudGFi
cywKICAgICAgICAgICAgICAgIF9kID0gZG9qbzsKICAgICAgICAgICAgbXZjLm1vZGVsLm9ic2Vy
dmVUYWJzID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBldmVudFR5cGUpIHsKICAgICAgICAgICAgICAg
IGV2ZW50VHlwZSA9IChldmVudFR5cGUgfHwgIm9uY2xpY2siKTsKICAgICAgICAgICAgICAgIHZh
ciBfYWRkRXZGb3JUYWIgPSBmdW5jdGlvbiAodGFiKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IF9kLmNvbm5lY3QodGFiLmdldEVsZW1lbnQoKSwgZXZlbnRUeXBlLCBmdW5jdGlvbiAoZXYpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aWQgPSB0YWIuZ2V0SWQoKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChtdmMuY29udHJvbGxlcnMubmF2VGFicy5fY2ZnLmRv
U3RvcEV2ZW50ID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Qu
c3RvcEV2ZW50KGV2KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRpZCA9IChpc05hTihwYXJzZUludCh0aWQsIDEwKSkpID8gdGlkIDog
KG12Yy5tb2RlbC5nZXRCeUlkKHRpZCkuZ2V0UG9zaXRpb24oKSArICIiKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCwgdGlkLCBtdmMubW9kZWwpOwogICAg
ICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAg
ICAgICAgZm9yICh2YXIgdGlkIGluIHRhYnMpIHsKICAgICAgICAgICAgICAgICAgICBpZiAodGFi
cy5oYXNPd25Qcm9wZXJ0eSh0aWQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9hZGRFdkZv
clRhYih0YWJzW3RpZF0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgbXZjLm1vZGVsLm1vZGVsID0gbXZjLm1v
ZGVsOwogICAgICAgIG12Yy5tb2RlbC52aWV3cyA9IG12Yy52aWV3czsKICAgICAgICBtdmMubW9k
ZWwuY29udHJvbGxlcnMgPSBtdmMuY29udHJvbGxlcnM7CiAgICB9LAogICAgZGVzdHJveTogZnVu
Y3Rpb24gKG12YykgewogICAgICAgIGZvciAodmFyIGNvbnRyb2xsZXIgaW4gbXZjLmNvbnRyb2xs
ZXJzKSB7CiAgICAgICAgICAgIGlmIChtdmMuY29udHJvbGxlcnMuaGFzT3duUHJvcGVydHkoY29u
dHJvbGxlcikpIHsKICAgICAgICAgICAgICAgIG12Yy5jb250cm9sbGVyc1tjb250cm9sbGVyXS5y
ZW1vdmVFdmVudHMoKTsKICAgICAgICAgICAgICAgIGRlbGV0ZSBtdmMuY29udHJvbGxlcnNbY29u
dHJvbGxlcl07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZm9yICh2YXIgdmlld05h
bWUgaW4gbXZjLnZpZXdzKSB7CiAgICAgICAgICAgIGlmIChtdmMudmlld3MuaGFzT3duUHJvcGVy
dHkodmlld05hbWUpKSB7CiAgICAgICAgICAgICAgICB2YXIgdmlldyA9IG12Yy52aWV3c1t2aWV3
TmFtZV07CiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZpZXcuZGVzdHJveSA9PSAiZnVuY3Rp
b24iKSB7CiAgICAgICAgICAgICAgICAgICAgdmlldy5kZXN0cm95KCk7CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICBkZWxldGUgbXZjLnZpZXdzW3ZpZXdOYW1lXTsKICAgICAgICAg
ICAgfQogICAgICAgIH0KICAgIH0sCiAgICBwYW5lbHNUb1BhbmVsc0RUTzogZnVuY3Rpb24gKHBh
bmVscykgewogICAgICAgIHZhciBlbG1zID0ge307CiAgICAgICAgZm9yICh2YXIgcGFuSWQgaW4g
cGFuZWxzKSB7CiAgICAgICAgICAgIGlmIChwYW5lbHMuaGFzT3duUHJvcGVydHkocGFuSWQpKSB7
CiAgICAgICAgICAgICAgICB2YXIgcGFuID0gcGFuZWxzW3BhbklkXTsKICAgICAgICAgICAgICAg
IGVsbXNbcGFuSWRdID0gbmV3IGRqLndpZGdldC5wYW5lbHMuUGFuZWxEVE8ocGFuLmdldElkKCks
IHBhbi5nZXRQb3NpdGlvbigpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1
cm4gZWxtczsKICAgIH0sCiAgICBsb29rdXBCeVByZWZpeDogZnVuY3Rpb24gKHByZWZpeCwgbmFt
ZXMpIHsKICAgICAgICB2YXIgZWxtcyA9IHt9OwogICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4g
PSBuYW1lcy5sZW5ndGgsIGlkID0gbnVsbCwgZWwgPSBudWxsLCBwb3MgPSAxOyBpIDwgbGVuOyBp
KyspIHsKICAgICAgICAgICAgaWQgPSBuYW1lc1tpXTsKICAgICAgICAgICAgZWwgPSBkb2pvLmJ5
SWQocHJlZml4ICsgaWQpOwogICAgICAgICAgICBpZiAoKHR5cGVvZiBlbCA9PT0gInVuZGVmaW5l
ZCIpIHx8IGVsID09PSBudWxsIHx8IGVsLmZpcnN0Q2hpbGQgPT09IG51bGwpIHsKICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsbXNbaWRdID0gbmV3
IGRqLndpZGdldC5wYW5lbHMuUGFuZWwoaWQsIHBvcysrLCBlbCk7CiAgICAgICAgfQogICAgICAg
IHJldHVybiBlbG1zOwogICAgfSwKICAgIGxvb2t1cEJ5U2VsZWN0b3I6IGZ1bmN0aW9uIChjb250
YWluZXIsIGdyb3VwLCBub2RlKSB7CiAgICAgICAgaWYgKCFjb250YWluZXIgfHwgY29udGFpbmVy
ID09PSBudWxsKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigne2RqLnV0aWwuUGFuZWxz
fSBjb250YWluZXIgZm9yIGdyb3VwOiAiJyArIGdyb3VwICsgJyIgaXMgdW5kZWZpbmVkLicpOwog
ICAgICAgIH0KICAgICAgICB2YXIgb0NudCA9IGRvam8uYnlJZChjb250YWluZXIpOwogICAgICAg
IHZhciBvUGFuZWxzID0gZG9qby5xdWVyeSgoZ3JvdXAgKyAnICcgKyBub2RlKSwgb0NudCk7CiAg
ICAgICAgdmFyIGVsbXMgPSB7fTsKICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gb1BhbmVs
cy5sZW5ndGgsIGVsID0gbnVsbCwgcG9zID0gMTsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAg
IGVsID0gb1BhbmVsc1tpXTsKICAgICAgICAgICAgaWYgKGVsID09PSBudWxsIHx8IChlbC50YWdO
YW1lICE9PSAiSU1HIiAmJiBlbC5maXJzdENoaWxkID09PSBudWxsKSkgewogICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxtc1twb3MgLSAxXSA9IG5l
dyBkai53aWRnZXQucGFuZWxzLlBhbmVsKHBvcyAtIDEsIHBvcysrLCBlbCk7CiAgICAgICAgfQog
ICAgICAgIHJldHVybiBlbG1zOwogICAgfQp9Owpkb2pvLnByb3ZpZGUoImRqLndpZGdldC5wYW5l
bHMucHJlYnVpbHQuU2xpZGVzaG93Iik7CmRvam8ucmVxdWlyZSgiZGoud2lkZ2V0LnBhbmVscy5Q
YW5lbHNGYWN0b3J5Iik7CmRvam8ucmVxdWlyZSgiZGoud2lkZ2V0LnBhbmVscy52aWV3LlBhZ2lu
YXRpb24iKTsKZG9qby5kZWNsYXJlKCJkai53aWRnZXQucGFuZWxzLnByZWJ1aWx0LlNsaWRlc2hv
dyIsIG51bGwsIHsKICAgIFNUQVRFX0NMQVNTOiB7CiAgICAgICAgTk9STUFMOiAic2xfaW5saW5l
LW5vcm0iLAogICAgICAgIE9WRVI6ICJzbF9pbmxpbmUtb3ZlciIsCiAgICAgICAgRU5EOiAic2xf
aW5saW5lLWVuZCIKICAgIH0sCiAgICBjb25zdHJ1Y3RvcjogZnVuY3Rpb24gKGlkKSB7CiAgICAg
ICAgdGhpcy5fZG9tQ29udGFpbmVyID0gZG9qby5ieUlkKGlkKTsKICAgICAgICB0aGlzLl9pc0Nh
cHRpb25zRW5hYmxlZCA9IHRydWU7CiAgICAgICAgdGhpcy5faXNMYXN0RnJhbWVFbmFibGVkID0g
dHJ1ZTsKICAgICAgICB0aGlzLl9jcmVhdGVQYW5lbHModGhpcy5fZG9tQ29udGFpbmVyKTsKICAg
ICAgICB0aGlzLl9jb25uZWN0Q2FwdGlvbkV2ZW50cygpOwogICAgICAgIHRoaXMuX2Nvbm5lY3RM
YXN0RnJhbWVFdmVudHMoKTsKICAgIH0sCiAgICBnZXRQYW5lbHM6IGZ1bmN0aW9uICgpIHsKICAg
ICAgICByZXR1cm4gdGhpcy5fcGFuZWxzOwogICAgfSwKICAgIG5leHRTbGlkZTogZnVuY3Rpb24g
KCkgewogICAgICAgIHRoaXMuX3BhbmVscy5jb250cm9sbGVycy5uYXZBcnJvd3Muc2V0TmV4dEFj
dGl2ZSgpOwogICAgfSwKICAgIHByZXZpb3VzU2xpZGU6IGZ1bmN0aW9uICgpIHsKICAgICAgICB0
aGlzLl9wYW5lbHMuY29udHJvbGxlcnMubmF2QXJyb3dzLnNldFByZXZpb3VzQWN0aXZlKCk7CiAg
ICB9LAogICAgc2hvd0NhcHRpb246IGZ1bmN0aW9uICgpIHsKICAgICAgICBpZiAoIXRoaXMuX2lz
Q2FwdGlvbnNFbmFibGVkKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAg
ZG9qby5yZW1vdmVDbGFzcyh0aGlzLl9kb21Db250YWluZXIsIHRoaXMuU1RBVEVfQ0xBU1MuTk9S
TUFMKTsKICAgICAgICBkb2pvLmFkZENsYXNzKHRoaXMuX2RvbUNvbnRhaW5lciwgdGhpcy5TVEFU
RV9DTEFTUy5PVkVSKTsKICAgICAgICB2YXIgY2FwdGlvbiA9IHRoaXMuX2dldEN1cnJlbnRDYXB0
aW9uKCksCiAgICAgICAgICAgIGNhcHRpb25IZWlnaHQgPSBkb2pvLnBvc2l0aW9uKGNhcHRpb24p
Lmg7CiAgICAgICAgZG9qby5hbmltKGNhcHRpb24sIHsKICAgICAgICAgICAgdG9wOiB7CiAgICAg
ICAgICAgICAgICBlbmQ6IC1jYXB0aW9uSGVpZ2h0CiAgICAgICAgICAgIH0KICAgICAgICB9KTsK
ICAgIH0sCiAgICBoaWRlQ2FwdGlvbjogZnVuY3Rpb24gKCkgewogICAgICAgIGlmICghdGhpcy5f
aXNDYXB0aW9uc0VuYWJsZWQpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAg
ICB2YXIgY2FwdGlvbiA9IHRoaXMuX2dldEN1cnJlbnRDYXB0aW9uKCksCiAgICAgICAgICAgIGFu
ID0gZG9qby5hbmltKGNhcHRpb24sIHsKICAgICAgICAgICAgICAgIHRvcDogewogICAgICAgICAg
ICAgICAgICAgIGVuZDogMAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAg
ICBkb2pvLmNvbm5lY3QoYW4sICJvbkVuZCIsIHRoaXMsIGZ1bmN0aW9uICgpIHsKICAgICAgICAg
ICAgZG9qby5hZGRDbGFzcyh0aGlzLl9kb21Db250YWluZXIsIHRoaXMuU1RBVEVfQ0xBU1MuTk9S
TUFMKTsKICAgICAgICAgICAgZG9qby5yZW1vdmVDbGFzcyh0aGlzLl9kb21Db250YWluZXIsIHRo
aXMuU1RBVEVfQ0xBU1MuT1ZFUik7CiAgICAgICAgfSk7CiAgICB9LAogICAgX2NyZWF0ZVBhbmVs
czogZnVuY3Rpb24gKGRvbU5vZGUpIHsKICAgICAgICB0aGlzLl9wYW5lbHMgPSBkai53aWRnZXQu
cGFuZWxzLlBhbmVsc0ZhY3RvcnkuY3JlYXRlKGRvbU5vZGUsIHsKICAgICAgICAgICAgY29yZTog
ewogICAgICAgICAgICAgICAgcGFuZWxHcm91cDogIi5zbF9jIiwKICAgICAgICAgICAgICAgIHBh
bmVsOiAiLnNsX2kiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGNhcm91c2VsOiB7CiAgICAg
ICAgICAgICAgICBuYXZDb250YWluZXI6ICIuYm94LWFycm93cyIsCiAgICAgICAgICAgICAgICBw
cmV2QnV0dG9uOiAiLnByZXYiLAogICAgICAgICAgICAgICAgbmV4dEJ1dHRvbjogIi5uZXh0Igog
ICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9LAogICAgX2Nvbm5lY3RDYXB0aW9uRXZlbnRz
OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGNhcHRpb25zID0gZG9qby5xdWVyeSgiLmNhcF9j
IiwgdGhpcy5fZG9tQ29udGFpbmVyKTsKICAgICAgICBpZiAoY2FwdGlvbnMubGVuZ3RoID09PSAw
KSB7CiAgICAgICAgICAgIHRoaXMuX2lzQ2FwdGlvbnNFbmFibGVkID0gZmFsc2U7CiAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY2FwdGlvbnMuY29ubmVjdCgib25jbGljayIs
IGRvam8uaGl0Y2godGhpcywgZnVuY3Rpb24gKGV2ZW50KSB7CiAgICAgICAgICAgIGRvam8uc3Rv
cEV2ZW50KGV2ZW50KTsKICAgICAgICAgICAgdGhpcy5zaG93Q2FwdGlvbigpOwogICAgICAgIH0p
KTsKICAgICAgICBkb2pvLmNvbm5lY3QoZG9qby5kb2MsICJvbmNsaWNrIiwgdGhpcywgdGhpcy5o
aWRlQ2FwdGlvbik7CiAgICAgICAgdGhpcy5fcGFuZWxzLmFkZENoYW5nZUxpc3RlbmVyKCJzdWNj
ZXNzIiwgdGhpcy5oaWRlQ2FwdGlvbiwgdGhpcyk7CiAgICB9LAogICAgX2Nvbm5lY3RMYXN0RnJh
bWVFdmVudHM6IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgbGFzdEZyYW1lID0gZG9qby5xdWVy
eSgiLnNsX2VuZCIsIHRoaXMuX2RvbUNvbnRhaW5lcik7CiAgICAgICAgaWYgKGxhc3RGcmFtZS5s
ZW5ndGggPT09IDApIHsKICAgICAgICAgICAgdGhpcy5faXNMYXN0RnJhbWVFbmFibGVkID0gZmFs
c2U7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdGhpcy5fcGFuZWxzLmFk
ZENoYW5nZUxpc3RlbmVyKCJzdWNjZXNzIiwgdGhpcy5faGlkZUxhc3RGcmFtZSwgdGhpcyk7CiAg
ICAgICAgdGhpcy5fcGFuZWxzLmFkZENoYW5nZUxpc3RlbmVyKCJmYWlsdXJlIiwgdGhpcy5fc2hv
d0xhc3RGcmFtZSwgdGhpcyk7CiAgICB9LAogICAgX2dldEN1cnJlbnRDYXB0aW9uOiBmdW5jdGlv
biAoKSB7CiAgICAgICAgdmFyIGFjdGl2ZVBhbmVsTW9kZWwgPSB0aGlzLl9wYW5lbHMubW9kZWwu
Z2V0QWN0aXZlKCksCiAgICAgICAgICAgIGFjdGl2ZVBhbmVsID0gdGhpcy5fcGFuZWxzLnZpZXdz
LnBhbmVscy5nZXRQYW5lbEJ5UG9zaXRpb24oYWN0aXZlUGFuZWxNb2RlbC5nZXRQb3NpdGlvbigp
KTsKICAgICAgICByZXR1cm4gZG9qby5xdWVyeSgiLmNhcF9sIiwgYWN0aXZlUGFuZWwuZ2V0RWxl
bWVudCgpKVswXTsKICAgIH0sCiAgICBfc2hvd0xhc3RGcmFtZTogZnVuY3Rpb24gKCkgewogICAg
ICAgIGRvam8ucmVtb3ZlQ2xhc3ModGhpcy5fZG9tQ29udGFpbmVyLCB0aGlzLlNUQVRFX0NMQVNT
Lk5PUk1BTCk7CiAgICAgICAgZG9qby5hZGRDbGFzcyh0aGlzLl9kb21Db250YWluZXIsIHRoaXMu
U1RBVEVfQ0xBU1MuRU5EKTsKICAgIH0sCiAgICBfaGlkZUxhc3RGcmFtZTogZnVuY3Rpb24gKCkg
ewogICAgICAgIGlmIChkb2pvLmhhc0NsYXNzKHRoaXMuX2RvbUNvbnRhaW5lciwgdGhpcy5TVEFU
RV9DTEFTUy5FTkQpKSB7CiAgICAgICAgICAgIGRvam8uYWRkQ2xhc3ModGhpcy5fZG9tQ29udGFp
bmVyLCB0aGlzLlNUQVRFX0NMQVNTLk5PUk1BTCk7CiAgICAgICAgICAgIGRvam8ucmVtb3ZlQ2xh
c3ModGhpcy5fZG9tQ29udGFpbmVyLCB0aGlzLlNUQVRFX0NMQVNTLkVORCk7CiAgICAgICAgfQog
ICAgfQp9KTsKZG9qby5wcm92aWRlKCJkai5tb2R1bGUucGFuZWxzLmxpdmVTbGlkZXNob3ciKTsK
ZG9qby5yZXF1aXJlKCJkai51dGlsLmxpdmVXaWRnZXQiKTsKZG9qby5yZXF1aXJlKCJkai51dGls
LkVsZW1lbnQiKTsKZG9qby5yZXF1aXJlKCJkai53aWRnZXQucGFuZWxzLnByZWJ1aWx0LlNsaWRl
c2hvdyIpOwpkai5tb2R1bGUucGFuZWxzLmxpdmVTbGlkZXNob3cgPSB7CiAgICBpbml0OiBmdW5j
dGlvbiAodHlwZSkgewogICAgICAgIGlmICh0aGlzLl9pc0luaXQpIHsKICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgIH0KICAgICAgICB0aGlzLl9pc0luaXQgPSB0cnVlOwogICAgICAgIHRoaXMu
dHlwZSA9IHR5cGU7CiAgICAgICAgdGhpcy5fc2V0dXBMaXZlV2lkZ2V0KCk7CiAgICB9LAogICAg
ZGVzdHJveTogZnVuY3Rpb24gKCkgewogICAgICAgIGRqLnV0aWwubGl2ZVdpZGdldC51bnJlZ2lz
dGVyKCJwYW5lbHMuU2xpZGVzaG93Iik7CiAgICB9LAogICAgX3NldHVwTGl2ZVdpZGdldDogZnVu
Y3Rpb24gKCkgewogICAgICAgIGRqLnV0aWwubGl2ZVdpZGdldC5yZWdpc3RlcigicGFuZWxzLlNs
aWRlc2hvdyIsIGZ1bmN0aW9uIChsaXZlV2lkZ2V0LCBkYXRhc2V0KSB7CiAgICAgICAgICAgIGRv
am8uc3RvcEV2ZW50KGxpdmVXaWRnZXQuZXZlbnQpOwogICAgICAgICAgICB0aGlzLl9pbml0V2lk
Z2V0KGxpdmVXaWRnZXQsIGRhdGFzZXQpOwogICAgICAgIH0sIHRoaXMpOwogICAgfSwKICAgIF9p
bml0V2lkZ2V0OiBmdW5jdGlvbiAobGl2ZVdpZGdldCwgZGF0YXNldCkgewogICAgICAgIHZhciBp
ZCA9IGRqLnV0aWwuRWxlbWVudC5pZGVudGlmeShsaXZlV2lkZ2V0LmRvbU5vZGUpLAogICAgICAg
ICAgICBzbGlkZXNob3c7CiAgICAgICAgaWYgKHRoaXMudHlwZSAmJiB0aGlzLnR5cGUgPT09ICJB
cnRpY2xlIikgewogICAgICAgICAgICBzbGlkZXNob3cgPSBuZXcgZGoud2lkZ2V0LnBhbmVscy5w
cmVidWlsdC5BcnRpY2xlU2xpZGVzaG93KGlkKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICBzbGlkZXNob3cgPSBuZXcgZGoud2lkZ2V0LnBhbmVscy5wcmVidWlsdC5TbGlkZXNob3coaWQp
OwogICAgICAgIH0KICAgICAgICB2YXIgdGFyZ2V0ID0gbGl2ZVdpZGdldC5ldmVudC50YXJnZXQ7
CiAgICAgICAgdGhpcy5fdHJ5UG9zc2libGVJbml0RXZlbnRzKHRhcmdldCwgc2xpZGVzaG93KTsK
ICAgIH0sCiAgICBfdHJ5UG9zc2libGVJbml0RXZlbnRzOiBmdW5jdGlvbiAodGFyZ2V0LCBzbGlk
ZXNob3cpIHsKICAgICAgICB2YXIgaXMgPSBkai51dGlsLkVsZW1lbnQuaXNPcklzQ2hpbGRPZjsK
ICAgICAgICBpZiAoaXModGFyZ2V0LCAiLmNhcF9zIikpIHsKICAgICAgICAgICAgc2xpZGVzaG93
LnNob3dDYXB0aW9uKCk7CiAgICAgICAgfQogICAgICAgIGlmIChpcyh0YXJnZXQsICIubmV4dCIp
KSB7CiAgICAgICAgICAgIHNsaWRlc2hvdy5uZXh0U2xpZGUoKTsKICAgICAgICB9CiAgICAgICAg
aWYgKGlzKHRhcmdldCwgIi5wcmV2IikpIHsKICAgICAgICAgICAgc2xpZGVzaG93LnByZXZpb3Vz
U2xpZGUoKTsKICAgICAgICB9CiAgICB9Cn07CmRvam8ucHJvdmlkZSgiZGoud2lkZ2V0LnBhbmVs
cy52aXJ0dWFsLlRhYnMiKTsKZG9qby5yZXF1aXJlKCJkai53aWRnZXQucGFuZWxzLlBhbmVsc0Zh
Y3RvcnkiKTsKZG9qby5yZXF1aXJlKCJkai53aWRnZXQucGFuZWxzLmNvbnRyb2xsZXIuTmF2VGFi
cyIpOwpkb2pvLnJlcXVpcmUoImRqLndpZGdldC5wYW5lbHMudmlldy5QYW5lbCIpOwpkb2pvLnBy
b3ZpZGUoImRqLndpZGdldC5wYW5lbHMudmlydHVhbC5DYXJvdXNlbCIpOwpkb2pvLnJlcXVpcmUo
ImRqLndpZGdldC5wYW5lbHMuUGFuZWxzRmFjdG9yeSIpOwpkb2pvLnJlcXVpcmUoImRqLndpZGdl
dC5wYW5lbHMudmlldy5TbGlkZVBhbmVsIik7CmRvam8ucmVxdWlyZSgiZGoud2lkZ2V0LnBhbmVs
cy52aWV3Lk5hdkFycm93cyIpOwpkb2pvLnJlcXVpcmUoImRqLndpZGdldC5wYW5lbHMuY29udHJv
bGxlci5OYXZBcnJvd3MiKTsKZG9qby5wcm92aWRlKCJkai53aWRnZXQucGFuZWwuTGl2ZU1vZGFs
UGFuZWwiKTsKZG9qby5yZXF1aXJlKCJkai51dGlsLkVsZW1lbnQiKTsKKGZ1bmN0aW9uIChkamwp
IHsKICAgIChkai53aWRnZXQucGFuZWwuTGl2ZU1vZGFsUGFuZWwgPSBmdW5jdGlvbiAoY2ZnKSB7
CiAgICAgICAgdGhpcy5jZmcgPSBkamwuY2xvbmVNaXhpbih0aGlzLkRFRkFVTFRfQ09ORklHLCBj
ZmcpOwogICAgICAgIHRoaXMuX3NldHVwRXZlbnRzKCk7CiAgICB9KS5wcm90b3R5cGUgPSB7CiAg
ICAgICAgREVGQVVMVF9DT05GSUc6IHsKICAgICAgICAgICAgY29udGFpbmVyOiAiLmxpbmtsaXN0
X2Ryb3Bkb3duIC5tbl9kcm9wZG93bl9jb250YWluZXIiLAogICAgICAgICAgICBjb250YWluZXJJ
bmQ6ICIubGlua2xpc3RfZHJvcGRvd24gLm1uX2Ryb3Bkb3duX2NvbnRhaW5lciIsCiAgICAgICAg
ICAgIGRyb3Bkb3duQ29udGVudDogIi5tbl9kcm9wZG93blBhbmVsID4gLm1uX2Ryb3Bkb3duQ29u
dGVudCIsCiAgICAgICAgICAgIGFjdGlvbkV2ZW50OiAiY2xpY2siLAogICAgICAgICAgICBzdGF0
ZUNvbnRhaW5lcjogIi5tbl9kcm9wZG93blRyZWUiLAogICAgICAgICAgICBzdGF0ZUNvbGxhcHNl
ZDogIm1uX2RkU3RhdGUtY29sbGFwc2VkIiwKICAgICAgICAgICAgc3RhdGVFeHBhbmRlZDogIm1u
X2RkU3RhdGUtZXhwYW5kZWQiLAogICAgICAgICAgICBuYXZDb250YWluZXI6ICIucG1NYWluTmF2
IiwKICAgICAgICAgICAgc3RhdGVIb3ZlcjogIm1uZGRfZGRTdGF0ZS1ob3ZlciAiLAogICAgICAg
ICAgICBxdWVyeVVwQ2xhc3M6ICJtbl9kcm9wZG93blRyZWUiLAogICAgICAgICAgICBhZGRNb3Vz
ZUV2ZW50czogZmFsc2UKICAgICAgICB9LAogICAgICAgIHByZXZBY3RpdmVQYW5lbDogdW5kZWZp
bmVkLAogICAgICAgIG5hdk9wZW5lZDogZmFsc2UsCiAgICAgICAgX3NldHVwRXZlbnRzOiBmdW5j
dGlvbiAoKSB7CiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpczsKICAgICAgICAgICAgaWYgKHRo
aXMuY2ZnLmFkZE1vdXNlRXZlbnRzKSB7CiAgICAgICAgICAgICAgICBkamwuYWRkTGl2ZUV2ZW50
KHRoaXMuY2ZnLmNvbnRhaW5lciwgIm1vdXNlb3ZlciIsIGZ1bmN0aW9uIChldikgewogICAgICAg
ICAgICAgICAgICAgIHRoYXQubW91c2VPdmVyT3V0KHRoaXMsIGV2KTsKICAgICAgICAgICAgICAg
IH0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGRqbC5hZGRMaXZlRXZlbnQodGhpcy5jZmcu
Y29udGFpbmVySW5kLCB0aGlzLmNmZy5hY3Rpb25FdmVudCwgZnVuY3Rpb24gKGV2KSB7CiAgICAg
ICAgICAgICAgICB2YXIgbm9kZSA9IHRoYXQuX3F1ZXJ5VXBGb3JDbGFzc05hbWUodGhpcywgdGhh
dC5jZmcucXVlcnlVcENsYXNzKTsKICAgICAgICAgICAgICAgIHRoYXQudG9nZ2xlUGFuZWwobm9k
ZSwgZXYpOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgaWYgKHRoaXMuY2ZnLmFkZE1vdXNl
RXZlbnRzKSB7CiAgICAgICAgICAgICAgICBkamwuYWRkTGl2ZUV2ZW50KHRoaXMuY2ZnLmNvbnRh
aW5lciwgIm1vdXNlb3V0IiwgZnVuY3Rpb24gKGV2KSB7CiAgICAgICAgICAgICAgICAgICAgdGhh
dC5tb3VzZU92ZXJPdXQodGhpcywgZXYpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAg
IH0KICAgICAgICAgICAgdGhpcy5vRHJvcGRvd25Db250YWluZXIgPSBkb2pvLnF1ZXJ5KHRoaXMu
Y2ZnLm5hdkNvbnRhaW5lcilbMF07CiAgICAgICAgICAgIGRvam8uY29ubmVjdChkb2N1bWVudCwg
J29uY2xpY2snLCBmdW5jdGlvbiAoZXYpIHsKICAgICAgICAgICAgICAgIGlmIChldi50YXJnZXQu
bm9kZU5hbWUgPT0gIkEiKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAodGhhdC5wcmV2QWN0aXZlUGFuZWwgIT09
IHVuZGVmaW5lZCAmJiB0aGF0Lm5hdk9wZW5lZCA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAg
ICAgIHZhciBkcm9wZCA9IGRvam8ucXVlcnkodGhhdC5jZmcuZHJvcGRvd25Db250ZW50LCB0aGF0
LnByZXZBY3RpdmVQYW5lbClbMF07CiAgICAgICAgICAgICAgICAgICAgaWYgKGRyb3BkICE9PSB1
bmRlZmluZWQgJiYgIWRqLnV0aWwuRWxlbWVudC5jb250YWlucyhkcm9wZCwgZXYuY2xpZW50WCwg
ZXYuY2xpZW50WSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC50b2dnbGVQYW5lbChk
cm9wZCwgZXYpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGF0Lm5hdk9wZW5lZCA9IGZhbHNl
OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7
CiAgICAgICAgfSwKICAgICAgICBfcXVlcnlVcEZvckNsYXNzTmFtZTogZnVuY3Rpb24gKG5vZGUs
IGNuKSB7CiAgICAgICAgICAgIGlmIChub2RlLmNsYXNzTmFtZS5pbmRleE9mKGNuKSA9PSAtMSkg
ewogICAgICAgICAgICAgICAgd2hpbGUgKCh0eXBlb2Ygbm9kZSAhPT0gIm9iamVjdCIpIHx8IChu
dWxsID09PSBub2RlLmNsYXNzTmFtZSkgfHwgIW5vZGUuY2xhc3NOYW1lIHx8IChub2RlLmNsYXNz
TmFtZS5pbmRleE9mKGNuKSAhPT0gMCkpIHsKICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9k
ZS5wYXJlbnROb2RlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAg
IHJldHVybiBub2RlOwogICAgICAgIH0sCiAgICAgICAgdG9nZ2xlUGFuZWw6IGZ1bmN0aW9uIChk
cm9wZCwgZXZlbnQpIHsKICAgICAgICAgICAgdmFyIGNmZyA9IHRoaXMuY2ZnOwogICAgICAgICAg
ICBpZiAoZG9qby5oYXNDbGFzcyhkcm9wZCwgY2ZnLnN0YXRlQ29sbGFwc2VkKSkgewogICAgICAg
ICAgICAgICAgZG9qby5yZW1vdmVDbGFzcyhkcm9wZCwgY2ZnLnN0YXRlQ29sbGFwc2VkKTsKICAg
ICAgICAgICAgICAgIGRvam8uYWRkQ2xhc3MoZHJvcGQsIGNmZy5zdGF0ZUV4cGFuZGVkKTsKICAg
ICAgICAgICAgICAgIHRoaXMubmF2T3BlbmVkID0gdHJ1ZTsKICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgIGRvam8ucmVtb3ZlQ2xhc3MoZHJvcGQsIGNmZy5zdGF0ZUV4cGFuZGVk
KTsKICAgICAgICAgICAgICAgIGRvam8uYWRkQ2xhc3MoZHJvcGQsIGNmZy5zdGF0ZUNvbGxhcHNl
ZCk7CiAgICAgICAgICAgICAgICB0aGlzLm5hdk9wZW5lZCA9IGZhbHNlOwogICAgICAgICAgICB9
CiAgICAgICAgICAgIGlmICh0aGlzLnByZXZBY3RpdmVQYW5lbCAhPT0gdW5kZWZpbmVkICYmIHRo
aXMucHJldkFjdGl2ZVBhbmVsICE9IGRyb3BkKSB7CiAgICAgICAgICAgICAgICBkb2pvLnJlbW92
ZUNsYXNzKHRoaXMucHJldkFjdGl2ZVBhbmVsLCBjZmcuc3RhdGVFeHBhbmRlZCk7CiAgICAgICAg
ICAgICAgICBkb2pvLmFkZENsYXNzKHRoaXMucHJldkFjdGl2ZVBhbmVsLCBjZmcuc3RhdGVDb2xs
YXBzZWQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMucHJldkFjdGl2ZVBhbmVsID0g
ZHJvcGQ7CiAgICAgICAgICAgIGRvam8uc3RvcEV2ZW50KGV2ZW50KTsKICAgICAgICB9LAogICAg
ICAgIG1vdXNlT3Zlck91dDogZnVuY3Rpb24gKGVsbSwgZXYpIHsKICAgICAgICAgICAgdmFyIGNm
ZyA9IHRoaXMuY2ZnLAogICAgICAgICAgICAgICAgZHJvcGQgPSBkb2pvLnF1ZXJ5KGNmZy5zdGF0
ZUNvbnRhaW5lciwgZWxtKVswXTsKICAgICAgICAgICAgaWYgKGRyb3BkICE9PSB1bmRlZmluZWQp
IHsKICAgICAgICAgICAgICAgIGlmIChldi50eXBlID09ICJtb3VzZW92ZXIiKSB7CiAgICAgICAg
ICAgICAgICAgICAgZG9qby5hZGRDbGFzcyhkcm9wZCwgY2ZnLnN0YXRlSG92ZXIpOwogICAgICAg
ICAgICAgICAgfSBlbHNlIGlmIChldi50eXBlID09ICJtb3VzZW91dCIpIHsKICAgICAgICAgICAg
ICAgICAgICBkb2pvLnJlbW92ZUNsYXNzKGRyb3BkLCBjZmcuc3RhdGVIb3Zlcik7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Owp9KGRqLmxhbmcpKTsKZG9q
by5wcm92aWRlKCJkai53aWRnZXQucGFuZWwuVG9vbHRpcCIpOwpkb2pvLnJlcXVpcmUoImRqLmxh
bmciKTsKZG9qby5yZXF1aXJlKCJkai51dGlsLlF1ZXJ5Iik7CmRvam8uZGVjbGFyZSgiZGoud2lk
Z2V0LnBhbmVsLlRvb2x0aXAiLCBudWxsLCB7CiAgICBjb25zdHJ1Y3RvcjogZnVuY3Rpb24gKGNv
bnRhaW5lckNsYXNzLCB0aXBUYXJnZXRCb3gsIHRpcFRhcmdldCwgdG9vbHRpcEJveCwgY29udGFp
bmVyLCBoaWRlRGVsYXlJbk1pbGxpcykgewogICAgICAgIHRoaXMuX2RlbGF5ZWRNb3VzZU92ZXIo
dGlwVGFyZ2V0LCBkb2pvLmhpdGNoKHRoaXMsIGZ1bmN0aW9uIChub2RlKSB7CiAgICAgICAgICAg
IHRoaXMuaW5pdChjb250YWluZXJDbGFzcywgewogICAgICAgICAgICAgICAgZWxlbWVudHNDb250
YWluZXJDbGFzczogdGlwVGFyZ2V0Qm94LAogICAgICAgICAgICAgICAgdGFyZ2V0Q2xhc3M6IHRp
cFRhcmdldCwKICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzczogdG9vbHRpcEJveCwKICAgICAg
ICAgICAgICAgIGNvbnRhaW5lcjogY29udGFpbmVyLAogICAgICAgICAgICAgICAgaGlkZVRvb2x0
aXBEZWxheTogaGlkZURlbGF5SW5NaWxsaXMKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHRo
aXMuaXNJbml0aWFsaXplZCA9IHRydWU7CiAgICAgICAgICAgIHZhciB0dGIgPSBkai51dGlsLlF1
ZXJ5LnVwKG5vZGUsIHRpcFRhcmdldEJveCksCiAgICAgICAgICAgICAgICB0YiA9IGRvam8ucXVl
cnkodG9vbHRpcEJveCwgdHRiKVswXTsKICAgICAgICAgICAgdGhpcy5zaG93VG9vbHRpcCh0Yik7
CiAgICAgICAgfSksIDIwMCk7CiAgICB9LAogICAgX2RlbGF5ZWRNb3VzZU92ZXI6IGZ1bmN0aW9u
IChjb250YWluZXJDbGFzcywgZnVuYywgdGltZSkgewogICAgICAgIHZhciBkb0luaXQgPSBmYWxz
ZSwKICAgICAgICAgICAgaW5pdERlbGF5OwogICAgICAgIHZhciBvdXRFdmVudCA9IGRqLmxhbmcu
YWRkTGl2ZUV2ZW50KGNvbnRhaW5lckNsYXNzLCAibW91c2VvdXQiLCBmdW5jdGlvbiAoKSB7CiAg
ICAgICAgICAgIGRvSW5pdCA9IGZhbHNlOwogICAgICAgIH0pOwogICAgICAgIHZhciBvdmVyRXZl
bnQgPSBkai5sYW5nLmFkZExpdmVFdmVudChjb250YWluZXJDbGFzcywgIm1vdXNlb3ZlciIsIGZ1
bmN0aW9uICgpIHsKICAgICAgICAgICAgaWYgKGluaXREZWxheSkgewogICAgICAgICAgICAgICAg
Y2xlYXJUaW1lb3V0KGluaXREZWxheSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZG9Jbml0
ID0gdHJ1ZTsKICAgICAgICAgICAgdmFyIGVsbSA9IHRoaXM7CiAgICAgICAgICAgIGluaXREZWxh
eSA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgaWYgKCFkb0luaXQp
IHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICBkai5sYW5nLnJlbW92ZUxpdmVFdmVudChvdmVyRXZlbnQpOwogICAgICAgICAgICAg
ICAgZGoubGFuZy5yZW1vdmVMaXZlRXZlbnQob3V0RXZlbnQpOwogICAgICAgICAgICAgICAgZnVu
Yy5jYWxsKG51bGwsIGVsbSk7CiAgICAgICAgICAgIH0sIHRpbWUpOwogICAgICAgIH0pOwogICAg
fSwKICAgIERFRkFVTFRfQ09ORklHOiB7CiAgICAgICAgaGlkZVRvb2x0aXBEZWxheTogMTAwCiAg
ICB9LAogICAgaW5pdDogZnVuY3Rpb24gKGNvbnRhaW5lckNsYXNzLCBjb25maWcpIHsKICAgICAg
ICB0aGlzLmV2ZW50UG9pbnRlckxpc3QgPSBbXTsKICAgICAgICB0aGlzLmNvbnRhaW5lckNsYXNz
ID0gY29udGFpbmVyQ2xhc3M7CiAgICAgICAgdGhpcy5jZmcgPSBkai5sYW5nLmNsb25lTWl4aW4o
dGhpcy5ERUZBVUxUX0NPTkZJRywgY29uZmlnKTsKICAgICAgICB0aGlzLl9zZXR1cFRvb2x0aXBz
KCk7CiAgICB9LAogICAgX3NldHVwVG9vbHRpcHM6IGZ1bmN0aW9uICgpIHsKICAgICAgICB0aGlz
Lm9Db250YWluZXIgPSAodGhpcy5jZmcuY29udGFpbmVyID8gZG9qby5ieUlkKHRoaXMuY2ZnLmNv
bnRhaW5lcikgOiB0aGlzLmNmZy5jb250YWluZXIpOwogICAgICAgIHRoaXMub1Rvb2x0aXBDb250
YWluZXJzID0gKCh0eXBlb2YgdGhpcy5vQ29udGFpbmVyICE9PSAndW5kZWZpbmVkJykgJiYgKHRo
aXMub0NvbnRhaW5lciAhPT0gbnVsbCkpID8gZG9qby5xdWVyeSh0aGlzLmNvbnRhaW5lckNsYXNz
LCB0aGlzLm9Db250YWluZXIpIDogZG9qby5xdWVyeSh0aGlzLmNvbnRhaW5lckNsYXNzKTsKICAg
ICAgICB0aGlzLm9Ub29sdGlwQ29udGFpbmVycy5mb3JFYWNoKGRvam8uaGl0Y2godGhpcywgZnVu
Y3Rpb24gKG9Ub29sdGlwQ29udGFpbmVyKSB7CiAgICAgICAgICAgIHZhciBvVG9vbHRpcEVsZW1l
bnRzQ29udGFpbmVyID0gZG9qby5xdWVyeSh0aGlzLmNmZy5lbGVtZW50c0NvbnRhaW5lckNsYXNz
LCBvVG9vbHRpcENvbnRhaW5lcilbMF0sCiAgICAgICAgICAgICAgICBvVG9vbHRpcFRhcmdldCA9
IGRvam8ucXVlcnkodGhpcy5jZmcudGFyZ2V0Q2xhc3MsIG9Ub29sdGlwQ29udGFpbmVyKVswXSwK
ICAgICAgICAgICAgICAgIG9Ub29sdGlwID0gZG9qby5xdWVyeSh0aGlzLmNmZy50b29sdGlwQ2xh
c3MsIG9Ub29sdGlwQ29udGFpbmVyKVswXTsKICAgICAgICAgICAgaWYgKCEoKHR5cGVvZiBvVG9v
bHRpcEVsZW1lbnRzQ29udGFpbmVyICE9PSAndW5kZWZpbmVkJykgJiYgKG9Ub29sdGlwRWxlbWVu
dHNDb250YWluZXIgIT09IG51bGwpICYmICh0eXBlb2Ygb1Rvb2x0aXBUYXJnZXQgIT09ICd1bmRl
ZmluZWQnKSAmJiAob1Rvb2x0aXBUYXJnZXQgIT09IG51bGwpICYmICh0eXBlb2Ygb1Rvb2x0aXAg
IT09ICd1bmRlZmluZWQnKSAmJiAob1Rvb2x0aXAgIT09IG51bGwpKSkgewogICAgICAgICAgICAg
ICAgY29uc29sZS5sb2coIntUb29sdGlwfSBvVG9vbHRpcFRhcmdldCBvciBvVG9vbHRpcCBpcyBu
b3QgZGVmaW5lZCBmb3IgdG9vbHRpcCBjb250YWluZXIiKTsKICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgdGlwVGFyZ2V0ID0gZG9qby5xdWVyeSh0
aGlzLmNmZy50YXJnZXRDbGFzcywgb1Rvb2x0aXBFbGVtZW50c0NvbnRhaW5lcilbMF07CiAgICAg
ICAgICAgIGlmICgodHlwZW9mIHRpcFRhcmdldCA9PT0gJ3VuZGVmaW5lZCcpIHx8ICh0aXBUYXJn
ZXQgPT09IG51bGwpKSB7CiAgICAgICAgICAgICAgICBkb2pvLnBsYWNlKG9Ub29sdGlwRWxlbWVu
dHNDb250YWluZXIsIG9Ub29sdGlwVGFyZ2V0LCAiYmVmb3JlIik7CiAgICAgICAgICAgICAgICBk
b2pvLnBsYWNlKG9Ub29sdGlwVGFyZ2V0LCBvVG9vbHRpcCwgImFmdGVyIik7CiAgICAgICAgICAg
IH0KICAgICAgICAgICAgdmFyIHRvb2x0aXBWaXNpYmxlRmxhZyA9IGZhbHNlOwogICAgICAgICAg
ICB2YXIgc2hvd1Rvb2x0aXBMaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAg
ICAgICB0b29sdGlwVmlzaWJsZUZsYWcgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIHRoaXMu
c2hvd1Rvb2x0aXAob1Rvb2x0aXApOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgdmFy
IGhpZGVUb29sdGlwTGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAg
dG9vbHRpcFZpc2libGVGbGFnID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91
dChkb2pvLmhpdGNoKHRoaXMsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHRvb2x0aXBWaXNpYmxlRmxhZyA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMuaGlkZVRvb2x0aXAob1Rvb2x0aXApOwogICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgfSksIHRoaXMuY2ZnLmhpZGVUb29sdGlwRGVsYXkpOwog
ICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgdGhpcy5ldmVudFBvaW50ZXJMaXN0LnB1c2go
ZG9qby5jb25uZWN0KG9Ub29sdGlwVGFyZ2V0LCAib25tb3VzZW92ZXIiLCBkb2pvLmhpdGNoKHRo
aXMsIHNob3dUb29sdGlwTGlzdGVuZXIpKSk7CiAgICAgICAgICAgIHRoaXMuZXZlbnRQb2ludGVy
TGlzdC5wdXNoKGRvam8uY29ubmVjdChvVG9vbHRpcFRhcmdldCwgIm9ubW91c2VvdXQiLCBkb2pv
LmhpdGNoKHRoaXMsIGhpZGVUb29sdGlwTGlzdGVuZXIpKSk7CiAgICAgICAgICAgIHRoaXMuZXZl
bnRQb2ludGVyTGlzdC5wdXNoKGRvam8uY29ubmVjdChvVG9vbHRpcCwgIm9ubW91c2VvdmVyIiwg
ZG9qby5oaXRjaCh0aGlzLCBzaG93VG9vbHRpcExpc3RlbmVyKSkpOwogICAgICAgICAgICB0aGlz
LmV2ZW50UG9pbnRlckxpc3QucHVzaChkb2pvLmNvbm5lY3Qob1Rvb2x0aXAsICJvbm1vdXNlb3V0
IiwgZG9qby5oaXRjaCh0aGlzLCBoaWRlVG9vbHRpcExpc3RlbmVyKSkpOwogICAgICAgIH0pKTsK
ICAgIH0sCiAgICBzaG93VG9vbHRpcDogZnVuY3Rpb24gKG9Ub29sdGlwKSB7CiAgICAgICAgZG9q
by5zdHlsZShvVG9vbHRpcCwgewogICAgICAgICAgICBkaXNwbGF5OiAiYmxvY2siCiAgICAgICAg
fSk7CiAgICB9LAogICAgaGlkZVRvb2x0aXA6IGZ1bmN0aW9uIChvVG9vbHRpcCkgewogICAgICAg
IGRvam8uc3R5bGUob1Rvb2x0aXAsIHsKICAgICAgICAgICAgZGlzcGxheTogIm5vbmUiCiAgICAg
ICAgfSk7CiAgICB9LAogICAgZGVzdHJ1Y3RvcjogZnVuY3Rpb24gKCkgewogICAgICAgIGlmICgh
dGhpcy5pc0luaXRpYWxpemVkKSB7CiAgICAgICAgICAgIGNvbnNvbGUud2Fybigie2RqLndpZGdl
dC5wYW5lbC5Ub29sdGlwfSBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0Iik7CiAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdGhpcy5vQ29udGFpbmVyID0gbnVsbDsKICAg
ICAgICB0aGlzLm9Ub29sdGlwQ29udGFpbmVycyA9IG51bGw7CiAgICAgICAgZm9yICh2YXIgaSA9
IDAsIGxlbiA9IHRoaXMuZXZlbnRQb2ludGVyTGlzdC5sZW5ndGg7IGkgPCBsZW47IGkrKykgewog
ICAgICAgICAgICBkb2pvLmRpc2Nvbm5lY3QodGhpcy5ldmVudFBvaW50ZXJMaXN0W2ldKTsKICAg
ICAgICAgICAgZGVsZXRlIHRoaXMuZXZlbnRQb2ludGVyTGlzdFtpXTsKICAgICAgICB9CiAgICB9
LAogICAgcmVmcmVzaFRvb2x0aXBzOiBmdW5jdGlvbiAoY29udGFpbmVyKSB7CiAgICAgICAgaWYg
KCF0aGlzLmlzSW5pdGlhbGl6ZWQpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAg
ICAgICB0aGlzLmRlc3RydWN0b3IoKTsKICAgICAgICB0aGlzLl9zZXR1cFRvb2x0aXBzKCk7CiAg
ICB9Cn0pOwpkb2pvLnByb3ZpZGUoImRqLndpZGdldC5wYW5lbC5Nb2RhbFBhbmVsIik7CmRvam8u
cmVxdWlyZSgiZGoudXRpbC5Db25maWciKTsKZG9qby5yZXF1aXJlKCJkai51dGlsLkVsZW1lbnQi
KTsKZG9qby5yZXF1aXJlKCJkai51dGlsLk9ic2VydmVyIik7Cihkai53aWRnZXQucGFuZWwuTW9k
YWxQYW5lbCA9IGZ1bmN0aW9uIChtb2RhbElkLCBtb2RhbENvbnRhaW5lciwgY29uZmlnKSB7CiAg
ICB0aGlzLm9Nb2RhbElkID0gZG9qby5ieUlkKG1vZGFsSWQpOwogICAgaWYgKCF0aGlzLm9Nb2Rh
bElkKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJ7ZGoud2lkZ2V0LnBhbmVsLk1vZGFsUGFu
ZWx9IG1vZGFsLWlkIGlzIG51bGwgb3IgdW5kZWZpbmVkIik7CiAgICB9CiAgICB0aGlzLm9Nb2Rh
bENvbnRhaW5lciA9IGRvam8uYnlJZChtb2RhbENvbnRhaW5lcik7CiAgICBpZiAoIXRoaXMub01v
ZGFsQ29udGFpbmVyKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJ7ZGoud2lkZ2V0LnBhbmVs
Lk1vZGFsUGFuZWx9IG1vZGFsLWNvbnRhaW5lciBpcyBudWxsIG9yIHVuZGVmaW5lZCIpOwogICAg
fQogICAgdGhpcy5vYnNlcnZlT3Blbk1vZGFsUGFuZWwgPSBuZXcgZGoudXRpbC5PYnNlcnZlcigp
OwogICAgdGhpcy5vYnNlcnZlQ2xvc2VNb2RhbFBhbmVsID0gbmV3IGRqLnV0aWwuT2JzZXJ2ZXIo
KTsKICAgIHRoaXMuY2ZnID0gbmV3IGRqLnV0aWwuQ29uZmlnKHRoaXMpOwogICAgdGhpcy5fc2V0
dXBDb25maWcoKTsKICAgIGlmIChjb25maWcpIHsKICAgICAgICB0aGlzLmNmZy5hcHBseUNvbmZp
Zyhjb25maWcsIHRydWUpOwogICAgfQogICAgdGhpcy5jZmcuZmlyZVF1ZXVlKCk7CiAgICBpZiAo
dGhpcy5vTW9kYWxJZCA9PT0gbnVsbCkgewogICAgICAgIHRoaXMuX3NldHVwVGFyZ2V0bGVzc01v
ZGFsUGFuZWwodGhpcy5vTW9kYWxDb250YWluZXIpOwogICAgfSBlbHNlIHsKICAgICAgICB0aGlz
Ll9zZXR1cE1vZGFsUGFuZWwodGhpcy5vTW9kYWxJZCwgdGhpcy5vTW9kYWxDb250YWluZXIpOwog
ICAgfQp9KS5wcm90b3R5cGUgPSB7CiAgICBERUZBVUxUX0NPTkZJRzogewogICAgICAgIE9QRU5f
TU9EQUxfUEFORUxfRVZFTlRfT1BUSU9OOiB7CiAgICAgICAgICAgIGtleTogIm9wZW5Nb2RhbFBh
bmVsRXZlbnQiLAogICAgICAgICAgICB2YWx1ZTogIm1vdXNlb3ZlciIKICAgICAgICB9LAogICAg
ICAgIENMT1NFX01PREFMX1BBTkVMX0VWRU5UX09QVElPTjogewogICAgICAgICAgICBrZXk6ICJj
bG9zZU1vZGFsUGFuZWxFdmVudCIsCiAgICAgICAgICAgIHZhbHVlOiAibW91c2VvdXQiCiAgICAg
ICAgfSwKICAgICAgICBDTE9TRV9NT0RBTF9QQU5FTF9CVVRUT05fU0VMRUNUT1I6IHsKICAgICAg
ICAgICAga2V5OiAiY2xvc2VNb2RhbFBhbmVsQnV0dG9uU2VsZWN0b3IiLAogICAgICAgICAgICB2
YWx1ZTogbnVsbAogICAgICAgIH0sCiAgICAgICAgQ0xPU0VfTU9EQUxfUEFORUxfRVZFTlRfRk9S
X0JVVFRPTl9TRUxFQ1RPUjogewogICAgICAgICAgICBrZXk6ICJjbG9zZU1vZGFsUGFuZWxFdmVu
dEZvckJ1dHRvblNlbGVjdG9yIiwKICAgICAgICAgICAgdmFsdWU6IG51bGwKICAgICAgICB9CiAg
ICB9LAogICAgX3NldHVwTW9kYWxQYW5lbDogZnVuY3Rpb24gKG9Nb2RhbElkLCBvTW9kYWxDb250
YWluZXIpIHsKICAgICAgICBkb2pvLnN0eWxlKG9Nb2RhbENvbnRhaW5lciwgewogICAgICAgICAg
ICB2aXNpYmlsaXR5OiAiaGlkZGVuIgogICAgICAgIH0pOwogICAgICAgIHZhciBtb2RhbE9wZW5F
dmVudCA9IHRoaXMuY2ZnLmdldFByb3BlcnR5KHRoaXMuREVGQVVMVF9DT05GSUcuT1BFTl9NT0RB
TF9QQU5FTF9FVkVOVF9PUFRJT04ua2V5KTsKICAgICAgICB2YXIgbW9kYWxDbG9zZUV2ZW50ID0g
dGhpcy5jZmcuZ2V0UHJvcGVydHkodGhpcy5ERUZBVUxUX0NPTkZJRy5DTE9TRV9NT0RBTF9QQU5F
TF9FVkVOVF9PUFRJT04ua2V5KTsKICAgICAgICB2YXIgdGhhdCA9IHRoaXM7CiAgICAgICAgZG9q
by5jb25uZWN0KG9Nb2RhbElkLCAib24iICsgbW9kYWxPcGVuRXZlbnQsIHRoaXMsIGZ1bmN0aW9u
IChldmVudCkgewogICAgICAgICAgICBkb2pvLnN0b3BFdmVudChldmVudCk7CiAgICAgICAgICAg
IHRoaXMub3Blbk1vZGFsUGFuZWwoKTsKICAgICAgICB9KTsKICAgICAgICB2YXIgY2xvc2VNb2Rh
bFBhbmVsU2VsZWN0b3IgPSB0aGlzLmNmZy5nZXRQcm9wZXJ0eSh0aGlzLkRFRkFVTFRfQ09ORklH
LkNMT1NFX01PREFMX1BBTkVMX0JVVFRPTl9TRUxFQ1RPUi5rZXkpOwogICAgICAgIGlmIChjbG9z
ZU1vZGFsUGFuZWxTZWxlY3RvciAhPT0gbnVsbCkgewogICAgICAgICAgICB2YXIgY2xvc2VNb2Rh
bFBhbmVsQnV0dG9ucyA9IGRvam8ucXVlcnkoY2xvc2VNb2RhbFBhbmVsU2VsZWN0b3IsIG9Nb2Rh
bENvbnRhaW5lcik7CiAgICAgICAgICAgIHZhciBtb2RhbENsb3NlRXZlbnRGb3JCdXR0b25TZWxl
Y3RvciA9ICh0aGlzLmNmZy5nZXRQcm9wZXJ0eSh0aGlzLkRFRkFVTFRfQ09ORklHLkNMT1NFX01P
REFMX1BBTkVMX0VWRU5UX0ZPUl9CVVRUT05fU0VMRUNUT1Iua2V5KSAhPT0gbnVsbCkgPyB0aGlz
LmNmZy5nZXRQcm9wZXJ0eSh0aGlzLkRFRkFVTFRfQ09ORklHLkNMT1NFX01PREFMX1BBTkVMX0VW
RU5UX0ZPUl9CVVRUT05fU0VMRUNUT1Iua2V5KSA6IG1vZGFsQ2xvc2VFdmVudDsKICAgICAgICAg
ICAgY2xvc2VNb2RhbFBhbmVsQnV0dG9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvQ2xvc2VNb2RhbFBh
bmVsQnV0dG9uKSB7CiAgICAgICAgICAgICAgICBkb2pvLmNvbm5lY3Qob0Nsb3NlTW9kYWxQYW5l
bEJ1dHRvbiwgIm9uIiArIG1vZGFsQ2xvc2VFdmVudEZvckJ1dHRvblNlbGVjdG9yLCB0aGlzLCBm
dW5jdGlvbiAoZXZlbnQpIHsKICAgICAgICAgICAgICAgICAgICBkb2pvLnN0b3BFdmVudChldmVu
dCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZU1vZGFsUGFuZWwoKTsKICAgICAgICAg
ICAgICAgIH0pOwogICAgICAgICAgICB9LCB0aGlzKTsKICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICBkb2pvLmNvbm5lY3Qob01vZGFsQ29udGFpbmVyLCAib25tb3VzZW92ZXIiLCB0aGlzLCB0
aGlzLm9wZW5Nb2RhbFBhbmVsKTsKICAgICAgICAgICAgZG9qby5jb25uZWN0KG9Nb2RhbENvbnRh
aW5lciwgIm9uIiArIG1vZGFsQ2xvc2VFdmVudCwgdGhpcywgdGhpcy5jbG9zZU1vZGFsUGFuZWwp
OwogICAgICAgIH0KICAgICAgICBpZiAobW9kYWxDbG9zZUV2ZW50ID09ICdibHVyJykgewogICAg
ICAgICAgICBkb2pvLmNvbm5lY3QoZG9jdW1lbnQsICJvbmNsaWNrIiwgdGhpcywgZnVuY3Rpb24g
KGV2ZW50KSB7CiAgICAgICAgICAgICAgICB2YXIgaXNNb3VzZVBvaW50ZXJpbk1vZGFsQ29udGFp
bmVyID0gZGoudXRpbC5FbGVtZW50LmNvbnRhaW5zKG9Nb2RhbENvbnRhaW5lciwgZXZlbnQuY2xp
ZW50WCwgZXZlbnQuY2xpZW50WSk7CiAgICAgICAgICAgICAgICBpZiAoaXNNb3VzZVBvaW50ZXJp
bk1vZGFsQ29udGFpbmVyID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuY2xv
c2VNb2RhbFBhbmVsKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAg
IH0KICAgIH0sCiAgICBfc2V0dXBUYXJnZXRsZXNzTW9kYWxQYW5lbDogZnVuY3Rpb24gKG9Nb2Rh
bENvbnRhaW5lcikgewogICAgICAgIHZhciBtb2RhbENsb3NlRXZlbnQgPSB0aGlzLmNmZy5nZXRQ
cm9wZXJ0eSh0aGlzLkRFRkFVTFRfQ09ORklHLkNMT1NFX01PREFMX1BBTkVMX0VWRU5UX09QVElP
Ti5rZXkpOwogICAgICAgIHZhciBjbG9zZU1vZGFsUGFuZWxTZWxlY3RvciA9IHRoaXMuY2ZnLmdl
dFByb3BlcnR5KHRoaXMuREVGQVVMVF9DT05GSUcuQ0xPU0VfTU9EQUxfUEFORUxfQlVUVE9OX1NF
TEVDVE9SLmtleSk7CiAgICAgICAgdGhpcy5vcGVuTW9kYWxQYW5lbCgpOwogICAgICAgIHZhciB0
aGF0ID0gdGhpczsKICAgICAgICBpZiAoY2xvc2VNb2RhbFBhbmVsU2VsZWN0b3IgIT09IG51bGwp
IHsKICAgICAgICAgICAgdmFyIGNsb3NlTW9kYWxQYW5lbEJ1dHRvbnMgPSBkb2pvLnF1ZXJ5KGNs
b3NlTW9kYWxQYW5lbFNlbGVjdG9yLCBvTW9kYWxDb250YWluZXIpLmVhY2goZnVuY3Rpb24gKG9D
bG9zZU1vZGFsUGFuZWxCdXR0b24pIHsKICAgICAgICAgICAgICAgIGRvam8uY29ubmVjdChvQ2xv
c2VNb2RhbFBhbmVsQnV0dG9uLCAib24iICsgbW9kYWxDbG9zZUV2ZW50LCB0aGlzLCBmdW5jdGlv
biAoZXZlbnQpIHsKICAgICAgICAgICAgICAgICAgICBkb2pvLnN0b3BFdmVudChldmVudCk7CiAg
ICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZU1vZGFsUGFuZWwoKTsKICAgICAgICAgICAgICAg
IH0pOwogICAgICAgICAgICB9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBkb2pvLmNv
bm5lY3Qob0Nsb3NlTW9kYWxQYW5lbEJ1dHRvbiwgIm9uIiArIG1vZGFsQ2xvc2VFdmVudCwgdGhp
cywgdGhpcy5jbG9zZU1vZGFsUGFuZWwpOwogICAgICAgIH0KICAgIH0sCiAgICBvcGVuTW9kYWxQ
YW5lbDogZnVuY3Rpb24gKCkgewogICAgICAgIGRvam8uc3R5bGUodGhpcy5vTW9kYWxDb250YWlu
ZXIsIHsKICAgICAgICAgICAgdmlzaWJpbGl0eTogInZpc2libGUiCiAgICAgICAgfSk7CiAgICB9
LAogICAgY2xvc2VNb2RhbFBhbmVsOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgZG9qby5zdHlsZSh0
aGlzLm9Nb2RhbENvbnRhaW5lciwgewogICAgICAgICAgICB2aXNpYmlsaXR5OiAiaGlkZGVuIgog
ICAgICAgIH0pOwogICAgfSwKICAgIF9zZXR1cENvbmZpZzogZnVuY3Rpb24gKGNvbmZpZykgewog
ICAgICAgIHZhciBjZmcgPSB0aGlzLmNmZzsKICAgICAgICB2YXIgZGVmQ2ZnID0gdGhpcy5ERUZB
VUxUX0NPTkZJRzsKICAgICAgICBjZmcuYWRkUHJvcGVydHkoZGVmQ2ZnLk9QRU5fTU9EQUxfUEFO
RUxfRVZFTlRfT1BUSU9OLmtleSwgewogICAgICAgICAgICB2YWx1ZTogZGVmQ2ZnLk9QRU5fTU9E
QUxfUEFORUxfRVZFTlRfT1BUSU9OLnZhbHVlCiAgICAgICAgfSk7CiAgICAgICAgY2ZnLmFkZFBy
b3BlcnR5KGRlZkNmZy5DTE9TRV9NT0RBTF9QQU5FTF9FVkVOVF9PUFRJT04ua2V5LCB7CiAgICAg
ICAgICAgIHZhbHVlOiBkZWZDZmcuQ0xPU0VfTU9EQUxfUEFORUxfRVZFTlRfT1BUSU9OLnZhbHVl
CiAgICAgICAgfSk7CiAgICAgICAgY2ZnLmFkZFByb3BlcnR5KGRlZkNmZy5DTE9TRV9NT0RBTF9Q
QU5FTF9CVVRUT05fU0VMRUNUT1Iua2V5LCB7CiAgICAgICAgICAgIHZhbHVlOiBkZWZDZmcuQ0xP
U0VfTU9EQUxfUEFORUxfQlVUVE9OX1NFTEVDVE9SLnZhbHVlCiAgICAgICAgfSk7CiAgICAgICAg
Y2ZnLmFkZFByb3BlcnR5KGRlZkNmZy5DTE9TRV9NT0RBTF9QQU5FTF9FVkVOVF9GT1JfQlVUVE9O
X1NFTEVDVE9SLmtleSwgewogICAgICAgICAgICB2YWx1ZTogZGVmQ2ZnLkNMT1NFX01PREFMX1BB
TkVMX0VWRU5UX0ZPUl9CVVRUT05fU0VMRUNUT1IudmFsdWUKICAgICAgICB9KTsKICAgIH0KfTsK
ZG9qby5wcm92aWRlKCJkai53aWRnZXQucGFuZWwuU2VsZWN0RHJvcGRvd25QYW5lbCIpOwpkb2pv
LnJlcXVpcmUoImRqLnV0aWwuRWxlbWVudCIpOwpkb2pvLnJlcXVpcmUoImRqLmxhbmciKTsKZG9q
by5kZWNsYXJlKCJkai53aWRnZXQucGFuZWwuU2VsZWN0RHJvcGRvd25QYW5lbCIsIG51bGwsIHsK
ICAgIERFRkFVTFRfQ09ORklHOiB7CiAgICAgICAgc2Nyb2xsQ29udGFpbmVyQ2xhc3M6ICIuc2Ny
b2xsX2NvbnRhaW5lciIsCiAgICAgICAgc2Nyb2xsQmFyQ2xhc3M6ICIuc2Nyb2xsYmFyIiwKICAg
ICAgICBzY3JvbGxUcmFja0NsYXNzOiAiLnNjcm9sbGJhcl9jb250YWluZXIiLAogICAgICAgIHNj
cm9sbFZhbHVlc0NvbnRhaW5lckNsYXNzOiAiLnNjcm9sbF92YWx1ZXNfY29udGFpbmVyIiwKICAg
ICAgICBkcm9wZG93bkNvbGxhcHNlZENsYXNzTmFtZTogImRyb3Bkb3duX2NvbGxhcHNlZCIsCiAg
ICAgICAgZHJvcGRvd25FeHBhbmRlZENsYXNzTmFtZTogImRyb3Bkb3duX29wZW4iLAogICAgICAg
IHNjcm9sbENvbnRhaW5lckNvbGxhcHNlZENsYXNzTmFtZTogImNvbGxhcHNlZCIsCiAgICAgICAg
c2Nyb2xsQ29udGFpbmVyRXhwYW5kZWRDbGFzc05hbWU6ICJleHBhbmRlZCIsCiAgICAgICAgc2Vs
ZWN0ZWRDbGFzc05hbWU6ICIuc2VsZWN0ZWQiLAogICAgICAgIHNjcm9sbFRyYWNrQ29udGFpbmVy
Q2xhc3NOYW1lOiAiLnNjcm9sbF90cmFjayIsCiAgICAgICAgZHJvcGRvd25TY3JvbGxVcEFycm93
OiAiLnNjcm9sbF91cCIsCiAgICAgICAgZHJvcGRvd25TY3JvbGxEb3duQXJyb3c6ICIuc2Nyb2xs
X2Rvd24iLAogICAgICAgIHNjcm9sbFRyYWNrSGVpZ2h0OiAiMTU0IiwKICAgICAgICBzY3JvbGxW
YWx1ZXNEaXNwbGF5SGVpZ2h0OiAiMTkwIiwKICAgICAgICBzY3JvbGxCYXJBcnJvd1NoaWZ0VmFs
dWU6ICIyIgogICAgfSwKICAgIGNvbnN0cnVjdG9yOiBmdW5jdGlvbiAoc2VsZWN0RHJvcGRvd25D
b250YWluZXIsIGNvbmZpZykgewogICAgICAgIHRoaXMuY2ZnID0gZGoubGFuZy5jbG9uZU1peGlu
KHRoaXMuREVGQVVMVF9DT05GSUcsIGNvbmZpZyk7CiAgICAgICAgdmFyIHNjcm9sbEJhckNsYXNz
ID0gdGhpcy5jZmcuc2Nyb2xsQmFyQ2xhc3M7CiAgICAgICAgdmFyIHNjcm9sbFRyYWNrQ2xhc3Mg
PSB0aGlzLmNmZy5zY3JvbGxUcmFja0NsYXNzOwogICAgICAgIHZhciBzY3JvbGxDb250YWluZXJD
bGFzcyA9IHRoaXMuY2ZnLnNjcm9sbENvbnRhaW5lckNsYXNzOwogICAgICAgIHZhciBzY3JvbGxW
YWx1ZXNDb250YWluZXJDbGFzcyA9IHRoaXMuY2ZnLnNjcm9sbFZhbHVlc0NvbnRhaW5lckNsYXNz
OwogICAgICAgIHRoaXMub1NlbGVjdERyb3BEb3duQ29udGFpbmVyID0gZG9qby5ieUlkKHNlbGVj
dERyb3Bkb3duQ29udGFpbmVyKTsKICAgICAgICBpZiAodGhpcy5vU2VsZWN0RHJvcERvd25Db250
YWluZXIpIHsKICAgICAgICAgICAgdGhpcy5vU2Nyb2xsQmFyID0gZG9qby5xdWVyeShzY3JvbGxC
YXJDbGFzcywgdGhpcy5vU2VsZWN0RHJvcERvd25Db250YWluZXIpWzBdOwogICAgICAgICAgICB0
aGlzLm9TY3JvbGxUcmFjayA9IGRvam8ucXVlcnkoc2Nyb2xsVHJhY2tDbGFzcywgdGhpcy5vU2Vs
ZWN0RHJvcERvd25Db250YWluZXIpWzBdOwogICAgICAgICAgICB0aGlzLm9TY3JvbGxDb250YWlu
ZXIgPSBkb2pvLnF1ZXJ5KHNjcm9sbENvbnRhaW5lckNsYXNzLCB0aGlzLm9TZWxlY3REcm9wRG93
bkNvbnRhaW5lcilbMF07CiAgICAgICAgICAgIHRoaXMub1Njcm9sbFZhbHVlc0NvbnRhaW5lciA9
IGRvam8ucXVlcnkoc2Nyb2xsVmFsdWVzQ29udGFpbmVyQ2xhc3MsIHRoaXMub1NlbGVjdERyb3BE
b3duQ29udGFpbmVyKVswXTsKICAgICAgICAgICAgdGhpcy5fc2V0dXBTZWxlY3REcm9wZG93bih0
aGlzLm9TZWxlY3REcm9wRG93bkNvbnRhaW5lciwgdGhpcy5vU2Nyb2xsQ29udGFpbmVyLCB0aGlz
Lm9TY3JvbGxWYWx1ZXNDb250YWluZXIsIHRoaXMub1Njcm9sbEJhciwgdGhpcy5vU2Nyb2xsVHJh
Y2spOwogICAgICAgIH0KICAgIH0sCiAgICBfc2V0dXBTZWxlY3REcm9wZG93bjogZnVuY3Rpb24g
KG9TZWxlY3REcm9wZG93bkNvbnRhaW5lciwgb1Njcm9sbENvbnRhaW5lciwgb1Njcm9sbFZhbHVl
c0NvbnRhaW5lciwgb1Njcm9sbEJhciwgb1Njcm9sbFRyYWNrKSB7CiAgICAgICAgdmFyIHNlbGVj
dERyb3Bkb3duQ29sbGFwc2VkQ2xhc3NOYW1lID0gdGhpcy5jZmcuZHJvcGRvd25Db2xsYXBzZWRD
bGFzc05hbWU7CiAgICAgICAgdmFyIHNlbGVjdERyb3Bkb3duRXhwYW5kZWRDbGFzc05hbWUgPSB0
aGlzLmNmZy5kcm9wZG93bkV4cGFuZGVkQ2xhc3NOYW1lOwogICAgICAgIHZhciBzY3JvbGxDb250
YWluZXJDb2xsYXBzZWRDbGFzc05hbWUgPSB0aGlzLmNmZy5zY3JvbGxDb250YWluZXJDb2xsYXBz
ZWRDbGFzc05hbWU7CiAgICAgICAgdmFyIHNjcm9sbENvbnRhaW5lckV4cGFuZGVkQ2xhc3NOYW1l
ID0gdGhpcy5jZmcuc2Nyb2xsQ29udGFpbmVyRXhwYW5kZWRDbGFzc05hbWU7CiAgICAgICAgdmFy
IHNlbGVjdGVkQ2xhc3NOYW1lID0gdGhpcy5jZmcuc2VsZWN0ZWRDbGFzc05hbWU7CiAgICAgICAg
dGhpcy5vU2VsZWN0ZWQgPSBkb2pvLnF1ZXJ5KHNlbGVjdGVkQ2xhc3NOYW1lLCBvU2VsZWN0RHJv
cGRvd25Db250YWluZXIpWzBdOwogICAgICAgIHZhciB0b2dnbGVEcm9wZG93bkNsYXNzID0gZnVu
Y3Rpb24gKCkgewogICAgICAgICAgICAgICAgaWYgKGRvam8uaGFzQ2xhc3Mob1NlbGVjdERyb3Bk
b3duQ29udGFpbmVyLCBzZWxlY3REcm9wZG93bkNvbGxhcHNlZENsYXNzTmFtZSkpIHsKICAgICAg
ICAgICAgICAgICAgICBkb2pvLnJlbW92ZUNsYXNzKG9TZWxlY3REcm9wZG93bkNvbnRhaW5lciwg
c2VsZWN0RHJvcGRvd25Db2xsYXBzZWRDbGFzc05hbWUpOwogICAgICAgICAgICAgICAgICAgIGRv
am8uYWRkQ2xhc3Mob1NlbGVjdERyb3Bkb3duQ29udGFpbmVyLCBzZWxlY3REcm9wZG93bkV4cGFu
ZGVkQ2xhc3NOYW1lKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZG9qby5oYXNDbGFzcyhv
U2VsZWN0RHJvcGRvd25Db250YWluZXIsIHNlbGVjdERyb3Bkb3duRXhwYW5kZWRDbGFzc05hbWUp
KSB7CiAgICAgICAgICAgICAgICAgICAgZG9qby5yZW1vdmVDbGFzcyhvU2VsZWN0RHJvcGRvd25D
b250YWluZXIsIHNlbGVjdERyb3Bkb3duRXhwYW5kZWRDbGFzc05hbWUpOwogICAgICAgICAgICAg
ICAgICAgIGRvam8uYWRkQ2xhc3Mob1NlbGVjdERyb3Bkb3duQ29udGFpbmVyLCBzZWxlY3REcm9w
ZG93bkNvbGxhcHNlZENsYXNzTmFtZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICBpZiAoZG9qby5oYXNDbGFzcyhvU2Nyb2xsQ29udGFpbmVyLCBzY3JvbGxDb250YWluZXJDb2xs
YXBzZWRDbGFzc05hbWUpKSB7CiAgICAgICAgICAgICAgICAgICAgZG9qby5yZW1vdmVDbGFzcyhv
U2Nyb2xsQ29udGFpbmVyLCBzY3JvbGxDb250YWluZXJDb2xsYXBzZWRDbGFzc05hbWUpOwogICAg
ICAgICAgICAgICAgICAgIGRvam8uYWRkQ2xhc3Mob1Njcm9sbENvbnRhaW5lciwgc2Nyb2xsQ29u
dGFpbmVyRXhwYW5kZWRDbGFzc05hbWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkb2pv
Lmhhc0NsYXNzKG9TY3JvbGxDb250YWluZXIsIHNjcm9sbENvbnRhaW5lckV4cGFuZGVkQ2xhc3NO
YW1lKSkgewogICAgICAgICAgICAgICAgICAgIGRvam8ucmVtb3ZlQ2xhc3Mob1Njcm9sbENvbnRh
aW5lciwgc2Nyb2xsQ29udGFpbmVyRXhwYW5kZWRDbGFzc05hbWUpOwogICAgICAgICAgICAgICAg
ICAgIGRvam8uYWRkQ2xhc3Mob1Njcm9sbENvbnRhaW5lciwgc2Nyb2xsQ29udGFpbmVyQ29sbGFw
c2VkQ2xhc3NOYW1lKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKICAgICAgICBk
b2pvLmNvbm5lY3QodGhpcy5vU2VsZWN0ZWQsICJvbmNsaWNrIiwgdG9nZ2xlRHJvcGRvd25DbGFz
cyk7CiAgICAgICAgZG9qby5jb25uZWN0KG9TY3JvbGxWYWx1ZXNDb250YWluZXIsICJvbmNsaWNr
IiwgdG9nZ2xlRHJvcGRvd25DbGFzcyk7CiAgICAgICAgZG9qby5jb25uZWN0KGRvY3VtZW50LCAi
b25jbGljayIsIGZ1bmN0aW9uIChldmVudCkgewogICAgICAgICAgICB2YXIgaXNNb3VzZVBvaW50
ZXJpbk1vZGFsQ29udGFpbmVyID0gZGoudXRpbC5FbGVtZW50LmNvbnRhaW5zKG9TY3JvbGxDb250
YWluZXIsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpOwogICAgICAgICAgICBpZiAoaXNN
b3VzZVBvaW50ZXJpbk1vZGFsQ29udGFpbmVyID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAg
aWYgKGRvam8uaGFzQ2xhc3Mob1NlbGVjdERyb3Bkb3duQ29udGFpbmVyLCBzZWxlY3REcm9wZG93
bkV4cGFuZGVkQ2xhc3NOYW1lKSkgewogICAgICAgICAgICAgICAgICAgIGRvam8ucmVtb3ZlQ2xh
c3Mob1NlbGVjdERyb3Bkb3duQ29udGFpbmVyLCBzZWxlY3REcm9wZG93bkV4cGFuZGVkQ2xhc3NO
YW1lKTsKICAgICAgICAgICAgICAgICAgICBkb2pvLmFkZENsYXNzKG9TZWxlY3REcm9wZG93bkNv
bnRhaW5lciwgc2VsZWN0RHJvcGRvd25Db2xsYXBzZWRDbGFzc05hbWUpOwogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgaWYgKGRvam8uaGFzQ2xhc3Mob1Njcm9sbENvbnRhaW5lciwg
c2Nyb2xsQ29udGFpbmVyRXhwYW5kZWRDbGFzc05hbWUpKSB7CiAgICAgICAgICAgICAgICAgICAg
ZG9qby5yZW1vdmVDbGFzcyhvU2Nyb2xsQ29udGFpbmVyLCBzY3JvbGxDb250YWluZXJFeHBhbmRl
ZENsYXNzTmFtZSk7CiAgICAgICAgICAgICAgICAgICAgZG9qby5hZGRDbGFzcyhvU2Nyb2xsQ29u
dGFpbmVyLCBzY3JvbGxDb250YWluZXJDb2xsYXBzZWRDbGFzc05hbWUpOwogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgaWYgKG9TY3JvbGxCYXIgJiYg
b1Njcm9sbEJhciAhPT0gbnVsbCAmJiBvU2Nyb2xsVHJhY2sgJiYgb1Njcm9sbFRyYWNrICE9PSBu
dWxsKSB7CiAgICAgICAgICAgIGRvam8ucmVxdWlyZSgiZGoud2lkZ2V0LlNsaWRlciIpOwogICAg
ICAgICAgICB2YXIgbm9PZlZhbHVlcyA9IG9TY3JvbGxWYWx1ZXNDb250YWluZXIuY2hpbGRyZW4u
bGVuZ3RoOwogICAgICAgICAgICB2YXIgc2Nyb2xsVHJhY2tIZWlnaHQgPSBwYXJzZUludCh0aGlz
LmNmZy5zY3JvbGxUcmFja0hlaWdodCwgMTApOwogICAgICAgICAgICB2YXIgc2Nyb2xsVmFsdWVz
RGlzcGxheUhlaWdodCA9IHBhcnNlSW50KHRoaXMuY2ZnLnNjcm9sbFZhbHVlc0Rpc3BsYXlIZWln
aHQsIDEwKTsKICAgICAgICAgICAgdmFyIHNjcm9sbEJhckhlaWdodCA9IHBhcnNlSW50KChzY3Jv
bGxUcmFja0hlaWdodCAvIChub09mVmFsdWVzIC8gMTApKSwgMTApOwogICAgICAgICAgICBkb2pv
LnN0eWxlKG9TY3JvbGxCYXIsIHsKICAgICAgICAgICAgICAgIGhlaWdodDogc2Nyb2xsQmFySGVp
Z2h0ICsgInB4IgogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdmFyIHNjcm9sbFZhbHVlc1Rv
cFNoaWZ0RmFjdG9yID0gKHNjcm9sbFZhbHVlc0Rpc3BsYXlIZWlnaHQgLyBzY3JvbGxUcmFja0hl
aWdodCkgKiAobm9PZlZhbHVlcyAvIDEwKTsKICAgICAgICAgICAgdmFyIG1vdmVEcm9wRG93biA9
IGZ1bmN0aW9uICh2YWx1ZSkgewogICAgICAgICAgICAgICAgICAgIHZhciBzbGlkZXJQeCA9IHNs
aWRlci50cmFuc2xhdGVUb1B4KHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICB2YXIgc2xpZGVy
UHhWYWx1ZSA9IHNsaWRlclB4LnJlcGxhY2UoInB4IiwgIiIpOwogICAgICAgICAgICAgICAgICAg
IGRvam8uc3R5bGUob1Njcm9sbFZhbHVlc0NvbnRhaW5lciwgewogICAgICAgICAgICAgICAgICAg
ICAgICB0b3A6ICItIiArIHNsaWRlclB4VmFsdWUgKiBzY3JvbGxWYWx1ZXNUb3BTaGlmdEZhY3Rv
ciArICJweCIKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH07CiAgICAg
ICAgICAgIHZhciBzbGlkZXIgPSBuZXcgZGoud2lkZ2V0LlNsaWRlcihvU2Nyb2xsQmFyLCBvU2Ny
b2xsVHJhY2ssIHsKICAgICAgICAgICAgICAgIG9uU2xpZGU6IG1vdmVEcm9wRG93biwKICAgICAg
ICAgICAgICAgIG9uQ2hhbmdlOiBtb3ZlRHJvcERvd24sCiAgICAgICAgICAgICAgICBheGlzOiAn
dmVydGljYWwnCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB2YXIgc2Nyb2xsVHJhY2tDb250
YWluZXJDbGFzcyA9IHRoaXMuY2ZnLnNjcm9sbFRyYWNrQ29udGFpbmVyQ2xhc3NOYW1lOwogICAg
ICAgICAgICB0aGlzLm9TY3JvbGxUcmFja0NvbnRhaW5lciA9IGRvam8ucXVlcnkoc2Nyb2xsVHJh
Y2tDb250YWluZXJDbGFzcywgb1NlbGVjdERyb3Bkb3duQ29udGFpbmVyKVswXTsKICAgICAgICAg
ICAgdmFyIHNjcm9sbFVwQXJyb3dDbGFzcyA9IHRoaXMuY2ZnLmRyb3Bkb3duU2Nyb2xsVXBBcnJv
dzsKICAgICAgICAgICAgdmFyIHNjcm9sbERvd25BcnJvd0NsYXNzID0gdGhpcy5jZmcuZHJvcGRv
d25TY3JvbGxEb3duQXJyb3c7CiAgICAgICAgICAgIHRoaXMub1Njcm9sbFVwQXJyb3cgPSBkb2pv
LnF1ZXJ5KHNjcm9sbFVwQXJyb3dDbGFzcywgdGhpcy5vU2Nyb2xsVHJhY2tDb250YWluZXIpWzBd
OwogICAgICAgICAgICB0aGlzLm9TY3JvbGxEb3duQXJyb3cgPSBkb2pvLnF1ZXJ5KHNjcm9sbERv
d25BcnJvd0NsYXNzLCB0aGlzLm9TY3JvbGxUcmFja0NvbnRhaW5lcilbMF07CiAgICAgICAgICAg
IHZhciBzY3JvbGxBcnJvd1NoaWZ0VmFsdWUgPSBwYXJzZUludCh0aGlzLmNmZy5zY3JvbGxCYXJB
cnJvd1NoaWZ0VmFsdWUsIDEwKTsKICAgICAgICAgICAgdmFyIHNjcm9sbEJhclRvcFB4LCBzY3Jv
bGxCYXJUb3AsIHNsaWRlclZhbHVlOwogICAgICAgICAgICBkb2pvLmNvbm5lY3QodGhpcy5vU2Ny
b2xsVXBBcnJvdywgIm9uY2xpY2siLCBmdW5jdGlvbiAoZXZlbnQpIHsKICAgICAgICAgICAgICAg
IHNjcm9sbEJhclRvcCA9IGRvam8uc3R5bGUob1Njcm9sbEJhciwgInRvcCIpOwogICAgICAgICAg
ICAgICAgc2xpZGVyVmFsdWUgPSBzbGlkZXIudHJhbnNsYXRlVG9WYWx1ZShzY3JvbGxCYXJUb3Ag
LSBzY3JvbGxBcnJvd1NoaWZ0VmFsdWUpOwogICAgICAgICAgICAgICAgaWYgKHNjcm9sbEJhclRv
cCA+IDApIHsKICAgICAgICAgICAgICAgICAgICBzbGlkZXIuc2V0VmFsdWUoc2xpZGVyVmFsdWUp
OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgZG9qby5jb25u
ZWN0KHRoaXMub1Njcm9sbERvd25BcnJvdywgIm9uY2xpY2siLCBmdW5jdGlvbiAoZXZlbnQpIHsK
ICAgICAgICAgICAgICAgIHNjcm9sbEJhclRvcCA9IGRvam8uc3R5bGUob1Njcm9sbEJhciwgInRv
cCIpOwogICAgICAgICAgICAgICAgc2xpZGVyVmFsdWUgPSBzbGlkZXIudHJhbnNsYXRlVG9WYWx1
ZShzY3JvbGxCYXJUb3AgKyBzY3JvbGxBcnJvd1NoaWZ0VmFsdWUpOwogICAgICAgICAgICAgICAg
aWYgKHNjcm9sbEJhclRvcCA8IChzY3JvbGxUcmFja0hlaWdodCAtIHNjcm9sbEJhckhlaWdodCkp
IHsKICAgICAgICAgICAgICAgICAgICBzbGlkZXIuc2V0VmFsdWUoc2xpZGVyVmFsdWUpOwogICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICB9Cn0pOwpkb2pvLnBy
b3ZpZGUoImRqLm1vZHVsZS5yZWZyZXNoVG9vbHRpcHMiKTsKZG9qby5yZXF1aXJlKCJkai51dGls
LlVzZXIiKTsKZG9qby5yZXF1aXJlKCJkai53aWRnZXQucGFuZWwuVG9vbHRpcCIpOwpkai5tb2R1
bGUucmVmcmVzaFRvb2x0aXBzID0gZnVuY3Rpb24gKG9Ub29sdGlwKSB7CiAgICBkai51dGlsLlVz
ZXIuaXNTdWJMb2dnZWRJbihmdW5jdGlvbiAoc3ViTG9nZ2VkSW4pIHsKICAgICAgICBpZiAoIXN1
YkxvZ2dlZEluKSB7CiAgICAgICAgICAgIGlmICgodHlwZW9mIG9Ub29sdGlwICE9PSAndW5kZWZp
bmVkJykgJiYgKG9Ub29sdGlwICE9PSBudWxsKSAmJiAodHlwZW9mIG9Ub29sdGlwLnJlZnJlc2hU
b29sdGlwcyA9PSAiZnVuY3Rpb24iKSkgewogICAgICAgICAgICAgICAgb1Rvb2x0aXAucmVmcmVz
aFRvb2x0aXBzKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKfTsKZG9qby5wcm92
aWRlKCJkai53aWRnZXQuZmxhc2guRmxhc2giKTsKZG9qby5yZXF1aXJlKCJkai51dGlsLkNvb2tp
ZSIpOwpkb2pvLnJlcXVpcmUoImRqLnV0aWwuT2JzZXJ2ZXIiKTsKZG9qby5yZXF1aXJlKCJzd2Zv
YmplY3Quc3dmb2JqZWN0XzJfMi5zd2ZvYmplY3QiKTsKZG9qby5kZWNsYXJlKCJkai53aWRnZXQu
Zmxhc2guRmxhc2giLCBudWxsLCB7CiAgICBjb25zdHJ1Y3RvcjogZnVuY3Rpb24gKGlkT3JEb21O
b2RlLCBwLCBzLCBwYXJhbXMpIHsKICAgICAgICB0aGlzLnBhcmVudCA9IGRvam8uYnlJZChpZE9y
RG9tTm9kZSk7CiAgICAgICAgaWYgKHRoaXMuX2lzV2lkZ2V0QWxyZWFkeUhhbmRsZWQoKSkgewog
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHBhcmFtcyA9IGRvam8ubWl4aW4o
ewogICAgICAgICAgICBub2xvYWQ6IGZhbHNlLAogICAgICAgICAgICBnZXRTZXR0aW5nczogdHJ1
ZSwKICAgICAgICAgICAgc3dmc2V0dGluZ3M6IHVuZGVmaW5lZAogICAgICAgIH0sIHBhcmFtcyk7
CiAgICAgICAgdGhpcy5jb25maWcgPSB7fTsKICAgICAgICB0aGlzLmNvbmZpZy5teU1vdmllID0g
Jy9wdWJsaWMvcmVzb3VyY2VzL2RvY3VtZW50cy9pbmZvLWZsYXNoMDgtcHJlbG9hZGVyLnN3Zic7
CiAgICAgICAgdGhpcy5wID0gcDsKICAgICAgICB0aGlzLnMgPSBzOwogICAgICAgIHRoaXMuc3dm
c2V0dGluZ3MgPSBwYXJhbXMuc3dmc2V0dGluZ3M7CiAgICAgICAgdGhpcy5nZXRTZXR0aW5ncyA9
IHBhcmFtcy5nZXRTZXR0aW5nczsKICAgICAgICB0aGlzLnN3ZlByZWZpeCA9ICdpbmZvLSc7CiAg
ICAgICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7CiAgICAgICAgdGhpcy5fc3dmRmxhc2h2YXJzID0g
e307CiAgICAgICAgdGhpcy5fc3dmUGFyYW1zID0ge307CiAgICAgICAgdGhpcy5fc3dmQXR0cmli
dXRlcyA9IHt9OwogICAgICAgIHRoaXMuc2V0dGluZ3NPYnNlcnZlciA9IG5ldyBkai51dGlsLk9i
c2VydmVyKCk7CiAgICAgICAgaWYgKHAgJiYgIXBhcmFtcy5ub2xvYWQpIHsKICAgICAgICAgICAg
dGhpcy5sb2FkKHAsIHMpOwogICAgICAgIH0KICAgIH0sCiAgICBfaXNXaWRnZXRBbHJlYWR5SGFu
ZGxlZDogZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBpc1dpZGdldEFscmVhZHlIYW5kbGVkID0g
KCh0eXBlb2YgZG9qby5xdWVyeSgiZGl2W2RhdGEtZGotbGl2ZS13aWRnZXRdIiwgdGhpcy5wYXJl
bnQpWzBdID09PSAib2JqZWN0IikgfHwgKHR5cGVvZiBkb2pvLnF1ZXJ5KCJkaXZbZGF0YS1kai13
aWRnZXRdIiwgdGhpcy5wYXJlbnQpWzBdID09PSAib2JqZWN0IikpOwogICAgICAgIGlmIChpc1dp
ZGdldEFscmVhZHlIYW5kbGVkKSB7CiAgICAgICAgICAgIGNvbnNvbGUuaW5mbygie0ZsYXNofSAl
byB3aWxsIGJlIGhhbmRsZWQgYnkgdGhlIHV0aWwudGVtcGxhdGUuIiwgdGhpcy5wYXJlbnQuaWQp
OwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgfSwKICAgIGxvYWQ6IGZ1bmN0aW9uIChwLCBzKSB7CiAgICAgICAgdGhpcy5uZXdJZCgp
OwogICAgICAgIHRoaXMuc2V0dGluZ3NPYnNlcnZlci5zdWJzY3JpYmUodGhpcy5jcmVhdGUsIHRo
aXMpOwogICAgICAgIHRoaXMubG9hZHNldHRpbmdzKHAsIHMpOwogICAgICAgIGlmICh0aGlzLnN3
ZnNldHRpbmdzKSB7CiAgICAgICAgICAgIHRoaXMuY3JlYXRlKHAsIHMpOwogICAgICAgIH0KICAg
IH0sCiAgICBuZXdJZDogZnVuY3Rpb24gKCkgewogICAgICAgIHRoaXMuZmxpZCA9ICJmbGFzaGRp
dl8iICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogOTk5OTk5KTsKICAgIH0sCiAgICBsb2Fk
c2V0dGluZ3M6IGZ1bmN0aW9uIChwLCBzKSB7CiAgICAgICAgdGhpcy5wID0gcDsKICAgICAgICB0
aGlzLnMgPSBzOwogICAgICAgIGlmICghdGhpcy5nZXRTZXR0aW5ncykgewogICAgICAgICAgICB0
aGlzLnN3ZnNldHRpbmdzID0ge307CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAg
ICAgdGhpcy5zZXR0aW5nZmlsZSA9ICcvcHVibGljL3Jlc291cmNlcy9kb2N1bWVudHMvJyArIHRo
aXMuc3dmUHJlZml4ICsgcCArICctc2V0dGluZ3MuanMnOwogICAgICAgIGlmICghdGhpcy5zd2Zz
ZXR0aW5ncykgewogICAgICAgICAgICB0aGlzLnN3ZnNldHRpbmdzID0gbnVsbDsKICAgICAgICAg
ICAgdmFyIHRoYXQgPSB0aGlzOwogICAgICAgICAgICB2YXIgZGVmZXJyZWQgPSBkb2pvLnhockdl
dCh7CiAgICAgICAgICAgICAgICB1cmw6IHRoaXMuc2V0dGluZ2ZpbGUsCiAgICAgICAgICAgICAg
ICBsb2FkOiBmdW5jdGlvbiAoZGF0YSwgaW9hcmdzKSB7CiAgICAgICAgICAgICAgICAgICAgaWYg
KCFkYXRhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgdmFyIGpzbyA9IHRoYXQuX25vcm1hbGl6ZUpzb25U
b09iamVjdChkYXRhKTsKICAgICAgICAgICAgICAgICAgICB0aGF0LnN3ZnNldHRpbmdzID0ganNv
LnN3ZnNldHRpbmdzOwogICAgICAgICAgICAgICAgICAgIHRoYXQuc2V0dGluZ3NPYnNlcnZlci5m
aXJlKHRoYXQucCwgdGhhdC5zKTsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBl
cnJvcjogZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3Io
IntGbGFzaH0gSFRUUCBzdGF0dXMgY29kZTogJXMsIHJlc3BvbnNlOiAlbyIsIGlvYXJncy54aHIu
c3RhdHVzLCBkYXRhKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAg
fQogICAgfSwKICAgIGNyZWF0ZTogZnVuY3Rpb24gKHAsIHMpIHsKICAgICAgICB0aGlzLmNyZWF0
ZXdyYXBwZXIoKTsKICAgICAgICB0aGlzLmNyZWF0ZWZsYXNoKCk7CiAgICAgICAgdGhpcy5zZXR0
aW5nc09ic2VydmVyLnVuc3Vic2NyaWJlKHRoaXMuY3JlYXRlKTsKICAgIH0sCiAgICBjcmVhdGV3
cmFwcGVyOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgdGhpcy5uZXdJZCgpOwogICAgICAgIHRoaXMu
ZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgdGhpcy5kaXYuc2V0
QXR0cmlidXRlKCdpZCcsIHRoaXMuZmxpZCk7CiAgICAgICAgdGhpcy5wYXJlbnQuYXBwZW5kQ2hp
bGQodGhpcy5kaXYpOwogICAgfSwKICAgIGNyZWF0ZWZsYXNoOiBmdW5jdGlvbiAoKSB7CiAgICAg
ICAgaWYgKHRoaXMuc28pIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB0
aGlzLm15TW92aWUgPSAodGhpcy5zd2ZzZXR0aW5ncy5yZXF1aXJlZFNldHRpbmdzLnByZWxvYWRl
cikgPyAoJy9wdWJsaWMvcmVzb3VyY2VzL2RvY3VtZW50cy8nICsgdGhpcy5zd2ZzZXR0aW5ncy5y
ZXF1aXJlZFNldHRpbmdzLnByZWxvYWRlcikgOiAodGhpcy5jb25maWcubXlNb3ZpZSk7CiAgICAg
ICAgdGhpcy5fc2V0U3dmUGFyYW1zKCk7CiAgICAgICAgdGhpcy5fc2V0U3dmRmxhc2h2YXJzKCk7
CiAgICAgICAgdGhpcy5fc2V0U3dmQXR0cmlidXRlcygpOwogICAgICAgIHRyeSB7CiAgICAgICAg
ICAgIHN3Zm9iamVjdC5lbWJlZFNXRih0aGlzLm15TW92aWUsIHRoaXMuZmxpZCwgdGhpcy5zd2Zz
ZXR0aW5ncy5yZXF1aXJlZFNldHRpbmdzLnN3ZndpZHRoLCB0aGlzLnN3ZnNldHRpbmdzLnJlcXVp
cmVkU2V0dGluZ3Muc3dmaGVpZ2h0LCAiOS4wLjAiLCAiIiwgdGhpcy5fc3dmRmxhc2h2YXJzLCB0
aGlzLl9zd2ZQYXJhbXMsIHRoaXMuX3N3ZkF0dHJpYnV0ZXMpOwogICAgICAgIH0gY2F0Y2ggKGUp
IHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcigie0ZsYXNofSB0aHJldyB0aGUgZm9sbG93aW5n
IGVycm9yOiAlbyIsIGUubWVzc2FnZSk7CiAgICAgICAgfQogICAgfSwKICAgIF9zZXRTd2ZQYXJh
bXM6IGZ1bmN0aW9uICgpIHsKICAgICAgICB0aGlzLl9zd2ZQYXJhbXMgPSBkb2pvLm1peGluKHRo
aXMuX3N3ZlBhcmFtcywgewogICAgICAgICAgICBhbGxvd1NjcmlwdEFjY2VzczogImFsd2F5cyIs
CiAgICAgICAgICAgIHdtb2RlOiAib3BhcXVlIiwKICAgICAgICAgICAgYmFzZTogIi9wdWJsaWMv
cmVzb3VyY2VzL2RvY3VtZW50cyIsCiAgICAgICAgICAgIG1lbnU6ICJmYWxzZSIsCiAgICAgICAg
ICAgIGJnY29sb3I6ICIjRkZGRkZGIiwKICAgICAgICAgICAgYWxsb3dmdWxsc2NyZWVuOiAidHJ1
ZSIsCiAgICAgICAgICAgIGhlaWdodDogdGhpcy5zd2ZzZXR0aW5ncy5yZXF1aXJlZFNldHRpbmdz
LnN3ZmhlaWdodAogICAgICAgIH0pOwogICAgfSwKICAgIF9zZXRTd2ZGbGFzaHZhcnM6IGZ1bmN0
aW9uICgpIHsKICAgICAgICBpZiAodGhpcy5zd2ZzZXR0aW5ncyAmJiB0aGlzLnN3ZnNldHRpbmdz
Lm9wdGlvbmFsU2V0dGluZ3MpIHsKICAgICAgICAgICAgZm9yICh2YXIgc2V0dGluZyBpbiB0aGlz
LnN3ZnNldHRpbmdzLm9wdGlvbmFsU2V0dGluZ3MpIHsKICAgICAgICAgICAgICAgIGlmICh0aGlz
LnN3ZnNldHRpbmdzLm9wdGlvbmFsU2V0dGluZ3MuaGFzT3duUHJvcGVydHkoc2V0dGluZykpIHsK
ICAgICAgICAgICAgICAgICAgICB0aGlzLl9zd2ZGbGFzaHZhcnNbc2V0dGluZ10gPSB0aGlzLnN3
ZnNldHRpbmdzLm9wdGlvbmFsU2V0dGluZ3Nbc2V0dGluZ107CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMucGFyYW1zICYmIHRoaXMucGFy
YW1zLmZsYXNoVmFycykgewogICAgICAgICAgICBmb3IgKHZhciBmbGFzaFZhciBpbiB0aGlzLnBh
cmFtcy5mbGFzaHZhcnMpIHsKICAgICAgICAgICAgICAgIGlmICh0aGlzLnBhcmFtcy5mbGFzaHZh
cnMuaGFzT3duUHJvcGVydHkoZmxhc2hWYXIpKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5f
c3dmRmxhc2h2YXJzW2ZsYXNoVmFyXSA9IHRoaXMucGFyYW1zLmZsYXNodmFyc1tmbGFzaFZhcl07
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhpcy5f
c3dmRmxhc2h2YXJzLlNsdWdOYW1lID0gdGhpcy5wOwogICAgICAgIHRoaXMuX3N3ZkZsYXNodmFy
cy5wbGFjZW1lbnQgPSAidGFiIjsKICAgICAgICB0aGlzLnByZWxvYWQgPSAnaW5mby0nICsgdGhp
cy5wICsgJy1wcmVsb2FkLnhtbCc7CiAgICAgICAgdGhpcy5fc3dmRmxhc2h2YXJzLlByZWxvYWRl
clVSTCA9IHRoaXMucHJlbG9hZDsKICAgICAgICB0aGlzLl9zd2ZGbGFzaHZhcnMuTW92aWVXaWR0
aCA9IHRoaXMuc3dmc2V0dGluZ3MucmVxdWlyZWRTZXR0aW5ncy5zd2Z3aWR0aDsKICAgICAgICB0
aGlzLl9zd2ZGbGFzaHZhcnMuTW92aWVIZWlnaHQgPSB0aGlzLnN3ZnNldHRpbmdzLnJlcXVpcmVk
U2V0dGluZ3Muc3dmaGVpZ2h0OwogICAgICAgIHRoaXMuX3N3ZkZsYXNodmFycy5hc3ViID0gZGou
dXRpbC5Db29raWUuZ2V0Q29va2llKCJ1c2VyX3R5cGUiKTsKICAgICAgICB0aGlzLl9zd2ZGbGFz
aHZhcnMuYmFzZVBhdGggPSAnL3B1YmxpYy9yZXNvdXJjZXMvZG9jdW1lbnRzJzsKICAgICAgICB0
aGlzLl9zd2ZGbGFzaHZhcnMuY2RuRG9tYWluID0gZGouY29udGV4dC5jb3JlLmNkblByZWZpeDsK
ICAgICAgICB0aGlzLl9zd2ZGbGFzaHZhcnMuc2VydmVyRG9tYWluID0gZGouY29udGV4dC5jb3Jl
LnVybFByZWZpeDsKICAgICAgICB0aGlzLl9zd2ZGbGFzaHZhcnMuaWQgPSB0aGlzLnM7CiAgICAg
ICAgdGhpcy5fc3dmRmxhc2h2YXJzLlBMQVlFUl9JRCA9IHRoaXMucDsKICAgIH0sCiAgICBfc2V0
U3dmQXR0cmlidXRlczogZnVuY3Rpb24gKCkgewogICAgICAgIHRoaXMuX3N3ZkF0dHJpYnV0ZXMg
PSBkb2pvLm1peGluKHRoaXMuX3N3ZkF0dHJpYnV0ZXMsIHsKICAgICAgICAgICAgaWQ6IHRoaXMu
cAogICAgICAgIH0pOwogICAgfSwKICAgIF9ub3JtYWxpemVKc29uVG9PYmplY3Q6IGZ1bmN0aW9u
IChyZXNwb25zZSkgewogICAgICAgIHZhciBqc29uX3N0YXJ0ID0gcmVzcG9uc2UuaW5kZXhPZign
eycpOwogICAgICAgIHZhciBqc29uX2VuZCA9IHJlc3BvbnNlLmxhc3RJbmRleE9mKCd9Jyk7CiAg
ICAgICAgaWYgKGpzb25fc3RhcnQgPiAtMSkgewogICAgICAgICAgICByZXNwb25zZSA9IHJlc3Bv
bnNlLnN1YnN0cmluZyhqc29uX3N0YXJ0LCBqc29uX2VuZCArIDEpOwogICAgICAgIH0KICAgICAg
ICByZXR1cm4gZG9qby5mcm9tSnNvbihyZXNwb25zZSk7CiAgICB9Cn0pOwpkb2pvLmRlY2xhcmUo
ImRqLndpZGdldC5mbGFzaC5TbGlkZXNob3dGbGFzaCIsIGRqLndpZGdldC5mbGFzaC5GbGFzaCwg
ewogICAgY29uc3RydWN0b3I6IGZ1bmN0aW9uIChpZCwgcCwgcywgbm9sb2FkKSB7CiAgICAgICAg
dGhpcy5jb25maWcubXlNb3ZpZSA9ICcvcHVibGljL3Jlc291cmNlcy9kb2N1bWVudHMvaW5mby1z
bGlkZXNob3cwOC1wcmVsb2FkZXIuc3dmJzsKICAgICAgICB3aW5kb3cuZ2V0Q29udGVudCA9IHRo
aXMuZ2V0Q29udGVudDsKICAgIH0sCiAgICBnZXRDb250ZW50OiBmdW5jdGlvbiAoKSB7CiAgICAg
ICAgcmV0dXJuIG51bGw7CiAgICB9Cn0pOwpkb2pvLnByb3ZpZGUoImRqLnV0aWwuZmxhc2gudGVt
cGxhdGUiKTsKZG9qby5yZXF1aXJlKCJkai51dGlsLkVsZW1lbnQiKTsKZG9qby5yZXF1aXJlKCJk
ai51dGlsLlRlbXBsYXRlIik7CmRvam8ucmVxdWlyZSgic3dmb2JqZWN0LnN3Zm9iamVjdF8yXzIu
c3dmb2JqZWN0Iik7CmRvam8ucmVxdWlyZSgiZGoud2lkZ2V0LmZsYXNoLkZsYXNoIik7CmRqLnV0
aWwuZmxhc2gudGVtcGxhdGUgPSB7CiAgICBzY2FuOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFy
IHRoYXQgPSB0aGlzOwogICAgICAgIGRvam8ucXVlcnkoImRpdltkYXRhLWRqLXdpZGdldD1mbGFz
aC5UZW1wbGF0ZV0iKS5mb3JFYWNoKGZ1bmN0aW9uIChkb21Ob2RlKSB7CiAgICAgICAgICAgIHRy
eSB7CiAgICAgICAgICAgICAgICBpZiAodGhhdC5faXNJbml0aWFsaXplZChkb21Ob2RlKSkgewog
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIHRoYXQuX21hcmtBc0luaXRpYWxpemVkKGRvbU5vZGUpOwogICAgICAgICAgICAgICAgdmFy
IGRhdGFzZXQgPSB0aGF0Ll9nZXREYXRhc2V0RnJvbVdpZGdldChkb21Ob2RlKTsKICAgICAgICAg
ICAgICAgIGlmICh0aGF0Ll9oYXNWYWxpZEZsYXNoVmVyc2lvbigpKSB7CiAgICAgICAgICAgICAg
ICAgICAgdGhhdC5faGFuZGxlRmxhc2goZG9tTm9kZSwgZGF0YXNldCk7CiAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKGRhdGFzZXQuZGpIaWRlSWZOb0ZsYXNoID09ICJ0cnVlIikgewogICAgICAg
ICAgICAgICAgICAgIHRoYXQuX2Rlc3Ryb3lXaWRnZXQoZG9tTm9kZSk7CiAgICAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHRoYXQuX3NldE1hZ2ljRGF0YXBvaW50cyhk
YXRhc2V0KTsKICAgICAgICAgICAgICAgICAgICB0aGF0Ll9oYW5kbGVUZW1wbGF0ZShkb21Ob2Rl
LCBkYXRhc2V0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBjYXRjaCAoZSkgewog
ICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigie2ZsYXNoLlRlbXBsYXRlfSB0aHJldyB0aGUg
Zm9sbG93aW5nIGVycm9yOiAlcyIsIGUubWVzc2FnZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9
KTsKICAgIH0sCiAgICBfaXNJbml0aWFsaXplZDogZnVuY3Rpb24gKGRvbU5vZGUpIHsKICAgICAg
ICByZXR1cm4gKGRqLnV0aWwuRWxlbWVudC5nZXREYXRhKGRvbU5vZGUsICJpc0luaXRpYWxpemVk
IikgPT0gInRydWUiKTsKICAgIH0sCiAgICBfbWFya0FzSW5pdGlhbGl6ZWQ6IGZ1bmN0aW9uIChk
b21Ob2RlKSB7CiAgICAgICAgZGoudXRpbC5FbGVtZW50LnNldERhdGEoZG9tTm9kZSwgImlzSW5p
dGlhbGl6ZWQiLCAidHJ1ZSIpOwogICAgfSwKICAgIF9oYXNWYWxpZEZsYXNoVmVyc2lvbjogZnVu
Y3Rpb24gKCkgewogICAgICAgIHJldHVybiAoc3dmb2JqZWN0LmdldEZsYXNoUGxheWVyVmVyc2lv
bigpLm1ham9yID49IDkpOwogICAgfSwKICAgIF9oYW5kbGVGbGFzaDogZnVuY3Rpb24gKGRvbU5v
ZGUsIGRhdGFzZXQpIHsKICAgICAgICB2YXIgaGFzRmxhc2hTZXR0aW5ncyA9IGRhdGFzZXQuZmxh
c2hTZXR0aW5nczsKICAgICAgICB2YXIgb3B0aW9ucyA9IGhhc0ZsYXNoU2V0dGluZ3MgPyB7CiAg
ICAgICAgICAgIG5vbG9hZDogdHJ1ZSwKICAgICAgICAgICAgc3dmc2V0dGluZ3M6IGRvam8uZnJv
bUpzb24oZGF0YXNldC5mbGFzaFNldHRpbmdzKS5zd2ZzZXR0aW5ncwogICAgICAgIH0gOiB7fTsK
ICAgICAgICB2YXIgZmwgPSBuZXcgZGoud2lkZ2V0LmZsYXNoLkZsYXNoKGRvbU5vZGUsIGRhdGFz
ZXQuZmxhc2hQcm9qZWN0LCBkYXRhc2V0LmZsYXNoU2Vjb25kUGFyYW0sIG9wdGlvbnMpOwogICAg
ICAgIGlmIChoYXNGbGFzaFNldHRpbmdzKSB7CiAgICAgICAgICAgIGZsLmNyZWF0ZShkYXRhc2V0
LmZsYXNoUHJvamVjdCwgZGF0YXNldC5mbGFzaFNlY29uZFBhcmFtKTsKICAgICAgICB9CiAgICB9
LAogICAgX2Rlc3Ryb3lXaWRnZXQ6IGZ1bmN0aW9uIChkb21Ob2RlKSB7CiAgICAgICAgdmFyIHBh
cmVudCA9IGRvbU5vZGUucGFyZW50Tm9kZTsKICAgICAgICBkb2pvLmRlc3Ryb3koZG9tTm9kZSk7
CiAgICAgICAgdmFyIHRleHRhcmVhID0gZG9qby5xdWVyeSgidGV4dGFyZWEiLCBwYXJlbnQpWzBd
OwogICAgICAgIGlmICh0ZXh0YXJlYSkgewogICAgICAgICAgICBkb2pvLmRlc3Ryb3kodGV4dGFy
ZWEpOwogICAgICAgIH0KICAgICAgICB0aGlzLl9yZWN1cnNpdmVseURlc3Ryb3lFbXB0eVBhcmVu
dHMocGFyZW50KTsKICAgIH0sCiAgICBfcmVjdXJzaXZlbHlEZXN0cm95RW1wdHlQYXJlbnRzOiBm
dW5jdGlvbiAocGFyZW50KSB7CiAgICAgICAgdmFyIG51bU9mQ2hpbGRyZW4gPSBkb2pvLnF1ZXJ5
KCIqIiwgcGFyZW50KS5sZW5ndGg7CiAgICAgICAgaWYgKG51bU9mQ2hpbGRyZW4gPT09IDApIHsK
ICAgICAgICAgICAgdmFyIGl0c1BhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlOwogICAgICAgICAg
ICBkb2pvLmRlc3Ryb3kocGFyZW50KTsKICAgICAgICAgICAgdGhpcy5fcmVjdXJzaXZlbHlEZXN0
cm95RW1wdHlQYXJlbnRzKGl0c1BhcmVudCk7CiAgICAgICAgfQogICAgfSwKICAgIF9zZXRNYWdp
Y0RhdGFwb2ludHM6IGZ1bmN0aW9uIChkYXRhc2V0KSB7CiAgICAgICAgZGF0YXNldC5kaklzRmxh
c2hQb3NzaWJsZSA9IHRoaXMuX2lzRmxhc2hQb3NzaWJsZSgpOwogICAgfSwKICAgIF9oYW5kbGVU
ZW1wbGF0ZTogZnVuY3Rpb24gKGRvbU5vZGUsIGRhdGFzZXQpIHsKICAgICAgICB2YXIgdGVtcGxh
dGUgPSB0aGlzLl9nZXRUZW1wbGF0ZUZyb21XaWRnZXQoZG9tTm9kZSk7CiAgICAgICAgdGhpcy5f
cmVuZGVyVGVtcGxhdGUoZG9tTm9kZSwgdGVtcGxhdGUsIGRhdGFzZXQpOwogICAgfSwKICAgIF9n
ZXRUZW1wbGF0ZUZyb21XaWRnZXQ6IGZ1bmN0aW9uIChkb21Ob2RlKSB7CiAgICAgICAgdmFyIHRl
bXBsYXRlID0gZG9qby5xdWVyeSgidGV4dGFyZWEiLCBkb21Ob2RlKVswXTsKICAgICAgICBpZiAo
IXRlbXBsYXRlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigie2ZsYXNoLlRlbXBsYXRl
fSBubyB0ZW1wbGF0ZSBkb21Ob2RlIGZvdW5kIGluICVvIiwgZG9tTm9kZSk7CiAgICAgICAgfQog
ICAgICAgIHJldHVybiB0aGlzLl9zdHJpcENkYXRhVGFncyh0ZW1wbGF0ZS52YWx1ZSk7CiAgICB9
LAogICAgX2dldERhdGFzZXRGcm9tV2lkZ2V0OiBmdW5jdGlvbiAoZG9tTm9kZSkgewogICAgICAg
IHZhciBkYXRhc2V0ID0gZGoudXRpbC5FbGVtZW50LmdldERhdGFzZXQoZG9tTm9kZSk7CiAgICAg
ICAgZGVsZXRlIGRhdGFzZXQuZGpXaWRnZXQ7CiAgICAgICAgcmV0dXJuIGRhdGFzZXQ7CiAgICB9
LAogICAgX3JlbmRlclRlbXBsYXRlOiBmdW5jdGlvbiAoZG9tTm9kZSwgdGVtcGxhdGUsIGRhdGFz
ZXQpIHsKICAgICAgICBkb21Ob2RlLmlubmVySFRNTCA9IGRqLnV0aWwuVGVtcGxhdGUucGFyc2VU
ZW1wbGF0ZSh0ZW1wbGF0ZSkucHJvY2VzcyhkYXRhc2V0KTsKICAgIH0sCiAgICBfc3RyaXBDZGF0
YVRhZ3M6IGZ1bmN0aW9uIChzdHJpbmcpIHsKICAgICAgICBzdHJpbmcgPSBzdHJpbmcucmVwbGFj
ZSgvXHMqPCFcW0NEQVRBXFtccyovLCAiIik7CiAgICAgICAgc3RyaW5nID0gc3RyaW5nLnJlcGxh
Y2UoL1xzKlxdXF0+XHMqLywgIiIpOwogICAgICAgIHJldHVybiBzdHJpbmc7CiAgICB9LAogICAg
X2lzRmxhc2hQb3NzaWJsZTogZnVuY3Rpb24gKCkgewogICAgICAgIHZhciB1c2VyQWdlbnRTdHJp
bmcgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCksCiAgICAgICAgICAgIGlzSXBo
b25lID0gKHVzZXJBZ2VudFN0cmluZy5pbmRleE9mKCJpcGhvbmUiKSA+IC0xKSwKICAgICAgICAg
ICAgaXNJcGFkID0gKHVzZXJBZ2VudFN0cmluZy5pbmRleE9mKCJpcGFkIikgPiAtMSk7CiAgICAg
ICAgcmV0dXJuIChkb2pvLmlzQnJvd3NlciAmJiAhKGlzSXBob25lIHx8IGlzSXBhZCkpOwogICAg
fQp9Owpkb2pvLnByb3ZpZGUoImRqLmNvbW11bml0eS5Db21tdW5pdHlMaXZlIik7CmRqLmNvbW11
bml0eS5Db21tdW5pdHlMaXZlID0gZnVuY3Rpb24gKGNvbW11bml0eVNpdGVSb290LCBjb250YWlu
ZXIsIGRlbGF5SW50ZXJ2YWwsIG9wdGlvbnMpIHsKICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9
OwogICAgdmFyIF9sYXN0SWQgPSBvcHRpb25zLmxhc3RpZDsKICAgIHZhciBfdXBkYXRlRGl2ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICB2YXIgX3RyaW1SZXN1bHRzID0gZnVu
Y3Rpb24gKCkgewogICAgICAgICAgICB2YXIgbGlzdCA9IG5ldyBkb2pvLk5vZGVMaXN0KGRvam8u
YnlJZCgnY29tbXVuaXR5TGl2ZUxpc3QnKSk7CiAgICAgICAgICAgIGlmICghbGlzdCkgewogICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGRvam8ucGxhY2Uo
X3VwZGF0ZURpdi5pbm5lckhUTUwsIGxpc3RbMF0sICJmaXJzdCIpOwogICAgICAgICAgICB2YXIg
aXRlbUNvdW50ID0gbGlzdC5jaGlsZHJlbigpLmxlbmd0aCAtIDI7CiAgICAgICAgICAgIHZhciBy
ZW1vdmFsUXVldWUgPSBbXTsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDY7IGkgPCBpdGVtQ291
bnQ7IGkrKykgewogICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSBsaXN0LmNoaWxkcmVuKClbaV07
CiAgICAgICAgICAgICAgICByZW1vdmFsUXVldWUucHVzaChpdGVtKTsKICAgICAgICAgICAgfQog
ICAgICAgICAgICBmb3IgKHZhciBySXRlbUluZGV4ID0gMDsgckl0ZW1JbmRleCA8IHJlbW92YWxR
dWV1ZS5sZW5ndGg7IHJJdGVtSW5kZXgrKykgewogICAgICAgICAgICAgICAgdmFyIGl0ZW1Ub1Jl
bW92ZSA9IHJlbW92YWxRdWV1ZVtySXRlbUluZGV4XTsKICAgICAgICAgICAgICAgIGRvam8uZGVz
dHJveShpdGVtVG9SZW1vdmUpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgIHRyaW1SZXN1
bHRzID0gZnVuY3Rpb24gKCkgewogICAgICAgIGRvam8uZGVwcmVjYXRlZCgidHJpbVJlc3VsdHMi
LCAicmVtb3ZlIGlmIG5vdCB1c2VkIHB1YmxpY2lseSIsICIxLjAuMCIpOwogICAgICAgIF90cmlt
UmVzdWx0cygpOwogICAgfTsKICAgIHZhciBfcG9sbENvbW11bml0eUxpdmUgPSBmdW5jdGlvbiAo
bGFzdElkKSB7CiAgICAgICAgICAgIHZhciBzVXJpID0gb3B0aW9ucy5zdWJqZWN0dXJpOwogICAg
ICAgICAgICB2YXIgdXJsID0gY29tbXVuaXR5U2l0ZVJvb3QgKyAiL2NvbW11bml0eWxpdmUvbmV3
ZW50cmllcy5zeW5jP3I9IiArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDApOwogICAg
ICAgICAgICBpZiAoc1VyaSkgewogICAgICAgICAgICAgICAgdXJsICs9ICImc3ViamVjdHVyaT0i
ICsgc1VyaTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAobGFzdElkKSB7CiAgICAgICAg
ICAgICAgICB1cmwgKz0gIiZsYXN0SWQ9IiArIGxhc3RJZDsKICAgICAgICAgICAgfQogICAgICAg
ICAgICBkb2pvLnhockdldCh7CiAgICAgICAgICAgICAgICB1cmw6IHVybCwKICAgICAgICAgICAg
ICAgIGNvbnRlbnQ6IHsKICAgICAgICAgICAgICAgICAgICB0cmFja2luZzogb3B0aW9ucy50cmFj
a2luZwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGxvYWQ6IGZ1bmN0aW9uIChk
YXRhLCBpb2FyZ3MpIHsKICAgICAgICAgICAgICAgICAgICBkb2pvLnBsYWNlKGRhdGEucmVwbGFj
ZSgvXlxzKi8sICIiKSwgX3VwZGF0ZURpdiwgIm9ubHkiKTsKICAgICAgICAgICAgICAgIH0sCiAg
ICAgICAgICAgICAgICBoYW5kbGU6IGZ1bmN0aW9uIChyZXNwb25zZSwgaW9hcmdzKSB7CiAgICAg
ICAgICAgICAgICAgICAgdmFyIGpzb24gPSBkb2pvLmZyb21Kc29uKGlvYXJncy54aHIuZ2V0UmVz
cG9uc2VIZWFkZXIoIlgtSlNPTiIpKTsKICAgICAgICAgICAgICAgICAgICBfcHJvY2Vzc1Jlc3Vs
dHMoaW9hcmdzLCBqc29uKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAg
ICAgfTsKICAgIHBvbGxDb21tdW5pdHlMaXZlID0gZnVuY3Rpb24gKGxhc3RJZCkgewogICAgICAg
IGRvam8uZGVwcmVjYXRlZCgicG9sbENvbW11bml0eUxpdmUiLCAicmVtb3ZlIGlmIG5vdCB1c2Vk
IHB1YmxpY2lseSIsICIxLjAuMCIpOwogICAgICAgIF9wb2xsQ29tbXVuaXR5TGl2ZShsYXN0SWQp
OwogICAgfTsKICAgIHZhciB0b3V0aG5kOwogICAgdmFyIF9zdGFydFRpbWVyID0gZnVuY3Rpb24g
KCkgewogICAgICAgICAgICBpZiAodG91dGhuZCkgewogICAgICAgICAgICAgICAgY2xlYXJUaW1l
b3V0KHRvdXRobmQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRvdXRobmQgPSBzZXRUaW1l
b3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIF9wb2xsQ29tbXVuaXR5TGl2ZShfbGFz
dElkKTsKICAgICAgICAgICAgfSwgZGVsYXlJbnRlcnZhbCk7CiAgICAgICAgfTsKICAgIHN0YXJ0
VGltZXIgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgZG9qby5kZXByZWNhdGVkKCJzdGFydFRpbWVy
IiwgInJlbW92ZSBpZiBub3QgdXNlZCBwdWJsaWNpbHkiLCAiMS4wLjAiKTsKICAgICAgICBfc3Rh
cnRUaW1lcigpOwogICAgfTsKICAgIHZhciBfcHJvY2Vzc1Jlc3VsdHMgPSBmdW5jdGlvbiAodHJh
bnNwb3J0LCBqc29uKSB7CiAgICAgICAgICAgIGlmIChqc29uICYmIGpzb24ubGFzdElkKSB7CiAg
ICAgICAgICAgICAgICBfbGFzdElkID0ganNvbi5sYXN0SWQ7CiAgICAgICAgICAgICAgICBfdHJp
bVJlc3VsdHMoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBfc3RhcnRUaW1lcigpOwogICAg
ICAgIH07CiAgICBwcm9jZXNzUmVzdWx0cyA9IGZ1bmN0aW9uICh0cmFuc3BvcnQsIGpzb24pIHsK
ICAgICAgICBkb2pvLmRlcHJlY2F0ZWQoInByb2Nlc3NSZXN1bHRzIiwgInJlbW92ZSBpZiBub3Qg
dXNlZCBwdWJsaWNpbHkiLCAiMS4wLjAiKTsKICAgICAgICBfcHJvY2Vzc1Jlc3VsdHModHJhbnNw
b3J0LCBqc29uKTsKICAgIH07CiAgICBfcG9sbENvbW11bml0eUxpdmUoX2xhc3RJZCk7CiAgICBy
ZXR1cm4gewogICAgICAgIFJlZnJlc2g6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgaWYgKHRv
dXRobmQpIHsKICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0b3V0aG5kKTsKICAgICAgICAg
ICAgfQogICAgICAgICAgICBfcG9sbENvbW11bml0eUxpdmUoX2xhc3RJZCk7CiAgICAgICAgfQog
ICAgfTsKfTsKZG9qby5wcm92aWRlKCJkai5tb2R1bGUuY29tbXVuaXR5TGl2ZSIpOwpkb2pvLnJl
cXVpcmUoImRqLmNvbW11bml0eS5Db21tdW5pdHlMaXZlIik7CmRqLm1vZHVsZS5jb21tdW5pdHlM
aXZlID0gewogICAgc2hvd0NvbW11bml0eUxpdmU6IGZ1bmN0aW9uIChyZWZyZXNoUmF0ZSwgdXJs
UHJlZml4KSB7CiAgICAgICAgZG9qby5hZGRPbkxvYWQoZnVuY3Rpb24gKCkgewogICAgICAgICAg
ICBpZiAocmVmcmVzaFJhdGUgPT09ICd1bmRlZmluZWQnIHx8IHJlZnJlc2hSYXRlID09PSAnJykg
ewogICAgICAgICAgICAgICAgcmVmcmVzaFJhdGUgPSAxNTAwMDsKICAgICAgICAgICAgfQogICAg
ICAgICAgICBpZiAodXJsUHJlZml4KSB7CiAgICAgICAgICAgICAgICB1cmxQcmVmaXggPSB1cmxQ
cmVmaXggKyAiL2NvbW11bml0eSI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICB1cmxQcmVmaXggPSBkai5jb250ZXh0LmNvcmUudXJsUHJlZml4ICsgIi9jb21tdW5pdHkiOwog
ICAgICAgICAgICB9CiAgICAgICAgICAgIGRqLmNvbW11bml0eS5Db21tdW5pdHlMaXZlKHVybFBy
ZWZpeCwgJ2NvbW11bml0eUxpdmUnLCByZWZyZXNoUmF0ZSwgewogICAgICAgICAgICAgICAgdHJh
Y2tpbmc6ICdtb2Q9V1NKX2hwc19jb21tdW5pdHlMaXZlJwogICAgICAgICAgICB9KTsKICAgICAg
ICB9KTsKICAgIH0KfTsKZG9qby5wcm92aWRlKCJkai53aWRnZXQudmlkZW8ubW9kZWwuUGxheWVy
RXZlbnRzIik7CmRqLndpZGdldC52aWRlby5tb2RlbC5QbGF5ZXJFdmVudHMgPSB7CiAgICBwbGF5
VmlkZW86ICJvblBsYXlWaWRlbyIsCiAgICBwYXVzZVZpZGVvOiAib25QYXVzZVZpZGVvIiwKICAg
IHVucGF1c2VWaWRlbzogIm9uVW5wYXVzZVZpZGVvIiwKICAgIGdldFNlZWs6ICJvbkdldFNlZWsi
LAogICAgc3RvcFZpZGVvOiAib25TdG9wVmlkZW8iLAogICAgY3JlYXRlQWR2ZXJ0aXNlbWVudDog
Im9uQ3JlYXRlQWR2ZXJ0aXNlbWVudCIsCiAgICBvcGVuTWljcm9Qb3BVcFBsYXllcjogIm9uT3Bl
bk1pY3JvUG9wVXBQbGF5ZXIiLAogICAgb3BlblBvcFVwUGxheWVyOiAib25PcGVuUG9wVXBQbGF5
ZXIiLAogICAgY29udGludWVMb2FkVmlkZW86ICJvbkNvbnRpbnVlTG9hZFZpZGVvIiwKICAgIHBs
YXlOZXh0VmlkZW86ICJvblBsYXlOZXh0VmlkZW8iCn07CmRvam8ucHJvdmlkZSgiZGoud2lkZ2V0
LnZpZGVvLm1vZGVsLlBsYXllclR5cGVzIik7Cihkai53aWRnZXQudmlkZW8ubW9kZWwuUGxheWVy
VHlwZXMgPSB7CiAgICBNaWNyb1BsYXllcjogewogICAgICAgIHdpZHRoOiAyNzIsCiAgICAgICAg
aGVpZ2h0OiAxNTMsCiAgICAgICAgc3dmRmlsZTogIlZpZGVvTWljcm9QbGF5ZXIuc3dmIgogICAg
fSwKICAgIE1pY3JvUGxheWVyRTogewogICAgICAgIHdpZHRoOiAzNjAsCiAgICAgICAgaGVpZ2h0
OiAyMDMsCiAgICAgICAgc3dmRmlsZTogIlZpZGVvTWljcm9QbGF5ZXIuc3dmIgogICAgfSwKICAg
IE1pY3JvUGxheWVyRjogewogICAgICAgIHdpZHRoOiA1MTIsCiAgICAgICAgaGVpZ2h0OiAyODgs
CiAgICAgICAgc3dmRmlsZTogIlZpZGVvTWljcm9QbGF5ZXIuc3dmIgogICAgfSwKICAgIE1haW5Q
bGF5ZXI6IHsKICAgICAgICB3aWR0aDogNTEyLAogICAgICAgIGhlaWdodDogMzYzLAogICAgICAg
IHN3ZkZpbGU6ICJWaWRlb1BsYXllck1haW4uc3dmIgogICAgfSwKICAgIEFkUGxheWVyOiB7CiAg
ICAgICAgd2lkdGg6IDMzNiwKICAgICAgICBoZWlnaHQ6IDI4MCwKICAgICAgICBzd2ZGaWxlOiAi
YWRQbGF5ZXIuc3dmIgogICAgfQp9KS5wcm90b3R5cGUgPSB7fTsKZG9qby5wcm92aWRlKCJkai53
aWRnZXQudmlkZW8ubW9kZWwuU1dGUGxheWVyIik7Cihkai53aWRnZXQudmlkZW8ubW9kZWwuU1dG
UGxheWVyID0gZnVuY3Rpb24gKCkgewogICAgdGhpcy5vYmpOYW1lID0gInVuZGVmaW5lZCI7CiAg
ICB0aGlzLmlkID0gIiI7CiAgICB0aGlzLnN3ZlVSTCA9ICIiOwogICAgdGhpcy5jb250YWluZXJJ
RCA9ICIiOwogICAgdGhpcy53aWR0aCA9IDA7CiAgICB0aGlzLmhlaWdodCA9IDA7CiAgICB0aGlz
LnZpZGVvR1VJRCA9ICIiOwogICAgdGhpcy5mbGFzaFZlcnNpb24gPSAiOS4wLjAiOwogICAgdGhp
cy5hbGxvd1BsYXllclBvcHVwID0gMTsKICAgIHRoaXMucGx5TWVkaWFFbmFibGVkID0gMTsKICAg
IHRoaXMuaG9zdCA9ICJ2aWRlby53c2ouY29tIjsKICAgIHRoaXMuYWxsb3dTY3JpcHRBY2Nlc3Mg
PSAiYWx3YXlzIjsKICAgIHRoaXMud2luZG93TW9kZSA9ICJvcGFxdWUiOwogICAgdGhpcy5jb25m
aWdVUkwgPSAiIjsKICAgIHRoaXMuZXZlbnROYW1lc3BhY2UgPSAiIjsKICAgIHRoaXMucGxheVZp
ZGVvID0gIiI7CiAgICB0aGlzLnBhdXNlVmlkZW8gPSAiIjsKICAgIHRoaXMudW5wYXVzZVZpZGVv
ID0gIiI7CiAgICB0aGlzLmdldFNlZWsgPSAiIjsKICAgIHRoaXMuc3RvcFZpZGVvID0gIiI7CiAg
ICB0aGlzLmNyZWF0ZUFkdmVydGlzZW1lbnQgPSAiIjsKICAgIHRoaXMub3BlblBvcFVwUGxheWVy
ID0gIiI7CiAgICB0aGlzLmNvbnRpbnVlTG9hZFZpZGVvID0gIiI7CiAgICB0aGlzLnBsYXlOZXh0
VmlkZW8gPSAiIjsKICAgIHRoaXMuY2hhaW5WaWRlb3MgPSAxOwp9KS5wcm90b3R5cGUgPSB7fTsK
ZG9qby5wcm92aWRlKCJkai53aWRnZXQudmlkZW8udmlldy5CYXNlUGxheWVyIik7CmRvam8uZGVj
bGFyZSgiZGoud2lkZ2V0LnZpZGVvLnZpZXcuQmFzZVBsYXllciIsIG51bGwsIHsKICAgIGNvbnN0
cnVjdG9yOiBmdW5jdGlvbiAodXNlckNvbmZpZ3VyYXRpb24pIHsKICAgICAgICB0aGlzLmNvbnRy
b2xsZXIgPSBudWxsOwogICAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IHsKICAgICAgICAgICAg
bmFtZTogIiIsCiAgICAgICAgICAgIHByZWxvYWRlckNsYXNzTmFtZTogInZpZGVvT2JqZWN0TG9h
ZGluZyIKICAgICAgICB9OwogICAgICAgIGRvam8ubWl4aW4odGhpcy5jb25maWd1cmF0aW9uLCB1
c2VyQ29uZmlndXJhdGlvbik7CiAgICAgICAgdGhpcy5wbGF5ZXJDcmVhdGVkID0gZmFsc2U7CiAg
ICB9LAogICAgaW5pdDogZnVuY3Rpb24gKGNvbnRyb2xsZXIpIHsKICAgICAgICB0aGlzLmNvbnRy
b2xsZXIgPSBjb250cm9sbGVyOwogICAgfSwKICAgIHJlbmRlcjogZnVuY3Rpb24gKCkgewogICAg
ICAgIGNvbnNvbGUuZXJyb3IoIntCYXNlUGxheWVyfSAncmVuZGVyJyBtdXN0IGJlIG92ZXJyaXR0
ZW4iKTsKICAgIH0sCiAgICBvcGVuUG9wVXBQbGF5ZXI6IGZ1bmN0aW9uICgpIHsKICAgICAgICBj
b25zb2xlLmVycm9yKCJ7QmFzZVBsYXllcn0gJ29wZW5Qb3BVcFBsYXllcicgbXVzdCBiZSBvdmVy
cml0dGVuIik7CiAgICB9Cn0pOwpkb2pvLnByb3ZpZGUoImRqLnV0aWwuVmlkZW9VdGlscyIpOwpk
b2pvLnJlcXVpcmUoInN3Zm9iamVjdC5zd2ZvYmplY3RfMl8yLnN3Zm9iamVjdCIpOwooZnVuY3Rp
b24gKCkgewogICAgZGoudXRpbC5WaWRlb1V0aWxzID0gewogICAgICAgIGZvcm1hdER1cmF0aW9u
OiBmdW5jdGlvbiAoc2Vjb25kcykgewogICAgICAgICAgICBpZiAoc2Vjb25kcyA8IDYwKSB7CiAg
ICAgICAgICAgICAgICByZXR1cm4gIjA6IiArIHRoaXMuZm9ybWF0U2Vjb25kcyhzZWNvbmRzKTsK
ICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgbWludXRlcyA9IDA7CiAgICAgICAgICAgIHdo
aWxlIChzZWNvbmRzID4gNTkpIHsKICAgICAgICAgICAgICAgIHNlY29uZHMgLT0gNjA7CiAgICAg
ICAgICAgICAgICBtaW51dGVzKys7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIG1p
bnV0ZXMgKyAiOiIgKyB0aGlzLmZvcm1hdFNlY29uZHMoc2Vjb25kcyk7CiAgICAgICAgfSwKICAg
ICAgICBmb3JtYXRTZWNvbmRzOiBmdW5jdGlvbiAoc2Vjb25kcykgewogICAgICAgICAgICBpZiAo
c2Vjb25kcyA+IDkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBzZWNvbmRzOwogICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuICIwIiArIHNlY29uZHM7CiAgICAgICAg
ICAgIH0KICAgICAgICB9LAogICAgICAgIG51bGxPclVuZGVmaW5lZDogZnVuY3Rpb24gKG9iaikg
ewogICAgICAgICAgICByZXR1cm4gKG9iaiA9PT0gbnVsbCB8fCBvYmogPT0gInVuZGVmaW5lZCIp
OwogICAgICAgIH0sCiAgICAgICAgZW1wdHlPck51bGw6IGZ1bmN0aW9uIChzdHJpbmcpIHsKICAg
ICAgICAgICAgaWYgKCF0aGlzLm51bGxPclVuZGVmaW5lZChzdHJpbmcpKSB7CiAgICAgICAgICAg
ICAgICByZXR1cm4gc3RyaW5nLmxlbmd0aCA9PT0gMDsKICAgICAgICAgICAgfQogICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICB9LAogICAgICAgIG5vblN1cHBvcnRpbmdGbGFzaFBsYXll
cjogZnVuY3Rpb24gKGRpdklkKSB7CiAgICAgICAgICAgIGRvam8uYnlJZChkaXZJZCkuaW5uZXJI
VE1MID0gIjxkaXYgY2xhc3M9XCJub0ZsYXNoXCI+PHA+VGhpcyBjb250ZW50IGNhbiBub3QgYmUg
ZGlzcGxheWVkIGJlY2F1c2UgeW91ciAiICsgImJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUg
QWRvYmUgRmxhc2ggcGxheWVyIHJlcXVpcmVkIHRvIHZpZXcgaXQuPC9wPjwvZGl2PiI7CiAgICAg
ICAgfSwKICAgICAgICBoYXNWYWxpZEZsYXNoVmVyc2lvbjogZnVuY3Rpb24gKCkgewogICAgICAg
ICAgICB2YXIgZmxhc2hWZXJzaW9uID0gc3dmb2JqZWN0LmdldEZsYXNoUGxheWVyVmVyc2lvbigp
OwogICAgICAgICAgICBjb25zb2xlLmxvZyhzd2ZvYmplY3QpOwogICAgICAgICAgICBpZiAoZmxh
c2hWZXJzaW9uKSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhmbGFzaFZlcnNpb24pOwog
ICAgICAgICAgICAgICAgcmV0dXJuIChmbGFzaFZlcnNpb24ubWFqb3IgPj0gOSk7CiAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJ7VmlkZW9VdGlsc30g
LSBmbGFzaFZlcnNpb24gaXMgdW5kZWZpbmVkLiIpCiAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGNyZWF0ZVNXRlBsYXllcjogZnVu
Y3Rpb24gKHBsYXllcikgewogICAgICAgICAgICBpZiAodGhpcy5oYXNWYWxpZEZsYXNoVmVyc2lv
bigpKSB7CiAgICAgICAgICAgICAgICB2YXIgZmxhc2h2YXJzID0gewogICAgICAgICAgICAgICAg
ICAgIG9iak5hbWU6IHBsYXllci5vYmpOYW1lLAogICAgICAgICAgICAgICAgICAgIGFsbG93UGxh
eWVyUG9wdXA6IHBsYXllci5hbGxvd1BsYXllclBvcHVwLAogICAgICAgICAgICAgICAgICAgIHBs
eU1lZGlhRW5hYmxlZDogcGxheWVyLnBseU1lZGlhRW5hYmxlZCwKICAgICAgICAgICAgICAgICAg
ICBtb3ZpZVdpZHRoOiBwbGF5ZXIud2lkdGgsCiAgICAgICAgICAgICAgICAgICAgbW92aWVIZWln
aHQ6IHBsYXllci5oZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgaG9zdDogcGxheWVyLmhvc3Qs
CiAgICAgICAgICAgICAgICAgICAgcGxheVZpZGVvOiB0aGlzLmFkZEV2ZW50TmFtZXNwYWNlKHBs
YXllci5ldmVudE5hbWVzcGFjZSwgcGxheWVyLnBsYXlWaWRlbyksCiAgICAgICAgICAgICAgICAg
ICAgcGF1c2VWaWRlbzogdGhpcy5hZGRFdmVudE5hbWVzcGFjZShwbGF5ZXIuZXZlbnROYW1lc3Bh
Y2UsIHBsYXllci5wYXVzZVZpZGVvKSwKICAgICAgICAgICAgICAgICAgICB1bnBhdXNlVmlkZW86
IHRoaXMuYWRkRXZlbnROYW1lc3BhY2UocGxheWVyLmV2ZW50TmFtZXNwYWNlLCBwbGF5ZXIudW5w
YXVzZVZpZGVvKSwKICAgICAgICAgICAgICAgICAgICBnZXRTZWVrOiB0aGlzLmFkZEV2ZW50TmFt
ZXNwYWNlKHBsYXllci5ldmVudE5hbWVzcGFjZSwgcGxheWVyLmdldFNlZWspLAogICAgICAgICAg
ICAgICAgICAgIHN0b3BWaWRlbzogdGhpcy5hZGRFdmVudE5hbWVzcGFjZShwbGF5ZXIuZXZlbnRO
YW1lc3BhY2UsIHBsYXllci5zdG9wVmlkZW8pLAogICAgICAgICAgICAgICAgICAgIGNyZWF0ZUFk
dmVydGlzZW1lbnQ6IHRoaXMuYWRkRXZlbnROYW1lc3BhY2UocGxheWVyLmV2ZW50TmFtZXNwYWNl
LCBwbGF5ZXIuY3JlYXRlQWR2ZXJ0aXNlbWVudCksCiAgICAgICAgICAgICAgICAgICAgb3BlblBv
cFVwUGxheWVyOiB0aGlzLmFkZEV2ZW50TmFtZXNwYWNlKHBsYXllci5ldmVudE5hbWVzcGFjZSwg
cGxheWVyLm9wZW5Qb3BVcFBsYXllciksCiAgICAgICAgICAgICAgICAgICAgb3Blbk1pY3JvUG9w
VXBQbGF5ZXI6IHRoaXMuYWRkRXZlbnROYW1lc3BhY2UocGxheWVyLmV2ZW50TmFtZXNwYWNlLCBw
bGF5ZXIub3Blbk1pY3JvUG9wVXBQbGF5ZXIpLAogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
TG9hZFZpZGVvOiB0aGlzLmFkZEV2ZW50TmFtZXNwYWNlKHBsYXllci5ldmVudE5hbWVzcGFjZSwg
cGxheWVyLmNvbnRpbnVlTG9hZFZpZGVvKSwKICAgICAgICAgICAgICAgICAgICBwbGF5TmV4dFZp
ZGVvOiB0aGlzLmFkZEV2ZW50TmFtZXNwYWNlKHBsYXllci5ldmVudE5hbWVzcGFjZSwgcGxheWVy
LnBsYXlOZXh0VmlkZW8pCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgaWYgKHBs
YXllci5zd2ZVUkwgPT0gIi9tZWRpYS9zd2YvVmlkZW9NaWNyb1BsYXllci5zd2YiKSB7CiAgICAg
ICAgICAgICAgICAgICAgcGxheWVyLmNoYWluVmlkZW9zID0gMTsKICAgICAgICAgICAgICAgICAg
ICB2YXIgY2hhaW5WaWRlb3NGbGFnID0gZG9qby5nZXRPYmplY3QoImRqLmNvbnRleHQudmlkZW8u
Y2hhaW5WaWRlb3MiKTsKICAgICAgICAgICAgICAgICAgICBpZiAoY2hhaW5WaWRlb3NGbGFnICE9
IHVuZGVmaW5lZCAmJiBjaGFpblZpZGVvc0ZsYWcgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIHBsYXllci5jaGFpblZpZGVvcyA9IDA7CiAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgIGZsYXNodmFycy5jaGFpblZpZGVvcyA9IHBsYXllci5jaGFpblZp
ZGVvczsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAg
ICAgICAgICAgc3dmb2JqZWN0LmVtYmVkU1dGKGRqLmNvbnRleHQuY29yZS5jZG5QcmVmaXggKyBw
bGF5ZXIuc3dmVVJMLCBwbGF5ZXIuY29udGFpbmVySUQsIHBsYXllci53aWR0aCwgcGxheWVyLmhl
aWdodCwgcGxheWVyLmZsYXNoVmVyc2lvbiwgIiIsIGZsYXNodmFycywgewogICAgICAgICAgICAg
ICAgICAgICAgICBhbGxvd3NjcmlwdGFjY2VzczogcGxheWVyLmFsbG93U2NyaXB0QWNjZXNzLAog
ICAgICAgICAgICAgICAgICAgICAgICB3bW9kZTogIm9wYXF1ZSIKICAgICAgICAgICAgICAgICAg
ICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBwbGF5ZXIuaWQKICAgICAgICAgICAg
ICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAg
ICAgICBjb25zb2xlLmVycm9yKCJFcnJvciBvbiBlbWJlbmRpbmcgIiArIGUpOwogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhpcy5ub25TdXBw
b3J0aW5nRmxhc2hQbGF5ZXIocGxheWVyLmNvbnRhaW5lcklEKTsKICAgICAgICAgICAgfQogICAg
ICAgIH0sCiAgICAgICAgYWRkRXZlbnROYW1lc3BhY2U6IGZ1bmN0aW9uIChucywgZXZlbnQpIHsK
ICAgICAgICAgICAgaWYgKGV2ZW50ID09PSBudWxsIHx8IGV2ZW50ID09PSAiIikgewogICAgICAg
ICAgICAgICAgcmV0dXJuIGV2ZW50OwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgcmV0dXJuIG5zICsgIi4iICsgZXZlbnQ7CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAg
ICAgIHBvcFVwUGxheWVyOiBmdW5jdGlvbiAocGFyYW1ldGVycykgewogICAgICAgICAgICB2YXIg
cG9wVXBQYWdlVVJMID0gIi9wdWJsaWMvcGFnZS8wXzBfV1BfMzAwMS5odG1sIjsKICAgICAgICAg
ICAgaWYgKGRqLmNvbnRleHQudmlkZW9DZW50ZXIucG9wVXBQYWdlVVJMKSB7CiAgICAgICAgICAg
ICAgICBwb3BVcFBhZ2VVUkwgPSBkai5jb250ZXh0LnZpZGVvQ2VudGVyLnBvcFVwUGFnZVVSTDsK
ICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgcG9wVXBXaW5kb3cgPSB3aW5kb3cub3Blbihw
b3BVcFBhZ2VVUkwgKyAnP2N1cnJlbnRQbGF5aW5nTG9jYXRpb249JyArIHBhcmFtZXRlcnMucGxh
eUxvY2F0aW9uICsgJyZjdXJyZW50bHlQbGF5aW5nQ29sbGVjdGlvbj0nICsgZXNjYXBlKHBhcmFt
ZXRlcnMuY29sbGVjdGlvbikgKyAnJmN1cnJlbnRseVBsYXlpbmdWaWRlb0lkPScgKyBwYXJhbWV0
ZXJzLnZpZGVvSUQsICdwb3BVcFBsYXllcicsICdoZWlnaHQ9NjkwLHdpZHRoPTUxMCxsZWZ0PScg
KyAoKHNjcmVlbi53aWR0aCAtIE51bWJlcihwYXJhbWV0ZXJzLndpZHRoKSkgLyAyKSArICcsdG9w
PScgKyAoc2NyZWVuLmhlaWdodCAtIE51bWJlcihwYXJhbWV0ZXJzLmhlaWdodCkpIC8gMiArICcs
cmVzaXphYmxlPXllcyxzY3JvbGxiYXJzPW5vLHRvb2xiYXI9bm8sc3RhdHVzPW5vJyk7CiAgICAg
ICAgfSwKICAgICAgICBpc0dVSUQ6IGZ1bmN0aW9uIChndWlkKSB7CiAgICAgICAgICAgIHJldHVy
biBndWlkLm1hdGNoKC97XHd7OH0tXHd7NH0tXHd7NH0tXHd7NH0tXHd7MTJ9fS8pOwogICAgICAg
IH0sCiAgICAgICAgbm9ybWFsaXplR3VpZDogZnVuY3Rpb24gKGd1aWQpIHsKICAgICAgICAgICAg
cmV0dXJuIHRoaXMuaXNHVUlEKGd1aWQpID8gZ3VpZCA6ICJ7IiArIGd1aWQgKyAifSI7CiAgICAg
ICAgfSwKICAgICAgICBvbW5pdHVyZUVuY29kaW5nOiBmdW5jdGlvbiAoY29sLCBzdWJjb2wsIHR5
cGUpIHsKICAgICAgICAgICAgaWYgKGNvbCA9PSAnTmV3cycpIHsKICAgICAgICAgICAgICAgIGlm
IChzdWJjb2wgPT0gJ1BvbGl0aWNzJyAmJiB0eXBlID09ICdzJykgewogICAgICAgICAgICAgICAg
ICAgIHJldHVybiAnUG9saXRpY3MgJiBDYW1wYWlnbic7CiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICBpZiAodGhpcy5lbXB0eU9yTnVsbChzdWJjb2wpKSB7CiAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuICdVUyc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAg
ICAgICAgaWYgKGNvbCA9PSAnTWFuYWdlbWVudCcpIHsKICAgICAgICAgICAgICAgIGlmICh0aGlz
LmVtcHR5T3JOdWxsKHN1YmNvbCkgJiYgdHlwZSA9PSAnYycpIHsKICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gJ0J1c2luZXNzJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlm
ICh0aGlzLmVtcHR5T3JOdWxsKHN1YmNvbCkgJiYgdHlwZSA9PSAncycpIHsKICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gJ01hbmFnZW1lbnQnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgaWYgKHN1YmNvbCA9PSAnQnVzaW5lc3MgSW5zaWdodCcpIHsKICAgICAgICAgICAgICAg
ICAgICBpZiAodHlwZSA9PSAnYycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdC
dXNpbmVzcyc7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuICdCdXNpbmVzcyBJbnNpZ2h0JzsKICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gJ0J1c2luZXNzJzsKICAgICAg
ICAgICAgfQogICAgICAgICAgICBpZiAoY29sID09ICdMaWZlc3R5bGUnICYmIHR5cGUgPT0gJ2Mn
KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJ0xpZmUgJiBTdHlsZSc7CiAgICAgICAgICAgIH0K
ICAgICAgICAgICAgaWYgKGNvbCA9PSAnU3BlY2lhbCBQYWNrYWdlcycpIHsKICAgICAgICAgICAg
ICAgIGlmIChzdWJjb2wgPT0gJ0pvdXJuYWwgUmVwb3J0cycgJiYgdHlwZSA9PSAnYycpIHsKICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gJ1NwZWNpYWwnOwogICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgaWYgKHN1YmNvbCA9PSAnSm91cm5hbCBSZXBvcnRzJyAmJiB0eXBlID09ICdz
JykgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAnSW4tRGVwdGggUmVwb3J0cyc7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc3ViY29sID09ICdKb3VybmFsIFdvbWVu
JyAmJiB0eXBlID09ICdjJykgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAnQ2FyZWVycyc7
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc3ViY29sID09ICdKb3VybmFs
IFdvbWVuJyAmJiB0eXBlID09ICdzJykgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAnSm91
cm5hbCBXb21lbic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAg
aWYgKHR5cGUgPT0gJ3MnICYmIHRoaXMuZW1wdHlPck51bGwoc3ViY29sKSkgewogICAgICAgICAg
ICAgICAgcmV0dXJuIGNvbDsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodHlwZSA9PSAn
cycpIHsKICAgICAgICAgICAgICAgIHJldHVybiBzdWJjb2w7CiAgICAgICAgICAgIH0KICAgICAg
ICAgICAgaWYgKHR5cGUgPT0gJ2MnKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gY29sOwogICAg
ICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBpc1ZpZGVvU3VwcG9ydGVkOiBmdW5jdGlvbiAo
KSB7CiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5faXNIdG1sNSA9PT0gInVuZGVmaW5lZCIp
IHsKICAgICAgICAgICAgICAgIHZhciBkZXRlY3QgPSAoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
dmlkZW8nKSB8fCBmYWxzZSksCiAgICAgICAgICAgICAgICAgICAgbXA0Q3B0ID0gJ3ZpZGVvL21w
NDsgY29kZWNzPSJhdmMxLjQyRTAxRSwgbXA0YS40MC4yIicsCiAgICAgICAgICAgICAgICAgICAg
b2dnQ3B0ID0gJ3ZpZGVvL29nZzsgY29kZWNzPSJ0aGVvcmEsIHZvcmJpcyInOwogICAgICAgICAg
ICAgICAgdGhpcy5faXNIdG1sNSA9IGRldGVjdCAmJiAodHlwZW9mIGRldGVjdC5jYW5QbGF5VHlw
ZSAhPT0gInVuZGVmaW5lZCIpOwogICAgICAgICAgICAgICAgdGhpcy5faXNIMjY0ID0gdGhpcy5f
aXNIdG1sNSAmJiAoZGV0ZWN0LmNhblBsYXlUeXBlKG1wNENwdCkgPT09ICJtYXliZSIgfHwgZGV0
ZWN0LmNhblBsYXlUeXBlKG1wNENwdCkgPT09ICJwcm9iYWJseSIpOwogICAgICAgICAgICAgICAg
dGhpcy5faXNPZ2cgPSB0aGlzLl9pc0h0bWw1ICYmIChkZXRlY3QuY2FuUGxheVR5cGUob2dnQ3B0
KSA9PT0gIm1heWJlIiB8fCBkZXRlY3QuY2FuUGxheVR5cGUob2dnQ3B0KSA9PT0gInByb2JhYmx5
Iik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzSHRtbDU7CiAgICAg
ICAgfSwKICAgICAgICBpc09nZ1RoZW9yYVZpZGVvU3VwcG9ydGVkOiBmdW5jdGlvbiAoKSB7CiAg
ICAgICAgICAgIHJldHVybiAodGhpcy5pc1ZpZGVvU3VwcG9ydGVkKCkgJiYgdGhpcy5faXNPZ2cp
OwogICAgICAgIH0sCiAgICAgICAgaXNIMjY0QmFzZWxpbmVWaWRlb1N1cHBvcnRlZDogZnVuY3Rp
b24gKCkgewogICAgICAgICAgICByZXR1cm4gKHRoaXMuaXNWaWRlb1N1cHBvcnRlZCgpICYmIHRo
aXMuX2lzSDI2NCk7CiAgICAgICAgfSwKICAgICAgICBjYWxsVGhyb3VnaERpc3BhdGNoOiBmdW5j
dGlvbiAoY2FsbGJhY2ssIGNvbnRleHQpIHsKICAgICAgICAgICAgdmFyIGxpbmsgPSBkb2pvLmNy
ZWF0ZSgnYScsIHsKICAgICAgICAgICAgICAgICJpcyI6ICJmYWxzZSIKICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgIGRvam8ucGxhY2UobGluaywgZG9qby5ib2R5KCkpOwogICAgICAgICAgICB2
YXIgbGlua0lkID0gZGoudXRpbC5FbGVtZW50LmlkZW50aWZ5KGxpbmspOwogICAgICAgICAgICBk
b2pvLmNvbm5lY3QobGluaywgImNsaWNrIiwgZnVuY3Rpb24gKGV2ZW50KSB7CiAgICAgICAgICAg
ICAgICBkb2pvLnN0b3BFdmVudChldmVudCk7CiAgICAgICAgICAgICAgICBpZiAobGluay5nZXRB
dHRyaWJ1dGUoImlzIikgPT09ICJ0cnVlIikgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgbGluay5zZXRBdHRy
aWJ1dGUoImlzIiwgInRydWUiKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNh
bGxiYWNrLmNhbGwoY29udGV4dCk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBzZXRUaW1l
b3V0KGRvam8uaGl0Y2godGhpcywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgdGhpcy5f
ZG9FdmVudERpc3BhdGNoKGxpbmtJZCk7CiAgICAgICAgICAgIH0pLCA0MDApOwogICAgICAgIH0s
CiAgICAgICAgX2RvRXZlbnREaXNwYXRjaDogZnVuY3Rpb24gKGVsSWQpIHsKICAgICAgICAgICAg
dmFyIGV2dCwgZWwgPSBkb2pvLmJ5SWQoZWxJZCk7CiAgICAgICAgICAgIGlmIChkb2N1bWVudC5j
cmVhdGVFdmVudCkgewogICAgICAgICAgICAgICAgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQo
Ik1vdXNlRXZlbnRzIik7CiAgICAgICAgICAgICAgICBpZiAoZXZ0LmluaXRNb3VzZUV2ZW50KSB7
CiAgICAgICAgICAgICAgICAgICAgZXZ0LmluaXRNb3VzZUV2ZW50KCJjbGljayIsIHRydWUsIHRy
dWUsIHdpbmRvdywgMCwgMCwgMCwgMCwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDAs
IG51bGwpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBldnQg
PSBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfShldnQpID8gZWwuZGlzcGF0
Y2hFdmVudChldnQpIDogKGVsLmNsaWNrICYmIGVsLmNsaWNrKCkpOwogICAgICAgIH0KICAgIH07
Cn0oKSk7CmRvam8ucHJvdmlkZSgiZGoudXRpbC5WaWRlbyIpOwpkb2pvLnJlcXVpcmUoImRqLmxh
bmciKTsKZG9qby5yZXF1aXJlKCJkai51dGlsLkNvb2tpZSIpOwpkb2pvLnJlcXVpcmUoImRqLnV0
aWwuT2JzZXJ2ZXIiKTsKZG9qby5yZXF1aXJlKCJkai51dGlsLk9tbml0dXJlIik7CmRvam8ucmVx
dWlyZSgiZGoudXRpbC5QYWdlIik7CmRvam8ucmVxdWlyZSgiZGoudXRpbC5SZWdpb24iKTsKZG9q
by5yZXF1aXJlKCJkai51dGlsLlVzZXIiKTsKZG9qby5yZXF1aXJlKCJkai51dGlsLlF1ZXJ5Iik7
CihmdW5jdGlvbiAoKSB7CiAgICB2YXIgZGp1ID0gZGoudXRpbCwKICAgICAgICBkanAgPSBkai51
dGlsLlBhZ2UsCiAgICAgICAgb2JzID0gbmV3IGRqdS5PYnNlcnZlcihkai51dGlsLlZpZGVvKSwK
ICAgICAgICBwbGF5ZXJzID0ge307CiAgICBkanUuVmlkZW8gPSB7CiAgICAgICAgdW5wYXVzZVZp
ZGVvOiBmdW5jdGlvbiAocGxheWVySWQpIHsKICAgICAgICAgICAgb2JzLmZpcmVCeU5hbWUoInVu
cGF1c2VWaWRlbyIsIHBsYXllcklkKTsKICAgICAgICB9LAogICAgICAgIHBhdXNlVmlkZW86IGZ1
bmN0aW9uIChwbGF5ZXJJZCkgewogICAgICAgICAgICBvYnMuZmlyZUJ5TmFtZSgicGF1c2VWaWRl
byIsIHBsYXllcklkKTsKICAgICAgICB9LAogICAgICAgIHBsYXlWaWRlbzogZnVuY3Rpb24gKHBs
YXllcklkKSB7CiAgICAgICAgICAgIG9icy5maXJlQnlOYW1lKCJwbGF5VmlkZW8iLCBwbGF5ZXJJ
ZCk7CiAgICAgICAgfSwKICAgICAgICBnZXRTZWVrOiBmdW5jdGlvbiAocGxheWVySWQpIHsKICAg
ICAgICAgICAgb2JzLmZpcmVCeU5hbWUoImdldFNlZWsiLCBwbGF5ZXJJZCk7CiAgICAgICAgfSwK
ICAgICAgICBzdG9wVmlkZW86IGZ1bmN0aW9uIChwbGF5ZXJJZCkgewogICAgICAgICAgICBvYnMu
ZmlyZUJ5TmFtZSgic3RvcFZpZGVvIiwgcGxheWVySWQpOwogICAgICAgIH0sCiAgICAgICAgY29s
bGFwc2VQbGF5ZXI6IGZ1bmN0aW9uIChwbGF5ZXJJZCkgewogICAgICAgICAgICBvYnMuZmlyZUJ5
TmFtZSgiY29sbGFwc2VQbGF5ZXIiLCBwbGF5ZXJJZCk7CiAgICAgICAgfSwKICAgICAgICBleHBh
bmRQbGF5ZXI6IGZ1bmN0aW9uIChwbGF5ZXJJZCkgewogICAgICAgICAgICBvYnMuZmlyZUJ5TmFt
ZSgiZXhwYW5kUGxheWVyIiwgcGxheWVySWQpOwogICAgICAgIH0sCiAgICAgICAgaXNWaWRlb1Bs
YXllckNvbGxhcHNlZDogZnVuY3Rpb24gKHBsYXllcklkKSB7CiAgICAgICAgICAgIHZhciBwbGF5
ZXIgPSB0aGlzLl9nZXRPckNyZWF0ZVBsYXllcihwbGF5ZXJJZCk7CiAgICAgICAgICAgIGlmIChw
bGF5ZXIuaXNDb2xsYXBzZWQpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICAgICB9CiAgICAgICAgICAgIHZhciBjb29raWUgPSBkanUuQ29va2llLmdldEdyb3VwQ29va2ll
KCJESkNPT0tJRSIsICJQTEFZRVJDT0xMQVBTRURfIiArIHBsYXllcklkKSwKICAgICAgICAgICAg
ICAgIGlzUGxheWVyQ29sbGFwc2VkID0gKGNvb2tpZSA9PT0gInllcyIpOwogICAgICAgICAgICBp
ZiAoaXNQbGF5ZXJDb2xsYXBzZWQpIHsKICAgICAgICAgICAgICAgIHRoaXMuX2NvbGxhcHNlUGxh
eWVyQ2FsbGJhY2socGxheWVySWQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHBsYXllci5p
c0NvbGxhcHNlZCA9IGlzUGxheWVyQ29sbGFwc2VkOwogICAgICAgICAgICByZXR1cm4gcGxheWVy
LmlzQ29sbGFwc2VkOwogICAgICAgIH0sCiAgICAgICAgc3Vic2NyaWJlOiBmdW5jdGlvbiAodmlk
ZW9FdmVudE5hbWUsIGNhbGxiYWNrLCBjb250ZXh0KSB7CiAgICAgICAgICAgIG9icy5zdWJzY3Jp
YmVCeU5hbWUodmlkZW9FdmVudE5hbWUsIGNhbGxiYWNrLCBjb250ZXh0KTsKICAgICAgICB9LAog
ICAgICAgIF9nZXRPckNyZWF0ZVBsYXllcjogZnVuY3Rpb24gKHBsYXllcklkKSB7CiAgICAgICAg
ICAgIGlmICghcGxheWVyc1twbGF5ZXJJZF0pIHsKICAgICAgICAgICAgICAgIHBsYXllcnNbcGxh
eWVySWRdID0gewogICAgICAgICAgICAgICAgICAgIGlzQ29sbGFwc2VkOiBmYWxzZSwKICAgICAg
ICAgICAgICAgICAgICBsYXJnZXN0SGVpZ2h0OiAyNSwKICAgICAgICAgICAgICAgICAgICBzbWFs
bGVzdEhlaWdodDogMjUKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICAg
ICAgcmV0dXJuIHBsYXllcnNbcGxheWVySWRdOwogICAgICAgIH0sCiAgICAgICAgaGFuZGxlUGFn
ZVJlZnJlc2g6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGR1cCA9IGRqdS5QYWdlLAog
ICAgICAgICAgICAgICAgb25DYiA9IGZ1bmN0aW9uIChwbGF5ZXJJZCkgewogICAgICAgICAgICAg
ICAgICAgIGR1cC5lbmFibGVSZWZyZXNoKCk7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAg
ICAgICAgb2ZmQ2IgPSBmdW5jdGlvbiAocGxheWVySWQpIHsKICAgICAgICAgICAgICAgICAgICBk
dXAuZGlzYWJsZVJlZnJlc2goKTsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIHRoaXMu
X3N1Yk9uT2ZmKG9uQ2IsIG9mZkNiKTsKICAgICAgICB9LAogICAgICAgIGhhbmRsZU1vZHVsZVJl
ZnJlc2g6IGZ1bmN0aW9uIChtb2R1bGVOYW1lKSB7CiAgICAgICAgICAgIHZhciBvbkNiID0gZnVu
Y3Rpb24gKHBsYXllcklkKSB7CiAgICAgICAgICAgICAgICAgICAgZGpwLmVuYWJsZU1vZHVsZVJl
ZnJlc2gobW9kdWxlTmFtZSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGRqLm1vZHVsZVttb2R1
bGVOYW1lICsgJ191cGRhdGVyJ10pIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGoubW9kdWxl
W21vZHVsZU5hbWUgKyAnX3VwZGF0ZXInXS5zdGFydCgpOwogICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBvZmZDYiA9IGZ1bmN0aW9uIChwbGF5
ZXJJZCkgewogICAgICAgICAgICAgICAgICAgIGRqcC5kaXNhYmxlTW9kdWxlUmVmcmVzaChtb2R1
bGVOYW1lKTsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIHRoaXMuX3N1Yk9uT2ZmKG9u
Q2IsIG9mZkNiKTsKICAgICAgICB9LAogICAgICAgIGhhbmRsZVZpZGVvUGxheWVyOiBmdW5jdGlv
biAoKSB7CiAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlKCJjb2xsYXBzZVBsYXllciIsIHRoaXMu
X2NvbGxhcHNlUGxheWVyQ2FsbGJhY2ssIHRoaXMpOwogICAgICAgICAgICB0aGlzLnN1YnNjcmli
ZSgiZXhwYW5kUGxheWVyIiwgdGhpcy5fZXhwYW5kUGxheWVyQ2FsbGJhY2ssIHRoaXMpOwogICAg
ICAgIH0sCiAgICAgICAgX2dldFBsYXllckFuZFVwZGF0ZUhlaWdodHM6IGZ1bmN0aW9uIChwbGF5
ZXJJZCkgewogICAgICAgICAgICB2YXIgcGxheWVyID0gdGhpcy5fZ2V0T3JDcmVhdGVQbGF5ZXIo
cGxheWVySWQpOwogICAgICAgICAgICBwbGF5ZXIubm9kZSA9IGRvam8uYnlJZChwbGF5ZXJJZCk7
CiAgICAgICAgICAgIHBsYXllci5sYXJnZXN0SGVpZ2h0ID0gKHBsYXllci5ub2RlLmhlaWdodCA+
IHBsYXllci5sYXJnZXN0SGVpZ2h0KSA/IHBsYXllci5ub2RlLmhlaWdodCA6IHBsYXllci5sYXJn
ZXN0SGVpZ2h0OwogICAgICAgICAgICBwbGF5ZXIuc21hbGxlc3RIZWlnaHQgPSAocGxheWVyLm5v
ZGUuaGVpZ2h0IDwgcGxheWVyLnNtYWxsZXN0SGVpZ2h0KSA/IHBsYXllci5ub2RlLmhlaWdodCA6
IHBsYXllci5zbWFsbGVzdEhlaWdodDsKICAgICAgICAgICAgcmV0dXJuIHBsYXllcjsKICAgICAg
ICB9LAogICAgICAgIF9jb2xsYXBzZVBsYXllckNhbGxiYWNrOiBmdW5jdGlvbiAocGxheWVySWQp
IHsKICAgICAgICAgICAgdmFyIHBsYXllciA9IHRoaXMuX2dldFBsYXllckFuZFVwZGF0ZUhlaWdo
dHMocGxheWVySWQpOwogICAgICAgICAgICBpZiAocGxheWVyLmlzQ29sbGFwc2VkKSB7CiAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcGxheWVyLmlzQ29s
bGFwc2VkID0gdHJ1ZTsKICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRqLnV0aWwuUXVlcnku
dXAocGxheWVyLm5vZGUsICJkaXYiKTsKICAgICAgICAgICAgaWYgKGNvbnRhaW5lciAhPT0gZG9q
by5kb2MpIHsKICAgICAgICAgICAgICAgIGRvam8uc3R5bGUoY29udGFpbmVyLCB7CiAgICAgICAg
ICAgICAgICAgICAgd2lkdGg6ICIiLAogICAgICAgICAgICAgICAgICAgIGhlaWdodDogIiIKICAg
ICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGRvam8uYW5pbShwbGF5
ZXIubm9kZSwgewogICAgICAgICAgICAgICAgaGVpZ2h0OiB7CiAgICAgICAgICAgICAgICAgICAg
ZW5kOiBwbGF5ZXIuc21hbGxlc3RIZWlnaHQKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
fSk7CiAgICAgICAgICAgIGRqdS5Db29raWUuc2V0R3JvdXBDb29raWUoIkRKQ09PS0lFIiwgIlBM
QVlFUkNPTExBUFNFRF8iICsgcGxheWVySWQsICJ5ZXMiLCAoMSAvIDI0KSk7CiAgICAgICAgfSwK
ICAgICAgICBfZXhwYW5kUGxheWVyQ2FsbGJhY2s6IGZ1bmN0aW9uIChwbGF5ZXJJZCkgewogICAg
ICAgICAgICB2YXIgcGxheWVyID0gdGhpcy5fZ2V0UGxheWVyQW5kVXBkYXRlSGVpZ2h0cyhwbGF5
ZXJJZCk7CiAgICAgICAgICAgIGlmICghcGxheWVyLmlzQ29sbGFwc2VkKSB7CiAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcGxheWVyLmlzQ29sbGFwc2Vk
ID0gZmFsc2U7CiAgICAgICAgICAgIGRvam8uYW5pbShwbGF5ZXIubm9kZSwgewogICAgICAgICAg
ICAgICAgaGVpZ2h0OiB7CiAgICAgICAgICAgICAgICAgICAgZW5kOiBwbGF5ZXIubGFyZ2VzdEhl
aWdodAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgZGp1LkNv
b2tpZS5kZWxldGVHcm91cENvb2tpZSgiREpDT09LSUUiLCAiUExBWUVSQ09MTEFQU0VEXyIgKyBw
bGF5ZXJJZCk7CiAgICAgICAgfSwKICAgICAgICBoYW5kbGVOZXdzSHViUGFnZVJlZnJlc2g6IGZ1
bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIHJlZnJlc2hOZXdzSHViUGFnZSA9IGZ1bmN0aW9u
ICgpIHsKICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5wYXRobmFtZSA9IGxvY2F0aW9uLnBh
dGhuYW1lOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmUoInN0
b3BWaWRlbyIsIHJlZnJlc2hOZXdzSHViUGFnZSwgdGhpcyk7CiAgICAgICAgfSwKICAgICAgICBf
c3ViT25PZmY6IGZ1bmN0aW9uIChvbiwgb2ZmKSB7CiAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJl
KCJ1bnBhdXNlVmlkZW8iLCBvZmYsIHRoaXMpOwogICAgICAgICAgICB0aGlzLnN1YnNjcmliZSgi
cGF1c2VWaWRlbyIsIG9mZiwgdGhpcyk7CiAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlKCJwbGF5
VmlkZW8iLCBvZmYsIHRoaXMpOwogICAgICAgICAgICB0aGlzLnN1YnNjcmliZSgiZ2V0U2VlayIs
IG9mZiwgdGhpcyk7CiAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlKCJzdG9wVmlkZW8iLCBvbiwg
dGhpcyk7CiAgICAgICAgfSwKICAgICAgICBmb3JtYXRkdXJhdGlvbjogZnVuY3Rpb24gKGQpIHsK
ICAgICAgICAgICAgdmFyIG1pbnV0ZXMgPSBNYXRoLmZsb29yKGQgLyA2MCk7CiAgICAgICAgICAg
IHZhciBzZWNvbmRzID0gZCAlIDYwOwogICAgICAgICAgICBpZiAoc2Vjb25kcyA8IDEwKSB7CiAg
ICAgICAgICAgICAgICBzZWNvbmRzID0gJzAnICsgc2Vjb25kczsKICAgICAgICAgICAgfQogICAg
ICAgICAgICByZXR1cm4gJycgKyBtaW51dGVzICsgJzonICsgc2Vjb25kczsKICAgICAgICB9LAog
ICAgICAgIGdldFZpZGVvRGV0YWlsczogZnVuY3Rpb24gKGFyZ3MpIHsKICAgICAgICAgICAgaWYg
KCFhcmdzLmlkKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIk5vIElkLiI7CiAgICAgICAgICAg
IH0KICAgICAgICAgICAgdmFyIHVybCA9ICcvYXBpLXZpZGVvL2dldF92aWRlb19pbmZvLmFzcD9n
dWlkPScgKyBhcmdzLmlkOwogICAgICAgICAgICBpZiAoYXJncy5maWVsZHMpIHsKICAgICAgICAg
ICAgICAgIHVybCArPSAnJmZpZWxkcz0nICsgYXJncy5maWVsZHM7CiAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICB1cmwgKz0gJyZmaWVsZHM9YWxsJzsKICAgICAgICAgICAgfQog
ICAgICAgICAgICBkb2pvLmdldE9iamVjdCgiZGoudXRpbC5WaWRlby5qc29uRGF0YSIsIHRydWUp
OwogICAgICAgICAgICB2YXIgcGFyYW1zID0gewogICAgICAgICAgICAgICAgY29udGV4dDogdGhp
cywKICAgICAgICAgICAgICAgIGhhbmRsZUFzOiAianNvbiIsCiAgICAgICAgICAgICAgICBzeW5j
OiB0cnVlLAogICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAiYXBwbGljYXRpb24vanNvbiIs
CiAgICAgICAgICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24gKGpzb24pIHsKICAgICAgICAgICAg
ICAgICAgICBkanUuVmlkZW8uaGFuZGxlR2V0VmlkZW9EZXRhaWxzKGpzb24sIGFyZ3MuaWQpOwog
ICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2s6IGZ1bmN0aW9u
ICgpIHsKICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJGYWlsZWQgd2hpbGUgZXhl
Y3V0aW5nIHV0aWwuVmlkZW8uZ2V0VmlkZW9EZXRhaWxzIik7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgIH07CiAgICAgICAgICAgIGRqLnV0aWwuVmlkZW8uZ2V0VmlkZW9EYXRhKHVybCwg
cGFyYW1zKTsKICAgICAgICAgICAgcmV0dXJuIGRqdS5WaWRlby5qc29uRGF0YVthcmdzLmlkXTsK
ICAgICAgICB9LAogICAgICAgIGhhbmRsZUdldFZpZGVvRGV0YWlsczogZnVuY3Rpb24gKGpzb24s
IGlkKSB7CiAgICAgICAgICAgIGRqdS5WaWRlby5qc29uRGF0YVtpZF0gPSBqc29uOwogICAgICAg
IH0sCiAgICAgICAgZ2V0VmlkZW9EYXRhOiBmdW5jdGlvbiAodXJsLCBwYXJhbXMpIHsKICAgICAg
ICAgICAgcGFyYW1zLnJlc3BvbnNlVHlwZSA9ICghcGFyYW1zLnJlc3BvbnNlVHlwZSkgPyAidGV4
dC94bWwiIDogcGFyYW1zLnJlc3BvbnNlVHlwZTsKICAgICAgICAgICAgdmFyIGlzUmVzcG9uc2VK
c29uID0gKHBhcmFtcy5yZXNwb25zZVR5cGUuaW5kZXhPZigianNvbiIpID4gLTEpOwogICAgICAg
ICAgICB0aGlzLl9zZW5kWGhyUmVxdWVzdCh1cmwsIHBhcmFtcywgewogICAgICAgICAgICAgICAg
cmVxdWVzdE1ldGhvZDogIkdFVCIsCiAgICAgICAgICAgICAgICBoYW5kbGVBczogKGlzUmVzcG9u
c2VKc29uKSA/ICJqc29uIiA6ICJ4bWwiLAogICAgICAgICAgICAgICAgYXBwZW5kQ2FjaGVCdXN0
ZXI6IHRydWUsCiAgICAgICAgICAgICAgICByZXF1ZXN0SGVhZGVyczogewogICAgICAgICAgICAg
ICAgICAgICJBY2NlcHQiOiBwYXJhbXMucmVzcG9uc2VUeXBlCiAgICAgICAgICAgICAgICB9LAog
ICAgICAgICAgICAgICAgc3luYzogKHBhcmFtcy5zeW5jID8gdHJ1ZSA6IGZhbHNlKQogICAgICAg
ICAgICB9KTsKICAgICAgICB9LAogICAgICAgIHBvc3RWaWRlb0RhdGE6IGZ1bmN0aW9uICh1cmws
IHBvc3REYXRhLCBwYXJhbXMpIHsKICAgICAgICAgICAgdGhpcy5fc2VuZFhoclJlcXVlc3QodXJs
LCBwYXJhbXMsIHsKICAgICAgICAgICAgICAgIHJlcXVlc3RNZXRob2Q6ICJQT1NUIiwKICAgICAg
ICAgICAgICAgIGNvbnRlbnQ6IGRvam8udG9Kc29uKHBvc3REYXRhKSwKICAgICAgICAgICAgICAg
IHJlcXVlc3RIZWFkZXJzOiB7CiAgICAgICAgICAgICAgICAgICAgIlgtSFRUUC1NZXRob2QtT3Zl
cnJpZGUiOiAiUE9TVCIsCiAgICAgICAgICAgICAgICAgICAgIkNvbnRlbnQtVHlwZSI6ICJhcHBs
aWNhdGlvbi9qc29uIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHN5bmM6IChw
YXJhbXMuc3luYyA/IHRydWUgOiBmYWxzZSkKICAgICAgICAgICAgfSk7CiAgICAgICAgfSwKICAg
ICAgICBwdXRWaWRlb0RhdGE6IGZ1bmN0aW9uICh1cmwsIHBvc3REYXRhLCBwYXJhbXMpIHsKICAg
ICAgICAgICAgdGhpcy5fc2VuZFhoclJlcXVlc3QodXJsLCBwYXJhbXMsIHsKICAgICAgICAgICAg
ICAgIHJlcXVlc3RNZXRob2Q6ICJQVVQiLAogICAgICAgICAgICAgICAgY29udGVudDogZG9qby50
b0pzb24ocG9zdERhdGEpLAogICAgICAgICAgICAgICAgcmVxdWVzdEhlYWRlcnM6IHsKICAgICAg
ICAgICAgICAgICAgICAiWC1IVFRQLU1ldGhvZC1PdmVycmlkZSI6ICJQVVQiLAogICAgICAgICAg
ICAgICAgICAgICJDb250ZW50LVR5cGUiOiAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICAgICAg
ICAgIH0sCiAgICAgICAgICAgICAgICBzeW5jOiAocGFyYW1zLnN5bmMgPyB0cnVlIDogZmFsc2Up
CiAgICAgICAgICAgIH0pOwogICAgICAgIH0sCiAgICAgICAgZGVsZXRlRGFzaGJvYXJkRGF0YTog
ZnVuY3Rpb24gKHVybCwgcG9zdERhdGEsIHBhcmFtcykgewogICAgICAgICAgICB0aGlzLl9zZW5k
WGhyUmVxdWVzdCh1cmwsIHBhcmFtcywgewogICAgICAgICAgICAgICAgcmVxdWVzdE1ldGhvZDog
IlBPU1QiLAogICAgICAgICAgICAgICAgY29udGVudDogZG9qby50b0pzb24ocG9zdERhdGEpLAog
ICAgICAgICAgICAgICAgcmVxdWVzdEhlYWRlcnM6IHsKICAgICAgICAgICAgICAgICAgICAiWC1I
VFRQLU1ldGhvZC1PdmVycmlkZSI6ICJERUxFVEUiLAogICAgICAgICAgICAgICAgICAgICJDb250
ZW50LVR5cGUiOiAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAg
ICAgICAgICBzeW5jOiAocGFyYW1zLnN5bmMgPyB0cnVlIDogZmFsc2UpCiAgICAgICAgICAgIH0p
OwogICAgICAgIH0sCiAgICAgICAgX3NlbmRYaHJSZXF1ZXN0OiBmdW5jdGlvbiAocmVxdWVzdFVy
bCwgdXNlclBhcmFtcywgcmVxdWVzdE9wdGlvbnMpIHsKICAgICAgICAgICAgdmFyIHBhcmFtcyA9
IGRqLmxhbmcuY2xvbmVNaXhpbih7CiAgICAgICAgICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24g
KCkge30KICAgICAgICAgICAgfSwgdXNlclBhcmFtcyk7CiAgICAgICAgICAgIHZhciBvcHRpb25z
ID0gZGoubGFuZy5jbG9uZU1peGluKHsKICAgICAgICAgICAgICAgIHJlcXVlc3RIZWFkZXJzOiB7
CiAgICAgICAgICAgICAgICAgICAgIkFjY2VwdCI6ICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAg
ICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGhhbmRsZUFzOiAianNvbiIsCiAgICAgICAgICAg
ICAgICBhcHBlbmRDYWNoZUJ1c3RlcjogZmFsc2UsCiAgICAgICAgICAgICAgICBzeW5jOiBmYWxz
ZQogICAgICAgICAgICB9LCByZXF1ZXN0T3B0aW9ucyk7CiAgICAgICAgICAgIGlmIChvcHRpb25z
LmFwcGVuZENhY2hlQnVzdGVyKSB7CiAgICAgICAgICAgICAgICByZXF1ZXN0VXJsID0gdGhpcy5f
YXBwZW5kQ2FjaGVCdXN0ZXIocmVxdWVzdFVybCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAg
dmFyIHhoclJlcSA9IHRoaXMuX2dldFJlcXVlc3RCeU1ldGhvZChvcHRpb25zLnJlcXVlc3RNZXRo
b2QpOwogICAgICAgICAgICB2YXIgZGVmZXJyZWQgPSB4aHJSZXEoewogICAgICAgICAgICAgICAg
dXJsOiByZXF1ZXN0VXJsLAogICAgICAgICAgICAgICAgaGVhZGVyczogb3B0aW9ucy5yZXF1ZXN0
SGVhZGVycywKICAgICAgICAgICAgICAgIGhhbmRsZUFzOiBvcHRpb25zLmhhbmRsZUFzLAogICAg
ICAgICAgICAgICAgcG9zdERhdGE6IG9wdGlvbnMuY29udGVudCwKICAgICAgICAgICAgICAgIHN5
bmM6IG9wdGlvbnMuc3luYywKICAgICAgICAgICAgICAgIGxvYWQ6IGZ1bmN0aW9uIChkYXRhLCBp
b2FyZ3MpIHsKICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmNvbnRleHQpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyYW1zLmNhbGxiYWNrLmFwcGx5KHBhcmFtcy5jb250ZXh0LCBb
ZGF0YSwgaW9hcmdzLnhociwgcGFyYW1zXSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmNhbGxiYWNrLmFwcGx5KHRoaXMsIFtkYXRh
LCBpb2FyZ3MueGhyLCBwYXJhbXNdKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICB9LAogICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvciwgaW9hcmdzKSB7
CiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiSFRUUCBzdGF0dXMgY29kZTogJXMs
IHJlc3BvbnNlOiAlbyIsIGlvYXJncy54aHIuc3RhdHVzLCBkYXRhKTsKICAgICAgICAgICAgICAg
ICAgICBpZiAodHlwZW9mIHBhcmFtcy5lcnJvckNhbGxiYWNrICE9PSAidW5kZWZpbmVkIikgewog
ICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZXJyb3JDYWxsYmFjay5hcHBseShwYXJhbXMu
Y29udGV4dCwgW2lvYXJncy54aHIuc3RhdHVzLCBpb2FyZ3MueGhyLCBwYXJhbXNdKTsKICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuY2Fs
bGJhY2suYXBwbHkocGFyYW1zLmNvbnRleHQsIFtpb2FyZ3MueGhyLnN0YXR1cywgaW9hcmdzLnho
ciwgcGFyYW1zXSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICB9KTsKICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVkOwogICAgICAgIH0sCiAgICAg
ICAgX2FwcGVuZENhY2hlQnVzdGVyOiBmdW5jdGlvbiAocmVxdWVzdFVybCkgewogICAgICAgICAg
ICB2YXIgY2IgPSAoTWF0aC5mbG9vcigxMDAwMDAwMCAqIE1hdGgucmFuZG9tKCkpKTsKICAgICAg
ICAgICAgcmVxdWVzdFVybCArPSAocmVxdWVzdFVybC5pbmRleE9mKCc/JykgPiAtMSkgPyAoIiZj
Yj0iICsgY2IpIDogKCI/Y2I9IiArIGNiKTsKICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3RVcmw7
CiAgICAgICAgfSwKICAgICAgICBfZ2V0UmVxdWVzdEJ5TWV0aG9kOiBmdW5jdGlvbiAocmVxdWVz
dE1ldGhvZCkgewogICAgICAgICAgICByZXR1cm4gKHJlcXVlc3RNZXRob2QgPT0gIkdFVCIpID8g
ZG9qby54aHJHZXQgOiBkb2pvLnhoclBvc3Q7CiAgICAgICAgfSwKICAgICAgICBnZXRVcmxQYXJh
bTogZnVuY3Rpb24gKHNyY1VybCwgbmFtZSkgewogICAgICAgICAgICBuYW1lID0gbmFtZS5yZXBs
YWNlKC9bXFtdLywgIlxcXFsiKS5yZXBsYWNlKC9bXF1dLywgIlxcXF0iKTsKICAgICAgICAgICAg
dmFyIHJlZ2V4UyA9ICJbXFw/Jl0iICsgbmFtZSArICI9KFteJiNdKikiOwogICAgICAgICAgICB2
YXIgcmVnZXggPSBuZXcgUmVnRXhwKHJlZ2V4Uyk7CiAgICAgICAgICAgIHZhciByZXN1bHRzID0g
cmVnZXguZXhlYyhzcmNVcmwpOwogICAgICAgICAgICBpZiAocmVzdWx0cyA9PT0gbnVsbCkgewog
ICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdHNbMV07CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAg
IG5vblN1cHBvcnRpbmdGbGFzaFBsYXllcjogZnVuY3Rpb24gKGRpdklkKSB7CiAgICAgICAgICAg
IGRvam8uYnlJZChkaXZJZCkuaW5uZXJIVE1MID0gIjxwPlRoaXMgY29udGVudCBjYW4gbm90IGJl
IGRpc3BsYXllZCBiZWNhdXNlIHlvdXIgIiArICJicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgdGhl
IEFkb2JlIEZsYXNoIHBsYXllciByZXF1aXJlZCB0byB2aWV3IGl0LjwvcD4iOwogICAgICAgIH0s
CiAgICAgICAgb21uaXR1cmVFbmNvZGluZzogZnVuY3Rpb24gKGNvbCwgc3ViY29sLCB0eXBlKSB7
CiAgICAgICAgICAgIGlmIChjb2wgPT0gJ05ld3MnKSB7CiAgICAgICAgICAgICAgICBpZiAoc3Vi
Y29sID09ICdQb2xpdGljcycgJiYgdHlwZSA9PSAncycpIHsKICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gJ1BvbGl0aWNzICYgQ2FtcGFpZ24nOwogICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgaWYgKCghdGhpcy5pc05vdEJsYW5rT3JOdWxsKHN1YmNvbCkpICYmIHR5cGUgPT0gJ2Mn
KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdVUyc7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICBpZiAoKCF0aGlzLmlzTm90QmxhbmtPck51bGwoc3ViY29sKSkgJiYgdHlw
ZSA9PSAncycpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1VTJzsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoY29sID09ICdNYW5hZ2VtZW50Jykg
ewogICAgICAgICAgICAgICAgaWYgKCghdGhpcy5pc05vdEJsYW5rT3JOdWxsKHN1YmNvbCkpICYm
IHR5cGUgPT0gJ2MnKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdCdXNpbmVzcyc7CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoKCF0aGlzLmlzTm90QmxhbmtPck51
bGwoc3ViY29sKSkgJiYgdHlwZSA9PSAncycpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4g
J01hbmFnZW1lbnQnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHN1YmNv
bCA9PSAnQnVzaW5lc3MgSW5zaWdodCcgJiYgdHlwZSA9PSAnYycpIHsKICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gJ0J1c2luZXNzJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
IGlmIChzdWJjb2wgPT0gJ0J1c2luZXNzIEluc2lnaHQnICYmIHR5cGUgPT0gJ3MnKSB7CiAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuICdCdXNpbmVzcyBJbnNpZ2h0JzsKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgIHJldHVybiAnQnVzaW5lc3MnOwogICAgICAgICAgICB9CiAgICAg
ICAgICAgIGlmIChjb2wgPT0gJ0xpZmVzdHlsZScpIHsKICAgICAgICAgICAgICAgIHJldHVybiAn
TGlmZSAmIFN0eWxlJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoY29sID09ICdTcGVj
aWFsIFBhY2thZ2VzJykgewogICAgICAgICAgICAgICAgaWYgKHN1YmNvbCA9PSAnSm91cm5hbCBS
ZXBvcnRzJyAmJiB0eXBlID09ICdjJykgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAnU3Bl
Y2lhbCc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc3ViY29sID09ICdK
b3VybmFsIFJlcG9ydHMnICYmIHR5cGUgPT0gJ3MnKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0
dXJuICdJbi1EZXB0aCBSZXBvcnRzJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
IGlmIChzdWJjb2wgPT0gJ0pvdXJuYWwgV29tZW4nICYmIHR5cGUgPT0gJ2MnKSB7CiAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuICdDYXJlZXJzJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgIGlmIChzdWJjb2wgPT0gJ0pvdXJuYWwgV29tZW4nICYmIHR5cGUgPT0gJ3MnKSB7CiAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuICdKb3VybmFsIFdvbWVuJzsKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodHlwZSA9PSAncycgJiYgISh0aGlzLmlz
Tm90QmxhbmtPck51bGwoc3ViY29sKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBjb2w7CiAg
ICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHR5cGUgPT0gJ3MnKSB7CiAgICAgICAgICAgICAg
ICByZXR1cm4gc3ViY29sOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0eXBlID09ICdj
JykgewogICAgICAgICAgICAgICAgcmV0dXJuIGNvbDsKICAgICAgICAgICAgfQogICAgICAgIH0s
CiAgICAgICAgaXNOb3RCbGFua09yTnVsbDogZnVuY3Rpb24gKHN0clZhcikgewogICAgICAgICAg
ICByZXR1cm4gKHN0clZhciAhPT0gJycgJiYgc3RyVmFyICE9PSBudWxsICYmIHR5cGVvZiBzdHJW
YXIgIT0gJ3VuZGVmaW5lZCcpOwogICAgICAgIH0sCiAgICAgICAgc2V0dXBDb25maWc6IGZ1bmN0
aW9uICh3aWRnZXQpIHsKICAgICAgICAgICAgdmFyIGNvbmZpZyA9IHt9OwogICAgICAgICAgICBj
b25maWcuZW1haWxVUkwgPSAnaHR0cDpcdTAwMkZcdTAwMkZ3d3cuZW1haWx0aGlzLmNsaWNrYWJp
bGl0eS5jb21cdTAwMkZldFx1MDAyRmVtYWlsVGhpcz9jbGlja01hcD1jcmVhdGUmZmI9WSZ1cmw9
QFZJREVPX0xJTktfVVJMJnRpdGxlPUBWSURFT19USVRMRSZyYW5kb209QFJBTkRPTV9OVU1CRVIm
cGFydG5lcklEPUBFTUFJTF9QQVJUTkVSX0lEJmltYWdlPUBWSURFT19TVElMTF9VUkwmZXhwaXJl
PSZzdW1tYXJ5PUBWSURFT19ERVNDUklQVElPTic7CiAgICAgICAgICAgIGNvbmZpZy5kb21haW5O
YW1lID0gJ3dzaic7CiAgICAgICAgICAgIGNvbmZpZy5lbWJlZENvbmZpZ1VSTCA9ICJodHRwOi8v
d3NqLnZvLmxsbndkLm5ldC9vMjgvcGxheWVycy8iOwogICAgICAgICAgICBjb25maWcucG9wVXBQ
YWdlVXJsID0gJy9wdWJsaWMvcGFnZS8wXzBfV1BfMzAwMS5odG1sJzsKICAgICAgICAgICAgaWYg
KGRqLmNvbnRleHQudmlkZW9DZW50ZXIucG9wVXBQYWdlVVJMKSB7CiAgICAgICAgICAgICAgICBj
b25maWcucG9wVXBQYWdlVXJsID0gZGouY29udGV4dC52aWRlb0NlbnRlci5wb3BVcFBhZ2VVUkw7
CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHNpdGVGcm1VcmwgPSB0aGlzLmdldFVybFBh
cmFtKHdpbmRvdy5sb2NhdGlvbi5ocmVmLCAnc2l0ZScpOwogICAgICAgICAgICB2YXIgc2l0ZUZy
bUNvbnR4dCA9ICcnOwogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgc2l0ZUZybUNv
bnR4dCA9IGRqLmNvbnRleHQudmlkZW9DZW50ZXIuaG9zdDsKICAgICAgICAgICAgfSBjYXRjaCAo
ZSkgewogICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiRXJyb3Igd2hpbGUgZ2V0dGluZyBz
aXRlIHZhbHVlIGZyb20gY29udGV4dC4gIiArIGUubWVzc2FnZSk7CiAgICAgICAgICAgIH0KICAg
ICAgICAgICAgY29uZmlnLnNpdGUgPSB0aGlzLmlzTm90QmxhbmtPck51bGwoc2l0ZUZybVVybCkg
PyBzaXRlRnJtVXJsIDogc2l0ZUZybUNvbnR4dDsKICAgICAgICAgICAgY29uZmlnLm1zcmMgPSB0
aGlzLmdldFVybFBhcmFtKHdpbmRvdy5sb2NhdGlvbi5ocmVmLCAnbXNyYycpOwogICAgICAgICAg
ICBjb25maWcucGxheUZyb21SZWdpc3RlcmVkVmlkZW9zID0gZmFsc2U7CiAgICAgICAgICAgIGNv
bmZpZy5wYWdlU2l6ZSA9IDEyOwogICAgICAgICAgICBjb25maWcuYnJvd3NpbmdHcm91cCA9ICJj
b2xsZWN0aW9uIjsKICAgICAgICAgICAgY29uZmlnLnBsYXlpbmdHcm91cCA9ICJjb2xsZWN0aW9u
IjsKICAgICAgICAgICAgY29uZmlnLnNraXBDb2xsZWN0aW9uID0gdHJ1ZTsKICAgICAgICAgICAg
Y29uZmlnLnByb3AyNCA9ICcnOwogICAgICAgICAgICBjb25maWcucHJvcDI1ID0gJyc7CiAgICAg
ICAgICAgIGNvbmZpZy5wcm9wMjcgPSAnJzsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAg
ICAgIGlmICh0eXBlb2Ygc2V0RWRpdGlvbiA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICAg
ICAgICAgIGNvbmZpZy5wcm9wMjQgPSBzZXRFZGl0aW9uKGRqLnV0aWwuUmVnaW9uLmdldFZpZXdC
eVJlZ2lvbigpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBjYXRjaCAoZSkgewog
ICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiY29va2llIHJlYWQgZXJyb3Igd2hpbGUgZmV0
Y2hpbmcgcHJvcDI0IDogIiArIGUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRyeSB7CiAg
ICAgICAgICAgICAgICBjb25maWcucHJvcDI1ID0gZGoudXRpbC5Db29raWUuZ2V0Q29va2llKCdU
UicpOwogICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmVy
cm9yKCJjb29raWUgcmVhZCBlcnJvciB3aGlsZSBmZXRjaGluZyBwcm9wMjUgOiAiICsgZSk7CiAg
ICAgICAgICAgIH0KICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIGNvbmZpZy5jb29r
aWVVc2VyVHlwZSA9IGRqLnV0aWwuQ29va2llLmdldENvb2tpZSgidXNlcl90eXBlIik7CiAgICAg
ICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoImNvb2tp
ZSByZWFkIGVycm9yIHdoaWxlIGZldGNoaW5nIGNvb2tpZVVzZXJUeXBlIDogIiArIGUpOwogICAg
ICAgICAgICB9CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBkai51dGlsLlVzZXIu
aXNMb2dnZWRJbihmdW5jdGlvbiAoaXNMb2dnZWRJbikgewogICAgICAgICAgICAgICAgICAgIGlm
IChpc0xvZ2dlZEluKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRqLnV0aWwuVXNlci5pc1N1
YkxvZ2dlZEluKGZ1bmN0aW9uIChzdWJMb2dnZWRJbikgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHN1YkxvZ2dlZEluKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uZmlnLnByb3AyNyA9ICdXU0pfc3ViX3llcyc7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5wcm9wMjcg
PSAnV1NKX21lbV95ZXMnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoY29uZmlnLmNvb2tpZVVzZXJUeXBlID09PSBudWxsIHx8IGNvbmZp
Zy5jb29raWVVc2VyVHlwZSAhPT0gInN1YnNjcmliZWQiKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25maWcucHJvcDI3ID0gJ1dTSl9mcmVlJzsKICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5wcm9wMjcgPSAn
V1NKX3JlZ195ZXMnOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAg
ICAgICAgICAgIGNvbnNvbGUuZXJyb3IoImNvb2tpZSByZWFkIGVycm9yIHdoaWxlIGZldGNoaW5n
IHByb3AyNyIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBjb25maWc7CiAgICAg
ICAgfQogICAgfTsKfSgpKTsKZG9qby5wcm92aWRlKCJkai51dGlsLlZpZGVvVHJhY2tpbmciKTsK
ZG9qby5yZXF1aXJlKCJkai51dGlsLlZpZGVvVXRpbHMiKTsKZG9qby5yZXF1aXJlKCJkai51dGls
LlRyYWNraW5nIik7CmRqLnV0aWwuVmlkZW9UcmFja2luZyA9IHsKICAgIGluaXQ6IGZ1bmN0aW9u
ICgpIHsKICAgICAgICBpZiAodHlwZW9mIHRoaXMub21uaXR1cmUgPT09ICJvYmplY3QiKSB7CiAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdGhpcy5vbW5pdHVyZSA9IGRqLnV0
aWwuVHJhY2tpbmcub21uaXR1cmU7CiAgICB9LAogICAgZmlyZTogZnVuY3Rpb24gKHZpZGVvSW5m
b09iamVjdCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHRoaXMuaW5pdCgpOwogICAgICAg
ICAgICB2YXIgbmV3RGF0YSA9IHRoaXMuX2dldE9tbml0dXJlT2JqZWN0KHZpZGVvSW5mb09iamVj
dCk7CiAgICAgICAgICAgIHZhciBjdXJyZW50RGF0YSA9IHRoaXMuX2dldEN1cnJlbnRPbW5pdHVy
ZU9iamVjdChuZXdEYXRhKTsKICAgICAgICAgICAgdGhpcy5fc2V0T21uaXR1cmVEYXRhKG5ld0Rh
dGEpOwogICAgICAgICAgICB0aGlzLl9maXJlUGl4ZWwoKTsKICAgICAgICAgICAgdGhpcy5fc2V0
T21uaXR1cmVEYXRhKGN1cnJlbnREYXRhKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAg
ICAgIGNvbnNvbGUuZXJyb3IoIntWaWRlb1RyYWNraW5nfSAiLCBlKTsKICAgICAgICB9CiAgICB9
LAogICAgX2dldE9tbml0dXJlT2JqZWN0OiBmdW5jdGlvbiAoZGF0YSkgewogICAgICAgIHZhciBh
cHBOYW1lID0gZGF0YS5hcHBOYW1lLnRvVXBwZXJDYXNlKCksCiAgICAgICAgICAgIGZ0ID0gZnVu
Y3Rpb24gKGFycikgewogICAgICAgICAgICAgICAgcmV0dXJuIGFwcE5hbWUgKyAiXyIgKyBhcnIu
am9pbigiXyIpOwogICAgICAgICAgICB9OwogICAgICAgIHZhciBvbU9iaiA9IHsKICAgICAgICAg
ICAgcGFnZU5hbWU6IGZ0KFsiVmlkZW8iLCBkYXRhLm5hbWVdKSwKICAgICAgICAgICAgc2VjdGlv
bjogIlZpZGVvIiwKICAgICAgICAgICAgc3Vic2VjdGlvbjogZnQoW2RhdGEuc2VjdGlvbl0pLAog
ICAgICAgICAgICBhdHlwZTogZnQoWyJWaWRlb19WaWRlbyIsIGRhdGEuc2VjdGlvbl0pLAogICAg
ICAgICAgICBhcGFnZTogZnQoWyJWaWRlb19WaWRlbyIsIGRhdGEuc3Vic2VjdGlvbl0pLAogICAg
ICAgICAgICBhaGVhZGxpbmU6ICJ2aWRlb18iICsgZGF0YS5uYW1lLAogICAgICAgICAgICBiYXNl
c2VjdGlvbjogZnQoW2RhdGEuc3Vic2VjdGlvbl0pLAogICAgICAgICAgICBhYmFzZWRvY2lkOiBk
YXRhLmlkLAogICAgICAgICAgICBjdHlwZTogZGF0YS5hcHBUeXBlLAogICAgICAgICAgICBjc291
cmNlOiBkYXRhLnByb3ZpZGVyICsgIiB2aWRlbyIsCiAgICAgICAgICAgIGNhY2Nlc3M6ICJmcmVl
IiwKICAgICAgICAgICAgcXN5bWJvbDogZGF0YS5hZFpvbmUKICAgICAgICB9OwogICAgICAgIHJl
dHVybiBvbU9iajsKICAgIH0sCiAgICBfZ2V0Q3VycmVudE9tbml0dXJlT2JqZWN0OiBmdW5jdGlv
biAob21PYmplY3QpIHsKICAgICAgICB2YXIgb2xkT2JqID0ge307CiAgICAgICAgZm9yICh2YXIg
bmFtZSBpbiBvbU9iamVjdCkgewogICAgICAgICAgICBpZiAob21PYmplY3QuaGFzT3duUHJvcGVy
dHkobmFtZSkpIHsKICAgICAgICAgICAgICAgIG9sZE9ialtuYW1lXSA9IHRoaXMub21uaXR1cmUu
Z2V0TWV0YURhdGEobmFtZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJu
IG9sZE9iajsKICAgIH0sCiAgICBfc2V0T21uaXR1cmVEYXRhOiBmdW5jdGlvbiAob21PYmplY3Qp
IHsKICAgICAgICBmb3IgKHZhciBuYW1lIGluIG9tT2JqZWN0KSB7CiAgICAgICAgICAgIGlmIChv
bU9iamVjdC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgewogICAgICAgICAgICAgICAgdGhpcy5vbW5p
dHVyZS5zZXRNZXRhRGF0YShuYW1lLCBvbU9iamVjdFtuYW1lXSk7CiAgICAgICAgICAgIH0KICAg
ICAgICB9CiAgICB9LAogICAgX2ZpcmVQaXhlbDogZnVuY3Rpb24gKCkgewogICAgICAgIHRoaXMu
b21uaXR1cmUuZmlyZVBpeGVsKHRydWUpOwogICAgfQp9Owpkb2pvLnByb3ZpZGUoImRqLm1vZHVs
ZS52aWRlb01vZHVsZSIpOwpkb2pvLnJlcXVpcmUoImRqLmxhbmciKTsKZG9qby5yZXF1aXJlKCJk
ai51dGlsLlZpZGVvIik7CmRvam8ucmVxdWlyZSgiZGoud2lkZ2V0LnBhbmVscy5QYW5lbHNGYWN0
b3J5Iik7CmRqLm1vZHVsZS52aWRlb01vZHVsZSA9IHsKICAgIGluaXQ6IGZ1bmN0aW9uIChjb25m
aWcpIHsKICAgICAgICB2YXIgZGpMID0gZGoubGFuZzsKICAgICAgICB0aGlzLmNmZyA9IGRqTC5k
ZWVwTWl4aW4oewogICAgICAgICAgICB2aWRlb01vZHVsZUNvbnRhaW5lcklkOiAidmlkZW9Nb2R1
bGUiLAogICAgICAgICAgICBhdXRvbm9teVZpZGVvQ2xhc3NOYW1lOiAiYXV0b25vbXlfdmlkZW8i
CiAgICAgICAgfSwgY29uZmlnKTsKICAgICAgICB2YXIgb1ZpZE1vZCA9IGRvam8uYnlJZCh0aGlz
LmNmZy52aWRlb01vZHVsZUNvbnRhaW5lcklkKTsKICAgICAgICBpZiAob1ZpZE1vZCA9PT0gbnVs
bCkgewogICAgICAgICAgICBjb25zb2xlLmxvZygie1ZpZGVvTW9kdWxlfSBpcyB1bmRlZmluZWQu
Iik7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKGRvam8uaGFzQ2xh
c3Mob1ZpZE1vZCwgdGhpcy5jZmcuYXV0b25vbXlWaWRlb0NsYXNzTmFtZSkpIHsKICAgICAgICAg
ICAgdGhpcy5fc2V0dXBBdXRvbm9teVZpZGVvKG9WaWRNb2QpOwogICAgICAgIH0KICAgICAgICB0
aGlzLl9zZXR1cFZpZGVvKG9WaWRNb2QpOwogICAgfSwKICAgIF9zZXR1cFZpZGVvOiBmdW5jdGlv
biAob1ZpZE1vZCkgewogICAgICAgIHRoaXMucGFuZWxzID0gZGoud2lkZ2V0LnBhbmVscy5QYW5l
bHNGYWN0b3J5LmNyZWF0ZShvVmlkTW9kLCB7CiAgICAgICAgICAgIGNvcmU6IHt9LAogICAgICAg
ICAgICBjYXJvdXNlbDoge30KICAgICAgICB9KTsKICAgIH0sCiAgICBfc2V0dXBBdXRvbm9teVZp
ZGVvOiBmdW5jdGlvbiAob1ZpZE1vZCkgewogICAgICAgIHZhciBkakwgPSBkai5sYW5nOwogICAg
ICAgIHZhciBvVmlkZW9FbGVtZW50cyA9IGRvam8ucXVlcnkoJy5wcmV2aWV3Jywgb1ZpZE1vZCk7
CiAgICAgICAgdmFyIG9WaWRlb0VsSWQgPSBudWxsOwogICAgICAgIGZvciAodmFyIGkgPSAwLCBs
ZW4gPSBvVmlkZW9FbGVtZW50cy5sZW5ndGg7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICB2
YXIgb1ZpZGVvRWwgPSBvVmlkZW9FbGVtZW50c1tpXTsKICAgICAgICAgICAgb1ZpZGVvRWxJZCA9
IG9WaWRlb0VsLmlkOwogICAgICAgICAgICB2YXIgdGVtcEdVSUQgPSBvVmlkZW9FbElkLnNwbGl0
KCc6Jyk7CiAgICAgICAgICAgIHZhciBnZXRJbWdHdWlkID0gdGVtcEdVSURbMV0ucmVwbGFjZSgv
Xy9nLCAnLScpOwogICAgICAgICAgICB2YXIgZ3VpZFZpZGVvRGV0YWlscyA9IGRqLnV0aWwuVmlk
ZW8uZ2V0VmlkZW9EZXRhaWxzKHsKICAgICAgICAgICAgICAgICdpZCc6IGdldEltZ0d1aWQsCiAg
ICAgICAgICAgICAgICAnZmllbGRzJzogJ3RodW1ibmFpbFVSTFNtYWxsJwogICAgICAgICAgICB9
KTsKICAgICAgICAgICAgaWYgKGd1aWRWaWRlb0RldGFpbHMgIT09ICJ1bmRlZmluZWQiKSB7CiAg
ICAgICAgICAgICAgICB2YXIgZ2V0U21hbGxUaHVtbmFpbFVSTCA9ICd1cmwoJyArIGd1aWRWaWRl
b0RldGFpbHMudGh1bWJuYWlsVVJMU21hbGwgKyAnKSc7CiAgICAgICAgICAgICAgICBpZiAoZ2V0
U21hbGxUaHVtbmFpbFVSTCAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgIG9WaWRlb0Vs
LnN0eWxlLmJhY2tncm91bmRJbWFnZSA9IGdldFNtYWxsVGh1bW5haWxVUkw7CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygn
Z2V0U21hbGxUaHVtbmFpbFVSTCBpcyAnICsgZ2V0U21hbGxUaHVtbmFpbFVSTCk7CiAgICAgICAg
ICAgICAgICBvVmlkZW9FbC5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSAnL2ltZy9iYi9CQl9EQmxv
Z28uZ2lmJzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfTsKZG9qby5wcm92aWRlKCJk
ai53aWRnZXQudmlkZW8uY29udHJvbGxlci5QbGF5ZXIiKTsKZG9qby5yZXF1aXJlKCJkai5sYW5n
Iik7CmRvam8ucmVxdWlyZSgiZGoudXRpbC5PYnNlcnZlciIpOwpkb2pvLnJlcXVpcmUoImRqLnV0
aWwuVXNlciIpOwpkb2pvLnJlcXVpcmUoImRqLnV0aWwuUmVnaW9uIik7CmRvam8ucmVxdWlyZSgi
ZGoudXRpbC5PbW5pdHVyZSIpOwpkb2pvLnJlcXVpcmUoImRqLnV0aWwuQ29va2llIik7CmRvam8u
cmVxdWlyZSgiZGoudXRpbC5QYWdlIik7CmRvam8ucmVxdWlyZSgiZGoud2lkZ2V0LnZpZGVvLm1v
ZGVsLlBsYXllclR5cGVzIik7CmRvam8uZGVjbGFyZSgiZGoud2lkZ2V0LnZpZGVvLmNvbnRyb2xs
ZXIuUGxheWVyIiwgbnVsbCwgewogICAgREVGQVVMVF9DT05GSUc6IHsKICAgICAgICBmbGFzaFBs
YXllclBhdGg6ICIvbWVkaWEvc3dmLyIsCiAgICAgICAgcGxheWVyVHlwZTogZGoud2lkZ2V0LnZp
ZGVvLm1vZGVsLlBsYXllclR5cGVzLk1haW5QbGF5ZXIsCiAgICAgICAgY29udGFpbmVySUQ6ICJ2
aWRlb1BsYXllciIsCiAgICAgICAgZGVzY3JpcHRpb25JRDogInZpZGVvUGxheWVyRGVzY3JpcHRp
b24iLAogICAgICAgIHBsYXllcklEOiAiIiwKICAgICAgICB2aWRlb0FQSVVSTDogIi9hcGktdmlk
ZW8vZ2V0X3ZpZGVvX2luZm8uYXNwIiwKICAgICAgICBlbWJlZENvbmZVUkw6ICJodHRwOi8vd3Nq
LnZvLmxsbndkLm5ldC9vMjgvcGxheWVycy8iLAogICAgICAgIGV2ZW50TmFtZXNwYWNlOiAiIiwK
ICAgICAgICBob3N0OiBsb2NhdGlvbi5ob3N0LAogICAgICAgIGFwcGxpY2F0aW9uczogWyJ2aWRl
byIsICJ2aWRlb19wb3B1cCIsICJ2aWRlb190YWIiLCAidmlkZW9fZW1iIiwgInZpZGVvX2hvbWUi
XSwKICAgICAgICBhcHBsaWNhdGlvbklEOiAwLAogICAgICAgIGxvYWRXYWl0VGltZTogMTAwMCwK
ICAgICAgICBsb2FkV2FpdENvdW50OiAxMCwKICAgICAgICBkYXRhc2V0OiB7fSwKICAgICAgICBh
ZEZvcm1hdDogImZybXQ9MjsiCiAgICB9LAogICAgY29uc3RydWN0b3I6IGZ1bmN0aW9uIChvYnMs
IHVzZXJDb25maWd1cmF0aW9uKSB7CiAgICAgICAgdGhpcy5vYnNlcnZlciA9IChvYnMgfHwgbmV3
IGRqLnV0aWwuT2JzZXJ2ZXIoZGoud2lkZ2V0LnZpZGVvLlZpZGVvUGxheWVyKSk7CiAgICAgICAg
dGhpcy5jb25maWd1cmF0aW9uID0gZG9qby5taXhpbihkb2pvLmNsb25lKHRoaXMuREVGQVVMVF9D
T05GSUcpLCB1c2VyQ29uZmlndXJhdGlvbik7CiAgICAgICAgdGhpcy52aWRlb0luZm9ybWF0aW9u
ID0ge307CiAgICAgICAgdGhpcy5zZWVrVGltZSA9IG51bGw7CiAgICAgICAgdGhpcy52aWV3ID0g
bnVsbDsKICAgICAgICB0aGlzLnJlYWR5Rm9yRXZlbnRzID0gZmFsc2U7CiAgICAgICAgdGhpcy5w
bGF5ZWRPbiA9IG51bGw7CiAgICAgICAgdmFyIHNpdGVGcm9tVXJsID0gZGoudXRpbC5QYWdlLmdl
dFF1ZXJ5UGFyYW0oInNpdGUiKTsKICAgICAgICB2YXIgc2l0ZUZyb21Db250ZXh0ID0gIiI7CiAg
ICAgICAgdHJ5IHsKICAgICAgICAgICAgc2l0ZUZyb21Db250ZXh0ID0gZGouY29udGV4dC52aWRl
b0NlbnRlci5ob3N0OwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgY29uc29sZS5l
cnJvcigie1BsYXllcn0gZXJyb3Igd2hpbGUgZ2V0dGluZyBzaXRlIHZhbHVlIGZyb20gY29udGV4
dC4gIiwgZS5tZXNzYWdlKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5zaXRlID0gKHNpdGVGcm9t
VXJsKSA/IHNpdGVGcm9tVXJsIDogc2l0ZUZyb21Db250ZXh0OwogICAgICAgIHRoaXMubXNyYyA9
IGRqLnV0aWwuUGFnZS5nZXRRdWVyeVBhcmFtKCJtc3JjIik7CiAgICB9LAogICAgaW5pdDogZnVu
Y3Rpb24gKHZpZXcsIHZpZGVvSUQsIHNlZWtUaW1lKSB7CiAgICAgICAgaWYgKHNlZWtUaW1lKSB7
CiAgICAgICAgICAgIHRoaXMuc2Vla1RpbWUgPSBzZWVrVGltZTsKICAgICAgICB9CiAgICAgICAg
dGhpcy52aWV3ID0gdmlldzsKICAgICAgICB0aGlzLnZpZXcuaW5pdCh0aGlzKTsKICAgICAgICBp
ZiAodmlkZW9JRCkgewogICAgICAgICAgICB0aGlzLnBsYXlWaWRlbyh2aWRlb0lEKTsKICAgICAg
ICB9CiAgICAgICAgdGhpcy5sb2FkUmV0cmllc0xlZnQgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9h
ZFdhaXRDb3VudDsKICAgIH0sCiAgICBwbGF5VmlkZW86IGZ1bmN0aW9uICh2aWRlb0lELCBwbGF5
ZWRPbikgewogICAgICAgIGlmIChwbGF5ZWRPbikgewogICAgICAgICAgICB0aGlzLnBsYXllZE9u
ID0gcGxheWVkT247CiAgICAgICAgfQogICAgICAgIHRoaXMubG9hZFJldHJpZXNMZWZ0ID0gdGhp
cy5jb25maWd1cmF0aW9uLmxvYWRXYWl0Q291bnQ7CiAgICAgICAgaWYgKHRoaXMudmlldy5yZW5k
ZXJQcmVsb2FkZXIpIHsKICAgICAgICAgICAgdGhpcy52aWV3LnJlbmRlclByZWxvYWRlcigpOwog
ICAgICAgIH0KICAgICAgICB0aGlzLnF1ZXJ5VmlkZW8odmlkZW9JRCk7CiAgICB9LAogICAgcXVl
cnlWaWRlbzogZnVuY3Rpb24gKHZpZGVvSUQpIHsKICAgICAgICB2YXIgdGhhdCA9IHRoaXM7CiAg
ICAgICAgdmFyIHJlcXVlc3RVUkwgPSB0aGlzLmNvbmZpZ3VyYXRpb24udmlkZW9BUElVUkwgKyAi
P2d1aWQ9IiArIHZpZGVvSUQgKyAiJmZpZWxkcz1hbGwiOwogICAgICAgIGRvam8ueGhyR2V0KHsK
ICAgICAgICAgICAgdXJsOiByZXF1ZXN0VVJMLAogICAgICAgICAgICBoYW5kbGVBczogImpzb24i
LAogICAgICAgICAgICBwcmV2ZW50Q2FjaGU6IHRydWUsCiAgICAgICAgICAgIGhlYWRlcnM6IHsK
ICAgICAgICAgICAgICAgICJBY2NlcHQiOiAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICAgICAg
fSwKICAgICAgICAgICAgbG9hZDogZnVuY3Rpb24gKHJlc3BvbnNlLCBpb0FyZ3MpIHsKICAgICAg
ICAgICAgICAgIHRoYXQudmlkZW9JRCA9IHZpZGVvSUQ7CiAgICAgICAgICAgICAgICB0aGF0LnZp
ZGVvSW5mb3JtYXRpb24gPSByZXNwb25zZTsKICAgICAgICAgICAgICAgIHRoYXQucmVuZGVyKCk7
CiAgICAgICAgICAgICAgICB0aGF0LmxvYWRWaWRlbygpOwogICAgICAgICAgICAgICAgdGhhdC5v
YnNlcnZlci5maXJlQnlOYW1lKCJvblZpZGVvTG9hZGVkIiwgdmlkZW9JRCwgcmVzcG9uc2UsIHRo
YXQucGxheWVkT24pOwogICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwogICAgICAgICAg
ICB9LAogICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHJlc3BvbnNlLCBpb0FyZ3MpIHsKICAg
ICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIntQbGF5ZXJ9IGNvdWxkIG5vdCBsb2FkIHZpZGVv
OiAnJXMnLiBSZXNwb25zZTogJW8iLCB2aWRlb0lELCByZXNwb25zZSk7CiAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzcG9uc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0sCiAgICBy
ZW5kZXI6IGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4gdGhpcy52aWV3LnJlbmRlcigpOwog
ICAgfSwKICAgIGxvYWRWaWRlbzogZnVuY3Rpb24gKCkgewogICAgICAgIGlmICh0aGlzLmxvYWRS
ZXRyaWVzTGVmdCA9PSAwKSB7CiAgICAgICAgICAgIGNvbnNvbGUuaW5mbygie1BsYXllcn0gbnVt
YmVyIG9mIExvYWQgUmV0cmllcyBleHBpcmVkIik7CiAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICB9CiAgICAgICAgdmFyIHRoYXQgPSB0aGlzOwogICAgICAgIGlmICh0aGlzLnJlYWR5Rm9yRXZl
bnRzKSB7CiAgICAgICAgICAgIHRoaXMuX3N0YXJ0UGxheWluZygpOwogICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgIHRoaXMubG9hZFJldHJpZXNMZWZ0LS07CiAgICAgICAgICAgIHNldFRpbWVv
dXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgdGhhdC5sb2FkVmlkZW8oKTsKICAgICAg
ICAgICAgfSwgdGhpcy5jb25maWd1cmF0aW9uLmxvYWRXYWl0VGltZSk7CiAgICAgICAgfQogICAg
fSwKICAgIF9zdGFydFBsYXlpbmc6IGZ1bmN0aW9uICgpIHsKICAgICAgICB0aGlzLnZpZXcucGxh
eSh0aGlzLmFkZFZpZGVvUGFyYW1ldGVycyh0aGlzLnZpZGVvSW5mb3JtYXRpb24pKTsKICAgIH0s
CiAgICB2aWRlb1BsYXllZDogZnVuY3Rpb24gKCkge30sCiAgICB2aWRlb1BhdXNlZDogZnVuY3Rp
b24gKCkge30sCiAgICB2aWRlb1VuUGF1c2VkOiBmdW5jdGlvbiAoKSB7fSwKICAgIHZpZGVvUG9w
VXA6IGZ1bmN0aW9uICgpIHt9LAogICAgZ2V0Q3VycmVudFZpZGVvSUQ6IGZ1bmN0aW9uICgpIHsK
ICAgICAgICByZXR1cm4gdGhpcy52aWRlb0lEOwogICAgfSwKICAgIGdldFZpZGVvRGF0YTogZnVu
Y3Rpb24gKGRhdGEpIHsKICAgICAgICByZXR1cm4gdGhpcy52aWRlb0luZm9ybWF0aW9uW2RhdGFd
OwogICAgfSwKICAgIGFkZFZpZGVvUGFyYW1ldGVyczogZnVuY3Rpb24gKHBhcmFtcykgewogICAg
ICAgIHZhciB3c2pQcmVmaXggPSAnV1NKXyc7CiAgICAgICAgaWYgKCFwYXJhbXMpIHsKICAgICAg
ICAgICAgcGFyYW1zID0ge307CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnNlZWtUaW1lKSB7
CiAgICAgICAgICAgIHBhcmFtcy5zZWVrVGltZSA9IHRoaXMuc2Vla1RpbWU7CiAgICAgICAgICAg
IHRoaXMuc2Vla1RpbWUgPSBudWxsOwogICAgICAgIH0KICAgICAgICBwYXJhbXMuZW1haWxQYXJ0
bmVySUQgPSAxMTA2MjY7CiAgICAgICAgcGFyYW1zLnNpdGUgPSB0aGlzLnNpdGU7CiAgICAgICAg
cGFyYW1zLm1zcmMgPSB0aGlzLm1zcmM7CiAgICAgICAgcGFyYW1zLmFkRnJtdCA9IHRoaXMuY29u
ZmlndXJhdGlvbi5hZEZvcm1hdDsKICAgICAgICBwYXJhbXMucGxheWVyTmFtZSA9IHRoaXMudmll
dy5jb25maWd1cmF0aW9uLm5hbWU7CiAgICAgICAgcGFyYW1zLmVtYmVkUGxheWVyVVJMID0gZGou
Y29udGV4dC5jb3JlLmNkblByZWZpeCArIHRoaXMuY29uZmlndXJhdGlvbi5mbGFzaFBsYXllclBh
dGggKyB0aGlzLmNvbmZpZ3VyYXRpb24ucGxheWVyVHlwZS5zd2ZGaWxlOwogICAgICAgIHBhcmFt
cy5lbWJlZENvbmZpZ1VSTCA9IHRoaXMuY29uZmlndXJhdGlvbi5lbWJlZENvbmZVUkw7CiAgICAg
ICAgcGFyYW1zLmVtYmVkUGxheWVySUQgPSAiMTAwMCI7CiAgICAgICAgcGFyYW1zLmVtYmVkTmFt
ZSA9IHRoaXMuY29uZmlndXJhdGlvbi5wbGF5ZXJJRDsKICAgICAgICBwYXJhbXMuZW1iZWRCYXNl
VVJMID0gZGouY29udGV4dC5jb3JlLmNkblByZWZpeCArIHRoaXMuY29uZmlndXJhdGlvbi5mbGFz
aFBsYXllclBhdGg7CiAgICAgICAgcGFyYW1zLmVtYmVkSGVpZ2h0ID0gdGhpcy5jb25maWd1cmF0
aW9uLnBsYXllclR5cGUuaGVpZ2h0OwogICAgICAgIHBhcmFtcy5lbWJlZFdpZHRoID0gdGhpcy5j
b25maWd1cmF0aW9uLnBsYXllclR5cGUud2lkdGg7CiAgICAgICAgcGFyYW1zLmxhcnNJRCA9IDkx
OwogICAgICAgIHBhcmFtcy5sYXJzQWRUcmFja2luZ0lEID0gMTI1OTsKICAgICAgICBpZiAodGhp
cy5wbGF5ZWRPbikgewogICAgICAgICAgICBwYXJhbXMubGluZXVwSUQgPSB1bmVzY2FwZSh0aGlz
LnBsYXllZE9uKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teYS16QS1aMC05XS9nLCAiIik7CiAg
ICAgICAgfQogICAgICAgIGlmICh0eXBlb2Ygc2V0RWRpdGlvbiA9PT0gImZ1bmN0aW9uIikgewog
ICAgICAgICAgICBwYXJhbXMucHJvcDI0ID0gc2V0RWRpdGlvbihkai51dGlsLlJlZ2lvbi5nZXRW
aWV3QnlSZWdpb24oKSk7CiAgICAgICAgfQogICAgICAgIHBhcmFtcy5wcm9wMjcgPSAiIjsKICAg
ICAgICB0cnkgewogICAgICAgICAgICBkai51dGlsLlVzZXIuaXNMb2dnZWRJbihmdW5jdGlvbiAo
aXNMb2dnZWRJbikgewogICAgICAgICAgICAgICAgaWYgKGlzTG9nZ2VkSW4pIHsKICAgICAgICAg
ICAgICAgICAgICBkai51dGlsLlVzZXIuaXNTdWJMb2dnZWRJbihmdW5jdGlvbiAoc3ViTG9nZ2Vk
SW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1YkxvZ2dlZEluKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkai51dGlsLlVzZXIuaGFzUm9sZSgnV1NKLVBSTycsIGZ1bmN0
aW9uIChoYXNSb2xlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1Jv
bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3NqUHJlZml4ID0gJ1dT
SlBST18nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMucHJvcDI3
ID0gJ1dTSl9wcm9jX3N1Yl95ZXMnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJhbXMucHJvcDggPSAnV1NKIFByb2Zlc3Npb25hbCBFbnRlcnByaXNlJzsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnByb3A5ID0gJ3ByZW1pdW0nOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMucHJvcDI0ID0gJ0VkaXRpb25f
VVNfUHJvZmVzc2lvbmFsX0NvbnN1bWVyJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkai51dGlsLlVz
ZXIuaGFzUm9sZSgnV1NKLUVOVCcsIGZ1bmN0aW9uIChoYXNSb2xlKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUm9sZSkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdzalByZWZpeCA9ICdXU0pQUk9fJzsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMucHJvcDI3ID0gJ1dT
Sl9wcm9lX3N1Yl95ZXMnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcmFtcy5wcm9wOCA9ICdXU0ogUHJvZmVzc2lvbmFsIEVudGVycHJpc2UnOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5wcm9wOSA9ICdwcmVt
aXVtJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMu
cHJvcDI0ID0gJ0VkaXRpb25fVVNfUHJvZmVzc2lvbmFsJzsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGFyYW1zLnByb3AyNyA9ICdXU0pfc3ViX3llcyc7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnByb3AyNyA9ICdXU0pfbWVtX3llcyc7
CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtcy5jb29raWVV
c2VyVHlwZSA9PT0gbnVsbCB8fCBwYXJhbXMuY29va2llVXNlclR5cGUgIT09ICJzdWJzY3JpYmVk
IikgewogICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMucHJvcDI3ID0gJ1dTSl9mcmVlJzsK
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBwYXJh
bXMucHJvcDI3ID0gJ1dTSl9yZWdfeWVzJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAg
ICAgY29uc29sZS5pbmZvKGUpOwogICAgICAgIH0KICAgICAgICB2YXIgc3ViU2VjQ29tcG9uZW50
ID0gZGoudXRpbC5WaWRlb1V0aWxzLm9tbml0dXJlRW5jb2RpbmcocGFyYW1zWyd3c2otc2VjdGlv
biddLCBwYXJhbXNbJ3dzai1zdWJzZWN0aW9uJ10sICdzJyk7CiAgICAgICAgdmFyIHNlY0NvbXBv
bmVudCA9IGRqLnV0aWwuVmlkZW9VdGlscy5vbW5pdHVyZUVuY29kaW5nKHBhcmFtc1snd3NqLXNl
Y3Rpb24nXSwgcGFyYW1zWyd3c2otc3Vic2VjdGlvbiddLCAnYycpOwogICAgICAgIHBhcmFtcy5h
cHBOYW1lID0gd3NqUHJlZml4LnN1YnN0cmluZygwLCB3c2pQcmVmaXgubGVuZ3RoIC0gMSk7CiAg
ICAgICAgcGFyYW1zLmFwcFR5cGUgPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXBwbGljYXRpb25zW3Ro
aXMuY29uZmlndXJhdGlvbi5hcHBsaWNhdGlvbklEXTsKICAgICAgICBwYXJhbXMuc2VjdGlvbiA9
IHNlY0NvbXBvbmVudDsKICAgICAgICBwYXJhbXMuc3Vic2VjdGlvbiA9IHN1YlNlY0NvbXBvbmVu
dDsKICAgICAgICBwYXJhbXMucHJvcDIgPSB3c2pQcmVmaXggKyBzZWNDb21wb25lbnQ7CiAgICAg
ICAgcGFyYW1zLnByb3AzID0gd3NqUHJlZml4ICsgIlZpZGVvX1ZpZGVvXyIgKyBzZWNDb21wb25l
bnQ7CiAgICAgICAgcGFyYW1zLnByb3AyMiA9IHdzalByZWZpeCArICJWaWRlb19WaWRlb18iICsg
c3ViU2VjQ29tcG9uZW50OwogICAgICAgIHBhcmFtcy5wcm9wMjYgPSB3c2pQcmVmaXggKyBzdWJT
ZWNDb21wb25lbnQ7CiAgICAgICAgcGFyYW1zLnByb3A1ID0gd2luZG93LmxvY2F0aW9uLmhyZWYu
c3BsaXQoJz8nKVswXTs7CiAgICAgICAgcGFyYW1zLnByb3A2ID0gd2luZG93LmxvY2F0aW9uLmhy
ZWY7CiAgICAgICAgcGFyYW1zLnByb3AxMCA9IGRqLnV0aWwuUGFnZS5nZXRRdWVyeVBhcmFtKCJt
b2QiKTsKICAgICAgICBwYXJhbXMuY2FtcGFpZ24gPSBkai51dGlsLlBhZ2UuZ2V0UXVlcnlQYXJh
bSgibW9kIik7CiAgICAgICAgcGFyYW1zLnByb3AxMSA9IGRqLnV0aWwuUGFnZS5nZXRRdWVyeVBh
cmFtKCJyZWZsaW5rIik7CiAgICAgICAgcGFyYW1zLnByb3AxOSA9IHBhcmFtcy5hcHBUeXBlOwog
ICAgICAgIHBhcmFtcy5wcm9wMjUgPSBkai51dGlsLkNvb2tpZS5nZXRDb29raWUoJ1RSJyk7CiAg
ICAgICAgdHJ5IHsKICAgICAgICAgICAgcGFyYW1zLmNvb2tpZVVzZXJUeXBlID0gZGoudXRpbC5D
b29raWUuZ2V0Q29va2llKCJ1c2VyX3R5cGUiKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAg
ICAgICAgIGNvbnNvbGUuZXJyb3IoImNvb2tpZSByZWFkIGVycm9yIHdoaWxlIGZldGNoaW5nIGNv
b2tpZVVzZXJUeXBlIDogIiArIGUpOwogICAgICAgIH0KICAgICAgICB2YXIgc3VwcnNBZCA9ICgo
dHlwZW9mIHBJRCA9PT0gInN0cmluZyIpICYmIChwSUQuaW5kZXhPZignMF8wX1dIJykgIT0gLTEp
KSA/ICcxJyA6ICcwJzsKICAgICAgICBwYXJhbXMuc3VwcHJlc3NBZHMgPSBzdXByc0FkOwogICAg
ICAgIHJldHVybiBwYXJhbXM7CiAgICB9Cn0pOwpkb2pvLnByb3ZpZGUoImRqLndpZGdldC52aWRl
by5WaWRlb0NlbnRlciIpOwpkb2pvLnJlcXVpcmUoImRqLmxhbmciKTsKZG9qby5yZXF1aXJlKCJk
ai51dGlsLkFkcyIpOwpkb2pvLnJlcXVpcmUoImRqLnV0aWwuQ29va2llIik7CmRvam8ucmVxdWly
ZSgiZGoudXRpbC5PbW5pdHVyZSIpOwpkb2pvLnJlcXVpcmUoImRqLnV0aWwuUmVnaW9uIik7CmRv
am8ucmVxdWlyZSgiZGoudXRpbC5UcmFja2luZyIpOwpkb2pvLnJlcXVpcmUoImRqLnV0aWwuVXNl
ciIpOwpkb2pvLnJlcXVpcmUoImRqLnV0aWwuVmlkZW8iKTsKZG9qby5yZXF1aXJlKCJzd2ZvYmpl
Y3Quc3dmb2JqZWN0XzJfMi5zd2ZvYmplY3QiKTsKZG9qby5nZXRPYmplY3QoImRqLmNvbnRleHQu
dmlkZW8iLCB0cnVlKTsKZG9qby5kZWNsYXJlKCJkai53aWRnZXQudmlkZW8uVmlkZW9DZW50ZXIi
LCBudWxsLCB7CiAgICBjb25zdHJ1Y3RvcjogZnVuY3Rpb24gKGFyZ3MsIG9iak5hbWUpIHsKICAg
ICAgICB0aGlzLnZlcnNpb24gPSAiMS4wLjIiOwogICAgICAgIHRoaXMudmlkZW9VdGlsID0gZGou
dXRpbC5WaWRlbzsKICAgICAgICB0aGlzLnVzckFjdG5IYXNoID0gewogICAgICAgICAgICAnJzog
dGhpcy5oYW5kbGVSZXNwb25zZSwKICAgICAgICAgICAgJ3RvQnJvd3NlJzogdGhpcy5oYW5kbGVC
cm93c2luZ1Jlc3VsdHMsCiAgICAgICAgICAgICd0b1NlYXJjaCc6IHRoaXMuaGFuZGxlU2VhcmNo
UmVzdWx0cywKICAgICAgICAgICAgJ2N1cnJlbnQnOiB0aGlzLmhhbmRsZUN1cnJlbnQsCiAgICAg
ICAgICAgICduZXh0JzogdGhpcy5oYW5kbGVOZXh0CiAgICAgICAgfTsKICAgICAgICB0aGlzLm1p
Y3JvUGxheWVycyA9IFtdOwogICAgICAgIHRoaXMubWljcm9QbGF5ZXJzT2JqZWN0cyA9IHt9Owog
ICAgICAgIHRoaXMudmlkZW9JZE1pY3JvUGxheWVySWRNYXAgPSB7fTsKICAgICAgICB0aGlzLnBv
cFVwV2luZG93ID0gJyc7CiAgICAgICAgdGhpcy5mbGFzaFBsYXllclBhdGggPSBkai5jb250ZXh0
LmNvcmUuY2RuUHJlZml4ICsgIi9tZWRpYS9zd2YvIjsKICAgICAgICB0aGlzLmNvbGxlY3Rpb25z
WE1MUGF0aCA9ICIvc3RhdGljX2h0bWxfZmlsZXMvIjsKICAgICAgICB0aGlzLnZpZGVvQ2VudGVy
UGFnZVVybCA9ICIvdmlkZW8tY2VudGVyIjsKICAgICAgICB0aGlzLnBvcFVwUGFnZVVybCA9ICcv
cHVibGljL3BhZ2UvMF8wX1dQXzMwMDEuaHRtbCc7CiAgICAgICAgdGhpcy5vYmpOYW1lID0gb2Jq
TmFtZTsKICAgICAgICB0aGlzLnZpZGVvUGxheWVyRGl2SWQgPSAndmlkZW9fcGxheWVyJzsKICAg
ICAgICB0aGlzLnNpZGVOYXZVbElkID0gJ3ZpZGVvX3NpZGVuYXYnOwogICAgICAgIHRoaXMudG9w
TmF2VWxJZCA9ICd2aWRlb190b3BuYXYnOwogICAgICAgIHRoaXMubmV4dFZpZGVvRGl2SWQgPSAn
bmV4dF92aWRlbyc7CiAgICAgICAgdGhpcy52aWRlb1Jlc3VsdHNEaXZJZCA9ICd2aWRlb19yZXN1
bHRzJzsKICAgICAgICB0aGlzLnNlYXJjaERpdklkID0gJ3ZpZGVvX3NlYXJjaCc7CiAgICAgICAg
dGhpcy5hZHZlcnRpc2VtZW50RGl2SWQgPSAnYWR2ZXJ0aXNlbWVudCc7CiAgICAgICAgdGhpcy5j
b2xsZWN0aW9uc1NlbGVjdElkID0gJ2NvbGxlY3Rpb25zU2VsZWN0SWQnOwogICAgICAgIHRoaXMu
dmlkZW9TdW1tYXJ5RGl2SWQgPSAndmlkZW9faGVhZGxpbmUnOwogICAgICAgIHRoaXMucmVnaXN0
ZXJlZFZpZGVvc0RpdklkID0gJ3JlZ2lzdGVyZWRfdmlkZW9zJzsKICAgICAgICBpZiAodGhpcy52
aWRlb1V0aWwuaXNOb3RCbGFua09yTnVsbChhcmdzKSkgewogICAgICAgICAgICB0aGlzLnZpZGVv
UGxheWVyRGl2SWQgPSBhcmdzLnZpZGVvUGxheWVyRGl2SWQgPyBhcmdzLnZpZGVvUGxheWVyRGl2
SWQgOiAndmlkZW9fcGxheWVyJzsKICAgICAgICAgICAgdGhpcy5zaWRlTmF2VWxJZCA9IGFyZ3Mu
c2lkZU5hdlVsSWQgPyBhcmdzLnNpZGVOYXZVbElkIDogJ3ZpZGVvX3NpZGVuYXYnOwogICAgICAg
ICAgICB0aGlzLnRvcE5hdlVsSWQgPSBhcmdzLnRvcE5hdlVsSWQgPyBhcmdzLnRvcE5hdlVsSWQg
OiAndmlkZW9fdG9wbmF2JzsKICAgICAgICAgICAgdGhpcy5uZXh0VmlkZW9EaXZJZCA9IGFyZ3Mu
bmV4dFZpZGVvRGl2SWQgPyBhcmdzLm5leHRWaWRlb0RpdklkIDogJ25leHRfdmlkZW8nOwogICAg
ICAgICAgICB0aGlzLnZpZGVvUmVzdWx0c0RpdklkID0gYXJncy52aWRlb1Jlc3VsdHNEaXZJZCA/
IGFyZ3MudmlkZW9SZXN1bHRzRGl2SWQgOiAndmlkZW9fcmVzdWx0cyc7CiAgICAgICAgICAgIHRo
aXMuc2VhcmNoRGl2SWQgPSBhcmdzLnNlYXJjaERpdklkID8gYXJncy5zZWFyY2hEaXZJZCA6ICd2
aWRlb19zZWFyY2gnOwogICAgICAgICAgICB0aGlzLmFkdmVydGlzZW1lbnREaXZJZCA9IGFyZ3Mu
YWR2ZXJ0aXNlbWVudERpdklkID8gYXJncy5hZHZlcnRpc2VtZW50RGl2SWQgOiAnYWR2ZXJ0aXNl
bWVudCc7CiAgICAgICAgICAgIHRoaXMudmlkZW9TdW1tYXJ5RGl2SWQgPSBhcmdzLnZpZGVvU3Vt
bWFyeURpdklkID8gYXJncy52aWRlb1N1bW1hcnlEaXZJZCA6ICd2aWRlb19oZWFkbGluZSc7CiAg
ICAgICAgICAgIHRoaXMucmVnaXN0ZXJlZFZpZGVvc0RpdklkID0gYXJncy5yZWdpc3RlcmVkVmlk
ZW9zRGl2SWQgPyBhcmdzLnJlZ2lzdGVyZWRWaWRlb3NEaXZJZCA6ICcnOwogICAgICAgIH0KICAg
ICAgICB0aGlzLnhtbERvYyA9ICcnOwogICAgICAgIHRoaXMuZGVmYXVsdENvbGxlY3Rpb25OYW1l
ID0gJ05ld3MnOwogICAgICAgIHRoaXMucnNzVXJsc09iamVjdCA9IHt9OwogICAgICAgIHRoaXMu
Y29udGVudFVybHNPYmplY3QgPSB7fTsKICAgICAgICB0aGlzLmNvbGxlY3Rpb25OYW1lc0FycmF5
ID0gW107CiAgICAgICAgdGhpcy5zdWJjb2xsZWN0aW9uc09iamVjdCA9IHt9OwogICAgICAgIHRo
aXMudXJsS2V5c0NvbGxlY3Rpb25NYXAgPSB7fTsKICAgICAgICB0aGlzLnVybEtleXNTdWJDb2xs
ZWN0aW9uTWFwID0ge307CiAgICAgICAgdGhpcy5jdXJyZW50bHlQbGF5aW5nVmlkZW9JZCA9ICcn
OwogICAgICAgIHRoaXMuY3VycmVudGx5UGxheWluZ1ZpZGVvSWRzID0gW107CiAgICAgICAgdGhp
cy5jdXJyZW50bHlQbGF5aW5nQ29sbGVjdGlvbiA9ICcnOwogICAgICAgIHRoaXMuY3VycmVudGx5
UGxheWluZ1N1YkNvbGxlY3Rpb24gPSAnJzsKICAgICAgICB0aGlzLm5leHRWaWRlb0lkID0gJyc7
CiAgICAgICAgdGhpcy52aXNpYmxlQ29sbGVjdGlvbklkID0gJyc7CiAgICAgICAgdGhpcy52aXNp
YmxlU3ViQ29sbGVjdGlvbklkID0gJyc7CiAgICAgICAgdGhpcy5zb3J0T3JkZXIgPSAncmVsZXZh
bmN5JzsKICAgICAgICB0aGlzLmN1cnJlbnRTZWFyY2hUZXh0ID0gJyc7CiAgICAgICAgdGhpcy5p
c1ZpZGVvUmVzdWx0c0luU2lkZU5hdiA9IGZhbHNlOwogICAgICAgIHRoaXMuY3VycmVudFBsYXlp
bmdKc29uT2JqZWN0ID0ge307CiAgICAgICAgdGhpcy5jdXJyZW50QnJvd3NpbmdKc29uT2JqZWN0
ID0ge307CiAgICAgICAgdGhpcy5jdXJyZW50U2VhcmNoSnNvbk9iamVjdCA9IHt9OwogICAgICAg
IHRoaXMuY3VycmVudFZpZGVvRGV0YWlsc0pzb25PYmplY3QgPSB7fTsKICAgICAgICB0aGlzLm5l
eHRWaWRlb0RldGFpbHNKc29uT2JqZWN0ID0ge307CiAgICAgICAgdGhpcy5yZWdpc3RlcmVkVmlk
ZW9zID0gW107CiAgICAgICAgdGhpcy5yZWdpc3RlcmVkVmlkZW9zSWRzID0gW107CiAgICAgICAg
dGhpcy5yZWxhdGVkVmlkZW9zQ29sbGVjdGlvbiA9ICcnOwogICAgICAgIHRoaXMudXNlckFjdGlv
biA9ICcnOwogICAgICAgIHRoaXMuc291cmNlQXBwbGljYXRpb25OYW1lID0gJyc7CiAgICAgICAg
dGhpcy5ib29rTWFya2VkSWQgPSAnJzsKICAgICAgICB0aGlzLmJvb2tNYXJrZWRMb2NhdGlvbiA9
ICcnOwogICAgICAgIHRoaXMuY29va2llVXNlclR5cGUgPSAnJzsKICAgICAgICBkai5sYW5nLm1p
eGluKHRoaXMsIHRoaXMudmlkZW9VdGlsLnNldHVwQ29uZmlnKCkpOwogICAgfSwKICAgIGxvYWRW
aWRlbzogZnVuY3Rpb24gKGlkLCBzb3VyY2VBcHBsaWNhdGlvbk5hbWUsIGRvbWFpbk5hbWUpIHsK
ICAgICAgICBjb25zb2xlLmluZm8oInZpZGVvLmpzIHYiICsgdGhpcy52ZXJzaW9uKTsKICAgICAg
ICBpZiAodGhpcy52aWRlb1V0aWwuaXNOb3RCbGFua09yTnVsbChkb21haW5OYW1lKSkgewogICAg
ICAgICAgICB0aGlzLmRvbWFpbk5hbWUgPSBkb21haW5OYW1lOwogICAgICAgIH0KICAgICAgICB0
aGlzLnNvdXJjZUFwcGxpY2F0aW9uTmFtZSA9IHNvdXJjZUFwcGxpY2F0aW9uTmFtZTsKICAgICAg
ICBpZiAodGhpcy52aWRlb1V0aWwuaXNOb3RCbGFua09yTnVsbChpZCkpIHsKICAgICAgICAgICAg
aWYgKGlkLmluZGV4T2YoJ3snKSA9PSAtMSkgewogICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50
bHlQbGF5aW5nVmlkZW9JZCA9ICd7JyArIGlkICsgJ30nOwogICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50bHlQbGF5aW5nVmlkZW9JZCA9IGlkOwogICAgICAg
ICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChzd2ZvYmplY3QuZ2V0Rmxhc2hQbGF5ZXJWZXJz
aW9uKCkubWFqb3IgPj0gOSkgewogICAgICAgICAgICB0aGlzLmNyZWF0ZUZsYXNoUGxheWVyKCk7
CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZGoudXRpbC5WaWRlby5ub25TdXBwb3J0aW5n
Rmxhc2hQbGF5ZXIodGhpcy52aWRlb1BsYXllckRpdklkKTsKICAgICAgICB9CiAgICB9LAogICAg
Y29udGludWVMb2FkVmlkZW86IGZ1bmN0aW9uICgpIHsKICAgICAgICB0aGlzLmxvYWRDb2xsZWN0
aW9uc0RvYyh0aGlzLCB0aGlzLmhhbmRsZUxvYWRWaWRlbyk7CiAgICB9LAogICAgaGFuZGxlTG9h
ZFZpZGVvOiBmdW5jdGlvbiAoZGF0YSwgeGhyKSB7CiAgICAgICAgdGhpcy54bWxEb2MgPSB4aHIu
cmVzcG9uc2VYTUwuZG9jdW1lbnRFbGVtZW50OwogICAgICAgIHRoaXMucGFyc2VJbmZvcm1hdGlv
bkZyb21YbWxEb2MoKTsKICAgICAgICBpZiAodGhpcy5zb3VyY2VBcHBsaWNhdGlvbk5hbWUgPT0g
J2FydGljbGVQYWdlJykgewogICAgICAgICAgICB0aGlzLnZpc2libGVDb2xsZWN0aW9uSWQgPSAn
JzsKICAgICAgICAgICAgdmFyIHZPYmogPSAnJzsKICAgICAgICAgICAgaWYgKHRoaXMudmlkZW9V
dGlsLmlzTm90QmxhbmtPck51bGwodGhpcy5jdXJyZW50bHlQbGF5aW5nVmlkZW9JZCkpIHsKICAg
ICAgICAgICAgICAgIHZPYmogPSB0aGlzLnJlZ2lzdGVyZWRWaWRlb3NbdGhpcy5yZWdpc3RlcmVk
VmlkZW9zSWRzLmluZGV4T2YodGhpcy5jdXJyZW50bHlQbGF5aW5nVmlkZW9JZCldOwogICAgICAg
ICAgICAgICAgdGhpcy5wbGF5VmlkZW9CeVBhcmFtKHZPYmopOwogICAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgICAgaWYgKHRoaXMudmlkZW9VdGlsLmlzTm90QmxhbmtPck51bGwodGhp
cy5ib29rTWFya2VkSWQpKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50bHlQbGF5
aW5nVmlkZW9JZCA9IHRoaXMuYm9va01hcmtlZElkOwogICAgICAgICAgICAgICAgICAgIHZPYmog
PSB0aGlzLnJlZ2lzdGVyZWRWaWRlb3NbdGhpcy5yZWdpc3RlcmVkVmlkZW9zSWRzLmluZGV4T2Yo
dGhpcy5jdXJyZW50bHlQbGF5aW5nVmlkZW9JZCldOwogICAgICAgICAgICAgICAgICAgIHZPYmou
c2Vla1RpbWUgPSB0aGlzLmJvb2tNYXJrZWRMb2NhdGlvbjsKICAgICAgICAgICAgICAgICAgICB0
aGlzLnBsYXlWaWRlb0J5UGFyYW0odk9iaik7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgICAgIHZPYmogPSB0aGlzLnJlZ2lzdGVyZWRWaWRlb3NbMF07CiAgICAgICAg
ICAgICAgICAgICAgdGhpcy5jdXJyZW50bHlQbGF5aW5nVmlkZW9JZCA9IHZPYmouaWQ7CiAgICAg
ICAgICAgICAgICAgICAgdGhpcy5wbGF5VmlkZW9CeVBhcmFtKHZPYmopOwogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMucmVsYXRlZFZpZGVvc0NvbGxlY3Rp
b24gPSB0aGlzLnZpZGVvVXRpbC5pc05vdEJsYW5rT3JOdWxsKHRoaXMucmVnaXN0ZXJlZFZpZGVv
c1swXVsnd3NqLXNlY3Rpb24nXSkgPyB0aGlzLnJlZ2lzdGVyZWRWaWRlb3NbMF1bJ3dzai1zZWN0
aW9uJ10gOiB0aGlzLmRlZmF1bHRDb2xsZWN0aW9uTmFtZTsKICAgICAgICAgICAgdGhpcy5jdXJy
ZW50bHlQbGF5aW5nQ29sbGVjdGlvbiA9IHRoaXMucmVnaXN0ZXJlZFZpZGVvc1swXVsnd3NqLXNl
Y3Rpb24nXTsKICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudGx5UGxheWluZ0NvbGxlY3Rpb24g
PT0gJ0xpZmVzdHlsZScpIHsKICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudGx5UGxheWluZ0Nv
bGxlY3Rpb24gPSAnTGlmZSAmIFN0eWxlJzsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlz
LmdldFZpZGVvcyh0aGlzLnZhbGlkYXRlQ29udGVudFVybCh0aGlzLmNvbnRlbnRVcmxzT2JqZWN0
W3RoaXMuY3VycmVudGx5UGxheWluZ0NvbGxlY3Rpb25dKSArICcmY291bnQ9NjAnLCAnJywgdGhp
cywgdGhpcy5maW5pc2hIYW5kbGVMb2FkVmlkZW8pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgIGlmICh0eXBlb2YgQVRfVkFSUyAhPSAndW5kZWZpbmVkJyAmJiBBVF9WQVJTLmJhc2VEb2NJ
ZCkgewogICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50bHlQbGF5aW5nVmlkZW9JZCA9ICd7JyAr
IEFUX1ZBUlMuYmFzZURvY0lkICsgJ30nOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0
aGlzLnZpZGVvVXRpbC5pc05vdEJsYW5rT3JOdWxsKHRoaXMuY3VycmVudGx5UGxheWluZ1ZpZGVv
SWQpKSB7CiAgICAgICAgICAgICAgICB0aGlzLnBsYXlWaWRlb0J5VmlkZW9JZCh0aGlzLmN1cnJl
bnRseVBsYXlpbmdWaWRlb0lkKTsKICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudGx5UGxheWlu
Z0NvbGxlY3Rpb24gPSB0aGlzLmN1cnJlbnRWaWRlb0RldGFpbHNKc29uT2JqZWN0Wyd3c2otc2Vj
dGlvbiddOwogICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50bHlQbGF5aW5nU3ViQ29sbGVjdGlv
biA9IHRoaXMuY3VycmVudFZpZGVvRGV0YWlsc0pzb25PYmplY3RbJ3dzai1zdWJzZWN0aW9uJ107
CiAgICAgICAgICAgICAgICBpZiAodGhpcy52aWRlb1V0aWwuaXNOb3RCbGFua09yTnVsbCh0aGlz
LmN1cnJlbnRseVBsYXlpbmdTdWJDb2xsZWN0aW9uKSkgewogICAgICAgICAgICAgICAgICAgIHRo
aXMudmlzaWJsZUNvbGxlY3Rpb25JZCA9IHRoaXMuY29sbGVjdGlvbk5hbWVGb3JTdWJjb2xsZWN0
aW9uKHRoaXMuY3VycmVudGx5UGxheWluZ1N1YkNvbGxlY3Rpb24pOwogICAgICAgICAgICAgICAg
ICAgIHRoaXMuY3VycmVudGx5UGxheWluZ0NvbGxlY3Rpb24gPSB0aGlzLnZpc2libGVDb2xsZWN0
aW9uSWQ7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRWaWRlb3ModGhpcy52YWxpZGF0ZUNv
bnRlbnRVcmwodGhpcy5jb250ZW50VXJsc09iamVjdFt0aGlzLmN1cnJlbnRseVBsYXlpbmdTdWJD
b2xsZWN0aW9uXSkgKyAnJmNvdW50PTYwJywgJycsIHRoaXMsIHRoaXMuZmluaXNoSGFuZGxlTG9h
ZFZpZGVvKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgaWYg
KCF0aGlzLnZpZGVvVXRpbC5pc05vdEJsYW5rT3JOdWxsKHRoaXMuY3VycmVudGx5UGxheWluZ0Nv
bGxlY3Rpb24pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudGx5UGxheWlu
Z0NvbGxlY3Rpb24gPSB0aGlzLmRlZmF1bHRDb2xsZWN0aW9uTmFtZTsKICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRWaWRlb3ModGhpcy52YWxpZGF0ZUNv
bnRlbnRVcmwodGhpcy5jb250ZW50VXJsc09iamVjdFt0aGlzLmN1cnJlbnRseVBsYXlpbmdDb2xs
ZWN0aW9uXSkgKyAnJmNvdW50PTYwJywgJycsIHRoaXMsIHRoaXMuZmluaXNoSGFuZGxlTG9hZFZp
ZGVvKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgIHZhciBicm93c2VyVXJsID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lOwogICAgICAgICAg
ICAgICAgdGhpcy5jdXJyZW50bHlQbGF5aW5nQ29sbGVjdGlvbiA9IHRoaXMuZGVmYXVsdENvbGxl
Y3Rpb25OYW1lOwogICAgICAgICAgICAgICAgaWYgKGJyb3dzZXJVcmwuaW5kZXhPZigiLiIpICE9
IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHVybEFycmF5ID0gYnJvd3NlclVybC5zcGxp
dCgiLiIpWzBdLnNwbGl0KCcvJyk7CiAgICAgICAgICAgICAgICAgICAgdmFyIHVybEtleSA9IHVy
bEFycmF5LnBvcCgpOwogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnVybEtleXNDb2xsZWN0
aW9uTWFwW3VybEtleV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50bHlQ
bGF5aW5nQ29sbGVjdGlvbiA9IHRoaXMudXJsS2V5c0NvbGxlY3Rpb25NYXBbdXJsS2V5XTsKICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudXJsS2V5c1N1
YkNvbGxlY3Rpb25NYXBbdXJsS2V5XSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1
cnJlbnRseVBsYXlpbmdTdWJDb2xsZWN0aW9uID0gdGhpcy51cmxLZXlzU3ViQ29sbGVjdGlvbk1h
cFt1cmxLZXldOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpc2libGVDb2xsZWN0aW9u
SWQgPSB0aGlzLmNvbGxlY3Rpb25OYW1lRm9yU3ViY29sbGVjdGlvbih0aGlzLmN1cnJlbnRseVBs
YXlpbmdTdWJDb2xsZWN0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50
bHlQbGF5aW5nQ29sbGVjdGlvbiA9IHRoaXMudmlzaWJsZUNvbGxlY3Rpb25JZDsKICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB2YXIgZ2V0Vmlk
ZW9DYWxsYmFjayA9IGRvam8uaGl0Y2godGhpcywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAg
ICAgICAgIHRoaXMuY3VycmVudGx5UGxheWluZ1ZpZGVvSWQgPSB0aGlzLmN1cnJlbnRQbGF5aW5n
SnNvbk9iamVjdC5pdGVtc1swXS5pZDsKICAgICAgICAgICAgICAgICAgICB0aGlzLnBsYXlWaWRl
b0J5VmlkZW9JZCh0aGlzLmN1cnJlbnRseVBsYXlpbmdWaWRlb0lkKTsKICAgICAgICAgICAgICAg
ICAgICB0aGlzLmZpbmlzaEhhbmRsZUxvYWRWaWRlbygpOwogICAgICAgICAgICAgICAgfSk7CiAg
ICAgICAgICAgICAgICBpZiAodGhpcy52aWRlb1V0aWwuaXNOb3RCbGFua09yTnVsbCh0aGlzLmN1
cnJlbnRseVBsYXlpbmdTdWJDb2xsZWN0aW9uKSkgewogICAgICAgICAgICAgICAgICAgIHRoaXMu
Z2V0VmlkZW9zKHRoaXMudmFsaWRhdGVDb250ZW50VXJsKHRoaXMuY29udGVudFVybHNPYmplY3Rb
dGhpcy5jdXJyZW50bHlQbGF5aW5nU3ViQ29sbGVjdGlvbl0pICsgJyZjb3VudD02MCcsICcnLCBu
dWxsLCBnZXRWaWRlb0NhbGxiYWNrKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgdGhpcy5nZXRWaWRlb3ModGhpcy52YWxpZGF0ZUNvbnRlbnRVcmwodGhpcy5j
b250ZW50VXJsc09iamVjdFt0aGlzLmN1cnJlbnRseVBsYXlpbmdDb2xsZWN0aW9uXSkgKyAnJmNv
dW50PTYwJywgJycsIG51bGwsIGdldFZpZGVvQ2FsbGJhY2spOwogICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSwKICAgIGZpbmlzaEhhbmRsZUxvYWRWaWRlbzog
ZnVuY3Rpb24gKCkgewogICAgICAgIHRoaXMucG9wdWxhdGVTaWRlTmF2KCk7CiAgICAgICAgdGhp
cy5wb3B1bGF0ZVRvcE5hdigpOwogICAgICAgIGlmICh0aGlzLnZpZGVvVXRpbC5pc05vdEJsYW5r
T3JOdWxsKHRoaXMuY3VycmVudGx5UGxheWluZ1N1YkNvbGxlY3Rpb24pKSB7CiAgICAgICAgICAg
IHRoaXMudXBkYXRlU2lkZU5hdkFwcGVhcmFuY2UoJ3N1YmNvbGxlY3Rpb24nLCB0aGlzLmN1cnJl
bnRseVBsYXlpbmdTdWJDb2xsZWN0aW9uKTsKICAgICAgICAgICAgdGhpcy52aXNpYmxlU3ViQ29s
bGVjdGlvbklkID0gdGhpcy5jdXJyZW50bHlQbGF5aW5nU3ViQ29sbGVjdGlvbjsKICAgICAgICAg
ICAgdGhpcy5icm93c2luZ0dyb3VwID0gInN1YmNvbGxlY3Rpb24iOwogICAgICAgICAgICB0aGlz
LnBsYXlpbmdHcm91cCA9ICJzdWJjb2xsZWN0aW9uIjsKICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICB0aGlzLnVwZGF0ZVNpZGVOYXZBcHBlYXJhbmNlKCdjb2xsZWN0aW9uJywgdGhpcy5jdXJy
ZW50bHlQbGF5aW5nQ29sbGVjdGlvbik7CiAgICAgICAgICAgIHRoaXMudmlzaWJsZUNvbGxlY3Rp
b25JZCA9IHRoaXMuY3VycmVudGx5UGxheWluZ0NvbGxlY3Rpb247CiAgICAgICAgfQogICAgICAg
IHRoaXMuY3VycmVudEJyb3dzaW5nSnNvbk9iamVjdCA9IHRoaXMuY3VycmVudFBsYXlpbmdKc29u
T2JqZWN0OwogICAgICAgIGlmICh0aGlzLnNvdXJjZUFwcGxpY2F0aW9uTmFtZSA9PSAnYXJ0aWNs
ZVBhZ2UnICYmIHRoaXMucmVnaXN0ZXJlZFZpZGVvc0lkcy5sZW5ndGggPiAwKSB7CiAgICAgICAg
ICAgIHRoaXMuY3JlYXRlUmVnaXN0ZXJlZFZpZGVvc1RodW1ibmFpbHMoKTsKICAgICAgICAgICAg
dGhpcy51cGRhdGVWaWRlb1RodW1ibmFpbFZpc3VhbCgnJywgJ3JlZycgKyB0aGlzLmN1cnJlbnRs
eVBsYXlpbmdWaWRlb0lkKTsKICAgICAgICB9CiAgICAgICAgdGhpcy51cGRhdGVUb3BOYXZBcHBl
YXJhbmNlKCcnLCB0aGlzLmN1cnJlbnRseVBsYXlpbmdDb2xsZWN0aW9uKTsKICAgICAgICB0aGlz
LmNyZWF0ZU5leHRWaWRlbygpOwogICAgICAgIHRoaXMuY3JlYXRlU2VhcmNoKCk7CiAgICAgICAg
dGhpcy5jcmVhdGVBZHZlcnRpc2VtZW50RnJhbWV3b3JrKCk7CiAgICAgICAgdGhpcy5wb3B1bGF0
ZU1vcmVWaWRlb3MoMSk7CiAgICAgICAgdGhpcy5sb2FkUGFnaW5hdGlvbigxKTsKICAgICAgICB0
aGlzLnVwZGF0ZVJzc0ZlZWQoKHRoaXMudmlzaWJsZVN1YkNvbGxlY3Rpb25JZCAhPT0gJycpID8g
dGhpcy52aXNpYmxlU3ViQ29sbGVjdGlvbklkIDogdGhpcy52aXNpYmxlQ29sbGVjdGlvbklkKTsK
ICAgIH0sCiAgICB2YWxpZGF0ZUNvbnRlbnRVcmw6IGZ1bmN0aW9uIChjb250ZW50VXJsKSB7CiAg
ICAgICAgaWYgKHRoaXMudmlkZW9VdGlsLmlzTm90QmxhbmtPck51bGwoY29udGVudFVybCkpIHsK
ICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRVcmw7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgdGhpcy5jdXJyZW50bHlQbGF5aW5nQ29sbGVjdGlvbiA9IHRoaXMuZGVmYXVsdENvbGxlY3Rp
b25OYW1lOwogICAgICAgICAgICByZXR1cm4gdGhpcy5jb250ZW50VXJsc09iamVjdFt0aGlzLmRl
ZmF1bHRDb2xsZWN0aW9uTmFtZV07CiAgICAgICAgfQogICAgfSwKICAgIGNyZWF0ZUFkdmVydGlz
ZW1lbnRGcmFtZXdvcms6IGZ1bmN0aW9uICgpIHsKICAgICAgICBpZiAodGhpcy5hZHZlcnRpc2Vt
ZW50RGl2SWQpIHsKICAgICAgICAgICAgaWYgKHN3Zm9iamVjdC5nZXRGbGFzaFBsYXllclZlcnNp
b24oKS5tYWpvciA+PSA5KSB7CiAgICAgICAgICAgICAgICB2YXIgZGltID0gewogICAgICAgICAg
ICAgICAgICAgIHc6ICIzMzYiLAogICAgICAgICAgICAgICAgICAgIGg6ICIyODAiCiAgICAgICAg
ICAgICAgICB9OwogICAgICAgICAgICAgICAgc3dmb2JqZWN0LmVtYmVkU1dGKHRoaXMuZmxhc2hQ
bGF5ZXJQYXRoICsgImFkUGxheWVyLnN3ZiIsIHRoaXMuYWR2ZXJ0aXNlbWVudERpdklkLCBkaW0u
dywgZGltLmgsICI5LjAuMCIsICIiLCB7CiAgICAgICAgICAgICAgICAgICAgJ29iak5hbWUnOiB0
aGlzLmdldE5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAnbW92aWVXaWR0aCc6IGRpbS53LAog
ICAgICAgICAgICAgICAgICAgICdtb3ZpZUhlaWdodCc6IGRpbS5oLAogICAgICAgICAgICAgICAg
ICAgICdob3N0JzogbG9jYXRpb24uaG9zdAogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAg
ICAgICAgICAgIGFsbG93c2NyaXB0YWNjZXNzOiAiYWx3YXlzIiwKICAgICAgICAgICAgICAgICAg
ICB3bW9kZTogIm9wYXF1ZSIKICAgICAgICAgICAgICAgIH0sIHt9KTsKICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgIGRqLnV0aWwuVmlkZW8ubm9uU3VwcG9ydGluZ0ZsYXNoUGxh
eWVyKHRoaXMuYWR2ZXJ0aXNlbWVudERpdklkKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg
IH0sCiAgICBjb2xsZWN0aW9uTmFtZUZvclN1YmNvbGxlY3Rpb246IGZ1bmN0aW9uIChzdWJDb2wp
IHsKICAgICAgICBmb3IgKHZhciBpbmRleCA9IDAsIGxlbiA9IHRoaXMuY29sbGVjdGlvbk5hbWVz
QXJyYXkubGVuZ3RoOyBpbmRleCA8IGxlbjsgKytpbmRleCkgewogICAgICAgICAgICBpZiAodGhp
cy5zdWJjb2xsZWN0aW9uc09iamVjdFsodGhpcy5jb2xsZWN0aW9uTmFtZXNBcnJheVtpbmRleF0p
XS5pbmRleE9mKHN1YkNvbCkgIT0gLTEpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNv
bGxlY3Rpb25OYW1lc0FycmF5W2luZGV4XTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0s
CiAgICBwYXVzZU1pY3JvUGxheWVyczogZnVuY3Rpb24gKCkgewogICAgICAgIHRyeSB7CiAgICAg
ICAgICAgIGZvciAodmFyIGluZGV4ID0gMCwgbGVuID0gdGhpcy5taWNyb1BsYXllcnMubGVuZ3Ro
OyBpbmRleCA8IGxlbjsgKytpbmRleCkgewogICAgICAgICAgICAgICAgc3dmb2JqZWN0LmdldE9i
amVjdEJ5SWQodGhpcy5taWNyb1BsYXllcnNbaW5kZXhdKS5wYXVzZVZpZGVvKCk7CiAgICAgICAg
ICAgIH0KICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkVy
cm9yIHdoaWxlIHBhdXNpbmcgbWljcm9QbGF5ZXJzLiAiICsgZS5tZXNzYWdlKTsKICAgICAgICB9
CiAgICB9LAogICAgc2V0Qm9va01hcms6IGZ1bmN0aW9uICgpIHsKICAgICAgICB0cnkgewogICAg
ICAgICAgICB0aGlzLmJvb2tNYXJrZWRJZCA9IHRoaXMuY3VycmVudGx5UGxheWluZ1ZpZGVvSWQ7
CiAgICAgICAgICAgIHRoaXMuYm9va01hcmtlZExvY2F0aW9uID0gTWF0aC5mbG9vcihzd2ZvYmpl
Y3QuZ2V0T2JqZWN0QnlJZCgiZmxhc2hQbGF5ZXIiKS5nZXRTZWVrKCkpOwogICAgICAgICAgICBz
d2ZvYmplY3QuZ2V0T2JqZWN0QnlJZCgiZmxhc2hQbGF5ZXIiKS5wYXVzZVZpZGVvKCk7CiAgICAg
ICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKCJFcnJvciB3aGlsZSBz
ZXR0aW5nIHRoZSBib29rbWFyay4gIiArIGUubWVzc2FnZSk7CiAgICAgICAgfQogICAgfSwKICAg
IHVwZGF0ZVZpZGVvVGh1bWJuYWlsVmlzdWFsOiBmdW5jdGlvbiAoY2xlYW5JZCwgYXBwbHlJZCkg
ewogICAgICAgIGlmIChjbGVhbklkICE9PSAnJyAmJiBkb2pvLmJ5SWQoImxpXyIgKyBjbGVhbklk
KSkgewogICAgICAgICAgICBkb2pvLmJ5SWQoImxpXyIgKyBjbGVhbklkKS5jbGFzc05hbWUgPSAi
IjsKICAgICAgICB9CiAgICAgICAgaWYgKGFwcGx5SWQgIT09ICcnICYmIGRvam8uYnlJZCgibGlf
IiArIGFwcGx5SWQpKSB7CiAgICAgICAgICAgIGRvam8uYnlJZCgibGlfIiArIGFwcGx5SWQpLmNs
YXNzTmFtZSA9ICJub3dQbGF5aW5nIjsKICAgICAgICB9CiAgICB9LAogICAgcGFyc2VJbmZvcm1h
dGlvbkZyb21YbWxEb2M6IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgY29sbGVjdGlvbkFycmF5
ID0gdGhpcy54bWxEb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImNvbGxlY3Rpb24iKTsKICAgICAg
ICBmb3IgKHZhciBpbmRleCA9IDAsIGxlbiA9IGNvbGxlY3Rpb25BcnJheS5sZW5ndGg7IGluZGV4
IDwgbGVuOyArK2luZGV4KSB7CiAgICAgICAgICAgIHZhciBpdGVtID0gY29sbGVjdGlvbkFycmF5
W2luZGV4XTsKICAgICAgICAgICAgdGhpcy51cmxLZXlzQ29sbGVjdGlvbk1hcFtpdGVtLmdldEF0
dHJpYnV0ZSgidXJsa2V5IildID0gaXRlbS5nZXRBdHRyaWJ1dGUoIm5hbWUiKTsKICAgICAgICAg
ICAgdGhpcy5jb250ZW50VXJsc09iamVjdFtpdGVtLmdldEF0dHJpYnV0ZSgibmFtZSIpXSA9IGl0
ZW0uZ2V0QXR0cmlidXRlKCJjb250ZW50dXJsIik7CiAgICAgICAgICAgIHRoaXMucnNzVXJsc09i
amVjdFtpdGVtLmdldEF0dHJpYnV0ZSgibmFtZSIpXSA9IGl0ZW0uZ2V0QXR0cmlidXRlKCJyc3N1
cmwiKTsKICAgICAgICAgICAgdGhpcy5jb2xsZWN0aW9uTmFtZXNBcnJheVt0aGlzLmNvbGxlY3Rp
b25OYW1lc0FycmF5Lmxlbmd0aF0gPSBpdGVtLmdldEF0dHJpYnV0ZSgibmFtZSIpOwogICAgICAg
ICAgICB2YXIgc3ViQ29sbGVjdGlvbkFycmF5ID0gaXRlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgi
c3ViY29sbGVjdGlvbiIpOwogICAgICAgICAgICB2YXIgc3ViQ29sbGVjdGlvbkFycmF5TGVuZ3Ro
ID0gc3ViQ29sbGVjdGlvbkFycmF5Lmxlbmd0aDsKICAgICAgICAgICAgdmFyIHN1YkNvbGxOYW1l
c0FyID0gW107CiAgICAgICAgICAgIGZvciAodmFyIHNpbmRleCA9IDAsIHNsZW4gPSBzdWJDb2xs
ZWN0aW9uQXJyYXkubGVuZ3RoOyBzaW5kZXggPCBzbGVuOyArK3NpbmRleCkgewogICAgICAgICAg
ICAgICAgdmFyIHNpdGVtID0gc3ViQ29sbGVjdGlvbkFycmF5W3NpbmRleF07CiAgICAgICAgICAg
ICAgICB0aGlzLnVybEtleXNTdWJDb2xsZWN0aW9uTWFwW3NpdGVtLmdldEF0dHJpYnV0ZSgidXJs
a2V5IildID0gc2l0ZW0uZ2V0QXR0cmlidXRlKCJuYW1lIik7CiAgICAgICAgICAgICAgICB0aGlz
LmNvbnRlbnRVcmxzT2JqZWN0W3NpdGVtLmdldEF0dHJpYnV0ZSgibmFtZSIpXSA9IHNpdGVtLmdl
dEF0dHJpYnV0ZSgiY29udGVudHVybCIpOwogICAgICAgICAgICAgICAgdGhpcy5yc3NVcmxzT2Jq
ZWN0W3NpdGVtLmdldEF0dHJpYnV0ZSgibmFtZSIpXSA9IHNpdGVtLmdldEF0dHJpYnV0ZSgicnNz
dXJsIik7CiAgICAgICAgICAgICAgICBzdWJDb2xsTmFtZXNBcltzaW5kZXhdID0gc2l0ZW0uZ2V0
QXR0cmlidXRlKCJuYW1lIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5zdWJjb2xs
ZWN0aW9uc09iamVjdFtpdGVtLmdldEF0dHJpYnV0ZSgibmFtZSIpXSA9IHN1YkNvbGxOYW1lc0Fy
OwogICAgICAgIH0KICAgIH0sCiAgICBjcmVhdGVGbGFzaFBsYXllcjogZnVuY3Rpb24gKCkgewog
ICAgICAgIGlmIChkb2pvLmJ5SWQodGhpcy52aWRlb1BsYXllckRpdklkKSkgewogICAgICAgICAg
ICB0cnkgewogICAgICAgICAgICAgICAgdmFyIGRpbSA9IHsKICAgICAgICAgICAgICAgICAgICB3
OiAiNTEyIiwKICAgICAgICAgICAgICAgICAgICBoOiAiMzYzIgogICAgICAgICAgICAgICAgfTsK
ICAgICAgICAgICAgICAgIHN3Zm9iamVjdC5lbWJlZFNXRih0aGlzLmZsYXNoUGxheWVyUGF0aCAr
ICJtYWluLnN3ZiIsIHRoaXMudmlkZW9QbGF5ZXJEaXZJZCwgZGltLncsIGRpbS5oLCAiOS4wLjAi
LCAiIiwgewogICAgICAgICAgICAgICAgICAgICdvYmpOYW1lJzogdGhpcy5nZXROYW1lKCksCiAg
ICAgICAgICAgICAgICAgICAgJ2FsbG93UGxheWVyUG9wdXAnOiAnMScsCiAgICAgICAgICAgICAg
ICAgICAgJ3BseU1lZGlhRW5hYmxlZCc6ICcxJywKICAgICAgICAgICAgICAgICAgICAnbW92aWVX
aWR0aCc6IGRpbS53LAogICAgICAgICAgICAgICAgICAgICdtb3ZpZUhlaWdodCc6IGRpbS5oLAog
ICAgICAgICAgICAgICAgICAgICdob3N0JzogbG9jYXRpb24uaG9zdAogICAgICAgICAgICAgICAg
fSwgewogICAgICAgICAgICAgICAgICAgIGFsbG93c2NyaXB0YWNjZXNzOiAiYWx3YXlzIiwKICAg
ICAgICAgICAgICAgICAgICB3bW9kZTogIm9wYXF1ZSIKICAgICAgICAgICAgICAgIH0sIHsKICAg
ICAgICAgICAgICAgICAgICBpZDogImZsYXNoUGxheWVyIgogICAgICAgICAgICAgICAgfSk7CiAg
ICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkVy
cm9yIG9jY3VyZWQgY3JlYXRlRmxhc2hQbGF5ZXIuLiIgKyBlLm1lc3NhZ2UpOwogICAgICAgICAg
ICAgICAgZG9qby5ieUlkKHRoaXMudmlkZW9QbGF5ZXJEaXZJZCkuaW5uZXJIVE1MID0gJ0NvdWxk
blwndCBsb2FkIHRoZSBmbGFzaCBwbGF5ZXIuIFxuIEVycm9yIG1lc3NhZ2UgaXM6ICcgKyBlLm1l
c3NhZ2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9LAogICAgY29udmVydEN1cnJlbnRQ
bGF5aW5nSnNvblRvSWRzQXJyYXk6IGZ1bmN0aW9uICgpIHsKICAgICAgICB0aGlzLmN1cnJlbnRs
eVBsYXlpbmdWaWRlb0lkcyA9IFtdOwogICAgICAgIGlmICh0aGlzLmN1cnJlbnRQbGF5aW5nSnNv
bk9iamVjdC5pdGVtcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0g
MCwgbGVuID0gdGhpcy5jdXJyZW50UGxheWluZ0pzb25PYmplY3QuaXRlbXMubGVuZ3RoOyBpbmRl
eCA8IGxlbjsgKytpbmRleCkgewogICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50bHlQbGF5aW5n
VmlkZW9JZHNbaW5kZXhdID0gdGhpcy5jdXJyZW50UGxheWluZ0pzb25PYmplY3QuaXRlbXNbaW5k
ZXhdLmlkOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSwKICAgIHBvcHVsYXRlVmlkZW9T
dW1tYXJ5OiBmdW5jdGlvbiAobmFtZSwgZGVzY3JpcHRpb24sIGZvcm1hdHRlZENyZWF0aW9uRGF0
ZSkgewogICAgICAgIGlmIChkb2pvLmJ5SWQodGhpcy52aWRlb1N1bW1hcnlEaXZJZCkpIHsKICAg
ICAgICAgICAgdmFyIHN0ciA9ICcnOwogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAg
c3RyICs9ICc8aDI+JyArIG5hbWUgKyAnIDxzbWFsbD4nICsgZm9ybWF0dGVkQ3JlYXRpb25EYXRl
LnNwbGl0KCcgJylbMF0gKyAnPC9zbWFsbD4nOwogICAgICAgICAgICAgICAgc3RyICs9ICc8L2gy
Pic7CiAgICAgICAgICAgICAgICBzdHIgKz0gJzxwPicgKyBkZXNjcmlwdGlvbiArICc8L3A+JzsK
ICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigi
RXJyb3Igb2NjdXJlZCBpbiBwb3B1bGF0ZVZpZGVvU3VtbWFyeS4iICsgZS5tZXNzYWdlKTsKICAg
ICAgICAgICAgICAgIHN0ciArPSAnQ291bGRuXCd0IGdldCB2aWRlbyBzdW1tYXJ5Lic7CiAgICAg
ICAgICAgIH0KICAgICAgICAgICAgZG9qby5ieUlkKHRoaXMudmlkZW9TdW1tYXJ5RGl2SWQpLmlu
bmVySFRNTCA9IHN0cjsKICAgICAgICB9CiAgICB9LAogICAgY3JlYXRlQWR2ZXJ0aXNlbWVudDog
ZnVuY3Rpb24gKGltZ1VybCwgbGluaykgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHN3Zm9i
amVjdC5nZXRPYmplY3RCeUlkKHRoaXMuYWR2ZXJ0aXNlbWVudERpdklkKS5sb2FkQWQoaW1nVXJs
LCBsaW5rKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3Io
IkVycm9yIHdoaWxlIGxvYWRpbmcgYWQgaW4gY3JlYXRlQWR2ZXJ0aXNlbWVudCA6ICIgKyBlKTsK
ICAgICAgICB9CiAgICB9LAogICAgY3JlYXRlTmV4dFZpZGVvOiBmdW5jdGlvbiAoKSB7CiAgICAg
ICAgdmFyIHN0ciA9ICdMb2FkaW5nLi4uJzsKICAgICAgICB0cnkgewogICAgICAgICAgICB0aGlz
Lm5leHRWaWRlb0lkID0gdGhpcy5nZXROZXh0VmlkZW9JZCgpOwogICAgICAgICAgICBpZiAodGhp
cy5uZXh0VmlkZW9JZCAhPT0gJycpIHsKICAgICAgICAgICAgICAgIHZhciB1cmwgPSAnL2FwaS12
aWRlby9nZXRfdmlkZW9faW5mby5hc3A/Z3VpZD0nICsgdGhpcy5uZXh0VmlkZW9JZCArICcmZmll
bGRzPWFsbCc7CiAgICAgICAgICAgICAgICB0aGlzLmdldFZpZGVvcyh1cmwsICduZXh0Jyk7CiAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBzdHIgPSAnTm8gbW9yZSB2aWRlb3Mu
JzsKICAgICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgY29uc29s
ZS5lcnJvcigiRXJyb3Igb2NjdXJlZCB3aGlsZSBleGVjdXRpbmcgY3JlYXRlTmV4dFZpZGVvKCkg
LSAiICsgZS5tZXNzYWdlKTsKICAgICAgICAgICAgc3RyICs9ICdDb3VsZG5cJ3QgZGV0ZXJtaW5l
IG5leHQgdmlkZW8gZGV0YWlscy4nOwogICAgICAgIH0KICAgICAgICBpZiAoZG9qby5ieUlkKHRo
aXMubmV4dFZpZGVvRGl2SWQpKSB7CiAgICAgICAgICAgIGRvam8uYnlJZCh0aGlzLm5leHRWaWRl
b0RpdklkKS5pbm5lckhUTUwgPSBzdHI7CiAgICAgICAgfQogICAgfSwKICAgIHBvcHVsYXRlTmV4
dFZpZGVvOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIHN0ciA9ICcnOwogICAgICAgIHRyeSB7
CiAgICAgICAgICAgIHZhciBuYW1lVG9EaXNwbGF5ID0gdGhpcy52aWRlb1V0aWwuaXNOb3RCbGFu
a09yTnVsbCh0aGlzLmN1cnJlbnRseVBsYXlpbmdTdWJDb2xsZWN0aW9uKSA/IHRoaXMuY3VycmVu
dGx5UGxheWluZ1N1YkNvbGxlY3Rpb24gOiB0aGlzLmN1cnJlbnRseVBsYXlpbmdDb2xsZWN0aW9u
OwogICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50bHlQbGF5aW5nQ29sbGVjdGlvbiA9PSAnU2Vh
cmNoIFJlc3VsdHMnKSB7CiAgICAgICAgICAgICAgICBzdHIgKz0gJzxoMz5OZXh0IGluIFZpZGVv
ICcgKyB0aGlzLmN1cnJlbnRseVBsYXlpbmdDb2xsZWN0aW9uICsgJzwvaDM+JzsKICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHN0ciArPSAnPGgzPk5leHQgaW4gJyArIG5hbWVU
b0Rpc3BsYXkgKyAnIFZpZGVvPC9oMz4nOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHN0ciAr
PSAnPHVsIGNsYXNzPSJuZXdzSXRlbSB2aWRlbyI+JzsKICAgICAgICAgICAgc3RyICs9ICc8bGk+
JzsKICAgICAgICAgICAgc3RyICs9ICc8YSBocmVmPSJqYXZhc2NyaXB0OicgKyB0aGlzLmdldE5h
bWUoKSArICcubmV4dFZpZGVvVGh1bWJuYWlsQ2xpY2tlZChcJycgKyB0aGlzLm5leHRWaWRlb0Rl
dGFpbHNKc29uT2JqZWN0LmlkICsgJ1wnKSIgc3R5bGU9ImJhY2tncm91bmQtaW1hZ2U6IHVybCgn
ICsgdGhpcy5uZXh0VmlkZW9EZXRhaWxzSnNvbk9iamVjdC50aHVtYm5haWxVUkwgKyAnKSIgY2xh
c3M9InByZXZpZXciPjxzcGFuPiZuYnNwOzwvc3Bhbj48L2E+JzsKICAgICAgICAgICAgc3RyICs9
ICc8aDI+PGEgaHJlZj0iamF2YXNjcmlwdDonICsgdGhpcy5nZXROYW1lKCkgKyAnLm5leHRWaWRl
b1RodW1ibmFpbENsaWNrZWQoXCcnICsgdGhpcy5uZXh0VmlkZW9EZXRhaWxzSnNvbk9iamVjdC5p
ZCArICdcJykiPicgKyB0aGlzLm5leHRWaWRlb0RldGFpbHNKc29uT2JqZWN0Lm5hbWUgKyAnPC9h
PjwvaDI+JzsKICAgICAgICAgICAgdmFyIG1pbnV0ZXMgPSBNYXRoLmZsb29yKHRoaXMubmV4dFZp
ZGVvRGV0YWlsc0pzb25PYmplY3QuZHVyYXRpb24gLyA2MCk7CiAgICAgICAgICAgIHZhciBzZWNv
bmRzID0gdGhpcy5uZXh0VmlkZW9EZXRhaWxzSnNvbk9iamVjdC5kdXJhdGlvbiAlIDYwOwogICAg
ICAgICAgICBpZiAoc2Vjb25kcyA8IDEwKSB7CiAgICAgICAgICAgICAgICBzZWNvbmRzID0gJzAn
ICsgc2Vjb25kczsKICAgICAgICAgICAgfQogICAgICAgICAgICBzdHIgKz0gJzxzbWFsbD4nICsg
bWludXRlcyArICc6JyArIHNlY29uZHMgKyAnPC9zbWFsbD4nOwogICAgICAgICAgICBzdHIgKz0g
JzxwPicgKyB0aGlzLm5leHRWaWRlb0RldGFpbHNKc29uT2JqZWN0LmRlc2NyaXB0aW9uICsgJzwv
cD4nOwogICAgICAgICAgICBzdHIgKz0gJzwvbGk+JzsKICAgICAgICAgICAgc3RyICs9ICc8L3Vs
Pic7CiAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKCJFcnJv
ciBvY2N1cmVkIHdoaWxlIGV4ZWN1dGluZyBwb3B1bGF0ZU5leHRWaWRlbygpIC0gIiArIGUubWVz
c2FnZSk7CiAgICAgICAgICAgIHN0ciArPSAnQ291bGRuXCd0IHBvcHVsYXRlIG5leHQgdmlkZW8g
ZGV0YWlscy4nOwogICAgICAgIH0KICAgICAgICBpZiAoZG9qby5ieUlkKHRoaXMubmV4dFZpZGVv
RGl2SWQpKSB7CiAgICAgICAgICAgIGRvam8uYnlJZCh0aGlzLm5leHRWaWRlb0RpdklkKS5pbm5l
ckhUTUwgPSBzdHI7CiAgICAgICAgfQogICAgfSwKICAgIG5leHRWaWRlb1RodW1ibmFpbENsaWNr
ZWQ6IGZ1bmN0aW9uICh2aWRlb0lkKSB7CiAgICAgICAgdGhpcy51c2VyQWN0aW9uID0gJyc7CiAg
ICAgICAgdGhpcy5wb3B1bGF0ZU1vcmVWaWRlb3MoMSk7CiAgICAgICAgdGhpcy5sb2FkUGFnaW5h
dGlvbigxKTsKICAgICAgICB0aGlzLnVwZGF0ZVZpZGVvVGh1bWJuYWlsVmlzdWFsKHRoaXMuY3Vy
cmVudGx5UGxheWluZ1ZpZGVvSWQsIHZpZGVvSWQpOwogICAgICAgIHRoaXMuY3VycmVudGx5UGxh
eWluZ1ZpZGVvSWQgPSB2aWRlb0lkOwogICAgICAgIHRoaXMucGxheVZpZGVvQnlWaWRlb0lkKHZp
ZGVvSWQpOwogICAgICAgIHRoaXMuY3JlYXRlTmV4dFZpZGVvKCk7CiAgICAgICAgaWYgKHRoaXMu
dmlkZW9VdGlsLmlzTm90QmxhbmtPck51bGwodGhpcy5jdXJyZW50bHlQbGF5aW5nU3ViQ29sbGVj
dGlvbikpIHsKICAgICAgICAgICAgdGhpcy51cGRhdGVTaWRlTmF2QXBwZWFyYW5jZSgnc3ViY29s
bGVjdGlvbicsIHRoaXMuY3VycmVudGx5UGxheWluZ1N1YkNvbGxlY3Rpb24pOwogICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgIHRoaXMudXBkYXRlU2lkZU5hdkFwcGVhcmFuY2UoJ2NvbGxlY3Rp
b24nLCB0aGlzLmN1cnJlbnRseVBsYXlpbmdDb2xsZWN0aW9uKTsKICAgICAgICB9CiAgICB9LAog
ICAgY3JlYXRlU2VhcmNoOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIHN0ciA9ICcnOwogICAg
ICAgIHN0ciArPSAnPGZvcm0gaWQ9InNlYXJjaEZvcm0iIG9uU3VibWl0PSJqYXZhc2NyaXB0Oicg
KyB0aGlzLmdldE5hbWUoKSArICcuc2VhcmNoQnV0dG9uQ2xpY2tlZCgpO3JldHVybiBmYWxzZTsi
IGNsYXNzPSIiIG1ldGhvZD0icG9zdCIgYWNjZXB0LWNoYXJzZXQ9InV0Zi04Ij4nOwogICAgICAg
IHN0ciArPSAnPGZpZWxkc2V0Pic7CiAgICAgICAgc3RyICs9ICc8bGVnZW5kPlNlYXJjaCBWaWRl
b3M8L2xlZ2VuZD4nOwogICAgICAgIHN0ciArPSAnPGRpdiBjbGFzcz0iY3RsIj4nOwogICAgICAg
IHN0ciArPSAnPGxhYmVsIGZvcj0iZnJtU2VhcmNoU2VjdEN0bDAxIj5TZWFyY2ggVmlkZW9zPC9s
YWJlbD4nOwogICAgICAgIHN0ciArPSAnPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImZybVNlYXJj
aFNlY3RDdGwwMSIgdmFsdWU9IlNlYXJjaCBWaWRlbyIgaWQ9ImZybVNlYXJjaFNlY3RDdGwwMSIg
Y2xhc3M9InRleHQiIG9uRm9jdXM9IicgKyB0aGlzLmdldE5hbWUoKSArICcuc2VhcmNoSW5wdXRC
b3hGb2N1c2VkKCk7Ii8+JzsKICAgICAgICBzdHIgKz0gJzwvZGl2Pic7CiAgICAgICAgc3RyICs9
ICc8ZGl2IGNsYXNzPSJjdGwiPic7CiAgICAgICAgc3RyICs9ICc8bGFiZWwgZm9yPSJmcm1TZWFy
Y2hTZWN0U3ViIj5TZWFyY2g8L2xhYmVsPic7CiAgICAgICAgc3RyICs9ICc8YnV0dG9uIGlkPSJz
ZWFyY2hCdXR0b24iIHR5cGU9InN1Ym1pdCI+U2VhcmNoPC9idXR0b24+JzsKICAgICAgICBzdHIg
Kz0gJzwvZGl2Pic7CiAgICAgICAgc3RyICs9ICc8L2ZpZWxkc2V0Pic7CiAgICAgICAgc3RyICs9
ICc8L2Zvcm0+JzsKICAgICAgICBpZiAoZG9qby5ieUlkKHRoaXMuc2VhcmNoRGl2SWQpKSB7CiAg
ICAgICAgICAgIGRvam8uYnlJZCh0aGlzLnNlYXJjaERpdklkKS5pbm5lckhUTUwgPSBzdHI7CiAg
ICAgICAgfQogICAgfSwKICAgIHNlYXJjaElucHV0Qm94Rm9jdXNlZDogZnVuY3Rpb24gKCkgewog
ICAgICAgIGRvam8uYnlJZCgiZnJtU2VhcmNoU2VjdEN0bDAxIikudmFsdWUgPSAiIjsKICAgICAg
ICBkb2pvLmJ5SWQoInNlYXJjaEZvcm0iKS5jbGFzc05hbWUgPSAiIjsKICAgIH0sCiAgICBzZWFy
Y2hCdXR0b25DbGlja2VkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIHNlYXJjaFR4dCA9IGRv
am8uYnlJZCgiZnJtU2VhcmNoU2VjdEN0bDAxIikudmFsdWUucmVwbGFjZSgvXlxzK3xccyskLywg
JycpOwogICAgICAgIGlmIChzZWFyY2hUeHQgPT09ICcnKSB7CiAgICAgICAgICAgIGRvam8uYnlJ
ZCgic2VhcmNoRm9ybSIpLmNsYXNzTmFtZSA9ICJzZWFyY2hfZXJyb3IiOwogICAgICAgICAgICBk
b2pvLmJ5SWQoImZybVNlYXJjaFNlY3RDdGwwMSIpLnZhbHVlID0gIlBsZWFzZSBlbnRlciBzZWFy
Y2ggdGVybXMiOwogICAgICAgICAgICBkb2pvLmJ5SWQoInNlYXJjaEJ1dHRvbiIpLmZvY3VzKCk7
CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgdGhpcy5jdXJyZW50
U2VhcmNoVGV4dCA9IHNlYXJjaFR4dDsKICAgICAgICB0aGlzLnNvcnRPcmRlciA9ICdyZWxldmFu
Y3knOwogICAgICAgIGlmICghdGhpcy5pc1ZpZGVvUmVzdWx0c0luU2lkZU5hdikgewogICAgICAg
ICAgICB0aGlzLmluc2VydFZpZGVvUmVzdWx0c0luU2lkZU5hdigpOwogICAgICAgICAgICB0aGlz
LmlzVmlkZW9SZXN1bHRzSW5TaWRlTmF2ID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgdGhpcy51
cGRhdGVWaWRlb1Jlc3VsdHNJblNpZGVOYXYodGhpcy5jdXJyZW50U2VhcmNoVGV4dCk7CiAgICAg
ICAgdGhpcy51cGRhdGVTaWRlTmF2QXBwZWFyYW5jZSgnY29sbGVjdGlvbicsICdTZWFyY2ggUmVz
dWx0cycpOwogICAgICAgIHZhciBzZWFyY2hVcmwgPSAnL2FwaS12aWRlby9maW5kX2FsbF92aWRl
b3MuYXNwP3R5cGU9d3NqLWZ1bGx0ZXh0JnF1ZXJ5PScgKyBzZWFyY2hUeHQ7CiAgICAgICAgdGhp
cy5wZXJmb3JtU2VhcmNoKHNlYXJjaFVybCk7CiAgICAgICAgZG9qby5ieUlkKCJzZWFyY2hCdXR0
b24iKS5mb2N1cygpOwogICAgfSwKICAgIGluc2VydFZpZGVvUmVzdWx0c0luU2lkZU5hdjogZnVu
Y3Rpb24gKCkgewogICAgICAgIHZhciBzdHIgPSAnJzsKICAgICAgICBzdHIgKz0gJzxsaSBpZD0i
U2VhcmNoIFJlc3VsdHMiIGNsYXNzPSJub1N1YkNvbGxlY3Rpb24iPic7CiAgICAgICAgc3RyICs9
ICc8L2xpPic7CiAgICAgICAgc3RyICs9IGRvam8uYnlJZCh0aGlzLnNpZGVOYXZVbElkKS5pbm5l
ckhUTUw7CiAgICAgICAgZG9qby5ieUlkKHRoaXMuc2lkZU5hdlVsSWQpLmlubmVySFRNTCA9IHN0
cjsKICAgIH0sCiAgICB1cGRhdGVWaWRlb1Jlc3VsdHNJblNpZGVOYXY6IGZ1bmN0aW9uIChzcmNo
VGV4dCkgewogICAgICAgIHZhciBmaWVsZHMgPSAnaWQsbmFtZSxkZXNjcmlwdGlvbixkdXJhdGlv
bix0aHVtYm5haWxVUkwsdmlkZW9VUkwsZm9ybWF0dGVkQ3JlYXRpb25EYXRlLHdzai1zZWN0aW9u
LHdzai1zdWJzZWN0aW9uJzsKICAgICAgICB2YXIgc3JjaENvbnRlbnRVcmwgPSAnL2FwaS12aWRl
by9maW5kX2FsbF92aWRlb3MuYXNwP3R5cGU9d3NqLWZ1bGx0ZXh0JnF1ZXJ5PScgKyBzcmNoVGV4
dCArICcmZmllbGRzPScgKyBmaWVsZHM7CiAgICAgICAgdGhpcy5jb250ZW50VXJsc09iamVjdFsn
U2VhcmNoIFJlc3VsdHMnXSA9IHNyY2hDb250ZW50VXJsOwogICAgICAgIHZhciBzdHIgPSAnJzsK
ICAgICAgICBzdHIgKz0gJzxhIGlkPSJhX1NlYXJjaCBSZXN1bHRzIiBjbGFzcz0iIiBocmVmPSJq
YXZhc2NyaXB0OicgKyB0aGlzLmdldE5hbWUoKSArICcuc2lkZU5hdkNsaWNrZWQoXCdjb2xsZWN0
aW9uXCcsXCdTZWFyY2ggUmVzdWx0c1wnKTsiPic7CiAgICAgICAgc3RyICs9ICdTZWFyY2ggUmVz
dWx0czwvYT4nOwogICAgICAgIGRvam8uYnlJZCgiU2VhcmNoIFJlc3VsdHMiKS5pbm5lckhUTUwg
PSBzdHI7CiAgICB9LAogICAgcGVyZm9ybVNlYXJjaDogZnVuY3Rpb24gKHNlYXJjaFVybCkgewog
ICAgICAgIHRoaXMudXNlckFjdGlvbiA9ICd0b1NlYXJjaCc7CiAgICAgICAgdmFyIGZpZWxkcyA9
ICdpZCxuYW1lLGRlc2NyaXB0aW9uLGR1cmF0aW9uLHRodW1ibmFpbFVSTCx2aWRlb1VSTCxmb3Jt
YXR0ZWRDcmVhdGlvbkRhdGUsd3NqLXNlY3Rpb24sd3NqLXN1YnNlY3Rpb24nOwogICAgICAgIGRv
am8uYnlJZCh0aGlzLnZpZGVvUmVzdWx0c0RpdklkKS5pbm5lckhUTUwgPSAnPHAgY2xhc3M9Im5v
UmVzdWx0cyI+IExvYWRpbmcgLi4uIDwvcD4nOwogICAgICAgIHRoaXMuZ2V0VmlkZW9zKHNlYXJj
aFVybCArICcmZmllbGRzPScgKyBmaWVsZHMgKyAnJmNvdW50PTYwJywgdGhpcy51c2VyQWN0aW9u
KTsKICAgIH0sCiAgICBsb2FkUGFnaW5hdGlvbjogZnVuY3Rpb24gKHBhZ2VOdW1iZXIpIHsKICAg
ICAgICB2YXIgdmFyVG9EaXNwbGF5ID0gJyc7CiAgICAgICAgaWYgKHRoaXMudXNlckFjdGlvbiA9
PSAndG9Ccm93c2UnKSB7CiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5jdXJyZW50QnJvd3Np
bmdKc29uT2JqZWN0ICE9ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgICAgICB2YXJUb0Rpc3Bs
YXkgPSB0aGlzLmN1cnJlbnRCcm93c2luZ0pzb25PYmplY3QuaXRlbXM7CiAgICAgICAgICAgIH0K
ICAgICAgICB9IGVsc2UgaWYgKHRoaXMudXNlckFjdGlvbiA9PSAndG9TZWFyY2gnKSB7CiAgICAg
ICAgICAgIGlmICh0eXBlb2YgdGhpcy5jdXJyZW50U2VhcmNoSnNvbk9iamVjdCAhPSAidW5kZWZp
bmVkIikgewogICAgICAgICAgICAgICAgdmFyVG9EaXNwbGF5ID0gdGhpcy5jdXJyZW50U2VhcmNo
SnNvbk9iamVjdC5pdGVtczsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgIHZhclRvRGlzcGxheSA9IHRoaXMuY3VycmVudFBsYXlpbmdKc29uT2JqZWN0Lml0ZW1zOwog
ICAgICAgIH0KICAgICAgICB2YXIgY3VycmVudFBhZ2VOdW1iZXIgPSBOdW1iZXIocGFnZU51bWJl
cik7CiAgICAgICAgdmFyIGZsciA9IE1hdGguZmxvb3IodmFyVG9EaXNwbGF5Lmxlbmd0aCAvIHRo
aXMucGFnZVNpemUpOwogICAgICAgIHZhciBjbCA9IE1hdGguY2VpbCh2YXJUb0Rpc3BsYXkubGVu
Z3RoIC8gdGhpcy5wYWdlU2l6ZSk7CiAgICAgICAgdmFyIGxhc3RQYWdlTnVtYmVyID0gTWF0aC5t
YXgoZmxyLCBjbCk7CiAgICAgICAgdmFyIHN0ciA9ICcnOwogICAgICAgIGlmIChjdXJyZW50UGFn
ZU51bWJlciA9PSAxKSB7CiAgICAgICAgICAgIHN0ciArPSAnPGxpIGlkPSJwcmV2aW91cyIgY2xh
c3M9Imxpc3RGaXJzdCI+PHNwYW4+UHJldmlvdXM8L3NwYW4+PC9saT4nOwogICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgIHN0ciArPSAnPGxpIGlkPSJwcmV2aW91cyIgY2xhc3M9Imxpc3RGaXJz
dCI+PGEgaHJlZj0iamF2YXNjcmlwdDonICsgdGhpcy5nZXROYW1lKCkgKyAnLnBhZ2luYXRpb25D
bGlja2VkKFwnJyArIChjdXJyZW50UGFnZU51bWJlciAtIDEpICsgJ1wnKSI+UHJldmlvdXM8L2E+
PC9saT4nOwogICAgICAgIH0KICAgICAgICBmb3IgKHZhciBpbmRleCA9IDE7IGluZGV4IDw9IGxh
c3RQYWdlTnVtYmVyOyBpbmRleCsrKSB7CiAgICAgICAgICAgIGlmIChjdXJyZW50UGFnZU51bWJl
ciA9PSBpbmRleCkgewogICAgICAgICAgICAgICAgc3RyICs9ICc8bGk+PHNwYW4+JyArIGluZGV4
ICsgJzwvc3Bhbj48L2xpPic7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBz
dHIgKz0gJzxsaT48YSBocmVmPSJqYXZhc2NyaXB0OicgKyB0aGlzLmdldE5hbWUoKSArICcucGFn
aW5hdGlvbkNsaWNrZWQoXCcnICsgaW5kZXggKyAnXCcpIiA+JyArIGluZGV4ICsgJzwvYT48L2xp
Pic7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGN1cnJlbnRQYWdlTnVtYmVy
ID49IGxhc3RQYWdlTnVtYmVyKSB7CiAgICAgICAgICAgIHN0ciArPSAnPGxpIGlkPSJuZXh0Ij48
c3Bhbj5OZXh0PC9zcGFuPjwvbGk+JzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzdHIg
Kz0gJzxsaSBpZD0ibmV4dCI+PGEgaHJlZj0iamF2YXNjcmlwdDonICsgdGhpcy5nZXROYW1lKCkg
KyAnLnBhZ2luYXRpb25DbGlja2VkKFwnJyArIChjdXJyZW50UGFnZU51bWJlciArIDEpICsgJ1wn
KSI+TmV4dDwvYT48L2xpPic7CiAgICAgICAgfQogICAgICAgIGRvam8uYnlJZCgicGFnaW5hdGlv
biIpLmlubmVySFRNTCA9IHN0cjsKICAgIH0sCiAgICBwYWdpbmF0aW9uQ2xpY2tlZDogZnVuY3Rp
b24gKHBhZ2VOdW1iZXIpIHsKICAgICAgICB0aGlzLnBvcHVsYXRlTW9yZVZpZGVvcyhwYWdlTnVt
YmVyKTsKICAgICAgICB0aGlzLmxvYWRQYWdpbmF0aW9uKHBhZ2VOdW1iZXIpOwogICAgICAgIHRo
aXMudXBkYXRlUnNzRmVlZCgodGhpcy52aXNpYmxlU3ViQ29sbGVjdGlvbklkICE9PSAnJykgPyB0
aGlzLnZpc2libGVTdWJDb2xsZWN0aW9uSWQgOiB0aGlzLnZpc2libGVDb2xsZWN0aW9uSWQpOwog
ICAgfSwKICAgIGdldFZpZGVvczogZnVuY3Rpb24gKHVybCwgdXNlckFjdGlvbiwgY29udGV4dCwg
Y2FsbGJhY2ssIGVycm9yKSB7CiAgICAgICAgdmFyIGxvY2FsRXJyb3JDYWxsYmFjayA9IGRvam8u
aGl0Y2godGhpcywgZnVuY3Rpb24gKGVyciwgdXJsLCB1c2VyQWN0aW9uLCBjb250ZXh0LCBjYWxs
YmFjaykgewogICAgICAgICAgICBzZXRUaW1lb3V0KHRoaXMuZ2V0VmlkZW9zKHVybCwgdXNlckFj
dGlvbiwgY29udGV4dCwgY2FsbGJhY2ssIGVyciksIDEwMDAwKTsKICAgICAgICB9KTsKICAgICAg
ICB2YXIgdGhhdCA9IHRoaXM7CiAgICAgICAgdmFyIHBhcmFtcyA9IHsKICAgICAgICAgICAgaGFu
ZGxlQXM6ICJqc29uIiwKICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAiYXBwbGljYXRpb24vanNv
biIsCiAgICAgICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbiAoanNvbikgewogICAgICAgICAgICAg
ICAgdGhhdC51c3JBY3RuSGFzaFt1c2VyQWN0aW9uXS5hcHBseSh0aGF0LCBbanNvbl0pOwogICAg
ICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRl
eHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkoY29udGV4dCk7CiAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJh
Y2soKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
IH0sCiAgICAgICAgICAgIGVycm9yQ2FsbGJhY2s6IGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAg
ICAgICAgIGNvbnNvbGUud2FybigiZmFsZWQgdG8gZ2V0VmlkZW9zOiIgKyBlcnIgKyAiLCBmZXRj
aGluZyAiICsgdXJsKTsKICAgICAgICAgICAgICAgIGxvY2FsRXJyb3JDYWxsYmFjayhlcnIsIHVy
bCwgdXNlckFjdGlvbiwgY29udGV4dCwgY2FsbGJhY2spOwogICAgICAgICAgICB9CiAgICAgICAg
fTsKICAgICAgICBkai51dGlsLlZpZGVvLmdldFZpZGVvRGF0YSh1cmwsIHBhcmFtcyk7CiAgICB9
LAogICAgaGFuZGxlUmVzcG9uc2U6IGZ1bmN0aW9uIChqc29uKSB7CiAgICAgICAgdGhpcy5jdXJy
ZW50UGxheWluZ0pzb25PYmplY3QgPSBqc29uOwogICAgICAgIHRoaXMuY29udmVydEN1cnJlbnRQ
bGF5aW5nSnNvblRvSWRzQXJyYXkoKTsKICAgIH0sCiAgICBoYW5kbGVCcm93c2luZ1Jlc3VsdHM6
IGZ1bmN0aW9uIChqc29uKSB7CiAgICAgICAgdGhpcy5jdXJyZW50QnJvd3NpbmdKc29uT2JqZWN0
ID0ganNvbjsKICAgICAgICB0aGlzLnBvcHVsYXRlTW9yZVZpZGVvcygxKTsKICAgICAgICB0aGlz
LmxvYWRQYWdpbmF0aW9uKDEpOwogICAgICAgIHRoaXMudXBkYXRlUnNzRmVlZCgodGhpcy52aXNp
YmxlU3ViQ29sbGVjdGlvbklkICE9PSAnJykgPyB0aGlzLnZpc2libGVTdWJDb2xsZWN0aW9uSWQg
OiB0aGlzLnZpc2libGVDb2xsZWN0aW9uSWQpOwogICAgfSwKICAgIGhhbmRsZVNlYXJjaFJlc3Vs
dHM6IGZ1bmN0aW9uIChqc29uKSB7CiAgICAgICAgdGhpcy5jdXJyZW50U2VhcmNoSnNvbk9iamVj
dCA9IGpzb247CiAgICAgICAgdGhpcy5wb3B1bGF0ZU1vcmVWaWRlb3MoMSk7CiAgICAgICAgdGhp
cy5sb2FkUGFnaW5hdGlvbigxKTsKICAgIH0sCiAgICBoYW5kbGVDdXJyZW50OiBmdW5jdGlvbiAo
anNvbikgewogICAgICAgIHRoaXMuY3VycmVudFZpZGVvRGV0YWlsc0pzb25PYmplY3QgPSBqc29u
OwogICAgICAgIHRoaXMuY3VycmVudGx5UGxheWluZ0NvbGxlY3Rpb24gPSB0aGlzLmN1cnJlbnRW
aWRlb0RldGFpbHNKc29uT2JqZWN0Wyd3c2otc2VjdGlvbiddOwogICAgICAgIHRoaXMuY3VycmVu
dGx5UGxheWluZ1N1YkNvbGxlY3Rpb24gPSB0aGlzLmN1cnJlbnRWaWRlb0RldGFpbHNKc29uT2Jq
ZWN0Wyd3c2otc3Vic2VjdGlvbiddOwogICAgICAgIHRoaXMucGxheVZpZGVvQnlQYXJhbSh0aGlz
LmN1cnJlbnRWaWRlb0RldGFpbHNKc29uT2JqZWN0KTsKICAgICAgICB0aGlzLnBvcHVsYXRlVmlk
ZW9TdW1tYXJ5KHRoaXMuY3VycmVudFZpZGVvRGV0YWlsc0pzb25PYmplY3QubmFtZSwgdGhpcy5j
dXJyZW50VmlkZW9EZXRhaWxzSnNvbk9iamVjdC5kZXNjcmlwdGlvbiwgdGhpcy5jdXJyZW50Vmlk
ZW9EZXRhaWxzSnNvbk9iamVjdC5mb3JtYXR0ZWRDcmVhdGlvbkRhdGUpOwogICAgfSwKICAgIGhh
bmRsZU5leHQ6IGZ1bmN0aW9uIChqc29uKSB7CiAgICAgICAgdGhpcy5uZXh0VmlkZW9EZXRhaWxz
SnNvbk9iamVjdCA9IGpzb247CiAgICAgICAgdGhpcy5wb3B1bGF0ZU5leHRWaWRlbygpOwogICAg
fSwKICAgIHBvcHVsYXRlU2lkZU5hdjogZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBzcmMgPSAn
JzsKICAgICAgICB2YXIgY29sbGVjdGlvbkFycmF5ID0gdGhpcy54bWxEb2MuZ2V0RWxlbWVudHNC
eVRhZ05hbWUoImNvbGxlY3Rpb24iKTsKICAgICAgICBmb3IgKHZhciBpbmRleCA9IDAsIGxlbiA9
IGNvbGxlY3Rpb25BcnJheS5sZW5ndGg7IGluZGV4IDwgbGVuOyArK2luZGV4KSB7CiAgICAgICAg
ICAgIHZhciBpdGVtID0gY29sbGVjdGlvbkFycmF5W2luZGV4XTsKICAgICAgICAgICAgdmFyIHN1
YkNvbGxlY3Rpb25BcnJheSA9IGl0ZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInN1YmNvbGxlY3Rp
b24iKTsKICAgICAgICAgICAgdmFyIHN1YkNvbGxlY3Rpb25BcnJheUxlbmd0aCA9IHN1YkNvbGxl
Y3Rpb25BcnJheS5sZW5ndGg7CiAgICAgICAgICAgIGlmIChzdWJDb2xsZWN0aW9uQXJyYXlMZW5n
dGggPiAwKSB7CiAgICAgICAgICAgICAgICBzcmMgKz0gJzxsaSBjbGFzcz0iZXhwYW5kIiBpZD0i
JyArIGl0ZW0uZ2V0QXR0cmlidXRlKCJuYW1lIikgKyAnIj48YSBpZD0iYV8nICsgaXRlbS5nZXRB
dHRyaWJ1dGUoIm5hbWUiKSArICciIGNsYXNzPSIiIGhyZWY9ImphdmFzY3JpcHQ6JyArIHRoaXMu
Z2V0TmFtZSgpICsgJy5zaWRlTmF2Q2xpY2tlZChcJycgKyBpdGVtLm5vZGVOYW1lICsgJ1wnLFwn
JyArIGl0ZW0uZ2V0QXR0cmlidXRlKCJuYW1lIikgKyAnXCcpOyI+JyArIGl0ZW0uZ2V0QXR0cmli
dXRlKCJuYW1lIikgKyAnPC9hPic7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICBzcmMgKz0gJzxsaSBjbGFzcz0ibm9TdWJDb2xsZWN0aW9uIiBpZD0iJyArIGl0ZW0uZ2V0QXR0
cmlidXRlKCJuYW1lIikgKyAnIj48YSBpZD0iYV8nICsgaXRlbS5nZXRBdHRyaWJ1dGUoIm5hbWUi
KSArICciIGNsYXNzPSIiIGhyZWY9ImphdmFzY3JpcHQ6JyArIHRoaXMuZ2V0TmFtZSgpICsgJy5z
aWRlTmF2Q2xpY2tlZChcJycgKyBpdGVtLm5vZGVOYW1lICsgJ1wnLFwnJyArIGl0ZW0uZ2V0QXR0
cmlidXRlKCJuYW1lIikgKyAnXCcpOyI+JyArIGl0ZW0uZ2V0QXR0cmlidXRlKCJuYW1lIikgKyAn
PC9hPic7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHN1YkNvbGxlY3Rpb25BcnJheUxl
bmd0aCA+IDApIHsKICAgICAgICAgICAgICAgIHNyYyArPSAnPHVsIGlkPVN1YicgKyBpdGVtLmdl
dEF0dHJpYnV0ZSgibmFtZSIpICsgJz4nOwogICAgICAgICAgICAgICAgZm9yICh2YXIgc2luZGV4
ID0gMCwgc2xlbiA9IHN1YkNvbGxlY3Rpb25BcnJheS5sZW5ndGg7IHNpbmRleCA8IHNsZW47ICsr
c2luZGV4KSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHNpdGVtID0gc3ViQ29sbGVjdGlvbkFy
cmF5W3NpbmRleF07CiAgICAgICAgICAgICAgICAgICAgc3JjICs9ICc8bGk+PGEgaWQ9ImFfJyAr
IHNpdGVtLmdldEF0dHJpYnV0ZSgibmFtZSIpICsgJyIgY2xhc3M9ImN1cnJlbnQiIGhyZWY9Imph
dmFzY3JpcHQ6JyArIHRoaXMuZ2V0TmFtZSgpICsgJy5zaWRlTmF2Q2xpY2tlZChcJycgKyBzaXRl
bS5ub2RlTmFtZSArICdcJyxcJycgKyBzaXRlbS5nZXRBdHRyaWJ1dGUoIm5hbWUiKSArICdcJyk7
Ij4nICsgc2l0ZW0uZ2V0QXR0cmlidXRlKCJuYW1lIikgKyAnPC9hPjwvbGk+JzsKICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgIHNyYyArPSAnPC91bD4nOwogICAgICAgICAgICB9CiAg
ICAgICAgICAgIHNyYyArPSAnPC9saT4nOwogICAgICAgIH0KICAgICAgICBkb2pvLmJ5SWQodGhp
cy5zaWRlTmF2VWxJZCkuaW5uZXJIVE1MID0gc3JjOwogICAgfSwKICAgIHBvcHVsYXRlVG9wTmF2
OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgaWYgKGRvam8uYnlJZCh0aGlzLnRvcE5hdlVsSWQpKSB7
CiAgICAgICAgICAgIHZhciBzcmMgPSAnJzsKICAgICAgICAgICAgdmFyIGNvbGxlY3Rpb25BcnJh
eSA9IHRoaXMueG1sRG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJjb2xsZWN0aW9uIik7CiAgICAg
ICAgICAgIGZvciAodmFyIGluZGV4ID0gMCwgbGVuID0gY29sbGVjdGlvbkFycmF5Lmxlbmd0aDsg
aW5kZXggPCBsZW47ICsraW5kZXgpIHsKICAgICAgICAgICAgICAgIHZhciBpdGVtID0gY29sbGVj
dGlvbkFycmF5W2luZGV4XTsKICAgICAgICAgICAgICAgIHZhciBpdGVtTmFtZSA9IGl0ZW0uZ2V0
QXR0cmlidXRlKCJuYW1lIik7CiAgICAgICAgICAgICAgICBpZiAoKGl0ZW1OYW1lICE9ICdNb3N0
IFBvcHVsYXIgVG9kYXknKSAmJiAoaXRlbU5hbWUgIT0gJ01hbmFnZW1lbnQnKSAmJiAoaXRlbU5h
bWUgIT0gJ1NwZWNpYWwgUGFja2FnZXMnKSkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbGFz
c05hbWUgPSBpdGVtTmFtZTsKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSAnbmF2bGlu
a18nICsgY2xhc3NOYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXHMrL2csICdfJyk7CiAgICAg
ICAgICAgICAgICAgICAgaWYgKGluZGV4ID09ICcxJykgewogICAgICAgICAgICAgICAgICAgICAg
ICBzcmMgKz0gJzxsaSBjbGFzcz0ibGlzdEZpcnN0Ij4nOwogICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNyYyArPSAnPGxpPic7CiAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHNyYyArPSAnPGEgY2xhc3M9JyArIGNsYXNz
TmFtZSArICcgaWQ9ImFfdG9wbmF2XycgKyBpdGVtTmFtZSArICciIGhyZWY9ImphdmFzY3JpcHQ6
JyArIHRoaXMuZ2V0TmFtZSgpICsgJy50b3BOYXZDbGlja2VkKFwnJyArIGl0ZW0ubm9kZU5hbWUg
KyAnXCcsXCcnICsgaXRlbU5hbWUgKyAnXCcpOyI+JyArIGl0ZW1OYW1lICsgJzwvYT4nOwogICAg
ICAgICAgICAgICAgICAgIHNyYyArPSAnPC9saT4nOwogICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICB9CiAgICAgICAgICAgIGRvam8uYnlJZCh0aGlzLnRvcE5hdlVsSWQpLmlubmVySFRNTCA9
IHNyYzsKICAgICAgICB9CiAgICB9LAogICAgdG9wTmF2Q2xpY2tlZDogZnVuY3Rpb24gKHN0clR5
cGUsIHN0ck5hbWUpIHsKICAgICAgICB0aGlzLnVzZXJBY3Rpb24gPSAnJzsKICAgICAgICB0aGlz
LnVwZGF0ZVNpZGVOYXZBcHBlYXJhbmNlKHN0clR5cGUsIHN0ck5hbWUpOwogICAgICAgIHRoaXMu
dXBkYXRlVG9wTmF2QXBwZWFyYW5jZShzdHJUeXBlLCBzdHJOYW1lKTsKICAgICAgICB0aGlzLmN1
cnJlbnRseVBsYXlpbmdDb2xsZWN0aW9uID0gc3RyTmFtZTsKICAgICAgICB0aGlzLmdldFZpZGVv
cyh0aGlzLnZhbGlkYXRlQ29udGVudFVybCh0aGlzLmNvbnRlbnRVcmxzT2JqZWN0W3RoaXMuY3Vy
cmVudGx5UGxheWluZ0NvbGxlY3Rpb25dKSArICcmY291bnQ9NjAnLCAnJywgdGhpcywgdGhpcy5o
YW5kbGVUb3BOYXZHZXRWaWRlb3MpOwogICAgfSwKICAgIGhhbmRsZVRvcE5hdkdldFZpZGVvczog
ZnVuY3Rpb24gKCkgewogICAgICAgIHRoaXMudmlzaWJsZUNvbGxlY3Rpb25JZCA9IHRoaXMuY3Vy
cmVudGx5UGxheWluZ0NvbGxlY3Rpb247CiAgICAgICAgdGhpcy5jdXJyZW50QnJvd3NpbmdKc29u
T2JqZWN0ID0gdGhpcy5jdXJyZW50UGxheWluZ0pzb25PYmplY3Q7CiAgICAgICAgdGhpcy5jdXJy
ZW50bHlQbGF5aW5nVmlkZW9JZCA9IHRoaXMuY3VycmVudFBsYXlpbmdKc29uT2JqZWN0Lml0ZW1z
WzBdLmlkOwogICAgICAgIHRoaXMucGxheVZpZGVvQnlWaWRlb0lkKHRoaXMuY3VycmVudGx5UGxh
eWluZ1ZpZGVvSWQpOwogICAgICAgIHRoaXMucG9wdWxhdGVNb3JlVmlkZW9zKDEpOwogICAgICAg
IHRoaXMubG9hZFBhZ2luYXRpb24oMSk7CiAgICAgICAgdGhpcy5icm93c2luZ0dyb3VwID0gImNv
bGxlY3Rpb24iOwogICAgICAgIHRoaXMucGxheWluZ0dyb3VwID0gImNvbGxlY3Rpb24iOwogICAg
ICAgIHRoaXMuY3JlYXRlTmV4dFZpZGVvKCk7CiAgICB9LAogICAgdXBkYXRlVG9wTmF2QXBwZWFy
YW5jZTogZnVuY3Rpb24gKHN0clR5cGUsIHN0ck5hbWUpIHsKICAgICAgICB2YXIgcmVtb3ZlRnJv
bSA9IHRoaXMuY3VycmVudGx5UGxheWluZ0NvbGxlY3Rpb247CiAgICAgICAgaWYgKHJlbW92ZUZy
b20gPT0gJ0xpZmVzdHlsZScpIHsKICAgICAgICAgICAgcmVtb3ZlRnJvbSA9ICdMaWZlICYgU3R5
bGUnOwogICAgICAgIH0KICAgICAgICBpZiAoZG9qby5ieUlkKCdhX3RvcG5hdl8nICsgcmVtb3Zl
RnJvbSkpIHsKICAgICAgICAgICAgdmFyIHBsYXlpbmdDb2xsZWN0aW9uQ2xhc3NOYW1lID0gZG9q
by5ieUlkKCdhX3RvcG5hdl8nICsgcmVtb3ZlRnJvbSkuY2xhc3NOYW1lOwogICAgICAgICAgICB2
YXIgbmV3UGxheWluZ0NvbGxlY3Rpb25DbGFzc05hbWUgPSBwbGF5aW5nQ29sbGVjdGlvbkNsYXNz
TmFtZS5yZXBsYWNlKCdzZWxlY3RlZCAnLCAnJyk7CiAgICAgICAgICAgIGRvam8uYnlJZCgnYV90
b3BuYXZfJyArIHJlbW92ZUZyb20pLmNsYXNzTmFtZSA9IG5ld1BsYXlpbmdDb2xsZWN0aW9uQ2xh
c3NOYW1lOwogICAgICAgIH0KICAgICAgICBpZiAoZG9qby5ieUlkKCdhX3RvcG5hdl8nICsgc3Ry
TmFtZSkpIHsKICAgICAgICAgICAgdmFyIGNsYXNzTmFtZVRvQXBwbHkgPSAnc2VsZWN0ZWQgJyAr
ICduYXZsaW5rXycgKyBzdHJOYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXHMrL2csICdfJyk7
CiAgICAgICAgICAgIGRvam8uYnlJZCgnYV90b3BuYXZfJyArIHN0ck5hbWUpLmNsYXNzTmFtZSA9
IGNsYXNzTmFtZVRvQXBwbHk7CiAgICAgICAgfQogICAgfSwKICAgIHNpZGVOYXZDbGlja2VkOiBm
dW5jdGlvbiAoc3RyVHlwZSwgc3RyTmFtZSkgewogICAgICAgIHRoaXMudXNlckFjdGlvbiA9ICcn
OwogICAgICAgIGlmICh0aGlzLnZpZGVvVXRpbC5pc05vdEJsYW5rT3JOdWxsKHRoaXMuY29udGVu
dFVybHNPYmplY3Rbc3RyTmFtZV0pKSB7CiAgICAgICAgICAgIHRoaXMuYnJvd3NpbmdHcm91cCA9
IHN0clR5cGU7CiAgICAgICAgICAgIGlmIChzdHJOYW1lID09ICdTZWFyY2ggUmVzdWx0cycpIHsK
ICAgICAgICAgICAgICAgIHRoaXMudXNlckFjdGlvbiA9ICd0b1NlYXJjaCc7CiAgICAgICAgICAg
ICAgICB0aGlzLnNvcnRPcmRlciA9ICdyZWxldmFuY3knOwogICAgICAgICAgICB9IGVsc2UgaWYg
KCgoc3RyVHlwZSA9PSAnc3ViY29sbGVjdGlvbicpICYmIChzdHJOYW1lICE9IHRoaXMuY3VycmVu
dGx5UGxheWluZ1N1YkNvbGxlY3Rpb24pKSB8fCAoKHN0clR5cGUgPT0gJ2NvbGxlY3Rpb24nKSAm
JiAoc3RyTmFtZSAhPSB0aGlzLmN1cnJlbnRseVBsYXlpbmdDb2xsZWN0aW9uKSkpIHsKICAgICAg
ICAgICAgICAgIHRoaXMudXNlckFjdGlvbiA9ICd0b0Jyb3dzZSc7CiAgICAgICAgICAgIH0KICAg
ICAgICAgICAgdGhpcy51cGRhdGVTaWRlTmF2QXBwZWFyYW5jZShzdHJUeXBlLCBzdHJOYW1lKTsK
ICAgICAgICAgICAgZG9qby5ieUlkKHRoaXMudmlkZW9SZXN1bHRzRGl2SWQpLmlubmVySFRNTCA9
ICc8cCBjbGFzcz0ibm9SZXN1bHRzIj4gTG9hZGluZyAuLi4gPC9wPic7CiAgICAgICAgICAgIGlm
ICh0aGlzLnZpZGVvVXRpbC5pc05vdEJsYW5rT3JOdWxsKHRoaXMudXNlckFjdGlvbikpIHsKICAg
ICAgICAgICAgICAgIHRoaXMuZ2V0VmlkZW9zKHRoaXMuY29udGVudFVybHNPYmplY3Rbc3RyTmFt
ZV0gKyAnJmNvdW50PTYwJywgdGhpcy51c2VyQWN0aW9uKTsKICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgIHRoaXMucG9wdWxhdGVNb3JlVmlkZW9zKDEpOwogICAgICAgICAgICAg
ICAgdGhpcy5sb2FkUGFnaW5hdGlvbigxKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgIHRoaXMudXBkYXRlU2lkZU5hdkFwcGVhcmFuY2Uoc3RyVHlwZSwgc3RyTmFt
ZSk7CiAgICAgICAgfQogICAgfSwKICAgIHNlYXJjaExpbmtDbGlja2VkOiBmdW5jdGlvbiAoc2Vh
cmNoVXJsLCBzb3J0UGFyYW0pIHsKICAgICAgICB0aGlzLnNvcnRPcmRlciA9IHNvcnRQYXJhbTsK
ICAgICAgICB0aGlzLnBlcmZvcm1TZWFyY2goc2VhcmNoVXJsKTsKICAgIH0sCiAgICBwb3B1bGF0
ZU1vcmVWaWRlb3M6IGZ1bmN0aW9uIChwYWdlTnVtYmVyKSB7CiAgICAgICAgdmFyIHZhclRvRGlz
cGxheSA9ICcnOwogICAgICAgIGlmICh0aGlzLnVzZXJBY3Rpb24gPT0gJ3RvQnJvd3NlJykgewog
ICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3VycmVudEJyb3dzaW5nSnNvbk9iamVjdCAhPSAi
dW5kZWZpbmVkIikgewogICAgICAgICAgICAgICAgdmFyVG9EaXNwbGF5ID0gdGhpcy5jdXJyZW50
QnJvd3NpbmdKc29uT2JqZWN0Lml0ZW1zOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlm
ICh0aGlzLnVzZXJBY3Rpb24gPT0gJ3RvU2VhcmNoJykgewogICAgICAgICAgICBpZiAodHlwZW9m
IHRoaXMuY3VycmVudFNlYXJjaEpzb25PYmplY3QgIT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAg
ICAgICAgIHZhclRvRGlzcGxheSA9IHRoaXMuY3VycmVudFNlYXJjaEpzb25PYmplY3QuaXRlbXM7
CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YXJUb0Rpc3BsYXkg
PSB0aGlzLmN1cnJlbnRQbGF5aW5nSnNvbk9iamVjdC5pdGVtczsKICAgICAgICB9CiAgICAgICAg
dmFyIHN0YXJ0SW5kZXggPSAocGFnZU51bWJlciAtIDEpICogMTI7CiAgICAgICAgdmFyIGVuZElu
ZGV4ID0gTWF0aC5taW4ocGFnZU51bWJlciAqIDEyIC0gMSwgdmFyVG9EaXNwbGF5Lmxlbmd0aCAt
IDEpOwogICAgICAgIHZhciBzdHIgPSAnJzsKICAgICAgICBpZiAodGhpcy51c2VyQWN0aW9uID09
ICd0b1NlYXJjaCcgJiYgdmFyVG9EaXNwbGF5Lmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgc3Ry
ICs9ICc8dWwgY2xhc3M9InNvcnQiPjxsaSBjbGFzcz0ibGlzdEZpcnN0Ij5Tb3J0IGJ5OjwvbGk+
JzsKICAgICAgICAgICAgdmFyIHNVcmwgPSAnL2FwaS12aWRlby9maW5kX2FsbF92aWRlb3MuYXNw
P3R5cGU9d3NqLWZ1bGx0ZXh0JnF1ZXJ5PScgKyB0aGlzLmN1cnJlbnRTZWFyY2hUZXh0OwogICAg
ICAgICAgICBpZiAodGhpcy5zb3J0T3JkZXIgPT0gJ3JlbGV2YW5jeScpIHsKICAgICAgICAgICAg
ICAgIHN0ciArPSAnPGxpIGNsYXNzPSJzZWxlY3RlZCI+PHNwYW4+cmVsZXZhbmNlPC9zcGFuPjwv
bGk+JzsKICAgICAgICAgICAgICAgIHN0ciArPSAnPGxpIGNsYXNzPSJsaXN0TGFzdCI+PGEgaHJl
Zj0iamF2YXNjcmlwdDonICsgdGhpcy5nZXROYW1lKCkgKyAnLnNlYXJjaExpbmtDbGlja2VkKFwn
JyArIHNVcmwgKyAnJnNvcnQ9ZGF0ZStkZXNjXCcsXCdkYXRlXCcpIj5EYXRlPC9hPjwvbGk+JzsK
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHN0ciArPSAnPGxpPjxhIGhyZWY9
ImphdmFzY3JpcHQ6JyArIHRoaXMuZ2V0TmFtZSgpICsgJy5zZWFyY2hMaW5rQ2xpY2tlZChcJycg
KyBzVXJsICsgJyZzb3J0PXJlbGV2YW5jeVwnLFwncmVsZXZhbmN5XCcpIj5SZWxldmFuY2U8L2E+
PC9saT4nOwogICAgICAgICAgICAgICAgc3RyICs9ICc8bGkgY2xhc3M9Imxpc3RMYXN0IHNlbGVj
dGVkIj48c3Bhbj5EYXRlPC9zcGFuPjwvbGk+JzsKICAgICAgICAgICAgfQogICAgICAgICAgICBz
dHIgKz0gJzwvdWw+JzsKICAgICAgICAgICAgc3RyICs9ICc8cCBjbGFzcz0icmVzdWx0c0xhYmVs
Ij4nICsgKHN0YXJ0SW5kZXggKyAxKSArICcgLSAnICsgKGVuZEluZGV4ICsgMSkgKyAnIHJlc3Vs
dHMgb3V0IG9mICcgKyB2YXJUb0Rpc3BsYXkubGVuZ3RoICsgJyBmb3I6ICcgKyB0aGlzLmN1cnJl
bnRTZWFyY2hUZXh0ICsgJzwvcD4nOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy51c2VyQWN0
aW9uID09ICd0b1NlYXJjaCcgJiYgdmFyVG9EaXNwbGF5Lmxlbmd0aCA9PT0gMCkgewogICAgICAg
ICAgICBzdHIgKz0gJzxwIGNsYXNzPSJub1Jlc3VsdHMiPiBObyBjb250ZW50IG1hdGNoZXMgeW91
ciBzZWFyY2ggdGVybXMuIFBsZWFzZSB0cnkgYWdhaW4uIDwvcD4nOwogICAgICAgICAgICBkb2pv
LmJ5SWQodGhpcy52aWRlb1Jlc3VsdHNEaXZJZCkuaW5uZXJIVE1MID0gc3RyOwogICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHN0ciArPSAnPHVsIGNsYXNzPSJuZXdz
SXRlbSB2aWRlbyB2aWRlb0xpc3RNZWQiPic7CiAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5k
ZXg7IGkgPCBlbmRJbmRleCArIDE7IGkrKykgewogICAgICAgICAgICB2YXIgdGl0bGUgPSB2YXJU
b0Rpc3BsYXlbaV07CiAgICAgICAgICAgIHN0ciArPSAnPGxpIGlkPSJsaV8nICsgdGl0bGUuaWQg
KyAnIiBjbGFzcz0iIj4nOwogICAgICAgICAgICBzdHIgKz0gJzxhIGhyZWY9ImphdmFzY3JpcHQ6
JyArIHRoaXMuZ2V0TmFtZSgpICsgJy52aWRlb1RodW1ibmFpbENsaWNrZWQoXCcnICsgdGl0bGUu
aWQgKyAnXCcpIiBpZD0iJyArIHRpdGxlLmlkICsgJyIgc3R5bGU9ImJhY2tncm91bmQtaW1hZ2U6
IHVybCgnICsgdW5lc2NhcGUodGl0bGUudGh1bWJuYWlsVVJMKSArICcpOyIgY2xhc3M9InByZXZp
ZXciPjxzcGFuPiZuYnNwOzwvc3Bhbj48L2E+JzsKICAgICAgICAgICAgc3RyICs9ICc8aDI+PGEg
aHJlZj0iamF2YXNjcmlwdDonICsgdGhpcy5nZXROYW1lKCkgKyAnLnZpZGVvVGh1bWJuYWlsQ2xp
Y2tlZChcJycgKyB0aXRsZS5pZCArICdcJykiPicgKyB0aXRsZS5uYW1lICsgJzwvYT48L2gyPic7
CiAgICAgICAgICAgIHZhciBtaW51dGVzID0gTWF0aC5mbG9vcih0aXRsZS5kdXJhdGlvbiAvIDYw
KTsKICAgICAgICAgICAgdmFyIHNlY29uZHMgPSB0aXRsZS5kdXJhdGlvbiAlIDYwOwogICAgICAg
ICAgICBpZiAoc2Vjb25kcyA8IDEwKSB7CiAgICAgICAgICAgICAgICBzZWNvbmRzID0gJzAnICsg
c2Vjb25kczsKICAgICAgICAgICAgfQogICAgICAgICAgICBzdHIgKz0gJzxzbWFsbD4nICsgbWlu
dXRlcyArICc6JyArIHNlY29uZHMgKyAnPC9zbWFsbD4nOwogICAgICAgICAgICBpZiAodGhpcy52
aWRlb1V0aWwuaXNOb3RCbGFua09yTnVsbCh0aXRsZS5mb3JtYXR0ZWRDcmVhdGlvbkRhdGUpKSB7
CiAgICAgICAgICAgICAgICBzdHIgKz0gJzxzbWFsbD4gJyArIHRpdGxlLmZvcm1hdHRlZENyZWF0
aW9uRGF0ZS5zcGxpdCgnICcpWzBdICsgJzwvc21hbGw+JzsKICAgICAgICAgICAgfQogICAgICAg
ICAgICBzdHIgKz0gJzwvbGk+JzsKICAgICAgICAgICAgaWYgKCgoaSArIDEpICUgNCkgPT09IDAp
IHsKICAgICAgICAgICAgICAgIHN0ciArPSAnPGxpIGNsYXNzPSJyb3dFbmQiPjwvbGk+JzsKICAg
ICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzdHIgKz0gJzwvdWw+JzsKICAgICAgICBzdHIg
Kz0gJzx1bCBpZD0icGFnaW5hdGlvbiIgY2xhc3M9InBhZ2luYXRpb24iPic7CiAgICAgICAgc3Ry
ICs9ICc8L3VsPic7CiAgICAgICAgaWYgKHRoaXMudXNlckFjdGlvbiAhPSAndG9TZWFyY2gnKSB7
CiAgICAgICAgICAgIHZhciBuYW1lVG9EaXNwbGF5ID0gdGhpcy52aWRlb1V0aWwuaXNOb3RCbGFu
a09yTnVsbCh0aGlzLnZpc2libGVTdWJDb2xsZWN0aW9uSWQpID8gdGhpcy52aXNpYmxlU3ViQ29s
bGVjdGlvbklkIDogdGhpcy52aXNpYmxlQ29sbGVjdGlvbklkOwogICAgICAgICAgICBzdHIgKz0g
JzxhIHRhcmdldD0iX2JsYW5rIiBpZD0icnNzRmVlZCIgY2xhc3M9InJzcyIgaHJlZj0iIj4nICsg
bmFtZVRvRGlzcGxheSArICcgVmlkZW8gRmVlZDwvYT4nOwogICAgICAgIH0KICAgICAgICBkb2pv
LmJ5SWQodGhpcy52aWRlb1Jlc3VsdHNEaXZJZCkuaW5uZXJIVE1MID0gc3RyOwogICAgICAgIGlm
ICghdGhpcy5wbGF5RnJvbVJlZ2lzdGVyZWRWaWRlb3MpIHsKICAgICAgICAgICAgdGhpcy51cGRh
dGVWaWRlb1RodW1ibmFpbFZpc3VhbCgnJywgdGhpcy5jdXJyZW50bHlQbGF5aW5nVmlkZW9JZCk7
CiAgICAgICAgfQogICAgfSwKICAgIHVwZGF0ZVJzc0ZlZWQ6IGZ1bmN0aW9uIChzdHIpIHsKICAg
ICAgICBpZiAoZG9qby5ieUlkKCJyc3NGZWVkIikpIHsKICAgICAgICAgICAgZG9qby5ieUlkKCJy
c3NGZWVkIikuaHJlZiA9IHRoaXMucnNzVXJsc09iamVjdFtzdHJdOwogICAgICAgIH0KICAgIH0s
CiAgICB2aWRlb1RodW1ibmFpbENsaWNrZWQ6IGZ1bmN0aW9uICh2aWRlb0lkKSB7CiAgICAgICAg
dmFyIHZpZGVvRGV0YWlscyA9ICcnOwogICAgICAgIGlmICh0aGlzLnNvdXJjZUFwcGxpY2F0aW9u
TmFtZSA9PSAnYXJ0aWNsZVBhZ2UnKSB7CiAgICAgICAgICAgIHRoaXMucGxheUZyb21SZWdpc3Rl
cmVkVmlkZW9zID0gZmFsc2U7CiAgICAgICAgICAgIHRoaXMudXBkYXRlVmlkZW9UaHVtYm5haWxW
aXN1YWwoJ3JlZycgKyB0aGlzLmN1cnJlbnRseVBsYXlpbmdWaWRlb0lkLCAnJyk7CiAgICAgICAg
ICAgIHZpZGVvRGV0YWlscyA9IHRoaXMudmlkZW9VdGlsLmdldFZpZGVvRGV0YWlscyh7CiAgICAg
ICAgICAgICAgICAnaWQnOiB2aWRlb0lkLAogICAgICAgICAgICAgICAgJ2ZpZWxkcyc6ICdsaW5r
UmVsYXRpdmVVUkwsd3NqLXNlY3Rpb24nCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAg
ICBpZiAodmlkZW9EZXRhaWxzICE9PSAnJyAmJiAodGhpcy5yZWxhdGVkVmlkZW9zQ29sbGVjdGlv
biAhPSB2aWRlb0RldGFpbHNbJ3dzai1zZWN0aW9uJ10gfHwgdGhpcy52aXNpYmxlQ29sbGVjdGlv
bklkID09ICdTZWFyY2ggUmVzdWx0cycpKSB7CiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5o
cmVmID0gdmlkZW9EZXRhaWxzLmxpbmtSZWxhdGl2ZVVSTCArICcuaHRtbCc7OwogICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgIHRoaXMucGxheWluZ0dyb3VwID0gdGhpcy5icm93c2luZ0dyb3Vw
OwogICAgICAgICAgICBpZiAodGhpcy51c2VyQWN0aW9uID09ICd0b1NlYXJjaCcpIHsKICAgICAg
ICAgICAgICAgIHRoaXMuY3VycmVudFBsYXlpbmdKc29uT2JqZWN0ID0gdGhpcy5jdXJyZW50U2Vh
cmNoSnNvbk9iamVjdDsKICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnVzZXJBY3Rpb24gPT0g
J3RvQnJvd3NlJykgewogICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50UGxheWluZ0pzb25PYmpl
Y3QgPSB0aGlzLmN1cnJlbnRCcm93c2luZ0pzb25PYmplY3Q7CiAgICAgICAgICAgIH0KICAgICAg
ICAgICAgdGhpcy5jb252ZXJ0Q3VycmVudFBsYXlpbmdKc29uVG9JZHNBcnJheSgpOwogICAgICAg
ICAgICB0aGlzLnVwZGF0ZVRvcE5hdkFwcGVhcmFuY2UoJycsIHRoaXMudmlzaWJsZUNvbGxlY3Rp
b25JZCk7CiAgICAgICAgICAgIHRoaXMuY3VycmVudGx5UGxheWluZ0NvbGxlY3Rpb24gPSB0aGlz
LnZpc2libGVDb2xsZWN0aW9uSWQ7CiAgICAgICAgICAgIHRoaXMuY3VycmVudGx5UGxheWluZ1N1
YkNvbGxlY3Rpb24gPSB0aGlzLnZpc2libGVTdWJDb2xsZWN0aW9uSWQ7CiAgICAgICAgICAgIHRo
aXMudXBkYXRlVmlkZW9UaHVtYm5haWxWaXN1YWwodGhpcy5jdXJyZW50bHlQbGF5aW5nVmlkZW9J
ZCwgdmlkZW9JZCk7CiAgICAgICAgICAgIHRoaXMuY3VycmVudGx5UGxheWluZ1ZpZGVvSWQgPSB2
aWRlb0lkOwogICAgICAgICAgICB0aGlzLnBsYXlWaWRlb0J5VmlkZW9JZCh2aWRlb0lkKTsKICAg
ICAgICAgICAgdGhpcy5jcmVhdGVOZXh0VmlkZW8oKTsKICAgICAgICB9CiAgICAgICAgaWYgKGRv
am8uYnlJZCgiZmxhc2hQbGF5ZXIiKSkgewogICAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwg
ZG9qby5wb3NpdGlvbihkb2pvLmJ5SWQoImZsYXNoUGxheWVyIiksIHRydWUpLnkpOwogICAgICAg
IH0KICAgIH0sCiAgICBwbGF5TmV4dFZpZGVvOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgaWYgKHRo
aXMubmV4dFZpZGVvSWQgIT09ICcnKSB7CiAgICAgICAgICAgIHRoaXMudXBkYXRlVmlkZW9UaHVt
Ym5haWxWaXN1YWwoJ3JlZycgKyB0aGlzLmN1cnJlbnRseVBsYXlpbmdWaWRlb0lkLCAncmVnJyAr
IHRoaXMubmV4dFZpZGVvRGV0YWlsc0pzb25PYmplY3QuaWQpOwogICAgICAgICAgICB0aGlzLnVw
ZGF0ZVZpZGVvVGh1bWJuYWlsVmlzdWFsKHRoaXMuY3VycmVudGx5UGxheWluZ1ZpZGVvSWQsIHRo
aXMubmV4dFZpZGVvRGV0YWlsc0pzb25PYmplY3QuaWQpOwogICAgICAgICAgICB0aGlzLmN1cnJl
bnRseVBsYXlpbmdWaWRlb0lkID0gdGhpcy5uZXh0VmlkZW9EZXRhaWxzSnNvbk9iamVjdC5pZDsK
ICAgICAgICAgICAgdGhpcy5wbGF5VmlkZW9CeVBhcmFtKHRoaXMubmV4dFZpZGVvRGV0YWlsc0pz
b25PYmplY3QpOwogICAgICAgICAgICB0aGlzLnBvcHVsYXRlVmlkZW9TdW1tYXJ5KHRoaXMubmV4
dFZpZGVvRGV0YWlsc0pzb25PYmplY3QubmFtZSwgdGhpcy5uZXh0VmlkZW9EZXRhaWxzSnNvbk9i
amVjdC5kZXNjcmlwdGlvbiwgdGhpcy5uZXh0VmlkZW9EZXRhaWxzSnNvbk9iamVjdC5mb3JtYXR0
ZWRDcmVhdGlvbkRhdGUpOwogICAgICAgICAgICB0aGlzLmNyZWF0ZU5leHRWaWRlbygpOwogICAg
ICAgIH0KICAgIH0sCiAgICBnZXROZXh0VmlkZW9JZDogZnVuY3Rpb24gKCkgewogICAgICAgIGlm
ICh0aGlzLnNvdXJjZUFwcGxpY2F0aW9uTmFtZSA9PSAnYXJ0aWNsZVBhZ2UnKSB7CiAgICAgICAg
ICAgIGlmICh0aGlzLnBsYXlGcm9tUmVnaXN0ZXJlZFZpZGVvcyAmJiB0aGlzLnJlZ2lzdGVyZWRW
aWRlb3NJZHMuaW5kZXhPZih0aGlzLmN1cnJlbnRseVBsYXlpbmdWaWRlb0lkKSA8IHRoaXMucmVn
aXN0ZXJlZFZpZGVvc0lkcy5sZW5ndGggLSAxKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5yZWdpc3RlcmVkVmlkZW9zSWRzW3RoaXMucmVnaXN0ZXJlZFZpZGVvc0lkcy5pbmRleE9mKHRo
aXMuY3VycmVudGx5UGxheWluZ1ZpZGVvSWQpICsgMV07CiAgICAgICAgICAgIH0KICAgICAgICAg
ICAgaWYgKHRoaXMucGxheUZyb21SZWdpc3RlcmVkVmlkZW9zICYmIHRoaXMucmVnaXN0ZXJlZFZp
ZGVvc0lkcy5pbmRleE9mKHRoaXMuY3VycmVudGx5UGxheWluZ1ZpZGVvSWQpID09IHRoaXMucmVn
aXN0ZXJlZFZpZGVvc0lkcy5sZW5ndGggLSAxKSB7CiAgICAgICAgICAgICAgICB0aGlzLnBsYXlG
cm9tUmVnaXN0ZXJlZFZpZGVvcyA9IGZhbHNlOwogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
Y3VycmVudGx5UGxheWluZ1ZpZGVvSWRzWzBdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlm
ICh0aGlzLmN1cnJlbnRseVBsYXlpbmdWaWRlb0lkcy5pbmRleE9mKHRoaXMuY3VycmVudGx5UGxh
eWluZ1ZpZGVvSWQpIDwgKHRoaXMuY3VycmVudGx5UGxheWluZ1ZpZGVvSWRzLmxlbmd0aCAtIDEp
KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50bHlQbGF5aW5nVmlkZW9JZHNb
dGhpcy5jdXJyZW50bHlQbGF5aW5nVmlkZW9JZHMuaW5kZXhPZih0aGlzLmN1cnJlbnRseVBsYXlp
bmdWaWRlb0lkKSArIDFdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJl
bnRseVBsYXlpbmdWaWRlb0lkcy5pbmRleE9mKHRoaXMuY3VycmVudGx5UGxheWluZ1ZpZGVvSWQp
ID09ICh0aGlzLmN1cnJlbnRseVBsYXlpbmdWaWRlb0lkcy5sZW5ndGggLSAxKSkgewogICAgICAg
ICAgICAgICAgcmV0dXJuICcnOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgaWYgKHRoaXMuY3VycmVudGx5UGxheWluZ1ZpZGVvSWRzLmluZGV4T2YodGhpcy5jdXJy
ZW50bHlQbGF5aW5nVmlkZW9JZCkgPT0gLTEpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
LmN1cnJlbnRseVBsYXlpbmdWaWRlb0lkc1swXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBp
ZiAodGhpcy5jdXJyZW50bHlQbGF5aW5nVmlkZW9JZHMuaW5kZXhPZih0aGlzLmN1cnJlbnRseVBs
YXlpbmdWaWRlb0lkKSA8ICh0aGlzLmN1cnJlbnRseVBsYXlpbmdWaWRlb0lkcy5sZW5ndGggLSAx
KSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudGx5UGxheWluZ1ZpZGVvSWRz
W3RoaXMuY3VycmVudGx5UGxheWluZ1ZpZGVvSWRzLmluZGV4T2YodGhpcy5jdXJyZW50bHlQbGF5
aW5nVmlkZW9JZCkgKyAxXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodGhpcy5jdXJy
ZW50bHlQbGF5aW5nVmlkZW9JZHMuaW5kZXhPZih0aGlzLmN1cnJlbnRseVBsYXlpbmdWaWRlb0lk
KSA9PSAodGhpcy5jdXJyZW50bHlQbGF5aW5nVmlkZW9JZHMubGVuZ3RoIC0gMSkpIHsKICAgICAg
ICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRseVBsYXlpbmdDb2xsZWN0aW9uID09ICdTZWFyY2gg
UmVzdWx0cycpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICBpZiAodGhpcy5wbGF5aW5nR3JvdXAgIT09ICIiICYmIHRoaXMu
cGxheWluZ0dyb3VwID09ICdjb2xsZWN0aW9uJykgewogICAgICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLmdldFZpZGVvSWRGcm9tTmV4dENvbGxlY3Rpb24oKTsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIGlmICh0aGlzLnBsYXlpbmdHcm91cCAhPT0gIiIgJiYgdGhpcy5wbGF5
aW5nR3JvdXAgPT0gJ3N1YmNvbGxlY3Rpb24nKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXMuZ2V0VmlkZW9JZEZyb21OZXh0U3ViQ29sbGVjdGlvbigpOwogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSwKICAgIGdldFZpZGVvSWRGcm9tTmV4dFN1
YkNvbGxlY3Rpb246IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgc3ViQ29sQXIgPSB0aGlzLnN1
YmNvbGxlY3Rpb25zT2JqZWN0W3RoaXMuY3VycmVudGx5UGxheWluZ0NvbGxlY3Rpb25dOwogICAg
ICAgIGlmIChzdWJDb2xBci5pbmRleE9mKHRoaXMuY3VycmVudGx5UGxheWluZ1N1YkNvbGxlY3Rp
b24pICE9IHN1YkNvbEFyLmxlbmd0aCAtIDEpIHsKICAgICAgICAgICAgdGhpcy5jdXJyZW50bHlQ
bGF5aW5nU3ViQ29sbGVjdGlvbiA9IHN1YkNvbEFyW3N1YkNvbEFyLmluZGV4T2YodGhpcy5jdXJy
ZW50bHlQbGF5aW5nU3ViQ29sbGVjdGlvbikgKyAxXTsKICAgICAgICAgICAgdGhpcy5nZXRWaWRl
b3ModGhpcy5jb250ZW50VXJsc09iamVjdFt0aGlzLmN1cnJlbnRseVBsYXlpbmdTdWJDb2xsZWN0
aW9uXSArICcmY291bnQ9NjAnLCAnJywgdGhpcywgaGFuZGxlR2V0VmlkZW9JZEZyb21OZXh0U3Vi
Q29sZWN0aW9uKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLmN1cnJlbnRseVBs
YXlpbmdTdWJDb2xsZWN0aW9uID0gJyc7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFZpZGVv
SWRGcm9tTmV4dENvbGxlY3Rpb24oKTsKICAgICAgICB9CiAgICB9LAogICAgaGFuZGxlR2V0Vmlk
ZW9JZEZyb21OZXh0U3ViQ29sZWN0aW9uOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgaWYgKHRoaXMu
Y3VycmVudFBsYXlpbmdKc29uT2JqZWN0Lml0ZW1zLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAg
ICByZXR1cm4gdGhpcy5nZXRWaWRlb0lkRnJvbU5leHRTdWJDb2xsZWN0aW9uKCk7CiAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFBsYXlpbmdKc29uT2JqZWN0
Lml0ZW1zWzBdLmlkOwogICAgICAgIH0KICAgIH0sCiAgICBnZXRWaWRlb0lkRnJvbU5leHRDb2xs
ZWN0aW9uOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgaWYgKHRoaXMuY29sbGVjdGlvbk5hbWVzQXJy
YXkuaW5kZXhPZih0aGlzLmN1cnJlbnRseVBsYXlpbmdDb2xsZWN0aW9uKSAhPSB0aGlzLmNvbGxl
Y3Rpb25OYW1lc0FycmF5Lmxlbmd0aCAtIDEpIHsKICAgICAgICAgICAgaWYgKHRoaXMuc2tpcENv
bGxlY3Rpb24pIHsKICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudGx5UGxheWluZ0NvbGxlY3Rp
b24gPSB0aGlzLmNvbGxlY3Rpb25OYW1lc0FycmF5W3RoaXMuY29sbGVjdGlvbk5hbWVzQXJyYXku
aW5kZXhPZih0aGlzLmN1cnJlbnRseVBsYXlpbmdDb2xsZWN0aW9uKSArIDFdOwogICAgICAgICAg
ICB9CiAgICAgICAgICAgIHRoaXMuc2tpcENvbGxlY3Rpb24gPSB0cnVlOwogICAgICAgICAgICB0
aGlzLmdldFZpZGVvcyh0aGlzLmNvbnRlbnRVcmxzT2JqZWN0W3RoaXMuY3VycmVudGx5UGxheWlu
Z0NvbGxlY3Rpb25dICsgJyZjb3VudD02MCcsICcnLCB0aGlzLCBoYW5kbGVHZXRWaWRlb0lkRnJv
bU5leHRDb2xsZWN0aW9uKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLmN1cnJl
bnRseVBsYXlpbmdDb2xsZWN0aW9uID0gdGhpcy5kZWZhdWx0Q29sbGVjdGlvbk5hbWU7CiAgICAg
ICAgICAgIHRoaXMuc2tpcENvbGxlY3Rpb24gPSBmYWxzZTsKICAgICAgICAgICAgcmV0dXJuIHRo
aXMuZ2V0VmlkZW9JZEZyb21OZXh0Q29sbGVjdGlvbigpOwogICAgICAgIH0KICAgIH0sCiAgICBo
YW5kbGVHZXRWaWRlb0lkRnJvbU5leHRDb2xsZWN0aW9uOiBmdW5jdGlvbiAoKSB7CiAgICAgICAg
aWYgKHRoaXMuY3VycmVudFBsYXlpbmdKc29uT2JqZWN0Lml0ZW1zLmxlbmd0aCA9PT0gMCkgewog
ICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRWaWRlb0lkRnJvbU5leHRDb2xsZWN0aW9uKCk7CiAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFBsYXlpbmdKc29u
T2JqZWN0Lml0ZW1zWzBdLmlkOwogICAgICAgIH0KICAgIH0sCiAgICBsb2FkQ29sbGVjdGlvbnNE
b2M6IGZ1bmN0aW9uIChjb250ZXh0LCBjYWxsYmFjaykgewogICAgICAgIHZhciBwYXJhbXMgPSB7
CiAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQsCiAgICAgICAgICAgIGNhbGxiYWNrOiBjYWxs
YmFjaywKICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAidGV4dC94bWwiLAogICAgICAgICAgICBl
cnJvckNhbGxiYWNrOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9y
KCJGYWlsdXJlIHdoaWxlIGxvYWRpbmcgdmlkZW8gQ29sbGVjdGlvbiB4bWwuIik7CiAgICAgICAg
ICAgIH0KICAgICAgICB9OwogICAgICAgIGRqLnV0aWwuVmlkZW8uZ2V0VmlkZW9EYXRhKHRoaXMu
Y29sbGVjdGlvbnNYTUxQYXRoICsgInZpZGVvLWNvbGxlY3Rpb25zLnhtbCIsIHBhcmFtcyk7CiAg
ICB9LAogICAgdXBkYXRlU2lkZU5hdkFwcGVhcmFuY2U6IGZ1bmN0aW9uIChzdHJUeXBlLCBpZCkg
ewogICAgICAgIGlmICh0aGlzLnZpc2libGVTdWJDb2xsZWN0aW9uSWQgIT09ICcnKSB7CiAgICAg
ICAgICAgIGlmIChkb2pvLmJ5SWQoJ2FfJyArIHRoaXMudmlzaWJsZVN1YkNvbGxlY3Rpb25JZCkp
IHsKICAgICAgICAgICAgICAgIGlmIChkb2pvLmJ5SWQoJ2FfJyArIHRoaXMudmlzaWJsZVN1YkNv
bGxlY3Rpb25JZCkuY2xhc3NOYW1lID09ICdzdWJjb2xsZWN0aW9uLXNlbGVjdGVkJykgewogICAg
ICAgICAgICAgICAgICAgIGRvam8uYnlJZCgnYV8nICsgdGhpcy52aXNpYmxlU3ViQ29sbGVjdGlv
bklkKS5jbGFzc05hbWUgPSAnY3VycmVudCc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
IH0KICAgICAgICB9CiAgICAgICAgaWYgKHN0clR5cGUgPT0gJ2NvbGxlY3Rpb24nKSB7CiAgICAg
ICAgICAgIGlmICh0aGlzLnZpc2libGVDb2xsZWN0aW9uSWQgIT09ICcnKSB7CiAgICAgICAgICAg
ICAgICB2YXIgdkNvbCA9IGRvam8uYnlJZCh0aGlzLnZpc2libGVDb2xsZWN0aW9uSWQpOwogICAg
ICAgICAgICAgICAgdmFyIGFWQ29sID0gZG9qby5ieUlkKCdhXycgKyB0aGlzLnZpc2libGVDb2xs
ZWN0aW9uSWQpOwogICAgICAgICAgICAgICAgaWYgKHZDb2wuY2xhc3NOYW1lID09ICdleHBhbmRl
ZCcpIHsKICAgICAgICAgICAgICAgICAgICB2Q29sLmNsYXNzTmFtZSA9ICdleHBhbmQnOwogICAg
ICAgICAgICAgICAgICAgIGFWQ29sLmNsYXNzTmFtZSA9ICcnOwogICAgICAgICAgICAgICAgfSBl
bHNlIGlmICh2Q29sLmNsYXNzTmFtZSA9PSAnZXhwYW5kJykgewogICAgICAgICAgICAgICAgICAg
IGFWQ29sLmNsYXNzTmFtZSA9ICcnOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICB2Q29sLmNsYXNzTmFtZSA9ICdub1N1YkNvbGxlY3Rpb24nOwogICAgICAgICAg
ICAgICAgICAgIGFWQ29sLmNsYXNzTmFtZSA9ICcnOwogICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICB9CiAgICAgICAgICAgIGlmIChkb2pvLmJ5SWQoaWQpLmNsYXNzTmFtZSA9PSAnZXhwYW5k
JykgewogICAgICAgICAgICAgICAgZG9qby5ieUlkKGlkKS5jbGFzc05hbWUgPSAnZXhwYW5kZWQn
OwogICAgICAgICAgICAgICAgZG9qby5ieUlkKCdhXycgKyBpZCkuY2xhc3NOYW1lID0gJ2NvbGxl
Y3Rpb24tc2VsZWN0ZWQnOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZG9q
by5ieUlkKGlkKS5jbGFzc05hbWUgPSAnbm9TdWJDb2xsZWN0aW9uLWV4cGFuZGVkJzsKICAgICAg
ICAgICAgICAgIGRvam8uYnlJZCgnYV8nICsgaWQpLmNsYXNzTmFtZSA9ICdzZWxlY3RlZCc7CiAg
ICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy52aXNpYmxlQ29sbGVjdGlvbklkID0gaWQ7CiAg
ICAgICAgICAgIHRoaXMudmlzaWJsZVN1YkNvbGxlY3Rpb25JZCA9ICcnOwogICAgICAgIH0KICAg
ICAgICBpZiAoc3RyVHlwZSA9PSAnc3ViY29sbGVjdGlvbicpIHsKICAgICAgICAgICAgaWYgKHRo
aXMudmlkZW9VdGlsLmlzTm90QmxhbmtPck51bGwoZG9qby5ieUlkKCdhXycgKyBpZCkpKSB7CiAg
ICAgICAgICAgICAgICBkb2pvLmJ5SWQoJ2FfJyArIGlkKS5jbGFzc05hbWUgPSAnc3ViY29sbGVj
dGlvbi1zZWxlY3RlZCc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHRoaXMudmlkZW9V
dGlsLmlzTm90QmxhbmtPck51bGwoZG9qby5ieUlkKHRoaXMudmlzaWJsZUNvbGxlY3Rpb25JZCkp
KSB7CiAgICAgICAgICAgICAgICBkb2pvLmJ5SWQodGhpcy52aXNpYmxlQ29sbGVjdGlvbklkKS5j
bGFzc05hbWUgPSAnZXhwYW5kZWQnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0aGlz
LnZpZGVvVXRpbC5pc05vdEJsYW5rT3JOdWxsKGRvam8uYnlJZCgnYV8nICsgdGhpcy52aXNpYmxl
Q29sbGVjdGlvbklkKSkpIHsKICAgICAgICAgICAgICAgIGRvam8uYnlJZCgnYV8nICsgdGhpcy52
aXNpYmxlQ29sbGVjdGlvbklkKS5jbGFzc05hbWUgPSAnJzsKICAgICAgICAgICAgfQogICAgICAg
ICAgICB0aGlzLnZpc2libGVTdWJDb2xsZWN0aW9uSWQgPSBpZDsKICAgICAgICB9CiAgICB9LAog
ICAgZ2V0TmFtZTogZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiB0aGlzLm9iak5hbWU7CiAg
ICB9LAogICAgcGxheVZpZGVvQnlWaWRlb0lkOiBmdW5jdGlvbiAodmlkZW9JZCkgewogICAgICAg
IHZhciB1cmwgPSAnL2FwaS12aWRlby9nZXRfdmlkZW9faW5mby5hc3A/Z3VpZD0nICsgdmlkZW9J
ZCArICcmZmllbGRzPWFsbCc7CiAgICAgICAgdGhpcy5nZXRWaWRlb3ModXJsLCAnY3VycmVudCcp
OwogICAgfSwKICAgIHBsYXlWaWRlb0J5UGFyYW06IGZ1bmN0aW9uIChwYXJhbXMpIHsKICAgICAg
ICB2YXIgYWRab25lID0gbmV3IGRqLnV0aWwuQWRzKCkuZ2V0UmVnaXN0ZXJlZEFkc1pvbmUoJycp
OwogICAgICAgIHZhciBsaW5ldXAgPSB0aGlzLnZpZGVvVXRpbC5pc05vdEJsYW5rT3JOdWxsKHRo
aXMuY3VycmVudGx5UGxheWluZ1N1YkNvbGxlY3Rpb24pID8gdGhpcy5jdXJyZW50bHlQbGF5aW5n
U3ViQ29sbGVjdGlvbiA6IHRoaXMuY3VycmVudGx5UGxheWluZ0NvbGxlY3Rpb247CiAgICAgICAg
aWYgKGFkWm9uZSAhPSAnZGVmYXVsdCcgJiYgYWRab25lICE9ICcnKSB7CiAgICAgICAgICAgIHBh
cmFtcy5hZFpvbmUgPSBhZFpvbmU7CiAgICAgICAgfQogICAgICAgIHBhcmFtcy5saW5ldXAgPSBs
aW5ldXA7CiAgICAgICAgcGFyYW1zLmVtYWlsUGFydG5lcklEID0gMTEwNjI2OwogICAgICAgIHBh
cmFtcy5zaXRlID0gdGhpcy5zaXRlOwogICAgICAgIHBhcmFtcy5tc3JjID0gdGhpcy5tc3JjOwog
ICAgICAgIHBhcmFtcy5hZEZybXQgPSAiZnJtdD0yOyI7CiAgICAgICAgcGFyYW1zLnBsYXllck5h
bWUgPSAodGhpcy5zb3VyY2VBcHBsaWNhdGlvbk5hbWUgPT0gJ2FydGljbGVQYWdlJykgPyAidmlk
ZW9fYXJ0aWNsZXRhYiIgOiAidmlkZW9fdmlkZW9jZW50ZXIiOwogICAgICAgIHBhcmFtcy5lbWJl
ZFBsYXllclVSTCA9IHRoaXMuZmxhc2hQbGF5ZXJQYXRoICsgIm1haW4uc3dmIjsKICAgICAgICBw
YXJhbXMuZW1iZWRDb25maWdVUkwgPSB0aGlzLmVtYmVkQ29uZmlnVVJMOwogICAgICAgIHBhcmFt
cy5lbWJlZFBsYXllcklEID0gIjEwMDAiOwogICAgICAgIHBhcmFtcy5lbWJlZE5hbWUgPSAiZmxh
c2hQbGF5ZXIiOwogICAgICAgIHBhcmFtcy5lbWJlZEJhc2VVUkwgPSB0aGlzLmZsYXNoUGxheWVy
UGF0aDsKICAgICAgICBwYXJhbXMuZW1iZWRIZWlnaHQgPSAzNjM7CiAgICAgICAgcGFyYW1zLmVt
YmVkV2lkdGggPSA1MTI7CiAgICAgICAgcGFyYW1zLmxhcnNJRCA9IDkxOwogICAgICAgIHBhcmFt
cy5sYXJzQWRUcmFja2luZ0lEID0gMTI1OTsKICAgICAgICBwYXJhbXMucHJvcDUgPSB3aW5kb3cu
bG9jYXRpb24uaHJlZi5zcGxpdCgnPycpWzBdOwogICAgICAgIHBhcmFtcy5wcm9wNiA9IHdpbmRv
dy5sb2NhdGlvbi5ocmVmOwogICAgICAgIHBhcmFtcy5wcm9wMTAgPSB0aGlzLnZpZGVvVXRpbC5n
ZXRVcmxQYXJhbSh3aW5kb3cubG9jYXRpb24uaHJlZiwgJ21vZCcpOwogICAgICAgIHBhcmFtcy5j
YW1wYWlnbiA9IHRoaXMudmlkZW9VdGlsLmdldFVybFBhcmFtKHdpbmRvdy5sb2NhdGlvbi5ocmVm
LCAnbW9kJyk7CiAgICAgICAgcGFyYW1zLnByb3AxMSA9IHRoaXMudmlkZW9VdGlsLmdldFVybFBh
cmFtKHdpbmRvdy5sb2NhdGlvbi5ocmVmLCAncmVmbGluaycpOwogICAgICAgIHBhcmFtcy5wcm9w
MTkgPSAodGhpcy5zb3VyY2VBcHBsaWNhdGlvbk5hbWUgPT0gJ2FydGljbGVQYWdlJykgPyAidmlk
ZW9fdGFiIiA6ICJ2aWRlbyI7CiAgICAgICAgcGFyYW1zLnByb3AyNCA9IHRoaXMucHJvcDI0Owog
ICAgICAgIHBhcmFtcy5wcm9wMjUgPSB0aGlzLnByb3AyNTsKICAgICAgICBwYXJhbXMucHJvcDI3
ID0gdGhpcy5wcm9wMjc7CiAgICAgICAgdmFyIHN1YlNlY0NvbXBvbmVudCA9IHRoaXMudmlkZW9V
dGlsLm9tbml0dXJlRW5jb2RpbmcodGhpcy5jdXJyZW50bHlQbGF5aW5nQ29sbGVjdGlvbiwgdGhp
cy5jdXJyZW50bHlQbGF5aW5nU3ViQ29sbGVjdGlvbiwgJ3MnKTsKICAgICAgICB2YXIgc2VjQ29t
cG9uZW50ID0gdGhpcy52aWRlb1V0aWwub21uaXR1cmVFbmNvZGluZyh0aGlzLmN1cnJlbnRseVBs
YXlpbmdDb2xsZWN0aW9uLCB0aGlzLmN1cnJlbnRseVBsYXlpbmdTdWJDb2xsZWN0aW9uLCAnYycp
OwogICAgICAgIHBhcmFtcy5wcm9wMiA9ICJXU0pfIiArIHNlY0NvbXBvbmVudDsKICAgICAgICBw
YXJhbXMucHJvcDMgPSAiV1NKX1ZpZGVvX1ZpZGVvXyIgKyBzZWNDb21wb25lbnQ7CiAgICAgICAg
cGFyYW1zLnByb3AyMiA9ICJXU0pfVmlkZW9fVmlkZW9fIiArIHN1YlNlY0NvbXBvbmVudDsKICAg
ICAgICBwYXJhbXMucHJvcDI2ID0gIldTSl8iICsgc3ViU2VjQ29tcG9uZW50OwogICAgICAgIHBh
cmFtcy5lbWFpbFVSTCA9IHRoaXMuZW1haWxVUkw7CiAgICAgICAgc3dmb2JqZWN0LmdldE9iamVj
dEJ5SWQoImZsYXNoUGxheWVyIikucGxheVZpZGVvKGRvam8udG9Kc29uKHBhcmFtcykpOwogICAg
fSwKICAgIG9wZW5Qb3BVcFBsYXllcjogZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBjdXJyZW50
UGxheWluZ0xvY2F0aW9uID0gTWF0aC5mbG9vcihzd2ZvYmplY3QuZ2V0T2JqZWN0QnlJZCgiZmxh
c2hQbGF5ZXIiKS5nZXRTZWVrKCkpOwogICAgICAgIHZhciB3aWR0aCA9ICc1MTInOwogICAgICAg
IHZhciBoZWlnaHQgPSAnNjYwJzsKICAgICAgICB2YXIgY3VycmVudGx5UGxheWluZ0NvbGxlY3Rp
b24gPSB0aGlzLmN1cnJlbnRseVBsYXlpbmdDb2xsZWN0aW9uOwogICAgICAgIGlmICgoY3VycmVu
dGx5UGxheWluZ0NvbGxlY3Rpb24gPT0gJ1NwZWNpYWwgUGFja2FnZXMnKSB8fCAoY3VycmVudGx5
UGxheWluZ0NvbGxlY3Rpb24gPT0gJ1NlYXJjaCBSZXN1bHRzJykpIHsKICAgICAgICAgICAgY3Vy
cmVudGx5UGxheWluZ0NvbGxlY3Rpb24gPSB0aGlzLmN1cnJlbnRWaWRlb0RldGFpbHNKc29uT2Jq
ZWN0Wyd3c2otc2VjdGlvbiddOwogICAgICAgIH0KICAgICAgICB0aGlzLnBvcFVwV2luZG93ID0g
d2luZG93Lm9wZW4odGhpcy5wb3BVcFBhZ2VVcmwgKyAnP2N1cnJlbnRQbGF5aW5nTG9jYXRpb249
JyArIGN1cnJlbnRQbGF5aW5nTG9jYXRpb24gKyAnJmN1cnJlbnRseVBsYXlpbmdDb2xsZWN0aW9u
PScgKyBlc2NhcGUoY3VycmVudGx5UGxheWluZ0NvbGxlY3Rpb24pICsgJyZjdXJyZW50bHlQbGF5
aW5nVmlkZW9JZD0nICsgdGhpcy5jdXJyZW50bHlQbGF5aW5nVmlkZW9JZCwgJ3BvcFVwUGxheWVy
JywgJ2hlaWdodD0nICsgaGVpZ2h0ICsgJyx3aWR0aD0nICsgd2lkdGggKyAnLGxlZnQ9JyArICgo
c2NyZWVuLndpZHRoIC0gTnVtYmVyKHdpZHRoKSkgLyAyKSArICcsdG9wPScgKyAoc2NyZWVuLmhl
aWdodCAtIE51bWJlcihoZWlnaHQpKSAvIDIgKyAnLHJlc2l6YWJsZT15ZXMsc2Nyb2xsYmFycz1u
byx0b29sYmFyPW5vLHN0YXR1cz1ubycpOwogICAgfSwKICAgIGZvY3VzUG9wVXA6IGZ1bmN0aW9u
ICgpIHsKICAgICAgICBpZiAodGhpcy5wb3BVcFdpbmRvdykgewogICAgICAgICAgICB0aGlzLnBv
cFVwV2luZG93LmZvY3VzKCk7CiAgICAgICAgfQogICAgfSwKICAgIGNyZWF0ZVJlZ2lzdGVyZWRW
aWRlb3NUaHVtYm5haWxzOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgaWYgKHRoaXMucmVnaXN0ZXJl
ZFZpZGVvc0lkcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIHZhciBzdHIgPSAnJzsKICAgICAg
ICAgICAgZm9yICh2YXIgaW5kZXggPSAwLCBsZW4gPSB0aGlzLnJlZ2lzdGVyZWRWaWRlb3NJZHMu
bGVuZ3RoOyBpbmRleCA8IGxlbjsgKytpbmRleCkgewogICAgICAgICAgICAgICAgdmFyIHRpdGxl
ID0gdGhpcy5yZWdpc3RlcmVkVmlkZW9zW2luZGV4XTsKICAgICAgICAgICAgICAgIGlmICh0aXRs
ZSkgewogICAgICAgICAgICAgICAgICAgIHN0ciArPSAnPGxpIGlkPSJsaV9yZWcnICsgdGl0bGUu
aWQgKyAnIiBjbGFzcz0iIj4nOwogICAgICAgICAgICAgICAgICAgIHN0ciArPSAnPGEgaHJlZj0i
amF2YXNjcmlwdDonICsgdGhpcy5nZXROYW1lKCkgKyAnLnJlZ1ZpZGVvVGh1bWJuYWlsQ2xpY2tl
ZChcJycgKyB0aXRsZS5pZCArICdcJyxcJycgKyB1bmVzY2FwZSh0aXRsZS52aWRlb1VSTCkgKyAn
XCcpIiBpZD0iJyArIHRpdGxlLmlkICsgJyIgc3R5bGU9ImJhY2tncm91bmQtaW1hZ2U6IHVybCgn
ICsgdW5lc2NhcGUodGl0bGUudGh1bWJuYWlsVVJMKSArICcpOyIgY2xhc3M9InByZXZpZXciPjxz
cGFuPiZuYnNwOzwvc3Bhbj48L2E+JzsKICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJzxoMj48
YSBocmVmPSJqYXZhc2NyaXB0OicgKyB0aGlzLmdldE5hbWUoKSArICcucmVnVmlkZW9UaHVtYm5h
aWxDbGlja2VkKFwnJyArIHRpdGxlLmlkICsgJ1wnLFwnJyArIHVuZXNjYXBlKHRpdGxlLnZpZGVv
VVJMKSArICdcJykiPicgKyB0aXRsZS5uYW1lICsgJzwvYT48L2gyPic7CiAgICAgICAgICAgICAg
ICAgICAgdmFyIG1pbnV0ZXMgPSBNYXRoLmZsb29yKHRpdGxlLmR1cmF0aW9uIC8gNjApOwogICAg
ICAgICAgICAgICAgICAgIHZhciBzZWNvbmRzID0gdGl0bGUuZHVyYXRpb24gJSA2MDsKICAgICAg
ICAgICAgICAgICAgICBpZiAoc2Vjb25kcyA8IDEwKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IHNlY29uZHMgPSAnMCcgKyBzZWNvbmRzOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICBzdHIgKz0gJzxzbWFsbD4nICsgbWludXRlcyArICc6JyArIHNlY29uZHMgKyAn
PC9zbWFsbD4nOwogICAgICAgICAgICAgICAgICAgIHN0ciArPSAnPC9saT4nOwogICAgICAgICAg
ICAgICAgICAgIGlmICgoKGluZGV4ICsgMSkgJSA0KSA9PT0gMCkgewogICAgICAgICAgICAgICAg
ICAgICAgICBzdHIgKz0gJzxsaSBjbGFzcz0icm93RW5kIj48L2xpPic7CiAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGRvam8u
YnlJZCh0aGlzLnJlZ2lzdGVyZWRWaWRlb3NEaXZJZCkuaW5uZXJIVE1MID0gc3RyOwogICAgICAg
IH0KICAgIH0sCiAgICByZWdWaWRlb1RodW1ibmFpbENsaWNrZWQ6IGZ1bmN0aW9uICh2aWRlb0lk
KSB7CiAgICAgICAgdGhpcy5wbGF5RnJvbVJlZ2lzdGVyZWRWaWRlb3MgPSB0cnVlOwogICAgICAg
IHRoaXMudXBkYXRlVmlkZW9UaHVtYm5haWxWaXN1YWwoJ3JlZycgKyB0aGlzLmN1cnJlbnRseVBs
YXlpbmdWaWRlb0lkLCAncmVnJyArIHZpZGVvSWQpOwogICAgICAgIHRoaXMudXBkYXRlVmlkZW9U
aHVtYm5haWxWaXN1YWwodGhpcy5jdXJyZW50bHlQbGF5aW5nVmlkZW9JZCwgJycpOwogICAgICAg
IHRoaXMuY3VycmVudGx5UGxheWluZ1ZpZGVvSWQgPSB2aWRlb0lkOwogICAgICAgIHRoaXMucGxh
eVZpZGVvQnlWaWRlb0lkKHZpZGVvSWQpOwogICAgICAgIHRoaXMuY3JlYXRlTmV4dFZpZGVvKCk7
CiAgICB9LAogICAgcmVnaXN0ZXJWaWRlbzogZnVuY3Rpb24gKHZpZGVvSWQpIHsKICAgICAgICB0
aGlzLnBsYXlGcm9tUmVnaXN0ZXJlZFZpZGVvcyA9IHRydWU7CiAgICAgICAgaWYgKHZpZGVvSWQu
aW5kZXhPZigneycpID09IC0xKSB7CiAgICAgICAgICAgIHZpZGVvSWQgPSAneycgKyB2aWRlb0lk
ICsgJ30nOwogICAgICAgIH0KICAgICAgICBpZiAoZG9qby5pbmRleE9mKHRoaXMucmVnaXN0ZXJl
ZFZpZGVvc0lkcywgdmlkZW9JZCkgPT0gLTEpIHsKICAgICAgICAgICAgdGhpcy5yZWdpc3RlcmVk
VmlkZW9zSWRzW3RoaXMucmVnaXN0ZXJlZFZpZGVvc0lkcy5sZW5ndGhdID0gdmlkZW9JZDsKICAg
ICAgICAgICAgdGhpcy5yZWdpc3RlcmVkVmlkZW9zW3RoaXMucmVnaXN0ZXJlZFZpZGVvcy5sZW5n
dGhdID0gdGhpcy52aWRlb1V0aWwuZ2V0VmlkZW9EZXRhaWxzKHsKICAgICAgICAgICAgICAgICdp
ZCc6IHZpZGVvSWQsCiAgICAgICAgICAgICAgICAnZmllbGRzJzogJ2FsbCcKICAgICAgICAgICAg
fSk7CiAgICAgICAgfQogICAgfSwKICAgIGxvYWRTb2xvVmlkZW86IGZ1bmN0aW9uICh2aWRlb0lk
LCBkaXZJZCkgewogICAgICAgIGlmICh2aWRlb0lkLmluZGV4T2YoJ3snKSA9PSAtMSkgewogICAg
ICAgICAgICB2aWRlb0lkID0gJ3snICsgdmlkZW9JZCArICd9JzsKICAgICAgICB9CiAgICAgICAg
dmFyIG1pY3JvUGxheWVySWQgPSAiTWljcm9QbGF5ZXJfIiArIE1hdGguZmxvb3IoTWF0aC5yYW5k
b20oKSAqIDEwMDAwMDApOwogICAgICAgIHRoaXMubWljcm9QbGF5ZXJzW3RoaXMubWljcm9QbGF5
ZXJzLmxlbmd0aF0gPSBtaWNyb1BsYXllcklkOwogICAgICAgIHRoaXMudmlkZW9JZE1pY3JvUGxh
eWVySWRNYXBbdmlkZW9JZF0gPSBtaWNyb1BsYXllcklkOwogICAgICAgIGlmICghZGouY29udGV4
dC52aWRlbykgewogICAgICAgICAgICBkai5jb250ZXh0LnZpZGVvID0ge307CiAgICAgICAgfQog
ICAgICAgIGlmICghZGouY29udGV4dC52aWRlby5zb2xvVmlkZW9zKSB7CiAgICAgICAgICAgIGRq
LmNvbnRleHQudmlkZW8uc29sb1ZpZGVvcyA9IFtdOwogICAgICAgIH0KICAgICAgICBkai5jb250
ZXh0LnZpZGVvLnNvbG9WaWRlb3NbdmlkZW9JZF0gPSB0aGlzOwogICAgICAgIGlmIChzd2ZvYmpl
Y3QuZ2V0Rmxhc2hQbGF5ZXJWZXJzaW9uKCkubWFqb3IgPj0gOSkgewogICAgICAgICAgICB2YXIg
ZGltID0gewogICAgICAgICAgICAgICAgdzogIjI3MiIsCiAgICAgICAgICAgICAgICBoOiAiMTgw
IgogICAgICAgICAgICB9OwogICAgICAgICAgICBzd2ZvYmplY3QuZW1iZWRTV0YodGhpcy5mbGFz
aFBsYXllclBhdGggKyAibWljcm9QbGF5ZXIuc3dmIiwgZGl2SWQsIGRpbS53LCBkaW0uaCwgIjku
MC4wIiwgIiIsIHsKICAgICAgICAgICAgICAgICdvYmpOYW1lJzogImR1bW15IiwKICAgICAgICAg
ICAgICAgICd2aWRlb0dVSUQnOiB2aWRlb0lkLAogICAgICAgICAgICAgICAgJ2FsbG93UGxheWVy
UG9wdXAnOiAnMScsCiAgICAgICAgICAgICAgICAncGx5TWVkaWFFbmFibGVkJzogJzEnLAogICAg
ICAgICAgICAgICAgJ21vdmllV2lkdGgnOiBkaW0udywKICAgICAgICAgICAgICAgICdtb3ZpZUhl
aWdodCc6IGRpbS5oLAogICAgICAgICAgICAgICAgJ2hvc3QnOiBsb2NhdGlvbi5ob3N0CiAgICAg
ICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGFsbG93c2NyaXB0YWNjZXNzOiAiYWx3YXlzIiwK
ICAgICAgICAgICAgICAgIHdtb2RlOiAib3BhcXVlIgogICAgICAgICAgICB9LCB7CiAgICAgICAg
ICAgICAgICBpZDogbWljcm9QbGF5ZXJJZAogICAgICAgICAgICB9KTsKICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICBkai51dGlsLlZpZGVvLm5vblN1cHBvcnRpbmdGbGFzaFBsYXllcihkaXZJ
ZCk7CiAgICAgICAgfQogICAgfSwKICAgIGdldEpTT046IGZ1bmN0aW9uIChpZCkgewogICAgICAg
IHZhciB1cmwgPSAnL2FwaS12aWRlby9nZXRfdmlkZW9faW5mby5hc3A/Z3VpZD0nICsgaWQ7CiAg
ICAgICAgdXJsICs9ICcmZmllbGRzPWFsbCc7CiAgICAgICAgdmFyIHBhcmFtcyA9IHsKICAgICAg
ICAgICAgY29udGV4dDogdGhpcywKICAgICAgICAgICAgaGFuZGxlQXM6ICJqc29uIiwKICAgICAg
ICAgICAgc3luYzogdHJ1ZSwKICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAiYXBwbGljYXRpb24v
anNvbiIsCiAgICAgICAgICAgIGNhbGxiYWNrOiB0aGlzLmhhbmRsZUdldEpTT04sCiAgICAgICAg
ICAgIGVycm9yQ2FsbGJhY2s6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUu
ZXJyb3IoIkZhaWxlZCB3aGlsZSBleGVjdXRpbmcgdmlkZW8uVmlkZW9DZW50ZXIuZ2V0SlNPTiIp
OwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICBkai51dGlsLlZpZGVvLmdldFZpZGVv
RGF0YSh1cmwsIHBhcmFtcyk7CiAgICAgICAgdGhpcy5taWNyb1BsYXllcnNPYmplY3RzW2lkXSA9
IHRoaXMuanNvbkRhdGE7CiAgICAgICAgcmV0dXJuIGRvam8udG9Kc29uKHRoaXMuanNvbkRhdGEp
OwogICAgfSwKICAgIGhhbmRsZUdldEpTT046IGZ1bmN0aW9uIChqc29uKSB7CiAgICAgICAgdGhp
cy5qc29uRGF0YSA9IGpzb247CiAgICAgICAgdmFyIGFkWm9uZSA9IG5ldyBkai51dGlsLkFkcygp
LmdldFJlZ2lzdGVyZWRBZHNab25lKCcnKTsKICAgICAgICBpZiAoYWRab25lICE9ICdkZWZhdWx0
JyAmJiBhZFpvbmUgIT0gJycpIHsKICAgICAgICAgICAgdGhpcy5qc29uRGF0YS5hZFpvbmUgPSBh
ZFpvbmU7CiAgICAgICAgfQogICAgICAgIHRoaXMuanNvbkRhdGEuZW1haWxQYXJ0bmVySUQgPSAx
MTA2MjY7CiAgICAgICAgdGhpcy5qc29uRGF0YS5zaXRlID0gdGhpcy5zaXRlOwogICAgICAgIHRo
aXMuanNvbkRhdGEubXNyYyA9IHRoaXMubXNyYzsKICAgICAgICB0aGlzLmpzb25EYXRhLmFkRnJt
dCA9ICJmcm10PTA7IjsKICAgICAgICB0aGlzLmpzb25EYXRhLnBsYXllck5hbWUgPSAidmlkZW9f
YXJ0aWNsZWVtYmVkIjsKICAgICAgICB0aGlzLmpzb25EYXRhLnZpZGVvQ2VudGVyVVJMID0gImh0
dHA6Ly8iICsgd2luZG93LmxvY2F0aW9uLmhvc3QgKyAiL3ZpZGVvLWNlbnRlciI7CiAgICAgICAg
dGhpcy5qc29uRGF0YS5lbWJlZFBsYXllclVSTCA9IHRoaXMuZmxhc2hQbGF5ZXJQYXRoICsgIm1p
Y3JvUGxheWVyLnN3ZiI7CiAgICAgICAgdGhpcy5qc29uRGF0YS5lbWJlZENvbmZpZ1VSTCA9IHRo
aXMuZW1iZWRDb25maWdVUkw7CiAgICAgICAgdGhpcy5qc29uRGF0YS5lbWJlZFBsYXllcklEID0g
IjEwMDAiOwogICAgICAgIHRoaXMuanNvbkRhdGEuZW1iZWROYW1lID0gIm1pY3JvZmxhc2hQbGF5
ZXIiOwogICAgICAgIHRoaXMuanNvbkRhdGEuZW1iZWRCYXNlVVJMID0gdGhpcy5mbGFzaFBsYXll
clBhdGg7CiAgICAgICAgdGhpcy5qc29uRGF0YS5lbWJlZEhlaWdodCA9IDE4MDsKICAgICAgICB0
aGlzLmpzb25EYXRhLmVtYmVkV2lkdGggPSAyNzI7CiAgICAgICAgdGhpcy5qc29uRGF0YS5sYXJz
SUQgPSA5MTsKICAgICAgICB0aGlzLmpzb25EYXRhLmxhcnNBZFRyYWNraW5nSUQgPSAxMjU5Owog
ICAgICAgIHRoaXMuanNvbkRhdGEucHJvcDUgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdCgn
PycpWzBdOwogICAgICAgIHRoaXMuanNvbkRhdGEucHJvcDYgPSB3aW5kb3cubG9jYXRpb24uaHJl
ZjsKICAgICAgICB0aGlzLmpzb25EYXRhLnByb3AxMCA9IHRoaXMudmlkZW9VdGlsLmdldFVybFBh
cmFtKHdpbmRvdy5sb2NhdGlvbi5ocmVmLCAnbW9kJyk7CiAgICAgICAgdGhpcy5qc29uRGF0YS5j
YW1wYWlnbiA9IHRoaXMudmlkZW9VdGlsLmdldFVybFBhcmFtKHdpbmRvdy5sb2NhdGlvbi5ocmVm
LCAnbW9kJyk7CiAgICAgICAgdGhpcy5qc29uRGF0YS5wcm9wMTEgPSB0aGlzLnZpZGVvVXRpbC5n
ZXRVcmxQYXJhbSh3aW5kb3cubG9jYXRpb24uaHJlZiwgJ3JlZmxpbmsnKTsKICAgICAgICB0aGlz
Lmpzb25EYXRhLnByb3AxOSA9ICJ2aWRlb19lbWIiOwogICAgICAgIHRoaXMuanNvbkRhdGEucHJv
cDI0ID0gdGhpcy5wcm9wMjQ7CiAgICAgICAgdGhpcy5qc29uRGF0YS5wcm9wMjUgPSB0aGlzLnBy
b3AyNTsKICAgICAgICB0aGlzLmpzb25EYXRhLnByb3AyNyA9IHRoaXMucHJvcDI3OwogICAgICAg
IHZhciBzdWJTZWNDb21wb25lbnQgPSB0aGlzLnZpZGVvVXRpbC5vbW5pdHVyZUVuY29kaW5nKHRo
aXMuanNvbkRhdGFbJ3dzai1zZWN0aW9uJ10sIHRoaXMuanNvbkRhdGFbJ3dzai1zdWJzZWN0aW9u
J10sICdzJyk7CiAgICAgICAgdmFyIHNlY0NvbXBvbmVudCA9IHRoaXMudmlkZW9VdGlsLm9tbml0
dXJlRW5jb2RpbmcodGhpcy5qc29uRGF0YVsnd3NqLXNlY3Rpb24nXSwgdGhpcy5qc29uRGF0YVsn
d3NqLXN1YnNlY3Rpb24nXSwgJ2MnKTsKICAgICAgICB0aGlzLmpzb25EYXRhLnByb3AyID0gIldT
Sl8iICsgc2VjQ29tcG9uZW50OwogICAgICAgIHRoaXMuanNvbkRhdGEucHJvcDMgPSAiV1NKX1Zp
ZGVvX1ZpZGVvXyIgKyBzZWNDb21wb25lbnQ7CiAgICAgICAgdGhpcy5qc29uRGF0YS5wcm9wMjIg
PSAiV1NKX1ZpZGVvX1ZpZGVvXyIgKyBzdWJTZWNDb21wb25lbnQ7CiAgICAgICAgdGhpcy5qc29u
RGF0YS5wcm9wMjYgPSAiV1NKXyIgKyBzdWJTZWNDb21wb25lbnQ7CiAgICAgICAgdGhpcy5qc29u
RGF0YS5lbWFpbFVSTCA9IHRoaXMuZW1haWxVUkw7CiAgICAgICAgdmFyIHN1cHJzQWQgPSAnMCc7
CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgaWYgKHBJRC5pbmRleE9mKCcwXzBfV0gnKSAhPSAt
MSkgewogICAgICAgICAgICAgICAgc3VwcnNBZCA9ICcxJzsKICAgICAgICAgICAgfQogICAgICAg
IH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcigicElEIHJlYWQgZXJyb3Ii
KTsKICAgICAgICB9CiAgICAgICAgdGhpcy5qc29uRGF0YS5zdXBwcmVzc0FkcyA9IHN1cHJzQWQ7
CiAgICB9LAogICAgdXBkYXRlVGl0bGU6IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgdGl0bGUg
PSBkai5sYW5nLnF1ZXJ5KCcjdmlkZW9QbGF5ZXJEZXNjcmlwdGlvbiBoMicpWzBdLmlubmVySFRN
TDsKICAgICAgICB0aXRsZSA9IHRpdGxlLnN1YnN0cmluZygwLCB0aXRsZS5pbmRleE9mKCc8c21h
bGw+JykgLSAxKTsKICAgICAgICBkb2N1bWVudC50aXRsZSA9IGRvY3VtZW50LnRpdGxlLnJlcGxh
Y2UoJ0FydGljbGUnLCB0aXRsZSk7CiAgICB9Cn0pOwpkb2pvLmRlY2xhcmUoImRqLndpZGdldC52
aWRlby52aWRlbyIsIGRqLndpZGdldC52aWRlby5WaWRlb0NlbnRlciwgewogICAgY29uc3RydWN0
b3I6IGZ1bmN0aW9uIChhcmdzLCBvYmpOYW1lKSB7CiAgICAgICAgZG9qby5kZXByZWNhdGVkKCJk
ai53aWRnZXQudmlkZW8udmlkZW8iLCAiVXNlIGRqLndpZGdldC52aWRlby5WaWRlb0NlbnRlciwg
cmVtb3ZlIGFsaWFzIHdoZW4gTVNUIEpTRVhFQ3MgdXBkYXRlZCIsICIxLjAiKTsKICAgIH0KfSk7
CmRvam8ucHJvdmlkZSgiZGoud2lkZ2V0LnZpZGVvLlZpZGVvIik7CmRvam8ucmVxdWlyZSgiZGou
bGFuZyIpOwpkb2pvLnJlcXVpcmUoImRqLnV0aWwuVmlkZW8iKTsKZG9qby5yZXF1aXJlKCJkai51
dGlsLkFkcyIpOwpkb2pvLnJlcXVpcmUoInN3Zm9iamVjdC5zd2ZvYmplY3RfMV81LnN3Zm9iamVj
dCIpOwpkb2pvLnJlcXVpcmUoInN3Zm9iamVjdC5zd2ZvYmplY3RfMl8yLnN3Zm9iamVjdCIpOwpk
b2pvLnJlcXVpcmUoImRqLndpZGdldC52aWRlby5WaWRlb0NlbnRlciIpOwpkb2pvLmdldE9iamVj
dCgiZGoubW9kdWxlLnZpZGVvIiwgdHJ1ZSk7CmRvam8uZGVjbGFyZSgiZGoud2lkZ2V0LnZpZGVv
LlZpZGVvIiwgbnVsbCwgewogICAgY29uZmlnOiB7CiAgICAgICAgdGh1bWJuYWlsOiB7CiAgICAg
ICAgICAgIGRpdmNsYXNzOiAiaGVhZGxpbmVTdW1tYXJ5IHZpZGVvIiwKICAgICAgICAgICAgb25j
bGlja3ByZWZpeDogImRqLm1vZHVsZS5hcnRpY2xlVmlkZW9QbGF5ZXIudGFicGxheSgiLAogICAg
ICAgICAgICBvbmNsaWNrc3VmZml4OiAiKTsiLAogICAgICAgICAgICBocmVmcHJlZml4OiAiI2Fy
dGljbGVUYWJzX3ZpZGVvLSIKICAgICAgICB9LAogICAgICAgIGJjOiB7CiAgICAgICAgICAgIHNy
YzogImh0dHA6Ly93c2oudm8ubGxud2QubmV0L28yOC9wbHltZWRpYS9TV0YvQnJpZ2h0UExZZW1i
ZWQuc3dmIiwKICAgICAgICAgICAgZmxhc2hWYXJzOiAicGxheWVySWQ9NDUyMzE5ODU0JnZpZXdl
clNlY3VyZUdhdGV3YXlVUkw9aHR0cHM6Ly9zZXJ2aWNlcy5icmlnaHRjb3ZlLmNvbS9zZXJ2aWNl
cy9hbWZnYXRld2F5JnNlcnZpY2VzVVJMPWh0dHA6Ly9zZXJ2aWNlcy5icmlnaHRjb3ZlLmNvbS9z
ZXJ2aWNlcyZjZG5VUkw9aHR0cDovL2FkbWluLmJyaWdodGNvdmUuY29tJmRvbWFpbj1lbWJlZCZh
dXRvU3RhcnQ9ZmFsc2Umc2hvd1RpY2tlcj10cnVlJmZsYXNoSWQ9Zmxhc2hPYmomdmlkZW9JZD0i
LAogICAgICAgICAgICBiYXNlOiAiaHR0cDovL3dzai52by5sbG53ZC5uZXQvbzI4L3BseW1lZGlh
L1NXRiIsCiAgICAgICAgICAgIGJnY29sb3I6ICIjMDAwMDAwIiwKICAgICAgICAgICAgbmFtZTog
IkJyaWdodFBMWWVtYmVkIiwKICAgICAgICAgICAgcGx1Z2luc3BhZ2U6ICJodHRwOi8vd3d3Lm1h
Y3JvbWVkaWEuY29tL3Nob2Nrd2F2ZS9kb3dubG9hZC9pbmRleC5jZ2k/UDFfUHJvZF9WZXJzaW9u
PVNob2Nrd2F2ZUZsYXNoIiwKICAgICAgICAgICAgZmxhc2h2ZXJzaW9uOiAiOCIKICAgICAgICB9
CiAgICB9LAogICAgY29uc3RydWN0b3I6IGZ1bmN0aW9uIChpZCwgdiwgdywgaCwgYykgewogICAg
ICAgIGlmICghaWQpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB0aGlz
LnBhcmVudCA9IGRvam8uYnlJZChpZCk7CiAgICAgICAgdmFyIGlzV2lkZ2V0QWxyZWFkeUhhbmRs
ZWQgPSAodHlwZW9mIGRvam8ucXVlcnkoImRpdltkYXRhLWRqLWxpdmUtd2lkZ2V0XSIsIHRoaXMu
cGFyZW50KVswXSA9PT0gIm9iamVjdCIpOwogICAgICAgIGlmIChpc1dpZGdldEFscmVhZHlIYW5k
bGVkKSB7CiAgICAgICAgICAgIGNvbnNvbGUuaW5mbygie1ZpZGVvfSAlbyB3aWxsIGJlIGhhbmRs
ZWQgYnkgdGhlIHZpZGVvLk1pY3JvUGxheWVyLiIsIGlkKTsKICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgIH0KICAgICAgICB0aGlzLm1pY3JvUGxheWVycyA9IFtdOwogICAgICAgIHRoaXMubWlj
cm9QbGF5ZXJzT2JqZWN0cyA9IHt9OwogICAgICAgIHRoaXMudmlkZW9JZE1pY3JvUGxheWVySWRN
YXAgPSB7fTsKICAgICAgICB0aGlzLnZpZGVvVXRpbCA9IGRqLnV0aWwuVmlkZW87CiAgICAgICAg
dmFyIG92ZXJsYXlDb25maWcgPSB0aGlzLnZpZGVvVXRpbC5zZXR1cENvbmZpZygpOwogICAgICAg
IGRqLmxhbmcubWl4aW4odGhpcywgb3ZlcmxheUNvbmZpZyk7CiAgICAgICAgdGhpcy5mbGFzaFBs
YXllclBhdGggPSBkai5jb250ZXh0LmNvcmUuY2RuUHJlZml4ICsgIi9tZWRpYS9zd2YvIjsKICAg
ICAgICB0aGlzLnBhcmVudGlkID0gaWQ7CiAgICAgICAgaWYgKCF0aGlzLnBhcmVudCkgewogICAg
ICAgICAgICBjb25zb2xlLmxvZygnaWQgJyArIGlkICsgJyBub3QgZm91bmQnKTsKICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB0aGlzLnYgPSB2OwogICAgICAgIHcgPSAyNjQ7
CiAgICAgICAgdGhpcy53ID0gdzsKICAgICAgICBoID0gMjU0OwogICAgICAgIHRoaXMuaCA9IGg7
CiAgICAgICAgdGhpcy5jID0gYzsKICAgICAgICBpZiAodikgewogICAgICAgICAgICB0aGlzLmxv
YWQodiwgdywgaCwgYyk7CiAgICAgICAgfQogICAgfSwKICAgIGNyZWF0ZXdyYXBwZXI6IGZ1bmN0
aW9uICh2LCB3LCBoKSB7CiAgICAgICAgdGhpcy5kaXYgPSBkb2pvLmNyZWF0ZSgiZGl2Iiwgewog
ICAgICAgICAgICAiaWQiOiB0aGlzLnZpZGlkCiAgICAgICAgfSk7CiAgICAgICAgaWYgKHcgJiYg
IXRoaXMuaXNndWlkKHYpKSB7CiAgICAgICAgICAgIHRoaXMudHJ5dyA9ICcnICsgdyArICdweCc7
CiAgICAgICAgICAgIHRoaXMuZGl2LnN0eWxlLndpZHRoID0gdGhpcy50cnl3OwogICAgICAgIH0K
ICAgICAgICB0aGlzLnBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLmRpdik7CiAgICB9LAogICAgY3Jl
YXRldmlkZW9iYzogZnVuY3Rpb24gKHYsIHcsIGgsIGMpIHsKICAgICAgICBkb2pvLmRlcHJlY2F0
ZWQoImRqLndpZGdldC52aWRlby5WaWRlby5jcmVhdGV2aWRlb2JjIiwgIklmIGJyaWdodGNvdmUg
aXMgbm90IHN1cHBvcnRlZCwgcmVtb3ZlIHRoaXMgbWV0aG9kIiwgIjIuMCIpOwogICAgICAgIHRo
aXMuc28gPSBuZXcgU1dGT2JqZWN0KHRoaXMuY29uZmlnLmJjLnNyYywgdiwgdywgaCwgdGhpcy5j
b25maWcuYmMuZmxhc2h2ZXJzaW9uLCB0aGlzLmNvbmZpZy5iYy5iZ2NvbG9yKTsKICAgICAgICB0
aGlzLnNvLnNldEF0dHJpYnV0ZSgnaWQnLCAndmlkZW9fJyArIHRoaXMudmlkaWQpOwogICAgICAg
IHRoaXMuc28uYWRkUGFyYW0oJ2Jhc2UnLCB0aGlzLmNvbmZpZy5iYy5iYXNlKTsKICAgICAgICB0
aGlzLnNvLmFkZFBhcmFtKCJmbGFzaFZhcnMiLCB0aGlzLmNvbmZpZy5iYy5mbGFzaFZhcnMgKyB2
ICsgJyYnKTsKICAgICAgICB0aGlzLnNvLmFkZFBhcmFtKCJzZWFtbGVzc3RhYmJpbmciLCAiZmFs
c2UiKTsKICAgICAgICB0aGlzLnNvLmFkZFBhcmFtKCJzd0xpdmVDb25uZWN0IiwgInRydWUiKTsK
ICAgICAgICB0aGlzLnNvLmFkZFBhcmFtKCJuYW1lIiwgdGhpcy5jb25maWcuYmMubmFtZSk7CiAg
ICAgICAgdGhpcy5zby5hZGRQYXJhbSgicGx1Z2luc3BhZ2UiLCB0aGlzLmNvbmZpZy5iYy5wbHVn
aW5zcGFnZSk7CiAgICAgICAgdGhpcy5zby5hZGRQYXJhbSgid21vZGUiLCAib3BhcXVlIik7CiAg
ICAgICAgdGhpcy5zby53cml0ZSh0aGlzLmRpdik7CiAgICAgICAgaWYgKGMpIHsKICAgICAgICAg
ICAgdmFyIGNhcHRpb24gPSBkb2pvLmNyZWF0ZSgicCIsIHsKICAgICAgICAgICAgICAgICJjbGFz
cyI6ICJ0YXJnZXRDYXB0aW9uIiwKICAgICAgICAgICAgICAgIGlubmVySFRNTDogYwogICAgICAg
ICAgICB9KTsKICAgICAgICAgICAgdGhpcy5kaXYuYXBwZW5kQ2hpbGQoY2FwdGlvbik7CiAgICAg
ICAgfQogICAgfSwKICAgIGNyZWF0ZXZpZGVvZ3VpZDogZnVuY3Rpb24gKHYpIHsKICAgICAgICB0
aGlzLmxvYWRTb2xvVmlkZW8odiwgdGhpcy52aWRpZCk7CiAgICAgICAgaWYgKHRoaXMuYykgewog
ICAgICAgICAgICB2YXIgY2FwdGlvbiA9IGRvam8uY3JlYXRlKCJwIiwgewogICAgICAgICAgICAg
ICAgImNsYXNzIjogInRhcmdldENhcHRpb24iLAogICAgICAgICAgICAgICAgImlubmVySFRNTCI6
IHRoaXMuYwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdGhpcy5wYXJlbnQuYXBwZW5kQ2hp
bGQoY2FwdGlvbik7CiAgICAgICAgfQogICAgfSwKICAgIGNyZWF0ZXZpZGVvOiBmdW5jdGlvbiAo
diwgdywgaCwgYykgewogICAgICAgIGlmICh0aGlzLmlzZ3VpZCh2KSkgewogICAgICAgICAgICB0
aGlzLmNyZWF0ZXZpZGVvZ3VpZCh2KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlz
LmNyZWF0ZXZpZGVvYmModiwgdywgaCwgYyk7CiAgICAgICAgfQogICAgfSwKICAgIGxvYWQ6IGZ1
bmN0aW9uICh2LCB3LCBoLCBjKSB7CiAgICAgICAgaWYgKCF0aGlzLmRpdikgewogICAgICAgICAg
ICB0aGlzLm5ld0lkKCk7CiAgICAgICAgICAgIHRoaXMuY3JlYXRld3JhcHBlcih2LCB3LCBoKTsK
ICAgICAgICAgICAgdGhpcy5jcmVhdGV2aWRlbyh2LCB3LCBoLCBjKTsKICAgICAgICB9CiAgICB9
LAogICAgY3JlYXRldGh1bWJuYWlsOiBmdW5jdGlvbiAocGxheU9ic2VydmVyKSB7CiAgICAgICAg
aWYgKCF0aGlzLmd1aWR2aWRlbykgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKCdubyBndWlk
dmlkZW8nKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoIXRoaXMu
Z3VpZHZpZGVvLmRldGFpbHMpIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcignbm8gZ3VpZHZp
ZGVvLmRldGFpbHMnKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAo
IXBsYXlPYnNlcnZlcikgewogICAgICAgICAgICBjb25zb2xlLndhcm4oJ25vIHBsYXlPYnNlcnZl
cicpOwogICAgICAgIH0KICAgICAgICB2YXIgdnRkaXYgPSBkb2pvLmNyZWF0ZSgnZGl2Jywgewog
ICAgICAgICAgICAnY2xhc3MnOiAndmlkZW9UcmVlJwogICAgICAgIH0pOwogICAgICAgIHRoaXMu
ZGl2LmFwcGVuZENoaWxkKHZ0ZGl2KTsKICAgICAgICB2YXIgdmZkaXYgPSBkb2pvLmNyZWF0ZSgn
ZGl2JywgewogICAgICAgICAgICAnY2xhc3MnOiAndmlkZW9GcmFtZScKICAgICAgICB9KTsKICAg
ICAgICB2dGRpdi5hcHBlbmRDaGlsZCh2ZmRpdik7CiAgICAgICAgdmFyIGFpbWcgPSBkb2pvLmNy
ZWF0ZSgnYScsIHsKICAgICAgICAgICAgJ2hyZWYnOiAiIyIKICAgICAgICB9KTsKICAgICAgICB2
YXIgdGhhdCA9IHRoaXM7CiAgICAgICAgZG9qby5jb25uZWN0KGFpbWcsICJvbmNsaWNrIiwgdGhp
cywgZnVuY3Rpb24gKGV2KSB7CiAgICAgICAgICAgIHBsYXlPYnNlcnZlci5maXJlKHRoaXMudik7
CiAgICAgICAgICAgIGRvam8uc3RvcEV2ZW50KGV2KTsKICAgICAgICB9KTsKICAgICAgICB2ZmRp
di5hcHBlbmRDaGlsZChhaW1nKTsKICAgICAgICB2YXIgaW1nID0gZG9qby5jcmVhdGUoJ2ltZycs
IHsKICAgICAgICAgICAgJ3NyYyc6IHRoaXMuZ3VpZHZpZGVvLmRldGFpbHMudGh1bWJuYWlsVVJM
U21hbGwsCiAgICAgICAgICAgICd3aWR0aCc6ICcxMTUnLAogICAgICAgICAgICAnaGVpZ2h0Jzog
JzY1JywKICAgICAgICAgICAgJ2FsdCc6ICd2aWRlbycKICAgICAgICB9KTsKICAgICAgICBhaW1n
LmFwcGVuZENoaWxkKGltZyk7CiAgICAgICAgdmFyIHNwYW5uYnNwID0gZG9qby5jcmVhdGUoJ3Nw
YW4nLCB7CiAgICAgICAgICAgICdjbGFzcyc6ICd2aWRlb0J1ZycKICAgICAgICB9KTsKICAgICAg
ICBzcGFubmJzcC5pbm5lckhUTUwgPSAiJm5ic3A7IjsKICAgICAgICBhaW1nLmFwcGVuZENoaWxk
KHNwYW5uYnNwKTsKICAgICAgICB2YXIgdGl0bGUgPSBkb2pvLmNyZWF0ZSgiaDMiLCB7CiAgICAg
ICAgICAgICJjbGFzcyI6ICJmaXJzdCIKICAgICAgICB9KTsKICAgICAgICB0aGlzLmRpdi5hcHBl
bmRDaGlsZCh0aXRsZSk7CiAgICAgICAgdmFyIGFoMyA9IGRvam8uY3JlYXRlKCJhIiwgewogICAg
ICAgICAgICAiaHJlZiI6ICIjIiwKICAgICAgICAgICAgaW5uZXJIVE1MOiB0aGlzLmd1aWR2aWRl
by5kZXRhaWxzLm5hbWUKICAgICAgICB9KTsKICAgICAgICB2YXIgdGhhdDIgPSB0aGlzOwogICAg
ICAgIGRvam8uY29ubmVjdChhaDMsICJvbmNsaWNrIiwgdGhpcywgZnVuY3Rpb24gKGV2KSB7CiAg
ICAgICAgICAgIHBsYXlPYnNlcnZlci5maXJlKHRoaXMudik7CiAgICAgICAgICAgIGRvam8uc3Rv
cEV2ZW50KGV2KTsKICAgICAgICB9KTsKICAgICAgICB0aXRsZS5hcHBlbmRDaGlsZChhaDMpOwog
ICAgICAgIHZhciBkdXJhdGlvbiA9IGRvam8uY3JlYXRlKCJzbWFsbCIsIHsKICAgICAgICAgICAg
aW5uZXJIVE1MOiB0aGlzLnZpZGVvVXRpbC5mb3JtYXRkdXJhdGlvbih0aGlzLmd1aWR2aWRlby5k
ZXRhaWxzLmR1cmF0aW9uKQogICAgICAgIH0pOwogICAgICAgIHRoaXMuZGl2LmFwcGVuZENoaWxk
KGR1cmF0aW9uKTsKICAgICAgICB2YXIgZGVzYyA9IGRvam8uY3JlYXRlKCJwIiwgewogICAgICAg
ICAgICAiY2xhc3MiOiAidGFyZ2V0Q2FwdGlvbiIsCiAgICAgICAgICAgIGlubmVySFRNTDogdGhp
cy5ndWlkdmlkZW8uZGV0YWlscy5kZXNjcmlwdGlvbgogICAgICAgIH0pOwogICAgICAgIHRoaXMu
ZGl2LmFwcGVuZENoaWxkKGRlc2MpOwogICAgfSwKICAgIGxvYWR0aHVtYm5haWw6IGZ1bmN0aW9u
ICh2LCB3LCBoLCBwbGF5T2JzZXJ2ZXIpIHsKICAgICAgICB0aGlzLnYgPSB2OwogICAgICAgIGlm
ICghdGhpcy5pc2d1aWQodikpIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcigiY2Fubm90IGNy
ZWF0ZSB0dW1ibmFpbCB0byBvbGQgdmlkZW8iKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
IH0KICAgICAgICB0aGlzLmdldHZpZGVvZGV0YWlscygpOwogICAgICAgIHRoaXMubmV3SWQoKTsK
ICAgICAgICB0aGlzLmNyZWF0ZXdyYXBwZXIodiwgdywgaCk7CiAgICAgICAgdGhpcy5jcmVhdGV0
aHVtYm5haWwocGxheU9ic2VydmVyKTsKICAgIH0sCiAgICBnZXRndWlkdmlkZW86IGZ1bmN0aW9u
ICgpIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBpZiAodGhpcy5ndWlkdmlkZW8pIHsKICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLmd1aWR2aWRlbzsKICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgIHRoaXMuZ3VpZHZpZGVvID0gbmV3IGRqLndpZGdldC52aWRlby5WaWRl
b0NlbnRlcigpOwogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ3VpZHZpZGVvOwogICAgICAg
ICAgICB9CiAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKCJj
b3VsZCBub3QgaW5zdGFudGlhdGUgZGoud2lkZ2V0LnZpZGVvLlZpZGVvQ2VudGVyIik7CiAgICAg
ICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgfSwKICAgIGdldHZpZGVvZGV0YWlsczogZnVu
Y3Rpb24gKCkgewogICAgICAgIGlmICh0aGlzLmdldGd1aWR2aWRlbygpKSB7CiAgICAgICAgICAg
IHRoaXMuZ3VpZHZpZGVvLmRldGFpbHMgPSB0aGlzLnZpZGVvVXRpbC5nZXRWaWRlb0RldGFpbHMo
ewogICAgICAgICAgICAgICAgJ2lkJzogdGhpcy52LAogICAgICAgICAgICAgICAgJ2ZpZWxkcyc6
ICduYW1lLGlkLGR1cmF0aW9uLGRlc2NyaXB0aW9uLHRodW1ibmFpbFVSTCx0aHVtYm5haWxVUkxT
bWFsbCcKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgfSwKICAgIHNldEJvb2tNYXJrOiBm
dW5jdGlvbiAoKSB7CiAgICAgICAgaWYgKHRoaXMuZ2V0Z3VpZHZpZGVvKCkpIHsKICAgICAgICAg
ICAgdGhpcy5ndWlkdmlkZW8uc2V0Qm9va01hcmsoKTsKICAgICAgICB9CiAgICB9LAogICAgcGF1
c2VNaWNyb1BsYXllcjogZnVuY3Rpb24gKCkgewogICAgICAgIGlmICh0aGlzLmdldGd1aWR2aWRl
bygpKSB7CiAgICAgICAgICAgIHRoaXMuZ3VpZHZpZGVvLnBhdXNlTWljcm9QbGF5ZXJzKCk7CiAg
ICAgICAgfQogICAgfSwKICAgIGlzZ3VpZDogZnVuY3Rpb24gKGcpIHsKICAgICAgICBnID0gJycg
KyBnOwogICAgICAgIGlmIChnLnN1YnN0cmluZygwLCAxKSAhPSAneycpIHsKICAgICAgICAgICAg
ZyA9ICd7JyArIGc7CiAgICAgICAgfQogICAgICAgIGlmIChnLnN1YnN0cmluZygwLCAxKSA9PSAn
eycgJiYgZy5zdWJzdHJpbmcoOSwgMTApID09ICctJyAmJiBnLnN1YnN0cmluZygxNCwgMTUpID09
ICctJyAmJiBnLnN1YnN0cmluZygxOSwgMjApID09ICctJykgewogICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
fQogICAgfSwKICAgIG5ld0lkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgdGhpcy52aWRpZCA9ICJ2
aWRlb2Rpdl8iICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogOTk5OTk5KTsKICAgIH0sCiAg
ICBsb2FkU29sb1ZpZGVvOiBmdW5jdGlvbiAodmlkZW9JZCwgZGl2SWQpIHsKICAgICAgICB2YXIg
b3ZlcmxheUNvbmZpZyA9IHRoaXMudmlkZW9VdGlsLnNldHVwQ29uZmlnKCk7CiAgICAgICAgZGou
bGFuZy5taXhpbih0aGlzLCBvdmVybGF5Q29uZmlnKTsKICAgICAgICBpZiAodmlkZW9JZC5pbmRl
eE9mKCd7JykgPT0gLTEpIHsKICAgICAgICAgICAgdmlkZW9JZCA9ICd7JyArIHZpZGVvSWQgKyAn
fSc7CiAgICAgICAgfQogICAgICAgIHZhciBtaWNyb1BsYXllcklkID0gIk1pY3JvUGxheWVyXyIg
KyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwKTsKICAgICAgICB0aGlzLm1pY3Jv
UGxheWVyc1t0aGlzLm1pY3JvUGxheWVycy5sZW5ndGhdID0gbWljcm9QbGF5ZXJJZDsKICAgICAg
ICB0aGlzLnZpZGVvSWRNaWNyb1BsYXllcklkTWFwW3ZpZGVvSWRdID0gbWljcm9QbGF5ZXJJZDsK
ICAgICAgICBkb2pvLmdldE9iamVjdCgiZGouY29udGV4dC52aWRlbyIsIHRydWUpOwogICAgICAg
IGlmICghZGouY29udGV4dC52aWRlby5zb2xvVmlkZW9zKSB7CiAgICAgICAgICAgIGRqLmNvbnRl
eHQudmlkZW8uc29sb1ZpZGVvcyA9IFtdOwogICAgICAgIH0KICAgICAgICBkai5jb250ZXh0LnZp
ZGVvLnNvbG9WaWRlb3NbdmlkZW9JZF0gPSB0aGlzOwogICAgICAgIHZhciBjaGFpblZpZGVvcyA9
IDE7CiAgICAgICAgdmFyIGNoYWluVmlkZW9zRmxhZyA9IGRvam8uZ2V0T2JqZWN0KCJkai5jb250
ZXh0LnZpZGVvLmNoYWluVmlkZW9zIik7CiAgICAgICAgaWYgKGNoYWluVmlkZW9zRmxhZyAhPSB1
bmRlZmluZWQgJiYgY2hhaW5WaWRlb3NGbGFnID09PSBmYWxzZSkgewogICAgICAgICAgICBjaGFp
blZpZGVvcyA9IDA7CiAgICAgICAgfQogICAgICAgIGlmIChzd2ZvYmplY3QuZ2V0Rmxhc2hQbGF5
ZXJWZXJzaW9uKCkubWFqb3IgPj0gOSkgewogICAgICAgICAgICB2YXIgZGltID0gewogICAgICAg
ICAgICAgICAgdzogIjI3MiIsCiAgICAgICAgICAgICAgICBoOiAiMTgwIgogICAgICAgICAgICB9
OwogICAgICAgICAgICBzd2ZvYmplY3QuZW1iZWRTV0YodGhpcy5mbGFzaFBsYXllclBhdGggKyAi
bWljcm9QbGF5ZXIuc3dmIiwgZGl2SWQsIGRpbS53LCBkaW0uaCwgIjkuMC4wIiwgIiIsIHsKICAg
ICAgICAgICAgICAgICdvYmpOYW1lJzogImR1bW15IiwKICAgICAgICAgICAgICAgICd2aWRlb0dV
SUQnOiB2aWRlb0lkLAogICAgICAgICAgICAgICAgJ2FsbG93UGxheWVyUG9wdXAnOiAnMScsCiAg
ICAgICAgICAgICAgICAncGx5TWVkaWFFbmFibGVkJzogJzEnLAogICAgICAgICAgICAgICAgJ21v
dmllV2lkdGgnOiBkaW0udywKICAgICAgICAgICAgICAgICdtb3ZpZUhlaWdodCc6IGRpbS5oLAog
ICAgICAgICAgICAgICAgJ2hvc3QnOiBsb2NhdGlvbi5ob3N0LAogICAgICAgICAgICAgICAgJ2No
YWluVmlkZW9zJzogY2hhaW5WaWRlb3MKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAg
YWxsb3dzY3JpcHRhY2Nlc3M6ICJhbHdheXMiLAogICAgICAgICAgICAgICAgd21vZGU6ICJvcGFx
dWUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGlkOiBtaWNyb1BsYXllcklkCiAg
ICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGRqLnV0aWwuVmlkZW8u
bm9uU3VwcG9ydGluZ0ZsYXNoUGxheWVyKGRpdklkKTsKICAgICAgICB9CiAgICB9LAogICAgb3Bl
bk1pY3JvUG9wVXBQbGF5ZXI6IGZ1bmN0aW9uIChpZCkgewogICAgICAgIHZhciBjdXJyZW50UGxh
eWluZ0xvY2F0aW9uID0gTWF0aC5mbG9vcihzd2ZvYmplY3QuZ2V0T2JqZWN0QnlJZCh0aGlzLnZp
ZGVvSWRNaWNyb1BsYXllcklkTWFwW2lkXSkuZ2V0U2VlaygpKTsKICAgICAgICB2YXIgY3VycmVu
dGx5UGxheWluZ0NvbGxlY3Rpb24gPSB0aGlzLm1pY3JvUGxheWVyc09iamVjdHNbaWRdWyd3c2ot
c2VjdGlvbiddOwogICAgICAgIGlmIChjdXJyZW50bHlQbGF5aW5nQ29sbGVjdGlvbiA9PSAnTGlm
ZXN0eWxlJykgewogICAgICAgICAgICBjdXJyZW50bHlQbGF5aW5nQ29sbGVjdGlvbiA9ICdMaWZl
ICYgU3R5bGUnOwogICAgICAgIH0KICAgICAgICB2YXIgY3VycmVudGx5UGxheWluZ1ZpZGVvSWQg
PSBpZDsKICAgICAgICB2YXIgd2lkdGggPSAnNTEyJzsKICAgICAgICB2YXIgaGVpZ2h0ID0gJzY2
MCc7CiAgICAgICAgdGhpcy5wb3BVcFdpbmRvdyA9IHdpbmRvdy5vcGVuKHRoaXMucG9wVXBQYWdl
VXJsICsgJz9jdXJyZW50UGxheWluZ0xvY2F0aW9uPScgKyBjdXJyZW50UGxheWluZ0xvY2F0aW9u
ICsgJyZjdXJyZW50bHlQbGF5aW5nQ29sbGVjdGlvbj0nICsgZXNjYXBlKGN1cnJlbnRseVBsYXlp
bmdDb2xsZWN0aW9uKSArICcmY3VycmVudGx5UGxheWluZ1ZpZGVvSWQ9JyArIGN1cnJlbnRseVBs
YXlpbmdWaWRlb0lkLCAncG9wVXBQbGF5ZXInLCAnaGVpZ2h0PScgKyBoZWlnaHQgKyAnLHdpZHRo
PScgKyB3aWR0aCArICcsbGVmdD0nICsgKChzY3JlZW4ud2lkdGggLSBOdW1iZXIod2lkdGgpKSAv
IDIpICsgJyx0b3A9JyArIChzY3JlZW4uaGVpZ2h0IC0gTnVtYmVyKGhlaWdodCkpIC8gMiArICcs
cmVzaXphYmxlPXllcyxzY3JvbGxiYXJzPW5vLHRvb2xiYXI9bm8sc3RhdHVzPW5vJyk7CiAgICB9
LAogICAgZ2V0SlNPTjogZnVuY3Rpb24gKGlkKSB7CiAgICAgICAgdmFyIHVybCA9ICcvYXBpLXZp
ZGVvL2dldF92aWRlb19pbmZvLmFzcD9ndWlkPScgKyBpZDsKICAgICAgICB1cmwgKz0gJyZmaWVs
ZHM9YWxsJzsKICAgICAgICB2YXIgcGFyYW1zID0gewogICAgICAgICAgICBjb250ZXh0OiB0aGlz
LAogICAgICAgICAgICBoYW5kbGVBczogImpzb24iLAogICAgICAgICAgICBzeW5jOiB0cnVlLAog
ICAgICAgICAgICByZXNwb25zZVR5cGU6ICJhcHBsaWNhdGlvbi9qc29uIiwKICAgICAgICAgICAg
Y2FsbGJhY2s6IHRoaXMuaGFuZGxlR2V0SlNPTiwKICAgICAgICAgICAgZXJyb3JDYWxsYmFjazog
ZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiRmFpbGVkIHdoaWxl
IGV4ZWN1dGluZyB2aWRlby5WaWRlby5nZXRKU09OIik7CiAgICAgICAgICAgIH0KICAgICAgICB9
OwogICAgICAgIGRqLnV0aWwuVmlkZW8uZ2V0VmlkZW9EYXRhKHVybCwgcGFyYW1zKTsKICAgICAg
ICB0aGlzLm1pY3JvUGxheWVyc09iamVjdHNbaWRdID0gdGhpcy5qc29uRGF0YTsKICAgICAgICBy
ZXR1cm4gZG9qby50b0pzb24odGhpcy5qc29uRGF0YSk7CiAgICB9LAogICAgaGFuZGxlR2V0SlNP
TjogZnVuY3Rpb24gKGpzb24pIHsKICAgICAgICB0aGlzLmpzb25EYXRhID0ganNvbjsKICAgICAg
ICB2YXIgYWRab25lID0gbmV3IGRqLnV0aWwuQWRzKCkuZ2V0UmVnaXN0ZXJlZEFkc1pvbmUoJycp
OwogICAgICAgIGlmIChhZFpvbmUgIT0gJ2RlZmF1bHQnICYmIGFkWm9uZSAhPSAnJykgewogICAg
ICAgICAgICB0aGlzLmpzb25EYXRhLmFkWm9uZSA9IGFkWm9uZTsKICAgICAgICB9CiAgICAgICAg
dGhpcy5qc29uRGF0YS5lbWFpbFBhcnRuZXJJRCA9IDExMDYyNjsKICAgICAgICB0aGlzLmpzb25E
YXRhLnNpdGUgPSB0aGlzLnNpdGU7CiAgICAgICAgdGhpcy5qc29uRGF0YS5tc3JjID0gdGhpcy5t
c3JjOwogICAgICAgIHRoaXMuanNvbkRhdGEuYWRGcm10ID0gImZybXQ9MDsiOwogICAgICAgIHRo
aXMuanNvbkRhdGEucGxheWVyTmFtZSA9ICJ2aWRlb19hcnRpY2xlZW1iZWQiOwogICAgICAgIHRo
aXMuanNvbkRhdGEudmlkZW9DZW50ZXJVUkwgPSAiaHR0cDovLyIgKyB3aW5kb3cubG9jYXRpb24u
aG9zdCArICIvdmlkZW8tY2VudGVyIjsKICAgICAgICB0aGlzLmpzb25EYXRhLmVtYmVkUGxheWVy
VVJMID0gdGhpcy5mbGFzaFBsYXllclBhdGggKyAibWljcm9QbGF5ZXIuc3dmIjsKICAgICAgICB0
aGlzLmpzb25EYXRhLmVtYmVkQ29uZmlnVVJMID0gdGhpcy5lbWJlZENvbmZpZ1VSTDsKICAgICAg
ICB0aGlzLmpzb25EYXRhLmVtYmVkUGxheWVySUQgPSAiMTAwMCI7CiAgICAgICAgdGhpcy5qc29u
RGF0YS5lbWJlZE5hbWUgPSAibWljcm9mbGFzaFBsYXllciI7CiAgICAgICAgdGhpcy5qc29uRGF0
YS5lbWJlZEJhc2VVUkwgPSB0aGlzLmZsYXNoUGxheWVyUGF0aDsKICAgICAgICB0aGlzLmpzb25E
YXRhLmVtYmVkSGVpZ2h0ID0gMTgwOwogICAgICAgIHRoaXMuanNvbkRhdGEuZW1iZWRXaWR0aCA9
IDI3MjsKICAgICAgICB0aGlzLmpzb25EYXRhLmxhcnNJRCA9IDkxOwogICAgICAgIHRoaXMuanNv
bkRhdGEubGFyc0FkVHJhY2tpbmdJRCA9IDEyNTk7CiAgICAgICAgdGhpcy5qc29uRGF0YS5wcm9w
NSA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KCc/JylbMF07CiAgICAgICAgdGhpcy5qc29u
RGF0YS5wcm9wNiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmOwogICAgICAgIHRoaXMuanNvbkRhdGEu
cHJvcDEwID0gdGhpcy52aWRlb1V0aWwuZ2V0VXJsUGFyYW0od2luZG93LmxvY2F0aW9uLmhyZWYs
ICdtb2QnKTsKICAgICAgICB0aGlzLmpzb25EYXRhLmNhbXBhaWduID0gdGhpcy52aWRlb1V0aWwu
Z2V0VXJsUGFyYW0od2luZG93LmxvY2F0aW9uLmhyZWYsICdtb2QnKTsKICAgICAgICB0aGlzLmpz
b25EYXRhLnByb3AxMSA9IHRoaXMudmlkZW9VdGlsLmdldFVybFBhcmFtKHdpbmRvdy5sb2NhdGlv
bi5ocmVmLCAncmVmbGluaycpOwogICAgICAgIHRoaXMuanNvbkRhdGEucHJvcDE5ID0gInZpZGVv
X2VtYiI7CiAgICAgICAgdGhpcy5qc29uRGF0YS5wcm9wMjQgPSB0aGlzLnByb3AyNDsKICAgICAg
ICB0aGlzLmpzb25EYXRhLnByb3AyNSA9IHRoaXMucHJvcDI1OwogICAgICAgIHRoaXMuanNvbkRh
dGEucHJvcDI3ID0gdGhpcy5wcm9wMjc7CiAgICAgICAgdmFyIHN1YlNlY0NvbXBvbmVudCA9IHRo
aXMudmlkZW9VdGlsLm9tbml0dXJlRW5jb2RpbmcodGhpcy5qc29uRGF0YVsnd3NqLXNlY3Rpb24n
XSwgdGhpcy5qc29uRGF0YVsnd3NqLXN1YnNlY3Rpb24nXSwgJ3MnKTsKICAgICAgICB2YXIgc2Vj
Q29tcG9uZW50ID0gdGhpcy52aWRlb1V0aWwub21uaXR1cmVFbmNvZGluZyh0aGlzLmpzb25EYXRh
Wyd3c2otc2VjdGlvbiddLCB0aGlzLmpzb25EYXRhWyd3c2otc3Vic2VjdGlvbiddLCAnYycpOwog
ICAgICAgIHRoaXMuanNvbkRhdGEucHJvcDIgPSAiV1NKXyIgKyBzZWNDb21wb25lbnQ7CiAgICAg
ICAgdGhpcy5qc29uRGF0YS5wcm9wMyA9ICJXU0pfVmlkZW9fVmlkZW9fIiArIHNlY0NvbXBvbmVu
dDsKICAgICAgICB0aGlzLmpzb25EYXRhLnByb3AyMiA9ICJXU0pfVmlkZW9fVmlkZW9fIiArIHN1
YlNlY0NvbXBvbmVudDsKICAgICAgICB0aGlzLmpzb25EYXRhLnByb3AyNiA9ICJXU0pfIiArIHN1
YlNlY0NvbXBvbmVudDsKICAgICAgICB0aGlzLmpzb25EYXRhLmVtYWlsVVJMID0gdGhpcy5lbWFp
bFVSTDsKICAgICAgICB2YXIgc3VwcnNBZCA9IChwSUQgJiYgcElELmluZGV4T2YoJzBfMF9XSCcp
ICE9IC0xKSA/ICcxJyA6ICcwJzsKICAgICAgICB0aGlzLmpzb25EYXRhLnN1cHByZXNzQWRzID0g
c3VwcnNBZDsKICAgIH0KfSk7CmRvam8ucHJvdmlkZSgiZGoud2lkZ2V0LnZpZGVvLmNvbnRyb2xs
ZXIuTWljcm9QbGF5ZXIiKTsKZG9qby5yZXF1aXJlKCJkai53aWRnZXQudmlkZW8uY29udHJvbGxl
ci5QbGF5ZXIiKTsKZG9qby5yZXF1aXJlKCJkai53aWRnZXQudmlkZW8ubW9kZWwuUGxheWVyRXZl
bnRzIik7CmRvam8ucmVxdWlyZSgiZGoudXRpbC5BZHMiKTsKZG9qby5kZWNsYXJlKCJkai53aWRn
ZXQudmlkZW8uY29udHJvbGxlci5NaWNyb1BsYXllciIsIGRqLndpZGdldC52aWRlby5jb250cm9s
bGVyLlBsYXllciwgewogICAgY29uc3RydWN0b3I6IGZ1bmN0aW9uIChvYnMsIHVzZXJDb25maWd1
cmF0aW9uKSB7CiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLmFwcGxpY2F0aW9uSUQgPSAzOwog
ICAgICAgIHRoaXMuX2V2ZW50cyA9IGRqLndpZGdldC52aWRlby5tb2RlbC5QbGF5ZXJFdmVudHM7
CiAgICB9LAogICAgaW5pdDogZnVuY3Rpb24gKHZpZXcsIHZpZGVvSUQsIHNlZWtUaW1lLCByZWxv
YWQpIHsKICAgICAgICB0aGlzLnZpZGVvSW5mb3JtYXRpb24uaWQgPSB2aWRlb0lEOwogICAgICAg
IGlmICghcmVsb2FkKSB7CiAgICAgICAgICAgIHRoaXMuX3NldHVwRmxhc2hUb0pzTGlzdGVuZXJz
KCk7CiAgICAgICAgICAgIHRoaXMuX3NldHVwSW50ZXJuYWxFdmVudHMoKTsKICAgICAgICB9CiAg
ICAgICAgdGhpcy5pbmhlcml0ZWQoYXJndW1lbnRzKTsKICAgIH0sCiAgICBnZXRFdmVudE5hbWVz
cGFjZTogZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiAiZGouY29udGV4dC52aWRlby5zb2xv
VmlkZW9zWyciICsgdGhpcy52aWRlb0luZm9ybWF0aW9uLmlkICsgIiddIjsKICAgIH0sCiAgICBz
dWJzY3JpYmVCeU5hbWU6IGZ1bmN0aW9uIChldmVudE5hbWUsIGNhbGxiYWNrLCBjb250ZXh0KSB7
CiAgICAgICAgdGhpcy5vYnNlcnZlci5zdWJzY3JpYmVCeU5hbWUoZXZlbnROYW1lLCBjYWxsYmFj
aywgY29udGV4dCk7CiAgICB9LAogICAgYWRkVmlkZW9QYXJhbWV0ZXJzOiBmdW5jdGlvbiAocGFy
YW1zKSB7CiAgICAgICAgcGFyYW1zID0gdGhpcy5pbmhlcml0ZWQoYXJndW1lbnRzKTsKICAgICAg
ICB2YXIgYWRab25lID0gKG5ldyBkai51dGlsLkFkcygpKS5nZXRSZWdpc3RlcmVkQWRzWm9uZSgn
Jyk7CiAgICAgICAgcGFyYW1zLmFkWm9uZSA9ICgoYWRab25lICE9ICdkZWZhdWx0JykgJiYgKGFk
Wm9uZSAhPSAnJykpID8gYWRab25lIDogcGFyYW1zLmFkWm9uZTsKICAgICAgICBwYXJhbXMuYWRG
cm10ID0gImZybXQ9MDsiOwogICAgICAgIHBhcmFtcy52aWRlb0NlbnRlclVSTCA9ICJodHRwOi8v
IiArIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgIi92aWRlby1jZW50ZXIiOwogICAgICAgIHJldHVy
biBwYXJhbXM7CiAgICB9LAogICAgX3NldHVwSW50ZXJuYWxFdmVudHM6IGZ1bmN0aW9uICgpIHsK
ICAgICAgICB0aGlzLm9ic2VydmVyLnN1YnNjcmliZUJ5TmFtZSh0aGlzLl9ldmVudHMuY29udGlu
dWVMb2FkVmlkZW8sIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhpcy5yZWFkeUZvckV2ZW50
cyA9IHRydWU7CiAgICAgICAgfSwgdGhpcyk7CiAgICAgICAgdGhpcy5vYnNlcnZlci5zdWJzY3Jp
YmVCeU5hbWUodGhpcy5fZXZlbnRzLm9wZW5NaWNyb1BvcFVwUGxheWVyLCBmdW5jdGlvbiAoKSB7
CiAgICAgICAgICAgIHRoaXMudmlldy5vcGVuUG9wVXBQbGF5ZXIoKTsKICAgICAgICB9LCB0aGlz
KTsKICAgIH0sCiAgICBfc2V0dXBGbGFzaFRvSnNMaXN0ZW5lcnM6IGZ1bmN0aW9uICgpIHsKICAg
ICAgICB2YXIgb2JzID0gdGhpcy5vYnNlcnZlciwKICAgICAgICAgICAgZXZlbnRzID0gdGhpcy5f
ZXZlbnRzLAogICAgICAgICAgICBwbGF5ZXIgPSB7fTsKICAgICAgICBmb3IgKHZhciBldk5hbWUg
aW4gZXZlbnRzKSB7CiAgICAgICAgICAgIGlmIChldmVudHMuaGFzT3duUHJvcGVydHkoZXZOYW1l
KSkgewogICAgICAgICAgICAgICAgdmFyIGV2VmFsdWUgPSBldmVudHNbZXZOYW1lXTsKICAgICAg
ICAgICAgICAgIChmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICBw
bGF5ZXJbbmFtZV0gPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG9icy5m
aXJlQnlOYW1lKHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAg
fShldk5hbWUsIGV2VmFsdWUpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBkb2pv
LmdldE9iamVjdCgiZGouY29udGV4dC52aWRlby5zb2xvVmlkZW9zIiwgdHJ1ZSk7CiAgICAgICAg
ZGouY29udGV4dC52aWRlby5zb2xvVmlkZW9zW3RoaXMudmlkZW9JbmZvcm1hdGlvbi5pZF0gPSBw
bGF5ZXI7CiAgICB9Cn0pOwpkb2pvLnByb3ZpZGUoImRqLndpZGdldC52aWRlby52aWV3Lk1haW5Q
bGF5ZXIiKTsKZG9qby5yZXF1aXJlKCJkai51dGlsLlZpZGVvVXRpbHMiKTsKZG9qby5yZXF1aXJl
KCJkai53aWRnZXQudmlkZW8ubW9kZWwuU1dGUGxheWVyIik7CmRvam8ucmVxdWlyZSgiZGoud2lk
Z2V0LnZpZGVvLm1vZGVsLlBsYXllckV2ZW50cyIpOwooZGoud2lkZ2V0LnZpZGVvLnZpZXcuTWFp
blBsYXllciA9IGZ1bmN0aW9uICh1c2VyQ29uZmlndXJhdGlvbikgewogICAgdGhpcy5jb250cm9s
bGVyID0gbnVsbDsKICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IHsKICAgICAgICBuYW1lOiAibWFp
blBsYXllciIsCiAgICAgICAgYWxsb3dQb3BVcDogMQogICAgfTsKICAgIGRvam8ubWl4aW4odGhp
cy5jb25maWd1cmF0aW9uLCB1c2VyQ29uZmlndXJhdGlvbik7CiAgICB0aGlzLnBsYXllckNyZWF0
ZWQgPSBmYWxzZTsKfSkucHJvdG90eXBlID0gewogICAgaW5pdDogZnVuY3Rpb24gKGNvbnRyb2xs
ZXIpIHsKICAgICAgICB0aGlzLmNvbnRyb2xsZXIgPSBjb250cm9sbGVyOwogICAgICAgIHRoaXMu
cmVuZGVyKCk7CiAgICB9LAogICAgcmVuZGVyOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGNv
bmYgPSB0aGlzLmNvbnRyb2xsZXIuY29uZmlndXJhdGlvbjsKICAgICAgICBpZiAoIXRoaXMucGxh
eWVyQ3JlYXRlZCkgewogICAgICAgICAgICB0aGlzLnBsYXllckNyZWF0ZWQgPSB0cnVlOwogICAg
ICAgICAgICB2YXIgc3dmUGxheWVyID0gbmV3IGRqLndpZGdldC52aWRlby5tb2RlbC5TV0ZQbGF5
ZXIoKTsKICAgICAgICAgICAgc3dmUGxheWVyLmlkID0gY29uZi5wbGF5ZXJJRDsKICAgICAgICAg
ICAgc3dmUGxheWVyLnN3ZlVSTCA9IGNvbmYuZmxhc2hQbGF5ZXJQYXRoICsgY29uZi5wbGF5ZXJU
eXBlLnN3ZkZpbGU7CiAgICAgICAgICAgIHN3ZlBsYXllci5hbGxvd1BsYXllclBvcHVwID0gdGhp
cy5jb25maWd1cmF0aW9uLmFsbG93UG9wVXA7CiAgICAgICAgICAgIHN3ZlBsYXllci5jb250YWlu
ZXJJRCA9IGNvbmYuY29udGFpbmVySUQ7CiAgICAgICAgICAgIHN3ZlBsYXllci53aWR0aCA9IGNv
bmYucGxheWVyVHlwZS53aWR0aDsKICAgICAgICAgICAgc3dmUGxheWVyLmhlaWdodCA9IGNvbmYu
cGxheWVyVHlwZS5oZWlnaHQ7CiAgICAgICAgICAgIHN3ZlBsYXllci5ldmVudE5hbWVzcGFjZSA9
IGNvbmYuZXZlbnROYW1lc3BhY2U7CiAgICAgICAgICAgIHZhciBwbGF5ZXJFdmVudHMgPSBkai53
aWRnZXQudmlkZW8ubW9kZWwuUGxheWVyRXZlbnRzOwogICAgICAgICAgICBmb3IgKHZhciBldk5h
bWUgaW4gcGxheWVyRXZlbnRzKSB7CiAgICAgICAgICAgICAgICBpZiAocGxheWVyRXZlbnRzLmhh
c093blByb3BlcnR5KGV2TmFtZSkpIHsKICAgICAgICAgICAgICAgICAgICBzd2ZQbGF5ZXJbZXZO
YW1lXSA9IGV2TmFtZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAg
ICBzd2ZQbGF5ZXIuaG9zdCA9IGNvbmYuaG9zdDsKICAgICAgICAgICAgZGoudXRpbC5WaWRlb1V0
aWxzLmNyZWF0ZVNXRlBsYXllcihzd2ZQbGF5ZXIpOwogICAgICAgIH0KICAgIH0sCiAgICBwbGF5
OiBmdW5jdGlvbiAodmlkZW9JbmZvKSB7CiAgICAgICAgdmFyIHBsYXllck9iamVjdCA9IHN3Zm9i
amVjdC5nZXRPYmplY3RCeUlkKHRoaXMuY29udHJvbGxlci5jb25maWd1cmF0aW9uLnBsYXllcklE
KTsKICAgICAgICBpZiAocGxheWVyT2JqZWN0ICYmIHR5cGVvZiBwbGF5ZXJPYmplY3QucGxheVZp
ZGVvID09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgcGxheWVyT2JqZWN0LnBsYXlWaWRlbyhk
b2pvLnRvSnNvbih2aWRlb0luZm8pKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25z
b2xlLmVycm9yKCJ7UGxheWVyfSB2aWRlbyBQbGF5ZXIgc3RpbGwgbm90IGxvYWRlZCIpOwogICAg
ICAgIH0KICAgIH0KfTsKZG9qby5wcm92aWRlKCJkai53aWRnZXQudmlkZW8udmlldy5NcDRNaWNy
b1BsYXllciIpOwpkb2pvLnJlcXVpcmUoImRqLndpZGdldC52aWRlby52aWV3LkJhc2VQbGF5ZXIi
KTsKZG9qby5yZXF1aXJlKCJkai53aWRnZXQudmlkZW8ubW9kZWwuUGxheWVyRXZlbnRzIik7CmRv
am8ucmVxdWlyZSgiZGoudXRpbC5WaWRlb1RyYWNraW5nIik7CmRvam8uZGVjbGFyZSgiZGoud2lk
Z2V0LnZpZGVvLnZpZXcuTXA0TWljcm9QbGF5ZXIiLCBkai53aWRnZXQudmlkZW8udmlldy5CYXNl
UGxheWVyLCB7CiAgICByZW5kZXJQcmVsb2FkZXI6IGZ1bmN0aW9uICgpIHsKICAgICAgICB0aGlz
Lm9DbnQgPSBkb2pvLmJ5SWQodGhpcy5jb250cm9sbGVyLmNvbmZpZ3VyYXRpb24ucGxheWVySUQp
OwogICAgICAgIGRvam8uYWRkQ2xhc3ModGhpcy5vQ250LCB0aGlzLmNvbmZpZ3VyYXRpb24ucHJl
bG9hZGVyQ2xhc3NOYW1lKTsKICAgIH0sCiAgICByZW5kZXI6IGZ1bmN0aW9uICgpIHsKICAgICAg
ICBpZiAodGhpcy5wbGF5ZXJDcmVhdGVkKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9
CiAgICAgICAgdGhpcy5wbGF5ZXJDcmVhdGVkID0gdHJ1ZTsKICAgICAgICB2YXIgRXYgPSBkai53
aWRnZXQudmlkZW8ubW9kZWwuUGxheWVyRXZlbnRzOwogICAgICAgIHRoaXMuY29udHJvbGxlci5v
YnNlcnZlci5maXJlQnlOYW1lKEV2LmNvbnRpbnVlTG9hZFZpZGVvKTsKICAgICAgICB0aGlzLmNv
bnRyb2xsZXIub2JzZXJ2ZXIuZmlyZUJ5TmFtZShFdi5wbGF5VmlkZW8pOwogICAgICAgIHRoaXMu
Y29udHJvbGxlci5yZWFkeUZvckV2ZW50cyA9IHRydWU7CiAgICB9LAogICAgcGxheTogZnVuY3Rp
b24gKHBhcmFtZXRlcnMpIHsKICAgICAgICBkai51dGlsLlZpZGVvVHJhY2tpbmcuZmlyZShwYXJh
bWV0ZXJzKTsKICAgICAgICB2YXIgdmlkZW9VcmkgPSBwYXJhbWV0ZXJzLnZpZGVvMzIwa01QNFVy
bDsKICAgICAgICBpZiAoIXZpZGVvVXJpKSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoInt2
aWV3Lk1pY3JvUGxheWVyfSBubyB2aWRlb1VyaSBzcGVjaWZpZWQiKTsKICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgIH0KICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAg
ICAgZG9jdW1lbnQubG9jYXRpb24gPSB2aWRlb1VyaTsKICAgICAgICB9LCA1MDApOwogICAgfQp9
KTsKZG9qby5wcm92aWRlKCJkai53aWRnZXQudmlkZW8udmlldy5Td2ZNaWNyb1BsYXllciIpOwpk
b2pvLnJlcXVpcmUoImRqLndpZGdldC52aWRlby52aWV3LkJhc2VQbGF5ZXIiKTsKZG9qby5yZXF1
aXJlKCJkai51dGlsLlZpZGVvVXRpbHMiKTsKZG9qby5yZXF1aXJlKCJkai53aWRnZXQudmlkZW8u
bW9kZWwuUGxheWVyRXZlbnRzIik7CmRvam8ucmVxdWlyZSgiZGoud2lkZ2V0LnZpZGVvLm1vZGVs
LlNXRlBsYXllciIpOwpkb2pvLmRlY2xhcmUoImRqLndpZGdldC52aWRlby52aWV3LlN3Zk1pY3Jv
UGxheWVyIiwgZGoud2lkZ2V0LnZpZGVvLnZpZXcuQmFzZVBsYXllciwgewogICAgcmVuZGVyUHJl
bG9hZGVyOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgdGhpcy5vQ250ID0gZG9qby5ieUlkKHRoaXMu
Y29udHJvbGxlci5jb25maWd1cmF0aW9uLnBsYXllcklEKTsKICAgICAgICBkb2pvLmFkZENsYXNz
KHRoaXMub0NudCwgdGhpcy5jb25maWd1cmF0aW9uLnByZWxvYWRlckNsYXNzTmFtZSk7CiAgICB9
LAogICAgcmVuZGVyOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgaWYgKHRoaXMucGxheWVyQ3JlYXRl
ZCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRoaXMucGxheWVyQ3Jl
YXRlZCA9IHRydWU7CiAgICAgICAgdmFyIGNvbmYgPSB0aGlzLmNvbnRyb2xsZXIuY29uZmlndXJh
dGlvbjsKICAgICAgICB2YXIgc3dmUGxheWVyID0gbmV3IGRqLndpZGdldC52aWRlby5tb2RlbC5T
V0ZQbGF5ZXIoKTsKICAgICAgICBzd2ZQbGF5ZXIuaWQgPSBjb25mLnBsYXllcklEOwogICAgICAg
IHN3ZlBsYXllci5zd2ZVUkwgPSBjb25mLmZsYXNoUGxheWVyUGF0aCArIGNvbmYucGxheWVyVHlw
ZS5zd2ZGaWxlOwogICAgICAgIHN3ZlBsYXllci5jb250YWluZXJJRCA9IGNvbmYuY29udGFpbmVy
SUQ7CiAgICAgICAgc3dmUGxheWVyLndpZHRoID0gY29uZi5wbGF5ZXJUeXBlLndpZHRoOwogICAg
ICAgIHN3ZlBsYXllci5oZWlnaHQgPSBjb25mLnBsYXllclR5cGUuaGVpZ2h0OwogICAgICAgIHN3
ZlBsYXllci5ob3N0ID0gY29uZi5ob3N0OwogICAgICAgIHN3ZlBsYXllci5hbGxvd1BsYXllclBv
cHVwID0gMTsKICAgICAgICBzd2ZQbGF5ZXIuZXZlbnROYW1lc3BhY2UgPSB0aGlzLmNvbnRyb2xs
ZXIuZ2V0RXZlbnROYW1lc3BhY2UoKTsKICAgICAgICB2YXIgcGxheWVyRXZlbnRzID0gZGoud2lk
Z2V0LnZpZGVvLm1vZGVsLlBsYXllckV2ZW50czsKICAgICAgICBmb3IgKHZhciBldk5hbWUgaW4g
cGxheWVyRXZlbnRzKSB7CiAgICAgICAgICAgIGlmIChwbGF5ZXJFdmVudHMuaGFzT3duUHJvcGVy
dHkoZXZOYW1lKSkgewogICAgICAgICAgICAgICAgc3dmUGxheWVyW2V2TmFtZV0gPSBldk5hbWU7
CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhpcy5fd3JhcFBsYXllckluQ29udGFp
bmVyKCk7CiAgICAgICAgdGhpcy5fcmVwbGFjZVBsYXllcldpdGhTd2Yoc3dmUGxheWVyKTsKICAg
IH0sCiAgICBwbGF5OiBmdW5jdGlvbiAocGFyYW1ldGVycykgewogICAgICAgIHRoaXMuX3BsYXll
ck9iamVjdCA9IHN3Zm9iamVjdC5nZXRPYmplY3RCeUlkKHRoaXMuY29udHJvbGxlci5jb25maWd1
cmF0aW9uLnBsYXllcklEKTsKICAgICAgICBpZiAodGhpcy5fcGxheWVyT2JqZWN0ICYmIHR5cGVv
ZiB0aGlzLl9wbGF5ZXJPYmplY3QucGxheVZpZGVvID09ICJmdW5jdGlvbiIpIHsKICAgICAgICAg
ICAgdGhpcy5fcGxheWVyT2JqZWN0LnBsYXlWaWRlbyhkb2pvLnRvSnNvbihwYXJhbWV0ZXJzKSk7
CiAgICAgICAgICAgIHRoaXMuX3BvbGxGb3JWaWRlb0V2ZW50cygpOwogICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIntQbGF5ZXJ9IHZpZGVvIFBsYXllciBzdGlsbCBu
b3QgbG9hZGVkIik7CiAgICAgICAgfQogICAgfSwKICAgIG9wZW5Qb3BVcFBsYXllcjogZnVuY3Rp
b24gKCkgewogICAgICAgIGRqLnV0aWwuVmlkZW9VdGlscy5wb3BVcFBsYXllcih7CiAgICAgICAg
ICAgIHBsYXlMb2NhdGlvbjogTWF0aC5mbG9vcihzd2ZvYmplY3QuZ2V0T2JqZWN0QnlJZCh0aGlz
LmNvbnRyb2xsZXIuY29uZmlndXJhdGlvbi5wbGF5ZXJJRCkuZ2V0U2VlaygpKSwKICAgICAgICAg
ICAgY29sbGVjdGlvbjogdGhpcy5jb250cm9sbGVyLmdldFZpZGVvRGF0YSgid3NqLXNlY3Rpb24i
KSwKICAgICAgICAgICAgdmlkZW9JRDogdGhpcy5jb250cm9sbGVyLmdldFZpZGVvRGF0YSgiaWQi
KSwKICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLmNvbnRyb2xsZXIuY29uZmlndXJhdGlvbi5wbGF5
ZXJUeXBlLmhlaWdodCwKICAgICAgICAgICAgd2lkdGg6IHRoaXMuY29udHJvbGxlci5jb25maWd1
cmF0aW9uLnBsYXllclR5cGUud2lkdGgKICAgICAgICB9KTsKICAgIH0sCiAgICBfcmVwbGFjZVBs
YXllcldpdGhTd2Y6IGZ1bmN0aW9uIChzd2ZQbGF5ZXIpIHsKICAgICAgICBkai51dGlsLlZpZGVv
VXRpbHMuY3JlYXRlU1dGUGxheWVyKHN3ZlBsYXllcik7CiAgICB9LAogICAgX3dyYXBQbGF5ZXJJ
bkNvbnRhaW5lcjogZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBvQ250ID0gZG9qby5ieUlkKHRo
aXMuY29udHJvbGxlci5jb25maWd1cmF0aW9uLmNvbnRhaW5lcklEKSwKICAgICAgICAgICAgb0Nu
dFBvc2l0aW9uID0gZG9qby5wb3NpdGlvbihvQ250KSwKICAgICAgICAgICAgd3JhcHBlciA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgIHZhciBwb3MgPSBkb2pvLnBvc2l0
aW9uKG9DbnQpOwogICAgICAgIGRvam8uc3R5bGUod3JhcHBlciwgewogICAgICAgICAgICB3aWR0
aDogcG9zLncgKyAicHgiLAogICAgICAgICAgICBoZWlnaHQ6IHBvcy5oICsgInB4IgogICAgICAg
IH0pOwogICAgICAgIGRvam8uYWRkQ2xhc3Mod3JhcHBlciwgb0NudC5jbGFzc05hbWUpOwogICAg
ICAgIGRvam8ucGxhY2Uod3JhcHBlciwgb0NudCwgImJlZm9yZSIpOwogICAgICAgIGRvam8ucGxh
Y2Uob0NudCwgd3JhcHBlciwgImZpcnN0Iik7CiAgICB9LAogICAgX3BvbGxGb3JWaWRlb0V2ZW50
czogZnVuY3Rpb24gKCkgewogICAgICAgIGlmICghdGhpcy5fcGxheWVyT2JqZWN0IHx8ICh0eXBl
b2YgdGhpcy5fcGxheWVyT2JqZWN0LmdldFNlZWsgIT09ICJmdW5jdGlvbiIpKSB7CiAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdmFyIGV2ZW50cyA9IGRqLndpZGdldC52aWRl
by5tb2RlbC5QbGF5ZXJFdmVudHMsCiAgICAgICAgICAgIHRoYXQgPSB0aGlzLAogICAgICAgICAg
ICBkdXJhdGlvbiA9IHRoaXMuY29udHJvbGxlci52aWRlb0luZm9ybWF0aW9uLmR1cmF0aW9uLAog
ICAgICAgICAgICBwb3MgPSAodGhhdC5fcGxheWVyT2JqZWN0LmdldFNlZWsoKSB8fCAwKSwKICAg
ICAgICAgICAgY250ID0gMywKICAgICAgICAgICAgaXNQbGF5ID0gdHJ1ZTsKICAgICAgICBjbGVh
ckludGVydmFsKHRoaXMuaXZhbCk7CiAgICAgICAgdGhpcy5pdmFsID0gc2V0SW50ZXJ2YWwoZnVu
Y3Rpb24gKCkgewogICAgICAgICAgICBpZiAodHlwZW9mIHRoYXQuX3BsYXllck9iamVjdC5nZXRT
ZWVrICE9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKHRoYXQu
aXZhbCk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAg
dmFyIG5ld1BvcyA9IHRoYXQuX3BsYXllck9iamVjdC5nZXRTZWVrKCksCiAgICAgICAgICAgICAg
ICBuZXdDbnQgPSAobmV3UG9zID09PSBwb3MpID8gKGNudCArIDEpIDogMDsKICAgICAgICAgICAg
aWYgKGlzUGxheSkgewogICAgICAgICAgICAgICAgaXNQbGF5ID0gZmFsc2U7CiAgICAgICAgICAg
ICAgICB0aGF0LmNvbnRyb2xsZXIub2JzZXJ2ZXIuZmlyZUJ5TmFtZShldmVudHMucGxheVZpZGVv
KTsKICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJQbGF5aW5nIFZpZGVvIik7CiAgICAgICAg
ICAgIH0gZWxzZSBpZiAoKGNudCA+IDMpICYmIChuZXdDbnQgPT0gMCkpIHsKICAgICAgICAgICAg
ICAgIHRoYXQuY29udHJvbGxlci5vYnNlcnZlci5maXJlQnlOYW1lKGV2ZW50cy51bnBhdXNlVmlk
ZW8pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNudCA9IG5ld0NudDsKICAgICAgICAgICAg
cG9zID0gbmV3UG9zOwogICAgICAgICAgICBpZiAoY250ID09IDMpIHsKICAgICAgICAgICAgICAg
IGlmICgoZHVyYXRpb24gLSBwb3MpIDw9IDEpIHsKICAgICAgICAgICAgICAgICAgICB0aGF0LmNv
bnRyb2xsZXIub2JzZXJ2ZXIuZmlyZUJ5TmFtZShldmVudHMuc3RvcFZpZGVvKTsKICAgICAgICAg
ICAgICAgICAgICBjbGVhckludGVydmFsKHRoYXQuaXZhbCk7CiAgICAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgICAgIHRoYXQuY29udHJvbGxlci5vYnNlcnZlci5maXJlQnlO
YW1lKGV2ZW50cy5wYXVzZVZpZGVvKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQog
ICAgICAgIH0sIDI1MCk7CiAgICB9LAogICAgZGVzdHJ1Y3RvcjogZnVuY3Rpb24gKCkgewogICAg
ICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pdmFsKTsKICAgIH0KfSk7CmRvam8ucHJvdmlkZSgiZGou
d2lkZ2V0LnZpZGVvLnZpZXcuSHRtbDVNaWNyb1BsYXllciIpOwpkb2pvLnJlcXVpcmUoImRqLndp
ZGdldC52aWRlby52aWV3Lk1wNE1pY3JvUGxheWVyIik7CmRvam8ucHJvdmlkZSgiZGoud2lkZ2V0
LnZpZGVvLm1vZGVsLlBsYXllckV2ZW50cyIpOwpkb2pvLnJlcXVpcmUoImRqLnV0aWwuVmlkZW9V
dGlscyIpOwpkb2pvLmRlY2xhcmUoImRqLndpZGdldC52aWRlby52aWV3Lkh0bWw1TWljcm9QbGF5
ZXIiLCBkai53aWRnZXQudmlkZW8udmlldy5NcDRNaWNyb1BsYXllciwgewogICAgcGxheTogZnVu
Y3Rpb24gKHBhcmFtZXRlcnMpIHsKICAgICAgICB2YXIgdmlkZW9VcmkgPSBwYXJhbWV0ZXJzLnZp
ZGVvMzIwa01QNFVybDsKICAgICAgICBpZiAoIXZpZGVvVXJpKSB7CiAgICAgICAgICAgIGNvbnNv
bGUuZXJyb3IoInt2aWV3Lk1pY3JvUGxheWVyfSBubyB2aWRlb1VyaSBzcGVjaWZpZWQiKTsKICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB0aGlzLl9jcmVhdGVWaWRlb09iamVj
dChwYXJhbWV0ZXJzLnZpZGVvU3RpbGxVUkwsIHZpZGVvVXJpKTsKICAgICAgICB0aGlzLl9zdWJz
Y3JpYmVUb1ZpZGVvRXZlbnRzKCk7CiAgICAgICAgZG9qby5yZW1vdmVDbGFzcyh0aGlzLm9DbnQs
IHRoaXMuY29uZmlndXJhdGlvbi5wcmVsb2FkZXJDbGFzc05hbWUpOwogICAgICAgIGRvam8uZW1w
dHkodGhpcy5vQ250KTsKICAgICAgICBkb2pvLnBsYWNlKHRoaXMuX3ZpZGVvLCB0aGlzLm9DbnQp
OwogICAgICAgIGRqLnV0aWwuVmlkZW9UcmFja2luZy5maXJlKHBhcmFtZXRlcnMpOwogICAgICAg
IHRoaXMuX3BsYXlpbmcgPSBmYWxzZTsKICAgICAgICBkai51dGlsLlZpZGVvVXRpbHMuY2FsbFRo
cm91Z2hEaXNwYXRjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHRoaXMuX3ZpZGVvLnBsYXko
KTsKICAgICAgICB9LCB0aGlzKTsKICAgIH0sCiAgICBfY3JlYXRlVmlkZW9PYmplY3Q6IGZ1bmN0
aW9uICh2aWRlb1N0aWxsVVJMLCB2aWRlb1VyaSkgewogICAgICAgIHZhciBwb3MgPSBkb2pvLnBv
c2l0aW9uKHRoaXMub0NudCk7CiAgICAgICAgdGhpcy5fdmlkZW8gPSBkb2pvLmNyZWF0ZSgidmlk
ZW8iLCB7CiAgICAgICAgICAgIHBvc3RlcjogdmlkZW9TdGlsbFVSTCwKICAgICAgICAgICAgc3Jj
OiB2aWRlb1VyaSwKICAgICAgICAgICAgY29udHJvbHM6IHRydWUsCiAgICAgICAgICAgIHdpZHRo
OiBwb3MudywKICAgICAgICAgICAgaGVpZ2h0OiBwb3MuaAogICAgICAgIH0pOwogICAgfSwKICAg
IF9zdWJzY3JpYmVUb1ZpZGVvRXZlbnRzOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGV2ID0g
ZGoud2lkZ2V0LnZpZGVvLm1vZGVsLlBsYXllckV2ZW50cywKICAgICAgICAgICAgb2IgPSB0aGlz
LmNvbnRyb2xsZXIub2JzZXJ2ZXI7CiAgICAgICAgZG9qby5jb25uZWN0KHRoaXMuX3ZpZGVvLCAi
b25wbGF5IiwgZnVuY3Rpb24gKCkgewogICAgICAgICAgICBvYi5maXJlQnlOYW1lKGV2LnBsYXlW
aWRlbyk7CiAgICAgICAgfSk7CiAgICAgICAgZG9qby5jb25uZWN0KHRoaXMuX3ZpZGVvLCAib25w
YXVzZSIsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgb2IuZmlyZUJ5TmFtZShldi5wYXVzZVZp
ZGVvKTsKICAgICAgICB9KTsKICAgICAgICBkb2pvLmNvbm5lY3QodGhpcy5fdmlkZW8sICJvbmVu
ZGVkIiwgZnVuY3Rpb24gKCkgewogICAgICAgICAgICBvYi5maXJlQnlOYW1lKGV2LnN0b3BWaWRl
byk7CiAgICAgICAgfSk7CiAgICB9Cn0pOwpkb2pvLnByb3ZpZGUoImRqLm1vZHVsZS52aWRlby5z
dGFuZEFsb25lVmlkZW8iKTsKZG9qby5yZXF1aXJlKCJkai51dGlsLlZpZGVvIik7CmRvam8ucmVx
dWlyZSgiZGoubW9kdWxlLnZpZGVvTW9kdWxlIik7CmRvam8ucmVxdWlyZSgiZGoubGFuZyIpOwpk
b2pvLnJlcXVpcmUoImRqLndpZGdldC52aWRlby5jb250cm9sbGVyLk1pY3JvUGxheWVyIik7CmRv
am8ucmVxdWlyZSgiZGoud2lkZ2V0LnZpZGVvLmNvbnRyb2xsZXIuUGxheWVyIik7CmRvam8ucmVx
dWlyZSgiZGoud2lkZ2V0LnZpZGVvLm1vZGVsLlBsYXllckV2ZW50cyIpOwpkb2pvLnJlcXVpcmUo
ImRqLnV0aWwuRWxlbWVudCIpOwpkai5tb2R1bGUudmlkZW8uc3RhbmRBbG9uZVZpZGVvID0gewog
ICAgaW5pdDogZnVuY3Rpb24gKGNvbmYpIHsKICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSB7
CiAgICAgICAgICAgIHN0YW5kQWxvbmVWaWRlb0NsYXNzOiAiIiwKICAgICAgICAgICAgdGh1bWJu
YWlsVmlkZW9DbGFzczogIiIKICAgICAgICB9OwogICAgICAgIGRvam8ubWl4aW4odGhpcy5jb25m
aWd1cmF0aW9uLCBjb25mKTsKICAgICAgICB0aGF0ID0gdGhpczsKICAgICAgICB2YXIgc3RhbmRB
bG9uZVZpZGVvQ2xhc3MgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc3RhbmRBbG9uZVZpZGVvQ2xhc3M7
CiAgICAgICAgdmFyIHRodW1ibmFpbFZpZGVvQ2xhc3MgPSB0aGlzLmNvbmZpZ3VyYXRpb24udGh1
bWJuYWlsVmlkZW9DbGFzczsKICAgICAgICB2YXIgc3RhbmRBbG9uZUFuY2hvciA9IGRvam8ucXVl
cnkoJyMnICsgc3RhbmRBbG9uZVZpZGVvQ2xhc3MpWzBdOwogICAgICAgIGlmIChzdGFuZEFsb25l
QW5jaG9yKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICB2YXIgc3RhbmRBbG9u
ZUd1aWQgPSBkai51dGlsLkVsZW1lbnQuZ2V0RGF0YShzdGFuZEFsb25lQW5jaG9yLCAnZ3VpZCcp
OwogICAgICAgICAgICAgICAgdmFyIHZpZGVvRGV0YWlsID0gZGoudXRpbC5WaWRlby5nZXRWaWRl
b0RldGFpbHMoewogICAgICAgICAgICAgICAgICAgIGlkOiBzdGFuZEFsb25lR3VpZCwKICAgICAg
ICAgICAgICAgICAgICBmaWVsZHM6ICdmb3JtYXR0ZWRMYXN0TW9kaWZpZWREYXRlLGR1cmF0aW9u
LHdzai1zZWN0aW9uLHdzai1zdWJzZWN0aW9uJwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAg
ICAgICAgICBkb2pvLnF1ZXJ5KCcudmlkZW8gI3ZpZGVvTWV0YVN0cmFwIC52aWRlb0NhdGVnb3J5
JylbMF0uaW5uZXJIVE1MID0gdGhhdC5nZXRDYXRlZ29yeSh2aWRlb0RldGFpbCk7CiAgICAgICAg
ICAgICAgICBkb2pvLnF1ZXJ5KCcudmlkZW8gI3ZpZGVvTWV0YVN0cmFwIC52aWRlb0RhdGVTdGFt
cCcpWzBdLmlubmVySFRNTCA9IHRoYXQuZ2V0VmlkZW9EYXRlKHZpZGVvRGV0YWlsWydmb3JtYXR0
ZWRMYXN0TW9kaWZpZWREYXRlJ10pOwogICAgICAgICAgICAgICAgZG9qby5xdWVyeSgnLnZpZGVv
ICN2aWRlb01ldGFTdHJhcCAudmlkZW9EdXJhdGlvbicpWzBdLmlubmVySFRNTCA9IHRoYXQuZ2V0
RHVyYXRpb24odmlkZW9EZXRhaWxbJ2R1cmF0aW9uJ10pOwogICAgICAgICAgICB9IGNhdGNoIChl
KSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpOwogICAgICAgICAgICB9CiAgICAg
ICAgfQogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHZhciB0aHVtYm5haWxWaWRlb0FyciA9IGRv
am8ucXVlcnkoJy4nICsgdGh1bWJuYWlsVmlkZW9DbGFzcyk7CiAgICAgICAgICAgIGRvam8uZm9y
RWFjaCh0aHVtYm5haWxWaWRlb0FyciwgZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7CiAgICAgICAg
ICAgICAgICB2YXIgdGh1bWJuYWlsR3VpZCA9IGRqLnV0aWwuRWxlbWVudC5nZXREYXRhKGl0ZW0s
ICJndWlkIik7CiAgICAgICAgICAgICAgICB2YXIgdFZpZGVvRGV0YWlsID0gZGoudXRpbC5WaWRl
by5nZXRWaWRlb0RldGFpbHMoewogICAgICAgICAgICAgICAgICAgIGlkOiB0aHVtYm5haWxHdWlk
LAogICAgICAgICAgICAgICAgICAgIGZpZWxkczogJ2R1cmF0aW9uLHdzai1zZWN0aW9uLHdzai1z
dWJzZWN0aW9uJwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBkb2pvLnF1ZXJ5
KCcudmlkZW8gI2Rlc2MgLnZpZGVvQ2F0ZWdvcnknKVtpbmRleF0uaW5uZXJIVE1MID0gdGhhdC5n
ZXRDYXRlZ29yeSh0VmlkZW9EZXRhaWwpOwogICAgICAgICAgICAgICAgZG9qby5xdWVyeSgnLnZp
ZGVvICNkZXNjIC52aWRlb0R1cmF0aW9uJylbaW5kZXhdLmlubmVySFRNTCA9IHRoYXQuZ2V0RHVy
YXRpb24odFZpZGVvRGV0YWlsWydkdXJhdGlvbiddKTsKICAgICAgICAgICAgfSk7CiAgICAgICAg
fSBjYXRjaCAoZSkgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpOwogICAgICAgIH0KICAg
ICAgICBkb2pvLmFkZExpdmVFdmVudCgiLiIgKyB0aHVtYm5haWxWaWRlb0NsYXNzLCAiY2xpY2si
LCBmdW5jdGlvbiAoZXYpIHsKICAgICAgICAgICAgdmFyIHZpZGVvSW1nRWxlID0gZG9qby5xdWVy
eSgnIycgKyBzdGFuZEFsb25lVmlkZW9DbGFzcyArICcgaW1nJylbMF07CiAgICAgICAgICAgIHZh
ciBpZCA9IHRoaXMuaWQuc3BsaXQoInwiKTsKICAgICAgICAgICAgdmFyIHZpZGVvRWxlID0gZG9q
by5ieUlkKHN0YW5kQWxvbmVWaWRlb0NsYXNzKTsKICAgICAgICAgICAgdmFyIG91dGVyU3BhbiA9
IGRvam8ucXVlcnkoJyMnICsgaWRbMF0gKyAnPiBzcGFuJylbMF07CiAgICAgICAgICAgIHZhciBp
bm5lclNwYW4gPSBkb2pvLnF1ZXJ5KCcjJyArIGlkWzBdICsgJz4gc3BhbiA+IHNwYW4nKVswXTsK
ICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIHZhciBub3dQbGF5Q2xhc3MgPSBkb2pv
LnF1ZXJ5KCcudmlkZW8gLnZpZGVvVmVydGljYWxMaXN0IC5ub3dQbGF5aW5nJyk7CiAgICAgICAg
ICAgICAgICBpZiAobm93UGxheUNsYXNzICE9PSBudWxsICYmIG5vd1BsYXlDbGFzcyAhPT0gdW5k
ZWZpbmVkICYmIG5vd1BsYXlDbGFzcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgICAgICAg
dmFyIG5vd1BsYXlJZCA9IG5vd1BsYXlDbGFzc1swXS5pZDsKICAgICAgICAgICAgICAgICAgICBj
b25zb2xlLmxvZygibm93UGxheUlkOiAiICsgbm93UGxheUlkKTsKICAgICAgICAgICAgICAgICAg
ICBkb2pvLnJlbW92ZUNsYXNzKGRvam8uYnlJZChub3dQbGF5SWQpLCAnbm93UGxheWluZycpOwog
ICAgICAgICAgICAgICAgICAgIGRvam8uYnlJZChub3dQbGF5SWQgKyAiX2lubmVyIikuaW5uZXJI
VE1MID0gIiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkb2pvLmFkZENsYXNz
KG91dGVyU3BhbiwgIm5vd1BsYXlpbmciKTsKICAgICAgICAgICAgICAgIGlubmVyU3Bhbi5pbm5l
ckhUTUwgPSAibm93IHBsYXlpbmciOwogICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAg
ICAgICAgICAgICAgY29uc29sZS5sb2coIm5vdyBwbGF5aW5nIG5vdCBmb3VuZCIpOwogICAgICAg
ICAgICB9CiAgICAgICAgICAgIGlmICghdmlkZW9JbWdFbGUpIHsKICAgICAgICAgICAgICAgIHZp
ZGVvRWxlID0gZG9qby5xdWVyeSgnLnZpZGVvIC52aWRlb09iamVjdEJveCcpWzBdOwogICAgICAg
ICAgICAgICAgZG9qby5yZW1vdmVDbGFzcyh2aWRlb0VsZSwgJ3ZpZGVvT2JqZWN0TG9hZGluZycp
OwogICAgICAgICAgICAgICAgdmlkZW9FbGUuc2V0QXR0cmlidXRlKCdpZCcsIHN0YW5kQWxvbmVW
aWRlb0NsYXNzKTsKICAgICAgICAgICAgICAgIHZpZGVvRWxlLnNldEF0dHJpYnV0ZSgnZGF0YS1k
ai1saXZlLXdpZGdldCcsICd2aWRlby5NaWNyb1BsYXllcicpOwogICAgICAgICAgICAgICAgdmlk
ZW9FbGUuc2V0QXR0cmlidXRlKCdkYXRhLWd1aWQnLCBvdXRlclNwYW4uZ2V0QXR0cmlidXRlKCdn
dWlkJykpOwogICAgICAgICAgICAgICAgdmlkZW9FbGUuc2V0QXR0cmlidXRlKCdkYXRhLXZpZGVv
LWluZm8nLCAnJyk7CiAgICAgICAgICAgICAgICB2aWRlb0VsZS5pbm5lckhUTUwgPSAiPGEgaHJl
Zj0nIycgY2xhc3M9J3ZpZGVvQ2xpY2tUaHJ1Jz48c3BhbiBjbGFzcz0ndmlkZW9IaW50Jz5DbGlj
ayB0byBQbGF5PC9zcGFuPjxpbWcgd2lkdGg9JzI3MicgaGVpZ2h0PScxNTInIHNyYz0nIiArIG91
dGVyU3Bhbi5nZXRBdHRyaWJ1dGUoJ2ltYWdlJykgKyAiJy8+PC9hPiI7CiAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICB2aWRlb0VsZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtZ3VpZCcs
IG91dGVyU3Bhbi5nZXRBdHRyaWJ1dGUoJ2d1aWQnKSk7CiAgICAgICAgICAgICAgICB2aWRlb0lt
Z0VsZS5zZXRBdHRyaWJ1dGUoJ3NyYycsIG91dGVyU3Bhbi5nZXRBdHRyaWJ1dGUoJ2ltYWdlJykp
OwogICAgICAgICAgICAgICAgY29uc29sZS5sb2coImRhdGEtZnVpZCIgKyB2aWRlb0VsZS5nZXRB
dHRyaWJ1dGUoJ2RhdGEtZ3VpZCcpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgdkd1
aWQgPSBvdXRlclNwYW4uZ2V0QXR0cmlidXRlKCdndWlkJyk7CiAgICAgICAgICAgIGlmICh2R3Vp
ZCAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAg
ICAgIHZhciByZXN1bHQgPSBkai51dGlsLlZpZGVvLmdldFZpZGVvRGV0YWlscyh7CiAgICAgICAg
ICAgICAgICAgICAgICAgIGlkOiB2R3VpZCwKICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRz
OiAnZm9ybWF0dGVkTGFzdE1vZGlmaWVkRGF0ZSxkdXJhdGlvbix3c2otc2VjdGlvbix3c2otc3Vi
c2VjdGlvbicKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICBkb2pv
LnF1ZXJ5KCcudmlkZW8gI3ZpZGVvTWV0YVN0cmFwIC52aWRlb0RhdGVTdGFtcCcpWzBdLmlubmVy
SFRNTCA9IHRoYXQuZ2V0VmlkZW9EYXRlKHJlc3VsdFsnZm9ybWF0dGVkTGFzdE1vZGlmaWVkRGF0
ZSddKTsKICAgICAgICAgICAgICAgICAgICBkb2pvLnF1ZXJ5KCcudmlkZW8gI3ZpZGVvTWV0YVN0
cmFwIC52aWRlb0NhdGVnb3J5JylbMF0uaW5uZXJIVE1MID0gdGhhdC5nZXRDYXRlZ29yeShyZXN1
bHQpOwogICAgICAgICAgICAgICAgICAgIGRvam8ucXVlcnkoJy52aWRlbyAjdmlkZW9NZXRhU3Ry
YXAgLnZpZGVvRHVyYXRpb24nKVswXS5pbm5lckhUTUwgPSB0aGF0LmdldER1cmF0aW9uKHJlc3Vs
dFsnZHVyYXRpb24nXSk7CiAgICAgICAgICAgICAgICAgICAgZG9qby5xdWVyeSgnLnZpZGVvICN2
aWRlb0Rlc2MgPiBoMicpWzBdLmlubmVySFRNTCA9IG91dGVyU3Bhbi5nZXRBdHRyaWJ1dGUoJ3Rp
dGxlJyk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICAgICAg
ICAgIGNvbnNvbGUubG9nKGVycm9yKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQog
ICAgICAgICAgICB2YXIgb2JqID0gZG9qby5ieUlkKHN0YW5kQWxvbmVWaWRlb0NsYXNzKTsKICAg
ICAgICAgICAgdGhhdC5maXJlRXZlbnQob2JqLCAnY2xpY2snKTsKICAgICAgICB9KTsKICAgIH0s
CiAgICBnZXREdXJhdGlvbjogZnVuY3Rpb24gKHZEdXJhdGlvbikgewogICAgICAgIHZhciBob3Vy
cyA9IE1hdGguZmxvb3IodkR1cmF0aW9uIC8gKDYwICogNjApKTsKICAgICAgICB2YXIgZGl2aXNv
ck1pbnV0ZXMgPSB2RHVyYXRpb24gJSAoNjAgKiA2MCk7CiAgICAgICAgdmFyIG1pbnV0ZXMgPSBN
YXRoLmZsb29yKGRpdmlzb3JNaW51dGVzIC8gNjApOwogICAgICAgIHZhciBkaXZpc29yU2Vjb25k
cyA9IGRpdmlzb3JNaW51dGVzICUgNjA7CiAgICAgICAgdmFyIHNlY29uZHMgPSBNYXRoLmNlaWwo
ZGl2aXNvclNlY29uZHMpOwogICAgICAgIGlmIChob3VycyA+IDApIHsKICAgICAgICAgICAgdkR1
cmF0aW9uID0gaG91cnMgKyAnOicgKyBtaW51dGVzICsgJzonICsgc2Vjb25kczsKICAgICAgICB9
IGVsc2UgaWYgKG1pbnV0ZXMgPiAwKSB7CiAgICAgICAgICAgIGlmIChzZWNvbmRzIDwgMTApIHsK
ICAgICAgICAgICAgICAgIHZEdXJhdGlvbiA9IG1pbnV0ZXMgKyAnOjAnICsgc2Vjb25kczsKICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHZEdXJhdGlvbiA9IG1pbnV0ZXMgKyAn
OicgKyBzZWNvbmRzOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
dkR1cmF0aW9uID0gc2Vjb25kczsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHZEdXJhdGlvbjsK
ICAgIH0sCiAgICBnZXRWaWRlb0RhdGU6IGZ1bmN0aW9uICh2aWRlb1RpbWVTdGFtcCkgewogICAg
ICAgIGlmICh2aWRlb1RpbWVTdGFtcCAhPT0gbnVsbCAmJiB2aWRlb1RpbWVTdGFtcCAhPT0gJycp
IHsKICAgICAgICAgICAgdmlkZW9UaW1lU3RhbXAgPSB2aWRlb1RpbWVTdGFtcC5zdWJzdHJpbmco
dmlkZW9UaW1lU3RhbXAuaW5kZXhPZignLycpIC0gMiwgdmlkZW9UaW1lU3RhbXAubGFzdEluZGV4
T2YoJy8nKSArIDUpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdmlkZW9UaW1lU3RhbXA7CiAg
ICB9LAogICAgZ2V0Q2F0ZWdvcnk6IGZ1bmN0aW9uIChyZXN1bHQpIHsKICAgICAgICB2YXIgdkNh
dGVnb3J5ID0gcmVzdWx0Wyd3c2otc3Vic2VjdGlvbiddOwogICAgICAgIGlmICh2Q2F0ZWdvcnkg
PT09IG51bGwgfHwgdkNhdGVnb3J5ID09PSAnJykgewogICAgICAgICAgICB2Q2F0ZWdvcnkgPSBy
ZXN1bHRbJ3dzai1zZWN0aW9uJ107CiAgICAgICAgfQogICAgICAgIHJldHVybiB2Q2F0ZWdvcnk7
CiAgICB9Cn07CmRvam8ucHJvdmlkZSgiZGoubW9kdWxlLnZpZGVvLnBsYXlsaXN0UGxheWVyIik7
CmRvam8ucmVxdWlyZSgiZGoud2lkZ2V0LnZpZGVvLmNvbnRyb2xsZXIuUGxheWVyIik7CmRvam8u
cmVxdWlyZSgiZGoud2lkZ2V0LnZpZGVvLnZpZXcuTWFpblBsYXllciIpOwpkb2pvLnJlcXVpcmUo
ImRqLndpZGdldC52aWRlby52aWV3Lkh0bWw1TWljcm9QbGF5ZXIiKTsKZG9qby5yZXF1aXJlKCJk
ai5sYW5nIik7CmRvam8ucmVxdWlyZSgiZGoudXRpbC5FbGVtZW50Iik7CmRvam8ucmVxdWlyZSgi
ZGoudXRpbC5WaWRlbyIpOwpkai5tb2R1bGUudmlkZW8ucGxheWxpc3RQbGF5ZXIgPSB7CiAgICBp
bml0OiBmdW5jdGlvbiAoY29uZikgewogICAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IHsKICAg
ICAgICAgICAgcGxheWVyQ29udGFpbmVySUQ6ICJzdGFuZEFsb25lVmlkZW9QbGF5ZXIiLAogICAg
ICAgICAgICBwbGF5ZXJDb250YWluZXJDbGFzczogInZpZGVvT2JqZWN0Qm94IiwKICAgICAgICAg
ICAgcGxheWVySUQ6ICJzdGFuZEFsb25lVmlkZW9QbGF5ZXIiLAogICAgICAgICAgICBzdGFuZEFs
b25lVmlkZW9DbGFzczogInN0YW5kQWxvbmVWaWRlbyIsCiAgICAgICAgICAgIHRodW1ibmFpbFZp
ZGVvQ2xhc3M6ICJ0aHVtYm5haWwtbGluayIsCiAgICAgICAgICAgIGxpbnVwSWQ6ICJtb2R1bGUi
LAogICAgICAgICAgICBwbGF5ZXJOYW1lOiAiaG9tZXBhZ2UiLAogICAgICAgICAgICBhZEZvcm1h
dDogImZybXQ9MDsiLAogICAgICAgICAgICBhcHBsaWNhdGlvbklEOiA0CiAgICAgICAgfTsKICAg
ICAgICBkb2pvLm1peGluKHRoaXMuY29uZmlndXJhdGlvbiwgY29uZik7CiAgICAgICAgdGhpcy5v
YnNlcnZlciA9IG5ldyBkai51dGlsLk9ic2VydmVyKGRqLm1vZHVsZS52aWRlby5wbGF5bGlzdFBs
YXllcik7CiAgICAgICAgdGhpcy5jcmVhdGVWaWRlb1BsYXllcigpOwogICAgICAgIHRoaXMuZGlz
cGxheURhdGFGb3JUaHVtYm5haWxzKCk7CiAgICAgICAgdGhpcy5zdWJzY3JpYmVUb0V2ZW50cygp
OwogICAgICAgIHRoaXMuYWRkRXZlbnRzKCk7CiAgICB9LAogICAgc3Vic2NyaWJlOiBmdW5jdGlv
biAodmlkZW9FdmVudE5hbWUsIGNhbGxiYWNrLCBjb250ZXh0KSB7CiAgICAgICAgdGhpcy5vYnNl
cnZlci5zdWJzY3JpYmVCeU5hbWUodmlkZW9FdmVudE5hbWUsIGNhbGxiYWNrLCBjb250ZXh0KTsK
ICAgIH0sCiAgICBzdWJzY3JpYmVUb0V2ZW50czogZnVuY3Rpb24gKCkgewogICAgICAgIHRoaXMu
c3Vic2NyaWJlKCJvblZpZGVvTG9hZGVkIiwgdGhpcy52aWRlb0xvYWRlZCwgdGhpcyk7CiAgICB9
LAogICAgdmlkZW9Mb2FkZWQ6IGZ1bmN0aW9uICh2aWRlb0lELCB2aWRlb0luZm8pIHsKICAgICAg
ICBkb2pvLnF1ZXJ5KCcudmlkZW9PYmplY3REYXRhIC52aWRlb0RhdGVTdGFtcCcpWzBdLmlubmVy
SFRNTCA9IHRoaXMuZ2V0VmlkZW9EYXRlKHZpZGVvSW5mb1snZm9ybWF0dGVkTGFzdE1vZGlmaWVk
RGF0ZSddKTsKICAgICAgICBkb2pvLnF1ZXJ5KCcudmlkZW9PYmplY3REYXRhICN2aWRlb01ldGFT
dHJhcCAudmlkZW9DYXRlZ29yeScpWzBdLmlubmVySFRNTCA9IHRoaXMuZ2V0Q2F0ZWdvcnkodmlk
ZW9JbmZvKTsKICAgICAgICBkb2pvLnF1ZXJ5KCcudmlkZW9PYmplY3REYXRhICN2aWRlb01ldGFT
dHJhcCAudmlkZW9EdXJhdGlvbicpWzBdLmlubmVySFRNTCA9IHRoaXMuZ2V0RHVyYXRpb24odmlk
ZW9JbmZvWydkdXJhdGlvbiddKTsKICAgICAgICBkb2pvLnF1ZXJ5KCcjdmlkZW9EZXNjID4gaDIn
KVswXS5pbm5lckhUTUwgPSB2aWRlb0luZm8ubmFtZTsKICAgICAgICBkb2pvLnF1ZXJ5KCIubm93
UGxheWluZyIpLnJlbW92ZUNsYXNzKCJub3dQbGF5aW5nIik7CiAgICAgICAgZG9qby5mb3JFYWNo
KGRvam8ucXVlcnkoIi5qc19ub3dwbGF5aW5nIiksIGZ1bmN0aW9uIChvYmosIGluZGV4KSB7CiAg
ICAgICAgICAgIG9iai5pbm5lckhUTUwgPSAiJm5ic3A7IjsKICAgICAgICB9KTsKICAgICAgICBk
b2pvLmFkZENsYXNzKGRvam8uYnlJZCgidmlkZW9faW1hZ2VfIiArIHZpZGVvSUQpLCAibm93UGxh
eWluZyIpOwogICAgICAgIGRvam8uYnlJZCgidmlkZW9fcGxheWluZ18iICsgdmlkZW9JRCkuaW5u
ZXJIVE1MID0gIm5vdyBwbGF5aW5nIjsKICAgIH0sCiAgICBhZGRFdmVudHM6IGZ1bmN0aW9uICgp
IHsKICAgICAgICB2YXIgdGhhdCA9IHRoaXM7CiAgICAgICAgZGoubGFuZy5hZGRMaXZlRXZlbnQo
Ii5qc19wbGF5dmlkZW8iLCAiY2xpY2siLCBmdW5jdGlvbiAoZXZlbnQpIHsKICAgICAgICAgICAg
ZG9qby5zdG9wRXZlbnQoZXZlbnQpOwogICAgICAgICAgICB2YXIgdGFyZ2V0ID0gKGV2ZW50LnNy
Y0VsZW1lbnQgfHwgZXZlbnQudGFyZ2V0KTsKICAgICAgICAgICAgdmFyIGd1aWQgPSBkai51dGls
LkVsZW1lbnQuZ2V0RGF0YSh0YXJnZXQsICJndWlkIik7CiAgICAgICAgICAgIHRoYXQudmlkZW9Q
bGF5ZXIuaW5pdCh0aGF0LnZpZGVvUGxheWVyVmlldyk7CiAgICAgICAgICAgIHRoYXQudmlkZW9Q
bGF5ZXIucGxheVZpZGVvKGd1aWQsIHRoYXQuY29uZmlndXJhdGlvbi5saW51cElkKTsKICAgICAg
ICB9KTsKICAgIH0sCiAgICBjcmVhdGVWaWRlb1BsYXllcjogZnVuY3Rpb24gKCkgewogICAgICAg
IHRoaXMudmlkZW9QbGF5ZXIgPSBuZXcgZGoud2lkZ2V0LnZpZGVvLmNvbnRyb2xsZXIuUGxheWVy
KHRoaXMub2JzZXJ2ZXIsIHsKICAgICAgICAgICAgcGxheWVyVHlwZTogZGoud2lkZ2V0LnZpZGVv
Lm1vZGVsLlBsYXllclR5cGVzLk1pY3JvUGxheWVyLAogICAgICAgICAgICBjb250YWluZXJJRDog
dGhpcy5jb25maWd1cmF0aW9uLnBsYXllckNvbnRhaW5lcklELAogICAgICAgICAgICBldmVudE5h
bWVzcGFjZTogImRqLm1vZHVsZS52aWRlby5wbGF5bGlzdFBsYXllciIsCiAgICAgICAgICAgIHBs
YXllcklEOiB0aGlzLmNvbmZpZ3VyYXRpb24ucGxheWVySUQsCiAgICAgICAgICAgIGFkRm9ybWF0
OiB0aGlzLmNvbmZpZ3VyYXRpb24uYWRGb3JtYXQsCiAgICAgICAgICAgIGFwcGxpY2F0aW9uSUQ6
IHRoaXMuY29uZmlndXJhdGlvbi5hcHBsaWNhdGlvbklECiAgICAgICAgfSk7CiAgICAgICAgdGhp
cy52aWRlb1BsYXllclZpZXcgPSAoZGoudXRpbC5WaWRlb1V0aWxzLmhhc1ZhbGlkRmxhc2hWZXJz
aW9uKCkpID8gbmV3IGRqLndpZGdldC52aWRlby52aWV3Lk1haW5QbGF5ZXIoewogICAgICAgICAg
ICBuYW1lOiB0aGlzLmNvbmZpZ3VyYXRpb24ucGxheWVyTmFtZQogICAgICAgIH0pIDogbmV3IGRq
LndpZGdldC52aWRlby52aWV3Lkh0bWw1TWljcm9QbGF5ZXIoewogICAgICAgICAgICBuYW1lOiB0
aGlzLmNvbmZpZ3VyYXRpb24ucGxheWVyQ29udGFpbmVyQ2xhc3MKICAgICAgICB9KTsKICAgIH0s
CiAgICBkaXNwbGF5RGF0YUZvclRodW1ibmFpbHM6IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIg
dGhhdCA9IHRoaXM7CiAgICAgICAgdmFyIHN0YW5kQWxvbmVWaWRlb0NsYXNzID0gdGhpcy5jb25m
aWd1cmF0aW9uLnN0YW5kQWxvbmVWaWRlb0NsYXNzOwogICAgICAgIHZhciB0aHVtYm5haWxWaWRl
b0NsYXNzID0gdGhpcy5jb25maWd1cmF0aW9uLnRodW1ibmFpbFZpZGVvQ2xhc3M7CiAgICAgICAg
dmFyIHN0YW5kQWxvbmVBbmNob3IgPSBkb2pvLnF1ZXJ5KCcjJyArIHN0YW5kQWxvbmVWaWRlb0Ns
YXNzKVswXTsKICAgICAgICBpZiAoc3RhbmRBbG9uZUFuY2hvcikgewogICAgICAgICAgICB0cnkg
ewogICAgICAgICAgICAgICAgdmFyIHRpbWVzdGFtcCA9IGRqLnV0aWwuRWxlbWVudC5nZXREYXRh
KHN0YW5kQWxvbmVBbmNob3IsICd0aW1lc3RhbXAnKTsKICAgICAgICAgICAgICAgIHZhciBkdXJh
dGlvbiA9IGRqLnV0aWwuRWxlbWVudC5nZXREYXRhKHN0YW5kQWxvbmVBbmNob3IsICdkdXJhdGlv
bicpOwogICAgICAgICAgICAgICAgZG9qby5xdWVyeSgnLnZpZGVvICN2aWRlb01ldGFTdHJhcCAu
dmlkZW9EYXRlU3RhbXAnKVswXS5pbm5lckhUTUwgPSB0aGF0LmdldFZpZGVvRGF0ZSh0aW1lc3Rh
bXApOwogICAgICAgICAgICAgICAgZG9qby5xdWVyeSgnLnZpZGVvICN2aWRlb01ldGFTdHJhcCAu
dmlkZW9EdXJhdGlvbicpWzBdLmlubmVySFRNTCA9IHRoYXQuZ2V0RHVyYXRpb24oZHVyYXRpb24p
OwogICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9y
KGUpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHZh
ciB0aHVtYm5haWxWaWRlb0FyciA9IGRvam8ucXVlcnkoJy4nICsgdGh1bWJuYWlsVmlkZW9DbGFz
cyk7CiAgICAgICAgICAgIGRvam8uZm9yRWFjaCh0aHVtYm5haWxWaWRlb0FyciwgZnVuY3Rpb24g
KGl0ZW0sIGluZGV4KSB7CiAgICAgICAgICAgICAgICB2YXIgZHVyYXRpb24gPSBkai51dGlsLkVs
ZW1lbnQuZ2V0RGF0YShpdGVtLCAiZHVyYXRpb24iKTsKICAgICAgICAgICAgICAgIGRvam8ucXVl
cnkoJy52aWRlbyAjZGVzYyAudmlkZW9EdXJhdGlvbicpW2luZGV4XS5pbm5lckhUTUwgPSB0aGF0
LmdldER1cmF0aW9uKGR1cmF0aW9uKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfSBjYXRjaCAo
ZSkgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpOwogICAgICAgIH0KICAgIH0sCiAgICBn
ZXREdXJhdGlvbjogZnVuY3Rpb24gKHZEdXJhdGlvbikgewogICAgICAgIHZhciBob3VycyA9IE1h
dGguZmxvb3IodkR1cmF0aW9uIC8gKDYwICogNjApKTsKICAgICAgICB2YXIgZGl2aXNvck1pbnV0
ZXMgPSB2RHVyYXRpb24gJSAoNjAgKiA2MCk7CiAgICAgICAgdmFyIG1pbnV0ZXMgPSBNYXRoLmZs
b29yKGRpdmlzb3JNaW51dGVzIC8gNjApOwogICAgICAgIHZhciBkaXZpc29yU2Vjb25kcyA9IGRp
dmlzb3JNaW51dGVzICUgNjA7CiAgICAgICAgdmFyIHNlY29uZHMgPSBNYXRoLmNlaWwoZGl2aXNv
clNlY29uZHMpOwogICAgICAgIGlmIChob3VycyA+IDApIHsKICAgICAgICAgICAgdkR1cmF0aW9u
ID0gaG91cnMgKyAnOicgKyBtaW51dGVzICsgJzonICsgc2Vjb25kczsKICAgICAgICB9IGVsc2Ug
aWYgKG1pbnV0ZXMgPiAwKSB7CiAgICAgICAgICAgIGlmIChzZWNvbmRzIDwgMTApIHsKICAgICAg
ICAgICAgICAgIHZEdXJhdGlvbiA9IG1pbnV0ZXMgKyAnOjAnICsgc2Vjb25kczsKICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHZEdXJhdGlvbiA9IG1pbnV0ZXMgKyAnOicgKyBz
ZWNvbmRzOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdkR1cmF0
aW9uID0gc2Vjb25kczsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHZEdXJhdGlvbjsKICAgIH0s
CiAgICBnZXRWaWRlb0RhdGU6IGZ1bmN0aW9uICh2aWRlb1RpbWVTdGFtcCkgewogICAgICAgIGlm
ICh2aWRlb1RpbWVTdGFtcCAhPT0gbnVsbCAmJiB2aWRlb1RpbWVTdGFtcCAhPT0gJycpIHsKICAg
ICAgICAgICAgdmlkZW9UaW1lU3RhbXAgPSB2aWRlb1RpbWVTdGFtcC5zdWJzdHJpbmcodmlkZW9U
aW1lU3RhbXAuaW5kZXhPZignLycpIC0gMiwgdmlkZW9UaW1lU3RhbXAubGFzdEluZGV4T2YoJy8n
KSArIDUpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdmlkZW9UaW1lU3RhbXA7CiAgICB9LAog
ICAgZ2V0Q2F0ZWdvcnk6IGZ1bmN0aW9uIChyZXN1bHQpIHsKICAgICAgICB2YXIgdkNhdGVnb3J5
ID0gcmVzdWx0Wyd3c2otc3Vic2VjdGlvbiddOwogICAgICAgIGlmICh2Q2F0ZWdvcnkgPT09IG51
bGwgfHwgdkNhdGVnb3J5ID09PSAnJykgewogICAgICAgICAgICB2Q2F0ZWdvcnkgPSByZXN1bHRb
J3dzai1zZWN0aW9uJ107CiAgICAgICAgfQogICAgICAgIHJldHVybiB2Q2F0ZWdvcnk7CiAgICB9
LAogICAgY3JlYXRlQWR2ZXJ0aXNlbWVudDogZnVuY3Rpb24gKGltYWdlLCB1cmwpIHsKICAgICAg
ICBjb25zb2xlLmxvZygiUmVzcG9uc2UgZnJvbSBjcmVhdGVBZHZlcnRpc2VtZW50IDogJXMsICVz
IiwgaW1hZ2UsIHVybCk7CiAgICB9LAogICAgcGxheVZpZGVvOiBmdW5jdGlvbiAoKSB7CiAgICAg
ICAgY29uc29sZS5sb2coIlBsYXlpbmcuLi4iKTsKICAgIH0sCiAgICBvcGVuTWljcm9Qb3BVcFBs
YXllcjogZnVuY3Rpb24gKCkgewogICAgICAgIGRqLnV0aWwuVmlkZW9VdGlscy5wb3BVcFBsYXll
cih7CiAgICAgICAgICAgIHBsYXlMb2NhdGlvbjogTWF0aC5mbG9vcihzd2ZvYmplY3QuZ2V0T2Jq
ZWN0QnlJZCh0aGlzLnZpZGVvUGxheWVyLmNvbmZpZ3VyYXRpb24ucGxheWVySUQpLmdldFNlZWso
KSksCiAgICAgICAgICAgIGNvbGxlY3Rpb246IHRoaXMudmlkZW9QbGF5ZXIuZ2V0VmlkZW9EYXRh
KCJ3c2otc2VjdGlvbiIpLAogICAgICAgICAgICB2aWRlb0lEOiB0aGlzLnZpZGVvUGxheWVyLnZp
ZGVvSUQsCiAgICAgICAgICAgIGhlaWdodDogdGhpcy52aWRlb1BsYXllci5jb25maWd1cmF0aW9u
LnBsYXllclR5cGUuaGVpZ2h0LAogICAgICAgICAgICB3aWR0aDogdGhpcy52aWRlb1BsYXllci5j
b25maWd1cmF0aW9uLnBsYXllclR5cGUud2lkdGgKICAgICAgICB9KTsKICAgIH0sCiAgICBjb250
aW51ZUxvYWRWaWRlbzogZnVuY3Rpb24gKCkgewogICAgICAgIHRoaXMudmlkZW9QbGF5ZXIucmVh
ZHlGb3JFdmVudHMgPSB0cnVlOwogICAgfQp9Owpkb2pvLnByb3ZpZGUoImRqLndpZGdldC52aWRl
by5NaWNyb1BsYXllciIpOwpkb2pvLnJlcXVpcmUoImRqLndpZGdldC52aWRlby5jb250cm9sbGVy
Lk1pY3JvUGxheWVyIik7CmRvam8ucmVxdWlyZSgiZGoudXRpbC5WaWRlbyIpOwpkb2pvLnJlcXVp
cmUoImRqLnV0aWwuVmlkZW9VdGlscyIpOwpkb2pvLnJlcXVpcmUoImRqLndpZGdldC52aWRlby5t
b2RlbC5QbGF5ZXJFdmVudHMiKTsKZG9qby5yZXF1aXJlKCJkai53aWRnZXQudmlkZW8udmlldy5T
d2ZNaWNyb1BsYXllciIpOwpkb2pvLnJlcXVpcmUoImRqLndpZGdldC52aWRlby52aWV3Lk1wNE1p
Y3JvUGxheWVyIik7CmRvam8ucmVxdWlyZSgiZGoud2lkZ2V0LnZpZGVvLnZpZXcuSHRtbDVNaWNy
b1BsYXllciIpOwpkb2pvLmRlY2xhcmUoImRqLndpZGdldC52aWRlby5NaWNyb1BsYXllciIsIG51
bGwsIHsKICAgIGNvbnN0cnVjdG9yOiBmdW5jdGlvbiAoY29udGFpbmVySWQsIGRhdGFzZXQpIHsK
ICAgICAgICB0aGlzLmNvbnRhaW5lcklkID0gY29udGFpbmVySWQ7CiAgICAgICAgdGhpcy5kYXRh
c2V0ID0gZGF0YXNldDsKICAgIH0sCiAgICBsb2FkVmlkZW86IGZ1bmN0aW9uICgpIHsKICAgICAg
ICB0aGlzLl9jcmVhdGVWaWV3KCk7CiAgICAgICAgdGhpcy5fY3JlYXRlQ29udHJvbGxlcigpOwog
ICAgICAgIHRoaXMuX2Nvbm5lY3RQYWdlQW5kQ29udHJvbGxlckV2ZW50cygpOwogICAgICAgIHRo
aXMuZGF0YXNldC5ndWlkID0gZGoudXRpbC5WaWRlb1V0aWxzLm5vcm1hbGl6ZUd1aWQodGhpcy5k
YXRhc2V0Lmd1aWQpOwogICAgICAgIHZhciBzZWVrVGltZSA9IDA7CiAgICAgICAgdGhpcy5jb250
cm9sbGVyLmluaXQodGhpcy52aWV3LCB0aGlzLmRhdGFzZXQuZ3VpZCwgc2Vla1RpbWUpOwogICAg
fSwKICAgIHJlbG9hZFZpZGVvOiBmdW5jdGlvbiAoZGF0YXNldCkgewogICAgICAgIHRoaXMuZGF0
YXNldCA9IGRhdGFzZXQ7CiAgICAgICAgdGhpcy5kYXRhc2V0Lmd1aWQgPSBkai51dGlsLlZpZGVv
VXRpbHMubm9ybWFsaXplR3VpZCh0aGlzLmRhdGFzZXQuZ3VpZCk7CiAgICAgICAgdmFyIHNlZWtU
aW1lID0gMDsKICAgICAgICB0aGlzLmNvbnRyb2xsZXIuaW5pdCh0aGlzLnZpZXcsIHRoaXMuZGF0
YXNldC5ndWlkLCBzZWVrVGltZSwgdHJ1ZSk7CiAgICB9LAogICAgX2NyZWF0ZVZpZXc6IGZ1bmN0
aW9uICgpIHsKICAgICAgICBpZiAoZGoudXRpbC5WaWRlb1V0aWxzLmhhc1ZhbGlkRmxhc2hWZXJz
aW9uKCkpIHsKICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IGRqLndpZGdldC52aWRlby52aWV3
LlN3Zk1pY3JvUGxheWVyKCk7CiAgICAgICAgfSBlbHNlIGlmIChkai51dGlsLlZpZGVvVXRpbHMu
aXNIMjY0QmFzZWxpbmVWaWRlb1N1cHBvcnRlZCgpKSB7CiAgICAgICAgICAgIHRoaXMudmlldyA9
IG5ldyBkai53aWRnZXQudmlkZW8udmlldy5IdG1sNU1pY3JvUGxheWVyKCk7CiAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IGRqLndpZGdldC52aWRlby52aWV3Lk1w
NE1pY3JvUGxheWVyKCk7CiAgICAgICAgfQogICAgfSwKICAgIF9jcmVhdGVDb250cm9sbGVyOiBm
dW5jdGlvbiAoKSB7CiAgICAgICAgdGhpcy5jb250cm9sbGVyID0gbmV3IGRqLndpZGdldC52aWRl
by5jb250cm9sbGVyLk1pY3JvUGxheWVyKG51bGwsIHsKICAgICAgICAgICAgY29udGFpbmVySUQ6
IHRoaXMuY29udGFpbmVySWQsCiAgICAgICAgICAgIHBsYXllcklEOiB0aGlzLmNvbnRhaW5lcklk
LAogICAgICAgICAgICBwbGF5ZXJUeXBlOiB0aGlzLl9nZXRQbGF5ZXJUeXBlKHRoaXMuZGF0YXNl
dC52aWRlb1NpemUpLAogICAgICAgICAgICBkYXRhc2V0OiB0aGlzLmRhdGFzZXQKICAgICAgICB9
KTsKICAgIH0sCiAgICBfZ2V0UGxheWVyVHlwZTogZnVuY3Rpb24gKHNpemUpIHsKICAgICAgICBp
ZiAoc2l6ZSA9PT0gJ0UnKSB7CiAgICAgICAgICAgIHBsYXllclR5cGUgPSBkai53aWRnZXQudmlk
ZW8ubW9kZWwuUGxheWVyVHlwZXMuTWljcm9QbGF5ZXJFOwogICAgICAgIH0gZWxzZSBpZiAoc2l6
ZSA9PT0gJ0YnKSB7CiAgICAgICAgICAgIHBsYXllclR5cGUgPSBkai53aWRnZXQudmlkZW8ubW9k
ZWwuUGxheWVyVHlwZXMuTWljcm9QbGF5ZXJGOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
IHBsYXllclR5cGUgPSBkai53aWRnZXQudmlkZW8ubW9kZWwuUGxheWVyVHlwZXMuTWljcm9QbGF5
ZXI7CiAgICAgICAgfQogICAgICAgIHJldHVybiBwbGF5ZXJUeXBlOwogICAgfSwKICAgIF9jb25u
ZWN0UGFnZUFuZENvbnRyb2xsZXJFdmVudHM6IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZ3Vp
ZCA9IHRoaXMuZGF0YXNldC5ndWlkLAogICAgICAgICAgICBldmVudHMgPSBkai53aWRnZXQudmlk
ZW8ubW9kZWwuUGxheWVyRXZlbnRzLAogICAgICAgICAgICBWaWRlbyA9IGRqLnV0aWwuVmlkZW87
CiAgICAgICAgdGhpcy5jb250cm9sbGVyLnN1YnNjcmliZUJ5TmFtZShldmVudHMucGxheVZpZGVv
LCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIFZpZGVvLnBsYXlWaWRlbyhndWlkKTsKICAgICAg
ICB9KTsKICAgICAgICB0aGlzLmNvbnRyb2xsZXIuc3Vic2NyaWJlQnlOYW1lKGV2ZW50cy5wYXVz
ZVZpZGVvLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIFZpZGVvLnBhdXNlVmlkZW8oZ3VpZCk7
CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5jb250cm9sbGVyLnN1YnNjcmliZUJ5TmFtZShldmVu
dHMuc3RvcFZpZGVvLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIFZpZGVvLnN0b3BWaWRlbyhn
dWlkKTsKICAgICAgICB9KTsKICAgIH0sCiAgICBkZXN0cnVjdG9yOiBmdW5jdGlvbiAoKSB7CiAg
ICAgICAgdGhpcy52aWV3LmRlc3RydWN0b3IoKTsKICAgIH0KfSk7CmRvam8ucHJvdmlkZSgiZGou
bW9kdWxlLnZpZGVvLmxpdmVNaWNyb1BsYXllciIpOwpkb2pvLnJlcXVpcmUoImRqLnV0aWwubGl2
ZVdpZGdldCIpOwpkb2pvLnJlcXVpcmUoImRqLnV0aWwuRWxlbWVudCIpOwpkb2pvLnJlcXVpcmUo
ImRqLndpZGdldC52aWRlby5NaWNyb1BsYXllciIpOwpkai5tb2R1bGUudmlkZW8ubGl2ZU1pY3Jv
UGxheWVyID0gewogICAgaW5pdDogZnVuY3Rpb24gKCkgewogICAgICAgIGlmICh0aGlzLl9pc0lu
aXQpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB0aGlzLl9pc0luaXQg
PSB0cnVlOwogICAgICAgIHRoaXMuX3NldHVwTGl2ZVdpZGdldCgpOwogICAgfSwKICAgIGRlc3Ry
b3k6IGZ1bmN0aW9uICgpIHsKICAgICAgICBkai51dGlsLmxpdmVXaWRnZXQudW5yZWdpc3Rlcigi
dmlkZW8uTWljcm9QbGF5ZXIiKTsKICAgIH0sCiAgICBfc2V0dXBMaXZlV2lkZ2V0OiBmdW5jdGlv
biAoKSB7CiAgICAgICAgZGoudXRpbC5saXZlV2lkZ2V0LnJlZ2lzdGVyKCJ2aWRlby5NaWNyb1Bs
YXllciIsIGZ1bmN0aW9uIChsaXZlV2lkZ2V0LCBkYXRhc2V0KSB7CiAgICAgICAgICAgIGRvam8u
c3RvcEV2ZW50KGxpdmVXaWRnZXQuZXZlbnQpOwogICAgICAgICAgICB2YXIgaWQgPSBkai51dGls
LkVsZW1lbnQuaWRlbnRpZnkobGl2ZVdpZGdldC5kb21Ob2RlKTsKICAgICAgICAgICAgdGhpcy5f
aW5pdE1pY3JvUGxheWVyKGlkLCBkYXRhc2V0KTsKICAgICAgICB9LCB0aGlzKTsKICAgIH0sCiAg
ICBfaW5pdE1pY3JvUGxheWVyOiBmdW5jdGlvbiAoaWQsIGRhdGFzZXQpIHsKICAgICAgICB2YXIg
cGxheWVyID0gbmV3IGRqLndpZGdldC52aWRlby5NaWNyb1BsYXllcihpZCwgZGF0YXNldCk7CiAg
ICAgICAgcGxheWVyLmxvYWRWaWRlbygpOwogICAgfQp9Owpkb2pvLnByb3ZpZGUoImRqLm1vZHVs
ZS5mYWNlYm9vay5jb25uZWN0Iik7CmRvam8ucmVxdWlyZSgiZGoubGFuZyIpOwpkai5tb2R1bGUu
ZmFjZWJvb2suY29ubmVjdCA9IHsKICAgIGluaXQ6IGZ1bmN0aW9uIChhKSB7CiAgICAgICAgd2lu
ZG93LmZiQXN5bmNJbml0ID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICBGQi5pbml0KHsKICAg
ICAgICAgICAgICAgIGFwcElkOiBkai5jb250ZXh0LmZhY2Vib29rLmFwaUtleSwKICAgICAgICAg
ICAgICAgIHN0YXR1czogdHJ1ZSwKICAgICAgICAgICAgICAgIGNvb2tpZTogdHJ1ZSwKICAgICAg
ICAgICAgICAgIHhmYm1sOiB0cnVlCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB2YXIgYiA9
IGRvam8ucXVlcnlUb09iamVjdCh3aW5kb3cubG9jYXRpb24uc2VhcmNoLnNsaWNlKDEpKTsKICAg
ICAgICAgICAgaWYgKHR5cGVvZiBiLmZicmVzdWx0ICE9ICJ1bmRlZmluZWQiKSBpZiAoYi5mYnJl
c3VsdCA9PSAiYWRkIikgewogICAgICAgICAgICAgICAgZGoubW9kdWxlLmZhY2Vib29rLmNvbm5l
Y3Qub3Blbk1vZGFsTWVzc2FnZSgiL3B1YmxpYy9wYWdlLzBfMF9XR19HbG9iYWxmYWNlYm9va1Nj
cmltMjAxMC5odG1sIik7CiAgICAgICAgICAgICAgICBkai5tb2R1bGUuZmFjZWJvb2suY29ubmVj
dC5maXJlU2NyaW1QaXhlbCgiRkJjb25uZWN0X3RoYW5reW91MSIpCiAgICAgICAgICAgIH0gZWxz
ZSBpZiAoYi5mYnJlc3VsdCA9PSAidXBkYXRlIikgewogICAgICAgICAgICAgICAgZGoubW9kdWxl
LmZhY2Vib29rLmNvbm5lY3Qub3Blbk1vZGFsTWVzc2FnZSgiL3B1YmxpYy9wYWdlLzBfMF9XR19H
bG9iYWxmYWNlYm9va1NjcmltMjAxMF9yZWNvbm5lY3QuaHRtbCIpOwogICAgICAgICAgICAgICAg
ZGoubW9kdWxlLmZhY2Vib29rLmNvbm5lY3QuZmlyZVNjcmltUGl4ZWwoIkZCY29ubmVjdF90aGFu
a3lvdTIiKQogICAgICAgICAgICB9CiAgICAgICAgICAgIHR5cGVvZiBhID09ICJmdW5jdGlvbiIg
JiYgYSgpCiAgICAgICAgfTsKICAgICAgICAoZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIg
YiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpOwogICAgICAgICAgICBiLnNyYyA9
IGRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sICsgIi8vY29ubmVjdC5mYWNlYm9vay5uZXQvZW5f
VVMvYWxsLmpzIjsKICAgICAgICAgICAgYi50eXBlID0gInRleHQvamF2YXNjcmlwdCI7CiAgICAg
ICAgICAgIGIuY2hhcnNldCA9ICJ1dGYtOCI7CiAgICAgICAgICAgIGIuYXN5bmMgPSB0cnVlOwog
ICAgICAgICAgICB2YXIgYyA9IGRvam8uYnlJZCgiZmItcm9vdCIpOwogICAgICAgICAgICBpZiAo
bnVsbCA9PT0gYykgYyA9IGRvam8uY3JlYXRlKCJkaXYiLCB7CiAgICAgICAgICAgICAgICBpZDog
ImZiLXJvb3QiLAogICAgICAgICAgICAgICAgc3R5bGU6IHsKICAgICAgICAgICAgICAgICAgICBk
aXNwbGF5OiAibm9uZSIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwgZG9qby5ib2R5
KCkpOwogICAgICAgICAgICBkb2pvLnBsYWNlKGIsIGMpCiAgICAgICAgfSkoKQogICAgfSwKICAg
IGZpcmVTY3JpbVBpeGVsOiBmdW5jdGlvbiAoYSkgewogICAgICAgIGlmICh0eXBlb2Ygc2V0TWV0
YURhdGEgIT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgdmFyIGIgPSBkai51dGlsLlRyYWNr
aW5nLm9tbml0dXJlLmdldE1ldGFEYXRhKCJwYWdlbmFtZSIpLAogICAgICAgICAgICAgICAgYyA9
IGRqLnV0aWwuVHJhY2tpbmcub21uaXR1cmUuZ2V0TWV0YURhdGEoImN0eXBlIiksCiAgICAgICAg
ICAgICAgICBkID0gZGoudXRpbC5UcmFja2luZy5vbW5pdHVyZS5nZXRNZXRhRGF0YSgic2VjdGlv
biIpLAogICAgICAgICAgICAgICAgZSA9IGRqLnV0aWwuVHJhY2tpbmcub21uaXR1cmUuZ2V0TWV0
YURhdGEoInN1YnNlY3Rpb24iKSwKICAgICAgICAgICAgICAgIGggPSBkai51dGlsLlRyYWNraW5n
Lm9tbml0dXJlLmdldE1ldGFEYXRhKCJjYWNjZXNzIiksCiAgICAgICAgICAgICAgICBnID0gZGou
dXRpbC5UcmFja2luZy5vbW5pdHVyZS5nZXRNZXRhRGF0YSgicXN5bWJvbCIpLAogICAgICAgICAg
ICAgICAgZiA9IGRqLnV0aWwuVHJhY2tpbmcub21uaXR1cmUuZ2V0TWV0YURhdGEoImJhc2VzZWN0
aW9uIik7CiAgICAgICAgICAgIHNldE1ldGFEYXRhKCJwYWdlbmFtZSIsIGEpOwogICAgICAgICAg
ICBzZXRNZXRhRGF0YSgiY3R5cGUiLCAibWFya2V0aW5nIGFuZCBzdXBwb3J0Iik7CiAgICAgICAg
ICAgIHNldE1ldGFEYXRhKCJzZWN0aW9uIiwgIldTSl9DdXN0b21lciBSZXNvdXJjZXMiKTsKICAg
ICAgICAgICAgc2V0TWV0YURhdGEoInN1YnNlY3Rpb24iLCAiV1NKX0N1c3RvbWVyIFJlc291cmNl
cyIpOwogICAgICAgICAgICBzZXRNZXRhRGF0YSgiY2FjY2VzcyIsICJmcmVlIik7CiAgICAgICAg
ICAgIHNldE1ldGFEYXRhKCJiYXNlc2VjdGlvbiIsICJXU0pfRkJjb25uZWN0Iik7CiAgICAgICAg
ICAgIHNldE1ldGFEYXRhKCJxc3ltYm9sIiwgbnVsbCk7CiAgICAgICAgICAgIGRqLnV0aWwuVHJh
Y2tpbmcub21uaXR1cmUuZmlyZVBpeGVsKCk7CiAgICAgICAgICAgIHNldE1ldGFEYXRhKCJwYWdl
bmFtZSIsIGIpOwogICAgICAgICAgICBzZXRNZXRhRGF0YSgiY3R5cGUiLCBjKTsKICAgICAgICAg
ICAgc2V0TWV0YURhdGEoInNlY3Rpb24iLCBkKTsKICAgICAgICAgICAgc2V0TWV0YURhdGEoInN1
YnNlY3Rpb24iLCBlKTsKICAgICAgICAgICAgc2V0TWV0YURhdGEoImNhY2Nlc3MiLCBoKTsKICAg
ICAgICAgICAgc2V0TWV0YURhdGEoImJhc2VzZWN0aW9uIiwgZik7CiAgICAgICAgICAgIHNldE1l
dGFEYXRhKCJxc3ltYm9sIiwgZykKICAgICAgICB9CiAgICB9LAogICAgbG9naW46IGZ1bmN0aW9u
IChhKSB7CiAgICAgICAgdHlwZW9mIEZCID09ICJ1bmRlZmluZWQiID8gdGhpcy5pbml0KGRqLm1v
ZHVsZS5mYWNlYm9vay5jb25uZWN0LnByb2Nlc3NMb2dpbikgOiB0aGlzLnByb2Nlc3NMb2dpbihh
KQogICAgfSwKICAgIHByb2Nlc3NMb2dpbjogZnVuY3Rpb24gKGEsIGIpIHsKICAgICAgICBpZiAo
YSkgdGhpcy5hZnRlckxvZ2luVVJMID0gYTsKICAgICAgICB0eXBlb2YgYiAhPSAidW5kZWZpbmVk
IiA/IEZCLmxvZ2luKGIsIHsKICAgICAgICAgICAgcGVybXM6ICJwdWJsaXNoX3N0cmVhbSxlbWFp
bCxvZmZsaW5lX2FjY2Vzcyx1c2VyX2JpcnRoZGF5LHVzZXJfd29ya19oaXN0b3J5LHVzZXJfZWR1
Y2F0aW9uX2hpc3RvcnksdXNlcl93ZWJzaXRlLHVzZXJfYWJvdXRfbWUiCiAgICAgICAgfSkgOiBG
Qi5sb2dpbihkai5tb2R1bGUuZmFjZWJvb2suY29ubmVjdC5hZnRlckxvZ2luLCB7CiAgICAgICAg
ICAgIHBlcm1zOiAicHVibGlzaF9zdHJlYW0sZW1haWwsb2ZmbGluZV9hY2Nlc3MsdXNlcl9iaXJ0
aGRheSx1c2VyX3dvcmtfaGlzdG9yeSx1c2VyX2VkdWNhdGlvbl9oaXN0b3J5LHVzZXJfd2Vic2l0
ZSx1c2VyX2Fib3V0X21lIgogICAgICAgIH0pCiAgICB9LAogICAgYWZ0ZXJMb2dpbjogZnVuY3Rp
b24gKGEpIHsKICAgICAgICBpZiAoYS5zZXNzaW9uKSBsb2NhdGlvbi5ocmVmID0gZGoubW9kdWxl
LmZhY2Vib29rLmNvbm5lY3QuYWZ0ZXJMb2dpblVSTCA/IGRqLmNvbnRleHQuZmFjZWJvb2suY29t
bWVyY2VMb2dpblVSTCArICI/dXJsPSIgKyBlbmNvZGVVUklDb21wb25lbnQoZGoubW9kdWxlLmZh
Y2Vib29rLmNvbm5lY3QuYWZ0ZXJMb2dpblVSTCkgOiBkai5jb250ZXh0LmZhY2Vib29rLmNvbW1l
cmNlTG9naW5VUkwgKyAiP3VybD0iICsgZW5jb2RlVVJJQ29tcG9uZW50KGxvY2F0aW9uLmhyZWYp
CiAgICB9LAogICAgYWRkQ29ubmVjdENsaWNrOiBmdW5jdGlvbiAoYSwgYikgewogICAgICAgIHZh
ciBjID0gdGhpczsKICAgICAgICBkai5sYW5nLmFkZExpdmVFdmVudChhLCAiY2xpY2siLCBmdW5j
dGlvbiAoZCkgewogICAgICAgICAgICBkb2pvLnN0b3BFdmVudChkKTsKICAgICAgICAgICAgYy5s
b2dpbihiKQogICAgICAgIH0pCiAgICB9LAogICAgZGlzcGxheU1lc3NhZ2U6IGZ1bmN0aW9uIChh
KSB7CiAgICAgICAgYS51cmwgPSAiIjsKICAgICAgICBhLm1lc3NhZ2UgPSAiIjsKICAgICAgICB0
eXBlb2YgYS5jYWxsYmFjayA9PSAiZnVuY3Rpb24iICYmIGEuY2FsbGJhY2soKQogICAgfSwKICAg
IGxvZ291dDogZnVuY3Rpb24gKGEpIHsKICAgICAgICBGQi5sb2dvdXQoYSkKICAgIH0sCiAgICBn
ZXRVc2VySUQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4gRkIuZ2V0U2Vzc2lvbigpID8g
RkIuZ2V0U2Vzc2lvbigpLnVpZCA6IG51bGwKICAgIH0sCiAgICBwdWJsaXNoOiBmdW5jdGlvbiAo
YSwgYikgewogICAgICAgIGlmICh0eXBlb2YgRkIgIT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAg
ICAgaWYgKEZCLmdldFNlc3Npb24oKSkgewogICAgICAgICAgICAgICAgbXlPYmogPSBhOwogICAg
ICAgICAgICAgICAgbXlPYmoubWV0aG9kID0gInN0cmVhbS5wdWJsaXNoIjsKICAgICAgICAgICAg
ICAgIG15T2JqLnByZXZpZXcgPSAxOwogICAgICAgICAgICAgICAgbXlPYmouZGlzcGxheSA9ICJw
b3B1cCI7CiAgICAgICAgICAgICAgICBGQi51aShteU9iaiwgYikKICAgICAgICAgICAgfQogICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlVzZXIgaXMgbm90IGxvZ2dl
ZCBpbiBvciBGQiBpbiB1bmRlZmluZWQiKTsKICAgICAgICAgICAgYihmYWxzZSkKICAgICAgICB9
CiAgICB9LAogICAgc2hvd01vZGFsU2NyaW06IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgYSA9
IGRvam8uYnlJZCgiZmJzY3JpbSIpLAogICAgICAgICAgICBiID0gZG9qby5ieUlkKCJmYnNjcmlt
X2NvbnRlbnQiKTsKICAgICAgICBhLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwogICAgICAgIGIu
c3R5bGUuZGlzcGxheSA9ICJibG9jayI7CiAgICAgICAgZG9qby5xdWVyeSgiZGl2I2Zic2NyaW1f
Y29udGVudCBhLmNsb3NlYnRuIikuY29ubmVjdCgib25jbGljayIsIGRqLm1vZHVsZS5mYWNlYm9v
ay5jb25uZWN0LmhpZGVNb2RhbFNjcmltKQogICAgfSwKICAgIGhpZGVNb2RhbFNjcmltOiBmdW5j
dGlvbiAoKSB7CiAgICAgICAgdmFyIGEgPSBkb2pvLmJ5SWQoImZic2NyaW0iKSwKICAgICAgICAg
ICAgYiA9IGRvam8uYnlJZCgiZmJzY3JpbV9jb250ZW50Iik7CiAgICAgICAgYS5zdHlsZS5kaXNw
bGF5ID0gIm5vbmUiOwogICAgICAgIGIuc3R5bGUuZGlzcGxheSA9ICJub25lIgogICAgfSwKICAg
IG9wZW5Nb2RhbE1lc3NhZ2U6IGZ1bmN0aW9uIChhKSB7CiAgICAgICAgZG9qby54aHJHZXQoewog
ICAgICAgICAgICB1cmw6IGEsCiAgICAgICAgICAgIGhhbmRsZUFzOiAidGV4dCIsCiAgICAgICAg
ICAgIHByZXZlbnRDYWNoZTogZmFsc2UsCiAgICAgICAgICAgIGxvYWQ6IGZ1bmN0aW9uIChiKSB7
CiAgICAgICAgICAgICAgICB2YXIgYzsKICAgICAgICAgICAgICAgIGRvam8uYnlJZCgiZmJzY3Jp
bV9jb250ZW50IikuaW5uZXJIVE1MID0gYjsKICAgICAgICAgICAgICAgIGMgPSBkamNzLlVzZXJJ
bmZvLmdldEZpcnN0TmFtZSgpICsgIiAiICsgZGpjcy5Vc2VySW5mby5nZXRMYXN0TmFtZSgpOwog
ICAgICAgICAgICAgICAgZG9qby5xdWVyeSgiZGl2I2Zic2NyaW1fY29udGVudCAuZnVsbHBhZ2VT
Y3JpbU1lc3NhZ2UgLnVzZXJOYW1lIikuZm9yRWFjaChmdW5jdGlvbiAoZCkgewogICAgICAgICAg
ICAgICAgICAgIGQuaW5uZXJIVE1MID0gYwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAg
ICAgICBGQi5YRkJNTC5wYXJzZShkb2pvLmJ5SWQoImZic2NyaW1fY29udGVudCIpLCBkai5tb2R1
bGUuZmFjZWJvb2suY29ubmVjdC5zaG93TW9kYWxTY3JpbSkKICAgICAgICAgICAgfSwKICAgICAg
ICAgICAgZXJyb3I6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3Io
IkNvdWxkIG5vdCBsb2FkIHNjcmltIiArIHJlc3BvbnNlKQogICAgICAgICAgICB9CiAgICAgICAg
fSkKICAgIH0KfTsKZG9qby5wcm92aWRlKCJkai5tb2R1bGUuZmFjZWJvb2suYXBpIik7CmRvam8u
cmVxdWlyZSgiZGoubW9kdWxlLmZhY2Vib29rLmNvbm5lY3QiKTsKZGoubW9kdWxlLmZhY2Vib29r
LmFwaSA9IHsKICAgIG1vZFZhbHVlOiAiZmJjb25uZWN0X3dzaiIsCiAgICBudW1PZldvcmRzOiA0
MCwKICAgIHRydW5jYXRlV29yZHM6IGZ1bmN0aW9uIChhLCBiKSB7CiAgICAgICAgdmFyIGMgPSAi
IiwKICAgICAgICAgICAgZCA9IGEuc3BsaXQoIiAiKTsKICAgICAgICBpZiAoZC5sZW5ndGggPiBi
KSB7CiAgICAgICAgICAgIGMgPSAiLi4uIjsKICAgICAgICAgICAgZCA9IGQuc2xpY2UoMCwgYikK
ICAgICAgICB9CiAgICAgICAgcmV0dXJuIGQuam9pbigiICIpICsgYwogICAgfSwKICAgIGFkZHRy
YWNraW5nOiBmdW5jdGlvbiAoYSwgYikgewogICAgICAgIHBhcnNlVXJpID0gZnVuY3Rpb24gKGcp
IHsKICAgICAgICAgICAgdmFyIGYgPSBwYXJzZVVyaS5vcHRpb25zOwogICAgICAgICAgICBnID0g
Zi5wYXJzZXJbZi5zdHJpY3RNb2RlID8gInN0cmljdCIgOiAibG9vc2UiXS5leGVjKGcpOwogICAg
ICAgICAgICBmb3IgKHZhciBuID0ge30sIG0gPSAxNDsgbS0tOykgbltmLmtleVttXV0gPSBnW21d
IHx8ICIiOwogICAgICAgICAgICBuW2YucS5uYW1lXSA9IHt9OwogICAgICAgICAgICBuW2Yua2V5
WzEyXV0ucmVwbGFjZShmLnEucGFyc2VyLCBmdW5jdGlvbiAoaywgaSwgaikgewogICAgICAgICAg
ICAgICAgaWYgKGkpIG5bZi5xLm5hbWVdW2ldID0gagogICAgICAgICAgICB9KTsKICAgICAgICAg
ICAgcmV0dXJuIG4KICAgICAgICB9OwogICAgICAgIHBhcnNlVXJpLm9wdGlvbnMgPSB7CiAgICAg
ICAgICAgIHN0cmljdE1vZGU6IGZhbHNlLAogICAgICAgICAgICBrZXk6IFsic291cmNlIiwgInBy
b3RvY29sIiwgImF1dGhvcml0eSIsICJ1c2VySW5mbyIsICJ1c2VyIiwgInBhc3N3b3JkIiwgImhv
c3QiLCAicG9ydCIsICJyZWxhdGl2ZSIsICJwYXRoIiwgImRpcmVjdG9yeSIsICJmaWxlIiwgInF1
ZXJ5IiwgImFuY2hvciJdLAogICAgICAgICAgICBxOiB7CiAgICAgICAgICAgICAgICBuYW1lOiAi
cXVlcnlLZXkiLAogICAgICAgICAgICAgICAgcGFyc2VyOiAvKD86XnwmKShbXiY9XSopPT8oW14m
XSopL2cKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcGFyc2VyOiB7CiAgICAgICAgICAgICAg
ICBzdHJpY3Q6IC9eKD86KFteOlwvPyNdKyk6KT8oPzpcL1wvKCg/OigoW146QF0qKSg/OjooW146
QF0qKSk/KT9AKT8oW146XC8/I10qKSg/OjooXGQqKSk/KSk/KCgoKD86W14/I1wvXSpcLykqKShb
Xj8jXSopKSg/Olw/KFteI10qKSk/KD86IyguKikpPykvLAogICAgICAgICAgICAgICAgbG9vc2U6
IC9eKD86KD8hW146QF0rOlteOkBcL10qQCkoW146XC8/Iy5dKyk6KT8oPzpcL1wvKT8oKD86KChb
XjpAXSopKD86OihbXjpAXSopKT8pP0ApPyhbXjpcLz8jXSopKD86OihcZCopKT8pKCgoXC8oPzpb
Xj8jXSg/IVtePyNcL10qXC5bXj8jXC8uXSsoPzpbPyNdfCQpKSkqXC8/KT8oW14/I1wvXSopKSg/
Olw/KFteI10qKSk/KD86IyguKikpPykvCiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAg
IHZhciBjID0gcGFyc2VVcmkoYSksCiAgICAgICAgICAgIGQgPSBjLnByb3RvY29sICsgIjovLyIg
KyBjLmhvc3QgKyBjLnBhdGggKyAiPyIsCiAgICAgICAgICAgIGUgPSBiID8gYiA6IHRoaXMubW9k
VmFsdWUsCiAgICAgICAgICAgIGg7CiAgICAgICAgZm9yIChoIGluIGMucXVlcnlLZXkpIGlmIChT
dHJpbmcoaCkudG9VcHBlckNhc2UoKSAhPSAiTU9EIikgZCArPSBoICsgIj0iICsgYy5xdWVyeUtl
eVtoXSArICImIjsKICAgICAgICBkICs9ICJtb2Q9IiArIGU7CiAgICAgICAgZCArPSBjLmFuY2hv
ciA/ICIjIiArIGMuYW5jaG9yIDogIiI7CiAgICAgICAgcmV0dXJuIGQKICAgIH0sCiAgICBwb3N0
QW5zd2VyOiBmdW5jdGlvbiAoYSkgewogICAgICAgIGlmICghKGEucXVlc3Rpb24gJiYgYS5hbnN3
ZXIgJiYgYS5xdWVzdGlvblBlcm1hbGluaykpIHJldHVybiBmYWxzZTsKICAgICAgICB2YXIgYiA9
IHRoaXMudHJ1bmNhdGVXb3JkcyhhLmFuc3dlciwgdGhpcy5udW1PZldvcmRzKSwKICAgICAgICAg
ICAgYyA9IHsKICAgICAgICAgICAgICAgIG5hbWU6IGEucXVlc3Rpb24sCiAgICAgICAgICAgICAg
ICBocmVmOiB0aGlzLmFkZHRyYWNraW5nKGEucXVlc3Rpb25QZXJtYWxpbmspLAogICAgICAgICAg
ICAgICAgY2FwdGlvbjogIldTSi5jb20iCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGQgPSBb
ewogICAgICAgICAgICAgICAgdGV4dDogIkFuc3dlciIsCiAgICAgICAgICAgICAgICBocmVmOiB0
aGlzLmFkZHRyYWNraW5nKGEucXVlc3Rpb25QZXJtYWxpbmspCiAgICAgICAgICAgIH1dOwogICAg
ICAgIHRoaXMuc2VuZFN0cmVhbShiLCBjLCBkLCBhLmNhbGxiYWNrRm4sIGEuY2FsbGJhY2tQYXJh
bXMpCiAgICB9LAogICAgcG9zdEFydGljbGVDb21tZW50OiBmdW5jdGlvbiAoYSkgewogICAgICAg
IGlmICghKGEuY29tbWVudCAmJiBhLmNvbW1lbnRQZXJtYWxpbmspKSByZXR1cm4gZmFsc2U7CiAg
ICAgICAgSlNPTi5zdHJpbmdpZnkgPSBmdW5jdGlvbiAoZykgewogICAgICAgICAgICByZXR1cm4g
ZG9qby50b0pzb24oZykKICAgICAgICB9OwogICAgICAgIHZhciBiID0gdHlwZW9mIEFUX1ZBUlMg
IT0gInVuZGVmaW5lZCIgPyBBVF9WQVJTLmFydGljbGVVcmwgOiBhLmNvbW1lbnRQZXJtYWxpbmss
CiAgICAgICAgICAgIGMgPSB0eXBlb2YgQVRfVkFSUyAhPSAidW5kZWZpbmVkIiA/IEFUX1ZBUlMu
c2VvSGVhZGxpbmUgOiAiIjsKICAgICAgICBpZiAodHlwZW9mIGMgPT0gInVuZGVmaW5lZCIpIGMg
PSBBVF9WQVJTLmFydGljbGVIZWFkbGluZTsKICAgICAgICB2YXIgZCA9IHR5cGVvZiBBVF9WQVJT
ICE9ICJ1bmRlZmluZWQiID8gQVRfVkFSUy5pbWdTaXplQSA6ICJodHRwOi8vcy53c2oubmV0L2lt
Zy9XU0pfcHJvZmlsZV9sZy5naWYiLAogICAgICAgICAgICBlID0gdHlwZW9mIEFUX1ZBUlMgIT0g
InVuZGVmaW5lZCIgJiYgdHlwZW9mIEFUX1ZBUlMuYm9keVRleHQgIT0gInVuZGVmaW5lZCIgPyBB
VF9WQVJTLmJvZHlUZXh0LnJlcGxhY2UoL1wrL2csICIgIikgOiAiIiwKICAgICAgICAgICAgaCA9
IHRoaXMudHJ1bmNhdGVXb3JkcyhhLmNvbW1lbnQsIHRoaXMubnVtT2ZXb3Jkcyk7CiAgICAgICAg
YyA9IHsKICAgICAgICAgICAgbmFtZTogYywKICAgICAgICAgICAgaHJlZjogdGhpcy5hZGR0cmFj
a2luZyhiKSwKICAgICAgICAgICAgZGVzY3JpcHRpb246IHVuZXNjYXBlKGUpLAogICAgICAgICAg
ICBjYXB0aW9uOiAiV1NKLmNvbSIKICAgICAgICB9OwogICAgICAgIGlmIChkICE9IG51bGwpIGMu
bWVkaWEgPSBbewogICAgICAgICAgICB0eXBlOiAiaW1hZ2UiLAogICAgICAgICAgICBzcmM6IGQs
CiAgICAgICAgICAgIGhyZWY6IHRoaXMuYWRkdHJhY2tpbmcoYikKICAgICAgICB9XTsKICAgICAg
ICBiID0gW3sKICAgICAgICAgICAgdGV4dDogIlJlYWQgdGhlIEFydGljbGUiLAogICAgICAgICAg
ICBocmVmOiB0aGlzLmFkZHRyYWNraW5nKGEuY29tbWVudFBlcm1hbGluaykKICAgICAgICB9XTsK
ICAgICAgICB0aGlzLnNlbmRTdHJlYW0oaCwgYywgYiwgYS5jYWxsYmFja0ZuLCBhLmNhbGxiYWNr
UGFyYW1zKQogICAgfSwKICAgIHBvc3RDcmVhdGVHcm91cDogZnVuY3Rpb24gKGEpIHsKICAgICAg
ICBpZiAoIShhLmdyb3VwTmFtZSAmJiBhLmdyb3VwRGVzY3JpcHRpb24gJiYgYS5ncm91cFBlcm1h
bGluaykpIHJldHVybiBmYWxzZTsKICAgICAgICB2YXIgYiA9IHsKICAgICAgICAgICAgbmFtZTog
YS5ncm91cE5hbWUsCiAgICAgICAgICAgIGhyZWY6IHRoaXMuYWRkdHJhY2tpbmcoYS5ncm91cFBl
cm1hbGluayksCiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBhLmdyb3VwRGVzY3JpcHRpb24sCiAg
ICAgICAgICAgIGNhcHRpb246ICJXU0ouY29tIgogICAgICAgIH0sCiAgICAgICAgICAgIGMgPSBb
ewogICAgICAgICAgICAgICAgdGV4dDogIkpvaW4gdGhpcyBKb3VybmFsIEdyb3VwIiwKICAgICAg
ICAgICAgICAgIGhyZWY6IHRoaXMuYWRkdHJhY2tpbmcoYS5ncm91cFBlcm1hbGluaykKICAgICAg
ICAgICAgfV07CiAgICAgICAgdGhpcy5zZW5kU3RyZWFtKCIiLCBiLCBjLCBhLmNhbGxiYWNrRm4s
IGEuY2FsbGJhY2tQYXJhbXMpCiAgICB9LAogICAgcG9zdEpvaW5Hcm91cDogZnVuY3Rpb24gKGEp
IHsKICAgICAgICBpZiAoIShhLmdyb3VwTmFtZSAmJiBhLmdyb3VwRGVzY3JpcHRpb24gJiYgYS5n
cm91cFBlcm1hbGluaykpIHJldHVybiBmYWxzZTsKICAgICAgICB2YXIgYiA9IHsKICAgICAgICAg
ICAgbmFtZTogYS5ncm91cE5hbWUsCiAgICAgICAgICAgIGhyZWY6IHRoaXMuYWRkdHJhY2tpbmco
YS5ncm91cFBlcm1hbGluayksCiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBhLmdyb3VwRGVzY3Jp
cHRpb24sCiAgICAgICAgICAgIGNhcHRpb246ICJXU0ouY29tIgogICAgICAgIH0sCiAgICAgICAg
ICAgIGMgPSBbewogICAgICAgICAgICAgICAgdGV4dDogIkpvaW4gdGhpcyBKb3VybmFsIEdyb3Vw
IiwKICAgICAgICAgICAgICAgIGhyZWY6IHRoaXMuYWRkdHJhY2tpbmcoYS5ncm91cFBlcm1hbGlu
aykKICAgICAgICAgICAgfV07CiAgICAgICAgdGhpcy5zZW5kU3RyZWFtKCIiLCBiLCBjLCBhLmNh
bGxiYWNrRm4sIGEuY2FsbGJhY2tQYXJhbXMpCiAgICB9LAogICAgcG9zdFBvbGxWb3RlOiBmdW5j
dGlvbiAoYSkgewogICAgICAgIGlmICghYSkgcmV0dXJuIG51bGw7CiAgICAgICAgcGFyYW1zID0g
ZG9qby5mcm9tSnNvbihhKTsKICAgICAgICBhID0gIiI7CiAgICAgICAgSlNPTi5zdHJpbmdpZnkg
PSBmdW5jdGlvbiAoYykgewogICAgICAgICAgICByZXR1cm4gZG9qby50b0pzb24oYykKICAgICAg
ICB9OwogICAgICAgIGZvciAodmFyIGIgPSAwOyBiIDwgcGFyYW1zLm9wdGlvbnMubGVuZ3RoOyBi
KyspIGEgKz0gYiArIDEgKyAiKSAiICsgcGFyYW1zLm9wdGlvbnNbYl0udmFsdWUgKyAiICI7CiAg
ICAgICAgYSA9IHsKICAgICAgICAgICAgbmFtZTogcGFyYW1zLnF1ZXN0aW9uLAogICAgICAgICAg
ICBocmVmOiB0aGlzLmFkZHRyYWNraW5nKHdpbmRvdy5sb2NhdGlvbiksCiAgICAgICAgICAgIGRl
c2NyaXB0aW9uOiBhLAogICAgICAgICAgICBtZWRpYTogW3sKICAgICAgICAgICAgICAgIHR5cGU6
ICJpbWFnZSIsCiAgICAgICAgICAgICAgICBzcmM6ICJodHRwOi8vcy53c2oubmV0L2ltZy9XU0pf
cHJvZmlsZV9sZy5naWYiLAogICAgICAgICAgICAgICAgaHJlZjogdGhpcy5hZGR0cmFja2luZyh3
aW5kb3cubG9jYXRpb24pCiAgICAgICAgICAgIH1dCiAgICAgICAgfTsKICAgICAgICBiID0gW3sK
ICAgICAgICAgICAgdGV4dDogIlJlbGF0ZWQgQXJ0aWNsZSIsCiAgICAgICAgICAgIGhyZWY6IHRo
aXMuYWRkdHJhY2tpbmcocGFyYW1zLnBvbGxfbWV0YS51cmxTcmMpCiAgICAgICAgfV07CiAgICAg
ICAgaWYgKHBhcmFtcy5wb2xsX21ldGEuY29tbXVuaXR5VVJMU3JjICE9ICIiKSBiID0gW3sKICAg
ICAgICAgICAgdGV4dDogIkpvdXJuYWwgQ29tbXVuaXR5IEdyb3VwIiwKICAgICAgICAgICAgaHJl
ZjogdGhpcy5hZGR0cmFja2luZyhwYXJhbXMucG9sbF9tZXRhLmNvbW11bml0eVVSTFNyYykKICAg
ICAgICB9XTsKICAgICAgICB0aGlzLnNlbmRTdHJlYW0oInZvdGVkIG9uIGEgV2FsbCBTdHJlZXQg
Sm91cm5hbCBwb2xsIiwgYSwgYiwgZnVuY3Rpb24gKCkge30sIG51bGwpCiAgICB9LAogICAgcG9z
dFF1ZXN0aW9uOiBmdW5jdGlvbiAoYSkgewogICAgICAgIGlmICghKGEucXVlc3Rpb24gJiYgYS5j
YXRlZ29yeSAmJiBhLnF1ZXN0aW9uUGVybWFsaW5rKSkgcmV0dXJuIGZhbHNlOwogICAgICAgIHZh
ciBiID0gdGhpcy50cnVuY2F0ZVdvcmRzKGEucXVlc3Rpb24sIHRoaXMubnVtT2ZXb3JkcyksCiAg
ICAgICAgICAgIGMgPSB7CiAgICAgICAgICAgICAgICBuYW1lOiBhLmNhdGVnb3J5LAogICAgICAg
ICAgICAgICAgaHJlZjogdGhpcy5hZGR0cmFja2luZyhhLnF1ZXN0aW9uUGVybWFsaW5rKSwKICAg
ICAgICAgICAgICAgIGNhcHRpb246ICJXU0ouY29tIgogICAgICAgICAgICB9LAogICAgICAgICAg
ICBkID0gW3sKICAgICAgICAgICAgICAgIHRleHQ6ICJBbnN3ZXIiLAogICAgICAgICAgICAgICAg
aHJlZjogdGhpcy5hZGR0cmFja2luZyhhLnF1ZXN0aW9uUGVybWFsaW5rKQogICAgICAgICAgICB9
XTsKICAgICAgICB0aGlzLnNlbmRTdHJlYW0oYiwgYywgZCwgYS5jYWxsYmFja0ZuLCBhLmNhbGxi
YWNrUGFyYW1zKQogICAgfSwKICAgIHBvc3RUb3BpYzogZnVuY3Rpb24gKGEpIHsKICAgICAgICBp
ZiAoIShhLnRvcGljICYmIGEudG9waWNQZXJtYWxpbmsgJiYgYS5kZXNjcmlwdGlvbikpIHJldHVy
biBmYWxzZTsKICAgICAgICB2YXIgYiA9IHRoaXMudHJ1bmNhdGVXb3JkcyhhLnRvcGljLCB0aGlz
Lm51bU9mV29yZHMpLAogICAgICAgICAgICBjID0gewogICAgICAgICAgICAgICAgbmFtZTogYS50
b3BpYywKICAgICAgICAgICAgICAgIGhyZWY6IHRoaXMuYWRkdHJhY2tpbmcoYS50b3BpY1Blcm1h
bGluayksCiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogYS5kZXNjcmlwdGlvbiwKICAgICAg
ICAgICAgICAgIGNhcHRpb246ICJXU0ouY29tIgogICAgICAgICAgICB9LAogICAgICAgICAgICBk
ID0gW3sKICAgICAgICAgICAgICAgIHRleHQ6ICJKb2luIHRoZSBkaXNjdXNzaW9uIiwKICAgICAg
ICAgICAgICAgIGhyZWY6IHRoaXMuYWRkdHJhY2tpbmcoYS50b3BpY1Blcm1hbGluaykKICAgICAg
ICAgICAgfV07CiAgICAgICAgdGhpcy5zZW5kU3RyZWFtKGIsIGMsIGQsIGEuY2FsbGJhY2tGbiwg
YS5jYWxsYmFja1BhcmFtcykKICAgIH0sCiAgICBwb3N0VG9waWNDb21tZW50OiBmdW5jdGlvbiAo
YSkgewogICAgICAgIGlmICghKGEuY29tbWVudCAmJiBhLmNvbW1lbnRQZXJtYWxpbmsgJiYgYS50
b3BpY05hbWUgJiYgYS50b3BpY0Rlc2NyaXB0aW9uICYmIGEudG9waWNQZXJtYWxpbmspKSByZXR1
cm4gZmFsc2U7CiAgICAgICAgdmFyIGIgPSB0aGlzLnRydW5jYXRlV29yZHMoYS5jb21tZW50LCB0
aGlzLm51bU9mV29yZHMpLAogICAgICAgICAgICBjID0gewogICAgICAgICAgICAgICAgbmFtZTog
YS50b3BpY05hbWUsCiAgICAgICAgICAgICAgICBocmVmOiB0aGlzLmFkZHRyYWNraW5nKGEudG9w
aWNQZXJtYWxpbmspLAogICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGEudG9waWNEZXNjcmlw
dGlvbiwKICAgICAgICAgICAgICAgIGNhcHRpb246ICJXU0ouY29tIgogICAgICAgICAgICB9LAog
ICAgICAgICAgICBkID0gW3sKICAgICAgICAgICAgICAgIHRleHQ6ICJKb2luIHRoaXMgZGlzY3Vz
c2lvbiIsCiAgICAgICAgICAgICAgICBocmVmOiB0aGlzLmFkZHRyYWNraW5nKGEuY29tbWVudFBl
cm1hbGluaykKICAgICAgICAgICAgfV07CiAgICAgICAgdGhpcy5zZW5kU3RyZWFtKGIsIGMsIGQs
IGEuY2FsbGJhY2tGbiwgYS5jYWxsYmFja1BhcmFtcykKICAgIH0sCiAgICBzZW5kU3RyZWFtOiBm
dW5jdGlvbiAoYSwgYiwgYywgZCwgZSkgewogICAgICAgIHZhciBoID0gLTE7CiAgICAgICAgRkIu
Z2V0TG9naW5TdGF0dXMoZnVuY3Rpb24gKGcpIHsKICAgICAgICAgICAgZy5zZXNzaW9uID8gZGou
bW9kdWxlLmZhY2Vib29rLmNvbm5lY3QucHVibGlzaCh7CiAgICAgICAgICAgICAgICBtZXNzYWdl
OiBhLAogICAgICAgICAgICAgICAgYXR0YWNobWVudDogYiwKICAgICAgICAgICAgICAgIGFjdGlv
bl9saW5rczogYwogICAgICAgICAgICB9LCBmdW5jdGlvbiAoZikgewogICAgICAgICAgICAgICAg
aWYgKGYpIHsKICAgICAgICAgICAgICAgICAgICBoID0gZi5wb3N0X2lkOwogICAgICAgICAgICAg
ICAgICAgIGRqLm1vZHVsZS5mYWNlYm9vay5hcGkub21uaXR1cmVFdmVudENhbGwoImV2ZW50NTYi
KTsKICAgICAgICAgICAgICAgICAgICBkID8gZChlLCBkai5tb2R1bGUuZmFjZWJvb2suY29ubmVj
dC5nZXRVc2VySUQoKSwgaCkgOiBjb25zb2xlLmxvZygic3VjY2VzczogIiArIGgpCiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgIH0pIDogZGoubW9kdWxlLmZhY2Vib29rLmNvbm5lY3QucHJv
Y2Vzc0xvZ2luKGRvY3VtZW50LmxvY2F0aW9uLCBkb2pvLmhpdGNoKHRoaXMsIGRqLm1vZHVsZS5m
YWNlYm9vay5hcGkuc2VuZFN0cmVhbSwgYSwgYiwgYywgZCwgZSkpCiAgICAgICAgfSk7CiAgICAg
ICAgcmV0dXJuIGgKICAgIH0sCiAgICBvbW5pdHVyZUV2ZW50Q2FsbDogZnVuY3Rpb24gKCkgewog
ICAgICAgIGlmICh0eXBlb2YgcyAhPSAidW5kZWZpbmVkIikgewogICAgICAgICAgICBzLmxpbmtU
cmFja1ZhcnMgPSAiZXZlbnRzIjsKICAgICAgICAgICAgcy5saW5rVHJhY2tFdmVudHMgPSAiZXZl
bnQ1NiI7CiAgICAgICAgICAgIHMuZXZlbnRzID0gImV2ZW50NTYiOwogICAgICAgICAgICBzLnRs
KHRoaXMsICJvIiwgImZiX2FjdGl2aXR5Iik7CiAgICAgICAgICAgIHMubGlua1RyYWNrVmFycyA9
ICJOb25lIjsKICAgICAgICAgICAgcy5saW5rVHJhY2tFdmVudHMgPSAiTm9uZSIKICAgICAgICB9
CiAgICB9Cn07CmRvam8ucHJvdmlkZSgiZGoud2lkZ2V0Lm5ldHdvcmtIYXQuaW5mb2NvbXBsZXRl
Iik7CgpmdW5jdGlvbiBJbmZvQ29tcGxldGUoKSB7CiAgICB0aGlzLmF1dG9Db21wbGV0ZSA9IHRo
aXMuZGF0YVNvdXJjZSA9IG51bGw7CiAgICB0aGlzLmNvdW50ID0gMDsKICAgIHRoaXMuYWxsb3dl
eGNoYW5nZXMgPSB0aGlzLmFsbG93c3ltYm9sdHlwZXMgPSB0aGlzLmFsbG93Y291bnRyaWVzID0g
dGhpcy5kb21haW4gPSAiIjsKICAgIHRoaXMuY3VycmVudFF1ZXJ5SGFzUmVzdWx0TWF0Y2ggPSBm
YWxzZTsKICAgIHRoaXMubGFzdEV4YWN0UmVzdWx0ID0gIiI7CiAgICB0aGlzLmV4YWN0TWF0Y2hl
cyA9IFtdOwogICAgdGhpcy5rZXl3b3JkID0gdGhpcy5zeW1ib2wgPSBudWxsCn0KZnVuY3Rpb24g
YXV0b0NvbXBsZXRlVHJpbShhKSB7CiAgICByZXR1cm4gYS5yZXBsYWNlKC9eXHMqKFxTKihccytc
UyspKilccyokLywgIiQxIikKfQpJbmZvQ29tcGxldGUucHJvdG90eXBlLlNldHVwID0gZnVuY3Rp
b24gKGEpIHsKICAgIHZhciBiLCBjOwogICAgaWYgKCEodHlwZW9mIGEgPT0gInVuZGVmaW5lZCIg
fHwgYSA9PT0gbnVsbCkpIHsKICAgICAgICBiID0gMDsKICAgICAgICBmb3IgKGMgPSBhLnNlY3Rp
b25zLmxlbmd0aDsgYiA8IGM7IGIrKykgewogICAgICAgICAgICB2YXIgZCA9IGEuc2VjdGlvbnNb
Yl0uZGF0YVNvdXJjZS5zZXJ2ZXI7CiAgICAgICAgICAgIGlmICh0eXBlb2YgZCA9PSAidW5kZWZp
bmVkIiB8fCBkID09PSBudWxsIHx8IGQgPT09ICIiKSByZXR1cm4KICAgICAgICB9CiAgICAgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkJPRFkiKTsKICAgICAgICB0aGlzLmNvdW50
ID0gYS5jb3VudDsKICAgICAgICB0aGlzLmRhdGFTb3VyY2UgPSBbXTsKICAgICAgICBiID0gMDsK
ICAgICAgICBmb3IgKGMgPSBhLnNlY3Rpb25zLmxlbmd0aDsgYiA8IGM7IGIrKykgewogICAgICAg
ICAgICBkID0gYS5zZWN0aW9uc1tiXTsKICAgICAgICAgICAgaWYgKGQudHlwZSA9PSAia2V5d29y
ZCIpIHRoaXMua2V5d29yZCA9IGI7CiAgICAgICAgICAgIGVsc2UgaWYgKGQudHlwZSA9PSAic3lt
Ym9sIikgdGhpcy5zeW1ib2wgPSBiOwogICAgICAgICAgICB2YXIgZSA9IG5ldyBZQUhPTy53aWRn
ZXQuRFNfWEhSKGQuZGF0YVNvdXJjZS5zZXJ2ZXIsIGQuZGF0YVNvdXJjZS5zY2hlbWEpOwogICAg
ICAgICAgICBlLnJlc3BvbnNlVHlwZSA9IGQuZGF0YVNvdXJjZS5yZXNwb25zZVR5cGU7CiAgICAg
ICAgICAgIGUuc2NyaXB0UXVlcnlBcHBlbmQgPSBkLmRhdGFTb3VyY2Uuc2NyaXB0UXVlcnlBcHBl
bmQ7CiAgICAgICAgICAgIGUuaW5kZXggPSBiOwogICAgICAgICAgICBlLmRhdGFFcnJvckV2ZW50
LnN1YnNjcmliZSh0aGlzLmhhbmRsZUVycm9yLCBlKTsKICAgICAgICAgICAgdGhpcy5kYXRhU291
cmNlW2JdID0gZQogICAgICAgIH0KICAgICAgICB0aGlzLmF1dG9Db21wbGV0ZSA9IG5ldyBZQUhP
Ty53aWRnZXQuTXVsdGlBdXRvQ29tcGxldGUoYS5pbnB1dElkLCBhLmNvbnRhaW5lcklkLCB0aGlz
LmRhdGFTb3VyY2UpOwogICAgICAgIHRoaXMuY291bnQgPSBhLmNvdW50OwogICAgICAgIHRoaXMu
YXV0b0NvbXBsZXRlLmF1dG9IaWdobGlnaHQgPSBmYWxzZTsKICAgICAgICB0aGlzLmF1dG9Db21w
bGV0ZS5tYXhSZXN1bHRzRGlzcGxheWVkID0gYS5jb3VudDsKICAgICAgICB0aGlzLmF1dG9Db21w
bGV0ZS5xdWVyeURlbGF5ID0gYS5kZWxheTsKICAgICAgICB0aGlzLmF1dG9Db21wbGV0ZS5hbGxv
d0Jyb3dzZXJBdXRvY29tcGxldGUgPSBmYWxzZTsKICAgICAgICB0aGlzLmF1dG9Db21wbGV0ZS50
eXBlQWhlYWQgPSB0cnVlOwogICAgICAgIHRoaXMuYXV0b0NvbXBsZXRlLmFuaW1WZXJ0ID0gZmFs
c2U7CiAgICAgICAgdGhpcy5hdXRvQ29tcGxldGUuYW5pbUhvcml6ID0gZmFsc2U7CiAgICAgICAg
dGhpcy5hdXRvQ29tcGxldGUuZGVsaW1DaGFyID0gIiwiOwogICAgICAgIHRoaXMuYXV0b0NvbXBs
ZXRlLnNldEhlYWRlcignQ2hvb3NlIGEgcXVvdGUgbWF0Y2ggb3IgIkdPIiB0byBnZXQgcXVvdGUg
bmV3cycpOwogICAgICAgIHRoaXMuYXV0b0NvbXBsZXRlLnNldEZvb3RlcigiU2VwYXJhdGUgbXVs
dGlwbGUgc3ltYm9scyB3aXRoIGNvbW1hcyAoLCkiKTsKICAgICAgICB0aGlzLmF1dG9Db21wbGV0
ZS5mb3JtYXRSZXN1bHQgPSBmdW5jdGlvbiAoZiwgbCwgcCkgewogICAgICAgICAgICByZXR1cm4g
YS5zZWN0aW9uc1twXS5mb3JtYXRGdW5jKGYsIGwsIHAsIHRoaXMpCiAgICAgICAgfTsKICAgICAg
ICB0aGlzLmF1dG9Db21wbGV0ZS5kYXRhUmV0dXJuRXZlbnQuc3Vic2NyaWJlKHRoaXMuY2hlY2tS
ZXN1bHRzRm9yRXhhY3RNYXRjaCwgdGhpcy5hdXRvQ29tcGxldGUsIHRoaXMpOwogICAgICAgIHRo
aXMuYXV0b0NvbXBsZXRlLnRleHRib3hLZXlFdmVudC5zdWJzY3JpYmUodGhpcy5jaGVja1Bhc3RF
eGFjdFJlc3VsdHMsIHRoaXMuYXV0b0NvbXBsZXRlLCB0aGlzKQogICAgfQp9OwpJbmZvQ29tcGxl
dGUucHJvdG90eXBlLmdldEZpcnN0RGVsaW1DaGFyID0gZnVuY3Rpb24gKCkgewogICAgaWYgKHRo
aXMuYXV0b0NvbXBsZXRlLmRlbGltQ2hhciAmJiB0aGlzLmF1dG9Db21wbGV0ZS5kZWxpbUNoYXIu
bGVuZ3RoID4gMCkgcmV0dXJuIHRoaXMuYXV0b0NvbXBsZXRlLmRlbGltQ2hhclswXTsKICAgIHJl
dHVybiAiIgp9OwpJbmZvQ29tcGxldGUucHJvdG90eXBlLmlzU3ltYm9sTWF0Y2ggPSBmdW5jdGlv
biAoKSB7CiAgICB2YXIgYSA9IHRoaXMuZ2V0Rmlyc3REZWxpbUNoYXIoKTsKICAgIGlmICh0aGlz
LmN1cnJlbnRRdWVyeUhhc1Jlc3VsdE1hdGNoID09PSB0cnVlICYmIHRoaXMubGFzdEV4YWN0UmVz
dWx0LnRvVXBwZXJDYXNlKCkgPT0gYXV0b0NvbXBsZXRlVHJpbSh0aGlzLmF1dG9Db21wbGV0ZS5f
b1RleHRib3gudmFsdWUpLnJlcGxhY2UoLywkfFwuLCQvLCAiIikudG9VcHBlckNhc2UoKSkgcmV0
dXJuIHRydWU7CiAgICBhID0gdGhpcy5hdXRvQ29tcGxldGUuX29UZXh0Ym94LnZhbHVlLnNwbGl0
KGEpOwogICAgZm9yICh2YXIgYiA9IDA7IGIgPCB0aGlzLmV4YWN0TWF0Y2hlcy5sZW5ndGg7IGIr
KykgZm9yICh2YXIgYyA9IDA7IGMgPCBhLmxlbmd0aDsgYysrKSBpZiAodGhpcy5leGFjdE1hdGNo
ZXNbYl0gPT0gYVtjXSkgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gdGhpcy5kb2VzTGlzdEhhdmVN
YXRjaCgwKQp9OwpJbmZvQ29tcGxldGUucHJvdG90eXBlLmhhbmRsZUVycm9yID0gZnVuY3Rpb24g
KGEsIGIpIHsKICAgIHZhciBjID0gYlsxXTsKICAgIGMuX3BvcHVsYXRlU3RhZ2luZyAmJiBjLl9w
b3B1bGF0ZVN0YWdpbmcoIm51bGwiLCBudWxsLCBjLCBiWzBdLmluZGV4KQp9OwpJbmZvQ29tcGxl
dGUucHJvdG90eXBlLmNoZWNrUGFzdEV4YWN0UmVzdWx0cyA9IGZ1bmN0aW9uIChhLCBiKSB7CiAg
ICBpZiAoImZ1bmN0aW9uIiA9PSB0eXBlb2YgdGhpcy5nZXRGaXJzdERlbGltQ2hhcikgewogICAg
ICAgIHZhciBjID0gdGhpcy5nZXRGaXJzdERlbGltQ2hhcigpOwogICAgICAgIGlmIChiWzBdLl9v
VGV4dGJveC52YWx1ZS5sZW5ndGggPiAwICYmIGJbMF0uX29UZXh0Ym94LnZhbHVlLmxhc3RJbmRl
eE9mKGMpID09IGJbMF0uX29UZXh0Ym94LnZhbHVlLmxlbmd0aCAtIDEgJiYgdGhpcy5jdXJyZW50
UXVlcnlIYXNSZXN1bHRNYXRjaCkgewogICAgICAgICAgICBpZiAodGhpcy5leGFjdE1hdGNoZXMu
bGVuZ3RoID4gMCkgZm9yIChjID0gMDsgYyA8IHRoaXMuZXhhY3RNYXRjaGVzLmxlbmd0aDsgYysr
KSBpZiAodGhpcy5leGFjdE1hdGNoZXNbY10gPT0gdGhpcy5sYXN0RXhhY3RSZXN1bHQpIHJldHVy
bjsKICAgICAgICAgICAgdGhpcy5leGFjdE1hdGNoZXMucHVzaCh0aGlzLmxhc3RFeGFjdFJlc3Vs
dCkKICAgICAgICB9CiAgICB9Cn07CkluZm9Db21wbGV0ZS5wcm90b3R5cGUuY2hlY2tSZXN1bHRz
Rm9yRXhhY3RNYXRjaCA9IGZ1bmN0aW9uIChhLCBiKSB7CiAgICBpZiAoISghYiB8fCBiLmxlbmd0
aCA8IDQgfHwgYlszXSA+IDApKSB7CiAgICAgICAgdmFyIGMgPSB0aGlzLmdldEZpcnN0RGVsaW1D
aGFyKCksCiAgICAgICAgICAgIGQgPSBiWzJdLAogICAgICAgICAgICBlID0gYlswXS5fb1RleHRi
b3gudmFsdWU7CiAgICAgICAgaWYgKGUuaW5kZXhPZihjKSA+IDApIHsKICAgICAgICAgICAgZSA9
IGUuc3BsaXQoYyk7CiAgICAgICAgICAgIGUgPSBhdXRvQ29tcGxldGVUcmltKGVbZS5sZW5ndGgg
LSAxXSkKICAgICAgICB9CiAgICAgICAgaWYgKGQgJiYgZC5sZW5ndGggPiAwKSBmb3IgKGMgPSAw
OyBjIDwgZC5sZW5ndGg7IGMrKykgaWYgKGRbY10gJiYgZFtjXVswXSAhPT0gbnVsbCkgewogICAg
ICAgICAgICB2YXIgZiA9IGRbY11bMF07CiAgICAgICAgICAgIGlmIChlLnRvVXBwZXJDYXNlKCkg
PT0gZi50b1VwcGVyQ2FzZSgpKSB7CiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRRdWVyeUhh
c1Jlc3VsdE1hdGNoID0gdHJ1ZTsKICAgICAgICAgICAgICAgIHRoaXMubGFzdEV4YWN0UmVzdWx0
ID0gZTsKICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
ICAgIHRoaXMuY3VycmVudFF1ZXJ5SGFzUmVzdWx0TWF0Y2ggPSBmYWxzZQogICAgfQp9OwpJbmZv
Q29tcGxldGUucHJvdG90eXBlLmRvZXNMaXN0SGF2ZU1hdGNoID0gZnVuY3Rpb24gKGEpIHsKICAg
IHZhciBiID0gdGhpcy5nZXRGaXJzdERlbGltQ2hhcigpLAogICAgICAgIGMgPSB0aGlzLmF1dG9D
b21wbGV0ZS5nZXRMaXN0SXRlbXMoKSwKICAgICAgICBkID0gYXV0b0NvbXBsZXRlVHJpbSh0aGlz
LmF1dG9Db21wbGV0ZS5fb1RleHRib3gudmFsdWUpLnJlcGxhY2UoLywkfFwuLCQvLCAiIik7CiAg
ICBpZiAoZC5pbmRleE9mKGIpID4gMCkgewogICAgICAgIGQgPSBkLnNwbGl0KGIpOwogICAgICAg
IGQgPSBhdXRvQ29tcGxldGVUcmltKGRbZC5sZW5ndGggLSAxXSkKICAgIH0KICAgIGlmIChhIDwg
Yy5sZW5ndGgpIHsKICAgICAgICBhID0gY1thXTsKICAgICAgICBmb3IgKGMgPSAwOyBjIDwgYS5s
ZW5ndGg7IGMrKykgaWYgKGFbY10gJiYgYVtjXS5fb1Jlc3VsdERhdGEgIT09IG51bGwpIGlmIChk
LnRvVXBwZXJDYXNlKCkgPT0gYVtjXS5fb1Jlc3VsdERhdGFbMF0udG9VcHBlckNhc2UoKSkgcmV0
dXJuIHRydWUKICAgIH0KICAgIHJldHVybiBmYWxzZQp9OwoKZnVuY3Rpb24gcGFyYW0oKSB7CiAg
ICB0aGlzLmFycmF5ID0gQXJyYXkoMSk7CiAgICB0aGlzLnNldFZhbHVlID0gZnVuY3Rpb24gKGEp
IHsKICAgICAgICB0aGlzLmFycmF5WzBdID0gYQogICAgfTsKICAgIHRoaXMuZ2V0VmFsdWUgPSBm
dW5jdGlvbiAoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXlbMF0KICAgIH0KfQpmdW5jdGlv
biBJbnN0YWxsTGlicmFyeShhKSB7CiAgICBhID0gYSB8fCB3aW5kb3c7CiAgICBhLnN5bWJvbENv
bXBsZXRlID0gbmV3IEluZm9Db21wbGV0ZTsKICAgIGEuSW5mb0NvbXBsZXRlID0gbmV3IEluZm9D
b21wbGV0ZQp9Ckluc3RhbGxMaWJyYXJ5KCk7CmRvam8ucHJvdmlkZSgiZGoud2lkZ2V0Lm5ldHdv
cmtIYXQuaGF0Iik7CmRvam8ucmVxdWlyZSgiZGoudXRpbC5SZWdpb24iKTsKaGF0ID0gewogICAg
c2VhcmNoX2tleXByZXNzOiBmdW5jdGlvbiAoYSkgewogICAgICAgIGlmICgod2luZG93LmV2ZW50
ID8gd2luZG93LmV2ZW50LmtleUNvZGUgOiBhLndoaWNoKSA9PSAxMykgewogICAgICAgICAgICBp
ZiAoYS5wcmV2ZW50RGVmYXVsdCkgewogICAgICAgICAgICAgICAgYS5wcmV2ZW50RGVmYXVsdCgp
OwogICAgICAgICAgICAgICAgYS5zdG9wUHJvcGFnYXRpb24oKQogICAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgICAgYS5jYW5jZWxCdWJibGUgPSB0cnVlOwogICAgICAgICAgICAgICAg
YS5yZXR1cm5WYWx1ZSA9IGZhbHNlCiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5zZWFy
Y2goKQogICAgICAgIH0KICAgIH0sCiAgICBzZWFyY2g6IGZ1bmN0aW9uICgpIHsKICAgICAgICB0
cnkgewogICAgICAgICAgICB2YXIgYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYXRfaW5w
dXQiKS52YWx1ZSwKICAgICAgICAgICAgICAgIGIgPSB0aGlzLnRoaXNTaXRlKCk7CiAgICAgICAg
ICAgIGlmIChiICE9ICJNVyIpIGlmIChiID09ICJNV0MiIHx8IGIgPT0gIlZTRSIgfHwgYiA9PSAi
QkMiKSB7CiAgICAgICAgICAgICAgICBhID0gYS5yZXBsYWNlKC9eXHMrfFxzKyQvZywgIiIpLnJl
cGxhY2UoLywkfFwuLCQvLCAiIik7CiAgICAgICAgICAgICAgICBhID0gYS5yZXBsYWNlKCJFbnRl
ciBLZXl3b3JkKHMpIiwgIiIpOwogICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uID0gYSA/
ICJodHRwOi8vd3d3Lm1hcmtldHdhdGNoLmNvbS9zZWFyY2gvP3ZhbHVlPSIgKyBhIDogImh0dHA6
Ly93d3cubWFya2V0d2F0Y2guY29tL3NlYXJjaCIKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgIHZhciBjID0gImh0dHA6Ly8iICsgZG9jdW1lbnQuZG9tYWluOwogICAgICAgICAg
ICAgICAgYSA9IGEucmVwbGFjZSgvXlxzK3xccyskL2csICIiKS5yZXBsYWNlKC8sJHxcLiwkLywg
IiIpOwogICAgICAgICAgICAgICAgdmFyIGQgPSBjICsgIi9zZWFyY2gvdGVybS5odG1sP0tFWVdP
UkRTPSIgKyBlc2NhcGUoYSk7CiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24gPSBkCiAg
ICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJy
b3IoImhhdC5zZWFyY2g6ICIgKyBlKQogICAgICAgIH0KICAgIH0sCiAgICBzZWFyY2hfZm9ybTog
ZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhh
dF9zZWFyY2hmb3JtIik7CiAgICAgICAgYSAmJiBhLnN1Ym1pdCgpCiAgICB9LAogICAgaGlkZUVs
OiBmdW5jdGlvbiAoYSkgewogICAgICAgIGlmICgoYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KGEpKSAmJiBhLnN0eWxlKSB7CiAgICAgICAgICAgIGEub2xkZGlzcGxheSA9IGEuc3R5bGUuZGlz
cGxheTsKICAgICAgICAgICAgYS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiCiAgICAgICAgfQogICAg
fSwKICAgIHNob3dFbDogZnVuY3Rpb24gKGEpIHsKICAgICAgICBpZiAoKGEgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZChhKSkgJiYgYS5zdHlsZSkgYS5zdHlsZS5kaXNwbGF5ID0gYS5vbGRkaXNw
bGF5IHx8ICJibG9jayIKICAgIH0sCiAgICBtb3JlbWVudTogZnVuY3Rpb24gKCkgewogICAgICAg
IHRyeSB7CiAgICAgICAgICAgIGlmICh0aGlzLm1vcmVUaW1lb3V0KSB7CiAgICAgICAgICAgICAg
ICBjbGVhclRpbWVvdXQodGhpcy5tb3JlVGltZW91dCk7CiAgICAgICAgICAgICAgICB0aGlzLm1v
cmVUaW1lb3V0ID0gbnVsbAogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhp
cy5zaG93RWwoImhhdF9tb3JlX21lbnUiKTsKICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJoYXRfdGFiNSIpLmNsYXNzTmFtZSA9ICJoYXRfdGFiIGhhdF9tb3JlX3NlbCI7
CiAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnQuYWxsKSB7CiAgICAgICAgICAgICAgICAgICAg
dmFyIGEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgid3NqQ1JTZWxlY3REcnBkd24iKTsKICAg
ICAgICAgICAgICAgICAgICBpZiAoYSAmJiBhLnN0eWxlKSBhLnN0eWxlLnZpc2liaWxpdHkgPSAi
aGlkZGVuIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAo
YikgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKCJoYXQubW9yZW1lbnU6ICIgKyBiKQogICAg
ICAgIH0KICAgIH0sCiAgICBtb3JlVGltZW91dDogbnVsbCwKICAgIG1vcmVtZW51aGlkZTogZnVu
Y3Rpb24gKCkgewogICAgICAgIGlmICghdGhpcy5tb3JlVGltZW91dCkgdGhpcy5tb3JlVGltZW91
dCA9IHNldFRpbWVvdXQodGhpcy5tb3JlbWVudWhpZGVkZWxheWVkLCAxMDApCiAgICB9LAogICAg
bW9yZW1lbnVoaWRlZGVsYXllZDogZnVuY3Rpb24gKCkgewogICAgICAgIHRyeSB7CiAgICAgICAg
ICAgIGhhdC5tb3JlVGltZW91dCA9IG51bGw7CiAgICAgICAgICAgIGhhdC5oaWRlRWwoImhhdF9t
b3JlX21lbnUiKTsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhhdF90YWI1
IikuY2xhc3NOYW1lID0gImhhdF90YWIiOwogICAgICAgICAgICBpZiAoZG9jdW1lbnQuYWxsKSB7
CiAgICAgICAgICAgICAgICB2YXIgYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ3c2pDUlNl
bGVjdERycGR3biIpOwogICAgICAgICAgICAgICAgaWYgKGEgJiYgYS5zdHlsZSkgYS5zdHlsZS52
aXNpYmlsaXR5ID0gInZpc2libGUiCiAgICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChiKSB7
CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoImhhdC5tb3JlbWVudWhpZGVkZWxheWVkOiAiICsg
YikKICAgICAgICB9CiAgICB9LAogICAgdGFib3ZlcjogZnVuY3Rpb24gKGEpIHsKICAgICAgICB0
cnkgewogICAgICAgICAgICBpZiAoYS5jbGFzc05hbWUgIT0gImhhdF90YWJzZWwiKSB7CiAgICAg
ICAgICAgICAgICBpZiAoYS5zcmNFbGVtZW50KSBpZiAoYS5zcmNFbGVtZW50LnBhcmVudE5vZGUu
dGFnTmFtZSA9PSAiTEkiKSBhID0gYS5zcmNFbGVtZW50LnBhcmVudE5vZGU7CiAgICAgICAgICAg
ICAgICBhLmNsYXNzTmFtZSA9ICJoYXRfdGFiIGhhdF90YWJfb3ZlciIKICAgICAgICAgICAgfQog
ICAgICAgIH0gY2F0Y2ggKGIpIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcigiaGF0LnRhYm92
ZXI6ICIgKyBiKQogICAgICAgIH0KICAgIH0sCiAgICB0YWJvdXQ6IGZ1bmN0aW9uIChhKSB7CiAg
ICAgICAgdHJ5IHsKICAgICAgICAgICAgaWYgKGEuY2xhc3NOYW1lICE9ICJoYXRfdGFic2VsIikg
ewogICAgICAgICAgICAgICAgaWYgKGEuc3JjRWxlbWVudCkgaWYgKGEuc3JjRWxlbWVudC5wYXJl
bnROb2RlLnRhZ05hbWUgPT0gIkxJIikgYSA9IGEuc3JjRWxlbWVudC5wYXJlbnROb2RlOwogICAg
ICAgICAgICAgICAgYS5jbGFzc05hbWUgPSAiaGF0X3RhYiIKICAgICAgICAgICAgfQogICAgICAg
IH0gY2F0Y2ggKGIpIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcigiaGF0LnRhYm91dDogIiAr
IGIpCiAgICAgICAgfQogICAgfSwKICAgIG1lbnVvdmVyOiBmdW5jdGlvbiAoYSkgewogICAgICAg
IGlmIChhLnNyY0VsZW1lbnQpIHsKICAgICAgICAgICAgYSA9IGEuc3JjRWxlbWVudDsKICAgICAg
ICAgICAgaWYgKGEudGFnTmFtZSA9PSAiQSIpIGEgPSBhLnBhcmVudE5vZGUKICAgICAgICB9CiAg
ICAgICAgYSAmJiBkb2pvLmFkZENsYXNzKGEsICJoYXRfZHJvcF9pdGVtX3NlbCIpCiAgICB9LAog
ICAgbWVudW91dDogZnVuY3Rpb24gKGEpIHsKICAgICAgICBpZiAoYS5zcmNFbGVtZW50KSB7CiAg
ICAgICAgICAgIGEgPSBhLnNyY0VsZW1lbnQ7CiAgICAgICAgICAgIGlmIChhLnRhZ05hbWUgPT0g
IkEiKSBhID0gYS5wYXJlbnROb2RlCiAgICAgICAgfQogICAgICAgIGEgJiYgYS5jbGFzc05hbWUu
aW5kZXhPZigiaGF0X2Ryb3BfaXRlbV9zZWwiKSA+IDAgJiYgZG9qby5yZW1vdmVDbGFzcyhhLCAi
aGF0X2Ryb3BfaXRlbV9zZWwiKQogICAgfSwKICAgIGlucHV0Zm9jdXM6IGZ1bmN0aW9uIChhKSB7
CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgaWYgKGEuY2xhc3NOYW1lLmluZGV4T2YoImhhdF91
bnVzZWQiKSA+PSAwKSB7CiAgICAgICAgICAgICAgICBhLnZhbHVlID0gIiI7CiAgICAgICAgICAg
ICAgICBhLmNsYXNzTmFtZSA9ICJoYXRfaW5wdXQiCiAgICAgICAgICAgIH0KICAgICAgICB9IGNh
dGNoIChiKSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoImhhdC5pbnB1dGZvY3VzOiAiICsg
YikKICAgICAgICB9CiAgICB9LAogICAgdXBkYXRlQW5jaG9yVGV4dDogZnVuY3Rpb24gKGEsIGIp
IHsKICAgICAgICBpZiAoYS5pbm5lckhUTUwgIT0gYikgewogICAgICAgICAgICBhLmZpcnN0Q2hp
bGQgJiYgYS5yZW1vdmVDaGlsZChhLmZpcnN0Q2hpbGQpOwogICAgICAgICAgICBhLmlubmVySFRN
TCA9IGIKICAgICAgICB9CiAgICB9LAogICAgdXBkYXRlQW5jaG9ySHJlZjogZnVuY3Rpb24gKGEs
IGIpIHsKICAgICAgICBpZiAoYS5ocmVmICE9IGIpIGEuaHJlZiA9IGIKICAgIH0sCiAgICB1cGRh
dGVBbmNob3JUaXRsZTogZnVuY3Rpb24gKGEsIGIpIHsKICAgICAgICBpZiAoYS50aXRsZSAhPSBi
KSBhLnRpdGxlID0gYgogICAgfSwKICAgIHVwZGF0ZUNoYW5nZVRhYjogZnVuY3Rpb24gKGEsIGIs
IGMsIGQsIGUsIGYpIHsKICAgICAgICB2YXIgbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJo
YXRfbGluayIgKyBhKTsKICAgICAgICBpZiAobCkgewogICAgICAgICAgICBiICE9PSBudWxsICYm
IGhhdC51cGRhdGVBbmNob3JUZXh0KGwsIGIpOwogICAgICAgICAgICBjICYmIGhhdC51cGRhdGVB
bmNob3JIcmVmKGwsIGMpOwogICAgICAgICAgICBkICYmIGhhdC51cGRhdGVBZGRUcmFja2luZ09u
Y2xpY2sobCwgZCk7CiAgICAgICAgICAgIGYgJiYgaGF0LnVwZGF0ZUFuY2hvclRpdGxlKGwsIGYp
CiAgICAgICAgfSBlbHNlIGhhdC51cGRhdGVBZGRDaGFuZ2VUYWIoYSwgYiwgYywgZCk7CiAgICAg
ICAgaWYgKGUpIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYXRfdGFiIiArIGEpLmlkID0gZQog
ICAgfSwKICAgIHVwZGF0ZUFkZENoYW5nZVRhYjogZnVuY3Rpb24gKGEsIGIsIGMsIGQsIGUpIHsK
ICAgICAgICBmb3IgKHZhciBmID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhhdF9kaXYiKSwg
bCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYXRfdGFiNSIpLCBwLCBxID0gMDsgcSA8IGYu
Y2hpbGROb2Rlcy5sZW5ndGg7IHErKykgaWYgKGYuY2hpbGROb2Rlc1txXS5jbGFzc05hbWUgPT0g
ImhhdF90YWJzIikgcCA9IGYuY2hpbGROb2Rlc1txXTsKICAgICAgICBmID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgibGkiKTsKICAgICAgICBxID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIp
OwogICAgICAgIGYuYXBwZW5kQ2hpbGQocSk7CiAgICAgICAgZi5jbGFzc05hbWUgPSAiaGF0X3Rh
YiI7CiAgICAgICAgZi5zZXRBdHRyaWJ1dGUoImlkIiwgImhhdF90YWIiICsgYSk7CiAgICAgICAg
aWYgKGYuYXR0YWNoRXZlbnQpIHsKICAgICAgICAgICAgZi5hdHRhY2hFdmVudCgib25tb3VzZW92
ZXIiLCBoYXQudGFib3Zlcik7CiAgICAgICAgICAgIGYuYXR0YWNoRXZlbnQoIm9ubW91c2VvdXQi
LCBoYXQudGFib3V0KQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGYuc2V0QXR0cmlidXRl
KCJvbm1vdXNlb3ZlciIsICJoYXQudGFib3Zlcih0aGlzKSIpOwogICAgICAgICAgICBmLnNldEF0
dHJpYnV0ZSgib25tb3VzZW91dCIsICJoYXQudGFib3V0KHRoaXMpIikKICAgICAgICB9CiAgICAg
ICAgcS5ocmVmID0gYzsKICAgICAgICBxLnNldEF0dHJpYnV0ZSgiaWQiLCAiaGF0X2xpbmsiICsg
YSk7CiAgICAgICAgYiAhPT0gbnVsbCAmJiBoYXQudXBkYXRlQW5jaG9yVGV4dChxLCBiKTsKICAg
ICAgICBjICYmIGhhdC51cGRhdGVBbmNob3JIcmVmKHEsIGMpOwogICAgICAgIGQgJiYgaGF0LnVw
ZGF0ZUFkZFRyYWNraW5nT25jbGljayhxLCBkKTsKICAgICAgICBlICYmIGhhdC51cGRhdGVBbmNo
b3JUaXRsZShxLCBlKTsKICAgICAgICBwICYmIHAuaW5zZXJ0QmVmb3JlKGYsIGwpCiAgICB9LAog
ICAgdXBkYXRlQ2hhbmdlTW9yZUl0ZW06IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7CiAgICAgICAg
dmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGF0X21vcmUiICsgYSk7CiAgICAgICAg
aWYgKGUgJiYgZS5jaGlsZE5vZGVzKSBmb3IgKGEgPSAwOyBhIDwgZS5jaGlsZE5vZGVzLmxlbmd0
aDsgYSsrKSB7CiAgICAgICAgICAgIHZhciBmID0gZS5jaGlsZE5vZGVzW2FdLAogICAgICAgICAg
ICAgICAgbCA9IGYudGFnTmFtZTsKICAgICAgICAgICAgaWYgKGwgJiYgbC50b0xvd2VyQ2FzZSgp
ID09ICJhIikgewogICAgICAgICAgICAgICAgYiAhPT0gbnVsbCAmJiBoYXQudXBkYXRlQW5jaG9y
VGV4dChmLCBiKTsKICAgICAgICAgICAgICAgIGMgJiYgaGF0LnVwZGF0ZUFuY2hvckhyZWYoZiwg
Yyk7CiAgICAgICAgICAgICAgICBkICYmIGhhdC51cGRhdGVBZGRUcmFja2luZ09uY2xpY2soZiwg
ZCk7CiAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGhh
dC51cGRhdGVBZGRNb3JlSXRlbShhLCBiLCBjLCBkKQogICAgfSwKICAgIHVwZGF0ZVJlbW92ZU1v
cmVJdGVtOiBmdW5jdGlvbiAoYSkgewogICAgICAgIGEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiaGF0X21vcmUiICsgYSk7CiAgICAgICAgdmFyIGIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiaGF0X21vcmVfbWVudSIpOwogICAgICAgIGEgJiYgYiAmJiBiLnJlbW92ZUNoaWxkKGEpCiAg
ICB9LAogICAgdXBkYXRlQWRkVHJhY2tpbmdPbmNsaWNrOiBmdW5jdGlvbiAoYSwgYikgewogICAg
ICAgIGlmIChhLmF0dHJpYnV0ZXMub25jbGljaykgewogICAgICAgICAgICBpZiAoYS5hdHRyaWJ1
dGVzLm9uY2xpY2subm9kZVZhbHVlID09ICJoYXQudHJhY2soJyIgKyBiICsgIicpIikgcmV0dXJu
OwogICAgICAgICAgICBhLnJlbW92ZUF0dHJpYnV0ZSgib25jbGljayIpCiAgICAgICAgfQogICAg
ICAgIGEuYXR0YWNoRXZlbnQgPyBhLmF0dGFjaEV2ZW50KCJvbmNsaWNrIiwgaGF0LnRyYWNrKSA6
IGEuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBoYXQudHJhY2ssIGZhbHNlKTsKICAgICAgICBh
LmxpbmtUbyA9IGIKICAgIH0sCiAgICB1cGRhdGVBZGRNb3JlSXRlbTogZnVuY3Rpb24gKGEsIGIs
IGMsIGQpIHsKICAgICAgICB2YXIgZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYXRfbW9y
ZV9tZW51IiksCiAgICAgICAgICAgIGYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaSIpLAog
ICAgICAgICAgICBsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwogICAgICAgIGYuYXBw
ZW5kQ2hpbGQobCk7CiAgICAgICAgZi5jbGFzc05hbWUgPSAiaGF0X2Ryb3BfaXRlbSI7CiAgICAg
ICAgZi5zZXRBdHRyaWJ1dGUoImlkIiwgImhhdF9tb3JlIiArIGEpOwogICAgICAgIGlmIChmLmF0
dGFjaEV2ZW50KSB7CiAgICAgICAgICAgIGYuYXR0YWNoRXZlbnQoIm9ubW91c2VvdmVyIiwgaGF0
Lm1lbnVvdmVyKTsKICAgICAgICAgICAgZi5hdHRhY2hFdmVudCgib25tb3VzZW91dCIsIGhhdC5t
ZW51b3V0KQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGYuc2V0QXR0cmlidXRlKCJvbm1v
dXNlb3V0IiwgImhhdC5tZW51b3V0KHRoaXMpIik7CiAgICAgICAgICAgIGYuc2V0QXR0cmlidXRl
KCJvbm1vdXNlb3ZlciIsICJoYXQubWVudW92ZXIodGhpcykiKQogICAgICAgIH0KICAgICAgICBs
LmhyZWYgPSBjOwogICAgICAgIGwuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUo
YikpOwogICAgICAgIGhhdC51cGRhdGVBZGRUcmFja2luZ09uY2xpY2sobCwgZCk7CiAgICAgICAg
ZSAmJiBlLmFwcGVuZENoaWxkKGYpCiAgICB9LAogICAgdHJhY2s6IGZ1bmN0aW9uIChhKSB7CiAg
ICAgICAgdHJ5IHsKICAgICAgICAgICAgdmFyIGI7CiAgICAgICAgICAgIGIgPSBhLnRhcmdldCA/
IGEudGFyZ2V0LmxpbmtUbyA6IGEuc3JjRWxlbWVudCA/IGEuc3JjRWxlbWVudC5saW5rVG8gOiBh
OwogICAgICAgICAgICB2YXIgYyA9ICJkbmhfIiArIGhhdC50aGlzU2l0ZSgpICsgIjIiICsgYjsK
ICAgICAgICAgICAgYyA9IGMudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgdmFyIGQgPSBzLmlv
czsKICAgICAgICAgICAgcy5pb3MgPSAxOwogICAgICAgICAgICBzICYmIHMudGwodHJ1ZSwgIm8i
LCBjKTsKICAgICAgICAgICAgcy5pb3MgPSBkCiAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAg
ICAgICBjb25zb2xlLmVycm9yKCJoYXQudHJhY2s6ICIgKyBlKQogICAgICAgIH0KICAgIH0sCiAg
ICB1cGRhdGVTZWxlY3RUYWI6IGZ1bmN0aW9uIChhKSB7CiAgICAgICAgZm9yICh2YXIgYiA9IDE7
IGIgPD0gNDsgYisrKSB7CiAgICAgICAgICAgIHZhciBjID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImhhdF90YWIiICsgYik7CiAgICAgICAgICAgIGlmIChjKSBjLmNsYXNzTmFtZSA9IGIgPT0g
YSA/ICJoYXRfdGFic2VsIiA6ICJoYXRfdGFiIgogICAgICAgIH0KICAgIH0sCiAgICB0aGlzU2l0
ZTogZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
ImhhdF9kaXYiKTsKICAgICAgICBpZiAoYSkgewogICAgICAgICAgICBhID0gYS5jbGFzc05hbWU7
CiAgICAgICAgICAgIGlmIChhLm1hdGNoKC9oYXRfZXVyLykpIHJldHVybiAiRVVSIjsKICAgICAg
ICAgICAgaWYgKGEubWF0Y2goL2hhdF9zcGEvKSkgcmV0dXJuICJTUEEiOwogICAgICAgICAgICBp
ZiAoYS5tYXRjaCgvaGF0X3Bvci8pKSByZXR1cm4gIlBPUiI7CiAgICAgICAgICAgIGlmIChhLm1h
dGNoKC9oYXRfY2hpLykpIHJldHVybiAiQ0hJIjsKICAgICAgICAgICAgaWYgKGEubWF0Y2goL2hh
dF9qcG4vKSkgcmV0dXJuICJKUE4iOwogICAgICAgICAgICBpZiAoYS5tYXRjaCgvaGF0X2FzaWEv
KSkgcmV0dXJuICJBU0lBIjsKICAgICAgICAgICAgaWYgKGEubWF0Y2goL2hhdF93c2ovKSkgcmV0
dXJuICJXU0oiOwogICAgICAgICAgICBpZiAoYS5tYXRjaCgvaGF0X213Yy8pKSByZXR1cm4gIk1X
QyI7CiAgICAgICAgICAgIGlmIChhLm1hdGNoKC9oYXRfbXcvKSkgcmV0dXJuICJNVyI7CiAgICAg
ICAgICAgIGlmIChhLm1hdGNoKC9oYXRfYm9sLykpIHJldHVybiAiQk9MIjsKICAgICAgICAgICAg
aWYgKGEubWF0Y2goL2hhdF9hdGQvKSkgcmV0dXJuICJBVEQiOwogICAgICAgICAgICBpZiAoYS5t
YXRjaCgvaGF0X3ZzZS8pKSByZXR1cm4gIlZTRSI7CiAgICAgICAgICAgIGlmIChhLm1hdGNoKC9o
YXRfYmMvKSkgcmV0dXJuICJCQyI7CiAgICAgICAgICAgIGlmIChhLm1hdGNoKC9oYXRfc20vKSkg
cmV0dXJuICJTTSI7CiAgICAgICAgICAgIGlmIChhLm1hdGNoKC9oYXRfd3JhZC8pKSByZXR1cm4g
IldSQUQiOwogICAgICAgICAgICBpZiAoYS5tYXRjaCgvaGF0X2ZpbnMvKSkgcmV0dXJuICJGSU5T
IjsKICAgICAgICAgICAgaWYgKGEubWF0Y2goL2hhdF93c2QvKSkgcmV0dXJuICJXU0QiCiAgICAg
ICAgfQogICAgICAgIHJldHVybiAiIgogICAgfSwKICAgIHVwZGF0ZUJ1aWxkTGluazogZnVuY3Rp
b24gKGEpIHsKICAgICAgICB2YXIgYiA9IGhhdC50aGlzU2l0ZSgpLAogICAgICAgICAgICBjID0g
Ij9yZWZsaW5rPSI7CiAgICAgICAgc3dpdGNoIChiKSB7CiAgICAgICAgY2FzZSAiV1NKIjoKICAg
ICAgICAgICAgaWYgKGEubWF0Y2goL3dzai9pKSkgYyA9ICI/TU9EPSI7CiAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgIGNhc2UgIkJPTCI6CiAgICAgICAgICAgIGlmIChhLm1hdGNoKC9iYXJyb25z
L2kpKSBjID0gIj9NT0Q9IjsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiQVREIjoK
ICAgICAgICAgICAgaWYgKGEubWF0Y2goL2FsbHRoaW5nc2QvaSkpIGMgPSAiP2xpbms9IjsKICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiVlNFIjoKICAgICAgICAgICAgaWYgKGEubWF0
Y2goL3ZzZS9pKSkgYyA9ICI/ZGlzdD0iOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNl
ICJCQyI6CiAgICAgICAgICAgIGlmIChhLm1hdGNoKC9iaWdjaGFydHMvaSkpIGMgPSAiP2Rpc3Q9
IjsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiTVdDIjoKICAgICAgICAgICAgaWYg
KGEubWF0Y2goL2NvbW11bml0eS9pKSkgYyA9ICI/ZGlzdD0iOwogICAgICAgICAgICBicmVhazsK
ICAgICAgICBjYXNlICJNVyI6CiAgICAgICAgICAgIGlmIChhLm1hdGNoKC9tYXJrZXR3YXRjaC9p
KSAmJiAhYS5tYXRjaCgvdnNlL2kpICYmICFhLm1hdGNoKC9iaWdjaGFydHMvaSkgJiYgIWEubWF0
Y2goL2NvbW11bml0eS9pKSkgYyA9ICI/ZGlzdD0iCiAgICAgICAgfQogICAgICAgIHJldHVybiBh
ICsgYyArICJETkhfIiArIGIKICAgIH0sCiAgICB1cGRhdGVCdWlsZE1PRExpbms6IGZ1bmN0aW9u
IChhKSB7CiAgICAgICAgcmV0dXJuIGEgKyAiP01PRD1ETkhfIiArIGhhdC50aGlzU2l0ZSgpCiAg
ICB9LAogICAgdXBkYXRlU2hvd0hhdDogZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBhID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhhdF9kaXYiKTsKICAgICAgICBpZiAoYSkgYS5jbGFzc05h
bWUgKz0gIiBoYXRfdmlzaWJsZSIKICAgIH0sCiAgICB1cGRhdGU6IGZ1bmN0aW9uICgpIHsKICAg
ICAgICB0cnkgewogICAgICAgICAgICB2YXIgYSwgYiA9IGRvY3VtZW50LmNvb2tpZS5pbmRleE9m
KCJ3c2pyZWdpb24iKSwKICAgICAgICAgICAgICAgIGMgPSB0cnVlLAogICAgICAgICAgICAgICAg
ZCwgZSA9IGRvam8uZ2V0T2JqZWN0KCJkai5tb2R1bGUuaGVhZGVyLm5vbnJlbm8iKTsKICAgICAg
ICAgICAgaWYgKGIgIT0gLTEpIGlmIChlIHx8IHR5cGVvZiB3aW5kb3cuY3VycmVudFJlZ2lvbiA9
PSAidW5kZWZpbmVkIikgewogICAgICAgICAgICAgICAgZCA9IGRqLnV0aWwuUmVnaW9uLmdldFZp
ZXdCeVJlZ2lvbigpOwogICAgICAgICAgICAgICAgaWYgKGQgIT0gIm5hLHVzIikgYSA9IGQKICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGMgPSBmYWxzZTsKICAgICAgICAgICAg
ICAgIGlmIChjdXJyZW50UmVnaW9uICE9PSAiIikgewogICAgICAgICAgICAgICAgICAgIGQgPSBj
dXJyZW50UmVnaW9uOwogICAgICAgICAgICAgICAgICAgIGlmIChkICE9ICJuYSx1cyIpIGEgPSBk
CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGQgPSBHZXRDb29r
aWUoIndzanJlZ2lvbiIpOwogICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZWdpb24gPSBkLmlu
ZGV4T2YoInJlc2V0IikgIT0gLTEgPyBkLnN1YnN0cmluZygwLCBkLmluZGV4T2YoInJlc2V0Iikg
LSAxKSA6IGQ7CiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRSZWdpb24gIT0gIm5hLHVz
IikgYSA9IGN1cnJlbnRSZWdpb24KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAg
ICAgICAgICBpZiAodHlwZW9mIGUgPT09ICJ1bmRlZmluZWQiICYmIHR5cGVvZiB3aW5kb3cub3Zl
cnJpZGVXU0pSZW5vQXBwICE9PSAidW5kZWZpbmVkIikgYyA9IGZhbHNlOwogICAgICAgICAgICBp
ZiAoYSkgaWYgKGEgPT0gImFzaWEiIHx8IGEgPT0gImFzaWEsaW5kaWEiKSB7CiAgICAgICAgICAg
ICAgICBpZiAoIWMpIHsKICAgICAgICAgICAgICAgICAgICBoYXQudXBkYXRlQ2hhbmdlVGFiKDEs
ICIiLCAiaHR0cDovL29ubGluZS53c2ouY29tL2hvbWUiLCAiV1NKIik7CiAgICAgICAgICAgICAg
ICAgICAgaGF0LnVwZGF0ZUNoYW5nZVRhYigyLCAiIiwgImh0dHA6Ly9jbi53c2ouY29tL2diL2lu
ZGV4LmFzcCIsICJDSEkiLCAiaGF0X3RhYmNoaSIpOwogICAgICAgICAgICAgICAgICAgIGhhdC51
cGRhdGVDaGFuZ2VUYWIoMywgIiIsICJodHRwOi8vanAud3NqLmNvbS8iLCAiSlBOIiwgImhhdF90
YWJqcCIpOwogICAgICAgICAgICAgICAgICAgIGhhdC51cGRhdGVDaGFuZ2VUYWIoNCwgIiIsICJo
dHRwOi8vd3d3Lm1hcmtldHdhdGNoLmNvbS8iLCAiTVciLCAiaGF0X3RhYjIiKTsKICAgICAgICAg
ICAgICAgICAgICBoYXQudXBkYXRlQ2hhbmdlVGFiKDYsICIiLCAiaHR0cDovL2FsbHRoaW5nc2Qu
Y29tLyIsICJBVEQiLCAiaGF0X3RhYjQiKTsKICAgICAgICAgICAgICAgICAgICBoYXQudXBkYXRl
Q2hhbmdlTW9yZUl0ZW0oMSwgIlNtYXJ0TW9uZXkuY29tIiwgImh0dHA6Ly93d3cuc21hcnRtb25l
eS5jb20vIiwgIlNNIik7CiAgICAgICAgICAgICAgICAgICAgaGF0LnVwZGF0ZUNoYW5nZU1vcmVJ
dGVtKDIsICJCaWdDaGFydHMiLCAiaHR0cDovL2JpZ2NoYXJ0cy5tYXJrZXR3YXRjaC5jb20vIiwg
IkJDIik7CiAgICAgICAgICAgICAgICAgICAgaGF0LnVwZGF0ZUNoYW5nZU1vcmVJdGVtKDMsICJW
aXJ0dWFsIFN0b2NrIEV4Y2hhbmdlIiwgImh0dHA6Ly92c2UubWFya2V0d2F0Y2guY29tL0dhbWUv
SG9tZXBhZ2UuYXNweCIsICJWU0UiKTsKICAgICAgICAgICAgICAgICAgICBoYXQudXBkYXRlQ2hh
bmdlTW9yZUl0ZW0oNCwgIkJhcnJvbidzIiwgImh0dHA6Ly9vbmxpbmUuYmFycm9ucy5jb20vaG9t
ZSIsICJCT0wiKTsKICAgICAgICAgICAgICAgICAgICBoYXQudXBkYXRlQ2hhbmdlTW9yZUl0ZW0o
NSwgIkZpbmFuY2lhbCBOZXdzIiwgImh0dHA6Ly93d3cuZWZpbmFuY2lhbG5ld3MuY29tLyIsICJG
Tk8iKTsKICAgICAgICAgICAgICAgICAgICBoYXQudXBkYXRlQ2hhbmdlTW9yZUl0ZW0oNiwgIldT
SiBQb3J0dWd1ZXNlIiwgImh0dHA6Ly9vbmxpbmUud3NqLmNvbS9wb3J0dWd1ZXNlIiwgIlBPUiIp
OwogICAgICAgICAgICAgICAgICAgIGhhdC51cGRhdGVDaGFuZ2VNb3JlSXRlbSg3LCAiV1NKIFNw
YW5pc2giLCAiaHR0cDovL29ubGluZS53c2ouY29tL2FtZXJpY2FzIiwgIlNQQSIpCiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoYSA9PSAi
ZXVyb3BlIikgaWYgKCFjKSB7CiAgICAgICAgICAgICAgICAgICAgaGF0LnVwZGF0ZUNoYW5nZVRh
YigxLCAiIiwgImh0dHA6Ly9vbmxpbmUud3NqLmNvbS9ob21lIiwgIldTSiIpOwogICAgICAgICAg
ICAgICAgICAgIGhhdC51cGRhdGVDaGFuZ2VUYWIoMiwgIiIsICJodHRwOi8vd3d3Lm1hcmtldHdh
dGNoLmNvbS8iLCAiTVciKTsKICAgICAgICAgICAgICAgICAgICBoYXQudXBkYXRlQ2hhbmdlVGFi
KDMsICIiLCAiaHR0cDovL29ubGluZS5iYXJyb25zLmNvbS9ob21lIiwgIkJPTCIpOwogICAgICAg
ICAgICAgICAgICAgIGhhdC51cGRhdGVDaGFuZ2VUYWIoNCwgIiIsICJodHRwOi8vd3d3LmVmaW5h
bmNpYWxuZXdzLmNvbS8iLCAiRk5PIiwgImhhdF90YWJmbm8iKTsKICAgICAgICAgICAgICAgICAg
ICBoYXQudXBkYXRlQ2hhbmdlTW9yZUl0ZW0oMSwgIlNtYXJ0TW9uZXkuY29tIiwgImh0dHA6Ly93
d3cuc21hcnRtb25leS5jb20vIiwgIlNNIik7CiAgICAgICAgICAgICAgICAgICAgaGF0LnVwZGF0
ZUNoYW5nZU1vcmVJdGVtKDIsICJCaWdDaGFydHMiLCAiaHR0cDovL2JpZ2NoYXJ0cy5tYXJrZXR3
YXRjaC5jb20vIiwgIkJDIik7CiAgICAgICAgICAgICAgICAgICAgaGF0LnVwZGF0ZUNoYW5nZU1v
cmVJdGVtKDMsICJBbGwgVGhpbmdzIEQiLCAiaHR0cDovL2FsbHRoaW5nc2QuY29tLyIsICJBVEQi
KTsKICAgICAgICAgICAgICAgICAgICBoYXQudXBkYXRlQ2hhbmdlTW9yZUl0ZW0oNCwgIlZpcnR1
YWwgU3RvY2sgRXhjaGFuZ2UiLCAiaHR0cDovL3ZzZS5tYXJrZXR3YXRjaC5jb20vR2FtZS9Ib21l
cGFnZS5hc3B4IiwgIlZTRSIpOwogICAgICAgICAgICAgICAgICAgIGhhdC51cGRhdGVDaGFuZ2VN
b3JlSXRlbSg1LCAiV1NKIEluZGlhIiwgImh0dHA6Ly9pbmRpYS53c2ouY29tIiwgIklORCIpOwog
ICAgICAgICAgICAgICAgICAgIGhhdC51cGRhdGVDaGFuZ2VNb3JlSXRlbSg2LCAiV1NKIFBvcnR1
Z3Vlc2UiLCAiaHR0cDovL29ubGluZS53c2ouY29tL3BvcnR1Z3Vlc2UiLCAiUE9SIik7CiAgICAg
ICAgICAgICAgICAgICAgaGF0LnVwZGF0ZUNoYW5nZU1vcmVJdGVtKDcsICJXU0ogU3BhbmlzaCIs
ICJodHRwOi8vb25saW5lLndzai5jb20vYW1lcmljYXMiLCAiU1BBIik7CiAgICAgICAgICAgICAg
ICAgICAgaGF0LnVwZGF0ZUNoYW5nZU1vcmVJdGVtKDgsICJXU0ogQ2hpbmVzZSIsICJodHRwOi8v
Y24ud3NqLmNvbS9nYi9pbmRleC5hc3AiLCAiQ0hJIik7CiAgICAgICAgICAgICAgICAgICAgaGF0
LnVwZGF0ZUNoYW5nZU1vcmVJdGVtKDksICJXU0ogSmFwYW5lc2UiLCAiaHR0cDovL2pwLndzai5j
b20vIiwgIkpQTiIpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWMp
IHsKICAgICAgICAgICAgICAgIGhhdC51cGRhdGVDaGFuZ2VUYWIoMSwgIiIsICJodHRwOi8vb25s
aW5lLndzai5jb20vaG9tZSIsICJXU0oiKTsKICAgICAgICAgICAgICAgIGhhdC51cGRhdGVDaGFu
Z2VUYWIoMiwgIiIsICJodHRwOi8vd3d3Lm1hcmtldHdhdGNoLmNvbS8iLCAiTVciKTsKICAgICAg
ICAgICAgICAgIGhhdC51cGRhdGVDaGFuZ2VUYWIoMywgIiIsICJodHRwOi8vb25saW5lLmJhcnJv
bnMuY29tL2hvbWUiLCAiQk9MIik7CiAgICAgICAgICAgICAgICBoYXQudXBkYXRlQ2hhbmdlVGFi
KDQsICIiLCAiaHR0cDovL2FsbHRoaW5nc2QuY29tLyIsICJBVEQiKTsKICAgICAgICAgICAgICAg
IGhhdC51cGRhdGVDaGFuZ2VUYWIoNiwgIiIsICJodHRwOi8vd3d3LmZpbnMuY29tL0ZpbmFuY2Ut
Sm9icyIsICJGSU5TIiwgMCwgIkZpbmFuY2UgJiBBY2NvdW50aW5nIEpvYnMiKTsKICAgICAgICAg
ICAgICAgIGhhdC51cGRhdGVDaGFuZ2VUYWIoNywgIiIsICJodHRwOi8vd3d3LnNtYXJ0bW9uZXku
Y29tIiwgIlNNIik7CiAgICAgICAgICAgICAgICBoYXQudXBkYXRlQ2hhbmdlTW9yZUl0ZW0oMSwg
IkJpZ0NoYXJ0cyIsICJodHRwOi8vYmlnY2hhcnRzLm1hcmtldHdhdGNoLmNvbS8iLCAiQkMiKTsK
ICAgICAgICAgICAgICAgIGhhdC51cGRhdGVDaGFuZ2VNb3JlSXRlbSgyLCAiVmlydHVhbCBTdG9j
ayBFeGNoYW5nZSIsICJodHRwOi8vdnNlLm1hcmtldHdhdGNoLmNvbS9HYW1lL0hvbWVwYWdlLmFz
cHgiLCAiVlNFIik7CiAgICAgICAgICAgICAgICBoYXQudXBkYXRlQ2hhbmdlTW9yZUl0ZW0oMywg
IldTSiBBc2lhIiwgImh0dHA6Ly9hc2lhLndzai5jb20vIiwgIkFTSUEiKTsKICAgICAgICAgICAg
ICAgIGhhdC51cGRhdGVDaGFuZ2VNb3JlSXRlbSg0LCAiV1NKIEV1cm9wZSIsICJodHRwOi8vZXVy
b3BlLndzai5jb20vIiwgIkVVUiIpOwogICAgICAgICAgICAgICAgaGF0LnVwZGF0ZUNoYW5nZU1v
cmVJdGVtKDUsICJXU0ogUG9ydHVndWVzZSIsICJodHRwOi8vb25saW5lLndzai5jb20vcG9ydHVn
dWVzZSIsICJQT1IiKTsKICAgICAgICAgICAgICAgIGhhdC51cGRhdGVDaGFuZ2VNb3JlSXRlbSg2
LCAiV1NKIFNwYW5pc2giLCAiaHR0cDovL29ubGluZS53c2ouY29tL2FtZXJpY2FzIiwgIlNQQSIp
OwogICAgICAgICAgICAgICAgaGF0LnVwZGF0ZUNoYW5nZU1vcmVJdGVtKDcsICJXU0ogQ2hpbmVz
ZSIsICJodHRwOi8vY24ud3NqLmNvbS9nYi9pbmRleC5hc3AiLCAiQ0hJIik7CiAgICAgICAgICAg
ICAgICBoYXQudXBkYXRlQ2hhbmdlTW9yZUl0ZW0oOCwgIldTSiBKYXBhbmVzZSIsICJodHRwOi8v
anAud3NqLmNvbS8iLCAiSlBOIik7CiAgICAgICAgICAgICAgICBoYXQudXBkYXRlQ2hhbmdlTW9y
ZUl0ZW0oOSwgIldTSiBSYWRpbyIsICJodHRwOi8vd3d3LndzanJhZGlvLmNvbSIsICJXUkFEIik7
CiAgICAgICAgICAgICAgICBoYXQudXBkYXRlQ2hhbmdlTW9yZUl0ZW0oMTAsICJGaW5hbmNpYWwg
TmV3cyIsICJodHRwOi8vd3d3LmVmaW5hbmNpYWxuZXdzLmNvbS8iLCAiRk5PIik7CiAgICAgICAg
ICAgICAgICBoYXQudXBkYXRlQ2hhbmdlTW9yZUl0ZW0oMTMsICJXU0p3aW5lIiwgImh0dHA6Ly93
d3cud3Nqd2luZS5jb20vICIsICJXSU5FIiwgImhhdF9kcm9wX2l0ZW0gaGF0X2Ryb3BfaXRlbV9s
aWZlc3R5bGUiLCAid2luZSIpCiAgICAgICAgICAgIH0KICAgICAgICAgICAgaGF0LnVwZGF0ZVNo
b3dIYXQoKQogICAgICAgIH0gY2F0Y2ggKGYpIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcigi
aGF0LnVwZGF0ZTogIiArIGYpCiAgICAgICAgfQogICAgfSwKICAgIGhhdE1heEluaXRQb2xsaW5n
OiAyMDAsCiAgICBpbml0OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAg
aWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYXRfZGl2IikgJiYgaGF0ICYmIHR5cGVvZiBo
YXQudXBkYXRlID09PSAiZnVuY3Rpb24iKSBoYXQudXBkYXRlKCk7CiAgICAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgICAgaGF0LmhhdE1heEluaXRQb2xsaW5nLS07CiAgICAgICAgICAgICAg
ICBoYXQuaGF0TWF4SW5pdFBvbGxpbmcgPiAwICYmIHNldFRpbWVvdXQoaGF0LmluaXQsIDUwKQog
ICAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoYSkgewogICAgICAgICAgICBjb25zb2xlLmVy
cm9yKCJoYXQuaW5pdDogIiArIGEpCiAgICAgICAgfQogICAgfQp9OwpoYXQuaW5pdCgpOwpkb2pv
LnByb3ZpZGUoImRqLndpZGdldC5uZXR3b3JrSGF0LkF1dG9Db21wbGV0ZSIpOwpkb2pvLnJlcXVp
cmUoImRqLndpZGdldC5uZXR3b3JrSGF0LmhhdCIpOwpkb2pvLnJlcXVpcmUoImRqLndpZGdldC5u
ZXR3b3JrSGF0LmluZm9jb21wbGV0ZSIpOwpkb2pvLnJlcXVpcmUoImRqLmxhbmciKTsKZG9qby5n
ZXRPYmplY3QoImRqLmNvbnRleHQubmV0d29ya0hhdCIsIHRydWUpOwooZnVuY3Rpb24gKCkgewog
ICAgdmFyIGEgPSBkai53aWRnZXQubmV0d29ya0hhdDsKICAgIChhLkF1dG9Db21wbGV0ZSA9IGZ1
bmN0aW9uICgpIHsKICAgICAgICB0aGlzLmQgPSBkb2N1bWVudDsKICAgICAgICB0aGlzLmNkbkRv
bWFpbiA9IGRqLmNvbnRleHQuY29yZS5jZG5QcmVmaXg7CiAgICAgICAgdGhpcy51UCA9ICIiOwog
ICAgICAgIGlmICh0eXBlb2YgdVAgIT0gInVuZGVmaW5lZCIpIHRoaXMudVAgPSB1UDsKICAgICAg
ICB2YXIgYiA9IG5ldyBEYXRlOwogICAgICAgIGIgPSAiIiArIGIuZ2V0RnVsbFllYXIoKSArIGIu
Z2V0TW9udGgoKSArIGIuZ2V0RGF5KCk7CiAgICAgICAgdGhpcy5qU2NyaXB0ID0gdGhpcy5kLmxv
Y2F0aW9uLmhvc3QuaW5kZXhPZigicy5kZXYiKSAhPSAtMSB8fCB0aGlzLmQubG9jYXRpb24uaG9z
dC5pbmRleE9mKCJpZGV2IikgIT0gLTEgPyB0aGlzLnVQICsgIi9kanNjcmlwdC9qX25ldHdvcmtI
YXQtIiArIGIgKyAiLmpzIiA6IHRoaXMuY2RuRG9tYWluICsgIi9kanNjcmlwdC9qX25ldHdvcmtI
YXQtIiArIGIgKyAiLmpzIjsKICAgICAgICB0aGlzLmQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImRp
diIpWzBdLmNsYXNzTmFtZS5pbmRleE9mKCJzdWJUeXBlLXN1YnNjcmliZWQiKTsKICAgICAgICB0
aGlzLmlucHV0RGVmYXVsdFRleHQgPSAiTmV3cywgUXVvdGVzLCBDb21wYW5pZXMsIFZpZGVvcyI7
CiAgICAgICAgYiA9IGRvam8uYnlJZCgiaGF0X2RpdiIpOwogICAgICAgIHRoaXMub0hhdElucHV0
ID0gZG9qby5ieUlkKCJoYXRfaW5wdXRfYXV0byIpOwogICAgICAgIHZhciBjID0gZG9qby5xdWVy
eSgiLmhhdF9zZWxlY3QiLCBiKSwKICAgICAgICAgICAgZCA9IGRvam8ucXVlcnkoIi5oYXRfZHJv
cF9pdGVtIiwgYiksCiAgICAgICAgICAgIGUgPSBkb2pvLnF1ZXJ5KCIuaGF0X3RhYiIsIGIpLAog
ICAgICAgICAgICBmID0gZG9qby5ieUlkKCJoYXRfbW9yZV9tZW51Iik7CiAgICAgICAgaWYgKGRv
am8uaXNJRSAmJiAodGhpcy5kLmRvbWFpbi5pbmRleE9mKCJkcy5zYXQud3NqLmNvbSIpICE9IC0x
IHx8IHRoaXMuZC5kb21haW4uaW5kZXhPZigiZHMud3NqLmNvbSIpICE9IC0xKSkgZGoudXRpbC5V
cmwuYWRkU3R5bGVzaGVldCgiaHR0cDovL3Mud3NqLm5ldC9jc3MvaGF0SUVQb3J0Zm9saW8uY3Nz
Iik7CiAgICAgICAgZG9qby5zdHlsZShiLCB7CiAgICAgICAgICAgIHdpZHRoOiAiOTg5cHgiLAog
ICAgICAgICAgICBoZWlnaHQ6ICIzNXB4IiwKICAgICAgICAgICAgcG9zaXRpb246ICJyZWxhdGl2
ZSIsCiAgICAgICAgICAgIHpJbmRleDogOTk5OTk5CiAgICAgICAgfSk7CiAgICAgICAgZG9qby5z
dHlsZShmLCB7CiAgICAgICAgICAgIHdpZHRoOiAiMTU1cHgiCiAgICAgICAgfSk7CiAgICAgICAg
ZS5mb3JFYWNoKGZ1bmN0aW9uIChsKSB7CiAgICAgICAgICAgIGlmICghZG9qby5oYXNDbGFzcyhs
LCAiaGF0X3NlbGVjdCIpKSB7CiAgICAgICAgICAgICAgICBkb2pvLmNvbm5lY3QobCwgIm9ubW91
c2VvdmVyIiwgbnVsbCwgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgIHR5cGVvZiBo
YXQgIT09ICJ1bmRlZmluZWQiICYmIGhhdC50YWJvdmVyKHRoaXMpCiAgICAgICAgICAgICAgICB9
KTsKICAgICAgICAgICAgICAgIGRvam8uY29ubmVjdChsLCAib25tb3VzZW91dCIsIG51bGwsIGZ1
bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaGF0ICE9PSAidW5kZWZpbmVk
IiAmJiBoYXQudGFib3V0KHRoaXMpCiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICB9CiAg
ICAgICAgfSk7CiAgICAgICAgYy5jb25uZWN0KCJvbm1vdXNlb3ZlciIsIG51bGwsIGZ1bmN0aW9u
ICgpIHsKICAgICAgICAgICAgdHlwZW9mIGhhdCAhPT0gInVuZGVmaW5lZCIgJiYgaGF0Lm1vcmVt
ZW51KCkKICAgICAgICB9KTsKICAgICAgICBjLmNvbm5lY3QoIm9ubW91c2VvdXQiLCBudWxsLCBm
dW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHR5cGVvZiBoYXQgIT09ICJ1bmRlZmluZWQiICYmIGhh
dC5tb3JlbWVudWhpZGUoKQogICAgICAgIH0pOwogICAgICAgIGQuY29ubmVjdCgib25tb3VzZW92
ZXIiLCBudWxsLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHR5cGVvZiBoYXQgIT09ICJ1bmRl
ZmluZWQiICYmIGhhdC5tZW51b3Zlcih0aGlzKQogICAgICAgIH0pOwogICAgICAgIGQuY29ubmVj
dCgib25tb3VzZW91dCIsIG51bGwsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdHlwZW9mIGhh
dCAhPT0gInVuZGVmaW5lZCIgJiYgaGF0Lm1lbnVvdXQodGhpcykKICAgICAgICB9KTsKICAgICAg
ICB0aGlzLm9uZm9jdXNMb2FkID0gZG9qby5jb25uZWN0KHRoaXMub0hhdElucHV0LCAib25mb2N1
cyIsIHRoaXMsIHRoaXMub25IYXRMb2FkKTsKICAgICAgICB0aGlzLm9ubW91c2VvdmVyTG9hZCA9
IGRvam8uY29ubmVjdCh0aGlzLm9IYXRJbnB1dCwgIm9ubW91c2VvdmVyIiwgdGhpcywgdGhpcy5v
bkhhdExvYWQpOwogICAgICAgIHRoaXMub25jbGlja0NsZWFyID0gZG9qby5jb25uZWN0KHRoaXMu
b0hhdElucHV0LCAib25jbGljayIsIHRoaXMsIHRoaXMuY2xlYXJGaWVsZCk7CiAgICAgICAgdGhp
cy5vbmtleWRvd25DbGVhciA9IGRvam8uY29ubmVjdCh0aGlzLm9IYXRJbnB1dCwgIm9ua2V5ZG93
biIsIHRoaXMsIHRoaXMuY2xlYXJGaWVsZCk7CiAgICAgICAgaWYgKHRoaXMub0hhdElucHV0LnZh
bHVlICE9PSAiIiAmJiB0aGlzLm9IYXRJbnB1dC52YWx1ZSAhPSB0aGlzLmlucHV0RGVmYXVsdFRl
eHQgfHwgZGouY29udGV4dC5uZXR3b3JrSGF0LmpuZXR3b3JrSGF0SnNMb2FkZWQpIHRoaXMub25I
YXRMb2FkKCk7CiAgICAgICAgdGhpcy5zZXRGaWVsZERlZmF1bHQoKQogICAgfSkucHJvdG90eXBl
ID0gewogICAgICAgIHNldEZpZWxkRGVmYXVsdDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICBp
ZiAodGhpcy5vSGF0SW5wdXQudmFsdWUgPT09ICIiKSB7CiAgICAgICAgICAgICAgICB0aGlzLm9I
YXRJbnB1dC52YWx1ZSA9IHRoaXMuaW5wdXREZWZhdWx0VGV4dDsKICAgICAgICAgICAgICAgIGRv
am8uYWRkQ2xhc3ModGhpcy5vSGF0SW5wdXQsICJ1blVzZWQiKQogICAgICAgICAgICB9CiAgICAg
ICAgfSwKICAgICAgICBjbGVhckZpZWxkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHRoaXMu
c3RvcE9ic2VydmluZ0NsaWNrKCk7CiAgICAgICAgICAgIGlmIChkb2pvLmhhc0NsYXNzKHRoaXMu
b0hhdElucHV0LCAidW5Vc2VkIikpIHRoaXMub0hhdElucHV0LnZhbHVlID0gIiI7CiAgICAgICAg
ICAgIGRvam8ucmVtb3ZlQ2xhc3ModGhpcy5vSGF0SW5wdXQsICJ1blVzZWQiKQogICAgICAgIH0s
CiAgICAgICAgc3RvcE9ic2VydmluZ0NsaWNrOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIGRv
am8uZGlzY29ubmVjdCh0aGlzLm9uY2xpY2tDbGVhcik7CiAgICAgICAgICAgIGRvam8uZGlzY29u
bmVjdCh0aGlzLm9ua2V5ZG93bkNsZWFyKQogICAgICAgIH0sCiAgICAgICAgb25IYXRMb2FkOiBm
dW5jdGlvbiAoKSB7CiAgICAgICAgICAgIGRvam8uZGlzY29ubmVjdCh0aGlzLm9uZm9jdXNMb2Fk
KTsKICAgICAgICAgICAgZG9qby5kaXNjb25uZWN0KHRoaXMub25tb3VzZW92ZXJMb2FkKTsKICAg
ICAgICAgICAgaWYgKGRqLmNvbnRleHQubmV0d29ya0hhdC5qbmV0d29ya0hhdEpzTG9hZGVkKSB0
aGlzLmluaXRJbmZvQ29tcGxldGUoKTsKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAg
ICB2YXIgYjsKICAgICAgICAgICAgICAgIGlmICghdGhpcy5kLmdldEVsZW1lbnRzQnlUYWdOYW1l
KCJoZWFkIikpIHsKICAgICAgICAgICAgICAgICAgICBiID0gbmV3IEVsZW1lbnQoImhlYWQiKTsK
ICAgICAgICAgICAgICAgICAgICB0aGlzLmQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVsw
XS5hcHBlbmRDaGlsZChiKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhpcy5q
c05vZGUgPSB0aGlzLmxvYWRBdXRvQ29tcGxldGVTY3JpcHQodGhpcy5qU2NyaXB0KQogICAgICAg
ICAgICB9CiAgICAgICAgfSwKICAgICAgICBsb2FkQXV0b0NvbXBsZXRlU2NyaXB0OiBmdW5jdGlv
biAoYikgewogICAgICAgICAgICB2YXIgYyA9IHRoaXMuZC5jcmVhdGVFbGVtZW50KCJzY3JpcHQi
KTsKICAgICAgICAgICAgYy50eXBlID0gInRleHQvamF2YXNjcmlwdCI7CiAgICAgICAgICAgIGMu
c3JjID0gYjsKICAgICAgICAgICAgaWYgKHRoaXMuZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVh
ZCIpLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICAgICAgYiA9IHRoaXMuZC5jcmVhdGVFbGVt
ZW50KCJoZWFkIik7CiAgICAgICAgICAgICAgICB0aGlzLmQuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
Imh0bWwiKVswXS5hcHBlbmRDaGlsZChiKQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMu
ZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLmFwcGVuZENoaWxkKGMpOwogICAgICAg
ICAgICByZXR1cm4gYwogICAgICAgIH0sCiAgICAgICAgaW5pdEluZm9Db21wbGV0ZTogZnVuY3Rp
b24gKCkgewogICAgICAgICAgICBpZiAoZG9qby5pc0lFICYmICh0aGlzLmQuZG9tYWluLmluZGV4
T2YoImRzLnNhdC53c2ouY29tIikgIT0gLTEgfHwgdGhpcy5kLmRvbWFpbi5pbmRleE9mKCJkcy53
c2ouY29tIikgIT0gLTEpKSBkai51dGlsLlVybC5hZGRTdHlsZXNoZWV0KCJodHRwOi8vcy53c2ou
bmV0L2Nzcy9oYXRJRVBvcnRmb2xpby5jc3MiKTsKICAgICAgICAgICAgaW5pdEluZm9Db21wbGV0
ZSgpOwogICAgICAgICAgICB0aGlzLnN0b3BPYnNlcnZpbmdDbGljaygpOwogICAgICAgICAgICBk
b2pvLmNvbm5lY3QodGhpcy5vSGF0SW5wdXQsICJvbmZvY3VzIiwgbnVsbCwgZnVuY3Rpb24gKCkg
ewogICAgICAgICAgICAgICAgdGhpcy5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSAidXJsKCdodHRw
Oi8vcy53c2oubmV0L2ltZy9iLmdpZicpIjsKICAgICAgICAgICAgICAgIHNlYXJjaEZpZWxkT25G
b2N1cyh0aGlzKTsKICAgICAgICAgICAgICAgIHNldEZvY3VzZWQodGhpcykKICAgICAgICAgICAg
fSk7CiAgICAgICAgICAgIGRvam8uY29ubmVjdCh0aGlzLm9IYXRJbnB1dCwgIm9ua2V5cHJlc3Mi
LCBudWxsLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBzaG93SGlkZUNSRHJwZHduKCJo
aWRlIikKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGRvam8uY29ubmVjdCh0aGlzLm9IYXRJ
bnB1dCwgIm9uYmx1ciIsIG51bGwsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHNob3dI
aWRlQ1JEcnBkd24oInNob3ciKQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdmFyIGIgPSB0
aGlzLm9IYXRJbnB1dC52YWx1ZTsKICAgICAgICAgICAgYiAmJiBiICE9IHRoaXMuaW5wdXREZWZh
dWx0VGV4dCAmJiBJbmZvQ29tcGxldGUuYXV0b0NvbXBsZXRlLnNlbmRRdWVyeShiKQogICAgICAg
IH0KICAgIH0KfSkoKTsKZG9qby5wcm92aWRlKCJkai5tb2R1bGUuY2Fyb3VzZWxTZWN0aW9uIik7
CmRvam8ucmVxdWlyZSgiZGoud2lkZ2V0LnBhbmVscy52aXJ0dWFsLkNhcm91c2VsIik7CmRvam8u
YWRkT25Mb2FkKGZ1bmN0aW9uICgpIHsKICAgIGRqLm1vZHVsZS5jYXJvdXNlbFNlY3Rpb24gPSBk
ai53aWRnZXQucGFuZWxzLlBhbmVsc0ZhY3RvcnkuY3JlYXRlKCJjYXJvdXNlbFNlY3Rpb24iLCB7
CiAgICAgICAgY29yZTogewogICAgICAgICAgICBwYW5lbEdyb3VwOiAiLm5ld3NJdGVtIiwKICAg
ICAgICAgICAgcGFuZWw6ICJsaSIsCiAgICAgICAgICAgIHBhZ2luYXRpb25Db250YWluZXI6ICIu
cGFnaW5hdGlvbiIsCiAgICAgICAgICAgIHZpZXdwb3J0OiAyCiAgICAgICAgfSwKICAgICAgICBj
YXJvdXNlbDogewogICAgICAgICAgICBwcmV2QnV0dG9uOiAiLm5hdi1pbmxpbmUgLnByZXYiLAog
ICAgICAgICAgICBuZXh0QnV0dG9uOiAiLm5hdi1pbmxpbmUgLm5leHQiCiAgICAgICAgfSwKICAg
ICAgICByb3RhdG9yOiB7CiAgICAgICAgICAgIHJvdGF0ZVRpbWU6IDEwCiAgICAgICAgfQogICAg
fSk7Cn0pOwpkb2pvLnByb3ZpZGUoImRqLm1vZHVsZS5jaGFydGJlYXQiKTsKZG9qby5yZXF1aXJl
KCJkai51dGlsLmlvIik7CmRqLm1vZHVsZS5jaGFydGJlYXQgPSB7CiAgICBpbml0OiBmdW5jdGlv
biAoKSB7CiAgICAgICAgdmFyIGNhbm9uaWNhbFVybCA9ICIiOwogICAgICAgIHZhciBsaW5rQXJy
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKTsKICAgICAgICBpZiAobGlu
a0FyciAhPSAndW5kZWZpbmVkJyAmJiBsaW5rQXJyLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAg
Zm9yIChjb3VudCA9IDA7IGNvdW50IDwgbGlua0Fyci5sZW5ndGg7IGNvdW50KyspIHsKICAgICAg
ICAgICAgICAgIGlmIChsaW5rQXJyW2NvdW50XS5yZWwgPT09ICdjYW5vbmljYWwnKSB7CiAgICAg
ICAgICAgICAgICAgICAgY2Fub25pY2FsVXJsID0gbGlua0Fycltjb3VudF0uaHJlZjsKICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAg
ICAgIH0KICAgICAgICB2YXIgZG9tYWluUHJlZml4ID0gZGouY29udGV4dC5jb3JlLnVybFByZWZp
eDsKICAgICAgICB2YXIgaW5kZXggPSBjYW5vbmljYWxVcmwuaW5kZXhPZigiLmNvbSIpICsgNDsK
ICAgICAgICB2YXIgY2Fub25pY2FsU3VmZml4ID0gY2Fub25pY2FsVXJsLnN1YnN0cmluZyhpbmRl
eCk7CiAgICAgICAgdmFyIGh0dHAgPSAiaHR0cDovLyI7CiAgICAgICAgdmFyIGRvbWFpbk5hbWUg
PSBkb21haW5QcmVmaXguc3Vic3RyaW5nKGh0dHAubGVuZ3RoKTsKICAgICAgICB3aW5kb3cuX3Nm
X2FzeW5jX2NvbmZpZyA9IHsKICAgICAgICAgICAgdWlkOiA4OTAwLAogICAgICAgICAgICBkb21h
aW46IGRvbWFpbk5hbWUsCiAgICAgICAgICAgIHBhdGg6IGNhbm9uaWNhbFN1ZmZpeCwKICAgICAg
ICAgICAgc2VjdGlvbnM6IHMucHJvcDIKICAgICAgICB9OwogICAgICAgIHdpbmRvdy5fc2ZfZW5k
cHQgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpOwogICAgICAgIGRqLnV0aWwuaW8uaW5zZXJ0U2Ny
aXB0QXN5bmMoKCgiaHR0cHM6IiA9PSBkb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbCkgPyAiaHR0
cHM6Ly9zMy5hbWF6b25hd3MuY29tLyIgOiAiaHR0cDovLyIpICsgInN0YXRpYy5jaGFydGJlYXQu
Y29tL2pzL2NoYXJ0YmVhdC5qcyIpOwogICAgfQp9Owpkb2pvLnByb3ZpZGUoImRqLm1vZHVsZS5t
b3N0UG9wdWxhclRhYiIpOwpkb2pvLnJlcXVpcmUoImRqLndpZGdldC5wYW5lbHMudmlydHVhbC5U
YWJzIik7CmRqLm1vZHVsZS5tb3N0UG9wdWxhclRhYiA9IHsKICAgIGluaXQ6IGZ1bmN0aW9uIChj
b3JlT3B0aW9ucykgewogICAgICAgIHZhciBfdGFiSWRzID0gWyJtb3N0UmVhZCIsICJtb3N0RW1h
aWxlZCIsICJtb3N0UG9wdWxhclZpZGVvIiwgIm1vc3RDb21tZW50ZWQiLCAibW9zdFNlYXJjaGVk
Il07CiAgICAgICAgdmFyIHBubENvbmYgPSB7CiAgICAgICAgICAgIGNvcmU6IHsKICAgICAgICAg
ICAgICAgIHBhbmVsUHJlZml4OiAibW9zdFBvcHVsYXJUYWJfcGFuZWxfIiwKICAgICAgICAgICAg
ICAgIHBhbmVsczogX3RhYklkcwogICAgICAgICAgICB9LAogICAgICAgICAgICB0YWJzOiB7CiAg
ICAgICAgICAgICAgICB0YWJQcmVmaXg6ICJtb3N0UG9wdWxhclRhYl90YWJfIiwKICAgICAgICAg
ICAgICAgIHRhYk9uU3R5bGU6ICJzZWxlY3RlZFRhYiIsCiAgICAgICAgICAgICAgICB0YWJPZmZT
dHlsZTogImRlc2VsZWN0ZWQiCiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIGlmIChj
b3JlT3B0aW9ucykgewogICAgICAgICAgICBwbmxDb25mLmNvcmUgPSBkb2pvLm1peGluKHBubENv
bmYuY29yZSwgY29yZU9wdGlvbnMpOwogICAgICAgIH0KICAgICAgICB0aGlzLnBubCA9IGRqLndp
ZGdldC5wYW5lbHMuUGFuZWxzRmFjdG9yeS5jcmVhdGUoIm1vc3RQb3B1bGFyVGFiIiwgcG5sQ29u
Zik7CiAgICAgICAgdmFyIHRoYXQgPSB0aGlzOwogICAgICAgIHZhciBwbmxSc3NDb25mID0gewog
ICAgICAgICAgICBjb3JlOiB7CiAgICAgICAgICAgICAgICBwYW5lbFByZWZpeDogIm1vc3RQb3B1
bGFyVGFiX3Jzc1BhbmVsXyIsCiAgICAgICAgICAgICAgICBwYW5lbHM6IF90YWJJZHMsCiAgICAg
ICAgICAgICAgICBjb250cm9sbGVyOiB0aGF0LnBubAogICAgICAgICAgICB9CiAgICAgICAgfTsK
ICAgICAgICBpZiAoY29yZU9wdGlvbnMpIHsKICAgICAgICAgICAgcG5sUnNzQ29uZi5jb3JlID0g
ZG9qby5taXhpbihwbmxSc3NDb25mLmNvcmUsIGNvcmVPcHRpb25zKTsKICAgICAgICB9CiAgICAg
ICAgdGhpcy5wbmxSc3MgPSBkai53aWRnZXQucGFuZWxzLlBhbmVsc0ZhY3RvcnkuY3JlYXRlKCJt
b3N0UG9wdWxhclRhYiIsIHBubFJzc0NvbmYpOwogICAgfQp9Owpkb2pvLnByb3ZpZGUoImRqLm1v
ZHVsZS5uZXdzVGlja2VyIik7CmRvam8ucmVxdWlyZSgiZGoud2lkZ2V0LnBhbmVscy52aXJ0dWFs
LkNhcm91c2VsIik7CmRqLm1vZHVsZS5uZXdzVGlja2VyID0gewogICAgaW5pdDogZnVuY3Rpb24g
KGNvbmZpZykgewogICAgICAgIGlmICh0eXBlb2YgdGhpcy50aWNrZXIgPT0gIm9iamVjdCIpIHsK
ICAgICAgICAgICAgdGhpcy50aWNrZXIudXBkYXRlKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgdGhpcy50aWNrZXIgPSB0aGlzLmNyZWF0ZVRpY2tlcihjb25maWcpOwogICAgICAgIH0K
ICAgIH0sCiAgICBjcmVhdGVUaWNrZXI6IGZ1bmN0aW9uIChjb25maWcpIHsKICAgICAgICB2YXIg
Y2ZnID0gZG9qby5kZWVwTWl4aW4oewogICAgICAgICAgICBjb250YWluZXI6ICJuZXdzVGlja2Vy
IiwKICAgICAgICAgICAgYXNzYXNzaW5Db250YWluZXI6ICJ0b3BCYW5uZXIiLAogICAgICAgICAg
ICBjb250YWluZXJDbGFzczogImhlYWRsaW5lU3VtbWFyeSBuZXdzVGlja2VyIgogICAgICAgIH0s
IGNvbmZpZyk7CiAgICAgICAgdmFyIGNvbnRhaW5lck5vZGUgPSBkb2pvLmJ5SWQoY2ZnLmNvbnRh
aW5lcik7CiAgICAgICAgY29udGFpbmVyTm9kZS5jbGFzc05hbWUgPSBjZmcuY29udGFpbmVyQ2xh
c3M7CiAgICAgICAgdmFyIHRpY2tlciA9IGRqLndpZGdldC5wYW5lbHMuUGFuZWxzRmFjdG9yeS5j
cmVhdGUoY29udGFpbmVyTm9kZSwgewogICAgICAgICAgICBjYXJvdXNlbDogewogICAgICAgICAg
ICAgICAgdHlwZTogImNpcmN1bGFyIiwKICAgICAgICAgICAgICAgIHByZXZCdXR0b25FbmFibGVk
U3R5bGU6ICIiLAogICAgICAgICAgICAgICAgbmV4dEJ1dHRvbkVuYWJsZWRTdHlsZTogIiIKICAg
ICAgICAgICAgfSwKICAgICAgICAgICAgcm90YXRvcjogewogICAgICAgICAgICAgICAgcm90YXRl
VGltZTogOAogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHRpY2tlcjsK
ICAgIH0KfTsKZG9qby5wcm92aWRlKCJkai5tb2R1bGUucnNzQmxvZ1RpbWVzIik7CmRvam8ucmVx
dWlyZSgiZGoudXRpbC5FbGVtZW50Iik7CmRqLm1vZHVsZS5yc3NCbG9nVGltZXMgPSB7CiAgICBp
bml0OiBmdW5jdGlvbiAoZ2V0Q2xhc3NlcykgewogICAgICAgIHZhciB0aW1lU3RhbXBzID0gZG9q
by5xdWVyeShnZXRDbGFzc2VzKTsKICAgICAgICBpZiAodGltZVN0YW1wcy5sZW5ndGggPT09IDAp
IHsKICAgICAgICAgICAgY29uc29sZS5sb2coIntkai5tb2R1bGUueHNsVGltZXN0YW1wfSBubyB0
aW1lc3RhbXBzIGZvdW5kLiIpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAg
IGZvciAodmFyIGkgPSAwLCB0aW1lU3RhbXA7IHRpbWVTdGFtcCA9IHRpbWVTdGFtcHNbaSsrXTsp
IHsKICAgICAgICAgICAgdGltZVN0YW1wID0gZGoudXRpbC5FbGVtZW50LmNsZWFuV2hpdGVzcGFj
ZSh0aW1lU3RhbXApOwogICAgICAgICAgICB2YXIgZHVyID0gdGhpcy5jYWxjdWxhdGVEdXJhdGlv
bihkb2pvLnRyaW0odGltZVN0YW1wLmlubmVySFRNTCkpOwogICAgICAgICAgICBkb2pvLmVtcHR5
KHRpbWVTdGFtcCk7CiAgICAgICAgICAgIHRpbWVTdGFtcC5pbm5lckhUTUwgPSBkdXI7CiAgICAg
ICAgfQogICAgfSwKICAgIGNhbGN1bGF0ZUR1cmF0aW9uOiBmdW5jdGlvbiAoZ2V0UHViRGF0ZSkg
ewogICAgICAgIHZhciB0b2RheSA9IG5ldyBEYXRlKCk7CiAgICAgICAgdmFyIG5ld0RhdGUgPSBu
ZXcgRGF0ZShnZXRQdWJEYXRlKTsKICAgICAgICB2YXIgZ2V0VGltZURJZmYgPSBNYXRoLmNlaWwo
dG9kYXkuZ2V0VGltZSgpIC0gbmV3RGF0ZS5nZXRUaW1lKCkpOwogICAgICAgIHZhciBvbmVfbWlu
ID0gMTAwMCAqIDYwOwogICAgICAgIHZhciBnZXRNaW5zID0gTWF0aC5jZWlsKGdldFRpbWVESWZm
IC8gb25lX21pbik7CiAgICAgICAgdmFyIGdldE91dHB1dCA9ICcnOwogICAgICAgIGlmIChnZXRN
aW5zIDwgMSkgewogICAgICAgICAgICBnZXRPdXRwdXQgPSAiMSBtaW4gYWdvIjsKICAgICAgICB9
IGVsc2UgaWYgKGdldE1pbnMgPCA1OSkgewogICAgICAgICAgICBnZXRPdXRwdXQgPSAiNiBtaW5z
IGFnbyI7CiAgICAgICAgfSBlbHNlIGlmIChnZXRNaW5zID4gNjAgJiYgZ2V0TWlucyA8IDI0MCkg
ewogICAgICAgICAgICB2YXIgZ2V0SHJzID0gbmV3RGF0ZS5nZXRIb3VycygpOwogICAgICAgICAg
ICB2YXIgZ2V0QU1QTSA9ICIiOwogICAgICAgICAgICBpZiAoZ2V0SHJzIDw9IDEyKSB7CiAgICAg
ICAgICAgICAgICBnZXRBTVBNID0gIiBhbSI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICBnZXRIcnMgPSAoZ2V0SHJzIC0gMTIpOwogICAgICAgICAgICAgICAgZ2V0QU1QTSA9
ICIgcG0iOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGdldE91dHB1dCA9IG5ld0RhdGUuZ2V0
SG91cnMoKSArICI6IiArIG5ld0RhdGUuZ2V0TWludXRlcygpICsgZ2V0QU1QTTsKICAgICAgICB9
CiAgICAgICAgcmV0dXJuIChnZXRPdXRwdXQgPT09ICcnKSA/IG51bGwgOiBnZXRPdXRwdXQ7CiAg
ICB9Cn07CmRvam8ucHJvdmlkZSgiZGoubW9kdWxlLmFzc2FzaW5Nb2R1bGUiKTsKZG9qby5yZXF1
aXJlKCJkai51dGlsLkVsZW1lbnQiKTsKZG9qby5yZXF1aXJlKCJkai53aWRnZXQudmlkZW8uVmlk
ZW8iKTsKZG9qby5yZXF1aXJlKCJkai53aWRnZXQuZmxhc2guRmxhc2giKTsKZGoubW9kdWxlLmFz
c2FzaW5Nb2R1bGUgPSB7CiAgICBpbml0OiBmdW5jdGlvbiAoZmxhc2hOYW1lc3BhY2UpIHsKICAg
ICAgICBpZiAodHlwZW9mIGZsYXNoTmFtZXNwYWNlID09ICd1bmRlZmluZWQnKSB7CiAgICAgICAg
ICAgIGZsYXNoTmFtZXNwYWNlID0gJyc7CiAgICAgICAgfQogICAgICAgIHZhciBjbnQgPSBkb2pv
LnF1ZXJ5KCcudmlNb2R1bGUgW2lkXj1hc3Nhc2luTWVkaWFdJyk7CiAgICAgICAgaWYgKGNudCA9
PT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGZvciAodmFy
IGluZGV4ID0gMCwgbGVuZ3RoID0gY250Lmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7ICsraW5kZXgp
IHsKICAgICAgICAgICAgdmFyIHQgPSBjbnRbaW5kZXhdLmNsYXNzTmFtZS5zcGxpdCgnOjonKTsK
ICAgICAgICAgICAgaWYgKHQgJiYgdFsxXSAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgICAg
ICAgIHZhciBzb3VyY2UgPSB0WzBdOwogICAgICAgICAgICAgICAgdmFyIGlkID0gdFsxXTsKICAg
ICAgICAgICAgICAgIHZhciBjYXB0aW9uID0gdFsyXTsKICAgICAgICAgICAgICAgIGlmIChzb3Vy
Y2UgPT09IGZsYXNoTmFtZXNwYWNlICsgJ1ZJREVPJykgewogICAgICAgICAgICAgICAgICAgIHRo
aXMudmlkZW9QbGF5ZXIgPSBuZXcgZGoud2lkZ2V0LnZpZGVvLlZpZGVvKGRqLnV0aWwuRWxlbWVu
dC5pZGVudGlmeShjbnRbaW5kZXhdKSwgaWQsICcnLCAnJywgY2FwdGlvbik7CiAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKHNvdXJjZSA9PT0gZmxhc2hOYW1lc3BhY2UgKyAnRkxBU0gnKSB7CiAg
ICAgICAgICAgICAgICAgICAgdGhpcy5mbGFzaFBsYXllciA9IG5ldyBkai53aWRnZXQuZmxhc2gu
Rmxhc2goZGoudXRpbC5FbGVtZW50LmlkZW50aWZ5KGNudFtpbmRleF0pLCBpZCwgY2FwdGlvbik7
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn07CmRvam8u
cHJvdmlkZSgiZGoubW9kdWxlLmZyZWVSZWciKTsKZGoubW9kdWxlLmZyZWVSZWcgPSB7CiAgICBp
bml0OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgdGhpcy5vQW55VXNlckxvZ2dlZEluID0gZmFsc2U7
CiAgICAgICAgdmFyIHRoYXQgPSB0aGlzOwogICAgICAgIGRqLnV0aWwuVXNlci5pc0xvZ2dlZElu
KGZ1bmN0aW9uIChpc0xvZ2dlZEluKSB7CiAgICAgICAgICAgIGlmIChpc0xvZ2dlZEluKSB7CiAg
ICAgICAgICAgICAgICB0aGF0Lm9BbnlVc2VyTG9nZ2VkSW4gPSB0cnVlOwogICAgICAgICAgICB9
CiAgICAgICAgfSk7CiAgICAgICAgaWYgKCF0aGF0Lm9BbnlVc2VyTG9nZ2VkSW4pIHsKICAgICAg
ICAgICAgdGhpcy5pbmxpbmVSZWcgPSBuZXcgZGoud2lkZ2V0LnBhbmVsLk1vZGFsUGFuZWwoJ3Jl
Z2lzdGVyJywgJ3JlZ2lzdGVyX21vZHVsZScsIHsKICAgICAgICAgICAgICAgIG9wZW5Nb2RhbFBh
bmVsRXZlbnQ6ICJjbGljayIsCiAgICAgICAgICAgICAgICBjbG9zZU1vZGFsUGFuZWxFdmVudDog
ImJsdXIiLAogICAgICAgICAgICAgICAgY2xvc2VNb2RhbFBhbmVsQnV0dG9uU2VsZWN0b3I6ICIu
Y2xvc2VGcmVlcmVnIiwKICAgICAgICAgICAgICAgIGNsb3NlTW9kYWxQYW5lbEV2ZW50Rm9yQnV0
dG9uU2VsZWN0b3I6ICJjbGljayIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHRoaXMub1Jl
Z2lzdGVyX21vZHVsZSA9IHRoaXMuaW5saW5lUmVnLm9Nb2RhbENvbnRhaW5lcjsKICAgICAgICAg
ICAgdGhpcy5pbmxpbmVMb2dpbiA9IG5ldyBkai53aWRnZXQucGFuZWwuTW9kYWxQYW5lbCgnbG9n
aW4nLCAnbG9naW5fbW9kdWxlJywgewogICAgICAgICAgICAgICAgb3Blbk1vZGFsUGFuZWxFdmVu
dDogImNsaWNrIiwKICAgICAgICAgICAgICAgIGNsb3NlTW9kYWxQYW5lbEV2ZW50OiAiYmx1ciIs
CiAgICAgICAgICAgICAgICBjbG9zZU1vZGFsUGFuZWxCdXR0b25TZWxlY3RvcjogIi5jbG9zZUxv
Z2luIiwKICAgICAgICAgICAgICAgIGNsb3NlTW9kYWxQYW5lbEV2ZW50Rm9yQnV0dG9uU2VsZWN0
b3I6ICJjbGljayIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHRoaXMubG9naW5kaXYgPSB0
aGlzLmlubGluZUxvZ2luLm9Nb2RhbENvbnRhaW5lcjsKICAgICAgICAgICAgdGhpcy5vbG9naW5f
Zm9ybSA9IGRqLmxhbmcuYnlJZCgnbG9naW5fZm9ybScpOwogICAgICAgICAgICB0aGlzLm9sb2dp
bk1vZCA9IHRoaXMuaW5saW5lTG9naW4ub01vZGFsSWQ7CiAgICAgICAgICAgIHRoaXMub3N1Ymxv
Z2luID0gZGoubGFuZy5ieUlkKCdzdWJzY3JpYmVyTG9naW4nKTsKICAgICAgICAgICAgdGhpcy5v
ZnJlZXJlZyA9IGRqLmxhbmcuYnlJZCgnZnJlZXJlZycpOwogICAgICAgICAgICB0aGlzLm9GcmVl
X3JlZyA9IHRoaXMuaW5saW5lUmVnLm9Nb2RhbElkOwogICAgICAgICAgICB0aGlzLm9FcnJvckNv
dW50ID0gMDsKICAgICAgICAgICAgdGhpcy5odHRwX3JlcXVlc3QgPSBmYWxzZTsKICAgICAgICAg
ICAgdGhpcy5vUmVnRmllbGRFcnJvck1zZ3NWYWx1ZSA9ICIiOwogICAgICAgICAgICB0aGlzLm9y
ZWdGaWVsZEVycm9yTXNnID0gZGoubGFuZy5ieUlkKCdvcmVnRmllbGRFcnJvck1zZycpOwogICAg
ICAgICAgICB0aGlzLm9Gcl9jb25maXJtID0gZGoubGFuZy5ieUlkKCdmcl9jb25maXJtJyk7CiAg
ICAgICAgICAgIHRoaXMub0ZyX2NvbnRlbnQgPSBkai5sYW5nLmJ5SWQoJ2ZyX2NvbnRlbnQnKTsK
ICAgICAgICAgICAgdGhpcy5vRnJlZVJlZ2lzdHJhdGlvbl9mb3JtID0gZGoubGFuZy5ieUlkKCdm
cmVlUmVnaXN0cmF0aW9uX2Zvcm0nKTsKICAgICAgICAgICAgdGhpcy5vRnJlZXJlZ2VtYWlsZXJy
b3Jtc2cgPSBkai5sYW5nLmJ5SWQoJ2ZyZWVyZWdlbWFpbGVycm9ybXNnJyk7CiAgICAgICAgICAg
IHRoaXMub0ZyZWVyZWd1c2VyZXJyb3Jtc2cgPSBkai5sYW5nLmJ5SWQoJ2ZyZWVyZWd1c2VyZXJy
b3Jtc2cnKTsKICAgICAgICAgICAgdGhpcy5vRnJlZVJlZ1NlcnZpY2VFcnJvck1zZyA9IGRqLmxh
bmcuYnlJZCgnZnJlZVJlZ1NlcnZpY2VFcnJvck1zZycpOwogICAgICAgICAgICB0aGlzLm9GcmVl
UmVnU3ViQnV0dG9uID0gZGoubGFuZy5ieUlkKCdmcmVlUmVnU3ViQnV0dG9uJyk7CiAgICAgICAg
ICAgIHRoaXMub0ZyZWVSZWdFbWFpbCA9IGRqLmxhbmcuYnlJZCgncmVnZW1haWwnKTsKICAgICAg
ICAgICAgdGhpcy5vRnJlZVJlZ1doeVJlYXNvbiA9IGRqLmxhbmcuYnlJZCgnd2h5cmVhc29ucycp
OwogICAgICAgICAgICB0aGlzLm9mcmVld2h5cmVnaXN0ZXIgPSBkai5sYW5nLmJ5SWQoJ29mcmVl
d2h5cmVnaXN0ZXInKTsKICAgICAgICAgICAgdGhpcy5yZWdFcnJvckNvZGUgPSBbJ3VzZXJOYW1l
LWV4aXN0cycsICd1c2VyTmFtZS1yZXF1aXJlZCcsICd1c2VyTmFtZS1pbnZhbGlkJywgJ2ZpcnN0
TmFtZS1yZXF1aXJlZCcsICdmaXJzdE5hbWUtaW52YWxpZCcsICdsYXN0TmFtZS1yZXF1aXJlZCcs
ICdsYXN0TmFtZS1pbnZhbGlkJywgJ2VtYWlsQWRkcmVzcy1leGlzdHMnLCAnZW1haWxBZGRyZXNz
LXJlcXVpcmVkJywgJ2VtYWlsQWRkcmVzcy1pbnZhbGlkJywgJ3Bhc3N3b3JkLXJlcXVpcmVkJywg
J3Bhc3N3b3JkLWludmFsaWQnLCAncGFzc3dvcmRDb25maXJtYXRpb24taW52YWxpZCcsICd1c2Vy
TmFtZS11bmlxdWUnLCAnZW1haWxBZGRyZXNzLXVuaXF1ZScsICdwYXNzd29yZENvbmZpcm1hdGlv
bi1yZXF1aXJlZCddOwogICAgICAgICAgICB0aGlzLnJlZ0Vycm9yVmFsdWUgPSBbJ1BsZWFzZSBl
bnRlciB5b3VyIEZpcnN0IE5hbWUuJywgJ1BsZWFzZSBlbnRlciB5b3VyIExhc3QgTmFtZS4nLCAn
UGxlYXNlIGVudGVyIGEgdmFsaWQgZW1haWwgYWRkcmVzcy4nLCAnUGxlYXNlIGNyZWF0ZSBhIFBh
c3N3b3JkLicsICdQbGVhc2UgY29uZmlybSBQYXNzd29yZC4nLCAnVGhlIGVtYWlsIGFkZHJlc3Nl
cyBkbyBub3QgbWF0Y2guIFBsZWFzZSByZS1lbnRlciBib3RoLicsICdQYXNzd29yZHMgZG8gbm90
IG1hdGNoLicsICdQYXNzd29yZCBtdXN0IGJlIDUtMTUgY2hhcmFjdGVycyBpbiBsZW5ndGguJywg
J0NvbmZpcm0gUGFzc3dvcmQgbXVzdCBiZSA1LTE1IGNoYXJhY3RlcnMgaW4gbGVuZ3RoLicsICcn
LCAnJywgJ1BsZWFzZSBDb25maXJtIEVtYWlsLicsICdGaXJzdCBuYW1lIGNvbnRhaW5zIGludmFs
aWQgY2hhcmFjdGVycy4nLCAnTGFzdCBuYW1lIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycy4n
XTsKICAgICAgICAgICAgdGhpcy5yZWdGaWVsZE5hbWUgPSBbJ2ZpcnN0TmFtZVJlZycsICdsYXN0
TmFtZVJlZycsICdlbWFpbEFkZHJlc3NSZWcnLCAncGFzc3dvcmRSZWcnLCAncGFzc3dvcmRDb25m
aXJtYXRpb25SZWcnLCAnZW1haWxBZGRyZXNzQ29uZmlybWF0aW9uUmVnJywgJ3Bhc3N3b3JkQ29u
ZmlybWF0aW9uUmVnJywgJ3Bhc3N3b3JkUmVnJywgJ3Bhc3N3b3JkQ29uZmlybWF0aW9uUmVnJywg
J3NlbmRFbWFpbHNSZWcnLCAnamNvbW11bml0eVJlZycsICdlbWFpbEFkZHJlc3NDb25maXJtYXRp
b25SZWcnLCAnZmlyc3ROYW1lUmVnJywgJ2xhc3ROYW1lUmVnJywgJ2NvbXBhbnlTaXplUmVnJ107
CiAgICAgICAgICAgIHRoaXMuYXR0YWNoRXZlbnRzKCk7CiAgICAgICAgICAgIHRoaXMuZnJlZVJl
Z1Jlc2V0Rm9ybSgpOwogICAgICAgIH0KICAgIH0sCiAgICBhdHRhY2hFdmVudHM6IGZ1bmN0aW9u
ICgpIHsKICAgICAgICB2YXIgdGV4dEZpZWxkcyA9IGRvam8ucXVlcnkoImlucHV0W3R5cGU9dGV4
dF0iLCB0aGlzLm9GcmVlUmVnaXN0cmF0aW9uX2Zvcm0pOwogICAgICAgIHZhciBwYXNzZmllbGRz
ID0gZG9qby5xdWVyeSgiaW5wdXRbdHlwZT1wYXNzd29yZF0iLCB0aGlzLm9GcmVlUmVnaXN0cmF0
aW9uX2Zvcm0pOwogICAgICAgIHRleHRGaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAoaXB0KSB7CiAg
ICAgICAgICAgIGRvam8uY29ubmVjdChpcHQsICJvbmZvY3VzIiwgdGhpcywgZnVuY3Rpb24gKGV2
KSB7CiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrRnJlZVJlZ0ZvY3VzKGlwdC5uYW1lKTsKICAg
ICAgICAgICAgfSk7CiAgICAgICAgfSwgdGhpcyk7CiAgICAgICAgdGV4dEZpZWxkcy5mb3JFYWNo
KGZ1bmN0aW9uIChpcHQpIHsKICAgICAgICAgICAgZG9qby5jb25uZWN0KGlwdCwgIm9uYmx1ciIs
IHRoaXMsIGZ1bmN0aW9uIChldikgewogICAgICAgICAgICAgICAgdGhpcy5jaGVja0ZyZWVSZWdG
aWVsZEJsdXIoaXB0Lm5hbWUpOwogICAgICAgICAgICB9KTsKICAgICAgICB9LCB0aGlzKTsKICAg
ICAgICBwYXNzZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGlwdCkgewogICAgICAgICAgICBkb2pv
LmNvbm5lY3QoaXB0LCAib25mb2N1cyIsIHRoaXMsIGZ1bmN0aW9uIChldikgewogICAgICAgICAg
ICAgICAgdGhpcy5jaGVja0ZyZWVSZWdGb2N1cyhpcHQubmFtZSk7CiAgICAgICAgICAgIH0pOwog
ICAgICAgIH0sIHRoaXMpOwogICAgICAgIHBhc3NmaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAoaXB0
KSB7CiAgICAgICAgICAgIGRvam8uY29ubmVjdChpcHQsICJvbmJsdXIiLCB0aGlzLCBmdW5jdGlv
biAoZXYpIHsKICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tGcmVlUmVnRmllbGRCbHVyKGlwdC5u
YW1lKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfSwgdGhpcyk7CiAgICAgICAgdGhpcy5vaW1h
Z2VmaWVsZHMgPSBkb2pvLnF1ZXJ5KCJpbnB1dFt0eXBlPWltYWdlXSIsIHRoaXMub0ZyZWVSZWdp
c3RyYXRpb25fZm9ybSk7CiAgICAgICAgdGhpcy5vaW1hZ2VmaWVsZHMuZm9yRWFjaChmdW5jdGlv
biAoaXB0KSB7CiAgICAgICAgICAgIGRvam8uY29ubmVjdChpcHQsICJvbmNsaWNrIiwgdGhpcywg
ZnVuY3Rpb24gKGV2KSB7CiAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdHJlZ0Zvcm0oKTsKICAg
ICAgICAgICAgfSk7CiAgICAgICAgfSwgdGhpcyk7CiAgICAgICAgdGhpcy5va0J1dHRvbkNsaWNr
ZWQgPSBkb2pvLnF1ZXJ5KCJpbnB1dFtjbGFzcz1va0J1dHRvbl0iLCB0aGlzLm9GcmVlUmVnQ29u
ZmlybSk7CiAgICAgICAgdGhpcy5va0J1dHRvbkNsaWNrZWQuZm9yRWFjaChmdW5jdGlvbiAoaXB0
KSB7CiAgICAgICAgICAgIGRvam8uY29ubmVjdChpcHQsICJvbmNsaWNrIiwgdGhpcywgZnVuY3Rp
b24gKGV2KSB7CiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlUmVnU3VjY2Vzc0Jsb2NrKCk7CiAg
ICAgICAgICAgIH0pOwogICAgICAgIH0sIHRoaXMpOwogICAgICAgIHRoaXMub0ZyZWV3aHlSZWFz
b25zID0gZG9qby5xdWVyeSgiYVtjbGFzcz1vZnJlZXdoeVJlYXNvbnNdIiwgdGhpcy5vUmVnaXN0
ZXJfbW9kdWxlKTsKICAgICAgICB0aGlzLm9GcmVld2h5UmVhc29ucy5mb3JFYWNoKGZ1bmN0aW9u
IChpcHQpIHsKICAgICAgICAgICAgZG9qby5jb25uZWN0KGlwdCwgIm9uY2xpY2siLCB0aGlzLCBm
dW5jdGlvbiAoZXYpIHsKICAgICAgICAgICAgICAgIHRoaXMub0ZyZWVSZWdXaHlSZWFzb24uc3R5
bGUuZGlzcGxheSA9ICh0aGlzLm9GcmVlUmVnV2h5UmVhc29uLnN0eWxlLmRpc3BsYXkgPT0gJ2Js
b2NrJykgPyAnbm9uZScgOiAnYmxvY2snOwogICAgICAgICAgICAgICAgaWYgKHRoaXMub0ZyZWVS
ZWdXaHlSZWFzb24uc3R5bGUuZGlzcGxheSA9PT0gJ2Jsb2NrJykgewogICAgICAgICAgICAgICAg
ICAgIHRoaXMub2ZyZWV3aHlyZWdpc3Rlci5jbGFzc05hbWUgPSAid2h5IjsKICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5vZnJlZXdoeXJlZ2lzdGVyLmNs
YXNzTmFtZSA9ICJ3aHlub3QiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAg
ICAgICB9KTsKICAgICAgICB0aGlzLm9GcmVlVGVybXNDb25kaXRpb25zID0gZG9qby5xdWVyeSgi
YVtjbGFzcz1vZnJlZVRlcm1zQ29uZGl0aW9uc10iLCB0aGlzLm9SZWdpc3Rlcl9tb2R1bGUpOwog
ICAgICAgIHRoaXMub0ZyZWVUZXJtc0NvbmRpdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaXB0KSB7
CiAgICAgICAgICAgIGRvam8uY29ubmVjdChpcHQsICJvbmNsaWNrIiwgdGhpcywgZnVuY3Rpb24g
KGV2KSB7CiAgICAgICAgICAgICAgICBkai51dGlsLlVybC5vcGVuV2luKCcvcHVibGljL3BhZ2Uv
c3Vic2NyaWJlcl9hZ3JlZW1lbnQuaHRtbCcsICdUZXJtQW5kQ29uZGl0aW9ucycsIDgwMCwgODAw
LCAnc2Nyb2xsYmFycycsIDEsIDMwMCwgMTAwKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfSwg
dGhpcyk7CiAgICAgICAgdGhpcy5vRnJlZUVtYWlsTmV3TGV0dGVyID0gZG9qby5xdWVyeSgiYVtj
bGFzcz1vZnJlZUVtYWlsTmV3TGV0dGVyXSIsIHRoaXMub1JlZ2lzdGVyX21vZHVsZSk7CiAgICAg
ICAgdGhpcy5vRnJlZUVtYWlsTmV3TGV0dGVyLmZvckVhY2goZnVuY3Rpb24gKGlwdCkgewogICAg
ICAgICAgICBkb2pvLmNvbm5lY3QoaXB0LCAib25jbGljayIsIHRoaXMsIGZ1bmN0aW9uIChldikg
ewogICAgICAgICAgICAgICAgZGoudXRpbC5Vcmwub3BlbldpbignL3B1YmxpYy9lbWFpbCcsICdF
bWFpbE5ld0xldHRlckxpbmsnKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgICAg
dGhpcy5vcHJpdmFjeVBvbGljeSA9IGRvam8ucXVlcnkoImFbY2xhc3M9b3ByaXZhY3lQb2xpY3ld
IiwgdGhpcy5vUmVnaXN0ZXJfbW9kdWxlKTsKICAgICAgICB0aGlzLm9wcml2YWN5UG9saWN5LmZv
ckVhY2goZnVuY3Rpb24gKGlwdCkgewogICAgICAgICAgICBkb2pvLmNvbm5lY3QoaXB0LCAib25j
bGljayIsIHRoaXMsIGZ1bmN0aW9uIChldikgewogICAgICAgICAgICAgICAgZGoudXRpbC5Vcmwu
b3BlbldpbignL3B1YmxpYy9wYWdlL3ByaXZhY3lfcG9saWN5Lmh0bWwnLCAnRnJlZVJlZ1ByaXZh
Y3lQb2xpY3knLCA4MDAsIDgwMCwgJ3Njcm9sbGJhcnMnLCAxLCAzMDAsIDEwMCk7CiAgICAgICAg
ICAgIH0pOwogICAgICAgIH0sIHRoaXMpOwogICAgICAgIGRvam8uY29ubmVjdCh0aGlzLm9sb2dp
bk1vZCwgJ2NsaWNrJywgdGhpcywgZnVuY3Rpb24gKGV2KSB7CiAgICAgICAgICAgIGRvam8uc3Rv
cEV2ZW50KGV2KTsKICAgICAgICAgICAgdGhpcy5jbG9zZVJlZ090aGVyQmxvY2soMik7CiAgICAg
ICAgICAgIHRoaXMub2xvZ2luX2Zvcm0ucmVzZXQoKTsKICAgICAgICB9KTsKICAgIH0sCiAgICBm
cmVlUmVnUmVzZXRGb3JtOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgZG9qby5jb25uZWN0KHRoaXMu
b0ZyZWVfcmVnLCAib25jbGljayIsIHRoaXMsIGZ1bmN0aW9uIChldikgewogICAgICAgICAgICBk
b2pvLnN0b3BFdmVudChldik7CiAgICAgICAgICAgIHRoaXMuY2xvc2VSZWdPdGhlckJsb2NrKDEp
OwogICAgICAgICAgICB0aGlzLm9GcmVlUmVnaXN0cmF0aW9uX2Zvcm0ucmVzZXQoKTsKICAgICAg
ICAgICAgZGoudXRpbC5FbGVtZW50LmhpZGUodGhpcy5vcmVnRmllbGRFcnJvck1zZyk7CiAgICAg
ICAgICAgIHRoaXMub2ZyZWV3aHlyZWdpc3Rlci5jbGFzc05hbWUgPSAid2h5bm90IjsKICAgICAg
ICAgICAgdGhpcy5vUmVnRmllbGRFcnJvck1zZ3NWYWx1ZSA9ICIiOwogICAgICAgICAgICB0aGlz
Lm9GcmVlUmVnU3ViQnV0dG9uLmRpc2FibGVkID0gZmFsc2U7CiAgICAgICAgICAgIGRqLnV0aWwu
RWxlbWVudC5oaWRlKHRoaXMub0ZyZWVyZWdlbWFpbGVycm9ybXNnKTsKICAgICAgICAgICAgZGou
dXRpbC5FbGVtZW50LmhpZGUodGhpcy5vRnJlZVJlZ1NlcnZpY2VFcnJvck1zZyk7CiAgICAgICAg
ICAgIGRqLnV0aWwuRWxlbWVudC5oaWRlKHRoaXMub0ZyZWVyZWd1c2VyZXJyb3Jtc2cpOwogICAg
ICAgICAgICB0aGlzLm9GcmVlUmVnaXN0cmF0aW9uX2Zvcm1bdGhpcy5yZWdGaWVsZE5hbWVbMF1d
LnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICcjZmZmZmZmJzsKICAgICAgICAgICAgdGhpcy5vRnJl
ZVJlZ2lzdHJhdGlvbl9mb3JtW3RoaXMucmVnRmllbGROYW1lWzFdXS5zdHlsZS5iYWNrZ3JvdW5k
Q29sb3IgPSAnI2ZmZmZmZic7CiAgICAgICAgICAgIHRoaXMub0ZyZWVSZWdpc3RyYXRpb25fZm9y
bVt0aGlzLnJlZ0ZpZWxkTmFtZVsyXV0uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyNmZmZmZmYn
OwogICAgICAgICAgICB0aGlzLm9GcmVlUmVnaXN0cmF0aW9uX2Zvcm1bdGhpcy5yZWdGaWVsZE5h
bWVbM11dLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICcjZmZmZmZmJzsKICAgICAgICAgICAgdGhp
cy5vRnJlZVJlZ2lzdHJhdGlvbl9mb3JtW3RoaXMucmVnRmllbGROYW1lWzRdXS5zdHlsZS5iYWNr
Z3JvdW5kQ29sb3IgPSAnI2ZmZmZmZic7CiAgICAgICAgICAgIHRoaXMub0ZyZWVSZWdpc3RyYXRp
b25fZm9ybVt0aGlzLnJlZ0ZpZWxkTmFtZVs1XV0uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyNm
ZmZmZmYnOwogICAgICAgIH0pOwogICAgfSwKICAgIGNsb3NlUmVnU3VjY2Vzc0Jsb2NrOiBmdW5j
dGlvbiAoKSB7CiAgICAgICAgdGhpcy5vRnJlZVJlZ0VtYWlsLmlubmVySFRNTCA9ICIiOwogICAg
ICAgIGRqLnV0aWwuRWxlbWVudC5oaWRlKHRoaXMub0ZyX2NvbmZpcm0pOwogICAgICAgIGRqLnV0
aWwuRWxlbWVudC5zaG93KHRoaXMub0ZyX2NvbnRlbnQpOwogICAgICAgIGRqLnV0aWwuRWxlbWVu
dC5oaWRlKHRoaXMub1JlZ2lzdGVyX21vZHVsZSk7CiAgICAgICAgdGhpcy5vRnJlZVJlZ1N1YkJ1
dHRvbi5kaXNhYmxlZCA9IGZhbHNlOwogICAgICAgIHRoaXMub0ZyZWVSZWdpc3RyYXRpb25fZm9y
bS5yZXNldCgpOwogICAgfSwKICAgIGNsb3NlUmVnT3RoZXJCbG9jazogZnVuY3Rpb24gKHZhbCkg
ewogICAgICAgIGlmICh2YWwgPT09IDEpIHsKICAgICAgICAgICAgdGhpcy5vZnJlZXJlZy5jbGFz
c05hbWUgPSAiZnJlZXJlZyI7CiAgICAgICAgICAgIHRoaXMub3N1YmxvZ2luLmNsYXNzTmFtZSAr
PSAiIGxvZ2luX2hpZGRlbiI7CiAgICAgICAgICAgIGRqLnV0aWwuRWxlbWVudC5oaWRlKHRoaXMu
bG9naW5kaXYpOwogICAgICAgICAgICBkai51dGlsLkVsZW1lbnQuc2hvdyh0aGlzLm9SZWdpc3Rl
cl9tb2R1bGUpOwogICAgICAgICAgICB0aGlzLm9GcmVlUmVnV2h5UmVhc29uLnN0eWxlLmRpc3Bs
YXkgPSAnYmxvY2snOwogICAgICAgICAgICB0aGlzLm9GcmVlUmVnV2h5UmVhc29uLnN0eWxlLmRp
c3BsYXkgPSAnbm9uZSc7CiAgICAgICAgfQogICAgICAgIGlmICh2YWwgPT09IDIpIHsKICAgICAg
ICAgICAgdGhpcy5vc3VibG9naW4uY2xhc3NOYW1lID0gImxvZ2luIjsKICAgICAgICAgICAgdGhp
cy5vZnJlZXJlZy5jbGFzc05hbWUgKz0gIiBmcmVlcmVnX2hpZGRlbiI7CiAgICAgICAgICAgIGRq
LnV0aWwuRWxlbWVudC5zaG93KHRoaXMubG9naW5kaXYpOwogICAgICAgICAgICBkai51dGlsLkVs
ZW1lbnQuaGlkZSh0aGlzLm9SZWdpc3Rlcl9tb2R1bGUpOwogICAgICAgIH0KICAgIH0sCiAgICBj
aGVja0ZyZWVSZWdGaWVsZEJsdXI6IGZ1bmN0aW9uIChvcmVnRmllbGRuYW1lKSB7CiAgICAgICAg
dGhpcy5vZmllbGROYW1lID0gdGhpcy5vRnJlZVJlZ2lzdHJhdGlvbl9mb3JtW29yZWdGaWVsZG5h
bWVdOwogICAgICAgIHRoaXMub2ZpZWxkVmFsdWUgPSB0aGlzLm9maWVsZE5hbWUudmFsdWU7CiAg
ICAgICAgaWYgKC9eXHMqJC8udGVzdCh0aGlzLm9maWVsZFZhbHVlKSkgewogICAgICAgICAgICB0
aGlzLm9FcnJvckNvdW50ID0gMTsKICAgICAgICAgICAgdGhpcy5vRnJlZVJlZ1N1YkJ1dHRvbi5k
aXNhYmxlZCA9IGZhbHNlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMub2ZpZWxk
TmFtZS5zdHlsZS5jb2xvciA9ICcjMDAwMDAwJzsKICAgICAgICAgICAgdGhpcy5vZmllbGROYW1l
LnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICcjZmZmZmZmJzsKICAgICAgICAgICAgdGhpcy5vZmll
bGROYW1lLnZhbHVlID0gdGhpcy5vZmllbGRWYWx1ZS5zdHJpcCgpOwogICAgICAgIH0KICAgIH0s
CiAgICBjaGVja0ZyZWVSZWdCbHVyOiBmdW5jdGlvbiAob3JlZ0ZpZWxkbnVtYmVyKSB7CiAgICAg
ICAgdGhpcy5vZmllbGROYW1lID0gdGhpcy5vRnJlZVJlZ2lzdHJhdGlvbl9mb3JtW3RoaXMucmVn
RmllbGROYW1lW29yZWdGaWVsZG51bWJlcl1dOwogICAgICAgIHRoaXMub2ZpZWxkVmFsdWUgPSB0
aGlzLm9maWVsZE5hbWUudmFsdWU7CiAgICAgICAgaWYgKC9eXHMqJC8udGVzdCh0aGlzLm9maWVs
ZFZhbHVlKSkgewogICAgICAgICAgICB0aGlzLmNoYW5nZUZpZWxkVmFsdWUob3JlZ0ZpZWxkbnVt
YmVyKTsKICAgICAgICAgICAgdGhpcy5vRXJyb3JDb3VudCA9IDE7CiAgICAgICAgICAgIHRoaXMu
b0ZyZWVSZWdTdWJCdXR0b24uZGlzYWJsZWQgPSBmYWxzZTsKICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICB0aGlzLm9maWVsZE5hbWUuc3R5bGUuY29sb3IgPSAnIzAwMDAwMCc7CiAgICAgICAg
ICAgIHRoaXMub2ZpZWxkTmFtZS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnI2ZmZmZmZic7CiAg
ICAgICAgICAgIHRoaXMub2ZpZWxkTmFtZS52YWx1ZSA9IHRoaXMub2ZpZWxkVmFsdWUuc3RyaXAo
KTsKICAgICAgICB9CiAgICB9LAogICAgY2hlY2tGcmVlUmVnRm9jdXM6IGZ1bmN0aW9uIChvcmVn
RmllbGRuYW1lKSB7CiAgICAgICAgdGhpcy5vZmllbGROYW1lID0gdGhpcy5vRnJlZVJlZ2lzdHJh
dGlvbl9mb3JtW29yZWdGaWVsZG5hbWVdOwogICAgICAgIHRoaXMub2ZpZWxkTmFtZS5zdHlsZS5j
b2xvciA9ICIjMDAwMDAwIjsKICAgICAgICB0aGlzLm9maWVsZE5hbWUuc3R5bGUuYmFja2dyb3Vu
ZENvbG9yID0gIiNmZmZmZmYiOwogICAgfSwKICAgIGNoZWNrRnJlZVJlZ0VtYWlsOiBmdW5jdGlv
biAoZW1haWwpIHsKICAgICAgICB2YXIgaW52YWxpZEVtYWlsQ2hhcnMgPSAiID8hIyQlJiooKVwi
fHw8Pj0rOzpdW3t9L1xcIjsKICAgICAgICBmb3IgKHZhciBjb3VudCA9IDAsIGxlbiA9IGludmFs
aWRFbWFpbENoYXJzLmxlbmd0aDsgY291bnQgPCBsZW47IGNvdW50KyspIHsKICAgICAgICAgICAg
dmFyIGJhZENoYXIgPSBpbnZhbGlkRW1haWxDaGFycy5jaGFyQXQoY291bnQpOwogICAgICAgICAg
ICBpZiAoZW1haWwuaW5kZXhPZihiYWRDaGFyLCAwKSA+IC0xKSB7CiAgICAgICAgICAgICAgICB0
aGlzLm9FcnJvckNvdW50ID0gMTsKICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRmllbGRWYWx1
ZSgyKTsKICAgICAgICAgICAgICAgIHRoaXMub0ZyZWVSZWdTdWJCdXR0b24uZGlzYWJsZWQgPSBm
YWxzZTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg
ICAgICB0aGlzLmxhc3RBdFNpZ24gPSBlbWFpbC5sYXN0SW5kZXhPZigiQCIpOwogICAgICAgIHRo
aXMuZmlyc3RBdFNpZ24gPSBlbWFpbC5pbmRleE9mKCJAIik7CiAgICAgICAgdGhpcy5sYXN0UGVy
aW9kID0gZW1haWwubGFzdEluZGV4T2YoIi4iKTsKICAgICAgICBpZiAoISh0aGlzLmZpcnN0QXRT
aWduID4gMCAmJiBlbWFpbC5sZW5ndGggPj0gNSAmJiBlbWFpbC5sZW5ndGggPD0gMTAwICYmIHRo
aXMuZmlyc3RBdFNpZ24gPT09IHRoaXMubGFzdEF0U2lnbiAmJiBlbWFpbC5sYXN0SW5kZXhPZigi
Li4iKSA8IDAgJiYgdGhpcy5sYXN0UGVyaW9kID49ICh0aGlzLmZpcnN0QXRTaWduICsgMikgJiYg
dGhpcy5sYXN0UGVyaW9kIDw9IChlbWFpbC5sZW5ndGggLSAzKSAmJiBlbWFpbC5jaGFyQXQodGhp
cy5maXJzdEF0U2lnbiArIDEpICE9PSAiLiIpKSB7CiAgICAgICAgICAgIHRoaXMuY2hhbmdlRmll
bGRWYWx1ZSgyKTsKICAgICAgICAgICAgdGhpcy5vRnJlZVJlZ1N1YkJ1dHRvbi5kaXNhYmxlZCA9
IGZhbHNlOwogICAgICAgICAgICB0aGlzLm9FcnJvckNvdW50ID0gMTsKICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgIH0KICAgIH0sCiAgICBjb21wYXJlRnJlZVJlZ0VtYWlsOiBmdW5jdGlvbiAo
KSB7CiAgICAgICAgdGhpcy5vRW1haWxmaWVsZFZhbHVlID0gdGhpcy5vRnJlZVJlZ2lzdHJhdGlv
bl9mb3JtW3RoaXMucmVnRmllbGROYW1lWzJdXS52YWx1ZTsKICAgICAgICB0aGlzLm9FbWFpbGZp
ZWxkQ29uZlZhbHVlID0gdGhpcy5vRnJlZVJlZ2lzdHJhdGlvbl9mb3JtW3RoaXMucmVnRmllbGRO
YW1lWzVdXS52YWx1ZTsKICAgICAgICBpZiAoKHRoaXMub0VtYWlsZmllbGRWYWx1ZSAhPSAnJyAm
JiB0aGlzLm9FbWFpbGZpZWxkQ29uZlZhbHVlICE9ICcnKSAmJiAodGhpcy5vRW1haWxmaWVsZFZh
bHVlICE9PSB0aGlzLm9FbWFpbGZpZWxkQ29uZlZhbHVlKSkgewogICAgICAgICAgICB0aGlzLmNo
YW5nZUZpZWxkVmFsdWUoNSk7CiAgICAgICAgICAgIHRoaXMub0ZyZWVSZWdTdWJCdXR0b24uZGlz
YWJsZWQgPSBmYWxzZTsKICAgICAgICAgICAgdGhpcy5vRXJyb3JDb3VudCA9IDE7CiAgICAgICAg
fQogICAgfSwKICAgIGNvbXBhcmVGcmVlUmVnUGFzc3dvcmQ6IGZ1bmN0aW9uICgpIHsKICAgICAg
ICB0aGlzLm9QYXNzZmllbGRWYWx1ZSA9IHRoaXMub0ZyZWVSZWdpc3RyYXRpb25fZm9ybVt0aGlz
LnJlZ0ZpZWxkTmFtZVszXV0udmFsdWU7CiAgICAgICAgdGhpcy5vQ1Bhc3NmaWVsZFZhbHVlID0g
dGhpcy5vRnJlZVJlZ2lzdHJhdGlvbl9mb3JtW3RoaXMucmVnRmllbGROYW1lWzRdXS52YWx1ZTsK
ICAgICAgICBpZiAodGhpcy5vUGFzc2ZpZWxkVmFsdWUgIT09IHRoaXMub0NQYXNzZmllbGRWYWx1
ZSkgewogICAgICAgICAgICB0aGlzLmNoYW5nZUZpZWxkVmFsdWUoNik7CiAgICAgICAgICAgIHRo
aXMub0ZyZWVSZWdTdWJCdXR0b24uZGlzYWJsZWQgPSBmYWxzZTsKICAgICAgICAgICAgdGhpcy5v
RXJyb3JDb3VudCA9IDE7CiAgICAgICAgfQogICAgfSwKICAgIGNoYW5nZUZpZWxkVmFsdWU6IGZ1
bmN0aW9uIChvcmVnRmllbGRudW1iZXIpIHsKICAgICAgICBkai51dGlsLkVsZW1lbnQuc2hvdyh0
aGlzLm9yZWdGaWVsZEVycm9yTXNnKTsKICAgICAgICB0aGlzLm9maWVsZE5hbWUgPSB0aGlzLm9G
cmVlUmVnaXN0cmF0aW9uX2Zvcm1bdGhpcy5yZWdGaWVsZE5hbWVbb3JlZ0ZpZWxkbnVtYmVyXV07
CiAgICAgICAgdGhpcy5vUmVnRmllbGRFcnJvck1zZ3NWYWx1ZSArPSAiICIgKyB0aGlzLnJlZ0Vy
cm9yVmFsdWVbb3JlZ0ZpZWxkbnVtYmVyXTsKICAgICAgICB0aGlzLm9maWVsZE5hbWUuc3R5bGUu
Y29sb3IgPSAnI2ZmMDAwMCc7CiAgICAgICAgdGhpcy5vZmllbGROYW1lLnN0eWxlLmJhY2tncm91
bmRDb2xvciA9ICcjZmZmMjhkJzsKICAgIH0sCiAgICByZXNwb25zZUVycm9yRGF0YTogZnVuY3Rp
b24gKHJlc3BvbnNlRGF0YSkgewogICAgICAgIHZhciB0aGF0ID0gdGhpczsKICAgICAgICB2YXIg
b3Nob3cgPSAwOwogICAgICAgIHZhciBwcm9maWxlRXJyb3JzID0gcmVzcG9uc2VEYXRhLnByb2Zp
bGUuZXJyb3JzOwogICAgICAgIHZhciBlbWFpbEFkZHJlc3NWYWwgPSBwcm9maWxlRXJyb3JzLmVt
YWlsQWRkcmVzczsKICAgICAgICB2YXIgdXNlck5hbWVWYWwgPSBwcm9maWxlRXJyb3JzLnVzZXJO
YW1lOwogICAgICAgIHZhciBmaXJzdE5hbWVWYWwgPSBwcm9maWxlRXJyb3JzLmZpcnN0TmFtZTsK
ICAgICAgICB2YXIgbGFzdE5hbWVWYWwgPSBwcm9maWxlRXJyb3JzLmxhc3ROYW1lOwogICAgICAg
IHZhciBwYXNzd29yZFZhbCA9IHByb2ZpbGVFcnJvcnMucGFzc3dvcmQ7CiAgICAgICAgdmFyIGNv
bXBhc3N3b3JkVmFsID0gcHJvZmlsZUVycm9ycy5wYXNzd29yZENvbmZpcm1hdGlvbjsKICAgICAg
ICBpZiAoZW1haWxBZGRyZXNzVmFsICE9PSBudWxsICYmIGVtYWlsQWRkcmVzc1ZhbCAhPT0gdW5k
ZWZpbmVkKSB7CiAgICAgICAgICAgIGlmICh0aGlzLnJlZ0Vycm9yQ29kZVs3XSA9PT0gZW1haWxB
ZGRyZXNzVmFsIHx8IHRoaXMucmVnRXJyb3JDb2RlWzE0XSA9PT0gZW1haWxBZGRyZXNzVmFsKSB7
CiAgICAgICAgICAgICAgICBkai51dGlsLkVsZW1lbnQuc2hvdyh0aGlzLm9GcmVlcmVnZW1haWxl
cnJvcm1zZyk7CiAgICAgICAgICAgICAgICB0aGlzLm9maWVsZE5hbWUgPSB0aGlzLm9GcmVlUmVn
aXN0cmF0aW9uX2Zvcm1bdGhpcy5yZWdGaWVsZE5hbWVbMl1dOwogICAgICAgICAgICAgICAgdGhp
cy5vZmllbGROYW1lLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICcjZmZmMjhkJzsKICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRmllbGRWYWx1ZSgyKTsKICAg
ICAgICAgICAgICAgIG9zaG93ID0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBp
ZiAodXNlck5hbWVWYWwgIT09IG51bGwgJiYgdXNlck5hbWVWYWwgIT09IHVuZGVmaW5lZCkgewog
ICAgICAgICAgICBpZiAodGhpcy5yZWdFcnJvckNvZGVbMF0gPT09IHVzZXJOYW1lVmFsIHx8IHRo
aXMucmVnRXJyb3JDb2RlWzEzXSA9PT0gdXNlck5hbWVWYWwpIHsKICAgICAgICAgICAgICAgIGRq
LnV0aWwuRWxlbWVudC5zaG93KHRoaXMub0ZyZWVyZWd1c2VyZXJyb3Jtc2cpOwogICAgICAgICAg
ICAgICAgdGhpcy5vZmllbGROYW1lID0gdGhpcy5vRnJlZVJlZ2lzdHJhdGlvbl9mb3JtW3RoaXMu
cmVnRmllbGROYW1lWzVdXTsKICAgICAgICAgICAgICAgIHRoaXMub2ZpZWxkTmFtZS5zdHlsZS5i
YWNrZ3JvdW5kQ29sb3IgPSAnI2ZmZjI4ZCc7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICB0aGlzLmNoYW5nZUZpZWxkVmFsdWUoNSk7CiAgICAgICAgICAgICAgICBvc2hvdyA9
IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGZpcnN0TmFtZVZhbCAhPT0g
bnVsbCAmJiBmaXJzdE5hbWVWYWwgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICB0aGlzLmNo
YW5nZUZpZWxkVmFsdWUoMCk7CiAgICAgICAgICAgIG9zaG93ID0gMTsKICAgICAgICB9CiAgICAg
ICAgaWYgKGxhc3ROYW1lVmFsICE9PSBudWxsICYmIGxhc3ROYW1lVmFsICE9PSB1bmRlZmluZWQp
IHsKICAgICAgICAgICAgdGhpcy5jaGFuZ2VGaWVsZFZhbHVlKDEpOwogICAgICAgICAgICBvc2hv
dyA9IDE7CiAgICAgICAgfQogICAgICAgIGlmIChwYXNzd29yZFZhbCAhPT0gbnVsbCAmJiBwYXNz
d29yZFZhbCAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIGlmIChwYXNzd29yZFZhbCA9PT0g
dGhpcy5yZWdFcnJvckNvZGVbMTFdKSB7CiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZUZpZWxk
VmFsdWUoNyk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aGlzLmNoYW5n
ZUZpZWxkVmFsdWUoMyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgb3Nob3cgPSAxOwogICAg
ICAgIH0KICAgICAgICBpZiAoY29tcGFzc3dvcmRWYWwgIT09IG51bGwgJiYgY29tcGFzc3dvcmRW
YWwgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICBpZiAoY29tcGFzc3dvcmRWYWwgPT09IHRo
aXMucmVnRXJyb3JDb2RlWzEyXSkgewogICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VGaWVsZFZh
bHVlKDgpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VG
aWVsZFZhbHVlKDQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG9zaG93ID0gMTsKICAgICAg
ICB9CiAgICAgICAgY29uc29sZS5sb2coImluc2lkZSByZXNwb25zZUVycm9yIGRhdGEiICsgdGhp
cy5vUmVnRmllbGRFcnJvck1zZ3NWYWx1ZSk7CiAgICAgICAgaWYgKG9zaG93ID09PSAxKSB7CiAg
ICAgICAgICAgIGRqLnV0aWwuRWxlbWVudC5zaG93KHRoaXMub3JlZ0ZpZWxkRXJyb3JNc2cpOwog
ICAgICAgICAgICB0aGlzLm9yZWdGaWVsZEVycm9yTXNnLmlubmVySFRNTCA9ICI8cD4iICsgdGhp
cy5vUmVnRmllbGRFcnJvck1zZ3NWYWx1ZSArICI8L3A+IjsKICAgICAgICAgICAgY29uc29sZS5s
b2coImluc2lkZSByZXNwb25zZUVycm9yIHNob3cgZGF0YSIgKyB0aGlzLm9SZWdGaWVsZEVycm9y
TXNnc1ZhbHVlKTsKICAgICAgICB9CiAgICB9LAogICAgZnJlZVJlZ1JlcXVlc3Q6IGZ1bmN0aW9u
ICgpIHsKICAgICAgICB0aGlzLm9maXJzdE5hbWUgPSB0aGlzLm9GcmVlUmVnaXN0cmF0aW9uX2Zv
cm1bdGhpcy5yZWdGaWVsZE5hbWVbMF1dLnZhbHVlOwogICAgICAgIHRoaXMub2xhc3ROYW1lID0g
dGhpcy5vRnJlZVJlZ2lzdHJhdGlvbl9mb3JtW3RoaXMucmVnRmllbGROYW1lWzFdXS52YWx1ZTsK
ICAgICAgICB0aGlzLm9lbWFpbE5hbWUgPSB0aGlzLm9GcmVlUmVnaXN0cmF0aW9uX2Zvcm1bdGhp
cy5yZWdGaWVsZE5hbWVbMl1dLnZhbHVlOwogICAgICAgIHRoaXMub3Bhc3NOYW1lID0gdGhpcy5v
RnJlZVJlZ2lzdHJhdGlvbl9mb3JtW3RoaXMucmVnRmllbGROYW1lWzNdXS52YWx1ZTsKICAgICAg
ICB0aGlzLm9jcGFzc05hbWUgPSB0aGlzLm9GcmVlUmVnaXN0cmF0aW9uX2Zvcm1bdGhpcy5yZWdG
aWVsZE5hbWVbNF1dLnZhbHVlOwogICAgICAgIHRoaXMub2VtYWlsQ29uZk5hbWUgPSB0aGlzLm9G
cmVlUmVnaXN0cmF0aW9uX2Zvcm1bdGhpcy5yZWdGaWVsZE5hbWVbNV1dLnZhbHVlOwogICAgICAg
IHRoaXMub0ZlYXR1cmVFbWFpbCA9IHRydWU7CiAgICAgICAgdGhpcy5vQ29tbXVuaXR5UHJvZmls
ZSA9IHRoaXMub0ZyZWVSZWdpc3RyYXRpb25fZm9ybVt0aGlzLnJlZ0ZpZWxkTmFtZVsxMF1dLmNo
ZWNrZWQ7CiAgICAgICAgdGhpcy5vY29tcGFueVNpemUgPSB0aGlzLm9GcmVlUmVnaXN0cmF0aW9u
X2Zvcm1bdGhpcy5yZWdGaWVsZE5hbWVbMTRdXS52YWx1ZTsKICAgICAgICBpZiAodGhpcy5vY29t
cGFueVNpemUubGVuZ3RoID09IDAgfHwgdGhpcy5vY29tcGFueVNpemUgPT0gbnVsbCkgewogICAg
ICAgICAgICB0aGlzLmRhdGEgPSB7CiAgICAgICAgICAgICAgICAncHJvZmlsZS5maXJzdE5hbWUn
OiB0aGlzLm9maXJzdE5hbWUsCiAgICAgICAgICAgICAgICAncHJvZmlsZS5sYXN0TmFtZSc6IHRo
aXMub2xhc3ROYW1lLAogICAgICAgICAgICAgICAgJ3Byb2ZpbGUuZW1haWxBZGRyZXNzJzogdGhp
cy5vZW1haWxOYW1lLnRvTG93ZXJDYXNlKCksCiAgICAgICAgICAgICAgICAncHJvZmlsZS5wYXNz
d29yZCc6IHRoaXMub3Bhc3NOYW1lLAogICAgICAgICAgICAgICAgJ3Byb2ZpbGUucGFzc3dvcmRD
b25maXJtYXRpb24nOiB0aGlzLm9jcGFzc05hbWUsCiAgICAgICAgICAgICAgICAnc2VydmljZS50
ZW1wbGF0ZUNvZGUnOiAnV1NKJywKICAgICAgICAgICAgICAgICdzZXJ2aWNlLnJlZ2lzdHJhdGlv
blR5cGUnOiAnRlJFRV9SRUdJU1RSQVRJT04nLAogICAgICAgICAgICAgICAgJ3Byb2ZpbGUub3B0
aW9ucy5yZXR1cm5MaW5rJzogd2luZG93LmxvY2F0aW9uLmhyZWYsCiAgICAgICAgICAgICAgICAn
cHJvZmlsZS5vcHRpb25zLmZlYXR1cmVFbWFpbE9wdEluJzogdGhpcy5vRmVhdHVyZUVtYWlsLAog
ICAgICAgICAgICAgICAgJ3Byb2ZpbGUudHJhY2tpbmdDb2RlJzogJ0lOTElORUZSRUVSRUcnCiAg
ICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5kYXRhID0gewog
ICAgICAgICAgICAgICAgJ3Byb2ZpbGUuZmlyc3ROYW1lJzogdGhpcy5vZmlyc3ROYW1lLAogICAg
ICAgICAgICAgICAgJ3Byb2ZpbGUubGFzdE5hbWUnOiB0aGlzLm9sYXN0TmFtZSwKICAgICAgICAg
ICAgICAgICdwcm9maWxlLmVtYWlsQWRkcmVzcyc6IHRoaXMub2VtYWlsTmFtZS50b0xvd2VyQ2Fz
ZSgpLAogICAgICAgICAgICAgICAgJ3Byb2ZpbGUucGFzc3dvcmQnOiB0aGlzLm9wYXNzTmFtZSwK
ICAgICAgICAgICAgICAgICdwcm9maWxlLnBhc3N3b3JkQ29uZmlybWF0aW9uJzogdGhpcy5vY3Bh
c3NOYW1lLAogICAgICAgICAgICAgICAgJ3NlcnZpY2UudGVtcGxhdGVDb2RlJzogJ1dTSicsCiAg
ICAgICAgICAgICAgICAnc2VydmljZS5yZWdpc3RyYXRpb25UeXBlJzogJ0ZSRUVfUkVHSVNUUkFU
SU9OJywKICAgICAgICAgICAgICAgICdwcm9maWxlLm9wdGlvbnMucmV0dXJuTGluayc6IHdpbmRv
dy5sb2NhdGlvbi5ocmVmLAogICAgICAgICAgICAgICAgJ3Byb2ZpbGUub3B0aW9ucy5mZWF0dXJl
RW1haWxPcHRJbic6IHRoaXMub0ZlYXR1cmVFbWFpbCwKICAgICAgICAgICAgICAgICdwcm9maWxl
LmRlbW9ncmFwaGljcy5xdWVzdGlvbklkMSc6IHRoaXMub3Bhc3NRdWVzdGlvbiwKICAgICAgICAg
ICAgICAgICdwcm9maWxlLmRlbW9ncmFwaGljcy5hbnN3ZXIxJzogdGhpcy5vY29tcGFueVNpemUs
CiAgICAgICAgICAgICAgICAncHJvZmlsZS50cmFja2luZ0NvZGUnOiAnSU5MSU5FRlJFRVJFRycK
ICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgdmFyIHRoYXQgPSB0aGlzOwogICAgICAg
IHZhciByZXF1ZXN0ID0gZG9qby54aHJQb3N0KHsKICAgICAgICAgICAgdXJsOiAiL2VwaXRvbi9y
ZWdpc3RyYXRpb24vdjIvcHJvZmlsZSIsCiAgICAgICAgICAgIGhhbmRsZUFzOiAianNvbiIsCiAg
ICAgICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgICAgICAgIEFjY2VwdDogImFwcGxpY2F0aW9u
L2pzb24iCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHBvc3REYXRhOiBkb2pvLm9iamVjdFRv
UXVlcnkodGhpcy5kYXRhKSwKICAgICAgICAgICAgaGFuZGxlOiBmdW5jdGlvbiAoZGF0YSwgaW9h
cmdzKSB7CiAgICAgICAgICAgICAgICBpZiAoaW9hcmdzLnhoci5zdGF0dXMgPT09IDIwMCkgewog
ICAgICAgICAgICAgICAgICAgIHRoYXQub0ZyZWVSZWdFbWFpbC5pbm5lckhUTUwgPSB0aGF0Lm9l
bWFpbE5hbWU7CiAgICAgICAgICAgICAgICAgICAgZG9qby5zdHlsZSh0aGF0Lm9Gcl9jb250ZW50
KTsKICAgICAgICAgICAgICAgICAgICBkai51dGlsLkVsZW1lbnQuaGlkZSh0aGF0Lm9Gcl9jb250
ZW50KTsKICAgICAgICAgICAgICAgICAgICBkai51dGlsLkVsZW1lbnQuc2hvdyh0aGF0Lm9Gcl9j
b25maXJtKTsKICAgICAgICAgICAgICAgICAgICB0aGF0Lm9GcmVlUmVnaXN0cmF0aW9uX2Zvcm0u
cmVzZXQoKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW9hcmdzLnhoci5zdGF0dXMgPT09
IDQxMikgewogICAgICAgICAgICAgICAgICAgIHZhciByZXNwb25zZURhdGEgPSBldmFsKCcoJyAr
IGlvYXJncy54aHIucmVzcG9uc2VUZXh0ICsgJyknKTsKICAgICAgICAgICAgICAgICAgICB0aGF0
Lm9GcmVlUmVnU3ViQnV0dG9uLmRpc2FibGVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAg
dGhhdC5yZXNwb25zZUVycm9yRGF0YShyZXNwb25zZURhdGEpOwogICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChpb2FyZ3MueGhyLnN0YXR1cyA9PT0gNTAwIHx8IGlvYXJncy54aHIuc3RhdHVzID09
PSA0MDQpIHsKICAgICAgICAgICAgICAgICAgICB0aGF0Lm9GcmVlUmVnU3ViQnV0dG9uLmRpc2Fi
bGVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgZGoudXRpbC5FbGVtZW50LnNob3codGhh
dC5vRnJlZVJlZ1NlcnZpY2VFcnJvck1zZyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgICAgIHRoYXQub0ZyZWVSZWdTdWJCdXR0b24uZGlzYWJsZWQgPSBmYWxzZTsK
ICAgICAgICAgICAgICAgICAgICBkai51dGlsLkVsZW1lbnQuc2hvdyh0aGF0Lm9GcmVlUmVnU2Vy
dmljZUVycm9yTXNnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0p
OwogICAgfSwKICAgIGNoZWNrRW1haWxJbkVtYWlsQ2VudGVyOiBmdW5jdGlvbiAoKSB7CiAgICAg
ICAgdGhpcy5vZW1haWxOYW1lID0gdGhpcy5vRnJlZVJlZ2lzdHJhdGlvbl9mb3JtW3RoaXMucmVn
RmllbGROYW1lWzJdXS52YWx1ZTsKICAgICAgICB2YXIgdGhhdCA9IHRoaXM7CiAgICAgICAgdGhp
cy5yZXF1ZXN0ID0gZG9qby54aHJHZXQoewogICAgICAgICAgICB1cmw6ICcvZW1haWxjaGVjay8n
ICsgdGhpcy5vZW1haWxOYW1lLAogICAgICAgICAgICBsb2FkOiBmdW5jdGlvbiAoZGF0YSkgewog
ICAgICAgICAgICAgICAgaWYgKGRhdGEpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJ2ZhbHNl
JyA9PT0gZG9qby5zdHJpcChkYXRhKSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGF0LmZy
ZWVSZWdSZXF1ZXN0KCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgndHJ1ZScgPT09
IGRvam8uc3RyaXAoZGF0YSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5vRnJlZVJl
Z1N1YkJ1dHRvbi5kaXNhYmxlZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQub0ZyZWVSZWdTdWJCdXR0b24uZGlzYWJsZWQg
PSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgZGoudXRpbC5FbGVtZW50LnNob3codGhh
dC5vRnJlZVJlZ1NlcnZpY2VFcnJvck1zZyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB0aGF0Lm9GcmVlUmVnU3ViQnV0
dG9uLmRpc2FibGVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgZGoudXRpbC5FbGVtZW50
LnNob3codGhhdC5vRnJlZVJlZ1NlcnZpY2VFcnJvck1zZyk7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgIH0sCiAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHsKICAgICAg
ICAgICAgICAgIHRoYXQub0ZyZWVSZWdTdWJCdXR0b24uZGlzYWJsZWQgPSBmYWxzZTsKICAgICAg
ICAgICAgICAgIGRqLnV0aWwuRWxlbWVudC5zaG93KHRoYXQub0ZyZWVSZWdTZXJ2aWNlRXJyb3JN
c2cpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9LAogICAgc3VibWl0cmVnRm9ybTog
ZnVuY3Rpb24gKCkgewogICAgICAgIHRoaXMub0Vycm9yQ291bnQgPSAwOwogICAgICAgIHRoaXMu
b1JlZ0ZpZWxkRXJyb3JNc2dzVmFsdWUgPSAiIjsKICAgICAgICBkai51dGlsLkVsZW1lbnQuaGlk
ZSh0aGlzLm9GcmVlcmVnZW1haWxlcnJvcm1zZyk7CiAgICAgICAgZGoudXRpbC5FbGVtZW50Lmhp
ZGUodGhpcy5vRnJlZXJlZ3VzZXJlcnJvcm1zZyk7CiAgICAgICAgZGoudXRpbC5FbGVtZW50Lmhp
ZGUodGhpcy5vRnJlZVJlZ1NlcnZpY2VFcnJvck1zZyk7CiAgICAgICAgdGhpcy5vRnJlZVJlZ1N1
YkJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgdGhpcy5jaGVja0ZyZWVSZWdCbHVyKDAp
OwogICAgICAgIHRoaXMuY2hlY2tGcmVlUmVnQmx1cigxKTsKICAgICAgICB0aGlzLmNoZWNrRnJl
ZVJlZ0JsdXIoMik7CiAgICAgICAgdGhpcy5jaGVja0ZyZWVSZWdCbHVyKDExKTsKICAgICAgICB0
aGlzLmNoZWNrRnJlZVJlZ0JsdXIoMyk7CiAgICAgICAgdGhpcy5jaGVja0ZyZWVSZWdCbHVyKDQp
OwogICAgICAgIHRoaXMuY29tcGFyZUZyZWVSZWdFbWFpbCgpOwogICAgICAgIHRoaXMuY29tcGFy
ZUZyZWVSZWdQYXNzd29yZCgpOwogICAgICAgIGlmICh0aGlzLm9FcnJvckNvdW50ID09PSAwKSB7
CiAgICAgICAgICAgIHRoaXMub1JlZ0ZpZWxkRXJyb3JNc2dzVmFsdWUgPSAiIjsKICAgICAgICB9
CiAgICAgICAgaWYgKHRoaXMub0Vycm9yQ291bnQgPiAwKSB7CiAgICAgICAgICAgIHRoaXMub3Jl
Z0ZpZWxkRXJyb3JNc2cuaW5uZXJIVE1MID0gIjxwPiIgKyB0aGlzLm9SZWdGaWVsZEVycm9yTXNn
c1ZhbHVlICsgIjwvcD4iOwogICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLm9SZWdGaWVsZEVy
cm9yTXNnc1ZhbHVlKTsKICAgICAgICAgICAgZGoudXRpbC5FbGVtZW50LnNob3codGhpcy5vcmVn
RmllbGRFcnJvck1zZyk7CiAgICAgICAgICAgIHRoaXMub0ZyZWVSZWdTdWJCdXR0b24uZGlzYWJs
ZWQgPSBmYWxzZTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgIHRoaXMub0ZyZWVSZWdTdWJCdXR0b24uZGlzYWJsZWQgPSB0cnVlOwogICAgICAg
ICAgICBkai51dGlsLkVsZW1lbnQuaGlkZSh0aGlzLm9yZWdGaWVsZEVycm9yTXNnKTsKICAgICAg
ICAgICAgdGhpcy5vUmVnRmllbGRFcnJvck1zZ3NWYWx1ZSA9ICIiOwogICAgICAgICAgICB0aGlz
Lm9yZWdGaWVsZEVycm9yTXNnLmlubmVySFRNTCA9ICIiOwogICAgICAgICAgICB0aGlzLmZyZWVS
ZWdSZXF1ZXN0KCk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgfQp9Owpkb2pvLnByb3ZpZGUoImRqLm1vZHVsZS5nbG9iYWxIZWFk
ZXIiKTsKZG9qby5kZXByZWNhdGVkKCJkai5tb2R1bGUuZ2xvYmFsSGVhZGVyIiwgInVzZSB0aGUg
b25lIGluIHRoZSAnaGVhZGVyJyBidW5kbGUiLCAiMC43Iik7CmRvam8ucmVxdWlyZSgiZGoubGFu
ZyIpOwpkb2pvLnJlcXVpcmUoImRqLnV0aWwuQ29uZmlnIik7CmRvam8ucmVxdWlyZSgiZGoudXRp
bC5Db29raWUiKTsKZG9qby5yZXF1aXJlKCJkai51dGlsLkRhdGUiKTsKZG9qby5yZXF1aXJlKCJk
ai51dGlsLlJlZ2lvbiIpOwpkb2pvLnJlcXVpcmUoImRqLnV0aWwuRWxlbWVudCIpOwpkb2pvLnJl
cXVpcmUoImRqLnV0aWwuVXNlciIpOwpkai5tb2R1bGUuZ2xvYmFsSGVhZGVyID0gZnVuY3Rpb24g
KCkgewogICAgdmFyIERFRkFVTFRfQ09ORklHID0gewogICAgICAgIEhFQURFUl9DT05UQUlORVJf
Q0xBU1M6ICIuaGVhZGVyIiwKICAgICAgICBUSU1FU1RBTVBfQ0xBU1M6ICIuZGF0ZSIsCiAgICAg
ICAgV1NKX0xPR09fSUQ6ICJ3c2pMb2dvIiwKICAgICAgICBXU0pfTEFSR0VfTE9HT19DTEFTU05B
TUU6ICJsb2dvX2xhcmdlIiwKICAgICAgICBXU0pfU01BTExfTE9HT19DTEFTU05BTUU6ICJsb2dv
X3NtYWxsIiwKICAgICAgICBDVVJSRU5UX1NVQlNFQ1RJT05fRElTUExBWV9DTEFTUzogIi5jdXJy
ZW50U3ViU2VjdGlvbiIsCiAgICAgICAgR0xPQkFMTkFWX1NVQlNFQ1RJT05fRUxFTUVOVF9JRDog
ImN1cnJlbnRHbG9iYWxOYXZTdWJTZWN0aW9uIiwKICAgICAgICBTVUJTQ1JJQkVSX0xPR0lOX0NM
QVNTOiAiLmxvZ2luIiwKICAgICAgICBIRUFERVJfUFJPTU9fQ0xBU1M6ICIucHJvbW8iLAogICAg
ICAgIFNVQlNDUklCRVJfREVUQUlMU19FTEVNRU5UX0lEOiAic3Vic2NyaWJlZFVzZXJEZXRhaWxz
SWQiLAogICAgICAgIENPTU1VTklUWV9GT1JVTVNfTElOS19DTEFTUzogIi5jb21tdW5pdHlGb3J1
bXNMaW5rIiwKICAgICAgICBUT0RBWVNfUEFQRVJfTElOS19DTEFTUzogIi50b2RheXNQYXBlckxp
bmsiLAogICAgICAgIE1PSl9MSU5LX0NMQVNTOiAiLm15T25saW5lSm91cm5hbExpbmsiLAogICAg
ICAgIE1FU1NBR0VfQ0VOVEVSX0xJTktfQ0xBU1M6ICIubWVzc2FnZUNlbnRlckxpbmsiLAogICAg
ICAgIE1FU1NBR0VfQ09VTlRfQ0xBU1M6ICIubWVzc2FnZUNvdW50IiwKICAgICAgICBMT0dJTl9V
U0VSTkFNRV9FTEVNRU5UX0lEOiAibG9naW5fdXNlcm5hbWUiLAogICAgICAgIExPR0lOX1BBU1NX
T1JEX0VMRU1FTlRfSUQ6ICJsb2dpbl9wYXNzd29yZCIsCiAgICAgICAgTE9HSU5fRk9STV9JRDog
ImxvZ2luX2Zvcm0iLAogICAgICAgIFBBR0VfVVJMX0VMRU1FTlRfSUQ6ICJwYWdlX3VybCIsCiAg
ICAgICAgTE9HT1VUX0xJTktfRUxFTUVOVF9JRDogImxvZ291dExpbmsiLAogICAgICAgIExPR0lO
X0JVVFRPTl9FTEVNRU5UX0lEOiAibG9naW5fYnV0dG9uIiwKICAgICAgICBVU0VSX05BTUVfRUxF
TUVOVF9JRDogInVzZXJOYW1lIiwKICAgICAgICBXU0pfTE9HT19GQURFX0FQUEVBUl9EVVJBVElP
TjogIjEuMCIsCiAgICAgICAgV1NKX0xPR09fREVMQVlfRFVSQVRJT046ICIyMDAwIiwKICAgICAg
ICBMT0dHRURfSU5fQ09NTVVOSVRZX1VSTDogIi9jb21tdW5pdHkiLAogICAgICAgIExPR0dFRF9J
Tl9UT0RBWVNfUEFQRVJfVVJMOiAiL2l0cD9tb2Q9V1NKX2Zvcm1mYWN0b3IiLAogICAgICAgIE1F
U1NBR0VfQ0VOVEVSX1BPU1RfVVJMOiAiL2NvbW11bml0eS9pbnRlZ3JhdGlvbi91c2VyaW5mby5o
dG1sIiwKICAgICAgICBMT0dPVVRfVVJMOiAiL3N0YXRpY19odG1sX2ZpbGVzL2xvZ291dF9jb25m
aXJtYXRpb24uaHRtIiwKICAgICAgICBTVUJTQ1JJQkVSX0hPTUVQQUdFX1BJRDogIjBfMF9XSF8w
MDAxIiwKICAgICAgICBOT05TVUJTQ1JJQkVSX0hPTUVQQUdFX1BJRDogIjBfMF9XSF8wMDAxX3B1
YmxpYyIsCiAgICAgICAgQVNJQV9QQUdFX1BJRDogIjBfMF9XUF8yMTAzIiwKICAgICAgICBFVVJP
UEVfUEFHRV9QSUQ6ICIwXzBfV1BfMjEwNCIsCiAgICAgICAgTk9OU1VCU0NSSUJFUl9ORVdTTEVU
VEVSU19BTEVSVFNfUEFHRV9QSUQ6ICI1XzYwMDciLAogICAgICAgIE5PTlNVQlNDUklCRVJfU0VB
UkNIX1BBR0VfUElEOiAiM18wNDY2IiwKICAgICAgICBIT01FUEFHRV9TVUJTQ1JJQkVSX1VSTDog
Ii8iLAogICAgICAgIFNFQVJDSF9QQUdFX1NVQlNDUklCRVJfVVJMOiAiL3NlYXJjaCIsCiAgICAg
ICAgVE9EQVlTX1BBUEVSX0xJTktfQ09OVEFJTkVSX0NMQVNTOiAiLnRvZGF5c1BhcGVyTGlua0Nv
bnRhaW5lciIsCiAgICAgICAgVklERU9fTElOS19DT05UQUlORVJfQ0xBU1M6ICIudmlkZW9MaW5r
Q29udGFpbmVyIiwKICAgICAgICBDT0xVTU5TX0xJTktfQ09OVEFJTkVSX0NMQVNTOiAiLmNvbHVt
bnNMaW5rQ29udGFpbmVyIiwKICAgICAgICBCTE9HU19MSU5LX0NPTlRBSU5FUl9DTEFTUzogIi5i
bG9nc0xpbmtDb250YWluZXIiLAogICAgICAgIElOVEVSQUNUSVZFX0dSQVBISUNTX0xJTktfQ09O
VEFJTkVSX0NMQVNTOiAiLmludGVyYWN0aXZlR3JhcGhpY3NMaW5rQ29udGFpbmVyIiwKICAgICAg
ICBUT1BJQ1NfTElOS19DT05UQUlORVJfQ0xBU1M6ICIudG9waWNzTGlua0NvbnRhaW5lciIsCiAg
ICAgICAgQ09NTVVOSVRZX0ZPUlVNU19MSU5LX0NPTlRBSU5FUl9DTEFTUzogIi5jb21tdW5pdHlG
b3J1bXNMaW5rQ29udGFpbmVyIiwKICAgICAgICBUT0RBWVNfUEFQRVJfUElEOiAiMF8wX1dQXzQw
IiwKICAgICAgICBUT0RBWVNfUEFQRVJfVVNfTk9OU1VCX1BJRDogIjJfMDQzMyIsCiAgICAgICAg
VE9EQVlTX1BBUEVSX0VVUk9QRV9OT05TVUJfUElEOiAiMl8wNDM0IiwKICAgICAgICBUT0RBWVNf
UEFQRVJfQVNJQV9OT05TVUJfUElEOiAiMl8wNDM1IiwKICAgICAgICBUT0RBWVNfUEFQRVJfVVNf
UElEOiAiMl8wMTMzIiwKICAgICAgICBUT0RBWVNfUEFQRVJfRVVST1BFX1BJRDogIjJfMDEzNCIs
CiAgICAgICAgVE9EQVlTX1BBUEVSX0FTSUFfUElEOiAiMl8wMTM1IiwKICAgICAgICBUT0RBWVNf
UEFQRVJfUEFTVF9FRElUSU9OU19QSUQ6ICIyXzAyMzMiLAogICAgICAgIFRPREFZU19QQVBFUl9J
TkRFWF9CSVpfUElEOiAiMl8wMTU2IiwKICAgICAgICBUT0RBWVNfUEFQRVJfSU5ERVhfUEVPUExF
X1BJRDogIjJfMDE1NSIsCiAgICAgICAgVE9EQVlTX1BBUEVSX0NPUlJFQ1RJT05TX1BJRDogIkNv
cnJlY3Rpb25zIiwKICAgICAgICBWSURFT19QSUQ6ICIwXzBfV1BfMzAwMCIsCiAgICAgICAgQkxP
R1NfUElEOiAiOF8wMDE5IiwKICAgICAgICBDT0xVTU5TX1BJRDogIjJfMDE0MCIsCiAgICAgICAg
SU5URVJBQ1RJVkVfR1JBUEhJQ1NfUElEOiAiMF8wX1dQXzIwMDMiLAogICAgICAgIFRPUElDU19Q
SUQ6ICIwXzBfV1RfMDAwMSIsCiAgICAgICAgTkVXU0xFVFRFUlNfQUxFUlRTX1NVQl9QSUQ6ICI1
XzYwMDEiLAogICAgICAgIE5FV1NMRVRURVJTX0FMRVJUU19QVUJfUElEOiAiNV82MDAzIiwKICAg
ICAgICBNT0pfTElOS19VUkw6ICIvcGFnZS9teS1qb3VybmFsLW1haW4uaHRtbCIsCiAgICAgICAg
TURDX0xJTktfVVJMOiAiL21kYy9wYWdlL21hcmtldHNkYXRhLmh0bWwiLAogICAgICAgIE1EQ19Q
QUdFX1BJRDogIjJfMzAwMCIsCiAgICAgICAgQ09NTVVOSVRZX0hJR0hMSUdIVF9DT01QQVJFX1VS
TDogIi9jb21tdW5pdHkiLAogICAgICAgIEZPUlVNU19ISUdITElHSFRfQ09NUEFSRV9VUkw6ICJm
b3J1bXMud3NqLmNvbSIsCiAgICAgICAgRlJFRV9SRUdfQ0xBU1M6ICIuZnJlZXJlZyIsCiAgICAg
ICAgTE9DQVRJT05fTkFWX0NMQVNTOiAiLmxvY2F0aW9uX25hdiIsCiAgICAgICAgTE9DQVRJT05f
TkFWX0NPTExBUFNFRF9DTEFTU05BTUU6ICJsb2NhdGlvbl9jb2xsYXBzZWQiLAogICAgICAgIExP
Q0FUSU9OX05BVl9FWFBBTkRFRF9DTEFTU05BTUU6ICJsb2NhdGlvbl9leHBhbmRlZCIsCiAgICAg
ICAgVVNfRURJVElPTl9MSU5LX0NMQVNTOiAiLm1hcF91cyIsCiAgICAgICAgRVVfRURJVElPTl9M
SU5LX0NMQVNTOiAiLm1hcF9ldXJvcGUiLAogICAgICAgIEFTSUFfRURJVElPTl9MSU5LX0NMQVNT
OiAiLm1hcF9hc2lhIiwKICAgICAgICBJTl9FRElUSU9OX0xJTktfQ0xBU1M6ICIubWFwX2luZGlh
IiwKICAgICAgICBMT0dHRURfSU5fVE9EQVlTX1BBUEVSX1VSTF9BU0lBOiAiL3BhZ2UvYXNpYV9p
bl90b2RheXNfcGFwZXIuaHRtbD9tb2Q9V1NKX2Zvcm1mYWN0b3IiLAogICAgICAgIExPR0dFRF9J
Tl9UT0RBWVNfUEFQRVJfVVJMX0VVUk9QRTogIi9wYWdlL2V1cm9wZV9pbl90b2RheXNfcGFwZXIu
aHRtbD9tb2Q9V1NKX2Zvcm1mYWN0b3IiLAogICAgICAgIFVTX0VESVRJT05fTURDX1VSTDogIi9t
YXJrZXRzZGF0YSIsCiAgICAgICAgRVVfRURJVElPTl9NRENfVVJMOiAiL21kYy9wdWJsaWMvcGFn
ZS9tYXJrZXRzZGF0YV9ldXJvcGUuaHRtbCIsCiAgICAgICAgQVNJQV9FRElUSU9OX01EQ19VUkw6
ICIvbWRjL3B1YmxpYy9wYWdlL21hcmtldHNkYXRhX2FzaWEuaHRtbCIsCiAgICAgICAgSU5fRURJ
VElPTl9NRENfVVJMOiAiL21kYy9wdWJsaWMvcGFnZS9tYXJrZXRzZGF0YV9hc2lhLmh0bWwiLAog
ICAgICAgIE1EQ19DT01QQVJFX1VSTDogIi9tZGMvIiwKICAgICAgICBGT09URVJfQ09OVEFJTkVS
X0NMQVNTOiAiLnBhZ2Vmb290ZXIiCiAgICB9OwogICAgcmV0dXJuIHsKICAgICAgICBpbml0aWFs
aXplOiBmdW5jdGlvbiAoY29uZmlnKSB7CiAgICAgICAgICAgIHRoaXMuY2ZnID0gZGoubGFuZy5j
bG9uZU1peGluKERFRkFVTFRfQ09ORklHLCBjb25maWcpOwogICAgICAgICAgICB2YXIgaGVhZGVy
Q29udGFpbmVyQ2xhc3MgPSB0aGlzLmNmZy5IRUFERVJfQ09OVEFJTkVSX0NMQVNTOwogICAgICAg
ICAgICB0aGlzLm9IZWFkZXIgPSBkb2pvLnF1ZXJ5KGhlYWRlckNvbnRhaW5lckNsYXNzKVswXTsK
ICAgICAgICAgICAgdGhpcy5lZGl0aW9uRHJvcGRvd25TZXRVcCgpOwogICAgICAgICAgICB0aGlz
LmRpc3BsYXlTdWJTZWN0aW9uKCk7CiAgICAgICAgICAgIHRoaXMuZGlzcGxheVRpbWVTdGFtcCgp
OwogICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7CiAgICAgICAgICAgIHRoaXMuY3VyclJlZ2lv
biA9IGRqLnV0aWwuUmVnaW9uLmdldFZpZXdCeVJlZ2lvbigpOwogICAgICAgICAgICB0aGlzLmNv
bmNhdFVSTCA9ICcnOwogICAgICAgICAgICBpZiAoKHR5cGVvZiBnY0RvbWFpbiAhPT0gInVuZGVm
aW5lZCIpICYmIChnY0RvbWFpbiAhPT0gbnVsbCkgJiYgKGdjRG9tYWluICE9PSAiIikpIHsKICAg
ICAgICAgICAgICAgIHRoaXMuY29uY2F0VVJMID0gImh0dHA6Ly8iICsgZ2NEb21haW47CiAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aGlzLmNvbmNhdFVSTCA9ICJodHRwOi8v
IiArIGRvY3VtZW50LmRvbWFpbjsKICAgICAgICAgICAgfQogICAgICAgICAgICBkai51dGlsLlVz
ZXIuaXNMb2dnZWRJbihmdW5jdGlvbiAoaXNMb2dnZWRJbikgewogICAgICAgICAgICAgICAgaWYg
KGlzTG9nZ2VkSW4pIHsKICAgICAgICAgICAgICAgICAgICB0aGF0LmRpc3BsYXlTdWJzY3JpYmVy
RGV0YWlscygpOwogICAgICAgICAgICAgICAgICAgIHRoYXQuc2V0dXBMb2dvdXQoKTsKICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdGhhdC5zZXR1cExvZ2luKCk7
CiAgICAgICAgICAgICAgICAgICAgdmFyIGZyZWVyZWdDbGFzcyA9IHRoYXQuY2ZnLkZSRUVfUkVH
X0NMQVNTOwogICAgICAgICAgICAgICAgICAgIHRoYXQub2ZyZWVyZWcgPSBkb2pvLnF1ZXJ5KGZy
ZWVyZWdDbGFzcywgdGhhdC5vSGVhZGVyKVswXTsKICAgICAgICAgICAgICAgICAgICB2YXIgcmVn
aXN0ZXJNb2R1bGUgPSBkb2pvLnF1ZXJ5KCIjcmVnaXN0ZXJfbW9kdWxlIiwgdGhhdC5vZnJlZXJl
ZylbMF07CiAgICAgICAgICAgICAgICAgICAgZG9qby5zdHlsZShyZWdpc3Rlck1vZHVsZSwgewog
ICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAibm9uZSIKICAgICAgICAgICAgICAgICAg
ICB9KTsKICAgICAgICAgICAgICAgICAgICBkb2pvLnN0eWxlKHRoYXQub2ZyZWVyZWcsIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogImJsb2NrIgogICAgICAgICAgICAgICAgICAg
IH0pOwogICAgICAgICAgICAgICAgICAgIHZhciBzdWJzY3JpYmVyTG9naW5DbGFzcyA9IHRoYXQu
Y2ZnLlNVQlNDUklCRVJfTE9HSU5fQ0xBU1M7CiAgICAgICAgICAgICAgICAgICAgdGhhdC5vU3Vi
c2NyaWJlckxvZ2luID0gZG9qby5xdWVyeShzdWJzY3JpYmVyTG9naW5DbGFzcywgdGhhdC5vSGVh
ZGVyKVswXTsKICAgICAgICAgICAgICAgICAgICB2YXIgbG9naW5Nb2R1bGUgPSBkb2pvLnF1ZXJ5
KCIubG9naW5fbW9kdWxlIiwgdGhhdC5vU3Vic2NyaWJlckxvZ2luKVswXTsKICAgICAgICAgICAg
ICAgICAgICBkb2pvLnN0eWxlKGxvZ2luTW9kdWxlLCB7CiAgICAgICAgICAgICAgICAgICAgICAg
IGRpc3BsYXk6ICJub25lIgogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAg
ICAgIGRvam8uc3R5bGUodGhhdC5vU3Vic2NyaWJlckxvZ2luLCB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGRpc3BsYXk6ICJibG9jayIKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAg
ICAgICAgICAgICB2YXIgaGVhZGVyUHJvbW9DbGFzcyA9IHRoYXQuY2ZnLkhFQURFUl9QUk9NT19D
TEFTUzsKICAgICAgICAgICAgICAgICAgICB0aGF0Lm9IZWFkZXJQcm9tbyA9IGRvam8ucXVlcnko
aGVhZGVyUHJvbW9DbGFzcywgdGhhdC5vSGVhZGVyKVswXTsKICAgICAgICAgICAgICAgICAgICBk
b2pvLnN0eWxlKHRoYXQub0hlYWRlclByb21vLCB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRp
c3BsYXk6ICJibG9jayIKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0Rm9ybUZhY3Rvckxpbmtz
KCk7CiAgICAgICAgICAgIHZhciB0b2RheXNQYXBlckxpbmtDbGFzcyA9IHRoaXMuY2ZnLlRPREFZ
U19QQVBFUl9MSU5LX0NMQVNTOwogICAgICAgICAgICB0aGlzLm9Ub2RheXNQYXBlckxpbmsgPSBk
b2pvLnF1ZXJ5KHRvZGF5c1BhcGVyTGlua0NsYXNzLCB0aGlzLm9IZWFkZXIpWzBdOwogICAgICAg
ICAgICB2YXIgbG9nZ2VkSW5Ub2RheXNQYXBlclVybCA9IHRoaXMuY2ZnLkxPR0dFRF9JTl9UT0RB
WVNfUEFQRVJfVVJMOwogICAgICAgICAgICB2YXIgbG9nZ2VkSW5Ub2RheXNQYXBlclVybEFzaWEg
PSB0aGlzLmNmZy5MT0dHRURfSU5fVE9EQVlTX1BBUEVSX1VSTF9BU0lBOwogICAgICAgICAgICB2
YXIgbG9nZ2VkSW5Ub2RheXNQYXBlclVybEV1cm9wZSA9IHRoaXMuY2ZnLkxPR0dFRF9JTl9UT0RB
WVNfUEFQRVJfVVJMX0VVUk9QRTsKICAgICAgICAgICAgdmFyIGN1cnJFZGl0aW9uID0gIiI7CiAg
ICAgICAgICAgIGlmICh0aGlzLmN1cnJSZWdpb24gPT0gImFzaWEiIHx8IHRoaXMuY3VyclJlZ2lv
biA9PSAiYXNpYSxpbmRpYSIpIHsKICAgICAgICAgICAgICAgIGxvZ2dlZEluVG9kYXlzUGFwZXJV
cmwgPSBsb2dnZWRJblRvZGF5c1BhcGVyVXJsQXNpYTsKICAgICAgICAgICAgfSBlbHNlIGlmICh0
aGlzLmN1cnJSZWdpb24gPT0gImV1cm9wZSIpIHsKICAgICAgICAgICAgICAgIGxvZ2dlZEluVG9k
YXlzUGFwZXJVcmwgPSBsb2dnZWRJblRvZGF5c1BhcGVyVXJsRXVyb3BlOwogICAgICAgICAgICB9
CiAgICAgICAgICAgIGlmICgodHlwZW9mIGdjRG9tYWluICE9PSAidW5kZWZpbmVkIikgJiYgKGdj
RG9tYWluICE9PSBudWxsKSAmJiAoZ2NEb21haW4gIT09ICIiKSkgewogICAgICAgICAgICAgICAg
dGhpcy5vVG9kYXlzUGFwZXJMaW5rLmhyZWYgPSAiaHR0cDovLyIgKyBnY0RvbWFpbiArIGxvZ2dl
ZEluVG9kYXlzUGFwZXJVcmw7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0
aGlzLm9Ub2RheXNQYXBlckxpbmsuaHJlZiA9IGxvZ2dlZEluVG9kYXlzUGFwZXJVcmw7CiAgICAg
ICAgICAgIH0KICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzOwogICAgICAgICAgICBkai51dGls
LlVzZXIuaXNTdWJMb2dnZWRJbihmdW5jdGlvbiAoc3ViTG9nZ2VkSW4pIHsKICAgICAgICAgICAg
ICAgIGlmICghc3ViTG9nZ2VkSW4pIHsKICAgICAgICAgICAgICAgICAgICBpZiAoKHR5cGVvZiBn
Y0RvbWFpbiAhPT0gInVuZGVmaW5lZCIpICYmIChnY0RvbWFpbiAhPT0gbnVsbCkgJiYgKGdjRG9t
YWluICE9PSAiIikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5vVG9kYXlzUGFwZXJM
aW5rLmhyZWYgPSAiaHR0cDovLyIgKyBnY0RvbWFpbiArICIvcHVibGljIiArIGxvZ2dlZEluVG9k
YXlzUGFwZXJVcmw7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgdGhhdC5vVG9kYXlzUGFwZXJMaW5rLmhyZWYgPSAiL3B1YmxpYyIgKyBsb2dnZWRJ
blRvZGF5c1BhcGVyVXJsOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgICB0b2dnbGVEcm9wZG93bkNsYXNzOiBm
dW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBzZWxMb2NEcnBkd25Db2xsYXBzZWRDbGFzc05h
bWUgPSB0aGlzLmNmZy5MT0NBVElPTl9OQVZfQ09MTEFQU0VEX0NMQVNTTkFNRTsKICAgICAgICAg
ICAgdmFyIHNlbExvY0RycGR3bkV4cGFuZGVkQ2xhc3NOYW1lID0gdGhpcy5jZmcuTE9DQVRJT05f
TkFWX0VYUEFOREVEX0NMQVNTTkFNRTsKICAgICAgICAgICAgaWYgKGRvam8uaGFzQ2xhc3ModGhp
cy5vTG9jRHJvcERvd25Db250YWluZXIsIHNlbExvY0RycGR3bkNvbGxhcHNlZENsYXNzTmFtZSkp
IHsKICAgICAgICAgICAgICAgIGRvam8ucmVtb3ZlQ2xhc3ModGhpcy5vTG9jRHJvcERvd25Db250
YWluZXIsIHNlbExvY0RycGR3bkNvbGxhcHNlZENsYXNzTmFtZSk7CiAgICAgICAgICAgICAgICBk
b2pvLmFkZENsYXNzKHRoaXMub0xvY0Ryb3BEb3duQ29udGFpbmVyLCBzZWxMb2NEcnBkd25FeHBh
bmRlZENsYXNzTmFtZSk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoZG9qby5oYXNDbGFzcyh0aGlz
Lm9Mb2NEcm9wRG93bkNvbnRhaW5lciwgc2VsTG9jRHJwZHduRXhwYW5kZWRDbGFzc05hbWUpKSB7
CiAgICAgICAgICAgICAgICBkb2pvLmFkZENsYXNzKHRoaXMub0xvY0Ryb3BEb3duQ29udGFpbmVy
LCBzZWxMb2NEcnBkd25Db2xsYXBzZWRDbGFzc05hbWUpOwogICAgICAgICAgICB9CiAgICAgICAg
fSwKICAgICAgICBlZGl0aW9uRHJvcGRvd25TZXRVcDogZnVuY3Rpb24gKCkgewogICAgICAgICAg
ICB2YXIgdGhhdCA9IHRoaXM7CiAgICAgICAgICAgIHZhciBsb2NhdGlvbk5hdkNsYXNzID0gdGhp
cy5jZmcuTE9DQVRJT05fTkFWX0NMQVNTOwogICAgICAgICAgICB0aGlzLm9Mb2NhdGlvbk5hdiA9
IGRvam8ucXVlcnkobG9jYXRpb25OYXZDbGFzcywgdGhpcy5vSGVhZGVyKVswXTsKICAgICAgICAg
ICAgdmFyIHNlbExvY0RycGR3bkNvbGxhcHNlZENsYXNzTmFtZSA9IHRoaXMuY2ZnLkxPQ0FUSU9O
X05BVl9DT0xMQVBTRURfQ0xBU1NOQU1FOwogICAgICAgICAgICB2YXIgc2VsTG9jRHJwZHduRXhw
YW5kZWRDbGFzc05hbWUgPSB0aGlzLmNmZy5MT0NBVElPTl9OQVZfRVhQQU5ERURfQ0xBU1NOQU1F
OwogICAgICAgICAgICB2YXIgdXNFZGl0aW9uTGlua0NsYXNzTmFtZSA9IHRoaXMuY2ZnLlVTX0VE
SVRJT05fTElOS19DTEFTUzsKICAgICAgICAgICAgdmFyIHVzRWRpdGlvbkxpbmtDbGFzc05hbWUg
PSB0aGlzLmNmZy5VU19FRElUSU9OX0xJTktfQ0xBU1M7CiAgICAgICAgICAgIHZhciBldUVkaXRp
b25MaW5rQ2xhc3NOYW1lID0gdGhpcy5jZmcuRVVfRURJVElPTl9MSU5LX0NMQVNTOwogICAgICAg
ICAgICB2YXIgaW5FZGl0aW9uTGlua0NsYXNzTmFtZSA9IHRoaXMuY2ZnLklOX0VESVRJT05fTElO
S19DTEFTUzsKICAgICAgICAgICAgdmFyIGFzaWFFZGl0aW9uTGlua0NsYXNzTmFtZSA9IHRoaXMu
Y2ZnLkFTSUFfRURJVElPTl9MSU5LX0NMQVNTOwogICAgICAgICAgICB0aGlzLnVzRWRpdGlvbk1E
Q1VybCA9IHRoaXMuY2ZnLlVTX0VESVRJT05fTURDX1VSTDsKICAgICAgICAgICAgdGhpcy5ldUVk
aXRpb25NRENVcmwgPSB0aGlzLmNmZy5FVV9FRElUSU9OX01EQ19VUkw7CiAgICAgICAgICAgIHRo
aXMuaW5FZGl0aW9uTURDVXJsID0gdGhpcy5jZmcuSU5fRURJVElPTl9NRENfVVJMOwogICAgICAg
ICAgICB0aGlzLmFzaWFFZGl0aW9uTURDVXJsID0gdGhpcy5jZmcuQVNJQV9FRElUSU9OX01EQ19V
Ukw7CiAgICAgICAgICAgIHZhciBtZGNDb21wYXJlVXJsID0gdGhpcy5jZmcuTURDX0NPTVBBUkVf
VVJMOwogICAgICAgICAgICB0aGlzLm9DdXJyZW50RWRpdGlvbiA9IGRvam8uYnlJZCgiY3VycmVu
dEVkaXRpb24iKTsKICAgICAgICAgICAgdGhpcy5vVXNFZGl0aW9uID0gZG9qby5ieUlkKCJ1c0Vk
aXRpb24iKTsKICAgICAgICAgICAgdGhpcy5vRXVFZGl0aW9uID0gZG9qby5ieUlkKCJldXJvcGVF
ZGl0aW9uIik7CiAgICAgICAgICAgIHRoaXMub0luRWRpdGlvbiA9IGRvam8uYnlJZCgiaW5kaWFF
ZGl0aW9uIik7CiAgICAgICAgICAgIHRoaXMub0FzaWFFZGl0aW9uID0gZG9qby5ieUlkKCJhc2lh
RWRpdGlvbiIpOwogICAgICAgICAgICB0aGlzLm9DaGlFZGl0aW9uID0gZG9qby5ieUlkKCJjaGlF
ZGl0aW9uIik7CiAgICAgICAgICAgIHRoaXMub1NwYUVkaXRpb24gPSBkb2pvLmJ5SWQoInNwYUVk
aXRpb24iKTsKICAgICAgICAgICAgdGhpcy5vUG9yRWRpdGlvbiA9IGRvam8uYnlJZCgicG9yRWRp
dGlvbiIpOwogICAgICAgICAgICB0aGlzLm9zZWN0aW9uRm9vdGVyU3ViID0gZG9qby5ieUlkKCJo
cmVmTm9uU3ViSWQiKTsKICAgICAgICAgICAgdGhpcy5vc2VjdGlvbkZvb3Rlck5vblN1YiA9IGRv
am8uYnlJZCgiaHJlZlN1YklkIik7CiAgICAgICAgICAgIHRoaXMub1VzRWRpdGlvbkZvb3RlciA9
IGRvam8uYnlJZCgidXNFZGl0aW9uRm9vdGVyIik7CiAgICAgICAgICAgIHRoaXMuY3VyclJlZ2lv
biA9IGRqLnV0aWwuUmVnaW9uLmdldFZpZXdCeVJlZ2lvbigpOwogICAgICAgICAgICB2YXIgY3Vy
ckVkaXRpb24gPSAiIjsKICAgICAgICAgICAgaWYgKCh0eXBlb2YgZ2NEb21haW4gIT09ICJ1bmRl
ZmluZWQiKSAmJiAoZ2NEb21haW4gIT09IG51bGwpICYmIChnY0RvbWFpbiAhPT0gIiIpKSB7CiAg
ICAgICAgICAgICAgICB0aGlzLnRlbXBDb25jYXRVUkwgPSAiaHR0cDovLyIgKyBnY0RvbWFpbjsK
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRoaXMudGVtcENvbmNhdFVSTCA9
ICJodHRwOi8vIiArIGRvY3VtZW50LmRvbWFpbjsKICAgICAgICAgICAgfQogICAgICAgICAgICB0
aGlzLmlzTURDUGFnZUZsYWcgPSAoKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYgIT09IG51bGwpICYm
IChkb2N1bWVudC5sb2NhdGlvbi5ocmVmICE9PSAiIikgJiYgKGRvY3VtZW50LmxvY2F0aW9uLmhy
ZWYuaW5kZXhPZihtZGNDb21wYXJlVXJsKSAhPT0gLTEpKTsKICAgICAgICAgICAgaWYgKHRoaXMu
b1VzRWRpdGlvbiAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgZG9qby5jb25uZWN0KHRoaXMu
b1VzRWRpdGlvbiwgIm9uY2xpY2siLCB0aGlzLCBmdW5jdGlvbiAoZXYpIHsKICAgICAgICAgICAg
ICAgICAgICBkb2pvLnN0b3BFdmVudChldik7CiAgICAgICAgICAgICAgICAgICAgZGoudXRpbC5S
ZWdpb24uc2V0Vmlld0J5UmVnaW9uKCduYSx1cycpOwogICAgICAgICAgICAgICAgICAgIGRqLnV0
aWwuQ29va2llLnNldEdyb3VwQ29va2llKCJESkNPT0tJRSIsICJIT01FUEFHRSIsICIvaG9tZS1w
YWdlIiwgMzY1KTsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24gPSAodGhpcy5p
c01EQ1BhZ2VGbGFnKSA/IHRoaXMudGVtcENvbmNhdFVSTCArIHRoaXMudXNFZGl0aW9uTURDVXJs
IDogdGhpcy5vVXNFZGl0aW9uLmhyZWY7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAg
fQogICAgICAgICAgICBpZiAodGhpcy5vVXNFZGl0aW9uRm9vdGVyICE9PSBudWxsKSB7CiAgICAg
ICAgICAgICAgICBkb2pvLmNvbm5lY3QodGhpcy5vVXNFZGl0aW9uRm9vdGVyLCAib25jbGljayIs
IHRoaXMsIGZ1bmN0aW9uIChldikgewogICAgICAgICAgICAgICAgICAgIGRvam8uc3RvcEV2ZW50
KGV2KTsKICAgICAgICAgICAgICAgICAgICBkai51dGlsLlJlZ2lvbi5zZXRWaWV3QnlSZWdpb24o
J25hLHVzJyk7CiAgICAgICAgICAgICAgICAgICAgZGoudXRpbC5Db29raWUuc2V0R3JvdXBDb29r
aWUoIkRKQ09PS0lFIiwgIkhPTUVQQUdFIiwgIi9ob21lL3VzIiwgMzY1KTsKICAgICAgICAgICAg
ICAgICAgICB3aW5kb3cubG9jYXRpb24gPSAodGhpcy5pc01EQ1BhZ2VGbGFnKSA/IHRoaXMudGVt
cENvbmNhdFVSTCArIHRoaXMudXNFZGl0aW9uTURDVXJsIDogdGhpcy5vVXNFZGl0aW9uRm9vdGVy
LmhyZWY7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAo
dGhpcy5vRXVFZGl0aW9uICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICBkb2pvLmNvbm5lY3Qo
dGhpcy5vRXVFZGl0aW9uLCAib25jbGljayIsIHRoaXMsIGZ1bmN0aW9uIChldikgewogICAgICAg
ICAgICAgICAgICAgIGRvam8uc3RvcEV2ZW50KGV2KTsKICAgICAgICAgICAgICAgICAgICB3aW5k
b3cubG9jYXRpb24gPSAodGhpcy5pc01EQ1BhZ2VGbGFnKSA/IHRoaXMudGVtcENvbmNhdFVSTCAr
IHRoaXMuZXVFZGl0aW9uTURDVXJsIDogdGhpcy5vRXVFZGl0aW9uLmhyZWY7CiAgICAgICAgICAg
ICAgICAgICAgaWYgKHRoaXMuaXNNRENQYWdlRmxhZykgewogICAgICAgICAgICAgICAgICAgICAg
ICBkai51dGlsLlJlZ2lvbi5zZXRWaWV3QnlSZWdpb24oImV1cm9wZSIpOwogICAgICAgICAgICAg
ICAgICAgICAgICBkai51dGlsLkNvb2tpZS5zZXRHcm91cENvb2tpZSgiREpDT09LSUUiLCAiSE9N
RVBBR0UiLCAiL2hvbWUvZXVyb3BlIiwgMzY1KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodGhpcy5vSW5FZGl0
aW9uICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICBkb2pvLmNvbm5lY3QodGhpcy5vSW5FZGl0
aW9uLCAib25jbGljayIsIHRoaXMsIGZ1bmN0aW9uIChldikgewogICAgICAgICAgICAgICAgICAg
IGRvam8uc3RvcEV2ZW50KGV2KTsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24g
PSAodGhpcy5pc01EQ1BhZ2VGbGFnKSA/IHRoaXMudGVtcENvbmNhdFVSTCArIHRoaXMuaW5FZGl0
aW9uTURDVXJsIDogdGhpcy5vSW5FZGl0aW9uLmhyZWY7CiAgICAgICAgICAgICAgICAgICAgaWYg
KHRoaXMuaXNNRENQYWdlRmxhZykgewogICAgICAgICAgICAgICAgICAgICAgICBkai51dGlsLlJl
Z2lvbi5zZXRWaWV3QnlSZWdpb24oImFzaWEsaW5kaWEiKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgZGoudXRpbC5Db29raWUuc2V0R3JvdXBDb29raWUoIkRKQ09PS0lFIiwgIkhPTUVQQUdFIiwg
Ii9ob21lL2luZGlhIiwgMzY1KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodGhpcy5vQXNpYUVkaXRpb24gIT09
IG51bGwpIHsKICAgICAgICAgICAgICAgIGRvam8uY29ubmVjdCh0aGlzLm9Bc2lhRWRpdGlvbiwg
Im9uY2xpY2siLCB0aGlzLCBmdW5jdGlvbiAoZXYpIHsKICAgICAgICAgICAgICAgICAgICBkb2pv
LnN0b3BFdmVudChldik7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uID0gKHRo
aXMuaXNNRENQYWdlRmxhZykgPyB0aGlzLnRlbXBDb25jYXRVUkwgKyB0aGlzLmFzaWFFZGl0aW9u
TURDVXJsIDogdGhpcy5vQXNpYUVkaXRpb24uaHJlZjsKICAgICAgICAgICAgICAgICAgICBpZiAo
dGhpcy5pc01EQ1BhZ2VGbGFnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRqLnV0aWwuUmVn
aW9uLnNldFZpZXdCeVJlZ2lvbigiYXNpYSIpOwogICAgICAgICAgICAgICAgICAgICAgICBkai51
dGlsLkNvb2tpZS5zZXRHcm91cENvb2tpZSgiREpDT09LSUUiLCAiSE9NRVBBR0UiLCAiL2hvbWUv
YXNpYSIsIDM2NSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAg
ICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHRoaXMub0NoaUVkaXRpb24gIT09IG51bGwpIHsK
ICAgICAgICAgICAgICAgIGRvam8uY29ubmVjdCh0aGlzLm9DaGlFZGl0aW9uLCAib25jbGljayIs
IHRoaXMsIGZ1bmN0aW9uIChldikgewogICAgICAgICAgICAgICAgICAgIGRvam8uc3RvcEV2ZW50
KGV2KTsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cub3Blbih0aGlzLm9DaGlFZGl0aW9uLmhy
ZWYpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHRo
aXMub1NwYUVkaXRpb24gIT09IG51bGwpIHsKICAgICAgICAgICAgICAgIGRvam8uY29ubmVjdCh0
aGlzLm9TcGFFZGl0aW9uLCAib25jbGljayIsIHRoaXMsIGZ1bmN0aW9uIChldikgewogICAgICAg
ICAgICAgICAgICAgIGRvam8uc3RvcEV2ZW50KGV2KTsKICAgICAgICAgICAgICAgICAgICB3aW5k
b3cubG9jYXRpb24gPSB0aGlzLm9TcGFFZGl0aW9uLmhyZWY7CiAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodGhpcy5vUG9yRWRpdGlvbiAhPT0gbnVsbCkg
ewogICAgICAgICAgICAgICAgZG9qby5jb25uZWN0KHRoaXMub1BvckVkaXRpb24sICJvbmNsaWNr
IiwgdGhpcywgZnVuY3Rpb24gKGV2KSB7CiAgICAgICAgICAgICAgICAgICAgZG9qby5zdG9wRXZl
bnQoZXYpOwogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IHRoaXMub1BvckVk
aXRpb24uaHJlZjsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICAg
IGlmICh0aGlzLm9zZWN0aW9uRm9vdGVyU3ViICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICBk
b2pvLmNvbm5lY3QodGhpcy5vc2VjdGlvbkZvb3RlclN1YiwgIm9uY2xpY2siLCB0aGlzLCBmdW5j
dGlvbiAoZXYpIHsKICAgICAgICAgICAgICAgICAgICBkb2pvLnN0b3BFdmVudChldik7CiAgICAg
ICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uID0gdGhpcy5vc2VjdGlvbkZvb3RlclN1Yi5o
cmVmOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHRo
aXMub3NlY3Rpb25Gb290ZXJOb25TdWIgIT09IG51bGwpIHsKICAgICAgICAgICAgICAgIGRvam8u
Y29ubmVjdCh0aGlzLm9zZWN0aW9uRm9vdGVyTm9uU3ViLCAib25jbGljayIsIHRoaXMsIGZ1bmN0
aW9uIChldikgewogICAgICAgICAgICAgICAgICAgIGRvam8uc3RvcEV2ZW50KGV2KTsKICAgICAg
ICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24gPSB0aGlzLm9zZWN0aW9uRm9vdGVyTm9uU3Vi
LmhyZWY7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAo
dGhpcy5jdXJyUmVnaW9uID09ICJhc2lhIikgewogICAgICAgICAgICAgICAgY3VyckVkaXRpb24g
PSAiQXNpYSBFZGl0aW9uIjsKICAgICAgICAgICAgICAgIHRoaXMub1NlbGVjdGVkRWRpdGlvbiA9
IGRvam8ucXVlcnkoYXNpYUVkaXRpb25MaW5rQ2xhc3NOYW1lLCB0aGlzLm9IZWFkZXIpWzBdOwog
ICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY3VyclJlZ2lvbiA9PSAiYXNpYSxpbmRpYSIpIHsK
ICAgICAgICAgICAgICAgIGN1cnJFZGl0aW9uID0gIkFzaWEgRWRpdGlvbiI7CiAgICAgICAgICAg
ICAgICB0aGlzLm9TZWxlY3RlZEVkaXRpb24gPSBkb2pvLnF1ZXJ5KGluRWRpdGlvbkxpbmtDbGFz
c05hbWUsIHRoaXMub0hlYWRlcilbMF07CiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJy
UmVnaW9uID09ICJldXJvcGUiKSB7CiAgICAgICAgICAgICAgICBjdXJyRWRpdGlvbiA9ICJFdXJv
cGUgRWRpdGlvbiI7CiAgICAgICAgICAgICAgICB0aGlzLm9TZWxlY3RlZEVkaXRpb24gPSBkb2pv
LnF1ZXJ5KGV1RWRpdGlvbkxpbmtDbGFzc05hbWUsIHRoaXMub0hlYWRlcilbMF07CiAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBjdXJyRWRpdGlvbiA9ICJVLlMuIEVkaXRpb24i
OwogICAgICAgICAgICAgICAgdGhpcy5vU2VsZWN0ZWRFZGl0aW9uID0gZG9qby5xdWVyeSh1c0Vk
aXRpb25MaW5rQ2xhc3NOYW1lLCB0aGlzLm9IZWFkZXIpWzBdOwogICAgICAgICAgICB9CiAgICAg
ICAgICAgIGRvam8uYWRkQ2xhc3ModGhpcy5vU2VsZWN0ZWRFZGl0aW9uLCAic2VsZWN0ZWQiKTsK
ICAgICAgICAgICAgdGhpcy5vQ3VycmVudEVkaXRpb24uaW5uZXJIVE1MID0gY3VyckVkaXRpb247
CiAgICAgICAgICAgIHRoaXMub0Zvcm1GYWN0b3JDb250YWluZXIgPSBkb2pvLmJ5SWQoImZvcm1G
YWN0b3JDb250YWluZXIiKTsKICAgICAgICAgICAgZG9qby5zdHlsZSh0aGlzLm9Gb3JtRmFjdG9y
Q29udGFpbmVyLCB7CiAgICAgICAgICAgICAgICAiZGlzcGxheSI6ICIiCiAgICAgICAgICAgIH0p
OwogICAgICAgICAgICB0aGlzLm9Mb2NEcm9wRG93bkNvbnRhaW5lciA9IGRvam8uYnlJZCgibG9j
TmF2Q29udGFpbmVyIik7CiAgICAgICAgICAgIGRvam8uc3R5bGUodGhpcy5vTG9jRHJvcERvd25D
b250YWluZXIsIHsKICAgICAgICAgICAgICAgICJkaXNwbGF5IjogIiIKICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgIGlmICh0aGlzLm9Mb2NEcm9wRG93bkNvbnRhaW5lciAhPT0gbnVsbCkgewog
ICAgICAgICAgICAgICAgdmFyIHRvZ2dsZURyb3Bkb3duQ2xhc3MgPSBmdW5jdGlvbiAoKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChkb2pvLmhhc0NsYXNzKHRoYXQub0xvY0Ryb3BEb3du
Q29udGFpbmVyLCBzZWxMb2NEcnBkd25Db2xsYXBzZWRDbGFzc05hbWUpKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkb2pvLnJlbW92ZUNsYXNzKHRoYXQub0xvY0Ryb3BEb3duQ29udGFp
bmVyLCBzZWxMb2NEcnBkd25Db2xsYXBzZWRDbGFzc05hbWUpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZG9qby5hZGRDbGFzcyh0aGF0Lm9Mb2NEcm9wRG93bkNvbnRhaW5lciwgc2VsTG9j
RHJwZHduRXhwYW5kZWRDbGFzc05hbWUpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKGRvam8uaGFzQ2xhc3ModGhhdC5vTG9jRHJvcERvd25Db250YWluZXIsIHNlbExvY0RycGR3
bkV4cGFuZGVkQ2xhc3NOYW1lKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9qby5y
ZW1vdmVDbGFzcyh0aGF0Lm9Mb2NEcm9wRG93bkNvbnRhaW5lciwgc2VsTG9jRHJwZHduRXhwYW5k
ZWRDbGFzc05hbWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9qby5hZGRDbGFzcyh0
aGF0Lm9Mb2NEcm9wRG93bkNvbnRhaW5lciwgc2VsTG9jRHJwZHduQ29sbGFwc2VkQ2xhc3NOYW1l
KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH07CiAgICAg
ICAgICAgICAgICBkb2pvLmNvbm5lY3QodGhpcy5vTG9jYXRpb25OYXYsICJvbmNsaWNrIiwgdGhp
cywgZnVuY3Rpb24gKGV2ZW50KSB7CiAgICAgICAgICAgICAgICAgICAgZG9qby5zdG9wRXZlbnQo
ZXZlbnQpOwogICAgICAgICAgICAgICAgICAgIHRvZ2dsZURyb3Bkb3duQ2xhc3MoKTsKICAgICAg
ICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgZG9qby5jb25uZWN0KGRvY3VtZW50LCAib25j
bGljayIsIHRoaXMsIGZ1bmN0aW9uIChldmVudCkgewogICAgICAgICAgICAgICAgICAgIHZhciBp
c01vdXNlUG9pbnRlcmluTW9kYWxDb250YWluZXIgPSBkai51dGlsLkVsZW1lbnQuY29udGFpbnMo
dGhpcy5vTG9jRHJvcERvd25Db250YWluZXIsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkp
OwogICAgICAgICAgICAgICAgICAgIGlmIChpc01vdXNlUG9pbnRlcmluTW9kYWxDb250YWluZXIg
PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvam8uaGFzQ2xhc3ModGhp
cy5vTG9jRHJvcERvd25Db250YWluZXIsIHNlbExvY0RycGR3bkV4cGFuZGVkQ2xhc3NOYW1lKSkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9qby5yZW1vdmVDbGFzcyh0aGlzLm9Mb2NE
cm9wRG93bkNvbnRhaW5lciwgc2VsTG9jRHJwZHduRXhwYW5kZWRDbGFzc05hbWUpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZG9qby5hZGRDbGFzcyh0aGlzLm9Mb2NEcm9wRG93bkNvbnRh
aW5lciwgc2VsTG9jRHJwZHduQ29sbGFwc2VkQ2xhc3NOYW1lKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAg
ICAgICAgICAgdGhpcy5vU2VjdGlvbkZvb3Rlck5vblN1YiA9IGRvam8uYnlJZCgic2VjdGlvbkZv
b3Rlck5vblN1YiIpOwogICAgICAgICAgICAgICAgdGhpcy5vU2VjdGlvbkZvb3RlclN1YiA9IGRv
am8uYnlJZCgic2VjdGlvbkZvb3RlclN1YiIpOwogICAgICAgICAgICAgICAgZGoudXRpbC5Vc2Vy
LmlzTG9nZ2VkSW4oZnVuY3Rpb24gKGlzTG9nZ2VkSW4pIHsKICAgICAgICAgICAgICAgICAgICBp
ZiAoaXNMb2dnZWRJbikgewogICAgICAgICAgICAgICAgICAgICAgICBkb2pvLnN0eWxlKHRoYXQu
b1NlY3Rpb25Gb290ZXJOb25TdWIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXNw
bGF5IjogIm5vbmUiCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAg
ICAgICAgICBkb2pvLnN0eWxlKHRoYXQub1NlY3Rpb25Gb290ZXJTdWIsIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJkaXNwbGF5IjogIiIKICAgICAgICAgICAgICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgZG9q
by5zdHlsZSh0aGF0Lm9TZWN0aW9uRm9vdGVyTm9uU3ViLCB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiZGlzcGxheSI6ICIiCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAg
ICAgICAgICAgICAgICAgICBkb2pvLnN0eWxlKHRoYXQub1NlY3Rpb25Gb290ZXJTdWIsIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJkaXNwbGF5IjogIm5vbmUiCiAgICAgICAgICAgICAg
ICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwog
ICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBkaXNwbGF5VGltZVN0YW1wOiBmdW5jdGlv
biAoKSB7CiAgICAgICAgICAgIHZhciB0aW1lc3RhbXBDbGFzcyA9IHRoaXMuY2ZnLlRJTUVTVEFN
UF9DTEFTUzsKICAgICAgICAgICAgdGhpcy5vVGltZXN0YW1wID0gZG9qby5xdWVyeSh0aW1lc3Rh
bXBDbGFzcywgdGhpcy5vSGVhZGVyKVswXTsKICAgICAgICAgICAgaWYgKCh0eXBlb2YgcERhdGUg
IT09ICJ1bmRlZmluZWQiKSAmJiAodGhpcy5vVGltZXN0YW1wICE9PSBudWxsKSkgewogICAgICAg
ICAgICAgICAgaWYgKHdpbmRvdy5wU3RsID09ICJyZW5vdmF0aW9uIikgewogICAgICAgICAgICAg
ICAgICAgIHZhciBwdWJEYXRlID0gZGoudXRpbC5EYXRlLmRpc3BsYXlUaW1lKHBEYXRlLCBwRGF0
ZWluR01UKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLm9UaW1lc3RhbXAuaW5uZXJIVE1MID0g
cHViRGF0ZTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdGhp
cy5vVGltZXN0YW1wLmlubmVySFRNTCA9IHBEYXRlOwogICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICB9CiAgICAgICAgfSwKICAgICAgICBkaXNwbGF5U3ViU2VjdGlvbjogZnVuY3Rpb24gKCkg
ewogICAgICAgICAgICB0aGlzLm9DdXJyZW50U3ViU2VjdGlvbiA9IGRvam8ucXVlcnkodGhpcy5j
ZmcuQ1VSUkVOVF9TVUJTRUNUSU9OX0RJU1BMQVlfQ0xBU1MsIHRoaXMub0hlYWRlcilbMF07CiAg
ICAgICAgICAgIGlmICgodHlwZW9mIGdsb2JhbEhlYWRlclBhZ2VUaXRsZSAhPT0gInVuZGVmaW5l
ZCIpICYmIChnbG9iYWxIZWFkZXJQYWdlVGl0bGUgIT09IG51bGwpICYmIChnbG9iYWxIZWFkZXJQ
YWdlVGl0bGUgIT09ICIiKSkgewogICAgICAgICAgICAgICAgdGhpcy5vQ3VycmVudFN1YlNlY3Rp
b24uaW5uZXJIVE1MID0gZ2xvYmFsSGVhZGVyUGFnZVRpdGxlOwogICAgICAgICAgICAgICAgdGhp
cy5fZGVsYXllZEZhZGVJblN1YlNlY3Rpb24oKTsKICAgICAgICAgICAgfQogICAgICAgIH0sCiAg
ICAgICAgX2RlbGF5ZWRGYWRlSW5TdWJTZWN0aW9uOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAg
IHNldFRpbWVvdXQoZG9qby5oaXRjaCh0aGlzLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAg
ICBkb2pvLnN0eWxlKHRoaXMub0N1cnJlbnRTdWJTZWN0aW9uLCB7CiAgICAgICAgICAgICAgICAg
ICAgImRpc3BsYXkiOiAiaW5saW5lIiwKICAgICAgICAgICAgICAgICAgICAib3BhY2l0eSI6IDAK
ICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgZG9qby5mYWRlSW4oewogICAgICAg
ICAgICAgICAgICAgIG5vZGU6IHRoaXMub0N1cnJlbnRTdWJTZWN0aW9uLAogICAgICAgICAgICAg
ICAgICAgIGR1cmF0aW9uOiAodGhpcy5jZmcuV1NKX0xPR09fRkFERV9BUFBFQVJfRFVSQVRJT04g
KiAxMDAwKQogICAgICAgICAgICAgICAgfSkucGxheSgpOwogICAgICAgICAgICB9KSwgdGhpcy5j
ZmcuV1NKX0xPR09fREVMQVlfRFVSQVRJT04pOwogICAgICAgIH0sCiAgICAgICAgZGlzcGxheVN1
YnNjcmliZXJEZXRhaWxzOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciB1c2VyTmFtZUVs
ZW1lbnRJZCA9IHRoaXMuY2ZnLlVTRVJfTkFNRV9FTEVNRU5UX0lEOwogICAgICAgICAgICBkai51
dGlsLlVzZXIucmVuZGVyQ2FsbHNpZ24odXNlck5hbWVFbGVtZW50SWQpOwogICAgICAgICAgICB0
aGlzLnNldHVwU3Vic2NyaWJlckxpbmtzKCk7CiAgICAgICAgICAgIHZhciBtZXNzYWdlQ2VudGVy
TGlua0NsYXNzID0gdGhpcy5jZmcuTUVTU0FHRV9DRU5URVJfTElOS19DTEFTUzsKICAgICAgICAg
ICAgdGhpcy5vTWVzc2FnZUNlbnRlckxpbmsgPSBkb2pvLnF1ZXJ5KG1lc3NhZ2VDZW50ZXJMaW5r
Q2xhc3MsIHRoaXMub0hlYWRlcilbMF07CiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpczsKICAg
ICAgICAgICAgZGoudXRpbC5Vc2VyLmlzU3ViTG9nZ2VkSW4oZnVuY3Rpb24gKHN1YkxvZ2dlZElu
KSB7CiAgICAgICAgICAgICAgICBpZiAoc3ViTG9nZ2VkSW4pIHsKICAgICAgICAgICAgICAgICAg
ICB0aGF0LnNldHVwTWVzc2FnZUNlbnRlcigpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICAgICB0aGF0LnNldFVwTUpMaW5rc0ZvclJlZygpOwogICAgICAgICAgICAg
ICAgICAgIGRvam8uc3R5bGUodGhhdC5vTWVzc2FnZUNlbnRlckxpbmssIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgImRpc3BsYXkiOiAibm9uZSIKICAgICAgICAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHZhciBzdWJzY3JpYmVy
RGV0YWlsc0VsZW1lbnRJZCA9IHRoaXMuY2ZnLlNVQlNDUklCRVJfREVUQUlMU19FTEVNRU5UX0lE
OwogICAgICAgICAgICB0aGlzLm9TdWJzY3JpYmVyRGV0YWlscyA9IGRvam8uYnlJZChzdWJzY3Jp
YmVyRGV0YWlsc0VsZW1lbnRJZCk7CiAgICAgICAgICAgIGRvam8ucmVtb3ZlQ2xhc3ModGhpcy5v
U3Vic2NyaWJlckRldGFpbHMsICJoaWRkZW4iKTsKICAgICAgICB9LAogICAgICAgIHNldFVwTUpM
aW5rc0ZvclJlZzogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZm9vdGVyQ29udGFpbmVy
Q2xhc3MgPSB0aGlzLmNmZy5GT09URVJfQ09OVEFJTkVSX0NMQVNTOwogICAgICAgICAgICB0aGlz
Lm9Gb290ZXIgPSBkb2pvLnF1ZXJ5KGZvb3RlckNvbnRhaW5lckNsYXNzKVswXTsKICAgICAgICAg
ICAgdmFyIG1vakxpbmtVcmwgPSB0aGlzLmNmZy5NT0pfTElOS19VUkw7CiAgICAgICAgICAgIHZh
ciBtb2pMaW5rQ2xhc3MgPSB0aGlzLmNmZy5NT0pfTElOS19DTEFTUzsKICAgICAgICAgICAgdGhp
cy5vTW9qTGlua0hlYWRlciA9IGRvam8ucXVlcnkobW9qTGlua0NsYXNzLCB0aGlzLm9IZWFkZXIp
WzBdOwogICAgICAgICAgICB0aGlzLm9Nb2pMaW5rRm9vdGVyID0gZG9qby5xdWVyeShtb2pMaW5r
Q2xhc3MsIHRoaXMub0Zvb3RlcilbMF07CiAgICAgICAgICAgIGlmICgodHlwZW9mIGdjRG9tYWlu
ICE9PSAidW5kZWZpbmVkIikgJiYgKGdjRG9tYWluICE9PSBudWxsKSAmJiAoZ2NEb21haW4gIT09
ICIiKSkgewogICAgICAgICAgICAgICAgdGhpcy5vTW9qTGlua0hlYWRlci5ocmVmID0gImh0dHA6
Ly8iICsgZ2NEb21haW4gKyBtb2pMaW5rVXJsOwogICAgICAgICAgICAgICAgdGhpcy5vTW9qTGlu
a0Zvb3Rlci5ocmVmID0gImh0dHA6Ly8iICsgZ2NEb21haW4gKyBtb2pMaW5rVXJsOwogICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhpcy5vTW9qTGlua0hlYWRlci5ocmVmID0g
bW9qTGlua1VybDsKICAgICAgICAgICAgICAgIHRoaXMub01vakxpbmtGb290ZXIuaHJlZiA9IG1v
akxpbmtVcmw7CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHNldHVwU3Vic2NyaWJl
ckxpbmtzOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciB0b2RheXNQYXBlckxpbmtDbGFz
cyA9IHRoaXMuY2ZnLlRPREFZU19QQVBFUl9MSU5LX0NMQVNTOwogICAgICAgICAgICB0aGlzLm9U
b2RheXNQYXBlckxpbmsgPSBkb2pvLnF1ZXJ5KHRvZGF5c1BhcGVyTGlua0NsYXNzLCB0aGlzLm9I
ZWFkZXIpWzBdOwogICAgICAgICAgICB2YXIgbG9nZ2VkSW5Ub2RheXNQYXBlclVybCA9IHRoaXMu
Y2ZnLkxPR0dFRF9JTl9UT0RBWVNfUEFQRVJfVVJMOwogICAgICAgICAgICB2YXIgdGhhdCA9IHRo
aXM7CiAgICAgICAgICAgIGRqLnV0aWwuVXNlci5pc1N1YkxvZ2dlZEluKGZ1bmN0aW9uIChzdWJM
b2dnZWRJbikgewogICAgICAgICAgICAgICAgaWYgKHN1YkxvZ2dlZEluKSB7CiAgICAgICAgICAg
ICAgICAgICAgaWYgKCh0eXBlb2YgZ2NEb21haW4gIT09ICJ1bmRlZmluZWQiKSAmJiAoZ2NEb21h
aW4gIT09IG51bGwpICYmIChnY0RvbWFpbiAhPT0gIiIpKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHRoYXQub1RvZGF5c1BhcGVyTGluay5ocmVmID0gImh0dHA6Ly8iICsgZ2NEb21haW4gKyBs
b2dnZWRJblRvZGF5c1BhcGVyVXJsOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIHRoYXQub1RvZGF5c1BhcGVyTGluay5ocmVmID0gbG9nZ2VkSW5U
b2RheXNQYXBlclVybDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgIH0pOwogICAgICAgIH0sCiAgICAgICAgc2V0dXBNZXNzYWdlQ2VudGVyOiBmdW5j
dGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBtZXNzYWdlQ2VudGVyTGlua0NsYXNzID0gdGhpcy5j
ZmcuTUVTU0FHRV9DRU5URVJfTElOS19DTEFTUzsKICAgICAgICAgICAgdGhpcy5vTWVzc2FnZUNl
bnRlckxpbmsgPSBkb2pvLnF1ZXJ5KG1lc3NhZ2VDZW50ZXJMaW5rQ2xhc3MsIHRoaXMub0hlYWRl
cilbMF07CiAgICAgICAgICAgIHZhciBtZXNzYWdlQ291bnRDbGFzcyA9IHRoaXMuY2ZnLk1FU1NB
R0VfQ09VTlRfQ0xBU1M7CiAgICAgICAgICAgIHRoaXMub01lc3NhZ2VDb3VudCA9IGRvam8ucXVl
cnkobWVzc2FnZUNvdW50Q2xhc3MsIHRoaXMub0hlYWRlcilbMF07CiAgICAgICAgICAgIHZhciB0
aGF0ID0gdGhpczsKICAgICAgICAgICAgdmFyIHNldHVwTXNnQ2VudGVyTGluayA9IGZ1bmN0aW9u
IChub09mTWVzc2FnZXMpIHsKICAgICAgICAgICAgICAgICAgICBpZiAobm9PZk1lc3NhZ2VzID09
PSAnLTEnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRvam8uc3R5bGUodGhhdC5vTWVzc2Fn
ZUNlbnRlckxpbmssIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXNwbGF5IjogIm5v
bmUiCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQub01lc3NhZ2VDb3VudC5pbm5lckhUTUwg
PSBub09mTWVzc2FnZXM7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfTsK
ICAgICAgICAgICAgdmFyIG5vT2ZNZXNzYWdlcyA9IGRqLnV0aWwuQ29va2llLmdldENvb2tpZSgi
bXNnQ291bnQiKTsKICAgICAgICAgICAgaWYgKG5vT2ZNZXNzYWdlcyA9PT0gbnVsbCkgewogICAg
ICAgICAgICAgICAgdmFyIG1lc3NhZ2VDZW50ZXJQb3N0VXJsID0gdGhpcy5jZmcuTUVTU0FHRV9D
RU5URVJfUE9TVF9VUkw7CiAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZUNvdW50UmVxID0gZG9q
by54aHJQb3N0KHsKICAgICAgICAgICAgICAgICAgICB1cmw6IG1lc3NhZ2VDZW50ZXJQb3N0VXJs
LAogICAgICAgICAgICAgICAgICAgIGxvYWQ6IGZ1bmN0aW9uIChkYXRhLCBpb2FyZ3MpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIGpzb25PYmogPSBkYXRhOwogICAgICAgICAgICAgICAg
ICAgICAgICBub09mTWVzc2FnZXMgPSBqc29uT2JqLk1lc3NhZ2VzQ291bnQ7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciB1c2VyU3RhdHVzID0ganNvbk9iai5TdGF0dXM7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGRqLnV0aWwuQ29va2llLnNldENvb2tpZSgibXNnQ291bnQiLCBub09mTWVz
c2FnZXMsICg1IC8gMjQgLyA2MCkpOwogICAgICAgICAgICAgICAgICAgICAgICBkai51dGlsLkNv
b2tpZS5zZXRDb29raWUoInVzZXJTdGF0dXMiLCB1c2VyU3RhdHVzLCAoNSAvIDI0IC8gNjApKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgc2V0dXBNc2dDZW50ZXJMaW5rKG5vT2ZNZXNzYWdlcyk7
CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rp
b24gKHRyYW5zcG9ydCwgZXhjZXB0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNv
bGUuZXJyb3IoIkV4Y2VwdGlvbiBvY2N1cmVkIHdoaWxlIHBvc3RpbmcgcG9zdGluZyBBamF4IFJl
cXVlc3Q6ICVzIiwgZXhjZXB0aW9uKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICB9KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHNldHVwTXNnQ2Vu
dGVyTGluayhub09mTWVzc2FnZXMpOwogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBz
ZXR1cExvZ2luOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBsb2dpblVzZXJFbGVtZW50
SWQgPSB0aGlzLmNmZy5MT0dJTl9VU0VSTkFNRV9FTEVNRU5UX0lEOwogICAgICAgICAgICB0aGlz
Lm9Vc2VyTmFtZSA9IGRvam8uYnlJZChsb2dpblVzZXJFbGVtZW50SWQpOwogICAgICAgICAgICB2
YXIgbG9naW5QYXNzd29yZEVsZW1lbnRJZCA9IHRoaXMuY2ZnLkxPR0lOX1BBU1NXT1JEX0VMRU1F
TlRfSUQ7CiAgICAgICAgICAgIHRoaXMub1Bhc3N3b3JkID0gZG9qby5ieUlkKGxvZ2luUGFzc3dv
cmRFbGVtZW50SWQpOwogICAgICAgICAgICB2YXIgbG9naW5CdXR0b25JbWFnZUlkID0gdGhpcy5j
ZmcuTE9HSU5fQlVUVE9OX0VMRU1FTlRfSUQ7CiAgICAgICAgICAgIHRoaXMub0xvZ2luSW1nID0g
ZG9qby5ieUlkKGxvZ2luQnV0dG9uSW1hZ2VJZCk7CiAgICAgICAgICAgIHZhciBsb2dpbkZvcm1J
ZCA9IHRoaXMuY2ZnLkxPR0lOX0ZPUk1fSUQ7CiAgICAgICAgICAgIHRoaXMub0xvZ2luRm9ybSA9
IGRvam8uYnlJZChsb2dpbkZvcm1JZCk7CiAgICAgICAgICAgIHRoaXMub0xvZ2luRm9ybS5yZXNl
dCgpOwogICAgICAgICAgICB2YXIgcGFnZVVybElkID0gdGhpcy5jZmcuUEFHRV9VUkxfRUxFTUVO
VF9JRDsKICAgICAgICAgICAgdGhpcy5vUGFnZVVybCA9IGRvam8uYnlJZChwYWdlVXJsSWQpOwog
ICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7CiAgICAgICAgICAgIGlmICh0aGlzLm9QYWdlVXJs
ICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICB2YXIgbm9uU3Vic2NyaWJlckhvbWVwYWdlUGlk
ID0gdGhpcy5jZmcuTk9OU1VCU0NSSUJFUl9IT01FUEFHRV9QSUQ7CiAgICAgICAgICAgICAgICB2
YXIgbm9uU3Vic2NyaWJlclNlYXJjaFBhZ2VQaWQgPSB0aGlzLmNmZy5OT05TVUJTQ1JJQkVSX1NF
QVJDSF9QQUdFX1BJRDsKICAgICAgICAgICAgICAgIHZhciBub25TdWJOZXdzbGV0dGVyc0FsZXJ0
c1BhZ2VQaWQgPSB0aGlzLmNmZy5OT05TVUJTQ1JJQkVSX05FV1NMRVRURVJTX0FMRVJUU19QQUdF
X1BJRDsKICAgICAgICAgICAgICAgIHZhciBtZGNQYWdlUGlkID0gdGhpcy5jZmcuTURDX1BBR0Vf
UElEOwogICAgICAgICAgICAgICAgdmFyIGNvbmNhdFVSTDsKICAgICAgICAgICAgICAgIGlmICgo
dHlwZW9mIGdjRG9tYWluICE9PSAidW5kZWZpbmVkIikgJiYgKGdjRG9tYWluICE9PSBudWxsKSAm
JiAoZ2NEb21haW4gIT09ICIiKSkgewogICAgICAgICAgICAgICAgICAgIGNvbmNhdFVSTCA9ICJo
dHRwOi8vIiArIGdjRG9tYWluOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgICBjb25jYXRVUkwgPSAiaHR0cDovLyIgKyBkb2N1bWVudC5kb21haW47CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICB2YXIgb0N1cnJlbnRVcmw7CiAgICAgICAgICAgICAg
ICBpZiAoZG9qby5pc0lFKSB7CiAgICAgICAgICAgICAgICAgICAgb0N1cnJlbnRVcmwgPSB3aW5k
b3cubG9jYXRpb24uaHJlZjsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgICAgb0N1cnJlbnRVcmwgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmOwogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgdmFyIHVybF92YWx1ZSA9IG9DdXJyZW50VXJsOwogICAgICAg
ICAgICAgICAgaWYgKHR5cGVvZiBwSUQgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgICAg
ICAgICAgaWYgKHBJRCA9PT0gbm9uU3Vic2NyaWJlckhvbWVwYWdlUGlkKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHVybF92YWx1ZSA9IGNvbmNhdFVSTCArIHRoaXMuY2ZnLkhPTUVQQUdFX1NV
QlNDUklCRVJfVVJMOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocElEID09PSBub25T
dWJOZXdzbGV0dGVyc0FsZXJ0c1BhZ2VQaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdXJs
X3ZhbHVlID0gY29uY2F0VVJMICsgIi9lbWFpbCI7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IGlmIChwSUQgPT09IG5vblN1YnNjcmliZXJTZWFyY2hQYWdlUGlkKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIHVybF92YWx1ZSA9IGNvbmNhdFVSTCArIHRoaXMuY2ZnLlNFQVJDSF9QQUdFX1NV
QlNDUklCRVJfVVJMOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocElEID09PSBtZGNQ
YWdlUGlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHVybF92YWx1ZSA9IGNvbmNhdFVSTCAr
IHRoaXMuY2ZnLk1EQ19MSU5LX1VSTDsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgICAgICAgICB1cmxfdmFsdWUgPSBvQ3VycmVudFVybDsKICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGRvam8uaXNJRSkgewogICAgICAgICAg
ICAgICAgICAgICAgICBkb2N1bWVudC5sb2dpbl9mb3JtLnVybC52YWx1ZSA9IHVybF92YWx1ZTsK
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlz
Lm9QYWdlVXJsLnZhbHVlID0gdXJsX3ZhbHVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICh0aGlzLm9Vc2VyTmFtZSAhPT0gbnVsbCkg
ewogICAgICAgICAgICAgICAgICAgIGRvam8uY29ubmVjdCh0aGlzLm9Vc2VyTmFtZSwgIm9uZm9j
dXMiLCB0aGlzLCBmdW5jdGlvbiAoZXZlbnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGou
dXRpbC5Gb3JtLmNsZWFyVmFsdWUodGhpcy5vVXNlck5hbWUsICJVc2VyIE5hbWUiKTsKICAgICAg
ICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICBkb2pvLmNvbm5lY3QodGhpcy5v
VXNlck5hbWUsICJvbmNsaWNrIiwgdGhpcywgZnVuY3Rpb24gKGV2ZW50KSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGRqLnV0aWwuRm9ybS5jbGVhclZhbHVlKHRoaXMub1VzZXJOYW1lLCAiVXNl
ciBOYW1lIik7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICBpZiAodGhpcy5vUGFzc3dvcmQgIT09IG51bGwpIHsKICAgICAgICAgICAgICAg
ICAgICBkb2pvLmNvbm5lY3QodGhpcy5vUGFzc3dvcmQsICJvbmZvY3VzIiwgdGhpcywgZnVuY3Rp
b24gKGV2ZW50KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRqLnV0aWwuRm9ybS5jbGVhclZh
bHVlKHRoYXQub1Bhc3N3b3JkLCAiUGFzc3dvcmQiKTsKICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5vUGFzc3dvcmQudHlwZSA9ICJwYXNzd29yZCI7CiAgICAgICAgICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgICAgICAgICAgZG9qby5jb25uZWN0KHRoaXMub1Bhc3N3b3JkLCAib25jbGlj
ayIsIHRoaXMsIGZ1bmN0aW9uIChldmVudCkgewogICAgICAgICAgICAgICAgICAgICAgICBkai51
dGlsLkZvcm0uY2xlYXJWYWx1ZSh0aGF0Lm9QYXNzd29yZCwgIlBhc3N3b3JkIik7CiAgICAgICAg
ICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgZG9qby5jb25uZWN0KHRoaXMub1Bh
c3N3b3JkLCAib25jaGFuZ2UiLCB0aGlzLCBmdW5jdGlvbiAoZXZlbnQpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgZGoudXRpbC5Gb3JtLmNsZWFyVmFsdWUodGhhdC5vUGFzc3dvcmQsICJQYXNz
d29yZCIpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgaWYgKGRvam8uaXNJRSkgewogICAgICAgICAgICAgICAgICAgIGRvam8uY29ubmVj
dCh0aGlzLm9Mb2dpbkltZywgIm9uY2xpY2siLCB0aGlzLCBmdW5jdGlvbiAoZSkgewogICAgICAg
ICAgICAgICAgICAgICAgICBkb2N1bWVudC5sb2dpbl9mb3JtLnVybC52YWx1ZSA9IG9DdXJyZW50
VXJsOwogICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiY29taW5nIGluIHRvIGlt
ZyBvbmxpY2sgaW4gSUUiICsgb0N1cnJlbnRVcmwpOwogICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLm9Mb2dpbkZvcm0uc3VibWl0KCk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICBkb2pvLmNvbm5lY3QodGhpcy5vUGFzc3dvcmQsICJv
bmtleXByZXNzIiwgdGhpcywgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgICB2YXIg
Y0tleUNvZGUgPSBlLmtleUNvZGUgfHwgZS53aGljaDsKICAgICAgICAgICAgICAgICAgICBpZiAo
ZG9qby5pc0lFKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjS2V5Q29kZSA9PSBFdmVu
dC5LRVlfUkVUVVJOKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5sb2dp
bl9mb3JtLnVybC52YWx1ZSA9IG9DdXJyZW50VXJsOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy5vTG9naW5Gb3JtLnN1Ym1pdCgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAg
ICAgICB9LAogICAgICAgIHNldHVwTG9nb3V0OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZh
ciBsb2dvdXRMaW5rRWxlbWVudElkID0gdGhpcy5jZmcuTE9HT1VUX0xJTktfRUxFTUVOVF9JRDsK
ICAgICAgICAgICAgdGhpcy5vTG9nb3V0ID0gZG9qby5ieUlkKGxvZ291dExpbmtFbGVtZW50SWQp
OwogICAgICAgICAgICBpZiAodGhpcy5vTG9nb3V0ICE9PSBudWxsKSB7CiAgICAgICAgICAgICAg
ICBkb2pvLmNvbm5lY3QodGhpcy5vTG9nb3V0LCAib25jbGljayIsIHRoaXMsIGZ1bmN0aW9uIChl
dikgewogICAgICAgICAgICAgICAgICAgIGRvam8uc3RvcEV2ZW50KGV2KTsKICAgICAgICAgICAg
ICAgICAgICBkai51dGlsLkNvb2tpZS5kZWxldGVDb29raWUoIm1zZ0NvdW50Iik7CiAgICAgICAg
ICAgICAgICAgICAgZGoudXRpbC5Db29raWUuZGVsZXRlQ29va2llKCJIT01FUEFHRSIsIHRydWUp
OwogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmNvb2tpZSA9ICJIT01FUEFHRSIgKyAiPSIg
KyAiO3BhdGg9LyIgKyAiO2RvbWFpbj0ud3NqLmNvbSIgKyAiO2V4cGlyZXM9VGh1LCAwMS1KYW4t
MTk3MCAwMDowMDowMSBHTVQiOwogICAgICAgICAgICAgICAgICAgIGlmICgodHlwZW9mIGdjRG9t
YWluICE9PSAidW5kZWZpbmVkIikgJiYgKGdjRG9tYWluICE9PSBudWxsKSAmJiAoZ2NEb21haW4g
IT09ICIiKSkgewogICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24gPSAiL2xv
Z291dD91cmw9aHR0cDovLyIgKyBnY0RvbWFpbjsKICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24gPSAiL2xvZ291dCI7CiAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAg
ICAgICB9LAogICAgICAgIGhpZ2hsaWdodEZvcm1GYWN0b3JMaW5rczogZnVuY3Rpb24gKCkgewog
ICAgICAgICAgICB2YXIgdG9kYXlzUGFwZXJMaW5rQ29udGFpbmVyQ2xhc3MgPSB0aGlzLmNmZy5U
T0RBWVNfUEFQRVJfTElOS19DT05UQUlORVJfQ0xBU1M7CiAgICAgICAgICAgIHRoaXMub1RvZGF5
c1BhcGVyTGlua0NvbnRhaW5lciA9IGRvam8ucXVlcnkodG9kYXlzUGFwZXJMaW5rQ29udGFpbmVy
Q2xhc3MsIHRoaXMub0hlYWRlcilbMF07CiAgICAgICAgICAgIHZhciB2aWRlb0xpbmtDb250YWlu
ZXJDbGFzcyA9IHRoaXMuY2ZnLlZJREVPX0xJTktfQ09OVEFJTkVSX0NMQVNTOwogICAgICAgICAg
ICB0aGlzLm9WaWRlb0xpbmtDb250YWluZXIgPSBkb2pvLnF1ZXJ5KHZpZGVvTGlua0NvbnRhaW5l
ckNsYXNzLCB0aGlzLm9IZWFkZXIpWzBdOwogICAgICAgICAgICB2YXIgYmxvZ3NMaW5rQ29udGFp
bmVyQ2xhc3MgPSB0aGlzLmNmZy5CTE9HU19MSU5LX0NPTlRBSU5FUl9DTEFTUzsKICAgICAgICAg
ICAgdGhpcy5vQmxvZ3NMaW5rQ29udGFpbmVyID0gZG9qby5xdWVyeShibG9nc0xpbmtDb250YWlu
ZXJDbGFzcywgdGhpcy5vSGVhZGVyKVswXTsKICAgICAgICAgICAgdmFyIGNvbHVtbnNMaW5rQ29u
dGFpbmVyQ2xhc3MgPSB0aGlzLmNmZy5DT0xVTU5TX0xJTktfQ09OVEFJTkVSX0NMQVNTOwogICAg
ICAgICAgICB0aGlzLm9Db2x1bW5zTGlua0NvbnRhaW5lciA9IGRvam8ucXVlcnkoY29sdW1uc0xp
bmtDb250YWluZXJDbGFzcywgdGhpcy5vSGVhZGVyKVswXTsKICAgICAgICAgICAgdmFyIGludGVy
YWN0aXZlR3JhcGhpY3NMaW5rQ29udGFpbmVyQ2xhc3MgPSB0aGlzLmNmZy5JTlRFUkFDVElWRV9H
UkFQSElDU19MSU5LX0NPTlRBSU5FUl9DTEFTUzsKICAgICAgICAgICAgdGhpcy5vSW50ZXJhY3Rp
dmVHcmFwaGljc0xpbmtDb250YWluZXIgPSBkb2pvLnF1ZXJ5KGludGVyYWN0aXZlR3JhcGhpY3NM
aW5rQ29udGFpbmVyQ2xhc3MsIHRoaXMub0hlYWRlcilbMF07CiAgICAgICAgICAgIHZhciB0b3Bp
Y3NMaW5rQ29udGFpbmVyQ2xhc3MgPSB0aGlzLmNmZy5UT1BJQ1NfTElOS19DT05UQUlORVJfQ0xB
U1M7CiAgICAgICAgICAgIHRoaXMub1RvcGljc0xpbmtDb250YWluZXIgPSBkb2pvLnF1ZXJ5KHRv
cGljc0xpbmtDb250YWluZXJDbGFzcywgdGhpcy5vSGVhZGVyKVswXTsKICAgICAgICAgICAgdmFy
IGNvbW11bml0eUZvcnVtc0xpbmtDb250YWluZXJDbGFzcyA9IHRoaXMuY2ZnLkNPTU1VTklUWV9G
T1JVTVNfTElOS19DT05UQUlORVJfQ0xBU1M7CiAgICAgICAgICAgIHRoaXMub0NvbW11bml0eUZv
cnVtc0xpbmtDb250YWluZXIgPSBkb2pvLnF1ZXJ5KGNvbW11bml0eUZvcnVtc0xpbmtDb250YWlu
ZXJDbGFzcywgdGhpcy5vSGVhZGVyKVswXTsKICAgICAgICAgICAgdmFyIHRvZGF5c1BhcGVyUGlk
ID0gdGhpcy5jZmcuVE9EQVlTX1BBUEVSX1BJRDsKICAgICAgICAgICAgdmFyIHRvZGF5c1BhcGVy
VXNOb25TdWJQaWQgPSB0aGlzLmNmZy5UT0RBWVNfUEFQRVJfVVNfTk9OU1VCX1BJRDsKICAgICAg
ICAgICAgdmFyIHRvZGF5c1BhcGVyRXVyb3BlTm9uU3ViUGlkID0gdGhpcy5jZmcuVE9EQVlTX1BB
UEVSX0VVUk9QRV9OT05TVUJfUElEOwogICAgICAgICAgICB2YXIgdG9kYXlzUGFwZXJBc2lhTm9u
U3ViUGlkID0gdGhpcy5jZmcuVE9EQVlTX1BBUEVSX0FTSUFfTk9OU1VCX1BJRDsKICAgICAgICAg
ICAgdmFyIHRvZGF5c1BhcGVyVXNQaWQgPSB0aGlzLmNmZy5UT0RBWVNfUEFQRVJfVVNfUElEOwog
ICAgICAgICAgICB2YXIgdG9kYXlzUGFwZXJFdXJvcGVQaWQgPSB0aGlzLmNmZy5UT0RBWVNfUEFQ
RVJfRVVST1BFX1BJRDsKICAgICAgICAgICAgdmFyIHRvZGF5c1BhcGVyQXNpYVBpZCA9IHRoaXMu
Y2ZnLlRPREFZU19QQVBFUl9BU0lBX1BJRDsKICAgICAgICAgICAgdmFyIHRvZGF5c1BhcGVyUGFz
dEVkaXRpb25zUGlkID0gdGhpcy5jZmcuVE9EQVlTX1BBUEVSX1BBU1RfRURJVElPTlNfUElEOwog
ICAgICAgICAgICB2YXIgdG9kYXlzUGFwZXJJbmRleEJpelBpZCA9IHRoaXMuY2ZnLlRPREFZU19Q
QVBFUl9JTkRFWF9CSVpfUElEOwogICAgICAgICAgICB2YXIgdG9kYXlzUGFwZXJJbmRleFBlb3Bs
ZVBpZCA9IHRoaXMuY2ZnLlRPREFZU19QQVBFUl9JTkRFWF9QRU9QTEVfUElEOwogICAgICAgICAg
ICB2YXIgdG9kYXlzUGFwZXJDb3JyZWN0aW9uc1BpZCA9IHRoaXMuY2ZnLlRPREFZU19QQVBFUl9D
T1JSRUNUSU9OU19QSUQ7CiAgICAgICAgICAgIHZhciB2aWRlb1BpZCA9IHRoaXMuY2ZnLlZJREVP
X1BJRDsKICAgICAgICAgICAgdmFyIGludGVyYWN0aXZlR3JhcGhpY3NQaWQgPSB0aGlzLmNmZy5J
TlRFUkFDVElWRV9HUkFQSElDU19QSUQ7CiAgICAgICAgICAgIHZhciB0b3BpY3NQaWQgPSB0aGlz
LmNmZy5UT1BJQ1NfUElEOwogICAgICAgICAgICB2YXIgbmV3c2xldHRlcnNBbGVydHNQdWJQaWQg
PSB0aGlzLmNmZy5ORVdTTEVUVEVSU19BTEVSVFNfUFVCX1BJRDsKICAgICAgICAgICAgdmFyIG5l
d3NsZXR0ZXJzQWxlcnRzU3ViUGlkID0gdGhpcy5jZmcuTkVXU0xFVFRFUlNfQUxFUlRTX1NVQl9Q
SUQ7CiAgICAgICAgICAgIHZhciBjb2x1bW5zUGlkID0gdGhpcy5jZmcuQ09MVU1OU19QSUQ7CiAg
ICAgICAgICAgIHZhciBibG9nc1BpZCA9IHRoaXMuY2ZnLkJMT0dTX1BJRDsKICAgICAgICAgICAg
dmFyIGhvc3RVcmwgPSBkb2N1bWVudC5sb2NhdGlvbi5ob3N0OwogICAgICAgICAgICB2YXIgY29t
bXVuaXR5VXJsID0gaG9zdFVybCArIHRoaXMuY2ZnLkNPTU1VTklUWV9ISUdITElHSFRfQ09NUEFS
RV9VUkw7CiAgICAgICAgICAgIHZhciBjb21wYXJlRm9ydW1zVXJsID0gdGhpcy5jZmcuRk9SVU1T
X0hJR0hMSUdIVF9DT01QQVJFX1VSTDsKICAgICAgICAgICAgaWYgKHR5cGVvZiBwSUQgIT09ICJ1
bmRlZmluZWQiKSB7CiAgICAgICAgICAgICAgICBpZiAoKHBJRC5pbmRleE9mKHRvZGF5c1BhcGVy
UGlkKSA9PSAwKSB8fCAocElEID09PSB0b2RheXNQYXBlclVzTm9uU3ViUGlkKSB8fCAocElEID09
PSB0b2RheXNQYXBlckV1cm9wZU5vblN1YlBpZCkgfHwgKHBJRCA9PT0gdG9kYXlzUGFwZXJBc2lh
Tm9uU3ViUGlkKSB8fCAocElEID09PSB0b2RheXNQYXBlclVzUGlkKSB8fCAocElEID09PSB0b2Rh
eXNQYXBlckV1cm9wZVBpZCkgfHwgKHBJRCA9PT0gdG9kYXlzUGFwZXJBc2lhUGlkKSB8fCAocElE
ID09PSB0b2RheXNQYXBlclBhc3RFZGl0aW9uc1BpZCkgfHwgKHBJRCA9PT0gdG9kYXlzUGFwZXJJ
bmRleEJpelBpZCkgfHwgKHBJRCA9PT0gdG9kYXlzUGFwZXJJbmRleFBlb3BsZVBpZCkgfHwgKHBJ
RCA9PT0gdG9kYXlzUGFwZXJDb3JyZWN0aW9uc1BpZCkpIHsKICAgICAgICAgICAgICAgICAgICBk
b2pvLmFkZENsYXNzKHRoaXMub1RvZGF5c1BhcGVyTGlua0NvbnRhaW5lciwgInNlbGVjdGVkIik7
CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBJRCA9PT0gdmlkZW9QaWQpIHsKICAgICAgICAg
ICAgICAgICAgICBkb2pvLmFkZENsYXNzKHRoaXMub1ZpZGVvTGlua0NvbnRhaW5lciwgInNlbGVj
dGVkIik7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBJRCA9PT0gaW50ZXJhY3RpdmVHcmFw
aGljc1BpZCkgewogICAgICAgICAgICAgICAgICAgIGRvam8uYWRkQ2xhc3ModGhpcy5vSW50ZXJh
Y3RpdmVHcmFwaGljc0xpbmtDb250YWluZXIsICJzZWxlY3RlZCIpOwogICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChwSUQgPT09IGNvbHVtbnNQaWQpIHsKICAgICAgICAgICAgICAgICAgICBkb2pv
LmFkZENsYXNzKHRoaXMub0NvbHVtbnNMaW5rQ29udGFpbmVyLCAic2VsZWN0ZWQiKTsKICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAocElEID09PSBibG9nc1BpZCkgewogICAgICAgICAgICAgICAg
ICAgIGRvam8uYWRkQ2xhc3ModGhpcy5vQmxvZ3NMaW5rQ29udGFpbmVyLCAic2VsZWN0ZWQiKTsK
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocElEID09PSB0b3BpY3NQaWQpIHsKICAgICAgICAg
ICAgICAgICAgICBkb2pvLmFkZENsYXNzKHRoaXMub1RvcGljc0xpbmtDb250YWluZXIsICJzZWxl
Y3RlZCIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgo
ZG9jdW1lbnQubG9jYXRpb24uaHJlZiAhPT0gbnVsbCkgJiYgKGRvY3VtZW50LmxvY2F0aW9uLmhy
ZWYgIT09ICIiKSAmJiAoZG9jdW1lbnQubG9jYXRpb24uaHJlZi5pbmRleE9mKGNvbW11bml0eVVy
bCkgIT09IC0xKSB8fCAoZG9jdW1lbnQubG9jYXRpb24uaHJlZi5pbmRleE9mKGNvbXBhcmVGb3J1
bXNVcmwpICE9PSAtMSkpIHsKICAgICAgICAgICAgICAgIGRvam8uYWRkQ2xhc3ModGhpcy5vQ29t
bXVuaXR5Rm9ydW1zTGlua0NvbnRhaW5lciwgInNlbGVjdGVkIik7CiAgICAgICAgICAgIH0KICAg
ICAgICB9CiAgICB9Owp9KCk7CmRvam8ucHJvdmlkZSgiZGoubW9kdWxlLnNob3dTZWN0aW9uQW5k
VGlja2VyIik7CmRvam8ucmVxdWlyZSgiZGoubW9kdWxlLm5ld3NUaWNrZXIiKTsKZGoubW9kdWxl
LnNob3dTZWN0aW9uQW5kVGlja2VyID0gewogICAgaW5pdDogZnVuY3Rpb24gKCkgewogICAgICAg
IHRoaXMuc2VjdFBhbiA9IGRqLm1vZHVsZS5jYXJvdXNlbFNlY3Rpb24ucGFuZWxzOwogICAgICAg
IHRoaXMubmV3c1BhbiA9IGRqLm1vZHVsZS5uZXdzVGlja2VyLnRpY2tlcjsKICAgICAgICBpZiAo
IXRoaXMuc2VjdFBhbiB8fCAhdGhpcy5uZXdzUGFuKSB7CiAgICAgICAgICAgIGNvbnNvbGUud2Fy
bigie3Nob3dTZWN0aW9uQW5kVGlja2VyfSBlaXRoZXIgKG9yIGJvdGgpIG9mIHRoZSBjYXJvdXNl
bHMgaXMgbm90IGZvdW5kIik7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAg
dGhpcy5iaW5kKCk7CiAgICB9LAogICAgYmluZDogZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBj
dHIgPSAwLAogICAgICAgICAgICBzcGFuID0gdGhpcy5zZWN0UGFuLAogICAgICAgICAgICBucGFu
ID0gdGhpcy5uZXdzUGFuLAogICAgICAgICAgICB0b3QgPSBzcGFuLm1vZGVsLmdldE51bWJlck9m
UGFuZWxzKCk7CiAgICAgICAgbnBhbi5tb2RlbC5zZXRSb3RhdGlvblN0YXRlKDApOwogICAgICAg
IHNwYW4ubW9kZWwuYWRkQ2hhbmdlTGlzdGVuZXIoInN1Y2Nlc3MiLCBmdW5jdGlvbiAocGFuZWwp
IHsKICAgICAgICAgICAgaWYgKHBhbmVsLmdldFBvc2l0aW9uKCkgPT0gdG90KSB7CiAgICAgICAg
ICAgICAgICBjdHIrKzsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoKHBhbmVsLmdldFBv
c2l0aW9uKCkgPT0gMSkgJiYgKGN0ciA+IDApKSB7CiAgICAgICAgICAgICAgICBzcGFuLm1vZGVs
LnNldFJvdGF0aW9uU3RhdGUoMCk7CiAgICAgICAgICAgICAgICBucGFuLm1vZGVsLnNldFJvdGF0
aW9uU3RhdGUoMSk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBzcGFuLm1vZGVs
LmFkZENoYW5nZUxpc3RlbmVyKCJyb3RhdGlvblN0YXRlU3VjY2VzcyIsIGZ1bmN0aW9uIChyc3Rh
dGUpIHsKICAgICAgICAgICAgaWYgKHJzdGF0ZSA9PSAwKSB7CiAgICAgICAgICAgICAgICBucGFu
Lm1vZGVsLnNldFJvdGF0aW9uU3RhdGUoMSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICBucGFuLm1vZGVsLnNldFJvdGF0aW9uU3RhdGUoMCk7CiAgICAgICAgICAgIH0KICAg
ICAgICB9KTsKICAgIH0KfTsKZG9qby5wcm92aWRlKCJkai5tb2R1bGUuQ0NTIik7CmRvam8ucmVx
dWlyZSgiZGoubGFuZyIpOwpkb2pvLnJlcXVpcmUoImRqLnV0aWwuQ29va2llIik7CmRvam8ucmVx
dWlyZSgiZGoudXRpbC5Vc2VyIik7CmRqLm1vZHVsZS5DQ1MgPSB7CiAgICBpbml0OiBmdW5jdGlv
biAoY2ZnKSB7CiAgICAgICAgdGhpcy5fY2ZnID0gZGoubGFuZy5jbG9uZU1peGluKHRoaXMuREVG
QVVMVF9DT05GSUcsIGNmZyk7CiAgICAgICAgdGhpcy5wcm9kdWN0ID0gJ1dTSic7CiAgICAgICAg
dmFyIHByZWZpeER0ZXh0ID0gKHR5cGVvZiB3aW5kb3cublNQICE9ICd1bmRlZmluZWQnKSA/IHdp
bmRvdy5uU1AgOiAiIjsKICAgICAgICB0aGlzLmR0ZXh0ID0gWyc8dGFibGUgY2VsbHBhZGRpbmc9
IjAiIGNlbGxzcGFjaW5nPSIwIiBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIj48dHI+JywgJzx0ZCBj
bGFzcz0icDEwIiBzdHlsZT0icGFkZGluZzo0cHggMHB4IDVweCAwcHg7Ym9yZGVyLXJpZ2h0OjFw
eCBzb2xpZCAjOUJBRENFOyIgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iJyArIHByZWZpeER0ZXh0
ICsgJy9hY2N0L3NldHVwX2FjY291bnQiIGNsYXNzPSJ1bnZpc2l0ZWQgcDEwIj5NeSBBY2NvdW50
PC9hPjwvdGQ+JywgJzx0ZCBjbGFzcz0icDEwIiBzdHlsZT0icGFkZGluZzo0cHggMHB4IDVweCAw
cHg7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjOUJBRENFOyIgYWxpZ249ImNlbnRlciI+PGEgaHJl
Zj0iJyArIHByZWZpeER0ZXh0ICsgJy9tc2djZW50ZXIvdmlld19tZXNzYWdlcy5odG1sP3Byb2R1
Y3Q9JyArIHRoaXMucHJvZHVjdCArICciIGNsYXNzPSJ1bnZpc2l0ZWQgcDEwIj5NZXNzYWdlczwv
YT48L3RkPicsICc8dGQgY2xhc3M9InAxMCIgc3R5bGU9InBhZGRpbmc6NHB4IDBweCA1cHggMHB4
OyIgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iJyArIHByZWZpeER0ZXh0ICsgJy9zZXR1cC9zZXR1
cF9jZW50ZXJfbWFpbnBhZ2UiIGNsYXNzPSJ1bnZpc2l0ZWQgcDEwIj5QcmVmZXJlbmNlczwvYT48
L3RkPicsICc8L3RyPjwvdGFibGU+J107CiAgICAgICAgdmFyIHByZWZpeEF0ZXh0ID0gKHR5cGVv
ZiB3aW5kb3cublNQICE9ICd1bmRlZmluZWQnKSA/IHdpbmRvdy5uU1AgOiAiIjsKICAgICAgICB0
aGlzLmF0ZXh0ID0gWyc8YSBocmVmPSInICsgcHJlZml4QXRleHQgKyAnL21zZ2NlbnRlci92aWV3
X21lc3NhZ2VzLmh0bWw/cHJvZHVjdD0nICsgdGhpcy5wcm9kdWN0ICsgJyI+JywgJzxpbWcgc3Jj
PSIvaW1nL21lc3NhZ2VfYWxlcnRfaWNvbi5naWYiIGJvcmRlcj0iMCIgd2lkdGg9IjI1IiBoZWln
aHQ9IjE2IiBzdHlsZT0icGFkZGluZzowcHg7bWFyZ2luOjBweDt2ZXJ0aWNhbC1hbGlnbjptaWRk
bGU7Ii8+PHNwYW4gY2xhc3M9InAxMSIgc3R5bGU9InZlcnRpY2FsLWFsaWduOm1pZGRsZTsiPllv
dSBoYXZlIGFuIGltcG9ydGFudCBtZXNzYWdlPC9zcGFuPicsICc8L2E+J107CiAgICAgICAgdmFy
IHByZWZpeE50ZXh0ID0gKHR5cGVvZiB3aW5kb3cublNQICE9ICd1bmRlZmluZWQnKSA/IHdpbmRv
dy5uU1AgOiAiIjsKICAgICAgICB0aGlzLm50ZXh0ID0gWyc8YSBocmVmPSInICsgcHJlZml4TnRl
eHQgKyAnL21zZ2NlbnRlci92aWV3X21lc3NhZ2VzLmh0bWw/cHJvZHVjdD0nICsgdGhpcy5wcm9k
dWN0ICsgJyI+JywgJzxpbWcgc3JjPSIvaW1nL21lc3NhZ2VfaWNvbl9XU0ouZ2lmIiBib3JkZXI9
IjAiIHdpZHRoPSIxNSIgaGVpZ2h0PSIxMSIgc3R5bGU9InBhZGRpbmc6MHB4O21hcmdpbjowcHg7
dmVydGljYWwtYWxpZ246bWlkZGxlOyIvPjxzcGFuIGNsYXNzPSJwMTEiIHN0eWxlPSJ2ZXJ0aWNh
bC1hbGlnbjptaWRkbGU7Ij5Zb3UgaGF2ZSBhIG5ldyBtZXNzYWdlPC9zcGFuPicsICc8L2E+J107
CiAgICB9LAogICAgREVGQVVMVF9DT05GSUc6IHsKICAgICAgICBwcm9kdWN0OiBudWxsLAogICAg
ICAgIG1lc3NhZ2VDZW50ZXJSZXF1ZXN0OiBudWxsLAogICAgICAgIG1lc3NhZ2VDZW50ZXJUaW1l
b3V0OiBudWxsLAogICAgICAgIGRpc3BsYXllZEludGVyc3RpdGlhbFJlcXVlc3Q6IG51bGwsCiAg
ICAgICAgZGlzcGxheWVkSW50ZXJzdGl0aWFsVGltZW91dDogbnVsbCwKICAgICAgICByZWFkUmVx
dWVzdDogbnVsbCwKICAgICAgICByZWFkVGltZW91dDogbnVsbCwKICAgICAgICBnZXRDb250ZW50
UmVxdWVzdDogbnVsbCwKICAgICAgICBnZXRDb250ZW50VGltZW91dDogbnVsbCwKICAgICAgICBj
aGFuZ2VPcmRlclJlcXVlc3Q6IG51bGwsCiAgICAgICAgY2hhbmdlT3JkZXJUaW1lb3V0OiBudWxs
LAogICAgICAgIGR0ZXh0OiBudWxsLAogICAgICAgIGF0ZXh0OiBudWxsLAogICAgICAgIG50ZXh0
OiBudWxsLAogICAgICAgIFZhclg6IG51bGwsCiAgICAgICAgeTogbnVsbCwKICAgICAgICB6OiBu
dWxsCiAgICB9LAogICAgY2hhbmdlU3R5bGU6IGZ1bmN0aW9uIChodHRwUmVxdWVzdCwgbXNnaWQp
IHsKICAgICAgICB2YXIgdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtXycgKyBtc2dpZCAr
ICdfZicpOwogICAgICAgIHYuc3R5bGUuZm9udFdlaWdodCA9ICcnOwogICAgICAgIHYgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnbV8nICsgbXNnaWQgKyAnX3MnKTsKICAgICAgICB2LnN0eWxl
LmZvbnRXZWlnaHQgPSAnJzsKICAgICAgICB2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21f
JyArIG1zZ2lkICsgJ19yJyk7CiAgICAgICAgdi5zdHlsZS5mb250V2VpZ2h0ID0gJyc7CiAgICAg
ICAgdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtXycgKyBtc2dpZCArICdfZScpOwogICAg
ICAgIHYuc3R5bGUuZm9udFdlaWdodCA9ICcnOwogICAgfSwKICAgIGRpc3BsYXlNZXNzYWdlczog
ZnVuY3Rpb24gKGh0dHBSZXF1ZXN0KSB7CiAgICAgICAgdmFyIG0gPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgibWVzc2FnZXMiKTsKICAgICAgICBtLmlubmVySFRNTCA9IGh0dHBSZXF1ZXN0Lnho
ci5yZXNwb25zZVRleHQ7CiAgICB9LAogICAgY2xvc2VNZXNzYWdlOiBmdW5jdGlvbiAoKSB7CiAg
ICAgICAgdGhpcy55LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgICAgdGhpcy5WYXJYLnN0
eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICB9LAogICAgY2hlY2tBbGw6IGZ1bmN0aW9uICgpIHsK
ICAgICAgICB2YXIgZiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtZm9ybSIpOwogICAgICAg
IHZhciBudW0gPSBmLmVsZW1lbnRzLmxlbmd0aDsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IG51bTsgaSsrKSB7CiAgICAgICAgICAgIHZhciBlID0gZi5lbGVtZW50c1tpXTsKICAgICAgICAg
ICAgaWYgKGUudHlwZSA9PSAnY2hlY2tib3gnKSB7CiAgICAgICAgICAgICAgICBlLmNoZWNrZWQg
PSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSwKICAgIHVuY2hlY2tBbGw6IGZ1
bmN0aW9uICgpIHsKICAgICAgICB2YXIgZiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtZm9y
bSIpOwogICAgICAgIHZhciBudW0gPSBmLmVsZW1lbnRzLmxlbmd0aDsKICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IG51bTsgaSsrKSB7CiAgICAgICAgICAgIHZhciBlID0gZi5lbGVtZW50c1tp
XTsKICAgICAgICAgICAgaWYgKGUudHlwZSA9PSAnY2hlY2tib3gnKSB7CiAgICAgICAgICAgICAg
ICBlLmNoZWNrZWQgPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0sCiAgICBk
aXNwbGF5RGl2OiBmdW5jdGlvbiAoY29udGVudCwgbWlkLCBtbmFtZSwgaXNJbnRlcnN0aXRpYWwp
IHsKICAgICAgICB0aGlzLlZhclggPSBkb2pvLmJ5SWQoJ21vZGFsJyk7CiAgICAgICAgdGhpcy55
ID0gZG9qby5ieUlkKCdtZXNzYWdlJyk7CiAgICAgICAgdGhpcy56ID0gZG9qby5ieUlkKCdtZXNz
YWdlY29udGVudCcpOwogICAgICAgIHRoaXMuei5pbm5lckhUTUwgPSBjb250ZW50OwogICAgICAg
IHRoaXMueS5zdHlsZS56SW5kZXggPSAxMDAwMDAwMDAxOwogICAgICAgIHRoaXMueS5zdHlsZS5k
aXNwbGF5ID0gJ2Jsb2NrJzsKICAgICAgICB0aGlzLnkuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVu
JzsKICAgICAgICB0aGlzLlZhclguc3R5bGUuekluZGV4ID0gMTAwMDAwMDAwMDsKICAgICAgICB0
aGlzLlZhclguc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICAgICAgdGhpcy5WYXJYLnN0eWxl
LmhlaWdodCA9IGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0ICsgJ3B4JzsKICAgICAgICB2YXIg
czsKICAgICAgICBpZiAodHlwZW9mIHMgPT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgICAgIHMg
PSAodHlwZW9mIHdpbmRvdy5zICE9ICd1bmRlZmluZWQnKSA/IHdpbmRvdy5zIDogIiI7CiAgICAg
ICAgfQogICAgICAgIGlmIChzICE9PSAiIikgewogICAgICAgICAgICBzLmV2ZW50cyA9ICJldmVu
dDMwIjsKICAgICAgICAgICAgaWYgKGlzSW50ZXJzdGl0aWFsKSB7CiAgICAgICAgICAgICAgICBz
LmVWYXIzMCA9ICdXU0ogSW50ZXJzdGl0aWFsIC0gJyArIG1uYW1lOwogICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgcy5lVmFyMzAgPSAnV1NKIE1lc3NhZ2UgLSAnICsgbW5hbWU7
CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcy5saW5rVHJhY2tWYXJzID0gImVWYXIzMCxldmVu
dHMiOwogICAgICAgICAgICBzLmxpbmtUcmFja0V2ZW50cyA9ICJldmVudDMwIjsKICAgICAgICAg
ICAgaWYgKGlzSW50ZXJzdGl0aWFsKSB7CiAgICAgICAgICAgICAgICBzLnRsKHRydWUsICdvJywg
J1dTSiBJbnRlcnN0aXRpYWwgLSAnICsgbW5hbWUpOwogICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgcy50bCh0cnVlLCAnbycsICdXU0ogTWVzc2FnZSAtICcgKyBtbmFtZSk7CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICB9LAogICAgc2hvd0ludGVyc3RpdGlhbENvbnRlbnQ6
IGZ1bmN0aW9uIChjb250ZW50LCBtaWQsIHVpZCwgdW1pZCwgbW5hbWUpIHsKICAgICAgICB2YXIg
dG1wID0gJyc7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgdG1wID0gKG5ldyBYTUxTZXJpYWxp
emVyKCkpLnNlcmlhbGl6ZVRvU3RyaW5nKGNvbnRlbnQpOwogICAgICAgIH0gY2F0Y2ggKGUpIHsK
ICAgICAgICAgICAgdG1wID0gY29udGVudC54bWw7CiAgICAgICAgfQogICAgICAgIHRtcCA9IHRt
cC5yZXBsYWNlKC8mYW1wOy9nLCAnJicpOwogICAgICAgIHRtcCA9IHRtcC5yZXBsYWNlKC88dXNl
clwvPi9nLCB1c2VyTmFtZSk7CiAgICAgICAgdG1wID0gdG1wLnJlcGxhY2UoL2dvdG9zaXRlL2cs
ICdXU0ouY29tJyk7CiAgICAgICAgdG1wID0gdG1wLnJlcGxhY2UoL215YWNjdHNpdGUvZywgJ2h0
dHBzOi8vY29tbWVyY2Uud3NqLmNvbS9teWFjY291bnQvZG8vdmlld0JpbGxpbmdJbmZvJyk7CiAg
ICAgICAgdG1wID0gdG1wLnJlcGxhY2UoL21vZHZhbHVlL2csICdtY193c2pfaW50ZXJzdGl0aWFs
XycgKyBtbmFtZSk7CiAgICAgICAgdG1wID0gdG1wLnJlcGxhY2UoLzxzaXRlX25hbWVcLz4vZywg
J1dTSi5jb20nKTsKICAgICAgICB0bXAgPSB0bXAucmVwbGFjZSgvc2l0ZS9nLCAnd3NqJyk7CiAg
ICAgICAgdG1wID0gdG1wLnJlcGxhY2UoL21zZ2JnL2csICcjMzY0QTkyJyk7CiAgICAgICAgdmFy
IGQgPSBuZXcgRGF0ZSgpOwogICAgICAgIHRtcCA9IHRtcC5yZXBsYWNlKC88eWVhclwvPi9nLCBk
LmdldEZ1bGxZZWFyKCkpOwogICAgICAgIHRtcCA9IHRtcC5zdWJzdHJpbmcoOSwgdG1wLmluZGV4
T2YoIjwvY29udGVudD4iKSk7CiAgICAgICAgdGhpcy5kaXNwbGF5RGl2KHRtcCwgbWlkLCBtbmFt
ZSwgdHJ1ZSk7CiAgICAgICAgdGhpcy5zZW5kRGlzcGxheWVkSW50ZXJzdGl0aWFsUmVxdWVzdCh1
aWQsIHVtaWQpOwogICAgfSwKICAgIHByb2Nlc3NUb3A6IGZ1bmN0aW9uIChodHRwUmVxdWVzdCkg
ewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHZhciBzdHJEdGV4dCA9IHRoaXMuZHRleHQuam9p
bigiIik7CiAgICAgICAgICAgIHZhciBzdHJBdGV4dCA9IHRoaXMuYXRleHQuam9pbigiIik7CiAg
ICAgICAgICAgIHZhciBzdHJOdGV4dCA9IHRoaXMubnRleHQuam9pbigiIik7CiAgICAgICAgICAg
IHZhciBtZXNzYWdlID0gaHR0cFJlcXVlc3QueGhyLnJlc3BvbnNlWE1MLmdldEVsZW1lbnRzQnlU
YWdOYW1lKCJtZXNzYWdlIilbMF07CiAgICAgICAgICAgIGlmIChtZXNzYWdlICE9PSBudWxsKSB7
CiAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5maXJzdENoaWxkICE9PSBudWxsKSB7CiAgICAg
ICAgICAgICAgICAgICAgdmFyIG1pZCA9IChtZXNzYWdlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJt
aWQiKVswXSkuZmlyc3RDaGlsZC5ub2RlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgdmFyIHVp
ZCA9IChtZXNzYWdlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ1aWQiKVswXSkuZmlyc3RDaGlsZC5u
b2RlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgdmFyIHVtaWQgPSAobWVzc2FnZS5nZXRFbGVt
ZW50c0J5VGFnTmFtZSgidW1pZCIpWzBdKS5maXJzdENoaWxkLm5vZGVWYWx1ZTsKICAgICAgICAg
ICAgICAgICAgICB2YXIgbW5hbWUgPSAobWVzc2FnZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgibWVz
c2FnZWlkIilbMF0pLmZpcnN0Q2hpbGQubm9kZVZhbHVlOwogICAgICAgICAgICAgICAgICAgIHZh
ciBwcmlvcml0eSA9IG1lc3NhZ2UuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInByaW9yaXR5IilbMF07
CiAgICAgICAgICAgICAgICAgICAgdmFyIGRpc3BsYXkgPSBtZXNzYWdlLmdldEVsZW1lbnRzQnlU
YWdOYW1lKCJkaXNwbGF5IilbMF07CiAgICAgICAgICAgICAgICAgICAgaWYgKGRpc3BsYXkgIT09
IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGR2YWx1ZSA9IGRpc3BsYXkuZmly
c3RDaGlsZC5ub2RlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkdmFsdWUgPT0g
J3RydWUnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udGVudCA9IG1lc3Nh
Z2UuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImNvbnRlbnQiKVswXTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMuc2hvd0ludGVyc3RpdGlhbENvbnRlbnQoY29udGVudCwgbWlkLCB1aWQs
IHVtaWQsIG1uYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChwcmlvcml0eSAhPT0gbnVsbCkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHByaW9yaXR5LmZpcnN0Q2hpbGQubm9kZVZh
bHVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSAxKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvam8uYnlJZCgnbXNnQ2VudGVyJyku
aW5uZXJIVE1MID0gc3RyQXRleHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRqLnV0aWwuQ29va2llLnNldENvb2tpZSgnQ01DQWxlcnQnLCBzdHJBdGV4dCwgMSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZG9qby5ieUlkKCdtc2dDZW50ZXInKS5pbm5lckhUTUwgPSBzdHJOdGV4
dDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGoudXRpbC5Db29raWUuc2V0
Q29va2llKCdDTUNBbGVydCcsIHN0ck50ZXh0LCAxKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg
ICAgICBkb2pvLmJ5SWQoJ21zZ0NlbnRlcicpLmlubmVySFRNTCA9IHN0ckR0ZXh0OwogICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
ICAgZG9qby5ieUlkKCdtc2dDZW50ZXInKS5pbm5lckhUTUwgPSBzdHJEdGV4dDsKICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGRvam8uYnlJZCgn
bXNnQ2VudGVyJykuaW5uZXJIVE1MID0gc3RyRHRleHQ7CiAgICAgICAgICAgIH0KICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICBjb25zb2xl
LmVycm9yKCJFeGNlcHRpb24gd2hpbGUgcHJvY2Vzc2luZyByZXNwb25zZSIsIGUpOwogICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfSwKICAgIHJlbG9hZE1lc3NhZ2VDZW50
ZXI6IGZ1bmN0aW9uICgpIHsKICAgICAgICB0aGlzLmluaXQoKTsKICAgICAgICB2YXIgY21jYWxl
cnRjb29raWUgPSBkai51dGlsLkNvb2tpZS5nZXRDb29raWUoIkNNQ0FsZXJ0Iik7CiAgICAgICAg
aWYgKGNtY2FsZXJ0Y29va2llICE9PSBudWxsKSB7CiAgICAgICAgICAgIGRvam8uYnlJZCgnbXNn
Q2VudGVyJykuaW5uZXJIVE1MID0gY21jYWxlcnRjb29raWU7CiAgICAgICAgfQogICAgICAgIHZh
ciBjbWNjb29raWUgPSBkai51dGlsLkNvb2tpZS5nZXRDb29raWUoIkNNQyIpOwogICAgICAgIGlm
IChjbWNjb29raWUgPT09IG51bGwpIHsKICAgICAgICAgICAgaWYgKHRoaXMubWVzc2FnZUNlbnRl
clJlcXVlc3QgIT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZUNlbnRlclJl
cXVlc3QgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGRqLnV0aWwuQ29va2llLnNl
dENvb2tpZSgnQ01DJywgJ3RvcCcsIDEpOwogICAgICAgICAgICB2YXIgcHJvY2Vzc1g7CiAgICAg
ICAgICAgIHZhciBkID0gbmV3IERhdGUoKTsKICAgICAgICAgICAgdmFyIGRhdGFVcmwgPSAnL21z
Z2NlbnRlci90b3BfbWVzc2FnZS5odG1sJzsKICAgICAgICAgICAgdmFyIGRhdGFVcmxQYXJhbXMg
PSB7CiAgICAgICAgICAgICAgICBwcm9kdWN0OiB0aGlzLnByb2R1Y3QsCiAgICAgICAgICAgICAg
ICBkOiBkLmdldFRpbWUoKQogICAgICAgICAgICB9OwogICAgICAgICAgICB2YXIgdGhhdCA9IHRo
aXM7CiAgICAgICAgICAgIGRvam8ueGhyR2V0KHsKICAgICAgICAgICAgICAgIHVybDogZGF0YVVy
bCwKICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGRhdGFVcmxQYXJhbXMsCiAgICAgICAgICAgICAg
ICBsb2FkOiBmdW5jdGlvbiAoZGF0YSwgaW9hcmdzKSB7CiAgICAgICAgICAgICAgICAgICAgcHJv
Y2Vzc1ggPSB0aGF0LnByb2Nlc3NUb3AoaW9hcmdzKTsKICAgICAgICAgICAgICAgIH0sCiAgICAg
ICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGV4Y2VwdGlvbiwgaW9hcmdzKSB7CiAgICAgICAg
ICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXhjZXB0aW9uIG9jY3VyZWQgZHVyaW5nIEFqYXgg
UmVxdWVzdCB0byByZXRyaWV2ZSBkYXRhOiAlbycsIGV4Y2VwdGlvbik7CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH0sCiAgICBzZW5kRGlzcGxheWVkSW50
ZXJzdGl0aWFsUmVxdWVzdDogZnVuY3Rpb24gKHVpZCwgdW1pZCkgewogICAgICAgIGlmICh0aGlz
LmRpc3BsYXllZEludGVyc3RpdGlhbFJlcXVlc3QgIT09IG51bGwpIHsKICAgICAgICAgICAgdGhp
cy5kaXNwbGF5ZWRJbnRlcnN0aXRpYWxSZXF1ZXN0ID0gbnVsbDsKICAgICAgICB9CiAgICAgICAg
dmFyIHBhcmFtcyA9IHsKICAgICAgICAgICAgdUlkOiB1aWQsCiAgICAgICAgICAgIHVtSWQ6IHVt
aWQsCiAgICAgICAgICAgIHByb2R1Y3Q6IHRoaXMucHJvZHVjdAogICAgICAgIH07CiAgICAgICAg
dmFyIHBvc3RVcmwgPSAnL21zZ2NlbnRlci9kaXNwbGF5ZWRfaW50ZXJzdGl0aWFsLmh0bWwnOwog
ICAgICAgIHZhciB0aGF0ID0gdGhpczsKICAgICAgICBkb2pvLnhoclBvc3QoewogICAgICAgICAg
ICB1cmw6IHBvc3RVcmwsCiAgICAgICAgICAgIHBvc3REYXRhOiBkb2pvLm9iamVjdFRvUXVlcnko
cGFyYW1zKSwKICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChleGNlcHRpb24sIGlvYXJncykg
ewogICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXhjZXB0aW9uIG9jY3VyZWQgd2hpbGUg
cG9zdGluZyBwb3N0aW5nIEFqYXggUmVxdWVzdCA6ICcgKyBleGNlcHRpb24pOwogICAgICAgICAg
ICB9LAogICAgICAgICAgICBoYW5kbGU6IGZ1bmN0aW9uIChkYXRhLCBpb2FyZ3MpIHsKICAgICAg
ICAgICAgICAgIHRoYXQucmVsb2FkTWVzc2FnZUNlbnRlcigpOwogICAgICAgICAgICB9CiAgICAg
ICAgfSk7CiAgICB9LAogICAgc2VuZFJlYWRSZXF1ZXN0OiBmdW5jdGlvbiAobXNnaWQsIHVtaWQp
IHsKICAgICAgICBpZiAodGhpcy5yZWFkUmVxdWVzdCAhPT0gbnVsbCkgewogICAgICAgICAgICB0
aGlzLnJlYWRSZXF1ZXN0ID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgdmFyIHBhcmFtcyA9IHsK
ICAgICAgICAgICAgdW1JZDogdW1pZCwKICAgICAgICAgICAgcHJvZHVjdDogdGhpcy5wcm9kdWN0
CiAgICAgICAgfTsKICAgICAgICB2YXIgcG9zdFVybCA9ICcvbXNnY2VudGVyL3JlYWRfbWVzc2Fn
ZS5odG1sJzsKICAgICAgICB2YXIgdGhhdCA9IHRoaXM7CiAgICAgICAgZG9qby54aHJQb3N0KHsK
ICAgICAgICAgICAgdXJsOiBwb3N0VXJsLAogICAgICAgICAgICBwb3N0RGF0YTogZG9qby5vYmpl
Y3RUb1F1ZXJ5KHBhcmFtcyksCiAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXhjZXB0aW9u
LCBpb2FyZ3MpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0V4Y2VwdGlvbiBvY2N1
cmVkIHdoaWxlIHBvc3RpbmcgcG9zdGluZyBBamF4IFJlcXVlc3QgOiAnICsgZXhjZXB0aW9uKTsK
ICAgICAgICAgICAgfSwKICAgICAgICAgICAgaGFuZGxlOiBmdW5jdGlvbiAoZGF0YSwgaW9hcmdz
KSB7CiAgICAgICAgICAgICAgICB0aGF0LmNoYW5nZVN0eWxlKGlvYXJncywgbXNnaWQpOwogICAg
ICAgICAgICAgICAgdGhhdC5yZWxvYWRNZXNzYWdlQ2VudGVyKCk7CiAgICAgICAgICAgIH0KICAg
ICAgICB9KTsKICAgIH0sCiAgICBzaG93TWVzc2FnZTogZnVuY3Rpb24gKGh0dHBSZXF1ZXN0LCBt
c2dpZCwgdW1pZCwgbW5hbWUpIHsKICAgICAgICB2YXIgbWVzc2FnZSA9IGh0dHBSZXF1ZXN0Lnho
ci5yZXNwb25zZVRleHQucmVwbGFjZSgvJmFtcDsvZywgJyYnKTsKICAgICAgICB2YXIgY2NzdXNl
cjEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnQ0NTX1VTRVInKTsKICAgICAgICBpZiAoY2Nz
dXNlcjEpIHsKICAgICAgICAgICAgZGoudXRpbC5Vc2VyLnJlbmRlckNhbGxzaWduKGNjc3VzZXIx
KTsKICAgICAgICB9CiAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgvZ290b3NpdGUv
ZywgJ1dTSi5jb20nKTsKICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKC9teWFjY3Rz
aXRlL2csICdodHRwczovL2NvbW1lcmNlLndzai5jb20vbXlhY2NvdW50L2RvL3ZpZXdCaWxsaW5n
SW5mbycpOwogICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UoL21vZHZhbHVlL2csICdt
Y193c2pfbWVzc2FnZV8nICsgbW5hbWUpOwogICAgICAgIHZhciBkID0gbmV3IERhdGUoKTsKICAg
ICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKC88eWVhclwvPi9nLCBkLmdldEZ1bGxZZWFy
KCkpOwogICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UoLzxzaXRlX25hbWVcLz4vZywg
J1dTSi5jb20nKTsKICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKC9zaXRlL2csICd3
c2onKTsKICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKC9tc2diZy9nLCAnIzM2NEE5
MicpOwogICAgICAgIGRqLnV0aWwuQ29va2llLnNldENvb2tpZSgnQ01DQWxlcnQnLCAnJywgLTEp
OwogICAgICAgIHRoaXMuZGlzcGxheURpdihtZXNzYWdlLCBtc2dpZCwgbW5hbWUsIGZhbHNlKTsK
ICAgICAgICB0aGlzLnNlbmRSZWFkUmVxdWVzdChtc2dpZCwgdW1pZCk7CiAgICB9LAogICAgbG9h
ZE1lc3NhZ2VDb250ZW50OiBmdW5jdGlvbiAobXNnaWQsIHVpZCwgdW1pZCwgcmVhZCwgbW5hbWUp
IHsKICAgICAgICBpZiAodGhpcy5nZXRDb250ZW50UmVxdWVzdCAhPT0gbnVsbCkgewogICAgICAg
ICAgICB0aGlzLmdldENvbnRlbnRSZXF1ZXN0ID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgdmFy
IGRhdGFVcmwgPSAnL21zZ2NlbnRlci9nZXRfbWVzc2FnZS5odG1sP21lc3NhZ2VJZD0nICsgbXNn
aWQgKyAnJnByb2R1Y3Q9JyArIHRoaXMucHJvZHVjdDsKICAgICAgICB2YXIgdGhhdCA9IHRoaXM7
CiAgICAgICAgZG9qby54aHJHZXQoewogICAgICAgICAgICB1cmw6IGRhdGFVcmwsCiAgICAgICAg
ICAgIGxvYWQ6IGZ1bmN0aW9uIChkYXRhLCBpb2FyZ3MpIHsKICAgICAgICAgICAgICAgIHRoYXQu
c2hvd01lc3NhZ2UoaW9hcmdzLCBtc2dpZCwgdW1pZCwgbW5hbWUpOwogICAgICAgICAgICB9LAog
ICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGV4Y2VwdGlvbiwgaW9hcmdzKSB7CiAgICAgICAg
ICAgICAgICBjb25zb2xlLmVycm9yKCdFeGNlcHRpb24gb2NjdXJlZCBkdXJpbmcgQWpheCBSZXF1
ZXN0IHRvIHJldHJpZXZlIGRhdGE6ICVvJywgZXhjZXB0aW9uKTsKICAgICAgICAgICAgfQogICAg
ICAgIH0pOwogICAgfSwKICAgIHNlbmRDaGFuZ2VPcmRlclJlcXVlc3Q6IGZ1bmN0aW9uIChvcmRl
ciwgcHJvZHVjdCkgewogICAgICAgIGlmICh0aGlzLmNoYW5nZU9yZGVyUmVxdWVzdCAhPT0gbnVs
bCkgewogICAgICAgICAgICB0aGlzLmNoYW5nZU9yZGVyUmVxdWVzdCA9IG51bGw7CiAgICAgICAg
fQogICAgICAgIHZhciBkYXRhVXJsID0gJy9tc2djZW50ZXIvb3JkZXJfbWVzc2FnZXMuaHRtbD9v
cmRlcj0nICsgb3JkZXIgKyAnJnByb2R1Y3Q9JyArIHByb2R1Y3Q7CiAgICAgICAgdmFyIHRoYXQg
PSB0aGlzOwogICAgICAgIGRvam8ueGhyR2V0KHsKICAgICAgICAgICAgdXJsOiBkYXRhVXJsLAog
ICAgICAgICAgICBsb2FkOiBmdW5jdGlvbiAoZGF0YSwgaW9hcmdzKSB7CiAgICAgICAgICAgICAg
ICB0aGF0LmRpc3BsYXlNZXNzYWdlcyhpb2FyZ3MpOwogICAgICAgICAgICB9LAogICAgICAgICAg
ICBlcnJvcjogZnVuY3Rpb24gKGV4Y2VwdGlvbiwgaW9hcmdzKSB7CiAgICAgICAgICAgICAgICBj
b25zb2xlLmVycm9yKCdFeGNlcHRpb24gb2NjdXJlZCBkdXJpbmcgQWpheCBSZXF1ZXN0IHRvIHJl
dHJpZXZlIGRhdGE6ICVvJywgZXhjZXB0aW9uKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwog
ICAgfSwKICAgIHVwZGF0ZXVzZXJtZXNzYWdlc3RhdHVzY29kZTogZnVuY3Rpb24gKCkgewogICAg
ICAgIGlmICh0aGlzLnJlYWRSZXF1ZXN0ICE9PSBudWxsKSB7CiAgICAgICAgICAgIHRoaXMucmVh
ZFJlcXVlc3QgPSBudWxsOwogICAgICAgIH0KICAgICAgICB2YXIgcGFyYW1zID0gewogICAgICAg
ICAgICBwcm9kdWN0OiB0aGlzLnByb2R1Y3QKICAgICAgICB9OwogICAgICAgIHZhciBwb3N0VXJs
ID0gJy91bXNsL3VzZXJfbWVzc2FnZXMvZG9fbm90X3Nob3cnOwogICAgICAgIHZhciB0aGF0ID0g
dGhpczsKICAgICAgICBkb2pvLnhoclBvc3QoewogICAgICAgICAgICB1cmw6IHBvc3RVcmwsCiAg
ICAgICAgICAgIHBvc3REYXRhOiBkb2pvLm9iamVjdFRvUXVlcnkocGFyYW1zKSwKICAgICAgICAg
ICAgZXJyb3I6IGZ1bmN0aW9uIChleGNlcHRpb24sIGlvYXJncykgewogICAgICAgICAgICAgICAg
Y29uc29sZS5lcnJvcignRXhjZXB0aW9uIG9jY3VyZWQgd2hpbGUgcG9zdGluZyBwb3N0aW5nIEFq
YXggUmVxdWVzdCA6ICcgKyBleGNlcHRpb24pOwogICAgICAgICAgICB9LAogICAgICAgICAgICBo
YW5kbGU6IGZ1bmN0aW9uIChkYXRhLCBpb2FyZ3MpIHsKICAgICAgICAgICAgICAgIHRoYXQucmVs
b2FkTWVzc2FnZUNlbnRlcigpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9Cn07Cmlm
ICghZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJykuZ2V0Q29udGV4dCkgewogICAgKGZ1
bmN0aW9uICgpIHsKICAgICAgICB2YXIgbSA9IE1hdGg7CiAgICAgICAgdmFyIG1yID0gbS5yb3Vu
ZDsKICAgICAgICB2YXIgbXMgPSBtLnNpbjsKICAgICAgICB2YXIgbWMgPSBtLmNvczsKICAgICAg
ICB2YXIgYWJzID0gbS5hYnM7CiAgICAgICAgdmFyIHNxcnQgPSBtLnNxcnQ7CiAgICAgICAgdmFy
IFogPSAxMDsKICAgICAgICB2YXIgWjIgPSBaIC8gMjsKCiAgICAgICAgZnVuY3Rpb24gZ2V0Q29u
dGV4dCgpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dF8gfHwgKHRoaXMuY29udGV4
dF8gPSBuZXcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEXyh0aGlzKSk7CiAgICAgICAgfQogICAg
ICAgIHZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTsKCiAgICAgICAgZnVuY3Rpb24g
YmluZChmLCBvYmosIHZhcl9hcmdzKSB7CiAgICAgICAgICAgIHZhciBhID0gc2xpY2UuY2FsbChh
cmd1bWVudHMsIDIpOwogICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgewogICAgICAgICAg
ICAgICAgcmV0dXJuIGYuYXBwbHkob2JqLCBhLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykp
KTsKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgdmFyIEdfdm1sQ2FudmFzTWFuYWdl
cl8gPSB7CiAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uIChvcHRfZG9jKSB7CiAgICAgICAgICAg
ICAgICBpZiAoL01TSUUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYgIXdpbmRvdy5vcGVy
YSkgewogICAgICAgICAgICAgICAgICAgIHZhciBkb2MgPSBvcHRfZG9jIHx8IGRvY3VtZW50Owog
ICAgICAgICAgICAgICAgICAgIGRvYy5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTsKICAgICAgICAg
ICAgICAgICAgICBkb2MuYXR0YWNoRXZlbnQoJ29ucmVhZHlzdGF0ZWNoYW5nZScsIGJpbmQodGhp
cy5pbml0XywgdGhpcywgZG9jKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAg
ICAgICAgICAgIGluaXRfOiBmdW5jdGlvbiAoZG9jKSB7CiAgICAgICAgICAgICAgICBpZiAoIWRv
Yy5uYW1lc3BhY2VzWydnX3ZtbF8nXSkgewogICAgICAgICAgICAgICAgICAgIGRvYy5uYW1lc3Bh
Y2VzLmFkZCgnZ192bWxfJywgJ3VybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206dm1sJywgJyNkZWZh
dWx0I1ZNTCcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCFkb2MubmFt
ZXNwYWNlc1snZ19vXyddKSB7CiAgICAgICAgICAgICAgICAgICAgZG9jLm5hbWVzcGFjZXMuYWRk
KCdnX29fJywgJ3VybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZScsICcjZGVm
YXVsdCNWTUwnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghZG9jLnN0
eWxlU2hlZXRzWydleF9jYW52YXNfJ10pIHsKICAgICAgICAgICAgICAgICAgICB2YXIgc3MgPSBk
b2MuY3JlYXRlU3R5bGVTaGVldCgpOwogICAgICAgICAgICAgICAgICAgIHNzLm93bmluZ0VsZW1l
bnQuaWQgPSAnZXhfY2FudmFzXyc7CiAgICAgICAgICAgICAgICAgICAgc3MuY3NzVGV4dCA9ICdj
YW52YXN7ZGlzcGxheTppbmxpbmUtYmxvY2s7b3ZlcmZsb3c6aGlkZGVuOycgKyAndGV4dC1hbGln
bjpsZWZ0O3dpZHRoOjMwMHB4O2hlaWdodDoxNTBweH0nICsgJ2dfdm1sX1xcOip7YmVoYXZpb3I6
dXJsKCNkZWZhdWx0I1ZNTCl9JyArICdnX29fXFw6KntiZWhhdmlvcjp1cmwoI2RlZmF1bHQjVk1M
KX0nOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdmFyIGVscyA9IGRvYy5nZXRF
bGVtZW50c0J5VGFnTmFtZSgnY2FudmFzJyk7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGVscy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdEVs
ZW1lbnQoZWxzW2ldKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAg
ICAgaW5pdEVsZW1lbnQ6IGZ1bmN0aW9uIChlbCwgd2lkdGgsIGhlaWdodCkgewogICAgICAgICAg
ICAgICAgaWYgKCFlbC5nZXRDb250ZXh0KSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy53aWR0
aCA9IHdpZHRoOwogICAgICAgICAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OwogICAg
ICAgICAgICAgICAgICAgIGVsLmdldENvbnRleHQgPSBnZXRDb250ZXh0OwogICAgICAgICAgICAg
ICAgICAgIGVsLmF0dGFjaEV2ZW50KCdvbnByb3BlcnR5Y2hhbmdlJywgb25Qcm9wZXJ0eUNoYW5n
ZSk7CiAgICAgICAgICAgICAgICAgICAgZWwuYXR0YWNoRXZlbnQoJ29ucmVzaXplJywgb25SZXNp
emUpOwogICAgICAgICAgICAgICAgICAgIHZhciBhdHRycyA9IGVsLmF0dHJpYnV0ZXM7CiAgICAg
ICAgICAgICAgICAgICAgaWYgKGF0dHJzLndpZHRoICYmIGF0dHJzLndpZHRoLnNwZWNpZmllZCkg
ewogICAgICAgICAgICAgICAgICAgICAgICBlbC5zdHlsZS53aWR0aCA9IGF0dHJzLndpZHRoLm5v
ZGVWYWx1ZSArICdweCc7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgZWwud2lkdGggPSBlbC5jbGllbnRXaWR0aDsKICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJzLmhlaWdodCAmJiBhdHRycy5oZWlnaHQu
c3BlY2lmaWVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsLnN0eWxlLmhlaWdodCA9IGF0
dHJzLmhlaWdodC5ub2RlVmFsdWUgKyAncHgnOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIGVsLmhlaWdodCA9IGVsLmNsaWVudEhlaWdodDsKICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1
cm4gZWw7CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICBmdW5jdGlvbiBvblByb3Bl
cnR5Q2hhbmdlKGUpIHsKICAgICAgICAgICAgdmFyIGVsID0gZS5zcmNFbGVtZW50OwogICAgICAg
ICAgICBzd2l0Y2ggKGUucHJvcGVydHlOYW1lKSB7CiAgICAgICAgICAgIGNhc2UgJ3dpZHRoJzoK
ICAgICAgICAgICAgICAgIGVsLnN0eWxlLndpZHRoID0gZWwuYXR0cmlidXRlcy53aWR0aC5ub2Rl
VmFsdWUgKyAncHgnOwogICAgICAgICAgICAgICAgZWwuZ2V0Q29udGV4dCgpLmNsZWFyUmVjdCgp
OwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2hlaWdodCc6CiAgICAg
ICAgICAgICAgICBlbC5zdHlsZS5oZWlnaHQgPSBlbC5hdHRyaWJ1dGVzLmhlaWdodC5ub2RlVmFs
dWUgKyAncHgnOwogICAgICAgICAgICAgICAgZWwuZ2V0Q29udGV4dCgpLmNsZWFyUmVjdCgpOwog
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGZ1
bmN0aW9uIG9uUmVzaXplKGUpIHsKICAgICAgICAgICAgdmFyIGVsID0gZS5zcmNFbGVtZW50Owog
ICAgICAgICAgICBpZiAoZWwuZmlyc3RDaGlsZCkgewogICAgICAgICAgICAgICAgZWwuZmlyc3RD
aGlsZC5zdHlsZS53aWR0aCA9IGVsLmNsaWVudFdpZHRoICsgJ3B4JzsKICAgICAgICAgICAgICAg
IGVsLmZpcnN0Q2hpbGQuc3R5bGUuaGVpZ2h0ID0gZWwuY2xpZW50SGVpZ2h0ICsgJ3B4JzsKICAg
ICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB2YXIgZGVjMmhleCA9IFtdOwogICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgMTY7IGkrKykgewogICAgICAgICAgICBmb3IgKHZhciBqID0gMDsg
aiA8IDE2OyBqKyspIHsKICAgICAgICAgICAgICAgIGRlYzJoZXhbaSAqIDE2ICsgal0gPSBpLnRv
U3RyaW5nKDE2KSArIGoudG9TdHJpbmcoMTYpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAg
ICAgICBmdW5jdGlvbiBjcmVhdGVNYXRyaXhJZGVudGl0eSgpIHsKICAgICAgICAgICAgcmV0dXJu
IFtbMSwgMCwgMF0sIFswLCAxLCAwXSwgWzAsIDAsIDFdXTsKICAgICAgICB9CgogICAgICAgIGZ1
bmN0aW9uIG1hdHJpeE11bHRpcGx5KG0xLCBtMikgewogICAgICAgICAgICB2YXIgcmVzdWx0ID0g
Y3JlYXRlTWF0cml4SWRlbnRpdHkoKTsKICAgICAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCAz
OyB4KyspIHsKICAgICAgICAgICAgICAgIGZvciAodmFyIHkgPSAwOyB5IDwgMzsgeSsrKSB7CiAg
ICAgICAgICAgICAgICAgICAgdmFyIHN1bSA9IDA7CiAgICAgICAgICAgICAgICAgICAgZm9yICh2
YXIgeiA9IDA7IHogPCAzOyB6KyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3VtICs9IG0x
W3hdW3pdICogbTJbel1beV07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgIHJlc3VsdFt4XVt5XSA9IHN1bTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQog
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gY29w
eVN0YXRlKG8xLCBvMikgewogICAgICAgICAgICBvMi5maWxsU3R5bGUgPSBvMS5maWxsU3R5bGU7
CiAgICAgICAgICAgIG8yLmxpbmVDYXAgPSBvMS5saW5lQ2FwOwogICAgICAgICAgICBvMi5saW5l
Sm9pbiA9IG8xLmxpbmVKb2luOwogICAgICAgICAgICBvMi5saW5lV2lkdGggPSBvMS5saW5lV2lk
dGg7CiAgICAgICAgICAgIG8yLm1pdGVyTGltaXQgPSBvMS5taXRlckxpbWl0OwogICAgICAgICAg
ICBvMi5zaGFkb3dCbHVyID0gbzEuc2hhZG93Qmx1cjsKICAgICAgICAgICAgbzIuc2hhZG93Q29s
b3IgPSBvMS5zaGFkb3dDb2xvcjsKICAgICAgICAgICAgbzIuc2hhZG93T2Zmc2V0WCA9IG8xLnNo
YWRvd09mZnNldFg7CiAgICAgICAgICAgIG8yLnNoYWRvd09mZnNldFkgPSBvMS5zaGFkb3dPZmZz
ZXRZOwogICAgICAgICAgICBvMi5zdHJva2VTdHlsZSA9IG8xLnN0cm9rZVN0eWxlOwogICAgICAg
ICAgICBvMi5nbG9iYWxBbHBoYSA9IG8xLmdsb2JhbEFscGhhOwogICAgICAgICAgICBvMi5hcmNT
Y2FsZVhfID0gbzEuYXJjU2NhbGVYXzsKICAgICAgICAgICAgbzIuYXJjU2NhbGVZXyA9IG8xLmFy
Y1NjYWxlWV87CiAgICAgICAgICAgIG8yLmxpbmVTY2FsZV8gPSBvMS5saW5lU2NhbGVfOwogICAg
ICAgIH0KCiAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc1N0eWxlKHN0eWxlU3RyaW5nKSB7CiAgICAg
ICAgICAgIHZhciBzdHIsIGFscGhhID0gMTsKICAgICAgICAgICAgc3R5bGVTdHJpbmcgPSBTdHJp
bmcoc3R5bGVTdHJpbmcpOwogICAgICAgICAgICBpZiAoc3R5bGVTdHJpbmcuc3Vic3RyaW5nKDAs
IDMpID09ICdyZ2InKSB7CiAgICAgICAgICAgICAgICB2YXIgc3RhcnQgPSBzdHlsZVN0cmluZy5p
bmRleE9mKCcoJywgMyk7CiAgICAgICAgICAgICAgICB2YXIgZW5kID0gc3R5bGVTdHJpbmcuaW5k
ZXhPZignKScsIHN0YXJ0ICsgMSk7CiAgICAgICAgICAgICAgICB2YXIgZ3V0cyA9IHN0eWxlU3Ry
aW5nLnN1YnN0cmluZyhzdGFydCArIDEsIGVuZCkuc3BsaXQoJywnKTsKICAgICAgICAgICAgICAg
IHN0ciA9ICcjJzsKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7
CiAgICAgICAgICAgICAgICAgICAgc3RyICs9IGRlYzJoZXhbTnVtYmVyKGd1dHNbaV0pXTsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChndXRzLmxlbmd0aCA9PSA0ICYmIHN0
eWxlU3RyaW5nLnN1YnN0cigzLCAxKSA9PSAnYScpIHsKICAgICAgICAgICAgICAgICAgICBhbHBo
YSA9IGd1dHNbM107CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAgICBzdHIgPSBzdHlsZVN0cmluZzsKICAgICAgICAgICAgfQogICAgICAgICAgICBy
ZXR1cm4gewogICAgICAgICAgICAgICAgY29sb3I6IHN0ciwKICAgICAgICAgICAgICAgIGFscGhh
OiBhbHBoYQogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gcHJvY2Vz
c0xpbmVDYXAobGluZUNhcCkgewogICAgICAgICAgICBzd2l0Y2ggKGxpbmVDYXApIHsKICAgICAg
ICAgICAgY2FzZSAnYnV0dCc6CiAgICAgICAgICAgICAgICByZXR1cm4gJ2ZsYXQnOwogICAgICAg
ICAgICBjYXNlICdyb3VuZCc6CiAgICAgICAgICAgICAgICByZXR1cm4gJ3JvdW5kJzsKICAgICAg
ICAgICAgY2FzZSAnc3F1YXJlJzoKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAg
IHJldHVybiAnc3F1YXJlJzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZnVuY3Rp
b24gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEXyhzdXJmYWNlRWxlbWVudCkgewogICAgICAgICAg
ICB0aGlzLm1fID0gY3JlYXRlTWF0cml4SWRlbnRpdHkoKTsKICAgICAgICAgICAgdGhpcy5tU3Rh
Y2tfID0gW107CiAgICAgICAgICAgIHRoaXMuYVN0YWNrXyA9IFtdOwogICAgICAgICAgICB0aGlz
LmN1cnJlbnRQYXRoXyA9IFtdOwogICAgICAgICAgICB0aGlzLnN0cm9rZVN0eWxlID0gJyMwMDAn
OwogICAgICAgICAgICB0aGlzLmZpbGxTdHlsZSA9ICcjMDAwJzsKICAgICAgICAgICAgdGhpcy5s
aW5lV2lkdGggPSAxOwogICAgICAgICAgICB0aGlzLmxpbmVKb2luID0gJ21pdGVyJzsKICAgICAg
ICAgICAgdGhpcy5saW5lQ2FwID0gJ2J1dHQnOwogICAgICAgICAgICB0aGlzLm1pdGVyTGltaXQg
PSBaICogMTsKICAgICAgICAgICAgdGhpcy5nbG9iYWxBbHBoYSA9IDE7CiAgICAgICAgICAgIHRo
aXMuY2FudmFzID0gc3VyZmFjZUVsZW1lbnQ7CiAgICAgICAgICAgIHZhciBlbCA9IHN1cmZhY2VF
bGVtZW50Lm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgICAgIGVs
LnN0eWxlLndpZHRoID0gR192bWxDYW52YXNNYW5hZ2VyXy53aWR0aDsKICAgICAgICAgICAgZWwu
c3R5bGUuaGVpZ2h0ID0gR192bWxDYW52YXNNYW5hZ2VyXy5oZWlnaHQ7CiAgICAgICAgICAgIGVs
LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7CiAgICAgICAgICAgIGVsLnN0eWxlLnBvc2l0aW9u
ID0gJ2Fic29sdXRlJzsKICAgICAgICAgICAgc3VyZmFjZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZWwp
OwogICAgICAgICAgICB0aGlzLmVsZW1lbnRfID0gZWw7CiAgICAgICAgICAgIHRoaXMuYXJjU2Nh
bGVYXyA9IDE7CiAgICAgICAgICAgIHRoaXMuYXJjU2NhbGVZXyA9IDE7CiAgICAgICAgICAgIHRo
aXMubGluZVNjYWxlXyA9IDE7CiAgICAgICAgfQogICAgICAgIHZhciBjb250ZXh0UHJvdG90eXBl
ID0gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEXy5wcm90b3R5cGU7CiAgICAgICAgY29udGV4dFBy
b3RvdHlwZS5jbGVhclJlY3QgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHRoaXMuZWxlbWVu
dF8uaW5uZXJIVE1MID0gJyc7CiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhdGhfID0gW107CiAg
ICAgICAgfTsKICAgICAgICBjb250ZXh0UHJvdG90eXBlLmJlZ2luUGF0aCA9IGZ1bmN0aW9uICgp
IHsKICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aF8gPSBbXTsKICAgICAgICB9OwogICAgICAg
IGNvbnRleHRQcm90b3R5cGUubW92ZVRvID0gZnVuY3Rpb24gKGFYLCBhWSkgewogICAgICAgICAg
ICB2YXIgcCA9IHRoaXMuZ2V0Q29vcmRzXyhhWCwgYVkpOwogICAgICAgICAgICB0aGlzLmN1cnJl
bnRQYXRoXy5wdXNoKHsKICAgICAgICAgICAgICAgIHR5cGU6ICdtb3ZlVG8nLAogICAgICAgICAg
ICAgICAgeDogcC54LAogICAgICAgICAgICAgICAgeTogcC55CiAgICAgICAgICAgIH0pOwogICAg
ICAgICAgICB0aGlzLmN1cnJlbnRYXyA9IHAueDsKICAgICAgICAgICAgdGhpcy5jdXJyZW50WV8g
PSBwLnk7CiAgICAgICAgfTsKICAgICAgICBjb250ZXh0UHJvdG90eXBlLmxpbmVUbyA9IGZ1bmN0
aW9uIChhWCwgYVkpIHsKICAgICAgICAgICAgdmFyIHAgPSB0aGlzLmdldENvb3Jkc18oYVgsIGFZ
KTsKICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aF8ucHVzaCh7CiAgICAgICAgICAgICAgICB0
eXBlOiAnbGluZVRvJywKICAgICAgICAgICAgICAgIHg6IHAueCwKICAgICAgICAgICAgICAgIHk6
IHAueQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdGhpcy5jdXJyZW50WF8gPSBwLng7CiAg
ICAgICAgICAgIHRoaXMuY3VycmVudFlfID0gcC55OwogICAgICAgIH07CiAgICAgICAgY29udGV4
dFByb3RvdHlwZS5iZXppZXJDdXJ2ZVRvID0gZnVuY3Rpb24gKGFDUDF4LCBhQ1AxeSwgYUNQMngs
IGFDUDJ5LCBhWCwgYVkpIHsKICAgICAgICAgICAgdmFyIHAgPSB0aGlzLmdldENvb3Jkc18oYVgs
IGFZKTsKICAgICAgICAgICAgdmFyIGNwMSA9IHRoaXMuZ2V0Q29vcmRzXyhhQ1AxeCwgYUNQMXkp
OwogICAgICAgICAgICB2YXIgY3AyID0gdGhpcy5nZXRDb29yZHNfKGFDUDJ4LCBhQ1AyeSk7CiAg
ICAgICAgICAgIGJlemllckN1cnZlVG8odGhpcywgY3AxLCBjcDIsIHApOwogICAgICAgIH07Cgog
ICAgICAgIGZ1bmN0aW9uIGJlemllckN1cnZlVG8oc2VsZiwgY3AxLCBjcDIsIHApIHsKICAgICAg
ICAgICAgc2VsZi5jdXJyZW50UGF0aF8ucHVzaCh7CiAgICAgICAgICAgICAgICB0eXBlOiAnYmV6
aWVyQ3VydmVUbycsCiAgICAgICAgICAgICAgICBjcDF4OiBjcDEueCwKICAgICAgICAgICAgICAg
IGNwMXk6IGNwMS55LAogICAgICAgICAgICAgICAgY3AyeDogY3AyLngsCiAgICAgICAgICAgICAg
ICBjcDJ5OiBjcDIueSwKICAgICAgICAgICAgICAgIHg6IHAueCwKICAgICAgICAgICAgICAgIHk6
IHAueQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgc2VsZi5jdXJyZW50WF8gPSBwLng7CiAg
ICAgICAgICAgIHNlbGYuY3VycmVudFlfID0gcC55OwogICAgICAgIH0KICAgICAgICBjb250ZXh0
UHJvdG90eXBlLnF1YWRyYXRpY0N1cnZlVG8gPSBmdW5jdGlvbiAoYUNQeCwgYUNQeSwgYVgsIGFZ
KSB7CiAgICAgICAgICAgIHZhciBjcCA9IHRoaXMuZ2V0Q29vcmRzXyhhQ1B4LCBhQ1B5KTsKICAg
ICAgICAgICAgdmFyIHAgPSB0aGlzLmdldENvb3Jkc18oYVgsIGFZKTsKICAgICAgICAgICAgdmFy
IGNwMSA9IHsKICAgICAgICAgICAgICAgIHg6IHRoaXMuY3VycmVudFhfICsgMi4wIC8gMy4wICog
KGNwLnggLSB0aGlzLmN1cnJlbnRYXyksCiAgICAgICAgICAgICAgICB5OiB0aGlzLmN1cnJlbnRZ
XyArIDIuMCAvIDMuMCAqIChjcC55IC0gdGhpcy5jdXJyZW50WV8pCiAgICAgICAgICAgIH07CiAg
ICAgICAgICAgIHZhciBjcDIgPSB7CiAgICAgICAgICAgICAgICB4OiBjcDEueCArIChwLnggLSB0
aGlzLmN1cnJlbnRYXykgLyAzLjAsCiAgICAgICAgICAgICAgICB5OiBjcDEueSArIChwLnkgLSB0
aGlzLmN1cnJlbnRZXykgLyAzLjAKICAgICAgICAgICAgfTsKICAgICAgICAgICAgYmV6aWVyQ3Vy
dmVUbyh0aGlzLCBjcDEsIGNwMiwgcCk7CiAgICAgICAgfTsKICAgICAgICBjb250ZXh0UHJvdG90
eXBlLmFyYyA9IGZ1bmN0aW9uIChhWCwgYVksIGFSYWRpdXMsIGFTdGFydEFuZ2xlLCBhRW5kQW5n
bGUsIGFDbG9ja3dpc2UpIHsKICAgICAgICAgICAgYVJhZGl1cyAqPSBaOwogICAgICAgICAgICB2
YXIgYXJjVHlwZSA9IGFDbG9ja3dpc2UgPyAnYXQnIDogJ3dhJzsKICAgICAgICAgICAgdmFyIHhT
dGFydCA9IGFYICsgbWMoYVN0YXJ0QW5nbGUpICogYVJhZGl1cyAtIFoyOwogICAgICAgICAgICB2
YXIgeVN0YXJ0ID0gYVkgKyBtcyhhU3RhcnRBbmdsZSkgKiBhUmFkaXVzIC0gWjI7CiAgICAgICAg
ICAgIHZhciB4RW5kID0gYVggKyBtYyhhRW5kQW5nbGUpICogYVJhZGl1cyAtIFoyOwogICAgICAg
ICAgICB2YXIgeUVuZCA9IGFZICsgbXMoYUVuZEFuZ2xlKSAqIGFSYWRpdXMgLSBaMjsKICAgICAg
ICAgICAgaWYgKHhTdGFydCA9PSB4RW5kICYmICFhQ2xvY2t3aXNlKSB7CiAgICAgICAgICAgICAg
ICB4U3RhcnQgKz0gMC4xMjU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHAgPSB0aGlz
LmdldENvb3Jkc18oYVgsIGFZKTsKICAgICAgICAgICAgdmFyIHBTdGFydCA9IHRoaXMuZ2V0Q29v
cmRzXyh4U3RhcnQsIHlTdGFydCk7CiAgICAgICAgICAgIHZhciBwRW5kID0gdGhpcy5nZXRDb29y
ZHNfKHhFbmQsIHlFbmQpOwogICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoXy5wdXNoKHsKICAg
ICAgICAgICAgICAgIHR5cGU6IGFyY1R5cGUsCiAgICAgICAgICAgICAgICB4OiBwLngsCiAgICAg
ICAgICAgICAgICB5OiBwLnksCiAgICAgICAgICAgICAgICByYWRpdXM6IGFSYWRpdXMsCiAgICAg
ICAgICAgICAgICB4U3RhcnQ6IHBTdGFydC54LAogICAgICAgICAgICAgICAgeVN0YXJ0OiBwU3Rh
cnQueSwKICAgICAgICAgICAgICAgIHhFbmQ6IHBFbmQueCwKICAgICAgICAgICAgICAgIHlFbmQ6
IHBFbmQueQogICAgICAgICAgICB9KTsKICAgICAgICB9OwogICAgICAgIGNvbnRleHRQcm90b3R5
cGUucmVjdCA9IGZ1bmN0aW9uIChhWCwgYVksIGFXaWR0aCwgYUhlaWdodCkgewogICAgICAgICAg
ICB0aGlzLm1vdmVUbyhhWCwgYVkpOwogICAgICAgICAgICB0aGlzLmxpbmVUbyhhWCArIGFXaWR0
aCwgYVkpOwogICAgICAgICAgICB0aGlzLmxpbmVUbyhhWCArIGFXaWR0aCwgYVkgKyBhSGVpZ2h0
KTsKICAgICAgICAgICAgdGhpcy5saW5lVG8oYVgsIGFZICsgYUhlaWdodCk7CiAgICAgICAgICAg
IHRoaXMuY2xvc2VQYXRoKCk7CiAgICAgICAgfTsKICAgICAgICBjb250ZXh0UHJvdG90eXBlLnN0
cm9rZVJlY3QgPSBmdW5jdGlvbiAoYVgsIGFZLCBhV2lkdGgsIGFIZWlnaHQpIHsKICAgICAgICAg
ICAgdGhpcy5iZWdpblBhdGgoKTsKICAgICAgICAgICAgdGhpcy5tb3ZlVG8oYVgsIGFZKTsKICAg
ICAgICAgICAgdGhpcy5saW5lVG8oYVggKyBhV2lkdGgsIGFZKTsKICAgICAgICAgICAgdGhpcy5s
aW5lVG8oYVggKyBhV2lkdGgsIGFZICsgYUhlaWdodCk7CiAgICAgICAgICAgIHRoaXMubGluZVRv
KGFYLCBhWSArIGFIZWlnaHQpOwogICAgICAgICAgICB0aGlzLmNsb3NlUGF0aCgpOwogICAgICAg
ICAgICB0aGlzLnN0cm9rZSgpOwogICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoXyA9IFtdOwog
ICAgICAgIH07CiAgICAgICAgY29udGV4dFByb3RvdHlwZS5maWxsUmVjdCA9IGZ1bmN0aW9uIChh
WCwgYVksIGFXaWR0aCwgYUhlaWdodCkgewogICAgICAgICAgICB0aGlzLmJlZ2luUGF0aCgpOwog
ICAgICAgICAgICB0aGlzLm1vdmVUbyhhWCwgYVkpOwogICAgICAgICAgICB0aGlzLmxpbmVUbyhh
WCArIGFXaWR0aCwgYVkpOwogICAgICAgICAgICB0aGlzLmxpbmVUbyhhWCArIGFXaWR0aCwgYVkg
KyBhSGVpZ2h0KTsKICAgICAgICAgICAgdGhpcy5saW5lVG8oYVgsIGFZICsgYUhlaWdodCk7CiAg
ICAgICAgICAgIHRoaXMuY2xvc2VQYXRoKCk7CiAgICAgICAgICAgIHRoaXMuZmlsbCgpOwogICAg
ICAgICAgICB0aGlzLmN1cnJlbnRQYXRoXyA9IFtdOwogICAgICAgIH07CiAgICAgICAgY29udGV4
dFByb3RvdHlwZS5jcmVhdGVMaW5lYXJHcmFkaWVudCA9IGZ1bmN0aW9uIChhWDAsIGFZMCwgYVgx
LCBhWTEpIHsKICAgICAgICAgICAgdmFyIGdyYWRpZW50ID0gbmV3IENhbnZhc0dyYWRpZW50Xygn
Z3JhZGllbnQnKTsKICAgICAgICAgICAgZ3JhZGllbnQueDBfID0gYVgwOwogICAgICAgICAgICBn
cmFkaWVudC55MF8gPSBhWTA7CiAgICAgICAgICAgIGdyYWRpZW50LngxXyA9IGFYMTsKICAgICAg
ICAgICAgZ3JhZGllbnQueTFfID0gYVkxOwogICAgICAgICAgICByZXR1cm4gZ3JhZGllbnQ7CiAg
ICAgICAgfTsKICAgICAgICBjb250ZXh0UHJvdG90eXBlLmNyZWF0ZVJhZGlhbEdyYWRpZW50ID0g
ZnVuY3Rpb24gKGFYMCwgYVkwLCBhUjAsIGFYMSwgYVkxLCBhUjEpIHsKICAgICAgICAgICAgdmFy
IGdyYWRpZW50ID0gbmV3IENhbnZhc0dyYWRpZW50XygnZ3JhZGllbnRyYWRpYWwnKTsKICAgICAg
ICAgICAgZ3JhZGllbnQueDBfID0gYVgwOwogICAgICAgICAgICBncmFkaWVudC55MF8gPSBhWTA7
CiAgICAgICAgICAgIGdyYWRpZW50LnIwXyA9IGFSMDsKICAgICAgICAgICAgZ3JhZGllbnQueDFf
ID0gYVgxOwogICAgICAgICAgICBncmFkaWVudC55MV8gPSBhWTE7CiAgICAgICAgICAgIGdyYWRp
ZW50LnIxXyA9IGFSMTsKICAgICAgICAgICAgcmV0dXJuIGdyYWRpZW50OwogICAgICAgIH07CiAg
ICAgICAgY29udGV4dFByb3RvdHlwZS5kcmF3SW1hZ2UgPSBmdW5jdGlvbiAoaW1hZ2UsIHZhcl9h
cmdzKSB7CiAgICAgICAgICAgIHZhciBkeCwgZHksIGR3LCBkaCwgc3gsIHN5LCBzdywgc2g7CiAg
ICAgICAgICAgIHZhciBvbGRSdW50aW1lV2lkdGggPSBpbWFnZS5ydW50aW1lU3R5bGUud2lkdGg7
CiAgICAgICAgICAgIHZhciBvbGRSdW50aW1lSGVpZ2h0ID0gaW1hZ2UucnVudGltZVN0eWxlLmhl
aWdodDsKICAgICAgICAgICAgaW1hZ2UucnVudGltZVN0eWxlLndpZHRoID0gJ2F1dG8nOwogICAg
ICAgICAgICBpbWFnZS5ydW50aW1lU3R5bGUuaGVpZ2h0ID0gJ2F1dG8nOwogICAgICAgICAgICB2
YXIgdyA9IGltYWdlLndpZHRoOwogICAgICAgICAgICB2YXIgaCA9IGltYWdlLmhlaWdodDsKICAg
ICAgICAgICAgaW1hZ2UucnVudGltZVN0eWxlLndpZHRoID0gb2xkUnVudGltZVdpZHRoOwogICAg
ICAgICAgICBpbWFnZS5ydW50aW1lU3R5bGUuaGVpZ2h0ID0gb2xkUnVudGltZUhlaWdodDsKICAg
ICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMykgewogICAgICAgICAgICAgICAgZHgg
PSBhcmd1bWVudHNbMV07CiAgICAgICAgICAgICAgICBkeSA9IGFyZ3VtZW50c1syXTsKICAgICAg
ICAgICAgICAgIHN4ID0gc3kgPSAwOwogICAgICAgICAgICAgICAgc3cgPSBkdyA9IHc7CiAgICAg
ICAgICAgICAgICBzaCA9IGRoID0gaDsKICAgICAgICAgICAgfSBlbHNlIGlmIChhcmd1bWVudHMu
bGVuZ3RoID09IDUpIHsKICAgICAgICAgICAgICAgIGR4ID0gYXJndW1lbnRzWzFdOwogICAgICAg
ICAgICAgICAgZHkgPSBhcmd1bWVudHNbMl07CiAgICAgICAgICAgICAgICBkdyA9IGFyZ3VtZW50
c1szXTsKICAgICAgICAgICAgICAgIGRoID0gYXJndW1lbnRzWzRdOwogICAgICAgICAgICAgICAg
c3ggPSBzeSA9IDA7CiAgICAgICAgICAgICAgICBzdyA9IHc7CiAgICAgICAgICAgICAgICBzaCA9
IGg7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSA5KSB7CiAgICAg
ICAgICAgICAgICBzeCA9IGFyZ3VtZW50c1sxXTsKICAgICAgICAgICAgICAgIHN5ID0gYXJndW1l
bnRzWzJdOwogICAgICAgICAgICAgICAgc3cgPSBhcmd1bWVudHNbM107CiAgICAgICAgICAgICAg
ICBzaCA9IGFyZ3VtZW50c1s0XTsKICAgICAgICAgICAgICAgIGR4ID0gYXJndW1lbnRzWzVdOwog
ICAgICAgICAgICAgICAgZHkgPSBhcmd1bWVudHNbNl07CiAgICAgICAgICAgICAgICBkdyA9IGFy
Z3VtZW50c1s3XTsKICAgICAgICAgICAgICAgIGRoID0gYXJndW1lbnRzWzhdOwogICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ0ludmFsaWQgbnVtYmVyIG9m
IGFyZ3VtZW50cycpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBkID0gdGhpcy5nZXRD
b29yZHNfKGR4LCBkeSk7CiAgICAgICAgICAgIHZhciB3MiA9IHN3IC8gMjsKICAgICAgICAgICAg
dmFyIGgyID0gc2ggLyAyOwogICAgICAgICAgICB2YXIgdm1sU3RyID0gW107CiAgICAgICAgICAg
IHZhciBXID0gMTA7CiAgICAgICAgICAgIHZhciBIID0gMTA7CiAgICAgICAgICAgIHZtbFN0ci5w
dXNoKCcgPGdfdm1sXzpncm91cCcsICcgY29vcmRzaXplPSInLCBaICogVywgJywnLCBaICogSCwg
JyInLCAnIGNvb3Jkb3JpZ2luPSIwLDAiJywgJyBzdHlsZT0id2lkdGg6JywgVywgJ3B4O2hlaWdo
dDonLCBILCAncHg7cG9zaXRpb246YWJzb2x1dGU7Jyk7CiAgICAgICAgICAgIGlmICh0aGlzLm1f
WzBdWzBdICE9IDEgfHwgdGhpcy5tX1swXVsxXSkgewogICAgICAgICAgICAgICAgdmFyIGZpbHRl
ciA9IFtdOwogICAgICAgICAgICAgICAgZmlsdGVyLnB1c2goJ00xMT0nLCB0aGlzLm1fWzBdWzBd
LCAnLCcsICdNMTI9JywgdGhpcy5tX1sxXVswXSwgJywnLCAnTTIxPScsIHRoaXMubV9bMF1bMV0s
ICcsJywgJ00yMj0nLCB0aGlzLm1fWzFdWzFdLCAnLCcsICdEeD0nLCBtcihkLnggLyBaKSwgJywn
LCAnRHk9JywgbXIoZC55IC8gWiksICcnKTsKICAgICAgICAgICAgICAgIHZhciBtYXggPSBkOwog
ICAgICAgICAgICAgICAgdmFyIGMyID0gdGhpcy5nZXRDb29yZHNfKGR4ICsgZHcsIGR5KTsKICAg
ICAgICAgICAgICAgIHZhciBjMyA9IHRoaXMuZ2V0Q29vcmRzXyhkeCwgZHkgKyBkaCk7CiAgICAg
ICAgICAgICAgICB2YXIgYzQgPSB0aGlzLmdldENvb3Jkc18oZHggKyBkdywgZHkgKyBkaCk7CiAg
ICAgICAgICAgICAgICBtYXgueCA9IG0ubWF4KG1heC54LCBjMi54LCBjMy54LCBjNC54KTsKICAg
ICAgICAgICAgICAgIG1heC55ID0gbS5tYXgobWF4LnksIGMyLnksIGMzLnksIGM0LnkpOwogICAg
ICAgICAgICAgICAgdm1sU3RyLnB1c2goJ3BhZGRpbmc6MCAnLCBtcihtYXgueCAvIFopLCAncHgg
JywgbXIobWF4LnkgLyBaKSwgJ3B4IDA7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1p
Y3Jvc29mdC5NYXRyaXgoJywgZmlsdGVyLmpvaW4oJycpLCAiLCBzaXppbmdtZXRob2Q9J2NsaXAn
KTsiKQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdm1sU3RyLnB1c2goJ3Rv
cDonLCBtcihkLnkgLyBaKSwgJ3B4O2xlZnQ6JywgbXIoZC54IC8gWiksICdweDsnKTsKICAgICAg
ICAgICAgfQogICAgICAgICAgICB2bWxTdHIucHVzaCgnICI+JywgJzxnX3ZtbF86aW1hZ2Ugc3Jj
PSInLCBpbWFnZS5zcmMsICciJywgJyBzdHlsZT0id2lkdGg6JywgWiAqIGR3LCAncHg7JywgJyBo
ZWlnaHQ6JywgWiAqIGRoLCAncHg7IicsICcgY3JvcGxlZnQ9IicsIHN4IC8gdywgJyInLCAnIGNy
b3B0b3A9IicsIHN5IC8gaCwgJyInLCAnIGNyb3ByaWdodD0iJywgKHcgLSBzeCAtIHN3KSAvIHcs
ICciJywgJyBjcm9wYm90dG9tPSInLCAoaCAtIHN5IC0gc2gpIC8gaCwgJyInLCAnIC8+JywgJzwv
Z192bWxfOmdyb3VwPicpOwogICAgICAgICAgICB0aGlzLmVsZW1lbnRfLmluc2VydEFkamFjZW50
SFRNTCgnQmVmb3JlRW5kJywgdm1sU3RyLmpvaW4oJycpKTsKICAgICAgICB9OwogICAgICAgIGNv
bnRleHRQcm90b3R5cGUuc3Ryb2tlID0gZnVuY3Rpb24gKGFGaWxsKSB7CiAgICAgICAgICAgIHZh
ciBsaW5lU3RyID0gW107CiAgICAgICAgICAgIHZhciBsaW5lT3BlbiA9IGZhbHNlOwogICAgICAg
ICAgICB2YXIgYSA9IHByb2Nlc3NTdHlsZShhRmlsbCA/IHRoaXMuZmlsbFN0eWxlIDogdGhpcy5z
dHJva2VTdHlsZSk7CiAgICAgICAgICAgIHZhciBjb2xvciA9IGEuY29sb3I7CiAgICAgICAgICAg
IHZhciBvcGFjaXR5ID0gYS5hbHBoYSAqIHRoaXMuZ2xvYmFsQWxwaGE7CiAgICAgICAgICAgIHZh
ciBXID0gMTA7CiAgICAgICAgICAgIHZhciBIID0gMTA7CiAgICAgICAgICAgIGxpbmVTdHIucHVz
aCgnPGdfdm1sXzpzaGFwZScsICcgZmlsbGVkPSInLCAhISBhRmlsbCwgJyInLCAnIHN0eWxlPSJw
b3NpdGlvbjphYnNvbHV0ZTt3aWR0aDonLCBXLCAncHg7aGVpZ2h0OicsIEgsICdweDsiJywgJyBj
b29yZG9yaWdpbj0iMCAwIiBjb29yZHNpemU9IicsIFogKiBXLCAnICcsIFogKiBILCAnIicsICcg
c3Ryb2tlZD0iJywgIWFGaWxsLCAnIicsICcgcGF0aD0iJyk7CiAgICAgICAgICAgIHZhciBuZXdT
ZXEgPSBmYWxzZTsKICAgICAgICAgICAgdmFyIG1pbiA9IHsKICAgICAgICAgICAgICAgIHg6IG51
bGwsCiAgICAgICAgICAgICAgICB5OiBudWxsCiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHZh
ciBtYXggPSB7CiAgICAgICAgICAgICAgICB4OiBudWxsLAogICAgICAgICAgICAgICAgeTogbnVs
bAogICAgICAgICAgICB9OwogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY3Vy
cmVudFBhdGhfLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIgcCA9IHRoaXMuY3Vy
cmVudFBhdGhfW2ldOwogICAgICAgICAgICAgICAgdmFyIGM7CiAgICAgICAgICAgICAgICBzd2l0
Y2ggKHAudHlwZSkgewogICAgICAgICAgICAgICAgY2FzZSAnbW92ZVRvJzoKICAgICAgICAgICAg
ICAgICAgICBjID0gcDsKICAgICAgICAgICAgICAgICAgICBsaW5lU3RyLnB1c2goJyBtICcsIG1y
KHAueCksICcsJywgbXIocC55KSk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICBjYXNlICdsaW5lVG8nOgogICAgICAgICAgICAgICAgICAgIGxpbmVTdHIucHVzaCgn
IGwgJywgbXIocC54KSwgJywnLCBtcihwLnkpKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgIGNhc2UgJ2Nsb3NlJzoKICAgICAgICAgICAgICAgICAgICBsaW5lU3Ry
LnB1c2goJyB4ICcpOwogICAgICAgICAgICAgICAgICAgIHAgPSBudWxsOwogICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnYmV6aWVyQ3VydmVUbyc6CiAgICAg
ICAgICAgICAgICAgICAgbGluZVN0ci5wdXNoKCcgYyAnLCBtcihwLmNwMXgpLCAnLCcsIG1yKHAu
Y3AxeSksICcsJywgbXIocC5jcDJ4KSwgJywnLCBtcihwLmNwMnkpLCAnLCcsIG1yKHAueCksICcs
JywgbXIocC55KSk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBj
YXNlICdhdCc6CiAgICAgICAgICAgICAgICBjYXNlICd3YSc6CiAgICAgICAgICAgICAgICAgICAg
bGluZVN0ci5wdXNoKCcgJywgcC50eXBlLCAnICcsIG1yKHAueCAtIHRoaXMuYXJjU2NhbGVYXyAq
IHAucmFkaXVzKSwgJywnLCBtcihwLnkgLSB0aGlzLmFyY1NjYWxlWV8gKiBwLnJhZGl1cyksICcg
JywgbXIocC54ICsgdGhpcy5hcmNTY2FsZVhfICogcC5yYWRpdXMpLCAnLCcsIG1yKHAueSArIHRo
aXMuYXJjU2NhbGVZXyAqIHAucmFkaXVzKSwgJyAnLCBtcihwLnhTdGFydCksICcsJywgbXIocC55
U3RhcnQpLCAnICcsIG1yKHAueEVuZCksICcsJywgbXIocC55RW5kKSk7CiAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAocCkgewog
ICAgICAgICAgICAgICAgICAgIGlmIChtaW4ueCA9PSBudWxsIHx8IHAueCA8IG1pbi54KSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIG1pbi54ID0gcC54OwogICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICBpZiAobWF4LnggPT0gbnVsbCB8fCBwLnggPiBtYXgueCkgewog
ICAgICAgICAgICAgICAgICAgICAgICBtYXgueCA9IHAueDsKICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgaWYgKG1pbi55ID09IG51bGwgfHwgcC55IDwgbWluLnkpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgbWluLnkgPSBwLnk7CiAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgIGlmIChtYXgueSA9PSBudWxsIHx8IHAueSA+IG1heC55KSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIG1heC55ID0gcC55OwogICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBsaW5lU3RyLnB1
c2goJyAiPicpOwogICAgICAgICAgICBpZiAoIWFGaWxsKSB7CiAgICAgICAgICAgICAgICB2YXIg
bGluZVdpZHRoID0gdGhpcy5saW5lU2NhbGVfICogdGhpcy5saW5lV2lkdGg7CiAgICAgICAgICAg
ICAgICBpZiAobGluZVdpZHRoIDwgMSkgewogICAgICAgICAgICAgICAgICAgIG9wYWNpdHkgKj0g
bGluZVdpZHRoOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbGluZVN0ci5wdXNo
KCc8Z192bWxfOnN0cm9rZScsICcgb3BhY2l0eT0iJywgb3BhY2l0eSwgJyInLCAnIGpvaW5zdHls
ZT0iJywgdGhpcy5saW5lSm9pbiwgJyInLCAnIG1pdGVybGltaXQ9IicsIHRoaXMubWl0ZXJMaW1p
dCwgJyInLCAnIGVuZGNhcD0iJywgcHJvY2Vzc0xpbmVDYXAodGhpcy5saW5lQ2FwKSwgJyInLCAn
IHdlaWdodD0iJywgbGluZVdpZHRoLCAncHgiJywgJyBjb2xvcj0iJywgY29sb3IsICciIC8+Jyk7
CiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuZmlsbFN0eWxlID09ICdvYmplY3Qn
KSB7CiAgICAgICAgICAgICAgICB2YXIgZmlsbFN0eWxlID0gdGhpcy5maWxsU3R5bGU7CiAgICAg
ICAgICAgICAgICB2YXIgYW5nbGUgPSAwOwogICAgICAgICAgICAgICAgdmFyIGZvY3VzID0gewog
ICAgICAgICAgICAgICAgICAgIHg6IDAsCiAgICAgICAgICAgICAgICAgICAgeTogMAogICAgICAg
ICAgICAgICAgfTsKICAgICAgICAgICAgICAgIHZhciBzaGlmdCA9IDA7CiAgICAgICAgICAgICAg
ICB2YXIgZXhwYW5zaW9uID0gMTsKICAgICAgICAgICAgICAgIGlmIChmaWxsU3R5bGUudHlwZV8g
PT0gJ2dyYWRpZW50JykgewogICAgICAgICAgICAgICAgICAgIHZhciB4MCA9IGZpbGxTdHlsZS54
MF8gLyB0aGlzLmFyY1NjYWxlWF87CiAgICAgICAgICAgICAgICAgICAgdmFyIHkwID0gZmlsbFN0
eWxlLnkwXyAvIHRoaXMuYXJjU2NhbGVZXzsKICAgICAgICAgICAgICAgICAgICB2YXIgeDEgPSBm
aWxsU3R5bGUueDFfIC8gdGhpcy5hcmNTY2FsZVhfOwogICAgICAgICAgICAgICAgICAgIHZhciB5
MSA9IGZpbGxTdHlsZS55MV8gLyB0aGlzLmFyY1NjYWxlWV87CiAgICAgICAgICAgICAgICAgICAg
dmFyIHAwID0gdGhpcy5nZXRDb29yZHNfKHgwLCB5MCk7CiAgICAgICAgICAgICAgICAgICAgdmFy
IHAxID0gdGhpcy5nZXRDb29yZHNfKHgxLCB5MSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGR4
ID0gcDEueCAtIHAwLng7CiAgICAgICAgICAgICAgICAgICAgdmFyIGR5ID0gcDEueSAtIHAwLnk7
CiAgICAgICAgICAgICAgICAgICAgYW5nbGUgPSBNYXRoLmF0YW4yKGR4LCBkeSkgKiAxODAgLyBN
YXRoLlBJOwogICAgICAgICAgICAgICAgICAgIGlmIChhbmdsZSA8IDApIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgYW5nbGUgKz0gMzYwOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICBpZiAoYW5nbGUgPCAxZS02KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGFu
Z2xlID0gMDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgIHZhciBwMCA9IHRoaXMuZ2V0Q29vcmRzXyhmaWxsU3R5bGUueDBf
LCBmaWxsU3R5bGUueTBfKTsKICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSBtYXgueCAt
IG1pbi54OwogICAgICAgICAgICAgICAgICAgIHZhciBoZWlnaHQgPSBtYXgueSAtIG1pbi55Owog
ICAgICAgICAgICAgICAgICAgIGZvY3VzID0gewogICAgICAgICAgICAgICAgICAgICAgICB4OiAo
cDAueCAtIG1pbi54KSAvIHdpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICB5OiAocDAueSAt
IG1pbi55KSAvIGhlaWdodAogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAg
ICAgd2lkdGggLz0gdGhpcy5hcmNTY2FsZVhfICogWjsKICAgICAgICAgICAgICAgICAgICBoZWln
aHQgLz0gdGhpcy5hcmNTY2FsZVlfICogWjsKICAgICAgICAgICAgICAgICAgICB2YXIgZGltZW5z
aW9uID0gbS5tYXgod2lkdGgsIGhlaWdodCk7CiAgICAgICAgICAgICAgICAgICAgc2hpZnQgPSAy
ICogZmlsbFN0eWxlLnIwXyAvIGRpbWVuc2lvbjsKICAgICAgICAgICAgICAgICAgICBleHBhbnNp
b24gPSAyICogZmlsbFN0eWxlLnIxXyAvIGRpbWVuc2lvbiAtIHNoaWZ0OwogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgdmFyIHN0b3BzID0gZmlsbFN0eWxlLmNvbG9yc187CiAgICAg
ICAgICAgICAgICBzdG9wcy5zb3J0KGZ1bmN0aW9uIChjczEsIGNzMikgewogICAgICAgICAgICAg
ICAgICAgIHJldHVybiBjczEub2Zmc2V0IC0gY3MyLm9mZnNldDsKICAgICAgICAgICAgICAgIH0p
OwogICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IHN0b3BzLmxlbmd0aDsKICAgICAgICAgICAg
ICAgIHZhciBjb2xvcjEgPSBzdG9wc1swXS5jb2xvcjsKICAgICAgICAgICAgICAgIHZhciBjb2xv
cjIgPSBzdG9wc1tsZW5ndGggLSAxXS5jb2xvcjsKICAgICAgICAgICAgICAgIHZhciBvcGFjaXR5
MSA9IHN0b3BzWzBdLmFscGhhICogdGhpcy5nbG9iYWxBbHBoYTsKICAgICAgICAgICAgICAgIHZh
ciBvcGFjaXR5MiA9IHN0b3BzW2xlbmd0aCAtIDFdLmFscGhhICogdGhpcy5nbG9iYWxBbHBoYTsK
ICAgICAgICAgICAgICAgIHZhciBjb2xvcnMgPSBbXTsKICAgICAgICAgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICB2YXIgc3RvcCA9
IHN0b3BzW2ldOwogICAgICAgICAgICAgICAgICAgIGNvbG9ycy5wdXNoKHN0b3Aub2Zmc2V0ICog
ZXhwYW5zaW9uICsgc2hpZnQgKyAnICcgKyBzdG9wLmNvbG9yKTsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIGxpbmVTdHIucHVzaCgnPGdfdm1sXzpmaWxsIHR5cGU9IicsIGZpbGxT
dHlsZS50eXBlXywgJyInLCAnIG1ldGhvZD0ibm9uZSIgZm9jdXM9IjEwMCUiJywgJyBjb2xvcj0i
JywgY29sb3IxLCAnIicsICcgY29sb3IyPSInLCBjb2xvcjIsICciJywgJyBjb2xvcnM9IicsIGNv
bG9ycy5qb2luKCcsJyksICciJywgJyBvcGFjaXR5PSInLCBvcGFjaXR5MiwgJyInLCAnIGdfb186
b3BhY2l0eTI9IicsIG9wYWNpdHkxLCAnIicsICcgYW5nbGU9IicsIGFuZ2xlLCAnIicsICcgZm9j
dXNwb3NpdGlvbj0iJywgZm9jdXMueCwgJywnLCBmb2N1cy55LCAnIiAvPicpOwogICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgbGluZVN0ci5wdXNoKCc8Z192bWxfOmZpbGwgY29s
b3I9IicsIGNvbG9yLCAnIiBvcGFjaXR5PSInLCBvcGFjaXR5LCAnIiAvPicpOwogICAgICAgICAg
ICB9CiAgICAgICAgICAgIGxpbmVTdHIucHVzaCgnPC9nX3ZtbF86c2hhcGU+Jyk7CiAgICAgICAg
ICAgIHRoaXMuZWxlbWVudF8uaW5zZXJ0QWRqYWNlbnRIVE1MKCdiZWZvcmVFbmQnLCBsaW5lU3Ry
LmpvaW4oJycpKTsKICAgICAgICB9OwogICAgICAgIGNvbnRleHRQcm90b3R5cGUuZmlsbCA9IGZ1
bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhpcy5zdHJva2UodHJ1ZSk7CiAgICAgICAgfQogICAg
ICAgIGNvbnRleHRQcm90b3R5cGUuY2xvc2VQYXRoID0gZnVuY3Rpb24gKCkgewogICAgICAgICAg
ICB0aGlzLmN1cnJlbnRQYXRoXy5wdXNoKHsKICAgICAgICAgICAgICAgIHR5cGU6ICdjbG9zZScK
ICAgICAgICAgICAgfSk7CiAgICAgICAgfTsKICAgICAgICBjb250ZXh0UHJvdG90eXBlLmdldENv
b3Jkc18gPSBmdW5jdGlvbiAoYVgsIGFZKSB7CiAgICAgICAgICAgIHZhciBtID0gdGhpcy5tXzsK
ICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIHg6IFogKiAoYVggKiBtWzBdWzBd
ICsgYVkgKiBtWzFdWzBdICsgbVsyXVswXSkgLSBaMiwKICAgICAgICAgICAgICAgIHk6IFogKiAo
YVggKiBtWzBdWzFdICsgYVkgKiBtWzFdWzFdICsgbVsyXVsxXSkgLSBaMgogICAgICAgICAgICB9
CiAgICAgICAgfTsKICAgICAgICBjb250ZXh0UHJvdG90eXBlLnNhdmUgPSBmdW5jdGlvbiAoKSB7
CiAgICAgICAgICAgIHZhciBvID0ge307CiAgICAgICAgICAgIGNvcHlTdGF0ZSh0aGlzLCBvKTsK
ICAgICAgICAgICAgdGhpcy5hU3RhY2tfLnB1c2gobyk7CiAgICAgICAgICAgIHRoaXMubVN0YWNr
Xy5wdXNoKHRoaXMubV8pOwogICAgICAgICAgICB0aGlzLm1fID0gbWF0cml4TXVsdGlwbHkoY3Jl
YXRlTWF0cml4SWRlbnRpdHkoKSwgdGhpcy5tXyk7CiAgICAgICAgfTsKICAgICAgICBjb250ZXh0
UHJvdG90eXBlLnJlc3RvcmUgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIGNvcHlTdGF0ZSh0
aGlzLmFTdGFja18ucG9wKCksIHRoaXMpOwogICAgICAgICAgICB0aGlzLm1fID0gdGhpcy5tU3Rh
Y2tfLnBvcCgpOwogICAgICAgIH07CiAgICAgICAgY29udGV4dFByb3RvdHlwZS50cmFuc2xhdGUg
PSBmdW5jdGlvbiAoYVgsIGFZKSB7CiAgICAgICAgICAgIHZhciBtMSA9IFsKICAgICAgICAgICAg
ICAgIFsxLCAwLCAwXSwKICAgICAgICAgICAgICAgIFswLCAxLCAwXSwKICAgICAgICAgICAgICAg
IFthWCwgYVksIDFdCiAgICAgICAgICAgIF07CiAgICAgICAgICAgIHRoaXMubV8gPSBtYXRyaXhN
dWx0aXBseShtMSwgdGhpcy5tXyk7CiAgICAgICAgfTsKICAgICAgICBjb250ZXh0UHJvdG90eXBl
LnJvdGF0ZSA9IGZ1bmN0aW9uIChhUm90KSB7CiAgICAgICAgICAgIHZhciBjID0gbWMoYVJvdCk7
CiAgICAgICAgICAgIHZhciBzID0gbXMoYVJvdCk7CiAgICAgICAgICAgIHZhciBtMSA9IFsKICAg
ICAgICAgICAgICAgIFtjLCBzLCAwXSwKICAgICAgICAgICAgICAgIFstcywgYywgMF0sCiAgICAg
ICAgICAgICAgICBbMCwgMCwgMV0KICAgICAgICAgICAgXTsKICAgICAgICAgICAgdGhpcy5tXyA9
IG1hdHJpeE11bHRpcGx5KG0xLCB0aGlzLm1fKTsKICAgICAgICB9OwogICAgICAgIGNvbnRleHRQ
cm90b3R5cGUuc2NhbGUgPSBmdW5jdGlvbiAoYVgsIGFZKSB7CiAgICAgICAgICAgIHRoaXMuYXJj
U2NhbGVYXyAqPSBhWDsKICAgICAgICAgICAgdGhpcy5hcmNTY2FsZVlfICo9IGFZOwogICAgICAg
ICAgICB2YXIgbTEgPSBbCiAgICAgICAgICAgICAgICBbYVgsIDAsIDBdLAogICAgICAgICAgICAg
ICAgWzAsIGFZLCAwXSwKICAgICAgICAgICAgICAgIFswLCAwLCAxXQogICAgICAgICAgICBdOwog
ICAgICAgICAgICB2YXIgbSA9IHRoaXMubV8gPSBtYXRyaXhNdWx0aXBseShtMSwgdGhpcy5tXyk7
CiAgICAgICAgICAgIHZhciBkZXQgPSBtWzBdWzBdICogbVsxXVsxXSAtIG1bMF1bMV0gKiBtWzFd
WzBdOwogICAgICAgICAgICB0aGlzLmxpbmVTY2FsZV8gPSBzcXJ0KGFicyhkZXQpKTsKICAgICAg
ICB9OwogICAgICAgIGNvbnRleHRQcm90b3R5cGUuY2xpcCA9IGZ1bmN0aW9uICgpIHt9OwogICAg
ICAgIGNvbnRleHRQcm90b3R5cGUuYXJjVG8gPSBmdW5jdGlvbiAoKSB7fTsKICAgICAgICBjb250
ZXh0UHJvdG90eXBlLmNyZWF0ZVBhdHRlcm4gPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJl
dHVybiBuZXcgQ2FudmFzUGF0dGVybl87CiAgICAgICAgfTsKCiAgICAgICAgZnVuY3Rpb24gQ2Fu
dmFzR3JhZGllbnRfKGFUeXBlKSB7CiAgICAgICAgICAgIHRoaXMudHlwZV8gPSBhVHlwZTsKICAg
ICAgICAgICAgdGhpcy54MF8gPSAwOwogICAgICAgICAgICB0aGlzLnkwXyA9IDA7CiAgICAgICAg
ICAgIHRoaXMucjBfID0gMDsKICAgICAgICAgICAgdGhpcy54MV8gPSAwOwogICAgICAgICAgICB0
aGlzLnkxXyA9IDA7CiAgICAgICAgICAgIHRoaXMucjFfID0gMDsKICAgICAgICAgICAgdGhpcy5j
b2xvcnNfID0gW107CiAgICAgICAgfQogICAgICAgIENhbnZhc0dyYWRpZW50Xy5wcm90b3R5cGUu
YWRkQ29sb3JTdG9wID0gZnVuY3Rpb24gKGFPZmZzZXQsIGFDb2xvcikgewogICAgICAgICAgICBh
Q29sb3IgPSBwcm9jZXNzU3R5bGUoYUNvbG9yKTsKICAgICAgICAgICAgdGhpcy5jb2xvcnNfLnB1
c2goewogICAgICAgICAgICAgICAgb2Zmc2V0OiBhT2Zmc2V0LAogICAgICAgICAgICAgICAgY29s
b3I6IGFDb2xvci5jb2xvciwKICAgICAgICAgICAgICAgIGFscGhhOiBhQ29sb3IuYWxwaGEKICAg
ICAgICAgICAgfSk7CiAgICAgICAgfTsKCiAgICAgICAgZnVuY3Rpb24gQ2FudmFzUGF0dGVybl8o
KSB7fQogICAgICAgIEdfdm1sQ2FudmFzTWFuYWdlciA9IEdfdm1sQ2FudmFzTWFuYWdlcl87CiAg
ICAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEID0gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
XzsKICAgICAgICBDYW52YXNHcmFkaWVudCA9IENhbnZhc0dyYWRpZW50XzsKICAgICAgICBDYW52
YXNQYXR0ZXJuID0gQ2FudmFzUGF0dGVybl87CiAgICB9KSgpOwp9CmRvam8ucHJvdmlkZSgiZGou
bW9kdWxlLm1hcmtldGRhdGEubWFya2V0d2F0Y2giKTsKdmFyIEJsdWVHcmFzcyA9IHt9OwppZiAo
dHlwZW9mIChNYXJrZXRXYXRjaCkgPT0gInVuZGVmaW5lZCIpIHZhciBNYXJrZXRXYXRjaCA9IG5l
dyhmdW5jdGlvbiAoKSB7CiAgICB0aGlzLlNhbXBsZSA9IHsKICAgICAgICBhcmVhOiAic2FtcGxl
IgogICAgfTsKICAgIHRoaXMuU2VjdGlvbiA9IHsKICAgICAgICBhcmVhOiAic2VjdGlvbiIKICAg
IH07CiAgICB0aGlzLkludmVzdGluZyA9IHsKICAgICAgICBhcmVhOiAiaW52ZXN0aW5nIgogICAg
fTsKICAgIHRoaXMuU3RvcnkgPSB7CiAgICAgICAgYXJlYTogInN0b3J5IgogICAgfTsKICAgIHRo
aXMuTmV3cyA9IHsKICAgICAgICBhcmVhOiAibmV3cyIKICAgIH07CiAgICB0aGlzLkNvbW11bml0
eSA9IHsKICAgICAgICBhcmVhOiAiY29tbXVuaXR5IgogICAgfTsKICAgIHRoaXMuQ29tbXVuaXR5
Lkluc3RydW1lbnRQaWNrZXIgPSB7CiAgICAgICAgYXJlYTogImNvbW11bml0eSIKICAgIH07CiAg
ICB0aGlzLkNvbW11bml0eS5Ub3BQaWNrZXJzID0gewogICAgICAgIGFyZWE6ICJjb21tdW5pdHki
CiAgICB9OwogICAgdGhpcy5Db21tdW5pdHkuUGlja2VyQWNjb3JkaWFuID0gewogICAgICAgIGFy
ZWE6ICJjb21tdW5pdHkiCiAgICB9OwogICAgdGhpcy5Db21tdW5pdHkuQ29tbWVudGVyR3JpZCA9
IHsKICAgICAgICBhcmVhOiAiY29tbXVuaXR5IgogICAgfTsKICAgIHRoaXMuQ29tbXVuaXR5LkZp
bHRlcmVkQ29tbWVudFRhYnMgPSB7CiAgICAgICAgYXJlYTogImNvbW11bml0eSIKICAgIH07CiAg
ICB0aGlzLlNlYXJjaCA9IHsKICAgICAgICBhcmVhOiAic2VhcmNoIgogICAgfTsKICAgIHRoaXMu
TWFya2V0U3RhdGUgPSB7CiAgICAgICAgY29tcG9uZW50OiAibWFya2V0c3RhdGUiCiAgICB9Owog
ICAgdGhpcy5NZW1iZXIgPSB7CiAgICAgICAgY29tcG9uZW50OiAibWVtYmVyIgogICAgfTsKICAg
IHRoaXMuRG9ja2luZ0JhciA9IHsKICAgICAgICBjb21wb25lbnQ6ICJkb2NraW5nYmFyIgogICAg
fTsKICAgIHRoaXMuRG9ja2luZ0Jhci5Db21tdW5pdHkgPSB7CiAgICAgICAgY29tcG9uZW50OiAi
ZG9ja2luZ2JhciIKICAgIH07CiAgICB0aGlzLkRvY2tpbmdCYXIuQ29tbXVuaXR5Lkdyb3VwcyA9
IHsKICAgICAgICBjb21wb25lbnQ6ICJkb2NraW5nYmFyIgogICAgfTsKICAgIHRoaXMuRG9ja2lu
Z0Jhci5Qb3J0Zm9saW8gPSB7CiAgICAgICAgY29tcG9uZW50OiAiZG9ja2luZ2JhciIKICAgIH07
CiAgICB0aGlzLkRheVBhcnRpbmcgPSB7CiAgICAgICAgY29tcG9uZW50OiAiZGF5cGFydGluZyIK
ICAgIH07CiAgICB0aGlzLk1hcmtldHNOZXdzID0gewogICAgICAgIGNvbXBvbmVudDogIm1hcmtl
dHNuZXdzIgogICAgfTsKICAgIHRoaXMuUGFuZWxzID0gewogICAgICAgIGNvbXBvbmVudDogInBh
bmVscyIKICAgIH07CiAgICB0aGlzLktpb3NrID0gewogICAgICAgIGNvbXBvbmVudDogImtpb3Nr
IgogICAgfTsKICAgIHRoaXMuQnJlYWtpbmdOZXdzID0gewogICAgICAgIGNvbXBvbmVudDogImJy
ZWFraW5nbmV3cyIKICAgIH07CiAgICB0aGlzLk11bHRpUXVvdGUgPSB7CiAgICAgICAgY29tcG9u
ZW50OiAibXVsdGlxdW90ZSIKICAgIH07CiAgICB0aGlzLkludmVzdGluZy5BZHZhbmNlZENoYXJ0
cyA9IHsKICAgICAgICBhcmVhOiAiaW52ZXN0aW5nIgogICAgfTsKICAgIHRoaXMuSW52ZXN0aW5n
LkFkdmFuY2VkQ2hhcnRzLkNvb2tpZSA9IHsKICAgICAgICBhcmVhOiAiaW52ZXN0aW5nIgogICAg
fTsKICAgIHRoaXMuVUkgPSB7CiAgICAgICAgY29tcG9uZW50OiAidWkiCiAgICB9OwogICAgdGhp
cy5GaXNoSGF3ayA9IHsKICAgICAgICBjb21wb25lbnQ6ICJmaXNoaGF3ayIKICAgIH07CiAgICB0
aGlzLlZpZGVvID0gewogICAgICAgIGNvbXBvbmVudDogInZpZGVvIgogICAgfTsKICAgIHRoaXMu
SW52ZXN0aW5nLk11dHVhbEZ1bmRzID0gewogICAgICAgIGFyZWE6ICJpbnZlc3RpbmciCiAgICB9
OwogICAgdmFyIF9iYXNlVXJsID0gIiI7CiAgICB0aGlzLnNldEJhc2VVcmwgPSBmdW5jdGlvbiAo
dXJsKSB7CiAgICAgICAgX2Jhc2VVcmwgPSB1cmw7CiAgICB9OwogICAgdGhpcy5nZXRCYXNlVXJs
ID0gZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiBfYmFzZVVybDsKICAgIH07Cn0pKCk7Cmlm
ICh0eXBlb2YgKHN0cmluZykgPT0gInVuZGVmaW5lZCIpIHsKICAgIHZhciBzdHJpbmcgPSAobmV3
IGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICBJc051bGxPckVtcHR5
OiBmdW5jdGlvbiAodGhlU3RyaW5nKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gKHR5cGVvZiAo
dGhlU3RyaW5nKSA9PSAidW5kZWZpbmVkIiB8fCAhdGhlU3RyaW5nIHx8IHRoZVN0cmluZy5sZW5n
dGggPT0gMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KCkpOwp9IGVsc2UgewogICAg
c3RyaW5nLklzTnVsbE9yRW1wdHkgPSBmdW5jdGlvbiAodGhlU3RyaW5nKSB7CiAgICAgICAgcmV0
dXJuICh0eXBlb2YgKHRoZVN0cmluZykgPT0gInVuZGVmaW5lZCIgfHwgIXRoZVN0cmluZyB8fCB0
aGVTdHJpbmcubGVuZ3RoID09IDApOwogICAgfQp9ClN0cmluZy5wcm90b3R5cGUuSW5kZXhPZiA9
IGZ1bmN0aW9uICh2YWwpIHsKICAgIHJldHVybiB0aGlzLmluZGV4T2YodmFsKTsKfQpTdHJpbmcu
cHJvdG90eXBlLlN1YnN0cmluZyA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHRoaXMu
c3Vic3RyaW5nKHN0YXJ0KTsKfQp2YXIgSHRtbCA9IG5ldyhmdW5jdGlvbiAoKSB7CiAgICB2YXIg
dGh1bmsgPSB0aGlzOwogICAgdmFyIF9oZWFkbGluZU1vZGVsTGluayA9IGZ1bmN0aW9uICh0ZXh0
LCBvYmplY3QsIG9wdGlvbnMpIHsKICAgICAgICAgICAgdmFyIGFyZWEgPSBvcHRpb25zLmFyZWEg
fHwgb3B0aW9ucy5BcmVhIHx8ICJzdG9yeSI7CiAgICAgICAgICAgIHZhciBjb250cm9sbGVyID0g
b3B0aW9ucy5jb250cm9sbGVyIHx8IG9wdGlvbnMuQ29udHJvbGxlciB8fCAic3RvcnkiOwogICAg
ICAgICAgICB2YXIgYWN0aW9uID0gbnVsbDsKICAgICAgICAgICAgdmFyIGd1aWQgPSBvYmplY3Qu
RG9jR3VpZDsKICAgICAgICAgICAgdmFyIGF0dHIgPSBudWxsOwogICAgICAgICAgICB2YXIgcXVl
cnlTdHJpbmcgPSAiZ3VpZD0iICsgb2JqZWN0LkRvY0d1aWQuVmFsdWU7CiAgICAgICAgICAgIHRl
eHQgPSBvYmplY3QuSGVhZGxpbmVUZXh0OwogICAgICAgICAgICBpZiAob3B0aW9ucyAmJiB0eXBl
b2YgKG9wdGlvbnMuTWF4TGVuZ3RoKSA9PSAibnVtYmVyIikgdGV4dCA9IHRleHQuc3Vic3RyaW5n
KDAsIG9wdGlvbnMuTWF4TGVuZ3RoKTsKICAgICAgICAgICAgaWYgKHR5cGVvZiAob2JqZWN0LkNv
bnRlbnRUeXBlKSA9PSAibnVtYmVyIikgb2JqZWN0LkNvbnRlbnRUeXBlID0gX2dldENvbnRlbnRU
eXBlKG9iamVjdC5Db250ZW50VHlwZSk7CiAgICAgICAgICAgIGlmIChvYmplY3QuQ29udGVudFR5
cGUgPT0gImhlYWRsaW5lIikgewogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAob3B0aW9ucy5M
aW5rRG9jVHlwZTkwKSA9PSAidW5kZWZpbmVkIiB8fCBvcHRpb25zLkxpbmtEb2NUeXBlOTAgPT0g
bnVsbCB8fCBvcHRpb25zLkxpbmtEb2NUeXBlOTAgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAg
ICAgIGlmIChvYmplY3QuSW5zdHJ1bWVudHMgJiYgb2JqZWN0Lkluc3RydW1lbnRzLmxlbmd0aCA+
IDAgJiYgb2JqZWN0Lkluc3RydW1lbnRzWzBdLlRpY2tlcikgewogICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodHlwZW9mIChvcHRpb25zLkxpbmtUaWNrZXJBc0hlYWRsaW5lKSAhPSAidW5kZWZp
bmVkIiAmJiBvcHRpb25zLkxpbmtUaWNrZXJBc0hlYWRsaW5lKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gX2luc3RydW1lbnRNb2RlbExpbmsodGV4dCwgb2JqZWN0Lkluc3Ry
dW1lbnRzWzBdLCB7fSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuICJbIiArIF9pbnN0cnVtZW50TW9kZWxMaW5rKG9iamVjdC5JbnN0cnVt
ZW50c1swXS5UaWNrZXIsIG9iamVjdC5JbnN0cnVtZW50c1swXSwge30pICsgIl0gIiArIHRleHQ7
CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
cmV0dXJuIHRleHQ7CiAgICAgICAgICAgIH0gZWxzZSBpZiAob2JqZWN0LkNvbnRlbnRUeXBlID09
ICJub2ZvbGxvdyIpIHsKICAgICAgICAgICAgICAgIGF0dHIgPSAncmVsPSJub2ZvbGxvdyInOwog
ICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChvYmplY3QuU2VvSGVhZGxpbmVGcmFnbWVudCAm
JiBvYmplY3QuU2VvSGVhZGxpbmVGcmFnbWVudC5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAg
ICBjb250cm9sbGVyID0gbnVsbDsKICAgICAgICAgICAgICAgIGFjdGlvbiA9IG9iamVjdC5TZW9I
ZWFkbGluZUZyYWdtZW50LnN1YnN0cigxKTsKICAgICAgICAgICAgICAgIHF1ZXJ5U3RyaW5nID0g
bnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gdGh1bmsuQWN0aW9uTGluayh0
ZXh0LCBhcmVhLCBjb250cm9sbGVyLCBhY3Rpb24sIHF1ZXJ5U3RyaW5nLCBhdHRyKTsKICAgICAg
ICB9OwogICAgdmFyIF9pbnN0cnVtZW50TW9kZWxMaW5rID0gZnVuY3Rpb24gKHRleHQsIG9iamVj
dCwgb3B0aW9ucykgewogICAgICAgICAgICB2YXIgYXJlYSA9IG9wdGlvbnMuYXJlYSB8fCBvcHRp
b25zLkFyZWEgfHwgImludmVzdGluZyI7CiAgICAgICAgICAgIHZhciBjb250cm9sbGVyID0gb3B0
aW9ucy5jb250cm9sbGVyIHx8IG9wdGlvbnMuQ29udHJvbGxlciB8fCAic3RvY2siOwogICAgICAg
ICAgICBpZiAoIW9iamVjdC5UaWNrZXIpIHJldHVybjsKICAgICAgICAgICAgaWYgKG9iamVjdC5U
eXBlKSBjb250cm9sbGVyID0gX2dldEluc3RydW1lbnRUeXBlKG9iamVjdC5UeXBlKTsKICAgICAg
ICAgICAgaWYgKCF0ZXh0IHx8IHRleHQubGVuZ3RoID09IDApIHRleHQgPSBvYmplY3QuVGlja2Vy
CiAgICAgICAgICAgIHZhciBhcmVhID0gImludmVzdGluZyI7CiAgICAgICAgICAgIHZhciBhY3Rp
b24gPSBvYmplY3QuVGlja2VyICsgIi9vdmVydmlldyI7CiAgICAgICAgICAgIHZhciBxdWVyeVN0
cmluZyA9ICIiOwogICAgICAgICAgICBpZiAob2JqZWN0LkNvdW50cnlDb2RlICYmIG9iamVjdC5D
b3VudHJ5Q29kZS50b0xvd2VyQ2FzZSgpICE9ICJ1cyIpIHF1ZXJ5U3RyaW5nID0gImNvdW50cnlj
b2RlPSIgKyBvYmplY3QuQ291bnRyeUNvZGU7CiAgICAgICAgICAgIHJldHVybiB0aHVuay5BY3Rp
b25MaW5rKHRleHQsIGFyZWEsIGNvbnRyb2xsZXIsIGFjdGlvbiwgcXVlcnlTdHJpbmcsIG51bGwp
OwogICAgICAgIH07CiAgICB2YXIgX2dldENvbnRlbnRUeXBlID0gZnVuY3Rpb24gKHR5cGUpIHsK
ICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAg
ICAgICAgIHJldHVybiAic3RvcnkiOwogICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAg
ICByZXR1cm4gImF1ZGlvIjsKICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAgICAgcmV0
dXJuICJ2aWRlbyI7CiAgICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgICAgIHJldHVybiAi
bm9mb2xsb3ciOwogICAgICAgICAgICBjYXNlIDU6CiAgICAgICAgICAgICAgICByZXR1cm4gImhl
YWRsaW5lIjsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gInN0b3J5IjsKICAgICAg
ICB9OwogICAgdmFyIF9nZXRJbnN0cnVtZW50VHlwZSA9IGZ1bmN0aW9uIChpbnN0cnVtZW50VHlw
ZSkgewogICAgICAgICAgICBpZiAodHlwZW9mIChpbnN0cnVtZW50VHlwZSkgPT0gIm51bWJlciIp
IHsKICAgICAgICAgICAgICAgIHN3aXRjaCAoaW5zdHJ1bWVudFR5cGUpIHsKICAgICAgICAgICAg
ICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gImJvbmQiOwogICAgICAgICAg
ICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgICAgIHJldHVybiAiY3VycmVuY3kiOwogICAg
ICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAg
ICAgY2FzZSA0OgogICAgICAgICAgICAgICAgY2FzZSA3OgogICAgICAgICAgICAgICAgICAgIHJl
dHVybiAiZnVuZCI7CiAgICAgICAgICAgICAgICBjYXNlIDU6CiAgICAgICAgICAgICAgICAgICAg
cmV0dXJuICJmdXR1cmUiOwogICAgICAgICAgICAgICAgY2FzZSA2OgogICAgICAgICAgICAgICAg
ICAgIHJldHVybiAiaW5kZXgiOwogICAgICAgICAgICAgICAgY2FzZSA4OgogICAgICAgICAgICAg
ICAgY2FzZSA5OgogICAgICAgICAgICAgICAgY2FzZSAxMDoKICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gIm9wdGlvbiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSBpZiAo
aW5zdHJ1bWVudFR5cGUgPT0gImJvbmQiIHx8IGluc3RydW1lbnRUeXBlID09ICJjdXJyZW5jeSIg
fHwgaW5zdHJ1bWVudFR5cGUgPT0gImZ1bmQiIHx8IGluc3RydW1lbnRUeXBlID09ICJmdXR1cmUi
IHx8IGluc3RydW1lbnRUeXBlID09ICJpbmRleCIgfHwgaW5zdHJ1bWVudFR5cGUgPT0gIm9wdGlv
biIpIHJldHVybiBpbnN0cnVtZW50VHlwZTsKICAgICAgICAgICAgcmV0dXJuICJzdG9jayI7CiAg
ICAgICAgfQogICAgdGhpcy5Nb2RlbExpbmsgPSBmdW5jdGlvbiAodGV4dE9yT2JqZWN0LCBvYmpl
Y3RPck9wdGlvbnMsIG9wdGlvbnMpIHsKICAgICAgICB2YXIgdGV4dCA9IHRleHRPck9iamVjdDsK
ICAgICAgICB2YXIgb2JqZWN0ID0gb2JqZWN0T3JPcHRpb25zOwogICAgICAgIGlmICh0eXBlb2Yg
KHRleHRPck9iamVjdCkgIT0gInN0cmluZyIpIHsKICAgICAgICAgICAgdGV4dCA9ICIiOwogICAg
ICAgICAgICBvYmplY3QgPSB0ZXh0T3JPYmplY3Q7CiAgICAgICAgICAgIG9wdGlvbnMgPSBvYmpl
Y3RPck9wdGlvbnM7CiAgICAgICAgfQogICAgICAgIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9
OwogICAgICAgIGlmIChvYmplY3QuSGVhZGxpbmVUZXh0KSB7CiAgICAgICAgICAgIHJldHVybiBf
aGVhZGxpbmVNb2RlbExpbmsodGV4dCwgb2JqZWN0LCBvcHRpb25zKTsKICAgICAgICB9IGVsc2Ug
aWYgKG9iamVjdC5UaWNrZXIpIHsKICAgICAgICAgICAgcmV0dXJuIF9pbnN0cnVtZW50TW9kZWxM
aW5rKHRleHQsIG9iamVjdCwgb3B0aW9ucyk7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuQWN0
aW9uTGluayA9IGZ1bmN0aW9uICh0ZXh0LCBhcmVhLCBjb250cm9sbGVyLCBhY3Rpb24sIHF1ZXJ5
U3RyaW5nLCBhdHRyKSB7CiAgICAgICAgdmFyIGxpbmsgPSAnPGEgJyArIChhdHRyID8gYXR0ciA6
ICcnKSArICcgaHJlZj0iJyArIE1hcmtldFdhdGNoLmdldEJhc2VVcmwoKSArICcvJyArIGFyZWEg
KyAoY29udHJvbGxlciA/ICcvJyArIGNvbnRyb2xsZXIgOiAnJykgKyAoYWN0aW9uID8gJy8nICsg
YWN0aW9uIDogJycpICsgKHF1ZXJ5U3RyaW5nID8gJz8nICsgcXVlcnlTdHJpbmcgOiAnJykgKyAn
Ij4nICsgdGV4dCArICc8L2E+JzsKICAgICAgICByZXR1cm4gbGluazsKICAgIH07CiAgICB0aGlz
LkdldFNob3J0RGF0ZVN0YW1wTWFya3VwID0gZnVuY3Rpb24gKHV0Y1RpbWVzdGFtcCwgb2Zmc2V0
KSB7CiAgICAgICAgaWYgKHR5cGVvZiAoQmx1ZUdyYXNzKSAhPSAidW5kZWZpbmVkIiAmJiBCbHVl
R3Jhc3MuVXRpbGl0eSkgewogICAgICAgICAgICB2YXIgZGF0ZSA9IEJsdWVHcmFzcy5VdGlsaXR5
LmNvbnZlcnRUb0V4Y2hhbmdlVGltZSh1dGNUaW1lc3RhbXAsIG9mZnNldCk7CiAgICAgICAgICAg
IHZhciBub3cgPSBuZXcgRGF0ZSgpOwogICAgICAgICAgICB2YXIgZGlmZiA9IG5vdy5nZXRUaW1l
KCkgLSBkYXRlLmdldFRpbWUoKTsKICAgICAgICAgICAgaWYgKGRpZmYgPiA4NjQwMDAwMCB8fCBu
b3cuZ2V0VVRDRGF0ZSgpICE9IGRhdGUuZ2V0VVRDRGF0ZSgpKSByZXR1cm4gIjxzcGFuPiIgKyBk
YXRlLmRhdGVGb3JtYXQoIm0vZCIpICsgIjwvc3Bhbj4iOwogICAgICAgICAgICB2YXIgZm9ybWF0
dGVkID0gZGF0ZS5kYXRlRm9ybWF0KCJnOmlhIik7CiAgICAgICAgICAgIHJldHVybiAiPHNwYW4+
IiArIGZvcm1hdHRlZC5zdWJzdHJpbmcoMCwgZm9ybWF0dGVkLmxlbmd0aCAtIDEpICsgIjwvc3Bh
bj4iOwogICAgICAgIH0KICAgICAgICByZXR1cm4gIjxzcGFuPiZuYnNwOzwvc3Bhbj4iOwogICAg
fTsKICAgIHRoaXMuR2V0VGltZUFnb01hcmt1cCA9IGZ1bmN0aW9uICh1dGNUaW1lc3RhbXAsIG9m
ZnNldCkgewogICAgICAgIGlmICh0eXBlb2YgKEJsdWVHcmFzcykgIT0gInVuZGVmaW5lZCIgJiYg
Qmx1ZUdyYXNzLlV0aWxpdHkpIHsKICAgICAgICAgICAgdmFyIGRhdGUgPSBCbHVlR3Jhc3MuVXRp
bGl0eS5jb252ZXJ0VG9FeGNoYW5nZVRpbWUodXRjVGltZXN0YW1wLCBvZmZzZXQpOwogICAgICAg
ICAgICB2YXIgbm93ID0gbmV3IERhdGUoKTsKICAgICAgICAgICAgdmFyIG5vd1V0YyA9IG5ldyBE
YXRlKCkuZ2V0VGltZSgpOwogICAgICAgICAgICB2YXIgZWFzdGVybk5vdyA9IEJsdWVHcmFzcy5V
dGlsaXR5LmNvbnZlcnRUb0V4Y2hhbmdlVGltZShub3dVdGMgKyAiIiwgb2Zmc2V0KTsKICAgICAg
ICAgICAgdmFyIGRpZmYgPSBlYXN0ZXJuTm93LmdldFRpbWUoKSAtIGRhdGUuZ2V0VGltZSgpOwog
ICAgICAgICAgICB2YXIgZm9ybWF0dGVkID0gZGF0ZS5kYXRlRm9ybWF0KCJnOmlhIFRvZGF5Iik7
CiAgICAgICAgICAgIGlmIChkaWZmID4gODY0MDAwMDAgfHwgbm93LmdldFVUQ0RhdGUoKSAhPSBk
YXRlLmdldFVUQ0RhdGUoKSkgcmV0dXJuICI8c3Bhbj4iICsgZGF0ZS5kYXRlRm9ybWF0KCJnOmlh
IG4vZC95IikgKyAiPC9zcGFuPiI7CiAgICAgICAgICAgIGVsc2UgaWYgKGRpZmYgPD0gMzYwMDAw
MCkgewogICAgICAgICAgICAgICAgdmFyIGNlaWxpbmcgPSBNYXRoLmNlaWwoZGlmZiAvIDYwMDAw
KTsKICAgICAgICAgICAgICAgIGlmIChjZWlsaW5nID09IDApIGZvcm1hdHRlZCA9ICI8IDEgbWlu
IGFnbyIKICAgICAgICAgICAgICAgIGVsc2UgZm9ybWF0dGVkID0gY2VpbGluZyArICIgbWluIGFn
byI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICI8c3BhbiBjbGFzcz0ndGltZUFn
byc+PHNwYW4+IiArIGZvcm1hdHRlZCArICI8L3NwYW4+IiArICI8c3BhbiBjbGFzcz0naW52aXNp
YmxlJz4iICsgZGF0ZS5kYXRlRm9ybWF0KCJnOmlhIG4vZC95IikgKyAiPC9zcGFuPjwvc3Bhbj4i
OwogICAgICAgIH0KICAgICAgICByZXR1cm4gIjxzcGFuPiZuYnNwOzwvc3Bhbj4iOwogICAgfTsK
ICAgIHRoaXMuR2V0U2hvcnRUaW1lQWdvTWFya3VwID0gZnVuY3Rpb24gKHV0Y1RpbWVzdGFtcCwg
b2Zmc2V0KSB7CiAgICAgICAgaWYgKHR5cGVvZiAoQmx1ZUdyYXNzKSAhPSAidW5kZWZpbmVkIiAm
JiBCbHVlR3Jhc3MuVXRpbGl0eSkgewogICAgICAgICAgICB2YXIgZGF0ZSA9IEJsdWVHcmFzcy5V
dGlsaXR5LmNvbnZlcnRUb0V4Y2hhbmdlVGltZSh1dGNUaW1lc3RhbXAsIG9mZnNldCk7CiAgICAg
ICAgICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpOwogICAgICAgICAgICB2YXIgbm93VXRjID0gbmV3
IERhdGUoKS5nZXRUaW1lKCk7CiAgICAgICAgICAgIHZhciBlYXN0ZXJuTm93ID0gQmx1ZUdyYXNz
LlV0aWxpdHkuY29udmVydFRvRXhjaGFuZ2VUaW1lKG5vd1V0YyArICIiLCBvZmZzZXQpOwogICAg
ICAgICAgICB2YXIgZGlmZiA9IGVhc3Rlcm5Ob3cuZ2V0VGltZSgpIC0gZGF0ZS5nZXRUaW1lKCk7
CiAgICAgICAgICAgIHZhciBmb3JtYXR0ZWQgPSBkYXRlLmRhdGVGb3JtYXQoImc6aWEiKTsKICAg
ICAgICAgICAgaWYgKGVhc3Rlcm5Ob3cuZ2V0RGF5KCkgIT0gZGF0ZS5nZXREYXkoKSkgcmV0dXJu
ICI8c3Bhbj4iICsgZGF0ZS5kYXRlRm9ybWF0KCJuL2QveSIpICsgIjwvc3Bhbj4iOwogICAgICAg
ICAgICBlbHNlIGlmIChkaWZmIDw9IDM2MDAwMDApIHsKICAgICAgICAgICAgICAgIHZhciBjZWls
aW5nID0gTWF0aC5jZWlsKGRpZmYgLyA2MDAwMCk7CiAgICAgICAgICAgICAgICBpZiAoY2VpbGlu
ZyA9PSAwKSBmb3JtYXR0ZWQgPSAiPCAxIG1pbiBhZ28iCiAgICAgICAgICAgICAgICBlbHNlIGZv
cm1hdHRlZCA9IGNlaWxpbmcgKyAiIG1pbiBhZ28iOwogICAgICAgICAgICB9CiAgICAgICAgICAg
IHJldHVybiAiPHNwYW4gY2xhc3M9J3RpbWVBZ28gc2hvcnQnPjxzcGFuPiIgKyBmb3JtYXR0ZWQg
KyAiPC9zcGFuPiIgKyAiPHNwYW4gY2xhc3M9J2ludmlzaWJsZSc+IiArIGRhdGUuZGF0ZUZvcm1h
dCgiZzppYSBuL2QveSIpICsgIjwvc3Bhbj48L3NwYW4+IjsKICAgICAgICB9CiAgICAgICAgcmV0
dXJuICI8c3Bhbj4mbmJzcDs8L3NwYW4+IjsKICAgIH07Cn0pKCk7CmRvam8ucHJvdmlkZSgiZGou
bW9kdWxlLm1hcmtldGRhdGEudGh1bmRlcmJhbGwiKTsKdmFyIFRodW5kZXJiYWxsID0gewogICAg
Q2hhcnRTY2FsaW5nVjI6IHsKICAgICAgICBDYWxjdWxhdGVEZWx0YTI6IGZ1bmN0aW9uIChwcmVm
ZXJyZWREaXZpc2lvbkNvdW50LCBwcmVmZXJNb3JlRGl2aXNpb25zLCBhbGxvd05vR2FwLCBkTWlu
LCBkTWF4LCBkU3RhcnQsIGRGaW5pc2gpIHsKICAgICAgICAgICAgaWYgKCFkTWluKSB7CiAgICAg
ICAgICAgICAgICBkTWluID0gMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoIWRNYXgp
IHsKICAgICAgICAgICAgICAgIGRNYXggPSAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlm
IChwcmVmZXJyZWREaXZpc2lvbkNvdW50IDw9IDEgfHwgcHJlZmVycmVkRGl2aXNpb25Db3VudCA9
PSBudWxsIHx8IHByZWZlcnJlZERpdmlzaW9uQ291bnQgPT0gdW5kZWZpbmVkKSB7CiAgICAgICAg
ICAgICAgICBkU3RhcnQudmFsdWUgPSBkTWluOwogICAgICAgICAgICAgICAgZEZpbmlzaC52YWx1
ZSA9IGRNYXg7CiAgICAgICAgICAgICAgICByZXR1cm4gZE1heCAtIGRNaW47CiAgICAgICAgICAg
IH0KICAgICAgICAgICAgaWYgKGRNYXggPCBkTWluKSB7CiAgICAgICAgICAgICAgICB2YXIgVG1w
ID0gZE1pbjsKICAgICAgICAgICAgICAgIGRNaW4gPSBkTWF4OwogICAgICAgICAgICAgICAgZE1h
eCA9IFRtcDsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgZE1heCA9IE1hdGguYWJzKGRN
YXgpOwogICAgICAgICAgICBpZiAoZE1heCA9PSAwKSBkTWF4ID0gMTsKICAgICAgICAgICAgdmFy
IFRvbCA9IDUuMGUtNjsKICAgICAgICAgICAgaWYgKChkTWF4IC0gZE1pbikgLyBkTWF4IDw9IFRv
bCkgewogICAgICAgICAgICAgICAgaWYgKGRNYXggPCAwKSBkTWF4ID0gMDsKICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKGRNYXggPT0gMCkgZE1heCA9IDE7CiAgICAgICAgICAgICAgICBlbHNlIGRN
aW4gPSAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBkR2VhcnMgPSBbMTAsIDUsIDIu
NSwgMiwgMV07CiAgICAgICAgICAgIHZhciBkQmVzdERpZmZlcmVuY2UgPSAtMTsKICAgICAgICAg
ICAgdmFyIGRCZXN0TGluZUNvdW50ID0gLTE7CiAgICAgICAgICAgIHZhciBkQmVzdE1heCA9IDA7
CiAgICAgICAgICAgIHZhciBkQmVzdE1pbiA9IDA7CiAgICAgICAgICAgIHZhciBkQmVzdERlbHRh
ID0gMDsKICAgICAgICAgICAgdmFyIGRSYW5nZSA9IGRNYXggLSBkTWluOwogICAgICAgICAgICB2
YXIgZFJhbmdlRGl2aXNpb24gPSBkUmFuZ2UgLyBwcmVmZXJyZWREaXZpc2lvbkNvdW50OwogICAg
ICAgICAgICBNYXRoLmxvZzEwID0gZnVuY3Rpb24gKG4pIHsKICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLmxvZyhuKSAvIHRoaXMubG9nKDEwKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB2
YXIgZERpdmlzaW9uTWFnbml0dWRlID0gTWF0aC5sb2cxMChkUmFuZ2VEaXZpc2lvbik7CiAgICAg
ICAgICAgIHZhciBuRGl2aXNpb25NdWx0aXBsaWVyID0gcGFyc2VJbnQoTWF0aC5mbG9vcihkRGl2
aXNpb25NYWduaXR1ZGUpKTsKICAgICAgICAgICAgZm9yICh2YXIgbk1hZ0FkZGl0aXZlID0gMTsg
bk1hZ0FkZGl0aXZlID4gLTI7IG5NYWdBZGRpdGl2ZS0tKSB7CiAgICAgICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGRHZWFycy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAg
IHZhciBkVG1wRGVsdGEgPSBkR2VhcnNbaV0gKiBNYXRoLnBvdygxMCwgbkRpdmlzaW9uTXVsdGlw
bGllciArIG5NYWdBZGRpdGl2ZSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGRUbXBNYXggPSBU
aHVuZGVyYmFsbC5DaGFydFNjYWxpbmdWMi5NYXRoLlJvdW5kVXBUb011bHRpcGxlKGRNYXgsIGRU
bXBEZWx0YSwgYWxsb3dOb0dhcCk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGRUbXBNaW4gPSBU
aHVuZGVyYmFsbC5DaGFydFNjYWxpbmdWMi5NYXRoLlJvdW5kRG93blRvTXVsdGlwbGUoZE1pbiwg
ZFRtcERlbHRhLCBhbGxvd05vR2FwKTsKICAgICAgICAgICAgICAgICAgICB2YXIgZExpbmVDb3Vu
dCA9IE1hdGgucm91bmQoKGRUbXBNYXggLSBkVG1wTWluKSAvIGRUbXBEZWx0YSkgKyAxOwogICAg
ICAgICAgICAgICAgICAgIHZhciBkRGlmZiA9IE1hdGguYWJzKHByZWZlcnJlZERpdmlzaW9uQ291
bnQgLSBkTGluZUNvdW50KTsKICAgICAgICAgICAgICAgICAgICBpZiAoKGRCZXN0RGlmZmVyZW5j
ZSA9PSAtMSkgfHwgKGREaWZmIDw9IGRCZXN0RGlmZmVyZW5jZSkpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHByZWZlck1vcmVEaXZpc2lvbnMgfHwgKGRMaW5lQ291bnQgPD0gcHJlZmVy
cmVkRGl2aXNpb25Db3VudCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRCZXN0RGlm
ZmVyZW5jZSA9IGREaWZmOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZEJlc3RMaW5lQ291
bnQgPSBkTGluZUNvdW50OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZEJlc3RNYXggPSBk
VG1wTWF4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZEJlc3RNaW4gPSBkVG1wTWluOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZEJlc3REZWx0YSA9IGRUbXBEZWx0YTsKICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgfQogICAgICAgICAgICBkRmluaXNoLnZhbHVlID0gZEJlc3RNYXg7CiAg
ICAgICAgICAgIGRTdGFydC52YWx1ZSA9IGRCZXN0TWluOwogICAgICAgICAgICByZXR1cm4gZEJl
c3REZWx0YTsKICAgICAgICB9LAogICAgICAgIE1hdGg6IHsKICAgICAgICAgICAgUm91bmRVcFRv
TXVsdGlwbGU6IGZ1bmN0aW9uICh2YWwsIG11bHRpcGxlLCBpbmNsdXNpdmUpIHsKICAgICAgICAg
ICAgICAgIHZhciBkUmVtYWluZGVyID0gTWF0aC5hYnModmFsICUgbXVsdGlwbGUpOwogICAgICAg
ICAgICAgICAgaWYgKChkUmVtYWluZGVyID09IDApICYmIGluY2x1c2l2ZSkgcmV0dXJuIHZhbDsK
ICAgICAgICAgICAgICAgIGlmICh2YWwgPiAwKSByZXR1cm4gdmFsICsgKG11bHRpcGxlIC0gZFJl
bWFpbmRlcik7CiAgICAgICAgICAgICAgICBlbHNlIHJldHVybiB2YWwgKyBkUmVtYWluZGVyOwog
ICAgICAgICAgICB9LAogICAgICAgICAgICBSb3VuZERvd25Ub011bHRpcGxlOiBmdW5jdGlvbiAo
dmFsLCBtdWx0aXBsZSwgaW5jbHVzaXZlKSB7CiAgICAgICAgICAgICAgICB2YXIgZFJlbWFpbmRl
ciA9IE1hdGguYWJzKHZhbCAlIG11bHRpcGxlKTsKICAgICAgICAgICAgICAgIGlmICgoZFJlbWFp
bmRlciA9PSAwKSAmJiBpbmNsdXNpdmUpIHJldHVybiB2YWw7CiAgICAgICAgICAgICAgICBpZiAo
dmFsID4gMCkgcmV0dXJuIHZhbCAtIGRSZW1haW5kZXI7CiAgICAgICAgICAgICAgICBlbHNlIHJl
dHVybiB2YWwgLSAobXVsdGlwbGUgLSBkUmVtYWluZGVyKTsKICAgICAgICAgICAgfQogICAgICAg
IH0KICAgIH0sCiAgICBVdGlsaXRpZXM6IHsKICAgICAgICBjYW52YXNfY29tcGF0aWJsZTogZmFs
c2UsCiAgICAgICAgUmVxdWVzdGVyczogW10sCiAgICAgICAgY2hlY2tfY2FudmFzOiBmdW5jdGlv
biAoKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhc19jb21w
YXRpYmxlID0gISEgKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLmdldENvbnRleHQo
JzJkJykpOwogICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICB0aGlzLmNh
bnZhc19jb21wYXRpYmxlID0gISEgKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLmdl
dENvbnRleHQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhbnZhc19j
b21wYXRpYmxlOwogICAgICAgIH0sCiAgICAgICAgRGF0YVVwZGF0ZXI6IGZ1bmN0aW9uIChkYXRh
KSB7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgVGh1bmRlcmJhbGwuVXRpbGl0aWVz
LlJlcXVlc3RlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIGlmIChUaHVuZGVyYmFs
bC5VdGlsaXRpZXMuUmVxdWVzdGVyc1tpXS5yZXF1ZXN0SWQgPT0gZGF0YS5yZXF1ZXN0SWQpIHsK
ICAgICAgICAgICAgICAgICAgICBUaHVuZGVyYmFsbC5VdGlsaXRpZXMuUmVxdWVzdGVyc1tpXS5k
YXRhID0gZGF0YTsKICAgICAgICAgICAgICAgICAgICBUaHVuZGVyYmFsbC5VdGlsaXRpZXMuUmVx
dWVzdGVyc1tpXS5fZGlkTG9hZCgpOwogICAgICAgICAgICAgICAgICAgIFRodW5kZXJiYWxsLlV0
aWxpdGllcy5SZXF1ZXN0ZXJzLnNwbGljZShpLCAxKTsKICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgfQogICAgICAgIH0sCiAgICAgICAgR2V0RGF0YTogZnVuY3Rpb24gKGNoYXJ0KSB7CiAg
ICAgICAgICAgIHZhciByZXF1ZXN0T2JqZWN0ID0gY2hhcnQuYnVpbGRSZXF1ZXN0KCk7CiAgICAg
ICAgICAgICQuYWpheCh7CiAgICAgICAgICAgICAgICB0eXBlOiAiUE9TVCIsCiAgICAgICAgICAg
ICAgICB1cmw6IGNoYXJ0LnVybCwKICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAianNvbiIsCiAg
ICAgICAgICAgICAgICBkYXRhOiByZXF1ZXN0T2JqZWN0LAogICAgICAgICAgICAgICAgc3VjY2Vz
czogZnVuY3Rpb24gKGRhdGEpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSAhPSBudWxs
ICYmIGRhdGEubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhcnRk
YXRhID0gZGF0YVswXS5WYWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnRkYXRhLnJl
cXVlc3RJZCA9IGNoYXJ0LnJlcXVlc3RJZDsKICAgICAgICAgICAgICAgICAgICAgICAgVGh1bmRl
cmJhbGwuVXRpbGl0aWVzLkRhdGFVcGRhdGVyKGNoYXJ0ZGF0YSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGEgPSBudWxsOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHJlcXVlc3RPYmplY3QgPSBudWxsOwogICAg
ICAgIH0sCiAgICAgICAgRm9ybWF0RGF0ZTogZnVuY3Rpb24gKGRhdGVTdHJpbmcpIHsKICAgICAg
ICAgICAgaWYgKHR5cGVvZiBkYXRlU3RyaW5nID09ICJzdHJpbmciKSB7CiAgICAgICAgICAgICAg
ICB2YXIgY29udmVydGVkID0gMDsKICAgICAgICAgICAgICAgIGlmIChkYXRlU3RyaW5nLmluZGV4
T2YoIi0iKSA+PSAwIHx8IGRhdGVTdHJpbmcuaW5kZXhPZigiKyIpID49IDApIHsKICAgICAgICAg
ICAgICAgICAgICB2YXIgX3VzZXJPZmZzZXQgPSBuZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0
KCkgLyA2MDsKICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcCA9IGRhdGVTdHJpbmcuc3Vic3Ry
aW5nKGRhdGVTdHJpbmcubGVuZ3RoIC0gNywgZGF0ZVN0cmluZy5sZW5ndGggLSAyKTsKICAgICAg
ICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gcGFyc2VJbnQodGVtcC5zdWJzdHJpbmcoMikpIC8g
MTAwOwogICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wLnN1YnN0cmluZygwLCAxKSA9PSAiLSIp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gLW9mZnNldDsKICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgY29udmVydGVkID0gcGFyc2VJbnQoZGF0ZVN0
cmluZy5zdWJzdHJpbmcoNiwgZGF0ZVN0cmluZy5sZW5ndGggLSA3KSkgKyAoKF91c2VyT2Zmc2V0
ICsgb2Zmc2V0KSAqIDM2MDAwMDApOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICBjb252ZXJ0ZWQgPSBwYXJzZUludChkYXRlU3RyaW5nLnN1YnN0cmluZyg2LCBk
YXRlU3RyaW5nLmxlbmd0aCAtIDIpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
IHZhciBkYXRlVGltZSA9IG5ldyBEYXRlKGNvbnZlcnRlZCk7CiAgICAgICAgICAgICAgICByZXR1
cm4gZGF0ZVRpbWU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4g
ZGF0ZVN0cmluZzsKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgZHJhd1hheGlzTGlu
ZXM6IGZ1bmN0aW9uIChjaGFydCkgewogICAgICAgICAgICBpZiAoY2hhcnQuc3R5bGUudmVydGlj
YWxHcmlkTGluZVN0eWxlKSB7CiAgICAgICAgICAgICAgICB2YXIgY3R4ID0gY2hhcnQuZHJhd2lu
Z0NvbnRleHQ7CiAgICAgICAgICAgICAgICBjaGFydC5fYnVtcCA9IHRydWU7CiAgICAgICAgICAg
ICAgICBjdHguYmVnaW5QYXRoKCk7CiAgICAgICAgICAgICAgICB2YXIgdGlja3MgPSBjaGFydC5f
dGltZUxpbmVzOwogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aWNrcy5sZW5n
dGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHZhciB4ID0gdGlja3NbaV07CiAgICAgICAg
ICAgICAgICAgICAgY3R4Lm1vdmVUbyh4ICsgMC41LCBjaGFydC5oZWlnaHQpOwogICAgICAgICAg
ICAgICAgICAgIGN0eC5saW5lVG8oeCArIDAuNSwgMCk7CiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBjaGFydC5zdHlsZS52ZXJ0aWNhbEdyaWRMaW5l
U3R5bGU7CiAgICAgICAgICAgICAgICBjdHguc3Ryb2tlKCk7CiAgICAgICAgICAgIH0KICAgICAg
ICAgICAgaWYgKGNoYXJ0LnN0eWxlLnZlcnRpY2FsR3JpZExpbmVTdHlsZV9PcGFxdWUpIHsKICAg
ICAgICAgICAgICAgIHZhciBjdHggPSBjaGFydC5kcmF3aW5nQ29udGV4dDsKICAgICAgICAgICAg
ICAgIGNoYXJ0Ll9idW1wID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTsK
ICAgICAgICAgICAgICAgIHZhciB0aWNrcyA9IGNoYXJ0Ll9vcGFxdWVUaW1lTGluZXM7CiAgICAg
ICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRpY2tzLmxlbmd0aDsgaSsrKSB7CiAgICAg
ICAgICAgICAgICAgICAgdmFyIHggPSB0aWNrc1tpXTsKICAgICAgICAgICAgICAgICAgICBjdHgu
bW92ZVRvKHggKyAwLjUsIGNoYXJ0LmhlaWdodCk7CiAgICAgICAgICAgICAgICAgICAgY3R4Lmxp
bmVUbyh4ICsgMC41LCAwKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGN0eC5z
dHJva2VTdHlsZSA9IGNoYXJ0LnN0eWxlLnZlcnRpY2FsR3JpZExpbmVTdHlsZV9PcGFxdWU7CiAg
ICAgICAgICAgICAgICBjdHguc3Ryb2tlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY2hh
cnQuX3RpbWVMaW5lcyA9IFtdOwogICAgICAgICAgICBjaGFydC5fb3BhcXVlVGltZUxpbmVzID0g
W107CiAgICAgICAgfSwKICAgICAgICBhZGRYQXhpc0xhYmVsczogZnVuY3Rpb24gKGNoYXJ0KSB7
CiAgICAgICAgICAgIHZhciBsYWJlbHNUb0NyZWF0ZSA9IGNoYXJ0Ll94QXhpc0xhYmVsczsKICAg
ICAgICAgICAgdmFyIHNlbGYgPSBjaGFydDsKICAgICAgICAgICAgdmFyIHRhcmdldCA9IHNlbGYu
dGFyZ2V0U2VsZWN0b3I7CiAgICAgICAgICAgIHZhciBUb3RhbEhlaWdodCA9IHNlbGYuaGVpZ2h0
OwogICAgICAgICAgICB2YXIgWEF4aXNDb250ZW50ID0gIiI7CiAgICAgICAgICAgIHZhciBlbG1X
aWR0aCA9IDMwOwogICAgICAgICAgICB2YXIgZWxtV2lkdGhDZW50ZXI7CiAgICAgICAgICAgIGlm
ICghc2VsZi5zdHlsZS54QXhpc0xhYmVsUGFkZGluZykgewogICAgICAgICAgICAgICAgc2VsZi5z
dHlsZS54QXhpc0xhYmVsUGFkZGluZyA9IDIwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIFhB
eGlzQ29udGVudCA9ICI8ZGl2IHN0eWxlPSdwb3NpdGlvbjpyZWxhdGl2ZSB3aWR0aDoiICsgc2Vs
Zi53aWR0aCArICJweDsnPiI7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGFiZWxz
VG9DcmVhdGUubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIGVsbVdpZHRoQ2VudGVyID0g
bGFiZWxzVG9DcmVhdGVbaV0ueCAtIChlbG1XaWR0aCAvIDIpOwogICAgICAgICAgICAgICAgWEF4
aXNDb250ZW50ID0gWEF4aXNDb250ZW50ICsgIjxkaXYgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVy
OyBwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDoiICsgVG90YWxIZWlnaHQgKyAicHg7bGVmdDoiICsg
ZWxtV2lkdGhDZW50ZXIgKyAicHg7d2lkdGg6IiArIGVsbVdpZHRoICsgInB4JyBjbGFzcz0neFZh
bHVlTGJsJz4iICsgbGFiZWxzVG9DcmVhdGVbaV0uZWxlbWVudCArICI8L2Rpdj4iOwogICAgICAg
ICAgICB9CiAgICAgICAgICAgIFhBeGlzQ29udGVudCA9IFhBeGlzQ29udGVudCArICI8L2Rpdj4i
OwogICAgICAgICAgICBfZGpsLnBsYWNlKFhBeGlzQ29udGVudCwgdGFyZ2V0KTsKICAgICAgICB9
LAogICAgICAgIGFkZFRpY2s6IGZ1bmN0aW9uIChEYXRhLCBTeW1ib2wsIFRpbWVzdGFtcCwgUHJp
Y2UsIE9mZnNldCkgewogICAgICAgICAgICB2YXIgU2Vzc2lvbnMgPSBUaHVuZGVyYmFsbC5VdGls
aXRpZXMuX2dldFNlc3Npb25CeVRpY2tlcihEYXRhLCBTeW1ib2wpOwogICAgICAgICAgICBpZiAo
U2Vzc2lvbnMgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgdmFyIHRpbWVzdGFtcCA9IEJsdWVH
cmFzcy5VdGlsaXR5LmNvbnZlcnRUb0V4Y2hhbmdlVGltZShUaW1lc3RhbXAsIE9mZnNldCk7CiAg
ICAgICAgICAgICAgICB2YXIgd2hlcmUgPSBUaHVuZGVyYmFsbC5VdGlsaXRpZXMuX2ZpbmRYU2Vz
c2lvbihTZXNzaW9ucywgdGltZXN0YW1wLCBEYXRhLkJhckZhY3Rvcik7CiAgICAgICAgICAgICAg
ICBpZiAod2hlcmUgJiYgd2hlcmUueCkgewogICAgICAgICAgICAgICAgICAgIHdoZXJlLlNlc3Np
b24uVHJhZGVzW3doZXJlLnhdID0gUHJpY2U7CiAgICAgICAgICAgICAgICAgICAgaWYgKHdoZXJl
LlNlc3Npb24uVHJhZGVzLmxlbmd0aCAtIDIgPT0gd2hlcmUueCkgewogICAgICAgICAgICAgICAg
ICAgICAgICB3aGVyZS5TZXNzaW9uLlRyYWRlc1t3aGVyZS54ICsgMV0gPSBudWxsOwogICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAod2hlcmUuU2Vzc2lvbi5Mb3cg
JiYgd2hlcmUuU2Vzc2lvbi5Mb3cuUHJpY2UgPiBQcmljZSkgewogICAgICAgICAgICAgICAgICAg
ICAgICB3aGVyZS5TZXNzaW9uLkxvdy5QcmljZSA9IFByaWNlOwogICAgICAgICAgICAgICAgICAg
ICAgICB3aGVyZS5TZXNzaW9uLkxvdy5JbmRleCA9IHdoZXJlLng7CiAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgIGlmICh3aGVyZS5TZXNzaW9uLkhpZ2ggJiYgd2hlcmUu
U2Vzc2lvbi5IaWdoLlByaWNlIDwgUHJpY2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgd2hl
cmUuU2Vzc2lvbi5IaWdoLlByaWNlID0gUHJpY2U7CiAgICAgICAgICAgICAgICAgICAgICAgIHdo
ZXJlLlNlc3Npb24uSGlnaC5JbmRleCA9IHdoZXJlLng7CiAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgIHJldHVybiB3aGVyZTsKICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgfQogICAgICAgICAgICByZXR1cm4gd2hlcmU7CiAgICAgICAgfSwKICAgICAgICBfZmlu
ZFhTZXNzaW9uOiBmdW5jdGlvbiAoU2Vzc2lvbnMsIFRpbWVzdGFtcCwgQmFyRmFjdG9yKSB7CiAg
ICAgICAgICAgIFRpbWVzdGFtcCA9IG5ldyBEYXRlKFRpbWVzdGFtcCk7CiAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgU2Vzc2lvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAg
IHZhciBTZXNzaW9uID0gU2Vzc2lvbnNbaV07CiAgICAgICAgICAgICAgICB2YXIgdGVuX2RheXMg
PSAxMDAwICogNjAgKiA2MCAqIDI0ICogMTA7CiAgICAgICAgICAgICAgICBpZiAoU2Vzc2lvbi5T
dG9wLmdldFRpbWUoKSAtIFNlc3Npb24uU3RhcnQuZ2V0VGltZSgpIDw9IHRlbl9kYXlzKSB7CiAg
ICAgICAgICAgICAgICAgICAgaWYgKFNlc3Npb24uU3RhcnQgPD0gVGltZXN0YW1wICYmIFRpbWVz
dGFtcCA8PSBTZXNzaW9uLlN0b3ApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHggPSAo
VGltZXN0YW1wLmdldFRpbWUoKSAtIFNlc3Npb24uU3RhcnQuZ2V0VGltZSgpKSAvIEJhckZhY3Rv
cjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHg6IHBhcnNlSW50KHgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Vzc2lv
bjogU2Vzc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhpc3RvcmljYWw6IGZhbHNl
CiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAg
ICAgICAgICAgICAgICB4OiBudWxsLAogICAgICAgICAgICAgICAgICAgICAgICBTZXNzaW9uOiBu
dWxsLAogICAgICAgICAgICAgICAgICAgICAgICBIaXN0b3JpY2FsOiB0cnVlCiAgICAgICAgICAg
ICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBy
ZXR1cm4gewogICAgICAgICAgICAgICAgeDogbnVsbCwKICAgICAgICAgICAgICAgIFNlc3Npb246
IG51bGwsCiAgICAgICAgICAgICAgICBIaXN0b3JpY2FsOiBmYWxzZQogICAgICAgICAgICB9Owog
ICAgICAgIH0sCiAgICAgICAgX2dldFNlc3Npb25CeVRpY2tlcjogZnVuY3Rpb24gKENoYXJ0RGF0
YSwgU3ltYm9sKSB7CiAgICAgICAgICAgIHZhciBzID0gU3ltYm9sLnRvVXBwZXJDYXNlKCk7CiAg
ICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgQ2hhcnREYXRhLkRhdGEubGVuZ3RoOyBpKysp
IHsKICAgICAgICAgICAgICAgIGlmIChDaGFydERhdGEuRGF0YVtpXS5LZXkgPT0gcykgewogICAg
ICAgICAgICAgICAgICAgIHJldHVybiBDaGFydERhdGEuRGF0YVtpXS5WYWx1ZS5TZXNzaW9uczsK
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gbnVsbDsK
ICAgICAgICB9CiAgICB9Cn07CmRvam8ucHJvdmlkZSgiZGoubW9kdWxlLm1hcmtldGRhdGEubWFy
a2V0ZGF0YSIpOwpkb2pvLnJlcXVpcmUoImRqLndpZGdldC5wYW5lbHMuUGFuZWxzRmFjdG9yeSIp
OwppZiAodHlwZW9mIGRqLm1vZHVsZSA9PT0gInVuZGVmaW5lZCIpIHsKICAgIGRqLm1vZHVsZSA9
IHt9Owp9CmlmICh0eXBlb2YgZGoubW9kdWxlLm1hcmtldGRhdGEgPT09ICJ1bmRlZmluZWQiKSB7
CiAgICBkai5tb2R1bGUubWFya2V0ZGF0YSA9IHt9Owp9CnZhciBfZGpsID0gZGoubGFuZzsKdmFy
IF9kanAgPSBkai51dGlsLlBhZ2U7CmRqLm1vZHVsZS5tYXJrZXRkYXRhLm1hcmtldERhdGFNb2R1
bGUgPSB7CiAgICBpbml0OiBmdW5jdGlvbiAoY29uZiwgcGFzc01vZCkgewogICAgICAgIGlmIChf
ZGpsLmlzSUUpIHsKICAgICAgICAgICAgaWYgKCFkb2N1bWVudC5uYW1lc3BhY2VzLmdfdm1sXykg
ewogICAgICAgICAgICAgICAgZG9jdW1lbnQubmFtZXNwYWNlcy5hZGQoJ2dfdm1sXycsICd1cm46
c2NoZW1hcy1taWNyb3NvZnQtY29tOnZtbCcsICcjZGVmYXVsdCNWTUwnKTsKICAgICAgICAgICAg
fQogICAgICAgICAgICBpZiAoIWRvY3VtZW50Lm5hbWVzcGFjZXMuZ19vXykgewogICAgICAgICAg
ICAgICAgZG9jdW1lbnQubmFtZXNwYWNlcy5hZGQoJ2dfb18nLCAndXJuOnNjaGVtYXMtbWljcm9z
b2Z0LWNvbTpvZmZpY2U6b2ZmaWNlJywgJyNkZWZhdWx0I1ZNTCcpOwogICAgICAgICAgICB9CiAg
ICAgICAgfQogICAgICAgIHZhciBzZXRNb2RWYWx1ZSA9ICIiOwogICAgICAgIGlmIChwYXNzTW9k
ID09IHVuZGVmaW5lZCB8fCBwYXNzTW9kID09ICIiKSB7CiAgICAgICAgICAgIHNldE1vZFZhbHVl
ID0gIm1kY19oX2R0YWJuayI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2V0TW9kVmFs
dWUgPSBwYXNzTW9kOwogICAgICAgIH0KICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSB7CiAg
ICAgICAgICAgIG1vZHVsZU5hbWU6ICJtYXJrZXREYXRhTW9kdWxlIiwKICAgICAgICAgICAgZGVm
YXVsdFN5bWJvbHM6IFt7CiAgICAgICAgICAgICAgICB0YWI6ICJteW1hcmtldHMiLAogICAgICAg
ICAgICAgICAgc3ltYm9sczogWyJESkkiLCAiTkNNIiwgIlNQWCIsICJHRE9XIiwgIkZTVCIsICJO
SUtLRSJdCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRhYjogInVzIiwKICAgICAg
ICAgICAgICAgIHN5bWJvbHM6IFsiREpJIiwgIk5DTSIsICJTUFgiLCAiRFdDIiwgIlJVVCIsICJH
RE9XIl0KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdGFiOiAiZXVyb3BlIiwKICAg
ICAgICAgICAgICAgIHN5bWJvbHM6IFsiRlNUIiwgIkRBWDMwIiwgIlBBUyIsICJTWFhQIiwgIkdE
T1ciLCAiREpJIl0KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdGFiOiAiYXNpYSIs
CiAgICAgICAgICAgICAgICBzeW1ib2xzOiBbIkhLUyIsICJOSUtLRSIsICJTSENPTVAiLCAiQlNF
U04iLCAiR0RPVyIsICJESkkiXQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0YWI6
ICJjdXJyZW5jeXJhdGVzIiwKICAgICAgICAgICAgICAgIHN5bWJvbHM6IFsiRVVSIiwgIkpQWSIs
ICJHQlAiLCAiVVNUWU4iXQogICAgICAgICAgICB9XSwKICAgICAgICAgICAgZGVmYXVsdFRhYjog
MSwKICAgICAgICAgICAgcmVmcmVzaE1vZHVsZTogdHJ1ZSwKICAgICAgICAgICAgcmVmcmVzaFJh
dGU6IDYwLAogICAgICAgICAgICBtb2R1bGVDb250YWluZXI6ICJtYXJrZXREYXRhQ29udGFpbmVy
IiwKICAgICAgICAgICAgdGFiczogW10sCiAgICAgICAgICAgIHRhYmxlRGF0YVVSTDogIi9wdWJs
aWMvcmVzb3VyY2VzL2xpdmUvMl8zMDAxX0hQX0pTT04uanMiLAogICAgICAgICAgICBjaGFydERh
dGFVUkw6ICIvaW50ZXJuYWwvbWFya2V0RGF0YS5qc29uIiwKICAgICAgICAgICAgcGVyc29uYWxp
emVkU3ltYm9sc1VSTDogIi9wem51c2Vyc3ZjL3ZpZXcvZ2V0VXNlci9pbmRleGVzL3VzZXJOYW1l
IiwKICAgICAgICAgICAgaW5kZXhMaW5rVVJMOiAiL21kYy9wdWJsaWMvbnBhZ2UvMl8zMDUxLmh0
bWw/bW9kPSIgKyBzZXRNb2RWYWx1ZSArICImc3ltYj0iLAogICAgICAgICAgICBjaGFydENvbnRh
aW5lcjogIm1hcmtldERhdGFDaGFydF8iLAogICAgICAgICAgICBkYXRhQ29udGFpbmVyOiAibWFy
a2V0RGF0YVRhYmxlXyIsCiAgICAgICAgICAgIGNoYXJ0V2lkdGg6IDgwLAogICAgICAgICAgICBj
aGFydEhlaWdodDogOTUsCiAgICAgICAgICAgIGZyZXF1ZW5jeTogIjFtaSIsCiAgICAgICAgICAg
IHRpbWU6ICIxZHkiLAogICAgICAgICAgICBzaG93TXlNYXJrZXRzOiB0cnVlLAogICAgICAgICAg
ICBteU1hcmtldFN5bWJvbHM6IFtdLAogICAgICAgICAgICBzeW1ib2xNYXBwaW5nOiBbewogICAg
ICAgICAgICAgICAgIktleSI6ICJESkkiLAogICAgICAgICAgICAgICAgIm13cyI6ICJJTkRVIiwK
ICAgICAgICAgICAgICAgICJjb3VudHJ5IjogIlVTIgogICAgICAgICAgICB9LCB7CiAgICAgICAg
ICAgICAgICAiS2V5IjogIk5DTSIsCiAgICAgICAgICAgICAgICAibXdzIjogIkNPTVAiLAogICAg
ICAgICAgICAgICAgImNvdW50cnkiOiAiVVMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAg
ICAgICJLZXkiOiAiU1BYIiwKICAgICAgICAgICAgICAgICJtd3MiOiAiU1BYIiwKICAgICAgICAg
ICAgICAgICJjb3VudHJ5IjogIlVTIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAi
S2V5IjogIkdET1ciLAogICAgICAgICAgICAgICAgIm13cyI6ICJHRE9XIiwKICAgICAgICAgICAg
ICAgICJjb3VudHJ5IjogIlVTIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAiS2V5
IjogIlJVVCIsCiAgICAgICAgICAgICAgICAibXdzIjogIlJVVCIsCiAgICAgICAgICAgICAgICAi
Y291bnRyeSI6ICJVUyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIktleSI6ICJE
V0MiLAogICAgICAgICAgICAgICAgIm13cyI6ICJEV0MiLAogICAgICAgICAgICAgICAgImNvdW50
cnkiOiAiVVMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJLZXkiOiAiRlNUIiwK
ICAgICAgICAgICAgICAgICJtd3MiOiAiVUtYIiwKICAgICAgICAgICAgICAgICJjb3VudHJ5Ijog
IlVLIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAiS2V5IjogIk5JS0tFIiwKICAg
ICAgICAgICAgICAgICJtd3MiOiAiTkkyMjUiLAogICAgICAgICAgICAgICAgImNvdW50cnkiOiAi
SlAiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJLZXkiOiAiREFYMzAiLAogICAg
ICAgICAgICAgICAgIm13cyI6ICJEQVgiLAogICAgICAgICAgICAgICAgImNvdW50cnkiOiAiRFgi
CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJLZXkiOiAiUEFTIiwKICAgICAgICAg
ICAgICAgICJtd3MiOiAiUFgxIiwKICAgICAgICAgICAgICAgICJjb3VudHJ5IjogIkZSIgogICAg
ICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAiS2V5IjogIlNYNVAiLAogICAgICAgICAgICAg
ICAgIm13cyI6ICJTWDVQIiwKICAgICAgICAgICAgICAgICJjb3VudHJ5IjogIlNUIgogICAgICAg
ICAgICB9LCB7CiAgICAgICAgICAgICAgICAiS2V5IjogIlNYWFAiLAogICAgICAgICAgICAgICAg
Im13cyI6ICJTWFhQIiwKICAgICAgICAgICAgICAgICJjb3VudHJ5IjogIlNUIgogICAgICAgICAg
ICB9LCB7CiAgICAgICAgICAgICAgICAiS2V5IjogIkhLUyIsCiAgICAgICAgICAgICAgICAibXdz
IjogIkhTSSIsCiAgICAgICAgICAgICAgICAiY291bnRyeSI6ICJISyIKICAgICAgICAgICAgfSwg
ewogICAgICAgICAgICAgICAgIktleSI6ICJESlNIIiwKICAgICAgICAgICAgICAgICJtd3MiOiAi
REpTSCIsCiAgICAgICAgICAgICAgICAiY291bnRyeSI6ICJDTiIKICAgICAgICAgICAgfSwgewog
ICAgICAgICAgICAgICAgIktleSI6ICJCU0VTTiIsCiAgICAgICAgICAgICAgICAibXdzIjogIkJT
RVNOIiwKICAgICAgICAgICAgICAgICJjb3VudHJ5IjogIlhYIgogICAgICAgICAgICB9LCB7CiAg
ICAgICAgICAgICAgICAiS2V5IjogIlVTMVlOIiwKICAgICAgICAgICAgICAgICJtd3MiOiAiVVNU
MVlSIiwKICAgICAgICAgICAgICAgICJjb3VudHJ5IjogIlVTIgogICAgICAgICAgICB9LCB7CiAg
ICAgICAgICAgICAgICAiS2V5IjogIlVTMllOIiwKICAgICAgICAgICAgICAgICJtd3MiOiAiVVNU
MllSIiwKICAgICAgICAgICAgICAgICJjb3VudHJ5IjogIlVTIgogICAgICAgICAgICB9LCB7CiAg
ICAgICAgICAgICAgICAiS2V5IjogIlVTNVlOIiwKICAgICAgICAgICAgICAgICJtd3MiOiAiVVNU
NVlSIiwKICAgICAgICAgICAgICAgICJjb3VudHJ5IjogIlVTIgogICAgICAgICAgICB9LCB7CiAg
ICAgICAgICAgICAgICAiS2V5IjogIlVTVFlOIiwKICAgICAgICAgICAgICAgICJtd3MiOiAiVVNU
MTBZIiwKICAgICAgICAgICAgICAgICJjb3VudHJ5IjogIlVTIgogICAgICAgICAgICB9LCB7CiAg
ICAgICAgICAgICAgICAiS2V5IjogIlVTMzBCIiwKICAgICAgICAgICAgICAgICJtd3MiOiAiVVNU
MzBZIiwKICAgICAgICAgICAgICAgICJjb3VudHJ5IjogIlVTIgogICAgICAgICAgICB9LCB7CiAg
ICAgICAgICAgICAgICAiS2V5IjogIktMQ09NUCIsCiAgICAgICAgICAgICAgICAibXdzIjogIjE4
MDczMDciLAogICAgICAgICAgICAgICAgImNvdW50cnkiOiAiTVkiCiAgICAgICAgICAgIH0sIHsK
ICAgICAgICAgICAgICAgICJLZXkiOiAiRVVSIiwKICAgICAgICAgICAgICAgICJtd3MiOiAiQ1VS
X0VVUlVTRCIsCiAgICAgICAgICAgICAgICAiY291bnRyeSI6ICJVUyIKICAgICAgICAgICAgfSwg
ewogICAgICAgICAgICAgICAgIktleSI6ICJKUFkiLAogICAgICAgICAgICAgICAgIm13cyI6ICJD
VVJfVVNEWUVOIiwKICAgICAgICAgICAgICAgICJjb3VudHJ5IjogIlVTIgogICAgICAgICAgICB9
LCB7CiAgICAgICAgICAgICAgICAiS2V5IjogIkdCUCIsCiAgICAgICAgICAgICAgICAibXdzIjog
IkNVUl9HQlBVU0QiLAogICAgICAgICAgICAgICAgImNvdW50cnkiOiAiVVMiCiAgICAgICAgICAg
IH0sIHsKICAgICAgICAgICAgICAgICJLZXkiOiAiQU9SRCIsCiAgICAgICAgICAgICAgICAibXdz
IjogIlhBTyIsCiAgICAgICAgICAgICAgICAiY291bnRyeSI6ICJBVSIKICAgICAgICAgICAgfSwg
ewogICAgICAgICAgICAgICAgIktleSI6ICJNU0giLAogICAgICAgICAgICAgICAgIm13cyI6ICJN
U0giLAogICAgICAgICAgICAgICAgImNvdW50cnkiOiAiVVMiCiAgICAgICAgICAgIH0sIHsKICAg
ICAgICAgICAgICAgICJLZXkiOiAiQUVYIiwKICAgICAgICAgICAgICAgICJtd3MiOiAiQUFFWCIs
CiAgICAgICAgICAgICAgICAiY291bnRyeSI6ICJOTCIKICAgICAgICAgICAgfSwgewogICAgICAg
ICAgICAgICAgIktleSI6ICJCNDAwIiwKICAgICAgICAgICAgICAgICJtd3MiOiAiQjQwMCIsCiAg
ICAgICAgICAgICAgICAiY291bnRyeSI6ICJVUyIKICAgICAgICAgICAgfSwgewogICAgICAgICAg
ICAgICAgIktleSI6ICJCRUwyMCIsCiAgICAgICAgICAgICAgICAibXdzIjogIkJFTDIwIiwKICAg
ICAgICAgICAgICAgICJjb3VudHJ5IjogIlhYIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAg
ICAgICAiS2V5IjogIkJWU1AiLAogICAgICAgICAgICAgICAgIm13cyI6ICJCVlNQIiwKICAgICAg
ICAgICAgICAgICJjb3VudHJ5IjogIlhYIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAg
ICAiS2V5IjogIkdTUFRTRSIsCiAgICAgICAgICAgICAgICAibXdzIjogIklTUFRYIiwKICAgICAg
ICAgICAgICAgICJjb3VudHJ5IjogIkNBIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAg
ICAiS2V5IjogIlZJWCIsCiAgICAgICAgICAgICAgICAibXdzIjogIlZJWCIsCiAgICAgICAgICAg
ICAgICAiY291bnRyeSI6ICJVUyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIktl
eSI6ICJESlVTQlQiLAogICAgICAgICAgICAgICAgIm13cyI6ICIxNTIyOTU2IiwKICAgICAgICAg
ICAgICAgICJjb3VudHJ5IjogIlhYIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAi
S2V5IjogIkRXMjUiLAogICAgICAgICAgICAgICAgIm13cyI6ICJEVzI1IiwKICAgICAgICAgICAg
ICAgICJjb3VudHJ5IjogIlVTIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAiS2V5
IjogIkRKVVNCQyIsCiAgICAgICAgICAgICAgICAibXdzIjogIjE1MjI5NjciLAogICAgICAgICAg
ICAgICAgImNvdW50cnkiOiAiWFgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJL
ZXkiOiAiU1g1RSIsCiAgICAgICAgICAgICAgICAibXdzIjogIlNYNUUiLAogICAgICAgICAgICAg
ICAgImNvdW50cnkiOiAiU1QiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJLZXki
OiAiREpVU0hQIiwKICAgICAgICAgICAgICAgICJtd3MiOiAiMTUyMjc1MiIsCiAgICAgICAgICAg
ICAgICAiY291bnRyeSI6ICJYWCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIktl
eSI6ICJNWURPVyIsCiAgICAgICAgICAgICAgICAibXdzIjogIjE1MjQ3MjUiLAogICAgICAgICAg
ICAgICAgImNvdW50cnkiOiAiWFgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJL
ZXkiOiAiREpVU0FWIiwKICAgICAgICAgICAgICAgICJtd3MiOiAiMTUyMjkwMSIsCiAgICAgICAg
ICAgICAgICAiY291bnRyeSI6ICJYWCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAg
IktleSI6ICJESlVTUFIiLAogICAgICAgICAgICAgICAgIm13cyI6ICIxNTIzMjE2IiwKICAgICAg
ICAgICAgICAgICJjb3VudHJ5IjogIlhYIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAg
ICAiS2V5IjogIkRKVVNCUEIiLAogICAgICAgICAgICAgICAgIm13cyI6ICIxNTIzMzM1IiwKICAg
ICAgICAgICAgICAgICJjb3VudHJ5IjogIlhYIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAg
ICAgICAiS2V5IjogIlNHRE9XIiwKICAgICAgICAgICAgICAgICJtd3MiOiAiMTUyNDc4MSIsCiAg
ICAgICAgICAgICAgICAiY291bnRyeSI6ICJYWCIKICAgICAgICAgICAgfSwgewogICAgICAgICAg
ICAgICAgIktleSI6ICJESlVCUyIsCiAgICAgICAgICAgICAgICAibXdzIjogIkRKVUJTIiwKICAg
ICAgICAgICAgICAgICJjb3VudHJ5IjogIlVTIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAg
ICAgICAiS2V5IjogIkRXQ09HUyIsCiAgICAgICAgICAgICAgICAibXdzIjogIkRXQ09HUyIsCiAg
ICAgICAgICAgICAgICAiY291bnRyeSI6ICJVUyIKICAgICAgICAgICAgfSwgewogICAgICAgICAg
ICAgICAgIktleSI6ICJGT1g1MCIsCiAgICAgICAgICAgICAgICAibXdzIjogIkZPWDUwIiwKICAg
ICAgICAgICAgICAgICJjb3VudHJ5IjogIlVTIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAg
ICAgICAiS2V5IjogIkFMTFNIUiIsCiAgICAgICAgICAgICAgICAibXdzIjogIkoyMDMiLAogICAg
ICAgICAgICAgICAgImNvdW50cnkiOiAiWFgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAg
ICAgICJLZXkiOiAiSktDT01QIiwKICAgICAgICAgICAgICAgICJtd3MiOiAiSktTRSIsCiAgICAg
ICAgICAgICAgICAiY291bnRyeSI6ICJYWCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAg
ICAgIktleSI6ICJTUE1JQiIsCiAgICAgICAgICAgICAgICAibXdzIjogIkZUU0VNSUIiLAogICAg
ICAgICAgICAgICAgImNvdW50cnkiOiAiWFgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAg
ICAgICJLZXkiOiAiUklYRiIsCiAgICAgICAgICAgICAgICAibXdzIjogIk5EWCIsCiAgICAgICAg
ICAgICAgICAiY291bnRyeSI6ICJVUyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAg
IktleSI6ICJQU0UiLAogICAgICAgICAgICAgICAgIm13cyI6ICJQU0UuWCIsCiAgICAgICAgICAg
ICAgICAiY291bnRyeSI6ICJVUyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIktl
eSI6ICJOTllBIiwKICAgICAgICAgICAgICAgICJtd3MiOiAiTllBIiwKICAgICAgICAgICAgICAg
ICJjb3VudHJ5IjogIlVTIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAiS2V5Ijog
Ik9TRUFYIiwKICAgICAgICAgICAgICAgICJtd3MiOiAiT1NFQVgiLAogICAgICAgICAgICAgICAg
ImNvdW50cnkiOiAiWFgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJLZXkiOiAi
R1NQQVNYIiwKICAgICAgICAgICAgICAgICJtd3MiOiAiMTg2NzQ1MyIsCiAgICAgICAgICAgICAg
ICAiY291bnRyeSI6ICJBVSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIktleSI6
ICJTRVUiLAogICAgICAgICAgICAgICAgIm13cyI6ICJLUzExIiwKICAgICAgICAgICAgICAgICJj
b3VudHJ5IjogIlhYIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAiS2V5IjogIlNI
Q09NUCIsCiAgICAgICAgICAgICAgICAibXdzIjogIlNIQ09NUCIsCiAgICAgICAgICAgICAgICAi
Y291bnRyeSI6ICJDTiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgIktleSI6ICJJ
QkVYMzUiLAogICAgICAgICAgICAgICAgIm13cyI6ICJJQkVYIiwKICAgICAgICAgICAgICAgICJj
b3VudHJ5IjogIlhYIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAiS2V5IjogIlNX
RURJIiwKICAgICAgICAgICAgICAgICJtd3MiOiAiU0FYIiwKICAgICAgICAgICAgICAgICJjb3Vu
dHJ5IjogIlhYIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAiS2V5IjogIlRBSSIs
CiAgICAgICAgICAgICAgICAibXdzIjogIlRXSUkiLAogICAgICAgICAgICAgICAgImNvdW50cnki
OiAiWFgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICJLZXkiOiAiU01JIiwKICAg
ICAgICAgICAgICAgICJtd3MiOiAiU01JIiwKICAgICAgICAgICAgICAgICJjb3VudHJ5IjogIlhY
IgogICAgICAgICAgICB9XQogICAgICAgIH07CiAgICAgICAgX2RqbC5taXhpbih0aGlzLmNvbmZp
Z3VyYXRpb24sIGNvbmYpOwogICAgICAgIHRoaXMudGltZXIgPSAiIjsKICAgICAgICB0aGlzLmNo
YXJ0RGF0YSA9ICIiOwogICAgICAgIHRoaXMudGFibGVEYXRhID0gIiI7CiAgICAgICAgdGhpcy5w
YW5lbERhdGEgPSBbXTsKICAgICAgICB0aGlzLnBhbmVscyA9IHRoaXMuY3JlYXRlUGFuZWxzKHRo
aXMuY29uZmlndXJhdGlvbi5tb2R1bGVDb250YWluZXIpOwogICAgICAgIHRoaXMuaGVscEluZm8g
PSBfZGpsLmJ5SWQoImhlbHBJbmZvIik7CiAgICAgICAgdGhpcy5mb290ZXJCb3ggPSBfZGpsLmJ5
SWQoImZvb3RlckJveCIpOwogICAgICAgIHRoaXMudGltZVN0YW1wID0gX2RqbC5ieUlkKCJtZG1f
dGltZXN0YW1wIik7CiAgICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5zaG93TXlNYXJrZXRz
KSB7CiAgICAgICAgICAgIHRoaXMuZ2V0UGVyc29uYWxpemVkU3ltYm9scygpOwogICAgICAgIH0K
ICAgICAgICB0aGlzLmNoYXJ0RGF0YVJlYWR5ID0gZmFsc2U7CiAgICAgICAgdGhpcy50YWJsZURh
dGFSZWFkeSA9IGZhbHNlOwogICAgICAgIHRoaXMuZ2V0Q2hhcnREYXRhKCk7CiAgICAgICAgdGhp
cy5hZGRFdmVudHMoKTsKICAgICAgICB0aGlzLmluaXRpYWxpemVOZXdzVGlja2VyKCk7CiAgICAg
ICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5yZWZyZXNoTW9kdWxlKSB7CiAgICAgICAgICAgIF9k
anAuZW5hYmxlTW9kdWxlUmVmcmVzaCh0aGlzLmNvbmZpZ3VyYXRpb24ubW9kdWxlTmFtZSk7CiAg
ICAgICAgICAgIHRoaXMuc2V0UmVmcmVzaCh0aGlzLmNvbmZpZ3VyYXRpb24ucmVmcmVzaFJhdGUp
OwogICAgICAgIH0KICAgIH0sCiAgICBpbml0aWFsaXplTmV3c1RpY2tlcjogZnVuY3Rpb24gKCkg
ewogICAgICAgIGlmIChkb2pvLmJ5SWQoIm5ld3NUaWNrZXJEaXYiKSkgewogICAgICAgICAgICBk
ai53aWRnZXQucGFuZWxzLlBhbmVsc0ZhY3RvcnkuY3JlYXRlKCJuZXdzVGlja2VyRGl2Iiwgewog
ICAgICAgICAgICAgICAgY29yZTogewogICAgICAgICAgICAgICAgICAgIHBhbmVsSW5jcmVtZW50
OiAxCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgY2Fyb3VzZWw6IHsKICAgICAg
ICAgICAgICAgICAgICB0eXBlOiAiY2lyY3VsYXIiCiAgICAgICAgICAgICAgICB9LAogICAgICAg
ICAgICAgICAgcm90YXRvcjogewogICAgICAgICAgICAgICAgICAgIHJvdGF0ZVRpbWU6IDAsCiAg
ICAgICAgICAgICAgICAgICAgcm90YXRlSXRlcmF0aW9uczogMTAKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgfSwKICAgIHNldFJlZnJlc2g6IGZ1bmN0aW9u
IChyZWZyZXNoUmF0ZSkgewogICAgICAgIHZhciB0aGF0ID0gdGhpczsKICAgICAgICB0aGF0LnRp
bWVyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkgewogICAgICAgICAgICBpZiAoX2RqcC5pc01v
ZHVsZVJlZnJlc2hFbmFibGVkKHRoYXQuY29uZmlndXJhdGlvbi5tb2R1bGVOYW1lKSkgewogICAg
ICAgICAgICAgICAgdGhhdC5nZXRDaGFydERhdGEoKTsKICAgICAgICAgICAgICAgIGNvbnNvbGUu
bG9nKCJSZWZyZXNoZWQgTWFya2V0IERhdGEiKTsKICAgICAgICAgICAgfQogICAgICAgIH0sIHJl
ZnJlc2hSYXRlICogMTAwMCk7CiAgICB9LAogICAgYWRkRXZlbnRzOiBmdW5jdGlvbiAoKSB7CiAg
ICAgICAgdmFyIHRoYXQgPSB0aGlzOwogICAgICAgIF9kamwuYWRkTGl2ZUV2ZW50KCIubWRSb3ci
LCAibW91c2VvdmVyIiwgZnVuY3Rpb24gKGV2KSB7CiAgICAgICAgICAgIHZhciB0YXJnZXQgPSAo
ZXYuc3JjRWxlbWVudCB8fCBldi50YXJnZXQpOwogICAgICAgICAgICB3aGlsZSAodGFyZ2V0LnRh
Z05hbWUgIT0gImxpIiAmJiB0YXJnZXQudGFnTmFtZSAhPSAiTEkiKSB7CiAgICAgICAgICAgICAg
ICB0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBf
ZGpsLnN0b3BFdmVudChldik7CiAgICAgICAgICAgIHZhciBwYXJhbXMgPSB0YXJnZXQuaWQuc3Bs
aXQoIn4iKTsKICAgICAgICAgICAgdGhhdC5zZXRSb3dTZWxlY3RlZCh0YXJnZXQsIHBhcmFtc1sw
XSk7CiAgICAgICAgICAgIHRoYXQucmVuZGVyQ2hhcnRXaXRoQ29udGFpbmVyQW5kU3ltYm9sKHRo
YXQuY29uZmlndXJhdGlvbi5jaGFydENvbnRhaW5lciArIHBhcmFtc1swXSwgcGFyYW1zWzFdLCBw
YXJhbXNbMl0pOwogICAgICAgICAgICB0aGF0LnRpbWVTdGFtcC5pbm5lckhUTUwgPSBwYXJhbXNb
M107CiAgICAgICAgfSwgdGhhdCk7CiAgICAgICAgX2RqbC5hZGRMaXZlRXZlbnQoIi5idG5faGVs
cCIsICJjbGljayIsIGZ1bmN0aW9uIChldikgewogICAgICAgICAgICBfZGpsLnN0b3BFdmVudChl
dik7CiAgICAgICAgICAgIF9kamwuYWRkQ2xhc3NOYW1lKHRoYXQuZm9vdGVyQm94LCAibWRtTGVn
ZW5kLWV4cGFuZGVkIik7CiAgICAgICAgfSk7CiAgICAgICAgX2RqbC5hZGRMaXZlRXZlbnQoIi5i
dG5fY2xvc2UiLCAiY2xpY2siLCBmdW5jdGlvbiAoZXYpIHsKICAgICAgICAgICAgX2RqbC5zdG9w
RXZlbnQoZXYpOwogICAgICAgICAgICBfZGpsLnJlbW92ZUNsYXNzTmFtZSh0aGF0LmZvb3RlckJv
eCwgIm1kbUxlZ2VuZC1leHBhbmRlZCIpOwogICAgICAgIH0pOwogICAgfSwKICAgIHNldFJvd1Nl
bGVjdGVkOiBmdW5jdGlvbiAodGFyZ2V0LCBjb250YWluZXIpIHsKICAgICAgICB2YXIgdGhhdCA9
IHRoaXM7CiAgICAgICAgdmFyIHRhYnMgPSBfZGpsLnF1ZXJ5KCIjIiArIHRoYXQuY29uZmlndXJh
dGlvbi5kYXRhQ29udGFpbmVyICsgY29udGFpbmVyICsgIiAubWRSb3ciKTsKICAgICAgICBmb3Ig
KHZhciBpID0gdGFicy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICAgICAgICBfZGps
LnJlbW92ZUNsYXNzTmFtZSh0YWJzW2ldLCAibWRSb3ctc2VsZWN0ZWQiKTsKICAgICAgICB9CiAg
ICAgICAgX2RqbC5hZGRDbGFzc05hbWUodGFyZ2V0LCAibWRSb3ctc2VsZWN0ZWQiKTsKICAgIH0s
CiAgICBidWlsZE15TWFya2V0U3ltYm9sczogZnVuY3Rpb24gKGRhdGEpIHsKICAgICAgICB2YXIg
dGhhdCA9IHRoaXM7CiAgICAgICAgaWYgKCFkYXRhLmluZGV4ZXMpIHsKICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgIH0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEuaW5kZXhlcy5s
ZW5ndGg7IGkrKykgewogICAgICAgICAgICB0aGF0LmNvbmZpZ3VyYXRpb24ubXlNYXJrZXRTeW1i
b2xzW2ldID0gZGF0YS5pbmRleGVzW2ldLmlkOwogICAgICAgIH0KICAgICAgICBpZiAodGhhdC5j
b25maWd1cmF0aW9uLm15TWFya2V0U3ltYm9scy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIHRo
YXQuY29uZmlndXJhdGlvbi5kZWZhdWx0U3ltYm9sc1swXS5zeW1ib2xzID0gdGhhdC5jb25maWd1
cmF0aW9uLm15TWFya2V0U3ltYm9sczsKICAgICAgICB9CiAgICB9LAogICAgd3NqVG9NV1N5bWJv
bDogZnVuY3Rpb24gKHN5bWJvbCkgewogICAgICAgIHZhciB0aGF0ID0gdGhpczsKICAgICAgICB0
cnkgewogICAgICAgICAgICB2YXIgc3ltYm9sU2l6ZSA9IHRoYXQuY29uZmlndXJhdGlvbi5zeW1i
b2xNYXBwaW5nLmxlbmd0aDsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xT
aXplOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBtYXAgPSB0aGF0LmNvbmZpZ3VyYXRpb24u
c3ltYm9sTWFwcGluZ1tpXTsKICAgICAgICAgICAgICAgIGlmIChzeW1ib2wgPT0gbWFwLktleSkg
ewogICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXAuY291bnRyeSArICI6IiArIG1hcC5td3M7
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlKSB7CiAg
ICAgICAgICAgIGNvbnNvbGUubG9nKGUpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc3ltYm9s
OwogICAgfSwKICAgIGdldFBlcnNvbmFsaXplZFN5bWJvbHM6IGZ1bmN0aW9uICgpIHsKICAgICAg
ICB2YXIgdGhhdCA9IHRoaXM7CiAgICAgICAgX2RqbC54aHJHZXQoewogICAgICAgICAgICB1cmw6
IHRoYXQuY29uZmlndXJhdGlvbi5wZXJzb25hbGl6ZWRTeW1ib2xzVVJMLAogICAgICAgICAgICBo
YW5kbGVBczogImpzb24iLAogICAgICAgICAgICBwcmV2ZW50Q2FjaGU6IHRydWUsCiAgICAgICAg
ICAgIGhlYWRlcnM6IHsKICAgICAgICAgICAgICAgICJBY2NlcHQiOiAiYXBwbGljYXRpb24vanNv
biIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgbG9hZDogZnVuY3Rpb24gKHJlc3BvbnNlLCBp
b0FyZ3MpIHsKICAgICAgICAgICAgICAgIHRoYXQuYnVpbGRNeU1hcmtldFN5bWJvbHMocmVzcG9u
c2UpOwogICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwogICAgICAgICAgICB9LAogICAg
ICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHJlc3BvbnNlLCBpb0FyZ3MpIHsKICAgICAgICAgICAg
ICAgIHJldHVybiByZXNwb25zZTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfSwKICAg
IGdldENoYXJ0RGF0YTogZnVuY3Rpb24gKCkgewogICAgICAgIHZhciB0aGF0ID0gdGhpczsKICAg
ICAgICBfZGpsLnhockdldCh7CiAgICAgICAgICAgIHVybDogdGhhdC5jb25maWd1cmF0aW9uLmNo
YXJ0RGF0YVVSTCwKICAgICAgICAgICAgaGFuZGxlQXM6ICJqc29uIiwKICAgICAgICAgICAgcHJl
dmVudENhY2hlOiB0cnVlLAogICAgICAgICAgICBsb2FkOiBmdW5jdGlvbiAocmVzcG9uc2UsIGlv
QXJncykgewogICAgICAgICAgICAgICAgdGhhdC5jaGFydERhdGEgPSByZXNwb25zZTsKICAgICAg
ICAgICAgICAgIHRoYXQuY2hhcnREYXRhUmVhZHkgPSB0cnVlOwogICAgICAgICAgICAgICAgdGhh
dC5nZXRUYWJsZURhdGEoKTsKICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTsKICAgICAg
ICAgICAgfSwKICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChyZXNwb25zZSwgaW9BcmdzKSB7
CiAgICAgICAgICAgICAgICB0aGF0LmNoYXJ0RGF0YVJlYWR5ID0gZmFsc2U7CiAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzcG9uc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0sCiAg
ICBnZXRUYWJsZURhdGE6IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgdGhhdCA9IHRoaXM7CiAg
ICAgICAgX2RqbC54aHJHZXQoewogICAgICAgICAgICB1cmw6IHRoYXQuY29uZmlndXJhdGlvbi50
YWJsZURhdGFVUkwsCiAgICAgICAgICAgIGhhbmRsZUFzOiAidGV4dCIsCiAgICAgICAgICAgIHBy
ZXZlbnRDYWNoZTogdHJ1ZSwKICAgICAgICAgICAgbG9hZDogZnVuY3Rpb24gKHJlc3BvbnNlLCBp
b0FyZ3MpIHsKICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gcmVzcG9uc2Uuc3Vic3RyaW5nKDAs
IHJlc3BvbnNlLmluZGV4T2YoIjwiKSAtIDEpOwogICAgICAgICAgICAgICAgdGhhdC50YWJsZURh
dGEgPSBfZGpsLmZyb21Kc29uKHJlc3BvbnNlKTsKICAgICAgICAgICAgICAgIHRoYXQudGFibGVE
YXRhUmVhZHkgPSB0cnVlOwogICAgICAgICAgICAgICAgdGhhdC5yZW5kZXJEYXRhVGFibGUoKTsK
ICAgICAgICAgICAgICAgIHRoYXQucmVuZGVyQ2hhcnQoKTsKICAgICAgICAgICAgICAgIHJldHVy
biByZXNwb25zZTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChy
ZXNwb25zZSwgaW9BcmdzKSB7CiAgICAgICAgICAgICAgICB0aGF0LnRhYmxlRGF0YVJlYWR5ID0g
ZmFsc2U7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7CiAgICAgICAgICAg
ICAgICBjb25zb2xlLmxvZyhpb0FyZ3MpOwogICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNl
OwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9LAogICAgcmVuZGVyQ2hhcnQ6IGZ1bmN0
aW9uICgpIHsKICAgICAgICB2YXIgdGhhdCA9IHRoaXM7CiAgICAgICAgdmFyIHdpdGhNeU1hcmtl
dHMgPSAwOwogICAgICAgIGZvciAodmFyIGkgPSB0aGF0LmNvbmZpZ3VyYXRpb24uZGVmYXVsdFN5
bWJvbHMubGVuZ3RoIC0gMTsgaSA+PSB3aXRoTXlNYXJrZXRzOyBpLS0pIHsKICAgICAgICAgICAg
dmFyIHN5bWJvbCA9IHRoYXQuY29uZmlndXJhdGlvbi5kZWZhdWx0U3ltYm9sc1tpXS5zeW1ib2xz
WzBdOwogICAgICAgICAgICB0aGF0LnJlbmRlckNoYXJ0V2l0aENvbnRhaW5lckFuZFN5bWJvbCh0
aGF0LmNvbmZpZ3VyYXRpb24uY2hhcnRDb250YWluZXIgKyB0aGF0LmNvbmZpZ3VyYXRpb24uZGVm
YXVsdFN5bWJvbHNbaV0udGFiLCB0aGF0LndzalRvTVdTeW1ib2woc3ltYm9sKSwgc3ltYm9sKTsK
ICAgICAgICB9CiAgICB9LAogICAgcmVuZGVyQ2hhcnRXaXRoQ29udGFpbmVyQW5kU3ltYm9sOiBm
dW5jdGlvbiAoY29udGFpbmVyLCBzeW1ib2wsIHNpbUlkKSB7CiAgICAgICAgdmFyIHRoYXQgPSB0
aGlzOwogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHZhciBzdG9ja2NoYXJ0Q2hhcnQgPSBuZXcg
RW1iZWRkZWRDaGFydChjb250YWluZXIsIFdTSkluZGV4Q2hhcnRTdHlsZSwgdGhhdC5jb25maWd1
cmF0aW9uLmNoYXJ0V2lkdGgsIHRoYXQuY29uZmlndXJhdGlvbi5jaGFydEhlaWdodCwgdGhhdC5j
b25maWd1cmF0aW9uLnRpbWUsIHRoYXQuY29uZmlndXJhdGlvbi5mcmVxdWVuY3ksIG51bGwsIG51
bGwsIHRoYXQuY2hhcnREYXRhLCBzeW1ib2wsICcnKTsKICAgICAgICAgICAgdmFyIGNoYXJ0RXhp
c3RzID0gc3RvY2tjaGFydENoYXJ0LlNob3dDaGFydCgpOwogICAgICAgICAgICBpZiAoIWNoYXJ0
RXhpc3RzKSB7CiAgICAgICAgICAgICAgICB0aGF0LnNob3dOb0NoYXJ0TWVzc2FnZShjb250YWlu
ZXIsIHNpbUlkKTsKICAgICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikgewog
ICAgICAgICAgICBjb25zb2xlLmxvZyhleGNlcHRpb24pOwogICAgICAgIH0KICAgIH0sCiAgICBz
aG93Tm9DaGFydE1lc3NhZ2U6IGZ1bmN0aW9uIChjb250YWluZXIsIHN5bWJvbCkgewogICAgICAg
IHZhciB0aGF0ID0gdGhpczsKICAgICAgICB2YXIgY29udGFpbmVyT2JqZWN0ID0gX2RqbC5ieUlk
KGNvbnRhaW5lcik7CiAgICAgICAgY29udGFpbmVyT2JqZWN0LmlubmVySFRNTCA9ICI8cCBjbGFz
cz1cIm1zZy1jaGFydFwiPkNoYXJ0IGF2YWlsYWJsZSBhdCA8YSBocmVmPVwiIiArIHRoYXQuY29u
ZmlndXJhdGlvbi5pbmRleExpbmtVUkwgKyBzeW1ib2wgKyAiXCI+TWFya2V0IERhdGEgQ2VudGVy
PC9hPjwvcD4iOwogICAgfSwKICAgIHNldExhc3RQb2ludEluQ2hhcnQ6IGZ1bmN0aW9uIChzeW1i
b2wsIGRhdGFQb2ludCwgY2xvc2VWYWx1ZSkgewogICAgICAgIHZhciB0aGF0ID0gdGhpczsKICAg
ICAgICBkYXRhUG9pbnQgPSBwYXJzZUZsb2F0KGRhdGFQb2ludCk7CiAgICAgICAgY2xvc2VWYWx1
ZSA9IHBhcnNlRmxvYXQoY2xvc2VWYWx1ZSk7CiAgICAgICAgaWYgKHRoYXQuY2hhcnREYXRhICE9
PSAiIikgewogICAgICAgICAgICBmb3IgKHZhciBpID0gdGhhdC5jaGFydERhdGEubGVuZ3RoIC0g
MTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgICAgICAgIGlmICh0aGF0LmNoYXJ0RGF0YVtpXS5L
ZXkgPT0gc3ltYm9sKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHRyYWRlc1NpemUgPSB0aGF0
LmNoYXJ0RGF0YVtpXS5WYWx1ZS5EYXRhWzBdLlZhbHVlLlNlc3Npb25zWzBdLlRyYWRlcy5sZW5n
dGg7CiAgICAgICAgICAgICAgICAgICAgdHJhZGVzU2l6ZSA9ICh0cmFkZXNTaXplID09PSAwKSA/
IDEgOiB0cmFkZXNTaXplOwogICAgICAgICAgICAgICAgICAgIHRoYXQuY2hhcnREYXRhW2ldLlZh
bHVlLkRhdGFbMF0uVmFsdWUuU2Vzc2lvbnNbMF0uVHJhZGVzW3RyYWRlc1NpemVdID0gZGF0YVBv
aW50OwogICAgICAgICAgICAgICAgICAgIGlmIChjbG9zZVZhbHVlICE9PSAwKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHRoYXQuY2hhcnREYXRhW2ldLlZhbHVlLkRhdGFbMF0uVmFsdWUuU2Vz
c2lvbnNbMF0uUHJldmlvdXNDbG9zZSA9IGNsb3NlVmFsdWU7CiAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgIGlmIChkYXRhUG9pbnQgPiB0aGF0LmNoYXJ0RGF0YVtpXS5W
YWx1ZS5EYXRhWzBdLlZhbHVlLlNlc3Npb25zWzBdLkhpZ2guUHJpY2UpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgdGhhdC5jaGFydERhdGFbaV0uVmFsdWUuRGF0YVswXS5WYWx1ZS5TZXNzaW9u
c1swXS5IaWdoID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg6IHRoYXQuY2hh
cnREYXRhW2ldLlZhbHVlLkRhdGFbMF0uVmFsdWUuU2Vzc2lvbnNbMF0uSGlnaC5JbmRleCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFByaWNlOiBkYXRhUG9pbnQKICAgICAgICAgICAgICAg
ICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGFQb2ludCA8IHRo
YXQuY2hhcnREYXRhW2ldLlZhbHVlLkRhdGFbMF0uVmFsdWUuU2Vzc2lvbnNbMF0uTG93LlByaWNl
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuY2hhcnREYXRhW2ldLlZhbHVlLkRhdGFb
MF0uVmFsdWUuU2Vzc2lvbnNbMF0uTG93ID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
SW5kZXg6IHRoYXQuY2hhcnREYXRhW2ldLlZhbHVlLkRhdGFbMF0uVmFsdWUuU2Vzc2lvbnNbMF0u
TG93LkluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpY2U6IGRhdGFQb2ludAog
ICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnNv
bGUubG9nKCJObyBDaGFydCBEYXRhIik7CiAgICAgICAgfQogICAgfSwKICAgIHJlbmRlckRhdGFU
YWJsZTogZnVuY3Rpb24gKCkgewogICAgICAgIHZhciB0aGF0ID0gdGhpczsKICAgICAgICBmb3Ig
KHZhciBpID0gdGhhdC50YWJsZURhdGEudHJlYXN1cmllcy5sZW5ndGggLSAxOyBpID49IDA7IGkt
LSkgewogICAgICAgICAgICB0aGF0LnBhbmVsRGF0YVt0aGF0LnRhYmxlRGF0YS50cmVhc3VyaWVz
W2ldLnN5bV0gPSB0aGF0LnRhYmxlRGF0YS50cmVhc3VyaWVzW2ldOwogICAgICAgIH0KICAgICAg
ICBmb3IgKGkgPSB0aGF0LnRhYmxlRGF0YS5pbmRpY2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0t
KSB7CiAgICAgICAgICAgIHRoYXQucGFuZWxEYXRhW3RoYXQudGFibGVEYXRhLmluZGljZXNbaV0u
c3ltXSA9IHRoYXQudGFibGVEYXRhLmluZGljZXNbaV07CiAgICAgICAgfQogICAgICAgIGZvciAo
dmFyIGN1cnJJbmRleCA9IHRoYXQudGFibGVEYXRhLmN1cnJlbmNpZXMubGVuZ3RoIC0gMTsgY3Vy
ckluZGV4ID49IDA7IGN1cnJJbmRleC0tKSB7CiAgICAgICAgICAgIHRoYXQucGFuZWxEYXRhW3Ro
YXQudGFibGVEYXRhLmN1cnJlbmNpZXNbY3VyckluZGV4XS5zeW1dID0gdGhhdC50YWJsZURhdGEu
Y3VycmVuY2llc1tjdXJySW5kZXhdOwogICAgICAgIH0KICAgICAgICB2YXIgd2l0aE15TWFya2V0
cyA9IDA7CiAgICAgICAgdmFyIHRpbWVTdGFtcCA9ICIiOwogICAgICAgIGZvciAodmFyIGogPSB0
aGF0LmNvbmZpZ3VyYXRpb24uZGVmYXVsdFN5bWJvbHMubGVuZ3RoIC0gMTsgaiA+PSB3aXRoTXlN
YXJrZXRzOyBqLS0pIHsKICAgICAgICAgICAgdmFyIHN5bWJvbHNBcnJheSA9IHRoYXQuY29uZmln
dXJhdGlvbi5kZWZhdWx0U3ltYm9sc1tqXS5zeW1ib2xzOwogICAgICAgICAgICB2YXIgdGFibGVD
b250ZW50ID0gIiI7CiAgICAgICAgICAgIHZhciBmaXJzdEluZGV4T25MaXN0ID0gdHJ1ZTsKICAg
ICAgICAgICAgdmFyIHByaWNlRFAgPSAyOwogICAgICAgICAgICB2YXIgY2hhbmdlRFAgPSAyOwog
ICAgICAgICAgICB2YXIgcGVyY2VudERQID0gMjsKICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7
IGsgPCBzeW1ib2xzQXJyYXkubGVuZ3RoOyBrKyspIHsKICAgICAgICAgICAgICAgIHZhciBkYXRh
Rm9ySW5kZXggPSB0aGF0LnBhbmVsRGF0YVtzeW1ib2xzQXJyYXlba11dOwogICAgICAgICAgICAg
ICAgaWYgKGRhdGFGb3JJbmRleCkgewogICAgICAgICAgICAgICAgICAgIGlmIChkYXRhRm9ySW5k
ZXgubGFzdCAhPT0gbnVsbCAmJiBkYXRhRm9ySW5kZXgubGFzdCAhPT0gdW5kZWZpbmVkKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0gZGF0YUZvckluZGV4Lm5hbWUucmVwbGFj
ZSgvW1xzK1x3XSs6XHMqL2csICIiKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhc3RU
cmFkZSA9IHBhcnNlRmxvYXQoZGF0YUZvckluZGV4Lmxhc3QpOwogICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgZGlmZmVyZW5jZSA9IDAuMDA7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBw
ZXJjZW50YWdlID0gMC4wMDsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlQ1NTID0g
InBvc2l0aXZlIjsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhpZGVDU1MgPSAiIjsKICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIG13U3ltYm9sID0gdGhhdC53c2pUb01XU3ltYm9sKHN5
bWJvbHNBcnJheVtrXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGF0LmNvbmZpZ3Vy
YXRpb24uZGVmYXVsdFN5bWJvbHNbal0udGFiID09PSAiY3VycmVuY3lyYXRlcyIgJiYgc3ltYm9s
c0FycmF5W2tdICE9PSAiVVNUWU4iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
cGFzdERheSA9IHBhcnNlRmxvYXQoZGF0YUZvckluZGV4LnBkKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRpZmZlcmVuY2UgPSBsYXN0VHJhZGUgLSBwYXN0RGF5OwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGVyY2VudGFnZSA9IChkaWZmZXJlbmNlIC8gcGFzdERheSkgKiAxMDA7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0LnNldExhc3RQb2ludEluQ2hhcnQobXdT
eW1ib2wsIGxhc3RUcmFkZSwgZGF0YUZvckluZGV4LnBkKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHByaWNlRFAgPSA0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlRFAg
PSA0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyY2VudERQID0gMzsKICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChz
eW1ib2xzQXJyYXlba10gPT09ICJVU1RZTiIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsYXN0VHJhZGUgPSBwYXJzZUZsb2F0KGRhdGFGb3JJbmRleC55aWVsZCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZSA9IHBhcnNlRmxvYXQoZGF0YUZvcklu
ZGV4LmNoZyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyY2VudGFnZSA9IChk
aWZmZXJlbmNlIC8gZGF0YUZvckluZGV4Lmxhc3QpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHByaWNlRFAgPSA0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5n
ZURQID0gNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJjZW50RFAgPSAzOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkaWZmZXJlbmNlID0gcGFyc2VGbG9hdChkYXRhRm9ySW5kZXguY2hnKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJjZW50YWdlID0gcGFyc2VGbG9hdChkYXRh
Rm9ySW5kZXgucGNoZyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2VEUCA9
IDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlRFAgPSAyOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmNlbnREUCA9IDI7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0LnNldExhc3RQb2lu
dEluQ2hhcnQobXdTeW1ib2wsIGxhc3RUcmFkZSwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVDU1MgPSAocGVyY2VudGFnZSA+PSAwKSA/
ICJwb3NpdGl2ZSIgOiAibmVnYXRpdmUiOwogICAgICAgICAgICAgICAgICAgICAgICBwZXJjZW50
YWdlID0gTWF0aC5hYnMocGVyY2VudGFnZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZl
cmVuY2UgPSBNYXRoLmFicyhkaWZmZXJlbmNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgZGlm
ZmVyZW5jZSA9IGRpZmZlcmVuY2UudG9GaXhlZChjaGFuZ2VEUCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHBlcmNlbnRhZ2UgPSBwZXJjZW50YWdlLnRvRml4ZWQocGVyY2VudERQKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgbGFzdFRyYWRlID0gbGFzdFRyYWRlLnRvRml4ZWQocHJpY2VEUCk7
CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxlY3RlZENTUyA9IChmaXJzdEluZGV4T25M
aXN0KSA/ICIgbWRSb3ctc2VsZWN0ZWQiIDogIiI7CiAgICAgICAgICAgICAgICAgICAgICAgIHRh
YmxlQ29udGVudCArPSAiPGxpIGNsYXNzPVwibWRSb3cgcm93VHlwZS0iICsgc3RhdGVDU1MgKyAi
ICIgKyBzZWxlY3RlZENTUyArICJcIiBpZD1cIiIgKyB0aGF0LmNvbmZpZ3VyYXRpb24uZGVmYXVs
dFN5bWJvbHNbal0udGFiICsgIn4iICsgbXdTeW1ib2wgKyAifiIgKyBkYXRhRm9ySW5kZXguc3lt
c2lkICsgIn4iICsgZGF0YUZvckluZGV4LnRpbWVzdGFtcCArICJcIj4iOwogICAgICAgICAgICAg
ICAgICAgICAgICB0YWJsZUNvbnRlbnQgKz0gIjxzcGFuIGNsYXNzPVwibWREYXRhIG1hcmtldE5h
bWVcIj48YSBocmVmPVwiIiArIHRoYXQuY29uZmlndXJhdGlvbi5pbmRleExpbmtVUkwgKyBkYXRh
Rm9ySW5kZXguc3ltc2lkICsgIlwiIGNsYXNzPVwibWRfaW5kZXhcIiA+IiArIG5hbWUgKyAiPC9h
Pjwvc3Bhbj4iOwogICAgICAgICAgICAgICAgICAgICAgICB0YWJsZUNvbnRlbnQgKz0gIjxzcGFu
IGNsYXNzPVwibWREYXRhIG1hcmtldFZhbHVlXCI+IiArIGxhc3RUcmFkZSArICI8L3NwYW4+IjsK
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbHNBcnJheVtrXSAhPSAiVVNUWU4iKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZUNvbnRlbnQgKz0gIjxzcGFuIGNsYXNz
PVwibWREYXRhIG1hcmtldERlbHRhXCI+IiArIGRpZmZlcmVuY2UgKyAiPC9zcGFuPiI7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0YWJsZUNvbnRlbnQgKz0gIjxzcGFuIGNsYXNzPVwibWRE
YXRhIG1hcmtldFZhbHVlXCI+IiArIHBlcmNlbnRhZ2UgKyAiJTwvc3Bhbj4iOwogICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVD
b250ZW50ICs9ICI8c3BhbiBjbGFzcz1cIm1kRGF0YVwiPjwvc3Bhbj4iOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGFibGVDb250ZW50ICs9ICI8c3BhbiBjbGFzcz1cIm1kRGF0YVwiPjwv
c3Bhbj4iOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg
IHRhYmxlQ29udGVudCArPSAiPC9saT4iOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmly
c3RJbmRleE9uTGlzdCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5yZW5kZXJD
aGFydFdpdGhDb250YWluZXJBbmRTeW1ib2wodGhhdC5jb25maWd1cmF0aW9uLmNoYXJ0Q29udGFp
bmVyICsgdGhhdC5jb25maWd1cmF0aW9uLmRlZmF1bHRTeW1ib2xzW2pdLnRhYiwgbXdTeW1ib2ws
IHN5bWJvbHNBcnJheVtrXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lU3RhbXAg
PSBkYXRhRm9ySW5kZXgudGltZXN0YW1wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmly
c3RJbmRleE9uTGlzdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAg
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoYXQuY29uZmlndXJhdGlvbi5kYXRhQ29udGFpbmVy
ICsgdGhhdC5jb25maWd1cmF0aW9uLmRlZmF1bHRTeW1ib2xzW2pdLnRhYikuaW5uZXJIVE1MID0g
dGFibGVDb250ZW50OwogICAgICAgIH0KICAgICAgICB0aGF0LnRpbWVTdGFtcC5pbm5lckhUTUwg
PSB0aW1lU3RhbXA7CiAgICB9LAogICAgYWRkQ29tbWFzOiBmdW5jdGlvbiAoblN0cikgewogICAg
ICAgIG5TdHIgKz0gJyc7CiAgICAgICAgdmFyIHggPSBuU3RyLnNwbGl0KCcuJyk7CiAgICAgICAg
dmFyIHgxID0geFswXTsKICAgICAgICB2YXIgeDIgPSB4Lmxlbmd0aCA+IDEgPyAnLicgKyB4WzFd
IDogJyc7CiAgICAgICAgdmFyIHJneCA9IC8oXGQrKShcZHszfSkvOwogICAgICAgIHdoaWxlIChy
Z3gudGVzdCh4MSkpIHsKICAgICAgICAgICAgeDEgPSB4MS5yZXBsYWNlKHJneCwgJyQxJyArICcs
JyArICckMicpOwogICAgICAgIH0KICAgICAgICByZXR1cm4geDEgKyB4MjsKICAgIH0sCiAgICBj
cmVhdGVQYW5lbHM6IGZ1bmN0aW9uIChjb250YWluZXIpIHsKICAgICAgICB2YXIgdGhhdCA9IHRo
aXM7CiAgICAgICAgdGhhdC5jb25maWd1cmF0aW9uLnRhYnMgPSBbIm15bWFya2V0cyIsICJ1cyIs
ICJldXJvcGUiLCAiYXNpYSIsICJjdXJyZW5jeXJhdGVzIl07CiAgICAgICAgcmV0dXJuIGRqLndp
ZGdldC5wYW5lbHMuUGFuZWxzRmFjdG9yeS5jcmVhdGUoY29udGFpbmVyLCB7CiAgICAgICAgICAg
IGNvcmU6IHsKICAgICAgICAgICAgICAgIHBhbmVsUHJlZml4OiAibWFya2V0RGF0YVBhbmVsXyIs
CiAgICAgICAgICAgICAgICBwYW5lbHM6IHRoYXQuY29uZmlndXJhdGlvbi50YWJzLAogICAgICAg
ICAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsCiAgICAgICAgICAgICAgICBhY3RpdmVQYW5l
bDogdGhhdC5jb25maWd1cmF0aW9uLmRlZmF1bHRUYWIKICAgICAgICAgICAgfSwKICAgICAgICAg
ICAgdGFiczogewogICAgICAgICAgICAgICAgdGFiUHJlZml4OiAibWFya2V0RGF0YVRhYl8iLAog
ICAgICAgICAgICAgICAgdGFiT25TdHlsZTogInNlbGVjdGVkVGFiIiwKICAgICAgICAgICAgICAg
IHRhYk9mZlN0eWxlOiAiZGVzZWxlY3RlZCIKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAg
fQp9Owpkb2pvLnByb3ZpZGUoImRqLm1vZHVsZS5tYXJrZXRkYXRhLmNoYXJ0Iik7CmRvam8ucmVx
dWlyZSgiZGoubW9kdWxlLm1hcmtldGRhdGEudGh1bmRlcmJhbGwiKTsKZG9qby5yZXF1aXJlKCJk
ai5tb2R1bGUubWFya2V0ZGF0YS5tYXJrZXR3YXRjaCIpOwp2YXIgV1NKSW5kZXhDaGFydFN0eWxl
ID0gewogICAgYmFja2dyb3VuZDogIiNmZmZmZmYiLAogICAgYm9yZGVyOiAiI0U2RTJENyIsCiAg
ICBjbG9zZWxpbmVTdHlsZTogIiNlMzY4MjUiLAogICAgaG9yaXpvbnRhbEdyaWRMaW5lU3R5bGU6
ICIjZjRmM2YxIiwKICAgIGhpZ2hJbmRpY2F0b3JTdHlsZTogIiMwOTNjNzEiLAogICAgaGlnaGxv
d0xpbmVTdHlsZTogIiMwMTUxOTAiLAogICAgbG93SW5kaWNhdG9yU3R5bGU6ICIjMDkzYzcxIiwK
ICAgIG1haW5MaW5lU3R5bGU6ICIjNTU3QkEwIiwKICAgIG1haW5QcmljZUxpbmVGaWxsOiAicmdi
YSg4NSwxMjMsMTYwLDAuMTUpIiwKICAgIG1haW5QcmljZUxpbmVXaWR0aDogMSwKICAgIG1heFBy
aWNlTGluZXM6IDQsCiAgICB2ZXJ0aWNhbEdyaWRMaW5lU3R5bGU6ICJyZ2JhKDE4MCwyMDEsMjAy
LDAuNSkiLAogICAgdmVydGljYWxHcmlkTGluZVN0eWxlX09wYXF1ZTogInJnYmEoMTgwLDIwMSwy
MDIsMS4wKSIsCiAgICB2UGFkZGluZzogMTIsCiAgICBZQXhpc0xhYmVsU3R5bGU6IDEsCiAgICBZ
QXhpc0xhYmVsSGVpZ2h0OiAxMiwKICAgIHNob3dEZWNpbWFsczogMSwKICAgIHJlZ2lvblN0eWxl
czogewogICAgICAgIDA6ICcjY2RlMmUwJywKICAgICAgICAxOiAnI2NkZTJlMCcsCiAgICAgICAg
MjogJ3JnYmEoNTEsNTEsNTEsMC4wNiknCiAgICB9LAogICAgY29tcGFyZWxpbmVTdHlsZXM6IHsK
ICAgICAgICAwOiAnI2NjMzMzMycsCiAgICAgICAgMTogJyMzYjhkYWQnLAogICAgICAgIDI6ICcj
Yzk5MzJlJywKICAgICAgICAzOiAnI2I3ODM4MycsCiAgICAgICAgNDogJyM4ZWIzYmMnLAogICAg
ICAgIDU6ICcjZGJiNzgyJwogICAgfQp9OwoKZnVuY3Rpb24gTGVnYWN5Q2hhcnQoY29udGFpbmVy
LCBsZWdhY3lRdWVyeVN0cmluZywgd2lkdGgsIGhlaWdodCkgewogICAgdmFyIF9jaGFydEJveCA9
IGRvam8uYnlJZChjb250YWluZXIpOwogICAgdmFyIF9sZWdhY3lRdWVyeVN0cmluZyA9IGxlZ2Fj
eVF1ZXJ5U3RyaW5nOwogICAgdmFyIF93aWR0aCA9IHdpZHRoOwogICAgdmFyIF9oZWlnaHQgPSBo
ZWlnaHQ7CiAgICB2YXIgX2N1cnJlbnRzeW1ib2wgPSBudWxsOwogICAgdmFyIHN0YXJ0ID0gbGVn
YWN5UXVlcnlTdHJpbmcuaW5kZXhPZigic3ltYj0iKSArIDU7CiAgICB2YXIgZW5kID0gbGVnYWN5
UXVlcnlTdHJpbmcuaW5kZXhPZigiJiIsIHN0YXJ0KTsKICAgIGlmIChlbmQgPT0gLTEpIHsKICAg
ICAgICBfY3VycmVudHN5bWJvbCA9IGxlZ2FjeVF1ZXJ5U3RyaW5nLnN1YnN0cihzdGFydCkudG9V
cHBlckNhc2UoKTsKICAgIH0gZWxzZSB7CiAgICAgICAgX2N1cnJlbnRzeW1ib2wgPSBsZWdhY3lR
dWVyeVN0cmluZy5zdWJzdHIoc3RhcnQsIGVuZCAtIHN0YXJ0KS50b1VwcGVyQ2FzZSgpOwogICAg
fQogICAgdmFyIF9zaG93Q2hhcnQgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIF9jaGFydEJv
eC5pbm5lckhUTUwgPSAiIjsKICAgICAgICAgICAgX2RqbC5wbGFjZSgnPGltZyBzcmM9Ii8vd3d3
Lm1hcmtldHdhdGNoLmNvbS9jaGFydHMvYmlnLmNoYXJ0JyArIF9sZWdhY3lRdWVyeVN0cmluZyAr
ICciIC8+JywgX2NoYXJ0Qm94KTsKICAgICAgICB9OwogICAgcmV0dXJuIHsKICAgICAgICBTaG93
Q2hhcnQ6IGZ1bmN0aW9uIChzeW1ib2wpIHsKICAgICAgICAgICAgaWYgKHN5bWJvbCAhPSBudWxs
ICYmIHN5bWJvbCAhPSB1bmRlZmluZWQgJiYgX2N1cnJlbnRzeW1ib2wgIT0gc3ltYm9sLnRvVXBw
ZXJDYXNlKCkpIHsKICAgICAgICAgICAgICAgIF9jdXJyZW50c3ltYm9sID0gc3ltYm9sLnRvVXBw
ZXJDYXNlKCk7CiAgICAgICAgICAgICAgICBfbGVnYWN5UXVlcnlTdHJpbmcgPSBfbGVnYWN5UXVl
cnlTdHJpbmcucmVwbGFjZSgvc2lkPVteJl5cbl0qL2ksICJzaWQ9Iik7CiAgICAgICAgICAgICAg
ICBpZiAoX2N1cnJlbnRzeW1ib2wuaW5kZXhPZigiVVM6Q1JVREUgT0lMIC0gRUxFQ1RST05JQyIp
ID4gLTEpIHsKICAgICAgICAgICAgICAgICAgICBfbGVnYWN5UXVlcnlTdHJpbmcgPSBfbGVnYWN5
UXVlcnlTdHJpbmcucmVwbGFjZSgvc3ltYj1bXiZeXG5dKi9pLCAic3ltYj0iKTsKICAgICAgICAg
ICAgICAgICAgICBpZiAoX2xlZ2FjeVF1ZXJ5U3RyaW5nLmluZGV4T2YoInNpZD0iKSA+IC0xKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIF9sZWdhY3lRdWVyeVN0cmluZyA9IF9sZWdhY3lRdWVy
eVN0cmluZy5yZXBsYWNlKC9zaWQ9W14mXlxuXSovaSwgInNpZD0zMzQzNzI0Iik7CiAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgX2xlZ2FjeVF1ZXJ5
U3RyaW5nID0gX2xlZ2FjeVF1ZXJ5U3RyaW5nICsgIiZzaWQ9MzM0MzcyNCI7CiAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChfY3VycmVudHN5bWJvbC5pbmRl
eE9mKCJVUzpGVVRVUkUtVVMtR09MRCIpID4gLTEpIHsKICAgICAgICAgICAgICAgICAgICBfbGVn
YWN5UXVlcnlTdHJpbmcgPSBfbGVnYWN5UXVlcnlTdHJpbmcucmVwbGFjZSgvc3ltYj1bXiZeXG5d
Ki9pLCAic3ltYj0iKTsKICAgICAgICAgICAgICAgICAgICBpZiAoX2xlZ2FjeVF1ZXJ5U3RyaW5n
LmluZGV4T2YoInNpZD0iKSA+IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9sZWdhY3lR
dWVyeVN0cmluZyA9IF9sZWdhY3lRdWVyeVN0cmluZy5yZXBsYWNlKC9zaWQ9W14mXlxuXSovaSwg
InNpZD0xNzgyNjYxIik7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgX2xlZ2FjeVF1ZXJ5U3RyaW5nID0gX2xlZ2FjeVF1ZXJ5U3RyaW5nICsgIiZz
aWQ9MTc4MjY2MSI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNl
IGlmIChfY3VycmVudHN5bWJvbC5pbmRleE9mKCJEWDpEQVgiKSA+IC0xKSB7CiAgICAgICAgICAg
ICAgICAgICAgX2xlZ2FjeVF1ZXJ5U3RyaW5nID0gX2xlZ2FjeVF1ZXJ5U3RyaW5nLnJlcGxhY2Uo
L3N5bWI9W14mXlxuXSovaSwgInN5bWI9Iik7CiAgICAgICAgICAgICAgICAgICAgaWYgKF9sZWdh
Y3lRdWVyeVN0cmluZy5pbmRleE9mKCJzaWQ9IikgPiAtMSkgewogICAgICAgICAgICAgICAgICAg
ICAgICBfbGVnYWN5UXVlcnlTdHJpbmcgPSBfbGVnYWN5UXVlcnlTdHJpbmcucmVwbGFjZSgvc2lk
PVteJl5cbl0qL2ksICJzaWQ9MTI1Mjg0Iik7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgX2xlZ2FjeVF1ZXJ5U3RyaW5nID0gX2xlZ2FjeVF1ZXJ5
U3RyaW5nICsgIiZzaWQ9MTI1Mjg0IjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIF9sZWdhY3lRdWVyeVN0cmluZyA9IF9s
ZWdhY3lRdWVyeVN0cmluZy5yZXBsYWNlKC9zeW1iPVteJl5cbl0qL2ksICJzeW1iPSIgKyBfY3Vy
cmVudHN5bWJvbCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAg
X3Nob3dDaGFydCgpOwogICAgICAgIH0sCiAgICAgICAgVGlja1N1YnNjcmliZTogZnVuY3Rpb24g
KCkge30sCiAgICAgICAgVXBkYXRlQWxsQ2hhcnRzOiBmdW5jdGlvbiAodGltZSwgZnJlcSwgc3Rh
cnRkYXRlLCBlbmRkYXRlKSB7CiAgICAgICAgICAgIHRoaXMuVXBkYXRlQ2hhcnQodGltZSwgZnJl
cSwgc3RhcnRkYXRlLCBlbmRkYXRlKTsKICAgICAgICB9LAogICAgICAgIFVwZGF0ZUNoYXJ0OiBm
dW5jdGlvbiAodGltZSwgZnJlcSwgc3RhcnRkYXRlLCBlbmRkYXRlKSB7CiAgICAgICAgICAgIF9s
ZWdhY3lRdWVyeVN0cmluZyA9IF9sZWdhY3lRdWVyeVN0cmluZy5yZXBsYWNlKC9mcmVxPVteJl5c
bl0qL2ksICJmcmVxPSIgKyBmcmVxKTsKICAgICAgICAgICAgaWYgKHRpbWUgPT0gbnVsbCB8fCB0
aW1lID09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgX2xlZ2FjeVF1ZXJ5U3RyaW5nID0g
X2xlZ2FjeVF1ZXJ5U3RyaW5nLnJlcGxhY2UoL3RpbWU9W14mXlxuXSovaSwgInRpbWU9Iik7CiAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBfbGVnYWN5UXVlcnlTdHJpbmcgPSBf
bGVnYWN5UXVlcnlTdHJpbmcucmVwbGFjZSgvdGltZT1bXiZeXG5dKi9pLCAidGltZT0iICsgdGlt
ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHN0YXJ0ZGF0ZSA9PSBudWxsIHx8IHN0
YXJ0ZGF0ZSA9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgIF9sZWdhY3lRdWVyeVN0cmlu
ZyA9IF9sZWdhY3lRdWVyeVN0cmluZy5yZXBsYWNlKC9zdGFydGRhdGU9W14mXlxuXSovaSwgInN0
YXJ0ZGF0ZT0iKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlmIChfbGVn
YWN5UXVlcnlTdHJpbmcuaW5kZXhPZigic3RhcnRkYXRlPSIpID4gLTEpIHsKICAgICAgICAgICAg
ICAgICAgICBfbGVnYWN5UXVlcnlTdHJpbmcgPSBfbGVnYWN5UXVlcnlTdHJpbmcucmVwbGFjZSgv
c3RhcnRkYXRlPVteJl5cbl0qL2ksICJzdGFydGRhdGU9IiArIHN0YXJ0ZGF0ZSk7CiAgICAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIF9sZWdhY3lRdWVyeVN0cmluZyA9
IF9sZWdhY3lRdWVyeVN0cmluZyArICImc3RhcnRkYXRlPSIgKyBzdGFydGRhdGU7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGVuZGRhdGUgPT0gbnVsbCB8
fCBlbmRkYXRlICE9IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgX2xlZ2FjeVF1ZXJ5U3Ry
aW5nID0gX2xlZ2FjeVF1ZXJ5U3RyaW5nLnJlcGxhY2UoL2VuZGRhdGU9W14mXlxuXSovaSwgImVu
ZGRhdGU9Iik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoX2xlZ2Fj
eVF1ZXJ5U3RyaW5nLmluZGV4T2YoImVuZGRhdGU9IikgPiAtMSkgewogICAgICAgICAgICAgICAg
ICAgIF9sZWdhY3lRdWVyeVN0cmluZyA9IF9sZWdhY3lRdWVyeVN0cmluZy5yZXBsYWNlKC9lbmRk
YXRlPVteJl5cbl0qL2ksICJlbmRkYXRlPSIgKyBlbmRkYXRlKTsKICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgX2xlZ2FjeVF1ZXJ5U3RyaW5nID0gX2xlZ2FjeVF1
ZXJ5U3RyaW5nICsgIiZlbmRkYXRlPSIgKyBlbmRkYXRlOwogICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICB9CiAgICAgICAgICAgIF9zaG93Q2hhcnQoKTsKICAgICAgICB9LAogICAgICAgIENo
YW5nZVN5bWJvbDogZnVuY3Rpb24gKHN5bWJvbCkgewogICAgICAgICAgICB2YXIgc3ltYm9scyA9
IHN5bWJvbC50b1VwcGVyQ2FzZSgpLnNwbGl0KCd8Jyk7CiAgICAgICAgICAgIF9jdXJyZW50c3lt
Ym9sID0gc3ltYm9sc1swXTsKICAgICAgICAgICAgX2xlZ2FjeVF1ZXJ5U3RyaW5nID0gX2xlZ2Fj
eVF1ZXJ5U3RyaW5nLnJlcGxhY2UoL3N5bWI9W14mXlxuXSovaSwgInN5bWI9IiArIF9jdXJyZW50
c3ltYm9sKTsKICAgICAgICAgICAgaWYgKHN5bWJvbHMubGVuZ3RoID4gMSkgewogICAgICAgICAg
ICAgICAgaWYgKF9sZWdhY3lRdWVyeVN0cmluZy5pbmRleE9mKCJjb21waWR4PSIpID4gLTEpIHsK
ICAgICAgICAgICAgICAgICAgICBfbGVnYWN5UXVlcnlTdHJpbmcgPSBfbGVnYWN5UXVlcnlTdHJp
bmcucmVwbGFjZSgvY29tcGlkeD1bXiZeXG5dKi9pLCAiY29tcGlkeD0iICsgc3ltYm9sc1sxXSk7
CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIF9sZWdhY3lRdWVy
eVN0cmluZyA9IF9sZWdhY3lRdWVyeVN0cmluZyArICImY29tcGlkeD0iICsgc3ltYm9sc1sxXTsK
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIF9s
ZWdhY3lRdWVyeVN0cmluZyA9IF9sZWdhY3lRdWVyeVN0cmluZy5yZXBsYWNlKC9jb21waWR4PVte
Jl5cbl0qL2ksICJjb21waWR4PSIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzeW1i
b2xzLmxlbmd0aCA+IDIpIHsKICAgICAgICAgICAgICAgIHZhciBjb21wID0gIiI7CiAgICAgICAg
ICAgICAgICBmb3IgKHZhciBpID0gMjsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHsKICAgICAg
ICAgICAgICAgICAgICBpZiAoY29tcC5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbXAgPSBjb21wICsgIiwiOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICBjb21wID0gY29tcCArIHN5bWJvbHNbaV07CiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICBpZiAoX2xlZ2FjeVF1ZXJ5U3RyaW5nLmluZGV4T2YoImNvbXA9IikgPiAtMSkg
ewogICAgICAgICAgICAgICAgICAgIF9sZWdhY3lRdWVyeVN0cmluZyA9IF9sZWdhY3lRdWVyeVN0
cmluZy5yZXBsYWNlKC9jb21wPVteJl5cbl0qL2ksICJjb21wPSIgKyBjb21wKTsKICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgX2xlZ2FjeVF1ZXJ5U3RyaW5nID0g
X2xlZ2FjeVF1ZXJ5U3RyaW5nICsgIiZjb21wPSIgKyBjb21wOwogICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgX2xlZ2FjeVF1ZXJ5U3RyaW5nID0g
X2xlZ2FjeVF1ZXJ5U3RyaW5nLnJlcGxhY2UoL2NvbXA9W14mXlxuXSovaSwgImNvbXA9Iik7CiAg
ICAgICAgICAgIH0KICAgICAgICAgICAgX3Nob3dDaGFydCgpOwogICAgICAgIH0sCiAgICAgICAg
U2V0Q2hhcnRSZWZyZXNoOiBmdW5jdGlvbiAocmF0ZSkgewogICAgICAgICAgICBzZXRJbnRlcnZh
bChfc2hvd0NoYXJ0LCByYXRlKTsKICAgICAgICB9CiAgICB9Cn0KCmZ1bmN0aW9uIEVtYmVkZGVk
Q2hhcnQoY29udGFpbmVyLCBzdHlsZSwgd2lkdGgsIGhlaWdodCwgdGltZSwgZnJlcSwgc3RhcnRk
YXRlLCBlbmRkYXRlLCBjaGFydGRhdGEsIHN5bWJvbCkgewogICAgdmFyIF9jaGFydEJveCA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKGNvbnRhaW5lcik7CiAgICB2YXIgX3N0eWxlID0gc3R5bGU7
CiAgICB2YXIgX3dpZHRoID0gd2lkdGg7CiAgICB2YXIgX2hlaWdodCA9IGhlaWdodDsKICAgIHZh
ciBfdGltZSA9IHRpbWU7CiAgICB2YXIgX2ZyZXEgPSBmcmVxOwogICAgdmFyIF9zdGFydGRhdGUg
PSBzdGFydGRhdGU7CiAgICB2YXIgX2VuZGRhdGUgPSBlbmRkYXRlOwogICAgdmFyIF9wYWdlZGF0
YSA9IG51bGw7CiAgICB2YXIgX2N1cnJlbnRzeW1ib2wgPSBudWxsOwogICAgdmFyIF9maXJzdHN5
bWJvbCA9IHN5bWJvbDsKICAgIHZhciBfc3ltYm9sQ291bnQgPSAwOwogICAgdmFyIF9jaGFydCA9
IG51bGw7CiAgICB2YXIgX3RpY2sgPSBmYWxzZTsKICAgIHZhciBfdGlja3RpbWVvdXQgPSBudWxs
OwogICAgdmFyIF9jdXJyZW50Y2hhbm5lbCA9IG51bGw7CiAgICB2YXIgX2Nvbm5lY3Rpb24gPSBu
dWxsOwogICAgdmFyIF91cmwgPSAiL01hcmtldC9FQ1Byb3h5L0NoYXJ0RGF0YSI7CiAgICB2YXIg
X3NldFBhZ2VEYXRhID0gZnVuY3Rpb24gKGRhdGEpIHsKICAgICAgICAgICAgaWYgKGRhdGEgIT0g
bnVsbCAmJiBkYXRhICE9IHVuZGVmaW5lZCAmJiBkYXRhLmxlbmd0aCA+IDApIHsKICAgICAgICAg
ICAgICAgIGlmIChfcGFnZWRhdGEgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgIF9wYWdl
ZGF0YSA9IFtdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFb
aV0uVmFsdWUgIT0gbnVsbCAmJiBkYXRhW2ldLlZhbHVlICE9IHVuZGVmaW5lZCAmJiBkYXRhW2ld
LktleSAhPSAnJykgewogICAgICAgICAgICAgICAgICAgICAgICBfcGFnZWRhdGFbZGF0YVtpXS5L
ZXldID0gZGF0YVtpXS5WYWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9wYWdlZGF0
YVtkYXRhW2ldLktleV0uRGF0YSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKHZhciBqID0gMDsgaiA8IF9wYWdlZGF0YVtkYXRhW2ldLktleV0uRGF0YS5sZW5ndGg7
IGorKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBr
IDwgX3BhZ2VkYXRhW2RhdGFbaV0uS2V5XS5EYXRhW2pdLlZhbHVlLlNlc3Npb25zLmxlbmd0aDsg
aysrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZXNzaW9uID0g
X3BhZ2VkYXRhW2RhdGFbaV0uS2V5XS5EYXRhW2pdLlZhbHVlLlNlc3Npb25zW2tdOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLlN0YXJ0ID0gbmV3IERhdGUoVGh1
bmRlcmJhbGwuVXRpbGl0aWVzLkZvcm1hdERhdGUoc2Vzc2lvbi5TdGFydCkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLlN0b3AgPSBuZXcgRGF0ZShUaHVuZGVy
YmFsbC5VdGlsaXRpZXMuRm9ybWF0RGF0ZShzZXNzaW9uLlN0b3ApKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB2YXIgX3Nob3dDaGFydCA9IGZ1bmN0aW9uIChz
eW1ib2wpIHsKICAgICAgICAgICAgaWYgKF9wYWdlZGF0YSA9PSBudWxsKSB7CiAgICAgICAgICAg
ICAgICBfY2hhcnQgPSBuZXcgSlNDaGFydChfY2hhcnRCb3gsIHN5bWJvbC5zcGxpdCgnfCcpLCBf
d2lkdGgsIF9oZWlnaHQsIF9zdHlsZSwgX2ZyZXEsIF90aW1lLCBfc3RhcnRkYXRlLCBfZW5kZGF0
ZSwgdW5kZWZpbmVkLCBNYXJrZXRXYXRjaC5nZXRCYXNlVXJsKCkgKyBfdXJsKTsKICAgICAgICAg
ICAgICAgIF9jdXJyZW50c3ltYm9sID0gc3ltYm9sOwogICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgaWYgKHN5bWJvbCAhPSBfY3VycmVudHN5bWJvbCkgewogICAgICAgICAgICAg
ICAgICAgIGlmIChfY2hhcnQgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICBfcGFn
ZWRhdGFbX2N1cnJlbnRzeW1ib2xdID0gX2NoYXJ0LmRhdGE7CiAgICAgICAgICAgICAgICAgICAg
ICAgIF9jaGFydC5kYXRhID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAgX2NoYXJ0ID0g
bnVsbDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdmFyIHN5bWJv
bHMgPSBzeW1ib2wuc3BsaXQoJ3wnKTsKICAgICAgICAgICAgICAgICAgICBfY2hhcnQgPSBuZXcg
SlNDaGFydChfY2hhcnRCb3gsIHN5bWJvbHMsIF93aWR0aCwgX2hlaWdodCwgX3N0eWxlLCBfZnJl
cSwgX3RpbWUsIF9zdGFydGRhdGUsIF9lbmRkYXRlLCBfcGFnZWRhdGFbc3ltYm9sXSwgTWFya2V0
V2F0Y2guZ2V0QmFzZVVybCgpICsgX3VybCk7CiAgICAgICAgICAgICAgICAgICAgX2N1cnJlbnRz
eW1ib2wgPSBzeW1ib2w7CiAgICAgICAgICAgICAgICAgICAgX3N5bWJvbENvdW50ID0gc3ltYm9s
cy5sZW5ndGg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICBf
c2V0UGFnZURhdGEoY2hhcnRkYXRhKTsKICAgIHZhciBfcmVmcmVzaFBhZ2VEYXRhID0gZnVuY3Rp
b24gKCkgewogICAgICAgICAgICB2YXIgc3ltYm9scyA9IFtdCiAgICAgICAgICAgIGZvciAodmFy
IHN5bWJvbCBpbiBfcGFnZWRhdGEpIHsKICAgICAgICAgICAgICAgIHN5bWJvbHMucHVzaChzeW1i
b2wpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF9yZWZyZXNoRGF0YShzeW1ib2xzLCAibW8i
KTsKICAgICAgICB9CiAgICB2YXIgX3JlZnJlc2hEYXRhID0gZnVuY3Rpb24gKHN5bWJvbHMsIGNh
Y2hla2V5KSB7CiAgICAgICAgICAgIHJlcXVlc3RPYmplY3QgPSB7CiAgICAgICAgICAgICAgICBm
cmVxOiBfZnJlcSwKICAgICAgICAgICAgICAgIHRpbWU6IF90aW1lLAogICAgICAgICAgICAgICAg
U3ltYm9sOiBzeW1ib2xzLAogICAgICAgICAgICAgICAgU3RhcnREYXRlOiBfc3RhcnRkYXRlLAog
ICAgICAgICAgICAgICAgRW5kRGF0ZTogX2VuZGRhdGUsCiAgICAgICAgICAgICAgICBXaWR0aDog
X3dpZHRoLAogICAgICAgICAgICAgICAgSGVpZ2h0OiBfaGVpZ2h0LAogICAgICAgICAgICAgICAg
Q2FjaGVLZXk6IGNhY2hla2V5CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIF9kamwucmF3WGhy
UG9zdCh7CiAgICAgICAgICAgICAgICB1cmw6IE1hcmtldFdhdGNoLmdldEJhc2VVcmwoKSArIF91
cmwsCiAgICAgICAgICAgICAgICBwb3N0RGF0YTogcmVxdWVzdE9iamVjdCwKICAgICAgICAgICAg
ICAgIGhhbmRsZUFzOiAianNvbiIsCiAgICAgICAgICAgICAgICBsb2FkOiBmdW5jdGlvbiAocmVz
cG9uc2UsIGlvQXJncykgewogICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZSAhPSBudWxs
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9zZXRQYWdlRGF0YShyZXNwb25zZSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKF9jaGFydCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2hh
cnQuZGF0YSA9IF9wYWdlZGF0YVtfY3VycmVudHN5bWJvbF07CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfY2hhcnQuX2RpZExvYWQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICByZXF1ZXN0T2JqZWN0
ID0gbnVsbDsKICAgICAgICB9CiAgICB2YXIgX3JlbG9hZENoYXJ0ID0gZnVuY3Rpb24gKCkgewog
ICAgICAgICAgICBpZiAoX2NoYXJ0ICE9IG51bGwpIHsKICAgICAgICAgICAgICAgIF9jaGFydC50
aW1lID0gX3RpbWU7CiAgICAgICAgICAgICAgICBfY2hhcnQuZnJlcSA9IF9mcmVxOwogICAgICAg
ICAgICAgICAgX2NoYXJ0LnN0YXJ0RGF0ZSA9IF9zdGFydGRhdGU7CiAgICAgICAgICAgICAgICBf
Y2hhcnQuZW5kRGF0ZSA9IF9lbmRkYXRlOwogICAgICAgICAgICAgICAgX2NoYXJ0LnJlbG9hZCgp
OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgcmV0dXJuIHsKICAgICAgICBTaG93Q2hhcnQ6
IGZ1bmN0aW9uIChzeW1ib2wpIHsKICAgICAgICAgICAgaWYgKHN5bWJvbCA9PT0gdW5kZWZpbmVk
KSB7CiAgICAgICAgICAgICAgICBzeW1ib2wgPSBfZmlyc3RzeW1ib2w7CiAgICAgICAgICAgIH0K
ICAgICAgICAgICAgc3ltYm9sID0gc3ltYm9sLnRvVXBwZXJDYXNlKCk7CiAgICAgICAgICAgIGlm
IChzeW1ib2wgIT0gX2N1cnJlbnRzeW1ib2wpIHsKICAgICAgICAgICAgICAgIGlmIChfcGFnZWRh
dGFbc3ltYm9sXSAhPT0gbnVsbCAmJiBfcGFnZWRhdGFbc3ltYm9sXSAhPT0gdW5kZWZpbmVkKSB7
CiAgICAgICAgICAgICAgICAgICAgX3Nob3dDaGFydChzeW1ib2wpOwogICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAg
ICB9LAogICAgICAgIFRpY2tTdWJzY3JpYmU6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgaWYg
KF9jaGFydCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICBfdGljayA9IHRydWU7CiAgICAgICAg
ICAgICAgICB2YXIgY2hhcnRTdWJzY3JpYmVDYWxsYmFjayA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfY2hhcnQgIT0gbnVsbCAmJiBfY2hhcnQuZGF0
YSAhPSBudWxsICYmIF9zeW1ib2xDb3VudCA9PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKHZhciBzeW1ib2wgaW4gX3BhZ2VkYXRhKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfcGFnZWRhdGFbc3ltYm9sXS5EYXRhLmxl
bmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfcGFn
ZWRhdGFbc3ltYm9sXS5EYXRhW2ldLlZhbHVlLkJsdWVHcmFzc0NoYW5uZWwgIT0gbnVsbCAmJiBf
cGFnZWRhdGFbc3ltYm9sXS5EYXRhW2ldLlZhbHVlLkJsdWVHcmFzc0NoYW5uZWwudG9Mb3dlckNh
c2UoKSA9PSBtZXNzYWdlLmgudCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHN5bWJvbC50b1VwcGVyQ2FzZSgpID09PSBfY3VycmVudHN5bWJvbC50b1VwcGVy
Q2FzZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2No
YXJ0LmFkZFRpY2soc3ltYm9sLCBtZXNzYWdlLmIueiwgbWVzc2FnZS5iLmwsIG1lc3NhZ2UuYi5l
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIHZhciBjaGFydENvbm5lY3Rpb25DYWxsYmFj
ayA9IGZ1bmN0aW9uIChjb25uZWN0aW9uLCB0eXBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh0eXBlID09ICJjb25uZWN0IikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Nv
bm5lY3Rpb24gPSBjb25uZWN0aW9uOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9w
YWdlZGF0YVtfY3VycmVudHN5bWJvbF0gIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9jdXJyZW50Y2hhbm5lbCA9IF9jb25uZWN0aW9uLnN1YnNjcmliZShfcGFnZWRh
dGFbX2N1cnJlbnRzeW1ib2xdLkRhdGFbMF0uVmFsdWUuQmx1ZUdyYXNzQ2hhbm5lbCwgY2hhcnRT
dWJzY3JpYmVDYWxsYmFjayk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAg
aWYgKF9jdXJyZW50Y2hhbm5lbCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgX2N1cnJl
bnRjaGFubmVsLnJlbW92ZUNhbGxiYWNrKGNoYXJ0U3Vic2NyaWJlQ2FsbGJhY2spOwogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKF9jb25uZWN0aW9uICE9IG51bGwpIHsKICAg
ICAgICAgICAgICAgICAgICBpZiAoX3BhZ2VkYXRhW19jdXJyZW50c3ltYm9sXSAhPSBudWxsKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIF9jdXJyZW50Y2hhbm5lbCA9IF9jb25uZWN0aW9uLnN1
YnNjcmliZShfcGFnZWRhdGFbX2N1cnJlbnRzeW1ib2xdLkRhdGFbMF0uVmFsdWUuQmx1ZUdyYXNz
Q2hhbm5lbCwgY2hhcnRTdWJzY3JpYmVDYWxsYmFjayk7CiAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAoQmx1ZUdyYXNz
ICE9PSBudWxsICYmIEJsdWVHcmFzcy5SdW50aW1lICE9PSBudWxsKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIEJsdWVHcmFzcy5SdW50aW1lLm9wZW5Db25uZWN0aW9uKHt9LCBjaGFydENvbm5l
Y3Rpb25DYWxsYmFjayk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBVcGRhdGVBbGxDaGFydHM6IGZ1bmN0aW9u
ICh0aW1lLCBmcmVxLCBzdGFydGRhdGUsIGVuZGRhdGUpIHsKICAgICAgICAgICAgaWYgKF9jaGFy
dCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICB0aGlzLlVwZGF0ZUNoYXJ0KHRpbWUsIGZyZXEs
IHN0YXJ0ZGF0ZSwgZW5kZGF0ZSk7CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KF9yZWZyZXNo
UGFnZURhdGEsIDUpOwogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBVcGRhdGVDaGFy
dDogZnVuY3Rpb24gKHRpbWUsIGZyZXEsIHN0YXJ0ZGF0ZSwgZW5kZGF0ZSkgewogICAgICAgICAg
ICBpZiAoX2NoYXJ0ICE9IG51bGwpIHsKICAgICAgICAgICAgICAgIF90aW1lID0gdGltZTsKICAg
ICAgICAgICAgICAgIF9mcmVxID0gZnJlcTsKICAgICAgICAgICAgICAgIF9zdGFydGRhdGUgPSBz
dGFydGRhdGU7CiAgICAgICAgICAgICAgICBfZW5kZGF0ZSA9IGVuZGRhdGU7CiAgICAgICAgICAg
ICAgICBfcmVsb2FkQ2hhcnQoKTsKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgQ2hh
bmdlU3ltYm9sOiBmdW5jdGlvbiAoc3ltYm9sKSB7CiAgICAgICAgICAgIGlmIChfY2hhcnQgIT0g
bnVsbCkgewogICAgICAgICAgICAgICAgX2N1cnJlbnRzeW1ib2wgPSBzeW1ib2w7CiAgICAgICAg
ICAgICAgICBfY2hhcnQuc2V0U3ltYm9scyhzeW1ib2wuc3BsaXQoJ3wnKSk7CiAgICAgICAgICAg
ICAgICBfc3ltYm9sQ291bnQgPSBfY2hhcnQuc3ltYm9scy5sZW5ndGg7CiAgICAgICAgICAgICAg
ICBfcmVsb2FkQ2hhcnQoKTsKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgU2V0Q2hh
cnRSZWZyZXNoOiBmdW5jdGlvbiAocmF0ZSkgewogICAgICAgICAgICBzZXRJbnRlcnZhbChfcmVm
cmVzaFBhZ2VEYXRhLCByYXRlKTsKICAgICAgICB9CiAgICB9Cn0KdmFyIEpTQ2hhcnQgPSBmdW5j
dGlvbiAodGFyZ2V0U2VsZWN0b3IsIHN5bWJvbHMsIHdpZHRoLCBoZWlnaHQsIHN0eWxlLCBmcmVx
LCB0aW1lLCBzdGFydERhdGUsIGVuZERhdGUsIGRhdGEsIHVybCkgewogICAgICAgIHRoaXMudGFy
Z2V0U2VsZWN0b3IgPSB0YXJnZXRTZWxlY3RvcjsKICAgICAgICBpZiAoc3R5bGUgPT09IHVuZGVm
aW5lZCkgewogICAgICAgICAgICB0aGlzLnN0eWxlID0gTGFyZ2VDaGFydFN0eWxlOwogICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMuc3R5bGUgPSBzdHlsZTsKICAgICAgICB9CiAgICAg
ICAgaWYgKHVybCAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIHRoaXMudXJsID0gdXJsOwog
ICAgICAgIH0KICAgICAgICB0aGlzLndpZHRoID0gd2lkdGg7CiAgICAgICAgdGhpcy5oZWlnaHQg
PSBoZWlnaHQ7CiAgICAgICAgdGhpcy5zeW1ib2xzID0gc3ltYm9sczsKICAgICAgICB0aGlzLnNl
bGVjdGVkU3ltYm9sID0gc3ltYm9sc1swXTsKICAgICAgICBpZiAoZnJlcSA9PT0gdW5kZWZpbmVk
KSB7CiAgICAgICAgICAgIHRoaXMuZnJlcSA9ICIxbWkiOwogICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgIHRoaXMuZnJlcSA9IGZyZXE7CiAgICAgICAgfQogICAgICAgIGlmICh0aW1lID09PSB1
bmRlZmluZWQpIHsKICAgICAgICAgICAgdGhpcy50aW1lID0gIjFkeSI7CiAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgdGhpcy50aW1lID0gdGltZTsKICAgICAgICB9CiAgICAgICAgaWYgKHN0
YXJ0RGF0ZSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlID0gc3Rh
cnREYXRlOwogICAgICAgIH0KICAgICAgICBpZiAoZW5kRGF0ZSAhPT0gdW5kZWZpbmVkKSB7CiAg
ICAgICAgICAgIHRoaXMuZW5kRGF0ZSA9IGVuZERhdGU7CiAgICAgICAgfQogICAgICAgIHZhciBz
ZWxmID0gdGhpczsKICAgICAgICBpZiAoZGF0YSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAg
ICQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgc2VsZi5yZWxvYWQoKTsKICAgICAgICAg
ICAgfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2VsZi5wcmVsb2FkKGRhdGEpOwog
ICAgICAgIH0KICAgIH07CkpTQ2hhcnQucHJvdG90eXBlID0gewogICAgZnJlcTogIjFtaSIsCiAg
ICB0aW1lOiAiMWR5IiwKICAgIHVuaXQ6ICJNaW51dGUiLAogICAgdXJsOiAiLi9IaXN0b3JpY0No
YXJ0RGF0YS5hc3B4IiwKICAgIHNwYW46IDEsCiAgICBzdGVwOiAxLAogICAgc3RhcnREYXRlOiAn
JywKICAgIGVuZERhdGU6ICcnLAogICAgZGF0YTogbnVsbCwKICAgIHNlbGVjdGVkU3ltYm9sOiBu
dWxsLAogICAgd2lkdGg6IDAsCiAgICBoZWlnaHQ6IDAsCiAgICBkcmF3aW5nQ29udGV4dDogbnVs
bCwKICAgIHN0eWxlOiBudWxsLAogICAgaGlnaFByaWNlOiBudWxsLAogICAgaGlnaFBvaW50OiB7
CiAgICAgICAgIngiOiBudWxsLAogICAgICAgICJ5IjogbnVsbAogICAgfSwKICAgIGxvd1BvaW50
OiB7CiAgICAgICAgIngiOiBudWxsLAogICAgICAgICJ5IjogbnVsbAogICAgfSwKICAgIGxvd1By
aWNlOiBudWxsLAogICAgbGFzdFBvaW50OiB7CiAgICAgICAgIngiOiBudWxsLAogICAgICAgICJ5
IjogbnVsbAogICAgfSwKICAgIGxhc3RQcmljZTogbnVsbCwKICAgIGNsb3NlUHJpY2U6IG51bGws
CiAgICBidWlsZFJlcXVlc3Q6IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgcmVxdWVzdE9iamVj
dDsKICAgICAgICB2YXIgc3ltYm9sID0gIiI7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0
aGlzLnN5bWJvbHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGkgPiAwKSB7CiAgICAg
ICAgICAgICAgICBzeW1ib2wgKz0gInwiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHN5bWJv
bCArPSB0aGlzLnN5bWJvbHNbaV07CiAgICAgICAgfQogICAgICAgIHJlcXVlc3RPYmplY3QgPSB7
CiAgICAgICAgICAgIGZyZXE6IHRoaXMuZnJlcSwKICAgICAgICAgICAgdGltZTogdGhpcy50aW1l
LAogICAgICAgICAgICBTeW1ib2w6IHN5bWJvbCwKICAgICAgICAgICAgU3RhcnREYXRlOiB0aGlz
LnN0YXJ0RGF0ZSwKICAgICAgICAgICAgRW5kRGF0ZTogdGhpcy5lbmREYXRlLAogICAgICAgICAg
ICBXaWR0aDogdGhpcy53aWR0aAogICAgICAgIH07CiAgICAgICAgcmV0dXJuIHJlcXVlc3RPYmpl
Y3Q7CiAgICB9LAogICAgbGFzdFRpY2tQcmljZTogMCwKICAgIGxhc3RUaWNrQ2hhbmdlOiAwLAog
ICAgbGFzdFRpY2tYOiAwLAogICAgYWRkVGljazogZnVuY3Rpb24gKHRpY2tTeW1ib2wsIFRpbWVz
dGFtcCwgUHJpY2UsIG9mZlNldCkgewogICAgICAgIHZhciB3aGVyZSA9IFRodW5kZXJiYWxsLlV0
aWxpdGllcy5hZGRUaWNrKHRoaXMuZGF0YSwgdGlja1N5bWJvbCwgVGltZXN0YW1wLCBQcmljZSwg
b2ZmU2V0KTsKICAgICAgICBpZiAod2hlcmUuSGlzdG9yaWNhbCA9PSBmYWxzZSkgewogICAgICAg
ICAgICBpZiAod2hlcmUueCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoUHJpY2UgIT0gdGhpcy5sYXN0VGlj
a1ByaWNlKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0VGlja0NoYW5nZSA9IFByaWNl
IC0gdGhpcy5sYXN0VGlja1ByaWNlOwogICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdFRpY2tQ
cmljZSA9IFByaWNlOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh3aGVyZS54ID09IHRoaXMu
bGFzdFRpY2tYKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgdGhpcy5sYXN0VGlja1ggPSB3aGVyZS54OwogICAgICAgICAgICAg
ICAgdGhpcy5fZGlkTG9hZCgpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSwKICAgIHNl
dFN5bWJvbHM6IGZ1bmN0aW9uIChzeW1ib2xzKSB7CiAgICAgICAgdGhpcy5zeW1ib2xzID0gc3lt
Ym9sczsKICAgICAgICB0aGlzLnNlbGVjdGVkU3ltYm9sID0gc3ltYm9sc1swXTsKICAgIH0sCiAg
ICByZWxvYWQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICB0aGlzLl9yZXNldFN0YXRlKCk7CiAgICAg
ICAgdmFyIGQgPSBuZXcgRGF0ZSgpOwogICAgICAgIHZhciByZXF1ZXN0SWQgPSB0aGlzLnN5bWJv
bHNbMF0gKyBkLmdldFRpbWUoKTsKICAgICAgICB0aGlzLnJlcXVlc3RJZCA9IHJlcXVlc3RJZDsK
ICAgICAgICBUaHVuZGVyYmFsbC5VdGlsaXRpZXMuUmVxdWVzdGVycy5wdXNoKHRoaXMpOwogICAg
ICAgIFRodW5kZXJiYWxsLlV0aWxpdGllcy5HZXREYXRhKHRoaXMpOwogICAgfSwKICAgIHByZWxv
YWQ6IGZ1bmN0aW9uIChkYXRhKSB7CiAgICAgICAgdGhpcy5fcmVzZXRTdGF0ZSgpOwogICAgICAg
IHRoaXMuZGF0YSA9IGRhdGE7CiAgICAgICAgdGhpcy5fZGlkTG9hZCgpOwogICAgfSwKICAgIF9y
ZXNldFN0YXRlOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgdGhpcy5sYXN0VGlja1ByaWNlID0gdGhp
cy5sYXN0VGlja0NoYW5nZSA9IHRoaXMubGFzdFRpY2tYID0gMDsKICAgIH0sCiAgICByZWRyYXc6
IGZ1bmN0aW9uICgpIHsKICAgICAgICB0aGlzLl9wcmVwYXJlQ2FudmFzKCk7CiAgICAgICAgdGhp
cy5fY2xlYXJMYWJlbHMoKTsKICAgICAgICB2YXIgY3R4ID0gdGhpcy5kcmF3aW5nQ29udGV4dDsK
ICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTsKICAg
ICAgICBjdHguc2F2ZSgpOwogICAgICAgIHRoaXMuX2RyYXdDaGFydEJhY2tncm91bmQoKTsKICAg
ICAgICB2YXIgRGF0YSA9IFRodW5kZXJiYWxsLlV0aWxpdGllcy5fZ2V0U2Vzc2lvbkJ5VGlja2Vy
KHRoaXMuZGF0YSwgdGhpcy5zZWxlY3RlZFN5bWJvbCk7CiAgICAgICAgaWYgKERhdGEgIT0gbnVs
bCkgewogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IERhdGEubGVuZ3RoOyBpKyspIHsK
ICAgICAgICAgICAgICAgIHRoaXMuX2RyYXdSZWdpb25zKERhdGFbaV0pOwogICAgICAgICAgICB9
CiAgICAgICAgICAgIGlmICh0aGlzLnN0eWxlLnR5cGUgPT0gJ1NwYXJrJykgewogICAgICAgICAg
ICAgICAgdGhpcy5fZHJhd1NwYXJrKERhdGFbRGF0YS5sZW5ndGggLSAxXSk7CiAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aGlzLl9kZXRlcm1pbmVUeXBlT2ZDaGFydChEYXRh
KTsKICAgICAgICAgICAgICAgIHRoaXMuX3NldEhMQyhEYXRhKTsKICAgICAgICAgICAgICAgIHRo
aXMuX2ZpbGxUcmFkZXMoRGF0YSk7CiAgICAgICAgICAgICAgICB0aGlzLl9kcmF3UHJpY2VMaW5l
cygpOwogICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlWUF4aXNMYWJlbHModGhpcy5zeW1ib2xz
Lmxlbmd0aCk7CiAgICAgICAgICAgICAgICBUaHVuZGVyYmFsbC5VdGlsaXRpZXMuYWRkWEF4aXNM
YWJlbHModGhpcyk7CiAgICAgICAgICAgICAgICBUaHVuZGVyYmFsbC5VdGlsaXRpZXMuZHJhd1hh
eGlzTGluZXModGhpcyk7CiAgICAgICAgICAgICAgICB0aGlzLl9kcmF3Q2xvc2VMaW5lcyhEYXRh
KTsKICAgICAgICAgICAgICAgIHZhciBzdCA9IHRoaXMuc3R5bGU7CiAgICAgICAgICAgICAgICBp
ZiAodGhpcy5oaWdoUG9pbnQueSAhPSB0aGlzLmxvd1BvaW50LnkpIHsKICAgICAgICAgICAgICAg
ICAgICB0aGlzLl9wcmljZUluZGljYXRvcih0aGlzLmhpZ2hQb2ludCwgIiIsIHN0LmhpZ2hJbmRp
Y2F0b3JTdHlsZSwgImNoYXJ0UG9pbnRlciBjaGFydFBvaW50LWhpZ2giLCBmYWxzZSk7CiAgICAg
ICAgICAgICAgICAgICAgdGhpcy5fcHJpY2VJbmRpY2F0b3IodGhpcy5sb3dQb2ludCwgIiIsIHN0
Lmxvd0luZGljYXRvclN0eWxlLCAiY2hhcnRQb2ludGVyIGNoYXJ0UG9pbnQtbG93IiwgZmFsc2Up
OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhpcy5fcHJpY2VJbmRpY2F0b3Io
dGhpcy5sYXN0UG9pbnQsICIiLCAiIiwgImxhc3RMYmwiLCB0cnVlKTsKICAgICAgICAgICAgICAg
IGlmICh0aGlzLnN5bWJvbHMubGVuZ3RoID4gMSkgewogICAgICAgICAgICAgICAgICAgIGZvciAo
dmFyIGogPSAxOyBqIDwgdGhpcy5zeW1ib2xzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBTZXNzaW9uID0gVGh1bmRlcmJhbGwuVXRpbGl0aWVzLl9nZXRTZXNzaW9u
QnlUaWNrZXIodGhpcy5kYXRhLCB0aGlzLnN5bWJvbHNbal0pOwogICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoU2Vzc2lvbiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgY29tcGFyZUNvbG9yID0gJ2JsYWNrJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChqIDw9IDYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlQ29sb3Ig
PSB0aGlzLnN0eWxlLmNvbXBhcmVsaW5lU3R5bGVzW2ogLSAxXTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0cm9rZVRyYWRl
cyhTZXNzaW9uLCBjb21wYXJlQ29sb3IpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhpcy5f
c3Ryb2tlVHJhZGVzKERhdGEsIHRoaXMuc3R5bGUubWFpbkxpbmVTdHlsZSk7CiAgICAgICAgICAg
ICAgICB0aGlzLl9kcmF3Q2hhcnRCb3JkZXIoKTsKICAgICAgICAgICAgICAgIGlmICh0aGlzLmhp
Z2hQb2ludC55ICE9IHRoaXMubG93UG9pbnQueSkgewogICAgICAgICAgICAgICAgICAgIHRoaXMu
X2RyYXdIb3Jpem9udGFsTGluZSh0aGlzLmhpZ2hQb2ludC55KTsKICAgICAgICAgICAgICAgICAg
ICB0aGlzLl9kcmF3SG9yaXpvbnRhbExpbmUodGhpcy5sb3dQb2ludC55KTsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5vdmVyYWxsU3RhcnRU
aW1lOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGN0eC5yZXN0b3JlKCk7CiAgICB9
LAogICAgX3g6IDAsCiAgICBfeHNjYWxlOiAwLAogICAgX3k6IDAsCiAgICBfeXNjYWxlOiAwLAog
ICAgX2J1bXA6IGZhbHNlLAogICAgX2ZpbGxTdHlsZTogJ2JsYWNrJywKICAgIF9wYWRkaW5nOiAw
LAogICAgX2V2ZW50czogW10sCiAgICBfYmFyRmFjdG9yOiAwLAogICAgX2JhclNpemU6IDEsCiAg
ICBfcHJpY2VMaW5lczogW10sCiAgICBfdGltZUxpbmVzOiBbXSwKICAgIF9vcGFxdWVUaW1lTGlu
ZXM6IFtdLAogICAgX2hpc3RvcmljYWw6IGZhbHNlLAogICAgX2N1c3RvbURhdGVSYW5nZTogZmFs
c2UsCiAgICBfY2hhcnRVbml0OiAxLAogICAgX2Rpc3BsYXlVbml0OiAxLAogICAgX3hBeGlzTGFi
ZWxzOiBbXSwKICAgIF9maW5kT3BhcXVlR3JpZExpbmVzOiBmdW5jdGlvbiAoKSB7CiAgICAgICAg
dmFyIHhBeGlzSW5mbyA9IHRoaXMuX3hBeGlzTGFiZWxzOwogICAgICAgIHZhciB0aW1lTGluZXMg
PSB0aGlzLl90aW1lTGluZXM7CiAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmRhdGE7CiAgICAgICAg
dmFyIG9wYXF1ZVRpbWVMaW5lcyA9IFtdOwogICAgICAgIHRoaXMuX29wYXF1ZVRpbWVMaW5lcyA9
IFtdOwogICAgICAgIGlmICh0aGlzLl9kaXNwbGF5VW5pdCA9PT0gMSB8fCB0aGlzLl9kaXNwbGF5
VW5pdCA9PT0gMikgewogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHhBeGlzSW5mby5s
ZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgdmFyIHBhdHQgPSAvXk0kfF5UJHxeVyR8XkYk
fF5TJC87CiAgICAgICAgICAgICAgICBpZiAoeEF4aXNJbmZvW2ldLmVsZW1lbnQubWF0Y2gocGF0
dCkpIHsKICAgICAgICAgICAgICAgICAgICBvcGFxdWVUaW1lTGluZXMucHVzaCh4QXhpc0luZm9b
aV0ueCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHhBeGlzSW5mby5sZW5ndGg7IGkrKykgewog
ICAgICAgICAgICAgICAgdmFyIHBhdHQgPSAvXlxkezJ9JC87CiAgICAgICAgICAgICAgICBpZiAo
eEF4aXNJbmZvW2ldLmVsZW1lbnQubWF0Y2gocGF0dCkgJiYgeEF4aXNJbmZvW2ldLnggIT09ICgu
NSAqIHRpbWVMaW5lc1swXSkpIHsKICAgICAgICAgICAgICAgICAgICBvcGFxdWVUaW1lTGluZXMu
cHVzaCh4QXhpc0luZm9baV0ueCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAg
ICAgICB9CiAgICAgICAgaWYgKG9wYXF1ZVRpbWVMaW5lcy5sZW5ndGggPiAwKSB7CiAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3BhcXVlVGltZUxpbmVzLmxlbmd0aDsgaSsrKSB7CiAg
ICAgICAgICAgICAgICB0aGlzLl9vcGFxdWVUaW1lTGluZXMucHVzaChvcGFxdWVUaW1lTGluZXNb
aV0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSwKICAgIF9kaWRMb2FkOiBmdW5jdGlv
biAoKSB7CiAgICAgICAgaWYgKCF0aGlzLmRhdGEpIHJldHVybjsKICAgICAgICBpZiAodGhpcy5k
YXRhLkVycm9yKSB7CiAgICAgICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLnRhcmdldFNlbGVjdG9y
OwogICAgICAgICAgICB2YXIgZXJyb3JNZXNzYWdlID0gIjxkaXYgc3R5bGU9J3Bvc2l0aW9uOiBh
YnNvbHV0ZTsgdG9wOjBweDtsZWZ0OjBweDsgY2xhc3M9J3hWYWx1ZUxibCc+RXJyb3IsIHRoZSBj
aGFydCBjYW5ub3QgYmUgZGlzcGxheWVkLjwvZGl2PiI7CiAgICAgICAgICAgIGlmICh0aGlzLmRh
dGEuRXJyb3IgPT0gIkVycm9yOiBUaW1lIikgewogICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdl
ID0gIjxkaXYgc3R5bGU9J3Bvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOjBweDtsZWZ0OjBweDsgY2xh
c3M9J3hWYWx1ZUxibCc+T25lIG9yIG1vcmUgb2YgdGhlIHN5bWJvbHMgeW91IGhhdmUgY2hvc2Vu
IGRvZXMgbm90IGNvbnRhaW4gdHJhZGUgZGF0YSBmb3IgdGhpcyB0aW1lIGZyYW1lLiBQbGVhc2Ug
Y2hvb3NlIGEgbG9uZ2VyIHRpbWVmcmFtZS48L2Rpdj4iOwogICAgICAgICAgICB9CiAgICAgICAg
ICAgIHZhciBjdHggPSB0aGlzLmRyYXdpbmdDb250ZXh0OwogICAgICAgICAgICBpZiAoY3R4ICE9
IG51bGwpIHsKICAgICAgICAgICAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgdGhpcy53aWR0aCwg
dGhpcy5oZWlnaHQpOwogICAgICAgICAgICAgICAgdGhpcy5fY2xlYXJMYWJlbHMoKTsKICAgICAg
ICAgICAgICAgIF9kamwucGxhY2UoZXJyb3JNZXNzYWdlLCB0YXJnZXQpOwogICAgICAgICAgICB9
CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmRh
dGEuRGF0YTsKICAgICAgICBpZiAoZGF0YS5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgIHZhciB0
cmFkZXNFeGlzdCA9IGZhbHNlOwogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEu
bGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGRhdGFbaV0uVmFsdWU7
CiAgICAgICAgICAgICAgICB2YXIgc2Vzc2lvbnMgPSB2YWx1ZS5TZXNzaW9uczsKICAgICAgICAg
ICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2Vzc2lvbnMubGVuZ3RoOyBqKyspIHsKICAgICAg
ICAgICAgICAgICAgICBpZiAoc2Vzc2lvbnNbal0uVHJhZGVzLmxlbmd0aCA+IDApIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgdHJhZGVzRXhpc3QgPSB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCF0cmFkZXNFeGlzdCkgewogICAgICAgICAgICAg
ICAgdmFyIHRhcmdldCA9IHRoaXMudGFyZ2V0U2VsZWN0b3I7CiAgICAgICAgICAgICAgICB2YXIg
ZXJyb3JNZXNzYWdlID0gIjxkaXYgc3R5bGU9J3Bvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOjBweDts
ZWZ0OjBweDsgY2xhc3M9J3hWYWx1ZUxibCc+T25lIG9yIG1vcmUgb2YgdGhlIHN5bWJvbHMgeW91
IGhhdmUgY2hvc2VuIGRvZXMgbm90IGNvbnRhaW4gdHJhZGUgZGF0YSBmb3IgdGhpcyB0aW1lIGZy
YW1lLiBQbGVhc2UgY2hvb3NlIGEgbG9uZ2VyIHRpbWVmcmFtZS48L2Rpdj4iOwogICAgICAgICAg
ICAgICAgdmFyIGN0eCA9IHRoaXMuZHJhd2luZ0NvbnRleHQ7CiAgICAgICAgICAgICAgICBpZiAo
Y3R4ICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHRo
aXMud2lkdGgsIHRoaXMuaGVpZ2h0KTsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9jbGVhckxh
YmVscygpOwogICAgICAgICAgICAgICAgICAgIF9kamwucGxhY2UoZXJyb3JNZXNzYWdlLCB0YXJn
ZXQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICB9CiAgICAgICAgfQogICAgICAgIHRoaXMuX2JhckZhY3RvciA9IHRoaXMuZGF0YS5CYXJGYWN0
b3I7CiAgICAgICAgdGhpcy5fYmFyU2l6ZSA9IHRoaXMuZGF0YS5CYXJTaXplOwogICAgICAgIHRo
aXMuX2NoYXJ0VW5pdCA9IHRoaXMuZGF0YS54QXhpc0xhYmVsSW5mby5jaGFydFVuaXQ7CiAgICAg
ICAgdGhpcy5fZGlzcGxheVVuaXQgPSB0aGlzLmRhdGEueEF4aXNMYWJlbEluZm8uZGlzcGxheVVu
aXQ7CiAgICAgICAgdGhpcy5fdGltZUxpbmVzID0gdGhpcy5kYXRhLnhBeGlzTGFiZWxzT2JqLnRp
bWVMaW5lczsKICAgICAgICB0aGlzLl94QXhpc0xhYmVscyA9IHRoaXMuZGF0YS54QXhpc0xhYmVs
c09iai5FbGVtZW50TGlzdDsKICAgICAgICBpZiAodGhpcy5fZGlzcGxheVVuaXQgPT09IDEgfHwg
dGhpcy5fZGlzcGxheVVuaXQgPT09IDIgfHwgdGhpcy5fZGlzcGxheVVuaXQgPT09IDMpIHsKICAg
ICAgICAgICAgdGhpcy5fZmluZE9wYXF1ZUdyaWRMaW5lcygpOwogICAgICAgIH0KICAgICAgICB0
aGlzLl9jdXN0b21EYXRlUmFuZ2UgPSB0aGlzLmRhdGEuQ3VzdG9tRGF0ZVJhbmdlOwogICAgICAg
IHRyeSB7CiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5zeW1ib2xzLmxlbmd0
aDsgaisrKSB7CiAgICAgICAgICAgICAgICB2YXIgU2Vzc2lvbnMgPSBUaHVuZGVyYmFsbC5VdGls
aXRpZXMuX2dldFNlc3Npb25CeVRpY2tlcih0aGlzLmRhdGEsIHRoaXMuc3ltYm9sc1tqXSk7CiAg
ICAgICAgICAgICAgICBpZiAoU2Vzc2lvbnMgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAg
IGlmICh0aGlzLnN5bWJvbHMubGVuZ3RoID4gMSkgewogICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLl9jaGFuZ2VEYXRhVG9QZXJjZW50YWdlKFNlc3Npb25zKTsKICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgX2RqbC5mb3JFYWNoKFNlc3Npb25zLCBmdW5jdGlvbiAo
U2Vzc2lvbiwgaSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoU2Vzc2lvbi5UcmFkZXMg
PT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Vzc2lvbi5UcmFk
ZXMgPSBbXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoU2Vzc2lvbi5FdmVudHMgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU2Vzc2lvbi5FdmVudHMgPSBbXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoU2Vzc2lvbi5OZXdzID09PSB1bmRlZmluZWQpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlc3Npb24uTmV3cyA9IFtdOwogICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTZXNzaW9uLldlaWdo
dCA9PT0gdW5kZWZpbmVkKSB7fQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoU2Vzc2lvbi5T
dGFydCA9PT0gdW5kZWZpbmVkKSB7fQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoU2Vzc2lv
bi5TdG9wID09PSB1bmRlZmluZWQpIHt9CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZXNz
aW9uU3RhcnRGb3JtYXQgPSBUaHVuZGVyYmFsbC5VdGlsaXRpZXMuRm9ybWF0RGF0ZShTZXNzaW9u
LlN0YXJ0KTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlc3Npb25TdG9wRm9ybWF0ID0g
VGh1bmRlcmJhbGwuVXRpbGl0aWVzLkZvcm1hdERhdGUoU2Vzc2lvbi5TdG9wKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgU2Vzc2lvbi5TdGFydCA9IG5ldyBEYXRlKHNlc3Npb25TdGFydEZvcm1h
dCk7CiAgICAgICAgICAgICAgICAgICAgICAgIFNlc3Npb24uU3RvcCA9IG5ldyBEYXRlKHNlc3Np
b25TdG9wRm9ybWF0KTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAg
ICB0aGlzLl9sYXlvdXRTZXNzaW9ucyhTZXNzaW9ucyk7CiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlKSB7fQogICAgICAgIHRoaXMuX2F1dG9TY2FsZSh0
aGlzLmRhdGEuRGF0YSk7CiAgICAgICAgdGhpcy5yZWRyYXcoKTsKICAgIH0sCiAgICBfY2hhbmdl
RGF0YVRvUGVyY2VudGFnZTogZnVuY3Rpb24gKFNlc3Npb25zKSB7CiAgICAgICAgdmFyIGJhc2VQ
cmljZSA9IG51bGw7CiAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBTZXNzaW9ucy5sZW5ndGg7
IGsrKykgewogICAgICAgICAgICB2YXIgdHJhZGVzID0gU2Vzc2lvbnNba10uVHJhZGVzOwogICAg
ICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IHRyYWRlcy5sZW5ndGg7IGwrKykgewogICAgICAg
ICAgICAgICAgaWYgKHRyYWRlc1tsXSAhPT0gbnVsbCAmJiBiYXNlUHJpY2UgPT09IG51bGwpIHsK
ICAgICAgICAgICAgICAgICAgICBiYXNlUHJpY2UgPSB0cmFkZXNbbF07CiAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAg
aWYgKGJhc2VQcmljZSAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGJhc2VQcmljZSAhPT0gbnVsbCAmJiBiYXNlUHJp
Y2UgPiAwKSB7CiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgU2Vzc2lvbnMubGVuZ3Ro
OyBrKyspIHsKICAgICAgICAgICAgICAgIHZhciB0cmFkZXMgPSBTZXNzaW9uc1trXS5UcmFkZXM7
CiAgICAgICAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IHRyYWRlcy5sZW5ndGg7IGwrKykg
ewogICAgICAgICAgICAgICAgICAgIGlmICh0cmFkZXNbbF0gIT09IG51bGwpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgdHJhZGVzW2xdID0gMTAwICogKCh0cmFkZXNbbF0gLSBiYXNlUHJpY2Up
IC8gYmFzZVByaWNlKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICBpZiAoU2Vzc2lvbnNba10uTG93ICE9PSBudWxsKSB7CiAgICAgICAgICAg
ICAgICAgICAgU2Vzc2lvbnNba10uTG93LlByaWNlID0gMTAwICogKChTZXNzaW9uc1trXS5Mb3cu
UHJpY2UgLSBiYXNlUHJpY2UpIC8gYmFzZVByaWNlKTsKICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgIGlmIChTZXNzaW9uc1trXS5IaWdoICE9PSBudWxsKSB7CiAgICAgICAgICAgICAg
ICAgICAgU2Vzc2lvbnNba10uSGlnaC5QcmljZSA9IDEwMCAqICgoU2Vzc2lvbnNba10uSGlnaC5Q
cmljZSAtIGJhc2VQcmljZSkgLyBiYXNlUHJpY2UpOwogICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICB9CiAgICAgICAgfQogICAgfSwKICAgIF9kcmF3SG9yaXpvbnRhbExpbmU6IGZ1bmN0aW9u
ICh5KSB7CiAgICAgICAgaWYgKHRoaXMuc3R5bGUuaGlnaGxvd0xpbmVTdHlsZSkgewogICAgICAg
ICAgICB2YXIgY3R4ID0gdGhpcy5kcmF3aW5nQ29udGV4dDsKICAgICAgICAgICAgdGhpcy5fYnVt
cCA9IHRydWU7CiAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTsKICAgICAgICAgICAgY3R4Lmxp
bmVXaWR0aCA9IDE7CiAgICAgICAgICAgIGN0eC5tb3ZlVG8oMCwgeSArIDAuNSk7CiAgICAgICAg
ICAgIGN0eC5saW5lVG8odGhpcy53aWR0aCwgeSArIDAuNSk7CiAgICAgICAgICAgIGN0eC5zdHJv
a2VTdHlsZSA9IHRoaXMuc3R5bGUuaGlnaGxvd0xpbmVTdHlsZTsKICAgICAgICAgICAgY3R4LnN0
cm9rZSgpOwogICAgICAgIH0KICAgIH0sCiAgICBfcHJpY2VJbmRpY2F0b3I6IGZ1bmN0aW9uIChw
b2ludCwgc3RyaW5nLCBzdHlsZSwgY3NzQ2xhc3MsIGxhc3RQb2ludCkgewogICAgICAgIGlmIChw
b2ludC54ID09PSBudWxsIHx8IHBvaW50LnkgPT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgIH0KICAgICAgICBpZiAobGFzdFBvaW50KSB7CiAgICAgICAgICAgIGlmIChwb2lu
dC54ID4gdGhpcy53aWR0aCAtIDMpIHsKICAgICAgICAgICAgICAgIHBvaW50LnggPSB0aGlzLndp
ZHRoIC0gMzsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgeSA9IHBvaW50LnkgLSAxMDsK
ICAgICAgICAgICAgdmFyIHggPSBwb2ludC54IC0gMjsKICAgICAgICAgICAgaWYgKHRoaXMubGFz
dFRpY2tDaGFuZ2UgPCAwKSB7CiAgICAgICAgICAgICAgICBsYXN0UG9pbnRJY29uID0gIjxkaXYg
Y2xhc3M9J2NoYXJ0RG93bkluZGljYXRvcic+PC9kaXY+IjsKICAgICAgICAgICAgfSBlbHNlIGlm
ICh0aGlzLmxhc3RUaWNrQ2hhbmdlID4gMCkgewogICAgICAgICAgICAgICAgbGFzdFBvaW50SWNv
biA9ICI8ZGl2IGNsYXNzPSdjaGFydFVwSW5kaWNhdG9yJz48L2Rpdj4iOwogICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgbGFzdFBvaW50SWNvbiA9ICI8ZGl2IGNsYXNzPSdjaGFy
dEluZGljYXRvcic+PC9kaXY+IjsKICAgICAgICAgICAgICAgIHkgPSBwb2ludC55IC0gMzsKICAg
ICAgICAgICAgfQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfSBlbHNlIHt9CiAgICB9LAog
ICAgX2NyZWF0ZVlBeGlzTGFiZWxzOiBmdW5jdGlvbiAodHlwZSkgewogICAgICAgIGlmICghdGhp
cy5zdHlsZS5tYXhQcmljZUxpbmVzKSByZXR1cm47CiAgICAgICAgdmFyIGRlY2ltYWxzVG9TaG93
ID0gMjsKICAgICAgICB2YXIgWUF4aXNDb250ZW50ID0gIiI7CiAgICAgICAgdmFyIGRpc3BsYXlW
YWx1ZSA9ICIiOwogICAgICAgIHZhciB4LCB5LCBwOwogICAgICAgIHZhciBlbG1IZWlnaHQgPSB0
aGlzLnN0eWxlLllBeGlzTGFiZWxIZWlnaHQ7CiAgICAgICAgdmFyIGV4Y2x1ZGVMYWJlbCA9IFtd
OwogICAgICAgIGlmICghdGhpcy5zdHlsZS55QXhpc0xhYmVsUGFkZGluZykgewogICAgICAgICAg
ICB0aGlzLnN0eWxlLnlBeGlzTGFiZWxQYWRkaW5nID0gMjsKICAgICAgICB9CgogICAgICAgIGZ1
bmN0aW9uIGFkZENvbW1hcyhuU3RyKSB7CiAgICAgICAgICAgIG5TdHIgKz0gJyc7CiAgICAgICAg
ICAgIHggPSBuU3RyLnNwbGl0KCcuJyk7CiAgICAgICAgICAgIHgxID0geFswXTsKICAgICAgICAg
ICAgeDIgPSB4Lmxlbmd0aCA+IDEgPyAnLicgKyB4WzFdIDogJyc7CiAgICAgICAgICAgIHZhciBy
Z3ggPSAvKFxkKykoXGR7M30pLzsKICAgICAgICAgICAgd2hpbGUgKHJneC50ZXN0KHgxKSkgewog
ICAgICAgICAgICAgICAgeDEgPSB4MS5yZXBsYWNlKHJneCwgJyQxJyArICcsJyArICckMicpOwog
ICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiB4MSArIHgyOwogICAgICAgIH0KCiAgICAg
ICAgZnVuY3Rpb24gZGVjaW1hbHNOZWVkZWQobGluZU51bSwgcmFuZ2UpIHsKICAgICAgICAgICAg
dmFyIFRvbCA9IDUuMGUtNjsKICAgICAgICAgICAgaWYgKHJhbmdlID09PSAwIHx8IGxpbmVOdW0g
PT09IDApIHJldHVybiAwOwogICAgICAgICAgICB2YXIgbWF4RGVjaW1hbHMgPSA2OwogICAgICAg
ICAgICB2YXIgZGl2aXNpb24gPSByYW5nZSAvIGxpbmVOdW07CiAgICAgICAgICAgIHZhciBkZWNp
bWFscyA9IDA7CiAgICAgICAgICAgIHdoaWxlIChkZWNpbWFscyA8PSBtYXhEZWNpbWFscykgewog
ICAgICAgICAgICAgICAgdmFyIGRpdnRlc3QgPSBkaXZpc2lvbiAqIE1hdGgucG93KDEwLCBkZWNp
bWFscyk7CiAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnMoZGl2dGVzdCAtIE1hdGgucm91bmQo
ZGl2dGVzdCkpIDwgVG9sKSBicmVhazsKICAgICAgICAgICAgICAgIGRlY2ltYWxzICs9IChkZWNp
bWFscyA9PSAwKSA/IDIgOiAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBkZWNp
bWFsczsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuX3ByaWNlTGluZXMubGVuZ3RoID4gMSkg
ewogICAgICAgICAgICB0aGlzLl9wcmljZUxpbmVzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsKICAg
ICAgICAgICAgICAgIHJldHVybiBhIC0gYgogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdmFy
IGZpcnN0VmFsdWUgPSB0aGlzLl9wcmljZUxpbmVzWzBdOwogICAgICAgICAgICB2YXIgbGFzdFZh
bHVlID0gdGhpcy5fcHJpY2VMaW5lc1t0aGlzLl9wcmljZUxpbmVzLmxlbmd0aCAtIDFdOwogICAg
ICAgICAgICB2YXIgZGlmZlZhbHVlID0gbGFzdFZhbHVlIC0gZmlyc3RWYWx1ZTsKICAgICAgICAg
ICAgdmFyIHRvdGFsTnVtYmVyID0gdGhpcy5fcHJpY2VMaW5lcy5sZW5ndGggLSAxOwogICAgICAg
ICAgICBpZiAodGhpcy5zdHlsZS5zaG93RGVjaW1hbHMgPT09IDApIHsKICAgICAgICAgICAgICAg
IGRlY2ltYWxzVG9TaG93ID0gMDsKICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnN0eWxlLllB
eGlzTGFiZWxTdHlsZSA9PT0gMSkgewogICAgICAgICAgICAgICAgaWYgKGxhc3RWYWx1ZSA8IDEw
KSBkZWNpbWFsc1RvU2hvdyA9IDM7CiAgICAgICAgICAgICAgICBlbHNlIGlmIChsYXN0VmFsdWUg
PCAxMDApIGRlY2ltYWxzVG9TaG93ID0gMjsKICAgICAgICAgICAgICAgIGVsc2UgZGVjaW1hbHNU
b1Nob3cgPSAwOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZGVjaW1hbHNU
b1Nob3cgPSBkZWNpbWFsc05lZWRlZCh0b3RhbE51bWJlciwgZGlmZlZhbHVlKTsKICAgICAgICAg
ICAgfQogICAgICAgIH0KICAgICAgICB0cnkgewogICAgICAgICAgICB2YXIgY3VycmVudCA9IGZh
bHNlOwogICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5fcHJpY2VMaW5lcy5sZW5ndGggLSAx
OyBpID49IDA7IGktLSkgewogICAgICAgICAgICAgICAgdmFyIGRyYXdMYWJlbCA9IHRydWU7CiAg
ICAgICAgICAgICAgICBwID0gdGhpcy5fcHJpY2VMaW5lc1tpXTsKICAgICAgICAgICAgICAgIGlm
ICh0aGlzLl9wcmljZUxpbmVzW2ldID09PSB0aGlzLmxhc3RQcmljZSkgewogICAgICAgICAgICAg
ICAgICAgIHkgPSAodGhpcy50eShwKSAtIChlbG1IZWlnaHQgLyAyKSAtIDEpOwogICAgICAgICAg
ICAgICAgfSBlbHNlIGlmICh0aGlzLl9wcmljZUxpbmVzW2ldID09PSB0aGlzLmhpZ2hQcmljZSkg
ewogICAgICAgICAgICAgICAgICAgIHkgPSAodGhpcy50eShwKSAtIGVsbUhlaWdodCk7CiAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3ByaWNlTGluZXNbaV0gPT09IHRoaXMubG93UHJp
Y2UpIHsKICAgICAgICAgICAgICAgICAgICB5ID0gdGhpcy50eShwKSAtIDE7CiAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKHRoaXMuX3ByaWNlTGluZXNbaV0gPT09IHRoaXMuY2xvc2VQcmljZSkg
ewogICAgICAgICAgICAgICAgICAgIHkgPSAodGhpcy50eShwKSAtIChlbG1IZWlnaHQgLyAyKSAt
IDEpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB5ID0gdGhp
cy50eShwKSAtIChlbG1IZWlnaHQgLyAyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIHggPSB0aGlzLnN0eWxlLnlBeGlzTGFiZWxQYWRkaW5nICsgdGhpcy53aWR0aDsKICAgICAg
ICAgICAgICAgIGlmICh0aGlzLnN0eWxlLllBeGlzTGFiZWxTdHlsZSA9PT0gMSkgewogICAgICAg
ICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5fcHJpY2VMaW5lcy5sZW5ndGg7
IGorKykgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcHJpY2VMaW5lc1tpXSAh
PSB0aGlzLmxhc3RQcmljZSAmJiBqICE9IGkgJiYgZXhjbHVkZUxhYmVsW2pdICE9IDEpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjcCA9IHRoaXMuX3ByaWNlTGluZXNbal07CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcHJpY2VMaW5lc1tqXSA9PT0gdGhp
cy5sYXN0UHJpY2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjeSA9ICh0aGlz
LnR5KGNwKSAtIChlbG1IZWlnaHQgLyAyKSkgLSAxOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmICh0aGlzLl9wcmljZUxpbmVzW2pdID09PSB0aGlzLmNsb3NlUHJpY2UpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjeSA9ICh0aGlzLnR5KGNwKSAtIChlbG1I
ZWlnaHQgLyAyKSkgLSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0
aGlzLl9wcmljZUxpbmVzW2pdID09PSB0aGlzLmhpZ2hQcmljZSkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGN5ID0gKHRoaXMudHkoY3ApIC0gZWxtSGVpZ2h0KSAtIDE7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3ByaWNlTGluZXNbal0gPT09
IHRoaXMubG93UHJpY2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjeSA9IHRo
aXMudHkoY3ApIC0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd0xhYmVsID0gZmFsc2U7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTWF0aC5h
YnMoTWF0aC5hYnMoY3kpIC0gTWF0aC5hYnMoeSkpIDwgZWxtSGVpZ2h0ICsgMSkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wcmljZUxpbmVzW2pdICE9IHRoaXMu
Y2xvc2VQcmljZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmF3TGFi
ZWwgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVkZUxh
YmVsW2ldID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAodHlwZSA+IDEp
IHsKICAgICAgICAgICAgICAgICAgICBkaXNwbGF5VmFsdWUgPSBwLnRvRml4ZWQoZGVjaW1hbHNU
b1Nob3cpICsgIiUiOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAg
ICBkaXNwbGF5VmFsdWUgPSBwLnRvRml4ZWQoZGVjaW1hbHNUb1Nob3cpOwogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgdmFyIGxhYmVsQ2xhc3MgPSAicHJpY2VMYmwiOwogICAgICAg
ICAgICAgICAgaWYgKHRoaXMuc3R5bGUuWUF4aXNMYWJlbFN0eWxlID09PSAxKSB7CiAgICAgICAg
ICAgICAgICAgICAgdmFyIHdpZHRoID0gNTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5f
cHJpY2VMaW5lc1tpXSA9PT0gdGhpcy5sYXN0UHJpY2UgJiYgKHRoaXMuX3ByaWNlTGluZXNbaV0g
Pj0gdGhpcy5jbG9zZVByaWNlIHx8IHRoaXMuY2xvc2VQcmljZSA9PT0gbnVsbCkgJiYgIWN1cnJl
bnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxDbGFzcyA9ICJjaGFydFBvaW50ZXIg
Y2hhcnRMYXN0UG9pbnQgY2hhcnRQb2ludC1wb3MiOwogICAgICAgICAgICAgICAgICAgICAgICBj
dXJyZW50ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3ByaWNl
TGluZXNbaV0gPT09IHRoaXMubGFzdFByaWNlICYmIHRoaXMuX3ByaWNlTGluZXNbaV0gPCB0aGlz
LmNsb3NlUHJpY2UgJiYgIWN1cnJlbnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxD
bGFzcyA9ICJjaGFydFBvaW50ZXIgY2hhcnRMYXN0UG9pbnQgY2hhcnRQb2ludC1uZWciOwogICAg
ICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKHRoaXMuX3ByaWNlTGluZXNbaV0gPT09IHRoaXMubG93UHJpY2UpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubG93UHJpY2UgPT09IHRoaXMubGFzdFByaWNlICYm
IGN1cnJlbnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdMYWJlbCA9IGZhbHNl
OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVs
Q2xhc3MgPSAiY2hhcnRQb2ludGVyIGNoYXJ0UG9pbnQtbG93IjsKICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKHRoaXMuX3ByaWNlTGluZXNbaV0gPT09IHRoaXMuaGlnaFByaWNlKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmhpZ2hQcmljZSA9PT0gdGhpcy5sYXN0UHJp
Y2UgJiYgY3VycmVudCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd0xhYmVsID0g
ZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
bGFiZWxDbGFzcyA9ICJjaGFydFBvaW50ZXIgY2hhcnRQb2ludC1oaWdoIjsKICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2xvc2VQcmljZSAmJiB0aGlzLl9wcmljZUxpbmVzW2ld
ID09PSB0aGlzLmNsb3NlUHJpY2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMu
Y2xvc2VQcmljZSA9PT0gdGhpcy5sYXN0UHJpY2UgJiYgY3VycmVudCkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZHJhd0xhYmVsID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxDbGFzcyA9ICJjaGFydFBvaW50ZXIgY2hh
cnRQb2ludC1jbG9zZSI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgaWYgKGRyYXdMYWJlbCA9PT0gdHJ1ZSAmJiB0aGlzLnN0eWxlLllBeGlz
TGFiZWxTdHlsZSA9PT0gMSkgewogICAgICAgICAgICAgICAgICAgIFlBeGlzQ29udGVudCA9IFlB
eGlzQ29udGVudCArICI8ZGl2IHN0eWxlPSdwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDoiICsgeSAr
ICJweDtsZWZ0OiIgKyB4ICsgInB4OyAnIGNsYXNzPSciICsgbGFiZWxDbGFzcyArICInPiIgKyBk
aXNwbGF5VmFsdWUgKyAiPC9kaXY+IjsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZHJhd0xh
YmVsID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgWUF4aXNDb250ZW50ID0gWUF4aXND
b250ZW50ICsgIjxkaXYgc3R5bGU9J3Bvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiIgKyB5ICsgInB4
O2xlZnQ6IiArIHggKyAicHg7ICcgY2xhc3M9JyIgKyBsYWJlbENsYXNzICsgIic+IiArIGRpc3Bs
YXlWYWx1ZSArICI8L2Rpdj4iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAg
ICB9IGNhdGNoIChlKSB7fQogICAgICAgIF9kamwucGxhY2UoWUF4aXNDb250ZW50LCB0aGlzLnRh
cmdldFNlbGVjdG9yKTsKICAgIH0sCiAgICBfZGV0ZXJtaW5lVHlwZU9mQ2hhcnQ6IGZ1bmN0aW9u
IChTZXNzaW9ucykgewogICAgICAgIGlmIChTZXNzaW9ucy5sZW5ndGggPj0gMSAmJiBTZXNzaW9u
c1swXS5SZWdpb25zLmxlbmd0aCA+PSAxKSB7CiAgICAgICAgICAgIHZhciBudW1iZXJPZlJlZ2lv
bnMgPSBTZXNzaW9uc1swXS5SZWdpb25zLmxlbmd0aDsKICAgICAgICAgICAgaWYgKG51bWJlck9m
UmVnaW9ucyA9PSAxICYmIFNlc3Npb25zWzBdLlJlZ2lvbnNbMF0uVHlwZSAhPSA0KSB7CiAgICAg
ICAgICAgICAgICB0aGlzLl9oaXN0b3JpY2FsID0gdHJ1ZTsKICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgIHRoaXMuX2hpc3RvcmljYWwgPSBmYWxzZTsKICAgICAgICAgICAgfQog
ICAgICAgIH0KICAgIH0sCiAgICBfc2V0SExDOiBmdW5jdGlvbiAoU2Vzc2lvbnMpIHsKICAgICAg
ICB0aGlzLmxhc3RQb2ludC54ID0gbnVsbDsKICAgICAgICB0aGlzLmxhc3RQb2ludC55ID0gbnVs
bDsKICAgICAgICB0aGlzLmxvd1BvaW50LnggPSBudWxsOwogICAgICAgIHRoaXMubG93UG9pbnQu
eSA9IG51bGw7CiAgICAgICAgdGhpcy5oaWdoUG9pbnQueCA9IG51bGw7CiAgICAgICAgdGhpcy5o
aWdoUG9pbnQueSA9IG51bGw7CiAgICAgICAgdmFyIE1pbk1heCA9IHRoaXMuX2dldE1pbk1heChT
ZXNzaW9ucywgZmFsc2UpOwogICAgICAgIHZhciBuZWVkc0J1bXAgPSBmYWxzZTsKICAgICAgICBp
ZiAodGhpcy5kYXRhLkRhdGFbMF0uVmFsdWUuSXNJbmRleCA9PT0gMSAmJiB0aGlzLl9iYXJTaXpl
ID09PSA2MCkgewogICAgICAgICAgICBuZWVkc0J1bXAgPSB0cnVlOwogICAgICAgIH0KICAgICAg
ICBpZiAoTWluTWF4Lk1pblBvaW50ICE9IG51bGwgfHwgTWluTWF4Lk1pbiAhPSBudWxsKSB7CiAg
ICAgICAgICAgIHRoaXMubG93UG9pbnQgPSBNaW5NYXguTWluUG9pbnQ7CiAgICAgICAgfQogICAg
ICAgIGlmIChNaW5NYXguTWF4UG9pbnQgIT0gbnVsbCB8fCBNaW5NYXguTWF4ICE9IG51bGwpIHsK
ICAgICAgICAgICAgdGhpcy5oaWdoUG9pbnQgPSBNaW5NYXguTWF4UG9pbnQ7CiAgICAgICAgfQog
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgU2Vzc2lvbnMubGVuZ3RoOyBpKyspIHsKICAgICAg
ICAgICAgdmFyIFNlc3Npb24gPSBTZXNzaW9uc1tpXTsKICAgICAgICAgICAgdGhpcy5fc2V0U2Vz
c2lvbihTZXNzaW9uKTsKICAgICAgICAgICAgaWYgKFNlc3Npb24uVHJhZGVzICYmIFNlc3Npb24u
VHJhZGVzLmxlbmd0aCAhPT0gMCkgewogICAgICAgICAgICAgICAgdmFyIGxhc3RJbmRleCA9IFNl
c3Npb24uVHJhZGVzLmxlbmd0aCAtIDE7CiAgICAgICAgICAgICAgICB2YXIgcHJpY2UgPSBTZXNz
aW9uLlRyYWRlc1tsYXN0SW5kZXhdOwogICAgICAgICAgICAgICAgaWYgKHByaWNlKSB7CiAgICAg
ICAgICAgICAgICAgICAgdGhpcy5sYXN0UG9pbnQueSA9IHRoaXMudHkocHJpY2UpOwogICAgICAg
ICAgICAgICAgICAgIGlmICh0aGlzLl9oaXN0b3JpY2FsKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMubGFzdFBvaW50LnggPSB0aGlzLnR4KGxhc3RJbmRleCAvIHRoaXMuX2JhclNpemUp
OwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChuZWVkc0J1bXApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdFBvaW50
LnggPSB0aGlzLnR4KGxhc3RJbmRleCArIDAuNSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RQb2ludC54ID0gdGhp
cy50eChsYXN0SW5kZXgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBmb3Ig
KHZhciBqID0gbGFzdEluZGV4OyBqID49IDA7IGotLSkgewogICAgICAgICAgICAgICAgICAgICAg
ICBwcmljZSA9IFNlc3Npb24uVHJhZGVzW2pdOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAo
cHJpY2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdFBvaW50LnkgPSB0
aGlzLnR5KHByaWNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9oaXN0
b3JpY2FsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0UG9pbnQu
eCA9IHRoaXMudHgoaiAvIHRoaXMuX2JhclNpemUpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmVlZHNCdW1w
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdFBvaW50Lngg
PSB0aGlzLnR4KGogKyAwLjUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdFBvaW50Lngg
PSB0aGlzLnR4KGxhc3RJbmRleCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9LAogICAgX2RyYXdS
b3VuZEluZGljYXRvcjogZnVuY3Rpb24gKGNvbG9yLCB4LCB5LCBjaXJjbGVTaXplKSB7CiAgICAg
ICAgaWYgKHggIT09IG51bGwgJiYgeSAhPT0gbnVsbCkgewogICAgICAgICAgICB2YXIgY3R4ID0g
dGhpcy5kcmF3aW5nQ29udGV4dDsKICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGNvbG9yOwog
ICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7CiAgICAgICAgICAgIGN0eC5hcmMoeCwgeSwgMywg
MCwgTWF0aC5QSSAqIDIsIHRydWUpOwogICAgICAgICAgICBjdHguZmlsbCgpOwogICAgICAgICAg
ICBjdHguc3Ryb2tlU3R5bGUgPSBjb2xvcjsKICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpOwog
ICAgICAgICAgICBjdHguc2F2ZSgpOwogICAgICAgICAgICBjdHgubGluZVdpZHRoID0gMS41Owog
ICAgICAgICAgICBjdHguYXJjKHgsIHksIGNpcmNsZVNpemUsIDAsIE1hdGguUEkgKiAyLCB0cnVl
KTsKICAgICAgICAgICAgY3R4LnN0cm9rZSgpOwogICAgICAgICAgICBjdHgucmVzdG9yZSgpOwog
ICAgICAgIH0KICAgIH0sCiAgICBfZHJhd1JvdW5kRG90OiBmdW5jdGlvbiAoY29sb3IsIHgsIHks
IHNpemUpIHsKICAgICAgICBpZiAoeCAhPT0gbnVsbCAmJiB5ICE9PSBudWxsKSB7CiAgICAgICAg
ICAgIHZhciBjdHggPSB0aGlzLmRyYXdpbmdDb250ZXh0OwogICAgICAgICAgICBjdHguZmlsbFN0
eWxlID0gY29sb3I7CiAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTsKICAgICAgICAgICAgY3R4
LmFyYyh4LCB5LCBzaXplLCAwLCBNYXRoLlBJICogMiwgdHJ1ZSk7CiAgICAgICAgICAgIGN0eC5m
aWxsKCk7CiAgICAgICAgfQogICAgfSwKICAgIF9kcmF3TmV3c092ZXJsYXk6IGZ1bmN0aW9uIChT
ZXNzaW9ucykgewogICAgICAgIHRoaXMuX2J1bXAgPSBmYWxzZTsKICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IFNlc3Npb25zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHRoaXMuX3NldFNl
c3Npb24oU2Vzc2lvbnNbaV0pOwogICAgICAgICAgICB2YXIgbmV3cyA9IFNlc3Npb25zW2ldLk5l
d3M7CiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbmV3cy5sZW5ndGg7IGorKykgewog
ICAgICAgICAgICAgICAgdmFyIHN0b3J5ID0gbmV3c1tqXTsKICAgICAgICAgICAgICAgIHZhciB4
ID0gdGhpcy50eChzdG9yeS5BdCk7CiAgICAgICAgICAgICAgICB2YXIgcDsKICAgICAgICAgICAg
ICAgIHZhciBUcmFkZXMgPSBTZXNzaW9uc1tpXS5UcmFkZXM7CiAgICAgICAgICAgICAgICBmb3Ig
KHZhciBrID0gMDsgayA8IFRyYWRlcy5sZW5ndGggJiYgayA8IHN0b3J5LkF0OyBrKyspIHsKICAg
ICAgICAgICAgICAgICAgICBpZiAoVHJhZGVzW2tdKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IHAgPSBUcmFkZXNba107CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgaWYgKHApIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV3c0xpbmsg
PSAkKCc8YT48L2E+JykuYXR0cignaHJlZicsIHN0b3J5LlVybCk7CiAgICAgICAgICAgICAgICAg
ICAgdmFyIGljb24gPSAkKCc8aW1nIC8+JykuYXR0cignYm9yZGVyJywgMCkuYXR0cignc3JjJywg
dGhpcy5zdHlsZS5uZXdzQmFja2dyb3VuZCkuYXR0cigndGl0bGUnLCBzdG9yeS5UZXh0KS5hcHBl
bmRUbyhuZXdzTGluayk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9
CiAgICB9LAogICAgX2RyYXdQcmljZUxpbmVzOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgaWYgKHRo
aXMuc3R5bGUuaG9yaXpvbnRhbEdyaWRMaW5lU3R5bGUpIHsKICAgICAgICAgICAgdmFyIGN0eCA9
IHRoaXMuZHJhd2luZ0NvbnRleHQ7CiAgICAgICAgICAgIHRoaXMuX2J1bXAgPSB0cnVlOwogICAg
ICAgICAgICBjdHguYmVnaW5QYXRoKCk7CiAgICAgICAgICAgIHZhciB0aWNrcyA9IHRoaXMuX3By
aWNlTGluZXM7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGlja3MubGVuZ3RoOyBp
KyspIHsKICAgICAgICAgICAgICAgIHZhciB5ID0gdGhpcy50eSh0aWNrc1tpXSk7CiAgICAgICAg
ICAgICAgICBjdHgubW92ZVRvKDAsIHkpOwogICAgICAgICAgICAgICAgY3R4LmxpbmVUbyh0aGlz
LndpZHRoLCB5KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSB0
aGlzLnN0eWxlLmhvcml6b250YWxHcmlkTGluZVN0eWxlOwogICAgICAgICAgICBjdHguc3Ryb2tl
KCk7CiAgICAgICAgfQogICAgfSwKICAgIF9kcmF3Q2hhcnRCb3JkZXI6IGZ1bmN0aW9uICgpIHsK
ICAgICAgICBpZiAodGhpcy5zdHlsZS5ib3JkZXIpIHsKICAgICAgICAgICAgdmFyIGN0eCA9IHRo
aXMuZHJhd2luZ0NvbnRleHQ7CiAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTsKICAgICAgICAg
ICAgY3R4LnN0cm9rZVN0eWxlID0gdGhpcy5zdHlsZS5ib3JkZXI7CiAgICAgICAgICAgIGN0eC5z
dHJva2VSZWN0KDAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTsKICAgICAgICB9CiAgICB9
LAogICAgX2RyYXdDaGFydEJhY2tncm91bmQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICBpZiAodGhp
cy5zdHlsZS5iYWNrZ3JvdW5kKSB7CiAgICAgICAgICAgIHZhciBjdHggPSB0aGlzLmRyYXdpbmdD
b250ZXh0OwogICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7CiAgICAgICAgICAgIGN0eC5maWxs
U3R5bGUgPSB0aGlzLnN0eWxlLmJhY2tncm91bmQ7CiAgICAgICAgICAgIGN0eC5maWxsUmVjdCgw
LCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7CiAgICAgICAgfQogICAgfSwKICAgIF9kcmF3
Q2xvc2VMaW5lczogZnVuY3Rpb24gKFNlc3Npb25zKSB7CiAgICAgICAgdmFyIGN0eCA9IHRoaXMu
ZHJhd2luZ0NvbnRleHQ7CiAgICAgICAgdGhpcy5fYnVtcCA9IHRydWU7CiAgICAgICAgdmFyIHgg
PSAwOwogICAgICAgIGN0eC5iZWdpblBhdGgoKTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IFNlc3Npb25zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBzZXNzaW9uID0gU2Vzc2lv
bnNbaV07CiAgICAgICAgICAgIHRoaXMuX3NldFNlc3Npb24oc2Vzc2lvbik7CiAgICAgICAgICAg
IHZhciB3ID0gc2Vzc2lvbi5TZXNzaW9uV2lkdGg7CiAgICAgICAgICAgIHZhciB4MiA9IHggKyB3
OwogICAgICAgICAgICBpZiAoc2Vzc2lvbi5QcmV2aW91c0Nsb3NlICE9PSB1bmRlZmluZWQgJiYg
c2Vzc2lvbi5QcmV2aW91c0Nsb3NlICE9PSBudWxsICYmICh0aGlzLnN5bWJvbHMubGVuZ3RoID09
IDEpKSB7CiAgICAgICAgICAgICAgICB2YXIgeSA9IHRoaXMudHkoc2Vzc2lvbi5QcmV2aW91c0Ns
b3NlKTsKICAgICAgICAgICAgICAgIGN0eC5tb3ZlVG8oeCwgeSk7CiAgICAgICAgICAgICAgICBj
dHgubGluZVRvKHgyLCB5KTsKICAgICAgICAgICAgfQogICAgICAgICAgICB4ID0geDI7CiAgICAg
ICAgfQogICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IHRoaXMuc3R5bGUuY2xvc2VsaW5lU3R5bGU7
CiAgICAgICAgY3R4LnN0cm9rZSgpOwogICAgfSwKICAgIF9kcmF3UmVnaW9uczogZnVuY3Rpb24g
KHNlc3Npb24pIHsKICAgICAgICB2YXIgY3R4ID0gdGhpcy5kcmF3aW5nQ29udGV4dDsKICAgICAg
ICB0aGlzLl9zZXRTZXNzaW9uKHNlc3Npb24pOwogICAgICAgIHRoaXMuX2J1bXAgPSBmYWxzZTsK
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlc3Npb24uUmVnaW9ucy5sZW5ndGg7IGkrKykg
ewogICAgICAgICAgICB2YXIgUmVnaW9uID0gc2Vzc2lvbi5SZWdpb25zW2ldOwogICAgICAgICAg
ICB2YXIgQ29sb3IgPSB0aGlzLl9yZWdpb25TdHlsZXNbUmVnaW9uLlR5cGVdOwogICAgICAgICAg
ICBpZiAoIUNvbG9yIHx8IENvbG9yID09IHRoaXMuc3R5bGUuYmFja2dyb3VuZCkgewogICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHgxID0gdGhp
cy50eChSZWdpb24uU3RhcnQpOwogICAgICAgICAgICB2YXIgeDI7CiAgICAgICAgICAgIGlmIChp
ID09PSAwICYmIHRoaXMuX2JhclNpemUgPT09IDYwICYmIChSZWdpb24uU3RvcCArIFJlZ2lvbi5T
dGFydCA+IDApKSB7CiAgICAgICAgICAgICAgICB4MiA9IHRoaXMudHgoUmVnaW9uLlN0b3AgKyAw
LjUpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgeDIgPSB0aGlzLnR4KFJl
Z2lvbi5TdG9wKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gQ29s
b3I7CiAgICAgICAgICAgIGN0eC5maWxsUmVjdCh4MSwgMCwgeDIgLSB4MSwgdGhpcy5oZWlnaHQp
OwogICAgICAgIH0KICAgIH0sCiAgICBfYnVpbGRUcmFkZVBhdGg6IGZ1bmN0aW9uIChTZXNzaW9u
cykgewogICAgICAgIHZhciBjdHggPSB0aGlzLmRyYXdpbmdDb250ZXh0OwogICAgICAgIHZhciBk
YXRhID0gdGhpcy5kYXRhOwogICAgICAgIHZhciBpc0luZGV4ID0gZGF0YS5EYXRhWzBdLlZhbHVl
LklzSW5kZXg7CiAgICAgICAgdmFyIGZpcnN0ID0gdHJ1ZTsKICAgICAgICB2YXIgeCA9IDA7CiAg
ICAgICAgdmFyIGZpcnN0eDsKICAgICAgICB2YXIgcHJldiA9IG51bGw7CiAgICAgICAgdmFyIGxh
c3Q7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBTZXNzaW9ucy5sZW5ndGg7IGkrKykgewog
ICAgICAgICAgICB2YXIgU2Vzc2lvbiA9IFNlc3Npb25zW2ldOwogICAgICAgICAgICB0aGlzLl9z
ZXRTZXNzaW9uKFNlc3Npb24pOwogICAgICAgICAgICBpZiAoU2Vzc2lvbi5UcmFkZXMpIHsKICAg
ICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgU2Vzc2lvbi5UcmFkZXMubGVuZ3RoOyBq
KyspIHsKICAgICAgICAgICAgICAgICAgICB2YXIgcHJpY2UgPSBTZXNzaW9uLlRyYWRlc1tqXTsK
ICAgICAgICAgICAgICAgICAgICBpZiAocHJpY2UgPT0gbnVsbCkgewogICAgICAgICAgICAgICAg
ICAgICAgICBpZiAocHJldiA9PSBudWxsKSBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAg
ICAgcHJpY2UgPSBwcmV2OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICBwcmV2ID0gcHJpY2U7CiAgICAgICAgICAgICAgICAgICAgdmFyIHkgPSB0aGlzLnR5KHByaWNl
KTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faGlzdG9yaWNhbCkgewogICAgICAgICAg
ICAgICAgICAgICAgICB4ID0gdGhpcy50eChqIC8gdGhpcy5fYmFyU2l6ZSk7CiAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzSW5kZXggPT09
IDEgJiYgdGhpcy5fYmFyU2l6ZSA9PT0gNjApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHggPSB0aGlzLnR4KGogKyAwLjUpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IHRoaXMudHgoaik7CiAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYg
KGZpcnN0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0eCA9IHg7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGN0eC5tb3ZlVG8oMCwgeSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGN0
eC5saW5lVG8oZmlyc3R4LCB5KTsKICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxz
ZTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBj
dHgubGluZVRvKHgsIHkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gewogICAgICAgICAgICBmaXJz
dHg6IGZpcnN0eCwKICAgICAgICAgICAgbGFzdHg6IHgKICAgICAgICB9OwogICAgfSwKICAgIF9z
dHJva2VGaWxsVHJhZGVzOiBmdW5jdGlvbiAoU2Vzc2lvbnMsIHN0cm9rZVN0eWxlKSB7CiAgICAg
ICAgdmFyIGN0eCA9IHRoaXMuZHJhd2luZ0NvbnRleHQ7CiAgICAgICAgY3R4LnNhdmUoKTsKICAg
ICAgICBjdHgubGluZVdpZHRoID0gdGhpcy5zdHlsZS5tYWluUHJpY2VMaW5lV2lkdGg7CiAgICAg
ICAgY3R4LnN0cm9rZVN0eWxlID0gc3Ryb2tlU3R5bGU7CiAgICAgICAgY3R4LmJlZ2luUGF0aCgp
OwogICAgICAgIHRoaXMuX2J1bXAgPSB0cnVlOwogICAgICAgIHZhciB4ID0gdGhpcy5fYnVpbGRU
cmFkZVBhdGgoU2Vzc2lvbnMpOwogICAgICAgIGlmICh4Lmxhc3R4ICE9IHVuZGVmaW5lZCAmJiB4
LmZpcnN0eCAhPSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgY3R4LnN0cm9rZSgpOwogICAgICAg
ICAgICBjdHgubGluZVRvKHgubGFzdHgsIHRoaXMuaGVpZ2h0KTsKICAgICAgICAgICAgY3R4Lmxp
bmVUbygwLCB0aGlzLmhlaWdodCk7CiAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLnN0
eWxlLm1haW5QcmljZUxpbmVGaWxsOwogICAgICAgICAgICBjdHguZmlsbCgpOwogICAgICAgIH0K
ICAgICAgICBjdHgucmVzdG9yZSgpOwogICAgfSwKICAgIF9zdHJva2VUcmFkZXM6IGZ1bmN0aW9u
IChTZXNzaW9ucywgc3Ryb2tlU3R5bGUpIHsKICAgICAgICB2YXIgY3R4ID0gdGhpcy5kcmF3aW5n
Q29udGV4dDsKICAgICAgICBjdHguc2F2ZSgpOwogICAgICAgIGN0eC5taXRlckxpbWl0ID0gMDsK
ICAgICAgICBjdHgubGluZUpvaW4gPSAicm91bmQiOwogICAgICAgIGN0eC5saW5lV2lkdGggPSB0
aGlzLnN0eWxlLm1haW5QcmljZUxpbmVXaWR0aDsKICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBz
dHJva2VTdHlsZTsKICAgICAgICBjdHguYmVnaW5QYXRoKCk7CiAgICAgICAgdGhpcy5fYnVtcCA9
IHRydWU7CiAgICAgICAgdmFyIHggPSB0aGlzLl9idWlsZFRyYWRlUGF0aChTZXNzaW9ucyk7CiAg
ICAgICAgY3R4LnN0cm9rZSgpOwogICAgICAgIGN0eC5yZXN0b3JlKCk7CiAgICB9LAogICAgX2Zp
bGxUcmFkZXM6IGZ1bmN0aW9uIChTZXNzaW9ucykgewogICAgICAgIHZhciBjdHggPSB0aGlzLmRy
YXdpbmdDb250ZXh0OwogICAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLl9maWxsU3R5bGU7CiAg
ICAgICAgY3R4LmJlZ2luUGF0aCgpOwogICAgICAgIHRoaXMuX2J1bXAgPSBmYWxzZTsKICAgICAg
ICB2YXIgcG9pbnRzID0gdGhpcy5fYnVpbGRUcmFkZVBhdGgoU2Vzc2lvbnMpOwogICAgICAgIGlm
IChwb2ludHMubGFzdHggIT0gdW5kZWZpbmVkICYmIHBvaW50cy5maXJzdHggIT0gdW5kZWZpbmVk
KSB7CiAgICAgICAgICAgIGN0eC5saW5lVG8ocG9pbnRzLmxhc3R4LCB0aGlzLmhlaWdodCk7CiAg
ICAgICAgICAgIGN0eC5saW5lVG8oMCwgdGhpcy5oZWlnaHQpOwogICAgICAgIH0KICAgICAgICBj
dHguZmlsbCgpOwogICAgfSwKICAgIF9wcmVjb21wdXRlU3R5bGVzOiBmdW5jdGlvbiAoKSB7CiAg
ICAgICAgaWYgKHRoaXMuc3R5bGUuZ3JhZGllbnRGaWxsU3R5bGUpIHsKICAgICAgICAgICAgdGhp
cy5fZmlsbFN0eWxlID0gdGhpcy5fbWFrZVN0eWxlKHRoaXMuc3R5bGUuZ3JhZGllbnRGaWxsU3R5
bGUpOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5zdHlsZS5tYWluUHJpY2VMaW5lRmlsbCkg
ewogICAgICAgICAgICB0aGlzLl9maWxsU3R5bGUgPSB0aGlzLnN0eWxlLm1haW5QcmljZUxpbmVG
aWxsOwogICAgICAgIH0KICAgICAgICB0aGlzLl9yZWdpb25TdHlsZXMgPSB7fTsKICAgICAgICB2
YXIgc3R5bGVzID0gdGhpcy5zdHlsZS5yZWdpb25TdHlsZXM7CiAgICAgICAgZm9yICh2YXIgc3R5
bGUgaW4gc3R5bGVzKSB7CiAgICAgICAgICAgIHRoaXMuX3JlZ2lvblN0eWxlc1tzdHlsZV0gPSB0
aGlzLl9tYWtlU3R5bGUoc3R5bGVzW3N0eWxlXSk7CiAgICAgICAgfQogICAgfSwKICAgIF9wcmVw
YXJlQ2FudmFzOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgaWYgKCF0aGlzLmRyYXdpbmdDb250ZXh0
IHx8IHRoaXMuZHJhd2luZ0NvbnRleHQgPT09IG51bGwpIHsKICAgICAgICAgICAgdmFyIGNhbnZh
c1dpZHRoID0gdGhpcy53aWR0aDsKICAgICAgICAgICAgdmFyIGNhbnZhc0hlaWdodCA9IHRoaXMu
aGVpZ2h0OwogICAgICAgICAgICB0aGlzLnRhcmdldFNlbGVjdG9yLmlubmVySFRNTCA9ICIiOwog
ICAgICAgICAgICBpZiAoY2FudmFzV2lkdGggPD0gMCB8fCBjYW52YXNIZWlnaHQgPD0gMCkgewog
ICAgICAgICAgICAgICAgdGhyb3cgIkludmFsaWQgZGltZW5zaW9ucyAtIHdpZHRoID0gIiArIGNh
bnZhc1dpZHRoICsgIiwgaGVpZ2h0ID0gIiArIGNhbnZhc0hlaWdodDsKICAgICAgICAgICAgfQog
ICAgICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7
CiAgICAgICAgICAgIGNhbnZhcy5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgY2FudmFzV2lkdGgpOwog
ICAgICAgICAgICBjYW52YXMuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCBjYW52YXNIZWlnaHQpOwog
ICAgICAgICAgICBfZGpsLnBsYWNlKGNhbnZhcywgdGhpcy50YXJnZXRTZWxlY3Rvcik7CiAgICAg
ICAgICAgIGlmICghVGh1bmRlcmJhbGwuVXRpbGl0aWVzLmNoZWNrX2NhbnZhcygpKSB7CiAgICAg
ICAgICAgICAgICBjYW52YXMgPSB3aW5kb3cuR192bWxDYW52YXNNYW5hZ2VyLmluaXRFbGVtZW50
KGNhbnZhcywgY2FudmFzV2lkdGgsIGNhbnZhc0hlaWdodCk7CiAgICAgICAgICAgIH0KICAgICAg
ICAgICAgdGhpcy5kcmF3aW5nQ29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwogICAg
ICAgIH0KICAgICAgICB0aGlzLl9wcmVjb21wdXRlU3R5bGVzKCk7CiAgICB9LAogICAgb3JwaGFu
OiBmdW5jdGlvbiAobm9kZSkgewogICAgICAgIG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChu
b2RlKTsKICAgIH0sCiAgICBfY2xlYXJMYWJlbHM6IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIg
bGFiZWwgPSBkb2pvLnF1ZXJ5KCIjIiArIHRoaXMudGFyZ2V0U2VsZWN0b3IuaWQgKyAiID4gZGl2
Iik7CiAgICB9LAogICAgX2xheW91dFNlc3Npb25zOiBmdW5jdGlvbiAoU2Vzc2lvbnMpIHsKICAg
ICAgICB2YXIgVG90YWxTZXNzaW9uV2VpZ2h0ID0gMDsKICAgICAgICBfZGpsLmZvckVhY2goU2Vz
c2lvbnMsIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgpIHsKICAgICAgICAgICAgVG90YWxTZXNzaW9u
V2VpZ2h0ICs9IHZhbHVlLldlaWdodDsKICAgICAgICB9KTsKICAgICAgICB2YXIgeCA9IDA7CiAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBTZXNzaW9ucy5sZW5ndGg7IGkrKykgewogICAgICAg
ICAgICB2YXIgU2Vzc2lvbiA9IFNlc3Npb25zW2ldOwogICAgICAgICAgICB2YXIgU2Vzc2lvbldp
ZHRoOwogICAgICAgICAgICBTZXNzaW9uV2lkdGggPSBNYXRoLmZsb29yKHRoaXMud2lkdGggKiBT
ZXNzaW9uLldlaWdodCAvIFRvdGFsU2Vzc2lvbldlaWdodCk7CiAgICAgICAgICAgIFNlc3Npb24u
U2Vzc2lvbldpZHRoID0gU2Vzc2lvbldpZHRoOwogICAgICAgICAgICBTZXNzaW9uLl94ID0geDsK
ICAgICAgICAgICAgeCArPSBTZXNzaW9uV2lkdGg7CiAgICAgICAgICAgIHZhciBTZXNzaW9uU3Rh
cnQgPSBTZXNzaW9uLlN0YXJ0LmdldFRpbWUoKTsKICAgICAgICAgICAgdmFyIFNlc3Npb25TdG9w
ID0gU2Vzc2lvbi5TdG9wLmdldFRpbWUoKTsKICAgICAgICAgICAgdmFyIFNlc3Npb25UaW1lID0g
U2Vzc2lvblN0b3AgLSBTZXNzaW9uU3RhcnQ7CiAgICAgICAgICAgIFNlc3Npb24uX3hzY2FsZSA9
IFNlc3Npb25XaWR0aCAqIHRoaXMuX2JhckZhY3RvciAvIChTZXNzaW9uVGltZSk7CiAgICAgICAg
fQogICAgfSwKICAgIF9hdXRvU2NhbGU6IGZ1bmN0aW9uIChEYXRhKSB7CiAgICAgICAgdmFyIE1p
biA9IG51bGw7CiAgICAgICAgdmFyIE1heCA9IG51bGw7CiAgICAgICAgdmFyIEhpZ2ggPSBudWxs
OwogICAgICAgIHZhciBMb3cgPSBudWxsOwogICAgICAgIHZhciBDbG9zZSA9IG51bGw7CiAgICAg
ICAgdmFyIHNlbGYgPSB0aGlzOwogICAgICAgIHZhciBjaGFydFZhbHVlSW5kaWNhdG9ycyA9IHRo
aXMuc3R5bGUuWUF4aXNMYWJlbFN0eWxlOwogICAgICAgIF9kamwuZm9yRWFjaChEYXRhLCBmdW5j
dGlvbiAoU2Vzc2lvbnMsIGkpIHsKICAgICAgICAgICAgdmFyIGluY2x1ZGVQcmV2aW91c0Nsb3Nl
ID0gdHJ1ZTsKICAgICAgICAgICAgaWYgKHNlbGYuc3ltYm9scy5sZW5ndGggPiAxIHx8IFNlc3Np
b25zLlZhbHVlID09PSB1bmRlZmluZWQgfHwgU2Vzc2lvbnMuVmFsdWUuU2Vzc2lvbnMgPT09IHVu
ZGVmaW5lZCB8fCBTZXNzaW9ucy5WYWx1ZS5TZXNzaW9ucy5sZW5ndGggPCAxIHx8IFNlc3Npb25z
LlZhbHVlLlNlc3Npb25zWzBdLlByZXZpb3VzQ2xvc2UgPT09IHVuZGVmaW5lZCB8fCBTZXNzaW9u
cy5WYWx1ZS5TZXNzaW9uc1swXS5QcmV2aW91c0Nsb3NlID09PSBudWxsKSB7CiAgICAgICAgICAg
ICAgICBpbmNsdWRlUHJldmlvdXNDbG9zZSA9IGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAg
ICAgIHZhciBNaW5NYXggPSBzZWxmLl9nZXRNaW5NYXgoU2Vzc2lvbnMuVmFsdWUuU2Vzc2lvbnMs
IGluY2x1ZGVQcmV2aW91c0Nsb3NlKTsKICAgICAgICAgICAgaWYgKGNoYXJ0VmFsdWVJbmRpY2F0
b3JzID09PSAxKSB7CiAgICAgICAgICAgICAgICBzZWxmLl9kZXRlcm1pbmVMYXN0VHJhZGUoU2Vz
c2lvbnMuVmFsdWUuU2Vzc2lvbnNbU2Vzc2lvbnMuVmFsdWUuU2Vzc2lvbnMubGVuZ3RoIC0gMV0u
VHJhZGVzKTsKICAgICAgICAgICAgICAgIExvdyA9IE1pbk1heC5Mb3c7CiAgICAgICAgICAgICAg
ICBIaWdoID0gTWluTWF4LkhpZ2g7CiAgICAgICAgICAgICAgICBpZiAoaW5jbHVkZVByZXZpb3Vz
Q2xvc2UpIHsKICAgICAgICAgICAgICAgICAgICBDbG9zZSA9IFNlc3Npb25zLlZhbHVlLlNlc3Np
b25zWzBdLlByZXZpb3VzQ2xvc2U7CiAgICAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZVByaWNl
ID0gQ2xvc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYg
KCFNaW4gfHwgTWluTWF4Lk1pbiA8IE1pbikgewogICAgICAgICAgICAgICAgTWluID0gTWluTWF4
Lk1pbjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoIU1heCB8fCBNaW5NYXguTWF4ID4g
TWF4KSB7CiAgICAgICAgICAgICAgICBNYXggPSBNaW5NYXguTWF4OwogICAgICAgICAgICB9CiAg
ICAgICAgfSk7CgogICAgICAgIGZ1bmN0aW9uIGRTdGFydCgpIHsKICAgICAgICAgICAgdGhpcy52
YWx1ZSA9IDA7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBkRmluaXNoKCkgewogICAgICAg
ICAgICB0aGlzLnZhbHVlID0gMDsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuc3R5bGUubWF4
UHJpY2VMaW5lcyA+PSAxKSB7CiAgICAgICAgICAgIHZhciBkRmluaXNoT2JqID0gbmV3IGRGaW5p
c2goKTsKICAgICAgICAgICAgdmFyIGRTdGFydE9iaiA9IG5ldyBkU3RhcnQoKTsKICAgICAgICAg
ICAgdmFyIHNjYWxlID0gVGh1bmRlcmJhbGwuQ2hhcnRTY2FsaW5nVjIuQ2FsY3VsYXRlRGVsdGEy
KHRoaXMuc3R5bGUubWF4UHJpY2VMaW5lcywgZmFsc2UsIHRydWUsIE1pbiwgTWF4LCBkU3RhcnRP
YmosIGRGaW5pc2hPYmopOwogICAgICAgICAgICBpZiAoZFN0YXJ0T2JqLnZhbHVlIDwgMCAmJiBz
ZWxmLnN5bWJvbHMubGVuZ3RoID09PSAxKSB7CiAgICAgICAgICAgICAgICBzY2FsZSA9IFRodW5k
ZXJiYWxsLkNoYXJ0U2NhbGluZ1YyLkNhbGN1bGF0ZURlbHRhMihNYXRoLnJvdW5kKHRoaXMuc3R5
bGUubWF4UHJpY2VMaW5lcyAvIDIpLCBmYWxzZSwgdHJ1ZSwgTWluLCBNYXgsIGRTdGFydE9iaiwg
ZEZpbmlzaE9iaik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGNoYXJ0VmFsdWVJbmRp
Y2F0b3JzID09PSAxKSB7CiAgICAgICAgICAgICAgICBpZiAoSGlnaCA9PT0gbnVsbCAmJiBMb3cg
PT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoY2xvc2UgIT0gbnVsbCkgewogICAg
ICAgICAgICAgICAgICAgICAgICBNYXggPSBDbG9zZSArIChDbG9zZSAqIC4wMSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgIE1pbiA9IENsb3NlIC0gKENsb3NlICogLjAxKTsKICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBNYXggPSAxOwogICAgICAg
ICAgICAgICAgICAgICAgICBNaW4gPSAwOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgIHRoaXMuX3ByaWNlTGluZXMgPSBbXTsKICAgICAgICAg
ICAgICAgIHZhciB0aWNrcyA9IHRoaXMuX3ByaWNlTGluZXM7CiAgICAgICAgICAgICAgICBpZiAo
TG93ICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICB0aWNrcy5wdXNoKExvdyk7CiAgICAg
ICAgICAgICAgICAgICAgdGhpcy5sb3dQcmljZSA9IExvdzsKICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgIGlmICh0aGlzLmxhc3RQcmljZSAhPSBudWxsKSB7CiAgICAgICAgICAgICAg
ICAgICAgdGlja3MucHVzaCh0aGlzLmxhc3RQcmljZSk7CiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICBpZiAoKCEoQ2xvc2UgPT09IHVuZGVmaW5lZCB8fCBDbG9zZSA9PT0gbnVsbCkp
KSB7CiAgICAgICAgICAgICAgICAgICAgdGlja3MucHVzaChDbG9zZSk7CiAgICAgICAgICAgICAg
ICAgICAgaWYgKEhpZ2ggIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICB0aWNrcy5w
dXNoKEhpZ2gpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZ2hQcmljZSA9IEhpZ2g7
CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICBpZiAoSGlnaCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRp
Y2tzLnB1c2goSGlnaCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGlnaFByaWNlID0g
SGlnaDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICBNaW4gPSBNYXRoLm1pbihNaW4sIGRTdGFydE9iai52
YWx1ZSk7CiAgICAgICAgICAgICAgICBNYXggPSBNYXRoLm1heChNYXgsIGRGaW5pc2hPYmoudmFs
dWUpOwogICAgICAgICAgICAgICAgdGhpcy5fcHJpY2VMaW5lcyA9IFtdOwogICAgICAgICAgICAg
ICAgdmFyIHRpY2tzID0gdGhpcy5fcHJpY2VMaW5lczsKICAgICAgICAgICAgICAgIGlmIChzY2Fs
ZSA+IDApIHsKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBwID0gZFN0YXJ0T2JqLnZhbHVl
OyBwIDw9IGRGaW5pc2hPYmoudmFsdWUgKyAoKGRGaW5pc2hPYmoudmFsdWUgLSBkU3RhcnRPYmou
dmFsdWUpICogLjA1KTsgcCArPSBzY2FsZSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aWNr
c1t0aWNrcy5sZW5ndGhdID0gcDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdmFyIHBhZCA9IHRoaXMuc3R5bGUu
dlBhZGRpbmc7CiAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMuaGVpZ2h0IC0gMi4wICogcGFkOwog
ICAgICAgIGlmIChNYXggLSBNaW4gPT09IDApIHsKICAgICAgICAgICAgaWYgKE1heCA8IE1pbikg
ewogICAgICAgICAgICAgICAgdmFyIFRtcCA9IE1pbjsKICAgICAgICAgICAgICAgIE1pbiA9IE1h
eDsKICAgICAgICAgICAgICAgIE1heCA9IFRtcDsKICAgICAgICAgICAgfQogICAgICAgICAgICB2
YXIgTWF4ID0gTWF0aC5hYnMoTWF4KTsKICAgICAgICAgICAgaWYgKE1heCA9PSAwKSBNYXggPSAx
OwogICAgICAgICAgICBpZiAoTWF4IDwgMCkgTWF4ID0gMDsKICAgICAgICAgICAgZWxzZSBpZiAo
TWF4ID09IDApIE1heCA9IDE7CiAgICAgICAgICAgIGVsc2UgTWluID0gMDsKICAgICAgICB9CiAg
ICAgICAgdGhpcy5feXNjYWxlID0gLWhlaWdodCAvIChNYXggLSBNaW4pOwogICAgICAgIHRoaXMu
X3kgPSBoZWlnaHQgLSBNaW4gKiB0aGlzLl95c2NhbGUgKyBwYWQ7CiAgICB9LAogICAgX3NldFNl
c3Npb246IGZ1bmN0aW9uIChzZXNzaW9uKSB7CiAgICAgICAgdGhpcy5feHNjYWxlID0gc2Vzc2lv
bi5feHNjYWxlOwogICAgICAgIHRoaXMuX3ggPSBzZXNzaW9uLl94OwogICAgfSwKICAgIHR4OiBm
dW5jdGlvbiAoeCkgewogICAgICAgIGlmICghdGhpcy5feCkgewogICAgICAgICAgICB0aGlzLl94
ID0gMTsKICAgICAgICB9CiAgICAgICAgaWYgKCF0aGlzLl94c2NhbGUpIHsKICAgICAgICAgICAg
dGhpcy5feHNjYWxlID0gMTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IodGhp
cy5feHNjYWxlICogeCArIHRoaXMuX3gpICsgKHRoaXMuX2J1bXAgPyAwLjUgOiAwKTsKICAgIH0s
CiAgICB0eTogZnVuY3Rpb24gKHkpIHsKICAgICAgICByZXR1cm4gTWF0aC5mbG9vcih0aGlzLl95
c2NhbGUgKiB5ICsgdGhpcy5feSkgKyAodGhpcy5fYnVtcCA/IDAuNSA6IDApOwogICAgfSwKICAg
IF9tYWtlU3R5bGU6IGZ1bmN0aW9uIChzcGVjKSB7CiAgICAgICAgdmFyIHN0ZXBzID0gc3BlYy5z
cGxpdCgnLScpOwogICAgICAgIGlmIChzdGVwcy5sZW5ndGggPT0gMikgewogICAgICAgICAgICB2
YXIgZ3JhZGllbnQgPSB0aGlzLmRyYXdpbmdDb250ZXh0LmNyZWF0ZUxpbmVhckdyYWRpZW50KDAs
IDAsIDAsIHRoaXMuaGVpZ2h0KTsKICAgICAgICAgICAgZ3JhZGllbnQuYWRkQ29sb3JTdG9wKDAs
IHN0ZXBzWzBdKTsKICAgICAgICAgICAgZ3JhZGllbnQuYWRkQ29sb3JTdG9wKDEsIHN0ZXBzWzFd
KTsKICAgICAgICAgICAgcmV0dXJuIGdyYWRpZW50OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgIHJldHVybiBzcGVjOwogICAgICAgIH0KICAgIH0sCiAgICBfZGV0ZXJtaW5lTGFzdFRyYWRl
OiBmdW5jdGlvbiAoVHJhZGVzKSB7CiAgICAgICAgdmFyIGxhdGVzdFByaWNlID0gbnVsbDsKICAg
ICAgICBmb3IgKHZhciBrID0gVHJhZGVzLmxlbmd0aCAtIDE7IGsgPj0gMCAmJiBsYXRlc3RQcmlj
ZSA9PT0gbnVsbDsgay0tKSB7CiAgICAgICAgICAgIGlmIChUcmFkZXNba10pIHsKICAgICAgICAg
ICAgICAgIGxhdGVzdFByaWNlID0gVHJhZGVzW2tdOwogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgICAgIHRoaXMubGFzdFByaWNlID0gbGF0ZXN0UHJpY2U7CiAgICB9LAogICAgX2dldE1pbk1h
eDogZnVuY3Rpb24gKFNlc3Npb25zLCBJbmNsdWRlUHJldmlvdXNDbG9zZSkgewogICAgICAgIHZh
ciBNaW5Qb2ludDsKICAgICAgICB2YXIgTWF4UG9pbnQ7CiAgICAgICAgdmFyIE1pbjsKICAgICAg
ICB2YXIgTWF4OwogICAgICAgIHZhciBMb3dQcmljZTsKICAgICAgICB2YXIgSGlnaFByaWNlOwog
ICAgICAgIHZhciBTZXNzaW9uSGlnaFBvaW50ID0gewogICAgICAgICAgICBJbmRleDogbnVsbCwK
ICAgICAgICAgICAgUHJpY2U6IG51bGwsCiAgICAgICAgICAgIFNlc3Npb25JbmRleDogbnVsbAog
ICAgICAgIH07CiAgICAgICAgdmFyIFNlc3Npb25Mb3dQb2ludCA9IHsKICAgICAgICAgICAgSW5k
ZXg6IG51bGwsCiAgICAgICAgICAgIFByaWNlOiBudWxsLAogICAgICAgICAgICBTZXNzaW9uSW5k
ZXg6IG51bGwKICAgICAgICB9OwogICAgICAgIGlmIChJbmNsdWRlUHJldmlvdXNDbG9zZSAmJiBT
ZXNzaW9uc1swXS5QcmV2aW91c0Nsb3NlICE9PSBudWxsKSB7CiAgICAgICAgICAgIE1heCA9IE1p
biA9IFNlc3Npb25zWzBdLlByZXZpb3VzQ2xvc2U7CiAgICAgICAgfQogICAgICAgIHZhciBuZWVk
c0J1bXAgPSBmYWxzZTsKICAgICAgICBpZiAodGhpcy5kYXRhLkRhdGFbMF0uVmFsdWUuSXNJbmRl
eCA9PT0gMSAmJiB0aGlzLl9iYXJTaXplID09PSA2MCkgewogICAgICAgICAgICBuZWVkc0J1bXAg
PSB0cnVlOwogICAgICAgIH0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IFNlc3Npb25zLmxl
bmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBTZXNzaW9uID0gU2Vzc2lvbnNbaV07CiAgICAg
ICAgICAgIHRoaXMuX3NldFNlc3Npb24oU2Vzc2lvbik7CiAgICAgICAgICAgIGlmICghU2Vzc2lv
bi5UcmFkZXMpIHsKICAgICAgICAgICAgICAgIFNlc3Npb24uVHJhZGVzID0gW107CiAgICAgICAg
ICAgIH0KICAgICAgICAgICAgdmFyIExvdyA9IFNlc3Npb24uTG93OwogICAgICAgICAgICB2YXIg
SGlnaCA9IFNlc3Npb24uSGlnaDsKICAgICAgICAgICAgaWYgKExvdyB8fCBIaWdoKSB7CiAgICAg
ICAgICAgICAgICBpZiAoTG93ICYmICghTWluIHx8IExvdy5QcmljZSA8IE1pbikpIHsKICAgICAg
ICAgICAgICAgICAgICBNaW4gPSBMb3cuUHJpY2U7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRo
aXMuX2hpc3RvcmljYWwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgTWluUG9pbnQgPSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB4OiB0aGlzLnR4KExvdy5JbmRleCAvIHRoaXMuX2Jh
clNpemUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogdGhpcy50eShNaW4pCiAgICAg
ICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG5lZWRzQnVtcCkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTWluUG9pbnQgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogdGhp
cy50eChMb3cuSW5kZXggKyAwLjUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6
IHRoaXMudHkoTWluKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pblBvaW50
ID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IHRoaXMudHgoTG93LkluZGV4
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiB0aGlzLnR5KE1pbikKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgU2Vzc2lvbkxvd1BvaW50LkluZGV4
ID0gTG93LkluZGV4OwogICAgICAgICAgICAgICAgICAgIFNlc3Npb25Mb3dQb2ludC5QcmljZSA9
IExvdy5QcmljZTsKICAgICAgICAgICAgICAgICAgICBTZXNzaW9uTG93UG9pbnQuU2Vzc2lvbklu
ZGV4ID0gaTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChIaWdoICYmICgh
TWF4IHx8IEhpZ2guUHJpY2UgPiBNYXgpKSB7CiAgICAgICAgICAgICAgICAgICAgTWF4ID0gSGln
aC5QcmljZTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faGlzdG9yaWNhbCkgewogICAg
ICAgICAgICAgICAgICAgICAgICBNYXhQb2ludCA9IHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHg6IHRoaXMudHgoSGlnaC5JbmRleCAvIHRoaXMuX2JhclNpemUpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeTogdGhpcy50eShNYXgpCiAgICAgICAgICAgICAgICAgICAgICAgIH07
CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG5lZWRzQnVtcCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF4UG9pbnQgPSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogdGhpcy50eChIaWdoLkluZGV4ICsgMC41
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiB0aGlzLnR5KE1heCkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXhQb2ludCA9IHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB4OiB0aGlzLnR4KEhpZ2guSW5kZXgpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHk6IHRoaXMudHkoTWF4KQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICBTZXNzaW9uSGlnaFBvaW50LkluZGV4ID0gSGlnaC5JbmRleDsKICAg
ICAgICAgICAgICAgICAgICBTZXNzaW9uSGlnaFBvaW50LlByaWNlID0gSGlnaC5QcmljZTsKICAg
ICAgICAgICAgICAgICAgICBTZXNzaW9uSGlnaFBvaW50LlNlc3Npb25JbmRleCA9IGk7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoTG93ICYmICghTG93UHJpY2UgfHwgTG93
LlByaWNlIDwgTG93UHJpY2UpKSB7CiAgICAgICAgICAgICAgICAgICAgTG93UHJpY2UgPSBMb3cu
UHJpY2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoSGlnaCAmJiAoIUhp
Z2hQcmljZSB8fCBIaWdoLlByaWNlID4gSGlnaFByaWNlKSkgewogICAgICAgICAgICAgICAgICAg
IEhpZ2hQcmljZSA9IEhpZ2guUHJpY2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0K
ICAgICAgICB9CiAgICAgICAgdmFyIFVuaXF1ZUhpZ2hQb2ludCA9IG51bGw7CiAgICAgICAgdmFy
IFVuaXF1ZUxvd1BvaW50ID0gbnVsbDsKICAgICAgICBpZiAoU2Vzc2lvbkhpZ2hQb2ludC5JbmRl
eCAhPSBudWxsICYmIFNlc3Npb25IaWdoUG9pbnQuUHJpY2UgIT0gbnVsbCAmJiBTZXNzaW9uSGln
aFBvaW50LlNlc3Npb25JbmRleCAhPSBudWxsKSB7CiAgICAgICAgICAgIGlmIChTZXNzaW9uSGln
aFBvaW50LlNlc3Npb25JbmRleCA8IFNlc3Npb25zLmxlbmd0aCAmJiBTZXNzaW9uSGlnaFBvaW50
LkluZGV4IDwgU2Vzc2lvbnNbU2Vzc2lvbkhpZ2hQb2ludC5TZXNzaW9uSW5kZXhdLlRyYWRlcy5s
ZW5ndGgpIHsKICAgICAgICAgICAgICAgIFVuaXF1ZUhpZ2hQb2ludCA9IFNlc3Npb25IaWdoUG9p
bnQuUHJpY2U7CiAgICAgICAgICAgICAgICBIaWdoUHJpY2UgPSBTZXNzaW9uSGlnaFBvaW50LlBy
aWNlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChTZXNzaW9uTG93UG9pbnQu
SW5kZXggIT0gbnVsbCAmJiBTZXNzaW9uTG93UG9pbnQuUHJpY2UgIT0gbnVsbCAmJiBTZXNzaW9u
TG93UG9pbnQuU2Vzc2lvbkluZGV4ICE9IG51bGwpIHsKICAgICAgICAgICAgaWYgKFNlc3Npb25M
b3dQb2ludC5TZXNzaW9uSW5kZXggPCBTZXNzaW9ucy5sZW5ndGggJiYgU2Vzc2lvbkxvd1BvaW50
LkluZGV4IDwgU2Vzc2lvbnNbU2Vzc2lvbkxvd1BvaW50LlNlc3Npb25JbmRleF0uVHJhZGVzLmxl
bmd0aCkgewogICAgICAgICAgICAgICAgVW5pcXVlTG93UG9pbnQgPSBTZXNzaW9uTG93UG9pbnQu
UHJpY2U7CiAgICAgICAgICAgICAgICBMb3dQcmljZSA9IFNlc3Npb25Mb3dQb2ludC5QcmljZTsK
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoVW5pcXVlSGlnaFBvaW50ICE9PSBu
dWxsICYmIFVuaXF1ZUxvd1BvaW50ICE9PSBudWxsKSB7CiAgICAgICAgICAgIGlmIChTZXNzaW9u
TG93UG9pbnQuU2Vzc2lvbkluZGV4ID09IFNlc3Npb25IaWdoUG9pbnQuU2Vzc2lvbkluZGV4KSB7
CiAgICAgICAgICAgICAgICBpZiAoU2Vzc2lvbkxvd1BvaW50LkluZGV4ICE9PSBTZXNzaW9uSGln
aFBvaW50LkluZGV4KSB7CiAgICAgICAgICAgICAgICAgICAgU2Vzc2lvbnNbU2Vzc2lvbkxvd1Bv
aW50LlNlc3Npb25JbmRleF0uVHJhZGVzW1Nlc3Npb25Mb3dQb2ludC5JbmRleF0gPSBVbmlxdWVM
b3dQb2ludDsKICAgICAgICAgICAgICAgICAgICBTZXNzaW9uc1tTZXNzaW9uSGlnaFBvaW50LlNl
c3Npb25JbmRleF0uVHJhZGVzW1Nlc3Npb25IaWdoUG9pbnQuSW5kZXhdID0gVW5pcXVlSGlnaFBv
aW50OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgU2Vzc2lvbnNbU2Vzc2lvbkxvd1BvaW50LlNlc3Npb25JbmRleF0uVHJhZGVzW1Nlc3Npb25M
b3dQb2ludC5JbmRleF0gPSBVbmlxdWVMb3dQb2ludDsKICAgICAgICAgICAgICAgIFNlc3Npb25z
W1Nlc3Npb25IaWdoUG9pbnQuU2Vzc2lvbkluZGV4XS5UcmFkZXNbU2Vzc2lvbkhpZ2hQb2ludC5J
bmRleF0gPSBVbmlxdWVIaWdoUG9pbnQ7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYg
KFVuaXF1ZUhpZ2hQb2ludCAhPT0gbnVsbCkgewogICAgICAgICAgICBTZXNzaW9uc1tTZXNzaW9u
SGlnaFBvaW50LlNlc3Npb25JbmRleF0uVHJhZGVzW1Nlc3Npb25IaWdoUG9pbnQuSW5kZXhdID0g
VW5pcXVlSGlnaFBvaW50OwogICAgICAgIH0gZWxzZSBpZiAoVW5pcXVlTG93UG9pbnQgIT09IG51
bGwpIHsKICAgICAgICAgICAgU2Vzc2lvbnNbU2Vzc2lvbkxvd1BvaW50LlNlc3Npb25JbmRleF0u
VHJhZGVzW1Nlc3Npb25Mb3dQb2ludC5JbmRleF0gPSBVbmlxdWVMb3dQb2ludDsKICAgICAgICB9
CiAgICAgICAgcmV0dXJuICh7CiAgICAgICAgICAgIE1pbjogTWluLAogICAgICAgICAgICBNYXg6
IE1heCwKICAgICAgICAgICAgTG93OiBMb3dQcmljZSwKICAgICAgICAgICAgSGlnaDogSGlnaFBy
aWNlLAogICAgICAgICAgICBNaW5Qb2ludDogTWluUG9pbnQsCiAgICAgICAgICAgIE1heFBvaW50
OiBNYXhQb2ludAogICAgICAgIH0pOwogICAgfQp9Owpkb2pvLnByb3ZpZGUoImRqLndpZGdldC5z
dXJ2ZXkuV1NKRE5Qb3BVbmRlciIpOwpkb2pvLnJlcXVpcmUoImRqLmxhbmciKTsKZG9qby5yZXF1
aXJlKCJkai51dGlsLkNvb2tpZSIpOwpkb2pvLnJlcXVpcmUoImRqLnV0aWwuVXJsIik7CmRvam8u
cmVxdWlyZSgiZGoudXRpbC5Vc2VyIik7CihmdW5jdGlvbiAoKSB7CiAgICB2YXIgX2R1ID0gZGou
dXRpbDsKICAgIHZhciBfZHdzID0gZGoud2lkZ2V0LnN1cnZleTsKICAgIChfZHdzLldTSkROUG9w
VW5kZXIgPSBmdW5jdGlvbiAoY2ZnKSB7CiAgICAgICAgdGhpcy5fY2ZnID0gZGoubGFuZy5jbG9u
ZU1peGluKHRoaXMuREVGQVVMVF9DT05GSUcsIGNmZyk7CiAgICAgICAgdGhpcy5fZHVjID0gZGou
dXRpbC5Db29raWU7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzOwog
ICAgICAgICAgICB0aGF0LnBvcHVuZGVyKCk7CiAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAg
ICAgICB0aHJvdyBlOwogICAgICAgIH0KICAgIH0pLnByb3RvdHlwZSA9IHsKICAgICAgICBERUZB
VUxUX0NPTkZJRzogewogICAgICAgICAgICAidXJsIjogImh0dHA6Ly93c2pkbi53c2ouY29tLyIs
CiAgICAgICAgICAgICJjb29raWVOYW1lIjogIndzamRucG9wdW5kZXIiLAogICAgICAgICAgICAi
d2luZG93TmFtZSI6ICJXU0pETiIsCiAgICAgICAgICAgICJub1JlcGVhdEludGVydmFsIjogIjFk
KyIsCiAgICAgICAgICAgICJmcmVxdWVuY3lQZXJjZW50IjogMTAwLAogICAgICAgICAgICAiY29v
a2llR3JvdXBFeHBpcmF0aW9uRGF5cyI6ICI5MCIsCiAgICAgICAgICAgICJibHVyUG9wdW5kZXIi
OiB0cnVlLAogICAgICAgICAgICAid2lkdGgiOiAwLAogICAgICAgICAgICAiaGVpZ2h0IjogMCwK
ICAgICAgICAgICAgInBvcHVwUGFyYW1zIjogIm1lbnViYXI9eWVzLHRvb2xiYXI9eWVzLGxvY2F0
aW9uPXllcyxzdGF0dXM9eWVzLHJlc2l6YWJsZT15ZXMscGVyc29uYWxiYXI9eWVzLHNjcm9sbGJh
cnM9eWVzIgogICAgICAgIH0sCiAgICAgICAgcG9wdW5kZXI6IGZ1bmN0aW9uICgpIHsKICAgICAg
ICAgICAgdmFyIENvb2tpZSA9IHRoaXMuX2R1YzsKICAgICAgICAgICAgaWYgKHRoaXMuX2NhblNo
b3dQb3B1bmRlcigpKSB7CiAgICAgICAgICAgICAgICB0aGlzLl9zZXROb1JlcGVhdENvb2tpZSh0
aGlzLl9jZmcubm9SZXBlYXRJbnRlcnZhbCk7CiAgICAgICAgICAgICAgICB0aGlzLnNob3dQb3BV
bmRlcigpOwogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBzaG93UG9wVW5kZXI6IGZ1
bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGRpbWVuc2lvbnMgPSAiIgogICAgICAgICAgICBp
ZiAodGhpcy5fY2ZnLndpZHRoKSB7CiAgICAgICAgICAgICAgICBkaW1lbnNpb25zID0gIndpZHRo
PSIgKyB0aGlzLl9jZmcud2lkdGggKyAiLGhlaWdodD0iICsgdGhpcy5fY2ZnLmhlaWdodCArICIs
IjsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgcG9wdW5kZXIgPSB3aW5kb3cub3Blbih0
aGlzLl9jZmcudXJsLCB0aGlzLl9jZmcud2luZG93TmFtZSwgZGltZW5zaW9ucyArIHRoaXMuX2Nm
Zy5wb3B1cFBhcmFtcyk7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKHBvcHVuZGVyKTsKICAgICAg
ICAgICAgaWYgKHRoaXMuX2NmZy5ibHVyUG9wdW5kZXIgJiYgcG9wdW5kZXIgIT0gbnVsbCkgewog
ICAgICAgICAgICAgICAgcG9wdW5kZXIuYmx1cigpOwogICAgICAgICAgICAgICAgd2luZG93LmZv
Y3VzKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIF9jYW5TaG93UG9wdW5kZXI6
IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIG5vdyA9IG5ldyBEYXRlKCk7CiAgICAgICAg
ICAgIGlmICgobm93LmdldFRpbWUoKSAlIDEwMCkgPiB0aGlzLl9jZmcuZnJlcXVlbmN5UGVyY2Vu
dCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAg
ICAgIHZhciBzaG93UG9wdW5kZXIgPSB0cnVlOwogICAgICAgICAgICB2YXIgbm9SZXBlYXRDb29r
aWUgPSB0aGlzLl9kdWMuZ2V0R3JvdXBDb29raWUoIkRKQ09PS0lFIiwgdGhpcy5fY2ZnLmNvb2tp
ZU5hbWUpOwogICAgICAgICAgICBpZiAobm9SZXBlYXRDb29raWUpIHsKICAgICAgICAgICAgICAg
IHZhciBub1JlcGVhdERhdGUgPSBuZXcgRGF0ZShub1JlcGVhdENvb2tpZSk7CiAgICAgICAgICAg
ICAgICBpZiAoKG5vUmVwZWF0RGF0ZSAtIG5vdykgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAg
c2hvd1BvcHVuZGVyID0gZmFsc2U7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgICAgIHRoaXMuX2R1Yy5kZWxldGVHcm91cENvb2tpZSgiREpDT09LSUUiLCB0aGlzLl9j
ZmcuY29va2llTmFtZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAg
ICAgcmV0dXJuIHNob3dQb3B1bmRlcjsKICAgICAgICB9LAogICAgICAgIF9zZXROb1JlcGVhdENv
b2tpZTogZnVuY3Rpb24gKGludGVydmFsKSB7CiAgICAgICAgICAgIHZhciBub1JlcGVhdERhdGUg
PSB0aGlzLl9jYWxjRGF0ZShpbnRlcnZhbCk7CiAgICAgICAgICAgIHRoaXMuX2R1Yy5zZXRHcm91
cENvb2tpZSgiREpDT09LSUUiLCB0aGlzLl9jZmcuY29va2llTmFtZSwgbm9SZXBlYXREYXRlLCB0
aGlzLl9jZmcuY29va2llR3JvdXBFeHBpcmF0aW9uRGF5cyk7CiAgICAgICAgfSwKICAgICAgICBf
Y2FsY0RhdGU6IGZ1bmN0aW9uIChEKSB7CiAgICAgICAgICAgIHZhciBNUyA9IHRoaXMuX2NhbGNN
aWxsaXNlY29uZHMoRCksCiAgICAgICAgICAgICAgICBkTyA9IG5ldyBEYXRlKCk7CiAgICAgICAg
ICAgIGRPLnNldFRpbWUoKEQuc3Vic3RyaW5nKEQubGVuZ3RoIC0gMSwgRC5sZW5ndGgpID09ICIr
IikgPyBkTy5nZXRUaW1lKCkgKyBNUyA6IGRPLmdldFRpbWUoKSAtIE1TKTsKICAgICAgICAgICAg
cmV0dXJuIGRPLnRvR01UU3RyaW5nKCk7CiAgICAgICAgfSwKICAgICAgICBfY2FsY01pbGxpc2Vj
b25kczogZnVuY3Rpb24gKEQpIHsKICAgICAgICAgICAgdmFyIFREID0gRC5zdWJzdHJpbmcoMCwg
RC5sZW5ndGggLSAyKSwKICAgICAgICAgICAgICAgIFRDID0gRC5zdWJzdHJpbmcoRC5sZW5ndGgg
LSAyLCBELmxlbmd0aCAtIDEpLnRvTG93ZXJDYXNlKCksCiAgICAgICAgICAgICAgICBNUyA9IDA7
CiAgICAgICAgICAgIE1TID0gKFRDID09ICJtIikgPyBURCAqICgoMjQgKiA2MCAqIDYwICogMTAw
MCkgKiAzMCkgOiBNUzsKICAgICAgICAgICAgTVMgPSAoVEMgPT0gImQiKSA/IFREICogKDI0ICog
NjAgKiA2MCAqIDEwMDApIDogTVM7CiAgICAgICAgICAgIE1TID0gKFRDID09ICJzIikgPyBURCAq
IDEwMDAgOiBNUzsKICAgICAgICAgICAgcmV0dXJuIE1TOwogICAgICAgIH0KICAgIH07Cn0oKSk7
CmRvam8ucHJvdmlkZSgiZGoubW9kdWxlLmdsb2JhbE5hdiIpOwpkai5tb2R1bGUuZ2xvYmFsTmF2
ID0gewogICAgc2V0dXBRdWlja2xpbmtzOiBmdW5jdGlvbiAoYSwgYikgewogICAgICAgIHRoaXMu
b0hpZGVRdWlja0xpbmtzID0gZG9qby5xdWVyeSgiLmhpZGVRdWlja0xpbmtzIik7CiAgICAgICAg
dGhpcy5vR2xvYmFsU3ViTmF2ID0gZG9qby5ieUlkKGEpOwogICAgICAgIHRoaXMub1F1aWNrbGlu
a3NDb250YWluZXIgPSBkb2pvLmJ5SWQoYik7CiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9IaWRl
UXVpY2tMaW5rcyA9PT0gInVuZGVmaW5lZCIpIGlmICh0aGlzLm9HbG9iYWxTdWJOYXYgPT09IG51
bGwpIGlmICh0aGlzLm9RdWlja2xpbmtzQ29udGFpbmVyICE9IG51bGwpIHsKICAgICAgICAgICAg
ZG9qby5yZW1vdmVDbGFzcyh0aGlzLm9RdWlja2xpbmtzQ29udGFpbmVyLCAic3VibmF2X2hpZGUi
KTsKICAgICAgICAgICAgZG9qby5hZGRDbGFzcyh0aGlzLm9RdWlja2xpbmtzQ29udGFpbmVyLCAi
c3VibmF2X3Nob3ciKQogICAgICAgIH0KICAgIH0KfTsKZG9qby5wcm92aWRlKCJkai5tb2R1bGUu
aGVhZGVyLmxvY2FsV2VhdGhlciIpOwpkb2pvLnJlcXVpcmUoImRqLnV0aWwuQ29va2llIik7CmRv
am8ucmVxdWlyZSgiZGoudXRpbC5Vc2VyIik7CihmdW5jdGlvbiAoKSB7CiAgICBkai5tb2R1bGUu
aGVhZGVyLmxvY2FsV2VhdGhlciA9IHsKICAgICAgICBpbml0OiBmdW5jdGlvbiAoYSkgewogICAg
ICAgICAgICB2YXIgYiA9IHsKICAgICAgICAgICAgICAgIGRlZmF1bHRMb2NhdGlvbjogIjEwMDA1
IiwKICAgICAgICAgICAgICAgIGV4cGlyZUludGVydmFsOiAiMTIwMCIsCiAgICAgICAgICAgICAg
ICBodG1sU2VydmljZTogIi9wdWJsaWMvcGFnZS8wXzBfV0NfSGVhZGVyV2VhdGhlciIsCiAgICAg
ICAgICAgICAgICBwb3B1bGF0ZUVsOiAid2VhdGhlckNvbnRlbnQiLAogICAgICAgICAgICAgICAg
aWZyYW1lSWQ6ICJpZnJhbWV3ZWF0aGVyRGV0YWlscyIsCiAgICAgICAgICAgICAgICBpZnJhbWVQ
YXJhbTogImxvY2F0aW9uIiwKICAgICAgICAgICAgICAgIGxvY2F0aW9uTmFtZUlkOiAibG9jYXRp
b25OYW1lIiwKICAgICAgICAgICAgICAgIHB6blVybDogIi9wem51c2Vyc3ZjL3VwZGF0ZS91c2Vy
L3Byb2ZpbGUiLAogICAgICAgICAgICAgICAgc2V0UHpuV2VhdGhlclVybDogIi9wem51c2Vyc3Zj
L3ZpZXcvdXNlci9wcm9maWxlP3Byb2ZpbGVUeXBlPXdlYXRoZXJDb2RlIiwKICAgICAgICAgICAg
ICAgIHJlZGlyZWN0VXJsOiAiaHR0cDovL2NvbW1lcmNlLndzai5jb20vYXV0aC9sb2dpbiIsCiAg
ICAgICAgICAgICAgICBsb2NhdGlvblNhdmVkVHh0OiAiRGVmYXVsdCBsb2NhdGlvbiBzYXZlZCIK
ICAgICAgICAgICAgfTsKICAgICAgICAgICAgZG9qby5taXhpbihiLCBhKTsKICAgICAgICAgICAg
dGhpcy5jb25maWcgPSBiOwogICAgICAgICAgICB0aGlzLmNvb2tpZVdlYXRoZXJDb2RlID0gdGhp
cy5nZXRDb29raWUoIndlYXRoZXJDb2RlIik7CiAgICAgICAgICAgIHRoaXMuY29va2llV2VhdGhl
ckpzb24gPSB0aGlzLmdldENvb2tpZSgid2VhdGhlckpzb24iKTsKICAgICAgICAgICAgZGoudXRp
bC5SZWdpb24uZ2V0Vmlld0J5UmVnaW9uKCkgPT0gIm5hLHVzIiAmJiB0aGlzLl9sb2FkKCkKICAg
ICAgICB9LAogICAgICAgIF9sb2FkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBhID0g
dGhpczsKICAgICAgICAgICAgZGoudXRpbC5Vc2VyLmlzTG9nZ2VkSW4oZnVuY3Rpb24gKGIpIHsK
ICAgICAgICAgICAgICAgIGlmIChiKSBkai51dGlsLlVzZXIuZ2V0VXNlcklkKGZ1bmN0aW9uIChj
KSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGEuZ2V0Q29va2llKCJ3ZWF0aGVyVXNlciIpID09
IGMpIGlmIChhLmlzRXhwaXJlZCgid2VhdGhlckV4cGlyZSIpKSBhLmdldFB6bkxvY2FsV2VhdGhl
cigpOwogICAgICAgICAgICAgICAgICAgIGVsc2UgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAg
ICAgYS5wb3B1bGF0ZUhlYWRlckpzb24oZG9qby5mcm9tSnNvbihhLmNvb2tpZVdlYXRoZXJKc29u
KSkKICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChkKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIChjID0gYS5nZXRDb29raWUoIndlYXRoZXJDb2RlIikpID8gYS5nZXRIVE1MKGMpIDogYS5n
ZXRIVE1MKGEuY29uZmlnLmRlZmF1bHRMb2NhdGlvbikKICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgICAgICAgICBhLmNsZWFyV2VhdGhlckNvb2tpZXMoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgYS5nZXRQem5Mb2NhbFdlYXRoZXIoKQogICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgZWxzZSBpZiAoYS5p
c0V4cGlyZWQoIndlYXRoZXJFeHBpcmUiKSkgYS5nZXRIVE1MKGEuY29uZmlnLmRlZmF1bHRMb2Nh
dGlvbik7CiAgICAgICAgICAgICAgICBlbHNlIGlmIChhLmdldENvb2tpZSgid2VhdGhlckNvZGUi
KSA9PSBhLmNvbmZpZy5kZWZhdWx0TG9jYXRpb24pIGEuY29va2llV2VhdGhlckpzb24gPyBhLnBv
cHVsYXRlSGVhZGVySnNvbihkb2pvLmZyb21Kc29uKGEuY29va2llV2VhdGhlckpzb24pKSA6IGEu
Z2V0SFRNTChhLmNvbmZpZy5kZWZhdWx0TG9jYXRpb24pOwogICAgICAgICAgICAgICAgZWxzZSBh
LmdldEhUTUwoYS5jb25maWcuZGVmYXVsdExvY2F0aW9uKQogICAgICAgICAgICB9KQogICAgICAg
IH0sCiAgICAgICAgZ2V0SFRNTDogZnVuY3Rpb24gKGEpIHsKICAgICAgICAgICAgdmFyIGIgPSB0
aGlzOwogICAgICAgICAgICBkb2pvLnhockdldCh7CiAgICAgICAgICAgICAgICB1cmw6IGIuY29u
ZmlnLmh0bWxTZXJ2aWNlICsgIi0iICsgYSArICIuaHRtbCIsCiAgICAgICAgICAgICAgICBoZWFk
ZXJzOiB7CiAgICAgICAgICAgICAgICAgICAgQWNjZXB0OiAiYXBwbGljYXRpb24vaHRtbCIKICAg
ICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBoYW5kbGVBczogInRleHQiLAogICAgICAg
ICAgICAgICAgbG9hZDogZnVuY3Rpb24gKGMsIGQpIHsKICAgICAgICAgICAgICAgICAgICBkLnho
ci5nZXRSZXNwb25zZUhlYWRlcigiU3RhdHVzIik7CiAgICAgICAgICAgICAgICAgICAgaWYgKGMu
bWF0Y2goLzx1bCBjbGFzcz0ibG9jYWwtaW5mbyI+LykpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgYi5wb3B1bGF0ZUhlYWRlckh0bWwoYyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGRqLnV0
aWwuVXNlci5nZXRVc2VySWQoZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGIuc2V0Q29va2llKCJ3ZWF0aGVyVXNlciIsIGUpCiAgICAgICAgICAgICAgICAgICAgICAg
IH0pOwogICAgICAgICAgICAgICAgICAgICAgICBiLnNldENvb2tpZSgid2VhdGhlckpzb24iLCBk
b2pvLnRvSnNvbihiLnBhcnNlSFRNTChjKSkpOwogICAgICAgICAgICAgICAgICAgICAgICBiLnNl
dENvb2tpZSgid2VhdGhlckV4cGlyZSIsIGIuY2FsY0RhdGUoYi5jb25maWcuZXhwaXJlSW50ZXJ2
YWwgKyAicysiKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGIuc2V0Q29va2llKCJ3ZWF0aGVy
Q29kZSIsIGEpCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGNvbnNvbGUuZXJyb3IoIkNvdWxk
IG5vdCBwdWxsIHdlYXRoZXIgZnJvbSB4aHRtbCBzZXJ2aWNlLiIpCiAgICAgICAgICAgICAgICB9
LAogICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChjLCBkKSB7CiAgICAgICAgICAgICAg
ICAgICAgY29uc29sZS5lcnJvcigiSFRUUCBzdGF0dXMgY29kZTogIiwgZC54aHIuc3RhdHVzKTsK
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gYwogICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICB9KQogICAgICAgIH0sCiAgICAgICAgcG9wdWxhdGVIZWFkZXJIdG1sOiBmdW5jdGlvbiAoYSkg
ewogICAgICAgICAgICBkb2pvLmJ5SWQodGhpcy5jb25maWcucG9wdWxhdGVFbCkuaW5uZXJIVE1M
ID0gYQogICAgICAgIH0sCiAgICAgICAgcG9wdWxhdGVIZWFkZXJKc29uOiBmdW5jdGlvbiAoYSkg
ewogICAgICAgICAgICB2YXIgYiA9IGRvam8uYnlJZCgid19pY29uIiksCiAgICAgICAgICAgICAg
ICBjID0gZG9qby5ieUlkKCJ3X2xvY2F0aW9uIik7CiAgICAgICAgICAgIGRvam8uYWRkQ2xhc3Mo
YiwgIndzai0iICsgYS5pbWFnZSk7CiAgICAgICAgICAgIGRvam8uYnlJZCgid19oaWdoIikuaW5u
ZXJIVE1MID0gYS5oaWdoICsgIiYjMTg2OyI7CiAgICAgICAgICAgIGRvam8uYnlJZCgid19sb3ci
KS5pbm5lckhUTUwgPSBhLmxvdyArICImIzE4NiI7CiAgICAgICAgICAgIGIuaHJlZiA9IGEudXJs
OwogICAgICAgICAgICBjLmhyZWYgPSBhLnVybDsKICAgICAgICAgICAgYy5pbm5lckhUTUwgPSBh
LmNpdHk7CiAgICAgICAgICAgIGRvam8ucmVtb3ZlQ2xhc3MoZG9qby5xdWVyeSgiLnRlbXBlcmF0
dXJlLmRpdmlkZXIiKVswXSwgImhpZGRlbiIpCiAgICAgICAgfSwKICAgICAgICBwb3B1bGF0ZUZy
b21Qem5TdmM6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGEgPSB0aGlzLmdldEhUTUwo
cHpuV2VhdGhlcik7CiAgICAgICAgICAgIHRoaXMuc2V0Q29va2llKCJ3ZWF0aGVyQ29kZSIsIHB6
bldlYXRoZXIpOwogICAgICAgICAgICB0aGlzLnBvcHVsYXRlSGVhZGVySHRtbChhKTsKICAgICAg
ICAgICAgdGhpcy5zZXRMb2NhbFdlYXRoZXJKc29uKGEpCiAgICAgICAgfSwKICAgICAgICBnZXRD
b29raWU6IGZ1bmN0aW9uIChhKSB7CiAgICAgICAgICAgIHJldHVybiBkai51dGlsLkNvb2tpZS5n
ZXRHcm91cENvb2tpZSgiREpDT09LSUUiLCBhKQogICAgICAgIH0sCiAgICAgICAgc2V0Q29va2ll
OiBmdW5jdGlvbiAoYSwgYikgewogICAgICAgICAgICBkai51dGlsLkNvb2tpZS5zZXRHcm91cENv
b2tpZSgiREpDT09LSUUiLCBhLCBiLCAzNjUpCiAgICAgICAgfSwKICAgICAgICBzZXRMb2NhbFdl
YXRoZXJKc29uOiBmdW5jdGlvbiAoYSkgewogICAgICAgICAgICBkai51dGlsLkNvb2tpZS5zZXRH
cm91cENvb2tpZSgiREpDT09LSUUiLCAid2VhdGhlckpzb24iLCBkb2pvLmZyb21Kc29uKHRoaXMu
cGFyc2VIVE1MKGEpKSwgMzY1KQogICAgICAgIH0sCiAgICAgICAgc2V0RGVmYXVsdExvY2F0aW9u
OiBmdW5jdGlvbiAoYSkgewogICAgICAgICAgICB2YXIgYiA9IHRoaXMsCiAgICAgICAgICAgICAg
ICBjID0gZG9qby5ieUlkKGEpOwogICAgICAgICAgICBhID0gYi5nZXRJZnJhbWVQYXJhbSh0aGlz
LmNvbmZpZy5pZnJhbWVJZCwgdGhpcy5jb25maWcuaWZyYW1lUGFyYW0pOwogICAgICAgICAgICB2
YXIgZCA9IGEgIT09ICIiID8gYSA6IHRoaXMuY29uZmlnLmRlZmF1bHRMb2NhdGlvbjsKICAgICAg
ICAgICAgZG9qby5ieUlkKHRoaXMuY29uZmlnLmxvY2F0aW9uTmFtZUlkKS5pbm5lckhUTUwgPSB1
bmVzY2FwZSh0aGlzLmdldElmcmFtZVBhcmFtKGIuY29uZmlnLmlmcmFtZUlkLCAibmFtZSIpKTsK
ICAgICAgICAgICAgZGoudXRpbC5Vc2VyLmlzTG9nZ2VkSW4oZnVuY3Rpb24gKGUpIHsKICAgICAg
ICAgICAgICAgIGlmIChlKSBkICE9IGIuZ2V0Q29va2llKCJ3ZWF0aGVyQ29kZSIpID8gZG9qby5j
b25uZWN0KGMsICJjbGljayIsIGZ1bmN0aW9uIChnKSB7CiAgICAgICAgICAgICAgICAgICAgZG9q
by5zdG9wRXZlbnQoZyk7CiAgICAgICAgICAgICAgICAgICAgYi5jbGVhcldlYXRoZXJDb29raWVz
KCk7CiAgICAgICAgICAgICAgICAgICAgYi5zZXRQem5Mb2NhbFdlYXRoZXIoZCk7CiAgICAgICAg
ICAgICAgICAgICAgYi5nZXRIVE1MKGQpOwogICAgICAgICAgICAgICAgICAgIGRvam8uYWRkQ2xh
c3MoYywgImhpZGRlbiIpOwogICAgICAgICAgICAgICAgICAgIGRvam8ucGxhY2UoIjxzcGFuIHN0
eWxlPSdmb250LXNpemU6MS4xZW0nPiIgKyBiLmNvbmZpZy5sb2NhdGlvblNhdmVkVHh0ICsgIjwv
c3Bhbj4iLCBjLCAiYmVmb3JlIikKICAgICAgICAgICAgICAgIH0pIDogZG9qby5hZGRDbGFzcyhj
LCAiaGlkZGVuIik7CiAgICAgICAgICAgICAgICBlbHNlIGRvam8uY29ubmVjdChjLCAiY2xpY2si
LCBmdW5jdGlvbiAoZykgewogICAgICAgICAgICAgICAgICAgIGRvam8uc3RvcEV2ZW50KGcpOwog
ICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IGIuZ2V0Q29tbWVyY2VSZWRpcmVj
dFVybCgpCiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICB9KQogICAgICAgIH0sCiAgICAg
ICAgcGFyc2VIVE1MOiBmdW5jdGlvbiAoYSkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAg
ICAgICAgdmFyIGIgPSBhLm1hdGNoKC8oW14+XSopPFwvYT4vKVsxXSwKICAgICAgICAgICAgICAg
ICAgICBjID0gYS5tYXRjaCgvY2xhc3M9Indzai0oXGQqKS8pWzFdLAogICAgICAgICAgICAgICAg
ICAgIGQgPSBhLm1hdGNoKC8oXGQrKSYjMTg2Oy9nKVswXS5tYXRjaCgvXGQqLyksCiAgICAgICAg
ICAgICAgICAgICAgZSA9IGEubWF0Y2goLyhcZCspJiMxODY7L2cpWzFdLm1hdGNoKC9cZCovKSwK
ICAgICAgICAgICAgICAgICAgICBnID0gYS5tYXRjaCgvaHJlZlw9IihbXiJdKikvKVsxXTsKICAg
ICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgY2l0eTogYiwKICAgICAg
ICAgICAgICAgICAgICBpbWFnZTogYywKICAgICAgICAgICAgICAgICAgICBoaWdoOiBkLAogICAg
ICAgICAgICAgICAgICAgIGxvdzogZSwKICAgICAgICAgICAgICAgICAgICB1cmw6IGcKICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgfSBjYXRjaCAoaCkgewogICAgICAgICAgICAgICAgY29u
c29sZS5lcnJvcigiVW5hYmxlIHRvIHBhcnNlIHhodG1sIHNlcnZpY2U6ICVzIiwgaCk7CiAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2UKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAg
Z2V0UHpuTG9jYWxXZWF0aGVyOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBhID0gdGhp
czsKICAgICAgICAgICAgZG9qby54aHJHZXQoewogICAgICAgICAgICAgICAgdXJsOiBhLmNvbmZp
Zy5zZXRQem5XZWF0aGVyVXJsLAogICAgICAgICAgICAgICAgaGVhZGVyczogewogICAgICAgICAg
ICAgICAgICAgIEFjY2VwdDogImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgICAgICAgICB9LAog
ICAgICAgICAgICAgICAgaGFuZGxlQXM6ICJqc29uIiwKICAgICAgICAgICAgICAgIGxvYWQ6IGZ1
bmN0aW9uIChiLCBjKSB7CiAgICAgICAgICAgICAgICAgICAgYy54aHIuZ2V0UmVzcG9uc2VIZWFk
ZXIoIlN0YXR1cyIpOwogICAgICAgICAgICAgICAgICAgIGlmICgyMDAgIT09IGMueGhyLnN0YXR1
cykgY29uc29sZS5lcnJvcigiRXJyb3IgbWVzc2FnZTogU2VydmljZSBpcyBub3Qgd29ya2luZyB3
aXRoIEVycm9yIENvZGU6ICIgKyBjLnhoci5zdGF0dXMpOwogICAgICAgICAgICAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IGIuVXNlci5wcm9maWxlRGF0YVsw
XTsKICAgICAgICAgICAgICAgICAgICAgICAgZCAhPT0gdW5kZWZpbmVkID8gYS5nZXRIVE1MKGQu
d2VhdGhlckNvZGUpIDogYS5nZXRIVE1MKGEuY29uZmlnLmRlZmF1bHRMb2NhdGlvbikKICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgZXJyb3I6
IGZ1bmN0aW9uIChiLCBjKSB7CiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiSFRU
UCBzdGF0dXMgY29kZTogIiwgYy54aHIuc3RhdHVzKTsKICAgICAgICAgICAgICAgICAgICByZXR1
cm4gYgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KQogICAgICAgIH0sCiAgICAgICAg
c2V0UHpuTG9jYWxXZWF0aGVyOiBmdW5jdGlvbiAoYSkgewogICAgICAgICAgICBhID0gewogICAg
ICAgICAgICAgICAgdXJsOiB0aGlzLmNvbmZpZy5wem5VcmwsCiAgICAgICAgICAgICAgICBwb3N0
RGF0YTogZG9qby50b0pzb24oewogICAgICAgICAgICAgICAgICAgIHByb2ZpbGVUeXBlOiAid2Vh
dGhlckNvZGUiLAogICAgICAgICAgICAgICAgICAgIHByb2ZpbGVOYW1lOiAid2VhdGhlckNvZGUi
LAogICAgICAgICAgICAgICAgICAgIHBhcmFtczogW3sKICAgICAgICAgICAgICAgICAgICAgICAg
d2VhdGhlckNvZGU6IGEKICAgICAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICAgICAgfSks
CiAgICAgICAgICAgICAgICBoYW5kbGVBczogImpzb24iLAogICAgICAgICAgICAgICAgY29udGVu
dFR5cGU6ICJhcHBsaWNhdGlvbi9qc29uIiwKICAgICAgICAgICAgICAgIGFjY2VwdDogImFwcGxp
Y2F0aW9uL2pzb24iLAogICAgICAgICAgICAgICAgbG9hZDogZnVuY3Rpb24gKCkge30sCiAgICAg
ICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKCkge30KICAgICAgICAgICAgfTsKICAgICAgICAg
ICAgZG9qby54aHJQb3N0KGEpCiAgICAgICAgfSwKICAgICAgICBjbGVhcldlYXRoZXJDb29raWVz
OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIGRqLnV0aWwuQ29va2llLmRlbGV0ZUdyb3VwQ29v
a2llKCJESkNPT0tJRSIsICJ3ZWF0aGVyVXNlciIpOwogICAgICAgICAgICBkai51dGlsLkNvb2tp
ZS5kZWxldGVHcm91cENvb2tpZSgiREpDT09LSUUiLCAid2VhdGhlckNvZGUiKTsKICAgICAgICAg
ICAgZGoudXRpbC5Db29raWUuZGVsZXRlR3JvdXBDb29raWUoIkRKQ09PS0lFIiwgIndlYXRoZXJF
eHBpcmUiKTsKICAgICAgICAgICAgZGoudXRpbC5Db29raWUuZGVsZXRlR3JvdXBDb29raWUoIkRK
Q09PS0lFIiwgIndlYXRoZXJKc29uIikKICAgICAgICB9LAogICAgICAgIGdldENvbW1lcmNlUmVk
aXJlY3RVcmw6IGZ1bmN0aW9uIChhKSB7CiAgICAgICAgICAgIHJldHVybiAoYSB8fCB0aGlzLmNv
bmZpZy5yZWRpcmVjdFVybCkgKyAiJnVybD0iICsgZXNjYXBlKHdpbmRvdy5sb2NhdGlvbikKICAg
ICAgICB9LAogICAgICAgIGNhbGNEYXRlOiBmdW5jdGlvbiAoYSkgewogICAgICAgICAgICB2YXIg
YiA9IHRoaXMuY2FsY01pbGxpc2Vjb25kcyhhKSwKICAgICAgICAgICAgICAgIGMgPSBuZXcgRGF0
ZTsKICAgICAgICAgICAgYy5zZXRUaW1lKGEuc3Vic3RyaW5nKGEubGVuZ3RoIC0gMSwgYS5sZW5n
dGgpID09ICIrIiA/IGMuZ2V0VGltZSgpICsgYiA6IGMuZ2V0VGltZSgpIC0gYik7CiAgICAgICAg
ICAgIHJldHVybiBjLnRvR01UU3RyaW5nKCkKICAgICAgICB9LAogICAgICAgIGNhbGNNaWxsaXNl
Y29uZHM6IGZ1bmN0aW9uIChhKSB7CiAgICAgICAgICAgIHZhciBiID0gYS5zdWJzdHJpbmcoMCwg
YS5sZW5ndGggLSAyKTsKICAgICAgICAgICAgYSA9IGEuc3Vic3RyaW5nKGEubGVuZ3RoIC0gMiwg
YS5sZW5ndGggLSAxKS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICByZXR1cm4gYSA9PSAicyIg
PyBiICogMUUzIDogYSA9PSAiZCIgPyBiICogODY0RTUgOiBhID09ICJtIiA/IGIgKiAyNTkyRTYg
OiAwCiAgICAgICAgfSwKICAgICAgICBpc0V4cGlyZWQ6IGZ1bmN0aW9uIChhKSB7CiAgICAgICAg
ICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLmdldENvb2tpZShhKSkgLSBuZXcgRGF0ZSA+IDAgPyBm
YWxzZSA6IHRydWUKICAgICAgICB9LAogICAgICAgIGdldElmcmFtZVBhcmFtOiBmdW5jdGlvbiAo
YSwgYikgewogICAgICAgICAgICB2YXIgYyA9IGRvam8uYnlJZChhKS5zcmMsCiAgICAgICAgICAg
ICAgICBkID0gIltcXD8mXSIgKyBiLnJlcGxhY2UoL1tcW10vLCAiXFxbIikucmVwbGFjZSgvW1xd
XS8sICJcXF0iKSArICI9KFteJiNdKikiOwogICAgICAgICAgICBjID0gUmVnRXhwKGQpLmV4ZWMo
Yyk7CiAgICAgICAgICAgIHJldHVybiBjID09PSBudWxsID8gIiIgOiBjWzFdCiAgICAgICAgfQog
ICAgfQp9KSgpOwpkb2pvLnByb3ZpZGUoImRqLm1vZHVsZS5oZWFkZXIuc2VjdGlvbk1lbnUiKTsK
ZG9qby5yZXF1aXJlKCJkai53aWRnZXQucGFuZWwuTGl2ZU1vZGFsUGFuZWwiKTsKZG9qby5yZXF1
aXJlKCJkai51dGlsLkVsZW1lbnQiKTsKZG9qby5yZXF1aXJlKCJkai5sYW5nIik7CmRvam8ucmVx
dWlyZSgiZGoud2lkZ2V0LnBhbmVsLlNlbGVjdERyb3Bkb3duUGFuZWwiKTsKKGZ1bmN0aW9uICgp
IHsKICAgIGRqLm1vZHVsZS5oZWFkZXIuc2VjdGlvbk1lbnUgPSB7CiAgICAgICAgaW5pdDogZnVu
Y3Rpb24gKCkgewogICAgICAgICAgICB2YXIgYSA9IGZhbHNlOwogICAgICAgICAgICB0aGlzLmRl
bGF5ZWRNb3VzZU92ZXIoIi5fZXhwIiwgZnVuY3Rpb24gKGIpIHsKICAgICAgICAgICAgICAgIGlm
ICghYSkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUhlYWRlclBhbmVscygp
OwogICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RXZlbnRzKCk7CiAgICAgICAgICAgICAgICAg
ICAgYSA9IHRydWUKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRoaXMuaW5pdFNo
b3dEYXRhKGIpCiAgICAgICAgICAgIH0sIDI1MCk7CiAgICAgICAgICAgIHRoaXMuZmFkZUluQXJy
b3dzKCkKICAgICAgICB9LAogICAgICAgIGluaXRpYWxpemVIZWFkZXJQYW5lbHM6IGZ1bmN0aW9u
ICgpIHsKICAgICAgICAgICAgbmV3IGRqLndpZGdldC5wYW5lbC5MaXZlTW9kYWxQYW5lbCh7CiAg
ICAgICAgICAgICAgICBjb250YWluZXI6ICIubGlua2xpc3RfZHJvcGRvd24gLndzam1uX2Ryb3Bk
b3duX2NvbnRhaW5lciIsCiAgICAgICAgICAgICAgICBjb250YWluZXJJbmQ6ICIubGlua2xpc3Rf
ZHJvcGRvd24gLndzam1uX2Ryb3Bkb3duX2NvbnRhaW5lciAubW5FeHBhbmQiLAogICAgICAgICAg
ICAgICAgZHJvcGRvd25Db250ZW50OiAiLndzam1uX2Ryb3Bkb3duQ29udGVudCIsCiAgICAgICAg
ICAgICAgICBhY3Rpb25FdmVudDogImNsaWNrIiwKICAgICAgICAgICAgICAgIHN0YXRlQ29udGFp
bmVyOiAiLndzam1uX2Ryb3Bkb3duVHJlZSIsCiAgICAgICAgICAgICAgICBzdGF0ZUNvbGxhcHNl
ZDogIndzam1uX2RkU3RhdGUtY29sbGFwc2VkIiwKICAgICAgICAgICAgICAgIHN0YXRlRXhwYW5k
ZWQ6ICJ3c2ptbl9kZFN0YXRlLWV4cGFuZGVkIiwKICAgICAgICAgICAgICAgIG5hdkNvbnRhaW5l
cjogIi5wbU1haW5OYXYiLAogICAgICAgICAgICAgICAgc3RhdGVIb3ZlcjogIm1uZGRfZGRTdGF0
ZS1ob3ZlciIsCiAgICAgICAgICAgICAgICBxdWVyeVVwQ2xhc3M6ICJ3c2ptbl9kcm9wZG93blRy
ZWUiLAogICAgICAgICAgICAgICAgYWRkTW91c2VFdmVudHM6IGZhbHNlCiAgICAgICAgICAgIH0p
CiAgICAgICAgfSwKICAgICAgICBpbml0U2hvd0RhdGE6IGZ1bmN0aW9uIChhKSB7CiAgICAgICAg
ICAgIHZhciBiID0gdGhpcy5nZXREcm9wZG93bkluZGV4KGEpLAogICAgICAgICAgICAgICAgYyA9
IGRqLnV0aWwuRWxlbWVudC5nZXREYXRhc2V0KGEpLmRyb3Bkb3duaW5kZXg7CiAgICAgICAgICAg
IGMgPSBkb2pvLmJ5SWQoYyArICJfY29udGVudCIpOwogICAgICAgICAgICB0aGlzLnNob3dEYXRh
KGIsIGMsIGEpCiAgICAgICAgfSwKICAgICAgICBzaG93RGF0YTogZnVuY3Rpb24gKGEsIGIsIGMp
IHsKICAgICAgICAgICAgdmFyIGQgPSB0aGlzOwogICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0
aW9uICgpIHsKICAgICAgICAgICAgICAgIGlmIChkb2pvLmhhc0NsYXNzTmFtZShjLCAiX2RhdGEi
KSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICBkb2pvLmFkZENsYXNzKGMsICJfZGF0
YSIpOwogICAgICAgICAgICAgICAgICAgIGQuZ2V0SFRNTChhLCBiLCBjKQogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICB9KQogICAgICAgIH0sCiAgICAgICAgZ2V0RHJvcGRvd25JbmRleDog
ZnVuY3Rpb24gKGEpIHsKICAgICAgICAgICAgYSA9IGRqLnV0aWwuRWxlbWVudC5nZXREYXRhc2V0
KGEpOwogICAgICAgICAgICByZXR1cm4gZGoudXRpbC5FbGVtZW50LmdldERhdGFzZXQoZG9qby5i
eUlkKGEuZHJvcGRvd25pbmRleCkpLnBhbmVsU2VydmljZVVyaQogICAgICAgIH0sCiAgICAgICAg
c2V0SWZyYW1lU2hpbUhlaWdodHM6IGZ1bmN0aW9uIChhKSB7CiAgICAgICAgICAgIGEgPSBkai51
dGlsLkVsZW1lbnQuZ2V0RGF0YXNldChhKS5kcm9wZG93bmluZGV4Lm1hdGNoKC8oXGQuKikvKVsw
XTsKICAgICAgICAgICAgdmFyIGIgPSAid3NqbW5fZHJvcGRvd25faWZyYW1lIiArIGEsCiAgICAg
ICAgICAgICAgICBjID0gZG9qby5ieUlkKCJ3c2ptbl9kcm9wZG93biIgKyBhICsgIl9jb250ZW50
Iik7CiAgICAgICAgICAgIGIgPSBkb2pvLmJ5SWQoYik7CiAgICAgICAgICAgIGZvciAodmFyIGQg
PSAwOyBkIDw9IGMubGVuZ3RoIC0gMTsgZCsrKSB0cnkgewogICAgICAgICAgICAgICAgYi5vZmZz
ZXRIZWlnaHQgPSBkb2pvLmJ5SWQoIndzam1uX2Ryb3Bkb3duX2NvbnRlbnQiICsgYSkub2Zmc2V0
SGVpZ2h0CiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9CiAgICAgICAgICAgIHRyeSB7CiAgICAg
ICAgICAgICAgICBiLm9mZnNldEhlaWdodCA9IGRvam8uYnlJZCgid3NqbW5fZHJvcGRvd25fY29u
dGVudCIgKyBhKS5vZmZzZXRIZWlnaHQKICAgICAgICAgICAgfSBjYXRjaCAoZykge30KICAgICAg
ICB9LAogICAgICAgIHNldEV2ZW50czogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgYSA9
IHRoaXM7CiAgICAgICAgICAgIGRqLmxhbmcuYWRkTGl2ZUV2ZW50KCIuX2V4cCIsICJtb3VzZWRv
d24iLCBmdW5jdGlvbiAoYikgewogICAgICAgICAgICAgICAgYS5pbml0U2hvd0RhdGEoYi50YXJn
ZXQgfHwgYi5zcmNFbGVtZW50KQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgZGoubGFuZy5h
ZGRMaXZlRXZlbnQoIi5zdWJFeHBhbmQiLCAibW91c2Vkb3duIiwgZnVuY3Rpb24gKCkgewogICAg
ICAgICAgICAgICAgYS5zdWJGbHlvdXRUb2dnbGUoIjEtMyIpCiAgICAgICAgICAgIH0pCiAgICAg
ICAgfSwKICAgICAgICBkZWxheWVkTW91c2VPdmVyOiBmdW5jdGlvbiAoYSwgYiwgYykgewogICAg
ICAgICAgICB2YXIgZCA9IGZhbHNlLAogICAgICAgICAgICAgICAgZSwgZyA9IHRoaXM7CiAgICAg
ICAgICAgIGRqLmxhbmcuYWRkTGl2ZUV2ZW50KGEsICJtb3VzZW91dCIsIGZ1bmN0aW9uICgpIHsK
ICAgICAgICAgICAgICAgIGQgPSBmYWxzZQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgZGou
bGFuZy5hZGRMaXZlRXZlbnQoYSwgIm1vdXNlb3ZlciIsIGZ1bmN0aW9uICgpIHsKICAgICAgICAg
ICAgICAgIGUgJiYgY2xlYXJUaW1lb3V0KGUpOwogICAgICAgICAgICAgICAgZCA9IHRydWU7CiAg
ICAgICAgICAgICAgICB2YXIgaCA9IHRoaXM7CiAgICAgICAgICAgICAgICBlID0gc2V0VGltZW91
dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgZCAmJiBiLmNhbGwoZywgaCkKICAg
ICAgICAgICAgICAgIH0sIGMpCiAgICAgICAgICAgIH0pCiAgICAgICAgfSwKICAgICAgICBnZXRI
VE1MOiBmdW5jdGlvbiAoYSwgYikgewogICAgICAgICAgICBkb2pvLnhockdldCh7CiAgICAgICAg
ICAgICAgICB1cmw6IGEsCiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgICAg
ICAgICAgQWNjZXB0OiAiYXBwbGljYXRpb24vaHRtbCIKICAgICAgICAgICAgICAgIH0sCiAgICAg
ICAgICAgICAgICBoYW5kbGVBczogInRleHQiLAogICAgICAgICAgICAgICAgbG9hZDogZnVuY3Rp
b24gKGMsIGQpIHsKICAgICAgICAgICAgICAgICAgICBkLnhoci5nZXRSZXNwb25zZUhlYWRlcigi
U3RhdHVzIik7CiAgICAgICAgICAgICAgICAgICAgYi5pbm5lckhUTUwgPSBjOwogICAgICAgICAg
ICAgICAgICAgIGMubWF0Y2goLzwhLS1CdXNpbmVzc0Ryb3Bkb3duLS1cPi8pICYmIG5ldyBkai53
aWRnZXQucGFuZWwuU2VsZWN0RHJvcGRvd25QYW5lbCgic3ViSW5kRHJvcGRvd24iKQogICAgICAg
ICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoYywgZCkgewogICAg
ICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkhUVFAgc3RhdHVzIGNvZGU6ICIsIGQueGhy
LnN0YXR1cyk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGMKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgfSkKICAgICAgICB9LAogICAgICAgIHN1YkZseW91dFRvZ2dsZTogZnVuY3Rp
b24gKGEpIHsKICAgICAgICAgICAgYSA9IGRvam8uYnlJZCgid3Nqc3ViX2ZseW91dCIgKyBhKTsK
ICAgICAgICAgICAgaWYgKGEgPT09IG51bGwpIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgdmFy
IGIgPSBhLmNsYXNzTmFtZTsKICAgICAgICAgICAgYS5jbGFzc05hbWUgPSBiLmluZGV4T2YoIndz
anN1Yl9kZFN0YXRlLWNvbGxhcHNlZCIpICE9IC0xID8gYi5yZXBsYWNlKC93c2pzdWJfZGRTdGF0
ZS1jb2xsYXBzZWQvLCAid3Nqc3ViX2RkU3RhdGUtZXhwYW5kZWQiKSA6IGIucmVwbGFjZSgvd3Nq
c3ViX2RkU3RhdGUtZXhwYW5kZWQvLCAid3Nqc3ViX2RkU3RhdGUtY29sbGFwc2VkIik7CiAgICAg
ICAgICAgIHJldHVybiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgZmFkZUluQXJyb3dzOiBmdW5j
dGlvbiAoKSB7CiAgICAgICAgICAgIGZvciAodmFyIGEgPSBkb2pvLnF1ZXJ5KCIubW5FeHBhbmQu
X2V4cCIpLCBiID0gMDsgYiA8PSBhLmxlbmd0aCAtIDE7IGIrKykgZG9qby5mYWRlSW4oewogICAg
ICAgICAgICAgICAgbm9kZTogYVtiXSwKICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAxRTMKICAg
ICAgICAgICAgfSkucGxheSgpCiAgICAgICAgfQogICAgfQp9KSgpOwpkb2pvLnByb3ZpZGUoImRq
Lm1vZHVsZS5nbG9iYWxIZWFkZXIiKTsKZG9qby5kZXByZWNhdGVkKCJkai5tb2R1bGUuZ2xvYmFs
SGVhZGVyIiwgInVzZSBkai5tb2R1bGUuaGVhZGVyLmdsb2JhbEhlYWRlciBpbnN0ZWFkIiwgIjEu
NC4xIik7CmRvam8ucmVxdWlyZSgiZGoubGFuZyIpOwpkb2pvLnJlcXVpcmUoImRqLnV0aWwuQ29u
ZmlnIik7CmRvam8ucmVxdWlyZSgiZGoudXRpbC5Db29raWUiKTsKZG9qby5yZXF1aXJlKCJkai51
dGlsLkRhdGUiKTsKZG9qby5yZXF1aXJlKCJkai51dGlsLlJlZ2lvbiIpOwpkb2pvLnJlcXVpcmUo
ImRqLnV0aWwuRWxlbWVudCIpOwpkb2pvLnJlcXVpcmUoImRqLnV0aWwuVXNlciIpOwpkai5tb2R1
bGUuZ2xvYmFsSGVhZGVyID0gZnVuY3Rpb24gKCkgewogICAgdmFyIGEgPSB7CiAgICAgICAgSEVB
REVSX0NPTlRBSU5FUl9DTEFTUzogIi5oZWFkZXIiLAogICAgICAgIFRJTUVTVEFNUF9DTEFTUzog
Ii5kYXRlIiwKICAgICAgICBXU0pfTE9HT19JRDogIndzakxvZ28iLAogICAgICAgIFdTSl9MQVJH
RV9MT0dPX0NMQVNTTkFNRTogImxvZ29fbGFyZ2UiLAogICAgICAgIFdTSl9TTUFMTF9MT0dPX0NM
QVNTTkFNRTogImxvZ29fc21hbGwiLAogICAgICAgIENVUlJFTlRfU1VCU0VDVElPTl9ESVNQTEFZ
X0NMQVNTOiAiLmN1cnJlbnRTdWJTZWN0aW9uIiwKICAgICAgICBHTE9CQUxOQVZfU1VCU0VDVElP
Tl9FTEVNRU5UX0lEOiAiY3VycmVudEdsb2JhbE5hdlN1YlNlY3Rpb24iLAogICAgICAgIFNVQlND
UklCRVJfTE9HSU5fQ0xBU1M6ICIubG9naW4iLAogICAgICAgIEhFQURFUl9QUk9NT19DTEFTUzog
Ii5wcm9tbyIsCiAgICAgICAgU1VCU0NSSUJFUl9ERVRBSUxTX0VMRU1FTlRfSUQ6ICJzdWJzY3Jp
YmVkVXNlckRldGFpbHNJZCIsCiAgICAgICAgQ09NTVVOSVRZX0ZPUlVNU19MSU5LX0NMQVNTOiAi
LmNvbW11bml0eUZvcnVtc0xpbmsiLAogICAgICAgIFRPREFZU19QQVBFUl9MSU5LX0NMQVNTOiAi
LnRvZGF5c1BhcGVyTGluayIsCiAgICAgICAgTU9KX0xJTktfQ0xBU1M6ICIubXlPbmxpbmVKb3Vy
bmFsTGluayIsCiAgICAgICAgTUVTU0FHRV9DRU5URVJfTElOS19DTEFTUzogIi5tZXNzYWdlQ2Vu
dGVyTGluayIsCiAgICAgICAgTUVTU0FHRV9DT1VOVF9DTEFTUzogIi5tZXNzYWdlQ291bnQiLAog
ICAgICAgIExPR0lOX1VTRVJOQU1FX0VMRU1FTlRfSUQ6ICJsb2dpbl91c2VybmFtZSIsCiAgICAg
ICAgTE9HSU5fUEFTU1dPUkRfRUxFTUVOVF9JRDogImxvZ2luX3Bhc3N3b3JkIiwKICAgICAgICBM
T0dJTl9GT1JNX0lEOiAibG9naW5fZm9ybSIsCiAgICAgICAgUEFHRV9VUkxfRUxFTUVOVF9JRDog
InBhZ2VfdXJsIiwKICAgICAgICBMT0dPVVRfTElOS19FTEVNRU5UX0lEOiAibG9nb3V0TGluayIs
CiAgICAgICAgTE9HSU5fQlVUVE9OX0VMRU1FTlRfSUQ6ICJsb2dpbl9idXR0b24iLAogICAgICAg
IFVTRVJfTkFNRV9FTEVNRU5UX0lEOiAidXNlck5hbWUiLAogICAgICAgIFdTSl9MT0dPX0ZBREVf
QVBQRUFSX0RVUkFUSU9OOiAiMS4wIiwKICAgICAgICBXU0pfTE9HT19ERUxBWV9EVVJBVElPTjog
IjIwMDAiLAogICAgICAgIExPR0dFRF9JTl9DT01NVU5JVFlfVVJMOiAiL2NvbW11bml0eSIsCiAg
ICAgICAgTE9HR0VEX0lOX1RPREFZU19QQVBFUl9VUkw6ICIvaXRwP21vZD1XU0pfZm9ybWZhY3Rv
ciIsCiAgICAgICAgTE9HR0VEX0lOX1RPREFZU19QQVBFUl9VUkxfQVNJQTogIi9pdHAvYXNpYT9t
b2Q9V1NKX2Zvcm1mYWN0b3IiLAogICAgICAgIExPR0dFRF9JTl9UT0RBWVNfUEFQRVJfVVJMX0VV
Uk9QRTogIi9pdHAvZXVyb3BlP21vZD1XU0pfZm9ybWZhY3RvciIsCiAgICAgICAgTUVTU0FHRV9D
RU5URVJfUE9TVF9VUkw6ICIvY29tbXVuaXR5L2ludGVncmF0aW9uL3VzZXJpbmZvLmh0bWwiLAog
ICAgICAgIExPR09VVF9VUkw6ICIvc3RhdGljX2h0bWxfZmlsZXMvbG9nb3V0X2NvbmZpcm1hdGlv
bi5odG0iLAogICAgICAgIFNVQlNDUklCRVJfSE9NRVBBR0VfUElEOiAiMF8wX1dIXzAwMDEiLAog
ICAgICAgIE5PTlNVQlNDUklCRVJfSE9NRVBBR0VfUElEOiAiMF8wX1dIXzAwMDFfcHVibGljIiwK
ICAgICAgICBBU0lBX1BBR0VfUElEOiAiMF8wX1dQXzIxMDMiLAogICAgICAgIEVVUk9QRV9QQUdF
X1BJRDogIjBfMF9XUF8yMTA0IiwKICAgICAgICBOT05TVUJTQ1JJQkVSX05FV1NMRVRURVJTX0FM
RVJUU19QQUdFX1BJRDogIjVfNjAwNyIsCiAgICAgICAgTk9OU1VCU0NSSUJFUl9TRUFSQ0hfUEFH
RV9QSUQ6ICIzXzA0NjYiLAogICAgICAgIEhPTUVQQUdFX1NVQlNDUklCRVJfVVJMOiAiLyIsCiAg
ICAgICAgU0VBUkNIX1BBR0VfU1VCU0NSSUJFUl9VUkw6ICIvc2VhcmNoIiwKICAgICAgICBUT0RB
WVNfUEFQRVJfTElOS19DT05UQUlORVJfQ0xBU1M6ICIudG9kYXlzUGFwZXJMaW5rQ29udGFpbmVy
IiwKICAgICAgICBWSURFT19MSU5LX0NPTlRBSU5FUl9DTEFTUzogIi52aWRlb0xpbmtDb250YWlu
ZXIiLAogICAgICAgIENPTFVNTlNfTElOS19DT05UQUlORVJfQ0xBU1M6ICIuY29sdW1uc0xpbmtD
b250YWluZXIiLAogICAgICAgIEJMT0dTX0xJTktfQ09OVEFJTkVSX0NMQVNTOiAiLmJsb2dzTGlu
a0NvbnRhaW5lciIsCiAgICAgICAgSU5URVJBQ1RJVkVfR1JBUEhJQ1NfTElOS19DT05UQUlORVJf
Q0xBU1M6ICIuaW50ZXJhY3RpdmVHcmFwaGljc0xpbmtDb250YWluZXIiLAogICAgICAgIFRPUElD
U19MSU5LX0NPTlRBSU5FUl9DTEFTUzogIi50b3BpY3NMaW5rQ29udGFpbmVyIiwKICAgICAgICBD
T01NVU5JVFlfRk9SVU1TX0xJTktfQ09OVEFJTkVSX0NMQVNTOiAiLmNvbW11bml0eUZvcnVtc0xp
bmtDb250YWluZXIiLAogICAgICAgIFRPREFZU19QQVBFUl9QSUQ6ICIwXzBfV1BfNDAiLAogICAg
ICAgIFRPREFZU19QQVBFUl9VU19OT05TVUJfUElEOiAiMl8wNDMzIiwKICAgICAgICBUT0RBWVNf
UEFQRVJfRVVST1BFX05PTlNVQl9QSUQ6ICIyXzA0MzQiLAogICAgICAgIFRPREFZU19QQVBFUl9B
U0lBX05PTlNVQl9QSUQ6ICIyXzA0MzUiLAogICAgICAgIFRPREFZU19QQVBFUl9VU19QSUQ6ICIy
XzAxMzMiLAogICAgICAgIFRPREFZU19QQVBFUl9FVVJPUEVfUElEOiAiMl8wMTM0IiwKICAgICAg
ICBUT0RBWVNfUEFQRVJfQVNJQV9QSUQ6ICIyXzAxMzUiLAogICAgICAgIFRPREFZU19QQVBFUl9Q
QVNUX0VESVRJT05TX1BJRDogIjJfMDIzMyIsCiAgICAgICAgVE9EQVlTX1BBUEVSX0lOREVYX0JJ
Wl9QSUQ6ICIyXzAxNTYiLAogICAgICAgIFRPREFZU19QQVBFUl9JTkRFWF9QRU9QTEVfUElEOiAi
Ml8wMTU1IiwKICAgICAgICBUT0RBWVNfUEFQRVJfQ09SUkVDVElPTlNfUElEOiAiQ29ycmVjdGlv
bnMiLAogICAgICAgIFZJREVPX1BJRDogIjBfMF9XUF8zMDAwIiwKICAgICAgICBCTE9HU19QSUQ6
ICI4XzAwMTkiLAogICAgICAgIENPTFVNTlNfUElEOiAiMl8wMTQwIiwKICAgICAgICBJTlRFUkFD
VElWRV9HUkFQSElDU19QSUQ6ICIwXzBfV1BfMjAwMyIsCiAgICAgICAgVE9QSUNTX1BJRDogIjBf
MF9XVF8wMDAxIiwKICAgICAgICBORVdTTEVUVEVSU19BTEVSVFNfU1VCX1BJRDogIjVfNjAwMSIs
CiAgICAgICAgTkVXU0xFVFRFUlNfQUxFUlRTX1BVQl9QSUQ6ICI1XzYwMDMiLAogICAgICAgIE1P
Sl9MSU5LX1VSTDogIi9wYWdlL215LWpvdXJuYWwtbWFpbi5odG1sIiwKICAgICAgICBNRENfTElO
S19VUkw6ICIvbWRjL3BhZ2UvbWFya2V0c2RhdGEuaHRtbCIsCiAgICAgICAgTURDX1BBR0VfUElE
OiAiMl8zMDAwIiwKICAgICAgICBDT01NVU5JVFlfSElHSExJR0hUX0NPTVBBUkVfVVJMOiAiL2Nv
bW11bml0eSIsCiAgICAgICAgRk9SVU1TX0hJR0hMSUdIVF9DT01QQVJFX1VSTDogImZvcnVtcy53
c2ouY29tIiwKICAgICAgICBGUkVFX1JFR19DTEFTUzogIi5mcmVlcmVnIiwKICAgICAgICBMT0NB
VElPTl9OQVZfQ0xBU1M6ICIubG9jYXRpb25fbmF2IiwKICAgICAgICBMT0NBVElPTl9OQVZfQ09M
TEFQU0VEX0NMQVNTTkFNRTogImxvY2F0aW9uX2NvbGxhcHNlZCIsCiAgICAgICAgTE9DQVRJT05f
TkFWX0VYUEFOREVEX0NMQVNTTkFNRTogImxvY2F0aW9uX2V4cGFuZGVkIiwKICAgICAgICBVU19F
RElUSU9OX0xJTktfQ0xBU1M6ICIubWFwX3VzIiwKICAgICAgICBFVV9FRElUSU9OX0xJTktfQ0xB
U1M6ICIubWFwX2V1cm9wZSIsCiAgICAgICAgQVNJQV9FRElUSU9OX0xJTktfQ0xBU1M6ICIubWFw
X2FzaWEiLAogICAgICAgIElOX0VESVRJT05fTElOS19DTEFTUzogIi5tYXBfaW5kaWEiLAogICAg
ICAgIFVTX0VESVRJT05fTURDX1VSTDogIi9tYXJrZXRzZGF0YSIsCiAgICAgICAgRVVfRURJVElP
Tl9NRENfVVJMOiAiL21kYy9wdWJsaWMvcGFnZS9tYXJrZXRzZGF0YV9ldXJvcGUuaHRtbCIsCiAg
ICAgICAgQVNJQV9FRElUSU9OX01EQ19VUkw6ICIvbWRjL3B1YmxpYy9wYWdlL21hcmtldHNkYXRh
X2FzaWEuaHRtbCIsCiAgICAgICAgSU5fRURJVElPTl9NRENfVVJMOiAiL21kYy9wdWJsaWMvcGFn
ZS9tYXJrZXRzZGF0YV9hc2lhLmh0bWwiLAogICAgICAgIE1EQ19DT01QQVJFX1VSTDogIi9tZGMv
IiwKICAgICAgICBGT09URVJfQ09OVEFJTkVSX0NMQVNTOiAiLnBhZ2Vmb290ZXIiLAogICAgICAg
IEdPX1BST19IT09LOiAiZ29wcm9ob29rIiwKICAgICAgICBHT19QUk9fSE9PS19SRUdJT046IFsi
bmEsdXMiXQogICAgfTsKICAgIHJldHVybiB7CiAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24g
KGIpIHsKICAgICAgICAgICAgdGhpcy5jZmcgPSBkai5sYW5nLmNsb25lTWl4aW4oYSwgYik7CiAg
ICAgICAgICAgIHRoaXMub0hlYWRlciA9IGRvam8ucXVlcnkodGhpcy5jZmcuSEVBREVSX0NPTlRB
SU5FUl9DTEFTUylbMF07CiAgICAgICAgICAgIHRoaXMuZWRpdGlvbkRyb3Bkb3duU2V0VXAoKTsK
ICAgICAgICAgICAgdGhpcy5kaXNwbGF5U3ViU2VjdGlvbigpOwogICAgICAgICAgICB0aGlzLmRp
c3BsYXlUaW1lU3RhbXAoKTsKICAgICAgICAgICAgdmFyIGMgPSB0aGlzOwogICAgICAgICAgICB0
aGlzLmN1cnJSZWdpb24gPSBkai51dGlsLlJlZ2lvbi5nZXRWaWV3QnlSZWdpb24oKTsKICAgICAg
ICAgICAgdGhpcy5jb25jYXRVUkwgPSAiIjsKICAgICAgICAgICAgdGhpcy5jb25jYXRVUkwgPSB0
eXBlb2YgZ2NEb21haW4gIT09ICJ1bmRlZmluZWQiICYmIGdjRG9tYWluICE9PSBudWxsICYmIGdj
RG9tYWluICE9PSAiIiA/ICJodHRwOi8vIiArIGdjRG9tYWluIDogImh0dHA6Ly8iICsgZG9jdW1l
bnQuZG9tYWluOwogICAgICAgICAgICBkai51dGlsLlVzZXIuaXNMb2dnZWRJbihmdW5jdGlvbiAo
ZykgewogICAgICAgICAgICAgICAgaWYgKGcpIHsKICAgICAgICAgICAgICAgICAgICBjLmRpc3Bs
YXlTdWJzY3JpYmVyRGV0YWlscygpOwogICAgICAgICAgICAgICAgICAgIGMuc2V0dXBMb2dvdXQo
KQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBjLnNldHVwTG9n
aW4oKTsKICAgICAgICAgICAgICAgICAgICBjLm9mcmVlcmVnID0gZG9qby5xdWVyeShjLmNmZy5G
UkVFX1JFR19DTEFTUywgYy5vSGVhZGVyKVswXTsKICAgICAgICAgICAgICAgICAgICBnID0gZG9q
by5xdWVyeSgiI3JlZ2lzdGVyX21vZHVsZSIsIGMub2ZyZWVyZWcpWzBdOwogICAgICAgICAgICAg
ICAgICAgIGRvam8uc3R5bGUoZywgewogICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAi
bm9uZSIKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICBkb2pvLnN0
eWxlKGMub2ZyZWVyZWcsIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogImJsb2Nr
IgogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIGMub1N1YnNjcmli
ZXJMb2dpbiA9IGRvam8ucXVlcnkoYy5jZmcuU1VCU0NSSUJFUl9MT0dJTl9DTEFTUywgYy5vSGVh
ZGVyKVswXTsKICAgICAgICAgICAgICAgICAgICBnID0gZG9qby5xdWVyeSgiLmxvZ2luX21vZHVs
ZSIsIGMub1N1YnNjcmliZXJMb2dpbilbMF07CiAgICAgICAgICAgICAgICAgICAgZG9qby5zdHls
ZShnLCB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICJub25lIgogICAgICAgICAg
ICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIGRvam8uc3R5bGUoYy5vU3Vic2NyaWJl
ckxvZ2luLCB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICJibG9jayIKICAgICAg
ICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICBjLm9IZWFkZXJQcm9tbyA9IGRv
am8ucXVlcnkoYy5jZmcuSEVBREVSX1BST01PX0NMQVNTLCBjLm9IZWFkZXIpWzBdOwogICAgICAg
ICAgICAgICAgICAgIGRvam8uc3R5bGUoYy5vSGVhZGVyUHJvbW8sIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgZGlzcGxheTogImJsb2NrIgogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB0aGlzLmhpZ2hsaWdodEZvcm1G
YWN0b3JMaW5rcygpOwogICAgICAgICAgICB0aGlzLm9Ub2RheXNQYXBlckxpbmsgPSBkb2pvLnF1
ZXJ5KHRoaXMuY2ZnLlRPREFZU19QQVBFUl9MSU5LX0NMQVNTLCB0aGlzLm9IZWFkZXIpWzBdOwog
ICAgICAgICAgICBiID0gdGhpcy5jZmcuTE9HR0VEX0lOX1RPREFZU19QQVBFUl9VUkw7CiAgICAg
ICAgICAgIHZhciBkID0gdGhpcy5jZmcuTE9HR0VEX0lOX1RPREFZU19QQVBFUl9VUkxfQVNJQSwK
ICAgICAgICAgICAgICAgIGUgPSB0aGlzLmNmZy5MT0dHRURfSU5fVE9EQVlTX1BBUEVSX1VSTF9F
VVJPUEU7CiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJSZWdpb24gPT0gImFzaWEiIHx8IHRoaXMu
Y3VyclJlZ2lvbiA9PSAiYXNpYSxpbmRpYSIpIGIgPSBkOwogICAgICAgICAgICBlbHNlIGlmICh0
aGlzLmN1cnJSZWdpb24gPT0gImV1cm9wZSIpIGIgPSBlOwogICAgICAgICAgICB0aGlzLm9Ub2Rh
eXNQYXBlckxpbmsuaHJlZiA9IHR5cGVvZiBnY0RvbWFpbiAhPT0gInVuZGVmaW5lZCIgJiYgZ2NE
b21haW4gIT09IG51bGwgJiYgZ2NEb21haW4gIT09ICIiID8gImh0dHA6Ly8iICsgZ2NEb21haW4g
KyBiIDogYjsKICAgICAgICAgICAgZGoudXRpbC5Vc2VyLmlzU3ViTG9nZ2VkSW4oZnVuY3Rpb24g
KGcpIHsKICAgICAgICAgICAgICAgIGlmIChnKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGgg
PSAtMTsKICAgICAgICAgICAgICAgICAgICBkb2pvLmZvckVhY2goYy5jZmcuR09fUFJPX0hPT0tf
UkVHSU9OLCBmdW5jdGlvbiAoaywgaSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9
PT0gYy5jdXJyUmVnaW9uKSBoID0gaQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAg
ICAgICAgICAgIGlmIChjLmNmZy5HT19QUk9fSE9PS19SRUdJT04gPT09ICJhbGwiIHx8IGggIT09
IC0xKSBkb2pvLnJlbW92ZUNsYXNzKGMuY2ZnLkdPX1BST19IT09LLCAiaGlkZGVuIikKICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgfSkKICAgICAgICB9LAogICAgICAgIHRvZ2dsZURyb3Bk
b3duQ2xhc3M6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGIgPSB0aGlzLmNmZy5MT0NB
VElPTl9OQVZfQ09MTEFQU0VEX0NMQVNTTkFNRSwKICAgICAgICAgICAgICAgIGMgPSB0aGlzLmNm
Zy5MT0NBVElPTl9OQVZfRVhQQU5ERURfQ0xBU1NOQU1FOwogICAgICAgICAgICBpZiAoZG9qby5o
YXNDbGFzcyh0aGlzLm9Mb2NEcm9wRG93bkNvbnRhaW5lciwgYikpIHsKICAgICAgICAgICAgICAg
IGRvam8ucmVtb3ZlQ2xhc3ModGhpcy5vTG9jRHJvcERvd25Db250YWluZXIsIGIpOwogICAgICAg
ICAgICAgICAgZG9qby5hZGRDbGFzcyh0aGlzLm9Mb2NEcm9wRG93bkNvbnRhaW5lciwgYykKICAg
ICAgICAgICAgfSBlbHNlIGRvam8uaGFzQ2xhc3ModGhpcy5vTG9jRHJvcERvd25Db250YWluZXIs
IGMpICYmIGRvam8uYWRkQ2xhc3ModGhpcy5vTG9jRHJvcERvd25Db250YWluZXIsIGIpCiAgICAg
ICAgfSwKICAgICAgICBlZGl0aW9uRHJvcGRvd25TZXRVcDogZnVuY3Rpb24gKCkgewogICAgICAg
ICAgICB2YXIgYiA9IHRoaXM7CiAgICAgICAgICAgIHRoaXMub0xvY2F0aW9uTmF2ID0gZG9qby5x
dWVyeSh0aGlzLmNmZy5MT0NBVElPTl9OQVZfQ0xBU1MsIHRoaXMub0hlYWRlcilbMF07CiAgICAg
ICAgICAgIHZhciBjID0gdGhpcy5jZmcuTE9DQVRJT05fTkFWX0NPTExBUFNFRF9DTEFTU05BTUUs
CiAgICAgICAgICAgICAgICBkID0gdGhpcy5jZmcuTE9DQVRJT05fTkFWX0VYUEFOREVEX0NMQVNT
TkFNRSwKICAgICAgICAgICAgICAgIGUgPSB0aGlzLmNmZy5VU19FRElUSU9OX0xJTktfQ0xBU1M7
CiAgICAgICAgICAgIGUgPSB0aGlzLmNmZy5VU19FRElUSU9OX0xJTktfQ0xBU1M7CiAgICAgICAg
ICAgIHZhciBnID0gdGhpcy5jZmcuRVVfRURJVElPTl9MSU5LX0NMQVNTLAogICAgICAgICAgICAg
ICAgaCA9IHRoaXMuY2ZnLklOX0VESVRJT05fTElOS19DTEFTUywKICAgICAgICAgICAgICAgIGsg
PSB0aGlzLmNmZy5BU0lBX0VESVRJT05fTElOS19DTEFTUzsKICAgICAgICAgICAgdGhpcy51c0Vk
aXRpb25NRENVcmwgPSB0aGlzLmNmZy5VU19FRElUSU9OX01EQ19VUkw7CiAgICAgICAgICAgIHRo
aXMuZXVFZGl0aW9uTURDVXJsID0gdGhpcy5jZmcuRVVfRURJVElPTl9NRENfVVJMOwogICAgICAg
ICAgICB0aGlzLmluRWRpdGlvbk1EQ1VybCA9IHRoaXMuY2ZnLklOX0VESVRJT05fTURDX1VSTDsK
ICAgICAgICAgICAgdGhpcy5hc2lhRWRpdGlvbk1EQ1VybCA9IHRoaXMuY2ZnLkFTSUFfRURJVElP
Tl9NRENfVVJMOwogICAgICAgICAgICB2YXIgaSA9IHRoaXMuY2ZnLk1EQ19DT01QQVJFX1VSTDsK
ICAgICAgICAgICAgdGhpcy5vQ3VycmVudEVkaXRpb24gPSBkb2pvLmJ5SWQoImN1cnJlbnRFZGl0
aW9uIik7CiAgICAgICAgICAgIHRoaXMub1VzRWRpdGlvbiA9IGRvam8uYnlJZCgidXNFZGl0aW9u
Iik7CiAgICAgICAgICAgIHRoaXMub0V1RWRpdGlvbiA9IGRvam8uYnlJZCgiZXVyb3BlRWRpdGlv
biIpOwogICAgICAgICAgICB0aGlzLm9JbkVkaXRpb24gPSBkb2pvLmJ5SWQoImluZGlhRWRpdGlv
biIpOwogICAgICAgICAgICB0aGlzLm9Bc2lhRWRpdGlvbiA9IGRvam8uYnlJZCgiYXNpYUVkaXRp
b24iKTsKICAgICAgICAgICAgdGhpcy5vQ2hpRWRpdGlvbiA9IGRvam8uYnlJZCgiY2hpRWRpdGlv
biIpOwogICAgICAgICAgICB0aGlzLm9KcG5FZGl0aW9uID0gZG9qby5ieUlkKCJqcG5FZGl0aW9u
Iik7CiAgICAgICAgICAgIHRoaXMub1NwYUVkaXRpb24gPSBkb2pvLmJ5SWQoInNwYUVkaXRpb24i
KTsKICAgICAgICAgICAgdGhpcy5vUG9yRWRpdGlvbiA9IGRvam8uYnlJZCgicG9yRWRpdGlvbiIp
OwogICAgICAgICAgICB0aGlzLm9zZWN0aW9uRm9vdGVyU3ViID0gZG9qby5ieUlkKCJocmVmTm9u
U3ViSWQiKTsKICAgICAgICAgICAgdGhpcy5vc2VjdGlvbkZvb3Rlck5vblN1YiA9IGRvam8uYnlJ
ZCgiaHJlZlN1YklkIik7CiAgICAgICAgICAgIHRoaXMub1VzRWRpdGlvbkZvb3RlciA9IGRvam8u
YnlJZCgidXNFZGl0aW9uRm9vdGVyIik7CiAgICAgICAgICAgIHRoaXMuY3VyclJlZ2lvbiA9IGRq
LnV0aWwuUmVnaW9uLmdldFZpZXdCeVJlZ2lvbigpOwogICAgICAgICAgICB2YXIgZiA9ICIiOwog
ICAgICAgICAgICB0aGlzLnRlbXBDb25jYXRVUkwgPSB0eXBlb2YgZ2NEb21haW4gIT09ICJ1bmRl
ZmluZWQiICYmIGdjRG9tYWluICE9PSBudWxsICYmIGdjRG9tYWluICE9PSAiIiA/ICJodHRwOi8v
IiArIGdjRG9tYWluIDogImh0dHA6Ly8iICsgZG9jdW1lbnQuZG9tYWluOwogICAgICAgICAgICB0
aGlzLmlzTURDUGFnZUZsYWcgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmICE9PSBudWxsICYmIGRv
Y3VtZW50LmxvY2F0aW9uLmhyZWYgIT09ICIiICYmIGRvY3VtZW50LmxvY2F0aW9uLmhyZWYuaW5k
ZXhPZihpKSAhPT0gLTE7CiAgICAgICAgICAgIHRoaXMub1VzRWRpdGlvbiAhPT0gbnVsbCAmJiBk
b2pvLmNvbm5lY3QodGhpcy5vVXNFZGl0aW9uLCAib25jbGljayIsIHRoaXMsIGZ1bmN0aW9uIChs
KSB7CiAgICAgICAgICAgICAgICBkb2pvLnN0b3BFdmVudChsKTsKICAgICAgICAgICAgICAgIGRq
LnV0aWwuUmVnaW9uLnNldFZpZXdCeVJlZ2lvbigibmEsdXMiKTsKICAgICAgICAgICAgICAgIGRq
LnV0aWwuQ29va2llLnNldEdyb3VwQ29va2llKCJESkNPT0tJRSIsICJIT01FUEFHRSIsICIvaG9t
ZS1wYWdlIiwgMzY1KTsKICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IHRoaXMuaXNN
RENQYWdlRmxhZyA/IHRoaXMudGVtcENvbmNhdFVSTCArIHRoaXMudXNFZGl0aW9uTURDVXJsIDog
dGhpcy5vVXNFZGl0aW9uLmhyZWYKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHRoaXMub1Vz
RWRpdGlvbkZvb3RlciAhPT0gbnVsbCAmJiBkb2pvLmNvbm5lY3QodGhpcy5vVXNFZGl0aW9uRm9v
dGVyLCAib25jbGljayIsIHRoaXMsIGZ1bmN0aW9uIChsKSB7CiAgICAgICAgICAgICAgICBkb2pv
LnN0b3BFdmVudChsKTsKICAgICAgICAgICAgICAgIGRqLnV0aWwuUmVnaW9uLnNldFZpZXdCeVJl
Z2lvbigibmEsdXMiKTsKICAgICAgICAgICAgICAgIGRqLnV0aWwuQ29va2llLnNldEdyb3VwQ29v
a2llKCJESkNPT0tJRSIsICJIT01FUEFHRSIsICIvaG9tZS91cyIsIDM2NSk7CiAgICAgICAgICAg
ICAgICB3aW5kb3cubG9jYXRpb24gPSB0aGlzLmlzTURDUGFnZUZsYWcgPyB0aGlzLnRlbXBDb25j
YXRVUkwgKyB0aGlzLnVzRWRpdGlvbk1EQ1VybCA6IHRoaXMub1VzRWRpdGlvbkZvb3Rlci5ocmVm
CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB0aGlzLm9FdUVkaXRpb24gIT09IG51bGwgJiYg
ZG9qby5jb25uZWN0KHRoaXMub0V1RWRpdGlvbiwgIm9uY2xpY2siLCB0aGlzLCBmdW5jdGlvbiAo
bCkgewogICAgICAgICAgICAgICAgZG9qby5zdG9wRXZlbnQobCk7CiAgICAgICAgICAgICAgICB3
aW5kb3cubG9jYXRpb24gPSB0aGlzLmlzTURDUGFnZUZsYWcgPyB0aGlzLnRlbXBDb25jYXRVUkwg
KyB0aGlzLmV1RWRpdGlvbk1EQ1VybCA6IHRoaXMub0V1RWRpdGlvbi5ocmVmOwogICAgICAgICAg
ICAgICAgaWYgKHRoaXMuaXNNRENQYWdlRmxhZykgewogICAgICAgICAgICAgICAgICAgIGRqLnV0
aWwuUmVnaW9uLnNldFZpZXdCeVJlZ2lvbigiZXVyb3BlIik7CiAgICAgICAgICAgICAgICAgICAg
ZGoudXRpbC5Db29raWUuc2V0R3JvdXBDb29raWUoIkRKQ09PS0lFIiwgIkhPTUVQQUdFIiwgIi9o
b21lL2V1cm9wZSIsIDM2NSkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgIHRoaXMub0luRWRpdGlvbiAhPT0gbnVsbCAmJiBkb2pvLmNvbm5lY3QodGhpcy5vSW5F
ZGl0aW9uLCAib25jbGljayIsIHRoaXMsIGZ1bmN0aW9uIChsKSB7CiAgICAgICAgICAgICAgICBk
b2pvLnN0b3BFdmVudChsKTsKICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IHRoaXMu
aXNNRENQYWdlRmxhZyA/IHRoaXMudGVtcENvbmNhdFVSTCArIHRoaXMuaW5FZGl0aW9uTURDVXJs
IDogdGhpcy5vSW5FZGl0aW9uLmhyZWY7CiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc01EQ1Bh
Z2VGbGFnKSB7CiAgICAgICAgICAgICAgICAgICAgZGoudXRpbC5SZWdpb24uc2V0Vmlld0J5UmVn
aW9uKCJhc2lhLGluZGlhIik7CiAgICAgICAgICAgICAgICAgICAgZGoudXRpbC5Db29raWUuc2V0
R3JvdXBDb29raWUoIkRKQ09PS0lFIiwgIkhPTUVQQUdFIiwgIi9ob21lL2luZGlhIiwgMzY1KQog
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdGhpcy5vQXNpYUVk
aXRpb24gIT09IG51bGwgJiYgZG9qby5jb25uZWN0KHRoaXMub0FzaWFFZGl0aW9uLCAib25jbGlj
ayIsIHRoaXMsIGZ1bmN0aW9uIChsKSB7CiAgICAgICAgICAgICAgICBkb2pvLnN0b3BFdmVudChs
KTsKICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IHRoaXMuaXNNRENQYWdlRmxhZyA/
IHRoaXMudGVtcENvbmNhdFVSTCArIHRoaXMuYXNpYUVkaXRpb25NRENVcmwgOiB0aGlzLm9Bc2lh
RWRpdGlvbi5ocmVmOwogICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNNRENQYWdlRmxhZykgewog
ICAgICAgICAgICAgICAgICAgIGRqLnV0aWwuUmVnaW9uLnNldFZpZXdCeVJlZ2lvbigiYXNpYSIp
OwogICAgICAgICAgICAgICAgICAgIGRqLnV0aWwuQ29va2llLnNldEdyb3VwQ29va2llKCJESkNP
T0tJRSIsICJIT01FUEFHRSIsICIvaG9tZS9hc2lhIiwgMzY1KQogICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICB9KTsKICAgICAgICAgICAgdGhpcy5vQ2hpRWRpdGlvbiAhPT0gbnVsbCAmJiBk
b2pvLmNvbm5lY3QodGhpcy5vQ2hpRWRpdGlvbiwgIm9uY2xpY2siLCB0aGlzLCBmdW5jdGlvbiAo
bCkgewogICAgICAgICAgICAgICAgZG9qby5zdG9wRXZlbnQobCk7CiAgICAgICAgICAgICAgICB3
aW5kb3cub3Blbih0aGlzLm9DaGlFZGl0aW9uLmhyZWYpCiAgICAgICAgICAgIH0pOwogICAgICAg
ICAgICB0aGlzLm9KcG5FZGl0aW9uICE9PSBudWxsICYmIGRvam8uY29ubmVjdCh0aGlzLm9KcG5F
ZGl0aW9uLCAib25jbGljayIsIHRoaXMsIGZ1bmN0aW9uIChsKSB7CiAgICAgICAgICAgICAgICBk
b2pvLnN0b3BFdmVudChsKTsKICAgICAgICAgICAgICAgIHdpbmRvdy5vcGVuKHRoaXMub0pwbkVk
aXRpb24uaHJlZikKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHRoaXMub1NwYUVkaXRpb24g
IT09IG51bGwgJiYgZG9qby5jb25uZWN0KHRoaXMub1NwYUVkaXRpb24sICJvbmNsaWNrIiwgdGhp
cywgZnVuY3Rpb24gKGwpIHsKICAgICAgICAgICAgICAgIGRvam8uc3RvcEV2ZW50KGwpOwogICAg
ICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uID0gdGhpcy5vU3BhRWRpdGlvbi5ocmVmCiAgICAg
ICAgICAgIH0pOwogICAgICAgICAgICB0aGlzLm9Qb3JFZGl0aW9uICE9PSBudWxsICYmIGRvam8u
Y29ubmVjdCh0aGlzLm9Qb3JFZGl0aW9uLCAib25jbGljayIsIHRoaXMsIGZ1bmN0aW9uIChsKSB7
CiAgICAgICAgICAgICAgICBkb2pvLnN0b3BFdmVudChsKTsKICAgICAgICAgICAgICAgIHdpbmRv
dy5sb2NhdGlvbiA9IHRoaXMub1BvckVkaXRpb24uaHJlZgogICAgICAgICAgICB9KTsKICAgICAg
ICAgICAgdGhpcy5vc2VjdGlvbkZvb3RlclN1YiAhPT0gbnVsbCAmJiBkb2pvLmNvbm5lY3QodGhp
cy5vc2VjdGlvbkZvb3RlclN1YiwgIm9uY2xpY2siLCB0aGlzLCBmdW5jdGlvbiAobCkgewogICAg
ICAgICAgICAgICAgZG9qby5zdG9wRXZlbnQobCk7CiAgICAgICAgICAgICAgICB3aW5kb3cubG9j
YXRpb24gPSB0aGlzLm9zZWN0aW9uRm9vdGVyU3ViLmhyZWYKICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgIHRoaXMub3NlY3Rpb25Gb290ZXJOb25TdWIgIT09IG51bGwgJiYgZG9qby5jb25uZWN0
KHRoaXMub3NlY3Rpb25Gb290ZXJOb25TdWIsICJvbmNsaWNrIiwgdGhpcywgZnVuY3Rpb24gKGwp
IHsKICAgICAgICAgICAgICAgIGRvam8uc3RvcEV2ZW50KGwpOwogICAgICAgICAgICAgICAgd2lu
ZG93LmxvY2F0aW9uID0gdGhpcy5vc2VjdGlvbkZvb3Rlck5vblN1Yi5ocmVmCiAgICAgICAgICAg
IH0pOwogICAgICAgICAgICBpZiAodGhpcy5jdXJyUmVnaW9uID09ICJhc2lhIikgewogICAgICAg
ICAgICAgICAgZiA9ICJBc2lhIEVkaXRpb24iOwogICAgICAgICAgICAgICAgdGhpcy5vU2VsZWN0
ZWRFZGl0aW9uID0gZG9qby5xdWVyeShrLCB0aGlzLm9IZWFkZXIpWzBdCiAgICAgICAgICAgIH0g
ZWxzZSBpZiAodGhpcy5jdXJyUmVnaW9uID09ICJhc2lhLGluZGlhIikgewogICAgICAgICAgICAg
ICAgZiA9ICJBc2lhIEVkaXRpb24iOwogICAgICAgICAgICAgICAgdGhpcy5vU2VsZWN0ZWRFZGl0
aW9uID0gZG9qby5xdWVyeShoLCB0aGlzLm9IZWFkZXIpWzBdCiAgICAgICAgICAgIH0gZWxzZSBp
ZiAodGhpcy5jdXJyUmVnaW9uID09ICJldXJvcGUiKSB7CiAgICAgICAgICAgICAgICBmID0gIkV1
cm9wZSBFZGl0aW9uIjsKICAgICAgICAgICAgICAgIHRoaXMub1NlbGVjdGVkRWRpdGlvbiA9IGRv
am8ucXVlcnkoZywgdGhpcy5vSGVhZGVyKVswXQogICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgZiA9ICJVLlMuIEVkaXRpb24iOwogICAgICAgICAgICAgICAgdGhpcy5vU2VsZWN0
ZWRFZGl0aW9uID0gZG9qby5xdWVyeShlLCB0aGlzLm9IZWFkZXIpWzBdCiAgICAgICAgICAgIH0K
ICAgICAgICAgICAgZG9qby5hZGRDbGFzcyh0aGlzLm9TZWxlY3RlZEVkaXRpb24sICJzZWxlY3Rl
ZCIpOwogICAgICAgICAgICB0aGlzLm9DdXJyZW50RWRpdGlvbi5pbm5lckhUTUwgPSBmOwogICAg
ICAgICAgICB0aGlzLm9Gb3JtRmFjdG9yQ29udGFpbmVyID0gZG9qby5ieUlkKCJmb3JtRmFjdG9y
Q29udGFpbmVyIik7CiAgICAgICAgICAgIGRvam8uc3R5bGUodGhpcy5vRm9ybUZhY3RvckNvbnRh
aW5lciwgewogICAgICAgICAgICAgICAgZGlzcGxheTogIiIKICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgIHRoaXMub0xvY0Ryb3BEb3duQ29udGFpbmVyID0gZG9qby5ieUlkKCJsb2NOYXZDb250
YWluZXIiKTsKICAgICAgICAgICAgZG9qby5zdHlsZSh0aGlzLm9Mb2NEcm9wRG93bkNvbnRhaW5l
ciwgewogICAgICAgICAgICAgICAgZGlzcGxheTogIiIKICAgICAgICAgICAgfSk7CiAgICAgICAg
ICAgIGlmICh0aGlzLm9Mb2NEcm9wRG93bkNvbnRhaW5lciAhPT0gbnVsbCkgewogICAgICAgICAg
ICAgICAgZG9qby5jb25uZWN0KHRoaXMub0xvY2F0aW9uTmF2LCAib25jbGljayIsIHRoaXMsIGZ1
bmN0aW9uIChsKSB7CiAgICAgICAgICAgICAgICAgICAgZG9qby5zdG9wRXZlbnQobCk7CiAgICAg
ICAgICAgICAgICAgICAgaWYgKGRvam8uaGFzQ2xhc3MoYi5vTG9jRHJvcERvd25Db250YWluZXIs
IGMpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRvam8ucmVtb3ZlQ2xhc3MoYi5vTG9jRHJv
cERvd25Db250YWluZXIsIGMpOwogICAgICAgICAgICAgICAgICAgICAgICBkb2pvLmFkZENsYXNz
KGIub0xvY0Ryb3BEb3duQ29udGFpbmVyLCBkKQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoZG9qby5oYXNDbGFzcyhiLm9Mb2NEcm9wRG93bkNvbnRhaW5lciwgZCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgZG9qby5yZW1vdmVDbGFzcyhiLm9Mb2NEcm9wRG93bkNvbnRhaW5lciwg
ZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGRvam8uYWRkQ2xhc3MoYi5vTG9jRHJvcERvd25D
b250YWluZXIsIGMpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAg
ICAgICAgICAgICAgICBkb2pvLmNvbm5lY3QoZG9jdW1lbnQsICJvbmNsaWNrIiwgdGhpcywgZnVu
Y3Rpb24gKGwpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoZGoudXRpbC5FbGVtZW50LmNvbnRh
aW5zKHRoaXMub0xvY0Ryb3BEb3duQ29udGFpbmVyLCBsLmNsaWVudFgsIGwuY2xpZW50WSkgPT0g
ZmFsc2UpIGlmIChkb2pvLmhhc0NsYXNzKHRoaXMub0xvY0Ryb3BEb3duQ29udGFpbmVyLCBkKSkg
ewogICAgICAgICAgICAgICAgICAgICAgICBkb2pvLnJlbW92ZUNsYXNzKHRoaXMub0xvY0Ryb3BE
b3duQ29udGFpbmVyLCBkKTsKICAgICAgICAgICAgICAgICAgICAgICAgZG9qby5hZGRDbGFzcyh0
aGlzLm9Mb2NEcm9wRG93bkNvbnRhaW5lciwgYykKICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIHRoaXMub1NlY3Rpb25Gb290ZXJOb25TdWIg
PSBkb2pvLmJ5SWQoInNlY3Rpb25Gb290ZXJOb25TdWIiKTsKICAgICAgICAgICAgICAgIHRoaXMu
b1NlY3Rpb25Gb290ZXJTdWIgPSBkb2pvLmJ5SWQoInNlY3Rpb25Gb290ZXJTdWIiKTsKICAgICAg
ICAgICAgICAgIGRqLnV0aWwuVXNlci5pc0xvZ2dlZEluKGZ1bmN0aW9uIChsKSB7CiAgICAgICAg
ICAgICAgICAgICAgaWYgKGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZG9qby5zdHlsZShi
Lm9TZWN0aW9uRm9vdGVyTm9uU3ViLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNw
bGF5OiAibm9uZSIKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGRvam8uc3R5bGUoYi5vU2VjdGlvbkZvb3RlclN1YiwgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGlzcGxheTogIiIKICAgICAgICAgICAgICAgICAgICAgICAgfSkKICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBkb2pvLnN0eWxl
KGIub1NlY3Rpb25Gb290ZXJOb25TdWIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRp
c3BsYXk6ICIiCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAg
ICAgICBkb2pvLnN0eWxlKGIub1NlY3Rpb25Gb290ZXJTdWIsIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRpc3BsYXk6ICJub25lIgogICAgICAgICAgICAgICAgICAgICAgICB9KQogICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgIH0KICAgICAg
ICB9LAogICAgICAgIGRpc3BsYXlUaW1lU3RhbXA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAg
dGhpcy5vVGltZXN0YW1wID0gZG9qby5xdWVyeSh0aGlzLmNmZy5USU1FU1RBTVBfQ0xBU1MsIHRo
aXMub0hlYWRlcilbMF07CiAgICAgICAgICAgIGlmICh0eXBlb2YgcERhdGUgIT09ICJ1bmRlZmlu
ZWQiICYmIHRoaXMub1RpbWVzdGFtcCAhPT0gbnVsbCkgdGhpcy5vVGltZXN0YW1wLmlubmVySFRN
TCA9IHdpbmRvdy5wU3RsID09ICJyZW5vdmF0aW9uIiA/IGRqLnV0aWwuRGF0ZS5kaXNwbGF5VGlt
ZShwRGF0ZSwgcERhdGVpbkdNVCkgOiBwRGF0ZQogICAgICAgIH0sCiAgICAgICAgZGlzcGxheVN1
YlNlY3Rpb246IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhpcy5vQ3VycmVudFN1YlNlY3Rp
b24gPSBkb2pvLnF1ZXJ5KHRoaXMuY2ZnLkNVUlJFTlRfU1VCU0VDVElPTl9ESVNQTEFZX0NMQVNT
LCB0aGlzLm9IZWFkZXIpWzBdOwogICAgICAgICAgICBpZiAodHlwZW9mIGdsb2JhbEhlYWRlclBh
Z2VUaXRsZSAhPT0gInVuZGVmaW5lZCIgJiYgZ2xvYmFsSGVhZGVyUGFnZVRpdGxlICE9PSBudWxs
ICYmIGdsb2JhbEhlYWRlclBhZ2VUaXRsZSAhPT0gIiIpIHsKICAgICAgICAgICAgICAgIHRoaXMu
b0N1cnJlbnRTdWJTZWN0aW9uLmlubmVySFRNTCA9IGdsb2JhbEhlYWRlclBhZ2VUaXRsZTsKICAg
ICAgICAgICAgICAgIHRoaXMuX2RlbGF5ZWRGYWRlSW5TdWJTZWN0aW9uKCkKICAgICAgICAgICAg
fQogICAgICAgIH0sCiAgICAgICAgX2RlbGF5ZWRGYWRlSW5TdWJTZWN0aW9uOiBmdW5jdGlvbiAo
KSB7CiAgICAgICAgICAgIHNldFRpbWVvdXQoZG9qby5oaXRjaCh0aGlzLCBmdW5jdGlvbiAoKSB7
CiAgICAgICAgICAgICAgICBkb2pvLnN0eWxlKHRoaXMub0N1cnJlbnRTdWJTZWN0aW9uLCB7CiAg
ICAgICAgICAgICAgICAgICAgZGlzcGxheTogImlubGluZSIsCiAgICAgICAgICAgICAgICAgICAg
b3BhY2l0eTogMAogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBkb2pvLmZhZGVJ
bih7CiAgICAgICAgICAgICAgICAgICAgbm9kZTogdGhpcy5vQ3VycmVudFN1YlNlY3Rpb24sCiAg
ICAgICAgICAgICAgICAgICAgZHVyYXRpb246IHRoaXMuY2ZnLldTSl9MT0dPX0ZBREVfQVBQRUFS
X0RVUkFUSU9OICogMUUzCiAgICAgICAgICAgICAgICB9KS5wbGF5KCkKICAgICAgICAgICAgfSks
IHRoaXMuY2ZnLldTSl9MT0dPX0RFTEFZX0RVUkFUSU9OKQogICAgICAgIH0sCiAgICAgICAgZGlz
cGxheVN1YnNjcmliZXJEZXRhaWxzOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIGRqLnV0aWwu
VXNlci5yZW5kZXJDYWxsc2lnbih0aGlzLmNmZy5VU0VSX05BTUVfRUxFTUVOVF9JRCk7CiAgICAg
ICAgICAgIHRoaXMuc2V0dXBTdWJzY3JpYmVyTGlua3MoKTsKICAgICAgICAgICAgdGhpcy5vTWVz
c2FnZUNlbnRlckxpbmsgPSBkb2pvLnF1ZXJ5KHRoaXMuY2ZnLk1FU1NBR0VfQ0VOVEVSX0xJTktf
Q0xBU1MsIHRoaXMub0hlYWRlcilbMF07CiAgICAgICAgICAgIHZhciBiID0gdGhpczsKICAgICAg
ICAgICAgZGoudXRpbC5Vc2VyLmlzU3ViTG9nZ2VkSW4oZnVuY3Rpb24gKGMpIHsKICAgICAgICAg
ICAgICAgIGlmIChjKSBiLnNldHVwTWVzc2FnZUNlbnRlcigpOwogICAgICAgICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICAgICAgICAgYi5zZXRVcE1KTGlua3NGb3JSZWcoKTsKICAgICAgICAg
ICAgICAgICAgICBkb2pvLnN0eWxlKGIub01lc3NhZ2VDZW50ZXJMaW5rLCB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGRpc3BsYXk6ICJub25lIgogICAgICAgICAgICAgICAgICAgIH0pCiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB0aGlzLm9TdWJzY3JpYmVy
RGV0YWlscyA9IGRvam8uYnlJZCh0aGlzLmNmZy5TVUJTQ1JJQkVSX0RFVEFJTFNfRUxFTUVOVF9J
RCk7CiAgICAgICAgICAgIGRvam8ucmVtb3ZlQ2xhc3ModGhpcy5vU3Vic2NyaWJlckRldGFpbHMs
ICJoaWRkZW4iKQogICAgICAgIH0sCiAgICAgICAgc2V0VXBNSkxpbmtzRm9yUmVnOiBmdW5jdGlv
biAoKSB7CiAgICAgICAgICAgIHRoaXMub0Zvb3RlciA9IGRvam8ucXVlcnkodGhpcy5jZmcuRk9P
VEVSX0NPTlRBSU5FUl9DTEFTUylbMF07CiAgICAgICAgICAgIHZhciBiID0gdGhpcy5jZmcuTU9K
X0xJTktfVVJMLAogICAgICAgICAgICAgICAgYyA9IHRoaXMuY2ZnLk1PSl9MSU5LX0NMQVNTOwog
ICAgICAgICAgICB0aGlzLm9Nb2pMaW5rSGVhZGVyID0gZG9qby5xdWVyeShjLCB0aGlzLm9IZWFk
ZXIpWzBdOwogICAgICAgICAgICB0aGlzLm9Nb2pMaW5rRm9vdGVyID0gZG9qby5xdWVyeShjLCB0
aGlzLm9Gb290ZXIpWzBdOwogICAgICAgICAgICBpZiAodHlwZW9mIGdjRG9tYWluICE9PSAidW5k
ZWZpbmVkIiAmJiBnY0RvbWFpbiAhPT0gbnVsbCAmJiBnY0RvbWFpbiAhPT0gIiIpIHsKICAgICAg
ICAgICAgICAgIHRoaXMub01vakxpbmtIZWFkZXIuaHJlZiA9ICJodHRwOi8vIiArIGdjRG9tYWlu
ICsgYjsKICAgICAgICAgICAgICAgIHRoaXMub01vakxpbmtGb290ZXIuaHJlZiA9ICJodHRwOi8v
IiArIGdjRG9tYWluICsgYgogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhp
cy5vTW9qTGlua0hlYWRlci5ocmVmID0gYjsKICAgICAgICAgICAgICAgIHRoaXMub01vakxpbmtG
b290ZXIuaHJlZiA9IGIKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgc2V0dXBTdWJz
Y3JpYmVyTGlua3M6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhpcy5vVG9kYXlzUGFwZXJM
aW5rID0gZG9qby5xdWVyeSh0aGlzLmNmZy5UT0RBWVNfUEFQRVJfTElOS19DTEFTUywgdGhpcy5v
SGVhZGVyKVswXTsKICAgICAgICAgICAgdmFyIGIgPSB0aGlzLmNmZy5MT0dHRURfSU5fVE9EQVlT
X1BBUEVSX1VSTCwKICAgICAgICAgICAgICAgIGMgPSB0aGlzOwogICAgICAgICAgICBkai51dGls
LlVzZXIuaXNTdWJMb2dnZWRJbihmdW5jdGlvbiAoZCkgewogICAgICAgICAgICAgICAgaWYgKGQp
IGMub1RvZGF5c1BhcGVyTGluay5ocmVmID0gdHlwZW9mIGdjRG9tYWluICE9PSAidW5kZWZpbmVk
IiAmJiBnY0RvbWFpbiAhPT0gbnVsbCAmJiBnY0RvbWFpbiAhPT0gIiIgPyAiaHR0cDovLyIgKyBn
Y0RvbWFpbiArIGIgOiBiCiAgICAgICAgICAgIH0pCiAgICAgICAgfSwKICAgICAgICBzZXR1cE1l
c3NhZ2VDZW50ZXI6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhpcy5vTWVzc2FnZUNlbnRl
ckxpbmsgPSBkb2pvLnF1ZXJ5KHRoaXMuY2ZnLk1FU1NBR0VfQ0VOVEVSX0xJTktfQ0xBU1MsIHRo
aXMub0hlYWRlcilbMF07CiAgICAgICAgICAgIHRoaXMub01lc3NhZ2VDb3VudCA9IGRvam8ucXVl
cnkodGhpcy5jZmcuTUVTU0FHRV9DT1VOVF9DTEFTUywgdGhpcy5vSGVhZGVyKVswXTsKICAgICAg
ICAgICAgdmFyIGIgPSB0aGlzLAogICAgICAgICAgICAgICAgYyA9IGZ1bmN0aW9uIChlKSB7CiAg
ICAgICAgICAgICAgICAgICAgaWYgKGUgPT0gIi0xIikgZG9qby5zdHlsZShiLm9NZXNzYWdlQ2Vu
dGVyTGluaywgewogICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAibm9uZSIKICAgICAg
ICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICBlbHNlIGIub01lc3NhZ2VDb3Vu
dC5pbm5lckhUTUwgPSBlCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgZCA9IGRq
LnV0aWwuQ29va2llLmdldENvb2tpZSgibXNnQ291bnQiKTsKICAgICAgICAgICAgZCA9PT0gbnVs
bCA/IGRvam8ueGhyUG9zdCh7CiAgICAgICAgICAgICAgICB1cmw6IHRoaXMuY2ZnLk1FU1NBR0Vf
Q0VOVEVSX1BPU1RfVVJMLAogICAgICAgICAgICAgICAgaGFuZGxlQXM6ICJqc29uIiwKICAgICAg
ICAgICAgICAgIGhhbmRsZTogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgICBkID0g
ZS5NZXNzYWdlc0NvdW50OwogICAgICAgICAgICAgICAgICAgIGUgPSBlLlN0YXR1czsKICAgICAg
ICAgICAgICAgICAgICBkai51dGlsLkNvb2tpZS5zZXRDb29raWUoIm1zZ0NvdW50IiwgZCwgNSAv
IDI0IC8gNjApOwogICAgICAgICAgICAgICAgICAgIGRqLnV0aWwuQ29va2llLnNldENvb2tpZSgi
dXNlclN0YXR1cyIsIGUsIDUgLyAyNCAvIDYwKTsKICAgICAgICAgICAgICAgICAgICBjKGQpCiAg
ICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlLCBnKSB7
CiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiRXhjZXB0aW9uIG9jY3VyZWQgd2hp
bGUgcG9zdGluZyBwb3N0aW5nIEFqYXggUmVxdWVzdDogJXMiLCBnKQogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICB9KSA6IGMoZCkKICAgICAgICB9LAogICAgICAgIHNldHVwTG9naW46IGZ1
bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhpcy5vVXNlck5hbWUgPSBkb2pvLmJ5SWQodGhpcy5j
ZmcuTE9HSU5fVVNFUk5BTUVfRUxFTUVOVF9JRCk7CiAgICAgICAgICAgIHRoaXMub1Bhc3N3b3Jk
ID0gZG9qby5ieUlkKHRoaXMuY2ZnLkxPR0lOX1BBU1NXT1JEX0VMRU1FTlRfSUQpOwogICAgICAg
ICAgICB0aGlzLm9Mb2dpbkltZyA9IGRvam8uYnlJZCh0aGlzLmNmZy5MT0dJTl9CVVRUT05fRUxF
TUVOVF9JRCk7CiAgICAgICAgICAgIHRoaXMub0xvZ2luRm9ybSA9IGRvam8uYnlJZCh0aGlzLmNm
Zy5MT0dJTl9GT1JNX0lEKTsKICAgICAgICAgICAgdGhpcy5vTG9naW5Gb3JtLnJlc2V0KCk7CiAg
ICAgICAgICAgIHRoaXMub1BhZ2VVcmwgPSBkb2pvLmJ5SWQodGhpcy5jZmcuUEFHRV9VUkxfRUxF
TUVOVF9JRCk7CiAgICAgICAgICAgIHZhciBiID0gdGhpczsKICAgICAgICAgICAgaWYgKHRoaXMu
b1BhZ2VVcmwgIT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHZhciBjID0gdGhpcy5jZmcuTk9O
U1VCU0NSSUJFUl9IT01FUEFHRV9QSUQsCiAgICAgICAgICAgICAgICAgICAgZCA9IHRoaXMuY2Zn
Lk5PTlNVQlNDUklCRVJfU0VBUkNIX1BBR0VfUElELAogICAgICAgICAgICAgICAgICAgIGUgPSB0
aGlzLmNmZy5OT05TVUJTQ1JJQkVSX05FV1NMRVRURVJTX0FMRVJUU19QQUdFX1BJRCwKICAgICAg
ICAgICAgICAgICAgICBnID0gdGhpcy5jZmcuTURDX1BBR0VfUElELAogICAgICAgICAgICAgICAg
ICAgIGg7CiAgICAgICAgICAgICAgICBoID0gdHlwZW9mIGdjRG9tYWluICE9PSAidW5kZWZpbmVk
IiAmJiBnY0RvbWFpbiAhPT0gbnVsbCAmJiBnY0RvbWFpbiAhPT0gIiIgPyAiaHR0cDovLyIgKyBn
Y0RvbWFpbiA6ICJodHRwOi8vIiArIGRvY3VtZW50LmRvbWFpbjsKICAgICAgICAgICAgICAgIHZh
ciBrOwogICAgICAgICAgICAgICAgdmFyIGkgPSBrID0gZG9qby5pc0lFID8gd2luZG93LmxvY2F0
aW9uLmhyZWYgOiBkb2N1bWVudC5sb2NhdGlvbi5ocmVmOwogICAgICAgICAgICAgICAgaWYgKHR5
cGVvZiBwSUQgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgICAgICAgICAgaSA9IHBJRCA9
PT0gYyA/IGggKyB0aGlzLmNmZy5IT01FUEFHRV9TVUJTQ1JJQkVSX1VSTCA6IHBJRCA9PT0gZSA/
IGggKyAiL2VtYWlsIiA6IHBJRCA9PT0gZCA/IGggKyB0aGlzLmNmZy5TRUFSQ0hfUEFHRV9TVUJT
Q1JJQkVSX1VSTCA6IHBJRCA9PT0gZyA/IGggKyB0aGlzLmNmZy5NRENfTElOS19VUkwgOiBrOwog
ICAgICAgICAgICAgICAgICAgIGlmIChkb2pvLmlzSUUpIGRvY3VtZW50LmxvZ2luX2Zvcm0udXJs
LnZhbHVlID0gaTsKICAgICAgICAgICAgICAgICAgICBlbHNlIHRoaXMub1BhZ2VVcmwudmFsdWUg
PSBpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAodGhpcy5vVXNlck5hbWUg
IT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICBkb2pvLmNvbm5lY3QodGhpcy5vVXNlck5h
bWUsICJvbmZvY3VzIiwgdGhpcywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAg
ICBkai51dGlsLkZvcm0uY2xlYXJWYWx1ZSh0aGlzLm9Vc2VyTmFtZSwgIlVzZXIgTmFtZSIpCiAg
ICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgZG9qby5jb25uZWN0KHRo
aXMub1VzZXJOYW1lLCAib25jbGljayIsIHRoaXMsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgZGoudXRpbC5Gb3JtLmNsZWFyVmFsdWUodGhpcy5vVXNlck5hbWUsICJVc2Vy
IE5hbWUiKQogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICBpZiAodGhpcy5vUGFzc3dvcmQgIT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAg
ICBkb2pvLmNvbm5lY3QodGhpcy5vUGFzc3dvcmQsICJvbmZvY3VzIiwgdGhpcywgZnVuY3Rpb24g
KCkgewogICAgICAgICAgICAgICAgICAgICAgICBkai51dGlsLkZvcm0uY2xlYXJWYWx1ZShiLm9Q
YXNzd29yZCwgIlBhc3N3b3JkIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub1Bhc3N3
b3JkLnR5cGUgPSAicGFzc3dvcmQiCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAg
ICAgICAgICAgZG9qby5jb25uZWN0KHRoaXMub1Bhc3N3b3JkLCAib25jbGljayIsIHRoaXMsIGZ1
bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGoudXRpbC5Gb3JtLmNsZWFyVmFs
dWUoYi5vUGFzc3dvcmQsICJQYXNzd29yZCIpCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICAgICAgICAgZG9qby5jb25uZWN0KHRoaXMub1Bhc3N3b3JkLCAib25jaGFuZ2UiLCB0
aGlzLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRqLnV0aWwuRm9ybS5j
bGVhclZhbHVlKGIub1Bhc3N3b3JkLCAiUGFzc3dvcmQiKQogICAgICAgICAgICAgICAgICAgIH0p
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkb2pvLmlzSUUgJiYgZG9qby5jb25u
ZWN0KHRoaXMub0xvZ2luSW1nLCAib25jbGljayIsIHRoaXMsIGZ1bmN0aW9uICgpIHsKICAgICAg
ICAgICAgICAgICAgICBkb2N1bWVudC5sb2dpbl9mb3JtLnVybC52YWx1ZSA9IGs7CiAgICAgICAg
ICAgICAgICAgICAgY29uc29sZS5sb2coImNvbWluZyBpbiB0byBpbWcgb25saWNrIGluIElFIiAr
IGspOwogICAgICAgICAgICAgICAgICAgIHRoaXMub0xvZ2luRm9ybS5zdWJtaXQoKQogICAgICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBkb2pvLmNvbm5lY3QodGhpcy5vUGFzc3dvcmQs
ICJvbmtleXByZXNzIiwgdGhpcywgZnVuY3Rpb24gKGYpIHsKICAgICAgICAgICAgICAgICAgICBm
ID0gZi5rZXlDb2RlIHx8IGYud2hpY2g7CiAgICAgICAgICAgICAgICAgICAgaWYgKGRvam8uaXNJ
RSkgaWYgKGYgPT0gZG9qby5rZXlzLkVOVEVSKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRv
Y3VtZW50LmxvZ2luX2Zvcm0udXJsLnZhbHVlID0gazsKICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5vTG9naW5Gb3JtLnN1Ym1pdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgfSkKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgc2V0dXBMb2dvdXQ6IGZ1
bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhpcy5vTG9nb3V0ID0gZG9qby5ieUlkKHRoaXMuY2Zn
LkxPR09VVF9MSU5LX0VMRU1FTlRfSUQpOwogICAgICAgICAgICB0aGlzLm9Mb2dvdXQgIT09IG51
bGwgJiYgZG9qby5jb25uZWN0KHRoaXMub0xvZ291dCwgIm9uY2xpY2siLCB0aGlzLCBmdW5jdGlv
biAoYikgewogICAgICAgICAgICAgICAgZG9qby5zdG9wRXZlbnQoYik7CiAgICAgICAgICAgICAg
ICBkai51dGlsLkNvb2tpZS5kZWxldGVDb29raWUoIm1zZ0NvdW50Iik7CiAgICAgICAgICAgICAg
ICBkai51dGlsLkNvb2tpZS5kZWxldGVDb29raWUoIkhPTUVQQUdFIiwgdHJ1ZSk7CiAgICAgICAg
ICAgICAgICBkb2N1bWVudC5jb29raWUgPSAiSE9NRVBBR0U9O3BhdGg9Lztkb21haW49Lndzai5j
b207ZXhwaXJlcz1UaHUsIDAxLUphbi0xOTcwIDAwOjAwOjAxIEdNVCI7CiAgICAgICAgICAgICAg
ICBpZiAodHlwZW9mIGRqLm1vZHVsZS5mYWNlYm9vay5jb25uZWN0LmxvZ291dCA9PSAiZnVuY3Rp
b24iICYmIEZCLmdldFNlc3Npb24oKSkgZGoubW9kdWxlLmZhY2Vib29rLmNvbm5lY3QubG9nb3V0
KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24gPSB0eXBl
b2YgZ2NEb21haW4gIT09ICJ1bmRlZmluZWQiICYmIGdjRG9tYWluICE9PSBudWxsICYmIGdjRG9t
YWluICE9PSAiIiA/ICIvbG9nb3V0P3VybD1odHRwOi8vIiArIGdjRG9tYWluIDogIi9sb2dvdXQi
CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
ICAgICAgIGNvbnNvbGUuaW5mbygiRmFjZWJvb2sgQVBJIGlzIG5vdCBhdmFpbGFibGUgd2hlbiBl
eGVjdXRpbmcgTG9nb3V0Iik7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uID0g
dHlwZW9mIGdjRG9tYWluICE9PSAidW5kZWZpbmVkIiAmJiBnY0RvbWFpbiAhPT0gbnVsbCAmJiBn
Y0RvbWFpbiAhPT0gIiIgPyAiL2xvZ291dD91cmw9aHR0cDovLyIgKyBnY0RvbWFpbiA6ICIvbG9n
b3V0IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KQogICAgICAgIH0sCiAgICAgICAg
aGlnaGxpZ2h0Rm9ybUZhY3RvckxpbmtzOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHRoaXMu
b1RvZGF5c1BhcGVyTGlua0NvbnRhaW5lciA9IGRvam8ucXVlcnkodGhpcy5jZmcuVE9EQVlTX1BB
UEVSX0xJTktfQ09OVEFJTkVSX0NMQVNTLCB0aGlzLm9IZWFkZXIpWzBdOwogICAgICAgICAgICB0
aGlzLm9WaWRlb0xpbmtDb250YWluZXIgPSBkb2pvLnF1ZXJ5KHRoaXMuY2ZnLlZJREVPX0xJTktf
Q09OVEFJTkVSX0NMQVNTLCB0aGlzLm9IZWFkZXIpWzBdOwogICAgICAgICAgICB0aGlzLm9CbG9n
c0xpbmtDb250YWluZXIgPSBkb2pvLnF1ZXJ5KHRoaXMuY2ZnLkJMT0dTX0xJTktfQ09OVEFJTkVS
X0NMQVNTLCB0aGlzLm9IZWFkZXIpWzBdOwogICAgICAgICAgICB0aGlzLm9Db2x1bW5zTGlua0Nv
bnRhaW5lciA9IGRvam8ucXVlcnkodGhpcy5jZmcuQ09MVU1OU19MSU5LX0NPTlRBSU5FUl9DTEFT
UywgdGhpcy5vSGVhZGVyKVswXTsKICAgICAgICAgICAgdGhpcy5vSW50ZXJhY3RpdmVHcmFwaGlj
c0xpbmtDb250YWluZXIgPSBkb2pvLnF1ZXJ5KHRoaXMuY2ZnLklOVEVSQUNUSVZFX0dSQVBISUNT
X0xJTktfQ09OVEFJTkVSX0NMQVNTLCB0aGlzLm9IZWFkZXIpWzBdOwogICAgICAgICAgICB0aGlz
Lm9Ub3BpY3NMaW5rQ29udGFpbmVyID0gZG9qby5xdWVyeSh0aGlzLmNmZy5UT1BJQ1NfTElOS19D
T05UQUlORVJfQ0xBU1MsIHRoaXMub0hlYWRlcilbMF07CiAgICAgICAgICAgIHRoaXMub0NvbW11
bml0eUZvcnVtc0xpbmtDb250YWluZXIgPSBkb2pvLnF1ZXJ5KHRoaXMuY2ZnLkNPTU1VTklUWV9G
T1JVTVNfTElOS19DT05UQUlORVJfQ0xBU1MsIHRoaXMub0hlYWRlcilbMF07CiAgICAgICAgICAg
IHZhciBiID0gdGhpcy5jZmcuVE9EQVlTX1BBUEVSX1BJRCwKICAgICAgICAgICAgICAgIGMgPSB0
aGlzLmNmZy5UT0RBWVNfUEFQRVJfVVNfTk9OU1VCX1BJRCwKICAgICAgICAgICAgICAgIGQgPSB0
aGlzLmNmZy5UT0RBWVNfUEFQRVJfRVVST1BFX05PTlNVQl9QSUQsCiAgICAgICAgICAgICAgICBl
ID0gdGhpcy5jZmcuVE9EQVlTX1BBUEVSX0FTSUFfTk9OU1VCX1BJRCwKICAgICAgICAgICAgICAg
IGcgPSB0aGlzLmNmZy5UT0RBWVNfUEFQRVJfVVNfUElELAogICAgICAgICAgICAgICAgaCA9IHRo
aXMuY2ZnLlRPREFZU19QQVBFUl9FVVJPUEVfUElELAogICAgICAgICAgICAgICAgayA9IHRoaXMu
Y2ZnLlRPREFZU19QQVBFUl9BU0lBX1BJRCwKICAgICAgICAgICAgICAgIGkgPSB0aGlzLmNmZy5U
T0RBWVNfUEFQRVJfUEFTVF9FRElUSU9OU19QSUQsCiAgICAgICAgICAgICAgICBmID0gdGhpcy5j
ZmcuVE9EQVlTX1BBUEVSX0lOREVYX0JJWl9QSUQsCiAgICAgICAgICAgICAgICBsID0gdGhpcy5j
ZmcuVE9EQVlTX1BBUEVSX0lOREVYX1BFT1BMRV9QSUQsCiAgICAgICAgICAgICAgICBvID0gdGhp
cy5jZmcuVE9EQVlTX1BBUEVSX0NPUlJFQ1RJT05TX1BJRCwKICAgICAgICAgICAgICAgIG4gPSB0
aGlzLmNmZy5WSURFT19QSUQsCiAgICAgICAgICAgICAgICBtID0gdGhpcy5jZmcuSU5URVJBQ1RJ
VkVfR1JBUEhJQ1NfUElELAogICAgICAgICAgICAgICAgcCA9IHRoaXMuY2ZnLlRPUElDU19QSUQs
CiAgICAgICAgICAgICAgICBxID0gdGhpcy5jZmcuQ09MVU1OU19QSUQsCiAgICAgICAgICAgICAg
ICByID0gdGhpcy5jZmcuQkxPR1NfUElELAogICAgICAgICAgICAgICAgcyA9IGRvY3VtZW50Lmxv
Y2F0aW9uLmhvc3QgKyB0aGlzLmNmZy5DT01NVU5JVFlfSElHSExJR0hUX0NPTVBBUkVfVVJMLAog
ICAgICAgICAgICAgICAgdCA9IHRoaXMuY2ZnLkZPUlVNU19ISUdITElHSFRfQ09NUEFSRV9VUkw7
CiAgICAgICAgICAgIGlmICh0eXBlb2YgcElEICE9PSAidW5kZWZpbmVkIikgaWYgKHBJRC5pbmRl
eE9mKGIpID09IDAgfHwgcElEID09PSBjIHx8IHBJRCA9PT0gZCB8fCBwSUQgPT09IGUgfHwgcElE
ID09PSBnIHx8IHBJRCA9PT0gaCB8fCBwSUQgPT09IGsgfHwgcElEID09PSBpIHx8IHBJRCA9PT0g
ZiB8fCBwSUQgPT09IGwgfHwgcElEID09PSBvKSBkb2pvLmFkZENsYXNzKHRoaXMub1RvZGF5c1Bh
cGVyTGlua0NvbnRhaW5lciwgInNlbGVjdGVkIik7CiAgICAgICAgICAgIGVsc2UgaWYgKHBJRCA9
PT0gbikgZG9qby5hZGRDbGFzcyh0aGlzLm9WaWRlb0xpbmtDb250YWluZXIsICJzZWxlY3RlZCIp
OwogICAgICAgICAgICBlbHNlIGlmIChwSUQgPT09IG0pIGRvam8uYWRkQ2xhc3ModGhpcy5vSW50
ZXJhY3RpdmVHcmFwaGljc0xpbmtDb250YWluZXIsICJzZWxlY3RlZCIpOwogICAgICAgICAgICBl
bHNlIGlmIChwSUQgPT09IHEpIGRvam8uYWRkQ2xhc3ModGhpcy5vQ29sdW1uc0xpbmtDb250YWlu
ZXIsICJzZWxlY3RlZCIpOwogICAgICAgICAgICBlbHNlIGlmIChwSUQgPT09IHIpIGRvam8uYWRk
Q2xhc3ModGhpcy5vQmxvZ3NMaW5rQ29udGFpbmVyLCAic2VsZWN0ZWQiKTsKICAgICAgICAgICAg
ZWxzZSBwSUQgPT09IHAgJiYgZG9qby5hZGRDbGFzcyh0aGlzLm9Ub3BpY3NMaW5rQ29udGFpbmVy
LCAic2VsZWN0ZWQiKTsKICAgICAgICAgICAgaWYgKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYgIT09
IG51bGwgJiYgZG9jdW1lbnQubG9jYXRpb24uaHJlZiAhPT0gIiIgJiYgZG9jdW1lbnQubG9jYXRp
b24uaHJlZi5pbmRleE9mKHMpICE9PSAtMSB8fCBkb2N1bWVudC5sb2NhdGlvbi5ocmVmLmluZGV4
T2YodCkgIT09IC0xKSBkb2pvLmFkZENsYXNzKHRoaXMub0NvbW11bml0eUZvcnVtc0xpbmtDb250
YWluZXIsICJzZWxlY3RlZCIpCiAgICAgICAgfQogICAgfQp9KCk7CmRvam8ucHJvdmlkZSgiZGou
bW9kdWxlLmhlYWRlci5nbG9iYWxIZWFkZXIiKTsKZG9qby5yZXF1aXJlKCJkai5sYW5nIik7CmRv
am8ucmVxdWlyZSgiZGoudXRpbC5Db25maWciKTsKZG9qby5yZXF1aXJlKCJkai51dGlsLkNvb2tp
ZSIpOwpkb2pvLnJlcXVpcmUoImRqLnV0aWwuRGF0ZSIpOwpkb2pvLnJlcXVpcmUoImRqLnV0aWwu
UmVnaW9uIik7CmRvam8ucmVxdWlyZSgiZGoudXRpbC5FbGVtZW50Iik7CmRvam8ucmVxdWlyZSgi
ZGoudXRpbC5Vc2VyIik7CmRqLm1vZHVsZS5oZWFkZXIuZ2xvYmFsSGVhZGVyID0gZnVuY3Rpb24g
KCkgewogICAgdmFyIGEgPSB7CiAgICAgICAgSEVBREVSX0NPTlRBSU5FUl9DTEFTUzogIi5oZWFk
ZXIiLAogICAgICAgIENVUlJFTlRfU1VCU0VDVElPTl9ESVNQTEFZX0NMQVNTOiAiLmN1cnJlbnRT
dWJTZWN0aW9uIiwKICAgICAgICBHTE9CQUxOQVZfU1VCU0VDVElPTl9FTEVNRU5UX0lEOiAiY3Vy
cmVudEdsb2JhbE5hdlN1YlNlY3Rpb24iLAogICAgICAgIE1PSl9MSU5LX1VSTDogIi9wYWdlL215
LWpvdXJuYWwtbWFpbi5odG1sIiwKICAgICAgICBNRENfTElOS19VUkw6ICIvbWRjL3BhZ2UvbWFy
a2V0c2RhdGEuaHRtbCIsCiAgICAgICAgTURDX1BBR0VfUElEOiAiMl8zMDAwIiwKICAgICAgICBD
T01NVU5JVFlfSElHSExJR0hUX0NPTVBBUkVfVVJMOiAiL2NvbW11bml0eSIsCiAgICAgICAgRk9S
VU1TX0hJR0hMSUdIVF9DT01QQVJFX1VSTDogImZvcnVtcy53c2ouY29tIiwKICAgICAgICBMT0NB
VElPTl9OQVZfQ0xBU1M6ICIubG9jYXRpb25fbmF2IiwKICAgICAgICBMT0NBVElPTl9OQVZfQ09M
TEFQU0VEX0NMQVNTTkFNRTogImxvY2F0aW9uX2NvbGxhcHNlZCIsCiAgICAgICAgTE9DQVRJT05f
TkFWX0VYUEFOREVEX0NMQVNTTkFNRTogImxvY2F0aW9uX2V4cGFuZGVkIiwKICAgICAgICBVU19F
RElUSU9OX0xJTktfQ0xBU1M6ICIubWFwX3VzIiwKICAgICAgICBFVV9FRElUSU9OX0xJTktfQ0xB
U1M6ICIubWFwX2V1cm9wZSIsCiAgICAgICAgQVNJQV9FRElUSU9OX0xJTktfQ0xBU1M6ICIubWFw
X2FzaWEiLAogICAgICAgIElOX0VESVRJT05fTElOS19DTEFTUzogIi5tYXBfaW5kaWEiLAogICAg
ICAgIFVTX0VESVRJT05fTURDX1VSTDogIi9tYXJrZXRzZGF0YSIsCiAgICAgICAgRVVfRURJVElP
Tl9NRENfVVJMOiAiL21kYy9wdWJsaWMvcGFnZS9tYXJrZXRzZGF0YV9ldXJvcGUuaHRtbCIsCiAg
ICAgICAgQVNJQV9FRElUSU9OX01EQ19VUkw6ICIvbWRjL3B1YmxpYy9wYWdlL21hcmtldHNkYXRh
X2FzaWEuaHRtbCIsCiAgICAgICAgSU5fRURJVElPTl9NRENfVVJMOiAiL21kYy9wdWJsaWMvcGFn
ZS9tYXJrZXRzZGF0YV9hc2lhLmh0bWwiLAogICAgICAgIE1EQ19DT01QQVJFX1VSTDogIi9tZGMv
IiwKICAgICAgICBGT09URVJfQ09OVEFJTkVSX0NMQVNTOiAiLnBhZ2Vmb290ZXIiCiAgICB9Owog
ICAgcmV0dXJuIHsKICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbiAoYikgewogICAgICAgICAg
ICB0aGlzLmNmZyA9IGRqLmxhbmcuY2xvbmVNaXhpbihhLCBiKTsKICAgICAgICAgICAgdGhpcy5v
SGVhZGVyID0gZG9qby5xdWVyeSgiLmhlYWRlciIpWzBdOwogICAgICAgICAgICB0aGlzLmVkaXRp
b25Ecm9wZG93blNldFVwKCk7CiAgICAgICAgICAgIHRoaXMuY3VyclJlZ2lvbiA9IGRqLnV0aWwu
UmVnaW9uLmdldFZpZXdCeVJlZ2lvbigpOwogICAgICAgICAgICB0aGlzLm9Mb2NUb2dnbGUgPSBk
b2pvLmJ5SWQoImxvY190b2dnbGUiKQogICAgICAgIH0sCiAgICAgICAgdG9nZ2xlRHJvcGRvd25D
bGFzczogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgYiA9IHRoaXMuY2ZnLkxPQ0FUSU9O
X05BVl9DT0xMQVBTRURfQ0xBU1NOQU1FLAogICAgICAgICAgICAgICAgYyA9IHRoaXMuY2ZnLkxP
Q0FUSU9OX05BVl9FWFBBTkRFRF9DTEFTU05BTUU7CiAgICAgICAgICAgIHRoaXMub0xvY1RvZ2ds
ZSA9IGRvam8uYnlJZCgibG9jX3RvZ2dsZSIpOwogICAgICAgICAgICBpZiAoZG9qby5oYXNDbGFz
cyh0aGlzLm9Mb2NUb2dnbGUsIGIpKSB7CiAgICAgICAgICAgICAgICBkb2pvLnJlbW92ZUNsYXNz
KHRoaXMub0xvY1RvZ2dsZSwgYik7CiAgICAgICAgICAgICAgICBkb2pvLmFkZENsYXNzKHRoaXMu
b0xvY1RvZ2dsZSwgYykKICAgICAgICAgICAgfSBlbHNlIGlmIChkb2pvLmhhc0NsYXNzKHRoaXMu
b0xvY1RvZ2dsZSwgYykpIHsKICAgICAgICAgICAgICAgIGRvam8ucmVtb3ZlQ2xhc3ModGhpcy5v
TG9jVG9nZ2xlLCBjKTsKICAgICAgICAgICAgICAgIGRvam8uYWRkQ2xhc3ModGhpcy5vTG9jVG9n
Z2xlLCBiKQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBlZGl0aW9uRHJvcGRvd25T
ZXRVcDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB0aGlzLm9Mb2NhdGlvbk5hdiA9IGRvam8u
YnlJZCgibG9jTmF2Q29udGFpbmVyIik7CiAgICAgICAgICAgIHZhciBiID0gdGhpcy5jZmcuTE9D
QVRJT05fTkFWX0NPTExBUFNFRF9DTEFTU05BTUUsCiAgICAgICAgICAgICAgICBjID0gdGhpcy5j
ZmcuTE9DQVRJT05fTkFWX0VYUEFOREVEX0NMQVNTTkFNRSwKICAgICAgICAgICAgICAgIGQgPSB0
aGlzLmNmZy5VU19FRElUSU9OX0xJTktfQ0xBU1MsCiAgICAgICAgICAgICAgICBlID0gdGhpcy5j
ZmcuRVVfRURJVElPTl9MSU5LX0NMQVNTLAogICAgICAgICAgICAgICAgZyA9IHRoaXMuY2ZnLklO
X0VESVRJT05fTElOS19DTEFTUywKICAgICAgICAgICAgICAgIGggPSB0aGlzLmNmZy5BU0lBX0VE
SVRJT05fTElOS19DTEFTUzsKICAgICAgICAgICAgdGhpcy51c0VkaXRpb25NRENVcmwgPSB0aGlz
LmNmZy5VU19FRElUSU9OX01EQ19VUkw7CiAgICAgICAgICAgIHRoaXMuZXVFZGl0aW9uTURDVXJs
ID0gdGhpcy5jZmcuRVVfRURJVElPTl9NRENfVVJMOwogICAgICAgICAgICB0aGlzLmluRWRpdGlv
bk1EQ1VybCA9IHRoaXMuY2ZnLklOX0VESVRJT05fTURDX1VSTDsKICAgICAgICAgICAgdGhpcy5h
c2lhRWRpdGlvbk1EQ1VybCA9IHRoaXMuY2ZnLkFTSUFfRURJVElPTl9NRENfVVJMOwogICAgICAg
ICAgICB2YXIgayA9IHRoaXMuY2ZnLk1EQ19DT01QQVJFX1VSTDsKICAgICAgICAgICAgdGhpcy5v
Q3VycmVudEVkaXRpb24gPSBkb2pvLmJ5SWQoImN1cnJlbnRFZGl0aW9uIik7CiAgICAgICAgICAg
IHRoaXMub1VzRWRpdGlvbiA9IGRvam8uYnlJZCgidXNFZGl0aW9uIik7CiAgICAgICAgICAgIHRo
aXMub0V1RWRpdGlvbiA9IGRvam8uYnlJZCgiZXVyb3BlRWRpdGlvbiIpOwogICAgICAgICAgICB0
aGlzLm9JbkVkaXRpb24gPSBkb2pvLmJ5SWQoImluZGlhRWRpdGlvbiIpOwogICAgICAgICAgICB0
aGlzLm9Bc2lhRWRpdGlvbiA9IGRvam8uYnlJZCgiYXNpYUVkaXRpb24iKTsKICAgICAgICAgICAg
dGhpcy5vQ2hpRWRpdGlvbiA9IGRvam8uYnlJZCgiY2hpRWRpdGlvbiIpOwogICAgICAgICAgICB0
aGlzLm9KcG5FZGl0aW9uID0gZG9qby5ieUlkKCJqcG5FZGl0aW9uIik7CiAgICAgICAgICAgIHRo
aXMub1NwYUVkaXRpb24gPSBkb2pvLmJ5SWQoInNwYUVkaXRpb24iKTsKICAgICAgICAgICAgdGhp
cy5vUG9yRWRpdGlvbiA9IGRvam8uYnlJZCgicG9yRWRpdGlvbiIpOwogICAgICAgICAgICB0aGlz
Lm9zZWN0aW9uRm9vdGVyU3ViID0gZG9qby5ieUlkKCJocmVmTm9uU3ViSWQiKTsKICAgICAgICAg
ICAgdGhpcy5vc2VjdGlvbkZvb3Rlck5vblN1YiA9IGRvam8uYnlJZCgiaHJlZlN1YklkIik7CiAg
ICAgICAgICAgIHRoaXMub1VzRWRpdGlvbkZvb3RlciA9IGRvam8uYnlJZCgidXNFZGl0aW9uRm9v
dGVyIik7CiAgICAgICAgICAgIHRoaXMuY3VyclJlZ2lvbiA9IGRqLnV0aWwuUmVnaW9uLmdldFZp
ZXdCeVJlZ2lvbigpOwogICAgICAgICAgICB0aGlzLnRlbXBDb25jYXRVUkwgPSB0eXBlb2YgZ2NE
b21haW4gIT09ICJ1bmRlZmluZWQiICYmIGdjRG9tYWluICE9PSBudWxsICYmIGdjRG9tYWluICE9
PSAiIiA/ICJodHRwOi8vIiArIGdjRG9tYWluIDogImh0dHA6Ly8iICsgZG9jdW1lbnQuZG9tYWlu
OwogICAgICAgICAgICB0aGlzLmlzTURDUGFnZUZsYWcgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVm
ICE9PSBudWxsICYmIGRvY3VtZW50LmxvY2F0aW9uLmhyZWYgIT09ICIiICYmIGRvY3VtZW50Lmxv
Y2F0aW9uLmhyZWYuaW5kZXhPZihrKSAhPT0gLTE7CiAgICAgICAgICAgIHRoaXMub1VzRWRpdGlv
biAhPT0gbnVsbCAmJiBkb2pvLmNvbm5lY3QodGhpcy5vVXNFZGl0aW9uLCAib25jbGljayIsIHRo
aXMsIGZ1bmN0aW9uIChmKSB7CiAgICAgICAgICAgICAgICBkb2pvLnN0b3BFdmVudChmKTsKICAg
ICAgICAgICAgICAgIGRqLnV0aWwuUmVnaW9uLnNldFZpZXdCeVJlZ2lvbigibmEsdXMiKTsKICAg
ICAgICAgICAgICAgIGRqLnV0aWwuQ29va2llLnNldEdyb3VwQ29va2llKCJESkNPT0tJRSIsICJI
T01FUEFHRSIsICIvaG9tZS1wYWdlIiwgMzY1KTsKICAgICAgICAgICAgICAgIHdpbmRvdy5sb2Nh
dGlvbiA9IHRoaXMuaXNNRENQYWdlRmxhZyA/IHRoaXMudGVtcENvbmNhdFVSTCArIHRoaXMudXNF
ZGl0aW9uTURDVXJsIDogdGhpcy5vVXNFZGl0aW9uLmhyZWYKICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgIHRoaXMub1VzRWRpdGlvbkZvb3RlciAhPT0gbnVsbCAmJiBkb2pvLmNvbm5lY3QodGhp
cy5vVXNFZGl0aW9uRm9vdGVyLCAib25jbGljayIsIHRoaXMsIGZ1bmN0aW9uIChmKSB7CiAgICAg
ICAgICAgICAgICBkb2pvLnN0b3BFdmVudChmKTsKICAgICAgICAgICAgICAgIGRqLnV0aWwuUmVn
aW9uLnNldFZpZXdCeVJlZ2lvbigibmEsdXMiKTsKICAgICAgICAgICAgICAgIGRqLnV0aWwuQ29v
a2llLnNldEdyb3VwQ29va2llKCJESkNPT0tJRSIsICJIT01FUEFHRSIsICIvaG9tZS91cyIsIDM2
NSk7CiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24gPSB0aGlzLmlzTURDUGFnZUZsYWcg
PyB0aGlzLnRlbXBDb25jYXRVUkwgKyB0aGlzLnVzRWRpdGlvbk1EQ1VybCA6IHRoaXMub1VzRWRp
dGlvbkZvb3Rlci5ocmVmCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB0aGlzLm9FdUVkaXRp
b24gIT09IG51bGwgJiYgZG9qby5jb25uZWN0KHRoaXMub0V1RWRpdGlvbiwgIm9uY2xpY2siLCB0
aGlzLCBmdW5jdGlvbiAoZikgewogICAgICAgICAgICAgICAgZG9qby5zdG9wRXZlbnQoZik7CiAg
ICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24gPSB0aGlzLmlzTURDUGFnZUZsYWcgPyB0aGlz
LnRlbXBDb25jYXRVUkwgKyB0aGlzLmV1RWRpdGlvbk1EQ1VybCA6IHRoaXMub0V1RWRpdGlvbi5o
cmVmOwogICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNNRENQYWdlRmxhZykgewogICAgICAgICAg
ICAgICAgICAgIGRqLnV0aWwuUmVnaW9uLnNldFZpZXdCeVJlZ2lvbigiZXVyb3BlIik7CiAgICAg
ICAgICAgICAgICAgICAgZGoudXRpbC5Db29raWUuc2V0R3JvdXBDb29raWUoIkRKQ09PS0lFIiwg
IkhPTUVQQUdFIiwgIi9ob21lL2V1cm9wZSIsIDM2NSkKICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgIHRoaXMub0luRWRpdGlvbiAhPT0gbnVsbCAmJiBkb2pvLmNv
bm5lY3QodGhpcy5vSW5FZGl0aW9uLCAib25jbGljayIsIHRoaXMsIGZ1bmN0aW9uIChmKSB7CiAg
ICAgICAgICAgICAgICBkb2pvLnN0b3BFdmVudChmKTsKICAgICAgICAgICAgICAgIHdpbmRvdy5s
b2NhdGlvbiA9IHRoaXMuaXNNRENQYWdlRmxhZyA/IHRoaXMudGVtcENvbmNhdFVSTCArIHRoaXMu
aW5FZGl0aW9uTURDVXJsIDogdGhpcy5vSW5FZGl0aW9uLmhyZWY7CiAgICAgICAgICAgICAgICBp
ZiAodGhpcy5pc01EQ1BhZ2VGbGFnKSB7CiAgICAgICAgICAgICAgICAgICAgZGoudXRpbC5SZWdp
b24uc2V0Vmlld0J5UmVnaW9uKCJhc2lhLGluZGlhIik7CiAgICAgICAgICAgICAgICAgICAgZGou
dXRpbC5Db29raWUuc2V0R3JvdXBDb29raWUoIkRKQ09PS0lFIiwgIkhPTUVQQUdFIiwgIi9ob21l
L2luZGlhIiwgMzY1KQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAg
ICAgdGhpcy5vQXNpYUVkaXRpb24gIT09IG51bGwgJiYgZG9qby5jb25uZWN0KHRoaXMub0FzaWFF
ZGl0aW9uLCAib25jbGljayIsIHRoaXMsIGZ1bmN0aW9uIChmKSB7CiAgICAgICAgICAgICAgICBk
b2pvLnN0b3BFdmVudChmKTsKICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IHRoaXMu
aXNNRENQYWdlRmxhZyA/IHRoaXMudGVtcENvbmNhdFVSTCArIHRoaXMuYXNpYUVkaXRpb25NRENV
cmwgOiB0aGlzLm9Bc2lhRWRpdGlvbi5ocmVmOwogICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNN
RENQYWdlRmxhZykgewogICAgICAgICAgICAgICAgICAgIGRqLnV0aWwuUmVnaW9uLnNldFZpZXdC
eVJlZ2lvbigiYXNpYSIpOwogICAgICAgICAgICAgICAgICAgIGRqLnV0aWwuQ29va2llLnNldEdy
b3VwQ29va2llKCJESkNPT0tJRSIsICJIT01FUEFHRSIsICIvaG9tZS9hc2lhIiwgMzY1KQogICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdGhpcy5vQ2hpRWRpdGlv
biAhPT0gbnVsbCAmJiBkb2pvLmNvbm5lY3QodGhpcy5vQ2hpRWRpdGlvbiwgIm9uY2xpY2siLCB0
aGlzLCBmdW5jdGlvbiAoZikgewogICAgICAgICAgICAgICAgZG9qby5zdG9wRXZlbnQoZik7CiAg
ICAgICAgICAgICAgICB3aW5kb3cub3Blbih0aGlzLm9DaGlFZGl0aW9uLmhyZWYpCiAgICAgICAg
ICAgIH0pOwogICAgICAgICAgICB0aGlzLm9KcG5FZGl0aW9uICE9PSBudWxsICYmIGRvam8uY29u
bmVjdCh0aGlzLm9KcG5FZGl0aW9uLCAib25jbGljayIsIHRoaXMsIGZ1bmN0aW9uIChmKSB7CiAg
ICAgICAgICAgICAgICBkb2pvLnN0b3BFdmVudChmKTsKICAgICAgICAgICAgICAgIHdpbmRvdy5v
cGVuKHRoaXMub0pwbkVkaXRpb24uaHJlZikKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHRo
aXMub1NwYUVkaXRpb24gIT09IG51bGwgJiYgZG9qby5jb25uZWN0KHRoaXMub1NwYUVkaXRpb24s
ICJvbmNsaWNrIiwgdGhpcywgZnVuY3Rpb24gKGYpIHsKICAgICAgICAgICAgICAgIGRvam8uc3Rv
cEV2ZW50KGYpOwogICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uID0gdGhpcy5vU3BhRWRp
dGlvbi5ocmVmCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB0aGlzLm9Qb3JFZGl0aW9uICE9
PSBudWxsICYmIGRvam8uY29ubmVjdCh0aGlzLm9Qb3JFZGl0aW9uLCAib25jbGljayIsIHRoaXMs
IGZ1bmN0aW9uIChmKSB7CiAgICAgICAgICAgICAgICBkb2pvLnN0b3BFdmVudChmKTsKICAgICAg
ICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IHRoaXMub1BvckVkaXRpb24uaHJlZgogICAgICAg
ICAgICB9KTsKICAgICAgICAgICAgdGhpcy5vc2VjdGlvbkZvb3RlclN1YiAhPT0gbnVsbCAmJiBk
b2pvLmNvbm5lY3QodGhpcy5vc2VjdGlvbkZvb3RlclN1YiwgIm9uY2xpY2siLCB0aGlzLCBmdW5j
dGlvbiAoZikgewogICAgICAgICAgICAgICAgZG9qby5zdG9wRXZlbnQoZik7CiAgICAgICAgICAg
ICAgICB3aW5kb3cubG9jYXRpb24gPSB0aGlzLm9zZWN0aW9uRm9vdGVyU3ViLmhyZWYKICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgIHRoaXMub3NlY3Rpb25Gb290ZXJOb25TdWIgIT09IG51bGwg
JiYgZG9qby5jb25uZWN0KHRoaXMub3NlY3Rpb25Gb290ZXJOb25TdWIsICJvbmNsaWNrIiwgdGhp
cywgZnVuY3Rpb24gKGYpIHsKICAgICAgICAgICAgICAgIGRvam8uc3RvcEV2ZW50KGYpOwogICAg
ICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uID0gdGhpcy5vc2VjdGlvbkZvb3Rlck5vblN1Yi5o
cmVmCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB0aGlzLm9TZWxlY3RlZEVkaXRpb24gPSB0
aGlzLmN1cnJSZWdpb24gPT0gImFzaWEiID8gZG9qby5xdWVyeShoLCB0aGlzLm9IZWFkZXIpWzBd
IDogdGhpcy5jdXJyUmVnaW9uID09ICJhc2lhLGluZGlhIiA/IGRvam8ucXVlcnkoZywgdGhpcy5v
SGVhZGVyKVswXSA6IHRoaXMuY3VyclJlZ2lvbiA9PSAiZXVyb3BlIiA/IGRvam8ucXVlcnkoZSwg
dGhpcy5vSGVhZGVyKVswXSA6IGRvam8ucXVlcnkoZCwgdGhpcy5vSGVhZGVyKVswXTsKICAgICAg
ICAgICAgZG9qby5hZGRDbGFzcyh0aGlzLm9TZWxlY3RlZEVkaXRpb24sICJzZWxlY3RlZCIpOwog
ICAgICAgICAgICB0aGlzLm9Gb3JtRmFjdG9yQ29udGFpbmVyID0gZG9qby5ieUlkKCJmb3JtRmFj
dG9yQ29udGFpbmVyIik7CiAgICAgICAgICAgIHRoaXMub0xvY0Ryb3BEb3duQ29udGFpbmVyID0g
ZG9qby5ieUlkKCJsb2NOYXZDb250YWluZXIiKTsKICAgICAgICAgICAgdGhpcy5vTG9jUG9wdXBD
b250YWluZXIgPSBkb2pvLmJ5SWQoInBvcHVwQ29udGFpbmVyIik7CiAgICAgICAgICAgIGlmICh0
aGlzLm9Mb2NEcm9wRG93bkNvbnRhaW5lciAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgdmFy
IGkgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub0xvY1RvZ2ds
ZSA9IGRvam8uYnlJZCgibG9jX3RvZ2dsZSIpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAo
ZG9qby5oYXNDbGFzcyh0aGlzLm9Mb2NUb2dnbGUsIGIpKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkb2pvLnJlbW92ZUNsYXNzKHRoaXMub0xvY1RvZ2dsZSwgYik7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkb2pvLmFkZENsYXNzKHRoaXMub0xvY1RvZ2dsZSwgYykKICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkb2pvLmhhc0NsYXNzKHRoaXMub0xvY1RvZ2ds
ZSwgYykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvam8ucmVtb3ZlQ2xhc3ModGhp
cy5vTG9jVG9nZ2xlLCBjKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvam8uYWRkQ2xh
c3ModGhpcy5vTG9jVG9nZ2xlLCBiKQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIGRvam8uY29ubmVjdCh0aGlzLm9Mb2NhdGlv
bk5hdiwgIm9uY2xpY2siLCB0aGlzLCBmdW5jdGlvbiAoZikgewogICAgICAgICAgICAgICAgICAg
IGRvam8uc3RvcEV2ZW50KGYpOwogICAgICAgICAgICAgICAgICAgIGkoKQogICAgICAgICAgICAg
ICAgfSk7CiAgICAgICAgICAgICAgICBkb2pvLmNvbm5lY3QoZG9jdW1lbnQsICJvbmNsaWNrIiwg
dGhpcywgZnVuY3Rpb24gKGYpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoZGoudXRpbC5FbGVt
ZW50LmNvbnRhaW5zKHRoaXMub0xvY1BvcHVwQ29udGFpbmVyLCBmLmNsaWVudFgsIGYuY2xpZW50
WSkgPT0gZmFsc2UpIGlmIChkb2pvLmhhc0NsYXNzKHRoaXMub0xvY1RvZ2dsZSwgYykpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgZG9qby5yZW1vdmVDbGFzcyh0aGlzLm9Mb2NUb2dnbGUsIGMp
OwogICAgICAgICAgICAgICAgICAgICAgICBkb2pvLmFkZENsYXNzKHRoaXMub0xvY1RvZ2dsZSwg
YikKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAg
ICAgIHRoaXMub1NlY3Rpb25Gb290ZXJOb25TdWIgPSBkb2pvLmJ5SWQoInNlY3Rpb25Gb290ZXJO
b25TdWIiKTsKICAgICAgICAgICAgICAgIHRoaXMub1NlY3Rpb25Gb290ZXJTdWIgPSBkb2pvLmJ5
SWQoInNlY3Rpb25Gb290ZXJTdWIiKTsKICAgICAgICAgICAgICAgIGRqLnV0aWwuVXNlci5pc0xv
Z2dlZEluKGZ1bmN0aW9uICgpIHt9KQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9KCk7
CmRvam8ucHJvdmlkZSgiZGoubW9kdWxlLmhlYWRlci5sb2dpbiIpOwpkb2pvLnJlcXVpcmUoImRq
LmxhbmciKTsKZG9qby5yZXF1aXJlKCJkai51dGlsLkNvbmZpZyIpOwpkb2pvLnJlcXVpcmUoImRq
LnV0aWwuQ29va2llIik7CmRvam8ucmVxdWlyZSgiZGoudXRpbC5EYXRlIik7CmRvam8ucmVxdWly
ZSgiZGoudXRpbC5SZWdpb24iKTsKZG9qby5yZXF1aXJlKCJkai51dGlsLkVsZW1lbnQiKTsKZG9q
by5yZXF1aXJlKCJkai51dGlsLlVzZXIiKTsKZG9qby5yZXF1aXJlKCJkai5tb2R1bGUuZmFjZWJv
b2suY29ubmVjdCIpOwpkai5tb2R1bGUuaGVhZGVyLmxvZ2luID0gZnVuY3Rpb24gKCkgewogICAg
dmFyIGEgPSB7CiAgICAgICAgSEVBREVSX0NPTlRBSU5FUl9DTEFTUzogIi5oZWFkZXIiLAogICAg
ICAgIFRJTUVTVEFNUF9DTEFTUzogIi5kYXRlIiwKICAgICAgICBXU0pfTE9HT19JRDogIndzakxv
Z28iLAogICAgICAgIFdTSl9MQVJHRV9MT0dPX0NMQVNTTkFNRTogImxvZ29fbGFyZ2UiLAogICAg
ICAgIFdTSl9TTUFMTF9MT0dPX0NMQVNTTkFNRTogImxvZ29fc21hbGwiLAogICAgICAgIENVUlJF
TlRfU1VCU0VDVElPTl9ESVNQTEFZX0NMQVNTOiAiLmN1cnJlbnRTdWJTZWN0aW9uIiwKICAgICAg
ICBHTE9CQUxOQVZfU1VCU0VDVElPTl9FTEVNRU5UX0lEOiAiY3VycmVudEdsb2JhbE5hdlN1YlNl
Y3Rpb24iLAogICAgICAgIFNVQlNDUklCRVJfTE9HSU5fQ0xBU1M6ICIubG9naW4iLAogICAgICAg
IEhFQURFUl9QUk9NT19DTEFTUzogIi5wcm9tbyIsCiAgICAgICAgU1VCU0NSSUJFUl9ERVRBSUxT
X0VMRU1FTlRfSUQ6ICJzdWJzY3JpYmVkVXNlckRldGFpbHNJZCIsCiAgICAgICAgQ09NTVVOSVRZ
X0ZPUlVNU19MSU5LX0NMQVNTOiAiLmNvbW11bml0eUZvcnVtc0xpbmsiLAogICAgICAgIFRPREFZ
U19QQVBFUl9MSU5LX0NMQVNTOiAiLnRvZGF5c1BhcGVyTGluayIsCiAgICAgICAgTU9KX0xJTktf
Q0xBU1M6ICIubXlPbmxpbmVKb3VybmFsTGluayIsCiAgICAgICAgTUVTU0FHRV9DRU5URVJfTElO
S19DTEFTUzogIi5tZXNzYWdlQ2VudGVyTGluayIsCiAgICAgICAgTUVTU0FHRV9DT1VOVF9DTEFT
UzogIi5tZXNzYWdlQ291bnQiLAogICAgICAgIExPR0lOX1VTRVJOQU1FX0VMRU1FTlRfSUQ6ICJs
b2dpbl91c2VybmFtZSIsCiAgICAgICAgTE9HSU5fUEFTU1dPUkRfRUxFTUVOVF9JRDogImxvZ2lu
X3Bhc3N3b3JkIiwKICAgICAgICBMT0dJTl9GT1JNX0lEOiAibG9naW5fZm9ybSIsCiAgICAgICAg
UEFHRV9VUkxfRUxFTUVOVF9JRDogInBhZ2VfdXJsIiwKICAgICAgICBMT0dPVVRfTElOS19FTEVN
RU5UX0lEOiAibG9nb3V0TGluayIsCiAgICAgICAgTE9HSU5fQlVUVE9OX0VMRU1FTlRfSUQ6ICJs
b2dpbl9idXR0b24iLAogICAgICAgIFVTRVJfTkFNRV9FTEVNRU5UX0lEOiAidXNlck5hbWUiLAog
ICAgICAgIFdTSl9MT0dPX0ZBREVfQVBQRUFSX0RVUkFUSU9OOiAiMS4wIiwKICAgICAgICBXU0pf
TE9HT19ERUxBWV9EVVJBVElPTjogIjIwMDAiLAogICAgICAgIExPR0dFRF9JTl9DT01NVU5JVFlf
VVJMOiAiL2NvbW11bml0eSIsCiAgICAgICAgTE9HR0VEX0lOX1RPREFZU19QQVBFUl9VUkw6ICIv
aXRwP21vZD1XU0pfZm9ybWZhY3RvciIsCiAgICAgICAgTE9HR0VEX0lOX1RPREFZU19QQVBFUl9V
UkxfQVNJQTogIi9pdHAvYXNpYT9tb2Q9V1NKX2Zvcm1mYWN0b3IiLAogICAgICAgIExPR0dFRF9J
Tl9UT0RBWVNfUEFQRVJfVVJMX0VVUk9QRTogIi9pdHAvZXVyb3BlP21vZD1XU0pfZm9ybWZhY3Rv
ciIsCiAgICAgICAgTUVTU0FHRV9DRU5URVJfUE9TVF9VUkw6ICIvY29tbXVuaXR5L2ludGVncmF0
aW9uL3VzZXJpbmZvLmh0bWwiLAogICAgICAgIExPR09VVF9VUkw6ICIvc3RhdGljX2h0bWxfZmls
ZXMvbG9nb3V0X2NvbmZpcm1hdGlvbi5odG0iLAogICAgICAgIFNVQlNDUklCRVJfSE9NRVBBR0Vf
UElEOiAiMF8wX1dIXzAwMDEiLAogICAgICAgIE5PTlNVQlNDUklCRVJfSE9NRVBBR0VfUElEOiAi
MF8wX1dIXzAwMDFfcHVibGljIiwKICAgICAgICBBU0lBX1BBR0VfUElEOiAiMF8wX1dQXzIxMDMi
LAogICAgICAgIEVVUk9QRV9QQUdFX1BJRDogIjBfMF9XUF8yMTA0IiwKICAgICAgICBOT05TVUJT
Q1JJQkVSX05FV1NMRVRURVJTX0FMRVJUU19QQUdFX1BJRDogIjVfNjAwNyIsCiAgICAgICAgTk9O
U1VCU0NSSUJFUl9TRUFSQ0hfUEFHRV9QSUQ6ICIzXzA0NjYiLAogICAgICAgIEhPTUVQQUdFX1NV
QlNDUklCRVJfVVJMOiAiLyIsCiAgICAgICAgU0VBUkNIX1BBR0VfU1VCU0NSSUJFUl9VUkw6ICIv
c2VhcmNoIiwKICAgICAgICBUT0RBWVNfUEFQRVJfTElOS19DT05UQUlORVJfQ0xBU1M6ICIudG9k
YXlzUGFwZXJMaW5rQ29udGFpbmVyIiwKICAgICAgICBWSURFT19MSU5LX0NPTlRBSU5FUl9DTEFT
UzogIi52aWRlb0xpbmtDb250YWluZXIiLAogICAgICAgIENPTFVNTlNfTElOS19DT05UQUlORVJf
Q0xBU1M6ICIuY29sdW1uc0xpbmtDb250YWluZXIiLAogICAgICAgIEJMT0dTX0xJTktfQ09OVEFJ
TkVSX0NMQVNTOiAiLmJsb2dzTGlua0NvbnRhaW5lciIsCiAgICAgICAgSU5URVJBQ1RJVkVfR1JB
UEhJQ1NfTElOS19DT05UQUlORVJfQ0xBU1M6ICIuaW50ZXJhY3RpdmVHcmFwaGljc0xpbmtDb250
YWluZXIiLAogICAgICAgIFRPUElDU19MSU5LX0NPTlRBSU5FUl9DTEFTUzogIi50b3BpY3NMaW5r
Q29udGFpbmVyIiwKICAgICAgICBDT01NVU5JVFlfRk9SVU1TX0xJTktfQ09OVEFJTkVSX0NMQVNT
OiAiLmNvbW11bml0eUZvcnVtc0xpbmtDb250YWluZXIiLAogICAgICAgIFRPREFZU19QQVBFUl9Q
SUQ6ICIwXzBfV1BfNDAiLAogICAgICAgIFRPREFZU19QQVBFUl9VU19OT05TVUJfUElEOiAiMl8w
NDMzIiwKICAgICAgICBUT0RBWVNfUEFQRVJfRVVST1BFX05PTlNVQl9QSUQ6ICIyXzA0MzQiLAog
ICAgICAgIFRPREFZU19QQVBFUl9BU0lBX05PTlNVQl9QSUQ6ICIyXzA0MzUiLAogICAgICAgIFRP
REFZU19QQVBFUl9VU19QSUQ6ICIyXzAxMzMiLAogICAgICAgIFRPREFZU19QQVBFUl9FVVJPUEVf
UElEOiAiMl8wMTM0IiwKICAgICAgICBUT0RBWVNfUEFQRVJfQVNJQV9QSUQ6ICIyXzAxMzUiLAog
ICAgICAgIFRPREFZU19QQVBFUl9QQVNUX0VESVRJT05TX1BJRDogIjJfMDIzMyIsCiAgICAgICAg
VE9EQVlTX1BBUEVSX0lOREVYX0JJWl9QSUQ6ICIyXzAxNTYiLAogICAgICAgIFRPREFZU19QQVBF
Ul9JTkRFWF9QRU9QTEVfUElEOiAiMl8wMTU1IiwKICAgICAgICBUT0RBWVNfUEFQRVJfQ09SUkVD
VElPTlNfUElEOiAiQ29ycmVjdGlvbnMiLAogICAgICAgIFZJREVPX1BJRDogIjBfMF9XUF8zMDAw
IiwKICAgICAgICBCTE9HU19QSUQ6ICI4XzAwMTkiLAogICAgICAgIENPTFVNTlNfUElEOiAiMl8w
MTQwIiwKICAgICAgICBJTlRFUkFDVElWRV9HUkFQSElDU19QSUQ6ICIwXzBfV1BfMjAwMyIsCiAg
ICAgICAgVE9QSUNTX1BJRDogIjBfMF9XVF8wMDAxIiwKICAgICAgICBORVdTTEVUVEVSU19BTEVS
VFNfU1VCX1BJRDogIjVfNjAwMSIsCiAgICAgICAgTkVXU0xFVFRFUlNfQUxFUlRTX1BVQl9QSUQ6
ICI1XzYwMDMiLAogICAgICAgIE1PSl9MSU5LX1VSTDogIi9wYWdlL215LWpvdXJuYWwtbWFpbi5o
dG1sIiwKICAgICAgICBNRENfTElOS19VUkw6ICIvbWRjL3BhZ2UvbWFya2V0c2RhdGEuaHRtbCIs
CiAgICAgICAgTURDX1BBR0VfUElEOiAiMl8zMDAwIiwKICAgICAgICBDT01NVU5JVFlfSElHSExJ
R0hUX0NPTVBBUkVfVVJMOiAiL2NvbW11bml0eSIsCiAgICAgICAgRk9SVU1TX0hJR0hMSUdIVF9D
T01QQVJFX1VSTDogImZvcnVtcy53c2ouY29tIiwKICAgICAgICBGUkVFX1JFR19DTEFTUzogIi5m
cmVlcmVnIiwKICAgICAgICBMT0NBVElPTl9OQVZfQ0xBU1M6ICIubG9jYXRpb25fbmF2IiwKICAg
ICAgICBMT0NBVElPTl9OQVZfQ09MTEFQU0VEX0NMQVNTTkFNRTogImxvY2F0aW9uX2NvbGxhcHNl
ZCIsCiAgICAgICAgTE9DQVRJT05fTkFWX0VYUEFOREVEX0NMQVNTTkFNRTogImxvY2F0aW9uX2V4
cGFuZGVkIiwKICAgICAgICBVU19FRElUSU9OX0xJTktfQ0xBU1M6ICIubWFwX3VzIiwKICAgICAg
ICBFVV9FRElUSU9OX0xJTktfQ0xBU1M6ICIubWFwX2V1cm9wZSIsCiAgICAgICAgQVNJQV9FRElU
SU9OX0xJTktfQ0xBU1M6ICIubWFwX2FzaWEiLAogICAgICAgIElOX0VESVRJT05fTElOS19DTEFT
UzogIi5tYXBfaW5kaWEiLAogICAgICAgIFVTX0VESVRJT05fTURDX1VSTDogIi9tZGMvcHVibGlj
L3BhZ2UvbWFya2V0c2RhdGEuaHRtbCIsCiAgICAgICAgRVVfRURJVElPTl9NRENfVVJMOiAiL21k
Yy9wdWJsaWMvcGFnZS9tYXJrZXRzZGF0YV9ldXJvcGUuaHRtbCIsCiAgICAgICAgQVNJQV9FRElU
SU9OX01EQ19VUkw6ICIvbWRjL3B1YmxpYy9wYWdlL21hcmtldHNkYXRhX2FzaWEuaHRtbCIsCiAg
ICAgICAgSU5fRURJVElPTl9NRENfVVJMOiAiL21kYy9wdWJsaWMvcGFnZS9tYXJrZXRzZGF0YV9h
c2lhLmh0bWwiLAogICAgICAgIE1EQ19DT01QQVJFX1VSTDogIi9tZGMvIiwKICAgICAgICBGT09U
RVJfQ09OVEFJTkVSX0NMQVNTOiAiLnBhZ2Vmb290ZXIiLAogICAgICAgIEdPX1BST19IT09LOiAi
Z29wcm9ob29rIiwKICAgICAgICBHT19QUk9fSE9PS19SRUdJT046IFsiYWxsIl0KICAgIH07CiAg
ICByZXR1cm4gewogICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uIChiKSB7CiAgICAgICAgICAg
IHRoaXMuY2ZnID0gZGoubGFuZy5jbG9uZU1peGluKGEsIGIpOwogICAgICAgICAgICB0aGlzLm9I
ZWFkZXIgPSBkb2pvLnF1ZXJ5KHRoaXMuY2ZnLkhFQURFUl9DT05UQUlORVJfQ0xBU1MpWzBdOwog
ICAgICAgICAgICB0aGlzLmN1cnJSZWdpb24gPSBkai51dGlsLlJlZ2lvbi5nZXRWaWV3QnlSZWdp
b24oKTsKICAgICAgICAgICAgdGhpcy5jb25jYXRVUkwgPSAiIjsKICAgICAgICAgICAgdGhpcy5z
dWJzY3JpYmVyTG9naW5Jbml0KCk7CiAgICAgICAgICAgIHRoaXMuZGlzcGxheUdvUHJvKCk7CiAg
ICAgICAgICAgIHRoaXMuY29uY2F0VVJMID0gdHlwZW9mIGdjRG9tYWluICE9PSAidW5kZWZpbmVk
IiAmJiBnY0RvbWFpbiAhPT0gbnVsbCAmJiBnY0RvbWFpbiAhPT0gIiIgPyAiaHR0cDovLyIgKyBn
Y0RvbWFpbiA6ICJodHRwOi8vIiArIGRvY3VtZW50LmRvbWFpbgogICAgICAgIH0sCiAgICAgICAg
c3Vic2NyaWJlckxvZ2luSW5pdDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgYiA9IHRo
aXM7CiAgICAgICAgICAgIGRqLnV0aWwuVXNlci5pc0xvZ2dlZEluKGZ1bmN0aW9uIChjKSB7CiAg
ICAgICAgICAgICAgICBpZiAoYykgewogICAgICAgICAgICAgICAgICAgIGIuZGlzcGxheVN1YnNj
cmliZXJEZXRhaWxzKCk7CiAgICAgICAgICAgICAgICAgICAgYi5zZXR1cExvZ291dCgpCiAgICAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGIuc2V0dXBMb2dpbigpOwog
ICAgICAgICAgICAgICAgICAgIGIub1N1YnNjcmliZXJMb2dpbiA9IGRvam8ucXVlcnkoYi5jZmcu
U1VCU0NSSUJFUl9MT0dJTl9DTEFTUywgYi5vSGVhZGVyKVswXTsKICAgICAgICAgICAgICAgICAg
ICBjID0gZG9qby5xdWVyeSgiLmxvZ2luX21vZHVsZSIsIGIub1N1YnNjcmliZXJMb2dpbilbMF07
CiAgICAgICAgICAgICAgICAgICAgZG9qby5zdHlsZShjLCB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIGRpc3BsYXk6ICJibG9jayIKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAg
ICAgICAgICBkb2pvLnN0eWxlKGIub1N1YnNjcmliZXJMb2dpbiwgewogICAgICAgICAgICAgICAg
ICAgICAgICBkaXNwbGF5OiAiYmxvY2siCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAg
ICAgICAgICAgICAgYi5vSGVhZGVyUHJvbW8gPSBkb2pvLnF1ZXJ5KGIuY2ZnLkhFQURFUl9QUk9N
T19DTEFTUywgYi5vSGVhZGVyKVswXTsKICAgICAgICAgICAgICAgICAgICBkb2pvLnN0eWxlKGIu
b0hlYWRlclByb21vLCB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICJibG9jayIK
ICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KQog
ICAgICAgIH0sCiAgICAgICAgZGlzcGxheUdvUHJvOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAg
IHZhciBiID0gdGhpczsKICAgICAgICAgICAgZGoudXRpbC5Vc2VyLmlzU3ViTG9nZ2VkSW4oZnVu
Y3Rpb24gKGMpIHsKICAgICAgICAgICAgICAgIGlmIChjKSB7CiAgICAgICAgICAgICAgICAgICAg
dmFyIGQgPSAtMTsKICAgICAgICAgICAgICAgICAgICBkb2pvLmZvckVhY2goYi5jZmcuR09fUFJP
X0hPT0tfUkVHSU9OLCBmdW5jdGlvbiAoZSwgZykgewogICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoZSA9PT0gYi5jdXJyUmVnaW9uKSBkID0gZwogICAgICAgICAgICAgICAgICAgIH0pOwogICAg
ICAgICAgICAgICAgICAgIGlmIChiLmNmZy5HT19QUk9fSE9PS19SRUdJT05bMF0gPT09ICJhbGwi
IHx8IGQgIT09IC0xKSBkb2pvLnJlbW92ZUNsYXNzKGIuY2ZnLkdPX1BST19IT09LLCAiaGlkZGVu
IikKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSkKICAgICAgICB9LAogICAgICAgIGRp
c3BsYXlTdWJzY3JpYmVyRGV0YWlsczogZnVuY3Rpb24gKCkgewogICAgICAgICAgICBkai51dGls
LlVzZXIucmVuZGVyQ2FsbHNpZ24odGhpcy5jZmcuVVNFUl9OQU1FX0VMRU1FTlRfSUQpOwogICAg
ICAgICAgICB0aGlzLm9NZXNzYWdlQ2VudGVyTGluayA9IGRvam8ucXVlcnkodGhpcy5jZmcuTUVT
U0FHRV9DRU5URVJfTElOS19DTEFTUywgdGhpcy5vSGVhZGVyKVswXTsKICAgICAgICAgICAgdmFy
IGIgPSB0aGlzOwogICAgICAgICAgICBkai51dGlsLlVzZXIuaXNTdWJMb2dnZWRJbihmdW5jdGlv
biAoYykgewogICAgICAgICAgICAgICAgaWYgKGMpIGIuc2V0dXBNZXNzYWdlQ2VudGVyKCk7CiAg
ICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBiLnNldFVwTUpMaW5rc0Zv
clJlZygpOwogICAgICAgICAgICAgICAgICAgIGRvam8uc3R5bGUoYi5vTWVzc2FnZUNlbnRlckxp
bmssIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogIm5vbmUiCiAgICAgICAgICAg
ICAgICAgICAgfSkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAg
IHRoaXMub1N1YnNjcmliZXJEZXRhaWxzID0gZG9qby5ieUlkKHRoaXMuY2ZnLlNVQlNDUklCRVJf
REVUQUlMU19FTEVNRU5UX0lEKTsKICAgICAgICAgICAgZG9qby5yZW1vdmVDbGFzcyh0aGlzLm9T
dWJzY3JpYmVyRGV0YWlscywgImhpZGRlbiIpCiAgICAgICAgfSwKICAgICAgICBzZXRVcE1KTGlu
a3NGb3JSZWc6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhpcy5vRm9vdGVyID0gZG9qby5x
dWVyeSh0aGlzLmNmZy5GT09URVJfQ09OVEFJTkVSX0NMQVNTKVswXTsKICAgICAgICAgICAgdmFy
IGIgPSB0aGlzLmNmZy5NT0pfTElOS19VUkwsCiAgICAgICAgICAgICAgICBjID0gdGhpcy5jZmcu
TU9KX0xJTktfQ0xBU1M7CiAgICAgICAgICAgIHRoaXMub01vakxpbmtIZWFkZXIgPSBkb2pvLnF1
ZXJ5KGMsIHRoaXMub0hlYWRlcilbMF07CiAgICAgICAgICAgIHRoaXMub01vakxpbmtGb290ZXIg
PSBkb2pvLnF1ZXJ5KGMsIHRoaXMub0Zvb3RlcilbMF07CiAgICAgICAgICAgIGlmICh0eXBlb2Yg
Z2NEb21haW4gIT09ICJ1bmRlZmluZWQiICYmIGdjRG9tYWluICE9PSBudWxsICYmIGdjRG9tYWlu
ICE9PSAiIikgewogICAgICAgICAgICAgICAgdGhpcy5vTW9qTGlua0hlYWRlci5ocmVmID0gImh0
dHA6Ly8iICsgZ2NEb21haW4gKyBiOwogICAgICAgICAgICAgICAgdGhpcy5vTW9qTGlua0Zvb3Rl
ci5ocmVmID0gImh0dHA6Ly8iICsgZ2NEb21haW4gKyBiCiAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICB0aGlzLm9Nb2pMaW5rSGVhZGVyLmhyZWYgPSBiOwogICAgICAgICAgICAg
ICAgdGhpcy5vTW9qTGlua0Zvb3Rlci5ocmVmID0gYgogICAgICAgICAgICB9CiAgICAgICAgfSwK
ICAgICAgICBzZXR1cFN1YnNjcmliZXJMaW5rczogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB0
aGlzLm9Ub2RheXNQYXBlckxpbmsgPSBkb2pvLnF1ZXJ5KHRoaXMuY2ZnLlRPREFZU19QQVBFUl9M
SU5LX0NMQVNTLCB0aGlzLm9IZWFkZXIpWzBdOwogICAgICAgICAgICB2YXIgYiA9IHRoaXMuY2Zn
LkxPR0dFRF9JTl9UT0RBWVNfUEFQRVJfVVJMLAogICAgICAgICAgICAgICAgYyA9IHRoaXM7CiAg
ICAgICAgICAgIGRqLnV0aWwuVXNlci5pc1N1YkxvZ2dlZEluKGZ1bmN0aW9uIChkKSB7CiAgICAg
ICAgICAgICAgICBpZiAoZCkgYy5vVG9kYXlzUGFwZXJMaW5rLmhyZWYgPSB0eXBlb2YgZ2NEb21h
aW4gIT09ICJ1bmRlZmluZWQiICYmIGdjRG9tYWluICE9PSBudWxsICYmIGdjRG9tYWluICE9PSAi
IiA/ICJodHRwOi8vIiArIGdjRG9tYWluICsgYiA6IGIKICAgICAgICAgICAgfSkKICAgICAgICB9
LAogICAgICAgIHNldHVwTWVzc2FnZUNlbnRlcjogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB0
aGlzLm9NZXNzYWdlQ2VudGVyTGluayA9IGRvam8ucXVlcnkodGhpcy5jZmcuTUVTU0FHRV9DRU5U
RVJfTElOS19DTEFTUywgdGhpcy5vSGVhZGVyKVswXTsKICAgICAgICAgICAgdGhpcy5vTWVzc2Fn
ZUNvdW50ID0gZG9qby5xdWVyeSh0aGlzLmNmZy5NRVNTQUdFX0NPVU5UX0NMQVNTLCB0aGlzLm9I
ZWFkZXIpWzBdOwogICAgICAgICAgICB2YXIgYiA9IHRoaXMsCiAgICAgICAgICAgICAgICBjID0g
ZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoZSA9PSAiLTEiKSBkb2pvLnN0
eWxlKGIub01lc3NhZ2VDZW50ZXJMaW5rLCB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Bs
YXk6ICJub25lIgogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIGVs
c2UgYi5vTWVzc2FnZUNvdW50LmlubmVySFRNTCA9IGUKICAgICAgICAgICAgICAgIH0sCiAgICAg
ICAgICAgICAgICBkID0gZGoudXRpbC5Db29raWUuZ2V0Q29va2llKCJtc2dDb3VudCIpOwogICAg
ICAgICAgICBkID09PSBudWxsID8gZG9qby54aHJQb3N0KHsKICAgICAgICAgICAgICAgIHVybDog
dGhpcy5jZmcuTUVTU0FHRV9DRU5URVJfUE9TVF9VUkwsCiAgICAgICAgICAgICAgICBoYW5kbGVB
czogImpzb24iLAogICAgICAgICAgICAgICAgaGFuZGxlOiBmdW5jdGlvbiAoZSkgewogICAgICAg
ICAgICAgICAgICAgIGQgPSBlLk1lc3NhZ2VzQ291bnQ7CiAgICAgICAgICAgICAgICAgICAgZSA9
IGUuU3RhdHVzOwogICAgICAgICAgICAgICAgICAgIGRqLnV0aWwuQ29va2llLnNldENvb2tpZSgi
bXNnQ291bnQiLCBkLCA1IC8gMjQgLyA2MCk7CiAgICAgICAgICAgICAgICAgICAgZGoudXRpbC5D
b29raWUuc2V0Q29va2llKCJ1c2VyU3RhdHVzIiwgZSwgNSAvIDI0IC8gNjApOwogICAgICAgICAg
ICAgICAgICAgIGMoZCkKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBlcnJvcjog
ZnVuY3Rpb24gKGUsIGcpIHsKICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJFeGNl
cHRpb24gb2NjdXJlZCB3aGlsZSBwb3N0aW5nIHBvc3RpbmcgQWpheCBSZXF1ZXN0OiAlcyIsIGcp
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pIDogYyhkKQogICAgICAgIH0sCiAgICAg
ICAgc2V0dXBMb2dpbjogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB0aGlzLm9Vc2VyTmFtZSA9
IGRvam8uYnlJZCh0aGlzLmNmZy5MT0dJTl9VU0VSTkFNRV9FTEVNRU5UX0lEKTsKICAgICAgICAg
ICAgdGhpcy5vUGFzc3dvcmQgPSBkb2pvLmJ5SWQodGhpcy5jZmcuTE9HSU5fUEFTU1dPUkRfRUxF
TUVOVF9JRCk7CiAgICAgICAgICAgIHRoaXMub0xvZ2luSW1nID0gZG9qby5ieUlkKHRoaXMuY2Zn
LkxPR0lOX0JVVFRPTl9FTEVNRU5UX0lEKTsKICAgICAgICAgICAgdGhpcy5vTG9naW5Gb3JtID0g
ZG9qby5ieUlkKHRoaXMuY2ZnLkxPR0lOX0ZPUk1fSUQpOwogICAgICAgICAgICB0aGlzLm9Mb2dp
bkZvcm0ucmVzZXQoKTsKICAgICAgICAgICAgdGhpcy5vUGFnZVVybCA9IGRvam8uYnlJZCh0aGlz
LmNmZy5QQUdFX1VSTF9FTEVNRU5UX0lEKTsKICAgICAgICAgICAgdmFyIGIgPSB0aGlzOwogICAg
ICAgICAgICBpZiAodGhpcy5vUGFnZVVybCAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgdmFy
IGMgPSB0aGlzLmNmZy5OT05TVUJTQ1JJQkVSX0hPTUVQQUdFX1BJRCwKICAgICAgICAgICAgICAg
ICAgICBkID0gdGhpcy5jZmcuTk9OU1VCU0NSSUJFUl9TRUFSQ0hfUEFHRV9QSUQsCiAgICAgICAg
ICAgICAgICAgICAgZSA9IHRoaXMuY2ZnLk5PTlNVQlNDUklCRVJfTkVXU0xFVFRFUlNfQUxFUlRT
X1BBR0VfUElELAogICAgICAgICAgICAgICAgICAgIGcgPSB0aGlzLmNmZy5NRENfUEFHRV9QSUQs
CiAgICAgICAgICAgICAgICAgICAgaDsKICAgICAgICAgICAgICAgIGggPSB0eXBlb2YgZ2NEb21h
aW4gIT09ICJ1bmRlZmluZWQiICYmIGdjRG9tYWluICE9PSBudWxsICYmIGdjRG9tYWluICE9PSAi
IiA/ICJodHRwOi8vIiArIGdjRG9tYWluIDogImh0dHA6Ly8iICsgZG9jdW1lbnQuZG9tYWluOwog
ICAgICAgICAgICAgICAgdmFyIGs7CiAgICAgICAgICAgICAgICB2YXIgaSA9IGsgPSBkb2pvLmlz
SUUgPyB3aW5kb3cubG9jYXRpb24uaHJlZiA6IGRvY3VtZW50LmxvY2F0aW9uLmhyZWY7CiAgICAg
ICAgICAgICAgICBpZiAodHlwZW9mIHBJRCAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAg
ICAgICAgICBpID0gcElEID09PSBjID8gaCArIHRoaXMuY2ZnLkhPTUVQQUdFX1NVQlNDUklCRVJf
VVJMIDogcElEID09PSBlID8gaCArICIvZW1haWwiIDogcElEID09PSBkID8gaCArIHRoaXMuY2Zn
LlNFQVJDSF9QQUdFX1NVQlNDUklCRVJfVVJMIDogcElEID09PSBnID8gaCArIHRoaXMuY2ZnLk1E
Q19MSU5LX1VSTCA6IGs7CiAgICAgICAgICAgICAgICAgICAgYyA9IGkuaW5kZXhPZigiPyIpICE9
IC0xID8gIiYiIDogIj8iOwogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYyAhPT0gdW5k
ZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBjICsgIl9ub2NhY2hlPSIgKyAo
bmV3IERhdGUpLmdldFRpbWUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkuaW5kZXhP
ZigiIyIpICE9IC0xKSBpID0gaS5yZXBsYWNlKCIjIiwgYyArICIjIik7CiAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UgaSArPSBjCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgIGlmIChkb2pvLmlzSUUpIGRvY3VtZW50LmxvZ2luX2Zvcm0udXJsLnZhbHVlID0gaTsK
ICAgICAgICAgICAgICAgICAgICBlbHNlIHRoaXMub1BhZ2VVcmwudmFsdWUgPSBpCiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAodGhpcy5vVXNlck5hbWUgIT09IG51bGwpIHsK
ICAgICAgICAgICAgICAgICAgICBkb2pvLmNvbm5lY3QodGhpcy5vVXNlck5hbWUsICJvbmZvY3Vz
IiwgdGhpcywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICBkai51dGlsLkZv
cm0uY2xlYXJWYWx1ZSh0aGlzLm9Vc2VyTmFtZSwgIlVzZXIgTmFtZSIpCiAgICAgICAgICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgZG9qby5jb25uZWN0KHRoaXMub1VzZXJOYW1l
LCAib25jbGljayIsIHRoaXMsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ZGoudXRpbC5Gb3JtLmNsZWFyVmFsdWUodGhpcy5vVXNlck5hbWUsICJVc2VyIE5hbWUiKQogICAg
ICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAo
dGhpcy5vUGFzc3dvcmQgIT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICBkb2pvLmNvbm5l
Y3QodGhpcy5vUGFzc3dvcmQsICJvbmZvY3VzIiwgdGhpcywgZnVuY3Rpb24gKCkgewogICAgICAg
ICAgICAgICAgICAgICAgICBkai51dGlsLkZvcm0uY2xlYXJWYWx1ZShiLm9QYXNzd29yZCwgIlBh
c3N3b3JkIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub1Bhc3N3b3JkLnR5cGUgPSAi
cGFzc3dvcmQiCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgZG9q
by5jb25uZWN0KHRoaXMub1Bhc3N3b3JkLCAib25jbGljayIsIHRoaXMsIGZ1bmN0aW9uICgpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgZGoudXRpbC5Gb3JtLmNsZWFyVmFsdWUoYi5vUGFzc3dv
cmQsICJQYXNzd29yZCIpCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAg
ICAgZG9qby5jb25uZWN0KHRoaXMub1Bhc3N3b3JkLCAib25jaGFuZ2UiLCB0aGlzLCBmdW5jdGlv
biAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRqLnV0aWwuRm9ybS5jbGVhclZhbHVlKGIu
b1Bhc3N3b3JkLCAiUGFzc3dvcmQiKQogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICBkb2pvLmlzSUUgJiYgZG9qby5jb25uZWN0KHRoaXMub0xv
Z2luSW1nLCAib25jbGljayIsIHRoaXMsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAg
ICBkb2N1bWVudC5sb2dpbl9mb3JtLnVybC52YWx1ZSA9IGs7CiAgICAgICAgICAgICAgICAgICAg
Y29uc29sZS5sb2coImNvbWluZyBpbiB0byBpbWcgb25saWNrIGluIElFIiArIGspOwogICAgICAg
ICAgICAgICAgICAgIHRoaXMub0xvZ2luRm9ybS5zdWJtaXQoKQogICAgICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgICAgICBkb2pvLmNvbm5lY3QodGhpcy5vUGFzc3dvcmQsICJvbmtleXByZXNz
IiwgdGhpcywgZnVuY3Rpb24gKGYpIHsKICAgICAgICAgICAgICAgICAgICBmID0gZi5rZXlDb2Rl
IHx8IGYud2hpY2g7CiAgICAgICAgICAgICAgICAgICAgaWYgKGRvam8uaXNJRSkgaWYgKGYgPT0g
ZG9qby5rZXlzLkVOVEVSKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmxvZ2lu
X2Zvcm0udXJsLnZhbHVlID0gazsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vTG9naW5G
b3JtLnN1Ym1pdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSkKICAg
ICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgc2V0dXBMb2dvdXQ6IGZ1bmN0aW9uICgpIHsK
ICAgICAgICAgICAgdGhpcy5vTG9nb3V0ID0gZG9qby5ieUlkKHRoaXMuY2ZnLkxPR09VVF9MSU5L
X0VMRU1FTlRfSUQpOwogICAgICAgICAgICB0aGlzLm9Mb2dvdXQgIT09IG51bGwgJiYgZG9qby5j
b25uZWN0KHRoaXMub0xvZ291dCwgIm9uY2xpY2siLCB0aGlzLCBmdW5jdGlvbiAoYikgewogICAg
ICAgICAgICAgICAgZG9qby5zdG9wRXZlbnQoYik7CiAgICAgICAgICAgICAgICBkai51dGlsLkNv
b2tpZS5kZWxldGVDb29raWUoIm1zZ0NvdW50Iik7CiAgICAgICAgICAgICAgICBkai51dGlsLkNv
b2tpZS5kZWxldGVDb29raWUoIkhPTUVQQUdFIiwgdHJ1ZSk7CiAgICAgICAgICAgICAgICBkb2N1
bWVudC5jb29raWUgPSAiSE9NRVBBR0U9O3BhdGg9Lztkb21haW49Lndzai5jb207ZXhwaXJlcz1U
aHUsIDAxLUphbi0xOTcwIDAwOjAwOjAxIEdNVCI7CiAgICAgICAgICAgICAgICBpZiAodHlwZW9m
IGRqLm1vZHVsZS5mYWNlYm9vay5jb25uZWN0LmxvZ291dCA9PSAiZnVuY3Rpb24iICYmIEZCLmdl
dFNlc3Npb24oKSkgZGoubW9kdWxlLmZhY2Vib29rLmNvbm5lY3QubG9nb3V0KGZ1bmN0aW9uICgp
IHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24gPSB0eXBlb2YgZ2NEb21haW4g
IT09ICJ1bmRlZmluZWQiICYmIGdjRG9tYWluICE9PSBudWxsICYmIGdjRG9tYWluICE9PSAiIiA/
ICIvbG9nb3V0P3VybD1odHRwOi8vIiArIGdjRG9tYWluIDogIi9sb2dvdXQiCiAgICAgICAgICAg
ICAgICB9KTsKICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIGNvbnNv
bGUuaW5mbygiRmFjZWJvb2sgQVBJIGlzIG5vdCBhdmFpbGFibGUgd2hlbiBleGVjdXRpbmcgTG9n
b3V0Iik7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uID0gdHlwZW9mIGdjRG9t
YWluICE9PSAidW5kZWZpbmVkIiAmJiBnY0RvbWFpbiAhPT0gbnVsbCAmJiBnY0RvbWFpbiAhPT0g
IiIgPyAiL2xvZ291dD91cmw9aHR0cDovLyIgKyBnY0RvbWFpbiA6ICIvbG9nb3V0IgogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICB9KQogICAgICAgIH0KICAgIH0KfSgpOwpkb2pvLnByb3Zp
ZGUoImRqLm1vZHVsZS5oZWFkZXIuZXhlYy5fY29tbW9uIik7CmRvam8ucmVxdWlyZSgiZGoubW9k
dWxlLmhlYWRlci5zZWN0aW9uTWVudSIpOwpkai5tb2R1bGUuaGVhZGVyLmV4ZWMuX2NvbW1vbiA9
IHsKICAgIGluaXQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICB0aGlzLl9leGVjKHRoaXMucHJlSW5p
dCk7CiAgICAgICAgdGhpcy5fZXhlYyhbZnVuY3Rpb24gKCkgewogICAgICAgICAgICBkai5tb2R1
bGUuaGVhZGVyLnNlY3Rpb25NZW51LmluaXQoKQogICAgICAgIH1dKTsKICAgICAgICB0aGlzLl9l
eGVjKHRoaXMucG9zdEluaXQpCiAgICB9LAogICAgcHJlSW5pdDogW10sCiAgICBwb3N0SW5pdDog
W10sCiAgICBfZXhlYzogZnVuY3Rpb24gKGEpIHsKICAgICAgICBmb3IgKHZhciBiID0gMDsgYiA8
IGEubGVuZ3RoOyBiKyspIHsKICAgICAgICAgICAgdmFyIGMgPSBhW2JdOwogICAgICAgICAgICB0
cnkgewogICAgICAgICAgICAgICAgYy5jYWxsKG51bGwpCiAgICAgICAgICAgIH0gY2F0Y2ggKGQp
IHsKICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkhlYWRlckV4ZWMtIiArIGIgKyAiOiAi
LCBkKQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9Owpkb2pvLnByb3ZpZGUoImRqLm1v
ZHVsZS5oZWFkZXIuZXhlYy5OQV9XU0pfU1VCIik7CmRvam8ucmVxdWlyZSgiZGoubW9kdWxlLmhl
YWRlci5leGVjLl9jb21tb24iKTsKZG9qby5yZXF1aXJlKCJkai53aWRnZXQubmV0d29ya0hhdC5B
dXRvQ29tcGxldGUiKTsKZG9qby5yZXF1aXJlKCJkai5tb2R1bGUuaGVhZGVyLmdsb2JhbEhlYWRl
ciIpOwpkb2pvLnJlcXVpcmUoImRqLm1vZHVsZS5oZWFkZXIubG9jYWxXZWF0aGVyIik7CmRvam8u
cmVxdWlyZSgiZGoubW9kdWxlLmhlYWRlci5sb2dpbiIpOwpkb2pvLnJlcXVpcmUoImRqLm1vZHVs
ZS5mYWNlYm9vay5jb25uZWN0Iik7CmRvam8ucmVxdWlyZSgiZGoud2lkZ2V0LnBhbmVsLlNlbGVj
dERyb3Bkb3duUGFuZWwiKTsKZGoubW9kdWxlLmhlYWRlci5leGVjLk5BX1dTSl9TVUIgPSBkb2pv
LmRlbGVnYXRlKGRqLm1vZHVsZS5oZWFkZXIuZXhlYy5fY29tbW9uLCB7CiAgICBwb3N0SW5pdDog
W2Z1bmN0aW9uICgpIHsKICAgICAgICBkai5tb2R1bGUubmV0d29ya0hhdExvYWRlciA9IG5ldyBk
ai53aWRnZXQubmV0d29ya0hhdC5BdXRvQ29tcGxldGUKICAgIH0sIGZ1bmN0aW9uICgpIHsKICAg
ICAgICBkai5tb2R1bGUuaGVhZGVyLmdsb2JhbEhlYWRlci5pbml0aWFsaXplKCkKICAgIH0sIGZ1
bmN0aW9uICgpIHsKICAgICAgICBkai5tb2R1bGUuaGVhZGVyLmxvY2FsV2VhdGhlci5pbml0KHsK
ICAgICAgICAgICAgZGVmYXVsdExvY2F0aW9uOiAiMTAwMDUiLAogICAgICAgICAgICByZWRpcmVj
dFVybDogImh0dHA6Ly9jb21tZXJjZS53c2ouY29tL2F1dGgvbG9naW4/cm9sZXM9RlJFRVJFRy1C
QVNFJm1nPWNteS13c2oiCiAgICAgICAgfSkKICAgIH0sIGZ1bmN0aW9uICgpIHsKICAgICAgICBk
ai5tb2R1bGUuaGVhZGVyLmxvZ2luLmluaXRpYWxpemUoKQogICAgfSwgZnVuY3Rpb24gKCkgewog
ICAgICAgIGRqLm1vZHVsZS5mYWNlYm9vay5jb25uZWN0LmluaXQoKQogICAgfSwgZnVuY3Rpb24g
KCkgewogICAgICAgIHZhciBhID0gZG9qby5ieUlkKCJNb3JlSW5kdXN0cmllc19Db250YWluZXIi
KTsKICAgICAgICBpZiAoYSkgZGoubW9kdWxlLm1vcmVJbmR1c3RyaWVzID0gbmV3IGRqLndpZGdl
dC5wYW5lbC5TZWxlY3REcm9wZG93blBhbmVsKGEpCiAgICB9XQp9KTsKZG9qby5wcm92aWRlKCJk
ai5tb2R1bGUuaGVhZGVyLmV4ZWMuTkFfV1NKX1BVQiIpOwpkb2pvLnJlcXVpcmUoImRqLm1vZHVs
ZS5oZWFkZXIuZXhlYy5fY29tbW9uIik7CmRvam8ucmVxdWlyZSgiZGoud2lkZ2V0Lm5ldHdvcmtI
YXQuQXV0b0NvbXBsZXRlIik7CmRvam8ucmVxdWlyZSgiZGoubW9kdWxlLmhlYWRlci5nbG9iYWxI
ZWFkZXIiKTsKZG9qby5yZXF1aXJlKCJkai5tb2R1bGUuaGVhZGVyLmxvY2FsV2VhdGhlciIpOwpk
b2pvLnJlcXVpcmUoImRqLndpZGdldC5wYW5lbC5Nb2RhbFBhbmVsIik7CmRvam8ucmVxdWlyZSgi
ZGoubW9kdWxlLmhlYWRlci5sb2dpbiIpOwpkb2pvLnJlcXVpcmUoImRqLm1vZHVsZS5mYWNlYm9v
ay5jb25uZWN0Iik7CmRvam8ucmVxdWlyZSgiZGoud2lkZ2V0LnBhbmVsLlNlbGVjdERyb3Bkb3du
UGFuZWwiKTsKZGoubW9kdWxlLmhlYWRlci5leGVjLk5BX1dTSl9QVUIgPSBkb2pvLmRlbGVnYXRl
KGRqLm1vZHVsZS5oZWFkZXIuZXhlYy5fY29tbW9uLCB7CiAgICBwb3N0SW5pdDogW2Z1bmN0aW9u
ICgpIHsKICAgICAgICBkai5tb2R1bGUubmV0d29ya0hhdExvYWRlciA9IG5ldyBkai53aWRnZXQu
bmV0d29ya0hhdC5BdXRvQ29tcGxldGUKICAgIH0sIGZ1bmN0aW9uICgpIHsKICAgICAgICBkai5t
b2R1bGUuaGVhZGVyLmdsb2JhbEhlYWRlci5pbml0aWFsaXplKCkKICAgIH0sIGZ1bmN0aW9uICgp
IHsKICAgICAgICBkai5tb2R1bGUuaGVhZGVyLmxvY2FsV2VhdGhlci5pbml0KHsKICAgICAgICAg
ICAgZGVmYXVsdExvY2F0aW9uOiAiMTAwMDUiLAogICAgICAgICAgICByZWRpcmVjdFVybDogImh0
dHA6Ly9jb21tZXJjZS53c2ouY29tL2F1dGgvbG9naW4/cm9sZXM9RlJFRVJFRy1CQVNFJm1nPWNt
eS13c2oiCiAgICAgICAgfSkKICAgIH0sIGZ1bmN0aW9uICgpIHsKICAgICAgICBkai5tb2R1bGUu
aW5saW5lTG9naW4gPSBuZXcgZGoud2lkZ2V0LnBhbmVsLk1vZGFsUGFuZWwoImxvZ2luIiwgImxv
Z2luX21vZHVsZSIsIHsKICAgICAgICAgICAgb3Blbk1vZGFsUGFuZWxFdmVudDogImNsaWNrIiwK
ICAgICAgICAgICAgY2xvc2VNb2RhbFBhbmVsRXZlbnQ6ICJibHVyIiwKICAgICAgICAgICAgY2xv
c2VNb2RhbFBhbmVsQnV0dG9uU2VsZWN0b3I6ICIuY2xvc2VMb2dpbiIsCiAgICAgICAgICAgIGNs
b3NlTW9kYWxQYW5lbEV2ZW50Rm9yQnV0dG9uU2VsZWN0b3I6ICJjbGljayIKICAgICAgICB9KQog
ICAgfSwgZnVuY3Rpb24gKCkgewogICAgICAgIGRqLm1vZHVsZS5oZWFkZXIubG9naW4uaW5pdGlh
bGl6ZSgpCiAgICB9LCBmdW5jdGlvbiAoKSB7CiAgICAgICAgZGoubW9kdWxlLmZhY2Vib29rLmNv
bm5lY3QuaW5pdCgpCiAgICB9LCBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGEgPSBkb2pvLmJ5
SWQoIk1vcmVJbmR1c3RyaWVzX0NvbnRhaW5lciIpOwogICAgICAgIGlmIChhKSBkai5tb2R1bGUu
bW9yZUluZHVzdHJpZXMgPSBuZXcgZGoud2lkZ2V0LnBhbmVsLlNlbGVjdERyb3Bkb3duUGFuZWwo
YSkKICAgIH1dCn0pOwpkb2pvLnByb3ZpZGUoImRqLm1vZHVsZS5oZWFkZXIuZXhlYy5OQV9XU0pf
UkVHIik7CmRvam8ucmVxdWlyZSgiZGoubW9kdWxlLmhlYWRlci5leGVjLk5BX1dTSl9TVUIiKTsK
ZGoubW9kdWxlLmhlYWRlci5leGVjLk5BX1dTSl9SRUcgPSBkb2pvLmRlbGVnYXRlKGRqLm1vZHVs
ZS5oZWFkZXIuZXhlYy5OQV9XU0pfU1VCLCB7fSk7CmRvam8ucHJvdmlkZSgiZGoubW9kdWxlLmlQ
YWRBcHBQcm9tb0xvYWRlciIpOwpkai5tb2R1bGUuaVBhZEFwcFByb21vTG9hZGVyID0gewogICAg
aW5pdDogZnVuY3Rpb24gKCkgewogICAgICAgIGlmICghdGhpcy5faXNJcGFkKCkpIHsKICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB2YXIgZCA9IGRvam87CiAgICAgICAgZC5y
ZXF1aXJlKCJkanNjcmlwdC5yZXF1aXJlLmRqX21vZHVsZV9pUGFkQXBwUHJvbW8udmVyc2lvbi4x
Iik7CiAgICAgICAgZC5hZGRPbkxvYWQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICBkai5tb2R1
bGUuaVBhZEFwcFByb21vLmluaXQoKTsKICAgICAgICB9KTsKICAgIH0sCiAgICBfaXNJcGFkOiBm
dW5jdGlvbiAoKSB7CiAgICAgICAgcmV0dXJuIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9p
UGFkL2kpICE9PSBudWxsKTsKICAgIH0KfTsKZG9qby5wcm92aWRlKCJkai51dGlsLmRvdWJsZWNs
aWNrIik7CmRqLnV0aWwuZG91YmxlY2xpY2sgPSB7CiAgICBjcmVhdGVUcmFja2luZ1BpeGVsOiBm
dW5jdGlvbiAodXNlckNvbmYpIHsKICAgICAgICB2YXIgY29uZiA9IHsKICAgICAgICAgICAgY29u
dGFpbmVyOiAiIiwKICAgICAgICAgICAgc291cmNlOiAiIiwKICAgICAgICAgICAgdHlwZTogIiIs
CiAgICAgICAgICAgIGNhdGVnb3J5OiAiIiwKICAgICAgICAgICAgdXJsOiAiIiwKICAgICAgICAg
ICAgdHJhY2tpbmdUeXBlOiAiaWZyYW1lIgogICAgICAgIH07CiAgICAgICAgZG9qby5taXhpbihj
b25mLCB1c2VyQ29uZik7CiAgICAgICAgdmFyIGF4ZWwgPSBNYXRoLnJhbmRvbSgpICsgIiI7CiAg
ICAgICAgdmFyIGEgPSBheGVsICogMTAwMDAwMDAwMDAwMDA7CiAgICAgICAgaWYgKGNvbmYuY29u
dGFpbmVyID09PSAiIikgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKCJ7ZGoudXRpbC5kb3Vi
bGVjbGlja30gLSBjb250YWluZXIgY2Fubm90IGJlIG51bGwgb3IgZW1wdHkiKTsKICAgICAgICB9
CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgaWYgKGNvbmYudHJhY2tpbmdUeXBlID09ICJpZnJh
bWUiKSB7CiAgICAgICAgICAgICAgICBkb2pvLmNyZWF0ZSgiaWZyYW1lIiwgewogICAgICAgICAg
ICAgICAgICAgIHNyYzogY29uZi51cmwgKyAiO3NyYz0iICsgY29uZi5zb3VyY2UgKyAiO3R5cGU9
IiArIGNvbmYudHlwZSArICI7Y2F0PSIgKyBjb25mLmNhdGVnb3J5ICsgIjtvcmQ9IiArIGEgKyAi
PyIsCiAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICIxIiwKICAgICAgICAgICAgICAgICAgICBo
ZWlnaHQ6ICIxIiwKICAgICAgICAgICAgICAgICAgICBmcmFtZWJvcmRlcjogIjAiCiAgICAgICAg
ICAgICAgICB9LCBjb25mLmNvbnRhaW5lcik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICBkb2pvLmNyZWF0ZSgiaW1nIiwgewogICAgICAgICAgICAgICAgICAgIHNyYzogY29u
Zi51cmwgKyAiO3NyYz0iICsgY29uZi5zb3VyY2UgKyAiO3R5cGU9IiArIGNvbmYudHlwZSArICI7
Y2F0PSIgKyBjb25mLmNhdGVnb3J5ICsgIjtvcmQ9IiArIGEgKyAiPyIsCiAgICAgICAgICAgICAg
ICAgICAgd2lkdGg6ICIxIiwKICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICIxIiwKICAgICAg
ICAgICAgICAgICAgICBib3JkZXI6ICIwIiwKICAgICAgICAgICAgICAgICAgICBhbHQ6ICIiCiAg
ICAgICAgICAgICAgICB9LCBjb25mLmNvbnRhaW5lcik7CiAgICAgICAgICAgIH0KICAgICAgICB9
IGNhdGNoIChlKSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIntkai51dGlsLmRvdWJsZWNs
aWNrfSAtIENvdWxkIG5vdCBjcmVhdGUgcGl4ZWwiKTsKICAgICAgICAgICAgY29uc29sZS5sb2co
ZSk7CiAgICAgICAgfQogICAgfQp9Ow==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90629</attachid>
            <date>2011-04-21 16:24:34 -0700</date>
            <delta_ts>2011-04-21 19:01:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-59053-20110421162433.patch</filename>
            <type>text/plain</type>
            <size>4683</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODQ1MTcKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA3ZjA3MGQxZTI3ZGYxOTEyMjA5ZjU1
ZDNjNGI0YjMzODc0MWI0NWYxLi44NWM5ODMxYTk3ODM5Mzc3ZWYzNWFlMzQzYjlkZWUxZTBjOWJl
MTUxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDQtMjEgIERpbWl0cmkgR2xhemtvdiAg
PGRnbGF6a292QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBSRUdSRVNTSU9OIChyODMzODYpOiBUeXBpbmcgaW4gV1NKLmNvbSBz
ZWFyY2ggZmllbGQgZG9lc24ndCBjbGVhciBwbGFjZWhvbGRlciB0ZXh0CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01OTA1MworCisgICAgICAgICogZmFz
dC9ldmVudHMvc2hhZG93LWJvdW5kYXJ5LWNyb3NzaW5nLWV4cGVjdGVkLnR4dDogVXBkYXRlZCBl
eHBlY3RlZCByZXN1bHRzLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3NoYWRvdy1ib3VuZGFyeS1j
cm9zc2luZy5odG1sOiBBZGRlZCBuZXcgc3ViLXRlc3QuCisKIDIwMTEtMDQtMjAgIERpbWl0cmkg
R2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBL
ZW50IFRhbXVyYS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NoYWRvdy1i
b3VuZGFyeS1jcm9zc2luZy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9z
aGFkb3ctYm91bmRhcnktY3Jvc3NpbmctZXhwZWN0ZWQudHh0CmluZGV4IGJhMjdhZWI4NDA2OTNl
YjFiNWYyNzNiYmEzOGJiZDU4MGZmMTU4N2YuLmY5YjBjZmMwYjg5YjExMmRhNTQ1NTFhMjlkY2Zh
ZWJlYTc2MDM5NmYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3NoYWRvdy1i
b3VuZGFyeS1jcm9zc2luZy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvc2hhZG93LWJvdW5kYXJ5LWNyb3NzaW5nLWV4cGVjdGVkLnR4dApAQCAtNSw2ICs1LDcgQEAg
U2VlIGJ1ZyA0NjAxNSBmb3IgZGV0YWlscy4KIE11dGF0aW9uIGV2ZW50cyBzaG91bGQgbm90IHBy
b3BhZ2F0ZSBvdXQgb2YgdGhlIHNoYWRvdyBET006IFBBU1MKIFRoZSBzZWxlY3RzdGFydCBldmVu
dCBzaG91bGQgbm90IHByb3BhZ2F0ZSBvdXQgb2YgdGhlIHNoYWRvdyBET006IFBBU1MKIFRoZSBt
b3VzZW92ZXIvbW91c2VvdXQgZXZlbnQgYmV0d2VlbiB0d28gZWxlbWVudHMgaW5zaWRlIHRoZSBz
YW1lIHNoYWRvdyBzdWJ0cmVlIHNob3VsZCBub3QgcHJvcGFnYXRlIG91dCBvZiB0aGUgc2hhZG93
IERPTTogUEFTUworVGhlIG1vdXNlb3Zlci9tb3VzZW91dCBldmVudCBvbiBhIHNoYWRvdyBzdWJ0
cmVlIGhvc3Qgc2hvdWxkIHByb3BhZ2F0ZSBvdXQgb2YgdGhlIHNoYWRvdyBET006IFBBU1MKIExh
YmVsIHNob3VsZCBsb29rIGJleW9uZCBzaGFkb3cgYm91bmRhcnkgdG8gZGV0ZWN0IGlmIGl0IGVu
Y2xvc2VzIGl0cyBhc3NvY2lhdGVkIGVsZW1lbnQ6IFBBU1MKIEV2ZW50cyBmb3IgZGVmYXVsdCBl
dmVudCBoYW5kbGVyIHNob3VsZCBub3QgYmUgcmV0YXJnZXRlZDogUEFTUwogRXZlbnQncyByZWxh
dGVkVGFyZ2V0IHNob3VsZCBiZSByZXRhcmdldGVkOiBQQVNTCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy9zaGFkb3ctYm91bmRhcnktY3Jvc3NpbmcuaHRtbCBiL0xheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL3NoYWRvdy1ib3VuZGFyeS1jcm9zc2luZy5odG1sCmluZGV4IGE2OTBk
OWFmNDIxMGMzZWEzZDA5YjRlMTgwZjg5YTExZDg1M2NhNjYuLjdlMTgyZWFkY2Q0YjQyYWYwMjIw
ZWJjMDAwOTMxMmNjMDNkMzg5YWIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L3NoYWRvdy1ib3VuZGFyeS1jcm9zc2luZy5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZl
bnRzL3NoYWRvdy1ib3VuZGFyeS1jcm9zc2luZy5odG1sCkBAIC0xMTQsNiArMTE0LDI0IEBAIHZh
ciB0ZXN0cyA9IHsKICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCdt
b3VzZW91dCcsIGNvdW50RXZlbnREaXNwYXRjaCwgZmFsc2UpOwogICAgICAgICBmaWxlSW5wdXQu
cGFyZW50Tm9kZS5yZW1vdmVDaGlsZChmaWxlSW5wdXQpOwogICAgIH0sCisgICAgbW91c2VPdmVy
T25Ib3N0OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgY291bnQgPSAwOworICAgICAg
ICB2YXIgaW5wdXQgPSBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2lucHV0JykpOworICAgICAgICB2YXIgY291bnRFdmVudERpc3BhdGNoID0gZnVuY3Rp
b24oKQorICAgICAgICB7CisgICAgICAgICAgICBjb3VudCsrOworICAgICAgICB9CisKKyAgICAg
ICAgbW92ZU92ZXIoZG9jdW1lbnQuYm9keSk7CisgICAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVu
ZXIoJ21vdXNlb3ZlcicsIGNvdW50RXZlbnREaXNwYXRjaCwgZmFsc2UpOworICAgICAgICBtb3Zl
T3ZlcihpbnB1dCk7CisKKyAgICAgICAgbG9nKCJUaGUgbW91c2VvdmVyL21vdXNlb3V0IGV2ZW50
IG9uIGEgc2hhZG93IHN1YnRyZWUgaG9zdCBzaG91bGQgcHJvcGFnYXRlIG91dCBvZiB0aGUgc2hh
ZG93IERPTSIsIGNvdW50ID09IDEpOworCisgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZl
bnRMaXN0ZW5lcignbW91c2VvdmVyJywgY291bnRFdmVudERpc3BhdGNoLCBmYWxzZSk7CisgICAg
ICAgIGlucHV0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaW5wdXQpOworICAgIH0sCiAgICAgbGFi
ZWxTeW50aGV0aWNDbGljazogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdmFyIGNvdW50ID0g
MDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCA3ODUxMjIxZmJjNzIxZDAzMDA2YzExZDVkZTAwYTQ1MWY1YzQ4ZmJl
Li4zMTIyOTJlZmNmMjdlMTQ1YzhkMjBmOTI2OTk4YTlhODFkYjVkOWJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMTEtMDQtMjEgIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNo
cm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBSRUdSRVNTSU9OIChyODMzODYpOiBUeXBpbmcgaW4gV1NKLmNvbSBzZWFyY2ggZmllbGQg
ZG9lc24ndCBjbGVhciBwbGFjZWhvbGRlciB0ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01OTA1MworCisgICAgICAgIFR1cm5zIG91dCwgdGhlIHJl
bGF0ZWRUYXJnZXQgb2YgYW4gZXZlbnQgY291bGQgYmUgYWxzbyBhbiBhbmNlc3RvciBvZiBhbiBl
dmVudCwKKyAgICAgICAgbm90IGp1c3QgaXRzIHBhcmVudC4gRHVoLgorCisgICAgICAgICogZG9t
L0V2ZW50RGlzcGF0Y2hlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6
OmFkanVzdFRvU2hhZG93Qm91bmRhcmllcyk6IENoYW5nZWQgdG8gdXNlIHNoYWRvd0hvc3QKKyAg
ICAgICAgICAgIGV4cGxpY2l0bHkuCisKIDIwMTEtMDQtMjAgIERpbWl0cmkgR2xhemtvdiAgPGRn
bGF6a292QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW50IFRhbXVyYS4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKaW5kZXggOWQ0NWEyNjgxNjRlNGIx
ZmRkZGM5ZGZjYjczOGRkODU5ODhlNDY1NC4uNTBkNDk5N2E2ZTc2YmYxYTA5YTZhOTgzNGE2MTU3
ZjYwOWMzZmVjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAKQEAgLTE2
Myw4ICsxNjMsOCBAQCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBFdmVudERpc3BhdGNoZXI6OmFk
anVzdFRvU2hhZG93Qm91bmRhcmllcyhQYXNzUmVmUHRyPE5vZAogICAgIH0KIAogICAgIGlmICgh
ZGl2ZXJnZWQpIHsKLSAgICAgICAgLy8gVGhlIHJlbGF0ZWRUYXJnZXQgaXMgYSBwYXJlbnQgb3Ig
c2hhZG93SG9zdCBvZiB0aGUgdGFyZ2V0LgotICAgICAgICBpZiAoaXNTaGFkb3dSb290T3JTVkdT
aGFkb3dSb290KG1fbm9kZS5nZXQoKSkpCisgICAgICAgIC8vIFRoZSByZWxhdGVkVGFyZ2V0IGlz
IGFuIGFuY2VzdG9yIG9yIHNoYWRvd0hvc3Qgb2YgdGhlIHRhcmdldC4KKyAgICAgICAgaWYgKG1f
bm9kZS0+c2hhZG93SG9zdCgpID09IHJlbGF0ZWRUYXJnZXQuZ2V0KCkpCiAgICAgICAgICAgICBs
b3dlc3RDb21tb25Cb3VuZGFyeSA9IG1fYW5jZXN0b3JzLmJlZ2luKCk7CiAgICAgfSBlbHNlIGlm
ICgoKmZpcnN0RGl2ZXJnZW50Qm91bmRhcnkpID09IG1fbm9kZS5nZXQoKSkgewogICAgICAgICAv
LyBTaW5jZSBhbmNlc3RvcnMgZG9lcyBub3QgY29udGFpbiB0YXJnZXQgaXRzZWxmLCB3ZSBtdXN0
IGFjY291bnQK
</data>

          </attachment>
      

    </bug>

</bugzilla>