<?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>32078</bug_id>
          
          <creation_ts>2009-12-02 11:15:27 -0800</creation_ts>
          <short_desc>REGRESSION: Home photo slider is too narrow at http://www.ziprealty.com/</short_desc>
          <delta_ts>2010-10-17 14:01:49 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://www.ziprealty.com/</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adele Peterson">adele</reporter>
          <assigned_to name="Evan Martin">evan</assigned_to>
          <cc>bdakin</cc>
    
    <cc>evan</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>168083</commentid>
    <comment_count>0</comment_count>
      <attachid>44165</attachid>
    <who name="Adele Peterson">adele</who>
    <bug_when>2009-12-02 11:15:27 -0800</bug_when>
    <thetext>Created attachment 44165
beginnings of a reduction

Steps to reproduce

1. Go to  http://www.ziprealty.com/
2. Under the &quot;Search Featured Homes&quot; section, there should be a home photo slider ( with left/right navigation arrows on both sides of the slider) 
3. The slider is functional but is very narrow.

This was caused by http://trac.webkit.org/changeset/49585, which was part of fixing https://bugs.webkit.org/show_bug.cgi?id=18994

Attaching the beginnings of a reduction, with an alert for debugging.  The problem is related to the fact that marginRight for the &lt;ul&gt; element is -9999970px</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168084</commentid>
    <comment_count>1</comment_count>
    <who name="Adele Peterson">adele</who>
    <bug_when>2009-12-02 11:16:08 -0800</bug_when>
    <thetext>&lt;rdar://problem/7382815&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168092</commentid>
    <comment_count>2</comment_count>
    <who name="Evan Martin">evan</who>
    <bug_when>2009-12-02 11:25:04 -0800</bug_when>
    <thetext>Tears.

I would guess that the problem is related to that I changed the range of valid values, limiting the range.  However, the test includes verifying that the number &quot;98765432198&quot; makes it through ok.  I recall that some of those tests may not pass on some platforms, but I don&apos;t see any platform-specific failures on these tests.  I may be looking in the wrong place though?  (The tests to look at are fast/css/opacity-float and fast/css/large-number-round-trip.)

I am sorry for the trouble!

I am not opposed to a revert of my change, as it is fixing a relatively obscure corner of the code, but I&apos;d like to understand what went wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168094</commentid>
    <comment_count>3</comment_count>
    <who name="Adele Peterson">adele</who>
    <bug_when>2009-12-02 11:27:34 -0800</bug_when>
    <thetext>I don&apos;t think we need to revert right now.  Its fine to investigate first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170995</commentid>
    <comment_count>4</comment_count>
    <who name="Adele Peterson">adele</who>
    <bug_when>2009-12-11 17:02:22 -0800</bug_when>
    <thetext>Any update?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171104</commentid>
    <comment_count>5</comment_count>
    <who name="Evan Martin">evan</who>
    <bug_when>2009-12-12 09:56:49 -0800</bug_when>
    <thetext>Oh, sorry!  I thought you were looking at it.  I am going to be travelling for the next few weeks but I hopefully can find some time for it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171125</commentid>
    <comment_count>6</comment_count>
    <who name="Adele Peterson">adele</who>
    <bug_when>2009-12-12 13:54:44 -0800</bug_when>
    <thetext>I should have been clearer.  I assumed you were going to fix it since you wrote the original change.  Let&apos;s roll out r49585 for now, and you can submit a new patch once you&apos;ve figured out what the issue is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171230</commentid>
    <comment_count>7</comment_count>
      <attachid>44762</attachid>
    <who name="Adele Peterson">adele</who>
    <bug_when>2009-12-13 14:00:03 -0800</bug_when>
    <thetext>Created attachment 44762
patch

I&apos;ll reopen the other bug when this is committed.  One thing I noticed is that the new tests that were added to opacity-float.html didn&apos;t pass in Firefox.  I wonder if the JS library used at this site was just expecting wrong behavior.  Might be something investigate when re-fixing the bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171234</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-13 14:05:14 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 44762 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171248</commentid>
    <comment_count>9</comment_count>
      <attachid>44762</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-12-13 14:52:13 -0800</bug_when>
    <thetext>Comment on attachment 44762
patch

This is missing a changelog, but otherwise is fine. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171252</commentid>
    <comment_count>10</comment_count>
    <who name="Adele Peterson">adele</who>
    <bug_when>2009-12-13 15:00:38 -0800</bug_when>
    <thetext>Committed revision 52071.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171258</commentid>
    <comment_count>11</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-12-13 16:10:37 -0800</bug_when>
    <thetext>I also reopened bug 20674 :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171296</commentid>
    <comment_count>12</comment_count>
    <who name="Adele Peterson">adele</who>
    <bug_when>2009-12-13 23:02:40 -0800</bug_when>
    <thetext>Also committed revision 52081.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171313</commentid>
    <comment_count>13</comment_count>
    <who name="Adele Peterson">adele</who>
    <bug_when>2009-12-14 01:04:04 -0800</bug_when>
    <thetext>Also committed r52083</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171555</commentid>
    <comment_count>14</comment_count>
      <attachid>44820</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-12-14 13:44:23 -0800</bug_when>
    <thetext>Created attachment 44820
More reduced testcase

This testcase runs in Firefox as well, which has the same bug (numbers in scientific notation fail to parse). So I think the site is relying on broken behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171557</commentid>
    <comment_count>15</comment_count>
    <who name="Adele Peterson">adele</who>
    <bug_when>2009-12-14 13:48:31 -0800</bug_when>
    <thetext>Why doesn&apos;t Firefox hit the bug on the live site?  Spoofing as Firefox doesn&apos;t work, so I wonder what kind of detection the site is doing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171561</commentid>
    <comment_count>16</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-12-14 13:54:57 -0800</bug_when>
    <thetext>Firefox has the same behavior as WebKit did before bug 18994 was fixed. So the site is relying on broken behavior in WebKit and Firefox. I don&apos;t think we want to hold back fixing the underlying behavior for this one site.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171721</commentid>
    <comment_count>17</comment_count>
    <who name="Adele Peterson">adele</who>
    <bug_when>2009-12-14 22:20:25 -0800</bug_when>
    <thetext>hmm ok.  We should consider a site-specific hack (not sure what the threshold for that should be), and we should have an evangelism bug for this too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172053</commentid>
    <comment_count>18</comment_count>
    <who name="Adele Peterson">adele</who>
    <bug_when>2009-12-15 14:51:22 -0800</bug_when>
    <thetext>Do any browsers have the right behavior for this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172058</commentid>
    <comment_count>19</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-12-15 15:00:27 -0800</bug_when>
    <thetext>Opera (Mac) seems to read the width as zero, and then clamp it to 32767px. The page ends up rendering correctly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172073</commentid>
    <comment_count>20</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-12-15 15:47:35 -0800</bug_when>
    <thetext>The testcase doesn&apos;t run in IE8, but the CSS inspector shows the width of the element to be 1342177.27px. The page renders correctly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295278</commentid>
    <comment_count>21</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-10-17 14:01:49 -0700</bug_when>
    <thetext>The progression that caused this bug was re-committed in http://trac.webkit.org/changeset/69928, but the site has changed so there&apos;s no need for a workaround.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>44165</attachid>
            <date>2009-12-02 11:15:27 -0800</date>
            <delta_ts>2009-12-02 11:15:27 -0800</delta_ts>
            <desc>beginnings of a reduction</desc>
            <filename>zip.html</filename>
            <type>text/html</type>
            <size>174837</size>
            <attacher name="Adele Peterson">adele</attacher>
            
              <data encoding="base64">PGh0bWw+CjxoZWFkPgo8c3R5bGU+Ci5jYXJvdXNlbC1jb21wb25lbnR7cG9zaXRpb246cmVsYXRp
dmU7b3ZlcmZsb3c6aGlkZGVuO2Rpc3BsYXk6bm9uZTt9Ci5jYXJvdXNlbC1jb21wb25lbnQgdWwu
Y2Fyb3VzZWwtbGlzdHt3aWR0aDoxMDAwMDAwMHB4O3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6
MTt9Ci5jYXJvdXNlbC1jb21wb25lbnQgLmNhcm91c2VsLWxpc3QgbGl7ZmxvYXQ6bGVmdDtsaXN0
LXN0eWxlOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO30KLmNhcm91c2VsLWNvbXBvbmVudCAuY2Fyb3Vz
ZWwtdmVydGljYWwgbGl7bWFyZ2luLWJvdHRvbTowO2Zsb2F0OmxlZnQ7Y2xlYXI6bGVmdDtvdmVy
ZmxvdzpoaWRkZW47ZGlzcGxheTpibG9jazt9Ci5jYXJvdXNlbC1jb21wb25lbnQgLmNhcm91c2Vs
LWNsaXAtcmVnaW9ue292ZXJmbG93OmhpZGRlbjttYXJnaW46MCBhdXRvO3Bvc2l0aW9uOnJlbGF0
aXZlO30KLmNhcm91c2VsLWNvbXBvbmVudHtiYWNrZ3JvdW5kOiNlMmVkZmE7cGFkZGluZzowOy1t
b3otYm9yZGVyLXJhZGl1czo2cHg7Y29sb3I6IzYxOGNiZTt9Ci5jYXJvdXNlbC1jb21wb25lbnQg
dWwuY2Fyb3VzZWwtbGlzdHttYXJnaW46MDtwYWRkaW5nOjA7bGluZS1oZWlnaHQ6MDt9Ci5jYXJv
dXNlbC1jb21wb25lbnQgLmNhcm91c2VsLWxpc3QgbGl7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2lu
OjA7cGFkZGluZzowO2ZvbnQ6MTBweCB2ZXJkYW5hLGFyaWFsLHNhbnMtc2VyaWY7Y29sb3I6IzY2
Njt9ZGl2LmhvckdyYXlSdWxle21hcmdpbi1ib3R0b206MDt9CiNjYXJvdXNlbGJveHt3aWR0aDo5
MzJweDtjbGVhcjpib3RoO21hcmdpbjowIGF1dG8gNXB4IGF1dG87YmFja2dyb3VuZC1jb2xvcjoj
RUZFRkVGO30KI2Nhcm91c2VsY29udGVudGJveHtwYWRkaW5nOjEwcHg7fQojY2Fyb3VzZWxoZHJ7
bWFyZ2luOjA7cGFkZGluZzowO3RleHQtYWxpZ246bGVmdDt9CiNjYXJvdXNlbGhkci1kZXNje21h
cmdpbjowO3BhZGRpbmc6MCAwIDEwcHggMDt0ZXh0LWFsaWduOmxlZnQ7fQouY2Fyb3VzZWxpdGVt
bGVmdHtwYWRkaW5nLXJpZ2h0OjVweDt0ZXh0LWFsaWduOmxlZnQ7fQouY2Fyb3VzZWxpdGVtcmln
aHR7dGV4dC1hbGlnbjpsZWZ0O30KLmNhcm91c2VsaXRlbWxpbmt7dGV4dC1kZWNvcmF0aW9uOm5v
bmU7fQouY2Fyb3VzZWxpdGVtcHJpY2V7Y29sb3I6IzA2MDtmb250LXdlaWdodDpib2xkO30KLmNh
cm91c2VsLWNvbnRhaW5lcntjbGVhcjpib3RoO21hcmdpbjowIDAgMCA1cHg7cGFkZGluZzowO2Jh
Y2tncm91bmQ6I0VGRUZFRjt0ZXh0LWFsaWduOmxlZnQ7fQouY2Fyb3VzZWwtY29tcG9uZW50e2Jh
Y2tncm91bmQ6I0VGRUZFRjtwYWRkaW5nOjAgMCAwIDIwcHg7bWFyZ2luOjA7fQouY2Fyb3VzZWwt
Y29tcG9uZW50IC5jYXJvdXNlbC1jbGlwLXJlZ2lvbnttYXJnaW46MDtiYWNrZ3JvdW5kOiNFRkVG
RUY7fQouY2Fyb3VzZWwtY29tcG9uZW50IC5jYXJvdXNlbC1saXN0IGxpe3dpZHRoOjI2MHB4O21h
cmdpbjowIDAgMCAxMHB4O3BhZGRpbmc6NXB4O2JvcmRlcjoxcHggc29saWQgI0NDQztiYWNrZ3Jv
dW5kOndoaXRlO30KLmNhcm91c2VsLWNvbXBvbmVudCAuY2Fyb3VzZWwtcHJldntwb3NpdGlvbjph
YnNvbHV0ZTt0b3A6NDVweDt6LWluZGV4OjM7Y3Vyc29yOnBvaW50ZXI7bGVmdDowO30KLmNhcm91
c2VsLWNvbXBvbmVudCAuY2Fyb3VzZWwtbmV4dHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NDVweDt6
LWluZGV4OjM7Y3Vyc29yOnBvaW50ZXI7cmlnaHQ6MDt9Cjwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJjYm94d3JhcCIgaWQ9ImNh
cm91c2VsYm94Ij4KICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icmNib3hjb250ZW50Ij4KICAg
ICAgICAgICAgICAgICA8aW1nIGNsYXNzPSJyY3RsIiBzcmM9Ii9pbWFnZXMvZ2xvYmFsL2Nuci1i
bHUtd2h0LXRsLmdpZiIgYWx0PSImbmJzcDsiIHdpZHRoPSI4IiBoZWlnaHQ9IjgiIC8+CiAgICAg
ICAgICAgICAgICAgPGltZyBjbGFzcz0icmN0ciIgc3JjPSIvaW1hZ2VzL2dsb2JhbC9jbnItYmx1
LXdodC10ci5naWYiIGFsdD0iJm5ic3A7IiB3aWR0aD0iOCIgaGVpZ2h0PSI4IiAvPgogICAgICAg
ICAgICAgICAgIDxkaXYgaWQ9ImNhcm91c2VsY29udGVudGJveCI+CiAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgIDxwIGlkPSJjYXJvdXNlbGhkciI+PGEgaHJlZj0iaHR0cDov
L3d3dy56aXByZWFsdHkuY29tL21hcC9mZWF0dXJlZC1ob21lcy91cyIgY2xhc3M9ImZoLWhlYWRl
ciI+U2VhcmNoIEZlYXR1cmVkIEhvbWVzPC9hPjwvcD4KICAgICAgICAgICAgICAgICAgIDxwIGlk
PSJjYXJvdXNlbGhkci1kZXNjIj5TZWFyY2ggb3VyIHJlYWwgZXN0YXRlIGxpc3RpbmdzIGFuZCBm
aW5kIGhvbWVzIGZvciBzYWxlIG5hdGlvbndpZGUuICBNTFMgbGlzdGluZ3MgYXZhaWxhYmxlIGlu
IG1vc3QgYXJlYXMuIDxhIGhyZWY9Imh0dHA6Ly93d3cuemlwcmVhbHR5LmNvbS9tYXAvZmVhdHVy
ZWQtaG9tZXMvdXMiPkNsaWNrIGhlcmU8L2E+IHRvIGdldCBzdGFydGVkLjwvcD4KICAgICAgICAg
ICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcm91c2VsLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJteWNhcm91c2VsIiBjbGFzcz0i
Y2Fyb3VzZWwtY29tcG9uZW50Ij4KICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJj
YXJvdXNlbC1wcmV2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgaWQ9InByZXYtYXJy
b3ciIGNsYXNzPSJsZWZ0LWJ1dHRvbi1pbWFnZSIgc3JjPSJodHRwOi8vd3d3LnppcHJlYWx0eS5j
b20vaW1hZ2VzL2dsb2JhbC9uYXZfbGVmdF9idXR0b25fb2ZmLmdpZiIgYWx0PSJQcmV2aW91cyBC
dXR0b24iLz4KICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAg
ICAgICA8ZGl2IGNsYXNzPSJjYXJvdXNlbC1uZXh0Ij4KICAgICAgICAgICAgICAgICAgICAgICAg
IDxpbWcgaWQ9Im5leHQtYXJyb3ciIGNsYXNzPSJyaWdodC1idXR0b24taW1hZ2UiIHNyYz0iaHR0
cDovL3d3dy56aXByZWFsdHkuY29tL2ltYWdlcy9nbG9iYWwvbmF2X3JpZ2h0X2J1dHRvbi5naWYi
IGFsdD0iTmV4dCBCdXR0b24iLz4KICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAg
ICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJvdXNlbC1jbGlwLXJlZ2lvbiI+CiAgICAg
ICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9ImNhcm91c2VsLWxpc3QiPgogICAgICAgICAg
ICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAg
ICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgPGRp
diBjbGFzcz0icmNzcGMiPiZuYnNwOzwvZGl2PgogICAgICAgICAgICAgICA8L2Rpdj4KICAgICAg
ICAgICAgIDwvZGl2PgogICAgICAgICAgICAgCjxzY3JpcHQ+CmZ1bmN0aW9uIGNsZWFyRmllbGRz
KEIpe3ZhciBDPUIuZWxlbWVudHMubGVuZ3RoOwpmb3IoaT0wOwppPEM7CmkrKyl7dmFyIEE9Qi5l
bGVtZW50c1tpXTsKaWYoQS50eXBlPT0idGV4dCIpe0EudmFsdWU9IiIKfWVsc2V7aWYoQS5uYW1l
PT0iY291bnR5Iil7fWVsc2V7aWYoQS50eXBlPT0iY2hlY2tib3giKXtBLmNoZWNrZWQ9ZmFsc2UK
fWVsc2V7aWYoQS50eXBlPT0icmFkaW8iKXtBLmNoZWNrZWQ9ZmFsc2UKfWVsc2V7aWYoQS50eXBl
PT0idGV4dGFyZWEiKXtBLnZhbHVlPSIiCn1lbHNle2lmKEEudHlwZT09ImhpZGRlbiIpe31lbHNl
e2lmKEEudHlwZT09InBhc3N3b3JkIil7fWVsc2V7aWYoQS50eXBlPT0iaW1hZ2UiKXt9ZWxzZXtp
ZihBLnR5cGU9PSJidXR0b24iKXt9ZWxzZXtpZihBLnR5cGU9PSJyZXNldCIpe31lbHNle2lmKEEu
dHlwZT09InN1Ym1pdCIpe31lbHNle0Euc2VsZWN0ZWRJbmRleD1mYWxzZTsKQS5vcHRpb25zWzBd
LnNlbGVjdGVkPXRydWUKfX19fX19fX19fX19fWZ1bmN0aW9uIG5ld3dpbihCLEEsQyl7aWYoKEE9
PTApJiYoQz09MCkpe3dpbmRvdy5vcGVuKEIsIl9ibGFuayIsImhlaWdodD0iK3NlbGYub3V0ZXJI
ZWlnaHQsIndpZHRoPSIrc2VsZi5vdXRlcldpZHRoKyIscmVzaXphYmxlLHNjcm9sbGJhcnMiKTsK
d2luZG93LmFsZXJ0KCJObyBIZWlnaHQgYW5kIFdpZHRoIFJlY2VpdmVkIikKfWVsc2V7d2luZG93
Lm9wZW4oQiwiX2JsYW5rIiwiaGVpZ2h0PSIrQysiLHdpZHRoPSIrQSsiLHJlc2l6YWJsZSxzY3Jv
bGxiYXJzIikKfX1mdW5jdGlvbiBjaGFuZ2VBbGwoRyxBKXt2YXIgRD1BLm9wdGlvbnNbQS5zZWxl
Y3RlZEluZGV4XS52YWx1ZTsKdmFyIEY9Ry5lbGVtZW50cy5sZW5ndGg7CmZvcih2YXIgRT0wOwpF
PEY7CkUrKyl7aWYoRy5lbGVtZW50c1tFXS50eXBlPT0ic2VsZWN0LW9uZSIpe3ZhciBIPUcuZWxl
bWVudHNbRV07CnZhciBDPUgub3B0aW9ucy5sZW5ndGg7CmZvcih2YXIgQj0wOwpCPEM7CkIrKyl7
aWYoSC5vcHRpb25zW0JdLnZhbHVlPT1EKXtILnNlbGVjdGVkSW5kZXg9Qgp9fX19fWZ1bmN0aW9u
IGNoZWNrRGF0ZXMoQSl7dmFyIEM9QS5lbGVtZW50cy5sZW5ndGg7CmZvcih2YXIgQj0wOwpCPEM7
CkIrKyl7aWYoQS5lbGVtZW50c1tCXS5uYW1lLmluZGV4T2YoIkRhdGUiKT4tMXx8QS5lbGVtZW50
c1tCXS5uYW1lLmluZGV4T2YoImRhdGUiKT4tMSl7aWYoY2hlY2tEYXRlKEEuZWxlbWVudHNbQl0u
dmFsdWUpPT0tMSl7YWxlcnQoIkFsbCBkYXRlcyBtdXN0IGJlIHZhbGlkIGFuZCBpbiBNTS9ERC9Z
WSBmb3JtYXQiKTsKcmV0dXJuKGZhbHNlKQp9fX1BLnN1Ym1pdCgpOwpyZXR1cm4odHJ1ZSkKfWZ1
bmN0aW9uIGNoZWNrRGF0ZShCKXtpZihCPT0iIil7cmV0dXJuKDEpCn1lbHNle3ZhciBDPS9eXGR7
Mn1cLyhcZHsyfSlcL1xkezJ9JC87CnZhciBBPUMuZXhlYyhCKTsKcmV0dXJuKChBIT1udWxsJiYo
QVsxXT09bmV3IERhdGUoQikuZ2V0RGF0ZSgpKSk/MTotMSkKfX1mdW5jdGlvbiBzdHJpY3RDaGVj
a0RhdGVzKEEpe3ZhciBDPUEuZWxlbWVudHMubGVuZ3RoOwpmb3IodmFyIEI9MDsKQjxDOwpCKysp
e2lmKEEuZWxlbWVudHNbQl0ubmFtZS5pbmRleE9mKCJEYXRlIik+LTF8fEEuZWxlbWVudHNbQl0u
bmFtZS5pbmRleE9mKCJkYXRlIik+LTEpe2lmKEEuZWxlbWVudHNbQl0udmFsdWU9PSIiKXthbGVy
dCgiUGxlYXNlIGVudGVyIGRhdGVzIGludG8gdGhlIHJlcXVpcmVkIGZpZWxkcyIpOwpyZXR1cm4g
ZmFsc2UKfWlmKGNoZWNrRGF0ZShBLmVsZW1lbnRzW0JdLnZhbHVlKT09LTEpe2FsZXJ0KCJBbGwg
ZGF0ZXMgbXVzdCBiZSB2YWxpZCBhbmQgaW4gTU0vREQvWVkgZm9ybWF0Iik7CnJldHVybihmYWxz
ZSkKfX19QS5zdWJtaXQoKTsKcmV0dXJuKHRydWUpCn1mdW5jdGlvbiBzdWJtaXRPbmNlKEEpe3Zh
ciBDPUEuZWxlbWVudHMubGVuZ3RoOwpmb3IodmFyIEI9MDsKQjxDOwpCKyspe2lmKEEuZWxlbWVu
dHNbQl0udHlwZT0icmVzZXQifHxBLmVsZW1lbnRzW0JdLnR5cGU9PSJzdWJtaXQiKXtBLmVsZW1l
bnRzW0JdLmRpc2FibGVkPXRydWUKfX19ZnVuY3Rpb24gZW50ZXJDYXRjaGVyKEEpe2lmKEEua2V5
Q29kZT09MTMpe3JldHVybiB0cnVlCn1lbHNle3JldHVybiBmYWxzZQp9fWZ1bmN0aW9uIGJ1aWxk
RGF5cyhBKXtidWlsZERheXMoQSxBLm1vbnRoLEEuZGF5LEEueWVhcikKfWZ1bmN0aW9uIGJ1aWxk
RGF5cyhFLEYsQSxDKXt2YXIgQj1FLm1vbnRoLm9wdGlvbnNbRS5tb250aC5zZWxlY3RlZEluZGV4
XS52YWx1ZTsKdmFyIEg9RS5kYXkuc2VsZWN0ZWRJbmRleCsxOwp2YXIgRD1FLnllYXIub3B0aW9u
c1tFLnllYXIuc2VsZWN0ZWRJbmRleF0udmFsdWU7CnZhciBHPTMxOwppZihCPT0yKXtpZihEJTQ9
PTApe0c9MjkKfWVsc2V7Rz0yOAp9fWVsc2V7aWYoaXNUaGlydHlEYXlNb250aChCKSl7Rz0zMAp9
ZWxzZXtHPTMxCn19c2V0RGF5cyhFLEcsSCkKfWZ1bmN0aW9uIHNldERheXMoQixELEMpe0IuZGF5
Lmxlbmd0aD0wOwppZihDPkQpe0M9RAp9Zm9yKHZhciBBPTA7CkE8RDsKQSsrKXtCLmRheS5vcHRp
b25zW0FdPW5ldyBPcHRpb24oQSsxKTsKaWYoQT09Qyl7Qi5kYXkub3B0aW9uc1tBLTFdLnNlbGVj
dGVkPXRydWUKfWVsc2V7aWYoQT09KEMtMSkpe0IuZGF5Lm9wdGlvbnNbQV0uc2VsZWN0ZWQ9dHJ1
ZQp9fX19ZnVuY3Rpb24gaXNUaGlydHlEYXlNb250aChCKXt2YXIgQz1uZXcgQXJyYXkoNCk7CkNb
MF09NDsKQ1sxXT02OwpDWzJdPTk7CkNbM109MTE7CmZvcih2YXIgQT0wOwpBPDQ7CkErKyl7aWYo
Q1tBXT09Qil7cmV0dXJuIHRydWUKfX1yZXR1cm4gZmFsc2UKfWZ1bmN0aW9uIGNoZWNrQWxsKEMp
e3ZhciBBPUMuZWxlbWVudHMubGVuZ3RoOwpmb3IodmFyIEI9MDsKQjxBOwpCKyspe3ZhciBEPUMu
ZWxlbWVudHNbQl07CmlmKEQudHlwZT09ImNoZWNrYm94Iil7RC5jaGVja2VkPXRydWUKfX1yZXR1
cm4gZmFsc2UKfWZ1bmN0aW9uIGNsZWFyQWxsKEMpe3ZhciBBPUMuZWxlbWVudHMubGVuZ3RoOwpm
b3IodmFyIEI9MDsKQjxBOwpCKyspe3ZhciBEPUMuZWxlbWVudHNbQl07CmlmKEQudHlwZT09ImNo
ZWNrYm94Iil7RC5jaGVja2VkPWZhbHNlCn19cmV0dXJuIGZhbHNlCn1mdW5jdGlvbiBlbWFpbEFk
ZHJlc3MoQSl7dmFyIEI9IiI7CmZvcihpPTA7Cmk8QS5sZW5ndGg7CmkrKyl7dmFyIEM9QS5jaGFy
QXQoaSk7CmlmKEM9PSJAIil7Qz0iLiIKfWVsc2V7aWYoQz09IiQiKXtDPSJAIgp9fUIrPUMKfXJl
dHVybihCKQp9ZnVuY3Rpb24gbWFpbHRvKEIpe3ZhciBBPWVtYWlsQWRkcmVzcyhCKTsKZG9jdW1l
bnQud3JpdGUoJzxhIGhyZWY9Im1haWx0bzonK0ErJyI+JytBKyI8L2E+Iik7CnJldHVybiB0cnVl
Cn1mdW5jdGlvbiBjaGVja1Bob25lKEEpe3ZhciBEPSIiOwp2YXIgQz1BLmxlbmd0aDsKaWYoQz4w
KXtmb3IodmFyIEI9MDsKQjxDOwpCKyspe2lmKCFpc05hTihwYXJzZUludChBLmNoYXJBdChCKSkp
KXtEPUQrQS5jaGFyQXQoQikKfX1pZihELmxlbmd0aD09MTApe3JldHVybiB0cnVlCn1lbHNle2Fs
ZXJ0KCJQaG9uZSBudW1iZXIgbXVzdCBoYXZlIGV4YWN0bHkgdGVuIGRpZ2l0cy4iKTsKcmV0dXJu
IGZhbHNlCn19ZWxzZXtyZXR1cm4gdHJ1ZQp9fTsKPC9zY3JpcHQ+Cgo8c2NyaXB0PgppZih0eXBl
b2YgWUFIT089PSJ1bmRlZmluZWQifHwhWUFIT08pe3ZhciBZQUhPTz17fQp9WUFIT08ubmFtZXNw
YWNlPWZ1bmN0aW9uKCl7dmFyIEY9YXJndW1lbnRzLEc9bnVsbCxJLEosSDsKZm9yKEk9MDsKSTxG
Lmxlbmd0aDsKST1JKzEpe0g9KCIiK0ZbSV0pLnNwbGl0KCIuIik7Ckc9WUFIT087CmZvcihKPShI
WzBdPT0iWUFIT08iKT8xOjA7Cko8SC5sZW5ndGg7Cko9SisxKXtHW0hbSl1dPUdbSFtKXV18fHt9
OwpHPUdbSFtKXV0KfX1yZXR1cm4gRwp9OwpZQUhPTy5sb2c9ZnVuY3Rpb24oRixFLEcpe3ZhciBI
PVlBSE9PLndpZGdldC5Mb2dnZXI7CmlmKEgmJkgubG9nKXtyZXR1cm4gSC5sb2coRixFLEcpCn1l
bHNle3JldHVybiBmYWxzZQp9fTsKWUFIT08ucmVnaXN0ZXI9ZnVuY3Rpb24oTSxSLEope3ZhciBO
PVlBSE9PLmVudi5tb2R1bGVzLEwsTyxQLFEsSzsKaWYoIU5bTV0pe05bTV09e3ZlcnNpb25zOltd
LGJ1aWxkczpbXX0KfUw9TltNXTsKTz1KLnZlcnNpb247ClA9Si5idWlsZDsKUT1ZQUhPTy5lbnYu
bGlzdGVuZXJzOwpMLm5hbWU9TTsKTC52ZXJzaW9uPU87CkwuYnVpbGQ9UDsKTC52ZXJzaW9ucy5w
dXNoKE8pOwpMLmJ1aWxkcy5wdXNoKFApOwpMLm1haW5DbGFzcz1SOwpmb3IoSz0wOwpLPFEubGVu
Z3RoOwpLPUsrMSl7UVtLXShMKQp9aWYoUil7Ui5WRVJTSU9OPU87ClIuQlVJTEQ9UAp9ZWxzZXtZ
QUhPTy5sb2coIm1haW5DbGFzcyBpcyB1bmRlZmluZWQgZm9yIG1vZHVsZSAiK00sIndhcm4iKQp9
fTsKWUFIT08uZW52PVlBSE9PLmVudnx8e21vZHVsZXM6W10sbGlzdGVuZXJzOltdfTsKWUFIT08u
ZW52LmdldFZlcnNpb249ZnVuY3Rpb24oQil7cmV0dXJuIFlBSE9PLmVudi5tb2R1bGVzW0JdfHxu
dWxsCn07CllBSE9PLmVudi51YT1mdW5jdGlvbigpe3ZhciBMPWZ1bmN0aW9uKEIpe3ZhciBBPTA7
CnJldHVybiBwYXJzZUZsb2F0KEIucmVwbGFjZSgvXC4vZyxmdW5jdGlvbigpe3JldHVybihBKys9
PTEpPyIiOiIuIgp9KSkKfSxJPW5hdmlnYXRvcixKPXtpZTowLG9wZXJhOjAsZ2Vja286MCx3ZWJr
aXQ6MCxtb2JpbGU6bnVsbCxhaXI6MCxjYWphOkkuY2FqYVZlcnNpb24sc2VjdXJlOmZhbHNlLG9z
Om51bGx9LE09bmF2aWdhdG9yJiZuYXZpZ2F0b3IudXNlckFnZW50LEs9d2luZG93JiZ3aW5kb3cu
bG9jYXRpb24sTj1LJiZLLmhyZWYsSDsKSi5zZWN1cmU9TiYmKE4udG9Mb3dlckNhc2UoKS5pbmRl
eE9mKCJodHRwcyIpPT09MCk7CmlmKE0pe2lmKCgvd2luZG93c3x3aW4zMi9pKS50ZXN0KE0pKXtK
Lm9zPSJ3aW5kb3dzIgp9ZWxzZXtpZigoL21hY2ludG9zaC9pKS50ZXN0KE0pKXtKLm9zPSJtYWNp
bnRvc2giCn19aWYoKC9LSFRNTC8pLnRlc3QoTSkpe0oud2Via2l0PTEKfUg9TS5tYXRjaCgvQXBw
bGVXZWJLaXRcLyhbXlxzXSopLyk7CmlmKEgmJkhbMV0pe0oud2Via2l0PUwoSFsxXSk7CmlmKC8g
TW9iaWxlXC8vLnRlc3QoTSkpe0oubW9iaWxlPSJBcHBsZSIKfWVsc2V7SD1NLm1hdGNoKC9Ob2tp
YU5bXlwvXSovKTsKaWYoSCl7Si5tb2JpbGU9SFswXQp9fUg9TS5tYXRjaCgvQWRvYmVBSVJcLyhb
XlxzXSopLyk7CmlmKEgpe0ouYWlyPUhbMF0KfX1pZighSi53ZWJraXQpe0g9TS5tYXRjaCgvT3Bl
cmFbXHNcL10oW15cc10qKS8pOwppZihIJiZIWzFdKXtKLm9wZXJhPUwoSFsxXSk7Ckg9TS5tYXRj
aCgvT3BlcmEgTWluaVteO10qLyk7CmlmKEgpe0oubW9iaWxlPUhbMF0KfX1lbHNle0g9TS5tYXRj
aCgvTVNJRVxzKFteO10qKS8pOwppZihIJiZIWzFdKXtKLmllPUwoSFsxXSkKfWVsc2V7SD1NLm1h
dGNoKC9HZWNrb1wvKFteXHNdKikvKTsKaWYoSCl7Si5nZWNrbz0xOwpIPU0ubWF0Y2goL3J2Oihb
XlxzXCldKikvKTsKaWYoSCYmSFsxXSl7Si5nZWNrbz1MKEhbMV0pCn19fX19fXJldHVybiBKCn0o
KTsKKGZ1bmN0aW9uKCl7WUFIT08ubmFtZXNwYWNlKCJ1dGlsIiwid2lkZ2V0IiwiZXhhbXBsZSIp
OwppZigidW5kZWZpbmVkIiE9PXR5cGVvZiBZQUhPT19jb25maWcpe3ZhciBIPVlBSE9PX2NvbmZp
Zy5saXN0ZW5lcixFPVlBSE9PLmVudi5saXN0ZW5lcnMsRj10cnVlLEc7CmlmKEgpe2ZvcihHPTA7
Ckc8RS5sZW5ndGg7CkcrKyl7aWYoRVtHXT09SCl7Rj1mYWxzZTsKYnJlYWsKfX1pZihGKXtFLnB1
c2goSCkKfX19fSkoKTsKWUFIT08ubGFuZz1ZQUhPTy5sYW5nfHx7fTsKKGZ1bmN0aW9uKCl7dmFy
IFA9WUFIT08ubGFuZyxJPU9iamVjdC5wcm90b3R5cGUsSj0iW29iamVjdCBBcnJheV0iLE89Iltv
YmplY3QgRnVuY3Rpb25dIixLPSJbb2JqZWN0IE9iamVjdF0iLE09W10sTD1bInRvU3RyaW5nIiwi
dmFsdWVPZiJdLE49e2lzQXJyYXk6ZnVuY3Rpb24oQSl7cmV0dXJuIEkudG9TdHJpbmcuYXBwbHko
QSk9PT1KCn0saXNCb29sZWFuOmZ1bmN0aW9uKEEpe3JldHVybiB0eXBlb2YgQT09PSJib29sZWFu
Igp9LGlzRnVuY3Rpb246ZnVuY3Rpb24oQSl7cmV0dXJuKHR5cGVvZiBBPT09ImZ1bmN0aW9uIil8
fEkudG9TdHJpbmcuYXBwbHkoQSk9PT1PCn0saXNOdWxsOmZ1bmN0aW9uKEEpe3JldHVybiBBPT09
bnVsbAp9LGlzTnVtYmVyOmZ1bmN0aW9uKEEpe3JldHVybiB0eXBlb2YgQT09PSJudW1iZXIiJiZp
c0Zpbml0ZShBKQp9LGlzT2JqZWN0OmZ1bmN0aW9uKEEpe3JldHVybihBJiYodHlwZW9mIEE9PT0i
b2JqZWN0Inx8UC5pc0Z1bmN0aW9uKEEpKSl8fGZhbHNlCn0saXNTdHJpbmc6ZnVuY3Rpb24oQSl7
cmV0dXJuIHR5cGVvZiBBPT09InN0cmluZyIKfSxpc1VuZGVmaW5lZDpmdW5jdGlvbihBKXtyZXR1
cm4gdHlwZW9mIEE9PT0idW5kZWZpbmVkIgp9LF9JRUVudW1GaXg6KFlBSE9PLmVudi51YS5pZSk/
ZnVuY3Rpb24oQixDKXt2YXIgRCxFLEE7CmZvcihEPTA7CkQ8TC5sZW5ndGg7CkQ9RCsxKXtFPUxb
RF07CkE9Q1tFXTsKaWYoUC5pc0Z1bmN0aW9uKEEpJiZBIT1JW0VdKXtCW0VdPUEKfX19OmZ1bmN0
aW9uKCl7fSxleHRlbmQ6ZnVuY3Rpb24oQSxFLEIpe2lmKCFFfHwhQSl7dGhyb3cgbmV3IEVycm9y
KCJleHRlbmQgZmFpbGVkLCBwbGVhc2UgY2hlY2sgdGhhdCBhbGwgZGVwZW5kZW5jaWVzIGFyZSBp
bmNsdWRlZC4iKQp9dmFyIEM9ZnVuY3Rpb24oKXt9LEQ7CkMucHJvdG90eXBlPUUucHJvdG90eXBl
OwpBLnByb3RvdHlwZT1uZXcgQygpOwpBLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1BOwpBLnN1cGVy
Y2xhc3M9RS5wcm90b3R5cGU7CmlmKEUucHJvdG90eXBlLmNvbnN0cnVjdG9yPT1JLmNvbnN0cnVj
dG9yKXtFLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1FCn1pZihCKXtmb3IoRCBpbiBCKXtpZihQLmhh
c093blByb3BlcnR5KEIsRCkpe0EucHJvdG90eXBlW0RdPUJbRF0KfX1QLl9JRUVudW1GaXgoQS5w
cm90b3R5cGUsQikKfX0sYXVnbWVudE9iamVjdDpmdW5jdGlvbihGLEEpe2lmKCFBfHwhRil7dGhy
b3cgbmV3IEVycm9yKCJBYnNvcmIgZmFpbGVkLCB2ZXJpZnkgZGVwZW5kZW5jaWVzLiIpCn12YXIg
RD1hcmd1bWVudHMsQixFLEM9RFsyXTsKaWYoQyYmQyE9PXRydWUpe2ZvcihCPTI7CkI8RC5sZW5n
dGg7CkI9QisxKXtGW0RbQl1dPUFbRFtCXV0KfX1lbHNle2ZvcihFIGluIEEpe2lmKEN8fCEoRSBp
biBGKSl7RltFXT1BW0VdCn19UC5fSUVFbnVtRml4KEYsQSkKfX0sYXVnbWVudFByb3RvOmZ1bmN0
aW9uKEEsQil7aWYoIUJ8fCFBKXt0aHJvdyBuZXcgRXJyb3IoIkF1Z21lbnQgZmFpbGVkLCB2ZXJp
ZnkgZGVwZW5kZW5jaWVzLiIpCn12YXIgRD1bQS5wcm90b3R5cGUsQi5wcm90b3R5cGVdLEM7CmZv
cihDPTI7CkM8YXJndW1lbnRzLmxlbmd0aDsKQz1DKzEpe0QucHVzaChhcmd1bWVudHNbQ10pCn1Q
LmF1Z21lbnRPYmplY3QuYXBwbHkodGhpcyxEKQp9LGR1bXA6ZnVuY3Rpb24oUixEKXt2YXIgRyxF
LEI9W10sQT0iey4uLn0iLEg9ImYoKXsuLi59IixDPSIsICIsRj0iID0+ICI7CmlmKCFQLmlzT2Jq
ZWN0KFIpKXtyZXR1cm4gUisiIgp9ZWxzZXtpZihSIGluc3RhbmNlb2YgRGF0ZXx8KCJub2RlVHlw
ZSIgaW4gUiYmInRhZ05hbWUiIGluIFIpKXtyZXR1cm4gUgp9ZWxzZXtpZihQLmlzRnVuY3Rpb24o
Uikpe3JldHVybiBICn19fUQ9KFAuaXNOdW1iZXIoRCkpP0Q6MzsKaWYoUC5pc0FycmF5KFIpKXtC
LnB1c2goIlsiKTsKZm9yKEc9MCxFPVIubGVuZ3RoOwpHPEU7Ckc9RysxKXtpZihQLmlzT2JqZWN0
KFJbR10pKXtCLnB1c2goKEQ+MCk/UC5kdW1wKFJbR10sRC0xKTpBKQp9ZWxzZXtCLnB1c2goUltH
XSkKfUIucHVzaChDKQp9aWYoQi5sZW5ndGg+MSl7Qi5wb3AoKQp9Qi5wdXNoKCJdIikKfWVsc2V7
Qi5wdXNoKCJ7Iik7CmZvcihHIGluIFIpe2lmKFAuaGFzT3duUHJvcGVydHkoUixHKSl7Qi5wdXNo
KEcrRik7CmlmKFAuaXNPYmplY3QoUltHXSkpe0IucHVzaCgoRD4wKT9QLmR1bXAoUltHXSxELTEp
OkEpCn1lbHNle0IucHVzaChSW0ddKQp9Qi5wdXNoKEMpCn19aWYoQi5sZW5ndGg+MSl7Qi5wb3Ao
KQp9Qi5wdXNoKCJ9IikKfXJldHVybiBCLmpvaW4oIiIpCn0sc3Vic3RpdHV0ZTpmdW5jdGlvbihB
LGcsSCl7dmFyIGMsZCxlLEUsRCxCLEY9W10sZixiPSJkdW1wIixHPSIgIixoPSJ7IixDPSJ9Iixa
LGE7CmZvcig7CjsKKXtjPUEubGFzdEluZGV4T2YoaCk7CmlmKGM8MCl7YnJlYWsKfWQ9QS5pbmRl
eE9mKEMsYyk7CmlmKGMrMT49ZCl7YnJlYWsKfWY9QS5zdWJzdHJpbmcoYysxLGQpOwpFPWY7CkI9
bnVsbDsKZT1FLmluZGV4T2YoRyk7CmlmKGU+LTEpe0I9RS5zdWJzdHJpbmcoZSsxKTsKRT1FLnN1
YnN0cmluZygwLGUpCn1EPWdbRV07CmlmKEgpe0Q9SChFLEQsQikKfWlmKFAuaXNPYmplY3QoRCkp
e2lmKFAuaXNBcnJheShEKSl7RD1QLmR1bXAoRCxwYXJzZUludChCLDEwKSkKfWVsc2V7Qj1CfHwi
IjsKWj1CLmluZGV4T2YoYik7CmlmKFo+LTEpe0I9Qi5zdWJzdHJpbmcoNCkKfWE9RC50b1N0cmlu
ZygpOwppZihhPT09S3x8Wj4tMSl7RD1QLmR1bXAoRCxwYXJzZUludChCLDEwKSkKfWVsc2V7RD1h
Cn19fWVsc2V7aWYoIVAuaXNTdHJpbmcoRCkmJiFQLmlzTnVtYmVyKEQpKXtEPSJ+LSIrRi5sZW5n
dGgrIi1+IjsKRltGLmxlbmd0aF09Zgp9fUE9QS5zdWJzdHJpbmcoMCxjKStEK0Euc3Vic3RyaW5n
KGQrMSkKfWZvcihjPUYubGVuZ3RoLTE7CmM+PTA7CmM9Yy0xKXtBPUEucmVwbGFjZShuZXcgUmVn
RXhwKCJ+LSIrYysiLX4iKSwieyIrRltjXSsifSIsImciKQp9cmV0dXJuIEEKfSx0cmltOmZ1bmN0
aW9uKEIpe3RyeXtyZXR1cm4gQi5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIikKfWNhdGNoKEEpe3Jl
dHVybiBCCn19LG1lcmdlOmZ1bmN0aW9uKCl7dmFyIEE9e30sQz1hcmd1bWVudHMsRD1DLmxlbmd0
aCxCOwpmb3IoQj0wOwpCPEQ7CkI9QisxKXtQLmF1Z21lbnRPYmplY3QoQSxDW0JdLHRydWUpCn1y
ZXR1cm4gQQp9LGxhdGVyOmZ1bmN0aW9uKEIsSCxBLEYsRSl7Qj1CfHwwOwpIPUh8fHt9Owp2YXIg
Rz1BLEM9RixELFI7CmlmKFAuaXNTdHJpbmcoQSkpe0c9SFtBXQp9aWYoIUcpe3Rocm93IG5ldyBU
eXBlRXJyb3IoIm1ldGhvZCB1bmRlZmluZWQiKQp9aWYoQyYmIVAuaXNBcnJheShDKSl7Qz1bRl0K
fUQ9ZnVuY3Rpb24oKXtHLmFwcGx5KEgsQ3x8TSkKfTsKUj0oRSk/c2V0SW50ZXJ2YWwoRCxCKTpz
ZXRUaW1lb3V0KEQsQik7CnJldHVybntpbnRlcnZhbDpFLGNhbmNlbDpmdW5jdGlvbigpe2lmKHRo
aXMuaW50ZXJ2YWwpe2NsZWFySW50ZXJ2YWwoUikKfWVsc2V7Y2xlYXJUaW1lb3V0KFIpCn19fQp9
LGlzVmFsdWU6ZnVuY3Rpb24oQSl7cmV0dXJuKFAuaXNPYmplY3QoQSl8fFAuaXNTdHJpbmcoQSl8
fFAuaXNOdW1iZXIoQSl8fFAuaXNCb29sZWFuKEEpKQp9fTsKUC5oYXNPd25Qcm9wZXJ0eT0oSS5o
YXNPd25Qcm9wZXJ0eSk/ZnVuY3Rpb24oQixBKXtyZXR1cm4gQiYmQi5oYXNPd25Qcm9wZXJ0eShB
KQp9OmZ1bmN0aW9uKEIsQSl7cmV0dXJuICFQLmlzVW5kZWZpbmVkKEJbQV0pJiZCLmNvbnN0cnVj
dG9yLnByb3RvdHlwZVtBXSE9PUJbQV0KfTsKTi5hdWdtZW50T2JqZWN0KFAsTix0cnVlKTsKWUFI
T08udXRpbC5MYW5nPVA7ClAuYXVnbWVudD1QLmF1Z21lbnRQcm90bzsKWUFIT08uYXVnbWVudD1Q
LmF1Z21lbnRQcm90bzsKWUFIT08uZXh0ZW5kPVAuZXh0ZW5kCn0pKCk7CllBSE9PLnJlZ2lzdGVy
KCJ5YWhvbyIsWUFIT08se3ZlcnNpb246IjIuOC4wcjQiLGJ1aWxkOiIyNDQ5In0pOwooZnVuY3Rp
b24oKXtZQUhPTy5lbnYuX2lkX2NvdW50ZXI9WUFIT08uZW52Ll9pZF9jb3VudGVyfHwwOwp2YXIg
QU89WUFIT08udXRpbCxBST1ZQUhPTy5sYW5nLEFkPVlBSE9PLmVudi51YSxBUz1ZQUhPTy5sYW5n
LnRyaW0sQW09e30sQWk9e30sQUc9L150KD86YWJsZXxkfGgpJC9pLFk9L2NvbG9yJC9pLEFKPXdp
bmRvdy5kb2N1bWVudCx4PUFKLmRvY3VtZW50RWxlbWVudCxBbD0ib3duZXJEb2N1bWVudCIsQWM9
ImRlZmF1bHRWaWV3IixBVT0iZG9jdW1lbnRFbGVtZW50IixBVz0iY29tcGF0TW9kZSIsQW89Im9m
ZnNldExlZnQiLEFFPSJvZmZzZXRUb3AiLEFWPSJvZmZzZXRQYXJlbnQiLEc9InBhcmVudE5vZGUi
LEFlPSJub2RlVHlwZSIsQVE9InRhZ05hbWUiLEFGPSJzY3JvbGxMZWZ0IixBaD0ic2Nyb2xsVG9w
IixBRD0iZ2V0Qm91bmRpbmdDbGllbnRSZWN0IixBVD0iZ2V0Q29tcHV0ZWRTdHlsZSIsQXA9ImN1
cnJlbnRTdHlsZSIsQUg9IkNTUzFDb21wYXQiLEFuPSJCYWNrQ29tcGF0IixBaj0iY2xhc3MiLEFO
PSJjbGFzc05hbWUiLEFLPSIiLEFSPSIgIixBWD0iKD86XnxcXHMpIixBZj0iKD89IHwkKSIsej0i
ZyIsQWE9InBvc2l0aW9uIixBaz0iZml4ZWQiLHk9InJlbGF0aXZlIixBZz0ibGVmdCIsQWI9InRv
cCIsQVk9Im1lZGl1bSIsQVo9ImJvcmRlckxlZnRXaWR0aCIsQUM9ImJvcmRlclRvcFdpZHRoIixB
UD1BZC5vcGVyYSxBTD1BZC53ZWJraXQsQU09QWQuZ2Vja28sQUE9QWQuaWU7CkFPLkRvbT17Q1VT
VE9NX0FUVFJJQlVURVM6KCF4Lmhhc0F0dHJpYnV0ZSk/eyJmb3IiOiJodG1sRm9yIiwiY2xhc3Mi
OkFOfTp7aHRtbEZvcjoiZm9yIixjbGFzc05hbWU6QWp9LERPVF9BVFRSSUJVVEVTOnt9LGdldDpm
dW5jdGlvbihGKXt2YXIgQyxBLEUsSCxELEI7CmlmKEYpe2lmKEZbQWVdfHxGLml0ZW0pe3JldHVy
biBGCn1pZih0eXBlb2YgRj09PSJzdHJpbmciKXtDPUY7CkY9QUouZ2V0RWxlbWVudEJ5SWQoRik7
CkI9KEYpP0YuYXR0cmlidXRlczpudWxsOwppZihGJiZCJiZCLmlkJiZCLmlkLnZhbHVlPT09Qyl7
cmV0dXJuIEYKfWVsc2V7aWYoRiYmQUouYWxsKXtGPW51bGw7CkE9QUouYWxsW0NdOwpmb3IoSD0w
LEQ9QS5sZW5ndGg7Ckg8RDsKKytIKXtpZihBW0hdLmlkPT09Qyl7cmV0dXJuIEFbSF0KfX19fXJl
dHVybiBGCn1pZihZQUhPTy51dGlsLkVsZW1lbnQmJkYgaW5zdGFuY2VvZiBZQUhPTy51dGlsLkVs
ZW1lbnQpe0Y9Ri5nZXQoImVsZW1lbnQiKQp9aWYoImxlbmd0aCIgaW4gRil7RT1bXTsKZm9yKEg9
MCxEPUYubGVuZ3RoOwpIPEQ7CisrSCl7RVtFLmxlbmd0aF09QU8uRG9tLmdldChGW0hdKQp9cmV0
dXJuIEUKfXJldHVybiBGCn1yZXR1cm4gbnVsbAp9LGdldENvbXB1dGVkU3R5bGU6ZnVuY3Rpb24o
QSxCKXtpZih3aW5kb3dbQVRdKXtyZXR1cm4gQVtBbF1bQWNdW0FUXShBLG51bGwpW0JdCn1lbHNl
e2lmKEFbQXBdKXtyZXR1cm4gQU8uRG9tLklFX0NvbXB1dGVkU3R5bGUuZ2V0KEEsQikKfX19LGdl
dFN0eWxlOmZ1bmN0aW9uKEEsQil7cmV0dXJuIEFPLkRvbS5iYXRjaChBLEFPLkRvbS5fZ2V0U3R5
bGUsQikKfSxfZ2V0U3R5bGU6ZnVuY3Rpb24oKXtpZih3aW5kb3dbQVRdKXtyZXR1cm4gZnVuY3Rp
b24oQixEKXtEPShEPT09ImZsb2F0Iik/RD0iY3NzRmxvYXQiOkFPLkRvbS5fdG9DYW1lbChEKTsK
dmFyIEE9Qi5zdHlsZVtEXSxDOwppZighQSl7Qz1CW0FsXVtBY11bQVRdKEIsbnVsbCk7CmlmKEMp
e0E9Q1tEXQp9fXJldHVybiBBCn0KfWVsc2V7aWYoeFtBcF0pe3JldHVybiBmdW5jdGlvbihCLEUp
e3ZhciBBOwpzd2l0Y2goRSl7Y2FzZSJvcGFjaXR5IjpBPTEwMDsKdHJ5e0E9Qi5maWx0ZXJzWyJE
WEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYSJdLm9wYWNpdHkKfWNhdGNoKEQpe3RyeXtB
PUIuZmlsdGVycygiYWxwaGEiKS5vcGFjaXR5Cn1jYXRjaChDKXt9fXJldHVybiBBLzEwMDsKY2Fz
ZSJmbG9hdCI6RT0ic3R5bGVGbG9hdCI7CmRlZmF1bHQ6RT1BTy5Eb20uX3RvQ2FtZWwoRSk7CkE9
QltBcF0/QltBcF1bRV06bnVsbDsKcmV0dXJuKEIuc3R5bGVbRV18fEEpCn19Cn19fSgpLHNldFN0
eWxlOmZ1bmN0aW9uKEIsQyxBKXtBTy5Eb20uYmF0Y2goQixBTy5Eb20uX3NldFN0eWxlLHtwcm9w
OkMsdmFsOkF9KQp9LF9zZXRTdHlsZTpmdW5jdGlvbigpe2lmKEFBKXtyZXR1cm4gZnVuY3Rpb24o
QyxCKXt2YXIgQT1BTy5Eb20uX3RvQ2FtZWwoQi5wcm9wKSxEPUIudmFsOwppZihDKXtzd2l0Y2go
QSl7Y2FzZSJvcGFjaXR5IjppZihBSS5pc1N0cmluZyhDLnN0eWxlLmZpbHRlcikpe0Muc3R5bGUu
ZmlsdGVyPSJhbHBoYShvcGFjaXR5PSIrRCoxMDArIikiOwppZighQ1tBcF18fCFDW0FwXS5oYXNM
YXlvdXQpe0Muc3R5bGUuem9vbT0xCn19YnJlYWs7CmNhc2UiZmxvYXQiOkE9InN0eWxlRmxvYXQi
OwpkZWZhdWx0OkMuc3R5bGVbQV09RAp9fWVsc2V7fX0KfWVsc2V7cmV0dXJuIGZ1bmN0aW9uKEMs
Qil7dmFyIEE9QU8uRG9tLl90b0NhbWVsKEIucHJvcCksRD1CLnZhbDsKaWYoQyl7aWYoQT09ImZs
b2F0Iil7QT0iY3NzRmxvYXQiCn1DLnN0eWxlW0FdPUQKfWVsc2V7fX0KfX0oKSxnZXRYWTpmdW5j
dGlvbihBKXtyZXR1cm4gQU8uRG9tLmJhdGNoKEEsQU8uRG9tLl9nZXRYWSkKfSxfY2FuUG9zaXRp
b246ZnVuY3Rpb24oQSl7cmV0dXJuKEFPLkRvbS5fZ2V0U3R5bGUoQSwiZGlzcGxheSIpIT09Im5v
bmUiJiZBTy5Eb20uX2luRG9jKEEpKQp9LF9nZXRYWTpmdW5jdGlvbigpe2lmKEFKW0FVXVtBRF0p
e3JldHVybiBmdW5jdGlvbihLKXt2YXIgSixBLEksQyxELEUsRixNLEwsSD1NYXRoLmZsb29yLEI9
ZmFsc2U7CmlmKEFPLkRvbS5fY2FuUG9zaXRpb24oSykpe0k9S1tBRF0oKTsKQz1LW0FsXTsKSj1B
Ty5Eb20uZ2V0RG9jdW1lbnRTY3JvbGxMZWZ0KEMpOwpBPUFPLkRvbS5nZXREb2N1bWVudFNjcm9s
bFRvcChDKTsKQj1bSChJW0FnXSksSChJW0FiXSldOwppZihBQSYmQWQuaWU8OCl7RD0yOwpFPTI7
CkY9Q1tBV107CmlmKEFkLmllPT09Nil7aWYoRiE9PUFuKXtEPTA7CkU9MAp9fWlmKChGPT09QW4p
KXtNPUFCKENbQVVdLEFaKTsKTD1BQihDW0FVXSxBQyk7CmlmKE0hPT1BWSl7RD1wYXJzZUludChN
LDEwKQp9aWYoTCE9PUFZKXtFPXBhcnNlSW50KEwsMTApCn19QlswXS09RDsKQlsxXS09RQp9aWYo
KEF8fEopKXtCWzBdKz1KOwpCWzFdKz1BCn1CWzBdPUgoQlswXSk7CkJbMV09SChCWzFdKQp9ZWxz
ZXt9cmV0dXJuIEIKfQp9ZWxzZXtyZXR1cm4gZnVuY3Rpb24oSSl7dmFyIEEsSCxGLEQsQyxFPWZh
bHNlLEI9STsKaWYoQU8uRG9tLl9jYW5Qb3NpdGlvbihJKSl7RT1bSVtBb10sSVtBRV1dOwpBPUFP
LkRvbS5nZXREb2N1bWVudFNjcm9sbExlZnQoSVtBbF0pOwpIPUFPLkRvbS5nZXREb2N1bWVudFNj
cm9sbFRvcChJW0FsXSk7CkM9KChBTXx8QWQud2Via2l0PjUxOSk/dHJ1ZTpmYWxzZSk7CndoaWxl
KChCPUJbQVZdKSl7RVswXSs9QltBb107CkVbMV0rPUJbQUVdOwppZihDKXtFPUFPLkRvbS5fY2Fs
Y0JvcmRlcnMoQixFKQp9fWlmKEFPLkRvbS5fZ2V0U3R5bGUoSSxBYSkhPT1Bayl7Qj1JOwp3aGls
ZSgoQj1CW0ddKSYmQltBUV0pe0Y9QltBaF07CkQ9QltBRl07CmlmKEFNJiYoQU8uRG9tLl9nZXRT
dHlsZShCLCJvdmVyZmxvdyIpIT09InZpc2libGUiKSl7RT1BTy5Eb20uX2NhbGNCb3JkZXJzKEIs
RSkKfWlmKEZ8fEQpe0VbMF0tPUQ7CkVbMV0tPUYKfX1FWzBdKz1BOwpFWzFdKz1ICn1lbHNle2lm
KEFQKXtFWzBdLT1BOwpFWzFdLT1ICn1lbHNle2lmKEFMfHxBTSl7RVswXSs9QTsKRVsxXSs9SAp9
fX1FWzBdPU1hdGguZmxvb3IoRVswXSk7CkVbMV09TWF0aC5mbG9vcihFWzFdKQp9ZWxzZXt9cmV0
dXJuIEUKfQp9fSgpLGdldFg6ZnVuY3Rpb24oQSl7dmFyIEI9ZnVuY3Rpb24oQyl7cmV0dXJuIEFP
LkRvbS5nZXRYWShDKVswXQp9OwpyZXR1cm4gQU8uRG9tLmJhdGNoKEEsQixBTy5Eb20sdHJ1ZSkK
fSxnZXRZOmZ1bmN0aW9uKEEpe3ZhciBCPWZ1bmN0aW9uKEMpe3JldHVybiBBTy5Eb20uZ2V0WFko
QylbMV0KfTsKcmV0dXJuIEFPLkRvbS5iYXRjaChBLEIsQU8uRG9tLHRydWUpCn0sc2V0WFk6ZnVu
Y3Rpb24oQixBLEMpe0FPLkRvbS5iYXRjaChCLEFPLkRvbS5fc2V0WFkse3BvczpBLG5vUmV0cnk6
Q30pCn0sX3NldFhZOmZ1bmN0aW9uKEosRil7dmFyIEU9QU8uRG9tLl9nZXRTdHlsZShKLEFhKSxI
PUFPLkRvbS5zZXRTdHlsZSxCPUYucG9zLEE9Ri5ub1JldHJ5LEQ9W3BhcnNlSW50KEFPLkRvbS5n
ZXRDb21wdXRlZFN0eWxlKEosQWcpLDEwKSxwYXJzZUludChBTy5Eb20uZ2V0Q29tcHV0ZWRTdHls
ZShKLEFiKSwxMCldLEMsSTsKaWYoRT09InN0YXRpYyIpe0U9eTsKSChKLEFhLEUpCn1DPUFPLkRv
bS5fZ2V0WFkoSik7CmlmKCFCfHxDPT09ZmFsc2Upe3JldHVybiBmYWxzZQp9aWYoaXNOYU4oRFsw
XSkpe0RbMF09KEU9PXkpPzA6SltBb10KfWlmKGlzTmFOKERbMV0pKXtEWzFdPShFPT15KT8wOkpb
QUVdCn1pZihCWzBdIT09bnVsbCl7SChKLEFnLEJbMF0tQ1swXStEWzBdKyJweCIpCn1pZihCWzFd
IT09bnVsbCl7SChKLEFiLEJbMV0tQ1sxXStEWzFdKyJweCIpCn1pZighQSl7ST1BTy5Eb20uX2dl
dFhZKEopOwppZigoQlswXSE9PW51bGwmJklbMF0hPUJbMF0pfHwoQlsxXSE9PW51bGwmJklbMV0h
PUJbMV0pKXtBTy5Eb20uX3NldFhZKEose3BvczpCLG5vUmV0cnk6dHJ1ZX0pCn19fSxzZXRYOmZ1
bmN0aW9uKEIsQSl7QU8uRG9tLnNldFhZKEIsW0EsbnVsbF0pCn0sc2V0WTpmdW5jdGlvbihBLEIp
e0FPLkRvbS5zZXRYWShBLFtudWxsLEJdKQp9LGdldFJlZ2lvbjpmdW5jdGlvbihBKXt2YXIgQj1m
dW5jdGlvbihDKXt2YXIgRD1mYWxzZTsKaWYoQU8uRG9tLl9jYW5Qb3NpdGlvbihDKSl7RD1BTy5S
ZWdpb24uZ2V0UmVnaW9uKEMpCn1lbHNle31yZXR1cm4gRAp9OwpyZXR1cm4gQU8uRG9tLmJhdGNo
KEEsQixBTy5Eb20sdHJ1ZSkKfSxnZXRDbGllbnRXaWR0aDpmdW5jdGlvbigpe3JldHVybiBBTy5E
b20uZ2V0Vmlld3BvcnRXaWR0aCgpCn0sZ2V0Q2xpZW50SGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJu
IEFPLkRvbS5nZXRWaWV3cG9ydEhlaWdodCgpCn0sZ2V0RWxlbWVudHNCeUNsYXNzTmFtZTpmdW5j
dGlvbihGLEIsRSxDLEssRCl7Qj1CfHwiKiI7CkU9KEUpP0FPLkRvbS5nZXQoRSk6bnVsbHx8QUo7
CmlmKCFFKXtyZXR1cm5bXQp9dmFyIEE9W10sTD1FLmdldEVsZW1lbnRzQnlUYWdOYW1lKEIpLEk9
QU8uRG9tLmhhc0NsYXNzOwpmb3IodmFyIEo9MCxIPUwubGVuZ3RoOwpKPEg7CisrSil7aWYoSShM
W0pdLEYpKXtBW0EubGVuZ3RoXT1MW0pdCn19aWYoQyl7QU8uRG9tLmJhdGNoKEEsQyxLLEQpCn1y
ZXR1cm4gQQp9LGhhc0NsYXNzOmZ1bmN0aW9uKEIsQSl7cmV0dXJuIEFPLkRvbS5iYXRjaChCLEFP
LkRvbS5faGFzQ2xhc3MsQSkKfSxfaGFzQ2xhc3M6ZnVuY3Rpb24oQSxDKXt2YXIgQj1mYWxzZSxE
OwppZihBJiZDKXtEPUFPLkRvbS5fZ2V0QXR0cmlidXRlKEEsQU4pfHxBSzsKaWYoQy5leGVjKXtC
PUMudGVzdChEKQp9ZWxzZXtCPUMmJihBUitEK0FSKS5pbmRleE9mKEFSK0MrQVIpPi0xCn19ZWxz
ZXt9cmV0dXJuIEIKfSxhZGRDbGFzczpmdW5jdGlvbihCLEEpe3JldHVybiBBTy5Eb20uYmF0Y2go
QixBTy5Eb20uX2FkZENsYXNzLEEpCn0sX2FkZENsYXNzOmZ1bmN0aW9uKEEsQyl7dmFyIEI9ZmFs
c2UsRDsKaWYoQSYmQyl7RD1BTy5Eb20uX2dldEF0dHJpYnV0ZShBLEFOKXx8QUs7CmlmKCFBTy5E
b20uX2hhc0NsYXNzKEEsQykpe0FPLkRvbS5zZXRBdHRyaWJ1dGUoQSxBTixBUyhEK0FSK0MpKTsK
Qj10cnVlCn19ZWxzZXt9cmV0dXJuIEIKfSxyZW1vdmVDbGFzczpmdW5jdGlvbihCLEEpe3JldHVy
biBBTy5Eb20uYmF0Y2goQixBTy5Eb20uX3JlbW92ZUNsYXNzLEEpCn0sX3JlbW92ZUNsYXNzOmZ1
bmN0aW9uKEYsQSl7dmFyIEU9ZmFsc2UsRCxDLEI7CmlmKEYmJkEpe0Q9QU8uRG9tLl9nZXRBdHRy
aWJ1dGUoRixBTil8fEFLOwpBTy5Eb20uc2V0QXR0cmlidXRlKEYsQU4sRC5yZXBsYWNlKEFPLkRv
bS5fZ2V0Q2xhc3NSZWdleChBKSxBSykpOwpDPUFPLkRvbS5fZ2V0QXR0cmlidXRlKEYsQU4pOwpp
ZihEIT09Qyl7QU8uRG9tLnNldEF0dHJpYnV0ZShGLEFOLEFTKEMpKTsKRT10cnVlOwppZihBTy5E
b20uX2dldEF0dHJpYnV0ZShGLEFOKT09PSIiKXtCPShGLmhhc0F0dHJpYnV0ZSYmRi5oYXNBdHRy
aWJ1dGUoQWopKT9BajpBTjsKRi5yZW1vdmVBdHRyaWJ1dGUoQikKfX19ZWxzZXt9cmV0dXJuIEUK
fSxyZXBsYWNlQ2xhc3M6ZnVuY3Rpb24oQSxDLEIpe3JldHVybiBBTy5Eb20uYmF0Y2goQSxBTy5E
b20uX3JlcGxhY2VDbGFzcyx7ZnJvbTpDLHRvOkJ9KQp9LF9yZXBsYWNlQ2xhc3M6ZnVuY3Rpb24o
SCxBKXt2YXIgRixDLEUsQj1mYWxzZSxEOwppZihIJiZBKXtDPUEuZnJvbTsKRT1BLnRvOwppZigh
RSl7Qj1mYWxzZQp9ZWxzZXtpZighQyl7Qj1BTy5Eb20uX2FkZENsYXNzKEgsQS50bykKfWVsc2V7
aWYoQyE9PUUpe0Q9QU8uRG9tLl9nZXRBdHRyaWJ1dGUoSCxBTil8fEFLOwpGPShBUitELnJlcGxh
Y2UoQU8uRG9tLl9nZXRDbGFzc1JlZ2V4KEMpLEFSK0UpKS5zcGxpdChBTy5Eb20uX2dldENsYXNz
UmVnZXgoRSkpOwpGLnNwbGljZSgxLDAsQVIrRSk7CkFPLkRvbS5zZXRBdHRyaWJ1dGUoSCxBTixB
UyhGLmpvaW4oQUspKSk7CkI9dHJ1ZQp9fX19ZWxzZXt9cmV0dXJuIEIKfSxnZW5lcmF0ZUlkOmZ1
bmN0aW9uKEIsQSl7QT1BfHwieXVpLWdlbiI7CnZhciBDPWZ1bmN0aW9uKEUpe2lmKEUmJkUuaWQp
e3JldHVybiBFLmlkCn12YXIgRD1BK1lBSE9PLmVudi5faWRfY291bnRlcisrOwppZihFKXtpZihF
W0FsXSYmRVtBbF0uZ2V0RWxlbWVudEJ5SWQoRCkpe3JldHVybiBBTy5Eb20uZ2VuZXJhdGVJZChF
LEQrQSkKfUUuaWQ9RAp9cmV0dXJuIEQKfTsKcmV0dXJuIEFPLkRvbS5iYXRjaChCLEMsQU8uRG9t
LHRydWUpfHxDLmFwcGx5KEFPLkRvbSxhcmd1bWVudHMpCn0saXNBbmNlc3RvcjpmdW5jdGlvbihD
LEEpe0M9QU8uRG9tLmdldChDKTsKQT1BTy5Eb20uZ2V0KEEpOwp2YXIgQj1mYWxzZTsKaWYoKEMm
JkEpJiYoQ1tBZV0mJkFbQWVdKSl7aWYoQy5jb250YWlucyYmQyE9PUEpe0I9Qy5jb250YWlucyhB
KQp9ZWxzZXtpZihDLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKXtCPSEhKEMuY29tcGFyZURvY3Vt
ZW50UG9zaXRpb24oQSkmMTYpCn19fWVsc2V7fXJldHVybiBCCn0saW5Eb2N1bWVudDpmdW5jdGlv
bihBLEIpe3JldHVybiBBTy5Eb20uX2luRG9jKEFPLkRvbS5nZXQoQSksQikKfSxfaW5Eb2M6ZnVu
Y3Rpb24oQyxBKXt2YXIgQj1mYWxzZTsKaWYoQyYmQ1tBUV0pe0E9QXx8Q1tBbF07CkI9QU8uRG9t
LmlzQW5jZXN0b3IoQVtBVV0sQykKfWVsc2V7fXJldHVybiBCCn0sZ2V0RWxlbWVudHNCeTpmdW5j
dGlvbihBLEIsRixELEosRSxDKXtCPUJ8fCIqIjsKRj0oRik/QU8uRG9tLmdldChGKTpudWxsfHxB
SjsKaWYoIUYpe3JldHVybltdCn12YXIgSz1bXSxMPUYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoQik7
CmZvcih2YXIgST0wLEg9TC5sZW5ndGg7Ckk8SDsKKytJKXtpZihBKExbSV0pKXtpZihDKXtLPUxb
SV07CmJyZWFrCn1lbHNle0tbSy5sZW5ndGhdPUxbSV0KfX19aWYoRCl7QU8uRG9tLmJhdGNoKEss
RCxKLEUpCn1yZXR1cm4gSwp9LGdldEVsZW1lbnRCeTpmdW5jdGlvbihBLEIsQyl7cmV0dXJuIEFP
LkRvbS5nZXRFbGVtZW50c0J5KEEsQixDLG51bGwsbnVsbCxudWxsLHRydWUpCn0sYmF0Y2g6ZnVu
Y3Rpb24oQSxDLEYsRSl7dmFyIEg9W10sRD0oRSk/Rjp3aW5kb3c7CkE9KEEmJihBW0FRXXx8QS5p
dGVtKSk/QTpBTy5Eb20uZ2V0KEEpOwppZihBJiZDKXtpZihBW0FRXXx8QS5sZW5ndGg9PT11bmRl
ZmluZWQpe3JldHVybiBDLmNhbGwoRCxBLEYpCn1mb3IodmFyIEI9MDsKQjxBLmxlbmd0aDsKKytC
KXtIW0gubGVuZ3RoXT1DLmNhbGwoRCxBW0JdLEYpCn19ZWxzZXtyZXR1cm4gZmFsc2UKfXJldHVy
biBICn0sZ2V0RG9jdW1lbnRIZWlnaHQ6ZnVuY3Rpb24oKXt2YXIgQj0oQUpbQVddIT1BSHx8QUwp
P0FKLmJvZHkuc2Nyb2xsSGVpZ2h0Onguc2Nyb2xsSGVpZ2h0LEE9TWF0aC5tYXgoQixBTy5Eb20u
Z2V0Vmlld3BvcnRIZWlnaHQoKSk7CnJldHVybiBBCn0sZ2V0RG9jdW1lbnRXaWR0aDpmdW5jdGlv
bigpe3ZhciBCPShBSltBV10hPUFIfHxBTCk/QUouYm9keS5zY3JvbGxXaWR0aDp4LnNjcm9sbFdp
ZHRoLEE9TWF0aC5tYXgoQixBTy5Eb20uZ2V0Vmlld3BvcnRXaWR0aCgpKTsKcmV0dXJuIEEKfSxn
ZXRWaWV3cG9ydEhlaWdodDpmdW5jdGlvbigpe3ZhciBBPXNlbGYuaW5uZXJIZWlnaHQsQj1BSltB
V107CmlmKChCfHxBQSkmJiFBUCl7QT0oQj09QUgpP3guY2xpZW50SGVpZ2h0OkFKLmJvZHkuY2xp
ZW50SGVpZ2h0Cn1yZXR1cm4gQQp9LGdldFZpZXdwb3J0V2lkdGg6ZnVuY3Rpb24oKXt2YXIgQT1z
ZWxmLmlubmVyV2lkdGgsQj1BSltBV107CmlmKEJ8fEFBKXtBPShCPT1BSCk/eC5jbGllbnRXaWR0
aDpBSi5ib2R5LmNsaWVudFdpZHRoCn1yZXR1cm4gQQp9LGdldEFuY2VzdG9yQnk6ZnVuY3Rpb24o
QSxCKXt3aGlsZSgoQT1BW0ddKSl7aWYoQU8uRG9tLl90ZXN0RWxlbWVudChBLEIpKXtyZXR1cm4g
QQp9fXJldHVybiBudWxsCn0sZ2V0QW5jZXN0b3JCeUNsYXNzTmFtZTpmdW5jdGlvbihDLEIpe0M9
QU8uRG9tLmdldChDKTsKaWYoIUMpe3JldHVybiBudWxsCn12YXIgQT1mdW5jdGlvbihEKXtyZXR1
cm4gQU8uRG9tLmhhc0NsYXNzKEQsQikKfTsKcmV0dXJuIEFPLkRvbS5nZXRBbmNlc3RvckJ5KEMs
QSkKfSxnZXRBbmNlc3RvckJ5VGFnTmFtZTpmdW5jdGlvbihDLEIpe0M9QU8uRG9tLmdldChDKTsK
aWYoIUMpe3JldHVybiBudWxsCn12YXIgQT1mdW5jdGlvbihEKXtyZXR1cm4gRFtBUV0mJkRbQVFd
LnRvVXBwZXJDYXNlKCk9PUIudG9VcHBlckNhc2UoKQp9OwpyZXR1cm4gQU8uRG9tLmdldEFuY2Vz
dG9yQnkoQyxBKQp9LGdldFByZXZpb3VzU2libGluZ0J5OmZ1bmN0aW9uKEEsQil7d2hpbGUoQSl7
QT1BLnByZXZpb3VzU2libGluZzsKaWYoQU8uRG9tLl90ZXN0RWxlbWVudChBLEIpKXtyZXR1cm4g
QQp9fXJldHVybiBudWxsCn0sZ2V0UHJldmlvdXNTaWJsaW5nOmZ1bmN0aW9uKEEpe0E9QU8uRG9t
LmdldChBKTsKaWYoIUEpe3JldHVybiBudWxsCn1yZXR1cm4gQU8uRG9tLmdldFByZXZpb3VzU2li
bGluZ0J5KEEpCn0sZ2V0TmV4dFNpYmxpbmdCeTpmdW5jdGlvbihBLEIpe3doaWxlKEEpe0E9QS5u
ZXh0U2libGluZzsKaWYoQU8uRG9tLl90ZXN0RWxlbWVudChBLEIpKXtyZXR1cm4gQQp9fXJldHVy
biBudWxsCn0sZ2V0TmV4dFNpYmxpbmc6ZnVuY3Rpb24oQSl7QT1BTy5Eb20uZ2V0KEEpOwppZigh
QSl7cmV0dXJuIG51bGwKfXJldHVybiBBTy5Eb20uZ2V0TmV4dFNpYmxpbmdCeShBKQp9LGdldEZp
cnN0Q2hpbGRCeTpmdW5jdGlvbihCLEEpe3ZhciBDPShBTy5Eb20uX3Rlc3RFbGVtZW50KEIuZmly
c3RDaGlsZCxBKSk/Qi5maXJzdENoaWxkOm51bGw7CnJldHVybiBDfHxBTy5Eb20uZ2V0TmV4dFNp
YmxpbmdCeShCLmZpcnN0Q2hpbGQsQSkKfSxnZXRGaXJzdENoaWxkOmZ1bmN0aW9uKEEsQil7QT1B
Ty5Eb20uZ2V0KEEpOwppZighQSl7cmV0dXJuIG51bGwKfXJldHVybiBBTy5Eb20uZ2V0Rmlyc3RD
aGlsZEJ5KEEpCn0sZ2V0TGFzdENoaWxkQnk6ZnVuY3Rpb24oQixBKXtpZighQil7cmV0dXJuIG51
bGwKfXZhciBDPShBTy5Eb20uX3Rlc3RFbGVtZW50KEIubGFzdENoaWxkLEEpKT9CLmxhc3RDaGls
ZDpudWxsOwpyZXR1cm4gQ3x8QU8uRG9tLmdldFByZXZpb3VzU2libGluZ0J5KEIubGFzdENoaWxk
LEEpCn0sZ2V0TGFzdENoaWxkOmZ1bmN0aW9uKEEpe0E9QU8uRG9tLmdldChBKTsKcmV0dXJuIEFP
LkRvbS5nZXRMYXN0Q2hpbGRCeShBKQp9LGdldENoaWxkcmVuQnk6ZnVuY3Rpb24oQyxEKXt2YXIg
QT1BTy5Eb20uZ2V0Rmlyc3RDaGlsZEJ5KEMsRCksQj1BP1tBXTpbXTsKQU8uRG9tLmdldE5leHRT
aWJsaW5nQnkoQSxmdW5jdGlvbihFKXtpZighRHx8RChFKSl7QltCLmxlbmd0aF09RQp9cmV0dXJu
IGZhbHNlCn0pOwpyZXR1cm4gQgp9LGdldENoaWxkcmVuOmZ1bmN0aW9uKEEpe0E9QU8uRG9tLmdl
dChBKTsKaWYoIUEpe31yZXR1cm4gQU8uRG9tLmdldENoaWxkcmVuQnkoQSkKfSxnZXREb2N1bWVu
dFNjcm9sbExlZnQ6ZnVuY3Rpb24oQSl7QT1BfHxBSjsKcmV0dXJuIE1hdGgubWF4KEFbQVVdLnNj
cm9sbExlZnQsQS5ib2R5LnNjcm9sbExlZnQpCn0sZ2V0RG9jdW1lbnRTY3JvbGxUb3A6ZnVuY3Rp
b24oQSl7QT1BfHxBSjsKcmV0dXJuIE1hdGgubWF4KEFbQVVdLnNjcm9sbFRvcCxBLmJvZHkuc2Ny
b2xsVG9wKQp9LGluc2VydEJlZm9yZTpmdW5jdGlvbihCLEEpe0I9QU8uRG9tLmdldChCKTsKQT1B
Ty5Eb20uZ2V0KEEpOwppZighQnx8IUF8fCFBW0ddKXtyZXR1cm4gbnVsbAp9cmV0dXJuIEFbR10u
aW5zZXJ0QmVmb3JlKEIsQSkKfSxpbnNlcnRBZnRlcjpmdW5jdGlvbihCLEEpe0I9QU8uRG9tLmdl
dChCKTsKQT1BTy5Eb20uZ2V0KEEpOwppZighQnx8IUF8fCFBW0ddKXtyZXR1cm4gbnVsbAp9aWYo
QS5uZXh0U2libGluZyl7cmV0dXJuIEFbR10uaW5zZXJ0QmVmb3JlKEIsQS5uZXh0U2libGluZykK
fWVsc2V7cmV0dXJuIEFbR10uYXBwZW5kQ2hpbGQoQikKfX0sZ2V0Q2xpZW50UmVnaW9uOmZ1bmN0
aW9uKCl7dmFyIEE9QU8uRG9tLmdldERvY3VtZW50U2Nyb2xsVG9wKCksQz1BTy5Eb20uZ2V0RG9j
dW1lbnRTY3JvbGxMZWZ0KCksRD1BTy5Eb20uZ2V0Vmlld3BvcnRXaWR0aCgpK0MsQj1BTy5Eb20u
Z2V0Vmlld3BvcnRIZWlnaHQoKStBOwpyZXR1cm4gbmV3IEFPLlJlZ2lvbihBLEQsQixDKQp9LHNl
dEF0dHJpYnV0ZTpmdW5jdGlvbihDLEIsQSl7QU8uRG9tLmJhdGNoKEMsQU8uRG9tLl9zZXRBdHRy
aWJ1dGUse2F0dHI6Qix2YWw6QX0pCn0sX3NldEF0dHJpYnV0ZTpmdW5jdGlvbihBLEMpe3ZhciBC
PUFPLkRvbS5fdG9DYW1lbChDLmF0dHIpLEQ9Qy52YWw7CmlmKEEmJkEuc2V0QXR0cmlidXRlKXtp
ZihBTy5Eb20uRE9UX0FUVFJJQlVURVNbQl0pe0FbQl09RAp9ZWxzZXtCPUFPLkRvbS5DVVNUT01f
QVRUUklCVVRFU1tCXXx8QjsKQS5zZXRBdHRyaWJ1dGUoQixEKQp9fWVsc2V7fX0sZ2V0QXR0cmli
dXRlOmZ1bmN0aW9uKEIsQSl7cmV0dXJuIEFPLkRvbS5iYXRjaChCLEFPLkRvbS5fZ2V0QXR0cmli
dXRlLEEpCn0sX2dldEF0dHJpYnV0ZTpmdW5jdGlvbihDLEIpe3ZhciBBOwpCPUFPLkRvbS5DVVNU
T01fQVRUUklCVVRFU1tCXXx8QjsKaWYoQyYmQy5nZXRBdHRyaWJ1dGUpe0E9Qy5nZXRBdHRyaWJ1
dGUoQiwyKQp9ZWxzZXt9cmV0dXJuIEEKfSxfdG9DYW1lbDpmdW5jdGlvbihDKXt2YXIgQT1BbTsK
ZnVuY3Rpb24gQihFLEQpe3JldHVybiBELnRvVXBwZXJDYXNlKCkKfXJldHVybiBBW0NdfHwoQVtD
XT1DLmluZGV4T2YoIi0iKT09PS0xP0M6Qy5yZXBsYWNlKC8tKFthLXpdKS9naSxCKSkKfSxfZ2V0
Q2xhc3NSZWdleDpmdW5jdGlvbihCKXt2YXIgQTsKaWYoQiE9PXVuZGVmaW5lZCl7aWYoQi5leGVj
KXtBPUIKfWVsc2V7QT1BaVtCXTsKaWYoIUEpe0I9Qi5yZXBsYWNlKEFPLkRvbS5fcGF0dGVybnMu
Q0xBU1NfUkVfVE9LRU5TLCJcXCQxIik7CkE9QWlbQl09bmV3IFJlZ0V4cChBWCtCK0FmLHopCn19
fXJldHVybiBBCn0sX3BhdHRlcm5zOntST09UX1RBRzovXmJvZHl8aHRtbCQvaSxDTEFTU19SRV9U
T0tFTlM6LyhbXC5cKFwpXF5cJFwqXCtcP1x8XFtcXVx7XH1cXF0pL2d9LF90ZXN0RWxlbWVudDpm
dW5jdGlvbihBLEIpe3JldHVybiBBJiZBW0FlXT09MSYmKCFCfHxCKEEpKQp9LF9jYWxjQm9yZGVy
czpmdW5jdGlvbihBLEQpe3ZhciBDPXBhcnNlSW50KEFPLkRvbVtBVF0oQSxBQyksMTApfHwwLEI9
cGFyc2VJbnQoQU8uRG9tW0FUXShBLEFaKSwxMCl8fDA7CmlmKEFNKXtpZihBRy50ZXN0KEFbQVFd
KSl7Qz0wOwpCPTAKfX1EWzBdKz1COwpEWzFdKz1DOwpyZXR1cm4gRAp9fTsKdmFyIEFCPUFPLkRv
bVtBVF07CmlmKEFkLm9wZXJhKXtBTy5Eb21bQVRdPWZ1bmN0aW9uKEMsQil7dmFyIEE9QUIoQyxC
KTsKaWYoWS50ZXN0KEIpKXtBPUFPLkRvbS5Db2xvci50b1JHQihBKQp9cmV0dXJuIEEKfQp9aWYo
QWQud2Via2l0KXtBTy5Eb21bQVRdPWZ1bmN0aW9uKEMsQil7dmFyIEE9QUIoQyxCKTsKaWYoQT09
PSJyZ2JhKDAsIDAsIDAsIDApIil7QT0idHJhbnNwYXJlbnQiCn1yZXR1cm4gQQp9Cn1pZihBZC5p
ZSYmQWQuaWU+PTgmJkFKLmRvY3VtZW50RWxlbWVudC5oYXNBdHRyaWJ1dGUpe0FPLkRvbS5ET1Rf
QVRUUklCVVRFUy50eXBlPXRydWUKfX0pKCk7CllBSE9PLnV0aWwuUmVnaW9uPWZ1bmN0aW9uKEcs
RixFLEgpe3RoaXMudG9wPUc7CnRoaXMueT1HOwp0aGlzWzFdPUc7CnRoaXMucmlnaHQ9RjsKdGhp
cy5ib3R0b209RTsKdGhpcy5sZWZ0PUg7CnRoaXMueD1IOwp0aGlzWzBdPUg7CnRoaXMud2lkdGg9
dGhpcy5yaWdodC10aGlzLmxlZnQ7CnRoaXMuaGVpZ2h0PXRoaXMuYm90dG9tLXRoaXMudG9wCn07
CllBSE9PLnV0aWwuUmVnaW9uLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihCKXtyZXR1cm4o
Qi5sZWZ0Pj10aGlzLmxlZnQmJkIucmlnaHQ8PXRoaXMucmlnaHQmJkIudG9wPj10aGlzLnRvcCYm
Qi5ib3R0b208PXRoaXMuYm90dG9tKQp9OwpZQUhPTy51dGlsLlJlZ2lvbi5wcm90b3R5cGUuZ2V0
QXJlYT1mdW5jdGlvbigpe3JldHVybigodGhpcy5ib3R0b20tdGhpcy50b3ApKih0aGlzLnJpZ2h0
LXRoaXMubGVmdCkpCn07CllBSE9PLnV0aWwuUmVnaW9uLnByb3RvdHlwZS5pbnRlcnNlY3Q9ZnVu
Y3Rpb24oRyl7dmFyIEk9TWF0aC5tYXgodGhpcy50b3AsRy50b3ApLEg9TWF0aC5taW4odGhpcy5y
aWdodCxHLnJpZ2h0KSxGPU1hdGgubWluKHRoaXMuYm90dG9tLEcuYm90dG9tKSxKPU1hdGgubWF4
KHRoaXMubGVmdCxHLmxlZnQpOwppZihGPj1JJiZIPj1KKXtyZXR1cm4gbmV3IFlBSE9PLnV0aWwu
UmVnaW9uKEksSCxGLEopCn1lbHNle3JldHVybiBudWxsCn19OwpZQUhPTy51dGlsLlJlZ2lvbi5w
cm90b3R5cGUudW5pb249ZnVuY3Rpb24oRyl7dmFyIEk9TWF0aC5taW4odGhpcy50b3AsRy50b3Ap
LEg9TWF0aC5tYXgodGhpcy5yaWdodCxHLnJpZ2h0KSxGPU1hdGgubWF4KHRoaXMuYm90dG9tLEcu
Ym90dG9tKSxKPU1hdGgubWluKHRoaXMubGVmdCxHLmxlZnQpOwpyZXR1cm4gbmV3IFlBSE9PLnV0
aWwuUmVnaW9uKEksSCxGLEopCn07CllBSE9PLnV0aWwuUmVnaW9uLnByb3RvdHlwZS50b1N0cmlu
Zz1mdW5jdGlvbigpe3JldHVybigiUmVnaW9uIHt0b3A6ICIrdGhpcy50b3ArIiwgcmlnaHQ6ICIr
dGhpcy5yaWdodCsiLCBib3R0b206ICIrdGhpcy5ib3R0b20rIiwgbGVmdDogIit0aGlzLmxlZnQr
IiwgaGVpZ2h0OiAiK3RoaXMuaGVpZ2h0KyIsIHdpZHRoOiAiK3RoaXMud2lkdGgrIn0iKQp9OwpZ
QUhPTy51dGlsLlJlZ2lvbi5nZXRSZWdpb249ZnVuY3Rpb24oSil7dmFyIEg9WUFIT08udXRpbC5E
b20uZ2V0WFkoSiksSz1IWzFdLEk9SFswXStKLm9mZnNldFdpZHRoLEc9SFsxXStKLm9mZnNldEhl
aWdodCxMPUhbMF07CnJldHVybiBuZXcgWUFIT08udXRpbC5SZWdpb24oSyxJLEcsTCkKfTsKWUFI
T08udXRpbC5Qb2ludD1mdW5jdGlvbihDLEQpe2lmKFlBSE9PLmxhbmcuaXNBcnJheShDKSl7RD1D
WzFdOwpDPUNbMF0KfVlBSE9PLnV0aWwuUG9pbnQuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxs
KHRoaXMsRCxDLEQsQykKfTsKWUFIT08uZXh0ZW5kKFlBSE9PLnV0aWwuUG9pbnQsWUFIT08udXRp
bC5SZWdpb24pOwooZnVuY3Rpb24oKXt2YXIgcz1ZQUhPTy51dGlsLHQ9ImNsaWVudFRvcCIsbz0i
Y2xpZW50TGVmdCIsaz0icGFyZW50Tm9kZSIsaj0icmlnaHQiLFg9Imhhc0xheW91dCIsbD0icHgi
LFo9Im9wYWNpdHkiLGk9ImF1dG8iLHE9ImJvcmRlckxlZnRXaWR0aCIsbj0iYm9yZGVyVG9wV2lk
dGgiLGU9ImJvcmRlclJpZ2h0V2lkdGgiLFk9ImJvcmRlckJvdHRvbVdpZHRoIixiPSJ2aXNpYmxl
IixkPSJ0cmFuc3BhcmVudCIsZz0iaGVpZ2h0IixwPSJ3aWR0aCIsbT0ic3R5bGUiLGE9ImN1cnJl
bnRTdHlsZSIsYz0vXndpZHRofGhlaWdodCQvLGY9L14oXGRbLlxkXSopKyhlbXxleHxweHxnZHxy
ZW18dnd8dmh8dm18Y2h8bW18Y218aW58cHR8cGN8ZGVnfHJhZHxtc3xzfGh6fGtoenwlKXsxfT8v
aSxoPXtnZXQ6ZnVuY3Rpb24oRCxCKXt2YXIgQz0iIixBPURbYV1bQl07CmlmKEI9PT1aKXtDPXMu
RG9tLmdldFN0eWxlKEQsWikKfWVsc2V7aWYoIUF8fChBLmluZGV4T2YmJkEuaW5kZXhPZihsKT4t
MSkpe0M9QQp9ZWxzZXtpZihzLkRvbS5JRV9DT01QVVRFRFtCXSl7Qz1zLkRvbS5JRV9DT01QVVRF
RFtCXShELEIpCn1lbHNle2lmKGYudGVzdChBKSl7Qz1zLkRvbS5JRS5Db21wdXRlZFN0eWxlLmdl
dFBpeGVsKEQsQikKfWVsc2V7Qz1BCn19fX1yZXR1cm4gQwp9LGdldE9mZnNldDpmdW5jdGlvbihE
LEMpe3ZhciBBPURbYV1bQ10sSD1DLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK0Muc3Vic3RyKDEp
LEc9Im9mZnNldCIrSCxGPSJwaXhlbCIrSCxCPSIiLEU7CmlmKEE9PWkpe0U9RFtHXTsKaWYoRT09
PXVuZGVmaW5lZCl7Qj0wCn1CPUU7CmlmKGMudGVzdChDKSl7RFttXVtDXT1FOwppZihEW0ddPkUp
e0I9RS0oRFtHXS1FKQp9RFttXVtDXT1pCn19ZWxzZXtpZighRFttXVtGXSYmIURbbV1bQ10pe0Rb
bV1bQ109QQp9Qj1EW21dW0ZdCn1yZXR1cm4gQitsCn0sZ2V0Qm9yZGVyV2lkdGg6ZnVuY3Rpb24o
QyxBKXt2YXIgQj1udWxsOwppZighQ1thXVtYXSl7Q1ttXS56b29tPTEKfXN3aXRjaChBKXtjYXNl
IG46Qj1DW3RdOwpicmVhazsKY2FzZSBZOkI9Qy5vZmZzZXRIZWlnaHQtQy5jbGllbnRIZWlnaHQt
Q1t0XTsKYnJlYWs7CmNhc2UgcTpCPUNbb107CmJyZWFrOwpjYXNlIGU6Qj1DLm9mZnNldFdpZHRo
LUMuY2xpZW50V2lkdGgtQ1tvXTsKYnJlYWsKfXJldHVybiBCK2wKfSxnZXRQaXhlbDpmdW5jdGlv
bihELEUpe3ZhciBCPW51bGwsQT1EW2FdW2pdLEM9RFthXVtFXTsKRFttXVtqXT1DOwpCPURbbV0u
cGl4ZWxSaWdodDsKRFttXVtqXT1BOwpyZXR1cm4gQitsCn0sZ2V0TWFyZ2luOmZ1bmN0aW9uKEIs
Qyl7dmFyIEE7CmlmKEJbYV1bQ109PWkpe0E9MCtsCn1lbHNle0E9cy5Eb20uSUUuQ29tcHV0ZWRT
dHlsZS5nZXRQaXhlbChCLEMpCn1yZXR1cm4gQQp9LGdldFZpc2liaWxpdHk6ZnVuY3Rpb24oQixD
KXt2YXIgQTsKd2hpbGUoKEE9QlthXSkmJkFbQ109PSJpbmhlcml0Iil7Qj1CW2tdCn1yZXR1cm4o
QSk/QVtDXTpiCn0sZ2V0Q29sb3I6ZnVuY3Rpb24oQSxCKXtyZXR1cm4gcy5Eb20uQ29sb3IudG9S
R0IoQVthXVtCXSl8fGQKfSxnZXRCb3JkZXJDb2xvcjpmdW5jdGlvbihDLEQpe3ZhciBCPUNbYV0s
QT1CW0RdfHxCLmNvbG9yOwpyZXR1cm4gcy5Eb20uQ29sb3IudG9SR0Iocy5Eb20uQ29sb3IudG9I
ZXgoQSkpCn19LHI9e307CnIudG9wPXIucmlnaHQ9ci5ib3R0b209ci5sZWZ0PXJbcF09cltnXT1o
LmdldE9mZnNldDsKci5jb2xvcj1oLmdldENvbG9yOwpyW25dPXJbZV09cltZXT1yW3FdPWguZ2V0
Qm9yZGVyV2lkdGg7CnIubWFyZ2luVG9wPXIubWFyZ2luUmlnaHQ9ci5tYXJnaW5Cb3R0b209ci5t
YXJnaW5MZWZ0PWguZ2V0TWFyZ2luOwpyLnZpc2liaWxpdHk9aC5nZXRWaXNpYmlsaXR5OwpyLmJv
cmRlckNvbG9yPXIuYm9yZGVyVG9wQ29sb3I9ci5ib3JkZXJSaWdodENvbG9yPXIuYm9yZGVyQm90
dG9tQ29sb3I9ci5ib3JkZXJMZWZ0Q29sb3I9aC5nZXRCb3JkZXJDb2xvcjsKcy5Eb20uSUVfQ09N
UFVURUQ9cjsKcy5Eb20uSUVfQ29tcHV0ZWRTdHlsZT1oCn0pKCk7CihmdW5jdGlvbigpe3ZhciBH
PSJ0b1N0cmluZyIsRT1wYXJzZUludCxIPVJlZ0V4cCxGPVlBSE9PLnV0aWw7CkYuRG9tLkNvbG9y
PXtLRVlXT1JEUzp7YmxhY2s6IjAwMCIsc2lsdmVyOiJjMGMwYzAiLGdyYXk6IjgwODA4MCIsd2hp
dGU6ImZmZiIsbWFyb29uOiI4MDAwMDAiLHJlZDoiZjAwIixwdXJwbGU6IjgwMDA4MCIsZnVjaHNp
YToiZjBmIixncmVlbjoiMDA4MDAwIixsaW1lOiIwZjAiLG9saXZlOiI4MDgwMDAiLHllbGxvdzoi
ZmYwIixuYXZ5OiIwMDAwODAiLGJsdWU6IjAwZiIsdGVhbDoiMDA4MDgwIixhcXVhOiIwZmYifSxy
ZV9SR0I6L15yZ2JcKChbMC05XSspXHMqLFxzKihbMC05XSspXHMqLFxzKihbMC05XSspXCkkL2ks
cmVfaGV4Oi9eIz8oWzAtOUEtRl17Mn0pKFswLTlBLUZdezJ9KShbMC05QS1GXXsyfSkkL2kscmVf
aGV4MzovKFswLTlBLUZdKS9naSx0b1JHQjpmdW5jdGlvbihBKXtpZighRi5Eb20uQ29sb3IucmVf
UkdCLnRlc3QoQSkpe0E9Ri5Eb20uQ29sb3IudG9IZXgoQSkKfWlmKEYuRG9tLkNvbG9yLnJlX2hl
eC5leGVjKEEpKXtBPSJyZ2IoIitbRShILiQxLDE2KSxFKEguJDIsMTYpLEUoSC4kMywxNildLmpv
aW4oIiwgIikrIikiCn1yZXR1cm4gQQp9LHRvSGV4OmZ1bmN0aW9uKEEpe0E9Ri5Eb20uQ29sb3Iu
S0VZV09SRFNbQV18fEE7CmlmKEYuRG9tLkNvbG9yLnJlX1JHQi5leGVjKEEpKXt2YXIgQj0oSC4k
MS5sZW5ndGg9PT0xKT8iMCIrSC4kMTpOdW1iZXIoSC4kMSksQz0oSC4kMi5sZW5ndGg9PT0xKT8i
MCIrSC4kMjpOdW1iZXIoSC4kMiksRD0oSC4kMy5sZW5ndGg9PT0xKT8iMCIrSC4kMzpOdW1iZXIo
SC4kMyk7CkE9W0JbR10oMTYpLENbR10oMTYpLERbR10oMTYpXS5qb2luKCIiKQp9aWYoQS5sZW5n
dGg8Nil7QT1BLnJlcGxhY2UoRi5Eb20uQ29sb3IucmVfaGV4MywiJDEkMSIpCn1pZihBIT09InRy
YW5zcGFyZW50IiYmQS5pbmRleE9mKCIjIik8MCl7QT0iIyIrQQp9cmV0dXJuIEEudG9Mb3dlckNh
c2UoKQp9fQp9KCkpOwpZQUhPTy5yZWdpc3RlcigiZG9tIixZQUhPTy51dGlsLkRvbSx7dmVyc2lv
bjoiMi44LjByNCIsYnVpbGQ6IjI0NDkifSk7CllBSE9PLnV0aWwuQ3VzdG9tRXZlbnQ9ZnVuY3Rp
b24oSixLLEwsRyxJKXt0aGlzLnR5cGU9SjsKdGhpcy5zY29wZT1LfHx3aW5kb3c7CnRoaXMuc2ls
ZW50PUw7CnRoaXMuZmlyZU9uY2U9STsKdGhpcy5maXJlZD1mYWxzZTsKdGhpcy5maXJlZFdpdGg9
bnVsbDsKdGhpcy5zaWduYXR1cmU9R3x8WUFIT08udXRpbC5DdXN0b21FdmVudC5MSVNUOwp0aGlz
LnN1YnNjcmliZXJzPVtdOwppZighdGhpcy5zaWxlbnQpe312YXIgSD0iX1lVSUNFT25TdWJzY3Jp
YmUiOwppZihKIT09SCl7dGhpcy5zdWJzY3JpYmVFdmVudD1uZXcgWUFIT08udXRpbC5DdXN0b21F
dmVudChILHRoaXMsdHJ1ZSkKfXRoaXMubGFzdEVycm9yPW51bGwKfTsKWUFIT08udXRpbC5DdXN0
b21FdmVudC5MSVNUPTA7CllBSE9PLnV0aWwuQ3VzdG9tRXZlbnQuRkxBVD0xOwpZQUhPTy51dGls
LkN1c3RvbUV2ZW50LnByb3RvdHlwZT17c3Vic2NyaWJlOmZ1bmN0aW9uKEgsRyxGKXtpZighSCl7
dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNhbGxiYWNrIGZvciBzdWJzY3JpYmVyIHRvICciK3Ro
aXMudHlwZSsiJyIpCn1pZih0aGlzLnN1YnNjcmliZUV2ZW50KXt0aGlzLnN1YnNjcmliZUV2ZW50
LmZpcmUoSCxHLEYpCn12YXIgRT1uZXcgWUFIT08udXRpbC5TdWJzY3JpYmVyKEgsRyxGKTsKaWYo
dGhpcy5maXJlT25jZSYmdGhpcy5maXJlZCl7dGhpcy5ub3RpZnkoRSx0aGlzLmZpcmVkV2l0aCkK
fWVsc2V7dGhpcy5zdWJzY3JpYmVycy5wdXNoKEUpCn19LHVuc3Vic2NyaWJlOmZ1bmN0aW9uKEos
SCl7aWYoIUope3JldHVybiB0aGlzLnVuc3Vic2NyaWJlQWxsKCkKfXZhciBJPWZhbHNlOwpmb3Io
dmFyIEw9MCxHPXRoaXMuc3Vic2NyaWJlcnMubGVuZ3RoOwpMPEc7CisrTCl7dmFyIEs9dGhpcy5z
dWJzY3JpYmVyc1tMXTsKaWYoSyYmSy5jb250YWlucyhKLEgpKXt0aGlzLl9kZWxldGUoTCk7Ckk9
dHJ1ZQp9fXJldHVybiBJCn0sZmlyZTpmdW5jdGlvbigpe3RoaXMubGFzdEVycm9yPW51bGw7CnZh
ciBKPVtdLEk9dGhpcy5zdWJzY3JpYmVycy5sZW5ndGg7CnZhciBOPVtdLnNsaWNlLmNhbGwoYXJn
dW1lbnRzLDApLE89dHJ1ZSxMLFA9ZmFsc2U7CmlmKHRoaXMuZmlyZU9uY2Upe2lmKHRoaXMuZmly
ZWQpe3JldHVybiB0cnVlCn1lbHNle3RoaXMuZmlyZWRXaXRoPU4KfX10aGlzLmZpcmVkPXRydWU7
CmlmKCFJJiZ0aGlzLnNpbGVudCl7cmV0dXJuIHRydWUKfWlmKCF0aGlzLnNpbGVudCl7fXZhciBN
PXRoaXMuc3Vic2NyaWJlcnMuc2xpY2UoKTsKZm9yKEw9MDsKTDxJOworK0wpe3ZhciBLPU1bTF07
CmlmKCFLKXtQPXRydWUKfWVsc2V7Tz10aGlzLm5vdGlmeShLLE4pOwppZihmYWxzZT09PU8pe2lm
KCF0aGlzLnNpbGVudCl7fWJyZWFrCn19fXJldHVybihPIT09ZmFsc2UpCn0sbm90aWZ5OmZ1bmN0
aW9uKEwsTyl7dmFyIFAsSj1udWxsLE09TC5nZXRTY29wZSh0aGlzLnNjb3BlKSxJPVlBSE9PLnV0
aWwuRXZlbnQudGhyb3dFcnJvcnM7CmlmKCF0aGlzLnNpbGVudCl7fWlmKHRoaXMuc2lnbmF0dXJl
PT1ZQUhPTy51dGlsLkN1c3RvbUV2ZW50LkZMQVQpe2lmKE8ubGVuZ3RoPjApe0o9T1swXQp9dHJ5
e1A9TC5mbi5jYWxsKE0sSixMLm9iaikKfWNhdGNoKEspe3RoaXMubGFzdEVycm9yPUs7CmlmKEkp
e3Rocm93IEsKfX19ZWxzZXt0cnl7UD1MLmZuLmNhbGwoTSx0aGlzLnR5cGUsTyxMLm9iaikKfWNh
dGNoKE4pe3RoaXMubGFzdEVycm9yPU47CmlmKEkpe3Rocm93IE4KfX19cmV0dXJuIFAKfSx1bnN1
YnNjcmliZUFsbDpmdW5jdGlvbigpe3ZhciBDPXRoaXMuc3Vic2NyaWJlcnMubGVuZ3RoLEQ7CmZv
cihEPUMtMTsKRD4tMTsKRC0tKXt0aGlzLl9kZWxldGUoRCkKfXRoaXMuc3Vic2NyaWJlcnM9W107
CnJldHVybiBDCn0sX2RlbGV0ZTpmdW5jdGlvbihDKXt2YXIgRD10aGlzLnN1YnNjcmliZXJzW0Nd
OwppZihEKXtkZWxldGUgRC5mbjsKZGVsZXRlIEQub2JqCn10aGlzLnN1YnNjcmliZXJzLnNwbGlj
ZShDLDEpCn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iQ3VzdG9tRXZlbnQ6ICciK3RoaXMu
dHlwZSsiJywgY29udGV4dDogIit0aGlzLnNjb3BlCn19OwpZQUhPTy51dGlsLlN1YnNjcmliZXI9
ZnVuY3Rpb24oRCxGLEUpe3RoaXMuZm49RDsKdGhpcy5vYmo9WUFIT08ubGFuZy5pc1VuZGVmaW5l
ZChGKT9udWxsOkY7CnRoaXMub3ZlcnJpZGVDb250ZXh0PUUKfTsKWUFIT08udXRpbC5TdWJzY3Jp
YmVyLnByb3RvdHlwZS5nZXRTY29wZT1mdW5jdGlvbihCKXtpZih0aGlzLm92ZXJyaWRlQ29udGV4
dCl7aWYodGhpcy5vdmVycmlkZUNvbnRleHQ9PT10cnVlKXtyZXR1cm4gdGhpcy5vYmoKfWVsc2V7
cmV0dXJuIHRoaXMub3ZlcnJpZGVDb250ZXh0Cn19cmV0dXJuIEIKfTsKWUFIT08udXRpbC5TdWJz
Y3JpYmVyLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihDLEQpe2lmKEQpe3JldHVybih0aGlz
LmZuPT1DJiZ0aGlzLm9iaj09RCkKfWVsc2V7cmV0dXJuKHRoaXMuZm49PUMpCn19OwpZQUhPTy51
dGlsLlN1YnNjcmliZXIucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlN1YnNj
cmliZXIgeyBvYmo6ICIrdGhpcy5vYmorIiwgb3ZlcnJpZGVDb250ZXh0OiAiKyh0aGlzLm92ZXJy
aWRlQ29udGV4dHx8Im5vIikrIiB9Igp9OwppZighWUFIT08udXRpbC5FdmVudCl7WUFIT08udXRp
bC5FdmVudD1mdW5jdGlvbigpe3ZhciBSPWZhbHNlLFE9W10sTz1bXSxOPTAsVD1bXSxNPTAsTD17
NjMyMzI6MzgsNjMyMzM6NDAsNjMyMzQ6MzcsNjMyMzU6MzksNjMyNzY6MzMsNjMyNzc6MzQsMjU6
OX0sSz1ZQUhPTy5lbnYudWEuaWUsUz0iZm9jdXNpbiIsUD0iZm9jdXNvdXQiOwpyZXR1cm57UE9M
TF9SRVRSWVM6NTAwLFBPTExfSU5URVJWQUw6NDAsRUw6MCxUWVBFOjEsRk46MixXRk46MyxVTkxP
QURfT0JKOjMsQURKX1NDT1BFOjQsT0JKOjUsT1ZFUlJJREU6NixDQVBUVVJFOjcsbGFzdEVycm9y
Om51bGwsaXNTYWZhcmk6WUFIT08uZW52LnVhLndlYmtpdCx3ZWJraXQ6WUFIT08uZW52LnVhLndl
YmtpdCxpc0lFOkssX2ludGVydmFsOm51bGwsX2RyaTpudWxsLF9zcGVjaWFsVHlwZXM6e2ZvY3Vz
aW46KEs/ImZvY3VzaW4iOiJmb2N1cyIpLGZvY3Vzb3V0OihLPyJmb2N1c291dCI6ImJsdXIiKX0s
RE9NUmVhZHk6ZmFsc2UsdGhyb3dFcnJvcnM6ZmFsc2Usc3RhcnRJbnRlcnZhbDpmdW5jdGlvbigp
e2lmKCF0aGlzLl9pbnRlcnZhbCl7dGhpcy5faW50ZXJ2YWw9WUFIT08ubGFuZy5sYXRlcih0aGlz
LlBPTExfSU5URVJWQUwsdGhpcyx0aGlzLl90cnlQcmVsb2FkQXR0YWNoLG51bGwsdHJ1ZSkKfX0s
b25BdmFpbGFibGU6ZnVuY3Rpb24oQyxHLEUsRCxGKXt2YXIgQj0oWUFIT08ubGFuZy5pc1N0cmlu
ZyhDKSk/W0NdOkM7CmZvcih2YXIgQT0wOwpBPEIubGVuZ3RoOwpBPUErMSl7VC5wdXNoKHtpZDpC
W0FdLGZuOkcsb2JqOkUsb3ZlcnJpZGVDb250ZXh0OkQsY2hlY2tSZWFkeTpGfSkKfU49dGhpcy5Q
T0xMX1JFVFJZUzsKdGhpcy5zdGFydEludGVydmFsKCkKfSxvbkNvbnRlbnRSZWFkeTpmdW5jdGlv
bihDLEIsQSxEKXt0aGlzLm9uQXZhaWxhYmxlKEMsQixBLEQsdHJ1ZSkKfSxvbkRPTVJlYWR5OmZ1
bmN0aW9uKCl7dGhpcy5ET01SZWFkeUV2ZW50LnN1YnNjcmliZS5hcHBseSh0aGlzLkRPTVJlYWR5
RXZlbnQsYXJndW1lbnRzKQp9LF9hZGRMaXN0ZW5lcjpmdW5jdGlvbihiLGQsRCxKLEYsQSl7aWYo
IUR8fCFELmNhbGwpe3JldHVybiBmYWxzZQp9aWYodGhpcy5faXNWYWxpZENvbGxlY3Rpb24oYikp
e3ZhciBDPXRydWU7CmZvcih2YXIgST0wLEc9Yi5sZW5ndGg7Ckk8RzsKKytJKXtDPXRoaXMub24o
YltJXSxkLEQsSixGKSYmQwp9cmV0dXJuIEMKfWVsc2V7aWYoWUFIT08ubGFuZy5pc1N0cmluZyhi
KSl7dmFyIFo9dGhpcy5nZXRFbChiKTsKaWYoWil7Yj1aCn1lbHNle3RoaXMub25BdmFpbGFibGUo
YixmdW5jdGlvbigpe1lBSE9PLnV0aWwuRXZlbnQuX2FkZExpc3RlbmVyKGIsZCxELEosRixBKQp9
KTsKcmV0dXJuIHRydWUKfX19aWYoIWIpe3JldHVybiBmYWxzZQp9aWYoInVubG9hZCI9PWQmJkoh
PT10aGlzKXtPW08ubGVuZ3RoXT1bYixkLEQsSixGXTsKcmV0dXJuIHRydWUKfXZhciBjPWI7Cmlm
KEYpe2lmKEY9PT10cnVlKXtjPUoKfWVsc2V7Yz1GCn19dmFyIGE9ZnVuY3Rpb24oVSl7cmV0dXJu
IEQuY2FsbChjLFlBSE9PLnV0aWwuRXZlbnQuZ2V0RXZlbnQoVSxiKSxKKQp9Owp2YXIgQj1bYixk
LEQsYSxjLEosRixBXTsKdmFyIEg9US5sZW5ndGg7ClFbSF09QjsKdHJ5e3RoaXMuX3NpbXBsZUFk
ZChiLGQsYSxBKQp9Y2F0Y2goRSl7dGhpcy5sYXN0RXJyb3I9RTsKdGhpcy5yZW1vdmVMaXN0ZW5l
cihiLGQsRCk7CnJldHVybiBmYWxzZQp9cmV0dXJuIHRydWUKfSxfZ2V0VHlwZTpmdW5jdGlvbihB
KXtyZXR1cm4gdGhpcy5fc3BlY2lhbFR5cGVzW0FdfHxBCn0sYWRkTGlzdGVuZXI6ZnVuY3Rpb24o
RixDLEEsRSxEKXt2YXIgQj0oKEM9PVN8fEM9PVApJiYhWUFIT08uZW52LnVhLmllKT90cnVlOmZh
bHNlOwpyZXR1cm4gdGhpcy5fYWRkTGlzdGVuZXIoRix0aGlzLl9nZXRUeXBlKEMpLEEsRSxELEIp
Cn0sYWRkRm9jdXNMaXN0ZW5lcjpmdW5jdGlvbihBLEIsRCxDKXtyZXR1cm4gdGhpcy5vbihBLFMs
QixELEMpCn0scmVtb3ZlRm9jdXNMaXN0ZW5lcjpmdW5jdGlvbihBLEIpe3JldHVybiB0aGlzLnJl
bW92ZUxpc3RlbmVyKEEsUyxCKQp9LGFkZEJsdXJMaXN0ZW5lcjpmdW5jdGlvbihBLEIsRCxDKXty
ZXR1cm4gdGhpcy5vbihBLFAsQixELEMpCn0scmVtb3ZlQmx1ckxpc3RlbmVyOmZ1bmN0aW9uKEEs
Qil7cmV0dXJuIHRoaXMucmVtb3ZlTGlzdGVuZXIoQSxQLEIpCn0scmVtb3ZlTGlzdGVuZXI6ZnVu
Y3Rpb24oSixWLEQpe3ZhciBJLEYsQTsKVj10aGlzLl9nZXRUeXBlKFYpOwppZih0eXBlb2YgSj09
InN0cmluZyIpe0o9dGhpcy5nZXRFbChKKQp9ZWxzZXtpZih0aGlzLl9pc1ZhbGlkQ29sbGVjdGlv
bihKKSl7dmFyIEM9dHJ1ZTsKZm9yKEk9Si5sZW5ndGgtMTsKST4tMTsKSS0tKXtDPSh0aGlzLnJl
bW92ZUxpc3RlbmVyKEpbSV0sVixEKSYmQykKfXJldHVybiBDCn19aWYoIUR8fCFELmNhbGwpe3Jl
dHVybiB0aGlzLnB1cmdlRWxlbWVudChKLGZhbHNlLFYpCn1pZigidW5sb2FkIj09Vil7Zm9yKEk9
Ty5sZW5ndGgtMTsKST4tMTsKSS0tKXtBPU9bSV07CmlmKEEmJkFbMF09PUomJkFbMV09PVYmJkFb
Ml09PUQpe08uc3BsaWNlKEksMSk7CnJldHVybiB0cnVlCn19cmV0dXJuIGZhbHNlCn12YXIgSD1u
dWxsOwp2YXIgRz1hcmd1bWVudHNbM107CmlmKCJ1bmRlZmluZWQiPT09dHlwZW9mIEcpe0c9dGhp
cy5fZ2V0Q2FjaGVJbmRleChRLEosVixEKQp9aWYoRz49MCl7SD1RW0ddCn1pZighSnx8IUgpe3Jl
dHVybiBmYWxzZQp9dmFyIEI9SFt0aGlzLkNBUFRVUkVdPT09dHJ1ZT90cnVlOmZhbHNlOwp0cnl7
dGhpcy5fc2ltcGxlUmVtb3ZlKEosVixIW3RoaXMuV0ZOXSxCKQp9Y2F0Y2goRSl7dGhpcy5sYXN0
RXJyb3I9RTsKcmV0dXJuIGZhbHNlCn1kZWxldGUgUVtHXVt0aGlzLldGTl07CmRlbGV0ZSBRW0dd
W3RoaXMuRk5dOwpRLnNwbGljZShHLDEpOwpyZXR1cm4gdHJ1ZQp9LGdldFRhcmdldDpmdW5jdGlv
bihDLEEpe3ZhciBCPUMudGFyZ2V0fHxDLnNyY0VsZW1lbnQ7CnJldHVybiB0aGlzLnJlc29sdmVU
ZXh0Tm9kZShCKQp9LHJlc29sdmVUZXh0Tm9kZTpmdW5jdGlvbihBKXt0cnl7aWYoQSYmMz09QS5u
b2RlVHlwZSl7cmV0dXJuIEEucGFyZW50Tm9kZQp9fWNhdGNoKEIpe31yZXR1cm4gQQp9LGdldFBh
Z2VYOmZ1bmN0aW9uKEEpe3ZhciBCPUEucGFnZVg7CmlmKCFCJiYwIT09Qil7Qj1BLmNsaWVudFh8
fDA7CmlmKHRoaXMuaXNJRSl7Qis9dGhpcy5fZ2V0U2Nyb2xsTGVmdCgpCn19cmV0dXJuIEIKfSxn
ZXRQYWdlWTpmdW5jdGlvbihCKXt2YXIgQT1CLnBhZ2VZOwppZighQSYmMCE9PUEpe0E9Qi5jbGll
bnRZfHwwOwppZih0aGlzLmlzSUUpe0ErPXRoaXMuX2dldFNjcm9sbFRvcCgpCn19cmV0dXJuIEEK
fSxnZXRYWTpmdW5jdGlvbihBKXtyZXR1cm5bdGhpcy5nZXRQYWdlWChBKSx0aGlzLmdldFBhZ2VZ
KEEpXQp9LGdldFJlbGF0ZWRUYXJnZXQ6ZnVuY3Rpb24oQSl7dmFyIEI9QS5yZWxhdGVkVGFyZ2V0
OwppZighQil7aWYoQS50eXBlPT0ibW91c2VvdXQiKXtCPUEudG9FbGVtZW50Cn1lbHNle2lmKEEu
dHlwZT09Im1vdXNlb3ZlciIpe0I9QS5mcm9tRWxlbWVudAp9fX1yZXR1cm4gdGhpcy5yZXNvbHZl
VGV4dE5vZGUoQikKfSxnZXRUaW1lOmZ1bmN0aW9uKEMpe2lmKCFDLnRpbWUpe3ZhciBBPW5ldyBE
YXRlKCkuZ2V0VGltZSgpOwp0cnl7Qy50aW1lPUEKfWNhdGNoKEIpe3RoaXMubGFzdEVycm9yPUI7
CnJldHVybiBBCn19cmV0dXJuIEMudGltZQp9LHN0b3BFdmVudDpmdW5jdGlvbihBKXt0aGlzLnN0
b3BQcm9wYWdhdGlvbihBKTsKdGhpcy5wcmV2ZW50RGVmYXVsdChBKQp9LHN0b3BQcm9wYWdhdGlv
bjpmdW5jdGlvbihBKXtpZihBLnN0b3BQcm9wYWdhdGlvbil7QS5zdG9wUHJvcGFnYXRpb24oKQp9
ZWxzZXtBLmNhbmNlbEJ1YmJsZT10cnVlCn19LHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKEEpe2lm
KEEucHJldmVudERlZmF1bHQpe0EucHJldmVudERlZmF1bHQoKQp9ZWxzZXtBLnJldHVyblZhbHVl
PWZhbHNlCn19LGdldEV2ZW50OmZ1bmN0aW9uKEQsQil7dmFyIEE9RHx8d2luZG93LmV2ZW50Owpp
ZighQSl7dmFyIEM9dGhpcy5nZXRFdmVudC5jYWxsZXI7CndoaWxlKEMpe0E9Qy5hcmd1bWVudHNb
MF07CmlmKEEmJkV2ZW50PT1BLmNvbnN0cnVjdG9yKXticmVhawp9Qz1DLmNhbGxlcgp9fXJldHVy
biBBCn0sZ2V0Q2hhckNvZGU6ZnVuY3Rpb24oQSl7dmFyIEI9QS5rZXlDb2RlfHxBLmNoYXJDb2Rl
fHwwOwppZihZQUhPTy5lbnYudWEud2Via2l0JiYoQiBpbiBMKSl7Qj1MW0JdCn1yZXR1cm4gQgp9
LF9nZXRDYWNoZUluZGV4OmZ1bmN0aW9uKEcsRCxDLEUpe2Zvcih2YXIgRj0wLEE9Ry5sZW5ndGg7
CkY8QTsKRj1GKzEpe3ZhciBCPUdbRl07CmlmKEImJkJbdGhpcy5GTl09PUUmJkJbdGhpcy5FTF09
PUQmJkJbdGhpcy5UWVBFXT09Qyl7cmV0dXJuIEYKfX1yZXR1cm4gLTEKfSxnZW5lcmF0ZUlkOmZ1
bmN0aW9uKEIpe3ZhciBBPUIuaWQ7CmlmKCFBKXtBPSJ5dWlldnRhdXRvaWQtIitNOworK007CkIu
aWQ9QQp9cmV0dXJuIEEKfSxfaXNWYWxpZENvbGxlY3Rpb246ZnVuY3Rpb24oQSl7dHJ5e3JldHVy
bihBJiZ0eXBlb2YgQSE9PSJzdHJpbmciJiZBLmxlbmd0aCYmIUEudGFnTmFtZSYmIUEuYWxlcnQm
JnR5cGVvZiBBWzBdIT09InVuZGVmaW5lZCIpCn1jYXRjaChCKXtyZXR1cm4gZmFsc2UKfX0sZWxD
YWNoZTp7fSxnZXRFbDpmdW5jdGlvbihBKXtyZXR1cm4odHlwZW9mIEE9PT0ic3RyaW5nIik/ZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoQSk6QQp9LGNsZWFyQ2FjaGU6ZnVuY3Rpb24oKXt9LERPTVJl
YWR5RXZlbnQ6bmV3IFlBSE9PLnV0aWwuQ3VzdG9tRXZlbnQoIkRPTVJlYWR5IixZQUhPTywwLDAs
MSksX2xvYWQ6ZnVuY3Rpb24oQSl7aWYoIVIpe1I9dHJ1ZTsKdmFyIEI9WUFIT08udXRpbC5FdmVu
dDsKQi5fcmVhZHkoKTsKQi5fdHJ5UHJlbG9hZEF0dGFjaCgpCn19LF9yZWFkeTpmdW5jdGlvbihB
KXt2YXIgQj1ZQUhPTy51dGlsLkV2ZW50OwppZighQi5ET01SZWFkeSl7Qi5ET01SZWFkeT10cnVl
OwpCLkRPTVJlYWR5RXZlbnQuZmlyZSgpOwpCLl9zaW1wbGVSZW1vdmUoZG9jdW1lbnQsIkRPTUNv
bnRlbnRMb2FkZWQiLEIuX3JlYWR5KQp9fSxfdHJ5UHJlbG9hZEF0dGFjaDpmdW5jdGlvbigpe2lm
KFQubGVuZ3RoPT09MCl7Tj0wOwppZih0aGlzLl9pbnRlcnZhbCl7dGhpcy5faW50ZXJ2YWwuY2Fu
Y2VsKCk7CnRoaXMuX2ludGVydmFsPW51bGwKfXJldHVybiAKfWlmKHRoaXMubG9ja2VkKXtyZXR1
cm4gCn1pZih0aGlzLmlzSUUpe2lmKCF0aGlzLkRPTVJlYWR5KXt0aGlzLnN0YXJ0SW50ZXJ2YWwo
KTsKcmV0dXJuIAp9fXRoaXMubG9ja2VkPXRydWU7CnZhciBEPSFSOwppZighRCl7RD0oTj4wJiZU
Lmxlbmd0aD4wKQp9dmFyIEU9W107CnZhciBDPWZ1bmN0aW9uKEosSSl7dmFyIFY9SjsKaWYoSS5v
dmVycmlkZUNvbnRleHQpe2lmKEkub3ZlcnJpZGVDb250ZXh0PT09dHJ1ZSl7Vj1JLm9iagp9ZWxz
ZXtWPUkub3ZlcnJpZGVDb250ZXh0Cn19SS5mbi5jYWxsKFYsSS5vYmopCn07CnZhciBBLEIsRixH
LEg9W107CmZvcihBPTAsQj1ULmxlbmd0aDsKQTxCOwpBPUErMSl7Rj1UW0FdOwppZihGKXtHPXRo
aXMuZ2V0RWwoRi5pZCk7CmlmKEcpe2lmKEYuY2hlY2tSZWFkeSl7aWYoUnx8Ry5uZXh0U2libGlu
Z3x8IUQpe0gucHVzaChGKTsKVFtBXT1udWxsCn19ZWxzZXtDKEcsRik7ClRbQV09bnVsbAp9fWVs
c2V7RS5wdXNoKEYpCn19fWZvcihBPTAsQj1ILmxlbmd0aDsKQTxCOwpBPUErMSl7Rj1IW0FdOwpD
KHRoaXMuZ2V0RWwoRi5pZCksRikKfU4tLTsKaWYoRCl7Zm9yKEE9VC5sZW5ndGgtMTsKQT4tMTsK
QS0tKXtGPVRbQV07CmlmKCFGfHwhRi5pZCl7VC5zcGxpY2UoQSwxKQp9fXRoaXMuc3RhcnRJbnRl
cnZhbCgpCn1lbHNle2lmKHRoaXMuX2ludGVydmFsKXt0aGlzLl9pbnRlcnZhbC5jYW5jZWwoKTsK
dGhpcy5faW50ZXJ2YWw9bnVsbAp9fXRoaXMubG9ja2VkPWZhbHNlCn0scHVyZ2VFbGVtZW50OmZ1
bmN0aW9uKEYsRSxDKXt2YXIgSD0oWUFIT08ubGFuZy5pc1N0cmluZyhGKSk/dGhpcy5nZXRFbChG
KTpGOwp2YXIgRD10aGlzLmdldExpc3RlbmVycyhILEMpLEcsQjsKaWYoRCl7Zm9yKEc9RC5sZW5n
dGgtMTsKRz4tMTsKRy0tKXt2YXIgQT1EW0ddOwp0aGlzLnJlbW92ZUxpc3RlbmVyKEgsQS50eXBl
LEEuZm4pCn19aWYoRSYmSCYmSC5jaGlsZE5vZGVzKXtmb3IoRz0wLEI9SC5jaGlsZE5vZGVzLmxl
bmd0aDsKRzxCOworK0cpe3RoaXMucHVyZ2VFbGVtZW50KEguY2hpbGROb2Rlc1tHXSxFLEMpCn19
fSxnZXRMaXN0ZW5lcnM6ZnVuY3Rpb24oSCxKKXt2YXIgRT1bXSxJOwppZighSil7ST1bUSxPXQp9
ZWxzZXtpZihKPT09InVubG9hZCIpe0k9W09dCn1lbHNle0o9dGhpcy5fZ2V0VHlwZShKKTsKST1b
UV0KfX12YXIgQz0oWUFIT08ubGFuZy5pc1N0cmluZyhIKSk/dGhpcy5nZXRFbChIKTpIOwpmb3Io
dmFyIEY9MDsKRjxJLmxlbmd0aDsKRj1GKzEpe3ZhciBBPUlbRl07CmlmKEEpe2Zvcih2YXIgRD0w
LEI9QS5sZW5ndGg7CkQ8QjsKKytEKXt2YXIgRz1BW0RdOwppZihHJiZHW3RoaXMuRUxdPT09QyYm
KCFKfHxKPT09R1t0aGlzLlRZUEVdKSl7RS5wdXNoKHt0eXBlOkdbdGhpcy5UWVBFXSxmbjpHW3Ro
aXMuRk5dLG9iajpHW3RoaXMuT0JKXSxhZGp1c3Q6R1t0aGlzLk9WRVJSSURFXSxzY29wZTpHW3Ro
aXMuQURKX1NDT1BFXSxpbmRleDpEfSkKfX19fXJldHVybihFLmxlbmd0aCk/RTpudWxsCn0sX3Vu
bG9hZDpmdW5jdGlvbihCKXt2YXIgSD1ZQUhPTy51dGlsLkV2ZW50LEUsRixHLEMsRCxBPU8uc2xp
Y2UoKSxJOwpmb3IoRT0wLEM9Ty5sZW5ndGg7CkU8QzsKKytFKXtHPUFbRV07CmlmKEcpe0k9d2lu
ZG93OwppZihHW0guQURKX1NDT1BFXSl7aWYoR1tILkFESl9TQ09QRV09PT10cnVlKXtJPUdbSC5V
TkxPQURfT0JKXQp9ZWxzZXtJPUdbSC5BREpfU0NPUEVdCn19R1tILkZOXS5jYWxsKEksSC5nZXRF
dmVudChCLEdbSC5FTF0pLEdbSC5VTkxPQURfT0JKXSk7CkFbRV09bnVsbAp9fUc9bnVsbDsKST1u
dWxsOwpPPW51bGw7CmlmKFEpe2ZvcihGPVEubGVuZ3RoLTE7CkY+LTE7CkYtLSl7Rz1RW0ZdOwpp
ZihHKXtILnJlbW92ZUxpc3RlbmVyKEdbSC5FTF0sR1tILlRZUEVdLEdbSC5GTl0sRikKfX1HPW51
bGwKfUguX3NpbXBsZVJlbW92ZSh3aW5kb3csInVubG9hZCIsSC5fdW5sb2FkKQp9LF9nZXRTY3Jv
bGxMZWZ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2dldFNjcm9sbCgpWzFdCn0sX2dldFNjcm9s
bFRvcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9nZXRTY3JvbGwoKVswXQp9LF9nZXRTY3JvbGw6
ZnVuY3Rpb24oKXt2YXIgQj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsQT1kb2N1bWVudC5ib2R5
OwppZihCJiYoQi5zY3JvbGxUb3B8fEIuc2Nyb2xsTGVmdCkpe3JldHVybltCLnNjcm9sbFRvcCxC
LnNjcm9sbExlZnRdCn1lbHNle2lmKEEpe3JldHVybltBLnNjcm9sbFRvcCxBLnNjcm9sbExlZnRd
Cn1lbHNle3JldHVyblswLDBdCn19fSxyZWdDRTpmdW5jdGlvbigpe30sX3NpbXBsZUFkZDpmdW5j
dGlvbigpe2lmKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKXtyZXR1cm4gZnVuY3Rpb24oRCxDLEEs
Qil7RC5hZGRFdmVudExpc3RlbmVyKEMsQSwoQikpCn0KfWVsc2V7aWYod2luZG93LmF0dGFjaEV2
ZW50KXtyZXR1cm4gZnVuY3Rpb24oRCxDLEEsQil7RC5hdHRhY2hFdmVudCgib24iK0MsQSkKfQp9
ZWxzZXtyZXR1cm4gZnVuY3Rpb24oKXt9Cn19fSgpLF9zaW1wbGVSZW1vdmU6ZnVuY3Rpb24oKXtp
Zih3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcil7cmV0dXJuIGZ1bmN0aW9uKEQsQyxBLEIpe0Qu
cmVtb3ZlRXZlbnRMaXN0ZW5lcihDLEEsKEIpKQp9Cn1lbHNle2lmKHdpbmRvdy5kZXRhY2hFdmVu
dCl7cmV0dXJuIGZ1bmN0aW9uKEEsQyxCKXtBLmRldGFjaEV2ZW50KCJvbiIrQyxCKQp9Cn1lbHNl
e3JldHVybiBmdW5jdGlvbigpe30KfX19KCl9Cn0oKTsKKGZ1bmN0aW9uKCl7dmFyIEE9WUFIT08u
dXRpbC5FdmVudDsKQS5vbj1BLmFkZExpc3RlbmVyOwpBLm9uRm9jdXM9QS5hZGRGb2N1c0xpc3Rl
bmVyOwpBLm9uQmx1cj1BLmFkZEJsdXJMaXN0ZW5lcjsKaWYoQS5pc0lFKXtpZihzZWxmIT09c2Vs
Zi50b3Ape2RvY3VtZW50Lm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2lmKGRvY3VtZW50
LnJlYWR5U3RhdGU9PSJjb21wbGV0ZSIpe2RvY3VtZW50Lm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxs
OwpBLl9yZWFkeSgpCn19Cn1lbHNle1lBSE9PLnV0aWwuRXZlbnQub25ET01SZWFkeShZQUhPTy51
dGlsLkV2ZW50Ll90cnlQcmVsb2FkQXR0YWNoLFlBSE9PLnV0aWwuRXZlbnQsdHJ1ZSk7CnZhciBC
PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKTsKQS5fZHJpPXNldEludGVydmFsKGZ1bmN0aW9u
KCl7dHJ5e0IuZG9TY3JvbGwoImxlZnQiKTsKY2xlYXJJbnRlcnZhbChBLl9kcmkpOwpBLl9kcmk9
bnVsbDsKQS5fcmVhZHkoKTsKQj1udWxsCn1jYXRjaChDKXt9fSxBLlBPTExfSU5URVJWQUwpCn19
ZWxzZXtpZihBLndlYmtpdCYmQS53ZWJraXQ8NTI1KXtBLl9kcmk9c2V0SW50ZXJ2YWwoZnVuY3Rp
b24oKXt2YXIgQz1kb2N1bWVudC5yZWFkeVN0YXRlOwppZigibG9hZGVkIj09Q3x8ImNvbXBsZXRl
Ij09Qyl7Y2xlYXJJbnRlcnZhbChBLl9kcmkpOwpBLl9kcmk9bnVsbDsKQS5fcmVhZHkoKQp9fSxB
LlBPTExfSU5URVJWQUwpCn1lbHNle0EuX3NpbXBsZUFkZChkb2N1bWVudCwiRE9NQ29udGVudExv
YWRlZCIsQS5fcmVhZHkpCn19QS5fc2ltcGxlQWRkKHdpbmRvdywibG9hZCIsQS5fbG9hZCk7CkEu
X3NpbXBsZUFkZCh3aW5kb3csInVubG9hZCIsQS5fdW5sb2FkKTsKQS5fdHJ5UHJlbG9hZEF0dGFj
aCgpCn0pKCkKfVlBSE9PLnV0aWwuRXZlbnRQcm92aWRlcj1mdW5jdGlvbigpe307CllBSE9PLnV0
aWwuRXZlbnRQcm92aWRlci5wcm90b3R5cGU9e19feXVpX2V2ZW50czpudWxsLF9feXVpX3N1YnNj
cmliZXJzOm51bGwsc3Vic2NyaWJlOmZ1bmN0aW9uKEcsSyxILEkpe3RoaXMuX195dWlfZXZlbnRz
PXRoaXMuX195dWlfZXZlbnRzfHx7fTsKdmFyIEo9dGhpcy5fX3l1aV9ldmVudHNbR107CmlmKEop
e0ouc3Vic2NyaWJlKEssSCxJKQp9ZWxzZXt0aGlzLl9feXVpX3N1YnNjcmliZXJzPXRoaXMuX195
dWlfc3Vic2NyaWJlcnN8fHt9Owp2YXIgTD10aGlzLl9feXVpX3N1YnNjcmliZXJzOwppZighTFtH
XSl7TFtHXT1bXQp9TFtHXS5wdXNoKHtmbjpLLG9iajpILG92ZXJyaWRlQ29udGV4dDpJfSkKfX0s
dW5zdWJzY3JpYmU6ZnVuY3Rpb24oTSxLLEkpe3RoaXMuX195dWlfZXZlbnRzPXRoaXMuX195dWlf
ZXZlbnRzfHx7fTsKdmFyIEg9dGhpcy5fX3l1aV9ldmVudHM7CmlmKE0pe3ZhciBKPUhbTV07Cmlm
KEope3JldHVybiBKLnVuc3Vic2NyaWJlKEssSSkKfX1lbHNle3ZhciBOPXRydWU7CmZvcih2YXIg
TCBpbiBIKXtpZihZQUhPTy5sYW5nLmhhc093blByb3BlcnR5KEgsTCkpe049TiYmSFtMXS51bnN1
YnNjcmliZShLLEkpCn19cmV0dXJuIE4KfXJldHVybiBmYWxzZQp9LHVuc3Vic2NyaWJlQWxsOmZ1
bmN0aW9uKEIpe3JldHVybiB0aGlzLnVuc3Vic2NyaWJlKEIpCn0sY3JlYXRlRXZlbnQ6ZnVuY3Rp
b24oTixJKXt0aGlzLl9feXVpX2V2ZW50cz10aGlzLl9feXVpX2V2ZW50c3x8e307CnZhciBLPUl8
fHt9LEw9dGhpcy5fX3l1aV9ldmVudHMsSjsKaWYoTFtOXSl7fWVsc2V7Sj1uZXcgWUFIT08udXRp
bC5DdXN0b21FdmVudChOLEsuc2NvcGV8fHRoaXMsSy5zaWxlbnQsWUFIT08udXRpbC5DdXN0b21F
dmVudC5GTEFULEsuZmlyZU9uY2UpOwpMW05dPUo7CmlmKEsub25TdWJzY3JpYmVDYWxsYmFjayl7
Si5zdWJzY3JpYmVFdmVudC5zdWJzY3JpYmUoSy5vblN1YnNjcmliZUNhbGxiYWNrKQp9dGhpcy5f
X3l1aV9zdWJzY3JpYmVycz10aGlzLl9feXVpX3N1YnNjcmliZXJzfHx7fTsKdmFyIEg9dGhpcy5f
X3l1aV9zdWJzY3JpYmVyc1tOXTsKaWYoSCl7Zm9yKHZhciBNPTA7Ck08SC5sZW5ndGg7CisrTSl7
Si5zdWJzY3JpYmUoSFtNXS5mbixIW01dLm9iaixIW01dLm92ZXJyaWRlQ29udGV4dCkKfX19cmV0
dXJuIExbTl0KfSxmaXJlRXZlbnQ6ZnVuY3Rpb24oSCl7dGhpcy5fX3l1aV9ldmVudHM9dGhpcy5f
X3l1aV9ldmVudHN8fHt9Owp2YXIgRj10aGlzLl9feXVpX2V2ZW50c1tIXTsKaWYoIUYpe3JldHVy
biBudWxsCn12YXIgRT1bXTsKZm9yKHZhciBHPTE7Ckc8YXJndW1lbnRzLmxlbmd0aDsKKytHKXtF
LnB1c2goYXJndW1lbnRzW0ddKQp9cmV0dXJuIEYuZmlyZS5hcHBseShGLEUpCn0saGFzRXZlbnQ6
ZnVuY3Rpb24oQil7aWYodGhpcy5fX3l1aV9ldmVudHMpe2lmKHRoaXMuX195dWlfZXZlbnRzW0Jd
KXtyZXR1cm4gdHJ1ZQp9fXJldHVybiBmYWxzZQp9fTsKKGZ1bmN0aW9uKCl7dmFyIEQ9WUFIT08u
dXRpbC5FdmVudCxFPVlBSE9PLmxhbmc7CllBSE9PLnV0aWwuS2V5TGlzdGVuZXI9ZnVuY3Rpb24o
TCxBLEssSil7aWYoIUwpe31lbHNle2lmKCFBKXt9ZWxzZXtpZighSyl7fX19aWYoIUope0o9WUFI
T08udXRpbC5LZXlMaXN0ZW5lci5LRVlET1dOCn12YXIgQz1uZXcgWUFIT08udXRpbC5DdXN0b21F
dmVudCgia2V5UHJlc3NlZCIpOwp0aGlzLmVuYWJsZWRFdmVudD1uZXcgWUFIT08udXRpbC5DdXN0
b21FdmVudCgiZW5hYmxlZCIpOwp0aGlzLmRpc2FibGVkRXZlbnQ9bmV3IFlBSE9PLnV0aWwuQ3Vz
dG9tRXZlbnQoImRpc2FibGVkIik7CmlmKEUuaXNTdHJpbmcoTCkpe0w9ZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoTCkKfWlmKEUuaXNGdW5jdGlvbihLKSl7Qy5zdWJzY3JpYmUoSykKfWVsc2V7Qy5z
dWJzY3JpYmUoSy5mbixLLnNjb3BlLEsuY29ycmVjdFNjb3BlKQp9ZnVuY3Rpb24gQihQLFEpe2lm
KCFBLnNoaWZ0KXtBLnNoaWZ0PWZhbHNlCn1pZighQS5hbHQpe0EuYWx0PWZhbHNlCn1pZighQS5j
dHJsKXtBLmN0cmw9ZmFsc2UKfWlmKFAuc2hpZnRLZXk9PUEuc2hpZnQmJlAuYWx0S2V5PT1BLmFs
dCYmUC5jdHJsS2V5PT1BLmN0cmwpe3ZhciBJLFI9QS5rZXlzLEc7CmlmKFlBSE9PLmxhbmcuaXNB
cnJheShSKSl7Zm9yKHZhciBIPTA7Ckg8Ui5sZW5ndGg7CkgrKyl7ST1SW0hdOwpHPUQuZ2V0Q2hh
ckNvZGUoUCk7CmlmKEk9PUcpe0MuZmlyZShHLFApOwpicmVhawp9fX1lbHNle0c9RC5nZXRDaGFy
Q29kZShQKTsKaWYoUj09Ryl7Qy5maXJlKEcsUCkKfX19fXRoaXMuZW5hYmxlPWZ1bmN0aW9uKCl7
aWYoIXRoaXMuZW5hYmxlZCl7RC5vbihMLEosQik7CnRoaXMuZW5hYmxlZEV2ZW50LmZpcmUoQSkK
fXRoaXMuZW5hYmxlZD10cnVlCn07CnRoaXMuZGlzYWJsZT1mdW5jdGlvbigpe2lmKHRoaXMuZW5h
YmxlZCl7RC5yZW1vdmVMaXN0ZW5lcihMLEosQik7CnRoaXMuZGlzYWJsZWRFdmVudC5maXJlKEEp
Cn10aGlzLmVuYWJsZWQ9ZmFsc2UKfTsKdGhpcy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJL
ZXlMaXN0ZW5lciBbIitBLmtleXMrIl0gIitMLnRhZ05hbWUrKEwuaWQ/IlsiK0wuaWQrIl0iOiIi
KQp9Cn07CnZhciBGPVlBSE9PLnV0aWwuS2V5TGlzdGVuZXI7CkYuS0VZRE9XTj0ia2V5ZG93biI7
CkYuS0VZVVA9ImtleXVwIjsKRi5LRVk9e0FMVDoxOCxCQUNLX1NQQUNFOjgsQ0FQU19MT0NLOjIw
LENPTlRST0w6MTcsREVMRVRFOjQ2LERPV046NDAsRU5EOjM1LEVOVEVSOjEzLEVTQ0FQRToyNyxI
T01FOjM2LExFRlQ6MzcsTUVUQToyMjQsTlVNX0xPQ0s6MTQ0LFBBR0VfRE9XTjozNCxQQUdFX1VQ
OjMzLFBBVVNFOjE5LFBSSU5UU0NSRUVOOjQ0LFJJR0hUOjM5LFNDUk9MTF9MT0NLOjE0NSxTSElG
VDoxNixTUEFDRTozMixUQUI6OSxVUDozOH0KfSkoKTsKWUFIT08ucmVnaXN0ZXIoImV2ZW50IixZ
QUhPTy51dGlsLkV2ZW50LHt2ZXJzaW9uOiIyLjguMHI0IixidWlsZDoiMjQ0OSJ9KTsKWUFIT08u
cmVnaXN0ZXIoInlhaG9vLWRvbS1ldmVudCIsWUFIT08se3ZlcnNpb246IjIuOC4wcjQiLGJ1aWxk
OiIyNDQ5In0pOwo8L3NjcmlwdD4KPHNjcmlwdD4KKGZ1bmN0aW9uKCl7WUFIT08udXRpbC5Db25m
aWc9ZnVuY3Rpb24oQSl7aWYoQSl7dGhpcy5pbml0KEEpCn19Owp2YXIgRj1ZQUhPTy5sYW5nLEU9
WUFIT08udXRpbC5DdXN0b21FdmVudCxEPVlBSE9PLnV0aWwuQ29uZmlnOwpELkNPTkZJR19DSEFO
R0VEX0VWRU5UPSJjb25maWdDaGFuZ2VkIjsKRC5CT09MRUFOX1RZUEU9ImJvb2xlYW4iOwpELnBy
b3RvdHlwZT17b3duZXI6bnVsbCxxdWV1ZUluUHJvZ3Jlc3M6ZmFsc2UsY29uZmlnOm51bGwsaW5p
dGlhbENvbmZpZzpudWxsLGV2ZW50UXVldWU6bnVsbCxjb25maWdDaGFuZ2VkRXZlbnQ6bnVsbCxp
bml0OmZ1bmN0aW9uKEEpe3RoaXMub3duZXI9QTsKdGhpcy5jb25maWdDaGFuZ2VkRXZlbnQ9dGhp
cy5jcmVhdGVFdmVudChELkNPTkZJR19DSEFOR0VEX0VWRU5UKTsKdGhpcy5jb25maWdDaGFuZ2Vk
RXZlbnQuc2lnbmF0dXJlPUUuTElTVDsKdGhpcy5xdWV1ZUluUHJvZ3Jlc3M9ZmFsc2U7CnRoaXMu
Y29uZmlnPXt9Owp0aGlzLmluaXRpYWxDb25maWc9e307CnRoaXMuZXZlbnRRdWV1ZT1bXQp9LGNo
ZWNrQm9vbGVhbjpmdW5jdGlvbihBKXtyZXR1cm4odHlwZW9mIEE9PUQuQk9PTEVBTl9UWVBFKQp9
LGNoZWNrTnVtYmVyOmZ1bmN0aW9uKEEpe3JldHVybighaXNOYU4oQSkpCn0sZmlyZUV2ZW50OmZ1
bmN0aW9uKEMsQSl7dmFyIEI9dGhpcy5jb25maWdbQ107CmlmKEImJkIuZXZlbnQpe0IuZXZlbnQu
ZmlyZShBKQp9fSxhZGRQcm9wZXJ0eTpmdW5jdGlvbihBLEIpe0E9QS50b0xvd2VyQ2FzZSgpOwp0
aGlzLmNvbmZpZ1tBXT1COwpCLmV2ZW50PXRoaXMuY3JlYXRlRXZlbnQoQSx7c2NvcGU6dGhpcy5v
d25lcn0pOwpCLmV2ZW50LnNpZ25hdHVyZT1FLkxJU1Q7CkIua2V5PUE7CmlmKEIuaGFuZGxlcil7
Qi5ldmVudC5zdWJzY3JpYmUoQi5oYW5kbGVyLHRoaXMub3duZXIpCn10aGlzLnNldFByb3BlcnR5
KEEsQi52YWx1ZSx0cnVlKTsKaWYoIUIuc3VwcHJlc3NFdmVudCl7dGhpcy5xdWV1ZVByb3BlcnR5
KEEsQi52YWx1ZSkKfX0sZ2V0Q29uZmlnOmZ1bmN0aW9uKCl7dmFyIEg9e30sQj10aGlzLmNvbmZp
ZyxBLEM7CmZvcihBIGluIEIpe2lmKEYuaGFzT3duUHJvcGVydHkoQixBKSl7Qz1CW0FdOwppZihD
JiZDLmV2ZW50KXtIW0FdPUMudmFsdWUKfX19cmV0dXJuIEgKfSxnZXRQcm9wZXJ0eTpmdW5jdGlv
bihCKXt2YXIgQT10aGlzLmNvbmZpZ1tCLnRvTG93ZXJDYXNlKCldOwppZihBJiZBLmV2ZW50KXty
ZXR1cm4gQS52YWx1ZQp9ZWxzZXtyZXR1cm4gdW5kZWZpbmVkCn19LHJlc2V0UHJvcGVydHk6ZnVu
Y3Rpb24oQil7Qj1CLnRvTG93ZXJDYXNlKCk7CnZhciBBPXRoaXMuY29uZmlnW0JdOwppZihBJiZB
LmV2ZW50KXtpZih0aGlzLmluaXRpYWxDb25maWdbQl0mJiFGLmlzVW5kZWZpbmVkKHRoaXMuaW5p
dGlhbENvbmZpZ1tCXSkpe3RoaXMuc2V0UHJvcGVydHkoQix0aGlzLmluaXRpYWxDb25maWdbQl0p
OwpyZXR1cm4gdHJ1ZQp9fWVsc2V7cmV0dXJuIGZhbHNlCn19LHNldFByb3BlcnR5OmZ1bmN0aW9u
KEMsQSxIKXt2YXIgQjsKQz1DLnRvTG93ZXJDYXNlKCk7CmlmKHRoaXMucXVldWVJblByb2dyZXNz
JiYhSCl7dGhpcy5xdWV1ZVByb3BlcnR5KEMsQSk7CnJldHVybiB0cnVlCn1lbHNle0I9dGhpcy5j
b25maWdbQ107CmlmKEImJkIuZXZlbnQpe2lmKEIudmFsaWRhdG9yJiYhQi52YWxpZGF0b3IoQSkp
e3JldHVybiBmYWxzZQp9ZWxzZXtCLnZhbHVlPUE7CmlmKCFIKXt0aGlzLmZpcmVFdmVudChDLEEp
Owp0aGlzLmNvbmZpZ0NoYW5nZWRFdmVudC5maXJlKFtDLEFdKQp9cmV0dXJuIHRydWUKfX1lbHNl
e3JldHVybiBmYWxzZQp9fX0scXVldWVQcm9wZXJ0eTpmdW5jdGlvbihDLFcpe0M9Qy50b0xvd2Vy
Q2FzZSgpOwp2YXIgVT10aGlzLmNvbmZpZ1tDXSxiPWZhbHNlLGMsZixlLGQsWCxWLGcsWixZLEEs
YSxCLGg7CmlmKFUmJlUuZXZlbnQpe2lmKCFGLmlzVW5kZWZpbmVkKFcpJiZVLnZhbGlkYXRvciYm
IVUudmFsaWRhdG9yKFcpKXtyZXR1cm4gZmFsc2UKfWVsc2V7aWYoIUYuaXNVbmRlZmluZWQoVykp
e1UudmFsdWU9Vwp9ZWxzZXtXPVUudmFsdWUKfWI9ZmFsc2U7CmM9dGhpcy5ldmVudFF1ZXVlLmxl
bmd0aDsKZm9yKGE9MDsKYTxjOwphKyspe2Y9dGhpcy5ldmVudFF1ZXVlW2FdOwppZihmKXtlPWZb
MF07CmQ9ZlsxXTsKaWYoZT09Qyl7dGhpcy5ldmVudFF1ZXVlW2FdPW51bGw7CnRoaXMuZXZlbnRR
dWV1ZS5wdXNoKFtDLCghRi5pc1VuZGVmaW5lZChXKT9XOmQpXSk7CmI9dHJ1ZTsKYnJlYWsKfX19
aWYoIWImJiFGLmlzVW5kZWZpbmVkKFcpKXt0aGlzLmV2ZW50UXVldWUucHVzaChbQyxXXSkKfX1p
ZihVLnN1cGVyY2VkZXMpe1g9VS5zdXBlcmNlZGVzLmxlbmd0aDsKZm9yKEI9MDsKQjxYOwpCKysp
e1Y9VS5zdXBlcmNlZGVzW0JdOwpnPXRoaXMuZXZlbnRRdWV1ZS5sZW5ndGg7CmZvcihoPTA7Cmg8
ZzsKaCsrKXtaPXRoaXMuZXZlbnRRdWV1ZVtoXTsKaWYoWil7WT1aWzBdOwpBPVpbMV07CmlmKFk9
PVYudG9Mb3dlckNhc2UoKSl7dGhpcy5ldmVudFF1ZXVlLnB1c2goW1ksQV0pOwp0aGlzLmV2ZW50
UXVldWVbaF09bnVsbDsKYnJlYWsKfX19fX1yZXR1cm4gdHJ1ZQp9ZWxzZXtyZXR1cm4gZmFsc2UK
fX0scmVmaXJlRXZlbnQ6ZnVuY3Rpb24oQil7Qj1CLnRvTG93ZXJDYXNlKCk7CnZhciBBPXRoaXMu
Y29uZmlnW0JdOwppZihBJiZBLmV2ZW50JiYhRi5pc1VuZGVmaW5lZChBLnZhbHVlKSl7aWYodGhp
cy5xdWV1ZUluUHJvZ3Jlc3Mpe3RoaXMucXVldWVQcm9wZXJ0eShCKQp9ZWxzZXt0aGlzLmZpcmVF
dmVudChCLEEudmFsdWUpCn19fSxhcHBseUNvbmZpZzpmdW5jdGlvbihILEEpe3ZhciBCLEM7Cmlm
KEEpe0M9e307CmZvcihCIGluIEgpe2lmKEYuaGFzT3duUHJvcGVydHkoSCxCKSl7Q1tCLnRvTG93
ZXJDYXNlKCldPUhbQl0KfX10aGlzLmluaXRpYWxDb25maWc9Qwp9Zm9yKEIgaW4gSCl7aWYoRi5o
YXNPd25Qcm9wZXJ0eShILEIpKXt0aGlzLnF1ZXVlUHJvcGVydHkoQixIW0JdKQp9fX0scmVmcmVz
aDpmdW5jdGlvbigpe3ZhciBBOwpmb3IoQSBpbiB0aGlzLmNvbmZpZyl7aWYoRi5oYXNPd25Qcm9w
ZXJ0eSh0aGlzLmNvbmZpZyxBKSl7dGhpcy5yZWZpcmVFdmVudChBKQp9fX0sZmlyZVF1ZXVlOmZ1
bmN0aW9uKCl7dmFyIEksQSxKLEIsQzsKdGhpcy5xdWV1ZUluUHJvZ3Jlc3M9dHJ1ZTsKZm9yKEk9
MDsKSTx0aGlzLmV2ZW50UXVldWUubGVuZ3RoOwpJKyspe0E9dGhpcy5ldmVudFF1ZXVlW0ldOwpp
ZihBKXtKPUFbMF07CkI9QVsxXTsKQz10aGlzLmNvbmZpZ1tKXTsKQy52YWx1ZT1COwp0aGlzLmV2
ZW50UXVldWVbSV09bnVsbDsKdGhpcy5maXJlRXZlbnQoSixCKQp9fXRoaXMucXVldWVJblByb2dy
ZXNzPWZhbHNlOwp0aGlzLmV2ZW50UXVldWU9W10KfSxzdWJzY3JpYmVUb0NvbmZpZ0V2ZW50OmZ1
bmN0aW9uKEosSSxCLEEpe3ZhciBDPXRoaXMuY29uZmlnW0oudG9Mb3dlckNhc2UoKV07CmlmKEMm
JkMuZXZlbnQpe2lmKCFELmFscmVhZHlTdWJzY3JpYmVkKEMuZXZlbnQsSSxCKSl7Qy5ldmVudC5z
dWJzY3JpYmUoSSxCLEEpCn1yZXR1cm4gdHJ1ZQp9ZWxzZXtyZXR1cm4gZmFsc2UKfX0sdW5zdWJz
Y3JpYmVGcm9tQ29uZmlnRXZlbnQ6ZnVuY3Rpb24oSCxDLEEpe3ZhciBCPXRoaXMuY29uZmlnW0gu
dG9Mb3dlckNhc2UoKV07CmlmKEImJkIuZXZlbnQpe3JldHVybiBCLmV2ZW50LnVuc3Vic2NyaWJl
KEMsQSkKfWVsc2V7cmV0dXJuIGZhbHNlCn19LHRvU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIEE9IkNv
bmZpZyI7CmlmKHRoaXMub3duZXIpe0ErPSIgWyIrdGhpcy5vd25lci50b1N0cmluZygpKyJdIgp9
cmV0dXJuIEEKfSxvdXRwdXRFdmVudFF1ZXVlOmZ1bmN0aW9uKCl7dmFyIEg9IiIsQSxDLEI9dGhp
cy5ldmVudFF1ZXVlLmxlbmd0aDsKZm9yKEM9MDsKQzxCOwpDKyspe0E9dGhpcy5ldmVudFF1ZXVl
W0NdOwppZihBKXtIKz1BWzBdKyI9IitBWzFdKyIsICIKfX1yZXR1cm4gSAp9LGRlc3Ryb3k6ZnVu
Y3Rpb24oKXt2YXIgQj10aGlzLmNvbmZpZyxDLEE7CmZvcihDIGluIEIpe2lmKEYuaGFzT3duUHJv
cGVydHkoQixDKSl7QT1CW0NdOwpBLmV2ZW50LnVuc3Vic2NyaWJlQWxsKCk7CkEuZXZlbnQ9bnVs
bAp9fXRoaXMuY29uZmlnQ2hhbmdlZEV2ZW50LnVuc3Vic2NyaWJlQWxsKCk7CnRoaXMuY29uZmln
Q2hhbmdlZEV2ZW50PW51bGw7CnRoaXMub3duZXI9bnVsbDsKdGhpcy5jb25maWc9bnVsbDsKdGhp
cy5pbml0aWFsQ29uZmlnPW51bGw7CnRoaXMuZXZlbnRRdWV1ZT1udWxsCn19OwpELmFscmVhZHlT
dWJzY3JpYmVkPWZ1bmN0aW9uKEssQixBKXt2YXIgSj1LLnN1YnNjcmliZXJzLmxlbmd0aCxMLEM7
CmlmKEo+MCl7Qz1KLTE7CmRve0w9Sy5zdWJzY3JpYmVyc1tDXTsKaWYoTCYmTC5vYmo9PUEmJkwu
Zm49PUIpe3JldHVybiB0cnVlCn19d2hpbGUoQy0tKQp9cmV0dXJuIGZhbHNlCn07CllBSE9PLmxh
bmcuYXVnbWVudFByb3RvKEQsWUFIT08udXRpbC5FdmVudFByb3ZpZGVyKQp9KCkpOwooZnVuY3Rp
b24oKXtZQUhPTy53aWRnZXQuTW9kdWxlPWZ1bmN0aW9uKEEsQil7aWYoQSl7dGhpcy5pbml0KEEs
QikKfWVsc2V7fX07CnZhciBlPVlBSE9PLnV0aWwuRG9tLFE9WUFIT08udXRpbC5Db25maWcsVz1Z
QUhPTy51dGlsLkV2ZW50LFg9WUFIT08udXRpbC5DdXN0b21FdmVudCxkPVlBSE9PLndpZGdldC5N
b2R1bGUsYj1ZQUhPTy5lbnYudWEsYyxVLFYsZixUPXtCRUZPUkVfSU5JVDoiYmVmb3JlSW5pdCIs
SU5JVDoiaW5pdCIsQVBQRU5EOiJhcHBlbmQiLEJFRk9SRV9SRU5ERVI6ImJlZm9yZVJlbmRlciIs
UkVOREVSOiJyZW5kZXIiLENIQU5HRV9IRUFERVI6ImNoYW5nZUhlYWRlciIsQ0hBTkdFX0JPRFk6
ImNoYW5nZUJvZHkiLENIQU5HRV9GT09URVI6ImNoYW5nZUZvb3RlciIsQ0hBTkdFX0NPTlRFTlQ6
ImNoYW5nZUNvbnRlbnQiLERFU1RST1k6ImRlc3Ryb3kiLEJFRk9SRV9TSE9XOiJiZWZvcmVTaG93
IixTSE9XOiJzaG93IixCRUZPUkVfSElERToiYmVmb3JlSGlkZSIsSElERToiaGlkZSJ9LGE9e1ZJ
U0lCTEU6e2tleToidmlzaWJsZSIsdmFsdWU6dHJ1ZSx2YWxpZGF0b3I6WUFIT08ubGFuZy5pc0Jv
b2xlYW59LEVGRkVDVDp7a2V5OiJlZmZlY3QiLHN1cHByZXNzRXZlbnQ6dHJ1ZSxzdXBlcmNlZGVz
OlsidmlzaWJsZSJdfSxNT05JVE9SX1JFU0laRTp7a2V5OiJtb25pdG9ycmVzaXplIix2YWx1ZTp0
cnVlfSxBUFBFTkRfVE9fRE9DVU1FTlRfQk9EWTp7a2V5OiJhcHBlbmR0b2RvY3VtZW50Ym9keSIs
dmFsdWU6ZmFsc2V9fTsKZC5JTUdfUk9PVD1udWxsOwpkLklNR19ST09UX1NTTD1udWxsOwpkLkNT
U19NT0RVTEU9Inl1aS1tb2R1bGUiOwpkLkNTU19IRUFERVI9ImhkIjsKZC5DU1NfQk9EWT0iYmQi
OwpkLkNTU19GT09URVI9ImZ0IjsKZC5SRVNJWkVfTU9OSVRPUl9TRUNVUkVfVVJMPSJqYXZhc2Ny
aXB0OmZhbHNlOyI7CmQuUkVTSVpFX01PTklUT1JfQlVGRkVSPTE7CmQudGV4dFJlc2l6ZUV2ZW50
PW5ldyBYKCJ0ZXh0UmVzaXplIik7CmQuZm9yY2VEb2N1bWVudFJlZHJhdz1mdW5jdGlvbigpe3Zh
ciBBPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKaWYoQSl7QS5jbGFzc05hbWUrPSIgIjsKQS5j
bGFzc05hbWU9WUFIT08ubGFuZy50cmltKEEuY2xhc3NOYW1lKQp9fTsKZnVuY3Rpb24gWSgpe2lm
KCFjKXtjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwpjLmlubmVySFRNTD0oJzxkaXYg
Y2xhc3M9IicrZC5DU1NfSEVBREVSKyciPjwvZGl2PjxkaXYgY2xhc3M9IicrZC5DU1NfQk9EWSsn
Ij48L2Rpdj48ZGl2IGNsYXNzPSInK2QuQ1NTX0ZPT1RFUisnIj48L2Rpdj4nKTsKVT1jLmZpcnN0
Q2hpbGQ7ClY9VS5uZXh0U2libGluZzsKZj1WLm5leHRTaWJsaW5nCn1yZXR1cm4gYwp9ZnVuY3Rp
b24gWigpe2lmKCFVKXtZKCkKfXJldHVybihVLmNsb25lTm9kZShmYWxzZSkpCn1mdW5jdGlvbiBT
KCl7aWYoIVYpe1koKQp9cmV0dXJuKFYuY2xvbmVOb2RlKGZhbHNlKSkKfWZ1bmN0aW9uIFIoKXtp
ZighZil7WSgpCn1yZXR1cm4oZi5jbG9uZU5vZGUoZmFsc2UpKQp9ZC5wcm90b3R5cGU9e2NvbnN0
cnVjdG9yOmQsZWxlbWVudDpudWxsLGhlYWRlcjpudWxsLGJvZHk6bnVsbCxmb290ZXI6bnVsbCxp
ZDpudWxsLGltYWdlUm9vdDpkLklNR19ST09ULGluaXRFdmVudHM6ZnVuY3Rpb24oKXt2YXIgQT1Y
LkxJU1Q7CnRoaXMuYmVmb3JlSW5pdEV2ZW50PXRoaXMuY3JlYXRlRXZlbnQoVC5CRUZPUkVfSU5J
VCk7CnRoaXMuYmVmb3JlSW5pdEV2ZW50LnNpZ25hdHVyZT1BOwp0aGlzLmluaXRFdmVudD10aGlz
LmNyZWF0ZUV2ZW50KFQuSU5JVCk7CnRoaXMuaW5pdEV2ZW50LnNpZ25hdHVyZT1BOwp0aGlzLmFw
cGVuZEV2ZW50PXRoaXMuY3JlYXRlRXZlbnQoVC5BUFBFTkQpOwp0aGlzLmFwcGVuZEV2ZW50LnNp
Z25hdHVyZT1BOwp0aGlzLmJlZm9yZVJlbmRlckV2ZW50PXRoaXMuY3JlYXRlRXZlbnQoVC5CRUZP
UkVfUkVOREVSKTsKdGhpcy5iZWZvcmVSZW5kZXJFdmVudC5zaWduYXR1cmU9QTsKdGhpcy5yZW5k
ZXJFdmVudD10aGlzLmNyZWF0ZUV2ZW50KFQuUkVOREVSKTsKdGhpcy5yZW5kZXJFdmVudC5zaWdu
YXR1cmU9QTsKdGhpcy5jaGFuZ2VIZWFkZXJFdmVudD10aGlzLmNyZWF0ZUV2ZW50KFQuQ0hBTkdF
X0hFQURFUik7CnRoaXMuY2hhbmdlSGVhZGVyRXZlbnQuc2lnbmF0dXJlPUE7CnRoaXMuY2hhbmdl
Qm9keUV2ZW50PXRoaXMuY3JlYXRlRXZlbnQoVC5DSEFOR0VfQk9EWSk7CnRoaXMuY2hhbmdlQm9k
eUV2ZW50LnNpZ25hdHVyZT1BOwp0aGlzLmNoYW5nZUZvb3RlckV2ZW50PXRoaXMuY3JlYXRlRXZl
bnQoVC5DSEFOR0VfRk9PVEVSKTsKdGhpcy5jaGFuZ2VGb290ZXJFdmVudC5zaWduYXR1cmU9QTsK
dGhpcy5jaGFuZ2VDb250ZW50RXZlbnQ9dGhpcy5jcmVhdGVFdmVudChULkNIQU5HRV9DT05URU5U
KTsKdGhpcy5jaGFuZ2VDb250ZW50RXZlbnQuc2lnbmF0dXJlPUE7CnRoaXMuZGVzdHJveUV2ZW50
PXRoaXMuY3JlYXRlRXZlbnQoVC5ERVNUUk9ZKTsKdGhpcy5kZXN0cm95RXZlbnQuc2lnbmF0dXJl
PUE7CnRoaXMuYmVmb3JlU2hvd0V2ZW50PXRoaXMuY3JlYXRlRXZlbnQoVC5CRUZPUkVfU0hPVyk7
CnRoaXMuYmVmb3JlU2hvd0V2ZW50LnNpZ25hdHVyZT1BOwp0aGlzLnNob3dFdmVudD10aGlzLmNy
ZWF0ZUV2ZW50KFQuU0hPVyk7CnRoaXMuc2hvd0V2ZW50LnNpZ25hdHVyZT1BOwp0aGlzLmJlZm9y
ZUhpZGVFdmVudD10aGlzLmNyZWF0ZUV2ZW50KFQuQkVGT1JFX0hJREUpOwp0aGlzLmJlZm9yZUhp
ZGVFdmVudC5zaWduYXR1cmU9QTsKdGhpcy5oaWRlRXZlbnQ9dGhpcy5jcmVhdGVFdmVudChULkhJ
REUpOwp0aGlzLmhpZGVFdmVudC5zaWduYXR1cmU9QQp9LHBsYXRmb3JtOmZ1bmN0aW9uKCl7dmFy
IEE9bmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpOwppZihBLmluZGV4T2YoIndpbmRv
d3MiKSE9LTF8fEEuaW5kZXhPZigid2luMzIiKSE9LTEpe3JldHVybiJ3aW5kb3dzIgp9ZWxzZXtp
ZihBLmluZGV4T2YoIm1hY2ludG9zaCIpIT0tMSl7cmV0dXJuIm1hYyIKfWVsc2V7cmV0dXJuIGZh
bHNlCn19fSgpLGJyb3dzZXI6ZnVuY3Rpb24oKXt2YXIgQT1uYXZpZ2F0b3IudXNlckFnZW50LnRv
TG93ZXJDYXNlKCk7CmlmKEEuaW5kZXhPZigib3BlcmEiKSE9LTEpe3JldHVybiJvcGVyYSIKfWVs
c2V7aWYoQS5pbmRleE9mKCJtc2llIDciKSE9LTEpe3JldHVybiJpZTciCn1lbHNle2lmKEEuaW5k
ZXhPZigibXNpZSIpIT0tMSl7cmV0dXJuImllIgp9ZWxzZXtpZihBLmluZGV4T2YoInNhZmFyaSIp
IT0tMSl7cmV0dXJuInNhZmFyaSIKfWVsc2V7aWYoQS5pbmRleE9mKCJnZWNrbyIpIT0tMSl7cmV0
dXJuImdlY2tvIgp9ZWxzZXtyZXR1cm4gZmFsc2UKfX19fX19KCksaXNTZWN1cmU6ZnVuY3Rpb24o
KXtpZih3aW5kb3cubG9jYXRpb24uaHJlZi50b0xvd2VyQ2FzZSgpLmluZGV4T2YoImh0dHBzIik9
PT0wKXtyZXR1cm4gdHJ1ZQp9ZWxzZXtyZXR1cm4gZmFsc2UKfX0oKSxpbml0RGVmYXVsdENvbmZp
ZzpmdW5jdGlvbigpe3RoaXMuY2ZnLmFkZFByb3BlcnR5KGEuVklTSUJMRS5rZXkse2hhbmRsZXI6
dGhpcy5jb25maWdWaXNpYmxlLHZhbHVlOmEuVklTSUJMRS52YWx1ZSx2YWxpZGF0b3I6YS5WSVNJ
QkxFLnZhbGlkYXRvcn0pOwp0aGlzLmNmZy5hZGRQcm9wZXJ0eShhLkVGRkVDVC5rZXkse3N1cHBy
ZXNzRXZlbnQ6YS5FRkZFQ1Quc3VwcHJlc3NFdmVudCxzdXBlcmNlZGVzOmEuRUZGRUNULnN1cGVy
Y2VkZXN9KTsKdGhpcy5jZmcuYWRkUHJvcGVydHkoYS5NT05JVE9SX1JFU0laRS5rZXkse2hhbmRs
ZXI6dGhpcy5jb25maWdNb25pdG9yUmVzaXplLHZhbHVlOmEuTU9OSVRPUl9SRVNJWkUudmFsdWV9
KTsKdGhpcy5jZmcuYWRkUHJvcGVydHkoYS5BUFBFTkRfVE9fRE9DVU1FTlRfQk9EWS5rZXkse3Zh
bHVlOmEuQVBQRU5EX1RPX0RPQ1VNRU5UX0JPRFkudmFsdWV9KQp9LGluaXQ6ZnVuY3Rpb24oQixD
KXt2YXIgRSxBOwp0aGlzLmluaXRFdmVudHMoKTsKdGhpcy5iZWZvcmVJbml0RXZlbnQuZmlyZShk
KTsKdGhpcy5jZmc9bmV3IFEodGhpcyk7CmlmKHRoaXMuaXNTZWN1cmUpe3RoaXMuaW1hZ2VSb290
PWQuSU1HX1JPT1RfU1NMCn1pZih0eXBlb2YgQj09InN0cmluZyIpe0U9QjsKQj1kb2N1bWVudC5n
ZXRFbGVtZW50QnlJZChCKTsKaWYoIUIpe0I9KFkoKSkuY2xvbmVOb2RlKGZhbHNlKTsKQi5pZD1F
Cn19dGhpcy5pZD1lLmdlbmVyYXRlSWQoQik7CnRoaXMuZWxlbWVudD1COwpBPXRoaXMuZWxlbWVu
dC5maXJzdENoaWxkOwppZihBKXt2YXIgRj1mYWxzZSxHPWZhbHNlLEQ9ZmFsc2U7CmRve2lmKDE9
PUEubm9kZVR5cGUpe2lmKCFGJiZlLmhhc0NsYXNzKEEsZC5DU1NfSEVBREVSKSl7dGhpcy5oZWFk
ZXI9QTsKRj10cnVlCn1lbHNle2lmKCFHJiZlLmhhc0NsYXNzKEEsZC5DU1NfQk9EWSkpe3RoaXMu
Ym9keT1BOwpHPXRydWUKfWVsc2V7aWYoIUQmJmUuaGFzQ2xhc3MoQSxkLkNTU19GT09URVIpKXt0
aGlzLmZvb3Rlcj1BOwpEPXRydWUKfX19fX13aGlsZSgoQT1BLm5leHRTaWJsaW5nKSkKfXRoaXMu
aW5pdERlZmF1bHRDb25maWcoKTsKZS5hZGRDbGFzcyh0aGlzLmVsZW1lbnQsZC5DU1NfTU9EVUxF
KTsKaWYoQyl7dGhpcy5jZmcuYXBwbHlDb25maWcoQyx0cnVlKQp9aWYoIVEuYWxyZWFkeVN1YnNj
cmliZWQodGhpcy5yZW5kZXJFdmVudCx0aGlzLmNmZy5maXJlUXVldWUsdGhpcy5jZmcpKXt0aGlz
LnJlbmRlckV2ZW50LnN1YnNjcmliZSh0aGlzLmNmZy5maXJlUXVldWUsdGhpcy5jZmcsdHJ1ZSkK
fXRoaXMuaW5pdEV2ZW50LmZpcmUoZCkKfSxpbml0UmVzaXplTW9uaXRvcjpmdW5jdGlvbigpe3Zh
ciBBPShiLmdlY2tvJiZ0aGlzLnBsYXRmb3JtPT0id2luZG93cyIpOwppZihBKXt2YXIgQj10aGlz
OwpzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Qi5faW5pdFJlc2l6ZU1vbml0b3IoKQp9LDApCn1lbHNl
e3RoaXMuX2luaXRSZXNpemVNb25pdG9yKCkKfX0sX2luaXRSZXNpemVNb25pdG9yOmZ1bmN0aW9u
KCl7dmFyIEcsRSxDOwpmdW5jdGlvbiBBKCl7ZC50ZXh0UmVzaXplRXZlbnQuZmlyZSgpCn1pZigh
Yi5vcGVyYSl7RT1lLmdldCgiX3l1aVJlc2l6ZU1vbml0b3IiKTsKdmFyIEI9dGhpcy5fc3VwcG9y
dHNDV1Jlc2l6ZSgpOwppZighRSl7RT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsK
aWYodGhpcy5pc1NlY3VyZSYmZC5SRVNJWkVfTU9OSVRPUl9TRUNVUkVfVVJMJiZiLmllKXtFLnNy
Yz1kLlJFU0laRV9NT05JVE9SX1NFQ1VSRV9VUkwKfWlmKCFCKXtDPVsiPGh0bWw+PGhlYWQ+PHNj
cmlwdCAiLCd0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPicsIndpbmRvdy5vbnJlc2l6ZT1mdW5jdGlv
bigpe3dpbmRvdy5wYXJlbnQuIiwiWUFIT08ud2lkZ2V0Lk1vZHVsZS50ZXh0UmVzaXplRXZlbnQu
IiwiZmlyZSgpO307PCIsIi9zY3JpcHQ+PC9oZWFkPiIsIjxib2R5PjwvYm9keT48L2h0bWw+Il0u
am9pbigiIik7CkUuc3JjPSJkYXRhOnRleHQvaHRtbDtjaGFyc2V0PXV0Zi04LCIrZW5jb2RlVVJJ
Q29tcG9uZW50KEMpCn1FLmlkPSJfeXVpUmVzaXplTW9uaXRvciI7CkUudGl0bGU9IlRleHQgUmVz
aXplIE1vbml0b3IiOwpFLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSI7CkUuc3R5bGUudmlzaWJp
bGl0eT0iaGlkZGVuIjsKdmFyIEY9ZG9jdW1lbnQuYm9keSxEPUYuZmlyc3RDaGlsZDsKaWYoRCl7
Ri5pbnNlcnRCZWZvcmUoRSxEKQp9ZWxzZXtGLmFwcGVuZENoaWxkKEUpCn1FLnN0eWxlLmJhY2tn
cm91bmRDb2xvcj0idHJhbnNwYXJlbnQiOwpFLnN0eWxlLmJvcmRlcldpZHRoPSIwIjsKRS5zdHls
ZS53aWR0aD0iMmVtIjsKRS5zdHlsZS5oZWlnaHQ9IjJlbSI7CkUuc3R5bGUubGVmdD0iMCI7CkUu
c3R5bGUudG9wPSgtMSooRS5vZmZzZXRIZWlnaHQrZC5SRVNJWkVfTU9OSVRPUl9CVUZGRVIpKSsi
cHgiOwpFLnN0eWxlLnZpc2liaWxpdHk9InZpc2libGUiOwppZihiLndlYmtpdCl7Rz1FLmNvbnRl
bnRXaW5kb3cuZG9jdW1lbnQ7Ckcub3BlbigpOwpHLmNsb3NlKCkKfX1pZihFJiZFLmNvbnRlbnRX
aW5kb3cpe2QudGV4dFJlc2l6ZUV2ZW50LnN1YnNjcmliZSh0aGlzLm9uRG9tUmVzaXplLHRoaXMs
dHJ1ZSk7CmlmKCFkLnRleHRSZXNpemVJbml0aWFsaXplZCl7aWYoQil7aWYoIVcub24oRS5jb250
ZW50V2luZG93LCJyZXNpemUiLEEpKXtXLm9uKEUsInJlc2l6ZSIsQSkKfX1kLnRleHRSZXNpemVJ
bml0aWFsaXplZD10cnVlCn10aGlzLnJlc2l6ZU1vbml0b3I9RQp9fX0sX3N1cHBvcnRzQ1dSZXNp
emU6ZnVuY3Rpb24oKXt2YXIgQT10cnVlOwppZihiLmdlY2tvJiZiLmdlY2tvPD0xLjgpe0E9ZmFs
c2UKfXJldHVybiBBCn0sb25Eb21SZXNpemU6ZnVuY3Rpb24oQSxCKXt2YXIgQz0tMSoodGhpcy5y
ZXNpemVNb25pdG9yLm9mZnNldEhlaWdodCtkLlJFU0laRV9NT05JVE9SX0JVRkZFUik7CnRoaXMu
cmVzaXplTW9uaXRvci5zdHlsZS50b3A9QysicHgiOwp0aGlzLnJlc2l6ZU1vbml0b3Iuc3R5bGUu
bGVmdD0iMCIKfSxzZXRIZWFkZXI6ZnVuY3Rpb24oQSl7dmFyIEI9dGhpcy5oZWFkZXJ8fCh0aGlz
LmhlYWRlcj1aKCkpOwppZihBLm5vZGVOYW1lKXtCLmlubmVySFRNTD0iIjsKQi5hcHBlbmRDaGls
ZChBKQp9ZWxzZXtCLmlubmVySFRNTD1BCn1pZih0aGlzLl9yZW5kZXJlZCl7dGhpcy5fcmVuZGVy
SGVhZGVyKCkKfXRoaXMuY2hhbmdlSGVhZGVyRXZlbnQuZmlyZShBKTsKdGhpcy5jaGFuZ2VDb250
ZW50RXZlbnQuZmlyZSgpCn0sYXBwZW5kVG9IZWFkZXI6ZnVuY3Rpb24oQSl7dmFyIEI9dGhpcy5o
ZWFkZXJ8fCh0aGlzLmhlYWRlcj1aKCkpOwpCLmFwcGVuZENoaWxkKEEpOwp0aGlzLmNoYW5nZUhl
YWRlckV2ZW50LmZpcmUoQSk7CnRoaXMuY2hhbmdlQ29udGVudEV2ZW50LmZpcmUoKQp9LHNldEJv
ZHk6ZnVuY3Rpb24oQSl7dmFyIEI9dGhpcy5ib2R5fHwodGhpcy5ib2R5PVMoKSk7CmlmKEEubm9k
ZU5hbWUpe0IuaW5uZXJIVE1MPSIiOwpCLmFwcGVuZENoaWxkKEEpCn1lbHNle0IuaW5uZXJIVE1M
PUEKfWlmKHRoaXMuX3JlbmRlcmVkKXt0aGlzLl9yZW5kZXJCb2R5KCkKfXRoaXMuY2hhbmdlQm9k
eUV2ZW50LmZpcmUoQSk7CnRoaXMuY2hhbmdlQ29udGVudEV2ZW50LmZpcmUoKQp9LGFwcGVuZFRv
Qm9keTpmdW5jdGlvbihBKXt2YXIgQj10aGlzLmJvZHl8fCh0aGlzLmJvZHk9UygpKTsKQi5hcHBl
bmRDaGlsZChBKTsKdGhpcy5jaGFuZ2VCb2R5RXZlbnQuZmlyZShBKTsKdGhpcy5jaGFuZ2VDb250
ZW50RXZlbnQuZmlyZSgpCn0sc2V0Rm9vdGVyOmZ1bmN0aW9uKEEpe3ZhciBCPXRoaXMuZm9vdGVy
fHwodGhpcy5mb290ZXI9UigpKTsKaWYoQS5ub2RlTmFtZSl7Qi5pbm5lckhUTUw9IiI7CkIuYXBw
ZW5kQ2hpbGQoQSkKfWVsc2V7Qi5pbm5lckhUTUw9QQp9aWYodGhpcy5fcmVuZGVyZWQpe3RoaXMu
X3JlbmRlckZvb3RlcigpCn10aGlzLmNoYW5nZUZvb3RlckV2ZW50LmZpcmUoQSk7CnRoaXMuY2hh
bmdlQ29udGVudEV2ZW50LmZpcmUoKQp9LGFwcGVuZFRvRm9vdGVyOmZ1bmN0aW9uKEEpe3ZhciBC
PXRoaXMuZm9vdGVyfHwodGhpcy5mb290ZXI9UigpKTsKQi5hcHBlbmRDaGlsZChBKTsKdGhpcy5j
aGFuZ2VGb290ZXJFdmVudC5maXJlKEEpOwp0aGlzLmNoYW5nZUNvbnRlbnRFdmVudC5maXJlKCkK
fSxyZW5kZXI6ZnVuY3Rpb24oQixEKXt2YXIgQT10aGlzOwpmdW5jdGlvbiBDKEUpe2lmKHR5cGVv
ZiBFPT0ic3RyaW5nIil7RT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChFKQp9aWYoRSl7QS5fYWRk
VG9QYXJlbnQoRSxBLmVsZW1lbnQpOwpBLmFwcGVuZEV2ZW50LmZpcmUoKQp9fXRoaXMuYmVmb3Jl
UmVuZGVyRXZlbnQuZmlyZSgpOwppZighRCl7RD10aGlzLmVsZW1lbnQKfWlmKEIpe0MoQikKfWVs
c2V7aWYoIWUuaW5Eb2N1bWVudCh0aGlzLmVsZW1lbnQpKXtyZXR1cm4gZmFsc2UKfX10aGlzLl9y
ZW5kZXJIZWFkZXIoRCk7CnRoaXMuX3JlbmRlckJvZHkoRCk7CnRoaXMuX3JlbmRlckZvb3RlcihE
KTsKdGhpcy5fcmVuZGVyZWQ9dHJ1ZTsKdGhpcy5yZW5kZXJFdmVudC5maXJlKCk7CnJldHVybiB0
cnVlCn0sX3JlbmRlckhlYWRlcjpmdW5jdGlvbihCKXtCPUJ8fHRoaXMuZWxlbWVudDsKaWYodGhp
cy5oZWFkZXImJiFlLmluRG9jdW1lbnQodGhpcy5oZWFkZXIpKXt2YXIgQT1CLmZpcnN0Q2hpbGQ7
CmlmKEEpe0IuaW5zZXJ0QmVmb3JlKHRoaXMuaGVhZGVyLEEpCn1lbHNle0IuYXBwZW5kQ2hpbGQo
dGhpcy5oZWFkZXIpCn19fSxfcmVuZGVyQm9keTpmdW5jdGlvbihBKXtBPUF8fHRoaXMuZWxlbWVu
dDsKaWYodGhpcy5ib2R5JiYhZS5pbkRvY3VtZW50KHRoaXMuYm9keSkpe2lmKHRoaXMuZm9vdGVy
JiZlLmlzQW5jZXN0b3IoQSx0aGlzLmZvb3Rlcikpe0EuaW5zZXJ0QmVmb3JlKHRoaXMuYm9keSx0
aGlzLmZvb3RlcikKfWVsc2V7QS5hcHBlbmRDaGlsZCh0aGlzLmJvZHkpCn19fSxfcmVuZGVyRm9v
dGVyOmZ1bmN0aW9uKEEpe0E9QXx8dGhpcy5lbGVtZW50OwppZih0aGlzLmZvb3RlciYmIWUuaW5E
b2N1bWVudCh0aGlzLmZvb3Rlcikpe0EuYXBwZW5kQ2hpbGQodGhpcy5mb290ZXIpCn19LGRlc3Ry
b3k6ZnVuY3Rpb24oKXt2YXIgQTsKaWYodGhpcy5lbGVtZW50KXtXLnB1cmdlRWxlbWVudCh0aGlz
LmVsZW1lbnQsdHJ1ZSk7CkE9dGhpcy5lbGVtZW50LnBhcmVudE5vZGUKfWlmKEEpe0EucmVtb3Zl
Q2hpbGQodGhpcy5lbGVtZW50KQp9dGhpcy5lbGVtZW50PW51bGw7CnRoaXMuaGVhZGVyPW51bGw7
CnRoaXMuYm9keT1udWxsOwp0aGlzLmZvb3Rlcj1udWxsOwpkLnRleHRSZXNpemVFdmVudC51bnN1
YnNjcmliZSh0aGlzLm9uRG9tUmVzaXplLHRoaXMpOwp0aGlzLmNmZy5kZXN0cm95KCk7CnRoaXMu
Y2ZnPW51bGw7CnRoaXMuZGVzdHJveUV2ZW50LmZpcmUoKQp9LHNob3c6ZnVuY3Rpb24oKXt0aGlz
LmNmZy5zZXRQcm9wZXJ0eSgidmlzaWJsZSIsdHJ1ZSkKfSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy5j
Zmcuc2V0UHJvcGVydHkoInZpc2libGUiLGZhbHNlKQp9LGNvbmZpZ1Zpc2libGU6ZnVuY3Rpb24o
QyxELEIpe3ZhciBBPURbMF07CmlmKEEpe3RoaXMuYmVmb3JlU2hvd0V2ZW50LmZpcmUoKTsKZS5z
ZXRTdHlsZSh0aGlzLmVsZW1lbnQsImRpc3BsYXkiLCJibG9jayIpOwp0aGlzLnNob3dFdmVudC5m
aXJlKCkKfWVsc2V7dGhpcy5iZWZvcmVIaWRlRXZlbnQuZmlyZSgpOwplLnNldFN0eWxlKHRoaXMu
ZWxlbWVudCwiZGlzcGxheSIsIm5vbmUiKTsKdGhpcy5oaWRlRXZlbnQuZmlyZSgpCn19LGNvbmZp
Z01vbml0b3JSZXNpemU6ZnVuY3Rpb24oQixDLEEpe3ZhciBEPUNbMF07CmlmKEQpe3RoaXMuaW5p
dFJlc2l6ZU1vbml0b3IoKQp9ZWxzZXtkLnRleHRSZXNpemVFdmVudC51bnN1YnNjcmliZSh0aGlz
Lm9uRG9tUmVzaXplLHRoaXMsdHJ1ZSk7CnRoaXMucmVzaXplTW9uaXRvcj1udWxsCn19LF9hZGRU
b1BhcmVudDpmdW5jdGlvbihCLEEpe2lmKCF0aGlzLmNmZy5nZXRQcm9wZXJ0eSgiYXBwZW5kdG9k
b2N1bWVudGJvZHkiKSYmQj09PWRvY3VtZW50LmJvZHkmJkIuZmlyc3RDaGlsZCl7Qi5pbnNlcnRC
ZWZvcmUoQSxCLmZpcnN0Q2hpbGQpCn1lbHNle0IuYXBwZW5kQ2hpbGQoQSkKfX0sdG9TdHJpbmc6
ZnVuY3Rpb24oKXtyZXR1cm4iTW9kdWxlICIrdGhpcy5pZAp9fTsKWUFIT08ubGFuZy5hdWdtZW50
UHJvdG8oZCxZQUhPTy51dGlsLkV2ZW50UHJvdmlkZXIpCn0oKSk7CihmdW5jdGlvbigpe1lBSE9P
LndpZGdldC5PdmVybGF5PWZ1bmN0aW9uKEEsQil7WUFIT08ud2lkZ2V0Lk92ZXJsYXkuc3VwZXJj
bGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsQSxCKQp9Owp2YXIgWD1ZQUhPTy5sYW5nLFQ9WUFI
T08udXRpbC5DdXN0b21FdmVudCxaPVlBSE9PLndpZGdldC5Nb2R1bGUsUz1ZQUhPTy51dGlsLkV2
ZW50LGE9WUFIT08udXRpbC5Eb20sTz1ZQUhPTy51dGlsLkNvbmZpZyxWPVlBSE9PLmVudi51YSxR
PVlBSE9PLndpZGdldC5PdmVybGF5LFk9InN1YnNjcmliZSIsYj0idW5zdWJzY3JpYmUiLFA9ImNv
bnRhaW5lZCIsVyxSPXtCRUZPUkVfTU9WRToiYmVmb3JlTW92ZSIsTU9WRToibW92ZSJ9LFU9e1g6
e2tleToieCIsdmFsaWRhdG9yOlguaXNOdW1iZXIsc3VwcHJlc3NFdmVudDp0cnVlLHN1cGVyY2Vk
ZXM6WyJpZnJhbWUiXX0sWTp7a2V5OiJ5Iix2YWxpZGF0b3I6WC5pc051bWJlcixzdXBwcmVzc0V2
ZW50OnRydWUsc3VwZXJjZWRlczpbImlmcmFtZSJdfSxYWTp7a2V5OiJ4eSIsc3VwcHJlc3NFdmVu
dDp0cnVlLHN1cGVyY2VkZXM6WyJpZnJhbWUiXX0sQ09OVEVYVDp7a2V5OiJjb250ZXh0IixzdXBw
cmVzc0V2ZW50OnRydWUsc3VwZXJjZWRlczpbImlmcmFtZSJdfSxGSVhFRF9DRU5URVI6e2tleToi
Zml4ZWRjZW50ZXIiLHZhbHVlOmZhbHNlLHN1cGVyY2VkZXM6WyJpZnJhbWUiLCJ2aXNpYmxlIl19
LFdJRFRIOntrZXk6IndpZHRoIixzdXBwcmVzc0V2ZW50OnRydWUsc3VwZXJjZWRlczpbImNvbnRl
eHQiLCJmaXhlZGNlbnRlciIsImlmcmFtZSJdfSxIRUlHSFQ6e2tleToiaGVpZ2h0IixzdXBwcmVz
c0V2ZW50OnRydWUsc3VwZXJjZWRlczpbImNvbnRleHQiLCJmaXhlZGNlbnRlciIsImlmcmFtZSJd
fSxBVVRPX0ZJTExfSEVJR0hUOntrZXk6ImF1dG9maWxsaGVpZ2h0IixzdXBlcmNlZGVzOlsiaGVp
Z2h0Il0sdmFsdWU6ImJvZHkifSxaSU5ERVg6e2tleToiemluZGV4Iix2YWx1ZTpudWxsfSxDT05T
VFJBSU5fVE9fVklFV1BPUlQ6e2tleToiY29uc3RyYWludG92aWV3cG9ydCIsdmFsdWU6ZmFsc2Us
dmFsaWRhdG9yOlguaXNCb29sZWFuLHN1cGVyY2VkZXM6WyJpZnJhbWUiLCJ4IiwieSIsInh5Il19
LElGUkFNRTp7a2V5OiJpZnJhbWUiLHZhbHVlOihWLmllPT02P3RydWU6ZmFsc2UpLHZhbGlkYXRv
cjpYLmlzQm9vbGVhbixzdXBlcmNlZGVzOlsiemluZGV4Il19LFBSRVZFTlRfQ09OVEVYVF9PVkVS
TEFQOntrZXk6InByZXZlbnRjb250ZXh0b3ZlcmxhcCIsdmFsdWU6ZmFsc2UsdmFsaWRhdG9yOlgu
aXNCb29sZWFuLHN1cGVyY2VkZXM6WyJjb25zdHJhaW50b3ZpZXdwb3J0Il19fTsKUS5JRlJBTUVf
U1JDPSJqYXZhc2NyaXB0OmZhbHNlOyI7ClEuSUZSQU1FX09GRlNFVD0zOwpRLlZJRVdQT1JUX09G
RlNFVD0xMDsKUS5UT1BfTEVGVD0idGwiOwpRLlRPUF9SSUdIVD0idHIiOwpRLkJPVFRPTV9MRUZU
PSJibCI7ClEuQk9UVE9NX1JJR0hUPSJiciI7ClEuUFJFVkVOVF9PVkVSTEFQX1g9e3RsdHI6dHJ1
ZSxibGJyOnRydWUsYnJibDp0cnVlLHRydGw6dHJ1ZX07ClEuUFJFVkVOVF9PVkVSTEFQX1k9e3Ry
YnI6dHJ1ZSx0bGJsOnRydWUsYmx0bDp0cnVlLGJydHI6dHJ1ZX07ClEuQ1NTX09WRVJMQVk9Inl1
aS1vdmVybGF5IjsKUS5DU1NfSElEREVOPSJ5dWktb3ZlcmxheS1oaWRkZW4iOwpRLkNTU19JRlJB
TUU9Inl1aS1vdmVybGF5LWlmcmFtZSI7ClEuU1REX01PRF9SRT0vXlxzKj8oYm9keXxmb290ZXJ8
aGVhZGVyKVxzKj8kL2k7ClEud2luZG93U2Nyb2xsRXZlbnQ9bmV3IFQoIndpbmRvd1Njcm9sbCIp
OwpRLndpbmRvd1Jlc2l6ZUV2ZW50PW5ldyBUKCJ3aW5kb3dSZXNpemUiKTsKUS53aW5kb3dTY3Jv
bGxIYW5kbGVyPWZ1bmN0aW9uKEEpe3ZhciBCPVMuZ2V0VGFyZ2V0KEEpOwppZighQnx8Qj09PXdp
bmRvd3x8Qj09PXdpbmRvdy5kb2N1bWVudCl7aWYoVi5pZSl7aWYoIXdpbmRvdy5zY3JvbGxFbmQp
e3dpbmRvdy5zY3JvbGxFbmQ9LTEKfWNsZWFyVGltZW91dCh3aW5kb3cuc2Nyb2xsRW5kKTsKd2lu
ZG93LnNjcm9sbEVuZD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7US53aW5kb3dTY3JvbGxFdmVudC5m
aXJlKCkKfSwxKQp9ZWxzZXtRLndpbmRvd1Njcm9sbEV2ZW50LmZpcmUoKQp9fX07ClEud2luZG93
UmVzaXplSGFuZGxlcj1mdW5jdGlvbihBKXtpZihWLmllKXtpZighd2luZG93LnJlc2l6ZUVuZCl7
d2luZG93LnJlc2l6ZUVuZD0tMQp9Y2xlYXJUaW1lb3V0KHdpbmRvdy5yZXNpemVFbmQpOwp3aW5k
b3cucmVzaXplRW5kPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtRLndpbmRvd1Jlc2l6ZUV2ZW50LmZp
cmUoKQp9LDEwMCkKfWVsc2V7US53aW5kb3dSZXNpemVFdmVudC5maXJlKCkKfX07ClEuX2luaXRp
YWxpemVkPW51bGw7CmlmKFEuX2luaXRpYWxpemVkPT09bnVsbCl7Uy5vbih3aW5kb3csInNjcm9s
bCIsUS53aW5kb3dTY3JvbGxIYW5kbGVyKTsKUy5vbih3aW5kb3csInJlc2l6ZSIsUS53aW5kb3dS
ZXNpemVIYW5kbGVyKTsKUS5faW5pdGlhbGl6ZWQ9dHJ1ZQp9US5fVFJJR0dFUl9NQVA9e3dpbmRv
d1Njcm9sbDpRLndpbmRvd1Njcm9sbEV2ZW50LHdpbmRvd1Jlc2l6ZTpRLndpbmRvd1Jlc2l6ZUV2
ZW50LHRleHRSZXNpemU6Wi50ZXh0UmVzaXplRXZlbnR9OwpZQUhPTy5leHRlbmQoUSxaLHtDT05U
RVhUX1RSSUdHRVJTOltdLGluaXQ6ZnVuY3Rpb24oQSxCKXtRLnN1cGVyY2xhc3MuaW5pdC5jYWxs
KHRoaXMsQSk7CnRoaXMuYmVmb3JlSW5pdEV2ZW50LmZpcmUoUSk7CmEuYWRkQ2xhc3ModGhpcy5l
bGVtZW50LFEuQ1NTX09WRVJMQVkpOwppZihCKXt0aGlzLmNmZy5hcHBseUNvbmZpZyhCLHRydWUp
Cn1pZih0aGlzLnBsYXRmb3JtPT0ibWFjIiYmVi5nZWNrbyl7aWYoIU8uYWxyZWFkeVN1YnNjcmli
ZWQodGhpcy5zaG93RXZlbnQsdGhpcy5zaG93TWFjR2Vja29TY3JvbGxiYXJzLHRoaXMpKXt0aGlz
LnNob3dFdmVudC5zdWJzY3JpYmUodGhpcy5zaG93TWFjR2Vja29TY3JvbGxiYXJzLHRoaXMsdHJ1
ZSkKfWlmKCFPLmFscmVhZHlTdWJzY3JpYmVkKHRoaXMuaGlkZUV2ZW50LHRoaXMuaGlkZU1hY0dl
Y2tvU2Nyb2xsYmFycyx0aGlzKSl7dGhpcy5oaWRlRXZlbnQuc3Vic2NyaWJlKHRoaXMuaGlkZU1h
Y0dlY2tvU2Nyb2xsYmFycyx0aGlzLHRydWUpCn19dGhpcy5pbml0RXZlbnQuZmlyZShRKQp9LGlu
aXRFdmVudHM6ZnVuY3Rpb24oKXtRLnN1cGVyY2xhc3MuaW5pdEV2ZW50cy5jYWxsKHRoaXMpOwp2
YXIgQT1ULkxJU1Q7CnRoaXMuYmVmb3JlTW92ZUV2ZW50PXRoaXMuY3JlYXRlRXZlbnQoUi5CRUZP
UkVfTU9WRSk7CnRoaXMuYmVmb3JlTW92ZUV2ZW50LnNpZ25hdHVyZT1BOwp0aGlzLm1vdmVFdmVu
dD10aGlzLmNyZWF0ZUV2ZW50KFIuTU9WRSk7CnRoaXMubW92ZUV2ZW50LnNpZ25hdHVyZT1BCn0s
aW5pdERlZmF1bHRDb25maWc6ZnVuY3Rpb24oKXtRLnN1cGVyY2xhc3MuaW5pdERlZmF1bHRDb25m
aWcuY2FsbCh0aGlzKTsKdmFyIEE9dGhpcy5jZmc7CkEuYWRkUHJvcGVydHkoVS5YLmtleSx7aGFu
ZGxlcjp0aGlzLmNvbmZpZ1gsdmFsaWRhdG9yOlUuWC52YWxpZGF0b3Isc3VwcHJlc3NFdmVudDpV
Llguc3VwcHJlc3NFdmVudCxzdXBlcmNlZGVzOlUuWC5zdXBlcmNlZGVzfSk7CkEuYWRkUHJvcGVy
dHkoVS5ZLmtleSx7aGFuZGxlcjp0aGlzLmNvbmZpZ1ksdmFsaWRhdG9yOlUuWS52YWxpZGF0b3Is
c3VwcHJlc3NFdmVudDpVLlkuc3VwcHJlc3NFdmVudCxzdXBlcmNlZGVzOlUuWS5zdXBlcmNlZGVz
fSk7CkEuYWRkUHJvcGVydHkoVS5YWS5rZXkse2hhbmRsZXI6dGhpcy5jb25maWdYWSxzdXBwcmVz
c0V2ZW50OlUuWFkuc3VwcHJlc3NFdmVudCxzdXBlcmNlZGVzOlUuWFkuc3VwZXJjZWRlc30pOwpB
LmFkZFByb3BlcnR5KFUuQ09OVEVYVC5rZXkse2hhbmRsZXI6dGhpcy5jb25maWdDb250ZXh0LHN1
cHByZXNzRXZlbnQ6VS5DT05URVhULnN1cHByZXNzRXZlbnQsc3VwZXJjZWRlczpVLkNPTlRFWFQu
c3VwZXJjZWRlc30pOwpBLmFkZFByb3BlcnR5KFUuRklYRURfQ0VOVEVSLmtleSx7aGFuZGxlcjp0
aGlzLmNvbmZpZ0ZpeGVkQ2VudGVyLHZhbHVlOlUuRklYRURfQ0VOVEVSLnZhbHVlLHZhbGlkYXRv
cjpVLkZJWEVEX0NFTlRFUi52YWxpZGF0b3Isc3VwZXJjZWRlczpVLkZJWEVEX0NFTlRFUi5zdXBl
cmNlZGVzfSk7CkEuYWRkUHJvcGVydHkoVS5XSURUSC5rZXkse2hhbmRsZXI6dGhpcy5jb25maWdX
aWR0aCxzdXBwcmVzc0V2ZW50OlUuV0lEVEguc3VwcHJlc3NFdmVudCxzdXBlcmNlZGVzOlUuV0lE
VEguc3VwZXJjZWRlc30pOwpBLmFkZFByb3BlcnR5KFUuSEVJR0hULmtleSx7aGFuZGxlcjp0aGlz
LmNvbmZpZ0hlaWdodCxzdXBwcmVzc0V2ZW50OlUuSEVJR0hULnN1cHByZXNzRXZlbnQsc3VwZXJj
ZWRlczpVLkhFSUdIVC5zdXBlcmNlZGVzfSk7CkEuYWRkUHJvcGVydHkoVS5BVVRPX0ZJTExfSEVJ
R0hULmtleSx7aGFuZGxlcjp0aGlzLmNvbmZpZ0F1dG9GaWxsSGVpZ2h0LHZhbHVlOlUuQVVUT19G
SUxMX0hFSUdIVC52YWx1ZSx2YWxpZGF0b3I6dGhpcy5fdmFsaWRhdGVBdXRvRmlsbCxzdXBlcmNl
ZGVzOlUuQVVUT19GSUxMX0hFSUdIVC5zdXBlcmNlZGVzfSk7CkEuYWRkUHJvcGVydHkoVS5aSU5E
RVgua2V5LHtoYW5kbGVyOnRoaXMuY29uZmlnekluZGV4LHZhbHVlOlUuWklOREVYLnZhbHVlfSk7
CkEuYWRkUHJvcGVydHkoVS5DT05TVFJBSU5fVE9fVklFV1BPUlQua2V5LHtoYW5kbGVyOnRoaXMu
Y29uZmlnQ29uc3RyYWluVG9WaWV3cG9ydCx2YWx1ZTpVLkNPTlNUUkFJTl9UT19WSUVXUE9SVC52
YWx1ZSx2YWxpZGF0b3I6VS5DT05TVFJBSU5fVE9fVklFV1BPUlQudmFsaWRhdG9yLHN1cGVyY2Vk
ZXM6VS5DT05TVFJBSU5fVE9fVklFV1BPUlQuc3VwZXJjZWRlc30pOwpBLmFkZFByb3BlcnR5KFUu
SUZSQU1FLmtleSx7aGFuZGxlcjp0aGlzLmNvbmZpZ0lmcmFtZSx2YWx1ZTpVLklGUkFNRS52YWx1
ZSx2YWxpZGF0b3I6VS5JRlJBTUUudmFsaWRhdG9yLHN1cGVyY2VkZXM6VS5JRlJBTUUuc3VwZXJj
ZWRlc30pOwpBLmFkZFByb3BlcnR5KFUuUFJFVkVOVF9DT05URVhUX09WRVJMQVAua2V5LHt2YWx1
ZTpVLlBSRVZFTlRfQ09OVEVYVF9PVkVSTEFQLnZhbHVlLHZhbGlkYXRvcjpVLlBSRVZFTlRfQ09O
VEVYVF9PVkVSTEFQLnZhbGlkYXRvcixzdXBlcmNlZGVzOlUuUFJFVkVOVF9DT05URVhUX09WRVJM
QVAuc3VwZXJjZWRlc30pCn0sbW92ZVRvOmZ1bmN0aW9uKEIsQSl7dGhpcy5jZmcuc2V0UHJvcGVy
dHkoInh5IixbQixBXSkKfSxoaWRlTWFjR2Vja29TY3JvbGxiYXJzOmZ1bmN0aW9uKCl7YS5yZXBs
YWNlQ2xhc3ModGhpcy5lbGVtZW50LCJzaG93LXNjcm9sbGJhcnMiLCJoaWRlLXNjcm9sbGJhcnMi
KQp9LHNob3dNYWNHZWNrb1Njcm9sbGJhcnM6ZnVuY3Rpb24oKXthLnJlcGxhY2VDbGFzcyh0aGlz
LmVsZW1lbnQsImhpZGUtc2Nyb2xsYmFycyIsInNob3ctc2Nyb2xsYmFycyIpCn0sX3NldERvbVZp
c2liaWxpdHk6ZnVuY3Rpb24oQil7YS5zZXRTdHlsZSh0aGlzLmVsZW1lbnQsInZpc2liaWxpdHki
LChCKT8idmlzaWJsZSI6ImhpZGRlbiIpOwp2YXIgQT1RLkNTU19ISURERU47CmlmKEIpe2EucmVt
b3ZlQ2xhc3ModGhpcy5lbGVtZW50LEEpCn1lbHNle2EuYWRkQ2xhc3ModGhpcy5lbGVtZW50LEEp
Cn19LGNvbmZpZ1Zpc2libGU6ZnVuY3Rpb24oSSxMLEMpe3ZhciBKPUxbMF0sSD1hLmdldFN0eWxl
KHRoaXMuZWxlbWVudCwidmlzaWJpbGl0eSIpLEI9dGhpcy5jZmcuZ2V0UHJvcGVydHkoImVmZmVj
dCIpLEU9W10sRj0odGhpcy5wbGF0Zm9ybT09Im1hYyImJlYuZ2Vja28pLE09Ty5hbHJlYWR5U3Vi
c2NyaWJlZCxELEssTixoLGksaixlLEEsRzsKaWYoSD09ImluaGVyaXQiKXtOPXRoaXMuZWxlbWVu
dC5wYXJlbnROb2RlOwp3aGlsZShOLm5vZGVUeXBlIT05JiZOLm5vZGVUeXBlIT0xMSl7SD1hLmdl
dFN0eWxlKE4sInZpc2liaWxpdHkiKTsKaWYoSCE9ImluaGVyaXQiKXticmVhawp9Tj1OLnBhcmVu
dE5vZGUKfWlmKEg9PSJpbmhlcml0Iil7SD0idmlzaWJsZSIKfX1pZihCKXtpZihCIGluc3RhbmNl
b2YgQXJyYXkpe0E9Qi5sZW5ndGg7CmZvcihoPTA7Cmg8QTsKaCsrKXtEPUJbaF07CkVbRS5sZW5n
dGhdPUQuZWZmZWN0KHRoaXMsRC5kdXJhdGlvbikKfX1lbHNle0VbRS5sZW5ndGhdPUIuZWZmZWN0
KHRoaXMsQi5kdXJhdGlvbikKfX1pZihKKXtpZihGKXt0aGlzLnNob3dNYWNHZWNrb1Njcm9sbGJh
cnMoKQp9aWYoQil7aWYoSil7aWYoSCE9InZpc2libGUifHxIPT09IiIpe3RoaXMuYmVmb3JlU2hv
d0V2ZW50LmZpcmUoKTsKRz1FLmxlbmd0aDsKZm9yKGk9MDsKaTxHOwppKyspe0s9RVtpXTsKaWYo
aT09PTAmJiFNKEsuYW5pbWF0ZUluQ29tcGxldGVFdmVudCx0aGlzLnNob3dFdmVudC5maXJlLHRo
aXMuc2hvd0V2ZW50KSl7Sy5hbmltYXRlSW5Db21wbGV0ZUV2ZW50LnN1YnNjcmliZSh0aGlzLnNo
b3dFdmVudC5maXJlLHRoaXMuc2hvd0V2ZW50LHRydWUpCn1LLmFuaW1hdGVJbigpCn19fX1lbHNl
e2lmKEghPSJ2aXNpYmxlInx8SD09PSIiKXt0aGlzLmJlZm9yZVNob3dFdmVudC5maXJlKCk7CnRo
aXMuX3NldERvbVZpc2liaWxpdHkodHJ1ZSk7CnRoaXMuY2ZnLnJlZmlyZUV2ZW50KCJpZnJhbWUi
KTsKdGhpcy5zaG93RXZlbnQuZmlyZSgpCn1lbHNle3RoaXMuX3NldERvbVZpc2liaWxpdHkodHJ1
ZSkKfX19ZWxzZXtpZihGKXt0aGlzLmhpZGVNYWNHZWNrb1Njcm9sbGJhcnMoKQp9aWYoQil7aWYo
SD09InZpc2libGUiKXt0aGlzLmJlZm9yZUhpZGVFdmVudC5maXJlKCk7Ckc9RS5sZW5ndGg7CmZv
cihqPTA7Cmo8RzsKaisrKXtlPUVbal07CmlmKGo9PT0wJiYhTShlLmFuaW1hdGVPdXRDb21wbGV0
ZUV2ZW50LHRoaXMuaGlkZUV2ZW50LmZpcmUsdGhpcy5oaWRlRXZlbnQpKXtlLmFuaW1hdGVPdXRD
b21wbGV0ZUV2ZW50LnN1YnNjcmliZSh0aGlzLmhpZGVFdmVudC5maXJlLHRoaXMuaGlkZUV2ZW50
LHRydWUpCn1lLmFuaW1hdGVPdXQoKQp9fWVsc2V7aWYoSD09PSIiKXt0aGlzLl9zZXREb21WaXNp
YmlsaXR5KGZhbHNlKQp9fX1lbHNle2lmKEg9PSJ2aXNpYmxlInx8SD09PSIiKXt0aGlzLmJlZm9y
ZUhpZGVFdmVudC5maXJlKCk7CnRoaXMuX3NldERvbVZpc2liaWxpdHkoZmFsc2UpOwp0aGlzLmhp
ZGVFdmVudC5maXJlKCkKfWVsc2V7dGhpcy5fc2V0RG9tVmlzaWJpbGl0eShmYWxzZSkKfX19fSxk
b0NlbnRlck9uRE9NRXZlbnQ6ZnVuY3Rpb24oKXt2YXIgQj10aGlzLmNmZyxBPUIuZ2V0UHJvcGVy
dHkoImZpeGVkY2VudGVyIik7CmlmKEIuZ2V0UHJvcGVydHkoInZpc2libGUiKSl7aWYoQSYmKEEh
PT1QfHx0aGlzLmZpdHNJblZpZXdwb3J0KCkpKXt0aGlzLmNlbnRlcigpCn19fSxmaXRzSW5WaWV3
cG9ydDpmdW5jdGlvbigpe3ZhciBCPVEuVklFV1BPUlRfT0ZGU0VULEQ9dGhpcy5lbGVtZW50LEE9
RC5vZmZzZXRXaWR0aCxDPUQub2Zmc2V0SGVpZ2h0LEY9YS5nZXRWaWV3cG9ydFdpZHRoKCksRT1h
LmdldFZpZXdwb3J0SGVpZ2h0KCk7CnJldHVybigoQStCPEYpJiYoQytCPEUpKQp9LGNvbmZpZ0Zp
eGVkQ2VudGVyOmZ1bmN0aW9uKEMsRSxCKXt2YXIgQT1FWzBdLEY9Ty5hbHJlYWR5U3Vic2NyaWJl
ZCxEPVEud2luZG93UmVzaXplRXZlbnQsRz1RLndpbmRvd1Njcm9sbEV2ZW50OwppZihBKXt0aGlz
LmNlbnRlcigpOwppZighRih0aGlzLmJlZm9yZVNob3dFdmVudCx0aGlzLmNlbnRlcikpe3RoaXMu
YmVmb3JlU2hvd0V2ZW50LnN1YnNjcmliZSh0aGlzLmNlbnRlcikKfWlmKCFGKEQsdGhpcy5kb0Nl
bnRlck9uRE9NRXZlbnQsdGhpcykpe0Quc3Vic2NyaWJlKHRoaXMuZG9DZW50ZXJPbkRPTUV2ZW50
LHRoaXMsdHJ1ZSkKfWlmKCFGKEcsdGhpcy5kb0NlbnRlck9uRE9NRXZlbnQsdGhpcykpe0cuc3Vi
c2NyaWJlKHRoaXMuZG9DZW50ZXJPbkRPTUV2ZW50LHRoaXMsdHJ1ZSkKfX1lbHNle3RoaXMuYmVm
b3JlU2hvd0V2ZW50LnVuc3Vic2NyaWJlKHRoaXMuY2VudGVyKTsKRC51bnN1YnNjcmliZSh0aGlz
LmRvQ2VudGVyT25ET01FdmVudCx0aGlzKTsKRy51bnN1YnNjcmliZSh0aGlzLmRvQ2VudGVyT25E
T01FdmVudCx0aGlzKQp9fSxjb25maWdIZWlnaHQ6ZnVuY3Rpb24oQixELEEpe3ZhciBFPURbMF0s
Qz10aGlzLmVsZW1lbnQ7CmEuc2V0U3R5bGUoQywiaGVpZ2h0IixFKTsKdGhpcy5jZmcucmVmaXJl
RXZlbnQoImlmcmFtZSIpCn0sY29uZmlnQXV0b0ZpbGxIZWlnaHQ6ZnVuY3Rpb24oRCxFLEgpe3Zh
ciBCPUVbMF0sRz10aGlzLmNmZyxDPSJhdXRvZmlsbGhlaWdodCIsQT0iaGVpZ2h0IixGPUcuZ2V0
UHJvcGVydHkoQyksST10aGlzLl9hdXRvRmlsbE9uSGVpZ2h0Q2hhbmdlOwpHLnVuc3Vic2NyaWJl
RnJvbUNvbmZpZ0V2ZW50KEEsSSk7CloudGV4dFJlc2l6ZUV2ZW50LnVuc3Vic2NyaWJlKEkpOwp0
aGlzLmNoYW5nZUNvbnRlbnRFdmVudC51bnN1YnNjcmliZShJKTsKaWYoRiYmQiE9PUYmJnRoaXNb
Rl0pe2Euc2V0U3R5bGUodGhpc1tGXSxBLCIiKQp9aWYoQil7Qj1YLnRyaW0oQi50b0xvd2VyQ2Fz
ZSgpKTsKRy5zdWJzY3JpYmVUb0NvbmZpZ0V2ZW50KEEsSSx0aGlzW0JdLHRoaXMpOwpaLnRleHRS
ZXNpemVFdmVudC5zdWJzY3JpYmUoSSx0aGlzW0JdLHRoaXMpOwp0aGlzLmNoYW5nZUNvbnRlbnRF
dmVudC5zdWJzY3JpYmUoSSx0aGlzW0JdLHRoaXMpOwpHLnNldFByb3BlcnR5KEMsQix0cnVlKQp9
fSxjb25maWdXaWR0aDpmdW5jdGlvbihCLEUsQSl7dmFyIEM9RVswXSxEPXRoaXMuZWxlbWVudDsK
YS5zZXRTdHlsZShELCJ3aWR0aCIsQyk7CnRoaXMuY2ZnLnJlZmlyZUV2ZW50KCJpZnJhbWUiKQp9
LGNvbmZpZ3pJbmRleDpmdW5jdGlvbihDLEUsQil7dmFyIEE9RVswXSxEPXRoaXMuZWxlbWVudDsK
aWYoIUEpe0E9YS5nZXRTdHlsZShELCJ6SW5kZXgiKTsKaWYoIUF8fGlzTmFOKEEpKXtBPTAKfX1p
Zih0aGlzLmlmcmFtZXx8dGhpcy5jZmcuZ2V0UHJvcGVydHkoImlmcmFtZSIpPT09dHJ1ZSl7aWYo
QTw9MCl7QT0xCn19YS5zZXRTdHlsZShELCJ6SW5kZXgiLEEpOwp0aGlzLmNmZy5zZXRQcm9wZXJ0
eSgiekluZGV4IixBLHRydWUpOwppZih0aGlzLmlmcmFtZSl7dGhpcy5zdGFja0lmcmFtZSgpCn19
LGNvbmZpZ1hZOmZ1bmN0aW9uKEQsRSxDKXt2YXIgQT1FWzBdLEY9QVswXSxCPUFbMV07CnRoaXMu
Y2ZnLnNldFByb3BlcnR5KCJ4IixGKTsKdGhpcy5jZmcuc2V0UHJvcGVydHkoInkiLEIpOwp0aGlz
LmJlZm9yZU1vdmVFdmVudC5maXJlKFtGLEJdKTsKRj10aGlzLmNmZy5nZXRQcm9wZXJ0eSgieCIp
OwpCPXRoaXMuY2ZnLmdldFByb3BlcnR5KCJ5Iik7CnRoaXMuY2ZnLnJlZmlyZUV2ZW50KCJpZnJh
bWUiKTsKdGhpcy5tb3ZlRXZlbnQuZmlyZShbRixCXSkKfSxjb25maWdYOmZ1bmN0aW9uKEMsRCxC
KXt2YXIgRT1EWzBdLEE9dGhpcy5jZmcuZ2V0UHJvcGVydHkoInkiKTsKdGhpcy5jZmcuc2V0UHJv
cGVydHkoIngiLEUsdHJ1ZSk7CnRoaXMuY2ZnLnNldFByb3BlcnR5KCJ5IixBLHRydWUpOwp0aGlz
LmJlZm9yZU1vdmVFdmVudC5maXJlKFtFLEFdKTsKRT10aGlzLmNmZy5nZXRQcm9wZXJ0eSgieCIp
OwpBPXRoaXMuY2ZnLmdldFByb3BlcnR5KCJ5Iik7CmEuc2V0WCh0aGlzLmVsZW1lbnQsRSx0cnVl
KTsKdGhpcy5jZmcuc2V0UHJvcGVydHkoInh5IixbRSxBXSx0cnVlKTsKdGhpcy5jZmcucmVmaXJl
RXZlbnQoImlmcmFtZSIpOwp0aGlzLm1vdmVFdmVudC5maXJlKFtFLEFdKQp9LGNvbmZpZ1k6ZnVu
Y3Rpb24oQyxELEIpe3ZhciBFPXRoaXMuY2ZnLmdldFByb3BlcnR5KCJ4IiksQT1EWzBdOwp0aGlz
LmNmZy5zZXRQcm9wZXJ0eSgieCIsRSx0cnVlKTsKdGhpcy5jZmcuc2V0UHJvcGVydHkoInkiLEEs
dHJ1ZSk7CnRoaXMuYmVmb3JlTW92ZUV2ZW50LmZpcmUoW0UsQV0pOwpFPXRoaXMuY2ZnLmdldFBy
b3BlcnR5KCJ4Iik7CkE9dGhpcy5jZmcuZ2V0UHJvcGVydHkoInkiKTsKYS5zZXRZKHRoaXMuZWxl
bWVudCxBLHRydWUpOwp0aGlzLmNmZy5zZXRQcm9wZXJ0eSgieHkiLFtFLEFdLHRydWUpOwp0aGlz
LmNmZy5yZWZpcmVFdmVudCgiaWZyYW1lIik7CnRoaXMubW92ZUV2ZW50LmZpcmUoW0UsQV0pCn0s
c2hvd0lmcmFtZTpmdW5jdGlvbigpe3ZhciBBPXRoaXMuaWZyYW1lLEI7CmlmKEEpe0I9dGhpcy5l
bGVtZW50LnBhcmVudE5vZGU7CmlmKEIhPUEucGFyZW50Tm9kZSl7dGhpcy5fYWRkVG9QYXJlbnQo
QixBKQp9QS5zdHlsZS5kaXNwbGF5PSJibG9jayIKfX0saGlkZUlmcmFtZTpmdW5jdGlvbigpe2lm
KHRoaXMuaWZyYW1lKXt0aGlzLmlmcmFtZS5zdHlsZS5kaXNwbGF5PSJub25lIgp9fSxzeW5jSWZy
YW1lOmZ1bmN0aW9uKCl7dmFyIEU9dGhpcy5pZnJhbWUsQz10aGlzLmVsZW1lbnQsQT1RLklGUkFN
RV9PRkZTRVQsRD0oQSoyKSxCOwppZihFKXtFLnN0eWxlLndpZHRoPShDLm9mZnNldFdpZHRoK0Qr
InB4Iik7CkUuc3R5bGUuaGVpZ2h0PShDLm9mZnNldEhlaWdodCtEKyJweCIpOwpCPXRoaXMuY2Zn
LmdldFByb3BlcnR5KCJ4eSIpOwppZighWC5pc0FycmF5KEIpfHwoaXNOYU4oQlswXSl8fGlzTmFO
KEJbMV0pKSl7dGhpcy5zeW5jUG9zaXRpb24oKTsKQj10aGlzLmNmZy5nZXRQcm9wZXJ0eSgieHki
KQp9YS5zZXRYWShFLFsoQlswXS1BKSwoQlsxXS1BKV0pCn19LHN0YWNrSWZyYW1lOmZ1bmN0aW9u
KCl7aWYodGhpcy5pZnJhbWUpe3ZhciBBPWEuZ2V0U3R5bGUodGhpcy5lbGVtZW50LCJ6SW5kZXgi
KTsKaWYoIVlBSE9PLmxhbmcuaXNVbmRlZmluZWQoQSkmJiFpc05hTihBKSl7YS5zZXRTdHlsZSh0
aGlzLmlmcmFtZSwiekluZGV4IiwoQS0xKSkKfX19LGNvbmZpZ0lmcmFtZTpmdW5jdGlvbihDLEQs
Qil7dmFyIEY9RFswXTsKZnVuY3Rpb24gQSgpe3ZhciBIPXRoaXMuaWZyYW1lLEc9dGhpcy5lbGVt
ZW50LEo7CmlmKCFIKXtpZighVyl7Vz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsK
aWYodGhpcy5pc1NlY3VyZSl7Vy5zcmM9US5JRlJBTUVfU1JDCn1pZihWLmllKXtXLnN0eWxlLmZp
bHRlcj0iYWxwaGEob3BhY2l0eT0wKSI7ClcuZnJhbWVCb3JkZXI9MAp9ZWxzZXtXLnN0eWxlLm9w
YWNpdHk9IjAiCn1XLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSI7Clcuc3R5bGUuYm9yZGVyPSJu
b25lIjsKVy5zdHlsZS5tYXJnaW49IjAiOwpXLnN0eWxlLnBhZGRpbmc9IjAiOwpXLnN0eWxlLmRp
c3BsYXk9Im5vbmUiOwpXLnRhYkluZGV4PS0xOwpXLmNsYXNzTmFtZT1RLkNTU19JRlJBTUUKfUg9
Vy5jbG9uZU5vZGUoZmFsc2UpOwpILmlkPXRoaXMuaWQrIl9mIjsKSj1HLnBhcmVudE5vZGU7CnZh
ciBJPUp8fGRvY3VtZW50LmJvZHk7CnRoaXMuX2FkZFRvUGFyZW50KEksSCk7CnRoaXMuaWZyYW1l
PUgKfXRoaXMuc2hvd0lmcmFtZSgpOwp0aGlzLnN5bmNJZnJhbWUoKTsKdGhpcy5zdGFja0lmcmFt
ZSgpOwppZighdGhpcy5faGFzSWZyYW1lRXZlbnRMaXN0ZW5lcnMpe3RoaXMuc2hvd0V2ZW50LnN1
YnNjcmliZSh0aGlzLnNob3dJZnJhbWUpOwp0aGlzLmhpZGVFdmVudC5zdWJzY3JpYmUodGhpcy5o
aWRlSWZyYW1lKTsKdGhpcy5jaGFuZ2VDb250ZW50RXZlbnQuc3Vic2NyaWJlKHRoaXMuc3luY0lm
cmFtZSk7CnRoaXMuX2hhc0lmcmFtZUV2ZW50TGlzdGVuZXJzPXRydWUKfX1mdW5jdGlvbiBFKCl7
QS5jYWxsKHRoaXMpOwp0aGlzLmJlZm9yZVNob3dFdmVudC51bnN1YnNjcmliZShFKTsKdGhpcy5f
aWZyYW1lRGVmZXJyZWQ9ZmFsc2UKfWlmKEYpe2lmKHRoaXMuY2ZnLmdldFByb3BlcnR5KCJ2aXNp
YmxlIikpe0EuY2FsbCh0aGlzKQp9ZWxzZXtpZighdGhpcy5faWZyYW1lRGVmZXJyZWQpe3RoaXMu
YmVmb3JlU2hvd0V2ZW50LnN1YnNjcmliZShFKTsKdGhpcy5faWZyYW1lRGVmZXJyZWQ9dHJ1ZQp9
fX1lbHNle3RoaXMuaGlkZUlmcmFtZSgpOwppZih0aGlzLl9oYXNJZnJhbWVFdmVudExpc3RlbmVy
cyl7dGhpcy5zaG93RXZlbnQudW5zdWJzY3JpYmUodGhpcy5zaG93SWZyYW1lKTsKdGhpcy5oaWRl
RXZlbnQudW5zdWJzY3JpYmUodGhpcy5oaWRlSWZyYW1lKTsKdGhpcy5jaGFuZ2VDb250ZW50RXZl
bnQudW5zdWJzY3JpYmUodGhpcy5zeW5jSWZyYW1lKTsKdGhpcy5faGFzSWZyYW1lRXZlbnRMaXN0
ZW5lcnM9ZmFsc2UKfX19LF9wcmltZVhZRnJvbURPTTpmdW5jdGlvbigpe2lmKFlBSE9PLmxhbmcu
aXNVbmRlZmluZWQodGhpcy5jZmcuZ2V0UHJvcGVydHkoInh5IikpKXt0aGlzLnN5bmNQb3NpdGlv
bigpOwp0aGlzLmNmZy5yZWZpcmVFdmVudCgieHkiKTsKdGhpcy5iZWZvcmVTaG93RXZlbnQudW5z
dWJzY3JpYmUodGhpcy5fcHJpbWVYWUZyb21ET00pCn19LGNvbmZpZ0NvbnN0cmFpblRvVmlld3Bv
cnQ6ZnVuY3Rpb24oQyxELEIpe3ZhciBBPURbMF07CmlmKEEpe2lmKCFPLmFscmVhZHlTdWJzY3Jp
YmVkKHRoaXMuYmVmb3JlTW92ZUV2ZW50LHRoaXMuZW5mb3JjZUNvbnN0cmFpbnRzLHRoaXMpKXt0
aGlzLmJlZm9yZU1vdmVFdmVudC5zdWJzY3JpYmUodGhpcy5lbmZvcmNlQ29uc3RyYWludHMsdGhp
cyx0cnVlKQp9aWYoIU8uYWxyZWFkeVN1YnNjcmliZWQodGhpcy5iZWZvcmVTaG93RXZlbnQsdGhp
cy5fcHJpbWVYWUZyb21ET00pKXt0aGlzLmJlZm9yZVNob3dFdmVudC5zdWJzY3JpYmUodGhpcy5f
cHJpbWVYWUZyb21ET00pCn19ZWxzZXt0aGlzLmJlZm9yZVNob3dFdmVudC51bnN1YnNjcmliZSh0
aGlzLl9wcmltZVhZRnJvbURPTSk7CnRoaXMuYmVmb3JlTW92ZUV2ZW50LnVuc3Vic2NyaWJlKHRo
aXMuZW5mb3JjZUNvbnN0cmFpbnRzLHRoaXMpCn19LGNvbmZpZ0NvbnRleHQ6ZnVuY3Rpb24oRCxF
LEgpe3ZhciBBPUVbMF0sRyxKLEMsRixJLEI9dGhpcy5DT05URVhUX1RSSUdHRVJTOwppZihBKXtH
PUFbMF07Cko9QVsxXTsKQz1BWzJdOwpGPUFbM107Ckk9QVs0XTsKaWYoQiYmQi5sZW5ndGg+MCl7
Rj0oRnx8W10pLmNvbmNhdChCKQp9aWYoRyl7aWYodHlwZW9mIEc9PSJzdHJpbmciKXt0aGlzLmNm
Zy5zZXRQcm9wZXJ0eSgiY29udGV4dCIsW2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKEcpLEosQyxG
LEldLHRydWUpCn1pZihKJiZDKXt0aGlzLmFsaWduKEosQyxJKQp9aWYodGhpcy5fY29udGV4dFRy
aWdnZXJzKXt0aGlzLl9wcm9jZXNzVHJpZ2dlcnModGhpcy5fY29udGV4dFRyaWdnZXJzLGIsdGhp
cy5fYWxpZ25PblRyaWdnZXIpCn1pZihGKXt0aGlzLl9wcm9jZXNzVHJpZ2dlcnMoRixZLHRoaXMu
X2FsaWduT25UcmlnZ2VyKTsKdGhpcy5fY29udGV4dFRyaWdnZXJzPUYKfX19fSxfYWxpZ25PblRy
aWdnZXI6ZnVuY3Rpb24oQSxCKXt0aGlzLmFsaWduKCkKfSxfZmluZFRyaWdnZXJDRTpmdW5jdGlv
bihCKXt2YXIgQT1udWxsOwppZihCIGluc3RhbmNlb2YgVCl7QT1CCn1lbHNle2lmKFEuX1RSSUdH
RVJfTUFQW0JdKXtBPVEuX1RSSUdHRVJfTUFQW0JdCn19cmV0dXJuIEEKfSxfcHJvY2Vzc1RyaWdn
ZXJzOmZ1bmN0aW9uKEMsQSxEKXt2YXIgRSxCOwpmb3IodmFyIEY9MCxHPUMubGVuZ3RoOwpGPEc7
CisrRil7RT1DW0ZdOwpCPXRoaXMuX2ZpbmRUcmlnZ2VyQ0UoRSk7CmlmKEIpe0JbQV0oRCx0aGlz
LHRydWUpCn1lbHNle3RoaXNbQV0oRSxEKQp9fX0sYWxpZ246ZnVuY3Rpb24oSCxBLEUpe3ZhciBC
PXRoaXMuY2ZnLmdldFByb3BlcnR5KCJjb250ZXh0IiksRD10aGlzLEksRyxDOwpmdW5jdGlvbiBG
KEssSil7dmFyIEw9bnVsbCxNPW51bGw7CnN3aXRjaChIKXtjYXNlIFEuVE9QX0xFRlQ6TD1KOwpN
PUs7CmJyZWFrOwpjYXNlIFEuVE9QX1JJR0hUOkw9Si1HLm9mZnNldFdpZHRoOwpNPUs7CmJyZWFr
OwpjYXNlIFEuQk9UVE9NX0xFRlQ6TD1KOwpNPUstRy5vZmZzZXRIZWlnaHQ7CmJyZWFrOwpjYXNl
IFEuQk9UVE9NX1JJR0hUOkw9Si1HLm9mZnNldFdpZHRoOwpNPUstRy5vZmZzZXRIZWlnaHQ7CmJy
ZWFrCn1pZihMIT09bnVsbCYmTSE9PW51bGwpe2lmKEUpe0wrPUVbMF07Ck0rPUVbMV0KfUQubW92
ZVRvKEwsTSkKfX1pZihCKXtJPUJbMF07Ckc9dGhpcy5lbGVtZW50OwpEPXRoaXM7CmlmKCFIKXtI
PUJbMV0KfWlmKCFBKXtBPUJbMl0KfWlmKCFFJiZCWzRdKXtFPUJbNF0KfWlmKEcmJkkpe0M9YS5n
ZXRSZWdpb24oSSk7CnN3aXRjaChBKXtjYXNlIFEuVE9QX0xFRlQ6RihDLnRvcCxDLmxlZnQpOwpi
cmVhazsKY2FzZSBRLlRPUF9SSUdIVDpGKEMudG9wLEMucmlnaHQpOwpicmVhazsKY2FzZSBRLkJP
VFRPTV9MRUZUOkYoQy5ib3R0b20sQy5sZWZ0KTsKYnJlYWs7CmNhc2UgUS5CT1RUT01fUklHSFQ6
RihDLmJvdHRvbSxDLnJpZ2h0KTsKYnJlYWsKfX19fSxlbmZvcmNlQ29uc3RyYWludHM6ZnVuY3Rp
b24oRCxFLEMpe3ZhciBBPUVbMF07CnZhciBCPXRoaXMuZ2V0Q29uc3RyYWluZWRYWShBWzBdLEFb
MV0pOwp0aGlzLmNmZy5zZXRQcm9wZXJ0eSgieCIsQlswXSx0cnVlKTsKdGhpcy5jZmcuc2V0UHJv
cGVydHkoInkiLEJbMV0sdHJ1ZSk7CnRoaXMuY2ZnLnNldFByb3BlcnR5KCJ4eSIsQix0cnVlKQp9
LF9nZXRDb25zdHJhaW5lZFBvczpmdW5jdGlvbihDLEspe3ZhciBHPXRoaXMuZWxlbWVudCxJPVEu
VklFV1BPUlRfT0ZGU0VULEE9KEM9PSJ4IiksQj0oQSk/Ry5vZmZzZXRXaWR0aDpHLm9mZnNldEhl
aWdodCxIPShBKT9hLmdldFZpZXdwb3J0V2lkdGgoKTphLmdldFZpZXdwb3J0SGVpZ2h0KCksTT0o
QSk/YS5nZXREb2N1bWVudFNjcm9sbExlZnQoKTphLmdldERvY3VtZW50U2Nyb2xsVG9wKCksTj0o
QSk/US5QUkVWRU5UX09WRVJMQVBfWDpRLlBSRVZFTlRfT1ZFUkxBUF9ZLEw9dGhpcy5jZmcuZ2V0
UHJvcGVydHkoImNvbnRleHQiKSxGPShCK0k8SCksRD10aGlzLmNmZy5nZXRQcm9wZXJ0eSgicHJl
dmVudGNvbnRleHRvdmVybGFwIikmJkwmJk5bKExbMV0rTFsyXSldLEU9TStJLGQ9TStILUItSSxK
PUs7CmlmKEs8RXx8Sz5kKXtpZihEKXtKPXRoaXMuX3ByZXZlbnRPdmVybGFwKEMsTFswXSxCLEgs
TSkKfWVsc2V7aWYoRil7aWYoSzxFKXtKPUUKfWVsc2V7aWYoSz5kKXtKPWQKfX19ZWxzZXtKPUUK
fX19cmV0dXJuIEoKfSxfcHJldmVudE92ZXJsYXA6ZnVuY3Rpb24oQyxELEIsRixOKXt2YXIgQT0o
Qz09IngiKSxHPVEuVklFV1BPUlRfT0ZGU0VULEg9dGhpcyxKPSgoQSk/YS5nZXRYKEQpOmEuZ2V0
WShEKSktTixMPShBKT9ELm9mZnNldFdpZHRoOkQub2Zmc2V0SGVpZ2h0LEs9Si1HLEk9KEYtKEor
TCkpLUcsTT1mYWxzZSxFPWZ1bmN0aW9uKCl7dmFyIGM7CmlmKChILmNmZy5nZXRQcm9wZXJ0eShD
KS1OKT5KKXtjPShKLUIpCn1lbHNle2M9KEorTCkKfUguY2ZnLnNldFByb3BlcnR5KEMsKGMrTiks
dHJ1ZSk7CnJldHVybiBjCn0sZD1mdW5jdGlvbigpe3ZhciBjPSgoSC5jZmcuZ2V0UHJvcGVydHko
QyktTik+Sik/STpLLGY7CmlmKEI+Yyl7aWYoTSl7RSgpCn1lbHNle0UoKTsKTT10cnVlOwpmPWQo
KQp9fXJldHVybiBmCn07CmQoKTsKcmV0dXJuIHRoaXMuY2ZnLmdldFByb3BlcnR5KEMpCn0sZ2V0
Q29uc3RyYWluZWRYOmZ1bmN0aW9uKEEpe3JldHVybiB0aGlzLl9nZXRDb25zdHJhaW5lZFBvcygi
eCIsQSkKfSxnZXRDb25zdHJhaW5lZFk6ZnVuY3Rpb24oQSl7cmV0dXJuIHRoaXMuX2dldENvbnN0
cmFpbmVkUG9zKCJ5IixBKQp9LGdldENvbnN0cmFpbmVkWFk6ZnVuY3Rpb24oQixBKXtyZXR1cm5b
dGhpcy5nZXRDb25zdHJhaW5lZFgoQiksdGhpcy5nZXRDb25zdHJhaW5lZFkoQSldCn0sY2VudGVy
OmZ1bmN0aW9uKCl7dmFyIEQ9US5WSUVXUE9SVF9PRkZTRVQsQz10aGlzLmVsZW1lbnQub2Zmc2V0
V2lkdGgsRT10aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0LEY9YS5nZXRWaWV3cG9ydFdpZHRoKCks
Qj1hLmdldFZpZXdwb3J0SGVpZ2h0KCksRyxBOwppZihDPEYpe0c9KEYvMiktKEMvMikrYS5nZXRE
b2N1bWVudFNjcm9sbExlZnQoKQp9ZWxzZXtHPUQrYS5nZXREb2N1bWVudFNjcm9sbExlZnQoKQp9
aWYoRTxCKXtBPShCLzIpLShFLzIpK2EuZ2V0RG9jdW1lbnRTY3JvbGxUb3AoKQp9ZWxzZXtBPUQr
YS5nZXREb2N1bWVudFNjcm9sbFRvcCgpCn10aGlzLmNmZy5zZXRQcm9wZXJ0eSgieHkiLFtwYXJz
ZUludChHLDEwKSxwYXJzZUludChBLDEwKV0pOwp0aGlzLmNmZy5yZWZpcmVFdmVudCgiaWZyYW1l
Iik7CmlmKFYud2Via2l0KXt0aGlzLmZvcmNlQ29udGFpbmVyUmVkcmF3KCkKfX0sc3luY1Bvc2l0
aW9uOmZ1bmN0aW9uKCl7dmFyIEE9YS5nZXRYWSh0aGlzLmVsZW1lbnQpOwp0aGlzLmNmZy5zZXRQ
cm9wZXJ0eSgieCIsQVswXSx0cnVlKTsKdGhpcy5jZmcuc2V0UHJvcGVydHkoInkiLEFbMV0sdHJ1
ZSk7CnRoaXMuY2ZnLnNldFByb3BlcnR5KCJ4eSIsQSx0cnVlKQp9LG9uRG9tUmVzaXplOmZ1bmN0
aW9uKEEsQil7dmFyIEM9dGhpczsKUS5zdXBlcmNsYXNzLm9uRG9tUmVzaXplLmNhbGwodGhpcyxB
LEIpOwpzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Qy5zeW5jUG9zaXRpb24oKTsKQy5jZmcucmVmaXJl
RXZlbnQoImlmcmFtZSIpOwpDLmNmZy5yZWZpcmVFdmVudCgiY29udGV4dCIpCn0sMCkKfSxfZ2V0
Q29tcHV0ZWRIZWlnaHQ6KGZ1bmN0aW9uKCl7aWYoZG9jdW1lbnQuZGVmYXVsdFZpZXcmJmRvY3Vt
ZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUpe3JldHVybiBmdW5jdGlvbihCKXt2YXIg
Qz1udWxsOwppZihCLm93bmVyRG9jdW1lbnQmJkIub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldyl7
dmFyIEE9Qi5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoQiwiIik7
CmlmKEEpe0M9cGFyc2VJbnQoQS5oZWlnaHQsMTApCn19cmV0dXJuKFguaXNOdW1iZXIoQykpP0M6
bnVsbAp9Cn1lbHNle3JldHVybiBmdW5jdGlvbihBKXt2YXIgQj1udWxsOwppZihBLnN0eWxlLnBp
eGVsSGVpZ2h0KXtCPUEuc3R5bGUucGl4ZWxIZWlnaHQKfXJldHVybihYLmlzTnVtYmVyKEIpKT9C
Om51bGwKfQp9fSkoKSxfdmFsaWRhdGVBdXRvRmlsbEhlaWdodDpmdW5jdGlvbihBKXtyZXR1cm4o
IUEpfHwoWC5pc1N0cmluZyhBKSYmUS5TVERfTU9EX1JFLnRlc3QoQSkpCn0sX2F1dG9GaWxsT25I
ZWlnaHRDaGFuZ2U6ZnVuY3Rpb24oQSxDLEIpe3ZhciBEPXRoaXMuY2ZnLmdldFByb3BlcnR5KCJo
ZWlnaHQiKTsKaWYoKEQmJkQhPT0iYXV0byIpfHwoRD09PTApKXt0aGlzLmZpbGxIZWlnaHQoQikK
fX0sX2dldFByZWNpc2VIZWlnaHQ6ZnVuY3Rpb24oQil7dmFyIEM9Qi5vZmZzZXRIZWlnaHQ7Cmlm
KEIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KXt2YXIgQT1CLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgp
OwpDPUEuYm90dG9tLUEudG9wCn1yZXR1cm4gQwp9LGZpbGxIZWlnaHQ6ZnVuY3Rpb24oRyl7aWYo
Ryl7dmFyIEk9dGhpcy5pbm5lckVsZW1lbnR8fHRoaXMuZWxlbWVudCxKPVt0aGlzLmhlYWRlcix0
aGlzLmJvZHksdGhpcy5mb290ZXJdLEMsQj0wLEE9MCxFPTAsSD1mYWxzZTsKZm9yKHZhciBEPTAs
Rj1KLmxlbmd0aDsKRDxGOwpEKyspe0M9SltEXTsKaWYoQyl7aWYoRyE9PUMpe0ErPXRoaXMuX2dl
dFByZWNpc2VIZWlnaHQoQykKfWVsc2V7SD10cnVlCn19fWlmKEgpe2lmKFYuaWV8fFYub3BlcmEp
e2Euc2V0U3R5bGUoRywiaGVpZ2h0IiwwKyJweCIpCn1CPXRoaXMuX2dldENvbXB1dGVkSGVpZ2h0
KEkpOwppZihCPT09bnVsbCl7YS5hZGRDbGFzcyhJLCJ5dWktb3ZlcnJpZGUtcGFkZGluZyIpOwpC
PUkuY2xpZW50SGVpZ2h0OwphLnJlbW92ZUNsYXNzKEksInl1aS1vdmVycmlkZS1wYWRkaW5nIikK
fUU9TWF0aC5tYXgoQi1BLDApOwphLnNldFN0eWxlKEcsImhlaWdodCIsRSsicHgiKTsKaWYoRy5v
ZmZzZXRIZWlnaHQhPUUpe0U9TWF0aC5tYXgoRS0oRy5vZmZzZXRIZWlnaHQtRSksMCkKfWEuc2V0
U3R5bGUoRywiaGVpZ2h0IixFKyJweCIpCn19fSxicmluZ1RvVG9wOmZ1bmN0aW9uKCl7dmFyIEQ9
W10sRT10aGlzLmVsZW1lbnQ7CmZ1bmN0aW9uIEEoTCxNKXt2YXIgSj1hLmdldFN0eWxlKEwsInpJ
bmRleCIpLEs9YS5nZXRTdHlsZShNLCJ6SW5kZXgiKSxOPSghSnx8aXNOYU4oSikpPzA6cGFyc2VJ
bnQoSiwxMCksST0oIUt8fGlzTmFOKEspKT8wOnBhcnNlSW50KEssMTApOwppZihOPkkpe3JldHVy
biAtMQp9ZWxzZXtpZihOPEkpe3JldHVybiAxCn1lbHNle3JldHVybiAwCn19fWZ1bmN0aW9uIEYo
Sil7dmFyIEs9YS5oYXNDbGFzcyhKLFEuQ1NTX09WRVJMQVkpLEk9WUFIT08ud2lkZ2V0LlBhbmVs
OwppZihLJiYhYS5pc0FuY2VzdG9yKEUsSikpe2lmKEkmJmEuaGFzQ2xhc3MoSixJLkNTU19QQU5F
TCkpe0RbRC5sZW5ndGhdPUoucGFyZW50Tm9kZQp9ZWxzZXtEW0QubGVuZ3RoXT1KCn19fWEuZ2V0
RWxlbWVudHNCeShGLCJESVYiLGRvY3VtZW50LmJvZHkpOwpELnNvcnQoQSk7CnZhciBIPURbMF0s
QjsKaWYoSCl7Qj1hLmdldFN0eWxlKEgsInpJbmRleCIpOwppZighaXNOYU4oQikpe3ZhciBDPWZh
bHNlOwppZihIIT1FKXtDPXRydWUKfWVsc2V7aWYoRC5sZW5ndGg+MSl7dmFyIEc9YS5nZXRTdHls
ZShEWzFdLCJ6SW5kZXgiKTsKaWYoIWlzTmFOKEcpJiYoQj09Rykpe0M9dHJ1ZQp9fX1pZihDKXt0
aGlzLmNmZy5zZXRQcm9wZXJ0eSgiemluZGV4IiwocGFyc2VJbnQoQiwxMCkrMikpCn19fX0sZGVz
dHJveTpmdW5jdGlvbigpe2lmKHRoaXMuaWZyYW1lKXt0aGlzLmlmcmFtZS5wYXJlbnROb2RlLnJl
bW92ZUNoaWxkKHRoaXMuaWZyYW1lKQp9dGhpcy5pZnJhbWU9bnVsbDsKUS53aW5kb3dSZXNpemVF
dmVudC51bnN1YnNjcmliZSh0aGlzLmRvQ2VudGVyT25ET01FdmVudCx0aGlzKTsKUS53aW5kb3dT
Y3JvbGxFdmVudC51bnN1YnNjcmliZSh0aGlzLmRvQ2VudGVyT25ET01FdmVudCx0aGlzKTsKWi50
ZXh0UmVzaXplRXZlbnQudW5zdWJzY3JpYmUodGhpcy5fYXV0b0ZpbGxPbkhlaWdodENoYW5nZSk7
CmlmKHRoaXMuX2NvbnRleHRUcmlnZ2Vycyl7dGhpcy5fcHJvY2Vzc1RyaWdnZXJzKHRoaXMuX2Nv
bnRleHRUcmlnZ2VycyxiLHRoaXMuX2FsaWduT25UcmlnZ2VyKQp9US5zdXBlcmNsYXNzLmRlc3Ry
b3kuY2FsbCh0aGlzKQp9LGZvcmNlQ29udGFpbmVyUmVkcmF3OmZ1bmN0aW9uKCl7dmFyIEE9dGhp
czsKYS5hZGRDbGFzcyhBLmVsZW1lbnQsInl1aS1mb3JjZS1yZWRyYXciKTsKc2V0VGltZW91dChm
dW5jdGlvbigpe2EucmVtb3ZlQ2xhc3MoQS5lbGVtZW50LCJ5dWktZm9yY2UtcmVkcmF3IikKfSww
KQp9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIk92ZXJsYXkgIit0aGlzLmlkCn19KQp9KCkp
OwooZnVuY3Rpb24oKXtZQUhPTy53aWRnZXQuT3ZlcmxheU1hbmFnZXI9ZnVuY3Rpb24oQSl7dGhp
cy5pbml0KEEpCn07CnZhciBKPVlBSE9PLndpZGdldC5PdmVybGF5LEs9WUFIT08udXRpbC5FdmVu
dCxJPVlBSE9PLnV0aWwuRG9tLEw9WUFIT08udXRpbC5Db25maWcsSD1ZQUhPTy51dGlsLkN1c3Rv
bUV2ZW50LEc9WUFIT08ud2lkZ2V0Lk92ZXJsYXlNYW5hZ2VyOwpHLkNTU19GT0NVU0VEPSJmb2N1
c2VkIjsKRy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkcsb3ZlcmxheXM6bnVsbCxpbml0RGVmYXVs
dENvbmZpZzpmdW5jdGlvbigpe3RoaXMuY2ZnLmFkZFByb3BlcnR5KCJvdmVybGF5cyIse3N1cHBy
ZXNzRXZlbnQ6dHJ1ZX0pOwp0aGlzLmNmZy5hZGRQcm9wZXJ0eSgiZm9jdXNldmVudCIse3ZhbHVl
OiJtb3VzZWRvd24ifSkKfSxpbml0OmZ1bmN0aW9uKEEpe3RoaXMuY2ZnPW5ldyBMKHRoaXMpOwp0
aGlzLmluaXREZWZhdWx0Q29uZmlnKCk7CmlmKEEpe3RoaXMuY2ZnLmFwcGx5Q29uZmlnKEEsdHJ1
ZSkKfXRoaXMuY2ZnLmZpcmVRdWV1ZSgpOwp2YXIgQj1udWxsOwp0aGlzLmdldEFjdGl2ZT1mdW5j
dGlvbigpe3JldHVybiBCCn07CnRoaXMuZm9jdXM9ZnVuY3Rpb24oRSl7dmFyIEQ9dGhpcy5maW5k
KEUpOwppZihEKXtELmZvY3VzKCkKfX07CnRoaXMucmVtb3ZlPWZ1bmN0aW9uKEUpe3ZhciBOPXRo
aXMuZmluZChFKSxGOwppZihOKXtpZihCPT1OKXtCPW51bGwKfXZhciBEPShOLmVsZW1lbnQ9PT1u
dWxsJiZOLmNmZz09PW51bGwpP3RydWU6ZmFsc2U7CmlmKCFEKXtGPUkuZ2V0U3R5bGUoTi5lbGVt
ZW50LCJ6SW5kZXgiKTsKTi5jZmcuc2V0UHJvcGVydHkoInpJbmRleCIsLTEwMDAsdHJ1ZSkKfXRo
aXMub3ZlcmxheXMuc29ydCh0aGlzLmNvbXBhcmVaSW5kZXhEZXNjKTsKdGhpcy5vdmVybGF5cz10
aGlzLm92ZXJsYXlzLnNsaWNlKDAsKHRoaXMub3ZlcmxheXMubGVuZ3RoLTEpKTsKTi5oaWRlRXZl
bnQudW5zdWJzY3JpYmUoTi5ibHVyKTsKTi5kZXN0cm95RXZlbnQudW5zdWJzY3JpYmUodGhpcy5f
b25PdmVybGF5RGVzdHJveSxOKTsKTi5mb2N1c0V2ZW50LnVuc3Vic2NyaWJlKHRoaXMuX29uT3Zl
cmxheUZvY3VzSGFuZGxlcixOKTsKTi5ibHVyRXZlbnQudW5zdWJzY3JpYmUodGhpcy5fb25PdmVy
bGF5Qmx1ckhhbmRsZXIsTik7CmlmKCFEKXtLLnJlbW92ZUxpc3RlbmVyKE4uZWxlbWVudCx0aGlz
LmNmZy5nZXRQcm9wZXJ0eSgiZm9jdXNldmVudCIpLHRoaXMuX29uT3ZlcmxheUVsZW1lbnRGb2N1
cyk7Ck4uY2ZnLnNldFByb3BlcnR5KCJ6SW5kZXgiLEYsdHJ1ZSk7Ck4uY2ZnLnNldFByb3BlcnR5
KCJtYW5hZ2VyIixudWxsKQp9aWYoTi5mb2N1c0V2ZW50Ll9tYW5hZ2VkKXtOLmZvY3VzRXZlbnQ9
bnVsbAp9aWYoTi5ibHVyRXZlbnQuX21hbmFnZWQpe04uYmx1ckV2ZW50PW51bGwKfWlmKE4uZm9j
dXMuX21hbmFnZWQpe04uZm9jdXM9bnVsbAp9aWYoTi5ibHVyLl9tYW5hZ2VkKXtOLmJsdXI9bnVs
bAp9fX07CnRoaXMuYmx1ckFsbD1mdW5jdGlvbigpe3ZhciBEPXRoaXMub3ZlcmxheXMubGVuZ3Ro
LEU7CmlmKEQ+MCl7RT1ELTE7CmRve3RoaXMub3ZlcmxheXNbRV0uYmx1cigpCn13aGlsZShFLS0p
Cn19Owp0aGlzLl9tYW5hZ2VCbHVyPWZ1bmN0aW9uKEUpe3ZhciBEPWZhbHNlOwppZihCPT1FKXtJ
LnJlbW92ZUNsYXNzKEIuZWxlbWVudCxHLkNTU19GT0NVU0VEKTsKQj1udWxsOwpEPXRydWUKfXJl
dHVybiBECn07CnRoaXMuX21hbmFnZUZvY3VzPWZ1bmN0aW9uKEUpe3ZhciBEPWZhbHNlOwppZihC
IT1FKXtpZihCKXtCLmJsdXIoKQp9Qj1FOwp0aGlzLmJyaW5nVG9Ub3AoQik7CkkuYWRkQ2xhc3Mo
Qi5lbGVtZW50LEcuQ1NTX0ZPQ1VTRUQpOwpEPXRydWUKfXJldHVybiBECn07CnZhciBDPXRoaXMu
Y2ZnLmdldFByb3BlcnR5KCJvdmVybGF5cyIpOwppZighdGhpcy5vdmVybGF5cyl7dGhpcy5vdmVy
bGF5cz1bXQp9aWYoQyl7dGhpcy5yZWdpc3RlcihDKTsKdGhpcy5vdmVybGF5cy5zb3J0KHRoaXMu
Y29tcGFyZVpJbmRleERlc2MpCn19LF9vbk92ZXJsYXlFbGVtZW50Rm9jdXM6ZnVuY3Rpb24oQSl7
dmFyIEM9Sy5nZXRUYXJnZXQoQSksQj10aGlzLmNsb3NlOwppZihCJiYoQz09Qnx8SS5pc0FuY2Vz
dG9yKEIsQykpKXt0aGlzLmJsdXIoKQp9ZWxzZXt0aGlzLmZvY3VzKCkKfX0sX29uT3ZlcmxheURl
c3Ryb3k6ZnVuY3Rpb24oQixDLEEpe3RoaXMucmVtb3ZlKEEpCn0sX29uT3ZlcmxheUZvY3VzSGFu
ZGxlcjpmdW5jdGlvbihCLEMsQSl7dGhpcy5fbWFuYWdlRm9jdXMoQSkKfSxfb25PdmVybGF5Qmx1
ckhhbmRsZXI6ZnVuY3Rpb24oQixDLEEpe3RoaXMuX21hbmFnZUJsdXIoQSkKfSxfYmluZEZvY3Vz
OmZ1bmN0aW9uKEIpe3ZhciBBPXRoaXM7CmlmKCFCLmZvY3VzRXZlbnQpe0IuZm9jdXNFdmVudD1C
LmNyZWF0ZUV2ZW50KCJmb2N1cyIpOwpCLmZvY3VzRXZlbnQuc2lnbmF0dXJlPUguTElTVDsKQi5m
b2N1c0V2ZW50Ll9tYW5hZ2VkPXRydWUKfWVsc2V7Qi5mb2N1c0V2ZW50LnN1YnNjcmliZShBLl9v
bk92ZXJsYXlGb2N1c0hhbmRsZXIsQixBKQp9aWYoIUIuZm9jdXMpe0sub24oQi5lbGVtZW50LEEu
Y2ZnLmdldFByb3BlcnR5KCJmb2N1c2V2ZW50IiksQS5fb25PdmVybGF5RWxlbWVudEZvY3VzLG51
bGwsQik7CkIuZm9jdXM9ZnVuY3Rpb24oKXtpZihBLl9tYW5hZ2VGb2N1cyh0aGlzKSl7aWYodGhp
cy5jZmcuZ2V0UHJvcGVydHkoInZpc2libGUiKSYmdGhpcy5mb2N1c0ZpcnN0KXt0aGlzLmZvY3Vz
Rmlyc3QoKQp9dGhpcy5mb2N1c0V2ZW50LmZpcmUoKQp9fTsKQi5mb2N1cy5fbWFuYWdlZD10cnVl
Cn19LF9iaW5kQmx1cjpmdW5jdGlvbihCKXt2YXIgQT10aGlzOwppZighQi5ibHVyRXZlbnQpe0Iu
Ymx1ckV2ZW50PUIuY3JlYXRlRXZlbnQoImJsdXIiKTsKQi5ibHVyRXZlbnQuc2lnbmF0dXJlPUgu
TElTVDsKQi5mb2N1c0V2ZW50Ll9tYW5hZ2VkPXRydWUKfWVsc2V7Qi5ibHVyRXZlbnQuc3Vic2Ny
aWJlKEEuX29uT3ZlcmxheUJsdXJIYW5kbGVyLEIsQSkKfWlmKCFCLmJsdXIpe0IuYmx1cj1mdW5j
dGlvbigpe2lmKEEuX21hbmFnZUJsdXIodGhpcykpe3RoaXMuYmx1ckV2ZW50LmZpcmUoKQp9fTsK
Qi5ibHVyLl9tYW5hZ2VkPXRydWUKfUIuaGlkZUV2ZW50LnN1YnNjcmliZShCLmJsdXIpCn0sX2Jp
bmREZXN0cm95OmZ1bmN0aW9uKEIpe3ZhciBBPXRoaXM7CkIuZGVzdHJveUV2ZW50LnN1YnNjcmli
ZShBLl9vbk92ZXJsYXlEZXN0cm95LEIsQSkKfSxfc3luY1pJbmRleDpmdW5jdGlvbihCKXt2YXIg
QT1JLmdldFN0eWxlKEIuZWxlbWVudCwiekluZGV4Iik7CmlmKCFpc05hTihBKSl7Qi5jZmcuc2V0
UHJvcGVydHkoInpJbmRleCIscGFyc2VJbnQoQSwxMCkpCn1lbHNle0IuY2ZnLnNldFByb3BlcnR5
KCJ6SW5kZXgiLDApCn19LHJlZ2lzdGVyOmZ1bmN0aW9uKEQpe3ZhciBBPWZhbHNlLEMsQjsKaWYo
RCBpbnN0YW5jZW9mIEope0QuY2ZnLmFkZFByb3BlcnR5KCJtYW5hZ2VyIix7dmFsdWU6dGhpc30p
Owp0aGlzLl9iaW5kRm9jdXMoRCk7CnRoaXMuX2JpbmRCbHVyKEQpOwp0aGlzLl9iaW5kRGVzdHJv
eShEKTsKdGhpcy5fc3luY1pJbmRleChEKTsKdGhpcy5vdmVybGF5cy5wdXNoKEQpOwp0aGlzLmJy
aW5nVG9Ub3AoRCk7CkE9dHJ1ZQp9ZWxzZXtpZihEIGluc3RhbmNlb2YgQXJyYXkpe2ZvcihDPTAs
Qj1ELmxlbmd0aDsKQzxCOwpDKyspe0E9dGhpcy5yZWdpc3RlcihEW0NdKXx8QQp9fX1yZXR1cm4g
QQp9LGJyaW5nVG9Ub3A6ZnVuY3Rpb24oTil7dmFyIEQ9dGhpcy5maW5kKE4pLEEsRixDOwppZihE
KXtDPXRoaXMub3ZlcmxheXM7CkMuc29ydCh0aGlzLmNvbXBhcmVaSW5kZXhEZXNjKTsKRj1DWzBd
OwppZihGKXtBPUkuZ2V0U3R5bGUoRi5lbGVtZW50LCJ6SW5kZXgiKTsKaWYoIWlzTmFOKEEpKXt2
YXIgQj1mYWxzZTsKaWYoRiE9PUQpe0I9dHJ1ZQp9ZWxzZXtpZihDLmxlbmd0aD4xKXt2YXIgRT1J
LmdldFN0eWxlKENbMV0uZWxlbWVudCwiekluZGV4Iik7CmlmKCFpc05hTihFKSYmKEE9PUUpKXtC
PXRydWUKfX19aWYoQil7RC5jZmcuc2V0UHJvcGVydHkoInppbmRleCIsKHBhcnNlSW50KEEsMTAp
KzIpKQp9fUMuc29ydCh0aGlzLmNvbXBhcmVaSW5kZXhEZXNjKQp9fX0sZmluZDpmdW5jdGlvbihG
KXt2YXIgQj1GIGluc3RhbmNlb2YgSixEPXRoaXMub3ZlcmxheXMsTj1ELmxlbmd0aCxDPW51bGws
QSxFOwppZihCfHx0eXBlb2YgRj09InN0cmluZyIpe2ZvcihFPU4tMTsKRT49MDsKRS0tKXtBPURb
RV07CmlmKChCJiYoQT09PUYpKXx8KEEuaWQ9PUYpKXtDPUE7CmJyZWFrCn19fXJldHVybiBDCn0s
Y29tcGFyZVpJbmRleERlc2M6ZnVuY3Rpb24oQSxCKXt2YXIgQz0oQS5jZmcpP0EuY2ZnLmdldFBy
b3BlcnR5KCJ6SW5kZXgiKTpudWxsLEQ9KEIuY2ZnKT9CLmNmZy5nZXRQcm9wZXJ0eSgiekluZGV4
Iik6bnVsbDsKaWYoQz09PW51bGwmJkQ9PT1udWxsKXtyZXR1cm4gMAp9ZWxzZXtpZihDPT09bnVs
bCl7cmV0dXJuIDEKfWVsc2V7aWYoRD09PW51bGwpe3JldHVybiAtMQp9ZWxzZXtpZihDPkQpe3Jl
dHVybiAtMQp9ZWxzZXtpZihDPEQpe3JldHVybiAxCn1lbHNle3JldHVybiAwCn19fX19fSxzaG93
QWxsOmZ1bmN0aW9uKCl7dmFyIEI9dGhpcy5vdmVybGF5cyxBPUIubGVuZ3RoLEM7CmZvcihDPUEt
MTsKQz49MDsKQy0tKXtCW0NdLnNob3coKQp9fSxoaWRlQWxsOmZ1bmN0aW9uKCl7dmFyIEI9dGhp
cy5vdmVybGF5cyxBPUIubGVuZ3RoLEM7CmZvcihDPUEtMTsKQz49MDsKQy0tKXtCW0NdLmhpZGUo
KQp9fSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJPdmVybGF5TWFuYWdlciIKfX0KfSgpKTsK
KGZ1bmN0aW9uKCl7WUFIT08ud2lkZ2V0LlRvb2x0aXA9ZnVuY3Rpb24oQSxCKXtZQUhPTy53aWRn
ZXQuVG9vbHRpcC5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxBLEIpCn07CnZhciBi
PVlBSE9PLmxhbmcsUz1ZQUhPTy51dGlsLkV2ZW50LFQ9WUFIT08udXRpbC5DdXN0b21FdmVudCxQ
PVlBSE9PLnV0aWwuRG9tLFc9WUFIT08ud2lkZ2V0LlRvb2x0aXAsWT1ZQUhPTy5lbnYudWEsWj0o
WS5pZSYmKFkuaWU8PTZ8fGRvY3VtZW50LmNvbXBhdE1vZGU9PSJCYWNrQ29tcGF0IikpLGEsWD17
UFJFVkVOVF9PVkVSTEFQOntrZXk6InByZXZlbnRvdmVybGFwIix2YWx1ZTp0cnVlLHZhbGlkYXRv
cjpiLmlzQm9vbGVhbixzdXBlcmNlZGVzOlsieCIsInkiLCJ4eSJdfSxTSE9XX0RFTEFZOntrZXk6
InNob3dkZWxheSIsdmFsdWU6MjAwLHZhbGlkYXRvcjpiLmlzTnVtYmVyfSxBVVRPX0RJU01JU1Nf
REVMQVk6e2tleToiYXV0b2Rpc21pc3NkZWxheSIsdmFsdWU6NTAwMCx2YWxpZGF0b3I6Yi5pc051
bWJlcn0sSElERV9ERUxBWTp7a2V5OiJoaWRlZGVsYXkiLHZhbHVlOjI1MCx2YWxpZGF0b3I6Yi5p
c051bWJlcn0sVEVYVDp7a2V5OiJ0ZXh0IixzdXBwcmVzc0V2ZW50OnRydWV9LENPTlRBSU5FUjp7
a2V5OiJjb250YWluZXIifSxESVNBQkxFRDp7a2V5OiJkaXNhYmxlZCIsdmFsdWU6ZmFsc2Usc3Vw
cHJlc3NFdmVudDp0cnVlfSxYWV9PRkZTRVQ6e2tleToieHlvZmZzZXQiLHZhbHVlOlswLDI1XSxz
dXBwcmVzc0V2ZW50OnRydWV9fSxSPXtDT05URVhUX01PVVNFX09WRVI6ImNvbnRleHRNb3VzZU92
ZXIiLENPTlRFWFRfTU9VU0VfT1VUOiJjb250ZXh0TW91c2VPdXQiLENPTlRFWFRfVFJJR0dFUjoi
Y29udGV4dFRyaWdnZXIifTsKVy5DU1NfVE9PTFRJUD0ieXVpLXR0IjsKZnVuY3Rpb24gVihCLEQp
e3ZhciBDPXRoaXMuY2ZnLEE9Qy5nZXRQcm9wZXJ0eSgid2lkdGgiKTsKaWYoQT09RCl7Qy5zZXRQ
cm9wZXJ0eSgid2lkdGgiLEIpCn19ZnVuY3Rpb24gTyhGLEcpe2lmKCJfb3JpZ2luYWxXaWR0aCIg
aW4gdGhpcyl7Vi5jYWxsKHRoaXMsdGhpcy5fb3JpZ2luYWxXaWR0aCx0aGlzLl9mb3JjZWRXaWR0
aCkKfXZhciBFPWRvY3VtZW50LmJvZHksQT10aGlzLmNmZyxCPUEuZ2V0UHJvcGVydHkoIndpZHRo
IiksRCxDOwppZigoIUJ8fEI9PSJhdXRvIikmJihBLmdldFByb3BlcnR5KCJjb250YWluZXIiKSE9
RXx8QS5nZXRQcm9wZXJ0eSgieCIpPj1QLmdldFZpZXdwb3J0V2lkdGgoKXx8QS5nZXRQcm9wZXJ0
eSgieSIpPj1QLmdldFZpZXdwb3J0SGVpZ2h0KCkpKXtDPXRoaXMuZWxlbWVudC5jbG9uZU5vZGUo
dHJ1ZSk7CkMuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIjsKQy5zdHlsZS50b3A9IjBweCI7CkMu
c3R5bGUubGVmdD0iMHB4IjsKRS5hcHBlbmRDaGlsZChDKTsKRD0oQy5vZmZzZXRXaWR0aCsicHgi
KTsKRS5yZW1vdmVDaGlsZChDKTsKQz1udWxsOwpBLnNldFByb3BlcnR5KCJ3aWR0aCIsRCk7CkEu
cmVmaXJlRXZlbnQoInh5Iik7CnRoaXMuX29yaWdpbmFsV2lkdGg9Qnx8IiI7CnRoaXMuX2ZvcmNl
ZFdpZHRoPUQKfX1mdW5jdGlvbiBRKEIsQyxBKXt0aGlzLnJlbmRlcihBKQp9ZnVuY3Rpb24gVSgp
e1Mub25ET01SZWFkeShRLHRoaXMuY2ZnLmdldFByb3BlcnR5KCJjb250YWluZXIiKSx0aGlzKQp9
WUFIT08uZXh0ZW5kKFcsWUFIT08ud2lkZ2V0Lk92ZXJsYXkse2luaXQ6ZnVuY3Rpb24oQSxCKXtX
LnN1cGVyY2xhc3MuaW5pdC5jYWxsKHRoaXMsQSk7CnRoaXMuYmVmb3JlSW5pdEV2ZW50LmZpcmUo
Vyk7ClAuYWRkQ2xhc3ModGhpcy5lbGVtZW50LFcuQ1NTX1RPT0xUSVApOwppZihCKXt0aGlzLmNm
Zy5hcHBseUNvbmZpZyhCLHRydWUpCn10aGlzLmNmZy5xdWV1ZVByb3BlcnR5KCJ2aXNpYmxlIixm
YWxzZSk7CnRoaXMuY2ZnLnF1ZXVlUHJvcGVydHkoImNvbnN0cmFpbnRvdmlld3BvcnQiLHRydWUp
Owp0aGlzLnNldEJvZHkoIiIpOwp0aGlzLnN1YnNjcmliZSgiY2hhbmdlQ29udGVudCIsTyk7CnRo
aXMuc3Vic2NyaWJlKCJpbml0IixVKTsKdGhpcy5zdWJzY3JpYmUoInJlbmRlciIsdGhpcy5vblJl
bmRlcik7CnRoaXMuaW5pdEV2ZW50LmZpcmUoVykKfSxpbml0RXZlbnRzOmZ1bmN0aW9uKCl7Vy5z
dXBlcmNsYXNzLmluaXRFdmVudHMuY2FsbCh0aGlzKTsKdmFyIEE9VC5MSVNUOwp0aGlzLmNvbnRl
eHRNb3VzZU92ZXJFdmVudD10aGlzLmNyZWF0ZUV2ZW50KFIuQ09OVEVYVF9NT1VTRV9PVkVSKTsK
dGhpcy5jb250ZXh0TW91c2VPdmVyRXZlbnQuc2lnbmF0dXJlPUE7CnRoaXMuY29udGV4dE1vdXNl
T3V0RXZlbnQ9dGhpcy5jcmVhdGVFdmVudChSLkNPTlRFWFRfTU9VU0VfT1VUKTsKdGhpcy5jb250
ZXh0TW91c2VPdXRFdmVudC5zaWduYXR1cmU9QTsKdGhpcy5jb250ZXh0VHJpZ2dlckV2ZW50PXRo
aXMuY3JlYXRlRXZlbnQoUi5DT05URVhUX1RSSUdHRVIpOwp0aGlzLmNvbnRleHRUcmlnZ2VyRXZl
bnQuc2lnbmF0dXJlPUEKfSxpbml0RGVmYXVsdENvbmZpZzpmdW5jdGlvbigpe1cuc3VwZXJjbGFz
cy5pbml0RGVmYXVsdENvbmZpZy5jYWxsKHRoaXMpOwp0aGlzLmNmZy5hZGRQcm9wZXJ0eShYLlBS
RVZFTlRfT1ZFUkxBUC5rZXkse3ZhbHVlOlguUFJFVkVOVF9PVkVSTEFQLnZhbHVlLHZhbGlkYXRv
cjpYLlBSRVZFTlRfT1ZFUkxBUC52YWxpZGF0b3Isc3VwZXJjZWRlczpYLlBSRVZFTlRfT1ZFUkxB
UC5zdXBlcmNlZGVzfSk7CnRoaXMuY2ZnLmFkZFByb3BlcnR5KFguU0hPV19ERUxBWS5rZXkse2hh
bmRsZXI6dGhpcy5jb25maWdTaG93RGVsYXksdmFsdWU6MjAwLHZhbGlkYXRvcjpYLlNIT1dfREVM
QVkudmFsaWRhdG9yfSk7CnRoaXMuY2ZnLmFkZFByb3BlcnR5KFguQVVUT19ESVNNSVNTX0RFTEFZ
LmtleSx7aGFuZGxlcjp0aGlzLmNvbmZpZ0F1dG9EaXNtaXNzRGVsYXksdmFsdWU6WC5BVVRPX0RJ
U01JU1NfREVMQVkudmFsdWUsdmFsaWRhdG9yOlguQVVUT19ESVNNSVNTX0RFTEFZLnZhbGlkYXRv
cn0pOwp0aGlzLmNmZy5hZGRQcm9wZXJ0eShYLkhJREVfREVMQVkua2V5LHtoYW5kbGVyOnRoaXMu
Y29uZmlnSGlkZURlbGF5LHZhbHVlOlguSElERV9ERUxBWS52YWx1ZSx2YWxpZGF0b3I6WC5ISURF
X0RFTEFZLnZhbGlkYXRvcn0pOwp0aGlzLmNmZy5hZGRQcm9wZXJ0eShYLlRFWFQua2V5LHtoYW5k
bGVyOnRoaXMuY29uZmlnVGV4dCxzdXBwcmVzc0V2ZW50OlguVEVYVC5zdXBwcmVzc0V2ZW50fSk7
CnRoaXMuY2ZnLmFkZFByb3BlcnR5KFguQ09OVEFJTkVSLmtleSx7aGFuZGxlcjp0aGlzLmNvbmZp
Z0NvbnRhaW5lcix2YWx1ZTpkb2N1bWVudC5ib2R5fSk7CnRoaXMuY2ZnLmFkZFByb3BlcnR5KFgu
RElTQUJMRUQua2V5LHtoYW5kbGVyOnRoaXMuY29uZmlnQ29udGFpbmVyLHZhbHVlOlguRElTQUJM
RUQudmFsdWUsc3VwcmVzc0V2ZW50OlguRElTQUJMRUQuc3VwcHJlc3NFdmVudH0pOwp0aGlzLmNm
Zy5hZGRQcm9wZXJ0eShYLlhZX09GRlNFVC5rZXkse3ZhbHVlOlguWFlfT0ZGU0VULnZhbHVlLmNv
bmNhdCgpLHN1cHJlc3NFdmVudDpYLlhZX09GRlNFVC5zdXBwcmVzc0V2ZW50fSkKfSxjb25maWdU
ZXh0OmZ1bmN0aW9uKEMsRCxCKXt2YXIgQT1EWzBdOwppZihBKXt0aGlzLnNldEJvZHkoQSkKfX0s
Y29uZmlnQ29udGFpbmVyOmZ1bmN0aW9uKEIsQyxBKXt2YXIgRD1DWzBdOwppZih0eXBlb2YgRD09
InN0cmluZyIpe3RoaXMuY2ZnLnNldFByb3BlcnR5KCJjb250YWluZXIiLGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKEQpLHRydWUpCn19LF9yZW1vdmVFdmVudExpc3RlbmVyczpmdW5jdGlvbigpe3Zh
ciBBPXRoaXMuX2NvbnRleHQsRCxCLEM7CmlmKEEpe0Q9QS5sZW5ndGg7CmlmKEQ+MCl7Qz1ELTE7
CmRve0I9QVtDXTsKUy5yZW1vdmVMaXN0ZW5lcihCLCJtb3VzZW92ZXIiLHRoaXMub25Db250ZXh0
TW91c2VPdmVyKTsKUy5yZW1vdmVMaXN0ZW5lcihCLCJtb3VzZW1vdmUiLHRoaXMub25Db250ZXh0
TW91c2VNb3ZlKTsKUy5yZW1vdmVMaXN0ZW5lcihCLCJtb3VzZW91dCIsdGhpcy5vbkNvbnRleHRN
b3VzZU91dCkKfXdoaWxlKEMtLSkKfX19LGNvbmZpZ0NvbnRleHQ6ZnVuY3Rpb24oQyxHLEIpe3Zh
ciBEPUdbMF0sQSxILEUsRjsKaWYoRCl7aWYoIShEIGluc3RhbmNlb2YgQXJyYXkpKXtpZih0eXBl
b2YgRD09InN0cmluZyIpe3RoaXMuY2ZnLnNldFByb3BlcnR5KCJjb250ZXh0IixbZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoRCldLHRydWUpCn1lbHNle3RoaXMuY2ZnLnNldFByb3BlcnR5KCJjb250
ZXh0IixbRF0sdHJ1ZSkKfUQ9dGhpcy5jZmcuZ2V0UHJvcGVydHkoImNvbnRleHQiKQp9dGhpcy5f
cmVtb3ZlRXZlbnRMaXN0ZW5lcnMoKTsKdGhpcy5fY29udGV4dD1EOwpBPXRoaXMuX2NvbnRleHQ7
CmlmKEEpe0g9QS5sZW5ndGg7CmlmKEg+MCl7Rj1ILTE7CmRve0U9QVtGXTsKUy5vbihFLCJtb3Vz
ZW92ZXIiLHRoaXMub25Db250ZXh0TW91c2VPdmVyLHRoaXMpOwpTLm9uKEUsIm1vdXNlbW92ZSIs
dGhpcy5vbkNvbnRleHRNb3VzZU1vdmUsdGhpcyk7ClMub24oRSwibW91c2VvdXQiLHRoaXMub25D
b250ZXh0TW91c2VPdXQsdGhpcykKfXdoaWxlKEYtLSkKfX19fSxvbkNvbnRleHRNb3VzZU1vdmU6
ZnVuY3Rpb24oQSxCKXtCLnBhZ2VYPVMuZ2V0UGFnZVgoQSk7CkIucGFnZVk9Uy5nZXRQYWdlWShB
KQp9LG9uQ29udGV4dE1vdXNlT3ZlcjpmdW5jdGlvbihBLEIpe3ZhciBDPXRoaXM7CmlmKEMudGl0
bGUpe0IuX3RlbXBUaXRsZT1DLnRpdGxlOwpDLnRpdGxlPSIiCn1pZihCLmZpcmVFdmVudCgiY29u
dGV4dE1vdXNlT3ZlciIsQyxBKSE9PWZhbHNlJiYhQi5jZmcuZ2V0UHJvcGVydHkoImRpc2FibGVk
Iikpe2lmKEIuaGlkZVByb2NJZCl7Y2xlYXJUaW1lb3V0KEIuaGlkZVByb2NJZCk7CkIuaGlkZVBy
b2NJZD1udWxsCn1TLm9uKEMsIm1vdXNlbW92ZSIsQi5vbkNvbnRleHRNb3VzZU1vdmUsQik7CkIu
c2hvd1Byb2NJZD1CLmRvU2hvdyhBLEMpCn19LG9uQ29udGV4dE1vdXNlT3V0OmZ1bmN0aW9uKEEs
Qil7dmFyIEM9dGhpczsKaWYoQi5fdGVtcFRpdGxlKXtDLnRpdGxlPUIuX3RlbXBUaXRsZTsKQi5f
dGVtcFRpdGxlPW51bGwKfWlmKEIuc2hvd1Byb2NJZCl7Y2xlYXJUaW1lb3V0KEIuc2hvd1Byb2NJ
ZCk7CkIuc2hvd1Byb2NJZD1udWxsCn1pZihCLmhpZGVQcm9jSWQpe2NsZWFyVGltZW91dChCLmhp
ZGVQcm9jSWQpOwpCLmhpZGVQcm9jSWQ9bnVsbAp9Qi5maXJlRXZlbnQoImNvbnRleHRNb3VzZU91
dCIsQyxBKTsKQi5oaWRlUHJvY0lkPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtCLmhpZGUoKQp9LEIu
Y2ZnLmdldFByb3BlcnR5KCJoaWRlZGVsYXkiKSkKfSxkb1Nob3c6ZnVuY3Rpb24oQyxGKXt2YXIg
QT10aGlzLmNmZy5nZXRQcm9wZXJ0eSgieHlvZmZzZXQiKSxFPUFbMF0sQj1BWzFdLEQ9dGhpczsK
aWYoWS5vcGVyYSYmRi50YWdOYW1lJiZGLnRhZ05hbWUudG9VcHBlckNhc2UoKT09IkEiKXtCKz0x
Mgp9cmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgRz1ELmNmZy5nZXRQcm9wZXJ0eSgi
dGV4dCIpOwppZihELl90ZW1wVGl0bGUmJihHPT09IiJ8fFlBSE9PLmxhbmcuaXNVbmRlZmluZWQo
Ryl8fFlBSE9PLmxhbmcuaXNOdWxsKEcpKSl7RC5zZXRCb2R5KEQuX3RlbXBUaXRsZSkKfWVsc2V7
RC5jZmcucmVmaXJlRXZlbnQoInRleHQiKQp9RC5tb3ZlVG8oRC5wYWdlWCtFLEQucGFnZVkrQik7
CmlmKEQuY2ZnLmdldFByb3BlcnR5KCJwcmV2ZW50b3ZlcmxhcCIpKXtELnByZXZlbnRPdmVybGFw
KEQucGFnZVgsRC5wYWdlWSkKfVMucmVtb3ZlTGlzdGVuZXIoRiwibW91c2Vtb3ZlIixELm9uQ29u
dGV4dE1vdXNlTW92ZSk7CkQuY29udGV4dFRyaWdnZXJFdmVudC5maXJlKEYpOwpELnNob3coKTsK
RC5oaWRlUHJvY0lkPUQuZG9IaWRlKCkKfSx0aGlzLmNmZy5nZXRQcm9wZXJ0eSgic2hvd2RlbGF5
IikpCn0sZG9IaWRlOmZ1bmN0aW9uKCl7dmFyIEE9dGhpczsKcmV0dXJuIHNldFRpbWVvdXQoZnVu
Y3Rpb24oKXtBLmhpZGUoKQp9LHRoaXMuY2ZnLmdldFByb3BlcnR5KCJhdXRvZGlzbWlzc2RlbGF5
IikpCn0scHJldmVudE92ZXJsYXA6ZnVuY3Rpb24oQSxCKXt2YXIgRT10aGlzLmVsZW1lbnQub2Zm
c2V0SGVpZ2h0LEM9bmV3IFlBSE9PLnV0aWwuUG9pbnQoQSxCKSxEPVAuZ2V0UmVnaW9uKHRoaXMu
ZWxlbWVudCk7CkQudG9wLT01OwpELmxlZnQtPTU7CkQucmlnaHQrPTU7CkQuYm90dG9tKz01Owpp
ZihELmNvbnRhaW5zKEMpKXt0aGlzLmNmZy5zZXRQcm9wZXJ0eSgieSIsKEItRS01KSkKfX0sb25S
ZW5kZXI6ZnVuY3Rpb24oQyxEKXtmdW5jdGlvbiBCKCl7dmFyIEg9dGhpcy5lbGVtZW50LEk9dGhp
cy51bmRlcmxheTsKaWYoSSl7SS5zdHlsZS53aWR0aD0oSC5vZmZzZXRXaWR0aCs2KSsicHgiOwpJ
LnN0eWxlLmhlaWdodD0oSC5vZmZzZXRIZWlnaHQrMSkrInB4Igp9fWZ1bmN0aW9uIEYoKXtQLmFk
ZENsYXNzKHRoaXMudW5kZXJsYXksInl1aS10dC1zaGFkb3ctdmlzaWJsZSIpOwppZihZLmllKXt0
aGlzLmZvcmNlVW5kZXJsYXlSZWRyYXcoKQp9fWZ1bmN0aW9uIEcoKXtQLnJlbW92ZUNsYXNzKHRo
aXMudW5kZXJsYXksInl1aS10dC1zaGFkb3ctdmlzaWJsZSIpCn1mdW5jdGlvbiBBKCl7dmFyIEw9
dGhpcy51bmRlcmxheSxILEksSixLOwppZighTCl7SD10aGlzLmVsZW1lbnQ7Ckk9WUFIT08ud2lk
Z2V0Lk1vZHVsZTsKSj1ZLmllOwpLPXRoaXM7CmlmKCFhKXthPWRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImRpdiIpOwphLmNsYXNzTmFtZT0ieXVpLXR0LXNoYWRvdyIKfUw9YS5jbG9uZU5vZGUoZmFs
c2UpOwpILmFwcGVuZENoaWxkKEwpOwp0aGlzLnVuZGVybGF5PUw7CnRoaXMuX3NoYWRvdz10aGlz
LnVuZGVybGF5OwpGLmNhbGwodGhpcyk7CnRoaXMuc3Vic2NyaWJlKCJiZWZvcmVTaG93IixGKTsK
dGhpcy5zdWJzY3JpYmUoImhpZGUiLEcpOwppZihaKXt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlv
bigpe0IuY2FsbChLKQp9LDApOwp0aGlzLmNmZy5zdWJzY3JpYmVUb0NvbmZpZ0V2ZW50KCJ3aWR0
aCIsQik7CnRoaXMuY2ZnLnN1YnNjcmliZVRvQ29uZmlnRXZlbnQoImhlaWdodCIsQik7CnRoaXMu
c3Vic2NyaWJlKCJjaGFuZ2VDb250ZW50IixCKTsKSS50ZXh0UmVzaXplRXZlbnQuc3Vic2NyaWJl
KEIsdGhpcyx0cnVlKTsKdGhpcy5zdWJzY3JpYmUoImRlc3Ryb3kiLGZ1bmN0aW9uKCl7SS50ZXh0
UmVzaXplRXZlbnQudW5zdWJzY3JpYmUoQix0aGlzKQp9KQp9fX1mdW5jdGlvbiBFKCl7QS5jYWxs
KHRoaXMpOwp0aGlzLnVuc3Vic2NyaWJlKCJiZWZvcmVTaG93IixFKQp9aWYodGhpcy5jZmcuZ2V0
UHJvcGVydHkoInZpc2libGUiKSl7QS5jYWxsKHRoaXMpCn1lbHNle3RoaXMuc3Vic2NyaWJlKCJi
ZWZvcmVTaG93IixFKQp9fSxmb3JjZVVuZGVybGF5UmVkcmF3OmZ1bmN0aW9uKCl7dmFyIEE9dGhp
czsKUC5hZGRDbGFzcyhBLnVuZGVybGF5LCJ5dWktZm9yY2UtcmVkcmF3Iik7CnNldFRpbWVvdXQo
ZnVuY3Rpb24oKXtQLnJlbW92ZUNsYXNzKEEudW5kZXJsYXksInl1aS1mb3JjZS1yZWRyYXciKQp9
LDApCn0sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX3JlbW92ZUV2ZW50TGlzdGVuZXJzKCk7Clcu
c3VwZXJjbGFzcy5kZXN0cm95LmNhbGwodGhpcykKfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVy
biJUb29sdGlwICIrdGhpcy5pZAp9fSkKfSgpKTsKKGZ1bmN0aW9uKCl7WUFIT08ud2lkZ2V0LlBh
bmVsPWZ1bmN0aW9uKEEsQil7WUFIT08ud2lkZ2V0LlBhbmVsLnN1cGVyY2xhc3MuY29uc3RydWN0
b3IuY2FsbCh0aGlzLEEsQikKfTsKdmFyIFY9bnVsbDsKdmFyIGo9WUFIT08ubGFuZyxpPVlBSE9P
LnV0aWwsbj1pLkRvbSxVPWkuRXZlbnQsYj1pLkN1c3RvbUV2ZW50LGQ9WUFIT08udXRpbC5LZXlM
aXN0ZW5lcixmPWkuQ29uZmlnLGc9WUFIT08ud2lkZ2V0Lk92ZXJsYXksWj1ZQUhPTy53aWRnZXQu
UGFuZWwsYz1ZQUhPTy5lbnYudWEsWT0oYy5pZSYmKGMuaWU8PTZ8fGRvY3VtZW50LmNvbXBhdE1v
ZGU9PSJCYWNrQ29tcGF0IikpLGgsWCxsLGs9e1NIT1dfTUFTSzoic2hvd01hc2siLEhJREVfTUFT
SzoiaGlkZU1hc2siLERSQUc6ImRyYWcifSxhPXtDTE9TRTp7a2V5OiJjbG9zZSIsdmFsdWU6dHJ1
ZSx2YWxpZGF0b3I6ai5pc0Jvb2xlYW4sc3VwZXJjZWRlczpbInZpc2libGUiXX0sRFJBR0dBQkxF
OntrZXk6ImRyYWdnYWJsZSIsdmFsdWU6KGkuREQ/dHJ1ZTpmYWxzZSksdmFsaWRhdG9yOmouaXNC
b29sZWFuLHN1cGVyY2VkZXM6WyJ2aXNpYmxlIl19LERSQUdfT05MWTp7a2V5OiJkcmFnb25seSIs
dmFsdWU6ZmFsc2UsdmFsaWRhdG9yOmouaXNCb29sZWFuLHN1cGVyY2VkZXM6WyJkcmFnZ2FibGUi
XX0sVU5ERVJMQVk6e2tleToidW5kZXJsYXkiLHZhbHVlOiJzaGFkb3ciLHN1cGVyY2VkZXM6WyJ2
aXNpYmxlIl19LE1PREFMOntrZXk6Im1vZGFsIix2YWx1ZTpmYWxzZSx2YWxpZGF0b3I6ai5pc0Jv
b2xlYW4sc3VwZXJjZWRlczpbInZpc2libGUiLCJ6aW5kZXgiXX0sS0VZX0xJU1RFTkVSUzp7a2V5
OiJrZXlsaXN0ZW5lcnMiLHN1cHByZXNzRXZlbnQ6dHJ1ZSxzdXBlcmNlZGVzOlsidmlzaWJsZSJd
fSxTVFJJTkdTOntrZXk6InN0cmluZ3MiLHN1cGVyY2VkZXM6WyJjbG9zZSJdLHZhbGlkYXRvcjpq
LmlzT2JqZWN0LHZhbHVlOntjbG9zZToiQ2xvc2UifX19OwpaLkNTU19QQU5FTD0ieXVpLXBhbmVs
IjsKWi5DU1NfUEFORUxfQ09OVEFJTkVSPSJ5dWktcGFuZWwtY29udGFpbmVyIjsKWi5GT0NVU0FC
TEU9WyJhIiwiYnV0dG9uIiwic2VsZWN0IiwidGV4dGFyZWEiLCJpbnB1dCIsImlmcmFtZSJdOwpm
dW5jdGlvbiBlKEEsQil7aWYoIXRoaXMuaGVhZGVyJiZ0aGlzLmNmZy5nZXRQcm9wZXJ0eSgiZHJh
Z2dhYmxlIikpe3RoaXMuc2V0SGVhZGVyKCImIzE2MDsiKQp9fWZ1bmN0aW9uIFcoQyxELEEpe3Zh
ciBFPUFbMF0sRz1BWzFdLEY9dGhpcy5jZmcsQj1GLmdldFByb3BlcnR5KCJ3aWR0aCIpOwppZihC
PT1HKXtGLnNldFByb3BlcnR5KCJ3aWR0aCIsRSkKfXRoaXMudW5zdWJzY3JpYmUoImhpZGUiLFcs
QSkKfWZ1bmN0aW9uIG0oQixDKXt2YXIgRCxFLEE7CmlmKFkpe0Q9dGhpcy5jZmc7CkU9RC5nZXRQ
cm9wZXJ0eSgid2lkdGgiKTsKaWYoIUV8fEU9PSJhdXRvIil7QT0odGhpcy5lbGVtZW50Lm9mZnNl
dFdpZHRoKyJweCIpOwpELnNldFByb3BlcnR5KCJ3aWR0aCIsQSk7CnRoaXMuc3Vic2NyaWJlKCJo
aWRlIixXLFsoRXx8IiIpLEFdKQp9fX1ZQUhPTy5leHRlbmQoWixnLHtpbml0OmZ1bmN0aW9uKEEs
Qil7Wi5zdXBlcmNsYXNzLmluaXQuY2FsbCh0aGlzLEEpOwp0aGlzLmJlZm9yZUluaXRFdmVudC5m
aXJlKFopOwpuLmFkZENsYXNzKHRoaXMuZWxlbWVudCxaLkNTU19QQU5FTCk7CnRoaXMuYnVpbGRX
cmFwcGVyKCk7CmlmKEIpe3RoaXMuY2ZnLmFwcGx5Q29uZmlnKEIsdHJ1ZSkKfXRoaXMuc3Vic2Ny
aWJlKCJzaG93TWFzayIsdGhpcy5fYWRkRm9jdXNIYW5kbGVycyk7CnRoaXMuc3Vic2NyaWJlKCJo
aWRlTWFzayIsdGhpcy5fcmVtb3ZlRm9jdXNIYW5kbGVycyk7CnRoaXMuc3Vic2NyaWJlKCJiZWZv
cmVSZW5kZXIiLGUpOwp0aGlzLnN1YnNjcmliZSgicmVuZGVyIixmdW5jdGlvbigpe3RoaXMuc2V0
Rmlyc3RMYXN0Rm9jdXNhYmxlKCk7CnRoaXMuc3Vic2NyaWJlKCJjaGFuZ2VDb250ZW50Iix0aGlz
LnNldEZpcnN0TGFzdEZvY3VzYWJsZSkKfSk7CnRoaXMuc3Vic2NyaWJlKCJzaG93Iix0aGlzLmZv
Y3VzRmlyc3QpOwp0aGlzLmluaXRFdmVudC5maXJlKFopCn0sX29uRWxlbWVudEZvY3VzOmZ1bmN0
aW9uKEQpe2lmKFY9PT10aGlzKXt2YXIgRT1VLmdldFRhcmdldChEKSxGPWRvY3VtZW50LmRvY3Vt
ZW50RWxlbWVudCxCPShFIT09RiYmRSE9PXdpbmRvdyk7CmlmKEImJkUhPT10aGlzLmVsZW1lbnQm
JkUhPT10aGlzLm1hc2smJiFuLmlzQW5jZXN0b3IodGhpcy5lbGVtZW50LEUpKXt0cnl7aWYodGhp
cy5maXJzdEVsZW1lbnQpe3RoaXMuZmlyc3RFbGVtZW50LmZvY3VzKCkKfWVsc2V7aWYodGhpcy5f
bW9kYWxGb2N1cyl7dGhpcy5fbW9kYWxGb2N1cy5mb2N1cygpCn1lbHNle3RoaXMuaW5uZXJFbGVt
ZW50LmZvY3VzKCkKfX19Y2F0Y2goQSl7dHJ5e2lmKEImJkUhPT1kb2N1bWVudC5ib2R5KXtFLmJs
dXIoKQp9fWNhdGNoKEMpe319fX19LF9hZGRGb2N1c0hhbmRsZXJzOmZ1bmN0aW9uKEEsQil7aWYo
IXRoaXMuZmlyc3RFbGVtZW50KXtpZihjLndlYmtpdHx8Yy5vcGVyYSl7aWYoIXRoaXMuX21vZGFs
Rm9jdXMpe3RoaXMuX2NyZWF0ZUhpZGRlbkZvY3VzRWxlbWVudCgpCn19ZWxzZXt0aGlzLmlubmVy
RWxlbWVudC50YWJJbmRleD0wCn19dGhpcy5zZXRUYWJMb29wKHRoaXMuZmlyc3RFbGVtZW50LHRo
aXMubGFzdEVsZW1lbnQpOwpVLm9uRm9jdXMoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHRoaXMu
X29uRWxlbWVudEZvY3VzLHRoaXMsdHJ1ZSk7ClY9dGhpcwp9LF9jcmVhdGVIaWRkZW5Gb2N1c0Vs
ZW1lbnQ6ZnVuY3Rpb24oKXt2YXIgQT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTsK
QS5zdHlsZS5oZWlnaHQ9IjFweCI7CkEuc3R5bGUud2lkdGg9IjFweCI7CkEuc3R5bGUucG9zaXRp
b249ImFic29sdXRlIjsKQS5zdHlsZS5sZWZ0PSItMTAwMDBlbSI7CkEuc3R5bGUub3BhY2l0eT0w
OwpBLnRhYkluZGV4PS0xOwp0aGlzLmlubmVyRWxlbWVudC5hcHBlbmRDaGlsZChBKTsKdGhpcy5f
bW9kYWxGb2N1cz1BCn0sX3JlbW92ZUZvY3VzSGFuZGxlcnM6ZnVuY3Rpb24oQSxCKXtVLnJlbW92
ZUZvY3VzTGlzdGVuZXIoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHRoaXMuX29uRWxlbWVudEZv
Y3VzLHRoaXMpOwppZihWPT10aGlzKXtWPW51bGwKfX0sZm9jdXNGaXJzdDpmdW5jdGlvbihBLEMs
RCl7dmFyIEI9dGhpcy5maXJzdEVsZW1lbnQ7CmlmKEMmJkNbMV0pe1Uuc3RvcEV2ZW50KENbMV0p
Cn1pZihCKXt0cnl7Qi5mb2N1cygpCn1jYXRjaChFKXt9fX0sZm9jdXNMYXN0OmZ1bmN0aW9uKEEs
QyxEKXt2YXIgQj10aGlzLmxhc3RFbGVtZW50OwppZihDJiZDWzFdKXtVLnN0b3BFdmVudChDWzFd
KQp9aWYoQil7dHJ5e0IuZm9jdXMoKQp9Y2F0Y2goRSl7fX19LHNldFRhYkxvb3A6ZnVuY3Rpb24o
RixEKXt2YXIgQj10aGlzLnByZXZlbnRCYWNrVGFiLEE9dGhpcy5wcmV2ZW50VGFiT3V0LEM9dGhp
cy5zaG93RXZlbnQsRT10aGlzLmhpZGVFdmVudDsKaWYoQil7Qi5kaXNhYmxlKCk7CkMudW5zdWJz
Y3JpYmUoQi5lbmFibGUsQik7CkUudW5zdWJzY3JpYmUoQi5kaXNhYmxlLEIpOwpCPXRoaXMucHJl
dmVudEJhY2tUYWI9bnVsbAp9aWYoQSl7QS5kaXNhYmxlKCk7CkMudW5zdWJzY3JpYmUoQS5lbmFi
bGUsQSk7CkUudW5zdWJzY3JpYmUoQS5kaXNhYmxlLEEpOwpBPXRoaXMucHJldmVudFRhYk91dD1u
dWxsCn1pZihGKXt0aGlzLnByZXZlbnRCYWNrVGFiPW5ldyBkKEYse3NoaWZ0OnRydWUsa2V5czo5
fSx7Zm46dGhpcy5mb2N1c0xhc3Qsc2NvcGU6dGhpcyxjb3JyZWN0U2NvcGU6dHJ1ZX0pOwpCPXRo
aXMucHJldmVudEJhY2tUYWI7CkMuc3Vic2NyaWJlKEIuZW5hYmxlLEIsdHJ1ZSk7CkUuc3Vic2Ny
aWJlKEIuZGlzYWJsZSxCLHRydWUpCn1pZihEKXt0aGlzLnByZXZlbnRUYWJPdXQ9bmV3IGQoRCx7
c2hpZnQ6ZmFsc2Usa2V5czo5fSx7Zm46dGhpcy5mb2N1c0ZpcnN0LHNjb3BlOnRoaXMsY29ycmVj
dFNjb3BlOnRydWV9KTsKQT10aGlzLnByZXZlbnRUYWJPdXQ7CkMuc3Vic2NyaWJlKEEuZW5hYmxl
LEEsdHJ1ZSk7CkUuc3Vic2NyaWJlKEEuZGlzYWJsZSxBLHRydWUpCn19LGdldEZvY3VzYWJsZUVs
ZW1lbnRzOmZ1bmN0aW9uKEMpe0M9Q3x8dGhpcy5pbm5lckVsZW1lbnQ7CnZhciBEPXt9Owpmb3Io
dmFyIEE9MDsKQTxaLkZPQ1VTQUJMRS5sZW5ndGg7CkErKyl7RFtaLkZPQ1VTQUJMRVtBXV09dHJ1
ZQp9ZnVuY3Rpb24gQihFKXtpZihFLmZvY3VzJiZFLnR5cGUhPT0iaGlkZGVuIiYmIUUuZGlzYWJs
ZWQmJkRbRS50YWdOYW1lLnRvTG93ZXJDYXNlKCldKXtyZXR1cm4gdHJ1ZQp9cmV0dXJuIGZhbHNl
Cn1yZXR1cm4gbi5nZXRFbGVtZW50c0J5KEIsbnVsbCxDKQp9LHNldEZpcnN0TGFzdEZvY3VzYWJs
ZTpmdW5jdGlvbigpe3RoaXMuZmlyc3RFbGVtZW50PW51bGw7CnRoaXMubGFzdEVsZW1lbnQ9bnVs
bDsKdmFyIEE9dGhpcy5nZXRGb2N1c2FibGVFbGVtZW50cygpOwp0aGlzLmZvY3VzYWJsZUVsZW1l
bnRzPUE7CmlmKEEubGVuZ3RoPjApe3RoaXMuZmlyc3RFbGVtZW50PUFbMF07CnRoaXMubGFzdEVs
ZW1lbnQ9QVtBLmxlbmd0aC0xXQp9aWYodGhpcy5jZmcuZ2V0UHJvcGVydHkoIm1vZGFsIikpe3Ro
aXMuc2V0VGFiTG9vcCh0aGlzLmZpcnN0RWxlbWVudCx0aGlzLmxhc3RFbGVtZW50KQp9fSxpbml0
RXZlbnRzOmZ1bmN0aW9uKCl7Wi5zdXBlcmNsYXNzLmluaXRFdmVudHMuY2FsbCh0aGlzKTsKdmFy
IEE9Yi5MSVNUOwp0aGlzLnNob3dNYXNrRXZlbnQ9dGhpcy5jcmVhdGVFdmVudChrLlNIT1dfTUFT
Syk7CnRoaXMuc2hvd01hc2tFdmVudC5zaWduYXR1cmU9QTsKdGhpcy5oaWRlTWFza0V2ZW50PXRo
aXMuY3JlYXRlRXZlbnQoay5ISURFX01BU0spOwp0aGlzLmhpZGVNYXNrRXZlbnQuc2lnbmF0dXJl
PUE7CnRoaXMuZHJhZ0V2ZW50PXRoaXMuY3JlYXRlRXZlbnQoay5EUkFHKTsKdGhpcy5kcmFnRXZl
bnQuc2lnbmF0dXJlPUEKfSxpbml0RGVmYXVsdENvbmZpZzpmdW5jdGlvbigpe1ouc3VwZXJjbGFz
cy5pbml0RGVmYXVsdENvbmZpZy5jYWxsKHRoaXMpOwp0aGlzLmNmZy5hZGRQcm9wZXJ0eShhLkNM
T1NFLmtleSx7aGFuZGxlcjp0aGlzLmNvbmZpZ0Nsb3NlLHZhbHVlOmEuQ0xPU0UudmFsdWUsdmFs
aWRhdG9yOmEuQ0xPU0UudmFsaWRhdG9yLHN1cGVyY2VkZXM6YS5DTE9TRS5zdXBlcmNlZGVzfSk7
CnRoaXMuY2ZnLmFkZFByb3BlcnR5KGEuRFJBR0dBQkxFLmtleSx7aGFuZGxlcjp0aGlzLmNvbmZp
Z0RyYWdnYWJsZSx2YWx1ZTooaS5ERCk/dHJ1ZTpmYWxzZSx2YWxpZGF0b3I6YS5EUkFHR0FCTEUu
dmFsaWRhdG9yLHN1cGVyY2VkZXM6YS5EUkFHR0FCTEUuc3VwZXJjZWRlc30pOwp0aGlzLmNmZy5h
ZGRQcm9wZXJ0eShhLkRSQUdfT05MWS5rZXkse3ZhbHVlOmEuRFJBR19PTkxZLnZhbHVlLHZhbGlk
YXRvcjphLkRSQUdfT05MWS52YWxpZGF0b3Isc3VwZXJjZWRlczphLkRSQUdfT05MWS5zdXBlcmNl
ZGVzfSk7CnRoaXMuY2ZnLmFkZFByb3BlcnR5KGEuVU5ERVJMQVkua2V5LHtoYW5kbGVyOnRoaXMu
Y29uZmlnVW5kZXJsYXksdmFsdWU6YS5VTkRFUkxBWS52YWx1ZSxzdXBlcmNlZGVzOmEuVU5ERVJM
QVkuc3VwZXJjZWRlc30pOwp0aGlzLmNmZy5hZGRQcm9wZXJ0eShhLk1PREFMLmtleSx7aGFuZGxl
cjp0aGlzLmNvbmZpZ01vZGFsLHZhbHVlOmEuTU9EQUwudmFsdWUsdmFsaWRhdG9yOmEuTU9EQUwu
dmFsaWRhdG9yLHN1cGVyY2VkZXM6YS5NT0RBTC5zdXBlcmNlZGVzfSk7CnRoaXMuY2ZnLmFkZFBy
b3BlcnR5KGEuS0VZX0xJU1RFTkVSUy5rZXkse2hhbmRsZXI6dGhpcy5jb25maWdLZXlMaXN0ZW5l
cnMsc3VwcHJlc3NFdmVudDphLktFWV9MSVNURU5FUlMuc3VwcHJlc3NFdmVudCxzdXBlcmNlZGVz
OmEuS0VZX0xJU1RFTkVSUy5zdXBlcmNlZGVzfSk7CnRoaXMuY2ZnLmFkZFByb3BlcnR5KGEuU1RS
SU5HUy5rZXkse3ZhbHVlOmEuU1RSSU5HUy52YWx1ZSxoYW5kbGVyOnRoaXMuY29uZmlnU3RyaW5n
cyx2YWxpZGF0b3I6YS5TVFJJTkdTLnZhbGlkYXRvcixzdXBlcmNlZGVzOmEuU1RSSU5HUy5zdXBl
cmNlZGVzfSkKfSxjb25maWdDbG9zZTpmdW5jdGlvbihGLEIsRSl7dmFyIEQ9QlswXSxBPXRoaXMu
Y2xvc2UsQz10aGlzLmNmZy5nZXRQcm9wZXJ0eSgic3RyaW5ncyIpOwppZihEKXtpZighQSl7aWYo
IWwpe2w9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwpsLmNsYXNzTmFtZT0iY29udGFpbmVy
LWNsb3NlIjsKbC5ocmVmPSIjIgp9QT1sLmNsb25lTm9kZSh0cnVlKTsKdGhpcy5pbm5lckVsZW1l
bnQuYXBwZW5kQ2hpbGQoQSk7CkEuaW5uZXJIVE1MPShDJiZDLmNsb3NlKT9DLmNsb3NlOiImIzE2
MDsiOwpVLm9uKEEsImNsaWNrIix0aGlzLl9kb0Nsb3NlLHRoaXMsdHJ1ZSk7CnRoaXMuY2xvc2U9
QQp9ZWxzZXtBLnN0eWxlLmRpc3BsYXk9ImJsb2NrIgp9fWVsc2V7aWYoQSl7QS5zdHlsZS5kaXNw
bGF5PSJub25lIgp9fX0sX2RvQ2xvc2U6ZnVuY3Rpb24oQSl7VS5wcmV2ZW50RGVmYXVsdChBKTsK
dGhpcy5oaWRlKCkKfSxjb25maWdEcmFnZ2FibGU6ZnVuY3Rpb24oQixDLEEpe3ZhciBEPUNbMF07
CmlmKEQpe2lmKCFpLkREKXt0aGlzLmNmZy5zZXRQcm9wZXJ0eSgiZHJhZ2dhYmxlIixmYWxzZSk7
CnJldHVybiAKfWlmKHRoaXMuaGVhZGVyKXtuLnNldFN0eWxlKHRoaXMuaGVhZGVyLCJjdXJzb3Ii
LCJtb3ZlIik7CnRoaXMucmVnaXN0ZXJEcmFnRHJvcCgpCn10aGlzLnN1YnNjcmliZSgiYmVmb3Jl
U2hvdyIsbSkKfWVsc2V7aWYodGhpcy5kZCl7dGhpcy5kZC51bnJlZygpCn1pZih0aGlzLmhlYWRl
cil7bi5zZXRTdHlsZSh0aGlzLmhlYWRlciwiY3Vyc29yIiwiYXV0byIpCn10aGlzLnVuc3Vic2Ny
aWJlKCJiZWZvcmVTaG93IixtKQp9fSxjb25maWdVbmRlcmxheTpmdW5jdGlvbihILEksQSl7dmFy
IEo9KHRoaXMucGxhdGZvcm09PSJtYWMiJiZjLmdlY2tvKSxHPUlbMF0udG9Mb3dlckNhc2UoKSxF
PXRoaXMudW5kZXJsYXksRD10aGlzLmVsZW1lbnQ7CmZ1bmN0aW9uIEMoKXt2YXIgTD1mYWxzZTsK
aWYoIUUpe2lmKCFYKXtYPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwpYLmNsYXNzTmFt
ZT0idW5kZXJsYXkiCn1FPVguY2xvbmVOb2RlKGZhbHNlKTsKdGhpcy5lbGVtZW50LmFwcGVuZENo
aWxkKEUpOwp0aGlzLnVuZGVybGF5PUU7CmlmKFkpe3RoaXMuc2l6ZVVuZGVybGF5KCk7CnRoaXMu
Y2ZnLnN1YnNjcmliZVRvQ29uZmlnRXZlbnQoIndpZHRoIix0aGlzLnNpemVVbmRlcmxheSk7CnRo
aXMuY2ZnLnN1YnNjcmliZVRvQ29uZmlnRXZlbnQoImhlaWdodCIsdGhpcy5zaXplVW5kZXJsYXkp
Owp0aGlzLmNoYW5nZUNvbnRlbnRFdmVudC5zdWJzY3JpYmUodGhpcy5zaXplVW5kZXJsYXkpOwpZ
QUhPTy53aWRnZXQuTW9kdWxlLnRleHRSZXNpemVFdmVudC5zdWJzY3JpYmUodGhpcy5zaXplVW5k
ZXJsYXksdGhpcyx0cnVlKQp9aWYoYy53ZWJraXQmJmMud2Via2l0PDQyMCl7dGhpcy5jaGFuZ2VD
b250ZW50RXZlbnQuc3Vic2NyaWJlKHRoaXMuZm9yY2VVbmRlcmxheVJlZHJhdykKfUw9dHJ1ZQp9
fWZ1bmN0aW9uIEsoKXt2YXIgTD1DLmNhbGwodGhpcyk7CmlmKCFMJiZZKXt0aGlzLnNpemVVbmRl
cmxheSgpCn10aGlzLl91bmRlcmxheURlZmVycmVkPWZhbHNlOwp0aGlzLmJlZm9yZVNob3dFdmVu
dC51bnN1YnNjcmliZShLKQp9ZnVuY3Rpb24gQigpe2lmKHRoaXMuX3VuZGVybGF5RGVmZXJyZWQp
e3RoaXMuYmVmb3JlU2hvd0V2ZW50LnVuc3Vic2NyaWJlKEspOwp0aGlzLl91bmRlcmxheURlZmVy
cmVkPWZhbHNlCn1pZihFKXt0aGlzLmNmZy51bnN1YnNjcmliZUZyb21Db25maWdFdmVudCgid2lk
dGgiLHRoaXMuc2l6ZVVuZGVybGF5KTsKdGhpcy5jZmcudW5zdWJzY3JpYmVGcm9tQ29uZmlnRXZl
bnQoImhlaWdodCIsdGhpcy5zaXplVW5kZXJsYXkpOwp0aGlzLmNoYW5nZUNvbnRlbnRFdmVudC51
bnN1YnNjcmliZSh0aGlzLnNpemVVbmRlcmxheSk7CnRoaXMuY2hhbmdlQ29udGVudEV2ZW50LnVu
c3Vic2NyaWJlKHRoaXMuZm9yY2VVbmRlcmxheVJlZHJhdyk7CllBSE9PLndpZGdldC5Nb2R1bGUu
dGV4dFJlc2l6ZUV2ZW50LnVuc3Vic2NyaWJlKHRoaXMuc2l6ZVVuZGVybGF5LHRoaXMsdHJ1ZSk7
CnRoaXMuZWxlbWVudC5yZW1vdmVDaGlsZChFKTsKdGhpcy51bmRlcmxheT1udWxsCn19c3dpdGNo
KEcpe2Nhc2Uic2hhZG93IjpuLnJlbW92ZUNsYXNzKEQsIm1hdHRlIik7Cm4uYWRkQ2xhc3MoRCwi
c2hhZG93Iik7CmJyZWFrOwpjYXNlIm1hdHRlIjppZighSil7Qi5jYWxsKHRoaXMpCn1uLnJlbW92
ZUNsYXNzKEQsInNoYWRvdyIpOwpuLmFkZENsYXNzKEQsIm1hdHRlIik7CmJyZWFrOwpkZWZhdWx0
OmlmKCFKKXtCLmNhbGwodGhpcykKfW4ucmVtb3ZlQ2xhc3MoRCwic2hhZG93Iik7Cm4ucmVtb3Zl
Q2xhc3MoRCwibWF0dGUiKTsKYnJlYWsKfWlmKChHPT0ic2hhZG93Iil8fChKJiYhRSkpe2lmKHRo
aXMuY2ZnLmdldFByb3BlcnR5KCJ2aXNpYmxlIikpe3ZhciBGPUMuY2FsbCh0aGlzKTsKaWYoIUYm
Jlkpe3RoaXMuc2l6ZVVuZGVybGF5KCkKfX1lbHNle2lmKCF0aGlzLl91bmRlcmxheURlZmVycmVk
KXt0aGlzLmJlZm9yZVNob3dFdmVudC5zdWJzY3JpYmUoSyk7CnRoaXMuX3VuZGVybGF5RGVmZXJy
ZWQ9dHJ1ZQp9fX19LGNvbmZpZ01vZGFsOmZ1bmN0aW9uKEIsQyxEKXt2YXIgQT1DWzBdOwppZihB
KXtpZighdGhpcy5faGFzTW9kYWxpdHlFdmVudExpc3RlbmVycyl7dGhpcy5zdWJzY3JpYmUoImJl
Zm9yZVNob3ciLHRoaXMuYnVpbGRNYXNrKTsKdGhpcy5zdWJzY3JpYmUoImJlZm9yZVNob3ciLHRo
aXMuYnJpbmdUb1RvcCk7CnRoaXMuc3Vic2NyaWJlKCJiZWZvcmVTaG93Iix0aGlzLnNob3dNYXNr
KTsKdGhpcy5zdWJzY3JpYmUoImhpZGUiLHRoaXMuaGlkZU1hc2spOwpnLndpbmRvd1Jlc2l6ZUV2
ZW50LnN1YnNjcmliZSh0aGlzLnNpemVNYXNrLHRoaXMsdHJ1ZSk7CnRoaXMuX2hhc01vZGFsaXR5
RXZlbnRMaXN0ZW5lcnM9dHJ1ZQp9fWVsc2V7aWYodGhpcy5faGFzTW9kYWxpdHlFdmVudExpc3Rl
bmVycyl7aWYodGhpcy5jZmcuZ2V0UHJvcGVydHkoInZpc2libGUiKSl7dGhpcy5oaWRlTWFzaygp
Owp0aGlzLnJlbW92ZU1hc2soKQp9dGhpcy51bnN1YnNjcmliZSgiYmVmb3JlU2hvdyIsdGhpcy5i
dWlsZE1hc2spOwp0aGlzLnVuc3Vic2NyaWJlKCJiZWZvcmVTaG93Iix0aGlzLmJyaW5nVG9Ub3Ap
Owp0aGlzLnVuc3Vic2NyaWJlKCJiZWZvcmVTaG93Iix0aGlzLnNob3dNYXNrKTsKdGhpcy51bnN1
YnNjcmliZSgiaGlkZSIsdGhpcy5oaWRlTWFzayk7Cmcud2luZG93UmVzaXplRXZlbnQudW5zdWJz
Y3JpYmUodGhpcy5zaXplTWFzayx0aGlzKTsKdGhpcy5faGFzTW9kYWxpdHlFdmVudExpc3RlbmVy
cz1mYWxzZQp9fX0scmVtb3ZlTWFzazpmdW5jdGlvbigpe3ZhciBBPXRoaXMubWFzayxCOwppZihB
KXt0aGlzLmhpZGVNYXNrKCk7CkI9QS5wYXJlbnROb2RlOwppZihCKXtCLnJlbW92ZUNoaWxkKEEp
Cn10aGlzLm1hc2s9bnVsbAp9fSxjb25maWdLZXlMaXN0ZW5lcnM6ZnVuY3Rpb24oRyxELEMpe3Zh
ciBBPURbMF0sRSxGLEI7CmlmKEEpe2lmKEEgaW5zdGFuY2VvZiBBcnJheSl7Rj1BLmxlbmd0aDsK
Zm9yKEI9MDsKQjxGOwpCKyspe0U9QVtCXTsKaWYoIWYuYWxyZWFkeVN1YnNjcmliZWQodGhpcy5z
aG93RXZlbnQsRS5lbmFibGUsRSkpe3RoaXMuc2hvd0V2ZW50LnN1YnNjcmliZShFLmVuYWJsZSxF
LHRydWUpCn1pZighZi5hbHJlYWR5U3Vic2NyaWJlZCh0aGlzLmhpZGVFdmVudCxFLmRpc2FibGUs
RSkpe3RoaXMuaGlkZUV2ZW50LnN1YnNjcmliZShFLmRpc2FibGUsRSx0cnVlKTsKdGhpcy5kZXN0
cm95RXZlbnQuc3Vic2NyaWJlKEUuZGlzYWJsZSxFLHRydWUpCn19fWVsc2V7aWYoIWYuYWxyZWFk
eVN1YnNjcmliZWQodGhpcy5zaG93RXZlbnQsQS5lbmFibGUsQSkpe3RoaXMuc2hvd0V2ZW50LnN1
YnNjcmliZShBLmVuYWJsZSxBLHRydWUpCn1pZighZi5hbHJlYWR5U3Vic2NyaWJlZCh0aGlzLmhp
ZGVFdmVudCxBLmRpc2FibGUsQSkpe3RoaXMuaGlkZUV2ZW50LnN1YnNjcmliZShBLmRpc2FibGUs
QSx0cnVlKTsKdGhpcy5kZXN0cm95RXZlbnQuc3Vic2NyaWJlKEEuZGlzYWJsZSxBLHRydWUpCn19
fX0sY29uZmlnU3RyaW5nczpmdW5jdGlvbihCLEMsQSl7dmFyIEQ9ai5tZXJnZShhLlNUUklOR1Mu
dmFsdWUsQ1swXSk7CnRoaXMuY2ZnLnNldFByb3BlcnR5KGEuU1RSSU5HUy5rZXksRCx0cnVlKQp9
LGNvbmZpZ0hlaWdodDpmdW5jdGlvbihFLEIsRCl7dmFyIEM9QlswXSxBPXRoaXMuaW5uZXJFbGVt
ZW50OwpuLnNldFN0eWxlKEEsImhlaWdodCIsQyk7CnRoaXMuY2ZnLnJlZmlyZUV2ZW50KCJpZnJh
bWUiKQp9LF9hdXRvRmlsbE9uSGVpZ2h0Q2hhbmdlOmZ1bmN0aW9uKEQsQixBKXtaLnN1cGVyY2xh
c3MuX2F1dG9GaWxsT25IZWlnaHRDaGFuZ2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOwppZihZKXt2
YXIgQz10aGlzOwpzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Qy5zaXplVW5kZXJsYXkoKQp9LDApCn19
LGNvbmZpZ1dpZHRoOmZ1bmN0aW9uKEUsQyxEKXt2YXIgQT1DWzBdLEI9dGhpcy5pbm5lckVsZW1l
bnQ7Cm4uc2V0U3R5bGUoQiwid2lkdGgiLEEpOwp0aGlzLmNmZy5yZWZpcmVFdmVudCgiaWZyYW1l
IikKfSxjb25maWd6SW5kZXg6ZnVuY3Rpb24oQixDLEQpe1ouc3VwZXJjbGFzcy5jb25maWd6SW5k
ZXguY2FsbCh0aGlzLEIsQyxEKTsKaWYodGhpcy5tYXNrfHx0aGlzLmNmZy5nZXRQcm9wZXJ0eSgi
bW9kYWwiKT09PXRydWUpe3ZhciBBPW4uZ2V0U3R5bGUodGhpcy5lbGVtZW50LCJ6SW5kZXgiKTsK
aWYoIUF8fGlzTmFOKEEpKXtBPTAKfWlmKEE9PT0wKXt0aGlzLmNmZy5zZXRQcm9wZXJ0eSgieklu
ZGV4IiwxKQp9ZWxzZXt0aGlzLnN0YWNrTWFzaygpCn19fSxidWlsZFdyYXBwZXI6ZnVuY3Rpb24o
KXt2YXIgQT10aGlzLmVsZW1lbnQucGFyZW50Tm9kZSxDPXRoaXMuZWxlbWVudCxCPWRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwpCLmNsYXNzTmFtZT1aLkNTU19QQU5FTF9DT05UQUlORVI7
CkIuaWQ9Qy5pZCsiX2MiOwppZihBKXtBLmluc2VydEJlZm9yZShCLEMpCn1CLmFwcGVuZENoaWxk
KEMpOwp0aGlzLmVsZW1lbnQ9QjsKdGhpcy5pbm5lckVsZW1lbnQ9QzsKbi5zZXRTdHlsZSh0aGlz
LmlubmVyRWxlbWVudCwidmlzaWJpbGl0eSIsImluaGVyaXQiKQp9LHNpemVVbmRlcmxheTpmdW5j
dGlvbigpe3ZhciBBPXRoaXMudW5kZXJsYXksQjsKaWYoQSl7Qj10aGlzLmVsZW1lbnQ7CkEuc3R5
bGUud2lkdGg9Qi5vZmZzZXRXaWR0aCsicHgiOwpBLnN0eWxlLmhlaWdodD1CLm9mZnNldEhlaWdo
dCsicHgiCn19LHJlZ2lzdGVyRHJhZ0Ryb3A6ZnVuY3Rpb24oKXt2YXIgQT10aGlzOwppZih0aGlz
LmhlYWRlcil7aWYoIWkuREQpe3JldHVybiAKfXZhciBCPSh0aGlzLmNmZy5nZXRQcm9wZXJ0eSgi
ZHJhZ29ubHkiKT09PXRydWUpOwp0aGlzLmRkPW5ldyBpLkREKHRoaXMuZWxlbWVudC5pZCx0aGlz
LmlkLHtkcmFnT25seTpCfSk7CmlmKCF0aGlzLmhlYWRlci5pZCl7dGhpcy5oZWFkZXIuaWQ9dGhp
cy5pZCsiX2giCn10aGlzLmRkLnN0YXJ0RHJhZz1mdW5jdGlvbigpe3ZhciBJLEYsRCxILEMsRTsK
aWYoWUFIT08uZW52LnVhLmllPT02KXtuLmFkZENsYXNzKEEuZWxlbWVudCwiZHJhZyIpCn1pZihB
LmNmZy5nZXRQcm9wZXJ0eSgiY29uc3RyYWludG92aWV3cG9ydCIpKXt2YXIgRz1nLlZJRVdQT1JU
X09GRlNFVDsKST1BLmVsZW1lbnQub2Zmc2V0SGVpZ2h0OwpGPUEuZWxlbWVudC5vZmZzZXRXaWR0
aDsKRD1uLmdldFZpZXdwb3J0V2lkdGgoKTsKSD1uLmdldFZpZXdwb3J0SGVpZ2h0KCk7CkM9bi5n
ZXREb2N1bWVudFNjcm9sbExlZnQoKTsKRT1uLmdldERvY3VtZW50U2Nyb2xsVG9wKCk7CmlmKEkr
RzxIKXt0aGlzLm1pblk9RStHOwp0aGlzLm1heFk9RStILUktRwp9ZWxzZXt0aGlzLm1pblk9RStH
Owp0aGlzLm1heFk9RStHCn1pZihGK0c8RCl7dGhpcy5taW5YPUMrRzsKdGhpcy5tYXhYPUMrRC1G
LUcKfWVsc2V7dGhpcy5taW5YPUMrRzsKdGhpcy5tYXhYPUMrRwp9dGhpcy5jb25zdHJhaW5YPXRy
dWU7CnRoaXMuY29uc3RyYWluWT10cnVlCn1lbHNle3RoaXMuY29uc3RyYWluWD1mYWxzZTsKdGhp
cy5jb25zdHJhaW5ZPWZhbHNlCn1BLmRyYWdFdmVudC5maXJlKCJzdGFydERyYWciLGFyZ3VtZW50
cykKfTsKdGhpcy5kZC5vbkRyYWc9ZnVuY3Rpb24oKXtBLnN5bmNQb3NpdGlvbigpOwpBLmNmZy5y
ZWZpcmVFdmVudCgiaWZyYW1lIik7CmlmKHRoaXMucGxhdGZvcm09PSJtYWMiJiZZQUhPTy5lbnYu
dWEuZ2Vja28pe3RoaXMuc2hvd01hY0dlY2tvU2Nyb2xsYmFycygpCn1BLmRyYWdFdmVudC5maXJl
KCJvbkRyYWciLGFyZ3VtZW50cykKfTsKdGhpcy5kZC5lbmREcmFnPWZ1bmN0aW9uKCl7aWYoWUFI
T08uZW52LnVhLmllPT02KXtuLnJlbW92ZUNsYXNzKEEuZWxlbWVudCwiZHJhZyIpCn1BLmRyYWdF
dmVudC5maXJlKCJlbmREcmFnIixhcmd1bWVudHMpOwpBLm1vdmVFdmVudC5maXJlKEEuY2ZnLmdl
dFByb3BlcnR5KCJ4eSIpKQp9Owp0aGlzLmRkLnNldEhhbmRsZUVsSWQodGhpcy5oZWFkZXIuaWQp
Owp0aGlzLmRkLmFkZEludmFsaWRIYW5kbGVUeXBlKCJJTlBVVCIpOwp0aGlzLmRkLmFkZEludmFs
aWRIYW5kbGVUeXBlKCJTRUxFQ1QiKTsKdGhpcy5kZC5hZGRJbnZhbGlkSGFuZGxlVHlwZSgiVEVY
VEFSRUEiKQp9fSxidWlsZE1hc2s6ZnVuY3Rpb24oKXt2YXIgQT10aGlzLm1hc2s7CmlmKCFBKXtp
ZighaCl7aD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKaC5jbGFzc05hbWU9Im1hc2si
OwpoLmlubmVySFRNTD0iJiMxNjA7Igp9QT1oLmNsb25lTm9kZSh0cnVlKTsKQS5pZD10aGlzLmlk
KyJfbWFzayI7CmRvY3VtZW50LmJvZHkuaW5zZXJ0QmVmb3JlKEEsZG9jdW1lbnQuYm9keS5maXJz
dENoaWxkKTsKdGhpcy5tYXNrPUE7CmlmKFlBSE9PLmVudi51YS5nZWNrbyYmdGhpcy5wbGF0Zm9y
bT09Im1hYyIpe24uYWRkQ2xhc3ModGhpcy5tYXNrLCJibG9jay1zY3JvbGxiYXJzIikKfXRoaXMu
c3RhY2tNYXNrKCkKfX0saGlkZU1hc2s6ZnVuY3Rpb24oKXtpZih0aGlzLmNmZy5nZXRQcm9wZXJ0
eSgibW9kYWwiKSYmdGhpcy5tYXNrKXt0aGlzLm1hc2suc3R5bGUuZGlzcGxheT0ibm9uZSI7Cm4u
cmVtb3ZlQ2xhc3MoZG9jdW1lbnQuYm9keSwibWFza2VkIik7CnRoaXMuaGlkZU1hc2tFdmVudC5m
aXJlKCkKfX0sc2hvd01hc2s6ZnVuY3Rpb24oKXtpZih0aGlzLmNmZy5nZXRQcm9wZXJ0eSgibW9k
YWwiKSYmdGhpcy5tYXNrKXtuLmFkZENsYXNzKGRvY3VtZW50LmJvZHksIm1hc2tlZCIpOwp0aGlz
LnNpemVNYXNrKCk7CnRoaXMubWFzay5zdHlsZS5kaXNwbGF5PSJibG9jayI7CnRoaXMuc2hvd01h
c2tFdmVudC5maXJlKCkKfX0sc2l6ZU1hc2s6ZnVuY3Rpb24oKXtpZih0aGlzLm1hc2spe3ZhciBC
PXRoaXMubWFzayxBPW4uZ2V0Vmlld3BvcnRXaWR0aCgpLEM9bi5nZXRWaWV3cG9ydEhlaWdodCgp
OwppZihCLm9mZnNldEhlaWdodD5DKXtCLnN0eWxlLmhlaWdodD1DKyJweCIKfWlmKEIub2Zmc2V0
V2lkdGg+QSl7Qi5zdHlsZS53aWR0aD1BKyJweCIKfUIuc3R5bGUuaGVpZ2h0PW4uZ2V0RG9jdW1l
bnRIZWlnaHQoKSsicHgiOwpCLnN0eWxlLndpZHRoPW4uZ2V0RG9jdW1lbnRXaWR0aCgpKyJweCIK
fX0sc3RhY2tNYXNrOmZ1bmN0aW9uKCl7aWYodGhpcy5tYXNrKXt2YXIgQT1uLmdldFN0eWxlKHRo
aXMuZWxlbWVudCwiekluZGV4Iik7CmlmKCFZQUhPTy5sYW5nLmlzVW5kZWZpbmVkKEEpJiYhaXNO
YU4oQSkpe24uc2V0U3R5bGUodGhpcy5tYXNrLCJ6SW5kZXgiLEEtMSkKfX19LHJlbmRlcjpmdW5j
dGlvbihBKXtyZXR1cm4gWi5zdXBlcmNsYXNzLnJlbmRlci5jYWxsKHRoaXMsQSx0aGlzLmlubmVy
RWxlbWVudCkKfSxfcmVuZGVySGVhZGVyOmZ1bmN0aW9uKEEpe0E9QXx8dGhpcy5pbm5lckVsZW1l
bnQ7Clouc3VwZXJjbGFzcy5fcmVuZGVySGVhZGVyLmNhbGwodGhpcyxBKQp9LF9yZW5kZXJCb2R5
OmZ1bmN0aW9uKEEpe0E9QXx8dGhpcy5pbm5lckVsZW1lbnQ7Clouc3VwZXJjbGFzcy5fcmVuZGVy
Qm9keS5jYWxsKHRoaXMsQSkKfSxfcmVuZGVyRm9vdGVyOmZ1bmN0aW9uKEEpe0E9QXx8dGhpcy5p
bm5lckVsZW1lbnQ7Clouc3VwZXJjbGFzcy5fcmVuZGVyRm9vdGVyLmNhbGwodGhpcyxBKQp9LGRl
c3Ryb3k6ZnVuY3Rpb24oKXtnLndpbmRvd1Jlc2l6ZUV2ZW50LnVuc3Vic2NyaWJlKHRoaXMuc2l6
ZU1hc2ssdGhpcyk7CnRoaXMucmVtb3ZlTWFzaygpOwppZih0aGlzLmNsb3NlKXtVLnB1cmdlRWxl
bWVudCh0aGlzLmNsb3NlKQp9Wi5zdXBlcmNsYXNzLmRlc3Ryb3kuY2FsbCh0aGlzKQp9LGZvcmNl
VW5kZXJsYXlSZWRyYXc6ZnVuY3Rpb24oKXt2YXIgQT10aGlzLnVuZGVybGF5OwpuLmFkZENsYXNz
KEEsInl1aS1mb3JjZS1yZWRyYXciKTsKc2V0VGltZW91dChmdW5jdGlvbigpe24ucmVtb3ZlQ2xh
c3MoQSwieXVpLWZvcmNlLXJlZHJhdyIpCn0sMCkKfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVy
biJQYW5lbCAiK3RoaXMuaWQKfX0pCn0oKSk7CihmdW5jdGlvbigpe1lBSE9PLndpZGdldC5EaWFs
b2c9ZnVuY3Rpb24oQSxCKXtZQUhPTy53aWRnZXQuRGlhbG9nLnN1cGVyY2xhc3MuY29uc3RydWN0
b3IuY2FsbCh0aGlzLEEsQikKfTsKdmFyIFA9WUFIT08udXRpbC5FdmVudCxLPVlBSE9PLnV0aWwu
Q3VzdG9tRXZlbnQsTT1ZQUhPTy51dGlsLkRvbSxJPVlBSE9PLndpZGdldC5EaWFsb2csTD1ZQUhP
Ty5sYW5nLEo9e0JFRk9SRV9TVUJNSVQ6ImJlZm9yZVN1Ym1pdCIsU1VCTUlUOiJzdWJtaXQiLE1B
TlVBTF9TVUJNSVQ6Im1hbnVhbFN1Ym1pdCIsQVNZTkNfU1VCTUlUOiJhc3luY1N1Ym1pdCIsRk9S
TV9TVUJNSVQ6ImZvcm1TdWJtaXQiLENBTkNFTDoiY2FuY2VsIn0sTz17UE9TVF9NRVRIT0Q6e2tl
eToicG9zdG1ldGhvZCIsdmFsdWU6ImFzeW5jIn0sUE9TVF9EQVRBOntrZXk6InBvc3RkYXRhIix2
YWx1ZTpudWxsfSxCVVRUT05TOntrZXk6ImJ1dHRvbnMiLHZhbHVlOiJub25lIixzdXBlcmNlZGVz
OlsidmlzaWJsZSJdfSxISURFQUZURVJTVUJNSVQ6e2tleToiaGlkZWFmdGVyc3VibWl0Iix2YWx1
ZTp0cnVlfX07CkkuQ1NTX0RJQUxPRz0ieXVpLWRpYWxvZyI7CmZ1bmN0aW9uIE4oKXt2YXIgQT10
aGlzLl9hQnV0dG9ucyxDLEIsRDsKaWYoTC5pc0FycmF5KEEpKXtDPUEubGVuZ3RoOwppZihDPjAp
e0Q9Qy0xOwpkb3tCPUFbRF07CmlmKFlBSE9PLndpZGdldC5CdXR0b24mJkIgaW5zdGFuY2VvZiBZ
QUhPTy53aWRnZXQuQnV0dG9uKXtCLmRlc3Ryb3koKQp9ZWxzZXtpZihCLnRhZ05hbWUudG9VcHBl
ckNhc2UoKT09IkJVVFRPTiIpe1AucHVyZ2VFbGVtZW50KEIpOwpQLnB1cmdlRWxlbWVudChCLGZh
bHNlKQp9fX13aGlsZShELS0pCn19fVlBSE9PLmV4dGVuZChJLFlBSE9PLndpZGdldC5QYW5lbCx7
Zm9ybTpudWxsLGluaXREZWZhdWx0Q29uZmlnOmZ1bmN0aW9uKCl7SS5zdXBlcmNsYXNzLmluaXRE
ZWZhdWx0Q29uZmlnLmNhbGwodGhpcyk7CnRoaXMuY2FsbGJhY2s9e3N1Y2Nlc3M6bnVsbCxmYWls
dXJlOm51bGwsYXJndW1lbnQ6bnVsbH07CnRoaXMuY2ZnLmFkZFByb3BlcnR5KE8uUE9TVF9NRVRI
T0Qua2V5LHtoYW5kbGVyOnRoaXMuY29uZmlnUG9zdE1ldGhvZCx2YWx1ZTpPLlBPU1RfTUVUSE9E
LnZhbHVlLHZhbGlkYXRvcjpmdW5jdGlvbihBKXtpZihBIT0iZm9ybSImJkEhPSJhc3luYyImJkEh
PSJub25lIiYmQSE9Im1hbnVhbCIpe3JldHVybiBmYWxzZQp9ZWxzZXtyZXR1cm4gdHJ1ZQp9fX0p
Owp0aGlzLmNmZy5hZGRQcm9wZXJ0eShPLlBPU1RfREFUQS5rZXkse3ZhbHVlOk8uUE9TVF9EQVRB
LnZhbHVlfSk7CnRoaXMuY2ZnLmFkZFByb3BlcnR5KE8uSElERUFGVEVSU1VCTUlULmtleSx7dmFs
dWU6Ty5ISURFQUZURVJTVUJNSVQudmFsdWV9KTsKdGhpcy5jZmcuYWRkUHJvcGVydHkoTy5CVVRU
T05TLmtleSx7aGFuZGxlcjp0aGlzLmNvbmZpZ0J1dHRvbnMsdmFsdWU6Ty5CVVRUT05TLnZhbHVl
LHN1cGVyY2VkZXM6Ty5CVVRUT05TLnN1cGVyY2VkZXN9KQp9LGluaXRFdmVudHM6ZnVuY3Rpb24o
KXtJLnN1cGVyY2xhc3MuaW5pdEV2ZW50cy5jYWxsKHRoaXMpOwp2YXIgQT1LLkxJU1Q7CnRoaXMu
YmVmb3JlU3VibWl0RXZlbnQ9dGhpcy5jcmVhdGVFdmVudChKLkJFRk9SRV9TVUJNSVQpOwp0aGlz
LmJlZm9yZVN1Ym1pdEV2ZW50LnNpZ25hdHVyZT1BOwp0aGlzLnN1Ym1pdEV2ZW50PXRoaXMuY3Jl
YXRlRXZlbnQoSi5TVUJNSVQpOwp0aGlzLnN1Ym1pdEV2ZW50LnNpZ25hdHVyZT1BOwp0aGlzLm1h
bnVhbFN1Ym1pdEV2ZW50PXRoaXMuY3JlYXRlRXZlbnQoSi5NQU5VQUxfU1VCTUlUKTsKdGhpcy5t
YW51YWxTdWJtaXRFdmVudC5zaWduYXR1cmU9QTsKdGhpcy5hc3luY1N1Ym1pdEV2ZW50PXRoaXMu
Y3JlYXRlRXZlbnQoSi5BU1lOQ19TVUJNSVQpOwp0aGlzLmFzeW5jU3VibWl0RXZlbnQuc2lnbmF0
dXJlPUE7CnRoaXMuZm9ybVN1Ym1pdEV2ZW50PXRoaXMuY3JlYXRlRXZlbnQoSi5GT1JNX1NVQk1J
VCk7CnRoaXMuZm9ybVN1Ym1pdEV2ZW50LnNpZ25hdHVyZT1BOwp0aGlzLmNhbmNlbEV2ZW50PXRo
aXMuY3JlYXRlRXZlbnQoSi5DQU5DRUwpOwp0aGlzLmNhbmNlbEV2ZW50LnNpZ25hdHVyZT1BCn0s
aW5pdDpmdW5jdGlvbihBLEIpe0kuc3VwZXJjbGFzcy5pbml0LmNhbGwodGhpcyxBKTsKdGhpcy5i
ZWZvcmVJbml0RXZlbnQuZmlyZShJKTsKTS5hZGRDbGFzcyh0aGlzLmVsZW1lbnQsSS5DU1NfRElB
TE9HKTsKdGhpcy5jZmcuc2V0UHJvcGVydHkoInZpc2libGUiLGZhbHNlKTsKaWYoQil7dGhpcy5j
ZmcuYXBwbHlDb25maWcoQix0cnVlKQp9dGhpcy5zaG93RXZlbnQuc3Vic2NyaWJlKHRoaXMuZm9j
dXNGaXJzdCx0aGlzLHRydWUpOwp0aGlzLmJlZm9yZUhpZGVFdmVudC5zdWJzY3JpYmUodGhpcy5i
bHVyQnV0dG9ucyx0aGlzLHRydWUpOwp0aGlzLnN1YnNjcmliZSgiY2hhbmdlQm9keSIsdGhpcy5y
ZWdpc3RlckZvcm0pOwp0aGlzLmluaXRFdmVudC5maXJlKEkpCn0sZG9TdWJtaXQ6ZnVuY3Rpb24o
KXt2YXIgQz1ZQUhPTy51dGlsLkNvbm5lY3QsQj10aGlzLmZvcm0sSD1mYWxzZSxFPWZhbHNlLEEs
RixHLFQ7CnN3aXRjaCh0aGlzLmNmZy5nZXRQcm9wZXJ0eSgicG9zdG1ldGhvZCIpKXtjYXNlImFz
eW5jIjpBPUIuZWxlbWVudHM7CkY9QS5sZW5ndGg7CmlmKEY+MCl7Rz1GLTE7CmRve2lmKEFbR10u
dHlwZT09ImZpbGUiKXtIPXRydWU7CmJyZWFrCn19d2hpbGUoRy0tKQp9aWYoSCYmWUFIT08uZW52
LnVhLmllJiZ0aGlzLmlzU2VjdXJlKXtFPXRydWUKfVQ9dGhpcy5fZ2V0Rm9ybUF0dHJpYnV0ZXMo
Qik7CkMuc2V0Rm9ybShCLEgsRSk7CnZhciBTPXRoaXMuY2ZnLmdldFByb3BlcnR5KCJwb3N0ZGF0
YSIpOwp2YXIgRD1DLmFzeW5jUmVxdWVzdChULm1ldGhvZCxULmFjdGlvbix0aGlzLmNhbGxiYWNr
LFMpOwp0aGlzLmFzeW5jU3VibWl0RXZlbnQuZmlyZShEKTsKYnJlYWs7CmNhc2UiZm9ybSI6Qi5z
dWJtaXQoKTsKdGhpcy5mb3JtU3VibWl0RXZlbnQuZmlyZSgpOwpicmVhazsKY2FzZSJub25lIjpj
YXNlIm1hbnVhbCI6dGhpcy5tYW51YWxTdWJtaXRFdmVudC5maXJlKCk7CmJyZWFrCn19LF9nZXRG
b3JtQXR0cmlidXRlczpmdW5jdGlvbihCKXt2YXIgRD17bWV0aG9kOm51bGwsYWN0aW9uOm51bGx9
OwppZihCKXtpZihCLmdldEF0dHJpYnV0ZU5vZGUpe3ZhciBDPUIuZ2V0QXR0cmlidXRlTm9kZSgi
YWN0aW9uIik7CnZhciBBPUIuZ2V0QXR0cmlidXRlTm9kZSgibWV0aG9kIik7CmlmKEMpe0QuYWN0
aW9uPUMudmFsdWUKfWlmKEEpe0QubWV0aG9kPUEudmFsdWUKfX1lbHNle0QuYWN0aW9uPUIuZ2V0
QXR0cmlidXRlKCJhY3Rpb24iKTsKRC5tZXRob2Q9Qi5nZXRBdHRyaWJ1dGUoIm1ldGhvZCIpCn19
RC5tZXRob2Q9KEwuaXNTdHJpbmcoRC5tZXRob2QpP0QubWV0aG9kOiJQT1NUIikudG9VcHBlckNh
c2UoKTsKRC5hY3Rpb249TC5pc1N0cmluZyhELmFjdGlvbik/RC5hY3Rpb246IiI7CnJldHVybiBE
Cn0scmVnaXN0ZXJGb3JtOmZ1bmN0aW9uKCl7dmFyIEE9dGhpcy5lbGVtZW50LmdldEVsZW1lbnRz
QnlUYWdOYW1lKCJmb3JtIilbMF07CmlmKHRoaXMuZm9ybSl7aWYodGhpcy5mb3JtPT1BJiZNLmlz
QW5jZXN0b3IodGhpcy5lbGVtZW50LHRoaXMuZm9ybSkpe3JldHVybiAKfWVsc2V7UC5wdXJnZUVs
ZW1lbnQodGhpcy5mb3JtKTsKdGhpcy5mb3JtPW51bGwKfX1pZighQSl7QT1kb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJmb3JtIik7CkEubmFtZT0iZnJtXyIrdGhpcy5pZDsKdGhpcy5ib2R5LmFwcGVu
ZENoaWxkKEEpCn1pZihBKXt0aGlzLmZvcm09QTsKUC5vbihBLCJzdWJtaXQiLHRoaXMuX3N1Ym1p
dEhhbmRsZXIsdGhpcyx0cnVlKQp9fSxfc3VibWl0SGFuZGxlcjpmdW5jdGlvbihBKXtQLnN0b3BF
dmVudChBKTsKdGhpcy5zdWJtaXQoKTsKdGhpcy5mb3JtLmJsdXIoKQp9LHNldFRhYkxvb3A6ZnVu
Y3Rpb24oQixBKXtCPUJ8fHRoaXMuZmlyc3RCdXR0b247CkE9dGhpcy5sYXN0QnV0dG9ufHxBOwpJ
LnN1cGVyY2xhc3Muc2V0VGFiTG9vcC5jYWxsKHRoaXMsQixBKQp9LHNldEZpcnN0TGFzdEZvY3Vz
YWJsZTpmdW5jdGlvbigpe0kuc3VwZXJjbGFzcy5zZXRGaXJzdExhc3RGb2N1c2FibGUuY2FsbCh0
aGlzKTsKdmFyIEMsRCxCLEE9dGhpcy5mb2N1c2FibGVFbGVtZW50czsKdGhpcy5maXJzdEZvcm1F
bGVtZW50PW51bGw7CnRoaXMubGFzdEZvcm1FbGVtZW50PW51bGw7CmlmKHRoaXMuZm9ybSYmQSYm
QS5sZW5ndGg+MCl7RD1BLmxlbmd0aDsKZm9yKEM9MDsKQzxEOworK0Mpe0I9QVtDXTsKaWYodGhp
cy5mb3JtPT09Qi5mb3JtKXt0aGlzLmZpcnN0Rm9ybUVsZW1lbnQ9QjsKYnJlYWsKfX1mb3IoQz1E
LTE7CkM+PTA7Ci0tQyl7Qj1BW0NdOwppZih0aGlzLmZvcm09PT1CLmZvcm0pe3RoaXMubGFzdEZv
cm1FbGVtZW50PUI7CmJyZWFrCn19fX0sY29uZmlnQ2xvc2U6ZnVuY3Rpb24oQixDLEEpe0kuc3Vw
ZXJjbGFzcy5jb25maWdDbG9zZS5hcHBseSh0aGlzLGFyZ3VtZW50cykKfSxfZG9DbG9zZTpmdW5j
dGlvbihBKXtQLnByZXZlbnREZWZhdWx0KEEpOwp0aGlzLmNhbmNlbCgpCn0sY29uZmlnQnV0dG9u
czpmdW5jdGlvbihDLEQsVil7dmFyIEg9WUFIT08ud2lkZ2V0LkJ1dHRvbixBPURbMF0sWD10aGlz
LmlubmVyRWxlbWVudCxCLEYsWSxFLEcsWixXOwpOLmNhbGwodGhpcyk7CnRoaXMuX2FCdXR0b25z
PW51bGw7CmlmKEwuaXNBcnJheShBKSl7Rz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7
CkcuY2xhc3NOYW1lPSJidXR0b24tZ3JvdXAiOwpFPUEubGVuZ3RoOwp0aGlzLl9hQnV0dG9ucz1b
XTsKdGhpcy5kZWZhdWx0SHRtbEJ1dHRvbj1udWxsOwpmb3IoVz0wOwpXPEU7ClcrKyl7Qj1BW1dd
OwppZihIKXtZPW5ldyBIKHtsYWJlbDpCLnRleHR9KTsKWS5hcHBlbmRUbyhHKTsKRj1ZLmdldCgi
ZWxlbWVudCIpOwppZihCLmlzRGVmYXVsdCl7WS5hZGRDbGFzcygiZGVmYXVsdCIpOwp0aGlzLmRl
ZmF1bHRIdG1sQnV0dG9uPUYKfWlmKEwuaXNGdW5jdGlvbihCLmhhbmRsZXIpKXtZLnNldCgib25j
bGljayIse2ZuOkIuaGFuZGxlcixvYmo6dGhpcyxzY29wZTp0aGlzfSkKfWVsc2V7aWYoTC5pc09i
amVjdChCLmhhbmRsZXIpJiZMLmlzRnVuY3Rpb24oQi5oYW5kbGVyLmZuKSl7WS5zZXQoIm9uY2xp
Y2siLHtmbjpCLmhhbmRsZXIuZm4sb2JqOigoIUwuaXNVbmRlZmluZWQoQi5oYW5kbGVyLm9iaikp
P0IuaGFuZGxlci5vYmo6dGhpcyksc2NvcGU6KEIuaGFuZGxlci5zY29wZXx8dGhpcyl9KQp9fXRo
aXMuX2FCdXR0b25zW3RoaXMuX2FCdXR0b25zLmxlbmd0aF09WQp9ZWxzZXtGPWRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImJ1dHRvbiIpOwpGLnNldEF0dHJpYnV0ZSgidHlwZSIsImJ1dHRvbiIpOwpp
ZihCLmlzRGVmYXVsdCl7Ri5jbGFzc05hbWU9ImRlZmF1bHQiOwp0aGlzLmRlZmF1bHRIdG1sQnV0
dG9uPUYKfUYuaW5uZXJIVE1MPUIudGV4dDsKaWYoTC5pc0Z1bmN0aW9uKEIuaGFuZGxlcikpe1Au
b24oRiwiY2xpY2siLEIuaGFuZGxlcix0aGlzLHRydWUpCn1lbHNle2lmKEwuaXNPYmplY3QoQi5o
YW5kbGVyKSYmTC5pc0Z1bmN0aW9uKEIuaGFuZGxlci5mbikpe1Aub24oRiwiY2xpY2siLEIuaGFu
ZGxlci5mbiwoKCFMLmlzVW5kZWZpbmVkKEIuaGFuZGxlci5vYmopKT9CLmhhbmRsZXIub2JqOnRo
aXMpLChCLmhhbmRsZXIuc2NvcGV8fHRoaXMpKQp9fUcuYXBwZW5kQ2hpbGQoRik7CnRoaXMuX2FC
dXR0b25zW3RoaXMuX2FCdXR0b25zLmxlbmd0aF09Rgp9Qi5odG1sQnV0dG9uPUY7CmlmKFc9PT0w
KXt0aGlzLmZpcnN0QnV0dG9uPUYKfWlmKFc9PShFLTEpKXt0aGlzLmxhc3RCdXR0b249Rgp9fXRo
aXMuc2V0Rm9vdGVyKEcpOwpaPXRoaXMuZm9vdGVyOwppZihNLmluRG9jdW1lbnQodGhpcy5lbGVt
ZW50KSYmIU0uaXNBbmNlc3RvcihYLFopKXtYLmFwcGVuZENoaWxkKFopCn10aGlzLmJ1dHRvblNw
YW49Rwp9ZWxzZXtHPXRoaXMuYnV0dG9uU3BhbjsKWj10aGlzLmZvb3RlcjsKaWYoRyYmWil7Wi5y
ZW1vdmVDaGlsZChHKTsKdGhpcy5idXR0b25TcGFuPW51bGw7CnRoaXMuZmlyc3RCdXR0b249bnVs
bDsKdGhpcy5sYXN0QnV0dG9uPW51bGw7CnRoaXMuZGVmYXVsdEh0bWxCdXR0b249bnVsbAp9fXRo
aXMuY2hhbmdlQ29udGVudEV2ZW50LmZpcmUoKQp9LGdldEJ1dHRvbnM6ZnVuY3Rpb24oKXtyZXR1
cm4gdGhpcy5fYUJ1dHRvbnN8fG51bGwKfSxmb2N1c0ZpcnN0OmZ1bmN0aW9uKEIsRCxFKXt2YXIg
Qz10aGlzLmZpcnN0Rm9ybUVsZW1lbnQ7CmlmKEQmJkRbMV0pe1Auc3RvcEV2ZW50KERbMV0pCn1p
ZihDKXt0cnl7Qy5mb2N1cygpCn1jYXRjaChBKXt9fWVsc2V7aWYodGhpcy5kZWZhdWx0SHRtbEJ1
dHRvbil7dGhpcy5mb2N1c0RlZmF1bHRCdXR0b24oKQp9ZWxzZXt0aGlzLmZvY3VzRmlyc3RCdXR0
b24oKQp9fX0sZm9jdXNMYXN0OmZ1bmN0aW9uKEIsRCxGKXt2YXIgRT10aGlzLmNmZy5nZXRQcm9w
ZXJ0eSgiYnV0dG9ucyIpLEM9dGhpcy5sYXN0Rm9ybUVsZW1lbnQ7CmlmKEQmJkRbMV0pe1Auc3Rv
cEV2ZW50KERbMV0pCn1pZihFJiZMLmlzQXJyYXkoRSkpe3RoaXMuZm9jdXNMYXN0QnV0dG9uKCkK
fWVsc2V7aWYoQyl7dHJ5e0MuZm9jdXMoKQp9Y2F0Y2goQSl7fX19fSxfZ2V0QnV0dG9uOmZ1bmN0
aW9uKEEpe3ZhciBCPVlBSE9PLndpZGdldC5CdXR0b247CmlmKEImJkEmJkEubm9kZU5hbWUmJkEu
aWQpe0E9Qi5nZXRCdXR0b24oQS5pZCl8fEEKfXJldHVybiBBCn0sZm9jdXNEZWZhdWx0QnV0dG9u
OmZ1bmN0aW9uKCl7dmFyIEI9dGhpcy5fZ2V0QnV0dG9uKHRoaXMuZGVmYXVsdEh0bWxCdXR0b24p
OwppZihCKXt0cnl7Qi5mb2N1cygpCn1jYXRjaChBKXt9fX0sYmx1ckJ1dHRvbnM6ZnVuY3Rpb24o
KXt2YXIgRT10aGlzLmNmZy5nZXRQcm9wZXJ0eSgiYnV0dG9ucyIpLEIsRixDLEQ7CmlmKEUmJkwu
aXNBcnJheShFKSl7Qj1FLmxlbmd0aDsKaWYoQj4wKXtEPShCLTEpOwpkb3tGPUVbRF07CmlmKEYp
e0M9dGhpcy5fZ2V0QnV0dG9uKEYuaHRtbEJ1dHRvbik7CmlmKEMpe3RyeXtDLmJsdXIoKQp9Y2F0
Y2goQSl7fX19fXdoaWxlKEQtLSkKfX19LGZvY3VzRmlyc3RCdXR0b246ZnVuY3Rpb24oKXt2YXIg
QT10aGlzLmNmZy5nZXRQcm9wZXJ0eSgiYnV0dG9ucyIpLEIsRDsKaWYoQSYmTC5pc0FycmF5KEEp
KXtCPUFbMF07CmlmKEIpe0Q9dGhpcy5fZ2V0QnV0dG9uKEIuaHRtbEJ1dHRvbik7CmlmKEQpe3Ry
eXtELmZvY3VzKCkKfWNhdGNoKEMpe319fX19LGZvY3VzTGFzdEJ1dHRvbjpmdW5jdGlvbigpe3Zh
ciBFPXRoaXMuY2ZnLmdldFByb3BlcnR5KCJidXR0b25zIiksQyxBLEQ7CmlmKEUmJkwuaXNBcnJh
eShFKSl7Qz1FLmxlbmd0aDsKaWYoQz4wKXtBPUVbKEMtMSldOwppZihBKXtEPXRoaXMuX2dldEJ1
dHRvbihBLmh0bWxCdXR0b24pOwppZihEKXt0cnl7RC5mb2N1cygpCn1jYXRjaChCKXt9fX19fX0s
Y29uZmlnUG9zdE1ldGhvZDpmdW5jdGlvbihCLEMsQSl7dGhpcy5yZWdpc3RlckZvcm0oKQp9LHZh
bGlkYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRydWUKfSxzdWJtaXQ6ZnVuY3Rpb24oKXtpZih0aGlz
LnZhbGlkYXRlKCkpe2lmKHRoaXMuYmVmb3JlU3VibWl0RXZlbnQuZmlyZSgpKXt0aGlzLmRvU3Vi
bWl0KCk7CnRoaXMuc3VibWl0RXZlbnQuZmlyZSgpOwppZih0aGlzLmNmZy5nZXRQcm9wZXJ0eSgi
aGlkZWFmdGVyc3VibWl0Iikpe3RoaXMuaGlkZSgpCn1yZXR1cm4gdHJ1ZQp9ZWxzZXtyZXR1cm4g
ZmFsc2UKfX1lbHNle3JldHVybiBmYWxzZQp9fSxjYW5jZWw6ZnVuY3Rpb24oKXt0aGlzLmNhbmNl
bEV2ZW50LmZpcmUoKTsKdGhpcy5oaWRlKCkKfSxnZXREYXRhOmZ1bmN0aW9uKCl7dmFyIEI9dGhp
cy5mb3JtLGosYixGLGgsSCxkLGUsayxFLGksRCxBLGYsbCxnLEMsRzsKZnVuY3Rpb24gYyhSKXt2
YXIgUT1SLnRhZ05hbWUudG9VcHBlckNhc2UoKTsKcmV0dXJuKChRPT0iSU5QVVQifHxRPT0iVEVY
VEFSRUEifHxRPT0iU0VMRUNUIikmJlIubmFtZT09aCkKfWlmKEIpe2o9Qi5lbGVtZW50czsKYj1q
Lmxlbmd0aDsKRj17fTsKZm9yKEM9MDsKQzxiOwpDKyspe2g9altDXS5uYW1lOwpIPU0uZ2V0RWxl
bWVudHNCeShjLCIqIixCKTsKZD1ILmxlbmd0aDsKaWYoZD4wKXtpZihkPT0xKXtIPUhbMF07CmU9
SC50eXBlOwprPUgudGFnTmFtZS50b1VwcGVyQ2FzZSgpOwpzd2l0Y2goayl7Y2FzZSJJTlBVVCI6
aWYoZT09ImNoZWNrYm94Iil7RltoXT1ILmNoZWNrZWQKfWVsc2V7aWYoZSE9InJhZGlvIil7Rlto
XT1ILnZhbHVlCn19YnJlYWs7CmNhc2UiVEVYVEFSRUEiOkZbaF09SC52YWx1ZTsKYnJlYWs7CmNh
c2UiU0VMRUNUIjpFPUgub3B0aW9uczsKaT1FLmxlbmd0aDsKRD1bXTsKZm9yKEc9MDsKRzxpOwpH
Kyspe0E9RVtHXTsKaWYoQS5zZWxlY3RlZCl7Zz1BLmF0dHJpYnV0ZXMudmFsdWU7CkRbRC5sZW5n
dGhdPShnJiZnLnNwZWNpZmllZCk/QS52YWx1ZTpBLnRleHQKfX1GW2hdPUQ7CmJyZWFrCn19ZWxz
ZXtlPUhbMF0udHlwZTsKc3dpdGNoKGUpe2Nhc2UicmFkaW8iOmZvcihHPTA7Ckc8ZDsKRysrKXtm
PUhbR107CmlmKGYuY2hlY2tlZCl7RltoXT1mLnZhbHVlOwpicmVhawp9fWJyZWFrOwpjYXNlImNo
ZWNrYm94IjpEPVtdOwpmb3IoRz0wOwpHPGQ7CkcrKyl7bD1IW0ddOwppZihsLmNoZWNrZWQpe0Rb
RC5sZW5ndGhdPWwudmFsdWUKfX1GW2hdPUQ7CmJyZWFrCn19fX19cmV0dXJuIEYKfSxkZXN0cm95
OmZ1bmN0aW9uKCl7Ti5jYWxsKHRoaXMpOwp0aGlzLl9hQnV0dG9ucz1udWxsOwp2YXIgQj10aGlz
LmVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImZvcm0iKSxBOwppZihCLmxlbmd0aD4wKXtB
PUJbMF07CmlmKEEpe1AucHVyZ2VFbGVtZW50KEEpOwppZihBLnBhcmVudE5vZGUpe0EucGFyZW50
Tm9kZS5yZW1vdmVDaGlsZChBKQp9dGhpcy5mb3JtPW51bGwKfX1JLnN1cGVyY2xhc3MuZGVzdHJv
eS5jYWxsKHRoaXMpCn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iRGlhbG9nICIrdGhpcy5p
ZAp9fSkKfSgpKTsKKGZ1bmN0aW9uKCl7WUFIT08ud2lkZ2V0LlNpbXBsZURpYWxvZz1mdW5jdGlv
bihBLEIpe1lBSE9PLndpZGdldC5TaW1wbGVEaWFsb2cuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5j
YWxsKHRoaXMsQSxCKQp9Owp2YXIgRT1ZQUhPTy51dGlsLkRvbSxGPVlBSE9PLndpZGdldC5TaW1w
bGVEaWFsb2csRD17SUNPTjp7a2V5OiJpY29uIix2YWx1ZToibm9uZSIsc3VwcHJlc3NFdmVudDp0
cnVlfSxURVhUOntrZXk6InRleHQiLHZhbHVlOiIiLHN1cHByZXNzRXZlbnQ6dHJ1ZSxzdXBlcmNl
ZGVzOlsiaWNvbiJdfX07CkYuSUNPTl9CTE9DSz0iYmxja2ljb24iOwpGLklDT05fQUxBUk09ImFs
cnRpY29uIjsKRi5JQ09OX0hFTFA9ImhscGljb24iOwpGLklDT05fSU5GTz0iaW5mb2ljb24iOwpG
LklDT05fV0FSTj0id2Fybmljb24iOwpGLklDT05fVElQPSJ0aXBpY29uIjsKRi5JQ09OX0NTU19D
TEFTU05BTUU9Inl1aS1pY29uIjsKRi5DU1NfU0lNUExFRElBTE9HPSJ5dWktc2ltcGxlLWRpYWxv
ZyI7CllBSE9PLmV4dGVuZChGLFlBSE9PLndpZGdldC5EaWFsb2cse2luaXREZWZhdWx0Q29uZmln
OmZ1bmN0aW9uKCl7Ri5zdXBlcmNsYXNzLmluaXREZWZhdWx0Q29uZmlnLmNhbGwodGhpcyk7CnRo
aXMuY2ZnLmFkZFByb3BlcnR5KEQuSUNPTi5rZXkse2hhbmRsZXI6dGhpcy5jb25maWdJY29uLHZh
bHVlOkQuSUNPTi52YWx1ZSxzdXBwcmVzc0V2ZW50OkQuSUNPTi5zdXBwcmVzc0V2ZW50fSk7CnRo
aXMuY2ZnLmFkZFByb3BlcnR5KEQuVEVYVC5rZXkse2hhbmRsZXI6dGhpcy5jb25maWdUZXh0LHZh
bHVlOkQuVEVYVC52YWx1ZSxzdXBwcmVzc0V2ZW50OkQuVEVYVC5zdXBwcmVzc0V2ZW50LHN1cGVy
Y2VkZXM6RC5URVhULnN1cGVyY2VkZXN9KQp9LGluaXQ6ZnVuY3Rpb24oQSxCKXtGLnN1cGVyY2xh
c3MuaW5pdC5jYWxsKHRoaXMsQSk7CnRoaXMuYmVmb3JlSW5pdEV2ZW50LmZpcmUoRik7CkUuYWRk
Q2xhc3ModGhpcy5lbGVtZW50LEYuQ1NTX1NJTVBMRURJQUxPRyk7CnRoaXMuY2ZnLnF1ZXVlUHJv
cGVydHkoInBvc3RtZXRob2QiLCJtYW51YWwiKTsKaWYoQil7dGhpcy5jZmcuYXBwbHlDb25maWco
Qix0cnVlKQp9dGhpcy5iZWZvcmVSZW5kZXJFdmVudC5zdWJzY3JpYmUoZnVuY3Rpb24oKXtpZigh
dGhpcy5ib2R5KXt0aGlzLnNldEJvZHkoIiIpCn19LHRoaXMsdHJ1ZSk7CnRoaXMuaW5pdEV2ZW50
LmZpcmUoRikKfSxyZWdpc3RlckZvcm06ZnVuY3Rpb24oKXtGLnN1cGVyY2xhc3MucmVnaXN0ZXJG
b3JtLmNhbGwodGhpcyk7CnRoaXMuZm9ybS5pbm5lckhUTUwrPSc8aW5wdXQgdHlwZT0iaGlkZGVu
IiBuYW1lPSInK3RoaXMuaWQrJyIgdmFsdWU9IiIvPicKfSxjb25maWdJY29uOmZ1bmN0aW9uKEMs
TSxPKXt2YXIgQT1NWzBdLFI9dGhpcy5ib2R5LFE9Ri5JQ09OX0NTU19DTEFTU05BTUUsQixOLFA7
CmlmKEEmJkEhPSJub25lIil7Qj1FLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoUSwiKiIsUik7Cmlm
KEIubGVuZ3RoPT09MSl7Tj1CWzBdOwpQPU4ucGFyZW50Tm9kZTsKaWYoUCl7UC5yZW1vdmVDaGls
ZChOKTsKTj1udWxsCn19aWYoQS5pbmRleE9mKCIuIik9PS0xKXtOPWRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoInNwYW4iKTsKTi5jbGFzc05hbWU9KFErIiAiK0EpOwpOLmlubmVySFRNTD0iJiMxNjA7
Igp9ZWxzZXtOPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpOwpOLnNyYz0odGhpcy5pbWFn
ZVJvb3QrQSk7Ck4uY2xhc3NOYW1lPVEKfWlmKE4pe1IuaW5zZXJ0QmVmb3JlKE4sUi5maXJzdENo
aWxkKQp9fX0sY29uZmlnVGV4dDpmdW5jdGlvbihDLEgsQil7dmFyIEE9SFswXTsKaWYoQSl7dGhp
cy5zZXRCb2R5KEEpOwp0aGlzLmNmZy5yZWZpcmVFdmVudCgiaWNvbiIpCn19LHRvU3RyaW5nOmZ1
bmN0aW9uKCl7cmV0dXJuIlNpbXBsZURpYWxvZyAiK3RoaXMuaWQKfX0pCn0oKSk7CihmdW5jdGlv
bigpe1lBSE9PLndpZGdldC5Db250YWluZXJFZmZlY3Q9ZnVuY3Rpb24oSSxBLEIsSixDKXtpZigh
Qyl7Qz1ZQUhPTy51dGlsLkFuaW0KfXRoaXMub3ZlcmxheT1JOwp0aGlzLmF0dHJJbj1BOwp0aGlz
LmF0dHJPdXQ9QjsKdGhpcy50YXJnZXRFbGVtZW50PUp8fEkuZWxlbWVudDsKdGhpcy5hbmltQ2xh
c3M9Qwp9Owp2YXIgRj1ZQUhPTy51dGlsLkRvbSxFPVlBSE9PLnV0aWwuQ3VzdG9tRXZlbnQsRD1Z
QUhPTy53aWRnZXQuQ29udGFpbmVyRWZmZWN0OwpELkZBREU9ZnVuY3Rpb24oTCxKKXt2YXIgQz1Z
QUhPTy51dGlsLkVhc2luZyxBPXthdHRyaWJ1dGVzOntvcGFjaXR5Ontmcm9tOjAsdG86MX19LGR1
cmF0aW9uOkosbWV0aG9kOkMuZWFzZUlufSxLPXthdHRyaWJ1dGVzOntvcGFjaXR5Ont0bzowfX0s
ZHVyYXRpb246SixtZXRob2Q6Qy5lYXNlT3V0fSxCPW5ldyBEKEwsQSxLLEwuZWxlbWVudCk7CkIu
aGFuZGxlVW5kZXJsYXlTdGFydD1mdW5jdGlvbigpe3ZhciBHPXRoaXMub3ZlcmxheS51bmRlcmxh
eTsKaWYoRyYmWUFIT08uZW52LnVhLmllKXt2YXIgSD0oRy5maWx0ZXJzJiZHLmZpbHRlcnMubGVu
Z3RoPjApOwppZihIKXtGLmFkZENsYXNzKEwuZWxlbWVudCwieXVpLWVmZmVjdC1mYWRlIikKfX19
OwpCLmhhbmRsZVVuZGVybGF5Q29tcGxldGU9ZnVuY3Rpb24oKXt2YXIgRz10aGlzLm92ZXJsYXku
dW5kZXJsYXk7CmlmKEcmJllBSE9PLmVudi51YS5pZSl7Ri5yZW1vdmVDbGFzcyhMLmVsZW1lbnQs
Inl1aS1lZmZlY3QtZmFkZSIpCn19OwpCLmhhbmRsZVN0YXJ0QW5pbWF0ZUluPWZ1bmN0aW9uKEgs
SSxHKXtGLmFkZENsYXNzKEcub3ZlcmxheS5lbGVtZW50LCJoaWRlLXNlbGVjdCIpOwppZighRy5v
dmVybGF5LnVuZGVybGF5KXtHLm92ZXJsYXkuY2ZnLnJlZmlyZUV2ZW50KCJ1bmRlcmxheSIpCn1H
LmhhbmRsZVVuZGVybGF5U3RhcnQoKTsKRy5vdmVybGF5Ll9zZXREb21WaXNpYmlsaXR5KHRydWUp
OwpGLnNldFN0eWxlKEcub3ZlcmxheS5lbGVtZW50LCJvcGFjaXR5IiwwKQp9OwpCLmhhbmRsZUNv
bXBsZXRlQW5pbWF0ZUluPWZ1bmN0aW9uKEgsSSxHKXtGLnJlbW92ZUNsYXNzKEcub3ZlcmxheS5l
bGVtZW50LCJoaWRlLXNlbGVjdCIpOwppZihHLm92ZXJsYXkuZWxlbWVudC5zdHlsZS5maWx0ZXIp
e0cub3ZlcmxheS5lbGVtZW50LnN0eWxlLmZpbHRlcj1udWxsCn1HLmhhbmRsZVVuZGVybGF5Q29t
cGxldGUoKTsKRy5vdmVybGF5LmNmZy5yZWZpcmVFdmVudCgiaWZyYW1lIik7CkcuYW5pbWF0ZUlu
Q29tcGxldGVFdmVudC5maXJlKCkKfTsKQi5oYW5kbGVTdGFydEFuaW1hdGVPdXQ9ZnVuY3Rpb24o
SCxJLEcpe0YuYWRkQ2xhc3MoRy5vdmVybGF5LmVsZW1lbnQsImhpZGUtc2VsZWN0Iik7CkcuaGFu
ZGxlVW5kZXJsYXlTdGFydCgpCn07CkIuaGFuZGxlQ29tcGxldGVBbmltYXRlT3V0PWZ1bmN0aW9u
KEgsSSxHKXtGLnJlbW92ZUNsYXNzKEcub3ZlcmxheS5lbGVtZW50LCJoaWRlLXNlbGVjdCIpOwpp
ZihHLm92ZXJsYXkuZWxlbWVudC5zdHlsZS5maWx0ZXIpe0cub3ZlcmxheS5lbGVtZW50LnN0eWxl
LmZpbHRlcj1udWxsCn1HLm92ZXJsYXkuX3NldERvbVZpc2liaWxpdHkoZmFsc2UpOwpGLnNldFN0
eWxlKEcub3ZlcmxheS5lbGVtZW50LCJvcGFjaXR5IiwxKTsKRy5oYW5kbGVVbmRlcmxheUNvbXBs
ZXRlKCk7Ckcub3ZlcmxheS5jZmcucmVmaXJlRXZlbnQoImlmcmFtZSIpOwpHLmFuaW1hdGVPdXRD
b21wbGV0ZUV2ZW50LmZpcmUoKQp9OwpCLmluaXQoKTsKcmV0dXJuIEIKfTsKRC5TTElERT1mdW5j
dGlvbihTLEEpe3ZhciBQPVlBSE9PLnV0aWwuRWFzaW5nLEM9Uy5jZmcuZ2V0UHJvcGVydHkoIngi
KXx8Ri5nZXRYKFMuZWxlbWVudCksTj1TLmNmZy5nZXRQcm9wZXJ0eSgieSIpfHxGLmdldFkoUy5l
bGVtZW50KSxCPUYuZ2V0Q2xpZW50V2lkdGgoKSxRPVMuZWxlbWVudC5vZmZzZXRXaWR0aCxPPXth
dHRyaWJ1dGVzOntwb2ludHM6e3RvOltDLE5dfX0sZHVyYXRpb246QSxtZXRob2Q6UC5lYXNlSW59
LFQ9e2F0dHJpYnV0ZXM6e3BvaW50czp7dG86WyhCKzI1KSxOXX19LGR1cmF0aW9uOkEsbWV0aG9k
OlAuZWFzZU91dH0sUj1uZXcgRChTLE8sVCxTLmVsZW1lbnQsWUFIT08udXRpbC5Nb3Rpb24pOwpS
LmhhbmRsZVN0YXJ0QW5pbWF0ZUluPWZ1bmN0aW9uKEgsSSxHKXtHLm92ZXJsYXkuZWxlbWVudC5z
dHlsZS5sZWZ0PSgoLTI1KS1RKSsicHgiOwpHLm92ZXJsYXkuZWxlbWVudC5zdHlsZS50b3A9Tisi
cHgiCn07ClIuaGFuZGxlVHdlZW5BbmltYXRlSW49ZnVuY3Rpb24oSSxKLEgpe3ZhciBHPUYuZ2V0
WFkoSC5vdmVybGF5LmVsZW1lbnQpLEs9R1swXSxMPUdbMV07CmlmKEYuZ2V0U3R5bGUoSC5vdmVy
bGF5LmVsZW1lbnQsInZpc2liaWxpdHkiKT09ImhpZGRlbiImJks8Qyl7SC5vdmVybGF5Ll9zZXRE
b21WaXNpYmlsaXR5KHRydWUpCn1ILm92ZXJsYXkuY2ZnLnNldFByb3BlcnR5KCJ4eSIsW0ssTF0s
dHJ1ZSk7Ckgub3ZlcmxheS5jZmcucmVmaXJlRXZlbnQoImlmcmFtZSIpCn07ClIuaGFuZGxlQ29t
cGxldGVBbmltYXRlSW49ZnVuY3Rpb24oSCxJLEcpe0cub3ZlcmxheS5jZmcuc2V0UHJvcGVydHko
Inh5IixbQyxOXSx0cnVlKTsKRy5zdGFydFg9QzsKRy5zdGFydFk9TjsKRy5vdmVybGF5LmNmZy5y
ZWZpcmVFdmVudCgiaWZyYW1lIik7CkcuYW5pbWF0ZUluQ29tcGxldGVFdmVudC5maXJlKCkKfTsK
Ui5oYW5kbGVTdGFydEFuaW1hdGVPdXQ9ZnVuY3Rpb24oSyxMLEgpe3ZhciBKPUYuZ2V0Vmlld3Bv
cnRXaWR0aCgpLEc9Ri5nZXRYWShILm92ZXJsYXkuZWxlbWVudCksST1HWzFdOwpILmFuaW1PdXQu
YXR0cmlidXRlcy5wb2ludHMudG89WyhKKzI1KSxJXQp9OwpSLmhhbmRsZVR3ZWVuQW5pbWF0ZU91
dD1mdW5jdGlvbihKLEssSSl7dmFyIEc9Ri5nZXRYWShJLm92ZXJsYXkuZWxlbWVudCksTD1HWzBd
LEg9R1sxXTsKSS5vdmVybGF5LmNmZy5zZXRQcm9wZXJ0eSgieHkiLFtMLEhdLHRydWUpOwpJLm92
ZXJsYXkuY2ZnLnJlZmlyZUV2ZW50KCJpZnJhbWUiKQp9OwpSLmhhbmRsZUNvbXBsZXRlQW5pbWF0
ZU91dD1mdW5jdGlvbihILEksRyl7Ry5vdmVybGF5Ll9zZXREb21WaXNpYmlsaXR5KGZhbHNlKTsK
Ry5vdmVybGF5LmNmZy5zZXRQcm9wZXJ0eSgieHkiLFtDLE5dKTsKRy5hbmltYXRlT3V0Q29tcGxl
dGVFdmVudC5maXJlKCkKfTsKUi5pbml0KCk7CnJldHVybiBSCn07CkQucHJvdG90eXBlPXtpbml0
OmZ1bmN0aW9uKCl7dGhpcy5iZWZvcmVBbmltYXRlSW5FdmVudD10aGlzLmNyZWF0ZUV2ZW50KCJi
ZWZvcmVBbmltYXRlSW4iKTsKdGhpcy5iZWZvcmVBbmltYXRlSW5FdmVudC5zaWduYXR1cmU9RS5M
SVNUOwp0aGlzLmJlZm9yZUFuaW1hdGVPdXRFdmVudD10aGlzLmNyZWF0ZUV2ZW50KCJiZWZvcmVB
bmltYXRlT3V0Iik7CnRoaXMuYmVmb3JlQW5pbWF0ZU91dEV2ZW50LnNpZ25hdHVyZT1FLkxJU1Q7
CnRoaXMuYW5pbWF0ZUluQ29tcGxldGVFdmVudD10aGlzLmNyZWF0ZUV2ZW50KCJhbmltYXRlSW5D
b21wbGV0ZSIpOwp0aGlzLmFuaW1hdGVJbkNvbXBsZXRlRXZlbnQuc2lnbmF0dXJlPUUuTElTVDsK
dGhpcy5hbmltYXRlT3V0Q29tcGxldGVFdmVudD10aGlzLmNyZWF0ZUV2ZW50KCJhbmltYXRlT3V0
Q29tcGxldGUiKTsKdGhpcy5hbmltYXRlT3V0Q29tcGxldGVFdmVudC5zaWduYXR1cmU9RS5MSVNU
Owp0aGlzLmFuaW1Jbj1uZXcgdGhpcy5hbmltQ2xhc3ModGhpcy50YXJnZXRFbGVtZW50LHRoaXMu
YXR0ckluLmF0dHJpYnV0ZXMsdGhpcy5hdHRySW4uZHVyYXRpb24sdGhpcy5hdHRySW4ubWV0aG9k
KTsKdGhpcy5hbmltSW4ub25TdGFydC5zdWJzY3JpYmUodGhpcy5oYW5kbGVTdGFydEFuaW1hdGVJ
bix0aGlzKTsKdGhpcy5hbmltSW4ub25Ud2Vlbi5zdWJzY3JpYmUodGhpcy5oYW5kbGVUd2VlbkFu
aW1hdGVJbix0aGlzKTsKdGhpcy5hbmltSW4ub25Db21wbGV0ZS5zdWJzY3JpYmUodGhpcy5oYW5k
bGVDb21wbGV0ZUFuaW1hdGVJbix0aGlzKTsKdGhpcy5hbmltT3V0PW5ldyB0aGlzLmFuaW1DbGFz
cyh0aGlzLnRhcmdldEVsZW1lbnQsdGhpcy5hdHRyT3V0LmF0dHJpYnV0ZXMsdGhpcy5hdHRyT3V0
LmR1cmF0aW9uLHRoaXMuYXR0ck91dC5tZXRob2QpOwp0aGlzLmFuaW1PdXQub25TdGFydC5zdWJz
Y3JpYmUodGhpcy5oYW5kbGVTdGFydEFuaW1hdGVPdXQsdGhpcyk7CnRoaXMuYW5pbU91dC5vblR3
ZWVuLnN1YnNjcmliZSh0aGlzLmhhbmRsZVR3ZWVuQW5pbWF0ZU91dCx0aGlzKTsKdGhpcy5hbmlt
T3V0Lm9uQ29tcGxldGUuc3Vic2NyaWJlKHRoaXMuaGFuZGxlQ29tcGxldGVBbmltYXRlT3V0LHRo
aXMpCn0sYW5pbWF0ZUluOmZ1bmN0aW9uKCl7dGhpcy5iZWZvcmVBbmltYXRlSW5FdmVudC5maXJl
KCk7CnRoaXMuYW5pbUluLmFuaW1hdGUoKQp9LGFuaW1hdGVPdXQ6ZnVuY3Rpb24oKXt0aGlzLmJl
Zm9yZUFuaW1hdGVPdXRFdmVudC5maXJlKCk7CnRoaXMuYW5pbU91dC5hbmltYXRlKCkKfSxoYW5k
bGVTdGFydEFuaW1hdGVJbjpmdW5jdGlvbihCLEMsQSl7fSxoYW5kbGVUd2VlbkFuaW1hdGVJbjpm
dW5jdGlvbihCLEMsQSl7fSxoYW5kbGVDb21wbGV0ZUFuaW1hdGVJbjpmdW5jdGlvbihCLEMsQSl7
fSxoYW5kbGVTdGFydEFuaW1hdGVPdXQ6ZnVuY3Rpb24oQixDLEEpe30saGFuZGxlVHdlZW5Bbmlt
YXRlT3V0OmZ1bmN0aW9uKEIsQyxBKXt9LGhhbmRsZUNvbXBsZXRlQW5pbWF0ZU91dDpmdW5jdGlv
bihCLEMsQSl7fSx0b1N0cmluZzpmdW5jdGlvbigpe3ZhciBBPSJDb250YWluZXJFZmZlY3QiOwpp
Zih0aGlzLm92ZXJsYXkpe0ErPSIgWyIrdGhpcy5vdmVybGF5LnRvU3RyaW5nKCkrIl0iCn1yZXR1
cm4gQQp9fTsKWUFIT08ubGFuZy5hdWdtZW50UHJvdG8oRCxZQUhPTy51dGlsLkV2ZW50UHJvdmlk
ZXIpCn0pKCk7CllBSE9PLnJlZ2lzdGVyKCJjb250YWluZXIiLFlBSE9PLndpZGdldC5Nb2R1bGUs
e3ZlcnNpb246IjIuOC4wcjQiLGJ1aWxkOiIyNDQ5In0pOwo8L3NjcmlwdD4KPHNjcmlwdD4KKGZ1
bmN0aW9uKCl7dmFyIEQ9WUFIT08udXRpbDsKdmFyIEM9ZnVuY3Rpb24oRyxILEIsQSl7aWYoIUcp
e310aGlzLmluaXQoRyxILEIsQSkKfTsKQy5OQU1FPSJBbmltIjsKQy5wcm90b3R5cGU9e3RvU3Ry
aW5nOmZ1bmN0aW9uKCl7dmFyIEI9dGhpcy5nZXRFbCgpfHx7fTsKdmFyIEE9Qi5pZHx8Qi50YWdO
YW1lOwpyZXR1cm4odGhpcy5jb25zdHJ1Y3Rvci5OQU1FKyI6ICIrQSkKfSxwYXR0ZXJuczp7bm9O
ZWdhdGl2ZXM6L3dpZHRofGhlaWdodHxvcGFjaXR5fHBhZGRpbmcvaSxvZmZzZXRBdHRyaWJ1dGU6
L14oKHdpZHRofGhlaWdodCl8KHRvcHxsZWZ0KSkkLyxkZWZhdWx0VW5pdDovd2lkdGh8aGVpZ2h0
fHRvcCR8Ym90dG9tJHxsZWZ0JHxyaWdodCQvaSxvZmZzZXRVbml0Oi9cZCsoZW18JXxlbnxleHxw
dHxpbnxjbXxtbXxwYykkL2l9LGRvTWV0aG9kOmZ1bmN0aW9uKEYsQSxCKXtyZXR1cm4gdGhpcy5t
ZXRob2QodGhpcy5jdXJyZW50RnJhbWUsQSxCLUEsdGhpcy50b3RhbEZyYW1lcykKfSxzZXRBdHRy
aWJ1dGU6ZnVuY3Rpb24oSCxBLEIpe3ZhciBHPXRoaXMuZ2V0RWwoKTsKaWYodGhpcy5wYXR0ZXJu
cy5ub05lZ2F0aXZlcy50ZXN0KEgpKXtBPShBPjApP0E6MAp9aWYoSCBpbiBHJiYhKCJzdHlsZSIg
aW4gRyYmSCBpbiBHLnN0eWxlKSl7R1tIXT1BCn1lbHNle0QuRG9tLnNldFN0eWxlKEcsSCxBK0Ip
Cn19LGdldEF0dHJpYnV0ZTpmdW5jdGlvbihMKXt2YXIgSj10aGlzLmdldEVsKCk7CnZhciBCPUQu
RG9tLmdldFN0eWxlKEosTCk7CmlmKEIhPT0iYXV0byImJiF0aGlzLnBhdHRlcm5zLm9mZnNldFVu
aXQudGVzdChCKSl7cmV0dXJuIHBhcnNlRmxvYXQoQikKfXZhciBLPXRoaXMucGF0dGVybnMub2Zm
c2V0QXR0cmlidXRlLmV4ZWMoTCl8fFtdOwp2YXIgQT0hIShLWzNdKTsKdmFyIEk9ISEoS1syXSk7
CmlmKCJzdHlsZSIgaW4gSil7aWYoSXx8KEQuRG9tLmdldFN0eWxlKEosInBvc2l0aW9uIik9PSJh
YnNvbHV0ZSImJkEpKXtCPUpbIm9mZnNldCIrS1swXS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStL
WzBdLnN1YnN0cigxKV0KfWVsc2V7Qj0wCn19ZWxzZXtpZihMIGluIEope0I9SltMXQp9fXJldHVy
biBCCn0sZ2V0RGVmYXVsdFVuaXQ6ZnVuY3Rpb24oQSl7aWYodGhpcy5wYXR0ZXJucy5kZWZhdWx0
VW5pdC50ZXN0KEEpKXtyZXR1cm4icHgiCn1yZXR1cm4iIgp9LHNldFJ1bnRpbWVBdHRyaWJ1dGU6
ZnVuY3Rpb24oTSl7dmFyIEE7CnZhciBMOwp2YXIgSz10aGlzLmF0dHJpYnV0ZXM7CnRoaXMucnVu
dGltZUF0dHJpYnV0ZXNbTV09e307CnZhciBCPWZ1bmN0aW9uKEUpe3JldHVybih0eXBlb2YgRSE9
PSJ1bmRlZmluZWQiKQp9OwppZighQihLW01dWyJ0byJdKSYmIUIoS1tNXVsiYnkiXSkpe3JldHVy
biBmYWxzZQp9QT0oQihLW01dWyJmcm9tIl0pKT9LW01dWyJmcm9tIl06dGhpcy5nZXRBdHRyaWJ1
dGUoTSk7CmlmKEIoS1tNXVsidG8iXSkpe0w9S1tNXVsidG8iXQp9ZWxzZXtpZihCKEtbTV1bImJ5
Il0pKXtpZihBLmNvbnN0cnVjdG9yPT1BcnJheSl7TD1bXTsKZm9yKHZhciBKPTAsTj1BLmxlbmd0
aDsKSjxOOworK0ope0xbSl09QVtKXStLW01dWyJieSJdW0pdKjEKfX1lbHNle0w9QStLW01dWyJi
eSJdKjEKfX19dGhpcy5ydW50aW1lQXR0cmlidXRlc1tNXS5zdGFydD1BOwp0aGlzLnJ1bnRpbWVB
dHRyaWJ1dGVzW01dLmVuZD1MOwp0aGlzLnJ1bnRpbWVBdHRyaWJ1dGVzW01dLnVuaXQ9KEIoS1tN
XS51bml0KSk/S1tNXVsidW5pdCJdOnRoaXMuZ2V0RGVmYXVsdFVuaXQoTSk7CnJldHVybiB0cnVl
Cn0saW5pdDpmdW5jdGlvbihULE8sUCxCKXt2YXIgQT1mYWxzZTsKdmFyIFM9bnVsbDsKdmFyIFE9
MDsKVD1ELkRvbS5nZXQoVCk7CnRoaXMuYXR0cmlidXRlcz1PfHx7fTsKdGhpcy5kdXJhdGlvbj0h
WUFIT08ubGFuZy5pc1VuZGVmaW5lZChQKT9QOjE7CnRoaXMubWV0aG9kPUJ8fEQuRWFzaW5nLmVh
c2VOb25lOwp0aGlzLnVzZVNlY29uZHM9dHJ1ZTsKdGhpcy5jdXJyZW50RnJhbWU9MDsKdGhpcy50
b3RhbEZyYW1lcz1ELkFuaW1NZ3IuZnBzOwp0aGlzLnNldEVsPWZ1bmN0aW9uKEUpe1Q9RC5Eb20u
Z2V0KEUpCn07CnRoaXMuZ2V0RWw9ZnVuY3Rpb24oKXtyZXR1cm4gVAp9Owp0aGlzLmlzQW5pbWF0
ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gQQp9Owp0aGlzLmdldFN0YXJ0VGltZT1mdW5jdGlvbigpe3Jl
dHVybiBTCn07CnRoaXMucnVudGltZUF0dHJpYnV0ZXM9e307CnRoaXMuYW5pbWF0ZT1mdW5jdGlv
bigpe2lmKHRoaXMuaXNBbmltYXRlZCgpKXtyZXR1cm4gZmFsc2UKfXRoaXMuY3VycmVudEZyYW1l
PTA7CnRoaXMudG90YWxGcmFtZXM9KHRoaXMudXNlU2Vjb25kcyk/TWF0aC5jZWlsKEQuQW5pbU1n
ci5mcHMqdGhpcy5kdXJhdGlvbik6dGhpcy5kdXJhdGlvbjsKaWYodGhpcy5kdXJhdGlvbj09PTAm
JnRoaXMudXNlU2Vjb25kcyl7dGhpcy50b3RhbEZyYW1lcz0xCn1ELkFuaW1NZ3IucmVnaXN0ZXJF
bGVtZW50KHRoaXMpOwpyZXR1cm4gdHJ1ZQp9Owp0aGlzLnN0b3A9ZnVuY3Rpb24oRSl7aWYoIXRo
aXMuaXNBbmltYXRlZCgpKXtyZXR1cm4gZmFsc2UKfWlmKEUpe3RoaXMuY3VycmVudEZyYW1lPXRo
aXMudG90YWxGcmFtZXM7CnRoaXMuX29uVHdlZW4uZmlyZSgpCn1ELkFuaW1NZ3Iuc3RvcCh0aGlz
KQp9Owp2YXIgTT1mdW5jdGlvbigpe3RoaXMub25TdGFydC5maXJlKCk7CnRoaXMucnVudGltZUF0
dHJpYnV0ZXM9e307CmZvcih2YXIgRSBpbiB0aGlzLmF0dHJpYnV0ZXMpe3RoaXMuc2V0UnVudGlt
ZUF0dHJpYnV0ZShFKQp9QT10cnVlOwpRPTA7ClM9bmV3IERhdGUoKQp9Owp2YXIgTj1mdW5jdGlv
bigpe3ZhciBFPXtkdXJhdGlvbjpuZXcgRGF0ZSgpLXRoaXMuZ2V0U3RhcnRUaW1lKCksY3VycmVu
dEZyYW1lOnRoaXMuY3VycmVudEZyYW1lfTsKRS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybigi
ZHVyYXRpb246ICIrRS5kdXJhdGlvbisiLCBjdXJyZW50RnJhbWU6ICIrRS5jdXJyZW50RnJhbWUp
Cn07CnRoaXMub25Ud2Vlbi5maXJlKEUpOwp2YXIgRj10aGlzLnJ1bnRpbWVBdHRyaWJ1dGVzOwpm
b3IodmFyIEcgaW4gRil7dGhpcy5zZXRBdHRyaWJ1dGUoRyx0aGlzLmRvTWV0aG9kKEcsRltHXS5z
dGFydCxGW0ddLmVuZCksRltHXS51bml0KQp9USs9MQp9Owp2YXIgUj1mdW5jdGlvbigpe3ZhciBG
PShuZXcgRGF0ZSgpLVMpLzEwMDA7CnZhciBFPXtkdXJhdGlvbjpGLGZyYW1lczpRLGZwczpRL0Z9
OwpFLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuKCJkdXJhdGlvbjogIitFLmR1cmF0aW9uKyIs
IGZyYW1lczogIitFLmZyYW1lcysiLCBmcHM6ICIrRS5mcHMpCn07CkE9ZmFsc2U7ClE9MDsKdGhp
cy5vbkNvbXBsZXRlLmZpcmUoRSkKfTsKdGhpcy5fb25TdGFydD1uZXcgRC5DdXN0b21FdmVudCgi
X3N0YXJ0Iix0aGlzLHRydWUpOwp0aGlzLm9uU3RhcnQ9bmV3IEQuQ3VzdG9tRXZlbnQoInN0YXJ0
Iix0aGlzKTsKdGhpcy5vblR3ZWVuPW5ldyBELkN1c3RvbUV2ZW50KCJ0d2VlbiIsdGhpcyk7CnRo
aXMuX29uVHdlZW49bmV3IEQuQ3VzdG9tRXZlbnQoIl90d2VlbiIsdGhpcyx0cnVlKTsKdGhpcy5v
bkNvbXBsZXRlPW5ldyBELkN1c3RvbUV2ZW50KCJjb21wbGV0ZSIsdGhpcyk7CnRoaXMuX29uQ29t
cGxldGU9bmV3IEQuQ3VzdG9tRXZlbnQoIl9jb21wbGV0ZSIsdGhpcyx0cnVlKTsKdGhpcy5fb25T
dGFydC5zdWJzY3JpYmUoTSk7CnRoaXMuX29uVHdlZW4uc3Vic2NyaWJlKE4pOwp0aGlzLl9vbkNv
bXBsZXRlLnN1YnNjcmliZShSKQp9fTsKRC5BbmltPUMKfSkoKTsKWUFIT08udXRpbC5BbmltTWdy
PW5ldyBmdW5jdGlvbigpe3ZhciBJPW51bGw7CnZhciBKPVtdOwp2YXIgRj0wOwp0aGlzLmZwcz0x
MDAwOwp0aGlzLmRlbGF5PTE7CnRoaXMucmVnaXN0ZXJFbGVtZW50PWZ1bmN0aW9uKEEpe0pbSi5s
ZW5ndGhdPUE7CkYrPTE7CkEuX29uU3RhcnQuZmlyZSgpOwp0aGlzLnN0YXJ0KCkKfTsKdGhpcy51
blJlZ2lzdGVyPWZ1bmN0aW9uKEEsQil7Qj1CfHxHKEEpOwppZighQS5pc0FuaW1hdGVkKCl8fEI9
PT0tMSl7cmV0dXJuIGZhbHNlCn1BLl9vbkNvbXBsZXRlLmZpcmUoKTsKSi5zcGxpY2UoQiwxKTsK
Ri09MTsKaWYoRjw9MCl7dGhpcy5zdG9wKCkKfXJldHVybiB0cnVlCn07CnRoaXMuc3RhcnQ9ZnVu
Y3Rpb24oKXtpZihJPT09bnVsbCl7ST1zZXRJbnRlcnZhbCh0aGlzLnJ1bix0aGlzLmRlbGF5KQp9
fTsKdGhpcy5zdG9wPWZ1bmN0aW9uKEEpe2lmKCFBKXtjbGVhckludGVydmFsKEkpOwpmb3IodmFy
IEI9MCxDPUoubGVuZ3RoOwpCPEM7CisrQil7dGhpcy51blJlZ2lzdGVyKEpbMF0sMCkKfUo9W107
Ckk9bnVsbDsKRj0wCn1lbHNle3RoaXMudW5SZWdpc3RlcihBKQp9fTsKdGhpcy5ydW49ZnVuY3Rp
b24oKXtmb3IodmFyIEE9MCxDPUoubGVuZ3RoOwpBPEM7CisrQSl7dmFyIEI9SltBXTsKaWYoIUJ8
fCFCLmlzQW5pbWF0ZWQoKSl7Y29udGludWUKfWlmKEIuY3VycmVudEZyYW1lPEIudG90YWxGcmFt
ZXN8fEIudG90YWxGcmFtZXM9PT1udWxsKXtCLmN1cnJlbnRGcmFtZSs9MTsKaWYoQi51c2VTZWNv
bmRzKXtIKEIpCn1CLl9vblR3ZWVuLmZpcmUoKQp9ZWxzZXtZQUhPTy51dGlsLkFuaW1NZ3Iuc3Rv
cChCLEEpCn19fTsKdmFyIEc9ZnVuY3Rpb24oQSl7Zm9yKHZhciBCPTAsQz1KLmxlbmd0aDsKQjxD
OworK0Ipe2lmKEpbQl09PT1BKXtyZXR1cm4gQgp9fXJldHVybiAtMQp9Owp2YXIgSD1mdW5jdGlv
bihFKXt2YXIgQj1FLnRvdGFsRnJhbWVzOwp2YXIgQz1FLmN1cnJlbnRGcmFtZTsKdmFyIEQ9KEUu
Y3VycmVudEZyYW1lKkUuZHVyYXRpb24qMTAwMC9FLnRvdGFsRnJhbWVzKTsKdmFyIEw9KG5ldyBE
YXRlKCktRS5nZXRTdGFydFRpbWUoKSk7CnZhciBBPTA7CmlmKEw8RS5kdXJhdGlvbioxMDAwKXtB
PU1hdGgucm91bmQoKEwvRC0xKSpFLmN1cnJlbnRGcmFtZSkKfWVsc2V7QT1CLShDKzEpCn1pZihB
PjAmJmlzRmluaXRlKEEpKXtpZihFLmN1cnJlbnRGcmFtZStBPj1CKXtBPUItKEMrMSkKfUUuY3Vy
cmVudEZyYW1lKz1BCn19Owp0aGlzLl9xdWV1ZT1KOwp0aGlzLl9nZXRJbmRleD1HCn07CllBSE9P
LnV0aWwuQmV6aWVyPW5ldyBmdW5jdGlvbigpe3RoaXMuZ2V0UG9zaXRpb249ZnVuY3Rpb24oSSxK
KXt2YXIgSD1JLmxlbmd0aDsKdmFyIEs9W107CmZvcih2YXIgTD0wOwpMPEg7CisrTCl7S1tMXT1b
SVtMXVswXSxJW0xdWzFdXQp9Zm9yKHZhciBHPTE7Ckc8SDsKKytHKXtmb3IoTD0wOwpMPEgtRzsK
KytMKXtLW0xdWzBdPSgxLUopKktbTF1bMF0rSipLW3BhcnNlSW50KEwrMSwxMCldWzBdOwpLW0xd
WzFdPSgxLUopKktbTF1bMV0rSipLW3BhcnNlSW50KEwrMSwxMCldWzFdCn19cmV0dXJuW0tbMF1b
MF0sS1swXVsxXV0KfQp9OwooZnVuY3Rpb24oKXt2YXIgRT1mdW5jdGlvbihDLEQsQixBKXtFLnN1
cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLEMsRCxCLEEpCn07CkUuTkFNRT0iQ29sb3JB
bmltIjsKRS5ERUZBVUxUX0JHQ09MT1I9IiNmZmYiOwp2YXIgRz1ZQUhPTy51dGlsOwpZQUhPTy5l
eHRlbmQoRSxHLkFuaW0pOwp2YXIgRj1FLnN1cGVyY2xhc3M7CnZhciBIPUUucHJvdG90eXBlOwpI
LnBhdHRlcm5zLmNvbG9yPS9jb2xvciQvaTsKSC5wYXR0ZXJucy5yZ2I9L15yZ2JcKChbMC05XSsp
XHMqLFxzKihbMC05XSspXHMqLFxzKihbMC05XSspXCkkL2k7CkgucGF0dGVybnMuaGV4PS9eIz8o
WzAtOUEtRl17Mn0pKFswLTlBLUZdezJ9KShbMC05QS1GXXsyfSkkL2k7CkgucGF0dGVybnMuaGV4
Mz0vXiM/KFswLTlBLUZdezF9KShbMC05QS1GXXsxfSkoWzAtOUEtRl17MX0pJC9pOwpILnBhdHRl
cm5zLnRyYW5zcGFyZW50PS9edHJhbnNwYXJlbnR8cmdiYVwoMCwgMCwgMCwgMFwpJC87CkgucGFy
c2VDb2xvcj1mdW5jdGlvbihCKXtpZihCLmxlbmd0aD09Myl7cmV0dXJuIEIKfXZhciBBPXRoaXMu
cGF0dGVybnMuaGV4LmV4ZWMoQik7CmlmKEEmJkEubGVuZ3RoPT00KXtyZXR1cm5bcGFyc2VJbnQo
QVsxXSwxNikscGFyc2VJbnQoQVsyXSwxNikscGFyc2VJbnQoQVszXSwxNildCn1BPXRoaXMucGF0
dGVybnMucmdiLmV4ZWMoQik7CmlmKEEmJkEubGVuZ3RoPT00KXtyZXR1cm5bcGFyc2VJbnQoQVsx
XSwxMCkscGFyc2VJbnQoQVsyXSwxMCkscGFyc2VJbnQoQVszXSwxMCldCn1BPXRoaXMucGF0dGVy
bnMuaGV4My5leGVjKEIpOwppZihBJiZBLmxlbmd0aD09NCl7cmV0dXJuW3BhcnNlSW50KEFbMV0r
QVsxXSwxNikscGFyc2VJbnQoQVsyXStBWzJdLDE2KSxwYXJzZUludChBWzNdK0FbM10sMTYpXQp9
cmV0dXJuIG51bGwKfTsKSC5nZXRBdHRyaWJ1dGU9ZnVuY3Rpb24oSil7dmFyIEM9dGhpcy5nZXRF
bCgpOwppZih0aGlzLnBhdHRlcm5zLmNvbG9yLnRlc3QoSikpe3ZhciBBPVlBSE9PLnV0aWwuRG9t
LmdldFN0eWxlKEMsSik7CnZhciBCPXRoaXM7CmlmKHRoaXMucGF0dGVybnMudHJhbnNwYXJlbnQu
dGVzdChBKSl7dmFyIEQ9WUFIT08udXRpbC5Eb20uZ2V0QW5jZXN0b3JCeShDLGZ1bmN0aW9uKEkp
e3JldHVybiAhQi5wYXR0ZXJucy50cmFuc3BhcmVudC50ZXN0KEEpCn0pOwppZihEKXtBPUcuRG9t
LmdldFN0eWxlKEQsSikKfWVsc2V7QT1FLkRFRkFVTFRfQkdDT0xPUgp9fX1lbHNle0E9Ri5nZXRB
dHRyaWJ1dGUuY2FsbCh0aGlzLEopCn1yZXR1cm4gQQp9OwpILmRvTWV0aG9kPWZ1bmN0aW9uKEss
QSxEKXt2YXIgQjsKaWYodGhpcy5wYXR0ZXJucy5jb2xvci50ZXN0KEspKXtCPVtdOwpmb3IodmFy
IEM9MCxMPUEubGVuZ3RoOwpDPEw7CisrQyl7QltDXT1GLmRvTWV0aG9kLmNhbGwodGhpcyxLLEFb
Q10sRFtDXSkKfUI9InJnYigiK01hdGguZmxvb3IoQlswXSkrIiwiK01hdGguZmxvb3IoQlsxXSkr
IiwiK01hdGguZmxvb3IoQlsyXSkrIikiCn1lbHNle0I9Ri5kb01ldGhvZC5jYWxsKHRoaXMsSyxB
LEQpCn1yZXR1cm4gQgp9OwpILnNldFJ1bnRpbWVBdHRyaWJ1dGU9ZnVuY3Rpb24oSyl7Ri5zZXRS
dW50aW1lQXR0cmlidXRlLmNhbGwodGhpcyxLKTsKaWYodGhpcy5wYXR0ZXJucy5jb2xvci50ZXN0
KEspKXt2YXIgQz10aGlzLmF0dHJpYnV0ZXM7CnZhciBBPXRoaXMucGFyc2VDb2xvcih0aGlzLnJ1
bnRpbWVBdHRyaWJ1dGVzW0tdLnN0YXJ0KTsKdmFyIEQ9dGhpcy5wYXJzZUNvbG9yKHRoaXMucnVu
dGltZUF0dHJpYnV0ZXNbS10uZW5kKTsKaWYodHlwZW9mIENbS11bInRvIl09PT0idW5kZWZpbmVk
IiYmdHlwZW9mIENbS11bImJ5Il0hPT0idW5kZWZpbmVkIil7RD10aGlzLnBhcnNlQ29sb3IoQ1tL
XS5ieSk7CmZvcih2YXIgQj0wLEw9QS5sZW5ndGg7CkI8TDsKKytCKXtEW0JdPUFbQl0rRFtCXQp9
fXRoaXMucnVudGltZUF0dHJpYnV0ZXNbS10uc3RhcnQ9QTsKdGhpcy5ydW50aW1lQXR0cmlidXRl
c1tLXS5lbmQ9RAp9fTsKRy5Db2xvckFuaW09RQp9KSgpOwpZQUhPTy51dGlsLkVhc2luZz17ZWFz
ZU5vbmU6ZnVuY3Rpb24oSCxFLEYsRyl7cmV0dXJuIEYqSC9HK0UKfSxlYXNlSW46ZnVuY3Rpb24o
SCxFLEYsRyl7cmV0dXJuIEYqKEgvPUcpKkgrRQp9LGVhc2VPdXQ6ZnVuY3Rpb24oSCxFLEYsRyl7
cmV0dXJuIC1GKihILz1HKSooSC0yKStFCn0sZWFzZUJvdGg6ZnVuY3Rpb24oSCxFLEYsRyl7aWYo
KEgvPUcvMik8MSl7cmV0dXJuIEYvMipIKkgrRQp9cmV0dXJuIC1GLzIqKCgtLUgpKihILTIpLTEp
K0UKfSxlYXNlSW5TdHJvbmc6ZnVuY3Rpb24oSCxFLEYsRyl7cmV0dXJuIEYqKEgvPUcpKkgqSCpI
K0UKfSxlYXNlT3V0U3Ryb25nOmZ1bmN0aW9uKEgsRSxGLEcpe3JldHVybiAtRiooKEg9SC9HLTEp
KkgqSCpILTEpK0UKfSxlYXNlQm90aFN0cm9uZzpmdW5jdGlvbihILEUsRixHKXtpZigoSC89Ry8y
KTwxKXtyZXR1cm4gRi8yKkgqSCpIKkgrRQp9cmV0dXJuIC1GLzIqKChILT0yKSpIKkgqSC0yKStF
Cn0sZWxhc3RpY0luOmZ1bmN0aW9uKE0sSCxJLEosTixLKXtpZihNPT0wKXtyZXR1cm4gSAp9aWYo
KE0vPUopPT0xKXtyZXR1cm4gSCtJCn1pZighSyl7Sz1KKjAuMwp9aWYoIU58fE48TWF0aC5hYnMo
SSkpe049STsKdmFyIEw9Sy80Cn1lbHNle3ZhciBMPUsvKDIqTWF0aC5QSSkqTWF0aC5hc2luKEkv
TikKfXJldHVybiAtKE4qTWF0aC5wb3coMiwxMCooTS09MSkpKk1hdGguc2luKChNKkotTCkqKDIq
TWF0aC5QSSkvSykpK0gKfSxlbGFzdGljT3V0OmZ1bmN0aW9uKE0sSCxJLEosTixLKXtpZihNPT0w
KXtyZXR1cm4gSAp9aWYoKE0vPUopPT0xKXtyZXR1cm4gSCtJCn1pZighSyl7Sz1KKjAuMwp9aWYo
IU58fE48TWF0aC5hYnMoSSkpe049STsKdmFyIEw9Sy80Cn1lbHNle3ZhciBMPUsvKDIqTWF0aC5Q
SSkqTWF0aC5hc2luKEkvTikKfXJldHVybiBOKk1hdGgucG93KDIsLTEwKk0pKk1hdGguc2luKChN
KkotTCkqKDIqTWF0aC5QSSkvSykrSStICn0sZWxhc3RpY0JvdGg6ZnVuY3Rpb24oTSxILEksSixO
LEspe2lmKE09PTApe3JldHVybiBICn1pZigoTS89Si8yKT09Mil7cmV0dXJuIEgrSQp9aWYoIUsp
e0s9SiooMC4zKjEuNSkKfWlmKCFOfHxOPE1hdGguYWJzKEkpKXtOPUk7CnZhciBMPUsvNAp9ZWxz
ZXt2YXIgTD1LLygyKk1hdGguUEkpKk1hdGguYXNpbihJL04pCn1pZihNPDEpe3JldHVybiAtMC41
KihOKk1hdGgucG93KDIsMTAqKE0tPTEpKSpNYXRoLnNpbigoTSpKLUwpKigyKk1hdGguUEkpL0sp
KStICn1yZXR1cm4gTipNYXRoLnBvdygyLC0xMCooTS09MSkpKk1hdGguc2luKChNKkotTCkqKDIq
TWF0aC5QSSkvSykqMC41K0krSAp9LGJhY2tJbjpmdW5jdGlvbihKLEYsRyxILEkpe2lmKHR5cGVv
ZiBJPT0idW5kZWZpbmVkIil7ST0xLjcwMTU4Cn1yZXR1cm4gRyooSi89SCkqSiooKEkrMSkqSi1J
KStGCn0sYmFja091dDpmdW5jdGlvbihKLEYsRyxILEkpe2lmKHR5cGVvZiBJPT0idW5kZWZpbmVk
Iil7ST0xLjcwMTU4Cn1yZXR1cm4gRyooKEo9Si9ILTEpKkoqKChJKzEpKkorSSkrMSkrRgp9LGJh
Y2tCb3RoOmZ1bmN0aW9uKEosRixHLEgsSSl7aWYodHlwZW9mIEk9PSJ1bmRlZmluZWQiKXtJPTEu
NzAxNTgKfWlmKChKLz1ILzIpPDEpe3JldHVybiBHLzIqKEoqSiooKChJKj0oMS41MjUpKSsxKSpK
LUkpKStGCn1yZXR1cm4gRy8yKigoSi09MikqSiooKChJKj0oMS41MjUpKSsxKSpKK0kpKzIpK0YK
fSxib3VuY2VJbjpmdW5jdGlvbihILEUsRixHKXtyZXR1cm4gRi1ZQUhPTy51dGlsLkVhc2luZy5i
b3VuY2VPdXQoRy1ILDAsRixHKStFCn0sYm91bmNlT3V0OmZ1bmN0aW9uKEgsRSxGLEcpe2lmKChI
Lz1HKTwoMS8yLjc1KSl7cmV0dXJuIEYqKDcuNTYyNSpIKkgpK0UKfWVsc2V7aWYoSDwoMi8yLjc1
KSl7cmV0dXJuIEYqKDcuNTYyNSooSC09KDEuNS8yLjc1KSkqSCswLjc1KStFCn1lbHNle2lmKEg8
KDIuNS8yLjc1KSl7cmV0dXJuIEYqKDcuNTYyNSooSC09KDIuMjUvMi43NSkpKkgrMC45Mzc1KStF
Cn19fXJldHVybiBGKig3LjU2MjUqKEgtPSgyLjYyNS8yLjc1KSkqSCswLjk4NDM3NSkrRQp9LGJv
dW5jZUJvdGg6ZnVuY3Rpb24oSCxFLEYsRyl7aWYoSDxHLzIpe3JldHVybiBZQUhPTy51dGlsLkVh
c2luZy5ib3VuY2VJbihIKjIsMCxGLEcpKjAuNStFCn1yZXR1cm4gWUFIT08udXRpbC5FYXNpbmcu
Ym91bmNlT3V0KEgqMi1HLDAsRixHKSowLjUrRiowLjUrRQp9fTsKKGZ1bmN0aW9uKCl7dmFyIEc9
ZnVuY3Rpb24oQyxELEIsQSl7aWYoQyl7Ry5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhp
cyxDLEQsQixBKQp9fTsKRy5OQU1FPSJNb3Rpb24iOwp2YXIgST1ZQUhPTy51dGlsOwpZQUhPTy5l
eHRlbmQoRyxJLkNvbG9yQW5pbSk7CnZhciBIPUcuc3VwZXJjbGFzczsKdmFyIEs9Ry5wcm90b3R5
cGU7CksucGF0dGVybnMucG9pbnRzPS9ecG9pbnRzJC9pOwpLLnNldEF0dHJpYnV0ZT1mdW5jdGlv
bihDLEEsQil7aWYodGhpcy5wYXR0ZXJucy5wb2ludHMudGVzdChDKSl7Qj1CfHwicHgiOwpILnNl
dEF0dHJpYnV0ZS5jYWxsKHRoaXMsImxlZnQiLEFbMF0sQik7Ckguc2V0QXR0cmlidXRlLmNhbGwo
dGhpcywidG9wIixBWzFdLEIpCn1lbHNle0guc2V0QXR0cmlidXRlLmNhbGwodGhpcyxDLEEsQikK
fX07CksuZ2V0QXR0cmlidXRlPWZ1bmN0aW9uKEIpe2lmKHRoaXMucGF0dGVybnMucG9pbnRzLnRl
c3QoQikpe3ZhciBBPVtILmdldEF0dHJpYnV0ZS5jYWxsKHRoaXMsImxlZnQiKSxILmdldEF0dHJp
YnV0ZS5jYWxsKHRoaXMsInRvcCIpXQp9ZWxzZXtBPUguZ2V0QXR0cmlidXRlLmNhbGwodGhpcyxC
KQp9cmV0dXJuIEEKfTsKSy5kb01ldGhvZD1mdW5jdGlvbihFLEEsRCl7dmFyIEI9bnVsbDsKaWYo
dGhpcy5wYXR0ZXJucy5wb2ludHMudGVzdChFKSl7dmFyIEM9dGhpcy5tZXRob2QodGhpcy5jdXJy
ZW50RnJhbWUsMCwxMDAsdGhpcy50b3RhbEZyYW1lcykvMTAwOwpCPUkuQmV6aWVyLmdldFBvc2l0
aW9uKHRoaXMucnVudGltZUF0dHJpYnV0ZXNbRV0sQykKfWVsc2V7Qj1ILmRvTWV0aG9kLmNhbGwo
dGhpcyxFLEEsRCkKfXJldHVybiBCCn07Cksuc2V0UnVudGltZUF0dHJpYnV0ZT1mdW5jdGlvbihB
KXtpZih0aGlzLnBhdHRlcm5zLnBvaW50cy50ZXN0KEEpKXt2YXIgUz10aGlzLmdldEVsKCk7CnZh
ciBRPXRoaXMuYXR0cmlidXRlczsKdmFyIFQ7CnZhciBFPVEucG9pbnRzWyJjb250cm9sIl18fFtd
Owp2YXIgUjsKdmFyIEQsQjsKaWYoRS5sZW5ndGg+MCYmIShFWzBdIGluc3RhbmNlb2YgQXJyYXkp
KXtFPVtFXQp9ZWxzZXt2YXIgRj1bXTsKZm9yKEQ9MCxCPUUubGVuZ3RoOwpEPEI7CisrRCl7RltE
XT1FW0RdCn1FPUYKfWlmKEkuRG9tLmdldFN0eWxlKFMsInBvc2l0aW9uIik9PSJzdGF0aWMiKXtJ
LkRvbS5zZXRTdHlsZShTLCJwb3NpdGlvbiIsInJlbGF0aXZlIikKfWlmKEooUS5wb2ludHNbImZy
b20iXSkpe0kuRG9tLnNldFhZKFMsUS5wb2ludHNbImZyb20iXSkKfWVsc2V7SS5Eb20uc2V0WFko
UyxJLkRvbS5nZXRYWShTKSkKfVQ9dGhpcy5nZXRBdHRyaWJ1dGUoInBvaW50cyIpOwppZihKKFEu
cG9pbnRzWyJ0byJdKSl7Uj1MLmNhbGwodGhpcyxRLnBvaW50c1sidG8iXSxUKTsKdmFyIEM9SS5E
b20uZ2V0WFkodGhpcy5nZXRFbCgpKTsKZm9yKEQ9MCxCPUUubGVuZ3RoOwpEPEI7CisrRCl7RVtE
XT1MLmNhbGwodGhpcyxFW0RdLFQpCn19ZWxzZXtpZihKKFEucG9pbnRzWyJieSJdKSl7Uj1bVFsw
XStRLnBvaW50c1siYnkiXVswXSxUWzFdK1EucG9pbnRzWyJieSJdWzFdXTsKZm9yKEQ9MCxCPUUu
bGVuZ3RoOwpEPEI7CisrRCl7RVtEXT1bVFswXStFW0RdWzBdLFRbMV0rRVtEXVsxXV0KfX19dGhp
cy5ydW50aW1lQXR0cmlidXRlc1tBXT1bVF07CmlmKEUubGVuZ3RoPjApe3RoaXMucnVudGltZUF0
dHJpYnV0ZXNbQV09dGhpcy5ydW50aW1lQXR0cmlidXRlc1tBXS5jb25jYXQoRSkKfXRoaXMucnVu
dGltZUF0dHJpYnV0ZXNbQV1bdGhpcy5ydW50aW1lQXR0cmlidXRlc1tBXS5sZW5ndGhdPVIKfWVs
c2V7SC5zZXRSdW50aW1lQXR0cmlidXRlLmNhbGwodGhpcyxBKQp9fTsKdmFyIEw9ZnVuY3Rpb24o
QyxBKXt2YXIgQj1JLkRvbS5nZXRYWSh0aGlzLmdldEVsKCkpOwpDPVtDWzBdLUJbMF0rQVswXSxD
WzFdLUJbMV0rQVsxXV07CnJldHVybiBDCn07CnZhciBKPWZ1bmN0aW9uKEEpe3JldHVybih0eXBl
b2YgQSE9PSJ1bmRlZmluZWQiKQp9OwpJLk1vdGlvbj1HCn0pKCk7CihmdW5jdGlvbigpe3ZhciBG
PWZ1bmN0aW9uKEMsRCxCLEEpe2lmKEMpe0Yuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRo
aXMsQyxELEIsQSkKfX07CkYuTkFNRT0iU2Nyb2xsIjsKdmFyIEg9WUFIT08udXRpbDsKWUFIT08u
ZXh0ZW5kKEYsSC5Db2xvckFuaW0pOwp2YXIgRz1GLnN1cGVyY2xhc3M7CnZhciBFPUYucHJvdG90
eXBlOwpFLmRvTWV0aG9kPWZ1bmN0aW9uKEQsQSxDKXt2YXIgQj1udWxsOwppZihEPT0ic2Nyb2xs
Iil7Qj1bdGhpcy5tZXRob2QodGhpcy5jdXJyZW50RnJhbWUsQVswXSxDWzBdLUFbMF0sdGhpcy50
b3RhbEZyYW1lcyksdGhpcy5tZXRob2QodGhpcy5jdXJyZW50RnJhbWUsQVsxXSxDWzFdLUFbMV0s
dGhpcy50b3RhbEZyYW1lcyldCn1lbHNle0I9Ry5kb01ldGhvZC5jYWxsKHRoaXMsRCxBLEMpCn1y
ZXR1cm4gQgp9OwpFLmdldEF0dHJpYnV0ZT1mdW5jdGlvbihDKXt2YXIgQT1udWxsOwp2YXIgQj10
aGlzLmdldEVsKCk7CmlmKEM9PSJzY3JvbGwiKXtBPVtCLnNjcm9sbExlZnQsQi5zY3JvbGxUb3Bd
Cn1lbHNle0E9Ry5nZXRBdHRyaWJ1dGUuY2FsbCh0aGlzLEMpCn1yZXR1cm4gQQp9OwpFLnNldEF0
dHJpYnV0ZT1mdW5jdGlvbihELEEsQil7dmFyIEM9dGhpcy5nZXRFbCgpOwppZihEPT0ic2Nyb2xs
Iil7Qy5zY3JvbGxMZWZ0PUFbMF07CkMuc2Nyb2xsVG9wPUFbMV0KfWVsc2V7Ry5zZXRBdHRyaWJ1
dGUuY2FsbCh0aGlzLEQsQSxCKQp9fTsKSC5TY3JvbGw9Rgp9KSgpOwpZQUhPTy5yZWdpc3Rlcigi
YW5pbWF0aW9uIixZQUhPTy51dGlsLkFuaW0se3ZlcnNpb246IjIuOC4wcjQiLGJ1aWxkOiIyNDQ5
In0pOwo8L3NjcmlwdD4KPHNjcmlwdD4KWUFIT08udXRpbC5Db25uZWN0PXtfbXN4bWxfcHJvZ2lk
OlsiTWljcm9zb2Z0LlhNTEhUVFAiLCJNU1hNTDIuWE1MSFRUUC4zLjAiLCJNU1hNTDIuWE1MSFRU
UCJdLF9odHRwX2hlYWRlcnM6e30sX2hhc19odHRwX2hlYWRlcnM6ZmFsc2UsX3VzZV9kZWZhdWx0
X3Bvc3RfaGVhZGVyOnRydWUsX2RlZmF1bHRfcG9zdF9oZWFkZXI6ImFwcGxpY2F0aW9uL3gtd3d3
LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOCIsX2RlZmF1bHRfZm9ybV9oZWFkZXI6ImFw
cGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsX3VzZV9kZWZhdWx0X3hocl9oZWFkZXI6
dHJ1ZSxfZGVmYXVsdF94aHJfaGVhZGVyOiJYTUxIdHRwUmVxdWVzdCIsX2hhc19kZWZhdWx0X2hl
YWRlcnM6dHJ1ZSxfZGVmYXVsdF9oZWFkZXJzOnt9LF9wb2xsOnt9LF90aW1lT3V0Ont9LF9wb2xs
aW5nX2ludGVydmFsOjUwLF90cmFuc2FjdGlvbl9pZDowLHN0YXJ0RXZlbnQ6bmV3IFlBSE9PLnV0
aWwuQ3VzdG9tRXZlbnQoInN0YXJ0IiksY29tcGxldGVFdmVudDpuZXcgWUFIT08udXRpbC5DdXN0
b21FdmVudCgiY29tcGxldGUiKSxzdWNjZXNzRXZlbnQ6bmV3IFlBSE9PLnV0aWwuQ3VzdG9tRXZl
bnQoInN1Y2Nlc3MiKSxmYWlsdXJlRXZlbnQ6bmV3IFlBSE9PLnV0aWwuQ3VzdG9tRXZlbnQoImZh
aWx1cmUiKSxhYm9ydEV2ZW50Om5ldyBZQUhPTy51dGlsLkN1c3RvbUV2ZW50KCJhYm9ydCIpLF9j
dXN0b21FdmVudHM6e29uU3RhcnQ6WyJzdGFydEV2ZW50Iiwic3RhcnQiXSxvbkNvbXBsZXRlOlsi
Y29tcGxldGVFdmVudCIsImNvbXBsZXRlIl0sb25TdWNjZXNzOlsic3VjY2Vzc0V2ZW50Iiwic3Vj
Y2VzcyJdLG9uRmFpbHVyZTpbImZhaWx1cmVFdmVudCIsImZhaWx1cmUiXSxvblVwbG9hZDpbInVw
bG9hZEV2ZW50IiwidXBsb2FkIl0sb25BYm9ydDpbImFib3J0RXZlbnQiLCJhYm9ydCJdfSxzZXRQ
cm9nSWQ6ZnVuY3Rpb24oQil7dGhpcy5fbXN4bWxfcHJvZ2lkLnVuc2hpZnQoQikKfSxzZXREZWZh
dWx0UG9zdEhlYWRlcjpmdW5jdGlvbihCKXtpZih0eXBlb2YgQj09InN0cmluZyIpe3RoaXMuX2Rl
ZmF1bHRfcG9zdF9oZWFkZXI9Qgp9ZWxzZXtpZih0eXBlb2YgQj09ImJvb2xlYW4iKXt0aGlzLl91
c2VfZGVmYXVsdF9wb3N0X2hlYWRlcj1CCn19fSxzZXREZWZhdWx0WGhySGVhZGVyOmZ1bmN0aW9u
KEIpe2lmKHR5cGVvZiBCPT0ic3RyaW5nIil7dGhpcy5fZGVmYXVsdF94aHJfaGVhZGVyPUIKfWVs
c2V7dGhpcy5fdXNlX2RlZmF1bHRfeGhyX2hlYWRlcj1CCn19LHNldFBvbGxpbmdJbnRlcnZhbDpm
dW5jdGlvbihCKXtpZih0eXBlb2YgQj09Im51bWJlciImJmlzRmluaXRlKEIpKXt0aGlzLl9wb2xs
aW5nX2ludGVydmFsPUIKfX0sY3JlYXRlWGhyT2JqZWN0OmZ1bmN0aW9uKEgpe3ZhciBKLEcsTDsK
dHJ5e0c9bmV3IFhNTEh0dHBSZXF1ZXN0KCk7Cko9e2Nvbm46Ryx0SWQ6SCx4aHI6dHJ1ZX0KfWNh
dGNoKEspe2ZvcihMPTA7Ckw8dGhpcy5fbXN4bWxfcHJvZ2lkLmxlbmd0aDsKKytMKXt0cnl7Rz1u
ZXcgQWN0aXZlWE9iamVjdCh0aGlzLl9tc3htbF9wcm9naWRbTF0pOwpKPXtjb25uOkcsdElkOkgs
eGhyOnRydWV9OwpicmVhawp9Y2F0Y2goSSl7fX19ZmluYWxseXtyZXR1cm4gSgp9fSxnZXRDb25u
ZWN0aW9uT2JqZWN0OmZ1bmN0aW9uKEUpe3ZhciBHLEY9dGhpcy5fdHJhbnNhY3Rpb25faWQ7CnRy
eXtpZighRSl7Rz10aGlzLmNyZWF0ZVhock9iamVjdChGKQp9ZWxzZXtHPXt0SWQ6Rn07CmlmKEU9
PT0ieGRyIil7Ry5jb25uPXRoaXMuX3RyYW5zcG9ydDsKRy54ZHI9dHJ1ZQp9ZWxzZXtpZihFPT09
InVwbG9hZCIpe0cudXBsb2FkPXRydWUKfX19aWYoRyl7dGhpcy5fdHJhbnNhY3Rpb25faWQrKwp9
fWNhdGNoKEgpe31yZXR1cm4gRwp9LGFzeW5jUmVxdWVzdDpmdW5jdGlvbihJLEwsSixIKXt2YXIg
SyxNLE49KEomJkouYXJndW1lbnQpP0ouYXJndW1lbnQ6bnVsbDsKaWYodGhpcy5faXNGaWxlVXBs
b2FkKXtNPSJ1cGxvYWQiCn1lbHNle2lmKEoueGRyKXtNPSJ4ZHIiCn19Sz10aGlzLmdldENvbm5l
Y3Rpb25PYmplY3QoTSk7CmlmKCFLKXtyZXR1cm4gbnVsbAp9ZWxzZXtpZihKJiZKLmN1c3RvbWV2
ZW50cyl7dGhpcy5pbml0Q3VzdG9tRXZlbnRzKEssSikKfWlmKHRoaXMuX2lzRm9ybVN1Ym1pdCl7
aWYodGhpcy5faXNGaWxlVXBsb2FkKXt0aGlzLnVwbG9hZEZpbGUoSyxKLEwsSCk7CnJldHVybiBL
Cn1pZihJLnRvVXBwZXJDYXNlKCk9PSJHRVQiKXtpZih0aGlzLl9zRm9ybURhdGEubGVuZ3RoIT09
MCl7TCs9KChMLmluZGV4T2YoIj8iKT09LTEpPyI/IjoiJiIpK3RoaXMuX3NGb3JtRGF0YQp9fWVs
c2V7aWYoSS50b1VwcGVyQ2FzZSgpPT0iUE9TVCIpe0g9SD90aGlzLl9zRm9ybURhdGErIiYiK0g6
dGhpcy5fc0Zvcm1EYXRhCn19fWlmKEkudG9VcHBlckNhc2UoKT09IkdFVCImJihKJiZKLmNhY2hl
PT09ZmFsc2UpKXtMKz0oKEwuaW5kZXhPZigiPyIpPT0tMSk/Ij8iOiImIikrInJuZD0iK25ldyBE
YXRlKCkudmFsdWVPZigpLnRvU3RyaW5nKCkKfWlmKHRoaXMuX3VzZV9kZWZhdWx0X3hocl9oZWFk
ZXIpe2lmKCF0aGlzLl9kZWZhdWx0X2hlYWRlcnNbIlgtUmVxdWVzdGVkLVdpdGgiXSl7dGhpcy5p
bml0SGVhZGVyKCJYLVJlcXVlc3RlZC1XaXRoIix0aGlzLl9kZWZhdWx0X3hocl9oZWFkZXIsdHJ1
ZSkKfX1pZigoSS50b1VwcGVyQ2FzZSgpPT09IlBPU1QiJiZ0aGlzLl91c2VfZGVmYXVsdF9wb3N0
X2hlYWRlcikmJnRoaXMuX2lzRm9ybVN1Ym1pdD09PWZhbHNlKXt0aGlzLmluaXRIZWFkZXIoIkNv
bnRlbnQtVHlwZSIsdGhpcy5fZGVmYXVsdF9wb3N0X2hlYWRlcikKfWlmKEsueGRyKXt0aGlzLnhk
cihLLEksTCxKLEgpOwpyZXR1cm4gSwp9Sy5jb25uLm9wZW4oSSxMLHRydWUpOwppZih0aGlzLl9o
YXNfZGVmYXVsdF9oZWFkZXJzfHx0aGlzLl9oYXNfaHR0cF9oZWFkZXJzKXt0aGlzLnNldEhlYWRl
cihLKQp9dGhpcy5oYW5kbGVSZWFkeVN0YXRlKEssSik7CksuY29ubi5zZW5kKEh8fCIiKTsKaWYo
dGhpcy5faXNGb3JtU3VibWl0PT09dHJ1ZSl7dGhpcy5yZXNldEZvcm1TdGF0ZSgpCn10aGlzLnN0
YXJ0RXZlbnQuZmlyZShLLE4pOwppZihLLnN0YXJ0RXZlbnQpe0suc3RhcnRFdmVudC5maXJlKEss
TikKfXJldHVybiBLCn19LGluaXRDdXN0b21FdmVudHM6ZnVuY3Rpb24oRCxFKXt2YXIgRjsKZm9y
KEYgaW4gRS5jdXN0b21ldmVudHMpe2lmKHRoaXMuX2N1c3RvbUV2ZW50c1tGXVswXSl7RFt0aGlz
Ll9jdXN0b21FdmVudHNbRl1bMF1dPW5ldyBZQUhPTy51dGlsLkN1c3RvbUV2ZW50KHRoaXMuX2N1
c3RvbUV2ZW50c1tGXVsxXSwoRS5zY29wZSk/RS5zY29wZTpudWxsKTsKRFt0aGlzLl9jdXN0b21F
dmVudHNbRl1bMF1dLnN1YnNjcmliZShFLmN1c3RvbWV2ZW50c1tGXSkKfX19LGhhbmRsZVJlYWR5
U3RhdGU6ZnVuY3Rpb24oRyxGKXt2YXIgSD10aGlzLEU9KEYmJkYuYXJndW1lbnQpP0YuYXJndW1l
bnQ6bnVsbDsKaWYoRiYmRi50aW1lb3V0KXt0aGlzLl90aW1lT3V0W0cudElkXT13aW5kb3cuc2V0
VGltZW91dChmdW5jdGlvbigpe0guYWJvcnQoRyxGLHRydWUpCn0sRi50aW1lb3V0KQp9dGhpcy5f
cG9sbFtHLnRJZF09d2luZG93LnNldEludGVydmFsKGZ1bmN0aW9uKCl7aWYoRy5jb25uJiZHLmNv
bm4ucmVhZHlTdGF0ZT09PTQpe3dpbmRvdy5jbGVhckludGVydmFsKEguX3BvbGxbRy50SWRdKTsK
ZGVsZXRlIEguX3BvbGxbRy50SWRdOwppZihGJiZGLnRpbWVvdXQpe3dpbmRvdy5jbGVhclRpbWVv
dXQoSC5fdGltZU91dFtHLnRJZF0pOwpkZWxldGUgSC5fdGltZU91dFtHLnRJZF0KfUguY29tcGxl
dGVFdmVudC5maXJlKEcsRSk7CmlmKEcuY29tcGxldGVFdmVudCl7Ry5jb21wbGV0ZUV2ZW50LmZp
cmUoRyxFKQp9SC5oYW5kbGVUcmFuc2FjdGlvblJlc3BvbnNlKEcsRikKfX0sdGhpcy5fcG9sbGlu
Z19pbnRlcnZhbCkKfSxoYW5kbGVUcmFuc2FjdGlvblJlc3BvbnNlOmZ1bmN0aW9uKE0sUCxLKXt2
YXIgVCxOLFI9KFAmJlAuYXJndW1lbnQpP1AuYXJndW1lbnQ6bnVsbCxMPShNLnImJk0uci5zdGF0
dXNUZXh0PT09InhkcjpzdWNjZXNzIik/dHJ1ZTpmYWxzZSxRPShNLnImJk0uci5zdGF0dXNUZXh0
PT09InhkcjpmYWlsdXJlIik/dHJ1ZTpmYWxzZSxPPUs7CnRyeXtpZigoTS5jb25uLnN0YXR1cyE9
PXVuZGVmaW5lZCYmTS5jb25uLnN0YXR1cyE9PTApfHxMKXtUPU0uY29ubi5zdGF0dXMKfWVsc2V7
aWYoUSYmIU8pe1Q9MAp9ZWxzZXtUPTEzMDMwCn19fWNhdGNoKFMpe1Q9MTMwMzAKfWlmKChUPj0y
MDAmJlQ8MzAwKXx8VD09PTEyMjN8fEwpe049TS54ZHI/TS5yOnRoaXMuY3JlYXRlUmVzcG9uc2VP
YmplY3QoTSxSKTsKaWYoUCYmUC5zdWNjZXNzKXtpZighUC5zY29wZSl7UC5zdWNjZXNzKE4pCn1l
bHNle1Auc3VjY2Vzcy5hcHBseShQLnNjb3BlLFtOXSkKfX10aGlzLnN1Y2Nlc3NFdmVudC5maXJl
KE4pOwppZihNLnN1Y2Nlc3NFdmVudCl7TS5zdWNjZXNzRXZlbnQuZmlyZShOKQp9fWVsc2V7c3dp
dGNoKFQpe2Nhc2UgMTIwMDI6Y2FzZSAxMjAyOTpjYXNlIDEyMDMwOmNhc2UgMTIwMzE6Y2FzZSAx
MjE1MjpjYXNlIDEzMDMwOk49dGhpcy5jcmVhdGVFeGNlcHRpb25PYmplY3QoTS50SWQsUiwoSz9L
OmZhbHNlKSk7CmlmKFAmJlAuZmFpbHVyZSl7aWYoIVAuc2NvcGUpe1AuZmFpbHVyZShOKQp9ZWxz
ZXtQLmZhaWx1cmUuYXBwbHkoUC5zY29wZSxbTl0pCn19YnJlYWs7CmRlZmF1bHQ6Tj0oTS54ZHIp
P00ucmVzcG9uc2U6dGhpcy5jcmVhdGVSZXNwb25zZU9iamVjdChNLFIpOwppZihQJiZQLmZhaWx1
cmUpe2lmKCFQLnNjb3BlKXtQLmZhaWx1cmUoTikKfWVsc2V7UC5mYWlsdXJlLmFwcGx5KFAuc2Nv
cGUsW05dKQp9fX10aGlzLmZhaWx1cmVFdmVudC5maXJlKE4pOwppZihNLmZhaWx1cmVFdmVudCl7
TS5mYWlsdXJlRXZlbnQuZmlyZShOKQp9fXRoaXMucmVsZWFzZU9iamVjdChNKTsKTj1udWxsCn0s
Y3JlYXRlUmVzcG9uc2VPYmplY3Q6ZnVuY3Rpb24oTSxQKXt2YXIgSj17fSxOPXt9LFIsSyxRLEw7
CnRyeXtLPU0uY29ubi5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKTsKUT1LLnNwbGl0KCJcbiIpOwpm
b3IoUj0wOwpSPFEubGVuZ3RoOwpSKyspe0w9UVtSXS5pbmRleE9mKCI6Iik7CmlmKEwhPS0xKXtO
W1FbUl0uc3Vic3RyaW5nKDAsTCldPVlBSE9PLmxhbmcudHJpbShRW1JdLnN1YnN0cmluZyhMKzIp
KQp9fX1jYXRjaChPKXt9Si50SWQ9TS50SWQ7Ckouc3RhdHVzPShNLmNvbm4uc3RhdHVzPT0xMjIz
KT8yMDQ6TS5jb25uLnN0YXR1czsKSi5zdGF0dXNUZXh0PShNLmNvbm4uc3RhdHVzPT0xMjIzKT8i
Tm8gQ29udGVudCI6TS5jb25uLnN0YXR1c1RleHQ7CkouZ2V0UmVzcG9uc2VIZWFkZXI9TjsKSi5n
ZXRBbGxSZXNwb25zZUhlYWRlcnM9SzsKSi5yZXNwb25zZVRleHQ9TS5jb25uLnJlc3BvbnNlVGV4
dDsKSi5yZXNwb25zZVhNTD1NLmNvbm4ucmVzcG9uc2VYTUw7CmlmKFApe0ouYXJndW1lbnQ9UAp9
cmV0dXJuIEoKfSxjcmVhdGVFeGNlcHRpb25PYmplY3Q6ZnVuY3Rpb24oSixOLEkpe3ZhciBMPTAs
Sz0iY29tbXVuaWNhdGlvbiBmYWlsdXJlIixPPS0xLFA9InRyYW5zYWN0aW9uIGFib3J0ZWQiLE09
e307Ck0udElkPUo7CmlmKEkpe00uc3RhdHVzPU87Ck0uc3RhdHVzVGV4dD1QCn1lbHNle00uc3Rh
dHVzPUw7Ck0uc3RhdHVzVGV4dD1LCn1pZihOKXtNLmFyZ3VtZW50PU4KfXJldHVybiBNCn0saW5p
dEhlYWRlcjpmdW5jdGlvbihFLEYsRyl7dmFyIEg9KEcpP3RoaXMuX2RlZmF1bHRfaGVhZGVyczp0
aGlzLl9odHRwX2hlYWRlcnM7CkhbRV09RjsKaWYoRyl7dGhpcy5faGFzX2RlZmF1bHRfaGVhZGVy
cz10cnVlCn1lbHNle3RoaXMuX2hhc19odHRwX2hlYWRlcnM9dHJ1ZQp9fSxzZXRIZWFkZXI6ZnVu
Y3Rpb24oQyl7dmFyIEQ7CmlmKHRoaXMuX2hhc19kZWZhdWx0X2hlYWRlcnMpe2ZvcihEIGluIHRo
aXMuX2RlZmF1bHRfaGVhZGVycyl7aWYoWUFIT08ubGFuZy5oYXNPd25Qcm9wZXJ0eSh0aGlzLl9k
ZWZhdWx0X2hlYWRlcnMsRCkpe0MuY29ubi5zZXRSZXF1ZXN0SGVhZGVyKEQsdGhpcy5fZGVmYXVs
dF9oZWFkZXJzW0RdKQp9fX1pZih0aGlzLl9oYXNfaHR0cF9oZWFkZXJzKXtmb3IoRCBpbiB0aGlz
Ll9odHRwX2hlYWRlcnMpe2lmKFlBSE9PLmxhbmcuaGFzT3duUHJvcGVydHkodGhpcy5faHR0cF9o
ZWFkZXJzLEQpKXtDLmNvbm4uc2V0UmVxdWVzdEhlYWRlcihELHRoaXMuX2h0dHBfaGVhZGVyc1tE
XSkKfX10aGlzLl9odHRwX2hlYWRlcnM9e307CnRoaXMuX2hhc19odHRwX2hlYWRlcnM9ZmFsc2UK
fX0scmVzZXREZWZhdWx0SGVhZGVyczpmdW5jdGlvbigpe3RoaXMuX2RlZmF1bHRfaGVhZGVycz17
fTsKdGhpcy5faGFzX2RlZmF1bHRfaGVhZGVycz1mYWxzZQp9LGFib3J0OmZ1bmN0aW9uKEssSSxI
KXt2YXIgTCxOPShJJiZJLmFyZ3VtZW50KT9JLmFyZ3VtZW50Om51bGw7Cks9S3x8e307CmlmKEsu
Y29ubil7aWYoSy54aHIpe2lmKHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyhLKSl7Sy5jb25uLmFib3J0
KCk7CndpbmRvdy5jbGVhckludGVydmFsKHRoaXMuX3BvbGxbSy50SWRdKTsKZGVsZXRlIHRoaXMu
X3BvbGxbSy50SWRdOwppZihIKXt3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVPdXRbSy50
SWRdKTsKZGVsZXRlIHRoaXMuX3RpbWVPdXRbSy50SWRdCn1MPXRydWUKfX1lbHNle2lmKEsueGRy
KXtLLmNvbm4uYWJvcnQoSy50SWQpOwpMPXRydWUKfX19ZWxzZXtpZihLLnVwbG9hZCl7dmFyIE09
Inl1aUlPIitLLnRJZDsKdmFyIEo9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoTSk7CmlmKEope1lB
SE9PLnV0aWwuRXZlbnQucmVtb3ZlTGlzdGVuZXIoSiwibG9hZCIpOwpkb2N1bWVudC5ib2R5LnJl
bW92ZUNoaWxkKEopOwppZihIKXt3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVPdXRbSy50
SWRdKTsKZGVsZXRlIHRoaXMuX3RpbWVPdXRbSy50SWRdCn1MPXRydWUKfX1lbHNle0w9ZmFsc2UK
fX1pZihMPT09dHJ1ZSl7dGhpcy5hYm9ydEV2ZW50LmZpcmUoSyxOKTsKaWYoSy5hYm9ydEV2ZW50
KXtLLmFib3J0RXZlbnQuZmlyZShLLE4pCn10aGlzLmhhbmRsZVRyYW5zYWN0aW9uUmVzcG9uc2Uo
SyxJLHRydWUpCn1yZXR1cm4gTAp9LGlzQ2FsbEluUHJvZ3Jlc3M6ZnVuY3Rpb24oQil7Qj1CfHx7
fTsKaWYoQi54aHImJkIuY29ubil7cmV0dXJuIEIuY29ubi5yZWFkeVN0YXRlIT09NCYmQi5jb25u
LnJlYWR5U3RhdGUhPT0wCn1lbHNle2lmKEIueGRyJiZCLmNvbm4pe3JldHVybiBCLmNvbm4uaXND
YWxsSW5Qcm9ncmVzcyhCLnRJZCkKfWVsc2V7aWYoQi51cGxvYWQ9PT10cnVlKXtyZXR1cm4gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoInl1aUlPIitCLnRJZCk/dHJ1ZTpmYWxzZQp9ZWxzZXtyZXR1
cm4gZmFsc2UKfX19fSxyZWxlYXNlT2JqZWN0OmZ1bmN0aW9uKEIpe2lmKEImJkIuY29ubil7Qi5j
b25uPW51bGw7CkI9bnVsbAp9fX07CihmdW5jdGlvbigpe3ZhciBLPVlBSE9PLnV0aWwuQ29ubmVj
dCxKPXt9OwpmdW5jdGlvbiBOKEMpe3ZhciBCPSc8b2JqZWN0IGlkPSJZVUlDb25uZWN0aW9uU3dm
IiB0eXBlPSJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIgZGF0YT0iJytDKyciIHdpZHRo
PSIwIiBoZWlnaHQ9IjAiPjxwYXJhbSBuYW1lPSJtb3ZpZSIgdmFsdWU9IicrQysnIj48cGFyYW0g
bmFtZT0iYWxsb3dTY3JpcHRBY2Nlc3MiIHZhbHVlPSJhbHdheXMiPjwvb2JqZWN0PicsQT1kb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChBKTsK
QS5pbm5lckhUTUw9Qgp9ZnVuY3Rpb24gUChBLEQsQyxFLEIpe0pbcGFyc2VJbnQoQS50SWQpXT17
bzpBLGM6RX07CmlmKEIpe0UubWV0aG9kPUQ7CkUuZGF0YT1CCn1BLmNvbm4uc2VuZChDLEUsQS50
SWQpCn1mdW5jdGlvbiBNKEEpe04oQSk7CksuX3RyYW5zcG9ydD1kb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiWVVJQ29ubmVjdGlvblN3ZiIpCn1mdW5jdGlvbiBPKCl7Sy54ZHJSZWFkeUV2ZW50LmZp
cmUoKQp9ZnVuY3Rpb24gSShBLEIpe2lmKEEpe0suc3RhcnRFdmVudC5maXJlKEEsQi5hcmd1bWVu
dCk7CmlmKEEuc3RhcnRFdmVudCl7QS5zdGFydEV2ZW50LmZpcmUoQSxCLmFyZ3VtZW50KQp9fX1m
dW5jdGlvbiBMKEIpe3ZhciBBPUpbQi50SWRdLm8sQz1KW0IudElkXS5jOwppZihCLnN0YXR1c1Rl
eHQ9PT0ieGRyOnN0YXJ0Iil7SShBLEMpOwpyZXR1cm4gCn1CLnJlc3BvbnNlVGV4dD1kZWNvZGVV
UkkoQi5yZXNwb25zZVRleHQpOwpBLnI9QjsKaWYoQy5hcmd1bWVudCl7QS5yLmFyZ3VtZW50PUMu
YXJndW1lbnQKfXRoaXMuaGFuZGxlVHJhbnNhY3Rpb25SZXNwb25zZShBLEMsQi5zdGF0dXNUZXh0
PT09InhkcjphYm9ydCI/dHJ1ZTpmYWxzZSk7CmRlbGV0ZSBKW0IudElkXQp9Sy54ZHI9UDsKSy5z
d2Y9TjsKSy50cmFuc3BvcnQ9TTsKSy54ZHJSZWFkeUV2ZW50PW5ldyBZQUhPTy51dGlsLkN1c3Rv
bUV2ZW50KCJ4ZHJSZWFkeSIpOwpLLnhkclJlYWR5PU87CksuaGFuZGxlWGRyUmVzcG9uc2U9TAp9
KSgpOwooZnVuY3Rpb24oKXt2YXIgTD1ZQUhPTy51dGlsLkNvbm5lY3QsSj1ZQUhPTy51dGlsLkV2
ZW50OwpMLl9pc0Zvcm1TdWJtaXQ9ZmFsc2U7CkwuX2lzRmlsZVVwbG9hZD1mYWxzZTsKTC5fZm9y
bU5vZGU9bnVsbDsKTC5fc0Zvcm1EYXRhPW51bGw7CkwuX3N1Ym1pdEVsZW1lbnRWYWx1ZT1udWxs
OwpMLnVwbG9hZEV2ZW50PW5ldyBZQUhPTy51dGlsLkN1c3RvbUV2ZW50KCJ1cGxvYWQiKSxMLl9o
YXNTdWJtaXRMaXN0ZW5lcj1mdW5jdGlvbigpe2lmKEope0ouYWRkTGlzdGVuZXIoZG9jdW1lbnQs
ImNsaWNrIixmdW5jdGlvbihBKXt2YXIgQj1KLmdldFRhcmdldChBKSxDPUIubm9kZU5hbWUudG9M
b3dlckNhc2UoKTsKaWYoKEM9PT0iaW5wdXQifHxDPT09ImJ1dHRvbiIpJiYoQi50eXBlJiZCLnR5
cGUudG9Mb3dlckNhc2UoKT09InN1Ym1pdCIpKXtMLl9zdWJtaXRFbGVtZW50VmFsdWU9ZW5jb2Rl
VVJJQ29tcG9uZW50KEIubmFtZSkrIj0iK2VuY29kZVVSSUNvbXBvbmVudChCLnZhbHVlKQp9fSk7
CnJldHVybiB0cnVlCn1yZXR1cm4gZmFsc2UKfSgpOwpmdW5jdGlvbiBJKEQsWSxkKXt2YXIgRSxl
LEYsWCxBLEc9ZmFsc2UsYT1bXSxCPTAsYixaLGMsQyxmOwp0aGlzLnJlc2V0Rm9ybVN0YXRlKCk7
CmlmKHR5cGVvZiBEPT0ic3RyaW5nIil7RT0oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoRCl8fGRv
Y3VtZW50LmZvcm1zW0RdKQp9ZWxzZXtpZih0eXBlb2YgRD09Im9iamVjdCIpe0U9RAp9ZWxzZXty
ZXR1cm4gCn19aWYoWSl7dGhpcy5jcmVhdGVGcmFtZShkP2Q6bnVsbCk7CnRoaXMuX2lzRm9ybVN1
Ym1pdD10cnVlOwp0aGlzLl9pc0ZpbGVVcGxvYWQ9dHJ1ZTsKdGhpcy5fZm9ybU5vZGU9RTsKcmV0
dXJuIAp9Zm9yKGI9MCxaPUUuZWxlbWVudHMubGVuZ3RoOwpiPFo7CisrYil7ZT1FLmVsZW1lbnRz
W2JdOwpBPWUuZGlzYWJsZWQ7CkY9ZS5uYW1lOwppZighQSYmRil7Rj1lbmNvZGVVUklDb21wb25l
bnQoRikrIj0iOwpYPWVuY29kZVVSSUNvbXBvbmVudChlLnZhbHVlKTsKc3dpdGNoKGUudHlwZSl7
Y2FzZSJzZWxlY3Qtb25lIjppZihlLnNlbGVjdGVkSW5kZXg+LTEpe2Y9ZS5vcHRpb25zW2Uuc2Vs
ZWN0ZWRJbmRleF07CmFbQisrXT1GK2VuY29kZVVSSUNvbXBvbmVudCgoZi5hdHRyaWJ1dGVzLnZh
bHVlJiZmLmF0dHJpYnV0ZXMudmFsdWUuc3BlY2lmaWVkKT9mLnZhbHVlOmYudGV4dCkKfWJyZWFr
OwpjYXNlInNlbGVjdC1tdWx0aXBsZSI6aWYoZS5zZWxlY3RlZEluZGV4Pi0xKXtmb3IoYz1lLnNl
bGVjdGVkSW5kZXgsQz1lLm9wdGlvbnMubGVuZ3RoOwpjPEM7CisrYyl7Zj1lLm9wdGlvbnNbY107
CmlmKGYuc2VsZWN0ZWQpe2FbQisrXT1GK2VuY29kZVVSSUNvbXBvbmVudCgoZi5hdHRyaWJ1dGVz
LnZhbHVlJiZmLmF0dHJpYnV0ZXMudmFsdWUuc3BlY2lmaWVkKT9mLnZhbHVlOmYudGV4dCkKfX19
YnJlYWs7CmNhc2UicmFkaW8iOmNhc2UiY2hlY2tib3giOmlmKGUuY2hlY2tlZCl7YVtCKytdPUYr
WAp9YnJlYWs7CmNhc2UiZmlsZSI6Y2FzZSB1bmRlZmluZWQ6Y2FzZSJyZXNldCI6Y2FzZSJidXR0
b24iOmJyZWFrOwpjYXNlInN1Ym1pdCI6aWYoRz09PWZhbHNlKXtpZih0aGlzLl9oYXNTdWJtaXRM
aXN0ZW5lciYmdGhpcy5fc3VibWl0RWxlbWVudFZhbHVlKXthW0IrK109dGhpcy5fc3VibWl0RWxl
bWVudFZhbHVlCn1HPXRydWUKfWJyZWFrOwpkZWZhdWx0OmFbQisrXT1GK1gKfX19dGhpcy5faXNG
b3JtU3VibWl0PXRydWU7CnRoaXMuX3NGb3JtRGF0YT1hLmpvaW4oIiYiKTsKdGhpcy5pbml0SGVh
ZGVyKCJDb250ZW50LVR5cGUiLHRoaXMuX2RlZmF1bHRfZm9ybV9oZWFkZXIpOwpyZXR1cm4gdGhp
cy5fc0Zvcm1EYXRhCn1mdW5jdGlvbiBNKCl7dGhpcy5faXNGb3JtU3VibWl0PWZhbHNlOwp0aGlz
Ll9pc0ZpbGVVcGxvYWQ9ZmFsc2U7CnRoaXMuX2Zvcm1Ob2RlPW51bGw7CnRoaXMuX3NGb3JtRGF0
YT0iIgp9ZnVuY3Rpb24gTihDKXt2YXIgQj0ieXVpSU8iK3RoaXMuX3RyYW5zYWN0aW9uX2lkLEE7
CmlmKFlBSE9PLmVudi51YS5pZSl7QT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCc8aWZyYW1lIGlk
PSInK0IrJyIgbmFtZT0iJytCKyciIC8+Jyk7CmlmKHR5cGVvZiBDPT0iYm9vbGVhbiIpe0Euc3Jj
PSJqYXZhc2NyaXB0OmZhbHNlIgp9fWVsc2V7QT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJh
bWUiKTsKQS5pZD1COwpBLm5hbWU9Qgp9QS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiOwpBLnN0
eWxlLnRvcD0iLTEwMDBweCI7CkEuc3R5bGUubGVmdD0iLTEwMDBweCI7CmRvY3VtZW50LmJvZHku
YXBwZW5kQ2hpbGQoQSkKfWZ1bmN0aW9uIEsoRSl7dmFyIEI9W10sRD1FLnNwbGl0KCImIiksQyxB
Owpmb3IoQz0wOwpDPEQubGVuZ3RoOwpDKyspe0E9RFtDXS5pbmRleE9mKCI9Iik7CmlmKEEhPS0x
KXtCW0NdPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7CkJbQ10udHlwZT0iaGlkZGVu
IjsKQltDXS5uYW1lPWRlY29kZVVSSUNvbXBvbmVudChEW0NdLnN1YnN0cmluZygwLEEpKTsKQltD
XS52YWx1ZT1kZWNvZGVVUklDb21wb25lbnQoRFtDXS5zdWJzdHJpbmcoQSsxKSk7CnRoaXMuX2Zv
cm1Ob2RlLmFwcGVuZENoaWxkKEJbQ10pCn19cmV0dXJuIEIKfWZ1bmN0aW9uIEgoYyxCLGIsZCl7
dmFyIEc9Inl1aUlPIitjLnRJZCxGPSJtdWx0aXBhcnQvZm9ybS1kYXRhIixEPWRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKEcpLGE9KGRvY3VtZW50LmRvY3VtZW50TW9kZSYmZG9jdW1lbnQuZG9jdW1l
bnRNb2RlPT09OCk/dHJ1ZTpmYWxzZSxBPXRoaXMsRT0oQiYmQi5hcmd1bWVudCk/Qi5hcmd1bWVu
dDpudWxsLEMsWCxlLFksZixaOwpmPXthY3Rpb246dGhpcy5fZm9ybU5vZGUuZ2V0QXR0cmlidXRl
KCJhY3Rpb24iKSxtZXRob2Q6dGhpcy5fZm9ybU5vZGUuZ2V0QXR0cmlidXRlKCJtZXRob2QiKSx0
YXJnZXQ6dGhpcy5fZm9ybU5vZGUuZ2V0QXR0cmlidXRlKCJ0YXJnZXQiKX07CnRoaXMuX2Zvcm1O
b2RlLnNldEF0dHJpYnV0ZSgiYWN0aW9uIixiKTsKdGhpcy5fZm9ybU5vZGUuc2V0QXR0cmlidXRl
KCJtZXRob2QiLCJQT1NUIik7CnRoaXMuX2Zvcm1Ob2RlLnNldEF0dHJpYnV0ZSgidGFyZ2V0IixH
KTsKaWYoWUFIT08uZW52LnVhLmllJiYhYSl7dGhpcy5fZm9ybU5vZGUuc2V0QXR0cmlidXRlKCJl
bmNvZGluZyIsRikKfWVsc2V7dGhpcy5fZm9ybU5vZGUuc2V0QXR0cmlidXRlKCJlbmN0eXBlIixG
KQp9aWYoZCl7Qz10aGlzLmFwcGVuZFBvc3REYXRhKGQpCn10aGlzLl9mb3JtTm9kZS5zdWJtaXQo
KTsKdGhpcy5zdGFydEV2ZW50LmZpcmUoYyxFKTsKaWYoYy5zdGFydEV2ZW50KXtjLnN0YXJ0RXZl
bnQuZmlyZShjLEUpCn1pZihCJiZCLnRpbWVvdXQpe3RoaXMuX3RpbWVPdXRbYy50SWRdPXdpbmRv
dy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7QS5hYm9ydChjLEIsdHJ1ZSkKfSxCLnRpbWVvdXQpCn1p
ZihDJiZDLmxlbmd0aD4wKXtmb3IoWD0wOwpYPEMubGVuZ3RoOwpYKyspe3RoaXMuX2Zvcm1Ob2Rl
LnJlbW92ZUNoaWxkKENbWF0pCn19Zm9yKGUgaW4gZil7aWYoWUFIT08ubGFuZy5oYXNPd25Qcm9w
ZXJ0eShmLGUpKXtpZihmW2VdKXt0aGlzLl9mb3JtTm9kZS5zZXRBdHRyaWJ1dGUoZSxmW2VdKQp9
ZWxzZXt0aGlzLl9mb3JtTm9kZS5yZW1vdmVBdHRyaWJ1dGUoZSkKfX19dGhpcy5yZXNldEZvcm1T
dGF0ZSgpOwpaPWZ1bmN0aW9uKCl7aWYoQiYmQi50aW1lb3V0KXt3aW5kb3cuY2xlYXJUaW1lb3V0
KEEuX3RpbWVPdXRbYy50SWRdKTsKZGVsZXRlIEEuX3RpbWVPdXRbYy50SWRdCn1BLmNvbXBsZXRl
RXZlbnQuZmlyZShjLEUpOwppZihjLmNvbXBsZXRlRXZlbnQpe2MuY29tcGxldGVFdmVudC5maXJl
KGMsRSkKfVk9e3RJZDpjLnRJZCxhcmd1bWVudDpCLmFyZ3VtZW50fTsKdHJ5e1kucmVzcG9uc2VU
ZXh0PUQuY29udGVudFdpbmRvdy5kb2N1bWVudC5ib2R5P0QuY29udGVudFdpbmRvdy5kb2N1bWVu
dC5ib2R5LmlubmVySFRNTDpELmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50
LnRleHRDb250ZW50OwpZLnJlc3BvbnNlWE1MPUQuY29udGVudFdpbmRvdy5kb2N1bWVudC5YTUxE
b2N1bWVudD9ELmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQuWE1MRG9jdW1lbnQ6RC5jb250ZW50V2lu
ZG93LmRvY3VtZW50Cn1jYXRjaChPKXt9aWYoQiYmQi51cGxvYWQpe2lmKCFCLnNjb3BlKXtCLnVw
bG9hZChZKQp9ZWxzZXtCLnVwbG9hZC5hcHBseShCLnNjb3BlLFtZXSkKfX1BLnVwbG9hZEV2ZW50
LmZpcmUoWSk7CmlmKGMudXBsb2FkRXZlbnQpe2MudXBsb2FkRXZlbnQuZmlyZShZKQp9Si5yZW1v
dmVMaXN0ZW5lcihELCJsb2FkIixaKTsKc2V0VGltZW91dChmdW5jdGlvbigpe2RvY3VtZW50LmJv
ZHkucmVtb3ZlQ2hpbGQoRCk7CkEucmVsZWFzZU9iamVjdChjKQp9LDEwMCkKfTsKSi5hZGRMaXN0
ZW5lcihELCJsb2FkIixaKQp9TC5zZXRGb3JtPUk7CkwucmVzZXRGb3JtU3RhdGU9TTsKTC5jcmVh
dGVGcmFtZT1OOwpMLmFwcGVuZFBvc3REYXRhPUs7CkwudXBsb2FkRmlsZT1ICn0pKCk7CllBSE9P
LnJlZ2lzdGVyKCJjb25uZWN0aW9uIixZQUhPTy51dGlsLkNvbm5lY3Qse3ZlcnNpb246IjIuOC4w
cjQiLGJ1aWxkOiIyNDQ5In0pOwo8L3NjcmlwdD4KPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlw
dCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tCi8qIFNpdGVDYXRhbHlzdCBWYXJpYWJsZXMg
Ki8Kcy5wYWdlTmFtZT0iSG9tZXBhZ2UiOwpzLmNoYW5uZWw9IiI7CgoKCgoKLyoqKioqKioqKioq
KiogRE8gTk9UIEFMVEVSIEFOWVRISU5HIEJFTE9XIFRISVMgTElORSAhICoqKioqKioqKioqKioq
Lwp2YXIgc19jb2RlPXMudCgpO2lmKHNfY29kZSlkb2N1bWVudC53cml0ZShzX2NvZGUpLy8tLT48
L3NjcmlwdD4KCgoKCjxzY3JpcHQ+CllBSE9PLm5hbWVzcGFjZSgiZXh0ZW5zaW9uIik7CllBSE9P
LmV4dGVuc2lvbi5DYXJvdXNlbD1mdW5jdGlvbihELEMpe3RoaXMuaW5pdChELEMpCn07CllBSE9P
LmV4dGVuc2lvbi5DYXJvdXNlbC5wcm90b3R5cGU9e1VOQk9VTkRFRF9TSVpFOjEwMDAwMDAsaW5p
dDpmdW5jdGlvbihTLFcpe3ZhciBYPXRoaXM7CnRoaXMuZ2V0Q2Fyb3VzZWxJdGVtPXRoaXMuZ2V0
SXRlbTsKdmFyIFE9ImNhcm91c2VsLWxpc3QiOwp2YXIgUD0iY2Fyb3VzZWwtY2xpcC1yZWdpb24i
Owp2YXIgYT0iY2Fyb3VzZWwtbmV4dCI7CnZhciBiPSJjYXJvdXNlbC1wcmV2IjsKdGhpcy5fY2Fy
b3VzZWxFbGVtSUQ9UzsKdGhpcy5jYXJvdXNlbEVsZW09WUFIT08udXRpbC5Eb20uZ2V0KFMpOwp0
aGlzLl9wcmV2RW5hYmxlZD10cnVlOwp0aGlzLl9uZXh0RW5hYmxlZD10cnVlOwp0aGlzLmNmZz1u
ZXcgWUFIT08udXRpbC5Db25maWcodGhpcyk7CnRoaXMuY2ZnLmFkZFByb3BlcnR5KCJzY3JvbGxC
ZWZvcmVBbW91bnQiLHt2YWx1ZTowLGhhbmRsZXI6ZnVuY3Rpb24oQixDLEEpe30sdmFsaWRhdG9y
OlguY2ZnLmNoZWNrTnVtYmVyfSk7CnRoaXMuY2ZnLmFkZFByb3BlcnR5KCJzY3JvbGxBZnRlckFt
b3VudCIse3ZhbHVlOjAsaGFuZGxlcjpmdW5jdGlvbihCLEMsQSl7fSx2YWxpZGF0b3I6WC5jZmcu
Y2hlY2tOdW1iZXJ9KTsKdGhpcy5jZmcuYWRkUHJvcGVydHkoImxvYWRPblN0YXJ0Iix7dmFsdWU6
dHJ1ZSxoYW5kbGVyOmZ1bmN0aW9uKEIsQyxBKXt9LHZhbGlkYXRvcjpYLmNmZy5jaGVja0Jvb2xl
YW59KTsKdGhpcy5jZmcuYWRkUHJvcGVydHkoIm9yaWVudGF0aW9uIix7dmFsdWU6Imhvcml6b250
YWwiLGhhbmRsZXI6ZnVuY3Rpb24oQixDLEEpe1gucmVsb2FkKCkKfSx2YWxpZGF0b3I6ZnVuY3Rp
b24oQSl7aWYodHlwZW9mIEE9PSJzdHJpbmciKXtyZXR1cm4oImhvcml6b250YWwsdmVydGljYWwi
LmluZGV4T2YoQS50b0xvd2VyQ2FzZSgpKSE9LTEpCn1lbHNle3JldHVybiBmYWxzZQp9fX0pOwp0
aGlzLmNmZy5hZGRQcm9wZXJ0eSgic2l6ZSIse3ZhbHVlOnRoaXMuVU5CT1VOREVEX1NJWkUsaGFu
ZGxlcjpmdW5jdGlvbihCLEMsQSl7WC5yZWxvYWQoKQp9LHZhbGlkYXRvcjpYLmNmZy5jaGVja051
bWJlcn0pOwp0aGlzLmNmZy5hZGRQcm9wZXJ0eSgibnVtVmlzaWJsZSIse3ZhbHVlOjMsaGFuZGxl
cjpmdW5jdGlvbihCLEMsQSl7WC5yZWxvYWQoKQp9LHZhbGlkYXRvcjpYLmNmZy5jaGVja051bWJl
cn0pOwp0aGlzLmNmZy5hZGRQcm9wZXJ0eSgiZmlyc3RWaXNpYmxlIix7dmFsdWU6MSxoYW5kbGVy
OmZ1bmN0aW9uKEIsQyxBKXtYLm1vdmVUbyhDWzBdKQp9LHZhbGlkYXRvcjpYLmNmZy5jaGVja051
bWJlcn0pOwp0aGlzLmNmZy5hZGRQcm9wZXJ0eSgic2Nyb2xsSW5jIix7dmFsdWU6MyxoYW5kbGVy
OmZ1bmN0aW9uKEIsQyxBKXt9LHZhbGlkYXRvcjpYLmNmZy5jaGVja051bWJlcn0pOwp0aGlzLmNm
Zy5hZGRQcm9wZXJ0eSgiYW5pbWF0aW9uU3BlZWQiLHt2YWx1ZTowLjI1LGhhbmRsZXI6ZnVuY3Rp
b24oQixDLEEpe1guYW5pbWF0aW9uU3BlZWQ9Q1swXQp9LHZhbGlkYXRvcjpYLmNmZy5jaGVja051
bWJlcn0pOwp0aGlzLmNmZy5hZGRQcm9wZXJ0eSgiYW5pbWF0aW9uTWV0aG9kIix7dmFsdWU6WUFI
T08udXRpbC5FYXNpbmcuZWFzZU91dCxoYW5kbGVyOmZ1bmN0aW9uKEIsQyxBKXt9fSk7CnRoaXMu
Y2ZnLmFkZFByb3BlcnR5KCJhbmltYXRpb25Db21wbGV0ZUhhbmRsZXIiLHt2YWx1ZTpudWxsLGhh
bmRsZXI6ZnVuY3Rpb24oQixDLEEpe2lmKFguX2FuaW1hdGlvbkNvbXBsZXRlRXZ0KXtYLl9hbmlt
YXRpb25Db21wbGV0ZUV2dC51bnN1YnNjcmliZShYLl9jdXJyQW5pbWF0aW9uQ29tcGxldGVIYW5k
bGVyLFgpCn1YLl9jdXJyQW5pbWF0aW9uQ29tcGxldGVIYW5kbGVyPUNbMF07CmlmKFguX2N1cnJB
bmltYXRpb25Db21wbGV0ZUhhbmRsZXIpe2lmKCFYLl9hbmltYXRpb25Db21wbGV0ZUV2dCl7WC5f
YW5pbWF0aW9uQ29tcGxldGVFdnQ9bmV3IFlBSE9PLnV0aWwuQ3VzdG9tRXZlbnQoIm9uQW5pbWF0
aW9uQ29tcGxldGUiLFgpCn1YLl9hbmltYXRpb25Db21wbGV0ZUV2dC5zdWJzY3JpYmUoWC5fY3Vy
ckFuaW1hdGlvbkNvbXBsZXRlSGFuZGxlcixYKQp9fX0pOwp0aGlzLmNmZy5hZGRQcm9wZXJ0eSgi
YXV0b1BsYXkiLHt2YWx1ZTowLGhhbmRsZXI6ZnVuY3Rpb24oQixELEEpe3ZhciBDPURbMF07Cmlm
KEM+MCl7WC5zdGFydEF1dG9QbGF5KCkKfWVsc2V7WC5zdG9wQXV0b1BsYXkoKQp9fX0pOwp0aGlz
LmNmZy5hZGRQcm9wZXJ0eSgid3JhcCIse3ZhbHVlOmZhbHNlLGhhbmRsZXI6ZnVuY3Rpb24oQixD
LEEpe30sdmFsaWRhdG9yOlguY2ZnLmNoZWNrQm9vbGVhbn0pOwp0aGlzLmNmZy5hZGRQcm9wZXJ0
eSgibmF2TWFyZ2luIix7dmFsdWU6MCxoYW5kbGVyOmZ1bmN0aW9uKEIsQyxBKXtYLmNhbGN1bGF0
ZVNpemUoKQp9LHZhbGlkYXRvcjpYLmNmZy5jaGVja051bWJlcn0pOwp0aGlzLmNmZy5hZGRQcm9w
ZXJ0eSgicmV2ZWFsQW1vdW50Iix7dmFsdWU6MCxoYW5kbGVyOmZ1bmN0aW9uKEIsQyxBKXtYLnJl
bG9hZCgpCn0sdmFsaWRhdG9yOlguY2ZnLmNoZWNrTnVtYmVyfSk7CnRoaXMuY2ZnLmFkZFByb3Bl
cnR5KCJwcmV2RWxlbWVudElEIix7dmFsdWU6bnVsbCxoYW5kbGVyOmZ1bmN0aW9uKEIsQyxBKXtp
ZihYLl9jYXJvdXNlbFByZXYpe1lBSE9PLnV0aWwuRXZlbnQucmVtb3ZlTGlzdGVuZXIoWC5fY2Fy
b3VzZWxQcmV2LCJjbGljayIsWC5fc2Nyb2xsUHJldikKfVguX3ByZXZFbGVtZW50SUQ9Q1swXTsK
aWYoWC5fcHJldkVsZW1lbnRJRD09bnVsbCl7WC5fY2Fyb3VzZWxQcmV2PVlBSE9PLnV0aWwuRG9t
LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYiwiZGl2IixYLmNhcm91c2VsRWxlbSlbMF0KfWVsc2V7
WC5fY2Fyb3VzZWxQcmV2PVlBSE9PLnV0aWwuRG9tLmdldChYLl9wcmV2RWxlbWVudElEKQp9WUFI
T08udXRpbC5FdmVudC5hZGRMaXN0ZW5lcihYLl9jYXJvdXNlbFByZXYsImNsaWNrIixYLl9zY3Jv
bGxQcmV2LFgpCn19KTsKdGhpcy5jZmcuYWRkUHJvcGVydHkoInByZXZFbGVtZW50Iix7dmFsdWU6
bnVsbCxoYW5kbGVyOmZ1bmN0aW9uKEIsQyxBKXtpZihYLl9jYXJvdXNlbFByZXYpe1lBSE9PLnV0
aWwuRXZlbnQucmVtb3ZlTGlzdGVuZXIoWC5fY2Fyb3VzZWxQcmV2LCJjbGljayIsWC5fc2Nyb2xs
UHJldikKfVguX3ByZXZFbGVtZW50SUQ9Q1swXTsKaWYoWC5fcHJldkVsZW1lbnRJRD09bnVsbCl7
WC5fY2Fyb3VzZWxQcmV2PVlBSE9PLnV0aWwuRG9tLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYiwi
ZGl2IixYLmNhcm91c2VsRWxlbSlbMF0KfWVsc2V7WC5fY2Fyb3VzZWxQcmV2PVlBSE9PLnV0aWwu
RG9tLmdldChYLl9wcmV2RWxlbWVudElEKQp9WUFIT08udXRpbC5FdmVudC5hZGRMaXN0ZW5lcihY
Ll9jYXJvdXNlbFByZXYsImNsaWNrIixYLl9zY3JvbGxQcmV2LFgpCn19KTsKdGhpcy5jZmcuYWRk
UHJvcGVydHkoIm5leHRFbGVtZW50SUQiLHt2YWx1ZTpudWxsLGhhbmRsZXI6ZnVuY3Rpb24oQixD
LEEpe2lmKFguX2Nhcm91c2VsTmV4dCl7WUFIT08udXRpbC5FdmVudC5yZW1vdmVMaXN0ZW5lcihY
Ll9jYXJvdXNlbE5leHQsImNsaWNrIixYLl9zY3JvbGxOZXh0KQp9WC5fbmV4dEVsZW1lbnRJRD1D
WzBdOwppZihYLl9uZXh0RWxlbWVudElEPT1udWxsKXtYLl9jYXJvdXNlbE5leHQ9WUFIT08udXRp
bC5Eb20uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShhLCJkaXYiLFguY2Fyb3VzZWxFbGVtKQp9ZWxz
ZXtYLl9jYXJvdXNlbE5leHQ9WUFIT08udXRpbC5Eb20uZ2V0KFguX25leHRFbGVtZW50SUQpCn1p
ZihYLl9jYXJvdXNlbE5leHQpe1lBSE9PLnV0aWwuRXZlbnQuYWRkTGlzdGVuZXIoWC5fY2Fyb3Vz
ZWxOZXh0LCJjbGljayIsWC5fc2Nyb2xsTmV4dCxYKQp9fX0pOwp0aGlzLmNmZy5hZGRQcm9wZXJ0
eSgibmV4dEVsZW1lbnQiLHt2YWx1ZTpudWxsLGhhbmRsZXI6ZnVuY3Rpb24oQixDLEEpe2lmKFgu
X2Nhcm91c2VsTmV4dCl7WUFIT08udXRpbC5FdmVudC5yZW1vdmVMaXN0ZW5lcihYLl9jYXJvdXNl
bE5leHQsImNsaWNrIixYLl9zY3JvbGxOZXh0KQp9WC5fbmV4dEVsZW1lbnRJRD1DWzBdOwppZihY
Ll9uZXh0RWxlbWVudElEPT1udWxsKXtYLl9jYXJvdXNlbE5leHQ9WUFIT08udXRpbC5Eb20uZ2V0
RWxlbWVudHNCeUNsYXNzTmFtZShhLCJkaXYiLFguY2Fyb3VzZWxFbGVtKQp9ZWxzZXtYLl9jYXJv
dXNlbE5leHQ9WUFIT08udXRpbC5Eb20uZ2V0KFguX25leHRFbGVtZW50SUQpCn1pZihYLl9jYXJv
dXNlbE5leHQpe1lBSE9PLnV0aWwuRXZlbnQuYWRkTGlzdGVuZXIoWC5fY2Fyb3VzZWxOZXh0LCJj
bGljayIsWC5fc2Nyb2xsTmV4dCxYKQp9fX0pOwp0aGlzLmNmZy5hZGRQcm9wZXJ0eSgibG9hZElu
aXRIYW5kbGVyIix7dmFsdWU6bnVsbCxoYW5kbGVyOmZ1bmN0aW9uKEIsQyxBKXtpZihYLl9sb2Fk
SW5pdEhhbmRsZXJFdnQpe1guX2xvYWRJbml0SGFuZGxlckV2dC51bnN1YnNjcmliZShYLl9jdXJy
TG9hZEluaXRIYW5kbGVyLFgpCn1YLl9jdXJyTG9hZEluaXRIYW5kbGVyPUNbMF07CmlmKFguX2N1
cnJMb2FkSW5pdEhhbmRsZXIpe2lmKCFYLl9sb2FkSW5pdEhhbmRsZXJFdnQpe1guX2xvYWRJbml0
SGFuZGxlckV2dD1uZXcgWUFIT08udXRpbC5DdXN0b21FdmVudCgib25Mb2FkSW5pdCIsWCkKfVgu
X2xvYWRJbml0SGFuZGxlckV2dC5zdWJzY3JpYmUoWC5fY3VyckxvYWRJbml0SGFuZGxlcixYKQp9
fX0pOwp0aGlzLmNmZy5hZGRQcm9wZXJ0eSgibG9hZE5leHRIYW5kbGVyIix7dmFsdWU6bnVsbCxo
YW5kbGVyOmZ1bmN0aW9uKEIsQyxBKXtpZihYLl9sb2FkTmV4dEhhbmRsZXJFdnQpe1guX2xvYWRO
ZXh0SGFuZGxlckV2dC51bnN1YnNjcmliZShYLl9jdXJyTG9hZE5leHRIYW5kbGVyLFgpCn1YLl9j
dXJyTG9hZE5leHRIYW5kbGVyPUNbMF07CmlmKFguX2N1cnJMb2FkTmV4dEhhbmRsZXIpe2lmKCFY
Ll9sb2FkTmV4dEhhbmRsZXJFdnQpe1guX2xvYWROZXh0SGFuZGxlckV2dD1uZXcgWUFIT08udXRp
bC5DdXN0b21FdmVudCgib25Mb2FkTmV4dCIsWCkKfVguX2xvYWROZXh0SGFuZGxlckV2dC5zdWJz
Y3JpYmUoWC5fY3VyckxvYWROZXh0SGFuZGxlcixYKQp9fX0pOwp0aGlzLmNmZy5hZGRQcm9wZXJ0
eSgibG9hZFByZXZIYW5kbGVyIix7dmFsdWU6bnVsbCxoYW5kbGVyOmZ1bmN0aW9uKEIsQyxBKXtp
ZihYLl9sb2FkUHJldkhhbmRsZXJFdnQpe1guX2xvYWRQcmV2SGFuZGxlckV2dC51bnN1YnNjcmli
ZShYLl9jdXJyTG9hZFByZXZIYW5kbGVyLFgpCn1YLl9jdXJyTG9hZFByZXZIYW5kbGVyPUNbMF07
CmlmKFguX2N1cnJMb2FkUHJldkhhbmRsZXIpe2lmKCFYLl9sb2FkUHJldkhhbmRsZXJFdnQpe1gu
X2xvYWRQcmV2SGFuZGxlckV2dD1uZXcgWUFIT08udXRpbC5DdXN0b21FdmVudCgib25Mb2FkUHJl
diIsWCkKfVguX2xvYWRQcmV2SGFuZGxlckV2dC5zdWJzY3JpYmUoWC5fY3VyckxvYWRQcmV2SGFu
ZGxlcixYKQp9fX0pOwp0aGlzLmNmZy5hZGRQcm9wZXJ0eSgicHJldkJ1dHRvblN0YXRlSGFuZGxl
ciIse3ZhbHVlOm51bGwsaGFuZGxlcjpmdW5jdGlvbihCLEMsQSl7aWYoWC5fY3VyclByZXZCdXR0
b25TdGF0ZUhhbmRsZXIpe1guX3ByZXZCdXR0b25TdGF0ZUhhbmRsZXJFdnQudW5zdWJzY3JpYmUo
WC5fY3VyclByZXZCdXR0b25TdGF0ZUhhbmRsZXIsWCkKfVguX2N1cnJQcmV2QnV0dG9uU3RhdGVI
YW5kbGVyPUNbMF07CmlmKFguX2N1cnJQcmV2QnV0dG9uU3RhdGVIYW5kbGVyKXtpZighWC5fcHJl
dkJ1dHRvblN0YXRlSGFuZGxlckV2dCl7WC5fcHJldkJ1dHRvblN0YXRlSGFuZGxlckV2dD1uZXcg
WUFIT08udXRpbC5DdXN0b21FdmVudCgib25QcmV2QnV0dG9uU3RhdGVDaGFuZ2UiLFgpCn1YLl9w
cmV2QnV0dG9uU3RhdGVIYW5kbGVyRXZ0LnN1YnNjcmliZShYLl9jdXJyUHJldkJ1dHRvblN0YXRl
SGFuZGxlcixYKQp9fX0pOwp0aGlzLmNmZy5hZGRQcm9wZXJ0eSgibmV4dEJ1dHRvblN0YXRlSGFu
ZGxlciIse3ZhbHVlOm51bGwsaGFuZGxlcjpmdW5jdGlvbihCLEMsQSl7aWYoWC5fY3Vyck5leHRC
dXR0b25TdGF0ZUhhbmRsZXIpe1guX25leHRCdXR0b25TdGF0ZUhhbmRsZXJFdnQudW5zdWJzY3Jp
YmUoWC5fY3Vyck5leHRCdXR0b25TdGF0ZUhhbmRsZXIsWCkKfVguX2N1cnJOZXh0QnV0dG9uU3Rh
dGVIYW5kbGVyPUNbMF07CmlmKFguX2N1cnJOZXh0QnV0dG9uU3RhdGVIYW5kbGVyKXtpZighWC5f
bmV4dEJ1dHRvblN0YXRlSGFuZGxlckV2dCl7WC5fbmV4dEJ1dHRvblN0YXRlSGFuZGxlckV2dD1u
ZXcgWUFIT08udXRpbC5DdXN0b21FdmVudCgib25OZXh0QnV0dG9uU3RhdGVDaGFuZ2UiLFgpCn1Y
Ll9uZXh0QnV0dG9uU3RhdGVIYW5kbGVyRXZ0LnN1YnNjcmliZShYLl9jdXJyTmV4dEJ1dHRvblN0
YXRlSGFuZGxlcixYKQp9fX0pOwppZihXKXt0aGlzLmNmZy5hcHBseUNvbmZpZyhXKQp9dGhpcy5f
b3JpZ0ZpcnN0VmlzaWJsZT10aGlzLmNmZy5nZXRQcm9wZXJ0eSgiZmlyc3RWaXNpYmxlIik7CnRo
aXMuX2N1cnJMb2FkSW5pdEhhbmRsZXI9dGhpcy5jZmcuZ2V0UHJvcGVydHkoImxvYWRJbml0SGFu
ZGxlciIpOwp0aGlzLl9jdXJyTG9hZE5leHRIYW5kbGVyPXRoaXMuY2ZnLmdldFByb3BlcnR5KCJs
b2FkTmV4dEhhbmRsZXIiKTsKdGhpcy5fY3VyckxvYWRQcmV2SGFuZGxlcj10aGlzLmNmZy5nZXRQ
cm9wZXJ0eSgibG9hZFByZXZIYW5kbGVyIik7CnRoaXMuX2N1cnJQcmV2QnV0dG9uU3RhdGVIYW5k
bGVyPXRoaXMuY2ZnLmdldFByb3BlcnR5KCJwcmV2QnV0dG9uU3RhdGVIYW5kbGVyIik7CnRoaXMu
X2N1cnJOZXh0QnV0dG9uU3RhdGVIYW5kbGVyPXRoaXMuY2ZnLmdldFByb3BlcnR5KCJuZXh0QnV0
dG9uU3RhdGVIYW5kbGVyIik7CnRoaXMuX2N1cnJBbmltYXRpb25Db21wbGV0ZUhhbmRsZXI9dGhp
cy5jZmcuZ2V0UHJvcGVydHkoImFuaW1hdGlvbkNvbXBsZXRlSGFuZGxlciIpOwp0aGlzLl9uZXh0
RWxlbWVudElEPXRoaXMuY2ZnLmdldFByb3BlcnR5KCJuZXh0RWxlbWVudElEIik7CmlmKCF0aGlz
Ll9uZXh0RWxlbWVudElEKXt0aGlzLl9uZXh0RWxlbWVudElEPXRoaXMuY2ZnLmdldFByb3BlcnR5
KCJuZXh0RWxlbWVudCIpCn10aGlzLl9wcmV2RWxlbWVudElEPXRoaXMuY2ZnLmdldFByb3BlcnR5
KCJwcmV2RWxlbWVudElEIik7CmlmKCF0aGlzLl9wcmV2RWxlbWVudElEKXt0aGlzLl9wcmV2RWxl
bWVudElEPXRoaXMuY2ZnLmdldFByb3BlcnR5KCJwcmV2RWxlbWVudCIpCn10aGlzLl9hdXRvUGxh
eVRpbWVyPW51bGw7CnRoaXMuX3ByaW9yTGFzdFZpc2libGU9dGhpcy5fcHJpb3JGaXJzdFZpc2li
bGU9dGhpcy5jZmcuZ2V0UHJvcGVydHkoImZpcnN0VmlzaWJsZSIpOwp0aGlzLl9sYXN0UHJlYnVp
bHRJZHg9MDsKdGhpcy5jYXJvdXNlbExpc3Q9WUFIT08udXRpbC5Eb20uZ2V0RWxlbWVudHNCeUNs
YXNzTmFtZShRLCJ1bCIsdGhpcy5jYXJvdXNlbEVsZW0pWzBdOwppZih0aGlzLl9uZXh0RWxlbWVu
dElEPT1udWxsKXt0aGlzLl9jYXJvdXNlbE5leHQ9WUFIT08udXRpbC5Eb20uZ2V0RWxlbWVudHNC
eUNsYXNzTmFtZShhLCJkaXYiLHRoaXMuY2Fyb3VzZWxFbGVtKVswXQp9ZWxzZXt0aGlzLl9jYXJv
dXNlbE5leHQ9WUFIT08udXRpbC5Eb20uZ2V0KHRoaXMuX25leHRFbGVtZW50SUQpCn1pZih0aGlz
Ll9wcmV2RWxlbWVudElEPT1udWxsKXt0aGlzLl9jYXJvdXNlbFByZXY9WUFIT08udXRpbC5Eb20u
Z2V0RWxlbWVudHNCeUNsYXNzTmFtZShiLCJkaXYiLHRoaXMuY2Fyb3VzZWxFbGVtKVswXQp9ZWxz
ZXt0aGlzLl9jYXJvdXNlbFByZXY9WUFIT08udXRpbC5Eb20uZ2V0KHRoaXMuX3ByZXZFbGVtZW50
SUQpCn10aGlzLl9jbGlwUmVnPVlBSE9PLnV0aWwuRG9tLmdldEVsZW1lbnRzQnlDbGFzc05hbWUo
UCwiZGl2Iix0aGlzLmNhcm91c2VsRWxlbSlbMF07CmlmKHRoaXMuaXNWZXJ0aWNhbCgpKXtZQUhP
Ty51dGlsLkRvbS5hZGRDbGFzcyh0aGlzLmNhcm91c2VsTGlzdCwiY2Fyb3VzZWwtdmVydGljYWwi
KQp9dGhpcy5fc2Nyb2xsTmV4dEFuaW09bmV3IFlBSE9PLnV0aWwuTW90aW9uKHRoaXMuY2Fyb3Vz
ZWxMaXN0LHRoaXMuc2Nyb2xsTmV4dFBhcmFtcyx0aGlzLmNmZy5nZXRQcm9wZXJ0eSgiYW5pbWF0
aW9uU3BlZWQiKSx0aGlzLmNmZy5nZXRQcm9wZXJ0eSgiYW5pbWF0aW9uTWV0aG9kIikpOwp0aGlz
Ll9zY3JvbGxQcmV2QW5pbT1uZXcgWUFIT08udXRpbC5Nb3Rpb24odGhpcy5jYXJvdXNlbExpc3Qs
dGhpcy5zY3JvbGxQcmV2UGFyYW1zLHRoaXMuY2ZnLmdldFByb3BlcnR5KCJhbmltYXRpb25TcGVl
ZCIpLHRoaXMuY2ZnLmdldFByb3BlcnR5KCJhbmltYXRpb25NZXRob2QiKSk7CmlmKHRoaXMuX2Nh
cm91c2VsTmV4dCl7WUFIT08udXRpbC5FdmVudC5hZGRMaXN0ZW5lcih0aGlzLl9jYXJvdXNlbE5l
eHQsImNsaWNrIix0aGlzLl9zY3JvbGxOZXh0LHRoaXMpCn1pZih0aGlzLl9jYXJvdXNlbFByZXYp
e1lBSE9PLnV0aWwuRXZlbnQuYWRkTGlzdGVuZXIodGhpcy5fY2Fyb3VzZWxQcmV2LCJjbGljayIs
dGhpcy5fc2Nyb2xsUHJldix0aGlzKQp9dmFyIFk9dGhpcy5jZmcuZ2V0UHJvcGVydHkoImxvYWRJ
bml0SGFuZGxlciIpOwppZihZKXt0aGlzLl9sb2FkSW5pdEhhbmRsZXJFdnQ9bmV3IFlBSE9PLnV0
aWwuQ3VzdG9tRXZlbnQoIm9uTG9hZEluaXQiLHRoaXMpOwp0aGlzLl9sb2FkSW5pdEhhbmRsZXJF
dnQuc3Vic2NyaWJlKFksdGhpcykKfXZhciBVPXRoaXMuY2ZnLmdldFByb3BlcnR5KCJsb2FkTmV4
dEhhbmRsZXIiKTsKaWYoVSl7dGhpcy5fbG9hZE5leHRIYW5kbGVyRXZ0PW5ldyBZQUhPTy51dGls
LkN1c3RvbUV2ZW50KCJvbkxvYWROZXh0Iix0aGlzKTsKdGhpcy5fbG9hZE5leHRIYW5kbGVyRXZ0
LnN1YnNjcmliZShVLHRoaXMpCn12YXIgVD10aGlzLmNmZy5nZXRQcm9wZXJ0eSgibG9hZFByZXZI
YW5kbGVyIik7CmlmKFQpe3RoaXMuX2xvYWRQcmV2SGFuZGxlckV2dD1uZXcgWUFIT08udXRpbC5D
dXN0b21FdmVudCgib25Mb2FkUHJldiIsdGhpcyk7CnRoaXMuX2xvYWRQcmV2SGFuZGxlckV2dC5z
dWJzY3JpYmUoVCx0aGlzKQp9dmFyIFY9dGhpcy5jZmcuZ2V0UHJvcGVydHkoImFuaW1hdGlvbkNv
bXBsZXRlSGFuZGxlciIpOwppZihWKXt0aGlzLl9hbmltYXRpb25Db21wbGV0ZUV2dD1uZXcgWUFI
T08udXRpbC5DdXN0b21FdmVudCgib25BbmltYXRpb25Db21wbGV0ZSIsdGhpcyk7CnRoaXMuX2Fu
aW1hdGlvbkNvbXBsZXRlRXZ0LnN1YnNjcmliZShWLHRoaXMpCn12YXIgUj10aGlzLmNmZy5nZXRQ
cm9wZXJ0eSgicHJldkJ1dHRvblN0YXRlSGFuZGxlciIpOwppZihSKXt0aGlzLl9wcmV2QnV0dG9u
U3RhdGVIYW5kbGVyRXZ0PW5ldyBZQUhPTy51dGlsLkN1c3RvbUV2ZW50KCJvblByZXZCdXR0b25T
dGF0ZUNoYW5nZSIsdGhpcyk7CnRoaXMuX3ByZXZCdXR0b25TdGF0ZUhhbmRsZXJFdnQuc3Vic2Ny
aWJlKFIsdGhpcykKfXZhciBaPXRoaXMuY2ZnLmdldFByb3BlcnR5KCJuZXh0QnV0dG9uU3RhdGVI
YW5kbGVyIik7CmlmKFope3RoaXMuX25leHRCdXR0b25TdGF0ZUhhbmRsZXJFdnQ9bmV3IFlBSE9P
LnV0aWwuQ3VzdG9tRXZlbnQoIm9uTmV4dEJ1dHRvblN0YXRlQ2hhbmdlIix0aGlzKTsKdGhpcy5f
bmV4dEJ1dHRvblN0YXRlSGFuZGxlckV2dC5zdWJzY3JpYmUoWix0aGlzKQp9dmFyIE89dGhpcy5f
Y2FsY3VsYXRlVmlzaWJsZUV4dGVudCgpOwpZQUhPTy51dGlsLkV2ZW50Lm9uQXZhaWxhYmxlKHRo
aXMuX2Nhcm91c2VsRWxlbUlEKyItaXRlbS0iK08uc3RhcnQsdGhpcy5fY2FsY3VsYXRlU2l6ZSx0
aGlzKTsKaWYodGhpcy5jZmcuZ2V0UHJvcGVydHkoImxvYWRPblN0YXJ0Iikpe3RoaXMuX2xvYWRJ
bml0aWFsKCkKfX0sY2xlYXI6ZnVuY3Rpb24oKXt2YXIgQj10aGlzLmNmZy5nZXRQcm9wZXJ0eSgi
bG9hZEluaXRIYW5kbGVyIik7CmlmKEIpe3RoaXMuX3JlbW92ZUNoaWxkcmVuRnJvbU5vZGUodGhp
cy5jYXJvdXNlbExpc3QpOwp0aGlzLl9sYXN0UHJlYnVpbHRJZHg9MAp9dGhpcy5zdG9wQXV0b1Bs
YXkoKTsKdGhpcy5fcHJpb3JMYXN0VmlzaWJsZT10aGlzLl9wcmlvckZpcnN0VmlzaWJsZT10aGlz
Ll9vcmlnRmlyc3RWaXNpYmxlOwp0aGlzLmNmZy5zZXRQcm9wZXJ0eSgiZmlyc3RWaXNpYmxlIix0
aGlzLl9vcmlnRmlyc3RWaXNpYmxlLHRydWUpOwp0aGlzLm1vdmVUbyh0aGlzLl9vcmlnRmlyc3RW
aXNpYmxlKQp9LHJlbG9hZDpmdW5jdGlvbihEKXtpZih0aGlzLl9pc1ZhbGlkT2JqKEQpKXt0aGlz
LmNmZy5zZXRQcm9wZXJ0eSgibnVtVmlzaWJsZSIsRCkKfXRoaXMuY2xlYXIoKTsKdmFyIEM9dGhp
cy5fY2FsY3VsYXRlVmlzaWJsZUV4dGVudCgpOwpZQUhPTy51dGlsLkV2ZW50Lm9uQXZhaWxhYmxl
KHRoaXMuX2Nhcm91c2VsRWxlbUlEKyItaXRlbS0iK0Muc3RhcnQsdGhpcy5fY2FsY3VsYXRlU2l6
ZSx0aGlzKTsKdGhpcy5fbG9hZEluaXRpYWwoKQp9LGxvYWQ6ZnVuY3Rpb24oKXt2YXIgQj10aGlz
Ll9jYWxjdWxhdGVWaXNpYmxlRXh0ZW50KCk7CllBSE9PLnV0aWwuRXZlbnQub25BdmFpbGFibGUo
dGhpcy5fY2Fyb3VzZWxFbGVtSUQrIi1pdGVtLSIrQi5zdGFydCx0aGlzLl9jYWxjdWxhdGVTaXpl
LHRoaXMpOwp0aGlzLl9sb2FkSW5pdGlhbCgpCn0sYWRkSXRlbTpmdW5jdGlvbihJLEosSCl7aWYo
ST50aGlzLmNmZy5nZXRQcm9wZXJ0eSgic2l6ZSIpKXtyZXR1cm4gbnVsbAp9dmFyIEc9dGhpcy5n
ZXRJdGVtKEkpOwppZighdGhpcy5faXNWYWxpZE9iaihHKSl7Rz10aGlzLl9jcmVhdGVJdGVtKEks
Sik7CnRoaXMuY2Fyb3VzZWxMaXN0LmFwcGVuZENoaWxkKEcpCn1lbHNle2lmKHRoaXMuX2lzVmFs
aWRPYmooRy5wbGFjZWhvbGRlcikpe3ZhciBGPXRoaXMuX2NyZWF0ZUl0ZW0oSSxKKTsKdGhpcy5j
YXJvdXNlbExpc3QucmVwbGFjZUNoaWxkKEYsRyk7Ckc9Rgp9fWlmKHRoaXMuX2lzVmFsaWRPYmoo
SCkpe1lBSE9PLnV0aWwuRG9tLmFkZENsYXNzKEcsSCkKfWlmKHRoaXMuaXNWZXJ0aWNhbCgpKXtz
ZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Ry5zdHlsZS5kaXNwbGF5PSJibG9jayIKfSwxKQp9cmV0dXJu
IEcKfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oSCxGKXtpZihIPj10aGlzLmNmZy5nZXRQcm9wZXJ0
eSgic2l6ZSIpKXtyZXR1cm4gbnVsbAp9aWYoSDwxKXtIPTEKfXZhciBFPUgtMTsKaWYoRT50aGlz
Ll9sYXN0UHJlYnVpbHRJZHgpe3RoaXMuX3ByZWJ1aWxkSXRlbXModGhpcy5fbGFzdFByZWJ1aWx0
SWR4LEgpCn12YXIgRz10aGlzLl9pbnNlcnRCZWZvcmVJdGVtKEgsRik7CnRoaXMuX2VuYWJsZURp
c2FibGVDb250cm9scygpOwpyZXR1cm4gRwp9LGluc2VydEFmdGVyOmZ1bmN0aW9uKEgsRil7aWYo
SD50aGlzLmNmZy5nZXRQcm9wZXJ0eSgic2l6ZSIpKXtIPXRoaXMuY2ZnLmdldFByb3BlcnR5KCJz
aXplIikKfXZhciBFPUgrMTsKaWYoRT50aGlzLl9sYXN0UHJlYnVpbHRJZHgpe3RoaXMuX3ByZWJ1
aWxkSXRlbXModGhpcy5fbGFzdFByZWJ1aWx0SWR4LEUrMSkKfXZhciBHPXRoaXMuX2luc2VydEFm
dGVySXRlbShILEYpOwppZihFPnRoaXMuY2ZnLmdldFByb3BlcnR5KCJzaXplIikpe3RoaXMuY2Zn
LnNldFByb3BlcnR5KCJzaXplIixFLHRydWUpCn10aGlzLl9lbmFibGVEaXNhYmxlQ29udHJvbHMo
KTsKcmV0dXJuIEcKfSxzY3JvbGxOZXh0OmZ1bmN0aW9uKCl7dGhpcy5fc2Nyb2xsTmV4dChudWxs
LHRoaXMpOwp0aGlzLl9hdXRvUGxheVRpbWVyPW51bGw7CmlmKHRoaXMuY2ZnLmdldFByb3BlcnR5
KCJhdXRvUGxheSIpIT09MCl7dGhpcy5fYXV0b1BsYXlUaW1lcj10aGlzLnN0YXJ0QXV0b1BsYXko
KQp9fSxzY3JvbGxQcmV2OmZ1bmN0aW9uKCl7dGhpcy5fc2Nyb2xsUHJldihudWxsLHRoaXMpCn0s
c2Nyb2xsVG86ZnVuY3Rpb24oQil7dGhpcy5fcG9zaXRpb24oQix0cnVlKQp9LG1vdmVUbzpmdW5j
dGlvbihCKXt0aGlzLl9wb3NpdGlvbihCLGZhbHNlKQp9LHN0YXJ0QXV0b1BsYXk6ZnVuY3Rpb24o
RCl7aWYodGhpcy5faXNWYWxpZE9iaihEKSl7dGhpcy5jZmcuc2V0UHJvcGVydHkoImF1dG9QbGF5
IixELHRydWUpCn1pZih0aGlzLl9hdXRvUGxheVRpbWVyIT09bnVsbCl7cmV0dXJuIHRoaXMuX2F1
dG9QbGF5VGltZXIKfXZhciBFPXRoaXM7CnZhciBGPWZ1bmN0aW9uKCl7RS5zY3JvbGxOZXh0KCkK
fTsKdGhpcy5fYXV0b1BsYXlUaW1lcj1zZXRUaW1lb3V0KEYsdGhpcy5jZmcuZ2V0UHJvcGVydHko
ImF1dG9QbGF5IikpOwpyZXR1cm4gdGhpcy5fYXV0b1BsYXlUaW1lcgp9LHN0b3BBdXRvUGxheTpm
dW5jdGlvbigpe2lmKHRoaXMuX2F1dG9QbGF5VGltZXIhPT1udWxsKXtjbGVhclRpbWVvdXQodGhp
cy5fYXV0b1BsYXlUaW1lcik7CnRoaXMuX2F1dG9QbGF5VGltZXI9bnVsbAp9fSxpc1ZlcnRpY2Fs
OmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuY2ZnLmdldFByb3BlcnR5KCJvcmllbnRhdGlvbiIpIT0i
aG9yaXpvbnRhbCIpCn0saXNJdGVtTG9hZGVkOmZ1bmN0aW9uKEMpe3ZhciBEPXRoaXMuZ2V0SXRl
bShDKTsKaWYodGhpcy5faXNWYWxpZE9iaihEKSYmIXRoaXMuX2lzVmFsaWRPYmooRC5wbGFjZWhv
bGRlcikpe3JldHVybiB0cnVlCn1yZXR1cm4gZmFsc2UKfSxnZXRJdGVtOmZ1bmN0aW9uKEQpe3Zh
ciBGPXRoaXMuX2Nhcm91c2VsRWxlbUlEKyItaXRlbS0iK0Q7CnZhciBFPVlBSE9PLnV0aWwuRG9t
LmdldChGKTsKcmV0dXJuIEUKfSxzaG93OmZ1bmN0aW9uKCl7WUFIT08udXRpbC5Eb20uc2V0U3R5
bGUodGhpcy5jYXJvdXNlbEVsZW0sImRpc3BsYXkiLCJibG9jayIpOwp0aGlzLmNhbGN1bGF0ZVNp
emUoKQp9LGhpZGU6ZnVuY3Rpb24oKXtZQUhPTy51dGlsLkRvbS5zZXRTdHlsZSh0aGlzLmNhcm91
c2VsRWxlbSwiZGlzcGxheSIsIm5vbmUiKQp9LGNhbGN1bGF0ZVNpemU6ZnVuY3Rpb24oKXt2YXIg
QUs9dGhpcy5jYXJvdXNlbExpc3QuY2hpbGROb2RlczsKdmFyIHI9bnVsbDsKZm9yKHZhciBBUD0w
OwpBUDxBSy5sZW5ndGg7CkFQKyspe3I9QUtbQVBdOwppZihyLnRhZ05hbWU9PSJMSSJ8fHIudGFn
TmFtZT09ImxpIil7YnJlYWsKfX12YXIgaT10aGlzLmNmZy5nZXRQcm9wZXJ0eSgibmF2TWFyZ2lu
Iik7CnZhciBBST10aGlzLmNmZy5nZXRQcm9wZXJ0eSgibnVtVmlzaWJsZSIpOwp2YXIgQUE9dGhp
cy5jZmcuZ2V0UHJvcGVydHkoImZpcnN0VmlzaWJsZSIpOwp2YXIgQU09dGhpcy5fZ2V0U3R5bGVW
YWwociwicGFkZGluZ0xlZnQiKTsKdmFyIGw9dGhpcy5fZ2V0U3R5bGVWYWwociwicGFkZGluZ1Jp
Z2h0Iik7CnZhciBBTj10aGlzLl9nZXRTdHlsZVZhbChyLCJtYXJnaW5MZWZ0Iik7CnZhciBtPXRo
aXMuX2dldFN0eWxlVmFsKHIsIm1hcmdpblJpZ2h0Iik7CnZhciBuPXRoaXMuX2dldFN0eWxlVmFs
KHIsInBhZGRpbmdUb3AiKTsKdmFyIEFGPXRoaXMuX2dldFN0eWxlVmFsKHIsInBhZGRpbmdCb3R0
b20iKTsKdmFyIG89dGhpcy5fZ2V0U3R5bGVWYWwociwibWFyZ2luVG9wIik7CnZhciBBSD10aGlz
Ll9nZXRTdHlsZVZhbChyLCJtYXJnaW5Cb3R0b20iKTsKWUFIT08udXRpbC5Eb20ucmVtb3ZlQ2xh
c3ModGhpcy5jYXJvdXNlbExpc3QsImNhcm91c2VsLXZlcnRpY2FsIik7CllBSE9PLnV0aWwuRG9t
LnJlbW92ZUNsYXNzKHRoaXMuY2Fyb3VzZWxMaXN0LCJjYXJvdXNlbC1ob3Jpem9udGFsIik7Cmlm
KHRoaXMuaXNWZXJ0aWNhbCgpKXt2YXIgcD1BTStsK0FOK207CllBSE9PLnV0aWwuRG9tLmFkZENs
YXNzKHRoaXMuY2Fyb3VzZWxMaXN0LCJjYXJvdXNlbC12ZXJ0aWNhbCIpOwp2YXIgQUM9bitBRitv
K0FIOwp2YXIgeT10aGlzLl9nZXRTdHlsZVZhbCh0aGlzLmNhcm91c2VsTGlzdCwicGFkZGluZ1Rv
cCIpOwp2YXIgaj10aGlzLl9nZXRTdHlsZVZhbCh0aGlzLmNhcm91c2VsTGlzdCwicGFkZGluZ0Jv
dHRvbSIpOwp2YXIgej10aGlzLl9nZXRTdHlsZVZhbCh0aGlzLmNhcm91c2VsTGlzdCwibWFyZ2lu
VG9wIik7CnZhciBrPXRoaXMuX2dldFN0eWxlVmFsKHRoaXMuY2Fyb3VzZWxMaXN0LCJtYXJnaW5C
b3R0b20iKTsKdmFyIEFKPXkrait6K2s7CnZhciB0PSh0aGlzLl9pc0V4dHJhUmV2ZWFsZWQoKSk/
KHRoaXMuY2ZnLmdldFByb3BlcnR5KCJyZXZlYWxBbW91bnQiKSsoQUMpLzIpOjA7CnZhciBBRT10
aGlzLl9nZXRTdHlsZVZhbChyLCJoZWlnaHQiLHRydWUpOwp0aGlzLnNjcm9sbEFtb3VudFBlcklu
Yz0oQUUrQUMpOwp2YXIgQUQ9dGhpcy5fZ2V0U3R5bGVWYWwociwid2lkdGgiKTsKdGhpcy5jYXJv
dXNlbEVsZW0uc3R5bGUud2lkdGg9KEFEK3ApKyJweCI7CnRoaXMuX2NsaXBSZWcuc3R5bGUuaGVp
Z2h0PSh0aGlzLnNjcm9sbEFtb3VudFBlckluYypBSSt0KjIrQUopKyJweCI7CnRoaXMuY2Fyb3Vz
ZWxFbGVtLnN0eWxlLmhlaWdodD0odGhpcy5zY3JvbGxBbW91bnRQZXJJbmMqQUkrdCoyK2kqMitB
SikrInB4IjsKdmFyIEFPPSh0aGlzLl9pc0V4dHJhUmV2ZWFsZWQoKSk/KHQtKE1hdGguYWJzKG8t
QUgpK01hdGguYWJzKG4tQUYpKS8yKTowOwpZQUhPTy51dGlsLkRvbS5zZXRTdHlsZSh0aGlzLmNh
cm91c2VsTGlzdCwicG9zaXRpb24iLCJyZWxhdGl2ZSIpOwpZQUhPTy51dGlsLkRvbS5zZXRTdHls
ZSh0aGlzLmNhcm91c2VsTGlzdCwidG9wIiwiIitBTysicHgiKTsKdmFyIHY9WUFIT08udXRpbC5E
b20uZ2V0WSh0aGlzLmNhcm91c2VsTGlzdCk7CllBSE9PLnV0aWwuRG9tLnNldFkodGhpcy5jYXJv
dXNlbExpc3Qsdi10aGlzLnNjcm9sbEFtb3VudFBlckluYyooQUEtMSkpCn1lbHNle1lBSE9PLnV0
aWwuRG9tLmFkZENsYXNzKHRoaXMuY2Fyb3VzZWxMaXN0LCJjYXJvdXNlbC1ob3Jpem9udGFsIik7
CnZhciBxPXRoaXMuX2dldFN0eWxlVmFsKHRoaXMuY2Fyb3VzZWxMaXN0LCJwYWRkaW5nTGVmdCIp
Owp2YXIgdz10aGlzLl9nZXRTdHlsZVZhbCh0aGlzLmNhcm91c2VsTGlzdCwicGFkZGluZ1JpZ2h0
Iik7CnZhciBzPXRoaXMuX2dldFN0eWxlVmFsKHRoaXMuY2Fyb3VzZWxMaXN0LCJtYXJnaW5MZWZ0
Iik7CnZhciB4PXRoaXMuX2dldFN0eWxlVmFsKHRoaXMuY2Fyb3VzZWxMaXN0LCJtYXJnaW5SaWdo
dCIpOwphbGVydCgiPHVsIGlkPVwiY2Fyb3VzZWwtbGlzdFwiPiBlbGVtZW50IC0tIHdpZHRoOiAi
ICsgd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5jYXJvdXNlbExpc3QsIG51bGwpLndpZHRo
ICsgIiBtYXJnaW5SaWdodDogIiArIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuY2Fyb3Vz
ZWxMaXN0LCBudWxsKS5tYXJnaW5SaWdodCk7CnZhciBBQj1xK3crcyt4Owp2YXIgQUw9QU4rbTsK
dmFyIHA9QUwrbCtBTTsKdmFyIHQ9KHRoaXMuX2lzRXh0cmFSZXZlYWxlZCgpKT8odGhpcy5jZmcu
Z2V0UHJvcGVydHkoInJldmVhbEFtb3VudCIpKyhwKS8yKTowOwp2YXIgQUQ9ci5vZmZzZXRXaWR0
aDsKdGhpcy5zY3JvbGxBbW91bnRQZXJJbmM9QUQrQUw7CnRoaXMuX2NsaXBSZWcuc3R5bGUud2lk
dGg9KHRoaXMuc2Nyb2xsQW1vdW50UGVySW5jKkFJK3QqMikrInB4IjsKdGhpcy5jYXJvdXNlbEVs
ZW0uc3R5bGUud2lkdGg9KHRoaXMuc2Nyb2xsQW1vdW50UGVySW5jKkFJK2kqMit0KjIrQUIpKyJw
eCI7CnZhciBBRz0odGhpcy5faXNFeHRyYVJldmVhbGVkKCkpPyh0LShNYXRoLmFicyhtLUFOKStN
YXRoLmFicyhsLUFNKSkvMi0ocytxKSk6MDsKWUFIT08udXRpbC5Eb20uc2V0U3R5bGUodGhpcy5j
YXJvdXNlbExpc3QsInBvc2l0aW9uIiwicmVsYXRpdmUiKTsKWUFIT08udXRpbC5Eb20uc2V0U3R5
bGUodGhpcy5jYXJvdXNlbExpc3QsImxlZnQiLCIiK0FHKyJweCIpOwp2YXIgdT1ZQUhPTy51dGls
LkRvbS5nZXRYKHRoaXMuY2Fyb3VzZWxMaXN0KTsKWUFIT08udXRpbC5Eb20uc2V0WCh0aGlzLmNh
cm91c2VsTGlzdCx1LXRoaXMuc2Nyb2xsQW1vdW50UGVySW5jKihBQS0xKSkKfX0sc2V0UHJvcGVy
dHk6ZnVuY3Rpb24oRSxGLEQpe3RoaXMuY2ZnLnNldFByb3BlcnR5KEUsRixEKQp9LGdldFByb3Bl
cnR5OmZ1bmN0aW9uKEIpe3JldHVybiB0aGlzLmNmZy5nZXRQcm9wZXJ0eShCKQp9LGdldEZpcnN0
SXRlbVJldmVhbGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpcnN0SXRlbVJldmVhbGVkCn0s
Z2V0TGFzdEl0ZW1SZXZlYWxlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYXN0SXRlbVJldmVh
bGVkCn0sZ2V0Rmlyc3RWaXNpYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2ZnLmdldFByb3Bl
cnR5KCJmaXJzdFZpc2libGUiKQp9LGdldExhc3RWaXNpYmxlOmZ1bmN0aW9uKCl7dmFyIEQ9dGhp
cy5jZmcuZ2V0UHJvcGVydHkoImZpcnN0VmlzaWJsZSIpOwp2YXIgQz10aGlzLmNmZy5nZXRQcm9w
ZXJ0eSgibnVtVmlzaWJsZSIpOwpyZXR1cm4gRCtDLTEKfSxfZ2V0U3R5bGVWYWw6ZnVuY3Rpb24o
RixJLEgpe3ZhciBKPVlBSE9PLnV0aWwuRG9tLmdldFN0eWxlKEYsSSk7CnZhciBHPUg/cGFyc2VG
bG9hdChKKTpwYXJzZUludChKLDEwKTsKaWYoST09ImhlaWdodCImJmlzTmFOKEcpKXtHPUYub2Zm
c2V0SGVpZ2h0Cn1lbHNle2lmKGlzTmFOKEcpKXtHPTAKfX1yZXR1cm4gRwp9LF9jYWxjdWxhdGVT
aXplOmZ1bmN0aW9uKEIpe0IuY2FsY3VsYXRlU2l6ZSgpOwpCLnNob3coKQp9LF9yZW1vdmVDaGls
ZHJlbkZyb21Ob2RlOmZ1bmN0aW9uKEQpe2lmKCF0aGlzLl9pc1ZhbGlkT2JqKEQpKXtyZXR1cm4g
Cn12YXIgQz1ELmNoaWxkTm9kZXMubGVuZ3RoOwp3aGlsZShELmhhc0NoaWxkTm9kZXMoKSl7RC5y
ZW1vdmVDaGlsZChELmZpcnN0Q2hpbGQpCn19LF9wcmVidWlsZExpRWxlbTpmdW5jdGlvbihDKXtp
ZihDPDEpe3JldHVybiAKfXZhciBEPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpIik7CkQuaWQ9
dGhpcy5fY2Fyb3VzZWxFbGVtSUQrIi1pdGVtLSIrQzsKRC5wbGFjZWhvbGRlcj10cnVlOwp0aGlz
LmNhcm91c2VsTGlzdC5hcHBlbmRDaGlsZChEKTsKdGhpcy5fbGFzdFByZWJ1aWx0SWR4PShDPnRo
aXMuX2xhc3RQcmVidWlsdElkeCk/Qzp0aGlzLl9sYXN0UHJlYnVpbHRJZHgKfSxfY3JlYXRlSXRl
bTpmdW5jdGlvbihGLEQpe2lmKEY8MSl7cmV0dXJuIAp9dmFyIEU9ZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgibGkiKTsKRS5pZD10aGlzLl9jYXJvdXNlbEVsZW1JRCsiLWl0ZW0tIitGOwppZih0eXBl
b2YgKEQpPT09InN0cmluZyIpe0UuaW5uZXJIVE1MPUQKfWVsc2V7RS5hcHBlbmRDaGlsZChEKQp9
cmV0dXJuIEUKfSxfaW5zZXJ0QWZ0ZXJJdGVtOmZ1bmN0aW9uKEQsQyl7cmV0dXJuIHRoaXMuX2lu
c2VydEJlZm9yZUl0ZW0oRCsxLEMpCn0sX2luc2VydEJlZm9yZUl0ZW06ZnVuY3Rpb24oSyxJKXt2
YXIgUD10aGlzLmdldEl0ZW0oSyk7CnZhciBOPXRoaXMuY2ZnLmdldFByb3BlcnR5KCJzaXplIik7
CmlmKE4hPXRoaXMuVU5CT1VOREVEX1NJWkUpe3RoaXMuY2ZnLnNldFByb3BlcnR5KCJzaXplIixO
KzEsdHJ1ZSkKfWZvcih2YXIgTz10aGlzLl9sYXN0UHJlYnVpbHRJZHg7Ck8+PUs7Ck8tLSl7dmFy
IEw9dGhpcy5nZXRJdGVtKE8pOwppZih0aGlzLl9pc1ZhbGlkT2JqKEwpKXtMLmlkPXRoaXMuX2Nh
cm91c2VsRWxlbUlEKyItaXRlbS0iKyhPKzEpCn19dmFyIEo9dGhpcy5fY3JlYXRlSXRlbShLLEkp
Owp2YXIgTT10aGlzLmNhcm91c2VsTGlzdC5pbnNlcnRCZWZvcmUoSixQKTsKdGhpcy5fbGFzdFBy
ZWJ1aWx0SWR4Kz0xOwpyZXR1cm4gSgp9LGluc2VydEFmdGVyRW5kOmZ1bmN0aW9uKEIpe3JldHVy
biB0aGlzLmluc2VydEFmdGVyKHRoaXMuY2ZnLmdldFByb3BlcnR5KCJzaXplIiksQikKfSxfcG9z
aXRpb246ZnVuY3Rpb24oRixKKXt2YXIgST10aGlzLl9wcmlvckZpcnN0VmlzaWJsZTsKaWYoRj5J
KXt2YXIgSD1GLUk7CnRoaXMuX3Njcm9sbE5leHRJbmMoSCxKKQp9ZWxzZXt2YXIgRz1JLUY7CnRo
aXMuX3Njcm9sbFByZXZJbmMoRyxKKQp9fSxfc2Nyb2xsUHJldjpmdW5jdGlvbihELEMpe2lmKEQh
PT1udWxsKXtDLnN0b3BBdXRvUGxheSgpCn1pZihDLl9zY3JvbGxQcmV2QW5pbS5pc0FuaW1hdGVk
KCkpe3JldHVybiBmYWxzZQp9Qy5fc2Nyb2xsUHJldkluYyhDLmNmZy5nZXRQcm9wZXJ0eSgic2Ny
b2xsSW5jIiksKEMuY2ZnLmdldFByb3BlcnR5KCJhbmltYXRpb25TcGVlZCIpIT09MCkpCn0sX3Nj
cm9sbE5leHQ6ZnVuY3Rpb24oRCxDKXtpZihEIT09bnVsbCl7Qy5zdG9wQXV0b1BsYXkoKQp9aWYo
Qy5fc2Nyb2xsTmV4dEFuaW0uaXNBbmltYXRlZCgpKXtyZXR1cm4gZmFsc2UKfUMuX3Njcm9sbE5l
eHRJbmMoQy5jZmcuZ2V0UHJvcGVydHkoInNjcm9sbEluYyIpLChDLmNmZy5nZXRQcm9wZXJ0eSgi
YW5pbWF0aW9uU3BlZWQiKSE9PTApKQp9LF9oYW5kbGVBbmltYXRpb25Db21wbGV0ZTpmdW5jdGlv
bihJLEosRil7dmFyIEc9RlswXTsKdmFyIEg9RlsxXTsKRy5fYW5pbWF0aW9uQ29tcGxldGVFdnQu
ZmlyZShIKQp9LF9hcmVBbGxJdGVtc0xvYWRlZDpmdW5jdGlvbihILEkpe3ZhciBGPXRydWU7CmZv
cih2YXIgSj1IOwpKPD1JOwpKKyspe3ZhciBHPXRoaXMuZ2V0SXRlbShKKTsKaWYoIXRoaXMuX2lz
VmFsaWRPYmooRykpe3RoaXMuX3ByZWJ1aWxkTGlFbGVtKEopOwpGPWZhbHNlCn1lbHNle2lmKHRo
aXMuX2lzVmFsaWRPYmooRy5wbGFjZWhvbGRlcikpe0Y9ZmFsc2UKfX19cmV0dXJuIEYKfSxfcHJl
YnVpbGRJdGVtczpmdW5jdGlvbihHLEgpe2Zvcih2YXIgRT1HOwpFPD1IOwpFKyspe3ZhciBGPXRo
aXMuZ2V0SXRlbShFKTsKaWYoIXRoaXMuX2lzVmFsaWRPYmooRikpe3RoaXMuX3ByZWJ1aWxkTGlF
bGVtKEUpCn19fSxfaXNFeHRyYVJldmVhbGVkOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuY2ZnLmdl
dFByb3BlcnR5KCJyZXZlYWxBbW91bnQiKT4wKQp9LF9zY3JvbGxOZXh0SW5jOmZ1bmN0aW9uKGQs
WSl7dmFyIFU9dGhpcy5jZmcuZ2V0UHJvcGVydHkoIm51bVZpc2libGUiKTsKdmFyIFc9dGhpcy5f
cHJpb3JGaXJzdFZpc2libGU7CnZhciBaPXRoaXMuX3ByaW9yTGFzdFZpc2libGU7CnZhciBUPXRo
aXMuY2ZnLmdldFByb3BlcnR5KCJzaXplIik7CnZhciBTPXRoaXMuX2NhbGN1bGF0ZUFsbG93YWJs
ZVNjcm9sbEV4dGVudCgpOwppZih0aGlzLmNmZy5nZXRQcm9wZXJ0eSgid3JhcCIpJiZaPT1TLmVu
ZCl7dGhpcy5zY3JvbGxUbyhTLnN0YXJ0KTsKcmV0dXJuIAp9dmFyIFg9VytkOwp2YXIgYj1YK1Ut
MTsKaWYoYj5TLmVuZCl7Yj1TLmVuZDsKWD1iLVUrMQp9ZD1YLVc7CnRoaXMuY2ZnLnNldFByb3Bl
cnR5KCJmaXJzdFZpc2libGUiLFgsdHJ1ZSk7CmlmKGQ+MCl7aWYodGhpcy5faXNWYWxpZE9iaih0
aGlzLmNmZy5nZXRQcm9wZXJ0eSgibG9hZE5leHRIYW5kbGVyIikpKXt2YXIgUD10aGlzLl9jYWxj
dWxhdGVWaXNpYmxlRXh0ZW50KFgsYik7CnZhciBjPShaKzEpPFAuc3RhcnQ/KForMSk6UC5zdGFy
dDsKdmFyIGE9dGhpcy5fYXJlQWxsSXRlbXNMb2FkZWQoYyxQLmVuZCk7CnRoaXMuX2xvYWROZXh0
SGFuZGxlckV2dC5maXJlKFAuc3RhcnQsUC5lbmQsYSkKfWlmKFkpe3ZhciBWPXtwb2ludHM6e2J5
OlstdGhpcy5zY3JvbGxBbW91bnRQZXJJbmMqZCwwXX19OwppZih0aGlzLmlzVmVydGljYWwoKSl7
Vj17cG9pbnRzOntieTpbMCwtdGhpcy5zY3JvbGxBbW91bnRQZXJJbmMqZF19fQp9dGhpcy5fc2Ny
b2xsTmV4dEFuaW09bmV3IFlBSE9PLnV0aWwuTW90aW9uKHRoaXMuY2Fyb3VzZWxMaXN0LFYsdGhp
cy5jZmcuZ2V0UHJvcGVydHkoImFuaW1hdGlvblNwZWVkIiksdGhpcy5jZmcuZ2V0UHJvcGVydHko
ImFuaW1hdGlvbk1ldGhvZCIpKTsKaWYodGhpcy5jZmcuZ2V0UHJvcGVydHkoImFuaW1hdGlvbkNv
bXBsZXRlSGFuZGxlciIpKXt0aGlzLl9zY3JvbGxOZXh0QW5pbS5vbkNvbXBsZXRlLnN1YnNjcmli
ZSh0aGlzLl9oYW5kbGVBbmltYXRpb25Db21wbGV0ZSxbdGhpcywibmV4dCJdKQp9dGhpcy5fc2Ny
b2xsTmV4dEFuaW0uYW5pbWF0ZSgpCn1lbHNle2lmKHRoaXMuaXNWZXJ0aWNhbCgpKXt2YXIgUj1Z
QUhPTy51dGlsLkRvbS5nZXRZKHRoaXMuY2Fyb3VzZWxMaXN0KTsKWUFIT08udXRpbC5Eb20uc2V0
WSh0aGlzLmNhcm91c2VsTGlzdCxSLXRoaXMuc2Nyb2xsQW1vdW50UGVySW5jKmQpCn1lbHNle3Zh
ciBRPVlBSE9PLnV0aWwuRG9tLmdldFgodGhpcy5jYXJvdXNlbExpc3QpOwpZQUhPTy51dGlsLkRv
bS5zZXRYKHRoaXMuY2Fyb3VzZWxMaXN0LFEtdGhpcy5zY3JvbGxBbW91bnRQZXJJbmMqZCkKfX19
dGhpcy5fcHJpb3JGaXJzdFZpc2libGU9WDsKdGhpcy5fcHJpb3JMYXN0VmlzaWJsZT1iOwp0aGlz
Ll9lbmFibGVEaXNhYmxlQ29udHJvbHMoKTsKcmV0dXJuIGZhbHNlCn0sX3Njcm9sbFByZXZJbmM6
ZnVuY3Rpb24oYixZKXt2YXIgVT10aGlzLmNmZy5nZXRQcm9wZXJ0eSgibnVtVmlzaWJsZSIpOwp2
YXIgVz10aGlzLl9wcmlvckZpcnN0VmlzaWJsZTsKdmFyIFo9dGhpcy5fcHJpb3JMYXN0VmlzaWJs
ZTsKdmFyIFQ9dGhpcy5jZmcuZ2V0UHJvcGVydHkoInNpemUiKTsKdmFyIFg9Vy1iOwp2YXIgUz10
aGlzLl9jYWxjdWxhdGVBbGxvd2FibGVTY3JvbGxFeHRlbnQoKTsKWD0oWDxTLnN0YXJ0KT9TLnN0
YXJ0Olg7CnZhciBjPVgrVS0xOwppZihjPlMuZW5kKXtjPVMuZW5kOwpYPWMtVSsxCn1iPVctWDsK
dGhpcy5jZmcuc2V0UHJvcGVydHkoImZpcnN0VmlzaWJsZSIsWCx0cnVlKTsKaWYoYj4wKXtpZih0
aGlzLl9pc1ZhbGlkT2JqKHRoaXMuY2ZnLmdldFByb3BlcnR5KCJsb2FkUHJldkhhbmRsZXIiKSkp
e3ZhciBkPXRoaXMuX2NhbGN1bGF0ZVZpc2libGVFeHRlbnQoWCxjKTsKdmFyIFE9KFctMSk+ZC5l
bmQ/KFctMSk6ZC5lbmQ7CnZhciBhPXRoaXMuX2FyZUFsbEl0ZW1zTG9hZGVkKGQuc3RhcnQsUSk7
CnRoaXMuX2xvYWRQcmV2SGFuZGxlckV2dC5maXJlKGQuc3RhcnQsZC5lbmQsYSkKfWlmKFkpe3Zh
ciBWPXtwb2ludHM6e2J5Olt0aGlzLnNjcm9sbEFtb3VudFBlckluYypiLDBdfX07CmlmKHRoaXMu
aXNWZXJ0aWNhbCgpKXtWPXtwb2ludHM6e2J5OlswLHRoaXMuc2Nyb2xsQW1vdW50UGVySW5jKmJd
fX0KfXRoaXMuX3Njcm9sbFByZXZBbmltPW5ldyBZQUhPTy51dGlsLk1vdGlvbih0aGlzLmNhcm91
c2VsTGlzdCxWLHRoaXMuY2ZnLmdldFByb3BlcnR5KCJhbmltYXRpb25TcGVlZCIpLHRoaXMuY2Zn
LmdldFByb3BlcnR5KCJhbmltYXRpb25NZXRob2QiKSk7CmlmKHRoaXMuY2ZnLmdldFByb3BlcnR5
KCJhbmltYXRpb25Db21wbGV0ZUhhbmRsZXIiKSl7dGhpcy5fc2Nyb2xsUHJldkFuaW0ub25Db21w
bGV0ZS5zdWJzY3JpYmUodGhpcy5faGFuZGxlQW5pbWF0aW9uQ29tcGxldGUsW3RoaXMsInByZXYi
XSkKfXRoaXMuX3Njcm9sbFByZXZBbmltLmFuaW1hdGUoKQp9ZWxzZXtpZih0aGlzLmlzVmVydGlj
YWwoKSl7dmFyIFI9WUFIT08udXRpbC5Eb20uZ2V0WSh0aGlzLmNhcm91c2VsTGlzdCk7CllBSE9P
LnV0aWwuRG9tLnNldFkodGhpcy5jYXJvdXNlbExpc3QsUit0aGlzLnNjcm9sbEFtb3VudFBlcklu
YypiKQp9ZWxzZXt2YXIgUD1ZQUhPTy51dGlsLkRvbS5nZXRYKHRoaXMuY2Fyb3VzZWxMaXN0KTsK
WUFIT08udXRpbC5Eb20uc2V0WCh0aGlzLmNhcm91c2VsTGlzdCxQK3RoaXMuc2Nyb2xsQW1vdW50
UGVySW5jKmIpCn19fXRoaXMuX3ByaW9yRmlyc3RWaXNpYmxlPVg7CnRoaXMuX3ByaW9yTGFzdFZp
c2libGU9YzsKdGhpcy5fZW5hYmxlRGlzYWJsZUNvbnRyb2xzKCk7CnJldHVybiBmYWxzZQp9LF9l
bmFibGVEaXNhYmxlQ29udHJvbHM6ZnVuY3Rpb24oKXt2YXIgRT10aGlzLmNmZy5nZXRQcm9wZXJ0
eSgiZmlyc3RWaXNpYmxlIik7CnZhciBEPXRoaXMuZ2V0TGFzdFZpc2libGUoKTsKdmFyIEY9dGhp
cy5fY2FsY3VsYXRlQWxsb3dhYmxlU2Nyb2xsRXh0ZW50KCk7CmlmKHRoaXMuX3ByZXZFbmFibGVk
KXtpZihFPT09Ri5zdGFydCl7dGhpcy5fZGlzYWJsZVByZXYoKQp9fWlmKHRoaXMuX3ByZXZFbmFi
bGVkPT09ZmFsc2Upe2lmKEU+Ri5zdGFydCl7dGhpcy5fZW5hYmxlUHJldigpCn19aWYodGhpcy5f
bmV4dEVuYWJsZWQpe2lmKEQ9PT1GLmVuZCl7dGhpcy5fZGlzYWJsZU5leHQoKQp9fWlmKHRoaXMu
X25leHRFbmFibGVkPT09ZmFsc2Upe2lmKEQ8Ri5lbmQpe3RoaXMuX2VuYWJsZU5leHQoKQp9fX0s
X2xvYWRJbml0aWFsOmZ1bmN0aW9uKCl7dmFyIEU9dGhpcy5jZmcuZ2V0UHJvcGVydHkoImZpcnN0
VmlzaWJsZSIpOwp0aGlzLl9wcmlvckxhc3RWaXNpYmxlPXRoaXMuZ2V0TGFzdFZpc2libGUoKTsK
aWYodGhpcy5fbG9hZEluaXRIYW5kbGVyRXZ0KXt2YXIgRD10aGlzLl9jYWxjdWxhdGVWaXNpYmxl
RXh0ZW50KEUsdGhpcy5fcHJpb3JMYXN0VmlzaWJsZSk7CnZhciBGPXRoaXMuX2FyZUFsbEl0ZW1z
TG9hZGVkKDEsRC5lbmQpOwp0aGlzLl9sb2FkSW5pdEhhbmRsZXJFdnQuZmlyZShELnN0YXJ0LEQu
ZW5kLEYpCn1pZih0aGlzLmNmZy5nZXRQcm9wZXJ0eSgiYXV0b1BsYXkiKSE9PTApe3RoaXMuX2F1
dG9QbGF5VGltZXI9dGhpcy5zdGFydEF1dG9QbGF5KCkKfXRoaXMuX2VuYWJsZURpc2FibGVDb250
cm9scygpCn0sX2NhbGN1bGF0ZUFsbG93YWJsZVNjcm9sbEV4dGVudDpmdW5jdGlvbigpe3ZhciBG
PXRoaXMuY2ZnLmdldFByb3BlcnR5KCJzY3JvbGxCZWZvcmVBbW91bnQiKTsKdmFyIEU9dGhpcy5j
ZmcuZ2V0UHJvcGVydHkoInNjcm9sbEFmdGVyQW1vdW50Iik7CnZhciBIPXRoaXMuY2ZnLmdldFBy
b3BlcnR5KCJzaXplIik7CnZhciBHPXtzdGFydDoxLUYsZW5kOkgrRX07CnJldHVybiBHCn0sX2Nh
bGN1bGF0ZVZpc2libGVFeHRlbnQ6ZnVuY3Rpb24oRixFKXtpZighRil7Rj10aGlzLmNmZy5nZXRQ
cm9wZXJ0eSgiZmlyc3RWaXNpYmxlIik7CkU9dGhpcy5nZXRMYXN0VmlzaWJsZSgpCn12YXIgSD10
aGlzLmNmZy5nZXRQcm9wZXJ0eSgic2l6ZSIpOwpGPUY8MT8xOkY7CkU9RT5IP0g6RTsKdmFyIEc9
e3N0YXJ0OkYsZW5kOkV9Owp0aGlzLl9maXJzdEl0ZW1SZXZlYWxlZD0tMTsKdGhpcy5fbGFzdEl0
ZW1SZXZlYWxlZD0tMTsKaWYodGhpcy5faXNFeHRyYVJldmVhbGVkKCkpe2lmKEY+MSl7dGhpcy5f
Zmlyc3RJdGVtUmV2ZWFsZWQ9Ri0xOwpHLnN0YXJ0PXRoaXMuX2ZpcnN0SXRlbVJldmVhbGVkCn1p
ZihFPEgpe3RoaXMuX2xhc3RJdGVtUmV2ZWFsZWQ9RSsxOwpHLmVuZD10aGlzLl9sYXN0SXRlbVJl
dmVhbGVkCn19cmV0dXJuIEcKfSxfZGlzYWJsZVByZXY6ZnVuY3Rpb24oKXt0aGlzLl9wcmV2RW5h
YmxlZD1mYWxzZTsKaWYodGhpcy5fcHJldkJ1dHRvblN0YXRlSGFuZGxlckV2dCl7dGhpcy5fcHJl
dkJ1dHRvblN0YXRlSGFuZGxlckV2dC5maXJlKGZhbHNlLHRoaXMuX2Nhcm91c2VsUHJldikKfWlm
KHRoaXMuX2lzVmFsaWRPYmoodGhpcy5fY2Fyb3VzZWxQcmV2KSl7WUFIT08udXRpbC5FdmVudC5y
ZW1vdmVMaXN0ZW5lcih0aGlzLl9jYXJvdXNlbFByZXYsImNsaWNrIix0aGlzLl9zY3JvbGxQcmV2
KQp9fSxfZW5hYmxlUHJldjpmdW5jdGlvbigpe3RoaXMuX3ByZXZFbmFibGVkPXRydWU7CmlmKHRo
aXMuX3ByZXZCdXR0b25TdGF0ZUhhbmRsZXJFdnQpe3RoaXMuX3ByZXZCdXR0b25TdGF0ZUhhbmRs
ZXJFdnQuZmlyZSh0cnVlLHRoaXMuX2Nhcm91c2VsUHJldikKfWlmKHRoaXMuX2lzVmFsaWRPYmoo
dGhpcy5fY2Fyb3VzZWxQcmV2KSl7WUFIT08udXRpbC5FdmVudC5hZGRMaXN0ZW5lcih0aGlzLl9j
YXJvdXNlbFByZXYsImNsaWNrIix0aGlzLl9zY3JvbGxQcmV2LHRoaXMpCn19LF9kaXNhYmxlTmV4
dDpmdW5jdGlvbigpe2lmKHRoaXMuY2ZnLmdldFByb3BlcnR5KCJ3cmFwIikpe3JldHVybiAKfXRo
aXMuX25leHRFbmFibGVkPWZhbHNlOwppZih0aGlzLl9pc1ZhbGlkT2JqKHRoaXMuX25leHRCdXR0
b25TdGF0ZUhhbmRsZXJFdnQpKXt0aGlzLl9uZXh0QnV0dG9uU3RhdGVIYW5kbGVyRXZ0LmZpcmUo
ZmFsc2UsdGhpcy5fY2Fyb3VzZWxOZXh0KQp9aWYodGhpcy5faXNWYWxpZE9iaih0aGlzLl9jYXJv
dXNlbE5leHQpKXtZQUhPTy51dGlsLkV2ZW50LnJlbW92ZUxpc3RlbmVyKHRoaXMuX2Nhcm91c2Vs
TmV4dCwiY2xpY2siLHRoaXMuX3Njcm9sbE5leHQpCn19LF9lbmFibGVOZXh0OmZ1bmN0aW9uKCl7
dGhpcy5fbmV4dEVuYWJsZWQ9dHJ1ZTsKaWYodGhpcy5faXNWYWxpZE9iaih0aGlzLl9uZXh0QnV0
dG9uU3RhdGVIYW5kbGVyRXZ0KSl7dGhpcy5fbmV4dEJ1dHRvblN0YXRlSGFuZGxlckV2dC5maXJl
KHRydWUsdGhpcy5fY2Fyb3VzZWxOZXh0KQp9aWYodGhpcy5faXNWYWxpZE9iaih0aGlzLl9jYXJv
dXNlbE5leHQpKXtZQUhPTy51dGlsLkV2ZW50LmFkZExpc3RlbmVyKHRoaXMuX2Nhcm91c2VsTmV4
dCwiY2xpY2siLHRoaXMuX3Njcm9sbE5leHQsdGhpcykKfX0sX2lzVmFsaWRPYmo6ZnVuY3Rpb24o
Qil7aWYobnVsbD09Qil7cmV0dXJuIGZhbHNlCn1pZigidW5kZWZpbmVkIj09dHlwZW9mIChCKSl7
cmV0dXJuIGZhbHNlCn1yZXR1cm4gdHJ1ZQp9fTsKPC9zY3JpcHQ+CjxzY3JpcHQ+CmZ1bmN0aW9u
IEZlYXR1cmVkSG9tZUNhcm91c2VsKEIsQyxBLEQpe2lmKEIpe3RoaXMubWV0cm89QjsKdGhpcy5z
aXplPUM7CnRoaXMuc29ydEJ5UHJpY2U9QTsKdGhpcy5pc0xvZ2dlZEluPUQ7CllBSE9PLnV0aWwu
RXZlbnQuYWRkTGlzdGVuZXIod2luZG93LCJsb2FkIix0aGlzLmluaXQsdGhpcyx0cnVlKQp9ZWxz
ZXtZQUhPTy51dGlsLkV2ZW50LmFkZExpc3RlbmVyKHdpbmRvdywibG9hZCIsdGhpcy5pbml0QXN5
bmMsdGhpcyx0cnVlKQp9fUZlYXR1cmVkSG9tZUNhcm91c2VsLnByb3RvdHlwZS5sb2FkSW5pdGlh
bEl0ZW1zPWZ1bmN0aW9uKEIsQSl7dmFyIEQ9QVswXTsKdmFyIEM9QVsxXTsKdGhpcy5tYWtlUmVx
dWVzdChELEMtRCsxKQp9OwpGZWF0dXJlZEhvbWVDYXJvdXNlbC5wcm90b3R5cGUubG9hZE5leHRJ
dGVtcz1mdW5jdGlvbihDLEIpe3ZhciBGPUJbMF07CnZhciBEPUJbMV07CnZhciBFPUJbMl07CnZh
ciBBPShELUYrMSk7CmlmKEQ+dGhpcy5zaXplKXtBPSh0aGlzLnNpemUtRikKfWlmKCFFKXt0aGlz
Lm1ha2VSZXF1ZXN0KEYsQSkKfX07CkZlYXR1cmVkSG9tZUNhcm91c2VsLnByb3RvdHlwZS5sb2Fk
UHJldkl0ZW1zPWZ1bmN0aW9uKEMsQil7dmFyIEY9QlswXTsKdmFyIEQ9QlsxXTsKdmFyIEU9Qlsy
XTsKdmFyIEE9KEQtRisxKTsKaWYoRD50aGlzLnNpemUpe0E9KHRoaXMuc2l6ZS1GKQp9aWYoIUUp
e3RoaXMubWFrZVJlcXVlc3QoRixBKQp9fTsKRmVhdHVyZWRIb21lQ2Fyb3VzZWwucHJvdG90eXBl
LmhhbmRsZVByZXZCdXR0b25TdGF0ZT1mdW5jdGlvbihDLEEpe3ZhciBCPUFbMF07CnZhciBEPUFb
MV07CmlmKEIpe0Quc3JjPSIvaW1hZ2VzL2dsb2JhbC9uYXZfbGVmdF9idXR0b24uZ2lmIgp9ZWxz
ZXtELnNyYz0iL2ltYWdlcy9nbG9iYWwvbmF2X2xlZnRfYnV0dG9uX29mZi5naWYiCn19OwpGZWF0
dXJlZEhvbWVDYXJvdXNlbC5wcm90b3R5cGUuaGFuZGxlTmV4dEJ1dHRvblN0YXRlPWZ1bmN0aW9u
KEQsQil7dmFyIEM9QlswXTsKdmFyIEE9QlsxXTsKaWYoQyl7QS5zcmM9Ii9pbWFnZXMvZ2xvYmFs
L25hdl9yaWdodF9idXR0b24uZ2lmIgp9ZWxzZXtBLnNyYz0iL2ltYWdlcy9nbG9iYWwvbmF2X3Jp
Z2h0X2J1dHRvbl9vZmYuZ2lmIgp9fTsKRmVhdHVyZWRIb21lQ2Fyb3VzZWwucHJvdG90eXBlLnNo
b3dCdXR0b25zPWZ1bmN0aW9uKEIsQSl7WUFIT08udXRpbC5Eb20uc2V0U3R5bGUoIm5leHQtYXJy
b3ciLCJ2aXNpYmlsaXR5IiwidmlzaWJsZSIpOwpZQUhPTy51dGlsLkRvbS5zZXRTdHlsZSgicHJl
di1hcnJvdyIsInZpc2liaWxpdHkiLCJ2aXNpYmxlIikKfTsKRmVhdHVyZWRIb21lQ2Fyb3VzZWwu
cHJvdG90eXBlLmNyZWF0ZUFkYXB0ZXI9ZnVuY3Rpb24oQixBKXtyZXR1cm4gZnVuY3Rpb24oKXtC
LmFwcGx5KEEsYXJndW1lbnRzKQp9Cn07CkZlYXR1cmVkSG9tZUNhcm91c2VsLnByb3RvdHlwZS5p
bml0PWZ1bmN0aW9uKCl7dGhpcy5jYXJvdXNlbD1uZXcgWUFIT08uZXh0ZW5zaW9uLkNhcm91c2Vs
KCJteWNhcm91c2VsIix7c2l6ZTp0aGlzLnNpemUtMSxudW1WaXNpYmxlOjMsYW5pbWF0aW9uU3Bl
ZWQ6MSxzY3JvbGxJbmM6MyxuYXZNYXJnaW46MTUsbG9hZEluaXRIYW5kbGVyOnRoaXMuY3JlYXRl
QWRhcHRlcih0aGlzLmluaXRMb2FkLHRoaXMpLHByZXZFbGVtZW50OiJwcmV2LWFycm93IixuZXh0
RWxlbWVudDoibmV4dC1hcnJvdyIsbG9hZE5leHRIYW5kbGVyOnRoaXMuY3JlYXRlQWRhcHRlcih0
aGlzLmxvYWROZXh0SXRlbXMsdGhpcyksbG9hZFByZXZIYW5kbGVyOnRoaXMuY3JlYXRlQWRhcHRl
cih0aGlzLmxvYWRQcmV2SXRlbXMsdGhpcykscHJldkJ1dHRvblN0YXRlSGFuZGxlcjp0aGlzLmNy
ZWF0ZUFkYXB0ZXIodGhpcy5oYW5kbGVQcmV2QnV0dG9uU3RhdGUsdGhpcyksbmV4dEJ1dHRvblN0
YXRlSGFuZGxlcjp0aGlzLmNyZWF0ZUFkYXB0ZXIodGhpcy5oYW5kbGVOZXh0QnV0dG9uU3RhdGUs
dGhpcyl9KTsKaWYodGhpcy5zaXplPD0zKXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibmV4dC1h
cnJvdyIpLnNyYz0iL2ltYWdlcy9nbG9iYWwvbmF2X3JpZ2h0X2J1dHRvbl9vZmYuZ2lmIgp9fTsK
RmVhdHVyZWRIb21lQ2Fyb3VzZWwucHJvdG90eXBlLmluaXRBc3luYz1mdW5jdGlvbigpe3ZhciBC
PXtzdWNjZXNzOnRoaXMuaW5pdEFzeW5jSGFuZGxlcixmYWlsdXJlOnRoaXMuaW5pdEFzeW5jSGFu
ZGxlcixzY29wZTp0aGlzfTsKdmFyIEE9Ii9idXlfYV9ob21lL2xvZ2dlZF9pbi9zZWFyY2gvbXNl
cnZlci9maGMuanNwP3JhbmQ9IitNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMTAwMSk7CllBSE9P
LnV0aWwuQ29ubmVjdC5hc3luY1JlcXVlc3QoIkdFVCIsQSxCKQp9OwpGZWF0dXJlZEhvbWVDYXJv
dXNlbC5wcm90b3R5cGUuaW5pdEFzeW5jSGFuZGxlcj1mdW5jdGlvbihCKXt2YXIgQz1CLnJlc3Bv
bnNlVGV4dDsKaWYoQyE9bnVsbCl7dmFyIEE9Qy5zcGxpdCgiXHQiKTsKaWYoQSE9bnVsbCYmQS5s
ZW5ndGg9PTQpe3RoaXMubWV0cm89QVswXTsKdGhpcy5zaXplPUFbMV07CnRoaXMuc29ydEJ5UHJp
Y2U9QVsyXT09IjEiP3RydWU6ZmFsc2U7CnRoaXMuaXNMb2dnZWRJbj1BWzNdPT0iMSI/dHJ1ZTpm
YWxzZQp9fXRoaXMuaW5pdCgpCn07CkZlYXR1cmVkSG9tZUNhcm91c2VsLnByb3RvdHlwZS5pbml0
TG9hZD1mdW5jdGlvbihCLEEpe3ZhciBEPUFbMF07CnZhciBDPUFbMV07CnRoaXMubWFrZVJlcXVl
c3QoRCwoQy1EKzEpKQp9OwpGZWF0dXJlZEhvbWVDYXJvdXNlbC5wcm90b3R5cGUuc3VjY2Vzcz1m
dW5jdGlvbihjYWxsYmFja1Jlc3BvbnNlKXt2YXIgc3RhcnQ9Y2FsbGJhY2tSZXNwb25zZS5hcmd1
bWVudFswXTsKdmFyIG51bVJlc3VsdHM9Y2FsbGJhY2tSZXNwb25zZS5hcmd1bWVudFsxXTsKaWYo
Y2FsbGJhY2tSZXNwb25zZS5yZXNwb25zZVRleHQhPT11bmRlZmluZWQpe3ZhciBGSExpc3Q9ZXZh
bCgiKCIrY2FsbGJhY2tSZXNwb25zZS5yZXNwb25zZVRleHQrIikiKTsKZm9yKHZhciBpPTA7Cmk8
RkhMaXN0Lmxlbmd0aDsKaSsrKXt2YXIgcmVzdWx0PUZITGlzdFtpXTsKdGhpcy5jYXJvdXNlbC5h
ZGRJdGVtKHN0YXJ0K2ksdGhpcy5mbXRGSElubmVySFRNTChyZXN1bHQpKQp9dGhpcy5zaG93QnV0
dG9ucygpCn19OwpGZWF0dXJlZEhvbWVDYXJvdXNlbC5wcm90b3R5cGUuZm10RkhJbm5lckhUTUw9
ZnVuY3Rpb24oQSl7dmFyIEI9QS51cmw7CmlmKHRoaXMuaXNMb2dnZWRJbil7Qj1BLnVybAp9ZWxz
ZXtCPUEucHJlbG9naW5fdXJsCn12YXIgQz0nPHRhYmxlIHdpZHRoPSIyNjUiPjx0cj48dGQgdmFs
aWduPSJ0b3AiIGNsYXNzPSJjYXJvdXNlbGl0ZW1sZWZ0Ij48YSBocmVmPSInK0IrJyI+PGltZyBz
cmM9IicrQS5pbWFnZSsnIiB3aWR0aD0iMTAwIiBoZWlnaHQ9Ijc1Ij48L2E+PGJyPjxhIGhyZWY9
IicrQisnIj48aW1nIHNyYz0iL2ltYWdlcy9idXlfYV9ob21lL3NlYXJjaC9tdWx0X3Bob3Rvc18y
M3gxNy5naWYiIHdpZHRoPSIyMyIgaGVpZ2h0PSIxNyIgdnNwYWNlPSIyIiBhbHQ9Ikxpc3Rpbmcg
aGFzIG11bHRpcGxlIHBob3RvcyIgdGl0bGU9Ikxpc3RpbmcgaGFzIG11bHRpcGxlIHBob3RvcyI+
PC9hPjwvdGQ+PHRkIHZhbGlnbj0idG9wIiBjbGFzcz0iY2Fyb3VzZWxpdGVtbGVmdCI+PGEgaHJl
Zj0iJytCKyciIGNsYXNzPSJjYXJvdXNlbGl0ZW1saW5rIj4nK0EuYWRkcmVzcysiPGJyPiIrQS5j
aXR5KyIsICIrQS5zdGF0ZSsiICIrQS56aXArJzwvYT48YnI+PHNwYW4gY2xhc3M9ImNhcm91c2Vs
aXRlbXByaWNlIj4nK0EucHJpY2UrIjwvc3Bhbj48YnI+PGI+QmVkcy9CYXRoczo8L2I+ICIrQS5i
ZHIrIi8iK0EuYmF0aCsiPGJyPjxiPlNxLkZ0Ljo8L2I+ICIrQS5zcWZ0KyI8YnI+TG90IFNpemU6
ICIrQS5sb3RzeisiPGJyPiIrKHRoaXMubWV0cm89PSJwaGlsYWRlbHBoaWEiPygiWWVhciBCdWls
dDogIitBLnlyYmx0KyI8YnI+Iik6IiIpOwppZighKHRoaXMubWV0cm89PSJkYWxsYXMiKSYmISh0
aGlzLm1ldHJvPT0ibm9yZm9sayIpKXtDKz0iIitBLmRvbSsiPGJyPiIKfUMrPSI8L3RkPjwvdHI+
PC90YWJsZT4iOwpyZXR1cm4gQwp9OwpGZWF0dXJlZEhvbWVDYXJvdXNlbC5wcm90b3R5cGUuZmFp
bHVyZT1mdW5jdGlvbihCKXt2YXIgQT1CLnN0YXR1cysiICIrQi5zdGF0dXNUZXh0Cn07CkZlYXR1
cmVkSG9tZUNhcm91c2VsLlBBVEg9Ii9idXlfYV9ob21lL2xvZ2dlZF9pbi9zZWFyY2gvbXNlcnZl
ci9nZXRGSC5qc3AiOwpGZWF0dXJlZEhvbWVDYXJvdXNlbC5wcm90b3R5cGUubWFrZVJlcXVlc3Q9
ZnVuY3Rpb24oRSxBKXt2YXIgQz0iP21ldHJvPSIrdGhpcy5tZXRybysiJnN0YXJ0PSIrRSsiJnJl
c3VsdHM9IitBKyImc29ydF9ieV9wcmljZT0iK3RoaXMuc29ydEJ5UHJpY2U7CnZhciBEPXtzdWNj
ZXNzOnRoaXMuc3VjY2VzcyxmYWlsdXJlOnRoaXMuZmFpbHVyZSxzY29wZTp0aGlzLGFyZ3VtZW50
OltFLEFdfTsKdmFyIEI9RmVhdHVyZWRIb21lQ2Fyb3VzZWwuUEFUSCtDOwpZQUhPTy51dGlsLkNv
bm5lY3QuYXN5bmNSZXF1ZXN0KCJHRVQiLEIsRCkKfTsKPC9zY3JpcHQ+CgoKPHNjcmlwdCB0eXBl
PSJ0ZXh0L2phdmFzY3JpcHQiPgogIG5ldyBGZWF0dXJlZEhvbWVDYXJvdXNlbCgpOwo8L3Njcmlw
dD4KPC9ib2R5Pgo8L2h0bWw+
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44762</attachid>
            <date>2009-12-13 14:00:03 -0800</date>
            <delta_ts>2009-12-13 14:52:12 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch_rev.txt</filename>
            <type>text/plain</type>
            <size>14989</size>
            <attacher name="Adele Peterson">adele</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAJKHJldmlzaW9uIDUyMDAwKQorKysgV2Vi
Q29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICsz
NCw2IEBACiAjaW5jbHVkZSAiUmVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5j
bHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2lu
Y2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+
CiAKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCkBAIC02ODYsNzEgKzY4NCw2IEBAIGlu
dCBDU1NQcmltaXRpdmVWYWx1ZTo6Z2V0SWRlbnQoKQogICAgIHJldHVybiBtX3ZhbHVlLmlkZW50
OwogfQogCi1zdGF0aWMgdm9pZCBhcHBlbmRDU1NEb3VibGUoVmVjdG9yPFVDaGFyPiYgdmVjdG9y
LCBkb3VibGUgdmFsdWUpCi17Ci0gICAgLy8gRnJvbSB0aGUgQ1NTIHNwZWNpZmljYXRpb24gc2Vj
dGlvbiB0aXRsZWQgIkludGVnZXJzIGFuZCByZWFsIG51bWJlcnMiLAotICAgIC8vIHJlYWwgbnVt
YmVycyBhcmUgb25seSBmb3JtYXR0ZWQgYXMgW3NpZ25dIFtkaWdpdHNdICIuIiBbZGlnaXRzXS4K
LSAgICAvLyBUaGlzIGRpZmZlcnMgZnJvbSBwcmludGYtc3R5bGUgZm9ybWF0dGluZyBpbiB0aGF0
IGV4cG9uZW50cyAoZS5nLiAxLjNlMDYpCi0gICAgLy8gYXJlIG5vdCBhbGxvd2VkLiAgU2luY2Ug
TmFOL2luZiBhcmUgYWxzbyBub3QgdmFsaWQgQ1NTIHZhbHVlcyB0aGlzCi0gICAgLy8gZnVuY3Rp
b24gZG9lc24ndCBoYW5kbGUgdGhlbS4KLQotICAgIC8vIEZvciBjb21wYXRpYmlsaXR5IHdpdGgg
d2hhdCB3YXMgcmV0dXJuZWQgYnkgb2xkZXIgdmVyc2lvbnMgb2YKLSAgICAvLyBXZWJLaXQsIHdl
IHRhcmdldCA2IGRpZ2l0cyBvZiBwcmVjaXNpb24uCi0gICAgY29uc3QgaW50IGRpZ2l0c0FmdGVy
RGVjaW1hbFBvaW50ID0gNjsKLSAgICBsb25nIGxvbmcgcm91bmRlZCA9IGxscm91bmQoZmFicyh2
YWx1ZSkgKiAxMDAwMDAwLjApOwotICAgIGlmIChyb3VuZGVkID09IDApIHsKLSAgICAgICAgdmVj
dG9yLmFwcGVuZCgnMCcpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY2hhciBidWZb
MjRdOwotICAgIGludCBsZW5ndGggPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWxsZCIs
IHJvdW5kZWQpOwotICAgIGludCBkZWNpbWFsUG9pbnQgPSBsZW5ndGggLSBkaWdpdHNBZnRlckRl
Y2ltYWxQb2ludDsKLQotICAgIC8vIFdlIGFyZSBtYXRjaGluZyBwcmludGYoIiVnIikncyBiZWhh
dmlvciBhbmQgbXVzdCB0cmltIHRyYWlsaW5nIHplcm9zLAotICAgIC8vIHJlZ2FyZGxlc3Mgb2Yg
d2hldGhlciB0aGV5J3JlIHNpZ25pZmljYW50LgotICAgIHdoaWxlIChsZW5ndGggPiAwICYmIGxl
bmd0aCA+IGRlY2ltYWxQb2ludCAmJiBidWZbbGVuZ3RoIC0gMV0gPT0gJzAnKQotICAgICAgICBs
ZW5ndGgtLTsKLQotICAgIC8vIFJlc2VydmUgYW4gZXN0aW1hdGUgb2Ygc3BhY2UgZm9yIHRoZSBu
dW1iZXIgb2YgZGlnaXRzIHdlIGFudGljaXBhdGUKLSAgICAvLyBhbG9uZyB3aXRoIGEgbWludXMg
c2lnbi9pbml0aWFsIHplcm8vZGVjaW1hbCBwb2ludC4KLSAgICB2ZWN0b3IucmVzZXJ2ZUNhcGFj
aXR5KHZlY3Rvci5zaXplKCkgKyAzICsgbGVuZ3RoKTsKLQotICAgIGlmICh2YWx1ZSA8IDApCi0g
ICAgICAgIHZlY3Rvci5hcHBlbmQoJy0nKTsKLQotICAgIGlmIChkZWNpbWFsUG9pbnQgPD0gMCkg
ewotICAgICAgICAvLyBPbmx5IGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludC4KLSAgICAg
ICAgdmVjdG9yLmFwcGVuZCgnMCcpOwotICAgICAgICB2ZWN0b3IuYXBwZW5kKCcuJyk7Ci0gICAg
ICAgIGZvciAoaW50IGkgPSBkZWNpbWFsUG9pbnQ7IGkgPCAwOyBpKyspCi0gICAgICAgICAgICB2
ZWN0b3IuYXBwZW5kKCcwJyk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBp
KyspCi0gICAgICAgICAgICB2ZWN0b3IuYXBwZW5kKGJ1ZltpXSk7Ci0gICAgfSBlbHNlIGlmIChs
ZW5ndGggPD0gZGVjaW1hbFBvaW50KSB7Ci0gICAgICAgIC8vIE9ubHkgZGlnaXRzIGJlZm9yZSB0
aGUgZGVjaW1hbCBwb2ludC4KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkr
KykKLSAgICAgICAgICAgIHZlY3Rvci5hcHBlbmQoYnVmW2ldKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICAvLyBEaWdpdHMgYmVmb3JlIGFuZCBhZnRlciB0aGUgZGVjaW1hbCBwb2ludC4KLSAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZWNpbWFsUG9pbnQ7IGkrKykKLSAgICAgICAgICAgIHZl
Y3Rvci5hcHBlbmQoYnVmW2ldKTsKLSAgICAgICAgdmVjdG9yLmFwcGVuZCgnLicpOwotICAgICAg
ICBmb3IgKGludCBpID0gZGVjaW1hbFBvaW50OyBpIDwgbGVuZ3RoOyBpKyspCi0gICAgICAgICAg
ICB2ZWN0b3IuYXBwZW5kKGJ1ZltpXSk7Ci0gICAgfQotfQotCi1zdGF0aWMgU3RyaW5nIGZvcm1h
dFdpdGhVbml0cyhkb3VibGUgdmFsdWUsIGNvbnN0IGNoYXIqIHVuaXRzKQotewotICAgIFZlY3Rv
cjxVQ2hhcj4gcmVzdWx0OwotICAgIGFwcGVuZENTU0RvdWJsZShyZXN1bHQsIHZhbHVlKTsKLSAg
ICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KHJlc3VsdC5zaXplKCkgKyBzdHJsZW4odW5pdHMpKTsK
LSAgICBmb3IgKGludCBpID0gMDsgdW5pdHNbaV07IGkrKykKLSAgICAgICAgcmVzdWx0LmFwcGVu
ZCh1bml0c1tpXSk7Ci0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0KTsKLX0KLQogU3Ry
aW5nIENTU1ByaW1pdGl2ZVZhbHVlOjpjc3NUZXh0KCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTog
cmV0dXJuIHRoZSBvcmlnaW5hbCB2YWx1ZSBpbnN0ZWFkIG9mIGEgZ2VuZXJhdGVkIG9uZSAoZS5n
LiBjb2xvcgpAQCAtNzYyLDYxICs2OTUsNjEgQEAgU3RyaW5nIENTU1ByaW1pdGl2ZVZhbHVlOjpj
c3NUZXh0KCkgY29ucwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTX05VTUJF
UjoKICAgICAgICAgY2FzZSBDU1NfUEFSU0VSX0lOVEVHRVI6Ci0gICAgICAgICAgICB0ZXh0ID0g
Zm9ybWF0V2l0aFVuaXRzKG1fdmFsdWUubnVtLCAiIik7CisgICAgICAgICAgICB0ZXh0ID0gU3Ry
aW5nOjpudW1iZXIobV92YWx1ZS5udW0pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQ1NTX1BFUkNFTlRBR0U6Ci0gICAgICAgICAgICB0ZXh0ID0gZm9ybWF0V2l0aFVuaXRzKG1f
dmFsdWUubnVtLCAiJSIpOworICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6Zm9ybWF0KCIlLjZs
ZyUlIiwgbV92YWx1ZS5udW0pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NT
X0VNUzoKLSAgICAgICAgICAgIHRleHQgPSBmb3JtYXRXaXRoVW5pdHMobV92YWx1ZS5udW0sICJl
bSIpOworICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6Zm9ybWF0KCIlLjZsZ2VtIiwgbV92YWx1
ZS5udW0pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTX0VYUzoKLSAgICAg
ICAgICAgIHRleHQgPSBmb3JtYXRXaXRoVW5pdHMobV92YWx1ZS5udW0sICJleCIpOworICAgICAg
ICAgICAgdGV4dCA9IFN0cmluZzo6Zm9ybWF0KCIlLjZsZ2V4IiwgbV92YWx1ZS5udW0pOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTX1JFTVM6Ci0gICAgICAgICAgICB0ZXh0
ID0gZm9ybWF0V2l0aFVuaXRzKG1fdmFsdWUubnVtLCAicmVtIik7CisgICAgICAgICAgICB0ZXh0
ID0gU3RyaW5nOjpmb3JtYXQoIiUuNmxncmVtIiwgbV92YWx1ZS5udW0pOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTX1BYOgotICAgICAgICAgICAgdGV4dCA9IGZvcm1hdFdp
dGhVbml0cyhtX3ZhbHVlLm51bSwgInB4Iik7CisgICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpm
b3JtYXQoIiUuNmxncHgiLCBtX3ZhbHVlLm51bSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBDU1NfQ006Ci0gICAgICAgICAgICB0ZXh0ID0gZm9ybWF0V2l0aFVuaXRzKG1fdmFs
dWUubnVtLCAiY20iKTsKKyAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6OmZvcm1hdCgiJS42bGdj
bSIsIG1fdmFsdWUubnVtKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU19N
TToKLSAgICAgICAgICAgIHRleHQgPSBmb3JtYXRXaXRoVW5pdHMobV92YWx1ZS5udW0sICJtbSIp
OworICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6Zm9ybWF0KCIlLjZsZ21tIiwgbV92YWx1ZS5u
dW0pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTX0lOOgotICAgICAgICAg
ICAgdGV4dCA9IGZvcm1hdFdpdGhVbml0cyhtX3ZhbHVlLm51bSwgImluIik7CisgICAgICAgICAg
ICB0ZXh0ID0gU3RyaW5nOjpmb3JtYXQoIiUuNmxnaW4iLCBtX3ZhbHVlLm51bSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NfUFQ6Ci0gICAgICAgICAgICB0ZXh0ID0gZm9y
bWF0V2l0aFVuaXRzKG1fdmFsdWUubnVtLCAicHQiKTsKKyAgICAgICAgICAgIHRleHQgPSBTdHJp
bmc6OmZvcm1hdCgiJS42bGdwdCIsIG1fdmFsdWUubnVtKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIENTU19QQzoKLSAgICAgICAgICAgIHRleHQgPSBmb3JtYXRXaXRoVW5pdHMo
bV92YWx1ZS5udW0sICJwYyIpOworICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6Zm9ybWF0KCIl
LjZsZ3BjIiwgbV92YWx1ZS5udW0pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
Q1NTX0RFRzoKLSAgICAgICAgICAgIHRleHQgPSBmb3JtYXRXaXRoVW5pdHMobV92YWx1ZS5udW0s
ICJkZWciKTsKKyAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6OmZvcm1hdCgiJS42bGdkZWciLCBt
X3ZhbHVlLm51bSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NfUkFEOgot
ICAgICAgICAgICAgdGV4dCA9IGZvcm1hdFdpdGhVbml0cyhtX3ZhbHVlLm51bSwgInJhZCIpOwor
ICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6Zm9ybWF0KCIlLjZsZ3JhZCIsIG1fdmFsdWUubnVt
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU19HUkFEOgotICAgICAgICAg
ICAgdGV4dCA9IGZvcm1hdFdpdGhVbml0cyhtX3ZhbHVlLm51bSwgImdyYWQiKTsKKyAgICAgICAg
ICAgIHRleHQgPSBTdHJpbmc6OmZvcm1hdCgiJS42bGdncmFkIiwgbV92YWx1ZS5udW0pOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTX01TOgotICAgICAgICAgICAgdGV4dCA9
IGZvcm1hdFdpdGhVbml0cyhtX3ZhbHVlLm51bSwgIm1zIik7CisgICAgICAgICAgICB0ZXh0ID0g
U3RyaW5nOjpmb3JtYXQoIiUuNmxnbXMiLCBtX3ZhbHVlLm51bSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBDU1NfUzoKLSAgICAgICAgICAgIHRleHQgPSBmb3JtYXRXaXRoVW5p
dHMobV92YWx1ZS5udW0sICJzIik7CisgICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpmb3JtYXQo
IiUuNmxncyIsIG1fdmFsdWUubnVtKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IENTU19IWjoKLSAgICAgICAgICAgIHRleHQgPSBmb3JtYXRXaXRoVW5pdHMobV92YWx1ZS5udW0s
ICJoeiIpOworICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6Zm9ybWF0KCIlLjZsZ2h6IiwgbV92
YWx1ZS5udW0pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTX0tIWjoKLSAg
ICAgICAgICAgIHRleHQgPSBmb3JtYXRXaXRoVW5pdHMobV92YWx1ZS5udW0sICJraHoiKTsKKyAg
ICAgICAgICAgIHRleHQgPSBTdHJpbmc6OmZvcm1hdCgiJS42bGdraHoiLCBtX3ZhbHVlLm51bSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NfVFVSTjoKLSAgICAgICAgICAg
IHRleHQgPSBmb3JtYXRXaXRoVW5pdHMobV92YWx1ZS5udW0sICJ0dXJuIik7CisgICAgICAgICAg
ICB0ZXh0ID0gU3RyaW5nOjpmb3JtYXQoIiUuNmxndHVybiIsIG1fdmFsdWUubnVtKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU19ESU1FTlNJT046CiAgICAgICAgICAgICAv
LyBGSVhNRQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jc3MvbGFyZ2UtbnVtYmVyLXJvdW5kLXRy
aXAtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY3NzL2xhcmdl
LW51bWJlci1yb3VuZC10cmlwLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNTIwMDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2Nzcy9sYXJnZS1udW1iZXItcm91bmQtdHJpcC1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTEgKzEgQEAKLVBBU1M6IHJlYWQgOTAwMTAwMDBweCBiYWNrIGFzIDkw
MDEwMDAwcHgsIHJlYWQgYWdhaW4gYXMgOTAwMTAwMDBweAorRkFJTDogcmVhZCA5MDAxMDAwMHB4
IGJhY2sgYXMgOS4wMDFlKzA3cHgsIHJlYWQgYWdhaW4gYXMgMHB4CkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2Nzcy9sYXJnZS1udW1iZXItcm91bmQtdHJpcC5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvY3NzL2xhcmdlLW51bWJlci1yb3VuZC10cmlwLmh0bWwJKHJldmlzaW9u
IDUyMDAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jc3MvbGFyZ2UtbnVtYmVyLXJvdW5kLXRyaXAu
aHRtbAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTEgKzI1LDExIEBACiAgIHZhciB0ZXN0VmFsdWUg
PSAiOTAwMTAwMDBweCI7CiAgIGJveC5zdHlsZS5sZWZ0ID0gdGVzdFZhbHVlOwogCi0gIHZhciBs
ZWZ0VmFsdWUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShib3gpLmxlZnQ7CisgIHZhciBsZWZ0
VmFsdWUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShib3gsIG51bGwpLmxlZnQ7CiAKICAgYm94
LnN0eWxlLmxlZnQgPSAiMHB4IjsKICAgYm94LnN0eWxlLmxlZnQgPSBsZWZ0VmFsdWU7Ci0gIHZh
ciBuZXdMZWZ0VmFsdWUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShib3gpLmxlZnQ7CisgIHZh
ciBuZXdMZWZ0VmFsdWUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShib3gsIG51bGwpLmxlZnQ7
CiAKICAgdmFyIHJlc3VsdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0cycpOwog
ICB2YXIgcmVzdWx0OwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jc3Mvb3BhY2l0eS1mbG9hdC1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jc3Mvb3BhY2l0eS1m
bG9hdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDUyMDAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9j
c3Mvb3BhY2l0eS1mbG9hdC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMTcgKzEs
MyBAQAogVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgcmVhZGluZyBhIGZsb2F0aW5nLXBvaW50IG9w
YWNpdHkgZnJvbSBDU1MgYXR0cmlidXRlcyBnZXRzIGJhY2sgYSBwcm9wZXJseS1mb3JtYXR0ZWQg
ZmxvYXQuIEltcHJvcGVybHkgaGFuZGxpbmcgbG9jYWxlcyB0aGF0IGNhdXNlIGRlY2ltYWxzIHRv
IGJlIHdyaXR0ZW4gYXMgY29tbWFzIG1pZ2h0IGJyZWFrIGl0LgogCiBQQVNTCi1QQVNTCi1QQVNT
Ci1QQVNTCi1QQVNTCi1QQVNTCi1QQVNTCi1QQVNTCi1QQVNTCi1QQVNTCi1QQVNTCi1QQVNTCi1Q
QVNTCi1QQVNTCi0KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY3NzL29wYWNpdHktZmxvYXQuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9vcGFjaXR5LWZsb2F0Lmh0bWwJ
KHJldmlzaW9uIDUyMDAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jc3Mvb3BhY2l0eS1mbG9hdC5o
dG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xNSwzNCArMTUsOSBAQCBpdC48L3A+CiA8YSBpZD0ndGVz
dCcgc3R5bGU9J29wYWNpdHk6LjknPjwvYT4KIAogPHNjcmlwdD4KLXZhciB0ZXN0ID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QnKTsKLQotZnVuY3Rpb24gZG9UZXN0KGV4cGVjdGVkLCBp
bnB1dCkgewotICAgIHRlc3Quc3R5bGUub3BhY2l0eSA9IGlucHV0OwotICAgIHZhciBvcGFjaXR5
ID0gdGVzdC5zdHlsZS5vcGFjaXR5LnRvU3RyaW5nKCk7Ci0gICAgaWYgKG9wYWNpdHkgPT0gZXhw
ZWN0ZWQpCi0gICAgICAgIGRvY3VtZW50LndyaXRlKCdQQVNTJyk7Ci0gICAgZWxzZQotICAgICAg
ICBkb2N1bWVudC53cml0ZSgnRkFJTDogZXhwZWN0ZWQgJyArIGV4cGVjdGVkICsgJywgZ290ICcg
KyBvcGFjaXR5KTsKLSAgICBkb2N1bWVudC53cml0ZSgnPGJyPicpOwotfQotCi12YXIgdGVzdHMg
PSBbWycwLjknLCAnMC45J10sCi0gICAgICAgICAgICAgWyc5ODc2NTQzMjE5OCcsICc5ODc2NTQz
MjE5OCddLAotICAgICAgICAgICAgIFsnOTg3MDAwMCcsICc5ODcwMDAwJ10sCi0gICAgICAgICAg
ICAgWycwLjAwMDMyMScsICcwLjAwMDMyMSddLAotICAgICAgICAgICAgIFsnNTAuMDInLCAnNTAu
MDInXSwKLSAgICAgICAgICAgICAvLyBDaGVjayB3ZSBjbGlwIHByZWNpc2lvbiB0byBzaXggZGVj
aW1hbHMuCi0gICAgICAgICAgICAgWycxMjM0LjU2Nzg5MScsICcxMjM0LjU2Nzg5MTIzNCddXTsK
LWZvciAodmFyIGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyBpKyspCi0gICAgZG9UZXN0KHRlc3Rz
W2ldWzBdLCB0ZXN0c1tpXVsxXSk7Ci0KLS8vIFRlc3QgYSB0b28tc21hbGwgdmFsdWUuCi1kb1Rl
c3QoJzAnLCAnMC4wMDAwMDAxJyk7Ci0vLyBUZXN0IHRoYXQgYSBiZXlvbmQtcHJlY2lzaW9uIGRp
Z2l0IHdpbGwgYmUgcm91bmRlZCBpbi4KLWRvVGVzdCgnMC4wMDAwMDEnLCAnMC4wMDAwMDA5Jyk7
Ci0KLS8vIFJ1biB0aGUgdGVzdCBsaXN0IGFnYWluIHdpdGggbmVnYXRpdmVzLgotZm9yICh2YXIg
aSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykKLSAgICBkb1Rlc3QoJy0nICsgdGVzdHNbaV1b
MF0sICctJyArIHRlc3RzW2ldWzFdKTsKK3ZhciBvcGFjaXR5ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ3Rlc3QnKS5zdHlsZS5vcGFjaXR5LnRvU3RyaW5nKCk7CitpZiAob3BhY2l0eSA9PSAn
MC45JykKKyAgICBkb2N1bWVudC53cml0ZSgnUEFTUycpOworZWxzZQorICAgIGRvY3VtZW50Lndy
aXRlKCdGQUlMOiAnICsgb3BhY2l0eSk7CiA8L3NjcmlwdD4KSW5kZXg6IExheW91dFRlc3RzL3Ry
YW5zZm9ybXMvMmQvY29tcG91bmQtMmQtdHJhbnNmb3Jtcy1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvdHJhbnNmb3Jtcy8yZC9jb21wb3VuZC0yZC10cmFuc2Zvcm1zLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gNTIwMDApCisrKyBMYXlvdXRUZXN0cy90cmFuc2Zvcm1zLzJk
L2NvbXBvdW5kLTJkLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC02
LDEyICs2LDEyIEBAIHRyYW5zZm9ybSAic2NhbGUoMS43KSIgZXhwZWN0ZWQgIm1hdHJpeCgKIHRy
YW5zZm9ybSAic2tldygxMmRlZykiIGV4cGVjdGVkICJtYXRyaXgoMSwgMCwgMC4yMTI1NTcsIDEs
IDAsIDApIiA6IFBBU1MKIHRyYW5zZm9ybSAibWF0cml4KDAuOTc4MTQ4LCAwLjIwNzkxMiwgLTAu
MjA3OTEyLCAwLjk3ODE0OCwgNTAsIDIwKSIgZXhwZWN0ZWQgIm1hdHJpeCgwLjk3ODE0OCwgMC4y
MDc5MTIsIC0wLjIwNzkxMiwgMC45NzgxNDgsIDUwLCAyMCkiIDogUEFTUwogdHJhbnNmb3JtICJ0
cmFuc2xhdGUoNTBweCwgMjBweCkgcm90YXRlKDEyZGVnKSIgZXhwZWN0ZWQgIm1hdHJpeCgwLjk3
ODE0OCwgMC4yMDc5MTIsIC0wLjIwNzkxMiwgMC45NzgxNDgsIDUwLCAyMCkiIDogUEFTUwotdHJh
bnNmb3JtICJyb3RhdGUoMTJkZWcpIHRyYW5zbGF0ZSg1MHB4LCAyMHB4KSIgZXhwZWN0ZWQgIm1h
dHJpeCgwLjk3ODE0OCwgMC4yMDc5MTIsIC0wLjIwNzkxMiwgMC45NzgxNDgsIDQ0Ljc0OTE0Niwg
MjkuOTU4NTM3KSIgOiBQQVNTCi10cmFuc2Zvcm0gInJvdGF0ZSgxMmRlZykgdHJhbnNsYXRlKDUw
cHgsIDIwcHgpIHNjYWxlKDEuNCkiIGV4cGVjdGVkICJtYXRyaXgoMS4zNjk0MDcsIDAuMjkxMDc2
LCAtMC4yOTEwNzYsIDEuMzY5NDA3LCA0NC43NDkxNDYsIDI5Ljk1ODUzNykiIDogUEFTUwotdHJh
bnNmb3JtICJzY2FsZSgxLjQpIHJvdGF0ZSgxMmRlZykgdHJhbnNsYXRlKDUwcHgsIDIwcHgpICIg
ZXhwZWN0ZWQgIm1hdHJpeCgxLjM2OTQwNywgMC4yOTEwNzYsIC0wLjI5MTA3NiwgMS4zNjk0MDcs
IDYyLjY0ODgwNSwgNDEuOTQxOTUxKSIgOiBQQVNTCi10cmFuc2Zvcm0gInNjYWxlKDEuNCkgdHJh
bnNsYXRlKDUwcHgsIDIwcHgpIHJvdGF0ZSgxMmRlZykiIGV4cGVjdGVkICJtYXRyaXgoMS4zNjk0
MDcsIDAuMjkxMDc2LCAtMC4yOTEwNzYsIDEuMzY5NDA3LCA3MCwgMjgpIiA6IFBBU1MKLXRyYW5z
Zm9ybSAidHJhbnNsYXRlKDUwcHgsIDIwcHgpIHJvdGF0ZSgxMmRlZykgdHJhbnNsYXRlWSg1MHB4
KSBzY2FsZSgxLjQpIiBleHBlY3RlZCAibWF0cml4KDEuMzY5NDA3LCAwLjI5MTA3NiwgLTAuMjkx
MDc2LCAxLjM2OTQwNywgMzkuNjA0NDE1LCA2OC45MDczOCkiIDogUEFTUwotdHJhbnNmb3JtICJy
b3RhdGUoMTJkZWcpIHRyYW5zbGF0ZSg1MHB4LCAyMHB4KSBzY2FsZSgxLjQpIHRyYW5zbGF0ZSgt
ODBweCwgNDBweCkgc2tldygzNGRlZykgdHJhbnNsYXRlKDEwcHgsIDEwcHgpIHNjYWxlKDAuNykg
c2tld1koLTI1ZGVnKSByb3RhdGUoMjFkZWcpIHRyYW5zbGF0ZVgoNTBweCkgc2NhbGUoMS40LCAx
LjgpIiBleHBlY3RlZCAibWF0cml4KDEuMjA1MTY2LCAwLjE0ODIwNywgMC4yNTg5ODcsIDIuMDQw
MDQ0LCAtMTMuMzg0NzIzLCA4NS4zMDk5NjcpIiA6IFBBU1MKK3RyYW5zZm9ybSAicm90YXRlKDEy
ZGVnKSB0cmFuc2xhdGUoNTBweCwgMjBweCkiIGV4cGVjdGVkICJtYXRyaXgoMC45NzgxNDgsIDAu
MjA3OTEyLCAtMC4yMDc5MTIsIDAuOTc4MTQ4LCA0NC43NDkxLCAyOS45NTg1KSIgOiBQQVNTCit0
cmFuc2Zvcm0gInJvdGF0ZSgxMmRlZykgdHJhbnNsYXRlKDUwcHgsIDIwcHgpIHNjYWxlKDEuNCki
IGV4cGVjdGVkICJtYXRyaXgoMS4zNjk0MSwgMC4yOTEwNzYsIC0wLjI5MTA3NiwgMS4zNjk0MSwg
NDQuNzQ5MSwgMjkuOTU4NSkiIDogUEFTUwordHJhbnNmb3JtICJzY2FsZSgxLjQpIHJvdGF0ZSgx
MmRlZykgdHJhbnNsYXRlKDUwcHgsIDIwcHgpICIgZXhwZWN0ZWQgIm1hdHJpeCgxLjM2OTQxLCAw
LjI5MTA3NiwgLTAuMjkxMDc2LCAxLjM2OTQxLCA2Mi42NDg4LCA0MS45NDIpIiA6IFBBU1MKK3Ry
YW5zZm9ybSAic2NhbGUoMS40KSB0cmFuc2xhdGUoNTBweCwgMjBweCkgcm90YXRlKDEyZGVnKSIg
ZXhwZWN0ZWQgIm1hdHJpeCgxLjM2OTQxLCAwLjI5MTA3NiwgLTAuMjkxMDc2LCAxLjM2OTQxLCA3
MCwgMjgpIiA6IFBBU1MKK3RyYW5zZm9ybSAidHJhbnNsYXRlKDUwcHgsIDIwcHgpIHJvdGF0ZSgx
MmRlZykgdHJhbnNsYXRlWSg1MHB4KSBzY2FsZSgxLjQpIiBleHBlY3RlZCAibWF0cml4KDEuMzY5
NDEsIDAuMjkxMDc2LCAtMC4yOTEwNzYsIDEuMzY5NDEsIDM5LjYwNDQsIDY4LjkwNzQpIiA6IFBB
U1MKK3RyYW5zZm9ybSAicm90YXRlKDEyZGVnKSB0cmFuc2xhdGUoNTBweCwgMjBweCkgc2NhbGUo
MS40KSB0cmFuc2xhdGUoLTgwcHgsIDQwcHgpIHNrZXcoMzRkZWcpIHRyYW5zbGF0ZSgxMHB4LCAx
MHB4KSBzY2FsZSgwLjcpIHNrZXdZKC0yNWRlZykgcm90YXRlKDIxZGVnKSB0cmFuc2xhdGVYKDUw
cHgpIHNjYWxlKDEuNCwgMS44KSIgZXhwZWN0ZWQgIm1hdHJpeCgxLjIwNTE3LCAwLjE0ODIwNywg
MC4yNTg5ODcsIDIuMDQwMDQsIC0xMy4zODQ3LCA4NS4zMSkiIDogUEFTUwogdHJhbnNmb3JtICIs
cm90YXRlKDEyZGVnKSB0cmFuc2xhdGUoNTBweCwgMjBweCkiIGV4cGVjdGVkICJub25lIiA6IFBB
U1MKIHRyYW5zZm9ybSAicm90YXRlKDEyZGVnKSwgdHJhbnNsYXRlKDUwcHgsIDIwcHgpIiBleHBl
Y3RlZCAibm9uZSIgOiBQQVNTCiB0cmFuc2Zvcm0gInJvdGF0ZSgxMmRlZykgKyB0cmFuc2xhdGUo
NTBweCwgMjBweCkiIGV4cGVjdGVkICJub25lIiA6IFBBU1MKSW5kZXg6IExheW91dFRlc3RzL3Ry
YW5zZm9ybXMvMmQvY29tcG91bmQtMmQtdHJhbnNmb3Jtcy5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL3RyYW5zZm9ybXMvMmQvY29tcG91bmQtMmQtdHJhbnNmb3Jtcy5odG1sCShyZXZp
c2lvbiA1MjAwMCkKKysrIExheW91dFRlc3RzL3RyYW5zZm9ybXMvMmQvY29tcG91bmQtMmQtdHJh
bnNmb3Jtcy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC00MywxNyArNDMsMTcgQEAKICAgICAgIAog
ICAgICAgLy8gdHdvIGZ1bmN0aW9ucwogICAgICAgeyAndHJhbnNmb3JtJyA6ICd0cmFuc2xhdGUo
NTBweCwgMjBweCkgcm90YXRlKDEyZGVnKScsICAgICAgICAgICdyZXN1bHQnIDogJ21hdHJpeCgw
Ljk3ODE0OCwgMC4yMDc5MTIsIC0wLjIwNzkxMiwgMC45NzgxNDgsIDUwLCAyMCknIH0sCi0gICAg
ICB7ICd0cmFuc2Zvcm0nIDogJ3JvdGF0ZSgxMmRlZykgdHJhbnNsYXRlKDUwcHgsIDIwcHgpJywg
ICAgICAgICAgJ3Jlc3VsdCcgOiAnbWF0cml4KDAuOTc4MTQ4LCAwLjIwNzkxMiwgLTAuMjA3OTEy
LCAwLjk3ODE0OCwgNDQuNzQ5MTQ2LCAyOS45NTg1MzcpJyB9LAorICAgICAgeyAndHJhbnNmb3Jt
JyA6ICdyb3RhdGUoMTJkZWcpIHRyYW5zbGF0ZSg1MHB4LCAyMHB4KScsICAgICAgICAgICdyZXN1
bHQnIDogJ21hdHJpeCgwLjk3ODE0OCwgMC4yMDc5MTIsIC0wLjIwNzkxMiwgMC45NzgxNDgsIDQ0
Ljc0OTEsIDI5Ljk1ODUpJyB9LAogCiAgICAgICAvLyB0aHJlZSBmdW5jdGlvbnMKLSAgICAgIHsg
J3RyYW5zZm9ybScgOiAncm90YXRlKDEyZGVnKSB0cmFuc2xhdGUoNTBweCwgMjBweCkgc2NhbGUo
MS40KScsICAgJ3Jlc3VsdCcgOiAnbWF0cml4KDEuMzY5NDA3LCAwLjI5MTA3NiwgLTAuMjkxMDc2
LCAxLjM2OTQwNywgNDQuNzQ5MTQ2LCAyOS45NTg1MzcpJyB9LAotICAgICAgeyAndHJhbnNmb3Jt
JyA6ICdzY2FsZSgxLjQpIHJvdGF0ZSgxMmRlZykgdHJhbnNsYXRlKDUwcHgsIDIwcHgpICcsICAn
cmVzdWx0JyA6ICdtYXRyaXgoMS4zNjk0MDcsIDAuMjkxMDc2LCAtMC4yOTEwNzYsIDEuMzY5NDA3
LCA2Mi42NDg4MDUsIDQxLjk0MTk1MSknIH0sCi0gICAgICB7ICd0cmFuc2Zvcm0nIDogJ3NjYWxl
KDEuNCkgdHJhbnNsYXRlKDUwcHgsIDIwcHgpIHJvdGF0ZSgxMmRlZyknLCAgICdyZXN1bHQnIDog
J21hdHJpeCgxLjM2OTQwNywgMC4yOTEwNzYsIC0wLjI5MTA3NiwgMS4zNjk0MDcsIDcwLCAyOCkn
IH0sCi0gICAgICB7ICd0cmFuc2Zvcm0nIDogJ3RyYW5zbGF0ZSg1MHB4LCAyMHB4KSByb3RhdGUo
MTJkZWcpIHRyYW5zbGF0ZVkoNTBweCkgc2NhbGUoMS40KScsICAgJ3Jlc3VsdCcgOiAnbWF0cml4
KDEuMzY5NDA3LCAwLjI5MTA3NiwgLTAuMjkxMDc2LCAxLjM2OTQwNywgMzkuNjA0NDE1LCA2OC45
MDczOCknIH0sCisgICAgICB7ICd0cmFuc2Zvcm0nIDogJ3JvdGF0ZSgxMmRlZykgdHJhbnNsYXRl
KDUwcHgsIDIwcHgpIHNjYWxlKDEuNCknLCAgICdyZXN1bHQnIDogJ21hdHJpeCgxLjM2OTQxLCAw
LjI5MTA3NiwgLTAuMjkxMDc2LCAxLjM2OTQxLCA0NC43NDkxLCAyOS45NTg1KScgfSwKKyAgICAg
IHsgJ3RyYW5zZm9ybScgOiAnc2NhbGUoMS40KSByb3RhdGUoMTJkZWcpIHRyYW5zbGF0ZSg1MHB4
LCAyMHB4KSAnLCAgJ3Jlc3VsdCcgOiAnbWF0cml4KDEuMzY5NDEsIDAuMjkxMDc2LCAtMC4yOTEw
NzYsIDEuMzY5NDEsIDYyLjY0ODgsIDQxLjk0MiknIH0sCisgICAgICB7ICd0cmFuc2Zvcm0nIDog
J3NjYWxlKDEuNCkgdHJhbnNsYXRlKDUwcHgsIDIwcHgpIHJvdGF0ZSgxMmRlZyknLCAgICdyZXN1
bHQnIDogJ21hdHJpeCgxLjM2OTQxLCAwLjI5MTA3NiwgLTAuMjkxMDc2LCAxLjM2OTQxLCA3MCwg
MjgpJyB9LAorICAgICAgeyAndHJhbnNmb3JtJyA6ICd0cmFuc2xhdGUoNTBweCwgMjBweCkgcm90
YXRlKDEyZGVnKSB0cmFuc2xhdGVZKDUwcHgpIHNjYWxlKDEuNCknLCAgICdyZXN1bHQnIDogJ21h
dHJpeCgxLjM2OTQxLCAwLjI5MTA3NiwgLTAuMjkxMDc2LCAxLjM2OTQxLCAzOS42MDQ0LCA2OC45
MDc0KScgfSwKIAogICAgICAgLy8gbG90cyBvZiBmdW5jdGlvbnMKICAgICAgIHsgJ3RyYW5zZm9y
bScgOiAncm90YXRlKDEyZGVnKSB0cmFuc2xhdGUoNTBweCwgMjBweCkgc2NhbGUoMS40KSB0cmFu
c2xhdGUoLTgwcHgsIDQwcHgpIHNrZXcoMzRkZWcpIHRyYW5zbGF0ZSgxMHB4LCAxMHB4KSBzY2Fs
ZSgwLjcpIHNrZXdZKC0yNWRlZykgcm90YXRlKDIxZGVnKSB0cmFuc2xhdGVYKDUwcHgpIHNjYWxl
KDEuNCwgMS44KScsIAotICAgICAgICAncmVzdWx0JyA6ICdtYXRyaXgoMS4yMDUxNjYsIDAuMTQ4
MjA3LCAwLjI1ODk4NywgMi4wNDAwNDQsIC0xMy4zODQ3MjMsIDg1LjMwOTk2NyknIH0sCisgICAg
ICAgICdyZXN1bHQnIDogJ21hdHJpeCgxLjIwNTE3LCAwLjE0ODIwNywgMC4yNTg5ODcsIDIuMDQw
MDQsIC0xMy4zODQ3LCA4NS4zMSknIH0sCiAgICAgICAgIAogICAgICAgLy8gaW52YWxpZCBjb21w
b3VuZCBmdW5jdGlvbnMKICAgICAgIHsgJ3RyYW5zZm9ybScgOiAnLHJvdGF0ZSgxMmRlZykgdHJh
bnNsYXRlKDUwcHgsIDIwcHgpJywgJ3Jlc3VsdCcgOiAnbm9uZScgfSwgLy8gaGFzIGNvbW1hCg==
</data>
<flag name="review"
          id="26666"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>44820</attachid>
            <date>2009-12-14 13:44:23 -0800</date>
            <delta_ts>2009-12-14 13:44:23 -0800</delta_ts>
            <desc>More reduced testcase</desc>
            <filename>zip-reduction.html</filename>
            <type>text/html</type>
            <size>267042</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">PGh0bWw+CjxoZWFkPgo8c3R5bGU+Ci5jYXJvdXNlbC1jb21wb25lbnR7CiAgcG9zaXRpb246cmVs
YXRpdmU7CiAgb3ZlcmZsb3c6aGlkZGVuOwogIGRpc3BsYXk6bm9uZTsKfQouY2Fyb3VzZWwtY29t
cG9uZW50IHVsLmNhcm91c2VsLWxpc3R7CiAgd2lkdGg6MTAwMDAwMDBweDsKICBwb3NpdGlvbjpy
ZWxhdGl2ZTsKICB6LWluZGV4OjE7Cn0KCi5jYXJvdXNlbC1jb21wb25lbnQgLmNhcm91c2VsLWxp
c3QgbGl7ZmxvYXQ6bGVmdDtsaXN0LXN0eWxlOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO30KLmNhcm91
c2VsLWNvbXBvbmVudCAuY2Fyb3VzZWwtdmVydGljYWwgbGl7bWFyZ2luLWJvdHRvbTowO2Zsb2F0
OmxlZnQ7Y2xlYXI6bGVmdDtvdmVyZmxvdzpoaWRkZW47ZGlzcGxheTpibG9jazt9Ci5jYXJvdXNl
bC1jb21wb25lbnQgLmNhcm91c2VsLWNsaXAtcmVnaW9ue292ZXJmbG93OmhpZGRlbjttYXJnaW46
MCBhdXRvO3Bvc2l0aW9uOnJlbGF0aXZlO30KLmNhcm91c2VsLWNvbXBvbmVudHtiYWNrZ3JvdW5k
OiNlMmVkZmE7cGFkZGluZzowOy1tb3otYm9yZGVyLXJhZGl1czo2cHg7Y29sb3I6IzYxOGNiZTt9
Ci5jYXJvdXNlbC1jb21wb25lbnQgdWwuY2Fyb3VzZWwtbGlzdHttYXJnaW46MDtwYWRkaW5nOjA7
bGluZS1oZWlnaHQ6MDt9Ci5jYXJvdXNlbC1jb21wb25lbnQgLmNhcm91c2VsLWxpc3QgbGl7dGV4
dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjA7cGFkZGluZzowO2ZvbnQ6MTBweCB2ZXJkYW5hLGFyaWFs
LHNhbnMtc2VyaWY7Y29sb3I6IzY2Njt9ZGl2LmhvckdyYXlSdWxle21hcmdpbi1ib3R0b206MDt9
CgouY2Fyb3VzZWxpdGVtbGVmdHtwYWRkaW5nLXJpZ2h0OjVweDt0ZXh0LWFsaWduOmxlZnQ7fQou
Y2Fyb3VzZWxpdGVtcmlnaHR7dGV4dC1hbGlnbjpsZWZ0O30KLmNhcm91c2VsaXRlbWxpbmt7dGV4
dC1kZWNvcmF0aW9uOm5vbmU7fQouY2Fyb3VzZWxpdGVtcHJpY2V7Y29sb3I6IzA2MDtmb250LXdl
aWdodDpib2xkO30KCi5jYXJvdXNlbC1jb250YWluZXJ7CiAgY2xlYXI6Ym90aDsKICBtYXJnaW46
MCAwIDAgNXB4OwogIHBhZGRpbmc6MTBweDsKICBiYWNrZ3JvdW5kOiNFRkVGRUY7CiAgdGV4dC1h
bGlnbjpsZWZ0Owp9CgouY2Fyb3VzZWwtY29tcG9uZW50e2JhY2tncm91bmQ6I0VGRUZFRjtwYWRk
aW5nOjAgMCAwIDIwcHg7bWFyZ2luOjA7fQouY2Fyb3VzZWwtY29tcG9uZW50IC5jYXJvdXNlbC1j
bGlwLXJlZ2lvbnttYXJnaW46MDtiYWNrZ3JvdW5kOiNFRkVGRUY7fQouY2Fyb3VzZWwtY29tcG9u
ZW50IC5jYXJvdXNlbC1saXN0IGxpe3dpZHRoOjI2MHB4O21hcmdpbjowIDAgMCAxMHB4O3BhZGRp
bmc6NXB4O2JvcmRlcjoxcHggc29saWQgI0NDQztiYWNrZ3JvdW5kOndoaXRlO30KCjwvc3R5bGU+
CjwvaGVhZD4KPGJvZHk+CgogICAgIDxkaXYgY2xhc3M9ImNhcm91c2VsLWNvbnRhaW5lciI+CiAg
ICAgICA8ZGl2IGlkPSJteWNhcm91c2VsIiBjbGFzcz0iY2Fyb3VzZWwtY29tcG9uZW50Ij4KICAg
ICAgICAgPGRpdiBjbGFzcz0iY2Fyb3VzZWwtY2xpcC1yZWdpb24iPgogICAgICAgICAgIDx1bCBj
bGFzcz0iY2Fyb3VzZWwtbGlzdCI+CiAgICAgICAgICAgPC91bD4KICAgICAgICAgPC9kaXY+CiAg
ICAgICA8L2Rpdj4KICAgPC9kaXY+CgoKPHNjcmlwdD4KaWYgKHR5cGVvZiBZQUhPTyA9PSAidW5k
ZWZpbmVkIiB8fCAhWUFIT08pIHsKICAgIHZhciBZQUhPTyA9IHt9Cn0KWUFIT08ubmFtZXNwYWNl
ID0gZnVuY3Rpb24gKCkgewogICAgdmFyIEYgPSBhcmd1bWVudHMsCiAgICAgICAgRyA9IG51bGws
CiAgICAgICAgSSwgSiwgSDsKICAgIGZvciAoSSA9IDA7CiAgICBJIDwgRi5sZW5ndGg7CiAgICBJ
ID0gSSArIDEpIHsKICAgICAgICBIID0gKCIiICsgRltJXSkuc3BsaXQoIi4iKTsKICAgICAgICBH
ID0gWUFIT087CiAgICAgICAgZm9yIChKID0gKEhbMF0gPT0gIllBSE9PIikgPyAxIDogMDsKICAg
ICAgICBKIDwgSC5sZW5ndGg7CiAgICAgICAgSiA9IEogKyAxKSB7CiAgICAgICAgICAgIEdbSFtK
XV0gPSBHW0hbSl1dIHx8IHt9OwogICAgICAgICAgICBHID0gR1tIW0pdXQogICAgICAgIH0KICAg
IH0KICAgIHJldHVybiBHCn07CllBSE9PLmxvZyA9IGZ1bmN0aW9uIChGLCBFLCBHKSB7CiAgICB2
YXIgSCA9IFlBSE9PLndpZGdldC5Mb2dnZXI7CiAgICBpZiAoSCAmJiBILmxvZykgewogICAgICAg
IHJldHVybiBILmxvZyhGLCBFLCBHKQogICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gZmFsc2UK
ICAgIH0KfTsKWUFIT08ucmVnaXN0ZXIgPSBmdW5jdGlvbiAoTSwgUiwgSikgewogICAgdmFyIE4g
PSBZQUhPTy5lbnYubW9kdWxlcywKICAgICAgICBMLCBPLCBQLCBRLCBLOwogICAgaWYgKCFOW01d
KSB7CiAgICAgICAgTltNXSA9IHsKICAgICAgICAgICAgdmVyc2lvbnM6IFtdLAogICAgICAgICAg
ICBidWlsZHM6IFtdCiAgICAgICAgfQogICAgfQogICAgTCA9IE5bTV07CiAgICBPID0gSi52ZXJz
aW9uOwogICAgUCA9IEouYnVpbGQ7CiAgICBRID0gWUFIT08uZW52Lmxpc3RlbmVyczsKICAgIEwu
bmFtZSA9IE07CiAgICBMLnZlcnNpb24gPSBPOwogICAgTC5idWlsZCA9IFA7CiAgICBMLnZlcnNp
b25zLnB1c2goTyk7CiAgICBMLmJ1aWxkcy5wdXNoKFApOwogICAgTC5tYWluQ2xhc3MgPSBSOwog
ICAgZm9yIChLID0gMDsKICAgIEsgPCBRLmxlbmd0aDsKICAgIEsgPSBLICsgMSkgewogICAgICAg
IFFbS10oTCkKICAgIH0KICAgIGlmIChSKSB7CiAgICAgICAgUi5WRVJTSU9OID0gTzsKICAgICAg
ICBSLkJVSUxEID0gUAogICAgfSBlbHNlIHsKICAgICAgICBZQUhPTy5sb2coIm1haW5DbGFzcyBp
cyB1bmRlZmluZWQgZm9yIG1vZHVsZSAiICsgTSwgIndhcm4iKQogICAgfQp9OwpZQUhPTy5lbnYg
PSBZQUhPTy5lbnYgfHwgewogICAgbW9kdWxlczogW10sCiAgICBsaXN0ZW5lcnM6IFtdCn07CllB
SE9PLmVudi5nZXRWZXJzaW9uID0gZnVuY3Rpb24gKEIpIHsKICAgIHJldHVybiBZQUhPTy5lbnYu
bW9kdWxlc1tCXSB8fCBudWxsCn07CllBSE9PLmVudi51YSA9IGZ1bmN0aW9uICgpIHsKICAgIHZh
ciBMID0gZnVuY3Rpb24gKEIpIHsKICAgICAgICB2YXIgQSA9IDA7CiAgICAgICAgcmV0dXJuIHBh
cnNlRmxvYXQoQi5yZXBsYWNlKC9cLi9nLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVy
biAoQSsrPT0xKSA/ICIiIDogIi4iCiAgICAgICAgfSkpCiAgICB9LAogICAgICAgIEkgPSBuYXZp
Z2F0b3IsCiAgICAgICAgSiA9IHsKICAgICAgICBpZTogMCwKICAgICAgICBvcGVyYTogMCwKICAg
ICAgICBnZWNrbzogMCwKICAgICAgICB3ZWJraXQ6IDAsCiAgICAgICAgbW9iaWxlOiBudWxsLAog
ICAgICAgIGFpcjogMCwKICAgICAgICBjYWphOiBJLmNhamFWZXJzaW9uLAogICAgICAgIHNlY3Vy
ZTogZmFsc2UsCiAgICAgICAgb3M6IG51bGwKICAgIH0sCiAgICAgICAgTSA9IG5hdmlnYXRvciAm
JiBuYXZpZ2F0b3IudXNlckFnZW50LAogICAgICAgIEsgPSB3aW5kb3cgJiYgd2luZG93LmxvY2F0
aW9uLAogICAgICAgIE4gPSBLICYmIEsuaHJlZiwKICAgICAgICBIOwogICAgSi5zZWN1cmUgPSBO
ICYmIChOLnRvTG93ZXJDYXNlKCkuaW5kZXhPZigiaHR0cHMiKSA9PT0gMCk7CiAgICBpZiAoTSkg
ewogICAgICAgIGlmICgoL3dpbmRvd3N8d2luMzIvaSkudGVzdChNKSkgewogICAgICAgICAgICBK
Lm9zID0gIndpbmRvd3MiCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKCgvbWFjaW50
b3NoL2kpLnRlc3QoTSkpIHsKICAgICAgICAgICAgICAgIEoub3MgPSAibWFjaW50b3NoIgogICAg
ICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICgoL0tIVE1MLykudGVzdChNKSkgewogICAg
ICAgICAgICBKLndlYmtpdCA9IDEKICAgICAgICB9CiAgICAgICAgSCA9IE0ubWF0Y2goL0FwcGxl
V2ViS2l0XC8oW15cc10qKS8pOwogICAgICAgIGlmIChIICYmIEhbMV0pIHsKICAgICAgICAgICAg
Si53ZWJraXQgPSBMKEhbMV0pOwogICAgICAgICAgICBpZiAoLyBNb2JpbGVcLy8udGVzdChNKSkg
ewogICAgICAgICAgICAgICAgSi5tb2JpbGUgPSAiQXBwbGUiCiAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICBIID0gTS5tYXRjaCgvTm9raWFOW15cL10qLyk7CiAgICAgICAgICAg
ICAgICBpZiAoSCkgewogICAgICAgICAgICAgICAgICAgIEoubW9iaWxlID0gSFswXQogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIEggPSBNLm1hdGNoKC9BZG9iZUFJ
UlwvKFteXHNdKikvKTsKICAgICAgICAgICAgaWYgKEgpIHsKICAgICAgICAgICAgICAgIEouYWly
ID0gSFswXQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghSi53ZWJraXQpIHsK
ICAgICAgICAgICAgSCA9IE0ubWF0Y2goL09wZXJhW1xzXC9dKFteXHNdKikvKTsKICAgICAgICAg
ICAgaWYgKEggJiYgSFsxXSkgewogICAgICAgICAgICAgICAgSi5vcGVyYSA9IEwoSFsxXSk7CiAg
ICAgICAgICAgICAgICBIID0gTS5tYXRjaCgvT3BlcmEgTWluaVteO10qLyk7CiAgICAgICAgICAg
ICAgICBpZiAoSCkgewogICAgICAgICAgICAgICAgICAgIEoubW9iaWxlID0gSFswXQogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgSCA9IE0ubWF0
Y2goL01TSUVccyhbXjtdKikvKTsKICAgICAgICAgICAgICAgIGlmIChIICYmIEhbMV0pIHsKICAg
ICAgICAgICAgICAgICAgICBKLmllID0gTChIWzFdKQogICAgICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICBIID0gTS5tYXRjaCgvR2Vja29cLyhbXlxzXSopLyk7CiAgICAg
ICAgICAgICAgICAgICAgaWYgKEgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgSi5nZWNrbyA9
IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIEggPSBNLm1hdGNoKC9ydjooW15cc1wpXSopLyk7
CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChIICYmIEhbMV0pIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEouZ2Vja28gPSBMKEhbMV0pCiAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAg
ICAgICB9CiAgICB9CiAgICByZXR1cm4gSgp9ICgpOwooZnVuY3Rpb24gKCkgewogICAgWUFIT08u
bmFtZXNwYWNlKCJ1dGlsIiwgIndpZGdldCIsICJleGFtcGxlIik7CiAgICBpZiAoInVuZGVmaW5l
ZCIgIT09IHR5cGVvZiBZQUhPT19jb25maWcpIHsKICAgICAgICB2YXIgSCA9IFlBSE9PX2NvbmZp
Zy5saXN0ZW5lciwKICAgICAgICAgICAgRSA9IFlBSE9PLmVudi5saXN0ZW5lcnMsCiAgICAgICAg
ICAgIEYgPSB0cnVlLAogICAgICAgICAgICBHOwogICAgICAgIGlmIChIKSB7CiAgICAgICAgICAg
IGZvciAoRyA9IDA7CiAgICAgICAgICAgIEcgPCBFLmxlbmd0aDsKICAgICAgICAgICAgRysrKSB7
CiAgICAgICAgICAgICAgICBpZiAoRVtHXSA9PSBIKSB7CiAgICAgICAgICAgICAgICAgICAgRiA9
IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgIH0KICAgICAgICAgICAgaWYgKEYpIHsKICAgICAgICAgICAgICAgIEUucHVzaChIKQog
ICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9KSgpOwpZQUhPTy5sYW5nID0gWUFIT08ubGFu
ZyB8fCB7fTsKKGZ1bmN0aW9uICgpIHsKICAgIHZhciBQID0gWUFIT08ubGFuZywKICAgICAgICBJ
ID0gT2JqZWN0LnByb3RvdHlwZSwKICAgICAgICBKID0gIltvYmplY3QgQXJyYXldIiwKICAgICAg
ICBPID0gIltvYmplY3QgRnVuY3Rpb25dIiwKICAgICAgICBLID0gIltvYmplY3QgT2JqZWN0XSIs
CiAgICAgICAgTSA9IFtdLAogICAgICAgIEwgPSBbInRvU3RyaW5nIiwgInZhbHVlT2YiXSwKICAg
ICAgICBOID0gewogICAgICAgIGlzQXJyYXk6IGZ1bmN0aW9uIChBKSB7CiAgICAgICAgICAgIHJl
dHVybiBJLnRvU3RyaW5nLmFwcGx5KEEpID09PSBKCiAgICAgICAgfSwKICAgICAgICBpc0Jvb2xl
YW46IGZ1bmN0aW9uIChBKSB7CiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgQSA9PT0gImJvb2xl
YW4iCiAgICAgICAgfSwKICAgICAgICBpc0Z1bmN0aW9uOiBmdW5jdGlvbiAoQSkgewogICAgICAg
ICAgICByZXR1cm4gKHR5cGVvZiBBID09PSAiZnVuY3Rpb24iKSB8fCBJLnRvU3RyaW5nLmFwcGx5
KEEpID09PSBPCiAgICAgICAgfSwKICAgICAgICBpc051bGw6IGZ1bmN0aW9uIChBKSB7CiAgICAg
ICAgICAgIHJldHVybiBBID09PSBudWxsCiAgICAgICAgfSwKICAgICAgICBpc051bWJlcjogZnVu
Y3Rpb24gKEEpIHsKICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBBID09PSAibnVtYmVyIiAmJiBp
c0Zpbml0ZShBKQogICAgICAgIH0sCiAgICAgICAgaXNPYmplY3Q6IGZ1bmN0aW9uIChBKSB7CiAg
ICAgICAgICAgIHJldHVybiAoQSAmJiAodHlwZW9mIEEgPT09ICJvYmplY3QiIHx8IFAuaXNGdW5j
dGlvbihBKSkpIHx8IGZhbHNlCiAgICAgICAgfSwKICAgICAgICBpc1N0cmluZzogZnVuY3Rpb24g
KEEpIHsKICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBBID09PSAic3RyaW5nIgogICAgICAgIH0s
CiAgICAgICAgaXNVbmRlZmluZWQ6IGZ1bmN0aW9uIChBKSB7CiAgICAgICAgICAgIHJldHVybiB0
eXBlb2YgQSA9PT0gInVuZGVmaW5lZCIKICAgICAgICB9LAogICAgICAgIF9JRUVudW1GaXg6IChZ
QUhPTy5lbnYudWEuaWUpID8KICAgICAgICBmdW5jdGlvbiAoQiwgQykgewogICAgICAgICAgICB2
YXIgRCwgRSwgQTsKICAgICAgICAgICAgZm9yIChEID0gMDsKICAgICAgICAgICAgRCA8IEwubGVu
Z3RoOwogICAgICAgICAgICBEID0gRCArIDEpIHsKICAgICAgICAgICAgICAgIEUgPSBMW0RdOwog
ICAgICAgICAgICAgICAgQSA9IENbRV07CiAgICAgICAgICAgICAgICBpZiAoUC5pc0Z1bmN0aW9u
KEEpICYmIEEgIT0gSVtFXSkgewogICAgICAgICAgICAgICAgICAgIEJbRV0gPSBBCiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9IDogZnVuY3Rpb24gKCkge30sCiAgICAg
ICAgZXh0ZW5kOiBmdW5jdGlvbiAoQSwgRSwgQikgewogICAgICAgICAgICBpZiAoIUUgfHwgIUEp
IHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiZXh0ZW5kIGZhaWxlZCwgcGxlYXNl
IGNoZWNrIHRoYXQgYWxsIGRlcGVuZGVuY2llcyBhcmUgaW5jbHVkZWQuIikKICAgICAgICAgICAg
fQogICAgICAgICAgICB2YXIgQyA9IGZ1bmN0aW9uICgpIHt9LAogICAgICAgICAgICAgICAgRDsK
ICAgICAgICAgICAgQy5wcm90b3R5cGUgPSBFLnByb3RvdHlwZTsKICAgICAgICAgICAgQS5wcm90
b3R5cGUgPSBuZXcgQygpOwogICAgICAgICAgICBBLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEE7
CiAgICAgICAgICAgIEEuc3VwZXJjbGFzcyA9IEUucHJvdG90eXBlOwogICAgICAgICAgICBpZiAo
RS5wcm90b3R5cGUuY29uc3RydWN0b3IgPT0gSS5jb25zdHJ1Y3RvcikgewogICAgICAgICAgICAg
ICAgRS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBFCiAgICAgICAgICAgIH0KICAgICAgICAgICAg
aWYgKEIpIHsKICAgICAgICAgICAgICAgIGZvciAoRCBpbiBCKSB7CiAgICAgICAgICAgICAgICAg
ICAgaWYgKFAuaGFzT3duUHJvcGVydHkoQiwgRCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
QS5wcm90b3R5cGVbRF0gPSBCW0RdCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgUC5fSUVFbnVtRml4KEEucHJvdG90eXBlLCBCKQogICAgICAg
ICAgICB9CiAgICAgICAgfSwKICAgICAgICBhdWdtZW50T2JqZWN0OiBmdW5jdGlvbiAoRiwgQSkg
ewogICAgICAgICAgICBpZiAoIUEgfHwgIUYpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBF
cnJvcigiQWJzb3JiIGZhaWxlZCwgdmVyaWZ5IGRlcGVuZGVuY2llcy4iKQogICAgICAgICAgICB9
CiAgICAgICAgICAgIHZhciBEID0gYXJndW1lbnRzLAogICAgICAgICAgICAgICAgQiwgRSwgQyA9
IERbMl07CiAgICAgICAgICAgIGlmIChDICYmIEMgIT09IHRydWUpIHsKICAgICAgICAgICAgICAg
IGZvciAoQiA9IDI7CiAgICAgICAgICAgICAgICBCIDwgRC5sZW5ndGg7CiAgICAgICAgICAgICAg
ICBCID0gQiArIDEpIHsKICAgICAgICAgICAgICAgICAgICBGW0RbQl1dID0gQVtEW0JdXQogICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZm9yIChF
IGluIEEpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoQyB8fCAhKEUgaW4gRikpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgRltFXSA9IEFbRV0KICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBQLl9JRUVudW1GaXgoRiwgQSkKICAgICAgICAg
ICAgfQogICAgICAgIH0sCiAgICAgICAgYXVnbWVudFByb3RvOiBmdW5jdGlvbiAoQSwgQikgewog
ICAgICAgICAgICBpZiAoIUIgfHwgIUEpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJv
cigiQXVnbWVudCBmYWlsZWQsIHZlcmlmeSBkZXBlbmRlbmNpZXMuIikKICAgICAgICAgICAgfQog
ICAgICAgICAgICB2YXIgRCA9IFtBLnByb3RvdHlwZSwgQi5wcm90b3R5cGVdLAogICAgICAgICAg
ICAgICAgQzsKICAgICAgICAgICAgZm9yIChDID0gMjsKICAgICAgICAgICAgQyA8IGFyZ3VtZW50
cy5sZW5ndGg7CiAgICAgICAgICAgIEMgPSBDICsgMSkgewogICAgICAgICAgICAgICAgRC5wdXNo
KGFyZ3VtZW50c1tDXSkKICAgICAgICAgICAgfQogICAgICAgICAgICBQLmF1Z21lbnRPYmplY3Qu
YXBwbHkodGhpcywgRCkKICAgICAgICB9LAogICAgICAgIGR1bXA6IGZ1bmN0aW9uIChSLCBEKSB7
CiAgICAgICAgICAgIHZhciBHLCBFLCBCID0gW10sCiAgICAgICAgICAgICAgICBBID0gInsuLi59
IiwKICAgICAgICAgICAgICAgIEggPSAiZigpey4uLn0iLAogICAgICAgICAgICAgICAgQyA9ICIs
ICIsCiAgICAgICAgICAgICAgICBGID0gIiA9PiAiOwogICAgICAgICAgICBpZiAoIVAuaXNPYmpl
Y3QoUikpIHsKICAgICAgICAgICAgICAgIHJldHVybiBSICsgIiIKICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgIGlmIChSIGluc3RhbmNlb2YgRGF0ZSB8fCAoIm5vZGVUeXBlIiBp
biBSICYmICJ0YWdOYW1lIiBpbiBSKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBSCiAg
ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGlmIChQLmlzRnVuY3Rp
b24oUikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEgKICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgRCA9IChQ
LmlzTnVtYmVyKEQpKSA/IEQgOiAzOwogICAgICAgICAgICBpZiAoUC5pc0FycmF5KFIpKSB7CiAg
ICAgICAgICAgICAgICBCLnB1c2goIlsiKTsKICAgICAgICAgICAgICAgIGZvciAoRyA9IDAsIEUg
PSBSLmxlbmd0aDsKICAgICAgICAgICAgICAgIEcgPCBFOwogICAgICAgICAgICAgICAgRyA9IEcg
KyAxKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKFAuaXNPYmplY3QoUltHXSkpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgQi5wdXNoKChEID4gMCkgPyBQLmR1bXAoUltHXSwgRCAtIDEpIDog
QSkKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBC
LnB1c2goUltHXSkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgQi5w
dXNoKEMpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoQi5sZW5ndGggPiAx
KSB7CiAgICAgICAgICAgICAgICAgICAgQi5wb3AoKQogICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgQi5wdXNoKCJdIikKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
IEIucHVzaCgieyIpOwogICAgICAgICAgICAgICAgZm9yIChHIGluIFIpIHsKICAgICAgICAgICAg
ICAgICAgICBpZiAoUC5oYXNPd25Qcm9wZXJ0eShSLCBHKSkgewogICAgICAgICAgICAgICAgICAg
ICAgICBCLnB1c2goRyArIEYpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoUC5pc09iamVj
dChSW0ddKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgQi5wdXNoKChEID4gMCkgPyBQ
LmR1bXAoUltHXSwgRCAtIDEpIDogQSkKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIucHVzaChSW0ddKQogICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIEIucHVzaChDKQogICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChCLmxlbmd0aCA+
IDEpIHsKICAgICAgICAgICAgICAgICAgICBCLnBvcCgpCiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICBCLnB1c2goIn0iKQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBC
LmpvaW4oIiIpCiAgICAgICAgfSwKICAgICAgICBzdWJzdGl0dXRlOiBmdW5jdGlvbiAoQSwgZywg
SCkgewogICAgICAgICAgICB2YXIgYywgZCwgZSwgRSwgRCwgQiwgRiA9IFtdLAogICAgICAgICAg
ICAgICAgZiwgYiA9ICJkdW1wIiwKICAgICAgICAgICAgICAgIEcgPSAiICIsCiAgICAgICAgICAg
ICAgICBoID0gInsiLAogICAgICAgICAgICAgICAgQyA9ICJ9IiwKICAgICAgICAgICAgICAgIFos
IGE7CiAgICAgICAgICAgIGZvciAoOzspIHsKICAgICAgICAgICAgICAgIGMgPSBBLmxhc3RJbmRl
eE9mKGgpOwogICAgICAgICAgICAgICAgaWYgKGMgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAg
YnJlYWsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGQgPSBBLmluZGV4T2YoQywg
Yyk7CiAgICAgICAgICAgICAgICBpZiAoYyArIDEgPj0gZCkgewogICAgICAgICAgICAgICAgICAg
IGJyZWFrCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmID0gQS5zdWJzdHJpbmco
YyArIDEsIGQpOwogICAgICAgICAgICAgICAgRSA9IGY7CiAgICAgICAgICAgICAgICBCID0gbnVs
bDsKICAgICAgICAgICAgICAgIGUgPSBFLmluZGV4T2YoRyk7CiAgICAgICAgICAgICAgICBpZiAo
ZSA+IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgQiA9IEUuc3Vic3RyaW5nKGUgKyAxKTsKICAg
ICAgICAgICAgICAgICAgICBFID0gRS5zdWJzdHJpbmcoMCwgZSkKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIEQgPSBnW0VdOwogICAgICAgICAgICAgICAgaWYgKEgpIHsKICAgICAg
ICAgICAgICAgICAgICBEID0gSChFLCBELCBCKQogICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgaWYgKFAuaXNPYmplY3QoRCkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoUC5pc0Fy
cmF5KEQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEQgPSBQLmR1bXAoRCwgcGFyc2VJbnQo
QiwgMTApKQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIEIgPSBCIHx8ICIiOwogICAgICAgICAgICAgICAgICAgICAgICBaID0gQi5pbmRleE9mKGIp
OwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoWiA+IC0xKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBCID0gQi5zdWJzdHJpbmcoNCkKICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICBhID0gRC50b1N0cmluZygpOwogICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoYSA9PT0gSyB8fCBaID4gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEQgPSBQLmR1bXAoRCwgcGFyc2VJbnQoQiwgMTApKQogICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgRCA9IGEKICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFQLmlzU3RyaW5nKEQpICYmICFQLmlzTnVtYmVy
KEQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEQgPSAifi0iICsgRi5sZW5ndGggKyAiLX4i
OwogICAgICAgICAgICAgICAgICAgICAgICBGW0YubGVuZ3RoXSA9IGYKICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBBID0gQS5zdWJzdHJpbmco
MCwgYykgKyBEICsgQS5zdWJzdHJpbmcoZCArIDEpCiAgICAgICAgICAgIH0KICAgICAgICAgICAg
Zm9yIChjID0gRi5sZW5ndGggLSAxOwogICAgICAgICAgICBjID49IDA7CiAgICAgICAgICAgIGMg
PSBjIC0gMSkgewogICAgICAgICAgICAgICAgQSA9IEEucmVwbGFjZShuZXcgUmVnRXhwKCJ+LSIg
KyBjICsgIi1+IiksICJ7IiArIEZbY10gKyAifSIsICJnIikKICAgICAgICAgICAgfQogICAgICAg
ICAgICByZXR1cm4gQQogICAgICAgIH0sCiAgICAgICAgdHJpbTogZnVuY3Rpb24gKEIpIHsKICAg
ICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIHJldHVybiBCLnJlcGxhY2UoL15ccyt8XHMr
JC9nLCAiIikKICAgICAgICAgICAgfSBjYXRjaChBKSB7CiAgICAgICAgICAgICAgICByZXR1cm4g
QgogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBtZXJnZTogZnVuY3Rpb24gKCkgewog
ICAgICAgICAgICB2YXIgQSA9IHt9LAogICAgICAgICAgICAgICAgQyA9IGFyZ3VtZW50cywKICAg
ICAgICAgICAgICAgIEQgPSBDLmxlbmd0aCwKICAgICAgICAgICAgICAgIEI7CiAgICAgICAgICAg
IGZvciAoQiA9IDA7CiAgICAgICAgICAgIEIgPCBEOwogICAgICAgICAgICBCID0gQiArIDEpIHsK
ICAgICAgICAgICAgICAgIFAuYXVnbWVudE9iamVjdChBLCBDW0JdLCB0cnVlKQogICAgICAgICAg
ICB9CiAgICAgICAgICAgIHJldHVybiBBCiAgICAgICAgfSwKICAgICAgICBsYXRlcjogZnVuY3Rp
b24gKEIsIEgsIEEsIEYsIEUpIHsKICAgICAgICAgICAgQiA9IEIgfHwgMDsKICAgICAgICAgICAg
SCA9IEggfHwge307CiAgICAgICAgICAgIHZhciBHID0gQSwKICAgICAgICAgICAgICAgIEMgPSBG
LAogICAgICAgICAgICAgICAgRCwgUjsKICAgICAgICAgICAgaWYgKFAuaXNTdHJpbmcoQSkpIHsK
ICAgICAgICAgICAgICAgIEcgPSBIW0FdCiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCFH
KSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJtZXRob2QgdW5kZWZpbmVk
IikKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoQyAmJiAhUC5pc0FycmF5KEMpKSB7CiAg
ICAgICAgICAgICAgICBDID0gW0ZdCiAgICAgICAgICAgIH0KICAgICAgICAgICAgRCA9IGZ1bmN0
aW9uICgpIHsKICAgICAgICAgICAgICAgIEcuYXBwbHkoSCwgQyB8fCBNKQogICAgICAgICAgICB9
OwogICAgICAgICAgICBSID0gKEUpID8gc2V0SW50ZXJ2YWwoRCwgQikgOiBzZXRUaW1lb3V0KEQs
IEIpOwogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgaW50ZXJ2YWw6IEUsCiAg
ICAgICAgICAgICAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICBp
ZiAodGhpcy5pbnRlcnZhbCkgewogICAgICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFs
KFIpCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAg
Y2xlYXJUaW1lb3V0KFIpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBpc1ZhbHVlOiBmdW5jdGlvbiAoQSkgewog
ICAgICAgICAgICByZXR1cm4gKFAuaXNPYmplY3QoQSkgfHwgUC5pc1N0cmluZyhBKSB8fCBQLmlz
TnVtYmVyKEEpIHx8IFAuaXNCb29sZWFuKEEpKQogICAgICAgIH0KICAgIH07CiAgICBQLmhhc093
blByb3BlcnR5ID0gKEkuaGFzT3duUHJvcGVydHkpID8KICAgIGZ1bmN0aW9uIChCLCBBKSB7CiAg
ICAgICAgcmV0dXJuIEIgJiYgQi5oYXNPd25Qcm9wZXJ0eShBKQogICAgfSA6IGZ1bmN0aW9uIChC
LCBBKSB7CiAgICAgICAgcmV0dXJuICFQLmlzVW5kZWZpbmVkKEJbQV0pICYmIEIuY29uc3RydWN0
b3IucHJvdG90eXBlW0FdICE9PSBCW0FdCiAgICB9OwogICAgTi5hdWdtZW50T2JqZWN0KFAsIE4s
IHRydWUpOwogICAgWUFIT08udXRpbC5MYW5nID0gUDsKICAgIFAuYXVnbWVudCA9IFAuYXVnbWVu
dFByb3RvOwogICAgWUFIT08uYXVnbWVudCA9IFAuYXVnbWVudFByb3RvOwogICAgWUFIT08uZXh0
ZW5kID0gUC5leHRlbmQKfSkoKTsKWUFIT08ucmVnaXN0ZXIoInlhaG9vIiwgWUFIT08sIHsKICAg
IHZlcnNpb246ICIyLjguMHI0IiwKICAgIGJ1aWxkOiAiMjQ0OSIKfSk7CihmdW5jdGlvbiAoKSB7
CiAgICBZQUhPTy5lbnYuX2lkX2NvdW50ZXIgPSBZQUhPTy5lbnYuX2lkX2NvdW50ZXIgfHwgMDsK
ICAgIHZhciBBTyA9IFlBSE9PLnV0aWwsCiAgICAgICAgQUkgPSBZQUhPTy5sYW5nLAogICAgICAg
IEFkID0gWUFIT08uZW52LnVhLAogICAgICAgIEFTID0gWUFIT08ubGFuZy50cmltLAogICAgICAg
IEFtID0ge30sCiAgICAgICAgQWkgPSB7fSwKICAgICAgICBBRyA9IC9edCg/OmFibGV8ZHxoKSQv
aSwKICAgICAgICBZID0gL2NvbG9yJC9pLAogICAgICAgIEFKID0gd2luZG93LmRvY3VtZW50LAog
ICAgICAgIHggPSBBSi5kb2N1bWVudEVsZW1lbnQsCiAgICAgICAgQWwgPSAib3duZXJEb2N1bWVu
dCIsCiAgICAgICAgQWMgPSAiZGVmYXVsdFZpZXciLAogICAgICAgIEFVID0gImRvY3VtZW50RWxl
bWVudCIsCiAgICAgICAgQVcgPSAiY29tcGF0TW9kZSIsCiAgICAgICAgQW8gPSAib2Zmc2V0TGVm
dCIsCiAgICAgICAgQUUgPSAib2Zmc2V0VG9wIiwKICAgICAgICBBViA9ICJvZmZzZXRQYXJlbnQi
LAogICAgICAgIEcgPSAicGFyZW50Tm9kZSIsCiAgICAgICAgQWUgPSAibm9kZVR5cGUiLAogICAg
ICAgIEFRID0gInRhZ05hbWUiLAogICAgICAgIEFGID0gInNjcm9sbExlZnQiLAogICAgICAgIEFo
ID0gInNjcm9sbFRvcCIsCiAgICAgICAgQUQgPSAiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwKICAg
ICAgICBBVCA9ICJnZXRDb21wdXRlZFN0eWxlIiwKICAgICAgICBBcCA9ICJjdXJyZW50U3R5bGUi
LAogICAgICAgIEFIID0gIkNTUzFDb21wYXQiLAogICAgICAgIEFuID0gIkJhY2tDb21wYXQiLAog
ICAgICAgIEFqID0gImNsYXNzIiwKICAgICAgICBBTiA9ICJjbGFzc05hbWUiLAogICAgICAgIEFL
ID0gIiIsCiAgICAgICAgQVIgPSAiICIsCiAgICAgICAgQVggPSAiKD86XnxcXHMpIiwKICAgICAg
ICBBZiA9ICIoPz0gfCQpIiwKICAgICAgICB6ID0gImciLAogICAgICAgIEFhID0gInBvc2l0aW9u
IiwKICAgICAgICBBayA9ICJmaXhlZCIsCiAgICAgICAgeSA9ICJyZWxhdGl2ZSIsCiAgICAgICAg
QWcgPSAibGVmdCIsCiAgICAgICAgQWIgPSAidG9wIiwKICAgICAgICBBWSA9ICJtZWRpdW0iLAog
ICAgICAgIEFaID0gImJvcmRlckxlZnRXaWR0aCIsCiAgICAgICAgQUMgPSAiYm9yZGVyVG9wV2lk
dGgiLAogICAgICAgIEFQID0gQWQub3BlcmEsCiAgICAgICAgQUwgPSBBZC53ZWJraXQsCiAgICAg
ICAgQU0gPSBBZC5nZWNrbywKICAgICAgICBBQSA9IEFkLmllOwogICAgQU8uRG9tID0gewogICAg
ICAgIENVU1RPTV9BVFRSSUJVVEVTOiAoIXguaGFzQXR0cmlidXRlKSA/IHsKICAgICAgICAgICAg
ImZvciI6ICJodG1sRm9yIiwKICAgICAgICAgICAgImNsYXNzIjogQU4KICAgICAgICB9IDogewog
ICAgICAgICAgICBodG1sRm9yOiAiZm9yIiwKICAgICAgICAgICAgY2xhc3NOYW1lOiBBagogICAg
ICAgIH0sCiAgICAgICAgRE9UX0FUVFJJQlVURVM6IHt9LAogICAgICAgIGdldDogZnVuY3Rpb24g
KEYpIHsKICAgICAgICAgICAgdmFyIEMsIEEsIEUsIEgsIEQsIEI7CiAgICAgICAgICAgIGlmIChG
KSB7CiAgICAgICAgICAgICAgICBpZiAoRltBZV0gfHwgRi5pdGVtKSB7CiAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEYKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICh0eXBl
b2YgRiA9PT0gInN0cmluZyIpIHsKICAgICAgICAgICAgICAgICAgICBDID0gRjsKICAgICAgICAg
ICAgICAgICAgICBGID0gQUouZ2V0RWxlbWVudEJ5SWQoRik7CiAgICAgICAgICAgICAgICAgICAg
QiA9IChGKSA/IEYuYXR0cmlidXRlcyA6IG51bGw7CiAgICAgICAgICAgICAgICAgICAgaWYgKEYg
JiYgQiAmJiBCLmlkICYmIEIuaWQudmFsdWUgPT09IEMpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEYKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoRiAmJiBBSi5hbGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEYg
PSBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgQSA9IEFKLmFsbFtDXTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoSCA9IDAsIEQgPSBBLmxlbmd0aDsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEggPCBEOyArK0gpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoQVtIXS5pZCA9PT0gQykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gQVtIXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gRgogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgaWYgKFlBSE9PLnV0aWwuRWxlbWVudCAmJiBGIGluc3Rh
bmNlb2YgWUFIT08udXRpbC5FbGVtZW50KSB7CiAgICAgICAgICAgICAgICAgICAgRiA9IEYuZ2V0
KCJlbGVtZW50IikKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgibGVuZ3Ro
IiBpbiBGKSB7CiAgICAgICAgICAgICAgICAgICAgRSA9IFtdOwogICAgICAgICAgICAgICAgICAg
IGZvciAoSCA9IDAsIEQgPSBGLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICBIIDwgRDsgKytI
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEVbRS5sZW5ndGhdID0gQU8uRG9tLmdldChGW0hd
KQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gRQogICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIEYKICAgICAgICAgICAgfQogICAg
ICAgICAgICByZXR1cm4gbnVsbAogICAgICAgIH0sCiAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZTog
ZnVuY3Rpb24gKEEsIEIpIHsKICAgICAgICAgICAgaWYgKHdpbmRvd1tBVF0pIHsKICAgICAgICAg
ICAgICAgIHJldHVybiBBW0FsXVtBY11bQVRdKEEsIG51bGwpW0JdCiAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICBpZiAoQVtBcF0pIHsKICAgICAgICAgICAgICAgICAgICByZXR1
cm4gQU8uRG9tLklFX0NvbXB1dGVkU3R5bGUuZ2V0KEEsIEIpCiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGdldFN0eWxlOiBmdW5jdGlvbiAoQSwgQikg
ewogICAgICAgICAgICByZXR1cm4gQU8uRG9tLmJhdGNoKEEsIEFPLkRvbS5fZ2V0U3R5bGUsIEIp
CiAgICAgICAgfSwKICAgICAgICBfZ2V0U3R5bGU6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAg
aWYgKHdpbmRvd1tBVF0pIHsKICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoQiwgRCkg
ewogICAgICAgICAgICAgICAgICAgIEQgPSAoRCA9PT0gImZsb2F0IikgPyBEID0gImNzc0Zsb2F0
IiA6IEFPLkRvbS5fdG9DYW1lbChEKTsKICAgICAgICAgICAgICAgICAgICB2YXIgQSA9IEIuc3R5
bGVbRF0sCiAgICAgICAgICAgICAgICAgICAgICAgIEM7CiAgICAgICAgICAgICAgICAgICAgaWYg
KCFBKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEMgPSBCW0FsXVtBY11bQVRdKEIsIG51bGwp
OwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoQykgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQSA9IENbRF0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gQQogICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKHhbQXBdKSB7CiAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChCLCBFKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBBOwogICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKEUpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAib3BhY2l0eSI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
ID0gMTAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBBID0gQi5maWx0ZXJzWyJEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29m
dC5BbHBoYSJdLm9wYWNpdHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goRCkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEEgPSBCLmZpbHRlcnMoImFscGhhIikub3BhY2l0eQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goQykge30KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBIC8gMTAwOwog
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJmbG9hdCI6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBFID0gInN0eWxlRmxvYXQiOwogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgRSA9IEFPLkRvbS5fdG9DYW1lbChFKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEEgPSBCW0FwXSA/IEJbQXBdW0VdIDogbnVsbDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoQi5zdHlsZVtFXSB8fCBBKQogICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICB9CiAgICAgICAgfSAoKSwKICAgICAgICBzZXRTdHlsZTogZnVuY3Rpb24g
KEIsIEMsIEEpIHsKICAgICAgICAgICAgQU8uRG9tLmJhdGNoKEIsIEFPLkRvbS5fc2V0U3R5bGUs
IHsKICAgICAgICAgICAgICAgIHByb3A6IEMsCiAgICAgICAgICAgICAgICB2YWw6IEEKICAgICAg
ICAgICAgfSkKICAgICAgICB9LAogICAgICAgIF9zZXRTdHlsZTogZnVuY3Rpb24gKCkgewogICAg
ICAgICAgICBpZiAoQUEpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoQywgQikg
ewogICAgICAgICAgICAgICAgICAgIHZhciBBID0gQU8uRG9tLl90b0NhbWVsKEIucHJvcCksCiAg
ICAgICAgICAgICAgICAgICAgICAgIEQgPSBCLnZhbDsKICAgICAgICAgICAgICAgICAgICBpZiAo
QykgewogICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKEEpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSAib3BhY2l0eSI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
QUkuaXNTdHJpbmcoQy5zdHlsZS5maWx0ZXIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQy5zdHlsZS5maWx0ZXIgPSAiYWxwaGEob3BhY2l0eT0iICsgRCAqIDEwMCArICIpIjsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUNbQXBdIHx8ICFDW0FwXS5oYXNM
YXlvdXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQy5zdHlsZS56b29t
ID0gMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlICJmbG9hdCI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
ID0gInN0eWxlRmxvYXQiOwogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQy5zdHlsZVtBXSA9IEQKICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7fQogICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChDLCBCKSB7
CiAgICAgICAgICAgICAgICAgICAgdmFyIEEgPSBBTy5Eb20uX3RvQ2FtZWwoQi5wcm9wKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgRCA9IEIudmFsOwogICAgICAgICAgICAgICAgICAgIGlmIChD
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBID09ICJmbG9hdCIpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEEgPSAiY3NzRmxvYXQiCiAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgQy5zdHlsZVtBXSA9IEQKICAgICAgICAgICAgICAg
ICAgICB9IGVsc2Uge30KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0g
KCksCiAgICAgICAgZ2V0WFk6IGZ1bmN0aW9uIChBKSB7CiAgICAgICAgICAgIHJldHVybiBBTy5E
b20uYmF0Y2goQSwgQU8uRG9tLl9nZXRYWSkKICAgICAgICB9LAogICAgICAgIF9jYW5Qb3NpdGlv
bjogZnVuY3Rpb24gKEEpIHsKICAgICAgICAgICAgcmV0dXJuIChBTy5Eb20uX2dldFN0eWxlKEEs
ICJkaXNwbGF5IikgIT09ICJub25lIiAmJiBBTy5Eb20uX2luRG9jKEEpKQogICAgICAgIH0sCiAg
ICAgICAgX2dldFhZOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIGlmIChBSltBVV1bQURdKSB7
CiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKEspIHsKICAgICAgICAgICAgICAgICAg
ICB2YXIgSiwgQSwgSSwgQywgRCwgRSwgRiwgTSwgTCwgSCA9IE1hdGguZmxvb3IsCiAgICAgICAg
ICAgICAgICAgICAgICAgIEIgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBpZiAoQU8uRG9t
Ll9jYW5Qb3NpdGlvbihLKSkgewogICAgICAgICAgICAgICAgICAgICAgICBJID0gS1tBRF0oKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgQyA9IEtbQWxdOwogICAgICAgICAgICAgICAgICAgICAg
ICBKID0gQU8uRG9tLmdldERvY3VtZW50U2Nyb2xsTGVmdChDKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgQSA9IEFPLkRvbS5nZXREb2N1bWVudFNjcm9sbFRvcChDKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgQiA9IFtIKElbQWddKSwgSChJW0FiXSldOwogICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoQUEgJiYgQWQuaWUgPCA4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEID0g
MjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEUgPSAyOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRiA9IENbQVddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFkLmll
ID09PSA2KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEYgIT09IEFuKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQgPSAwOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBFID0gMAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICgoRiA9PT0gQW4pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TSA9IEFCKENbQVVdLCBBWik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTCA9IEFC
KENbQVVdLCBBQyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE0gIT09IEFZ
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQgPSBwYXJzZUludChNLCAx
MCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKEwgIT09IEFZKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEUgPSBwYXJzZUludChMLCAxMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBCWzBdIC09IEQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWzFdIC09IEUKICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEEgfHwg
SikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJbMF0gKz0gSjsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEJbMV0gKz0gQQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgIEJbMF0gPSBIKEJbMF0pOwogICAgICAgICAgICAgICAgICAgICAg
ICBCWzFdID0gSChCWzFdKQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7fQogICAgICAgICAg
ICAgICAgICAgIHJldHVybiBCCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKEkpIHsKICAgICAgICAgICAgICAgICAg
ICB2YXIgQSwgSCwgRiwgRCwgQywgRSA9IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICBC
ID0gSTsKICAgICAgICAgICAgICAgICAgICBpZiAoQU8uRG9tLl9jYW5Qb3NpdGlvbihJKSkgewog
ICAgICAgICAgICAgICAgICAgICAgICBFID0gW0lbQW9dLCBJW0FFXV07CiAgICAgICAgICAgICAg
ICAgICAgICAgIEEgPSBBTy5Eb20uZ2V0RG9jdW1lbnRTY3JvbGxMZWZ0KElbQWxdKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgSCA9IEFPLkRvbS5nZXREb2N1bWVudFNjcm9sbFRvcChJW0FsXSk7
CiAgICAgICAgICAgICAgICAgICAgICAgIEMgPSAoKEFNIHx8IEFkLndlYmtpdCA+IDUxOSkgPyB0
cnVlIDogZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKEIgPSBCW0FWXSkp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVbMF0gKz0gQltBb107CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBFWzFdICs9IEJbQUVdOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKEMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFID0gQU8uRG9tLl9j
YWxjQm9yZGVycyhCLCBFKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBTy5Eb20uX2dldFN0
eWxlKEksIEFhKSAhPT0gQWspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgPSBJOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChCID0gQltHXSkgJiYgQltBUV0pIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGID0gQltBaF07CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRCA9IEJbQUZdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChBTSAmJiAoQU8uRG9tLl9nZXRTdHlsZShCLCAib3ZlcmZsb3ciKSAhPT0gInZpc2li
bGUiKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFID0gQU8uRG9tLl9j
YWxjQm9yZGVycyhCLCBFKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRiB8fCBEKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEVbMF0gLT0gRDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRVsxXSAtPSBGCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgRVsw
XSArPSBBOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgRVsxXSArPSBICiAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQVAp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWzBdIC09IEE7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRVsxXSAtPSBICiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBTCB8fCBBTSkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWzBdICs9IEE7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVbMV0gKz0gSAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBFWzBdID0gTWF0aC5mbG9vcihF
WzBdKTsKICAgICAgICAgICAgICAgICAgICAgICAgRVsxXSA9IE1hdGguZmxvb3IoRVsxXSkKICAg
ICAgICAgICAgICAgICAgICB9IGVsc2Uge30KICAgICAgICAgICAgICAgICAgICByZXR1cm4gRQog
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSAoKSwKICAgICAgICBnZXRY
OiBmdW5jdGlvbiAoQSkgewogICAgICAgICAgICB2YXIgQiA9IGZ1bmN0aW9uIChDKSB7CiAgICAg
ICAgICAgICAgICByZXR1cm4gQU8uRG9tLmdldFhZKEMpWzBdCiAgICAgICAgICAgIH07CiAgICAg
ICAgICAgIHJldHVybiBBTy5Eb20uYmF0Y2goQSwgQiwgQU8uRG9tLCB0cnVlKQogICAgICAgIH0s
CiAgICAgICAgZ2V0WTogZnVuY3Rpb24gKEEpIHsKICAgICAgICAgICAgdmFyIEIgPSBmdW5jdGlv
biAoQykgewogICAgICAgICAgICAgICAgcmV0dXJuIEFPLkRvbS5nZXRYWShDKVsxXQogICAgICAg
ICAgICB9OwogICAgICAgICAgICByZXR1cm4gQU8uRG9tLmJhdGNoKEEsIEIsIEFPLkRvbSwgdHJ1
ZSkKICAgICAgICB9LAogICAgICAgIHNldFhZOiBmdW5jdGlvbiAoQiwgQSwgQykgewogICAgICAg
ICAgICBBTy5Eb20uYmF0Y2goQiwgQU8uRG9tLl9zZXRYWSwgewogICAgICAgICAgICAgICAgcG9z
OiBBLAogICAgICAgICAgICAgICAgbm9SZXRyeTogQwogICAgICAgICAgICB9KQogICAgICAgIH0s
CiAgICAgICAgX3NldFhZOiBmdW5jdGlvbiAoSiwgRikgewogICAgICAgICAgICB2YXIgRSA9IEFP
LkRvbS5fZ2V0U3R5bGUoSiwgQWEpLAogICAgICAgICAgICAgICAgSCA9IEFPLkRvbS5zZXRTdHls
ZSwKICAgICAgICAgICAgICAgIEIgPSBGLnBvcywKICAgICAgICAgICAgICAgIEEgPSBGLm5vUmV0
cnksCiAgICAgICAgICAgICAgICBEID0gW3BhcnNlSW50KEFPLkRvbS5nZXRDb21wdXRlZFN0eWxl
KEosIEFnKSwgMTApLCBwYXJzZUludChBTy5Eb20uZ2V0Q29tcHV0ZWRTdHlsZShKLCBBYiksIDEw
KV0sCiAgICAgICAgICAgICAgICBDLCBJOwogICAgICAgICAgICBpZiAoRSA9PSAic3RhdGljIikg
ewogICAgICAgICAgICAgICAgRSA9IHk7CiAgICAgICAgICAgICAgICBIKEosIEFhLCBFKQogICAg
ICAgICAgICB9CiAgICAgICAgICAgIEMgPSBBTy5Eb20uX2dldFhZKEopOwogICAgICAgICAgICBp
ZiAoIUIgfHwgQyA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZQogICAg
ICAgICAgICB9CiAgICAgICAgICAgIGlmIChpc05hTihEWzBdKSkgewogICAgICAgICAgICAgICAg
RFswXSA9IChFID09IHkpID8gMCA6IEpbQW9dCiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYg
KGlzTmFOKERbMV0pKSB7CiAgICAgICAgICAgICAgICBEWzFdID0gKEUgPT0geSkgPyAwIDogSltB
RV0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoQlswXSAhPT0gbnVsbCkgewogICAgICAg
ICAgICAgICAgSChKLCBBZywgQlswXSAtIENbMF0gKyBEWzBdICsgInB4IikKICAgICAgICAgICAg
fQogICAgICAgICAgICBpZiAoQlsxXSAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgSChKLCBB
YiwgQlsxXSAtIENbMV0gKyBEWzFdICsgInB4IikKICAgICAgICAgICAgfQogICAgICAgICAgICBp
ZiAoIUEpIHsKICAgICAgICAgICAgICAgIEkgPSBBTy5Eb20uX2dldFhZKEopOwogICAgICAgICAg
ICAgICAgaWYgKChCWzBdICE9PSBudWxsICYmIElbMF0gIT0gQlswXSkgfHwgKEJbMV0gIT09IG51
bGwgJiYgSVsxXSAhPSBCWzFdKSkgewogICAgICAgICAgICAgICAgICAgIEFPLkRvbS5fc2V0WFko
SiwgewogICAgICAgICAgICAgICAgICAgICAgICBwb3M6IEIsCiAgICAgICAgICAgICAgICAgICAg
ICAgIG5vUmV0cnk6IHRydWUKICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBzZXRYOiBmdW5jdGlvbiAoQiwgQSkg
ewogICAgICAgICAgICBBTy5Eb20uc2V0WFkoQiwgW0EsIG51bGxdKQogICAgICAgIH0sCiAgICAg
ICAgc2V0WTogZnVuY3Rpb24gKEEsIEIpIHsKICAgICAgICAgICAgQU8uRG9tLnNldFhZKEEsIFtu
dWxsLCBCXSkKICAgICAgICB9LAogICAgICAgIGdldFJlZ2lvbjogZnVuY3Rpb24gKEEpIHsKICAg
ICAgICAgICAgdmFyIEIgPSBmdW5jdGlvbiAoQykgewogICAgICAgICAgICAgICAgdmFyIEQgPSBm
YWxzZTsKICAgICAgICAgICAgICAgIGlmIChBTy5Eb20uX2NhblBvc2l0aW9uKEMpKSB7CiAgICAg
ICAgICAgICAgICAgICAgRCA9IEFPLlJlZ2lvbi5nZXRSZWdpb24oQykKICAgICAgICAgICAgICAg
IH0gZWxzZSB7fQogICAgICAgICAgICAgICAgcmV0dXJuIEQKICAgICAgICAgICAgfTsKICAgICAg
ICAgICAgcmV0dXJuIEFPLkRvbS5iYXRjaChBLCBCLCBBTy5Eb20sIHRydWUpCiAgICAgICAgfSwK
ICAgICAgICBnZXRDbGllbnRXaWR0aDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4g
QU8uRG9tLmdldFZpZXdwb3J0V2lkdGgoKQogICAgICAgIH0sCiAgICAgICAgZ2V0Q2xpZW50SGVp
Z2h0OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVybiBBTy5Eb20uZ2V0Vmlld3BvcnRI
ZWlnaHQoKQogICAgICAgIH0sCiAgICAgICAgZ2V0RWxlbWVudHNCeUNsYXNzTmFtZTogZnVuY3Rp
b24gKEYsIEIsIEUsIEMsIEssIEQpIHsKICAgICAgICAgICAgQiA9IEIgfHwgIioiOwogICAgICAg
ICAgICBFID0gKEUpID8gQU8uRG9tLmdldChFKSA6IG51bGwgfHwgQUo7CiAgICAgICAgICAgIGlm
ICghRSkgewogICAgICAgICAgICAgICAgcmV0dXJuIFtdCiAgICAgICAgICAgIH0KICAgICAgICAg
ICAgdmFyIEEgPSBbXSwKICAgICAgICAgICAgICAgIEwgPSBFLmdldEVsZW1lbnRzQnlUYWdOYW1l
KEIpLAogICAgICAgICAgICAgICAgSSA9IEFPLkRvbS5oYXNDbGFzczsKICAgICAgICAgICAgZm9y
ICh2YXIgSiA9IDAsIEggPSBMLmxlbmd0aDsKICAgICAgICAgICAgSiA8IEg7ICsrSikgewogICAg
ICAgICAgICAgICAgaWYgKEkoTFtKXSwgRikpIHsKICAgICAgICAgICAgICAgICAgICBBW0EubGVu
Z3RoXSA9IExbSl0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBp
ZiAoQykgewogICAgICAgICAgICAgICAgQU8uRG9tLmJhdGNoKEEsIEMsIEssIEQpCiAgICAgICAg
ICAgIH0KICAgICAgICAgICAgcmV0dXJuIEEKICAgICAgICB9LAogICAgICAgIGhhc0NsYXNzOiBm
dW5jdGlvbiAoQiwgQSkgewogICAgICAgICAgICByZXR1cm4gQU8uRG9tLmJhdGNoKEIsIEFPLkRv
bS5faGFzQ2xhc3MsIEEpCiAgICAgICAgfSwKICAgICAgICBfaGFzQ2xhc3M6IGZ1bmN0aW9uIChB
LCBDKSB7CiAgICAgICAgICAgIHZhciBCID0gZmFsc2UsCiAgICAgICAgICAgICAgICBEOwogICAg
ICAgICAgICBpZiAoQSAmJiBDKSB7CiAgICAgICAgICAgICAgICBEID0gQU8uRG9tLl9nZXRBdHRy
aWJ1dGUoQSwgQU4pIHx8IEFLOwogICAgICAgICAgICAgICAgaWYgKEMuZXhlYykgewogICAgICAg
ICAgICAgICAgICAgIEIgPSBDLnRlc3QoRCkKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAgICAgICAgQiA9IEMgJiYgKEFSICsgRCArIEFSKS5pbmRleE9mKEFSICsgQyArIEFS
KSA+IC0xCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7fQogICAgICAgICAg
ICByZXR1cm4gQgogICAgICAgIH0sCiAgICAgICAgYWRkQ2xhc3M6IGZ1bmN0aW9uIChCLCBBKSB7
CiAgICAgICAgICAgIHJldHVybiBBTy5Eb20uYmF0Y2goQiwgQU8uRG9tLl9hZGRDbGFzcywgQSkK
ICAgICAgICB9LAogICAgICAgIF9hZGRDbGFzczogZnVuY3Rpb24gKEEsIEMpIHsKICAgICAgICAg
ICAgdmFyIEIgPSBmYWxzZSwKICAgICAgICAgICAgICAgIEQ7CiAgICAgICAgICAgIGlmIChBICYm
IEMpIHsKICAgICAgICAgICAgICAgIEQgPSBBTy5Eb20uX2dldEF0dHJpYnV0ZShBLCBBTikgfHwg
QUs7CiAgICAgICAgICAgICAgICBpZiAoIUFPLkRvbS5faGFzQ2xhc3MoQSwgQykpIHsKICAgICAg
ICAgICAgICAgICAgICBBTy5Eb20uc2V0QXR0cmlidXRlKEEsIEFOLCBBUyhEICsgQVIgKyBDKSk7
CiAgICAgICAgICAgICAgICAgICAgQiA9IHRydWUKICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgfSBlbHNlIHt9CiAgICAgICAgICAgIHJldHVybiBCCiAgICAgICAgfSwKICAgICAgICByZW1v
dmVDbGFzczogZnVuY3Rpb24gKEIsIEEpIHsKICAgICAgICAgICAgcmV0dXJuIEFPLkRvbS5iYXRj
aChCLCBBTy5Eb20uX3JlbW92ZUNsYXNzLCBBKQogICAgICAgIH0sCiAgICAgICAgX3JlbW92ZUNs
YXNzOiBmdW5jdGlvbiAoRiwgQSkgewogICAgICAgICAgICB2YXIgRSA9IGZhbHNlLAogICAgICAg
ICAgICAgICAgRCwgQywgQjsKICAgICAgICAgICAgaWYgKEYgJiYgQSkgewogICAgICAgICAgICAg
ICAgRCA9IEFPLkRvbS5fZ2V0QXR0cmlidXRlKEYsIEFOKSB8fCBBSzsKICAgICAgICAgICAgICAg
IEFPLkRvbS5zZXRBdHRyaWJ1dGUoRiwgQU4sIEQucmVwbGFjZShBTy5Eb20uX2dldENsYXNzUmVn
ZXgoQSksIEFLKSk7CiAgICAgICAgICAgICAgICBDID0gQU8uRG9tLl9nZXRBdHRyaWJ1dGUoRiwg
QU4pOwogICAgICAgICAgICAgICAgaWYgKEQgIT09IEMpIHsKICAgICAgICAgICAgICAgICAgICBB
Ty5Eb20uc2V0QXR0cmlidXRlKEYsIEFOLCBBUyhDKSk7CiAgICAgICAgICAgICAgICAgICAgRSA9
IHRydWU7CiAgICAgICAgICAgICAgICAgICAgaWYgKEFPLkRvbS5fZ2V0QXR0cmlidXRlKEYsIEFO
KSA9PT0gIiIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgQiA9IChGLmhhc0F0dHJpYnV0ZSAm
JiBGLmhhc0F0dHJpYnV0ZShBaikpID8gQWogOiBBTjsKICAgICAgICAgICAgICAgICAgICAgICAg
Ri5yZW1vdmVBdHRyaWJ1dGUoQikKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgIH0gZWxzZSB7fQogICAgICAgICAgICByZXR1cm4gRQogICAgICAgIH0s
CiAgICAgICAgcmVwbGFjZUNsYXNzOiBmdW5jdGlvbiAoQSwgQywgQikgewogICAgICAgICAgICBy
ZXR1cm4gQU8uRG9tLmJhdGNoKEEsIEFPLkRvbS5fcmVwbGFjZUNsYXNzLCB7CiAgICAgICAgICAg
ICAgICBmcm9tOiBDLAogICAgICAgICAgICAgICAgdG86IEIKICAgICAgICAgICAgfSkKICAgICAg
ICB9LAogICAgICAgIF9yZXBsYWNlQ2xhc3M6IGZ1bmN0aW9uIChILCBBKSB7CiAgICAgICAgICAg
IHZhciBGLCBDLCBFLCBCID0gZmFsc2UsCiAgICAgICAgICAgICAgICBEOwogICAgICAgICAgICBp
ZiAoSCAmJiBBKSB7CiAgICAgICAgICAgICAgICBDID0gQS5mcm9tOwogICAgICAgICAgICAgICAg
RSA9IEEudG87CiAgICAgICAgICAgICAgICBpZiAoIUUpIHsKICAgICAgICAgICAgICAgICAgICBC
ID0gZmFsc2UKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgaWYg
KCFDKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEIgPSBBTy5Eb20uX2FkZENsYXNzKEgsIEEu
dG8pCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKEMgIT09IEUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQgPSBBTy5Eb20uX2dl
dEF0dHJpYnV0ZShILCBBTikgfHwgQUs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGID0g
KEFSICsgRC5yZXBsYWNlKEFPLkRvbS5fZ2V0Q2xhc3NSZWdleChDKSwgQVIgKyBFKSkuc3BsaXQo
QU8uRG9tLl9nZXRDbGFzc1JlZ2V4KEUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEYu
c3BsaWNlKDEsIDAsIEFSICsgRSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTy5Eb20u
c2V0QXR0cmlidXRlKEgsIEFOLCBBUyhGLmpvaW4oQUspKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBCID0gdHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2Uge30KICAgICAgICAg
ICAgcmV0dXJuIEIKICAgICAgICB9LAogICAgICAgIGdlbmVyYXRlSWQ6IGZ1bmN0aW9uIChCLCBB
KSB7CiAgICAgICAgICAgIEEgPSBBIHx8ICJ5dWktZ2VuIjsKICAgICAgICAgICAgdmFyIEMgPSBm
dW5jdGlvbiAoRSkgewogICAgICAgICAgICAgICAgaWYgKEUgJiYgRS5pZCkgewogICAgICAgICAg
ICAgICAgICAgIHJldHVybiBFLmlkCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB2
YXIgRCA9IEEgKyBZQUhPTy5lbnYuX2lkX2NvdW50ZXIrKzsKICAgICAgICAgICAgICAgIGlmIChF
KSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKEVbQWxdICYmIEVbQWxdLmdldEVsZW1lbnRCeUlk
KEQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBTy5Eb20uZ2VuZXJhdGVJZChF
LCBEICsgQSkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgRS5pZCA9
IEQKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBECiAgICAgICAgICAg
IH07CiAgICAgICAgICAgIHJldHVybiBBTy5Eb20uYmF0Y2goQiwgQywgQU8uRG9tLCB0cnVlKSB8
fCBDLmFwcGx5KEFPLkRvbSwgYXJndW1lbnRzKQogICAgICAgIH0sCiAgICAgICAgaXNBbmNlc3Rv
cjogZnVuY3Rpb24gKEMsIEEpIHsKICAgICAgICAgICAgQyA9IEFPLkRvbS5nZXQoQyk7CiAgICAg
ICAgICAgIEEgPSBBTy5Eb20uZ2V0KEEpOwogICAgICAgICAgICB2YXIgQiA9IGZhbHNlOwogICAg
ICAgICAgICBpZiAoKEMgJiYgQSkgJiYgKENbQWVdICYmIEFbQWVdKSkgewogICAgICAgICAgICAg
ICAgaWYgKEMuY29udGFpbnMgJiYgQyAhPT0gQSkgewogICAgICAgICAgICAgICAgICAgIEIgPSBD
LmNvbnRhaW5zKEEpCiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg
IGlmIChDLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IEIgPSAhIShDLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKEEpICYgMTYpCiAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2Uge30KICAgICAgICAg
ICAgcmV0dXJuIEIKICAgICAgICB9LAogICAgICAgIGluRG9jdW1lbnQ6IGZ1bmN0aW9uIChBLCBC
KSB7CiAgICAgICAgICAgIHJldHVybiBBTy5Eb20uX2luRG9jKEFPLkRvbS5nZXQoQSksIEIpCiAg
ICAgICAgfSwKICAgICAgICBfaW5Eb2M6IGZ1bmN0aW9uIChDLCBBKSB7CiAgICAgICAgICAgIHZh
ciBCID0gZmFsc2U7CiAgICAgICAgICAgIGlmIChDICYmIENbQVFdKSB7CiAgICAgICAgICAgICAg
ICBBID0gQSB8fCBDW0FsXTsKICAgICAgICAgICAgICAgIEIgPSBBTy5Eb20uaXNBbmNlc3RvcihB
W0FVXSwgQykKICAgICAgICAgICAgfSBlbHNlIHt9CiAgICAgICAgICAgIHJldHVybiBCCiAgICAg
ICAgfSwKICAgICAgICBnZXRFbGVtZW50c0J5OiBmdW5jdGlvbiAoQSwgQiwgRiwgRCwgSiwgRSwg
QykgewogICAgICAgICAgICBCID0gQiB8fCAiKiI7CiAgICAgICAgICAgIEYgPSAoRikgPyBBTy5E
b20uZ2V0KEYpIDogbnVsbCB8fCBBSjsKICAgICAgICAgICAgaWYgKCFGKSB7CiAgICAgICAgICAg
ICAgICByZXR1cm4gW10KICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgSyA9IFtdLAogICAg
ICAgICAgICAgICAgTCA9IEYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoQik7CiAgICAgICAgICAgIGZv
ciAodmFyIEkgPSAwLCBIID0gTC5sZW5ndGg7CiAgICAgICAgICAgIEkgPCBIOyArK0kpIHsKICAg
ICAgICAgICAgICAgIGlmIChBKExbSV0pKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKEMpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgSyA9IExbSV07CiAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgS1tLLmxlbmd0aF0gPSBMW0ldCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChEKSB7CiAgICAgICAgICAgICAgICBB
Ty5Eb20uYmF0Y2goSywgRCwgSiwgRSkKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4g
SwogICAgICAgIH0sCiAgICAgICAgZ2V0RWxlbWVudEJ5OiBmdW5jdGlvbiAoQSwgQiwgQykgewog
ICAgICAgICAgICByZXR1cm4gQU8uRG9tLmdldEVsZW1lbnRzQnkoQSwgQiwgQywgbnVsbCwgbnVs
bCwgbnVsbCwgdHJ1ZSkKICAgICAgICB9LAogICAgICAgIGJhdGNoOiBmdW5jdGlvbiAoQSwgQywg
RiwgRSkgewogICAgICAgICAgICB2YXIgSCA9IFtdLAogICAgICAgICAgICAgICAgRCA9IChFKSA/
IEYgOiB3aW5kb3c7CiAgICAgICAgICAgIEEgPSAoQSAmJiAoQVtBUV0gfHwgQS5pdGVtKSkgPyBB
IDogQU8uRG9tLmdldChBKTsKICAgICAgICAgICAgaWYgKEEgJiYgQykgewogICAgICAgICAgICAg
ICAgaWYgKEFbQVFdIHx8IEEubGVuZ3RoID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gQy5jYWxsKEQsIEEsIEYpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICBmb3IgKHZhciBCID0gMDsKICAgICAgICAgICAgICAgIEIgPCBBLmxlbmd0aDsgKytCKSB7
CiAgICAgICAgICAgICAgICAgICAgSFtILmxlbmd0aF0gPSBDLmNhbGwoRCwgQVtCXSwgRikKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBICiAgICAgICAgfSwKICAg
ICAgICBnZXREb2N1bWVudEhlaWdodDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgQiA9
IChBSltBV10gIT0gQUggfHwgQUwpID8gQUouYm9keS5zY3JvbGxIZWlnaHQgOiB4LnNjcm9sbEhl
aWdodCwKICAgICAgICAgICAgQSA9IE1hdGgubWF4KEIsIEFPLkRvbS5nZXRWaWV3cG9ydEhlaWdo
dCgpKTsKICAgICAgICAgICAgcmV0dXJuIEEKICAgICAgICB9LAogICAgICAgIGdldERvY3VtZW50
V2lkdGg6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIEIgPSAoQUpbQVddICE9IEFIIHx8
IEFMKSA/IEFKLmJvZHkuc2Nyb2xsV2lkdGggOiB4LnNjcm9sbFdpZHRoLAogICAgICAgICAgICBB
ID0gTWF0aC5tYXgoQiwgQU8uRG9tLmdldFZpZXdwb3J0V2lkdGgoKSk7CiAgICAgICAgICAgIHJl
dHVybiBBCiAgICAgICAgfSwKICAgICAgICBnZXRWaWV3cG9ydEhlaWdodDogZnVuY3Rpb24gKCkg
ewogICAgICAgICAgICB2YXIgQSA9IHNlbGYuaW5uZXJIZWlnaHQsCiAgICAgICAgICAgICAgICBC
ID0gQUpbQVddOwogICAgICAgICAgICBpZiAoKEIgfHwgQUEpICYmICFBUCkgewogICAgICAgICAg
ICAgICAgQSA9IChCID09IEFIKSA/IHguY2xpZW50SGVpZ2h0IDogQUouYm9keS5jbGllbnRIZWln
aHQKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gQQogICAgICAgIH0sCiAgICAgICAg
Z2V0Vmlld3BvcnRXaWR0aDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgQSA9IHNlbGYu
aW5uZXJXaWR0aCwKICAgICAgICAgICAgICAgIEIgPSBBSltBV107CiAgICAgICAgICAgIGlmIChC
IHx8IEFBKSB7CiAgICAgICAgICAgICAgICBBID0gKEIgPT0gQUgpID8geC5jbGllbnRXaWR0aCA6
IEFKLmJvZHkuY2xpZW50V2lkdGgKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gQQog
ICAgICAgIH0sCiAgICAgICAgZ2V0QW5jZXN0b3JCeTogZnVuY3Rpb24gKEEsIEIpIHsKICAgICAg
ICAgICAgd2hpbGUgKChBID0gQVtHXSkpIHsKICAgICAgICAgICAgICAgIGlmIChBTy5Eb20uX3Rl
c3RFbGVtZW50KEEsIEIpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEEKICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gbnVsbAogICAgICAgIH0s
CiAgICAgICAgZ2V0QW5jZXN0b3JCeUNsYXNzTmFtZTogZnVuY3Rpb24gKEMsIEIpIHsKICAgICAg
ICAgICAgQyA9IEFPLkRvbS5nZXQoQyk7CiAgICAgICAgICAgIGlmICghQykgewogICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGwKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgQSA9IGZ1bmN0
aW9uIChEKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gQU8uRG9tLmhhc0NsYXNzKEQsIEIpCiAg
ICAgICAgICAgIH07CiAgICAgICAgICAgIHJldHVybiBBTy5Eb20uZ2V0QW5jZXN0b3JCeShDLCBB
KQogICAgICAgIH0sCiAgICAgICAgZ2V0QW5jZXN0b3JCeVRhZ05hbWU6IGZ1bmN0aW9uIChDLCBC
KSB7CiAgICAgICAgICAgIEMgPSBBTy5Eb20uZ2V0KEMpOwogICAgICAgICAgICBpZiAoIUMpIHsK
ICAgICAgICAgICAgICAgIHJldHVybiBudWxsCiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFy
IEEgPSBmdW5jdGlvbiAoRCkgewogICAgICAgICAgICAgICAgcmV0dXJuIERbQVFdICYmIERbQVFd
LnRvVXBwZXJDYXNlKCkgPT0gQi50b1VwcGVyQ2FzZSgpCiAgICAgICAgICAgIH07CiAgICAgICAg
ICAgIHJldHVybiBBTy5Eb20uZ2V0QW5jZXN0b3JCeShDLCBBKQogICAgICAgIH0sCiAgICAgICAg
Z2V0UHJldmlvdXNTaWJsaW5nQnk6IGZ1bmN0aW9uIChBLCBCKSB7CiAgICAgICAgICAgIHdoaWxl
IChBKSB7CiAgICAgICAgICAgICAgICBBID0gQS5wcmV2aW91c1NpYmxpbmc7CiAgICAgICAgICAg
ICAgICBpZiAoQU8uRG9tLl90ZXN0RWxlbWVudChBLCBCKSkgewogICAgICAgICAgICAgICAgICAg
IHJldHVybiBBCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0
dXJuIG51bGwKICAgICAgICB9LAogICAgICAgIGdldFByZXZpb3VzU2libGluZzogZnVuY3Rpb24g
KEEpIHsKICAgICAgICAgICAgQSA9IEFPLkRvbS5nZXQoQSk7CiAgICAgICAgICAgIGlmICghQSkg
ewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGwKICAgICAgICAgICAgfQogICAgICAgICAgICBy
ZXR1cm4gQU8uRG9tLmdldFByZXZpb3VzU2libGluZ0J5KEEpCiAgICAgICAgfSwKICAgICAgICBn
ZXROZXh0U2libGluZ0J5OiBmdW5jdGlvbiAoQSwgQikgewogICAgICAgICAgICB3aGlsZSAoQSkg
ewogICAgICAgICAgICAgICAgQSA9IEEubmV4dFNpYmxpbmc7CiAgICAgICAgICAgICAgICBpZiAo
QU8uRG9tLl90ZXN0RWxlbWVudChBLCBCKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBB
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIG51bGwK
ICAgICAgICB9LAogICAgICAgIGdldE5leHRTaWJsaW5nOiBmdW5jdGlvbiAoQSkgewogICAgICAg
ICAgICBBID0gQU8uRG9tLmdldChBKTsKICAgICAgICAgICAgaWYgKCFBKSB7CiAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbAogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBBTy5Eb20u
Z2V0TmV4dFNpYmxpbmdCeShBKQogICAgICAgIH0sCiAgICAgICAgZ2V0Rmlyc3RDaGlsZEJ5OiBm
dW5jdGlvbiAoQiwgQSkgewogICAgICAgICAgICB2YXIgQyA9IChBTy5Eb20uX3Rlc3RFbGVtZW50
KEIuZmlyc3RDaGlsZCwgQSkpID8gQi5maXJzdENoaWxkIDogbnVsbDsKICAgICAgICAgICAgcmV0
dXJuIEMgfHwgQU8uRG9tLmdldE5leHRTaWJsaW5nQnkoQi5maXJzdENoaWxkLCBBKQogICAgICAg
IH0sCiAgICAgICAgZ2V0Rmlyc3RDaGlsZDogZnVuY3Rpb24gKEEsIEIpIHsKICAgICAgICAgICAg
QSA9IEFPLkRvbS5nZXQoQSk7CiAgICAgICAgICAgIGlmICghQSkgewogICAgICAgICAgICAgICAg
cmV0dXJuIG51bGwKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gQU8uRG9tLmdldEZp
cnN0Q2hpbGRCeShBKQogICAgICAgIH0sCiAgICAgICAgZ2V0TGFzdENoaWxkQnk6IGZ1bmN0aW9u
IChCLCBBKSB7CiAgICAgICAgICAgIGlmICghQikgewogICAgICAgICAgICAgICAgcmV0dXJuIG51
bGwKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgQyA9IChBTy5Eb20uX3Rlc3RFbGVtZW50
KEIubGFzdENoaWxkLCBBKSkgPyBCLmxhc3RDaGlsZCA6IG51bGw7CiAgICAgICAgICAgIHJldHVy
biBDIHx8IEFPLkRvbS5nZXRQcmV2aW91c1NpYmxpbmdCeShCLmxhc3RDaGlsZCwgQSkKICAgICAg
ICB9LAogICAgICAgIGdldExhc3RDaGlsZDogZnVuY3Rpb24gKEEpIHsKICAgICAgICAgICAgQSA9
IEFPLkRvbS5nZXQoQSk7CiAgICAgICAgICAgIHJldHVybiBBTy5Eb20uZ2V0TGFzdENoaWxkQnko
QSkKICAgICAgICB9LAogICAgICAgIGdldENoaWxkcmVuQnk6IGZ1bmN0aW9uIChDLCBEKSB7CiAg
ICAgICAgICAgIHZhciBBID0gQU8uRG9tLmdldEZpcnN0Q2hpbGRCeShDLCBEKSwKICAgICAgICAg
ICAgICAgIEIgPSBBID8gW0FdIDogW107CiAgICAgICAgICAgIEFPLkRvbS5nZXROZXh0U2libGlu
Z0J5KEEsIGZ1bmN0aW9uIChFKSB7CiAgICAgICAgICAgICAgICBpZiAoIUQgfHwgRChFKSkgewog
ICAgICAgICAgICAgICAgICAgIEJbQi5sZW5ndGhdID0gRQogICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICByZXR1
cm4gQgogICAgICAgIH0sCiAgICAgICAgZ2V0Q2hpbGRyZW46IGZ1bmN0aW9uIChBKSB7CiAgICAg
ICAgICAgIEEgPSBBTy5Eb20uZ2V0KEEpOwogICAgICAgICAgICBpZiAoIUEpIHt9CiAgICAgICAg
ICAgIHJldHVybiBBTy5Eb20uZ2V0Q2hpbGRyZW5CeShBKQogICAgICAgIH0sCiAgICAgICAgZ2V0
RG9jdW1lbnRTY3JvbGxMZWZ0OiBmdW5jdGlvbiAoQSkgewogICAgICAgICAgICBBID0gQSB8fCBB
SjsKICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KEFbQVVdLnNjcm9sbExlZnQsIEEuYm9keS5z
Y3JvbGxMZWZ0KQogICAgICAgIH0sCiAgICAgICAgZ2V0RG9jdW1lbnRTY3JvbGxUb3A6IGZ1bmN0
aW9uIChBKSB7CiAgICAgICAgICAgIEEgPSBBIHx8IEFKOwogICAgICAgICAgICByZXR1cm4gTWF0
aC5tYXgoQVtBVV0uc2Nyb2xsVG9wLCBBLmJvZHkuc2Nyb2xsVG9wKQogICAgICAgIH0sCiAgICAg
ICAgaW5zZXJ0QmVmb3JlOiBmdW5jdGlvbiAoQiwgQSkgewogICAgICAgICAgICBCID0gQU8uRG9t
LmdldChCKTsKICAgICAgICAgICAgQSA9IEFPLkRvbS5nZXQoQSk7CiAgICAgICAgICAgIGlmICgh
QiB8fCAhQSB8fCAhQVtHXSkgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGwKICAgICAgICAg
ICAgfQogICAgICAgICAgICByZXR1cm4gQVtHXS5pbnNlcnRCZWZvcmUoQiwgQSkKICAgICAgICB9
LAogICAgICAgIGluc2VydEFmdGVyOiBmdW5jdGlvbiAoQiwgQSkgewogICAgICAgICAgICBCID0g
QU8uRG9tLmdldChCKTsKICAgICAgICAgICAgQSA9IEFPLkRvbS5nZXQoQSk7CiAgICAgICAgICAg
IGlmICghQiB8fCAhQSB8fCAhQVtHXSkgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGwKICAg
ICAgICAgICAgfQogICAgICAgICAgICBpZiAoQS5uZXh0U2libGluZykgewogICAgICAgICAgICAg
ICAgcmV0dXJuIEFbR10uaW5zZXJ0QmVmb3JlKEIsIEEubmV4dFNpYmxpbmcpCiAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gQVtHXS5hcHBlbmRDaGlsZChCKQogICAg
ICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBnZXRDbGllbnRSZWdpb246IGZ1bmN0aW9uICgp
IHsKICAgICAgICAgICAgdmFyIEEgPSBBTy5Eb20uZ2V0RG9jdW1lbnRTY3JvbGxUb3AoKSwKICAg
ICAgICAgICAgICAgIEMgPSBBTy5Eb20uZ2V0RG9jdW1lbnRTY3JvbGxMZWZ0KCksCiAgICAgICAg
ICAgICAgICBEID0gQU8uRG9tLmdldFZpZXdwb3J0V2lkdGgoKSArIEMsCiAgICAgICAgICAgICAg
ICBCID0gQU8uRG9tLmdldFZpZXdwb3J0SGVpZ2h0KCkgKyBBOwogICAgICAgICAgICByZXR1cm4g
bmV3IEFPLlJlZ2lvbihBLCBELCBCLCBDKQogICAgICAgIH0sCiAgICAgICAgc2V0QXR0cmlidXRl
OiBmdW5jdGlvbiAoQywgQiwgQSkgewogICAgICAgICAgICBBTy5Eb20uYmF0Y2goQywgQU8uRG9t
Ll9zZXRBdHRyaWJ1dGUsIHsKICAgICAgICAgICAgICAgIGF0dHI6IEIsCiAgICAgICAgICAgICAg
ICB2YWw6IEEKICAgICAgICAgICAgfSkKICAgICAgICB9LAogICAgICAgIF9zZXRBdHRyaWJ1dGU6
IGZ1bmN0aW9uIChBLCBDKSB7CiAgICAgICAgICAgIHZhciBCID0gQU8uRG9tLl90b0NhbWVsKEMu
YXR0ciksCiAgICAgICAgICAgICAgICBEID0gQy52YWw7CiAgICAgICAgICAgIGlmIChBICYmIEEu
c2V0QXR0cmlidXRlKSB7CiAgICAgICAgICAgICAgICBpZiAoQU8uRG9tLkRPVF9BVFRSSUJVVEVT
W0JdKSB7CiAgICAgICAgICAgICAgICAgICAgQVtCXSA9IEQKICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgICAgQiA9IEFPLkRvbS5DVVNUT01fQVRUUklCVVRFU1tCXSB8
fCBCOwogICAgICAgICAgICAgICAgICAgIEEuc2V0QXR0cmlidXRlKEIsIEQpCiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7fQogICAgICAgIH0sCiAgICAgICAgZ2V0QXR0cmli
dXRlOiBmdW5jdGlvbiAoQiwgQSkgewogICAgICAgICAgICByZXR1cm4gQU8uRG9tLmJhdGNoKEIs
IEFPLkRvbS5fZ2V0QXR0cmlidXRlLCBBKQogICAgICAgIH0sCiAgICAgICAgX2dldEF0dHJpYnV0
ZTogZnVuY3Rpb24gKEMsIEIpIHsKICAgICAgICAgICAgdmFyIEE7CiAgICAgICAgICAgIEIgPSBB
Ty5Eb20uQ1VTVE9NX0FUVFJJQlVURVNbQl0gfHwgQjsKICAgICAgICAgICAgaWYgKEMgJiYgQy5n
ZXRBdHRyaWJ1dGUpIHsKICAgICAgICAgICAgICAgIEEgPSBDLmdldEF0dHJpYnV0ZShCLCAyKQog
ICAgICAgICAgICB9IGVsc2Uge30KICAgICAgICAgICAgcmV0dXJuIEEKICAgICAgICB9LAogICAg
ICAgIF90b0NhbWVsOiBmdW5jdGlvbiAoQykgewogICAgICAgICAgICB2YXIgQSA9IEFtOwoKICAg
ICAgICAgICAgZnVuY3Rpb24gQihFLCBEKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gRC50b1Vw
cGVyQ2FzZSgpCiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIEFbQ10gfHwgKEFbQ10g
PSBDLmluZGV4T2YoIi0iKSA9PT0gLTEgPyBDIDogQy5yZXBsYWNlKC8tKFthLXpdKS9naSwgQikp
CiAgICAgICAgfSwKICAgICAgICBfZ2V0Q2xhc3NSZWdleDogZnVuY3Rpb24gKEIpIHsKICAgICAg
ICAgICAgdmFyIEE7CiAgICAgICAgICAgIGlmIChCICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAg
ICAgICAgIGlmIChCLmV4ZWMpIHsKICAgICAgICAgICAgICAgICAgICBBID0gQgogICAgICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBBID0gQWlbQl07CiAgICAgICAgICAg
ICAgICAgICAgaWYgKCFBKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEIgPSBCLnJlcGxhY2Uo
QU8uRG9tLl9wYXR0ZXJucy5DTEFTU19SRV9UT0tFTlMsICJcXCQxIik7CiAgICAgICAgICAgICAg
ICAgICAgICAgIEEgPSBBaVtCXSA9IG5ldyBSZWdFeHAoQVggKyBCICsgQWYsIHopCiAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAg
IHJldHVybiBBCiAgICAgICAgfSwKICAgICAgICBfcGF0dGVybnM6IHsKICAgICAgICAgICAgUk9P
VF9UQUc6IC9eYm9keXxodG1sJC9pLAogICAgICAgICAgICBDTEFTU19SRV9UT0tFTlM6IC8oW1wu
XChcKVxeXCRcKlwrXD9cfFxbXF1ce1x9XFxdKS9nCiAgICAgICAgfSwKICAgICAgICBfdGVzdEVs
ZW1lbnQ6IGZ1bmN0aW9uIChBLCBCKSB7CiAgICAgICAgICAgIHJldHVybiBBICYmIEFbQWVdID09
IDEgJiYgKCFCIHx8IEIoQSkpCiAgICAgICAgfSwKICAgICAgICBfY2FsY0JvcmRlcnM6IGZ1bmN0
aW9uIChBLCBEKSB7CiAgICAgICAgICAgIHZhciBDID0gcGFyc2VJbnQoQU8uRG9tW0FUXShBLCBB
QyksIDEwKSB8fCAwLAogICAgICAgICAgICAgICAgQiA9IHBhcnNlSW50KEFPLkRvbVtBVF0oQSwg
QVopLCAxMCkgfHwgMDsKICAgICAgICAgICAgaWYgKEFNKSB7CiAgICAgICAgICAgICAgICBpZiAo
QUcudGVzdChBW0FRXSkpIHsKICAgICAgICAgICAgICAgICAgICBDID0gMDsKICAgICAgICAgICAg
ICAgICAgICBCID0gMAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAg
IERbMF0gKz0gQjsKICAgICAgICAgICAgRFsxXSArPSBDOwogICAgICAgICAgICByZXR1cm4gRAog
ICAgICAgIH0KICAgIH07CiAgICB2YXIgQUIgPSBBTy5Eb21bQVRdOwogICAgaWYgKEFkLm9wZXJh
KSB7CiAgICAgICAgQU8uRG9tW0FUXSA9IGZ1bmN0aW9uIChDLCBCKSB7CiAgICAgICAgICAgIHZh
ciBBID0gQUIoQywgQik7CiAgICAgICAgICAgIGlmIChZLnRlc3QoQikpIHsKICAgICAgICAgICAg
ICAgIEEgPSBBTy5Eb20uQ29sb3IudG9SR0IoQSkKICAgICAgICAgICAgfQogICAgICAgICAgICBy
ZXR1cm4gQQogICAgICAgIH0KICAgIH0KICAgIGlmIChBZC53ZWJraXQpIHsKICAgICAgICBBTy5E
b21bQVRdID0gZnVuY3Rpb24gKEMsIEIpIHsKICAgICAgICAgICAgdmFyIEEgPSBBQihDLCBCKTsK
ICAgICAgICAgICAgaWYgKEEgPT09ICJyZ2JhKDAsIDAsIDAsIDApIikgewogICAgICAgICAgICAg
ICAgQSA9ICJ0cmFuc3BhcmVudCIKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gQQog
ICAgICAgIH0KICAgIH0KICAgIGlmIChBZC5pZSAmJiBBZC5pZSA+PSA4ICYmIEFKLmRvY3VtZW50
RWxlbWVudC5oYXNBdHRyaWJ1dGUpIHsKICAgICAgICBBTy5Eb20uRE9UX0FUVFJJQlVURVMudHlw
ZSA9IHRydWUKICAgIH0KfSkoKTsKWUFIT08udXRpbC5SZWdpb24gPSBmdW5jdGlvbiAoRywgRiwg
RSwgSCkgewogICAgdGhpcy50b3AgPSBHOwogICAgdGhpcy55ID0gRzsKICAgIHRoaXNbMV0gPSBH
OwogICAgdGhpcy5yaWdodCA9IEY7CiAgICB0aGlzLmJvdHRvbSA9IEU7CiAgICB0aGlzLmxlZnQg
PSBIOwogICAgdGhpcy54ID0gSDsKICAgIHRoaXNbMF0gPSBIOwogICAgdGhpcy53aWR0aCA9IHRo
aXMucmlnaHQgLSB0aGlzLmxlZnQ7CiAgICB0aGlzLmhlaWdodCA9IHRoaXMuYm90dG9tIC0gdGhp
cy50b3AKfTsKWUFIT08udXRpbC5SZWdpb24ucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24g
KEIpIHsKICAgIHJldHVybiAoQi5sZWZ0ID49IHRoaXMubGVmdCAmJiBCLnJpZ2h0IDw9IHRoaXMu
cmlnaHQgJiYgQi50b3AgPj0gdGhpcy50b3AgJiYgQi5ib3R0b20gPD0gdGhpcy5ib3R0b20pCn07
CllBSE9PLnV0aWwuUmVnaW9uLnByb3RvdHlwZS5nZXRBcmVhID0gZnVuY3Rpb24gKCkgewogICAg
cmV0dXJuICgodGhpcy5ib3R0b20gLSB0aGlzLnRvcCkgKiAodGhpcy5yaWdodCAtIHRoaXMubGVm
dCkpCn07CllBSE9PLnV0aWwuUmVnaW9uLnByb3RvdHlwZS5pbnRlcnNlY3QgPSBmdW5jdGlvbiAo
RykgewogICAgdmFyIEkgPSBNYXRoLm1heCh0aGlzLnRvcCwgRy50b3ApLAogICAgICAgIEggPSBN
YXRoLm1pbih0aGlzLnJpZ2h0LCBHLnJpZ2h0KSwKICAgICAgICBGID0gTWF0aC5taW4odGhpcy5i
b3R0b20sIEcuYm90dG9tKSwKICAgICAgICBKID0gTWF0aC5tYXgodGhpcy5sZWZ0LCBHLmxlZnQp
OwogICAgaWYgKEYgPj0gSSAmJiBIID49IEopIHsKICAgICAgICByZXR1cm4gbmV3IFlBSE9PLnV0
aWwuUmVnaW9uKEksIEgsIEYsIEopCiAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBudWxsCiAg
ICB9Cn07CllBSE9PLnV0aWwuUmVnaW9uLnByb3RvdHlwZS51bmlvbiA9IGZ1bmN0aW9uIChHKSB7
CiAgICB2YXIgSSA9IE1hdGgubWluKHRoaXMudG9wLCBHLnRvcCksCiAgICAgICAgSCA9IE1hdGgu
bWF4KHRoaXMucmlnaHQsIEcucmlnaHQpLAogICAgICAgIEYgPSBNYXRoLm1heCh0aGlzLmJvdHRv
bSwgRy5ib3R0b20pLAogICAgICAgIEogPSBNYXRoLm1pbih0aGlzLmxlZnQsIEcubGVmdCk7CiAg
ICByZXR1cm4gbmV3IFlBSE9PLnV0aWwuUmVnaW9uKEksIEgsIEYsIEopCn07CllBSE9PLnV0aWwu
UmVnaW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsKICAgIHJldHVybiAoIlJl
Z2lvbiB7dG9wOiAiICsgdGhpcy50b3AgKyAiLCByaWdodDogIiArIHRoaXMucmlnaHQgKyAiLCBi
b3R0b206ICIgKyB0aGlzLmJvdHRvbSArICIsIGxlZnQ6ICIgKyB0aGlzLmxlZnQgKyAiLCBoZWln
aHQ6ICIgKyB0aGlzLmhlaWdodCArICIsIHdpZHRoOiAiICsgdGhpcy53aWR0aCArICJ9IikKfTsK
WUFIT08udXRpbC5SZWdpb24uZ2V0UmVnaW9uID0gZnVuY3Rpb24gKEopIHsKICAgIHZhciBIID0g
WUFIT08udXRpbC5Eb20uZ2V0WFkoSiksCiAgICAgICAgSyA9IEhbMV0sCiAgICAgICAgSSA9IEhb
MF0gKyBKLm9mZnNldFdpZHRoLAogICAgICAgIEcgPSBIWzFdICsgSi5vZmZzZXRIZWlnaHQsCiAg
ICAgICAgTCA9IEhbMF07CiAgICByZXR1cm4gbmV3IFlBSE9PLnV0aWwuUmVnaW9uKEssIEksIEcs
IEwpCn07CllBSE9PLnV0aWwuUG9pbnQgPSBmdW5jdGlvbiAoQywgRCkgewogICAgaWYgKFlBSE9P
LmxhbmcuaXNBcnJheShDKSkgewogICAgICAgIEQgPSBDWzFdOwogICAgICAgIEMgPSBDWzBdCiAg
ICB9CiAgICBZQUhPTy51dGlsLlBvaW50LnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlz
LCBELCBDLCBELCBDKQp9OwpZQUhPTy5leHRlbmQoWUFIT08udXRpbC5Qb2ludCwgWUFIT08udXRp
bC5SZWdpb24pOwooZnVuY3Rpb24gKCkgewogICAgdmFyIHMgPSBZQUhPTy51dGlsLAogICAgICAg
IHQgPSAiY2xpZW50VG9wIiwKICAgICAgICBvID0gImNsaWVudExlZnQiLAogICAgICAgIGsgPSAi
cGFyZW50Tm9kZSIsCiAgICAgICAgaiA9ICJyaWdodCIsCiAgICAgICAgWCA9ICJoYXNMYXlvdXQi
LAogICAgICAgIGwgPSAicHgiLAogICAgICAgIFogPSAib3BhY2l0eSIsCiAgICAgICAgaSA9ICJh
dXRvIiwKICAgICAgICBxID0gImJvcmRlckxlZnRXaWR0aCIsCiAgICAgICAgbiA9ICJib3JkZXJU
b3BXaWR0aCIsCiAgICAgICAgZSA9ICJib3JkZXJSaWdodFdpZHRoIiwKICAgICAgICBZID0gImJv
cmRlckJvdHRvbVdpZHRoIiwKICAgICAgICBiID0gInZpc2libGUiLAogICAgICAgIGQgPSAidHJh
bnNwYXJlbnQiLAogICAgICAgIGcgPSAiaGVpZ2h0IiwKICAgICAgICBwID0gIndpZHRoIiwKICAg
ICAgICBtID0gInN0eWxlIiwKICAgICAgICBhID0gImN1cnJlbnRTdHlsZSIsCiAgICAgICAgYyA9
IC9ed2lkdGh8aGVpZ2h0JC8sCiAgICAgICAgZiA9IC9eKFxkWy5cZF0qKSsoZW18ZXh8cHh8Z2R8
cmVtfHZ3fHZofHZtfGNofG1tfGNtfGlufHB0fHBjfGRlZ3xyYWR8bXN8c3xoenxraHp8JSl7MX0/
L2ksCiAgICAgICAgaCA9IHsKICAgICAgICBnZXQ6IGZ1bmN0aW9uIChELCBCKSB7CiAgICAgICAg
ICAgIHZhciBDID0gIiIsCiAgICAgICAgICAgICAgICBBID0gRFthXVtCXTsKICAgICAgICAgICAg
aWYgKEIgPT09IFopIHsKICAgICAgICAgICAgICAgIEMgPSBzLkRvbS5nZXRTdHlsZShELCBaKQog
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKCFBIHx8IChBLmluZGV4T2Yg
JiYgQS5pbmRleE9mKGwpID4gLTEpKSB7CiAgICAgICAgICAgICAgICAgICAgQyA9IEEKICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHMuRG9tLklFX0NPTVBV
VEVEW0JdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEMgPSBzLkRvbS5JRV9DT01QVVRFRFtC
XShELCBCKQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChmLnRlc3QoQSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMgPSBzLkRv
bS5JRS5Db21wdXRlZFN0eWxlLmdldFBpeGVsKEQsIEIpCiAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDID0gQQogICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBDCiAgICAgICAgfSwKICAgICAgICBnZXRPZmZz
ZXQ6IGZ1bmN0aW9uIChELCBDKSB7CiAgICAgICAgICAgIHZhciBBID0gRFthXVtDXSwKICAgICAg
ICAgICAgICAgIEggPSBDLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgQy5zdWJzdHIoMSksCiAg
ICAgICAgICAgICAgICBHID0gIm9mZnNldCIgKyBILAogICAgICAgICAgICAgICAgRiA9ICJwaXhl
bCIgKyBILAogICAgICAgICAgICAgICAgQiA9ICIiLAogICAgICAgICAgICAgICAgRTsKICAgICAg
ICAgICAgaWYgKEEgPT0gaSkgewogICAgICAgICAgICAgICAgRSA9IERbR107CiAgICAgICAgICAg
ICAgICBpZiAoRSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgQiA9IDAKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIEIgPSBFOwogICAgICAgICAgICAgICAgaWYg
KGMudGVzdChDKSkgewogICAgICAgICAgICAgICAgICAgIERbbV1bQ10gPSBFOwogICAgICAgICAg
ICAgICAgICAgIGlmIChEW0ddID4gRSkgewogICAgICAgICAgICAgICAgICAgICAgICBCID0gRSAt
IChEW0ddIC0gRSkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgRFtt
XVtDXSA9IGkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgIGlmICghRFttXVtGXSAmJiAhRFttXVtDXSkgewogICAgICAgICAgICAgICAgICAgIERb
bV1bQ10gPSBBCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBCID0gRFttXVtGXQog
ICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBCICsgbAogICAgICAgIH0sCiAgICAgICAg
Z2V0Qm9yZGVyV2lkdGg6IGZ1bmN0aW9uIChDLCBBKSB7CiAgICAgICAgICAgIHZhciBCID0gbnVs
bDsKICAgICAgICAgICAgaWYgKCFDW2FdW1hdKSB7CiAgICAgICAgICAgICAgICBDW21dLnpvb20g
PSAxCiAgICAgICAgICAgIH0KICAgICAgICAgICAgc3dpdGNoIChBKSB7CiAgICAgICAgICAgIGNh
c2UgbjoKICAgICAgICAgICAgICAgIEIgPSBDW3RdOwogICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgIGNhc2UgWToKICAgICAgICAgICAgICAgIEIgPSBDLm9mZnNldEhlaWdodCAtIEMu
Y2xpZW50SGVpZ2h0IC0gQ1t0XTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBj
YXNlIHE6CiAgICAgICAgICAgICAgICBCID0gQ1tvXTsKICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICBjYXNlIGU6CiAgICAgICAgICAgICAgICBCID0gQy5vZmZzZXRXaWR0aCAtIEMu
Y2xpZW50V2lkdGggLSBDW29dOwogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgfQog
ICAgICAgICAgICByZXR1cm4gQiArIGwKICAgICAgICB9LAogICAgICAgIGdldFBpeGVsOiBmdW5j
dGlvbiAoRCwgRSkgewogICAgICAgICAgICB2YXIgQiA9IG51bGwsCiAgICAgICAgICAgICAgICBB
ID0gRFthXVtqXSwKICAgICAgICAgICAgICAgIEMgPSBEW2FdW0VdOwogICAgICAgICAgICBEW21d
W2pdID0gQzsKICAgICAgICAgICAgQiA9IERbbV0ucGl4ZWxSaWdodDsKICAgICAgICAgICAgRFtt
XVtqXSA9IEE7CiAgICAgICAgICAgIHJldHVybiBCICsgbAogICAgICAgIH0sCiAgICAgICAgZ2V0
TWFyZ2luOiBmdW5jdGlvbiAoQiwgQykgewogICAgICAgICAgICB2YXIgQTsKICAgICAgICAgICAg
aWYgKEJbYV1bQ10gPT0gaSkgewogICAgICAgICAgICAgICAgQSA9IDAgKyBsCiAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICBBID0gcy5Eb20uSUUuQ29tcHV0ZWRTdHlsZS5nZXRQ
aXhlbChCLCBDKQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBBCiAgICAgICAgfSwK
ICAgICAgICBnZXRWaXNpYmlsaXR5OiBmdW5jdGlvbiAoQiwgQykgewogICAgICAgICAgICB2YXIg
QTsKICAgICAgICAgICAgd2hpbGUgKChBID0gQlthXSkgJiYgQVtDXSA9PSAiaW5oZXJpdCIpIHsK
ICAgICAgICAgICAgICAgIEIgPSBCW2tdCiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJu
IChBKSA/IEFbQ10gOiBiCiAgICAgICAgfSwKICAgICAgICBnZXRDb2xvcjogZnVuY3Rpb24gKEEs
IEIpIHsKICAgICAgICAgICAgcmV0dXJuIHMuRG9tLkNvbG9yLnRvUkdCKEFbYV1bQl0pIHx8IGQK
ICAgICAgICB9LAogICAgICAgIGdldEJvcmRlckNvbG9yOiBmdW5jdGlvbiAoQywgRCkgewogICAg
ICAgICAgICB2YXIgQiA9IENbYV0sCiAgICAgICAgICAgICAgICBBID0gQltEXSB8fCBCLmNvbG9y
OwogICAgICAgICAgICByZXR1cm4gcy5Eb20uQ29sb3IudG9SR0Iocy5Eb20uQ29sb3IudG9IZXgo
QSkpCiAgICAgICAgfQogICAgfSwKICAgICAgICByID0ge307CiAgICByLnRvcCA9IHIucmlnaHQg
PSByLmJvdHRvbSA9IHIubGVmdCA9IHJbcF0gPSByW2ddID0gaC5nZXRPZmZzZXQ7CiAgICByLmNv
bG9yID0gaC5nZXRDb2xvcjsKICAgIHJbbl0gPSByW2VdID0gcltZXSA9IHJbcV0gPSBoLmdldEJv
cmRlcldpZHRoOwogICAgci5tYXJnaW5Ub3AgPSByLm1hcmdpblJpZ2h0ID0gci5tYXJnaW5Cb3R0
b20gPSByLm1hcmdpbkxlZnQgPSBoLmdldE1hcmdpbjsKICAgIHIudmlzaWJpbGl0eSA9IGguZ2V0
VmlzaWJpbGl0eTsKICAgIHIuYm9yZGVyQ29sb3IgPSByLmJvcmRlclRvcENvbG9yID0gci5ib3Jk
ZXJSaWdodENvbG9yID0gci5ib3JkZXJCb3R0b21Db2xvciA9IHIuYm9yZGVyTGVmdENvbG9yID0g
aC5nZXRCb3JkZXJDb2xvcjsKICAgIHMuRG9tLklFX0NPTVBVVEVEID0gcjsKICAgIHMuRG9tLklF
X0NvbXB1dGVkU3R5bGUgPSBoCn0pKCk7CihmdW5jdGlvbiAoKSB7CiAgICB2YXIgRyA9ICJ0b1N0
cmluZyIsCiAgICAgICAgRSA9IHBhcnNlSW50LAogICAgICAgIEggPSBSZWdFeHAsCiAgICAgICAg
RiA9IFlBSE9PLnV0aWw7CiAgICBGLkRvbS5Db2xvciA9IHsKICAgICAgICBLRVlXT1JEUzogewog
ICAgICAgICAgICBibGFjazogIjAwMCIsCiAgICAgICAgICAgIHNpbHZlcjogImMwYzBjMCIsCiAg
ICAgICAgICAgIGdyYXk6ICI4MDgwODAiLAogICAgICAgICAgICB3aGl0ZTogImZmZiIsCiAgICAg
ICAgICAgIG1hcm9vbjogIjgwMDAwMCIsCiAgICAgICAgICAgIHJlZDogImYwMCIsCiAgICAgICAg
ICAgIHB1cnBsZTogIjgwMDA4MCIsCiAgICAgICAgICAgIGZ1Y2hzaWE6ICJmMGYiLAogICAgICAg
ICAgICBncmVlbjogIjAwODAwMCIsCiAgICAgICAgICAgIGxpbWU6ICIwZjAiLAogICAgICAgICAg
ICBvbGl2ZTogIjgwODAwMCIsCiAgICAgICAgICAgIHllbGxvdzogImZmMCIsCiAgICAgICAgICAg
IG5hdnk6ICIwMDAwODAiLAogICAgICAgICAgICBibHVlOiAiMDBmIiwKICAgICAgICAgICAgdGVh
bDogIjAwODA4MCIsCiAgICAgICAgICAgIGFxdWE6ICIwZmYiCiAgICAgICAgfSwKICAgICAgICBy
ZV9SR0I6IC9ecmdiXCgoWzAtOV0rKVxzKixccyooWzAtOV0rKVxzKixccyooWzAtOV0rKVwpJC9p
LAogICAgICAgIHJlX2hleDogL14jPyhbMC05QS1GXXsyfSkoWzAtOUEtRl17Mn0pKFswLTlBLUZd
ezJ9KSQvaSwKICAgICAgICByZV9oZXgzOiAvKFswLTlBLUZdKS9naSwKICAgICAgICB0b1JHQjog
ZnVuY3Rpb24gKEEpIHsKICAgICAgICAgICAgaWYgKCFGLkRvbS5Db2xvci5yZV9SR0IudGVzdChB
KSkgewogICAgICAgICAgICAgICAgQSA9IEYuRG9tLkNvbG9yLnRvSGV4KEEpCiAgICAgICAgICAg
IH0KICAgICAgICAgICAgaWYgKEYuRG9tLkNvbG9yLnJlX2hleC5leGVjKEEpKSB7CiAgICAgICAg
ICAgICAgICBBID0gInJnYigiICsgW0UoSC4kMSwgMTYpLCBFKEguJDIsIDE2KSwgRShILiQzLCAx
NildLmpvaW4oIiwgIikgKyAiKSIKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gQQog
ICAgICAgIH0sCiAgICAgICAgdG9IZXg6IGZ1bmN0aW9uIChBKSB7CiAgICAgICAgICAgIEEgPSBG
LkRvbS5Db2xvci5LRVlXT1JEU1tBXSB8fCBBOwogICAgICAgICAgICBpZiAoRi5Eb20uQ29sb3Iu
cmVfUkdCLmV4ZWMoQSkpIHsKICAgICAgICAgICAgICAgIHZhciBCID0gKEguJDEubGVuZ3RoID09
PSAxKSA/ICIwIiArIEguJDEgOiBOdW1iZXIoSC4kMSksCiAgICAgICAgICAgICAgICBDID0gKEgu
JDIubGVuZ3RoID09PSAxKSA/ICIwIiArIEguJDIgOiBOdW1iZXIoSC4kMiksCiAgICAgICAgICAg
ICAgICBEID0gKEguJDMubGVuZ3RoID09PSAxKSA/ICIwIiArIEguJDMgOiBOdW1iZXIoSC4kMyk7
CiAgICAgICAgICAgICAgICBBID0gW0JbR10oMTYpLCBDW0ddKDE2KSwgRFtHXSgxNildLmpvaW4o
IiIpCiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKEEubGVuZ3RoIDwgNikgewogICAgICAg
ICAgICAgICAgQSA9IEEucmVwbGFjZShGLkRvbS5Db2xvci5yZV9oZXgzLCAiJDEkMSIpCiAgICAg
ICAgICAgIH0KICAgICAgICAgICAgaWYgKEEgIT09ICJ0cmFuc3BhcmVudCIgJiYgQS5pbmRleE9m
KCIjIikgPCAwKSB7CiAgICAgICAgICAgICAgICBBID0gIiMiICsgQQogICAgICAgICAgICB9CiAg
ICAgICAgICAgIHJldHVybiBBLnRvTG93ZXJDYXNlKCkKICAgICAgICB9CiAgICB9Cn0gKCkpOwpZ
QUhPTy5yZWdpc3RlcigiZG9tIiwgWUFIT08udXRpbC5Eb20sIHsKICAgIHZlcnNpb246ICIyLjgu
MHI0IiwKICAgIGJ1aWxkOiAiMjQ0OSIKfSk7CllBSE9PLnV0aWwuQ3VzdG9tRXZlbnQgPSBmdW5j
dGlvbiAoSiwgSywgTCwgRywgSSkgewogICAgdGhpcy50eXBlID0gSjsKICAgIHRoaXMuc2NvcGUg
PSBLIHx8IHdpbmRvdzsKICAgIHRoaXMuc2lsZW50ID0gTDsKICAgIHRoaXMuZmlyZU9uY2UgPSBJ
OwogICAgdGhpcy5maXJlZCA9IGZhbHNlOwogICAgdGhpcy5maXJlZFdpdGggPSBudWxsOwogICAg
dGhpcy5zaWduYXR1cmUgPSBHIHx8IFlBSE9PLnV0aWwuQ3VzdG9tRXZlbnQuTElTVDsKICAgIHRo
aXMuc3Vic2NyaWJlcnMgPSBbXTsKICAgIGlmICghdGhpcy5zaWxlbnQpIHt9CiAgICB2YXIgSCA9
ICJfWVVJQ0VPblN1YnNjcmliZSI7CiAgICBpZiAoSiAhPT0gSCkgewogICAgICAgIHRoaXMuc3Vi
c2NyaWJlRXZlbnQgPSBuZXcgWUFIT08udXRpbC5DdXN0b21FdmVudChILCB0aGlzLCB0cnVlKQog
ICAgfQogICAgdGhpcy5sYXN0RXJyb3IgPSBudWxsCn07CllBSE9PLnV0aWwuQ3VzdG9tRXZlbnQu
TElTVCA9IDA7CllBSE9PLnV0aWwuQ3VzdG9tRXZlbnQuRkxBVCA9IDE7CllBSE9PLnV0aWwuQ3Vz
dG9tRXZlbnQucHJvdG90eXBlID0gewogICAgc3Vic2NyaWJlOiBmdW5jdGlvbiAoSCwgRywgRikg
ewogICAgICAgIGlmICghSCkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQg
Y2FsbGJhY2sgZm9yIHN1YnNjcmliZXIgdG8gJyIgKyB0aGlzLnR5cGUgKyAiJyIpCiAgICAgICAg
fQogICAgICAgIGlmICh0aGlzLnN1YnNjcmliZUV2ZW50KSB7CiAgICAgICAgICAgIHRoaXMuc3Vi
c2NyaWJlRXZlbnQuZmlyZShILCBHLCBGKQogICAgICAgIH0KICAgICAgICB2YXIgRSA9IG5ldyBZ
QUhPTy51dGlsLlN1YnNjcmliZXIoSCwgRywgRik7CiAgICAgICAgaWYgKHRoaXMuZmlyZU9uY2Ug
JiYgdGhpcy5maXJlZCkgewogICAgICAgICAgICB0aGlzLm5vdGlmeShFLCB0aGlzLmZpcmVkV2l0
aCkKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLnN1YnNjcmliZXJzLnB1c2goRSkK
ICAgICAgICB9CiAgICB9LAogICAgdW5zdWJzY3JpYmU6IGZ1bmN0aW9uIChKLCBIKSB7CiAgICAg
ICAgaWYgKCFKKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuc3Vic2NyaWJlQWxsKCkKICAg
ICAgICB9CiAgICAgICAgdmFyIEkgPSBmYWxzZTsKICAgICAgICBmb3IgKHZhciBMID0gMCwgRyA9
IHRoaXMuc3Vic2NyaWJlcnMubGVuZ3RoOwogICAgICAgIEwgPCBHOyArK0wpIHsKICAgICAgICAg
ICAgdmFyIEsgPSB0aGlzLnN1YnNjcmliZXJzW0xdOwogICAgICAgICAgICBpZiAoSyAmJiBLLmNv
bnRhaW5zKEosIEgpKSB7CiAgICAgICAgICAgICAgICB0aGlzLl9kZWxldGUoTCk7CiAgICAgICAg
ICAgICAgICBJID0gdHJ1ZQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBJ
CiAgICB9LAogICAgZmlyZTogZnVuY3Rpb24gKCkgewogICAgICAgIHRoaXMubGFzdEVycm9yID0g
bnVsbDsKICAgICAgICB2YXIgSiA9IFtdLAogICAgICAgICAgICBJID0gdGhpcy5zdWJzY3JpYmVy
cy5sZW5ndGg7CiAgICAgICAgdmFyIE4gPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCksCiAg
ICAgICAgICAgIE8gPSB0cnVlLAogICAgICAgICAgICBMLCBQID0gZmFsc2U7CiAgICAgICAgaWYg
KHRoaXMuZmlyZU9uY2UpIHsKICAgICAgICAgICAgaWYgKHRoaXMuZmlyZWQpIHsKICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlCiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0
aGlzLmZpcmVkV2l0aCA9IE4KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aGlzLmZp
cmVkID0gdHJ1ZTsKICAgICAgICBpZiAoIUkgJiYgdGhpcy5zaWxlbnQpIHsKICAgICAgICAgICAg
cmV0dXJuIHRydWUKICAgICAgICB9CiAgICAgICAgaWYgKCF0aGlzLnNpbGVudCkge30KICAgICAg
ICB2YXIgTSA9IHRoaXMuc3Vic2NyaWJlcnMuc2xpY2UoKTsKICAgICAgICBmb3IgKEwgPSAwOwog
ICAgICAgIEwgPCBJOyArK0wpIHsKICAgICAgICAgICAgdmFyIEsgPSBNW0xdOwogICAgICAgICAg
ICBpZiAoIUspIHsKICAgICAgICAgICAgICAgIFAgPSB0cnVlCiAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICBPID0gdGhpcy5ub3RpZnkoSywgTik7CiAgICAgICAgICAgICAgICBp
ZiAoZmFsc2UgPT09IE8pIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2lsZW50KSB7
fQogICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
IH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIChPICE9PSBmYWxzZSkKICAgIH0sCiAgICBub3Rp
Znk6IGZ1bmN0aW9uIChMLCBPKSB7CiAgICAgICAgdmFyIFAsIEogPSBudWxsLAogICAgICAgICAg
ICBNID0gTC5nZXRTY29wZSh0aGlzLnNjb3BlKSwKICAgICAgICAgICAgSSA9IFlBSE9PLnV0aWwu
RXZlbnQudGhyb3dFcnJvcnM7CiAgICAgICAgaWYgKCF0aGlzLnNpbGVudCkge30KICAgICAgICBp
ZiAodGhpcy5zaWduYXR1cmUgPT0gWUFIT08udXRpbC5DdXN0b21FdmVudC5GTEFUKSB7CiAgICAg
ICAgICAgIGlmIChPLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgIEogPSBPWzBdCiAgICAg
ICAgICAgIH0KICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIFAgPSBMLmZuLmNhbGwo
TSwgSiwgTC5vYmopCiAgICAgICAgICAgIH0gY2F0Y2goSykgewogICAgICAgICAgICAgICAgdGhp
cy5sYXN0RXJyb3IgPSBLOwogICAgICAgICAgICAgICAgaWYgKEkpIHsKICAgICAgICAgICAgICAg
ICAgICB0aHJvdyBLCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgUCA9IEwuZm4uY2FsbChNLCB0
aGlzLnR5cGUsIE8sIEwub2JqKQogICAgICAgICAgICB9IGNhdGNoKE4pIHsKICAgICAgICAgICAg
ICAgIHRoaXMubGFzdEVycm9yID0gTjsKICAgICAgICAgICAgICAgIGlmIChJKSB7CiAgICAgICAg
ICAgICAgICAgICAgdGhyb3cgTgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAg
ICAgfQogICAgICAgIHJldHVybiBQCiAgICB9LAogICAgdW5zdWJzY3JpYmVBbGw6IGZ1bmN0aW9u
ICgpIHsKICAgICAgICB2YXIgQyA9IHRoaXMuc3Vic2NyaWJlcnMubGVuZ3RoLAogICAgICAgICAg
ICBEOwogICAgICAgIGZvciAoRCA9IEMgLSAxOwogICAgICAgIEQgPiAtMTsKICAgICAgICBELS0p
IHsKICAgICAgICAgICAgdGhpcy5fZGVsZXRlKEQpCiAgICAgICAgfQogICAgICAgIHRoaXMuc3Vi
c2NyaWJlcnMgPSBbXTsKICAgICAgICByZXR1cm4gQwogICAgfSwKICAgIF9kZWxldGU6IGZ1bmN0
aW9uIChDKSB7CiAgICAgICAgdmFyIEQgPSB0aGlzLnN1YnNjcmliZXJzW0NdOwogICAgICAgIGlm
IChEKSB7CiAgICAgICAgICAgIGRlbGV0ZSBELmZuOwogICAgICAgICAgICBkZWxldGUgRC5vYmoK
ICAgICAgICB9CiAgICAgICAgdGhpcy5zdWJzY3JpYmVycy5zcGxpY2UoQywgMSkKICAgIH0sCiAg
ICB0b1N0cmluZzogZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiAiQ3VzdG9tRXZlbnQ6ICci
ICsgdGhpcy50eXBlICsgIicsIGNvbnRleHQ6ICIgKyB0aGlzLnNjb3BlCiAgICB9Cn07CllBSE9P
LnV0aWwuU3Vic2NyaWJlciA9IGZ1bmN0aW9uIChELCBGLCBFKSB7CiAgICB0aGlzLmZuID0gRDsK
ICAgIHRoaXMub2JqID0gWUFIT08ubGFuZy5pc1VuZGVmaW5lZChGKSA/IG51bGwgOiBGOwogICAg
dGhpcy5vdmVycmlkZUNvbnRleHQgPSBFCn07CllBSE9PLnV0aWwuU3Vic2NyaWJlci5wcm90b3R5
cGUuZ2V0U2NvcGUgPSBmdW5jdGlvbiAoQikgewogICAgaWYgKHRoaXMub3ZlcnJpZGVDb250ZXh0
KSB7CiAgICAgICAgaWYgKHRoaXMub3ZlcnJpZGVDb250ZXh0ID09PSB0cnVlKSB7CiAgICAgICAg
ICAgIHJldHVybiB0aGlzLm9iagogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiB0
aGlzLm92ZXJyaWRlQ29udGV4dAogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBCCn07CllBSE9P
LnV0aWwuU3Vic2NyaWJlci5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoQywgRCkgewog
ICAgaWYgKEQpIHsKICAgICAgICByZXR1cm4gKHRoaXMuZm4gPT0gQyAmJiB0aGlzLm9iaiA9PSBE
KQogICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gKHRoaXMuZm4gPT0gQykKICAgIH0KfTsKWUFI
T08udXRpbC5TdWJzY3JpYmVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsKICAg
IHJldHVybiAiU3Vic2NyaWJlciB7IG9iajogIiArIHRoaXMub2JqICsgIiwgb3ZlcnJpZGVDb250
ZXh0OiAiICsgKHRoaXMub3ZlcnJpZGVDb250ZXh0IHx8ICJubyIpICsgIiB9Igp9OwppZiAoIVlB
SE9PLnV0aWwuRXZlbnQpIHsKICAgIFlBSE9PLnV0aWwuRXZlbnQgPSBmdW5jdGlvbiAoKSB7CiAg
ICAgICAgdmFyIFIgPSBmYWxzZSwKICAgICAgICAgICAgUSA9IFtdLAogICAgICAgICAgICBPID0g
W10sCiAgICAgICAgICAgIE4gPSAwLAogICAgICAgICAgICBUID0gW10sCiAgICAgICAgICAgIE0g
PSAwLAogICAgICAgICAgICBMID0gewogICAgICAgICAgICA2MzIzMjogMzgsCiAgICAgICAgICAg
IDYzMjMzOiA0MCwKICAgICAgICAgICAgNjMyMzQ6IDM3LAogICAgICAgICAgICA2MzIzNTogMzks
CiAgICAgICAgICAgIDYzMjc2OiAzMywKICAgICAgICAgICAgNjMyNzc6IDM0LAogICAgICAgICAg
ICAyNTogOQogICAgICAgIH0sCiAgICAgICAgICAgIEsgPSBZQUhPTy5lbnYudWEuaWUsCiAgICAg
ICAgICAgIFMgPSAiZm9jdXNpbiIsCiAgICAgICAgICAgIFAgPSAiZm9jdXNvdXQiOwogICAgICAg
IHJldHVybiB7CiAgICAgICAgICAgIFBPTExfUkVUUllTOiA1MDAsCiAgICAgICAgICAgIFBPTExf
SU5URVJWQUw6IDQwLAogICAgICAgICAgICBFTDogMCwKICAgICAgICAgICAgVFlQRTogMSwKICAg
ICAgICAgICAgRk46IDIsCiAgICAgICAgICAgIFdGTjogMywKICAgICAgICAgICAgVU5MT0FEX09C
SjogMywKICAgICAgICAgICAgQURKX1NDT1BFOiA0LAogICAgICAgICAgICBPQko6IDUsCiAgICAg
ICAgICAgIE9WRVJSSURFOiA2LAogICAgICAgICAgICBDQVBUVVJFOiA3LAogICAgICAgICAgICBs
YXN0RXJyb3I6IG51bGwsCiAgICAgICAgICAgIGlzU2FmYXJpOiBZQUhPTy5lbnYudWEud2Via2l0
LAogICAgICAgICAgICB3ZWJraXQ6IFlBSE9PLmVudi51YS53ZWJraXQsCiAgICAgICAgICAgIGlz
SUU6IEssCiAgICAgICAgICAgIF9pbnRlcnZhbDogbnVsbCwKICAgICAgICAgICAgX2RyaTogbnVs
bCwKICAgICAgICAgICAgX3NwZWNpYWxUeXBlczogewogICAgICAgICAgICAgICAgZm9jdXNpbjog
KEsgPyAiZm9jdXNpbiIgOiAiZm9jdXMiKSwKICAgICAgICAgICAgICAgIGZvY3Vzb3V0OiAoSyA/
ICJmb2N1c291dCIgOiAiYmx1ciIpCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIERPTVJlYWR5
OiBmYWxzZSwKICAgICAgICAgICAgdGhyb3dFcnJvcnM6IGZhbHNlLAogICAgICAgICAgICBzdGFy
dEludGVydmFsOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2ludGVy
dmFsKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW50ZXJ2YWwgPSBZQUhPTy5sYW5nLmxh
dGVyKHRoaXMuUE9MTF9JTlRFUlZBTCwgdGhpcywgdGhpcy5fdHJ5UHJlbG9hZEF0dGFjaCwgbnVs
bCwgdHJ1ZSkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgb25B
dmFpbGFibGU6IGZ1bmN0aW9uIChDLCBHLCBFLCBELCBGKSB7CiAgICAgICAgICAgICAgICB2YXIg
QiA9IChZQUhPTy5sYW5nLmlzU3RyaW5nKEMpKSA/IFtDXSA6IEM7CiAgICAgICAgICAgICAgICBm
b3IgKHZhciBBID0gMDsKICAgICAgICAgICAgICAgIEEgPCBCLmxlbmd0aDsKICAgICAgICAgICAg
ICAgIEEgPSBBICsgMSkgewogICAgICAgICAgICAgICAgICAgIFQucHVzaCh7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGlkOiBCW0FdLAogICAgICAgICAgICAgICAgICAgICAgICBmbjogRywKICAg
ICAgICAgICAgICAgICAgICAgICAgb2JqOiBFLAogICAgICAgICAgICAgICAgICAgICAgICBvdmVy
cmlkZUNvbnRleHQ6IEQsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrUmVhZHk6IEYKICAg
ICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgTiA9
IHRoaXMuUE9MTF9SRVRSWVM7CiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0SW50ZXJ2YWwoKQog
ICAgICAgICAgICB9LAogICAgICAgICAgICBvbkNvbnRlbnRSZWFkeTogZnVuY3Rpb24gKEMsIEIs
IEEsIEQpIHsKICAgICAgICAgICAgICAgIHRoaXMub25BdmFpbGFibGUoQywgQiwgQSwgRCwgdHJ1
ZSkKICAgICAgICAgICAgfSwKICAgICAgICAgICAgb25ET01SZWFkeTogZnVuY3Rpb24gKCkgewog
ICAgICAgICAgICAgICAgdGhpcy5ET01SZWFkeUV2ZW50LnN1YnNjcmliZS5hcHBseSh0aGlzLkRP
TVJlYWR5RXZlbnQsIGFyZ3VtZW50cykKICAgICAgICAgICAgfSwKICAgICAgICAgICAgX2FkZExp
c3RlbmVyOiBmdW5jdGlvbiAoYiwgZCwgRCwgSiwgRiwgQSkgewogICAgICAgICAgICAgICAgaWYg
KCFEIHx8ICFELmNhbGwpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2UKICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc1ZhbGlkQ29sbGVjdGlvbihi
KSkgewogICAgICAgICAgICAgICAgICAgIHZhciBDID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAg
ICBmb3IgKHZhciBJID0gMCwgRyA9IGIubGVuZ3RoOwogICAgICAgICAgICAgICAgICAgIEkgPCBH
OyArK0kpIHsKICAgICAgICAgICAgICAgICAgICAgICAgQyA9IHRoaXMub24oYltJXSwgZCwgRCwg
SiwgRikgJiYgQwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1
cm4gQwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAoWUFI
T08ubGFuZy5pc1N0cmluZyhiKSkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgWiA9IHRo
aXMuZ2V0RWwoYik7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChaKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBiID0gWgogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkF2YWlsYWJsZShiLCBmdW5jdGlvbiAo
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWUFIT08udXRpbC5FdmVudC5fYWRk
TGlzdGVuZXIoYiwgZCwgRCwgSiwgRiwgQSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0p
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWUKICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgIGlmICghYikgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZQogICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCJ1bmxvYWQiID09IGQgJiYgSiAhPT0g
dGhpcykgewogICAgICAgICAgICAgICAgICAgIE9bTy5sZW5ndGhdID0gW2IsIGQsIEQsIEosIEZd
OwogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlCiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICB2YXIgYyA9IGI7CiAgICAgICAgICAgICAgICBpZiAoRikgewogICAgICAgICAg
ICAgICAgICAgIGlmIChGID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBK
CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgYyA9
IEYKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICB2YXIgYSA9IGZ1bmN0aW9uIChVKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEQuY2Fs
bChjLCBZQUhPTy51dGlsLkV2ZW50LmdldEV2ZW50KFUsIGIpLCBKKQogICAgICAgICAgICAgICAg
fTsKICAgICAgICAgICAgICAgIHZhciBCID0gW2IsIGQsIEQsIGEsIGMsIEosIEYsIEFdOwogICAg
ICAgICAgICAgICAgdmFyIEggPSBRLmxlbmd0aDsKICAgICAgICAgICAgICAgIFFbSF0gPSBCOwog
ICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaW1wbGVBZGQo
YiwgZCwgYSwgQSkKICAgICAgICAgICAgICAgIH0gY2F0Y2goRSkgewogICAgICAgICAgICAgICAg
ICAgIHRoaXMubGFzdEVycm9yID0gRTsKICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUxp
c3RlbmVyKGIsIGQsIEQpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZQogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWUKICAgICAgICAgICAgfSwKICAg
ICAgICAgICAgX2dldFR5cGU6IGZ1bmN0aW9uIChBKSB7CiAgICAgICAgICAgICAgICByZXR1cm4g
dGhpcy5fc3BlY2lhbFR5cGVzW0FdIHx8IEEKICAgICAgICAgICAgfSwKICAgICAgICAgICAgYWRk
TGlzdGVuZXI6IGZ1bmN0aW9uIChGLCBDLCBBLCBFLCBEKSB7CiAgICAgICAgICAgICAgICB2YXIg
QiA9ICgoQyA9PSBTIHx8IEMgPT0gUCkgJiYgIVlBSE9PLmVudi51YS5pZSkgPyB0cnVlIDogZmFs
c2U7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYWRkTGlzdGVuZXIoRiwgdGhpcy5fZ2V0
VHlwZShDKSwgQSwgRSwgRCwgQikKICAgICAgICAgICAgfSwKICAgICAgICAgICAgYWRkRm9jdXNM
aXN0ZW5lcjogZnVuY3Rpb24gKEEsIEIsIEQsIEMpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzLm9uKEEsIFMsIEIsIEQsIEMpCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHJlbW92ZUZv
Y3VzTGlzdGVuZXI6IGZ1bmN0aW9uIChBLCBCKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5yZW1vdmVMaXN0ZW5lcihBLCBTLCBCKQogICAgICAgICAgICB9LAogICAgICAgICAgICBhZGRC
bHVyTGlzdGVuZXI6IGZ1bmN0aW9uIChBLCBCLCBELCBDKSB7CiAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5vbihBLCBQLCBCLCBELCBDKQogICAgICAgICAgICB9LAogICAgICAgICAgICByZW1v
dmVCbHVyTGlzdGVuZXI6IGZ1bmN0aW9uIChBLCBCKSB7CiAgICAgICAgICAgICAgICByZXR1cm4g
dGhpcy5yZW1vdmVMaXN0ZW5lcihBLCBQLCBCKQogICAgICAgICAgICB9LAogICAgICAgICAgICBy
ZW1vdmVMaXN0ZW5lcjogZnVuY3Rpb24gKEosIFYsIEQpIHsKICAgICAgICAgICAgICAgIHZhciBJ
LCBGLCBBOwogICAgICAgICAgICAgICAgViA9IHRoaXMuX2dldFR5cGUoVik7CiAgICAgICAgICAg
ICAgICBpZiAodHlwZW9mIEogPT0gInN0cmluZyIpIHsKICAgICAgICAgICAgICAgICAgICBKID0g
dGhpcy5nZXRFbChKKQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAg
ICBpZiAodGhpcy5faXNWYWxpZENvbGxlY3Rpb24oSikpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIEMgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKEkgPSBKLmxlbmd0
aCAtIDE7CiAgICAgICAgICAgICAgICAgICAgICAgIEkgPiAtMTsKICAgICAgICAgICAgICAgICAg
ICAgICAgSS0tKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDID0gKHRoaXMucmVtb3Zl
TGlzdGVuZXIoSltJXSwgViwgRCkgJiYgQykKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gQwogICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghRCB8fCAhRC5jYWxsKSB7CiAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXMucHVyZ2VFbGVtZW50KEosIGZhbHNlLCBWKQogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCJ1bmxvYWQiID09IFYpIHsKICAgICAgICAg
ICAgICAgICAgICBmb3IgKEkgPSBPLmxlbmd0aCAtIDE7CiAgICAgICAgICAgICAgICAgICAgSSA+
IC0xOwogICAgICAgICAgICAgICAgICAgIEktLSkgewogICAgICAgICAgICAgICAgICAgICAgICBB
ID0gT1tJXTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEEgJiYgQVswXSA9PSBKICYmIEFb
MV0gPT0gViAmJiBBWzJdID09IEQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE8uc3Bs
aWNlKEksIDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWUKICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2UKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHZhciBI
ID0gbnVsbDsKICAgICAgICAgICAgICAgIHZhciBHID0gYXJndW1lbnRzWzNdOwogICAgICAgICAg
ICAgICAgaWYgKCJ1bmRlZmluZWQiID09PSB0eXBlb2YgRykgewogICAgICAgICAgICAgICAgICAg
IEcgPSB0aGlzLl9nZXRDYWNoZUluZGV4KFEsIEosIFYsIEQpCiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICBpZiAoRyA+PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgSCA9IFFbR10K
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghSiB8fCAhSCkgewogICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgdmFyIEIgPSBIW3RoaXMuQ0FQVFVSRV0gPT09IHRydWUgPyB0cnVlIDogZmFsc2U7CiAgICAg
ICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NpbXBsZVJlbW92ZShK
LCBWLCBIW3RoaXMuV0ZOXSwgQikKICAgICAgICAgICAgICAgIH0gY2F0Y2goRSkgewogICAgICAg
ICAgICAgICAgICAgIHRoaXMubGFzdEVycm9yID0gRTsKICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2UKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRlbGV0ZSBRW0ddW3Ro
aXMuV0ZOXTsKICAgICAgICAgICAgICAgIGRlbGV0ZSBRW0ddW3RoaXMuRk5dOwogICAgICAgICAg
ICAgICAgUS5zcGxpY2UoRywgMSk7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZQogICAgICAg
ICAgICB9LAogICAgICAgICAgICBnZXRUYXJnZXQ6IGZ1bmN0aW9uIChDLCBBKSB7CiAgICAgICAg
ICAgICAgICB2YXIgQiA9IEMudGFyZ2V0IHx8IEMuc3JjRWxlbWVudDsKICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLnJlc29sdmVUZXh0Tm9kZShCKQogICAgICAgICAgICB9LAogICAgICAgICAg
ICByZXNvbHZlVGV4dE5vZGU6IGZ1bmN0aW9uIChBKSB7CiAgICAgICAgICAgICAgICB0cnkgewog
ICAgICAgICAgICAgICAgICAgIGlmIChBICYmIDMgPT0gQS5ub2RlVHlwZSkgewogICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gQS5wYXJlbnROb2RlCiAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgfSBjYXRjaChCKSB7fQogICAgICAgICAgICAgICAgcmV0dXJuIEEKICAg
ICAgICAgICAgfSwKICAgICAgICAgICAgZ2V0UGFnZVg6IGZ1bmN0aW9uIChBKSB7CiAgICAgICAg
ICAgICAgICB2YXIgQiA9IEEucGFnZVg7CiAgICAgICAgICAgICAgICBpZiAoIUIgJiYgMCAhPT0g
QikgewogICAgICAgICAgICAgICAgICAgIEIgPSBBLmNsaWVudFggfHwgMDsKICAgICAgICAgICAg
ICAgICAgICBpZiAodGhpcy5pc0lFKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEIgKz0gdGhp
cy5fZ2V0U2Nyb2xsTGVmdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgcmV0dXJuIEIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZ2V0
UGFnZVk6IGZ1bmN0aW9uIChCKSB7CiAgICAgICAgICAgICAgICB2YXIgQSA9IEIucGFnZVk7CiAg
ICAgICAgICAgICAgICBpZiAoIUEgJiYgMCAhPT0gQSkgewogICAgICAgICAgICAgICAgICAgIEEg
PSBCLmNsaWVudFkgfHwgMDsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0lFKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIEEgKz0gdGhpcy5fZ2V0U2Nyb2xsVG9wKCkKICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gQQog
ICAgICAgICAgICB9LAogICAgICAgICAgICBnZXRYWTogZnVuY3Rpb24gKEEpIHsKICAgICAgICAg
ICAgICAgIHJldHVybiBbdGhpcy5nZXRQYWdlWChBKSwgdGhpcy5nZXRQYWdlWShBKV0KICAgICAg
ICAgICAgfSwKICAgICAgICAgICAgZ2V0UmVsYXRlZFRhcmdldDogZnVuY3Rpb24gKEEpIHsKICAg
ICAgICAgICAgICAgIHZhciBCID0gQS5yZWxhdGVkVGFyZ2V0OwogICAgICAgICAgICAgICAgaWYg
KCFCKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKEEudHlwZSA9PSAibW91c2VvdXQiKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIEIgPSBBLnRvRWxlbWVudAogICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBLnR5cGUgPT0gIm1vdXNlb3Zl
ciIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgPSBBLmZyb21FbGVtZW50CiAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZXNvbHZlVGV4dE5vZGUoQikKICAgICAg
ICAgICAgfSwKICAgICAgICAgICAgZ2V0VGltZTogZnVuY3Rpb24gKEMpIHsKICAgICAgICAgICAg
ICAgIGlmICghQy50aW1lKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIEEgPSBuZXcgRGF0ZSgp
LmdldFRpbWUoKTsKICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAg
ICAgICBDLnRpbWUgPSBBCiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChCKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMubGFzdEVycm9yID0gQjsKICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEEKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICByZXR1cm4gQy50aW1lCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHN0b3BF
dmVudDogZnVuY3Rpb24gKEEpIHsKICAgICAgICAgICAgICAgIHRoaXMuc3RvcFByb3BhZ2F0aW9u
KEEpOwogICAgICAgICAgICAgICAgdGhpcy5wcmV2ZW50RGVmYXVsdChBKQogICAgICAgICAgICB9
LAogICAgICAgICAgICBzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uIChBKSB7CiAgICAgICAgICAg
ICAgICBpZiAoQS5zdG9wUHJvcGFnYXRpb24pIHsKICAgICAgICAgICAgICAgICAgICBBLnN0b3BQ
cm9wYWdhdGlvbigpCiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg
IEEuY2FuY2VsQnViYmxlID0gdHJ1ZQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAog
ICAgICAgICAgICBwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24gKEEpIHsKICAgICAgICAgICAgICAg
IGlmIChBLnByZXZlbnREZWZhdWx0KSB7CiAgICAgICAgICAgICAgICAgICAgQS5wcmV2ZW50RGVm
YXVsdCgpCiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIEEucmV0
dXJuVmFsdWUgPSBmYWxzZQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAg
ICAgICBnZXRFdmVudDogZnVuY3Rpb24gKEQsIEIpIHsKICAgICAgICAgICAgICAgIHZhciBBID0g
RCB8fCB3aW5kb3cuZXZlbnQ7CiAgICAgICAgICAgICAgICBpZiAoIUEpIHsKICAgICAgICAgICAg
ICAgICAgICB2YXIgQyA9IHRoaXMuZ2V0RXZlbnQuY2FsbGVyOwogICAgICAgICAgICAgICAgICAg
IHdoaWxlIChDKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEEgPSBDLmFyZ3VtZW50c1swXTsK
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEEgJiYgRXZlbnQgPT0gQS5jb25zdHJ1Y3Rvcikg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICBDID0gQy5jYWxsZXIKICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gQQogICAgICAg
ICAgICB9LAogICAgICAgICAgICBnZXRDaGFyQ29kZTogZnVuY3Rpb24gKEEpIHsKICAgICAgICAg
ICAgICAgIHZhciBCID0gQS5rZXlDb2RlIHx8IEEuY2hhckNvZGUgfHwgMDsKICAgICAgICAgICAg
ICAgIGlmIChZQUhPTy5lbnYudWEud2Via2l0ICYmIChCIGluIEwpKSB7CiAgICAgICAgICAgICAg
ICAgICAgQiA9IExbQl0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBC
CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF9nZXRDYWNoZUluZGV4OiBmdW5jdGlvbiAoRywg
RCwgQywgRSkgewogICAgICAgICAgICAgICAgZm9yICh2YXIgRiA9IDAsIEEgPSBHLmxlbmd0aDsK
ICAgICAgICAgICAgICAgIEYgPCBBOwogICAgICAgICAgICAgICAgRiA9IEYgKyAxKSB7CiAgICAg
ICAgICAgICAgICAgICAgdmFyIEIgPSBHW0ZdOwogICAgICAgICAgICAgICAgICAgIGlmIChCICYm
IEJbdGhpcy5GTl0gPT0gRSAmJiBCW3RoaXMuRUxdID09IEQgJiYgQlt0aGlzLlRZUEVdID09IEMp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEYKICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gLTEKICAgICAgICAgICAg
fSwKICAgICAgICAgICAgZ2VuZXJhdGVJZDogZnVuY3Rpb24gKEIpIHsKICAgICAgICAgICAgICAg
IHZhciBBID0gQi5pZDsKICAgICAgICAgICAgICAgIGlmICghQSkgewogICAgICAgICAgICAgICAg
ICAgIEEgPSAieXVpZXZ0YXV0b2lkLSIgKyBNOwogICAgICAgICAgICAgICAgICAgICsrTTsKICAg
ICAgICAgICAgICAgICAgICBCLmlkID0gQQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgcmV0dXJuIEEKICAgICAgICAgICAgfSwKICAgICAgICAgICAgX2lzVmFsaWRDb2xsZWN0aW9u
OiBmdW5jdGlvbiAoQSkgewogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gKEEgJiYgdHlwZW9mIEEgIT09ICJzdHJpbmciICYmIEEubGVuZ3RoICYmICFBLnRh
Z05hbWUgJiYgIUEuYWxlcnQgJiYgdHlwZW9mIEFbMF0gIT09ICJ1bmRlZmluZWQiKQogICAgICAg
ICAgICAgICAgfSBjYXRjaChCKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlCiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGVsQ2FjaGU6IHt9LAog
ICAgICAgICAgICBnZXRFbDogZnVuY3Rpb24gKEEpIHsKICAgICAgICAgICAgICAgIHJldHVybiAo
dHlwZW9mIEEgPT09ICJzdHJpbmciKSA/IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKEEpIDogQQog
ICAgICAgICAgICB9LAogICAgICAgICAgICBjbGVhckNhY2hlOiBmdW5jdGlvbiAoKSB7fSwKICAg
ICAgICAgICAgRE9NUmVhZHlFdmVudDogbmV3IFlBSE9PLnV0aWwuQ3VzdG9tRXZlbnQoIkRPTVJl
YWR5IiwgWUFIT08sIDAsIDAsIDEpLAogICAgICAgICAgICBfbG9hZDogZnVuY3Rpb24gKEEpIHsK
ICAgICAgICAgICAgICAgIGlmICghUikgewogICAgICAgICAgICAgICAgICAgIFIgPSB0cnVlOwog
ICAgICAgICAgICAgICAgICAgIHZhciBCID0gWUFIT08udXRpbC5FdmVudDsKICAgICAgICAgICAg
ICAgICAgICBCLl9yZWFkeSgpOwogICAgICAgICAgICAgICAgICAgIEIuX3RyeVByZWxvYWRBdHRh
Y2goKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBfcmVhZHk6
IGZ1bmN0aW9uIChBKSB7CiAgICAgICAgICAgICAgICB2YXIgQiA9IFlBSE9PLnV0aWwuRXZlbnQ7
CiAgICAgICAgICAgICAgICBpZiAoIUIuRE9NUmVhZHkpIHsKICAgICAgICAgICAgICAgICAgICBC
LkRPTVJlYWR5ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBCLkRPTVJlYWR5RXZlbnQuZmly
ZSgpOwogICAgICAgICAgICAgICAgICAgIEIuX3NpbXBsZVJlbW92ZShkb2N1bWVudCwgIkRPTUNv
bnRlbnRMb2FkZWQiLCBCLl9yZWFkeSkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwK
ICAgICAgICAgICAgX3RyeVByZWxvYWRBdHRhY2g6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAg
ICAgIGlmIChULmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIE4gPSAwOwogICAg
ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pbnRlcnZhbCkgewogICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLl9pbnRlcnZhbC5jYW5jZWwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5faW50ZXJ2YWwgPSBudWxsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgIHJldHVybgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHRoaXMubG9j
a2VkKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICBpZiAodGhpcy5pc0lFKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlz
LkRPTVJlYWR5KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRJbnRlcnZhbCgp
OwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0aGlzLmxvY2tlZCA9IHRydWU7CiAgICAg
ICAgICAgICAgICB2YXIgRCA9ICFSOwogICAgICAgICAgICAgICAgaWYgKCFEKSB7CiAgICAgICAg
ICAgICAgICAgICAgRCA9IChOID4gMCAmJiBULmxlbmd0aCA+IDApCiAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICB2YXIgRSA9IFtdOwogICAgICAgICAgICAgICAgdmFyIEMgPSBmdW5j
dGlvbiAoSiwgSSkgewogICAgICAgICAgICAgICAgICAgIHZhciBWID0gSjsKICAgICAgICAgICAg
ICAgICAgICBpZiAoSS5vdmVycmlkZUNvbnRleHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKEkub3ZlcnJpZGVDb250ZXh0ID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBWID0gSS5vYmoKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFYgPSBJLm92ZXJyaWRlQ29udGV4dAogICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIEkuZm4u
Y2FsbChWLCBJLm9iaikKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB2YXIgQSwg
QiwgRiwgRywgSCA9IFtdOwogICAgICAgICAgICAgICAgZm9yIChBID0gMCwgQiA9IFQubGVuZ3Ro
OwogICAgICAgICAgICAgICAgQSA8IEI7CiAgICAgICAgICAgICAgICBBID0gQSArIDEpIHsKICAg
ICAgICAgICAgICAgICAgICBGID0gVFtBXTsKICAgICAgICAgICAgICAgICAgICBpZiAoRikgewog
ICAgICAgICAgICAgICAgICAgICAgICBHID0gdGhpcy5nZXRFbChGLmlkKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKEcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChGLmNo
ZWNrUmVhZHkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUiB8fCBHLm5l
eHRTaWJsaW5nIHx8ICFEKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEgu
cHVzaChGKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFtBXSA9IG51bGwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMoRywgRik7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFtBXSA9IG51bGwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEUucHVzaChGKQogICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZm9y
IChBID0gMCwgQiA9IEgubGVuZ3RoOwogICAgICAgICAgICAgICAgQSA8IEI7CiAgICAgICAgICAg
ICAgICBBID0gQSArIDEpIHsKICAgICAgICAgICAgICAgICAgICBGID0gSFtBXTsKICAgICAgICAg
ICAgICAgICAgICBDKHRoaXMuZ2V0RWwoRi5pZCksIEYpCiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICBOLS07CiAgICAgICAgICAgICAgICBpZiAoRCkgewogICAgICAgICAgICAgICAg
ICAgIGZvciAoQSA9IFQubGVuZ3RoIC0gMTsKICAgICAgICAgICAgICAgICAgICBBID4gLTE7CiAg
ICAgICAgICAgICAgICAgICAgQS0tKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEYgPSBUW0Fd
OwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUYgfHwgIUYuaWQpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFQuc3BsaWNlKEEsIDEpCiAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydEludGVy
dmFsKCkKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRo
aXMuX2ludGVydmFsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ludGVydmFsLmNh
bmNlbCgpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnRlcnZhbCA9IG51bGwKICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0aGlz
LmxvY2tlZCA9IGZhbHNlCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHB1cmdlRWxlbWVudDog
ZnVuY3Rpb24gKEYsIEUsIEMpIHsKICAgICAgICAgICAgICAgIHZhciBIID0gKFlBSE9PLmxhbmcu
aXNTdHJpbmcoRikpID8gdGhpcy5nZXRFbChGKSA6IEY7CiAgICAgICAgICAgICAgICB2YXIgRCA9
IHRoaXMuZ2V0TGlzdGVuZXJzKEgsIEMpLAogICAgICAgICAgICAgICAgICAgIEcsIEI7CiAgICAg
ICAgICAgICAgICBpZiAoRCkgewogICAgICAgICAgICAgICAgICAgIGZvciAoRyA9IEQubGVuZ3Ro
IC0gMTsKICAgICAgICAgICAgICAgICAgICBHID4gLTE7CiAgICAgICAgICAgICAgICAgICAgRy0t
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBBID0gRFtHXTsKICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcihILCBBLnR5cGUsIEEuZm4pCiAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKEUgJiYgSCAm
JiBILmNoaWxkTm9kZXMpIHsKICAgICAgICAgICAgICAgICAgICBmb3IgKEcgPSAwLCBCID0gSC5j
aGlsZE5vZGVzLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICBHIDwgQjsgKytHKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMucHVyZ2VFbGVtZW50KEguY2hpbGROb2Rlc1tHXSwgRSwg
QykKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0s
CiAgICAgICAgICAgIGdldExpc3RlbmVyczogZnVuY3Rpb24gKEgsIEopIHsKICAgICAgICAgICAg
ICAgIHZhciBFID0gW10sCiAgICAgICAgICAgICAgICAgICAgSTsKICAgICAgICAgICAgICAgIGlm
ICghSikgewogICAgICAgICAgICAgICAgICAgIEkgPSBbUSwgT10KICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKEogPT09ICJ1bmxvYWQiKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIEkgPSBbT10KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgICAgICAgICBKID0gdGhpcy5fZ2V0VHlwZShKKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgSSA9IFtRXQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIHZhciBDID0gKFlBSE9PLmxhbmcuaXNTdHJpbmcoSCkpID8gdGhpcy5n
ZXRFbChIKSA6IEg7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBGID0gMDsKICAgICAgICAgICAg
ICAgIEYgPCBJLmxlbmd0aDsKICAgICAgICAgICAgICAgIEYgPSBGICsgMSkgewogICAgICAgICAg
ICAgICAgICAgIHZhciBBID0gSVtGXTsKICAgICAgICAgICAgICAgICAgICBpZiAoQSkgewogICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBEID0gMCwgQiA9IEEubGVuZ3RoOwogICAgICAg
ICAgICAgICAgICAgICAgICBEIDwgQjsgKytEKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgRyA9IEFbRF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRyAmJiBHW3Ro
aXMuRUxdID09PSBDICYmICghSiB8fCBKID09PSBHW3RoaXMuVFlQRV0pKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRS5wdXNoKHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHlwZTogR1t0aGlzLlRZUEVdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmbjogR1t0aGlzLkZOXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb2JqOiBHW3RoaXMuT0JKXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YWRqdXN0OiBHW3RoaXMuT1ZFUlJJREVdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzY29wZTogR1t0aGlzLkFESl9TQ09QRV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluZGV4OiBECiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVy
biAoRS5sZW5ndGgpID8gRSA6IG51bGwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgX3VubG9h
ZDogZnVuY3Rpb24gKEIpIHsKICAgICAgICAgICAgICAgIHZhciBIID0gWUFIT08udXRpbC5FdmVu
dCwKICAgICAgICAgICAgICAgICAgICBFLCBGLCBHLCBDLCBELCBBID0gTy5zbGljZSgpLAogICAg
ICAgICAgICAgICAgICAgIEk7CiAgICAgICAgICAgICAgICBmb3IgKEUgPSAwLCBDID0gTy5sZW5n
dGg7CiAgICAgICAgICAgICAgICBFIDwgQzsgKytFKSB7CiAgICAgICAgICAgICAgICAgICAgRyA9
IEFbRV07CiAgICAgICAgICAgICAgICAgICAgaWYgKEcpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgSSA9IHdpbmRvdzsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEdbSC5BREpfU0NPUEVd
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoR1tILkFESl9TQ09QRV0gPT09IHRy
dWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJID0gR1tILlVOTE9BRF9PQkpd
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEkgPSBHW0guQURKX1NDT1BFXQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIEdb
SC5GTl0uY2FsbChJLCBILmdldEV2ZW50KEIsIEdbSC5FTF0pLCBHW0guVU5MT0FEX09CSl0pOwog
ICAgICAgICAgICAgICAgICAgICAgICBBW0VdID0gbnVsbAogICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIEcgPSBudWxsOwogICAgICAgICAgICAg
ICAgSSA9IG51bGw7CiAgICAgICAgICAgICAgICBPID0gbnVsbDsKICAgICAgICAgICAgICAgIGlm
IChRKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yIChGID0gUS5sZW5ndGggLSAxOwogICAgICAg
ICAgICAgICAgICAgIEYgPiAtMTsKICAgICAgICAgICAgICAgICAgICBGLS0pIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgRyA9IFFbRl07CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChHKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBILnJlbW92ZUxpc3RlbmVyKEdbSC5FTF0sIEdb
SC5UWVBFXSwgR1tILkZOXSwgRikKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBHID0gbnVsbAogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgSC5fc2ltcGxlUmVtb3ZlKHdpbmRvdywgInVubG9hZCIsIEguX3Vu
bG9hZCkKICAgICAgICAgICAgfSwKICAgICAgICAgICAgX2dldFNjcm9sbExlZnQ6IGZ1bmN0aW9u
ICgpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nZXRTY3JvbGwoKVsxXQogICAgICAg
ICAgICB9LAogICAgICAgICAgICBfZ2V0U2Nyb2xsVG9wOiBmdW5jdGlvbiAoKSB7CiAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fZ2V0U2Nyb2xsKClbMF0KICAgICAgICAgICAgfSwKICAgICAg
ICAgICAgX2dldFNjcm9sbDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgdmFyIEIgPSBk
b2N1bWVudC5kb2N1bWVudEVsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgQSA9IGRvY3VtZW50
LmJvZHk7CiAgICAgICAgICAgICAgICBpZiAoQiAmJiAoQi5zY3JvbGxUb3AgfHwgQi5zY3JvbGxM
ZWZ0KSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBbQi5zY3JvbGxUb3AsIEIuc2Nyb2xs
TGVmdF0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKEEp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtBLnNjcm9sbFRvcCwgQS5zY3JvbGxM
ZWZ0XQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBbMCwgMF0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgIH0sCiAgICAgICAgICAgIHJlZ0NFOiBmdW5jdGlvbiAoKSB7fSwKICAgICAgICAg
ICAgX3NpbXBsZUFkZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5h
ZGRFdmVudExpc3RlbmVyKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChE
LCBDLCBBLCBCKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEQuYWRkRXZlbnRMaXN0ZW5lcihD
LCBBLCAoQikpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICBpZiAod2luZG93LmF0dGFjaEV2ZW50KSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoRCwgQywgQSwgQikgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRC5hdHRhY2hFdmVudCgib24iICsgQywgQSkKICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7fQogICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgfSAoKSwKICAgICAgICAgICAgX3NpbXBsZVJlbW92ZTog
ZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5yZW1vdmVFdmVudExpc3Rl
bmVyKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChELCBDLCBBLCBCKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIEQucmVtb3ZlRXZlbnRMaXN0ZW5lcihDLCBBLCAoQikp
CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICBpZiAod2luZG93LmRldGFjaEV2ZW50KSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmdW5jdGlvbiAoQSwgQywgQikgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQS5kZXRhY2hFdmVudCgib24iICsgQywgQikKICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmdW5jdGlvbiAoKSB7fQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgfSAoKQogICAgICAgIH0KICAgIH0gKCk7CiAgICAoZnVuY3Rpb24gKCkgewog
ICAgICAgIHZhciBBID0gWUFIT08udXRpbC5FdmVudDsKICAgICAgICBBLm9uID0gQS5hZGRMaXN0
ZW5lcjsKICAgICAgICBBLm9uRm9jdXMgPSBBLmFkZEZvY3VzTGlzdGVuZXI7CiAgICAgICAgQS5v
bkJsdXIgPSBBLmFkZEJsdXJMaXN0ZW5lcjsKICAgICAgICBpZiAoQS5pc0lFKSB7CiAgICAgICAg
ICAgIGlmIChzZWxmICE9PSBzZWxmLnRvcCkgewogICAgICAgICAgICAgICAgZG9jdW1lbnQub25y
ZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgIGlmIChk
b2N1bWVudC5yZWFkeVN0YXRlID09ICJjb21wbGV0ZSIpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgZG9jdW1lbnQub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDsKICAgICAgICAgICAgICAgICAg
ICAgICAgQS5fcmVhZHkoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIFlBSE9PLnV0aWwuRXZlbnQub25E
T01SZWFkeShZQUhPTy51dGlsLkV2ZW50Ll90cnlQcmVsb2FkQXR0YWNoLCBZQUhPTy51dGlsLkV2
ZW50LCB0cnVlKTsKICAgICAgICAgICAgICAgIHZhciBCID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgicCIpOwogICAgICAgICAgICAgICAgQS5fZHJpID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkg
ewogICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEIuZG9T
Y3JvbGwoImxlZnQiKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChBLl9k
cmkpOwogICAgICAgICAgICAgICAgICAgICAgICBBLl9kcmkgPSBudWxsOwogICAgICAgICAgICAg
ICAgICAgICAgICBBLl9yZWFkeSgpOwogICAgICAgICAgICAgICAgICAgICAgICBCID0gbnVsbAog
ICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goQykge30KICAgICAgICAgICAgICAgIH0sCiAgICAg
ICAgICAgICAgICBBLlBPTExfSU5URVJWQUwpCiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICBpZiAoQS53ZWJraXQgJiYgQS53ZWJraXQgPCA1MjUpIHsKICAgICAgICAg
ICAgICAgIEEuX2RyaSA9IHNldEludGVydmFsKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAg
ICAgICB2YXIgQyA9IGRvY3VtZW50LnJlYWR5U3RhdGU7CiAgICAgICAgICAgICAgICAgICAgaWYg
KCJsb2FkZWQiID09IEMgfHwgImNvbXBsZXRlIiA9PSBDKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIGNsZWFySW50ZXJ2YWwoQS5fZHJpKTsKICAgICAgICAgICAgICAgICAgICAgICAgQS5fZHJp
ID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAgQS5fcmVhZHkoKQogICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBBLlBPTExfSU5URVJW
QUwpCiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBBLl9zaW1wbGVBZGQoZG9j
dW1lbnQsICJET01Db250ZW50TG9hZGVkIiwgQS5fcmVhZHkpCiAgICAgICAgICAgIH0KICAgICAg
ICB9CiAgICAgICAgQS5fc2ltcGxlQWRkKHdpbmRvdywgImxvYWQiLCBBLl9sb2FkKTsKICAgICAg
ICBBLl9zaW1wbGVBZGQod2luZG93LCAidW5sb2FkIiwgQS5fdW5sb2FkKTsKICAgICAgICBBLl90
cnlQcmVsb2FkQXR0YWNoKCkKICAgIH0pKCkKfQpZQUhPTy51dGlsLkV2ZW50UHJvdmlkZXIgPSBm
dW5jdGlvbiAoKSB7fTsKWUFIT08udXRpbC5FdmVudFByb3ZpZGVyLnByb3RvdHlwZSA9IHsKICAg
IF9feXVpX2V2ZW50czogbnVsbCwKICAgIF9feXVpX3N1YnNjcmliZXJzOiBudWxsLAogICAgc3Vi
c2NyaWJlOiBmdW5jdGlvbiAoRywgSywgSCwgSSkgewogICAgICAgIHRoaXMuX195dWlfZXZlbnRz
ID0gdGhpcy5fX3l1aV9ldmVudHMgfHwge307CiAgICAgICAgdmFyIEogPSB0aGlzLl9feXVpX2V2
ZW50c1tHXTsKICAgICAgICBpZiAoSikgewogICAgICAgICAgICBKLnN1YnNjcmliZShLLCBILCBJ
KQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMuX195dWlfc3Vic2NyaWJlcnMgPSB0
aGlzLl9feXVpX3N1YnNjcmliZXJzIHx8IHt9OwogICAgICAgICAgICB2YXIgTCA9IHRoaXMuX195
dWlfc3Vic2NyaWJlcnM7CiAgICAgICAgICAgIGlmICghTFtHXSkgewogICAgICAgICAgICAgICAg
TFtHXSA9IFtdCiAgICAgICAgICAgIH0KICAgICAgICAgICAgTFtHXS5wdXNoKHsKICAgICAgICAg
ICAgICAgIGZuOiBLLAogICAgICAgICAgICAgICAgb2JqOiBILAogICAgICAgICAgICAgICAgb3Zl
cnJpZGVDb250ZXh0OiBJCiAgICAgICAgICAgIH0pCiAgICAgICAgfQogICAgfSwKICAgIHVuc3Vi
c2NyaWJlOiBmdW5jdGlvbiAoTSwgSywgSSkgewogICAgICAgIHRoaXMuX195dWlfZXZlbnRzID0g
dGhpcy5fX3l1aV9ldmVudHMgfHwge307CiAgICAgICAgdmFyIEggPSB0aGlzLl9feXVpX2V2ZW50
czsKICAgICAgICBpZiAoTSkgewogICAgICAgICAgICB2YXIgSiA9IEhbTV07CiAgICAgICAgICAg
IGlmIChKKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gSi51bnN1YnNjcmliZShLLCBJKQogICAg
ICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIE4gPSB0cnVlOwogICAg
ICAgICAgICBmb3IgKHZhciBMIGluIEgpIHsKICAgICAgICAgICAgICAgIGlmIChZQUhPTy5sYW5n
Lmhhc093blByb3BlcnR5KEgsIEwpKSB7CiAgICAgICAgICAgICAgICAgICAgTiA9IE4gJiYgSFtM
XS51bnN1YnNjcmliZShLLCBJKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAg
ICAgICAgIHJldHVybiBOCiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZQogICAgfSwKICAg
IHVuc3Vic2NyaWJlQWxsOiBmdW5jdGlvbiAoQikgewogICAgICAgIHJldHVybiB0aGlzLnVuc3Vi
c2NyaWJlKEIpCiAgICB9LAogICAgY3JlYXRlRXZlbnQ6IGZ1bmN0aW9uIChOLCBJKSB7CiAgICAg
ICAgdGhpcy5fX3l1aV9ldmVudHMgPSB0aGlzLl9feXVpX2V2ZW50cyB8fCB7fTsKICAgICAgICB2
YXIgSyA9IEkgfHwge30sCiAgICAgICAgICAgIEwgPSB0aGlzLl9feXVpX2V2ZW50cywKICAgICAg
ICAgICAgSjsKICAgICAgICBpZiAoTFtOXSkge30gZWxzZSB7CiAgICAgICAgICAgIEogPSBuZXcg
WUFIT08udXRpbC5DdXN0b21FdmVudChOLCBLLnNjb3BlIHx8IHRoaXMsIEsuc2lsZW50LCBZQUhP
Ty51dGlsLkN1c3RvbUV2ZW50LkZMQVQsIEsuZmlyZU9uY2UpOwogICAgICAgICAgICBMW05dID0g
SjsKICAgICAgICAgICAgaWYgKEsub25TdWJzY3JpYmVDYWxsYmFjaykgewogICAgICAgICAgICAg
ICAgSi5zdWJzY3JpYmVFdmVudC5zdWJzY3JpYmUoSy5vblN1YnNjcmliZUNhbGxiYWNrKQogICAg
ICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuX195dWlfc3Vic2NyaWJlcnMgPSB0aGlzLl9feXVp
X3N1YnNjcmliZXJzIHx8IHt9OwogICAgICAgICAgICB2YXIgSCA9IHRoaXMuX195dWlfc3Vic2Ny
aWJlcnNbTl07CiAgICAgICAgICAgIGlmIChIKSB7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBN
ID0gMDsKICAgICAgICAgICAgICAgIE0gPCBILmxlbmd0aDsgKytNKSB7CiAgICAgICAgICAgICAg
ICAgICAgSi5zdWJzY3JpYmUoSFtNXS5mbiwgSFtNXS5vYmosIEhbTV0ub3ZlcnJpZGVDb250ZXh0
KQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVy
biBMW05dCiAgICB9LAogICAgZmlyZUV2ZW50OiBmdW5jdGlvbiAoSCkgewogICAgICAgIHRoaXMu
X195dWlfZXZlbnRzID0gdGhpcy5fX3l1aV9ldmVudHMgfHwge307CiAgICAgICAgdmFyIEYgPSB0
aGlzLl9feXVpX2V2ZW50c1tIXTsKICAgICAgICBpZiAoIUYpIHsKICAgICAgICAgICAgcmV0dXJu
IG51bGwKICAgICAgICB9CiAgICAgICAgdmFyIEUgPSBbXTsKICAgICAgICBmb3IgKHZhciBHID0g
MTsKICAgICAgICBHIDwgYXJndW1lbnRzLmxlbmd0aDsgKytHKSB7CiAgICAgICAgICAgIEUucHVz
aChhcmd1bWVudHNbR10pCiAgICAgICAgfQogICAgICAgIHJldHVybiBGLmZpcmUuYXBwbHkoRiwg
RSkKICAgIH0sCiAgICBoYXNFdmVudDogZnVuY3Rpb24gKEIpIHsKICAgICAgICBpZiAodGhpcy5f
X3l1aV9ldmVudHMpIHsKICAgICAgICAgICAgaWYgKHRoaXMuX195dWlfZXZlbnRzW0JdKSB7CiAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAg
IHJldHVybiBmYWxzZQogICAgfQp9OwooZnVuY3Rpb24gKCkgewogICAgdmFyIEQgPSBZQUhPTy51
dGlsLkV2ZW50LAogICAgICAgIEUgPSBZQUhPTy5sYW5nOwogICAgWUFIT08udXRpbC5LZXlMaXN0
ZW5lciA9IGZ1bmN0aW9uIChMLCBBLCBLLCBKKSB7CiAgICAgICAgaWYgKCFMKSB7fSBlbHNlIHsK
ICAgICAgICAgICAgaWYgKCFBKSB7fSBlbHNlIHsKICAgICAgICAgICAgICAgIGlmICghSykge30K
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIUopIHsKICAgICAgICAgICAgSiA9
IFlBSE9PLnV0aWwuS2V5TGlzdGVuZXIuS0VZRE9XTgogICAgICAgIH0KICAgICAgICB2YXIgQyA9
IG5ldyBZQUhPTy51dGlsLkN1c3RvbUV2ZW50KCJrZXlQcmVzc2VkIik7CiAgICAgICAgdGhpcy5l
bmFibGVkRXZlbnQgPSBuZXcgWUFIT08udXRpbC5DdXN0b21FdmVudCgiZW5hYmxlZCIpOwogICAg
ICAgIHRoaXMuZGlzYWJsZWRFdmVudCA9IG5ldyBZQUhPTy51dGlsLkN1c3RvbUV2ZW50KCJkaXNh
YmxlZCIpOwogICAgICAgIGlmIChFLmlzU3RyaW5nKEwpKSB7CiAgICAgICAgICAgIEwgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZChMKQogICAgICAgIH0KICAgICAgICBpZiAoRS5pc0Z1bmN0aW9u
KEspKSB7CiAgICAgICAgICAgIEMuc3Vic2NyaWJlKEspCiAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgQy5zdWJzY3JpYmUoSy5mbiwgSy5zY29wZSwgSy5jb3JyZWN0U2NvcGUpCiAgICAgICAg
fQogICAgICAgIGZ1bmN0aW9uIEIoUCwgUSkgewogICAgICAgICAgICBpZiAoIUEuc2hpZnQpIHsK
ICAgICAgICAgICAgICAgIEEuc2hpZnQgPSBmYWxzZQogICAgICAgICAgICB9CiAgICAgICAgICAg
IGlmICghQS5hbHQpIHsKICAgICAgICAgICAgICAgIEEuYWx0ID0gZmFsc2UKICAgICAgICAgICAg
fQogICAgICAgICAgICBpZiAoIUEuY3RybCkgewogICAgICAgICAgICAgICAgQS5jdHJsID0gZmFs
c2UKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoUC5zaGlmdEtleSA9PSBBLnNoaWZ0ICYm
IFAuYWx0S2V5ID09IEEuYWx0ICYmIFAuY3RybEtleSA9PSBBLmN0cmwpIHsKICAgICAgICAgICAg
ICAgIHZhciBJLCBSID0gQS5rZXlzLAogICAgICAgICAgICAgICAgICAgIEc7CiAgICAgICAgICAg
ICAgICBpZiAoWUFIT08ubGFuZy5pc0FycmF5KFIpKSB7CiAgICAgICAgICAgICAgICAgICAgZm9y
ICh2YXIgSCA9IDA7CiAgICAgICAgICAgICAgICAgICAgSCA8IFIubGVuZ3RoOwogICAgICAgICAg
ICAgICAgICAgIEgrKykgewogICAgICAgICAgICAgICAgICAgICAgICBJID0gUltIXTsKICAgICAg
ICAgICAgICAgICAgICAgICAgRyA9IEQuZ2V0Q2hhckNvZGUoUCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChJID09IEcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMuZmlyZShH
LCBQKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgIEcgPSBELmdldENoYXJDb2RlKFApOwogICAgICAgICAgICAgICAg
ICAgIGlmIChSID09IEcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgQy5maXJlKEcsIFApCiAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAg
ICAgfQogICAgICAgIHRoaXMuZW5hYmxlID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICBpZiAo
IXRoaXMuZW5hYmxlZCkgewogICAgICAgICAgICAgICAgRC5vbihMLCBKLCBCKTsKICAgICAgICAg
ICAgICAgIHRoaXMuZW5hYmxlZEV2ZW50LmZpcmUoQSkKICAgICAgICAgICAgfQogICAgICAgICAg
ICB0aGlzLmVuYWJsZWQgPSB0cnVlCiAgICAgICAgfTsKICAgICAgICB0aGlzLmRpc2FibGUgPSBm
dW5jdGlvbiAoKSB7CiAgICAgICAgICAgIGlmICh0aGlzLmVuYWJsZWQpIHsKICAgICAgICAgICAg
ICAgIEQucmVtb3ZlTGlzdGVuZXIoTCwgSiwgQik7CiAgICAgICAgICAgICAgICB0aGlzLmRpc2Fi
bGVkRXZlbnQuZmlyZShBKQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuZW5hYmxlZCA9
IGZhbHNlCiAgICAgICAgfTsKICAgICAgICB0aGlzLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgewog
ICAgICAgICAgICByZXR1cm4gIktleUxpc3RlbmVyIFsiICsgQS5rZXlzICsgIl0gIiArIEwudGFn
TmFtZSArIChMLmlkID8gIlsiICsgTC5pZCArICJdIiA6ICIiKQogICAgICAgIH0KICAgIH07CiAg
ICB2YXIgRiA9IFlBSE9PLnV0aWwuS2V5TGlzdGVuZXI7CiAgICBGLktFWURPV04gPSAia2V5ZG93
biI7CiAgICBGLktFWVVQID0gImtleXVwIjsKICAgIEYuS0VZID0gewogICAgICAgIEFMVDogMTgs
CiAgICAgICAgQkFDS19TUEFDRTogOCwKICAgICAgICBDQVBTX0xPQ0s6IDIwLAogICAgICAgIENP
TlRST0w6IDE3LAogICAgICAgIERFTEVURTogNDYsCiAgICAgICAgRE9XTjogNDAsCiAgICAgICAg
RU5EOiAzNSwKICAgICAgICBFTlRFUjogMTMsCiAgICAgICAgRVNDQVBFOiAyNywKICAgICAgICBI
T01FOiAzNiwKICAgICAgICBMRUZUOiAzNywKICAgICAgICBNRVRBOiAyMjQsCiAgICAgICAgTlVN
X0xPQ0s6IDE0NCwKICAgICAgICBQQUdFX0RPV046IDM0LAogICAgICAgIFBBR0VfVVA6IDMzLAog
ICAgICAgIFBBVVNFOiAxOSwKICAgICAgICBQUklOVFNDUkVFTjogNDQsCiAgICAgICAgUklHSFQ6
IDM5LAogICAgICAgIFNDUk9MTF9MT0NLOiAxNDUsCiAgICAgICAgU0hJRlQ6IDE2LAogICAgICAg
IFNQQUNFOiAzMiwKICAgICAgICBUQUI6IDksCiAgICAgICAgVVA6IDM4CiAgICB9Cn0pKCk7CllB
SE9PLnJlZ2lzdGVyKCJldmVudCIsIFlBSE9PLnV0aWwuRXZlbnQsIHsKICAgIHZlcnNpb246ICIy
LjguMHI0IiwKICAgIGJ1aWxkOiAiMjQ0OSIKfSk7CllBSE9PLnJlZ2lzdGVyKCJ5YWhvby1kb20t
ZXZlbnQiLCBZQUhPTywgewogICAgdmVyc2lvbjogIjIuOC4wcjQiLAogICAgYnVpbGQ6ICIyNDQ5
Igp9KTsKPC9zY3JpcHQ+CgoKCgoKCgoKCgoKCjxzY3JpcHQ+CihmdW5jdGlvbiAoKSB7CiAgICBZ
QUhPTy51dGlsLkNvbmZpZyA9IGZ1bmN0aW9uIChBKSB7CiAgICAgICAgaWYgKEEpIHsKICAgICAg
ICAgICAgdGhpcy5pbml0KEEpCiAgICAgICAgfQogICAgfTsKICAgIHZhciBGID0gWUFIT08ubGFu
ZywKICAgICAgICBFID0gWUFIT08udXRpbC5DdXN0b21FdmVudCwKICAgICAgICBEID0gWUFIT08u
dXRpbC5Db25maWc7CiAgICBELkNPTkZJR19DSEFOR0VEX0VWRU5UID0gImNvbmZpZ0NoYW5nZWQi
OwogICAgRC5CT09MRUFOX1RZUEUgPSAiYm9vbGVhbiI7CiAgICBELnByb3RvdHlwZSA9IHsKICAg
ICAgICBvd25lcjogbnVsbCwKICAgICAgICBxdWV1ZUluUHJvZ3Jlc3M6IGZhbHNlLAogICAgICAg
IGNvbmZpZzogbnVsbCwKICAgICAgICBpbml0aWFsQ29uZmlnOiBudWxsLAogICAgICAgIGV2ZW50
UXVldWU6IG51bGwsCiAgICAgICAgY29uZmlnQ2hhbmdlZEV2ZW50OiBudWxsLAogICAgICAgIGlu
aXQ6IGZ1bmN0aW9uIChBKSB7CiAgICAgICAgICAgIHRoaXMub3duZXIgPSBBOwogICAgICAgICAg
ICB0aGlzLmNvbmZpZ0NoYW5nZWRFdmVudCA9IHRoaXMuY3JlYXRlRXZlbnQoRC5DT05GSUdfQ0hB
TkdFRF9FVkVOVCk7CiAgICAgICAgICAgIHRoaXMuY29uZmlnQ2hhbmdlZEV2ZW50LnNpZ25hdHVy
ZSA9IEUuTElTVDsKICAgICAgICAgICAgdGhpcy5xdWV1ZUluUHJvZ3Jlc3MgPSBmYWxzZTsKICAg
ICAgICAgICAgdGhpcy5jb25maWcgPSB7fTsKICAgICAgICAgICAgdGhpcy5pbml0aWFsQ29uZmln
ID0ge307CiAgICAgICAgICAgIHRoaXMuZXZlbnRRdWV1ZSA9IFtdCiAgICAgICAgfSwKICAgICAg
ICBjaGVja0Jvb2xlYW46IGZ1bmN0aW9uIChBKSB7CiAgICAgICAgICAgIHJldHVybiAodHlwZW9m
IEEgPT0gRC5CT09MRUFOX1RZUEUpCiAgICAgICAgfSwKICAgICAgICBjaGVja051bWJlcjogZnVu
Y3Rpb24gKEEpIHsKICAgICAgICAgICAgcmV0dXJuICghaXNOYU4oQSkpCiAgICAgICAgfSwKICAg
ICAgICBmaXJlRXZlbnQ6IGZ1bmN0aW9uIChDLCBBKSB7CiAgICAgICAgICAgIHZhciBCID0gdGhp
cy5jb25maWdbQ107CiAgICAgICAgICAgIGlmIChCICYmIEIuZXZlbnQpIHsKICAgICAgICAgICAg
ICAgIEIuZXZlbnQuZmlyZShBKQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBhZGRQ
cm9wZXJ0eTogZnVuY3Rpb24gKEEsIEIpIHsKICAgICAgICAgICAgQSA9IEEudG9Mb3dlckNhc2Uo
KTsKICAgICAgICAgICAgdGhpcy5jb25maWdbQV0gPSBCOwogICAgICAgICAgICBCLmV2ZW50ID0g
dGhpcy5jcmVhdGVFdmVudChBLCB7CiAgICAgICAgICAgICAgICBzY29wZTogdGhpcy5vd25lcgog
ICAgICAgICAgICB9KTsKICAgICAgICAgICAgQi5ldmVudC5zaWduYXR1cmUgPSBFLkxJU1Q7CiAg
ICAgICAgICAgIEIua2V5ID0gQTsKICAgICAgICAgICAgaWYgKEIuaGFuZGxlcikgewogICAgICAg
ICAgICAgICAgQi5ldmVudC5zdWJzY3JpYmUoQi5oYW5kbGVyLCB0aGlzLm93bmVyKQogICAgICAg
ICAgICB9CiAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHkoQSwgQi52YWx1ZSwgdHJ1ZSk7CiAg
ICAgICAgICAgIGlmICghQi5zdXBwcmVzc0V2ZW50KSB7CiAgICAgICAgICAgICAgICB0aGlzLnF1
ZXVlUHJvcGVydHkoQSwgQi52YWx1ZSkKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAg
Z2V0Q29uZmlnOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBIID0ge30sCiAgICAgICAg
ICAgICAgICBCID0gdGhpcy5jb25maWcsCiAgICAgICAgICAgICAgICBBLCBDOwogICAgICAgICAg
ICBmb3IgKEEgaW4gQikgewogICAgICAgICAgICAgICAgaWYgKEYuaGFzT3duUHJvcGVydHkoQiwg
QSkpIHsKICAgICAgICAgICAgICAgICAgICBDID0gQltBXTsKICAgICAgICAgICAgICAgICAgICBp
ZiAoQyAmJiBDLmV2ZW50KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEhbQV0gPSBDLnZhbHVl
CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAg
ICAgICAgICAgIHJldHVybiBICiAgICAgICAgfSwKICAgICAgICBnZXRQcm9wZXJ0eTogZnVuY3Rp
b24gKEIpIHsKICAgICAgICAgICAgdmFyIEEgPSB0aGlzLmNvbmZpZ1tCLnRvTG93ZXJDYXNlKCld
OwogICAgICAgICAgICBpZiAoQSAmJiBBLmV2ZW50KSB7CiAgICAgICAgICAgICAgICByZXR1cm4g
QS52YWx1ZQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVm
aW5lZAogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICByZXNldFByb3BlcnR5OiBmdW5j
dGlvbiAoQikgewogICAgICAgICAgICBCID0gQi50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICB2
YXIgQSA9IHRoaXMuY29uZmlnW0JdOwogICAgICAgICAgICBpZiAoQSAmJiBBLmV2ZW50KSB7CiAg
ICAgICAgICAgICAgICBpZiAodGhpcy5pbml0aWFsQ29uZmlnW0JdICYmICFGLmlzVW5kZWZpbmVk
KHRoaXMuaW5pdGlhbENvbmZpZ1tCXSkpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFBy
b3BlcnR5KEIsIHRoaXMuaW5pdGlhbENvbmZpZ1tCXSk7CiAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWUKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBzZXRQ
cm9wZXJ0eTogZnVuY3Rpb24gKEMsIEEsIEgpIHsKICAgICAgICAgICAgdmFyIEI7CiAgICAgICAg
ICAgIEMgPSBDLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICAgIGlmICh0aGlzLnF1ZXVlSW5Qcm9n
cmVzcyAmJiAhSCkgewogICAgICAgICAgICAgICAgdGhpcy5xdWV1ZVByb3BlcnR5KEMsIEEpOwog
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWUKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgIEIgPSB0aGlzLmNvbmZpZ1tDXTsKICAgICAgICAgICAgICAgIGlmIChCICYmIEIuZXZl
bnQpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoQi52YWxpZGF0b3IgJiYgIUIudmFsaWRhdG9y
KEEpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZQogICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEIudmFsdWUgPSBBOwogICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIUgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMuZmlyZUV2ZW50KEMsIEEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5j
b25maWdDaGFuZ2VkRXZlbnQuZmlyZShbQywgQV0pCiAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWUKICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBxdWV1
ZVByb3BlcnR5OiBmdW5jdGlvbiAoQywgVykgewogICAgICAgICAgICBDID0gQy50b0xvd2VyQ2Fz
ZSgpOwogICAgICAgICAgICB2YXIgVSA9IHRoaXMuY29uZmlnW0NdLAogICAgICAgICAgICAgICAg
YiA9IGZhbHNlLAogICAgICAgICAgICAgICAgYywgZiwgZSwgZCwgWCwgViwgZywgWiwgWSwgQSwg
YSwgQiwgaDsKICAgICAgICAgICAgaWYgKFUgJiYgVS5ldmVudCkgewogICAgICAgICAgICAgICAg
aWYgKCFGLmlzVW5kZWZpbmVkKFcpICYmIFUudmFsaWRhdG9yICYmICFVLnZhbGlkYXRvcihXKSkg
ewogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZQogICAgICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICAgICBpZiAoIUYuaXNVbmRlZmluZWQoVykpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgVS52YWx1ZSA9IFcKICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICAgICBXID0gVS52YWx1ZQogICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICBiID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgYyA9IHRo
aXMuZXZlbnRRdWV1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgZm9yIChhID0gMDsKICAg
ICAgICAgICAgICAgICAgICBhIDwgYzsKICAgICAgICAgICAgICAgICAgICBhKyspIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgZiA9IHRoaXMuZXZlbnRRdWV1ZVthXTsKICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBmWzBdOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZCA9IGZbMV07CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoZSA9PSBDKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5ldmVudFF1ZXVlW2FdID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLmV2ZW50UXVldWUucHVzaChbQywgKCFGLmlzVW5kZWZpbmVkKFcpID8gVyA6IGQpXSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IHRydWU7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICBpZiAoIWIgJiYgIUYuaXNVbmRlZmluZWQoVykpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy5ldmVudFF1ZXVlLnB1c2goW0MsIFddKQogICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChVLnN1cGVyY2VkZXMpIHsKICAgICAg
ICAgICAgICAgICAgICBYID0gVS5zdXBlcmNlZGVzLmxlbmd0aDsKICAgICAgICAgICAgICAgICAg
ICBmb3IgKEIgPSAwOwogICAgICAgICAgICAgICAgICAgIEIgPCBYOwogICAgICAgICAgICAgICAg
ICAgIEIrKykgewogICAgICAgICAgICAgICAgICAgICAgICBWID0gVS5zdXBlcmNlZGVzW0JdOwog
ICAgICAgICAgICAgICAgICAgICAgICBnID0gdGhpcy5ldmVudFF1ZXVlLmxlbmd0aDsKICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yIChoID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgaCA8
IGc7CiAgICAgICAgICAgICAgICAgICAgICAgIGgrKykgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgWiA9IHRoaXMuZXZlbnRRdWV1ZVtoXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChaKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWSA9IFpbMF07CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQSA9IFpbMV07CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKFkgPT0gVi50b0xvd2VyQ2FzZSgpKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRRdWV1ZS5wdXNoKFtZLCBBXSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRRdWV1ZVtoXSA9IG51bGw7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWUKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICByZWZp
cmVFdmVudDogZnVuY3Rpb24gKEIpIHsKICAgICAgICAgICAgQiA9IEIudG9Mb3dlckNhc2UoKTsK
ICAgICAgICAgICAgdmFyIEEgPSB0aGlzLmNvbmZpZ1tCXTsKICAgICAgICAgICAgaWYgKEEgJiYg
QS5ldmVudCAmJiAhRi5pc1VuZGVmaW5lZChBLnZhbHVlKSkgewogICAgICAgICAgICAgICAgaWYg
KHRoaXMucXVldWVJblByb2dyZXNzKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWV1ZVBy
b3BlcnR5KEIpCiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHRo
aXMuZmlyZUV2ZW50KEIsIEEudmFsdWUpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0K
ICAgICAgICB9LAogICAgICAgIGFwcGx5Q29uZmlnOiBmdW5jdGlvbiAoSCwgQSkgewogICAgICAg
ICAgICB2YXIgQiwgQzsKICAgICAgICAgICAgaWYgKEEpIHsKICAgICAgICAgICAgICAgIEMgPSB7
fTsKICAgICAgICAgICAgICAgIGZvciAoQiBpbiBIKSB7CiAgICAgICAgICAgICAgICAgICAgaWYg
KEYuaGFzT3duUHJvcGVydHkoSCwgQikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgQ1tCLnRv
TG93ZXJDYXNlKCldID0gSFtCXQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgIHRoaXMuaW5pdGlhbENvbmZpZyA9IEMKICAgICAgICAgICAgfQog
ICAgICAgICAgICBmb3IgKEIgaW4gSCkgewogICAgICAgICAgICAgICAgaWYgKEYuaGFzT3duUHJv
cGVydHkoSCwgQikpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLnF1ZXVlUHJvcGVydHkoQiwg
SFtCXSkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAg
cmVmcmVzaDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgQTsKICAgICAgICAgICAgZm9y
IChBIGluIHRoaXMuY29uZmlnKSB7CiAgICAgICAgICAgICAgICBpZiAoRi5oYXNPd25Qcm9wZXJ0
eSh0aGlzLmNvbmZpZywgQSkpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZmlyZUV2ZW50
KEEpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGZp
cmVRdWV1ZTogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgSSwgQSwgSiwgQiwgQzsKICAg
ICAgICAgICAgdGhpcy5xdWV1ZUluUHJvZ3Jlc3MgPSB0cnVlOwogICAgICAgICAgICBmb3IgKEkg
PSAwOwogICAgICAgICAgICBJIDwgdGhpcy5ldmVudFF1ZXVlLmxlbmd0aDsKICAgICAgICAgICAg
SSsrKSB7CiAgICAgICAgICAgICAgICBBID0gdGhpcy5ldmVudFF1ZXVlW0ldOwogICAgICAgICAg
ICAgICAgaWYgKEEpIHsKICAgICAgICAgICAgICAgICAgICBKID0gQVswXTsKICAgICAgICAgICAg
ICAgICAgICBCID0gQVsxXTsKICAgICAgICAgICAgICAgICAgICBDID0gdGhpcy5jb25maWdbSl07
CiAgICAgICAgICAgICAgICAgICAgQy52YWx1ZSA9IEI7CiAgICAgICAgICAgICAgICAgICAgdGhp
cy5ldmVudFF1ZXVlW0ldID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmVFdmVu
dChKLCBCKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMu
cXVldWVJblByb2dyZXNzID0gZmFsc2U7CiAgICAgICAgICAgIHRoaXMuZXZlbnRRdWV1ZSA9IFtd
CiAgICAgICAgfSwKICAgICAgICBzdWJzY3JpYmVUb0NvbmZpZ0V2ZW50OiBmdW5jdGlvbiAoSiwg
SSwgQiwgQSkgewogICAgICAgICAgICB2YXIgQyA9IHRoaXMuY29uZmlnW0oudG9Mb3dlckNhc2Uo
KV07CiAgICAgICAgICAgIGlmIChDICYmIEMuZXZlbnQpIHsKICAgICAgICAgICAgICAgIGlmICgh
RC5hbHJlYWR5U3Vic2NyaWJlZChDLmV2ZW50LCBJLCBCKSkgewogICAgICAgICAgICAgICAgICAg
IEMuZXZlbnQuc3Vic2NyaWJlKEksIEIsIEEpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHVuc3Vic2NyaWJlRnJv
bUNvbmZpZ0V2ZW50OiBmdW5jdGlvbiAoSCwgQywgQSkgewogICAgICAgICAgICB2YXIgQiA9IHRo
aXMuY29uZmlnW0gudG9Mb3dlckNhc2UoKV07CiAgICAgICAgICAgIGlmIChCICYmIEIuZXZlbnQp
IHsKICAgICAgICAgICAgICAgIHJldHVybiBCLmV2ZW50LnVuc3Vic2NyaWJlKEMsIEEpCiAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2UKICAgICAgICAgICAg
fQogICAgICAgIH0sCiAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAg
dmFyIEEgPSAiQ29uZmlnIjsKICAgICAgICAgICAgaWYgKHRoaXMub3duZXIpIHsKICAgICAgICAg
ICAgICAgIEEgKz0gIiBbIiArIHRoaXMub3duZXIudG9TdHJpbmcoKSArICJdIgogICAgICAgICAg
ICB9CiAgICAgICAgICAgIHJldHVybiBBCiAgICAgICAgfSwKICAgICAgICBvdXRwdXRFdmVudFF1
ZXVlOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBIID0gIiIsCiAgICAgICAgICAgICAg
ICBBLCBDLCBCID0gdGhpcy5ldmVudFF1ZXVlLmxlbmd0aDsKICAgICAgICAgICAgZm9yIChDID0g
MDsKICAgICAgICAgICAgQyA8IEI7CiAgICAgICAgICAgIEMrKykgewogICAgICAgICAgICAgICAg
QSA9IHRoaXMuZXZlbnRRdWV1ZVtDXTsKICAgICAgICAgICAgICAgIGlmIChBKSB7CiAgICAgICAg
ICAgICAgICAgICAgSCArPSBBWzBdICsgIj0iICsgQVsxXSArICIsICIKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gSAogICAgICAgIH0sCiAgICAgICAg
ZGVzdHJveTogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgQiA9IHRoaXMuY29uZmlnLAog
ICAgICAgICAgICAgICAgQywgQTsKICAgICAgICAgICAgZm9yIChDIGluIEIpIHsKICAgICAgICAg
ICAgICAgIGlmIChGLmhhc093blByb3BlcnR5KEIsIEMpKSB7CiAgICAgICAgICAgICAgICAgICAg
QSA9IEJbQ107CiAgICAgICAgICAgICAgICAgICAgQS5ldmVudC51bnN1YnNjcmliZUFsbCgpOwog
ICAgICAgICAgICAgICAgICAgIEEuZXZlbnQgPSBudWxsCiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgIH0KICAgICAgICAgICAgdGhpcy5jb25maWdDaGFuZ2VkRXZlbnQudW5zdWJzY3JpYmVB
bGwoKTsKICAgICAgICAgICAgdGhpcy5jb25maWdDaGFuZ2VkRXZlbnQgPSBudWxsOwogICAgICAg
ICAgICB0aGlzLm93bmVyID0gbnVsbDsKICAgICAgICAgICAgdGhpcy5jb25maWcgPSBudWxsOwog
ICAgICAgICAgICB0aGlzLmluaXRpYWxDb25maWcgPSBudWxsOwogICAgICAgICAgICB0aGlzLmV2
ZW50UXVldWUgPSBudWxsCiAgICAgICAgfQogICAgfTsKICAgIEQuYWxyZWFkeVN1YnNjcmliZWQg
PSBmdW5jdGlvbiAoSywgQiwgQSkgewogICAgICAgIHZhciBKID0gSy5zdWJzY3JpYmVycy5sZW5n
dGgsCiAgICAgICAgICAgIEwsIEM7CiAgICAgICAgaWYgKEogPiAwKSB7CiAgICAgICAgICAgIEMg
PSBKIC0gMTsKICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgTCA9IEsuc3Vic2NyaWJl
cnNbQ107CiAgICAgICAgICAgICAgICBpZiAoTCAmJiBMLm9iaiA9PSBBICYmIEwuZm4gPT0gQikg
ewogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlCiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgIH0gd2hpbGUgKEMtLSkKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlCiAgICB9
OwogICAgWUFIT08ubGFuZy5hdWdtZW50UHJvdG8oRCwgWUFIT08udXRpbC5FdmVudFByb3ZpZGVy
KQp9ICgpKTsKKGZ1bmN0aW9uICgpIHsKICAgIFlBSE9PLndpZGdldC5Nb2R1bGUgPSBmdW5jdGlv
biAoQSwgQikgewogICAgICAgIGlmIChBKSB7CiAgICAgICAgICAgIHRoaXMuaW5pdChBLCBCKQog
ICAgICAgIH0gZWxzZSB7fQogICAgfTsKICAgIHZhciBlID0gWUFIT08udXRpbC5Eb20sCiAgICAg
ICAgUSA9IFlBSE9PLnV0aWwuQ29uZmlnLAogICAgICAgIFcgPSBZQUhPTy51dGlsLkV2ZW50LAog
ICAgICAgIFggPSBZQUhPTy51dGlsLkN1c3RvbUV2ZW50LAogICAgICAgIGQgPSBZQUhPTy53aWRn
ZXQuTW9kdWxlLAogICAgICAgIGIgPSBZQUhPTy5lbnYudWEsCiAgICAgICAgYywgVSwgViwgZiwg
VCA9IHsKICAgICAgICBCRUZPUkVfSU5JVDogImJlZm9yZUluaXQiLAogICAgICAgIElOSVQ6ICJp
bml0IiwKICAgICAgICBBUFBFTkQ6ICJhcHBlbmQiLAogICAgICAgIEJFRk9SRV9SRU5ERVI6ICJi
ZWZvcmVSZW5kZXIiLAogICAgICAgIFJFTkRFUjogInJlbmRlciIsCiAgICAgICAgQ0hBTkdFX0hF
QURFUjogImNoYW5nZUhlYWRlciIsCiAgICAgICAgQ0hBTkdFX0JPRFk6ICJjaGFuZ2VCb2R5IiwK
ICAgICAgICBDSEFOR0VfRk9PVEVSOiAiY2hhbmdlRm9vdGVyIiwKICAgICAgICBDSEFOR0VfQ09O
VEVOVDogImNoYW5nZUNvbnRlbnQiLAogICAgICAgIERFU1RST1k6ICJkZXN0cm95IiwKICAgICAg
ICBCRUZPUkVfU0hPVzogImJlZm9yZVNob3ciLAogICAgICAgIFNIT1c6ICJzaG93IiwKICAgICAg
ICBCRUZPUkVfSElERTogImJlZm9yZUhpZGUiLAogICAgICAgIEhJREU6ICJoaWRlIgogICAgfSwK
ICAgICAgICBhID0gewogICAgICAgIFZJU0lCTEU6IHsKICAgICAgICAgICAga2V5OiAidmlzaWJs
ZSIsCiAgICAgICAgICAgIHZhbHVlOiB0cnVlLAogICAgICAgICAgICB2YWxpZGF0b3I6IFlBSE9P
LmxhbmcuaXNCb29sZWFuCiAgICAgICAgfSwKICAgICAgICBFRkZFQ1Q6IHsKICAgICAgICAgICAg
a2V5OiAiZWZmZWN0IiwKICAgICAgICAgICAgc3VwcHJlc3NFdmVudDogdHJ1ZSwKICAgICAgICAg
ICAgc3VwZXJjZWRlczogWyJ2aXNpYmxlIl0KICAgICAgICB9LAogICAgICAgIE1PTklUT1JfUkVT
SVpFOiB7CiAgICAgICAgICAgIGtleTogIm1vbml0b3JyZXNpemUiLAogICAgICAgICAgICB2YWx1
ZTogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgQVBQRU5EX1RPX0RPQ1VNRU5UX0JPRFk6IHsKICAg
ICAgICAgICAga2V5OiAiYXBwZW5kdG9kb2N1bWVudGJvZHkiLAogICAgICAgICAgICB2YWx1ZTog
ZmFsc2UKICAgICAgICB9CiAgICB9OwogICAgZC5JTUdfUk9PVCA9IG51bGw7CiAgICBkLklNR19S
T09UX1NTTCA9IG51bGw7CiAgICBkLkNTU19NT0RVTEUgPSAieXVpLW1vZHVsZSI7CiAgICBkLkNT
U19IRUFERVIgPSAiaGQiOwogICAgZC5DU1NfQk9EWSA9ICJiZCI7CiAgICBkLkNTU19GT09URVIg
PSAiZnQiOwogICAgZC5SRVNJWkVfTU9OSVRPUl9TRUNVUkVfVVJMID0gImphdmFzY3JpcHQ6ZmFs
c2U7IjsKICAgIGQuUkVTSVpFX01PTklUT1JfQlVGRkVSID0gMTsKICAgIGQudGV4dFJlc2l6ZUV2
ZW50ID0gbmV3IFgoInRleHRSZXNpemUiKTsKICAgIGQuZm9yY2VEb2N1bWVudFJlZHJhdyA9IGZ1
bmN0aW9uICgpIHsKICAgICAgICB2YXIgQSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKICAg
ICAgICBpZiAoQSkgewogICAgICAgICAgICBBLmNsYXNzTmFtZSArPSAiICI7CiAgICAgICAgICAg
IEEuY2xhc3NOYW1lID0gWUFIT08ubGFuZy50cmltKEEuY2xhc3NOYW1lKQogICAgICAgIH0KICAg
IH07CgogICAgZnVuY3Rpb24gWSgpIHsKICAgICAgICBpZiAoIWMpIHsKICAgICAgICAgICAgYyA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgICAgICBjLmlubmVySFRNTCA9
ICgnPGRpdiBjbGFzcz0iJyArIGQuQ1NTX0hFQURFUiArICciPjwvZGl2PjxkaXYgY2xhc3M9Iicg
KyBkLkNTU19CT0RZICsgJyI+PC9kaXY+PGRpdiBjbGFzcz0iJyArIGQuQ1NTX0ZPT1RFUiArICci
PjwvZGl2PicpOwogICAgICAgICAgICBVID0gYy5maXJzdENoaWxkOwogICAgICAgICAgICBWID0g
VS5uZXh0U2libGluZzsKICAgICAgICAgICAgZiA9IFYubmV4dFNpYmxpbmcKICAgICAgICB9CiAg
ICAgICAgcmV0dXJuIGMKICAgIH0KICAgIGZ1bmN0aW9uIFooKSB7CiAgICAgICAgaWYgKCFVKSB7
CiAgICAgICAgICAgIFkoKQogICAgICAgIH0KICAgICAgICByZXR1cm4gKFUuY2xvbmVOb2RlKGZh
bHNlKSkKICAgIH0KICAgIGZ1bmN0aW9uIFMoKSB7CiAgICAgICAgaWYgKCFWKSB7CiAgICAgICAg
ICAgIFkoKQogICAgICAgIH0KICAgICAgICByZXR1cm4gKFYuY2xvbmVOb2RlKGZhbHNlKSkKICAg
IH0KICAgIGZ1bmN0aW9uIFIoKSB7CiAgICAgICAgaWYgKCFmKSB7CiAgICAgICAgICAgIFkoKQog
ICAgICAgIH0KICAgICAgICByZXR1cm4gKGYuY2xvbmVOb2RlKGZhbHNlKSkKICAgIH0KICAgIGQu
cHJvdG90eXBlID0gewogICAgICAgIGNvbnN0cnVjdG9yOiBkLAogICAgICAgIGVsZW1lbnQ6IG51
bGwsCiAgICAgICAgaGVhZGVyOiBudWxsLAogICAgICAgIGJvZHk6IG51bGwsCiAgICAgICAgZm9v
dGVyOiBudWxsLAogICAgICAgIGlkOiBudWxsLAogICAgICAgIGltYWdlUm9vdDogZC5JTUdfUk9P
VCwKICAgICAgICBpbml0RXZlbnRzOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBBID0g
WC5MSVNUOwogICAgICAgICAgICB0aGlzLmJlZm9yZUluaXRFdmVudCA9IHRoaXMuY3JlYXRlRXZl
bnQoVC5CRUZPUkVfSU5JVCk7CiAgICAgICAgICAgIHRoaXMuYmVmb3JlSW5pdEV2ZW50LnNpZ25h
dHVyZSA9IEE7CiAgICAgICAgICAgIHRoaXMuaW5pdEV2ZW50ID0gdGhpcy5jcmVhdGVFdmVudChU
LklOSVQpOwogICAgICAgICAgICB0aGlzLmluaXRFdmVudC5zaWduYXR1cmUgPSBBOwogICAgICAg
ICAgICB0aGlzLmFwcGVuZEV2ZW50ID0gdGhpcy5jcmVhdGVFdmVudChULkFQUEVORCk7CiAgICAg
ICAgICAgIHRoaXMuYXBwZW5kRXZlbnQuc2lnbmF0dXJlID0gQTsKICAgICAgICAgICAgdGhpcy5i
ZWZvcmVSZW5kZXJFdmVudCA9IHRoaXMuY3JlYXRlRXZlbnQoVC5CRUZPUkVfUkVOREVSKTsKICAg
ICAgICAgICAgdGhpcy5iZWZvcmVSZW5kZXJFdmVudC5zaWduYXR1cmUgPSBBOwogICAgICAgICAg
ICB0aGlzLnJlbmRlckV2ZW50ID0gdGhpcy5jcmVhdGVFdmVudChULlJFTkRFUik7CiAgICAgICAg
ICAgIHRoaXMucmVuZGVyRXZlbnQuc2lnbmF0dXJlID0gQTsKICAgICAgICAgICAgdGhpcy5jaGFu
Z2VIZWFkZXJFdmVudCA9IHRoaXMuY3JlYXRlRXZlbnQoVC5DSEFOR0VfSEVBREVSKTsKICAgICAg
ICAgICAgdGhpcy5jaGFuZ2VIZWFkZXJFdmVudC5zaWduYXR1cmUgPSBBOwogICAgICAgICAgICB0
aGlzLmNoYW5nZUJvZHlFdmVudCA9IHRoaXMuY3JlYXRlRXZlbnQoVC5DSEFOR0VfQk9EWSk7CiAg
ICAgICAgICAgIHRoaXMuY2hhbmdlQm9keUV2ZW50LnNpZ25hdHVyZSA9IEE7CiAgICAgICAgICAg
IHRoaXMuY2hhbmdlRm9vdGVyRXZlbnQgPSB0aGlzLmNyZWF0ZUV2ZW50KFQuQ0hBTkdFX0ZPT1RF
Uik7CiAgICAgICAgICAgIHRoaXMuY2hhbmdlRm9vdGVyRXZlbnQuc2lnbmF0dXJlID0gQTsKICAg
ICAgICAgICAgdGhpcy5jaGFuZ2VDb250ZW50RXZlbnQgPSB0aGlzLmNyZWF0ZUV2ZW50KFQuQ0hB
TkdFX0NPTlRFTlQpOwogICAgICAgICAgICB0aGlzLmNoYW5nZUNvbnRlbnRFdmVudC5zaWduYXR1
cmUgPSBBOwogICAgICAgICAgICB0aGlzLmRlc3Ryb3lFdmVudCA9IHRoaXMuY3JlYXRlRXZlbnQo
VC5ERVNUUk9ZKTsKICAgICAgICAgICAgdGhpcy5kZXN0cm95RXZlbnQuc2lnbmF0dXJlID0gQTsK
ICAgICAgICAgICAgdGhpcy5iZWZvcmVTaG93RXZlbnQgPSB0aGlzLmNyZWF0ZUV2ZW50KFQuQkVG
T1JFX1NIT1cpOwogICAgICAgICAgICB0aGlzLmJlZm9yZVNob3dFdmVudC5zaWduYXR1cmUgPSBB
OwogICAgICAgICAgICB0aGlzLnNob3dFdmVudCA9IHRoaXMuY3JlYXRlRXZlbnQoVC5TSE9XKTsK
ICAgICAgICAgICAgdGhpcy5zaG93RXZlbnQuc2lnbmF0dXJlID0gQTsKICAgICAgICAgICAgdGhp
cy5iZWZvcmVIaWRlRXZlbnQgPSB0aGlzLmNyZWF0ZUV2ZW50KFQuQkVGT1JFX0hJREUpOwogICAg
ICAgICAgICB0aGlzLmJlZm9yZUhpZGVFdmVudC5zaWduYXR1cmUgPSBBOwogICAgICAgICAgICB0
aGlzLmhpZGVFdmVudCA9IHRoaXMuY3JlYXRlRXZlbnQoVC5ISURFKTsKICAgICAgICAgICAgdGhp
cy5oaWRlRXZlbnQuc2lnbmF0dXJlID0gQQogICAgICAgIH0sCiAgICAgICAgcGxhdGZvcm06IGZ1
bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIEEgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93
ZXJDYXNlKCk7CiAgICAgICAgICAgIGlmIChBLmluZGV4T2YoIndpbmRvd3MiKSAhPSAtMSB8fCBB
LmluZGV4T2YoIndpbjMyIikgIT0gLTEpIHsKICAgICAgICAgICAgICAgIHJldHVybiAid2luZG93
cyIKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlmIChBLmluZGV4T2YoIm1h
Y2ludG9zaCIpICE9IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJtYWMiCiAgICAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZQogICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSAoKSwKICAgICAgICBicm93c2Vy
OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBBID0gbmF2aWdhdG9yLnVzZXJBZ2VudC50
b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICBpZiAoQS5pbmRleE9mKCJvcGVyYSIpICE9IC0xKSB7
CiAgICAgICAgICAgICAgICByZXR1cm4gIm9wZXJhIgogICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgaWYgKEEuaW5kZXhPZigibXNpZSA3IikgIT0gLTEpIHsKICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gImllNyIKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgaWYgKEEuaW5kZXhPZigibXNpZSIpICE9IC0xKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAiaWUiCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKEEuaW5kZXhPZigic2FmYXJpIikgIT0gLTEpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAic2FmYXJpIgogICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEEuaW5kZXhPZigiZ2Vj
a28iKSAhPSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiZ2Vj
a28iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSAoKSwKICAgICAgICBpc1NlY3VyZTog
ZnVuY3Rpb24gKCkgewogICAgICAgICAgICBpZiAod2luZG93LmxvY2F0aW9uLmhyZWYudG9Mb3dl
ckNhc2UoKS5pbmRleE9mKCJodHRwcyIpID09PSAwKSB7CiAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlCiAg
ICAgICAgICAgIH0KICAgICAgICB9ICgpLAogICAgICAgIGluaXREZWZhdWx0Q29uZmlnOiBmdW5j
dGlvbiAoKSB7CiAgICAgICAgICAgIHRoaXMuY2ZnLmFkZFByb3BlcnR5KGEuVklTSUJMRS5rZXks
IHsKICAgICAgICAgICAgICAgIGhhbmRsZXI6IHRoaXMuY29uZmlnVmlzaWJsZSwKICAgICAgICAg
ICAgICAgIHZhbHVlOiBhLlZJU0lCTEUudmFsdWUsCiAgICAgICAgICAgICAgICB2YWxpZGF0b3I6
IGEuVklTSUJMRS52YWxpZGF0b3IKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHRoaXMuY2Zn
LmFkZFByb3BlcnR5KGEuRUZGRUNULmtleSwgewogICAgICAgICAgICAgICAgc3VwcHJlc3NFdmVu
dDogYS5FRkZFQ1Quc3VwcHJlc3NFdmVudCwKICAgICAgICAgICAgICAgIHN1cGVyY2VkZXM6IGEu
RUZGRUNULnN1cGVyY2VkZXMKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHRoaXMuY2ZnLmFk
ZFByb3BlcnR5KGEuTU9OSVRPUl9SRVNJWkUua2V5LCB7CiAgICAgICAgICAgICAgICBoYW5kbGVy
OiB0aGlzLmNvbmZpZ01vbml0b3JSZXNpemUsCiAgICAgICAgICAgICAgICB2YWx1ZTogYS5NT05J
VE9SX1JFU0laRS52YWx1ZQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdGhpcy5jZmcuYWRk
UHJvcGVydHkoYS5BUFBFTkRfVE9fRE9DVU1FTlRfQk9EWS5rZXksIHsKICAgICAgICAgICAgICAg
IHZhbHVlOiBhLkFQUEVORF9UT19ET0NVTUVOVF9CT0RZLnZhbHVlCiAgICAgICAgICAgIH0pCiAg
ICAgICAgfSwKICAgICAgICBpbml0OiBmdW5jdGlvbiAoQiwgQykgewogICAgICAgICAgICB2YXIg
RSwgQTsKICAgICAgICAgICAgdGhpcy5pbml0RXZlbnRzKCk7CiAgICAgICAgICAgIHRoaXMuYmVm
b3JlSW5pdEV2ZW50LmZpcmUoZCk7CiAgICAgICAgICAgIHRoaXMuY2ZnID0gbmV3IFEodGhpcyk7
CiAgICAgICAgICAgIGlmICh0aGlzLmlzU2VjdXJlKSB7CiAgICAgICAgICAgICAgICB0aGlzLmlt
YWdlUm9vdCA9IGQuSU1HX1JPT1RfU1NMCiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHR5
cGVvZiBCID09ICJzdHJpbmciKSB7CiAgICAgICAgICAgICAgICBFID0gQjsKICAgICAgICAgICAg
ICAgIEIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChCKTsKICAgICAgICAgICAgICAgIGlmICgh
QikgewogICAgICAgICAgICAgICAgICAgIEIgPSAoWSgpKS5jbG9uZU5vZGUoZmFsc2UpOwogICAg
ICAgICAgICAgICAgICAgIEIuaWQgPSBFCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0K
ICAgICAgICAgICAgdGhpcy5pZCA9IGUuZ2VuZXJhdGVJZChCKTsKICAgICAgICAgICAgdGhpcy5l
bGVtZW50ID0gQjsKICAgICAgICAgICAgQSA9IHRoaXMuZWxlbWVudC5maXJzdENoaWxkOwogICAg
ICAgICAgICBpZiAoQSkgewogICAgICAgICAgICAgICAgdmFyIEYgPSBmYWxzZSwKICAgICAgICAg
ICAgICAgICAgICBHID0gZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgRCA9IGZhbHNlOwogICAg
ICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgICAgIGlmICgxID09IEEubm9kZVR5cGUp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFGICYmIGUuaGFzQ2xhc3MoQSwgZC5DU1Nf
SEVBREVSKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWFkZXIgPSBBOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRiA9IHRydWUKICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghRyAmJiBlLmhhc0Ns
YXNzKEEsIGQuQ1NTX0JPRFkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5ib2R5ID0gQTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHID0gdHJ1ZQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIUQgJiYgZS5oYXNDbGFzcyhBLCBkLkNTU19GT09URVIpKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9vdGVyID0gQTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRCA9IHRydWUKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IHdoaWxlICgo
QSA9IEEubmV4dFNpYmxpbmcpKQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuaW5pdERl
ZmF1bHRDb25maWcoKTsKICAgICAgICAgICAgZS5hZGRDbGFzcyh0aGlzLmVsZW1lbnQsIGQuQ1NT
X01PRFVMRSk7CiAgICAgICAgICAgIGlmIChDKSB7CiAgICAgICAgICAgICAgICB0aGlzLmNmZy5h
cHBseUNvbmZpZyhDLCB0cnVlKQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghUS5hbHJl
YWR5U3Vic2NyaWJlZCh0aGlzLnJlbmRlckV2ZW50LCB0aGlzLmNmZy5maXJlUXVldWUsIHRoaXMu
Y2ZnKSkgewogICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJFdmVudC5zdWJzY3JpYmUodGhpcy5j
ZmcuZmlyZVF1ZXVlLCB0aGlzLmNmZywgdHJ1ZSkKICAgICAgICAgICAgfQogICAgICAgICAgICB0
aGlzLmluaXRFdmVudC5maXJlKGQpCiAgICAgICAgfSwKICAgICAgICBpbml0UmVzaXplTW9uaXRv
cjogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgQSA9IChiLmdlY2tvICYmIHRoaXMucGxh
dGZvcm0gPT0gIndpbmRvd3MiKTsKICAgICAgICAgICAgaWYgKEEpIHsKICAgICAgICAgICAgICAg
IHZhciBCID0gdGhpczsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewog
ICAgICAgICAgICAgICAgICAgIEIuX2luaXRSZXNpemVNb25pdG9yKCkKICAgICAgICAgICAgICAg
IH0sCiAgICAgICAgICAgICAgICAwKQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgdGhpcy5faW5pdFJlc2l6ZU1vbml0b3IoKQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAg
ICAgICBfaW5pdFJlc2l6ZU1vbml0b3I6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIEcs
IEUsIEM7CgogICAgICAgICAgICBmdW5jdGlvbiBBKCkgewogICAgICAgICAgICAgICAgZC50ZXh0
UmVzaXplRXZlbnQuZmlyZSgpCiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCFiLm9wZXJh
KSB7CiAgICAgICAgICAgICAgICBFID0gZS5nZXQoIl95dWlSZXNpemVNb25pdG9yIik7CiAgICAg
ICAgICAgICAgICB2YXIgQiA9IHRoaXMuX3N1cHBvcnRzQ1dSZXNpemUoKTsKICAgICAgICAgICAg
ICAgIGlmICghRSkgewogICAgICAgICAgICAgICAgICAgIEUgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJpZnJhbWUiKTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1NlY3VyZSAmJiBk
LlJFU0laRV9NT05JVE9SX1NFQ1VSRV9VUkwgJiYgYi5pZSkgewogICAgICAgICAgICAgICAgICAg
ICAgICBFLnNyYyA9IGQuUkVTSVpFX01PTklUT1JfU0VDVVJFX1VSTAogICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoIUIpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgQyA9IFsiPGh0bWw+PGhlYWQ+PHNjcmlwdCAiLCAndHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4n
LCAid2luZG93Lm9ucmVzaXplPWZ1bmN0aW9uKCl7d2luZG93LnBhcmVudC4iLCAiWUFIT08ud2lk
Z2V0Lk1vZHVsZS50ZXh0UmVzaXplRXZlbnQuIiwgImZpcmUoKTt9OzwiLCAiL3NjcmlwdD48L2hl
YWQ+IiwgIjxib2R5PjwvYm9keT48L2h0bWw+Il0uam9pbigiIik7CiAgICAgICAgICAgICAgICAg
ICAgICAgIEUuc3JjID0gImRhdGE6dGV4dC9odG1sO2NoYXJzZXQ9dXRmLTgsIiArIGVuY29kZVVS
SUNvbXBvbmVudChDKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBF
LmlkID0gIl95dWlSZXNpemVNb25pdG9yIjsKICAgICAgICAgICAgICAgICAgICBFLnRpdGxlID0g
IlRleHQgUmVzaXplIE1vbml0b3IiOwogICAgICAgICAgICAgICAgICAgIEUuc3R5bGUucG9zaXRp
b24gPSAiYWJzb2x1dGUiOwogICAgICAgICAgICAgICAgICAgIEUuc3R5bGUudmlzaWJpbGl0eSA9
ICJoaWRkZW4iOwogICAgICAgICAgICAgICAgICAgIHZhciBGID0gZG9jdW1lbnQuYm9keSwKICAg
ICAgICAgICAgICAgICAgICAgICAgRCA9IEYuZmlyc3RDaGlsZDsKICAgICAgICAgICAgICAgICAg
ICBpZiAoRCkgewogICAgICAgICAgICAgICAgICAgICAgICBGLmluc2VydEJlZm9yZShFLCBEKQog
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEYuYXBw
ZW5kQ2hpbGQoRSkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgRS5z
dHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAidHJhbnNwYXJlbnQiOwogICAgICAgICAgICAgICAgICAg
IEUuc3R5bGUuYm9yZGVyV2lkdGggPSAiMCI7CiAgICAgICAgICAgICAgICAgICAgRS5zdHlsZS53
aWR0aCA9ICIyZW0iOwogICAgICAgICAgICAgICAgICAgIEUuc3R5bGUuaGVpZ2h0ID0gIjJlbSI7
CiAgICAgICAgICAgICAgICAgICAgRS5zdHlsZS5sZWZ0ID0gIjAiOwogICAgICAgICAgICAgICAg
ICAgIEUuc3R5bGUudG9wID0gKC0xICogKEUub2Zmc2V0SGVpZ2h0ICsgZC5SRVNJWkVfTU9OSVRP
Ul9CVUZGRVIpKSArICJweCI7CiAgICAgICAgICAgICAgICAgICAgRS5zdHlsZS52aXNpYmlsaXR5
ID0gInZpc2libGUiOwogICAgICAgICAgICAgICAgICAgIGlmIChiLndlYmtpdCkgewogICAgICAg
ICAgICAgICAgICAgICAgICBHID0gRS5jb250ZW50V2luZG93LmRvY3VtZW50OwogICAgICAgICAg
ICAgICAgICAgICAgICBHLm9wZW4oKTsKICAgICAgICAgICAgICAgICAgICAgICAgRy5jbG9zZSgp
CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
aWYgKEUgJiYgRS5jb250ZW50V2luZG93KSB7CiAgICAgICAgICAgICAgICAgICAgZC50ZXh0UmVz
aXplRXZlbnQuc3Vic2NyaWJlKHRoaXMub25Eb21SZXNpemUsIHRoaXMsIHRydWUpOwogICAgICAg
ICAgICAgICAgICAgIGlmICghZC50ZXh0UmVzaXplSW5pdGlhbGl6ZWQpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKEIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghVy5v
bihFLmNvbnRlbnRXaW5kb3csICJyZXNpemUiLCBBKSkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFcub24oRSwgInJlc2l6ZSIsIEEpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZC50
ZXh0UmVzaXplSW5pdGlhbGl6ZWQgPSB0cnVlCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgIHRoaXMucmVzaXplTW9uaXRvciA9IEUKICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgX3N1cHBvcnRzQ1dSZXNpemU6IGZ1bmN0aW9u
ICgpIHsKICAgICAgICAgICAgdmFyIEEgPSB0cnVlOwogICAgICAgICAgICBpZiAoYi5nZWNrbyAm
JiBiLmdlY2tvIDw9IDEuOCkgewogICAgICAgICAgICAgICAgQSA9IGZhbHNlCiAgICAgICAgICAg
IH0KICAgICAgICAgICAgcmV0dXJuIEEKICAgICAgICB9LAogICAgICAgIG9uRG9tUmVzaXplOiBm
dW5jdGlvbiAoQSwgQikgewogICAgICAgICAgICB2YXIgQyA9IC0xICogKHRoaXMucmVzaXplTW9u
aXRvci5vZmZzZXRIZWlnaHQgKyBkLlJFU0laRV9NT05JVE9SX0JVRkZFUik7CiAgICAgICAgICAg
IHRoaXMucmVzaXplTW9uaXRvci5zdHlsZS50b3AgPSBDICsgInB4IjsKICAgICAgICAgICAgdGhp
cy5yZXNpemVNb25pdG9yLnN0eWxlLmxlZnQgPSAiMCIKICAgICAgICB9LAogICAgICAgIHNldEhl
YWRlcjogZnVuY3Rpb24gKEEpIHsKICAgICAgICAgICAgdmFyIEIgPSB0aGlzLmhlYWRlciB8fCAo
dGhpcy5oZWFkZXIgPSBaKCkpOwogICAgICAgICAgICBpZiAoQS5ub2RlTmFtZSkgewogICAgICAg
ICAgICAgICAgQi5pbm5lckhUTUwgPSAiIjsKICAgICAgICAgICAgICAgIEIuYXBwZW5kQ2hpbGQo
QSkKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIEIuaW5uZXJIVE1MID0gQQog
ICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0aGlzLl9yZW5kZXJlZCkgewogICAgICAgICAg
ICAgICAgdGhpcy5fcmVuZGVySGVhZGVyKCkKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlz
LmNoYW5nZUhlYWRlckV2ZW50LmZpcmUoQSk7CiAgICAgICAgICAgIHRoaXMuY2hhbmdlQ29udGVu
dEV2ZW50LmZpcmUoKQogICAgICAgIH0sCiAgICAgICAgYXBwZW5kVG9IZWFkZXI6IGZ1bmN0aW9u
IChBKSB7CiAgICAgICAgICAgIHZhciBCID0gdGhpcy5oZWFkZXIgfHwgKHRoaXMuaGVhZGVyID0g
WigpKTsKICAgICAgICAgICAgQi5hcHBlbmRDaGlsZChBKTsKICAgICAgICAgICAgdGhpcy5jaGFu
Z2VIZWFkZXJFdmVudC5maXJlKEEpOwogICAgICAgICAgICB0aGlzLmNoYW5nZUNvbnRlbnRFdmVu
dC5maXJlKCkKICAgICAgICB9LAogICAgICAgIHNldEJvZHk6IGZ1bmN0aW9uIChBKSB7CiAgICAg
ICAgICAgIHZhciBCID0gdGhpcy5ib2R5IHx8ICh0aGlzLmJvZHkgPSBTKCkpOwogICAgICAgICAg
ICBpZiAoQS5ub2RlTmFtZSkgewogICAgICAgICAgICAgICAgQi5pbm5lckhUTUwgPSAiIjsKICAg
ICAgICAgICAgICAgIEIuYXBwZW5kQ2hpbGQoQSkKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgIEIuaW5uZXJIVE1MID0gQQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0
aGlzLl9yZW5kZXJlZCkgewogICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyQm9keSgpCiAgICAg
ICAgICAgIH0KICAgICAgICAgICAgdGhpcy5jaGFuZ2VCb2R5RXZlbnQuZmlyZShBKTsKICAgICAg
ICAgICAgdGhpcy5jaGFuZ2VDb250ZW50RXZlbnQuZmlyZSgpCiAgICAgICAgfSwKICAgICAgICBh
cHBlbmRUb0JvZHk6IGZ1bmN0aW9uIChBKSB7CiAgICAgICAgICAgIHZhciBCID0gdGhpcy5ib2R5
IHx8ICh0aGlzLmJvZHkgPSBTKCkpOwogICAgICAgICAgICBCLmFwcGVuZENoaWxkKEEpOwogICAg
ICAgICAgICB0aGlzLmNoYW5nZUJvZHlFdmVudC5maXJlKEEpOwogICAgICAgICAgICB0aGlzLmNo
YW5nZUNvbnRlbnRFdmVudC5maXJlKCkKICAgICAgICB9LAogICAgICAgIHNldEZvb3RlcjogZnVu
Y3Rpb24gKEEpIHsKICAgICAgICAgICAgdmFyIEIgPSB0aGlzLmZvb3RlciB8fCAodGhpcy5mb290
ZXIgPSBSKCkpOwogICAgICAgICAgICBpZiAoQS5ub2RlTmFtZSkgewogICAgICAgICAgICAgICAg
Qi5pbm5lckhUTUwgPSAiIjsKICAgICAgICAgICAgICAgIEIuYXBwZW5kQ2hpbGQoQSkKICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIEIuaW5uZXJIVE1MID0gQQogICAgICAgICAg
ICB9CiAgICAgICAgICAgIGlmICh0aGlzLl9yZW5kZXJlZCkgewogICAgICAgICAgICAgICAgdGhp
cy5fcmVuZGVyRm9vdGVyKCkKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLmNoYW5nZUZv
b3RlckV2ZW50LmZpcmUoQSk7CiAgICAgICAgICAgIHRoaXMuY2hhbmdlQ29udGVudEV2ZW50LmZp
cmUoKQogICAgICAgIH0sCiAgICAgICAgYXBwZW5kVG9Gb290ZXI6IGZ1bmN0aW9uIChBKSB7CiAg
ICAgICAgICAgIHZhciBCID0gdGhpcy5mb290ZXIgfHwgKHRoaXMuZm9vdGVyID0gUigpKTsKICAg
ICAgICAgICAgQi5hcHBlbmRDaGlsZChBKTsKICAgICAgICAgICAgdGhpcy5jaGFuZ2VGb290ZXJF
dmVudC5maXJlKEEpOwogICAgICAgICAgICB0aGlzLmNoYW5nZUNvbnRlbnRFdmVudC5maXJlKCkK
ICAgICAgICB9LAogICAgICAgIHJlbmRlcjogZnVuY3Rpb24gKEIsIEQpIHsKICAgICAgICAgICAg
dmFyIEEgPSB0aGlzOwoKICAgICAgICAgICAgZnVuY3Rpb24gQyhFKSB7CiAgICAgICAgICAgICAg
ICBpZiAodHlwZW9mIEUgPT0gInN0cmluZyIpIHsKICAgICAgICAgICAgICAgICAgICBFID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoRSkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
IGlmIChFKSB7CiAgICAgICAgICAgICAgICAgICAgQS5fYWRkVG9QYXJlbnQoRSwgQS5lbGVtZW50
KTsKICAgICAgICAgICAgICAgICAgICBBLmFwcGVuZEV2ZW50LmZpcmUoKQogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuYmVmb3JlUmVuZGVyRXZlbnQuZmly
ZSgpOwogICAgICAgICAgICBpZiAoIUQpIHsKICAgICAgICAgICAgICAgIEQgPSB0aGlzLmVsZW1l
bnQKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoQikgewogICAgICAgICAgICAgICAgQyhC
KQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKCFlLmluRG9jdW1lbnQo
dGhpcy5lbGVtZW50KSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZQogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuX3JlbmRlckhlYWRlcihE
KTsKICAgICAgICAgICAgdGhpcy5fcmVuZGVyQm9keShEKTsKICAgICAgICAgICAgdGhpcy5fcmVu
ZGVyRm9vdGVyKEQpOwogICAgICAgICAgICB0aGlzLl9yZW5kZXJlZCA9IHRydWU7CiAgICAgICAg
ICAgIHRoaXMucmVuZGVyRXZlbnQuZmlyZSgpOwogICAgICAgICAgICByZXR1cm4gdHJ1ZQogICAg
ICAgIH0sCiAgICAgICAgX3JlbmRlckhlYWRlcjogZnVuY3Rpb24gKEIpIHsKICAgICAgICAgICAg
QiA9IEIgfHwgdGhpcy5lbGVtZW50OwogICAgICAgICAgICBpZiAodGhpcy5oZWFkZXIgJiYgIWUu
aW5Eb2N1bWVudCh0aGlzLmhlYWRlcikpIHsKICAgICAgICAgICAgICAgIHZhciBBID0gQi5maXJz
dENoaWxkOwogICAgICAgICAgICAgICAgaWYgKEEpIHsKICAgICAgICAgICAgICAgICAgICBCLmlu
c2VydEJlZm9yZSh0aGlzLmhlYWRlciwgQSkKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAgICAgICAgQi5hcHBlbmRDaGlsZCh0aGlzLmhlYWRlcikKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgX3JlbmRlckJvZHk6IGZ1bmN0aW9u
IChBKSB7CiAgICAgICAgICAgIEEgPSBBIHx8IHRoaXMuZWxlbWVudDsKICAgICAgICAgICAgaWYg
KHRoaXMuYm9keSAmJiAhZS5pbkRvY3VtZW50KHRoaXMuYm9keSkpIHsKICAgICAgICAgICAgICAg
IGlmICh0aGlzLmZvb3RlciAmJiBlLmlzQW5jZXN0b3IoQSwgdGhpcy5mb290ZXIpKSB7CiAgICAg
ICAgICAgICAgICAgICAgQS5pbnNlcnRCZWZvcmUodGhpcy5ib2R5LCB0aGlzLmZvb3RlcikKICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgQS5hcHBlbmRDaGlsZCh0
aGlzLmJvZHkpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAg
ICAgIF9yZW5kZXJGb290ZXI6IGZ1bmN0aW9uIChBKSB7CiAgICAgICAgICAgIEEgPSBBIHx8IHRo
aXMuZWxlbWVudDsKICAgICAgICAgICAgaWYgKHRoaXMuZm9vdGVyICYmICFlLmluRG9jdW1lbnQo
dGhpcy5mb290ZXIpKSB7CiAgICAgICAgICAgICAgICBBLmFwcGVuZENoaWxkKHRoaXMuZm9vdGVy
KQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBkZXN0cm95OiBmdW5jdGlvbiAoKSB7
CiAgICAgICAgICAgIHZhciBBOwogICAgICAgICAgICBpZiAodGhpcy5lbGVtZW50KSB7CiAgICAg
ICAgICAgICAgICBXLnB1cmdlRWxlbWVudCh0aGlzLmVsZW1lbnQsIHRydWUpOwogICAgICAgICAg
ICAgICAgQSA9IHRoaXMuZWxlbWVudC5wYXJlbnROb2RlCiAgICAgICAgICAgIH0KICAgICAgICAg
ICAgaWYgKEEpIHsKICAgICAgICAgICAgICAgIEEucmVtb3ZlQ2hpbGQodGhpcy5lbGVtZW50KQog
ICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IG51bGw7CiAgICAgICAgICAg
IHRoaXMuaGVhZGVyID0gbnVsbDsKICAgICAgICAgICAgdGhpcy5ib2R5ID0gbnVsbDsKICAgICAg
ICAgICAgdGhpcy5mb290ZXIgPSBudWxsOwogICAgICAgICAgICBkLnRleHRSZXNpemVFdmVudC51
bnN1YnNjcmliZSh0aGlzLm9uRG9tUmVzaXplLCB0aGlzKTsKICAgICAgICAgICAgdGhpcy5jZmcu
ZGVzdHJveSgpOwogICAgICAgICAgICB0aGlzLmNmZyA9IG51bGw7CiAgICAgICAgICAgIHRoaXMu
ZGVzdHJveUV2ZW50LmZpcmUoKQogICAgICAgIH0sCiAgICAgICAgc2hvdzogZnVuY3Rpb24gKCkg
ewogICAgICAgICAgICB0aGlzLmNmZy5zZXRQcm9wZXJ0eSgidmlzaWJsZSIsIHRydWUpCiAgICAg
ICAgfSwKICAgICAgICBoaWRlOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHRoaXMuY2ZnLnNl
dFByb3BlcnR5KCJ2aXNpYmxlIiwgZmFsc2UpCiAgICAgICAgfSwKICAgICAgICBjb25maWdWaXNp
YmxlOiBmdW5jdGlvbiAoQywgRCwgQikgewogICAgICAgICAgICB2YXIgQSA9IERbMF07CiAgICAg
ICAgICAgIGlmIChBKSB7CiAgICAgICAgICAgICAgICB0aGlzLmJlZm9yZVNob3dFdmVudC5maXJl
KCk7CiAgICAgICAgICAgICAgICBlLnNldFN0eWxlKHRoaXMuZWxlbWVudCwgImRpc3BsYXkiLCAi
YmxvY2siKTsKICAgICAgICAgICAgICAgIHRoaXMuc2hvd0V2ZW50LmZpcmUoKQogICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhpcy5iZWZvcmVIaWRlRXZlbnQuZmlyZSgpOwog
ICAgICAgICAgICAgICAgZS5zZXRTdHlsZSh0aGlzLmVsZW1lbnQsICJkaXNwbGF5IiwgIm5vbmUi
KTsKICAgICAgICAgICAgICAgIHRoaXMuaGlkZUV2ZW50LmZpcmUoKQogICAgICAgICAgICB9CiAg
ICAgICAgfSwKICAgICAgICBjb25maWdNb25pdG9yUmVzaXplOiBmdW5jdGlvbiAoQiwgQywgQSkg
ewogICAgICAgICAgICB2YXIgRCA9IENbMF07CiAgICAgICAgICAgIGlmIChEKSB7CiAgICAgICAg
ICAgICAgICB0aGlzLmluaXRSZXNpemVNb25pdG9yKCkKICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgIGQudGV4dFJlc2l6ZUV2ZW50LnVuc3Vic2NyaWJlKHRoaXMub25Eb21SZXNp
emUsIHRoaXMsIHRydWUpOwogICAgICAgICAgICAgICAgdGhpcy5yZXNpemVNb25pdG9yID0gbnVs
bAogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBfYWRkVG9QYXJlbnQ6IGZ1bmN0aW9u
IChCLCBBKSB7CiAgICAgICAgICAgIGlmICghdGhpcy5jZmcuZ2V0UHJvcGVydHkoImFwcGVuZHRv
ZG9jdW1lbnRib2R5IikgJiYgQiA9PT0gZG9jdW1lbnQuYm9keSAmJiBCLmZpcnN0Q2hpbGQpIHsK
ICAgICAgICAgICAgICAgIEIuaW5zZXJ0QmVmb3JlKEEsIEIuZmlyc3RDaGlsZCkKICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIEIuYXBwZW5kQ2hpbGQoQSkKICAgICAgICAgICAg
fQogICAgICAgIH0sCiAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAg
cmV0dXJuICJNb2R1bGUgIiArIHRoaXMuaWQKICAgICAgICB9CiAgICB9OwogICAgWUFIT08ubGFu
Zy5hdWdtZW50UHJvdG8oZCwgWUFIT08udXRpbC5FdmVudFByb3ZpZGVyKQp9ICgpKTsKKGZ1bmN0
aW9uICgpIHsKICAgIFlBSE9PLndpZGdldC5PdmVybGF5ID0gZnVuY3Rpb24gKEEsIEIpIHsKICAg
ICAgICBZQUhPTy53aWRnZXQuT3ZlcmxheS5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhp
cywgQSwgQikKICAgIH07CiAgICB2YXIgWCA9IFlBSE9PLmxhbmcsCiAgICAgICAgVCA9IFlBSE9P
LnV0aWwuQ3VzdG9tRXZlbnQsCiAgICAgICAgWiA9IFlBSE9PLndpZGdldC5Nb2R1bGUsCiAgICAg
ICAgUyA9IFlBSE9PLnV0aWwuRXZlbnQsCiAgICAgICAgYSA9IFlBSE9PLnV0aWwuRG9tLAogICAg
ICAgIE8gPSBZQUhPTy51dGlsLkNvbmZpZywKICAgICAgICBWID0gWUFIT08uZW52LnVhLAogICAg
ICAgIFEgPSBZQUhPTy53aWRnZXQuT3ZlcmxheSwKICAgICAgICBZID0gInN1YnNjcmliZSIsCiAg
ICAgICAgYiA9ICJ1bnN1YnNjcmliZSIsCiAgICAgICAgUCA9ICJjb250YWluZWQiLAogICAgICAg
IFcsIFIgPSB7CiAgICAgICAgQkVGT1JFX01PVkU6ICJiZWZvcmVNb3ZlIiwKICAgICAgICBNT1ZF
OiAibW92ZSIKICAgIH0sCiAgICAgICAgVSA9IHsKICAgICAgICBYOiB7CiAgICAgICAgICAgIGtl
eTogIngiLAogICAgICAgICAgICB2YWxpZGF0b3I6IFguaXNOdW1iZXIsCiAgICAgICAgICAgIHN1
cHByZXNzRXZlbnQ6IHRydWUsCiAgICAgICAgICAgIHN1cGVyY2VkZXM6IFsiaWZyYW1lIl0KICAg
ICAgICB9LAogICAgICAgIFk6IHsKICAgICAgICAgICAga2V5OiAieSIsCiAgICAgICAgICAgIHZh
bGlkYXRvcjogWC5pc051bWJlciwKICAgICAgICAgICAgc3VwcHJlc3NFdmVudDogdHJ1ZSwKICAg
ICAgICAgICAgc3VwZXJjZWRlczogWyJpZnJhbWUiXQogICAgICAgIH0sCiAgICAgICAgWFk6IHsK
ICAgICAgICAgICAga2V5OiAieHkiLAogICAgICAgICAgICBzdXBwcmVzc0V2ZW50OiB0cnVlLAog
ICAgICAgICAgICBzdXBlcmNlZGVzOiBbImlmcmFtZSJdCiAgICAgICAgfSwKICAgICAgICBDT05U
RVhUOiB7CiAgICAgICAgICAgIGtleTogImNvbnRleHQiLAogICAgICAgICAgICBzdXBwcmVzc0V2
ZW50OiB0cnVlLAogICAgICAgICAgICBzdXBlcmNlZGVzOiBbImlmcmFtZSJdCiAgICAgICAgfSwK
ICAgICAgICBGSVhFRF9DRU5URVI6IHsKICAgICAgICAgICAga2V5OiAiZml4ZWRjZW50ZXIiLAog
ICAgICAgICAgICB2YWx1ZTogZmFsc2UsCiAgICAgICAgICAgIHN1cGVyY2VkZXM6IFsiaWZyYW1l
IiwgInZpc2libGUiXQogICAgICAgIH0sCiAgICAgICAgV0lEVEg6IHsKICAgICAgICAgICAga2V5
OiAid2lkdGgiLAogICAgICAgICAgICBzdXBwcmVzc0V2ZW50OiB0cnVlLAogICAgICAgICAgICBz
dXBlcmNlZGVzOiBbImNvbnRleHQiLCAiZml4ZWRjZW50ZXIiLCAiaWZyYW1lIl0KICAgICAgICB9
LAogICAgICAgIEhFSUdIVDogewogICAgICAgICAgICBrZXk6ICJoZWlnaHQiLAogICAgICAgICAg
ICBzdXBwcmVzc0V2ZW50OiB0cnVlLAogICAgICAgICAgICBzdXBlcmNlZGVzOiBbImNvbnRleHQi
LCAiZml4ZWRjZW50ZXIiLCAiaWZyYW1lIl0KICAgICAgICB9LAogICAgICAgIEFVVE9fRklMTF9I
RUlHSFQ6IHsKICAgICAgICAgICAga2V5OiAiYXV0b2ZpbGxoZWlnaHQiLAogICAgICAgICAgICBz
dXBlcmNlZGVzOiBbImhlaWdodCJdLAogICAgICAgICAgICB2YWx1ZTogImJvZHkiCiAgICAgICAg
fSwKICAgICAgICBaSU5ERVg6IHsKICAgICAgICAgICAga2V5OiAiemluZGV4IiwKICAgICAgICAg
ICAgdmFsdWU6IG51bGwKICAgICAgICB9LAogICAgICAgIENPTlNUUkFJTl9UT19WSUVXUE9SVDog
ewogICAgICAgICAgICBrZXk6ICJjb25zdHJhaW50b3ZpZXdwb3J0IiwKICAgICAgICAgICAgdmFs
dWU6IGZhbHNlLAogICAgICAgICAgICB2YWxpZGF0b3I6IFguaXNCb29sZWFuLAogICAgICAgICAg
ICBzdXBlcmNlZGVzOiBbImlmcmFtZSIsICJ4IiwgInkiLCAieHkiXQogICAgICAgIH0sCiAgICAg
ICAgSUZSQU1FOiB7CiAgICAgICAgICAgIGtleTogImlmcmFtZSIsCiAgICAgICAgICAgIHZhbHVl
OiAoVi5pZSA9PSA2ID8gdHJ1ZSA6IGZhbHNlKSwKICAgICAgICAgICAgdmFsaWRhdG9yOiBYLmlz
Qm9vbGVhbiwKICAgICAgICAgICAgc3VwZXJjZWRlczogWyJ6aW5kZXgiXQogICAgICAgIH0sCiAg
ICAgICAgUFJFVkVOVF9DT05URVhUX09WRVJMQVA6IHsKICAgICAgICAgICAga2V5OiAicHJldmVu
dGNvbnRleHRvdmVybGFwIiwKICAgICAgICAgICAgdmFsdWU6IGZhbHNlLAogICAgICAgICAgICB2
YWxpZGF0b3I6IFguaXNCb29sZWFuLAogICAgICAgICAgICBzdXBlcmNlZGVzOiBbImNvbnN0cmFp
bnRvdmlld3BvcnQiXQogICAgICAgIH0KICAgIH07CiAgICBRLklGUkFNRV9TUkMgPSAiamF2YXNj
cmlwdDpmYWxzZTsiOwogICAgUS5JRlJBTUVfT0ZGU0VUID0gMzsKICAgIFEuVklFV1BPUlRfT0ZG
U0VUID0gMTA7CiAgICBRLlRPUF9MRUZUID0gInRsIjsKICAgIFEuVE9QX1JJR0hUID0gInRyIjsK
ICAgIFEuQk9UVE9NX0xFRlQgPSAiYmwiOwogICAgUS5CT1RUT01fUklHSFQgPSAiYnIiOwogICAg
US5QUkVWRU5UX09WRVJMQVBfWCA9IHsKICAgICAgICB0bHRyOiB0cnVlLAogICAgICAgIGJsYnI6
IHRydWUsCiAgICAgICAgYnJibDogdHJ1ZSwKICAgICAgICB0cnRsOiB0cnVlCiAgICB9OwogICAg
US5QUkVWRU5UX09WRVJMQVBfWSA9IHsKICAgICAgICB0cmJyOiB0cnVlLAogICAgICAgIHRsYmw6
IHRydWUsCiAgICAgICAgYmx0bDogdHJ1ZSwKICAgICAgICBicnRyOiB0cnVlCiAgICB9OwogICAg
US5DU1NfT1ZFUkxBWSA9ICJ5dWktb3ZlcmxheSI7CiAgICBRLkNTU19ISURERU4gPSAieXVpLW92
ZXJsYXktaGlkZGVuIjsKICAgIFEuQ1NTX0lGUkFNRSA9ICJ5dWktb3ZlcmxheS1pZnJhbWUiOwog
ICAgUS5TVERfTU9EX1JFID0gL15ccyo/KGJvZHl8Zm9vdGVyfGhlYWRlcilccyo/JC9pOwogICAg
US53aW5kb3dTY3JvbGxFdmVudCA9IG5ldyBUKCJ3aW5kb3dTY3JvbGwiKTsKICAgIFEud2luZG93
UmVzaXplRXZlbnQgPSBuZXcgVCgid2luZG93UmVzaXplIik7CiAgICBRLndpbmRvd1Njcm9sbEhh
bmRsZXIgPSBmdW5jdGlvbiAoQSkgewogICAgICAgIHZhciBCID0gUy5nZXRUYXJnZXQoQSk7CiAg
ICAgICAgaWYgKCFCIHx8IEIgPT09IHdpbmRvdyB8fCBCID09PSB3aW5kb3cuZG9jdW1lbnQpIHsK
ICAgICAgICAgICAgaWYgKFYuaWUpIHsKICAgICAgICAgICAgICAgIGlmICghd2luZG93LnNjcm9s
bEVuZCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxFbmQgPSAtMQogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHdpbmRvdy5zY3JvbGxFbmQp
OwogICAgICAgICAgICAgICAgd2luZG93LnNjcm9sbEVuZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24g
KCkgewogICAgICAgICAgICAgICAgICAgIFEud2luZG93U2Nyb2xsRXZlbnQuZmlyZSgpCiAgICAg
ICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgMSkKICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgIFEud2luZG93U2Nyb2xsRXZlbnQuZmlyZSgpCiAgICAgICAgICAgIH0KICAg
ICAgICB9CiAgICB9OwogICAgUS53aW5kb3dSZXNpemVIYW5kbGVyID0gZnVuY3Rpb24gKEEpIHsK
ICAgICAgICBpZiAoVi5pZSkgewogICAgICAgICAgICBpZiAoIXdpbmRvdy5yZXNpemVFbmQpIHsK
ICAgICAgICAgICAgICAgIHdpbmRvdy5yZXNpemVFbmQgPSAtMQogICAgICAgICAgICB9CiAgICAg
ICAgICAgIGNsZWFyVGltZW91dCh3aW5kb3cucmVzaXplRW5kKTsKICAgICAgICAgICAgd2luZG93
LnJlc2l6ZUVuZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgUS53
aW5kb3dSZXNpemVFdmVudC5maXJlKCkKICAgICAgICAgICAgfSwKICAgICAgICAgICAgMTAwKQog
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIFEud2luZG93UmVzaXplRXZlbnQuZmlyZSgpCiAg
ICAgICAgfQogICAgfTsKICAgIFEuX2luaXRpYWxpemVkID0gbnVsbDsKICAgIGlmIChRLl9pbml0
aWFsaXplZCA9PT0gbnVsbCkgewogICAgICAgIFMub24od2luZG93LCAic2Nyb2xsIiwgUS53aW5k
b3dTY3JvbGxIYW5kbGVyKTsKICAgICAgICBTLm9uKHdpbmRvdywgInJlc2l6ZSIsIFEud2luZG93
UmVzaXplSGFuZGxlcik7CiAgICAgICAgUS5faW5pdGlhbGl6ZWQgPSB0cnVlCiAgICB9CiAgICBR
Ll9UUklHR0VSX01BUCA9IHsKICAgICAgICB3aW5kb3dTY3JvbGw6IFEud2luZG93U2Nyb2xsRXZl
bnQsCiAgICAgICAgd2luZG93UmVzaXplOiBRLndpbmRvd1Jlc2l6ZUV2ZW50LAogICAgICAgIHRl
eHRSZXNpemU6IFoudGV4dFJlc2l6ZUV2ZW50CiAgICB9OwogICAgWUFIT08uZXh0ZW5kKFEsIFos
IHsKICAgICAgICBDT05URVhUX1RSSUdHRVJTOiBbXSwKICAgICAgICBpbml0OiBmdW5jdGlvbiAo
QSwgQikgewogICAgICAgICAgICBRLnN1cGVyY2xhc3MuaW5pdC5jYWxsKHRoaXMsIEEpOwogICAg
ICAgICAgICB0aGlzLmJlZm9yZUluaXRFdmVudC5maXJlKFEpOwogICAgICAgICAgICBhLmFkZENs
YXNzKHRoaXMuZWxlbWVudCwgUS5DU1NfT1ZFUkxBWSk7CiAgICAgICAgICAgIGlmIChCKSB7CiAg
ICAgICAgICAgICAgICB0aGlzLmNmZy5hcHBseUNvbmZpZyhCLCB0cnVlKQogICAgICAgICAgICB9
CiAgICAgICAgICAgIGlmICh0aGlzLnBsYXRmb3JtID09ICJtYWMiICYmIFYuZ2Vja28pIHsKICAg
ICAgICAgICAgICAgIGlmICghTy5hbHJlYWR5U3Vic2NyaWJlZCh0aGlzLnNob3dFdmVudCwgdGhp
cy5zaG93TWFjR2Vja29TY3JvbGxiYXJzLCB0aGlzKSkgewogICAgICAgICAgICAgICAgICAgIHRo
aXMuc2hvd0V2ZW50LnN1YnNjcmliZSh0aGlzLnNob3dNYWNHZWNrb1Njcm9sbGJhcnMsIHRoaXMs
IHRydWUpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoIU8uYWxyZWFkeVN1
YnNjcmliZWQodGhpcy5oaWRlRXZlbnQsIHRoaXMuaGlkZU1hY0dlY2tvU2Nyb2xsYmFycywgdGhp
cykpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGVFdmVudC5zdWJzY3JpYmUodGhpcy5o
aWRlTWFjR2Vja29TY3JvbGxiYXJzLCB0aGlzLCB0cnVlKQogICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuaW5pdEV2ZW50LmZpcmUoUSkKICAgICAgICB9LAog
ICAgICAgIGluaXRFdmVudHM6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgUS5zdXBlcmNsYXNz
LmluaXRFdmVudHMuY2FsbCh0aGlzKTsKICAgICAgICAgICAgdmFyIEEgPSBULkxJU1Q7CiAgICAg
ICAgICAgIHRoaXMuYmVmb3JlTW92ZUV2ZW50ID0gdGhpcy5jcmVhdGVFdmVudChSLkJFRk9SRV9N
T1ZFKTsKICAgICAgICAgICAgdGhpcy5iZWZvcmVNb3ZlRXZlbnQuc2lnbmF0dXJlID0gQTsKICAg
ICAgICAgICAgdGhpcy5tb3ZlRXZlbnQgPSB0aGlzLmNyZWF0ZUV2ZW50KFIuTU9WRSk7CiAgICAg
ICAgICAgIHRoaXMubW92ZUV2ZW50LnNpZ25hdHVyZSA9IEEKICAgICAgICB9LAogICAgICAgIGlu
aXREZWZhdWx0Q29uZmlnOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIFEuc3VwZXJjbGFzcy5p
bml0RGVmYXVsdENvbmZpZy5jYWxsKHRoaXMpOwogICAgICAgICAgICB2YXIgQSA9IHRoaXMuY2Zn
OwogICAgICAgICAgICBBLmFkZFByb3BlcnR5KFUuWC5rZXksIHsKICAgICAgICAgICAgICAgIGhh
bmRsZXI6IHRoaXMuY29uZmlnWCwKICAgICAgICAgICAgICAgIHZhbGlkYXRvcjogVS5YLnZhbGlk
YXRvciwKICAgICAgICAgICAgICAgIHN1cHByZXNzRXZlbnQ6IFUuWC5zdXBwcmVzc0V2ZW50LAog
ICAgICAgICAgICAgICAgc3VwZXJjZWRlczogVS5YLnN1cGVyY2VkZXMKICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgIEEuYWRkUHJvcGVydHkoVS5ZLmtleSwgewogICAgICAgICAgICAgICAgaGFu
ZGxlcjogdGhpcy5jb25maWdZLAogICAgICAgICAgICAgICAgdmFsaWRhdG9yOiBVLlkudmFsaWRh
dG9yLAogICAgICAgICAgICAgICAgc3VwcHJlc3NFdmVudDogVS5ZLnN1cHByZXNzRXZlbnQsCiAg
ICAgICAgICAgICAgICBzdXBlcmNlZGVzOiBVLlkuc3VwZXJjZWRlcwogICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgQS5hZGRQcm9wZXJ0eShVLlhZLmtleSwgewogICAgICAgICAgICAgICAgaGFu
ZGxlcjogdGhpcy5jb25maWdYWSwKICAgICAgICAgICAgICAgIHN1cHByZXNzRXZlbnQ6IFUuWFku
c3VwcHJlc3NFdmVudCwKICAgICAgICAgICAgICAgIHN1cGVyY2VkZXM6IFUuWFkuc3VwZXJjZWRl
cwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgQS5hZGRQcm9wZXJ0eShVLkNPTlRFWFQua2V5
LCB7CiAgICAgICAgICAgICAgICBoYW5kbGVyOiB0aGlzLmNvbmZpZ0NvbnRleHQsCiAgICAgICAg
ICAgICAgICBzdXBwcmVzc0V2ZW50OiBVLkNPTlRFWFQuc3VwcHJlc3NFdmVudCwKICAgICAgICAg
ICAgICAgIHN1cGVyY2VkZXM6IFUuQ09OVEVYVC5zdXBlcmNlZGVzCiAgICAgICAgICAgIH0pOwog
ICAgICAgICAgICBBLmFkZFByb3BlcnR5KFUuRklYRURfQ0VOVEVSLmtleSwgewogICAgICAgICAg
ICAgICAgaGFuZGxlcjogdGhpcy5jb25maWdGaXhlZENlbnRlciwKICAgICAgICAgICAgICAgIHZh
bHVlOiBVLkZJWEVEX0NFTlRFUi52YWx1ZSwKICAgICAgICAgICAgICAgIHZhbGlkYXRvcjogVS5G
SVhFRF9DRU5URVIudmFsaWRhdG9yLAogICAgICAgICAgICAgICAgc3VwZXJjZWRlczogVS5GSVhF
RF9DRU5URVIuc3VwZXJjZWRlcwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgQS5hZGRQcm9w
ZXJ0eShVLldJRFRILmtleSwgewogICAgICAgICAgICAgICAgaGFuZGxlcjogdGhpcy5jb25maWdX
aWR0aCwKICAgICAgICAgICAgICAgIHN1cHByZXNzRXZlbnQ6IFUuV0lEVEguc3VwcHJlc3NFdmVu
dCwKICAgICAgICAgICAgICAgIHN1cGVyY2VkZXM6IFUuV0lEVEguc3VwZXJjZWRlcwogICAgICAg
ICAgICB9KTsKICAgICAgICAgICAgQS5hZGRQcm9wZXJ0eShVLkhFSUdIVC5rZXksIHsKICAgICAg
ICAgICAgICAgIGhhbmRsZXI6IHRoaXMuY29uZmlnSGVpZ2h0LAogICAgICAgICAgICAgICAgc3Vw
cHJlc3NFdmVudDogVS5IRUlHSFQuc3VwcHJlc3NFdmVudCwKICAgICAgICAgICAgICAgIHN1cGVy
Y2VkZXM6IFUuSEVJR0hULnN1cGVyY2VkZXMKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIEEu
YWRkUHJvcGVydHkoVS5BVVRPX0ZJTExfSEVJR0hULmtleSwgewogICAgICAgICAgICAgICAgaGFu
ZGxlcjogdGhpcy5jb25maWdBdXRvRmlsbEhlaWdodCwKICAgICAgICAgICAgICAgIHZhbHVlOiBV
LkFVVE9fRklMTF9IRUlHSFQudmFsdWUsCiAgICAgICAgICAgICAgICB2YWxpZGF0b3I6IHRoaXMu
X3ZhbGlkYXRlQXV0b0ZpbGwsCiAgICAgICAgICAgICAgICBzdXBlcmNlZGVzOiBVLkFVVE9fRklM
TF9IRUlHSFQuc3VwZXJjZWRlcwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgQS5hZGRQcm9w
ZXJ0eShVLlpJTkRFWC5rZXksIHsKICAgICAgICAgICAgICAgIGhhbmRsZXI6IHRoaXMuY29uZmln
ekluZGV4LAogICAgICAgICAgICAgICAgdmFsdWU6IFUuWklOREVYLnZhbHVlCiAgICAgICAgICAg
IH0pOwogICAgICAgICAgICBBLmFkZFByb3BlcnR5KFUuQ09OU1RSQUlOX1RPX1ZJRVdQT1JULmtl
eSwgewogICAgICAgICAgICAgICAgaGFuZGxlcjogdGhpcy5jb25maWdDb25zdHJhaW5Ub1ZpZXdw
b3J0LAogICAgICAgICAgICAgICAgdmFsdWU6IFUuQ09OU1RSQUlOX1RPX1ZJRVdQT1JULnZhbHVl
LAogICAgICAgICAgICAgICAgdmFsaWRhdG9yOiBVLkNPTlNUUkFJTl9UT19WSUVXUE9SVC52YWxp
ZGF0b3IsCiAgICAgICAgICAgICAgICBzdXBlcmNlZGVzOiBVLkNPTlNUUkFJTl9UT19WSUVXUE9S
VC5zdXBlcmNlZGVzCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBBLmFkZFByb3BlcnR5KFUu
SUZSQU1FLmtleSwgewogICAgICAgICAgICAgICAgaGFuZGxlcjogdGhpcy5jb25maWdJZnJhbWUs
CiAgICAgICAgICAgICAgICB2YWx1ZTogVS5JRlJBTUUudmFsdWUsCiAgICAgICAgICAgICAgICB2
YWxpZGF0b3I6IFUuSUZSQU1FLnZhbGlkYXRvciwKICAgICAgICAgICAgICAgIHN1cGVyY2VkZXM6
IFUuSUZSQU1FLnN1cGVyY2VkZXMKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIEEuYWRkUHJv
cGVydHkoVS5QUkVWRU5UX0NPTlRFWFRfT1ZFUkxBUC5rZXksIHsKICAgICAgICAgICAgICAgIHZh
bHVlOiBVLlBSRVZFTlRfQ09OVEVYVF9PVkVSTEFQLnZhbHVlLAogICAgICAgICAgICAgICAgdmFs
aWRhdG9yOiBVLlBSRVZFTlRfQ09OVEVYVF9PVkVSTEFQLnZhbGlkYXRvciwKICAgICAgICAgICAg
ICAgIHN1cGVyY2VkZXM6IFUuUFJFVkVOVF9DT05URVhUX09WRVJMQVAuc3VwZXJjZWRlcwogICAg
ICAgICAgICB9KQogICAgICAgIH0sCiAgICAgICAgbW92ZVRvOiBmdW5jdGlvbiAoQiwgQSkgewog
ICAgICAgICAgICB0aGlzLmNmZy5zZXRQcm9wZXJ0eSgieHkiLCBbQiwgQV0pCiAgICAgICAgfSwK
ICAgICAgICBoaWRlTWFjR2Vja29TY3JvbGxiYXJzOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAg
IGEucmVwbGFjZUNsYXNzKHRoaXMuZWxlbWVudCwgInNob3ctc2Nyb2xsYmFycyIsICJoaWRlLXNj
cm9sbGJhcnMiKQogICAgICAgIH0sCiAgICAgICAgc2hvd01hY0dlY2tvU2Nyb2xsYmFyczogZnVu
Y3Rpb24gKCkgewogICAgICAgICAgICBhLnJlcGxhY2VDbGFzcyh0aGlzLmVsZW1lbnQsICJoaWRl
LXNjcm9sbGJhcnMiLCAic2hvdy1zY3JvbGxiYXJzIikKICAgICAgICB9LAogICAgICAgIF9zZXRE
b21WaXNpYmlsaXR5OiBmdW5jdGlvbiAoQikgewogICAgICAgICAgICBhLnNldFN0eWxlKHRoaXMu
ZWxlbWVudCwgInZpc2liaWxpdHkiLCAoQikgPyAidmlzaWJsZSIgOiAiaGlkZGVuIik7CiAgICAg
ICAgICAgIHZhciBBID0gUS5DU1NfSElEREVOOwogICAgICAgICAgICBpZiAoQikgewogICAgICAg
ICAgICAgICAgYS5yZW1vdmVDbGFzcyh0aGlzLmVsZW1lbnQsIEEpCiAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICBhLmFkZENsYXNzKHRoaXMuZWxlbWVudCwgQSkKICAgICAgICAg
ICAgfQogICAgICAgIH0sCiAgICAgICAgY29uZmlnVmlzaWJsZTogZnVuY3Rpb24gKEksIEwsIEMp
IHsKICAgICAgICAgICAgdmFyIEogPSBMWzBdLAogICAgICAgICAgICAgICAgSCA9IGEuZ2V0U3R5
bGUodGhpcy5lbGVtZW50LCAidmlzaWJpbGl0eSIpLAogICAgICAgICAgICAgICAgQiA9IHRoaXMu
Y2ZnLmdldFByb3BlcnR5KCJlZmZlY3QiKSwKICAgICAgICAgICAgICAgIEUgPSBbXSwKICAgICAg
ICAgICAgICAgIEYgPSAodGhpcy5wbGF0Zm9ybSA9PSAibWFjIiAmJiBWLmdlY2tvKSwKICAgICAg
ICAgICAgICAgIE0gPSBPLmFscmVhZHlTdWJzY3JpYmVkLAogICAgICAgICAgICAgICAgRCwgSywg
TiwgaCwgaSwgaiwgZSwgQSwgRzsKICAgICAgICAgICAgaWYgKEggPT0gImluaGVyaXQiKSB7CiAg
ICAgICAgICAgICAgICBOID0gdGhpcy5lbGVtZW50LnBhcmVudE5vZGU7CiAgICAgICAgICAgICAg
ICB3aGlsZSAoTi5ub2RlVHlwZSAhPSA5ICYmIE4ubm9kZVR5cGUgIT0gMTEpIHsKICAgICAgICAg
ICAgICAgICAgICBIID0gYS5nZXRTdHlsZShOLCAidmlzaWJpbGl0eSIpOwogICAgICAgICAgICAg
ICAgICAgIGlmIChIICE9ICJpbmhlcml0IikgewogICAgICAgICAgICAgICAgICAgICAgICBicmVh
awogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBOID0gTi5wYXJlbnRO
b2RlCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoSCA9PSAiaW5oZXJpdCIp
IHsKICAgICAgICAgICAgICAgICAgICBIID0gInZpc2libGUiCiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKEIpIHsKICAgICAgICAgICAgICAgIGlmIChCIGlu
c3RhbmNlb2YgQXJyYXkpIHsKICAgICAgICAgICAgICAgICAgICBBID0gQi5sZW5ndGg7CiAgICAg
ICAgICAgICAgICAgICAgZm9yIChoID0gMDsKICAgICAgICAgICAgICAgICAgICBoIDwgQTsKICAg
ICAgICAgICAgICAgICAgICBoKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgRCA9IEJbaF07
CiAgICAgICAgICAgICAgICAgICAgICAgIEVbRS5sZW5ndGhdID0gRC5lZmZlY3QodGhpcywgRC5k
dXJhdGlvbikKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgIEVbRS5sZW5ndGhdID0gQi5lZmZlY3QodGhpcywgQi5kdXJhdGlv
bikKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoSikgewog
ICAgICAgICAgICAgICAgaWYgKEYpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dNYWNH
ZWNrb1Njcm9sbGJhcnMoKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKEIp
IHsKICAgICAgICAgICAgICAgICAgICBpZiAoSikgewogICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoSCAhPSAidmlzaWJsZSIgfHwgSCA9PT0gIiIpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMuYmVmb3JlU2hvd0V2ZW50LmZpcmUoKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEcgPSBFLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpIDwgRzsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEsgPSBFW2ldOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09PSAwICYmICFNKEsuYW5pbWF0
ZUluQ29tcGxldGVFdmVudCwgdGhpcy5zaG93RXZlbnQuZmlyZSwgdGhpcy5zaG93RXZlbnQpKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEsuYW5pbWF0ZUluQ29tcGxldGVF
dmVudC5zdWJzY3JpYmUodGhpcy5zaG93RXZlbnQuZmlyZSwgdGhpcy5zaG93RXZlbnQsIHRydWUp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEsuYW5pbWF0ZUluKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKEggIT0gInZpc2libGUiIHx8IEgg
PT09ICIiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmVmb3JlU2hvd0V2ZW50LmZp
cmUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0RG9tVmlzaWJpbGl0eSh0cnVl
KTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jZmcucmVmaXJlRXZlbnQoImlmcmFtZSIp
OwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFdmVudC5maXJlKCkKICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXREb21W
aXNpYmlsaXR5KHRydWUpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKEYpIHsKICAgICAgICAgICAg
ICAgICAgICB0aGlzLmhpZGVNYWNHZWNrb1Njcm9sbGJhcnMoKQogICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgaWYgKEIpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoSCA9PSAidmlz
aWJsZSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWZvcmVIaWRlRXZlbnQuZmly
ZSgpOwogICAgICAgICAgICAgICAgICAgICAgICBHID0gRS5sZW5ndGg7CiAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAoaiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGogPCBHOwogICAg
ICAgICAgICAgICAgICAgICAgICBqKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUg
PSBFW2pdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGogPT09IDAgJiYgIU0oZS5h
bmltYXRlT3V0Q29tcGxldGVFdmVudCwgdGhpcy5oaWRlRXZlbnQuZmlyZSwgdGhpcy5oaWRlRXZl
bnQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5hbmltYXRlT3V0Q29tcGxl
dGVFdmVudC5zdWJzY3JpYmUodGhpcy5oaWRlRXZlbnQuZmlyZSwgdGhpcy5oaWRlRXZlbnQsIHRy
dWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlLmFuaW1hdGVPdXQoKQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEggPT09ICIiKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXREb21WaXNpYmlsaXR5KGZhbHNl
KQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAoSCA9PSAidmlzaWJsZSIg
fHwgSCA9PT0gIiIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWZvcmVIaWRlRXZl
bnQuZmlyZSgpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXREb21WaXNpYmlsaXR5
KGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlRXZlbnQuZmlyZSgpCiAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5f
c2V0RG9tVmlzaWJpbGl0eShmYWxzZSkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGRvQ2VudGVyT25ET01FdmVu
dDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgQiA9IHRoaXMuY2ZnLAogICAgICAgICAg
ICAgICAgQSA9IEIuZ2V0UHJvcGVydHkoImZpeGVkY2VudGVyIik7CiAgICAgICAgICAgIGlmIChC
LmdldFByb3BlcnR5KCJ2aXNpYmxlIikpIHsKICAgICAgICAgICAgICAgIGlmIChBICYmIChBICE9
PSBQIHx8IHRoaXMuZml0c0luVmlld3BvcnQoKSkpIHsKICAgICAgICAgICAgICAgICAgICB0aGlz
LmNlbnRlcigpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAg
ICAgIGZpdHNJblZpZXdwb3J0OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBCID0gUS5W
SUVXUE9SVF9PRkZTRVQsCiAgICAgICAgICAgICAgICBEID0gdGhpcy5lbGVtZW50LAogICAgICAg
ICAgICAgICAgQSA9IEQub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgICAgICBDID0gRC5vZmZzZXRI
ZWlnaHQsCiAgICAgICAgICAgICAgICBGID0gYS5nZXRWaWV3cG9ydFdpZHRoKCksCiAgICAgICAg
ICAgICAgICBFID0gYS5nZXRWaWV3cG9ydEhlaWdodCgpOwogICAgICAgICAgICByZXR1cm4gKChB
ICsgQiA8IEYpICYmIChDICsgQiA8IEUpKQogICAgICAgIH0sCiAgICAgICAgY29uZmlnRml4ZWRD
ZW50ZXI6IGZ1bmN0aW9uIChDLCBFLCBCKSB7CiAgICAgICAgICAgIHZhciBBID0gRVswXSwKICAg
ICAgICAgICAgICAgIEYgPSBPLmFscmVhZHlTdWJzY3JpYmVkLAogICAgICAgICAgICAgICAgRCA9
IFEud2luZG93UmVzaXplRXZlbnQsCiAgICAgICAgICAgICAgICBHID0gUS53aW5kb3dTY3JvbGxF
dmVudDsKICAgICAgICAgICAgaWYgKEEpIHsKICAgICAgICAgICAgICAgIHRoaXMuY2VudGVyKCk7
CiAgICAgICAgICAgICAgICBpZiAoIUYodGhpcy5iZWZvcmVTaG93RXZlbnQsIHRoaXMuY2VudGVy
KSkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuYmVmb3JlU2hvd0V2ZW50LnN1YnNjcmliZSh0
aGlzLmNlbnRlcikKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghRihELCB0
aGlzLmRvQ2VudGVyT25ET01FdmVudCwgdGhpcykpIHsKICAgICAgICAgICAgICAgICAgICBELnN1
YnNjcmliZSh0aGlzLmRvQ2VudGVyT25ET01FdmVudCwgdGhpcywgdHJ1ZSkKICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgIGlmICghRihHLCB0aGlzLmRvQ2VudGVyT25ET01FdmVudCwg
dGhpcykpIHsKICAgICAgICAgICAgICAgICAgICBHLnN1YnNjcmliZSh0aGlzLmRvQ2VudGVyT25E
T01FdmVudCwgdGhpcywgdHJ1ZSkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgIHRoaXMuYmVmb3JlU2hvd0V2ZW50LnVuc3Vic2NyaWJlKHRoaXMu
Y2VudGVyKTsKICAgICAgICAgICAgICAgIEQudW5zdWJzY3JpYmUodGhpcy5kb0NlbnRlck9uRE9N
RXZlbnQsIHRoaXMpOwogICAgICAgICAgICAgICAgRy51bnN1YnNjcmliZSh0aGlzLmRvQ2VudGVy
T25ET01FdmVudCwgdGhpcykKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgY29uZmln
SGVpZ2h0OiBmdW5jdGlvbiAoQiwgRCwgQSkgewogICAgICAgICAgICB2YXIgRSA9IERbMF0sCiAg
ICAgICAgICAgICAgICBDID0gdGhpcy5lbGVtZW50OwogICAgICAgICAgICBhLnNldFN0eWxlKEMs
ICJoZWlnaHQiLCBFKTsKICAgICAgICAgICAgdGhpcy5jZmcucmVmaXJlRXZlbnQoImlmcmFtZSIp
CiAgICAgICAgfSwKICAgICAgICBjb25maWdBdXRvRmlsbEhlaWdodDogZnVuY3Rpb24gKEQsIEUs
IEgpIHsKICAgICAgICAgICAgdmFyIEIgPSBFWzBdLAogICAgICAgICAgICAgICAgRyA9IHRoaXMu
Y2ZnLAogICAgICAgICAgICAgICAgQyA9ICJhdXRvZmlsbGhlaWdodCIsCiAgICAgICAgICAgICAg
ICBBID0gImhlaWdodCIsCiAgICAgICAgICAgICAgICBGID0gRy5nZXRQcm9wZXJ0eShDKSwKICAg
ICAgICAgICAgICAgIEkgPSB0aGlzLl9hdXRvRmlsbE9uSGVpZ2h0Q2hhbmdlOwogICAgICAgICAg
ICBHLnVuc3Vic2NyaWJlRnJvbUNvbmZpZ0V2ZW50KEEsIEkpOwogICAgICAgICAgICBaLnRleHRS
ZXNpemVFdmVudC51bnN1YnNjcmliZShJKTsKICAgICAgICAgICAgdGhpcy5jaGFuZ2VDb250ZW50
RXZlbnQudW5zdWJzY3JpYmUoSSk7CiAgICAgICAgICAgIGlmIChGICYmIEIgIT09IEYgJiYgdGhp
c1tGXSkgewogICAgICAgICAgICAgICAgYS5zZXRTdHlsZSh0aGlzW0ZdLCBBLCAiIikKICAgICAg
ICAgICAgfQogICAgICAgICAgICBpZiAoQikgewogICAgICAgICAgICAgICAgQiA9IFgudHJpbShC
LnRvTG93ZXJDYXNlKCkpOwogICAgICAgICAgICAgICAgRy5zdWJzY3JpYmVUb0NvbmZpZ0V2ZW50
KEEsIEksIHRoaXNbQl0sIHRoaXMpOwogICAgICAgICAgICAgICAgWi50ZXh0UmVzaXplRXZlbnQu
c3Vic2NyaWJlKEksIHRoaXNbQl0sIHRoaXMpOwogICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VD
b250ZW50RXZlbnQuc3Vic2NyaWJlKEksIHRoaXNbQl0sIHRoaXMpOwogICAgICAgICAgICAgICAg
Ry5zZXRQcm9wZXJ0eShDLCBCLCB0cnVlKQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAg
ICBjb25maWdXaWR0aDogZnVuY3Rpb24gKEIsIEUsIEEpIHsKICAgICAgICAgICAgdmFyIEMgPSBF
WzBdLAogICAgICAgICAgICAgICAgRCA9IHRoaXMuZWxlbWVudDsKICAgICAgICAgICAgYS5zZXRT
dHlsZShELCAid2lkdGgiLCBDKTsKICAgICAgICAgICAgdGhpcy5jZmcucmVmaXJlRXZlbnQoImlm
cmFtZSIpCiAgICAgICAgfSwKICAgICAgICBjb25maWd6SW5kZXg6IGZ1bmN0aW9uIChDLCBFLCBC
KSB7CiAgICAgICAgICAgIHZhciBBID0gRVswXSwKICAgICAgICAgICAgICAgIEQgPSB0aGlzLmVs
ZW1lbnQ7CiAgICAgICAgICAgIGlmICghQSkgewogICAgICAgICAgICAgICAgQSA9IGEuZ2V0U3R5
bGUoRCwgInpJbmRleCIpOwogICAgICAgICAgICAgICAgaWYgKCFBIHx8IGlzTmFOKEEpKSB7CiAg
ICAgICAgICAgICAgICAgICAgQSA9IDAKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQog
ICAgICAgICAgICBpZiAodGhpcy5pZnJhbWUgfHwgdGhpcy5jZmcuZ2V0UHJvcGVydHkoImlmcmFt
ZSIpID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICBpZiAoQSA8PSAwKSB7CiAgICAgICAgICAg
ICAgICAgICAgQSA9IDEKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAg
ICBhLnNldFN0eWxlKEQsICJ6SW5kZXgiLCBBKTsKICAgICAgICAgICAgdGhpcy5jZmcuc2V0UHJv
cGVydHkoInpJbmRleCIsIEEsIHRydWUpOwogICAgICAgICAgICBpZiAodGhpcy5pZnJhbWUpIHsK
ICAgICAgICAgICAgICAgIHRoaXMuc3RhY2tJZnJhbWUoKQogICAgICAgICAgICB9CiAgICAgICAg
fSwKICAgICAgICBjb25maWdYWTogZnVuY3Rpb24gKEQsIEUsIEMpIHsKICAgICAgICAgICAgdmFy
IEEgPSBFWzBdLAogICAgICAgICAgICAgICAgRiA9IEFbMF0sCiAgICAgICAgICAgICAgICBCID0g
QVsxXTsKICAgICAgICAgICAgdGhpcy5jZmcuc2V0UHJvcGVydHkoIngiLCBGKTsKICAgICAgICAg
ICAgdGhpcy5jZmcuc2V0UHJvcGVydHkoInkiLCBCKTsKICAgICAgICAgICAgdGhpcy5iZWZvcmVN
b3ZlRXZlbnQuZmlyZShbRiwgQl0pOwogICAgICAgICAgICBGID0gdGhpcy5jZmcuZ2V0UHJvcGVy
dHkoIngiKTsKICAgICAgICAgICAgQiA9IHRoaXMuY2ZnLmdldFByb3BlcnR5KCJ5Iik7CiAgICAg
ICAgICAgIHRoaXMuY2ZnLnJlZmlyZUV2ZW50KCJpZnJhbWUiKTsKICAgICAgICAgICAgdGhpcy5t
b3ZlRXZlbnQuZmlyZShbRiwgQl0pCiAgICAgICAgfSwKICAgICAgICBjb25maWdYOiBmdW5jdGlv
biAoQywgRCwgQikgewogICAgICAgICAgICB2YXIgRSA9IERbMF0sCiAgICAgICAgICAgICAgICBB
ID0gdGhpcy5jZmcuZ2V0UHJvcGVydHkoInkiKTsKICAgICAgICAgICAgdGhpcy5jZmcuc2V0UHJv
cGVydHkoIngiLCBFLCB0cnVlKTsKICAgICAgICAgICAgdGhpcy5jZmcuc2V0UHJvcGVydHkoInki
LCBBLCB0cnVlKTsKICAgICAgICAgICAgdGhpcy5iZWZvcmVNb3ZlRXZlbnQuZmlyZShbRSwgQV0p
OwogICAgICAgICAgICBFID0gdGhpcy5jZmcuZ2V0UHJvcGVydHkoIngiKTsKICAgICAgICAgICAg
QSA9IHRoaXMuY2ZnLmdldFByb3BlcnR5KCJ5Iik7CiAgICAgICAgICAgIGEuc2V0WCh0aGlzLmVs
ZW1lbnQsIEUsIHRydWUpOwogICAgICAgICAgICB0aGlzLmNmZy5zZXRQcm9wZXJ0eSgieHkiLCBb
RSwgQV0sIHRydWUpOwogICAgICAgICAgICB0aGlzLmNmZy5yZWZpcmVFdmVudCgiaWZyYW1lIik7
CiAgICAgICAgICAgIHRoaXMubW92ZUV2ZW50LmZpcmUoW0UsIEFdKQogICAgICAgIH0sCiAgICAg
ICAgY29uZmlnWTogZnVuY3Rpb24gKEMsIEQsIEIpIHsKICAgICAgICAgICAgdmFyIEUgPSB0aGlz
LmNmZy5nZXRQcm9wZXJ0eSgieCIpLAogICAgICAgICAgICAgICAgQSA9IERbMF07CiAgICAgICAg
ICAgIHRoaXMuY2ZnLnNldFByb3BlcnR5KCJ4IiwgRSwgdHJ1ZSk7CiAgICAgICAgICAgIHRoaXMu
Y2ZnLnNldFByb3BlcnR5KCJ5IiwgQSwgdHJ1ZSk7CiAgICAgICAgICAgIHRoaXMuYmVmb3JlTW92
ZUV2ZW50LmZpcmUoW0UsIEFdKTsKICAgICAgICAgICAgRSA9IHRoaXMuY2ZnLmdldFByb3BlcnR5
KCJ4Iik7CiAgICAgICAgICAgIEEgPSB0aGlzLmNmZy5nZXRQcm9wZXJ0eSgieSIpOwogICAgICAg
ICAgICBhLnNldFkodGhpcy5lbGVtZW50LCBBLCB0cnVlKTsKICAgICAgICAgICAgdGhpcy5jZmcu
c2V0UHJvcGVydHkoInh5IiwgW0UsIEFdLCB0cnVlKTsKICAgICAgICAgICAgdGhpcy5jZmcucmVm
aXJlRXZlbnQoImlmcmFtZSIpOwogICAgICAgICAgICB0aGlzLm1vdmVFdmVudC5maXJlKFtFLCBB
XSkKICAgICAgICB9LAogICAgICAgIHNob3dJZnJhbWU6IGZ1bmN0aW9uICgpIHsKICAgICAgICAg
ICAgdmFyIEEgPSB0aGlzLmlmcmFtZSwKICAgICAgICAgICAgICAgIEI7CiAgICAgICAgICAgIGlm
IChBKSB7CiAgICAgICAgICAgICAgICBCID0gdGhpcy5lbGVtZW50LnBhcmVudE5vZGU7CiAgICAg
ICAgICAgICAgICBpZiAoQiAhPSBBLnBhcmVudE5vZGUpIHsKICAgICAgICAgICAgICAgICAgICB0
aGlzLl9hZGRUb1BhcmVudChCLCBBKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
QS5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIgogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAg
ICBoaWRlSWZyYW1lOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIGlmICh0aGlzLmlmcmFtZSkg
ewogICAgICAgICAgICAgICAgdGhpcy5pZnJhbWUuc3R5bGUuZGlzcGxheSA9ICJub25lIgogICAg
ICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBzeW5jSWZyYW1lOiBmdW5jdGlvbiAoKSB7CiAg
ICAgICAgICAgIHZhciBFID0gdGhpcy5pZnJhbWUsCiAgICAgICAgICAgICAgICBDID0gdGhpcy5l
bGVtZW50LAogICAgICAgICAgICAgICAgQSA9IFEuSUZSQU1FX09GRlNFVCwKICAgICAgICAgICAg
ICAgIEQgPSAoQSAqIDIpLAogICAgICAgICAgICAgICAgQjsKICAgICAgICAgICAgaWYgKEUpIHsK
ICAgICAgICAgICAgICAgIEUuc3R5bGUud2lkdGggPSAoQy5vZmZzZXRXaWR0aCArIEQgKyAicHgi
KTsKICAgICAgICAgICAgICAgIEUuc3R5bGUuaGVpZ2h0ID0gKEMub2Zmc2V0SGVpZ2h0ICsgRCAr
ICJweCIpOwogICAgICAgICAgICAgICAgQiA9IHRoaXMuY2ZnLmdldFByb3BlcnR5KCJ4eSIpOwog
ICAgICAgICAgICAgICAgaWYgKCFYLmlzQXJyYXkoQikgfHwgKGlzTmFOKEJbMF0pIHx8IGlzTmFO
KEJbMV0pKSkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuc3luY1Bvc2l0aW9uKCk7CiAgICAg
ICAgICAgICAgICAgICAgQiA9IHRoaXMuY2ZnLmdldFByb3BlcnR5KCJ4eSIpCiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICBhLnNldFhZKEUsIFsoQlswXSAtIEEpLCAoQlsxXSAtIEEp
XSkKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgc3RhY2tJZnJhbWU6IGZ1bmN0aW9u
ICgpIHsKICAgICAgICAgICAgaWYgKHRoaXMuaWZyYW1lKSB7CiAgICAgICAgICAgICAgICB2YXIg
QSA9IGEuZ2V0U3R5bGUodGhpcy5lbGVtZW50LCAiekluZGV4Iik7CiAgICAgICAgICAgICAgICBp
ZiAoIVlBSE9PLmxhbmcuaXNVbmRlZmluZWQoQSkgJiYgIWlzTmFOKEEpKSB7CiAgICAgICAgICAg
ICAgICAgICAgYS5zZXRTdHlsZSh0aGlzLmlmcmFtZSwgInpJbmRleCIsIChBIC0gMSkpCiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGNvbmZpZ0lmcmFt
ZTogZnVuY3Rpb24gKEMsIEQsIEIpIHsKICAgICAgICAgICAgdmFyIEYgPSBEWzBdOwoKICAgICAg
ICAgICAgZnVuY3Rpb24gQSgpIHsKICAgICAgICAgICAgICAgIHZhciBIID0gdGhpcy5pZnJhbWUs
CiAgICAgICAgICAgICAgICAgICAgRyA9IHRoaXMuZWxlbWVudCwKICAgICAgICAgICAgICAgICAg
ICBKOwogICAgICAgICAgICAgICAgaWYgKCFIKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFX
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJp
ZnJhbWUiKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNTZWN1cmUpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFcuc3JjID0gUS5JRlJBTUVfU1JDCiAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFYuaWUpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFcuc3R5bGUuZmlsdGVyID0gImFscGhhKG9wYWNpdHk9MCki
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgVy5mcmFtZUJvcmRlciA9IDAKICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFcuc3R5
bGUub3BhY2l0eSA9ICIwIgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgIFcuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwogICAgICAgICAgICAgICAg
ICAgICAgICBXLnN0eWxlLmJvcmRlciA9ICJub25lIjsKICAgICAgICAgICAgICAgICAgICAgICAg
Vy5zdHlsZS5tYXJnaW4gPSAiMCI7CiAgICAgICAgICAgICAgICAgICAgICAgIFcuc3R5bGUucGFk
ZGluZyA9ICIwIjsKICAgICAgICAgICAgICAgICAgICAgICAgVy5zdHlsZS5kaXNwbGF5ID0gIm5v
bmUiOwogICAgICAgICAgICAgICAgICAgICAgICBXLnRhYkluZGV4ID0gLTE7CiAgICAgICAgICAg
ICAgICAgICAgICAgIFcuY2xhc3NOYW1lID0gUS5DU1NfSUZSQU1FCiAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgIEggPSBXLmNsb25lTm9kZShmYWxzZSk7CiAgICAgICAg
ICAgICAgICAgICAgSC5pZCA9IHRoaXMuaWQgKyAiX2YiOwogICAgICAgICAgICAgICAgICAgIEog
PSBHLnBhcmVudE5vZGU7CiAgICAgICAgICAgICAgICAgICAgdmFyIEkgPSBKIHx8IGRvY3VtZW50
LmJvZHk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRkVG9QYXJlbnQoSSwgSCk7CiAgICAg
ICAgICAgICAgICAgICAgdGhpcy5pZnJhbWUgPSBICiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICB0aGlzLnNob3dJZnJhbWUoKTsKICAgICAgICAgICAgICAgIHRoaXMuc3luY0lmcmFt
ZSgpOwogICAgICAgICAgICAgICAgdGhpcy5zdGFja0lmcmFtZSgpOwogICAgICAgICAgICAgICAg
aWYgKCF0aGlzLl9oYXNJZnJhbWVFdmVudExpc3RlbmVycykgewogICAgICAgICAgICAgICAgICAg
IHRoaXMuc2hvd0V2ZW50LnN1YnNjcmliZSh0aGlzLnNob3dJZnJhbWUpOwogICAgICAgICAgICAg
ICAgICAgIHRoaXMuaGlkZUV2ZW50LnN1YnNjcmliZSh0aGlzLmhpZGVJZnJhbWUpOwogICAgICAg
ICAgICAgICAgICAgIHRoaXMuY2hhbmdlQ29udGVudEV2ZW50LnN1YnNjcmliZSh0aGlzLnN5bmNJ
ZnJhbWUpOwogICAgICAgICAgICAgICAgICAgIHRoaXMuX2hhc0lmcmFtZUV2ZW50TGlzdGVuZXJz
ID0gdHJ1ZQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0
aW9uIEUoKSB7CiAgICAgICAgICAgICAgICBBLmNhbGwodGhpcyk7CiAgICAgICAgICAgICAgICB0
aGlzLmJlZm9yZVNob3dFdmVudC51bnN1YnNjcmliZShFKTsKICAgICAgICAgICAgICAgIHRoaXMu
X2lmcmFtZURlZmVycmVkID0gZmFsc2UKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoRikg
ewogICAgICAgICAgICAgICAgaWYgKHRoaXMuY2ZnLmdldFByb3BlcnR5KCJ2aXNpYmxlIikpIHsK
ICAgICAgICAgICAgICAgICAgICBBLmNhbGwodGhpcykKICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9pZnJhbWVEZWZlcnJlZCkgewogICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLmJlZm9yZVNob3dFdmVudC5zdWJzY3JpYmUoRSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMuX2lmcmFtZURlZmVycmVkID0gdHJ1ZQogICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgIHRoaXMuaGlkZUlmcmFtZSgpOwogICAgICAgICAgICAgICAgaWYgKHRoaXMuX2hh
c0lmcmFtZUV2ZW50TGlzdGVuZXJzKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXZl
bnQudW5zdWJzY3JpYmUodGhpcy5zaG93SWZyYW1lKTsKICAgICAgICAgICAgICAgICAgICB0aGlz
LmhpZGVFdmVudC51bnN1YnNjcmliZSh0aGlzLmhpZGVJZnJhbWUpOwogICAgICAgICAgICAgICAg
ICAgIHRoaXMuY2hhbmdlQ29udGVudEV2ZW50LnVuc3Vic2NyaWJlKHRoaXMuc3luY0lmcmFtZSk7
CiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGFzSWZyYW1lRXZlbnRMaXN0ZW5lcnMgPSBmYWxz
ZQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBfcHJp
bWVYWUZyb21ET006IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgaWYgKFlBSE9PLmxhbmcuaXNV
bmRlZmluZWQodGhpcy5jZmcuZ2V0UHJvcGVydHkoInh5IikpKSB7CiAgICAgICAgICAgICAgICB0
aGlzLnN5bmNQb3NpdGlvbigpOwogICAgICAgICAgICAgICAgdGhpcy5jZmcucmVmaXJlRXZlbnQo
Inh5Iik7CiAgICAgICAgICAgICAgICB0aGlzLmJlZm9yZVNob3dFdmVudC51bnN1YnNjcmliZSh0
aGlzLl9wcmltZVhZRnJvbURPTSkKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgY29u
ZmlnQ29uc3RyYWluVG9WaWV3cG9ydDogZnVuY3Rpb24gKEMsIEQsIEIpIHsKICAgICAgICAgICAg
dmFyIEEgPSBEWzBdOwogICAgICAgICAgICBpZiAoQSkgewogICAgICAgICAgICAgICAgaWYgKCFP
LmFscmVhZHlTdWJzY3JpYmVkKHRoaXMuYmVmb3JlTW92ZUV2ZW50LCB0aGlzLmVuZm9yY2VDb25z
dHJhaW50cywgdGhpcykpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmJlZm9yZU1vdmVFdmVu
dC5zdWJzY3JpYmUodGhpcy5lbmZvcmNlQ29uc3RyYWludHMsIHRoaXMsIHRydWUpCiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoIU8uYWxyZWFkeVN1YnNjcmliZWQodGhpcy5i
ZWZvcmVTaG93RXZlbnQsIHRoaXMuX3ByaW1lWFlGcm9tRE9NKSkgewogICAgICAgICAgICAgICAg
ICAgIHRoaXMuYmVmb3JlU2hvd0V2ZW50LnN1YnNjcmliZSh0aGlzLl9wcmltZVhZRnJvbURPTSkK
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRo
aXMuYmVmb3JlU2hvd0V2ZW50LnVuc3Vic2NyaWJlKHRoaXMuX3ByaW1lWFlGcm9tRE9NKTsKICAg
ICAgICAgICAgICAgIHRoaXMuYmVmb3JlTW92ZUV2ZW50LnVuc3Vic2NyaWJlKHRoaXMuZW5mb3Jj
ZUNvbnN0cmFpbnRzLCB0aGlzKQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBjb25m
aWdDb250ZXh0OiBmdW5jdGlvbiAoRCwgRSwgSCkgewogICAgICAgICAgICB2YXIgQSA9IEVbMF0s
CiAgICAgICAgICAgICAgICBHLCBKLCBDLCBGLCBJLCBCID0gdGhpcy5DT05URVhUX1RSSUdHRVJT
OwogICAgICAgICAgICBpZiAoQSkgewogICAgICAgICAgICAgICAgRyA9IEFbMF07CiAgICAgICAg
ICAgICAgICBKID0gQVsxXTsKICAgICAgICAgICAgICAgIEMgPSBBWzJdOwogICAgICAgICAgICAg
ICAgRiA9IEFbM107CiAgICAgICAgICAgICAgICBJID0gQVs0XTsKICAgICAgICAgICAgICAgIGlm
IChCICYmIEIubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgICAgIEYgPSAoRiB8fCBbXSku
Y29uY2F0KEIpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoRykgewogICAg
ICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgRyA9PSAic3RyaW5nIikgewogICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLmNmZy5zZXRQcm9wZXJ0eSgiY29udGV4dCIsIFtkb2N1bWVudC5nZXRF
bGVtZW50QnlJZChHKSwgSiwgQywgRiwgSV0sIHRydWUpCiAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgIGlmIChKICYmIEMpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5hbGlnbihKLCBDLCBJKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICBpZiAodGhpcy5fY29udGV4dFRyaWdnZXJzKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMuX3Byb2Nlc3NUcmlnZ2Vycyh0aGlzLl9jb250ZXh0VHJpZ2dlcnMsIGIsIHRoaXMuX2Fs
aWduT25UcmlnZ2VyKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBp
ZiAoRikgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9jZXNzVHJpZ2dlcnMoRiwg
WSwgdGhpcy5fYWxpZ25PblRyaWdnZXIpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9j
b250ZXh0VHJpZ2dlcnMgPSBGCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBfYWxpZ25PblRyaWdnZXI6IGZ1bmN0
aW9uIChBLCBCKSB7CiAgICAgICAgICAgIHRoaXMuYWxpZ24oKQogICAgICAgIH0sCiAgICAgICAg
X2ZpbmRUcmlnZ2VyQ0U6IGZ1bmN0aW9uIChCKSB7CiAgICAgICAgICAgIHZhciBBID0gbnVsbDsK
ICAgICAgICAgICAgaWYgKEIgaW5zdGFuY2VvZiBUKSB7CiAgICAgICAgICAgICAgICBBID0gQgog
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKFEuX1RSSUdHRVJfTUFQW0Jd
KSB7CiAgICAgICAgICAgICAgICAgICAgQSA9IFEuX1RSSUdHRVJfTUFQW0JdCiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIEEKICAgICAgICB9LAogICAg
ICAgIF9wcm9jZXNzVHJpZ2dlcnM6IGZ1bmN0aW9uIChDLCBBLCBEKSB7CiAgICAgICAgICAgIHZh
ciBFLCBCOwogICAgICAgICAgICBmb3IgKHZhciBGID0gMCwgRyA9IEMubGVuZ3RoOwogICAgICAg
ICAgICBGIDwgRzsgKytGKSB7CiAgICAgICAgICAgICAgICBFID0gQ1tGXTsKICAgICAgICAgICAg
ICAgIEIgPSB0aGlzLl9maW5kVHJpZ2dlckNFKEUpOwogICAgICAgICAgICAgICAgaWYgKEIpIHsK
ICAgICAgICAgICAgICAgICAgICBCW0FdKEQsIHRoaXMsIHRydWUpCiAgICAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHRoaXNbQV0oRSwgRCkKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgYWxpZ246IGZ1bmN0aW9uIChILCBB
LCBFKSB7CiAgICAgICAgICAgIHZhciBCID0gdGhpcy5jZmcuZ2V0UHJvcGVydHkoImNvbnRleHQi
KSwKICAgICAgICAgICAgICAgIEQgPSB0aGlzLAogICAgICAgICAgICAgICAgSSwgRywgQzsKCiAg
ICAgICAgICAgIGZ1bmN0aW9uIEYoSywgSikgewogICAgICAgICAgICAgICAgdmFyIEwgPSBudWxs
LAogICAgICAgICAgICAgICAgICAgIE0gPSBudWxsOwogICAgICAgICAgICAgICAgc3dpdGNoIChI
KSB7CiAgICAgICAgICAgICAgICBjYXNlIFEuVE9QX0xFRlQ6CiAgICAgICAgICAgICAgICAgICAg
TCA9IEo7CiAgICAgICAgICAgICAgICAgICAgTSA9IEs7CiAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICBjYXNlIFEuVE9QX1JJR0hUOgogICAgICAgICAgICAgICAgICAg
IEwgPSBKIC0gRy5vZmZzZXRXaWR0aDsKICAgICAgICAgICAgICAgICAgICBNID0gSzsKICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgUS5CT1RUT01fTEVGVDoK
ICAgICAgICAgICAgICAgICAgICBMID0gSjsKICAgICAgICAgICAgICAgICAgICBNID0gSyAtIEcu
b2Zmc2V0SGVpZ2h0OwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
Y2FzZSBRLkJPVFRPTV9SSUdIVDoKICAgICAgICAgICAgICAgICAgICBMID0gSiAtIEcub2Zmc2V0
V2lkdGg7CiAgICAgICAgICAgICAgICAgICAgTSA9IEsgLSBHLm9mZnNldEhlaWdodDsKICAgICAg
ICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYg
KEwgIT09IG51bGwgJiYgTSAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgIGlmIChFKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIEwgKz0gRVswXTsKICAgICAgICAgICAgICAgICAgICAg
ICAgTSArPSBFWzFdCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIEQu
bW92ZVRvKEwsIE0pCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAg
aWYgKEIpIHsKICAgICAgICAgICAgICAgIEkgPSBCWzBdOwogICAgICAgICAgICAgICAgRyA9IHRo
aXMuZWxlbWVudDsKICAgICAgICAgICAgICAgIEQgPSB0aGlzOwogICAgICAgICAgICAgICAgaWYg
KCFIKSB7CiAgICAgICAgICAgICAgICAgICAgSCA9IEJbMV0KICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgIGlmICghQSkgewogICAgICAgICAgICAgICAgICAgIEEgPSBCWzJdCiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoIUUgJiYgQls0XSkgewogICAgICAgICAg
ICAgICAgICAgIEUgPSBCWzRdCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAo
RyAmJiBJKSB7CiAgICAgICAgICAgICAgICAgICAgQyA9IGEuZ2V0UmVnaW9uKEkpOwogICAgICAg
ICAgICAgICAgICAgIHN3aXRjaCAoQSkgewogICAgICAgICAgICAgICAgICAgIGNhc2UgUS5UT1Bf
TEVGVDoKICAgICAgICAgICAgICAgICAgICAgICAgRihDLnRvcCwgQy5sZWZ0KTsKICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSBRLlRPUF9SSUdI
VDoKICAgICAgICAgICAgICAgICAgICAgICAgRihDLnRvcCwgQy5yaWdodCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgUS5CT1RUT01fTEVG
VDoKICAgICAgICAgICAgICAgICAgICAgICAgRihDLmJvdHRvbSwgQy5sZWZ0KTsKICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSBRLkJPVFRPTV9S
SUdIVDoKICAgICAgICAgICAgICAgICAgICAgICAgRihDLmJvdHRvbSwgQy5yaWdodCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBlbmZvcmNlQ29uc3RyYWlu
dHM6IGZ1bmN0aW9uIChELCBFLCBDKSB7CiAgICAgICAgICAgIHZhciBBID0gRVswXTsKICAgICAg
ICAgICAgdmFyIEIgPSB0aGlzLmdldENvbnN0cmFpbmVkWFkoQVswXSwgQVsxXSk7CiAgICAgICAg
ICAgIHRoaXMuY2ZnLnNldFByb3BlcnR5KCJ4IiwgQlswXSwgdHJ1ZSk7CiAgICAgICAgICAgIHRo
aXMuY2ZnLnNldFByb3BlcnR5KCJ5IiwgQlsxXSwgdHJ1ZSk7CiAgICAgICAgICAgIHRoaXMuY2Zn
LnNldFByb3BlcnR5KCJ4eSIsIEIsIHRydWUpCiAgICAgICAgfSwKICAgICAgICBfZ2V0Q29uc3Ry
YWluZWRQb3M6IGZ1bmN0aW9uIChDLCBLKSB7CiAgICAgICAgICAgIHZhciBHID0gdGhpcy5lbGVt
ZW50LAogICAgICAgICAgICAgICAgSSA9IFEuVklFV1BPUlRfT0ZGU0VULAogICAgICAgICAgICAg
ICAgQSA9IChDID09ICJ4IiksCiAgICAgICAgICAgICAgICBCID0gKEEpID8gRy5vZmZzZXRXaWR0
aCA6IEcub2Zmc2V0SGVpZ2h0LAogICAgICAgICAgICBIID0gKEEpID8gYS5nZXRWaWV3cG9ydFdp
ZHRoKCkgOiBhLmdldFZpZXdwb3J0SGVpZ2h0KCksCiAgICAgICAgICAgIE0gPSAoQSkgPyBhLmdl
dERvY3VtZW50U2Nyb2xsTGVmdCgpIDogYS5nZXREb2N1bWVudFNjcm9sbFRvcCgpLAogICAgICAg
ICAgICBOID0gKEEpID8gUS5QUkVWRU5UX09WRVJMQVBfWCA6IFEuUFJFVkVOVF9PVkVSTEFQX1ks
CiAgICAgICAgICAgIEwgPSB0aGlzLmNmZy5nZXRQcm9wZXJ0eSgiY29udGV4dCIpLAogICAgICAg
ICAgICBGID0gKEIgKyBJIDwgSCksCiAgICAgICAgICAgIEQgPSB0aGlzLmNmZy5nZXRQcm9wZXJ0
eSgicHJldmVudGNvbnRleHRvdmVybGFwIikgJiYgTCAmJiBOWyhMWzFdICsgTFsyXSldLAogICAg
ICAgICAgICBFID0gTSArIEksCiAgICAgICAgICAgIGQgPSBNICsgSCAtIEIgLSBJLAogICAgICAg
ICAgICBKID0gSzsKICAgICAgICAgICAgaWYgKEsgPCBFIHx8IEsgPiBkKSB7CiAgICAgICAgICAg
ICAgICBpZiAoRCkgewogICAgICAgICAgICAgICAgICAgIEogPSB0aGlzLl9wcmV2ZW50T3Zlcmxh
cChDLCBMWzBdLCBCLCBILCBNKQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgICBpZiAoRikgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoSyA8IEUpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEogPSBFCiAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSyA+IGQpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBKID0gZAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgSiA9IEUKICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIEoKICAgICAgICB9
LAogICAgICAgIF9wcmV2ZW50T3ZlcmxhcDogZnVuY3Rpb24gKEMsIEQsIEIsIEYsIE4pIHsKICAg
ICAgICAgICAgdmFyIEEgPSAoQyA9PSAieCIpLAogICAgICAgICAgICAgICAgRyA9IFEuVklFV1BP
UlRfT0ZGU0VULAogICAgICAgICAgICAgICAgSCA9IHRoaXMsCiAgICAgICAgICAgICAgICBKID0g
KChBKSA/IGEuZ2V0WChEKSA6IGEuZ2V0WShEKSkgLSBOLAogICAgICAgICAgICAgICAgTCA9IChB
KSA/IEQub2Zmc2V0V2lkdGggOiBELm9mZnNldEhlaWdodCwKICAgICAgICAgICAgSyA9IEogLSBH
LAogICAgICAgICAgICBJID0gKEYgLSAoSiArIEwpKSAtIEcsCiAgICAgICAgICAgIE0gPSBmYWxz
ZSwKICAgICAgICAgICAgRSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHZhciBjOwog
ICAgICAgICAgICAgICAgaWYgKChILmNmZy5nZXRQcm9wZXJ0eShDKSAtIE4pID4gSikgewogICAg
ICAgICAgICAgICAgICAgIGMgPSAoSiAtIEIpCiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgICAgIGMgPSAoSiArIEwpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICBILmNmZy5zZXRQcm9wZXJ0eShDLCAoYyArIE4pLCB0cnVlKTsKICAgICAgICAgICAgICAg
IHJldHVybiBjCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGQgPSBmdW5jdGlvbiAoKSB7CiAg
ICAgICAgICAgICAgICB2YXIgYyA9ICgoSC5jZmcuZ2V0UHJvcGVydHkoQykgLSBOKSA+IEopID8g
SSA6IEssCiAgICAgICAgICAgICAgICBmOwogICAgICAgICAgICAgICAgaWYgKEIgPiBjKSB7CiAg
ICAgICAgICAgICAgICAgICAgaWYgKE0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgRSgpCiAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgRSgpOwog
ICAgICAgICAgICAgICAgICAgICAgICBNID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAg
ZiA9IGQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgIHJldHVybiBmCiAgICAgICAgICAgIH07CiAgICAgICAgICAgIGQoKTsKICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuY2ZnLmdldFByb3BlcnR5KEMpCiAgICAgICAgfSwKICAgICAgICBnZXRD
b25zdHJhaW5lZFg6IGZ1bmN0aW9uIChBKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLl9nZXRD
b25zdHJhaW5lZFBvcygieCIsIEEpCiAgICAgICAgfSwKICAgICAgICBnZXRDb25zdHJhaW5lZFk6
IGZ1bmN0aW9uIChBKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLl9nZXRDb25zdHJhaW5lZFBv
cygieSIsIEEpCiAgICAgICAgfSwKICAgICAgICBnZXRDb25zdHJhaW5lZFhZOiBmdW5jdGlvbiAo
QiwgQSkgewogICAgICAgICAgICByZXR1cm4gW3RoaXMuZ2V0Q29uc3RyYWluZWRYKEIpLCB0aGlz
LmdldENvbnN0cmFpbmVkWShBKV0KICAgICAgICB9LAogICAgICAgIGNlbnRlcjogZnVuY3Rpb24g
KCkgewogICAgICAgICAgICB2YXIgRCA9IFEuVklFV1BPUlRfT0ZGU0VULAogICAgICAgICAgICAg
ICAgQyA9IHRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aCwKICAgICAgICAgICAgICAgIEUgPSB0aGlz
LmVsZW1lbnQub2Zmc2V0SGVpZ2h0LAogICAgICAgICAgICAgICAgRiA9IGEuZ2V0Vmlld3BvcnRX
aWR0aCgpLAogICAgICAgICAgICAgICAgQiA9IGEuZ2V0Vmlld3BvcnRIZWlnaHQoKSwKICAgICAg
ICAgICAgICAgIEcsIEE7CiAgICAgICAgICAgIGlmIChDIDwgRikgewogICAgICAgICAgICAgICAg
RyA9IChGIC8gMikgLSAoQyAvIDIpICsgYS5nZXREb2N1bWVudFNjcm9sbExlZnQoKQogICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgRyA9IEQgKyBhLmdldERvY3VtZW50U2Nyb2xs
TGVmdCgpCiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKEUgPCBCKSB7CiAgICAgICAgICAg
ICAgICBBID0gKEIgLyAyKSAtIChFIC8gMikgKyBhLmdldERvY3VtZW50U2Nyb2xsVG9wKCkKICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIEEgPSBEICsgYS5nZXREb2N1bWVudFNj
cm9sbFRvcCgpCiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5jZmcuc2V0UHJvcGVydHko
Inh5IiwgW3BhcnNlSW50KEcsIDEwKSwgcGFyc2VJbnQoQSwgMTApXSk7CiAgICAgICAgICAgIHRo
aXMuY2ZnLnJlZmlyZUV2ZW50KCJpZnJhbWUiKTsKICAgICAgICAgICAgaWYgKFYud2Via2l0KSB7
CiAgICAgICAgICAgICAgICB0aGlzLmZvcmNlQ29udGFpbmVyUmVkcmF3KCkKICAgICAgICAgICAg
fQogICAgICAgIH0sCiAgICAgICAgc3luY1Bvc2l0aW9uOiBmdW5jdGlvbiAoKSB7CiAgICAgICAg
ICAgIHZhciBBID0gYS5nZXRYWSh0aGlzLmVsZW1lbnQpOwogICAgICAgICAgICB0aGlzLmNmZy5z
ZXRQcm9wZXJ0eSgieCIsIEFbMF0sIHRydWUpOwogICAgICAgICAgICB0aGlzLmNmZy5zZXRQcm9w
ZXJ0eSgieSIsIEFbMV0sIHRydWUpOwogICAgICAgICAgICB0aGlzLmNmZy5zZXRQcm9wZXJ0eSgi
eHkiLCBBLCB0cnVlKQogICAgICAgIH0sCiAgICAgICAgb25Eb21SZXNpemU6IGZ1bmN0aW9uIChB
LCBCKSB7CiAgICAgICAgICAgIHZhciBDID0gdGhpczsKICAgICAgICAgICAgUS5zdXBlcmNsYXNz
Lm9uRG9tUmVzaXplLmNhbGwodGhpcywgQSwgQik7CiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVu
Y3Rpb24gKCkgewogICAgICAgICAgICAgICAgQy5zeW5jUG9zaXRpb24oKTsKICAgICAgICAgICAg
ICAgIEMuY2ZnLnJlZmlyZUV2ZW50KCJpZnJhbWUiKTsKICAgICAgICAgICAgICAgIEMuY2ZnLnJl
ZmlyZUV2ZW50KCJjb250ZXh0IikKICAgICAgICAgICAgfSwKICAgICAgICAgICAgMCkKICAgICAg
ICB9LAogICAgICAgIF9nZXRDb21wdXRlZEhlaWdodDogKGZ1bmN0aW9uICgpIHsKICAgICAgICAg
ICAgaWYgKGRvY3VtZW50LmRlZmF1bHRWaWV3ICYmIGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENv
bXB1dGVkU3R5bGUpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoQikgewogICAg
ICAgICAgICAgICAgICAgIHZhciBDID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICBpZiAoQi5v
d25lckRvY3VtZW50ICYmIEIub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldykgewogICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgQSA9IEIub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21w
dXRlZFN0eWxlKEIsICIiKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEEpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEMgPSBwYXJzZUludChBLmhlaWdodCwgMTApCiAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIChYLmlzTnVtYmVyKEMpKSA/IEMgOiBudWxsCiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKEEpIHsK
ICAgICAgICAgICAgICAgICAgICB2YXIgQiA9IG51bGw7CiAgICAgICAgICAgICAgICAgICAgaWYg
KEEuc3R5bGUucGl4ZWxIZWlnaHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgQiA9IEEuc3R5
bGUucGl4ZWxIZWlnaHQKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIChYLmlzTnVtYmVyKEIpKSA/IEIgOiBudWxsCiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgIH0KICAgICAgICB9KSgpLAogICAgICAgIF92YWxpZGF0ZUF1dG9GaWxsSGVpZ2h0OiBm
dW5jdGlvbiAoQSkgewogICAgICAgICAgICByZXR1cm4gKCFBKSB8fCAoWC5pc1N0cmluZyhBKSAm
JiBRLlNURF9NT0RfUkUudGVzdChBKSkKICAgICAgICB9LAogICAgICAgIF9hdXRvRmlsbE9uSGVp
Z2h0Q2hhbmdlOiBmdW5jdGlvbiAoQSwgQywgQikgewogICAgICAgICAgICB2YXIgRCA9IHRoaXMu
Y2ZnLmdldFByb3BlcnR5KCJoZWlnaHQiKTsKICAgICAgICAgICAgaWYgKChEICYmIEQgIT09ICJh
dXRvIikgfHwgKEQgPT09IDApKSB7CiAgICAgICAgICAgICAgICB0aGlzLmZpbGxIZWlnaHQoQikK
ICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgX2dldFByZWNpc2VIZWlnaHQ6IGZ1bmN0
aW9uIChCKSB7CiAgICAgICAgICAgIHZhciBDID0gQi5vZmZzZXRIZWlnaHQ7CiAgICAgICAgICAg
IGlmIChCLmdldEJvdW5kaW5nQ2xpZW50UmVjdCkgewogICAgICAgICAgICAgICAgdmFyIEEgPSBC
LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgICAgICAgQyA9IEEuYm90dG9tIC0g
QS50b3AKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gQwogICAgICAgIH0sCiAgICAg
ICAgZmlsbEhlaWdodDogZnVuY3Rpb24gKEcpIHsKICAgICAgICAgICAgaWYgKEcpIHsKICAgICAg
ICAgICAgICAgIHZhciBJID0gdGhpcy5pbm5lckVsZW1lbnQgfHwgdGhpcy5lbGVtZW50LAogICAg
ICAgICAgICAgICAgICAgIEogPSBbdGhpcy5oZWFkZXIsIHRoaXMuYm9keSwgdGhpcy5mb290ZXJd
LAogICAgICAgICAgICAgICAgICAgIEMsIEIgPSAwLAogICAgICAgICAgICAgICAgICAgIEEgPSAw
LAogICAgICAgICAgICAgICAgICAgIEUgPSAwLAogICAgICAgICAgICAgICAgICAgIEggPSBmYWxz
ZTsKICAgICAgICAgICAgICAgIGZvciAodmFyIEQgPSAwLCBGID0gSi5sZW5ndGg7CiAgICAgICAg
ICAgICAgICBEIDwgRjsKICAgICAgICAgICAgICAgIEQrKykgewogICAgICAgICAgICAgICAgICAg
IEMgPSBKW0RdOwogICAgICAgICAgICAgICAgICAgIGlmIChDKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChHICE9PSBDKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBICs9IHRo
aXMuX2dldFByZWNpc2VIZWlnaHQoQykKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEggPSB0cnVlCiAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICBpZiAoSCkgewogICAgICAgICAgICAgICAgICAgIGlmIChWLmllIHx8IFYub3BlcmEpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgYS5zZXRTdHlsZShHLCAiaGVpZ2h0IiwgMCArICJweCIp
CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIEIgPSB0aGlzLl9nZXRD
b21wdXRlZEhlaWdodChJKTsKICAgICAgICAgICAgICAgICAgICBpZiAoQiA9PT0gbnVsbCkgewog
ICAgICAgICAgICAgICAgICAgICAgICBhLmFkZENsYXNzKEksICJ5dWktb3ZlcnJpZGUtcGFkZGlu
ZyIpOwogICAgICAgICAgICAgICAgICAgICAgICBCID0gSS5jbGllbnRIZWlnaHQ7CiAgICAgICAg
ICAgICAgICAgICAgICAgIGEucmVtb3ZlQ2xhc3MoSSwgInl1aS1vdmVycmlkZS1wYWRkaW5nIikK
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgRSA9IE1hdGgubWF4KEIg
LSBBLCAwKTsKICAgICAgICAgICAgICAgICAgICBhLnNldFN0eWxlKEcsICJoZWlnaHQiLCBFICsg
InB4Iik7CiAgICAgICAgICAgICAgICAgICAgaWYgKEcub2Zmc2V0SGVpZ2h0ICE9IEUpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgRSA9IE1hdGgubWF4KEUgLSAoRy5vZmZzZXRIZWlnaHQgLSBF
KSwgMCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYS5zZXRTdHls
ZShHLCAiaGVpZ2h0IiwgRSArICJweCIpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0K
ICAgICAgICB9LAogICAgICAgIGJyaW5nVG9Ub3A6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAg
dmFyIEQgPSBbXSwKICAgICAgICAgICAgICAgIEUgPSB0aGlzLmVsZW1lbnQ7CgogICAgICAgICAg
ICBmdW5jdGlvbiBBKEwsIE0pIHsKICAgICAgICAgICAgICAgIHZhciBKID0gYS5nZXRTdHlsZShM
LCAiekluZGV4IiksCiAgICAgICAgICAgICAgICAgICAgSyA9IGEuZ2V0U3R5bGUoTSwgInpJbmRl
eCIpLAogICAgICAgICAgICAgICAgICAgIE4gPSAoIUogfHwgaXNOYU4oSikpID8gMCA6IHBhcnNl
SW50KEosIDEwKSwKICAgICAgICAgICAgICAgIEkgPSAoIUsgfHwgaXNOYU4oSykpID8gMCA6IHBh
cnNlSW50KEssIDEwKTsKICAgICAgICAgICAgICAgIGlmIChOID4gSSkgewogICAgICAgICAgICAg
ICAgICAgIHJldHVybiAtMQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAgICBpZiAoTiA8IEkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEKICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMAog
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAg
ICAgICAgICBmdW5jdGlvbiBGKEopIHsKICAgICAgICAgICAgICAgIHZhciBLID0gYS5oYXNDbGFz
cyhKLCBRLkNTU19PVkVSTEFZKSwKICAgICAgICAgICAgICAgICAgICBJID0gWUFIT08ud2lkZ2V0
LlBhbmVsOwogICAgICAgICAgICAgICAgaWYgKEsgJiYgIWEuaXNBbmNlc3RvcihFLCBKKSkgewog
ICAgICAgICAgICAgICAgICAgIGlmIChJICYmIGEuaGFzQ2xhc3MoSiwgSS5DU1NfUEFORUwpKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIERbRC5sZW5ndGhdID0gSi5wYXJlbnROb2RlCiAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgRFtELmxlbmd0
aF0gPSBKCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICB9CiAgICAgICAgICAgIGEuZ2V0RWxlbWVudHNCeShGLCAiRElWIiwgZG9jdW1lbnQuYm9keSk7
CiAgICAgICAgICAgIEQuc29ydChBKTsKICAgICAgICAgICAgdmFyIEggPSBEWzBdLAogICAgICAg
ICAgICAgICAgQjsKICAgICAgICAgICAgaWYgKEgpIHsKICAgICAgICAgICAgICAgIEIgPSBhLmdl
dFN0eWxlKEgsICJ6SW5kZXgiKTsKICAgICAgICAgICAgICAgIGlmICghaXNOYU4oQikpIHsKICAg
ICAgICAgICAgICAgICAgICB2YXIgQyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGlmIChI
ICE9IEUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgQyA9IHRydWUKICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoRC5sZW5ndGggPiAxKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgRyA9IGEuZ2V0U3R5bGUoRFsxXSwgInpJ
bmRleCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc05hTihHKSAmJiAoQiA9
PSBHKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMgPSB0cnVlCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKEMpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5jZmcuc2V0UHJvcGVydHkoInppbmRleCIsIChwYXJzZUludChCLCAxMCkg
KyAyKSkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
IH0KICAgICAgICB9LAogICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAg
aWYgKHRoaXMuaWZyYW1lKSB7CiAgICAgICAgICAgICAgICB0aGlzLmlmcmFtZS5wYXJlbnROb2Rl
LnJlbW92ZUNoaWxkKHRoaXMuaWZyYW1lKQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMu
aWZyYW1lID0gbnVsbDsKICAgICAgICAgICAgUS53aW5kb3dSZXNpemVFdmVudC51bnN1YnNjcmli
ZSh0aGlzLmRvQ2VudGVyT25ET01FdmVudCwgdGhpcyk7CiAgICAgICAgICAgIFEud2luZG93U2Ny
b2xsRXZlbnQudW5zdWJzY3JpYmUodGhpcy5kb0NlbnRlck9uRE9NRXZlbnQsIHRoaXMpOwogICAg
ICAgICAgICBaLnRleHRSZXNpemVFdmVudC51bnN1YnNjcmliZSh0aGlzLl9hdXRvRmlsbE9uSGVp
Z2h0Q2hhbmdlKTsKICAgICAgICAgICAgaWYgKHRoaXMuX2NvbnRleHRUcmlnZ2VycykgewogICAg
ICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc1RyaWdnZXJzKHRoaXMuX2NvbnRleHRUcmlnZ2Vycywg
YiwgdGhpcy5fYWxpZ25PblRyaWdnZXIpCiAgICAgICAgICAgIH0KICAgICAgICAgICAgUS5zdXBl
cmNsYXNzLmRlc3Ryb3kuY2FsbCh0aGlzKQogICAgICAgIH0sCiAgICAgICAgZm9yY2VDb250YWlu
ZXJSZWRyYXc6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIEEgPSB0aGlzOwogICAgICAg
ICAgICBhLmFkZENsYXNzKEEuZWxlbWVudCwgInl1aS1mb3JjZS1yZWRyYXciKTsKICAgICAgICAg
ICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBhLnJlbW92ZUNsYXNz
KEEuZWxlbWVudCwgInl1aS1mb3JjZS1yZWRyYXciKQogICAgICAgICAgICB9LAogICAgICAgICAg
ICAwKQogICAgICAgIH0sCiAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHsKICAgICAgICAg
ICAgcmV0dXJuICJPdmVybGF5ICIgKyB0aGlzLmlkCiAgICAgICAgfQogICAgfSkKfSAoKSk7Cihm
dW5jdGlvbiAoKSB7CiAgICBZQUhPTy53aWRnZXQuT3ZlcmxheU1hbmFnZXIgPSBmdW5jdGlvbiAo
QSkgewogICAgICAgIHRoaXMuaW5pdChBKQogICAgfTsKICAgIHZhciBKID0gWUFIT08ud2lkZ2V0
Lk92ZXJsYXksCiAgICAgICAgSyA9IFlBSE9PLnV0aWwuRXZlbnQsCiAgICAgICAgSSA9IFlBSE9P
LnV0aWwuRG9tLAogICAgICAgIEwgPSBZQUhPTy51dGlsLkNvbmZpZywKICAgICAgICBIID0gWUFI
T08udXRpbC5DdXN0b21FdmVudCwKICAgICAgICBHID0gWUFIT08ud2lkZ2V0Lk92ZXJsYXlNYW5h
Z2VyOwogICAgRy5DU1NfRk9DVVNFRCA9ICJmb2N1c2VkIjsKICAgIEcucHJvdG90eXBlID0gewog
ICAgICAgIGNvbnN0cnVjdG9yOiBHLAogICAgICAgIG92ZXJsYXlzOiBudWxsLAogICAgICAgIGlu
aXREZWZhdWx0Q29uZmlnOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHRoaXMuY2ZnLmFkZFBy
b3BlcnR5KCJvdmVybGF5cyIsIHsKICAgICAgICAgICAgICAgIHN1cHByZXNzRXZlbnQ6IHRydWUK
ICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHRoaXMuY2ZnLmFkZFByb3BlcnR5KCJmb2N1c2V2
ZW50IiwgewogICAgICAgICAgICAgICAgdmFsdWU6ICJtb3VzZWRvd24iCiAgICAgICAgICAgIH0p
CiAgICAgICAgfSwKICAgICAgICBpbml0OiBmdW5jdGlvbiAoQSkgewogICAgICAgICAgICB0aGlz
LmNmZyA9IG5ldyBMKHRoaXMpOwogICAgICAgICAgICB0aGlzLmluaXREZWZhdWx0Q29uZmlnKCk7
CiAgICAgICAgICAgIGlmIChBKSB7CiAgICAgICAgICAgICAgICB0aGlzLmNmZy5hcHBseUNvbmZp
ZyhBLCB0cnVlKQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuY2ZnLmZpcmVRdWV1ZSgp
OwogICAgICAgICAgICB2YXIgQiA9IG51bGw7CiAgICAgICAgICAgIHRoaXMuZ2V0QWN0aXZlID0g
ZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIEIKICAgICAgICAgICAgfTsKICAg
ICAgICAgICAgdGhpcy5mb2N1cyA9IGZ1bmN0aW9uIChFKSB7CiAgICAgICAgICAgICAgICB2YXIg
RCA9IHRoaXMuZmluZChFKTsKICAgICAgICAgICAgICAgIGlmIChEKSB7CiAgICAgICAgICAgICAg
ICAgICAgRC5mb2N1cygpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CiAgICAgICAg
ICAgIHRoaXMucmVtb3ZlID0gZnVuY3Rpb24gKEUpIHsKICAgICAgICAgICAgICAgIHZhciBOID0g
dGhpcy5maW5kKEUpLAogICAgICAgICAgICAgICAgICAgIEY7CiAgICAgICAgICAgICAgICBpZiAo
TikgewogICAgICAgICAgICAgICAgICAgIGlmIChCID09IE4pIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgQiA9IG51bGwKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
dmFyIEQgPSAoTi5lbGVtZW50ID09PSBudWxsICYmIE4uY2ZnID09PSBudWxsKSA/IHRydWUgOiBm
YWxzZTsKICAgICAgICAgICAgICAgICAgICBpZiAoIUQpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgRiA9IEkuZ2V0U3R5bGUoTi5lbGVtZW50LCAiekluZGV4Iik7CiAgICAgICAgICAgICAgICAg
ICAgICAgIE4uY2ZnLnNldFByb3BlcnR5KCJ6SW5kZXgiLCAtMTAwMCwgdHJ1ZSkKICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdGhpcy5vdmVybGF5cy5zb3J0KHRoaXMu
Y29tcGFyZVpJbmRleERlc2MpOwogICAgICAgICAgICAgICAgICAgIHRoaXMub3ZlcmxheXMgPSB0
aGlzLm92ZXJsYXlzLnNsaWNlKDAsICh0aGlzLm92ZXJsYXlzLmxlbmd0aCAtIDEpKTsKICAgICAg
ICAgICAgICAgICAgICBOLmhpZGVFdmVudC51bnN1YnNjcmliZShOLmJsdXIpOwogICAgICAgICAg
ICAgICAgICAgIE4uZGVzdHJveUV2ZW50LnVuc3Vic2NyaWJlKHRoaXMuX29uT3ZlcmxheURlc3Ry
b3ksIE4pOwogICAgICAgICAgICAgICAgICAgIE4uZm9jdXNFdmVudC51bnN1YnNjcmliZSh0aGlz
Ll9vbk92ZXJsYXlGb2N1c0hhbmRsZXIsIE4pOwogICAgICAgICAgICAgICAgICAgIE4uYmx1ckV2
ZW50LnVuc3Vic2NyaWJlKHRoaXMuX29uT3ZlcmxheUJsdXJIYW5kbGVyLCBOKTsKICAgICAgICAg
ICAgICAgICAgICBpZiAoIUQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgSy5yZW1vdmVMaXN0
ZW5lcihOLmVsZW1lbnQsIHRoaXMuY2ZnLmdldFByb3BlcnR5KCJmb2N1c2V2ZW50IiksIHRoaXMu
X29uT3ZlcmxheUVsZW1lbnRGb2N1cyk7CiAgICAgICAgICAgICAgICAgICAgICAgIE4uY2ZnLnNl
dFByb3BlcnR5KCJ6SW5kZXgiLCBGLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgTi5j
Zmcuc2V0UHJvcGVydHkoIm1hbmFnZXIiLCBudWxsKQogICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICBpZiAoTi5mb2N1c0V2ZW50Ll9tYW5hZ2VkKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIE4uZm9jdXNFdmVudCA9IG51bGwKICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgaWYgKE4uYmx1ckV2ZW50Ll9tYW5hZ2VkKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIE4uYmx1ckV2ZW50ID0gbnVsbAogICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICBpZiAoTi5mb2N1cy5fbWFuYWdlZCkgewogICAgICAgICAgICAgICAg
ICAgICAgICBOLmZvY3VzID0gbnVsbAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICBpZiAoTi5ibHVyLl9tYW5hZ2VkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIE4u
Ymx1ciA9IG51bGwKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgIH07CiAgICAgICAgICAgIHRoaXMuYmx1ckFsbCA9IGZ1bmN0aW9uICgpIHsKICAgICAg
ICAgICAgICAgIHZhciBEID0gdGhpcy5vdmVybGF5cy5sZW5ndGgsCiAgICAgICAgICAgICAgICAg
ICAgRTsKICAgICAgICAgICAgICAgIGlmIChEID4gMCkgewogICAgICAgICAgICAgICAgICAgIEUg
PSBEIC0gMTsKICAgICAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMub3ZlcmxheXNbRV0uYmx1cigpCiAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoRS0t
KQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwogICAgICAgICAgICB0aGlzLl9tYW5h
Z2VCbHVyID0gZnVuY3Rpb24gKEUpIHsKICAgICAgICAgICAgICAgIHZhciBEID0gZmFsc2U7CiAg
ICAgICAgICAgICAgICBpZiAoQiA9PSBFKSB7CiAgICAgICAgICAgICAgICAgICAgSS5yZW1vdmVD
bGFzcyhCLmVsZW1lbnQsIEcuQ1NTX0ZPQ1VTRUQpOwogICAgICAgICAgICAgICAgICAgIEIgPSBu
dWxsOwogICAgICAgICAgICAgICAgICAgIEQgPSB0cnVlCiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICByZXR1cm4gRAogICAgICAgICAgICB9OwogICAgICAgICAgICB0aGlzLl9tYW5h
Z2VGb2N1cyA9IGZ1bmN0aW9uIChFKSB7CiAgICAgICAgICAgICAgICB2YXIgRCA9IGZhbHNlOwog
ICAgICAgICAgICAgICAgaWYgKEIgIT0gRSkgewogICAgICAgICAgICAgICAgICAgIGlmIChCKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIEIuYmx1cigpCiAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgIEIgPSBFOwogICAgICAgICAgICAgICAgICAgIHRoaXMuYnJpbmdU
b1RvcChCKTsKICAgICAgICAgICAgICAgICAgICBJLmFkZENsYXNzKEIuZWxlbWVudCwgRy5DU1Nf
Rk9DVVNFRCk7CiAgICAgICAgICAgICAgICAgICAgRCA9IHRydWUKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIHJldHVybiBECiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHZhciBD
ID0gdGhpcy5jZmcuZ2V0UHJvcGVydHkoIm92ZXJsYXlzIik7CiAgICAgICAgICAgIGlmICghdGhp
cy5vdmVybGF5cykgewogICAgICAgICAgICAgICAgdGhpcy5vdmVybGF5cyA9IFtdCiAgICAgICAg
ICAgIH0KICAgICAgICAgICAgaWYgKEMpIHsKICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXIo
Qyk7CiAgICAgICAgICAgICAgICB0aGlzLm92ZXJsYXlzLnNvcnQodGhpcy5jb21wYXJlWkluZGV4
RGVzYykKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgX29uT3ZlcmxheUVsZW1lbnRG
b2N1czogZnVuY3Rpb24gKEEpIHsKICAgICAgICAgICAgdmFyIEMgPSBLLmdldFRhcmdldChBKSwK
ICAgICAgICAgICAgICAgIEIgPSB0aGlzLmNsb3NlOwogICAgICAgICAgICBpZiAoQiAmJiAoQyA9
PSBCIHx8IEkuaXNBbmNlc3RvcihCLCBDKSkpIHsKICAgICAgICAgICAgICAgIHRoaXMuYmx1cigp
CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzKCkKICAgICAg
ICAgICAgfQogICAgICAgIH0sCiAgICAgICAgX29uT3ZlcmxheURlc3Ryb3k6IGZ1bmN0aW9uIChC
LCBDLCBBKSB7CiAgICAgICAgICAgIHRoaXMucmVtb3ZlKEEpCiAgICAgICAgfSwKICAgICAgICBf
b25PdmVybGF5Rm9jdXNIYW5kbGVyOiBmdW5jdGlvbiAoQiwgQywgQSkgewogICAgICAgICAgICB0
aGlzLl9tYW5hZ2VGb2N1cyhBKQogICAgICAgIH0sCiAgICAgICAgX29uT3ZlcmxheUJsdXJIYW5k
bGVyOiBmdW5jdGlvbiAoQiwgQywgQSkgewogICAgICAgICAgICB0aGlzLl9tYW5hZ2VCbHVyKEEp
CiAgICAgICAgfSwKICAgICAgICBfYmluZEZvY3VzOiBmdW5jdGlvbiAoQikgewogICAgICAgICAg
ICB2YXIgQSA9IHRoaXM7CiAgICAgICAgICAgIGlmICghQi5mb2N1c0V2ZW50KSB7CiAgICAgICAg
ICAgICAgICBCLmZvY3VzRXZlbnQgPSBCLmNyZWF0ZUV2ZW50KCJmb2N1cyIpOwogICAgICAgICAg
ICAgICAgQi5mb2N1c0V2ZW50LnNpZ25hdHVyZSA9IEguTElTVDsKICAgICAgICAgICAgICAgIEIu
Zm9jdXNFdmVudC5fbWFuYWdlZCA9IHRydWUKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgIEIuZm9jdXNFdmVudC5zdWJzY3JpYmUoQS5fb25PdmVybGF5Rm9jdXNIYW5kbGVyLCBC
LCBBKQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghQi5mb2N1cykgewogICAgICAgICAg
ICAgICAgSy5vbihCLmVsZW1lbnQsIEEuY2ZnLmdldFByb3BlcnR5KCJmb2N1c2V2ZW50IiksIEEu
X29uT3ZlcmxheUVsZW1lbnRGb2N1cywgbnVsbCwgQik7CiAgICAgICAgICAgICAgICBCLmZvY3Vz
ID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgIGlmIChBLl9tYW5hZ2VGb2N1cyh0
aGlzKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jZmcuZ2V0UHJvcGVydHko
InZpc2libGUiKSAmJiB0aGlzLmZvY3VzRmlyc3QpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMuZm9jdXNGaXJzdCgpCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy5mb2N1c0V2ZW50LmZpcmUoKQogICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICBCLmZvY3VzLl9tYW5hZ2VkID0g
dHJ1ZQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBfYmluZEJsdXI6IGZ1bmN0aW9u
IChCKSB7CiAgICAgICAgICAgIHZhciBBID0gdGhpczsKICAgICAgICAgICAgaWYgKCFCLmJsdXJF
dmVudCkgewogICAgICAgICAgICAgICAgQi5ibHVyRXZlbnQgPSBCLmNyZWF0ZUV2ZW50KCJibHVy
Iik7CiAgICAgICAgICAgICAgICBCLmJsdXJFdmVudC5zaWduYXR1cmUgPSBILkxJU1Q7CiAgICAg
ICAgICAgICAgICBCLmZvY3VzRXZlbnQuX21hbmFnZWQgPSB0cnVlCiAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICBCLmJsdXJFdmVudC5zdWJzY3JpYmUoQS5fb25PdmVybGF5Qmx1
ckhhbmRsZXIsIEIsIEEpCiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCFCLmJsdXIpIHsK
ICAgICAgICAgICAgICAgIEIuYmx1ciA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAg
ICBpZiAoQS5fbWFuYWdlQmx1cih0aGlzKSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlz
LmJsdXJFdmVudC5maXJlKCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9
OwogICAgICAgICAgICAgICAgQi5ibHVyLl9tYW5hZ2VkID0gdHJ1ZQogICAgICAgICAgICB9CiAg
ICAgICAgICAgIEIuaGlkZUV2ZW50LnN1YnNjcmliZShCLmJsdXIpCiAgICAgICAgfSwKICAgICAg
ICBfYmluZERlc3Ryb3k6IGZ1bmN0aW9uIChCKSB7CiAgICAgICAgICAgIHZhciBBID0gdGhpczsK
ICAgICAgICAgICAgQi5kZXN0cm95RXZlbnQuc3Vic2NyaWJlKEEuX29uT3ZlcmxheURlc3Ryb3ks
IEIsIEEpCiAgICAgICAgfSwKICAgICAgICBfc3luY1pJbmRleDogZnVuY3Rpb24gKEIpIHsKICAg
ICAgICAgICAgdmFyIEEgPSBJLmdldFN0eWxlKEIuZWxlbWVudCwgInpJbmRleCIpOwogICAgICAg
ICAgICBpZiAoIWlzTmFOKEEpKSB7CiAgICAgICAgICAgICAgICBCLmNmZy5zZXRQcm9wZXJ0eSgi
ekluZGV4IiwgcGFyc2VJbnQoQSwgMTApKQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgQi5jZmcuc2V0UHJvcGVydHkoInpJbmRleCIsIDApCiAgICAgICAgICAgIH0KICAgICAg
ICB9LAogICAgICAgIHJlZ2lzdGVyOiBmdW5jdGlvbiAoRCkgewogICAgICAgICAgICB2YXIgQSA9
IGZhbHNlLAogICAgICAgICAgICAgICAgQywgQjsKICAgICAgICAgICAgaWYgKEQgaW5zdGFuY2Vv
ZiBKKSB7CiAgICAgICAgICAgICAgICBELmNmZy5hZGRQcm9wZXJ0eSgibWFuYWdlciIsIHsKICAg
ICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAg
ICAgICAgICB0aGlzLl9iaW5kRm9jdXMoRCk7CiAgICAgICAgICAgICAgICB0aGlzLl9iaW5kQmx1
cihEKTsKICAgICAgICAgICAgICAgIHRoaXMuX2JpbmREZXN0cm95KEQpOwogICAgICAgICAgICAg
ICAgdGhpcy5fc3luY1pJbmRleChEKTsKICAgICAgICAgICAgICAgIHRoaXMub3ZlcmxheXMucHVz
aChEKTsKICAgICAgICAgICAgICAgIHRoaXMuYnJpbmdUb1RvcChEKTsKICAgICAgICAgICAgICAg
IEEgPSB0cnVlCiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoRCBpbnN0
YW5jZW9mIEFycmF5KSB7CiAgICAgICAgICAgICAgICAgICAgZm9yIChDID0gMCwgQiA9IEQubGVu
Z3RoOwogICAgICAgICAgICAgICAgICAgIEMgPCBCOwogICAgICAgICAgICAgICAgICAgIEMrKykg
ewogICAgICAgICAgICAgICAgICAgICAgICBBID0gdGhpcy5yZWdpc3RlcihEW0NdKSB8fCBBCiAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAg
ICAgICAgIHJldHVybiBBCiAgICAgICAgfSwKICAgICAgICBicmluZ1RvVG9wOiBmdW5jdGlvbiAo
TikgewogICAgICAgICAgICB2YXIgRCA9IHRoaXMuZmluZChOKSwKICAgICAgICAgICAgICAgIEEs
IEYsIEM7CiAgICAgICAgICAgIGlmIChEKSB7CiAgICAgICAgICAgICAgICBDID0gdGhpcy5vdmVy
bGF5czsKICAgICAgICAgICAgICAgIEMuc29ydCh0aGlzLmNvbXBhcmVaSW5kZXhEZXNjKTsKICAg
ICAgICAgICAgICAgIEYgPSBDWzBdOwogICAgICAgICAgICAgICAgaWYgKEYpIHsKICAgICAgICAg
ICAgICAgICAgICBBID0gSS5nZXRTdHlsZShGLmVsZW1lbnQsICJ6SW5kZXgiKTsKICAgICAgICAg
ICAgICAgICAgICBpZiAoIWlzTmFOKEEpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBC
ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChGICE9PSBEKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBCID0gdHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEMubGVuZ3RoID4gMSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBFID0gSS5nZXRTdHlsZShDWzFdLmVsZW1l
bnQsICJ6SW5kZXgiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzTmFO
KEUpICYmIChBID09IEUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIg
PSB0cnVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChCKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBELmNmZy5zZXRQcm9w
ZXJ0eSgiemluZGV4IiwgKHBhcnNlSW50KEEsIDEwKSArIDIpKQogICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIEMuc29ydCh0
aGlzLmNvbXBhcmVaSW5kZXhEZXNjKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAg
ICAgICAgfSwKICAgICAgICBmaW5kOiBmdW5jdGlvbiAoRikgewogICAgICAgICAgICB2YXIgQiA9
IEYgaW5zdGFuY2VvZiBKLAogICAgICAgICAgICAgICAgRCA9IHRoaXMub3ZlcmxheXMsCiAgICAg
ICAgICAgICAgICBOID0gRC5sZW5ndGgsCiAgICAgICAgICAgICAgICBDID0gbnVsbCwKICAgICAg
ICAgICAgICAgIEEsIEU7CiAgICAgICAgICAgIGlmIChCIHx8IHR5cGVvZiBGID09ICJzdHJpbmci
KSB7CiAgICAgICAgICAgICAgICBmb3IgKEUgPSBOIC0gMTsKICAgICAgICAgICAgICAgIEUgPj0g
MDsKICAgICAgICAgICAgICAgIEUtLSkgewogICAgICAgICAgICAgICAgICAgIEEgPSBEW0VdOwog
ICAgICAgICAgICAgICAgICAgIGlmICgoQiAmJiAoQSA9PT0gRikpIHx8IChBLmlkID09IEYpKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIEMgPSBBOwogICAgICAgICAgICAgICAgICAgICAgICBi
cmVhawogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
fQogICAgICAgICAgICByZXR1cm4gQwogICAgICAgIH0sCiAgICAgICAgY29tcGFyZVpJbmRleERl
c2M6IGZ1bmN0aW9uIChBLCBCKSB7CiAgICAgICAgICAgIHZhciBDID0gKEEuY2ZnKSA/IEEuY2Zn
LmdldFByb3BlcnR5KCJ6SW5kZXgiKSA6IG51bGwsCiAgICAgICAgICAgIEQgPSAoQi5jZmcpID8g
Qi5jZmcuZ2V0UHJvcGVydHkoInpJbmRleCIpIDogbnVsbDsKICAgICAgICAgICAgaWYgKEMgPT09
IG51bGwgJiYgRCA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgcmV0dXJuIDAKICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlmIChDID09PSBudWxsKSB7CiAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIDEKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgICAgaWYgKEQgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0x
CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KEMgPiBEKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTEKICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChD
IDwgRCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHNob3dBbGw6IGZ1bmN0aW9uICgpIHsKICAgICAg
ICAgICAgdmFyIEIgPSB0aGlzLm92ZXJsYXlzLAogICAgICAgICAgICAgICAgQSA9IEIubGVuZ3Ro
LAogICAgICAgICAgICAgICAgQzsKICAgICAgICAgICAgZm9yIChDID0gQSAtIDE7CiAgICAgICAg
ICAgIEMgPj0gMDsKICAgICAgICAgICAgQy0tKSB7CiAgICAgICAgICAgICAgICBCW0NdLnNob3co
KQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBoaWRlQWxsOiBmdW5jdGlvbiAoKSB7
CiAgICAgICAgICAgIHZhciBCID0gdGhpcy5vdmVybGF5cywKICAgICAgICAgICAgICAgIEEgPSBC
Lmxlbmd0aCwKICAgICAgICAgICAgICAgIEM7CiAgICAgICAgICAgIGZvciAoQyA9IEEgLSAxOwog
ICAgICAgICAgICBDID49IDA7CiAgICAgICAgICAgIEMtLSkgewogICAgICAgICAgICAgICAgQltD
XS5oaWRlKCkKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgdG9TdHJpbmc6IGZ1bmN0
aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuICJPdmVybGF5TWFuYWdlciIKICAgICAgICB9CiAg
ICB9Cn0gKCkpOwooZnVuY3Rpb24gKCkgewogICAgWUFIT08ud2lkZ2V0LlRvb2x0aXAgPSBmdW5j
dGlvbiAoQSwgQikgewogICAgICAgIFlBSE9PLndpZGdldC5Ub29sdGlwLnN1cGVyY2xhc3MuY29u
c3RydWN0b3IuY2FsbCh0aGlzLCBBLCBCKQogICAgfTsKICAgIHZhciBiID0gWUFIT08ubGFuZywK
ICAgICAgICBTID0gWUFIT08udXRpbC5FdmVudCwKICAgICAgICBUID0gWUFIT08udXRpbC5DdXN0
b21FdmVudCwKICAgICAgICBQID0gWUFIT08udXRpbC5Eb20sCiAgICAgICAgVyA9IFlBSE9PLndp
ZGdldC5Ub29sdGlwLAogICAgICAgIFkgPSBZQUhPTy5lbnYudWEsCiAgICAgICAgWiA9IChZLmll
ICYmIChZLmllIDw9IDYgfHwgZG9jdW1lbnQuY29tcGF0TW9kZSA9PSAiQmFja0NvbXBhdCIpKSwK
ICAgICAgICBhLCBYID0gewogICAgICAgIFBSRVZFTlRfT1ZFUkxBUDogewogICAgICAgICAgICBr
ZXk6ICJwcmV2ZW50b3ZlcmxhcCIsCiAgICAgICAgICAgIHZhbHVlOiB0cnVlLAogICAgICAgICAg
ICB2YWxpZGF0b3I6IGIuaXNCb29sZWFuLAogICAgICAgICAgICBzdXBlcmNlZGVzOiBbIngiLCAi
eSIsICJ4eSJdCiAgICAgICAgfSwKICAgICAgICBTSE9XX0RFTEFZOiB7CiAgICAgICAgICAgIGtl
eTogInNob3dkZWxheSIsCiAgICAgICAgICAgIHZhbHVlOiAyMDAsCiAgICAgICAgICAgIHZhbGlk
YXRvcjogYi5pc051bWJlcgogICAgICAgIH0sCiAgICAgICAgQVVUT19ESVNNSVNTX0RFTEFZOiB7
CiAgICAgICAgICAgIGtleTogImF1dG9kaXNtaXNzZGVsYXkiLAogICAgICAgICAgICB2YWx1ZTog
NTAwMCwKICAgICAgICAgICAgdmFsaWRhdG9yOiBiLmlzTnVtYmVyCiAgICAgICAgfSwKICAgICAg
ICBISURFX0RFTEFZOiB7CiAgICAgICAgICAgIGtleTogImhpZGVkZWxheSIsCiAgICAgICAgICAg
IHZhbHVlOiAyNTAsCiAgICAgICAgICAgIHZhbGlkYXRvcjogYi5pc051bWJlcgogICAgICAgIH0s
CiAgICAgICAgVEVYVDogewogICAgICAgICAgICBrZXk6ICJ0ZXh0IiwKICAgICAgICAgICAgc3Vw
cHJlc3NFdmVudDogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgQ09OVEFJTkVSOiB7CiAgICAgICAg
ICAgIGtleTogImNvbnRhaW5lciIKICAgICAgICB9LAogICAgICAgIERJU0FCTEVEOiB7CiAgICAg
ICAgICAgIGtleTogImRpc2FibGVkIiwKICAgICAgICAgICAgdmFsdWU6IGZhbHNlLAogICAgICAg
ICAgICBzdXBwcmVzc0V2ZW50OiB0cnVlCiAgICAgICAgfSwKICAgICAgICBYWV9PRkZTRVQ6IHsK
ICAgICAgICAgICAga2V5OiAieHlvZmZzZXQiLAogICAgICAgICAgICB2YWx1ZTogWzAsIDI1XSwK
ICAgICAgICAgICAgc3VwcHJlc3NFdmVudDogdHJ1ZQogICAgICAgIH0KICAgIH0sCiAgICAgICAg
UiA9IHsKICAgICAgICBDT05URVhUX01PVVNFX09WRVI6ICJjb250ZXh0TW91c2VPdmVyIiwKICAg
ICAgICBDT05URVhUX01PVVNFX09VVDogImNvbnRleHRNb3VzZU91dCIsCiAgICAgICAgQ09OVEVY
VF9UUklHR0VSOiAiY29udGV4dFRyaWdnZXIiCiAgICB9OwogICAgVy5DU1NfVE9PTFRJUCA9ICJ5
dWktdHQiOwoKICAgIGZ1bmN0aW9uIFYoQiwgRCkgewogICAgICAgIHZhciBDID0gdGhpcy5jZmcs
CiAgICAgICAgICAgIEEgPSBDLmdldFByb3BlcnR5KCJ3aWR0aCIpOwogICAgICAgIGlmIChBID09
IEQpIHsKICAgICAgICAgICAgQy5zZXRQcm9wZXJ0eSgid2lkdGgiLCBCKQogICAgICAgIH0KICAg
IH0KICAgIGZ1bmN0aW9uIE8oRiwgRykgewogICAgICAgIGlmICgiX29yaWdpbmFsV2lkdGgiIGlu
IHRoaXMpIHsKICAgICAgICAgICAgVi5jYWxsKHRoaXMsIHRoaXMuX29yaWdpbmFsV2lkdGgsIHRo
aXMuX2ZvcmNlZFdpZHRoKQogICAgICAgIH0KICAgICAgICB2YXIgRSA9IGRvY3VtZW50LmJvZHks
CiAgICAgICAgICAgIEEgPSB0aGlzLmNmZywKICAgICAgICAgICAgQiA9IEEuZ2V0UHJvcGVydHko
IndpZHRoIiksCiAgICAgICAgICAgIEQsIEM7CiAgICAgICAgaWYgKCghQiB8fCBCID09ICJhdXRv
IikgJiYgKEEuZ2V0UHJvcGVydHkoImNvbnRhaW5lciIpICE9IEUgfHwgQS5nZXRQcm9wZXJ0eSgi
eCIpID49IFAuZ2V0Vmlld3BvcnRXaWR0aCgpIHx8IEEuZ2V0UHJvcGVydHkoInkiKSA+PSBQLmdl
dFZpZXdwb3J0SGVpZ2h0KCkpKSB7CiAgICAgICAgICAgIEMgPSB0aGlzLmVsZW1lbnQuY2xvbmVO
b2RlKHRydWUpOwogICAgICAgICAgICBDLnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKICAg
ICAgICAgICAgQy5zdHlsZS50b3AgPSAiMHB4IjsKICAgICAgICAgICAgQy5zdHlsZS5sZWZ0ID0g
IjBweCI7CiAgICAgICAgICAgIEUuYXBwZW5kQ2hpbGQoQyk7CiAgICAgICAgICAgIEQgPSAoQy5v
ZmZzZXRXaWR0aCArICJweCIpOwogICAgICAgICAgICBFLnJlbW92ZUNoaWxkKEMpOwogICAgICAg
ICAgICBDID0gbnVsbDsKICAgICAgICAgICAgQS5zZXRQcm9wZXJ0eSgid2lkdGgiLCBEKTsKICAg
ICAgICAgICAgQS5yZWZpcmVFdmVudCgieHkiKTsKICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxX
aWR0aCA9IEIgfHwgIiI7CiAgICAgICAgICAgIHRoaXMuX2ZvcmNlZFdpZHRoID0gRAogICAgICAg
IH0KICAgIH0KICAgIGZ1bmN0aW9uIFEoQiwgQywgQSkgewogICAgICAgIHRoaXMucmVuZGVyKEEp
CiAgICB9CiAgICBmdW5jdGlvbiBVKCkgewogICAgICAgIFMub25ET01SZWFkeShRLCB0aGlzLmNm
Zy5nZXRQcm9wZXJ0eSgiY29udGFpbmVyIiksIHRoaXMpCiAgICB9CiAgICBZQUhPTy5leHRlbmQo
VywgWUFIT08ud2lkZ2V0Lk92ZXJsYXksIHsKICAgICAgICBpbml0OiBmdW5jdGlvbiAoQSwgQikg
ewogICAgICAgICAgICBXLnN1cGVyY2xhc3MuaW5pdC5jYWxsKHRoaXMsIEEpOwogICAgICAgICAg
ICB0aGlzLmJlZm9yZUluaXRFdmVudC5maXJlKFcpOwogICAgICAgICAgICBQLmFkZENsYXNzKHRo
aXMuZWxlbWVudCwgVy5DU1NfVE9PTFRJUCk7CiAgICAgICAgICAgIGlmIChCKSB7CiAgICAgICAg
ICAgICAgICB0aGlzLmNmZy5hcHBseUNvbmZpZyhCLCB0cnVlKQogICAgICAgICAgICB9CiAgICAg
ICAgICAgIHRoaXMuY2ZnLnF1ZXVlUHJvcGVydHkoInZpc2libGUiLCBmYWxzZSk7CiAgICAgICAg
ICAgIHRoaXMuY2ZnLnF1ZXVlUHJvcGVydHkoImNvbnN0cmFpbnRvdmlld3BvcnQiLCB0cnVlKTsK
ICAgICAgICAgICAgdGhpcy5zZXRCb2R5KCIiKTsKICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmUo
ImNoYW5nZUNvbnRlbnQiLCBPKTsKICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmUoImluaXQiLCBV
KTsKICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmUoInJlbmRlciIsIHRoaXMub25SZW5kZXIpOwog
ICAgICAgICAgICB0aGlzLmluaXRFdmVudC5maXJlKFcpCiAgICAgICAgfSwKICAgICAgICBpbml0
RXZlbnRzOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIFcuc3VwZXJjbGFzcy5pbml0RXZlbnRz
LmNhbGwodGhpcyk7CiAgICAgICAgICAgIHZhciBBID0gVC5MSVNUOwogICAgICAgICAgICB0aGlz
LmNvbnRleHRNb3VzZU92ZXJFdmVudCA9IHRoaXMuY3JlYXRlRXZlbnQoUi5DT05URVhUX01PVVNF
X09WRVIpOwogICAgICAgICAgICB0aGlzLmNvbnRleHRNb3VzZU92ZXJFdmVudC5zaWduYXR1cmUg
PSBBOwogICAgICAgICAgICB0aGlzLmNvbnRleHRNb3VzZU91dEV2ZW50ID0gdGhpcy5jcmVhdGVF
dmVudChSLkNPTlRFWFRfTU9VU0VfT1VUKTsKICAgICAgICAgICAgdGhpcy5jb250ZXh0TW91c2VP
dXRFdmVudC5zaWduYXR1cmUgPSBBOwogICAgICAgICAgICB0aGlzLmNvbnRleHRUcmlnZ2VyRXZl
bnQgPSB0aGlzLmNyZWF0ZUV2ZW50KFIuQ09OVEVYVF9UUklHR0VSKTsKICAgICAgICAgICAgdGhp
cy5jb250ZXh0VHJpZ2dlckV2ZW50LnNpZ25hdHVyZSA9IEEKICAgICAgICB9LAogICAgICAgIGlu
aXREZWZhdWx0Q29uZmlnOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIFcuc3VwZXJjbGFzcy5p
bml0RGVmYXVsdENvbmZpZy5jYWxsKHRoaXMpOwogICAgICAgICAgICB0aGlzLmNmZy5hZGRQcm9w
ZXJ0eShYLlBSRVZFTlRfT1ZFUkxBUC5rZXksIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBYLlBS
RVZFTlRfT1ZFUkxBUC52YWx1ZSwKICAgICAgICAgICAgICAgIHZhbGlkYXRvcjogWC5QUkVWRU5U
X09WRVJMQVAudmFsaWRhdG9yLAogICAgICAgICAgICAgICAgc3VwZXJjZWRlczogWC5QUkVWRU5U
X09WRVJMQVAuc3VwZXJjZWRlcwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdGhpcy5jZmcu
YWRkUHJvcGVydHkoWC5TSE9XX0RFTEFZLmtleSwgewogICAgICAgICAgICAgICAgaGFuZGxlcjog
dGhpcy5jb25maWdTaG93RGVsYXksCiAgICAgICAgICAgICAgICB2YWx1ZTogMjAwLAogICAgICAg
ICAgICAgICAgdmFsaWRhdG9yOiBYLlNIT1dfREVMQVkudmFsaWRhdG9yCiAgICAgICAgICAgIH0p
OwogICAgICAgICAgICB0aGlzLmNmZy5hZGRQcm9wZXJ0eShYLkFVVE9fRElTTUlTU19ERUxBWS5r
ZXksIHsKICAgICAgICAgICAgICAgIGhhbmRsZXI6IHRoaXMuY29uZmlnQXV0b0Rpc21pc3NEZWxh
eSwKICAgICAgICAgICAgICAgIHZhbHVlOiBYLkFVVE9fRElTTUlTU19ERUxBWS52YWx1ZSwKICAg
ICAgICAgICAgICAgIHZhbGlkYXRvcjogWC5BVVRPX0RJU01JU1NfREVMQVkudmFsaWRhdG9yCiAg
ICAgICAgICAgIH0pOwogICAgICAgICAgICB0aGlzLmNmZy5hZGRQcm9wZXJ0eShYLkhJREVfREVM
QVkua2V5LCB7CiAgICAgICAgICAgICAgICBoYW5kbGVyOiB0aGlzLmNvbmZpZ0hpZGVEZWxheSwK
ICAgICAgICAgICAgICAgIHZhbHVlOiBYLkhJREVfREVMQVkudmFsdWUsCiAgICAgICAgICAgICAg
ICB2YWxpZGF0b3I6IFguSElERV9ERUxBWS52YWxpZGF0b3IKICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgIHRoaXMuY2ZnLmFkZFByb3BlcnR5KFguVEVYVC5rZXksIHsKICAgICAgICAgICAgICAg
IGhhbmRsZXI6IHRoaXMuY29uZmlnVGV4dCwKICAgICAgICAgICAgICAgIHN1cHByZXNzRXZlbnQ6
IFguVEVYVC5zdXBwcmVzc0V2ZW50CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB0aGlzLmNm
Zy5hZGRQcm9wZXJ0eShYLkNPTlRBSU5FUi5rZXksIHsKICAgICAgICAgICAgICAgIGhhbmRsZXI6
IHRoaXMuY29uZmlnQ29udGFpbmVyLAogICAgICAgICAgICAgICAgdmFsdWU6IGRvY3VtZW50LmJv
ZHkKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHRoaXMuY2ZnLmFkZFByb3BlcnR5KFguRElT
QUJMRUQua2V5LCB7CiAgICAgICAgICAgICAgICBoYW5kbGVyOiB0aGlzLmNvbmZpZ0NvbnRhaW5l
ciwKICAgICAgICAgICAgICAgIHZhbHVlOiBYLkRJU0FCTEVELnZhbHVlLAogICAgICAgICAgICAg
ICAgc3VwcmVzc0V2ZW50OiBYLkRJU0FCTEVELnN1cHByZXNzRXZlbnQKICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgIHRoaXMuY2ZnLmFkZFByb3BlcnR5KFguWFlfT0ZGU0VULmtleSwgewogICAg
ICAgICAgICAgICAgdmFsdWU6IFguWFlfT0ZGU0VULnZhbHVlLmNvbmNhdCgpLAogICAgICAgICAg
ICAgICAgc3VwcmVzc0V2ZW50OiBYLlhZX09GRlNFVC5zdXBwcmVzc0V2ZW50CiAgICAgICAgICAg
IH0pCiAgICAgICAgfSwKICAgICAgICBjb25maWdUZXh0OiBmdW5jdGlvbiAoQywgRCwgQikgewog
ICAgICAgICAgICB2YXIgQSA9IERbMF07CiAgICAgICAgICAgIGlmIChBKSB7CiAgICAgICAgICAg
ICAgICB0aGlzLnNldEJvZHkoQSkKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgY29u
ZmlnQ29udGFpbmVyOiBmdW5jdGlvbiAoQiwgQywgQSkgewogICAgICAgICAgICB2YXIgRCA9IENb
MF07CiAgICAgICAgICAgIGlmICh0eXBlb2YgRCA9PSAic3RyaW5nIikgewogICAgICAgICAgICAg
ICAgdGhpcy5jZmcuc2V0UHJvcGVydHkoImNvbnRhaW5lciIsIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKEQpLCB0cnVlKQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBfcmVtb3ZlRXZl
bnRMaXN0ZW5lcnM6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIEEgPSB0aGlzLl9jb250
ZXh0LAogICAgICAgICAgICAgICAgRCwgQiwgQzsKICAgICAgICAgICAgaWYgKEEpIHsKICAgICAg
ICAgICAgICAgIEQgPSBBLmxlbmd0aDsKICAgICAgICAgICAgICAgIGlmIChEID4gMCkgewogICAg
ICAgICAgICAgICAgICAgIEMgPSBEIC0gMTsKICAgICAgICAgICAgICAgICAgICBkbyB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIEIgPSBBW0NdOwogICAgICAgICAgICAgICAgICAgICAgICBTLnJl
bW92ZUxpc3RlbmVyKEIsICJtb3VzZW92ZXIiLCB0aGlzLm9uQ29udGV4dE1vdXNlT3Zlcik7CiAg
ICAgICAgICAgICAgICAgICAgICAgIFMucmVtb3ZlTGlzdGVuZXIoQiwgIm1vdXNlbW92ZSIsIHRo
aXMub25Db250ZXh0TW91c2VNb3ZlKTsKICAgICAgICAgICAgICAgICAgICAgICAgUy5yZW1vdmVM
aXN0ZW5lcihCLCAibW91c2VvdXQiLCB0aGlzLm9uQ29udGV4dE1vdXNlT3V0KQogICAgICAgICAg
ICAgICAgICAgIH0gd2hpbGUgKEMtLSkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQog
ICAgICAgIH0sCiAgICAgICAgY29uZmlnQ29udGV4dDogZnVuY3Rpb24gKEMsIEcsIEIpIHsKICAg
ICAgICAgICAgdmFyIEQgPSBHWzBdLAogICAgICAgICAgICAgICAgQSwgSCwgRSwgRjsKICAgICAg
ICAgICAgaWYgKEQpIHsKICAgICAgICAgICAgICAgIGlmICghIChEIGluc3RhbmNlb2YgQXJyYXkp
KSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBEID09ICJzdHJpbmciKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMuY2ZnLnNldFByb3BlcnR5KCJjb250ZXh0IiwgW2RvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKEQpXSwgdHJ1ZSkKICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNmZy5zZXRQcm9wZXJ0eSgiY29udGV4dCIs
IFtEXSwgdHJ1ZSkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgRCA9
IHRoaXMuY2ZnLmdldFByb3BlcnR5KCJjb250ZXh0IikKICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgIHRoaXMuX3JlbW92ZUV2ZW50TGlzdGVuZXJzKCk7CiAgICAgICAgICAgICAgICB0
aGlzLl9jb250ZXh0ID0gRDsKICAgICAgICAgICAgICAgIEEgPSB0aGlzLl9jb250ZXh0OwogICAg
ICAgICAgICAgICAgaWYgKEEpIHsKICAgICAgICAgICAgICAgICAgICBIID0gQS5sZW5ndGg7CiAg
ICAgICAgICAgICAgICAgICAgaWYgKEggPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEYg
PSBIIC0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRSA9IEFbRl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTLm9uKEUsICJt
b3VzZW92ZXIiLCB0aGlzLm9uQ29udGV4dE1vdXNlT3ZlciwgdGhpcyk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTLm9uKEUsICJtb3VzZW1vdmUiLCB0aGlzLm9uQ29udGV4dE1vdXNlTW92
ZSwgdGhpcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTLm9uKEUsICJtb3VzZW91dCIs
IHRoaXMub25Db250ZXh0TW91c2VPdXQsIHRoaXMpCiAgICAgICAgICAgICAgICAgICAgICAgIH0g
d2hpbGUgKEYtLSkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgIH0KICAgICAgICB9LAogICAgICAgIG9uQ29udGV4dE1vdXNlTW92ZTogZnVuY3Rpb24g
KEEsIEIpIHsKICAgICAgICAgICAgQi5wYWdlWCA9IFMuZ2V0UGFnZVgoQSk7CiAgICAgICAgICAg
IEIucGFnZVkgPSBTLmdldFBhZ2VZKEEpCiAgICAgICAgfSwKICAgICAgICBvbkNvbnRleHRNb3Vz
ZU92ZXI6IGZ1bmN0aW9uIChBLCBCKSB7CiAgICAgICAgICAgIHZhciBDID0gdGhpczsKICAgICAg
ICAgICAgaWYgKEMudGl0bGUpIHsKICAgICAgICAgICAgICAgIEIuX3RlbXBUaXRsZSA9IEMudGl0
bGU7CiAgICAgICAgICAgICAgICBDLnRpdGxlID0gIiIKICAgICAgICAgICAgfQogICAgICAgICAg
ICBpZiAoQi5maXJlRXZlbnQoImNvbnRleHRNb3VzZU92ZXIiLCBDLCBBKSAhPT0gZmFsc2UgJiYg
IUIuY2ZnLmdldFByb3BlcnR5KCJkaXNhYmxlZCIpKSB7CiAgICAgICAgICAgICAgICBpZiAoQi5o
aWRlUHJvY0lkKSB7CiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KEIuaGlkZVByb2NJ
ZCk7CiAgICAgICAgICAgICAgICAgICAgQi5oaWRlUHJvY0lkID0gbnVsbAogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgUy5vbihDLCAibW91c2Vtb3ZlIiwgQi5vbkNvbnRleHRNb3Vz
ZU1vdmUsIEIpOwogICAgICAgICAgICAgICAgQi5zaG93UHJvY0lkID0gQi5kb1Nob3coQSwgQykK
ICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgb25Db250ZXh0TW91c2VPdXQ6IGZ1bmN0
aW9uIChBLCBCKSB7CiAgICAgICAgICAgIHZhciBDID0gdGhpczsKICAgICAgICAgICAgaWYgKEIu
X3RlbXBUaXRsZSkgewogICAgICAgICAgICAgICAgQy50aXRsZSA9IEIuX3RlbXBUaXRsZTsKICAg
ICAgICAgICAgICAgIEIuX3RlbXBUaXRsZSA9IG51bGwKICAgICAgICAgICAgfQogICAgICAgICAg
ICBpZiAoQi5zaG93UHJvY0lkKSB7CiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoQi5zaG93
UHJvY0lkKTsKICAgICAgICAgICAgICAgIEIuc2hvd1Byb2NJZCA9IG51bGwKICAgICAgICAgICAg
fQogICAgICAgICAgICBpZiAoQi5oaWRlUHJvY0lkKSB7CiAgICAgICAgICAgICAgICBjbGVhclRp
bWVvdXQoQi5oaWRlUHJvY0lkKTsKICAgICAgICAgICAgICAgIEIuaGlkZVByb2NJZCA9IG51bGwK
ICAgICAgICAgICAgfQogICAgICAgICAgICBCLmZpcmVFdmVudCgiY29udGV4dE1vdXNlT3V0Iiwg
QywgQSk7CiAgICAgICAgICAgIEIuaGlkZVByb2NJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkg
ewogICAgICAgICAgICAgICAgQi5oaWRlKCkKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQi5j
ZmcuZ2V0UHJvcGVydHkoImhpZGVkZWxheSIpKQogICAgICAgIH0sCiAgICAgICAgZG9TaG93OiBm
dW5jdGlvbiAoQywgRikgewogICAgICAgICAgICB2YXIgQSA9IHRoaXMuY2ZnLmdldFByb3BlcnR5
KCJ4eW9mZnNldCIpLAogICAgICAgICAgICAgICAgRSA9IEFbMF0sCiAgICAgICAgICAgICAgICBC
ID0gQVsxXSwKICAgICAgICAgICAgICAgIEQgPSB0aGlzOwogICAgICAgICAgICBpZiAoWS5vcGVy
YSAmJiBGLnRhZ05hbWUgJiYgRi50YWdOYW1lLnRvVXBwZXJDYXNlKCkgPT0gIkEiKSB7CiAgICAg
ICAgICAgICAgICBCICs9IDEyCiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHNldFRp
bWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgdmFyIEcgPSBELmNmZy5nZXRQcm9w
ZXJ0eSgidGV4dCIpOwogICAgICAgICAgICAgICAgaWYgKEQuX3RlbXBUaXRsZSAmJiAoRyA9PT0g
IiIgfHwgWUFIT08ubGFuZy5pc1VuZGVmaW5lZChHKSB8fCBZQUhPTy5sYW5nLmlzTnVsbChHKSkp
IHsKICAgICAgICAgICAgICAgICAgICBELnNldEJvZHkoRC5fdGVtcFRpdGxlKQogICAgICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBELmNmZy5yZWZpcmVFdmVudCgidGV4
dCIpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBELm1vdmVUbyhELnBhZ2VYICsg
RSwgRC5wYWdlWSArIEIpOwogICAgICAgICAgICAgICAgaWYgKEQuY2ZnLmdldFByb3BlcnR5KCJw
cmV2ZW50b3ZlcmxhcCIpKSB7CiAgICAgICAgICAgICAgICAgICAgRC5wcmV2ZW50T3ZlcmxhcChE
LnBhZ2VYLCBELnBhZ2VZKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgUy5yZW1v
dmVMaXN0ZW5lcihGLCAibW91c2Vtb3ZlIiwgRC5vbkNvbnRleHRNb3VzZU1vdmUpOwogICAgICAg
ICAgICAgICAgRC5jb250ZXh0VHJpZ2dlckV2ZW50LmZpcmUoRik7CiAgICAgICAgICAgICAgICBE
LnNob3coKTsKICAgICAgICAgICAgICAgIEQuaGlkZVByb2NJZCA9IEQuZG9IaWRlKCkKICAgICAg
ICAgICAgfSwKICAgICAgICAgICAgdGhpcy5jZmcuZ2V0UHJvcGVydHkoInNob3dkZWxheSIpKQog
ICAgICAgIH0sCiAgICAgICAgZG9IaWRlOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBB
ID0gdGhpczsKICAgICAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAg
ICAgICAgICAgICAgQS5oaWRlKCkKICAgICAgICAgICAgfSwKICAgICAgICAgICAgdGhpcy5jZmcu
Z2V0UHJvcGVydHkoImF1dG9kaXNtaXNzZGVsYXkiKSkKICAgICAgICB9LAogICAgICAgIHByZXZl
bnRPdmVybGFwOiBmdW5jdGlvbiAoQSwgQikgewogICAgICAgICAgICB2YXIgRSA9IHRoaXMuZWxl
bWVudC5vZmZzZXRIZWlnaHQsCiAgICAgICAgICAgICAgICBDID0gbmV3IFlBSE9PLnV0aWwuUG9p
bnQoQSwgQiksCiAgICAgICAgICAgICAgICBEID0gUC5nZXRSZWdpb24odGhpcy5lbGVtZW50KTsK
ICAgICAgICAgICAgRC50b3AgLT0gNTsKICAgICAgICAgICAgRC5sZWZ0IC09IDU7CiAgICAgICAg
ICAgIEQucmlnaHQgKz0gNTsKICAgICAgICAgICAgRC5ib3R0b20gKz0gNTsKICAgICAgICAgICAg
aWYgKEQuY29udGFpbnMoQykpIHsKICAgICAgICAgICAgICAgIHRoaXMuY2ZnLnNldFByb3BlcnR5
KCJ5IiwgKEIgLSBFIC0gNSkpCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIG9uUmVu
ZGVyOiBmdW5jdGlvbiAoQywgRCkgewogICAgICAgICAgICBmdW5jdGlvbiBCKCkgewogICAgICAg
ICAgICAgICAgdmFyIEggPSB0aGlzLmVsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgSSA9IHRo
aXMudW5kZXJsYXk7CiAgICAgICAgICAgICAgICBpZiAoSSkgewogICAgICAgICAgICAgICAgICAg
IEkuc3R5bGUud2lkdGggPSAoSC5vZmZzZXRXaWR0aCArIDYpICsgInB4IjsKICAgICAgICAgICAg
ICAgICAgICBJLnN0eWxlLmhlaWdodCA9IChILm9mZnNldEhlaWdodCArIDEpICsgInB4IgogICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIEYoKSB7CiAg
ICAgICAgICAgICAgICBQLmFkZENsYXNzKHRoaXMudW5kZXJsYXksICJ5dWktdHQtc2hhZG93LXZp
c2libGUiKTsKICAgICAgICAgICAgICAgIGlmIChZLmllKSB7CiAgICAgICAgICAgICAgICAgICAg
dGhpcy5mb3JjZVVuZGVybGF5UmVkcmF3KCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
fQogICAgICAgICAgICBmdW5jdGlvbiBHKCkgewogICAgICAgICAgICAgICAgUC5yZW1vdmVDbGFz
cyh0aGlzLnVuZGVybGF5LCAieXVpLXR0LXNoYWRvdy12aXNpYmxlIikKICAgICAgICAgICAgfQog
ICAgICAgICAgICBmdW5jdGlvbiBBKCkgewogICAgICAgICAgICAgICAgdmFyIEwgPSB0aGlzLnVu
ZGVybGF5LAogICAgICAgICAgICAgICAgICAgIEgsIEksIEosIEs7CiAgICAgICAgICAgICAgICBp
ZiAoIUwpIHsKICAgICAgICAgICAgICAgICAgICBIID0gdGhpcy5lbGVtZW50OwogICAgICAgICAg
ICAgICAgICAgIEkgPSBZQUhPTy53aWRnZXQuTW9kdWxlOwogICAgICAgICAgICAgICAgICAgIEog
PSBZLmllOwogICAgICAgICAgICAgICAgICAgIEsgPSB0aGlzOwogICAgICAgICAgICAgICAgICAg
IGlmICghYSkgewogICAgICAgICAgICAgICAgICAgICAgICBhID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiZGl2Iik7CiAgICAgICAgICAgICAgICAgICAgICAgIGEuY2xhc3NOYW1lID0gInl1aS10
dC1zaGFkb3ciCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIEwgPSBh
LmNsb25lTm9kZShmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgSC5hcHBlbmRDaGlsZChMKTsK
ICAgICAgICAgICAgICAgICAgICB0aGlzLnVuZGVybGF5ID0gTDsKICAgICAgICAgICAgICAgICAg
ICB0aGlzLl9zaGFkb3cgPSB0aGlzLnVuZGVybGF5OwogICAgICAgICAgICAgICAgICAgIEYuY2Fs
bCh0aGlzKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmliZSgiYmVmb3JlU2hvdyIs
IEYpOwogICAgICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlKCJoaWRlIiwgRyk7CiAgICAg
ICAgICAgICAgICAgICAgaWYgKFopIHsKICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LnNl
dFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgQi5jYWxs
KEspCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIDAp
OwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNmZy5zdWJzY3JpYmVUb0NvbmZpZ0V2ZW50
KCJ3aWR0aCIsIEIpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNmZy5zdWJzY3JpYmVU
b0NvbmZpZ0V2ZW50KCJoZWlnaHQiLCBCKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5z
dWJzY3JpYmUoImNoYW5nZUNvbnRlbnQiLCBCKTsKICAgICAgICAgICAgICAgICAgICAgICAgSS50
ZXh0UmVzaXplRXZlbnQuc3Vic2NyaWJlKEIsIHRoaXMsIHRydWUpOwogICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLnN1YnNjcmliZSgiZGVzdHJveSIsIGZ1bmN0aW9uICgpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEkudGV4dFJlc2l6ZUV2ZW50LnVuc3Vic2NyaWJlKEIsIHRoaXMp
CiAgICAgICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIEUoKSB7CiAgICAg
ICAgICAgICAgICBBLmNhbGwodGhpcyk7CiAgICAgICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJl
KCJiZWZvcmVTaG93IiwgRSkKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodGhpcy5jZmcu
Z2V0UHJvcGVydHkoInZpc2libGUiKSkgewogICAgICAgICAgICAgICAgQS5jYWxsKHRoaXMpCiAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmliZSgiYmVmb3Jl
U2hvdyIsIEUpCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGZvcmNlVW5kZXJsYXlS
ZWRyYXc6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIEEgPSB0aGlzOwogICAgICAgICAg
ICBQLmFkZENsYXNzKEEudW5kZXJsYXksICJ5dWktZm9yY2UtcmVkcmF3Iik7CiAgICAgICAgICAg
IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgUC5yZW1vdmVDbGFzcyhB
LnVuZGVybGF5LCAieXVpLWZvcmNlLXJlZHJhdyIpCiAgICAgICAgICAgIH0sCiAgICAgICAgICAg
IDApCiAgICAgICAgfSwKICAgICAgICBkZXN0cm95OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAg
IHRoaXMuX3JlbW92ZUV2ZW50TGlzdGVuZXJzKCk7CiAgICAgICAgICAgIFcuc3VwZXJjbGFzcy5k
ZXN0cm95LmNhbGwodGhpcykKICAgICAgICB9LAogICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAo
KSB7CiAgICAgICAgICAgIHJldHVybiAiVG9vbHRpcCAiICsgdGhpcy5pZAogICAgICAgIH0KICAg
IH0pCn0gKCkpOwooZnVuY3Rpb24gKCkgewogICAgWUFIT08ud2lkZ2V0LlBhbmVsID0gZnVuY3Rp
b24gKEEsIEIpIHsKICAgICAgICBZQUhPTy53aWRnZXQuUGFuZWwuc3VwZXJjbGFzcy5jb25zdHJ1
Y3Rvci5jYWxsKHRoaXMsIEEsIEIpCiAgICB9OwogICAgdmFyIFYgPSBudWxsOwogICAgdmFyIGog
PSBZQUhPTy5sYW5nLAogICAgICAgIGkgPSBZQUhPTy51dGlsLAogICAgICAgIG4gPSBpLkRvbSwK
ICAgICAgICBVID0gaS5FdmVudCwKICAgICAgICBiID0gaS5DdXN0b21FdmVudCwKICAgICAgICBk
ID0gWUFIT08udXRpbC5LZXlMaXN0ZW5lciwKICAgICAgICBmID0gaS5Db25maWcsCiAgICAgICAg
ZyA9IFlBSE9PLndpZGdldC5PdmVybGF5LAogICAgICAgIFogPSBZQUhPTy53aWRnZXQuUGFuZWws
CiAgICAgICAgYyA9IFlBSE9PLmVudi51YSwKICAgICAgICBZID0gKGMuaWUgJiYgKGMuaWUgPD0g
NiB8fCBkb2N1bWVudC5jb21wYXRNb2RlID09ICJCYWNrQ29tcGF0IikpLAogICAgICAgIGgsIFgs
IGwsIGsgPSB7CiAgICAgICAgU0hPV19NQVNLOiAic2hvd01hc2siLAogICAgICAgIEhJREVfTUFT
SzogImhpZGVNYXNrIiwKICAgICAgICBEUkFHOiAiZHJhZyIKICAgIH0sCiAgICAgICAgYSA9IHsK
ICAgICAgICBDTE9TRTogewogICAgICAgICAgICBrZXk6ICJjbG9zZSIsCiAgICAgICAgICAgIHZh
bHVlOiB0cnVlLAogICAgICAgICAgICB2YWxpZGF0b3I6IGouaXNCb29sZWFuLAogICAgICAgICAg
ICBzdXBlcmNlZGVzOiBbInZpc2libGUiXQogICAgICAgIH0sCiAgICAgICAgRFJBR0dBQkxFOiB7
CiAgICAgICAgICAgIGtleTogImRyYWdnYWJsZSIsCiAgICAgICAgICAgIHZhbHVlOiAoaS5ERCA/
IHRydWUgOiBmYWxzZSksCiAgICAgICAgICAgIHZhbGlkYXRvcjogai5pc0Jvb2xlYW4sCiAgICAg
ICAgICAgIHN1cGVyY2VkZXM6IFsidmlzaWJsZSJdCiAgICAgICAgfSwKICAgICAgICBEUkFHX09O
TFk6IHsKICAgICAgICAgICAga2V5OiAiZHJhZ29ubHkiLAogICAgICAgICAgICB2YWx1ZTogZmFs
c2UsCiAgICAgICAgICAgIHZhbGlkYXRvcjogai5pc0Jvb2xlYW4sCiAgICAgICAgICAgIHN1cGVy
Y2VkZXM6IFsiZHJhZ2dhYmxlIl0KICAgICAgICB9LAogICAgICAgIFVOREVSTEFZOiB7CiAgICAg
ICAgICAgIGtleTogInVuZGVybGF5IiwKICAgICAgICAgICAgdmFsdWU6ICJzaGFkb3ciLAogICAg
ICAgICAgICBzdXBlcmNlZGVzOiBbInZpc2libGUiXQogICAgICAgIH0sCiAgICAgICAgTU9EQUw6
IHsKICAgICAgICAgICAga2V5OiAibW9kYWwiLAogICAgICAgICAgICB2YWx1ZTogZmFsc2UsCiAg
ICAgICAgICAgIHZhbGlkYXRvcjogai5pc0Jvb2xlYW4sCiAgICAgICAgICAgIHN1cGVyY2VkZXM6
IFsidmlzaWJsZSIsICJ6aW5kZXgiXQogICAgICAgIH0sCiAgICAgICAgS0VZX0xJU1RFTkVSUzog
ewogICAgICAgICAgICBrZXk6ICJrZXlsaXN0ZW5lcnMiLAogICAgICAgICAgICBzdXBwcmVzc0V2
ZW50OiB0cnVlLAogICAgICAgICAgICBzdXBlcmNlZGVzOiBbInZpc2libGUiXQogICAgICAgIH0s
CiAgICAgICAgU1RSSU5HUzogewogICAgICAgICAgICBrZXk6ICJzdHJpbmdzIiwKICAgICAgICAg
ICAgc3VwZXJjZWRlczogWyJjbG9zZSJdLAogICAgICAgICAgICB2YWxpZGF0b3I6IGouaXNPYmpl
Y3QsCiAgICAgICAgICAgIHZhbHVlOiB7CiAgICAgICAgICAgICAgICBjbG9zZTogIkNsb3NlIgog
ICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKICAgIFouQ1NTX1BBTkVMID0gInl1aS1wYW5l
bCI7CiAgICBaLkNTU19QQU5FTF9DT05UQUlORVIgPSAieXVpLXBhbmVsLWNvbnRhaW5lciI7CiAg
ICBaLkZPQ1VTQUJMRSA9IFsiYSIsICJidXR0b24iLCAic2VsZWN0IiwgInRleHRhcmVhIiwgImlu
cHV0IiwgImlmcmFtZSJdOwoKICAgIGZ1bmN0aW9uIGUoQSwgQikgewogICAgICAgIGlmICghdGhp
cy5oZWFkZXIgJiYgdGhpcy5jZmcuZ2V0UHJvcGVydHkoImRyYWdnYWJsZSIpKSB7CiAgICAgICAg
ICAgIHRoaXMuc2V0SGVhZGVyKCImIzE2MDsiKQogICAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9u
IFcoQywgRCwgQSkgewogICAgICAgIHZhciBFID0gQVswXSwKICAgICAgICAgICAgRyA9IEFbMV0s
CiAgICAgICAgICAgIEYgPSB0aGlzLmNmZywKICAgICAgICAgICAgQiA9IEYuZ2V0UHJvcGVydHko
IndpZHRoIik7CiAgICAgICAgaWYgKEIgPT0gRykgewogICAgICAgICAgICBGLnNldFByb3BlcnR5
KCJ3aWR0aCIsIEUpCiAgICAgICAgfQogICAgICAgIHRoaXMudW5zdWJzY3JpYmUoImhpZGUiLCBX
LCBBKQogICAgfQogICAgZnVuY3Rpb24gbShCLCBDKSB7CiAgICAgICAgdmFyIEQsIEUsIEE7CiAg
ICAgICAgaWYgKFkpIHsKICAgICAgICAgICAgRCA9IHRoaXMuY2ZnOwogICAgICAgICAgICBFID0g
RC5nZXRQcm9wZXJ0eSgid2lkdGgiKTsKICAgICAgICAgICAgaWYgKCFFIHx8IEUgPT0gImF1dG8i
KSB7CiAgICAgICAgICAgICAgICBBID0gKHRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aCArICJweCIp
OwogICAgICAgICAgICAgICAgRC5zZXRQcm9wZXJ0eSgid2lkdGgiLCBBKTsKICAgICAgICAgICAg
ICAgIHRoaXMuc3Vic2NyaWJlKCJoaWRlIiwgVywgWyhFIHx8ICIiKSwgQV0pCiAgICAgICAgICAg
IH0KICAgICAgICB9CiAgICB9CiAgICBZQUhPTy5leHRlbmQoWiwgZywgewogICAgICAgIGluaXQ6
IGZ1bmN0aW9uIChBLCBCKSB7CiAgICAgICAgICAgIFouc3VwZXJjbGFzcy5pbml0LmNhbGwodGhp
cywgQSk7CiAgICAgICAgICAgIHRoaXMuYmVmb3JlSW5pdEV2ZW50LmZpcmUoWik7CiAgICAgICAg
ICAgIG4uYWRkQ2xhc3ModGhpcy5lbGVtZW50LCBaLkNTU19QQU5FTCk7CiAgICAgICAgICAgIHRo
aXMuYnVpbGRXcmFwcGVyKCk7CiAgICAgICAgICAgIGlmIChCKSB7CiAgICAgICAgICAgICAgICB0
aGlzLmNmZy5hcHBseUNvbmZpZyhCLCB0cnVlKQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRo
aXMuc3Vic2NyaWJlKCJzaG93TWFzayIsIHRoaXMuX2FkZEZvY3VzSGFuZGxlcnMpOwogICAgICAg
ICAgICB0aGlzLnN1YnNjcmliZSgiaGlkZU1hc2siLCB0aGlzLl9yZW1vdmVGb2N1c0hhbmRsZXJz
KTsKICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmUoImJlZm9yZVJlbmRlciIsIGUpOwogICAgICAg
ICAgICB0aGlzLnN1YnNjcmliZSgicmVuZGVyIiwgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAg
ICAgdGhpcy5zZXRGaXJzdExhc3RGb2N1c2FibGUoKTsKICAgICAgICAgICAgICAgIHRoaXMuc3Vi
c2NyaWJlKCJjaGFuZ2VDb250ZW50IiwgdGhpcy5zZXRGaXJzdExhc3RGb2N1c2FibGUpCiAgICAg
ICAgICAgIH0pOwogICAgICAgICAgICB0aGlzLnN1YnNjcmliZSgic2hvdyIsIHRoaXMuZm9jdXNG
aXJzdCk7CiAgICAgICAgICAgIHRoaXMuaW5pdEV2ZW50LmZpcmUoWikKICAgICAgICB9LAogICAg
ICAgIF9vbkVsZW1lbnRGb2N1czogZnVuY3Rpb24gKEQpIHsKICAgICAgICAgICAgaWYgKFYgPT09
IHRoaXMpIHsKICAgICAgICAgICAgICAgIHZhciBFID0gVS5nZXRUYXJnZXQoRCksCiAgICAgICAg
ICAgICAgICAgICAgRiA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwKICAgICAgICAgICAgICAg
ICAgICBCID0gKEUgIT09IEYgJiYgRSAhPT0gd2luZG93KTsKICAgICAgICAgICAgICAgIGlmIChC
ICYmIEUgIT09IHRoaXMuZWxlbWVudCAmJiBFICE9PSB0aGlzLm1hc2sgJiYgIW4uaXNBbmNlc3Rv
cih0aGlzLmVsZW1lbnQsIEUpKSB7CiAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHRoaXMuZmlyc3RFbGVtZW50KSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLmZpcnN0RWxlbWVudC5mb2N1cygpCiAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fbW9kYWxG
b2N1cykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21vZGFsRm9jdXMu
Zm9jdXMoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLmlubmVyRWxlbWVudC5mb2N1cygpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICB9IGNhdGNoKEEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChCICYmIEUgIT09IGRvY3VtZW50LmJvZHkpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFLmJsdXIoKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKEMpIHt9CiAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwK
ICAgICAgICBfYWRkRm9jdXNIYW5kbGVyczogZnVuY3Rpb24gKEEsIEIpIHsKICAgICAgICAgICAg
aWYgKCF0aGlzLmZpcnN0RWxlbWVudCkgewogICAgICAgICAgICAgICAgaWYgKGMud2Via2l0IHx8
IGMub3BlcmEpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX21vZGFsRm9jdXMpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlSGlkZGVuRm9jdXNFbGVtZW50KCkK
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgICAgIHRoaXMuaW5uZXJFbGVtZW50LnRhYkluZGV4ID0gMAogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuc2V0VGFiTG9vcCh0aGlzLmZpcnN0RWxl
bWVudCwgdGhpcy5sYXN0RWxlbWVudCk7CiAgICAgICAgICAgIFUub25Gb2N1cyhkb2N1bWVudC5k
b2N1bWVudEVsZW1lbnQsIHRoaXMuX29uRWxlbWVudEZvY3VzLCB0aGlzLCB0cnVlKTsKICAgICAg
ICAgICAgViA9IHRoaXMKICAgICAgICB9LAogICAgICAgIF9jcmVhdGVIaWRkZW5Gb2N1c0VsZW1l
bnQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIEEgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJidXR0b24iKTsKICAgICAgICAgICAgQS5zdHlsZS5oZWlnaHQgPSAiMXB4IjsKICAgICAg
ICAgICAgQS5zdHlsZS53aWR0aCA9ICIxcHgiOwogICAgICAgICAgICBBLnN0eWxlLnBvc2l0aW9u
ID0gImFic29sdXRlIjsKICAgICAgICAgICAgQS5zdHlsZS5sZWZ0ID0gIi0xMDAwMGVtIjsKICAg
ICAgICAgICAgQS5zdHlsZS5vcGFjaXR5ID0gMDsKICAgICAgICAgICAgQS50YWJJbmRleCA9IC0x
OwogICAgICAgICAgICB0aGlzLmlubmVyRWxlbWVudC5hcHBlbmRDaGlsZChBKTsKICAgICAgICAg
ICAgdGhpcy5fbW9kYWxGb2N1cyA9IEEKICAgICAgICB9LAogICAgICAgIF9yZW1vdmVGb2N1c0hh
bmRsZXJzOiBmdW5jdGlvbiAoQSwgQikgewogICAgICAgICAgICBVLnJlbW92ZUZvY3VzTGlzdGVu
ZXIoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCB0aGlzLl9vbkVsZW1lbnRGb2N1cywgdGhpcyk7
CiAgICAgICAgICAgIGlmIChWID09IHRoaXMpIHsKICAgICAgICAgICAgICAgIFYgPSBudWxsCiAg
ICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGZvY3VzRmlyc3Q6IGZ1bmN0aW9uIChBLCBD
LCBEKSB7CiAgICAgICAgICAgIHZhciBCID0gdGhpcy5maXJzdEVsZW1lbnQ7CiAgICAgICAgICAg
IGlmIChDICYmIENbMV0pIHsKICAgICAgICAgICAgICAgIFUuc3RvcEV2ZW50KENbMV0pCiAgICAg
ICAgICAgIH0KICAgICAgICAgICAgaWYgKEIpIHsKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAg
ICAgICAgICAgICAgICAgQi5mb2N1cygpCiAgICAgICAgICAgICAgICB9IGNhdGNoKEUpIHt9CiAg
ICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGZvY3VzTGFzdDogZnVuY3Rpb24gKEEsIEMs
IEQpIHsKICAgICAgICAgICAgdmFyIEIgPSB0aGlzLmxhc3RFbGVtZW50OwogICAgICAgICAgICBp
ZiAoQyAmJiBDWzFdKSB7CiAgICAgICAgICAgICAgICBVLnN0b3BFdmVudChDWzFdKQogICAgICAg
ICAgICB9CiAgICAgICAgICAgIGlmIChCKSB7CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAg
ICAgICAgICAgICAgIEIuZm9jdXMoKQogICAgICAgICAgICAgICAgfSBjYXRjaChFKSB7fQogICAg
ICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBzZXRUYWJMb29wOiBmdW5jdGlvbiAoRiwgRCkg
ewogICAgICAgICAgICB2YXIgQiA9IHRoaXMucHJldmVudEJhY2tUYWIsCiAgICAgICAgICAgICAg
ICBBID0gdGhpcy5wcmV2ZW50VGFiT3V0LAogICAgICAgICAgICAgICAgQyA9IHRoaXMuc2hvd0V2
ZW50LAogICAgICAgICAgICAgICAgRSA9IHRoaXMuaGlkZUV2ZW50OwogICAgICAgICAgICBpZiAo
QikgewogICAgICAgICAgICAgICAgQi5kaXNhYmxlKCk7CiAgICAgICAgICAgICAgICBDLnVuc3Vi
c2NyaWJlKEIuZW5hYmxlLCBCKTsKICAgICAgICAgICAgICAgIEUudW5zdWJzY3JpYmUoQi5kaXNh
YmxlLCBCKTsKICAgICAgICAgICAgICAgIEIgPSB0aGlzLnByZXZlbnRCYWNrVGFiID0gbnVsbAog
ICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChBKSB7CiAgICAgICAgICAgICAgICBBLmRpc2Fi
bGUoKTsKICAgICAgICAgICAgICAgIEMudW5zdWJzY3JpYmUoQS5lbmFibGUsIEEpOwogICAgICAg
ICAgICAgICAgRS51bnN1YnNjcmliZShBLmRpc2FibGUsIEEpOwogICAgICAgICAgICAgICAgQSA9
IHRoaXMucHJldmVudFRhYk91dCA9IG51bGwKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAo
RikgewogICAgICAgICAgICAgICAgdGhpcy5wcmV2ZW50QmFja1RhYiA9IG5ldyBkKEYsIHsKICAg
ICAgICAgICAgICAgICAgICBzaGlmdDogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICBrZXlzOiA5
CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
IGZuOiB0aGlzLmZvY3VzTGFzdCwKICAgICAgICAgICAgICAgICAgICBzY29wZTogdGhpcywKICAg
ICAgICAgICAgICAgICAgICBjb3JyZWN0U2NvcGU6IHRydWUKICAgICAgICAgICAgICAgIH0pOwog
ICAgICAgICAgICAgICAgQiA9IHRoaXMucHJldmVudEJhY2tUYWI7CiAgICAgICAgICAgICAgICBD
LnN1YnNjcmliZShCLmVuYWJsZSwgQiwgdHJ1ZSk7CiAgICAgICAgICAgICAgICBFLnN1YnNjcmli
ZShCLmRpc2FibGUsIEIsIHRydWUpCiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKEQpIHsK
ICAgICAgICAgICAgICAgIHRoaXMucHJldmVudFRhYk91dCA9IG5ldyBkKEQsIHsKICAgICAgICAg
ICAgICAgICAgICBzaGlmdDogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAga2V5czogOQogICAg
ICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBmbjog
dGhpcy5mb2N1c0ZpcnN0LAogICAgICAgICAgICAgICAgICAgIHNjb3BlOiB0aGlzLAogICAgICAg
ICAgICAgICAgICAgIGNvcnJlY3RTY29wZTogdHJ1ZQogICAgICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICAgICBBID0gdGhpcy5wcmV2ZW50VGFiT3V0OwogICAgICAgICAgICAgICAgQy5zdWJz
Y3JpYmUoQS5lbmFibGUsIEEsIHRydWUpOwogICAgICAgICAgICAgICAgRS5zdWJzY3JpYmUoQS5k
aXNhYmxlLCBBLCB0cnVlKQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBnZXRGb2N1
c2FibGVFbGVtZW50czogZnVuY3Rpb24gKEMpIHsKICAgICAgICAgICAgQyA9IEMgfHwgdGhpcy5p
bm5lckVsZW1lbnQ7CiAgICAgICAgICAgIHZhciBEID0ge307CiAgICAgICAgICAgIGZvciAodmFy
IEEgPSAwOwogICAgICAgICAgICBBIDwgWi5GT0NVU0FCTEUubGVuZ3RoOwogICAgICAgICAgICBB
KyspIHsKICAgICAgICAgICAgICAgIERbWi5GT0NVU0FCTEVbQV1dID0gdHJ1ZQogICAgICAgICAg
ICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIEIoRSkgewogICAgICAgICAgICAgICAgaWYgKEUuZm9j
dXMgJiYgRS50eXBlICE9PSAiaGlkZGVuIiAmJiAhRS5kaXNhYmxlZCAmJiBEW0UudGFnTmFtZS50
b0xvd2VyQ2FzZSgpXSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlCiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2UKICAgICAgICAgICAgfQogICAg
ICAgICAgICByZXR1cm4gbi5nZXRFbGVtZW50c0J5KEIsIG51bGwsIEMpCiAgICAgICAgfSwKICAg
ICAgICBzZXRGaXJzdExhc3RGb2N1c2FibGU6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhp
cy5maXJzdEVsZW1lbnQgPSBudWxsOwogICAgICAgICAgICB0aGlzLmxhc3RFbGVtZW50ID0gbnVs
bDsKICAgICAgICAgICAgdmFyIEEgPSB0aGlzLmdldEZvY3VzYWJsZUVsZW1lbnRzKCk7CiAgICAg
ICAgICAgIHRoaXMuZm9jdXNhYmxlRWxlbWVudHMgPSBBOwogICAgICAgICAgICBpZiAoQS5sZW5n
dGggPiAwKSB7CiAgICAgICAgICAgICAgICB0aGlzLmZpcnN0RWxlbWVudCA9IEFbMF07CiAgICAg
ICAgICAgICAgICB0aGlzLmxhc3RFbGVtZW50ID0gQVtBLmxlbmd0aCAtIDFdCiAgICAgICAgICAg
IH0KICAgICAgICAgICAgaWYgKHRoaXMuY2ZnLmdldFByb3BlcnR5KCJtb2RhbCIpKSB7CiAgICAg
ICAgICAgICAgICB0aGlzLnNldFRhYkxvb3AodGhpcy5maXJzdEVsZW1lbnQsIHRoaXMubGFzdEVs
ZW1lbnQpCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGluaXRFdmVudHM6IGZ1bmN0
aW9uICgpIHsKICAgICAgICAgICAgWi5zdXBlcmNsYXNzLmluaXRFdmVudHMuY2FsbCh0aGlzKTsK
ICAgICAgICAgICAgdmFyIEEgPSBiLkxJU1Q7CiAgICAgICAgICAgIHRoaXMuc2hvd01hc2tFdmVu
dCA9IHRoaXMuY3JlYXRlRXZlbnQoay5TSE9XX01BU0spOwogICAgICAgICAgICB0aGlzLnNob3dN
YXNrRXZlbnQuc2lnbmF0dXJlID0gQTsKICAgICAgICAgICAgdGhpcy5oaWRlTWFza0V2ZW50ID0g
dGhpcy5jcmVhdGVFdmVudChrLkhJREVfTUFTSyk7CiAgICAgICAgICAgIHRoaXMuaGlkZU1hc2tF
dmVudC5zaWduYXR1cmUgPSBBOwogICAgICAgICAgICB0aGlzLmRyYWdFdmVudCA9IHRoaXMuY3Jl
YXRlRXZlbnQoay5EUkFHKTsKICAgICAgICAgICAgdGhpcy5kcmFnRXZlbnQuc2lnbmF0dXJlID0g
QQogICAgICAgIH0sCiAgICAgICAgaW5pdERlZmF1bHRDb25maWc6IGZ1bmN0aW9uICgpIHsKICAg
ICAgICAgICAgWi5zdXBlcmNsYXNzLmluaXREZWZhdWx0Q29uZmlnLmNhbGwodGhpcyk7CiAgICAg
ICAgICAgIHRoaXMuY2ZnLmFkZFByb3BlcnR5KGEuQ0xPU0Uua2V5LCB7CiAgICAgICAgICAgICAg
ICBoYW5kbGVyOiB0aGlzLmNvbmZpZ0Nsb3NlLAogICAgICAgICAgICAgICAgdmFsdWU6IGEuQ0xP
U0UudmFsdWUsCiAgICAgICAgICAgICAgICB2YWxpZGF0b3I6IGEuQ0xPU0UudmFsaWRhdG9yLAog
ICAgICAgICAgICAgICAgc3VwZXJjZWRlczogYS5DTE9TRS5zdXBlcmNlZGVzCiAgICAgICAgICAg
IH0pOwogICAgICAgICAgICB0aGlzLmNmZy5hZGRQcm9wZXJ0eShhLkRSQUdHQUJMRS5rZXksIHsK
ICAgICAgICAgICAgICAgIGhhbmRsZXI6IHRoaXMuY29uZmlnRHJhZ2dhYmxlLAogICAgICAgICAg
ICAgICAgdmFsdWU6IChpLkREKSA/IHRydWUgOiBmYWxzZSwKICAgICAgICAgICAgICAgIHZhbGlk
YXRvcjogYS5EUkFHR0FCTEUudmFsaWRhdG9yLAogICAgICAgICAgICAgICAgc3VwZXJjZWRlczog
YS5EUkFHR0FCTEUuc3VwZXJjZWRlcwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdGhpcy5j
ZmcuYWRkUHJvcGVydHkoYS5EUkFHX09OTFkua2V5LCB7CiAgICAgICAgICAgICAgICB2YWx1ZTog
YS5EUkFHX09OTFkudmFsdWUsCiAgICAgICAgICAgICAgICB2YWxpZGF0b3I6IGEuRFJBR19PTkxZ
LnZhbGlkYXRvciwKICAgICAgICAgICAgICAgIHN1cGVyY2VkZXM6IGEuRFJBR19PTkxZLnN1cGVy
Y2VkZXMKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHRoaXMuY2ZnLmFkZFByb3BlcnR5KGEu
VU5ERVJMQVkua2V5LCB7CiAgICAgICAgICAgICAgICBoYW5kbGVyOiB0aGlzLmNvbmZpZ1VuZGVy
bGF5LAogICAgICAgICAgICAgICAgdmFsdWU6IGEuVU5ERVJMQVkudmFsdWUsCiAgICAgICAgICAg
ICAgICBzdXBlcmNlZGVzOiBhLlVOREVSTEFZLnN1cGVyY2VkZXMKICAgICAgICAgICAgfSk7CiAg
ICAgICAgICAgIHRoaXMuY2ZnLmFkZFByb3BlcnR5KGEuTU9EQUwua2V5LCB7CiAgICAgICAgICAg
ICAgICBoYW5kbGVyOiB0aGlzLmNvbmZpZ01vZGFsLAogICAgICAgICAgICAgICAgdmFsdWU6IGEu
TU9EQUwudmFsdWUsCiAgICAgICAgICAgICAgICB2YWxpZGF0b3I6IGEuTU9EQUwudmFsaWRhdG9y
LAogICAgICAgICAgICAgICAgc3VwZXJjZWRlczogYS5NT0RBTC5zdXBlcmNlZGVzCiAgICAgICAg
ICAgIH0pOwogICAgICAgICAgICB0aGlzLmNmZy5hZGRQcm9wZXJ0eShhLktFWV9MSVNURU5FUlMu
a2V5LCB7CiAgICAgICAgICAgICAgICBoYW5kbGVyOiB0aGlzLmNvbmZpZ0tleUxpc3RlbmVycywK
ICAgICAgICAgICAgICAgIHN1cHByZXNzRXZlbnQ6IGEuS0VZX0xJU1RFTkVSUy5zdXBwcmVzc0V2
ZW50LAogICAgICAgICAgICAgICAgc3VwZXJjZWRlczogYS5LRVlfTElTVEVORVJTLnN1cGVyY2Vk
ZXMKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHRoaXMuY2ZnLmFkZFByb3BlcnR5KGEuU1RS
SU5HUy5rZXksIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBhLlNUUklOR1MudmFsdWUsCiAgICAg
ICAgICAgICAgICBoYW5kbGVyOiB0aGlzLmNvbmZpZ1N0cmluZ3MsCiAgICAgICAgICAgICAgICB2
YWxpZGF0b3I6IGEuU1RSSU5HUy52YWxpZGF0b3IsCiAgICAgICAgICAgICAgICBzdXBlcmNlZGVz
OiBhLlNUUklOR1Muc3VwZXJjZWRlcwogICAgICAgICAgICB9KQogICAgICAgIH0sCiAgICAgICAg
Y29uZmlnQ2xvc2U6IGZ1bmN0aW9uIChGLCBCLCBFKSB7CiAgICAgICAgICAgIHZhciBEID0gQlsw
XSwKICAgICAgICAgICAgICAgIEEgPSB0aGlzLmNsb3NlLAogICAgICAgICAgICAgICAgQyA9IHRo
aXMuY2ZnLmdldFByb3BlcnR5KCJzdHJpbmdzIik7CiAgICAgICAgICAgIGlmIChEKSB7CiAgICAg
ICAgICAgICAgICBpZiAoIUEpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIWwpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgbC5jbGFzc05hbWUgPSAiY29udGFpbmVyLWNsb3NlIjsKICAgICAg
ICAgICAgICAgICAgICAgICAgbC5ocmVmID0gIiMiCiAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgIEEgPSBsLmNsb25lTm9kZSh0cnVlKTsKICAgICAgICAgICAgICAgICAg
ICB0aGlzLmlubmVyRWxlbWVudC5hcHBlbmRDaGlsZChBKTsKICAgICAgICAgICAgICAgICAgICBB
LmlubmVySFRNTCA9IChDICYmIEMuY2xvc2UpID8gQy5jbG9zZSA6ICImIzE2MDsiOwogICAgICAg
ICAgICAgICAgICAgIFUub24oQSwgImNsaWNrIiwgdGhpcy5fZG9DbG9zZSwgdGhpcywgdHJ1ZSk7
CiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSA9IEEKICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgICAgQS5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIgogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKEEpIHsK
ICAgICAgICAgICAgICAgICAgICBBLnN0eWxlLmRpc3BsYXkgPSAibm9uZSIKICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgX2RvQ2xvc2U6IGZ1bmN0aW9u
IChBKSB7CiAgICAgICAgICAgIFUucHJldmVudERlZmF1bHQoQSk7CiAgICAgICAgICAgIHRoaXMu
aGlkZSgpCiAgICAgICAgfSwKICAgICAgICBjb25maWdEcmFnZ2FibGU6IGZ1bmN0aW9uIChCLCBD
LCBBKSB7CiAgICAgICAgICAgIHZhciBEID0gQ1swXTsKICAgICAgICAgICAgaWYgKEQpIHsKICAg
ICAgICAgICAgICAgIGlmICghaS5ERCkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuY2ZnLnNl
dFByb3BlcnR5KCJkcmFnZ2FibGUiLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJu
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAodGhpcy5oZWFkZXIpIHsKICAg
ICAgICAgICAgICAgICAgICBuLnNldFN0eWxlKHRoaXMuaGVhZGVyLCAiY3Vyc29yIiwgIm1vdmUi
KTsKICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZ2lzdGVyRHJhZ0Ryb3AoKQogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmUoImJlZm9yZVNob3ciLCBtKQog
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKHRoaXMuZGQpIHsKICAgICAg
ICAgICAgICAgICAgICB0aGlzLmRkLnVucmVnKCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgIGlmICh0aGlzLmhlYWRlcikgewogICAgICAgICAgICAgICAgICAgIG4uc2V0U3R5bGUo
dGhpcy5oZWFkZXIsICJjdXJzb3IiLCAiYXV0byIpCiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCJiZWZvcmVTaG93IiwgbSkKICAgICAgICAgICAgfQog
ICAgICAgIH0sCiAgICAgICAgY29uZmlnVW5kZXJsYXk6IGZ1bmN0aW9uIChILCBJLCBBKSB7CiAg
ICAgICAgICAgIHZhciBKID0gKHRoaXMucGxhdGZvcm0gPT0gIm1hYyIgJiYgYy5nZWNrbyksCiAg
ICAgICAgICAgICAgICBHID0gSVswXS50b0xvd2VyQ2FzZSgpLAogICAgICAgICAgICAgICAgRSA9
IHRoaXMudW5kZXJsYXksCiAgICAgICAgICAgICAgICBEID0gdGhpcy5lbGVtZW50OwoKICAgICAg
ICAgICAgZnVuY3Rpb24gQygpIHsKICAgICAgICAgICAgICAgIHZhciBMID0gZmFsc2U7CiAgICAg
ICAgICAgICAgICBpZiAoIUUpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIVgpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgWCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAg
ICAgICAgICAgICAgICAgICAgICBYLmNsYXNzTmFtZSA9ICJ1bmRlcmxheSIKICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgRSA9IFguY2xvbmVOb2RlKGZhbHNlKTsKICAg
ICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoRSk7CiAgICAgICAgICAg
ICAgICAgICAgdGhpcy51bmRlcmxheSA9IEU7CiAgICAgICAgICAgICAgICAgICAgaWYgKFkpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaXplVW5kZXJsYXkoKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5jZmcuc3Vic2NyaWJlVG9Db25maWdFdmVudCgid2lkdGgiLCB0aGlz
LnNpemVVbmRlcmxheSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2ZnLnN1YnNjcmli
ZVRvQ29uZmlnRXZlbnQoImhlaWdodCIsIHRoaXMuc2l6ZVVuZGVybGF5KTsKICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5jaGFuZ2VDb250ZW50RXZlbnQuc3Vic2NyaWJlKHRoaXMuc2l6ZVVu
ZGVybGF5KTsKICAgICAgICAgICAgICAgICAgICAgICAgWUFIT08ud2lkZ2V0Lk1vZHVsZS50ZXh0
UmVzaXplRXZlbnQuc3Vic2NyaWJlKHRoaXMuc2l6ZVVuZGVybGF5LCB0aGlzLCB0cnVlKQogICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoYy53ZWJraXQgJiYgYy53
ZWJraXQgPCA0MjApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VDb250ZW50
RXZlbnQuc3Vic2NyaWJlKHRoaXMuZm9yY2VVbmRlcmxheVJlZHJhdykKICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgTCA9IHRydWUKICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBLKCkgewogICAgICAgICAgICAgICAgdmFy
IEwgPSBDLmNhbGwodGhpcyk7CiAgICAgICAgICAgICAgICBpZiAoIUwgJiYgWSkgewogICAgICAg
ICAgICAgICAgICAgIHRoaXMuc2l6ZVVuZGVybGF5KCkKICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgIHRoaXMuX3VuZGVybGF5RGVmZXJyZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAg
IHRoaXMuYmVmb3JlU2hvd0V2ZW50LnVuc3Vic2NyaWJlKEspCiAgICAgICAgICAgIH0KICAgICAg
ICAgICAgZnVuY3Rpb24gQigpIHsKICAgICAgICAgICAgICAgIGlmICh0aGlzLl91bmRlcmxheURl
ZmVycmVkKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWZvcmVTaG93RXZlbnQudW5zdWJz
Y3JpYmUoSyk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW5kZXJsYXlEZWZlcnJlZCA9IGZh
bHNlCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoRSkgewogICAgICAgICAg
ICAgICAgICAgIHRoaXMuY2ZnLnVuc3Vic2NyaWJlRnJvbUNvbmZpZ0V2ZW50KCJ3aWR0aCIsIHRo
aXMuc2l6ZVVuZGVybGF5KTsKICAgICAgICAgICAgICAgICAgICB0aGlzLmNmZy51bnN1YnNjcmli
ZUZyb21Db25maWdFdmVudCgiaGVpZ2h0IiwgdGhpcy5zaXplVW5kZXJsYXkpOwogICAgICAgICAg
ICAgICAgICAgIHRoaXMuY2hhbmdlQ29udGVudEV2ZW50LnVuc3Vic2NyaWJlKHRoaXMuc2l6ZVVu
ZGVybGF5KTsKICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZUNvbnRlbnRFdmVudC51bnN1
YnNjcmliZSh0aGlzLmZvcmNlVW5kZXJsYXlSZWRyYXcpOwogICAgICAgICAgICAgICAgICAgIFlB
SE9PLndpZGdldC5Nb2R1bGUudGV4dFJlc2l6ZUV2ZW50LnVuc3Vic2NyaWJlKHRoaXMuc2l6ZVVu
ZGVybGF5LCB0aGlzLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQucmVt
b3ZlQ2hpbGQoRSk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy51bmRlcmxheSA9IG51bGwKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBzd2l0Y2ggKEcpIHsKICAg
ICAgICAgICAgY2FzZSAic2hhZG93IjoKICAgICAgICAgICAgICAgIG4ucmVtb3ZlQ2xhc3MoRCwg
Im1hdHRlIik7CiAgICAgICAgICAgICAgICBuLmFkZENsYXNzKEQsICJzaGFkb3ciKTsKICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJtYXR0ZSI6CiAgICAgICAgICAgICAg
ICBpZiAoIUopIHsKICAgICAgICAgICAgICAgICAgICBCLmNhbGwodGhpcykKICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgIG4ucmVtb3ZlQ2xhc3MoRCwgInNoYWRvdyIpOwogICAgICAg
ICAgICAgICAgbi5hZGRDbGFzcyhELCAibWF0dGUiKTsKICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgaWYgKCFKKSB7CiAgICAgICAgICAg
ICAgICAgICAgQi5jYWxsKHRoaXMpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBu
LnJlbW92ZUNsYXNzKEQsICJzaGFkb3ciKTsKICAgICAgICAgICAgICAgIG4ucmVtb3ZlQ2xhc3Mo
RCwgIm1hdHRlIik7CiAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICB9CiAgICAgICAg
ICAgIGlmICgoRyA9PSAic2hhZG93IikgfHwgKEogJiYgIUUpKSB7CiAgICAgICAgICAgICAgICBp
ZiAodGhpcy5jZmcuZ2V0UHJvcGVydHkoInZpc2libGUiKSkgewogICAgICAgICAgICAgICAgICAg
IHZhciBGID0gQy5jYWxsKHRoaXMpOwogICAgICAgICAgICAgICAgICAgIGlmICghRiAmJiBZKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2l6ZVVuZGVybGF5KCkKICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGlm
ICghdGhpcy5fdW5kZXJsYXlEZWZlcnJlZCkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlz
LmJlZm9yZVNob3dFdmVudC5zdWJzY3JpYmUoSyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMuX3VuZGVybGF5RGVmZXJyZWQgPSB0cnVlCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBjb25maWdNb2RhbDog
ZnVuY3Rpb24gKEIsIEMsIEQpIHsKICAgICAgICAgICAgdmFyIEEgPSBDWzBdOwogICAgICAgICAg
ICBpZiAoQSkgewogICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9oYXNNb2RhbGl0eUV2ZW50TGlz
dGVuZXJzKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmUoImJlZm9yZVNob3ci
LCB0aGlzLmJ1aWxkTWFzayk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmUoImJl
Zm9yZVNob3ciLCB0aGlzLmJyaW5nVG9Ub3ApOwogICAgICAgICAgICAgICAgICAgIHRoaXMuc3Vi
c2NyaWJlKCJiZWZvcmVTaG93IiwgdGhpcy5zaG93TWFzayk7CiAgICAgICAgICAgICAgICAgICAg
dGhpcy5zdWJzY3JpYmUoImhpZGUiLCB0aGlzLmhpZGVNYXNrKTsKICAgICAgICAgICAgICAgICAg
ICBnLndpbmRvd1Jlc2l6ZUV2ZW50LnN1YnNjcmliZSh0aGlzLnNpemVNYXNrLCB0aGlzLCB0cnVl
KTsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9oYXNNb2RhbGl0eUV2ZW50TGlzdGVuZXJzID0g
dHJ1ZQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgaWYgKHRoaXMuX2hhc01vZGFsaXR5RXZlbnRMaXN0ZW5lcnMpIHsKICAgICAgICAgICAgICAg
ICAgICBpZiAodGhpcy5jZmcuZ2V0UHJvcGVydHkoInZpc2libGUiKSkgewogICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLmhpZGVNYXNrKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
cmVtb3ZlTWFzaygpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHRo
aXMudW5zdWJzY3JpYmUoImJlZm9yZVNob3ciLCB0aGlzLmJ1aWxkTWFzayk7CiAgICAgICAgICAg
ICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgiYmVmb3JlU2hvdyIsIHRoaXMuYnJpbmdUb1RvcCk7
CiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgiYmVmb3JlU2hvdyIsIHRoaXMu
c2hvd01hc2spOwogICAgICAgICAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoImhpZGUiLCB0
aGlzLmhpZGVNYXNrKTsKICAgICAgICAgICAgICAgICAgICBnLndpbmRvd1Jlc2l6ZUV2ZW50LnVu
c3Vic2NyaWJlKHRoaXMuc2l6ZU1hc2ssIHRoaXMpOwogICAgICAgICAgICAgICAgICAgIHRoaXMu
X2hhc01vZGFsaXR5RXZlbnRMaXN0ZW5lcnMgPSBmYWxzZQogICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICByZW1vdmVNYXNrOiBmdW5jdGlvbiAoKSB7CiAg
ICAgICAgICAgIHZhciBBID0gdGhpcy5tYXNrLAogICAgICAgICAgICAgICAgQjsKICAgICAgICAg
ICAgaWYgKEEpIHsKICAgICAgICAgICAgICAgIHRoaXMuaGlkZU1hc2soKTsKICAgICAgICAgICAg
ICAgIEIgPSBBLnBhcmVudE5vZGU7CiAgICAgICAgICAgICAgICBpZiAoQikgewogICAgICAgICAg
ICAgICAgICAgIEIucmVtb3ZlQ2hpbGQoQSkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIHRoaXMubWFzayA9IG51bGwKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgY29u
ZmlnS2V5TGlzdGVuZXJzOiBmdW5jdGlvbiAoRywgRCwgQykgewogICAgICAgICAgICB2YXIgQSA9
IERbMF0sCiAgICAgICAgICAgICAgICBFLCBGLCBCOwogICAgICAgICAgICBpZiAoQSkgewogICAg
ICAgICAgICAgICAgaWYgKEEgaW5zdGFuY2VvZiBBcnJheSkgewogICAgICAgICAgICAgICAgICAg
IEYgPSBBLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICBmb3IgKEIgPSAwOwogICAgICAgICAg
ICAgICAgICAgIEIgPCBGOwogICAgICAgICAgICAgICAgICAgIEIrKykgewogICAgICAgICAgICAg
ICAgICAgICAgICBFID0gQVtCXTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmLmFscmVh
ZHlTdWJzY3JpYmVkKHRoaXMuc2hvd0V2ZW50LCBFLmVuYWJsZSwgRSkpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMuc2hvd0V2ZW50LnN1YnNjcmliZShFLmVuYWJsZSwgRSwgdHJ1
ZSkKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IWYuYWxyZWFkeVN1YnNjcmliZWQodGhpcy5oaWRlRXZlbnQsIEUuZGlzYWJsZSwgRSkpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZUV2ZW50LnN1YnNjcmliZShFLmRpc2Fi
bGUsIEUsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95RXZl
bnQuc3Vic2NyaWJlKEUuZGlzYWJsZSwgRSwgdHJ1ZSkKICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgaWYgKCFmLmFscmVhZHlTdWJzY3JpYmVkKHRoaXMuc2hvd0V2ZW50LCBBLmVu
YWJsZSwgQSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXZlbnQuc3Vic2Ny
aWJlKEEuZW5hYmxlLCBBLCB0cnVlKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICBpZiAoIWYuYWxyZWFkeVN1YnNjcmliZWQodGhpcy5oaWRlRXZlbnQsIEEuZGlzYWJs
ZSwgQSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlRXZlbnQuc3Vic2NyaWJl
KEEuZGlzYWJsZSwgQSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJv
eUV2ZW50LnN1YnNjcmliZShBLmRpc2FibGUsIEEsIHRydWUpCiAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBjb25m
aWdTdHJpbmdzOiBmdW5jdGlvbiAoQiwgQywgQSkgewogICAgICAgICAgICB2YXIgRCA9IGoubWVy
Z2UoYS5TVFJJTkdTLnZhbHVlLCBDWzBdKTsKICAgICAgICAgICAgdGhpcy5jZmcuc2V0UHJvcGVy
dHkoYS5TVFJJTkdTLmtleSwgRCwgdHJ1ZSkKICAgICAgICB9LAogICAgICAgIGNvbmZpZ0hlaWdo
dDogZnVuY3Rpb24gKEUsIEIsIEQpIHsKICAgICAgICAgICAgdmFyIEMgPSBCWzBdLAogICAgICAg
ICAgICAgICAgQSA9IHRoaXMuaW5uZXJFbGVtZW50OwogICAgICAgICAgICBuLnNldFN0eWxlKEEs
ICJoZWlnaHQiLCBDKTsKICAgICAgICAgICAgdGhpcy5jZmcucmVmaXJlRXZlbnQoImlmcmFtZSIp
CiAgICAgICAgfSwKICAgICAgICBfYXV0b0ZpbGxPbkhlaWdodENoYW5nZTogZnVuY3Rpb24gKEQs
IEIsIEEpIHsKICAgICAgICAgICAgWi5zdXBlcmNsYXNzLl9hdXRvRmlsbE9uSGVpZ2h0Q2hhbmdl
LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgICAgICAgIGlmIChZKSB7CiAgICAgICAgICAg
ICAgICB2YXIgQyA9IHRoaXM7CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgp
IHsKICAgICAgICAgICAgICAgICAgICBDLnNpemVVbmRlcmxheSgpCiAgICAgICAgICAgICAgICB9
LAogICAgICAgICAgICAgICAgMCkKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgY29u
ZmlnV2lkdGg6IGZ1bmN0aW9uIChFLCBDLCBEKSB7CiAgICAgICAgICAgIHZhciBBID0gQ1swXSwK
ICAgICAgICAgICAgICAgIEIgPSB0aGlzLmlubmVyRWxlbWVudDsKICAgICAgICAgICAgbi5zZXRT
dHlsZShCLCAid2lkdGgiLCBBKTsKICAgICAgICAgICAgdGhpcy5jZmcucmVmaXJlRXZlbnQoImlm
cmFtZSIpCiAgICAgICAgfSwKICAgICAgICBjb25maWd6SW5kZXg6IGZ1bmN0aW9uIChCLCBDLCBE
KSB7CiAgICAgICAgICAgIFouc3VwZXJjbGFzcy5jb25maWd6SW5kZXguY2FsbCh0aGlzLCBCLCBD
LCBEKTsKICAgICAgICAgICAgaWYgKHRoaXMubWFzayB8fCB0aGlzLmNmZy5nZXRQcm9wZXJ0eSgi
bW9kYWwiKSA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgdmFyIEEgPSBuLmdldFN0eWxlKHRo
aXMuZWxlbWVudCwgInpJbmRleCIpOwogICAgICAgICAgICAgICAgaWYgKCFBIHx8IGlzTmFOKEEp
KSB7CiAgICAgICAgICAgICAgICAgICAgQSA9IDAKICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgIGlmIChBID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5jZmcuc2V0UHJv
cGVydHkoInpJbmRleCIsIDEpCiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgICAgIHRoaXMuc3RhY2tNYXNrKCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQog
ICAgICAgIH0sCiAgICAgICAgYnVpbGRXcmFwcGVyOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAg
IHZhciBBID0gdGhpcy5lbGVtZW50LnBhcmVudE5vZGUsCiAgICAgICAgICAgICAgICBDID0gdGhp
cy5lbGVtZW50LAogICAgICAgICAgICAgICAgQiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRp
diIpOwogICAgICAgICAgICBCLmNsYXNzTmFtZSA9IFouQ1NTX1BBTkVMX0NPTlRBSU5FUjsKICAg
ICAgICAgICAgQi5pZCA9IEMuaWQgKyAiX2MiOwogICAgICAgICAgICBpZiAoQSkgewogICAgICAg
ICAgICAgICAgQS5pbnNlcnRCZWZvcmUoQiwgQykKICAgICAgICAgICAgfQogICAgICAgICAgICBC
LmFwcGVuZENoaWxkKEMpOwogICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBCOwogICAgICAgICAg
ICB0aGlzLmlubmVyRWxlbWVudCA9IEM7CiAgICAgICAgICAgIG4uc2V0U3R5bGUodGhpcy5pbm5l
ckVsZW1lbnQsICJ2aXNpYmlsaXR5IiwgImluaGVyaXQiKQogICAgICAgIH0sCiAgICAgICAgc2l6
ZVVuZGVybGF5OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBBID0gdGhpcy51bmRlcmxh
eSwKICAgICAgICAgICAgICAgIEI7CiAgICAgICAgICAgIGlmIChBKSB7CiAgICAgICAgICAgICAg
ICBCID0gdGhpcy5lbGVtZW50OwogICAgICAgICAgICAgICAgQS5zdHlsZS53aWR0aCA9IEIub2Zm
c2V0V2lkdGggKyAicHgiOwogICAgICAgICAgICAgICAgQS5zdHlsZS5oZWlnaHQgPSBCLm9mZnNl
dEhlaWdodCArICJweCIKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgcmVnaXN0ZXJE
cmFnRHJvcDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgQSA9IHRoaXM7CiAgICAgICAg
ICAgIGlmICh0aGlzLmhlYWRlcikgewogICAgICAgICAgICAgICAgaWYgKCFpLkREKSB7CiAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB2
YXIgQiA9ICh0aGlzLmNmZy5nZXRQcm9wZXJ0eSgiZHJhZ29ubHkiKSA9PT0gdHJ1ZSk7CiAgICAg
ICAgICAgICAgICB0aGlzLmRkID0gbmV3IGkuREQodGhpcy5lbGVtZW50LmlkLCB0aGlzLmlkLCB7
CiAgICAgICAgICAgICAgICAgICAgZHJhZ09ubHk6IEIKICAgICAgICAgICAgICAgIH0pOwogICAg
ICAgICAgICAgICAgaWYgKCF0aGlzLmhlYWRlci5pZCkgewogICAgICAgICAgICAgICAgICAgIHRo
aXMuaGVhZGVyLmlkID0gdGhpcy5pZCArICJfaCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgIHRoaXMuZGQuc3RhcnREcmFnID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAg
ICAgIHZhciBJLCBGLCBELCBILCBDLCBFOwogICAgICAgICAgICAgICAgICAgIGlmIChZQUhPTy5l
bnYudWEuaWUgPT0gNikgewogICAgICAgICAgICAgICAgICAgICAgICBuLmFkZENsYXNzKEEuZWxl
bWVudCwgImRyYWciKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBp
ZiAoQS5jZmcuZ2V0UHJvcGVydHkoImNvbnN0cmFpbnRvdmlld3BvcnQiKSkgewogICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgRyA9IGcuVklFV1BPUlRfT0ZGU0VUOwogICAgICAgICAgICAgICAg
ICAgICAgICBJID0gQS5lbGVtZW50Lm9mZnNldEhlaWdodDsKICAgICAgICAgICAgICAgICAgICAg
ICAgRiA9IEEuZWxlbWVudC5vZmZzZXRXaWR0aDsKICAgICAgICAgICAgICAgICAgICAgICAgRCA9
IG4uZ2V0Vmlld3BvcnRXaWR0aCgpOwogICAgICAgICAgICAgICAgICAgICAgICBIID0gbi5nZXRW
aWV3cG9ydEhlaWdodCgpOwogICAgICAgICAgICAgICAgICAgICAgICBDID0gbi5nZXREb2N1bWVu
dFNjcm9sbExlZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgRSA9IG4uZ2V0RG9jdW1lbnRT
Y3JvbGxUb3AoKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEkgKyBHIDwgSCkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5taW5ZID0gRSArIEc7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLm1heFkgPSBFICsgSCAtIEkgLSBHCiAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1pblkgPSBF
ICsgRzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWF4WSA9IEUgKyBHCiAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEYgKyBHIDwg
RCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5taW5YID0gQyArIEc7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1heFggPSBDICsgRCAtIEYgLSBHCiAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
Lm1pblggPSBDICsgRzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWF4WCA9IEMg
KyBHCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5jb25zdHJhaW5YID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25zdHJh
aW5ZID0gdHJ1ZQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMuY29uc3RyYWluWCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLmNvbnN0cmFpblkgPSBmYWxzZQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICBBLmRyYWdFdmVudC5maXJlKCJzdGFydERyYWciLCBhcmd1bWVudHMpCiAgICAgICAg
ICAgICAgICB9OwogICAgICAgICAgICAgICAgdGhpcy5kZC5vbkRyYWcgPSBmdW5jdGlvbiAoKSB7
CiAgICAgICAgICAgICAgICAgICAgQS5zeW5jUG9zaXRpb24oKTsKICAgICAgICAgICAgICAgICAg
ICBBLmNmZy5yZWZpcmVFdmVudCgiaWZyYW1lIik7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRo
aXMucGxhdGZvcm0gPT0gIm1hYyIgJiYgWUFIT08uZW52LnVhLmdlY2tvKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMuc2hvd01hY0dlY2tvU2Nyb2xsYmFycygpCiAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgIEEuZHJhZ0V2ZW50LmZpcmUoIm9uRHJhZyIsIGFy
Z3VtZW50cykKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB0aGlzLmRkLmVuZERy
YWcgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKFlBSE9PLmVudi51YS5p
ZSA9PSA2KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG4ucmVtb3ZlQ2xhc3MoQS5lbGVtZW50
LCAiZHJhZyIpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIEEuZHJh
Z0V2ZW50LmZpcmUoImVuZERyYWciLCBhcmd1bWVudHMpOwogICAgICAgICAgICAgICAgICAgIEEu
bW92ZUV2ZW50LmZpcmUoQS5jZmcuZ2V0UHJvcGVydHkoInh5IikpCiAgICAgICAgICAgICAgICB9
OwogICAgICAgICAgICAgICAgdGhpcy5kZC5zZXRIYW5kbGVFbElkKHRoaXMuaGVhZGVyLmlkKTsK
ICAgICAgICAgICAgICAgIHRoaXMuZGQuYWRkSW52YWxpZEhhbmRsZVR5cGUoIklOUFVUIik7CiAg
ICAgICAgICAgICAgICB0aGlzLmRkLmFkZEludmFsaWRIYW5kbGVUeXBlKCJTRUxFQ1QiKTsKICAg
ICAgICAgICAgICAgIHRoaXMuZGQuYWRkSW52YWxpZEhhbmRsZVR5cGUoIlRFWFRBUkVBIikKICAg
ICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgYnVpbGRNYXNrOiBmdW5jdGlvbiAoKSB7CiAg
ICAgICAgICAgIHZhciBBID0gdGhpcy5tYXNrOwogICAgICAgICAgICBpZiAoIUEpIHsKICAgICAg
ICAgICAgICAgIGlmICghaCkgewogICAgICAgICAgICAgICAgICAgIGggPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJkaXYiKTsKICAgICAgICAgICAgICAgICAgICBoLmNsYXNzTmFtZSA9ICJtYXNr
IjsKICAgICAgICAgICAgICAgICAgICBoLmlubmVySFRNTCA9ICImIzE2MDsiCiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICBBID0gaC5jbG9uZU5vZGUodHJ1ZSk7CiAgICAgICAgICAg
ICAgICBBLmlkID0gdGhpcy5pZCArICJfbWFzayI7CiAgICAgICAgICAgICAgICBkb2N1bWVudC5i
b2R5Lmluc2VydEJlZm9yZShBLCBkb2N1bWVudC5ib2R5LmZpcnN0Q2hpbGQpOwogICAgICAgICAg
ICAgICAgdGhpcy5tYXNrID0gQTsKICAgICAgICAgICAgICAgIGlmIChZQUhPTy5lbnYudWEuZ2Vj
a28gJiYgdGhpcy5wbGF0Zm9ybSA9PSAibWFjIikgewogICAgICAgICAgICAgICAgICAgIG4uYWRk
Q2xhc3ModGhpcy5tYXNrLCAiYmxvY2stc2Nyb2xsYmFycyIpCiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICB0aGlzLnN0YWNrTWFzaygpCiAgICAgICAgICAgIH0KICAgICAgICB9LAog
ICAgICAgIGhpZGVNYXNrOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIGlmICh0aGlzLmNmZy5n
ZXRQcm9wZXJ0eSgibW9kYWwiKSAmJiB0aGlzLm1hc2spIHsKICAgICAgICAgICAgICAgIHRoaXMu
bWFzay5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICAgICAgICAgICAgbi5yZW1vdmVDbGFz
cyhkb2N1bWVudC5ib2R5LCAibWFza2VkIik7CiAgICAgICAgICAgICAgICB0aGlzLmhpZGVNYXNr
RXZlbnQuZmlyZSgpCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHNob3dNYXNrOiBm
dW5jdGlvbiAoKSB7CiAgICAgICAgICAgIGlmICh0aGlzLmNmZy5nZXRQcm9wZXJ0eSgibW9kYWwi
KSAmJiB0aGlzLm1hc2spIHsKICAgICAgICAgICAgICAgIG4uYWRkQ2xhc3MoZG9jdW1lbnQuYm9k
eSwgIm1hc2tlZCIpOwogICAgICAgICAgICAgICAgdGhpcy5zaXplTWFzaygpOwogICAgICAgICAg
ICAgICAgdGhpcy5tYXNrLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwogICAgICAgICAgICAgICAg
dGhpcy5zaG93TWFza0V2ZW50LmZpcmUoKQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAg
ICBzaXplTWFzazogZnVuY3Rpb24gKCkgewogICAgICAgICAgICBpZiAodGhpcy5tYXNrKSB7CiAg
ICAgICAgICAgICAgICB2YXIgQiA9IHRoaXMubWFzaywKICAgICAgICAgICAgICAgICAgICBBID0g
bi5nZXRWaWV3cG9ydFdpZHRoKCksCiAgICAgICAgICAgICAgICAgICAgQyA9IG4uZ2V0Vmlld3Bv
cnRIZWlnaHQoKTsKICAgICAgICAgICAgICAgIGlmIChCLm9mZnNldEhlaWdodCA+IEMpIHsKICAg
ICAgICAgICAgICAgICAgICBCLnN0eWxlLmhlaWdodCA9IEMgKyAicHgiCiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICBpZiAoQi5vZmZzZXRXaWR0aCA+IEEpIHsKICAgICAgICAgICAg
ICAgICAgICBCLnN0eWxlLndpZHRoID0gQSArICJweCIKICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgIEIuc3R5bGUuaGVpZ2h0ID0gbi5nZXREb2N1bWVudEhlaWdodCgpICsgInB4IjsK
ICAgICAgICAgICAgICAgIEIuc3R5bGUud2lkdGggPSBuLmdldERvY3VtZW50V2lkdGgoKSArICJw
eCIKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgc3RhY2tNYXNrOiBmdW5jdGlvbiAo
KSB7CiAgICAgICAgICAgIGlmICh0aGlzLm1hc2spIHsKICAgICAgICAgICAgICAgIHZhciBBID0g
bi5nZXRTdHlsZSh0aGlzLmVsZW1lbnQsICJ6SW5kZXgiKTsKICAgICAgICAgICAgICAgIGlmICgh
WUFIT08ubGFuZy5pc1VuZGVmaW5lZChBKSAmJiAhaXNOYU4oQSkpIHsKICAgICAgICAgICAgICAg
ICAgICBuLnNldFN0eWxlKHRoaXMubWFzaywgInpJbmRleCIsIEEgLSAxKQogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICByZW5kZXI6IGZ1bmN0aW9uIChB
KSB7CiAgICAgICAgICAgIHJldHVybiBaLnN1cGVyY2xhc3MucmVuZGVyLmNhbGwodGhpcywgQSwg
dGhpcy5pbm5lckVsZW1lbnQpCiAgICAgICAgfSwKICAgICAgICBfcmVuZGVySGVhZGVyOiBmdW5j
dGlvbiAoQSkgewogICAgICAgICAgICBBID0gQSB8fCB0aGlzLmlubmVyRWxlbWVudDsKICAgICAg
ICAgICAgWi5zdXBlcmNsYXNzLl9yZW5kZXJIZWFkZXIuY2FsbCh0aGlzLCBBKQogICAgICAgIH0s
CiAgICAgICAgX3JlbmRlckJvZHk6IGZ1bmN0aW9uIChBKSB7CiAgICAgICAgICAgIEEgPSBBIHx8
IHRoaXMuaW5uZXJFbGVtZW50OwogICAgICAgICAgICBaLnN1cGVyY2xhc3MuX3JlbmRlckJvZHku
Y2FsbCh0aGlzLCBBKQogICAgICAgIH0sCiAgICAgICAgX3JlbmRlckZvb3RlcjogZnVuY3Rpb24g
KEEpIHsKICAgICAgICAgICAgQSA9IEEgfHwgdGhpcy5pbm5lckVsZW1lbnQ7CiAgICAgICAgICAg
IFouc3VwZXJjbGFzcy5fcmVuZGVyRm9vdGVyLmNhbGwodGhpcywgQSkKICAgICAgICB9LAogICAg
ICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgZy53aW5kb3dSZXNpemVFdmVu
dC51bnN1YnNjcmliZSh0aGlzLnNpemVNYXNrLCB0aGlzKTsKICAgICAgICAgICAgdGhpcy5yZW1v
dmVNYXNrKCk7CiAgICAgICAgICAgIGlmICh0aGlzLmNsb3NlKSB7CiAgICAgICAgICAgICAgICBV
LnB1cmdlRWxlbWVudCh0aGlzLmNsb3NlKQogICAgICAgICAgICB9CiAgICAgICAgICAgIFouc3Vw
ZXJjbGFzcy5kZXN0cm95LmNhbGwodGhpcykKICAgICAgICB9LAogICAgICAgIGZvcmNlVW5kZXJs
YXlSZWRyYXc6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIEEgPSB0aGlzLnVuZGVybGF5
OwogICAgICAgICAgICBuLmFkZENsYXNzKEEsICJ5dWktZm9yY2UtcmVkcmF3Iik7CiAgICAgICAg
ICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgbi5yZW1vdmVDbGFz
cyhBLCAieXVpLWZvcmNlLXJlZHJhdyIpCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIDApCiAg
ICAgICAgfSwKICAgICAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1
cm4gIlBhbmVsICIgKyB0aGlzLmlkCiAgICAgICAgfQogICAgfSkKfSAoKSk7CihmdW5jdGlvbiAo
KSB7CiAgICBZQUhPTy53aWRnZXQuRGlhbG9nID0gZnVuY3Rpb24gKEEsIEIpIHsKICAgICAgICBZ
QUhPTy53aWRnZXQuRGlhbG9nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBBLCBC
KQogICAgfTsKICAgIHZhciBQID0gWUFIT08udXRpbC5FdmVudCwKICAgICAgICBLID0gWUFIT08u
dXRpbC5DdXN0b21FdmVudCwKICAgICAgICBNID0gWUFIT08udXRpbC5Eb20sCiAgICAgICAgSSA9
IFlBSE9PLndpZGdldC5EaWFsb2csCiAgICAgICAgTCA9IFlBSE9PLmxhbmcsCiAgICAgICAgSiA9
IHsKICAgICAgICBCRUZPUkVfU1VCTUlUOiAiYmVmb3JlU3VibWl0IiwKICAgICAgICBTVUJNSVQ6
ICJzdWJtaXQiLAogICAgICAgIE1BTlVBTF9TVUJNSVQ6ICJtYW51YWxTdWJtaXQiLAogICAgICAg
IEFTWU5DX1NVQk1JVDogImFzeW5jU3VibWl0IiwKICAgICAgICBGT1JNX1NVQk1JVDogImZvcm1T
dWJtaXQiLAogICAgICAgIENBTkNFTDogImNhbmNlbCIKICAgIH0sCiAgICAgICAgTyA9IHsKICAg
ICAgICBQT1NUX01FVEhPRDogewogICAgICAgICAgICBrZXk6ICJwb3N0bWV0aG9kIiwKICAgICAg
ICAgICAgdmFsdWU6ICJhc3luYyIKICAgICAgICB9LAogICAgICAgIFBPU1RfREFUQTogewogICAg
ICAgICAgICBrZXk6ICJwb3N0ZGF0YSIsCiAgICAgICAgICAgIHZhbHVlOiBudWxsCiAgICAgICAg
fSwKICAgICAgICBCVVRUT05TOiB7CiAgICAgICAgICAgIGtleTogImJ1dHRvbnMiLAogICAgICAg
ICAgICB2YWx1ZTogIm5vbmUiLAogICAgICAgICAgICBzdXBlcmNlZGVzOiBbInZpc2libGUiXQog
ICAgICAgIH0sCiAgICAgICAgSElERUFGVEVSU1VCTUlUOiB7CiAgICAgICAgICAgIGtleTogImhp
ZGVhZnRlcnN1Ym1pdCIsCiAgICAgICAgICAgIHZhbHVlOiB0cnVlCiAgICAgICAgfQogICAgfTsK
ICAgIEkuQ1NTX0RJQUxPRyA9ICJ5dWktZGlhbG9nIjsKCiAgICBmdW5jdGlvbiBOKCkgewogICAg
ICAgIHZhciBBID0gdGhpcy5fYUJ1dHRvbnMsCiAgICAgICAgICAgIEMsIEIsIEQ7CiAgICAgICAg
aWYgKEwuaXNBcnJheShBKSkgewogICAgICAgICAgICBDID0gQS5sZW5ndGg7CiAgICAgICAgICAg
IGlmIChDID4gMCkgewogICAgICAgICAgICAgICAgRCA9IEMgLSAxOwogICAgICAgICAgICAgICAg
ZG8gewogICAgICAgICAgICAgICAgICAgIEIgPSBBW0RdOwogICAgICAgICAgICAgICAgICAgIGlm
IChZQUhPTy53aWRnZXQuQnV0dG9uICYmIEIgaW5zdGFuY2VvZiBZQUhPTy53aWRnZXQuQnV0dG9u
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEIuZGVzdHJveSgpCiAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEIudGFnTmFtZS50b1VwcGVy
Q2FzZSgpID09ICJCVVRUT04iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQLnB1cmdl
RWxlbWVudChCKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFAucHVyZ2VFbGVtZW50KEIs
IGZhbHNlKQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgfSB3aGlsZSAoRC0tKQogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
fQogICAgWUFIT08uZXh0ZW5kKEksIFlBSE9PLndpZGdldC5QYW5lbCwgewogICAgICAgIGZvcm06
IG51bGwsCiAgICAgICAgaW5pdERlZmF1bHRDb25maWc6IGZ1bmN0aW9uICgpIHsKICAgICAgICAg
ICAgSS5zdXBlcmNsYXNzLmluaXREZWZhdWx0Q29uZmlnLmNhbGwodGhpcyk7CiAgICAgICAgICAg
IHRoaXMuY2FsbGJhY2sgPSB7CiAgICAgICAgICAgICAgICBzdWNjZXNzOiBudWxsLAogICAgICAg
ICAgICAgICAgZmFpbHVyZTogbnVsbCwKICAgICAgICAgICAgICAgIGFyZ3VtZW50OiBudWxsCiAg
ICAgICAgICAgIH07CiAgICAgICAgICAgIHRoaXMuY2ZnLmFkZFByb3BlcnR5KE8uUE9TVF9NRVRI
T0Qua2V5LCB7CiAgICAgICAgICAgICAgICBoYW5kbGVyOiB0aGlzLmNvbmZpZ1Bvc3RNZXRob2Qs
CiAgICAgICAgICAgICAgICB2YWx1ZTogTy5QT1NUX01FVEhPRC52YWx1ZSwKICAgICAgICAgICAg
ICAgIHZhbGlkYXRvcjogZnVuY3Rpb24gKEEpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoQSAh
PSAiZm9ybSIgJiYgQSAhPSAiYXN5bmMiICYmIEEgIT0gIm5vbmUiICYmIEEgIT0gIm1hbnVhbCIp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlCiAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWUKICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAg
ICB0aGlzLmNmZy5hZGRQcm9wZXJ0eShPLlBPU1RfREFUQS5rZXksIHsKICAgICAgICAgICAgICAg
IHZhbHVlOiBPLlBPU1RfREFUQS52YWx1ZQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdGhp
cy5jZmcuYWRkUHJvcGVydHkoTy5ISURFQUZURVJTVUJNSVQua2V5LCB7CiAgICAgICAgICAgICAg
ICB2YWx1ZTogTy5ISURFQUZURVJTVUJNSVQudmFsdWUKICAgICAgICAgICAgfSk7CiAgICAgICAg
ICAgIHRoaXMuY2ZnLmFkZFByb3BlcnR5KE8uQlVUVE9OUy5rZXksIHsKICAgICAgICAgICAgICAg
IGhhbmRsZXI6IHRoaXMuY29uZmlnQnV0dG9ucywKICAgICAgICAgICAgICAgIHZhbHVlOiBPLkJV
VFRPTlMudmFsdWUsCiAgICAgICAgICAgICAgICBzdXBlcmNlZGVzOiBPLkJVVFRPTlMuc3VwZXJj
ZWRlcwogICAgICAgICAgICB9KQogICAgICAgIH0sCiAgICAgICAgaW5pdEV2ZW50czogZnVuY3Rp
b24gKCkgewogICAgICAgICAgICBJLnN1cGVyY2xhc3MuaW5pdEV2ZW50cy5jYWxsKHRoaXMpOwog
ICAgICAgICAgICB2YXIgQSA9IEsuTElTVDsKICAgICAgICAgICAgdGhpcy5iZWZvcmVTdWJtaXRF
dmVudCA9IHRoaXMuY3JlYXRlRXZlbnQoSi5CRUZPUkVfU1VCTUlUKTsKICAgICAgICAgICAgdGhp
cy5iZWZvcmVTdWJtaXRFdmVudC5zaWduYXR1cmUgPSBBOwogICAgICAgICAgICB0aGlzLnN1Ym1p
dEV2ZW50ID0gdGhpcy5jcmVhdGVFdmVudChKLlNVQk1JVCk7CiAgICAgICAgICAgIHRoaXMuc3Vi
bWl0RXZlbnQuc2lnbmF0dXJlID0gQTsKICAgICAgICAgICAgdGhpcy5tYW51YWxTdWJtaXRFdmVu
dCA9IHRoaXMuY3JlYXRlRXZlbnQoSi5NQU5VQUxfU1VCTUlUKTsKICAgICAgICAgICAgdGhpcy5t
YW51YWxTdWJtaXRFdmVudC5zaWduYXR1cmUgPSBBOwogICAgICAgICAgICB0aGlzLmFzeW5jU3Vi
bWl0RXZlbnQgPSB0aGlzLmNyZWF0ZUV2ZW50KEouQVNZTkNfU1VCTUlUKTsKICAgICAgICAgICAg
dGhpcy5hc3luY1N1Ym1pdEV2ZW50LnNpZ25hdHVyZSA9IEE7CiAgICAgICAgICAgIHRoaXMuZm9y
bVN1Ym1pdEV2ZW50ID0gdGhpcy5jcmVhdGVFdmVudChKLkZPUk1fU1VCTUlUKTsKICAgICAgICAg
ICAgdGhpcy5mb3JtU3VibWl0RXZlbnQuc2lnbmF0dXJlID0gQTsKICAgICAgICAgICAgdGhpcy5j
YW5jZWxFdmVudCA9IHRoaXMuY3JlYXRlRXZlbnQoSi5DQU5DRUwpOwogICAgICAgICAgICB0aGlz
LmNhbmNlbEV2ZW50LnNpZ25hdHVyZSA9IEEKICAgICAgICB9LAogICAgICAgIGluaXQ6IGZ1bmN0
aW9uIChBLCBCKSB7CiAgICAgICAgICAgIEkuc3VwZXJjbGFzcy5pbml0LmNhbGwodGhpcywgQSk7
CiAgICAgICAgICAgIHRoaXMuYmVmb3JlSW5pdEV2ZW50LmZpcmUoSSk7CiAgICAgICAgICAgIE0u
YWRkQ2xhc3ModGhpcy5lbGVtZW50LCBJLkNTU19ESUFMT0cpOwogICAgICAgICAgICB0aGlzLmNm
Zy5zZXRQcm9wZXJ0eSgidmlzaWJsZSIsIGZhbHNlKTsKICAgICAgICAgICAgaWYgKEIpIHsKICAg
ICAgICAgICAgICAgIHRoaXMuY2ZnLmFwcGx5Q29uZmlnKEIsIHRydWUpCiAgICAgICAgICAgIH0K
ICAgICAgICAgICAgdGhpcy5zaG93RXZlbnQuc3Vic2NyaWJlKHRoaXMuZm9jdXNGaXJzdCwgdGhp
cywgdHJ1ZSk7CiAgICAgICAgICAgIHRoaXMuYmVmb3JlSGlkZUV2ZW50LnN1YnNjcmliZSh0aGlz
LmJsdXJCdXR0b25zLCB0aGlzLCB0cnVlKTsKICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmUoImNo
YW5nZUJvZHkiLCB0aGlzLnJlZ2lzdGVyRm9ybSk7CiAgICAgICAgICAgIHRoaXMuaW5pdEV2ZW50
LmZpcmUoSSkKICAgICAgICB9LAogICAgICAgIGRvU3VibWl0OiBmdW5jdGlvbiAoKSB7CiAgICAg
ICAgICAgIHZhciBDID0gWUFIT08udXRpbC5Db25uZWN0LAogICAgICAgICAgICAgICAgQiA9IHRo
aXMuZm9ybSwKICAgICAgICAgICAgICAgIEggPSBmYWxzZSwKICAgICAgICAgICAgICAgIEUgPSBm
YWxzZSwKICAgICAgICAgICAgICAgIEEsIEYsIEcsIFQ7CiAgICAgICAgICAgIHN3aXRjaCAodGhp
cy5jZmcuZ2V0UHJvcGVydHkoInBvc3RtZXRob2QiKSkgewogICAgICAgICAgICBjYXNlICJhc3lu
YyI6CiAgICAgICAgICAgICAgICBBID0gQi5lbGVtZW50czsKICAgICAgICAgICAgICAgIEYgPSBB
Lmxlbmd0aDsKICAgICAgICAgICAgICAgIGlmIChGID4gMCkgewogICAgICAgICAgICAgICAgICAg
IEcgPSBGIC0gMTsKICAgICAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChBW0ddLnR5cGUgPT0gImZpbGUiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBIID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChHLS0pCiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoSCAmJiBZQUhPTy5lbnYudWEuaWUgJiYgdGhp
cy5pc1NlY3VyZSkgewogICAgICAgICAgICAgICAgICAgIEUgPSB0cnVlCiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICBUID0gdGhpcy5fZ2V0Rm9ybUF0dHJpYnV0ZXMoQik7CiAgICAg
ICAgICAgICAgICBDLnNldEZvcm0oQiwgSCwgRSk7CiAgICAgICAgICAgICAgICB2YXIgUyA9IHRo
aXMuY2ZnLmdldFByb3BlcnR5KCJwb3N0ZGF0YSIpOwogICAgICAgICAgICAgICAgdmFyIEQgPSBD
LmFzeW5jUmVxdWVzdChULm1ldGhvZCwgVC5hY3Rpb24sIHRoaXMuY2FsbGJhY2ssIFMpOwogICAg
ICAgICAgICAgICAgdGhpcy5hc3luY1N1Ym1pdEV2ZW50LmZpcmUoRCk7CiAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgY2FzZSAiZm9ybSI6CiAgICAgICAgICAgICAgICBCLnN1Ym1p
dCgpOwogICAgICAgICAgICAgICAgdGhpcy5mb3JtU3VibWl0RXZlbnQuZmlyZSgpOwogICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgIm5vbmUiOgogICAgICAgICAgICBjYXNl
ICJtYW51YWwiOgogICAgICAgICAgICAgICAgdGhpcy5tYW51YWxTdWJtaXRFdmVudC5maXJlKCk7
CiAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBf
Z2V0Rm9ybUF0dHJpYnV0ZXM6IGZ1bmN0aW9uIChCKSB7CiAgICAgICAgICAgIHZhciBEID0gewog
ICAgICAgICAgICAgICAgbWV0aG9kOiBudWxsLAogICAgICAgICAgICAgICAgYWN0aW9uOiBudWxs
CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIGlmIChCKSB7CiAgICAgICAgICAgICAgICBpZiAo
Qi5nZXRBdHRyaWJ1dGVOb2RlKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIEMgPSBCLmdldEF0
dHJpYnV0ZU5vZGUoImFjdGlvbiIpOwogICAgICAgICAgICAgICAgICAgIHZhciBBID0gQi5nZXRB
dHRyaWJ1dGVOb2RlKCJtZXRob2QiKTsKICAgICAgICAgICAgICAgICAgICBpZiAoQykgewogICAg
ICAgICAgICAgICAgICAgICAgICBELmFjdGlvbiA9IEMudmFsdWUKICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKEEpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
RC5tZXRob2QgPSBBLnZhbHVlCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBELmFjdGlvbiA9IEIuZ2V0QXR0cmlidXRlKCJh
Y3Rpb24iKTsKICAgICAgICAgICAgICAgICAgICBELm1ldGhvZCA9IEIuZ2V0QXR0cmlidXRlKCJt
ZXRob2QiKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIEQubWV0
aG9kID0gKEwuaXNTdHJpbmcoRC5tZXRob2QpID8gRC5tZXRob2QgOiAiUE9TVCIpLnRvVXBwZXJD
YXNlKCk7CiAgICAgICAgICAgIEQuYWN0aW9uID0gTC5pc1N0cmluZyhELmFjdGlvbikgPyBELmFj
dGlvbiA6ICIiOwogICAgICAgICAgICByZXR1cm4gRAogICAgICAgIH0sCiAgICAgICAgcmVnaXN0
ZXJGb3JtOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBBID0gdGhpcy5lbGVtZW50Lmdl
dEVsZW1lbnRzQnlUYWdOYW1lKCJmb3JtIilbMF07CiAgICAgICAgICAgIGlmICh0aGlzLmZvcm0p
IHsKICAgICAgICAgICAgICAgIGlmICh0aGlzLmZvcm0gPT0gQSAmJiBNLmlzQW5jZXN0b3IodGhp
cy5lbGVtZW50LCB0aGlzLmZvcm0pKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIFAucHVyZ2VFbGVtZW50KHRo
aXMuZm9ybSk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtID0gbnVsbAogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghQSkgewogICAgICAgICAgICAg
ICAgQSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImZvcm0iKTsKICAgICAgICAgICAgICAgIEEu
bmFtZSA9ICJmcm1fIiArIHRoaXMuaWQ7CiAgICAgICAgICAgICAgICB0aGlzLmJvZHkuYXBwZW5k
Q2hpbGQoQSkKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoQSkgewogICAgICAgICAgICAg
ICAgdGhpcy5mb3JtID0gQTsKICAgICAgICAgICAgICAgIFAub24oQSwgInN1Ym1pdCIsIHRoaXMu
X3N1Ym1pdEhhbmRsZXIsIHRoaXMsIHRydWUpCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAg
ICAgIF9zdWJtaXRIYW5kbGVyOiBmdW5jdGlvbiAoQSkgewogICAgICAgICAgICBQLnN0b3BFdmVu
dChBKTsKICAgICAgICAgICAgdGhpcy5zdWJtaXQoKTsKICAgICAgICAgICAgdGhpcy5mb3JtLmJs
dXIoKQogICAgICAgIH0sCiAgICAgICAgc2V0VGFiTG9vcDogZnVuY3Rpb24gKEIsIEEpIHsKICAg
ICAgICAgICAgQiA9IEIgfHwgdGhpcy5maXJzdEJ1dHRvbjsKICAgICAgICAgICAgQSA9IHRoaXMu
bGFzdEJ1dHRvbiB8fCBBOwogICAgICAgICAgICBJLnN1cGVyY2xhc3Muc2V0VGFiTG9vcC5jYWxs
KHRoaXMsIEIsIEEpCiAgICAgICAgfSwKICAgICAgICBzZXRGaXJzdExhc3RGb2N1c2FibGU6IGZ1
bmN0aW9uICgpIHsKICAgICAgICAgICAgSS5zdXBlcmNsYXNzLnNldEZpcnN0TGFzdEZvY3VzYWJs
ZS5jYWxsKHRoaXMpOwogICAgICAgICAgICB2YXIgQywgRCwgQiwgQSA9IHRoaXMuZm9jdXNhYmxl
RWxlbWVudHM7CiAgICAgICAgICAgIHRoaXMuZmlyc3RGb3JtRWxlbWVudCA9IG51bGw7CiAgICAg
ICAgICAgIHRoaXMubGFzdEZvcm1FbGVtZW50ID0gbnVsbDsKICAgICAgICAgICAgaWYgKHRoaXMu
Zm9ybSAmJiBBICYmIEEubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgRCA9IEEubGVuZ3Ro
OwogICAgICAgICAgICAgICAgZm9yIChDID0gMDsKICAgICAgICAgICAgICAgIEMgPCBEOyArK0Mp
IHsKICAgICAgICAgICAgICAgICAgICBCID0gQVtDXTsKICAgICAgICAgICAgICAgICAgICBpZiAo
dGhpcy5mb3JtID09PSBCLmZvcm0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJz
dEZvcm1FbGVtZW50ID0gQjsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmb3IgKEMgPSBE
IC0gMTsKICAgICAgICAgICAgICAgIEMgPj0gMDsgLS1DKSB7CiAgICAgICAgICAgICAgICAgICAg
QiA9IEFbQ107CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9ybSA9PT0gQi5mb3JtKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdEZvcm1FbGVtZW50ID0gQjsKICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGNvbmZpZ0Nsb3NlOiBmdW5j
dGlvbiAoQiwgQywgQSkgewogICAgICAgICAgICBJLnN1cGVyY2xhc3MuY29uZmlnQ2xvc2UuYXBw
bHkodGhpcywgYXJndW1lbnRzKQogICAgICAgIH0sCiAgICAgICAgX2RvQ2xvc2U6IGZ1bmN0aW9u
IChBKSB7CiAgICAgICAgICAgIFAucHJldmVudERlZmF1bHQoQSk7CiAgICAgICAgICAgIHRoaXMu
Y2FuY2VsKCkKICAgICAgICB9LAogICAgICAgIGNvbmZpZ0J1dHRvbnM6IGZ1bmN0aW9uIChDLCBE
LCBWKSB7CiAgICAgICAgICAgIHZhciBIID0gWUFIT08ud2lkZ2V0LkJ1dHRvbiwKICAgICAgICAg
ICAgICAgIEEgPSBEWzBdLAogICAgICAgICAgICAgICAgWCA9IHRoaXMuaW5uZXJFbGVtZW50LAog
ICAgICAgICAgICAgICAgQiwgRiwgWSwgRSwgRywgWiwgVzsKICAgICAgICAgICAgTi5jYWxsKHRo
aXMpOwogICAgICAgICAgICB0aGlzLl9hQnV0dG9ucyA9IG51bGw7CiAgICAgICAgICAgIGlmIChM
LmlzQXJyYXkoQSkpIHsKICAgICAgICAgICAgICAgIEcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJzcGFuIik7CiAgICAgICAgICAgICAgICBHLmNsYXNzTmFtZSA9ICJidXR0b24tZ3JvdXAiOwog
ICAgICAgICAgICAgICAgRSA9IEEubGVuZ3RoOwogICAgICAgICAgICAgICAgdGhpcy5fYUJ1dHRv
bnMgPSBbXTsKICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdEh0bWxCdXR0b24gPSBudWxsOwog
ICAgICAgICAgICAgICAgZm9yIChXID0gMDsKICAgICAgICAgICAgICAgIFcgPCBFOwogICAgICAg
ICAgICAgICAgVysrKSB7CiAgICAgICAgICAgICAgICAgICAgQiA9IEFbV107CiAgICAgICAgICAg
ICAgICAgICAgaWYgKEgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgWSA9IG5ldyBIKHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBCLnRleHQKICAgICAgICAgICAgICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIFkuYXBwZW5kVG8oRyk7CiAgICAgICAg
ICAgICAgICAgICAgICAgIEYgPSBZLmdldCgiZWxlbWVudCIpOwogICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoQi5pc0RlZmF1bHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFkuYWRk
Q2xhc3MoImRlZmF1bHQiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVs
dEh0bWxCdXR0b24gPSBGCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKEwuaXNGdW5jdGlvbihCLmhhbmRsZXIpKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBZLnNldCgib25jbGljayIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmbjogQi5oYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iajog
dGhpcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZTogdGhpcwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMLmlzT2JqZWN0KEIuaGFuZGxlcikgJiYg
TC5pc0Z1bmN0aW9uKEIuaGFuZGxlci5mbikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBZLnNldCgib25jbGljayIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm46IEIuaGFuZGxlci5mbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b2JqOiAoKCFMLmlzVW5kZWZpbmVkKEIuaGFuZGxlci5vYmopKSA/IEIuaGFuZGxlci5vYmogOiB0
aGlzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGU6IChCLmhhbmRs
ZXIuc2NvcGUgfHwgdGhpcykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMuX2FCdXR0b25zW3RoaXMuX2FCdXR0b25zLmxlbmd0aF0g
PSBZCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAg
RiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpOwogICAgICAgICAgICAgICAgICAg
ICAgICBGLnNldEF0dHJpYnV0ZSgidHlwZSIsICJidXR0b24iKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKEIuaXNEZWZhdWx0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGLmNs
YXNzTmFtZSA9ICJkZWZhdWx0IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVm
YXVsdEh0bWxCdXR0b24gPSBGCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgRi5pbm5lckhUTUwgPSBCLnRleHQ7CiAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChMLmlzRnVuY3Rpb24oQi5oYW5kbGVyKSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUC5vbihGLCAiY2xpY2siLCBCLmhhbmRsZXIsIHRoaXMsIHRydWUpCiAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTC5pc09i
amVjdChCLmhhbmRsZXIpICYmIEwuaXNGdW5jdGlvbihCLmhhbmRsZXIuZm4pKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUC5vbihGLCAiY2xpY2siLCBCLmhhbmRsZXIuZm4sICgo
IUwuaXNVbmRlZmluZWQoQi5oYW5kbGVyLm9iaikpID8gQi5oYW5kbGVyLm9iaiA6IHRoaXMpLCAo
Qi5oYW5kbGVyLnNjb3BlIHx8IHRoaXMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIEcuYXBwZW5k
Q2hpbGQoRik7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FCdXR0b25zW3RoaXMuX2FC
dXR0b25zLmxlbmd0aF0gPSBGCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgIEIuaHRtbEJ1dHRvbiA9IEY7CiAgICAgICAgICAgICAgICAgICAgaWYgKFcgPT09IDApIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJzdEJ1dHRvbiA9IEYKICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKFcgPT0gKEUgLSAxKSkgewogICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLmxhc3RCdXR0b24gPSBGCiAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhpcy5zZXRGb290ZXIoRyk7CiAg
ICAgICAgICAgICAgICBaID0gdGhpcy5mb290ZXI7CiAgICAgICAgICAgICAgICBpZiAoTS5pbkRv
Y3VtZW50KHRoaXMuZWxlbWVudCkgJiYgIU0uaXNBbmNlc3RvcihYLCBaKSkgewogICAgICAgICAg
ICAgICAgICAgIFguYXBwZW5kQ2hpbGQoWikKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIHRoaXMuYnV0dG9uU3BhbiA9IEcKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgIEcgPSB0aGlzLmJ1dHRvblNwYW47CiAgICAgICAgICAgICAgICBaID0gdGhpcy5mb290ZXI7
CiAgICAgICAgICAgICAgICBpZiAoRyAmJiBaKSB7CiAgICAgICAgICAgICAgICAgICAgWi5yZW1v
dmVDaGlsZChHKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvblNwYW4gPSBudWxsOwog
ICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RCdXR0b24gPSBudWxsOwogICAgICAgICAgICAg
ICAgICAgIHRoaXMubGFzdEJ1dHRvbiA9IG51bGw7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5k
ZWZhdWx0SHRtbEJ1dHRvbiA9IG51bGwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQog
ICAgICAgICAgICB0aGlzLmNoYW5nZUNvbnRlbnRFdmVudC5maXJlKCkKICAgICAgICB9LAogICAg
ICAgIGdldEJ1dHRvbnM6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FC
dXR0b25zIHx8IG51bGwKICAgICAgICB9LAogICAgICAgIGZvY3VzRmlyc3Q6IGZ1bmN0aW9uIChC
LCBELCBFKSB7CiAgICAgICAgICAgIHZhciBDID0gdGhpcy5maXJzdEZvcm1FbGVtZW50OwogICAg
ICAgICAgICBpZiAoRCAmJiBEWzFdKSB7CiAgICAgICAgICAgICAgICBQLnN0b3BFdmVudChEWzFd
KQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChDKSB7CiAgICAgICAgICAgICAgICB0cnkg
ewogICAgICAgICAgICAgICAgICAgIEMuZm9jdXMoKQogICAgICAgICAgICAgICAgfSBjYXRjaChB
KSB7fQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVmYXVs
dEh0bWxCdXR0b24pIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzRGVmYXVsdEJ1dHRv
bigpCiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHRoaXMuZm9j
dXNGaXJzdEJ1dHRvbigpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9
LAogICAgICAgIGZvY3VzTGFzdDogZnVuY3Rpb24gKEIsIEQsIEYpIHsKICAgICAgICAgICAgdmFy
IEUgPSB0aGlzLmNmZy5nZXRQcm9wZXJ0eSgiYnV0dG9ucyIpLAogICAgICAgICAgICAgICAgQyA9
IHRoaXMubGFzdEZvcm1FbGVtZW50OwogICAgICAgICAgICBpZiAoRCAmJiBEWzFdKSB7CiAgICAg
ICAgICAgICAgICBQLnN0b3BFdmVudChEWzFdKQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlm
IChFICYmIEwuaXNBcnJheShFKSkgewogICAgICAgICAgICAgICAgdGhpcy5mb2N1c0xhc3RCdXR0
b24oKQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKEMpIHsKICAgICAg
ICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICBDLmZvY3VzKCkKICAg
ICAgICAgICAgICAgICAgICB9IGNhdGNoKEEpIHt9CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgIH0KICAgICAgICB9LAogICAgICAgIF9nZXRCdXR0b246IGZ1bmN0aW9uIChBKSB7CiAgICAg
ICAgICAgIHZhciBCID0gWUFIT08ud2lkZ2V0LkJ1dHRvbjsKICAgICAgICAgICAgaWYgKEIgJiYg
QSAmJiBBLm5vZGVOYW1lICYmIEEuaWQpIHsKICAgICAgICAgICAgICAgIEEgPSBCLmdldEJ1dHRv
bihBLmlkKSB8fCBBCiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIEEKICAgICAgICB9
LAogICAgICAgIGZvY3VzRGVmYXVsdEJ1dHRvbjogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2
YXIgQiA9IHRoaXMuX2dldEJ1dHRvbih0aGlzLmRlZmF1bHRIdG1sQnV0dG9uKTsKICAgICAgICAg
ICAgaWYgKEIpIHsKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgQi5m
b2N1cygpCiAgICAgICAgICAgICAgICB9IGNhdGNoKEEpIHt9CiAgICAgICAgICAgIH0KICAgICAg
ICB9LAogICAgICAgIGJsdXJCdXR0b25zOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBF
ID0gdGhpcy5jZmcuZ2V0UHJvcGVydHkoImJ1dHRvbnMiKSwKICAgICAgICAgICAgICAgIEIsIEYs
IEMsIEQ7CiAgICAgICAgICAgIGlmIChFICYmIEwuaXNBcnJheShFKSkgewogICAgICAgICAgICAg
ICAgQiA9IEUubGVuZ3RoOwogICAgICAgICAgICAgICAgaWYgKEIgPiAwKSB7CiAgICAgICAgICAg
ICAgICAgICAgRCA9IChCIC0gMSk7CiAgICAgICAgICAgICAgICAgICAgZG8gewogICAgICAgICAg
ICAgICAgICAgICAgICBGID0gRVtEXTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEYpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMgPSB0aGlzLl9nZXRCdXR0b24oRi5odG1sQnV0
dG9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChDKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQy5ibHVyKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKEEpIHt9
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChELS0pCiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGZvY3VzRmlyc3RCdXR0b246IGZ1bmN0aW9uICgp
IHsKICAgICAgICAgICAgdmFyIEEgPSB0aGlzLmNmZy5nZXRQcm9wZXJ0eSgiYnV0dG9ucyIpLAog
ICAgICAgICAgICAgICAgQiwgRDsKICAgICAgICAgICAgaWYgKEEgJiYgTC5pc0FycmF5KEEpKSB7
CiAgICAgICAgICAgICAgICBCID0gQVswXTsKICAgICAgICAgICAgICAgIGlmIChCKSB7CiAgICAg
ICAgICAgICAgICAgICAgRCA9IHRoaXMuX2dldEJ1dHRvbihCLmh0bWxCdXR0b24pOwogICAgICAg
ICAgICAgICAgICAgIGlmIChEKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBELmZvY3VzKCkKICAgICAgICAgICAgICAgICAgICAgICAg
fSBjYXRjaChDKSB7fQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgZm9jdXNMYXN0QnV0dG9uOiBmdW5jdGlvbiAo
KSB7CiAgICAgICAgICAgIHZhciBFID0gdGhpcy5jZmcuZ2V0UHJvcGVydHkoImJ1dHRvbnMiKSwK
ICAgICAgICAgICAgICAgIEMsIEEsIEQ7CiAgICAgICAgICAgIGlmIChFICYmIEwuaXNBcnJheShF
KSkgewogICAgICAgICAgICAgICAgQyA9IEUubGVuZ3RoOwogICAgICAgICAgICAgICAgaWYgKEMg
PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgQSA9IEVbKEMgLSAxKV07CiAgICAgICAgICAgICAg
ICAgICAgaWYgKEEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgRCA9IHRoaXMuX2dldEJ1dHRv
bihBLmh0bWxCdXR0b24pOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoRCkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBELmZvY3VzKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goQikge30KICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgY29uZmlnUG9zdE1ldGhvZDog
ZnVuY3Rpb24gKEIsIEMsIEEpIHsKICAgICAgICAgICAgdGhpcy5yZWdpc3RlckZvcm0oKQogICAg
ICAgIH0sCiAgICAgICAgdmFsaWRhdGU6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJu
IHRydWUKICAgICAgICB9LAogICAgICAgIHN1Ym1pdDogZnVuY3Rpb24gKCkgewogICAgICAgICAg
ICBpZiAodGhpcy52YWxpZGF0ZSgpKSB7CiAgICAgICAgICAgICAgICBpZiAodGhpcy5iZWZvcmVT
dWJtaXRFdmVudC5maXJlKCkpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmRvU3VibWl0KCk7
CiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXRFdmVudC5maXJlKCk7CiAgICAgICAgICAg
ICAgICAgICAgaWYgKHRoaXMuY2ZnLmdldFByb3BlcnR5KCJoaWRlYWZ0ZXJzdWJtaXQiKSkgewog
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGUoKQogICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZQogICAgICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2UKICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZQogICAgICAgICAgICB9
CiAgICAgICAgfSwKICAgICAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhp
cy5jYW5jZWxFdmVudC5maXJlKCk7CiAgICAgICAgICAgIHRoaXMuaGlkZSgpCiAgICAgICAgfSwK
ICAgICAgICBnZXREYXRhOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBCID0gdGhpcy5m
b3JtLAogICAgICAgICAgICAgICAgaiwgYiwgRiwgaCwgSCwgZCwgZSwgaywgRSwgaSwgRCwgQSwg
ZiwgbCwgZywgQywgRzsKCiAgICAgICAgICAgIGZ1bmN0aW9uIGMoUikgewogICAgICAgICAgICAg
ICAgdmFyIFEgPSBSLnRhZ05hbWUudG9VcHBlckNhc2UoKTsKICAgICAgICAgICAgICAgIHJldHVy
biAoKFEgPT0gIklOUFVUIiB8fCBRID09ICJURVhUQVJFQSIgfHwgUSA9PSAiU0VMRUNUIikgJiYg
Ui5uYW1lID09IGgpCiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKEIpIHsKICAgICAgICAg
ICAgICAgIGogPSBCLmVsZW1lbnRzOwogICAgICAgICAgICAgICAgYiA9IGoubGVuZ3RoOwogICAg
ICAgICAgICAgICAgRiA9IHt9OwogICAgICAgICAgICAgICAgZm9yIChDID0gMDsKICAgICAgICAg
ICAgICAgIEMgPCBiOwogICAgICAgICAgICAgICAgQysrKSB7CiAgICAgICAgICAgICAgICAgICAg
aCA9IGpbQ10ubmFtZTsKICAgICAgICAgICAgICAgICAgICBIID0gTS5nZXRFbGVtZW50c0J5KGMs
ICIqIiwgQik7CiAgICAgICAgICAgICAgICAgICAgZCA9IEgubGVuZ3RoOwogICAgICAgICAgICAg
ICAgICAgIGlmIChkID4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZCA9PSAxKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBIID0gSFswXTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGUgPSBILnR5cGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gSC50
YWdOYW1lLnRvVXBwZXJDYXNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2gg
KGspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIklOUFVUIjoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoZSA9PSAiY2hlY2tib3giKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEZbaF0gPSBILmNoZWNrZWQKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoZSAhPSAicmFkaW8iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBGW2hdID0gSC52YWx1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiVEVY
VEFSRUEiOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZbaF0gPSBILnZhbHVlOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSAiU0VMRUNUIjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBF
ID0gSC5vcHRpb25zOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBFLmxlbmd0
aDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEID0gW107CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yIChHID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHIDwgaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHKyspIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSA9IEVbR107CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChBLnNlbGVjdGVkKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnID0gQS5hdHRyaWJ1dGVzLnZhbHVlOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRFtELmxlbmd0aF0gPSAoZyAmJiBnLnNwZWNpZmll
ZCkgPyBBLnZhbHVlIDogQS50ZXh0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRltoXSA9IEQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBIWzBdLnR5cGU7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGUpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgInJhZGlvIjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KEcgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEcgPCBkOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEcrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmID0gSFtHXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGYuY2hlY2tlZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlto
XSA9IGYudmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
awogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiY2hlY2tib3giOgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEQgPSBbXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKEcgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEcgPCBkOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEcrKykgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsID0gSFtHXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGwuY2hlY2tlZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRFtELmxlbmd0aF0gPSBsLnZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRltoXSA9IEQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
fQogICAgICAgICAgICByZXR1cm4gRgogICAgICAgIH0sCiAgICAgICAgZGVzdHJveTogZnVuY3Rp
b24gKCkgewogICAgICAgICAgICBOLmNhbGwodGhpcyk7CiAgICAgICAgICAgIHRoaXMuX2FCdXR0
b25zID0gbnVsbDsKICAgICAgICAgICAgdmFyIEIgPSB0aGlzLmVsZW1lbnQuZ2V0RWxlbWVudHNC
eVRhZ05hbWUoImZvcm0iKSwKICAgICAgICAgICAgICAgIEE7CiAgICAgICAgICAgIGlmIChCLmxl
bmd0aCA+IDApIHsKICAgICAgICAgICAgICAgIEEgPSBCWzBdOwogICAgICAgICAgICAgICAgaWYg
KEEpIHsKICAgICAgICAgICAgICAgICAgICBQLnB1cmdlRWxlbWVudChBKTsKICAgICAgICAgICAg
ICAgICAgICBpZiAoQS5wYXJlbnROb2RlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEEucGFy
ZW50Tm9kZS5yZW1vdmVDaGlsZChBKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICB0aGlzLmZvcm0gPSBudWxsCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0K
ICAgICAgICAgICAgSS5zdXBlcmNsYXNzLmRlc3Ryb3kuY2FsbCh0aGlzKQogICAgICAgIH0sCiAg
ICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuICJEaWFsb2cg
IiArIHRoaXMuaWQKICAgICAgICB9CiAgICB9KQp9ICgpKTsKKGZ1bmN0aW9uICgpIHsKICAgIFlB
SE9PLndpZGdldC5TaW1wbGVEaWFsb2cgPSBmdW5jdGlvbiAoQSwgQikgewogICAgICAgIFlBSE9P
LndpZGdldC5TaW1wbGVEaWFsb2cuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIEEs
IEIpCiAgICB9OwogICAgdmFyIEUgPSBZQUhPTy51dGlsLkRvbSwKICAgICAgICBGID0gWUFIT08u
d2lkZ2V0LlNpbXBsZURpYWxvZywKICAgICAgICBEID0gewogICAgICAgIElDT046IHsKICAgICAg
ICAgICAga2V5OiAiaWNvbiIsCiAgICAgICAgICAgIHZhbHVlOiAibm9uZSIsCiAgICAgICAgICAg
IHN1cHByZXNzRXZlbnQ6IHRydWUKICAgICAgICB9LAogICAgICAgIFRFWFQ6IHsKICAgICAgICAg
ICAga2V5OiAidGV4dCIsCiAgICAgICAgICAgIHZhbHVlOiAiIiwKICAgICAgICAgICAgc3VwcHJl
c3NFdmVudDogdHJ1ZSwKICAgICAgICAgICAgc3VwZXJjZWRlczogWyJpY29uIl0KICAgICAgICB9
CiAgICB9OwogICAgRi5JQ09OX0JMT0NLID0gImJsY2tpY29uIjsKICAgIEYuSUNPTl9BTEFSTSA9
ICJhbHJ0aWNvbiI7CiAgICBGLklDT05fSEVMUCA9ICJobHBpY29uIjsKICAgIEYuSUNPTl9JTkZP
ID0gImluZm9pY29uIjsKICAgIEYuSUNPTl9XQVJOID0gIndhcm5pY29uIjsKICAgIEYuSUNPTl9U
SVAgPSAidGlwaWNvbiI7CiAgICBGLklDT05fQ1NTX0NMQVNTTkFNRSA9ICJ5dWktaWNvbiI7CiAg
ICBGLkNTU19TSU1QTEVESUFMT0cgPSAieXVpLXNpbXBsZS1kaWFsb2ciOwogICAgWUFIT08uZXh0
ZW5kKEYsIFlBSE9PLndpZGdldC5EaWFsb2csIHsKICAgICAgICBpbml0RGVmYXVsdENvbmZpZzog
ZnVuY3Rpb24gKCkgewogICAgICAgICAgICBGLnN1cGVyY2xhc3MuaW5pdERlZmF1bHRDb25maWcu
Y2FsbCh0aGlzKTsKICAgICAgICAgICAgdGhpcy5jZmcuYWRkUHJvcGVydHkoRC5JQ09OLmtleSwg
ewogICAgICAgICAgICAgICAgaGFuZGxlcjogdGhpcy5jb25maWdJY29uLAogICAgICAgICAgICAg
ICAgdmFsdWU6IEQuSUNPTi52YWx1ZSwKICAgICAgICAgICAgICAgIHN1cHByZXNzRXZlbnQ6IEQu
SUNPTi5zdXBwcmVzc0V2ZW50CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB0aGlzLmNmZy5h
ZGRQcm9wZXJ0eShELlRFWFQua2V5LCB7CiAgICAgICAgICAgICAgICBoYW5kbGVyOiB0aGlzLmNv
bmZpZ1RleHQsCiAgICAgICAgICAgICAgICB2YWx1ZTogRC5URVhULnZhbHVlLAogICAgICAgICAg
ICAgICAgc3VwcHJlc3NFdmVudDogRC5URVhULnN1cHByZXNzRXZlbnQsCiAgICAgICAgICAgICAg
ICBzdXBlcmNlZGVzOiBELlRFWFQuc3VwZXJjZWRlcwogICAgICAgICAgICB9KQogICAgICAgIH0s
CiAgICAgICAgaW5pdDogZnVuY3Rpb24gKEEsIEIpIHsKICAgICAgICAgICAgRi5zdXBlcmNsYXNz
LmluaXQuY2FsbCh0aGlzLCBBKTsKICAgICAgICAgICAgdGhpcy5iZWZvcmVJbml0RXZlbnQuZmly
ZShGKTsKICAgICAgICAgICAgRS5hZGRDbGFzcyh0aGlzLmVsZW1lbnQsIEYuQ1NTX1NJTVBMRURJ
QUxPRyk7CiAgICAgICAgICAgIHRoaXMuY2ZnLnF1ZXVlUHJvcGVydHkoInBvc3RtZXRob2QiLCAi
bWFudWFsIik7CiAgICAgICAgICAgIGlmIChCKSB7CiAgICAgICAgICAgICAgICB0aGlzLmNmZy5h
cHBseUNvbmZpZyhCLCB0cnVlKQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuYmVmb3Jl
UmVuZGVyRXZlbnQuc3Vic2NyaWJlKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIGlmICgh
dGhpcy5ib2R5KSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRCb2R5KCIiKQogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICB0aGlzLCB0cnVlKTsKICAgICAg
ICAgICAgdGhpcy5pbml0RXZlbnQuZmlyZShGKQogICAgICAgIH0sCiAgICAgICAgcmVnaXN0ZXJG
b3JtOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIEYuc3VwZXJjbGFzcy5yZWdpc3RlckZvcm0u
Y2FsbCh0aGlzKTsKICAgICAgICAgICAgdGhpcy5mb3JtLmlubmVySFRNTCArPSAnPGlucHV0IHR5
cGU9ImhpZGRlbiIgbmFtZT0iJyArIHRoaXMuaWQgKyAnIiB2YWx1ZT0iIi8+JwogICAgICAgIH0s
CiAgICAgICAgY29uZmlnSWNvbjogZnVuY3Rpb24gKEMsIE0sIE8pIHsKICAgICAgICAgICAgdmFy
IEEgPSBNWzBdLAogICAgICAgICAgICAgICAgUiA9IHRoaXMuYm9keSwKICAgICAgICAgICAgICAg
IFEgPSBGLklDT05fQ1NTX0NMQVNTTkFNRSwKICAgICAgICAgICAgICAgIEIsIE4sIFA7CiAgICAg
ICAgICAgIGlmIChBICYmIEEgIT0gIm5vbmUiKSB7CiAgICAgICAgICAgICAgICBCID0gRS5nZXRF
bGVtZW50c0J5Q2xhc3NOYW1lKFEsICIqIiwgUik7CiAgICAgICAgICAgICAgICBpZiAoQi5sZW5n
dGggPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICBOID0gQlswXTsKICAgICAgICAgICAgICAg
ICAgICBQID0gTi5wYXJlbnROb2RlOwogICAgICAgICAgICAgICAgICAgIGlmIChQKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIFAucmVtb3ZlQ2hpbGQoTik7CiAgICAgICAgICAgICAgICAgICAg
ICAgIE4gPSBudWxsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgaWYgKEEuaW5kZXhPZigiLiIpID09IC0xKSB7CiAgICAgICAgICAgICAgICAg
ICAgTiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgICAgICAgICAgICAgICAg
ICBOLmNsYXNzTmFtZSA9IChRICsgIiAiICsgQSk7CiAgICAgICAgICAgICAgICAgICAgTi5pbm5l
ckhUTUwgPSAiJiMxNjA7IgogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAgICBOID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7CiAgICAgICAgICAgICAgICAg
ICAgTi5zcmMgPSAodGhpcy5pbWFnZVJvb3QgKyBBKTsKICAgICAgICAgICAgICAgICAgICBOLmNs
YXNzTmFtZSA9IFEKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChOKSB7CiAg
ICAgICAgICAgICAgICAgICAgUi5pbnNlcnRCZWZvcmUoTiwgUi5maXJzdENoaWxkKQogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBjb25maWdUZXh0OiBm
dW5jdGlvbiAoQywgSCwgQikgewogICAgICAgICAgICB2YXIgQSA9IEhbMF07CiAgICAgICAgICAg
IGlmIChBKSB7CiAgICAgICAgICAgICAgICB0aGlzLnNldEJvZHkoQSk7CiAgICAgICAgICAgICAg
ICB0aGlzLmNmZy5yZWZpcmVFdmVudCgiaWNvbiIpCiAgICAgICAgICAgIH0KICAgICAgICB9LAog
ICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVybiAiU2ltcGxl
RGlhbG9nICIgKyB0aGlzLmlkCiAgICAgICAgfQogICAgfSkKfSAoKSk7CihmdW5jdGlvbiAoKSB7
CiAgICBZQUhPTy53aWRnZXQuQ29udGFpbmVyRWZmZWN0ID0gZnVuY3Rpb24gKEksIEEsIEIsIEos
IEMpIHsKICAgICAgICBpZiAoIUMpIHsKICAgICAgICAgICAgQyA9IFlBSE9PLnV0aWwuQW5pbQog
ICAgICAgIH0KICAgICAgICB0aGlzLm92ZXJsYXkgPSBJOwogICAgICAgIHRoaXMuYXR0ckluID0g
QTsKICAgICAgICB0aGlzLmF0dHJPdXQgPSBCOwogICAgICAgIHRoaXMudGFyZ2V0RWxlbWVudCA9
IEogfHwgSS5lbGVtZW50OwogICAgICAgIHRoaXMuYW5pbUNsYXNzID0gQwogICAgfTsKICAgIHZh
ciBGID0gWUFIT08udXRpbC5Eb20sCiAgICAgICAgRSA9IFlBSE9PLnV0aWwuQ3VzdG9tRXZlbnQs
CiAgICAgICAgRCA9IFlBSE9PLndpZGdldC5Db250YWluZXJFZmZlY3Q7CiAgICBELkZBREUgPSBm
dW5jdGlvbiAoTCwgSikgewogICAgICAgIHZhciBDID0gWUFIT08udXRpbC5FYXNpbmcsCiAgICAg
ICAgICAgIEEgPSB7CiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICAgICAgICAgIG9w
YWNpdHk6IHsKICAgICAgICAgICAgICAgICAgICBmcm9tOiAwLAogICAgICAgICAgICAgICAgICAg
IHRvOiAxCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGR1cmF0
aW9uOiBKLAogICAgICAgICAgICBtZXRob2Q6IEMuZWFzZUluCiAgICAgICAgfSwKICAgICAgICAg
ICAgSyA9IHsKICAgICAgICAgICAgYXR0cmlidXRlczogewogICAgICAgICAgICAgICAgb3BhY2l0
eTogewogICAgICAgICAgICAgICAgICAgIHRvOiAwCiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgIH0sCiAgICAgICAgICAgIGR1cmF0aW9uOiBKLAogICAgICAgICAgICBtZXRob2Q6IEMuZWFz
ZU91dAogICAgICAgIH0sCiAgICAgICAgICAgIEIgPSBuZXcgRChMLCBBLCBLLCBMLmVsZW1lbnQp
OwogICAgICAgIEIuaGFuZGxlVW5kZXJsYXlTdGFydCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAg
ICAgdmFyIEcgPSB0aGlzLm92ZXJsYXkudW5kZXJsYXk7CiAgICAgICAgICAgIGlmIChHICYmIFlB
SE9PLmVudi51YS5pZSkgewogICAgICAgICAgICAgICAgdmFyIEggPSAoRy5maWx0ZXJzICYmIEcu
ZmlsdGVycy5sZW5ndGggPiAwKTsKICAgICAgICAgICAgICAgIGlmIChIKSB7CiAgICAgICAgICAg
ICAgICAgICAgRi5hZGRDbGFzcyhMLmVsZW1lbnQsICJ5dWktZWZmZWN0LWZhZGUiKQogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICBCLmhhbmRsZVVuZGVy
bGF5Q29tcGxldGUgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBHID0gdGhpcy5vdmVy
bGF5LnVuZGVybGF5OwogICAgICAgICAgICBpZiAoRyAmJiBZQUhPTy5lbnYudWEuaWUpIHsKICAg
ICAgICAgICAgICAgIEYucmVtb3ZlQ2xhc3MoTC5lbGVtZW50LCAieXVpLWVmZmVjdC1mYWRlIikK
ICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgQi5oYW5kbGVTdGFydEFuaW1hdGVJbiA9
IGZ1bmN0aW9uIChILCBJLCBHKSB7CiAgICAgICAgICAgIEYuYWRkQ2xhc3MoRy5vdmVybGF5LmVs
ZW1lbnQsICJoaWRlLXNlbGVjdCIpOwogICAgICAgICAgICBpZiAoIUcub3ZlcmxheS51bmRlcmxh
eSkgewogICAgICAgICAgICAgICAgRy5vdmVybGF5LmNmZy5yZWZpcmVFdmVudCgidW5kZXJsYXki
KQogICAgICAgICAgICB9CiAgICAgICAgICAgIEcuaGFuZGxlVW5kZXJsYXlTdGFydCgpOwogICAg
ICAgICAgICBHLm92ZXJsYXkuX3NldERvbVZpc2liaWxpdHkodHJ1ZSk7CiAgICAgICAgICAgIEYu
c2V0U3R5bGUoRy5vdmVybGF5LmVsZW1lbnQsICJvcGFjaXR5IiwgMCkKICAgICAgICB9OwogICAg
ICAgIEIuaGFuZGxlQ29tcGxldGVBbmltYXRlSW4gPSBmdW5jdGlvbiAoSCwgSSwgRykgewogICAg
ICAgICAgICBGLnJlbW92ZUNsYXNzKEcub3ZlcmxheS5lbGVtZW50LCAiaGlkZS1zZWxlY3QiKTsK
ICAgICAgICAgICAgaWYgKEcub3ZlcmxheS5lbGVtZW50LnN0eWxlLmZpbHRlcikgewogICAgICAg
ICAgICAgICAgRy5vdmVybGF5LmVsZW1lbnQuc3R5bGUuZmlsdGVyID0gbnVsbAogICAgICAgICAg
ICB9CiAgICAgICAgICAgIEcuaGFuZGxlVW5kZXJsYXlDb21wbGV0ZSgpOwogICAgICAgICAgICBH
Lm92ZXJsYXkuY2ZnLnJlZmlyZUV2ZW50KCJpZnJhbWUiKTsKICAgICAgICAgICAgRy5hbmltYXRl
SW5Db21wbGV0ZUV2ZW50LmZpcmUoKQogICAgICAgIH07CiAgICAgICAgQi5oYW5kbGVTdGFydEFu
aW1hdGVPdXQgPSBmdW5jdGlvbiAoSCwgSSwgRykgewogICAgICAgICAgICBGLmFkZENsYXNzKEcu
b3ZlcmxheS5lbGVtZW50LCAiaGlkZS1zZWxlY3QiKTsKICAgICAgICAgICAgRy5oYW5kbGVVbmRl
cmxheVN0YXJ0KCkKICAgICAgICB9OwogICAgICAgIEIuaGFuZGxlQ29tcGxldGVBbmltYXRlT3V0
ID0gZnVuY3Rpb24gKEgsIEksIEcpIHsKICAgICAgICAgICAgRi5yZW1vdmVDbGFzcyhHLm92ZXJs
YXkuZWxlbWVudCwgImhpZGUtc2VsZWN0Iik7CiAgICAgICAgICAgIGlmIChHLm92ZXJsYXkuZWxl
bWVudC5zdHlsZS5maWx0ZXIpIHsKICAgICAgICAgICAgICAgIEcub3ZlcmxheS5lbGVtZW50LnN0
eWxlLmZpbHRlciA9IG51bGwKICAgICAgICAgICAgfQogICAgICAgICAgICBHLm92ZXJsYXkuX3Nl
dERvbVZpc2liaWxpdHkoZmFsc2UpOwogICAgICAgICAgICBGLnNldFN0eWxlKEcub3ZlcmxheS5l
bGVtZW50LCAib3BhY2l0eSIsIDEpOwogICAgICAgICAgICBHLmhhbmRsZVVuZGVybGF5Q29tcGxl
dGUoKTsKICAgICAgICAgICAgRy5vdmVybGF5LmNmZy5yZWZpcmVFdmVudCgiaWZyYW1lIik7CiAg
ICAgICAgICAgIEcuYW5pbWF0ZU91dENvbXBsZXRlRXZlbnQuZmlyZSgpCiAgICAgICAgfTsKICAg
ICAgICBCLmluaXQoKTsKICAgICAgICByZXR1cm4gQgogICAgfTsKICAgIEQuU0xJREUgPSBmdW5j
dGlvbiAoUywgQSkgewogICAgICAgIHZhciBQID0gWUFIT08udXRpbC5FYXNpbmcsCiAgICAgICAg
ICAgIEMgPSBTLmNmZy5nZXRQcm9wZXJ0eSgieCIpIHx8IEYuZ2V0WChTLmVsZW1lbnQpLAogICAg
ICAgICAgICBOID0gUy5jZmcuZ2V0UHJvcGVydHkoInkiKSB8fCBGLmdldFkoUy5lbGVtZW50KSwK
ICAgICAgICAgICAgQiA9IEYuZ2V0Q2xpZW50V2lkdGgoKSwKICAgICAgICAgICAgUSA9IFMuZWxl
bWVudC5vZmZzZXRXaWR0aCwKICAgICAgICAgICAgTyA9IHsKICAgICAgICAgICAgYXR0cmlidXRl
czogewogICAgICAgICAgICAgICAgcG9pbnRzOiB7CiAgICAgICAgICAgICAgICAgICAgdG86IFtD
LCBOXQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBkdXJhdGlv
bjogQSwKICAgICAgICAgICAgbWV0aG9kOiBQLmVhc2VJbgogICAgICAgIH0sCiAgICAgICAgICAg
IFQgPSB7CiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICAgICAgICAgIHBvaW50czog
ewogICAgICAgICAgICAgICAgICAgIHRvOiBbKEIgKyAyNSksIE5dCiAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGR1cmF0aW9uOiBBLAogICAgICAgICAgICBtZXRo
b2Q6IFAuZWFzZU91dAogICAgICAgIH0sCiAgICAgICAgICAgIFIgPSBuZXcgRChTLCBPLCBULCBT
LmVsZW1lbnQsIFlBSE9PLnV0aWwuTW90aW9uKTsKICAgICAgICBSLmhhbmRsZVN0YXJ0QW5pbWF0
ZUluID0gZnVuY3Rpb24gKEgsIEksIEcpIHsKICAgICAgICAgICAgRy5vdmVybGF5LmVsZW1lbnQu
c3R5bGUubGVmdCA9ICgoLTI1KSAtIFEpICsgInB4IjsKICAgICAgICAgICAgRy5vdmVybGF5LmVs
ZW1lbnQuc3R5bGUudG9wID0gTiArICJweCIKICAgICAgICB9OwogICAgICAgIFIuaGFuZGxlVHdl
ZW5BbmltYXRlSW4gPSBmdW5jdGlvbiAoSSwgSiwgSCkgewogICAgICAgICAgICB2YXIgRyA9IEYu
Z2V0WFkoSC5vdmVybGF5LmVsZW1lbnQpLAogICAgICAgICAgICAgICAgSyA9IEdbMF0sCiAgICAg
ICAgICAgICAgICBMID0gR1sxXTsKICAgICAgICAgICAgaWYgKEYuZ2V0U3R5bGUoSC5vdmVybGF5
LmVsZW1lbnQsICJ2aXNpYmlsaXR5IikgPT0gImhpZGRlbiIgJiYgSyA8IEMpIHsKICAgICAgICAg
ICAgICAgIEgub3ZlcmxheS5fc2V0RG9tVmlzaWJpbGl0eSh0cnVlKQogICAgICAgICAgICB9CiAg
ICAgICAgICAgIEgub3ZlcmxheS5jZmcuc2V0UHJvcGVydHkoInh5IiwgW0ssIExdLCB0cnVlKTsK
ICAgICAgICAgICAgSC5vdmVybGF5LmNmZy5yZWZpcmVFdmVudCgiaWZyYW1lIikKICAgICAgICB9
OwogICAgICAgIFIuaGFuZGxlQ29tcGxldGVBbmltYXRlSW4gPSBmdW5jdGlvbiAoSCwgSSwgRykg
ewogICAgICAgICAgICBHLm92ZXJsYXkuY2ZnLnNldFByb3BlcnR5KCJ4eSIsIFtDLCBOXSwgdHJ1
ZSk7CiAgICAgICAgICAgIEcuc3RhcnRYID0gQzsKICAgICAgICAgICAgRy5zdGFydFkgPSBOOwog
ICAgICAgICAgICBHLm92ZXJsYXkuY2ZnLnJlZmlyZUV2ZW50KCJpZnJhbWUiKTsKICAgICAgICAg
ICAgRy5hbmltYXRlSW5Db21wbGV0ZUV2ZW50LmZpcmUoKQogICAgICAgIH07CiAgICAgICAgUi5o
YW5kbGVTdGFydEFuaW1hdGVPdXQgPSBmdW5jdGlvbiAoSywgTCwgSCkgewogICAgICAgICAgICB2
YXIgSiA9IEYuZ2V0Vmlld3BvcnRXaWR0aCgpLAogICAgICAgICAgICAgICAgRyA9IEYuZ2V0WFko
SC5vdmVybGF5LmVsZW1lbnQpLAogICAgICAgICAgICAgICAgSSA9IEdbMV07CiAgICAgICAgICAg
IEguYW5pbU91dC5hdHRyaWJ1dGVzLnBvaW50cy50byA9IFsoSiArIDI1KSwgSV0KICAgICAgICB9
OwogICAgICAgIFIuaGFuZGxlVHdlZW5BbmltYXRlT3V0ID0gZnVuY3Rpb24gKEosIEssIEkpIHsK
ICAgICAgICAgICAgdmFyIEcgPSBGLmdldFhZKEkub3ZlcmxheS5lbGVtZW50KSwKICAgICAgICAg
ICAgICAgIEwgPSBHWzBdLAogICAgICAgICAgICAgICAgSCA9IEdbMV07CiAgICAgICAgICAgIEku
b3ZlcmxheS5jZmcuc2V0UHJvcGVydHkoInh5IiwgW0wsIEhdLCB0cnVlKTsKICAgICAgICAgICAg
SS5vdmVybGF5LmNmZy5yZWZpcmVFdmVudCgiaWZyYW1lIikKICAgICAgICB9OwogICAgICAgIFIu
aGFuZGxlQ29tcGxldGVBbmltYXRlT3V0ID0gZnVuY3Rpb24gKEgsIEksIEcpIHsKICAgICAgICAg
ICAgRy5vdmVybGF5Ll9zZXREb21WaXNpYmlsaXR5KGZhbHNlKTsKICAgICAgICAgICAgRy5vdmVy
bGF5LmNmZy5zZXRQcm9wZXJ0eSgieHkiLCBbQywgTl0pOwogICAgICAgICAgICBHLmFuaW1hdGVP
dXRDb21wbGV0ZUV2ZW50LmZpcmUoKQogICAgICAgIH07CiAgICAgICAgUi5pbml0KCk7CiAgICAg
ICAgcmV0dXJuIFIKICAgIH07CiAgICBELnByb3RvdHlwZSA9IHsKICAgICAgICBpbml0OiBmdW5j
dGlvbiAoKSB7CiAgICAgICAgICAgIHRoaXMuYmVmb3JlQW5pbWF0ZUluRXZlbnQgPSB0aGlzLmNy
ZWF0ZUV2ZW50KCJiZWZvcmVBbmltYXRlSW4iKTsKICAgICAgICAgICAgdGhpcy5iZWZvcmVBbmlt
YXRlSW5FdmVudC5zaWduYXR1cmUgPSBFLkxJU1Q7CiAgICAgICAgICAgIHRoaXMuYmVmb3JlQW5p
bWF0ZU91dEV2ZW50ID0gdGhpcy5jcmVhdGVFdmVudCgiYmVmb3JlQW5pbWF0ZU91dCIpOwogICAg
ICAgICAgICB0aGlzLmJlZm9yZUFuaW1hdGVPdXRFdmVudC5zaWduYXR1cmUgPSBFLkxJU1Q7CiAg
ICAgICAgICAgIHRoaXMuYW5pbWF0ZUluQ29tcGxldGVFdmVudCA9IHRoaXMuY3JlYXRlRXZlbnQo
ImFuaW1hdGVJbkNvbXBsZXRlIik7CiAgICAgICAgICAgIHRoaXMuYW5pbWF0ZUluQ29tcGxldGVF
dmVudC5zaWduYXR1cmUgPSBFLkxJU1Q7CiAgICAgICAgICAgIHRoaXMuYW5pbWF0ZU91dENvbXBs
ZXRlRXZlbnQgPSB0aGlzLmNyZWF0ZUV2ZW50KCJhbmltYXRlT3V0Q29tcGxldGUiKTsKICAgICAg
ICAgICAgdGhpcy5hbmltYXRlT3V0Q29tcGxldGVFdmVudC5zaWduYXR1cmUgPSBFLkxJU1Q7CiAg
ICAgICAgICAgIHRoaXMuYW5pbUluID0gbmV3IHRoaXMuYW5pbUNsYXNzKHRoaXMudGFyZ2V0RWxl
bWVudCwgdGhpcy5hdHRySW4uYXR0cmlidXRlcywgdGhpcy5hdHRySW4uZHVyYXRpb24sIHRoaXMu
YXR0ckluLm1ldGhvZCk7CiAgICAgICAgICAgIHRoaXMuYW5pbUluLm9uU3RhcnQuc3Vic2NyaWJl
KHRoaXMuaGFuZGxlU3RhcnRBbmltYXRlSW4sIHRoaXMpOwogICAgICAgICAgICB0aGlzLmFuaW1J
bi5vblR3ZWVuLnN1YnNjcmliZSh0aGlzLmhhbmRsZVR3ZWVuQW5pbWF0ZUluLCB0aGlzKTsKICAg
ICAgICAgICAgdGhpcy5hbmltSW4ub25Db21wbGV0ZS5zdWJzY3JpYmUodGhpcy5oYW5kbGVDb21w
bGV0ZUFuaW1hdGVJbiwgdGhpcyk7CiAgICAgICAgICAgIHRoaXMuYW5pbU91dCA9IG5ldyB0aGlz
LmFuaW1DbGFzcyh0aGlzLnRhcmdldEVsZW1lbnQsIHRoaXMuYXR0ck91dC5hdHRyaWJ1dGVzLCB0
aGlzLmF0dHJPdXQuZHVyYXRpb24sIHRoaXMuYXR0ck91dC5tZXRob2QpOwogICAgICAgICAgICB0
aGlzLmFuaW1PdXQub25TdGFydC5zdWJzY3JpYmUodGhpcy5oYW5kbGVTdGFydEFuaW1hdGVPdXQs
IHRoaXMpOwogICAgICAgICAgICB0aGlzLmFuaW1PdXQub25Ud2Vlbi5zdWJzY3JpYmUodGhpcy5o
YW5kbGVUd2VlbkFuaW1hdGVPdXQsIHRoaXMpOwogICAgICAgICAgICB0aGlzLmFuaW1PdXQub25D
b21wbGV0ZS5zdWJzY3JpYmUodGhpcy5oYW5kbGVDb21wbGV0ZUFuaW1hdGVPdXQsIHRoaXMpCiAg
ICAgICAgfSwKICAgICAgICBhbmltYXRlSW46IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhp
cy5iZWZvcmVBbmltYXRlSW5FdmVudC5maXJlKCk7CiAgICAgICAgICAgIHRoaXMuYW5pbUluLmFu
aW1hdGUoKQogICAgICAgIH0sCiAgICAgICAgYW5pbWF0ZU91dDogZnVuY3Rpb24gKCkgewogICAg
ICAgICAgICB0aGlzLmJlZm9yZUFuaW1hdGVPdXRFdmVudC5maXJlKCk7CiAgICAgICAgICAgIHRo
aXMuYW5pbU91dC5hbmltYXRlKCkKICAgICAgICB9LAogICAgICAgIGhhbmRsZVN0YXJ0QW5pbWF0
ZUluOiBmdW5jdGlvbiAoQiwgQywgQSkge30sCiAgICAgICAgaGFuZGxlVHdlZW5BbmltYXRlSW46
IGZ1bmN0aW9uIChCLCBDLCBBKSB7fSwKICAgICAgICBoYW5kbGVDb21wbGV0ZUFuaW1hdGVJbjog
ZnVuY3Rpb24gKEIsIEMsIEEpIHt9LAogICAgICAgIGhhbmRsZVN0YXJ0QW5pbWF0ZU91dDogZnVu
Y3Rpb24gKEIsIEMsIEEpIHt9LAogICAgICAgIGhhbmRsZVR3ZWVuQW5pbWF0ZU91dDogZnVuY3Rp
b24gKEIsIEMsIEEpIHt9LAogICAgICAgIGhhbmRsZUNvbXBsZXRlQW5pbWF0ZU91dDogZnVuY3Rp
b24gKEIsIEMsIEEpIHt9LAogICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoKSB7CiAgICAgICAg
ICAgIHZhciBBID0gIkNvbnRhaW5lckVmZmVjdCI7CiAgICAgICAgICAgIGlmICh0aGlzLm92ZXJs
YXkpIHsKICAgICAgICAgICAgICAgIEEgKz0gIiBbIiArIHRoaXMub3ZlcmxheS50b1N0cmluZygp
ICsgIl0iCiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIEEKICAgICAgICB9CiAgICB9
OwogICAgWUFIT08ubGFuZy5hdWdtZW50UHJvdG8oRCwgWUFIT08udXRpbC5FdmVudFByb3ZpZGVy
KQp9KSgpOwpZQUhPTy5yZWdpc3RlcigiY29udGFpbmVyIiwgWUFIT08ud2lkZ2V0Lk1vZHVsZSwg
ewogICAgdmVyc2lvbjogIjIuOC4wcjQiLAogICAgYnVpbGQ6ICIyNDQ5Igp9KTsKPC9zY3JpcHQ+
CgoKCgoKCgo8c2NyaXB0PgoKPC9zY3JpcHQ+CgoKCjxzY3JpcHQ+CllBSE9PLm5hbWVzcGFjZSgi
ZXh0ZW5zaW9uIik7CllBSE9PLmV4dGVuc2lvbi5DYXJvdXNlbCA9IGZ1bmN0aW9uIChELCBDKSB7
CiAgICB0aGlzLmluaXQoRCwgQykKfTsKWUFIT08uZXh0ZW5zaW9uLkNhcm91c2VsLnByb3RvdHlw
ZSA9IHsKICAgIFVOQk9VTkRFRF9TSVpFOiAxMDAwMDAwLAogICAgaW5pdDogZnVuY3Rpb24gKFMs
IFcpIHsKICAgICAgICB2YXIgWCA9IHRoaXM7CiAgICAgICAgdGhpcy5nZXRDYXJvdXNlbEl0ZW0g
PSB0aGlzLmdldEl0ZW07CiAgICAgICAgdmFyIFEgPSAiY2Fyb3VzZWwtbGlzdCI7CiAgICAgICAg
dmFyIFAgPSAiY2Fyb3VzZWwtY2xpcC1yZWdpb24iOwogICAgICAgIHZhciBhID0gImNhcm91c2Vs
LW5leHQiOwogICAgICAgIHZhciBiID0gImNhcm91c2VsLXByZXYiOwogICAgICAgIHRoaXMuX2Nh
cm91c2VsRWxlbUlEID0gUzsKICAgICAgICB0aGlzLmNhcm91c2VsRWxlbSA9IFlBSE9PLnV0aWwu
RG9tLmdldChTKTsKICAgICAgICB0aGlzLl9wcmV2RW5hYmxlZCA9IHRydWU7CiAgICAgICAgdGhp
cy5fbmV4dEVuYWJsZWQgPSB0cnVlOwogICAgICAgIHRoaXMuY2ZnID0gbmV3IFlBSE9PLnV0aWwu
Q29uZmlnKHRoaXMpOwogICAgICAgIHRoaXMuY2ZnLmFkZFByb3BlcnR5KCJzY3JvbGxCZWZvcmVB
bW91bnQiLCB7CiAgICAgICAgICAgIHZhbHVlOiAwLAogICAgICAgICAgICBoYW5kbGVyOiBmdW5j
dGlvbiAoQiwgQywgQSkge30sCiAgICAgICAgICAgIHZhbGlkYXRvcjogWC5jZmcuY2hlY2tOdW1i
ZXIKICAgICAgICB9KTsKICAgICAgICB0aGlzLmNmZy5hZGRQcm9wZXJ0eSgic2Nyb2xsQWZ0ZXJB
bW91bnQiLCB7CiAgICAgICAgICAgIHZhbHVlOiAwLAogICAgICAgICAgICBoYW5kbGVyOiBmdW5j
dGlvbiAoQiwgQywgQSkge30sCiAgICAgICAgICAgIHZhbGlkYXRvcjogWC5jZmcuY2hlY2tOdW1i
ZXIKICAgICAgICB9KTsKICAgICAgICB0aGlzLmNmZy5hZGRQcm9wZXJ0eSgibG9hZE9uU3RhcnQi
LCB7CiAgICAgICAgICAgIHZhbHVlOiB0cnVlLAogICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlv
biAoQiwgQywgQSkge30sCiAgICAgICAgICAgIHZhbGlkYXRvcjogWC5jZmcuY2hlY2tCb29sZWFu
CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5jZmcuYWRkUHJvcGVydHkoIm9yaWVudGF0aW9uIiwg
ewogICAgICAgICAgICB2YWx1ZTogImhvcml6b250YWwiLAogICAgICAgICAgICBoYW5kbGVyOiBm
dW5jdGlvbiAoQiwgQywgQSkgewogICAgICAgICAgICAgICAgWC5yZWxvYWQoKQogICAgICAgICAg
ICB9LAogICAgICAgICAgICB2YWxpZGF0b3I6IGZ1bmN0aW9uIChBKSB7CiAgICAgICAgICAgICAg
ICBpZiAodHlwZW9mIEEgPT0gInN0cmluZyIpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4g
KCJob3Jpem9udGFsLHZlcnRpY2FsIi5pbmRleE9mKEEudG9Mb3dlckNhc2UoKSkgIT0gLTEpCiAg
ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZQog
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5j
ZmcuYWRkUHJvcGVydHkoInNpemUiLCB7CiAgICAgICAgICAgIHZhbHVlOiB0aGlzLlVOQk9VTkRF
RF9TSVpFLAogICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbiAoQiwgQywgQSkgewogICAgICAg
ICAgICAgICAgWC5yZWxvYWQoKQogICAgICAgICAgICB9LAogICAgICAgICAgICB2YWxpZGF0b3I6
IFguY2ZnLmNoZWNrTnVtYmVyCiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5jZmcuYWRkUHJvcGVy
dHkoIm51bVZpc2libGUiLCB7CiAgICAgICAgICAgIHZhbHVlOiAzLAogICAgICAgICAgICBoYW5k
bGVyOiBmdW5jdGlvbiAoQiwgQywgQSkgewogICAgICAgICAgICAgICAgWC5yZWxvYWQoKQogICAg
ICAgICAgICB9LAogICAgICAgICAgICB2YWxpZGF0b3I6IFguY2ZnLmNoZWNrTnVtYmVyCiAgICAg
ICAgfSk7CiAgICAgICAgdGhpcy5jZmcuYWRkUHJvcGVydHkoImZpcnN0VmlzaWJsZSIsIHsKICAg
ICAgICAgICAgdmFsdWU6IDEsCiAgICAgICAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIChCLCBDLCBB
KSB7CiAgICAgICAgICAgICAgICBYLm1vdmVUbyhDWzBdKQogICAgICAgICAgICB9LAogICAgICAg
ICAgICB2YWxpZGF0b3I6IFguY2ZnLmNoZWNrTnVtYmVyCiAgICAgICAgfSk7CiAgICAgICAgdGhp
cy5jZmcuYWRkUHJvcGVydHkoInNjcm9sbEluYyIsIHsKICAgICAgICAgICAgdmFsdWU6IDMsCiAg
ICAgICAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIChCLCBDLCBBKSB7fSwKICAgICAgICAgICAgdmFs
aWRhdG9yOiBYLmNmZy5jaGVja051bWJlcgogICAgICAgIH0pOwogICAgICAgIHRoaXMuY2ZnLmFk
ZFByb3BlcnR5KCJhbmltYXRpb25TcGVlZCIsIHsKICAgICAgICAgICAgdmFsdWU6IDAuMjUsCiAg
ICAgICAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIChCLCBDLCBBKSB7CiAgICAgICAgICAgICAgICBY
LmFuaW1hdGlvblNwZWVkID0gQ1swXQogICAgICAgICAgICB9LAogICAgICAgICAgICB2YWxpZGF0
b3I6IFguY2ZnLmNoZWNrTnVtYmVyCiAgICAgICAgfSk7CgogICAgICAgIHRoaXMuY2ZnLmFkZFBy
b3BlcnR5KCJhdXRvUGxheSIsIHsKICAgICAgICAgICAgdmFsdWU6IDAsCiAgICAgICAgICAgIGhh
bmRsZXI6IGZ1bmN0aW9uIChCLCBELCBBKSB7CiAgICAgICAgICAgICAgICB2YXIgQyA9IERbMF07
CiAgICAgICAgICAgICAgICBpZiAoQyA+IDApIHsKICAgICAgICAgICAgICAgICAgICBYLnN0YXJ0
QXV0b1BsYXkoKQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBY
LnN0b3BBdXRvUGxheSgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9
KTsKICAgICAgICB0aGlzLmNmZy5hZGRQcm9wZXJ0eSgid3JhcCIsIHsKICAgICAgICAgICAgdmFs
dWU6IGZhbHNlLAogICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbiAoQiwgQywgQSkge30sCiAg
ICAgICAgICAgIHZhbGlkYXRvcjogWC5jZmcuY2hlY2tCb29sZWFuCiAgICAgICAgfSk7CiAgICAg
ICAgdGhpcy5jZmcuYWRkUHJvcGVydHkoIm5hdk1hcmdpbiIsIHsKICAgICAgICAgICAgdmFsdWU6
IDAsCiAgICAgICAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIChCLCBDLCBBKSB7CiAgICAgICAgICAg
ICAgICBYLmNhbGN1bGF0ZVNpemUoKQogICAgICAgICAgICB9LAogICAgICAgICAgICB2YWxpZGF0
b3I6IFguY2ZnLmNoZWNrTnVtYmVyCiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5jZmcuYWRkUHJv
cGVydHkoInJldmVhbEFtb3VudCIsIHsKICAgICAgICAgICAgdmFsdWU6IDAsCiAgICAgICAgICAg
IGhhbmRsZXI6IGZ1bmN0aW9uIChCLCBDLCBBKSB7CiAgICAgICAgICAgICAgICBYLnJlbG9hZCgp
CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHZhbGlkYXRvcjogWC5jZmcuY2hlY2tOdW1iZXIK
ICAgICAgICB9KTsKICAgICAgICB0aGlzLmNmZy5hZGRQcm9wZXJ0eSgicHJldkVsZW1lbnRJRCIs
IHsKICAgICAgICAgICAgdmFsdWU6IG51bGwsCiAgICAgICAgICAgIGhhbmRsZXI6IGZ1bmN0aW9u
IChCLCBDLCBBKSB7CiAgICAgICAgICAgICAgICBpZiAoWC5fY2Fyb3VzZWxQcmV2KSB7CiAgICAg
ICAgICAgICAgICAgICAgWUFIT08udXRpbC5FdmVudC5yZW1vdmVMaXN0ZW5lcihYLl9jYXJvdXNl
bFByZXYsICJjbGljayIsIFguX3Njcm9sbFByZXYpCiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICBYLl9wcmV2RWxlbWVudElEID0gQ1swXTsKICAgICAgICAgICAgICAgIGlmIChYLl9w
cmV2RWxlbWVudElEID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICBYLl9jYXJvdXNlbFBy
ZXYgPSBZQUhPTy51dGlsLkRvbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGIsICJkaXYiLCBYLmNh
cm91c2VsRWxlbSlbMF0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
ICAgWC5fY2Fyb3VzZWxQcmV2ID0gWUFIT08udXRpbC5Eb20uZ2V0KFguX3ByZXZFbGVtZW50SUQp
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBZQUhPTy51dGlsLkV2ZW50LmFkZExp
c3RlbmVyKFguX2Nhcm91c2VsUHJldiwgImNsaWNrIiwgWC5fc2Nyb2xsUHJldiwgWCkKICAgICAg
ICAgICAgfQogICAgICAgIH0pOwogICAgICAgIHRoaXMuY2ZnLmFkZFByb3BlcnR5KCJwcmV2RWxl
bWVudCIsIHsKICAgICAgICAgICAgdmFsdWU6IG51bGwsCiAgICAgICAgICAgIGhhbmRsZXI6IGZ1
bmN0aW9uIChCLCBDLCBBKSB7CiAgICAgICAgICAgICAgICBpZiAoWC5fY2Fyb3VzZWxQcmV2KSB7
CiAgICAgICAgICAgICAgICAgICAgWUFIT08udXRpbC5FdmVudC5yZW1vdmVMaXN0ZW5lcihYLl9j
YXJvdXNlbFByZXYsICJjbGljayIsIFguX3Njcm9sbFByZXYpCiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICBYLl9wcmV2RWxlbWVudElEID0gQ1swXTsKICAgICAgICAgICAgICAgIGlm
IChYLl9wcmV2RWxlbWVudElEID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICBYLl9jYXJv
dXNlbFByZXYgPSBZQUhPTy51dGlsLkRvbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGIsICJkaXYi
LCBYLmNhcm91c2VsRWxlbSlbMF0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgWC5fY2Fyb3VzZWxQcmV2ID0gWUFIT08udXRpbC5Eb20uZ2V0KFguX3ByZXZFbGVt
ZW50SUQpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBZQUhPTy51dGlsLkV2ZW50
LmFkZExpc3RlbmVyKFguX2Nhcm91c2VsUHJldiwgImNsaWNrIiwgWC5fc2Nyb2xsUHJldiwgWCkK
ICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIHRoaXMuY2ZnLmFkZFByb3BlcnR5KCJu
ZXh0RWxlbWVudElEIiwgewogICAgICAgICAgICB2YWx1ZTogbnVsbCwKICAgICAgICAgICAgaGFu
ZGxlcjogZnVuY3Rpb24gKEIsIEMsIEEpIHsKICAgICAgICAgICAgICAgIGlmIChYLl9jYXJvdXNl
bE5leHQpIHsKICAgICAgICAgICAgICAgICAgICBZQUhPTy51dGlsLkV2ZW50LnJlbW92ZUxpc3Rl
bmVyKFguX2Nhcm91c2VsTmV4dCwgImNsaWNrIiwgWC5fc2Nyb2xsTmV4dCkKICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgIFguX25leHRFbGVtZW50SUQgPSBDWzBdOwogICAgICAgICAg
ICAgICAgaWYgKFguX25leHRFbGVtZW50SUQgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAg
IFguX2Nhcm91c2VsTmV4dCA9IFlBSE9PLnV0aWwuRG9tLmdldEVsZW1lbnRzQnlDbGFzc05hbWUo
YSwgImRpdiIsIFguY2Fyb3VzZWxFbGVtKQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICAgICBYLl9jYXJvdXNlbE5leHQgPSBZQUhPTy51dGlsLkRvbS5nZXQoWC5fbmV4
dEVsZW1lbnRJRCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChYLl9jYXJv
dXNlbE5leHQpIHsKICAgICAgICAgICAgICAgICAgICBZQUhPTy51dGlsLkV2ZW50LmFkZExpc3Rl
bmVyKFguX2Nhcm91c2VsTmV4dCwgImNsaWNrIiwgWC5fc2Nyb2xsTmV4dCwgWCkKICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIHRoaXMuY2ZnLmFkZFBy
b3BlcnR5KCJuZXh0RWxlbWVudCIsIHsKICAgICAgICAgICAgdmFsdWU6IG51bGwsCiAgICAgICAg
ICAgIGhhbmRsZXI6IGZ1bmN0aW9uIChCLCBDLCBBKSB7CiAgICAgICAgICAgICAgICBpZiAoWC5f
Y2Fyb3VzZWxOZXh0KSB7CiAgICAgICAgICAgICAgICAgICAgWUFIT08udXRpbC5FdmVudC5yZW1v
dmVMaXN0ZW5lcihYLl9jYXJvdXNlbE5leHQsICJjbGljayIsIFguX3Njcm9sbE5leHQpCiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBYLl9uZXh0RWxlbWVudElEID0gQ1swXTsKICAg
ICAgICAgICAgICAgIGlmIChYLl9uZXh0RWxlbWVudElEID09IG51bGwpIHsKICAgICAgICAgICAg
ICAgICAgICBYLl9jYXJvdXNlbE5leHQgPSBZQUhPTy51dGlsLkRvbS5nZXRFbGVtZW50c0J5Q2xh
c3NOYW1lKGEsICJkaXYiLCBYLmNhcm91c2VsRWxlbSkKICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgICAgWC5fY2Fyb3VzZWxOZXh0ID0gWUFIT08udXRpbC5Eb20uZ2V0
KFguX25leHRFbGVtZW50SUQpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAo
WC5fY2Fyb3VzZWxOZXh0KSB7CiAgICAgICAgICAgICAgICAgICAgWUFIT08udXRpbC5FdmVudC5h
ZGRMaXN0ZW5lcihYLl9jYXJvdXNlbE5leHQsICJjbGljayIsIFguX3Njcm9sbE5leHQsIFgpCiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICB0aGlzLmNm
Zy5hZGRQcm9wZXJ0eSgibG9hZEluaXRIYW5kbGVyIiwgewogICAgICAgICAgICB2YWx1ZTogbnVs
bCwKICAgICAgICAgICAgaGFuZGxlcjogZnVuY3Rpb24gKEIsIEMsIEEpIHsKICAgICAgICAgICAg
ICAgIGlmIChYLl9sb2FkSW5pdEhhbmRsZXJFdnQpIHsKICAgICAgICAgICAgICAgICAgICBYLl9s
b2FkSW5pdEhhbmRsZXJFdnQudW5zdWJzY3JpYmUoWC5fY3VyckxvYWRJbml0SGFuZGxlciwgWCkK
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIFguX2N1cnJMb2FkSW5pdEhhbmRsZXIg
PSBDWzBdOwogICAgICAgICAgICAgICAgaWYgKFguX2N1cnJMb2FkSW5pdEhhbmRsZXIpIHsKICAg
ICAgICAgICAgICAgICAgICBpZiAoIVguX2xvYWRJbml0SGFuZGxlckV2dCkgewogICAgICAgICAg
ICAgICAgICAgICAgICBYLl9sb2FkSW5pdEhhbmRsZXJFdnQgPSBuZXcgWUFIT08udXRpbC5DdXN0
b21FdmVudCgib25Mb2FkSW5pdCIsIFgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgIFguX2xvYWRJbml0SGFuZGxlckV2dC5zdWJzY3JpYmUoWC5fY3VyckxvYWRJbml0
SGFuZGxlciwgWCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0pOwog
ICAgICAgIHRoaXMuY2ZnLmFkZFByb3BlcnR5KCJsb2FkTmV4dEhhbmRsZXIiLCB7CiAgICAgICAg
ICAgIHZhbHVlOiBudWxsLAogICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbiAoQiwgQywgQSkg
ewogICAgICAgICAgICAgICAgaWYgKFguX2xvYWROZXh0SGFuZGxlckV2dCkgewogICAgICAgICAg
ICAgICAgICAgIFguX2xvYWROZXh0SGFuZGxlckV2dC51bnN1YnNjcmliZShYLl9jdXJyTG9hZE5l
eHRIYW5kbGVyLCBYKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgWC5fY3Vyckxv
YWROZXh0SGFuZGxlciA9IENbMF07CiAgICAgICAgICAgICAgICBpZiAoWC5fY3VyckxvYWROZXh0
SGFuZGxlcikgewogICAgICAgICAgICAgICAgICAgIGlmICghWC5fbG9hZE5leHRIYW5kbGVyRXZ0
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFguX2xvYWROZXh0SGFuZGxlckV2dCA9IG5ldyBZ
QUhPTy51dGlsLkN1c3RvbUV2ZW50KCJvbkxvYWROZXh0IiwgWCkKICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgWC5fbG9hZE5leHRIYW5kbGVyRXZ0LnN1YnNjcmliZShY
Ll9jdXJyTG9hZE5leHRIYW5kbGVyLCBYKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9
CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5jZmcuYWRkUHJvcGVydHkoImxvYWRQcmV2SGFuZGxl
ciIsIHsKICAgICAgICAgICAgdmFsdWU6IG51bGwsCiAgICAgICAgICAgIGhhbmRsZXI6IGZ1bmN0
aW9uIChCLCBDLCBBKSB7CiAgICAgICAgICAgICAgICBpZiAoWC5fbG9hZFByZXZIYW5kbGVyRXZ0
KSB7CiAgICAgICAgICAgICAgICAgICAgWC5fbG9hZFByZXZIYW5kbGVyRXZ0LnVuc3Vic2NyaWJl
KFguX2N1cnJMb2FkUHJldkhhbmRsZXIsIFgpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICBYLl9jdXJyTG9hZFByZXZIYW5kbGVyID0gQ1swXTsKICAgICAgICAgICAgICAgIGlmIChY
Ll9jdXJyTG9hZFByZXZIYW5kbGVyKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFYLl9sb2Fk
UHJldkhhbmRsZXJFdnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgWC5fbG9hZFByZXZIYW5k
bGVyRXZ0ID0gbmV3IFlBSE9PLnV0aWwuQ3VzdG9tRXZlbnQoIm9uTG9hZFByZXYiLCBYKQogICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBYLl9sb2FkUHJldkhhbmRsZXJF
dnQuc3Vic2NyaWJlKFguX2N1cnJMb2FkUHJldkhhbmRsZXIsIFgpCiAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICB0aGlzLmNmZy5hZGRQcm9wZXJ0eSgi
cHJldkJ1dHRvblN0YXRlSGFuZGxlciIsIHsKICAgICAgICAgICAgdmFsdWU6IG51bGwsCiAgICAg
ICAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIChCLCBDLCBBKSB7CiAgICAgICAgICAgICAgICBpZiAo
WC5fY3VyclByZXZCdXR0b25TdGF0ZUhhbmRsZXIpIHsKICAgICAgICAgICAgICAgICAgICBYLl9w
cmV2QnV0dG9uU3RhdGVIYW5kbGVyRXZ0LnVuc3Vic2NyaWJlKFguX2N1cnJQcmV2QnV0dG9uU3Rh
dGVIYW5kbGVyLCBYKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgWC5fY3VyclBy
ZXZCdXR0b25TdGF0ZUhhbmRsZXIgPSBDWzBdOwogICAgICAgICAgICAgICAgaWYgKFguX2N1cnJQ
cmV2QnV0dG9uU3RhdGVIYW5kbGVyKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFYLl9wcmV2
QnV0dG9uU3RhdGVIYW5kbGVyRXZ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFguX3ByZXZC
dXR0b25TdGF0ZUhhbmRsZXJFdnQgPSBuZXcgWUFIT08udXRpbC5DdXN0b21FdmVudCgib25QcmV2
QnV0dG9uU3RhdGVDaGFuZ2UiLCBYKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICBYLl9wcmV2QnV0dG9uU3RhdGVIYW5kbGVyRXZ0LnN1YnNjcmliZShYLl9jdXJyUHJl
dkJ1dHRvblN0YXRlSGFuZGxlciwgWCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQog
ICAgICAgIH0pOwogICAgICAgIHRoaXMuY2ZnLmFkZFByb3BlcnR5KCJuZXh0QnV0dG9uU3RhdGVI
YW5kbGVyIiwgewogICAgICAgICAgICB2YWx1ZTogbnVsbCwKICAgICAgICAgICAgaGFuZGxlcjog
ZnVuY3Rpb24gKEIsIEMsIEEpIHsKICAgICAgICAgICAgICAgIGlmIChYLl9jdXJyTmV4dEJ1dHRv
blN0YXRlSGFuZGxlcikgewogICAgICAgICAgICAgICAgICAgIFguX25leHRCdXR0b25TdGF0ZUhh
bmRsZXJFdnQudW5zdWJzY3JpYmUoWC5fY3Vyck5leHRCdXR0b25TdGF0ZUhhbmRsZXIsIFgpCiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBYLl9jdXJyTmV4dEJ1dHRvblN0YXRlSGFu
ZGxlciA9IENbMF07CiAgICAgICAgICAgICAgICBpZiAoWC5fY3Vyck5leHRCdXR0b25TdGF0ZUhh
bmRsZXIpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIVguX25leHRCdXR0b25TdGF0ZUhhbmRs
ZXJFdnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgWC5fbmV4dEJ1dHRvblN0YXRlSGFuZGxl
ckV2dCA9IG5ldyBZQUhPTy51dGlsLkN1c3RvbUV2ZW50KCJvbk5leHRCdXR0b25TdGF0ZUNoYW5n
ZSIsIFgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIFguX25leHRC
dXR0b25TdGF0ZUhhbmRsZXJFdnQuc3Vic2NyaWJlKFguX2N1cnJOZXh0QnV0dG9uU3RhdGVIYW5k
bGVyLCBYKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAg
ICAgaWYgKFcpIHsKICAgICAgICAgICAgdGhpcy5jZmcuYXBwbHlDb25maWcoVykKICAgICAgICB9
CiAgICAgICAgdGhpcy5fb3JpZ0ZpcnN0VmlzaWJsZSA9IHRoaXMuY2ZnLmdldFByb3BlcnR5KCJm
aXJzdFZpc2libGUiKTsKICAgICAgICB0aGlzLl9jdXJyTG9hZEluaXRIYW5kbGVyID0gdGhpcy5j
ZmcuZ2V0UHJvcGVydHkoImxvYWRJbml0SGFuZGxlciIpOwogICAgICAgIHRoaXMuX2N1cnJMb2Fk
TmV4dEhhbmRsZXIgPSB0aGlzLmNmZy5nZXRQcm9wZXJ0eSgibG9hZE5leHRIYW5kbGVyIik7CiAg
ICAgICAgdGhpcy5fY3VyckxvYWRQcmV2SGFuZGxlciA9IHRoaXMuY2ZnLmdldFByb3BlcnR5KCJs
b2FkUHJldkhhbmRsZXIiKTsKICAgICAgICB0aGlzLl9jdXJyUHJldkJ1dHRvblN0YXRlSGFuZGxl
ciA9IHRoaXMuY2ZnLmdldFByb3BlcnR5KCJwcmV2QnV0dG9uU3RhdGVIYW5kbGVyIik7CiAgICAg
ICAgdGhpcy5fY3Vyck5leHRCdXR0b25TdGF0ZUhhbmRsZXIgPSB0aGlzLmNmZy5nZXRQcm9wZXJ0
eSgibmV4dEJ1dHRvblN0YXRlSGFuZGxlciIpOwogICAgICAgIHRoaXMuX2N1cnJBbmltYXRpb25D
b21wbGV0ZUhhbmRsZXIgPSB0aGlzLmNmZy5nZXRQcm9wZXJ0eSgiYW5pbWF0aW9uQ29tcGxldGVI
YW5kbGVyIik7CiAgICAgICAgdGhpcy5fbmV4dEVsZW1lbnRJRCA9IHRoaXMuY2ZnLmdldFByb3Bl
cnR5KCJuZXh0RWxlbWVudElEIik7CiAgICAgICAgaWYgKCF0aGlzLl9uZXh0RWxlbWVudElEKSB7
CiAgICAgICAgICAgIHRoaXMuX25leHRFbGVtZW50SUQgPSB0aGlzLmNmZy5nZXRQcm9wZXJ0eSgi
bmV4dEVsZW1lbnQiKQogICAgICAgIH0KICAgICAgICB0aGlzLl9wcmV2RWxlbWVudElEID0gdGhp
cy5jZmcuZ2V0UHJvcGVydHkoInByZXZFbGVtZW50SUQiKTsKICAgICAgICBpZiAoIXRoaXMuX3By
ZXZFbGVtZW50SUQpIHsKICAgICAgICAgICAgdGhpcy5fcHJldkVsZW1lbnRJRCA9IHRoaXMuY2Zn
LmdldFByb3BlcnR5KCJwcmV2RWxlbWVudCIpCiAgICAgICAgfQogICAgICAgIHRoaXMuX2F1dG9Q
bGF5VGltZXIgPSBudWxsOwogICAgICAgIHRoaXMuX3ByaW9yTGFzdFZpc2libGUgPSB0aGlzLl9w
cmlvckZpcnN0VmlzaWJsZSA9IHRoaXMuY2ZnLmdldFByb3BlcnR5KCJmaXJzdFZpc2libGUiKTsK
ICAgICAgICB0aGlzLl9sYXN0UHJlYnVpbHRJZHggPSAwOwogICAgICAgIHRoaXMuY2Fyb3VzZWxM
aXN0ID0gWUFIT08udXRpbC5Eb20uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShRLCAidWwiLCB0aGlz
LmNhcm91c2VsRWxlbSlbMF07CiAgICAgICAgaWYgKHRoaXMuX25leHRFbGVtZW50SUQgPT0gbnVs
bCkgewogICAgICAgICAgICB0aGlzLl9jYXJvdXNlbE5leHQgPSBZQUhPTy51dGlsLkRvbS5nZXRF
bGVtZW50c0J5Q2xhc3NOYW1lKGEsICJkaXYiLCB0aGlzLmNhcm91c2VsRWxlbSlbMF0KICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLl9jYXJvdXNlbE5leHQgPSBZQUhPTy51dGlsLkRv
bS5nZXQodGhpcy5fbmV4dEVsZW1lbnRJRCkKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuX3By
ZXZFbGVtZW50SUQgPT0gbnVsbCkgewogICAgICAgICAgICB0aGlzLl9jYXJvdXNlbFByZXYgPSBZ
QUhPTy51dGlsLkRvbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGIsICJkaXYiLCB0aGlzLmNhcm91
c2VsRWxlbSlbMF0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLl9jYXJvdXNlbFBy
ZXYgPSBZQUhPTy51dGlsLkRvbS5nZXQodGhpcy5fcHJldkVsZW1lbnRJRCkKICAgICAgICB9CiAg
ICAgICAgdGhpcy5fY2xpcFJlZyA9IFlBSE9PLnV0aWwuRG9tLmdldEVsZW1lbnRzQnlDbGFzc05h
bWUoUCwgImRpdiIsIHRoaXMuY2Fyb3VzZWxFbGVtKVswXTsKICAgICAgICBpZiAodGhpcy5pc1Zl
cnRpY2FsKCkpIHsKICAgICAgICAgICAgWUFIT08udXRpbC5Eb20uYWRkQ2xhc3ModGhpcy5jYXJv
dXNlbExpc3QsICJjYXJvdXNlbC12ZXJ0aWNhbCIpCiAgICAgICAgfQoKICAgICAgICBpZiAodGhp
cy5fY2Fyb3VzZWxOZXh0KSB7CiAgICAgICAgICAgIFlBSE9PLnV0aWwuRXZlbnQuYWRkTGlzdGVu
ZXIodGhpcy5fY2Fyb3VzZWxOZXh0LCAiY2xpY2siLCB0aGlzLl9zY3JvbGxOZXh0LCB0aGlzKQog
ICAgICAgIH0KICAgICAgICBpZiAodGhpcy5fY2Fyb3VzZWxQcmV2KSB7CiAgICAgICAgICAgIFlB
SE9PLnV0aWwuRXZlbnQuYWRkTGlzdGVuZXIodGhpcy5fY2Fyb3VzZWxQcmV2LCAiY2xpY2siLCB0
aGlzLl9zY3JvbGxQcmV2LCB0aGlzKQogICAgICAgIH0KICAgICAgICB2YXIgWSA9IHRoaXMuY2Zn
LmdldFByb3BlcnR5KCJsb2FkSW5pdEhhbmRsZXIiKTsKICAgICAgICBpZiAoWSkgewogICAgICAg
ICAgICB0aGlzLl9sb2FkSW5pdEhhbmRsZXJFdnQgPSBuZXcgWUFIT08udXRpbC5DdXN0b21FdmVu
dCgib25Mb2FkSW5pdCIsIHRoaXMpOwogICAgICAgICAgICB0aGlzLl9sb2FkSW5pdEhhbmRsZXJF
dnQuc3Vic2NyaWJlKFksIHRoaXMpCiAgICAgICAgfQogICAgICAgIHZhciBVID0gdGhpcy5jZmcu
Z2V0UHJvcGVydHkoImxvYWROZXh0SGFuZGxlciIpOwogICAgICAgIGlmIChVKSB7CiAgICAgICAg
ICAgIHRoaXMuX2xvYWROZXh0SGFuZGxlckV2dCA9IG5ldyBZQUhPTy51dGlsLkN1c3RvbUV2ZW50
KCJvbkxvYWROZXh0IiwgdGhpcyk7CiAgICAgICAgICAgIHRoaXMuX2xvYWROZXh0SGFuZGxlckV2
dC5zdWJzY3JpYmUoVSwgdGhpcykKICAgICAgICB9CiAgICAgICAgdmFyIFQgPSB0aGlzLmNmZy5n
ZXRQcm9wZXJ0eSgibG9hZFByZXZIYW5kbGVyIik7CiAgICAgICAgaWYgKFQpIHsKICAgICAgICAg
ICAgdGhpcy5fbG9hZFByZXZIYW5kbGVyRXZ0ID0gbmV3IFlBSE9PLnV0aWwuQ3VzdG9tRXZlbnQo
Im9uTG9hZFByZXYiLCB0aGlzKTsKICAgICAgICAgICAgdGhpcy5fbG9hZFByZXZIYW5kbGVyRXZ0
LnN1YnNjcmliZShULCB0aGlzKQogICAgICAgIH0KICAgICAgICB2YXIgViA9IHRoaXMuY2ZnLmdl
dFByb3BlcnR5KCJhbmltYXRpb25Db21wbGV0ZUhhbmRsZXIiKTsKICAgICAgICBpZiAoVikgewog
ICAgICAgICAgICB0aGlzLl9hbmltYXRpb25Db21wbGV0ZUV2dCA9IG5ldyBZQUhPTy51dGlsLkN1
c3RvbUV2ZW50KCJvbkFuaW1hdGlvbkNvbXBsZXRlIiwgdGhpcyk7CiAgICAgICAgICAgIHRoaXMu
X2FuaW1hdGlvbkNvbXBsZXRlRXZ0LnN1YnNjcmliZShWLCB0aGlzKQogICAgICAgIH0KICAgICAg
ICB2YXIgUiA9IHRoaXMuY2ZnLmdldFByb3BlcnR5KCJwcmV2QnV0dG9uU3RhdGVIYW5kbGVyIik7
CiAgICAgICAgaWYgKFIpIHsKICAgICAgICAgICAgdGhpcy5fcHJldkJ1dHRvblN0YXRlSGFuZGxl
ckV2dCA9IG5ldyBZQUhPTy51dGlsLkN1c3RvbUV2ZW50KCJvblByZXZCdXR0b25TdGF0ZUNoYW5n
ZSIsIHRoaXMpOwogICAgICAgICAgICB0aGlzLl9wcmV2QnV0dG9uU3RhdGVIYW5kbGVyRXZ0LnN1
YnNjcmliZShSLCB0aGlzKQogICAgICAgIH0KICAgICAgICB2YXIgWiA9IHRoaXMuY2ZnLmdldFBy
b3BlcnR5KCJuZXh0QnV0dG9uU3RhdGVIYW5kbGVyIik7CiAgICAgICAgaWYgKFopIHsKICAgICAg
ICAgICAgdGhpcy5fbmV4dEJ1dHRvblN0YXRlSGFuZGxlckV2dCA9IG5ldyBZQUhPTy51dGlsLkN1
c3RvbUV2ZW50KCJvbk5leHRCdXR0b25TdGF0ZUNoYW5nZSIsIHRoaXMpOwogICAgICAgICAgICB0
aGlzLl9uZXh0QnV0dG9uU3RhdGVIYW5kbGVyRXZ0LnN1YnNjcmliZShaLCB0aGlzKQogICAgICAg
IH0KICAgICAgICB2YXIgTyA9IHRoaXMuX2NhbGN1bGF0ZVZpc2libGVFeHRlbnQoKTsKICAgICAg
ICBZQUhPTy51dGlsLkV2ZW50Lm9uQXZhaWxhYmxlKHRoaXMuX2Nhcm91c2VsRWxlbUlEICsgIi1p
dGVtLSIgKyBPLnN0YXJ0LCB0aGlzLl9jYWxjdWxhdGVTaXplLCB0aGlzKTsKICAgICAgICBpZiAo
dGhpcy5jZmcuZ2V0UHJvcGVydHkoImxvYWRPblN0YXJ0IikpIHsKICAgICAgICAgICAgdGhpcy5f
bG9hZEluaXRpYWwoKQogICAgICAgIH0KICAgIH0sCiAgICBjbGVhcjogZnVuY3Rpb24gKCkgewog
ICAgICAgIHZhciBCID0gdGhpcy5jZmcuZ2V0UHJvcGVydHkoImxvYWRJbml0SGFuZGxlciIpOwog
ICAgICAgIGlmIChCKSB7CiAgICAgICAgICAgIHRoaXMuX3JlbW92ZUNoaWxkcmVuRnJvbU5vZGUo
dGhpcy5jYXJvdXNlbExpc3QpOwogICAgICAgICAgICB0aGlzLl9sYXN0UHJlYnVpbHRJZHggPSAw
CiAgICAgICAgfQogICAgICAgIHRoaXMuc3RvcEF1dG9QbGF5KCk7CiAgICAgICAgdGhpcy5fcHJp
b3JMYXN0VmlzaWJsZSA9IHRoaXMuX3ByaW9yRmlyc3RWaXNpYmxlID0gdGhpcy5fb3JpZ0ZpcnN0
VmlzaWJsZTsKICAgICAgICB0aGlzLmNmZy5zZXRQcm9wZXJ0eSgiZmlyc3RWaXNpYmxlIiwgdGhp
cy5fb3JpZ0ZpcnN0VmlzaWJsZSwgdHJ1ZSk7CiAgICAgICAgdGhpcy5tb3ZlVG8odGhpcy5fb3Jp
Z0ZpcnN0VmlzaWJsZSkKICAgIH0sCiAgICByZWxvYWQ6IGZ1bmN0aW9uIChEKSB7CiAgICAgICAg
aWYgKHRoaXMuX2lzVmFsaWRPYmooRCkpIHsKICAgICAgICAgICAgdGhpcy5jZmcuc2V0UHJvcGVy
dHkoIm51bVZpc2libGUiLCBEKQogICAgICAgIH0KICAgICAgICB0aGlzLmNsZWFyKCk7CiAgICAg
ICAgdmFyIEMgPSB0aGlzLl9jYWxjdWxhdGVWaXNpYmxlRXh0ZW50KCk7CiAgICAgICAgWUFIT08u
dXRpbC5FdmVudC5vbkF2YWlsYWJsZSh0aGlzLl9jYXJvdXNlbEVsZW1JRCArICItaXRlbS0iICsg
Qy5zdGFydCwgdGhpcy5fY2FsY3VsYXRlU2l6ZSwgdGhpcyk7CiAgICAgICAgdGhpcy5fbG9hZElu
aXRpYWwoKQogICAgfSwKICAgIGxvYWQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgQiA9IHRo
aXMuX2NhbGN1bGF0ZVZpc2libGVFeHRlbnQoKTsKICAgICAgICBZQUhPTy51dGlsLkV2ZW50Lm9u
QXZhaWxhYmxlKHRoaXMuX2Nhcm91c2VsRWxlbUlEICsgIi1pdGVtLSIgKyBCLnN0YXJ0LCB0aGlz
Ll9jYWxjdWxhdGVTaXplLCB0aGlzKTsKICAgICAgICB0aGlzLl9sb2FkSW5pdGlhbCgpCiAgICB9
LAogICAgYWRkSXRlbTogZnVuY3Rpb24gKEksIEosIEgpIHsKICAgICAgICBpZiAoSSA+IHRoaXMu
Y2ZnLmdldFByb3BlcnR5KCJzaXplIikpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGwKICAgICAg
ICB9CiAgICAgICAgdmFyIEcgPSB0aGlzLmdldEl0ZW0oSSk7CiAgICAgICAgaWYgKCF0aGlzLl9p
c1ZhbGlkT2JqKEcpKSB7CiAgICAgICAgICAgIEcgPSB0aGlzLl9jcmVhdGVJdGVtKEksIEopOwog
ICAgICAgICAgICB0aGlzLmNhcm91c2VsTGlzdC5hcHBlbmRDaGlsZChHKQogICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgIGlmICh0aGlzLl9pc1ZhbGlkT2JqKEcucGxhY2Vob2xkZXIpKSB7CiAg
ICAgICAgICAgICAgICB2YXIgRiA9IHRoaXMuX2NyZWF0ZUl0ZW0oSSwgSik7CiAgICAgICAgICAg
ICAgICB0aGlzLmNhcm91c2VsTGlzdC5yZXBsYWNlQ2hpbGQoRiwgRyk7CiAgICAgICAgICAgICAg
ICBHID0gRgogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLl9pc1ZhbGlk
T2JqKEgpKSB7CiAgICAgICAgICAgIFlBSE9PLnV0aWwuRG9tLmFkZENsYXNzKEcsIEgpCiAgICAg
ICAgfQogICAgICAgIGlmICh0aGlzLmlzVmVydGljYWwoKSkgewogICAgICAgICAgICBzZXRUaW1l
b3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIEcuc3R5bGUuZGlzcGxheSA9ICJibG9j
ayIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgMSkKICAgICAgICB9CiAgICAgICAgcmV0dXJu
IEcKICAgIH0sCiAgICBpbnNlcnRCZWZvcmU6IGZ1bmN0aW9uIChILCBGKSB7CiAgICAgICAgaWYg
KEggPj0gdGhpcy5jZmcuZ2V0UHJvcGVydHkoInNpemUiKSkgewogICAgICAgICAgICByZXR1cm4g
bnVsbAogICAgICAgIH0KICAgICAgICBpZiAoSCA8IDEpIHsKICAgICAgICAgICAgSCA9IDEKICAg
ICAgICB9CiAgICAgICAgdmFyIEUgPSBIIC0gMTsKICAgICAgICBpZiAoRSA+IHRoaXMuX2xhc3RQ
cmVidWlsdElkeCkgewogICAgICAgICAgICB0aGlzLl9wcmVidWlsZEl0ZW1zKHRoaXMuX2xhc3RQ
cmVidWlsdElkeCwgSCkKICAgICAgICB9CiAgICAgICAgdmFyIEcgPSB0aGlzLl9pbnNlcnRCZWZv
cmVJdGVtKEgsIEYpOwogICAgICAgIHRoaXMuX2VuYWJsZURpc2FibGVDb250cm9scygpOwogICAg
ICAgIHJldHVybiBHCiAgICB9LAogICAgaW5zZXJ0QWZ0ZXI6IGZ1bmN0aW9uIChILCBGKSB7CiAg
ICAgICAgaWYgKEggPiB0aGlzLmNmZy5nZXRQcm9wZXJ0eSgic2l6ZSIpKSB7CiAgICAgICAgICAg
IEggPSB0aGlzLmNmZy5nZXRQcm9wZXJ0eSgic2l6ZSIpCiAgICAgICAgfQogICAgICAgIHZhciBF
ID0gSCArIDE7CiAgICAgICAgaWYgKEUgPiB0aGlzLl9sYXN0UHJlYnVpbHRJZHgpIHsKICAgICAg
ICAgICAgdGhpcy5fcHJlYnVpbGRJdGVtcyh0aGlzLl9sYXN0UHJlYnVpbHRJZHgsIEUgKyAxKQog
ICAgICAgIH0KICAgICAgICB2YXIgRyA9IHRoaXMuX2luc2VydEFmdGVySXRlbShILCBGKTsKICAg
ICAgICBpZiAoRSA+IHRoaXMuY2ZnLmdldFByb3BlcnR5KCJzaXplIikpIHsKICAgICAgICAgICAg
dGhpcy5jZmcuc2V0UHJvcGVydHkoInNpemUiLCBFLCB0cnVlKQogICAgICAgIH0KICAgICAgICB0
aGlzLl9lbmFibGVEaXNhYmxlQ29udHJvbHMoKTsKICAgICAgICByZXR1cm4gRwogICAgfSwKICAg
IHNjcm9sbE5leHQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICB0aGlzLl9zY3JvbGxOZXh0KG51bGws
IHRoaXMpOwogICAgICAgIHRoaXMuX2F1dG9QbGF5VGltZXIgPSBudWxsOwogICAgICAgIGlmICh0
aGlzLmNmZy5nZXRQcm9wZXJ0eSgiYXV0b1BsYXkiKSAhPT0gMCkgewogICAgICAgICAgICB0aGlz
Ll9hdXRvUGxheVRpbWVyID0gdGhpcy5zdGFydEF1dG9QbGF5KCkKICAgICAgICB9CiAgICB9LAog
ICAgc2Nyb2xsUHJldjogZnVuY3Rpb24gKCkgewogICAgICAgIHRoaXMuX3Njcm9sbFByZXYobnVs
bCwgdGhpcykKICAgIH0sCiAgICBzY3JvbGxUbzogZnVuY3Rpb24gKEIpIHsKICAgICAgICB0aGlz
Ll9wb3NpdGlvbihCLCB0cnVlKQogICAgfSwKICAgIG1vdmVUbzogZnVuY3Rpb24gKEIpIHsKICAg
ICAgICB0aGlzLl9wb3NpdGlvbihCLCBmYWxzZSkKICAgIH0sCiAgICBzdGFydEF1dG9QbGF5OiBm
dW5jdGlvbiAoRCkgewogICAgICAgIGlmICh0aGlzLl9pc1ZhbGlkT2JqKEQpKSB7CiAgICAgICAg
ICAgIHRoaXMuY2ZnLnNldFByb3BlcnR5KCJhdXRvUGxheSIsIEQsIHRydWUpCiAgICAgICAgfQog
ICAgICAgIGlmICh0aGlzLl9hdXRvUGxheVRpbWVyICE9PSBudWxsKSB7CiAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9hdXRvUGxheVRpbWVyCiAgICAgICAgfQogICAgICAgIHZhciBFID0gdGhpczsK
ICAgICAgICB2YXIgRiA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgRS5zY3JvbGxOZXh0KCkK
ICAgICAgICB9OwogICAgICAgIHRoaXMuX2F1dG9QbGF5VGltZXIgPSBzZXRUaW1lb3V0KEYsIHRo
aXMuY2ZnLmdldFByb3BlcnR5KCJhdXRvUGxheSIpKTsKICAgICAgICByZXR1cm4gdGhpcy5fYXV0
b1BsYXlUaW1lcgogICAgfSwKICAgIHN0b3BBdXRvUGxheTogZnVuY3Rpb24gKCkgewogICAgICAg
IGlmICh0aGlzLl9hdXRvUGxheVRpbWVyICE9PSBudWxsKSB7CiAgICAgICAgICAgIGNsZWFyVGlt
ZW91dCh0aGlzLl9hdXRvUGxheVRpbWVyKTsKICAgICAgICAgICAgdGhpcy5fYXV0b1BsYXlUaW1l
ciA9IG51bGwKICAgICAgICB9CiAgICB9LAogICAgaXNWZXJ0aWNhbDogZnVuY3Rpb24gKCkgewog
ICAgICAgIHJldHVybiAodGhpcy5jZmcuZ2V0UHJvcGVydHkoIm9yaWVudGF0aW9uIikgIT0gImhv
cml6b250YWwiKQogICAgfSwKICAgIGlzSXRlbUxvYWRlZDogZnVuY3Rpb24gKEMpIHsKICAgICAg
ICB2YXIgRCA9IHRoaXMuZ2V0SXRlbShDKTsKICAgICAgICBpZiAodGhpcy5faXNWYWxpZE9iaihE
KSAmJiAhdGhpcy5faXNWYWxpZE9iaihELnBsYWNlaG9sZGVyKSkgewogICAgICAgICAgICByZXR1
cm4gdHJ1ZQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2UKICAgIH0sCiAgICBnZXRJdGVt
OiBmdW5jdGlvbiAoRCkgewogICAgICAgIHZhciBGID0gdGhpcy5fY2Fyb3VzZWxFbGVtSUQgKyAi
LWl0ZW0tIiArIEQ7CiAgICAgICAgdmFyIEUgPSBZQUhPTy51dGlsLkRvbS5nZXQoRik7CiAgICAg
ICAgcmV0dXJuIEUKICAgIH0sCiAgICBzaG93OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgWUFIT08u
dXRpbC5Eb20uc2V0U3R5bGUodGhpcy5jYXJvdXNlbEVsZW0sICJkaXNwbGF5IiwgImJsb2NrIik7
CiAgICAgICAgdGhpcy5jYWxjdWxhdGVTaXplKCkKICAgIH0sCiAgICBoaWRlOiBmdW5jdGlvbiAo
KSB7CiAgICAgICAgWUFIT08udXRpbC5Eb20uc2V0U3R5bGUodGhpcy5jYXJvdXNlbEVsZW0sICJk
aXNwbGF5IiwgIm5vbmUiKQogICAgfSwKICAgIGNhbGN1bGF0ZVNpemU6IGZ1bmN0aW9uICgpIHsK
ICAgICAgICB2YXIgQUsgPSB0aGlzLmNhcm91c2VsTGlzdC5jaGlsZE5vZGVzOwogICAgICAgIHZh
ciByID0gbnVsbDsKICAgICAgICBmb3IgKHZhciBBUCA9IDA7CiAgICAgICAgQVAgPCBBSy5sZW5n
dGg7CiAgICAgICAgQVArKykgewogICAgICAgICAgICByID0gQUtbQVBdOwogICAgICAgICAgICBp
ZiAoci50YWdOYW1lID09ICJMSSIgfHwgci50YWdOYW1lID09ICJsaSIpIHsKICAgICAgICAgICAg
ICAgIGJyZWFrCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdmFyIGkgPSB0aGlzLmNm
Zy5nZXRQcm9wZXJ0eSgibmF2TWFyZ2luIik7CiAgICAgICAgdmFyIEFJID0gdGhpcy5jZmcuZ2V0
UHJvcGVydHkoIm51bVZpc2libGUiKTsKICAgICAgICB2YXIgQUEgPSB0aGlzLmNmZy5nZXRQcm9w
ZXJ0eSgiZmlyc3RWaXNpYmxlIik7CiAgICAgICAgdmFyIEFNID0gdGhpcy5fZ2V0U3R5bGVWYWwo
ciwgInBhZGRpbmdMZWZ0Iik7CiAgICAgICAgdmFyIGwgPSB0aGlzLl9nZXRTdHlsZVZhbChyLCAi
cGFkZGluZ1JpZ2h0Iik7CiAgICAgICAgdmFyIEFOID0gdGhpcy5fZ2V0U3R5bGVWYWwociwgIm1h
cmdpbkxlZnQiKTsKICAgICAgICB2YXIgbSA9IHRoaXMuX2dldFN0eWxlVmFsKHIsICJtYXJnaW5S
aWdodCIpOwogICAgICAgIHZhciBuID0gdGhpcy5fZ2V0U3R5bGVWYWwociwgInBhZGRpbmdUb3Ai
KTsKICAgICAgICB2YXIgQUYgPSB0aGlzLl9nZXRTdHlsZVZhbChyLCAicGFkZGluZ0JvdHRvbSIp
OwogICAgICAgIHZhciBvID0gdGhpcy5fZ2V0U3R5bGVWYWwociwgIm1hcmdpblRvcCIpOwogICAg
ICAgIHZhciBBSCA9IHRoaXMuX2dldFN0eWxlVmFsKHIsICJtYXJnaW5Cb3R0b20iKTsKICAgICAg
ICBZQUhPTy51dGlsLkRvbS5yZW1vdmVDbGFzcyh0aGlzLmNhcm91c2VsTGlzdCwgImNhcm91c2Vs
LXZlcnRpY2FsIik7CiAgICAgICAgWUFIT08udXRpbC5Eb20ucmVtb3ZlQ2xhc3ModGhpcy5jYXJv
dXNlbExpc3QsICJjYXJvdXNlbC1ob3Jpem9udGFsIik7CiAgICAgICAgaWYgKHRoaXMuaXNWZXJ0
aWNhbCgpKSB7CiAgICAgICAgICAgIHZhciBwID0gQU0gKyBsICsgQU4gKyBtOwogICAgICAgICAg
ICBZQUhPTy51dGlsLkRvbS5hZGRDbGFzcyh0aGlzLmNhcm91c2VsTGlzdCwgImNhcm91c2VsLXZl
cnRpY2FsIik7CiAgICAgICAgICAgIHZhciBBQyA9IG4gKyBBRiArIG8gKyBBSDsKICAgICAgICAg
ICAgdmFyIHkgPSB0aGlzLl9nZXRTdHlsZVZhbCh0aGlzLmNhcm91c2VsTGlzdCwgInBhZGRpbmdU
b3AiKTsKICAgICAgICAgICAgdmFyIGogPSB0aGlzLl9nZXRTdHlsZVZhbCh0aGlzLmNhcm91c2Vs
TGlzdCwgInBhZGRpbmdCb3R0b20iKTsKICAgICAgICAgICAgdmFyIHogPSB0aGlzLl9nZXRTdHls
ZVZhbCh0aGlzLmNhcm91c2VsTGlzdCwgIm1hcmdpblRvcCIpOwogICAgICAgICAgICB2YXIgayA9
IHRoaXMuX2dldFN0eWxlVmFsKHRoaXMuY2Fyb3VzZWxMaXN0LCAibWFyZ2luQm90dG9tIik7CiAg
ICAgICAgICAgIHZhciBBSiA9IHkgKyBqICsgeiArIGs7CiAgICAgICAgICAgIHZhciB0ID0gKHRo
aXMuX2lzRXh0cmFSZXZlYWxlZCgpKSA/ICh0aGlzLmNmZy5nZXRQcm9wZXJ0eSgicmV2ZWFsQW1v
dW50IikgKyAoQUMpIC8gMikgOiAwOwogICAgICAgICAgICB2YXIgQUUgPSB0aGlzLl9nZXRTdHls
ZVZhbChyLCAiaGVpZ2h0IiwgdHJ1ZSk7CiAgICAgICAgICAgIHRoaXMuc2Nyb2xsQW1vdW50UGVy
SW5jID0gKEFFICsgQUMpOwogICAgICAgICAgICB2YXIgQUQgPSB0aGlzLl9nZXRTdHlsZVZhbChy
LCAid2lkdGgiKTsKICAgICAgICAgICAgdGhpcy5jYXJvdXNlbEVsZW0uc3R5bGUud2lkdGggPSAo
QUQgKyBwKSArICJweCI7CiAgICAgICAgICAgIHRoaXMuX2NsaXBSZWcuc3R5bGUuaGVpZ2h0ID0g
KHRoaXMuc2Nyb2xsQW1vdW50UGVySW5jICogQUkgKyB0ICogMiArIEFKKSArICJweCI7CiAgICAg
ICAgICAgIHRoaXMuY2Fyb3VzZWxFbGVtLnN0eWxlLmhlaWdodCA9ICh0aGlzLnNjcm9sbEFtb3Vu
dFBlckluYyAqIEFJICsgdCAqIDIgKyBpICogMiArIEFKKSArICJweCI7CiAgICAgICAgICAgIHZh
ciBBTyA9ICh0aGlzLl9pc0V4dHJhUmV2ZWFsZWQoKSkgPyAodCAtIChNYXRoLmFicyhvIC0gQUgp
ICsgTWF0aC5hYnMobiAtIEFGKSkgLyAyKSA6IDA7CiAgICAgICAgICAgIFlBSE9PLnV0aWwuRG9t
LnNldFN0eWxlKHRoaXMuY2Fyb3VzZWxMaXN0LCAicG9zaXRpb24iLCAicmVsYXRpdmUiKTsKICAg
ICAgICAgICAgWUFIT08udXRpbC5Eb20uc2V0U3R5bGUodGhpcy5jYXJvdXNlbExpc3QsICJ0b3Ai
LCAiIiArIEFPICsgInB4Iik7CiAgICAgICAgICAgIHZhciB2ID0gWUFIT08udXRpbC5Eb20uZ2V0
WSh0aGlzLmNhcm91c2VsTGlzdCk7CiAgICAgICAgICAgIFlBSE9PLnV0aWwuRG9tLnNldFkodGhp
cy5jYXJvdXNlbExpc3QsIHYgLSB0aGlzLnNjcm9sbEFtb3VudFBlckluYyAqIChBQSAtIDEpKQog
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIFlBSE9PLnV0aWwuRG9tLmFkZENsYXNzKHRoaXMu
Y2Fyb3VzZWxMaXN0LCAiY2Fyb3VzZWwtaG9yaXpvbnRhbCIpOwogICAgICAgICAgICB2YXIgcSA9
IHRoaXMuX2dldFN0eWxlVmFsKHRoaXMuY2Fyb3VzZWxMaXN0LCAicGFkZGluZ0xlZnQiKTsKICAg
ICAgICAgICAgdmFyIHcgPSB0aGlzLl9nZXRTdHlsZVZhbCh0aGlzLmNhcm91c2VsTGlzdCwgInBh
ZGRpbmdSaWdodCIpOwogICAgICAgICAgICB2YXIgcyA9IHRoaXMuX2dldFN0eWxlVmFsKHRoaXMu
Y2Fyb3VzZWxMaXN0LCAibWFyZ2luTGVmdCIpOwogICAgICAgICAgICB2YXIgeCA9IHRoaXMuX2dl
dFN0eWxlVmFsKHRoaXMuY2Fyb3VzZWxMaXN0LCAibWFyZ2luUmlnaHQiKTsKICAgICAgICAgICAg
Ly8gYWxlcnQoIjx1bCBpZD1cImNhcm91c2VsLWxpc3RcIj4gZWxlbWVudCAtLSB3aWR0aDogIiAr
IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuY2Fyb3VzZWxMaXN0LCBudWxsKS53aWR0aCAr
ICIgbWFyZ2luUmlnaHQ6ICIgKyB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmNhcm91c2Vs
TGlzdCwgbnVsbCkubWFyZ2luUmlnaHQpOwogICAgICAgICAgICB2YXIgd2lkdGggPSB3aW5kb3cu
Z2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmNhcm91c2VsTGlzdCwgbnVsbCkud2lkdGg7CiAgICAgICAg
ICAgIGFsZXJ0KCd3aWR0aDogJyArIHdpZHRoICsgJyBxOiAnICsgcSArICcgdzogJyArIHcgKyAn
IHM6ICcgKyBzICsgJyB4OiAnICsgeCk7CiAgICAgICAgICAgIHZhciBBQiA9IHEgKyB3ICsgcyAr
IHg7CiAgICAgICAgICAgIHZhciBBTCA9IEFOICsgbTsKICAgICAgICAgICAgdmFyIHAgPSBBTCAr
IGwgKyBBTTsKICAgICAgICAgICAgdmFyIHQgPSAodGhpcy5faXNFeHRyYVJldmVhbGVkKCkpID8g
KHRoaXMuY2ZnLmdldFByb3BlcnR5KCJyZXZlYWxBbW91bnQiKSArIChwKSAvIDIpIDogMDsKICAg
ICAgICAgICAgdmFyIEFEID0gci5vZmZzZXRXaWR0aDsKICAgICAgICAgICAgdGhpcy5zY3JvbGxB
bW91bnRQZXJJbmMgPSBBRCArIEFMOwogICAgICAgICAgICB0aGlzLl9jbGlwUmVnLnN0eWxlLndp
ZHRoID0gKHRoaXMuc2Nyb2xsQW1vdW50UGVySW5jICogQUkgKyB0ICogMikgKyAicHgiOwogICAg
ICAgICAgICB0aGlzLmNhcm91c2VsRWxlbS5zdHlsZS53aWR0aCA9ICh0aGlzLnNjcm9sbEFtb3Vu
dFBlckluYyAqIEFJICsgaSAqIDIgKyB0ICogMiArIEFCKSArICJweCI7CiAgICAgICAgICAgIHZh
ciBBRyA9ICh0aGlzLl9pc0V4dHJhUmV2ZWFsZWQoKSkgPyAodCAtIChNYXRoLmFicyhtIC0gQU4p
ICsgTWF0aC5hYnMobCAtIEFNKSkgLyAyIC0gKHMgKyBxKSkgOiAwOwogICAgICAgICAgICBZQUhP
Ty51dGlsLkRvbS5zZXRTdHlsZSh0aGlzLmNhcm91c2VsTGlzdCwgInBvc2l0aW9uIiwgInJlbGF0
aXZlIik7CiAgICAgICAgICAgIFlBSE9PLnV0aWwuRG9tLnNldFN0eWxlKHRoaXMuY2Fyb3VzZWxM
aXN0LCAibGVmdCIsICIiICsgQUcgKyAicHgiKTsKICAgICAgICAgICAgdmFyIHUgPSBZQUhPTy51
dGlsLkRvbS5nZXRYKHRoaXMuY2Fyb3VzZWxMaXN0KTsKICAgICAgICAgICAgWUFIT08udXRpbC5E
b20uc2V0WCh0aGlzLmNhcm91c2VsTGlzdCwgdSAtIHRoaXMuc2Nyb2xsQW1vdW50UGVySW5jICog
KEFBIC0gMSkpCiAgICAgICAgfQogICAgfSwKICAgIHNldFByb3BlcnR5OiBmdW5jdGlvbiAoRSwg
RiwgRCkgewogICAgICAgIHRoaXMuY2ZnLnNldFByb3BlcnR5KEUsIEYsIEQpCiAgICB9LAogICAg
Z2V0UHJvcGVydHk6IGZ1bmN0aW9uIChCKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY2ZnLmdldFBy
b3BlcnR5KEIpCiAgICB9LAogICAgZ2V0Rmlyc3RJdGVtUmV2ZWFsZWQ6IGZ1bmN0aW9uICgpIHsK
ICAgICAgICByZXR1cm4gdGhpcy5fZmlyc3RJdGVtUmV2ZWFsZWQKICAgIH0sCiAgICBnZXRMYXN0
SXRlbVJldmVhbGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX2xhc3RJdGVt
UmV2ZWFsZWQKICAgIH0sCiAgICBnZXRGaXJzdFZpc2libGU6IGZ1bmN0aW9uICgpIHsKICAgICAg
ICByZXR1cm4gdGhpcy5jZmcuZ2V0UHJvcGVydHkoImZpcnN0VmlzaWJsZSIpCiAgICB9LAogICAg
Z2V0TGFzdFZpc2libGU6IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgRCA9IHRoaXMuY2ZnLmdl
dFByb3BlcnR5KCJmaXJzdFZpc2libGUiKTsKICAgICAgICB2YXIgQyA9IHRoaXMuY2ZnLmdldFBy
b3BlcnR5KCJudW1WaXNpYmxlIik7CiAgICAgICAgcmV0dXJuIEQgKyBDIC0gMQogICAgfSwKICAg
IF9nZXRTdHlsZVZhbDogZnVuY3Rpb24gKEYsIEksIEgpIHsKICAgICAgICB2YXIgSiA9IFlBSE9P
LnV0aWwuRG9tLmdldFN0eWxlKEYsIEkpOwogICAgICAgIHZhciBHID0gSCA/IHBhcnNlRmxvYXQo
SikgOiBwYXJzZUludChKLCAxMCk7CiAgICAgICAgaWYgKEkgPT0gImhlaWdodCIgJiYgaXNOYU4o
RykpIHsKICAgICAgICAgICAgRyA9IEYub2Zmc2V0SGVpZ2h0CiAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgaWYgKGlzTmFOKEcpKSB7CiAgICAgICAgICAgICAgICBHID0gMAogICAgICAgICAg
ICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBHCiAgICB9LAogICAgX2NhbGN1bGF0ZVNpemU6
IGZ1bmN0aW9uIChCKSB7CiAgICAgICAgQi5jYWxjdWxhdGVTaXplKCk7CiAgICAgICAgQi5zaG93
KCkKICAgIH0sCiAgICBfcmVtb3ZlQ2hpbGRyZW5Gcm9tTm9kZTogZnVuY3Rpb24gKEQpIHsKICAg
ICAgICBpZiAoIXRoaXMuX2lzVmFsaWRPYmooRCkpIHsKICAgICAgICAgICAgcmV0dXJuCiAgICAg
ICAgfQogICAgICAgIHZhciBDID0gRC5jaGlsZE5vZGVzLmxlbmd0aDsKICAgICAgICB3aGlsZSAo
RC5oYXNDaGlsZE5vZGVzKCkpIHsKICAgICAgICAgICAgRC5yZW1vdmVDaGlsZChELmZpcnN0Q2hp
bGQpCiAgICAgICAgfQogICAgfSwKICAgIF9wcmVidWlsZExpRWxlbTogZnVuY3Rpb24gKEMpIHsK
ICAgICAgICBpZiAoQyA8IDEpIHsKICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgfQogICAgICAg
IHZhciBEID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGkiKTsKICAgICAgICBELmlkID0gdGhp
cy5fY2Fyb3VzZWxFbGVtSUQgKyAiLWl0ZW0tIiArIEM7CiAgICAgICAgRC5wbGFjZWhvbGRlciA9
IHRydWU7CiAgICAgICAgdGhpcy5jYXJvdXNlbExpc3QuYXBwZW5kQ2hpbGQoRCk7CiAgICAgICAg
dGhpcy5fbGFzdFByZWJ1aWx0SWR4ID0gKEMgPiB0aGlzLl9sYXN0UHJlYnVpbHRJZHgpID8gQyA6
IHRoaXMuX2xhc3RQcmVidWlsdElkeAogICAgfSwKICAgIF9jcmVhdGVJdGVtOiBmdW5jdGlvbiAo
RiwgRCkgewogICAgICAgIGlmIChGIDwgMSkgewogICAgICAgICAgICByZXR1cm4KICAgICAgICB9
CiAgICAgICAgdmFyIEUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaSIpOwogICAgICAgIEUu
aWQgPSB0aGlzLl9jYXJvdXNlbEVsZW1JRCArICItaXRlbS0iICsgRjsKICAgICAgICBpZiAodHlw
ZW9mKEQpID09PSAic3RyaW5nIikgewogICAgICAgICAgICBFLmlubmVySFRNTCA9IEQKICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICBFLmFwcGVuZENoaWxkKEQpCiAgICAgICAgfQogICAgICAg
IHJldHVybiBFCiAgICB9LAogICAgX2luc2VydEFmdGVySXRlbTogZnVuY3Rpb24gKEQsIEMpIHsK
ICAgICAgICByZXR1cm4gdGhpcy5faW5zZXJ0QmVmb3JlSXRlbShEICsgMSwgQykKICAgIH0sCiAg
ICBfaW5zZXJ0QmVmb3JlSXRlbTogZnVuY3Rpb24gKEssIEkpIHsKICAgICAgICB2YXIgUCA9IHRo
aXMuZ2V0SXRlbShLKTsKICAgICAgICB2YXIgTiA9IHRoaXMuY2ZnLmdldFByb3BlcnR5KCJzaXpl
Iik7CiAgICAgICAgaWYgKE4gIT0gdGhpcy5VTkJPVU5ERURfU0laRSkgewogICAgICAgICAgICB0
aGlzLmNmZy5zZXRQcm9wZXJ0eSgic2l6ZSIsIE4gKyAxLCB0cnVlKQogICAgICAgIH0KICAgICAg
ICBmb3IgKHZhciBPID0gdGhpcy5fbGFzdFByZWJ1aWx0SWR4OwogICAgICAgIE8gPj0gSzsKICAg
ICAgICBPLS0pIHsKICAgICAgICAgICAgdmFyIEwgPSB0aGlzLmdldEl0ZW0oTyk7CiAgICAgICAg
ICAgIGlmICh0aGlzLl9pc1ZhbGlkT2JqKEwpKSB7CiAgICAgICAgICAgICAgICBMLmlkID0gdGhp
cy5fY2Fyb3VzZWxFbGVtSUQgKyAiLWl0ZW0tIiArIChPICsgMSkKICAgICAgICAgICAgfQogICAg
ICAgIH0KICAgICAgICB2YXIgSiA9IHRoaXMuX2NyZWF0ZUl0ZW0oSywgSSk7CiAgICAgICAgdmFy
IE0gPSB0aGlzLmNhcm91c2VsTGlzdC5pbnNlcnRCZWZvcmUoSiwgUCk7CiAgICAgICAgdGhpcy5f
bGFzdFByZWJ1aWx0SWR4ICs9IDE7CiAgICAgICAgcmV0dXJuIEoKICAgIH0sCiAgICBpbnNlcnRB
ZnRlckVuZDogZnVuY3Rpb24gKEIpIHsKICAgICAgICByZXR1cm4gdGhpcy5pbnNlcnRBZnRlcih0
aGlzLmNmZy5nZXRQcm9wZXJ0eSgic2l6ZSIpLCBCKQogICAgfSwKICAgIF9wb3NpdGlvbjogZnVu
Y3Rpb24gKEYsIEopIHsKICAgICAgICB2YXIgSSA9IHRoaXMuX3ByaW9yRmlyc3RWaXNpYmxlOwog
ICAgICAgIGlmIChGID4gSSkgewogICAgICAgICAgICB2YXIgSCA9IEYgLSBJOwogICAgICAgICAg
ICB0aGlzLl9zY3JvbGxOZXh0SW5jKEgsIEopCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
dmFyIEcgPSBJIC0gRjsKICAgICAgICAgICAgdGhpcy5fc2Nyb2xsUHJldkluYyhHLCBKKQogICAg
ICAgIH0KICAgIH0sCiAgICBfc2Nyb2xsUHJldjogZnVuY3Rpb24gKEQsIEMpIHsKICAgICAgICBp
ZiAoRCAhPT0gbnVsbCkgewogICAgICAgICAgICBDLnN0b3BBdXRvUGxheSgpCiAgICAgICAgfQog
ICAgICAgIGlmIChDLl9zY3JvbGxQcmV2QW5pbS5pc0FuaW1hdGVkKCkpIHsKICAgICAgICAgICAg
cmV0dXJuIGZhbHNlCiAgICAgICAgfQogICAgICAgIEMuX3Njcm9sbFByZXZJbmMoQy5jZmcuZ2V0
UHJvcGVydHkoInNjcm9sbEluYyIpLCAoQy5jZmcuZ2V0UHJvcGVydHkoImFuaW1hdGlvblNwZWVk
IikgIT09IDApKQogICAgfSwKICAgIF9zY3JvbGxOZXh0OiBmdW5jdGlvbiAoRCwgQykgewogICAg
ICAgIGlmIChEICE9PSBudWxsKSB7CiAgICAgICAgICAgIEMuc3RvcEF1dG9QbGF5KCkKICAgICAg
ICB9CiAgICAgICAgaWYgKEMuX3Njcm9sbE5leHRBbmltLmlzQW5pbWF0ZWQoKSkgewogICAgICAg
ICAgICByZXR1cm4gZmFsc2UKICAgICAgICB9CiAgICAgICAgQy5fc2Nyb2xsTmV4dEluYyhDLmNm
Zy5nZXRQcm9wZXJ0eSgic2Nyb2xsSW5jIiksIChDLmNmZy5nZXRQcm9wZXJ0eSgiYW5pbWF0aW9u
U3BlZWQiKSAhPT0gMCkpCiAgICB9LAogICAgX2hhbmRsZUFuaW1hdGlvbkNvbXBsZXRlOiBmdW5j
dGlvbiAoSSwgSiwgRikgewogICAgICAgIHZhciBHID0gRlswXTsKICAgICAgICB2YXIgSCA9IEZb
MV07CiAgICAgICAgRy5fYW5pbWF0aW9uQ29tcGxldGVFdnQuZmlyZShIKQogICAgfSwKICAgIF9h
cmVBbGxJdGVtc0xvYWRlZDogZnVuY3Rpb24gKEgsIEkpIHsKICAgICAgICB2YXIgRiA9IHRydWU7
CiAgICAgICAgZm9yICh2YXIgSiA9IEg7CiAgICAgICAgSiA8PSBJOwogICAgICAgIEorKykgewog
ICAgICAgICAgICB2YXIgRyA9IHRoaXMuZ2V0SXRlbShKKTsKICAgICAgICAgICAgaWYgKCF0aGlz
Ll9pc1ZhbGlkT2JqKEcpKSB7CiAgICAgICAgICAgICAgICB0aGlzLl9wcmVidWlsZExpRWxlbShK
KTsKICAgICAgICAgICAgICAgIEYgPSBmYWxzZQogICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgaWYgKHRoaXMuX2lzVmFsaWRPYmooRy5wbGFjZWhvbGRlcikpIHsKICAgICAgICAg
ICAgICAgICAgICBGID0gZmFsc2UKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAg
ICAgIH0KICAgICAgICByZXR1cm4gRgogICAgfSwKICAgIF9wcmVidWlsZEl0ZW1zOiBmdW5jdGlv
biAoRywgSCkgewogICAgICAgIGZvciAodmFyIEUgPSBHOwogICAgICAgIEUgPD0gSDsKICAgICAg
ICBFKyspIHsKICAgICAgICAgICAgdmFyIEYgPSB0aGlzLmdldEl0ZW0oRSk7CiAgICAgICAgICAg
IGlmICghdGhpcy5faXNWYWxpZE9iaihGKSkgewogICAgICAgICAgICAgICAgdGhpcy5fcHJlYnVp
bGRMaUVsZW0oRSkKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0sCiAgICBfaXNFeHRyYVJl
dmVhbGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgcmV0dXJuICh0aGlzLmNmZy5nZXRQcm9wZXJ0
eSgicmV2ZWFsQW1vdW50IikgPiAwKQogICAgfSwKICAgIF9zY3JvbGxOZXh0SW5jOiBmdW5jdGlv
biAoZCwgWSkgewogICAgICAgIHZhciBVID0gdGhpcy5jZmcuZ2V0UHJvcGVydHkoIm51bVZpc2li
bGUiKTsKICAgICAgICB2YXIgVyA9IHRoaXMuX3ByaW9yRmlyc3RWaXNpYmxlOwogICAgICAgIHZh
ciBaID0gdGhpcy5fcHJpb3JMYXN0VmlzaWJsZTsKICAgICAgICB2YXIgVCA9IHRoaXMuY2ZnLmdl
dFByb3BlcnR5KCJzaXplIik7CiAgICAgICAgdmFyIFMgPSB0aGlzLl9jYWxjdWxhdGVBbGxvd2Fi
bGVTY3JvbGxFeHRlbnQoKTsKICAgICAgICBpZiAodGhpcy5jZmcuZ2V0UHJvcGVydHkoIndyYXAi
KSAmJiBaID09IFMuZW5kKSB7CiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG8oUy5zdGFydCk7CiAg
ICAgICAgICAgIHJldHVybgogICAgICAgIH0KICAgICAgICB2YXIgWCA9IFcgKyBkOwogICAgICAg
IHZhciBiID0gWCArIFUgLSAxOwogICAgICAgIGlmIChiID4gUy5lbmQpIHsKICAgICAgICAgICAg
YiA9IFMuZW5kOwogICAgICAgICAgICBYID0gYiAtIFUgKyAxCiAgICAgICAgfQogICAgICAgIGQg
PSBYIC0gVzsKICAgICAgICB0aGlzLmNmZy5zZXRQcm9wZXJ0eSgiZmlyc3RWaXNpYmxlIiwgWCwg
dHJ1ZSk7CiAgICAgICAgaWYgKGQgPiAwKSB7CiAgICAgICAgICAgIGlmICh0aGlzLl9pc1ZhbGlk
T2JqKHRoaXMuY2ZnLmdldFByb3BlcnR5KCJsb2FkTmV4dEhhbmRsZXIiKSkpIHsKICAgICAgICAg
ICAgICAgIHZhciBQID0gdGhpcy5fY2FsY3VsYXRlVmlzaWJsZUV4dGVudChYLCBiKTsKICAgICAg
ICAgICAgICAgIHZhciBjID0gKFogKyAxKSA8IFAuc3RhcnQgPyAoWiArIDEpIDogUC5zdGFydDsK
ICAgICAgICAgICAgICAgIHZhciBhID0gdGhpcy5fYXJlQWxsSXRlbXNMb2FkZWQoYywgUC5lbmQp
OwogICAgICAgICAgICAgICAgdGhpcy5fbG9hZE5leHRIYW5kbGVyRXZ0LmZpcmUoUC5zdGFydCwg
UC5lbmQsIGEpCiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKFkpIHsKICAgICAgICAgICAg
ICAgIHZhciBWID0gewogICAgICAgICAgICAgICAgICAgIHBvaW50czogewogICAgICAgICAgICAg
ICAgICAgICAgICBieTogWy10aGlzLnNjcm9sbEFtb3VudFBlckluYyAqIGQsIDBdCiAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIGlmICh0aGlz
LmlzVmVydGljYWwoKSkgewogICAgICAgICAgICAgICAgICAgIFYgPSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIHBvaW50czogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnk6IFswLCAt
dGhpcy5zY3JvbGxBbW91bnRQZXJJbmMgKiBkXQogICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhp
cy5fc2Nyb2xsTmV4dEFuaW0gPSBuZXcgWUFIT08udXRpbC5Nb3Rpb24odGhpcy5jYXJvdXNlbExp
c3QsIFYsIHRoaXMuY2ZnLmdldFByb3BlcnR5KCJhbmltYXRpb25TcGVlZCIpLCB0aGlzLmNmZy5n
ZXRQcm9wZXJ0eSgiYW5pbWF0aW9uTWV0aG9kIikpOwogICAgICAgICAgICAgICAgaWYgKHRoaXMu
Y2ZnLmdldFByb3BlcnR5KCJhbmltYXRpb25Db21wbGV0ZUhhbmRsZXIiKSkgewogICAgICAgICAg
ICAgICAgICAgIHRoaXMuX3Njcm9sbE5leHRBbmltLm9uQ29tcGxldGUuc3Vic2NyaWJlKHRoaXMu
X2hhbmRsZUFuaW1hdGlvbkNvbXBsZXRlLCBbdGhpcywgIm5leHQiXSkKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgIHRoaXMuX3Njcm9sbE5leHRBbmltLmFuaW1hdGUoKQogICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNWZXJ0aWNhbCgpKSB7CiAg
ICAgICAgICAgICAgICAgICAgdmFyIFIgPSBZQUhPTy51dGlsLkRvbS5nZXRZKHRoaXMuY2Fyb3Vz
ZWxMaXN0KTsKICAgICAgICAgICAgICAgICAgICBZQUhPTy51dGlsLkRvbS5zZXRZKHRoaXMuY2Fy
b3VzZWxMaXN0LCBSIC0gdGhpcy5zY3JvbGxBbW91bnRQZXJJbmMgKiBkKQogICAgICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB2YXIgUSA9IFlBSE9PLnV0aWwuRG9tLmdl
dFgodGhpcy5jYXJvdXNlbExpc3QpOwogICAgICAgICAgICAgICAgICAgIFlBSE9PLnV0aWwuRG9t
LnNldFgodGhpcy5jYXJvdXNlbExpc3QsIFEgLSB0aGlzLnNjcm9sbEFtb3VudFBlckluYyAqIGQp
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhpcy5f
cHJpb3JGaXJzdFZpc2libGUgPSBYOwogICAgICAgIHRoaXMuX3ByaW9yTGFzdFZpc2libGUgPSBi
OwogICAgICAgIHRoaXMuX2VuYWJsZURpc2FibGVDb250cm9scygpOwogICAgICAgIHJldHVybiBm
YWxzZQogICAgfSwKICAgIF9zY3JvbGxQcmV2SW5jOiBmdW5jdGlvbiAoYiwgWSkgewogICAgICAg
IHZhciBVID0gdGhpcy5jZmcuZ2V0UHJvcGVydHkoIm51bVZpc2libGUiKTsKICAgICAgICB2YXIg
VyA9IHRoaXMuX3ByaW9yRmlyc3RWaXNpYmxlOwogICAgICAgIHZhciBaID0gdGhpcy5fcHJpb3JM
YXN0VmlzaWJsZTsKICAgICAgICB2YXIgVCA9IHRoaXMuY2ZnLmdldFByb3BlcnR5KCJzaXplIik7
CiAgICAgICAgdmFyIFggPSBXIC0gYjsKICAgICAgICB2YXIgUyA9IHRoaXMuX2NhbGN1bGF0ZUFs
bG93YWJsZVNjcm9sbEV4dGVudCgpOwogICAgICAgIFggPSAoWCA8IFMuc3RhcnQpID8gUy5zdGFy
dCA6IFg7CiAgICAgICAgdmFyIGMgPSBYICsgVSAtIDE7CiAgICAgICAgaWYgKGMgPiBTLmVuZCkg
ewogICAgICAgICAgICBjID0gUy5lbmQ7CiAgICAgICAgICAgIFggPSBjIC0gVSArIDEKICAgICAg
ICB9CiAgICAgICAgYiA9IFcgLSBYOwogICAgICAgIHRoaXMuY2ZnLnNldFByb3BlcnR5KCJmaXJz
dFZpc2libGUiLCBYLCB0cnVlKTsKICAgICAgICBpZiAoYiA+IDApIHsKICAgICAgICAgICAgaWYg
KHRoaXMuX2lzVmFsaWRPYmoodGhpcy5jZmcuZ2V0UHJvcGVydHkoImxvYWRQcmV2SGFuZGxlciIp
KSkgewogICAgICAgICAgICAgICAgdmFyIGQgPSB0aGlzLl9jYWxjdWxhdGVWaXNpYmxlRXh0ZW50
KFgsIGMpOwogICAgICAgICAgICAgICAgdmFyIFEgPSAoVyAtIDEpID4gZC5lbmQgPyAoVyAtIDEp
IDogZC5lbmQ7CiAgICAgICAgICAgICAgICB2YXIgYSA9IHRoaXMuX2FyZUFsbEl0ZW1zTG9hZGVk
KGQuc3RhcnQsIFEpOwogICAgICAgICAgICAgICAgdGhpcy5fbG9hZFByZXZIYW5kbGVyRXZ0LmZp
cmUoZC5zdGFydCwgZC5lbmQsIGEpCiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKFkpIHsK
ICAgICAgICAgICAgICAgIHZhciBWID0gewogICAgICAgICAgICAgICAgICAgIHBvaW50czogewog
ICAgICAgICAgICAgICAgICAgICAgICBieTogW3RoaXMuc2Nyb2xsQW1vdW50UGVySW5jICogYiwg
MF0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAg
ICAgaWYgKHRoaXMuaXNWZXJ0aWNhbCgpKSB7CiAgICAgICAgICAgICAgICAgICAgViA9IHsKICAg
ICAgICAgICAgICAgICAgICAgICAgcG9pbnRzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBieTogWzAsIHRoaXMuc2Nyb2xsQW1vdW50UGVySW5jICogYl0KICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgIHRoaXMuX3Njcm9sbFByZXZBbmltID0gbmV3IFlBSE9PLnV0aWwuTW90aW9uKHRoaXMu
Y2Fyb3VzZWxMaXN0LCBWLCB0aGlzLmNmZy5nZXRQcm9wZXJ0eSgiYW5pbWF0aW9uU3BlZWQiKSwg
dGhpcy5jZmcuZ2V0UHJvcGVydHkoImFuaW1hdGlvbk1ldGhvZCIpKTsKICAgICAgICAgICAgICAg
IGlmICh0aGlzLmNmZy5nZXRQcm9wZXJ0eSgiYW5pbWF0aW9uQ29tcGxldGVIYW5kbGVyIikpIHsK
ICAgICAgICAgICAgICAgICAgICB0aGlzLl9zY3JvbGxQcmV2QW5pbS5vbkNvbXBsZXRlLnN1YnNj
cmliZSh0aGlzLl9oYW5kbGVBbmltYXRpb25Db21wbGV0ZSwgW3RoaXMsICJwcmV2Il0pCiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0aGlzLl9zY3JvbGxQcmV2QW5pbS5hbmltYXRl
KCkKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzVmVydGlj
YWwoKSkgewogICAgICAgICAgICAgICAgICAgIHZhciBSID0gWUFIT08udXRpbC5Eb20uZ2V0WSh0
aGlzLmNhcm91c2VsTGlzdCk7CiAgICAgICAgICAgICAgICAgICAgWUFIT08udXRpbC5Eb20uc2V0
WSh0aGlzLmNhcm91c2VsTGlzdCwgUiArIHRoaXMuc2Nyb2xsQW1vdW50UGVySW5jICogYikKICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIFAgPSBZQUhPTy51
dGlsLkRvbS5nZXRYKHRoaXMuY2Fyb3VzZWxMaXN0KTsKICAgICAgICAgICAgICAgICAgICBZQUhP
Ty51dGlsLkRvbS5zZXRYKHRoaXMuY2Fyb3VzZWxMaXN0LCBQICsgdGhpcy5zY3JvbGxBbW91bnRQ
ZXJJbmMgKiBiKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
ICAgIHRoaXMuX3ByaW9yRmlyc3RWaXNpYmxlID0gWDsKICAgICAgICB0aGlzLl9wcmlvckxhc3RW
aXNpYmxlID0gYzsKICAgICAgICB0aGlzLl9lbmFibGVEaXNhYmxlQ29udHJvbHMoKTsKICAgICAg
ICByZXR1cm4gZmFsc2UKICAgIH0sCiAgICBfZW5hYmxlRGlzYWJsZUNvbnRyb2xzOiBmdW5jdGlv
biAoKSB7CiAgICAgICAgdmFyIEUgPSB0aGlzLmNmZy5nZXRQcm9wZXJ0eSgiZmlyc3RWaXNpYmxl
Iik7CiAgICAgICAgdmFyIEQgPSB0aGlzLmdldExhc3RWaXNpYmxlKCk7CiAgICAgICAgdmFyIEYg
PSB0aGlzLl9jYWxjdWxhdGVBbGxvd2FibGVTY3JvbGxFeHRlbnQoKTsKICAgICAgICBpZiAodGhp
cy5fcHJldkVuYWJsZWQpIHsKICAgICAgICAgICAgaWYgKEUgPT09IEYuc3RhcnQpIHsKICAgICAg
ICAgICAgICAgIHRoaXMuX2Rpc2FibGVQcmV2KCkKICAgICAgICAgICAgfQogICAgICAgIH0KICAg
ICAgICBpZiAodGhpcy5fcHJldkVuYWJsZWQgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIGlmIChF
ID4gRi5zdGFydCkgewogICAgICAgICAgICAgICAgdGhpcy5fZW5hYmxlUHJldigpCiAgICAgICAg
ICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuX25leHRFbmFibGVkKSB7CiAgICAgICAg
ICAgIGlmIChEID09PSBGLmVuZCkgewogICAgICAgICAgICAgICAgdGhpcy5fZGlzYWJsZU5leHQo
KQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLl9uZXh0RW5hYmxlZCA9
PT0gZmFsc2UpIHsKICAgICAgICAgICAgaWYgKEQgPCBGLmVuZCkgewogICAgICAgICAgICAgICAg
dGhpcy5fZW5hYmxlTmV4dCgpCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9LAogICAgX2xv
YWRJbml0aWFsOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIEUgPSB0aGlzLmNmZy5nZXRQcm9w
ZXJ0eSgiZmlyc3RWaXNpYmxlIik7CiAgICAgICAgdGhpcy5fcHJpb3JMYXN0VmlzaWJsZSA9IHRo
aXMuZ2V0TGFzdFZpc2libGUoKTsKICAgICAgICBpZiAodGhpcy5fbG9hZEluaXRIYW5kbGVyRXZ0
KSB7CiAgICAgICAgICAgIHZhciBEID0gdGhpcy5fY2FsY3VsYXRlVmlzaWJsZUV4dGVudChFLCB0
aGlzLl9wcmlvckxhc3RWaXNpYmxlKTsKICAgICAgICAgICAgdmFyIEYgPSB0aGlzLl9hcmVBbGxJ
dGVtc0xvYWRlZCgxLCBELmVuZCk7CiAgICAgICAgICAgIHRoaXMuX2xvYWRJbml0SGFuZGxlckV2
dC5maXJlKEQuc3RhcnQsIEQuZW5kLCBGKQogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5jZmcu
Z2V0UHJvcGVydHkoImF1dG9QbGF5IikgIT09IDApIHsKICAgICAgICAgICAgdGhpcy5fYXV0b1Bs
YXlUaW1lciA9IHRoaXMuc3RhcnRBdXRvUGxheSgpCiAgICAgICAgfQogICAgICAgIHRoaXMuX2Vu
YWJsZURpc2FibGVDb250cm9scygpCiAgICB9LAogICAgX2NhbGN1bGF0ZUFsbG93YWJsZVNjcm9s
bEV4dGVudDogZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBGID0gdGhpcy5jZmcuZ2V0UHJvcGVy
dHkoInNjcm9sbEJlZm9yZUFtb3VudCIpOwogICAgICAgIHZhciBFID0gdGhpcy5jZmcuZ2V0UHJv
cGVydHkoInNjcm9sbEFmdGVyQW1vdW50Iik7CiAgICAgICAgdmFyIEggPSB0aGlzLmNmZy5nZXRQ
cm9wZXJ0eSgic2l6ZSIpOwogICAgICAgIHZhciBHID0gewogICAgICAgICAgICBzdGFydDogMSAt
IEYsCiAgICAgICAgICAgIGVuZDogSCArIEUKICAgICAgICB9OwogICAgICAgIHJldHVybiBHCiAg
ICB9LAogICAgX2NhbGN1bGF0ZVZpc2libGVFeHRlbnQ6IGZ1bmN0aW9uIChGLCBFKSB7CiAgICAg
ICAgaWYgKCFGKSB7CiAgICAgICAgICAgIEYgPSB0aGlzLmNmZy5nZXRQcm9wZXJ0eSgiZmlyc3RW
aXNpYmxlIik7CiAgICAgICAgICAgIEUgPSB0aGlzLmdldExhc3RWaXNpYmxlKCkKICAgICAgICB9
CiAgICAgICAgdmFyIEggPSB0aGlzLmNmZy5nZXRQcm9wZXJ0eSgic2l6ZSIpOwogICAgICAgIEYg
PSBGIDwgMSA/IDEgOiBGOwogICAgICAgIEUgPSBFID4gSCA/IEggOiBFOwogICAgICAgIHZhciBH
ID0gewogICAgICAgICAgICBzdGFydDogRiwKICAgICAgICAgICAgZW5kOiBFCiAgICAgICAgfTsK
ICAgICAgICB0aGlzLl9maXJzdEl0ZW1SZXZlYWxlZCA9IC0xOwogICAgICAgIHRoaXMuX2xhc3RJ
dGVtUmV2ZWFsZWQgPSAtMTsKICAgICAgICBpZiAodGhpcy5faXNFeHRyYVJldmVhbGVkKCkpIHsK
ICAgICAgICAgICAgaWYgKEYgPiAxKSB7CiAgICAgICAgICAgICAgICB0aGlzLl9maXJzdEl0ZW1S
ZXZlYWxlZCA9IEYgLSAxOwogICAgICAgICAgICAgICAgRy5zdGFydCA9IHRoaXMuX2ZpcnN0SXRl
bVJldmVhbGVkCiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKEUgPCBIKSB7CiAgICAgICAg
ICAgICAgICB0aGlzLl9sYXN0SXRlbVJldmVhbGVkID0gRSArIDE7CiAgICAgICAgICAgICAgICBH
LmVuZCA9IHRoaXMuX2xhc3RJdGVtUmV2ZWFsZWQKICAgICAgICAgICAgfQogICAgICAgIH0KICAg
ICAgICByZXR1cm4gRwogICAgfSwKICAgIF9kaXNhYmxlUHJldjogZnVuY3Rpb24gKCkgewogICAg
ICAgIHRoaXMuX3ByZXZFbmFibGVkID0gZmFsc2U7CiAgICAgICAgaWYgKHRoaXMuX3ByZXZCdXR0
b25TdGF0ZUhhbmRsZXJFdnQpIHsKICAgICAgICAgICAgdGhpcy5fcHJldkJ1dHRvblN0YXRlSGFu
ZGxlckV2dC5maXJlKGZhbHNlLCB0aGlzLl9jYXJvdXNlbFByZXYpCiAgICAgICAgfQogICAgICAg
IGlmICh0aGlzLl9pc1ZhbGlkT2JqKHRoaXMuX2Nhcm91c2VsUHJldikpIHsKICAgICAgICAgICAg
WUFIT08udXRpbC5FdmVudC5yZW1vdmVMaXN0ZW5lcih0aGlzLl9jYXJvdXNlbFByZXYsICJjbGlj
ayIsIHRoaXMuX3Njcm9sbFByZXYpCiAgICAgICAgfQogICAgfSwKICAgIF9lbmFibGVQcmV2OiBm
dW5jdGlvbiAoKSB7CiAgICAgICAgdGhpcy5fcHJldkVuYWJsZWQgPSB0cnVlOwogICAgICAgIGlm
ICh0aGlzLl9wcmV2QnV0dG9uU3RhdGVIYW5kbGVyRXZ0KSB7CiAgICAgICAgICAgIHRoaXMuX3By
ZXZCdXR0b25TdGF0ZUhhbmRsZXJFdnQuZmlyZSh0cnVlLCB0aGlzLl9jYXJvdXNlbFByZXYpCiAg
ICAgICAgfQogICAgICAgIGlmICh0aGlzLl9pc1ZhbGlkT2JqKHRoaXMuX2Nhcm91c2VsUHJldikp
IHsKICAgICAgICAgICAgWUFIT08udXRpbC5FdmVudC5hZGRMaXN0ZW5lcih0aGlzLl9jYXJvdXNl
bFByZXYsICJjbGljayIsIHRoaXMuX3Njcm9sbFByZXYsIHRoaXMpCiAgICAgICAgfQogICAgfSwK
ICAgIF9kaXNhYmxlTmV4dDogZnVuY3Rpb24gKCkgewogICAgICAgIGlmICh0aGlzLmNmZy5nZXRQ
cm9wZXJ0eSgid3JhcCIpKSB7CiAgICAgICAgICAgIHJldHVybgogICAgICAgIH0KICAgICAgICB0
aGlzLl9uZXh0RW5hYmxlZCA9IGZhbHNlOwogICAgICAgIGlmICh0aGlzLl9pc1ZhbGlkT2JqKHRo
aXMuX25leHRCdXR0b25TdGF0ZUhhbmRsZXJFdnQpKSB7CiAgICAgICAgICAgIHRoaXMuX25leHRC
dXR0b25TdGF0ZUhhbmRsZXJFdnQuZmlyZShmYWxzZSwgdGhpcy5fY2Fyb3VzZWxOZXh0KQogICAg
ICAgIH0KICAgICAgICBpZiAodGhpcy5faXNWYWxpZE9iaih0aGlzLl9jYXJvdXNlbE5leHQpKSB7
CiAgICAgICAgICAgIFlBSE9PLnV0aWwuRXZlbnQucmVtb3ZlTGlzdGVuZXIodGhpcy5fY2Fyb3Vz
ZWxOZXh0LCAiY2xpY2siLCB0aGlzLl9zY3JvbGxOZXh0KQogICAgICAgIH0KICAgIH0sCiAgICBf
ZW5hYmxlTmV4dDogZnVuY3Rpb24gKCkgewogICAgICAgIHRoaXMuX25leHRFbmFibGVkID0gdHJ1
ZTsKICAgICAgICBpZiAodGhpcy5faXNWYWxpZE9iaih0aGlzLl9uZXh0QnV0dG9uU3RhdGVIYW5k
bGVyRXZ0KSkgewogICAgICAgICAgICB0aGlzLl9uZXh0QnV0dG9uU3RhdGVIYW5kbGVyRXZ0LmZp
cmUodHJ1ZSwgdGhpcy5fY2Fyb3VzZWxOZXh0KQogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5f
aXNWYWxpZE9iaih0aGlzLl9jYXJvdXNlbE5leHQpKSB7CiAgICAgICAgICAgIFlBSE9PLnV0aWwu
RXZlbnQuYWRkTGlzdGVuZXIodGhpcy5fY2Fyb3VzZWxOZXh0LCAiY2xpY2siLCB0aGlzLl9zY3Jv
bGxOZXh0LCB0aGlzKQogICAgICAgIH0KICAgIH0sCiAgICBfaXNWYWxpZE9iajogZnVuY3Rpb24g
KEIpIHsKICAgICAgICBpZiAobnVsbCA9PSBCKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZQog
ICAgICAgIH0KICAgICAgICBpZiAoInVuZGVmaW5lZCIgPT0gdHlwZW9mKEIpKSB7CiAgICAgICAg
ICAgIHJldHVybiBmYWxzZQogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZQogICAgfQp9Ozwv
c2NyaXB0PgoKCgo8c2NyaXB0PgpmdW5jdGlvbiBGZWF0dXJlZEhvbWVDYXJvdXNlbChCLCBDLCBB
LCBEKSB7CiAgICBpZiAoQikgewogICAgICAgIHRoaXMubWV0cm8gPSBCOwogICAgICAgIHRoaXMu
c2l6ZSA9IEM7CiAgICAgICAgdGhpcy5zb3J0QnlQcmljZSA9IEE7CiAgICAgICAgdGhpcy5pc0xv
Z2dlZEluID0gRDsKICAgICAgICBZQUhPTy51dGlsLkV2ZW50LmFkZExpc3RlbmVyKHdpbmRvdywg
ImxvYWQiLCB0aGlzLmluaXQsIHRoaXMsIHRydWUpCiAgICB9IGVsc2UgewogICAgICAgIFlBSE9P
LnV0aWwuRXZlbnQuYWRkTGlzdGVuZXIod2luZG93LCAibG9hZCIsIHRoaXMuaW5pdEFzeW5jLCB0
aGlzLCB0cnVlKQogICAgfQp9CkZlYXR1cmVkSG9tZUNhcm91c2VsLnByb3RvdHlwZS5sb2FkSW5p
dGlhbEl0ZW1zID0gZnVuY3Rpb24gKEIsIEEpIHsKICAgIHZhciBEID0gQVswXTsKICAgIHZhciBD
ID0gQVsxXTsKICAgIC8vIHRoaXMubWFrZVJlcXVlc3QoRCwgQyAtIEQgKyAxKQp9OwpGZWF0dXJl
ZEhvbWVDYXJvdXNlbC5wcm90b3R5cGUubG9hZE5leHRJdGVtcyA9IGZ1bmN0aW9uIChDLCBCKSB7
CiAgICB2YXIgRiA9IEJbMF07CiAgICB2YXIgRCA9IEJbMV07CiAgICB2YXIgRSA9IEJbMl07CiAg
ICB2YXIgQSA9IChEIC0gRiArIDEpOwogICAgaWYgKEQgPiB0aGlzLnNpemUpIHsKICAgICAgICBB
ID0gKHRoaXMuc2l6ZSAtIEYpCiAgICB9CiAgICBpZiAoIUUpIHsKICAgICAgICB0aGlzLm1ha2VS
ZXF1ZXN0KEYsIEEpCiAgICB9Cn07CkZlYXR1cmVkSG9tZUNhcm91c2VsLnByb3RvdHlwZS5sb2Fk
UHJldkl0ZW1zID0gZnVuY3Rpb24gKEMsIEIpIHsKICAgIHZhciBGID0gQlswXTsKICAgIHZhciBE
ID0gQlsxXTsKICAgIHZhciBFID0gQlsyXTsKICAgIHZhciBBID0gKEQgLSBGICsgMSk7CiAgICBp
ZiAoRCA+IHRoaXMuc2l6ZSkgewogICAgICAgIEEgPSAodGhpcy5zaXplIC0gRikKICAgIH0KICAg
IGlmICghRSkgewogICAgICAgIHRoaXMubWFrZVJlcXVlc3QoRiwgQSkKICAgIH0KfTsKRmVhdHVy
ZWRIb21lQ2Fyb3VzZWwucHJvdG90eXBlLmhhbmRsZVByZXZCdXR0b25TdGF0ZSA9IGZ1bmN0aW9u
IChDLCBBKSB7CiAgICB2YXIgQiA9IEFbMF07CiAgICB2YXIgRCA9IEFbMV07CiAgICBpZiAoQikg
ewogICAgICAgIEQuc3JjID0gIiIKICAgIH0gZWxzZSB7CiAgICAgICAgRC5zcmMgPSAiIgogICAg
fQp9OwpGZWF0dXJlZEhvbWVDYXJvdXNlbC5wcm90b3R5cGUuaGFuZGxlTmV4dEJ1dHRvblN0YXRl
ID0gZnVuY3Rpb24gKEQsIEIpIHsKICAgIHZhciBDID0gQlswXTsKICAgIHZhciBBID0gQlsxXTsK
ICAgIGlmIChDKSB7CiAgICAgICAgQS5zcmMgPSAiIgogICAgfSBlbHNlIHsKICAgICAgICBBLnNy
YyA9ICIiCiAgICB9Cn07CkZlYXR1cmVkSG9tZUNhcm91c2VsLnByb3RvdHlwZS5zaG93QnV0dG9u
cyA9IGZ1bmN0aW9uIChCLCBBKSB7CiAgICBZQUhPTy51dGlsLkRvbS5zZXRTdHlsZSgibmV4dC1h
cnJvdyIsICJ2aXNpYmlsaXR5IiwgInZpc2libGUiKTsKICAgIFlBSE9PLnV0aWwuRG9tLnNldFN0
eWxlKCJwcmV2LWFycm93IiwgInZpc2liaWxpdHkiLCAidmlzaWJsZSIpCn07CkZlYXR1cmVkSG9t
ZUNhcm91c2VsLnByb3RvdHlwZS5jcmVhdGVBZGFwdGVyID0gZnVuY3Rpb24gKEIsIEEpIHsKICAg
IHJldHVybiBmdW5jdGlvbiAoKSB7CiAgICAgICAgQi5hcHBseShBLCBhcmd1bWVudHMpCiAgICB9
Cn07CkZlYXR1cmVkSG9tZUNhcm91c2VsLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKCkgewog
ICAgdGhpcy5jYXJvdXNlbCA9IG5ldyBZQUhPTy5leHRlbnNpb24uQ2Fyb3VzZWwoIm15Y2Fyb3Vz
ZWwiLCB7CiAgICAgICAgc2l6ZTogdGhpcy5zaXplIC0gMSwKICAgICAgICBudW1WaXNpYmxlOiAz
LAogICAgICAgIGFuaW1hdGlvblNwZWVkOiAxLAogICAgICAgIHNjcm9sbEluYzogMywKICAgICAg
ICBuYXZNYXJnaW46IDE1LAogICAgICAgIGxvYWRJbml0SGFuZGxlcjogdGhpcy5jcmVhdGVBZGFw
dGVyKHRoaXMuaW5pdExvYWQsIHRoaXMpLAogICAgICAgIHByZXZFbGVtZW50OiAicHJldi1hcnJv
dyIsCiAgICAgICAgbmV4dEVsZW1lbnQ6ICJuZXh0LWFycm93IiwKICAgICAgICBsb2FkTmV4dEhh
bmRsZXI6IHRoaXMuY3JlYXRlQWRhcHRlcih0aGlzLmxvYWROZXh0SXRlbXMsIHRoaXMpLAogICAg
ICAgIGxvYWRQcmV2SGFuZGxlcjogdGhpcy5jcmVhdGVBZGFwdGVyKHRoaXMubG9hZFByZXZJdGVt
cywgdGhpcyksCiAgICAgICAgcHJldkJ1dHRvblN0YXRlSGFuZGxlcjogdGhpcy5jcmVhdGVBZGFw
dGVyKHRoaXMuaGFuZGxlUHJldkJ1dHRvblN0YXRlLCB0aGlzKSwKICAgICAgICBuZXh0QnV0dG9u
U3RhdGVIYW5kbGVyOiB0aGlzLmNyZWF0ZUFkYXB0ZXIodGhpcy5oYW5kbGVOZXh0QnV0dG9uU3Rh
dGUsIHRoaXMpCiAgICB9KTsKICAgIGlmICh0aGlzLnNpemUgPD0gMykgewogICAgICAgIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJuZXh0LWFycm93Iikuc3JjID0gIiIKICAgIH0KfTsKRmVhdHVy
ZWRIb21lQ2Fyb3VzZWwucHJvdG90eXBlLmluaXRBc3luYyA9IGZ1bmN0aW9uICgpIHsKICAgIHZh
ciBCID0gewogICAgICAgIHN1Y2Nlc3M6IHRoaXMuaW5pdEFzeW5jSGFuZGxlciwKICAgICAgICBm
YWlsdXJlOiB0aGlzLmluaXRBc3luY0hhbmRsZXIsCiAgICAgICAgc2NvcGU6IHRoaXMKICAgIH07
CiAgICB2YXIgQSA9ICIvYnV5X2FfaG9tZS9sb2dnZWRfaW4vc2VhcmNoL21zZXJ2ZXIvZmhjLmpz
cD9yYW5kPSIgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAxKTsKICAgIFlBSE9PLnV0
aWwuQ29ubmVjdC5hc3luY1JlcXVlc3QoIkdFVCIsIEEsIEIpCn07CkZlYXR1cmVkSG9tZUNhcm91
c2VsLnByb3RvdHlwZS5pbml0QXN5bmNIYW5kbGVyID0gZnVuY3Rpb24gKEIpIHsKICAgIHZhciBD
ID0gQi5yZXNwb25zZVRleHQ7CiAgICBpZiAoQyAhPSBudWxsKSB7CiAgICAgICAgdmFyIEEgPSBD
LnNwbGl0KCJcdCIpOwogICAgICAgIGlmIChBICE9IG51bGwgJiYgQS5sZW5ndGggPT0gNCkgewog
ICAgICAgICAgICB0aGlzLm1ldHJvID0gQVswXTsKICAgICAgICAgICAgdGhpcy5zaXplID0gQVsx
XTsKICAgICAgICAgICAgdGhpcy5zb3J0QnlQcmljZSA9IEFbMl0gPT0gIjEiID8gdHJ1ZSA6IGZh
bHNlOwogICAgICAgICAgICB0aGlzLmlzTG9nZ2VkSW4gPSBBWzNdID09ICIxIiA/IHRydWUgOiBm
YWxzZQogICAgICAgIH0KICAgIH0KICAgIHRoaXMuaW5pdCgpCn07CkZlYXR1cmVkSG9tZUNhcm91
c2VsLnByb3RvdHlwZS5pbml0TG9hZCA9IGZ1bmN0aW9uIChCLCBBKSB7CiAgICB2YXIgRCA9IEFb
MF07CiAgICB2YXIgQyA9IEFbMV07CiAgICAvLyB0aGlzLm1ha2VSZXF1ZXN0KEQsIChDIC0gRCAr
IDEpKQp9OwpGZWF0dXJlZEhvbWVDYXJvdXNlbC5wcm90b3R5cGUuc3VjY2VzcyA9IGZ1bmN0aW9u
IChjYWxsYmFja1Jlc3BvbnNlKSB7CiAgICB2YXIgc3RhcnQgPSBjYWxsYmFja1Jlc3BvbnNlLmFy
Z3VtZW50WzBdOwogICAgdmFyIG51bVJlc3VsdHMgPSBjYWxsYmFja1Jlc3BvbnNlLmFyZ3VtZW50
WzFdOwogICAgaWYgKGNhbGxiYWNrUmVzcG9uc2UucmVzcG9uc2VUZXh0ICE9PSB1bmRlZmluZWQp
IHsKICAgICAgICB2YXIgRkhMaXN0ID0gZXZhbCgiKCIgKyBjYWxsYmFja1Jlc3BvbnNlLnJlc3Bv
bnNlVGV4dCArICIpIik7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7CiAgICAgICAgaSA8IEZITGlz
dC5sZW5ndGg7CiAgICAgICAgaSsrKSB7CiAgICAgICAgICAgIHZhciByZXN1bHQgPSBGSExpc3Rb
aV07CiAgICAgICAgICAgIHRoaXMuY2Fyb3VzZWwuYWRkSXRlbShzdGFydCArIGksIHRoaXMuZm10
RkhJbm5lckhUTUwocmVzdWx0KSkKICAgICAgICB9CiAgICAgICAgdGhpcy5zaG93QnV0dG9ucygp
CiAgICB9Cn07CkZlYXR1cmVkSG9tZUNhcm91c2VsLnByb3RvdHlwZS5mbXRGSElubmVySFRNTCA9
IGZ1bmN0aW9uIChBKSB7CiAgICB2YXIgQiA9IEEudXJsOwogICAgaWYgKHRoaXMuaXNMb2dnZWRJ
bikgewogICAgICAgIEIgPSBBLnVybAogICAgfSBlbHNlIHsKICAgICAgICBCID0gQS5wcmVsb2dp
bl91cmwKICAgIH0KICAgIHZhciBDID0gJzx0YWJsZSB3aWR0aD0iMjY1Ij48dHI+PHRkIHZhbGln
bj0idG9wIiBjbGFzcz0iY2Fyb3VzZWxpdGVtbGVmdCI+PGEgaHJlZj0iJyArIEIgKyAnIj48aW1n
IHNyYz0iJyArIEEuaW1hZ2UgKyAnIiB3aWR0aD0iMTAwIiBoZWlnaHQ9Ijc1Ij48L2E+PGJyPjxh
IGhyZWY9IicgKyBCICsgJyI+PGltZyBzcmM9Ii9pbWFnZXMvYnV5X2FfaG9tZS9zZWFyY2gvbXVs
dF9waG90b3NfMjN4MTcuZ2lmIiB3aWR0aD0iMjMiIGhlaWdodD0iMTciIHZzcGFjZT0iMiIgYWx0
PSJMaXN0aW5nIGhhcyBtdWx0aXBsZSBwaG90b3MiIHRpdGxlPSJMaXN0aW5nIGhhcyBtdWx0aXBs
ZSBwaG90b3MiPjwvYT48L3RkPjx0ZCB2YWxpZ249InRvcCIgY2xhc3M9ImNhcm91c2VsaXRlbWxl
ZnQiPjxhIGhyZWY9IicgKyBCICsgJyIgY2xhc3M9ImNhcm91c2VsaXRlbWxpbmsiPicgKyBBLmFk
ZHJlc3MgKyAiPGJyPiIgKyBBLmNpdHkgKyAiLCAiICsgQS5zdGF0ZSArICIgIiArIEEuemlwICsg
JzwvYT48YnI+PHNwYW4gY2xhc3M9ImNhcm91c2VsaXRlbXByaWNlIj4nICsgQS5wcmljZSArICI8
L3NwYW4+PGJyPjxiPkJlZHMvQmF0aHM6PC9iPiAiICsgQS5iZHIgKyAiLyIgKyBBLmJhdGggKyAi
PGJyPjxiPlNxLkZ0Ljo8L2I+ICIgKyBBLnNxZnQgKyAiPGJyPkxvdCBTaXplOiAiICsgQS5sb3Rz
eiArICI8YnI+IiArICh0aGlzLm1ldHJvID09ICJwaGlsYWRlbHBoaWEiID8gKCJZZWFyIEJ1aWx0
OiAiICsgQS55cmJsdCArICI8YnI+IikgOiAiIik7CiAgICBpZiAoISAodGhpcy5tZXRybyA9PSAi
ZGFsbGFzIikgJiYgISh0aGlzLm1ldHJvID09ICJub3Jmb2xrIikpIHsKICAgICAgICBDICs9ICIi
ICsgQS5kb20gKyAiPGJyPiIKICAgIH0KICAgIEMgKz0gIjwvdGQ+PC90cj48L3RhYmxlPiI7CiAg
ICByZXR1cm4gQwp9OwpGZWF0dXJlZEhvbWVDYXJvdXNlbC5wcm90b3R5cGUuZmFpbHVyZSA9IGZ1
bmN0aW9uIChCKSB7CiAgICB2YXIgQSA9IEIuc3RhdHVzICsgIiAiICsgQi5zdGF0dXNUZXh0Cn07
CkZlYXR1cmVkSG9tZUNhcm91c2VsLlBBVEggPSAiL2J1eV9hX2hvbWUvbG9nZ2VkX2luL3NlYXJj
aC9tc2VydmVyL2dldEZILmpzcCI7CkZlYXR1cmVkSG9tZUNhcm91c2VsLnByb3RvdHlwZS5tYWtl
UmVxdWVzdCA9IGZ1bmN0aW9uIChFLCBBKSB7CiAgICB2YXIgQyA9ICI/bWV0cm89IiArIHRoaXMu
bWV0cm8gKyAiJnN0YXJ0PSIgKyBFICsgIiZyZXN1bHRzPSIgKyBBICsgIiZzb3J0X2J5X3ByaWNl
PSIgKyB0aGlzLnNvcnRCeVByaWNlOwogICAgdmFyIEQgPSB7CiAgICAgICAgc3VjY2VzczogdGhp
cy5zdWNjZXNzLAogICAgICAgIGZhaWx1cmU6IHRoaXMuZmFpbHVyZSwKICAgICAgICBzY29wZTog
dGhpcywKICAgICAgICBhcmd1bWVudDogW0UsIEFdCiAgICB9OwogICAgdmFyIEIgPSBGZWF0dXJl
ZEhvbWVDYXJvdXNlbC5QQVRIICsgQzsKICAgIFlBSE9PLnV0aWwuQ29ubmVjdC5hc3luY1JlcXVl
c3QoIkdFVCIsIEIsIEQpCn07PC9zY3JpcHQ+CgoKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp
cHQiPgogIHZhciBjYXJvdXNlbCA9IG5ldyBGZWF0dXJlZEhvbWVDYXJvdXNlbCh0cnVlKTsKICAv
LyBjYXJvdXNlbC5fY2FsY3VsYXRlU2l6ZSgpOwo8L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+
</data>

          </attachment>
      

    </bug>

</bugzilla>