<?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>171308</bug_id>
          
          <creation_ts>2017-04-25 18:53:55 -0700</creation_ts>
          <short_desc>Speedometer: Update the jQuery implementation to a more recent library version</short_desc>
          <delta_ts>2017-05-11 17:55:34 -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>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>170513</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Addy Osmani">addyo</reporter>
          <assigned_to name="Addy Osmani">addyo</assigned_to>
          <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>lforschler</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1301405</commentid>
    <comment_count>0</comment_count>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-04-25 18:53:55 -0700</bug_when>
    <thetext>As part of Speedometer 2.0 (https://bugs.webkit.org/show_bug.cgi?id=170513), the jQuery implementation of TodoMVC needs to be updated to a more recent version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1301409</commentid>
    <comment_count>1</comment_count>
      <attachid>308187</attachid>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-04-25 18:57:55 -0700</bug_when>
    <thetext>Created attachment 308187
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1306584</commentid>
    <comment_count>2</comment_count>
      <attachid>308187</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-05-09 14:41:45 -0700</bug_when>
    <thetext>Comment on attachment 308187
Patch

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

&gt; PerformanceTests/ChangeLog:7
&gt; +        Updates the jQuery implementation of TodoMVC to a more recent version

Add a blank line above this.

&gt; PerformanceTests/ChangeLog:46
&gt; +        (webpackUniversalModuleDefinition):

Please remove these inline comments when files are simply imported or deleted from somewhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307577</commentid>
    <comment_count>3</comment_count>
      <attachid>309819</attachid>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-05-11 16:37:08 -0700</bug_when>
    <thetext>Created attachment 309819
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307578</commentid>
    <comment_count>4</comment_count>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-05-11 16:37:28 -0700</bug_when>
    <thetext>Added a blank line above and dropped the inline comments. PTAL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307646</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-11 17:54:24 -0700</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 309819:

workers/bomb.html bug 171985 (author: fpizlo@apple.com)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307647</commentid>
    <comment_count>6</comment_count>
      <attachid>309819</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-11 17:55:33 -0700</bug_when>
    <thetext>Comment on attachment 309819
Patch

Clearing flags on attachment: 309819

Committed r216713: &lt;http://trac.webkit.org/changeset/216713&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307648</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-11 17:55:34 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308187</attachid>
            <date>2017-04-25 18:57:55 -0700</date>
            <delta_ts>2017-05-11 16:37:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171308-20170425185754.patch</filename>
            <type>text/plain</type>
            <size>983684</size>
            <attacher name="Addy Osmani">addyo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1NjgzCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGVjNDZiZjNlOGFh
MmIyMTYyMjE3ZWMxNDJiMGMzOWQwYTk5ZGFlZmMuLjU1NTM0MjQ5YWE5YTI0NDE2ZjZlYzQ5MGFk
MWJjNWNkN2VkZDJlMTYgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjc0IEBACisyMDE3LTA0
LTI1ICBBZGR5IE9zbWFuaSAgPGFkZHlvc21hbmlAZ21haWwuY29tPgorCisgICAgICAgIFNwZWVk
b21ldGVyOiBVcGRhdGUgdGhlIGpRdWVyeSBpbXBsZW1lbnRhdGlvbiB0byBhIG1vcmUgcmVjZW50
IGxpYnJhcnkgdmVyc2lvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTcxMzA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisg
ICAgICAgIFVwZGF0ZXMgdGhlIGpRdWVyeSBpbXBsZW1lbnRhdGlvbiBvZiBUb2RvTVZDIHRvIGEg
bW9yZSByZWNlbnQgdmVyc2lvbgorCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2pxdWVyeS9ib3dlci5qc29uOiBSZW1vdmVkLgor
ICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9qcXVlcnkvYm93ZXJfY29tcG9uZW50cy9oYW5kbGViYXJzL2hhbmRsZWJhcnMuanM6IFJl
bW92ZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL2pxdWVyeS9ib3dlcl9jb21wb25lbnRzL2pxdWVyeS9qcXVlcnkuanM6IFJl
bW92ZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL2pxdWVyeS9ib3dlcl9jb21wb25lbnRzL3RvZG9tdmMtY29tbW9uL2Jhc2Uu
Y3NzOiBSZW1vdmVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9qcXVlcnkvYm93ZXJfY29tcG9uZW50cy90b2RvbXZjLWNvbW1v
bi9iYXNlLmpzOiBSZW1vdmVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9qcXVlcnkvYm93ZXJfY29tcG9uZW50cy90b2RvbXZj
LWNvbW1vbi9iZy5wbmc6IFJlbW92ZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2pxdWVyeS9pbmRleC5odG1sOgorICAgICAg
ICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9q
cXVlcnkvanMvYXBwLmpzOgorICAgICAgICAoalF1ZXJ5LnV0aWwudXVpZCk6CisgICAgICAgIChq
UXVlcnkudXRpbC5wbHVyYWxpemUpOgorICAgICAgICAoalF1ZXJ5LnV0aWwuc3RvcmUpOgorICAg
ICAgICAoalF1ZXJ5LkFwcC5uZXcuUm91dGVyKToKKyAgICAgICAgKGpRdWVyeS5BcHAuaW5pdCk6
CisgICAgICAgIChqUXVlcnkuQXBwLmJpbmRFdmVudHMpOgorICAgICAgICAoalF1ZXJ5LkFwcC5y
ZW5kZXIpOgorICAgICAgICAoalF1ZXJ5LkFwcC5yZW5kZXJGb290ZXIpOgorICAgICAgICAoalF1
ZXJ5LkFwcC50b2dnbGVBbGwpOgorICAgICAgICAoalF1ZXJ5LkFwcC5nZXRBY3RpdmVUb2Rvcyk6
CisgICAgICAgIChqUXVlcnkuQXBwLmdldENvbXBsZXRlZFRvZG9zKToKKyAgICAgICAgKGpRdWVy
eS5BcHAuZ2V0RmlsdGVyZWRUb2Rvcyk6CisgICAgICAgIChqUXVlcnkuQXBwLmRlc3Ryb3lDb21w
bGV0ZWQpOgorICAgICAgICAoalF1ZXJ5LkFwcC5pbmRleEZyb21FbCk6CisgICAgICAgIChqUXVl
cnkuQXBwLmNyZWF0ZSk6CisgICAgICAgIChqUXVlcnkuQXBwLnRvZ2dsZSk6CisgICAgICAgIChq
UXVlcnkuQXBwLmVkaXQpOgorICAgICAgICAoalF1ZXJ5LkFwcC5lZGl0S2V5dXApOgorICAgICAg
ICAoalF1ZXJ5LkFwcC51cGRhdGUpOgorICAgICAgICAoalF1ZXJ5LkFwcC5kZXN0cm95KToKKyAg
ICAgICAgKGpRdWVyeSk6CisgICAgICAgIChqUXVlcnkuVXRpbHMudXVpZCk6IERlbGV0ZWQuCisg
ICAgICAgIChqUXVlcnkuVXRpbHMucGx1cmFsaXplKTogRGVsZXRlZC4KKyAgICAgICAgKGpRdWVy
eS5VdGlscy5zdG9yZSk6IERlbGV0ZWQuCisgICAgICAgIChqUXVlcnkuQXBwLmNhY2hlRWxlbWVu
dHMpOiBEZWxldGVkLgorICAgICAgICAoalF1ZXJ5LkFwcC5hY3RpdmVUb2RvQ291bnQpOiBEZWxl
dGVkLgorICAgICAgICAoalF1ZXJ5LkFwcC5nZXRUb2RvKTogRGVsZXRlZC4KKyAgICAgICAgKGpR
dWVyeS5BcHAuYmx1ck9uRW50ZXIpOiBEZWxldGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9qcXVlcnkvbm9kZV9tb2R1bGVz
L2hhbmRsZWJhcnMvZGlzdC9oYW5kbGViYXJzLmpzOiBBZGRlZC4KKyAgICAgICAgKHdlYnBhY2tV
bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKToKKyAgICAgICAgKHJldHVybik6CisgICAgICAgIChj
cmVhdGUuaGIuY29tcGlsZSk6CisgICAgICAgIChjcmVhdGUuaGIucHJlY29tcGlsZSk6CisgICAg
ICAgIChjcmVhdGUpOgorICAgICAgICAoZXhwb3J0cy5zdHJpbmdfYXBwZWFyZWRfaGVyZSk6Cisg
ICAgICAgIChjcmVhdGUuaGIudGVtcGxhdGUpOgorICAgICAgICAoSGFuZGxlYmFyc0Vudmlyb25t
ZW50KToKKyAgICAgICAgKEhhbmRsZWJhcnNFbnZpcm9ubWVudC5wcm90b3R5cGUucmVnaXN0ZXJI
ZWxwZXIpOgorICAgICAgICAoSGFuZGxlYmFyc0Vudmlyb25tZW50LnByb3RvdHlwZS51bnJlZ2lz
dGVySGVscGVyKToKKyAgICAgICAgKEhhbmRsZWJhcnNFbnZpcm9ubWVudC5wcm90b3R5cGUucmVn
aXN0ZXJQYXJ0aWFsKToKKyAgICAgICAgKEhhbmRsZWJhcnNFbnZpcm9ubWVudC5wcm90b3R5cGUu
dW5yZWdpc3RlclBhcnRpYWwpOgorICAgICAgICAoSGFuZGxlYmFyc0Vudmlyb25tZW50LnByb3Rv
dHlwZS5yZWdpc3RlckRlY29yYXRvcik6CisgICAgICAgIChIYW5kbGViYXJzRW52aXJvbm1lbnQu
cHJvdG90eXBlLnVucmVnaXN0ZXJEZWNvcmF0b3IpOgorICAgICAgICAoYmFkQ2hhcnMucG9zc2li
bGUpOgorICAgICAgICAoZXh0ZW5kKToKKyAgICAgICAgKGlzRnVuY3Rpb24pOgorICAgICAgICAo
aXNGdW5jdGlvbi5leHBvcnRzLmlzRnVuY3Rpb24uaXNGdW5jdGlvbik6CisgICAgICAgIChpc0Fy
cmF5LkFycmF5LmlzQXJyYXkpOgorICAgICAgICAoaW5kZXhPZik6CisgICAgICAgIChlc2NhcGVF
eHByZXNzaW9uKToKKyAgICAgICAgKGlzRW1wdHkpOgorICAgICAgICAoY3JlYXRlRnJhbWUpOgor
ICAgICAgICAoYmxvY2tQYXJhbXMpOgorICAgICAgICAoYXBwZW5kQ29udGV4dFBhdGgpOgorICAg
ICAgICAoRXhjZXB0aW9uKToKKyAgICAgICAgKG1vZHVsZS5leHBvcnRzKToKKyAgICAgICAgKHJl
Z2lzdGVyRGVmYXVsdEhlbHBlcnMpOgorICAgICAgICAocmVnaXN0ZXJEZWZhdWx0RGVjb3JhdG9y
cyk6CisgICAgICAgIChsb2dnZXIubG9va3VwTGV2ZWwpOgorICAgICAgICAobG9nZ2VyLmxvZyk6
CisgICAgICAgIChTYWZlU3RyaW5nKToKKyAgICAgICAgKFNhZmVTdHJpbmcucHJvdG90eXBlLnRv
U3RyaW5nLlNhZmVTdHJpbmcucHJvdG90eXBlLnRvSFRNTCk6CisgICAgICAgIChjaGVja1Jldmlz
aW9uKToKKyAgICAgICAgKGludm9rZVBhcnRpYWxXcmFwcGVyKToKKyAgICAgICAgKGNvbnRhaW5l
ci5zdHJpY3QpOgorICAgICAgICAoY29udGFpbmVyLmxvb2t1cCk6CisgICAgICAgIChjb250YWlu
ZXIubGFtYmRhKToKKyAgICAgICAgKGNvbnRhaW5lci5mbik6CisgICAgICAgIChjb250YWluZXIu
cHJvZ3JhbSk6CisgICAgICAgIChjb250YWluZXIuZGF0YSk6CisgICAgICAgIChjb250YWluZXIu
bWVyZ2UpOgorICAgICAgICAocmV0Lm1haW4pOgorICAgICAgICAocmV0KToKKyAgICAgICAgKHJl
dC5fc2V0dXApOgorICAgICAgICAocmV0Ll9jaGlsZCk6CisgICAgICAgICh0ZW1wbGF0ZSk6Cisg
ICAgICAgIChwcm9nKToKKyAgICAgICAgKHdyYXBQcm9ncmFtKToKKyAgICAgICAgKHJlc29sdmVQ
YXJ0aWFsKToKKyAgICAgICAgKGludm9rZVBhcnRpYWwpOgorICAgICAgICAobm9vcCk6CisgICAg
ICAgIChpbml0RGF0YSk6CisgICAgICAgIChleGVjdXRlRGVjb3JhdG9ycyk6CisgICAgICAgIChI
YW5kbGViYXJzLm5vQ29uZmxpY3QpOgorICAgICAgICAoQVNULmhlbHBlcnMuaGVscGVyRXhwcmVz
c2lvbik6CisgICAgICAgIChBU1QuaGVscGVycy5zY29wZWRJZCk6CisgICAgICAgIChBU1QuaGVs
cGVycy5zaW1wbGVJZCk6CisgICAgICAgICh5eS5sb2NJbmZvKToKKyAgICAgICAgKHBhcnNlKToK
KyAgICAgICAgKHBhcnNlci50cmFjZSk6CisgICAgICAgIChwYXJzZXIucGVyZm9ybUFjdGlvbik6
CisgICAgICAgIChwYXJzZXIucGFyc2VFcnJvcik6CisgICAgICAgIChwYXJzZXIucGFyc2UucGFy
c2UucG9wU3RhY2spOgorICAgICAgICAocGFyc2VyLnBhcnNlLnBhcnNlLmxleCk6CisgICAgICAg
IChwYXJzZXIucGFyc2UpOgorICAgICAgICAoUGFyc2VyKToKKyAgICAgICAgKFdoaXRlc3BhY2VD
b250cm9sKToKKyAgICAgICAgKFdoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5Qcm9ncmFtKToK
KyAgICAgICAgKFdoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5CbG9ja1N0YXRlbWVudC5XaGl0
ZXNwYWNlQ29udHJvbC5wcm90b3R5cGUuRGVjb3JhdG9yQmxvY2suV2hpdGVzcGFjZUNvbnRyb2wu
cHJvdG90eXBlLlBhcnRpYWxCbG9ja1N0YXRlbWVudCk6CisgICAgICAgIChXaGl0ZXNwYWNlQ29u
dHJvbC5wcm90b3R5cGUuRGVjb3JhdG9yLldoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5NdXN0
YWNoZVN0YXRlbWVudCk6CisgICAgICAgIChXaGl0ZXNwYWNlQ29udHJvbC5wcm90b3R5cGUuUGFy
dGlhbFN0YXRlbWVudC5XaGl0ZXNwYWNlQ29udHJvbC5wcm90b3R5cGUuQ29tbWVudFN0YXRlbWVu
dCk6CisgICAgICAgIChpc1ByZXZXaGl0ZXNwYWNlKToKKyAgICAgICAgKGlzTmV4dFdoaXRlc3Bh
Y2UpOgorICAgICAgICAob21pdFJpZ2h0KToKKyAgICAgICAgKG9taXRMZWZ0KToKKyAgICAgICAg
KFZpc2l0b3IpOgorICAgICAgICAoVmlzaXRvci5wcm90b3R5cGUuYWNjZXB0S2V5KToKKyAgICAg
ICAgKFZpc2l0b3IucHJvdG90eXBlLmFjY2VwdFJlcXVpcmVkKToKKyAgICAgICAgKFZpc2l0b3Iu
cHJvdG90eXBlLmFjY2VwdEFycmF5KToKKyAgICAgICAgKFZpc2l0b3IucHJvdG90eXBlLmFjY2Vw
dCk6CisgICAgICAgIChWaXNpdG9yLnByb3RvdHlwZS5Qcm9ncmFtKToKKyAgICAgICAgKFZpc2l0
b3IucHJvdG90eXBlLlBhcnRpYWxCbG9ja1N0YXRlbWVudCk6CisgICAgICAgIChWaXNpdG9yLnBy
b3RvdHlwZS5Db250ZW50U3RhdGVtZW50KToKKyAgICAgICAgKFZpc2l0b3IucHJvdG90eXBlLkNv
bW1lbnRTdGF0ZW1lbnQpOgorICAgICAgICAoVmlzaXRvci5wcm90b3R5cGUuUGF0aEV4cHJlc3Np
b24pOgorICAgICAgICAoVmlzaXRvci5wcm90b3R5cGUuU3RyaW5nTGl0ZXJhbCk6CisgICAgICAg
IChWaXNpdG9yLnByb3RvdHlwZS5OdW1iZXJMaXRlcmFsKToKKyAgICAgICAgKFZpc2l0b3IucHJv
dG90eXBlLkJvb2xlYW5MaXRlcmFsKToKKyAgICAgICAgKFZpc2l0b3IucHJvdG90eXBlLlVuZGVm
aW5lZExpdGVyYWwpOgorICAgICAgICAoVmlzaXRvci5wcm90b3R5cGUuTnVsbExpdGVyYWwpOgor
ICAgICAgICAoVmlzaXRvci5wcm90b3R5cGUuSGFzaCk6CisgICAgICAgIChWaXNpdG9yLnByb3Rv
dHlwZS5IYXNoUGFpcik6CisgICAgICAgICh2aXNpdFN1YkV4cHJlc3Npb24pOgorICAgICAgICAo
dmlzaXRCbG9jayk6CisgICAgICAgICh2aXNpdFBhcnRpYWwpOgorICAgICAgICAodmFsaWRhdGVD
bG9zZSk6CisgICAgICAgIChTb3VyY2VMb2NhdGlvbik6CisgICAgICAgIChpZCk6CisgICAgICAg
IChzdHJpcEZsYWdzKToKKyAgICAgICAgKHN0cmlwQ29tbWVudCk6CisgICAgICAgIChwcmVwYXJl
UGF0aCk6CisgICAgICAgIChwcmVwYXJlTXVzdGFjaGUpOgorICAgICAgICAocHJlcGFyZVJhd0Js
b2NrKToKKyAgICAgICAgKHByZXBhcmVCbG9jayk6CisgICAgICAgIChwcmVwYXJlUHJvZ3JhbSk6
CisgICAgICAgIChwcmVwYXJlUGFydGlhbEJsb2NrKToKKyAgICAgICAgKENvbXBpbGVyKToKKyAg
ICAgICAgKENvbXBpbGVyLnByb3RvdHlwZS5lcXVhbHMpOgorICAgICAgICAoQ29tcGlsZXIucHJv
dG90eXBlLmNvbXBpbGUpOgorICAgICAgICAoQ29tcGlsZXIucHJvdG90eXBlLmNvbXBpbGVQcm9n
cmFtKToKKyAgICAgICAgKENvbXBpbGVyLnByb3RvdHlwZS5hY2NlcHQpOgorICAgICAgICAoQ29t
cGlsZXIucHJvdG90eXBlLlByb2dyYW0pOgorICAgICAgICAoQ29tcGlsZXIucHJvdG90eXBlLkJs
b2NrU3RhdGVtZW50KToKKyAgICAgICAgKENvbXBpbGVyLnByb3RvdHlwZS5EZWNvcmF0b3JCbG9j
ayk6CisgICAgICAgIChDb21waWxlci5wcm90b3R5cGUuUGFydGlhbFN0YXRlbWVudCk6CisgICAg
ICAgIChDb21waWxlci5wcm90b3R5cGUuUGFydGlhbEJsb2NrU3RhdGVtZW50KToKKyAgICAgICAg
KENvbXBpbGVyLnByb3RvdHlwZS5NdXN0YWNoZVN0YXRlbWVudCk6CisgICAgICAgIChDb21waWxl
ci5wcm90b3R5cGUuRGVjb3JhdG9yKToKKyAgICAgICAgKENvbXBpbGVyLnByb3RvdHlwZS5Db250
ZW50U3RhdGVtZW50KToKKyAgICAgICAgKENvbXBpbGVyLnByb3RvdHlwZS5Db21tZW50U3RhdGVt
ZW50KToKKyAgICAgICAgKENvbXBpbGVyLnByb3RvdHlwZS5TdWJFeHByZXNzaW9uKToKKyAgICAg
ICAgKENvbXBpbGVyLnByb3RvdHlwZS5hbWJpZ3VvdXNTZXhwcik6CisgICAgICAgIChDb21waWxl
ci5wcm90b3R5cGUuc2ltcGxlU2V4cHIpOgorICAgICAgICAoQ29tcGlsZXIucHJvdG90eXBlLmhl
bHBlclNleHByKToKKyAgICAgICAgKENvbXBpbGVyLnByb3RvdHlwZS5QYXRoRXhwcmVzc2lvbik6
CisgICAgICAgIChDb21waWxlci5wcm90b3R5cGUuU3RyaW5nTGl0ZXJhbCk6CisgICAgICAgIChD
b21waWxlci5wcm90b3R5cGUuTnVtYmVyTGl0ZXJhbCk6CisgICAgICAgIChDb21waWxlci5wcm90
b3R5cGUuQm9vbGVhbkxpdGVyYWwpOgorICAgICAgICAoQ29tcGlsZXIucHJvdG90eXBlLlVuZGVm
aW5lZExpdGVyYWwpOgorICAgICAgICAoQ29tcGlsZXIucHJvdG90eXBlLk51bGxMaXRlcmFsKToK
KyAgICAgICAgKENvbXBpbGVyLnByb3RvdHlwZS5IYXNoKToKKyAgICAgICAgKENvbXBpbGVyLnBy
b3RvdHlwZS5vcGNvZGUpOgorICAgICAgICAoQ29tcGlsZXIucHJvdG90eXBlLmFkZERlcHRoKToK
KyAgICAgICAgKENvbXBpbGVyLnByb3RvdHlwZS5jbGFzc2lmeVNleHByKToKKyAgICAgICAgKENv
bXBpbGVyLnByb3RvdHlwZS5wdXNoUGFyYW1zKToKKyAgICAgICAgKENvbXBpbGVyLnByb3RvdHlw
ZS5wdXNoUGFyYW0pOgorICAgICAgICAoQ29tcGlsZXIucHJvdG90eXBlKToKKyAgICAgICAgKiBT
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5
L25vZGVfbW9kdWxlcy9qcXVlcnkvZGlzdC9qcXVlcnkuanM6IEFkZGVkLgorICAgICAgICAodHlw
ZW9mLm1vZHVsZS5zdHJpbmdfYXBwZWFyZWRfaGVyZS50eXBlb2YubW9kdWxlLmV4cG9ydHMuc3Ry
aW5nX2FwcGVhcmVkX2hlcmUudHJ1ZSk6CisgICAgICAgIChqUXVlcnkpOgorICAgICAgICAoZmNh
bWVsQ2FzZSk6CisgICAgICAgIChqUXVlcnkuZm4ualF1ZXJ5LnByb3RvdHlwZS50b0FycmF5KToK
KyAgICAgICAgKGpRdWVyeS5mbi5qUXVlcnkucHJvdG90eXBlLmdldCBpZik6CisgICAgICAgIChq
UXVlcnkuZm4ualF1ZXJ5LnByb3RvdHlwZSk6CisgICAgICAgIChqUXVlcnkuZm4ualF1ZXJ5LnBy
b3RvdHlwZS5wdXNoU3RhY2spOgorICAgICAgICAoalF1ZXJ5LmZuLmpRdWVyeS5wcm90b3R5cGUu
ZWFjaCk6CisgICAgICAgIChqUXVlcnkuZm4ualF1ZXJ5LnByb3RvdHlwZS5tYXApOgorICAgICAg
ICAoalF1ZXJ5LmZuLmpRdWVyeS5wcm90b3R5cGUuc2xpY2UpOgorICAgICAgICAoalF1ZXJ5LmZu
LmpRdWVyeS5wcm90b3R5cGUuZmlyc3QpOgorICAgICAgICAoalF1ZXJ5LmZuLmpRdWVyeS5wcm90
b3R5cGUubGFzdCk6CisgICAgICAgIChqUXVlcnkuZm4ualF1ZXJ5LnByb3RvdHlwZS5lcSk6Cisg
ICAgICAgIChqUXVlcnkuZm4ualF1ZXJ5LnByb3RvdHlwZS5lbmQpOgorICAgICAgICAoalF1ZXJ5
LmV4dGVuZC5qUXVlcnkuZm4uZXh0ZW5kKToKKyAgICAgICAgKGpRdWVyeS5leHRlbmQuZXJyb3Ip
OgorICAgICAgICAoalF1ZXJ5LmV4dGVuZC5ub29wKToKKyAgICAgICAgKGpRdWVyeS5leHRlbmQu
aXNGdW5jdGlvbik6CisgICAgICAgIChqUXVlcnkuZXh0ZW5kLmlzV2luZG93KToKKyAgICAgICAg
KGpRdWVyeS5leHRlbmQuaXNOdW1lcmljKToKKyAgICAgICAgKGpRdWVyeS5leHRlbmQuaXNQbGFp
bk9iamVjdCk6CisgICAgICAgIChqUXVlcnkuZXh0ZW5kLmlzRW1wdHlPYmplY3QpOgorICAgICAg
ICAoalF1ZXJ5LmV4dGVuZC50eXBlKToKKyAgICAgICAgKGpRdWVyeS5leHRlbmQuZ2xvYmFsRXZh
bCk6CisgICAgICAgIChqUXVlcnkuZXh0ZW5kLmNhbWVsQ2FzZSk6CisgICAgICAgIChqUXVlcnku
ZXh0ZW5kLm5vZGVOYW1lKToKKyAgICAgICAgKGpRdWVyeS5leHRlbmQuZWFjaCk6CisgICAgICAg
IChqUXVlcnkuZXh0ZW5kLnRyaW0pOgorICAgICAgICAoalF1ZXJ5LmV4dGVuZC5tYWtlQXJyYXkp
OgorICAgICAgICAoalF1ZXJ5LmV4dGVuZC5pbkFycmF5KToKKyAgICAgICAgKGpRdWVyeS5leHRl
bmQubWVyZ2UpOgorICAgICAgICAoalF1ZXJ5LmV4dGVuZC5ncmVwKToKKyAgICAgICAgKGpRdWVy
eS5leHRlbmQubWFwKToKKyAgICAgICAgKGpRdWVyeS5leHRlbmQucHJveHkpOgorICAgICAgICAo
aXNBcnJheUxpa2UpOgorICAgICAgICAoc29ydE9yZGVyKToKKyAgICAgICAgKGluZGV4T2YpOgor
ICAgICAgICAocm5hdGl2ZS5mdW5lc2NhcGUpOgorICAgICAgICAocm5hdGl2ZS5mY3NzZXNjYXBl
KToKKyAgICAgICAgKHJuYXRpdmUudW5sb2FkSGFuZGxlcik6CisgICAgICAgIChybmF0aXZlLmNh
dGNoLnB1c2gpOgorICAgICAgICAocm5hdGl2ZS5TaXp6bGUpOgorICAgICAgICAocm5hdGl2ZS5j
cmVhdGVDYWNoZSk6CisgICAgICAgIChybmF0aXZlLm1hcmtGdW5jdGlvbik6CisgICAgICAgIChy
bmF0aXZlLmFzc2VydCk6CisgICAgICAgIChybmF0aXZlLmFkZEhhbmRsZSk6CisgICAgICAgIChy
bmF0aXZlLnNpYmxpbmdDaGVjayk6CisgICAgICAgIChybmF0aXZlLmNyZWF0ZUlucHV0UHNldWRv
KToKKyAgICAgICAgKHJuYXRpdmUuY3JlYXRlQnV0dG9uUHNldWRvKToKKyAgICAgICAgKHJuYXRp
dmUuY3JlYXRlRGlzYWJsZWRQc2V1ZG8pOgorICAgICAgICAocm5hdGl2ZS5jcmVhdGVQb3NpdGlv
bmFsUHNldWRvLik6CisgICAgICAgIChybmF0aXZlLmNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8pOgor
ICAgICAgICAocm5hdGl2ZS4pOgorICAgICAgICAocm5hdGl2ZS5pc1hNTC5TaXp6bGUuaXNYTUwp
OgorICAgICAgICAocm5hdGl2ZS5FeHByLmZpbHRlci5zdHJpbmdfYXBwZWFyZWRfaGVyZSk6Cisg
ICAgICAgIChybmF0aXZlLkV4cHIuZmluZC5zdHJpbmdfYXBwZWFyZWRfaGVyZSk6CisgICAgICAg
IChybmF0aXZlLmVsc2UuRXhwci5maWx0ZXIuc3RyaW5nX2FwcGVhcmVkX2hlcmUpOgorICAgICAg
ICAocm5hdGl2ZS5lbHNlLkV4cHIuZmluZC5zdHJpbmdfYXBwZWFyZWRfaGVyZSk6CisgICAgICAg
IChybmF0aXZlLnNldERvY3VtZW50LlNpenpsZS5zZXREb2N1bWVudCk6CisgICAgICAgIChybmF0
aXZlLlNpenpsZS5tYXRjaGVzKToKKyAgICAgICAgKHJuYXRpdmUuU2l6emxlLm1hdGNoZXNTZWxl
Y3Rvcik6CisgICAgICAgIChybmF0aXZlLlNpenpsZS5jb250YWlucyk6CisgICAgICAgIChybmF0
aXZlLlNpenpsZS5hdHRyKToKKyAgICAgICAgKHJuYXRpdmUuU2l6emxlLmVzY2FwZSk6CisgICAg
ICAgIChybmF0aXZlLlNpenpsZS5lcnJvcik6CisgICAgICAgIChybmF0aXZlLlNpenpsZS51bmlx
dWVTb3J0KToKKyAgICAgICAgKHJuYXRpdmUuZ2V0VGV4dC5TaXp6bGUuZ2V0VGV4dCk6CisgICAg
ICAgIChybmF0aXZlLkV4cHIuU2l6emxlLnNlbGVjdG9ycy5wcmVGaWx0ZXIuc3RyaW5nX2FwcGVh
cmVkX2hlcmUpOgorICAgICAgICAocm5hdGl2ZS5FeHByLlNpenpsZS5zZWxlY3RvcnMuZmlsdGVy
Lik6CisgICAgICAgIChybmF0aXZlLkV4cHIuU2l6emxlLnNlbGVjdG9ycy5maWx0ZXIuc3RyaW5n
X2FwcGVhcmVkX2hlcmUpOgorICAgICAgICAocm5hdGl2ZS5FeHByLlNpenpsZS5zZWxlY3RvcnMu
cHNldWRvcy4pOgorICAgICAgICAocm5hdGl2ZS5FeHByLlNpenpsZS5zZWxlY3RvcnMucHNldWRv
cy5zdHJpbmdfYXBwZWFyZWRfaGVyZSk6CisgICAgICAgIChybmF0aXZlLnNldEZpbHRlcnMpOgor
ICAgICAgICAocm5hdGl2ZS50b2tlbml6ZS5TaXp6bGUudG9rZW5pemUpOgorICAgICAgICAocm5h
dGl2ZS50b1NlbGVjdG9yKToKKyAgICAgICAgKHJuYXRpdmUuYWRkQ29tYmluYXRvcik6CisgICAg
ICAgIChybmF0aXZlLmVsZW1lbnRNYXRjaGVyKToKKyAgICAgICAgKHJuYXRpdmUubXVsdGlwbGVD
b250ZXh0cyk6CisgICAgICAgIChybmF0aXZlLmNvbmRlbnNlKToKKyAgICAgICAgKHJuYXRpdmUu
c2V0TWF0Y2hlcik6CisgICAgICAgIChybmF0aXZlLm1hdGNoZXJGcm9tVG9rZW5zLm1hdGNoZXJz
KToKKyAgICAgICAgKHJuYXRpdmUuc3VwZXJNYXRjaGVyKToKKyAgICAgICAgKHJuYXRpdmUubWF0
Y2hlckZyb21Hcm91cE1hdGNoZXJzKToKKyAgICAgICAgKHJuYXRpdmUuY29tcGlsZS5TaXp6bGUu
Y29tcGlsZSk6CisgICAgICAgIChybmF0aXZlLnNlbGVjdC5TaXp6bGUuc2VsZWN0KToKKyAgICAg
ICAgKHJuYXRpdmUuZGlyKToKKyAgICAgICAgKHJuYXRpdmUuc2libGluZ3MpOgorICAgICAgICAo
cm5hdGl2ZSk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5maWx0ZXIpOgorICAgICAgICAocm5h
dGl2ZS5qUXVlcnkuZm4uZXh0ZW5kLmZpbmQpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZm4u
ZXh0ZW5kLmZpbHRlcik6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5mbi5leHRlbmQubm90KToK
KyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmZuLmV4dGVuZC5pcyk6CisgICAgICAgIChybmF0aXZl
LmluaXQualF1ZXJ5LmZuLmluaXQpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZm4uZXh0ZW5k
Lmhhcyk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5mbi5leHRlbmQuY2xvc2VzdCk6CisgICAg
ICAgIChybmF0aXZlLmpRdWVyeS5mbi5leHRlbmQuaW5kZXgpOgorICAgICAgICAocm5hdGl2ZS5q
UXVlcnkuZm4uZXh0ZW5kLmFkZCk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5mbi5leHRlbmQu
YWRkQmFjayk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5lYWNoLnBhcmVudCk6CisgICAgICAg
IChybmF0aXZlLmpRdWVyeS5lYWNoLnBhcmVudHMpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnku
ZWFjaC5wYXJlbnRzVW50aWwpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZWFjaC5uZXh0KToK
KyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmVhY2gucHJldik6CisgICAgICAgIChybmF0aXZlLmpR
dWVyeS5lYWNoLm5leHRBbGwpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZWFjaC5wcmV2QWxs
KToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmVhY2gubmV4dFVudGlsKToKKyAgICAgICAgKHJu
YXRpdmUualF1ZXJ5LmVhY2gucHJldlVudGlsKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmVh
Y2guc2libGluZ3MpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZWFjaC5jaGlsZHJlbik6Cisg
ICAgICAgIChybmF0aXZlLmpRdWVyeS5lYWNoLmNvbnRlbnRzKToKKyAgICAgICAgKHJuYXRpdmUu
alF1ZXJ5LmZuLm5hbWUpOgorICAgICAgICAocm5hdGl2ZS5jcmVhdGVPcHRpb25zKToKKyAgICAg
ICAgKHJuYXRpdmUuZmlyZSk6CisgICAgICAgIChybmF0aXZlLnNlbGYubGlzdC5hZGQpOgorICAg
ICAgICAocm5hdGl2ZS5zZWxmLmFkZCk6CisgICAgICAgIChybmF0aXZlLnNlbGYucmVtb3ZlKToK
KyAgICAgICAgKHJuYXRpdmUuc2VsZi5oYXMpOgorICAgICAgICAocm5hdGl2ZS5zZWxmLmVtcHR5
KToKKyAgICAgICAgKHJuYXRpdmUuc2VsZi5kaXNhYmxlKToKKyAgICAgICAgKHJuYXRpdmUuc2Vs
Zi5kaXNhYmxlZCk6CisgICAgICAgIChybmF0aXZlLnNlbGYubG9jayk6CisgICAgICAgIChybmF0
aXZlLnNlbGYubG9ja2VkKToKKyAgICAgICAgKHJuYXRpdmUuc2VsZi5maXJlV2l0aCk6CisgICAg
ICAgIChybmF0aXZlLnNlbGYuZmlyZSk6CisgICAgICAgIChybmF0aXZlLnNlbGYuZmlyZWQpOgor
ICAgICAgICAocm5hdGl2ZS5qUXVlcnkuQ2FsbGJhY2tzKToKKyAgICAgICAgKHJuYXRpdmUuSWRl
bnRpdHkpOgorICAgICAgICAocm5hdGl2ZS5UaHJvd2VyKToKKyAgICAgICAgKHJuYXRpdmUuYWRv
cHRWYWx1ZSk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5leHRlbmQucHJvbWlzZS5zdGF0ZSk6
CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5leHRlbmQucHJvbWlzZS5hbHdheXMpOgorICAgICAg
ICAocm5hdGl2ZS5qUXVlcnkuZXh0ZW5kLnByb21pc2Uuc3RyaW5nX2FwcGVhcmVkX2hlcmUpOgor
ICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZXh0ZW5kLnByb21pc2UuKToKKyAgICAgICAgKHJuYXRp
dmUualF1ZXJ5LmV4dGVuZC5wcm9taXNlLnBpcGUpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnku
ZXh0ZW5kLnByb21pc2UubWlnaHRUaHJvdyk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5leHRl
bmQucHJvbWlzZS5wcm9jZXNzLnNwZWNpYWwubWlnaHRUaHJvdyk6CisgICAgICAgIChybmF0aXZl
LmpRdWVyeS5leHRlbmQucHJvbWlzZS5yZXNvbHZlKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5
LmV4dGVuZC5wcm9taXNlLnRoZW4pOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZXh0ZW5kLnBy
b21pc2UucHJvbWlzZSk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5leHRlbmQuKToKKyAgICAg
ICAgKHJuYXRpdmUualF1ZXJ5LmV4dGVuZC5EZWZlcnJlZCk6CisgICAgICAgIChybmF0aXZlLmpR
dWVyeS5leHRlbmQudXBkYXRlRnVuYyk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5leHRlbmQu
d2hlbik6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rKToK
KyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LnJlYWR5RXhjZXB0aW9uKToKKyAgICAgICAgKHJuYXRp
dmUualF1ZXJ5LmZuLnJlYWR5KToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmV4dGVuZC5ob2xk
UmVhZHkpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZXh0ZW5kLnJlYWR5KToKKyAgICAgICAg
KHJuYXRpdmUuY29tcGxldGVkKToKKyAgICAgICAgKHJuYXRpdmUuZWxzZS52YWx1ZS51bmRlZmlu
ZWQuYnVsay5lbHNlLmZuKToKKyAgICAgICAgKHJuYXRpdmUuYWNjZXNzKToKKyAgICAgICAgKHJu
YXRpdmUuYWNjZXB0RGF0YSk6CisgICAgICAgIChybmF0aXZlLkRhdGEpOgorICAgICAgICAocm5h
dGl2ZS5EYXRhLnByb3RvdHlwZS5jYWNoZSk6CisgICAgICAgIChybmF0aXZlLkRhdGEucHJvdG90
eXBlLnNldCBvd25lcik6CisgICAgICAgIChybmF0aXZlLkRhdGEucHJvdG90eXBlLmdldCBvd25l
cik6CisgICAgICAgIChybmF0aXZlLkRhdGEucHJvdG90eXBlLmFjY2Vzcyk6CisgICAgICAgIChy
bmF0aXZlLkRhdGEucHJvdG90eXBlLnJlbW92ZSk6CisgICAgICAgIChybmF0aXZlLkRhdGEucHJv
dG90eXBlLmhhc0RhdGEpOgorICAgICAgICAocm5hdGl2ZS5nZXREYXRhKToKKyAgICAgICAgKHJu
YXRpdmUuZGF0YUF0dHIpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZXh0ZW5kLmhhc0RhdGEp
OgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZXh0ZW5kLmRhdGEpOgorICAgICAgICAocm5hdGl2
ZS5qUXVlcnkuZXh0ZW5kLnJlbW92ZURhdGEpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZXh0
ZW5kLl9kYXRhKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmV4dGVuZC5fcmVtb3ZlRGF0YSk6
CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5mbi5leHRlbmQuKToKKyAgICAgICAgKHJuYXRpdmUu
alF1ZXJ5LmZuLmV4dGVuZC5kYXRhKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmZuLmV4dGVu
ZC5yZW1vdmVEYXRhKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmV4dGVuZC5xdWV1ZSk6Cisg
ICAgICAgIChybmF0aXZlLmpRdWVyeS5leHRlbmQubmV4dCk6CisgICAgICAgIChybmF0aXZlLmpR
dWVyeS5leHRlbmQuZGVxdWV1ZSk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5leHRlbmQuX3F1
ZXVlSG9va3MpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZm4uZXh0ZW5kLnF1ZXVlKToKKyAg
ICAgICAgKHJuYXRpdmUualF1ZXJ5LmZuLmV4dGVuZC5kZXF1ZXVlKToKKyAgICAgICAgKHJuYXRp
dmUualF1ZXJ5LmZuLmV4dGVuZC5jbGVhclF1ZXVlKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5
LmZuLmV4dGVuZC5yZXNvbHZlKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmZuLmV4dGVuZC5w
cm9taXNlKToKKyAgICAgICAgKHJuYXRpdmUuaXNIaWRkZW5XaXRoaW5UcmVlKToKKyAgICAgICAg
KHJuYXRpdmUuc3dhcCk6CisgICAgICAgIChybmF0aXZlLnR3ZWVuKToKKyAgICAgICAgKHJuYXRp
dmUuYWRqdXN0Q1NTKToKKyAgICAgICAgKHJuYXRpdmUuc2hvd0hpZGUpOgorICAgICAgICAocm5h
dGl2ZS5qUXVlcnkuZm4uZXh0ZW5kLnNob3cpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZm4u
ZXh0ZW5kLmhpZGUpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZm4uZXh0ZW5kLnRvZ2dsZSk6
CisgICAgICAgIChybmF0aXZlLmdldEFsbCk6CisgICAgICAgIChybmF0aXZlLnNldEdsb2JhbEV2
YWwpOgorICAgICAgICAocm5hdGl2ZS5idWlsZEZyYWdtZW50KToKKyAgICAgICAgKHJuYXRpdmUu
cmV0dXJuRmFsc2UpOgorICAgICAgICAocm5hdGl2ZS5zYWZlQWN0aXZlRWxlbWVudCk6CisgICAg
ICAgIChybmF0aXZlLm9uZS5vbmUuMS5mbik6CisgICAgICAgIChybmF0aXZlLm9uKToKKyAgICAg
ICAgKHJuYXRpdmUuRGF0YS5wcm90b3R5cGUpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZXZl
bnQuZXZlbnRIYW5kbGUuZWxlbURhdGEuaGFuZGxlKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5
LmV2ZW50LmFkZCk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5ldmVudC5yZW1vdmUpOgorICAg
ICAgICAocm5hdGl2ZS5qUXVlcnkuZXZlbnQuZGlzcGF0Y2gpOgorICAgICAgICAocm5hdGl2ZS5q
UXVlcnkuZXZlbnQuaGFuZGxlcnMpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZXZlbnQuZ2V0
IGpRdWVyeSk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5ldmVudC4pOgorICAgICAgICAocm5h
dGl2ZS5qUXVlcnkuZXZlbnQuc2V0IE9iamVjdCk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5l
dmVudC5hZGRQcm9wKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmV2ZW50LmZpeCk6CisgICAg
ICAgIChybmF0aXZlLmpRdWVyeS5ldmVudC5zcGVjaWFsLmZvY3VzLnRyaWdnZXIpOgorICAgICAg
ICAocm5hdGl2ZS5qUXVlcnkuZXZlbnQuc3BlY2lhbC5ibHVyLnRyaWdnZXIpOgorICAgICAgICAo
cm5hdGl2ZS5qUXVlcnkuZXZlbnQuc3BlY2lhbC5jbGljay50cmlnZ2VyKToKKyAgICAgICAgKHJu
YXRpdmUualF1ZXJ5LmV2ZW50LnNwZWNpYWwuY2xpY2suX2RlZmF1bHQpOgorICAgICAgICAocm5h
dGl2ZS5qUXVlcnkuZXZlbnQuc3BlY2lhbC5iZWZvcmV1bmxvYWQucG9zdERpc3BhdGNoKToKKyAg
ICAgICAgKHJuYXRpdmUualF1ZXJ5LnJlbW92ZUV2ZW50KToKKyAgICAgICAgKHJuYXRpdmUualF1
ZXJ5LkV2ZW50KToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LkV2ZW50LnByb3RvdHlwZS5wcmV2
ZW50RGVmYXVsdCk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5FdmVudC5wcm90b3R5cGUuc3Rv
cFByb3BhZ2F0aW9uKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LkV2ZW50LnByb3RvdHlwZS5z
dG9wSW1tZWRpYXRlUHJvcGFnYXRpb24pOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZWFjaCk6
CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5ldmVudC5zcGVjaWFsLm9yaWcuaGFuZGxlKToKKyAg
ICAgICAgKHJuYXRpdmUualF1ZXJ5LmZuLmV4dGVuZC5vbik6CisgICAgICAgIChybmF0aXZlLmpR
dWVyeS5mbi5leHRlbmQub25lKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmZuLmV4dGVuZC5v
ZmYpOgorICAgICAgICAocm5hdGl2ZS5tYW5pcHVsYXRpb25UYXJnZXQpOgorICAgICAgICAocm5h
dGl2ZS5kaXNhYmxlU2NyaXB0KToKKyAgICAgICAgKHJuYXRpdmUucmVzdG9yZVNjcmlwdCk6Cisg
ICAgICAgIChybmF0aXZlLmNsb25lQ29weUV2ZW50KToKKyAgICAgICAgKHJuYXRpdmUuZml4SW5w
dXQpOgorICAgICAgICAocm5hdGl2ZS5kb21NYW5pcCk6CisgICAgICAgIChybmF0aXZlLnJlbW92
ZSk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5leHRlbmQuaHRtbFByZWZpbHRlcik6CisgICAg
ICAgIChybmF0aXZlLmpRdWVyeS5leHRlbmQuY2xvbmUpOgorICAgICAgICAocm5hdGl2ZS5qUXVl
cnkuZXh0ZW5kLmNsZWFuRGF0YSk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5mbi5leHRlbmQu
ZGV0YWNoKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmZuLmV4dGVuZC5yZW1vdmUpOgorICAg
ICAgICAocm5hdGl2ZS5qUXVlcnkuZm4uZXh0ZW5kLnRleHQpOgorICAgICAgICAocm5hdGl2ZS5q
UXVlcnkuZm4uZXh0ZW5kLmFwcGVuZCk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5mbi5leHRl
bmQucHJlcGVuZCk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5mbi5leHRlbmQuYmVmb3JlKToK
KyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmZuLmV4dGVuZC5hZnRlcik6CisgICAgICAgIChybmF0
aXZlLmpRdWVyeS5mbi5leHRlbmQuZW1wdHkpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZm4u
ZXh0ZW5kLmNsb25lKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmZuLmV4dGVuZC5odG1sKToK
KyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmZuLmV4dGVuZC5yZXBsYWNlV2l0aCk6CisgICAgICAg
IChybmF0aXZlLmdldFN0eWxlcyk6CisgICAgICAgIChybmF0aXZlLmNvbXB1dGVTdHlsZVRlc3Rz
KToKKyAgICAgICAgKHJuYXRpdmUuaG9va0ZuLnJldHVybi5nZXQgaWYpOgorICAgICAgICAocm5h
dGl2ZS5ob29rRm4ucmV0dXJuKToKKyAgICAgICAgKHJuYXRpdmUuYWRkR2V0SG9va0lmKToKKyAg
ICAgICAgKHJuYXRpdmUudmVuZG9yUHJvcE5hbWUpOgorICAgICAgICAocm5hdGl2ZS5zZXRQb3Np
dGl2ZU51bWJlcik6CisgICAgICAgIChybmF0aXZlLmF1Z21lbnRXaWR0aE9ySGVpZ2h0KToKKyAg
ICAgICAgKHJuYXRpdmUuZ2V0V2lkdGhPckhlaWdodCk6CisgICAgICAgIChybmF0aXZlLmpRdWVy
eS5leHRlbmQuY3NzSG9va3Mub3BhY2l0eS5nZXQgaWYpOgorICAgICAgICAocm5hdGl2ZS5qUXVl
cnkuZXh0ZW5kLmNzc0hvb2tzLm9wYWNpdHkpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZXh0
ZW5kLnN0eWxlKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmV4dGVuZC5jc3MpOgorICAgICAg
ICAocm5hdGl2ZS5qUXVlcnkuY3NzSG9va3MubmFtZS5nZXQgaWYpOgorICAgICAgICAocm5hdGl2
ZS5qUXVlcnkuY3NzSG9va3MubmFtZSk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5jc3NIb29r
cy5uYW1lLnNldCB2YXIpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuY3NzSG9va3MucHJlZml4
LnN1ZmZpeC5leHBhbmQpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZm4uZXh0ZW5kLmNzcyk6
CisgICAgICAgIChybmF0aXZlLlR3ZWVuLnByb3RvdHlwZS5pbml0KToKKyAgICAgICAgKHJuYXRp
dmUuVHdlZW4ucHJvdG90eXBlLmN1cik6CisgICAgICAgIChybmF0aXZlLlR3ZWVuLnByb3RvdHlw
ZS5ydW4pOgorICAgICAgICAocm5hdGl2ZS5Ud2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0IHR3
ZWVuKToKKyAgICAgICAgKHJuYXRpdmUuVHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LnNldCB0d2Vl
bik6CisgICAgICAgIChybmF0aXZlLlR3ZWVuLnByb3BIb29rcy5zY3JvbGxUb3AuVHdlZW4ucHJv
cEhvb2tzLnNjcm9sbExlZnQuc2V0IHR3ZWVuKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmVh
c2luZy5saW5lYXIpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZWFzaW5nLnN3aW5nKToKKyAg
ICAgICAgKHJuYXRpdmUucmFmKToKKyAgICAgICAgKHJuYXRpdmUuY3JlYXRlRnhOb3cpOgorICAg
ICAgICAocm5hdGl2ZS5nZW5GeCk6CisgICAgICAgIChybmF0aXZlLmNyZWF0ZVR3ZWVuKToKKyAg
ICAgICAgKHJuYXRpdmUub3B0cy5vcHRzLnF1ZXVlLmhvb2tzLnVucXVldWVkLm51bGwuaG9va3Mu
ZW1wdHkuZmlyZSk6CisgICAgICAgIChybmF0aXZlLmRlZmF1bHRQcmVmaWx0ZXIpOgorICAgICAg
ICAocm5hdGl2ZS5wcm9wRmlsdGVyKToKKyAgICAgICAgKHJuYXRpdmUub3B0aW9ucy50aWNrKToK
KyAgICAgICAgKHJuYXRpdmUub3B0aW9ucy5hbmltYXRpb24uZGVmZXJyZWQucHJvbWlzZS5jcmVh
dGVUd2Vlbik6CisgICAgICAgIChybmF0aXZlLm9wdGlvbnMuYW5pbWF0aW9uLmRlZmVycmVkLnBy
b21pc2Uuc3RvcCk6CisgICAgICAgIChybmF0aXZlLkFuaW1hdGlvbik6CisgICAgICAgIChybmF0
aXZlLnR3ZWVuZXJzLnN0cmluZ19hcHBlYXJlZF9oZXJlKToKKyAgICAgICAgKHJuYXRpdmUuVHdl
ZW4ucHJvcEhvb2tzLnNjcm9sbFRvcC5Ud2Vlbi5wcm9wSG9va3Muc2Nyb2xsTGVmdCk6CisgICAg
ICAgIChybmF0aXZlLnR3ZWVuZXIpOgorICAgICAgICAocm5hdGl2ZS5wcmVmaWx0ZXIpOgorICAg
ICAgICAocm5hdGl2ZS5vcHQuY29tcGxldGUpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuc3Bl
ZWQpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZm4uZXh0ZW5kLmZhZGVUbyk6CisgICAgICAg
IChybmF0aXZlLmpRdWVyeS5mbi5leHRlbmQuZG9BbmltYXRpb24pOgorICAgICAgICAocm5hdGl2
ZS5qUXVlcnkuZm4uZXh0ZW5kLmFuaW1hdGUpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZm4u
ZXh0ZW5kLnN0b3BRdWV1ZSk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5mbi5leHRlbmQuc3Rv
cCk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5mbi5leHRlbmQuZmluaXNoKToKKyAgICAgICAg
KHJuYXRpdmUualF1ZXJ5LmZ4LnRpY2spOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZngudGlt
ZXIpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZnguc3RhcnQpOgorICAgICAgICAocm5hdGl2
ZS5qUXVlcnkuZnguc3RvcCk6CisgICAgICAgIChybmF0aXZlLmhvb2tzLnN0b3ApOgorICAgICAg
ICAocm5hdGl2ZS5qUXVlcnkuZm4uZGVsYXkpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZm4u
ZXh0ZW5kLmF0dHIpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZm4uZXh0ZW5kLnJlbW92ZUF0
dHIpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZXh0ZW5kLmF0dHIpOgorICAgICAgICAocm5h
dGl2ZS5qUXVlcnkuZXh0ZW5kLmF0dHJIb29rcy50eXBlLnNldCBpZik6CisgICAgICAgIChybmF0
aXZlLmpRdWVyeS5leHRlbmQuYXR0ckhvb2tzLnR5cGUpOgorICAgICAgICAocm5hdGl2ZS5Ud2Vl
bi5wcm9wSG9va3MuX2RlZmF1bHQpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZXh0ZW5kLnJl
bW92ZUF0dHIpOgorICAgICAgICAocm5hdGl2ZS5ib29sSG9vay5zZXQgZWxlbSk6CisgICAgICAg
IChybmF0aXZlLmF0dHJIYW5kbGUubmFtZSk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5mbi5l
eHRlbmQucHJvcCk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5mbi5leHRlbmQucmVtb3ZlUHJv
cCk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5leHRlbmQucHJvcCk6CisgICAgICAgIChybmF0
aXZlLmpRdWVyeS5leHRlbmQucHJvcEhvb2tzLnRhYkluZGV4LmdldCB2YXIpOgorICAgICAgICAo
cm5hdGl2ZS5qUXVlcnkuZXh0ZW5kLnByb3BIb29rcy50YWJJbmRleCk6CisgICAgICAgIChybmF0
aXZlLmJvb2xIb29rKToKKyAgICAgICAgKHJuYXRpdmUuc3VwcG9ydC5vcHRTZWxlY3RlZC5qUXVl
cnkucHJvcEhvb2tzLnNlbGVjdGVkLmdldCBlbGVtKToKKyAgICAgICAgKHJuYXRpdmUuc3VwcG9y
dC5vcHRTZWxlY3RlZC5qUXVlcnkucHJvcEhvb2tzLnNlbGVjdGVkLnNldCBlbGVtKToKKyAgICAg
ICAgKHJuYXRpdmUuc3RyaXBBbmRDb2xsYXBzZSk6CisgICAgICAgIChybmF0aXZlLmdldENsYXNz
KToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmZuLmV4dGVuZC5hZGRDbGFzcyk6CisgICAgICAg
IChybmF0aXZlLmpRdWVyeS5mbi5leHRlbmQucmVtb3ZlQ2xhc3MpOgorICAgICAgICAocm5hdGl2
ZS5qUXVlcnkuZm4uZXh0ZW5kLnRvZ2dsZUNsYXNzKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5
LmZuLmV4dGVuZC5oYXNDbGFzcyk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5mbi5leHRlbmQu
dmFsKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmV4dGVuZC52YWxIb29rcy5zZWxlY3QuZ2V0
IHZhcik6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5leHRlbmQudmFsSG9va3Muc2VsZWN0KToK
KyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmV4dGVuZC52YWxIb29rcy5zZWxlY3Quc2V0IHZhcik6
CisgICAgICAgIChybmF0aXZlLmpRdWVyeS52YWxIb29rcy50aGlzLnNldCBpZik6CisgICAgICAg
IChybmF0aXZlLmpRdWVyeS52YWxIb29rcy50aGlzKToKKyAgICAgICAgKHJuYXRpdmUudHJpZ2dl
cik6CisgICAgICAgIChybmF0aXZlLnNpbXVsYXRlKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5
LmZuLmV4dGVuZC50cmlnZ2VyKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmZuLmV4dGVuZC50
cmlnZ2VySGFuZGxlcik6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5mbi5leHRlbmQuaG92ZXIp
OgorICAgICAgICAocm5hdGl2ZS5zdXBwb3J0LmZvY3VzaW4uaGFuZGxlcik6CisgICAgICAgIChy
bmF0aXZlLnN1cHBvcnQuZm9jdXNpbi5qUXVlcnkuZXZlbnQuc3BlY2lhbC5maXguc2V0dXApOgor
ICAgICAgICAocm5hdGl2ZS5zdXBwb3J0LmZvY3VzaW4ualF1ZXJ5LmV2ZW50LnNwZWNpYWwuZml4
LnRlYXJkb3duKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LnBhcnNlWE1MKToKKyAgICAgICAg
KHJuYXRpdmUuYnVpbGRQYXJhbXMpOgorICAgICAgICAocm5hdGl2ZS5hZGQpOgorICAgICAgICAo
cm5hdGl2ZS5qUXVlcnkucGFyYW0pOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZm4uZXh0ZW5k
LnNlcmlhbGl6ZSk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5mbi5leHRlbmQuc2VyaWFsaXpl
QXJyYXkpOgorICAgICAgICAocm5hdGl2ZS5hZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMpOgor
ICAgICAgICAocm5hdGl2ZS5qcVhIUi5pbnNwZWN0KToKKyAgICAgICAgKHJuYXRpdmUuaW5zcGVj
dFByZWZpbHRlcnNPclRyYW5zcG9ydHMpOgorICAgICAgICAocm5hdGl2ZS5hamF4RXh0ZW5kKToK
KyAgICAgICAgKHJuYXRpdmUuYWpheEhhbmRsZVJlc3BvbnNlcyk6CisgICAgICAgIChybmF0aXZl
LmFqYXhDb252ZXJ0KToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmV4dGVuZC5hamF4U2V0dXAp
OgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZXh0ZW5kLmpxWEhSLmdldFJlc3BvbnNlSGVhZGVy
KToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmV4dGVuZC5qcVhIUi5nZXRBbGxSZXNwb25zZUhl
YWRlcnMpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZXh0ZW5kLmpxWEhSLnNldFJlcXVlc3RI
ZWFkZXIpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZXh0ZW5kLmpxWEhSLm92ZXJyaWRlTWlt
ZVR5cGUpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZXh0ZW5kLmpxWEhSLnN0YXR1c0NvZGUp
OgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZXh0ZW5kLmpxWEhSLmFib3J0KToKKyAgICAgICAg
KHJuYXRpdmUualF1ZXJ5LmV4dGVuZC5kb25lKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmV4
dGVuZC5hamF4KToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LmV4dGVuZC5nZXRKU09OKToKKyAg
ICAgICAgKHJuYXRpdmUualF1ZXJ5LmV4dGVuZC5nZXRTY3JpcHQpOgorICAgICAgICAocm5hdGl2
ZS5qUXVlcnkubWV0aG9kKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5Ll9ldmFsVXJsKToKKyAg
ICAgICAgKHJuYXRpdmUualF1ZXJ5LmZuLmV4dGVuZC53cmFwQWxsKToKKyAgICAgICAgKHJuYXRp
dmUualF1ZXJ5LmZuLmV4dGVuZC53cmFwSW5uZXIpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnku
Zm4uZXh0ZW5kLndyYXApOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZm4uZXh0ZW5kLnVud3Jh
cCk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5leHByLnBzZXVkb3MuaGlkZGVuKToKKyAgICAg
ICAgKHJuYXRpdmUualF1ZXJ5LmV4cHIucHNldWRvcy52aXNpYmxlKToKKyAgICAgICAgKHJuYXRp
dmUualF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIpOgorICAgICAgICAocm5hdGl2ZS5yZXR1cm4uY2Fs
bGJhY2spOgorICAgICAgICAocm5hdGl2ZS5yZXR1cm4uZWxzZS54aHIub25yZWFkeXN0YXRlY2hh
bmdlKToKKyAgICAgICAgKHJuYXRpdmUucmV0dXJuLnNlbmQpOgorICAgICAgICAocm5hdGl2ZS5y
ZXR1cm4uYWJvcnQpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuYWpheFNldHVwLmNvbnZlcnRl
cnMuc3RyaW5nX2FwcGVhcmVkX2hlcmUpOgorICAgICAgICAocm5hdGl2ZS5yZXR1cm4uKToKKyAg
ICAgICAgKHJuYXRpdmUualF1ZXJ5LmFqYXhTZXR1cC5qc29ucENhbGxiYWNrKToKKyAgICAgICAg
KHJuYXRpdmUucy5jb252ZXJ0ZXJzLnN0cmluZ19hcHBlYXJlZF9oZXJlKToKKyAgICAgICAgKHJu
YXRpdmUud2luZG93LmNhbGxiYWNrTmFtZSk6CisgICAgICAgIChybmF0aXZlLnN1cHBvcnQuY3Jl
YXRlSFRNTERvY3VtZW50KToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5LnBhcnNlSFRNTCk6Cisg
ICAgICAgIChybmF0aXZlLmpRdWVyeS5mbi5sb2FkKToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5
LmZuLnR5cGUpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZXhwci5wc2V1ZG9zLmFuaW1hdGVk
KToKKyAgICAgICAgKHJuYXRpdmUuZ2V0V2luZG93KToKKyAgICAgICAgKHJuYXRpdmUualF1ZXJ5
Lm9mZnNldC5zZXRPZmZzZXQpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZm4uZXh0ZW5kLm9m
ZnNldCk6CisgICAgICAgIChybmF0aXZlLmpRdWVyeS5mbi5leHRlbmQucG9zaXRpb24pOgorICAg
ICAgICAocm5hdGl2ZS5qUXVlcnkuZm4uZXh0ZW5kLm9mZnNldFBhcmVudCk6CisgICAgICAgIChy
bmF0aXZlLmpRdWVyeS5mbi5tZXRob2QpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZm4uZXh0
ZW5kLmJpbmQpOgorICAgICAgICAocm5hdGl2ZS5qUXVlcnkuZm4uZXh0ZW5kLnVuYmluZCk6Cisg
ICAgICAgIChybmF0aXZlLmpRdWVyeS5mbi5leHRlbmQuZGVsZWdhdGUpOgorICAgICAgICAocm5h
dGl2ZS5qUXVlcnkuZm4uZXh0ZW5kLnVuZGVsZWdhdGUpOgorICAgICAgICAocm5hdGl2ZS5qUXVl
cnkubm9Db25mbGljdCk6CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2pxdWVyeS9ub2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3Nz
L2luZGV4LmNzczogQWRkZWQuCisgICAgICAgIChodG1sLCk6CisgICAgICAgIChidXR0b24pOgor
ICAgICAgICAoYm9keSk6CisgICAgICAgIChidXR0b24sKToKKyAgICAgICAgKC5oaWRkZW4pOgor
ICAgICAgICAoI3RvZG9hcHApOgorICAgICAgICAoI3RvZG9hcHAgaW5wdXQ6Oi13ZWJraXQtaW5w
dXQtcGxhY2Vob2xkZXIpOgorICAgICAgICAoI3RvZG9hcHAgaW5wdXQ6Oi1tb3otcGxhY2Vob2xk
ZXIpOgorICAgICAgICAoI3RvZG9hcHAgaW5wdXQ6OmlucHV0LXBsYWNlaG9sZGVyKToKKyAgICAg
ICAgKCN0b2RvYXBwIGgxKToKKyAgICAgICAgKCNuZXctdG9kbywpOgorICAgICAgICAoI25ldy10
b2RvKToKKyAgICAgICAgKCNtYWluKToKKyAgICAgICAgKGxhYmVsW2Zvcj0ndG9nZ2xlLWFsbCdd
KToKKyAgICAgICAgKCN0b2dnbGUtYWxsKToKKyAgICAgICAgKCN0b2dnbGUtYWxsOmJlZm9yZSk6
CisgICAgICAgICgjdG9nZ2xlLWFsbDpjaGVja2VkOmJlZm9yZSk6CisgICAgICAgICgjdG9kby1s
aXN0KToKKyAgICAgICAgKCN0b2RvLWxpc3QgbGkpOgorICAgICAgICAoI3RvZG8tbGlzdCBsaTps
YXN0LWNoaWxkKToKKyAgICAgICAgKCN0b2RvLWxpc3QgbGkuZWRpdGluZyk6CisgICAgICAgICgj
dG9kby1saXN0IGxpLmVkaXRpbmcgLmVkaXQpOgorICAgICAgICAoI3RvZG8tbGlzdCBsaS5lZGl0
aW5nIC52aWV3KToKKyAgICAgICAgKCN0b2RvLWxpc3QgbGkgLnRvZ2dsZSk6CisgICAgICAgICgj
dG9kby1saXN0IGxpIC50b2dnbGU6YWZ0ZXIpOgorICAgICAgICAoI3RvZG8tbGlzdCBsaSAudG9n
Z2xlOmNoZWNrZWQ6YWZ0ZXIpOgorICAgICAgICAoI3RvZG8tbGlzdCBsaSBsYWJlbCk6CisgICAg
ICAgICgjdG9kby1saXN0IGxpLmNvbXBsZXRlZCBsYWJlbCk6CisgICAgICAgICgjdG9kby1saXN0
IGxpIC5kZXN0cm95KToKKyAgICAgICAgKCN0b2RvLWxpc3QgbGkgLmRlc3Ryb3k6aG92ZXIpOgor
ICAgICAgICAoI3RvZG8tbGlzdCBsaSAuZGVzdHJveTphZnRlcik6CisgICAgICAgICgjdG9kby1s
aXN0IGxpOmhvdmVyIC5kZXN0cm95KToKKyAgICAgICAgKCN0b2RvLWxpc3QgbGkgLmVkaXQpOgor
ICAgICAgICAoI3RvZG8tbGlzdCBsaS5lZGl0aW5nOmxhc3QtY2hpbGQpOgorICAgICAgICAoI2Zv
b3Rlcik6CisgICAgICAgICgjZm9vdGVyOmJlZm9yZSk6CisgICAgICAgICgjdG9kby1jb3VudCk6
CisgICAgICAgICgjdG9kby1jb3VudCBzdHJvbmcpOgorICAgICAgICAoI2ZpbHRlcnMpOgorICAg
ICAgICAoI2ZpbHRlcnMgbGkpOgorICAgICAgICAoI2ZpbHRlcnMgbGkgYSk6CisgICAgICAgICgj
ZmlsdGVycyBsaSBhLnNlbGVjdGVkLCk6CisgICAgICAgICgjZmlsdGVycyBsaSBhLnNlbGVjdGVk
KToKKyAgICAgICAgKCNjbGVhci1jb21wbGV0ZWQsKToKKyAgICAgICAgKCNjbGVhci1jb21wbGV0
ZWQ6aG92ZXIpOgorICAgICAgICAoI2luZm8pOgorICAgICAgICAoI2luZm8gcCk6CisgICAgICAg
ICgjaW5mbyBhKToKKyAgICAgICAgKCNpbmZvIGE6aG92ZXIpOgorICAgICAgICAoQG1lZGlhIHNj
cmVlbiBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzowKSk6CisgICAgICAgICgj
dG9nZ2xlLWFsbCwpOgorICAgICAgICAoQG1lZGlhIChtYXgtd2lkdGg6IDQzMHB4KSk6CisgICAg
ICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L2pxdWVyeS9ub2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL3BhY2thZ2UuanNvbjogQWRkZWQu
CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL2pxdWVyeS9ub2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL3JlYWRtZS5tZDogQWRk
ZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL2pxdWVyeS9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFzZS5jc3M6IEFk
ZGVkLgorICAgICAgICAoaHIpOgorICAgICAgICAoLmxlYXJuIGEpOgorICAgICAgICAoLmxlYXJu
IGE6aG92ZXIpOgorICAgICAgICAoLmxlYXJuIGgzLCk6CisgICAgICAgICgubGVhcm4gaDMpOgor
ICAgICAgICAoLmxlYXJuIGg0KToKKyAgICAgICAgKC5sZWFybiBoNSk6CisgICAgICAgICgubGVh
cm4gdWwpOgorICAgICAgICAoLmxlYXJuIGxpKToKKyAgICAgICAgKC5sZWFybiBwKToKKyAgICAg
ICAgKCNpc3N1ZS1jb3VudCk6CisgICAgICAgICgucXVvdGUpOgorICAgICAgICAoLnF1b3RlIHAp
OgorICAgICAgICAoLnF1b3RlIHA6YmVmb3JlKToKKyAgICAgICAgKC5xdW90ZSBwOmFmdGVyKToK
KyAgICAgICAgKC5xdW90ZSBmb290ZXIpOgorICAgICAgICAoLnF1b3RlIGZvb3RlciBpbWcpOgor
ICAgICAgICAoLnF1b3RlIGZvb3RlciBhKToKKyAgICAgICAgKC5zcGVlY2gtYnViYmxlKToKKyAg
ICAgICAgKC5zcGVlY2gtYnViYmxlOmFmdGVyKToKKyAgICAgICAgKC5sZWFybi1iYXIgPiAubGVh
cm4pOgorICAgICAgICAoQG1lZGlhIChtaW4td2lkdGg6IDg5OXB4KSk6CisgICAgICAgICgubGVh
cm4tYmFyKToKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvanF1ZXJ5L25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmpz
OiBBZGRlZC4KKyAgICAgICAgKF8uZGVmYXVsdHMpOgorICAgICAgICAodGVtcGxhdGUpOgorICAg
ICAgICAoZXNjYXBlci5fLnRlbXBsYXRlKToKKyAgICAgICAgKF8pOgorICAgICAgICAobG9jYXRp
b24uaG9zdG5hbWUuc3RyaW5nX2FwcGVhcmVkX2hlcmUuaS5yLmkucik6CisgICAgICAgIChyZWRp
cmVjdCk6CisgICAgICAgIChmaW5kUm9vdCk6CisgICAgICAgICh4aHIub25sb2FkKToKKyAgICAg
ICAgKGdldEZpbGUpOgorICAgICAgICAoTGVhcm4pOgorICAgICAgICAoTGVhcm4ucHJvdG90eXBl
LmFwcGVuZCk6CisgICAgICAgIChMZWFybi5wcm90b3R5cGUuZmV0Y2hJc3N1ZUNvdW50KToKKyAg
ICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvanF1ZXJ5L25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9wYWNrYWdlLmpzb246IEFkZGVk
LgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9qcXVlcnkvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL3JlYWRtZS5tZDogQWRk
ZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL2pxdWVyeS9wYWNrYWdlLmpzb246IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9qcXVlcnkvcmVhZG1l
Lm1kOgorCiAyMDE3LTA0LTIxICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgU2ltcGxlIGxpbmUgbGF5b3V0OiBBZGQgcGVyZm9ybWFuY2UgdGVzdCB0byBtZWFzdXJl
IG1pZC13b3JkIGxpbmUgYnJlYWtpbmcgd2l0aCBsb25nIHRleHQuCmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9qcXVlcnkvYm93ZXIuanNvbiBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2pxdWVyeS9ib3dlci5qc29u
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYmRiMzNkNzc2NGM0YjEyOGU3NjBhNWRh
OGUyNjIzYmQ0YmI3YjQ4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL2pxdWVyeS9ib3dlci5qc29uCisrKyAvZGV2L251bGwKQEAgLTEs
OSArMCwwIEBACi17Ci0gICJuYW1lIjogInRvZG9tdmMtanF1ZXJ5IiwKLSAgInZlcnNpb24iOiAi
MC4wLjAiLAotICAiZGVwZW5kZW5jaWVzIjogewotICAgICJqcXVlcnkiOiAifjEuOS4xIiwKLSAg
ICAiaGFuZGxlYmFycyI6ICJ+MS4wLjAtcmMuMyIsCi0gICAgInRvZG9tdmMtY29tbW9uIjogIn4w
LjEuNCIKLSAgfQotfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5L2Jvd2VyX2NvbXBv
bmVudHMvaGFuZGxlYmFycy9oYW5kbGViYXJzLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5L2Jvd2Vy
X2NvbXBvbmVudHMvaGFuZGxlYmFycy9oYW5kbGViYXJzLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA5ZTY2ZTkyNjdhZDI3OGJkNTQ1Y2U0ZDJiN2UzNTQ0Njk5NjVmY2EyLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2px
dWVyeS9ib3dlcl9jb21wb25lbnRzL2hhbmRsZWJhcnMvaGFuZGxlYmFycy5qcworKysgL2Rldi9u
dWxsCkBAIC0xLDIyMDEgKzAsMCBAQAotLyoKLQotQ29weXJpZ2h0IChDKSAyMDExIGJ5IFllaHVk
YSBLYXR6Ci0KLVBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0
byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKLW9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29j
aWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCi1pbiB0
aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRh
dGlvbiB0aGUgcmlnaHRzCi10byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRp
c3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCi1jb3BpZXMgb2YgdGhlIFNvZnR3YXJl
LCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLWZ1cm5pc2hl
ZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0KLVRoZSBh
Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJl
IGluY2x1ZGVkIGluCi1hbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBT
b2Z0d2FyZS4KLQotVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FS
UkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLUlNUExJRUQsIElOQ0xVRElORyBCVVQgTk9U
IExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFCi1BVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5Z
IENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi1MSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9O
IE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAotT1VUIE9GIE9S
IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFM
SU5HUyBJTgotVEhFIFNPRlRXQVJFLgotCi0qLwotCi0vLyBsaWIvaGFuZGxlYmFycy9iYXNlLmpz
Ci0KLS8qanNoaW50IGVxbnVsbDp0cnVlKi8KLXRoaXMuSGFuZGxlYmFycyA9IHt9OwotCi0oZnVu
Y3Rpb24oSGFuZGxlYmFycykgewotCi1IYW5kbGViYXJzLlZFUlNJT04gPSAiMS4wLjAtcmMuMyI7
Ci1IYW5kbGViYXJzLkNPTVBJTEVSX1JFVklTSU9OID0gMjsKLQotSGFuZGxlYmFycy5SRVZJU0lP
Tl9DSEFOR0VTID0gewotICAxOiAnPD0gMS4wLnJjLjInLCAvLyAxLjAucmMuMiBpcyBhY3R1YWxs
eSByZXYyIGJ1dCBkb2Vzbid0IHJlcG9ydCBpdAotICAyOiAnPj0gMS4wLjAtcmMuMycKLX07Ci0K
LUhhbmRsZWJhcnMuaGVscGVycyAgPSB7fTsKLUhhbmRsZWJhcnMucGFydGlhbHMgPSB7fTsKLQot
SGFuZGxlYmFycy5yZWdpc3RlckhlbHBlciA9IGZ1bmN0aW9uKG5hbWUsIGZuLCBpbnZlcnNlKSB7
Ci0gIGlmKGludmVyc2UpIHsgZm4ubm90ID0gaW52ZXJzZTsgfQotICB0aGlzLmhlbHBlcnNbbmFt
ZV0gPSBmbjsKLX07Ci0KLUhhbmRsZWJhcnMucmVnaXN0ZXJQYXJ0aWFsID0gZnVuY3Rpb24obmFt
ZSwgc3RyKSB7Ci0gIHRoaXMucGFydGlhbHNbbmFtZV0gPSBzdHI7Ci19OwotCi1IYW5kbGViYXJz
LnJlZ2lzdGVySGVscGVyKCdoZWxwZXJNaXNzaW5nJywgZnVuY3Rpb24oYXJnKSB7Ci0gIGlmKGFy
Z3VtZW50cy5sZW5ndGggPT09IDIpIHsKLSAgICByZXR1cm4gdW5kZWZpbmVkOwotICB9IGVsc2Ug
ewotICAgIHRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgcHJvcGVydHkgJyIgKyBhcmcg
KyAiJyIpOwotICB9Ci19KTsKLQotdmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0
cmluZywgZnVuY3Rpb25UeXBlID0gIltvYmplY3QgRnVuY3Rpb25dIjsKLQotSGFuZGxlYmFycy5y
ZWdpc3RlckhlbHBlcignYmxvY2tIZWxwZXJNaXNzaW5nJywgZnVuY3Rpb24oY29udGV4dCwgb3B0
aW9ucykgewotICB2YXIgaW52ZXJzZSA9IG9wdGlvbnMuaW52ZXJzZSB8fCBmdW5jdGlvbigpIHt9
LCBmbiA9IG9wdGlvbnMuZm47Ci0KLQotICB2YXIgcmV0ID0gIiI7Ci0gIHZhciB0eXBlID0gdG9T
dHJpbmcuY2FsbChjb250ZXh0KTsKLQotICBpZih0eXBlID09PSBmdW5jdGlvblR5cGUpIHsgY29u
dGV4dCA9IGNvbnRleHQuY2FsbCh0aGlzKTsgfQotCi0gIGlmKGNvbnRleHQgPT09IHRydWUpIHsK
LSAgICByZXR1cm4gZm4odGhpcyk7Ci0gIH0gZWxzZSBpZihjb250ZXh0ID09PSBmYWxzZSB8fCBj
b250ZXh0ID09IG51bGwpIHsKLSAgICByZXR1cm4gaW52ZXJzZSh0aGlzKTsKLSAgfSBlbHNlIGlm
KHR5cGUgPT09ICJbb2JqZWN0IEFycmF5XSIpIHsKLSAgICBpZihjb250ZXh0Lmxlbmd0aCA+IDAp
IHsKLSAgICAgIHJldHVybiBIYW5kbGViYXJzLmhlbHBlcnMuZWFjaChjb250ZXh0LCBvcHRpb25z
KTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIGludmVyc2UodGhpcyk7Ci0gICAgfQotICB9
IGVsc2UgewotICAgIHJldHVybiBmbihjb250ZXh0KTsKLSAgfQotfSk7Ci0KLUhhbmRsZWJhcnMu
SyA9IGZ1bmN0aW9uKCkge307Ci0KLUhhbmRsZWJhcnMuY3JlYXRlRnJhbWUgPSBPYmplY3QuY3Jl
YXRlIHx8IGZ1bmN0aW9uKG9iamVjdCkgewotICBIYW5kbGViYXJzLksucHJvdG90eXBlID0gb2Jq
ZWN0OwotICB2YXIgb2JqID0gbmV3IEhhbmRsZWJhcnMuSygpOwotICBIYW5kbGViYXJzLksucHJv
dG90eXBlID0gbnVsbDsKLSAgcmV0dXJuIG9iajsKLX07Ci0KLUhhbmRsZWJhcnMubG9nZ2VyID0g
ewotICBERUJVRzogMCwgSU5GTzogMSwgV0FSTjogMiwgRVJST1I6IDMsIGxldmVsOiAzLAotCi0g
IG1ldGhvZE1hcDogezA6ICdkZWJ1ZycsIDE6ICdpbmZvJywgMjogJ3dhcm4nLCAzOiAnZXJyb3In
fSwKLQotICAvLyBjYW4gYmUgb3ZlcnJpZGRlbiBpbiB0aGUgaG9zdCBlbnZpcm9ubWVudAotICBs
b2c6IGZ1bmN0aW9uKGxldmVsLCBvYmopIHsKLSAgICBpZiAoSGFuZGxlYmFycy5sb2dnZXIubGV2
ZWwgPD0gbGV2ZWwpIHsKLSAgICAgIHZhciBtZXRob2QgPSBIYW5kbGViYXJzLmxvZ2dlci5tZXRo
b2RNYXBbbGV2ZWxdOwotICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAm
JiBjb25zb2xlW21ldGhvZF0pIHsKLSAgICAgICAgY29uc29sZVttZXRob2RdLmNhbGwoY29uc29s
ZSwgb2JqKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX07Ci0KLUhhbmRsZWJhcnMubG9nID0gZnVu
Y3Rpb24obGV2ZWwsIG9iaikgeyBIYW5kbGViYXJzLmxvZ2dlci5sb2cobGV2ZWwsIG9iaik7IH07
Ci0KLUhhbmRsZWJhcnMucmVnaXN0ZXJIZWxwZXIoJ2VhY2gnLCBmdW5jdGlvbihjb250ZXh0LCBv
cHRpb25zKSB7Ci0gIHZhciBmbiA9IG9wdGlvbnMuZm4sIGludmVyc2UgPSBvcHRpb25zLmludmVy
c2U7Ci0gIHZhciBpID0gMCwgcmV0ID0gIiIsIGRhdGE7Ci0KLSAgaWYgKG9wdGlvbnMuZGF0YSkg
ewotICAgIGRhdGEgPSBIYW5kbGViYXJzLmNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7Ci0gIH0K
LQotICBpZihjb250ZXh0ICYmIHR5cGVvZiBjb250ZXh0ID09PSAnb2JqZWN0JykgewotICAgIGlm
KGNvbnRleHQgaW5zdGFuY2VvZiBBcnJheSl7Ci0gICAgICBmb3IodmFyIGogPSBjb250ZXh0Lmxl
bmd0aDsgaTxqOyBpKyspIHsKLSAgICAgICAgaWYgKGRhdGEpIHsgZGF0YS5pbmRleCA9IGk7IH0K
LSAgICAgICAgcmV0ID0gcmV0ICsgZm4oY29udGV4dFtpXSwgeyBkYXRhOiBkYXRhIH0pOwotICAg
ICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBmb3IodmFyIGtleSBpbiBjb250ZXh0KSB7Ci0gICAg
ICAgIGlmKGNvbnRleHQuaGFzT3duUHJvcGVydHkoa2V5KSkgewotICAgICAgICAgIGlmKGRhdGEp
IHsgZGF0YS5rZXkgPSBrZXk7IH0KLSAgICAgICAgICByZXQgPSByZXQgKyBmbihjb250ZXh0W2tl
eV0sIHtkYXRhOiBkYXRhfSk7Ci0gICAgICAgICAgaSsrOwotICAgICAgICB9Ci0gICAgICB9Ci0g
ICAgfQotICB9Ci0KLSAgaWYoaSA9PT0gMCl7Ci0gICAgcmV0ID0gaW52ZXJzZSh0aGlzKTsKLSAg
fQotCi0gIHJldHVybiByZXQ7Ci19KTsKLQotSGFuZGxlYmFycy5yZWdpc3RlckhlbHBlcignaWYn
LCBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7Ci0gIHZhciB0eXBlID0gdG9TdHJpbmcuY2Fs
bChjb250ZXh0KTsKLSAgaWYodHlwZSA9PT0gZnVuY3Rpb25UeXBlKSB7IGNvbnRleHQgPSBjb250
ZXh0LmNhbGwodGhpcyk7IH0KLQotICBpZighY29udGV4dCB8fCBIYW5kbGViYXJzLlV0aWxzLmlz
RW1wdHkoY29udGV4dCkpIHsKLSAgICByZXR1cm4gb3B0aW9ucy5pbnZlcnNlKHRoaXMpOwotICB9
IGVsc2UgewotICAgIHJldHVybiBvcHRpb25zLmZuKHRoaXMpOwotICB9Ci19KTsKLQotSGFuZGxl
YmFycy5yZWdpc3RlckhlbHBlcigndW5sZXNzJywgZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykg
ewotICB2YXIgZm4gPSBvcHRpb25zLmZuLCBpbnZlcnNlID0gb3B0aW9ucy5pbnZlcnNlOwotICBv
cHRpb25zLmZuID0gaW52ZXJzZTsKLSAgb3B0aW9ucy5pbnZlcnNlID0gZm47Ci0KLSAgcmV0dXJu
IEhhbmRsZWJhcnMuaGVscGVyc1snaWYnXS5jYWxsKHRoaXMsIGNvbnRleHQsIG9wdGlvbnMpOwot
fSk7Ci0KLUhhbmRsZWJhcnMucmVnaXN0ZXJIZWxwZXIoJ3dpdGgnLCBmdW5jdGlvbihjb250ZXh0
LCBvcHRpb25zKSB7Ci0gIHJldHVybiBvcHRpb25zLmZuKGNvbnRleHQpOwotfSk7Ci0KLUhhbmRs
ZWJhcnMucmVnaXN0ZXJIZWxwZXIoJ2xvZycsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHsK
LSAgdmFyIGxldmVsID0gb3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuZGF0YS5sZXZlbCAhPSBudWxs
ID8gcGFyc2VJbnQob3B0aW9ucy5kYXRhLmxldmVsLCAxMCkgOiAxOwotICBIYW5kbGViYXJzLmxv
ZyhsZXZlbCwgY29udGV4dCk7Ci19KTsKLQotfSh0aGlzLkhhbmRsZWJhcnMpKTsKLTsKLS8vIGxp
Yi9oYW5kbGViYXJzL2NvbXBpbGVyL3BhcnNlci5qcwotLyogSmlzb24gZ2VuZXJhdGVkIHBhcnNl
ciAqLwotdmFyIGhhbmRsZWJhcnMgPSAoZnVuY3Rpb24oKXsKLXZhciBwYXJzZXIgPSB7dHJhY2U6
IGZ1bmN0aW9uIHRyYWNlKCkgeyB9LAoteXk6IHt9LAotc3ltYm9sc186IHsiZXJyb3IiOjIsInJv
b3QiOjMsInByb2dyYW0iOjQsIkVPRiI6NSwic2ltcGxlSW52ZXJzZSI6Niwic3RhdGVtZW50cyI6
Nywic3RhdGVtZW50Ijo4LCJvcGVuSW52ZXJzZSI6OSwiY2xvc2VCbG9jayI6MTAsIm9wZW5CbG9j
ayI6MTEsIm11c3RhY2hlIjoxMiwicGFydGlhbCI6MTMsIkNPTlRFTlQiOjE0LCJDT01NRU5UIjox
NSwiT1BFTl9CTE9DSyI6MTYsImluTXVzdGFjaGUiOjE3LCJDTE9TRSI6MTgsIk9QRU5fSU5WRVJT
RSI6MTksIk9QRU5fRU5EQkxPQ0siOjIwLCJwYXRoIjoyMSwiT1BFTiI6MjIsIk9QRU5fVU5FU0NB
UEVEIjoyMywiT1BFTl9QQVJUSUFMIjoyNCwicGFydGlhbE5hbWUiOjI1LCJwYXJhbXMiOjI2LCJo
YXNoIjoyNywiREFUQSI6MjgsInBhcmFtIjoyOSwiU1RSSU5HIjozMCwiSU5URUdFUiI6MzEsIkJP
T0xFQU4iOjMyLCJoYXNoU2VnbWVudHMiOjMzLCJoYXNoU2VnbWVudCI6MzQsIklEIjozNSwiRVFV
QUxTIjozNiwiUEFSVElBTF9OQU1FIjozNywicGF0aFNlZ21lbnRzIjozOCwiU0VQIjozOSwiJGFj
Y2VwdCI6MCwiJGVuZCI6MX0sCi10ZXJtaW5hbHNfOiB7MjoiZXJyb3IiLDU6IkVPRiIsMTQ6IkNP
TlRFTlQiLDE1OiJDT01NRU5UIiwxNjoiT1BFTl9CTE9DSyIsMTg6IkNMT1NFIiwxOToiT1BFTl9J
TlZFUlNFIiwyMDoiT1BFTl9FTkRCTE9DSyIsMjI6Ik9QRU4iLDIzOiJPUEVOX1VORVNDQVBFRCIs
MjQ6Ik9QRU5fUEFSVElBTCIsMjg6IkRBVEEiLDMwOiJTVFJJTkciLDMxOiJJTlRFR0VSIiwzMjoi
Qk9PTEVBTiIsMzU6IklEIiwzNjoiRVFVQUxTIiwzNzoiUEFSVElBTF9OQU1FIiwzOToiU0VQIn0s
Ci1wcm9kdWN0aW9uc186IFswLFszLDJdLFs0LDJdLFs0LDNdLFs0LDJdLFs0LDFdLFs0LDFdLFs0
LDBdLFs3LDFdLFs3LDJdLFs4LDNdLFs4LDNdLFs4LDFdLFs4LDFdLFs4LDFdLFs4LDFdLFsxMSwz
XSxbOSwzXSxbMTAsM10sWzEyLDNdLFsxMiwzXSxbMTMsM10sWzEzLDRdLFs2LDJdLFsxNywzXSxb
MTcsMl0sWzE3LDJdLFsxNywxXSxbMTcsMV0sWzI2LDJdLFsyNiwxXSxbMjksMV0sWzI5LDFdLFsy
OSwxXSxbMjksMV0sWzI5LDFdLFsyNywxXSxbMzMsMl0sWzMzLDFdLFszNCwzXSxbMzQsM10sWzM0
LDNdLFszNCwzXSxbMzQsM10sWzI1LDFdLFsyMSwxXSxbMzgsM10sWzM4LDFdXSwKLXBlcmZvcm1B
Y3Rpb246IGZ1bmN0aW9uIGFub255bW91cyh5eXRleHQseXlsZW5nLHl5bGluZW5vLHl5LHl5c3Rh
dGUsJCQsXyQpIHsKLQotdmFyICQwID0gJCQubGVuZ3RoIC0gMTsKLXN3aXRjaCAoeXlzdGF0ZSkg
ewotY2FzZSAxOiByZXR1cm4gJCRbJDAtMV07Ci1icmVhazsKLWNhc2UgMjogdGhpcy4kID0gbmV3
IHl5LlByb2dyYW1Ob2RlKFtdLCAkJFskMF0pOwotYnJlYWs7Ci1jYXNlIDM6IHRoaXMuJCA9IG5l
dyB5eS5Qcm9ncmFtTm9kZSgkJFskMC0yXSwgJCRbJDBdKTsKLWJyZWFrOwotY2FzZSA0OiB0aGlz
LiQgPSBuZXcgeXkuUHJvZ3JhbU5vZGUoJCRbJDAtMV0sIFtdKTsKLWJyZWFrOwotY2FzZSA1OiB0
aGlzLiQgPSBuZXcgeXkuUHJvZ3JhbU5vZGUoJCRbJDBdKTsKLWJyZWFrOwotY2FzZSA2OiB0aGlz
LiQgPSBuZXcgeXkuUHJvZ3JhbU5vZGUoW10sIFtdKTsKLWJyZWFrOwotY2FzZSA3OiB0aGlzLiQg
PSBuZXcgeXkuUHJvZ3JhbU5vZGUoW10pOwotYnJlYWs7Ci1jYXNlIDg6IHRoaXMuJCA9IFskJFsk
MF1dOwotYnJlYWs7Ci1jYXNlIDk6ICQkWyQwLTFdLnB1c2goJCRbJDBdKTsgdGhpcy4kID0gJCRb
JDAtMV07Ci1icmVhazsKLWNhc2UgMTA6IHRoaXMuJCA9IG5ldyB5eS5CbG9ja05vZGUoJCRbJDAt
Ml0sICQkWyQwLTFdLmludmVyc2UsICQkWyQwLTFdLCAkJFskMF0pOwotYnJlYWs7Ci1jYXNlIDEx
OiB0aGlzLiQgPSBuZXcgeXkuQmxvY2tOb2RlKCQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDAtMV0u
aW52ZXJzZSwgJCRbJDBdKTsKLWJyZWFrOwotY2FzZSAxMjogdGhpcy4kID0gJCRbJDBdOwotYnJl
YWs7Ci1jYXNlIDEzOiB0aGlzLiQgPSAkJFskMF07Ci1icmVhazsKLWNhc2UgMTQ6IHRoaXMuJCA9
IG5ldyB5eS5Db250ZW50Tm9kZSgkJFskMF0pOwotYnJlYWs7Ci1jYXNlIDE1OiB0aGlzLiQgPSBu
ZXcgeXkuQ29tbWVudE5vZGUoJCRbJDBdKTsKLWJyZWFrOwotY2FzZSAxNjogdGhpcy4kID0gbmV3
IHl5Lk11c3RhY2hlTm9kZSgkJFskMC0xXVswXSwgJCRbJDAtMV1bMV0pOwotYnJlYWs7Ci1jYXNl
IDE3OiB0aGlzLiQgPSBuZXcgeXkuTXVzdGFjaGVOb2RlKCQkWyQwLTFdWzBdLCAkJFskMC0xXVsx
XSk7Ci1icmVhazsKLWNhc2UgMTg6IHRoaXMuJCA9ICQkWyQwLTFdOwotYnJlYWs7Ci1jYXNlIDE5
OiB0aGlzLiQgPSBuZXcgeXkuTXVzdGFjaGVOb2RlKCQkWyQwLTFdWzBdLCAkJFskMC0xXVsxXSk7
Ci1icmVhazsKLWNhc2UgMjA6IHRoaXMuJCA9IG5ldyB5eS5NdXN0YWNoZU5vZGUoJCRbJDAtMV1b
MF0sICQkWyQwLTFdWzFdLCB0cnVlKTsKLWJyZWFrOwotY2FzZSAyMTogdGhpcy4kID0gbmV3IHl5
LlBhcnRpYWxOb2RlKCQkWyQwLTFdKTsKLWJyZWFrOwotY2FzZSAyMjogdGhpcy4kID0gbmV3IHl5
LlBhcnRpYWxOb2RlKCQkWyQwLTJdLCAkJFskMC0xXSk7Ci1icmVhazsKLWNhc2UgMjM6Ci1icmVh
azsKLWNhc2UgMjQ6IHRoaXMuJCA9IFtbJCRbJDAtMl1dLmNvbmNhdCgkJFskMC0xXSksICQkWyQw
XV07Ci1icmVhazsKLWNhc2UgMjU6IHRoaXMuJCA9IFtbJCRbJDAtMV1dLmNvbmNhdCgkJFskMF0p
LCBudWxsXTsKLWJyZWFrOwotY2FzZSAyNjogdGhpcy4kID0gW1skJFskMC0xXV0sICQkWyQwXV07
Ci1icmVhazsKLWNhc2UgMjc6IHRoaXMuJCA9IFtbJCRbJDBdXSwgbnVsbF07Ci1icmVhazsKLWNh
c2UgMjg6IHRoaXMuJCA9IFtbbmV3IHl5LkRhdGFOb2RlKCQkWyQwXSldLCBudWxsXTsKLWJyZWFr
OwotY2FzZSAyOTogJCRbJDAtMV0ucHVzaCgkJFskMF0pOyB0aGlzLiQgPSAkJFskMC0xXTsKLWJy
ZWFrOwotY2FzZSAzMDogdGhpcy4kID0gWyQkWyQwXV07Ci1icmVhazsKLWNhc2UgMzE6IHRoaXMu
JCA9ICQkWyQwXTsKLWJyZWFrOwotY2FzZSAzMjogdGhpcy4kID0gbmV3IHl5LlN0cmluZ05vZGUo
JCRbJDBdKTsKLWJyZWFrOwotY2FzZSAzMzogdGhpcy4kID0gbmV3IHl5LkludGVnZXJOb2RlKCQk
WyQwXSk7Ci1icmVhazsKLWNhc2UgMzQ6IHRoaXMuJCA9IG5ldyB5eS5Cb29sZWFuTm9kZSgkJFsk
MF0pOwotYnJlYWs7Ci1jYXNlIDM1OiB0aGlzLiQgPSBuZXcgeXkuRGF0YU5vZGUoJCRbJDBdKTsK
LWJyZWFrOwotY2FzZSAzNjogdGhpcy4kID0gbmV3IHl5Lkhhc2hOb2RlKCQkWyQwXSk7Ci1icmVh
azsKLWNhc2UgMzc6ICQkWyQwLTFdLnB1c2goJCRbJDBdKTsgdGhpcy4kID0gJCRbJDAtMV07Ci1i
cmVhazsKLWNhc2UgMzg6IHRoaXMuJCA9IFskJFskMF1dOwotYnJlYWs7Ci1jYXNlIDM5OiB0aGlz
LiQgPSBbJCRbJDAtMl0sICQkWyQwXV07Ci1icmVhazsKLWNhc2UgNDA6IHRoaXMuJCA9IFskJFsk
MC0yXSwgbmV3IHl5LlN0cmluZ05vZGUoJCRbJDBdKV07Ci1icmVhazsKLWNhc2UgNDE6IHRoaXMu
JCA9IFskJFskMC0yXSwgbmV3IHl5LkludGVnZXJOb2RlKCQkWyQwXSldOwotYnJlYWs7Ci1jYXNl
IDQyOiB0aGlzLiQgPSBbJCRbJDAtMl0sIG5ldyB5eS5Cb29sZWFuTm9kZSgkJFskMF0pXTsKLWJy
ZWFrOwotY2FzZSA0MzogdGhpcy4kID0gWyQkWyQwLTJdLCBuZXcgeXkuRGF0YU5vZGUoJCRbJDBd
KV07Ci1icmVhazsKLWNhc2UgNDQ6IHRoaXMuJCA9IG5ldyB5eS5QYXJ0aWFsTmFtZU5vZGUoJCRb
JDBdKTsKLWJyZWFrOwotY2FzZSA0NTogdGhpcy4kID0gbmV3IHl5LklkTm9kZSgkJFskMF0pOwot
YnJlYWs7Ci1jYXNlIDQ2OiAkJFskMC0yXS5wdXNoKCQkWyQwXSk7IHRoaXMuJCA9ICQkWyQwLTJd
OwotYnJlYWs7Ci1jYXNlIDQ3OiB0aGlzLiQgPSBbJCRbJDBdXTsKLWJyZWFrOwotfQotfSwKLXRh
YmxlOiBbezM6MSw0OjIsNTpbMiw3XSw2OjMsNzo0LDg6Niw5OjcsMTE6OCwxMjo5LDEzOjEwLDE0
OlsxLDExXSwxNTpbMSwxMl0sMTY6WzEsMTNdLDE5OlsxLDVdLDIyOlsxLDE0XSwyMzpbMSwxNV0s
MjQ6WzEsMTZdfSx7MTpbM119LHs1OlsxLDE3XX0sezU6WzIsNl0sNzoxOCw4OjYsOTo3LDExOjgs
MTI6OSwxMzoxMCwxNDpbMSwxMV0sMTU6WzEsMTJdLDE2OlsxLDEzXSwxOTpbMSwxOV0sMjA6WzIs
Nl0sMjI6WzEsMTRdLDIzOlsxLDE1XSwyNDpbMSwxNl19LHs1OlsyLDVdLDY6MjAsODoyMSw5Ojcs
MTE6OCwxMjo5LDEzOjEwLDE0OlsxLDExXSwxNTpbMSwxMl0sMTY6WzEsMTNdLDE5OlsxLDVdLDIw
OlsyLDVdLDIyOlsxLDE0XSwyMzpbMSwxNV0sMjQ6WzEsMTZdfSx7MTc6MjMsMTg6WzEsMjJdLDIx
OjI0LDI4OlsxLDI1XSwzNTpbMSwyN10sMzg6MjZ9LHs1OlsyLDhdLDE0OlsyLDhdLDE1OlsyLDhd
LDE2OlsyLDhdLDE5OlsyLDhdLDIwOlsyLDhdLDIyOlsyLDhdLDIzOlsyLDhdLDI0OlsyLDhdfSx7
NDoyOCw2OjMsNzo0LDg6Niw5OjcsMTE6OCwxMjo5LDEzOjEwLDE0OlsxLDExXSwxNTpbMSwxMl0s
MTY6WzEsMTNdLDE5OlsxLDVdLDIwOlsyLDddLDIyOlsxLDE0XSwyMzpbMSwxNV0sMjQ6WzEsMTZd
fSx7NDoyOSw2OjMsNzo0LDg6Niw5OjcsMTE6OCwxMjo5LDEzOjEwLDE0OlsxLDExXSwxNTpbMSwx
Ml0sMTY6WzEsMTNdLDE5OlsxLDVdLDIwOlsyLDddLDIyOlsxLDE0XSwyMzpbMSwxNV0sMjQ6WzEs
MTZdfSx7NTpbMiwxMl0sMTQ6WzIsMTJdLDE1OlsyLDEyXSwxNjpbMiwxMl0sMTk6WzIsMTJdLDIw
OlsyLDEyXSwyMjpbMiwxMl0sMjM6WzIsMTJdLDI0OlsyLDEyXX0sezU6WzIsMTNdLDE0OlsyLDEz
XSwxNTpbMiwxM10sMTY6WzIsMTNdLDE5OlsyLDEzXSwyMDpbMiwxM10sMjI6WzIsMTNdLDIzOlsy
LDEzXSwyNDpbMiwxM119LHs1OlsyLDE0XSwxNDpbMiwxNF0sMTU6WzIsMTRdLDE2OlsyLDE0XSwx
OTpbMiwxNF0sMjA6WzIsMTRdLDIyOlsyLDE0XSwyMzpbMiwxNF0sMjQ6WzIsMTRdfSx7NTpbMiwx
NV0sMTQ6WzIsMTVdLDE1OlsyLDE1XSwxNjpbMiwxNV0sMTk6WzIsMTVdLDIwOlsyLDE1XSwyMjpb
MiwxNV0sMjM6WzIsMTVdLDI0OlsyLDE1XX0sezE3OjMwLDIxOjI0LDI4OlsxLDI1XSwzNTpbMSwy
N10sMzg6MjZ9LHsxNzozMSwyMToyNCwyODpbMSwyNV0sMzU6WzEsMjddLDM4OjI2fSx7MTc6MzIs
MjE6MjQsMjg6WzEsMjVdLDM1OlsxLDI3XSwzODoyNn0sezI1OjMzLDM3OlsxLDM0XX0sezE6WzIs
MV19LHs1OlsyLDJdLDg6MjEsOTo3LDExOjgsMTI6OSwxMzoxMCwxNDpbMSwxMV0sMTU6WzEsMTJd
LDE2OlsxLDEzXSwxOTpbMSwxOV0sMjA6WzIsMl0sMjI6WzEsMTRdLDIzOlsxLDE1XSwyNDpbMSwx
Nl19LHsxNzoyMywyMToyNCwyODpbMSwyNV0sMzU6WzEsMjddLDM4OjI2fSx7NTpbMiw0XSw3OjM1
LDg6Niw5OjcsMTE6OCwxMjo5LDEzOjEwLDE0OlsxLDExXSwxNTpbMSwxMl0sMTY6WzEsMTNdLDE5
OlsxLDE5XSwyMDpbMiw0XSwyMjpbMSwxNF0sMjM6WzEsMTVdLDI0OlsxLDE2XX0sezU6WzIsOV0s
MTQ6WzIsOV0sMTU6WzIsOV0sMTY6WzIsOV0sMTk6WzIsOV0sMjA6WzIsOV0sMjI6WzIsOV0sMjM6
WzIsOV0sMjQ6WzIsOV19LHs1OlsyLDIzXSwxNDpbMiwyM10sMTU6WzIsMjNdLDE2OlsyLDIzXSwx
OTpbMiwyM10sMjA6WzIsMjNdLDIyOlsyLDIzXSwyMzpbMiwyM10sMjQ6WzIsMjNdfSx7MTg6WzEs
MzZdfSx7MTg6WzIsMjddLDIxOjQxLDI2OjM3LDI3OjM4LDI4OlsxLDQ1XSwyOTozOSwzMDpbMSw0
Ml0sMzE6WzEsNDNdLDMyOlsxLDQ0XSwzMzo0MCwzNDo0NiwzNTpbMSw0N10sMzg6MjZ9LHsxODpb
MiwyOF19LHsxODpbMiw0NV0sMjg6WzIsNDVdLDMwOlsyLDQ1XSwzMTpbMiw0NV0sMzI6WzIsNDVd
LDM1OlsyLDQ1XSwzOTpbMSw0OF19LHsxODpbMiw0N10sMjg6WzIsNDddLDMwOlsyLDQ3XSwzMTpb
Miw0N10sMzI6WzIsNDddLDM1OlsyLDQ3XSwzOTpbMiw0N119LHsxMDo0OSwyMDpbMSw1MF19LHsx
MDo1MSwyMDpbMSw1MF19LHsxODpbMSw1Ml19LHsxODpbMSw1M119LHsxODpbMSw1NF19LHsxODpb
MSw1NV0sMjE6NTYsMzU6WzEsMjddLDM4OjI2fSx7MTg6WzIsNDRdLDM1OlsyLDQ0XX0sezU6WzIs
M10sODoyMSw5OjcsMTE6OCwxMjo5LDEzOjEwLDE0OlsxLDExXSwxNTpbMSwxMl0sMTY6WzEsMTNd
LDE5OlsxLDE5XSwyMDpbMiwzXSwyMjpbMSwxNF0sMjM6WzEsMTVdLDI0OlsxLDE2XX0sezE0Olsy
LDE3XSwxNTpbMiwxN10sMTY6WzIsMTddLDE5OlsyLDE3XSwyMDpbMiwxN10sMjI6WzIsMTddLDIz
OlsyLDE3XSwyNDpbMiwxN119LHsxODpbMiwyNV0sMjE6NDEsMjc6NTcsMjg6WzEsNDVdLDI5OjU4
LDMwOlsxLDQyXSwzMTpbMSw0M10sMzI6WzEsNDRdLDMzOjQwLDM0OjQ2LDM1OlsxLDQ3XSwzODoy
Nn0sezE4OlsyLDI2XX0sezE4OlsyLDMwXSwyODpbMiwzMF0sMzA6WzIsMzBdLDMxOlsyLDMwXSwz
MjpbMiwzMF0sMzU6WzIsMzBdfSx7MTg6WzIsMzZdLDM0OjU5LDM1OlsxLDYwXX0sezE4OlsyLDMx
XSwyODpbMiwzMV0sMzA6WzIsMzFdLDMxOlsyLDMxXSwzMjpbMiwzMV0sMzU6WzIsMzFdfSx7MTg6
WzIsMzJdLDI4OlsyLDMyXSwzMDpbMiwzMl0sMzE6WzIsMzJdLDMyOlsyLDMyXSwzNTpbMiwzMl19
LHsxODpbMiwzM10sMjg6WzIsMzNdLDMwOlsyLDMzXSwzMTpbMiwzM10sMzI6WzIsMzNdLDM1Olsy
LDMzXX0sezE4OlsyLDM0XSwyODpbMiwzNF0sMzA6WzIsMzRdLDMxOlsyLDM0XSwzMjpbMiwzNF0s
MzU6WzIsMzRdfSx7MTg6WzIsMzVdLDI4OlsyLDM1XSwzMDpbMiwzNV0sMzE6WzIsMzVdLDMyOlsy
LDM1XSwzNTpbMiwzNV19LHsxODpbMiwzOF0sMzU6WzIsMzhdfSx7MTg6WzIsNDddLDI4OlsyLDQ3
XSwzMDpbMiw0N10sMzE6WzIsNDddLDMyOlsyLDQ3XSwzNTpbMiw0N10sMzY6WzEsNjFdLDM5Olsy
LDQ3XX0sezM1OlsxLDYyXX0sezU6WzIsMTBdLDE0OlsyLDEwXSwxNTpbMiwxMF0sMTY6WzIsMTBd
LDE5OlsyLDEwXSwyMDpbMiwxMF0sMjI6WzIsMTBdLDIzOlsyLDEwXSwyNDpbMiwxMF19LHsyMTo2
MywzNTpbMSwyN10sMzg6MjZ9LHs1OlsyLDExXSwxNDpbMiwxMV0sMTU6WzIsMTFdLDE2OlsyLDEx
XSwxOTpbMiwxMV0sMjA6WzIsMTFdLDIyOlsyLDExXSwyMzpbMiwxMV0sMjQ6WzIsMTFdfSx7MTQ6
WzIsMTZdLDE1OlsyLDE2XSwxNjpbMiwxNl0sMTk6WzIsMTZdLDIwOlsyLDE2XSwyMjpbMiwxNl0s
MjM6WzIsMTZdLDI0OlsyLDE2XX0sezU6WzIsMTldLDE0OlsyLDE5XSwxNTpbMiwxOV0sMTY6WzIs
MTldLDE5OlsyLDE5XSwyMDpbMiwxOV0sMjI6WzIsMTldLDIzOlsyLDE5XSwyNDpbMiwxOV19LHs1
OlsyLDIwXSwxNDpbMiwyMF0sMTU6WzIsMjBdLDE2OlsyLDIwXSwxOTpbMiwyMF0sMjA6WzIsMjBd
LDIyOlsyLDIwXSwyMzpbMiwyMF0sMjQ6WzIsMjBdfSx7NTpbMiwyMV0sMTQ6WzIsMjFdLDE1Olsy
LDIxXSwxNjpbMiwyMV0sMTk6WzIsMjFdLDIwOlsyLDIxXSwyMjpbMiwyMV0sMjM6WzIsMjFdLDI0
OlsyLDIxXX0sezE4OlsxLDY0XX0sezE4OlsyLDI0XX0sezE4OlsyLDI5XSwyODpbMiwyOV0sMzA6
WzIsMjldLDMxOlsyLDI5XSwzMjpbMiwyOV0sMzU6WzIsMjldfSx7MTg6WzIsMzddLDM1OlsyLDM3
XX0sezM2OlsxLDYxXX0sezIxOjY1LDI4OlsxLDY5XSwzMDpbMSw2Nl0sMzE6WzEsNjddLDMyOlsx
LDY4XSwzNTpbMSwyN10sMzg6MjZ9LHsxODpbMiw0Nl0sMjg6WzIsNDZdLDMwOlsyLDQ2XSwzMTpb
Miw0Nl0sMzI6WzIsNDZdLDM1OlsyLDQ2XSwzOTpbMiw0Nl19LHsxODpbMSw3MF19LHs1OlsyLDIy
XSwxNDpbMiwyMl0sMTU6WzIsMjJdLDE2OlsyLDIyXSwxOTpbMiwyMl0sMjA6WzIsMjJdLDIyOlsy
LDIyXSwyMzpbMiwyMl0sMjQ6WzIsMjJdfSx7MTg6WzIsMzldLDM1OlsyLDM5XX0sezE4OlsyLDQw
XSwzNTpbMiw0MF19LHsxODpbMiw0MV0sMzU6WzIsNDFdfSx7MTg6WzIsNDJdLDM1OlsyLDQyXX0s
ezE4OlsyLDQzXSwzNTpbMiw0M119LHs1OlsyLDE4XSwxNDpbMiwxOF0sMTU6WzIsMThdLDE2Olsy
LDE4XSwxOTpbMiwxOF0sMjA6WzIsMThdLDIyOlsyLDE4XSwyMzpbMiwxOF0sMjQ6WzIsMThdfV0s
Ci1kZWZhdWx0QWN0aW9uczogezE3OlsyLDFdLDI1OlsyLDI4XSwzODpbMiwyNl0sNTc6WzIsMjRd
fSwKLXBhcnNlRXJyb3I6IGZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7Ci0gICAgdGhy
b3cgbmV3IEVycm9yKHN0cik7Ci19LAotcGFyc2U6IGZ1bmN0aW9uIHBhcnNlKGlucHV0KSB7Ci0g
ICAgdmFyIHNlbGYgPSB0aGlzLCBzdGFjayA9IFswXSwgdnN0YWNrID0gW251bGxdLCBsc3RhY2sg
PSBbXSwgdGFibGUgPSB0aGlzLnRhYmxlLCB5eXRleHQgPSAiIiwgeXlsaW5lbm8gPSAwLCB5eWxl
bmcgPSAwLCByZWNvdmVyaW5nID0gMCwgVEVSUk9SID0gMiwgRU9GID0gMTsKLSAgICB0aGlzLmxl
eGVyLnNldElucHV0KGlucHV0KTsKLSAgICB0aGlzLmxleGVyLnl5ID0gdGhpcy55eTsKLSAgICB0
aGlzLnl5LmxleGVyID0gdGhpcy5sZXhlcjsKLSAgICB0aGlzLnl5LnBhcnNlciA9IHRoaXM7Ci0g
ICAgaWYgKHR5cGVvZiB0aGlzLmxleGVyLnl5bGxvYyA9PSAidW5kZWZpbmVkIikKLSAgICAgICAg
dGhpcy5sZXhlci55eWxsb2MgPSB7fTsKLSAgICB2YXIgeXlsb2MgPSB0aGlzLmxleGVyLnl5bGxv
YzsKLSAgICBsc3RhY2sucHVzaCh5eWxvYyk7Ci0gICAgdmFyIHJhbmdlcyA9IHRoaXMubGV4ZXIu
b3B0aW9ucyAmJiB0aGlzLmxleGVyLm9wdGlvbnMucmFuZ2VzOwotICAgIGlmICh0eXBlb2YgdGhp
cy55eS5wYXJzZUVycm9yID09PSAiZnVuY3Rpb24iKQotICAgICAgICB0aGlzLnBhcnNlRXJyb3Ig
PSB0aGlzLnl5LnBhcnNlRXJyb3I7Ci0gICAgZnVuY3Rpb24gcG9wU3RhY2sobikgewotICAgICAg
ICBzdGFjay5sZW5ndGggPSBzdGFjay5sZW5ndGggLSAyICogbjsKLSAgICAgICAgdnN0YWNrLmxl
bmd0aCA9IHZzdGFjay5sZW5ndGggLSBuOwotICAgICAgICBsc3RhY2subGVuZ3RoID0gbHN0YWNr
Lmxlbmd0aCAtIG47Ci0gICAgfQotICAgIGZ1bmN0aW9uIGxleCgpIHsKLSAgICAgICAgdmFyIHRv
a2VuOwotICAgICAgICB0b2tlbiA9IHNlbGYubGV4ZXIubGV4KCkgfHwgMTsKLSAgICAgICAgaWYg
KHR5cGVvZiB0b2tlbiAhPT0gIm51bWJlciIpIHsKLSAgICAgICAgICAgIHRva2VuID0gc2VsZi5z
eW1ib2xzX1t0b2tlbl0gfHwgdG9rZW47Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRva2Vu
OwotICAgIH0KLSAgICB2YXIgc3ltYm9sLCBwcmVFcnJvclN5bWJvbCwgc3RhdGUsIGFjdGlvbiwg
YSwgciwgeXl2YWwgPSB7fSwgcCwgbGVuLCBuZXdTdGF0ZSwgZXhwZWN0ZWQ7Ci0gICAgd2hpbGUg
KHRydWUpIHsKLSAgICAgICAgc3RhdGUgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTsKLSAgICAg
ICAgaWYgKHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGVdKSB7Ci0gICAgICAgICAgICBhY3Rpb24g
PSB0aGlzLmRlZmF1bHRBY3Rpb25zW3N0YXRlXTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGlmIChzeW1ib2wgPT09IG51bGwgfHwgdHlwZW9mIHN5bWJvbCA9PSAidW5kZWZpbmVkIikg
ewotICAgICAgICAgICAgICAgIHN5bWJvbCA9IGxleCgpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgYWN0aW9uID0gdGFibGVbc3RhdGVdICYmIHRhYmxlW3N0YXRlXVtzeW1ib2xdOwotICAg
ICAgICB9Ci0gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uID09PSAidW5kZWZpbmVkIiB8fCAhYWN0
aW9uLmxlbmd0aCB8fCAhYWN0aW9uWzBdKSB7Ci0gICAgICAgICAgICB2YXIgZXJyU3RyID0gIiI7
Ci0gICAgICAgICAgICBpZiAoIXJlY292ZXJpbmcpIHsKLSAgICAgICAgICAgICAgICBleHBlY3Rl
ZCA9IFtdOwotICAgICAgICAgICAgICAgIGZvciAocCBpbiB0YWJsZVtzdGF0ZV0pCi0gICAgICAg
ICAgICAgICAgICAgIGlmICh0aGlzLnRlcm1pbmFsc19bcF0gJiYgcCA+IDIpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGV4cGVjdGVkLnB1c2goIiciICsgdGhpcy50ZXJtaW5hbHNfW3BdICsg
IiciKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh0aGlzLmxl
eGVyLnNob3dQb3NpdGlvbikgewotICAgICAgICAgICAgICAgICAgICBlcnJTdHIgPSAiUGFyc2Ug
ZXJyb3Igb24gbGluZSAiICsgKHl5bGluZW5vICsgMSkgKyAiOlxuIiArIHRoaXMubGV4ZXIuc2hv
d1Bvc2l0aW9uKCkgKyAiXG5FeHBlY3RpbmcgIiArIGV4cGVjdGVkLmpvaW4oIiwgIikgKyAiLCBn
b3QgJyIgKyAodGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sKSArICInIjsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBlcnJTdHIgPSAiUGFyc2Ug
ZXJyb3Igb24gbGluZSAiICsgKHl5bGluZW5vICsgMSkgKyAiOiBVbmV4cGVjdGVkICIgKyAoc3lt
Ym9sID09IDE/ImVuZCBvZiBpbnB1dCI6IiciICsgKHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8
IHN5bWJvbCkgKyAiJyIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0aGlz
LnBhcnNlRXJyb3IoZXJyU3RyLCB7dGV4dDogdGhpcy5sZXhlci5tYXRjaCwgdG9rZW46IHRoaXMu
dGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCwgbGluZTogdGhpcy5sZXhlci55eWxpbmVubywg
bG9jOiB5eWxvYywgZXhwZWN0ZWQ6IGV4cGVjdGVkfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKGFjdGlvblswXSBpbnN0YW5jZW9mIEFycmF5ICYmIGFjdGlvbi5sZW5n
dGggPiAxKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0
aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiICsgc3RhdGUgKyAiLCB0b2tlbjogIiAr
IHN5bWJvbCk7Ci0gICAgICAgIH0KLSAgICAgICAgc3dpdGNoIChhY3Rpb25bMF0pIHsKLSAgICAg
ICAgY2FzZSAxOgotICAgICAgICAgICAgc3RhY2sucHVzaChzeW1ib2wpOwotICAgICAgICAgICAg
dnN0YWNrLnB1c2godGhpcy5sZXhlci55eXRleHQpOwotICAgICAgICAgICAgbHN0YWNrLnB1c2go
dGhpcy5sZXhlci55eWxsb2MpOwotICAgICAgICAgICAgc3RhY2sucHVzaChhY3Rpb25bMV0pOwot
ICAgICAgICAgICAgc3ltYm9sID0gbnVsbDsKLSAgICAgICAgICAgIGlmICghcHJlRXJyb3JTeW1i
b2wpIHsKLSAgICAgICAgICAgICAgICB5eWxlbmcgPSB0aGlzLmxleGVyLnl5bGVuZzsKLSAgICAg
ICAgICAgICAgICB5eXRleHQgPSB0aGlzLmxleGVyLnl5dGV4dDsKLSAgICAgICAgICAgICAgICB5
eWxpbmVubyA9IHRoaXMubGV4ZXIueXlsaW5lbm87Ci0gICAgICAgICAgICAgICAgeXlsb2MgPSB0
aGlzLmxleGVyLnl5bGxvYzsKLSAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcmluZyA+IDApCi0g
ICAgICAgICAgICAgICAgICAgIHJlY292ZXJpbmctLTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgc3ltYm9sID0gcHJlRXJyb3JTeW1ib2w7Ci0gICAgICAgICAgICAgICAg
cHJlRXJyb3JTeW1ib2wgPSBudWxsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIGxlbiA9IHRoaXMucHJvZHVjdGlvbnNfW2Fj
dGlvblsxXV1bMV07Ci0gICAgICAgICAgICB5eXZhbC4kID0gdnN0YWNrW3ZzdGFjay5sZW5ndGgg
LSBsZW5dOwotICAgICAgICAgICAgeXl2YWwuXyQgPSB7Zmlyc3RfbGluZTogbHN0YWNrW2xzdGFj
ay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9saW5lLCBsYXN0X2xpbmU6IGxzdGFja1tsc3Rh
Y2subGVuZ3RoIC0gMV0ubGFzdF9saW5lLCBmaXJzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVu
Z3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfY29sdW1uLCBsYXN0X2NvbHVtbjogbHN0YWNrW2xzdGFj
ay5sZW5ndGggLSAxXS5sYXN0X2NvbHVtbn07Ci0gICAgICAgICAgICBpZiAocmFuZ2VzKSB7Ci0g
ICAgICAgICAgICAgICAgeXl2YWwuXyQucmFuZ2UgPSBbbHN0YWNrW2xzdGFjay5sZW5ndGggLSAo
bGVuIHx8IDEpXS5yYW5nZVswXSwgbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5yYW5nZVsxXV07
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByID0gdGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwo
eXl2YWwsIHl5dGV4dCwgeXlsZW5nLCB5eWxpbmVubywgdGhpcy55eSwgYWN0aW9uWzFdLCB2c3Rh
Y2ssIGxzdGFjayk7Ci0gICAgICAgICAgICBpZiAodHlwZW9mIHIgIT09ICJ1bmRlZmluZWQiKSB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAobGVuKSB7Ci0gICAgICAgICAgICAgICAgc3RhY2sgPSBzdGFjay5zbGljZSgwLCAtMSAqIGxl
biAqIDIpOwotICAgICAgICAgICAgICAgIHZzdGFjayA9IHZzdGFjay5zbGljZSgwLCAtMSAqIGxl
bik7Ci0gICAgICAgICAgICAgICAgbHN0YWNrID0gbHN0YWNrLnNsaWNlKDAsIC0xICogbGVuKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0YWNrLnB1c2godGhpcy5wcm9kdWN0aW9uc19b
YWN0aW9uWzFdXVswXSk7Ci0gICAgICAgICAgICB2c3RhY2sucHVzaCh5eXZhbC4kKTsKLSAgICAg
ICAgICAgIGxzdGFjay5wdXNoKHl5dmFsLl8kKTsKLSAgICAgICAgICAgIG5ld1N0YXRlID0gdGFi
bGVbc3RhY2tbc3RhY2subGVuZ3RoIC0gMl1dW3N0YWNrW3N0YWNrLmxlbmd0aCAtIDFdXTsKLSAg
ICAgICAgICAgIHN0YWNrLnB1c2gobmV3U3RhdGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgMzoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQot
ICAgIHJldHVybiB0cnVlOwotfQotfTsKLS8qIEppc29uIGdlbmVyYXRlZCBsZXhlciAqLwotdmFy
IGxleGVyID0gKGZ1bmN0aW9uKCl7Ci12YXIgbGV4ZXIgPSAoe0VPRjoxLAotcGFyc2VFcnJvcjpm
dW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkgewotICAgICAgICBpZiAodGhpcy55eS5wYXJz
ZXIpIHsKLSAgICAgICAgICAgIHRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3Ioc3RyLCBoYXNoKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihzdHIpOwotICAg
ICAgICB9Ci0gICAgfSwKLXNldElucHV0OmZ1bmN0aW9uIChpbnB1dCkgewotICAgICAgICB0aGlz
Ll9pbnB1dCA9IGlucHV0OwotICAgICAgICB0aGlzLl9tb3JlID0gdGhpcy5fbGVzcyA9IHRoaXMu
ZG9uZSA9IGZhbHNlOwotICAgICAgICB0aGlzLnl5bGluZW5vID0gdGhpcy55eWxlbmcgPSAwOwot
ICAgICAgICB0aGlzLnl5dGV4dCA9IHRoaXMubWF0Y2hlZCA9IHRoaXMubWF0Y2ggPSAnJzsKLSAg
ICAgICAgdGhpcy5jb25kaXRpb25TdGFjayA9IFsnSU5JVElBTCddOwotICAgICAgICB0aGlzLnl5
bGxvYyA9IHtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1
bW46MH07Ci0gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB0aGlzLnl5bGxvYy5yYW5n
ZSA9IFswLDBdOwotICAgICAgICB0aGlzLm9mZnNldCA9IDA7Ci0gICAgICAgIHJldHVybiB0aGlz
OwotICAgIH0sCi1pbnB1dDpmdW5jdGlvbiAoKSB7Ci0gICAgICAgIHZhciBjaCA9IHRoaXMuX2lu
cHV0WzBdOwotICAgICAgICB0aGlzLnl5dGV4dCArPSBjaDsKLSAgICAgICAgdGhpcy55eWxlbmcr
KzsKLSAgICAgICAgdGhpcy5vZmZzZXQrKzsKLSAgICAgICAgdGhpcy5tYXRjaCArPSBjaDsKLSAg
ICAgICAgdGhpcy5tYXRjaGVkICs9IGNoOwotICAgICAgICB2YXIgbGluZXMgPSBjaC5tYXRjaCgv
KD86XHJcbj98XG4pLiovZyk7Ci0gICAgICAgIGlmIChsaW5lcykgewotICAgICAgICAgICAgdGhp
cy55eWxpbmVubysrOwotICAgICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9saW5lKys7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrOwotICAg
ICAgICB9Ci0gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB0aGlzLnl5bGxvYy5yYW5n
ZVsxXSsrOwotCi0gICAgICAgIHRoaXMuX2lucHV0ID0gdGhpcy5faW5wdXQuc2xpY2UoMSk7Ci0g
ICAgICAgIHJldHVybiBjaDsKLSAgICB9LAotdW5wdXQ6ZnVuY3Rpb24gKGNoKSB7Ci0gICAgICAg
IHZhciBsZW4gPSBjaC5sZW5ndGg7Ci0gICAgICAgIHZhciBsaW5lcyA9IGNoLnNwbGl0KC8oPzpc
clxuP3xcbikvZyk7Ci0KLSAgICAgICAgdGhpcy5faW5wdXQgPSBjaCArIHRoaXMuX2lucHV0Owot
ICAgICAgICB0aGlzLnl5dGV4dCA9IHRoaXMueXl0ZXh0LnN1YnN0cigwLCB0aGlzLnl5dGV4dC5s
ZW5ndGgtbGVuLTEpOwotICAgICAgICAvL3RoaXMueXlsZW5nIC09IGxlbjsKLSAgICAgICAgdGhp
cy5vZmZzZXQgLT0gbGVuOwotICAgICAgICB2YXIgb2xkTGluZXMgPSB0aGlzLm1hdGNoLnNwbGl0
KC8oPzpcclxuP3xcbikvZyk7Ci0gICAgICAgIHRoaXMubWF0Y2ggPSB0aGlzLm1hdGNoLnN1YnN0
cigwLCB0aGlzLm1hdGNoLmxlbmd0aC0xKTsKLSAgICAgICAgdGhpcy5tYXRjaGVkID0gdGhpcy5t
YXRjaGVkLnN1YnN0cigwLCB0aGlzLm1hdGNoZWQubGVuZ3RoLTEpOwotCi0gICAgICAgIGlmIChs
aW5lcy5sZW5ndGgtMSkgdGhpcy55eWxpbmVubyAtPSBsaW5lcy5sZW5ndGgtMTsKLSAgICAgICAg
dmFyIHIgPSB0aGlzLnl5bGxvYy5yYW5nZTsKLQotICAgICAgICB0aGlzLnl5bGxvYyA9IHtmaXJz
dF9saW5lOiB0aGlzLnl5bGxvYy5maXJzdF9saW5lLAotICAgICAgICAgIGxhc3RfbGluZTogdGhp
cy55eWxpbmVubysxLAotICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3Rf
Y29sdW1uLAotICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/Ci0gICAgICAgICAgICAgIChs
aW5lcy5sZW5ndGggPT09IG9sZExpbmVzLmxlbmd0aCA/IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVt
biA6IDApICsgb2xkTGluZXNbb2xkTGluZXMubGVuZ3RoIC0gbGluZXMubGVuZ3RoXS5sZW5ndGgg
LSBsaW5lc1swXS5sZW5ndGg6Ci0gICAgICAgICAgICAgIHRoaXMueXlsbG9jLmZpcnN0X2NvbHVt
biAtIGxlbgotICAgICAgICAgIH07Ci0KLSAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMp
IHsKLSAgICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gW3JbMF0sIHJbMF0gKyB0aGlzLnl5
bGVuZyAtIGxlbl07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfSwKLW1v
cmU6ZnVuY3Rpb24gKCkgewotICAgICAgICB0aGlzLl9tb3JlID0gdHJ1ZTsKLSAgICAgICAgcmV0
dXJuIHRoaXM7Ci0gICAgfSwKLWxlc3M6ZnVuY3Rpb24gKG4pIHsKLSAgICAgICAgdGhpcy51bnB1
dCh0aGlzLm1hdGNoLnNsaWNlKG4pKTsKLSAgICB9LAotcGFzdElucHV0OmZ1bmN0aW9uICgpIHsK
LSAgICAgICAgdmFyIHBhc3QgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5s
ZW5ndGggLSB0aGlzLm1hdGNoLmxlbmd0aCk7Ci0gICAgICAgIHJldHVybiAocGFzdC5sZW5ndGgg
PiAyMCA/ICcuLi4nOicnKSArIHBhc3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywgIiIpOwot
ICAgIH0sCi11cGNvbWluZ0lucHV0OmZ1bmN0aW9uICgpIHsKLSAgICAgICAgdmFyIG5leHQgPSB0
aGlzLm1hdGNoOwotICAgICAgICBpZiAobmV4dC5sZW5ndGggPCAyMCkgewotICAgICAgICAgICAg
bmV4dCArPSB0aGlzLl9pbnB1dC5zdWJzdHIoMCwgMjAtbmV4dC5sZW5ndGgpOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiAobmV4dC5zdWJzdHIoMCwyMCkrKG5leHQubGVuZ3RoID4gMjAgPyAn
Li4uJzonJykpLnJlcGxhY2UoL1xuL2csICIiKTsKLSAgICB9LAotc2hvd1Bvc2l0aW9uOmZ1bmN0
aW9uICgpIHsKLSAgICAgICAgdmFyIHByZSA9IHRoaXMucGFzdElucHV0KCk7Ci0gICAgICAgIHZh
ciBjID0gbmV3IEFycmF5KHByZS5sZW5ndGggKyAxKS5qb2luKCItIik7Ci0gICAgICAgIHJldHVy
biBwcmUgKyB0aGlzLnVwY29taW5nSW5wdXQoKSArICJcbiIgKyBjKyJeIjsKLSAgICB9LAotbmV4
dDpmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGlmICh0aGlzLmRvbmUpIHsKLSAgICAgICAgICAgIHJl
dHVybiB0aGlzLkVPRjsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXRoaXMuX2lucHV0KSB0aGlz
LmRvbmUgPSB0cnVlOwotCi0gICAgICAgIHZhciB0b2tlbiwKLSAgICAgICAgICAgIG1hdGNoLAot
ICAgICAgICAgICAgdGVtcE1hdGNoLAotICAgICAgICAgICAgaW5kZXgsCi0gICAgICAgICAgICBj
b2wsCi0gICAgICAgICAgICBsaW5lczsKLSAgICAgICAgaWYgKCF0aGlzLl9tb3JlKSB7Ci0gICAg
ICAgICAgICB0aGlzLnl5dGV4dCA9ICcnOwotICAgICAgICAgICAgdGhpcy5tYXRjaCA9ICcnOwot
ICAgICAgICB9Ci0gICAgICAgIHZhciBydWxlcyA9IHRoaXMuX2N1cnJlbnRSdWxlcygpOwotICAg
ICAgICBmb3IgKHZhciBpPTA7aSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICB0
ZW1wTWF0Y2ggPSB0aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW3J1bGVzW2ldXSk7Ci0gICAg
ICAgICAgICBpZiAodGVtcE1hdGNoICYmICghbWF0Y2ggfHwgdGVtcE1hdGNoWzBdLmxlbmd0aCA+
IG1hdGNoWzBdLmxlbmd0aCkpIHsKLSAgICAgICAgICAgICAgICBtYXRjaCA9IHRlbXBNYXRjaDsK
LSAgICAgICAgICAgICAgICBpbmRleCA9IGk7Ci0gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm9w
dGlvbnMuZmxleCkgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KG1hdGNoKSB7Ci0gICAgICAgICAgICBsaW5lcyA9IG1hdGNoWzBdLm1hdGNoKC8oPzpcclxuP3xc
bikuKi9nKTsKLSAgICAgICAgICAgIGlmIChsaW5lcykgdGhpcy55eWxpbmVubyArPSBsaW5lcy5s
ZW5ndGg7Ci0gICAgICAgICAgICB0aGlzLnl5bGxvYyA9IHtmaXJzdF9saW5lOiB0aGlzLnl5bGxv
Yy5sYXN0X2xpbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMu
eXlsaW5lbm8rMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhp
cy55eWxsb2MubGFzdF9jb2x1bW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X2Nv
bHVtbjogbGluZXMgPyBsaW5lc1tsaW5lcy5sZW5ndGgtMV0ubGVuZ3RoLWxpbmVzW2xpbmVzLmxl
bmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoIDogdGhpcy55eWxsb2MubGFzdF9jb2x1
bW4gKyBtYXRjaFswXS5sZW5ndGh9OwotICAgICAgICAgICAgdGhpcy55eXRleHQgKz0gbWF0Y2hb
MF07Ci0gICAgICAgICAgICB0aGlzLm1hdGNoICs9IG1hdGNoWzBdOwotICAgICAgICAgICAgdGhp
cy5tYXRjaGVzID0gbWF0Y2g7Ci0gICAgICAgICAgICB0aGlzLnl5bGVuZyA9IHRoaXMueXl0ZXh0
Lmxlbmd0aDsKLSAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7Ci0gICAgICAg
ICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbdGhpcy5vZmZzZXQsIHRoaXMub2Zmc2V0ICs9
IHRoaXMueXlsZW5nXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMuX21vcmUgPSBm
YWxzZTsKLSAgICAgICAgICAgIHRoaXMuX2lucHV0ID0gdGhpcy5faW5wdXQuc2xpY2UobWF0Y2hb
MF0ubGVuZ3RoKTsKLSAgICAgICAgICAgIHRoaXMubWF0Y2hlZCArPSBtYXRjaFswXTsKLSAgICAg
ICAgICAgIHRva2VuID0gdGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcywgdGhpcy55eSwgdGhp
cywgcnVsZXNbaW5kZXhdLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5s
ZW5ndGgtMV0pOwotICAgICAgICAgICAgaWYgKHRoaXMuZG9uZSAmJiB0aGlzLl9pbnB1dCkgdGhp
cy5kb25lID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAodG9rZW4pIHJldHVybiB0b2tlbjsKLSAg
ICAgICAgICAgIGVsc2UgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmICh0aGlzLl9pbnB1
dCA9PT0gIiIpIHsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLkVPRjsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRXJyb3IoJ0xleGljYWwgZXJyb3Igb24g
bGluZSAnKyh0aGlzLnl5bGluZW5vKzEpKycuIFVucmVjb2duaXplZCB0ZXh0LlxuJyt0aGlzLnNo
b3dQb3NpdGlvbigpLAotICAgICAgICAgICAgICAgICAgICB7dGV4dDogIiIsIHRva2VuOiBudWxs
LCBsaW5lOiB0aGlzLnl5bGluZW5vfSk7Ci0gICAgICAgIH0KLSAgICB9LAotbGV4OmZ1bmN0aW9u
IGxleCgpIHsKLSAgICAgICAgdmFyIHIgPSB0aGlzLm5leHQoKTsKLSAgICAgICAgaWYgKHR5cGVv
ZiByICE9PSAndW5kZWZpbmVkJykgewotICAgICAgICAgICAgcmV0dXJuIHI7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5sZXgoKTsKLSAgICAgICAgfQotICAgIH0s
Ci1iZWdpbjpmdW5jdGlvbiBiZWdpbihjb25kaXRpb24pIHsKLSAgICAgICAgdGhpcy5jb25kaXRp
b25TdGFjay5wdXNoKGNvbmRpdGlvbik7Ci0gICAgfSwKLXBvcFN0YXRlOmZ1bmN0aW9uIHBvcFN0
YXRlKCkgewotICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTsKLSAgICB9
LAotX2N1cnJlbnRSdWxlczpmdW5jdGlvbiBfY3VycmVudFJ1bGVzKCkgewotICAgICAgICByZXR1
cm4gdGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFj
ay5sZW5ndGgtMV1dLnJ1bGVzOwotICAgIH0sCi10b3BTdGF0ZTpmdW5jdGlvbiAoKSB7Ci0gICAg
ICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3Ro
LTJdOwotICAgIH0sCi1wdXNoU3RhdGU6ZnVuY3Rpb24gYmVnaW4oY29uZGl0aW9uKSB7Ci0gICAg
ICAgIHRoaXMuYmVnaW4oY29uZGl0aW9uKTsKLSAgICB9fSk7Ci1sZXhlci5vcHRpb25zID0ge307
Ci1sZXhlci5wZXJmb3JtQWN0aW9uID0gZnVuY3Rpb24gYW5vbnltb3VzKHl5LHl5XywkYXZvaWRp
bmdfbmFtZV9jb2xsaXNpb25zLFlZX1NUQVJUKSB7Ci0KLXZhciBZWVNUQVRFPVlZX1NUQVJUCi1z
d2l0Y2goJGF2b2lkaW5nX25hbWVfY29sbGlzaW9ucykgewotY2FzZSAwOgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZih5eV8ueXl0ZXh0LnNsaWNlKC0xKSAhPT0gIlxcIikg
dGhpcy5iZWdpbigibXUiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYo
eXlfLnl5dGV4dC5zbGljZSgtMSkgPT09ICJcXCIpIHl5Xy55eXRleHQgPSB5eV8ueXl0ZXh0LnN1
YnN0cigwLHl5Xy55eWxlbmctMSksIHRoaXMuYmVnaW4oImVtdSIpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZih5eV8ueXl0ZXh0KSByZXR1cm4gMTQ7Ci0KLWJyZWFrOwot
Y2FzZSAxOiByZXR1cm4gMTQ7Ci1icmVhazsKLWNhc2UgMjoKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYoeXlfLnl5dGV4dC5zbGljZSgtMSkgIT09ICJcXCIpIHRoaXMucG9w
U3RhdGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoeXlfLnl5dGV4
dC5zbGljZSgtMSkgPT09ICJcXCIpIHl5Xy55eXRleHQgPSB5eV8ueXl0ZXh0LnN1YnN0cigwLHl5
Xy55eWxlbmctMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAx
NDsKLQotYnJlYWs7Ci1jYXNlIDM6IHl5Xy55eXRleHQgPSB5eV8ueXl0ZXh0LnN1YnN0cigwLCB5
eV8ueXlsZW5nLTQpOyB0aGlzLnBvcFN0YXRlKCk7IHJldHVybiAxNTsKLWJyZWFrOwotY2FzZSA0
OiB0aGlzLmJlZ2luKCJwYXIiKTsgcmV0dXJuIDI0OwotYnJlYWs7Ci1jYXNlIDU6IHJldHVybiAx
NjsKLWJyZWFrOwotY2FzZSA2OiByZXR1cm4gMjA7Ci1icmVhazsKLWNhc2UgNzogcmV0dXJuIDE5
OwotYnJlYWs7Ci1jYXNlIDg6IHJldHVybiAxOTsKLWJyZWFrOwotY2FzZSA5OiByZXR1cm4gMjM7
Ci1icmVhazsKLWNhc2UgMTA6IHJldHVybiAyMzsKLWJyZWFrOwotY2FzZSAxMTogdGhpcy5wb3BT
dGF0ZSgpOyB0aGlzLmJlZ2luKCdjb20nKTsKLWJyZWFrOwotY2FzZSAxMjogeXlfLnl5dGV4dCA9
IHl5Xy55eXRleHQuc3Vic3RyKDMseXlfLnl5bGVuZy01KTsgdGhpcy5wb3BTdGF0ZSgpOyByZXR1
cm4gMTU7Ci1icmVhazsKLWNhc2UgMTM6IHJldHVybiAyMjsKLWJyZWFrOwotY2FzZSAxNDogcmV0
dXJuIDM2OwotYnJlYWs7Ci1jYXNlIDE1OiByZXR1cm4gMzU7Ci1icmVhazsKLWNhc2UgMTY6IHJl
dHVybiAzNTsKLWJyZWFrOwotY2FzZSAxNzogcmV0dXJuIDM5OwotYnJlYWs7Ci1jYXNlIDE4OiAv
Kmlnbm9yZSB3aGl0ZXNwYWNlKi8KLWJyZWFrOwotY2FzZSAxOTogdGhpcy5wb3BTdGF0ZSgpOyBy
ZXR1cm4gMTg7Ci1icmVhazsKLWNhc2UgMjA6IHRoaXMucG9wU3RhdGUoKTsgcmV0dXJuIDE4Owot
YnJlYWs7Ci1jYXNlIDIxOiB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5zdWJzdHIoMSx5eV8ueXls
ZW5nLTIpLnJlcGxhY2UoL1xcIi9nLCciJyk7IHJldHVybiAzMDsKLWJyZWFrOwotY2FzZSAyMjog
eXlfLnl5dGV4dCA9IHl5Xy55eXRleHQuc3Vic3RyKDEseXlfLnl5bGVuZy0yKS5yZXBsYWNlKC9c
XCcvZywiJyIpOyByZXR1cm4gMzA7Ci1icmVhazsKLWNhc2UgMjM6IHl5Xy55eXRleHQgPSB5eV8u
eXl0ZXh0LnN1YnN0cigxKTsgcmV0dXJuIDI4OwotYnJlYWs7Ci1jYXNlIDI0OiByZXR1cm4gMzI7
Ci1icmVhazsKLWNhc2UgMjU6IHJldHVybiAzMjsKLWJyZWFrOwotY2FzZSAyNjogcmV0dXJuIDMx
OwotYnJlYWs7Ci1jYXNlIDI3OiByZXR1cm4gMzU7Ci1icmVhazsKLWNhc2UgMjg6IHl5Xy55eXRl
eHQgPSB5eV8ueXl0ZXh0LnN1YnN0cigxLCB5eV8ueXlsZW5nLTIpOyByZXR1cm4gMzU7Ci1icmVh
azsKLWNhc2UgMjk6IHJldHVybiAnSU5WQUxJRCc7Ci1icmVhazsKLWNhc2UgMzA6IC8qaWdub3Jl
IHdoaXRlc3BhY2UqLwotYnJlYWs7Ci1jYXNlIDMxOiB0aGlzLnBvcFN0YXRlKCk7IHJldHVybiAz
NzsKLWJyZWFrOwotY2FzZSAzMjogcmV0dXJuIDU7Ci1icmVhazsKLX0KLX07Ci1sZXhlci5ydWxl
cyA9IFsvXig/OlteXHgwMF0qPyg/PShce1x7KSkpLywvXig/OlteXHgwMF0rKS8sL14oPzpbXlx4
MDBdezIsfT8oPz0oXHtce3wkKSkpLywvXig/Oltcc1xTXSo/LS1cfVx9KS8sL14oPzpce1x7Pikv
LC9eKD86XHtceyMpLywvXig/Olx7XHtcLykvLC9eKD86XHtce1xeKS8sL14oPzpce1x7XHMqZWxz
ZVxiKS8sL14oPzpce1x7XHspLywvXig/Olx7XHsmKS8sL14oPzpce1x7IS0tKS8sL14oPzpce1x7
IVtcc1xTXSo/XH1cfSkvLC9eKD86XHtceykvLC9eKD86PSkvLC9eKD86XC4oPz1bfSBdKSkvLC9e
KD86XC5cLikvLC9eKD86W1wvLl0pLywvXig/OlxzKykvLC9eKD86XH1cfVx9KS8sL14oPzpcfVx9
KS8sL14oPzoiKFxcWyJdfFteIl0pKiIpLywvXig/OicoXFxbJ118W14nXSkqJykvLC9eKD86QFth
LXpBLVpdKykvLC9eKD86dHJ1ZSg/PVt9XHNdKSkvLC9eKD86ZmFsc2UoPz1bfVxzXSkpLywvXig/
OlswLTldKyg/PVt9XHNdKSkvLC9eKD86W2EtekEtWjAtOV8kLV0rKD89Wz19XHNcLy5dKSkvLC9e
KD86XFtbXlxdXSpcXSkvLC9eKD86LikvLC9eKD86XHMrKS8sL14oPzpbYS16QS1aMC05XyQtL10r
KS8sL14oPzokKS9dOwotbGV4ZXIuY29uZGl0aW9ucyA9IHsibXUiOnsicnVsZXMiOls0LDUsNiw3
LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwy
NywyOCwyOSwzMl0sImluY2x1c2l2ZSI6ZmFsc2V9LCJlbXUiOnsicnVsZXMiOlsyXSwiaW5jbHVz
aXZlIjpmYWxzZX0sImNvbSI6eyJydWxlcyI6WzNdLCJpbmNsdXNpdmUiOmZhbHNlfSwicGFyIjp7
InJ1bGVzIjpbMzAsMzFdLCJpbmNsdXNpdmUiOmZhbHNlfSwiSU5JVElBTCI6eyJydWxlcyI6WzAs
MSwzMl0sImluY2x1c2l2ZSI6dHJ1ZX19OwotcmV0dXJuIGxleGVyO30pKCkKLXBhcnNlci5sZXhl
ciA9IGxleGVyOwotZnVuY3Rpb24gUGFyc2VyICgpIHsgdGhpcy55eSA9IHt9OyB9UGFyc2VyLnBy
b3RvdHlwZSA9IHBhcnNlcjtwYXJzZXIuUGFyc2VyID0gUGFyc2VyOwotcmV0dXJuIG5ldyBQYXJz
ZXI7Ci19KSgpOzsKLS8vIGxpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2Jhc2UuanMKLUhhbmRsZWJh
cnMuUGFyc2VyID0gaGFuZGxlYmFyczsKLQotSGFuZGxlYmFycy5wYXJzZSA9IGZ1bmN0aW9uKGlu
cHV0KSB7Ci0KLSAgLy8gSnVzdCByZXR1cm4gaWYgYW4gYWxyZWFkeS1jb21waWxlIEFTVCB3YXMg
cGFzc2VkIGluLgotICBpZihpbnB1dC5jb25zdHJ1Y3RvciA9PT0gSGFuZGxlYmFycy5BU1QuUHJv
Z3JhbU5vZGUpIHsgcmV0dXJuIGlucHV0OyB9Ci0KLSAgSGFuZGxlYmFycy5QYXJzZXIueXkgPSBI
YW5kbGViYXJzLkFTVDsKLSAgcmV0dXJuIEhhbmRsZWJhcnMuUGFyc2VyLnBhcnNlKGlucHV0KTsK
LX07Ci0KLUhhbmRsZWJhcnMucHJpbnQgPSBmdW5jdGlvbihhc3QpIHsKLSAgcmV0dXJuIG5ldyBI
YW5kbGViYXJzLlByaW50VmlzaXRvcigpLmFjY2VwdChhc3QpOwotfTs7Ci0vLyBsaWIvaGFuZGxl
YmFycy9jb21waWxlci9hc3QuanMKLShmdW5jdGlvbigpIHsKLQotICBIYW5kbGViYXJzLkFTVCA9
IHt9OwotCi0gIEhhbmRsZWJhcnMuQVNULlByb2dyYW1Ob2RlID0gZnVuY3Rpb24oc3RhdGVtZW50
cywgaW52ZXJzZSkgewotICAgIHRoaXMudHlwZSA9ICJwcm9ncmFtIjsKLSAgICB0aGlzLnN0YXRl
bWVudHMgPSBzdGF0ZW1lbnRzOwotICAgIGlmKGludmVyc2UpIHsgdGhpcy5pbnZlcnNlID0gbmV3
IEhhbmRsZWJhcnMuQVNULlByb2dyYW1Ob2RlKGludmVyc2UpOyB9Ci0gIH07Ci0KLSAgSGFuZGxl
YmFycy5BU1QuTXVzdGFjaGVOb2RlID0gZnVuY3Rpb24ocmF3UGFyYW1zLCBoYXNoLCB1bmVzY2Fw
ZWQpIHsKLSAgICB0aGlzLnR5cGUgPSAibXVzdGFjaGUiOwotICAgIHRoaXMuZXNjYXBlZCA9ICF1
bmVzY2FwZWQ7Ci0gICAgdGhpcy5oYXNoID0gaGFzaDsKLQotICAgIHZhciBpZCA9IHRoaXMuaWQg
PSByYXdQYXJhbXNbMF07Ci0gICAgdmFyIHBhcmFtcyA9IHRoaXMucGFyYW1zID0gcmF3UGFyYW1z
LnNsaWNlKDEpOwotCi0gICAgLy8gYSBtdXN0YWNoZSBpcyBhbiBlbGlnaWJsZSBoZWxwZXIgaWY6
Ci0gICAgLy8gKiBpdHMgaWQgaXMgc2ltcGxlIChhIHNpbmdsZSBwYXJ0LCBub3QgYHRoaXNgIG9y
IGAuLmApCi0gICAgdmFyIGVsaWdpYmxlSGVscGVyID0gdGhpcy5lbGlnaWJsZUhlbHBlciA9IGlk
LmlzU2ltcGxlOwotCi0gICAgLy8gYSBtdXN0YWNoZSBpcyBkZWZpbml0ZWx5IGEgaGVscGVyIGlm
OgotICAgIC8vICogaXQgaXMgYW4gZWxpZ2libGUgaGVscGVyLCBhbmQKLSAgICAvLyAqIGl0IGhh
cyBhdCBsZWFzdCBvbmUgcGFyYW1ldGVyIG9yIGhhc2ggc2VnbWVudAotICAgIHRoaXMuaXNIZWxw
ZXIgPSBlbGlnaWJsZUhlbHBlciAmJiAocGFyYW1zLmxlbmd0aCB8fCBoYXNoKTsKLQotICAgIC8v
IGlmIGEgbXVzdGFjaGUgaXMgYW4gZWxpZ2libGUgaGVscGVyIGJ1dCBub3QgYSBkZWZpbml0ZQot
ICAgIC8vIGhlbHBlciwgaXQgaXMgYW1iaWd1b3VzLCBhbmQgd2lsbCBiZSByZXNvbHZlZCBpbiBh
IGxhdGVyCi0gICAgLy8gcGFzcyBvciBhdCBydW50aW1lLgotICB9OwotCi0gIEhhbmRsZWJhcnMu
QVNULlBhcnRpYWxOb2RlID0gZnVuY3Rpb24ocGFydGlhbE5hbWUsIGNvbnRleHQpIHsKLSAgICB0
aGlzLnR5cGUgICAgICAgICA9ICJwYXJ0aWFsIjsKLSAgICB0aGlzLnBhcnRpYWxOYW1lICA9IHBh
cnRpYWxOYW1lOwotICAgIHRoaXMuY29udGV4dCAgICAgID0gY29udGV4dDsKLSAgfTsKLQotICB2
YXIgdmVyaWZ5TWF0Y2ggPSBmdW5jdGlvbihvcGVuLCBjbG9zZSkgewotICAgIGlmKG9wZW4ub3Jp
Z2luYWwgIT09IGNsb3NlLm9yaWdpbmFsKSB7Ci0gICAgICB0aHJvdyBuZXcgSGFuZGxlYmFycy5F
eGNlcHRpb24ob3Blbi5vcmlnaW5hbCArICIgZG9lc24ndCBtYXRjaCAiICsgY2xvc2Uub3JpZ2lu
YWwpOwotICAgIH0KLSAgfTsKLQotICBIYW5kbGViYXJzLkFTVC5CbG9ja05vZGUgPSBmdW5jdGlv
bihtdXN0YWNoZSwgcHJvZ3JhbSwgaW52ZXJzZSwgY2xvc2UpIHsKLSAgICB2ZXJpZnlNYXRjaCht
dXN0YWNoZS5pZCwgY2xvc2UpOwotICAgIHRoaXMudHlwZSA9ICJibG9jayI7Ci0gICAgdGhpcy5t
dXN0YWNoZSA9IG11c3RhY2hlOwotICAgIHRoaXMucHJvZ3JhbSAgPSBwcm9ncmFtOwotICAgIHRo
aXMuaW52ZXJzZSAgPSBpbnZlcnNlOwotCi0gICAgaWYgKHRoaXMuaW52ZXJzZSAmJiAhdGhpcy5w
cm9ncmFtKSB7Ci0gICAgICB0aGlzLmlzSW52ZXJzZSA9IHRydWU7Ci0gICAgfQotICB9OwotCi0g
IEhhbmRsZWJhcnMuQVNULkNvbnRlbnROb2RlID0gZnVuY3Rpb24oc3RyaW5nKSB7Ci0gICAgdGhp
cy50eXBlID0gImNvbnRlbnQiOwotICAgIHRoaXMuc3RyaW5nID0gc3RyaW5nOwotICB9OwotCi0g
IEhhbmRsZWJhcnMuQVNULkhhc2hOb2RlID0gZnVuY3Rpb24ocGFpcnMpIHsKLSAgICB0aGlzLnR5
cGUgPSAiaGFzaCI7Ci0gICAgdGhpcy5wYWlycyA9IHBhaXJzOwotICB9OwotCi0gIEhhbmRsZWJh
cnMuQVNULklkTm9kZSA9IGZ1bmN0aW9uKHBhcnRzKSB7Ci0gICAgdGhpcy50eXBlID0gIklEIjsK
LSAgICB0aGlzLm9yaWdpbmFsID0gcGFydHMuam9pbigiLiIpOwotCi0gICAgdmFyIGRpZyA9IFtd
LCBkZXB0aCA9IDA7Ci0KLSAgICBmb3IodmFyIGk9MCxsPXBhcnRzLmxlbmd0aDsgaTxsOyBpKysp
IHsKLSAgICAgIHZhciBwYXJ0ID0gcGFydHNbaV07Ci0KLSAgICAgIGlmIChwYXJ0ID09PSAiLi4i
IHx8IHBhcnQgPT09ICIuIiB8fCBwYXJ0ID09PSAidGhpcyIpIHsKLSAgICAgICAgaWYgKGRpZy5s
ZW5ndGggPiAwKSB7IHRocm93IG5ldyBIYW5kbGViYXJzLkV4Y2VwdGlvbigiSW52YWxpZCBwYXRo
OiAiICsgdGhpcy5vcmlnaW5hbCk7IH0KLSAgICAgICAgZWxzZSBpZiAocGFydCA9PT0gIi4uIikg
eyBkZXB0aCsrOyB9Ci0gICAgICAgIGVsc2UgeyB0aGlzLmlzU2NvcGVkID0gdHJ1ZTsgfQotICAg
ICAgfQotICAgICAgZWxzZSB7IGRpZy5wdXNoKHBhcnQpOyB9Ci0gICAgfQotCi0gICAgdGhpcy5w
YXJ0cyAgICA9IGRpZzsKLSAgICB0aGlzLnN0cmluZyAgID0gZGlnLmpvaW4oJy4nKTsKLSAgICB0
aGlzLmRlcHRoICAgID0gZGVwdGg7Ci0KLSAgICAvLyBhbiBJRCBpcyBzaW1wbGUgaWYgaXQgb25s
eSBoYXMgb25lIHBhcnQsIGFuZCB0aGF0IHBhcnQgaXMgbm90Ci0gICAgLy8gYC4uYCBvciBgdGhp
c2AuCi0gICAgdGhpcy5pc1NpbXBsZSA9IHBhcnRzLmxlbmd0aCA9PT0gMSAmJiAhdGhpcy5pc1Nj
b3BlZCAmJiBkZXB0aCA9PT0gMDsKLQotICAgIHRoaXMuc3RyaW5nTW9kZVZhbHVlID0gdGhpcy5z
dHJpbmc7Ci0gIH07Ci0KLSAgSGFuZGxlYmFycy5BU1QuUGFydGlhbE5hbWVOb2RlID0gZnVuY3Rp
b24obmFtZSkgewotICAgIHRoaXMudHlwZSA9ICJQQVJUSUFMX05BTUUiOwotICAgIHRoaXMubmFt
ZSA9IG5hbWU7Ci0gIH07Ci0KLSAgSGFuZGxlYmFycy5BU1QuRGF0YU5vZGUgPSBmdW5jdGlvbihp
ZCkgewotICAgIHRoaXMudHlwZSA9ICJEQVRBIjsKLSAgICB0aGlzLmlkID0gaWQ7Ci0gIH07Ci0K
LSAgSGFuZGxlYmFycy5BU1QuU3RyaW5nTm9kZSA9IGZ1bmN0aW9uKHN0cmluZykgewotICAgIHRo
aXMudHlwZSA9ICJTVFJJTkciOwotICAgIHRoaXMuc3RyaW5nID0gc3RyaW5nOwotICAgIHRoaXMu
c3RyaW5nTW9kZVZhbHVlID0gc3RyaW5nOwotICB9OwotCi0gIEhhbmRsZWJhcnMuQVNULkludGVn
ZXJOb2RlID0gZnVuY3Rpb24oaW50ZWdlcikgewotICAgIHRoaXMudHlwZSA9ICJJTlRFR0VSIjsK
LSAgICB0aGlzLmludGVnZXIgPSBpbnRlZ2VyOwotICAgIHRoaXMuc3RyaW5nTW9kZVZhbHVlID0g
TnVtYmVyKGludGVnZXIpOwotICB9OwotCi0gIEhhbmRsZWJhcnMuQVNULkJvb2xlYW5Ob2RlID0g
ZnVuY3Rpb24oYm9vbCkgewotICAgIHRoaXMudHlwZSA9ICJCT09MRUFOIjsKLSAgICB0aGlzLmJv
b2wgPSBib29sOwotICAgIHRoaXMuc3RyaW5nTW9kZVZhbHVlID0gYm9vbCA9PT0gInRydWUiOwot
ICB9OwotCi0gIEhhbmRsZWJhcnMuQVNULkNvbW1lbnROb2RlID0gZnVuY3Rpb24oY29tbWVudCkg
ewotICAgIHRoaXMudHlwZSA9ICJjb21tZW50IjsKLSAgICB0aGlzLmNvbW1lbnQgPSBjb21tZW50
OwotICB9OwotCi19KSgpOzsKLS8vIGxpYi9oYW5kbGViYXJzL3V0aWxzLmpzCi0KLXZhciBlcnJv
clByb3BzID0gWydkZXNjcmlwdGlvbicsICdmaWxlTmFtZScsICdsaW5lTnVtYmVyJywgJ21lc3Nh
Z2UnLCAnbmFtZScsICdudW1iZXInLCAnc3RhY2snXTsKLQotSGFuZGxlYmFycy5FeGNlcHRpb24g
PSBmdW5jdGlvbihtZXNzYWdlKSB7Ci0gIHZhciB0bXAgPSBFcnJvci5wcm90b3R5cGUuY29uc3Ry
dWN0b3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLQotICAvLyBVbmZvcnR1bmF0ZWx5IGVycm9y
cyBhcmUgbm90IGVudW1lcmFibGUgaW4gQ2hyb21lIChhdCBsZWFzdCksIHNvIGBmb3IgcHJvcCBp
biB0bXBgIGRvZXNuJ3Qgd29yay4KLSAgZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgZXJyb3JQcm9w
cy5sZW5ndGg7IGlkeCsrKSB7Ci0gICAgdGhpc1tlcnJvclByb3BzW2lkeF1dID0gdG1wW2Vycm9y
UHJvcHNbaWR4XV07Ci0gIH0KLX07Ci1IYW5kbGViYXJzLkV4Y2VwdGlvbi5wcm90b3R5cGUgPSBu
ZXcgRXJyb3IoKTsKLQotLy8gQnVpbGQgb3V0IG91ciBiYXNpYyBTYWZlU3RyaW5nIHR5cGUKLUhh
bmRsZWJhcnMuU2FmZVN0cmluZyA9IGZ1bmN0aW9uKHN0cmluZykgewotICB0aGlzLnN0cmluZyA9
IHN0cmluZzsKLX07Ci1IYW5kbGViYXJzLlNhZmVTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nID0g
ZnVuY3Rpb24oKSB7Ci0gIHJldHVybiB0aGlzLnN0cmluZy50b1N0cmluZygpOwotfTsKLQotKGZ1
bmN0aW9uKCkgewotICB2YXIgZXNjYXBlID0gewotICAgICImIjogIiZhbXA7IiwKLSAgICAiPCI6
ICImbHQ7IiwKLSAgICAiPiI6ICImZ3Q7IiwKLSAgICAnIic6ICImcXVvdDsiLAotICAgICInIjog
IiYjeDI3OyIsCi0gICAgImAiOiAiJiN4NjA7IgotICB9OwotCi0gIHZhciBiYWRDaGFycyA9IC9b
Jjw+IidgXS9nOwotICB2YXIgcG9zc2libGUgPSAvWyY8PiInYF0vOwotCi0gIHZhciBlc2NhcGVD
aGFyID0gZnVuY3Rpb24oY2hyKSB7Ci0gICAgcmV0dXJuIGVzY2FwZVtjaHJdIHx8ICImYW1wOyI7
Ci0gIH07Ci0KLSAgSGFuZGxlYmFycy5VdGlscyA9IHsKLSAgICBlc2NhcGVFeHByZXNzaW9uOiBm
dW5jdGlvbihzdHJpbmcpIHsKLSAgICAgIC8vIGRvbid0IGVzY2FwZSBTYWZlU3RyaW5ncywgc2lu
Y2UgdGhleSdyZSBhbHJlYWR5IHNhZmUKLSAgICAgIGlmIChzdHJpbmcgaW5zdGFuY2VvZiBIYW5k
bGViYXJzLlNhZmVTdHJpbmcpIHsKLSAgICAgICAgcmV0dXJuIHN0cmluZy50b1N0cmluZygpOwot
ICAgICAgfSBlbHNlIGlmIChzdHJpbmcgPT0gbnVsbCB8fCBzdHJpbmcgPT09IGZhbHNlKSB7Ci0g
ICAgICAgIHJldHVybiAiIjsKLSAgICAgIH0KLQotICAgICAgaWYoIXBvc3NpYmxlLnRlc3Qoc3Ry
aW5nKSkgeyByZXR1cm4gc3RyaW5nOyB9Ci0gICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoYmFk
Q2hhcnMsIGVzY2FwZUNoYXIpOwotICAgIH0sCi0KLSAgICBpc0VtcHR5OiBmdW5jdGlvbih2YWx1
ZSkgewotICAgICAgaWYgKCF2YWx1ZSAmJiB2YWx1ZSAhPT0gMCkgewotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgIH0gZWxzZSBpZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFs
dWUpID09PSAiW29iamVjdCBBcnJheV0iICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkgewotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgIH0KLSAgICB9Ci0gIH07Ci19KSgpOzsKLS8vIGxpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2Nv
bXBpbGVyLmpzCi0KLS8qanNoaW50IGVxbnVsbDp0cnVlKi8KLUhhbmRsZWJhcnMuQ29tcGlsZXIg
PSBmdW5jdGlvbigpIHt9OwotSGFuZGxlYmFycy5KYXZhU2NyaXB0Q29tcGlsZXIgPSBmdW5jdGlv
bigpIHt9OwotCi0oZnVuY3Rpb24oQ29tcGlsZXIsIEphdmFTY3JpcHRDb21waWxlcikgewotICAv
LyB0aGUgZm91bmRIZWxwZXIgcmVnaXN0ZXIgd2lsbCBkaXNhbWJpZ3VhdGUgaGVscGVyIGxvb2t1
cCBmcm9tIGZpbmRpbmcgYQotICAvLyBmdW5jdGlvbiBpbiBhIGNvbnRleHQuIFRoaXMgaXMgbmVj
ZXNzYXJ5IGZvciBtdXN0YWNoZSBjb21wYXRpYmlsaXR5LCB3aGljaAotICAvLyByZXF1aXJlcyB0
aGF0IGNvbnRleHQgZnVuY3Rpb25zIGluIGJsb2NrcyBhcmUgZXZhbHVhdGVkIGJ5IGJsb2NrSGVs
cGVyTWlzc2luZywKLSAgLy8gYW5kIHRoZW4gcHJvY2VlZCBhcyBpZiB0aGUgcmVzdWx0aW5nIHZh
bHVlIHdhcyBwcm92aWRlZCB0byBibG9ja0hlbHBlck1pc3NpbmcuCi0KLSAgQ29tcGlsZXIucHJv
dG90eXBlID0gewotICAgIGNvbXBpbGVyOiBDb21waWxlciwKLQotICAgIGRpc2Fzc2VtYmxlOiBm
dW5jdGlvbigpIHsKLSAgICAgIHZhciBvcGNvZGVzID0gdGhpcy5vcGNvZGVzLCBvcGNvZGUsIG91
dCA9IFtdLCBwYXJhbXMsIHBhcmFtOwotCi0gICAgICBmb3IgKHZhciBpPTAsIGw9b3Bjb2Rlcy5s
ZW5ndGg7IGk8bDsgaSsrKSB7Ci0gICAgICAgIG9wY29kZSA9IG9wY29kZXNbaV07Ci0KLSAgICAg
ICAgaWYgKG9wY29kZS5vcGNvZGUgPT09ICdERUNMQVJFJykgewotICAgICAgICAgIG91dC5wdXNo
KCJERUNMQVJFICIgKyBvcGNvZGUubmFtZSArICI9IiArIG9wY29kZS52YWx1ZSk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgcGFyYW1zID0gW107Ci0gICAgICAgICAgZm9yICh2YXIgaj0w
OyBqPG9wY29kZS5hcmdzLmxlbmd0aDsgaisrKSB7Ci0gICAgICAgICAgICBwYXJhbSA9IG9wY29k
ZS5hcmdzW2pdOwotICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gInN0cmluZyIpIHsK
LSAgICAgICAgICAgICAgcGFyYW0gPSAiXCIiICsgcGFyYW0ucmVwbGFjZSgiXG4iLCAiXFxuIikg
KyAiXCIiOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcGFyYW1zLnB1c2gocGFyYW0pOwot
ICAgICAgICAgIH0KLSAgICAgICAgICBvdXQucHVzaChvcGNvZGUub3Bjb2RlICsgIiAiICsgcGFy
YW1zLmpvaW4oIiAiKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgcmV0dXJuIG91dC5q
b2luKCJcbiIpOwotICAgIH0sCi0gICAgZXF1YWxzOiBmdW5jdGlvbihvdGhlcikgewotICAgICAg
dmFyIGxlbiA9IHRoaXMub3Bjb2Rlcy5sZW5ndGg7Ci0gICAgICBpZiAob3RoZXIub3Bjb2Rlcy5s
ZW5ndGggIT09IGxlbikgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgdmFyIG9wY29kZSA9IHRo
aXMub3Bjb2Rlc1tpXSwKLSAgICAgICAgICAgIG90aGVyT3Bjb2RlID0gb3RoZXIub3Bjb2Rlc1tp
XTsKLSAgICAgICAgaWYgKG9wY29kZS5vcGNvZGUgIT09IG90aGVyT3Bjb2RlLm9wY29kZSB8fCBv
cGNvZGUuYXJncy5sZW5ndGggIT09IG90aGVyT3Bjb2RlLmFyZ3MubGVuZ3RoKSB7Ci0gICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwg
b3Bjb2RlLmFyZ3MubGVuZ3RoOyBqKyspIHsKLSAgICAgICAgICBpZiAob3Bjb2RlLmFyZ3Nbal0g
IT09IG90aGVyT3Bjb2RlLmFyZ3Nbal0pIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0s
Ci0KLSAgICBndWlkOiAwLAotCi0gICAgY29tcGlsZTogZnVuY3Rpb24ocHJvZ3JhbSwgb3B0aW9u
cykgewotICAgICAgdGhpcy5jaGlsZHJlbiA9IFtdOwotICAgICAgdGhpcy5kZXB0aHMgPSB7bGlz
dDogW119OwotICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9uczsKLQotICAgICAgLy8gVGhlc2Ug
Y2hhbmdlcyB3aWxsIHByb3BhZ2F0ZSB0byB0aGUgb3RoZXIgY29tcGlsZXIgY29tcG9uZW50cwot
ICAgICAgdmFyIGtub3duSGVscGVycyA9IHRoaXMub3B0aW9ucy5rbm93bkhlbHBlcnM7Ci0gICAg
ICB0aGlzLm9wdGlvbnMua25vd25IZWxwZXJzID0gewotICAgICAgICAnaGVscGVyTWlzc2luZyc6
IHRydWUsCi0gICAgICAgICdibG9ja0hlbHBlck1pc3NpbmcnOiB0cnVlLAotICAgICAgICAnZWFj
aCc6IHRydWUsCi0gICAgICAgICdpZic6IHRydWUsCi0gICAgICAgICd1bmxlc3MnOiB0cnVlLAot
ICAgICAgICAnd2l0aCc6IHRydWUsCi0gICAgICAgICdsb2cnOiB0cnVlCi0gICAgICB9OwotICAg
ICAgaWYgKGtub3duSGVscGVycykgewotICAgICAgICBmb3IgKHZhciBuYW1lIGluIGtub3duSGVs
cGVycykgewotICAgICAgICAgIHRoaXMub3B0aW9ucy5rbm93bkhlbHBlcnNbbmFtZV0gPSBrbm93
bkhlbHBlcnNbbmFtZV07Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgcmV0dXJuIHRoaXMu
cHJvZ3JhbShwcm9ncmFtKTsKLSAgICB9LAotCi0gICAgYWNjZXB0OiBmdW5jdGlvbihub2RlKSB7
Ci0gICAgICByZXR1cm4gdGhpc1tub2RlLnR5cGVdKG5vZGUpOwotICAgIH0sCi0KLSAgICBwcm9n
cmFtOiBmdW5jdGlvbihwcm9ncmFtKSB7Ci0gICAgICB2YXIgc3RhdGVtZW50cyA9IHByb2dyYW0u
c3RhdGVtZW50cywgc3RhdGVtZW50OwotICAgICAgdGhpcy5vcGNvZGVzID0gW107Ci0KLSAgICAg
IGZvcih2YXIgaT0wLCBsPXN0YXRlbWVudHMubGVuZ3RoOyBpPGw7IGkrKykgewotICAgICAgICBz
dGF0ZW1lbnQgPSBzdGF0ZW1lbnRzW2ldOwotICAgICAgICB0aGlzW3N0YXRlbWVudC50eXBlXShz
dGF0ZW1lbnQpOwotICAgICAgfQotICAgICAgdGhpcy5pc1NpbXBsZSA9IGwgPT09IDE7Ci0KLSAg
ICAgIHRoaXMuZGVwdGhzLmxpc3QgPSB0aGlzLmRlcHRocy5saXN0LnNvcnQoZnVuY3Rpb24oYSwg
YikgewotICAgICAgICByZXR1cm4gYSAtIGI7Ci0gICAgICB9KTsKLQotICAgICAgcmV0dXJuIHRo
aXM7Ci0gICAgfSwKLQotICAgIGNvbXBpbGVQcm9ncmFtOiBmdW5jdGlvbihwcm9ncmFtKSB7Ci0g
ICAgICB2YXIgcmVzdWx0ID0gbmV3IHRoaXMuY29tcGlsZXIoKS5jb21waWxlKHByb2dyYW0sIHRo
aXMub3B0aW9ucyk7Ci0gICAgICB2YXIgZ3VpZCA9IHRoaXMuZ3VpZCsrLCBkZXB0aDsKLQotICAg
ICAgdGhpcy51c2VQYXJ0aWFsID0gdGhpcy51c2VQYXJ0aWFsIHx8IHJlc3VsdC51c2VQYXJ0aWFs
OwotCi0gICAgICB0aGlzLmNoaWxkcmVuW2d1aWRdID0gcmVzdWx0OwotCi0gICAgICBmb3IodmFy
IGk9MCwgbD1yZXN1bHQuZGVwdGhzLmxpc3QubGVuZ3RoOyBpPGw7IGkrKykgewotICAgICAgICBk
ZXB0aCA9IHJlc3VsdC5kZXB0aHMubGlzdFtpXTsKLQotICAgICAgICBpZihkZXB0aCA8IDIpIHsg
Y29udGludWU7IH0KLSAgICAgICAgZWxzZSB7IHRoaXMuYWRkRGVwdGgoZGVwdGggLSAxKTsgfQot
ICAgICAgfQotCi0gICAgICByZXR1cm4gZ3VpZDsKLSAgICB9LAotCi0gICAgYmxvY2s6IGZ1bmN0
aW9uKGJsb2NrKSB7Ci0gICAgICB2YXIgbXVzdGFjaGUgPSBibG9jay5tdXN0YWNoZSwKLSAgICAg
ICAgICBwcm9ncmFtID0gYmxvY2sucHJvZ3JhbSwKLSAgICAgICAgICBpbnZlcnNlID0gYmxvY2su
aW52ZXJzZTsKLQotICAgICAgaWYgKHByb2dyYW0pIHsKLSAgICAgICAgcHJvZ3JhbSA9IHRoaXMu
Y29tcGlsZVByb2dyYW0ocHJvZ3JhbSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChpbnZlcnNlKSB7
Ci0gICAgICAgIGludmVyc2UgPSB0aGlzLmNvbXBpbGVQcm9ncmFtKGludmVyc2UpOwotICAgICAg
fQotCi0gICAgICB2YXIgdHlwZSA9IHRoaXMuY2xhc3NpZnlNdXN0YWNoZShtdXN0YWNoZSk7Ci0K
LSAgICAgIGlmICh0eXBlID09PSAiaGVscGVyIikgewotICAgICAgICB0aGlzLmhlbHBlck11c3Rh
Y2hlKG11c3RhY2hlLCBwcm9ncmFtLCBpbnZlcnNlKTsKLSAgICAgIH0gZWxzZSBpZiAodHlwZSA9
PT0gInNpbXBsZSIpIHsKLSAgICAgICAgdGhpcy5zaW1wbGVNdXN0YWNoZShtdXN0YWNoZSk7Ci0K
LSAgICAgICAgLy8gbm93IHRoYXQgdGhlIHNpbXBsZSBtdXN0YWNoZSBpcyByZXNvbHZlZCwgd2Ug
bmVlZCB0bwotICAgICAgICAvLyBldmFsdWF0ZSBpdCBieSBleGVjdXRpbmcgYGJsb2NrSGVscGVy
TWlzc2luZ2AKLSAgICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hQcm9ncmFtJywgcHJvZ3JhbSk7Ci0g
ICAgICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIGludmVyc2UpOwotICAgICAgICB0aGlz
Lm9wY29kZSgnZW1wdHlIYXNoJyk7Ci0gICAgICAgIHRoaXMub3Bjb2RlKCdibG9ja1ZhbHVlJyk7
Ci0gICAgICB9IGVsc2UgewotICAgICAgICB0aGlzLmFtYmlndW91c011c3RhY2hlKG11c3RhY2hl
LCBwcm9ncmFtLCBpbnZlcnNlKTsKLQotICAgICAgICAvLyBub3cgdGhhdCB0aGUgc2ltcGxlIG11
c3RhY2hlIGlzIHJlc29sdmVkLCB3ZSBuZWVkIHRvCi0gICAgICAgIC8vIGV2YWx1YXRlIGl0IGJ5
IGV4ZWN1dGluZyBgYmxvY2tIZWxwZXJNaXNzaW5nYAotICAgICAgICB0aGlzLm9wY29kZSgncHVz
aFByb2dyYW0nLCBwcm9ncmFtKTsKLSAgICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hQcm9ncmFtJywg
aW52ZXJzZSk7Ci0gICAgICAgIHRoaXMub3Bjb2RlKCdlbXB0eUhhc2gnKTsKLSAgICAgICAgdGhp
cy5vcGNvZGUoJ2FtYmlndW91c0Jsb2NrVmFsdWUnKTsKLSAgICAgIH0KLQotICAgICAgdGhpcy5v
cGNvZGUoJ2FwcGVuZCcpOwotICAgIH0sCi0KLSAgICBoYXNoOiBmdW5jdGlvbihoYXNoKSB7Ci0g
ICAgICB2YXIgcGFpcnMgPSBoYXNoLnBhaXJzLCBwYWlyLCB2YWw7Ci0KLSAgICAgIHRoaXMub3Bj
b2RlKCdwdXNoSGFzaCcpOwotCi0gICAgICBmb3IodmFyIGk9MCwgbD1wYWlycy5sZW5ndGg7IGk8
bDsgaSsrKSB7Ci0gICAgICAgIHBhaXIgPSBwYWlyc1tpXTsKLSAgICAgICAgdmFsICA9IHBhaXJb
MV07Ci0KLSAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zdHJpbmdQYXJhbXMpIHsKLSAgICAgICAg
ICB0aGlzLm9wY29kZSgncHVzaFN0cmluZ1BhcmFtJywgdmFsLnN0cmluZ01vZGVWYWx1ZSwgdmFs
LnR5cGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHRoaXMuYWNjZXB0KHZhbCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICB0aGlzLm9wY29kZSgnYXNzaWduVG9IYXNoJywgcGFpclswXSk7
Ci0gICAgICB9Ci0gICAgICB0aGlzLm9wY29kZSgncG9wSGFzaCcpOwotICAgIH0sCi0KLSAgICBw
YXJ0aWFsOiBmdW5jdGlvbihwYXJ0aWFsKSB7Ci0gICAgICB2YXIgcGFydGlhbE5hbWUgPSBwYXJ0
aWFsLnBhcnRpYWxOYW1lOwotICAgICAgdGhpcy51c2VQYXJ0aWFsID0gdHJ1ZTsKLQotICAgICAg
aWYocGFydGlhbC5jb250ZXh0KSB7Ci0gICAgICAgIHRoaXMuSUQocGFydGlhbC5jb250ZXh0KTsK
LSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHRoaXMub3Bjb2RlKCdwdXNoJywgJ2RlcHRoMCcpOwot
ICAgICAgfQotCi0gICAgICB0aGlzLm9wY29kZSgnaW52b2tlUGFydGlhbCcsIHBhcnRpYWxOYW1l
Lm5hbWUpOwotICAgICAgdGhpcy5vcGNvZGUoJ2FwcGVuZCcpOwotICAgIH0sCi0KLSAgICBjb250
ZW50OiBmdW5jdGlvbihjb250ZW50KSB7Ci0gICAgICB0aGlzLm9wY29kZSgnYXBwZW5kQ29udGVu
dCcsIGNvbnRlbnQuc3RyaW5nKTsKLSAgICB9LAotCi0gICAgbXVzdGFjaGU6IGZ1bmN0aW9uKG11
c3RhY2hlKSB7Ci0gICAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9uczsKLSAgICAgIHZhciB0
eXBlID0gdGhpcy5jbGFzc2lmeU11c3RhY2hlKG11c3RhY2hlKTsKLQotICAgICAgaWYgKHR5cGUg
PT09ICJzaW1wbGUiKSB7Ci0gICAgICAgIHRoaXMuc2ltcGxlTXVzdGFjaGUobXVzdGFjaGUpOwot
ICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAiaGVscGVyIikgewotICAgICAgICB0aGlzLmhlbHBl
ck11c3RhY2hlKG11c3RhY2hlKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHRoaXMuYW1iaWd1
b3VzTXVzdGFjaGUobXVzdGFjaGUpOwotICAgICAgfQotCi0gICAgICBpZihtdXN0YWNoZS5lc2Nh
cGVkICYmICFvcHRpb25zLm5vRXNjYXBlKSB7Ci0gICAgICAgIHRoaXMub3Bjb2RlKCdhcHBlbmRF
c2NhcGVkJyk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB0aGlzLm9wY29kZSgnYXBwZW5kJyk7
Ci0gICAgICB9Ci0gICAgfSwKLQotICAgIGFtYmlndW91c011c3RhY2hlOiBmdW5jdGlvbihtdXN0
YWNoZSwgcHJvZ3JhbSwgaW52ZXJzZSkgewotICAgICAgdmFyIGlkID0gbXVzdGFjaGUuaWQsCi0g
ICAgICAgICAgbmFtZSA9IGlkLnBhcnRzWzBdLAotICAgICAgICAgIGlzQmxvY2sgPSBwcm9ncmFt
ICE9IG51bGwgfHwgaW52ZXJzZSAhPSBudWxsOwotCi0gICAgICB0aGlzLm9wY29kZSgnZ2V0Q29u
dGV4dCcsIGlkLmRlcHRoKTsKLQotICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hQcm9ncmFtJywgcHJv
Z3JhbSk7Ci0gICAgICB0aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBpbnZlcnNlKTsKLQotICAg
ICAgdGhpcy5vcGNvZGUoJ2ludm9rZUFtYmlndW91cycsIG5hbWUsIGlzQmxvY2spOwotICAgIH0s
Ci0KLSAgICBzaW1wbGVNdXN0YWNoZTogZnVuY3Rpb24obXVzdGFjaGUpIHsKLSAgICAgIHZhciBp
ZCA9IG11c3RhY2hlLmlkOwotCi0gICAgICBpZiAoaWQudHlwZSA9PT0gJ0RBVEEnKSB7Ci0gICAg
ICAgIHRoaXMuREFUQShpZCk7Ci0gICAgICB9IGVsc2UgaWYgKGlkLnBhcnRzLmxlbmd0aCkgewot
ICAgICAgICB0aGlzLklEKGlkKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFNpbXBsaWZp
ZWQgSUQgZm9yIGB0aGlzYAotICAgICAgICB0aGlzLmFkZERlcHRoKGlkLmRlcHRoKTsKLSAgICAg
ICAgdGhpcy5vcGNvZGUoJ2dldENvbnRleHQnLCBpZC5kZXB0aCk7Ci0gICAgICAgIHRoaXMub3Bj
b2RlKCdwdXNoQ29udGV4dCcpOwotICAgICAgfQotCi0gICAgICB0aGlzLm9wY29kZSgncmVzb2x2
ZVBvc3NpYmxlTGFtYmRhJyk7Ci0gICAgfSwKLQotICAgIGhlbHBlck11c3RhY2hlOiBmdW5jdGlv
bihtdXN0YWNoZSwgcHJvZ3JhbSwgaW52ZXJzZSkgewotICAgICAgdmFyIHBhcmFtcyA9IHRoaXMu
c2V0dXBGdWxsTXVzdGFjaGVQYXJhbXMobXVzdGFjaGUsIHByb2dyYW0sIGludmVyc2UpLAotICAg
ICAgICAgIG5hbWUgPSBtdXN0YWNoZS5pZC5wYXJ0c1swXTsKLQotICAgICAgaWYgKHRoaXMub3B0
aW9ucy5rbm93bkhlbHBlcnNbbmFtZV0pIHsKLSAgICAgICAgdGhpcy5vcGNvZGUoJ2ludm9rZUtu
b3duSGVscGVyJywgcGFyYW1zLmxlbmd0aCwgbmFtZSk7Ci0gICAgICB9IGVsc2UgaWYgKHRoaXMu
a25vd25IZWxwZXJzT25seSkgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIllvdSBzcGVjaWZp
ZWQga25vd25IZWxwZXJzT25seSwgYnV0IHVzZWQgdGhlIHVua25vd24gaGVscGVyICIgKyBuYW1l
KTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHRoaXMub3Bjb2RlKCdpbnZva2VIZWxwZXInLCBw
YXJhbXMubGVuZ3RoLCBuYW1lKTsKLSAgICAgIH0KLSAgICB9LAotCi0gICAgSUQ6IGZ1bmN0aW9u
KGlkKSB7Ci0gICAgICB0aGlzLmFkZERlcHRoKGlkLmRlcHRoKTsKLSAgICAgIHRoaXMub3Bjb2Rl
KCdnZXRDb250ZXh0JywgaWQuZGVwdGgpOwotCi0gICAgICB2YXIgbmFtZSA9IGlkLnBhcnRzWzBd
OwotICAgICAgaWYgKCFuYW1lKSB7Ci0gICAgICAgIHRoaXMub3Bjb2RlKCdwdXNoQ29udGV4dCcp
OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgdGhpcy5vcGNvZGUoJ2xvb2t1cE9uQ29udGV4dCcs
IGlkLnBhcnRzWzBdKTsKLSAgICAgIH0KLQotICAgICAgZm9yKHZhciBpPTEsIGw9aWQucGFydHMu
bGVuZ3RoOyBpPGw7IGkrKykgewotICAgICAgICB0aGlzLm9wY29kZSgnbG9va3VwJywgaWQucGFy
dHNbaV0pOwotICAgICAgfQotICAgIH0sCi0KLSAgICBEQVRBOiBmdW5jdGlvbihkYXRhKSB7Ci0g
ICAgICB0aGlzLm9wdGlvbnMuZGF0YSA9IHRydWU7Ci0gICAgICB0aGlzLm9wY29kZSgnbG9va3Vw
RGF0YScsIGRhdGEuaWQpOwotICAgIH0sCi0KLSAgICBTVFJJTkc6IGZ1bmN0aW9uKHN0cmluZykg
ewotICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hTdHJpbmcnLCBzdHJpbmcuc3RyaW5nKTsKLSAgICB9
LAotCi0gICAgSU5URUdFUjogZnVuY3Rpb24oaW50ZWdlcikgewotICAgICAgdGhpcy5vcGNvZGUo
J3B1c2hMaXRlcmFsJywgaW50ZWdlci5pbnRlZ2VyKTsKLSAgICB9LAotCi0gICAgQk9PTEVBTjog
ZnVuY3Rpb24oYm9vbCkgewotICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hMaXRlcmFsJywgYm9vbC5i
b29sKTsKLSAgICB9LAotCi0gICAgY29tbWVudDogZnVuY3Rpb24oKSB7fSwKLQotICAgIC8vIEhF
TFBFUlMKLSAgICBvcGNvZGU6IGZ1bmN0aW9uKG5hbWUpIHsKLSAgICAgIHRoaXMub3Bjb2Rlcy5w
dXNoKHsgb3Bjb2RlOiBuYW1lLCBhcmdzOiBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSkgfSk7
Ci0gICAgfSwKLQotICAgIGRlY2xhcmU6IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7Ci0gICAgICB0
aGlzLm9wY29kZXMucHVzaCh7IG9wY29kZTogJ0RFQ0xBUkUnLCBuYW1lOiBuYW1lLCB2YWx1ZTog
dmFsdWUgfSk7Ci0gICAgfSwKLQotICAgIGFkZERlcHRoOiBmdW5jdGlvbihkZXB0aCkgewotICAg
ICAgaWYoaXNOYU4oZGVwdGgpKSB7IHRocm93IG5ldyBFcnJvcigiRVdPVCIpOyB9Ci0gICAgICBp
ZihkZXB0aCA9PT0gMCkgeyByZXR1cm47IH0KLQotICAgICAgaWYoIXRoaXMuZGVwdGhzW2RlcHRo
XSkgewotICAgICAgICB0aGlzLmRlcHRoc1tkZXB0aF0gPSB0cnVlOwotICAgICAgICB0aGlzLmRl
cHRocy5saXN0LnB1c2goZGVwdGgpOwotICAgICAgfQotICAgIH0sCi0KLSAgICBjbGFzc2lmeU11
c3RhY2hlOiBmdW5jdGlvbihtdXN0YWNoZSkgewotICAgICAgdmFyIGlzSGVscGVyICAgPSBtdXN0
YWNoZS5pc0hlbHBlcjsKLSAgICAgIHZhciBpc0VsaWdpYmxlID0gbXVzdGFjaGUuZWxpZ2libGVI
ZWxwZXI7Ci0gICAgICB2YXIgb3B0aW9ucyAgICA9IHRoaXMub3B0aW9uczsKLQotICAgICAgLy8g
aWYgYW1iaWd1b3VzLCB3ZSBjYW4gcG9zc2libHkgcmVzb2x2ZSB0aGUgYW1iaWd1aXR5IG5vdwot
ICAgICAgaWYgKGlzRWxpZ2libGUgJiYgIWlzSGVscGVyKSB7Ci0gICAgICAgIHZhciBuYW1lID0g
bXVzdGFjaGUuaWQucGFydHNbMF07Ci0KLSAgICAgICAgaWYgKG9wdGlvbnMua25vd25IZWxwZXJz
W25hbWVdKSB7Ci0gICAgICAgICAgaXNIZWxwZXIgPSB0cnVlOwotICAgICAgICB9IGVsc2UgaWYg
KG9wdGlvbnMua25vd25IZWxwZXJzT25seSkgewotICAgICAgICAgIGlzRWxpZ2libGUgPSBmYWxz
ZTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoaXNIZWxwZXIpIHsgcmV0dXJuICJo
ZWxwZXIiOyB9Ci0gICAgICBlbHNlIGlmIChpc0VsaWdpYmxlKSB7IHJldHVybiAiYW1iaWd1b3Vz
IjsgfQotICAgICAgZWxzZSB7IHJldHVybiAic2ltcGxlIjsgfQotICAgIH0sCi0KLSAgICBwdXNo
UGFyYW1zOiBmdW5jdGlvbihwYXJhbXMpIHsKLSAgICAgIHZhciBpID0gcGFyYW1zLmxlbmd0aCwg
cGFyYW07Ci0KLSAgICAgIHdoaWxlKGktLSkgewotICAgICAgICBwYXJhbSA9IHBhcmFtc1tpXTsK
LQotICAgICAgICBpZih0aGlzLm9wdGlvbnMuc3RyaW5nUGFyYW1zKSB7Ci0gICAgICAgICAgaWYo
cGFyYW0uZGVwdGgpIHsKLSAgICAgICAgICAgIHRoaXMuYWRkRGVwdGgocGFyYW0uZGVwdGgpOwot
ICAgICAgICAgIH0KLQotICAgICAgICAgIHRoaXMub3Bjb2RlKCdnZXRDb250ZXh0JywgcGFyYW0u
ZGVwdGggfHwgMCk7Ci0gICAgICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hTdHJpbmdQYXJhbScsIHBh
cmFtLnN0cmluZ01vZGVWYWx1ZSwgcGFyYW0udHlwZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgdGhpc1twYXJhbS50eXBlXShwYXJhbSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9
LAotCi0gICAgc2V0dXBNdXN0YWNoZVBhcmFtczogZnVuY3Rpb24obXVzdGFjaGUpIHsKLSAgICAg
IHZhciBwYXJhbXMgPSBtdXN0YWNoZS5wYXJhbXM7Ci0gICAgICB0aGlzLnB1c2hQYXJhbXMocGFy
YW1zKTsKLQotICAgICAgaWYobXVzdGFjaGUuaGFzaCkgewotICAgICAgICB0aGlzLmhhc2gobXVz
dGFjaGUuaGFzaCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB0aGlzLm9wY29kZSgnZW1wdHlI
YXNoJyk7Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiBwYXJhbXM7Ci0gICAgfSwKLQotICAgIC8v
IHRoaXMgd2lsbCByZXBsYWNlIHNldHVwTXVzdGFjaGVQYXJhbXMgd2hlbiB3ZSdyZSBkb25lCi0g
ICAgc2V0dXBGdWxsTXVzdGFjaGVQYXJhbXM6IGZ1bmN0aW9uKG11c3RhY2hlLCBwcm9ncmFtLCBp
bnZlcnNlKSB7Ci0gICAgICB2YXIgcGFyYW1zID0gbXVzdGFjaGUucGFyYW1zOwotICAgICAgdGhp
cy5wdXNoUGFyYW1zKHBhcmFtcyk7Ci0KLSAgICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScs
IHByb2dyYW0pOwotICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hQcm9ncmFtJywgaW52ZXJzZSk7Ci0K
LSAgICAgIGlmKG11c3RhY2hlLmhhc2gpIHsKLSAgICAgICAgdGhpcy5oYXNoKG11c3RhY2hlLmhh
c2gpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgdGhpcy5vcGNvZGUoJ2VtcHR5SGFzaCcpOwot
ICAgICAgfQotCi0gICAgICByZXR1cm4gcGFyYW1zOwotICAgIH0KLSAgfTsKLQotICB2YXIgTGl0
ZXJhbCA9IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgdGhpcy52YWx1ZSA9IHZhbHVlOwotICB9Owot
Ci0gIEphdmFTY3JpcHRDb21waWxlci5wcm90b3R5cGUgPSB7Ci0gICAgLy8gUFVCTElDIEFQSTog
WW91IGNhbiBvdmVycmlkZSB0aGVzZSBtZXRob2RzIGluIGEgc3ViY2xhc3MgdG8gcHJvdmlkZQot
ICAgIC8vIGFsdGVybmF0aXZlIGNvbXBpbGVkIGZvcm1zIGZvciBuYW1lIGxvb2t1cCBhbmQgYnVm
ZmVyaW5nIHNlbWFudGljcwotICAgIG5hbWVMb29rdXA6IGZ1bmN0aW9uKHBhcmVudCwgbmFtZSAv
KiAsIHR5cGUqLykgewotICAgICAgaWYgKC9eWzAtOV0rJC8udGVzdChuYW1lKSkgewotICAgICAg
ICByZXR1cm4gcGFyZW50ICsgIlsiICsgbmFtZSArICJdIjsKLSAgICAgIH0gZWxzZSBpZiAoSmF2
YVNjcmlwdENvbXBpbGVyLmlzVmFsaWRKYXZhU2NyaXB0VmFyaWFibGVOYW1lKG5hbWUpKSB7Ci0g
ICAgICAgIHJldHVybiBwYXJlbnQgKyAiLiIgKyBuYW1lOwotICAgICAgfQotICAgICAgZWxzZSB7
Ci0gICAgICAgIHJldHVybiBwYXJlbnQgKyAiWyciICsgbmFtZSArICInXSI7Ci0gICAgICB9Ci0g
ICAgfSwKLQotICAgIGFwcGVuZFRvQnVmZmVyOiBmdW5jdGlvbihzdHJpbmcpIHsKLSAgICAgIGlm
ICh0aGlzLmVudmlyb25tZW50LmlzU2ltcGxlKSB7Ci0gICAgICAgIHJldHVybiAicmV0dXJuICIg
KyBzdHJpbmcgKyAiOyI7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gewotICAgICAg
ICAgIGFwcGVuZFRvQnVmZmVyOiB0cnVlLAotICAgICAgICAgIGNvbnRlbnQ6IHN0cmluZywKLSAg
ICAgICAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7IHJldHVybiAiYnVmZmVyICs9ICIgKyBzdHJp
bmcgKyAiOyI7IH0KLSAgICAgICAgfTsKLSAgICAgIH0KLSAgICB9LAotCi0gICAgaW5pdGlhbGl6
ZUJ1ZmZlcjogZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gdGhpcy5xdW90ZWRTdHJpbmcoIiIp
OwotICAgIH0sCi0KLSAgICBuYW1lc3BhY2U6ICJIYW5kbGViYXJzIiwKLSAgICAvLyBFTkQgUFVC
TElDIEFQSQotCi0gICAgY29tcGlsZTogZnVuY3Rpb24oZW52aXJvbm1lbnQsIG9wdGlvbnMsIGNv
bnRleHQsIGFzT2JqZWN0KSB7Ci0gICAgICB0aGlzLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7
Ci0gICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwotCi0gICAgICBIYW5kbGViYXJz
LmxvZyhIYW5kbGViYXJzLmxvZ2dlci5ERUJVRywgdGhpcy5lbnZpcm9ubWVudC5kaXNhc3NlbWJs
ZSgpICsgIlxuXG4iKTsKLQotICAgICAgdGhpcy5uYW1lID0gdGhpcy5lbnZpcm9ubWVudC5uYW1l
OwotICAgICAgdGhpcy5pc0NoaWxkID0gISFjb250ZXh0OwotICAgICAgdGhpcy5jb250ZXh0ID0g
Y29udGV4dCB8fCB7Ci0gICAgICAgIHByb2dyYW1zOiBbXSwKLSAgICAgICAgZW52aXJvbm1lbnRz
OiBbXSwKLSAgICAgICAgYWxpYXNlczogeyB9Ci0gICAgICB9OwotCi0gICAgICB0aGlzLnByZWFt
YmxlKCk7Ci0KLSAgICAgIHRoaXMuc3RhY2tTbG90ID0gMDsKLSAgICAgIHRoaXMuc3RhY2tWYXJz
ID0gW107Ci0gICAgICB0aGlzLnJlZ2lzdGVycyA9IHsgbGlzdDogW10gfTsKLSAgICAgIHRoaXMu
Y29tcGlsZVN0YWNrID0gW107Ci0gICAgICB0aGlzLmlubGluZVN0YWNrID0gW107Ci0KLSAgICAg
IHRoaXMuY29tcGlsZUNoaWxkcmVuKGVudmlyb25tZW50LCBvcHRpb25zKTsKLQotICAgICAgdmFy
IG9wY29kZXMgPSBlbnZpcm9ubWVudC5vcGNvZGVzLCBvcGNvZGU7Ci0KLSAgICAgIHRoaXMuaSA9
IDA7Ci0KLSAgICAgIGZvcihsPW9wY29kZXMubGVuZ3RoOyB0aGlzLmk8bDsgdGhpcy5pKyspIHsK
LSAgICAgICAgb3Bjb2RlID0gb3Bjb2Rlc1t0aGlzLmldOwotCi0gICAgICAgIGlmKG9wY29kZS5v
cGNvZGUgPT09ICdERUNMQVJFJykgewotICAgICAgICAgIHRoaXNbb3Bjb2RlLm5hbWVdID0gb3Bj
b2RlLnZhbHVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHRoaXNbb3Bjb2RlLm9wY29k
ZV0uYXBwbHkodGhpcywgb3Bjb2RlLmFyZ3MpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAg
IHJldHVybiB0aGlzLmNyZWF0ZUZ1bmN0aW9uQ29udGV4dChhc09iamVjdCk7Ci0gICAgfSwKLQot
ICAgIG5leHRPcGNvZGU6IGZ1bmN0aW9uKCkgewotICAgICAgdmFyIG9wY29kZXMgPSB0aGlzLmVu
dmlyb25tZW50Lm9wY29kZXM7Ci0gICAgICByZXR1cm4gb3Bjb2Rlc1t0aGlzLmkgKyAxXTsKLSAg
ICB9LAotCi0gICAgZWF0OiBmdW5jdGlvbigpIHsKLSAgICAgIHRoaXMuaSA9IHRoaXMuaSArIDE7
Ci0gICAgfSwKLQotICAgIHByZWFtYmxlOiBmdW5jdGlvbigpIHsKLSAgICAgIHZhciBvdXQgPSBb
XTsKLQotICAgICAgaWYgKCF0aGlzLmlzQ2hpbGQpIHsKLSAgICAgICAgdmFyIG5hbWVzcGFjZSA9
IHRoaXMubmFtZXNwYWNlOwotICAgICAgICB2YXIgY29waWVzID0gImhlbHBlcnMgPSBoZWxwZXJz
IHx8ICIgKyBuYW1lc3BhY2UgKyAiLmhlbHBlcnM7IjsKLSAgICAgICAgaWYgKHRoaXMuZW52aXJv
bm1lbnQudXNlUGFydGlhbCkgeyBjb3BpZXMgPSBjb3BpZXMgKyAiIHBhcnRpYWxzID0gcGFydGlh
bHMgfHwgIiArIG5hbWVzcGFjZSArICIucGFydGlhbHM7IjsgfQotICAgICAgICBpZiAodGhpcy5v
cHRpb25zLmRhdGEpIHsgY29waWVzID0gY29waWVzICsgIiBkYXRhID0gZGF0YSB8fCB7fTsiOyB9
Ci0gICAgICAgIG91dC5wdXNoKGNvcGllcyk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBvdXQu
cHVzaCgnJyk7Ci0gICAgICB9Ci0KLSAgICAgIGlmICghdGhpcy5lbnZpcm9ubWVudC5pc1NpbXBs
ZSkgewotICAgICAgICBvdXQucHVzaCgiLCBidWZmZXIgPSAiICsgdGhpcy5pbml0aWFsaXplQnVm
ZmVyKCkpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgb3V0LnB1c2goIiIpOwotICAgICAgfQot
Ci0gICAgICAvLyB0cmFjayB0aGUgbGFzdCBjb250ZXh0IHB1c2hlZCBpbnRvIHBsYWNlIHRvIGFs
bG93IHNraXBwaW5nIHRoZQotICAgICAgLy8gZ2V0Q29udGV4dCBvcGNvZGUgd2hlbiBpdCB3b3Vs
ZCBiZSBhIG5vb3AKLSAgICAgIHRoaXMubGFzdENvbnRleHQgPSAwOwotICAgICAgdGhpcy5zb3Vy
Y2UgPSBvdXQ7Ci0gICAgfSwKLQotICAgIGNyZWF0ZUZ1bmN0aW9uQ29udGV4dDogZnVuY3Rpb24o
YXNPYmplY3QpIHsKLSAgICAgIHZhciBsb2NhbHMgPSB0aGlzLnN0YWNrVmFycy5jb25jYXQodGhp
cy5yZWdpc3RlcnMubGlzdCk7Ci0KLSAgICAgIGlmKGxvY2Fscy5sZW5ndGggPiAwKSB7Ci0gICAg
ICAgIHRoaXMuc291cmNlWzFdID0gdGhpcy5zb3VyY2VbMV0gKyAiLCAiICsgbG9jYWxzLmpvaW4o
IiwgIik7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEdlbmVyYXRlIG1pbmltaXplciBhbGlhcyBtYXBw
aW5ncwotICAgICAgaWYgKCF0aGlzLmlzQ2hpbGQpIHsKLSAgICAgICAgZm9yICh2YXIgYWxpYXMg
aW4gdGhpcy5jb250ZXh0LmFsaWFzZXMpIHsKLSAgICAgICAgICB0aGlzLnNvdXJjZVsxXSA9IHRo
aXMuc291cmNlWzFdICsgJywgJyArIGFsaWFzICsgJz0nICsgdGhpcy5jb250ZXh0LmFsaWFzZXNb
YWxpYXNdOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmICh0aGlzLnNvdXJjZVsxXSkg
ewotICAgICAgICB0aGlzLnNvdXJjZVsxXSA9ICJ2YXIgIiArIHRoaXMuc291cmNlWzFdLnN1YnN0
cmluZygyKSArICI7IjsKLSAgICAgIH0KLQotICAgICAgLy8gTWVyZ2UgY2hpbGRyZW4KLSAgICAg
IGlmICghdGhpcy5pc0NoaWxkKSB7Ci0gICAgICAgIHRoaXMuc291cmNlWzFdICs9ICdcbicgKyB0
aGlzLmNvbnRleHQucHJvZ3JhbXMuam9pbignXG4nKSArICdcbic7Ci0gICAgICB9Ci0KLSAgICAg
IGlmICghdGhpcy5lbnZpcm9ubWVudC5pc1NpbXBsZSkgewotICAgICAgICB0aGlzLnNvdXJjZS5w
dXNoKCJyZXR1cm4gYnVmZmVyOyIpOwotICAgICAgfQotCi0gICAgICB2YXIgcGFyYW1zID0gdGhp
cy5pc0NoaWxkID8gWyJkZXB0aDAiLCAiZGF0YSJdIDogWyJIYW5kbGViYXJzIiwgImRlcHRoMCIs
ICJoZWxwZXJzIiwgInBhcnRpYWxzIiwgImRhdGEiXTsKLQotICAgICAgZm9yKHZhciBpPTAsIGw9
dGhpcy5lbnZpcm9ubWVudC5kZXB0aHMubGlzdC5sZW5ndGg7IGk8bDsgaSsrKSB7Ci0gICAgICAg
IHBhcmFtcy5wdXNoKCJkZXB0aCIgKyB0aGlzLmVudmlyb25tZW50LmRlcHRocy5saXN0W2ldKTsK
LSAgICAgIH0KLQotICAgICAgLy8gUGVyZm9ybSBhIHNlY29uZCBwYXNzIG92ZXIgdGhlIG91dHB1
dCB0byBtZXJnZSBjb250ZW50IHdoZW4gcG9zc2libGUKLSAgICAgIHZhciBzb3VyY2UgPSB0aGlz
Lm1lcmdlU291cmNlKCk7Ci0KLSAgICAgIGlmICghdGhpcy5pc0NoaWxkKSB7Ci0gICAgICAgIHZh
ciByZXZpc2lvbiA9IEhhbmRsZWJhcnMuQ09NUElMRVJfUkVWSVNJT04sCi0gICAgICAgICAgICB2
ZXJzaW9ucyA9IEhhbmRsZWJhcnMuUkVWSVNJT05fQ0hBTkdFU1tyZXZpc2lvbl07Ci0gICAgICAg
IHNvdXJjZSA9ICJ0aGlzLmNvbXBpbGVySW5mbyA9IFsiK3JldmlzaW9uKyIsJyIrdmVyc2lvbnMr
IiddO1xuIitzb3VyY2U7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChhc09iamVjdCkgewotICAgICAg
ICBwYXJhbXMucHVzaChzb3VyY2UpOwotCi0gICAgICAgIHJldHVybiBGdW5jdGlvbi5hcHBseSh0
aGlzLCBwYXJhbXMpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgdmFyIGZ1bmN0aW9uU291cmNl
ID0gJ2Z1bmN0aW9uICcgKyAodGhpcy5uYW1lIHx8ICcnKSArICcoJyArIHBhcmFtcy5qb2luKCcs
JykgKyAnKSB7XG4gICcgKyBzb3VyY2UgKyAnfSc7Ci0gICAgICAgIEhhbmRsZWJhcnMubG9nKEhh
bmRsZWJhcnMubG9nZ2VyLkRFQlVHLCBmdW5jdGlvblNvdXJjZSArICJcblxuIik7Ci0gICAgICAg
IHJldHVybiBmdW5jdGlvblNvdXJjZTsKLSAgICAgIH0KLSAgICB9LAotICAgIG1lcmdlU291cmNl
OiBmdW5jdGlvbigpIHsKLSAgICAgIC8vIFdBUk46IFdlIGFyZSBub3QgaGFuZGxpbmcgdGhlIGNh
c2Ugd2hlcmUgYnVmZmVyIGlzIHN0aWxsIHBvcHVsYXRlZCBhcyB0aGUgc291cmNlIHNob3VsZAot
ICAgICAgLy8gbm90IGhhdmUgYnVmZmVyIGFwcGVuZCBvcGVyYXRpb25zIGFzIHRoZWlyIGZpbmFs
IGFjdGlvbi4KLSAgICAgIHZhciBzb3VyY2UgPSAnJywKLSAgICAgICAgICBidWZmZXI7Ci0gICAg
ICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5zb3VyY2UubGVuZ3RoOyBpIDwgbGVuOyBpKysp
IHsKLSAgICAgICAgdmFyIGxpbmUgPSB0aGlzLnNvdXJjZVtpXTsKLSAgICAgICAgaWYgKGxpbmUu
YXBwZW5kVG9CdWZmZXIpIHsKLSAgICAgICAgICBpZiAoYnVmZmVyKSB7Ci0gICAgICAgICAgICBi
dWZmZXIgPSBidWZmZXIgKyAnXG4gICAgKyAnICsgbGluZS5jb250ZW50OwotICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBidWZmZXIgPSBsaW5lLmNvbnRlbnQ7Ci0gICAgICAgICAgfQot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGlmIChidWZmZXIpIHsKLSAgICAgICAgICAgIHNv
dXJjZSArPSAnYnVmZmVyICs9ICcgKyBidWZmZXIgKyAnO1xuICAnOwotICAgICAgICAgICAgYnVm
ZmVyID0gdW5kZWZpbmVkOwotICAgICAgICAgIH0KLSAgICAgICAgICBzb3VyY2UgKz0gbGluZSAr
ICdcbiAgJzsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0dXJuIHNvdXJjZTsKLSAgICB9
LAotCi0gICAgLy8gW2Jsb2NrVmFsdWVdCi0gICAgLy8KLSAgICAvLyBPbiBzdGFjaywgYmVmb3Jl
OiBoYXNoLCBpbnZlcnNlLCBwcm9ncmFtLCB2YWx1ZQotICAgIC8vIE9uIHN0YWNrLCBhZnRlcjog
cmV0dXJuIHZhbHVlIG9mIGJsb2NrSGVscGVyTWlzc2luZwotICAgIC8vCi0gICAgLy8gVGhlIHB1
cnBvc2Ugb2YgdGhpcyBvcGNvZGUgaXMgdG8gdGFrZSBhIGJsb2NrIG9mIHRoZSBmb3JtCi0gICAg
Ly8gYHt7I2Zvb319Li4ue3svZm9vfX1gLCByZXNvbHZlIHRoZSB2YWx1ZSBvZiBgZm9vYCwgYW5k
Ci0gICAgLy8gcmVwbGFjZSBpdCBvbiB0aGUgc3RhY2sgd2l0aCB0aGUgcmVzdWx0IG9mIHByb3Bl
cmx5Ci0gICAgLy8gaW52b2tpbmcgYmxvY2tIZWxwZXJNaXNzaW5nLgotICAgIGJsb2NrVmFsdWU6
IGZ1bmN0aW9uKCkgewotICAgICAgdGhpcy5jb250ZXh0LmFsaWFzZXMuYmxvY2tIZWxwZXJNaXNz
aW5nID0gJ2hlbHBlcnMuYmxvY2tIZWxwZXJNaXNzaW5nJzsKLQotICAgICAgdmFyIHBhcmFtcyA9
IFsiZGVwdGgwIl07Ci0gICAgICB0aGlzLnNldHVwUGFyYW1zKDAsIHBhcmFtcyk7Ci0KLSAgICAg
IHRoaXMucmVwbGFjZVN0YWNrKGZ1bmN0aW9uKGN1cnJlbnQpIHsKLSAgICAgICAgcGFyYW1zLnNw
bGljZSgxLCAwLCBjdXJyZW50KTsKLSAgICAgICAgcmV0dXJuICJibG9ja0hlbHBlck1pc3Npbmcu
Y2FsbCgiICsgcGFyYW1zLmpvaW4oIiwgIikgKyAiKSI7Ci0gICAgICB9KTsKLSAgICB9LAotCi0g
ICAgLy8gW2FtYmlndW91c0Jsb2NrVmFsdWVdCi0gICAgLy8KLSAgICAvLyBPbiBzdGFjaywgYmVm
b3JlOiBoYXNoLCBpbnZlcnNlLCBwcm9ncmFtLCB2YWx1ZQotICAgIC8vIENvbXBpbGVyIHZhbHVl
LCBiZWZvcmU6IGxhc3RIZWxwZXI9dmFsdWUgb2YgbGFzdCBmb3VuZCBoZWxwZXIsIGlmIGFueQot
ICAgIC8vIE9uIHN0YWNrLCBhZnRlciwgaWYgbm8gbGFzdEhlbHBlcjogc2FtZSBhcyBbYmxvY2tW
YWx1ZV0KLSAgICAvLyBPbiBzdGFjaywgYWZ0ZXIsIGlmIGxhc3RIZWxwZXI6IHZhbHVlCi0gICAg
YW1iaWd1b3VzQmxvY2tWYWx1ZTogZnVuY3Rpb24oKSB7Ci0gICAgICB0aGlzLmNvbnRleHQuYWxp
YXNlcy5ibG9ja0hlbHBlck1pc3NpbmcgPSAnaGVscGVycy5ibG9ja0hlbHBlck1pc3NpbmcnOwot
Ci0gICAgICB2YXIgcGFyYW1zID0gWyJkZXB0aDAiXTsKLSAgICAgIHRoaXMuc2V0dXBQYXJhbXMo
MCwgcGFyYW1zKTsKLQotICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzLnRvcFN0YWNrKCk7Ci0gICAg
ICBwYXJhbXMuc3BsaWNlKDEsIDAsIGN1cnJlbnQpOwotCi0gICAgICAvLyBVc2UgdGhlIG9wdGlv
bnMgdmFsdWUgZ2VuZXJhdGVkIGZyb20gdGhlIGludm9jYXRpb24KLSAgICAgIHBhcmFtc1twYXJh
bXMubGVuZ3RoLTFdID0gJ29wdGlvbnMnOwotCi0gICAgICB0aGlzLnNvdXJjZS5wdXNoKCJpZiAo
ISIgKyB0aGlzLmxhc3RIZWxwZXIgKyAiKSB7ICIgKyBjdXJyZW50ICsgIiA9IGJsb2NrSGVscGVy
TWlzc2luZy5jYWxsKCIgKyBwYXJhbXMuam9pbigiLCAiKSArICIpOyB9Iik7Ci0gICAgfSwKLQot
ICAgIC8vIFthcHBlbmRDb250ZW50XQotICAgIC8vCi0gICAgLy8gT24gc3RhY2ssIGJlZm9yZTog
Li4uCi0gICAgLy8gT24gc3RhY2ssIGFmdGVyOiAuLi4KLSAgICAvLwotICAgIC8vIEFwcGVuZHMg
dGhlIHN0cmluZyB2YWx1ZSBvZiBgY29udGVudGAgdG8gdGhlIGN1cnJlbnQgYnVmZmVyCi0gICAg
YXBwZW5kQ29udGVudDogZnVuY3Rpb24oY29udGVudCkgewotICAgICAgdGhpcy5zb3VyY2UucHVz
aCh0aGlzLmFwcGVuZFRvQnVmZmVyKHRoaXMucXVvdGVkU3RyaW5nKGNvbnRlbnQpKSk7Ci0gICAg
fSwKLQotICAgIC8vIFthcHBlbmRdCi0gICAgLy8KLSAgICAvLyBPbiBzdGFjaywgYmVmb3JlOiB2
YWx1ZSwgLi4uCi0gICAgLy8gT24gc3RhY2ssIGFmdGVyOiAuLi4KLSAgICAvLwotICAgIC8vIENv
ZXJjZXMgYHZhbHVlYCB0byBhIFN0cmluZyBhbmQgYXBwZW5kcyBpdCB0byB0aGUgY3VycmVudCBi
dWZmZXIuCi0gICAgLy8KLSAgICAvLyBJZiBgdmFsdWVgIGlzIHRydXRoeSwgb3IgMCwgaXQgaXMg
Y29lcmNlZCBpbnRvIGEgc3RyaW5nIGFuZCBhcHBlbmRlZAotICAgIC8vIE90aGVyd2lzZSwgdGhl
IGVtcHR5IHN0cmluZyBpcyBhcHBlbmRlZAotICAgIGFwcGVuZDogZnVuY3Rpb24oKSB7Ci0gICAg
ICAvLyBGb3JjZSBhbnl0aGluZyB0aGF0IGlzIGlubGluZWQgb250byB0aGUgc3RhY2sgc28gd2Ug
ZG9uJ3QgaGF2ZSBkdXBsaWNhdGlvbgotICAgICAgLy8gd2hlbiB3ZSBleGFtaW5lIGxvY2FsCi0g
ICAgICB0aGlzLmZsdXNoSW5saW5lKCk7Ci0gICAgICB2YXIgbG9jYWwgPSB0aGlzLnBvcFN0YWNr
KCk7Ci0gICAgICB0aGlzLnNvdXJjZS5wdXNoKCJpZigiICsgbG9jYWwgKyAiIHx8ICIgKyBsb2Nh
bCArICIgPT09IDApIHsgIiArIHRoaXMuYXBwZW5kVG9CdWZmZXIobG9jYWwpICsgIiB9Iik7Ci0g
ICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5pc1NpbXBsZSkgewotICAgICAgICB0aGlzLnNvdXJj
ZS5wdXNoKCJlbHNlIHsgIiArIHRoaXMuYXBwZW5kVG9CdWZmZXIoIicnIikgKyAiIH0iKTsKLSAg
ICAgIH0KLSAgICB9LAotCi0gICAgLy8gW2FwcGVuZEVzY2FwZWRdCi0gICAgLy8KLSAgICAvLyBP
biBzdGFjaywgYmVmb3JlOiB2YWx1ZSwgLi4uCi0gICAgLy8gT24gc3RhY2ssIGFmdGVyOiAuLi4K
LSAgICAvLwotICAgIC8vIEVzY2FwZSBgdmFsdWVgIGFuZCBhcHBlbmQgaXQgdG8gdGhlIGJ1ZmZl
cgotICAgIGFwcGVuZEVzY2FwZWQ6IGZ1bmN0aW9uKCkgewotICAgICAgdGhpcy5jb250ZXh0LmFs
aWFzZXMuZXNjYXBlRXhwcmVzc2lvbiA9ICd0aGlzLmVzY2FwZUV4cHJlc3Npb24nOwotCi0gICAg
ICB0aGlzLnNvdXJjZS5wdXNoKHRoaXMuYXBwZW5kVG9CdWZmZXIoImVzY2FwZUV4cHJlc3Npb24o
IiArIHRoaXMucG9wU3RhY2soKSArICIpIikpOwotICAgIH0sCi0KLSAgICAvLyBbZ2V0Q29udGV4
dF0KLSAgICAvLwotICAgIC8vIE9uIHN0YWNrLCBiZWZvcmU6IC4uLgotICAgIC8vIE9uIHN0YWNr
LCBhZnRlcjogLi4uCi0gICAgLy8gQ29tcGlsZXIgdmFsdWUsIGFmdGVyOiBsYXN0Q29udGV4dD1k
ZXB0aAotICAgIC8vCi0gICAgLy8gU2V0IHRoZSB2YWx1ZSBvZiB0aGUgYGxhc3RDb250ZXh0YCBj
b21waWxlciB2YWx1ZSB0byB0aGUgZGVwdGgKLSAgICBnZXRDb250ZXh0OiBmdW5jdGlvbihkZXB0
aCkgewotICAgICAgaWYodGhpcy5sYXN0Q29udGV4dCAhPT0gZGVwdGgpIHsKLSAgICAgICAgdGhp
cy5sYXN0Q29udGV4dCA9IGRlcHRoOwotICAgICAgfQotICAgIH0sCi0KLSAgICAvLyBbbG9va3Vw
T25Db250ZXh0XQotICAgIC8vCi0gICAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uCi0gICAgLy8g
T24gc3RhY2ssIGFmdGVyOiBjdXJyZW50Q29udGV4dFtuYW1lXSwgLi4uCi0gICAgLy8KLSAgICAv
LyBMb29rcyB1cCB0aGUgdmFsdWUgb2YgYG5hbWVgIG9uIHRoZSBjdXJyZW50IGNvbnRleHQgYW5k
IHB1c2hlcwotICAgIC8vIGl0IG9udG8gdGhlIHN0YWNrLgotICAgIGxvb2t1cE9uQ29udGV4dDog
ZnVuY3Rpb24obmFtZSkgewotICAgICAgdGhpcy5wdXNoKHRoaXMubmFtZUxvb2t1cCgnZGVwdGgn
ICsgdGhpcy5sYXN0Q29udGV4dCwgbmFtZSwgJ2NvbnRleHQnKSk7Ci0gICAgfSwKLQotICAgIC8v
IFtwdXNoQ29udGV4dF0KLSAgICAvLwotICAgIC8vIE9uIHN0YWNrLCBiZWZvcmU6IC4uLgotICAg
IC8vIE9uIHN0YWNrLCBhZnRlcjogY3VycmVudENvbnRleHQsIC4uLgotICAgIC8vCi0gICAgLy8g
UHVzaGVzIHRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCBjb250ZXh0IG9udG8gdGhlIHN0YWNrLgot
ICAgIHB1c2hDb250ZXh0OiBmdW5jdGlvbigpIHsKLSAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJh
bCgnZGVwdGgnICsgdGhpcy5sYXN0Q29udGV4dCk7Ci0gICAgfSwKLQotICAgIC8vIFtyZXNvbHZl
UG9zc2libGVMYW1iZGFdCi0gICAgLy8KLSAgICAvLyBPbiBzdGFjaywgYmVmb3JlOiB2YWx1ZSwg
Li4uCi0gICAgLy8gT24gc3RhY2ssIGFmdGVyOiByZXNvbHZlZCB2YWx1ZSwgLi4uCi0gICAgLy8K
LSAgICAvLyBJZiB0aGUgYHZhbHVlYCBpcyBhIGxhbWJkYSwgcmVwbGFjZSBpdCBvbiB0aGUgc3Rh
Y2sgYnkKLSAgICAvLyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBsYW1iZGEKLSAgICByZXNvbHZl
UG9zc2libGVMYW1iZGE6IGZ1bmN0aW9uKCkgewotICAgICAgdGhpcy5jb250ZXh0LmFsaWFzZXMu
ZnVuY3Rpb25UeXBlID0gJyJmdW5jdGlvbiInOwotCi0gICAgICB0aGlzLnJlcGxhY2VTdGFjayhm
dW5jdGlvbihjdXJyZW50KSB7Ci0gICAgICAgIHJldHVybiAidHlwZW9mICIgKyBjdXJyZW50ICsg
IiA9PT0gZnVuY3Rpb25UeXBlID8gIiArIGN1cnJlbnQgKyAiLmFwcGx5KGRlcHRoMCkgOiAiICsg
Y3VycmVudDsKLSAgICAgIH0pOwotICAgIH0sCi0KLSAgICAvLyBbbG9va3VwXQotICAgIC8vCi0g
ICAgLy8gT24gc3RhY2ssIGJlZm9yZTogdmFsdWUsIC4uLgotICAgIC8vIE9uIHN0YWNrLCBhZnRl
cjogdmFsdWVbbmFtZV0sIC4uLgotICAgIC8vCi0gICAgLy8gUmVwbGFjZSB0aGUgdmFsdWUgb24g
dGhlIHN0YWNrIHdpdGggdGhlIHJlc3VsdCBvZiBsb29raW5nCi0gICAgLy8gdXAgYG5hbWVgIG9u
IGB2YWx1ZWAKLSAgICBsb29rdXA6IGZ1bmN0aW9uKG5hbWUpIHsKLSAgICAgIHRoaXMucmVwbGFj
ZVN0YWNrKGZ1bmN0aW9uKGN1cnJlbnQpIHsKLSAgICAgICAgcmV0dXJuIGN1cnJlbnQgKyAiID09
IG51bGwgfHwgIiArIGN1cnJlbnQgKyAiID09PSBmYWxzZSA/ICIgKyBjdXJyZW50ICsgIiA6ICIg
KyB0aGlzLm5hbWVMb29rdXAoY3VycmVudCwgbmFtZSwgJ2NvbnRleHQnKTsKLSAgICAgIH0pOwot
ICAgIH0sCi0KLSAgICAvLyBbbG9va3VwRGF0YV0KLSAgICAvLwotICAgIC8vIE9uIHN0YWNrLCBi
ZWZvcmU6IC4uLgotICAgIC8vIE9uIHN0YWNrLCBhZnRlcjogZGF0YVtpZF0sIC4uLgotICAgIC8v
Ci0gICAgLy8gUHVzaCB0aGUgcmVzdWx0IG9mIGxvb2tpbmcgdXAgYGlkYCBvbiB0aGUgY3VycmVu
dCBkYXRhCi0gICAgbG9va3VwRGF0YTogZnVuY3Rpb24oaWQpIHsKLSAgICAgIHRoaXMucHVzaCh0
aGlzLm5hbWVMb29rdXAoJ2RhdGEnLCBpZCwgJ2RhdGEnKSk7Ci0gICAgfSwKLQotICAgIC8vIFtw
dXNoU3RyaW5nUGFyYW1dCi0gICAgLy8KLSAgICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi4KLSAg
ICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHN0cmluZywgY3VycmVudENvbnRleHQsIC4uLgotICAgIC8v
Ci0gICAgLy8gVGhpcyBvcGNvZGUgaXMgZGVzaWduZWQgZm9yIHVzZSBpbiBzdHJpbmcgbW9kZSwg
d2hpY2gKLSAgICAvLyBwcm92aWRlcyB0aGUgc3RyaW5nIHZhbHVlIG9mIGEgcGFyYW1ldGVyIGFs
b25nIHdpdGggaXRzCi0gICAgLy8gZGVwdGggcmF0aGVyIHRoYW4gcmVzb2x2aW5nIGl0IGltbWVk
aWF0ZWx5LgotICAgIHB1c2hTdHJpbmdQYXJhbTogZnVuY3Rpb24oc3RyaW5nLCB0eXBlKSB7Ci0g
ICAgICB0aGlzLnB1c2hTdGFja0xpdGVyYWwoJ2RlcHRoJyArIHRoaXMubGFzdENvbnRleHQpOwot
Ci0gICAgICB0aGlzLnB1c2hTdHJpbmcodHlwZSk7Ci0KLSAgICAgIGlmICh0eXBlb2Ygc3RyaW5n
ID09PSAnc3RyaW5nJykgewotICAgICAgICB0aGlzLnB1c2hTdHJpbmcoc3RyaW5nKTsKLSAgICAg
IH0gZWxzZSB7Ci0gICAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbChzdHJpbmcpOwotICAgICAg
fQotICAgIH0sCi0KLSAgICBlbXB0eUhhc2g6IGZ1bmN0aW9uKCkgewotICAgICAgdGhpcy5wdXNo
U3RhY2tMaXRlcmFsKCd7fScpOwotCi0gICAgICBpZiAodGhpcy5vcHRpb25zLnN0cmluZ1BhcmFt
cykgewotICAgICAgICB0aGlzLnJlZ2lzdGVyKCdoYXNoVHlwZXMnLCAne30nKTsKLSAgICAgIH0K
LSAgICB9LAotICAgIHB1c2hIYXNoOiBmdW5jdGlvbigpIHsKLSAgICAgIHRoaXMuaGFzaCA9IHt2
YWx1ZXM6IFtdLCB0eXBlczogW119OwotICAgIH0sCi0gICAgcG9wSGFzaDogZnVuY3Rpb24oKSB7
Ci0gICAgICB2YXIgaGFzaCA9IHRoaXMuaGFzaDsKLSAgICAgIHRoaXMuaGFzaCA9IHVuZGVmaW5l
ZDsKLQotICAgICAgaWYgKHRoaXMub3B0aW9ucy5zdHJpbmdQYXJhbXMpIHsKLSAgICAgICAgdGhp
cy5yZWdpc3RlcignaGFzaFR5cGVzJywgJ3snICsgaGFzaC50eXBlcy5qb2luKCcsJykgKyAnfScp
OwotICAgICAgfQotICAgICAgdGhpcy5wdXNoKCd7XG4gICAgJyArIGhhc2gudmFsdWVzLmpvaW4o
JyxcbiAgICAnKSArICdcbiAgfScpOwotICAgIH0sCi0KLSAgICAvLyBbcHVzaFN0cmluZ10KLSAg
ICAvLwotICAgIC8vIE9uIHN0YWNrLCBiZWZvcmU6IC4uLgotICAgIC8vIE9uIHN0YWNrLCBhZnRl
cjogcXVvdGVkU3RyaW5nKHN0cmluZyksIC4uLgotICAgIC8vCi0gICAgLy8gUHVzaCBhIHF1b3Rl
ZCB2ZXJzaW9uIG9mIGBzdHJpbmdgIG9udG8gdGhlIHN0YWNrCi0gICAgcHVzaFN0cmluZzogZnVu
Y3Rpb24oc3RyaW5nKSB7Ci0gICAgICB0aGlzLnB1c2hTdGFja0xpdGVyYWwodGhpcy5xdW90ZWRT
dHJpbmcoc3RyaW5nKSk7Ci0gICAgfSwKLQotICAgIC8vIFtwdXNoXQotICAgIC8vCi0gICAgLy8g
T24gc3RhY2ssIGJlZm9yZTogLi4uCi0gICAgLy8gT24gc3RhY2ssIGFmdGVyOiBleHByLCAuLi4K
LSAgICAvLwotICAgIC8vIFB1c2ggYW4gZXhwcmVzc2lvbiBvbnRvIHRoZSBzdGFjawotICAgIHB1
c2g6IGZ1bmN0aW9uKGV4cHIpIHsKLSAgICAgIHRoaXMuaW5saW5lU3RhY2sucHVzaChleHByKTsK
LSAgICAgIHJldHVybiBleHByOwotICAgIH0sCi0KLSAgICAvLyBbcHVzaExpdGVyYWxdCi0gICAg
Ly8KLSAgICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi4KLSAgICAvLyBPbiBzdGFjaywgYWZ0ZXI6
IHZhbHVlLCAuLi4KLSAgICAvLwotICAgIC8vIFB1c2hlcyBhIHZhbHVlIG9udG8gdGhlIHN0YWNr
LiBUaGlzIG9wZXJhdGlvbiBwcmV2ZW50cwotICAgIC8vIHRoZSBjb21waWxlciBmcm9tIGNyZWF0
aW5nIGEgdGVtcG9yYXJ5IHZhcmlhYmxlIHRvIGhvbGQKLSAgICAvLyBpdC4KLSAgICBwdXNoTGl0
ZXJhbDogZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbCh2YWx1
ZSk7Ci0gICAgfSwKLQotICAgIC8vIFtwdXNoUHJvZ3JhbV0KLSAgICAvLwotICAgIC8vIE9uIHN0
YWNrLCBiZWZvcmU6IC4uLgotICAgIC8vIE9uIHN0YWNrLCBhZnRlcjogcHJvZ3JhbShndWlkKSwg
Li4uCi0gICAgLy8KLSAgICAvLyBQdXNoIGEgcHJvZ3JhbSBleHByZXNzaW9uIG9udG8gdGhlIHN0
YWNrLiBUaGlzIHRha2VzCi0gICAgLy8gYSBjb21waWxlLXRpbWUgZ3VpZCBhbmQgY29udmVydHMg
aXQgaW50byBhIHJ1bnRpbWUtYWNjZXNzaWJsZQotICAgIC8vIGV4cHJlc3Npb24uCi0gICAgcHVz
aFByb2dyYW06IGZ1bmN0aW9uKGd1aWQpIHsKLSAgICAgIGlmIChndWlkICE9IG51bGwpIHsKLSAg
ICAgICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKHRoaXMucHJvZ3JhbUV4cHJlc3Npb24oZ3VpZCkp
OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKG51bGwpOwot
ICAgICAgfQotICAgIH0sCi0KLSAgICAvLyBbaW52b2tlSGVscGVyXQotICAgIC8vCi0gICAgLy8g
T24gc3RhY2ssIGJlZm9yZTogaGFzaCwgaW52ZXJzZSwgcHJvZ3JhbSwgcGFyYW1zLi4uLCAuLi4K
LSAgICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHJlc3VsdCBvZiBoZWxwZXIgaW52b2NhdGlvbgotICAg
IC8vCi0gICAgLy8gUG9wcyBvZmYgdGhlIGhlbHBlcidzIHBhcmFtZXRlcnMsIGludm9rZXMgdGhl
IGhlbHBlciwKLSAgICAvLyBhbmQgcHVzaGVzIHRoZSBoZWxwZXIncyByZXR1cm4gdmFsdWUgb250
byB0aGUgc3RhY2suCi0gICAgLy8KLSAgICAvLyBJZiB0aGUgaGVscGVyIGlzIG5vdCBmb3VuZCwg
YGhlbHBlck1pc3NpbmdgIGlzIGNhbGxlZC4KLSAgICBpbnZva2VIZWxwZXI6IGZ1bmN0aW9uKHBh
cmFtU2l6ZSwgbmFtZSkgewotICAgICAgdGhpcy5jb250ZXh0LmFsaWFzZXMuaGVscGVyTWlzc2lu
ZyA9ICdoZWxwZXJzLmhlbHBlck1pc3NpbmcnOwotCi0gICAgICB2YXIgaGVscGVyID0gdGhpcy5s
YXN0SGVscGVyID0gdGhpcy5zZXR1cEhlbHBlcihwYXJhbVNpemUsIG5hbWUsIHRydWUpOwotCi0g
ICAgICB0aGlzLnB1c2goaGVscGVyLm5hbWUpOwotICAgICAgdGhpcy5yZXBsYWNlU3RhY2soZnVu
Y3Rpb24obmFtZSkgewotICAgICAgICByZXR1cm4gbmFtZSArICcgPyAnICsgbmFtZSArICcuY2Fs
bCgnICsKLSAgICAgICAgICAgIGhlbHBlci5jYWxsUGFyYW1zICsgIikgIiArICI6IGhlbHBlck1p
c3NpbmcuY2FsbCgiICsKLSAgICAgICAgICAgIGhlbHBlci5oZWxwZXJNaXNzaW5nUGFyYW1zICsg
IikiOwotICAgICAgfSk7Ci0gICAgfSwKLQotICAgIC8vIFtpbnZva2VLbm93bkhlbHBlcl0KLSAg
ICAvLwotICAgIC8vIE9uIHN0YWNrLCBiZWZvcmU6IGhhc2gsIGludmVyc2UsIHByb2dyYW0sIHBh
cmFtcy4uLiwgLi4uCi0gICAgLy8gT24gc3RhY2ssIGFmdGVyOiByZXN1bHQgb2YgaGVscGVyIGlu
dm9jYXRpb24KLSAgICAvLwotICAgIC8vIFRoaXMgb3BlcmF0aW9uIGlzIHVzZWQgd2hlbiB0aGUg
aGVscGVyIGlzIGtub3duIHRvIGV4aXN0LAotICAgIC8vIHNvIGEgYGhlbHBlck1pc3NpbmdgIGZh
bGxiYWNrIGlzIG5vdCByZXF1aXJlZC4KLSAgICBpbnZva2VLbm93bkhlbHBlcjogZnVuY3Rpb24o
cGFyYW1TaXplLCBuYW1lKSB7Ci0gICAgICB2YXIgaGVscGVyID0gdGhpcy5zZXR1cEhlbHBlcihw
YXJhbVNpemUsIG5hbWUpOwotICAgICAgdGhpcy5wdXNoKGhlbHBlci5uYW1lICsgIi5jYWxsKCIg
KyBoZWxwZXIuY2FsbFBhcmFtcyArICIpIik7Ci0gICAgfSwKLQotICAgIC8vIFtpbnZva2VBbWJp
Z3VvdXNdCi0gICAgLy8KLSAgICAvLyBPbiBzdGFjaywgYmVmb3JlOiBoYXNoLCBpbnZlcnNlLCBw
cm9ncmFtLCBwYXJhbXMuLi4sIC4uLgotICAgIC8vIE9uIHN0YWNrLCBhZnRlcjogcmVzdWx0IG9m
IGRpc2FtYmlndWF0aW9uCi0gICAgLy8KLSAgICAvLyBUaGlzIG9wZXJhdGlvbiBpcyB1c2VkIHdo
ZW4gYW4gZXhwcmVzc2lvbiBsaWtlIGB7e2Zvb319YAotICAgIC8vIGlzIHByb3ZpZGVkLCBidXQg
d2UgZG9uJ3Qga25vdyBhdCBjb21waWxlLXRpbWUgd2hldGhlciBpdAotICAgIC8vIGlzIGEgaGVs
cGVyIG9yIGEgcGF0aC4KLSAgICAvLwotICAgIC8vIFRoaXMgb3BlcmF0aW9uIGVtaXRzIG1vcmUg
Y29kZSB0aGFuIHRoZSBvdGhlciBvcHRpb25zLAotICAgIC8vIGFuZCBjYW4gYmUgYXZvaWRlZCBi
eSBwYXNzaW5nIHRoZSBga25vd25IZWxwZXJzYCBhbmQKLSAgICAvLyBga25vd25IZWxwZXJzT25s
eWAgZmxhZ3MgYXQgY29tcGlsZS10aW1lLgotICAgIGludm9rZUFtYmlndW91czogZnVuY3Rpb24o
bmFtZSwgaGVscGVyQ2FsbCkgewotICAgICAgdGhpcy5jb250ZXh0LmFsaWFzZXMuZnVuY3Rpb25U
eXBlID0gJyJmdW5jdGlvbiInOwotCi0gICAgICB0aGlzLnB1c2hTdGFja0xpdGVyYWwoJ3t9Jyk7
ICAgIC8vIEhhc2ggdmFsdWUKLSAgICAgIHZhciBoZWxwZXIgPSB0aGlzLnNldHVwSGVscGVyKDAs
IG5hbWUsIGhlbHBlckNhbGwpOwotCi0gICAgICB2YXIgaGVscGVyTmFtZSA9IHRoaXMubGFzdEhl
bHBlciA9IHRoaXMubmFtZUxvb2t1cCgnaGVscGVycycsIG5hbWUsICdoZWxwZXInKTsKLQotICAg
ICAgdmFyIG5vbkhlbHBlciA9IHRoaXMubmFtZUxvb2t1cCgnZGVwdGgnICsgdGhpcy5sYXN0Q29u
dGV4dCwgbmFtZSwgJ2NvbnRleHQnKTsKLSAgICAgIHZhciBuZXh0U3RhY2sgPSB0aGlzLm5leHRT
dGFjaygpOwotCi0gICAgICB0aGlzLnNvdXJjZS5wdXNoKCdpZiAoJyArIG5leHRTdGFjayArICcg
PSAnICsgaGVscGVyTmFtZSArICcpIHsgJyArIG5leHRTdGFjayArICcgPSAnICsgbmV4dFN0YWNr
ICsgJy5jYWxsKCcgKyBoZWxwZXIuY2FsbFBhcmFtcyArICcpOyB9Jyk7Ci0gICAgICB0aGlzLnNv
dXJjZS5wdXNoKCdlbHNlIHsgJyArIG5leHRTdGFjayArICcgPSAnICsgbm9uSGVscGVyICsgJzsg
JyArIG5leHRTdGFjayArICcgPSB0eXBlb2YgJyArIG5leHRTdGFjayArICcgPT09IGZ1bmN0aW9u
VHlwZSA/ICcgKyBuZXh0U3RhY2sgKyAnLmFwcGx5KGRlcHRoMCkgOiAnICsgbmV4dFN0YWNrICsg
JzsgfScpOwotICAgIH0sCi0KLSAgICAvLyBbaW52b2tlUGFydGlhbF0KLSAgICAvLwotICAgIC8v
IE9uIHN0YWNrLCBiZWZvcmU6IGNvbnRleHQsIC4uLgotICAgIC8vIE9uIHN0YWNrIGFmdGVyOiBy
ZXN1bHQgb2YgcGFydGlhbCBpbnZvY2F0aW9uCi0gICAgLy8KLSAgICAvLyBUaGlzIG9wZXJhdGlv
biBwb3BzIG9mZiBhIGNvbnRleHQsIGludm9rZXMgYSBwYXJ0aWFsIHdpdGggdGhhdCBjb250ZXh0
LAotICAgIC8vIGFuZCBwdXNoZXMgdGhlIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiBiYWNrLgot
ICAgIGludm9rZVBhcnRpYWw6IGZ1bmN0aW9uKG5hbWUpIHsKLSAgICAgIHZhciBwYXJhbXMgPSBb
dGhpcy5uYW1lTG9va3VwKCdwYXJ0aWFscycsIG5hbWUsICdwYXJ0aWFsJyksICInIiArIG5hbWUg
KyAiJyIsIHRoaXMucG9wU3RhY2soKSwgImhlbHBlcnMiLCAicGFydGlhbHMiXTsKLQotICAgICAg
aWYgKHRoaXMub3B0aW9ucy5kYXRhKSB7Ci0gICAgICAgIHBhcmFtcy5wdXNoKCJkYXRhIik7Ci0g
ICAgICB9Ci0KLSAgICAgIHRoaXMuY29udGV4dC5hbGlhc2VzLnNlbGYgPSAidGhpcyI7Ci0gICAg
ICB0aGlzLnB1c2goInNlbGYuaW52b2tlUGFydGlhbCgiICsgcGFyYW1zLmpvaW4oIiwgIikgKyAi
KSIpOwotICAgIH0sCi0KLSAgICAvLyBbYXNzaWduVG9IYXNoXQotICAgIC8vCi0gICAgLy8gT24g
c3RhY2ssIGJlZm9yZTogdmFsdWUsIGhhc2gsIC4uLgotICAgIC8vIE9uIHN0YWNrLCBhZnRlcjog
aGFzaCwgLi4uCi0gICAgLy8KLSAgICAvLyBQb3BzIGEgdmFsdWUgYW5kIGhhc2ggb2ZmIHRoZSBz
dGFjaywgYXNzaWducyBgaGFzaFtrZXldID0gdmFsdWVgCi0gICAgLy8gYW5kIHB1c2hlcyB0aGUg
aGFzaCBiYWNrIG9udG8gdGhlIHN0YWNrLgotICAgIGFzc2lnblRvSGFzaDogZnVuY3Rpb24oa2V5
KSB7Ci0gICAgICB2YXIgdmFsdWUgPSB0aGlzLnBvcFN0YWNrKCksCi0gICAgICAgICAgdHlwZTsK
LQotICAgICAgaWYgKHRoaXMub3B0aW9ucy5zdHJpbmdQYXJhbXMpIHsKLSAgICAgICAgdHlwZSA9
IHRoaXMucG9wU3RhY2soKTsKLSAgICAgICAgdGhpcy5wb3BTdGFjaygpOwotICAgICAgfQotCi0g
ICAgICB2YXIgaGFzaCA9IHRoaXMuaGFzaDsKLSAgICAgIGlmICh0eXBlKSB7Ci0gICAgICAgIGhh
c2gudHlwZXMucHVzaCgiJyIgKyBrZXkgKyAiJzogIiArIHR5cGUpOwotICAgICAgfQotICAgICAg
aGFzaC52YWx1ZXMucHVzaCgiJyIgKyBrZXkgKyAiJzogKCIgKyB2YWx1ZSArICIpIik7Ci0gICAg
fSwKLQotICAgIC8vIEhFTFBFUlMKLQotICAgIGNvbXBpbGVyOiBKYXZhU2NyaXB0Q29tcGlsZXIs
Ci0KLSAgICBjb21waWxlQ2hpbGRyZW46IGZ1bmN0aW9uKGVudmlyb25tZW50LCBvcHRpb25zKSB7
Ci0gICAgICB2YXIgY2hpbGRyZW4gPSBlbnZpcm9ubWVudC5jaGlsZHJlbiwgY2hpbGQsIGNvbXBp
bGVyOwotCi0gICAgICBmb3IodmFyIGk9MCwgbD1jaGlsZHJlbi5sZW5ndGg7IGk8bDsgaSsrKSB7
Ci0gICAgICAgIGNoaWxkID0gY2hpbGRyZW5baV07Ci0gICAgICAgIGNvbXBpbGVyID0gbmV3IHRo
aXMuY29tcGlsZXIoKTsKLQotICAgICAgICB2YXIgaW5kZXggPSB0aGlzLm1hdGNoRXhpc3RpbmdQ
cm9ncmFtKGNoaWxkKTsKLQotICAgICAgICBpZiAoaW5kZXggPT0gbnVsbCkgewotICAgICAgICAg
IHRoaXMuY29udGV4dC5wcm9ncmFtcy5wdXNoKCcnKTsgICAgIC8vIFBsYWNlaG9sZGVyIHRvIHBy
ZXZlbnQgbmFtZSBjb25mbGljdHMgZm9yIG5lc3RlZCBjaGlsZHJlbgotICAgICAgICAgIGluZGV4
ID0gdGhpcy5jb250ZXh0LnByb2dyYW1zLmxlbmd0aDsKLSAgICAgICAgICBjaGlsZC5pbmRleCA9
IGluZGV4OwotICAgICAgICAgIGNoaWxkLm5hbWUgPSAncHJvZ3JhbScgKyBpbmRleDsKLSAgICAg
ICAgICB0aGlzLmNvbnRleHQucHJvZ3JhbXNbaW5kZXhdID0gY29tcGlsZXIuY29tcGlsZShjaGls
ZCwgb3B0aW9ucywgdGhpcy5jb250ZXh0KTsKLSAgICAgICAgICB0aGlzLmNvbnRleHQuZW52aXJv
bm1lbnRzW2luZGV4XSA9IGNoaWxkOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGNoaWxk
LmluZGV4ID0gaW5kZXg7Ci0gICAgICAgICAgY2hpbGQubmFtZSA9ICdwcm9ncmFtJyArIGluZGV4
OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICBtYXRjaEV4aXN0aW5nUHJvZ3JhbTog
ZnVuY3Rpb24oY2hpbGQpIHsKLSAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB0aGlzLmNvbnRl
eHQuZW52aXJvbm1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgIHZhciBlbnZp
cm9ubWVudCA9IHRoaXMuY29udGV4dC5lbnZpcm9ubWVudHNbaV07Ci0gICAgICAgIGlmIChlbnZp
cm9ubWVudCAmJiBlbnZpcm9ubWVudC5lcXVhbHMoY2hpbGQpKSB7Ci0gICAgICAgICAgcmV0dXJu
IGk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotCi0gICAgcHJvZ3JhbUV4cHJlc3Npb246
IGZ1bmN0aW9uKGd1aWQpIHsKLSAgICAgIHRoaXMuY29udGV4dC5hbGlhc2VzLnNlbGYgPSAidGhp
cyI7Ci0KLSAgICAgIGlmKGd1aWQgPT0gbnVsbCkgewotICAgICAgICByZXR1cm4gInNlbGYubm9v
cCI7Ci0gICAgICB9Ci0KLSAgICAgIHZhciBjaGlsZCA9IHRoaXMuZW52aXJvbm1lbnQuY2hpbGRy
ZW5bZ3VpZF0sCi0gICAgICAgICAgZGVwdGhzID0gY2hpbGQuZGVwdGhzLmxpc3QsIGRlcHRoOwot
Ci0gICAgICB2YXIgcHJvZ3JhbVBhcmFtcyA9IFtjaGlsZC5pbmRleCwgY2hpbGQubmFtZSwgImRh
dGEiXTsKLQotICAgICAgZm9yKHZhciBpPTAsIGwgPSBkZXB0aHMubGVuZ3RoOyBpPGw7IGkrKykg
ewotICAgICAgICBkZXB0aCA9IGRlcHRoc1tpXTsKLQotICAgICAgICBpZihkZXB0aCA9PT0gMSkg
eyBwcm9ncmFtUGFyYW1zLnB1c2goImRlcHRoMCIpOyB9Ci0gICAgICAgIGVsc2UgeyBwcm9ncmFt
UGFyYW1zLnB1c2goImRlcHRoIiArIChkZXB0aCAtIDEpKTsgfQotICAgICAgfQotCi0gICAgICBp
ZihkZXB0aHMubGVuZ3RoID09PSAwKSB7Ci0gICAgICAgIHJldHVybiAic2VsZi5wcm9ncmFtKCIg
KyBwcm9ncmFtUGFyYW1zLmpvaW4oIiwgIikgKyAiKSI7Ci0gICAgICB9IGVsc2UgewotICAgICAg
ICBwcm9ncmFtUGFyYW1zLnNoaWZ0KCk7Ci0gICAgICAgIHJldHVybiAic2VsZi5wcm9ncmFtV2l0
aERlcHRoKCIgKyBwcm9ncmFtUGFyYW1zLmpvaW4oIiwgIikgKyAiKSI7Ci0gICAgICB9Ci0gICAg
fSwKLQotICAgIHJlZ2lzdGVyOiBmdW5jdGlvbihuYW1lLCB2YWwpIHsKLSAgICAgIHRoaXMudXNl
UmVnaXN0ZXIobmFtZSk7Ci0gICAgICB0aGlzLnNvdXJjZS5wdXNoKG5hbWUgKyAiID0gIiArIHZh
bCArICI7Iik7Ci0gICAgfSwKLQotICAgIHVzZVJlZ2lzdGVyOiBmdW5jdGlvbihuYW1lKSB7Ci0g
ICAgICBpZighdGhpcy5yZWdpc3RlcnNbbmFtZV0pIHsKLSAgICAgICAgdGhpcy5yZWdpc3RlcnNb
bmFtZV0gPSB0cnVlOwotICAgICAgICB0aGlzLnJlZ2lzdGVycy5saXN0LnB1c2gobmFtZSk7Ci0g
ICAgICB9Ci0gICAgfSwKLQotICAgIHB1c2hTdGFja0xpdGVyYWw6IGZ1bmN0aW9uKGl0ZW0pIHsK
LSAgICAgIHJldHVybiB0aGlzLnB1c2gobmV3IExpdGVyYWwoaXRlbSkpOwotICAgIH0sCi0KLSAg
ICBwdXNoU3RhY2s6IGZ1bmN0aW9uKGl0ZW0pIHsKLSAgICAgIHRoaXMuZmx1c2hJbmxpbmUoKTsK
LQotICAgICAgdmFyIHN0YWNrID0gdGhpcy5pbmNyU3RhY2soKTsKLSAgICAgIGlmIChpdGVtKSB7
Ci0gICAgICAgIHRoaXMuc291cmNlLnB1c2goc3RhY2sgKyAiID0gIiArIGl0ZW0gKyAiOyIpOwot
ICAgICAgfQotICAgICAgdGhpcy5jb21waWxlU3RhY2sucHVzaChzdGFjayk7Ci0gICAgICByZXR1
cm4gc3RhY2s7Ci0gICAgfSwKLQotICAgIHJlcGxhY2VTdGFjazogZnVuY3Rpb24oY2FsbGJhY2sp
IHsKLSAgICAgIHZhciBwcmVmaXggPSAnJywKLSAgICAgICAgICBpbmxpbmUgPSB0aGlzLmlzSW5s
aW5lKCksCi0gICAgICAgICAgc3RhY2s7Ci0KLSAgICAgIC8vIElmIHdlIGFyZSBjdXJyZW50bHkg
aW5saW5lIHRoZW4gd2Ugd2FudCB0byBtZXJnZSB0aGUgaW5saW5lIHN0YXRlbWVudCBpbnRvIHRo
ZQotICAgICAgLy8gcmVwbGFjZW1lbnQgc3RhdGVtZW50IHZpYSAnLCcKLSAgICAgIGlmIChpbmxp
bmUpIHsKLSAgICAgICAgdmFyIHRvcCA9IHRoaXMucG9wU3RhY2sodHJ1ZSk7Ci0KLSAgICAgICAg
aWYgKHRvcCBpbnN0YW5jZW9mIExpdGVyYWwpIHsKLSAgICAgICAgICAvLyBMaXRlcmFscyBkbyBu
b3QgbmVlZCB0byBiZSBpbmxpbmVkCi0gICAgICAgICAgc3RhY2sgPSB0b3AudmFsdWU7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgLy8gR2V0IG9yIGNyZWF0ZSB0aGUgY3VycmVudCBzdGFj
ayBuYW1lIGZvciB1c2UgYnkgdGhlIGlubGluZQotICAgICAgICAgIHZhciBuYW1lID0gdGhpcy5z
dGFja1Nsb3QgPyB0aGlzLnRvcFN0YWNrTmFtZSgpIDogdGhpcy5pbmNyU3RhY2soKTsKLQotICAg
ICAgICAgIHByZWZpeCA9ICcoJyArIHRoaXMucHVzaChuYW1lKSArICcgPSAnICsgdG9wICsgJyks
JzsKLSAgICAgICAgICBzdGFjayA9IHRoaXMudG9wU3RhY2soKTsKLSAgICAgICAgfQotICAgICAg
fSBlbHNlIHsKLSAgICAgICAgc3RhY2sgPSB0aGlzLnRvcFN0YWNrKCk7Ci0gICAgICB9Ci0KLSAg
ICAgIHZhciBpdGVtID0gY2FsbGJhY2suY2FsbCh0aGlzLCBzdGFjayk7Ci0KLSAgICAgIGlmIChp
bmxpbmUpIHsKLSAgICAgICAgaWYgKHRoaXMuaW5saW5lU3RhY2subGVuZ3RoIHx8IHRoaXMuY29t
cGlsZVN0YWNrLmxlbmd0aCkgewotICAgICAgICAgIHRoaXMucG9wU3RhY2soKTsKLSAgICAgICAg
fQotICAgICAgICB0aGlzLnB1c2goJygnICsgcHJlZml4ICsgaXRlbSArICcpJyk7Ci0gICAgICB9
IGVsc2UgewotICAgICAgICAvLyBQcmV2ZW50IG1vZGlmaWNhdGlvbiBvZiB0aGUgY29udGV4dCBk
ZXB0aCB2YXJpYWJsZS4gVGhyb3VnaCByZXBsYWNlU3RhY2sKLSAgICAgICAgaWYgKCEvXnN0YWNr
Ly50ZXN0KHN0YWNrKSkgewotICAgICAgICAgIHN0YWNrID0gdGhpcy5uZXh0U3RhY2soKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHRoaXMuc291cmNlLnB1c2goc3RhY2sgKyAiID0gKCIgKyBwcmVm
aXggKyBpdGVtICsgIik7Iik7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gc3RhY2s7Ci0gICAgfSwK
LQotICAgIG5leHRTdGFjazogZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gdGhpcy5wdXNoU3Rh
Y2soKTsKLSAgICB9LAotCi0gICAgaW5jclN0YWNrOiBmdW5jdGlvbigpIHsKLSAgICAgIHRoaXMu
c3RhY2tTbG90Kys7Ci0gICAgICBpZih0aGlzLnN0YWNrU2xvdCA+IHRoaXMuc3RhY2tWYXJzLmxl
bmd0aCkgeyB0aGlzLnN0YWNrVmFycy5wdXNoKCJzdGFjayIgKyB0aGlzLnN0YWNrU2xvdCk7IH0K
LSAgICAgIHJldHVybiB0aGlzLnRvcFN0YWNrTmFtZSgpOwotICAgIH0sCi0gICAgdG9wU3RhY2tO
YW1lOiBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiAic3RhY2siICsgdGhpcy5zdGFja1Nsb3Q7
Ci0gICAgfSwKLSAgICBmbHVzaElubGluZTogZnVuY3Rpb24oKSB7Ci0gICAgICB2YXIgaW5saW5l
U3RhY2sgPSB0aGlzLmlubGluZVN0YWNrOwotICAgICAgaWYgKGlubGluZVN0YWNrLmxlbmd0aCkg
ewotICAgICAgICB0aGlzLmlubGluZVN0YWNrID0gW107Ci0gICAgICAgIGZvciAodmFyIGkgPSAw
LCBsZW4gPSBpbmxpbmVTdGFjay5sZW5ndGg7IGkgPCBsZW47IGkrKykgewotICAgICAgICAgIHZh
ciBlbnRyeSA9IGlubGluZVN0YWNrW2ldOwotICAgICAgICAgIGlmIChlbnRyeSBpbnN0YW5jZW9m
IExpdGVyYWwpIHsKLSAgICAgICAgICAgIHRoaXMuY29tcGlsZVN0YWNrLnB1c2goZW50cnkpOwot
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0aGlzLnB1c2hTdGFjayhlbnRyeSk7Ci0g
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICBpc0lubGluZTogZnVu
Y3Rpb24oKSB7Ci0gICAgICByZXR1cm4gdGhpcy5pbmxpbmVTdGFjay5sZW5ndGg7Ci0gICAgfSwK
LQotICAgIHBvcFN0YWNrOiBmdW5jdGlvbih3cmFwcGVkKSB7Ci0gICAgICB2YXIgaW5saW5lID0g
dGhpcy5pc0lubGluZSgpLAotICAgICAgICAgIGl0ZW0gPSAoaW5saW5lID8gdGhpcy5pbmxpbmVT
dGFjayA6IHRoaXMuY29tcGlsZVN0YWNrKS5wb3AoKTsKLQotICAgICAgaWYgKCF3cmFwcGVkICYm
IChpdGVtIGluc3RhbmNlb2YgTGl0ZXJhbCkpIHsKLSAgICAgICAgcmV0dXJuIGl0ZW0udmFsdWU7
Ci0gICAgICB9IGVsc2UgewotICAgICAgICBpZiAoIWlubGluZSkgewotICAgICAgICAgIHRoaXMu
c3RhY2tTbG90LS07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGl0ZW07Ci0gICAgICB9Ci0g
ICAgfSwKLQotICAgIHRvcFN0YWNrOiBmdW5jdGlvbih3cmFwcGVkKSB7Ci0gICAgICB2YXIgc3Rh
Y2sgPSAodGhpcy5pc0lubGluZSgpID8gdGhpcy5pbmxpbmVTdGFjayA6IHRoaXMuY29tcGlsZVN0
YWNrKSwKLSAgICAgICAgICBpdGVtID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07Ci0KLSAgICAg
IGlmICghd3JhcHBlZCAmJiAoaXRlbSBpbnN0YW5jZW9mIExpdGVyYWwpKSB7Ci0gICAgICAgIHJl
dHVybiBpdGVtLnZhbHVlOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIGl0ZW07Ci0g
ICAgICB9Ci0gICAgfSwKLQotICAgIHF1b3RlZFN0cmluZzogZnVuY3Rpb24oc3RyKSB7Ci0gICAg
ICByZXR1cm4gJyInICsgc3RyCi0gICAgICAgIC5yZXBsYWNlKC9cXC9nLCAnXFxcXCcpCi0gICAg
ICAgIC5yZXBsYWNlKC8iL2csICdcXCInKQotICAgICAgICAucmVwbGFjZSgvXG4vZywgJ1xcbicp
Ci0gICAgICAgIC5yZXBsYWNlKC9cci9nLCAnXFxyJykgKyAnIic7Ci0gICAgfSwKLQotICAgIHNl
dHVwSGVscGVyOiBmdW5jdGlvbihwYXJhbVNpemUsIG5hbWUsIG1pc3NpbmdQYXJhbXMpIHsKLSAg
ICAgIHZhciBwYXJhbXMgPSBbXTsKLSAgICAgIHRoaXMuc2V0dXBQYXJhbXMocGFyYW1TaXplLCBw
YXJhbXMsIG1pc3NpbmdQYXJhbXMpOwotICAgICAgdmFyIGZvdW5kSGVscGVyID0gdGhpcy5uYW1l
TG9va3VwKCdoZWxwZXJzJywgbmFtZSwgJ2hlbHBlcicpOwotCi0gICAgICByZXR1cm4gewotICAg
ICAgICBwYXJhbXM6IHBhcmFtcywKLSAgICAgICAgbmFtZTogZm91bmRIZWxwZXIsCi0gICAgICAg
IGNhbGxQYXJhbXM6IFsiZGVwdGgwIl0uY29uY2F0KHBhcmFtcykuam9pbigiLCAiKSwKLSAgICAg
ICAgaGVscGVyTWlzc2luZ1BhcmFtczogbWlzc2luZ1BhcmFtcyAmJiBbImRlcHRoMCIsIHRoaXMu
cXVvdGVkU3RyaW5nKG5hbWUpXS5jb25jYXQocGFyYW1zKS5qb2luKCIsICIpCi0gICAgICB9Owot
ICAgIH0sCi0KLSAgICAvLyB0aGUgcGFyYW1zIGFuZCBjb250ZXh0cyBhcmd1bWVudHMgYXJlIHBh
c3NlZCBpbiBhcnJheXMKLSAgICAvLyB0byBmaWxsIGluCi0gICAgc2V0dXBQYXJhbXM6IGZ1bmN0
aW9uKHBhcmFtU2l6ZSwgcGFyYW1zLCB1c2VSZWdpc3RlcikgewotICAgICAgdmFyIG9wdGlvbnMg
PSBbXSwgY29udGV4dHMgPSBbXSwgdHlwZXMgPSBbXSwgcGFyYW0sIGludmVyc2UsIHByb2dyYW07
Ci0KLSAgICAgIG9wdGlvbnMucHVzaCgiaGFzaDoiICsgdGhpcy5wb3BTdGFjaygpKTsKLQotICAg
ICAgaW52ZXJzZSA9IHRoaXMucG9wU3RhY2soKTsKLSAgICAgIHByb2dyYW0gPSB0aGlzLnBvcFN0
YWNrKCk7Ci0KLSAgICAgIC8vIEF2b2lkIHNldHRpbmcgZm4gYW5kIGludmVyc2UgaWYgbmVpdGhl
ciBhcmUgc2V0LiBUaGlzIGFsbG93cwotICAgICAgLy8gaGVscGVycyB0byBkbyBhIGNoZWNrIGZv
ciBgaWYgKG9wdGlvbnMuZm4pYAotICAgICAgaWYgKHByb2dyYW0gfHwgaW52ZXJzZSkgewotICAg
ICAgICBpZiAoIXByb2dyYW0pIHsKLSAgICAgICAgICB0aGlzLmNvbnRleHQuYWxpYXNlcy5zZWxm
ID0gInRoaXMiOwotICAgICAgICAgIHByb2dyYW0gPSAic2VsZi5ub29wIjsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmICghaW52ZXJzZSkgewotICAgICAgICAgdGhpcy5jb250ZXh0LmFsaWFzZXMu
c2VsZiA9ICJ0aGlzIjsKLSAgICAgICAgICBpbnZlcnNlID0gInNlbGYubm9vcCI7Ci0gICAgICAg
IH0KLQotICAgICAgICBvcHRpb25zLnB1c2goImludmVyc2U6IiArIGludmVyc2UpOwotICAgICAg
ICBvcHRpb25zLnB1c2goImZuOiIgKyBwcm9ncmFtKTsKLSAgICAgIH0KLQotICAgICAgZm9yKHZh
ciBpPTA7IGk8cGFyYW1TaXplOyBpKyspIHsKLSAgICAgICAgcGFyYW0gPSB0aGlzLnBvcFN0YWNr
KCk7Ci0gICAgICAgIHBhcmFtcy5wdXNoKHBhcmFtKTsKLQotICAgICAgICBpZih0aGlzLm9wdGlv
bnMuc3RyaW5nUGFyYW1zKSB7Ci0gICAgICAgICAgdHlwZXMucHVzaCh0aGlzLnBvcFN0YWNrKCkp
OwotICAgICAgICAgIGNvbnRleHRzLnB1c2godGhpcy5wb3BTdGFjaygpKTsKLSAgICAgICAgfQot
ICAgICAgfQotCi0gICAgICBpZiAodGhpcy5vcHRpb25zLnN0cmluZ1BhcmFtcykgewotICAgICAg
ICBvcHRpb25zLnB1c2goImNvbnRleHRzOlsiICsgY29udGV4dHMuam9pbigiLCIpICsgIl0iKTsK
LSAgICAgICAgb3B0aW9ucy5wdXNoKCJ0eXBlczpbIiArIHR5cGVzLmpvaW4oIiwiKSArICJdIik7
Ci0gICAgICAgIG9wdGlvbnMucHVzaCgiaGFzaFR5cGVzOmhhc2hUeXBlcyIpOwotICAgICAgfQot
Ci0gICAgICBpZih0aGlzLm9wdGlvbnMuZGF0YSkgewotICAgICAgICBvcHRpb25zLnB1c2goImRh
dGE6ZGF0YSIpOwotICAgICAgfQotCi0gICAgICBvcHRpb25zID0gInsiICsgb3B0aW9ucy5qb2lu
KCIsIikgKyAifSI7Ci0gICAgICBpZiAodXNlUmVnaXN0ZXIpIHsKLSAgICAgICAgdGhpcy5yZWdp
c3Rlcignb3B0aW9ucycsIG9wdGlvbnMpOwotICAgICAgICBwYXJhbXMucHVzaCgnb3B0aW9ucycp
OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcGFyYW1zLnB1c2gob3B0aW9ucyk7Ci0gICAgICB9
Ci0gICAgICByZXR1cm4gcGFyYW1zLmpvaW4oIiwgIik7Ci0gICAgfQotICB9OwotCi0gIHZhciBy
ZXNlcnZlZFdvcmRzID0gKAotICAgICJicmVhayBlbHNlIG5ldyB2YXIiICsKLSAgICAiIGNhc2Ug
ZmluYWxseSByZXR1cm4gdm9pZCIgKwotICAgICIgY2F0Y2ggZm9yIHN3aXRjaCB3aGlsZSIgKwot
ICAgICIgY29udGludWUgZnVuY3Rpb24gdGhpcyB3aXRoIiArCi0gICAgIiBkZWZhdWx0IGlmIHRo
cm93IiArCi0gICAgIiBkZWxldGUgaW4gdHJ5IiArCi0gICAgIiBkbyBpbnN0YW5jZW9mIHR5cGVv
ZiIgKwotICAgICIgYWJzdHJhY3QgZW51bSBpbnQgc2hvcnQiICsKLSAgICAiIGJvb2xlYW4gZXhw
b3J0IGludGVyZmFjZSBzdGF0aWMiICsKLSAgICAiIGJ5dGUgZXh0ZW5kcyBsb25nIHN1cGVyIiAr
Ci0gICAgIiBjaGFyIGZpbmFsIG5hdGl2ZSBzeW5jaHJvbml6ZWQiICsKLSAgICAiIGNsYXNzIGZs
b2F0IHBhY2thZ2UgdGhyb3dzIiArCi0gICAgIiBjb25zdCBnb3RvIHByaXZhdGUgdHJhbnNpZW50
IiArCi0gICAgIiBkZWJ1Z2dlciBpbXBsZW1lbnRzIHByb3RlY3RlZCB2b2xhdGlsZSIgKwotICAg
ICIgZG91YmxlIGltcG9ydCBwdWJsaWMgbGV0IHlpZWxkIgotICApLnNwbGl0KCIgIik7Ci0KLSAg
dmFyIGNvbXBpbGVyV29yZHMgPSBKYXZhU2NyaXB0Q29tcGlsZXIuUkVTRVJWRURfV09SRFMgPSB7
fTsKLQotICBmb3IodmFyIGk9MCwgbD1yZXNlcnZlZFdvcmRzLmxlbmd0aDsgaTxsOyBpKyspIHsK
LSAgICBjb21waWxlcldvcmRzW3Jlc2VydmVkV29yZHNbaV1dID0gdHJ1ZTsKLSAgfQotCi0gIEph
dmFTY3JpcHRDb21waWxlci5pc1ZhbGlkSmF2YVNjcmlwdFZhcmlhYmxlTmFtZSA9IGZ1bmN0aW9u
KG5hbWUpIHsKLSAgICBpZighSmF2YVNjcmlwdENvbXBpbGVyLlJFU0VSVkVEX1dPUkRTW25hbWVd
ICYmIC9eW2EtekEtWl8kXVswLTlhLXpBLVpfJF0rJC8udGVzdChuYW1lKSkgewotICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfTsKLQotfSkoSGFuZGxlYmFy
cy5Db21waWxlciwgSGFuZGxlYmFycy5KYXZhU2NyaXB0Q29tcGlsZXIpOwotCi1IYW5kbGViYXJz
LnByZWNvbXBpbGUgPSBmdW5jdGlvbihpbnB1dCwgb3B0aW9ucykgewotICBpZiAoIWlucHV0IHx8
ICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnICYmIGlucHV0LmNvbnN0cnVjdG9yICE9PSBIYW5k
bGViYXJzLkFTVC5Qcm9ncmFtTm9kZSkpIHsKLSAgICB0aHJvdyBuZXcgSGFuZGxlYmFycy5FeGNl
cHRpb24oIllvdSBtdXN0IHBhc3MgYSBzdHJpbmcgb3IgSGFuZGxlYmFycyBBU1QgdG8gSGFuZGxl
YmFycy5jb21waWxlLiBZb3UgcGFzc2VkICIgKyBpbnB1dCk7Ci0gIH0KLQotICBvcHRpb25zID0g
b3B0aW9ucyB8fCB7fTsKLSAgaWYgKCEoJ2RhdGEnIGluIG9wdGlvbnMpKSB7Ci0gICAgb3B0aW9u
cy5kYXRhID0gdHJ1ZTsKLSAgfQotICB2YXIgYXN0ID0gSGFuZGxlYmFycy5wYXJzZShpbnB1dCk7
Ci0gIHZhciBlbnZpcm9ubWVudCA9IG5ldyBIYW5kbGViYXJzLkNvbXBpbGVyKCkuY29tcGlsZShh
c3QsIG9wdGlvbnMpOwotICByZXR1cm4gbmV3IEhhbmRsZWJhcnMuSmF2YVNjcmlwdENvbXBpbGVy
KCkuY29tcGlsZShlbnZpcm9ubWVudCwgb3B0aW9ucyk7Ci19OwotCi1IYW5kbGViYXJzLmNvbXBp
bGUgPSBmdW5jdGlvbihpbnB1dCwgb3B0aW9ucykgewotICBpZiAoIWlucHV0IHx8ICh0eXBlb2Yg
aW5wdXQgIT09ICdzdHJpbmcnICYmIGlucHV0LmNvbnN0cnVjdG9yICE9PSBIYW5kbGViYXJzLkFT
VC5Qcm9ncmFtTm9kZSkpIHsKLSAgICB0aHJvdyBuZXcgSGFuZGxlYmFycy5FeGNlcHRpb24oIllv
dSBtdXN0IHBhc3MgYSBzdHJpbmcgb3IgSGFuZGxlYmFycyBBU1QgdG8gSGFuZGxlYmFycy5jb21w
aWxlLiBZb3UgcGFzc2VkICIgKyBpbnB1dCk7Ci0gIH0KLQotICBvcHRpb25zID0gb3B0aW9ucyB8
fCB7fTsKLSAgaWYgKCEoJ2RhdGEnIGluIG9wdGlvbnMpKSB7Ci0gICAgb3B0aW9ucy5kYXRhID0g
dHJ1ZTsKLSAgfQotICB2YXIgY29tcGlsZWQ7Ci0gIGZ1bmN0aW9uIGNvbXBpbGUoKSB7Ci0gICAg
dmFyIGFzdCA9IEhhbmRsZWJhcnMucGFyc2UoaW5wdXQpOwotICAgIHZhciBlbnZpcm9ubWVudCA9
IG5ldyBIYW5kbGViYXJzLkNvbXBpbGVyKCkuY29tcGlsZShhc3QsIG9wdGlvbnMpOwotICAgIHZh
ciB0ZW1wbGF0ZVNwZWMgPSBuZXcgSGFuZGxlYmFycy5KYXZhU2NyaXB0Q29tcGlsZXIoKS5jb21w
aWxlKGVudmlyb25tZW50LCBvcHRpb25zLCB1bmRlZmluZWQsIHRydWUpOwotICAgIHJldHVybiBI
YW5kbGViYXJzLnRlbXBsYXRlKHRlbXBsYXRlU3BlYyk7Ci0gIH0KLQotICAvLyBUZW1wbGF0ZSBp
cyBvbmx5IGNvbXBpbGVkIG9uIGZpcnN0IHVzZSBhbmQgY2FjaGVkIGFmdGVyIHRoYXQgcG9pbnQu
Ci0gIHJldHVybiBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7Ci0gICAgaWYgKCFjb21waWxl
ZCkgewotICAgICAgY29tcGlsZWQgPSBjb21waWxlKCk7Ci0gICAgfQotICAgIHJldHVybiBjb21w
aWxlZC5jYWxsKHRoaXMsIGNvbnRleHQsIG9wdGlvbnMpOwotICB9OwotfTsKLTsKLS8vIGxpYi9o
YW5kbGViYXJzL3J1bnRpbWUuanMKLUhhbmRsZWJhcnMuVk0gPSB7Ci0gIHRlbXBsYXRlOiBmdW5j
dGlvbih0ZW1wbGF0ZVNwZWMpIHsKLSAgICAvLyBKdXN0IGFkZCB3YXRlcgotICAgIHZhciBjb250
YWluZXIgPSB7Ci0gICAgICBlc2NhcGVFeHByZXNzaW9uOiBIYW5kbGViYXJzLlV0aWxzLmVzY2Fw
ZUV4cHJlc3Npb24sCi0gICAgICBpbnZva2VQYXJ0aWFsOiBIYW5kbGViYXJzLlZNLmludm9rZVBh
cnRpYWwsCi0gICAgICBwcm9ncmFtczogW10sCi0gICAgICBwcm9ncmFtOiBmdW5jdGlvbihpLCBm
biwgZGF0YSkgewotICAgICAgICB2YXIgcHJvZ3JhbVdyYXBwZXIgPSB0aGlzLnByb2dyYW1zW2ld
OwotICAgICAgICBpZihkYXRhKSB7Ci0gICAgICAgICAgcmV0dXJuIEhhbmRsZWJhcnMuVk0ucHJv
Z3JhbShmbiwgZGF0YSk7Ci0gICAgICAgIH0gZWxzZSBpZihwcm9ncmFtV3JhcHBlcikgewotICAg
ICAgICAgIHJldHVybiBwcm9ncmFtV3JhcHBlcjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICBwcm9ncmFtV3JhcHBlciA9IHRoaXMucHJvZ3JhbXNbaV0gPSBIYW5kbGViYXJzLlZNLnByb2dy
YW0oZm4pOwotICAgICAgICAgIHJldHVybiBwcm9ncmFtV3JhcHBlcjsKLSAgICAgICAgfQotICAg
ICAgfSwKLSAgICAgIHByb2dyYW1XaXRoRGVwdGg6IEhhbmRsZWJhcnMuVk0ucHJvZ3JhbVdpdGhE
ZXB0aCwKLSAgICAgIG5vb3A6IEhhbmRsZWJhcnMuVk0ubm9vcCwKLSAgICAgIGNvbXBpbGVySW5m
bzogbnVsbAotICAgIH07Ci0KLSAgICByZXR1cm4gZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykg
ewotICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307Ci0gICAgICB2YXIgcmVzdWx0ID0gdGVt
cGxhdGVTcGVjLmNhbGwoY29udGFpbmVyLCBIYW5kbGViYXJzLCBjb250ZXh0LCBvcHRpb25zLmhl
bHBlcnMsIG9wdGlvbnMucGFydGlhbHMsIG9wdGlvbnMuZGF0YSk7Ci0KLSAgICAgIHZhciBjb21w
aWxlckluZm8gPSBjb250YWluZXIuY29tcGlsZXJJbmZvIHx8IFtdLAotICAgICAgICAgIGNvbXBp
bGVyUmV2aXNpb24gPSBjb21waWxlckluZm9bMF0gfHwgMSwKLSAgICAgICAgICBjdXJyZW50UmV2
aXNpb24gPSBIYW5kbGViYXJzLkNPTVBJTEVSX1JFVklTSU9OOwotCi0gICAgICBpZiAoY29tcGls
ZXJSZXZpc2lvbiAhPT0gY3VycmVudFJldmlzaW9uKSB7Ci0gICAgICAgIGlmIChjb21waWxlclJl
dmlzaW9uIDwgY3VycmVudFJldmlzaW9uKSB7Ci0gICAgICAgICAgdmFyIHJ1bnRpbWVWZXJzaW9u
cyA9IEhhbmRsZWJhcnMuUkVWSVNJT05fQ0hBTkdFU1tjdXJyZW50UmV2aXNpb25dLAotICAgICAg
ICAgICAgICBjb21waWxlclZlcnNpb25zID0gSGFuZGxlYmFycy5SRVZJU0lPTl9DSEFOR0VTW2Nv
bXBpbGVyUmV2aXNpb25dOwotICAgICAgICAgIHRocm93ICJUZW1wbGF0ZSB3YXMgcHJlY29tcGls
ZWQgd2l0aCBhbiBvbGRlciB2ZXJzaW9uIG9mIEhhbmRsZWJhcnMgdGhhbiB0aGUgY3VycmVudCBy
dW50aW1lLiAiKwotICAgICAgICAgICAgICAgICJQbGVhc2UgdXBkYXRlIHlvdXIgcHJlY29tcGls
ZXIgdG8gYSBuZXdlciB2ZXJzaW9uICgiK3J1bnRpbWVWZXJzaW9ucysiKSBvciBkb3duZ3JhZGUg
eW91ciBydW50aW1lIHRvIGFuIG9sZGVyIHZlcnNpb24gKCIrY29tcGlsZXJWZXJzaW9ucysiKS4i
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIC8vIFVzZSB0aGUgZW1iZWRkZWQgdmVyc2lv
biBpbmZvIHNpbmNlIHRoZSBydW50aW1lIGRvZXNuJ3Qga25vdyBhYm91dCB0aGlzIHJldmlzaW9u
IHlldAotICAgICAgICAgIHRocm93ICJUZW1wbGF0ZSB3YXMgcHJlY29tcGlsZWQgd2l0aCBhIG5l
d2VyIHZlcnNpb24gb2YgSGFuZGxlYmFycyB0aGFuIHRoZSBjdXJyZW50IHJ1bnRpbWUuICIrCi0g
ICAgICAgICAgICAgICAgIlBsZWFzZSB1cGRhdGUgeW91ciBydW50aW1lIHRvIGEgbmV3ZXIgdmVy
c2lvbiAoIitjb21waWxlckluZm9bMV0rIikuIjsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAg
ICByZXR1cm4gcmVzdWx0OwotICAgIH07Ci0gIH0sCi0KLSAgcHJvZ3JhbVdpdGhEZXB0aDogZnVu
Y3Rpb24oZm4sIGRhdGEsICRkZXB0aCkgewotICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBl
LnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTsKLQotICAgIHJldHVybiBmdW5jdGlvbihjb250ZXh0
LCBvcHRpb25zKSB7Ci0gICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKLQotICAgICAgcmV0
dXJuIGZuLmFwcGx5KHRoaXMsIFtjb250ZXh0LCBvcHRpb25zLmRhdGEgfHwgZGF0YV0uY29uY2F0
KGFyZ3MpKTsKLSAgICB9OwotICB9LAotICBwcm9ncmFtOiBmdW5jdGlvbihmbiwgZGF0YSkgewot
ICAgIHJldHVybiBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7Ci0gICAgICBvcHRpb25zID0g
b3B0aW9ucyB8fCB7fTsKLQotICAgICAgcmV0dXJuIGZuKGNvbnRleHQsIG9wdGlvbnMuZGF0YSB8
fCBkYXRhKTsKLSAgICB9OwotICB9LAotICBub29wOiBmdW5jdGlvbigpIHsgcmV0dXJuICIiOyB9
LAotICBpbnZva2VQYXJ0aWFsOiBmdW5jdGlvbihwYXJ0aWFsLCBuYW1lLCBjb250ZXh0LCBoZWxw
ZXJzLCBwYXJ0aWFscywgZGF0YSkgewotICAgIHZhciBvcHRpb25zID0geyBoZWxwZXJzOiBoZWxw
ZXJzLCBwYXJ0aWFsczogcGFydGlhbHMsIGRhdGE6IGRhdGEgfTsKLQotICAgIGlmKHBhcnRpYWwg
PT09IHVuZGVmaW5lZCkgewotICAgICAgdGhyb3cgbmV3IEhhbmRsZWJhcnMuRXhjZXB0aW9uKCJU
aGUgcGFydGlhbCAiICsgbmFtZSArICIgY291bGQgbm90IGJlIGZvdW5kIik7Ci0gICAgfSBlbHNl
IGlmKHBhcnRpYWwgaW5zdGFuY2VvZiBGdW5jdGlvbikgewotICAgICAgcmV0dXJuIHBhcnRpYWwo
Y29udGV4dCwgb3B0aW9ucyk7Ci0gICAgfSBlbHNlIGlmICghSGFuZGxlYmFycy5jb21waWxlKSB7
Ci0gICAgICB0aHJvdyBuZXcgSGFuZGxlYmFycy5FeGNlcHRpb24oIlRoZSBwYXJ0aWFsICIgKyBu
YW1lICsgIiBjb3VsZCBub3QgYmUgY29tcGlsZWQgd2hlbiBydW5uaW5nIGluIHJ1bnRpbWUtb25s
eSBtb2RlIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHBhcnRpYWxzW25hbWVdID0gSGFuZGxlYmFy
cy5jb21waWxlKHBhcnRpYWwsIHtkYXRhOiBkYXRhICE9PSB1bmRlZmluZWR9KTsKLSAgICAgIHJl
dHVybiBwYXJ0aWFsc1tuYW1lXShjb250ZXh0LCBvcHRpb25zKTsKLSAgICB9Ci0gIH0KLX07Ci0K
LUhhbmRsZWJhcnMudGVtcGxhdGUgPSBIYW5kbGViYXJzLlZNLnRlbXBsYXRlOwotOwpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5L2Jvd2VyX2NvbXBvbmVudHMvanF1ZXJ5L2pxdWVyeS5q
cyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL2pxdWVyeS9ib3dlcl9jb21wb25lbnRzL2pxdWVyeS9qcXVlcnkuanMK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzZmVlZjJkOTlhZTIzYmQ2OWIxMDNkZmNk
NmY2NDZkMGY4ZmZlMWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5L2Jvd2VyX2NvbXBvbmVudHMvanF1ZXJ5L2pxdWVyeS5q
cworKysgL2Rldi9udWxsCkBAIC0xLDk1OTcgKzAsMCBAQAotLyohCi0gKiBqUXVlcnkgSmF2YVNj
cmlwdCBMaWJyYXJ5IHYxLjkuMQotICogaHR0cDovL2pxdWVyeS5jb20vCi0gKgotICogSW5jbHVk
ZXMgU2l6emxlLmpzCi0gKiBodHRwOi8vc2l6emxlanMuY29tLwotICoKLSAqIENvcHlyaWdodCAy
MDA1LCAyMDEyIGpRdWVyeSBGb3VuZGF0aW9uLCBJbmMuIGFuZCBvdGhlciBjb250cmlidXRvcnMK
LSAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZQotICogaHR0cDovL2pxdWVyeS5vcmcv
bGljZW5zZQotICoKLSAqIERhdGU6IDIwMTMtMi00Ci0gKi8KLShmdW5jdGlvbiggd2luZG93LCB1
bmRlZmluZWQgKSB7Ci0KLS8vIENhbid0IGRvIHRoaXMgYmVjYXVzZSBzZXZlcmFsIGFwcHMgaW5j
bHVkaW5nIEFTUC5ORVQgdHJhY2UKLS8vIHRoZSBzdGFjayB2aWEgYXJndW1lbnRzLmNhbGxlci5j
YWxsZWUgYW5kIEZpcmVmb3ggZGllcyBpZgotLy8geW91IHRyeSB0byB0cmFjZSB0aHJvdWdoICJ1
c2Ugc3RyaWN0IiBjYWxsIGNoYWlucy4gKCMxMzMzNSkKLS8vIFN1cHBvcnQ6IEZpcmVmb3ggMTgr
Ci0vLyJ1c2Ugc3RyaWN0IjsKLXZhcgotICAgIC8vIFRoZSBkZWZlcnJlZCB1c2VkIG9uIERPTSBy
ZWFkeQotICAgIHJlYWR5TGlzdCwKLQotICAgIC8vIEEgY2VudHJhbCByZWZlcmVuY2UgdG8gdGhl
IHJvb3QgalF1ZXJ5KGRvY3VtZW50KQotICAgIHJvb3RqUXVlcnksCi0KLSAgICAvLyBTdXBwb3J0
OiBJRTw5Ci0gICAgLy8gRm9yIGB0eXBlb2Ygbm9kZS5tZXRob2RgIGluc3RlYWQgb2YgYG5vZGUu
bWV0aG9kICE9PSB1bmRlZmluZWRgCi0gICAgY29yZV9zdHJ1bmRlZmluZWQgPSB0eXBlb2YgdW5k
ZWZpbmVkLAotCi0gICAgLy8gVXNlIHRoZSBjb3JyZWN0IGRvY3VtZW50IGFjY29yZGluZ2x5IHdp
dGggd2luZG93IGFyZ3VtZW50IChzYW5kYm94KQotICAgIGRvY3VtZW50ID0gd2luZG93LmRvY3Vt
ZW50LAotICAgIGxvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uLAotCi0gICAgLy8gTWFwIG92ZXIg
alF1ZXJ5IGluIGNhc2Ugb2Ygb3ZlcndyaXRlCi0gICAgX2pRdWVyeSA9IHdpbmRvdy5qUXVlcnks
Ci0KLSAgICAvLyBNYXAgb3ZlciB0aGUgJCBpbiBjYXNlIG9mIG92ZXJ3cml0ZQotICAgIF8kID0g
d2luZG93LiQsCi0KLSAgICAvLyBbW0NsYXNzXV0gLT4gdHlwZSBwYWlycwotICAgIGNsYXNzMnR5
cGUgPSB7fSwKLQotICAgIC8vIExpc3Qgb2YgZGVsZXRlZCBkYXRhIGNhY2hlIGlkcywgc28gd2Ug
Y2FuIHJldXNlIHRoZW0KLSAgICBjb3JlX2RlbGV0ZWRJZHMgPSBbXSwKLQotICAgIGNvcmVfdmVy
c2lvbiA9ICIxLjkuMSIsCi0KLSAgICAvLyBTYXZlIGEgcmVmZXJlbmNlIHRvIHNvbWUgY29yZSBt
ZXRob2RzCi0gICAgY29yZV9jb25jYXQgPSBjb3JlX2RlbGV0ZWRJZHMuY29uY2F0LAotICAgIGNv
cmVfcHVzaCA9IGNvcmVfZGVsZXRlZElkcy5wdXNoLAotICAgIGNvcmVfc2xpY2UgPSBjb3JlX2Rl
bGV0ZWRJZHMuc2xpY2UsCi0gICAgY29yZV9pbmRleE9mID0gY29yZV9kZWxldGVkSWRzLmluZGV4
T2YsCi0gICAgY29yZV90b1N0cmluZyA9IGNsYXNzMnR5cGUudG9TdHJpbmcsCi0gICAgY29yZV9o
YXNPd24gPSBjbGFzczJ0eXBlLmhhc093blByb3BlcnR5LAotICAgIGNvcmVfdHJpbSA9IGNvcmVf
dmVyc2lvbi50cmltLAotCi0gICAgLy8gRGVmaW5lIGEgbG9jYWwgY29weSBvZiBqUXVlcnkKLSAg
ICBqUXVlcnkgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7Ci0gICAgLy8gVGhlIGpR
dWVyeSBvYmplY3QgaXMgYWN0dWFsbHkganVzdCB0aGUgaW5pdCBjb25zdHJ1Y3RvciAnZW5oYW5j
ZWQnCi0gICAgcmV0dXJuIG5ldyBqUXVlcnkuZm4uaW5pdCggc2VsZWN0b3IsIGNvbnRleHQsIHJv
b3RqUXVlcnkgKTsKLSAgICB9LAotCi0gICAgLy8gVXNlZCBmb3IgbWF0Y2hpbmcgbnVtYmVycwot
ICAgIGNvcmVfcG51bSA9IC9bKy1dPyg/OlxkKlwufClcZCsoPzpbZUVdWystXT9cZCt8KS8uc291
cmNlLAotCi0gICAgLy8gVXNlZCBmb3Igc3BsaXR0aW5nIG9uIHdoaXRlc3BhY2UKLSAgICBjb3Jl
X3Jub3R3aGl0ZSA9IC9cUysvZywKLQotICAgIC8vIE1ha2Ugc3VyZSB3ZSB0cmltIEJPTSBhbmQg
TkJTUCAoaGVyZSdzIGxvb2tpbmcgYXQgeW91LCBTYWZhcmkgNS4wIGFuZCBJRSkKLSAgICBydHJp
bSA9IC9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZywKLQotICAgIC8vIEEgc2lt
cGxlIHdheSB0byBjaGVjayBmb3IgSFRNTCBzdHJpbmdzCi0gICAgLy8gUHJpb3JpdGl6ZSAjaWQg
b3ZlciA8dGFnPiB0byBhdm9pZCBYU1MgdmlhIGxvY2F0aW9uLmhhc2ggKCM5NTIxKQotICAgIC8v
IFN0cmljdCBIVE1MIHJlY29nbml0aW9uICgjMTEyOTA6IG11c3Qgc3RhcnQgd2l0aCA8KQotICAg
IHJxdWlja0V4cHIgPSAvXig/Oig8W1x3XFddKz4pW14+XSp8IyhbXHctXSopKSQvLAotCi0gICAg
Ly8gTWF0Y2ggYSBzdGFuZGFsb25lIHRhZwotICAgIHJzaW5nbGVUYWcgPSAvXjwoXHcrKVxzKlwv
Pz4oPzo8XC9cMT58KSQvLAotCi0gICAgLy8gSlNPTiBSZWdFeHAKLSAgICBydmFsaWRjaGFycyA9
IC9eW1xdLDp7fVxzXSokLywKLSAgICBydmFsaWRicmFjZXMgPSAvKD86Xnw6fCwpKD86XHMqXFsp
Ky9nLAotICAgIHJ2YWxpZGVzY2FwZSA9IC9cXCg/OlsiXFxcL2JmbnJ0XXx1W1xkYS1mQS1GXXs0
fSkvZywKLSAgICBydmFsaWR0b2tlbnMgPSAvIlteIlxcXHJcbl0qInx0cnVlfGZhbHNlfG51bGx8
LT8oPzpcZCtcLnwpXGQrKD86W2VFXVsrLV0/XGQrfCkvZywKLQotICAgIC8vIE1hdGNoZXMgZGFz
aGVkIHN0cmluZyBmb3IgY2FtZWxpemluZwotICAgIHJtc1ByZWZpeCA9IC9eLW1zLS8sCi0gICAg
cmRhc2hBbHBoYSA9IC8tKFtcZGEtel0pL2dpLAotCi0gICAgLy8gVXNlZCBieSBqUXVlcnkuY2Ft
ZWxDYXNlIGFzIGNhbGxiYWNrIHRvIHJlcGxhY2UoKQotICAgIGZjYW1lbENhc2UgPSBmdW5jdGlv
biggYWxsLCBsZXR0ZXIgKSB7Ci0gICAgcmV0dXJuIGxldHRlci50b1VwcGVyQ2FzZSgpOwotICAg
IH0sCi0KLSAgICAvLyBUaGUgcmVhZHkgZXZlbnQgaGFuZGxlcgotICAgIGNvbXBsZXRlZCA9IGZ1
bmN0aW9uKCBldmVudCApIHsKLQotICAgIC8vIHJlYWR5U3RhdGUgPT09ICJjb21wbGV0ZSIgaXMg
Z29vZCBlbm91Z2ggZm9yIHVzIHRvIGNhbGwgdGhlIGRvbSByZWFkeSBpbiBvbGRJRQotICAgIGlm
ICggZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciB8fCBldmVudC50eXBlID09PSAibG9hZCIgfHwg
ZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gImNvbXBsZXRlIiApIHsKLSAgICBkZXRhY2goKTsKLSAg
ICBqUXVlcnkucmVhZHkoKTsKLSAgICB9Ci0gICAgfSwKLSAgICAvLyBDbGVhbi11cCBtZXRob2Qg
Zm9yIGRvbSByZWFkeSBldmVudHMKLSAgICBkZXRhY2ggPSBmdW5jdGlvbigpIHsKLSAgICBpZiAo
IGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIgKSB7Ci0gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRM
aXN0ZW5lciggIkRPTUNvbnRlbnRMb2FkZWQiLCBjb21wbGV0ZWQsIGZhbHNlICk7Ci0gICAgd2lu
ZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoICJsb2FkIiwgY29tcGxldGVkLCBmYWxzZSApOwotCi0g
ICAgfSBlbHNlIHsKLSAgICBkb2N1bWVudC5kZXRhY2hFdmVudCggIm9ucmVhZHlzdGF0ZWNoYW5n
ZSIsIGNvbXBsZXRlZCApOwotICAgIHdpbmRvdy5kZXRhY2hFdmVudCggIm9ubG9hZCIsIGNvbXBs
ZXRlZCApOwotICAgIH0KLSAgICB9OwotCi1qUXVlcnkuZm4gPSBqUXVlcnkucHJvdG90eXBlID0g
ewotICAgIC8vIFRoZSBjdXJyZW50IHZlcnNpb24gb2YgalF1ZXJ5IGJlaW5nIHVzZWQKLSAgICBq
cXVlcnk6IGNvcmVfdmVyc2lvbiwKLQotICAgIGNvbnN0cnVjdG9yOiBqUXVlcnksCi0gICAgaW5p
dDogZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCByb290alF1ZXJ5ICkgewotICAgIHZhciBt
YXRjaCwgZWxlbTsKLQotICAgIC8vIEhBTkRMRTogJCgiIiksICQobnVsbCksICQodW5kZWZpbmVk
KSwgJChmYWxzZSkKLSAgICBpZiAoICFzZWxlY3RvciApIHsKLSAgICByZXR1cm4gdGhpczsKLSAg
ICB9Ci0KLSAgICAvLyBIYW5kbGUgSFRNTCBzdHJpbmdzCi0gICAgaWYgKCB0eXBlb2Ygc2VsZWN0
b3IgPT09ICJzdHJpbmciICkgewotICAgIGlmICggc2VsZWN0b3IuY2hhckF0KDApID09PSAiPCIg
JiYgc2VsZWN0b3IuY2hhckF0KCBzZWxlY3Rvci5sZW5ndGggLSAxICkgPT09ICI+IiAmJiBzZWxl
Y3Rvci5sZW5ndGggPj0gMyApIHsKLSAgICAvLyBBc3N1bWUgdGhhdCBzdHJpbmdzIHRoYXQgc3Rh
cnQgYW5kIGVuZCB3aXRoIDw+IGFyZSBIVE1MIGFuZCBza2lwIHRoZSByZWdleCBjaGVjawotICAg
IG1hdGNoID0gWyBudWxsLCBzZWxlY3RvciwgbnVsbCBdOwotCi0gICAgfSBlbHNlIHsKLSAgICBt
YXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKTsKLSAgICB9Ci0KLSAgICAvLyBNYXRj
aCBodG1sIG9yIG1ha2Ugc3VyZSBubyBjb250ZXh0IGlzIHNwZWNpZmllZCBmb3IgI2lkCi0gICAg
aWYgKCBtYXRjaCAmJiAobWF0Y2hbMV0gfHwgIWNvbnRleHQpICkgewotCi0gICAgLy8gSEFORExF
OiAkKGh0bWwpIC0+ICQoYXJyYXkpCi0gICAgaWYgKCBtYXRjaFsxXSApIHsKLSAgICBjb250ZXh0
ID0gY29udGV4dCBpbnN0YW5jZW9mIGpRdWVyeSA/IGNvbnRleHRbMF0gOiBjb250ZXh0OwotCi0g
ICAgLy8gc2NyaXB0cyBpcyB0cnVlIGZvciBiYWNrLWNvbXBhdAotICAgIGpRdWVyeS5tZXJnZSgg
dGhpcywgalF1ZXJ5LnBhcnNlSFRNTCgKLSAgICBtYXRjaFsxXSwKLSAgICBjb250ZXh0ICYmIGNv
bnRleHQubm9kZVR5cGUgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IGRvY3Vt
ZW50LAotICAgIHRydWUKLSAgICApICk7Ci0KLSAgICAvLyBIQU5ETEU6ICQoaHRtbCwgcHJvcHMp
Ci0gICAgaWYgKCByc2luZ2xlVGFnLnRlc3QoIG1hdGNoWzFdICkgJiYgalF1ZXJ5LmlzUGxhaW5P
YmplY3QoIGNvbnRleHQgKSApIHsKLSAgICBmb3IgKCBtYXRjaCBpbiBjb250ZXh0ICkgewotICAg
IC8vIFByb3BlcnRpZXMgb2YgY29udGV4dCBhcmUgY2FsbGVkIGFzIG1ldGhvZHMgaWYgcG9zc2li
bGUKLSAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB0aGlzWyBtYXRjaCBdICkgKSB7Ci0gICAg
dGhpc1sgbWF0Y2ggXSggY29udGV4dFsgbWF0Y2ggXSApOwotCi0gICAgLy8gLi4uYW5kIG90aGVy
d2lzZSBzZXQgYXMgYXR0cmlidXRlcwotICAgIH0gZWxzZSB7Ci0gICAgdGhpcy5hdHRyKCBtYXRj
aCwgY29udGV4dFsgbWF0Y2ggXSApOwotICAgIH0KLSAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRoaXM7Ci0KLSAgICAvLyBIQU5ETEU6ICQoI2lkKQotICAgIH0gZWxzZSB7Ci0gICAgZWxlbSA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCBtYXRjaFsyXSApOwotCi0gICAgLy8gQ2hlY2sgcGFy
ZW50Tm9kZSB0byBjYXRjaCB3aGVuIEJsYWNrYmVycnkgNC42IHJldHVybnMKLSAgICAvLyBub2Rl
cyB0aGF0IGFyZSBubyBsb25nZXIgaW4gdGhlIGRvY3VtZW50ICM2OTYzCi0gICAgaWYgKCBlbGVt
ICYmIGVsZW0ucGFyZW50Tm9kZSApIHsKLSAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgSUUg
YW5kIE9wZXJhIHJldHVybiBpdGVtcwotICAgIC8vIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRAotICAg
IGlmICggZWxlbS5pZCAhPT0gbWF0Y2hbMl0gKSB7Ci0gICAgcmV0dXJuIHJvb3RqUXVlcnkuZmlu
ZCggc2VsZWN0b3IgKTsKLSAgICB9Ci0KLSAgICAvLyBPdGhlcndpc2UsIHdlIGluamVjdCB0aGUg
ZWxlbWVudCBkaXJlY3RseSBpbnRvIHRoZSBqUXVlcnkgb2JqZWN0Ci0gICAgdGhpcy5sZW5ndGgg
PSAxOwotICAgIHRoaXNbMF0gPSBlbGVtOwotICAgIH0KLQotICAgIHRoaXMuY29udGV4dCA9IGRv
Y3VtZW50OwotICAgIHRoaXMuc2VsZWN0b3IgPSBzZWxlY3RvcjsKLSAgICByZXR1cm4gdGhpczsK
LSAgICB9Ci0KLSAgICAvLyBIQU5ETEU6ICQoZXhwciwgJCguLi4pKQotICAgIH0gZWxzZSBpZiAo
ICFjb250ZXh0IHx8IGNvbnRleHQuanF1ZXJ5ICkgewotICAgIHJldHVybiAoIGNvbnRleHQgfHwg
cm9vdGpRdWVyeSApLmZpbmQoIHNlbGVjdG9yICk7Ci0KLSAgICAvLyBIQU5ETEU6ICQoZXhwciwg
Y29udGV4dCkKLSAgICAvLyAod2hpY2ggaXMganVzdCBlcXVpdmFsZW50IHRvOiAkKGNvbnRleHQp
LmZpbmQoZXhwcikKLSAgICB9IGVsc2UgewotICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yKCBj
b250ZXh0ICkuZmluZCggc2VsZWN0b3IgKTsKLSAgICB9Ci0KLSAgICAvLyBIQU5ETEU6ICQoRE9N
RWxlbWVudCkKLSAgICB9IGVsc2UgaWYgKCBzZWxlY3Rvci5ub2RlVHlwZSApIHsKLSAgICB0aGlz
LmNvbnRleHQgPSB0aGlzWzBdID0gc2VsZWN0b3I7Ci0gICAgdGhpcy5sZW5ndGggPSAxOwotICAg
IHJldHVybiB0aGlzOwotCi0gICAgLy8gSEFORExFOiAkKGZ1bmN0aW9uKQotICAgIC8vIFNob3J0
Y3V0IGZvciBkb2N1bWVudCByZWFkeQotICAgIH0gZWxzZSBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9u
KCBzZWxlY3RvciApICkgewotICAgIHJldHVybiByb290alF1ZXJ5LnJlYWR5KCBzZWxlY3RvciAp
OwotICAgIH0KLQotICAgIGlmICggc2VsZWN0b3Iuc2VsZWN0b3IgIT09IHVuZGVmaW5lZCApIHsK
LSAgICB0aGlzLnNlbGVjdG9yID0gc2VsZWN0b3Iuc2VsZWN0b3I7Ci0gICAgdGhpcy5jb250ZXh0
ID0gc2VsZWN0b3IuY29udGV4dDsKLSAgICB9Ci0KLSAgICByZXR1cm4galF1ZXJ5Lm1ha2VBcnJh
eSggc2VsZWN0b3IsIHRoaXMgKTsKLSAgICB9LAotCi0gICAgLy8gU3RhcnQgd2l0aCBhbiBlbXB0
eSBzZWxlY3RvcgotICAgIHNlbGVjdG9yOiAiIiwKLQotICAgIC8vIFRoZSBkZWZhdWx0IGxlbmd0
aCBvZiBhIGpRdWVyeSBvYmplY3QgaXMgMAotICAgIGxlbmd0aDogMCwKLQotICAgIC8vIFRoZSBu
dW1iZXIgb2YgZWxlbWVudHMgY29udGFpbmVkIGluIHRoZSBtYXRjaGVkIGVsZW1lbnQgc2V0Ci0g
ICAgc2l6ZTogZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMubGVuZ3RoOwotICAgIH0sCi0K
LSAgICB0b0FycmF5OiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gY29yZV9zbGljZS5jYWxsKCB0
aGlzICk7Ci0gICAgfSwKLQotICAgIC8vIEdldCB0aGUgTnRoIGVsZW1lbnQgaW4gdGhlIG1hdGNo
ZWQgZWxlbWVudCBzZXQgT1IKLSAgICAvLyBHZXQgdGhlIHdob2xlIG1hdGNoZWQgZWxlbWVudCBz
ZXQgYXMgYSBjbGVhbiBhcnJheQotICAgIGdldDogZnVuY3Rpb24oIG51bSApIHsKLSAgICByZXR1
cm4gbnVtID09IG51bGwgPwotCi0gICAgLy8gUmV0dXJuIGEgJ2NsZWFuJyBhcnJheQotICAgIHRo
aXMudG9BcnJheSgpIDoKLQotICAgIC8vIFJldHVybiBqdXN0IHRoZSBvYmplY3QKLSAgICAoIG51
bSA8IDAgPyB0aGlzWyB0aGlzLmxlbmd0aCArIG51bSBdIDogdGhpc1sgbnVtIF0gKTsKLSAgICB9
LAotCi0gICAgLy8gVGFrZSBhbiBhcnJheSBvZiBlbGVtZW50cyBhbmQgcHVzaCBpdCBvbnRvIHRo
ZSBzdGFjawotICAgIC8vIChyZXR1cm5pbmcgdGhlIG5ldyBtYXRjaGVkIGVsZW1lbnQgc2V0KQot
ICAgIHB1c2hTdGFjazogZnVuY3Rpb24oIGVsZW1zICkgewotCi0gICAgLy8gQnVpbGQgYSBuZXcg
alF1ZXJ5IG1hdGNoZWQgZWxlbWVudCBzZXQKLSAgICB2YXIgcmV0ID0galF1ZXJ5Lm1lcmdlKCB0
aGlzLmNvbnN0cnVjdG9yKCksIGVsZW1zICk7Ci0KLSAgICAvLyBBZGQgdGhlIG9sZCBvYmplY3Qg
b250byB0aGUgc3RhY2sgKGFzIGEgcmVmZXJlbmNlKQotICAgIHJldC5wcmV2T2JqZWN0ID0gdGhp
czsKLSAgICByZXQuY29udGV4dCA9IHRoaXMuY29udGV4dDsKLQotICAgIC8vIFJldHVybiB0aGUg
bmV3bHktZm9ybWVkIGVsZW1lbnQgc2V0Ci0gICAgcmV0dXJuIHJldDsKLSAgICB9LAotCi0gICAg
Ly8gRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBldmVyeSBlbGVtZW50IGluIHRoZSBtYXRjaGVkIHNl
dC4KLSAgICAvLyAoWW91IGNhbiBzZWVkIHRoZSBhcmd1bWVudHMgd2l0aCBhbiBhcnJheSBvZiBh
cmdzLCBidXQgdGhpcyBpcwotICAgIC8vIG9ubHkgdXNlZCBpbnRlcm5hbGx5LikKLSAgICBlYWNo
OiBmdW5jdGlvbiggY2FsbGJhY2ssIGFyZ3MgKSB7Ci0gICAgcmV0dXJuIGpRdWVyeS5lYWNoKCB0
aGlzLCBjYWxsYmFjaywgYXJncyApOwotICAgIH0sCi0KLSAgICByZWFkeTogZnVuY3Rpb24oIGZu
ICkgewotICAgIC8vIEFkZCB0aGUgY2FsbGJhY2sKLSAgICBqUXVlcnkucmVhZHkucHJvbWlzZSgp
LmRvbmUoIGZuICk7Ci0KLSAgICByZXR1cm4gdGhpczsKLSAgICB9LAotCi0gICAgc2xpY2U6IGZ1
bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggY29yZV9zbGljZS5hcHBseSgg
dGhpcywgYXJndW1lbnRzICkgKTsKLSAgICB9LAotCi0gICAgZmlyc3Q6IGZ1bmN0aW9uKCkgewot
ICAgIHJldHVybiB0aGlzLmVxKCAwICk7Ci0gICAgfSwKLQotICAgIGxhc3Q6IGZ1bmN0aW9uKCkg
ewotICAgIHJldHVybiB0aGlzLmVxKCAtMSApOwotICAgIH0sCi0KLSAgICBlcTogZnVuY3Rpb24o
IGkgKSB7Ci0gICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoLAotICAgIGogPSAraSArICggaSA8IDAg
PyBsZW4gOiAwICk7Ci0gICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqID49IDAgJiYgaiA8IGxl
biA/IFsgdGhpc1tqXSBdIDogW10gKTsKLSAgICB9LAotCi0gICAgbWFwOiBmdW5jdGlvbiggY2Fs
bGJhY2sgKSB7Ci0gICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkubWFwKHRoaXMsIGZ1
bmN0aW9uKCBlbGVtLCBpICkgewotICAgIHJldHVybiBjYWxsYmFjay5jYWxsKCBlbGVtLCBpLCBl
bGVtICk7Ci0gICAgfSkpOwotICAgIH0sCi0KLSAgICBlbmQ6IGZ1bmN0aW9uKCkgewotICAgIHJl
dHVybiB0aGlzLnByZXZPYmplY3QgfHwgdGhpcy5jb25zdHJ1Y3RvcihudWxsKTsKLSAgICB9LAot
Ci0gICAgLy8gRm9yIGludGVybmFsIHVzZSBvbmx5LgotICAgIC8vIEJlaGF2ZXMgbGlrZSBhbiBB
cnJheSdzIG1ldGhvZCwgbm90IGxpa2UgYSBqUXVlcnkgbWV0aG9kLgotICAgIHB1c2g6IGNvcmVf
cHVzaCwKLSAgICBzb3J0OiBbXS5zb3J0LAotICAgIHNwbGljZTogW10uc3BsaWNlCi19OwotCi0v
LyBHaXZlIHRoZSBpbml0IGZ1bmN0aW9uIHRoZSBqUXVlcnkgcHJvdG90eXBlIGZvciBsYXRlciBp
bnN0YW50aWF0aW9uCi1qUXVlcnkuZm4uaW5pdC5wcm90b3R5cGUgPSBqUXVlcnkuZm47Ci0KLWpR
dWVyeS5leHRlbmQgPSBqUXVlcnkuZm4uZXh0ZW5kID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHNy
YywgY29weUlzQXJyYXksIGNvcHksIG5hbWUsIG9wdGlvbnMsIGNsb25lLAotICAgIHRhcmdldCA9
IGFyZ3VtZW50c1swXSB8fCB7fSwKLSAgICBpID0gMSwKLSAgICBsZW5ndGggPSBhcmd1bWVudHMu
bGVuZ3RoLAotICAgIGRlZXAgPSBmYWxzZTsKLQotICAgIC8vIEhhbmRsZSBhIGRlZXAgY29weSBz
aXR1YXRpb24KLSAgICBpZiAoIHR5cGVvZiB0YXJnZXQgPT09ICJib29sZWFuIiApIHsKLSAgICBk
ZWVwID0gdGFyZ2V0OwotICAgIHRhcmdldCA9IGFyZ3VtZW50c1sxXSB8fCB7fTsKLSAgICAvLyBz
a2lwIHRoZSBib29sZWFuIGFuZCB0aGUgdGFyZ2V0Ci0gICAgaSA9IDI7Ci0gICAgfQotCi0gICAg
Ly8gSGFuZGxlIGNhc2Ugd2hlbiB0YXJnZXQgaXMgYSBzdHJpbmcgb3Igc29tZXRoaW5nIChwb3Nz
aWJsZSBpbiBkZWVwIGNvcHkpCi0gICAgaWYgKCB0eXBlb2YgdGFyZ2V0ICE9PSAib2JqZWN0IiAm
JiAhalF1ZXJ5LmlzRnVuY3Rpb24odGFyZ2V0KSApIHsKLSAgICB0YXJnZXQgPSB7fTsKLSAgICB9
Ci0KLSAgICAvLyBleHRlbmQgalF1ZXJ5IGl0c2VsZiBpZiBvbmx5IG9uZSBhcmd1bWVudCBpcyBw
YXNzZWQKLSAgICBpZiAoIGxlbmd0aCA9PT0gaSApIHsKLSAgICB0YXJnZXQgPSB0aGlzOwotICAg
IC0taTsKLSAgICB9Ci0KLSAgICBmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHsKLSAgICAvLyBP
bmx5IGRlYWwgd2l0aCBub24tbnVsbC91bmRlZmluZWQgdmFsdWVzCi0gICAgaWYgKCAob3B0aW9u
cyA9IGFyZ3VtZW50c1sgaSBdKSAhPSBudWxsICkgewotICAgIC8vIEV4dGVuZCB0aGUgYmFzZSBv
YmplY3QKLSAgICBmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7Ci0gICAgc3JjID0gdGFyZ2V0WyBu
YW1lIF07Ci0gICAgY29weSA9IG9wdGlvbnNbIG5hbWUgXTsKLQotICAgIC8vIFByZXZlbnQgbmV2
ZXItZW5kaW5nIGxvb3AKLSAgICBpZiAoIHRhcmdldCA9PT0gY29weSApIHsKLSAgICBjb250aW51
ZTsKLSAgICB9Ci0KLSAgICAvLyBSZWN1cnNlIGlmIHdlJ3JlIG1lcmdpbmcgcGxhaW4gb2JqZWN0
cyBvciBhcnJheXMKLSAgICBpZiAoIGRlZXAgJiYgY29weSAmJiAoIGpRdWVyeS5pc1BsYWluT2Jq
ZWN0KGNvcHkpIHx8IChjb3B5SXNBcnJheSA9IGpRdWVyeS5pc0FycmF5KGNvcHkpKSApICkgewot
ICAgIGlmICggY29weUlzQXJyYXkgKSB7Ci0gICAgY29weUlzQXJyYXkgPSBmYWxzZTsKLSAgICBj
bG9uZSA9IHNyYyAmJiBqUXVlcnkuaXNBcnJheShzcmMpID8gc3JjIDogW107Ci0KLSAgICB9IGVs
c2UgewotICAgIGNsb25lID0gc3JjICYmIGpRdWVyeS5pc1BsYWluT2JqZWN0KHNyYykgPyBzcmMg
OiB7fTsKLSAgICB9Ci0KLSAgICAvLyBOZXZlciBtb3ZlIG9yaWdpbmFsIG9iamVjdHMsIGNsb25l
IHRoZW0KLSAgICB0YXJnZXRbIG5hbWUgXSA9IGpRdWVyeS5leHRlbmQoIGRlZXAsIGNsb25lLCBj
b3B5ICk7Ci0KLSAgICAvLyBEb24ndCBicmluZyBpbiB1bmRlZmluZWQgdmFsdWVzCi0gICAgfSBl
bHNlIGlmICggY29weSAhPT0gdW5kZWZpbmVkICkgewotICAgIHRhcmdldFsgbmFtZSBdID0gY29w
eTsKLSAgICB9Ci0gICAgfQotICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gdGhlIG1vZGlm
aWVkIG9iamVjdAotICAgIHJldHVybiB0YXJnZXQ7Ci19OwotCi1qUXVlcnkuZXh0ZW5kKHsKLSAg
ICBub0NvbmZsaWN0OiBmdW5jdGlvbiggZGVlcCApIHsKLSAgICBpZiAoIHdpbmRvdy4kID09PSBq
UXVlcnkgKSB7Ci0gICAgd2luZG93LiQgPSBfJDsKLSAgICB9Ci0KLSAgICBpZiAoIGRlZXAgJiYg
d2luZG93LmpRdWVyeSA9PT0galF1ZXJ5ICkgewotICAgIHdpbmRvdy5qUXVlcnkgPSBfalF1ZXJ5
OwotICAgIH0KLQotICAgIHJldHVybiBqUXVlcnk7Ci0gICAgfSwKLQotICAgIC8vIElzIHRoZSBE
T00gcmVhZHkgdG8gYmUgdXNlZD8gU2V0IHRvIHRydWUgb25jZSBpdCBvY2N1cnMuCi0gICAgaXNS
ZWFkeTogZmFsc2UsCi0KLSAgICAvLyBBIGNvdW50ZXIgdG8gdHJhY2sgaG93IG1hbnkgaXRlbXMg
dG8gd2FpdCBmb3IgYmVmb3JlCi0gICAgLy8gdGhlIHJlYWR5IGV2ZW50IGZpcmVzLiBTZWUgIzY3
ODEKLSAgICByZWFkeVdhaXQ6IDEsCi0KLSAgICAvLyBIb2xkIChvciByZWxlYXNlKSB0aGUgcmVh
ZHkgZXZlbnQKLSAgICBob2xkUmVhZHk6IGZ1bmN0aW9uKCBob2xkICkgewotICAgIGlmICggaG9s
ZCApIHsKLSAgICBqUXVlcnkucmVhZHlXYWl0Kys7Ci0gICAgfSBlbHNlIHsKLSAgICBqUXVlcnku
cmVhZHkoIHRydWUgKTsKLSAgICB9Ci0gICAgfSwKLQotICAgIC8vIEhhbmRsZSB3aGVuIHRoZSBE
T00gaXMgcmVhZHkKLSAgICByZWFkeTogZnVuY3Rpb24oIHdhaXQgKSB7Ci0KLSAgICAvLyBBYm9y
dCBpZiB0aGVyZSBhcmUgcGVuZGluZyBob2xkcyBvciB3ZSdyZSBhbHJlYWR5IHJlYWR5Ci0gICAg
aWYgKCB3YWl0ID09PSB0cnVlID8gLS1qUXVlcnkucmVhZHlXYWl0IDogalF1ZXJ5LmlzUmVhZHkg
KSB7Ci0gICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIE1ha2Ugc3VyZSBib2R5IGV4aXN0cywg
YXQgbGVhc3QsIGluIGNhc2UgSUUgZ2V0cyBhIGxpdHRsZSBvdmVyemVhbG91cyAodGlja2V0ICM1
NDQzKS4KLSAgICBpZiAoICFkb2N1bWVudC5ib2R5ICkgewotICAgIHJldHVybiBzZXRUaW1lb3V0
KCBqUXVlcnkucmVhZHkgKTsKLSAgICB9Ci0KLSAgICAvLyBSZW1lbWJlciB0aGF0IHRoZSBET00g
aXMgcmVhZHkKLSAgICBqUXVlcnkuaXNSZWFkeSA9IHRydWU7Ci0KLSAgICAvLyBJZiBhIG5vcm1h
bCBET00gUmVhZHkgZXZlbnQgZmlyZWQsIGRlY3JlbWVudCwgYW5kIHdhaXQgaWYgbmVlZCBiZQot
ICAgIGlmICggd2FpdCAhPT0gdHJ1ZSAmJiAtLWpRdWVyeS5yZWFkeVdhaXQgPiAwICkgewotICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGVyZSBhcmUgZnVuY3Rpb25zIGJvdW5kLCB0
byBleGVjdXRlCi0gICAgcmVhZHlMaXN0LnJlc29sdmVXaXRoKCBkb2N1bWVudCwgWyBqUXVlcnkg
XSApOwotCi0gICAgLy8gVHJpZ2dlciBhbnkgYm91bmQgcmVhZHkgZXZlbnRzCi0gICAgaWYgKCBq
UXVlcnkuZm4udHJpZ2dlciApIHsKLSAgICBqUXVlcnkoIGRvY3VtZW50ICkudHJpZ2dlcigicmVh
ZHkiKS5vZmYoInJlYWR5Iik7Ci0gICAgfQotICAgIH0sCi0KLSAgICAvLyBTZWUgdGVzdC91bml0
L2NvcmUuanMgZm9yIGRldGFpbHMgY29uY2VybmluZyBpc0Z1bmN0aW9uLgotICAgIC8vIFNpbmNl
IHZlcnNpb24gMS4zLCBET00gbWV0aG9kcyBhbmQgZnVuY3Rpb25zIGxpa2UgYWxlcnQKLSAgICAv
LyBhcmVuJ3Qgc3VwcG9ydGVkLiBUaGV5IHJldHVybiBmYWxzZSBvbiBJRSAoIzI5NjgpLgotICAg
IGlzRnVuY3Rpb246IGZ1bmN0aW9uKCBvYmogKSB7Ci0gICAgcmV0dXJuIGpRdWVyeS50eXBlKG9i
aikgPT09ICJmdW5jdGlvbiI7Ci0gICAgfSwKLQotICAgIGlzQXJyYXk6IEFycmF5LmlzQXJyYXkg
fHwgZnVuY3Rpb24oIG9iaiApIHsKLSAgICByZXR1cm4galF1ZXJ5LnR5cGUob2JqKSA9PT0gImFy
cmF5IjsKLSAgICB9LAotCi0gICAgaXNXaW5kb3c6IGZ1bmN0aW9uKCBvYmogKSB7Ci0gICAgcmV0
dXJuIG9iaiAhPSBudWxsICYmIG9iaiA9PSBvYmoud2luZG93OwotICAgIH0sCi0KLSAgICBpc051
bWVyaWM6IGZ1bmN0aW9uKCBvYmogKSB7Ci0gICAgcmV0dXJuICFpc05hTiggcGFyc2VGbG9hdChv
YmopICkgJiYgaXNGaW5pdGUoIG9iaiApOwotICAgIH0sCi0KLSAgICB0eXBlOiBmdW5jdGlvbigg
b2JqICkgewotICAgIGlmICggb2JqID09IG51bGwgKSB7Ci0gICAgcmV0dXJuIFN0cmluZyggb2Jq
ICk7Ci0gICAgfQotICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSAib2JqZWN0IiB8fCB0eXBlb2Yg
b2JqID09PSAiZnVuY3Rpb24iID8KLSAgICBjbGFzczJ0eXBlWyBjb3JlX3RvU3RyaW5nLmNhbGwo
b2JqKSBdIHx8ICJvYmplY3QiIDoKLSAgICB0eXBlb2Ygb2JqOwotICAgIH0sCi0KLSAgICBpc1Bs
YWluT2JqZWN0OiBmdW5jdGlvbiggb2JqICkgewotICAgIC8vIE11c3QgYmUgYW4gT2JqZWN0Lgot
ICAgIC8vIEJlY2F1c2Ugb2YgSUUsIHdlIGFsc28gaGF2ZSB0byBjaGVjayB0aGUgcHJlc2VuY2Ug
b2YgdGhlIGNvbnN0cnVjdG9yIHByb3BlcnR5LgotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IERPTSBu
b2RlcyBhbmQgd2luZG93IG9iamVjdHMgZG9uJ3QgcGFzcyB0aHJvdWdoLCBhcyB3ZWxsCi0gICAg
aWYgKCAhb2JqIHx8IGpRdWVyeS50eXBlKG9iaikgIT09ICJvYmplY3QiIHx8IG9iai5ub2RlVHlw
ZSB8fCBqUXVlcnkuaXNXaW5kb3coIG9iaiApICkgewotICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICB0cnkgewotICAgIC8vIE5vdCBvd24gY29uc3RydWN0b3IgcHJvcGVydHkgbXVzdCBi
ZSBPYmplY3QKLSAgICBpZiAoIG9iai5jb25zdHJ1Y3RvciAmJgotICAgICFjb3JlX2hhc093bi5j
YWxsKG9iaiwgImNvbnN0cnVjdG9yIikgJiYKLSAgICAhY29yZV9oYXNPd24uY2FsbChvYmouY29u
c3RydWN0b3IucHJvdG90eXBlLCAiaXNQcm90b3R5cGVPZiIpICkgewotICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0gICAgfSBjYXRjaCAoIGUgKSB7Ci0gICAgLy8gSUU4LDkgV2lsbCB0aHJvdyBl
eGNlcHRpb25zIG9uIGNlcnRhaW4gaG9zdCBvYmplY3RzICM5ODk3Ci0gICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIC8vIE93biBwcm9wZXJ0aWVzIGFyZSBlbnVtZXJhdGVkIGZpcnN0bHks
IHNvIHRvIHNwZWVkIHVwLAotICAgIC8vIGlmIGxhc3Qgb25lIGlzIG93biwgdGhlbiBhbGwgcHJv
cGVydGllcyBhcmUgb3duLgotCi0gICAgdmFyIGtleTsKLSAgICBmb3IgKCBrZXkgaW4gb2JqICkg
e30KLQotICAgIHJldHVybiBrZXkgPT09IHVuZGVmaW5lZCB8fCBjb3JlX2hhc093bi5jYWxsKCBv
YmosIGtleSApOwotICAgIH0sCi0KLSAgICBpc0VtcHR5T2JqZWN0OiBmdW5jdGlvbiggb2JqICkg
ewotICAgIHZhciBuYW1lOwotICAgIGZvciAoIG5hbWUgaW4gb2JqICkgewotICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gICAgfSwKLQotICAgIGVycm9yOiBmdW5j
dGlvbiggbXNnICkgewotICAgIHRocm93IG5ldyBFcnJvciggbXNnICk7Ci0gICAgfSwKLQotICAg
IC8vIGRhdGE6IHN0cmluZyBvZiBodG1sCi0gICAgLy8gY29udGV4dCAob3B0aW9uYWwpOiBJZiBz
cGVjaWZpZWQsIHRoZSBmcmFnbWVudCB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhpcyBjb250ZXh0LCBk
ZWZhdWx0cyB0byBkb2N1bWVudAotICAgIC8vIGtlZXBTY3JpcHRzIChvcHRpb25hbCk6IElmIHRy
dWUsIHdpbGwgaW5jbHVkZSBzY3JpcHRzIHBhc3NlZCBpbiB0aGUgaHRtbCBzdHJpbmcKLSAgICBw
YXJzZUhUTUw6IGZ1bmN0aW9uKCBkYXRhLCBjb250ZXh0LCBrZWVwU2NyaXB0cyApIHsKLSAgICBp
ZiAoICFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSAic3RyaW5nIiApIHsKLSAgICByZXR1cm4gbnVs
bDsKLSAgICB9Ci0gICAgaWYgKCB0eXBlb2YgY29udGV4dCA9PT0gImJvb2xlYW4iICkgewotICAg
IGtlZXBTY3JpcHRzID0gY29udGV4dDsKLSAgICBjb250ZXh0ID0gZmFsc2U7Ci0gICAgfQotICAg
IGNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50OwotCi0gICAgdmFyIHBhcnNlZCA9IHJzaW5n
bGVUYWcuZXhlYyggZGF0YSApLAotICAgIHNjcmlwdHMgPSAha2VlcFNjcmlwdHMgJiYgW107Ci0K
LSAgICAvLyBTaW5nbGUgdGFnCi0gICAgaWYgKCBwYXJzZWQgKSB7Ci0gICAgcmV0dXJuIFsgY29u
dGV4dC5jcmVhdGVFbGVtZW50KCBwYXJzZWRbMV0gKSBdOwotICAgIH0KLQotICAgIHBhcnNlZCA9
IGpRdWVyeS5idWlsZEZyYWdtZW50KCBbIGRhdGEgXSwgY29udGV4dCwgc2NyaXB0cyApOwotICAg
IGlmICggc2NyaXB0cyApIHsKLSAgICBqUXVlcnkoIHNjcmlwdHMgKS5yZW1vdmUoKTsKLSAgICB9
Ci0gICAgcmV0dXJuIGpRdWVyeS5tZXJnZSggW10sIHBhcnNlZC5jaGlsZE5vZGVzICk7Ci0gICAg
fSwKLQotICAgIHBhcnNlSlNPTjogZnVuY3Rpb24oIGRhdGEgKSB7Ci0gICAgLy8gQXR0ZW1wdCB0
byBwYXJzZSB1c2luZyB0aGUgbmF0aXZlIEpTT04gcGFyc2VyIGZpcnN0Ci0gICAgaWYgKCB3aW5k
b3cuSlNPTiAmJiB3aW5kb3cuSlNPTi5wYXJzZSApIHsKLSAgICByZXR1cm4gd2luZG93LkpTT04u
cGFyc2UoIGRhdGEgKTsKLSAgICB9Ci0KLSAgICBpZiAoIGRhdGEgPT09IG51bGwgKSB7Ci0gICAg
cmV0dXJuIGRhdGE7Ci0gICAgfQotCi0gICAgaWYgKCB0eXBlb2YgZGF0YSA9PT0gInN0cmluZyIg
KSB7Ci0KLSAgICAvLyBNYWtlIHN1cmUgbGVhZGluZy90cmFpbGluZyB3aGl0ZXNwYWNlIGlzIHJl
bW92ZWQgKElFIGNhbid0IGhhbmRsZSBpdCkKLSAgICBkYXRhID0galF1ZXJ5LnRyaW0oIGRhdGEg
KTsKLQotICAgIGlmICggZGF0YSApIHsKLSAgICAvLyBNYWtlIHN1cmUgdGhlIGluY29taW5nIGRh
dGEgaXMgYWN0dWFsIEpTT04KLSAgICAvLyBMb2dpYyBib3Jyb3dlZCBmcm9tIGh0dHA6Ly9qc29u
Lm9yZy9qc29uMi5qcwotICAgIGlmICggcnZhbGlkY2hhcnMudGVzdCggZGF0YS5yZXBsYWNlKCBy
dmFsaWRlc2NhcGUsICJAIiApCi0gICAgLnJlcGxhY2UoIHJ2YWxpZHRva2VucywgIl0iICkKLSAg
ICAucmVwbGFjZSggcnZhbGlkYnJhY2VzLCAiIikpICkgewotCi0gICAgcmV0dXJuICggbmV3IEZ1
bmN0aW9uKCAicmV0dXJuICIgKyBkYXRhICkgKSgpOwotICAgIH0KLSAgICB9Ci0gICAgfQotCi0g
ICAgalF1ZXJ5LmVycm9yKCAiSW52YWxpZCBKU09OOiAiICsgZGF0YSApOwotICAgIH0sCi0KLSAg
ICAvLyBDcm9zcy1icm93c2VyIHhtbCBwYXJzaW5nCi0gICAgcGFyc2VYTUw6IGZ1bmN0aW9uKCBk
YXRhICkgewotICAgIHZhciB4bWwsIHRtcDsKLSAgICBpZiAoICFkYXRhIHx8IHR5cGVvZiBkYXRh
ICE9PSAic3RyaW5nIiApIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gICAgdHJ5IHsKLSAg
ICBpZiAoIHdpbmRvdy5ET01QYXJzZXIgKSB7IC8vIFN0YW5kYXJkCi0gICAgdG1wID0gbmV3IERP
TVBhcnNlcigpOwotICAgIHhtbCA9IHRtcC5wYXJzZUZyb21TdHJpbmcoIGRhdGEgLCAidGV4dC94
bWwiICk7Ci0gICAgfSBlbHNlIHsgLy8gSUUKLSAgICB4bWwgPSBuZXcgQWN0aXZlWE9iamVjdCgg
Ik1pY3Jvc29mdC5YTUxET00iICk7Ci0gICAgeG1sLmFzeW5jID0gImZhbHNlIjsKLSAgICB4bWwu
bG9hZFhNTCggZGF0YSApOwotICAgIH0KLSAgICB9IGNhdGNoKCBlICkgewotICAgIHhtbCA9IHVu
ZGVmaW5lZDsKLSAgICB9Ci0gICAgaWYgKCAheG1sIHx8ICF4bWwuZG9jdW1lbnRFbGVtZW50IHx8
IHhtbC5nZXRFbGVtZW50c0J5VGFnTmFtZSggInBhcnNlcmVycm9yIiApLmxlbmd0aCApIHsKLSAg
ICBqUXVlcnkuZXJyb3IoICJJbnZhbGlkIFhNTDogIiArIGRhdGEgKTsKLSAgICB9Ci0gICAgcmV0
dXJuIHhtbDsKLSAgICB9LAotCi0gICAgbm9vcDogZnVuY3Rpb24oKSB7fSwKLQotICAgIC8vIEV2
YWx1YXRlcyBhIHNjcmlwdCBpbiBhIGdsb2JhbCBjb250ZXh0Ci0gICAgLy8gV29ya2Fyb3VuZHMg
YmFzZWQgb24gZmluZGluZ3MgYnkgSmltIERyaXNjb2xsCi0gICAgLy8gaHR0cDovL3dlYmxvZ3Mu
amF2YS5uZXQvYmxvZy9kcmlzY29sbC9hcmNoaXZlLzIwMDkvMDkvMDgvZXZhbC1qYXZhc2NyaXB0
LWdsb2JhbC1jb250ZXh0Ci0gICAgZ2xvYmFsRXZhbDogZnVuY3Rpb24oIGRhdGEgKSB7Ci0gICAg
aWYgKCBkYXRhICYmIGpRdWVyeS50cmltKCBkYXRhICkgKSB7Ci0gICAgLy8gV2UgdXNlIGV4ZWNT
Y3JpcHQgb24gSW50ZXJuZXQgRXhwbG9yZXIKLSAgICAvLyBXZSB1c2UgYW4gYW5vbnltb3VzIGZ1
bmN0aW9uIHNvIHRoYXQgY29udGV4dCBpcyB3aW5kb3cKLSAgICAvLyByYXRoZXIgdGhhbiBqUXVl
cnkgaW4gRmlyZWZveAotICAgICggd2luZG93LmV4ZWNTY3JpcHQgfHwgZnVuY3Rpb24oIGRhdGEg
KSB7Ci0gICAgd2luZG93WyAiZXZhbCIgXS5jYWxsKCB3aW5kb3csIGRhdGEgKTsKLSAgICB9ICko
IGRhdGEgKTsKLSAgICB9Ci0gICAgfSwKLQotICAgIC8vIENvbnZlcnQgZGFzaGVkIHRvIGNhbWVs
Q2FzZTsgdXNlZCBieSB0aGUgY3NzIGFuZCBkYXRhIG1vZHVsZXMKLSAgICAvLyBNaWNyb3NvZnQg
Zm9yZ290IHRvIGh1bXAgdGhlaXIgdmVuZG9yIHByZWZpeCAoIzk1NzIpCi0gICAgY2FtZWxDYXNl
OiBmdW5jdGlvbiggc3RyaW5nICkgewotICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSggcm1zUHJl
Zml4LCAibXMtIiApLnJlcGxhY2UoIHJkYXNoQWxwaGEsIGZjYW1lbENhc2UgKTsKLSAgICB9LAot
Ci0gICAgbm9kZU5hbWU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewotICAgIHJldHVybiBlbGVt
Lm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2Vy
Q2FzZSgpOwotICAgIH0sCi0KLSAgICAvLyBhcmdzIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5
Ci0gICAgZWFjaDogZnVuY3Rpb24oIG9iaiwgY2FsbGJhY2ssIGFyZ3MgKSB7Ci0gICAgdmFyIHZh
bHVlLAotICAgIGkgPSAwLAotICAgIGxlbmd0aCA9IG9iai5sZW5ndGgsCi0gICAgaXNBcnJheSA9
IGlzQXJyYXlsaWtlKCBvYmogKTsKLQotICAgIGlmICggYXJncyApIHsKLSAgICBpZiAoIGlzQXJy
YXkgKSB7Ci0gICAgZm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7Ci0gICAgdmFsdWUgPSBjYWxs
YmFjay5hcHBseSggb2JqWyBpIF0sIGFyZ3MgKTsKLQotICAgIGlmICggdmFsdWUgPT09IGZhbHNl
ICkgewotICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICBmb3IgKCBp
IGluIG9iaiApIHsKLSAgICB2YWx1ZSA9IGNhbGxiYWNrLmFwcGx5KCBvYmpbIGkgXSwgYXJncyAp
OwotCi0gICAgaWYgKCB2YWx1ZSA9PT0gZmFsc2UgKSB7Ci0gICAgYnJlYWs7Ci0gICAgfQotICAg
IH0KLSAgICB9Ci0KLSAgICAvLyBBIHNwZWNpYWwsIGZhc3QsIGNhc2UgZm9yIHRoZSBtb3N0IGNv
bW1vbiB1c2Ugb2YgZWFjaAotICAgIH0gZWxzZSB7Ci0gICAgaWYgKCBpc0FycmF5ICkgewotICAg
IGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkgewotICAgIHZhbHVlID0gY2FsbGJhY2suY2FsbCgg
b2JqWyBpIF0sIGksIG9ialsgaSBdICk7Ci0KLSAgICBpZiAoIHZhbHVlID09PSBmYWxzZSApIHsK
LSAgICBicmVhazsKLSAgICB9Ci0gICAgfQotICAgIH0gZWxzZSB7Ci0gICAgZm9yICggaSBpbiBv
YmogKSB7Ci0gICAgdmFsdWUgPSBjYWxsYmFjay5jYWxsKCBvYmpbIGkgXSwgaSwgb2JqWyBpIF0g
KTsKLQotICAgIGlmICggdmFsdWUgPT09IGZhbHNlICkgewotICAgIGJyZWFrOwotICAgIH0KLSAg
ICB9Ci0gICAgfQotICAgIH0KLQotICAgIHJldHVybiBvYmo7Ci0gICAgfSwKLQotICAgIC8vIFVz
ZSBuYXRpdmUgU3RyaW5nLnRyaW0gZnVuY3Rpb24gd2hlcmV2ZXIgcG9zc2libGUKLSAgICB0cmlt
OiBjb3JlX3RyaW0gJiYgIWNvcmVfdHJpbS5jYWxsKCJcdUZFRkZceEEwIikgPwotICAgIGZ1bmN0
aW9uKCB0ZXh0ICkgewotICAgIHJldHVybiB0ZXh0ID09IG51bGwgPwotICAgICIiIDoKLSAgICBj
b3JlX3RyaW0uY2FsbCggdGV4dCApOwotICAgIH0gOgotCi0gICAgLy8gT3RoZXJ3aXNlIHVzZSBv
dXIgb3duIHRyaW1taW5nIGZ1bmN0aW9uYWxpdHkKLSAgICBmdW5jdGlvbiggdGV4dCApIHsKLSAg
ICByZXR1cm4gdGV4dCA9PSBudWxsID8KLSAgICAiIiA6Ci0gICAgKCB0ZXh0ICsgIiIgKS5yZXBs
YWNlKCBydHJpbSwgIiIgKTsKLSAgICB9LAotCi0gICAgLy8gcmVzdWx0cyBpcyBmb3IgaW50ZXJu
YWwgdXNhZ2Ugb25seQotICAgIG1ha2VBcnJheTogZnVuY3Rpb24oIGFyciwgcmVzdWx0cyApIHsK
LSAgICB2YXIgcmV0ID0gcmVzdWx0cyB8fCBbXTsKLQotICAgIGlmICggYXJyICE9IG51bGwgKSB7
Ci0gICAgaWYgKCBpc0FycmF5bGlrZSggT2JqZWN0KGFycikgKSApIHsKLSAgICBqUXVlcnkubWVy
Z2UoIHJldCwKLSAgICB0eXBlb2YgYXJyID09PSAic3RyaW5nIiA/Ci0gICAgWyBhcnIgXSA6IGFy
cgotICAgICk7Ci0gICAgfSBlbHNlIHsKLSAgICBjb3JlX3B1c2guY2FsbCggcmV0LCBhcnIgKTsK
LSAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldDsKLSAgICB9LAotCi0gICAgaW5BcnJheTog
ZnVuY3Rpb24oIGVsZW0sIGFyciwgaSApIHsKLSAgICB2YXIgbGVuOwotCi0gICAgaWYgKCBhcnIg
KSB7Ci0gICAgaWYgKCBjb3JlX2luZGV4T2YgKSB7Ci0gICAgcmV0dXJuIGNvcmVfaW5kZXhPZi5j
YWxsKCBhcnIsIGVsZW0sIGkgKTsKLSAgICB9Ci0KLSAgICBsZW4gPSBhcnIubGVuZ3RoOwotICAg
IGkgPSBpID8gaSA8IDAgPyBNYXRoLm1heCggMCwgbGVuICsgaSApIDogaSA6IDA7Ci0KLSAgICBm
b3IgKCA7IGkgPCBsZW47IGkrKyApIHsKLSAgICAvLyBTa2lwIGFjY2Vzc2luZyBpbiBzcGFyc2Ug
YXJyYXlzCi0gICAgaWYgKCBpIGluIGFyciAmJiBhcnJbIGkgXSA9PT0gZWxlbSApIHsKLSAgICBy
ZXR1cm4gaTsKLSAgICB9Ci0gICAgfQotICAgIH0KLQotICAgIHJldHVybiAtMTsKLSAgICB9LAot
Ci0gICAgbWVyZ2U6IGZ1bmN0aW9uKCBmaXJzdCwgc2Vjb25kICkgewotICAgIHZhciBsID0gc2Vj
b25kLmxlbmd0aCwKLSAgICBpID0gZmlyc3QubGVuZ3RoLAotICAgIGogPSAwOwotCi0gICAgaWYg
KCB0eXBlb2YgbCA9PT0gIm51bWJlciIgKSB7Ci0gICAgZm9yICggOyBqIDwgbDsgaisrICkgewot
ICAgIGZpcnN0WyBpKysgXSA9IHNlY29uZFsgaiBdOwotICAgIH0KLSAgICB9IGVsc2UgewotICAg
IHdoaWxlICggc2Vjb25kW2pdICE9PSB1bmRlZmluZWQgKSB7Ci0gICAgZmlyc3RbIGkrKyBdID0g
c2Vjb25kWyBqKysgXTsKLSAgICB9Ci0gICAgfQotCi0gICAgZmlyc3QubGVuZ3RoID0gaTsKLQot
ICAgIHJldHVybiBmaXJzdDsKLSAgICB9LAotCi0gICAgZ3JlcDogZnVuY3Rpb24oIGVsZW1zLCBj
YWxsYmFjaywgaW52ICkgewotICAgIHZhciByZXRWYWwsCi0gICAgcmV0ID0gW10sCi0gICAgaSA9
IDAsCi0gICAgbGVuZ3RoID0gZWxlbXMubGVuZ3RoOwotICAgIGludiA9ICEhaW52OwotCi0gICAg
Ly8gR28gdGhyb3VnaCB0aGUgYXJyYXksIG9ubHkgc2F2aW5nIHRoZSBpdGVtcwotICAgIC8vIHRo
YXQgcGFzcyB0aGUgdmFsaWRhdG9yIGZ1bmN0aW9uCi0gICAgZm9yICggOyBpIDwgbGVuZ3RoOyBp
KysgKSB7Ci0gICAgcmV0VmFsID0gISFjYWxsYmFjayggZWxlbXNbIGkgXSwgaSApOwotICAgIGlm
ICggaW52ICE9PSByZXRWYWwgKSB7Ci0gICAgcmV0LnB1c2goIGVsZW1zWyBpIF0gKTsKLSAgICB9
Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldDsKLSAgICB9LAotCi0gICAgLy8gYXJnIGlzIGZvciBp
bnRlcm5hbCB1c2FnZSBvbmx5Ci0gICAgbWFwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBh
cmcgKSB7Ci0gICAgdmFyIHZhbHVlLAotICAgIGkgPSAwLAotICAgIGxlbmd0aCA9IGVsZW1zLmxl
bmd0aCwKLSAgICBpc0FycmF5ID0gaXNBcnJheWxpa2UoIGVsZW1zICksCi0gICAgcmV0ID0gW107
Ci0KLSAgICAvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgdHJhbnNsYXRpbmcgZWFjaCBvZiB0aGUg
aXRlbXMgdG8gdGhlaXIKLSAgICBpZiAoIGlzQXJyYXkgKSB7Ci0gICAgZm9yICggOyBpIDwgbGVu
Z3RoOyBpKysgKSB7Ci0gICAgdmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7
Ci0KLSAgICBpZiAoIHZhbHVlICE9IG51bGwgKSB7Ci0gICAgcmV0WyByZXQubGVuZ3RoIF0gPSB2
YWx1ZTsKLSAgICB9Ci0gICAgfQotCi0gICAgLy8gR28gdGhyb3VnaCBldmVyeSBrZXkgb24gdGhl
IG9iamVjdCwKLSAgICB9IGVsc2UgewotICAgIGZvciAoIGkgaW4gZWxlbXMgKSB7Ci0gICAgdmFs
dWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7Ci0KLSAgICBpZiAoIHZhbHVlICE9
IG51bGwgKSB7Ci0gICAgcmV0WyByZXQubGVuZ3RoIF0gPSB2YWx1ZTsKLSAgICB9Ci0gICAgfQot
ICAgIH0KLQotICAgIC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXMKLSAgICByZXR1cm4gY29y
ZV9jb25jYXQuYXBwbHkoIFtdLCByZXQgKTsKLSAgICB9LAotCi0gICAgLy8gQSBnbG9iYWwgR1VJ
RCBjb3VudGVyIGZvciBvYmplY3RzCi0gICAgZ3VpZDogMSwKLQotICAgIC8vIEJpbmQgYSBmdW5j
dGlvbiB0byBhIGNvbnRleHQsIG9wdGlvbmFsbHkgcGFydGlhbGx5IGFwcGx5aW5nIGFueQotICAg
IC8vIGFyZ3VtZW50cy4KLSAgICBwcm94eTogZnVuY3Rpb24oIGZuLCBjb250ZXh0ICkgewotICAg
IHZhciBhcmdzLCBwcm94eSwgdG1wOwotCi0gICAgaWYgKCB0eXBlb2YgY29udGV4dCA9PT0gInN0
cmluZyIgKSB7Ci0gICAgdG1wID0gZm5bIGNvbnRleHQgXTsKLSAgICBjb250ZXh0ID0gZm47Ci0g
ICAgZm4gPSB0bXA7Ci0gICAgfQotCi0gICAgLy8gUXVpY2sgY2hlY2sgdG8gZGV0ZXJtaW5lIGlm
IHRhcmdldCBpcyBjYWxsYWJsZSwgaW4gdGhlIHNwZWMKLSAgICAvLyB0aGlzIHRocm93cyBhIFR5
cGVFcnJvciwgYnV0IHdlIHdpbGwganVzdCByZXR1cm4gdW5kZWZpbmVkLgotICAgIGlmICggIWpR
dWVyeS5pc0Z1bmN0aW9uKCBmbiApICkgewotICAgIHJldHVybiB1bmRlZmluZWQ7Ci0gICAgfQot
Ci0gICAgLy8gU2ltdWxhdGVkIGJpbmQKLSAgICBhcmdzID0gY29yZV9zbGljZS5jYWxsKCBhcmd1
bWVudHMsIDIgKTsKLSAgICBwcm94eSA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBmbi5hcHBs
eSggY29udGV4dCB8fCB0aGlzLCBhcmdzLmNvbmNhdCggY29yZV9zbGljZS5jYWxsKCBhcmd1bWVu
dHMgKSApICk7Ci0gICAgfTsKLQotICAgIC8vIFNldCB0aGUgZ3VpZCBvZiB1bmlxdWUgaGFuZGxl
ciB0byB0aGUgc2FtZSBvZiBvcmlnaW5hbCBoYW5kbGVyLCBzbyBpdCBjYW4gYmUgcmVtb3ZlZAot
ICAgIHByb3h5Lmd1aWQgPSBmbi5ndWlkID0gZm4uZ3VpZCB8fCBqUXVlcnkuZ3VpZCsrOwotCi0g
ICAgcmV0dXJuIHByb3h5OwotICAgIH0sCi0KLSAgICAvLyBNdWx0aWZ1bmN0aW9uYWwgbWV0aG9k
IHRvIGdldCBhbmQgc2V0IHZhbHVlcyBvZiBhIGNvbGxlY3Rpb24KLSAgICAvLyBUaGUgdmFsdWUv
cyBjYW4gb3B0aW9uYWxseSBiZSBleGVjdXRlZCBpZiBpdCdzIGEgZnVuY3Rpb24KLSAgICBhY2Nl
c3M6IGZ1bmN0aW9uKCBlbGVtcywgZm4sIGtleSwgdmFsdWUsIGNoYWluYWJsZSwgZW1wdHlHZXQs
IHJhdyApIHsKLSAgICB2YXIgaSA9IDAsCi0gICAgbGVuZ3RoID0gZWxlbXMubGVuZ3RoLAotICAg
IGJ1bGsgPSBrZXkgPT0gbnVsbDsKLQotICAgIC8vIFNldHMgbWFueSB2YWx1ZXMKLSAgICBpZiAo
IGpRdWVyeS50eXBlKCBrZXkgKSA9PT0gIm9iamVjdCIgKSB7Ci0gICAgY2hhaW5hYmxlID0gdHJ1
ZTsKLSAgICBmb3IgKCBpIGluIGtleSApIHsKLSAgICBqUXVlcnkuYWNjZXNzKCBlbGVtcywgZm4s
IGksIGtleVtpXSwgdHJ1ZSwgZW1wdHlHZXQsIHJhdyApOwotICAgIH0KLQotICAgIC8vIFNldHMg
b25lIHZhbHVlCi0gICAgfSBlbHNlIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHsKLSAgICBj
aGFpbmFibGUgPSB0cnVlOwotCi0gICAgaWYgKCAhalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkg
KSB7Ci0gICAgcmF3ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoIGJ1bGsgKSB7Ci0gICAgLy8g
QnVsayBvcGVyYXRpb25zIHJ1biBhZ2FpbnN0IHRoZSBlbnRpcmUgc2V0Ci0gICAgaWYgKCByYXcg
KSB7Ci0gICAgZm4uY2FsbCggZWxlbXMsIHZhbHVlICk7Ci0gICAgZm4gPSBudWxsOwotCi0gICAg
Ly8gLi4uZXhjZXB0IHdoZW4gZXhlY3V0aW5nIGZ1bmN0aW9uIHZhbHVlcwotICAgIH0gZWxzZSB7
Ci0gICAgYnVsayA9IGZuOwotICAgIGZuID0gZnVuY3Rpb24oIGVsZW0sIGtleSwgdmFsdWUgKSB7
Ci0gICAgcmV0dXJuIGJ1bGsuY2FsbCggalF1ZXJ5KCBlbGVtICksIHZhbHVlICk7Ci0gICAgfTsK
LSAgICB9Ci0gICAgfQotCi0gICAgaWYgKCBmbiApIHsKLSAgICBmb3IgKCA7IGkgPCBsZW5ndGg7
IGkrKyApIHsKLSAgICBmbiggZWxlbXNbaV0sIGtleSwgcmF3ID8gdmFsdWUgOiB2YWx1ZS5jYWxs
KCBlbGVtc1tpXSwgaSwgZm4oIGVsZW1zW2ldLCBrZXkgKSApICk7Ci0gICAgfQotICAgIH0KLSAg
ICB9Ci0KLSAgICByZXR1cm4gY2hhaW5hYmxlID8KLSAgICBlbGVtcyA6Ci0KLSAgICAvLyBHZXRz
Ci0gICAgYnVsayA/Ci0gICAgZm4uY2FsbCggZWxlbXMgKSA6Ci0gICAgbGVuZ3RoID8gZm4oIGVs
ZW1zWzBdLCBrZXkgKSA6IGVtcHR5R2V0OwotICAgIH0sCi0KLSAgICBub3c6IGZ1bmN0aW9uKCkg
ewotICAgIHJldHVybiAoIG5ldyBEYXRlKCkgKS5nZXRUaW1lKCk7Ci0gICAgfQotfSk7Ci0KLWpR
dWVyeS5yZWFkeS5wcm9taXNlID0gZnVuY3Rpb24oIG9iaiApIHsKLSAgICBpZiAoICFyZWFkeUxp
c3QgKSB7Ci0KLSAgICByZWFkeUxpc3QgPSBqUXVlcnkuRGVmZXJyZWQoKTsKLQotICAgIC8vIENh
dGNoIGNhc2VzIHdoZXJlICQoZG9jdW1lbnQpLnJlYWR5KCkgaXMgY2FsbGVkIGFmdGVyIHRoZSBi
cm93c2VyIGV2ZW50IGhhcyBhbHJlYWR5IG9jY3VycmVkLgotICAgIC8vIHdlIG9uY2UgdHJpZWQg
dG8gdXNlIHJlYWR5U3RhdGUgImludGVyYWN0aXZlIiBoZXJlLCBidXQgaXQgY2F1c2VkIGlzc3Vl
cyBsaWtlIHRoZSBvbmUKLSAgICAvLyBkaXNjb3ZlcmVkIGJ5IENocmlzUyBoZXJlOiBodHRwOi8v
YnVncy5qcXVlcnkuY29tL3RpY2tldC8xMjI4MiNjb21tZW50OjE1Ci0gICAgaWYgKCBkb2N1bWVu
dC5yZWFkeVN0YXRlID09PSAiY29tcGxldGUiICkgewotICAgIC8vIEhhbmRsZSBpdCBhc3luY2hy
b25vdXNseSB0byBhbGxvdyBzY3JpcHRzIHRoZSBvcHBvcnR1bml0eSB0byBkZWxheSByZWFkeQot
ICAgIHNldFRpbWVvdXQoIGpRdWVyeS5yZWFkeSApOwotCi0gICAgLy8gU3RhbmRhcmRzLWJhc2Vk
IGJyb3dzZXJzIHN1cHBvcnQgRE9NQ29udGVudExvYWRlZAotICAgIH0gZWxzZSBpZiAoIGRvY3Vt
ZW50LmFkZEV2ZW50TGlzdGVuZXIgKSB7Ci0gICAgLy8gVXNlIHRoZSBoYW5keSBldmVudCBjYWxs
YmFjawotICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICJET01Db250ZW50TG9hZGVkIiwg
Y29tcGxldGVkLCBmYWxzZSApOwotCi0gICAgLy8gQSBmYWxsYmFjayB0byB3aW5kb3cub25sb2Fk
LCB0aGF0IHdpbGwgYWx3YXlzIHdvcmsKLSAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggImxv
YWQiLCBjb21wbGV0ZWQsIGZhbHNlICk7Ci0KLSAgICAvLyBJZiBJRSBldmVudCBtb2RlbCBpcyB1
c2VkCi0gICAgfSBlbHNlIHsKLSAgICAvLyBFbnN1cmUgZmlyaW5nIGJlZm9yZSBvbmxvYWQsIG1h
eWJlIGxhdGUgYnV0IHNhZmUgYWxzbyBmb3IgaWZyYW1lcwotICAgIGRvY3VtZW50LmF0dGFjaEV2
ZW50KCAib25yZWFkeXN0YXRlY2hhbmdlIiwgY29tcGxldGVkICk7Ci0KLSAgICAvLyBBIGZhbGxi
YWNrIHRvIHdpbmRvdy5vbmxvYWQsIHRoYXQgd2lsbCBhbHdheXMgd29yawotICAgIHdpbmRvdy5h
dHRhY2hFdmVudCggIm9ubG9hZCIsIGNvbXBsZXRlZCApOwotCi0gICAgLy8gSWYgSUUgYW5kIG5v
dCBhIGZyYW1lCi0gICAgLy8gY29udGludWFsbHkgY2hlY2sgdG8gc2VlIGlmIHRoZSBkb2N1bWVu
dCBpcyByZWFkeQotICAgIHZhciB0b3AgPSBmYWxzZTsKLQotICAgIHRyeSB7Ci0gICAgdG9wID0g
d2luZG93LmZyYW1lRWxlbWVudCA9PSBudWxsICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsK
LSAgICB9IGNhdGNoKGUpIHt9Ci0KLSAgICBpZiAoIHRvcCAmJiB0b3AuZG9TY3JvbGwgKSB7Ci0g
ICAgKGZ1bmN0aW9uIGRvU2Nyb2xsQ2hlY2soKSB7Ci0gICAgaWYgKCAhalF1ZXJ5LmlzUmVhZHkg
KSB7Ci0KLSAgICB0cnkgewotICAgIC8vIFVzZSB0aGUgdHJpY2sgYnkgRGllZ28gUGVyaW5pCi0g
ICAgLy8gaHR0cDovL2phdmFzY3JpcHQubndib3guY29tL0lFQ29udGVudExvYWRlZC8KLSAgICB0
b3AuZG9TY3JvbGwoImxlZnQiKTsKLSAgICB9IGNhdGNoKGUpIHsKLSAgICByZXR1cm4gc2V0VGlt
ZW91dCggZG9TY3JvbGxDaGVjaywgNTAgKTsKLSAgICB9Ci0KLSAgICAvLyBkZXRhY2ggYWxsIGRv
bSByZWFkeSBldmVudHMKLSAgICBkZXRhY2goKTsKLQotICAgIC8vIGFuZCBleGVjdXRlIGFueSB3
YWl0aW5nIGZ1bmN0aW9ucwotICAgIGpRdWVyeS5yZWFkeSgpOwotICAgIH0KLSAgICB9KSgpOwot
ICAgIH0KLSAgICB9Ci0gICAgfQotICAgIHJldHVybiByZWFkeUxpc3QucHJvbWlzZSggb2JqICk7
Ci19OwotCi0vLyBQb3B1bGF0ZSB0aGUgY2xhc3MydHlwZSBtYXAKLWpRdWVyeS5lYWNoKCJCb29s
ZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9y
Ii5zcGxpdCgiICIpLCBmdW5jdGlvbihpLCBuYW1lKSB7Ci0gICAgY2xhc3MydHlwZVsgIltvYmpl
Y3QgIiArIG5hbWUgKyAiXSIgXSA9IG5hbWUudG9Mb3dlckNhc2UoKTsKLX0pOwotCi1mdW5jdGlv
biBpc0FycmF5bGlrZSggb2JqICkgewotICAgIHZhciBsZW5ndGggPSBvYmoubGVuZ3RoLAotICAg
IHR5cGUgPSBqUXVlcnkudHlwZSggb2JqICk7Ci0KLSAgICBpZiAoIGpRdWVyeS5pc1dpbmRvdygg
b2JqICkgKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICggb2JqLm5vZGVU
eXBlID09PSAxICYmIGxlbmd0aCApIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gdHlwZSA9PT0gImFycmF5IiB8fCB0eXBlICE9PSAiZnVuY3Rpb24iICYmCi0gICAgKCBs
ZW5ndGggPT09IDAgfHwKLSAgICB0eXBlb2YgbGVuZ3RoID09PSAibnVtYmVyIiAmJiBsZW5ndGgg
PiAwICYmICggbGVuZ3RoIC0gMSApIGluIG9iaiApOwotfQotCi0vLyBBbGwgalF1ZXJ5IG9iamVj
dHMgc2hvdWxkIHBvaW50IGJhY2sgdG8gdGhlc2UKLXJvb3RqUXVlcnkgPSBqUXVlcnkoZG9jdW1l
bnQpOwotLy8gU3RyaW5nIHRvIE9iamVjdCBvcHRpb25zIGZvcm1hdCBjYWNoZQotdmFyIG9wdGlv
bnNDYWNoZSA9IHt9OwotCi0vLyBDb252ZXJ0IFN0cmluZy1mb3JtYXR0ZWQgb3B0aW9ucyBpbnRv
IE9iamVjdC1mb3JtYXR0ZWQgb25lcyBhbmQgc3RvcmUgaW4gY2FjaGUKLWZ1bmN0aW9uIGNyZWF0
ZU9wdGlvbnMoIG9wdGlvbnMgKSB7Ci0gICAgdmFyIG9iamVjdCA9IG9wdGlvbnNDYWNoZVsgb3B0
aW9ucyBdID0ge307Ci0gICAgalF1ZXJ5LmVhY2goIG9wdGlvbnMubWF0Y2goIGNvcmVfcm5vdHdo
aXRlICkgfHwgW10sIGZ1bmN0aW9uKCBfLCBmbGFnICkgewotICAgIG9iamVjdFsgZmxhZyBdID0g
dHJ1ZTsKLSAgICB9KTsKLSAgICByZXR1cm4gb2JqZWN0OwotfQotCi0vKgotICogQ3JlYXRlIGEg
Y2FsbGJhY2sgbGlzdCB1c2luZyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6Ci0gKgotICogICAg
b3B0aW9uczogYW4gb3B0aW9uYWwgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgb3B0aW9ucyB0aGF0
IHdpbGwgY2hhbmdlIGhvdwotICogICAgICAgICAgICB0aGUgY2FsbGJhY2sgbGlzdCBiZWhhdmVz
IG9yIGEgbW9yZSB0cmFkaXRpb25hbCBvcHRpb24gb2JqZWN0Ci0gKgotICogQnkgZGVmYXVsdCBh
IGNhbGxiYWNrIGxpc3Qgd2lsbCBhY3QgbGlrZSBhbiBldmVudCBjYWxsYmFjayBsaXN0IGFuZCBj
YW4gYmUKLSAqICJmaXJlZCIgbXVsdGlwbGUgdGltZXMuCi0gKgotICogUG9zc2libGUgb3B0aW9u
czoKLSAqCi0gKiAgICBvbmNlOiAgICAgICAgICAgIHdpbGwgZW5zdXJlIHRoZSBjYWxsYmFjayBs
aXN0IGNhbiBvbmx5IGJlIGZpcmVkIG9uY2UgKGxpa2UgYSBEZWZlcnJlZCkKLSAqCi0gKiAgICBt
ZW1vcnk6ICAgICAgICAgICAgd2lsbCBrZWVwIHRyYWNrIG9mIHByZXZpb3VzIHZhbHVlcyBhbmQg
d2lsbCBjYWxsIGFueSBjYWxsYmFjayBhZGRlZAotICogICAgICAgICAgICAgICAgICAgIGFmdGVy
IHRoZSBsaXN0IGhhcyBiZWVuIGZpcmVkIHJpZ2h0IGF3YXkgd2l0aCB0aGUgbGF0ZXN0ICJtZW1v
cml6ZWQiCi0gKiAgICAgICAgICAgICAgICAgICAgdmFsdWVzIChsaWtlIGEgRGVmZXJyZWQpCi0g
KgotICogICAgdW5pcXVlOiAgICAgICAgICAgIHdpbGwgZW5zdXJlIGEgY2FsbGJhY2sgY2FuIG9u
bHkgYmUgYWRkZWQgb25jZSAobm8gZHVwbGljYXRlIGluIHRoZSBsaXN0KQotICoKLSAqICAgIHN0
b3BPbkZhbHNlOiAgICBpbnRlcnJ1cHQgY2FsbGluZ3Mgd2hlbiBhIGNhbGxiYWNrIHJldHVybnMg
ZmFsc2UKLSAqCi0gKi8KLWpRdWVyeS5DYWxsYmFja3MgPSBmdW5jdGlvbiggb3B0aW9ucyApIHsK
LQotICAgIC8vIENvbnZlcnQgb3B0aW9ucyBmcm9tIFN0cmluZy1mb3JtYXR0ZWQgdG8gT2JqZWN0
LWZvcm1hdHRlZCBpZiBuZWVkZWQKLSAgICAvLyAod2UgY2hlY2sgaW4gY2FjaGUgZmlyc3QpCi0g
ICAgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb25zID09PSAic3RyaW5nIiA/Ci0gICAgKCBvcHRpb25z
Q2FjaGVbIG9wdGlvbnMgXSB8fCBjcmVhdGVPcHRpb25zKCBvcHRpb25zICkgKSA6Ci0gICAgalF1
ZXJ5LmV4dGVuZCgge30sIG9wdGlvbnMgKTsKLQotICAgIHZhciAvLyBGbGFnIHRvIGtub3cgaWYg
bGlzdCBpcyBjdXJyZW50bHkgZmlyaW5nCi0gICAgZmlyaW5nLAotICAgIC8vIExhc3QgZmlyZSB2
YWx1ZSAoZm9yIG5vbi1mb3JnZXR0YWJsZSBsaXN0cykKLSAgICBtZW1vcnksCi0gICAgLy8gRmxh
ZyB0byBrbm93IGlmIGxpc3Qgd2FzIGFscmVhZHkgZmlyZWQKLSAgICBmaXJlZCwKLSAgICAvLyBF
bmQgb2YgdGhlIGxvb3Agd2hlbiBmaXJpbmcKLSAgICBmaXJpbmdMZW5ndGgsCi0gICAgLy8gSW5k
ZXggb2YgY3VycmVudGx5IGZpcmluZyBjYWxsYmFjayAobW9kaWZpZWQgYnkgcmVtb3ZlIGlmIG5l
ZWRlZCkKLSAgICBmaXJpbmdJbmRleCwKLSAgICAvLyBGaXJzdCBjYWxsYmFjayB0byBmaXJlICh1
c2VkIGludGVybmFsbHkgYnkgYWRkIGFuZCBmaXJlV2l0aCkKLSAgICBmaXJpbmdTdGFydCwKLSAg
ICAvLyBBY3R1YWwgY2FsbGJhY2sgbGlzdAotICAgIGxpc3QgPSBbXSwKLSAgICAvLyBTdGFjayBv
ZiBmaXJlIGNhbGxzIGZvciByZXBlYXRhYmxlIGxpc3RzCi0gICAgc3RhY2sgPSAhb3B0aW9ucy5v
bmNlICYmIFtdLAotICAgIC8vIEZpcmUgY2FsbGJhY2tzCi0gICAgZmlyZSA9IGZ1bmN0aW9uKCBk
YXRhICkgewotICAgIG1lbW9yeSA9IG9wdGlvbnMubWVtb3J5ICYmIGRhdGE7Ci0gICAgZmlyZWQg
PSB0cnVlOwotICAgIGZpcmluZ0luZGV4ID0gZmlyaW5nU3RhcnQgfHwgMDsKLSAgICBmaXJpbmdT
dGFydCA9IDA7Ci0gICAgZmlyaW5nTGVuZ3RoID0gbGlzdC5sZW5ndGg7Ci0gICAgZmlyaW5nID0g
dHJ1ZTsKLSAgICBmb3IgKCA7IGxpc3QgJiYgZmlyaW5nSW5kZXggPCBmaXJpbmdMZW5ndGg7IGZp
cmluZ0luZGV4KysgKSB7Ci0gICAgaWYgKCBsaXN0WyBmaXJpbmdJbmRleCBdLmFwcGx5KCBkYXRh
WyAwIF0sIGRhdGFbIDEgXSApID09PSBmYWxzZSAmJiBvcHRpb25zLnN0b3BPbkZhbHNlICkgewot
ICAgIG1lbW9yeSA9IGZhbHNlOyAvLyBUbyBwcmV2ZW50IGZ1cnRoZXIgY2FsbHMgdXNpbmcgYWRk
Ci0gICAgYnJlYWs7Ci0gICAgfQotICAgIH0KLSAgICBmaXJpbmcgPSBmYWxzZTsKLSAgICBpZiAo
IGxpc3QgKSB7Ci0gICAgaWYgKCBzdGFjayApIHsKLSAgICBpZiAoIHN0YWNrLmxlbmd0aCApIHsK
LSAgICBmaXJlKCBzdGFjay5zaGlmdCgpICk7Ci0gICAgfQotICAgIH0gZWxzZSBpZiAoIG1lbW9y
eSApIHsKLSAgICBsaXN0ID0gW107Ci0gICAgfSBlbHNlIHsKLSAgICBzZWxmLmRpc2FibGUoKTsK
LSAgICB9Ci0gICAgfQotICAgIH0sCi0gICAgLy8gQWN0dWFsIENhbGxiYWNrcyBvYmplY3QKLSAg
ICBzZWxmID0gewotICAgIC8vIEFkZCBhIGNhbGxiYWNrIG9yIGEgY29sbGVjdGlvbiBvZiBjYWxs
YmFja3MgdG8gdGhlIGxpc3QKLSAgICBhZGQ6IGZ1bmN0aW9uKCkgewotICAgIGlmICggbGlzdCAp
IHsKLSAgICAvLyBGaXJzdCwgd2Ugc2F2ZSB0aGUgY3VycmVudCBsZW5ndGgKLSAgICB2YXIgc3Rh
cnQgPSBsaXN0Lmxlbmd0aDsKLSAgICAoZnVuY3Rpb24gYWRkKCBhcmdzICkgewotICAgIGpRdWVy
eS5lYWNoKCBhcmdzLCBmdW5jdGlvbiggXywgYXJnICkgewotICAgIHZhciB0eXBlID0galF1ZXJ5
LnR5cGUoIGFyZyApOwotICAgIGlmICggdHlwZSA9PT0gImZ1bmN0aW9uIiApIHsKLSAgICBpZiAo
ICFvcHRpb25zLnVuaXF1ZSB8fCAhc2VsZi5oYXMoIGFyZyApICkgewotICAgIGxpc3QucHVzaCgg
YXJnICk7Ci0gICAgfQotICAgIH0gZWxzZSBpZiAoIGFyZyAmJiBhcmcubGVuZ3RoICYmIHR5cGUg
IT09ICJzdHJpbmciICkgewotICAgIC8vIEluc3BlY3QgcmVjdXJzaXZlbHkKLSAgICBhZGQoIGFy
ZyApOwotICAgIH0KLSAgICB9KTsKLSAgICB9KSggYXJndW1lbnRzICk7Ci0gICAgLy8gRG8gd2Ug
bmVlZCB0byBhZGQgdGhlIGNhbGxiYWNrcyB0byB0aGUKLSAgICAvLyBjdXJyZW50IGZpcmluZyBi
YXRjaD8KLSAgICBpZiAoIGZpcmluZyApIHsKLSAgICBmaXJpbmdMZW5ndGggPSBsaXN0Lmxlbmd0
aDsKLSAgICAvLyBXaXRoIG1lbW9yeSwgaWYgd2UncmUgbm90IGZpcmluZyB0aGVuCi0gICAgLy8g
d2Ugc2hvdWxkIGNhbGwgcmlnaHQgYXdheQotICAgIH0gZWxzZSBpZiAoIG1lbW9yeSApIHsKLSAg
ICBmaXJpbmdTdGFydCA9IHN0YXJ0OwotICAgIGZpcmUoIG1lbW9yeSApOwotICAgIH0KLSAgICB9
Ci0gICAgcmV0dXJuIHRoaXM7Ci0gICAgfSwKLSAgICAvLyBSZW1vdmUgYSBjYWxsYmFjayBmcm9t
IHRoZSBsaXN0Ci0gICAgcmVtb3ZlOiBmdW5jdGlvbigpIHsKLSAgICBpZiAoIGxpc3QgKSB7Ci0g
ICAgalF1ZXJ5LmVhY2goIGFyZ3VtZW50cywgZnVuY3Rpb24oIF8sIGFyZyApIHsKLSAgICB2YXIg
aW5kZXg7Ci0gICAgd2hpbGUoICggaW5kZXggPSBqUXVlcnkuaW5BcnJheSggYXJnLCBsaXN0LCBp
bmRleCApICkgPiAtMSApIHsKLSAgICBsaXN0LnNwbGljZSggaW5kZXgsIDEgKTsKLSAgICAvLyBI
YW5kbGUgZmlyaW5nIGluZGV4ZXMKLSAgICBpZiAoIGZpcmluZyApIHsKLSAgICBpZiAoIGluZGV4
IDw9IGZpcmluZ0xlbmd0aCApIHsKLSAgICBmaXJpbmdMZW5ndGgtLTsKLSAgICB9Ci0gICAgaWYg
KCBpbmRleCA8PSBmaXJpbmdJbmRleCApIHsKLSAgICBmaXJpbmdJbmRleC0tOwotICAgIH0KLSAg
ICB9Ci0gICAgfQotICAgIH0pOwotICAgIH0KLSAgICByZXR1cm4gdGhpczsKLSAgICB9LAotICAg
IC8vIENoZWNrIGlmIGEgZ2l2ZW4gY2FsbGJhY2sgaXMgaW4gdGhlIGxpc3QuCi0gICAgLy8gSWYg
bm8gYXJndW1lbnQgaXMgZ2l2ZW4sIHJldHVybiB3aGV0aGVyIG9yIG5vdCBsaXN0IGhhcyBjYWxs
YmFja3MgYXR0YWNoZWQuCi0gICAgaGFzOiBmdW5jdGlvbiggZm4gKSB7Ci0gICAgcmV0dXJuIGZu
ID8galF1ZXJ5LmluQXJyYXkoIGZuLCBsaXN0ICkgPiAtMSA6ICEhKCBsaXN0ICYmIGxpc3QubGVu
Z3RoICk7Ci0gICAgfSwKLSAgICAvLyBSZW1vdmUgYWxsIGNhbGxiYWNrcyBmcm9tIHRoZSBsaXN0
Ci0gICAgZW1wdHk6IGZ1bmN0aW9uKCkgewotICAgIGxpc3QgPSBbXTsKLSAgICByZXR1cm4gdGhp
czsKLSAgICB9LAotICAgIC8vIEhhdmUgdGhlIGxpc3QgZG8gbm90aGluZyBhbnltb3JlCi0gICAg
ZGlzYWJsZTogZnVuY3Rpb24oKSB7Ci0gICAgbGlzdCA9IHN0YWNrID0gbWVtb3J5ID0gdW5kZWZp
bmVkOwotICAgIHJldHVybiB0aGlzOwotICAgIH0sCi0gICAgLy8gSXMgaXQgZGlzYWJsZWQ/Ci0g
ICAgZGlzYWJsZWQ6IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiAhbGlzdDsKLSAgICB9LAotICAg
IC8vIExvY2sgdGhlIGxpc3QgaW4gaXRzIGN1cnJlbnQgc3RhdGUKLSAgICBsb2NrOiBmdW5jdGlv
bigpIHsKLSAgICBzdGFjayA9IHVuZGVmaW5lZDsKLSAgICBpZiAoICFtZW1vcnkgKSB7Ci0gICAg
c2VsZi5kaXNhYmxlKCk7Ci0gICAgfQotICAgIHJldHVybiB0aGlzOwotICAgIH0sCi0gICAgLy8g
SXMgaXQgbG9ja2VkPwotICAgIGxvY2tlZDogZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuICFzdGFj
azsKLSAgICB9LAotICAgIC8vIENhbGwgYWxsIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBjb250
ZXh0IGFuZCBhcmd1bWVudHMKLSAgICBmaXJlV2l0aDogZnVuY3Rpb24oIGNvbnRleHQsIGFyZ3Mg
KSB7Ci0gICAgYXJncyA9IGFyZ3MgfHwgW107Ci0gICAgYXJncyA9IFsgY29udGV4dCwgYXJncy5z
bGljZSA/IGFyZ3Muc2xpY2UoKSA6IGFyZ3MgXTsKLSAgICBpZiAoIGxpc3QgJiYgKCAhZmlyZWQg
fHwgc3RhY2sgKSApIHsKLSAgICBpZiAoIGZpcmluZyApIHsKLSAgICBzdGFjay5wdXNoKCBhcmdz
ICk7Ci0gICAgfSBlbHNlIHsKLSAgICBmaXJlKCBhcmdzICk7Ci0gICAgfQotICAgIH0KLSAgICBy
ZXR1cm4gdGhpczsKLSAgICB9LAotICAgIC8vIENhbGwgYWxsIHRoZSBjYWxsYmFja3Mgd2l0aCB0
aGUgZ2l2ZW4gYXJndW1lbnRzCi0gICAgZmlyZTogZnVuY3Rpb24oKSB7Ci0gICAgc2VsZi5maXJl
V2l0aCggdGhpcywgYXJndW1lbnRzICk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gICAgfSwKLSAgICAv
LyBUbyBrbm93IGlmIHRoZSBjYWxsYmFja3MgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsbGVkIGF0IGxl
YXN0IG9uY2UKLSAgICBmaXJlZDogZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuICEhZmlyZWQ7Ci0g
ICAgfQotICAgIH07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX07Ci1qUXVlcnkuZXh0ZW5kKHsKLQot
ICAgIERlZmVycmVkOiBmdW5jdGlvbiggZnVuYyApIHsKLSAgICB2YXIgdHVwbGVzID0gWwotICAg
IC8vIGFjdGlvbiwgYWRkIGxpc3RlbmVyLCBsaXN0ZW5lciBsaXN0LCBmaW5hbCBzdGF0ZQotICAg
IFsgInJlc29sdmUiLCAiZG9uZSIsIGpRdWVyeS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksICJy
ZXNvbHZlZCIgXSwKLSAgICBbICJyZWplY3QiLCAiZmFpbCIsIGpRdWVyeS5DYWxsYmFja3MoIm9u
Y2UgbWVtb3J5IiksICJyZWplY3RlZCIgXSwKLSAgICBbICJub3RpZnkiLCAicHJvZ3Jlc3MiLCBq
UXVlcnkuQ2FsbGJhY2tzKCJtZW1vcnkiKSBdCi0gICAgXSwKLSAgICBzdGF0ZSA9ICJwZW5kaW5n
IiwKLSAgICBwcm9taXNlID0gewotICAgIHN0YXRlOiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4g
c3RhdGU7Ci0gICAgfSwKLSAgICBhbHdheXM6IGZ1bmN0aW9uKCkgewotICAgIGRlZmVycmVkLmRv
bmUoIGFyZ3VtZW50cyApLmZhaWwoIGFyZ3VtZW50cyApOwotICAgIHJldHVybiB0aGlzOwotICAg
IH0sCi0gICAgdGhlbjogZnVuY3Rpb24oIC8qIGZuRG9uZSwgZm5GYWlsLCBmblByb2dyZXNzICov
ICkgewotICAgIHZhciBmbnMgPSBhcmd1bWVudHM7Ci0gICAgcmV0dXJuIGpRdWVyeS5EZWZlcnJl
ZChmdW5jdGlvbiggbmV3RGVmZXIgKSB7Ci0gICAgalF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rp
b24oIGksIHR1cGxlICkgewotICAgIHZhciBhY3Rpb24gPSB0dXBsZVsgMCBdLAotICAgIGZuID0g
alF1ZXJ5LmlzRnVuY3Rpb24oIGZuc1sgaSBdICkgJiYgZm5zWyBpIF07Ci0gICAgLy8gZGVmZXJy
ZWRbIGRvbmUgfCBmYWlsIHwgcHJvZ3Jlc3MgXSBmb3IgZm9yd2FyZGluZyBhY3Rpb25zIHRvIG5l
d0RlZmVyCi0gICAgZGVmZXJyZWRbIHR1cGxlWzFdIF0oZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHJl
dHVybmVkID0gZm4gJiYgZm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOwotICAgIGlmICggcmV0
dXJuZWQgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIHJldHVybmVkLnByb21pc2UgKSApIHsKLSAgICBy
ZXR1cm5lZC5wcm9taXNlKCkKLSAgICAuZG9uZSggbmV3RGVmZXIucmVzb2x2ZSApCi0gICAgLmZh
aWwoIG5ld0RlZmVyLnJlamVjdCApCi0gICAgLnByb2dyZXNzKCBuZXdEZWZlci5ub3RpZnkgKTsK
LSAgICB9IGVsc2UgewotICAgIG5ld0RlZmVyWyBhY3Rpb24gKyAiV2l0aCIgXSggdGhpcyA9PT0g
cHJvbWlzZSA/IG5ld0RlZmVyLnByb21pc2UoKSA6IHRoaXMsIGZuID8gWyByZXR1cm5lZCBdIDog
YXJndW1lbnRzICk7Ci0gICAgfQotICAgIH0pOwotICAgIH0pOwotICAgIGZucyA9IG51bGw7Ci0g
ICAgfSkucHJvbWlzZSgpOwotICAgIH0sCi0gICAgLy8gR2V0IGEgcHJvbWlzZSBmb3IgdGhpcyBk
ZWZlcnJlZAotICAgIC8vIElmIG9iaiBpcyBwcm92aWRlZCwgdGhlIHByb21pc2UgYXNwZWN0IGlz
IGFkZGVkIHRvIHRoZSBvYmplY3QKLSAgICBwcm9taXNlOiBmdW5jdGlvbiggb2JqICkgewotICAg
IHJldHVybiBvYmogIT0gbnVsbCA/IGpRdWVyeS5leHRlbmQoIG9iaiwgcHJvbWlzZSApIDogcHJv
bWlzZTsKLSAgICB9Ci0gICAgfSwKLSAgICBkZWZlcnJlZCA9IHt9OwotCi0gICAgLy8gS2VlcCBw
aXBlIGZvciBiYWNrLWNvbXBhdAotICAgIHByb21pc2UucGlwZSA9IHByb21pc2UudGhlbjsKLQot
ICAgIC8vIEFkZCBsaXN0LXNwZWNpZmljIG1ldGhvZHMKLSAgICBqUXVlcnkuZWFjaCggdHVwbGVz
LCBmdW5jdGlvbiggaSwgdHVwbGUgKSB7Ci0gICAgdmFyIGxpc3QgPSB0dXBsZVsgMiBdLAotICAg
IHN0YXRlU3RyaW5nID0gdHVwbGVbIDMgXTsKLQotICAgIC8vIHByb21pc2VbIGRvbmUgfCBmYWls
IHwgcHJvZ3Jlc3MgXSA9IGxpc3QuYWRkCi0gICAgcHJvbWlzZVsgdHVwbGVbMV0gXSA9IGxpc3Qu
YWRkOwotCi0gICAgLy8gSGFuZGxlIHN0YXRlCi0gICAgaWYgKCBzdGF0ZVN0cmluZyApIHsKLSAg
ICBsaXN0LmFkZChmdW5jdGlvbigpIHsKLSAgICAvLyBzdGF0ZSA9IFsgcmVzb2x2ZWQgfCByZWpl
Y3RlZCBdCi0gICAgc3RhdGUgPSBzdGF0ZVN0cmluZzsKLQotICAgIC8vIFsgcmVqZWN0X2xpc3Qg
fCByZXNvbHZlX2xpc3QgXS5kaXNhYmxlOyBwcm9ncmVzc19saXN0LmxvY2sKLSAgICB9LCB0dXBs
ZXNbIGkgXiAxIF1bIDIgXS5kaXNhYmxlLCB0dXBsZXNbIDIgXVsgMiBdLmxvY2sgKTsKLSAgICB9
Ci0KLSAgICAvLyBkZWZlcnJlZFsgcmVzb2x2ZSB8IHJlamVjdCB8IG5vdGlmeSBdCi0gICAgZGVm
ZXJyZWRbIHR1cGxlWzBdIF0gPSBmdW5jdGlvbigpIHsKLSAgICBkZWZlcnJlZFsgdHVwbGVbMF0g
KyAiV2l0aCIgXSggdGhpcyA9PT0gZGVmZXJyZWQgPyBwcm9taXNlIDogdGhpcywgYXJndW1lbnRz
ICk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gICAgfTsKLSAgICBkZWZlcnJlZFsgdHVwbGVbMF0gKyAi
V2l0aCIgXSA9IGxpc3QuZmlyZVdpdGg7Ci0gICAgfSk7Ci0KLSAgICAvLyBNYWtlIHRoZSBkZWZl
cnJlZCBhIHByb21pc2UKLSAgICBwcm9taXNlLnByb21pc2UoIGRlZmVycmVkICk7Ci0KLSAgICAv
LyBDYWxsIGdpdmVuIGZ1bmMgaWYgYW55Ci0gICAgaWYgKCBmdW5jICkgewotICAgIGZ1bmMuY2Fs
bCggZGVmZXJyZWQsIGRlZmVycmVkICk7Ci0gICAgfQotCi0gICAgLy8gQWxsIGRvbmUhCi0gICAg
cmV0dXJuIGRlZmVycmVkOwotICAgIH0sCi0KLSAgICAvLyBEZWZlcnJlZCBoZWxwZXIKLSAgICB3
aGVuOiBmdW5jdGlvbiggc3Vib3JkaW5hdGUgLyogLCAuLi4sIHN1Ym9yZGluYXRlTiAqLyApIHsK
LSAgICB2YXIgaSA9IDAsCi0gICAgcmVzb2x2ZVZhbHVlcyA9IGNvcmVfc2xpY2UuY2FsbCggYXJn
dW1lbnRzICksCi0gICAgbGVuZ3RoID0gcmVzb2x2ZVZhbHVlcy5sZW5ndGgsCi0KLSAgICAvLyB0
aGUgY291bnQgb2YgdW5jb21wbGV0ZWQgc3Vib3JkaW5hdGVzCi0gICAgcmVtYWluaW5nID0gbGVu
Z3RoICE9PSAxIHx8ICggc3Vib3JkaW5hdGUgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIHN1Ym9yZGlu
YXRlLnByb21pc2UgKSApID8gbGVuZ3RoIDogMCwKLQotICAgIC8vIHRoZSBtYXN0ZXIgRGVmZXJy
ZWQuIElmIHJlc29sdmVWYWx1ZXMgY29uc2lzdCBvZiBvbmx5IGEgc2luZ2xlIERlZmVycmVkLCBq
dXN0IHVzZSB0aGF0LgotICAgIGRlZmVycmVkID0gcmVtYWluaW5nID09PSAxID8gc3Vib3JkaW5h
dGUgOiBqUXVlcnkuRGVmZXJyZWQoKSwKLQotICAgIC8vIFVwZGF0ZSBmdW5jdGlvbiBmb3IgYm90
aCByZXNvbHZlIGFuZCBwcm9ncmVzcyB2YWx1ZXMKLSAgICB1cGRhdGVGdW5jID0gZnVuY3Rpb24o
IGksIGNvbnRleHRzLCB2YWx1ZXMgKSB7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKCB2YWx1ZSApIHsK
LSAgICBjb250ZXh0c1sgaSBdID0gdGhpczsKLSAgICB2YWx1ZXNbIGkgXSA9IGFyZ3VtZW50cy5s
ZW5ndGggPiAxID8gY29yZV9zbGljZS5jYWxsKCBhcmd1bWVudHMgKSA6IHZhbHVlOwotICAgIGlm
KCB2YWx1ZXMgPT09IHByb2dyZXNzVmFsdWVzICkgewotICAgIGRlZmVycmVkLm5vdGlmeVdpdGgo
IGNvbnRleHRzLCB2YWx1ZXMgKTsKLSAgICB9IGVsc2UgaWYgKCAhKCAtLXJlbWFpbmluZyApICkg
ewotICAgIGRlZmVycmVkLnJlc29sdmVXaXRoKCBjb250ZXh0cywgdmFsdWVzICk7Ci0gICAgfQot
ICAgIH07Ci0gICAgfSwKLQotICAgIHByb2dyZXNzVmFsdWVzLCBwcm9ncmVzc0NvbnRleHRzLCBy
ZXNvbHZlQ29udGV4dHM7Ci0KLSAgICAvLyBhZGQgbGlzdGVuZXJzIHRvIERlZmVycmVkIHN1Ym9y
ZGluYXRlczsgdHJlYXQgb3RoZXJzIGFzIHJlc29sdmVkCi0gICAgaWYgKCBsZW5ndGggPiAxICkg
ewotICAgIHByb2dyZXNzVmFsdWVzID0gbmV3IEFycmF5KCBsZW5ndGggKTsKLSAgICBwcm9ncmVz
c0NvbnRleHRzID0gbmV3IEFycmF5KCBsZW5ndGggKTsKLSAgICByZXNvbHZlQ29udGV4dHMgPSBu
ZXcgQXJyYXkoIGxlbmd0aCApOwotICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkgewotICAg
IGlmICggcmVzb2x2ZVZhbHVlc1sgaSBdICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCByZXNvbHZlVmFs
dWVzWyBpIF0ucHJvbWlzZSApICkgewotICAgIHJlc29sdmVWYWx1ZXNbIGkgXS5wcm9taXNlKCkK
LSAgICAuZG9uZSggdXBkYXRlRnVuYyggaSwgcmVzb2x2ZUNvbnRleHRzLCByZXNvbHZlVmFsdWVz
ICkgKQotICAgIC5mYWlsKCBkZWZlcnJlZC5yZWplY3QgKQotICAgIC5wcm9ncmVzcyggdXBkYXRl
RnVuYyggaSwgcHJvZ3Jlc3NDb250ZXh0cywgcHJvZ3Jlc3NWYWx1ZXMgKSApOwotICAgIH0gZWxz
ZSB7Ci0gICAgLS1yZW1haW5pbmc7Ci0gICAgfQotICAgIH0KLSAgICB9Ci0KLSAgICAvLyBpZiB3
ZSdyZSBub3Qgd2FpdGluZyBvbiBhbnl0aGluZywgcmVzb2x2ZSB0aGUgbWFzdGVyCi0gICAgaWYg
KCAhcmVtYWluaW5nICkgewotICAgIGRlZmVycmVkLnJlc29sdmVXaXRoKCByZXNvbHZlQ29udGV4
dHMsIHJlc29sdmVWYWx1ZXMgKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZGVmZXJyZWQucHJvbWlz
ZSgpOwotICAgIH0KLX0pOwotalF1ZXJ5LnN1cHBvcnQgPSAoZnVuY3Rpb24oKSB7Ci0KLSAgICB2
YXIgc3VwcG9ydCwgYWxsLCBhLAotICAgIGlucHV0LCBzZWxlY3QsIGZyYWdtZW50LAotICAgIG9w
dCwgZXZlbnROYW1lLCBpc1N1cHBvcnRlZCwgaSwKLSAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJkaXYiKTsKLQotICAgIC8vIFNldHVwCi0gICAgZGl2LnNldEF0dHJpYnV0ZSggImNs
YXNzTmFtZSIsICJ0IiApOwotICAgIGRpdi5pbm5lckhUTUwgPSAiICA8bGluay8+PHRhYmxlPjwv
dGFibGU+PGEgaHJlZj0nL2EnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IjsKLQotICAg
IC8vIFN1cHBvcnQgdGVzdHMgd29uJ3QgcnVuIGluIHNvbWUgbGltaXRlZCBvciBub24tYnJvd3Nl
ciBlbnZpcm9ubWVudHMKLSAgICBhbGwgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTsK
LSAgICBhID0gZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIilbIDAgXTsKLSAgICBpZiAoICFh
bGwgfHwgIWEgfHwgIWFsbC5sZW5ndGggKSB7Ci0gICAgcmV0dXJuIHt9OwotICAgIH0KLQotICAg
IC8vIEZpcnN0IGJhdGNoIG9mIHRlc3RzCi0gICAgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgic2VsZWN0Iik7Ci0gICAgb3B0ID0gc2VsZWN0LmFwcGVuZENoaWxkKCBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJvcHRpb24iKSApOwotICAgIGlucHV0ID0gZGl2LmdldEVsZW1lbnRzQnlU
YWdOYW1lKCJpbnB1dCIpWyAwIF07Ci0KLSAgICBhLnN0eWxlLmNzc1RleHQgPSAidG9wOjFweDtm
bG9hdDpsZWZ0O29wYWNpdHk6LjUiOwotICAgIHN1cHBvcnQgPSB7Ci0gICAgLy8gVGVzdCBzZXRB
dHRyaWJ1dGUgb24gY2FtZWxDYXNlIGNsYXNzLiBJZiBpdCB3b3Jrcywgd2UgbmVlZCBhdHRyRml4
ZXMgd2hlbiBkb2luZyBnZXQvc2V0QXR0cmlidXRlIChpZTYvNykKLSAgICBnZXRTZXRBdHRyaWJ1
dGU6IGRpdi5jbGFzc05hbWUgIT09ICJ0IiwKLQotICAgIC8vIElFIHN0cmlwcyBsZWFkaW5nIHdo
aXRlc3BhY2Ugd2hlbiAuaW5uZXJIVE1MIGlzIHVzZWQKLSAgICBsZWFkaW5nV2hpdGVzcGFjZTog
ZGl2LmZpcnN0Q2hpbGQubm9kZVR5cGUgPT09IDMsCi0KLSAgICAvLyBNYWtlIHN1cmUgdGhhdCB0
Ym9keSBlbGVtZW50cyBhcmVuJ3QgYXV0b21hdGljYWxseSBpbnNlcnRlZAotICAgIC8vIElFIHdp
bGwgaW5zZXJ0IHRoZW0gaW50byBlbXB0eSB0YWJsZXMKLSAgICB0Ym9keTogIWRpdi5nZXRFbGVt
ZW50c0J5VGFnTmFtZSgidGJvZHkiKS5sZW5ndGgsCi0KLSAgICAvLyBNYWtlIHN1cmUgdGhhdCBs
aW5rIGVsZW1lbnRzIGdldCBzZXJpYWxpemVkIGNvcnJlY3RseSBieSBpbm5lckhUTUwKLSAgICAv
LyBUaGlzIHJlcXVpcmVzIGEgd3JhcHBlciBlbGVtZW50IGluIElFCi0gICAgaHRtbFNlcmlhbGl6
ZTogISFkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKS5sZW5ndGgsCi0KLSAgICAvLyBH
ZXQgdGhlIHN0eWxlIGluZm9ybWF0aW9uIGZyb20gZ2V0QXR0cmlidXRlCi0gICAgLy8gKElFIHVz
ZXMgLmNzc1RleHQgaW5zdGVhZCkKLSAgICBzdHlsZTogL3RvcC8udGVzdCggYS5nZXRBdHRyaWJ1
dGUoInN0eWxlIikgKSwKLQotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IFVSTHMgYXJlbid0IG1hbmlw
dWxhdGVkCi0gICAgLy8gKElFIG5vcm1hbGl6ZXMgaXQgYnkgZGVmYXVsdCkKLSAgICBocmVmTm9y
bWFsaXplZDogYS5nZXRBdHRyaWJ1dGUoImhyZWYiKSA9PT0gIi9hIiwKLQotICAgIC8vIE1ha2Ug
c3VyZSB0aGF0IGVsZW1lbnQgb3BhY2l0eSBleGlzdHMKLSAgICAvLyAoSUUgdXNlcyBmaWx0ZXIg
aW5zdGVhZCkKLSAgICAvLyBVc2UgYSByZWdleCB0byB3b3JrIGFyb3VuZCBhIFdlYktpdCBpc3N1
ZS4gU2VlICM1MTQ1Ci0gICAgb3BhY2l0eTogL14wLjUvLnRlc3QoIGEuc3R5bGUub3BhY2l0eSAp
LAotCi0gICAgLy8gVmVyaWZ5IHN0eWxlIGZsb2F0IGV4aXN0ZW5jZQotICAgIC8vIChJRSB1c2Vz
IHN0eWxlRmxvYXQgaW5zdGVhZCBvZiBjc3NGbG9hdCkKLSAgICBjc3NGbG9hdDogISFhLnN0eWxl
LmNzc0Zsb2F0LAotCi0gICAgLy8gQ2hlY2sgdGhlIGRlZmF1bHQgY2hlY2tib3gvcmFkaW8gdmFs
dWUgKCIiIG9uIFdlYktpdDsgIm9uIiBlbHNld2hlcmUpCi0gICAgY2hlY2tPbjogISFpbnB1dC52
YWx1ZSwKLQotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGEgc2VsZWN0ZWQtYnktZGVmYXVsdCBvcHRp
b24gaGFzIGEgd29ya2luZyBzZWxlY3RlZCBwcm9wZXJ0eS4KLSAgICAvLyAoV2ViS2l0IGRlZmF1
bHRzIHRvIGZhbHNlIGluc3RlYWQgb2YgdHJ1ZSwgSUUgdG9vLCBpZiBpdCdzIGluIGFuIG9wdGdy
b3VwKQotICAgIG9wdFNlbGVjdGVkOiBvcHQuc2VsZWN0ZWQsCi0KLSAgICAvLyBUZXN0cyBmb3Ig
ZW5jdHlwZSBzdXBwb3J0IG9uIGEgZm9ybSAoIzY3NDMpCi0gICAgZW5jdHlwZTogISFkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJmb3JtIikuZW5jdHlwZSwKLQotICAgIC8vIE1ha2VzIHN1cmUgY2xv
bmluZyBhbiBodG1sNSBlbGVtZW50IGRvZXMgbm90IGNhdXNlIHByb2JsZW1zCi0gICAgLy8gV2hl
cmUgb3V0ZXJIVE1MIGlzIHVuZGVmaW5lZCwgdGhpcyBzdGlsbCB3b3JrcwotICAgIGh0bWw1Q2xv
bmU6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm5hdiIpLmNsb25lTm9kZSggdHJ1ZSApLm91dGVy
SFRNTCAhPT0gIjw6bmF2PjwvOm5hdj4iLAotCi0gICAgLy8galF1ZXJ5LnN1cHBvcnQuYm94TW9k
ZWwgREVQUkVDQVRFRCBpbiAxLjggc2luY2Ugd2UgZG9uJ3Qgc3VwcG9ydCBRdWlya3MgTW9kZQot
ICAgIGJveE1vZGVsOiBkb2N1bWVudC5jb21wYXRNb2RlID09PSAiQ1NTMUNvbXBhdCIsCi0KLSAg
ICAvLyBXaWxsIGJlIGRlZmluZWQgbGF0ZXIKLSAgICBkZWxldGVFeHBhbmRvOiB0cnVlLAotICAg
IG5vQ2xvbmVFdmVudDogdHJ1ZSwKLSAgICBpbmxpbmVCbG9ja05lZWRzTGF5b3V0OiBmYWxzZSwK
LSAgICBzaHJpbmtXcmFwQmxvY2tzOiBmYWxzZSwKLSAgICByZWxpYWJsZU1hcmdpblJpZ2h0OiB0
cnVlLAotICAgIGJveFNpemluZ1JlbGlhYmxlOiB0cnVlLAotICAgIHBpeGVsUG9zaXRpb246IGZh
bHNlCi0gICAgfTsKLQotICAgIC8vIE1ha2Ugc3VyZSBjaGVja2VkIHN0YXR1cyBpcyBwcm9wZXJs
eSBjbG9uZWQKLSAgICBpbnB1dC5jaGVja2VkID0gdHJ1ZTsKLSAgICBzdXBwb3J0Lm5vQ2xvbmVD
aGVja2VkID0gaW5wdXQuY2xvbmVOb2RlKCB0cnVlICkuY2hlY2tlZDsKLQotICAgIC8vIE1ha2Ug
c3VyZSB0aGF0IHRoZSBvcHRpb25zIGluc2lkZSBkaXNhYmxlZCBzZWxlY3RzIGFyZW4ndCBtYXJr
ZWQgYXMgZGlzYWJsZWQKLSAgICAvLyAoV2ViS2l0IG1hcmtzIHRoZW0gYXMgZGlzYWJsZWQpCi0g
ICAgc2VsZWN0LmRpc2FibGVkID0gdHJ1ZTsKLSAgICBzdXBwb3J0Lm9wdERpc2FibGVkID0gIW9w
dC5kaXNhYmxlZDsKLQotICAgIC8vIFN1cHBvcnQ6IElFPDkKLSAgICB0cnkgewotICAgIGRlbGV0
ZSBkaXYudGVzdDsKLSAgICB9IGNhdGNoKCBlICkgewotICAgIHN1cHBvcnQuZGVsZXRlRXhwYW5k
byA9IGZhbHNlOwotICAgIH0KLQotICAgIC8vIENoZWNrIGlmIHdlIGNhbiB0cnVzdCBnZXRBdHRy
aWJ1dGUoInZhbHVlIikKLSAgICBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0
Iik7Ci0gICAgaW5wdXQuc2V0QXR0cmlidXRlKCAidmFsdWUiLCAiIiApOwotICAgIHN1cHBvcnQu
aW5wdXQgPSBpbnB1dC5nZXRBdHRyaWJ1dGUoICJ2YWx1ZSIgKSA9PT0gIiI7Ci0KLSAgICAvLyBD
aGVjayBpZiBhbiBpbnB1dCBtYWludGFpbnMgaXRzIHZhbHVlIGFmdGVyIGJlY29taW5nIGEgcmFk
aW8KLSAgICBpbnB1dC52YWx1ZSA9ICJ0IjsKLSAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoICJ0eXBl
IiwgInJhZGlvIiApOwotICAgIHN1cHBvcnQucmFkaW9WYWx1ZSA9IGlucHV0LnZhbHVlID09PSAi
dCI7Ci0KLSAgICAvLyAjMTEyMTcgLSBXZWJLaXQgbG9zZXMgY2hlY2sgd2hlbiB0aGUgbmFtZSBp
cyBhZnRlciB0aGUgY2hlY2tlZCBhdHRyaWJ1dGUKLSAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoICJj
aGVja2VkIiwgInQiICk7Ci0gICAgaW5wdXQuc2V0QXR0cmlidXRlKCAibmFtZSIsICJ0IiApOwot
Ci0gICAgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Ci0gICAg
ZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGlucHV0ICk7Ci0KLSAgICAvLyBDaGVjayBpZiBhIGRpc2Nv
bm5lY3RlZCBjaGVja2JveCB3aWxsIHJldGFpbiBpdHMgY2hlY2tlZAotICAgIC8vIHZhbHVlIG9m
IHRydWUgYWZ0ZXIgYXBwZW5kZWQgdG8gdGhlIERPTSAoSUU2LzcpCi0gICAgc3VwcG9ydC5hcHBl
bmRDaGVja2VkID0gaW5wdXQuY2hlY2tlZDsKLQotICAgIC8vIFdlYktpdCBkb2Vzbid0IGNsb25l
IGNoZWNrZWQgc3RhdGUgY29ycmVjdGx5IGluIGZyYWdtZW50cwotICAgIHN1cHBvcnQuY2hlY2tD
bG9uZSA9IGZyYWdtZW50LmNsb25lTm9kZSggdHJ1ZSApLmNsb25lTm9kZSggdHJ1ZSApLmxhc3RD
aGlsZC5jaGVja2VkOwotCi0gICAgLy8gU3VwcG9ydDogSUU8OQotICAgIC8vIE9wZXJhIGRvZXMg
bm90IGNsb25lIGV2ZW50cyAoYW5kIHR5cGVvZiBkaXYuYXR0YWNoRXZlbnQgPT09IHVuZGVmaW5l
ZCkuCi0gICAgLy8gSUU5LTEwIGNsb25lcyBldmVudHMgYm91bmQgdmlhIGF0dGFjaEV2ZW50LCBi
dXQgdGhleSBkb24ndCB0cmlnZ2VyIHdpdGggLmNsaWNrKCkKLSAgICBpZiAoIGRpdi5hdHRhY2hF
dmVudCApIHsKLSAgICBkaXYuYXR0YWNoRXZlbnQoICJvbmNsaWNrIiwgZnVuY3Rpb24oKSB7Ci0g
ICAgc3VwcG9ydC5ub0Nsb25lRXZlbnQgPSBmYWxzZTsKLSAgICB9KTsKLQotICAgIGRpdi5jbG9u
ZU5vZGUoIHRydWUgKS5jbGljaygpOwotICAgIH0KLQotICAgIC8vIFN1cHBvcnQ6IElFPDkgKGxh
Y2sgc3VibWl0L2NoYW5nZSBidWJibGUpLCBGaXJlZm94IDE3KyAobGFjayBmb2N1c2luIGV2ZW50
KQotICAgIC8vIEJld2FyZSBvZiBDU1AgcmVzdHJpY3Rpb25zIChodHRwczovL2RldmVsb3Blci5t
b3ppbGxhLm9yZy9lbi9TZWN1cml0eS9DU1ApLCB0ZXN0L2NzcC5waHAKLSAgICBmb3IgKCBpIGlu
IHsgc3VibWl0OiB0cnVlLCBjaGFuZ2U6IHRydWUsIGZvY3VzaW46IHRydWUgfSkgewotICAgIGRp
di5zZXRBdHRyaWJ1dGUoIGV2ZW50TmFtZSA9ICJvbiIgKyBpLCAidCIgKTsKLQotICAgIHN1cHBv
cnRbIGkgKyAiQnViYmxlcyIgXSA9IGV2ZW50TmFtZSBpbiB3aW5kb3cgfHwgZGl2LmF0dHJpYnV0
ZXNbIGV2ZW50TmFtZSBdLmV4cGFuZG8gPT09IGZhbHNlOwotICAgIH0KLQotICAgIGRpdi5zdHls
ZS5iYWNrZ3JvdW5kQ2xpcCA9ICJjb250ZW50LWJveCI7Ci0gICAgZGl2LmNsb25lTm9kZSggdHJ1
ZSApLnN0eWxlLmJhY2tncm91bmRDbGlwID0gIiI7Ci0gICAgc3VwcG9ydC5jbGVhckNsb25lU3R5
bGUgPSBkaXYuc3R5bGUuYmFja2dyb3VuZENsaXAgPT09ICJjb250ZW50LWJveCI7Ci0KLSAgICAv
LyBSdW4gdGVzdHMgdGhhdCBuZWVkIGEgYm9keSBhdCBkb2MgcmVhZHkKLSAgICBqUXVlcnkoZnVu
Y3Rpb24oKSB7Ci0gICAgdmFyIGNvbnRhaW5lciwgbWFyZ2luRGl2LCB0ZHMsCi0gICAgZGl2UmVz
ZXQgPSAicGFkZGluZzowO21hcmdpbjowO2JvcmRlcjowO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemlu
Zzpjb250ZW50LWJveDstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3g7LXdlYmtpdC1ib3gtc2l6
aW5nOmNvbnRlbnQtYm94OyIsCi0gICAgYm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdO
YW1lKCJib2R5IilbMF07Ci0KLSAgICBpZiAoICFib2R5ICkgewotICAgIC8vIFJldHVybiBmb3Ig
ZnJhbWVzZXQgZG9jcyB0aGF0IGRvbid0IGhhdmUgYSBib2R5Ci0gICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgIGNv
bnRhaW5lci5zdHlsZS5jc3NUZXh0ID0gImJvcmRlcjowO3dpZHRoOjA7aGVpZ2h0OjA7cG9zaXRp
b246YWJzb2x1dGU7dG9wOjA7bGVmdDotOTk5OXB4O21hcmdpbi10b3A6MXB4IjsKLQotICAgIGJv
ZHkuYXBwZW5kQ2hpbGQoIGNvbnRhaW5lciApLmFwcGVuZENoaWxkKCBkaXYgKTsKLQotICAgIC8v
IFN1cHBvcnQ6IElFOAotICAgIC8vIENoZWNrIGlmIHRhYmxlIGNlbGxzIHN0aWxsIGhhdmUgb2Zm
c2V0V2lkdGgvSGVpZ2h0IHdoZW4gdGhleSBhcmUgc2V0Ci0gICAgLy8gdG8gZGlzcGxheTpub25l
IGFuZCB0aGVyZSBhcmUgc3RpbGwgb3RoZXIgdmlzaWJsZSB0YWJsZSBjZWxscyBpbiBhCi0gICAg
Ly8gdGFibGUgcm93OyBpZiBzbywgb2Zmc2V0V2lkdGgvSGVpZ2h0IGFyZSBub3QgcmVsaWFibGUg
Zm9yIHVzZSB3aGVuCi0gICAgLy8gZGV0ZXJtaW5pbmcgaWYgYW4gZWxlbWVudCBoYXMgYmVlbiBo
aWRkZW4gZGlyZWN0bHkgdXNpbmcKLSAgICAvLyBkaXNwbGF5Om5vbmUgKGl0IGlzIHN0aWxsIHNh
ZmUgdG8gdXNlIG9mZnNldHMgaWYgYSBwYXJlbnQgZWxlbWVudCBpcwotICAgIC8vIGhpZGRlbjsg
ZG9uIHNhZmV0eSBnb2dnbGVzIGFuZCBzZWUgYnVnICM0NTEyIGZvciBtb3JlIGluZm9ybWF0aW9u
KS4KLSAgICBkaXYuaW5uZXJIVE1MID0gIjx0YWJsZT48dHI+PHRkPjwvdGQ+PHRkPnQ8L3RkPjwv
dHI+PC90YWJsZT4iOwotICAgIHRkcyA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsK
LSAgICB0ZHNbIDAgXS5zdHlsZS5jc3NUZXh0ID0gInBhZGRpbmc6MDttYXJnaW46MDtib3JkZXI6
MDtkaXNwbGF5Om5vbmUiOwotICAgIGlzU3VwcG9ydGVkID0gKCB0ZHNbIDAgXS5vZmZzZXRIZWln
aHQgPT09IDAgKTsKLQotICAgIHRkc1sgMCBdLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICB0ZHNb
IDEgXS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotCi0gICAgLy8gU3VwcG9ydDogSUU4Ci0gICAg
Ly8gQ2hlY2sgaWYgZW1wdHkgdGFibGUgY2VsbHMgc3RpbGwgaGF2ZSBvZmZzZXRXaWR0aC9IZWln
aHQKLSAgICBzdXBwb3J0LnJlbGlhYmxlSGlkZGVuT2Zmc2V0cyA9IGlzU3VwcG9ydGVkICYmICgg
dGRzWyAwIF0ub2Zmc2V0SGVpZ2h0ID09PSAwICk7Ci0KLSAgICAvLyBDaGVjayBib3gtc2l6aW5n
IGFuZCBtYXJnaW4gYmVoYXZpb3IKLSAgICBkaXYuaW5uZXJIVE1MID0gIiI7Ci0gICAgZGl2LnN0
eWxlLmNzc1RleHQgPSAiYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3Jk
ZXItYm94Oy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MXB4O2JvcmRlcjox
cHg7ZGlzcGxheTpibG9jazt3aWR0aDo0cHg7bWFyZ2luLXRvcDoxJTtwb3NpdGlvbjphYnNvbHV0
ZTt0b3A6MSU7IjsKLSAgICBzdXBwb3J0LmJveFNpemluZyA9ICggZGl2Lm9mZnNldFdpZHRoID09
PSA0ICk7Ci0gICAgc3VwcG9ydC5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldCA9ICgg
Ym9keS5vZmZzZXRUb3AgIT09IDEgKTsKLQotICAgIC8vIFVzZSB3aW5kb3cuZ2V0Q29tcHV0ZWRT
dHlsZSBiZWNhdXNlIGpzZG9tIG9uIG5vZGUuanMgd2lsbCBicmVhayB3aXRob3V0IGl0LgotICAg
IGlmICggd2luZG93LmdldENvbXB1dGVkU3R5bGUgKSB7Ci0gICAgc3VwcG9ydC5waXhlbFBvc2l0
aW9uID0gKCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggZGl2LCBudWxsICkgfHwge30gKS50b3Ag
IT09ICIxJSI7Ci0gICAgc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSA9ICggd2luZG93LmdldENv
bXB1dGVkU3R5bGUoIGRpdiwgbnVsbCApIHx8IHsgd2lkdGg6ICI0cHgiIH0gKS53aWR0aCA9PT0g
IjRweCI7Ci0KLSAgICAvLyBDaGVjayBpZiBkaXYgd2l0aCBleHBsaWNpdCB3aWR0aCBhbmQgbm8g
bWFyZ2luLXJpZ2h0IGluY29ycmVjdGx5Ci0gICAgLy8gZ2V0cyBjb21wdXRlZCBtYXJnaW4tcmln
aHQgYmFzZWQgb24gd2lkdGggb2YgY29udGFpbmVyLiAoIzMzMzMpCi0gICAgLy8gRmFpbHMgaW4g
V2ViS2l0IGJlZm9yZSBGZWIgMjAxMSBuaWdodGxpZXMKLSAgICAvLyBXZWJLaXQgQnVnIDEzMzQz
IC0gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHdyb25nIHZhbHVlIGZvciBtYXJnaW4tcmlnaHQK
LSAgICBtYXJnaW5EaXYgPSBkaXYuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImRpdiIpICk7Ci0gICAgbWFyZ2luRGl2LnN0eWxlLmNzc1RleHQgPSBkaXYuc3R5bGUuY3NzVGV4
dCA9IGRpdlJlc2V0OwotICAgIG1hcmdpbkRpdi5zdHlsZS5tYXJnaW5SaWdodCA9IG1hcmdpbkRp
di5zdHlsZS53aWR0aCA9ICIwIjsKLSAgICBkaXYuc3R5bGUud2lkdGggPSAiMXB4IjsKLQotICAg
IHN1cHBvcnQucmVsaWFibGVNYXJnaW5SaWdodCA9Ci0gICAgIXBhcnNlRmxvYXQoICggd2luZG93
LmdldENvbXB1dGVkU3R5bGUoIG1hcmdpbkRpdiwgbnVsbCApIHx8IHt9ICkubWFyZ2luUmlnaHQg
KTsKLSAgICB9Ci0KLSAgICBpZiAoIHR5cGVvZiBkaXYuc3R5bGUuem9vbSAhPT0gY29yZV9zdHJ1
bmRlZmluZWQgKSB7Ci0gICAgLy8gU3VwcG9ydDogSUU8OAotICAgIC8vIENoZWNrIGlmIG5hdGl2
ZWx5IGJsb2NrLWxldmVsIGVsZW1lbnRzIGFjdCBsaWtlIGlubGluZS1ibG9jawotICAgIC8vIGVs
ZW1lbnRzIHdoZW4gc2V0dGluZyB0aGVpciBkaXNwbGF5IHRvICdpbmxpbmUnIGFuZCBnaXZpbmcK
LSAgICAvLyB0aGVtIGxheW91dAotICAgIGRpdi5pbm5lckhUTUwgPSAiIjsKLSAgICBkaXYuc3R5
bGUuY3NzVGV4dCA9IGRpdlJlc2V0ICsgIndpZHRoOjFweDtwYWRkaW5nOjFweDtkaXNwbGF5Omlu
bGluZTt6b29tOjEiOwotICAgIHN1cHBvcnQuaW5saW5lQmxvY2tOZWVkc0xheW91dCA9ICggZGl2
Lm9mZnNldFdpZHRoID09PSAzICk7Ci0KLSAgICAvLyBTdXBwb3J0OiBJRTYKLSAgICAvLyBDaGVj
ayBpZiBlbGVtZW50cyB3aXRoIGxheW91dCBzaHJpbmstd3JhcCB0aGVpciBjaGlsZHJlbgotICAg
IGRpdi5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKLSAgICBkaXYuaW5uZXJIVE1MID0gIjxkaXY+
PC9kaXY+IjsKLSAgICBkaXYuZmlyc3RDaGlsZC5zdHlsZS53aWR0aCA9ICI1cHgiOwotICAgIHN1
cHBvcnQuc2hyaW5rV3JhcEJsb2NrcyA9ICggZGl2Lm9mZnNldFdpZHRoICE9PSAzICk7Ci0KLSAg
ICBpZiAoIHN1cHBvcnQuaW5saW5lQmxvY2tOZWVkc0xheW91dCApIHsKLSAgICAvLyBQcmV2ZW50
IElFIDYgZnJvbSBhZmZlY3RpbmcgbGF5b3V0IGZvciBwb3NpdGlvbmVkIGVsZW1lbnRzICMxMTA0
OAotICAgIC8vIFByZXZlbnQgSUUgZnJvbSBzaHJpbmtpbmcgdGhlIGJvZHkgaW4gSUUgNyBtb2Rl
ICMxMjg2OQotICAgIC8vIFN1cHBvcnQ6IElFPDgKLSAgICBib2R5LnN0eWxlLnpvb20gPSAxOwot
ICAgIH0KLSAgICB9Ci0KLSAgICBib2R5LnJlbW92ZUNoaWxkKCBjb250YWluZXIgKTsKLQotICAg
IC8vIE51bGwgZWxlbWVudHMgdG8gYXZvaWQgbGVha3MgaW4gSUUKLSAgICBjb250YWluZXIgPSBk
aXYgPSB0ZHMgPSBtYXJnaW5EaXYgPSBudWxsOwotICAgIH0pOwotCi0gICAgLy8gTnVsbCBlbGVt
ZW50cyB0byBhdm9pZCBsZWFrcyBpbiBJRQotICAgIGFsbCA9IHNlbGVjdCA9IGZyYWdtZW50ID0g
b3B0ID0gYSA9IGlucHV0ID0gbnVsbDsKLQotICAgIHJldHVybiBzdXBwb3J0OwotfSkoKTsKLQot
dmFyIHJicmFjZSA9IC8oPzpce1tcc1xTXSpcfXxcW1tcc1xTXSpcXSkkLywKLSAgICBybXVsdGlE
YXNoID0gLyhbQS1aXSkvZzsKLQotZnVuY3Rpb24gaW50ZXJuYWxEYXRhKCBlbGVtLCBuYW1lLCBk
YXRhLCBwdnQgLyogSW50ZXJuYWwgVXNlIE9ubHkgKi8gKXsKLSAgICBpZiAoICFqUXVlcnkuYWNj
ZXB0RGF0YSggZWxlbSApICkgewotICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB2YXIgdGhpc0Nh
Y2hlLCByZXQsCi0gICAgaW50ZXJuYWxLZXkgPSBqUXVlcnkuZXhwYW5kbywKLSAgICBnZXRCeU5h
bWUgPSB0eXBlb2YgbmFtZSA9PT0gInN0cmluZyIsCi0KLSAgICAvLyBXZSBoYXZlIHRvIGhhbmRs
ZSBET00gbm9kZXMgYW5kIEpTIG9iamVjdHMgZGlmZmVyZW50bHkgYmVjYXVzZSBJRTYtNwotICAg
IC8vIGNhbid0IEdDIG9iamVjdCByZWZlcmVuY2VzIHByb3Blcmx5IGFjcm9zcyB0aGUgRE9NLUpT
IGJvdW5kYXJ5Ci0gICAgaXNOb2RlID0gZWxlbS5ub2RlVHlwZSwKLQotICAgIC8vIE9ubHkgRE9N
IG5vZGVzIG5lZWQgdGhlIGdsb2JhbCBqUXVlcnkgY2FjaGU7IEpTIG9iamVjdCBkYXRhIGlzCi0g
ICAgLy8gYXR0YWNoZWQgZGlyZWN0bHkgdG8gdGhlIG9iamVjdCBzbyBHQyBjYW4gb2NjdXIgYXV0
b21hdGljYWxseQotICAgIGNhY2hlID0gaXNOb2RlID8galF1ZXJ5LmNhY2hlIDogZWxlbSwKLQot
ICAgIC8vIE9ubHkgZGVmaW5pbmcgYW4gSUQgZm9yIEpTIG9iamVjdHMgaWYgaXRzIGNhY2hlIGFs
cmVhZHkgZXhpc3RzIGFsbG93cwotICAgIC8vIHRoZSBjb2RlIHRvIHNob3J0Y3V0IG9uIHRoZSBz
YW1lIHBhdGggYXMgYSBET00gbm9kZSB3aXRoIG5vIGNhY2hlCi0gICAgaWQgPSBpc05vZGUgPyBl
bGVtWyBpbnRlcm5hbEtleSBdIDogZWxlbVsgaW50ZXJuYWxLZXkgXSAmJiBpbnRlcm5hbEtleTsK
LQotICAgIC8vIEF2b2lkIGRvaW5nIGFueSBtb3JlIHdvcmsgdGhhbiB3ZSBuZWVkIHRvIHdoZW4g
dHJ5aW5nIHRvIGdldCBkYXRhIG9uIGFuCi0gICAgLy8gb2JqZWN0IHRoYXQgaGFzIG5vIGRhdGEg
YXQgYWxsCi0gICAgaWYgKCAoIWlkIHx8ICFjYWNoZVtpZF0gfHwgKCFwdnQgJiYgIWNhY2hlW2lk
XS5kYXRhKSkgJiYgZ2V0QnlOYW1lICYmIGRhdGEgPT09IHVuZGVmaW5lZCApIHsKLSAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKCAhaWQgKSB7Ci0gICAgLy8gT25seSBET00gbm9kZXMgbmVl
ZCBhIG5ldyB1bmlxdWUgSUQgZm9yIGVhY2ggZWxlbWVudCBzaW5jZSB0aGVpciBkYXRhCi0gICAg
Ly8gZW5kcyB1cCBpbiB0aGUgZ2xvYmFsIGNhY2hlCi0gICAgaWYgKCBpc05vZGUgKSB7Ci0gICAg
ZWxlbVsgaW50ZXJuYWxLZXkgXSA9IGlkID0gY29yZV9kZWxldGVkSWRzLnBvcCgpIHx8IGpRdWVy
eS5ndWlkKys7Ci0gICAgfSBlbHNlIHsKLSAgICBpZCA9IGludGVybmFsS2V5OwotICAgIH0KLSAg
ICB9Ci0KLSAgICBpZiAoICFjYWNoZVsgaWQgXSApIHsKLSAgICBjYWNoZVsgaWQgXSA9IHt9Owot
Ci0gICAgLy8gQXZvaWRzIGV4cG9zaW5nIGpRdWVyeSBtZXRhZGF0YSBvbiBwbGFpbiBKUyBvYmpl
Y3RzIHdoZW4gdGhlIG9iamVjdAotICAgIC8vIGlzIHNlcmlhbGl6ZWQgdXNpbmcgSlNPTi5zdHJp
bmdpZnkKLSAgICBpZiAoICFpc05vZGUgKSB7Ci0gICAgY2FjaGVbIGlkIF0udG9KU09OID0galF1
ZXJ5Lm5vb3A7Ci0gICAgfQotICAgIH0KLQotICAgIC8vIEFuIG9iamVjdCBjYW4gYmUgcGFzc2Vk
IHRvIGpRdWVyeS5kYXRhIGluc3RlYWQgb2YgYSBrZXkvdmFsdWUgcGFpcjsgdGhpcyBnZXRzCi0g
ICAgLy8gc2hhbGxvdyBjb3BpZWQgb3ZlciBvbnRvIHRoZSBleGlzdGluZyBjYWNoZQotICAgIGlm
ICggdHlwZW9mIG5hbWUgPT09ICJvYmplY3QiIHx8IHR5cGVvZiBuYW1lID09PSAiZnVuY3Rpb24i
ICkgewotICAgIGlmICggcHZ0ICkgewotICAgIGNhY2hlWyBpZCBdID0galF1ZXJ5LmV4dGVuZCgg
Y2FjaGVbIGlkIF0sIG5hbWUgKTsKLSAgICB9IGVsc2UgewotICAgIGNhY2hlWyBpZCBdLmRhdGEg
PSBqUXVlcnkuZXh0ZW5kKCBjYWNoZVsgaWQgXS5kYXRhLCBuYW1lICk7Ci0gICAgfQotICAgIH0K
LQotICAgIHRoaXNDYWNoZSA9IGNhY2hlWyBpZCBdOwotCi0gICAgLy8galF1ZXJ5IGRhdGEoKSBp
cyBzdG9yZWQgaW4gYSBzZXBhcmF0ZSBvYmplY3QgaW5zaWRlIHRoZSBvYmplY3QncyBpbnRlcm5h
bCBkYXRhCi0gICAgLy8gY2FjaGUgaW4gb3JkZXIgdG8gYXZvaWQga2V5IGNvbGxpc2lvbnMgYmV0
d2VlbiBpbnRlcm5hbCBkYXRhIGFuZCB1c2VyLWRlZmluZWQKLSAgICAvLyBkYXRhLgotICAgIGlm
ICggIXB2dCApIHsKLSAgICBpZiAoICF0aGlzQ2FjaGUuZGF0YSApIHsKLSAgICB0aGlzQ2FjaGUu
ZGF0YSA9IHt9OwotICAgIH0KLQotICAgIHRoaXNDYWNoZSA9IHRoaXNDYWNoZS5kYXRhOwotICAg
IH0KLQotICAgIGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkgewotICAgIHRoaXNDYWNoZVsgalF1
ZXJ5LmNhbWVsQ2FzZSggbmFtZSApIF0gPSBkYXRhOwotICAgIH0KLQotICAgIC8vIENoZWNrIGZv
ciBib3RoIGNvbnZlcnRlZC10by1jYW1lbCBhbmQgbm9uLWNvbnZlcnRlZCBkYXRhIHByb3BlcnR5
IG5hbWVzCi0gICAgLy8gSWYgYSBkYXRhIHByb3BlcnR5IHdhcyBzcGVjaWZpZWQKLSAgICBpZiAo
IGdldEJ5TmFtZSApIHsKLQotICAgIC8vIEZpcnN0IFRyeSB0byBmaW5kIGFzLWlzIHByb3BlcnR5
IGRhdGEKLSAgICByZXQgPSB0aGlzQ2FjaGVbIG5hbWUgXTsKLQotICAgIC8vIFRlc3QgZm9yIG51
bGx8dW5kZWZpbmVkIHByb3BlcnR5IGRhdGEKLSAgICBpZiAoIHJldCA9PSBudWxsICkgewotCi0g
ICAgLy8gVHJ5IHRvIGZpbmQgdGhlIGNhbWVsQ2FzZWQgcHJvcGVydHkKLSAgICByZXQgPSB0aGlz
Q2FjaGVbIGpRdWVyeS5jYW1lbENhc2UoIG5hbWUgKSBdOwotICAgIH0KLSAgICB9IGVsc2Ugewot
ICAgIHJldCA9IHRoaXNDYWNoZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmV0OwotfQotCi1mdW5j
dGlvbiBpbnRlcm5hbFJlbW92ZURhdGEoIGVsZW0sIG5hbWUsIHB2dCApIHsKLSAgICBpZiAoICFq
UXVlcnkuYWNjZXB0RGF0YSggZWxlbSApICkgewotICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB2
YXIgaSwgbCwgdGhpc0NhY2hlLAotICAgIGlzTm9kZSA9IGVsZW0ubm9kZVR5cGUsCi0KLSAgICAv
LyBTZWUgalF1ZXJ5LmRhdGEgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSAgICBjYWNoZSA9IGlzTm9k
ZSA/IGpRdWVyeS5jYWNoZSA6IGVsZW0sCi0gICAgaWQgPSBpc05vZGUgPyBlbGVtWyBqUXVlcnku
ZXhwYW5kbyBdIDogalF1ZXJ5LmV4cGFuZG87Ci0KLSAgICAvLyBJZiB0aGVyZSBpcyBhbHJlYWR5
IG5vIGNhY2hlIGVudHJ5IGZvciB0aGlzIG9iamVjdCwgdGhlcmUgaXMgbm8KLSAgICAvLyBwdXJw
b3NlIGluIGNvbnRpbnVpbmcKLSAgICBpZiAoICFjYWNoZVsgaWQgXSApIHsKLSAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgaWYgKCBuYW1lICkgewotCi0gICAgdGhpc0NhY2hlID0gcHZ0ID8gY2Fj
aGVbIGlkIF0gOiBjYWNoZVsgaWQgXS5kYXRhOwotCi0gICAgaWYgKCB0aGlzQ2FjaGUgKSB7Ci0K
LSAgICAvLyBTdXBwb3J0IGFycmF5IG9yIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcgbmFtZXMgZm9y
IGRhdGEga2V5cwotICAgIGlmICggIWpRdWVyeS5pc0FycmF5KCBuYW1lICkgKSB7Ci0KLSAgICAv
LyB0cnkgdGhlIHN0cmluZyBhcyBhIGtleSBiZWZvcmUgYW55IG1hbmlwdWxhdGlvbgotICAgIGlm
ICggbmFtZSBpbiB0aGlzQ2FjaGUgKSB7Ci0gICAgbmFtZSA9IFsgbmFtZSBdOwotICAgIH0gZWxz
ZSB7Ci0KLSAgICAvLyBzcGxpdCB0aGUgY2FtZWwgY2FzZWQgdmVyc2lvbiBieSBzcGFjZXMgdW5s
ZXNzIGEga2V5IHdpdGggdGhlIHNwYWNlcyBleGlzdHMKLSAgICBuYW1lID0galF1ZXJ5LmNhbWVs
Q2FzZSggbmFtZSApOwotICAgIGlmICggbmFtZSBpbiB0aGlzQ2FjaGUgKSB7Ci0gICAgbmFtZSA9
IFsgbmFtZSBdOwotICAgIH0gZWxzZSB7Ci0gICAgbmFtZSA9IG5hbWUuc3BsaXQoIiAiKTsKLSAg
ICB9Ci0gICAgfQotICAgIH0gZWxzZSB7Ci0gICAgLy8gSWYgIm5hbWUiIGlzIGFuIGFycmF5IG9m
IGtleXMuLi4KLSAgICAvLyBXaGVuIGRhdGEgaXMgaW5pdGlhbGx5IGNyZWF0ZWQsIHZpYSAoImtl
eSIsICJ2YWwiKSBzaWduYXR1cmUsCi0gICAgLy8ga2V5cyB3aWxsIGJlIGNvbnZlcnRlZCB0byBj
YW1lbENhc2UuCi0gICAgLy8gU2luY2UgdGhlcmUgaXMgbm8gd2F5IHRvIHRlbGwgX2hvd18gYSBr
ZXkgd2FzIGFkZGVkLCByZW1vdmUKLSAgICAvLyBib3RoIHBsYWluIGtleSBhbmQgY2FtZWxDYXNl
IGtleS4gIzEyNzg2Ci0gICAgLy8gVGhpcyB3aWxsIG9ubHkgcGVuYWxpemUgdGhlIGFycmF5IGFy
Z3VtZW50IHBhdGguCi0gICAgbmFtZSA9IG5hbWUuY29uY2F0KCBqUXVlcnkubWFwKCBuYW1lLCBq
UXVlcnkuY2FtZWxDYXNlICkgKTsKLSAgICB9Ci0KLSAgICBmb3IgKCBpID0gMCwgbCA9IG5hbWUu
bGVuZ3RoOyBpIDwgbDsgaSsrICkgewotICAgIGRlbGV0ZSB0aGlzQ2FjaGVbIG5hbWVbaV0gXTsK
LSAgICB9Ci0KLSAgICAvLyBJZiB0aGVyZSBpcyBubyBkYXRhIGxlZnQgaW4gdGhlIGNhY2hlLCB3
ZSB3YW50IHRvIGNvbnRpbnVlCi0gICAgLy8gYW5kIGxldCB0aGUgY2FjaGUgb2JqZWN0IGl0c2Vs
ZiBnZXQgZGVzdHJveWVkCi0gICAgaWYgKCAhKCBwdnQgPyBpc0VtcHR5RGF0YU9iamVjdCA6IGpR
dWVyeS5pc0VtcHR5T2JqZWN0ICkoIHRoaXNDYWNoZSApICkgewotICAgIHJldHVybjsKLSAgICB9
Ci0gICAgfQotICAgIH0KLQotICAgIC8vIFNlZSBqUXVlcnkuZGF0YSBmb3IgbW9yZSBpbmZvcm1h
dGlvbgotICAgIGlmICggIXB2dCApIHsKLSAgICBkZWxldGUgY2FjaGVbIGlkIF0uZGF0YTsKLQot
ICAgIC8vIERvbid0IGRlc3Ryb3kgdGhlIHBhcmVudCBjYWNoZSB1bmxlc3MgdGhlIGludGVybmFs
IGRhdGEgb2JqZWN0Ci0gICAgLy8gaGFkIGJlZW4gdGhlIG9ubHkgdGhpbmcgbGVmdCBpbiBpdAot
ICAgIGlmICggIWlzRW1wdHlEYXRhT2JqZWN0KCBjYWNoZVsgaWQgXSApICkgewotICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgfQotCi0gICAgLy8gRGVzdHJveSB0aGUgY2FjaGUKLSAgICBpZiAoIGlz
Tm9kZSApIHsKLSAgICBqUXVlcnkuY2xlYW5EYXRhKCBbIGVsZW0gXSwgdHJ1ZSApOwotCi0gICAg
Ly8gVXNlIGRlbGV0ZSB3aGVuIHN1cHBvcnRlZCBmb3IgZXhwYW5kb3Mgb3IgYGNhY2hlYCBpcyBu
b3QgYSB3aW5kb3cgcGVyIGlzV2luZG93ICgjMTAwODApCi0gICAgfSBlbHNlIGlmICggalF1ZXJ5
LnN1cHBvcnQuZGVsZXRlRXhwYW5kbyB8fCBjYWNoZSAhPSBjYWNoZS53aW5kb3cgKSB7Ci0gICAg
ZGVsZXRlIGNhY2hlWyBpZCBdOwotCi0gICAgLy8gV2hlbiBhbGwgZWxzZSBmYWlscywgbnVsbAot
ICAgIH0gZWxzZSB7Ci0gICAgY2FjaGVbIGlkIF0gPSBudWxsOwotICAgIH0KLX0KLQotalF1ZXJ5
LmV4dGVuZCh7Ci0gICAgY2FjaGU6IHt9LAotCi0gICAgLy8gVW5pcXVlIGZvciBlYWNoIGNvcHkg
b2YgalF1ZXJ5IG9uIHRoZSBwYWdlCi0gICAgLy8gTm9uLWRpZ2l0cyByZW1vdmVkIHRvIG1hdGNo
IHJpbmxpbmVqUXVlcnkKLSAgICBleHBhbmRvOiAialF1ZXJ5IiArICggY29yZV92ZXJzaW9uICsg
TWF0aC5yYW5kb20oKSApLnJlcGxhY2UoIC9cRC9nLCAiIiApLAotCi0gICAgLy8gVGhlIGZvbGxv
d2luZyBlbGVtZW50cyB0aHJvdyB1bmNhdGNoYWJsZSBleGNlcHRpb25zIGlmIHlvdQotICAgIC8v
IGF0dGVtcHQgdG8gYWRkIGV4cGFuZG8gcHJvcGVydGllcyB0byB0aGVtLgotICAgIG5vRGF0YTog
ewotICAgICJlbWJlZCI6IHRydWUsCi0gICAgLy8gQmFuIGFsbCBvYmplY3RzIGV4Y2VwdCBmb3Ig
Rmxhc2ggKHdoaWNoIGhhbmRsZSBleHBhbmRvcykKLSAgICAib2JqZWN0IjogImNsc2lkOkQyN0NE
QjZFLUFFNkQtMTFjZi05NkI4LTQ0NDU1MzU0MDAwMCIsCi0gICAgImFwcGxldCI6IHRydWUKLSAg
ICB9LAotCi0gICAgaGFzRGF0YTogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgZWxlbSA9IGVsZW0u
bm9kZVR5cGUgPyBqUXVlcnkuY2FjaGVbIGVsZW1balF1ZXJ5LmV4cGFuZG9dIF0gOiBlbGVtWyBq
UXVlcnkuZXhwYW5kbyBdOwotICAgIHJldHVybiAhIWVsZW0gJiYgIWlzRW1wdHlEYXRhT2JqZWN0
KCBlbGVtICk7Ci0gICAgfSwKLQotICAgIGRhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRh
ICkgewotICAgIHJldHVybiBpbnRlcm5hbERhdGEoIGVsZW0sIG5hbWUsIGRhdGEgKTsKLSAgICB9
LAotCi0gICAgcmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7Ci0gICAgcmV0dXJu
IGludGVybmFsUmVtb3ZlRGF0YSggZWxlbSwgbmFtZSApOwotICAgIH0sCi0KLSAgICAvLyBGb3Ig
aW50ZXJuYWwgdXNlIG9ubHkuCi0gICAgX2RhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRh
ICkgewotICAgIHJldHVybiBpbnRlcm5hbERhdGEoIGVsZW0sIG5hbWUsIGRhdGEsIHRydWUgKTsK
LSAgICB9LAotCi0gICAgX3JlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewotICAg
IHJldHVybiBpbnRlcm5hbFJlbW92ZURhdGEoIGVsZW0sIG5hbWUsIHRydWUgKTsKLSAgICB9LAot
Ci0gICAgLy8gQSBtZXRob2QgZm9yIGRldGVybWluaW5nIGlmIGEgRE9NIG5vZGUgY2FuIGhhbmRs
ZSB0aGUgZGF0YSBleHBhbmRvCi0gICAgYWNjZXB0RGF0YTogZnVuY3Rpb24oIGVsZW0gKSB7Ci0g
ICAgLy8gRG8gbm90IHNldCBkYXRhIG9uIG5vbi1lbGVtZW50IGJlY2F1c2UgaXQgd2lsbCBub3Qg
YmUgY2xlYXJlZCAoIzgzMzUpLgotICAgIGlmICggZWxlbS5ub2RlVHlwZSAmJiBlbGVtLm5vZGVU
eXBlICE9PSAxICYmIGVsZW0ubm9kZVR5cGUgIT09IDkgKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIHZhciBub0RhdGEgPSBlbGVtLm5vZGVOYW1lICYmIGpRdWVyeS5ub0RhdGFb
IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdOwotCi0gICAgLy8gbm9kZXMgYWNjZXB0IGRh
dGEgdW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQ7IHJlamVjdGlvbiBjYW4gYmUgY29uZGl0aW9u
YWwKLSAgICByZXR1cm4gIW5vRGF0YSB8fCBub0RhdGEgIT09IHRydWUgJiYgZWxlbS5nZXRBdHRy
aWJ1dGUoImNsYXNzaWQiKSA9PT0gbm9EYXRhOwotICAgIH0KLX0pOwotCi1qUXVlcnkuZm4uZXh0
ZW5kKHsKLSAgICBkYXRhOiBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHsKLSAgICB2YXIgYXR0cnMs
IG5hbWUsCi0gICAgZWxlbSA9IHRoaXNbMF0sCi0gICAgaSA9IDAsCi0gICAgZGF0YSA9IG51bGw7
Ci0KLSAgICAvLyBHZXRzIGFsbCB2YWx1ZXMKLSAgICBpZiAoIGtleSA9PT0gdW5kZWZpbmVkICkg
ewotICAgIGlmICggdGhpcy5sZW5ndGggKSB7Ci0gICAgZGF0YSA9IGpRdWVyeS5kYXRhKCBlbGVt
ICk7Ci0KLSAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgIWpRdWVyeS5fZGF0YSggZWxl
bSwgInBhcnNlZEF0dHJzIiApICkgewotICAgIGF0dHJzID0gZWxlbS5hdHRyaWJ1dGVzOwotICAg
IGZvciAoIDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrICkgewotICAgIG5hbWUgPSBhdHRyc1tpXS5u
YW1lOwotCi0gICAgaWYgKCAhbmFtZS5pbmRleE9mKCAiZGF0YS0iICkgKSB7Ci0gICAgbmFtZSA9
IGpRdWVyeS5jYW1lbENhc2UoIG5hbWUuc2xpY2UoNSkgKTsKLQotICAgIGRhdGFBdHRyKCBlbGVt
LCBuYW1lLCBkYXRhWyBuYW1lIF0gKTsKLSAgICB9Ci0gICAgfQotICAgIGpRdWVyeS5fZGF0YSgg
ZWxlbSwgInBhcnNlZEF0dHJzIiwgdHJ1ZSApOwotICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
ZGF0YTsKLSAgICB9Ci0KLSAgICAvLyBTZXRzIG11bHRpcGxlIHZhbHVlcwotICAgIGlmICggdHlw
ZW9mIGtleSA9PT0gIm9iamVjdCIgKSB7Ci0gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigp
IHsKLSAgICBqUXVlcnkuZGF0YSggdGhpcywga2V5ICk7Ci0gICAgfSk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIGpRdWVyeS5hY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHsKLQotICAgIGlm
ICggdmFsdWUgPT09IHVuZGVmaW5lZCApIHsKLSAgICAvLyBUcnkgdG8gZmV0Y2ggYW55IGludGVy
bmFsbHkgc3RvcmVkIGRhdGEgZmlyc3QKLSAgICByZXR1cm4gZWxlbSA/IGRhdGFBdHRyKCBlbGVt
LCBrZXksIGpRdWVyeS5kYXRhKCBlbGVtLCBrZXkgKSApIDogbnVsbDsKLSAgICB9Ci0KLSAgICB0
aGlzLmVhY2goZnVuY3Rpb24oKSB7Ci0gICAgalF1ZXJ5LmRhdGEoIHRoaXMsIGtleSwgdmFsdWUg
KTsKLSAgICB9KTsKLSAgICB9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEsIG51
bGwsIHRydWUgKTsKLSAgICB9LAotCi0gICAgcmVtb3ZlRGF0YTogZnVuY3Rpb24oIGtleSApIHsK
LSAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewotICAgIGpRdWVyeS5yZW1vdmVEYXRh
KCB0aGlzLCBrZXkgKTsKLSAgICB9KTsKLSAgICB9Ci19KTsKLQotZnVuY3Rpb24gZGF0YUF0dHIo
IGVsZW0sIGtleSwgZGF0YSApIHsKLSAgICAvLyBJZiBub3RoaW5nIHdhcyBmb3VuZCBpbnRlcm5h
bGx5LCB0cnkgdG8gZmV0Y2ggYW55Ci0gICAgLy8gZGF0YSBmcm9tIHRoZSBIVE1MNSBkYXRhLSog
YXR0cmlidXRlCi0gICAgaWYgKCBkYXRhID09PSB1bmRlZmluZWQgJiYgZWxlbS5ub2RlVHlwZSA9
PT0gMSApIHsKLQotICAgIHZhciBuYW1lID0gImRhdGEtIiArIGtleS5yZXBsYWNlKCBybXVsdGlE
YXNoLCAiLSQxIiApLnRvTG93ZXJDYXNlKCk7Ci0KLSAgICBkYXRhID0gZWxlbS5nZXRBdHRyaWJ1
dGUoIG5hbWUgKTsKLQotICAgIGlmICggdHlwZW9mIGRhdGEgPT09ICJzdHJpbmciICkgewotICAg
IHRyeSB7Ci0gICAgZGF0YSA9IGRhdGEgPT09ICJ0cnVlIiA/IHRydWUgOgotICAgIGRhdGEgPT09
ICJmYWxzZSIgPyBmYWxzZSA6Ci0gICAgZGF0YSA9PT0gIm51bGwiID8gbnVsbCA6Ci0gICAgLy8g
T25seSBjb252ZXJ0IHRvIGEgbnVtYmVyIGlmIGl0IGRvZXNuJ3QgY2hhbmdlIHRoZSBzdHJpbmcK
LSAgICArZGF0YSArICIiID09PSBkYXRhID8gK2RhdGEgOgotICAgIHJicmFjZS50ZXN0KCBkYXRh
ICkgPyBqUXVlcnkucGFyc2VKU09OKCBkYXRhICkgOgotICAgIGRhdGE7Ci0gICAgfSBjYXRjaCgg
ZSApIHt9Ci0KLSAgICAvLyBNYWtlIHN1cmUgd2Ugc2V0IHRoZSBkYXRhIHNvIGl0IGlzbid0IGNo
YW5nZWQgbGF0ZXIKLSAgICBqUXVlcnkuZGF0YSggZWxlbSwga2V5LCBkYXRhICk7Ci0KLSAgICB9
IGVsc2UgewotICAgIGRhdGEgPSB1bmRlZmluZWQ7Ci0gICAgfQotICAgIH0KLQotICAgIHJldHVy
biBkYXRhOwotfQotCi0vLyBjaGVja3MgYSBjYWNoZSBvYmplY3QgZm9yIGVtcHRpbmVzcwotZnVu
Y3Rpb24gaXNFbXB0eURhdGFPYmplY3QoIG9iaiApIHsKLSAgICB2YXIgbmFtZTsKLSAgICBmb3Ig
KCBuYW1lIGluIG9iaiApIHsKLQotICAgIC8vIGlmIHRoZSBwdWJsaWMgZGF0YSBvYmplY3QgaXMg
ZW1wdHksIHRoZSBwcml2YXRlIGlzIHN0aWxsIGVtcHR5Ci0gICAgaWYgKCBuYW1lID09PSAiZGF0
YSIgJiYgalF1ZXJ5LmlzRW1wdHlPYmplY3QoIG9ialtuYW1lXSApICkgewotICAgIGNvbnRpbnVl
OwotICAgIH0KLSAgICBpZiAoIG5hbWUgIT09ICJ0b0pTT04iICkgewotICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci1qUXVlcnkuZXh0ZW5kKHsK
LSAgICBxdWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGRhdGEgKSB7Ci0gICAgdmFyIHF1ZXVl
OwotCi0gICAgaWYgKCBlbGVtICkgewotICAgIHR5cGUgPSAoIHR5cGUgfHwgImZ4IiApICsgInF1
ZXVlIjsKLSAgICBxdWV1ZSA9IGpRdWVyeS5fZGF0YSggZWxlbSwgdHlwZSApOwotCi0gICAgLy8g
U3BlZWQgdXAgZGVxdWV1ZSBieSBnZXR0aW5nIG91dCBxdWlja2x5IGlmIHRoaXMgaXMganVzdCBh
IGxvb2t1cAotICAgIGlmICggZGF0YSApIHsKLSAgICBpZiAoICFxdWV1ZSB8fCBqUXVlcnkuaXNB
cnJheShkYXRhKSApIHsKLSAgICBxdWV1ZSA9IGpRdWVyeS5fZGF0YSggZWxlbSwgdHlwZSwgalF1
ZXJ5Lm1ha2VBcnJheShkYXRhKSApOwotICAgIH0gZWxzZSB7Ci0gICAgcXVldWUucHVzaCggZGF0
YSApOwotICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHF1ZXVlIHx8IFtdOwotICAgIH0KLSAgICB9
LAotCi0gICAgZGVxdWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7Ci0gICAgdHlwZSA9IHR5
cGUgfHwgImZ4IjsKLQotICAgIHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggZWxlbSwgdHlwZSAp
LAotICAgIHN0YXJ0TGVuZ3RoID0gcXVldWUubGVuZ3RoLAotICAgIGZuID0gcXVldWUuc2hpZnQo
KSwKLSAgICBob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgdHlwZSApLAotICAgIG5l
eHQgPSBmdW5jdGlvbigpIHsKLSAgICBqUXVlcnkuZGVxdWV1ZSggZWxlbSwgdHlwZSApOwotICAg
IH07Ci0KLSAgICAvLyBJZiB0aGUgZnggcXVldWUgaXMgZGVxdWV1ZWQsIGFsd2F5cyByZW1vdmUg
dGhlIHByb2dyZXNzIHNlbnRpbmVsCi0gICAgaWYgKCBmbiA9PT0gImlucHJvZ3Jlc3MiICkgewot
ICAgIGZuID0gcXVldWUuc2hpZnQoKTsKLSAgICBzdGFydExlbmd0aC0tOwotICAgIH0KLQotICAg
IGhvb2tzLmN1ciA9IGZuOwotICAgIGlmICggZm4gKSB7Ci0KLSAgICAvLyBBZGQgYSBwcm9ncmVz
cyBzZW50aW5lbCB0byBwcmV2ZW50IHRoZSBmeCBxdWV1ZSBmcm9tIGJlaW5nCi0gICAgLy8gYXV0
b21hdGljYWxseSBkZXF1ZXVlZAotICAgIGlmICggdHlwZSA9PT0gImZ4IiApIHsKLSAgICBxdWV1
ZS51bnNoaWZ0KCAiaW5wcm9ncmVzcyIgKTsKLSAgICB9Ci0KLSAgICAvLyBjbGVhciB1cCB0aGUg
bGFzdCBxdWV1ZSBzdG9wIGZ1bmN0aW9uCi0gICAgZGVsZXRlIGhvb2tzLnN0b3A7Ci0gICAgZm4u
Y2FsbCggZWxlbSwgbmV4dCwgaG9va3MgKTsKLSAgICB9Ci0KLSAgICBpZiAoICFzdGFydExlbmd0
aCAmJiBob29rcyApIHsKLSAgICBob29rcy5lbXB0eS5maXJlKCk7Ci0gICAgfQotICAgIH0sCi0K
LSAgICAvLyBub3QgaW50ZW5kZWQgZm9yIHB1YmxpYyBjb25zdW1wdGlvbiAtIGdlbmVyYXRlcyBh
IHF1ZXVlSG9va3Mgb2JqZWN0LCBvciByZXR1cm5zIHRoZSBjdXJyZW50IG9uZQotICAgIF9xdWV1
ZUhvb2tzOiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHsKLSAgICB2YXIga2V5ID0gdHlwZSArICJx
dWV1ZUhvb2tzIjsKLSAgICByZXR1cm4galF1ZXJ5Ll9kYXRhKCBlbGVtLCBrZXkgKSB8fCBqUXVl
cnkuX2RhdGEoIGVsZW0sIGtleSwgewotICAgIGVtcHR5OiBqUXVlcnkuQ2FsbGJhY2tzKCJvbmNl
IG1lbW9yeSIpLmFkZChmdW5jdGlvbigpIHsKLSAgICBqUXVlcnkuX3JlbW92ZURhdGEoIGVsZW0s
IHR5cGUgKyAicXVldWUiICk7Ci0gICAgalF1ZXJ5Ll9yZW1vdmVEYXRhKCBlbGVtLCBrZXkgKTsK
LSAgICB9KQotICAgIH0pOwotICAgIH0KLX0pOwotCi1qUXVlcnkuZm4uZXh0ZW5kKHsKLSAgICBx
dWV1ZTogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7Ci0gICAgdmFyIHNldHRlciA9IDI7Ci0KLSAg
ICBpZiAoIHR5cGVvZiB0eXBlICE9PSAic3RyaW5nIiApIHsKLSAgICBkYXRhID0gdHlwZTsKLSAg
ICB0eXBlID0gImZ4IjsKLSAgICBzZXR0ZXItLTsKLSAgICB9Ci0KLSAgICBpZiAoIGFyZ3VtZW50
cy5sZW5ndGggPCBzZXR0ZXIgKSB7Ci0gICAgcmV0dXJuIGpRdWVyeS5xdWV1ZSggdGhpc1swXSwg
dHlwZSApOwotICAgIH0KLQotICAgIHJldHVybiBkYXRhID09PSB1bmRlZmluZWQgPwotICAgIHRo
aXMgOgotICAgIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKLSAgICB2YXIgcXVldWUgPSBqUXVlcnku
cXVldWUoIHRoaXMsIHR5cGUsIGRhdGEgKTsKLQotICAgIC8vIGVuc3VyZSBhIGhvb2tzIGZvciB0
aGlzIHF1ZXVlCi0gICAgalF1ZXJ5Ll9xdWV1ZUhvb2tzKCB0aGlzLCB0eXBlICk7Ci0KLSAgICBp
ZiAoIHR5cGUgPT09ICJmeCIgJiYgcXVldWVbMF0gIT09ICJpbnByb2dyZXNzIiApIHsKLSAgICBq
UXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApOwotICAgIH0KLSAgICB9KTsKLSAgICB9LAotICAg
IGRlcXVldWU6IGZ1bmN0aW9uKCB0eXBlICkgewotICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rp
b24oKSB7Ci0gICAgalF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTsKLSAgICB9KTsKLSAgICB9
LAotICAgIC8vIEJhc2VkIG9mZiBvZiB0aGUgcGx1Z2luIGJ5IENsaW50IEhlbGZlcnMsIHdpdGgg
cGVybWlzc2lvbi4KLSAgICAvLyBodHRwOi8vYmxpbmRzaWduYWxzLmNvbS9pbmRleC5waHAvMjAw
OS8wNy9qcXVlcnktZGVsYXkvCi0gICAgZGVsYXk6IGZ1bmN0aW9uKCB0aW1lLCB0eXBlICkgewot
ICAgIHRpbWUgPSBqUXVlcnkuZnggPyBqUXVlcnkuZnguc3BlZWRzWyB0aW1lIF0gfHwgdGltZSA6
IHRpbWU7Ci0gICAgdHlwZSA9IHR5cGUgfHwgImZ4IjsKLQotICAgIHJldHVybiB0aGlzLnF1ZXVl
KCB0eXBlLCBmdW5jdGlvbiggbmV4dCwgaG9va3MgKSB7Ci0gICAgdmFyIHRpbWVvdXQgPSBzZXRU
aW1lb3V0KCBuZXh0LCB0aW1lICk7Ci0gICAgaG9va3Muc3RvcCA9IGZ1bmN0aW9uKCkgewotICAg
IGNsZWFyVGltZW91dCggdGltZW91dCApOwotICAgIH07Ci0gICAgfSk7Ci0gICAgfSwKLSAgICBj
bGVhclF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHsKLSAgICByZXR1cm4gdGhpcy5xdWV1ZSggdHlw
ZSB8fCAiZngiLCBbXSApOwotICAgIH0sCi0gICAgLy8gR2V0IGEgcHJvbWlzZSByZXNvbHZlZCB3
aGVuIHF1ZXVlcyBvZiBhIGNlcnRhaW4gdHlwZQotICAgIC8vIGFyZSBlbXB0aWVkIChmeCBpcyB0
aGUgdHlwZSBieSBkZWZhdWx0KQotICAgIHByb21pc2U6IGZ1bmN0aW9uKCB0eXBlLCBvYmogKSB7
Ci0gICAgdmFyIHRtcCwKLSAgICBjb3VudCA9IDEsCi0gICAgZGVmZXIgPSBqUXVlcnkuRGVmZXJy
ZWQoKSwKLSAgICBlbGVtZW50cyA9IHRoaXMsCi0gICAgaSA9IHRoaXMubGVuZ3RoLAotICAgIHJl
c29sdmUgPSBmdW5jdGlvbigpIHsKLSAgICBpZiAoICEoIC0tY291bnQgKSApIHsKLSAgICBkZWZl
ci5yZXNvbHZlV2l0aCggZWxlbWVudHMsIFsgZWxlbWVudHMgXSApOwotICAgIH0KLSAgICB9Owot
Ci0gICAgaWYgKCB0eXBlb2YgdHlwZSAhPT0gInN0cmluZyIgKSB7Ci0gICAgb2JqID0gdHlwZTsK
LSAgICB0eXBlID0gdW5kZWZpbmVkOwotICAgIH0KLSAgICB0eXBlID0gdHlwZSB8fCAiZngiOwot
Ci0gICAgd2hpbGUoIGktLSApIHsKLSAgICB0bXAgPSBqUXVlcnkuX2RhdGEoIGVsZW1lbnRzWyBp
IF0sIHR5cGUgKyAicXVldWVIb29rcyIgKTsKLSAgICBpZiAoIHRtcCAmJiB0bXAuZW1wdHkgKSB7
Ci0gICAgY291bnQrKzsKLSAgICB0bXAuZW1wdHkuYWRkKCByZXNvbHZlICk7Ci0gICAgfQotICAg
IH0KLSAgICByZXNvbHZlKCk7Ci0gICAgcmV0dXJuIGRlZmVyLnByb21pc2UoIG9iaiApOwotICAg
IH0KLX0pOwotdmFyIG5vZGVIb29rLCBib29sSG9vaywKLSAgICByY2xhc3MgPSAvW1x0XHJcbl0v
ZywKLSAgICBycmV0dXJuID0gL1xyL2csCi0gICAgcmZvY3VzYWJsZSA9IC9eKD86aW5wdXR8c2Vs
ZWN0fHRleHRhcmVhfGJ1dHRvbnxvYmplY3QpJC9pLAotICAgIHJjbGlja2FibGUgPSAvXig/OmF8
YXJlYSkkL2ksCi0gICAgcmJvb2xlYW4gPSAvXig/OmNoZWNrZWR8c2VsZWN0ZWR8YXV0b2ZvY3Vz
fGF1dG9wbGF5fGFzeW5jfGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxsb29wfG11bHRp
cGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkKSQvaSwKLSAgICBydXNlRGVmYXVsdCA9
IC9eKD86Y2hlY2tlZHxzZWxlY3RlZCkkL2ksCi0gICAgZ2V0U2V0QXR0cmlidXRlID0galF1ZXJ5
LnN1cHBvcnQuZ2V0U2V0QXR0cmlidXRlLAotICAgIGdldFNldElucHV0ID0galF1ZXJ5LnN1cHBv
cnQuaW5wdXQ7Ci0KLWpRdWVyeS5mbi5leHRlbmQoewotICAgIGF0dHI6IGZ1bmN0aW9uKCBuYW1l
LCB2YWx1ZSApIHsKLSAgICByZXR1cm4galF1ZXJ5LmFjY2VzcyggdGhpcywgalF1ZXJ5LmF0dHIs
IG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApOwotICAgIH0sCi0KLSAgICByZW1v
dmVBdHRyOiBmdW5jdGlvbiggbmFtZSApIHsKLSAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9u
KCkgewotICAgIGpRdWVyeS5yZW1vdmVBdHRyKCB0aGlzLCBuYW1lICk7Ci0gICAgfSk7Ci0gICAg
fSwKLQotICAgIHByb3A6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKLSAgICByZXR1cm4galF1
ZXJ5LmFjY2VzcyggdGhpcywgalF1ZXJ5LnByb3AsIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVu
Z3RoID4gMSApOwotICAgIH0sCi0KLSAgICByZW1vdmVQcm9wOiBmdW5jdGlvbiggbmFtZSApIHsK
LSAgICBuYW1lID0galF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lOwotICAgIHJldHVybiB0
aGlzLmVhY2goZnVuY3Rpb24oKSB7Ci0gICAgLy8gdHJ5L2NhdGNoIGhhbmRsZXMgY2FzZXMgd2hl
cmUgSUUgYmFsa3MgKHN1Y2ggYXMgcmVtb3ZpbmcgYSBwcm9wZXJ0eSBvbiB3aW5kb3cpCi0gICAg
dHJ5IHsKLSAgICB0aGlzWyBuYW1lIF0gPSB1bmRlZmluZWQ7Ci0gICAgZGVsZXRlIHRoaXNbIG5h
bWUgXTsKLSAgICB9IGNhdGNoKCBlICkge30KLSAgICB9KTsKLSAgICB9LAotCi0gICAgYWRkQ2xh
c3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKLSAgICB2YXIgY2xhc3NlcywgZWxlbSwgY3VyLCBjbGF6
eiwgaiwKLSAgICBpID0gMCwKLSAgICBsZW4gPSB0aGlzLmxlbmd0aCwKLSAgICBwcm9jZWVkID0g
dHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiAmJiB2YWx1ZTsKLQotICAgIGlmICggalF1ZXJ5Lmlz
RnVuY3Rpb24oIHZhbHVlICkgKSB7Ci0gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiggaiAp
IHsKLSAgICBqUXVlcnkoIHRoaXMgKS5hZGRDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgdGhp
cy5jbGFzc05hbWUgKSApOwotICAgIH0pOwotICAgIH0KLQotICAgIGlmICggcHJvY2VlZCApIHsK
LSAgICAvLyBUaGUgZGlzanVuY3Rpb24gaGVyZSBpcyBmb3IgYmV0dGVyIGNvbXByZXNzaWJpbGl0
eSAoc2VlIHJlbW92ZUNsYXNzKQotICAgIGNsYXNzZXMgPSAoIHZhbHVlIHx8ICIiICkubWF0Y2go
IGNvcmVfcm5vdHdoaXRlICkgfHwgW107Ci0KLSAgICBmb3IgKCA7IGkgPCBsZW47IGkrKyApIHsK
LSAgICBlbGVtID0gdGhpc1sgaSBdOwotICAgIGN1ciA9IGVsZW0ubm9kZVR5cGUgPT09IDEgJiYg
KCBlbGVtLmNsYXNzTmFtZSA/Ci0gICAgKCAiICIgKyBlbGVtLmNsYXNzTmFtZSArICIgIiApLnJl
cGxhY2UoIHJjbGFzcywgIiAiICkgOgotICAgICIgIgotICAgICk7Ci0KLSAgICBpZiAoIGN1ciAp
IHsKLSAgICBqID0gMDsKLSAgICB3aGlsZSAoIChjbGF6eiA9IGNsYXNzZXNbaisrXSkgKSB7Ci0g
ICAgaWYgKCBjdXIuaW5kZXhPZiggIiAiICsgY2xhenogKyAiICIgKSA8IDAgKSB7Ci0gICAgY3Vy
ICs9IGNsYXp6ICsgIiAiOwotICAgIH0KLSAgICB9Ci0gICAgZWxlbS5jbGFzc05hbWUgPSBqUXVl
cnkudHJpbSggY3VyICk7Ci0KLSAgICB9Ci0gICAgfQotICAgIH0KLQotICAgIHJldHVybiB0aGlz
OwotICAgIH0sCi0KLSAgICByZW1vdmVDbGFzczogZnVuY3Rpb24oIHZhbHVlICkgewotICAgIHZh
ciBjbGFzc2VzLCBlbGVtLCBjdXIsIGNsYXp6LCBqLAotICAgIGkgPSAwLAotICAgIGxlbiA9IHRo
aXMubGVuZ3RoLAotICAgIHByb2NlZWQgPSBhcmd1bWVudHMubGVuZ3RoID09PSAwIHx8IHR5cGVv
ZiB2YWx1ZSA9PT0gInN0cmluZyIgJiYgdmFsdWU7Ci0KLSAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0
aW9uKCB2YWx1ZSApICkgewotICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oIGogKSB7Ci0g
ICAgalF1ZXJ5KCB0aGlzICkucmVtb3ZlQ2xhc3MoIHZhbHVlLmNhbGwoIHRoaXMsIGosIHRoaXMu
Y2xhc3NOYW1lICkgKTsKLSAgICB9KTsKLSAgICB9Ci0gICAgaWYgKCBwcm9jZWVkICkgewotICAg
IGNsYXNzZXMgPSAoIHZhbHVlIHx8ICIiICkubWF0Y2goIGNvcmVfcm5vdHdoaXRlICkgfHwgW107
Ci0KLSAgICBmb3IgKCA7IGkgPCBsZW47IGkrKyApIHsKLSAgICBlbGVtID0gdGhpc1sgaSBdOwot
ICAgIC8vIFRoaXMgZXhwcmVzc2lvbiBpcyBoZXJlIGZvciBiZXR0ZXIgY29tcHJlc3NpYmlsaXR5
IChzZWUgYWRkQ2xhc3MpCi0gICAgY3VyID0gZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAoIGVsZW0u
Y2xhc3NOYW1lID8KLSAgICAoICIgIiArIGVsZW0uY2xhc3NOYW1lICsgIiAiICkucmVwbGFjZSgg
cmNsYXNzLCAiICIgKSA6Ci0gICAgIiIKLSAgICApOwotCi0gICAgaWYgKCBjdXIgKSB7Ci0gICAg
aiA9IDA7Ci0gICAgd2hpbGUgKCAoY2xhenogPSBjbGFzc2VzW2orK10pICkgewotICAgIC8vIFJl
bW92ZSAqYWxsKiBpbnN0YW5jZXMKLSAgICB3aGlsZSAoIGN1ci5pbmRleE9mKCAiICIgKyBjbGF6
eiArICIgIiApID49IDAgKSB7Ci0gICAgY3VyID0gY3VyLnJlcGxhY2UoICIgIiArIGNsYXp6ICsg
IiAiLCAiICIgKTsKLSAgICB9Ci0gICAgfQotICAgIGVsZW0uY2xhc3NOYW1lID0gdmFsdWUgPyBq
UXVlcnkudHJpbSggY3VyICkgOiAiIjsKLSAgICB9Ci0gICAgfQotICAgIH0KLQotICAgIHJldHVy
biB0aGlzOwotICAgIH0sCi0KLSAgICB0b2dnbGVDbGFzczogZnVuY3Rpb24oIHZhbHVlLCBzdGF0
ZVZhbCApIHsKLSAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZSwKLSAgICBpc0Jvb2wgPSB0eXBl
b2Ygc3RhdGVWYWwgPT09ICJib29sZWFuIjsKLQotICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24o
IHZhbHVlICkgKSB7Ci0gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiggaSApIHsKLSAgICBq
UXVlcnkoIHRoaXMgKS50b2dnbGVDbGFzcyggdmFsdWUuY2FsbCh0aGlzLCBpLCB0aGlzLmNsYXNz
TmFtZSwgc3RhdGVWYWwpLCBzdGF0ZVZhbCApOwotICAgIH0pOwotICAgIH0KLQotICAgIHJldHVy
biB0aGlzLmVhY2goZnVuY3Rpb24oKSB7Ci0gICAgaWYgKCB0eXBlID09PSAic3RyaW5nIiApIHsK
LSAgICAvLyB0b2dnbGUgaW5kaXZpZHVhbCBjbGFzcyBuYW1lcwotICAgIHZhciBjbGFzc05hbWUs
Ci0gICAgaSA9IDAsCi0gICAgc2VsZiA9IGpRdWVyeSggdGhpcyApLAotICAgIHN0YXRlID0gc3Rh
dGVWYWwsCi0gICAgY2xhc3NOYW1lcyA9IHZhbHVlLm1hdGNoKCBjb3JlX3Jub3R3aGl0ZSApIHx8
IFtdOwotCi0gICAgd2hpbGUgKCAoY2xhc3NOYW1lID0gY2xhc3NOYW1lc1sgaSsrIF0pICkgewot
ICAgIC8vIGNoZWNrIGVhY2ggY2xhc3NOYW1lIGdpdmVuLCBzcGFjZSBzZXBhcmF0ZWQgbGlzdAot
ICAgIHN0YXRlID0gaXNCb29sID8gc3RhdGUgOiAhc2VsZi5oYXNDbGFzcyggY2xhc3NOYW1lICk7
Ci0gICAgc2VsZlsgc3RhdGUgPyAiYWRkQ2xhc3MiIDogInJlbW92ZUNsYXNzIiBdKCBjbGFzc05h
bWUgKTsKLSAgICB9Ci0KLSAgICAvLyBUb2dnbGUgd2hvbGUgY2xhc3MgbmFtZQotICAgIH0gZWxz
ZSBpZiAoIHR5cGUgPT09IGNvcmVfc3RydW5kZWZpbmVkIHx8IHR5cGUgPT09ICJib29sZWFuIiAp
IHsKLSAgICBpZiAoIHRoaXMuY2xhc3NOYW1lICkgewotICAgIC8vIHN0b3JlIGNsYXNzTmFtZSBp
ZiBzZXQKLSAgICBqUXVlcnkuX2RhdGEoIHRoaXMsICJfX2NsYXNzTmFtZV9fIiwgdGhpcy5jbGFz
c05hbWUgKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgZWxlbWVudCBoYXMgYSBjbGFzcyBuYW1l
IG9yIGlmIHdlJ3JlIHBhc3NlZCAiZmFsc2UiLAotICAgIC8vIHRoZW4gcmVtb3ZlIHRoZSB3aG9s
ZSBjbGFzc25hbWUgKGlmIHRoZXJlIHdhcyBvbmUsIHRoZSBhYm92ZSBzYXZlZCBpdCkuCi0gICAg
Ly8gT3RoZXJ3aXNlIGJyaW5nIGJhY2sgd2hhdGV2ZXIgd2FzIHByZXZpb3VzbHkgc2F2ZWQgKGlm
IGFueXRoaW5nKSwKLSAgICAvLyBmYWxsaW5nIGJhY2sgdG8gdGhlIGVtcHR5IHN0cmluZyBpZiBu
b3RoaW5nIHdhcyBzdG9yZWQuCi0gICAgdGhpcy5jbGFzc05hbWUgPSB0aGlzLmNsYXNzTmFtZSB8
fCB2YWx1ZSA9PT0gZmFsc2UgPyAiIiA6IGpRdWVyeS5fZGF0YSggdGhpcywgIl9fY2xhc3NOYW1l
X18iICkgfHwgIiI7Ci0gICAgfQotICAgIH0pOwotICAgIH0sCi0KLSAgICBoYXNDbGFzczogZnVu
Y3Rpb24oIHNlbGVjdG9yICkgewotICAgIHZhciBjbGFzc05hbWUgPSAiICIgKyBzZWxlY3RvciAr
ICIgIiwKLSAgICBpID0gMCwKLSAgICBsID0gdGhpcy5sZW5ndGg7Ci0gICAgZm9yICggOyBpIDwg
bDsgaSsrICkgewotICAgIGlmICggdGhpc1tpXS5ub2RlVHlwZSA9PT0gMSAmJiAoIiAiICsgdGhp
c1tpXS5jbGFzc05hbWUgKyAiICIpLnJlcGxhY2UocmNsYXNzLCAiICIpLmluZGV4T2YoIGNsYXNz
TmFtZSApID49IDAgKSB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIH0KLQotICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9LAotCi0gICAgdmFsOiBmdW5jdGlvbiggdmFsdWUgKSB7Ci0gICAg
dmFyIHJldCwgaG9va3MsIGlzRnVuY3Rpb24sCi0gICAgZWxlbSA9IHRoaXNbMF07Ci0KLSAgICBp
ZiAoICFhcmd1bWVudHMubGVuZ3RoICkgewotICAgIGlmICggZWxlbSApIHsKLSAgICBob29rcyA9
IGpRdWVyeS52YWxIb29rc1sgZWxlbS50eXBlIF0gfHwgalF1ZXJ5LnZhbEhvb2tzWyBlbGVtLm5v
ZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTsKLQotICAgIGlmICggaG9va3MgJiYgImdldCIgaW4gaG9v
a3MgJiYgKHJldCA9IGhvb2tzLmdldCggZWxlbSwgInZhbHVlIiApKSAhPT0gdW5kZWZpbmVkICkg
ewotICAgIHJldHVybiByZXQ7Ci0gICAgfQotCi0gICAgcmV0ID0gZWxlbS52YWx1ZTsKLQotICAg
IHJldHVybiB0eXBlb2YgcmV0ID09PSAic3RyaW5nIiA/Ci0gICAgLy8gaGFuZGxlIG1vc3QgY29t
bW9uIHN0cmluZyBjYXNlcwotICAgIHJldC5yZXBsYWNlKHJyZXR1cm4sICIiKSA6Ci0gICAgLy8g
aGFuZGxlIGNhc2VzIHdoZXJlIHZhbHVlIGlzIG51bGwvdW5kZWYgb3IgbnVtYmVyCi0gICAgcmV0
ID09IG51bGwgPyAiIiA6IHJldDsKLSAgICB9Ci0KLSAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aXNGdW5jdGlvbiA9IGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApOwotCi0gICAgcmV0dXJuIHRo
aXMuZWFjaChmdW5jdGlvbiggaSApIHsKLSAgICB2YXIgdmFsLAotICAgIHNlbGYgPSBqUXVlcnko
dGhpcyk7Ci0KLSAgICBpZiAoIHRoaXMubm9kZVR5cGUgIT09IDEgKSB7Ci0gICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmICggaXNGdW5jdGlvbiApIHsKLSAgICB2YWwgPSB2YWx1ZS5jYWxsKCB0
aGlzLCBpLCBzZWxmLnZhbCgpICk7Ci0gICAgfSBlbHNlIHsKLSAgICB2YWwgPSB2YWx1ZTsKLSAg
ICB9Ci0KLSAgICAvLyBUcmVhdCBudWxsL3VuZGVmaW5lZCBhcyAiIjsgY29udmVydCBudW1iZXJz
IHRvIHN0cmluZwotICAgIGlmICggdmFsID09IG51bGwgKSB7Ci0gICAgdmFsID0gIiI7Ci0gICAg
fSBlbHNlIGlmICggdHlwZW9mIHZhbCA9PT0gIm51bWJlciIgKSB7Ci0gICAgdmFsICs9ICIiOwot
ICAgIH0gZWxzZSBpZiAoIGpRdWVyeS5pc0FycmF5KCB2YWwgKSApIHsKLSAgICB2YWwgPSBqUXVl
cnkubWFwKHZhbCwgZnVuY3Rpb24gKCB2YWx1ZSApIHsKLSAgICByZXR1cm4gdmFsdWUgPT0gbnVs
bCA/ICIiIDogdmFsdWUgKyAiIjsKLSAgICB9KTsKLSAgICB9Ci0KLSAgICBob29rcyA9IGpRdWVy
eS52YWxIb29rc1sgdGhpcy50eXBlIF0gfHwgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzLm5vZGVOYW1l
LnRvTG93ZXJDYXNlKCkgXTsKLQotICAgIC8vIElmIHNldCByZXR1cm5zIHVuZGVmaW5lZCwgZmFs
bCBiYWNrIHRvIG5vcm1hbCBzZXR0aW5nCi0gICAgaWYgKCAhaG9va3MgfHwgISgic2V0IiBpbiBo
b29rcykgfHwgaG9va3Muc2V0KCB0aGlzLCB2YWwsICJ2YWx1ZSIgKSA9PT0gdW5kZWZpbmVkICkg
ewotICAgIHRoaXMudmFsdWUgPSB2YWw7Ci0gICAgfQotICAgIH0pOwotICAgIH0KLX0pOwotCi1q
UXVlcnkuZXh0ZW5kKHsKLSAgICB2YWxIb29rczogewotICAgIG9wdGlvbjogewotICAgIGdldDog
ZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgLy8gYXR0cmlidXRlcy52YWx1ZSBpcyB1bmRlZmluZWQg
aW4gQmxhY2tiZXJyeSA0LjcgYnV0Ci0gICAgLy8gdXNlcyAudmFsdWUuIFNlZSAjNjkzMgotICAg
IHZhciB2YWwgPSBlbGVtLmF0dHJpYnV0ZXMudmFsdWU7Ci0gICAgcmV0dXJuICF2YWwgfHwgdmFs
LnNwZWNpZmllZCA/IGVsZW0udmFsdWUgOiBlbGVtLnRleHQ7Ci0gICAgfQotICAgIH0sCi0gICAg
c2VsZWN0OiB7Ci0gICAgZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICB2YXIgdmFsdWUsIG9w
dGlvbiwKLSAgICBvcHRpb25zID0gZWxlbS5vcHRpb25zLAotICAgIGluZGV4ID0gZWxlbS5zZWxl
Y3RlZEluZGV4LAotICAgIG9uZSA9IGVsZW0udHlwZSA9PT0gInNlbGVjdC1vbmUiIHx8IGluZGV4
IDwgMCwKLSAgICB2YWx1ZXMgPSBvbmUgPyBudWxsIDogW10sCi0gICAgbWF4ID0gb25lID8gaW5k
ZXggKyAxIDogb3B0aW9ucy5sZW5ndGgsCi0gICAgaSA9IGluZGV4IDwgMCA/Ci0gICAgbWF4IDoK
LSAgICBvbmUgPyBpbmRleCA6IDA7Ci0KLSAgICAvLyBMb29wIHRocm91Z2ggYWxsIHRoZSBzZWxl
Y3RlZCBvcHRpb25zCi0gICAgZm9yICggOyBpIDwgbWF4OyBpKysgKSB7Ci0gICAgb3B0aW9uID0g
b3B0aW9uc1sgaSBdOwotCi0gICAgLy8gb2xkSUUgZG9lc24ndCB1cGRhdGUgc2VsZWN0ZWQgYWZ0
ZXIgZm9ybSByZXNldCAoIzI1NTEpCi0gICAgaWYgKCAoIG9wdGlvbi5zZWxlY3RlZCB8fCBpID09
PSBpbmRleCApICYmCi0gICAgLy8gRG9uJ3QgcmV0dXJuIG9wdGlvbnMgdGhhdCBhcmUgZGlzYWJs
ZWQgb3IgaW4gYSBkaXNhYmxlZCBvcHRncm91cAotICAgICggalF1ZXJ5LnN1cHBvcnQub3B0RGlz
YWJsZWQgPyAhb3B0aW9uLmRpc2FibGVkIDogb3B0aW9uLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQi
KSA9PT0gbnVsbCApICYmCi0gICAgKCAhb3B0aW9uLnBhcmVudE5vZGUuZGlzYWJsZWQgfHwgIWpR
dWVyeS5ub2RlTmFtZSggb3B0aW9uLnBhcmVudE5vZGUsICJvcHRncm91cCIgKSApICkgewotCi0g
ICAgLy8gR2V0IHRoZSBzcGVjaWZpYyB2YWx1ZSBmb3IgdGhlIG9wdGlvbgotICAgIHZhbHVlID0g
alF1ZXJ5KCBvcHRpb24gKS52YWwoKTsKLQotICAgIC8vIFdlIGRvbid0IG5lZWQgYW4gYXJyYXkg
Zm9yIG9uZSBzZWxlY3RzCi0gICAgaWYgKCBvbmUgKSB7Ci0gICAgcmV0dXJuIHZhbHVlOwotICAg
IH0KLQotICAgIC8vIE11bHRpLVNlbGVjdHMgcmV0dXJuIGFuIGFycmF5Ci0gICAgdmFsdWVzLnB1
c2goIHZhbHVlICk7Ci0gICAgfQotICAgIH0KLQotICAgIHJldHVybiB2YWx1ZXM7Ci0gICAgfSwK
LQotICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgewotICAgIHZhciB2YWx1ZXMgPSBq
UXVlcnkubWFrZUFycmF5KCB2YWx1ZSApOwotCi0gICAgalF1ZXJ5KGVsZW0pLmZpbmQoIm9wdGlv
biIpLmVhY2goZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5zZWxlY3RlZCA9IGpRdWVyeS5pbkFycmF5
KCBqUXVlcnkodGhpcykudmFsKCksIHZhbHVlcyApID49IDA7Ci0gICAgfSk7Ci0KLSAgICBpZiAo
ICF2YWx1ZXMubGVuZ3RoICkgewotICAgIGVsZW0uc2VsZWN0ZWRJbmRleCA9IC0xOwotICAgIH0K
LSAgICByZXR1cm4gdmFsdWVzOwotICAgIH0KLSAgICB9Ci0gICAgfSwKLQotICAgIGF0dHI6IGZ1
bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHsKLSAgICB2YXIgaG9va3MsIG5vdHhtbCwgcmV0
LAotICAgIG5UeXBlID0gZWxlbS5ub2RlVHlwZTsKLQotICAgIC8vIGRvbid0IGdldC9zZXQgYXR0
cmlidXRlcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXMKLSAgICBpZiAoICFl
bGVtIHx8IG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkgewotICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBGYWxsYmFjayB0byBwcm9wIHdoZW4gYXR0cmlidXRl
cyBhcmUgbm90IHN1cHBvcnRlZAotICAgIGlmICggdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlID09
PSBjb3JlX3N0cnVuZGVmaW5lZCApIHsKLSAgICByZXR1cm4galF1ZXJ5LnByb3AoIGVsZW0sIG5h
bWUsIHZhbHVlICk7Ci0gICAgfQotCi0gICAgbm90eG1sID0gblR5cGUgIT09IDEgfHwgIWpRdWVy
eS5pc1hNTERvYyggZWxlbSApOwotCi0gICAgLy8gQWxsIGF0dHJpYnV0ZXMgYXJlIGxvd2VyY2Fz
ZQotICAgIC8vIEdyYWIgbmVjZXNzYXJ5IGhvb2sgaWYgb25lIGlzIGRlZmluZWQKLSAgICBpZiAo
IG5vdHhtbCApIHsKLSAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpOwotICAgIGhvb2tzID0g
alF1ZXJ5LmF0dHJIb29rc1sgbmFtZSBdIHx8ICggcmJvb2xlYW4udGVzdCggbmFtZSApID8gYm9v
bEhvb2sgOiBub2RlSG9vayApOwotICAgIH0KLQotICAgIGlmICggdmFsdWUgIT09IHVuZGVmaW5l
ZCApIHsKLQotICAgIGlmICggdmFsdWUgPT09IG51bGwgKSB7Ci0gICAgalF1ZXJ5LnJlbW92ZUF0
dHIoIGVsZW0sIG5hbWUgKTsKLQotICAgIH0gZWxzZSBpZiAoIGhvb2tzICYmIG5vdHhtbCAmJiAi
c2V0IiBpbiBob29rcyAmJiAocmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApKSAh
PT0gdW5kZWZpbmVkICkgewotICAgIHJldHVybiByZXQ7Ci0KLSAgICB9IGVsc2UgewotICAgIGVs
ZW0uc2V0QXR0cmlidXRlKCBuYW1lLCB2YWx1ZSArICIiICk7Ci0gICAgcmV0dXJuIHZhbHVlOwot
ICAgIH0KLQotICAgIH0gZWxzZSBpZiAoIGhvb2tzICYmIG5vdHhtbCAmJiAiZ2V0IiBpbiBob29r
cyAmJiAocmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkpICE9PSBudWxsICkgewotICAgIHJl
dHVybiByZXQ7Ci0KLSAgICB9IGVsc2UgewotCi0gICAgLy8gSW4gSUU5KywgRmxhc2ggb2JqZWN0
cyBkb24ndCBoYXZlIC5nZXRBdHRyaWJ1dGUgKCMxMjk0NSkKLSAgICAvLyBTdXBwb3J0OiBJRTkr
Ci0gICAgaWYgKCB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUgIT09IGNvcmVfc3RydW5kZWZpbmVk
ICkgewotICAgIHJldCA9ICBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApOwotICAgIH0KLQotICAg
IC8vIE5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHJldHVybiBudWxsLCB3ZSBub3JtYWxpemUgdG8g
dW5kZWZpbmVkCi0gICAgcmV0dXJuIHJldCA9PSBudWxsID8KLSAgICB1bmRlZmluZWQgOgotICAg
IHJldDsKLSAgICB9Ci0gICAgfSwKLQotICAgIHJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBlbGVtLCB2
YWx1ZSApIHsKLSAgICB2YXIgbmFtZSwgcHJvcE5hbWUsCi0gICAgaSA9IDAsCi0gICAgYXR0ck5h
bWVzID0gdmFsdWUgJiYgdmFsdWUubWF0Y2goIGNvcmVfcm5vdHdoaXRlICk7Ci0KLSAgICBpZiAo
IGF0dHJOYW1lcyAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkgewotICAgIHdoaWxlICggKG5hbWUg
PSBhdHRyTmFtZXNbaSsrXSkgKSB7Ci0gICAgcHJvcE5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFt
ZSBdIHx8IG5hbWU7Ci0KLSAgICAvLyBCb29sZWFuIGF0dHJpYnV0ZXMgZ2V0IHNwZWNpYWwgdHJl
YXRtZW50ICgjMTA4NzApCi0gICAgaWYgKCByYm9vbGVhbi50ZXN0KCBuYW1lICkgKSB7Ci0gICAg
Ly8gU2V0IGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgdG8gZmFsc2UgZm9yIGJvb2xlYW4gYXR0cmli
dXRlcwotICAgIC8vIEFsc28gY2xlYXIgZGVmYXVsdENoZWNrZWQvZGVmYXVsdFNlbGVjdGVkIChp
ZiBhcHByb3ByaWF0ZSkgZm9yIElFPDgKLSAgICBpZiAoICFnZXRTZXRBdHRyaWJ1dGUgJiYgcnVz
ZURlZmF1bHQudGVzdCggbmFtZSApICkgewotICAgIGVsZW1bIGpRdWVyeS5jYW1lbENhc2UoICJk
ZWZhdWx0LSIgKyBuYW1lICkgXSA9Ci0gICAgZWxlbVsgcHJvcE5hbWUgXSA9IGZhbHNlOwotICAg
IH0gZWxzZSB7Ci0gICAgZWxlbVsgcHJvcE5hbWUgXSA9IGZhbHNlOwotICAgIH0KLQotICAgIC8v
IFNlZSAjOTY5OSBmb3IgZXhwbGFuYXRpb24gb2YgdGhpcyBhcHByb2FjaCAoc2V0dGluZyBmaXJz
dCwgdGhlbiByZW1vdmFsKQotICAgIH0gZWxzZSB7Ci0gICAgalF1ZXJ5LmF0dHIoIGVsZW0sIG5h
bWUsICIiICk7Ci0gICAgfQotCi0gICAgZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIGdldFNldEF0dHJp
YnV0ZSA/IG5hbWUgOiBwcm9wTmFtZSApOwotICAgIH0KLSAgICB9Ci0gICAgfSwKLQotICAgIGF0
dHJIb29rczogewotICAgIHR5cGU6IHsKLSAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSAp
IHsKLSAgICBpZiAoICFqUXVlcnkuc3VwcG9ydC5yYWRpb1ZhbHVlICYmIHZhbHVlID09PSAicmFk
aW8iICYmIGpRdWVyeS5ub2RlTmFtZShlbGVtLCAiaW5wdXQiKSApIHsKLSAgICAvLyBTZXR0aW5n
IHRoZSB0eXBlIG9uIGEgcmFkaW8gYnV0dG9uIGFmdGVyIHRoZSB2YWx1ZSByZXNldHMgdGhlIHZh
bHVlIGluIElFNi05Ci0gICAgLy8gUmVzZXQgdmFsdWUgdG8gZGVmYXVsdCBpbiBjYXNlIHR5cGUg
aXMgc2V0IGFmdGVyIHZhbHVlIGR1cmluZyBjcmVhdGlvbgotICAgIHZhciB2YWwgPSBlbGVtLnZh
bHVlOwotICAgIGVsZW0uc2V0QXR0cmlidXRlKCAidHlwZSIsIHZhbHVlICk7Ci0gICAgaWYgKCB2
YWwgKSB7Ci0gICAgZWxlbS52YWx1ZSA9IHZhbDsKLSAgICB9Ci0gICAgcmV0dXJuIHZhbHVlOwot
ICAgIH0KLSAgICB9Ci0gICAgfQotICAgIH0sCi0KLSAgICBwcm9wRml4OiB7Ci0gICAgdGFiaW5k
ZXg6ICJ0YWJJbmRleCIsCi0gICAgcmVhZG9ubHk6ICJyZWFkT25seSIsCi0gICAgImZvciI6ICJo
dG1sRm9yIiwKLSAgICAiY2xhc3MiOiAiY2xhc3NOYW1lIiwKLSAgICBtYXhsZW5ndGg6ICJtYXhM
ZW5ndGgiLAotICAgIGNlbGxzcGFjaW5nOiAiY2VsbFNwYWNpbmciLAotICAgIGNlbGxwYWRkaW5n
OiAiY2VsbFBhZGRpbmciLAotICAgIHJvd3NwYW46ICJyb3dTcGFuIiwKLSAgICBjb2xzcGFuOiAi
Y29sU3BhbiIsCi0gICAgdXNlbWFwOiAidXNlTWFwIiwKLSAgICBmcmFtZWJvcmRlcjogImZyYW1l
Qm9yZGVyIiwKLSAgICBjb250ZW50ZWRpdGFibGU6ICJjb250ZW50RWRpdGFibGUiCi0gICAgfSwK
LQotICAgIHByb3A6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHsKLSAgICB2YXIgcmV0
LCBob29rcywgbm90eG1sLAotICAgIG5UeXBlID0gZWxlbS5ub2RlVHlwZTsKLQotICAgIC8vIGRv
bid0IGdldC9zZXQgcHJvcGVydGllcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9k
ZXMKLSAgICBpZiAoICFlbGVtIHx8IG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBl
ID09PSAyICkgewotICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBub3R4bWwgPSBuVHlwZSAhPT0g
MSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICk7Ci0KLSAgICBpZiAoIG5vdHhtbCApIHsKLSAg
ICAvLyBGaXggbmFtZSBhbmQgYXR0YWNoIGhvb2tzCi0gICAgbmFtZSA9IGpRdWVyeS5wcm9wRml4
WyBuYW1lIF0gfHwgbmFtZTsKLSAgICBob29rcyA9IGpRdWVyeS5wcm9wSG9va3NbIG5hbWUgXTsK
LSAgICB9Ci0KLSAgICBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7Ci0gICAgaWYgKCBob29r
cyAmJiAic2V0IiBpbiBob29rcyAmJiAocmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFt
ZSApKSAhPT0gdW5kZWZpbmVkICkgewotICAgIHJldHVybiByZXQ7Ci0KLSAgICB9IGVsc2Ugewot
ICAgIHJldHVybiAoIGVsZW1bIG5hbWUgXSA9IHZhbHVlICk7Ci0gICAgfQotCi0gICAgfSBlbHNl
IHsKLSAgICBpZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tzICYmIChyZXQgPSBob29rcy5nZXQo
IGVsZW0sIG5hbWUgKSkgIT09IG51bGwgKSB7Ci0gICAgcmV0dXJuIHJldDsKLQotICAgIH0gZWxz
ZSB7Ci0gICAgcmV0dXJuIGVsZW1bIG5hbWUgXTsKLSAgICB9Ci0gICAgfQotICAgIH0sCi0KLSAg
ICBwcm9wSG9va3M6IHsKLSAgICB0YWJJbmRleDogewotICAgIGdldDogZnVuY3Rpb24oIGVsZW0g
KSB7Ci0gICAgLy8gZWxlbS50YWJJbmRleCBkb2Vzbid0IGFsd2F5cyByZXR1cm4gdGhlIGNvcnJl
Y3QgdmFsdWUgd2hlbiBpdCBoYXNuJ3QgYmVlbiBleHBsaWNpdGx5IHNldAotICAgIC8vIGh0dHA6
Ly9mbHVpZHByb2plY3Qub3JnL2Jsb2cvMjAwOC8wMS8wOS9nZXR0aW5nLXNldHRpbmctYW5kLXJl
bW92aW5nLXRhYmluZGV4LXZhbHVlcy13aXRoLWphdmFzY3JpcHQvCi0gICAgdmFyIGF0dHJpYnV0
ZU5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoInRhYmluZGV4Iik7Ci0KLSAgICByZXR1cm4g
YXR0cmlidXRlTm9kZSAmJiBhdHRyaWJ1dGVOb2RlLnNwZWNpZmllZCA/Ci0gICAgcGFyc2VJbnQo
IGF0dHJpYnV0ZU5vZGUudmFsdWUsIDEwICkgOgotICAgIHJmb2N1c2FibGUudGVzdCggZWxlbS5u
b2RlTmFtZSApIHx8IHJjbGlja2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApICYmIGVsZW0uaHJl
ZiA/Ci0gICAgMCA6Ci0gICAgdW5kZWZpbmVkOwotICAgIH0KLSAgICB9Ci0gICAgfQotfSk7Ci0K
LS8vIEhvb2sgZm9yIGJvb2xlYW4gYXR0cmlidXRlcwotYm9vbEhvb2sgPSB7Ci0gICAgZ2V0OiBm
dW5jdGlvbiggZWxlbSwgbmFtZSApIHsKLSAgICB2YXIKLSAgICAvLyBVc2UgLnByb3AgdG8gZGV0
ZXJtaW5lIGlmIHRoaXMgYXR0cmlidXRlIGlzIHVuZGVyc3Rvb2QgYXMgYm9vbGVhbgotICAgIHBy
b3AgPSBqUXVlcnkucHJvcCggZWxlbSwgbmFtZSApLAotCi0gICAgLy8gRmV0Y2ggaXQgYWNjb3Jk
aW5nbHkKLSAgICBhdHRyID0gdHlwZW9mIHByb3AgPT09ICJib29sZWFuIiAmJiBlbGVtLmdldEF0
dHJpYnV0ZSggbmFtZSApLAotICAgIGRldGFpbCA9IHR5cGVvZiBwcm9wID09PSAiYm9vbGVhbiIg
PwotCi0gICAgZ2V0U2V0SW5wdXQgJiYgZ2V0U2V0QXR0cmlidXRlID8KLSAgICBhdHRyICE9IG51
bGwgOgotICAgIC8vIG9sZElFIGZhYnJpY2F0ZXMgYW4gZW1wdHkgc3RyaW5nIGZvciBtaXNzaW5n
IGJvb2xlYW4gYXR0cmlidXRlcwotICAgIC8vIGFuZCBjb25mbGF0ZXMgY2hlY2tlZC9zZWxlY3Rl
ZCBpbnRvIGF0dHJvcGVydGllcwotICAgIHJ1c2VEZWZhdWx0LnRlc3QoIG5hbWUgKSA/Ci0gICAg
ZWxlbVsgalF1ZXJ5LmNhbWVsQ2FzZSggImRlZmF1bHQtIiArIG5hbWUgKSBdIDoKLSAgICAhIWF0
dHIgOgotCi0gICAgLy8gZmV0Y2ggYW4gYXR0cmlidXRlIG5vZGUgZm9yIHByb3BlcnRpZXMgbm90
IHJlY29nbml6ZWQgYXMgYm9vbGVhbgotICAgIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggbmFtZSAp
OwotCi0gICAgcmV0dXJuIGRldGFpbCAmJiBkZXRhaWwudmFsdWUgIT09IGZhbHNlID8KLSAgICBu
YW1lLnRvTG93ZXJDYXNlKCkgOgotICAgIHVuZGVmaW5lZDsKLSAgICB9LAotICAgIHNldDogZnVu
Y3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkgewotICAgIGlmICggdmFsdWUgPT09IGZhbHNlICkg
ewotICAgIC8vIFJlbW92ZSBib29sZWFuIGF0dHJpYnV0ZXMgd2hlbiBzZXQgdG8gZmFsc2UKLSAg
ICBqUXVlcnkucmVtb3ZlQXR0ciggZWxlbSwgbmFtZSApOwotICAgIH0gZWxzZSBpZiAoIGdldFNl
dElucHV0ICYmIGdldFNldEF0dHJpYnV0ZSB8fCAhcnVzZURlZmF1bHQudGVzdCggbmFtZSApICkg
ewotICAgIC8vIElFPDggbmVlZHMgdGhlICpwcm9wZXJ0eSogbmFtZQotICAgIGVsZW0uc2V0QXR0
cmlidXRlKCAhZ2V0U2V0QXR0cmlidXRlICYmIGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFt
ZSwgbmFtZSApOwotCi0gICAgLy8gVXNlIGRlZmF1bHRDaGVja2VkIGFuZCBkZWZhdWx0U2VsZWN0
ZWQgZm9yIG9sZElFCi0gICAgfSBlbHNlIHsKLSAgICBlbGVtWyBqUXVlcnkuY2FtZWxDYXNlKCAi
ZGVmYXVsdC0iICsgbmFtZSApIF0gPSBlbGVtWyBuYW1lIF0gPSB0cnVlOwotICAgIH0KLQotICAg
IHJldHVybiBuYW1lOwotICAgIH0KLX07Ci0KLS8vIGZpeCBvbGRJRSB2YWx1ZSBhdHRyb3BlcnR5
Ci1pZiAoICFnZXRTZXRJbnB1dCB8fCAhZ2V0U2V0QXR0cmlidXRlICkgewotICAgIGpRdWVyeS5h
dHRySG9va3MudmFsdWUgPSB7Ci0gICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsKLSAg
ICB2YXIgcmV0ID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICk7Ci0gICAgcmV0dXJuIGpR
dWVyeS5ub2RlTmFtZSggZWxlbSwgImlucHV0IiApID8KLQotICAgIC8vIElnbm9yZSB0aGUgdmFs
dWUgKnByb3BlcnR5KiBieSB1c2luZyBkZWZhdWx0VmFsdWUKLSAgICBlbGVtLmRlZmF1bHRWYWx1
ZSA6Ci0KLSAgICByZXQgJiYgcmV0LnNwZWNpZmllZCA/IHJldC52YWx1ZSA6IHVuZGVmaW5lZDsK
LSAgICB9LAotICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkgewotICAgIGlm
ICggalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiaW5wdXQiICkgKSB7Ci0gICAgLy8gRG9lcyBub3Qg
cmV0dXJuIHNvIHRoYXQgc2V0QXR0cmlidXRlIGlzIGFsc28gdXNlZAotICAgIGVsZW0uZGVmYXVs
dFZhbHVlID0gdmFsdWU7Ci0gICAgfSBlbHNlIHsKLSAgICAvLyBVc2Ugbm9kZUhvb2sgaWYgZGVm
aW5lZCAoIzE5NTQpOyBvdGhlcndpc2Ugc2V0QXR0cmlidXRlIGlzIGZpbmUKLSAgICByZXR1cm4g
bm9kZUhvb2sgJiYgbm9kZUhvb2suc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApOwotICAgIH0KLSAg
ICB9Ci0gICAgfTsKLX0KLQotLy8gSUU2LzcgZG8gbm90IHN1cHBvcnQgZ2V0dGluZy9zZXR0aW5n
IHNvbWUgYXR0cmlidXRlcyB3aXRoIGdldC9zZXRBdHRyaWJ1dGUKLWlmICggIWdldFNldEF0dHJp
YnV0ZSApIHsKLQotICAgIC8vIFVzZSB0aGlzIGZvciBhbnkgYXR0cmlidXRlIGluIElFNi83Ci0g
ICAgLy8gVGhpcyBmaXhlcyBhbG1vc3QgZXZlcnkgSUU2LzcgaXNzdWUKLSAgICBub2RlSG9vayA9
IGpRdWVyeS52YWxIb29rcy5idXR0b24gPSB7Ci0gICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgbmFt
ZSApIHsKLSAgICB2YXIgcmV0ID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICk7Ci0gICAg
cmV0dXJuIHJldCAmJiAoIG5hbWUgPT09ICJpZCIgfHwgbmFtZSA9PT0gIm5hbWUiIHx8IG5hbWUg
PT09ICJjb29yZHMiID8gcmV0LnZhbHVlICE9PSAiIiA6IHJldC5zcGVjaWZpZWQgKSA/Ci0gICAg
cmV0LnZhbHVlIDoKLSAgICB1bmRlZmluZWQ7Ci0gICAgfSwKLSAgICBzZXQ6IGZ1bmN0aW9uKCBl
bGVtLCB2YWx1ZSwgbmFtZSApIHsKLSAgICAvLyBTZXQgdGhlIGV4aXN0aW5nIG9yIGNyZWF0ZSBh
IG5ldyBhdHRyaWJ1dGUgbm9kZQotICAgIHZhciByZXQgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUo
IG5hbWUgKTsKLSAgICBpZiAoICFyZXQgKSB7Ci0gICAgZWxlbS5zZXRBdHRyaWJ1dGVOb2RlKAot
ICAgIChyZXQgPSBlbGVtLm93bmVyRG9jdW1lbnQuY3JlYXRlQXR0cmlidXRlKCBuYW1lICkpCi0g
ICAgKTsKLSAgICB9Ci0KLSAgICByZXQudmFsdWUgPSB2YWx1ZSArPSAiIjsKLQotICAgIC8vIEJy
ZWFrIGFzc29jaWF0aW9uIHdpdGggY2xvbmVkIGVsZW1lbnRzIGJ5IGFsc28gdXNpbmcgc2V0QXR0
cmlidXRlICgjOTY0NikKLSAgICByZXR1cm4gbmFtZSA9PT0gInZhbHVlIiB8fCB2YWx1ZSA9PT0g
ZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKSA/Ci0gICAgdmFsdWUgOgotICAgIHVuZGVmaW5lZDsK
LSAgICB9Ci0gICAgfTsKLQotICAgIC8vIFNldCBjb250ZW50ZWRpdGFibGUgdG8gZmFsc2Ugb24g
cmVtb3ZhbHMoIzEwNDI5KQotICAgIC8vIFNldHRpbmcgdG8gZW1wdHkgc3RyaW5nIHRocm93cyBh
biBlcnJvciBhcyBhbiBpbnZhbGlkIHZhbHVlCi0gICAgalF1ZXJ5LmF0dHJIb29rcy5jb250ZW50
ZWRpdGFibGUgPSB7Ci0gICAgZ2V0OiBub2RlSG9vay5nZXQsCi0gICAgc2V0OiBmdW5jdGlvbigg
ZWxlbSwgdmFsdWUsIG5hbWUgKSB7Ci0gICAgbm9kZUhvb2suc2V0KCBlbGVtLCB2YWx1ZSA9PT0g
IiIgPyBmYWxzZSA6IHZhbHVlLCBuYW1lICk7Ci0gICAgfQotICAgIH07Ci0KLSAgICAvLyBTZXQg
d2lkdGggYW5kIGhlaWdodCB0byBhdXRvIGluc3RlYWQgb2YgMCBvbiBlbXB0eSBzdHJpbmcoIEJ1
ZyAjODE1MCApCi0gICAgLy8gVGhpcyBpcyBmb3IgcmVtb3ZhbHMKLSAgICBqUXVlcnkuZWFjaChb
ICJ3aWR0aCIsICJoZWlnaHQiIF0sIGZ1bmN0aW9uKCBpLCBuYW1lICkgewotICAgIGpRdWVyeS5h
dHRySG9va3NbIG5hbWUgXSA9IGpRdWVyeS5leHRlbmQoIGpRdWVyeS5hdHRySG9va3NbIG5hbWUg
XSwgewotICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgewotICAgIGlmICggdmFsdWUg
PT09ICIiICkgewotICAgIGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCAiYXV0byIgKTsKLSAgICBy
ZXR1cm4gdmFsdWU7Ci0gICAgfQotICAgIH0KLSAgICB9KTsKLSAgICB9KTsKLX0KLQotCi0vLyBT
b21lIGF0dHJpYnV0ZXMgcmVxdWlyZSBhIHNwZWNpYWwgY2FsbCBvbiBJRQotLy8gaHR0cDovL21z
ZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNTM2NDI5JTI4VlMuODUlMjkuYXNweAot
aWYgKCAhalF1ZXJ5LnN1cHBvcnQuaHJlZk5vcm1hbGl6ZWQgKSB7Ci0gICAgalF1ZXJ5LmVhY2go
WyAiaHJlZiIsICJzcmMiLCAid2lkdGgiLCAiaGVpZ2h0IiBdLCBmdW5jdGlvbiggaSwgbmFtZSAp
IHsKLSAgICBqUXVlcnkuYXR0ckhvb2tzWyBuYW1lIF0gPSBqUXVlcnkuZXh0ZW5kKCBqUXVlcnku
YXR0ckhvb2tzWyBuYW1lIF0sIHsKLSAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgIHZh
ciByZXQgPSBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSwgMiApOwotICAgIHJldHVybiByZXQgPT0g
bnVsbCA/IHVuZGVmaW5lZCA6IHJldDsKLSAgICB9Ci0gICAgfSk7Ci0gICAgfSk7Ci0KLSAgICAv
LyBocmVmL3NyYyBwcm9wZXJ0eSBzaG91bGQgZ2V0IHRoZSBmdWxsIG5vcm1hbGl6ZWQgVVJMICgj
MTAyOTkvIzEyOTE1KQotICAgIGpRdWVyeS5lYWNoKFsgImhyZWYiLCAic3JjIiBdLCBmdW5jdGlv
biggaSwgbmFtZSApIHsKLSAgICBqUXVlcnkucHJvcEhvb2tzWyBuYW1lIF0gPSB7Ci0gICAgZ2V0
OiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICByZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUs
IDQgKTsKLSAgICB9Ci0gICAgfTsKLSAgICB9KTsKLX0KLQotaWYgKCAhalF1ZXJ5LnN1cHBvcnQu
c3R5bGUgKSB7Ci0gICAgalF1ZXJ5LmF0dHJIb29rcy5zdHlsZSA9IHsKLSAgICBnZXQ6IGZ1bmN0
aW9uKCBlbGVtICkgewotICAgIC8vIFJldHVybiB1bmRlZmluZWQgaW4gdGhlIGNhc2Ugb2YgZW1w
dHkgc3RyaW5nCi0gICAgLy8gTm90ZTogSUUgdXBwZXJjYXNlcyBjc3MgcHJvcGVydHkgbmFtZXMs
IGJ1dCBpZiB3ZSB3ZXJlIHRvIC50b0xvd2VyQ2FzZSgpCi0gICAgLy8gLmNzc1RleHQsIHRoYXQg
d291bGQgZGVzdHJveSBjYXNlIHNlbnN0aXRpdml0eSBpbiBVUkwncywgbGlrZSBpbiAiYmFja2dy
b3VuZCIKLSAgICByZXR1cm4gZWxlbS5zdHlsZS5jc3NUZXh0IHx8IHVuZGVmaW5lZDsKLSAgICB9
LAotICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgewotICAgIHJldHVybiAoIGVsZW0u
c3R5bGUuY3NzVGV4dCA9IHZhbHVlICsgIiIgKTsKLSAgICB9Ci0gICAgfTsKLX0KLQotLy8gU2Fm
YXJpIG1pcy1yZXBvcnRzIHRoZSBkZWZhdWx0IHNlbGVjdGVkIHByb3BlcnR5IG9mIGFuIG9wdGlv
bgotLy8gQWNjZXNzaW5nIHRoZSBwYXJlbnQncyBzZWxlY3RlZEluZGV4IHByb3BlcnR5IGZpeGVz
IGl0Ci1pZiAoICFqUXVlcnkuc3VwcG9ydC5vcHRTZWxlY3RlZCApIHsKLSAgICBqUXVlcnkucHJv
cEhvb2tzLnNlbGVjdGVkID0galF1ZXJ5LmV4dGVuZCggalF1ZXJ5LnByb3BIb29rcy5zZWxlY3Rl
ZCwgewotICAgIGdldDogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgdmFyIHBhcmVudCA9IGVsZW0u
cGFyZW50Tm9kZTsKLQotICAgIGlmICggcGFyZW50ICkgewotICAgIHBhcmVudC5zZWxlY3RlZElu
ZGV4OwotCi0gICAgLy8gTWFrZSBzdXJlIHRoYXQgaXQgYWxzbyB3b3JrcyB3aXRoIG9wdGdyb3Vw
cywgc2VlICM1NzAxCi0gICAgaWYgKCBwYXJlbnQucGFyZW50Tm9kZSApIHsKLSAgICBwYXJlbnQu
cGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4OwotICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7
Ci0gICAgfQotICAgIH0pOwotfQotCi0vLyBJRTYvNyBjYWxsIGVuY3R5cGUgZW5jb2RpbmcKLWlm
ICggIWpRdWVyeS5zdXBwb3J0LmVuY3R5cGUgKSB7Ci0gICAgalF1ZXJ5LnByb3BGaXguZW5jdHlw
ZSA9ICJlbmNvZGluZyI7Ci19Ci0KLS8vIFJhZGlvcyBhbmQgY2hlY2tib3hlcyBnZXR0ZXIvc2V0
dGVyCi1pZiAoICFqUXVlcnkuc3VwcG9ydC5jaGVja09uICkgewotICAgIGpRdWVyeS5lYWNoKFsg
InJhZGlvIiwgImNoZWNrYm94IiBdLCBmdW5jdGlvbigpIHsKLSAgICBqUXVlcnkudmFsSG9va3Nb
IHRoaXMgXSA9IHsKLSAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgIC8vIEhhbmRsZSB0
aGUgY2FzZSB3aGVyZSBpbiBXZWJraXQgIiIgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiAib24iIGlm
IGEgdmFsdWUgaXNuJ3Qgc3BlY2lmaWVkCi0gICAgcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCJ2
YWx1ZSIpID09PSBudWxsID8gIm9uIiA6IGVsZW0udmFsdWU7Ci0gICAgfQotICAgIH07Ci0gICAg
fSk7Ci19Ci1qUXVlcnkuZWFjaChbICJyYWRpbyIsICJjaGVja2JveCIgXSwgZnVuY3Rpb24oKSB7
Ci0gICAgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0gPSBqUXVlcnkuZXh0ZW5kKCBqUXVlcnkudmFs
SG9va3NbIHRoaXMgXSwgewotICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgewotICAg
IGlmICggalF1ZXJ5LmlzQXJyYXkoIHZhbHVlICkgKSB7Ci0gICAgcmV0dXJuICggZWxlbS5jaGVj
a2VkID0galF1ZXJ5LmluQXJyYXkoIGpRdWVyeShlbGVtKS52YWwoKSwgdmFsdWUgKSA+PSAwICk7
Ci0gICAgfQotICAgIH0KLSAgICB9KTsKLX0pOwotdmFyIHJmb3JtRWxlbXMgPSAvXig/OmlucHV0
fHNlbGVjdHx0ZXh0YXJlYSkkL2ksCi0gICAgcmtleUV2ZW50ID0gL15rZXkvLAotICAgIHJtb3Vz
ZUV2ZW50ID0gL14oPzptb3VzZXxjb250ZXh0bWVudSl8Y2xpY2svLAotICAgIHJmb2N1c01vcnBo
ID0gL14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvLAotICAgIHJ0eXBlbmFtZXNwYWNl
ID0gL14oW14uXSopKD86XC4oLispfCkkLzsKLQotZnVuY3Rpb24gcmV0dXJuVHJ1ZSgpIHsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotZnVuY3Rpb24gcmV0dXJuRmFsc2UoKSB7Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi0vKgotICogSGVscGVyIGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgZXZlbnRz
IC0tIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLgotICogUHJvcHMgdG8gRGVhbiBF
ZHdhcmRzJyBhZGRFdmVudCBsaWJyYXJ5IGZvciBtYW55IG9mIHRoZSBpZGVhcy4KLSAqLwotalF1
ZXJ5LmV2ZW50ID0gewotCi0gICAgZ2xvYmFsOiB7fSwKLQotICAgIGFkZDogZnVuY3Rpb24oIGVs
ZW0sIHR5cGVzLCBoYW5kbGVyLCBkYXRhLCBzZWxlY3RvciApIHsKLSAgICB2YXIgdG1wLCBldmVu
dHMsIHQsIGhhbmRsZU9iakluLAotICAgIHNwZWNpYWwsIGV2ZW50SGFuZGxlLCBoYW5kbGVPYmos
Ci0gICAgaGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMsIG9yaWdUeXBlLAotICAgIGVsZW1EYXRh
ID0galF1ZXJ5Ll9kYXRhKCBlbGVtICk7Ci0KLSAgICAvLyBEb24ndCBhdHRhY2ggZXZlbnRzIHRv
IG5vRGF0YSBvciB0ZXh0L2NvbW1lbnQgbm9kZXMgKGJ1dCBhbGxvdyBwbGFpbiBvYmplY3RzKQot
ICAgIGlmICggIWVsZW1EYXRhICkgewotICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBDYWxs
ZXIgY2FuIHBhc3MgaW4gYW4gb2JqZWN0IG9mIGN1c3RvbSBkYXRhIGluIGxpZXUgb2YgdGhlIGhh
bmRsZXIKLSAgICBpZiAoIGhhbmRsZXIuaGFuZGxlciApIHsKLSAgICBoYW5kbGVPYmpJbiA9IGhh
bmRsZXI7Ci0gICAgaGFuZGxlciA9IGhhbmRsZU9iakluLmhhbmRsZXI7Ci0gICAgc2VsZWN0b3Ig
PSBoYW5kbGVPYmpJbi5zZWxlY3RvcjsKLSAgICB9Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhhdCB0
aGUgaGFuZGxlciBoYXMgYSB1bmlxdWUgSUQsIHVzZWQgdG8gZmluZC9yZW1vdmUgaXQgbGF0ZXIK
LSAgICBpZiAoICFoYW5kbGVyLmd1aWQgKSB7Ci0gICAgaGFuZGxlci5ndWlkID0galF1ZXJ5Lmd1
aWQrKzsKLSAgICB9Ci0KLSAgICAvLyBJbml0IHRoZSBlbGVtZW50J3MgZXZlbnQgc3RydWN0dXJl
IGFuZCBtYWluIGhhbmRsZXIsIGlmIHRoaXMgaXMgdGhlIGZpcnN0Ci0gICAgaWYgKCAhKGV2ZW50
cyA9IGVsZW1EYXRhLmV2ZW50cykgKSB7Ci0gICAgZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzID0g
e307Ci0gICAgfQotICAgIGlmICggIShldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZSkgKSB7
Ci0gICAgZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgPSBmdW5jdGlvbiggZSApIHsKLSAg
ICAvLyBEaXNjYXJkIHRoZSBzZWNvbmQgZXZlbnQgb2YgYSBqUXVlcnkuZXZlbnQudHJpZ2dlcigp
IGFuZAotICAgIC8vIHdoZW4gYW4gZXZlbnQgaXMgY2FsbGVkIGFmdGVyIGEgcGFnZSBoYXMgdW5s
b2FkZWQKLSAgICByZXR1cm4gdHlwZW9mIGpRdWVyeSAhPT0gY29yZV9zdHJ1bmRlZmluZWQgJiYg
KCFlIHx8IGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgIT09IGUudHlwZSkgPwotICAgIGpRdWVyeS5l
dmVudC5kaXNwYXRjaC5hcHBseSggZXZlbnRIYW5kbGUuZWxlbSwgYXJndW1lbnRzICkgOgotICAg
IHVuZGVmaW5lZDsKLSAgICB9OwotICAgIC8vIEFkZCBlbGVtIGFzIGEgcHJvcGVydHkgb2YgdGhl
IGhhbmRsZSBmbiB0byBwcmV2ZW50IGEgbWVtb3J5IGxlYWsgd2l0aCBJRSBub24tbmF0aXZlIGV2
ZW50cwotICAgIGV2ZW50SGFuZGxlLmVsZW0gPSBlbGVtOwotICAgIH0KLQotICAgIC8vIEhhbmRs
ZSBtdWx0aXBsZSBldmVudHMgc2VwYXJhdGVkIGJ5IGEgc3BhY2UKLSAgICAvLyBqUXVlcnkoLi4u
KS5iaW5kKCJtb3VzZW92ZXIgbW91c2VvdXQiLCBmbik7Ci0gICAgdHlwZXMgPSAoIHR5cGVzIHx8
ICIiICkubWF0Y2goIGNvcmVfcm5vdHdoaXRlICkgfHwgWyIiXTsKLSAgICB0ID0gdHlwZXMubGVu
Z3RoOwotICAgIHdoaWxlICggdC0tICkgewotICAgIHRtcCA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMo
IHR5cGVzW3RdICkgfHwgW107Ci0gICAgdHlwZSA9IG9yaWdUeXBlID0gdG1wWzFdOwotICAgIG5h
bWVzcGFjZXMgPSAoIHRtcFsyXSB8fCAiIiApLnNwbGl0KCAiLiIgKS5zb3J0KCk7Ci0KLSAgICAv
LyBJZiBldmVudCBjaGFuZ2VzIGl0cyB0eXBlLCB1c2UgdGhlIHNwZWNpYWwgZXZlbnQgaGFuZGxl
cnMgZm9yIHRoZSBjaGFuZ2VkIHR5cGUKLSAgICBzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNp
YWxbIHR5cGUgXSB8fCB7fTsKLQotICAgIC8vIElmIHNlbGVjdG9yIGRlZmluZWQsIGRldGVybWlu
ZSBzcGVjaWFsIGV2ZW50IGFwaSB0eXBlLCBvdGhlcndpc2UgZ2l2ZW4gdHlwZQotICAgIHR5cGUg
PSAoIHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkg
fHwgdHlwZTsKLQotICAgIC8vIFVwZGF0ZSBzcGVjaWFsIGJhc2VkIG9uIG5ld2x5IHJlc2V0IHR5
cGUKLSAgICBzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTsKLQot
ICAgIC8vIGhhbmRsZU9iaiBpcyBwYXNzZWQgdG8gYWxsIGV2ZW50IGhhbmRsZXJzCi0gICAgaGFu
ZGxlT2JqID0galF1ZXJ5LmV4dGVuZCh7Ci0gICAgdHlwZTogdHlwZSwKLSAgICBvcmlnVHlwZTog
b3JpZ1R5cGUsCi0gICAgZGF0YTogZGF0YSwKLSAgICBoYW5kbGVyOiBoYW5kbGVyLAotICAgIGd1
aWQ6IGhhbmRsZXIuZ3VpZCwKLSAgICBzZWxlY3Rvcjogc2VsZWN0b3IsCi0gICAgbmVlZHNDb250
ZXh0OiBzZWxlY3RvciAmJiBqUXVlcnkuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdCggc2Vs
ZWN0b3IgKSwKLSAgICBuYW1lc3BhY2U6IG5hbWVzcGFjZXMuam9pbigiLiIpCi0gICAgfSwgaGFu
ZGxlT2JqSW4gKTsKLQotICAgIC8vIEluaXQgdGhlIGV2ZW50IGhhbmRsZXIgcXVldWUgaWYgd2Un
cmUgdGhlIGZpcnN0Ci0gICAgaWYgKCAhKGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0pICkgewot
ICAgIGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gPSBbXTsKLSAgICBoYW5kbGVycy5kZWxlZ2F0
ZUNvdW50ID0gMDsKLQotICAgIC8vIE9ubHkgdXNlIGFkZEV2ZW50TGlzdGVuZXIvYXR0YWNoRXZl
bnQgaWYgdGhlIHNwZWNpYWwgZXZlbnRzIGhhbmRsZXIgcmV0dXJucyBmYWxzZQotICAgIGlmICgg
IXNwZWNpYWwuc2V0dXAgfHwgc3BlY2lhbC5zZXR1cC5jYWxsKCBlbGVtLCBkYXRhLCBuYW1lc3Bh
Y2VzLCBldmVudEhhbmRsZSApID09PSBmYWxzZSApIHsKLSAgICAvLyBCaW5kIHRoZSBnbG9iYWwg
ZXZlbnQgaGFuZGxlciB0byB0aGUgZWxlbWVudAotICAgIGlmICggZWxlbS5hZGRFdmVudExpc3Rl
bmVyICkgewotICAgIGVsZW0uYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgZXZlbnRIYW5kbGUsIGZh
bHNlICk7Ci0KLSAgICB9IGVsc2UgaWYgKCBlbGVtLmF0dGFjaEV2ZW50ICkgewotICAgIGVsZW0u
YXR0YWNoRXZlbnQoICJvbiIgKyB0eXBlLCBldmVudEhhbmRsZSApOwotICAgIH0KLSAgICB9Ci0g
ICAgfQotCi0gICAgaWYgKCBzcGVjaWFsLmFkZCApIHsKLSAgICBzcGVjaWFsLmFkZC5jYWxsKCBl
bGVtLCBoYW5kbGVPYmogKTsKLQotICAgIGlmICggIWhhbmRsZU9iai5oYW5kbGVyLmd1aWQgKSB7
Ci0gICAgaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCA9IGhhbmRsZXIuZ3VpZDsKLSAgICB9Ci0gICAg
fQotCi0gICAgLy8gQWRkIHRvIHRoZSBlbGVtZW50J3MgaGFuZGxlciBsaXN0LCBkZWxlZ2F0ZXMg
aW4gZnJvbnQKLSAgICBpZiAoIHNlbGVjdG9yICkgewotICAgIGhhbmRsZXJzLnNwbGljZSggaGFu
ZGxlcnMuZGVsZWdhdGVDb3VudCsrLCAwLCBoYW5kbGVPYmogKTsKLSAgICB9IGVsc2UgewotICAg
IGhhbmRsZXJzLnB1c2goIGhhbmRsZU9iaiApOwotICAgIH0KLQotICAgIC8vIEtlZXAgdHJhY2sg
b2Ygd2hpY2ggZXZlbnRzIGhhdmUgZXZlciBiZWVuIHVzZWQsIGZvciBldmVudCBvcHRpbWl6YXRp
b24KLSAgICBqUXVlcnkuZXZlbnQuZ2xvYmFsWyB0eXBlIF0gPSB0cnVlOwotICAgIH0KLQotICAg
IC8vIE51bGxpZnkgZWxlbSB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcyBpbiBJRQotICAgIGVsZW0g
PSBudWxsOwotICAgIH0sCi0KLSAgICAvLyBEZXRhY2ggYW4gZXZlbnQgb3Igc2V0IG9mIGV2ZW50
cyBmcm9tIGFuIGVsZW1lbnQKLSAgICByZW1vdmU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFu
ZGxlciwgc2VsZWN0b3IsIG1hcHBlZFR5cGVzICkgewotICAgIHZhciBqLCBoYW5kbGVPYmosIHRt
cCwKLSAgICBvcmlnQ291bnQsIHQsIGV2ZW50cywKLSAgICBzcGVjaWFsLCBoYW5kbGVycywgdHlw
ZSwKLSAgICBuYW1lc3BhY2VzLCBvcmlnVHlwZSwKLSAgICBlbGVtRGF0YSA9IGpRdWVyeS5oYXNE
YXRhKCBlbGVtICkgJiYgalF1ZXJ5Ll9kYXRhKCBlbGVtICk7Ci0KLSAgICBpZiAoICFlbGVtRGF0
YSB8fCAhKGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cykgKSB7Ci0gICAgcmV0dXJuOwotICAgIH0K
LQotICAgIC8vIE9uY2UgZm9yIGVhY2ggdHlwZS5uYW1lc3BhY2UgaW4gdHlwZXM7IHR5cGUgbWF5
IGJlIG9taXR0ZWQKLSAgICB0eXBlcyA9ICggdHlwZXMgfHwgIiIgKS5tYXRjaCggY29yZV9ybm90
d2hpdGUgKSB8fCBbIiJdOwotICAgIHQgPSB0eXBlcy5sZW5ndGg7Ci0gICAgd2hpbGUgKCB0LS0g
KSB7Ci0gICAgdG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbdF0gKSB8fCBbXTsKLSAg
ICB0eXBlID0gb3JpZ1R5cGUgPSB0bXBbMV07Ci0gICAgbmFtZXNwYWNlcyA9ICggdG1wWzJdIHx8
ICIiICkuc3BsaXQoICIuIiApLnNvcnQoKTsKLQotICAgIC8vIFVuYmluZCBhbGwgZXZlbnRzIChv
biB0aGlzIG5hbWVzcGFjZSwgaWYgcHJvdmlkZWQpIGZvciB0aGUgZWxlbWVudAotICAgIGlmICgg
IXR5cGUgKSB7Ci0gICAgZm9yICggdHlwZSBpbiBldmVudHMgKSB7Ci0gICAgalF1ZXJ5LmV2ZW50
LnJlbW92ZSggZWxlbSwgdHlwZSArIHR5cGVzWyB0IF0sIGhhbmRsZXIsIHNlbGVjdG9yLCB0cnVl
ICk7Ci0gICAgfQotICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIHNwZWNpYWwgPSBqUXVlcnku
ZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9OwotICAgIHR5cGUgPSAoIHNlbGVjdG9yID8gc3Bl
Y2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTsKLSAgICBoYW5k
bGVycyA9IGV2ZW50c1sgdHlwZSBdIHx8IFtdOwotICAgIHRtcCA9IHRtcFsyXSAmJiBuZXcgUmVn
RXhwKCAiKF58XFwuKSIgKyBuYW1lc3BhY2VzLmpvaW4oIlxcLig/Oi4qXFwufCkiKSArICIoXFwu
fCQpIiApOwotCi0gICAgLy8gUmVtb3ZlIG1hdGNoaW5nIGV2ZW50cwotICAgIG9yaWdDb3VudCA9
IGogPSBoYW5kbGVycy5sZW5ndGg7Ci0gICAgd2hpbGUgKCBqLS0gKSB7Ci0gICAgaGFuZGxlT2Jq
ID0gaGFuZGxlcnNbIGogXTsKLQotICAgIGlmICggKCBtYXBwZWRUeXBlcyB8fCBvcmlnVHlwZSA9
PT0gaGFuZGxlT2JqLm9yaWdUeXBlICkgJiYKLSAgICAoICFoYW5kbGVyIHx8IGhhbmRsZXIuZ3Vp
ZCA9PT0gaGFuZGxlT2JqLmd1aWQgKSAmJgotICAgICggIXRtcCB8fCB0bXAudGVzdCggaGFuZGxl
T2JqLm5hbWVzcGFjZSApICkgJiYKLSAgICAoICFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gaGFu
ZGxlT2JqLnNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSAiKioiICYmIGhhbmRsZU9iai5zZWxlY3Rv
ciApICkgewotICAgIGhhbmRsZXJzLnNwbGljZSggaiwgMSApOwotCi0gICAgaWYgKCBoYW5kbGVP
Ymouc2VsZWN0b3IgKSB7Ci0gICAgaGFuZGxlcnMuZGVsZWdhdGVDb3VudC0tOwotICAgIH0KLSAg
ICBpZiAoIHNwZWNpYWwucmVtb3ZlICkgewotICAgIHNwZWNpYWwucmVtb3ZlLmNhbGwoIGVsZW0s
IGhhbmRsZU9iaiApOwotICAgIH0KLSAgICB9Ci0gICAgfQotCi0gICAgLy8gUmVtb3ZlIGdlbmVy
aWMgZXZlbnQgaGFuZGxlciBpZiB3ZSByZW1vdmVkIHNvbWV0aGluZyBhbmQgbm8gbW9yZSBoYW5k
bGVycyBleGlzdAotICAgIC8vIChhdm9pZHMgcG90ZW50aWFsIGZvciBlbmRsZXNzIHJlY3Vyc2lv
biBkdXJpbmcgcmVtb3ZhbCBvZiBzcGVjaWFsIGV2ZW50IGhhbmRsZXJzKQotICAgIGlmICggb3Jp
Z0NvdW50ICYmICFoYW5kbGVycy5sZW5ndGggKSB7Ci0gICAgaWYgKCAhc3BlY2lhbC50ZWFyZG93
biB8fCBzcGVjaWFsLnRlYXJkb3duLmNhbGwoIGVsZW0sIG5hbWVzcGFjZXMsIGVsZW1EYXRhLmhh
bmRsZSApID09PSBmYWxzZSApIHsKLSAgICBqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUs
IGVsZW1EYXRhLmhhbmRsZSApOwotICAgIH0KLQotICAgIGRlbGV0ZSBldmVudHNbIHR5cGUgXTsK
LSAgICB9Ci0gICAgfQotCi0gICAgLy8gUmVtb3ZlIHRoZSBleHBhbmRvIGlmIGl0J3Mgbm8gbG9u
Z2VyIHVzZWQKLSAgICBpZiAoIGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBldmVudHMgKSApIHsKLSAg
ICBkZWxldGUgZWxlbURhdGEuaGFuZGxlOwotCi0gICAgLy8gcmVtb3ZlRGF0YSBhbHNvIGNoZWNr
cyBmb3IgZW1wdGluZXNzIGFuZCBjbGVhcnMgdGhlIGV4cGFuZG8gaWYgZW1wdHkKLSAgICAvLyBz
byB1c2UgaXQgaW5zdGVhZCBvZiBkZWxldGUKLSAgICBqUXVlcnkuX3JlbW92ZURhdGEoIGVsZW0s
ICJldmVudHMiICk7Ci0gICAgfQotICAgIH0sCi0KLSAgICB0cmlnZ2VyOiBmdW5jdGlvbiggZXZl
bnQsIGRhdGEsIGVsZW0sIG9ubHlIYW5kbGVycyApIHsKLSAgICB2YXIgaGFuZGxlLCBvbnR5cGUs
IGN1ciwKLSAgICBidWJibGVUeXBlLCBzcGVjaWFsLCB0bXAsIGksCi0gICAgZXZlbnRQYXRoID0g
WyBlbGVtIHx8IGRvY3VtZW50IF0sCi0gICAgdHlwZSA9IGNvcmVfaGFzT3duLmNhbGwoIGV2ZW50
LCAidHlwZSIgKSA/IGV2ZW50LnR5cGUgOiBldmVudCwKLSAgICBuYW1lc3BhY2VzID0gY29yZV9o
YXNPd24uY2FsbCggZXZlbnQsICJuYW1lc3BhY2UiICkgPyBldmVudC5uYW1lc3BhY2Uuc3BsaXQo
Ii4iKSA6IFtdOwotCi0gICAgY3VyID0gdG1wID0gZWxlbSA9IGVsZW0gfHwgZG9jdW1lbnQ7Ci0K
LSAgICAvLyBEb24ndCBkbyBldmVudHMgb24gdGV4dCBhbmQgY29tbWVudCBub2RlcwotICAgIGlm
ICggZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4ICkgewotICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICAvLyBmb2N1cy9ibHVyIG1vcnBocyB0byBmb2N1c2luL291dDsg
ZW5zdXJlIHdlJ3JlIG5vdCBmaXJpbmcgdGhlbSByaWdodCBub3cKLSAgICBpZiAoIHJmb2N1c01v
cnBoLnRlc3QoIHR5cGUgKyBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICkgKSB7Ci0gICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmICggdHlwZS5pbmRleE9mKCIuIikgPj0gMCApIHsKLSAgICAvLyBO
YW1lc3BhY2VkIHRyaWdnZXI7IGNyZWF0ZSBhIHJlZ2V4cCB0byBtYXRjaCBldmVudCB0eXBlIGlu
IGhhbmRsZSgpCi0gICAgbmFtZXNwYWNlcyA9IHR5cGUuc3BsaXQoIi4iKTsKLSAgICB0eXBlID0g
bmFtZXNwYWNlcy5zaGlmdCgpOwotICAgIG5hbWVzcGFjZXMuc29ydCgpOwotICAgIH0KLSAgICBv
bnR5cGUgPSB0eXBlLmluZGV4T2YoIjoiKSA8IDAgJiYgIm9uIiArIHR5cGU7Ci0KLSAgICAvLyBD
YWxsZXIgY2FuIHBhc3MgaW4gYSBqUXVlcnkuRXZlbnQgb2JqZWN0LCBPYmplY3QsIG9yIGp1c3Qg
YW4gZXZlbnQgdHlwZSBzdHJpbmcKLSAgICBldmVudCA9IGV2ZW50WyBqUXVlcnkuZXhwYW5kbyBd
ID8KLSAgICBldmVudCA6Ci0gICAgbmV3IGpRdWVyeS5FdmVudCggdHlwZSwgdHlwZW9mIGV2ZW50
ID09PSAib2JqZWN0IiAmJiBldmVudCApOwotCi0gICAgZXZlbnQuaXNUcmlnZ2VyID0gdHJ1ZTsK
LSAgICBldmVudC5uYW1lc3BhY2UgPSBuYW1lc3BhY2VzLmpvaW4oIi4iKTsKLSAgICBldmVudC5u
YW1lc3BhY2VfcmUgPSBldmVudC5uYW1lc3BhY2UgPwotICAgIG5ldyBSZWdFeHAoICIoXnxcXC4p
IiArIG5hbWVzcGFjZXMuam9pbigiXFwuKD86LipcXC58KSIpICsgIihcXC58JCkiICkgOgotICAg
IG51bGw7Ci0KLSAgICAvLyBDbGVhbiB1cCB0aGUgZXZlbnQgaW4gY2FzZSBpdCBpcyBiZWluZyBy
ZXVzZWQKLSAgICBldmVudC5yZXN1bHQgPSB1bmRlZmluZWQ7Ci0gICAgaWYgKCAhZXZlbnQudGFy
Z2V0ICkgewotICAgIGV2ZW50LnRhcmdldCA9IGVsZW07Ci0gICAgfQotCi0gICAgLy8gQ2xvbmUg
YW55IGluY29taW5nIGRhdGEgYW5kIHByZXBlbmQgdGhlIGV2ZW50LCBjcmVhdGluZyB0aGUgaGFu
ZGxlciBhcmcgbGlzdAotICAgIGRhdGEgPSBkYXRhID09IG51bGwgPwotICAgIFsgZXZlbnQgXSA6
Ci0gICAgalF1ZXJ5Lm1ha2VBcnJheSggZGF0YSwgWyBldmVudCBdICk7Ci0KLSAgICAvLyBBbGxv
dyBzcGVjaWFsIGV2ZW50cyB0byBkcmF3IG91dHNpZGUgdGhlIGxpbmVzCi0gICAgc3BlY2lhbCA9
IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307Ci0gICAgaWYgKCAhb25seUhhbmRs
ZXJzICYmIHNwZWNpYWwudHJpZ2dlciAmJiBzcGVjaWFsLnRyaWdnZXIuYXBwbHkoIGVsZW0sIGRh
dGEgKSA9PT0gZmFsc2UgKSB7Ci0gICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIERldGVybWlu
ZSBldmVudCBwcm9wYWdhdGlvbiBwYXRoIGluIGFkdmFuY2UsIHBlciBXM0MgZXZlbnRzIHNwZWMg
KCM5OTUxKQotICAgIC8vIEJ1YmJsZSB1cCB0byBkb2N1bWVudCwgdGhlbiB0byB3aW5kb3c7IHdh
dGNoIGZvciBhIGdsb2JhbCBvd25lckRvY3VtZW50IHZhciAoIzk3MjQpCi0gICAgaWYgKCAhb25s
eUhhbmRsZXJzICYmICFzcGVjaWFsLm5vQnViYmxlICYmICFqUXVlcnkuaXNXaW5kb3coIGVsZW0g
KSApIHsKLQotICAgIGJ1YmJsZVR5cGUgPSBzcGVjaWFsLmRlbGVnYXRlVHlwZSB8fCB0eXBlOwot
ICAgIGlmICggIXJmb2N1c01vcnBoLnRlc3QoIGJ1YmJsZVR5cGUgKyB0eXBlICkgKSB7Ci0gICAg
Y3VyID0gY3VyLnBhcmVudE5vZGU7Ci0gICAgfQotICAgIGZvciAoIDsgY3VyOyBjdXIgPSBjdXIu
cGFyZW50Tm9kZSApIHsKLSAgICBldmVudFBhdGgucHVzaCggY3VyICk7Ci0gICAgdG1wID0gY3Vy
OwotICAgIH0KLQotICAgIC8vIE9ubHkgYWRkIHdpbmRvdyBpZiB3ZSBnb3QgdG8gZG9jdW1lbnQg
KGUuZy4sIG5vdCBwbGFpbiBvYmogb3IgZGV0YWNoZWQgRE9NKQotICAgIGlmICggdG1wID09PSAo
ZWxlbS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50KSApIHsKLSAgICBldmVudFBhdGgucHVzaCgg
dG1wLmRlZmF1bHRWaWV3IHx8IHRtcC5wYXJlbnRXaW5kb3cgfHwgd2luZG93ICk7Ci0gICAgfQot
ICAgIH0KLQotICAgIC8vIEZpcmUgaGFuZGxlcnMgb24gdGhlIGV2ZW50IHBhdGgKLSAgICBpID0g
MDsKLSAgICB3aGlsZSAoIChjdXIgPSBldmVudFBhdGhbaSsrXSkgJiYgIWV2ZW50LmlzUHJvcGFn
YXRpb25TdG9wcGVkKCkgKSB7Ci0KLSAgICBldmVudC50eXBlID0gaSA+IDEgPwotICAgIGJ1YmJs
ZVR5cGUgOgotICAgIHNwZWNpYWwuYmluZFR5cGUgfHwgdHlwZTsKLQotICAgIC8vIGpRdWVyeSBo
YW5kbGVyCi0gICAgaGFuZGxlID0gKCBqUXVlcnkuX2RhdGEoIGN1ciwgImV2ZW50cyIgKSB8fCB7
fSApWyBldmVudC50eXBlIF0gJiYgalF1ZXJ5Ll9kYXRhKCBjdXIsICJoYW5kbGUiICk7Ci0gICAg
aWYgKCBoYW5kbGUgKSB7Ci0gICAgaGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKTsKLSAgICB9Ci0K
LSAgICAvLyBOYXRpdmUgaGFuZGxlcgotICAgIGhhbmRsZSA9IG9udHlwZSAmJiBjdXJbIG9udHlw
ZSBdOwotICAgIGlmICggaGFuZGxlICYmIGpRdWVyeS5hY2NlcHREYXRhKCBjdXIgKSAmJiBoYW5k
bGUuYXBwbHkgJiYgaGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKSA9PT0gZmFsc2UgKSB7Ci0gICAg
ZXZlbnQucHJldmVudERlZmF1bHQoKTsKLSAgICB9Ci0gICAgfQotICAgIGV2ZW50LnR5cGUgPSB0
eXBlOwotCi0gICAgLy8gSWYgbm9ib2R5IHByZXZlbnRlZCB0aGUgZGVmYXVsdCBhY3Rpb24sIGRv
IGl0IG5vdwotICAgIGlmICggIW9ubHlIYW5kbGVycyAmJiAhZXZlbnQuaXNEZWZhdWx0UHJldmVu
dGVkKCkgKSB7Ci0KLSAgICBpZiAoICghc3BlY2lhbC5fZGVmYXVsdCB8fCBzcGVjaWFsLl9kZWZh
dWx0LmFwcGx5KCBlbGVtLm93bmVyRG9jdW1lbnQsIGRhdGEgKSA9PT0gZmFsc2UpICYmCi0gICAg
ISh0eXBlID09PSAiY2xpY2siICYmIGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImEiICkpICYmIGpR
dWVyeS5hY2NlcHREYXRhKCBlbGVtICkgKSB7Ci0KLSAgICAvLyBDYWxsIGEgbmF0aXZlIERPTSBt
ZXRob2Qgb24gdGhlIHRhcmdldCB3aXRoIHRoZSBzYW1lIG5hbWUgbmFtZSBhcyB0aGUgZXZlbnQu
Ci0gICAgLy8gQ2FuJ3QgdXNlIGFuIC5pc0Z1bmN0aW9uKCkgY2hlY2sgaGVyZSBiZWNhdXNlIElF
Ni83IGZhaWxzIHRoYXQgdGVzdC4KLSAgICAvLyBEb24ndCBkbyBkZWZhdWx0IGFjdGlvbnMgb24g
d2luZG93LCB0aGF0J3Mgd2hlcmUgZ2xvYmFsIHZhcmlhYmxlcyBiZSAoIzYxNzApCi0gICAgaWYg
KCBvbnR5cGUgJiYgZWxlbVsgdHlwZSBdICYmICFqUXVlcnkuaXNXaW5kb3coIGVsZW0gKSApIHsK
LQotICAgIC8vIERvbid0IHJlLXRyaWdnZXIgYW4gb25GT08gZXZlbnQgd2hlbiB3ZSBjYWxsIGl0
cyBGT08oKSBtZXRob2QKLSAgICB0bXAgPSBlbGVtWyBvbnR5cGUgXTsKLQotICAgIGlmICggdG1w
ICkgewotICAgIGVsZW1bIG9udHlwZSBdID0gbnVsbDsKLSAgICB9Ci0KLSAgICAvLyBQcmV2ZW50
IHJlLXRyaWdnZXJpbmcgb2YgdGhlIHNhbWUgZXZlbnQsIHNpbmNlIHdlIGFscmVhZHkgYnViYmxl
ZCBpdCBhYm92ZQotICAgIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB0eXBlOwotICAgIHRyeSB7
Ci0gICAgZWxlbVsgdHlwZSBdKCk7Ci0gICAgfSBjYXRjaCAoIGUgKSB7Ci0gICAgLy8gSUU8OSBk
aWVzIG9uIGZvY3VzL2JsdXIgdG8gaGlkZGVuIGVsZW1lbnQgKCMxNDg2LCMxMjUxOCkKLSAgICAv
LyBvbmx5IHJlcHJvZHVjaWJsZSBvbiB3aW5YUCBJRTggbmF0aXZlLCBub3QgSUU5IGluIElFOCBt
b2RlCi0gICAgfQotICAgIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB1bmRlZmluZWQ7Ci0KLSAg
ICBpZiAoIHRtcCApIHsKLSAgICBlbGVtWyBvbnR5cGUgXSA9IHRtcDsKLSAgICB9Ci0gICAgfQot
ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZXZlbnQucmVzdWx0OwotICAgIH0sCi0KLSAgICBk
aXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50ICkgewotCi0gICAgLy8gTWFrZSBhIHdyaXRhYmxlIGpR
dWVyeS5FdmVudCBmcm9tIHRoZSBuYXRpdmUgZXZlbnQgb2JqZWN0Ci0gICAgZXZlbnQgPSBqUXVl
cnkuZXZlbnQuZml4KCBldmVudCApOwotCi0gICAgdmFyIGksIHJldCwgaGFuZGxlT2JqLCBtYXRj
aGVkLCBqLAotICAgIGhhbmRsZXJRdWV1ZSA9IFtdLAotICAgIGFyZ3MgPSBjb3JlX3NsaWNlLmNh
bGwoIGFyZ3VtZW50cyApLAotICAgIGhhbmRsZXJzID0gKCBqUXVlcnkuX2RhdGEoIHRoaXMsICJl
dmVudHMiICkgfHwge30gKVsgZXZlbnQudHlwZSBdIHx8IFtdLAotICAgIHNwZWNpYWwgPSBqUXVl
cnkuZXZlbnQuc3BlY2lhbFsgZXZlbnQudHlwZSBdIHx8IHt9OwotCi0gICAgLy8gVXNlIHRoZSBm
aXgtZWQgalF1ZXJ5LkV2ZW50IHJhdGhlciB0aGFuIHRoZSAocmVhZC1vbmx5KSBuYXRpdmUgZXZl
bnQKLSAgICBhcmdzWzBdID0gZXZlbnQ7Ci0gICAgZXZlbnQuZGVsZWdhdGVUYXJnZXQgPSB0aGlz
OwotCi0gICAgLy8gQ2FsbCB0aGUgcHJlRGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBl
LCBhbmQgbGV0IGl0IGJhaWwgaWYgZGVzaXJlZAotICAgIGlmICggc3BlY2lhbC5wcmVEaXNwYXRj
aCAmJiBzcGVjaWFsLnByZURpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICkgPT09IGZhbHNlICkg
ewotICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBEZXRlcm1pbmUgaGFuZGxlcnMKLSAgICBo
YW5kbGVyUXVldWUgPSBqUXVlcnkuZXZlbnQuaGFuZGxlcnMuY2FsbCggdGhpcywgZXZlbnQsIGhh
bmRsZXJzICk7Ci0KLSAgICAvLyBSdW4gZGVsZWdhdGVzIGZpcnN0OyB0aGV5IG1heSB3YW50IHRv
IHN0b3AgcHJvcGFnYXRpb24gYmVuZWF0aCB1cwotICAgIGkgPSAwOwotICAgIHdoaWxlICggKG1h
dGNoZWQgPSBoYW5kbGVyUXVldWVbIGkrKyBdKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3Bw
ZWQoKSApIHsKLSAgICBldmVudC5jdXJyZW50VGFyZ2V0ID0gbWF0Y2hlZC5lbGVtOwotCi0gICAg
aiA9IDA7Ci0gICAgd2hpbGUgKCAoaGFuZGxlT2JqID0gbWF0Y2hlZC5oYW5kbGVyc1sgaisrIF0p
ICYmICFldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpICkgewotCi0gICAgLy8g
VHJpZ2dlcmVkIGV2ZW50IG11c3QgZWl0aGVyIDEpIGhhdmUgbm8gbmFtZXNwYWNlLCBvcgotICAg
IC8vIDIpIGhhdmUgbmFtZXNwYWNlKHMpIGEgc3Vic2V0IG9yIGVxdWFsIHRvIHRob3NlIGluIHRo
ZSBib3VuZCBldmVudCAoYm90aCBjYW4gaGF2ZSBubyBuYW1lc3BhY2UpLgotICAgIGlmICggIWV2
ZW50Lm5hbWVzcGFjZV9yZSB8fCBldmVudC5uYW1lc3BhY2VfcmUudGVzdCggaGFuZGxlT2JqLm5h
bWVzcGFjZSApICkgewotCi0gICAgZXZlbnQuaGFuZGxlT2JqID0gaGFuZGxlT2JqOwotICAgIGV2
ZW50LmRhdGEgPSBoYW5kbGVPYmouZGF0YTsKLQotICAgIHJldCA9ICggKGpRdWVyeS5ldmVudC5z
cGVjaWFsWyBoYW5kbGVPYmoub3JpZ1R5cGUgXSB8fCB7fSkuaGFuZGxlIHx8IGhhbmRsZU9iai5o
YW5kbGVyICkKLSAgICAuYXBwbHkoIG1hdGNoZWQuZWxlbSwgYXJncyApOwotCi0gICAgaWYgKCBy
ZXQgIT09IHVuZGVmaW5lZCApIHsKLSAgICBpZiAoIChldmVudC5yZXN1bHQgPSByZXQpID09PSBm
YWxzZSApIHsKLSAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwotICAgIGV2ZW50LnN0b3BQcm9w
YWdhdGlvbigpOwotICAgIH0KLSAgICB9Ci0gICAgfQotICAgIH0KLSAgICB9Ci0KLSAgICAvLyBD
YWxsIHRoZSBwb3N0RGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlCi0gICAgaWYgKCBz
cGVjaWFsLnBvc3REaXNwYXRjaCApIHsKLSAgICBzcGVjaWFsLnBvc3REaXNwYXRjaC5jYWxsKCB0
aGlzLCBldmVudCApOwotICAgIH0KLQotICAgIHJldHVybiBldmVudC5yZXN1bHQ7Ci0gICAgfSwK
LQotICAgIGhhbmRsZXJzOiBmdW5jdGlvbiggZXZlbnQsIGhhbmRsZXJzICkgewotICAgIHZhciBz
ZWwsIGhhbmRsZU9iaiwgbWF0Y2hlcywgaSwKLSAgICBoYW5kbGVyUXVldWUgPSBbXSwKLSAgICBk
ZWxlZ2F0ZUNvdW50ID0gaGFuZGxlcnMuZGVsZWdhdGVDb3VudCwKLSAgICBjdXIgPSBldmVudC50
YXJnZXQ7Ci0KLSAgICAvLyBGaW5kIGRlbGVnYXRlIGhhbmRsZXJzCi0gICAgLy8gQmxhY2staG9s
ZSBTVkcgPHVzZT4gaW5zdGFuY2UgdHJlZXMgKCMxMzE4MCkKLSAgICAvLyBBdm9pZCBub24tbGVm
dC1jbGljayBidWJibGluZyBpbiBGaXJlZm94ICgjMzg2MSkKLSAgICBpZiAoIGRlbGVnYXRlQ291
bnQgJiYgY3VyLm5vZGVUeXBlICYmICghZXZlbnQuYnV0dG9uIHx8IGV2ZW50LnR5cGUgIT09ICJj
bGljayIpICkgewotCi0gICAgZm9yICggOyBjdXIgIT0gdGhpczsgY3VyID0gY3VyLnBhcmVudE5v
ZGUgfHwgdGhpcyApIHsKLQotICAgIC8vIERvbid0IGNoZWNrIG5vbi1lbGVtZW50cyAoIzEzMjA4
KQotICAgIC8vIERvbid0IHByb2Nlc3MgY2xpY2tzIG9uIGRpc2FibGVkIGVsZW1lbnRzICgjNjkx
MSwgIzgxNjUsICMxMTM4MiwgIzExNzY0KQotICAgIGlmICggY3VyLm5vZGVUeXBlID09PSAxICYm
IChjdXIuZGlzYWJsZWQgIT09IHRydWUgfHwgZXZlbnQudHlwZSAhPT0gImNsaWNrIikgKSB7Ci0g
ICAgbWF0Y2hlcyA9IFtdOwotICAgIGZvciAoIGkgPSAwOyBpIDwgZGVsZWdhdGVDb3VudDsgaSsr
ICkgewotICAgIGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBpIF07Ci0KLSAgICAvLyBEb24ndCBjb25m
bGljdCB3aXRoIE9iamVjdC5wcm90b3R5cGUgcHJvcGVydGllcyAoIzEzMjAzKQotICAgIHNlbCA9
IGhhbmRsZU9iai5zZWxlY3RvciArICIgIjsKLQotICAgIGlmICggbWF0Y2hlc1sgc2VsIF0gPT09
IHVuZGVmaW5lZCApIHsKLSAgICBtYXRjaGVzWyBzZWwgXSA9IGhhbmRsZU9iai5uZWVkc0NvbnRl
eHQgPwotICAgIGpRdWVyeSggc2VsLCB0aGlzICkuaW5kZXgoIGN1ciApID49IDAgOgotICAgIGpR
dWVyeS5maW5kKCBzZWwsIHRoaXMsIG51bGwsIFsgY3VyIF0gKS5sZW5ndGg7Ci0gICAgfQotICAg
IGlmICggbWF0Y2hlc1sgc2VsIF0gKSB7Ci0gICAgbWF0Y2hlcy5wdXNoKCBoYW5kbGVPYmogKTsK
LSAgICB9Ci0gICAgfQotICAgIGlmICggbWF0Y2hlcy5sZW5ndGggKSB7Ci0gICAgaGFuZGxlclF1
ZXVlLnB1c2goeyBlbGVtOiBjdXIsIGhhbmRsZXJzOiBtYXRjaGVzIH0pOwotICAgIH0KLSAgICB9
Ci0gICAgfQotICAgIH0KLQotICAgIC8vIEFkZCB0aGUgcmVtYWluaW5nIChkaXJlY3RseS1ib3Vu
ZCkgaGFuZGxlcnMKLSAgICBpZiAoIGRlbGVnYXRlQ291bnQgPCBoYW5kbGVycy5sZW5ndGggKSB7
Ci0gICAgaGFuZGxlclF1ZXVlLnB1c2goeyBlbGVtOiB0aGlzLCBoYW5kbGVyczogaGFuZGxlcnMu
c2xpY2UoIGRlbGVnYXRlQ291bnQgKSB9KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gaGFuZGxlclF1
ZXVlOwotICAgIH0sCi0KLSAgICBmaXg6IGZ1bmN0aW9uKCBldmVudCApIHsKLSAgICBpZiAoIGV2
ZW50WyBqUXVlcnkuZXhwYW5kbyBdICkgewotICAgIHJldHVybiBldmVudDsKLSAgICB9Ci0KLSAg
ICAvLyBDcmVhdGUgYSB3cml0YWJsZSBjb3B5IG9mIHRoZSBldmVudCBvYmplY3QgYW5kIG5vcm1h
bGl6ZSBzb21lIHByb3BlcnRpZXMKLSAgICB2YXIgaSwgcHJvcCwgY29weSwKLSAgICB0eXBlID0g
ZXZlbnQudHlwZSwKLSAgICBvcmlnaW5hbEV2ZW50ID0gZXZlbnQsCi0gICAgZml4SG9vayA9IHRo
aXMuZml4SG9va3NbIHR5cGUgXTsKLQotICAgIGlmICggIWZpeEhvb2sgKSB7Ci0gICAgdGhpcy5m
aXhIb29rc1sgdHlwZSBdID0gZml4SG9vayA9Ci0gICAgcm1vdXNlRXZlbnQudGVzdCggdHlwZSAp
ID8gdGhpcy5tb3VzZUhvb2tzIDoKLSAgICBya2V5RXZlbnQudGVzdCggdHlwZSApID8gdGhpcy5r
ZXlIb29rcyA6Ci0gICAge307Ci0gICAgfQotICAgIGNvcHkgPSBmaXhIb29rLnByb3BzID8gdGhp
cy5wcm9wcy5jb25jYXQoIGZpeEhvb2sucHJvcHMgKSA6IHRoaXMucHJvcHM7Ci0KLSAgICBldmVu
dCA9IG5ldyBqUXVlcnkuRXZlbnQoIG9yaWdpbmFsRXZlbnQgKTsKLQotICAgIGkgPSBjb3B5Lmxl
bmd0aDsKLSAgICB3aGlsZSAoIGktLSApIHsKLSAgICBwcm9wID0gY29weVsgaSBdOwotICAgIGV2
ZW50WyBwcm9wIF0gPSBvcmlnaW5hbEV2ZW50WyBwcm9wIF07Ci0gICAgfQotCi0gICAgLy8gU3Vw
cG9ydDogSUU8OQotICAgIC8vIEZpeCB0YXJnZXQgcHJvcGVydHkgKCMxOTI1KQotICAgIGlmICgg
IWV2ZW50LnRhcmdldCApIHsKLSAgICBldmVudC50YXJnZXQgPSBvcmlnaW5hbEV2ZW50LnNyY0Vs
ZW1lbnQgfHwgZG9jdW1lbnQ7Ci0gICAgfQotCi0gICAgLy8gU3VwcG9ydDogQ2hyb21lIDIzKywg
U2FmYXJpPwotICAgIC8vIFRhcmdldCBzaG91bGQgbm90IGJlIGEgdGV4dCBub2RlICgjNTA0LCAj
MTMxNDMpCi0gICAgaWYgKCBldmVudC50YXJnZXQubm9kZVR5cGUgPT09IDMgKSB7Ci0gICAgZXZl
bnQudGFyZ2V0ID0gZXZlbnQudGFyZ2V0LnBhcmVudE5vZGU7Ci0gICAgfQotCi0gICAgLy8gU3Vw
cG9ydDogSUU8OQotICAgIC8vIEZvciBtb3VzZS9rZXkgZXZlbnRzLCBtZXRhS2V5PT1mYWxzZSBp
ZiBpdCdzIHVuZGVmaW5lZCAoIzMzNjgsICMxMTMyOCkKLSAgICBldmVudC5tZXRhS2V5ID0gISFl
dmVudC5tZXRhS2V5OwotCi0gICAgcmV0dXJuIGZpeEhvb2suZmlsdGVyID8gZml4SG9vay5maWx0
ZXIoIGV2ZW50LCBvcmlnaW5hbEV2ZW50ICkgOiBldmVudDsKLSAgICB9LAotCi0gICAgLy8gSW5j
bHVkZXMgc29tZSBldmVudCBwcm9wcyBzaGFyZWQgYnkgS2V5RXZlbnQgYW5kIE1vdXNlRXZlbnQK
LSAgICBwcm9wczogImFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3RybEtleSBjdXJyZW50VGFy
Z2V0IGV2ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5IHRhcmdldCB0aW1l
U3RhbXAgdmlldyB3aGljaCIuc3BsaXQoIiAiKSwKLQotICAgIGZpeEhvb2tzOiB7fSwKLQotICAg
IGtleUhvb2tzOiB7Ci0gICAgcHJvcHM6ICJjaGFyIGNoYXJDb2RlIGtleSBrZXlDb2RlIi5zcGxp
dCgiICIpLAotICAgIGZpbHRlcjogZnVuY3Rpb24oIGV2ZW50LCBvcmlnaW5hbCApIHsKLQotICAg
IC8vIEFkZCB3aGljaCBmb3Iga2V5IGV2ZW50cwotICAgIGlmICggZXZlbnQud2hpY2ggPT0gbnVs
bCApIHsKLSAgICBldmVudC53aGljaCA9IG9yaWdpbmFsLmNoYXJDb2RlICE9IG51bGwgPyBvcmln
aW5hbC5jaGFyQ29kZSA6IG9yaWdpbmFsLmtleUNvZGU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGV2
ZW50OwotICAgIH0KLSAgICB9LAotCi0gICAgbW91c2VIb29rczogewotICAgIHByb3BzOiAiYnV0
dG9uIGJ1dHRvbnMgY2xpZW50WCBjbGllbnRZIGZyb21FbGVtZW50IG9mZnNldFggb2Zmc2V0WSBw
YWdlWCBwYWdlWSBzY3JlZW5YIHNjcmVlblkgdG9FbGVtZW50Ii5zcGxpdCgiICIpLAotICAgIGZp
bHRlcjogZnVuY3Rpb24oIGV2ZW50LCBvcmlnaW5hbCApIHsKLSAgICB2YXIgYm9keSwgZXZlbnRE
b2MsIGRvYywKLSAgICBidXR0b24gPSBvcmlnaW5hbC5idXR0b24sCi0gICAgZnJvbUVsZW1lbnQg
PSBvcmlnaW5hbC5mcm9tRWxlbWVudDsKLQotICAgIC8vIENhbGN1bGF0ZSBwYWdlWC9ZIGlmIG1p
c3NpbmcgYW5kIGNsaWVudFgvWSBhdmFpbGFibGUKLSAgICBpZiAoIGV2ZW50LnBhZ2VYID09IG51
bGwgJiYgb3JpZ2luYWwuY2xpZW50WCAhPSBudWxsICkgewotICAgIGV2ZW50RG9jID0gZXZlbnQu
dGFyZ2V0Lm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQ7Ci0gICAgZG9jID0gZXZlbnREb2MuZG9j
dW1lbnRFbGVtZW50OwotICAgIGJvZHkgPSBldmVudERvYy5ib2R5OwotCi0gICAgZXZlbnQucGFn
ZVggPSBvcmlnaW5hbC5jbGllbnRYICsgKCBkb2MgJiYgZG9jLnNjcm9sbExlZnQgfHwgYm9keSAm
JiBib2R5LnNjcm9sbExlZnQgfHwgMCApIC0gKCBkb2MgJiYgZG9jLmNsaWVudExlZnQgfHwgYm9k
eSAmJiBib2R5LmNsaWVudExlZnQgfHwgMCApOwotICAgIGV2ZW50LnBhZ2VZID0gb3JpZ2luYWwu
Y2xpZW50WSArICggZG9jICYmIGRvYy5zY3JvbGxUb3AgIHx8IGJvZHkgJiYgYm9keS5zY3JvbGxU
b3AgIHx8IDAgKSAtICggZG9jICYmIGRvYy5jbGllbnRUb3AgIHx8IGJvZHkgJiYgYm9keS5jbGll
bnRUb3AgIHx8IDAgKTsKLSAgICB9Ci0KLSAgICAvLyBBZGQgcmVsYXRlZFRhcmdldCwgaWYgbmVj
ZXNzYXJ5Ci0gICAgaWYgKCAhZXZlbnQucmVsYXRlZFRhcmdldCAmJiBmcm9tRWxlbWVudCApIHsK
LSAgICBldmVudC5yZWxhdGVkVGFyZ2V0ID0gZnJvbUVsZW1lbnQgPT09IGV2ZW50LnRhcmdldCA/
IG9yaWdpbmFsLnRvRWxlbWVudCA6IGZyb21FbGVtZW50OwotICAgIH0KLQotICAgIC8vIEFkZCB3
aGljaCBmb3IgY2xpY2s6IDEgPT09IGxlZnQ7IDIgPT09IG1pZGRsZTsgMyA9PT0gcmlnaHQKLSAg
ICAvLyBOb3RlOiBidXR0b24gaXMgbm90IG5vcm1hbGl6ZWQsIHNvIGRvbid0IHVzZSBpdAotICAg
IGlmICggIWV2ZW50LndoaWNoICYmIGJ1dHRvbiAhPT0gdW5kZWZpbmVkICkgewotICAgIGV2ZW50
LndoaWNoID0gKCBidXR0b24gJiAxID8gMSA6ICggYnV0dG9uICYgMiA/IDMgOiAoIGJ1dHRvbiAm
IDQgPyAyIDogMCApICkgKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZXZlbnQ7Ci0gICAgfQotICAg
IH0sCi0KLSAgICBzcGVjaWFsOiB7Ci0gICAgbG9hZDogewotICAgIC8vIFByZXZlbnQgdHJpZ2dl
cmVkIGltYWdlLmxvYWQgZXZlbnRzIGZyb20gYnViYmxpbmcgdG8gd2luZG93LmxvYWQKLSAgICBu
b0J1YmJsZTogdHJ1ZQotICAgIH0sCi0gICAgY2xpY2s6IHsKLSAgICAvLyBGb3IgY2hlY2tib3gs
IGZpcmUgbmF0aXZlIGV2ZW50IHNvIGNoZWNrZWQgc3RhdGUgd2lsbCBiZSByaWdodAotICAgIHRy
aWdnZXI6IGZ1bmN0aW9uKCkgewotICAgIGlmICggalF1ZXJ5Lm5vZGVOYW1lKCB0aGlzLCAiaW5w
dXQiICkgJiYgdGhpcy50eXBlID09PSAiY2hlY2tib3giICYmIHRoaXMuY2xpY2sgKSB7Ci0gICAg
dGhpcy5jbGljaygpOwotICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgfQotICAgIH0sCi0g
ICAgZm9jdXM6IHsKLSAgICAvLyBGaXJlIG5hdGl2ZSBldmVudCBpZiBwb3NzaWJsZSBzbyBibHVy
L2ZvY3VzIHNlcXVlbmNlIGlzIGNvcnJlY3QKLSAgICB0cmlnZ2VyOiBmdW5jdGlvbigpIHsKLSAg
ICBpZiAoIHRoaXMgIT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgdGhpcy5mb2N1cyApIHsK
LSAgICB0cnkgewotICAgIHRoaXMuZm9jdXMoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSBj
YXRjaCAoIGUgKSB7Ci0gICAgLy8gU3VwcG9ydDogSUU8OQotICAgIC8vIElmIHdlIGVycm9yIG9u
IGZvY3VzIHRvIGhpZGRlbiBlbGVtZW50ICgjMTQ4NiwgIzEyNTE4KSwKLSAgICAvLyBsZXQgLnRy
aWdnZXIoKSBydW4gdGhlIGhhbmRsZXJzCi0gICAgfQotICAgIH0KLSAgICB9LAotICAgIGRlbGVn
YXRlVHlwZTogImZvY3VzaW4iCi0gICAgfSwKLSAgICBibHVyOiB7Ci0gICAgdHJpZ2dlcjogZnVu
Y3Rpb24oKSB7Ci0gICAgaWYgKCB0aGlzID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmIHRo
aXMuYmx1ciApIHsKLSAgICB0aGlzLmJsdXIoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIH0sCi0gICAgZGVsZWdhdGVUeXBlOiAiZm9jdXNvdXQiCi0gICAgfSwKLQotICAgIGJlZm9y
ZXVubG9hZDogewotICAgIHBvc3REaXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50ICkgewotCi0gICAg
Ly8gRXZlbiB3aGVuIHJldHVyblZhbHVlIGVxdWFscyB0byB1bmRlZmluZWQgRmlyZWZveCB3aWxs
IHN0aWxsIHNob3cgYWxlcnQKLSAgICBpZiAoIGV2ZW50LnJlc3VsdCAhPT0gdW5kZWZpbmVkICkg
ewotICAgIGV2ZW50Lm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWUgPSBldmVudC5yZXN1bHQ7Ci0g
ICAgfQotICAgIH0KLSAgICB9Ci0gICAgfSwKLQotICAgIHNpbXVsYXRlOiBmdW5jdGlvbiggdHlw
ZSwgZWxlbSwgZXZlbnQsIGJ1YmJsZSApIHsKLSAgICAvLyBQaWdneWJhY2sgb24gYSBkb25vciBl
dmVudCB0byBzaW11bGF0ZSBhIGRpZmZlcmVudCBvbmUuCi0gICAgLy8gRmFrZSBvcmlnaW5hbEV2
ZW50IHRvIGF2b2lkIGRvbm9yJ3Mgc3RvcFByb3BhZ2F0aW9uLCBidXQgaWYgdGhlCi0gICAgLy8g
c2ltdWxhdGVkIGV2ZW50IHByZXZlbnRzIGRlZmF1bHQgdGhlbiB3ZSBkbyB0aGUgc2FtZSBvbiB0
aGUgZG9ub3IuCi0gICAgdmFyIGUgPSBqUXVlcnkuZXh0ZW5kKAotICAgIG5ldyBqUXVlcnkuRXZl
bnQoKSwKLSAgICBldmVudCwKLSAgICB7IHR5cGU6IHR5cGUsCi0gICAgaXNTaW11bGF0ZWQ6IHRy
dWUsCi0gICAgb3JpZ2luYWxFdmVudDoge30KLSAgICB9Ci0gICAgKTsKLSAgICBpZiAoIGJ1YmJs
ZSApIHsKLSAgICBqUXVlcnkuZXZlbnQudHJpZ2dlciggZSwgbnVsbCwgZWxlbSApOwotICAgIH0g
ZWxzZSB7Ci0gICAgalF1ZXJ5LmV2ZW50LmRpc3BhdGNoLmNhbGwoIGVsZW0sIGUgKTsKLSAgICB9
Ci0gICAgaWYgKCBlLmlzRGVmYXVsdFByZXZlbnRlZCgpICkgewotICAgIGV2ZW50LnByZXZlbnRE
ZWZhdWx0KCk7Ci0gICAgfQotICAgIH0KLX07Ci0KLWpRdWVyeS5yZW1vdmVFdmVudCA9IGRvY3Vt
ZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIgPwotICAgIGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBoYW5k
bGUgKSB7Ci0gICAgaWYgKCBlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIgKSB7Ci0gICAgZWxlbS5y
ZW1vdmVFdmVudExpc3RlbmVyKCB0eXBlLCBoYW5kbGUsIGZhbHNlICk7Ci0gICAgfQotICAgIH0g
OgotICAgIGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBoYW5kbGUgKSB7Ci0gICAgdmFyIG5hbWUgPSAi
b24iICsgdHlwZTsKLQotICAgIGlmICggZWxlbS5kZXRhY2hFdmVudCApIHsKLQotICAgIC8vICM4
NTQ1LCAjNzA1NCwgcHJldmVudGluZyBtZW1vcnkgbGVha3MgZm9yIGN1c3RvbSBldmVudHMgaW4g
SUU2LTgKLSAgICAvLyBkZXRhY2hFdmVudCBuZWVkZWQgcHJvcGVydHkgb24gZWxlbWVudCwgYnkg
bmFtZSBvZiB0aGF0IGV2ZW50LCB0byBwcm9wZXJseSBleHBvc2UgaXQgdG8gR0MKLSAgICBpZiAo
IHR5cGVvZiBlbGVtWyBuYW1lIF0gPT09IGNvcmVfc3RydW5kZWZpbmVkICkgewotICAgIGVsZW1b
IG5hbWUgXSA9IG51bGw7Ci0gICAgfQotCi0gICAgZWxlbS5kZXRhY2hFdmVudCggbmFtZSwgaGFu
ZGxlICk7Ci0gICAgfQotICAgIH07Ci0KLWpRdWVyeS5FdmVudCA9IGZ1bmN0aW9uKCBzcmMsIHBy
b3BzICkgewotICAgIC8vIEFsbG93IGluc3RhbnRpYXRpb24gd2l0aG91dCB0aGUgJ25ldycga2V5
d29yZAotICAgIGlmICggISh0aGlzIGluc3RhbmNlb2YgalF1ZXJ5LkV2ZW50KSApIHsKLSAgICBy
ZXR1cm4gbmV3IGpRdWVyeS5FdmVudCggc3JjLCBwcm9wcyApOwotICAgIH0KLQotICAgIC8vIEV2
ZW50IG9iamVjdAotICAgIGlmICggc3JjICYmIHNyYy50eXBlICkgewotICAgIHRoaXMub3JpZ2lu
YWxFdmVudCA9IHNyYzsKLSAgICB0aGlzLnR5cGUgPSBzcmMudHlwZTsKLQotICAgIC8vIEV2ZW50
cyBidWJibGluZyB1cCB0aGUgZG9jdW1lbnQgbWF5IGhhdmUgYmVlbiBtYXJrZWQgYXMgcHJldmVu
dGVkCi0gICAgLy8gYnkgYSBoYW5kbGVyIGxvd2VyIGRvd24gdGhlIHRyZWU7IHJlZmxlY3QgdGhl
IGNvcnJlY3QgdmFsdWUuCi0gICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSAoIHNyYy5kZWZh
dWx0UHJldmVudGVkIHx8IHNyYy5yZXR1cm5WYWx1ZSA9PT0gZmFsc2UgfHwKLSAgICBzcmMuZ2V0
UHJldmVudERlZmF1bHQgJiYgc3JjLmdldFByZXZlbnREZWZhdWx0KCkgKSA/IHJldHVyblRydWUg
OiByZXR1cm5GYWxzZTsKLQotICAgIC8vIEV2ZW50IHR5cGUKLSAgICB9IGVsc2UgewotICAgIHRo
aXMudHlwZSA9IHNyYzsKLSAgICB9Ci0KLSAgICAvLyBQdXQgZXhwbGljaXRseSBwcm92aWRlZCBw
cm9wZXJ0aWVzIG9udG8gdGhlIGV2ZW50IG9iamVjdAotICAgIGlmICggcHJvcHMgKSB7Ci0gICAg
alF1ZXJ5LmV4dGVuZCggdGhpcywgcHJvcHMgKTsKLSAgICB9Ci0KLSAgICAvLyBDcmVhdGUgYSB0
aW1lc3RhbXAgaWYgaW5jb21pbmcgZXZlbnQgZG9lc24ndCBoYXZlIG9uZQotICAgIHRoaXMudGlt
ZVN0YW1wID0gc3JjICYmIHNyYy50aW1lU3RhbXAgfHwgalF1ZXJ5Lm5vdygpOwotCi0gICAgLy8g
TWFyayBpdCBhcyBmaXhlZAotICAgIHRoaXNbIGpRdWVyeS5leHBhbmRvIF0gPSB0cnVlOwotfTsK
LQotLy8galF1ZXJ5LkV2ZW50IGlzIGJhc2VkIG9uIERPTTMgRXZlbnRzIGFzIHNwZWNpZmllZCBi
eSB0aGUgRUNNQVNjcmlwdCBMYW5ndWFnZSBCaW5kaW5nCi0vLyBodHRwOi8vd3d3LnczLm9yZy9U
Ui8yMDAzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDAzMDMzMS9lY21hLXNjcmlwdC1iaW5kaW5n
Lmh0bWwKLWpRdWVyeS5FdmVudC5wcm90b3R5cGUgPSB7Ci0gICAgaXNEZWZhdWx0UHJldmVudGVk
OiByZXR1cm5GYWxzZSwKLSAgICBpc1Byb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UsCi0g
ICAgaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLAotCi0gICAgcHJl
dmVudERlZmF1bHQ6IGZ1bmN0aW9uKCkgewotICAgIHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50
OwotCi0gICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSByZXR1cm5UcnVlOwotICAgIGlmICgg
IWUgKSB7Ci0gICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIElmIHByZXZlbnREZWZhdWx0IGV4
aXN0cywgcnVuIGl0IG9uIHRoZSBvcmlnaW5hbCBldmVudAotICAgIGlmICggZS5wcmV2ZW50RGVm
YXVsdCApIHsKLSAgICBlLnByZXZlbnREZWZhdWx0KCk7Ci0KLSAgICAvLyBTdXBwb3J0OiBJRQot
ICAgIC8vIE90aGVyd2lzZSBzZXQgdGhlIHJldHVyblZhbHVlIHByb3BlcnR5IG9mIHRoZSBvcmln
aW5hbCBldmVudCB0byBmYWxzZQotICAgIH0gZWxzZSB7Ci0gICAgZS5yZXR1cm5WYWx1ZSA9IGZh
bHNlOwotICAgIH0KLSAgICB9LAotICAgIHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7Ci0g
ICAgdmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7Ci0KLSAgICB0aGlzLmlzUHJvcGFnYXRpb25T
dG9wcGVkID0gcmV0dXJuVHJ1ZTsKLSAgICBpZiAoICFlICkgewotICAgIHJldHVybjsKLSAgICB9
Ci0gICAgLy8gSWYgc3RvcFByb3BhZ2F0aW9uIGV4aXN0cywgcnVuIGl0IG9uIHRoZSBvcmlnaW5h
bCBldmVudAotICAgIGlmICggZS5zdG9wUHJvcGFnYXRpb24gKSB7Ci0gICAgZS5zdG9wUHJvcGFn
YXRpb24oKTsKLSAgICB9Ci0KLSAgICAvLyBTdXBwb3J0OiBJRQotICAgIC8vIFNldCB0aGUgY2Fu
Y2VsQnViYmxlIHByb3BlcnR5IG9mIHRoZSBvcmlnaW5hbCBldmVudCB0byB0cnVlCi0gICAgZS5j
YW5jZWxCdWJibGUgPSB0cnVlOwotICAgIH0sCi0gICAgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9u
OiBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID0g
cmV0dXJuVHJ1ZTsKLSAgICB0aGlzLnN0b3BQcm9wYWdhdGlvbigpOwotICAgIH0KLX07Ci0KLS8v
IENyZWF0ZSBtb3VzZWVudGVyL2xlYXZlIGV2ZW50cyB1c2luZyBtb3VzZW92ZXIvb3V0IGFuZCBl
dmVudC10aW1lIGNoZWNrcwotalF1ZXJ5LmVhY2goewotICAgIG1vdXNlZW50ZXI6ICJtb3VzZW92
ZXIiLAotICAgIG1vdXNlbGVhdmU6ICJtb3VzZW91dCIKLX0sIGZ1bmN0aW9uKCBvcmlnLCBmaXgg
KSB7Ci0gICAgalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIG9yaWcgXSA9IHsKLSAgICBkZWxlZ2F0ZVR5
cGU6IGZpeCwKLSAgICBiaW5kVHlwZTogZml4LAotCi0gICAgaGFuZGxlOiBmdW5jdGlvbiggZXZl
bnQgKSB7Ci0gICAgdmFyIHJldCwKLSAgICB0YXJnZXQgPSB0aGlzLAotICAgIHJlbGF0ZWQgPSBl
dmVudC5yZWxhdGVkVGFyZ2V0LAotICAgIGhhbmRsZU9iaiA9IGV2ZW50LmhhbmRsZU9iajsKLQot
ICAgIC8vIEZvciBtb3VzZW50ZXIvbGVhdmUgY2FsbCB0aGUgaGFuZGxlciBpZiByZWxhdGVkIGlz
IG91dHNpZGUgdGhlIHRhcmdldC4KLSAgICAvLyBOQjogTm8gcmVsYXRlZFRhcmdldCBpZiB0aGUg
bW91c2UgbGVmdC9lbnRlcmVkIHRoZSBicm93c2VyIHdpbmRvdwotICAgIGlmICggIXJlbGF0ZWQg
fHwgKHJlbGF0ZWQgIT09IHRhcmdldCAmJiAhalF1ZXJ5LmNvbnRhaW5zKCB0YXJnZXQsIHJlbGF0
ZWQgKSkgKSB7Ci0gICAgZXZlbnQudHlwZSA9IGhhbmRsZU9iai5vcmlnVHlwZTsKLSAgICByZXQg
PSBoYW5kbGVPYmouaGFuZGxlci5hcHBseSggdGhpcywgYXJndW1lbnRzICk7Ci0gICAgZXZlbnQu
dHlwZSA9IGZpeDsKLSAgICB9Ci0gICAgcmV0dXJuIHJldDsKLSAgICB9Ci0gICAgfTsKLX0pOwot
Ci0vLyBJRSBzdWJtaXQgZGVsZWdhdGlvbgotaWYgKCAhalF1ZXJ5LnN1cHBvcnQuc3VibWl0QnVi
YmxlcyApIHsKLQotICAgIGpRdWVyeS5ldmVudC5zcGVjaWFsLnN1Ym1pdCA9IHsKLSAgICBzZXR1
cDogZnVuY3Rpb24oKSB7Ci0gICAgLy8gT25seSBuZWVkIHRoaXMgZm9yIGRlbGVnYXRlZCBmb3Jt
IHN1Ym1pdCBldmVudHMKLSAgICBpZiAoIGpRdWVyeS5ub2RlTmFtZSggdGhpcywgImZvcm0iICkg
KSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIExhenktYWRkIGEgc3VibWl0
IGhhbmRsZXIgd2hlbiBhIGRlc2NlbmRhbnQgZm9ybSBtYXkgcG90ZW50aWFsbHkgYmUgc3VibWl0
dGVkCi0gICAgalF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgImNsaWNrLl9zdWJtaXQga2V5cHJlc3Mu
X3N1Ym1pdCIsIGZ1bmN0aW9uKCBlICkgewotICAgIC8vIE5vZGUgbmFtZSBjaGVjayBhdm9pZHMg
YSBWTUwtcmVsYXRlZCBjcmFzaCBpbiBJRSAoIzk4MDcpCi0gICAgdmFyIGVsZW0gPSBlLnRhcmdl
dCwKLSAgICBmb3JtID0galF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiaW5wdXQiICkgfHwgalF1ZXJ5
Lm5vZGVOYW1lKCBlbGVtLCAiYnV0dG9uIiApID8gZWxlbS5mb3JtIDogdW5kZWZpbmVkOwotICAg
IGlmICggZm9ybSAmJiAhalF1ZXJ5Ll9kYXRhKCBmb3JtLCAic3VibWl0QnViYmxlcyIgKSApIHsK
LSAgICBqUXVlcnkuZXZlbnQuYWRkKCBmb3JtLCAic3VibWl0Ll9zdWJtaXQiLCBmdW5jdGlvbigg
ZXZlbnQgKSB7Ci0gICAgZXZlbnQuX3N1Ym1pdF9idWJibGUgPSB0cnVlOwotICAgIH0pOwotICAg
IGpRdWVyeS5fZGF0YSggZm9ybSwgInN1Ym1pdEJ1YmJsZXMiLCB0cnVlICk7Ci0gICAgfQotICAg
IH0pOwotICAgIC8vIHJldHVybiB1bmRlZmluZWQgc2luY2Ugd2UgZG9uJ3QgbmVlZCBhbiBldmVu
dCBsaXN0ZW5lcgotICAgIH0sCi0KLSAgICBwb3N0RGlzcGF0Y2g6IGZ1bmN0aW9uKCBldmVudCAp
IHsKLSAgICAvLyBJZiBmb3JtIHdhcyBzdWJtaXR0ZWQgYnkgdGhlIHVzZXIsIGJ1YmJsZSB0aGUg
ZXZlbnQgdXAgdGhlIHRyZWUKLSAgICBpZiAoIGV2ZW50Ll9zdWJtaXRfYnViYmxlICkgewotICAg
IGRlbGV0ZSBldmVudC5fc3VibWl0X2J1YmJsZTsKLSAgICBpZiAoIHRoaXMucGFyZW50Tm9kZSAm
JiAhZXZlbnQuaXNUcmlnZ2VyICkgewotICAgIGpRdWVyeS5ldmVudC5zaW11bGF0ZSggInN1Ym1p
dCIsIHRoaXMucGFyZW50Tm9kZSwgZXZlbnQsIHRydWUgKTsKLSAgICB9Ci0gICAgfQotICAgIH0s
Ci0KLSAgICB0ZWFyZG93bjogZnVuY3Rpb24oKSB7Ci0gICAgLy8gT25seSBuZWVkIHRoaXMgZm9y
IGRlbGVnYXRlZCBmb3JtIHN1Ym1pdCBldmVudHMKLSAgICBpZiAoIGpRdWVyeS5ub2RlTmFtZSgg
dGhpcywgImZvcm0iICkgKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIFJl
bW92ZSBkZWxlZ2F0ZWQgaGFuZGxlcnM7IGNsZWFuRGF0YSBldmVudHVhbGx5IHJlYXBzIHN1Ym1p
dCBoYW5kbGVycyBhdHRhY2hlZCBhYm92ZQotICAgIGpRdWVyeS5ldmVudC5yZW1vdmUoIHRoaXMs
ICIuX3N1Ym1pdCIgKTsKLSAgICB9Ci0gICAgfTsKLX0KLQotLy8gSUUgY2hhbmdlIGRlbGVnYXRp
b24gYW5kIGNoZWNrYm94L3JhZGlvIGZpeAotaWYgKCAhalF1ZXJ5LnN1cHBvcnQuY2hhbmdlQnVi
YmxlcyApIHsKLQotICAgIGpRdWVyeS5ldmVudC5zcGVjaWFsLmNoYW5nZSA9IHsKLQotICAgIHNl
dHVwOiBmdW5jdGlvbigpIHsKLQotICAgIGlmICggcmZvcm1FbGVtcy50ZXN0KCB0aGlzLm5vZGVO
YW1lICkgKSB7Ci0gICAgLy8gSUUgZG9lc24ndCBmaXJlIGNoYW5nZSBvbiBhIGNoZWNrL3JhZGlv
IHVudGlsIGJsdXI7IHRyaWdnZXIgaXQgb24gY2xpY2sKLSAgICAvLyBhZnRlciBhIHByb3BlcnR5
Y2hhbmdlLiBFYXQgdGhlIGJsdXItY2hhbmdlIGluIHNwZWNpYWwuY2hhbmdlLmhhbmRsZS4KLSAg
ICAvLyBUaGlzIHN0aWxsIGZpcmVzIG9uY2hhbmdlIGEgc2Vjb25kIHRpbWUgZm9yIGNoZWNrL3Jh
ZGlvIGFmdGVyIGJsdXIuCi0gICAgaWYgKCB0aGlzLnR5cGUgPT09ICJjaGVja2JveCIgfHwgdGhp
cy50eXBlID09PSAicmFkaW8iICkgewotICAgIGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsICJwcm9w
ZXJ0eWNoYW5nZS5fY2hhbmdlIiwgZnVuY3Rpb24oIGV2ZW50ICkgewotICAgIGlmICggZXZlbnQu
b3JpZ2luYWxFdmVudC5wcm9wZXJ0eU5hbWUgPT09ICJjaGVja2VkIiApIHsKLSAgICB0aGlzLl9q
dXN0X2NoYW5nZWQgPSB0cnVlOwotICAgIH0KLSAgICB9KTsKLSAgICBqUXVlcnkuZXZlbnQuYWRk
KCB0aGlzLCAiY2xpY2suX2NoYW5nZSIsIGZ1bmN0aW9uKCBldmVudCApIHsKLSAgICBpZiAoIHRo
aXMuX2p1c3RfY2hhbmdlZCAmJiAhZXZlbnQuaXNUcmlnZ2VyICkgewotICAgIHRoaXMuX2p1c3Rf
Y2hhbmdlZCA9IGZhbHNlOwotICAgIH0KLSAgICAvLyBBbGxvdyB0cmlnZ2VyZWQsIHNpbXVsYXRl
ZCBjaGFuZ2UgZXZlbnRzICgjMTE1MDApCi0gICAgalF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCAiY2hh
bmdlIiwgdGhpcywgZXZlbnQsIHRydWUgKTsKLSAgICB9KTsKLSAgICB9Ci0gICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLSAgICAvLyBEZWxlZ2F0ZWQgZXZlbnQ7IGxhenktYWRkIGEgY2hhbmdlIGhh
bmRsZXIgb24gZGVzY2VuZGFudCBpbnB1dHMKLSAgICBqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCAi
YmVmb3JlYWN0aXZhdGUuX2NoYW5nZSIsIGZ1bmN0aW9uKCBlICkgewotICAgIHZhciBlbGVtID0g
ZS50YXJnZXQ7Ci0KLSAgICBpZiAoIHJmb3JtRWxlbXMudGVzdCggZWxlbS5ub2RlTmFtZSApICYm
ICFqUXVlcnkuX2RhdGEoIGVsZW0sICJjaGFuZ2VCdWJibGVzIiApICkgewotICAgIGpRdWVyeS5l
dmVudC5hZGQoIGVsZW0sICJjaGFuZ2UuX2NoYW5nZSIsIGZ1bmN0aW9uKCBldmVudCApIHsKLSAg
ICBpZiAoIHRoaXMucGFyZW50Tm9kZSAmJiAhZXZlbnQuaXNTaW11bGF0ZWQgJiYgIWV2ZW50Lmlz
VHJpZ2dlciApIHsKLSAgICBqUXVlcnkuZXZlbnQuc2ltdWxhdGUoICJjaGFuZ2UiLCB0aGlzLnBh
cmVudE5vZGUsIGV2ZW50LCB0cnVlICk7Ci0gICAgfQotICAgIH0pOwotICAgIGpRdWVyeS5fZGF0
YSggZWxlbSwgImNoYW5nZUJ1YmJsZXMiLCB0cnVlICk7Ci0gICAgfQotICAgIH0pOwotICAgIH0s
Ci0KLSAgICBoYW5kbGU6IGZ1bmN0aW9uKCBldmVudCApIHsKLSAgICB2YXIgZWxlbSA9IGV2ZW50
LnRhcmdldDsKLQotICAgIC8vIFN3YWxsb3cgbmF0aXZlIGNoYW5nZSBldmVudHMgZnJvbSBjaGVj
a2JveC9yYWRpbywgd2UgYWxyZWFkeSB0cmlnZ2VyZWQgdGhlbSBhYm92ZQotICAgIGlmICggdGhp
cyAhPT0gZWxlbSB8fCBldmVudC5pc1NpbXVsYXRlZCB8fCBldmVudC5pc1RyaWdnZXIgfHwgKGVs
ZW0udHlwZSAhPT0gInJhZGlvIiAmJiBlbGVtLnR5cGUgIT09ICJjaGVja2JveCIpICkgewotICAg
IHJldHVybiBldmVudC5oYW5kbGVPYmouaGFuZGxlci5hcHBseSggdGhpcywgYXJndW1lbnRzICk7
Ci0gICAgfQotICAgIH0sCi0KLSAgICB0ZWFyZG93bjogZnVuY3Rpb24oKSB7Ci0gICAgalF1ZXJ5
LmV2ZW50LnJlbW92ZSggdGhpcywgIi5fY2hhbmdlIiApOwotCi0gICAgcmV0dXJuICFyZm9ybUVs
ZW1zLnRlc3QoIHRoaXMubm9kZU5hbWUgKTsKLSAgICB9Ci0gICAgfTsKLX0KLQotLy8gQ3JlYXRl
ICJidWJibGluZyIgZm9jdXMgYW5kIGJsdXIgZXZlbnRzCi1pZiAoICFqUXVlcnkuc3VwcG9ydC5m
b2N1c2luQnViYmxlcyApIHsKLSAgICBqUXVlcnkuZWFjaCh7IGZvY3VzOiAiZm9jdXNpbiIsIGJs
dXI6ICJmb2N1c291dCIgfSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHsKLQotICAgIC8vIEF0dGFj
aCBhIHNpbmdsZSBjYXB0dXJpbmcgaGFuZGxlciB3aGlsZSBzb21lb25lIHdhbnRzIGZvY3VzaW4v
Zm9jdXNvdXQKLSAgICB2YXIgYXR0YWNoZXMgPSAwLAotICAgIGhhbmRsZXIgPSBmdW5jdGlvbigg
ZXZlbnQgKSB7Ci0gICAgalF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCBmaXgsIGV2ZW50LnRhcmdldCwg
alF1ZXJ5LmV2ZW50LmZpeCggZXZlbnQgKSwgdHJ1ZSApOwotICAgIH07Ci0KLSAgICBqUXVlcnku
ZXZlbnQuc3BlY2lhbFsgZml4IF0gPSB7Ci0gICAgc2V0dXA6IGZ1bmN0aW9uKCkgewotICAgIGlm
ICggYXR0YWNoZXMrKyA9PT0gMCApIHsKLSAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCBv
cmlnLCBoYW5kbGVyLCB0cnVlICk7Ci0gICAgfQotICAgIH0sCi0gICAgdGVhcmRvd246IGZ1bmN0
aW9uKCkgewotICAgIGlmICggLS1hdHRhY2hlcyA9PT0gMCApIHsKLSAgICBkb2N1bWVudC5yZW1v
dmVFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7Ci0gICAgfQotICAgIH0KLSAg
ICB9OwotICAgIH0pOwotfQotCi1qUXVlcnkuZm4uZXh0ZW5kKHsKLQotICAgIG9uOiBmdW5jdGlv
biggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgLypJTlRFUk5BTCovIG9uZSApIHsKLSAgICB2
YXIgdHlwZSwgb3JpZ0ZuOwotCi0gICAgLy8gVHlwZXMgY2FuIGJlIGEgbWFwIG9mIHR5cGVzL2hh
bmRsZXJzCi0gICAgaWYgKCB0eXBlb2YgdHlwZXMgPT09ICJvYmplY3QiICkgewotICAgIC8vICgg
dHlwZXMtT2JqZWN0LCBzZWxlY3RvciwgZGF0YSApCi0gICAgaWYgKCB0eXBlb2Ygc2VsZWN0b3Ig
IT09ICJzdHJpbmciICkgewotICAgIC8vICggdHlwZXMtT2JqZWN0LCBkYXRhICkKLSAgICBkYXRh
ID0gZGF0YSB8fCBzZWxlY3RvcjsKLSAgICBzZWxlY3RvciA9IHVuZGVmaW5lZDsKLSAgICB9Ci0g
ICAgZm9yICggdHlwZSBpbiB0eXBlcyApIHsKLSAgICB0aGlzLm9uKCB0eXBlLCBzZWxlY3Rvciwg
ZGF0YSwgdHlwZXNbIHR5cGUgXSwgb25lICk7Ci0gICAgfQotICAgIHJldHVybiB0aGlzOwotICAg
IH0KLQotICAgIGlmICggZGF0YSA9PSBudWxsICYmIGZuID09IG51bGwgKSB7Ci0gICAgLy8gKCB0
eXBlcywgZm4gKQotICAgIGZuID0gc2VsZWN0b3I7Ci0gICAgZGF0YSA9IHNlbGVjdG9yID0gdW5k
ZWZpbmVkOwotICAgIH0gZWxzZSBpZiAoIGZuID09IG51bGwgKSB7Ci0gICAgaWYgKCB0eXBlb2Yg
c2VsZWN0b3IgPT09ICJzdHJpbmciICkgewotICAgIC8vICggdHlwZXMsIHNlbGVjdG9yLCBmbiAp
Ci0gICAgZm4gPSBkYXRhOwotICAgIGRhdGEgPSB1bmRlZmluZWQ7Ci0gICAgfSBlbHNlIHsKLSAg
ICAvLyAoIHR5cGVzLCBkYXRhLCBmbiApCi0gICAgZm4gPSBkYXRhOwotICAgIGRhdGEgPSBzZWxl
Y3RvcjsKLSAgICBzZWxlY3RvciA9IHVuZGVmaW5lZDsKLSAgICB9Ci0gICAgfQotICAgIGlmICgg
Zm4gPT09IGZhbHNlICkgewotICAgIGZuID0gcmV0dXJuRmFsc2U7Ci0gICAgfSBlbHNlIGlmICgg
IWZuICkgewotICAgIHJldHVybiB0aGlzOwotICAgIH0KLQotICAgIGlmICggb25lID09PSAxICkg
ewotICAgIG9yaWdGbiA9IGZuOwotICAgIGZuID0gZnVuY3Rpb24oIGV2ZW50ICkgewotICAgIC8v
IENhbiB1c2UgYW4gZW1wdHkgc2V0LCBzaW5jZSBldmVudCBjb250YWlucyB0aGUgaW5mbwotICAg
IGpRdWVyeSgpLm9mZiggZXZlbnQgKTsKLSAgICByZXR1cm4gb3JpZ0ZuLmFwcGx5KCB0aGlzLCBh
cmd1bWVudHMgKTsKLSAgICB9OwotICAgIC8vIFVzZSBzYW1lIGd1aWQgc28gY2FsbGVyIGNhbiBy
ZW1vdmUgdXNpbmcgb3JpZ0ZuCi0gICAgZm4uZ3VpZCA9IG9yaWdGbi5ndWlkIHx8ICggb3JpZ0Zu
Lmd1aWQgPSBqUXVlcnkuZ3VpZCsrICk7Ci0gICAgfQotICAgIHJldHVybiB0aGlzLmVhY2goIGZ1
bmN0aW9uKCkgewotICAgIGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsIHR5cGVzLCBmbiwgZGF0YSwg
c2VsZWN0b3IgKTsKLSAgICB9KTsKLSAgICB9LAotICAgIG9uZTogZnVuY3Rpb24oIHR5cGVzLCBz
ZWxlY3RvciwgZGF0YSwgZm4gKSB7Ci0gICAgcmV0dXJuIHRoaXMub24oIHR5cGVzLCBzZWxlY3Rv
ciwgZGF0YSwgZm4sIDEgKTsKLSAgICB9LAotICAgIG9mZjogZnVuY3Rpb24oIHR5cGVzLCBzZWxl
Y3RvciwgZm4gKSB7Ci0gICAgdmFyIGhhbmRsZU9iaiwgdHlwZTsKLSAgICBpZiAoIHR5cGVzICYm
IHR5cGVzLnByZXZlbnREZWZhdWx0ICYmIHR5cGVzLmhhbmRsZU9iaiApIHsKLSAgICAvLyAoIGV2
ZW50ICkgIGRpc3BhdGNoZWQgalF1ZXJ5LkV2ZW50Ci0gICAgaGFuZGxlT2JqID0gdHlwZXMuaGFu
ZGxlT2JqOwotICAgIGpRdWVyeSggdHlwZXMuZGVsZWdhdGVUYXJnZXQgKS5vZmYoCi0gICAgaGFu
ZGxlT2JqLm5hbWVzcGFjZSA/IGhhbmRsZU9iai5vcmlnVHlwZSArICIuIiArIGhhbmRsZU9iai5u
YW1lc3BhY2UgOiBoYW5kbGVPYmoub3JpZ1R5cGUsCi0gICAgaGFuZGxlT2JqLnNlbGVjdG9yLAot
ICAgIGhhbmRsZU9iai5oYW5kbGVyCi0gICAgKTsKLSAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0g
ICAgaWYgKCB0eXBlb2YgdHlwZXMgPT09ICJvYmplY3QiICkgewotICAgIC8vICggdHlwZXMtb2Jq
ZWN0IFssIHNlbGVjdG9yXSApCi0gICAgZm9yICggdHlwZSBpbiB0eXBlcyApIHsKLSAgICB0aGlz
Lm9mZiggdHlwZSwgc2VsZWN0b3IsIHR5cGVzWyB0eXBlIF0gKTsKLSAgICB9Ci0gICAgcmV0dXJu
IHRoaXM7Ci0gICAgfQotICAgIGlmICggc2VsZWN0b3IgPT09IGZhbHNlIHx8IHR5cGVvZiBzZWxl
Y3RvciA9PT0gImZ1bmN0aW9uIiApIHsKLSAgICAvLyAoIHR5cGVzIFssIGZuXSApCi0gICAgZm4g
PSBzZWxlY3RvcjsKLSAgICBzZWxlY3RvciA9IHVuZGVmaW5lZDsKLSAgICB9Ci0gICAgaWYgKCBm
biA9PT0gZmFsc2UgKSB7Ci0gICAgZm4gPSByZXR1cm5GYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJu
IHRoaXMuZWFjaChmdW5jdGlvbigpIHsKLSAgICBqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCB0
eXBlcywgZm4sIHNlbGVjdG9yICk7Ci0gICAgfSk7Ci0gICAgfSwKLQotICAgIGJpbmQ6IGZ1bmN0
aW9uKCB0eXBlcywgZGF0YSwgZm4gKSB7Ci0gICAgcmV0dXJuIHRoaXMub24oIHR5cGVzLCBudWxs
LCBkYXRhLCBmbiApOwotICAgIH0sCi0gICAgdW5iaW5kOiBmdW5jdGlvbiggdHlwZXMsIGZuICkg
ewotICAgIHJldHVybiB0aGlzLm9mZiggdHlwZXMsIG51bGwsIGZuICk7Ci0gICAgfSwKLQotICAg
IGRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBkYXRhLCBmbiApIHsKLSAgICBy
ZXR1cm4gdGhpcy5vbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApOwotICAgIH0sCi0gICAg
dW5kZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZm4gKSB7Ci0gICAgLy8gKCBu
YW1lc3BhY2UgKSBvciAoIHNlbGVjdG9yLCB0eXBlcyBbLCBmbl0gKQotICAgIHJldHVybiBhcmd1
bWVudHMubGVuZ3RoID09PSAxID8gdGhpcy5vZmYoIHNlbGVjdG9yLCAiKioiICkgOiB0aGlzLm9m
ZiggdHlwZXMsIHNlbGVjdG9yIHx8ICIqKiIsIGZuICk7Ci0gICAgfSwKLQotICAgIHRyaWdnZXI6
IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkgewotICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24o
KSB7Ci0gICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIHRoaXMgKTsKLSAgICB9
KTsKLSAgICB9LAotICAgIHRyaWdnZXJIYW5kbGVyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHsK
LSAgICB2YXIgZWxlbSA9IHRoaXNbMF07Ci0gICAgaWYgKCBlbGVtICkgewotICAgIHJldHVybiBq
UXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgZWxlbSwgdHJ1ZSApOwotICAgIH0KLSAg
ICB9Ci19KTsKLS8qIQotICogU2l6emxlIENTUyBTZWxlY3RvciBFbmdpbmUKLSAqIENvcHlyaWdo
dCAyMDEyIGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMKLSAqIFJlbGVh
c2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZQotICogaHR0cDovL3NpenpsZWpzLmNvbS8KLSAqLwot
KGZ1bmN0aW9uKCB3aW5kb3csIHVuZGVmaW5lZCApIHsKLQotdmFyIGksCi0gICAgY2FjaGVkcnVu
cywKLSAgICBFeHByLAotICAgIGdldFRleHQsCi0gICAgaXNYTUwsCi0gICAgY29tcGlsZSwKLSAg
ICBoYXNEdXBsaWNhdGUsCi0gICAgb3V0ZXJtb3N0Q29udGV4dCwKLQotICAgIC8vIExvY2FsIGRv
Y3VtZW50IHZhcnMKLSAgICBzZXREb2N1bWVudCwKLSAgICBkb2N1bWVudCwKLSAgICBkb2NFbGVt
LAotICAgIGRvY3VtZW50SXNYTUwsCi0gICAgcmJ1Z2d5UVNBLAotICAgIHJidWdneU1hdGNoZXMs
Ci0gICAgbWF0Y2hlcywKLSAgICBjb250YWlucywKLSAgICBzb3J0T3JkZXIsCi0KLSAgICAvLyBJ
bnN0YW5jZS1zcGVjaWZpYyBkYXRhCi0gICAgZXhwYW5kbyA9ICJzaXp6bGUiICsgLShuZXcgRGF0
ZSgpKSwKLSAgICBwcmVmZXJyZWREb2MgPSB3aW5kb3cuZG9jdW1lbnQsCi0gICAgc3VwcG9ydCA9
IHt9LAotICAgIGRpcnJ1bnMgPSAwLAotICAgIGRvbmUgPSAwLAotICAgIGNsYXNzQ2FjaGUgPSBj
cmVhdGVDYWNoZSgpLAotICAgIHRva2VuQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLAotICAgIGNvbXBp
bGVyQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLAotCi0gICAgLy8gR2VuZXJhbC1wdXJwb3NlIGNvbnN0
YW50cwotICAgIHN0cnVuZGVmaW5lZCA9IHR5cGVvZiB1bmRlZmluZWQsCi0gICAgTUFYX05FR0FU
SVZFID0gMSA8PCAzMSwKLQotICAgIC8vIEFycmF5IG1ldGhvZHMKLSAgICBhcnIgPSBbXSwKLSAg
ICBwb3AgPSBhcnIucG9wLAotICAgIHB1c2ggPSBhcnIucHVzaCwKLSAgICBzbGljZSA9IGFyci5z
bGljZSwKLSAgICAvLyBVc2UgYSBzdHJpcHBlZC1kb3duIGluZGV4T2YgaWYgd2UgY2FuJ3QgdXNl
IGEgbmF0aXZlIG9uZQotICAgIGluZGV4T2YgPSBhcnIuaW5kZXhPZiB8fCBmdW5jdGlvbiggZWxl
bSApIHsKLSAgICB2YXIgaSA9IDAsCi0gICAgbGVuID0gdGhpcy5sZW5ndGg7Ci0gICAgZm9yICgg
OyBpIDwgbGVuOyBpKysgKSB7Ci0gICAgaWYgKCB0aGlzW2ldID09PSBlbGVtICkgewotICAgIHJl
dHVybiBpOwotICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIC0xOwotICAgIH0sCi0KLQotICAgIC8v
IFJlZ3VsYXIgZXhwcmVzc2lvbnMKLQotICAgIC8vIFdoaXRlc3BhY2UgY2hhcmFjdGVycyBodHRw
Oi8vd3d3LnczLm9yZy9UUi9jc3MzLXNlbGVjdG9ycy8jd2hpdGVzcGFjZQotICAgIHdoaXRlc3Bh
Y2UgPSAiW1xceDIwXFx0XFxyXFxuXFxmXSIsCi0gICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIv
Y3NzMy1zeW50YXgvI2NoYXJhY3RlcnMKLSAgICBjaGFyYWN0ZXJFbmNvZGluZyA9ICIoPzpcXFxc
LnxbXFx3LV18W15cXHgwMC1cXHhhMF0pKyIsCi0KLSAgICAvLyBMb29zZWx5IG1vZGVsZWQgb24g
Q1NTIGlkZW50aWZpZXIgY2hhcmFjdGVycwotICAgIC8vIEFuIHVucXVvdGVkIHZhbHVlIHNob3Vs
ZCBiZSBhIENTUyBpZGVudGlmaWVyIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtc2VsZWN0b3Jz
LyNhdHRyaWJ1dGUtc2VsZWN0b3JzCi0gICAgLy8gUHJvcGVyIHN5bnRheDogaHR0cDovL3d3dy53
My5vcmcvVFIvQ1NTMjEvc3luZGF0YS5odG1sI3ZhbHVlLWRlZi1pZGVudGlmaWVyCi0gICAgaWRl
bnRpZmllciA9IGNoYXJhY3RlckVuY29kaW5nLnJlcGxhY2UoICJ3IiwgIncjIiApLAotCi0gICAg
Ly8gQWNjZXB0YWJsZSBvcGVyYXRvcnMgaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNh
dHRyaWJ1dGUtc2VsZWN0b3JzCi0gICAgb3BlcmF0b3JzID0gIihbKl4kfCF+XT89KSIsCi0gICAg
YXR0cmlidXRlcyA9ICJcXFsiICsgd2hpdGVzcGFjZSArICIqKCIgKyBjaGFyYWN0ZXJFbmNvZGlu
ZyArICIpIiArIHdoaXRlc3BhY2UgKwotICAgICIqKD86IiArIG9wZXJhdG9ycyArIHdoaXRlc3Bh
Y2UgKyAiKig/OihbJ1wiXSkoKD86XFxcXC58W15cXFxcXSkqPylcXDN8KCIgKyBpZGVudGlmaWVy
ICsgIil8KXwpIiArIHdoaXRlc3BhY2UgKyAiKlxcXSIsCi0KLSAgICAvLyBQcmVmZXIgYXJndW1l
bnRzIHF1b3RlZCwKLSAgICAvLyAgIHRoZW4gbm90IGNvbnRhaW5pbmcgcHNldWRvcy9icmFja2V0
cywKLSAgICAvLyAgIHRoZW4gYXR0cmlidXRlIHNlbGVjdG9ycy9ub24tcGFyZW50aGV0aWNhbCBl
eHByZXNzaW9ucywKLSAgICAvLyAgIHRoZW4gYW55dGhpbmcgZWxzZQotICAgIC8vIFRoZXNlIHBy
ZWZlcmVuY2VzIGFyZSBoZXJlIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHNlbGVjdG9ycwotICAg
IC8vICAgbmVlZGluZyB0b2tlbml6ZSBpbiB0aGUgUFNFVURPIHByZUZpbHRlcgotICAgIHBzZXVk
b3MgPSAiOigiICsgY2hhcmFjdGVyRW5jb2RpbmcgKyAiKSg/OlxcKCgoWydcIl0pKCg/OlxcXFwu
fFteXFxcXF0pKj8pXFwzfCgoPzpcXFxcLnxbXlxcXFwoKVtcXF1dfCIgKyBhdHRyaWJ1dGVzLnJl
cGxhY2UoIDMsIDggKSArICIpKil8LiopXFwpfCkiLAotCi0gICAgLy8gTGVhZGluZyBhbmQgbm9u
LWVzY2FwZWQgdHJhaWxpbmcgd2hpdGVzcGFjZSwgY2FwdHVyaW5nIHNvbWUgbm9uLXdoaXRlc3Bh
Y2UgY2hhcmFjdGVycyBwcmVjZWRpbmcgdGhlIGxhdHRlcgotICAgIHJ0cmltID0gbmV3IFJlZ0V4
cCggIl4iICsgd2hpdGVzcGFjZSArICIrfCgoPzpefFteXFxcXF0pKD86XFxcXC4pKikiICsgd2hp
dGVzcGFjZSArICIrJCIsICJnIiApLAotCi0gICAgcmNvbW1hID0gbmV3IFJlZ0V4cCggIl4iICsg
d2hpdGVzcGFjZSArICIqLCIgKyB3aGl0ZXNwYWNlICsgIioiICksCi0gICAgcmNvbWJpbmF0b3Jz
ID0gbmV3IFJlZ0V4cCggIl4iICsgd2hpdGVzcGFjZSArICIqKFtcXHgyMFxcdFxcclxcblxcZj4r
fl0pIiArIHdoaXRlc3BhY2UgKyAiKiIgKSwKLSAgICBycHNldWRvID0gbmV3IFJlZ0V4cCggcHNl
dWRvcyApLAotICAgIHJpZGVudGlmaWVyID0gbmV3IFJlZ0V4cCggIl4iICsgaWRlbnRpZmllciAr
ICIkIiApLAotCi0gICAgbWF0Y2hFeHByID0gewotICAgICJJRCI6IG5ldyBSZWdFeHAoICJeIygi
ICsgY2hhcmFjdGVyRW5jb2RpbmcgKyAiKSIgKSwKLSAgICAiQ0xBU1MiOiBuZXcgUmVnRXhwKCAi
XlxcLigiICsgY2hhcmFjdGVyRW5jb2RpbmcgKyAiKSIgKSwKLSAgICAiTkFNRSI6IG5ldyBSZWdF
eHAoICJeXFxbbmFtZT1bJ1wiXT8oIiArIGNoYXJhY3RlckVuY29kaW5nICsgIilbJ1wiXT9cXF0i
ICksCi0gICAgIlRBRyI6IG5ldyBSZWdFeHAoICJeKCIgKyBjaGFyYWN0ZXJFbmNvZGluZy5yZXBs
YWNlKCAidyIsICJ3KiIgKSArICIpIiApLAotICAgICJBVFRSIjogbmV3IFJlZ0V4cCggIl4iICsg
YXR0cmlidXRlcyApLAotICAgICJQU0VVRE8iOiBuZXcgUmVnRXhwKCAiXiIgKyBwc2V1ZG9zICks
Ci0gICAgIkNISUxEIjogbmV3IFJlZ0V4cCggIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxh
c3QpLShjaGlsZHxvZi10eXBlKSg/OlxcKCIgKyB3aGl0ZXNwYWNlICsKLSAgICAiKihldmVufG9k
ZHwoKFsrLV18KShcXGQqKW58KSIgKyB3aGl0ZXNwYWNlICsgIiooPzooWystXXwpIiArIHdoaXRl
c3BhY2UgKwotICAgICIqKFxcZCspfCkpIiArIHdoaXRlc3BhY2UgKyAiKlxcKXwpIiwgImkiICks
Ci0gICAgLy8gRm9yIHVzZSBpbiBsaWJyYXJpZXMgaW1wbGVtZW50aW5nIC5pcygpCi0gICAgLy8g
V2UgdXNlIHRoaXMgZm9yIFBPUyBtYXRjaGluZyBpbiBgc2VsZWN0YAotICAgICJuZWVkc0NvbnRl
eHQiOiBuZXcgUmVnRXhwKCAiXiIgKyB3aGl0ZXNwYWNlICsgIipbPit+XXw6KGV2ZW58b2RkfGVx
fGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcKCIgKwotICAgIHdoaXRlc3BhY2UgKyAiKigoPzot
XFxkKT9cXGQqKSIgKyB3aGl0ZXNwYWNlICsgIipcXCl8KSg/PVteLV18JCkiLCAiaSIgKQotICAg
IH0sCi0KLSAgICByc2libGluZyA9IC9bXHgyMFx0XHJcblxmXSpbK35dLywKLQotICAgIHJuYXRp
dmUgPSAvXltee10rXHtccypcW25hdGl2ZSBjb2RlLywKLQotICAgIC8vIEVhc2lseS1wYXJzZWFi
bGUvcmV0cmlldmFibGUgSUQgb3IgVEFHIG9yIENMQVNTIHNlbGVjdG9ycwotICAgIHJxdWlja0V4
cHIgPSAvXig/OiMoW1x3LV0rKXwoXHcrKXxcLihbXHctXSspKSQvLAotCi0gICAgcmlucHV0cyA9
IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksCi0gICAgcmhlYWRlciA9IC9e
aFxkJC9pLAotCi0gICAgcmVzY2FwZSA9IC8nfFxcL2csCi0gICAgcmF0dHJpYnV0ZVF1b3RlcyA9
IC9cPVtceDIwXHRcclxuXGZdKihbXiciXF1dKilbXHgyMFx0XHJcblxmXSpcXS9nLAotCi0gICAg
Ly8gQ1NTIGVzY2FwZXMgaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEvc3luZGF0YS5odG1sI2Vz
Y2FwZWQtY2hhcmFjdGVycwotICAgIHJ1bmVzY2FwZSA9IC9cXChbXGRhLWZBLUZdezEsNn1bXHgy
MFx0XHJcblxmXT98LikvZywKLSAgICBmdW5lc2NhcGUgPSBmdW5jdGlvbiggXywgZXNjYXBlZCAp
IHsKLSAgICB2YXIgaGlnaCA9ICIweCIgKyBlc2NhcGVkIC0gMHgxMDAwMDsKLSAgICAvLyBOYU4g
bWVhbnMgbm9uLWNvZGVwb2ludAotICAgIHJldHVybiBoaWdoICE9PSBoaWdoID8KLSAgICBlc2Nh
cGVkIDoKLSAgICAvLyBCTVAgY29kZXBvaW50Ci0gICAgaGlnaCA8IDAgPwotICAgIFN0cmluZy5m
cm9tQ2hhckNvZGUoIGhpZ2ggKyAweDEwMDAwICkgOgotICAgIC8vIFN1cHBsZW1lbnRhbCBQbGFu
ZSBjb2RlcG9pbnQgKHN1cnJvZ2F0ZSBwYWlyKQotICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoIGhp
Z2ggPj4gMTAgfCAweEQ4MDAsIGhpZ2ggJiAweDNGRiB8IDB4REMwMCApOwotICAgIH07Ci0KLS8v
IFVzZSBhIHN0cmlwcGVkLWRvd24gc2xpY2UgaWYgd2UgY2FuJ3QgdXNlIGEgbmF0aXZlIG9uZQot
dHJ5IHsKLSAgICBzbGljZS5jYWxsKCBwcmVmZXJyZWREb2MuZG9jdW1lbnRFbGVtZW50LmNoaWxk
Tm9kZXMsIDAgKVswXS5ub2RlVHlwZTsKLX0gY2F0Y2ggKCBlICkgewotICAgIHNsaWNlID0gZnVu
Y3Rpb24oIGkgKSB7Ci0gICAgdmFyIGVsZW0sCi0gICAgcmVzdWx0cyA9IFtdOwotICAgIHdoaWxl
ICggKGVsZW0gPSB0aGlzW2krK10pICkgewotICAgIHJlc3VsdHMucHVzaCggZWxlbSApOwotICAg
IH0KLSAgICByZXR1cm4gcmVzdWx0czsKLSAgICB9OwotfQotCi0vKioKLSAqIEZvciBmZWF0dXJl
IGRldGVjdGlvbgotICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIHRlc3Qg
Zm9yIG5hdGl2ZSBzdXBwb3J0Ci0gKi8KLWZ1bmN0aW9uIGlzTmF0aXZlKCBmbiApIHsKLSAgICBy
ZXR1cm4gcm5hdGl2ZS50ZXN0KCBmbiArICIiICk7Ci19Ci0KLS8qKgotICogQ3JlYXRlIGtleS12
YWx1ZSBjYWNoZXMgb2YgbGltaXRlZCBzaXplCi0gKiBAcmV0dXJucyB7RnVuY3Rpb24oc3RyaW5n
LCBPYmplY3QpfSBSZXR1cm5zIHRoZSBPYmplY3QgZGF0YSBhZnRlciBzdG9yaW5nIGl0IG9uIGl0
c2VsZiB3aXRoCi0gKiAgICBwcm9wZXJ0eSBuYW1lIHRoZSAoc3BhY2Utc3VmZml4ZWQpIHN0cmlu
ZyBhbmQgKGlmIHRoZSBjYWNoZSBpcyBsYXJnZXIgdGhhbiBFeHByLmNhY2hlTGVuZ3RoKQotICog
ICAgZGVsZXRpbmcgdGhlIG9sZGVzdCBlbnRyeQotICovCi1mdW5jdGlvbiBjcmVhdGVDYWNoZSgp
IHsKLSAgICB2YXIgY2FjaGUsCi0gICAga2V5cyA9IFtdOwotCi0gICAgcmV0dXJuIChjYWNoZSA9
IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkgewotICAgIC8vIFVzZSAoa2V5ICsgIiAiKSB0byBhdm9p
ZCBjb2xsaXNpb24gd2l0aCBuYXRpdmUgcHJvdG90eXBlIHByb3BlcnRpZXMgKHNlZSBJc3N1ZSAj
MTU3KQotICAgIGlmICgga2V5cy5wdXNoKCBrZXkgKz0gIiAiICkgPiBFeHByLmNhY2hlTGVuZ3Ro
ICkgewotICAgIC8vIE9ubHkga2VlcCB0aGUgbW9zdCByZWNlbnQgZW50cmllcwotICAgIGRlbGV0
ZSBjYWNoZVsga2V5cy5zaGlmdCgpIF07Ci0gICAgfQotICAgIHJldHVybiAoY2FjaGVbIGtleSBd
ID0gdmFsdWUpOwotICAgIH0pOwotfQotCi0vKioKLSAqIE1hcmsgYSBmdW5jdGlvbiBmb3Igc3Bl
Y2lhbCB1c2UgYnkgU2l6emxlCi0gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24g
dG8gbWFyawotICovCi1mdW5jdGlvbiBtYXJrRnVuY3Rpb24oIGZuICkgewotICAgIGZuWyBleHBh
bmRvIF0gPSB0cnVlOwotICAgIHJldHVybiBmbjsKLX0KLQotLyoqCi0gKiBTdXBwb3J0IHRlc3Rp
bmcgdXNpbmcgYW4gZWxlbWVudAotICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gUGFzc2VkIHRoZSBj
cmVhdGVkIGRpdiBhbmQgZXhwZWN0cyBhIGJvb2xlYW4gcmVzdWx0Ci0gKi8KLWZ1bmN0aW9uIGFz
c2VydCggZm4gKSB7Ci0gICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp
OwotCi0gICAgdHJ5IHsKLSAgICByZXR1cm4gZm4oIGRpdiApOwotICAgIH0gY2F0Y2ggKGUpIHsK
LSAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSBmaW5hbGx5IHsKLSAgICAvLyByZWxlYXNlIG1lbW9y
eSBpbiBJRQotICAgIGRpdiA9IG51bGw7Ci0gICAgfQotfQotCi1mdW5jdGlvbiBTaXp6bGUoIHNl
bGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICkgewotICAgIHZhciBtYXRjaCwgZWxlbSwg
bSwgbm9kZVR5cGUsCi0gICAgLy8gUVNBIHZhcnMKLSAgICBpLCBncm91cHMsIG9sZCwgbmlkLCBu
ZXdDb250ZXh0LCBuZXdTZWxlY3RvcjsKLQotICAgIGlmICggKCBjb250ZXh0ID8gY29udGV4dC5v
d25lckRvY3VtZW50IHx8IGNvbnRleHQgOiBwcmVmZXJyZWREb2MgKSAhPT0gZG9jdW1lbnQgKSB7
Ci0gICAgc2V0RG9jdW1lbnQoIGNvbnRleHQgKTsKLSAgICB9Ci0KLSAgICBjb250ZXh0ID0gY29u
dGV4dCB8fCBkb2N1bWVudDsKLSAgICByZXN1bHRzID0gcmVzdWx0cyB8fCBbXTsKLQotICAgIGlm
ICggIXNlbGVjdG9yIHx8IHR5cGVvZiBzZWxlY3RvciAhPT0gInN0cmluZyIgKSB7Ci0gICAgcmV0
dXJuIHJlc3VsdHM7Ci0gICAgfQotCi0gICAgaWYgKCAobm9kZVR5cGUgPSBjb250ZXh0Lm5vZGVU
eXBlKSAhPT0gMSAmJiBub2RlVHlwZSAhPT0gOSApIHsKLSAgICByZXR1cm4gW107Ci0gICAgfQot
Ci0gICAgaWYgKCAhZG9jdW1lbnRJc1hNTCAmJiAhc2VlZCApIHsKLQotICAgIC8vIFNob3J0Y3V0
cwotICAgIGlmICggKG1hdGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApKSApIHsKLSAg
ICAvLyBTcGVlZC11cDogU2l6emxlKCIjSUQiKQotICAgIGlmICggKG0gPSBtYXRjaFsxXSkgKSB7
Ci0gICAgaWYgKCBub2RlVHlwZSA9PT0gOSApIHsKLSAgICBlbGVtID0gY29udGV4dC5nZXRFbGVt
ZW50QnlJZCggbSApOwotICAgIC8vIENoZWNrIHBhcmVudE5vZGUgdG8gY2F0Y2ggd2hlbiBCbGFj
a2JlcnJ5IDQuNiByZXR1cm5zCi0gICAgLy8gbm9kZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIGluIHRo
ZSBkb2N1bWVudCAjNjk2MwotICAgIGlmICggZWxlbSAmJiBlbGVtLnBhcmVudE5vZGUgKSB7Ci0g
ICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIElFLCBPcGVyYSwgYW5kIFdlYmtpdCByZXR1cm4g
aXRlbXMKLSAgICAvLyBieSBuYW1lIGluc3RlYWQgb2YgSUQKLSAgICBpZiAoIGVsZW0uaWQgPT09
IG0gKSB7Ci0gICAgcmVzdWx0cy5wdXNoKCBlbGVtICk7Ci0gICAgcmV0dXJuIHJlc3VsdHM7Ci0g
ICAgfQotICAgIH0gZWxzZSB7Ci0gICAgcmV0dXJuIHJlc3VsdHM7Ci0gICAgfQotICAgIH0gZWxz
ZSB7Ci0gICAgLy8gQ29udGV4dCBpcyBub3QgYSBkb2N1bWVudAotICAgIGlmICggY29udGV4dC5v
d25lckRvY3VtZW50ICYmIChlbGVtID0gY29udGV4dC5vd25lckRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCBtICkpICYmCi0gICAgY29udGFpbnMoIGNvbnRleHQsIGVsZW0gKSAmJiBlbGVtLmlkID09
PSBtICkgewotICAgIHJlc3VsdHMucHVzaCggZWxlbSApOwotICAgIHJldHVybiByZXN1bHRzOwot
ICAgIH0KLSAgICB9Ci0KLSAgICAvLyBTcGVlZC11cDogU2l6emxlKCJUQUciKQotICAgIH0gZWxz
ZSBpZiAoIG1hdGNoWzJdICkgewotICAgIHB1c2guYXBwbHkoIHJlc3VsdHMsIHNsaWNlLmNhbGwo
Y29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggc2VsZWN0b3IgKSwgMCkgKTsKLSAgICByZXR1
cm4gcmVzdWx0czsKLQotICAgIC8vIFNwZWVkLXVwOiBTaXp6bGUoIi5DTEFTUyIpCi0gICAgfSBl
bHNlIGlmICggKG0gPSBtYXRjaFszXSkgJiYgc3VwcG9ydC5nZXRCeUNsYXNzTmFtZSAmJiBjb250
ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKSB7Ci0gICAgcHVzaC5hcHBseSggcmVzdWx0cywg
c2xpY2UuY2FsbChjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIG0gKSwgMCkgKTsKLSAg
ICByZXR1cm4gcmVzdWx0czsKLSAgICB9Ci0gICAgfQotCi0gICAgLy8gUVNBIHBhdGgKLSAgICBp
ZiAoIHN1cHBvcnQucXNhICYmICFyYnVnZ3lRU0EudGVzdChzZWxlY3RvcikgKSB7Ci0gICAgb2xk
ID0gdHJ1ZTsKLSAgICBuaWQgPSBleHBhbmRvOwotICAgIG5ld0NvbnRleHQgPSBjb250ZXh0Owot
ICAgIG5ld1NlbGVjdG9yID0gbm9kZVR5cGUgPT09IDkgJiYgc2VsZWN0b3I7Ci0KLSAgICAvLyBx
U0Egd29ya3Mgc3RyYW5nZWx5IG9uIEVsZW1lbnQtcm9vdGVkIHF1ZXJpZXMKLSAgICAvLyBXZSBj
YW4gd29yayBhcm91bmQgdGhpcyBieSBzcGVjaWZ5aW5nIGFuIGV4dHJhIElEIG9uIHRoZSByb290
Ci0gICAgLy8gYW5kIHdvcmtpbmcgdXAgZnJvbSB0aGVyZSAoVGhhbmtzIHRvIEFuZHJldyBEdXBv
bnQgZm9yIHRoZSB0ZWNobmlxdWUpCi0gICAgLy8gSUUgOCBkb2Vzbid0IHdvcmsgb24gb2JqZWN0
IGVsZW1lbnRzCi0gICAgaWYgKCBub2RlVHlwZSA9PT0gMSAmJiBjb250ZXh0Lm5vZGVOYW1lLnRv
TG93ZXJDYXNlKCkgIT09ICJvYmplY3QiICkgewotICAgIGdyb3VwcyA9IHRva2VuaXplKCBzZWxl
Y3RvciApOwotCi0gICAgaWYgKCAob2xkID0gY29udGV4dC5nZXRBdHRyaWJ1dGUoImlkIikpICkg
ewotICAgIG5pZCA9IG9sZC5yZXBsYWNlKCByZXNjYXBlLCAiXFwkJiIgKTsKLSAgICB9IGVsc2Ug
ewotICAgIGNvbnRleHQuc2V0QXR0cmlidXRlKCAiaWQiLCBuaWQgKTsKLSAgICB9Ci0gICAgbmlk
ID0gIltpZD0nIiArIG5pZCArICInXSAiOwotCi0gICAgaSA9IGdyb3Vwcy5sZW5ndGg7Ci0gICAg
d2hpbGUgKCBpLS0gKSB7Ci0gICAgZ3JvdXBzW2ldID0gbmlkICsgdG9TZWxlY3RvciggZ3JvdXBz
W2ldICk7Ci0gICAgfQotICAgIG5ld0NvbnRleHQgPSByc2libGluZy50ZXN0KCBzZWxlY3RvciAp
ICYmIGNvbnRleHQucGFyZW50Tm9kZSB8fCBjb250ZXh0OwotICAgIG5ld1NlbGVjdG9yID0gZ3Jv
dXBzLmpvaW4oIiwiKTsKLSAgICB9Ci0KLSAgICBpZiAoIG5ld1NlbGVjdG9yICkgewotICAgIHRy
eSB7Ci0gICAgcHVzaC5hcHBseSggcmVzdWx0cywgc2xpY2UuY2FsbCggbmV3Q29udGV4dC5xdWVy
eVNlbGVjdG9yQWxsKAotICAgIG5ld1NlbGVjdG9yCi0gICAgKSwgMCApICk7Ci0gICAgcmV0dXJu
IHJlc3VsdHM7Ci0gICAgfSBjYXRjaChxc2FFcnJvcikgewotICAgIH0gZmluYWxseSB7Ci0gICAg
aWYgKCAhb2xkICkgewotICAgIGNvbnRleHQucmVtb3ZlQXR0cmlidXRlKCJpZCIpOwotICAgIH0K
LSAgICB9Ci0gICAgfQotICAgIH0KLSAgICB9Ci0KLSAgICAvLyBBbGwgb3RoZXJzCi0gICAgcmV0
dXJuIHNlbGVjdCggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sICIkMSIgKSwgY29udGV4dCwgcmVz
dWx0cywgc2VlZCApOwotfQotCi0vKioKLSAqIERldGVjdCB4bWwKLSAqIEBwYXJhbSB7RWxlbWVu
dHxPYmplY3R9IGVsZW0gQW4gZWxlbWVudCBvciBhIGRvY3VtZW50Ci0gKi8KLWlzWE1MID0gU2l6
emxlLmlzWE1MID0gZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgLy8gZG9jdW1lbnRFbGVtZW50IGlz
IHZlcmlmaWVkIGZvciBjYXNlcyB3aGVyZSBpdCBkb2Vzbid0IHlldCBleGlzdAotICAgIC8vIChz
dWNoIGFzIGxvYWRpbmcgaWZyYW1lcyBpbiBJRSAtICM0ODMzKQotICAgIHZhciBkb2N1bWVudEVs
ZW1lbnQgPSBlbGVtICYmIChlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSkuZG9jdW1lbnRFbGVt
ZW50OwotICAgIHJldHVybiBkb2N1bWVudEVsZW1lbnQgPyBkb2N1bWVudEVsZW1lbnQubm9kZU5h
bWUgIT09ICJIVE1MIiA6IGZhbHNlOwotfTsKLQotLyoqCi0gKiBTZXRzIGRvY3VtZW50LXJlbGF0
ZWQgdmFyaWFibGVzIG9uY2UgYmFzZWQgb24gdGhlIGN1cnJlbnQgZG9jdW1lbnQKLSAqIEBwYXJh
bSB7RWxlbWVudHxPYmplY3R9IFtkb2NdIEFuIGVsZW1lbnQgb3IgZG9jdW1lbnQgb2JqZWN0IHRv
IHVzZSB0byBzZXQgdGhlIGRvY3VtZW50Ci0gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRo
ZSBjdXJyZW50IGRvY3VtZW50Ci0gKi8KLXNldERvY3VtZW50ID0gU2l6emxlLnNldERvY3VtZW50
ID0gZnVuY3Rpb24oIG5vZGUgKSB7Ci0gICAgdmFyIGRvYyA9IG5vZGUgPyBub2RlLm93bmVyRG9j
dW1lbnQgfHwgbm9kZSA6IHByZWZlcnJlZERvYzsKLQotICAgIC8vIElmIG5vIGRvY3VtZW50IGFu
ZCBkb2N1bWVudEVsZW1lbnQgaXMgYXZhaWxhYmxlLCByZXR1cm4KLSAgICBpZiAoIGRvYyA9PT0g
ZG9jdW1lbnQgfHwgZG9jLm5vZGVUeXBlICE9PSA5IHx8ICFkb2MuZG9jdW1lbnRFbGVtZW50ICkg
ewotICAgIHJldHVybiBkb2N1bWVudDsKLSAgICB9Ci0KLSAgICAvLyBTZXQgb3VyIGRvY3VtZW50
Ci0gICAgZG9jdW1lbnQgPSBkb2M7Ci0gICAgZG9jRWxlbSA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7
Ci0KLSAgICAvLyBTdXBwb3J0IHRlc3RzCi0gICAgZG9jdW1lbnRJc1hNTCA9IGlzWE1MKCBkb2Mg
KTsKLQotICAgIC8vIENoZWNrIGlmIGdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikgcmV0dXJucyBv
bmx5IGVsZW1lbnRzCi0gICAgc3VwcG9ydC50YWdOYW1lTm9Db21tZW50cyA9IGFzc2VydChmdW5j
dGlvbiggZGl2ICkgewotICAgIGRpdi5hcHBlbmRDaGlsZCggZG9jLmNyZWF0ZUNvbW1lbnQoIiIp
ICk7Ci0gICAgcmV0dXJuICFkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGg7Ci0g
ICAgfSk7Ci0KLSAgICAvLyBDaGVjayBpZiBhdHRyaWJ1dGVzIHNob3VsZCBiZSByZXRyaWV2ZWQg
YnkgYXR0cmlidXRlIG5vZGVzCi0gICAgc3VwcG9ydC5hdHRyaWJ1dGVzID0gYXNzZXJ0KGZ1bmN0
aW9uKCBkaXYgKSB7Ci0gICAgZGl2LmlubmVySFRNTCA9ICI8c2VsZWN0Pjwvc2VsZWN0PiI7Ci0g
ICAgdmFyIHR5cGUgPSB0eXBlb2YgZGl2Lmxhc3RDaGlsZC5nZXRBdHRyaWJ1dGUoIm11bHRpcGxl
Iik7Ci0gICAgLy8gSUU4IHJldHVybnMgYSBzdHJpbmcgZm9yIHNvbWUgYXR0cmlidXRlcyBldmVu
IHdoZW4gbm90IHByZXNlbnQKLSAgICByZXR1cm4gdHlwZSAhPT0gImJvb2xlYW4iICYmIHR5cGUg
IT09ICJzdHJpbmciOwotICAgIH0pOwotCi0gICAgLy8gQ2hlY2sgaWYgZ2V0RWxlbWVudHNCeUNs
YXNzTmFtZSBjYW4gYmUgdHJ1c3RlZAotICAgIHN1cHBvcnQuZ2V0QnlDbGFzc05hbWUgPSBhc3Nl
cnQoZnVuY3Rpb24oIGRpdiApIHsKLSAgICAvLyBPcGVyYSBjYW4ndCBmaW5kIGEgc2Vjb25kIGNs
YXNzbmFtZSAoaW4gOS42KQotICAgIGRpdi5pbm5lckhUTUwgPSAiPGRpdiBjbGFzcz0naGlkZGVu
IGUnPjwvZGl2PjxkaXYgY2xhc3M9J2hpZGRlbic+PC9kaXY+IjsKLSAgICBpZiAoICFkaXYuZ2V0
RWxlbWVudHNCeUNsYXNzTmFtZSB8fCAhZGl2LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImUiKS5s
ZW5ndGggKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIFNhZmFyaSAzLjIg
Y2FjaGVzIGNsYXNzIGF0dHJpYnV0ZXMgYW5kIGRvZXNuJ3QgY2F0Y2ggY2hhbmdlcwotICAgIGRp
di5sYXN0Q2hpbGQuY2xhc3NOYW1lID0gImUiOwotICAgIHJldHVybiBkaXYuZ2V0RWxlbWVudHNC
eUNsYXNzTmFtZSgiZSIpLmxlbmd0aCA9PT0gMjsKLSAgICB9KTsKLQotICAgIC8vIENoZWNrIGlm
IGdldEVsZW1lbnRCeUlkIHJldHVybnMgZWxlbWVudHMgYnkgbmFtZQotICAgIC8vIENoZWNrIGlm
IGdldEVsZW1lbnRzQnlOYW1lIHByaXZpbGVnZXMgZm9ybSBjb250cm9scyBvciByZXR1cm5zIGVs
ZW1lbnRzIGJ5IElECi0gICAgc3VwcG9ydC5nZXRCeU5hbWUgPSBhc3NlcnQoZnVuY3Rpb24oIGRp
diApIHsKLSAgICAvLyBJbmplY3QgY29udGVudAotICAgIGRpdi5pZCA9IGV4cGFuZG8gKyAwOwot
ICAgIGRpdi5pbm5lckhUTUwgPSAiPGEgbmFtZT0nIiArIGV4cGFuZG8gKyAiJz48L2E+PGRpdiBu
YW1lPSciICsgZXhwYW5kbyArICInPjwvZGl2PiI7Ci0gICAgZG9jRWxlbS5pbnNlcnRCZWZvcmUo
IGRpdiwgZG9jRWxlbS5maXJzdENoaWxkICk7Ci0KLSAgICAvLyBUZXN0Ci0gICAgdmFyIHBhc3Mg
PSBkb2MuZ2V0RWxlbWVudHNCeU5hbWUgJiYKLSAgICAvLyBidWdneSBicm93c2VycyB3aWxsIHJl
dHVybiBmZXdlciB0aGFuIHRoZSBjb3JyZWN0IDIKLSAgICBkb2MuZ2V0RWxlbWVudHNCeU5hbWUo
IGV4cGFuZG8gKS5sZW5ndGggPT09IDIgKwotICAgIC8vIGJ1Z2d5IGJyb3dzZXJzIHdpbGwgcmV0
dXJuIG1vcmUgdGhhbiB0aGUgY29ycmVjdCAwCi0gICAgZG9jLmdldEVsZW1lbnRzQnlOYW1lKCBl
eHBhbmRvICsgMCApLmxlbmd0aDsKLSAgICBzdXBwb3J0LmdldElkTm90TmFtZSA9ICFkb2MuZ2V0
RWxlbWVudEJ5SWQoIGV4cGFuZG8gKTsKLQotICAgIC8vIENsZWFudXAKLSAgICBkb2NFbGVtLnJl
bW92ZUNoaWxkKCBkaXYgKTsKLQotICAgIHJldHVybiBwYXNzOwotICAgIH0pOwotCi0gICAgLy8g
SUU2LzcgcmV0dXJuIG1vZGlmaWVkIGF0dHJpYnV0ZXMKLSAgICBFeHByLmF0dHJIYW5kbGUgPSBh
c3NlcnQoZnVuY3Rpb24oIGRpdiApIHsKLSAgICBkaXYuaW5uZXJIVE1MID0gIjxhIGhyZWY9JyMn
PjwvYT4iOwotICAgIHJldHVybiBkaXYuZmlyc3RDaGlsZCAmJiB0eXBlb2YgZGl2LmZpcnN0Q2hp
bGQuZ2V0QXR0cmlidXRlICE9PSBzdHJ1bmRlZmluZWQgJiYKLSAgICBkaXYuZmlyc3RDaGlsZC5n
ZXRBdHRyaWJ1dGUoImhyZWYiKSA9PT0gIiMiOwotICAgIH0pID8KLSAgICB7fSA6Ci0gICAgewot
ICAgICJocmVmIjogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgcmV0dXJuIGVsZW0uZ2V0QXR0cmli
dXRlKCAiaHJlZiIsIDIgKTsKLSAgICB9LAotICAgICJ0eXBlIjogZnVuY3Rpb24oIGVsZW0gKSB7
Ci0gICAgcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCJ0eXBlIik7Ci0gICAgfQotICAgIH07Ci0K
LSAgICAvLyBJRCBmaW5kIGFuZCBmaWx0ZXIKLSAgICBpZiAoIHN1cHBvcnQuZ2V0SWROb3ROYW1l
ICkgewotICAgIEV4cHIuZmluZFsiSUQiXSA9IGZ1bmN0aW9uKCBpZCwgY29udGV4dCApIHsKLSAg
ICBpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSBzdHJ1bmRlZmluZWQgJiYg
IWRvY3VtZW50SXNYTUwgKSB7Ci0gICAgdmFyIG0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBp
ZCApOwotICAgIC8vIENoZWNrIHBhcmVudE5vZGUgdG8gY2F0Y2ggd2hlbiBCbGFja2JlcnJ5IDQu
NiByZXR1cm5zCi0gICAgLy8gbm9kZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIGluIHRoZSBkb2N1bWVu
dCAjNjk2MwotICAgIHJldHVybiBtICYmIG0ucGFyZW50Tm9kZSA/IFttXSA6IFtdOwotICAgIH0K
LSAgICB9OwotICAgIEV4cHIuZmlsdGVyWyJJRCJdID0gZnVuY3Rpb24oIGlkICkgewotICAgIHZh
ciBhdHRySWQgPSBpZC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApOwotICAgIHJldHVy
biBmdW5jdGlvbiggZWxlbSApIHsKLSAgICByZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoImlkIikg
PT09IGF0dHJJZDsKLSAgICB9OwotICAgIH07Ci0gICAgfSBlbHNlIHsKLSAgICBFeHByLmZpbmRb
IklEIl0gPSBmdW5jdGlvbiggaWQsIGNvbnRleHQgKSB7Ci0gICAgaWYgKCB0eXBlb2YgY29udGV4
dC5nZXRFbGVtZW50QnlJZCAhPT0gc3RydW5kZWZpbmVkICYmICFkb2N1bWVudElzWE1MICkgewot
ICAgIHZhciBtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggaWQgKTsKLQotICAgIHJldHVybiBt
ID8KLSAgICBtLmlkID09PSBpZCB8fCB0eXBlb2YgbS5nZXRBdHRyaWJ1dGVOb2RlICE9PSBzdHJ1
bmRlZmluZWQgJiYgbS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpLnZhbHVlID09PSBpZCA/Ci0gICAg
W21dIDoKLSAgICB1bmRlZmluZWQgOgotICAgIFtdOwotICAgIH0KLSAgICB9OwotICAgIEV4cHIu
ZmlsdGVyWyJJRCJdID0gIGZ1bmN0aW9uKCBpZCApIHsKLSAgICB2YXIgYXR0cklkID0gaWQucmVw
bGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTsKLSAgICByZXR1cm4gZnVuY3Rpb24oIGVsZW0g
KSB7Ci0gICAgdmFyIG5vZGUgPSB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlICE9PSBzdHJ1
bmRlZmluZWQgJiYgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpOwotICAgIHJldHVybiBub2Rl
ICYmIG5vZGUudmFsdWUgPT09IGF0dHJJZDsKLSAgICB9OwotICAgIH07Ci0gICAgfQotCi0gICAg
Ly8gVGFnCi0gICAgRXhwci5maW5kWyJUQUciXSA9IHN1cHBvcnQudGFnTmFtZU5vQ29tbWVudHMg
PwotICAgIGZ1bmN0aW9uKCB0YWcsIGNvbnRleHQgKSB7Ci0gICAgaWYgKCB0eXBlb2YgY29udGV4
dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gc3RydW5kZWZpbmVkICkgewotICAgIHJldHVybiBj
b250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgKTsKLSAgICB9Ci0gICAgfSA6Ci0gICAg
ZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHsKLSAgICB2YXIgZWxlbSwKLSAgICB0bXAgPSBbXSwK
LSAgICBpID0gMCwKLSAgICByZXN1bHRzID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgg
dGFnICk7Ci0KLSAgICAvLyBGaWx0ZXIgb3V0IHBvc3NpYmxlIGNvbW1lbnRzCi0gICAgaWYgKCB0
YWcgPT09ICIqIiApIHsKLSAgICB3aGlsZSAoIChlbGVtID0gcmVzdWx0c1tpKytdKSApIHsKLSAg
ICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7Ci0gICAgdG1wLnB1c2goIGVsZW0gKTsKLSAg
ICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRtcDsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdHM7
Ci0gICAgfTsKLQotICAgIC8vIE5hbWUKLSAgICBFeHByLmZpbmRbIk5BTUUiXSA9IHN1cHBvcnQu
Z2V0QnlOYW1lICYmIGZ1bmN0aW9uKCB0YWcsIGNvbnRleHQgKSB7Ci0gICAgaWYgKCB0eXBlb2Yg
Y29udGV4dC5nZXRFbGVtZW50c0J5TmFtZSAhPT0gc3RydW5kZWZpbmVkICkgewotICAgIHJldHVy
biBjb250ZXh0LmdldEVsZW1lbnRzQnlOYW1lKCBuYW1lICk7Ci0gICAgfQotICAgIH07Ci0KLSAg
ICAvLyBDbGFzcwotICAgIEV4cHIuZmluZFsiQ0xBU1MiXSA9IHN1cHBvcnQuZ2V0QnlDbGFzc05h
bWUgJiYgZnVuY3Rpb24oIGNsYXNzTmFtZSwgY29udGV4dCApIHsKLSAgICBpZiAoIHR5cGVvZiBj
b250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgIT09IHN0cnVuZGVmaW5lZCAmJiAhZG9jdW1l
bnRJc1hNTCApIHsKLSAgICByZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBj
bGFzc05hbWUgKTsKLSAgICB9Ci0gICAgfTsKLQotICAgIC8vIFFTQSBhbmQgbWF0Y2hlc1NlbGVj
dG9yIHN1cHBvcnQKLQotICAgIC8vIG1hdGNoZXNTZWxlY3Rvcig6YWN0aXZlKSByZXBvcnRzIGZh
bHNlIHdoZW4gdHJ1ZSAoSUU5L09wZXJhIDExLjUpCi0gICAgcmJ1Z2d5TWF0Y2hlcyA9IFtdOwot
Ci0gICAgLy8gcVNhKDpmb2N1cykgcmVwb3J0cyBmYWxzZSB3aGVuIHRydWUgKENocm9tZSAyMSks
Ci0gICAgLy8gbm8gbmVlZCB0byBhbHNvIGFkZCB0byBidWdneU1hdGNoZXMgc2luY2UgbWF0Y2hl
cyBjaGVja3MgYnVnZ3lRU0EKLSAgICAvLyBBIHN1cHBvcnQgdGVzdCB3b3VsZCByZXF1aXJlIHRv
byBtdWNoIGNvZGUgKHdvdWxkIGluY2x1ZGUgZG9jdW1lbnQgcmVhZHkpCi0gICAgcmJ1Z2d5UVNB
ID0gWyAiOmZvY3VzIiBdOwotCi0gICAgaWYgKCAoc3VwcG9ydC5xc2EgPSBpc05hdGl2ZShkb2Mu
cXVlcnlTZWxlY3RvckFsbCkpICkgewotICAgIC8vIEJ1aWxkIFFTQSByZWdleAotICAgIC8vIFJl
Z2V4IHN0cmF0ZWd5IGFkb3B0ZWQgZnJvbSBEaWVnbyBQZXJpbmkKLSAgICBhc3NlcnQoZnVuY3Rp
b24oIGRpdiApIHsKLSAgICAvLyBTZWxlY3QgaXMgc2V0IHRvIGVtcHR5IHN0cmluZyBvbiBwdXJw
b3NlCi0gICAgLy8gVGhpcyBpcyB0byB0ZXN0IElFJ3MgdHJlYXRtZW50IG9mIG5vdCBleHBsaWN0
bHkKLSAgICAvLyBzZXR0aW5nIGEgYm9vbGVhbiBjb250ZW50IGF0dHJpYnV0ZSwKLSAgICAvLyBz
aW5jZSBpdHMgcHJlc2VuY2Ugc2hvdWxkIGJlIGVub3VnaAotICAgIC8vIGh0dHA6Ly9idWdzLmpx
dWVyeS5jb20vdGlja2V0LzEyMzU5Ci0gICAgZGl2LmlubmVySFRNTCA9ICI8c2VsZWN0PjxvcHRp
b24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+IjsKLQotICAgIC8vIElFOCAtIFNvbWUg
Ym9vbGVhbiBhdHRyaWJ1dGVzIGFyZSBub3QgdHJlYXRlZCBjb3JyZWN0bHkKLSAgICBpZiAoICFk
aXYucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0aCApIHsKLSAgICByYnVnZ3lR
U0EucHVzaCggIlxcWyIgKyB3aGl0ZXNwYWNlICsgIiooPzpjaGVja2VkfGRpc2FibGVkfGlzbWFw
fG11bHRpcGxlfHJlYWRvbmx5fHNlbGVjdGVkfHZhbHVlKSIgKTsKLSAgICB9Ci0KLSAgICAvLyBX
ZWJraXQvT3BlcmEgLSA6Y2hlY2tlZCBzaG91bGQgcmV0dXJuIHNlbGVjdGVkIG9wdGlvbiBlbGVt
ZW50cwotICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3Jz
LTIwMTEwOTI5LyNjaGVja2VkCi0gICAgLy8gSUU4IHRocm93cyBlcnJvciBoZXJlIGFuZCB3aWxs
IG5vdCBzZWUgbGF0ZXIgdGVzdHMKLSAgICBpZiAoICFkaXYucXVlcnlTZWxlY3RvckFsbCgiOmNo
ZWNrZWQiKS5sZW5ndGggKSB7Ci0gICAgcmJ1Z2d5UVNBLnB1c2goIjpjaGVja2VkIik7Ci0gICAg
fQotICAgIH0pOwotCi0gICAgYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7Ci0KLSAgICAvLyBPcGVy
YSAxMC0xMi9JRTggLSBePSAkPSAqPSBhbmQgZW1wdHkgdmFsdWVzCi0gICAgLy8gU2hvdWxkIG5v
dCBzZWxlY3QgYW55dGhpbmcKLSAgICBkaXYuaW5uZXJIVE1MID0gIjxpbnB1dCB0eXBlPSdoaWRk
ZW4nIGk9JycvPiI7Ci0gICAgaWYgKCBkaXYucXVlcnlTZWxlY3RvckFsbCgiW2lePScnXSIpLmxl
bmd0aCApIHsKLSAgICByYnVnZ3lRU0EucHVzaCggIlsqXiRdPSIgKyB3aGl0ZXNwYWNlICsgIioo
PzpcIlwifCcnKSIgKTsKLSAgICB9Ci0KLSAgICAvLyBGRiAzLjUgLSA6ZW5hYmxlZC86ZGlzYWJs
ZWQgYW5kIGhpZGRlbiBlbGVtZW50cyAoaGlkZGVuIGVsZW1lbnRzIGFyZSBzdGlsbCBlbmFibGVk
KQotICAgIC8vIElFOCB0aHJvd3MgZXJyb3IgaGVyZSBhbmQgd2lsbCBub3Qgc2VlIGxhdGVyIHRl
c3RzCi0gICAgaWYgKCAhZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoIjplbmFibGVkIikubGVuZ3RoICkg
ewotICAgIHJidWdneVFTQS5wdXNoKCAiOmVuYWJsZWQiLCAiOmRpc2FibGVkIiApOwotICAgIH0K
LQotICAgIC8vIE9wZXJhIDEwLTExIGRvZXMgbm90IHRocm93IG9uIHBvc3QtY29tbWEgaW52YWxp
ZCBwc2V1ZG9zCi0gICAgZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoIiosOngiKTsKLSAgICByYnVnZ3lR
U0EucHVzaCgiLC4qOiIpOwotICAgIH0pOwotICAgIH0KLQotICAgIGlmICggKHN1cHBvcnQubWF0
Y2hlc1NlbGVjdG9yID0gaXNOYXRpdmUoIChtYXRjaGVzID0gZG9jRWxlbS5tYXRjaGVzU2VsZWN0
b3IgfHwKLSAgICBkb2NFbGVtLm1vek1hdGNoZXNTZWxlY3RvciB8fAotICAgIGRvY0VsZW0ud2Vi
a2l0TWF0Y2hlc1NlbGVjdG9yIHx8Ci0gICAgZG9jRWxlbS5vTWF0Y2hlc1NlbGVjdG9yIHx8Ci0g
ICAgZG9jRWxlbS5tc01hdGNoZXNTZWxlY3RvcikgKSkgKSB7Ci0KLSAgICBhc3NlcnQoZnVuY3Rp
b24oIGRpdiApIHsKLSAgICAvLyBDaGVjayB0byBzZWUgaWYgaXQncyBwb3NzaWJsZSB0byBkbyBt
YXRjaGVzU2VsZWN0b3IKLSAgICAvLyBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlIChJRSA5KQotICAg
IHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggPSBtYXRjaGVzLmNhbGwoIGRpdiwgImRpdiIgKTsK
LQotICAgIC8vIFRoaXMgc2hvdWxkIGZhaWwgd2l0aCBhbiBleGNlcHRpb24KLSAgICAvLyBHZWNr
byBkb2VzIG5vdCBlcnJvciwgcmV0dXJucyBmYWxzZSBpbnN0ZWFkCi0gICAgbWF0Y2hlcy5jYWxs
KCBkaXYsICJbcyE9JyddOngiICk7Ci0gICAgcmJ1Z2d5TWF0Y2hlcy5wdXNoKCAiIT0iLCBwc2V1
ZG9zICk7Ci0gICAgfSk7Ci0gICAgfQotCi0gICAgcmJ1Z2d5UVNBID0gbmV3IFJlZ0V4cCggcmJ1
Z2d5UVNBLmpvaW4oInwiKSApOwotICAgIHJidWdneU1hdGNoZXMgPSBuZXcgUmVnRXhwKCByYnVn
Z3lNYXRjaGVzLmpvaW4oInwiKSApOwotCi0gICAgLy8gRWxlbWVudCBjb250YWlucyBhbm90aGVy
Ci0gICAgLy8gUHVycG9zZWZ1bGx5IGRvZXMgbm90IGltcGxlbWVudCBpbmNsdXNpdmUgZGVzY2Vu
ZGVudAotICAgIC8vIEFzIGluLCBhbiBlbGVtZW50IGRvZXMgbm90IGNvbnRhaW4gaXRzZWxmCi0g
ICAgY29udGFpbnMgPSBpc05hdGl2ZShkb2NFbGVtLmNvbnRhaW5zKSB8fCBkb2NFbGVtLmNvbXBh
cmVEb2N1bWVudFBvc2l0aW9uID8KLSAgICBmdW5jdGlvbiggYSwgYiApIHsKLSAgICB2YXIgYWRv
d24gPSBhLm5vZGVUeXBlID09PSA5ID8gYS5kb2N1bWVudEVsZW1lbnQgOiBhLAotICAgIGJ1cCA9
IGIgJiYgYi5wYXJlbnROb2RlOwotICAgIHJldHVybiBhID09PSBidXAgfHwgISEoIGJ1cCAmJiBi
dXAubm9kZVR5cGUgPT09IDEgJiYgKAotICAgIGFkb3duLmNvbnRhaW5zID8KLSAgICBhZG93bi5j
b250YWlucyggYnVwICkgOgotICAgIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gJiYgYS5jb21w
YXJlRG9jdW1lbnRQb3NpdGlvbiggYnVwICkgJiAxNgotICAgICkpOwotICAgIH0gOgotICAgIGZ1
bmN0aW9uKCBhLCBiICkgewotICAgIGlmICggYiApIHsKLSAgICB3aGlsZSAoIChiID0gYi5wYXJl
bnROb2RlKSApIHsKLSAgICBpZiAoIGIgPT09IGEgKSB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICAgIH07Ci0KLSAgICAvLyBEb2N1
bWVudCBvcmRlciBzb3J0aW5nCi0gICAgc29ydE9yZGVyID0gZG9jRWxlbS5jb21wYXJlRG9jdW1l
bnRQb3NpdGlvbiA/Ci0gICAgZnVuY3Rpb24oIGEsIGIgKSB7Ci0gICAgdmFyIGNvbXBhcmU7Ci0K
LSAgICBpZiAoIGEgPT09IGIgKSB7Ci0gICAgaGFzRHVwbGljYXRlID0gdHJ1ZTsKLSAgICByZXR1
cm4gMDsKLSAgICB9Ci0KLSAgICBpZiAoIChjb21wYXJlID0gYi5jb21wYXJlRG9jdW1lbnRQb3Np
dGlvbiAmJiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICYmIGEuY29tcGFyZURvY3VtZW50UG9z
aXRpb24oIGIgKSkgKSB7Ci0gICAgaWYgKCBjb21wYXJlICYgMSB8fCBhLnBhcmVudE5vZGUgJiYg
YS5wYXJlbnROb2RlLm5vZGVUeXBlID09PSAxMSApIHsKLSAgICBpZiAoIGEgPT09IGRvYyB8fCBj
b250YWlucyggcHJlZmVycmVkRG9jLCBhICkgKSB7Ci0gICAgcmV0dXJuIC0xOwotICAgIH0KLSAg
ICBpZiAoIGIgPT09IGRvYyB8fCBjb250YWlucyggcHJlZmVycmVkRG9jLCBiICkgKSB7Ci0gICAg
cmV0dXJuIDE7Ci0gICAgfQotICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4gY29tcGFy
ZSAmIDQgPyAtMSA6IDE7Ci0gICAgfQotCi0gICAgcmV0dXJuIGEuY29tcGFyZURvY3VtZW50UG9z
aXRpb24gPyAtMSA6IDE7Ci0gICAgfSA6Ci0gICAgZnVuY3Rpb24oIGEsIGIgKSB7Ci0gICAgdmFy
IGN1ciwKLSAgICBpID0gMCwKLSAgICBhdXAgPSBhLnBhcmVudE5vZGUsCi0gICAgYnVwID0gYi5w
YXJlbnROb2RlLAotICAgIGFwID0gWyBhIF0sCi0gICAgYnAgPSBbIGIgXTsKLQotICAgIC8vIEV4
aXQgZWFybHkgaWYgdGhlIG5vZGVzIGFyZSBpZGVudGljYWwKLSAgICBpZiAoIGEgPT09IGIgKSB7
Ci0gICAgaGFzRHVwbGljYXRlID0gdHJ1ZTsKLSAgICByZXR1cm4gMDsKLQotICAgIC8vIFBhcmVu
dGxlc3Mgbm9kZXMgYXJlIGVpdGhlciBkb2N1bWVudHMgb3IgZGlzY29ubmVjdGVkCi0gICAgfSBl
bHNlIGlmICggIWF1cCB8fCAhYnVwICkgewotICAgIHJldHVybiBhID09PSBkb2MgPyAtMSA6Ci0g
ICAgYiA9PT0gZG9jID8gMSA6Ci0gICAgYXVwID8gLTEgOgotICAgIGJ1cCA/IDEgOgotICAgIDA7
Ci0KLSAgICAvLyBJZiB0aGUgbm9kZXMgYXJlIHNpYmxpbmdzLCB3ZSBjYW4gZG8gYSBxdWljayBj
aGVjawotICAgIH0gZWxzZSBpZiAoIGF1cCA9PT0gYnVwICkgewotICAgIHJldHVybiBzaWJsaW5n
Q2hlY2soIGEsIGIgKTsKLSAgICB9Ci0KLSAgICAvLyBPdGhlcndpc2Ugd2UgbmVlZCBmdWxsIGxp
c3RzIG9mIHRoZWlyIGFuY2VzdG9ycyBmb3IgY29tcGFyaXNvbgotICAgIGN1ciA9IGE7Ci0gICAg
d2hpbGUgKCAoY3VyID0gY3VyLnBhcmVudE5vZGUpICkgewotICAgIGFwLnVuc2hpZnQoIGN1ciAp
OwotICAgIH0KLSAgICBjdXIgPSBiOwotICAgIHdoaWxlICggKGN1ciA9IGN1ci5wYXJlbnROb2Rl
KSApIHsKLSAgICBicC51bnNoaWZ0KCBjdXIgKTsKLSAgICB9Ci0KLSAgICAvLyBXYWxrIGRvd24g
dGhlIHRyZWUgbG9va2luZyBmb3IgYSBkaXNjcmVwYW5jeQotICAgIHdoaWxlICggYXBbaV0gPT09
IGJwW2ldICkgewotICAgIGkrKzsKLSAgICB9Ci0KLSAgICByZXR1cm4gaSA/Ci0gICAgLy8gRG8g
YSBzaWJsaW5nIGNoZWNrIGlmIHRoZSBub2RlcyBoYXZlIGEgY29tbW9uIGFuY2VzdG9yCi0gICAg
c2libGluZ0NoZWNrKCBhcFtpXSwgYnBbaV0gKSA6Ci0KLSAgICAvLyBPdGhlcndpc2Ugbm9kZXMg
aW4gb3VyIGRvY3VtZW50IHNvcnQgZmlyc3QKLSAgICBhcFtpXSA9PT0gcHJlZmVycmVkRG9jID8g
LTEgOgotICAgIGJwW2ldID09PSBwcmVmZXJyZWREb2MgPyAxIDoKLSAgICAwOwotICAgIH07Ci0K
LSAgICAvLyBBbHdheXMgYXNzdW1lIHRoZSBwcmVzZW5jZSBvZiBkdXBsaWNhdGVzIGlmIHNvcnQg
ZG9lc24ndAotICAgIC8vIHBhc3MgdGhlbSB0byBvdXIgY29tcGFyaXNvbiBmdW5jdGlvbiAoYXMg
aW4gR29vZ2xlIENocm9tZSkuCi0gICAgaGFzRHVwbGljYXRlID0gZmFsc2U7Ci0gICAgWzAsIDBd
LnNvcnQoIHNvcnRPcmRlciApOwotICAgIHN1cHBvcnQuZGV0ZWN0RHVwbGljYXRlcyA9IGhhc0R1
cGxpY2F0ZTsKLQotICAgIHJldHVybiBkb2N1bWVudDsKLX07Ci0KLVNpenpsZS5tYXRjaGVzID0g
ZnVuY3Rpb24oIGV4cHIsIGVsZW1lbnRzICkgewotICAgIHJldHVybiBTaXp6bGUoIGV4cHIsIG51
bGwsIG51bGwsIGVsZW1lbnRzICk7Ci19OwotCi1TaXp6bGUubWF0Y2hlc1NlbGVjdG9yID0gZnVu
Y3Rpb24oIGVsZW0sIGV4cHIgKSB7Ci0gICAgLy8gU2V0IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVk
Ci0gICAgaWYgKCAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtICkgIT09IGRvY3VtZW50ICkg
ewotICAgIHNldERvY3VtZW50KCBlbGVtICk7Ci0gICAgfQotCi0gICAgLy8gTWFrZSBzdXJlIHRo
YXQgYXR0cmlidXRlIHNlbGVjdG9ycyBhcmUgcXVvdGVkCi0gICAgZXhwciA9IGV4cHIucmVwbGFj
ZSggcmF0dHJpYnV0ZVF1b3RlcywgIj0nJDEnXSIgKTsKLQotICAgIC8vIHJidWdneVFTQSBhbHdh
eXMgY29udGFpbnMgOmZvY3VzLCBzbyBubyBuZWVkIGZvciBhbiBleGlzdGVuY2UgY2hlY2sKLSAg
ICBpZiAoIHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yICYmICFkb2N1bWVudElzWE1MICYmICghcmJ1
Z2d5TWF0Y2hlcyB8fCAhcmJ1Z2d5TWF0Y2hlcy50ZXN0KGV4cHIpKSAmJiAhcmJ1Z2d5UVNBLnRl
c3QoZXhwcikgKSB7Ci0gICAgdHJ5IHsKLSAgICB2YXIgcmV0ID0gbWF0Y2hlcy5jYWxsKCBlbGVt
LCBleHByICk7Ci0KLSAgICAvLyBJRSA5J3MgbWF0Y2hlc1NlbGVjdG9yIHJldHVybnMgZmFsc2Ug
b24gZGlzY29ubmVjdGVkIG5vZGVzCi0gICAgaWYgKCByZXQgfHwgc3VwcG9ydC5kaXNjb25uZWN0
ZWRNYXRjaCB8fAotICAgIC8vIEFzIHdlbGwsIGRpc2Nvbm5lY3RlZCBub2RlcyBhcmUgc2FpZCB0
byBiZSBpbiBhIGRvY3VtZW50Ci0gICAgLy8gZnJhZ21lbnQgaW4gSUUgOQotICAgIGVsZW0uZG9j
dW1lbnQgJiYgZWxlbS5kb2N1bWVudC5ub2RlVHlwZSAhPT0gMTEgKSB7Ci0gICAgcmV0dXJuIHJl
dDsKLSAgICB9Ci0gICAgfSBjYXRjaChlKSB7fQotICAgIH0KLQotICAgIHJldHVybiBTaXp6bGUo
IGV4cHIsIGRvY3VtZW50LCBudWxsLCBbZWxlbV0gKS5sZW5ndGggPiAwOwotfTsKLQotU2l6emxl
LmNvbnRhaW5zID0gZnVuY3Rpb24oIGNvbnRleHQsIGVsZW0gKSB7Ci0gICAgLy8gU2V0IGRvY3Vt
ZW50IHZhcnMgaWYgbmVlZGVkCi0gICAgaWYgKCAoIGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBj
b250ZXh0ICkgIT09IGRvY3VtZW50ICkgewotICAgIHNldERvY3VtZW50KCBjb250ZXh0ICk7Ci0g
ICAgfQotICAgIHJldHVybiBjb250YWlucyggY29udGV4dCwgZWxlbSApOwotfTsKLQotU2l6emxl
LmF0dHIgPSBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsKLSAgICB2YXIgdmFsOwotCi0gICAgLy8g
U2V0IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVkCi0gICAgaWYgKCAoIGVsZW0ub3duZXJEb2N1bWVu
dCB8fCBlbGVtICkgIT09IGRvY3VtZW50ICkgewotICAgIHNldERvY3VtZW50KCBlbGVtICk7Ci0g
ICAgfQotCi0gICAgaWYgKCAhZG9jdW1lbnRJc1hNTCApIHsKLSAgICBuYW1lID0gbmFtZS50b0xv
d2VyQ2FzZSgpOwotICAgIH0KLSAgICBpZiAoICh2YWwgPSBFeHByLmF0dHJIYW5kbGVbIG5hbWUg
XSkgKSB7Ci0gICAgcmV0dXJuIHZhbCggZWxlbSApOwotICAgIH0KLSAgICBpZiAoIGRvY3VtZW50
SXNYTUwgfHwgc3VwcG9ydC5hdHRyaWJ1dGVzICkgewotICAgIHJldHVybiBlbGVtLmdldEF0dHJp
YnV0ZSggbmFtZSApOwotICAgIH0KLSAgICByZXR1cm4gKCAodmFsID0gZWxlbS5nZXRBdHRyaWJ1
dGVOb2RlKCBuYW1lICkpIHx8IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICkgKSAmJiBlbGVtWyBu
YW1lIF0gPT09IHRydWUgPwotICAgIG5hbWUgOgotICAgIHZhbCAmJiB2YWwuc3BlY2lmaWVkID8g
dmFsLnZhbHVlIDogbnVsbDsKLX07Ci0KLVNpenpsZS5lcnJvciA9IGZ1bmN0aW9uKCBtc2cgKSB7
Ci0gICAgdGhyb3cgbmV3IEVycm9yKCAiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVz
c2lvbjogIiArIG1zZyApOwotfTsKLQotLy8gRG9jdW1lbnQgc29ydGluZyBhbmQgcmVtb3Zpbmcg
ZHVwbGljYXRlcwotU2l6emxlLnVuaXF1ZVNvcnQgPSBmdW5jdGlvbiggcmVzdWx0cyApIHsKLSAg
ICB2YXIgZWxlbSwKLSAgICBkdXBsaWNhdGVzID0gW10sCi0gICAgaSA9IDEsCi0gICAgaiA9IDA7
Ci0KLSAgICAvLyBVbmxlc3Mgd2UgKmtub3cqIHdlIGNhbiBkZXRlY3QgZHVwbGljYXRlcywgYXNz
dW1lIHRoZWlyIHByZXNlbmNlCi0gICAgaGFzRHVwbGljYXRlID0gIXN1cHBvcnQuZGV0ZWN0RHVw
bGljYXRlczsKLSAgICByZXN1bHRzLnNvcnQoIHNvcnRPcmRlciApOwotCi0gICAgaWYgKCBoYXNE
dXBsaWNhdGUgKSB7Ci0gICAgZm9yICggOyAoZWxlbSA9IHJlc3VsdHNbaV0pOyBpKysgKSB7Ci0g
ICAgaWYgKCBlbGVtID09PSByZXN1bHRzWyBpIC0gMSBdICkgewotICAgIGogPSBkdXBsaWNhdGVz
LnB1c2goIGkgKTsKLSAgICB9Ci0gICAgfQotICAgIHdoaWxlICggai0tICkgewotICAgIHJlc3Vs
dHMuc3BsaWNlKCBkdXBsaWNhdGVzWyBqIF0sIDEgKTsKLSAgICB9Ci0gICAgfQotCi0gICAgcmV0
dXJuIHJlc3VsdHM7Ci19OwotCi1mdW5jdGlvbiBzaWJsaW5nQ2hlY2soIGEsIGIgKSB7Ci0gICAg
dmFyIGN1ciA9IGIgJiYgYSwKLSAgICBkaWZmID0gY3VyICYmICggfmIuc291cmNlSW5kZXggfHwg
TUFYX05FR0FUSVZFICkgLSAoIH5hLnNvdXJjZUluZGV4IHx8IE1BWF9ORUdBVElWRSApOwotCi0g
ICAgLy8gVXNlIElFIHNvdXJjZUluZGV4IGlmIGF2YWlsYWJsZSBvbiBib3RoIG5vZGVzCi0gICAg
aWYgKCBkaWZmICkgewotICAgIHJldHVybiBkaWZmOwotICAgIH0KLQotICAgIC8vIENoZWNrIGlm
IGIgZm9sbG93cyBhCi0gICAgaWYgKCBjdXIgKSB7Ci0gICAgd2hpbGUgKCAoY3VyID0gY3VyLm5l
eHRTaWJsaW5nKSApIHsKLSAgICBpZiAoIGN1ciA9PT0gYiApIHsKLSAgICByZXR1cm4gLTE7Ci0g
ICAgfQotICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gYSA/IDEgOiAtMTsKLX0KLQotLy8gUmV0
dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBpbnB1dCB0eXBlcwotZnVuY3Rp
b24gY3JlYXRlSW5wdXRQc2V1ZG8oIHR5cGUgKSB7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVt
ICkgewotICAgIHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOwotICAgIHJl
dHVybiBuYW1lID09PSAiaW5wdXQiICYmIGVsZW0udHlwZSA9PT0gdHlwZTsKLSAgICB9OwotfQot
Ci0vLyBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGJ1dHRvbnMKLWZ1
bmN0aW9uIGNyZWF0ZUJ1dHRvblBzZXVkbyggdHlwZSApIHsKLSAgICByZXR1cm4gZnVuY3Rpb24o
IGVsZW0gKSB7Ci0gICAgdmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7Ci0g
ICAgcmV0dXJuIChuYW1lID09PSAiaW5wdXQiIHx8IG5hbWUgPT09ICJidXR0b24iKSAmJiBlbGVt
LnR5cGUgPT09IHR5cGU7Ci0gICAgfTsKLX0KLQotLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVz
ZSBpbiBwc2V1ZG9zIGZvciBwb3NpdGlvbmFscwotZnVuY3Rpb24gY3JlYXRlUG9zaXRpb25hbFBz
ZXVkbyggZm4gKSB7Ci0gICAgcmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggYXJndW1lbnQg
KSB7Ci0gICAgYXJndW1lbnQgPSArYXJndW1lbnQ7Ci0gICAgcmV0dXJuIG1hcmtGdW5jdGlvbihm
dW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHsKLSAgICB2YXIgaiwKLSAgICBtYXRjaEluZGV4ZXMg
PSBmbiggW10sIHNlZWQubGVuZ3RoLCBhcmd1bWVudCApLAotICAgIGkgPSBtYXRjaEluZGV4ZXMu
bGVuZ3RoOwotCi0gICAgLy8gTWF0Y2ggZWxlbWVudHMgZm91bmQgYXQgdGhlIHNwZWNpZmllZCBp
bmRleGVzCi0gICAgd2hpbGUgKCBpLS0gKSB7Ci0gICAgaWYgKCBzZWVkWyAoaiA9IG1hdGNoSW5k
ZXhlc1tpXSkgXSApIHsKLSAgICBzZWVkW2pdID0gIShtYXRjaGVzW2pdID0gc2VlZFtqXSk7Ci0g
ICAgfQotICAgIH0KLSAgICB9KTsKLSAgICB9KTsKLX0KLQotLyoqCi0gKiBVdGlsaXR5IGZ1bmN0
aW9uIGZvciByZXRyaWV2aW5nIHRoZSB0ZXh0IHZhbHVlIG9mIGFuIGFycmF5IG9mIERPTSBub2Rl
cwotICogQHBhcmFtIHtBcnJheXxFbGVtZW50fSBlbGVtCi0gKi8KLWdldFRleHQgPSBTaXp6bGUu
Z2V0VGV4dCA9IGZ1bmN0aW9uKCBlbGVtICkgewotICAgIHZhciBub2RlLAotICAgIHJldCA9ICIi
LAotICAgIGkgPSAwLAotICAgIG5vZGVUeXBlID0gZWxlbS5ub2RlVHlwZTsKLQotICAgIGlmICgg
IW5vZGVUeXBlICkgewotICAgIC8vIElmIG5vIG5vZGVUeXBlLCB0aGlzIGlzIGV4cGVjdGVkIHRv
IGJlIGFuIGFycmF5Ci0gICAgZm9yICggOyAobm9kZSA9IGVsZW1baV0pOyBpKysgKSB7Ci0gICAg
Ly8gRG8gbm90IHRyYXZlcnNlIGNvbW1lbnQgbm9kZXMKLSAgICByZXQgKz0gZ2V0VGV4dCggbm9k
ZSApOwotICAgIH0KLSAgICB9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMSB8fCBub2RlVHlwZSA9
PT0gOSB8fCBub2RlVHlwZSA9PT0gMTEgKSB7Ci0gICAgLy8gVXNlIHRleHRDb250ZW50IGZvciBl
bGVtZW50cwotICAgIC8vIGlubmVyVGV4dCB1c2FnZSByZW1vdmVkIGZvciBjb25zaXN0ZW5jeSBv
ZiBuZXcgbGluZXMgKHNlZSAjMTExNTMpCi0gICAgaWYgKCB0eXBlb2YgZWxlbS50ZXh0Q29udGVu
dCA9PT0gInN0cmluZyIgKSB7Ci0gICAgcmV0dXJuIGVsZW0udGV4dENvbnRlbnQ7Ci0gICAgfSBl
bHNlIHsKLSAgICAvLyBUcmF2ZXJzZSBpdHMgY2hpbGRyZW4KLSAgICBmb3IgKCBlbGVtID0gZWxl
bS5maXJzdENoaWxkOyBlbGVtOyBlbGVtID0gZWxlbS5uZXh0U2libGluZyApIHsKLSAgICByZXQg
Kz0gZ2V0VGV4dCggZWxlbSApOwotICAgIH0KLSAgICB9Ci0gICAgfSBlbHNlIGlmICggbm9kZVR5
cGUgPT09IDMgfHwgbm9kZVR5cGUgPT09IDQgKSB7Ci0gICAgcmV0dXJuIGVsZW0ubm9kZVZhbHVl
OwotICAgIH0KLSAgICAvLyBEbyBub3QgaW5jbHVkZSBjb21tZW50IG9yIHByb2Nlc3NpbmcgaW5z
dHJ1Y3Rpb24gbm9kZXMKLQotICAgIHJldHVybiByZXQ7Ci19OwotCi1FeHByID0gU2l6emxlLnNl
bGVjdG9ycyA9IHsKLQotICAgIC8vIENhbiBiZSBhZGp1c3RlZCBieSB0aGUgdXNlcgotICAgIGNh
Y2hlTGVuZ3RoOiA1MCwKLQotICAgIGNyZWF0ZVBzZXVkbzogbWFya0Z1bmN0aW9uLAotCi0gICAg
bWF0Y2g6IG1hdGNoRXhwciwKLQotICAgIGZpbmQ6IHt9LAotCi0gICAgcmVsYXRpdmU6IHsKLSAg
ICAiPiI6IHsgZGlyOiAicGFyZW50Tm9kZSIsIGZpcnN0OiB0cnVlIH0sCi0gICAgIiAiOiB7IGRp
cjogInBhcmVudE5vZGUiIH0sCi0gICAgIisiOiB7IGRpcjogInByZXZpb3VzU2libGluZyIsIGZp
cnN0OiB0cnVlIH0sCi0gICAgIn4iOiB7IGRpcjogInByZXZpb3VzU2libGluZyIgfQotICAgIH0s
Ci0KLSAgICBwcmVGaWx0ZXI6IHsKLSAgICAiQVRUUiI6IGZ1bmN0aW9uKCBtYXRjaCApIHsKLSAg
ICBtYXRjaFsxXSA9IG1hdGNoWzFdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7Ci0K
LSAgICAvLyBNb3ZlIHRoZSBnaXZlbiB2YWx1ZSB0byBtYXRjaFszXSB3aGV0aGVyIHF1b3RlZCBv
ciB1bnF1b3RlZAotICAgIG1hdGNoWzNdID0gKCBtYXRjaFs0XSB8fCBtYXRjaFs1XSB8fCAiIiAp
LnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7Ci0KLSAgICBpZiAoIG1hdGNoWzJdID09
PSAifj0iICkgewotICAgIG1hdGNoWzNdID0gIiAiICsgbWF0Y2hbM10gKyAiICI7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIG1hdGNoLnNsaWNlKCAwLCA0ICk7Ci0gICAgfSwKLQotICAgICJDSElMRCI6
IGZ1bmN0aW9uKCBtYXRjaCApIHsKLSAgICAvKiBtYXRjaGVzIGZyb20gbWF0Y2hFeHByWyJDSElM
RCJdCi0gICAgMSB0eXBlIChvbmx5fG50aHwuLi4pCi0gICAgMiB3aGF0IChjaGlsZHxvZi10eXBl
KQotICAgIDMgYXJndW1lbnQgKGV2ZW58b2RkfFxkKnxcZCpuKFsrLV1cZCspP3wuLi4pCi0gICAg
NCB4bi1jb21wb25lbnQgb2YgeG4reSBhcmd1bWVudCAoWystXT9cZCpufCkKLSAgICA1IHNpZ24g
b2YgeG4tY29tcG9uZW50Ci0gICAgNiB4IG9mIHhuLWNvbXBvbmVudAotICAgIDcgc2lnbiBvZiB5
LWNvbXBvbmVudAotICAgIDggeSBvZiB5LWNvbXBvbmVudAotICAgICovCi0gICAgbWF0Y2hbMV0g
PSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpOwotCi0gICAgaWYgKCBtYXRjaFsxXS5zbGljZSggMCwg
MyApID09PSAibnRoIiApIHsKLSAgICAvLyBudGgtKiByZXF1aXJlcyBhcmd1bWVudAotICAgIGlm
ICggIW1hdGNoWzNdICkgewotICAgIFNpenpsZS5lcnJvciggbWF0Y2hbMF0gKTsKLSAgICB9Ci0K
LSAgICAvLyBudW1lcmljIHggYW5kIHkgcGFyYW1ldGVycyBmb3IgRXhwci5maWx0ZXIuQ0hJTEQK
LSAgICAvLyByZW1lbWJlciB0aGF0IGZhbHNlL3RydWUgY2FzdCByZXNwZWN0aXZlbHkgdG8gMC8x
Ci0gICAgbWF0Y2hbNF0gPSArKCBtYXRjaFs0XSA/IG1hdGNoWzVdICsgKG1hdGNoWzZdIHx8IDEp
IDogMiAqICggbWF0Y2hbM10gPT09ICJldmVuIiB8fCBtYXRjaFszXSA9PT0gIm9kZCIgKSApOwot
ICAgIG1hdGNoWzVdID0gKyggKCBtYXRjaFs3XSArIG1hdGNoWzhdICkgfHwgbWF0Y2hbM10gPT09
ICJvZGQiICk7Ci0KLSAgICAvLyBvdGhlciB0eXBlcyBwcm9oaWJpdCBhcmd1bWVudHMKLSAgICB9
IGVsc2UgaWYgKCBtYXRjaFszXSApIHsKLSAgICBTaXp6bGUuZXJyb3IoIG1hdGNoWzBdICk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIG1hdGNoOwotICAgIH0sCi0KLSAgICAiUFNFVURPIjogZnVuY3Rp
b24oIG1hdGNoICkgewotICAgIHZhciBleGNlc3MsCi0gICAgdW5xdW90ZWQgPSAhbWF0Y2hbNV0g
JiYgbWF0Y2hbMl07Ci0KLSAgICBpZiAoIG1hdGNoRXhwclsiQ0hJTEQiXS50ZXN0KCBtYXRjaFsw
XSApICkgewotICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIC8vIEFjY2VwdCBxdW90ZWQg
YXJndW1lbnRzIGFzLWlzCi0gICAgaWYgKCBtYXRjaFs0XSApIHsKLSAgICBtYXRjaFsyXSA9IG1h
dGNoWzRdOwotCi0gICAgLy8gU3RyaXAgZXhjZXNzIGNoYXJhY3RlcnMgZnJvbSB1bnF1b3RlZCBh
cmd1bWVudHMKLSAgICB9IGVsc2UgaWYgKCB1bnF1b3RlZCAmJiBycHNldWRvLnRlc3QoIHVucXVv
dGVkICkgJiYKLSAgICAvLyBHZXQgZXhjZXNzIGZyb20gdG9rZW5pemUgKHJlY3Vyc2l2ZWx5KQot
ICAgIChleGNlc3MgPSB0b2tlbml6ZSggdW5xdW90ZWQsIHRydWUgKSkgJiYKLSAgICAvLyBhZHZh
bmNlIHRvIHRoZSBuZXh0IGNsb3NpbmcgcGFyZW50aGVzaXMKLSAgICAoZXhjZXNzID0gdW5xdW90
ZWQuaW5kZXhPZiggIikiLCB1bnF1b3RlZC5sZW5ndGggLSBleGNlc3MgKSAtIHVucXVvdGVkLmxl
bmd0aCkgKSB7Ci0KLSAgICAvLyBleGNlc3MgaXMgYSBuZWdhdGl2ZSBpbmRleAotICAgIG1hdGNo
WzBdID0gbWF0Y2hbMF0uc2xpY2UoIDAsIGV4Y2VzcyApOwotICAgIG1hdGNoWzJdID0gdW5xdW90
ZWQuc2xpY2UoIDAsIGV4Y2VzcyApOwotICAgIH0KLQotICAgIC8vIFJldHVybiBvbmx5IGNhcHR1
cmVzIG5lZWRlZCBieSB0aGUgcHNldWRvIGZpbHRlciBtZXRob2QgKHR5cGUgYW5kIGFyZ3VtZW50
KQotICAgIHJldHVybiBtYXRjaC5zbGljZSggMCwgMyApOwotICAgIH0KLSAgICB9LAotCi0gICAg
ZmlsdGVyOiB7Ci0KLSAgICAiVEFHIjogZnVuY3Rpb24oIG5vZGVOYW1lICkgewotICAgIGlmICgg
bm9kZU5hbWUgPT09ICIqIiApIHsKLSAgICByZXR1cm4gZnVuY3Rpb24oKSB7IHJldHVybiB0cnVl
OyB9OwotICAgIH0KLQotICAgIG5vZGVOYW1lID0gbm9kZU5hbWUucmVwbGFjZSggcnVuZXNjYXBl
LCBmdW5lc2NhcGUgKS50b0xvd2VyQ2FzZSgpOwotICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSAp
IHsKLSAgICByZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNl
KCkgPT09IG5vZGVOYW1lOwotICAgIH07Ci0gICAgfSwKLQotICAgICJDTEFTUyI6IGZ1bmN0aW9u
KCBjbGFzc05hbWUgKSB7Ci0gICAgdmFyIHBhdHRlcm4gPSBjbGFzc0NhY2hlWyBjbGFzc05hbWUg
KyAiICIgXTsKLQotICAgIHJldHVybiBwYXR0ZXJuIHx8Ci0gICAgKHBhdHRlcm4gPSBuZXcgUmVn
RXhwKCAiKF58IiArIHdoaXRlc3BhY2UgKyAiKSIgKyBjbGFzc05hbWUgKyAiKCIgKyB3aGl0ZXNw
YWNlICsgInwkKSIgKSkgJiYKLSAgICBjbGFzc0NhY2hlKCBjbGFzc05hbWUsIGZ1bmN0aW9uKCBl
bGVtICkgewotICAgIHJldHVybiBwYXR0ZXJuLnRlc3QoIGVsZW0uY2xhc3NOYW1lIHx8ICh0eXBl
b2YgZWxlbS5nZXRBdHRyaWJ1dGUgIT09IHN0cnVuZGVmaW5lZCAmJiBlbGVtLmdldEF0dHJpYnV0
ZSgiY2xhc3MiKSkgfHwgIiIgKTsKLSAgICB9KTsKLSAgICB9LAotCi0gICAgIkFUVFIiOiBmdW5j
dGlvbiggbmFtZSwgb3BlcmF0b3IsIGNoZWNrICkgewotICAgIHJldHVybiBmdW5jdGlvbiggZWxl
bSApIHsKLSAgICB2YXIgcmVzdWx0ID0gU2l6emxlLmF0dHIoIGVsZW0sIG5hbWUgKTsKLQotICAg
IGlmICggcmVzdWx0ID09IG51bGwgKSB7Ci0gICAgcmV0dXJuIG9wZXJhdG9yID09PSAiIT0iOwot
ICAgIH0KLSAgICBpZiAoICFvcGVyYXRvciApIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0K
LSAgICByZXN1bHQgKz0gIiI7Ci0KLSAgICByZXR1cm4gb3BlcmF0b3IgPT09ICI9IiA/IHJlc3Vs
dCA9PT0gY2hlY2sgOgotICAgIG9wZXJhdG9yID09PSAiIT0iID8gcmVzdWx0ICE9PSBjaGVjayA6
Ci0gICAgb3BlcmF0b3IgPT09ICJePSIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sg
KSA9PT0gMCA6Ci0gICAgb3BlcmF0b3IgPT09ICIqPSIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhP
ZiggY2hlY2sgKSA+IC0xIDoKLSAgICBvcGVyYXRvciA9PT0gIiQ9IiA/IGNoZWNrICYmIHJlc3Vs
dC5zbGljZSggLWNoZWNrLmxlbmd0aCApID09PSBjaGVjayA6Ci0gICAgb3BlcmF0b3IgPT09ICJ+
PSIgPyAoICIgIiArIHJlc3VsdCArICIgIiApLmluZGV4T2YoIGNoZWNrICkgPiAtMSA6Ci0gICAg
b3BlcmF0b3IgPT09ICJ8PSIgPyByZXN1bHQgPT09IGNoZWNrIHx8IHJlc3VsdC5zbGljZSggMCwg
Y2hlY2subGVuZ3RoICsgMSApID09PSBjaGVjayArICItIiA6Ci0gICAgZmFsc2U7Ci0gICAgfTsK
LSAgICB9LAotCi0gICAgIkNISUxEIjogZnVuY3Rpb24oIHR5cGUsIHdoYXQsIGFyZ3VtZW50LCBm
aXJzdCwgbGFzdCApIHsKLSAgICB2YXIgc2ltcGxlID0gdHlwZS5zbGljZSggMCwgMyApICE9PSAi
bnRoIiwKLSAgICBmb3J3YXJkID0gdHlwZS5zbGljZSggLTQgKSAhPT0gImxhc3QiLAotICAgIG9m
VHlwZSA9IHdoYXQgPT09ICJvZi10eXBlIjsKLQotICAgIHJldHVybiBmaXJzdCA9PT0gMSAmJiBs
YXN0ID09PSAwID8KLQotICAgIC8vIFNob3J0Y3V0IGZvciA6bnRoLSoobikKLSAgICBmdW5jdGlv
biggZWxlbSApIHsKLSAgICByZXR1cm4gISFlbGVtLnBhcmVudE5vZGU7Ci0gICAgfSA6Ci0KLSAg
ICBmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkgewotICAgIHZhciBjYWNoZSwgb3V0ZXJD
YWNoZSwgbm9kZSwgZGlmZiwgbm9kZUluZGV4LCBzdGFydCwKLSAgICBkaXIgPSBzaW1wbGUgIT09
IGZvcndhcmQgPyAibmV4dFNpYmxpbmciIDogInByZXZpb3VzU2libGluZyIsCi0gICAgcGFyZW50
ID0gZWxlbS5wYXJlbnROb2RlLAotICAgIG5hbWUgPSBvZlR5cGUgJiYgZWxlbS5ub2RlTmFtZS50
b0xvd2VyQ2FzZSgpLAotICAgIHVzZUNhY2hlID0gIXhtbCAmJiAhb2ZUeXBlOwotCi0gICAgaWYg
KCBwYXJlbnQgKSB7Ci0KLSAgICAvLyA6KGZpcnN0fGxhc3R8b25seSktKGNoaWxkfG9mLXR5cGUp
Ci0gICAgaWYgKCBzaW1wbGUgKSB7Ci0gICAgd2hpbGUgKCBkaXIgKSB7Ci0gICAgbm9kZSA9IGVs
ZW07Ci0gICAgd2hpbGUgKCAobm9kZSA9IG5vZGVbIGRpciBdKSApIHsKLSAgICBpZiAoIG9mVHlw
ZSA/IG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZSA6IG5vZGUubm9kZVR5cGUg
PT09IDEgKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICB9Ci0gICAgLy8gUmV2ZXJz
ZSBkaXJlY3Rpb24gZm9yIDpvbmx5LSogKGlmIHdlIGhhdmVuJ3QgeWV0IGRvbmUgc28pCi0gICAg
c3RhcnQgPSBkaXIgPSB0eXBlID09PSAib25seSIgJiYgIXN0YXJ0ICYmICJuZXh0U2libGluZyI7
Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHN0YXJ0ID0gWyBmb3J3YXJk
ID8gcGFyZW50LmZpcnN0Q2hpbGQgOiBwYXJlbnQubGFzdENoaWxkIF07Ci0KLSAgICAvLyBub24t
eG1sIDpudGgtY2hpbGQoLi4uKSBzdG9yZXMgY2FjaGUgZGF0YSBvbiBgcGFyZW50YAotICAgIGlm
ICggZm9yd2FyZCAmJiB1c2VDYWNoZSApIHsKLSAgICAvLyBTZWVrIGBlbGVtYCBmcm9tIGEgcHJl
dmlvdXNseS1jYWNoZWQgaW5kZXgKLSAgICBvdXRlckNhY2hlID0gcGFyZW50WyBleHBhbmRvIF0g
fHwgKHBhcmVudFsgZXhwYW5kbyBdID0ge30pOwotICAgIGNhY2hlID0gb3V0ZXJDYWNoZVsgdHlw
ZSBdIHx8IFtdOwotICAgIG5vZGVJbmRleCA9IGNhY2hlWzBdID09PSBkaXJydW5zICYmIGNhY2hl
WzFdOwotICAgIGRpZmYgPSBjYWNoZVswXSA9PT0gZGlycnVucyAmJiBjYWNoZVsyXTsKLSAgICBu
b2RlID0gbm9kZUluZGV4ICYmIHBhcmVudC5jaGlsZE5vZGVzWyBub2RlSW5kZXggXTsKLQotICAg
IHdoaWxlICggKG5vZGUgPSArK25vZGVJbmRleCAmJiBub2RlICYmIG5vZGVbIGRpciBdIHx8Ci0K
LSAgICAvLyBGYWxsYmFjayB0byBzZWVraW5nIGBlbGVtYCBmcm9tIHRoZSBzdGFydAotICAgIChk
aWZmID0gbm9kZUluZGV4ID0gMCkgfHwgc3RhcnQucG9wKCkpICkgewotCi0gICAgLy8gV2hlbiBm
b3VuZCwgY2FjaGUgaW5kZXhlcyBvbiBgcGFyZW50YCBhbmQgYnJlYWsKLSAgICBpZiAoIG5vZGUu
bm9kZVR5cGUgPT09IDEgJiYgKytkaWZmICYmIG5vZGUgPT09IGVsZW0gKSB7Ci0gICAgb3V0ZXJD
YWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBub2RlSW5kZXgsIGRpZmYgXTsKLSAgICBicmVhazsK
LSAgICB9Ci0gICAgfQotCi0gICAgLy8gVXNlIHByZXZpb3VzbHktY2FjaGVkIGVsZW1lbnQgaW5k
ZXggaWYgYXZhaWxhYmxlCi0gICAgfSBlbHNlIGlmICggdXNlQ2FjaGUgJiYgKGNhY2hlID0gKGVs
ZW1bIGV4cGFuZG8gXSB8fCAoZWxlbVsgZXhwYW5kbyBdID0ge30pKVsgdHlwZSBdKSAmJiBjYWNo
ZVswXSA9PT0gZGlycnVucyApIHsKLSAgICBkaWZmID0gY2FjaGVbMV07Ci0KLSAgICAvLyB4bWwg
Om50aC1jaGlsZCguLi4pIG9yIDpudGgtbGFzdC1jaGlsZCguLi4pIG9yIDpudGgoLWxhc3QpPy1v
Zi10eXBlKC4uLikKLSAgICB9IGVsc2UgewotICAgIC8vIFVzZSB0aGUgc2FtZSBsb29wIGFzIGFi
b3ZlIHRvIHNlZWsgYGVsZW1gIGZyb20gdGhlIHN0YXJ0Ci0gICAgd2hpbGUgKCAobm9kZSA9ICsr
bm9kZUluZGV4ICYmIG5vZGUgJiYgbm9kZVsgZGlyIF0gfHwKLSAgICAoZGlmZiA9IG5vZGVJbmRl
eCA9IDApIHx8IHN0YXJ0LnBvcCgpKSApIHsKLQotICAgIGlmICggKCBvZlR5cGUgPyBub2RlLm5v
ZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUgOiBub2RlLm5vZGVUeXBlID09PSAxICkgJiYg
KytkaWZmICkgewotICAgIC8vIENhY2hlIHRoZSBpbmRleCBvZiBlYWNoIGVuY291bnRlcmVkIGVs
ZW1lbnQKLSAgICBpZiAoIHVzZUNhY2hlICkgewotICAgIChub2RlWyBleHBhbmRvIF0gfHwgKG5v
ZGVbIGV4cGFuZG8gXSA9IHt9KSlbIHR5cGUgXSA9IFsgZGlycnVucywgZGlmZiBdOwotICAgIH0K
LQotICAgIGlmICggbm9kZSA9PT0gZWxlbSApIHsKLSAgICBicmVhazsKLSAgICB9Ci0gICAgfQot
ICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJbmNvcnBvcmF0ZSB0aGUgb2Zmc2V0LCB0aGVuIGNoZWNr
IGFnYWluc3QgY3ljbGUgc2l6ZQotICAgIGRpZmYgLT0gbGFzdDsKLSAgICByZXR1cm4gZGlmZiA9
PT0gZmlyc3QgfHwgKCBkaWZmICUgZmlyc3QgPT09IDAgJiYgZGlmZiAvIGZpcnN0ID49IDAgKTsK
LSAgICB9Ci0gICAgfTsKLSAgICB9LAotCi0gICAgIlBTRVVETyI6IGZ1bmN0aW9uKCBwc2V1ZG8s
IGFyZ3VtZW50ICkgewotICAgIC8vIHBzZXVkby1jbGFzcyBuYW1lcyBhcmUgY2FzZS1pbnNlbnNp
dGl2ZQotICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jcHNldWRvLWNsYXNz
ZXMKLSAgICAvLyBQcmlvcml0aXplIGJ5IGNhc2Ugc2Vuc2l0aXZpdHkgaW4gY2FzZSBjdXN0b20g
cHNldWRvcyBhcmUgYWRkZWQgd2l0aCB1cHBlcmNhc2UgbGV0dGVycwotICAgIC8vIFJlbWVtYmVy
IHRoYXQgc2V0RmlsdGVycyBpbmhlcml0cyBmcm9tIHBzZXVkb3MKLSAgICB2YXIgYXJncywKLSAg
ICBmbiA9IEV4cHIucHNldWRvc1sgcHNldWRvIF0gfHwgRXhwci5zZXRGaWx0ZXJzWyBwc2V1ZG8u
dG9Mb3dlckNhc2UoKSBdIHx8Ci0gICAgU2l6emxlLmVycm9yKCAidW5zdXBwb3J0ZWQgcHNldWRv
OiAiICsgcHNldWRvICk7Ci0KLSAgICAvLyBUaGUgdXNlciBtYXkgdXNlIGNyZWF0ZVBzZXVkbyB0
byBpbmRpY2F0ZSB0aGF0Ci0gICAgLy8gYXJndW1lbnRzIGFyZSBuZWVkZWQgdG8gY3JlYXRlIHRo
ZSBmaWx0ZXIgZnVuY3Rpb24KLSAgICAvLyBqdXN0IGFzIFNpenpsZSBkb2VzCi0gICAgaWYgKCBm
blsgZXhwYW5kbyBdICkgewotICAgIHJldHVybiBmbiggYXJndW1lbnQgKTsKLSAgICB9Ci0KLSAg
ICAvLyBCdXQgbWFpbnRhaW4gc3VwcG9ydCBmb3Igb2xkIHNpZ25hdHVyZXMKLSAgICBpZiAoIGZu
Lmxlbmd0aCA+IDEgKSB7Ci0gICAgYXJncyA9IFsgcHNldWRvLCBwc2V1ZG8sICIiLCBhcmd1bWVu
dCBdOwotICAgIHJldHVybiBFeHByLnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkoIHBzZXVkby50
b0xvd2VyQ2FzZSgpICkgPwotICAgIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgbWF0Y2hl
cyApIHsKLSAgICB2YXIgaWR4LAotICAgIG1hdGNoZWQgPSBmbiggc2VlZCwgYXJndW1lbnQgKSwK
LSAgICBpID0gbWF0Y2hlZC5sZW5ndGg7Ci0gICAgd2hpbGUgKCBpLS0gKSB7Ci0gICAgaWR4ID0g
aW5kZXhPZi5jYWxsKCBzZWVkLCBtYXRjaGVkW2ldICk7Ci0gICAgc2VlZFsgaWR4IF0gPSAhKCBt
YXRjaGVzWyBpZHggXSA9IG1hdGNoZWRbaV0gKTsKLSAgICB9Ci0gICAgfSkgOgotICAgIGZ1bmN0
aW9uKCBlbGVtICkgewotICAgIHJldHVybiBmbiggZWxlbSwgMCwgYXJncyApOwotICAgIH07Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGZuOwotICAgIH0KLSAgICB9LAotCi0gICAgcHNldWRvczogewot
ICAgIC8vIFBvdGVudGlhbGx5IGNvbXBsZXggcHNldWRvcwotICAgICJub3QiOiBtYXJrRnVuY3Rp
b24oZnVuY3Rpb24oIHNlbGVjdG9yICkgewotICAgIC8vIFRyaW0gdGhlIHNlbGVjdG9yIHBhc3Nl
ZCB0byBjb21waWxlCi0gICAgLy8gdG8gYXZvaWQgdHJlYXRpbmcgbGVhZGluZyBhbmQgdHJhaWxp
bmcKLSAgICAvLyBzcGFjZXMgYXMgY29tYmluYXRvcnMKLSAgICB2YXIgaW5wdXQgPSBbXSwKLSAg
ICByZXN1bHRzID0gW10sCi0gICAgbWF0Y2hlciA9IGNvbXBpbGUoIHNlbGVjdG9yLnJlcGxhY2Uo
IHJ0cmltLCAiJDEiICkgKTsKLQotICAgIHJldHVybiBtYXRjaGVyWyBleHBhbmRvIF0gPwotICAg
IG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcywgY29udGV4dCwgeG1sICkgewot
ICAgIHZhciBlbGVtLAotICAgIHVubWF0Y2hlZCA9IG1hdGNoZXIoIHNlZWQsIG51bGwsIHhtbCwg
W10gKSwKLSAgICBpID0gc2VlZC5sZW5ndGg7Ci0KLSAgICAvLyBNYXRjaCBlbGVtZW50cyB1bm1h
dGNoZWQgYnkgYG1hdGNoZXJgCi0gICAgd2hpbGUgKCBpLS0gKSB7Ci0gICAgaWYgKCAoZWxlbSA9
IHVubWF0Y2hlZFtpXSkgKSB7Ci0gICAgc2VlZFtpXSA9ICEobWF0Y2hlc1tpXSA9IGVsZW0pOwot
ICAgIH0KLSAgICB9Ci0gICAgfSkgOgotICAgIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwg
KSB7Ci0gICAgaW5wdXRbMF0gPSBlbGVtOwotICAgIG1hdGNoZXIoIGlucHV0LCBudWxsLCB4bWws
IHJlc3VsdHMgKTsKLSAgICByZXR1cm4gIXJlc3VsdHMucG9wKCk7Ci0gICAgfTsKLSAgICB9KSwK
LQotICAgICJoYXMiOiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlbGVjdG9yICkgewotICAgIHJl
dHVybiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICByZXR1cm4gU2l6emxlKCBzZWxlY3RvciwgZWxl
bSApLmxlbmd0aCA+IDA7Ci0gICAgfTsKLSAgICB9KSwKLQotICAgICJjb250YWlucyI6IG1hcmtG
dW5jdGlvbihmdW5jdGlvbiggdGV4dCApIHsKLSAgICByZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7
Ci0gICAgcmV0dXJuICggZWxlbS50ZXh0Q29udGVudCB8fCBlbGVtLmlubmVyVGV4dCB8fCBnZXRU
ZXh0KCBlbGVtICkgKS5pbmRleE9mKCB0ZXh0ICkgPiAtMTsKLSAgICB9OwotICAgIH0pLAotCi0g
ICAgLy8gIldoZXRoZXIgYW4gZWxlbWVudCBpcyByZXByZXNlbnRlZCBieSBhIDpsYW5nKCkgc2Vs
ZWN0b3IKLSAgICAvLyBpcyBiYXNlZCBzb2xlbHkgb24gdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2
YWx1ZQotICAgIC8vIGJlaW5nIGVxdWFsIHRvIHRoZSBpZGVudGlmaWVyIEMsCi0gICAgLy8gb3Ig
YmVnaW5uaW5nIHdpdGggdGhlIGlkZW50aWZpZXIgQyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSAi
LSIuCi0gICAgLy8gVGhlIG1hdGNoaW5nIG9mIEMgYWdhaW5zdCB0aGUgZWxlbWVudCdzIGxhbmd1
YWdlIHZhbHVlIGlzIHBlcmZvcm1lZCBjYXNlLWluc2Vuc2l0aXZlbHkuCi0gICAgLy8gVGhlIGlk
ZW50aWZpZXIgQyBkb2VzIG5vdCBoYXZlIHRvIGJlIGEgdmFsaWQgbGFuZ3VhZ2UgbmFtZS4iCi0g
ICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNsYW5nLXBzZXVkbwotICAgICJs
YW5nIjogbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggbGFuZyApIHsKLSAgICAvLyBsYW5nIHZhbHVl
IG11c3QgYmUgYSB2YWxpZCBpZGVudGlmaWRlcgotICAgIGlmICggIXJpZGVudGlmaWVyLnRlc3Qo
bGFuZyB8fCAiIikgKSB7Ci0gICAgU2l6emxlLmVycm9yKCAidW5zdXBwb3J0ZWQgbGFuZzogIiAr
IGxhbmcgKTsKLSAgICB9Ci0gICAgbGFuZyA9IGxhbmcucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5l
c2NhcGUgKS50b0xvd2VyQ2FzZSgpOwotICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKLSAg
ICB2YXIgZWxlbUxhbmc7Ci0gICAgZG8gewotICAgIGlmICggKGVsZW1MYW5nID0gZG9jdW1lbnRJ
c1hNTCA/Ci0gICAgZWxlbS5nZXRBdHRyaWJ1dGUoInhtbDpsYW5nIikgfHwgZWxlbS5nZXRBdHRy
aWJ1dGUoImxhbmciKSA6Ci0gICAgZWxlbS5sYW5nKSApIHsKLQotICAgIGVsZW1MYW5nID0gZWxl
bUxhbmcudG9Mb3dlckNhc2UoKTsKLSAgICByZXR1cm4gZWxlbUxhbmcgPT09IGxhbmcgfHwgZWxl
bUxhbmcuaW5kZXhPZiggbGFuZyArICItIiApID09PSAwOwotICAgIH0KLSAgICB9IHdoaWxlICgg
KGVsZW0gPSBlbGVtLnBhcmVudE5vZGUpICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKTsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfTsKLSAgICB9KSwKLQotICAgIC8vIE1pc2NlbGxhbmVvdXMKLSAg
ICAidGFyZ2V0IjogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgdmFyIGhhc2ggPSB3aW5kb3cubG9j
YXRpb24gJiYgd2luZG93LmxvY2F0aW9uLmhhc2g7Ci0gICAgcmV0dXJuIGhhc2ggJiYgaGFzaC5z
bGljZSggMSApID09PSBlbGVtLmlkOwotICAgIH0sCi0KLSAgICAicm9vdCI6IGZ1bmN0aW9uKCBl
bGVtICkgewotICAgIHJldHVybiBlbGVtID09PSBkb2NFbGVtOwotICAgIH0sCi0KLSAgICAiZm9j
dXMiOiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICByZXR1cm4gZWxlbSA9PT0gZG9jdW1lbnQuYWN0
aXZlRWxlbWVudCAmJiAoIWRvY3VtZW50Lmhhc0ZvY3VzIHx8IGRvY3VtZW50Lmhhc0ZvY3VzKCkp
ICYmICEhKGVsZW0udHlwZSB8fCBlbGVtLmhyZWYgfHwgfmVsZW0udGFiSW5kZXgpOwotICAgIH0s
Ci0KLSAgICAvLyBCb29sZWFuIHByb3BlcnRpZXMKLSAgICAiZW5hYmxlZCI6IGZ1bmN0aW9uKCBl
bGVtICkgewotICAgIHJldHVybiBlbGVtLmRpc2FibGVkID09PSBmYWxzZTsKLSAgICB9LAotCi0g
ICAgImRpc2FibGVkIjogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgcmV0dXJuIGVsZW0uZGlzYWJs
ZWQgPT09IHRydWU7Ci0gICAgfSwKLQotICAgICJjaGVja2VkIjogZnVuY3Rpb24oIGVsZW0gKSB7
Ci0gICAgLy8gSW4gQ1NTMywgOmNoZWNrZWQgc2hvdWxkIHJldHVybiBib3RoIGNoZWNrZWQgYW5k
IHNlbGVjdGVkIGVsZW1lbnRzCi0gICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9SRUMt
Y3NzMy1zZWxlY3RvcnMtMjAxMTA5MjkvI2NoZWNrZWQKLSAgICB2YXIgbm9kZU5hbWUgPSBlbGVt
Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7Ci0gICAgcmV0dXJuIChub2RlTmFtZSA9PT0gImlucHV0
IiAmJiAhIWVsZW0uY2hlY2tlZCkgfHwgKG5vZGVOYW1lID09PSAib3B0aW9uIiAmJiAhIWVsZW0u
c2VsZWN0ZWQpOwotICAgIH0sCi0KLSAgICAic2VsZWN0ZWQiOiBmdW5jdGlvbiggZWxlbSApIHsK
LSAgICAvLyBBY2Nlc3NpbmcgdGhpcyBwcm9wZXJ0eSBtYWtlcyBzZWxlY3RlZC1ieS1kZWZhdWx0
Ci0gICAgLy8gb3B0aW9ucyBpbiBTYWZhcmkgd29yayBwcm9wZXJseQotICAgIGlmICggZWxlbS5w
YXJlbnROb2RlICkgewotICAgIGVsZW0ucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4OwotICAgIH0K
LQotICAgIHJldHVybiBlbGVtLnNlbGVjdGVkID09PSB0cnVlOwotICAgIH0sCi0KLSAgICAvLyBD
b250ZW50cwotICAgICJlbXB0eSI6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgIC8vIGh0dHA6Ly93
d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jZW1wdHktcHNldWRvCi0gICAgLy8gOmVtcHR5IGlzIG9u
bHkgYWZmZWN0ZWQgYnkgZWxlbWVudCBub2RlcyBhbmQgY29udGVudCBub2RlcyhpbmNsdWRpbmcg
dGV4dCgzKSwgY2RhdGEoNCkpLAotICAgIC8vICAgbm90IGNvbW1lbnQsIHByb2Nlc3NpbmcgaW5z
dHJ1Y3Rpb25zLCBvciBvdGhlcnMKLSAgICAvLyBUaGFua3MgdG8gRGllZ28gUGVyaW5pIGZvciB0
aGUgbm9kZU5hbWUgc2hvcnRjdXQKLSAgICAvLyAgIEdyZWF0ZXIgdGhhbiAiQCIgbWVhbnMgYWxw
aGEgY2hhcmFjdGVycyAoc3BlY2lmaWNhbGx5IG5vdCBzdGFydGluZyB3aXRoICIjIiBvciAiPyIp
Ci0gICAgZm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4
dFNpYmxpbmcgKSB7Ci0gICAgaWYgKCBlbGVtLm5vZGVOYW1lID4gIkAiIHx8IGVsZW0ubm9kZVR5
cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gNCApIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgInBhcmVudCI6IGZ1
bmN0aW9uKCBlbGVtICkgewotICAgIHJldHVybiAhRXhwci5wc2V1ZG9zWyJlbXB0eSJdKCBlbGVt
ICk7Ci0gICAgfSwKLQotICAgIC8vIEVsZW1lbnQvaW5wdXQgdHlwZXMKLSAgICAiaGVhZGVyIjog
ZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgcmV0dXJuIHJoZWFkZXIudGVzdCggZWxlbS5ub2RlTmFt
ZSApOwotICAgIH0sCi0KLSAgICAiaW5wdXQiOiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICByZXR1
cm4gcmlucHV0cy50ZXN0KCBlbGVtLm5vZGVOYW1lICk7Ci0gICAgfSwKLQotICAgICJidXR0b24i
OiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICB2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dl
ckNhc2UoKTsKLSAgICByZXR1cm4gbmFtZSA9PT0gImlucHV0IiAmJiBlbGVtLnR5cGUgPT09ICJi
dXR0b24iIHx8IG5hbWUgPT09ICJidXR0b24iOwotICAgIH0sCi0KLSAgICAidGV4dCI6IGZ1bmN0
aW9uKCBlbGVtICkgewotICAgIHZhciBhdHRyOwotICAgIC8vIElFNiBhbmQgNyB3aWxsIG1hcCBl
bGVtLnR5cGUgdG8gJ3RleHQnIGZvciBuZXcgSFRNTDUgdHlwZXMgKHNlYXJjaCwgZXRjKQotICAg
IC8vIHVzZSBnZXRBdHRyaWJ1dGUgaW5zdGVhZCB0byB0ZXN0IHRoaXMgY2FzZQotICAgIHJldHVy
biBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICJpbnB1dCIgJiYKLSAgICBlbGVtLnR5
cGUgPT09ICJ0ZXh0IiAmJgotICAgICggKGF0dHIgPSBlbGVtLmdldEF0dHJpYnV0ZSgidHlwZSIp
KSA9PSBudWxsIHx8IGF0dHIudG9Mb3dlckNhc2UoKSA9PT0gZWxlbS50eXBlICk7Ci0gICAgfSwK
LQotICAgIC8vIFBvc2l0aW9uLWluLWNvbGxlY3Rpb24KLSAgICAiZmlyc3QiOiBjcmVhdGVQb3Np
dGlvbmFsUHNldWRvKGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBbIDAgXTsKLSAgICB9KSwKLQot
ICAgICJsYXN0IjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVz
LCBsZW5ndGggKSB7Ci0gICAgcmV0dXJuIFsgbGVuZ3RoIC0gMSBdOwotICAgIH0pLAotCi0gICAg
ImVxIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5n
dGgsIGFyZ3VtZW50ICkgewotICAgIHJldHVybiBbIGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsg
bGVuZ3RoIDogYXJndW1lbnQgXTsKLSAgICB9KSwKLQotICAgICJldmVuIjogY3JlYXRlUG9zaXRp
b25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7Ci0gICAgdmFyIGkg
PSAwOwotICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAyICkgewotICAgIG1hdGNoSW5kZXhl
cy5wdXNoKCBpICk7Ci0gICAgfQotICAgIHJldHVybiBtYXRjaEluZGV4ZXM7Ci0gICAgfSksCi0K
LSAgICAib2RkIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVz
LCBsZW5ndGggKSB7Ci0gICAgdmFyIGkgPSAxOwotICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgaSAr
PSAyICkgewotICAgIG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7Ci0gICAgfQotICAgIHJldHVybiBt
YXRjaEluZGV4ZXM7Ci0gICAgfSksCi0KLSAgICAibHQiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRv
KGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7Ci0gICAgdmFyIGkg
PSBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50OwotICAgIGZvciAo
IDsgLS1pID49IDA7ICkgewotICAgIG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7Ci0gICAgfQotICAg
IHJldHVybiBtYXRjaEluZGV4ZXM7Ci0gICAgfSksCi0KLSAgICAiZ3QiOiBjcmVhdGVQb3NpdGlv
bmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7Ci0g
ICAgdmFyIGkgPSBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50Owot
ICAgIGZvciAoIDsgKytpIDwgbGVuZ3RoOyApIHsKLSAgICBtYXRjaEluZGV4ZXMucHVzaCggaSAp
OwotICAgIH0KLSAgICByZXR1cm4gbWF0Y2hJbmRleGVzOwotICAgIH0pCi0gICAgfQotfTsKLQot
Ly8gQWRkIGJ1dHRvbi9pbnB1dCB0eXBlIHBzZXVkb3MKLWZvciAoIGkgaW4geyByYWRpbzogdHJ1
ZSwgY2hlY2tib3g6IHRydWUsIGZpbGU6IHRydWUsIHBhc3N3b3JkOiB0cnVlLCBpbWFnZTogdHJ1
ZSB9ICkgewotICAgIEV4cHIucHNldWRvc1sgaSBdID0gY3JlYXRlSW5wdXRQc2V1ZG8oIGkgKTsK
LX0KLWZvciAoIGkgaW4geyBzdWJtaXQ6IHRydWUsIHJlc2V0OiB0cnVlIH0gKSB7Ci0gICAgRXhw
ci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVCdXR0b25Qc2V1ZG8oIGkgKTsKLX0KLQotZnVuY3Rpb24g
dG9rZW5pemUoIHNlbGVjdG9yLCBwYXJzZU9ubHkgKSB7Ci0gICAgdmFyIG1hdGNoZWQsIG1hdGNo
LCB0b2tlbnMsIHR5cGUsCi0gICAgc29GYXIsIGdyb3VwcywgcHJlRmlsdGVycywKLSAgICBjYWNo
ZWQgPSB0b2tlbkNhY2hlWyBzZWxlY3RvciArICIgIiBdOwotCi0gICAgaWYgKCBjYWNoZWQgKSB7
Ci0gICAgcmV0dXJuIHBhcnNlT25seSA/IDAgOiBjYWNoZWQuc2xpY2UoIDAgKTsKLSAgICB9Ci0K
LSAgICBzb0ZhciA9IHNlbGVjdG9yOwotICAgIGdyb3VwcyA9IFtdOwotICAgIHByZUZpbHRlcnMg
PSBFeHByLnByZUZpbHRlcjsKLQotICAgIHdoaWxlICggc29GYXIgKSB7Ci0KLSAgICAvLyBDb21t
YSBhbmQgZmlyc3QgcnVuCi0gICAgaWYgKCAhbWF0Y2hlZCB8fCAobWF0Y2ggPSByY29tbWEuZXhl
Yyggc29GYXIgKSkgKSB7Ci0gICAgaWYgKCBtYXRjaCApIHsKLSAgICAvLyBEb24ndCBjb25zdW1l
IHRyYWlsaW5nIGNvbW1hcyBhcyB2YWxpZAotICAgIHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNo
WzBdLmxlbmd0aCApIHx8IHNvRmFyOwotICAgIH0KLSAgICBncm91cHMucHVzaCggdG9rZW5zID0g
W10gKTsKLSAgICB9Ci0KLSAgICBtYXRjaGVkID0gZmFsc2U7Ci0KLSAgICAvLyBDb21iaW5hdG9y
cwotICAgIGlmICggKG1hdGNoID0gcmNvbWJpbmF0b3JzLmV4ZWMoIHNvRmFyICkpICkgewotICAg
IG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpOwotICAgIHRva2Vucy5wdXNoKCB7Ci0gICAgdmFsdWU6
IG1hdGNoZWQsCi0gICAgLy8gQ2FzdCBkZXNjZW5kYW50IGNvbWJpbmF0b3JzIHRvIHNwYWNlCi0g
ICAgdHlwZTogbWF0Y2hbMF0ucmVwbGFjZSggcnRyaW0sICIgIiApCi0gICAgfSApOwotICAgIHNv
RmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7Ci0gICAgfQotCi0gICAgLy8gRmls
dGVycwotICAgIGZvciAoIHR5cGUgaW4gRXhwci5maWx0ZXIgKSB7Ci0gICAgaWYgKCAobWF0Y2gg
PSBtYXRjaEV4cHJbIHR5cGUgXS5leGVjKCBzb0ZhciApKSAmJiAoIXByZUZpbHRlcnNbIHR5cGUg
XSB8fAotICAgIChtYXRjaCA9IHByZUZpbHRlcnNbIHR5cGUgXSggbWF0Y2ggKSkpICkgewotICAg
IG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpOwotICAgIHRva2Vucy5wdXNoKCB7Ci0gICAgdmFsdWU6
IG1hdGNoZWQsCi0gICAgdHlwZTogdHlwZSwKLSAgICBtYXRjaGVzOiBtYXRjaAotICAgIH0gKTsK
LSAgICBzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaGVkLmxlbmd0aCApOwotICAgIH0KLSAgICB9
Ci0KLSAgICBpZiAoICFtYXRjaGVkICkgewotICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci0KLSAg
ICAvLyBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgaW52YWxpZCBleGNlc3MKLSAgICAvLyBpZiB3
ZSdyZSBqdXN0IHBhcnNpbmcKLSAgICAvLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yIG9yIHJl
dHVybiB0b2tlbnMKLSAgICByZXR1cm4gcGFyc2VPbmx5ID8KLSAgICBzb0Zhci5sZW5ndGggOgot
ICAgIHNvRmFyID8KLSAgICBTaXp6bGUuZXJyb3IoIHNlbGVjdG9yICkgOgotICAgIC8vIENhY2hl
IHRoZSB0b2tlbnMKLSAgICB0b2tlbkNhY2hlKCBzZWxlY3RvciwgZ3JvdXBzICkuc2xpY2UoIDAg
KTsKLX0KLQotZnVuY3Rpb24gdG9TZWxlY3RvciggdG9rZW5zICkgewotICAgIHZhciBpID0gMCwK
LSAgICBsZW4gPSB0b2tlbnMubGVuZ3RoLAotICAgIHNlbGVjdG9yID0gIiI7Ci0gICAgZm9yICgg
OyBpIDwgbGVuOyBpKysgKSB7Ci0gICAgc2VsZWN0b3IgKz0gdG9rZW5zW2ldLnZhbHVlOwotICAg
IH0KLSAgICByZXR1cm4gc2VsZWN0b3I7Ci19Ci0KLWZ1bmN0aW9uIGFkZENvbWJpbmF0b3IoIG1h
dGNoZXIsIGNvbWJpbmF0b3IsIGJhc2UgKSB7Ci0gICAgdmFyIGRpciA9IGNvbWJpbmF0b3IuZGly
LAotICAgIGNoZWNrTm9uRWxlbWVudHMgPSBiYXNlICYmIGRpciA9PT0gInBhcmVudE5vZGUiLAot
ICAgIGRvbmVOYW1lID0gZG9uZSsrOwotCi0gICAgcmV0dXJuIGNvbWJpbmF0b3IuZmlyc3QgPwot
ICAgIC8vIENoZWNrIGFnYWluc3QgY2xvc2VzdCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudAot
ICAgIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7Ci0gICAgd2hpbGUgKCAoZWxlbSA9
IGVsZW1bIGRpciBdKSApIHsKLSAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tO
b25FbGVtZW50cyApIHsKLSAgICByZXR1cm4gbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICk7
Ci0gICAgfQotICAgIH0KLSAgICB9IDoKLQotICAgIC8vIENoZWNrIGFnYWluc3QgYWxsIGFuY2Vz
dG9yL3ByZWNlZGluZyBlbGVtZW50cwotICAgIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwg
KSB7Ci0gICAgdmFyIGRhdGEsIGNhY2hlLCBvdXRlckNhY2hlLAotICAgIGRpcmtleSA9IGRpcnJ1
bnMgKyAiICIgKyBkb25lTmFtZTsKLQotICAgIC8vIFdlIGNhbid0IHNldCBhcmJpdHJhcnkgZGF0
YSBvbiBYTUwgbm9kZXMsIHNvIHRoZXkgZG9uJ3QgYmVuZWZpdCBmcm9tIGRpciBjYWNoaW5nCi0g
ICAgaWYgKCB4bWwgKSB7Ci0gICAgd2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRpciBdKSApIHsKLSAg
ICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHsKLSAgICBp
ZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkgewotICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLSAgICB9Ci0gICAgfQotICAgIH0gZWxzZSB7Ci0gICAgd2hpbGUgKCAoZWxlbSA9IGVs
ZW1bIGRpciBdKSApIHsKLSAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25F
bGVtZW50cyApIHsKLSAgICBvdXRlckNhY2hlID0gZWxlbVsgZXhwYW5kbyBdIHx8IChlbGVtWyBl
eHBhbmRvIF0gPSB7fSk7Ci0gICAgaWYgKCAoY2FjaGUgPSBvdXRlckNhY2hlWyBkaXIgXSkgJiYg
Y2FjaGVbMF0gPT09IGRpcmtleSApIHsKLSAgICBpZiAoIChkYXRhID0gY2FjaGVbMV0pID09PSB0
cnVlIHx8IGRhdGEgPT09IGNhY2hlZHJ1bnMgKSB7Ci0gICAgcmV0dXJuIGRhdGEgPT09IHRydWU7
Ci0gICAgfQotICAgIH0gZWxzZSB7Ci0gICAgY2FjaGUgPSBvdXRlckNhY2hlWyBkaXIgXSA9IFsg
ZGlya2V5IF07Ci0gICAgY2FjaGVbMV0gPSBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB8
fCBjYWNoZWRydW5zOwotICAgIGlmICggY2FjaGVbMV0gPT09IHRydWUgKSB7Ci0gICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotICAgIH0KLSAgICB9Ci0gICAgfQotICAgIH0KLSAgICB9OwotfQotCi1m
dW5jdGlvbiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSB7Ci0gICAgcmV0dXJuIG1hdGNoZXJz
Lmxlbmd0aCA+IDEgPwotICAgIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7Ci0gICAg
dmFyIGkgPSBtYXRjaGVycy5sZW5ndGg7Ci0gICAgd2hpbGUgKCBpLS0gKSB7Ci0gICAgaWYgKCAh
bWF0Y2hlcnNbaV0oIGVsZW0sIGNvbnRleHQsIHhtbCApICkgewotICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICAgIH0gOgotICAgIG1hdGNoZXJzWzBd
OwotfQotCi1mdW5jdGlvbiBjb25kZW5zZSggdW5tYXRjaGVkLCBtYXAsIGZpbHRlciwgY29udGV4
dCwgeG1sICkgewotICAgIHZhciBlbGVtLAotICAgIG5ld1VubWF0Y2hlZCA9IFtdLAotICAgIGkg
PSAwLAotICAgIGxlbiA9IHVubWF0Y2hlZC5sZW5ndGgsCi0gICAgbWFwcGVkID0gbWFwICE9IG51
bGw7Ci0KLSAgICBmb3IgKCA7IGkgPCBsZW47IGkrKyApIHsKLSAgICBpZiAoIChlbGVtID0gdW5t
YXRjaGVkW2ldKSApIHsKLSAgICBpZiAoICFmaWx0ZXIgfHwgZmlsdGVyKCBlbGVtLCBjb250ZXh0
LCB4bWwgKSApIHsKLSAgICBuZXdVbm1hdGNoZWQucHVzaCggZWxlbSApOwotICAgIGlmICggbWFw
cGVkICkgewotICAgIG1hcC5wdXNoKCBpICk7Ci0gICAgfQotICAgIH0KLSAgICB9Ci0gICAgfQot
Ci0gICAgcmV0dXJuIG5ld1VubWF0Y2hlZDsKLX0KLQotZnVuY3Rpb24gc2V0TWF0Y2hlciggcHJl
RmlsdGVyLCBzZWxlY3RvciwgbWF0Y2hlciwgcG9zdEZpbHRlciwgcG9zdEZpbmRlciwgcG9zdFNl
bGVjdG9yICkgewotICAgIGlmICggcG9zdEZpbHRlciAmJiAhcG9zdEZpbHRlclsgZXhwYW5kbyBd
ICkgewotICAgIHBvc3RGaWx0ZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmlsdGVyICk7Ci0gICAgfQot
ICAgIGlmICggcG9zdEZpbmRlciAmJiAhcG9zdEZpbmRlclsgZXhwYW5kbyBdICkgewotICAgIHBv
c3RGaW5kZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKTsKLSAgICB9
Ci0gICAgcmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgcmVzdWx0cywgY29udGV4
dCwgeG1sICkgewotICAgIHZhciB0ZW1wLCBpLCBlbGVtLAotICAgIHByZU1hcCA9IFtdLAotICAg
IHBvc3RNYXAgPSBbXSwKLSAgICBwcmVleGlzdGluZyA9IHJlc3VsdHMubGVuZ3RoLAotCi0gICAg
Ly8gR2V0IGluaXRpYWwgZWxlbWVudHMgZnJvbSBzZWVkIG9yIGNvbnRleHQKLSAgICBlbGVtcyA9
IHNlZWQgfHwgbXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3IgfHwgIioiLCBjb250ZXh0Lm5vZGVU
eXBlID8gWyBjb250ZXh0IF0gOiBjb250ZXh0LCBbXSApLAotCi0gICAgLy8gUHJlZmlsdGVyIHRv
IGdldCBtYXRjaGVyIGlucHV0LCBwcmVzZXJ2aW5nIGEgbWFwIGZvciBzZWVkLXJlc3VsdHMgc3lu
Y2hyb25pemF0aW9uCi0gICAgbWF0Y2hlckluID0gcHJlRmlsdGVyICYmICggc2VlZCB8fCAhc2Vs
ZWN0b3IgKSA/Ci0gICAgY29uZGVuc2UoIGVsZW1zLCBwcmVNYXAsIHByZUZpbHRlciwgY29udGV4
dCwgeG1sICkgOgotICAgIGVsZW1zLAotCi0gICAgbWF0Y2hlck91dCA9IG1hdGNoZXIgPwotICAg
IC8vIElmIHdlIGhhdmUgYSBwb3N0RmluZGVyLCBvciBmaWx0ZXJlZCBzZWVkLCBvciBub24tc2Vl
ZCBwb3N0RmlsdGVyIG9yIHByZWV4aXN0aW5nIHJlc3VsdHMsCi0gICAgcG9zdEZpbmRlciB8fCAo
IHNlZWQgPyBwcmVGaWx0ZXIgOiBwcmVleGlzdGluZyB8fCBwb3N0RmlsdGVyICkgPwotCi0gICAg
Ly8gLi4uaW50ZXJtZWRpYXRlIHByb2Nlc3NpbmcgaXMgbmVjZXNzYXJ5Ci0gICAgW10gOgotCi0g
ICAgLy8gLi4ub3RoZXJ3aXNlIHVzZSByZXN1bHRzIGRpcmVjdGx5Ci0gICAgcmVzdWx0cyA6Ci0g
ICAgbWF0Y2hlckluOwotCi0gICAgLy8gRmluZCBwcmltYXJ5IG1hdGNoZXMKLSAgICBpZiAoIG1h
dGNoZXIgKSB7Ci0gICAgbWF0Y2hlciggbWF0Y2hlckluLCBtYXRjaGVyT3V0LCBjb250ZXh0LCB4
bWwgKTsKLSAgICB9Ci0KLSAgICAvLyBBcHBseSBwb3N0RmlsdGVyCi0gICAgaWYgKCBwb3N0Rmls
dGVyICkgewotICAgIHRlbXAgPSBjb25kZW5zZSggbWF0Y2hlck91dCwgcG9zdE1hcCApOwotICAg
IHBvc3RGaWx0ZXIoIHRlbXAsIFtdLCBjb250ZXh0LCB4bWwgKTsKLQotICAgIC8vIFVuLW1hdGNo
IGZhaWxpbmcgZWxlbWVudHMgYnkgbW92aW5nIHRoZW0gYmFjayB0byBtYXRjaGVySW4KLSAgICBp
ID0gdGVtcC5sZW5ndGg7Ci0gICAgd2hpbGUgKCBpLS0gKSB7Ci0gICAgaWYgKCAoZWxlbSA9IHRl
bXBbaV0pICkgewotICAgIG1hdGNoZXJPdXRbIHBvc3RNYXBbaV0gXSA9ICEobWF0Y2hlckluWyBw
b3N0TWFwW2ldIF0gPSBlbGVtKTsKLSAgICB9Ci0gICAgfQotICAgIH0KLQotICAgIGlmICggc2Vl
ZCApIHsKLSAgICBpZiAoIHBvc3RGaW5kZXIgfHwgcHJlRmlsdGVyICkgewotICAgIGlmICggcG9z
dEZpbmRlciApIHsKLSAgICAvLyBHZXQgdGhlIGZpbmFsIG1hdGNoZXJPdXQgYnkgY29uZGVuc2lu
ZyB0aGlzIGludGVybWVkaWF0ZSBpbnRvIHBvc3RGaW5kZXIgY29udGV4dHMKLSAgICB0ZW1wID0g
W107Ci0gICAgaSA9IG1hdGNoZXJPdXQubGVuZ3RoOwotICAgIHdoaWxlICggaS0tICkgewotICAg
IGlmICggKGVsZW0gPSBtYXRjaGVyT3V0W2ldKSApIHsKLSAgICAvLyBSZXN0b3JlIG1hdGNoZXJJ
biBzaW5jZSBlbGVtIGlzIG5vdCB5ZXQgYSBmaW5hbCBtYXRjaAotICAgIHRlbXAucHVzaCggKG1h
dGNoZXJJbltpXSA9IGVsZW0pICk7Ci0gICAgfQotICAgIH0KLSAgICBwb3N0RmluZGVyKCBudWxs
LCAobWF0Y2hlck91dCA9IFtdKSwgdGVtcCwgeG1sICk7Ci0gICAgfQotCi0gICAgLy8gTW92ZSBt
YXRjaGVkIGVsZW1lbnRzIGZyb20gc2VlZCB0byByZXN1bHRzIHRvIGtlZXAgdGhlbSBzeW5jaHJv
bml6ZWQKLSAgICBpID0gbWF0Y2hlck91dC5sZW5ndGg7Ci0gICAgd2hpbGUgKCBpLS0gKSB7Ci0g
ICAgaWYgKCAoZWxlbSA9IG1hdGNoZXJPdXRbaV0pICYmCi0gICAgKHRlbXAgPSBwb3N0RmluZGVy
ID8gaW5kZXhPZi5jYWxsKCBzZWVkLCBlbGVtICkgOiBwcmVNYXBbaV0pID4gLTEgKSB7Ci0KLSAg
ICBzZWVkW3RlbXBdID0gIShyZXN1bHRzW3RlbXBdID0gZWxlbSk7Ci0gICAgfQotICAgIH0KLSAg
ICB9Ci0KLSAgICAvLyBBZGQgZWxlbWVudHMgdG8gcmVzdWx0cywgdGhyb3VnaCBwb3N0RmluZGVy
IGlmIGRlZmluZWQKLSAgICB9IGVsc2UgewotICAgIG1hdGNoZXJPdXQgPSBjb25kZW5zZSgKLSAg
ICBtYXRjaGVyT3V0ID09PSByZXN1bHRzID8KLSAgICBtYXRjaGVyT3V0LnNwbGljZSggcHJlZXhp
c3RpbmcsIG1hdGNoZXJPdXQubGVuZ3RoICkgOgotICAgIG1hdGNoZXJPdXQKLSAgICApOwotICAg
IGlmICggcG9zdEZpbmRlciApIHsKLSAgICBwb3N0RmluZGVyKCBudWxsLCByZXN1bHRzLCBtYXRj
aGVyT3V0LCB4bWwgKTsKLSAgICB9IGVsc2UgewotICAgIHB1c2guYXBwbHkoIHJlc3VsdHMsIG1h
dGNoZXJPdXQgKTsKLSAgICB9Ci0gICAgfQotICAgIH0pOwotfQotCi1mdW5jdGlvbiBtYXRjaGVy
RnJvbVRva2VucyggdG9rZW5zICkgewotICAgIHZhciBjaGVja0NvbnRleHQsIG1hdGNoZXIsIGos
Ci0gICAgbGVuID0gdG9rZW5zLmxlbmd0aCwKLSAgICBsZWFkaW5nUmVsYXRpdmUgPSBFeHByLnJl
bGF0aXZlWyB0b2tlbnNbMF0udHlwZSBdLAotICAgIGltcGxpY2l0UmVsYXRpdmUgPSBsZWFkaW5n
UmVsYXRpdmUgfHwgRXhwci5yZWxhdGl2ZVsiICJdLAotICAgIGkgPSBsZWFkaW5nUmVsYXRpdmUg
PyAxIDogMCwKLQotICAgIC8vIFRoZSBmb3VuZGF0aW9uYWwgbWF0Y2hlciBlbnN1cmVzIHRoYXQg
ZWxlbWVudHMgYXJlIHJlYWNoYWJsZSBmcm9tIHRvcC1sZXZlbCBjb250ZXh0KHMpCi0gICAgbWF0
Y2hDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgcmV0dXJu
IGVsZW0gPT09IGNoZWNrQ29udGV4dDsKLSAgICB9LCBpbXBsaWNpdFJlbGF0aXZlLCB0cnVlICks
Ci0gICAgbWF0Y2hBbnlDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7
Ci0gICAgcmV0dXJuIGluZGV4T2YuY2FsbCggY2hlY2tDb250ZXh0LCBlbGVtICkgPiAtMTsKLSAg
ICB9LCBpbXBsaWNpdFJlbGF0aXZlLCB0cnVlICksCi0gICAgbWF0Y2hlcnMgPSBbIGZ1bmN0aW9u
KCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7Ci0gICAgcmV0dXJuICggIWxlYWRpbmdSZWxhdGl2ZSAm
JiAoIHhtbCB8fCBjb250ZXh0ICE9PSBvdXRlcm1vc3RDb250ZXh0ICkgKSB8fCAoCi0gICAgKGNo
ZWNrQ29udGV4dCA9IGNvbnRleHQpLm5vZGVUeXBlID8KLSAgICBtYXRjaENvbnRleHQoIGVsZW0s
IGNvbnRleHQsIHhtbCApIDoKLSAgICBtYXRjaEFueUNvbnRleHQoIGVsZW0sIGNvbnRleHQsIHht
bCApICk7Ci0gICAgfSBdOwotCi0gICAgZm9yICggOyBpIDwgbGVuOyBpKysgKSB7Ci0gICAgaWYg
KCAobWF0Y2hlciA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1tpXS50eXBlIF0pICkgewotICAgIG1h
dGNoZXJzID0gWyBhZGRDb21iaW5hdG9yKGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLCBtYXRj
aGVyKSBdOwotICAgIH0gZWxzZSB7Ci0gICAgbWF0Y2hlciA9IEV4cHIuZmlsdGVyWyB0b2tlbnNb
aV0udHlwZSBdLmFwcGx5KCBudWxsLCB0b2tlbnNbaV0ubWF0Y2hlcyApOwotCi0gICAgLy8gUmV0
dXJuIHNwZWNpYWwgdXBvbiBzZWVpbmcgYSBwb3NpdGlvbmFsIG1hdGNoZXIKLSAgICBpZiAoIG1h
dGNoZXJbIGV4cGFuZG8gXSApIHsKLSAgICAvLyBGaW5kIHRoZSBuZXh0IHJlbGF0aXZlIG9wZXJh
dG9yIChpZiBhbnkpIGZvciBwcm9wZXIgaGFuZGxpbmcKLSAgICBqID0gKytpOwotICAgIGZvciAo
IDsgaiA8IGxlbjsgaisrICkgewotICAgIGlmICggRXhwci5yZWxhdGl2ZVsgdG9rZW5zW2pdLnR5
cGUgXSApIHsKLSAgICBicmVhazsKLSAgICB9Ci0gICAgfQotICAgIHJldHVybiBzZXRNYXRjaGVy
KAotICAgIGkgPiAxICYmIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLAotICAgIGkgPiAxICYm
IHRvU2VsZWN0b3IoIHRva2Vucy5zbGljZSggMCwgaSAtIDEgKSApLnJlcGxhY2UoIHJ0cmltLCAi
JDEiICksCi0gICAgbWF0Y2hlciwKLSAgICBpIDwgaiAmJiBtYXRjaGVyRnJvbVRva2VucyggdG9r
ZW5zLnNsaWNlKCBpLCBqICkgKSwKLSAgICBqIDwgbGVuICYmIG1hdGNoZXJGcm9tVG9rZW5zKCAo
dG9rZW5zID0gdG9rZW5zLnNsaWNlKCBqICkpICksCi0gICAgaiA8IGxlbiAmJiB0b1NlbGVjdG9y
KCB0b2tlbnMgKQotICAgICk7Ci0gICAgfQotICAgIG1hdGNoZXJzLnB1c2goIG1hdGNoZXIgKTsK
LSAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApOwot
fQotCi1mdW5jdGlvbiBtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMoIGVsZW1lbnRNYXRjaGVycywg
c2V0TWF0Y2hlcnMgKSB7Ci0gICAgLy8gQSBjb3VudGVyIHRvIHNwZWNpZnkgd2hpY2ggZWxlbWVu
dCBpcyBjdXJyZW50bHkgYmVpbmcgbWF0Y2hlZAotICAgIHZhciBtYXRjaGVyQ2FjaGVkUnVucyA9
IDAsCi0gICAgYnlTZXQgPSBzZXRNYXRjaGVycy5sZW5ndGggPiAwLAotICAgIGJ5RWxlbWVudCA9
IGVsZW1lbnRNYXRjaGVycy5sZW5ndGggPiAwLAotICAgIHN1cGVyTWF0Y2hlciA9IGZ1bmN0aW9u
KCBzZWVkLCBjb250ZXh0LCB4bWwsIHJlc3VsdHMsIGV4cGFuZENvbnRleHQgKSB7Ci0gICAgdmFy
IGVsZW0sIGosIG1hdGNoZXIsCi0gICAgc2V0TWF0Y2hlZCA9IFtdLAotICAgIG1hdGNoZWRDb3Vu
dCA9IDAsCi0gICAgaSA9ICIwIiwKLSAgICB1bm1hdGNoZWQgPSBzZWVkICYmIFtdLAotICAgIG91
dGVybW9zdCA9IGV4cGFuZENvbnRleHQgIT0gbnVsbCwKLSAgICBjb250ZXh0QmFja3VwID0gb3V0
ZXJtb3N0Q29udGV4dCwKLSAgICAvLyBXZSBtdXN0IGFsd2F5cyBoYXZlIGVpdGhlciBzZWVkIGVs
ZW1lbnRzIG9yIGNvbnRleHQKLSAgICBlbGVtcyA9IHNlZWQgfHwgYnlFbGVtZW50ICYmIEV4cHIu
ZmluZFsiVEFHIl0oICIqIiwgZXhwYW5kQ29udGV4dCAmJiBjb250ZXh0LnBhcmVudE5vZGUgfHwg
Y29udGV4dCApLAotICAgIC8vIFVzZSBpbnRlZ2VyIGRpcnJ1bnMgaWZmIHRoaXMgaXMgdGhlIG91
dGVybW9zdCBtYXRjaGVyCi0gICAgZGlycnVuc1VuaXF1ZSA9IChkaXJydW5zICs9IGNvbnRleHRC
YWNrdXAgPT0gbnVsbCA/IDEgOiBNYXRoLnJhbmRvbSgpIHx8IDAuMSk7Ci0KLSAgICBpZiAoIG91
dGVybW9zdCApIHsKLSAgICBvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dCAhPT0gZG9jdW1lbnQg
JiYgY29udGV4dDsKLSAgICBjYWNoZWRydW5zID0gbWF0Y2hlckNhY2hlZFJ1bnM7Ci0gICAgfQot
Ci0gICAgLy8gQWRkIGVsZW1lbnRzIHBhc3NpbmcgZWxlbWVudE1hdGNoZXJzIGRpcmVjdGx5IHRv
IHJlc3VsdHMKLSAgICAvLyBLZWVwIGBpYCBhIHN0cmluZyBpZiB0aGVyZSBhcmUgbm8gZWxlbWVu
dHMgc28gYG1hdGNoZWRDb3VudGAgd2lsbCBiZSAiMDAiIGJlbG93Ci0gICAgZm9yICggOyAoZWxl
bSA9IGVsZW1zW2ldKSAhPSBudWxsOyBpKysgKSB7Ci0gICAgaWYgKCBieUVsZW1lbnQgJiYgZWxl
bSApIHsKLSAgICBqID0gMDsKLSAgICB3aGlsZSAoIChtYXRjaGVyID0gZWxlbWVudE1hdGNoZXJz
W2orK10pICkgewotICAgIGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7Ci0g
ICAgcmVzdWx0cy5wdXNoKCBlbGVtICk7Ci0gICAgYnJlYWs7Ci0gICAgfQotICAgIH0KLSAgICBp
ZiAoIG91dGVybW9zdCApIHsKLSAgICBkaXJydW5zID0gZGlycnVuc1VuaXF1ZTsKLSAgICBjYWNo
ZWRydW5zID0gKyttYXRjaGVyQ2FjaGVkUnVuczsKLSAgICB9Ci0gICAgfQotCi0gICAgLy8gVHJh
Y2sgdW5tYXRjaGVkIGVsZW1lbnRzIGZvciBzZXQgZmlsdGVycwotICAgIGlmICggYnlTZXQgKSB7
Ci0gICAgLy8gVGhleSB3aWxsIGhhdmUgZ29uZSB0aHJvdWdoIGFsbCBwb3NzaWJsZSBtYXRjaGVy
cwotICAgIGlmICggKGVsZW0gPSAhbWF0Y2hlciAmJiBlbGVtKSApIHsKLSAgICBtYXRjaGVkQ291
bnQtLTsKLSAgICB9Ci0KLSAgICAvLyBMZW5ndGhlbiB0aGUgYXJyYXkgZm9yIGV2ZXJ5IGVsZW1l
bnQsIG1hdGNoZWQgb3Igbm90Ci0gICAgaWYgKCBzZWVkICkgewotICAgIHVubWF0Y2hlZC5wdXNo
KCBlbGVtICk7Ci0gICAgfQotICAgIH0KLSAgICB9Ci0KLSAgICAvLyBBcHBseSBzZXQgZmlsdGVy
cyB0byB1bm1hdGNoZWQgZWxlbWVudHMKLSAgICBtYXRjaGVkQ291bnQgKz0gaTsKLSAgICBpZiAo
IGJ5U2V0ICYmIGkgIT09IG1hdGNoZWRDb3VudCApIHsKLSAgICBqID0gMDsKLSAgICB3aGlsZSAo
IChtYXRjaGVyID0gc2V0TWF0Y2hlcnNbaisrXSkgKSB7Ci0gICAgbWF0Y2hlciggdW5tYXRjaGVk
LCBzZXRNYXRjaGVkLCBjb250ZXh0LCB4bWwgKTsKLSAgICB9Ci0KLSAgICBpZiAoIHNlZWQgKSB7
Ci0gICAgLy8gUmVpbnRlZ3JhdGUgZWxlbWVudCBtYXRjaGVzIHRvIGVsaW1pbmF0ZSB0aGUgbmVl
ZCBmb3Igc29ydGluZwotICAgIGlmICggbWF0Y2hlZENvdW50ID4gMCApIHsKLSAgICB3aGlsZSAo
IGktLSApIHsKLSAgICBpZiAoICEodW5tYXRjaGVkW2ldIHx8IHNldE1hdGNoZWRbaV0pICkgewot
ICAgIHNldE1hdGNoZWRbaV0gPSBwb3AuY2FsbCggcmVzdWx0cyApOwotICAgIH0KLSAgICB9Ci0g
ICAgfQotCi0gICAgLy8gRGlzY2FyZCBpbmRleCBwbGFjZWhvbGRlciB2YWx1ZXMgdG8gZ2V0IG9u
bHkgYWN0dWFsIG1hdGNoZXMKLSAgICBzZXRNYXRjaGVkID0gY29uZGVuc2UoIHNldE1hdGNoZWQg
KTsKLSAgICB9Ci0KLSAgICAvLyBBZGQgbWF0Y2hlcyB0byByZXN1bHRzCi0gICAgcHVzaC5hcHBs
eSggcmVzdWx0cywgc2V0TWF0Y2hlZCApOwotCi0gICAgLy8gU2VlZGxlc3Mgc2V0IG1hdGNoZXMg
c3VjY2VlZGluZyBtdWx0aXBsZSBzdWNjZXNzZnVsIG1hdGNoZXJzIHN0aXB1bGF0ZSBzb3J0aW5n
Ci0gICAgaWYgKCBvdXRlcm1vc3QgJiYgIXNlZWQgJiYgc2V0TWF0Y2hlZC5sZW5ndGggPiAwICYm
Ci0gICAgKCBtYXRjaGVkQ291bnQgKyBzZXRNYXRjaGVycy5sZW5ndGggKSA+IDEgKSB7Ci0KLSAg
ICBTaXp6bGUudW5pcXVlU29ydCggcmVzdWx0cyApOwotICAgIH0KLSAgICB9Ci0KLSAgICAvLyBP
dmVycmlkZSBtYW5pcHVsYXRpb24gb2YgZ2xvYmFscyBieSBuZXN0ZWQgbWF0Y2hlcnMKLSAgICBp
ZiAoIG91dGVybW9zdCApIHsKLSAgICBkaXJydW5zID0gZGlycnVuc1VuaXF1ZTsKLSAgICBvdXRl
cm1vc3RDb250ZXh0ID0gY29udGV4dEJhY2t1cDsKLSAgICB9Ci0KLSAgICByZXR1cm4gdW5tYXRj
aGVkOwotICAgIH07Ci0KLSAgICByZXR1cm4gYnlTZXQgPwotICAgIG1hcmtGdW5jdGlvbiggc3Vw
ZXJNYXRjaGVyICkgOgotICAgIHN1cGVyTWF0Y2hlcjsKLX0KLQotY29tcGlsZSA9IFNpenpsZS5j
b21waWxlID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBncm91cCAvKiBJbnRlcm5hbCBVc2UgT25seSAq
LyApIHsKLSAgICB2YXIgaSwKLSAgICBzZXRNYXRjaGVycyA9IFtdLAotICAgIGVsZW1lbnRNYXRj
aGVycyA9IFtdLAotICAgIGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGVbIHNlbGVjdG9yICsgIiAiIF07
Ci0KLSAgICBpZiAoICFjYWNoZWQgKSB7Ci0gICAgLy8gR2VuZXJhdGUgYSBmdW5jdGlvbiBvZiBy
ZWN1cnNpdmUgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2hlY2sgZWFjaCBlbGVtZW50
Ci0gICAgaWYgKCAhZ3JvdXAgKSB7Ci0gICAgZ3JvdXAgPSB0b2tlbml6ZSggc2VsZWN0b3IgKTsK
LSAgICB9Ci0gICAgaSA9IGdyb3VwLmxlbmd0aDsKLSAgICB3aGlsZSAoIGktLSApIHsKLSAgICBj
YWNoZWQgPSBtYXRjaGVyRnJvbVRva2VucyggZ3JvdXBbaV0gKTsKLSAgICBpZiAoIGNhY2hlZFsg
ZXhwYW5kbyBdICkgewotICAgIHNldE1hdGNoZXJzLnB1c2goIGNhY2hlZCApOwotICAgIH0gZWxz
ZSB7Ci0gICAgZWxlbWVudE1hdGNoZXJzLnB1c2goIGNhY2hlZCApOwotICAgIH0KLSAgICB9Ci0K
LSAgICAvLyBDYWNoZSB0aGUgY29tcGlsZWQgZnVuY3Rpb24KLSAgICBjYWNoZWQgPSBjb21waWxl
ckNhY2hlKCBzZWxlY3RvciwgbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hl
cnMsIHNldE1hdGNoZXJzICkgKTsKLSAgICB9Ci0gICAgcmV0dXJuIGNhY2hlZDsKLX07Ci0KLWZ1
bmN0aW9uIG11bHRpcGxlQ29udGV4dHMoIHNlbGVjdG9yLCBjb250ZXh0cywgcmVzdWx0cyApIHsK
LSAgICB2YXIgaSA9IDAsCi0gICAgbGVuID0gY29udGV4dHMubGVuZ3RoOwotICAgIGZvciAoIDsg
aSA8IGxlbjsgaSsrICkgewotICAgIFNpenpsZSggc2VsZWN0b3IsIGNvbnRleHRzW2ldLCByZXN1
bHRzICk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHRzOwotfQotCi1mdW5jdGlvbiBzZWxlY3Qo
IHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICkgewotICAgIHZhciBpLCB0b2tlbnMs
IHRva2VuLCB0eXBlLCBmaW5kLAotICAgIG1hdGNoID0gdG9rZW5pemUoIHNlbGVjdG9yICk7Ci0K
LSAgICBpZiAoICFzZWVkICkgewotICAgIC8vIFRyeSB0byBtaW5pbWl6ZSBvcGVyYXRpb25zIGlm
IHRoZXJlIGlzIG9ubHkgb25lIGdyb3VwCi0gICAgaWYgKCBtYXRjaC5sZW5ndGggPT09IDEgKSB7
Ci0KLSAgICAvLyBUYWtlIGEgc2hvcnRjdXQgYW5kIHNldCB0aGUgY29udGV4dCBpZiB0aGUgcm9v
dCBzZWxlY3RvciBpcyBhbiBJRAotICAgIHRva2VucyA9IG1hdGNoWzBdID0gbWF0Y2hbMF0uc2xp
Y2UoIDAgKTsKLSAgICBpZiAoIHRva2Vucy5sZW5ndGggPiAyICYmICh0b2tlbiA9IHRva2Vuc1sw
XSkudHlwZSA9PT0gIklEIiAmJgotICAgIGNvbnRleHQubm9kZVR5cGUgPT09IDkgJiYgIWRvY3Vt
ZW50SXNYTUwgJiYKLSAgICBFeHByLnJlbGF0aXZlWyB0b2tlbnNbMV0udHlwZSBdICkgewotCi0g
ICAgY29udGV4dCA9IEV4cHIuZmluZFsiSUQiXSggdG9rZW4ubWF0Y2hlc1swXS5yZXBsYWNlKCBy
dW5lc2NhcGUsIGZ1bmVzY2FwZSApLCBjb250ZXh0IClbMF07Ci0gICAgaWYgKCAhY29udGV4dCAp
IHsKLSAgICByZXR1cm4gcmVzdWx0czsKLSAgICB9Ci0KLSAgICBzZWxlY3RvciA9IHNlbGVjdG9y
LnNsaWNlKCB0b2tlbnMuc2hpZnQoKS52YWx1ZS5sZW5ndGggKTsKLSAgICB9Ci0KLSAgICAvLyBG
ZXRjaCBhIHNlZWQgc2V0IGZvciByaWdodC10by1sZWZ0IG1hdGNoaW5nCi0gICAgaSA9IG1hdGNo
RXhwclsibmVlZHNDb250ZXh0Il0udGVzdCggc2VsZWN0b3IgKSA/IDAgOiB0b2tlbnMubGVuZ3Ro
OwotICAgIHdoaWxlICggaS0tICkgewotICAgIHRva2VuID0gdG9rZW5zW2ldOwotCi0gICAgLy8g
QWJvcnQgaWYgd2UgaGl0IGEgY29tYmluYXRvcgotICAgIGlmICggRXhwci5yZWxhdGl2ZVsgKHR5
cGUgPSB0b2tlbi50eXBlKSBdICkgewotICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoIChmaW5k
ID0gRXhwci5maW5kWyB0eXBlIF0pICkgewotICAgIC8vIFNlYXJjaCwgZXhwYW5kaW5nIGNvbnRl
eHQgZm9yIGxlYWRpbmcgc2libGluZyBjb21iaW5hdG9ycwotICAgIGlmICggKHNlZWQgPSBmaW5k
KAotICAgIHRva2VuLm1hdGNoZXNbMF0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKSwK
LSAgICByc2libGluZy50ZXN0KCB0b2tlbnNbMF0udHlwZSApICYmIGNvbnRleHQucGFyZW50Tm9k
ZSB8fCBjb250ZXh0Ci0gICAgKSkgKSB7Ci0KLSAgICAvLyBJZiBzZWVkIGlzIGVtcHR5IG9yIG5v
IHRva2VucyByZW1haW4sIHdlIGNhbiByZXR1cm4gZWFybHkKLSAgICB0b2tlbnMuc3BsaWNlKCBp
LCAxICk7Ci0gICAgc2VsZWN0b3IgPSBzZWVkLmxlbmd0aCAmJiB0b1NlbGVjdG9yKCB0b2tlbnMg
KTsKLSAgICBpZiAoICFzZWxlY3RvciApIHsKLSAgICBwdXNoLmFwcGx5KCByZXN1bHRzLCBzbGlj
ZS5jYWxsKCBzZWVkLCAwICkgKTsKLSAgICByZXR1cm4gcmVzdWx0czsKLSAgICB9Ci0KLSAgICBi
cmVhazsKLSAgICB9Ci0gICAgfQotICAgIH0KLSAgICB9Ci0gICAgfQotCi0gICAgLy8gQ29tcGls
ZSBhbmQgZXhlY3V0ZSBhIGZpbHRlcmluZyBmdW5jdGlvbgotICAgIC8vIFByb3ZpZGUgYG1hdGNo
YCB0byBhdm9pZCByZXRva2VuaXphdGlvbiBpZiB3ZSBtb2RpZmllZCB0aGUgc2VsZWN0b3IgYWJv
dmUKLSAgICBjb21waWxlKCBzZWxlY3RvciwgbWF0Y2ggKSgKLSAgICBzZWVkLAotICAgIGNvbnRl
eHQsCi0gICAgZG9jdW1lbnRJc1hNTCwKLSAgICByZXN1bHRzLAotICAgIHJzaWJsaW5nLnRlc3Qo
IHNlbGVjdG9yICkKLSAgICApOwotICAgIHJldHVybiByZXN1bHRzOwotfQotCi0vLyBEZXByZWNh
dGVkCi1FeHByLnBzZXVkb3NbIm50aCJdID0gRXhwci5wc2V1ZG9zWyJlcSJdOwotCi0vLyBFYXN5
IEFQSSBmb3IgY3JlYXRpbmcgbmV3IHNldEZpbHRlcnMKLWZ1bmN0aW9uIHNldEZpbHRlcnMoKSB7
fQotRXhwci5maWx0ZXJzID0gc2V0RmlsdGVycy5wcm90b3R5cGUgPSBFeHByLnBzZXVkb3M7Ci1F
eHByLnNldEZpbHRlcnMgPSBuZXcgc2V0RmlsdGVycygpOwotCi0vLyBJbml0aWFsaXplIHdpdGgg
dGhlIGRlZmF1bHQgZG9jdW1lbnQKLXNldERvY3VtZW50KCk7Ci0KLS8vIE92ZXJyaWRlIHNpenps
ZSBhdHRyaWJ1dGUgcmV0cmlldmFsCi1TaXp6bGUuYXR0ciA9IGpRdWVyeS5hdHRyOwotalF1ZXJ5
LmZpbmQgPSBTaXp6bGU7Ci1qUXVlcnkuZXhwciA9IFNpenpsZS5zZWxlY3RvcnM7Ci1qUXVlcnku
ZXhwclsiOiJdID0galF1ZXJ5LmV4cHIucHNldWRvczsKLWpRdWVyeS51bmlxdWUgPSBTaXp6bGUu
dW5pcXVlU29ydDsKLWpRdWVyeS50ZXh0ID0gU2l6emxlLmdldFRleHQ7Ci1qUXVlcnkuaXNYTUxE
b2MgPSBTaXp6bGUuaXNYTUw7Ci1qUXVlcnkuY29udGFpbnMgPSBTaXp6bGUuY29udGFpbnM7Ci0K
LQotfSkoIHdpbmRvdyApOwotdmFyIHJ1bnRpbCA9IC9VbnRpbCQvLAotICAgIHJwYXJlbnRzcHJl
diA9IC9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLAotICAgIGlzU2ltcGxlID0gL14u
W146I1xbXC4sXSokLywKLSAgICBybmVlZHNDb250ZXh0ID0galF1ZXJ5LmV4cHIubWF0Y2gubmVl
ZHNDb250ZXh0LAotICAgIC8vIG1ldGhvZHMgZ3VhcmFudGVlZCB0byBwcm9kdWNlIGEgdW5pcXVl
IHNldCB3aGVuIHN0YXJ0aW5nIGZyb20gYSB1bmlxdWUgc2V0Ci0gICAgZ3VhcmFudGVlZFVuaXF1
ZSA9IHsKLSAgICBjaGlsZHJlbjogdHJ1ZSwKLSAgICBjb250ZW50czogdHJ1ZSwKLSAgICBuZXh0
OiB0cnVlLAotICAgIHByZXY6IHRydWUKLSAgICB9OwotCi1qUXVlcnkuZm4uZXh0ZW5kKHsKLSAg
ICBmaW5kOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7Ci0gICAgdmFyIGksIHJldCwgc2VsZiwKLSAg
ICBsZW4gPSB0aGlzLmxlbmd0aDsKLQotICAgIGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSAic3Ry
aW5nIiApIHsKLSAgICBzZWxmID0gdGhpczsKLSAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpR
dWVyeSggc2VsZWN0b3IgKS5maWx0ZXIoZnVuY3Rpb24oKSB7Ci0gICAgZm9yICggaSA9IDA7IGkg
PCBsZW47IGkrKyApIHsKLSAgICBpZiAoIGpRdWVyeS5jb250YWlucyggc2VsZlsgaSBdLCB0aGlz
ICkgKSB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIH0KLSAgICB9KSApOwotICAgIH0K
LQotICAgIHJldCA9IFtdOwotICAgIGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7Ci0gICAg
alF1ZXJ5LmZpbmQoIHNlbGVjdG9yLCB0aGlzWyBpIF0sIHJldCApOwotICAgIH0KLQotICAgIC8v
IE5lZWRlZCBiZWNhdXNlICQoIHNlbGVjdG9yLCBjb250ZXh0ICkgYmVjb21lcyAkKCBjb250ZXh0
ICkuZmluZCggc2VsZWN0b3IgKQotICAgIHJldCA9IHRoaXMucHVzaFN0YWNrKCBsZW4gPiAxID8g
alF1ZXJ5LnVuaXF1ZSggcmV0ICkgOiByZXQgKTsKLSAgICByZXQuc2VsZWN0b3IgPSAoIHRoaXMu
c2VsZWN0b3IgPyB0aGlzLnNlbGVjdG9yICsgIiAiIDogIiIgKSArIHNlbGVjdG9yOwotICAgIHJl
dHVybiByZXQ7Ci0gICAgfSwKLQotICAgIGhhczogZnVuY3Rpb24oIHRhcmdldCApIHsKLSAgICB2
YXIgaSwKLSAgICB0YXJnZXRzID0galF1ZXJ5KCB0YXJnZXQsIHRoaXMgKSwKLSAgICBsZW4gPSB0
YXJnZXRzLmxlbmd0aDsKLQotICAgIHJldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpIHsKLSAg
ICBmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkgewotICAgIGlmICggalF1ZXJ5LmNvbnRhaW5z
KCB0aGlzLCB0YXJnZXRzW2ldICkgKSB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIH0K
LSAgICB9KTsKLSAgICB9LAotCi0gICAgbm90OiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7Ci0gICAg
cmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3codGhpcywgc2VsZWN0b3IsIGZhbHNlKSApOwot
ICAgIH0sCi0KLSAgICBmaWx0ZXI6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKLSAgICByZXR1cm4g
dGhpcy5wdXNoU3RhY2soIHdpbm5vdyh0aGlzLCBzZWxlY3RvciwgdHJ1ZSkgKTsKLSAgICB9LAot
Ci0gICAgaXM6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKLSAgICByZXR1cm4gISFzZWxlY3RvciAm
JiAoCi0gICAgdHlwZW9mIHNlbGVjdG9yID09PSAic3RyaW5nIiA/Ci0gICAgLy8gSWYgdGhpcyBp
cyBhIHBvc2l0aW9uYWwvcmVsYXRpdmUgc2VsZWN0b3IsIGNoZWNrIG1lbWJlcnNoaXAgaW4gdGhl
IHJldHVybmVkIHNldAotICAgIC8vIHNvICQoInA6Zmlyc3QiKS5pcygicDpsYXN0Iikgd29uJ3Qg
cmV0dXJuIHRydWUgZm9yIGEgZG9jIHdpdGggdHdvICJwIi4KLSAgICBybmVlZHNDb250ZXh0LnRl
c3QoIHNlbGVjdG9yICkgPwotICAgIGpRdWVyeSggc2VsZWN0b3IsIHRoaXMuY29udGV4dCApLmlu
ZGV4KCB0aGlzWzBdICkgPj0gMCA6Ci0gICAgalF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIHRoaXMg
KS5sZW5ndGggPiAwIDoKLSAgICB0aGlzLmZpbHRlciggc2VsZWN0b3IgKS5sZW5ndGggPiAwICk7
Ci0gICAgfSwKLQotICAgIGNsb3Nlc3Q6IGZ1bmN0aW9uKCBzZWxlY3RvcnMsIGNvbnRleHQgKSB7
Ci0gICAgdmFyIGN1ciwKLSAgICBpID0gMCwKLSAgICBsID0gdGhpcy5sZW5ndGgsCi0gICAgcmV0
ID0gW10sCi0gICAgcG9zID0gcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvcnMgKSB8fCB0eXBl
b2Ygc2VsZWN0b3JzICE9PSAic3RyaW5nIiA/Ci0gICAgalF1ZXJ5KCBzZWxlY3RvcnMsIGNvbnRl
eHQgfHwgdGhpcy5jb250ZXh0ICkgOgotICAgIDA7Ci0KLSAgICBmb3IgKCA7IGkgPCBsOyBpKysg
KSB7Ci0gICAgY3VyID0gdGhpc1tpXTsKLQotICAgIHdoaWxlICggY3VyICYmIGN1ci5vd25lckRv
Y3VtZW50ICYmIGN1ciAhPT0gY29udGV4dCAmJiBjdXIubm9kZVR5cGUgIT09IDExICkgewotICAg
IGlmICggcG9zID8gcG9zLmluZGV4KGN1cikgPiAtMSA6IGpRdWVyeS5maW5kLm1hdGNoZXNTZWxl
Y3RvcihjdXIsIHNlbGVjdG9ycykgKSB7Ci0gICAgcmV0LnB1c2goIGN1ciApOwotICAgIGJyZWFr
OwotICAgIH0KLSAgICBjdXIgPSBjdXIucGFyZW50Tm9kZTsKLSAgICB9Ci0gICAgfQotCi0gICAg
cmV0dXJuIHRoaXMucHVzaFN0YWNrKCByZXQubGVuZ3RoID4gMSA/IGpRdWVyeS51bmlxdWUoIHJl
dCApIDogcmV0ICk7Ci0gICAgfSwKLQotICAgIC8vIERldGVybWluZSB0aGUgcG9zaXRpb24gb2Yg
YW4gZWxlbWVudCB3aXRoaW4KLSAgICAvLyB0aGUgbWF0Y2hlZCBzZXQgb2YgZWxlbWVudHMKLSAg
ICBpbmRleDogZnVuY3Rpb24oIGVsZW0gKSB7Ci0KLSAgICAvLyBObyBhcmd1bWVudCwgcmV0dXJu
IGluZGV4IGluIHBhcmVudAotICAgIGlmICggIWVsZW0gKSB7Ci0gICAgcmV0dXJuICggdGhpc1sw
XSAmJiB0aGlzWzBdLnBhcmVudE5vZGUgKSA/IHRoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3Ro
IDogLTE7Ci0gICAgfQotCi0gICAgLy8gaW5kZXggaW4gc2VsZWN0b3IKLSAgICBpZiAoIHR5cGVv
ZiBlbGVtID09PSAic3RyaW5nIiApIHsKLSAgICByZXR1cm4galF1ZXJ5LmluQXJyYXkoIHRoaXNb
MF0sIGpRdWVyeSggZWxlbSApICk7Ci0gICAgfQotCi0gICAgLy8gTG9jYXRlIHRoZSBwb3NpdGlv
biBvZiB0aGUgZGVzaXJlZCBlbGVtZW50Ci0gICAgcmV0dXJuIGpRdWVyeS5pbkFycmF5KAotICAg
IC8vIElmIGl0IHJlY2VpdmVzIGEgalF1ZXJ5IG9iamVjdCwgdGhlIGZpcnN0IGVsZW1lbnQgaXMg
dXNlZAotICAgIGVsZW0uanF1ZXJ5ID8gZWxlbVswXSA6IGVsZW0sIHRoaXMgKTsKLSAgICB9LAot
Ci0gICAgYWRkOiBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7Ci0gICAgdmFyIHNldCA9
IHR5cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIgPwotICAgIGpRdWVyeSggc2VsZWN0b3IsIGNv
bnRleHQgKSA6Ci0gICAgalF1ZXJ5Lm1ha2VBcnJheSggc2VsZWN0b3IgJiYgc2VsZWN0b3Iubm9k
ZVR5cGUgPyBbIHNlbGVjdG9yIF0gOiBzZWxlY3RvciApLAotICAgIGFsbCA9IGpRdWVyeS5tZXJn
ZSggdGhpcy5nZXQoKSwgc2V0ICk7Ci0KLSAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVy
eS51bmlxdWUoYWxsKSApOwotICAgIH0sCi0KLSAgICBhZGRCYWNrOiBmdW5jdGlvbiggc2VsZWN0
b3IgKSB7Ci0gICAgcmV0dXJuIHRoaXMuYWRkKCBzZWxlY3RvciA9PSBudWxsID8KLSAgICB0aGlz
LnByZXZPYmplY3QgOiB0aGlzLnByZXZPYmplY3QuZmlsdGVyKHNlbGVjdG9yKQotICAgICk7Ci0g
ICAgfQotfSk7Ci0KLWpRdWVyeS5mbi5hbmRTZWxmID0galF1ZXJ5LmZuLmFkZEJhY2s7Ci0KLWZ1
bmN0aW9uIHNpYmxpbmcoIGN1ciwgZGlyICkgewotICAgIGRvIHsKLSAgICBjdXIgPSBjdXJbIGRp
ciBdOwotICAgIH0gd2hpbGUgKCBjdXIgJiYgY3VyLm5vZGVUeXBlICE9PSAxICk7Ci0KLSAgICBy
ZXR1cm4gY3VyOwotfQotCi1qUXVlcnkuZWFjaCh7Ci0gICAgcGFyZW50OiBmdW5jdGlvbiggZWxl
bSApIHsKLSAgICB2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlOwotICAgIHJldHVybiBwYXJl
bnQgJiYgcGFyZW50Lm5vZGVUeXBlICE9PSAxMSA/IHBhcmVudCA6IG51bGw7Ci0gICAgfSwKLSAg
ICBwYXJlbnRzOiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICByZXR1cm4galF1ZXJ5LmRpciggZWxl
bSwgInBhcmVudE5vZGUiICk7Ci0gICAgfSwKLSAgICBwYXJlbnRzVW50aWw6IGZ1bmN0aW9uKCBl
bGVtLCBpLCB1bnRpbCApIHsKLSAgICByZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgInBhcmVudE5v
ZGUiLCB1bnRpbCApOwotICAgIH0sCi0gICAgbmV4dDogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAg
cmV0dXJuIHNpYmxpbmcoIGVsZW0sICJuZXh0U2libGluZyIgKTsKLSAgICB9LAotICAgIHByZXY6
IGZ1bmN0aW9uKCBlbGVtICkgewotICAgIHJldHVybiBzaWJsaW5nKCBlbGVtLCAicHJldmlvdXNT
aWJsaW5nIiApOwotICAgIH0sCi0gICAgbmV4dEFsbDogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAg
cmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0sICJuZXh0U2libGluZyIgKTsKLSAgICB9LAotICAgIHBy
ZXZBbGw6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgIHJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCAi
cHJldmlvdXNTaWJsaW5nIiApOwotICAgIH0sCi0gICAgbmV4dFVudGlsOiBmdW5jdGlvbiggZWxl
bSwgaSwgdW50aWwgKSB7Ci0gICAgcmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0sICJuZXh0U2libGlu
ZyIsIHVudGlsICk7Ci0gICAgfSwKLSAgICBwcmV2VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1
bnRpbCApIHsKLSAgICByZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgInByZXZpb3VzU2libGluZyIs
IHVudGlsICk7Ci0gICAgfSwKLSAgICBzaWJsaW5nczogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAg
cmV0dXJuIGpRdWVyeS5zaWJsaW5nKCAoIGVsZW0ucGFyZW50Tm9kZSB8fCB7fSApLmZpcnN0Q2hp
bGQsIGVsZW0gKTsKLSAgICB9LAotICAgIGNoaWxkcmVuOiBmdW5jdGlvbiggZWxlbSApIHsKLSAg
ICByZXR1cm4galF1ZXJ5LnNpYmxpbmcoIGVsZW0uZmlyc3RDaGlsZCApOwotICAgIH0sCi0gICAg
Y29udGVudHM6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgIHJldHVybiBqUXVlcnkubm9kZU5hbWUo
IGVsZW0sICJpZnJhbWUiICkgPwotICAgIGVsZW0uY29udGVudERvY3VtZW50IHx8IGVsZW0uY29u
dGVudFdpbmRvdy5kb2N1bWVudCA6Ci0gICAgalF1ZXJ5Lm1lcmdlKCBbXSwgZWxlbS5jaGlsZE5v
ZGVzICk7Ci0gICAgfQotfSwgZnVuY3Rpb24oIG5hbWUsIGZuICkgewotICAgIGpRdWVyeS5mblsg
bmFtZSBdID0gZnVuY3Rpb24oIHVudGlsLCBzZWxlY3RvciApIHsKLSAgICB2YXIgcmV0ID0galF1
ZXJ5Lm1hcCggdGhpcywgZm4sIHVudGlsICk7Ci0KLSAgICBpZiAoICFydW50aWwudGVzdCggbmFt
ZSApICkgewotICAgIHNlbGVjdG9yID0gdW50aWw7Ci0gICAgfQotCi0gICAgaWYgKCBzZWxlY3Rv
ciAmJiB0eXBlb2Ygc2VsZWN0b3IgPT09ICJzdHJpbmciICkgewotICAgIHJldCA9IGpRdWVyeS5m
aWx0ZXIoIHNlbGVjdG9yLCByZXQgKTsKLSAgICB9Ci0KLSAgICByZXQgPSB0aGlzLmxlbmd0aCA+
IDEgJiYgIWd1YXJhbnRlZWRVbmlxdWVbIG5hbWUgXSA/IGpRdWVyeS51bmlxdWUoIHJldCApIDog
cmV0OwotCi0gICAgaWYgKCB0aGlzLmxlbmd0aCA+IDEgJiYgcnBhcmVudHNwcmV2LnRlc3QoIG5h
bWUgKSApIHsKLSAgICByZXQgPSByZXQucmV2ZXJzZSgpOwotICAgIH0KLQotICAgIHJldHVybiB0
aGlzLnB1c2hTdGFjayggcmV0ICk7Ci0gICAgfTsKLX0pOwotCi1qUXVlcnkuZXh0ZW5kKHsKLSAg
ICBmaWx0ZXI6IGZ1bmN0aW9uKCBleHByLCBlbGVtcywgbm90ICkgewotICAgIGlmICggbm90ICkg
ewotICAgIGV4cHIgPSAiOm5vdCgiICsgZXhwciArICIpIjsKLSAgICB9Ci0KLSAgICByZXR1cm4g
ZWxlbXMubGVuZ3RoID09PSAxID8KLSAgICBqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoZWxl
bXNbMF0sIGV4cHIpID8gWyBlbGVtc1swXSBdIDogW10gOgotICAgIGpRdWVyeS5maW5kLm1hdGNo
ZXMoZXhwciwgZWxlbXMpOwotICAgIH0sCi0KLSAgICBkaXI6IGZ1bmN0aW9uKCBlbGVtLCBkaXIs
IHVudGlsICkgewotICAgIHZhciBtYXRjaGVkID0gW10sCi0gICAgY3VyID0gZWxlbVsgZGlyIF07
Ci0KLSAgICB3aGlsZSAoIGN1ciAmJiBjdXIubm9kZVR5cGUgIT09IDkgJiYgKHVudGlsID09PSB1
bmRlZmluZWQgfHwgY3VyLm5vZGVUeXBlICE9PSAxIHx8ICFqUXVlcnkoIGN1ciApLmlzKCB1bnRp
bCApKSApIHsKLSAgICBpZiAoIGN1ci5ub2RlVHlwZSA9PT0gMSApIHsKLSAgICBtYXRjaGVkLnB1
c2goIGN1ciApOwotICAgIH0KLSAgICBjdXIgPSBjdXJbZGlyXTsKLSAgICB9Ci0gICAgcmV0dXJu
IG1hdGNoZWQ7Ci0gICAgfSwKLQotICAgIHNpYmxpbmc6IGZ1bmN0aW9uKCBuLCBlbGVtICkgewot
ICAgIHZhciByID0gW107Ci0KLSAgICBmb3IgKCA7IG47IG4gPSBuLm5leHRTaWJsaW5nICkgewot
ICAgIGlmICggbi5ub2RlVHlwZSA9PT0gMSAmJiBuICE9PSBlbGVtICkgewotICAgIHIucHVzaCgg
biApOwotICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcjsKLSAgICB9Ci19KTsKLQotLy8gSW1w
bGVtZW50IHRoZSBpZGVudGljYWwgZnVuY3Rpb25hbGl0eSBmb3IgZmlsdGVyIGFuZCBub3QKLWZ1
bmN0aW9uIHdpbm5vdyggZWxlbWVudHMsIHF1YWxpZmllciwga2VlcCApIHsKLQotICAgIC8vIENh
bid0IHBhc3MgbnVsbCBvciB1bmRlZmluZWQgdG8gaW5kZXhPZiBpbiBGaXJlZm94IDQKLSAgICAv
LyBTZXQgdG8gMCB0byBza2lwIHN0cmluZyBjaGVjawotICAgIHF1YWxpZmllciA9IHF1YWxpZmll
ciB8fCAwOwotCi0gICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggcXVhbGlmaWVyICkgKSB7Ci0g
ICAgcmV0dXJuIGpRdWVyeS5ncmVwKGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSwgaSApIHsKLSAg
ICB2YXIgcmV0VmFsID0gISFxdWFsaWZpZXIuY2FsbCggZWxlbSwgaSwgZWxlbSApOwotICAgIHJl
dHVybiByZXRWYWwgPT09IGtlZXA7Ci0gICAgfSk7Ci0KLSAgICB9IGVsc2UgaWYgKCBxdWFsaWZp
ZXIubm9kZVR5cGUgKSB7Ci0gICAgcmV0dXJuIGpRdWVyeS5ncmVwKGVsZW1lbnRzLCBmdW5jdGlv
biggZWxlbSApIHsKLSAgICByZXR1cm4gKCBlbGVtID09PSBxdWFsaWZpZXIgKSA9PT0ga2VlcDsK
LSAgICB9KTsKLQotICAgIH0gZWxzZSBpZiAoIHR5cGVvZiBxdWFsaWZpZXIgPT09ICJzdHJpbmci
ICkgewotICAgIHZhciBmaWx0ZXJlZCA9IGpRdWVyeS5ncmVwKGVsZW1lbnRzLCBmdW5jdGlvbigg
ZWxlbSApIHsKLSAgICByZXR1cm4gZWxlbS5ub2RlVHlwZSA9PT0gMTsKLSAgICB9KTsKLQotICAg
IGlmICggaXNTaW1wbGUudGVzdCggcXVhbGlmaWVyICkgKSB7Ci0gICAgcmV0dXJuIGpRdWVyeS5m
aWx0ZXIocXVhbGlmaWVyLCBmaWx0ZXJlZCwgIWtlZXApOwotICAgIH0gZWxzZSB7Ci0gICAgcXVh
bGlmaWVyID0galF1ZXJ5LmZpbHRlciggcXVhbGlmaWVyLCBmaWx0ZXJlZCApOwotICAgIH0KLSAg
ICB9Ci0KLSAgICByZXR1cm4galF1ZXJ5LmdyZXAoZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtICkg
ewotICAgIHJldHVybiAoIGpRdWVyeS5pbkFycmF5KCBlbGVtLCBxdWFsaWZpZXIgKSA+PSAwICkg
PT09IGtlZXA7Ci0gICAgfSk7Ci19Ci1mdW5jdGlvbiBjcmVhdGVTYWZlRnJhZ21lbnQoIGRvY3Vt
ZW50ICkgewotICAgIHZhciBsaXN0ID0gbm9kZU5hbWVzLnNwbGl0KCAifCIgKSwKLSAgICBzYWZl
RnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKLQotICAgIGlmICggc2Fm
ZUZyYWcuY3JlYXRlRWxlbWVudCApIHsKLSAgICB3aGlsZSAoIGxpc3QubGVuZ3RoICkgewotICAg
IHNhZmVGcmFnLmNyZWF0ZUVsZW1lbnQoCi0gICAgbGlzdC5wb3AoKQotICAgICk7Ci0gICAgfQot
ICAgIH0KLSAgICByZXR1cm4gc2FmZUZyYWc7Ci19Ci0KLXZhciBub2RlTmFtZXMgPSAiYWJicnxh
cnRpY2xlfGFzaWRlfGF1ZGlvfGJkaXxjYW52YXN8ZGF0YXxkYXRhbGlzdHxkZXRhaWxzfGZpZ2Nh
cHRpb258ZmlndXJlfGZvb3RlcnwiICsKLSAgICAiaGVhZGVyfGhncm91cHxtYXJrfG1ldGVyfG5h
dnxvdXRwdXR8cHJvZ3Jlc3N8c2VjdGlvbnxzdW1tYXJ5fHRpbWV8dmlkZW8iLAotICAgIHJpbmxp
bmVqUXVlcnkgPSAvIGpRdWVyeVxkKz0iKD86bnVsbHxcZCspIi9nLAotICAgIHJub3NoaW1jYWNo
ZSA9IG5ldyBSZWdFeHAoIjwoPzoiICsgbm9kZU5hbWVzICsgIilbXFxzLz5dIiwgImkiKSwKLSAg
ICBybGVhZGluZ1doaXRlc3BhY2UgPSAvXlxzKy8sCi0gICAgcnhodG1sVGFnID0gLzwoPyFhcmVh
fGJyfGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgoW1x3Ol0rKVtePl0q
KVwvPi9naSwKLSAgICBydGFnTmFtZSA9IC88KFtcdzpdKykvLAotICAgIHJ0Ym9keSA9IC88dGJv
ZHkvaSwKLSAgICByaHRtbCA9IC88fCYjP1x3KzsvLAotICAgIHJub0lubmVyaHRtbCA9IC88KD86
c2NyaXB0fHN0eWxlfGxpbmspL2ksCi0gICAgbWFuaXB1bGF0aW9uX3JjaGVja2FibGVUeXBlID0g
L14oPzpjaGVja2JveHxyYWRpbykkL2ksCi0gICAgLy8gY2hlY2tlZD0iY2hlY2tlZCIgb3IgY2hl
Y2tlZAotICAgIHJjaGVja2VkID0gL2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ks
Ci0gICAgcnNjcmlwdFR5cGUgPSAvXiR8XC8oPzpqYXZhfGVjbWEpc2NyaXB0L2ksCi0gICAgcnNj
cmlwdFR5cGVNYXNrZWQgPSAvXnRydWVcLyguKikvLAotICAgIHJjbGVhblNjcmlwdCA9IC9eXHMq
PCEoPzpcW0NEQVRBXFt8LS0pfCg/OlxdXF18LS0pPlxzKiQvZywKLQotICAgIC8vIFdlIGhhdmUg
dG8gY2xvc2UgdGhlc2UgdGFncyB0byBzdXBwb3J0IFhIVE1MICgjMTMyMDApCi0gICAgd3JhcE1h
cCA9IHsKLSAgICBvcHRpb246IFsgMSwgIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz4iLCAi
PC9zZWxlY3Q+IiBdLAotICAgIGxlZ2VuZDogWyAxLCAiPGZpZWxkc2V0PiIsICI8L2ZpZWxkc2V0
PiIgXSwKLSAgICBhcmVhOiBbIDEsICI8bWFwPiIsICI8L21hcD4iIF0sCi0gICAgcGFyYW06IFsg
MSwgIjxvYmplY3Q+IiwgIjwvb2JqZWN0PiIgXSwKLSAgICB0aGVhZDogWyAxLCAiPHRhYmxlPiIs
ICI8L3RhYmxlPiIgXSwKLSAgICB0cjogWyAyLCAiPHRhYmxlPjx0Ym9keT4iLCAiPC90Ym9keT48
L3RhYmxlPiIgXSwKLSAgICBjb2w6IFsgMiwgIjx0YWJsZT48dGJvZHk+PC90Ym9keT48Y29sZ3Jv
dXA+IiwgIjwvY29sZ3JvdXA+PC90YWJsZT4iIF0sCi0gICAgdGQ6IFsgMywgIjx0YWJsZT48dGJv
ZHk+PHRyPiIsICI8L3RyPjwvdGJvZHk+PC90YWJsZT4iIF0sCi0KLSAgICAvLyBJRTYtOCBjYW4n
dCBzZXJpYWxpemUgbGluaywgc2NyaXB0LCBzdHlsZSwgb3IgYW55IGh0bWw1IChOb1Njb3BlKSB0
YWdzLAotICAgIC8vIHVubGVzcyB3cmFwcGVkIGluIGEgZGl2IHdpdGggbm9uLWJyZWFraW5nIGNo
YXJhY3RlcnMgaW4gZnJvbnQgb2YgaXQuCi0gICAgX2RlZmF1bHQ6IGpRdWVyeS5zdXBwb3J0Lmh0
bWxTZXJpYWxpemUgPyBbIDAsICIiLCAiIiBdIDogWyAxLCAiWDxkaXY+IiwgIjwvZGl2PiIgIF0K
LSAgICB9LAotICAgIHNhZmVGcmFnbWVudCA9IGNyZWF0ZVNhZmVGcmFnbWVudCggZG9jdW1lbnQg
KSwKLSAgICBmcmFnbWVudERpdiA9IHNhZmVGcmFnbWVudC5hcHBlbmRDaGlsZCggZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgiZGl2IikgKTsKLQotd3JhcE1hcC5vcHRncm91cCA9IHdyYXBNYXAub3B0
aW9uOwotd3JhcE1hcC50Ym9keSA9IHdyYXBNYXAudGZvb3QgPSB3cmFwTWFwLmNvbGdyb3VwID0g
d3JhcE1hcC5jYXB0aW9uID0gd3JhcE1hcC50aGVhZDsKLXdyYXBNYXAudGggPSB3cmFwTWFwLnRk
OwotCi1qUXVlcnkuZm4uZXh0ZW5kKHsKLSAgICB0ZXh0OiBmdW5jdGlvbiggdmFsdWUgKSB7Ci0g
ICAgcmV0dXJuIGpRdWVyeS5hY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHsKLSAgICBy
ZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/Ci0gICAgalF1ZXJ5LnRleHQoIHRoaXMgKSA6Ci0g
ICAgdGhpcy5lbXB0eSgpLmFwcGVuZCggKCB0aGlzWzBdICYmIHRoaXNbMF0ub3duZXJEb2N1bWVu
dCB8fCBkb2N1bWVudCApLmNyZWF0ZVRleHROb2RlKCB2YWx1ZSApICk7Ci0gICAgfSwgbnVsbCwg
dmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggKTsKLSAgICB9LAotCi0gICAgd3JhcEFsbDogZnVuY3Rp
b24oIGh0bWwgKSB7Ci0gICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggaHRtbCApICkgewotICAg
IHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oaSkgewotICAgIGpRdWVyeSh0aGlzKS53cmFwQWxs
KCBodG1sLmNhbGwodGhpcywgaSkgKTsKLSAgICB9KTsKLSAgICB9Ci0KLSAgICBpZiAoIHRoaXNb
MF0gKSB7Ci0gICAgLy8gVGhlIGVsZW1lbnRzIHRvIHdyYXAgdGhlIHRhcmdldCBhcm91bmQKLSAg
ICB2YXIgd3JhcCA9IGpRdWVyeSggaHRtbCwgdGhpc1swXS5vd25lckRvY3VtZW50ICkuZXEoMCku
Y2xvbmUodHJ1ZSk7Ci0KLSAgICBpZiAoIHRoaXNbMF0ucGFyZW50Tm9kZSApIHsKLSAgICB3cmFw
Lmluc2VydEJlZm9yZSggdGhpc1swXSApOwotICAgIH0KLQotICAgIHdyYXAubWFwKGZ1bmN0aW9u
KCkgewotICAgIHZhciBlbGVtID0gdGhpczsKLQotICAgIHdoaWxlICggZWxlbS5maXJzdENoaWxk
ICYmIGVsZW0uZmlyc3RDaGlsZC5ub2RlVHlwZSA9PT0gMSApIHsKLSAgICBlbGVtID0gZWxlbS5m
aXJzdENoaWxkOwotICAgIH0KLQotICAgIHJldHVybiBlbGVtOwotICAgIH0pLmFwcGVuZCggdGhp
cyApOwotICAgIH0KLQotICAgIHJldHVybiB0aGlzOwotICAgIH0sCi0KLSAgICB3cmFwSW5uZXI6
IGZ1bmN0aW9uKCBodG1sICkgewotICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGh0bWwgKSAp
IHsKLSAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpIHsKLSAgICBqUXVlcnkodGhpcyku
d3JhcElubmVyKCBodG1sLmNhbGwodGhpcywgaSkgKTsKLSAgICB9KTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewotICAgIHZhciBzZWxmID0galF1ZXJ5KCB0aGlz
ICksCi0gICAgY29udGVudHMgPSBzZWxmLmNvbnRlbnRzKCk7Ci0KLSAgICBpZiAoIGNvbnRlbnRz
Lmxlbmd0aCApIHsKLSAgICBjb250ZW50cy53cmFwQWxsKCBodG1sICk7Ci0KLSAgICB9IGVsc2Ug
ewotICAgIHNlbGYuYXBwZW5kKCBodG1sICk7Ci0gICAgfQotICAgIH0pOwotICAgIH0sCi0KLSAg
ICB3cmFwOiBmdW5jdGlvbiggaHRtbCApIHsKLSAgICB2YXIgaXNGdW5jdGlvbiA9IGpRdWVyeS5p
c0Z1bmN0aW9uKCBodG1sICk7Ci0KLSAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpIHsK
LSAgICBqUXVlcnkoIHRoaXMgKS53cmFwQWxsKCBpc0Z1bmN0aW9uID8gaHRtbC5jYWxsKHRoaXMs
IGkpIDogaHRtbCApOwotICAgIH0pOwotICAgIH0sCi0KLSAgICB1bndyYXA6IGZ1bmN0aW9uKCkg
ewotICAgIHJldHVybiB0aGlzLnBhcmVudCgpLmVhY2goZnVuY3Rpb24oKSB7Ci0gICAgaWYgKCAh
alF1ZXJ5Lm5vZGVOYW1lKCB0aGlzLCAiYm9keSIgKSApIHsKLSAgICBqUXVlcnkoIHRoaXMgKS5y
ZXBsYWNlV2l0aCggdGhpcy5jaGlsZE5vZGVzICk7Ci0gICAgfQotICAgIH0pLmVuZCgpOwotICAg
IH0sCi0KLSAgICBhcHBlbmQ6IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLmRvbU1hbmlw
KGFyZ3VtZW50cywgdHJ1ZSwgZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgaWYgKCB0aGlzLm5vZGVU
eXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkg
KSB7Ci0gICAgdGhpcy5hcHBlbmRDaGlsZCggZWxlbSApOwotICAgIH0KLSAgICB9KTsKLSAgICB9
LAotCi0gICAgcHJlcGVuZDogZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMuZG9tTWFuaXAo
YXJndW1lbnRzLCB0cnVlLCBmdW5jdGlvbiggZWxlbSApIHsKLSAgICBpZiAoIHRoaXMubm9kZVR5
cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSAp
IHsKLSAgICB0aGlzLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcy5maXJzdENoaWxkICk7Ci0gICAg
fQotICAgIH0pOwotICAgIH0sCi0KLSAgICBiZWZvcmU6IGZ1bmN0aW9uKCkgewotICAgIHJldHVy
biB0aGlzLmRvbU1hbmlwKCBhcmd1bWVudHMsIGZhbHNlLCBmdW5jdGlvbiggZWxlbSApIHsKLSAg
ICBpZiAoIHRoaXMucGFyZW50Tm9kZSApIHsKLSAgICB0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVm
b3JlKCBlbGVtLCB0aGlzICk7Ci0gICAgfQotICAgIH0pOwotICAgIH0sCi0KLSAgICBhZnRlcjog
ZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMuZG9tTWFuaXAoIGFyZ3VtZW50cywgZmFsc2Us
IGZ1bmN0aW9uKCBlbGVtICkgewotICAgIGlmICggdGhpcy5wYXJlbnROb2RlICkgewotICAgIHRo
aXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMubmV4dFNpYmxpbmcgKTsKLSAg
ICB9Ci0gICAgfSk7Ci0gICAgfSwKLQotICAgIC8vIGtlZXBEYXRhIGlzIGZvciBpbnRlcm5hbCB1
c2Ugb25seS0tZG8gbm90IGRvY3VtZW50Ci0gICAgcmVtb3ZlOiBmdW5jdGlvbiggc2VsZWN0b3Is
IGtlZXBEYXRhICkgewotICAgIHZhciBlbGVtLAotICAgIGkgPSAwOwotCi0gICAgZm9yICggOyAo
ZWxlbSA9IHRoaXNbaV0pICE9IG51bGw7IGkrKyApIHsKLSAgICBpZiAoICFzZWxlY3RvciB8fCBq
UXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgWyBlbGVtIF0gKS5sZW5ndGggPiAwICkgewotICAgIGlm
ICggIWtlZXBEYXRhICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7Ci0gICAgalF1ZXJ5LmNsZWFu
RGF0YSggZ2V0QWxsKCBlbGVtICkgKTsKLSAgICB9Ci0KLSAgICBpZiAoIGVsZW0ucGFyZW50Tm9k
ZSApIHsKLSAgICBpZiAoIGtlZXBEYXRhICYmIGpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRv
Y3VtZW50LCBlbGVtICkgKSB7Ci0gICAgc2V0R2xvYmFsRXZhbCggZ2V0QWxsKCBlbGVtLCAic2Ny
aXB0IiApICk7Ci0gICAgfQotICAgIGVsZW0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggZWxlbSAp
OwotICAgIH0KLSAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRoaXM7Ci0gICAgfSwKLQotICAg
IGVtcHR5OiBmdW5jdGlvbigpIHsKLSAgICB2YXIgZWxlbSwKLSAgICBpID0gMDsKLQotICAgIGZv
ciAoIDsgKGVsZW0gPSB0aGlzW2ldKSAhPSBudWxsOyBpKysgKSB7Ci0gICAgLy8gUmVtb3ZlIGVs
ZW1lbnQgbm9kZXMgYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtzCi0gICAgaWYgKCBlbGVtLm5vZGVU
eXBlID09PSAxICkgewotICAgIGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFsc2Ug
KSApOwotICAgIH0KLQotICAgIC8vIFJlbW92ZSBhbnkgcmVtYWluaW5nIG5vZGVzCi0gICAgd2hp
bGUgKCBlbGVtLmZpcnN0Q2hpbGQgKSB7Ci0gICAgZWxlbS5yZW1vdmVDaGlsZCggZWxlbS5maXJz
dENoaWxkICk7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhpcyBpcyBhIHNlbGVjdCwgZW5zdXJlIHRo
YXQgaXQgZGlzcGxheXMgZW1wdHkgKCMxMjMzNikKLSAgICAvLyBTdXBwb3J0OiBJRTw5Ci0gICAg
aWYgKCBlbGVtLm9wdGlvbnMgJiYgalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAic2VsZWN0IiApICkg
ewotICAgIGVsZW0ub3B0aW9ucy5sZW5ndGggPSAwOwotICAgIH0KLSAgICB9Ci0KLSAgICByZXR1
cm4gdGhpczsKLSAgICB9LAotCi0gICAgY2xvbmU6IGZ1bmN0aW9uKCBkYXRhQW5kRXZlbnRzLCBk
ZWVwRGF0YUFuZEV2ZW50cyApIHsKLSAgICBkYXRhQW5kRXZlbnRzID0gZGF0YUFuZEV2ZW50cyA9
PSBudWxsID8gZmFsc2UgOiBkYXRhQW5kRXZlbnRzOwotICAgIGRlZXBEYXRhQW5kRXZlbnRzID0g
ZGVlcERhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGRhdGFBbmRFdmVudHMgOiBkZWVwRGF0YUFuZEV2
ZW50czsKLQotICAgIHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24gKCkgewotICAgIHJldHVybiBq
UXVlcnkuY2xvbmUoIHRoaXMsIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICk7Ci0g
ICAgfSk7Ci0gICAgfSwKLQotICAgIGh0bWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKLSAgICByZXR1
cm4galF1ZXJ5LmFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkgewotICAgIHZhciBlbGVt
ID0gdGhpc1swXSB8fCB7fSwKLSAgICBpID0gMCwKLSAgICBsID0gdGhpcy5sZW5ndGg7Ci0KLSAg
ICBpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgKSB7Ci0gICAgcmV0dXJuIGVsZW0ubm9kZVR5cGUg
PT09IDEgPwotICAgIGVsZW0uaW5uZXJIVE1MLnJlcGxhY2UoIHJpbmxpbmVqUXVlcnksICIiICkg
OgotICAgIHVuZGVmaW5lZDsKLSAgICB9Ci0KLSAgICAvLyBTZWUgaWYgd2UgY2FuIHRha2UgYSBz
aG9ydGN1dCBhbmQganVzdCB1c2UgaW5uZXJIVE1MCi0gICAgaWYgKCB0eXBlb2YgdmFsdWUgPT09
ICJzdHJpbmciICYmICFybm9Jbm5lcmh0bWwudGVzdCggdmFsdWUgKSAmJgotICAgICggalF1ZXJ5
LnN1cHBvcnQuaHRtbFNlcmlhbGl6ZSB8fCAhcm5vc2hpbWNhY2hlLnRlc3QoIHZhbHVlICkgICkg
JiYKLSAgICAoIGpRdWVyeS5zdXBwb3J0LmxlYWRpbmdXaGl0ZXNwYWNlIHx8ICFybGVhZGluZ1do
aXRlc3BhY2UudGVzdCggdmFsdWUgKSApICYmCi0gICAgIXdyYXBNYXBbICggcnRhZ05hbWUuZXhl
YyggdmFsdWUgKSB8fCBbIiIsICIiXSApWzFdLnRvTG93ZXJDYXNlKCkgXSApIHsKLQotICAgIHZh
bHVlID0gdmFsdWUucmVwbGFjZSggcnhodG1sVGFnLCAiPCQxPjwvJDI+IiApOwotCi0gICAgdHJ5
IHsKLSAgICBmb3IgKDsgaSA8IGw7IGkrKyApIHsKLSAgICAvLyBSZW1vdmUgZWxlbWVudCBub2Rl
cyBhbmQgcHJldmVudCBtZW1vcnkgbGVha3MKLSAgICBlbGVtID0gdGhpc1tpXSB8fCB7fTsKLSAg
ICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7Ci0gICAgalF1ZXJ5LmNsZWFuRGF0YSggZ2V0
QWxsKCBlbGVtLCBmYWxzZSApICk7Ci0gICAgZWxlbS5pbm5lckhUTUwgPSB2YWx1ZTsKLSAgICB9
Ci0gICAgfQotCi0gICAgZWxlbSA9IDA7Ci0KLSAgICAvLyBJZiB1c2luZyBpbm5lckhUTUwgdGhy
b3dzIGFuIGV4Y2VwdGlvbiwgdXNlIHRoZSBmYWxsYmFjayBtZXRob2QKLSAgICB9IGNhdGNoKGUp
IHt9Ci0gICAgfQotCi0gICAgaWYgKCBlbGVtICkgewotICAgIHRoaXMuZW1wdHkoKS5hcHBlbmQo
IHZhbHVlICk7Ci0gICAgfQotICAgIH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7
Ci0gICAgfSwKLQotICAgIHJlcGxhY2VXaXRoOiBmdW5jdGlvbiggdmFsdWUgKSB7Ci0gICAgdmFy
IGlzRnVuYyA9IGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApOwotCi0gICAgLy8gTWFrZSBzdXJl
IHRoYXQgdGhlIGVsZW1lbnRzIGFyZSByZW1vdmVkIGZyb20gdGhlIERPTSBiZWZvcmUgdGhleSBh
cmUgaW5zZXJ0ZWQKLSAgICAvLyB0aGlzIGNhbiBoZWxwIGZpeCByZXBsYWNpbmcgYSBwYXJlbnQg
d2l0aCBjaGlsZCBlbGVtZW50cwotICAgIGlmICggIWlzRnVuYyAmJiB0eXBlb2YgdmFsdWUgIT09
ICJzdHJpbmciICkgewotICAgIHZhbHVlID0galF1ZXJ5KCB2YWx1ZSApLm5vdCggdGhpcyApLmRl
dGFjaCgpOwotICAgIH0KLQotICAgIHJldHVybiB0aGlzLmRvbU1hbmlwKCBbIHZhbHVlIF0sIHRy
dWUsIGZ1bmN0aW9uKCBlbGVtICkgewotICAgIHZhciBuZXh0ID0gdGhpcy5uZXh0U2libGluZywK
LSAgICBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7Ci0KLSAgICBpZiAoIHBhcmVudCApIHsKLSAg
ICBqUXVlcnkoIHRoaXMgKS5yZW1vdmUoKTsKLSAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKCBlbGVt
LCBuZXh0ICk7Ci0gICAgfQotICAgIH0pOwotICAgIH0sCi0KLSAgICBkZXRhY2g6IGZ1bmN0aW9u
KCBzZWxlY3RvciApIHsKLSAgICByZXR1cm4gdGhpcy5yZW1vdmUoIHNlbGVjdG9yLCB0cnVlICk7
Ci0gICAgfSwKLQotICAgIGRvbU1hbmlwOiBmdW5jdGlvbiggYXJncywgdGFibGUsIGNhbGxiYWNr
ICkgewotCi0gICAgLy8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5cwotICAgIGFyZ3MgPSBjb3Jl
X2NvbmNhdC5hcHBseSggW10sIGFyZ3MgKTsKLQotICAgIHZhciBmaXJzdCwgbm9kZSwgaGFzU2Ny
aXB0cywKLSAgICBzY3JpcHRzLCBkb2MsIGZyYWdtZW50LAotICAgIGkgPSAwLAotICAgIGwgPSB0
aGlzLmxlbmd0aCwKLSAgICBzZXQgPSB0aGlzLAotICAgIGlOb0Nsb25lID0gbCAtIDEsCi0gICAg
dmFsdWUgPSBhcmdzWzBdLAotICAgIGlzRnVuY3Rpb24gPSBqUXVlcnkuaXNGdW5jdGlvbiggdmFs
dWUgKTsKLQotICAgIC8vIFdlIGNhbid0IGNsb25lTm9kZSBmcmFnbWVudHMgdGhhdCBjb250YWlu
IGNoZWNrZWQsIGluIFdlYktpdAotICAgIGlmICggaXNGdW5jdGlvbiB8fCAhKCBsIDw9IDEgfHwg
dHlwZW9mIHZhbHVlICE9PSAic3RyaW5nIiB8fCBqUXVlcnkuc3VwcG9ydC5jaGVja0Nsb25lIHx8
ICFyY2hlY2tlZC50ZXN0KCB2YWx1ZSApICkgKSB7Ci0gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5j
dGlvbiggaW5kZXggKSB7Ci0gICAgdmFyIHNlbGYgPSBzZXQuZXEoIGluZGV4ICk7Ci0gICAgaWYg
KCBpc0Z1bmN0aW9uICkgewotICAgIGFyZ3NbMF0gPSB2YWx1ZS5jYWxsKCB0aGlzLCBpbmRleCwg
dGFibGUgPyBzZWxmLmh0bWwoKSA6IHVuZGVmaW5lZCApOwotICAgIH0KLSAgICBzZWxmLmRvbU1h
bmlwKCBhcmdzLCB0YWJsZSwgY2FsbGJhY2sgKTsKLSAgICB9KTsKLSAgICB9Ci0KLSAgICBpZiAo
IGwgKSB7Ci0gICAgZnJhZ21lbnQgPSBqUXVlcnkuYnVpbGRGcmFnbWVudCggYXJncywgdGhpc1sg
MCBdLm93bmVyRG9jdW1lbnQsIGZhbHNlLCB0aGlzICk7Ci0gICAgZmlyc3QgPSBmcmFnbWVudC5m
aXJzdENoaWxkOwotCi0gICAgaWYgKCBmcmFnbWVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSAp
IHsKLSAgICBmcmFnbWVudCA9IGZpcnN0OwotICAgIH0KLQotICAgIGlmICggZmlyc3QgKSB7Ci0g
ICAgdGFibGUgPSB0YWJsZSAmJiBqUXVlcnkubm9kZU5hbWUoIGZpcnN0LCAidHIiICk7Ci0gICAg
c2NyaXB0cyA9IGpRdWVyeS5tYXAoIGdldEFsbCggZnJhZ21lbnQsICJzY3JpcHQiICksIGRpc2Fi
bGVTY3JpcHQgKTsKLSAgICBoYXNTY3JpcHRzID0gc2NyaXB0cy5sZW5ndGg7Ci0KLSAgICAvLyBV
c2UgdGhlIG9yaWdpbmFsIGZyYWdtZW50IGZvciB0aGUgbGFzdCBpdGVtIGluc3RlYWQgb2YgdGhl
IGZpcnN0IGJlY2F1c2UgaXQgY2FuIGVuZCB1cAotICAgIC8vIGJlaW5nIGVtcHRpZWQgaW5jb3Jy
ZWN0bHkgaW4gY2VydGFpbiBzaXR1YXRpb25zICgjODA3MCkuCi0gICAgZm9yICggOyBpIDwgbDsg
aSsrICkgewotICAgIG5vZGUgPSBmcmFnbWVudDsKLQotICAgIGlmICggaSAhPT0gaU5vQ2xvbmUg
KSB7Ci0gICAgbm9kZSA9IGpRdWVyeS5jbG9uZSggbm9kZSwgdHJ1ZSwgdHJ1ZSApOwotCi0gICAg
Ly8gS2VlcCByZWZlcmVuY2VzIHRvIGNsb25lZCBzY3JpcHRzIGZvciBsYXRlciByZXN0b3JhdGlv
bgotICAgIGlmICggaGFzU2NyaXB0cyApIHsKLSAgICBqUXVlcnkubWVyZ2UoIHNjcmlwdHMsIGdl
dEFsbCggbm9kZSwgInNjcmlwdCIgKSApOwotICAgIH0KLSAgICB9Ci0KLSAgICBjYWxsYmFjay5j
YWxsKAotICAgIHRhYmxlICYmIGpRdWVyeS5ub2RlTmFtZSggdGhpc1tpXSwgInRhYmxlIiApID8K
LSAgICBmaW5kT3JBcHBlbmQoIHRoaXNbaV0sICJ0Ym9keSIgKSA6Ci0gICAgdGhpc1tpXSwKLSAg
ICBub2RlLAotICAgIGkKLSAgICApOwotICAgIH0KLQotICAgIGlmICggaGFzU2NyaXB0cyApIHsK
LSAgICBkb2MgPSBzY3JpcHRzWyBzY3JpcHRzLmxlbmd0aCAtIDEgXS5vd25lckRvY3VtZW50Owot
Ci0gICAgLy8gUmVlbmFibGUgc2NyaXB0cwotICAgIGpRdWVyeS5tYXAoIHNjcmlwdHMsIHJlc3Rv
cmVTY3JpcHQgKTsKLQotICAgIC8vIEV2YWx1YXRlIGV4ZWN1dGFibGUgc2NyaXB0cyBvbiBmaXJz
dCBkb2N1bWVudCBpbnNlcnRpb24KLSAgICBmb3IgKCBpID0gMDsgaSA8IGhhc1NjcmlwdHM7IGkr
KyApIHsKLSAgICBub2RlID0gc2NyaXB0c1sgaSBdOwotICAgIGlmICggcnNjcmlwdFR5cGUudGVz
dCggbm9kZS50eXBlIHx8ICIiICkgJiYKLSAgICAhalF1ZXJ5Ll9kYXRhKCBub2RlLCAiZ2xvYmFs
RXZhbCIgKSAmJiBqUXVlcnkuY29udGFpbnMoIGRvYywgbm9kZSApICkgewotCi0gICAgaWYgKCBu
b2RlLnNyYyApIHsKLSAgICAvLyBIb3BlIGFqYXggaXMgYXZhaWxhYmxlLi4uCi0gICAgalF1ZXJ5
LmFqYXgoewotICAgIHVybDogbm9kZS5zcmMsCi0gICAgdHlwZTogIkdFVCIsCi0gICAgZGF0YVR5
cGU6ICJzY3JpcHQiLAotICAgIGFzeW5jOiBmYWxzZSwKLSAgICBnbG9iYWw6IGZhbHNlLAotICAg
ICJ0aHJvd3MiOiB0cnVlCi0gICAgfSk7Ci0gICAgfSBlbHNlIHsKLSAgICBqUXVlcnkuZ2xvYmFs
RXZhbCggKCBub2RlLnRleHQgfHwgbm9kZS50ZXh0Q29udGVudCB8fCBub2RlLmlubmVySFRNTCB8
fCAiIiApLnJlcGxhY2UoIHJjbGVhblNjcmlwdCwgIiIgKSApOwotICAgIH0KLSAgICB9Ci0gICAg
fQotICAgIH0KLQotICAgIC8vIEZpeCAjMTE4MDk6IEF2b2lkIGxlYWtpbmcgbWVtb3J5Ci0gICAg
ZnJhZ21lbnQgPSBmaXJzdCA9IG51bGw7Ci0gICAgfQotICAgIH0KLQotICAgIHJldHVybiB0aGlz
OwotICAgIH0KLX0pOwotCi1mdW5jdGlvbiBmaW5kT3JBcHBlbmQoIGVsZW0sIHRhZyApIHsKLSAg
ICByZXR1cm4gZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnIClbMF0gfHwgZWxlbS5hcHBl
bmRDaGlsZCggZWxlbS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIHRhZyApICk7Ci19Ci0K
LS8vIFJlcGxhY2UvcmVzdG9yZSB0aGUgdHlwZSBhdHRyaWJ1dGUgb2Ygc2NyaXB0IGVsZW1lbnRz
IGZvciBzYWZlIERPTSBtYW5pcHVsYXRpb24KLWZ1bmN0aW9uIGRpc2FibGVTY3JpcHQoIGVsZW0g
KSB7Ci0gICAgdmFyIGF0dHIgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoInR5cGUiKTsKLSAgICBl
bGVtLnR5cGUgPSAoIGF0dHIgJiYgYXR0ci5zcGVjaWZpZWQgKSArICIvIiArIGVsZW0udHlwZTsK
LSAgICByZXR1cm4gZWxlbTsKLX0KLWZ1bmN0aW9uIHJlc3RvcmVTY3JpcHQoIGVsZW0gKSB7Ci0g
ICAgdmFyIG1hdGNoID0gcnNjcmlwdFR5cGVNYXNrZWQuZXhlYyggZWxlbS50eXBlICk7Ci0gICAg
aWYgKCBtYXRjaCApIHsKLSAgICBlbGVtLnR5cGUgPSBtYXRjaFsxXTsKLSAgICB9IGVsc2Ugewot
ICAgIGVsZW0ucmVtb3ZlQXR0cmlidXRlKCJ0eXBlIik7Ci0gICAgfQotICAgIHJldHVybiBlbGVt
OwotfQotCi0vLyBNYXJrIHNjcmlwdHMgYXMgaGF2aW5nIGFscmVhZHkgYmVlbiBldmFsdWF0ZWQK
LWZ1bmN0aW9uIHNldEdsb2JhbEV2YWwoIGVsZW1zLCByZWZFbGVtZW50cyApIHsKLSAgICB2YXIg
ZWxlbSwKLSAgICBpID0gMDsKLSAgICBmb3IgKCA7IChlbGVtID0gZWxlbXNbaV0pICE9IG51bGw7
IGkrKyApIHsKLSAgICBqUXVlcnkuX2RhdGEoIGVsZW0sICJnbG9iYWxFdmFsIiwgIXJlZkVsZW1l
bnRzIHx8IGpRdWVyeS5fZGF0YSggcmVmRWxlbWVudHNbaV0sICJnbG9iYWxFdmFsIiApICk7Ci0g
ICAgfQotfQotCi1mdW5jdGlvbiBjbG9uZUNvcHlFdmVudCggc3JjLCBkZXN0ICkgewotCi0gICAg
aWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAxIHx8ICFqUXVlcnkuaGFzRGF0YSggc3JjICkgKSB7Ci0g
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIHZhciB0eXBlLCBpLCBsLAotICAgIG9sZERhdGEgPSBq
UXVlcnkuX2RhdGEoIHNyYyApLAotICAgIGN1ckRhdGEgPSBqUXVlcnkuX2RhdGEoIGRlc3QsIG9s
ZERhdGEgKSwKLSAgICBldmVudHMgPSBvbGREYXRhLmV2ZW50czsKLQotICAgIGlmICggZXZlbnRz
ICkgewotICAgIGRlbGV0ZSBjdXJEYXRhLmhhbmRsZTsKLSAgICBjdXJEYXRhLmV2ZW50cyA9IHt9
OwotCi0gICAgZm9yICggdHlwZSBpbiBldmVudHMgKSB7Ci0gICAgZm9yICggaSA9IDAsIGwgPSBl
dmVudHNbIHR5cGUgXS5sZW5ndGg7IGkgPCBsOyBpKysgKSB7Ci0gICAgalF1ZXJ5LmV2ZW50LmFk
ZCggZGVzdCwgdHlwZSwgZXZlbnRzWyB0eXBlIF1bIGkgXSApOwotICAgIH0KLSAgICB9Ci0gICAg
fQotCi0gICAgLy8gbWFrZSB0aGUgY2xvbmVkIHB1YmxpYyBkYXRhIG9iamVjdCBhIGNvcHkgZnJv
bSB0aGUgb3JpZ2luYWwKLSAgICBpZiAoIGN1ckRhdGEuZGF0YSApIHsKLSAgICBjdXJEYXRhLmRh
dGEgPSBqUXVlcnkuZXh0ZW5kKCB7fSwgY3VyRGF0YS5kYXRhICk7Ci0gICAgfQotfQotCi1mdW5j
dGlvbiBmaXhDbG9uZU5vZGVJc3N1ZXMoIHNyYywgZGVzdCApIHsKLSAgICB2YXIgbm9kZU5hbWUs
IGUsIGRhdGE7Ci0KLSAgICAvLyBXZSBkbyBub3QgbmVlZCB0byBkbyBhbnl0aGluZyBmb3Igbm9u
LUVsZW1lbnRzCi0gICAgaWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAxICkgewotICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBub2RlTmFtZSA9IGRlc3Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKLQot
ICAgIC8vIElFNi04IGNvcGllcyBldmVudHMgYm91bmQgdmlhIGF0dGFjaEV2ZW50IHdoZW4gdXNp
bmcgY2xvbmVOb2RlLgotICAgIGlmICggIWpRdWVyeS5zdXBwb3J0Lm5vQ2xvbmVFdmVudCAmJiBk
ZXN0WyBqUXVlcnkuZXhwYW5kbyBdICkgewotICAgIGRhdGEgPSBqUXVlcnkuX2RhdGEoIGRlc3Qg
KTsKLQotICAgIGZvciAoIGUgaW4gZGF0YS5ldmVudHMgKSB7Ci0gICAgalF1ZXJ5LnJlbW92ZUV2
ZW50KCBkZXN0LCBlLCBkYXRhLmhhbmRsZSApOwotICAgIH0KLQotICAgIC8vIEV2ZW50IGRhdGEg
Z2V0cyByZWZlcmVuY2VkIGluc3RlYWQgb2YgY29waWVkIGlmIHRoZSBleHBhbmRvIGdldHMgY29w
aWVkIHRvbwotICAgIGRlc3QucmVtb3ZlQXR0cmlidXRlKCBqUXVlcnkuZXhwYW5kbyApOwotICAg
IH0KLQotICAgIC8vIElFIGJsYW5rcyBjb250ZW50cyB3aGVuIGNsb25pbmcgc2NyaXB0cywgYW5k
IHRyaWVzIHRvIGV2YWx1YXRlIG5ld2x5LXNldCB0ZXh0Ci0gICAgaWYgKCBub2RlTmFtZSA9PT0g
InNjcmlwdCIgJiYgZGVzdC50ZXh0ICE9PSBzcmMudGV4dCApIHsKLSAgICBkaXNhYmxlU2NyaXB0
KCBkZXN0ICkudGV4dCA9IHNyYy50ZXh0OwotICAgIHJlc3RvcmVTY3JpcHQoIGRlc3QgKTsKLQot
ICAgIC8vIElFNi0xMCBpbXByb3Blcmx5IGNsb25lcyBjaGlsZHJlbiBvZiBvYmplY3QgZWxlbWVu
dHMgdXNpbmcgY2xhc3NpZC4KLSAgICAvLyBJRTEwIHRocm93cyBOb01vZGlmaWNhdGlvbkFsbG93
ZWRFcnJvciBpZiBwYXJlbnQgaXMgbnVsbCwgIzEyMTMyLgotICAgIH0gZWxzZSBpZiAoIG5vZGVO
YW1lID09PSAib2JqZWN0IiApIHsKLSAgICBpZiAoIGRlc3QucGFyZW50Tm9kZSApIHsKLSAgICBk
ZXN0Lm91dGVySFRNTCA9IHNyYy5vdXRlckhUTUw7Ci0gICAgfQotCi0gICAgLy8gVGhpcyBwYXRo
IGFwcGVhcnMgdW5hdm9pZGFibGUgZm9yIElFOS4gV2hlbiBjbG9uaW5nIGFuIG9iamVjdAotICAg
IC8vIGVsZW1lbnQgaW4gSUU5LCB0aGUgb3V0ZXJIVE1MIHN0cmF0ZWd5IGFib3ZlIGlzIG5vdCBz
dWZmaWNpZW50LgotICAgIC8vIElmIHRoZSBzcmMgaGFzIGlubmVySFRNTCBhbmQgdGhlIGRlc3Rp
bmF0aW9uIGRvZXMgbm90LAotICAgIC8vIGNvcHkgdGhlIHNyYy5pbm5lckhUTUwgaW50byB0aGUg
ZGVzdC5pbm5lckhUTUwuICMxMDMyNAotICAgIGlmICggalF1ZXJ5LnN1cHBvcnQuaHRtbDVDbG9u
ZSAmJiAoIHNyYy5pbm5lckhUTUwgJiYgIWpRdWVyeS50cmltKGRlc3QuaW5uZXJIVE1MKSApICkg
ewotICAgIGRlc3QuaW5uZXJIVE1MID0gc3JjLmlubmVySFRNTDsKLSAgICB9Ci0KLSAgICB9IGVs
c2UgaWYgKCBub2RlTmFtZSA9PT0gImlucHV0IiAmJiBtYW5pcHVsYXRpb25fcmNoZWNrYWJsZVR5
cGUudGVzdCggc3JjLnR5cGUgKSApIHsKLSAgICAvLyBJRTYtOCBmYWlscyB0byBwZXJzaXN0IHRo
ZSBjaGVja2VkIHN0YXRlIG9mIGEgY2xvbmVkIGNoZWNrYm94Ci0gICAgLy8gb3IgcmFkaW8gYnV0
dG9uLiBXb3JzZSwgSUU2LTcgZmFpbCB0byBnaXZlIHRoZSBjbG9uZWQgZWxlbWVudAotICAgIC8v
IGEgY2hlY2tlZCBhcHBlYXJhbmNlIGlmIHRoZSBkZWZhdWx0Q2hlY2tlZCB2YWx1ZSBpc24ndCBh
bHNvIHNldAotCi0gICAgZGVzdC5kZWZhdWx0Q2hlY2tlZCA9IGRlc3QuY2hlY2tlZCA9IHNyYy5j
aGVja2VkOwotCi0gICAgLy8gSUU2LTcgZ2V0IGNvbmZ1c2VkIGFuZCBlbmQgdXAgc2V0dGluZyB0
aGUgdmFsdWUgb2YgYSBjbG9uZWQKLSAgICAvLyBjaGVja2JveC9yYWRpbyBidXR0b24gdG8gYW4g
ZW1wdHkgc3RyaW5nIGluc3RlYWQgb2YgIm9uIgotICAgIGlmICggZGVzdC52YWx1ZSAhPT0gc3Jj
LnZhbHVlICkgewotICAgIGRlc3QudmFsdWUgPSBzcmMudmFsdWU7Ci0gICAgfQotCi0gICAgLy8g
SUU2LTggZmFpbHMgdG8gcmV0dXJuIHRoZSBzZWxlY3RlZCBvcHRpb24gdG8gdGhlIGRlZmF1bHQg
c2VsZWN0ZWQKLSAgICAvLyBzdGF0ZSB3aGVuIGNsb25pbmcgb3B0aW9ucwotICAgIH0gZWxzZSBp
ZiAoIG5vZGVOYW1lID09PSAib3B0aW9uIiApIHsKLSAgICBkZXN0LmRlZmF1bHRTZWxlY3RlZCA9
IGRlc3Quc2VsZWN0ZWQgPSBzcmMuZGVmYXVsdFNlbGVjdGVkOwotCi0gICAgLy8gSUU2LTggZmFp
bHMgdG8gc2V0IHRoZSBkZWZhdWx0VmFsdWUgdG8gdGhlIGNvcnJlY3QgdmFsdWUgd2hlbgotICAg
IC8vIGNsb25pbmcgb3RoZXIgdHlwZXMgb2YgaW5wdXQgZmllbGRzCi0gICAgfSBlbHNlIGlmICgg
bm9kZU5hbWUgPT09ICJpbnB1dCIgfHwgbm9kZU5hbWUgPT09ICJ0ZXh0YXJlYSIgKSB7Ci0gICAg
ZGVzdC5kZWZhdWx0VmFsdWUgPSBzcmMuZGVmYXVsdFZhbHVlOwotICAgIH0KLX0KLQotalF1ZXJ5
LmVhY2goewotICAgIGFwcGVuZFRvOiAiYXBwZW5kIiwKLSAgICBwcmVwZW5kVG86ICJwcmVwZW5k
IiwKLSAgICBpbnNlcnRCZWZvcmU6ICJiZWZvcmUiLAotICAgIGluc2VydEFmdGVyOiAiYWZ0ZXIi
LAotICAgIHJlcGxhY2VBbGw6ICJyZXBsYWNlV2l0aCIKLX0sIGZ1bmN0aW9uKCBuYW1lLCBvcmln
aW5hbCApIHsKLSAgICBqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsK
LSAgICB2YXIgZWxlbXMsCi0gICAgaSA9IDAsCi0gICAgcmV0ID0gW10sCi0gICAgaW5zZXJ0ID0g
alF1ZXJ5KCBzZWxlY3RvciApLAotICAgIGxhc3QgPSBpbnNlcnQubGVuZ3RoIC0gMTsKLQotICAg
IGZvciAoIDsgaSA8PSBsYXN0OyBpKysgKSB7Ci0gICAgZWxlbXMgPSBpID09PSBsYXN0ID8gdGhp
cyA6IHRoaXMuY2xvbmUodHJ1ZSk7Ci0gICAgalF1ZXJ5KCBpbnNlcnRbaV0gKVsgb3JpZ2luYWwg
XSggZWxlbXMgKTsKLQotICAgIC8vIE1vZGVybiBicm93c2VycyBjYW4gYXBwbHkgalF1ZXJ5IGNv
bGxlY3Rpb25zIGFzIGFycmF5cywgYnV0IG9sZElFIG5lZWRzIGEgLmdldCgpCi0gICAgY29yZV9w
dXNoLmFwcGx5KCByZXQsIGVsZW1zLmdldCgpICk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRoaXMu
cHVzaFN0YWNrKCByZXQgKTsKLSAgICB9OwotfSk7Ci0KLWZ1bmN0aW9uIGdldEFsbCggY29udGV4
dCwgdGFnICkgewotICAgIHZhciBlbGVtcywgZWxlbSwKLSAgICBpID0gMCwKLSAgICBmb3VuZCA9
IHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBjb3JlX3N0cnVuZGVmaW5l
ZCA/IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyB8fCAiKiIgKSA6Ci0gICAgdHlw
ZW9mIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCAhPT0gY29yZV9zdHJ1bmRlZmluZWQgPyBjb250
ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIHRhZyB8fCAiKiIgKSA6Ci0gICAgdW5kZWZpbmVkOwotCi0g
ICAgaWYgKCAhZm91bmQgKSB7Ci0gICAgZm9yICggZm91bmQgPSBbXSwgZWxlbXMgPSBjb250ZXh0
LmNoaWxkTm9kZXMgfHwgY29udGV4dDsgKGVsZW0gPSBlbGVtc1tpXSkgIT0gbnVsbDsgaSsrICkg
ewotICAgIGlmICggIXRhZyB8fCBqUXVlcnkubm9kZU5hbWUoIGVsZW0sIHRhZyApICkgewotICAg
IGZvdW5kLnB1c2goIGVsZW0gKTsKLSAgICB9IGVsc2UgewotICAgIGpRdWVyeS5tZXJnZSggZm91
bmQsIGdldEFsbCggZWxlbSwgdGFnICkgKTsKLSAgICB9Ci0gICAgfQotICAgIH0KLQotICAgIHJl
dHVybiB0YWcgPT09IHVuZGVmaW5lZCB8fCB0YWcgJiYgalF1ZXJ5Lm5vZGVOYW1lKCBjb250ZXh0
LCB0YWcgKSA/Ci0gICAgalF1ZXJ5Lm1lcmdlKCBbIGNvbnRleHQgXSwgZm91bmQgKSA6Ci0gICAg
Zm91bmQ7Ci19Ci0KLS8vIFVzZWQgaW4gYnVpbGRGcmFnbWVudCwgZml4ZXMgdGhlIGRlZmF1bHRD
aGVja2VkIHByb3BlcnR5Ci1mdW5jdGlvbiBmaXhEZWZhdWx0Q2hlY2tlZCggZWxlbSApIHsKLSAg
ICBpZiAoIG1hbmlwdWxhdGlvbl9yY2hlY2thYmxlVHlwZS50ZXN0KCBlbGVtLnR5cGUgKSApIHsK
LSAgICBlbGVtLmRlZmF1bHRDaGVja2VkID0gZWxlbS5jaGVja2VkOwotICAgIH0KLX0KLQotalF1
ZXJ5LmV4dGVuZCh7Ci0gICAgY2xvbmU6IGZ1bmN0aW9uKCBlbGVtLCBkYXRhQW5kRXZlbnRzLCBk
ZWVwRGF0YUFuZEV2ZW50cyApIHsKLSAgICB2YXIgZGVzdEVsZW1lbnRzLCBub2RlLCBjbG9uZSwg
aSwgc3JjRWxlbWVudHMsCi0gICAgaW5QYWdlID0galF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVy
RG9jdW1lbnQsIGVsZW0gKTsKLQotICAgIGlmICggalF1ZXJ5LnN1cHBvcnQuaHRtbDVDbG9uZSB8
fCBqUXVlcnkuaXNYTUxEb2MoZWxlbSkgfHwgIXJub3NoaW1jYWNoZS50ZXN0KCAiPCIgKyBlbGVt
Lm5vZGVOYW1lICsgIj4iICkgKSB7Ci0gICAgY2xvbmUgPSBlbGVtLmNsb25lTm9kZSggdHJ1ZSAp
OwotCi0gICAgLy8gSUU8PTggZG9lcyBub3QgcHJvcGVybHkgY2xvbmUgZGV0YWNoZWQsIHVua25v
d24gZWxlbWVudCBub2RlcwotICAgIH0gZWxzZSB7Ci0gICAgZnJhZ21lbnREaXYuaW5uZXJIVE1M
ID0gZWxlbS5vdXRlckhUTUw7Ci0gICAgZnJhZ21lbnREaXYucmVtb3ZlQ2hpbGQoIGNsb25lID0g
ZnJhZ21lbnREaXYuZmlyc3RDaGlsZCApOwotICAgIH0KLQotICAgIGlmICggKCFqUXVlcnkuc3Vw
cG9ydC5ub0Nsb25lRXZlbnQgfHwgIWpRdWVyeS5zdXBwb3J0Lm5vQ2xvbmVDaGVja2VkKSAmJgot
ICAgIChlbGVtLm5vZGVUeXBlID09PSAxIHx8IGVsZW0ubm9kZVR5cGUgPT09IDExKSAmJiAhalF1
ZXJ5LmlzWE1MRG9jKGVsZW0pICkgewotCi0gICAgLy8gV2UgZXNjaGV3IFNpenpsZSBoZXJlIGZv
ciBwZXJmb3JtYW5jZSByZWFzb25zOiBodHRwOi8vanNwZXJmLmNvbS9nZXRhbGwtdnMtc2l6emxl
LzIKLSAgICBkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lICk7Ci0gICAgc3JjRWxlbWVudHMg
PSBnZXRBbGwoIGVsZW0gKTsKLQotICAgIC8vIEZpeCBhbGwgSUUgY2xvbmluZyBpc3N1ZXMKLSAg
ICBmb3IgKCBpID0gMDsgKG5vZGUgPSBzcmNFbGVtZW50c1tpXSkgIT0gbnVsbDsgKytpICkgewot
ICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBkZXN0aW5hdGlvbiBub2RlIGlzIG5vdCBudWxsOyBGaXhl
cyAjOTU4NwotICAgIGlmICggZGVzdEVsZW1lbnRzW2ldICkgewotICAgIGZpeENsb25lTm9kZUlz
c3Vlcyggbm9kZSwgZGVzdEVsZW1lbnRzW2ldICk7Ci0gICAgfQotICAgIH0KLSAgICB9Ci0KLSAg
ICAvLyBDb3B5IHRoZSBldmVudHMgZnJvbSB0aGUgb3JpZ2luYWwgdG8gdGhlIGNsb25lCi0gICAg
aWYgKCBkYXRhQW5kRXZlbnRzICkgewotICAgIGlmICggZGVlcERhdGFBbmRFdmVudHMgKSB7Ci0g
ICAgc3JjRWxlbWVudHMgPSBzcmNFbGVtZW50cyB8fCBnZXRBbGwoIGVsZW0gKTsKLSAgICBkZXN0
RWxlbWVudHMgPSBkZXN0RWxlbWVudHMgfHwgZ2V0QWxsKCBjbG9uZSApOwotCi0gICAgZm9yICgg
aSA9IDA7IChub2RlID0gc3JjRWxlbWVudHNbaV0pICE9IG51bGw7IGkrKyApIHsKLSAgICBjbG9u
ZUNvcHlFdmVudCggbm9kZSwgZGVzdEVsZW1lbnRzW2ldICk7Ci0gICAgfQotICAgIH0gZWxzZSB7
Ci0gICAgY2xvbmVDb3B5RXZlbnQoIGVsZW0sIGNsb25lICk7Ci0gICAgfQotICAgIH0KLQotICAg
IC8vIFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3RvcnkKLSAgICBkZXN0RWxlbWVudHMg
PSBnZXRBbGwoIGNsb25lLCAic2NyaXB0IiApOwotICAgIGlmICggZGVzdEVsZW1lbnRzLmxlbmd0
aCA+IDAgKSB7Ci0gICAgc2V0R2xvYmFsRXZhbCggZGVzdEVsZW1lbnRzLCAhaW5QYWdlICYmIGdl
dEFsbCggZWxlbSwgInNjcmlwdCIgKSApOwotICAgIH0KLQotICAgIGRlc3RFbGVtZW50cyA9IHNy
Y0VsZW1lbnRzID0gbm9kZSA9IG51bGw7Ci0KLSAgICAvLyBSZXR1cm4gdGhlIGNsb25lZCBzZXQK
LSAgICByZXR1cm4gY2xvbmU7Ci0gICAgfSwKLQotICAgIGJ1aWxkRnJhZ21lbnQ6IGZ1bmN0aW9u
KCBlbGVtcywgY29udGV4dCwgc2NyaXB0cywgc2VsZWN0aW9uICkgewotICAgIHZhciBqLCBlbGVt
LCBjb250YWlucywKLSAgICB0bXAsIHRhZywgdGJvZHksIHdyYXAsCi0gICAgbCA9IGVsZW1zLmxl
bmd0aCwKLQotICAgIC8vIEVuc3VyZSBhIHNhZmUgZnJhZ21lbnQKLSAgICBzYWZlID0gY3JlYXRl
U2FmZUZyYWdtZW50KCBjb250ZXh0ICksCi0KLSAgICBub2RlcyA9IFtdLAotICAgIGkgPSAwOwot
Ci0gICAgZm9yICggOyBpIDwgbDsgaSsrICkgewotICAgIGVsZW0gPSBlbGVtc1sgaSBdOwotCi0g
ICAgaWYgKCBlbGVtIHx8IGVsZW0gPT09IDAgKSB7Ci0KLSAgICAvLyBBZGQgbm9kZXMgZGlyZWN0
bHkKLSAgICBpZiAoIGpRdWVyeS50eXBlKCBlbGVtICkgPT09ICJvYmplY3QiICkgewotICAgIGpR
dWVyeS5tZXJnZSggbm9kZXMsIGVsZW0ubm9kZVR5cGUgPyBbIGVsZW0gXSA6IGVsZW0gKTsKLQot
ICAgIC8vIENvbnZlcnQgbm9uLWh0bWwgaW50byBhIHRleHQgbm9kZQotICAgIH0gZWxzZSBpZiAo
ICFyaHRtbC50ZXN0KCBlbGVtICkgKSB7Ci0gICAgbm9kZXMucHVzaCggY29udGV4dC5jcmVhdGVU
ZXh0Tm9kZSggZWxlbSApICk7Ci0KLSAgICAvLyBDb252ZXJ0IGh0bWwgaW50byBET00gbm9kZXMK
LSAgICB9IGVsc2UgewotICAgIHRtcCA9IHRtcCB8fCBzYWZlLmFwcGVuZENoaWxkKCBjb250ZXh0
LmNyZWF0ZUVsZW1lbnQoImRpdiIpICk7Ci0KLSAgICAvLyBEZXNlcmlhbGl6ZSBhIHN0YW5kYXJk
IHJlcHJlc2VudGF0aW9uCi0gICAgdGFnID0gKCBydGFnTmFtZS5leGVjKCBlbGVtICkgfHwgWyIi
LCAiIl0gKVsxXS50b0xvd2VyQ2FzZSgpOwotICAgIHdyYXAgPSB3cmFwTWFwWyB0YWcgXSB8fCB3
cmFwTWFwLl9kZWZhdWx0OwotCi0gICAgdG1wLmlubmVySFRNTCA9IHdyYXBbMV0gKyBlbGVtLnJl
cGxhY2UoIHJ4aHRtbFRhZywgIjwkMT48LyQyPiIgKSArIHdyYXBbMl07Ci0KLSAgICAvLyBEZXNj
ZW5kIHRocm91Z2ggd3JhcHBlcnMgdG8gdGhlIHJpZ2h0IGNvbnRlbnQKLSAgICBqID0gd3JhcFsw
XTsKLSAgICB3aGlsZSAoIGotLSApIHsKLSAgICB0bXAgPSB0bXAubGFzdENoaWxkOwotICAgIH0K
LQotICAgIC8vIE1hbnVhbGx5IGFkZCBsZWFkaW5nIHdoaXRlc3BhY2UgcmVtb3ZlZCBieSBJRQot
ICAgIGlmICggIWpRdWVyeS5zdXBwb3J0LmxlYWRpbmdXaGl0ZXNwYWNlICYmIHJsZWFkaW5nV2hp
dGVzcGFjZS50ZXN0KCBlbGVtICkgKSB7Ci0gICAgbm9kZXMucHVzaCggY29udGV4dC5jcmVhdGVU
ZXh0Tm9kZSggcmxlYWRpbmdXaGl0ZXNwYWNlLmV4ZWMoIGVsZW0gKVswXSApICk7Ci0gICAgfQot
Ci0gICAgLy8gUmVtb3ZlIElFJ3MgYXV0b2luc2VydGVkIDx0Ym9keT4gZnJvbSB0YWJsZSBmcmFn
bWVudHMKLSAgICBpZiAoICFqUXVlcnkuc3VwcG9ydC50Ym9keSApIHsKLQotICAgIC8vIFN0cmlu
ZyB3YXMgYSA8dGFibGU+LCAqbWF5KiBoYXZlIHNwdXJpb3VzIDx0Ym9keT4KLSAgICBlbGVtID0g
dGFnID09PSAidGFibGUiICYmICFydGJvZHkudGVzdCggZWxlbSApID8KLSAgICB0bXAuZmlyc3RD
aGlsZCA6Ci0KLSAgICAvLyBTdHJpbmcgd2FzIGEgYmFyZSA8dGhlYWQ+IG9yIDx0Zm9vdD4KLSAg
ICB3cmFwWzFdID09PSAiPHRhYmxlPiIgJiYgIXJ0Ym9keS50ZXN0KCBlbGVtICkgPwotICAgIHRt
cCA6Ci0gICAgMDsKLQotICAgIGogPSBlbGVtICYmIGVsZW0uY2hpbGROb2Rlcy5sZW5ndGg7Ci0g
ICAgd2hpbGUgKCBqLS0gKSB7Ci0gICAgaWYgKCBqUXVlcnkubm9kZU5hbWUoICh0Ym9keSA9IGVs
ZW0uY2hpbGROb2Rlc1tqXSksICJ0Ym9keSIgKSAmJiAhdGJvZHkuY2hpbGROb2Rlcy5sZW5ndGgg
KSB7Ci0gICAgZWxlbS5yZW1vdmVDaGlsZCggdGJvZHkgKTsKLSAgICB9Ci0gICAgfQotICAgIH0K
LQotICAgIGpRdWVyeS5tZXJnZSggbm9kZXMsIHRtcC5jaGlsZE5vZGVzICk7Ci0KLSAgICAvLyBG
aXggIzEyMzkyIGZvciBXZWJLaXQgYW5kIElFID4gOQotICAgIHRtcC50ZXh0Q29udGVudCA9ICIi
OwotCi0gICAgLy8gRml4ICMxMjM5MiBmb3Igb2xkSUUKLSAgICB3aGlsZSAoIHRtcC5maXJzdENo
aWxkICkgewotICAgIHRtcC5yZW1vdmVDaGlsZCggdG1wLmZpcnN0Q2hpbGQgKTsKLSAgICB9Ci0K
LSAgICAvLyBSZW1lbWJlciB0aGUgdG9wLWxldmVsIGNvbnRhaW5lciBmb3IgcHJvcGVyIGNsZWFu
dXAKLSAgICB0bXAgPSBzYWZlLmxhc3RDaGlsZDsKLSAgICB9Ci0gICAgfQotICAgIH0KLQotICAg
IC8vIEZpeCAjMTEzNTY6IENsZWFyIGVsZW1lbnRzIGZyb20gZnJhZ21lbnQKLSAgICBpZiAoIHRt
cCApIHsKLSAgICBzYWZlLnJlbW92ZUNoaWxkKCB0bXAgKTsKLSAgICB9Ci0KLSAgICAvLyBSZXNl
dCBkZWZhdWx0Q2hlY2tlZCBmb3IgYW55IHJhZGlvcyBhbmQgY2hlY2tib3hlcwotICAgIC8vIGFi
b3V0IHRvIGJlIGFwcGVuZGVkIHRvIHRoZSBET00gaW4gSUUgNi83ICgjODA2MCkKLSAgICBpZiAo
ICFqUXVlcnkuc3VwcG9ydC5hcHBlbmRDaGVja2VkICkgewotICAgIGpRdWVyeS5ncmVwKCBnZXRB
bGwoIG5vZGVzLCAiaW5wdXQiICksIGZpeERlZmF1bHRDaGVja2VkICk7Ci0gICAgfQotCi0gICAg
aSA9IDA7Ci0gICAgd2hpbGUgKCAoZWxlbSA9IG5vZGVzWyBpKysgXSkgKSB7Ci0KLSAgICAvLyAj
NDA4NyAtIElmIG9yaWdpbiBhbmQgZGVzdGluYXRpb24gZWxlbWVudHMgYXJlIHRoZSBzYW1lLCBh
bmQgdGhpcyBpcwotICAgIC8vIHRoYXQgZWxlbWVudCwgZG8gbm90IGRvIGFueXRoaW5nCi0gICAg
aWYgKCBzZWxlY3Rpb24gJiYgalF1ZXJ5LmluQXJyYXkoIGVsZW0sIHNlbGVjdGlvbiApICE9PSAt
MSApIHsKLSAgICBjb250aW51ZTsKLSAgICB9Ci0KLSAgICBjb250YWlucyA9IGpRdWVyeS5jb250
YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICk7Ci0KLSAgICAvLyBBcHBlbmQgdG8gZnJh
Z21lbnQKLSAgICB0bXAgPSBnZXRBbGwoIHNhZmUuYXBwZW5kQ2hpbGQoIGVsZW0gKSwgInNjcmlw
dCIgKTsKLQotICAgIC8vIFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3RvcnkKLSAgICBp
ZiAoIGNvbnRhaW5zICkgewotICAgIHNldEdsb2JhbEV2YWwoIHRtcCApOwotICAgIH0KLQotICAg
IC8vIENhcHR1cmUgZXhlY3V0YWJsZXMKLSAgICBpZiAoIHNjcmlwdHMgKSB7Ci0gICAgaiA9IDA7
Ci0gICAgd2hpbGUgKCAoZWxlbSA9IHRtcFsgaisrIF0pICkgewotICAgIGlmICggcnNjcmlwdFR5
cGUudGVzdCggZWxlbS50eXBlIHx8ICIiICkgKSB7Ci0gICAgc2NyaXB0cy5wdXNoKCBlbGVtICk7
Ci0gICAgfQotICAgIH0KLSAgICB9Ci0gICAgfQotCi0gICAgdG1wID0gbnVsbDsKLQotICAgIHJl
dHVybiBzYWZlOwotICAgIH0sCi0KLSAgICBjbGVhbkRhdGE6IGZ1bmN0aW9uKCBlbGVtcywgLyog
aW50ZXJuYWwgKi8gYWNjZXB0RGF0YSApIHsKLSAgICB2YXIgZWxlbSwgdHlwZSwgaWQsIGRhdGEs
Ci0gICAgaSA9IDAsCi0gICAgaW50ZXJuYWxLZXkgPSBqUXVlcnkuZXhwYW5kbywKLSAgICBjYWNo
ZSA9IGpRdWVyeS5jYWNoZSwKLSAgICBkZWxldGVFeHBhbmRvID0galF1ZXJ5LnN1cHBvcnQuZGVs
ZXRlRXhwYW5kbywKLSAgICBzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWw7Ci0KLSAgICBm
b3IgKCA7IChlbGVtID0gZWxlbXNbaV0pICE9IG51bGw7IGkrKyApIHsKLQotICAgIGlmICggYWNj
ZXB0RGF0YSB8fCBqUXVlcnkuYWNjZXB0RGF0YSggZWxlbSApICkgewotCi0gICAgaWQgPSBlbGVt
WyBpbnRlcm5hbEtleSBdOwotICAgIGRhdGEgPSBpZCAmJiBjYWNoZVsgaWQgXTsKLQotICAgIGlm
ICggZGF0YSApIHsKLSAgICBpZiAoIGRhdGEuZXZlbnRzICkgewotICAgIGZvciAoIHR5cGUgaW4g
ZGF0YS5ldmVudHMgKSB7Ci0gICAgaWYgKCBzcGVjaWFsWyB0eXBlIF0gKSB7Ci0gICAgalF1ZXJ5
LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSApOwotCi0gICAgLy8gVGhpcyBpcyBhIHNob3J0Y3V0
IHRvIGF2b2lkIGpRdWVyeS5ldmVudC5yZW1vdmUncyBvdmVyaGVhZAotICAgIH0gZWxzZSB7Ci0g
ICAgalF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBkYXRhLmhhbmRsZSApOwotICAgIH0K
LSAgICB9Ci0gICAgfQotCi0gICAgLy8gUmVtb3ZlIGNhY2hlIG9ubHkgaWYgaXQgd2FzIG5vdCBh
bHJlYWR5IHJlbW92ZWQgYnkgalF1ZXJ5LmV2ZW50LnJlbW92ZQotICAgIGlmICggY2FjaGVbIGlk
IF0gKSB7Ci0KLSAgICBkZWxldGUgY2FjaGVbIGlkIF07Ci0KLSAgICAvLyBJRSBkb2VzIG5vdCBh
bGxvdyB1cyB0byBkZWxldGUgZXhwYW5kbyBwcm9wZXJ0aWVzIGZyb20gbm9kZXMsCi0gICAgLy8g
bm9yIGRvZXMgaXQgaGF2ZSBhIHJlbW92ZUF0dHJpYnV0ZSBmdW5jdGlvbiBvbiBEb2N1bWVudCBu
b2RlczsKLSAgICAvLyB3ZSBtdXN0IGhhbmRsZSBhbGwgb2YgdGhlc2UgY2FzZXMKLSAgICBpZiAo
IGRlbGV0ZUV4cGFuZG8gKSB7Ci0gICAgZGVsZXRlIGVsZW1bIGludGVybmFsS2V5IF07Ci0KLSAg
ICB9IGVsc2UgaWYgKCB0eXBlb2YgZWxlbS5yZW1vdmVBdHRyaWJ1dGUgIT09IGNvcmVfc3RydW5k
ZWZpbmVkICkgewotICAgIGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBpbnRlcm5hbEtleSApOwotCi0g
ICAgfSBlbHNlIHsKLSAgICBlbGVtWyBpbnRlcm5hbEtleSBdID0gbnVsbDsKLSAgICB9Ci0KLSAg
ICBjb3JlX2RlbGV0ZWRJZHMucHVzaCggaWQgKTsKLSAgICB9Ci0gICAgfQotICAgIH0KLSAgICB9
Ci0gICAgfQotfSk7Ci12YXIgaWZyYW1lLCBnZXRTdHlsZXMsIGN1ckNTUywKLSAgICByYWxwaGEg
PSAvYWxwaGFcKFteKV0qXCkvaSwKLSAgICByb3BhY2l0eSA9IC9vcGFjaXR5XHMqPVxzKihbXild
KikvLAotICAgIHJwb3NpdGlvbiA9IC9eKHRvcHxyaWdodHxib3R0b218bGVmdCkkLywKLSAgICAv
LyBzd2FwcGFibGUgaWYgZGlzcGxheSBpcyBub25lIG9yIHN0YXJ0cyB3aXRoIHRhYmxlIGV4Y2Vw
dCAidGFibGUiLCAidGFibGUtY2VsbCIsIG9yICJ0YWJsZS1jYXB0aW9uIgotICAgIC8vIHNlZSBo
ZXJlIGZvciBkaXNwbGF5IHZhbHVlczogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4t
VVMvZG9jcy9DU1MvZGlzcGxheQotICAgIHJkaXNwbGF5c3dhcCA9IC9eKG5vbmV8dGFibGUoPyEt
Y1tlYV0pLispLywKLSAgICBybWFyZ2luID0gL15tYXJnaW4vLAotICAgIHJudW1zcGxpdCA9IG5l
dyBSZWdFeHAoICJeKCIgKyBjb3JlX3BudW0gKyAiKSguKikkIiwgImkiICksCi0gICAgcm51bW5v
bnB4ID0gbmV3IFJlZ0V4cCggIl4oIiArIGNvcmVfcG51bSArICIpKD8hcHgpW2EteiVdKyQiLCAi
aSIgKSwKLSAgICBycmVsTnVtID0gbmV3IFJlZ0V4cCggIl4oWystXSk9KCIgKyBjb3JlX3BudW0g
KyAiKSIsICJpIiApLAotICAgIGVsZW1kaXNwbGF5ID0geyBCT0RZOiAiYmxvY2siIH0sCi0KLSAg
ICBjc3NTaG93ID0geyBwb3NpdGlvbjogImFic29sdXRlIiwgdmlzaWJpbGl0eTogImhpZGRlbiIs
IGRpc3BsYXk6ICJibG9jayIgfSwKLSAgICBjc3NOb3JtYWxUcmFuc2Zvcm0gPSB7Ci0gICAgbGV0
dGVyU3BhY2luZzogMCwKLSAgICBmb250V2VpZ2h0OiA0MDAKLSAgICB9LAotCi0gICAgY3NzRXhw
YW5kID0gWyAiVG9wIiwgIlJpZ2h0IiwgIkJvdHRvbSIsICJMZWZ0IiBdLAotICAgIGNzc1ByZWZp
eGVzID0gWyAiV2Via2l0IiwgIk8iLCAiTW96IiwgIm1zIiBdOwotCi0vLyByZXR1cm4gYSBjc3Mg
cHJvcGVydHkgbWFwcGVkIHRvIGEgcG90ZW50aWFsbHkgdmVuZG9yIHByZWZpeGVkIHByb3BlcnR5
Ci1mdW5jdGlvbiB2ZW5kb3JQcm9wTmFtZSggc3R5bGUsIG5hbWUgKSB7Ci0KLSAgICAvLyBzaG9y
dGN1dCBmb3IgbmFtZXMgdGhhdCBhcmUgbm90IHZlbmRvciBwcmVmaXhlZAotICAgIGlmICggbmFt
ZSBpbiBzdHlsZSApIHsKLSAgICByZXR1cm4gbmFtZTsKLSAgICB9Ci0KLSAgICAvLyBjaGVjayBm
b3IgdmVuZG9yIHByZWZpeGVkIG5hbWVzCi0gICAgdmFyIGNhcE5hbWUgPSBuYW1lLmNoYXJBdCgw
KS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zbGljZSgxKSwKLSAgICBvcmlnTmFtZSA9IG5hbWUsCi0g
ICAgaSA9IGNzc1ByZWZpeGVzLmxlbmd0aDsKLQotICAgIHdoaWxlICggaS0tICkgewotICAgIG5h
bWUgPSBjc3NQcmVmaXhlc1sgaSBdICsgY2FwTmFtZTsKLSAgICBpZiAoIG5hbWUgaW4gc3R5bGUg
KSB7Ci0gICAgcmV0dXJuIG5hbWU7Ci0gICAgfQotICAgIH0KLQotICAgIHJldHVybiBvcmlnTmFt
ZTsKLX0KLQotZnVuY3Rpb24gaXNIaWRkZW4oIGVsZW0sIGVsICkgewotICAgIC8vIGlzSGlkZGVu
IG1pZ2h0IGJlIGNhbGxlZCBmcm9tIGpRdWVyeSNmaWx0ZXIgZnVuY3Rpb247Ci0gICAgLy8gaW4g
dGhhdCBjYXNlLCBlbGVtZW50IHdpbGwgYmUgc2Vjb25kIGFyZ3VtZW50Ci0gICAgZWxlbSA9IGVs
IHx8IGVsZW07Ci0gICAgcmV0dXJuIGpRdWVyeS5jc3MoIGVsZW0sICJkaXNwbGF5IiApID09PSAi
bm9uZSIgfHwgIWpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICk7Ci19
Ci0KLWZ1bmN0aW9uIHNob3dIaWRlKCBlbGVtZW50cywgc2hvdyApIHsKLSAgICB2YXIgZGlzcGxh
eSwgZWxlbSwgaGlkZGVuLAotICAgIHZhbHVlcyA9IFtdLAotICAgIGluZGV4ID0gMCwKLSAgICBs
ZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7Ci0KLSAgICBmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBp
bmRleCsrICkgewotICAgIGVsZW0gPSBlbGVtZW50c1sgaW5kZXggXTsKLSAgICBpZiAoICFlbGVt
LnN0eWxlICkgewotICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIHZhbHVlc1sgaW5kZXggXSA9
IGpRdWVyeS5fZGF0YSggZWxlbSwgIm9sZGRpc3BsYXkiICk7Ci0gICAgZGlzcGxheSA9IGVsZW0u
c3R5bGUuZGlzcGxheTsKLSAgICBpZiAoIHNob3cgKSB7Ci0gICAgLy8gUmVzZXQgdGhlIGlubGlu
ZSBkaXNwbGF5IG9mIHRoaXMgZWxlbWVudCB0byBsZWFybiBpZiBpdCBpcwotICAgIC8vIGJlaW5n
IGhpZGRlbiBieSBjYXNjYWRlZCBydWxlcyBvciBub3QKLSAgICBpZiAoICF2YWx1ZXNbIGluZGV4
IF0gJiYgZGlzcGxheSA9PT0gIm5vbmUiICkgewotICAgIGVsZW0uc3R5bGUuZGlzcGxheSA9ICIi
OwotICAgIH0KLQotICAgIC8vIFNldCBlbGVtZW50cyB3aGljaCBoYXZlIGJlZW4gb3ZlcnJpZGRl
biB3aXRoIGRpc3BsYXk6IG5vbmUKLSAgICAvLyBpbiBhIHN0eWxlc2hlZXQgdG8gd2hhdGV2ZXIg
dGhlIGRlZmF1bHQgYnJvd3NlciBzdHlsZSBpcwotICAgIC8vIGZvciBzdWNoIGFuIGVsZW1lbnQK
LSAgICBpZiAoIGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gIiIgJiYgaXNIaWRkZW4oIGVsZW0gKSAp
IHsKLSAgICB2YWx1ZXNbIGluZGV4IF0gPSBqUXVlcnkuX2RhdGEoIGVsZW0sICJvbGRkaXNwbGF5
IiwgY3NzX2RlZmF1bHREaXNwbGF5KGVsZW0ubm9kZU5hbWUpICk7Ci0gICAgfQotICAgIH0gZWxz
ZSB7Ci0KLSAgICBpZiAoICF2YWx1ZXNbIGluZGV4IF0gKSB7Ci0gICAgaGlkZGVuID0gaXNIaWRk
ZW4oIGVsZW0gKTsKLQotICAgIGlmICggZGlzcGxheSAmJiBkaXNwbGF5ICE9PSAibm9uZSIgfHwg
IWhpZGRlbiApIHsKLSAgICBqUXVlcnkuX2RhdGEoIGVsZW0sICJvbGRkaXNwbGF5IiwgaGlkZGVu
ID8gZGlzcGxheSA6IGpRdWVyeS5jc3MoIGVsZW0sICJkaXNwbGF5IiApICk7Ci0gICAgfQotICAg
IH0KLSAgICB9Ci0gICAgfQotCi0gICAgLy8gU2V0IHRoZSBkaXNwbGF5IG9mIG1vc3Qgb2YgdGhl
IGVsZW1lbnRzIGluIGEgc2Vjb25kIGxvb3AKLSAgICAvLyB0byBhdm9pZCB0aGUgY29uc3RhbnQg
cmVmbG93Ci0gICAgZm9yICggaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHsK
LSAgICBlbGVtID0gZWxlbWVudHNbIGluZGV4IF07Ci0gICAgaWYgKCAhZWxlbS5zdHlsZSApIHsK
LSAgICBjb250aW51ZTsKLSAgICB9Ci0gICAgaWYgKCAhc2hvdyB8fCBlbGVtLnN0eWxlLmRpc3Bs
YXkgPT09ICJub25lIiB8fCBlbGVtLnN0eWxlLmRpc3BsYXkgPT09ICIiICkgewotICAgIGVsZW0u
c3R5bGUuZGlzcGxheSA9IHNob3cgPyB2YWx1ZXNbIGluZGV4IF0gfHwgIiIgOiAibm9uZSI7Ci0g
ICAgfQotICAgIH0KLQotICAgIHJldHVybiBlbGVtZW50czsKLX0KLQotalF1ZXJ5LmZuLmV4dGVu
ZCh7Ci0gICAgY3NzOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7Ci0gICAgcmV0dXJuIGpRdWVy
eS5hY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHsKLSAgICB2YXIg
bGVuLCBzdHlsZXMsCi0gICAgbWFwID0ge30sCi0gICAgaSA9IDA7Ci0KLSAgICBpZiAoIGpRdWVy
eS5pc0FycmF5KCBuYW1lICkgKSB7Ci0gICAgc3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICk7Ci0g
ICAgbGVuID0gbmFtZS5sZW5ndGg7Ci0KLSAgICBmb3IgKCA7IGkgPCBsZW47IGkrKyApIHsKLSAg
ICBtYXBbIG5hbWVbIGkgXSBdID0galF1ZXJ5LmNzcyggZWxlbSwgbmFtZVsgaSBdLCBmYWxzZSwg
c3R5bGVzICk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1hcDsKLSAgICB9Ci0KLSAgICByZXR1cm4g
dmFsdWUgIT09IHVuZGVmaW5lZCA/Ci0gICAgalF1ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lLCB2YWx1
ZSApIDoKLSAgICBqUXVlcnkuY3NzKCBlbGVtLCBuYW1lICk7Ci0gICAgfSwgbmFtZSwgdmFsdWUs
IGFyZ3VtZW50cy5sZW5ndGggPiAxICk7Ci0gICAgfSwKLSAgICBzaG93OiBmdW5jdGlvbigpIHsK
LSAgICByZXR1cm4gc2hvd0hpZGUoIHRoaXMsIHRydWUgKTsKLSAgICB9LAotICAgIGhpZGU6IGZ1
bmN0aW9uKCkgewotICAgIHJldHVybiBzaG93SGlkZSggdGhpcyApOwotICAgIH0sCi0gICAgdG9n
Z2xlOiBmdW5jdGlvbiggc3RhdGUgKSB7Ci0gICAgdmFyIGJvb2wgPSB0eXBlb2Ygc3RhdGUgPT09
ICJib29sZWFuIjsKLQotICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7Ci0gICAgaWYg
KCBib29sID8gc3RhdGUgOiBpc0hpZGRlbiggdGhpcyApICkgewotICAgIGpRdWVyeSggdGhpcyAp
LnNob3coKTsKLSAgICB9IGVsc2UgewotICAgIGpRdWVyeSggdGhpcyApLmhpZGUoKTsKLSAgICB9
Ci0gICAgfSk7Ci0gICAgfQotfSk7Ci0KLWpRdWVyeS5leHRlbmQoewotICAgIC8vIEFkZCBpbiBz
dHlsZSBwcm9wZXJ0eSBob29rcyBmb3Igb3ZlcnJpZGluZyB0aGUgZGVmYXVsdAotICAgIC8vIGJl
aGF2aW9yIG9mIGdldHRpbmcgYW5kIHNldHRpbmcgYSBzdHlsZSBwcm9wZXJ0eQotICAgIGNzc0hv
b2tzOiB7Ci0gICAgb3BhY2l0eTogewotICAgIGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVk
ICkgewotICAgIGlmICggY29tcHV0ZWQgKSB7Ci0gICAgLy8gV2Ugc2hvdWxkIGFsd2F5cyBnZXQg
YSBudW1iZXIgYmFjayBmcm9tIG9wYWNpdHkKLSAgICB2YXIgcmV0ID0gY3VyQ1NTKCBlbGVtLCAi
b3BhY2l0eSIgKTsKLSAgICByZXR1cm4gcmV0ID09PSAiIiA/ICIxIiA6IHJldDsKLSAgICB9Ci0g
ICAgfQotICAgIH0KLSAgICB9LAotCi0gICAgLy8gRXhjbHVkZSB0aGUgZm9sbG93aW5nIGNzcyBw
cm9wZXJ0aWVzIHRvIGFkZCBweAotICAgIGNzc051bWJlcjogewotICAgICJjb2x1bW5Db3VudCI6
IHRydWUsCi0gICAgImZpbGxPcGFjaXR5IjogdHJ1ZSwKLSAgICAiZm9udFdlaWdodCI6IHRydWUs
Ci0gICAgImxpbmVIZWlnaHQiOiB0cnVlLAotICAgICJvcGFjaXR5IjogdHJ1ZSwKLSAgICAib3Jw
aGFucyI6IHRydWUsCi0gICAgIndpZG93cyI6IHRydWUsCi0gICAgInpJbmRleCI6IHRydWUsCi0g
ICAgInpvb20iOiB0cnVlCi0gICAgfSwKLQotICAgIC8vIEFkZCBpbiBwcm9wZXJ0aWVzIHdob3Nl
IG5hbWVzIHlvdSB3aXNoIHRvIGZpeCBiZWZvcmUKLSAgICAvLyBzZXR0aW5nIG9yIGdldHRpbmcg
dGhlIHZhbHVlCi0gICAgY3NzUHJvcHM6IHsKLSAgICAvLyBub3JtYWxpemUgZmxvYXQgY3NzIHBy
b3BlcnR5Ci0gICAgImZsb2F0IjogalF1ZXJ5LnN1cHBvcnQuY3NzRmxvYXQgPyAiY3NzRmxvYXQi
IDogInN0eWxlRmxvYXQiCi0gICAgfSwKLQotICAgIC8vIEdldCBhbmQgc2V0IHRoZSBzdHlsZSBw
cm9wZXJ0eSBvbiBhIERPTSBOb2RlCi0gICAgc3R5bGU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2
YWx1ZSwgZXh0cmEgKSB7Ci0gICAgLy8gRG9uJ3Qgc2V0IHN0eWxlcyBvbiB0ZXh0IGFuZCBjb21t
ZW50IG5vZGVzCi0gICAgaWYgKCAhZWxlbSB8fCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0u
bm9kZVR5cGUgPT09IDggfHwgIWVsZW0uc3R5bGUgKSB7Ci0gICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZQot
ICAgIHZhciByZXQsIHR5cGUsIGhvb2tzLAotICAgIG9yaWdOYW1lID0galF1ZXJ5LmNhbWVsQ2Fz
ZSggbmFtZSApLAotICAgIHN0eWxlID0gZWxlbS5zdHlsZTsKLQotICAgIG5hbWUgPSBqUXVlcnku
Y3NzUHJvcHNbIG9yaWdOYW1lIF0gfHwgKCBqUXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0gPSB2
ZW5kb3JQcm9wTmFtZSggc3R5bGUsIG9yaWdOYW1lICkgKTsKLQotICAgIC8vIGdldHMgaG9vayBm
b3IgdGhlIHByZWZpeGVkIHZlcnNpb24KLSAgICAvLyBmb2xsb3dlZCBieSB0aGUgdW5wcmVmaXhl
ZCB2ZXJzaW9uCi0gICAgaG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnku
Y3NzSG9va3NbIG9yaWdOYW1lIF07Ci0KLSAgICAvLyBDaGVjayBpZiB3ZSdyZSBzZXR0aW5nIGEg
dmFsdWUKLSAgICBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7Ci0gICAgdHlwZSA9IHR5cGVv
ZiB2YWx1ZTsKLQotICAgIC8vIGNvbnZlcnQgcmVsYXRpdmUgbnVtYmVyIHN0cmluZ3MgKCs9IG9y
IC09KSB0byByZWxhdGl2ZSBudW1iZXJzLiAjNzM0NQotICAgIGlmICggdHlwZSA9PT0gInN0cmlu
ZyIgJiYgKHJldCA9IHJyZWxOdW0uZXhlYyggdmFsdWUgKSkgKSB7Ci0gICAgdmFsdWUgPSAoIHJl
dFsxXSArIDEgKSAqIHJldFsyXSArIHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUg
KSApOwotICAgIC8vIEZpeGVzIGJ1ZyAjOTIzNwotICAgIHR5cGUgPSAibnVtYmVyIjsKLSAgICB9
Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhhdCBOYU4gYW5kIG51bGwgdmFsdWVzIGFyZW4ndCBzZXQu
IFNlZTogIzcxMTYKLSAgICBpZiAoIHZhbHVlID09IG51bGwgfHwgdHlwZSA9PT0gIm51bWJlciIg
JiYgaXNOYU4oIHZhbHVlICkgKSB7Ci0gICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIElmIGEg
bnVtYmVyIHdhcyBwYXNzZWQgaW4sIGFkZCAncHgnIHRvIHRoZSAoZXhjZXB0IGZvciBjZXJ0YWlu
IENTUyBwcm9wZXJ0aWVzKQotICAgIGlmICggdHlwZSA9PT0gIm51bWJlciIgJiYgIWpRdWVyeS5j
c3NOdW1iZXJbIG9yaWdOYW1lIF0gKSB7Ci0gICAgdmFsdWUgKz0gInB4IjsKLSAgICB9Ci0KLSAg
ICAvLyBGaXhlcyAjODkwOCwgaXQgY2FuIGJlIGRvbmUgbW9yZSBjb3JyZWN0bHkgYnkgc3BlY2lm
aW5nIHNldHRlcnMgaW4gY3NzSG9va3MsCi0gICAgLy8gYnV0IGl0IHdvdWxkIG1lYW4gdG8gZGVm
aW5lIGVpZ2h0IChmb3IgZXZlcnkgcHJvYmxlbWF0aWMgcHJvcGVydHkpIGlkZW50aWNhbCBmdW5j
dGlvbnMKLSAgICBpZiAoICFqUXVlcnkuc3VwcG9ydC5jbGVhckNsb25lU3R5bGUgJiYgdmFsdWUg
PT09ICIiICYmIG5hbWUuaW5kZXhPZigiYmFja2dyb3VuZCIpID09PSAwICkgewotICAgIHN0eWxl
WyBuYW1lIF0gPSAiaW5oZXJpdCI7Ci0gICAgfQotCi0gICAgLy8gSWYgYSBob29rIHdhcyBwcm92
aWRlZCwgdXNlIHRoYXQgdmFsdWUsIG90aGVyd2lzZSBqdXN0IHNldCB0aGUgc3BlY2lmaWVkIHZh
bHVlCi0gICAgaWYgKCAhaG9va3MgfHwgISgic2V0IiBpbiBob29rcykgfHwgKHZhbHVlID0gaG9v
a3Muc2V0KCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSkgIT09IHVuZGVmaW5lZCApIHsKLQotICAgIC8v
IFdyYXBwZWQgdG8gcHJldmVudCBJRSBmcm9tIHRocm93aW5nIGVycm9ycyB3aGVuICdpbnZhbGlk
JyB2YWx1ZXMgYXJlIHByb3ZpZGVkCi0gICAgLy8gRml4ZXMgYnVnICM1NTA5Ci0gICAgdHJ5IHsK
LSAgICBzdHlsZVsgbmFtZSBdID0gdmFsdWU7Ci0gICAgfSBjYXRjaChlKSB7fQotICAgIH0KLQot
ICAgIH0gZWxzZSB7Ci0gICAgLy8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIG5vbi1j
b21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlCi0gICAgaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29r
cyAmJiAocmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBmYWxzZSwgZXh0cmEgKSkgIT09IHVuZGVmaW5l
ZCApIHsKLSAgICByZXR1cm4gcmV0OwotICAgIH0KLQotICAgIC8vIE90aGVyd2lzZSBqdXN0IGdl
dCB0aGUgdmFsdWUgZnJvbSB0aGUgc3R5bGUgb2JqZWN0Ci0gICAgcmV0dXJuIHN0eWxlWyBuYW1l
IF07Ci0gICAgfQotICAgIH0sCi0KLSAgICBjc3M6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBleHRy
YSwgc3R5bGVzICkgewotICAgIHZhciBudW0sIHZhbCwgaG9va3MsCi0gICAgb3JpZ05hbWUgPSBq
UXVlcnkuY2FtZWxDYXNlKCBuYW1lICk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3
b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUKLSAgICBuYW1lID0galF1ZXJ5LmNzc1Byb3BzWyBv
cmlnTmFtZSBdIHx8ICggalF1ZXJ5LmNzc1Byb3BzWyBvcmlnTmFtZSBdID0gdmVuZG9yUHJvcE5h
bWUoIGVsZW0uc3R5bGUsIG9yaWdOYW1lICkgKTsKLQotICAgIC8vIGdldHMgaG9vayBmb3IgdGhl
IHByZWZpeGVkIHZlcnNpb24KLSAgICAvLyBmb2xsb3dlZCBieSB0aGUgdW5wcmVmaXhlZCB2ZXJz
aW9uCi0gICAgaG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9v
a3NbIG9yaWdOYW1lIF07Ci0KLSAgICAvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUg
Y29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZQotICAgIGlmICggaG9va3MgJiYgImdldCIgaW4gaG9v
a3MgKSB7Ci0gICAgdmFsID0gaG9va3MuZ2V0KCBlbGVtLCB0cnVlLCBleHRyYSApOwotICAgIH0K
LQotICAgIC8vIE90aGVyd2lzZSwgaWYgYSB3YXkgdG8gZ2V0IHRoZSBjb21wdXRlZCB2YWx1ZSBl
eGlzdHMsIHVzZSB0aGF0Ci0gICAgaWYgKCB2YWwgPT09IHVuZGVmaW5lZCApIHsKLSAgICB2YWwg
PSBjdXJDU1MoIGVsZW0sIG5hbWUsIHN0eWxlcyApOwotICAgIH0KLQotICAgIC8vY29udmVydCAi
bm9ybWFsIiB0byBjb21wdXRlZCB2YWx1ZQotICAgIGlmICggdmFsID09PSAibm9ybWFsIiAmJiBu
YW1lIGluIGNzc05vcm1hbFRyYW5zZm9ybSApIHsKLSAgICB2YWwgPSBjc3NOb3JtYWxUcmFuc2Zv
cm1bIG5hbWUgXTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4sIGNvbnZlcnRpbmcgdG8gbnVtYmVy
IGlmIGZvcmNlZCBvciBhIHF1YWxpZmllciB3YXMgcHJvdmlkZWQgYW5kIHZhbCBsb29rcyBudW1l
cmljCi0gICAgaWYgKCBleHRyYSA9PT0gIiIgfHwgZXh0cmEgKSB7Ci0gICAgbnVtID0gcGFyc2VG
bG9hdCggdmFsICk7Ci0gICAgcmV0dXJuIGV4dHJhID09PSB0cnVlIHx8IGpRdWVyeS5pc051bWVy
aWMoIG51bSApID8gbnVtIHx8IDAgOiB2YWw7Ci0gICAgfQotICAgIHJldHVybiB2YWw7Ci0gICAg
fSwKLQotICAgIC8vIEEgbWV0aG9kIGZvciBxdWlja2x5IHN3YXBwaW5nIGluL291dCBDU1MgcHJv
cGVydGllcyB0byBnZXQgY29ycmVjdCBjYWxjdWxhdGlvbnMKLSAgICBzd2FwOiBmdW5jdGlvbigg
ZWxlbSwgb3B0aW9ucywgY2FsbGJhY2ssIGFyZ3MgKSB7Ci0gICAgdmFyIHJldCwgbmFtZSwKLSAg
ICBvbGQgPSB7fTsKLQotICAgIC8vIFJlbWVtYmVyIHRoZSBvbGQgdmFsdWVzLCBhbmQgaW5zZXJ0
IHRoZSBuZXcgb25lcwotICAgIGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHsKLSAgICBvbGRbIG5h
bWUgXSA9IGVsZW0uc3R5bGVbIG5hbWUgXTsKLSAgICBlbGVtLnN0eWxlWyBuYW1lIF0gPSBvcHRp
b25zWyBuYW1lIF07Ci0gICAgfQotCi0gICAgcmV0ID0gY2FsbGJhY2suYXBwbHkoIGVsZW0sIGFy
Z3MgfHwgW10gKTsKLQotICAgIC8vIFJldmVydCB0aGUgb2xkIHZhbHVlcwotICAgIGZvciAoIG5h
bWUgaW4gb3B0aW9ucyApIHsKLSAgICBlbGVtLnN0eWxlWyBuYW1lIF0gPSBvbGRbIG5hbWUgXTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gcmV0OwotICAgIH0KLX0pOwotCi0vLyBOT1RFOiB3ZSd2ZSBp
bmNsdWRlZCB0aGUgIndpbmRvdyIgaW4gd2luZG93LmdldENvbXB1dGVkU3R5bGUKLS8vIGJlY2F1
c2UganNkb20gb24gbm9kZS5qcyB3aWxsIGJyZWFrIHdpdGhvdXQgaXQuCi1pZiAoIHdpbmRvdy5n
ZXRDb21wdXRlZFN0eWxlICkgewotICAgIGdldFN0eWxlcyA9IGZ1bmN0aW9uKCBlbGVtICkgewot
ICAgIHJldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggZWxlbSwgbnVsbCApOwotICAgIH07
Ci0KLSAgICBjdXJDU1MgPSBmdW5jdGlvbiggZWxlbSwgbmFtZSwgX2NvbXB1dGVkICkgewotICAg
IHZhciB3aWR0aCwgbWluV2lkdGgsIG1heFdpZHRoLAotICAgIGNvbXB1dGVkID0gX2NvbXB1dGVk
IHx8IGdldFN0eWxlcyggZWxlbSApLAotCi0gICAgLy8gZ2V0UHJvcGVydHlWYWx1ZSBpcyBvbmx5
IG5lZWRlZCBmb3IgLmNzcygnZmlsdGVyJykgaW4gSUU5LCBzZWUgIzEyNTM3Ci0gICAgcmV0ID0g
Y29tcHV0ZWQgPyBjb21wdXRlZC5nZXRQcm9wZXJ0eVZhbHVlKCBuYW1lICkgfHwgY29tcHV0ZWRb
IG5hbWUgXSA6IHVuZGVmaW5lZCwKLSAgICBzdHlsZSA9IGVsZW0uc3R5bGU7Ci0KLSAgICBpZiAo
IGNvbXB1dGVkICkgewotCi0gICAgaWYgKCByZXQgPT09ICIiICYmICFqUXVlcnkuY29udGFpbnMo
IGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApICkgewotICAgIHJldCA9IGpRdWVyeS5zdHlsZSgg
ZWxlbSwgbmFtZSApOwotICAgIH0KLQotICAgIC8vIEEgdHJpYnV0ZSB0byB0aGUgImF3ZXNvbWUg
aGFjayBieSBEZWFuIEVkd2FyZHMiCi0gICAgLy8gQ2hyb21lIDwgMTcgYW5kIFNhZmFyaSA1LjAg
dXNlcyAiY29tcHV0ZWQgdmFsdWUiIGluc3RlYWQgb2YgInVzZWQgdmFsdWUiIGZvciBtYXJnaW4t
cmlnaHQKLSAgICAvLyBTYWZhcmkgNS4xLjcgKGF0IGxlYXN0KSByZXR1cm5zIHBlcmNlbnRhZ2Ug
Zm9yIGEgbGFyZ2VyIHNldCBvZiB2YWx1ZXMsIGJ1dCB3aWR0aCBzZWVtcyB0byBiZSByZWxpYWJs
eSBwaXhlbHMKLSAgICAvLyB0aGlzIGlzIGFnYWluc3QgdGhlIENTU09NIGRyYWZ0IHNwZWM6IGh0
dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nzc29tLyNyZXNvbHZlZC12YWx1ZXMKLSAgICBpZiAoIHJu
dW1ub25weC50ZXN0KCByZXQgKSAmJiBybWFyZ2luLnRlc3QoIG5hbWUgKSApIHsKLQotICAgIC8v
IFJlbWVtYmVyIHRoZSBvcmlnaW5hbCB2YWx1ZXMKLSAgICB3aWR0aCA9IHN0eWxlLndpZHRoOwot
ICAgIG1pbldpZHRoID0gc3R5bGUubWluV2lkdGg7Ci0gICAgbWF4V2lkdGggPSBzdHlsZS5tYXhX
aWR0aDsKLQotICAgIC8vIFB1dCBpbiB0aGUgbmV3IHZhbHVlcyB0byBnZXQgYSBjb21wdXRlZCB2
YWx1ZSBvdXQKLSAgICBzdHlsZS5taW5XaWR0aCA9IHN0eWxlLm1heFdpZHRoID0gc3R5bGUud2lk
dGggPSByZXQ7Ci0gICAgcmV0ID0gY29tcHV0ZWQud2lkdGg7Ci0KLSAgICAvLyBSZXZlcnQgdGhl
IGNoYW5nZWQgdmFsdWVzCi0gICAgc3R5bGUud2lkdGggPSB3aWR0aDsKLSAgICBzdHlsZS5taW5X
aWR0aCA9IG1pbldpZHRoOwotICAgIHN0eWxlLm1heFdpZHRoID0gbWF4V2lkdGg7Ci0gICAgfQot
ICAgIH0KLQotICAgIHJldHVybiByZXQ7Ci0gICAgfTsKLX0gZWxzZSBpZiAoIGRvY3VtZW50LmRv
Y3VtZW50RWxlbWVudC5jdXJyZW50U3R5bGUgKSB7Ci0gICAgZ2V0U3R5bGVzID0gZnVuY3Rpb24o
IGVsZW0gKSB7Ci0gICAgcmV0dXJuIGVsZW0uY3VycmVudFN0eWxlOwotICAgIH07Ci0KLSAgICBj
dXJDU1MgPSBmdW5jdGlvbiggZWxlbSwgbmFtZSwgX2NvbXB1dGVkICkgewotICAgIHZhciBsZWZ0
LCBycywgcnNMZWZ0LAotICAgIGNvbXB1dGVkID0gX2NvbXB1dGVkIHx8IGdldFN0eWxlcyggZWxl
bSApLAotICAgIHJldCA9IGNvbXB1dGVkID8gY29tcHV0ZWRbIG5hbWUgXSA6IHVuZGVmaW5lZCwK
LSAgICBzdHlsZSA9IGVsZW0uc3R5bGU7Ci0KLSAgICAvLyBBdm9pZCBzZXR0aW5nIHJldCB0byBl
bXB0eSBzdHJpbmcgaGVyZQotICAgIC8vIHNvIHdlIGRvbid0IGRlZmF1bHQgdG8gYXV0bwotICAg
IGlmICggcmV0ID09IG51bGwgJiYgc3R5bGUgJiYgc3R5bGVbIG5hbWUgXSApIHsKLSAgICByZXQg
PSBzdHlsZVsgbmFtZSBdOwotICAgIH0KLQotICAgIC8vIEZyb20gdGhlIGF3ZXNvbWUgaGFjayBi
eSBEZWFuIEVkd2FyZHMKLSAgICAvLyBodHRwOi8vZXJpay5lYWUubmV0L2FyY2hpdmVzLzIwMDcv
MDcvMjcvMTguNTQuMTUvI2NvbW1lbnQtMTAyMjkxCi0KLSAgICAvLyBJZiB3ZSdyZSBub3QgZGVh
bGluZyB3aXRoIGEgcmVndWxhciBwaXhlbCBudW1iZXIKLSAgICAvLyBidXQgYSBudW1iZXIgdGhh
dCBoYXMgYSB3ZWlyZCBlbmRpbmcsIHdlIG5lZWQgdG8gY29udmVydCBpdCB0byBwaXhlbHMKLSAg
ICAvLyBidXQgbm90IHBvc2l0aW9uIGNzcyBhdHRyaWJ1dGVzLCBhcyB0aG9zZSBhcmUgcHJvcG9y
dGlvbmFsIHRvIHRoZSBwYXJlbnQgZWxlbWVudCBpbnN0ZWFkCi0gICAgLy8gYW5kIHdlIGNhbid0
IG1lYXN1cmUgdGhlIHBhcmVudCBpbnN0ZWFkIGJlY2F1c2UgaXQgbWlnaHQgdHJpZ2dlciBhICJz
dGFja2luZyBkb2xscyIgcHJvYmxlbQotICAgIGlmICggcm51bW5vbnB4LnRlc3QoIHJldCApICYm
ICFycG9zaXRpb24udGVzdCggbmFtZSApICkgewotCi0gICAgLy8gUmVtZW1iZXIgdGhlIG9yaWdp
bmFsIHZhbHVlcwotICAgIGxlZnQgPSBzdHlsZS5sZWZ0OwotICAgIHJzID0gZWxlbS5ydW50aW1l
U3R5bGU7Ci0gICAgcnNMZWZ0ID0gcnMgJiYgcnMubGVmdDsKLQotICAgIC8vIFB1dCBpbiB0aGUg
bmV3IHZhbHVlcyB0byBnZXQgYSBjb21wdXRlZCB2YWx1ZSBvdXQKLSAgICBpZiAoIHJzTGVmdCAp
IHsKLSAgICBycy5sZWZ0ID0gZWxlbS5jdXJyZW50U3R5bGUubGVmdDsKLSAgICB9Ci0gICAgc3R5
bGUubGVmdCA9IG5hbWUgPT09ICJmb250U2l6ZSIgPyAiMWVtIiA6IHJldDsKLSAgICByZXQgPSBz
dHlsZS5waXhlbExlZnQgKyAicHgiOwotCi0gICAgLy8gUmV2ZXJ0IHRoZSBjaGFuZ2VkIHZhbHVl
cwotICAgIHN0eWxlLmxlZnQgPSBsZWZ0OwotICAgIGlmICggcnNMZWZ0ICkgewotICAgIHJzLmxl
ZnQgPSByc0xlZnQ7Ci0gICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXQgPT09ICIiID8gImF1
dG8iIDogcmV0OwotICAgIH07Ci19Ci0KLWZ1bmN0aW9uIHNldFBvc2l0aXZlTnVtYmVyKCBlbGVt
LCB2YWx1ZSwgc3VidHJhY3QgKSB7Ci0gICAgdmFyIG1hdGNoZXMgPSBybnVtc3BsaXQuZXhlYygg
dmFsdWUgKTsKLSAgICByZXR1cm4gbWF0Y2hlcyA/Ci0gICAgLy8gR3VhcmQgYWdhaW5zdCB1bmRl
ZmluZWQgInN1YnRyYWN0IiwgZS5nLiwgd2hlbiB1c2VkIGFzIGluIGNzc0hvb2tzCi0gICAgTWF0
aC5tYXgoIDAsIG1hdGNoZXNbIDEgXSAtICggc3VidHJhY3QgfHwgMCApICkgKyAoIG1hdGNoZXNb
IDIgXSB8fCAicHgiICkgOgotICAgIHZhbHVlOwotfQotCi1mdW5jdGlvbiBhdWdtZW50V2lkdGhP
ckhlaWdodCggZWxlbSwgbmFtZSwgZXh0cmEsIGlzQm9yZGVyQm94LCBzdHlsZXMgKSB7Ci0gICAg
dmFyIGkgPSBleHRyYSA9PT0gKCBpc0JvcmRlckJveCA/ICJib3JkZXIiIDogImNvbnRlbnQiICkg
PwotICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSB0aGUgcmlnaHQgbWVhc3VyZW1lbnQsIGF2b2lk
IGF1Z21lbnRhdGlvbgotICAgIDQgOgotICAgIC8vIE90aGVyd2lzZSBpbml0aWFsaXplIGZvciBo
b3Jpem9udGFsIG9yIHZlcnRpY2FsIHByb3BlcnRpZXMKLSAgICBuYW1lID09PSAid2lkdGgiID8g
MSA6IDAsCi0KLSAgICB2YWwgPSAwOwotCi0gICAgZm9yICggOyBpIDwgNDsgaSArPSAyICkgewot
ICAgIC8vIGJvdGggYm94IG1vZGVscyBleGNsdWRlIG1hcmdpbiwgc28gYWRkIGl0IGlmIHdlIHdh
bnQgaXQKLSAgICBpZiAoIGV4dHJhID09PSAibWFyZ2luIiApIHsKLSAgICB2YWwgKz0galF1ZXJ5
LmNzcyggZWxlbSwgZXh0cmEgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7Ci0gICAg
fQotCi0gICAgaWYgKCBpc0JvcmRlckJveCApIHsKLSAgICAvLyBib3JkZXItYm94IGluY2x1ZGVz
IHBhZGRpbmcsIHNvIHJlbW92ZSBpdCBpZiB3ZSB3YW50IGNvbnRlbnQKLSAgICBpZiAoIGV4dHJh
ID09PSAiY29udGVudCIgKSB7Ci0gICAgdmFsIC09IGpRdWVyeS5jc3MoIGVsZW0sICJwYWRkaW5n
IiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTsKLSAgICB9Ci0KLSAgICAvLyBhdCB0
aGlzIHBvaW50LCBleHRyYSBpc24ndCBib3JkZXIgbm9yIG1hcmdpbiwgc28gcmVtb3ZlIGJvcmRl
cgotICAgIGlmICggZXh0cmEgIT09ICJtYXJnaW4iICkgewotICAgIHZhbCAtPSBqUXVlcnkuY3Nz
KCBlbGVtLCAiYm9yZGVyIiArIGNzc0V4cGFuZFsgaSBdICsgIldpZHRoIiwgdHJ1ZSwgc3R5bGVz
ICk7Ci0gICAgfQotICAgIH0gZWxzZSB7Ci0gICAgLy8gYXQgdGhpcyBwb2ludCwgZXh0cmEgaXNu
J3QgY29udGVudCwgc28gYWRkIHBhZGRpbmcKLSAgICB2YWwgKz0galF1ZXJ5LmNzcyggZWxlbSwg
InBhZGRpbmciICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApOwotCi0gICAgLy8gYXQg
dGhpcyBwb2ludCwgZXh0cmEgaXNuJ3QgY29udGVudCBub3IgcGFkZGluZywgc28gYWRkIGJvcmRl
cgotICAgIGlmICggZXh0cmEgIT09ICJwYWRkaW5nIiApIHsKLSAgICB2YWwgKz0galF1ZXJ5LmNz
cyggZWxlbSwgImJvcmRlciIgKyBjc3NFeHBhbmRbIGkgXSArICJXaWR0aCIsIHRydWUsIHN0eWxl
cyApOwotICAgIH0KLSAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbDsKLX0KLQotZnVuY3Rp
b24gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgbmFtZSwgZXh0cmEgKSB7Ci0KLSAgICAvLyBTdGFy
dCB3aXRoIG9mZnNldCBwcm9wZXJ0eSwgd2hpY2ggaXMgZXF1aXZhbGVudCB0byB0aGUgYm9yZGVy
LWJveCB2YWx1ZQotICAgIHZhciB2YWx1ZUlzQm9yZGVyQm94ID0gdHJ1ZSwKLSAgICB2YWwgPSBu
YW1lID09PSAid2lkdGgiID8gZWxlbS5vZmZzZXRXaWR0aCA6IGVsZW0ub2Zmc2V0SGVpZ2h0LAot
ICAgIHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApLAotICAgIGlzQm9yZGVyQm94ID0galF1ZXJ5
LnN1cHBvcnQuYm94U2l6aW5nICYmIGpRdWVyeS5jc3MoIGVsZW0sICJib3hTaXppbmciLCBmYWxz
ZSwgc3R5bGVzICkgPT09ICJib3JkZXItYm94IjsKLQotICAgIC8vIHNvbWUgbm9uLWh0bWwgZWxl
bWVudHMgcmV0dXJuIHVuZGVmaW5lZCBmb3Igb2Zmc2V0V2lkdGgsIHNvIGNoZWNrIGZvciBudWxs
L3VuZGVmaW5lZAotICAgIC8vIHN2ZyAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hv
d19idWcuY2dpP2lkPTY0OTI4NQotICAgIC8vIE1hdGhNTCAtIGh0dHBzOi8vYnVnemlsbGEubW96
aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MTY2OAotICAgIGlmICggdmFsIDw9IDAgfHwgdmFs
ID09IG51bGwgKSB7Ci0gICAgLy8gRmFsbCBiYWNrIHRvIGNvbXB1dGVkIHRoZW4gdW5jb21wdXRl
ZCBjc3MgaWYgbmVjZXNzYXJ5Ci0gICAgdmFsID0gY3VyQ1NTKCBlbGVtLCBuYW1lLCBzdHlsZXMg
KTsKLSAgICBpZiAoIHZhbCA8IDAgfHwgdmFsID09IG51bGwgKSB7Ci0gICAgdmFsID0gZWxlbS5z
dHlsZVsgbmFtZSBdOwotICAgIH0KLQotICAgIC8vIENvbXB1dGVkIHVuaXQgaXMgbm90IHBpeGVs
cy4gU3RvcCBoZXJlIGFuZCByZXR1cm4uCi0gICAgaWYgKCBybnVtbm9ucHgudGVzdCh2YWwpICkg
ewotICAgIHJldHVybiB2YWw7Ci0gICAgfQotCi0gICAgLy8gd2UgbmVlZCB0aGUgY2hlY2sgZm9y
IHN0eWxlIGluIGNhc2UgYSBicm93c2VyIHdoaWNoIHJldHVybnMgdW5yZWxpYWJsZSB2YWx1ZXMK
LSAgICAvLyBmb3IgZ2V0Q29tcHV0ZWRTdHlsZSBzaWxlbnRseSBmYWxscyBiYWNrIHRvIHRoZSBy
ZWxpYWJsZSBlbGVtLnN0eWxlCi0gICAgdmFsdWVJc0JvcmRlckJveCA9IGlzQm9yZGVyQm94ICYm
ICggalF1ZXJ5LnN1cHBvcnQuYm94U2l6aW5nUmVsaWFibGUgfHwgdmFsID09PSBlbGVtLnN0eWxl
WyBuYW1lIF0gKTsKLQotICAgIC8vIE5vcm1hbGl6ZSAiIiwgYXV0bywgYW5kIHByZXBhcmUgZm9y
IGV4dHJhCi0gICAgdmFsID0gcGFyc2VGbG9hdCggdmFsICkgfHwgMDsKLSAgICB9Ci0KLSAgICAv
LyB1c2UgdGhlIGFjdGl2ZSBib3gtc2l6aW5nIG1vZGVsIHRvIGFkZC9zdWJ0cmFjdCBpcnJlbGV2
YW50IHN0eWxlcwotICAgIHJldHVybiAoIHZhbCArCi0gICAgYXVnbWVudFdpZHRoT3JIZWlnaHQo
Ci0gICAgZWxlbSwKLSAgICBuYW1lLAotICAgIGV4dHJhIHx8ICggaXNCb3JkZXJCb3ggPyAiYm9y
ZGVyIiA6ICJjb250ZW50IiApLAotICAgIHZhbHVlSXNCb3JkZXJCb3gsCi0gICAgc3R5bGVzCi0g
ICAgKQotICAgICkgKyAicHgiOwotfQotCi0vLyBUcnkgdG8gZGV0ZXJtaW5lIHRoZSBkZWZhdWx0
IGRpc3BsYXkgdmFsdWUgb2YgYW4gZWxlbWVudAotZnVuY3Rpb24gY3NzX2RlZmF1bHREaXNwbGF5
KCBub2RlTmFtZSApIHsKLSAgICB2YXIgZG9jID0gZG9jdW1lbnQsCi0gICAgZGlzcGxheSA9IGVs
ZW1kaXNwbGF5WyBub2RlTmFtZSBdOwotCi0gICAgaWYgKCAhZGlzcGxheSApIHsKLSAgICBkaXNw
bGF5ID0gYWN0dWFsRGlzcGxheSggbm9kZU5hbWUsIGRvYyApOwotCi0gICAgLy8gSWYgdGhlIHNp
bXBsZSB3YXkgZmFpbHMsIHJlYWQgZnJvbSBpbnNpZGUgYW4gaWZyYW1lCi0gICAgaWYgKCBkaXNw
bGF5ID09PSAibm9uZSIgfHwgIWRpc3BsYXkgKSB7Ci0gICAgLy8gVXNlIHRoZSBhbHJlYWR5LWNy
ZWF0ZWQgaWZyYW1lIGlmIHBvc3NpYmxlCi0gICAgaWZyYW1lID0gKCBpZnJhbWUgfHwKLSAgICBq
UXVlcnkoIjxpZnJhbWUgZnJhbWVib3JkZXI9JzAnIHdpZHRoPScwJyBoZWlnaHQ9JzAnLz4iKQot
ICAgIC5jc3MoICJjc3NUZXh0IiwgImRpc3BsYXk6YmxvY2sgIWltcG9ydGFudCIgKQotICAgICku
YXBwZW5kVG8oIGRvYy5kb2N1bWVudEVsZW1lbnQgKTsKLQotICAgIC8vIEFsd2F5cyB3cml0ZSBh
IG5ldyBIVE1MIHNrZWxldG9uIHNvIFdlYmtpdCBhbmQgRmlyZWZveCBkb24ndCBjaG9rZSBvbiBy
ZXVzZQotICAgIGRvYyA9ICggaWZyYW1lWzBdLmNvbnRlbnRXaW5kb3cgfHwgaWZyYW1lWzBdLmNv
bnRlbnREb2N1bWVudCApLmRvY3VtZW50OwotICAgIGRvYy53cml0ZSgiPCFkb2N0eXBlIGh0bWw+
PGh0bWw+PGJvZHk+Iik7Ci0gICAgZG9jLmNsb3NlKCk7Ci0KLSAgICBkaXNwbGF5ID0gYWN0dWFs
RGlzcGxheSggbm9kZU5hbWUsIGRvYyApOwotICAgIGlmcmFtZS5kZXRhY2goKTsKLSAgICB9Ci0K
LSAgICAvLyBTdG9yZSB0aGUgY29ycmVjdCBkZWZhdWx0IGRpc3BsYXkKLSAgICBlbGVtZGlzcGxh
eVsgbm9kZU5hbWUgXSA9IGRpc3BsYXk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRpc3BsYXk7Ci19
Ci0KLS8vIENhbGxlZCBPTkxZIGZyb20gd2l0aGluIGNzc19kZWZhdWx0RGlzcGxheQotZnVuY3Rp
b24gYWN0dWFsRGlzcGxheSggbmFtZSwgZG9jICkgewotICAgIHZhciBlbGVtID0galF1ZXJ5KCBk
b2MuY3JlYXRlRWxlbWVudCggbmFtZSApICkuYXBwZW5kVG8oIGRvYy5ib2R5ICksCi0gICAgZGlz
cGxheSA9IGpRdWVyeS5jc3MoIGVsZW1bMF0sICJkaXNwbGF5IiApOwotICAgIGVsZW0ucmVtb3Zl
KCk7Ci0gICAgcmV0dXJuIGRpc3BsYXk7Ci19Ci0KLWpRdWVyeS5lYWNoKFsgImhlaWdodCIsICJ3
aWR0aCIgXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7Ci0gICAgalF1ZXJ5LmNzc0hvb2tzWyBuYW1l
IF0gPSB7Ci0gICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQsIGV4dHJhICkgewotICAg
IGlmICggY29tcHV0ZWQgKSB7Ci0gICAgLy8gY2VydGFpbiBlbGVtZW50cyBjYW4gaGF2ZSBkaW1l
bnNpb24gaW5mbyBpZiB3ZSBpbnZpc2libHkgc2hvdyB0aGVtCi0gICAgLy8gaG93ZXZlciwgaXQg
bXVzdCBoYXZlIGEgY3VycmVudCBkaXNwbGF5IHN0eWxlIHRoYXQgd291bGQgYmVuZWZpdCBmcm9t
IHRoaXMKLSAgICByZXR1cm4gZWxlbS5vZmZzZXRXaWR0aCA9PT0gMCAmJiByZGlzcGxheXN3YXAu
dGVzdCggalF1ZXJ5LmNzcyggZWxlbSwgImRpc3BsYXkiICkgKSA/Ci0gICAgalF1ZXJ5LnN3YXAo
IGVsZW0sIGNzc1Nob3csIGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBnZXRXaWR0aE9ySGVpZ2h0
KCBlbGVtLCBuYW1lLCBleHRyYSApOwotICAgIH0pIDoKLSAgICBnZXRXaWR0aE9ySGVpZ2h0KCBl
bGVtLCBuYW1lLCBleHRyYSApOwotICAgIH0KLSAgICB9LAotCi0gICAgc2V0OiBmdW5jdGlvbigg
ZWxlbSwgdmFsdWUsIGV4dHJhICkgewotICAgIHZhciBzdHlsZXMgPSBleHRyYSAmJiBnZXRTdHls
ZXMoIGVsZW0gKTsKLSAgICByZXR1cm4gc2V0UG9zaXRpdmVOdW1iZXIoIGVsZW0sIHZhbHVlLCBl
eHRyYSA/Ci0gICAgYXVnbWVudFdpZHRoT3JIZWlnaHQoCi0gICAgZWxlbSwKLSAgICBuYW1lLAot
ICAgIGV4dHJhLAotICAgIGpRdWVyeS5zdXBwb3J0LmJveFNpemluZyAmJiBqUXVlcnkuY3NzKCBl
bGVtLCAiYm94U2l6aW5nIiwgZmFsc2UsIHN0eWxlcyApID09PSAiYm9yZGVyLWJveCIsCi0gICAg
c3R5bGVzCi0gICAgKSA6IDAKLSAgICApOwotICAgIH0KLSAgICB9OwotfSk7Ci0KLWlmICggIWpR
dWVyeS5zdXBwb3J0Lm9wYWNpdHkgKSB7Ci0gICAgalF1ZXJ5LmNzc0hvb2tzLm9wYWNpdHkgPSB7
Ci0gICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7Ci0gICAgLy8gSUUgdXNlcyBm
aWx0ZXJzIGZvciBvcGFjaXR5Ci0gICAgcmV0dXJuIHJvcGFjaXR5LnRlc3QoIChjb21wdXRlZCAm
JiBlbGVtLmN1cnJlbnRTdHlsZSA/IGVsZW0uY3VycmVudFN0eWxlLmZpbHRlciA6IGVsZW0uc3R5
bGUuZmlsdGVyKSB8fCAiIiApID8KLSAgICAoIDAuMDEgKiBwYXJzZUZsb2F0KCBSZWdFeHAuJDEg
KSApICsgIiIgOgotICAgIGNvbXB1dGVkID8gIjEiIDogIiI7Ci0gICAgfSwKLQotICAgIHNldDog
ZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgewotICAgIHZhciBzdHlsZSA9IGVsZW0uc3R5bGUsCi0g
ICAgY3VycmVudFN0eWxlID0gZWxlbS5jdXJyZW50U3R5bGUsCi0gICAgb3BhY2l0eSA9IGpRdWVy
eS5pc051bWVyaWMoIHZhbHVlICkgPyAiYWxwaGEob3BhY2l0eT0iICsgdmFsdWUgKiAxMDAgKyAi
KSIgOiAiIiwKLSAgICBmaWx0ZXIgPSBjdXJyZW50U3R5bGUgJiYgY3VycmVudFN0eWxlLmZpbHRl
ciB8fCBzdHlsZS5maWx0ZXIgfHwgIiI7Ci0KLSAgICAvLyBJRSBoYXMgdHJvdWJsZSB3aXRoIG9w
YWNpdHkgaWYgaXQgZG9lcyBub3QgaGF2ZSBsYXlvdXQKLSAgICAvLyBGb3JjZSBpdCBieSBzZXR0
aW5nIHRoZSB6b29tIGxldmVsCi0gICAgc3R5bGUuem9vbSA9IDE7Ci0KLSAgICAvLyBpZiBzZXR0
aW5nIG9wYWNpdHkgdG8gMSwgYW5kIG5vIG90aGVyIGZpbHRlcnMgZXhpc3QgLSBhdHRlbXB0IHRv
IHJlbW92ZSBmaWx0ZXIgYXR0cmlidXRlICM2NjUyCi0gICAgLy8gaWYgdmFsdWUgPT09ICIiLCB0
aGVuIHJlbW92ZSBpbmxpbmUgb3BhY2l0eSAjMTI2ODUKLSAgICBpZiAoICggdmFsdWUgPj0gMSB8
fCB2YWx1ZSA9PT0gIiIgKSAmJgotICAgIGpRdWVyeS50cmltKCBmaWx0ZXIucmVwbGFjZSggcmFs
cGhhLCAiIiApICkgPT09ICIiICYmCi0gICAgc3R5bGUucmVtb3ZlQXR0cmlidXRlICkgewotCi0g
ICAgLy8gU2V0dGluZyBzdHlsZS5maWx0ZXIgdG8gbnVsbCwgIiIgJiAiICIgc3RpbGwgbGVhdmUg
ImZpbHRlcjoiIGluIHRoZSBjc3NUZXh0Ci0gICAgLy8gaWYgImZpbHRlcjoiIGlzIHByZXNlbnQg
YXQgYWxsLCBjbGVhclR5cGUgaXMgZGlzYWJsZWQsIHdlIHdhbnQgdG8gYXZvaWQgdGhpcwotICAg
IC8vIHN0eWxlLnJlbW92ZUF0dHJpYnV0ZSBpcyBJRSBPbmx5LCBidXQgc28gYXBwYXJlbnRseSBp
cyB0aGlzIGNvZGUgcGF0aC4uLgotICAgIHN0eWxlLnJlbW92ZUF0dHJpYnV0ZSggImZpbHRlciIg
KTsKLQotICAgIC8vIGlmIHRoZXJlIGlzIG5vIGZpbHRlciBzdHlsZSBhcHBsaWVkIGluIGEgY3Nz
IHJ1bGUgb3IgdW5zZXQgaW5saW5lIG9wYWNpdHksIHdlIGFyZSBkb25lCi0gICAgaWYgKCB2YWx1
ZSA9PT0gIiIgfHwgY3VycmVudFN0eWxlICYmICFjdXJyZW50U3R5bGUuZmlsdGVyICkgewotICAg
IHJldHVybjsKLSAgICB9Ci0gICAgfQotCi0gICAgLy8gb3RoZXJ3aXNlLCBzZXQgbmV3IGZpbHRl
ciB2YWx1ZXMKLSAgICBzdHlsZS5maWx0ZXIgPSByYWxwaGEudGVzdCggZmlsdGVyICkgPwotICAg
IGZpbHRlci5yZXBsYWNlKCByYWxwaGEsIG9wYWNpdHkgKSA6Ci0gICAgZmlsdGVyICsgIiAiICsg
b3BhY2l0eTsKLSAgICB9Ci0gICAgfTsKLX0KLQotLy8gVGhlc2UgaG9va3MgY2Fubm90IGJlIGFk
ZGVkIHVudGlsIERPTSByZWFkeSBiZWNhdXNlIHRoZSBzdXBwb3J0IHRlc3QKLS8vIGZvciBpdCBp
cyBub3QgcnVuIHVudGlsIGFmdGVyIERPTSByZWFkeQotalF1ZXJ5KGZ1bmN0aW9uKCkgewotICAg
IGlmICggIWpRdWVyeS5zdXBwb3J0LnJlbGlhYmxlTWFyZ2luUmlnaHQgKSB7Ci0gICAgalF1ZXJ5
LmNzc0hvb2tzLm1hcmdpblJpZ2h0ID0gewotICAgIGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1
dGVkICkgewotICAgIGlmICggY29tcHV0ZWQgKSB7Ci0gICAgLy8gV2ViS2l0IEJ1ZyAxMzM0MyAt
IGdldENvbXB1dGVkU3R5bGUgcmV0dXJucyB3cm9uZyB2YWx1ZSBmb3IgbWFyZ2luLXJpZ2h0Ci0g
ICAgLy8gV29yayBhcm91bmQgYnkgdGVtcG9yYXJpbHkgc2V0dGluZyBlbGVtZW50IGRpc3BsYXkg
dG8gaW5saW5lLWJsb2NrCi0gICAgcmV0dXJuIGpRdWVyeS5zd2FwKCBlbGVtLCB7ICJkaXNwbGF5
IjogImlubGluZS1ibG9jayIgfSwKLSAgICBjdXJDU1MsIFsgZWxlbSwgIm1hcmdpblJpZ2h0IiBd
ICk7Ci0gICAgfQotICAgIH0KLSAgICB9OwotICAgIH0KLQotICAgIC8vIFdlYmtpdCBidWc6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTA4NAotICAgIC8vIGdldENv
bXB1dGVkU3R5bGUgcmV0dXJucyBwZXJjZW50IHdoZW4gc3BlY2lmaWVkIGZvciB0b3AvbGVmdC9i
b3R0b20vcmlnaHQKLSAgICAvLyByYXRoZXIgdGhhbiBtYWtlIHRoZSBjc3MgbW9kdWxlIGRlcGVu
ZCBvbiB0aGUgb2Zmc2V0IG1vZHVsZSwgd2UganVzdCBjaGVjayBmb3IgaXQgaGVyZQotICAgIGlm
ICggIWpRdWVyeS5zdXBwb3J0LnBpeGVsUG9zaXRpb24gJiYgalF1ZXJ5LmZuLnBvc2l0aW9uICkg
ewotICAgIGpRdWVyeS5lYWNoKCBbICJ0b3AiLCAibGVmdCIgXSwgZnVuY3Rpb24oIGksIHByb3Ag
KSB7Ci0gICAgalF1ZXJ5LmNzc0hvb2tzWyBwcm9wIF0gPSB7Ci0gICAgZ2V0OiBmdW5jdGlvbigg
ZWxlbSwgY29tcHV0ZWQgKSB7Ci0gICAgaWYgKCBjb21wdXRlZCApIHsKLSAgICBjb21wdXRlZCA9
IGN1ckNTUyggZWxlbSwgcHJvcCApOwotICAgIC8vIGlmIGN1ckNTUyByZXR1cm5zIHBlcmNlbnRh
Z2UsIGZhbGxiYWNrIHRvIG9mZnNldAotICAgIHJldHVybiBybnVtbm9ucHgudGVzdCggY29tcHV0
ZWQgKSA/Ci0gICAgalF1ZXJ5KCBlbGVtICkucG9zaXRpb24oKVsgcHJvcCBdICsgInB4IiA6Ci0g
ICAgY29tcHV0ZWQ7Ci0gICAgfQotICAgIH0KLSAgICB9OwotICAgIH0pOwotICAgIH0KLQotfSk7
Ci0KLWlmICggalF1ZXJ5LmV4cHIgJiYgalF1ZXJ5LmV4cHIuZmlsdGVycyApIHsKLSAgICBqUXVl
cnkuZXhwci5maWx0ZXJzLmhpZGRlbiA9IGZ1bmN0aW9uKCBlbGVtICkgewotICAgIC8vIFN1cHBv
cnQ6IE9wZXJhIDw9IDEyLjEyCi0gICAgLy8gT3BlcmEgcmVwb3J0cyBvZmZzZXRXaWR0aHMgYW5k
IG9mZnNldEhlaWdodHMgbGVzcyB0aGFuIHplcm8gb24gc29tZSBlbGVtZW50cwotICAgIHJldHVy
biBlbGVtLm9mZnNldFdpZHRoIDw9IDAgJiYgZWxlbS5vZmZzZXRIZWlnaHQgPD0gMCB8fAotICAg
ICghalF1ZXJ5LnN1cHBvcnQucmVsaWFibGVIaWRkZW5PZmZzZXRzICYmICgoZWxlbS5zdHlsZSAm
JiBlbGVtLnN0eWxlLmRpc3BsYXkpIHx8IGpRdWVyeS5jc3MoIGVsZW0sICJkaXNwbGF5IiApKSA9
PT0gIm5vbmUiKTsKLSAgICB9OwotCi0gICAgalF1ZXJ5LmV4cHIuZmlsdGVycy52aXNpYmxlID0g
ZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgcmV0dXJuICFqUXVlcnkuZXhwci5maWx0ZXJzLmhpZGRl
biggZWxlbSApOwotICAgIH07Ci19Ci0KLS8vIFRoZXNlIGhvb2tzIGFyZSB1c2VkIGJ5IGFuaW1h
dGUgdG8gZXhwYW5kIHByb3BlcnRpZXMKLWpRdWVyeS5lYWNoKHsKLSAgICBtYXJnaW46ICIiLAot
ICAgIHBhZGRpbmc6ICIiLAotICAgIGJvcmRlcjogIldpZHRoIgotfSwgZnVuY3Rpb24oIHByZWZp
eCwgc3VmZml4ICkgewotICAgIGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0gPSB7
Ci0gICAgZXhwYW5kOiBmdW5jdGlvbiggdmFsdWUgKSB7Ci0gICAgdmFyIGkgPSAwLAotICAgIGV4
cGFuZGVkID0ge30sCi0KLSAgICAvLyBhc3N1bWVzIGEgc2luZ2xlIG51bWJlciBpZiBub3QgYSBz
dHJpbmcKLSAgICBwYXJ0cyA9IHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIgPyB2YWx1ZS5zcGxp
dCgiICIpIDogWyB2YWx1ZSBdOwotCi0gICAgZm9yICggOyBpIDwgNDsgaSsrICkgewotICAgIGV4
cGFuZGVkWyBwcmVmaXggKyBjc3NFeHBhbmRbIGkgXSArIHN1ZmZpeCBdID0KLSAgICBwYXJ0c1sg
aSBdIHx8IHBhcnRzWyBpIC0gMiBdIHx8IHBhcnRzWyAwIF07Ci0gICAgfQotCi0gICAgcmV0dXJu
IGV4cGFuZGVkOwotICAgIH0KLSAgICB9OwotCi0gICAgaWYgKCAhcm1hcmdpbi50ZXN0KCBwcmVm
aXggKSApIHsKLSAgICBqUXVlcnkuY3NzSG9va3NbIHByZWZpeCArIHN1ZmZpeCBdLnNldCA9IHNl
dFBvc2l0aXZlTnVtYmVyOwotICAgIH0KLX0pOwotdmFyIHIyMCA9IC8lMjAvZywKLSAgICByYnJh
Y2tldCA9IC9cW1xdJC8sCi0gICAgckNSTEYgPSAvXHI/XG4vZywKLSAgICByc3VibWl0dGVyVHlw
ZXMgPSAvXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksCi0gICAgcnN1Ym1p
dHRhYmxlID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pOwotCi1qUXVlcnku
Zm4uZXh0ZW5kKHsKLSAgICBzZXJpYWxpemU6IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBqUXVl
cnkucGFyYW0oIHRoaXMuc2VyaWFsaXplQXJyYXkoKSApOwotICAgIH0sCi0gICAgc2VyaWFsaXpl
QXJyYXk6IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbigpewotICAg
IC8vIENhbiBhZGQgcHJvcEhvb2sgZm9yICJlbGVtZW50cyIgdG8gZmlsdGVyIG9yIGFkZCBmb3Jt
IGVsZW1lbnRzCi0gICAgdmFyIGVsZW1lbnRzID0galF1ZXJ5LnByb3AoIHRoaXMsICJlbGVtZW50
cyIgKTsKLSAgICByZXR1cm4gZWxlbWVudHMgPyBqUXVlcnkubWFrZUFycmF5KCBlbGVtZW50cyAp
IDogdGhpczsKLSAgICB9KQotICAgIC5maWx0ZXIoZnVuY3Rpb24oKXsKLSAgICB2YXIgdHlwZSA9
IHRoaXMudHlwZTsKLSAgICAvLyBVc2UgLmlzKCI6ZGlzYWJsZWQiKSBzbyB0aGF0IGZpZWxkc2V0
W2Rpc2FibGVkXSB3b3JrcwotICAgIHJldHVybiB0aGlzLm5hbWUgJiYgIWpRdWVyeSggdGhpcyAp
LmlzKCAiOmRpc2FibGVkIiApICYmCi0gICAgcnN1Ym1pdHRhYmxlLnRlc3QoIHRoaXMubm9kZU5h
bWUgKSAmJiAhcnN1Ym1pdHRlclR5cGVzLnRlc3QoIHR5cGUgKSAmJgotICAgICggdGhpcy5jaGVj
a2VkIHx8ICFtYW5pcHVsYXRpb25fcmNoZWNrYWJsZVR5cGUudGVzdCggdHlwZSApICk7Ci0gICAg
fSkKLSAgICAubWFwKGZ1bmN0aW9uKCBpLCBlbGVtICl7Ci0gICAgdmFyIHZhbCA9IGpRdWVyeSgg
dGhpcyApLnZhbCgpOwotCi0gICAgcmV0dXJuIHZhbCA9PSBudWxsID8KLSAgICBudWxsIDoKLSAg
ICBqUXVlcnkuaXNBcnJheSggdmFsICkgPwotICAgIGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24o
IHZhbCApewotICAgIHJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNl
KCByQ1JMRiwgIlxyXG4iICkgfTsKLSAgICB9KSA6Ci0gICAgeyBuYW1lOiBlbGVtLm5hbWUsIHZh
bHVlOiB2YWwucmVwbGFjZSggckNSTEYsICJcclxuIiApIH07Ci0gICAgfSkuZ2V0KCk7Ci0gICAg
fQotfSk7Ci0KLS8vU2VyaWFsaXplIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMgb3IgYSBzZXQg
b2YKLS8va2V5L3ZhbHVlcyBpbnRvIGEgcXVlcnkgc3RyaW5nCi1qUXVlcnkucGFyYW0gPSBmdW5j
dGlvbiggYSwgdHJhZGl0aW9uYWwgKSB7Ci0gICAgdmFyIHByZWZpeCwKLSAgICBzID0gW10sCi0g
ICAgYWRkID0gZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7Ci0gICAgLy8gSWYgdmFsdWUgaXMgYSBm
dW5jdGlvbiwgaW52b2tlIGl0IGFuZCByZXR1cm4gaXRzIHZhbHVlCi0gICAgdmFsdWUgPSBqUXVl
cnkuaXNGdW5jdGlvbiggdmFsdWUgKSA/IHZhbHVlKCkgOiAoIHZhbHVlID09IG51bGwgPyAiIiA6
IHZhbHVlICk7Ci0gICAgc1sgcy5sZW5ndGggXSA9IGVuY29kZVVSSUNvbXBvbmVudCgga2V5ICkg
KyAiPSIgKyBlbmNvZGVVUklDb21wb25lbnQoIHZhbHVlICk7Ci0gICAgfTsKLQotICAgIC8vIFNl
dCB0cmFkaXRpb25hbCB0byB0cnVlIGZvciBqUXVlcnkgPD0gMS4zLjIgYmVoYXZpb3IuCi0gICAg
aWYgKCB0cmFkaXRpb25hbCA9PT0gdW5kZWZpbmVkICkgewotICAgIHRyYWRpdGlvbmFsID0galF1
ZXJ5LmFqYXhTZXR0aW5ncyAmJiBqUXVlcnkuYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsOwotICAg
IH0KLQotICAgIC8vIElmIGFuIGFycmF5IHdhcyBwYXNzZWQgaW4sIGFzc3VtZSB0aGF0IGl0IGlz
IGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMuCi0gICAgaWYgKCBqUXVlcnkuaXNBcnJheSggYSAp
IHx8ICggYS5qcXVlcnkgJiYgIWpRdWVyeS5pc1BsYWluT2JqZWN0KCBhICkgKSApIHsKLSAgICAv
LyBTZXJpYWxpemUgdGhlIGZvcm0gZWxlbWVudHMKLSAgICBqUXVlcnkuZWFjaCggYSwgZnVuY3Rp
b24oKSB7Ci0gICAgYWRkKCB0aGlzLm5hbWUsIHRoaXMudmFsdWUgKTsKLSAgICB9KTsKLQotICAg
IH0gZWxzZSB7Ci0gICAgLy8gSWYgdHJhZGl0aW9uYWwsIGVuY29kZSB0aGUgIm9sZCIgd2F5ICh0
aGUgd2F5IDEuMy4yIG9yIG9sZGVyCi0gICAgLy8gZGlkIGl0KSwgb3RoZXJ3aXNlIGVuY29kZSBw
YXJhbXMgcmVjdXJzaXZlbHkuCi0gICAgZm9yICggcHJlZml4IGluIGEgKSB7Ci0gICAgYnVpbGRQ
YXJhbXMoIHByZWZpeCwgYVsgcHJlZml4IF0sIHRyYWRpdGlvbmFsLCBhZGQgKTsKLSAgICB9Ci0g
ICAgfQotCi0gICAgLy8gUmV0dXJuIHRoZSByZXN1bHRpbmcgc2VyaWFsaXphdGlvbgotICAgIHJl
dHVybiBzLmpvaW4oICImIiApLnJlcGxhY2UoIHIyMCwgIisiICk7Ci19OwotCi1mdW5jdGlvbiBi
dWlsZFBhcmFtcyggcHJlZml4LCBvYmosIHRyYWRpdGlvbmFsLCBhZGQgKSB7Ci0gICAgdmFyIG5h
bWU7Ci0KLSAgICBpZiAoIGpRdWVyeS5pc0FycmF5KCBvYmogKSApIHsKLSAgICAvLyBTZXJpYWxp
emUgYXJyYXkgaXRlbS4KLSAgICBqUXVlcnkuZWFjaCggb2JqLCBmdW5jdGlvbiggaSwgdiApIHsK
LSAgICBpZiAoIHRyYWRpdGlvbmFsIHx8IHJicmFja2V0LnRlc3QoIHByZWZpeCApICkgewotICAg
IC8vIFRyZWF0IGVhY2ggYXJyYXkgaXRlbSBhcyBhIHNjYWxhci4KLSAgICBhZGQoIHByZWZpeCwg
diApOwotCi0gICAgfSBlbHNlIHsKLSAgICAvLyBJdGVtIGlzIG5vbi1zY2FsYXIgKGFycmF5IG9y
IG9iamVjdCksIGVuY29kZSBpdHMgbnVtZXJpYyBpbmRleC4KLSAgICBidWlsZFBhcmFtcyggcHJl
Zml4ICsgIlsiICsgKCB0eXBlb2YgdiA9PT0gIm9iamVjdCIgPyBpIDogIiIgKSArICJdIiwgdiwg
dHJhZGl0aW9uYWwsIGFkZCApOwotICAgIH0KLSAgICB9KTsKLQotICAgIH0gZWxzZSBpZiAoICF0
cmFkaXRpb25hbCAmJiBqUXVlcnkudHlwZSggb2JqICkgPT09ICJvYmplY3QiICkgewotICAgIC8v
IFNlcmlhbGl6ZSBvYmplY3QgaXRlbS4KLSAgICBmb3IgKCBuYW1lIGluIG9iaiApIHsKLSAgICBi
dWlsZFBhcmFtcyggcHJlZml4ICsgIlsiICsgbmFtZSArICJdIiwgb2JqWyBuYW1lIF0sIHRyYWRp
dGlvbmFsLCBhZGQgKTsKLSAgICB9Ci0KLSAgICB9IGVsc2UgewotICAgIC8vIFNlcmlhbGl6ZSBz
Y2FsYXIgaXRlbS4KLSAgICBhZGQoIHByZWZpeCwgb2JqICk7Ci0gICAgfQotfQotalF1ZXJ5LmVh
Y2goICgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxv
YWQgY2xpY2sgZGJsY2xpY2sgIiArCi0gICAgIm1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBt
b3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlICIgKwotICAgICJjaGFuZ2Ug
c2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGVycm9yIGNvbnRleHRtZW51Iiku
c3BsaXQoIiAiKSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7Ci0KLSAgICAvLyBIYW5kbGUgZXZlbnQg
YmluZGluZwotICAgIGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIGRhdGEsIGZuICkgewot
ICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMCA/Ci0gICAgdGhpcy5vbiggbmFtZSwgbnVs
bCwgZGF0YSwgZm4gKSA6Ci0gICAgdGhpcy50cmlnZ2VyKCBuYW1lICk7Ci0gICAgfTsKLX0pOwot
Ci1qUXVlcnkuZm4uaG92ZXIgPSBmdW5jdGlvbiggZm5PdmVyLCBmbk91dCApIHsKLSAgICByZXR1
cm4gdGhpcy5tb3VzZWVudGVyKCBmbk92ZXIgKS5tb3VzZWxlYXZlKCBmbk91dCB8fCBmbk92ZXIg
KTsKLX07Ci12YXIKLSAgICAvLyBEb2N1bWVudCBsb2NhdGlvbgotICAgIGFqYXhMb2NQYXJ0cywK
LSAgICBhamF4TG9jYXRpb24sCi0gICAgYWpheF9ub25jZSA9IGpRdWVyeS5ub3coKSwKLQotICAg
IGFqYXhfcnF1ZXJ5ID0gL1w/LywKLSAgICByaGFzaCA9IC8jLiokLywKLSAgICBydHMgPSAvKFs/
Jl0pXz1bXiZdKi8sCi0gICAgcmhlYWRlcnMgPSAvXiguKj8pOlsgXHRdKihbXlxyXG5dKilccj8k
L21nLCAvLyBJRSBsZWF2ZXMgYW4gXHIgY2hhcmFjdGVyIGF0IEVPTAotICAgIC8vICM3NjUzLCAj
ODEyNSwgIzgxNTI6IGxvY2FsIHByb3RvY29sIGRldGVjdGlvbgotICAgIHJsb2NhbFByb3RvY29s
ID0gL14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdl
dCk6JC8sCi0gICAgcm5vQ29udGVudCA9IC9eKD86R0VUfEhFQUQpJC8sCi0gICAgcnByb3RvY29s
ID0gL15cL1wvLywKLSAgICBydXJsID0gL14oW1x3ListXSs6KSg/OlwvXC8oW15cLz8jOl0qKSg/
OjooXGQrKXwpfCkvLAotCi0gICAgLy8gS2VlcCBhIGNvcHkgb2YgdGhlIG9sZCBsb2FkIG1ldGhv
ZAotICAgIF9sb2FkID0galF1ZXJ5LmZuLmxvYWQsCi0KLSAgICAvKiBQcmVmaWx0ZXJzCi0gICAg
ICogMSkgVGhleSBhcmUgdXNlZnVsIHRvIGludHJvZHVjZSBjdXN0b20gZGF0YVR5cGVzIChzZWUg
YWpheC9qc29ucC5qcyBmb3IgYW4gZXhhbXBsZSkKLSAgICAgKiAyKSBUaGVzZSBhcmUgY2FsbGVk
OgotICAgICAqICAgIC0gQkVGT1JFIGFza2luZyBmb3IgYSB0cmFuc3BvcnQKLSAgICAgKiAgICAt
IEFGVEVSIHBhcmFtIHNlcmlhbGl6YXRpb24gKHMuZGF0YSBpcyBhIHN0cmluZyBpZiBzLnByb2Nl
c3NEYXRhIGlzIHRydWUpCi0gICAgICogMykga2V5IGlzIHRoZSBkYXRhVHlwZQotICAgICAqIDQp
IHRoZSBjYXRjaGFsbCBzeW1ib2wgIioiIGNhbiBiZSB1c2VkCi0gICAgICogNSkgZXhlY3V0aW9u
IHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gY29udGludWUgZG93
biB0byAiKiIgaWYgbmVlZGVkCi0gICAgICovCi0gICAgcHJlZmlsdGVycyA9IHt9LAotCi0gICAg
LyogVHJhbnNwb3J0cyBiaW5kaW5ncwotICAgICAqIDEpIGtleSBpcyB0aGUgZGF0YVR5cGUKLSAg
ICAgKiAyKSB0aGUgY2F0Y2hhbGwgc3ltYm9sICIqIiBjYW4gYmUgdXNlZAotICAgICAqIDMpIHNl
bGVjdGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGdvIHRv
ICIqIiBpZiBuZWVkZWQKLSAgICAgKi8KLSAgICB0cmFuc3BvcnRzID0ge30sCi0KLSAgICAvLyBB
dm9pZCBjb21tZW50LXByb2xvZyBjaGFyIHNlcXVlbmNlICgjMTAwOTgpOyBtdXN0IGFwcGVhc2Ug
bGludCBhbmQgZXZhZGUgY29tcHJlc3Npb24KLSAgICBhbGxUeXBlcyA9ICIqLyIuY29uY2F0KCIq
Iik7Ci0KLS8vICM4MTM4LCBJRSBtYXkgdGhyb3cgYW4gZXhjZXB0aW9uIHdoZW4gYWNjZXNzaW5n
Ci0vLyBhIGZpZWxkIGZyb20gd2luZG93LmxvY2F0aW9uIGlmIGRvY3VtZW50LmRvbWFpbiBoYXMg
YmVlbiBzZXQKLXRyeSB7Ci0gICAgYWpheExvY2F0aW9uID0gbG9jYXRpb24uaHJlZjsKLX0gY2F0
Y2goIGUgKSB7Ci0gICAgLy8gVXNlIHRoZSBocmVmIGF0dHJpYnV0ZSBvZiBhbiBBIGVsZW1lbnQK
LSAgICAvLyBzaW5jZSBJRSB3aWxsIG1vZGlmeSBpdCBnaXZlbiBkb2N1bWVudC5sb2NhdGlvbgot
ICAgIGFqYXhMb2NhdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJhIiApOwotICAgIGFq
YXhMb2NhdGlvbi5ocmVmID0gIiI7Ci0gICAgYWpheExvY2F0aW9uID0gYWpheExvY2F0aW9uLmhy
ZWY7Ci19Ci0KLS8vIFNlZ21lbnQgbG9jYXRpb24gaW50byBwYXJ0cwotYWpheExvY1BhcnRzID0g
cnVybC5leGVjKCBhamF4TG9jYXRpb24udG9Mb3dlckNhc2UoKSApIHx8IFtdOwotCi0vLyBCYXNl
ICJjb25zdHJ1Y3RvciIgZm9yIGpRdWVyeS5hamF4UHJlZmlsdGVyIGFuZCBqUXVlcnkuYWpheFRy
YW5zcG9ydAotZnVuY3Rpb24gYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1cmUg
KSB7Ci0KLSAgICAvLyBkYXRhVHlwZUV4cHJlc3Npb24gaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRz
IHRvICIqIgotICAgIHJldHVybiBmdW5jdGlvbiggZGF0YVR5cGVFeHByZXNzaW9uLCBmdW5jICkg
ewotCi0gICAgaWYgKCB0eXBlb2YgZGF0YVR5cGVFeHByZXNzaW9uICE9PSAic3RyaW5nIiApIHsK
LSAgICBmdW5jID0gZGF0YVR5cGVFeHByZXNzaW9uOwotICAgIGRhdGFUeXBlRXhwcmVzc2lvbiA9
ICIqIjsKLSAgICB9Ci0KLSAgICB2YXIgZGF0YVR5cGUsCi0gICAgaSA9IDAsCi0gICAgZGF0YVR5
cGVzID0gZGF0YVR5cGVFeHByZXNzaW9uLnRvTG93ZXJDYXNlKCkubWF0Y2goIGNvcmVfcm5vdHdo
aXRlICkgfHwgW107Ci0KLSAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBmdW5jICkgKSB7Ci0g
ICAgLy8gRm9yIGVhY2ggZGF0YVR5cGUgaW4gdGhlIGRhdGFUeXBlRXhwcmVzc2lvbgotICAgIHdo
aWxlICggKGRhdGFUeXBlID0gZGF0YVR5cGVzW2krK10pICkgewotICAgIC8vIFByZXBlbmQgaWYg
cmVxdWVzdGVkCi0gICAgaWYgKCBkYXRhVHlwZVswXSA9PT0gIisiICkgewotICAgIGRhdGFUeXBl
ID0gZGF0YVR5cGUuc2xpY2UoIDEgKSB8fCAiKiI7Ci0gICAgKHN0cnVjdHVyZVsgZGF0YVR5cGUg
XSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSkudW5zaGlmdCggZnVuYyApOwotCi0gICAg
Ly8gT3RoZXJ3aXNlIGFwcGVuZAotICAgIH0gZWxzZSB7Ci0gICAgKHN0cnVjdHVyZVsgZGF0YVR5
cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSkucHVzaCggZnVuYyApOwotICAgIH0K
LSAgICB9Ci0gICAgfQotICAgIH07Ci19Ci0KLS8vIEJhc2UgaW5zcGVjdGlvbiBmdW5jdGlvbiBm
b3IgcHJlZmlsdGVycyBhbmQgdHJhbnNwb3J0cwotZnVuY3Rpb24gaW5zcGVjdFByZWZpbHRlcnNP
clRyYW5zcG9ydHMoIHN0cnVjdHVyZSwgb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiAp
IHsKLQotICAgIHZhciBpbnNwZWN0ZWQgPSB7fSwKLSAgICBzZWVraW5nVHJhbnNwb3J0ID0gKCBz
dHJ1Y3R1cmUgPT09IHRyYW5zcG9ydHMgKTsKLQotICAgIGZ1bmN0aW9uIGluc3BlY3QoIGRhdGFU
eXBlICkgewotICAgIHZhciBzZWxlY3RlZDsKLSAgICBpbnNwZWN0ZWRbIGRhdGFUeXBlIF0gPSB0
cnVlOwotICAgIGpRdWVyeS5lYWNoKCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10sIGZ1bmN0
aW9uKCBfLCBwcmVmaWx0ZXJPckZhY3RvcnkgKSB7Ci0gICAgdmFyIGRhdGFUeXBlT3JUcmFuc3Bv
cnQgPSBwcmVmaWx0ZXJPckZhY3RvcnkoIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIg
KTsKLSAgICBpZiggdHlwZW9mIGRhdGFUeXBlT3JUcmFuc3BvcnQgPT09ICJzdHJpbmciICYmICFz
ZWVraW5nVHJhbnNwb3J0ICYmICFpbnNwZWN0ZWRbIGRhdGFUeXBlT3JUcmFuc3BvcnQgXSApIHsK
LSAgICBvcHRpb25zLmRhdGFUeXBlcy51bnNoaWZ0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7Ci0g
ICAgaW5zcGVjdCggZGF0YVR5cGVPclRyYW5zcG9ydCApOwotICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9IGVsc2UgaWYgKCBzZWVraW5nVHJhbnNwb3J0ICkgewotICAgIHJldHVybiAhKCBzZWxlY3Rl
ZCA9IGRhdGFUeXBlT3JUcmFuc3BvcnQgKTsKLSAgICB9Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHNl
bGVjdGVkOwotICAgIH0KLQotICAgIHJldHVybiBpbnNwZWN0KCBvcHRpb25zLmRhdGFUeXBlc1sg
MCBdICkgfHwgIWluc3BlY3RlZFsgIioiIF0gJiYgaW5zcGVjdCggIioiICk7Ci19Ci0KLS8vIEEg
c3BlY2lhbCBleHRlbmQgZm9yIGFqYXggb3B0aW9ucwotLy8gdGhhdCB0YWtlcyAiZmxhdCIgb3B0
aW9ucyAobm90IHRvIGJlIGRlZXAgZXh0ZW5kZWQpCi0vLyBGaXhlcyAjOTg4NwotZnVuY3Rpb24g
YWpheEV4dGVuZCggdGFyZ2V0LCBzcmMgKSB7Ci0gICAgdmFyIGRlZXAsIGtleSwKLSAgICBmbGF0
T3B0aW9ucyA9IGpRdWVyeS5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnMgfHwge307Ci0KLSAgICBm
b3IgKCBrZXkgaW4gc3JjICkgewotICAgIGlmICggc3JjWyBrZXkgXSAhPT0gdW5kZWZpbmVkICkg
ewotICAgICggZmxhdE9wdGlvbnNbIGtleSBdID8gdGFyZ2V0IDogKCBkZWVwIHx8IChkZWVwID0g
e30pICkgKVsga2V5IF0gPSBzcmNbIGtleSBdOwotICAgIH0KLSAgICB9Ci0gICAgaWYgKCBkZWVw
ICkgewotICAgIGpRdWVyeS5leHRlbmQoIHRydWUsIHRhcmdldCwgZGVlcCApOwotICAgIH0KLQot
ICAgIHJldHVybiB0YXJnZXQ7Ci19Ci0KLWpRdWVyeS5mbi5sb2FkID0gZnVuY3Rpb24oIHVybCwg
cGFyYW1zLCBjYWxsYmFjayApIHsKLSAgICBpZiAoIHR5cGVvZiB1cmwgIT09ICJzdHJpbmciICYm
IF9sb2FkICkgewotICAgIHJldHVybiBfbG9hZC5hcHBseSggdGhpcywgYXJndW1lbnRzICk7Ci0g
ICAgfQotCi0gICAgdmFyIHNlbGVjdG9yLCByZXNwb25zZSwgdHlwZSwKLSAgICBzZWxmID0gdGhp
cywKLSAgICBvZmYgPSB1cmwuaW5kZXhPZigiICIpOwotCi0gICAgaWYgKCBvZmYgPj0gMCApIHsK
LSAgICBzZWxlY3RvciA9IHVybC5zbGljZSggb2ZmLCB1cmwubGVuZ3RoICk7Ci0gICAgdXJsID0g
dXJsLnNsaWNlKCAwLCBvZmYgKTsKLSAgICB9Ci0KLSAgICAvLyBJZiBpdCdzIGEgZnVuY3Rpb24K
LSAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBwYXJhbXMgKSApIHsKLQotICAgIC8vIFdlIGFz
c3VtZSB0aGF0IGl0J3MgdGhlIGNhbGxiYWNrCi0gICAgY2FsbGJhY2sgPSBwYXJhbXM7Ci0gICAg
cGFyYW1zID0gdW5kZWZpbmVkOwotCi0gICAgLy8gT3RoZXJ3aXNlLCBidWlsZCBhIHBhcmFtIHN0
cmluZwotICAgIH0gZWxzZSBpZiAoIHBhcmFtcyAmJiB0eXBlb2YgcGFyYW1zID09PSAib2JqZWN0
IiApIHsKLSAgICB0eXBlID0gIlBPU1QiOwotICAgIH0KLQotICAgIC8vIElmIHdlIGhhdmUgZWxl
bWVudHMgdG8gbW9kaWZ5LCBtYWtlIHRoZSByZXF1ZXN0Ci0gICAgaWYgKCBzZWxmLmxlbmd0aCA+
IDAgKSB7Ci0gICAgalF1ZXJ5LmFqYXgoewotICAgIHVybDogdXJsLAotCi0gICAgLy8gaWYgInR5
cGUiIHZhcmlhYmxlIGlzIHVuZGVmaW5lZCwgdGhlbiAiR0VUIiBtZXRob2Qgd2lsbCBiZSB1c2Vk
Ci0gICAgdHlwZTogdHlwZSwKLSAgICBkYXRhVHlwZTogImh0bWwiLAotICAgIGRhdGE6IHBhcmFt
cwotICAgIH0pLmRvbmUoZnVuY3Rpb24oIHJlc3BvbnNlVGV4dCApIHsKLQotICAgIC8vIFNhdmUg
cmVzcG9uc2UgZm9yIHVzZSBpbiBjb21wbGV0ZSBjYWxsYmFjawotICAgIHJlc3BvbnNlID0gYXJn
dW1lbnRzOwotCi0gICAgc2VsZi5odG1sKCBzZWxlY3RvciA/Ci0KLSAgICAvLyBJZiBhIHNlbGVj
dG9yIHdhcyBzcGVjaWZpZWQsIGxvY2F0ZSB0aGUgcmlnaHQgZWxlbWVudHMgaW4gYSBkdW1teSBk
aXYKLSAgICAvLyBFeGNsdWRlIHNjcmlwdHMgdG8gYXZvaWQgSUUgJ1Blcm1pc3Npb24gRGVuaWVk
JyBlcnJvcnMKLSAgICBqUXVlcnkoIjxkaXY+IikuYXBwZW5kKCBqUXVlcnkucGFyc2VIVE1MKCBy
ZXNwb25zZVRleHQgKSApLmZpbmQoIHNlbGVjdG9yICkgOgotCi0gICAgLy8gT3RoZXJ3aXNlIHVz
ZSB0aGUgZnVsbCByZXN1bHQKLSAgICByZXNwb25zZVRleHQgKTsKLQotICAgIH0pLmNvbXBsZXRl
KCBjYWxsYmFjayAmJiBmdW5jdGlvbigganFYSFIsIHN0YXR1cyApIHsKLSAgICBzZWxmLmVhY2go
IGNhbGxiYWNrLCByZXNwb25zZSB8fCBbIGpxWEhSLnJlc3BvbnNlVGV4dCwgc3RhdHVzLCBqcVhI
UiBdICk7Ci0gICAgfSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRoaXM7Ci19OwotCi0vLyBBdHRh
Y2ggYSBidW5jaCBvZiBmdW5jdGlvbnMgZm9yIGhhbmRsaW5nIGNvbW1vbiBBSkFYIGV2ZW50cwot
alF1ZXJ5LmVhY2goIFsgImFqYXhTdGFydCIsICJhamF4U3RvcCIsICJhamF4Q29tcGxldGUiLCAi
YWpheEVycm9yIiwgImFqYXhTdWNjZXNzIiwgImFqYXhTZW5kIiBdLCBmdW5jdGlvbiggaSwgdHlw
ZSApewotICAgIGpRdWVyeS5mblsgdHlwZSBdID0gZnVuY3Rpb24oIGZuICl7Ci0gICAgcmV0dXJu
IHRoaXMub24oIHR5cGUsIGZuICk7Ci0gICAgfTsKLX0pOwotCi1qUXVlcnkuZWFjaCggWyAiZ2V0
IiwgInBvc3QiIF0sIGZ1bmN0aW9uKCBpLCBtZXRob2QgKSB7Ci0gICAgalF1ZXJ5WyBtZXRob2Qg
XSA9IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrLCB0eXBlICkgewotICAgIC8vIHNoaWZ0
IGFyZ3VtZW50cyBpZiBkYXRhIGFyZ3VtZW50IHdhcyBvbWl0dGVkCi0gICAgaWYgKCBqUXVlcnku
aXNGdW5jdGlvbiggZGF0YSApICkgewotICAgIHR5cGUgPSB0eXBlIHx8IGNhbGxiYWNrOwotICAg
IGNhbGxiYWNrID0gZGF0YTsKLSAgICBkYXRhID0gdW5kZWZpbmVkOwotICAgIH0KLQotICAgIHJl
dHVybiBqUXVlcnkuYWpheCh7Ci0gICAgdXJsOiB1cmwsCi0gICAgdHlwZTogbWV0aG9kLAotICAg
IGRhdGFUeXBlOiB0eXBlLAotICAgIGRhdGE6IGRhdGEsCi0gICAgc3VjY2VzczogY2FsbGJhY2sK
LSAgICB9KTsKLSAgICB9OwotfSk7Ci0KLWpRdWVyeS5leHRlbmQoewotCi0gICAgLy8gQ291bnRl
ciBmb3IgaG9sZGluZyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBxdWVyaWVzCi0gICAgYWN0aXZlOiAw
LAotCi0gICAgLy8gTGFzdC1Nb2RpZmllZCBoZWFkZXIgY2FjaGUgZm9yIG5leHQgcmVxdWVzdAot
ICAgIGxhc3RNb2RpZmllZDoge30sCi0gICAgZXRhZzoge30sCi0KLSAgICBhamF4U2V0dGluZ3M6
IHsKLSAgICB1cmw6IGFqYXhMb2NhdGlvbiwKLSAgICB0eXBlOiAiR0VUIiwKLSAgICBpc0xvY2Fs
OiBybG9jYWxQcm90b2NvbC50ZXN0KCBhamF4TG9jUGFydHNbIDEgXSApLAotICAgIGdsb2JhbDog
dHJ1ZSwKLSAgICBwcm9jZXNzRGF0YTogdHJ1ZSwKLSAgICBhc3luYzogdHJ1ZSwKLSAgICBjb250
ZW50VHlwZTogImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYt
OCIsCi0gICAgLyoKLSAgICB0aW1lb3V0OiAwLAotICAgIGRhdGE6IG51bGwsCi0gICAgZGF0YVR5
cGU6IG51bGwsCi0gICAgdXNlcm5hbWU6IG51bGwsCi0gICAgcGFzc3dvcmQ6IG51bGwsCi0gICAg
Y2FjaGU6IG51bGwsCi0gICAgdGhyb3dzOiBmYWxzZSwKLSAgICB0cmFkaXRpb25hbDogZmFsc2Us
Ci0gICAgaGVhZGVyczoge30sCi0gICAgKi8KLQotICAgIGFjY2VwdHM6IHsKLSAgICAiKiI6IGFs
bFR5cGVzLAotICAgIHRleHQ6ICJ0ZXh0L3BsYWluIiwKLSAgICBodG1sOiAidGV4dC9odG1sIiwK
LSAgICB4bWw6ICJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sIiwKLSAgICBqc29uOiAiYXBwbGlj
YXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0IgotICAgIH0sCi0KLSAgICBjb250ZW50czogewot
ICAgIHhtbDogL3htbC8sCi0gICAgaHRtbDogL2h0bWwvLAotICAgIGpzb246IC9qc29uLwotICAg
IH0sCi0KLSAgICByZXNwb25zZUZpZWxkczogewotICAgIHhtbDogInJlc3BvbnNlWE1MIiwKLSAg
ICB0ZXh0OiAicmVzcG9uc2VUZXh0IgotICAgIH0sCi0KLSAgICAvLyBEYXRhIGNvbnZlcnRlcnMK
LSAgICAvLyBLZXlzIHNlcGFyYXRlIHNvdXJjZSAob3IgY2F0Y2hhbGwgIioiKSBhbmQgZGVzdGlu
YXRpb24gdHlwZXMgd2l0aCBhIHNpbmdsZSBzcGFjZQotICAgIGNvbnZlcnRlcnM6IHsKLQotICAg
IC8vIENvbnZlcnQgYW55dGhpbmcgdG8gdGV4dAotICAgICIqIHRleHQiOiB3aW5kb3cuU3RyaW5n
LAotCi0gICAgLy8gVGV4dCB0byBodG1sICh0cnVlID0gbm8gdHJhbnNmb3JtYXRpb24pCi0gICAg
InRleHQgaHRtbCI6IHRydWUsCi0KLSAgICAvLyBFdmFsdWF0ZSB0ZXh0IGFzIGEganNvbiBleHBy
ZXNzaW9uCi0gICAgInRleHQganNvbiI6IGpRdWVyeS5wYXJzZUpTT04sCi0KLSAgICAvLyBQYXJz
ZSB0ZXh0IGFzIHhtbAotICAgICJ0ZXh0IHhtbCI6IGpRdWVyeS5wYXJzZVhNTAotICAgIH0sCi0K
LSAgICAvLyBGb3Igb3B0aW9ucyB0aGF0IHNob3VsZG4ndCBiZSBkZWVwIGV4dGVuZGVkOgotICAg
IC8vIHlvdSBjYW4gYWRkIHlvdXIgb3duIGN1c3RvbSBvcHRpb25zIGhlcmUgaWYKLSAgICAvLyBh
bmQgd2hlbiB5b3UgY3JlYXRlIG9uZSB0aGF0IHNob3VsZG4ndCBiZQotICAgIC8vIGRlZXAgZXh0
ZW5kZWQgKHNlZSBhamF4RXh0ZW5kKQotICAgIGZsYXRPcHRpb25zOiB7Ci0gICAgdXJsOiB0cnVl
LAotICAgIGNvbnRleHQ6IHRydWUKLSAgICB9Ci0gICAgfSwKLQotICAgIC8vIENyZWF0ZXMgYSBm
dWxsIGZsZWRnZWQgc2V0dGluZ3Mgb2JqZWN0IGludG8gdGFyZ2V0Ci0gICAgLy8gd2l0aCBib3Ro
IGFqYXhTZXR0aW5ncyBhbmQgc2V0dGluZ3MgZmllbGRzLgotICAgIC8vIElmIHRhcmdldCBpcyBv
bWl0dGVkLCB3cml0ZXMgaW50byBhamF4U2V0dGluZ3MuCi0gICAgYWpheFNldHVwOiBmdW5jdGlv
biggdGFyZ2V0LCBzZXR0aW5ncyApIHsKLSAgICByZXR1cm4gc2V0dGluZ3MgPwotCi0gICAgLy8g
QnVpbGRpbmcgYSBzZXR0aW5ncyBvYmplY3QKLSAgICBhamF4RXh0ZW5kKCBhamF4RXh0ZW5kKCB0
YXJnZXQsIGpRdWVyeS5hamF4U2V0dGluZ3MgKSwgc2V0dGluZ3MgKSA6Ci0KLSAgICAvLyBFeHRl
bmRpbmcgYWpheFNldHRpbmdzCi0gICAgYWpheEV4dGVuZCggalF1ZXJ5LmFqYXhTZXR0aW5ncywg
dGFyZ2V0ICk7Ci0gICAgfSwKLQotICAgIGFqYXhQcmVmaWx0ZXI6IGFkZFRvUHJlZmlsdGVyc09y
VHJhbnNwb3J0cyggcHJlZmlsdGVycyApLAotICAgIGFqYXhUcmFuc3BvcnQ6IGFkZFRvUHJlZmls
dGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cyApLAotCi0gICAgLy8gTWFpbiBtZXRob2QKLSAg
ICBhamF4OiBmdW5jdGlvbiggdXJsLCBvcHRpb25zICkgewotCi0gICAgLy8gSWYgdXJsIGlzIGFu
IG9iamVjdCwgc2ltdWxhdGUgcHJlLTEuNSBzaWduYXR1cmUKLSAgICBpZiAoIHR5cGVvZiB1cmwg
PT09ICJvYmplY3QiICkgewotICAgIG9wdGlvbnMgPSB1cmw7Ci0gICAgdXJsID0gdW5kZWZpbmVk
OwotICAgIH0KLQotICAgIC8vIEZvcmNlIG9wdGlvbnMgdG8gYmUgYW4gb2JqZWN0Ci0gICAgb3B0
aW9ucyA9IG9wdGlvbnMgfHwge307Ci0KLSAgICB2YXIgLy8gQ3Jvc3MtZG9tYWluIGRldGVjdGlv
biB2YXJzCi0gICAgcGFydHMsCi0gICAgLy8gTG9vcCB2YXJpYWJsZQotICAgIGksCi0gICAgLy8g
VVJMIHdpdGhvdXQgYW50aS1jYWNoZSBwYXJhbQotICAgIGNhY2hlVVJMLAotICAgIC8vIFJlc3Bv
bnNlIGhlYWRlcnMgYXMgc3RyaW5nCi0gICAgcmVzcG9uc2VIZWFkZXJzU3RyaW5nLAotICAgIC8v
IHRpbWVvdXQgaGFuZGxlCi0gICAgdGltZW91dFRpbWVyLAotCi0gICAgLy8gVG8ga25vdyBpZiBn
bG9iYWwgZXZlbnRzIGFyZSB0byBiZSBkaXNwYXRjaGVkCi0gICAgZmlyZUdsb2JhbHMsCi0KLSAg
ICB0cmFuc3BvcnQsCi0gICAgLy8gUmVzcG9uc2UgaGVhZGVycwotICAgIHJlc3BvbnNlSGVhZGVy
cywKLSAgICAvLyBDcmVhdGUgdGhlIGZpbmFsIG9wdGlvbnMgb2JqZWN0Ci0gICAgcyA9IGpRdWVy
eS5hamF4U2V0dXAoIHt9LCBvcHRpb25zICksCi0gICAgLy8gQ2FsbGJhY2tzIGNvbnRleHQKLSAg
ICBjYWxsYmFja0NvbnRleHQgPSBzLmNvbnRleHQgfHwgcywKLSAgICAvLyBDb250ZXh0IGZvciBn
bG9iYWwgZXZlbnRzIGlzIGNhbGxiYWNrQ29udGV4dCBpZiBpdCBpcyBhIERPTSBub2RlIG9yIGpR
dWVyeSBjb2xsZWN0aW9uCi0gICAgZ2xvYmFsRXZlbnRDb250ZXh0ID0gcy5jb250ZXh0ICYmICgg
Y2FsbGJhY2tDb250ZXh0Lm5vZGVUeXBlIHx8IGNhbGxiYWNrQ29udGV4dC5qcXVlcnkgKSA/Ci0g
ICAgalF1ZXJ5KCBjYWxsYmFja0NvbnRleHQgKSA6Ci0gICAgalF1ZXJ5LmV2ZW50LAotICAgIC8v
IERlZmVycmVkcwotICAgIGRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCksCi0gICAgY29tcGxl
dGVEZWZlcnJlZCA9IGpRdWVyeS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksCi0gICAgLy8gU3Rh
dHVzLWRlcGVuZGVudCBjYWxsYmFja3MKLSAgICBzdGF0dXNDb2RlID0gcy5zdGF0dXNDb2RlIHx8
IHt9LAotICAgIC8vIEhlYWRlcnMgKHRoZXkgYXJlIHNlbnQgYWxsIGF0IG9uY2UpCi0gICAgcmVx
dWVzdEhlYWRlcnMgPSB7fSwKLSAgICByZXF1ZXN0SGVhZGVyc05hbWVzID0ge30sCi0gICAgLy8g
VGhlIGpxWEhSIHN0YXRlCi0gICAgc3RhdGUgPSAwLAotICAgIC8vIERlZmF1bHQgYWJvcnQgbWVz
c2FnZQotICAgIHN0ckFib3J0ID0gImNhbmNlbGVkIiwKLSAgICAvLyBGYWtlIHhocgotICAgIGpx
WEhSID0gewotICAgIHJlYWR5U3RhdGU6IDAsCi0KLSAgICAvLyBCdWlsZHMgaGVhZGVycyBoYXNo
dGFibGUgaWYgbmVlZGVkCi0gICAgZ2V0UmVzcG9uc2VIZWFkZXI6IGZ1bmN0aW9uKCBrZXkgKSB7
Ci0gICAgdmFyIG1hdGNoOwotICAgIGlmICggc3RhdGUgPT09IDIgKSB7Ci0gICAgaWYgKCAhcmVz
cG9uc2VIZWFkZXJzICkgewotICAgIHJlc3BvbnNlSGVhZGVycyA9IHt9OwotICAgIHdoaWxlICgg
KG1hdGNoID0gcmhlYWRlcnMuZXhlYyggcmVzcG9uc2VIZWFkZXJzU3RyaW5nICkpICkgewotICAg
IHJlc3BvbnNlSGVhZGVyc1sgbWF0Y2hbMV0udG9Mb3dlckNhc2UoKSBdID0gbWF0Y2hbIDIgXTsK
LSAgICB9Ci0gICAgfQotICAgIG1hdGNoID0gcmVzcG9uc2VIZWFkZXJzWyBrZXkudG9Mb3dlckNh
c2UoKSBdOwotICAgIH0KLSAgICByZXR1cm4gbWF0Y2ggPT0gbnVsbCA/IG51bGwgOiBtYXRjaDsK
LSAgICB9LAotCi0gICAgLy8gUmF3IHN0cmluZwotICAgIGdldEFsbFJlc3BvbnNlSGVhZGVyczog
ZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHN0YXRlID09PSAyID8gcmVzcG9uc2VIZWFkZXJzU3Ry
aW5nIDogbnVsbDsKLSAgICB9LAotCi0gICAgLy8gQ2FjaGVzIHRoZSBoZWFkZXIKLSAgICBzZXRS
ZXF1ZXN0SGVhZGVyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7Ci0gICAgdmFyIGxuYW1lID0g
bmFtZS50b0xvd2VyQ2FzZSgpOwotICAgIGlmICggIXN0YXRlICkgewotICAgIG5hbWUgPSByZXF1
ZXN0SGVhZGVyc05hbWVzWyBsbmFtZSBdID0gcmVxdWVzdEhlYWRlcnNOYW1lc1sgbG5hbWUgXSB8
fCBuYW1lOwotICAgIHJlcXVlc3RIZWFkZXJzWyBuYW1lIF0gPSB2YWx1ZTsKLSAgICB9Ci0gICAg
cmV0dXJuIHRoaXM7Ci0gICAgfSwKLQotICAgIC8vIE92ZXJyaWRlcyByZXNwb25zZSBjb250ZW50
LXR5cGUgaGVhZGVyCi0gICAgb3ZlcnJpZGVNaW1lVHlwZTogZnVuY3Rpb24oIHR5cGUgKSB7Ci0g
ICAgaWYgKCAhc3RhdGUgKSB7Ci0gICAgcy5taW1lVHlwZSA9IHR5cGU7Ci0gICAgfQotICAgIHJl
dHVybiB0aGlzOwotICAgIH0sCi0KLSAgICAvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrcwot
ICAgIHN0YXR1c0NvZGU6IGZ1bmN0aW9uKCBtYXAgKSB7Ci0gICAgdmFyIGNvZGU7Ci0gICAgaWYg
KCBtYXAgKSB7Ci0gICAgaWYgKCBzdGF0ZSA8IDIgKSB7Ci0gICAgZm9yICggY29kZSBpbiBtYXAg
KSB7Ci0gICAgLy8gTGF6eS1hZGQgdGhlIG5ldyBjYWxsYmFjayBpbiBhIHdheSB0aGF0IHByZXNl
cnZlcyBvbGQgb25lcwotICAgIHN0YXR1c0NvZGVbIGNvZGUgXSA9IFsgc3RhdHVzQ29kZVsgY29k
ZSBdLCBtYXBbIGNvZGUgXSBdOwotICAgIH0KLSAgICB9IGVsc2UgewotICAgIC8vIEV4ZWN1dGUg
dGhlIGFwcHJvcHJpYXRlIGNhbGxiYWNrcwotICAgIGpxWEhSLmFsd2F5cyggbWFwWyBqcVhIUi5z
dGF0dXMgXSApOwotICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRoaXM7Ci0gICAgfSwKLQotICAg
IC8vIENhbmNlbCB0aGUgcmVxdWVzdAotICAgIGFib3J0OiBmdW5jdGlvbiggc3RhdHVzVGV4dCAp
IHsKLSAgICB2YXIgZmluYWxUZXh0ID0gc3RhdHVzVGV4dCB8fCBzdHJBYm9ydDsKLSAgICBpZiAo
IHRyYW5zcG9ydCApIHsKLSAgICB0cmFuc3BvcnQuYWJvcnQoIGZpbmFsVGV4dCApOwotICAgIH0K
LSAgICBkb25lKCAwLCBmaW5hbFRleHQgKTsKLSAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0gICAg
fTsKLQotICAgIC8vIEF0dGFjaCBkZWZlcnJlZHMKLSAgICBkZWZlcnJlZC5wcm9taXNlKCBqcVhI
UiApLmNvbXBsZXRlID0gY29tcGxldGVEZWZlcnJlZC5hZGQ7Ci0gICAganFYSFIuc3VjY2VzcyA9
IGpxWEhSLmRvbmU7Ci0gICAganFYSFIuZXJyb3IgPSBqcVhIUi5mYWlsOwotCi0gICAgLy8gUmVt
b3ZlIGhhc2ggY2hhcmFjdGVyICgjNzUzMTogYW5kIHN0cmluZyBwcm9tb3Rpb24pCi0gICAgLy8g
QWRkIHByb3RvY29sIGlmIG5vdCBwcm92aWRlZCAoIzU4NjY6IElFNyBpc3N1ZSB3aXRoIHByb3Rv
Y29sLWxlc3MgdXJscykKLSAgICAvLyBIYW5kbGUgZmFsc3kgdXJsIGluIHRoZSBzZXR0aW5ncyBv
YmplY3QgKCMxMDA5MzogY29uc2lzdGVuY3kgd2l0aCBvbGQgc2lnbmF0dXJlKQotICAgIC8vIFdl
IGFsc28gdXNlIHRoZSB1cmwgcGFyYW1ldGVyIGlmIGF2YWlsYWJsZQotICAgIHMudXJsID0gKCAo
IHVybCB8fCBzLnVybCB8fCBhamF4TG9jYXRpb24gKSArICIiICkucmVwbGFjZSggcmhhc2gsICIi
ICkucmVwbGFjZSggcnByb3RvY29sLCBhamF4TG9jUGFydHNbIDEgXSArICIvLyIgKTsKLQotICAg
IC8vIEFsaWFzIG1ldGhvZCBvcHRpb24gdG8gdHlwZSBhcyBwZXIgdGlja2V0ICMxMjAwNAotICAg
IHMudHlwZSA9IG9wdGlvbnMubWV0aG9kIHx8IG9wdGlvbnMudHlwZSB8fCBzLm1ldGhvZCB8fCBz
LnR5cGU7Ci0KLSAgICAvLyBFeHRyYWN0IGRhdGFUeXBlcyBsaXN0Ci0gICAgcy5kYXRhVHlwZXMg
PSBqUXVlcnkudHJpbSggcy5kYXRhVHlwZSB8fCAiKiIgKS50b0xvd2VyQ2FzZSgpLm1hdGNoKCBj
b3JlX3Jub3R3aGl0ZSApIHx8IFsiIl07Ci0KLSAgICAvLyBBIGNyb3NzLWRvbWFpbiByZXF1ZXN0
IGlzIGluIG9yZGVyIHdoZW4gd2UgaGF2ZSBhIHByb3RvY29sOmhvc3Q6cG9ydCBtaXNtYXRjaAot
ICAgIGlmICggcy5jcm9zc0RvbWFpbiA9PSBudWxsICkgewotICAgIHBhcnRzID0gcnVybC5leGVj
KCBzLnVybC50b0xvd2VyQ2FzZSgpICk7Ci0gICAgcy5jcm9zc0RvbWFpbiA9ICEhKCBwYXJ0cyAm
JgotICAgICggcGFydHNbIDEgXSAhPT0gYWpheExvY1BhcnRzWyAxIF0gfHwgcGFydHNbIDIgXSAh
PT0gYWpheExvY1BhcnRzWyAyIF0gfHwKLSAgICAoIHBhcnRzWyAzIF0gfHwgKCBwYXJ0c1sgMSBd
ID09PSAiaHR0cDoiID8gODAgOiA0NDMgKSApICE9Ci0gICAgKCBhamF4TG9jUGFydHNbIDMgXSB8
fCAoIGFqYXhMb2NQYXJ0c1sgMSBdID09PSAiaHR0cDoiID8gODAgOiA0NDMgKSApICkKLSAgICAp
OwotICAgIH0KLQotICAgIC8vIENvbnZlcnQgZGF0YSBpZiBub3QgYWxyZWFkeSBhIHN0cmluZwot
ICAgIGlmICggcy5kYXRhICYmIHMucHJvY2Vzc0RhdGEgJiYgdHlwZW9mIHMuZGF0YSAhPT0gInN0
cmluZyIgKSB7Ci0gICAgcy5kYXRhID0galF1ZXJ5LnBhcmFtKCBzLmRhdGEsIHMudHJhZGl0aW9u
YWwgKTsKLSAgICB9Ci0KLSAgICAvLyBBcHBseSBwcmVmaWx0ZXJzCi0gICAgaW5zcGVjdFByZWZp
bHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMsIHMsIG9wdGlvbnMsIGpxWEhSICk7Ci0KLSAg
ICAvLyBJZiByZXF1ZXN0IHdhcyBhYm9ydGVkIGluc2lkZSBhIHByZWZpbHRlciwgc3RvcCB0aGVy
ZQotICAgIGlmICggc3RhdGUgPT09IDIgKSB7Ci0gICAgcmV0dXJuIGpxWEhSOwotICAgIH0KLQot
ICAgIC8vIFdlIGNhbiBmaXJlIGdsb2JhbCBldmVudHMgYXMgb2Ygbm93IGlmIGFza2VkIHRvCi0g
ICAgZmlyZUdsb2JhbHMgPSBzLmdsb2JhbDsKLQotICAgIC8vIFdhdGNoIGZvciBhIG5ldyBzZXQg
b2YgcmVxdWVzdHMKLSAgICBpZiAoIGZpcmVHbG9iYWxzICYmIGpRdWVyeS5hY3RpdmUrKyA9PT0g
MCApIHsKLSAgICBqUXVlcnkuZXZlbnQudHJpZ2dlcigiYWpheFN0YXJ0Iik7Ci0gICAgfQotCi0g
ICAgLy8gVXBwZXJjYXNlIHRoZSB0eXBlCi0gICAgcy50eXBlID0gcy50eXBlLnRvVXBwZXJDYXNl
KCk7Ci0KLSAgICAvLyBEZXRlcm1pbmUgaWYgcmVxdWVzdCBoYXMgY29udGVudAotICAgIHMuaGFz
Q29udGVudCA9ICFybm9Db250ZW50LnRlc3QoIHMudHlwZSApOwotCi0gICAgLy8gU2F2ZSB0aGUg
VVJMIGluIGNhc2Ugd2UncmUgdG95aW5nIHdpdGggdGhlIElmLU1vZGlmaWVkLVNpbmNlCi0gICAg
Ly8gYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyIGxhdGVyIG9uCi0gICAgY2FjaGVVUkwgPSBz
LnVybDsKLQotICAgIC8vIE1vcmUgb3B0aW9ucyBoYW5kbGluZyBmb3IgcmVxdWVzdHMgd2l0aCBu
byBjb250ZW50Ci0gICAgaWYgKCAhcy5oYXNDb250ZW50ICkgewotCi0gICAgLy8gSWYgZGF0YSBp
cyBhdmFpbGFibGUsIGFwcGVuZCBkYXRhIHRvIHVybAotICAgIGlmICggcy5kYXRhICkgewotICAg
IGNhY2hlVVJMID0gKCBzLnVybCArPSAoIGFqYXhfcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyAi
JiIgOiAiPyIgKSArIHMuZGF0YSApOwotICAgIC8vICM5NjgyOiByZW1vdmUgZGF0YSBzbyB0aGF0
IGl0J3Mgbm90IHVzZWQgaW4gYW4gZXZlbnR1YWwgcmV0cnkKLSAgICBkZWxldGUgcy5kYXRhOwot
ICAgIH0KLQotICAgIC8vIEFkZCBhbnRpLWNhY2hlIGluIHVybCBpZiBuZWVkZWQKLSAgICBpZiAo
IHMuY2FjaGUgPT09IGZhbHNlICkgewotICAgIHMudXJsID0gcnRzLnRlc3QoIGNhY2hlVVJMICkg
PwotCi0gICAgLy8gSWYgdGhlcmUgaXMgYWxyZWFkeSBhICdfJyBwYXJhbWV0ZXIsIHNldCBpdHMg
dmFsdWUKLSAgICBjYWNoZVVSTC5yZXBsYWNlKCBydHMsICIkMV89IiArIGFqYXhfbm9uY2UrKyAp
IDoKLQotICAgIC8vIE90aGVyd2lzZSBhZGQgb25lIHRvIHRoZSBlbmQKLSAgICBjYWNoZVVSTCAr
ICggYWpheF9ycXVlcnkudGVzdCggY2FjaGVVUkwgKSA/ICImIiA6ICI/IiApICsgIl89IiArIGFq
YXhfbm9uY2UrKzsKLSAgICB9Ci0gICAgfQotCi0gICAgLy8gU2V0IHRoZSBJZi1Nb2RpZmllZC1T
aW5jZSBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS4K
LSAgICBpZiAoIHMuaWZNb2RpZmllZCApIHsKLSAgICBpZiAoIGpRdWVyeS5sYXN0TW9kaWZpZWRb
IGNhY2hlVVJMIF0gKSB7Ci0gICAganFYSFIuc2V0UmVxdWVzdEhlYWRlciggIklmLU1vZGlmaWVk
LVNpbmNlIiwgalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSApOwotICAgIH0KLSAgICBp
ZiAoIGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdICkgewotICAgIGpxWEhSLnNldFJlcXVlc3RIZWFk
ZXIoICJJZi1Ob25lLU1hdGNoIiwgalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gKTsKLSAgICB9Ci0g
ICAgfQotCi0gICAgLy8gU2V0IHRoZSBjb3JyZWN0IGhlYWRlciwgaWYgZGF0YSBpcyBiZWluZyBz
ZW50Ci0gICAgaWYgKCBzLmRhdGEgJiYgcy5oYXNDb250ZW50ICYmIHMuY29udGVudFR5cGUgIT09
IGZhbHNlIHx8IG9wdGlvbnMuY29udGVudFR5cGUgKSB7Ci0gICAganFYSFIuc2V0UmVxdWVzdEhl
YWRlciggIkNvbnRlbnQtVHlwZSIsIHMuY29udGVudFR5cGUgKTsKLSAgICB9Ci0KLSAgICAvLyBT
ZXQgdGhlIEFjY2VwdHMgaGVhZGVyIGZvciB0aGUgc2VydmVyLCBkZXBlbmRpbmcgb24gdGhlIGRh
dGFUeXBlCi0gICAganFYSFIuc2V0UmVxdWVzdEhlYWRlcigKLSAgICAiQWNjZXB0IiwKLSAgICBz
LmRhdGFUeXBlc1sgMCBdICYmIHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbMF0gXSA/Ci0gICAgcy5h
Y2NlcHRzWyBzLmRhdGFUeXBlc1swXSBdICsgKCBzLmRhdGFUeXBlc1sgMCBdICE9PSAiKiIgPyAi
LCAiICsgYWxsVHlwZXMgKyAiOyBxPTAuMDEiIDogIiIgKSA6Ci0gICAgcy5hY2NlcHRzWyAiKiIg
XQotICAgICk7Ci0KLSAgICAvLyBDaGVjayBmb3IgaGVhZGVycyBvcHRpb24KLSAgICBmb3IgKCBp
IGluIHMuaGVhZGVycyApIHsKLSAgICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBzLmhlYWRl
cnNbIGkgXSApOwotICAgIH0KLQotICAgIC8vIEFsbG93IGN1c3RvbSBoZWFkZXJzL21pbWV0eXBl
cyBhbmQgZWFybHkgYWJvcnQKLSAgICBpZiAoIHMuYmVmb3JlU2VuZCAmJiAoIHMuYmVmb3JlU2Vu
ZC5jYWxsKCBjYWxsYmFja0NvbnRleHQsIGpxWEhSLCBzICkgPT09IGZhbHNlIHx8IHN0YXRlID09
PSAyICkgKSB7Ci0gICAgLy8gQWJvcnQgaWYgbm90IGRvbmUgYWxyZWFkeSBhbmQgcmV0dXJuCi0g
ICAgcmV0dXJuIGpxWEhSLmFib3J0KCk7Ci0gICAgfQotCi0gICAgLy8gYWJvcnRpbmcgaXMgbm8g
bG9uZ2VyIGEgY2FuY2VsbGF0aW9uCi0gICAgc3RyQWJvcnQgPSAiYWJvcnQiOwotCi0gICAgLy8g
SW5zdGFsbCBjYWxsYmFja3Mgb24gZGVmZXJyZWRzCi0gICAgZm9yICggaSBpbiB7IHN1Y2Nlc3M6
IDEsIGVycm9yOiAxLCBjb21wbGV0ZTogMSB9ICkgewotICAgIGpxWEhSWyBpIF0oIHNbIGkgXSAp
OwotICAgIH0KLQotICAgIC8vIEdldCB0cmFuc3BvcnQKLSAgICB0cmFuc3BvcnQgPSBpbnNwZWN0
UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cywgcywgb3B0aW9ucywganFYSFIgKTsK
LQotICAgIC8vIElmIG5vIHRyYW5zcG9ydCwgd2UgYXV0by1hYm9ydAotICAgIGlmICggIXRyYW5z
cG9ydCApIHsKLSAgICBkb25lKCAtMSwgIk5vIFRyYW5zcG9ydCIgKTsKLSAgICB9IGVsc2Ugewot
ICAgIGpxWEhSLnJlYWR5U3RhdGUgPSAxOwotCi0gICAgLy8gU2VuZCBnbG9iYWwgZXZlbnQKLSAg
ICBpZiAoIGZpcmVHbG9iYWxzICkgewotICAgIGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCAi
YWpheFNlbmQiLCBbIGpxWEhSLCBzIF0gKTsKLSAgICB9Ci0gICAgLy8gVGltZW91dAotICAgIGlm
ICggcy5hc3luYyAmJiBzLnRpbWVvdXQgPiAwICkgewotICAgIHRpbWVvdXRUaW1lciA9IHNldFRp
bWVvdXQoZnVuY3Rpb24oKSB7Ci0gICAganFYSFIuYWJvcnQoInRpbWVvdXQiKTsKLSAgICB9LCBz
LnRpbWVvdXQgKTsKLSAgICB9Ci0KLSAgICB0cnkgewotICAgIHN0YXRlID0gMTsKLSAgICB0cmFu
c3BvcnQuc2VuZCggcmVxdWVzdEhlYWRlcnMsIGRvbmUgKTsKLSAgICB9IGNhdGNoICggZSApIHsK
LSAgICAvLyBQcm9wYWdhdGUgZXhjZXB0aW9uIGFzIGVycm9yIGlmIG5vdCBkb25lCi0gICAgaWYg
KCBzdGF0ZSA8IDIgKSB7Ci0gICAgZG9uZSggLTEsIGUgKTsKLSAgICAvLyBTaW1wbHkgcmV0aHJv
dyBvdGhlcndpc2UKLSAgICB9IGVsc2UgewotICAgIHRocm93IGU7Ci0gICAgfQotICAgIH0KLSAg
ICB9Ci0KLSAgICAvLyBDYWxsYmFjayBmb3Igd2hlbiBldmVyeXRoaW5nIGlzIGRvbmUKLSAgICBm
dW5jdGlvbiBkb25lKCBzdGF0dXMsIG5hdGl2ZVN0YXR1c1RleHQsIHJlc3BvbnNlcywgaGVhZGVy
cyApIHsKLSAgICB2YXIgaXNTdWNjZXNzLCBzdWNjZXNzLCBlcnJvciwgcmVzcG9uc2UsIG1vZGlm
aWVkLAotICAgIHN0YXR1c1RleHQgPSBuYXRpdmVTdGF0dXNUZXh0OwotCi0gICAgLy8gQ2FsbGVk
IG9uY2UKLSAgICBpZiAoIHN0YXRlID09PSAyICkgewotICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICAvLyBTdGF0ZSBpcyAiZG9uZSIgbm93Ci0gICAgc3RhdGUgPSAyOwotCi0gICAgLy8gQ2xlYXIg
dGltZW91dCBpZiBpdCBleGlzdHMKLSAgICBpZiAoIHRpbWVvdXRUaW1lciApIHsKLSAgICBjbGVh
clRpbWVvdXQoIHRpbWVvdXRUaW1lciApOwotICAgIH0KLQotICAgIC8vIERlcmVmZXJlbmNlIHRy
YW5zcG9ydCBmb3IgZWFybHkgZ2FyYmFnZSBjb2xsZWN0aW9uCi0gICAgLy8gKG5vIG1hdHRlciBo
b3cgbG9uZyB0aGUganFYSFIgb2JqZWN0IHdpbGwgYmUgdXNlZCkKLSAgICB0cmFuc3BvcnQgPSB1
bmRlZmluZWQ7Ci0KLSAgICAvLyBDYWNoZSByZXNwb25zZSBoZWFkZXJzCi0gICAgcmVzcG9uc2VI
ZWFkZXJzU3RyaW5nID0gaGVhZGVycyB8fCAiIjsKLQotICAgIC8vIFNldCByZWFkeVN0YXRlCi0g
ICAganFYSFIucmVhZHlTdGF0ZSA9IHN0YXR1cyA+IDAgPyA0IDogMDsKLQotICAgIC8vIEdldCBy
ZXNwb25zZSBkYXRhCi0gICAgaWYgKCByZXNwb25zZXMgKSB7Ci0gICAgcmVzcG9uc2UgPSBhamF4
SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICk7Ci0gICAgfQotCi0gICAgLy8g
SWYgc3VjY2Vzc2Z1bCwgaGFuZGxlIHR5cGUgY2hhaW5pbmcKLSAgICBpZiAoIHN0YXR1cyA+PSAy
MDAgJiYgc3RhdHVzIDwgMzAwIHx8IHN0YXR1cyA9PT0gMzA0ICkgewotCi0gICAgLy8gU2V0IHRo
ZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlm
TW9kaWZpZWQgbW9kZS4KLSAgICBpZiAoIHMuaWZNb2RpZmllZCApIHsKLSAgICBtb2RpZmllZCA9
IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIik7Ci0gICAgaWYgKCBtb2Rp
ZmllZCApIHsKLSAgICBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdID0gbW9kaWZpZWQ7
Ci0gICAgfQotICAgIG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoImV0YWciKTsK
LSAgICBpZiAoIG1vZGlmaWVkICkgewotICAgIGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdID0gbW9k
aWZpZWQ7Ci0gICAgfQotICAgIH0KLQotICAgIC8vIGlmIG5vIGNvbnRlbnQKLSAgICBpZiAoIHN0
YXR1cyA9PT0gMjA0ICkgewotICAgIGlzU3VjY2VzcyA9IHRydWU7Ci0gICAgc3RhdHVzVGV4dCA9
ICJub2NvbnRlbnQiOwotCi0gICAgLy8gaWYgbm90IG1vZGlmaWVkCi0gICAgfSBlbHNlIGlmICgg
c3RhdHVzID09PSAzMDQgKSB7Ci0gICAgaXNTdWNjZXNzID0gdHJ1ZTsKLSAgICBzdGF0dXNUZXh0
ID0gIm5vdG1vZGlmaWVkIjsKLQotICAgIC8vIElmIHdlIGhhdmUgZGF0YSwgbGV0J3MgY29udmVy
dCBpdAotICAgIH0gZWxzZSB7Ci0gICAgaXNTdWNjZXNzID0gYWpheENvbnZlcnQoIHMsIHJlc3Bv
bnNlICk7Ci0gICAgc3RhdHVzVGV4dCA9IGlzU3VjY2Vzcy5zdGF0ZTsKLSAgICBzdWNjZXNzID0g
aXNTdWNjZXNzLmRhdGE7Ci0gICAgZXJyb3IgPSBpc1N1Y2Nlc3MuZXJyb3I7Ci0gICAgaXNTdWNj
ZXNzID0gIWVycm9yOwotICAgIH0KLSAgICB9IGVsc2UgewotICAgIC8vIFdlIGV4dHJhY3QgZXJy
b3IgZnJvbSBzdGF0dXNUZXh0Ci0gICAgLy8gdGhlbiBub3JtYWxpemUgc3RhdHVzVGV4dCBhbmQg
c3RhdHVzIGZvciBub24tYWJvcnRzCi0gICAgZXJyb3IgPSBzdGF0dXNUZXh0OwotICAgIGlmICgg
c3RhdHVzIHx8ICFzdGF0dXNUZXh0ICkgewotICAgIHN0YXR1c1RleHQgPSAiZXJyb3IiOwotICAg
IGlmICggc3RhdHVzIDwgMCApIHsKLSAgICBzdGF0dXMgPSAwOwotICAgIH0KLSAgICB9Ci0gICAg
fQotCi0gICAgLy8gU2V0IGRhdGEgZm9yIHRoZSBmYWtlIHhociBvYmplY3QKLSAgICBqcVhIUi5z
dGF0dXMgPSBzdGF0dXM7Ci0gICAganFYSFIuc3RhdHVzVGV4dCA9ICggbmF0aXZlU3RhdHVzVGV4
dCB8fCBzdGF0dXNUZXh0ICkgKyAiIjsKLQotICAgIC8vIFN1Y2Nlc3MvRXJyb3IKLSAgICBpZiAo
IGlzU3VjY2VzcyApIHsKLSAgICBkZWZlcnJlZC5yZXNvbHZlV2l0aCggY2FsbGJhY2tDb250ZXh0
LCBbIHN1Y2Nlc3MsIHN0YXR1c1RleHQsIGpxWEhSIF0gKTsKLSAgICB9IGVsc2UgewotICAgIGRl
ZmVycmVkLnJlamVjdFdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCwg
ZXJyb3IgXSApOwotICAgIH0KLQotICAgIC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzCi0g
ICAganFYSFIuc3RhdHVzQ29kZSggc3RhdHVzQ29kZSApOwotICAgIHN0YXR1c0NvZGUgPSB1bmRl
ZmluZWQ7Ci0KLSAgICBpZiAoIGZpcmVHbG9iYWxzICkgewotICAgIGdsb2JhbEV2ZW50Q29udGV4
dC50cmlnZ2VyKCBpc1N1Y2Nlc3MgPyAiYWpheFN1Y2Nlc3MiIDogImFqYXhFcnJvciIsCi0gICAg
WyBqcVhIUiwgcywgaXNTdWNjZXNzID8gc3VjY2VzcyA6IGVycm9yIF0gKTsKLSAgICB9Ci0KLSAg
ICAvLyBDb21wbGV0ZQotICAgIGNvbXBsZXRlRGVmZXJyZWQuZmlyZVdpdGgoIGNhbGxiYWNrQ29u
dGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCBdICk7Ci0KLSAgICBpZiAoIGZpcmVHbG9iYWxzICkg
ewotICAgIGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCAiYWpheENvbXBsZXRlIiwgWyBqcVhI
UiwgcyBdICk7Ci0gICAgLy8gSGFuZGxlIHRoZSBnbG9iYWwgQUpBWCBjb3VudGVyCi0gICAgaWYg
KCAhKCAtLWpRdWVyeS5hY3RpdmUgKSApIHsKLSAgICBqUXVlcnkuZXZlbnQudHJpZ2dlcigiYWph
eFN0b3AiKTsKLSAgICB9Ci0gICAgfQotICAgIH0KLQotICAgIHJldHVybiBqcVhIUjsKLSAgICB9
LAotCi0gICAgZ2V0U2NyaXB0OiBmdW5jdGlvbiggdXJsLCBjYWxsYmFjayApIHsKLSAgICByZXR1
cm4galF1ZXJ5LmdldCggdXJsLCB1bmRlZmluZWQsIGNhbGxiYWNrLCAic2NyaXB0IiApOwotICAg
IH0sCi0KLSAgICBnZXRKU09OOiBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjayApIHsKLSAg
ICByZXR1cm4galF1ZXJ5LmdldCggdXJsLCBkYXRhLCBjYWxsYmFjaywgImpzb24iICk7Ci0gICAg
fQotfSk7Ci0KLS8qIEhhbmRsZXMgcmVzcG9uc2VzIHRvIGFuIGFqYXggcmVxdWVzdDoKLSAqIC0g
c2V0cyBhbGwgcmVzcG9uc2VYWFggZmllbGRzIGFjY29yZGluZ2x5Ci0gKiAtIGZpbmRzIHRoZSBy
aWdodCBkYXRhVHlwZSAobWVkaWF0ZXMgYmV0d2VlbiBjb250ZW50LXR5cGUgYW5kIGV4cGVjdGVk
IGRhdGFUeXBlKQotICogLSByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlCi0gKi8K
LWZ1bmN0aW9uIGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKSB7Ci0g
ICAgdmFyIGZpcnN0RGF0YVR5cGUsIGN0LCBmaW5hbERhdGFUeXBlLCB0eXBlLAotICAgIGNvbnRl
bnRzID0gcy5jb250ZW50cywKLSAgICBkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcywKLSAgICByZXNw
b25zZUZpZWxkcyA9IHMucmVzcG9uc2VGaWVsZHM7Ci0KLSAgICAvLyBGaWxsIHJlc3BvbnNlWFhY
IGZpZWxkcwotICAgIGZvciAoIHR5cGUgaW4gcmVzcG9uc2VGaWVsZHMgKSB7Ci0gICAgaWYgKCB0
eXBlIGluIHJlc3BvbnNlcyApIHsKLSAgICBqcVhIUlsgcmVzcG9uc2VGaWVsZHNbdHlwZV0gXSA9
IHJlc3BvbnNlc1sgdHlwZSBdOwotICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZW1vdmUgYXV0byBk
YXRhVHlwZSBhbmQgZ2V0IGNvbnRlbnQtdHlwZSBpbiB0aGUgcHJvY2VzcwotICAgIHdoaWxlKCBk
YXRhVHlwZXNbIDAgXSA9PT0gIioiICkgewotICAgIGRhdGFUeXBlcy5zaGlmdCgpOwotICAgIGlm
ICggY3QgPT09IHVuZGVmaW5lZCApIHsKLSAgICBjdCA9IHMubWltZVR5cGUgfHwganFYSFIuZ2V0
UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtVHlwZSIpOwotICAgIH0KLSAgICB9Ci0KLSAgICAvLyBD
aGVjayBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBrbm93biBjb250ZW50LXR5cGUKLSAgICBpZiAo
IGN0ICkgewotICAgIGZvciAoIHR5cGUgaW4gY29udGVudHMgKSB7Ci0gICAgaWYgKCBjb250ZW50
c1sgdHlwZSBdICYmIGNvbnRlbnRzWyB0eXBlIF0udGVzdCggY3QgKSApIHsKLSAgICBkYXRhVHlw
ZXMudW5zaGlmdCggdHlwZSApOwotICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci0gICAgfQotCi0g
ICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgYSByZXNwb25zZSBmb3IgdGhlIGV4cGVjdGVk
IGRhdGFUeXBlCi0gICAgaWYgKCBkYXRhVHlwZXNbIDAgXSBpbiByZXNwb25zZXMgKSB7Ci0gICAg
ZmluYWxEYXRhVHlwZSA9IGRhdGFUeXBlc1sgMCBdOwotICAgIH0gZWxzZSB7Ci0gICAgLy8gVHJ5
IGNvbnZlcnRpYmxlIGRhdGFUeXBlcwotICAgIGZvciAoIHR5cGUgaW4gcmVzcG9uc2VzICkgewot
ICAgIGlmICggIWRhdGFUeXBlc1sgMCBdIHx8IHMuY29udmVydGVyc1sgdHlwZSArICIgIiArIGRh
dGFUeXBlc1swXSBdICkgewotICAgIGZpbmFsRGF0YVR5cGUgPSB0eXBlOwotICAgIGJyZWFrOwot
ICAgIH0KLSAgICBpZiAoICFmaXJzdERhdGFUeXBlICkgewotICAgIGZpcnN0RGF0YVR5cGUgPSB0
eXBlOwotICAgIH0KLSAgICB9Ci0gICAgLy8gT3IganVzdCB1c2UgZmlyc3Qgb25lCi0gICAgZmlu
YWxEYXRhVHlwZSA9IGZpbmFsRGF0YVR5cGUgfHwgZmlyc3REYXRhVHlwZTsKLSAgICB9Ci0KLSAg
ICAvLyBJZiB3ZSBmb3VuZCBhIGRhdGFUeXBlCi0gICAgLy8gV2UgYWRkIHRoZSBkYXRhVHlwZSB0
byB0aGUgbGlzdCBpZiBuZWVkZWQKLSAgICAvLyBhbmQgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5n
IHJlc3BvbnNlCi0gICAgaWYgKCBmaW5hbERhdGFUeXBlICkgewotICAgIGlmICggZmluYWxEYXRh
VHlwZSAhPT0gZGF0YVR5cGVzWyAwIF0gKSB7Ci0gICAgZGF0YVR5cGVzLnVuc2hpZnQoIGZpbmFs
RGF0YVR5cGUgKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3BvbnNlc1sgZmluYWxEYXRhVHlwZSBd
OwotICAgIH0KLX0KLQotLy8gQ2hhaW4gY29udmVyc2lvbnMgZ2l2ZW4gdGhlIHJlcXVlc3QgYW5k
IHRoZSBvcmlnaW5hbCByZXNwb25zZQotZnVuY3Rpb24gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNl
ICkgewotICAgIHZhciBjb252MiwgY3VycmVudCwgY29udiwgdG1wLAotICAgIGNvbnZlcnRlcnMg
PSB7fSwKLSAgICBpID0gMCwKLSAgICAvLyBXb3JrIHdpdGggYSBjb3B5IG9mIGRhdGFUeXBlcyBp
biBjYXNlIHdlIG5lZWQgdG8gbW9kaWZ5IGl0IGZvciBjb252ZXJzaW9uCi0gICAgZGF0YVR5cGVz
ID0gcy5kYXRhVHlwZXMuc2xpY2UoKSwKLSAgICBwcmV2ID0gZGF0YVR5cGVzWyAwIF07Ci0KLSAg
ICAvLyBBcHBseSB0aGUgZGF0YUZpbHRlciBpZiBwcm92aWRlZAotICAgIGlmICggcy5kYXRhRmls
dGVyICkgewotICAgIHJlc3BvbnNlID0gcy5kYXRhRmlsdGVyKCByZXNwb25zZSwgcy5kYXRhVHlw
ZSApOwotICAgIH0KLQotICAgIC8vIENyZWF0ZSBjb252ZXJ0ZXJzIG1hcCB3aXRoIGxvd2VyY2Fz
ZWQga2V5cwotICAgIGlmICggZGF0YVR5cGVzWyAxIF0gKSB7Ci0gICAgZm9yICggY29udiBpbiBz
LmNvbnZlcnRlcnMgKSB7Ci0gICAgY29udmVydGVyc1sgY29udi50b0xvd2VyQ2FzZSgpIF0gPSBz
LmNvbnZlcnRlcnNbIGNvbnYgXTsKLSAgICB9Ci0gICAgfQotCi0gICAgLy8gQ29udmVydCB0byBl
YWNoIHNlcXVlbnRpYWwgZGF0YVR5cGUsIHRvbGVyYXRpbmcgbGlzdCBtb2RpZmljYXRpb24KLSAg
ICBmb3IgKCA7IChjdXJyZW50ID0gZGF0YVR5cGVzWysraV0pOyApIHsKLQotICAgIC8vIFRoZXJl
J3Mgb25seSB3b3JrIHRvIGRvIGlmIGN1cnJlbnQgZGF0YVR5cGUgaXMgbm9uLWF1dG8KLSAgICBp
ZiAoIGN1cnJlbnQgIT09ICIqIiApIHsKLQotICAgIC8vIENvbnZlcnQgcmVzcG9uc2UgaWYgcHJl
diBkYXRhVHlwZSBpcyBub24tYXV0byBhbmQgZGlmZmVycyBmcm9tIGN1cnJlbnQKLSAgICBpZiAo
IHByZXYgIT09ICIqIiAmJiBwcmV2ICE9PSBjdXJyZW50ICkgewotCi0gICAgLy8gU2VlayBhIGRp
cmVjdCBjb252ZXJ0ZXIKLSAgICBjb252ID0gY29udmVydGVyc1sgcHJldiArICIgIiArIGN1cnJl
bnQgXSB8fCBjb252ZXJ0ZXJzWyAiKiAiICsgY3VycmVudCBdOwotCi0gICAgLy8gSWYgbm9uZSBm
b3VuZCwgc2VlayBhIHBhaXIKLSAgICBpZiAoICFjb252ICkgewotICAgIGZvciAoIGNvbnYyIGlu
IGNvbnZlcnRlcnMgKSB7Ci0KLSAgICAvLyBJZiBjb252MiBvdXRwdXRzIGN1cnJlbnQKLSAgICB0
bXAgPSBjb252Mi5zcGxpdCgiICIpOwotICAgIGlmICggdG1wWyAxIF0gPT09IGN1cnJlbnQgKSB7
Ci0KLSAgICAvLyBJZiBwcmV2IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYWNjZXB0ZWQgaW5wdXQKLSAg
ICBjb252ID0gY29udmVydGVyc1sgcHJldiArICIgIiArIHRtcFsgMCBdIF0gfHwKLSAgICBjb252
ZXJ0ZXJzWyAiKiAiICsgdG1wWyAwIF0gXTsKLSAgICBpZiAoIGNvbnYgKSB7Ci0gICAgLy8gQ29u
ZGVuc2UgZXF1aXZhbGVuY2UgY29udmVydGVycwotICAgIGlmICggY29udiA9PT0gdHJ1ZSApIHsK
LSAgICBjb252ID0gY29udmVydGVyc1sgY29udjIgXTsKLQotICAgIC8vIE90aGVyd2lzZSwgaW5z
ZXJ0IHRoZSBpbnRlcm1lZGlhdGUgZGF0YVR5cGUKLSAgICB9IGVsc2UgaWYgKCBjb252ZXJ0ZXJz
WyBjb252MiBdICE9PSB0cnVlICkgewotICAgIGN1cnJlbnQgPSB0bXBbIDAgXTsKLSAgICBkYXRh
VHlwZXMuc3BsaWNlKCBpLS0sIDAsIGN1cnJlbnQgKTsKLSAgICB9Ci0KLSAgICBicmVhazsKLSAg
ICB9Ci0gICAgfQotICAgIH0KLSAgICB9Ci0KLSAgICAvLyBBcHBseSBjb252ZXJ0ZXIgKGlmIG5v
dCBhbiBlcXVpdmFsZW5jZSkKLSAgICBpZiAoIGNvbnYgIT09IHRydWUgKSB7Ci0KLSAgICAvLyBV
bmxlc3MgZXJyb3JzIGFyZSBhbGxvd2VkIHRvIGJ1YmJsZSwgY2F0Y2ggYW5kIHJldHVybiB0aGVt
Ci0gICAgaWYgKCBjb252ICYmIHNbInRocm93cyJdICkgewotICAgIHJlc3BvbnNlID0gY29udigg
cmVzcG9uc2UgKTsKLSAgICB9IGVsc2UgewotICAgIHRyeSB7Ci0gICAgcmVzcG9uc2UgPSBjb252
KCByZXNwb25zZSApOwotICAgIH0gY2F0Y2ggKCBlICkgewotICAgIHJldHVybiB7IHN0YXRlOiAi
cGFyc2VyZXJyb3IiLCBlcnJvcjogY29udiA/IGUgOiAiTm8gY29udmVyc2lvbiBmcm9tICIgKyBw
cmV2ICsgIiB0byAiICsgY3VycmVudCB9OwotICAgIH0KLSAgICB9Ci0gICAgfQotICAgIH0KLQot
ICAgIC8vIFVwZGF0ZSBwcmV2IGZvciBuZXh0IGl0ZXJhdGlvbgotICAgIHByZXYgPSBjdXJyZW50
OwotICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4geyBzdGF0ZTogInN1Y2Nlc3MiLCBkYXRhOiBy
ZXNwb25zZSB9OwotfQotLy8gSW5zdGFsbCBzY3JpcHQgZGF0YVR5cGUKLWpRdWVyeS5hamF4U2V0
dXAoewotICAgIGFjY2VwdHM6IHsKLSAgICBzY3JpcHQ6ICJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxp
Y2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gt
ZWNtYXNjcmlwdCIKLSAgICB9LAotICAgIGNvbnRlbnRzOiB7Ci0gICAgc2NyaXB0OiAvKD86amF2
YXxlY21hKXNjcmlwdC8KLSAgICB9LAotICAgIGNvbnZlcnRlcnM6IHsKLSAgICAidGV4dCBzY3Jp
cHQiOiBmdW5jdGlvbiggdGV4dCApIHsKLSAgICBqUXVlcnkuZ2xvYmFsRXZhbCggdGV4dCApOwot
ICAgIHJldHVybiB0ZXh0OwotICAgIH0KLSAgICB9Ci19KTsKLQotLy8gSGFuZGxlIGNhY2hlJ3Mg
c3BlY2lhbCBjYXNlIGFuZCBnbG9iYWwKLWpRdWVyeS5hamF4UHJlZmlsdGVyKCAic2NyaXB0Iiwg
ZnVuY3Rpb24oIHMgKSB7Ci0gICAgaWYgKCBzLmNhY2hlID09PSB1bmRlZmluZWQgKSB7Ci0gICAg
cy5jYWNoZSA9IGZhbHNlOwotICAgIH0KLSAgICBpZiAoIHMuY3Jvc3NEb21haW4gKSB7Ci0gICAg
cy50eXBlID0gIkdFVCI7Ci0gICAgcy5nbG9iYWwgPSBmYWxzZTsKLSAgICB9Ci19KTsKLQotLy8g
QmluZCBzY3JpcHQgdGFnIGhhY2sgdHJhbnNwb3J0Ci1qUXVlcnkuYWpheFRyYW5zcG9ydCggInNj
cmlwdCIsIGZ1bmN0aW9uKHMpIHsKLQotICAgIC8vIFRoaXMgdHJhbnNwb3J0IG9ubHkgZGVhbHMg
d2l0aCBjcm9zcyBkb21haW4gcmVxdWVzdHMKLSAgICBpZiAoIHMuY3Jvc3NEb21haW4gKSB7Ci0K
LSAgICB2YXIgc2NyaXB0LAotICAgIGhlYWQgPSBkb2N1bWVudC5oZWFkIHx8IGpRdWVyeSgiaGVh
ZCIpWzBdIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKLQotICAgIHJldHVybiB7Ci0KLSAg
ICBzZW5kOiBmdW5jdGlvbiggXywgY2FsbGJhY2sgKSB7Ci0KLSAgICBzY3JpcHQgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsKLQotICAgIHNjcmlwdC5hc3luYyA9IHRydWU7Ci0K
LSAgICBpZiAoIHMuc2NyaXB0Q2hhcnNldCApIHsKLSAgICBzY3JpcHQuY2hhcnNldCA9IHMuc2Ny
aXB0Q2hhcnNldDsKLSAgICB9Ci0KLSAgICBzY3JpcHQuc3JjID0gcy51cmw7Ci0KLSAgICAvLyBB
dHRhY2ggaGFuZGxlcnMgZm9yIGFsbCBicm93c2VycwotICAgIHNjcmlwdC5vbmxvYWQgPSBzY3Jp
cHQub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oIF8sIGlzQWJvcnQgKSB7Ci0KLSAgICBp
ZiAoIGlzQWJvcnQgfHwgIXNjcmlwdC5yZWFkeVN0YXRlIHx8IC9sb2FkZWR8Y29tcGxldGUvLnRl
c3QoIHNjcmlwdC5yZWFkeVN0YXRlICkgKSB7Ci0KLSAgICAvLyBIYW5kbGUgbWVtb3J5IGxlYWsg
aW4gSUUKLSAgICBzY3JpcHQub25sb2FkID0gc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51
bGw7Ci0KLSAgICAvLyBSZW1vdmUgdGhlIHNjcmlwdAotICAgIGlmICggc2NyaXB0LnBhcmVudE5v
ZGUgKSB7Ci0gICAgc2NyaXB0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHNjcmlwdCApOwotICAg
IH0KLQotICAgIC8vIERlcmVmZXJlbmNlIHRoZSBzY3JpcHQKLSAgICBzY3JpcHQgPSBudWxsOwot
Ci0gICAgLy8gQ2FsbGJhY2sgaWYgbm90IGFib3J0Ci0gICAgaWYgKCAhaXNBYm9ydCApIHsKLSAg
ICBjYWxsYmFjayggMjAwLCAic3VjY2VzcyIgKTsKLSAgICB9Ci0gICAgfQotICAgIH07Ci0KLSAg
ICAvLyBDaXJjdW12ZW50IElFNiBidWdzIHdpdGggYmFzZSBlbGVtZW50cyAoIzI3MDkgYW5kICM0
Mzc4KSBieSBwcmVwZW5kaW5nCi0gICAgLy8gVXNlIG5hdGl2ZSBET00gbWFuaXB1bGF0aW9uIHRv
IGF2b2lkIG91ciBkb21NYW5pcCBBSkFYIHRyaWNrZXJ5Ci0gICAgaGVhZC5pbnNlcnRCZWZvcmUo
IHNjcmlwdCwgaGVhZC5maXJzdENoaWxkICk7Ci0gICAgfSwKLQotICAgIGFib3J0OiBmdW5jdGlv
bigpIHsKLSAgICBpZiAoIHNjcmlwdCApIHsKLSAgICBzY3JpcHQub25sb2FkKCB1bmRlZmluZWQs
IHRydWUgKTsKLSAgICB9Ci0gICAgfQotICAgIH07Ci0gICAgfQotfSk7Ci12YXIgb2xkQ2FsbGJh
Y2tzID0gW10sCi0gICAgcmpzb25wID0gLyg9KVw/KD89JnwkKXxcP1w/LzsKLQotLy8gRGVmYXVs
dCBqc29ucCBzZXR0aW5ncwotalF1ZXJ5LmFqYXhTZXR1cCh7Ci0gICAganNvbnA6ICJjYWxsYmFj
ayIsCi0gICAganNvbnBDYWxsYmFjazogZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGNhbGxiYWNrID0g
b2xkQ2FsbGJhY2tzLnBvcCgpIHx8ICggalF1ZXJ5LmV4cGFuZG8gKyAiXyIgKyAoIGFqYXhfbm9u
Y2UrKyApICk7Ci0gICAgdGhpc1sgY2FsbGJhY2sgXSA9IHRydWU7Ci0gICAgcmV0dXJuIGNhbGxi
YWNrOwotICAgIH0KLX0pOwotCi0vLyBEZXRlY3QsIG5vcm1hbGl6ZSBvcHRpb25zIGFuZCBpbnN0
YWxsIGNhbGxiYWNrcyBmb3IganNvbnAgcmVxdWVzdHMKLWpRdWVyeS5hamF4UHJlZmlsdGVyKCAi
anNvbiBqc29ucCIsIGZ1bmN0aW9uKCBzLCBvcmlnaW5hbFNldHRpbmdzLCBqcVhIUiApIHsKLQot
ICAgIHZhciBjYWxsYmFja05hbWUsIG92ZXJ3cml0dGVuLCByZXNwb25zZUNvbnRhaW5lciwKLSAg
ICBqc29uUHJvcCA9IHMuanNvbnAgIT09IGZhbHNlICYmICggcmpzb25wLnRlc3QoIHMudXJsICkg
PwotICAgICJ1cmwiIDoKLSAgICB0eXBlb2Ygcy5kYXRhID09PSAic3RyaW5nIiAmJiAhKCBzLmNv
bnRlbnRUeXBlIHx8ICIiICkuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNv
ZGVkIikgJiYgcmpzb25wLnRlc3QoIHMuZGF0YSApICYmICJkYXRhIgotICAgICk7Ci0KLSAgICAv
LyBIYW5kbGUgaWZmIHRoZSBleHBlY3RlZCBkYXRhIHR5cGUgaXMgImpzb25wIiBvciB3ZSBoYXZl
IGEgcGFyYW1ldGVyIHRvIHNldAotICAgIGlmICgganNvblByb3AgfHwgcy5kYXRhVHlwZXNbIDAg
XSA9PT0gImpzb25wIiApIHsKLQotICAgIC8vIEdldCBjYWxsYmFjayBuYW1lLCByZW1lbWJlcmlu
ZyBwcmVleGlzdGluZyB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggaXQKLSAgICBjYWxsYmFja05hbWUg
PSBzLmpzb25wQ2FsbGJhY2sgPSBqUXVlcnkuaXNGdW5jdGlvbiggcy5qc29ucENhbGxiYWNrICkg
PwotICAgIHMuanNvbnBDYWxsYmFjaygpIDoKLSAgICBzLmpzb25wQ2FsbGJhY2s7Ci0KLSAgICAv
LyBJbnNlcnQgY2FsbGJhY2sgaW50byB1cmwgb3IgZm9ybSBkYXRhCi0gICAgaWYgKCBqc29uUHJv
cCApIHsKLSAgICBzWyBqc29uUHJvcCBdID0gc1sganNvblByb3AgXS5yZXBsYWNlKCByanNvbnAs
ICIkMSIgKyBjYWxsYmFja05hbWUgKTsKLSAgICB9IGVsc2UgaWYgKCBzLmpzb25wICE9PSBmYWxz
ZSApIHsKLSAgICBzLnVybCArPSAoIGFqYXhfcnF1ZXJ5LnRlc3QoIHMudXJsICkgPyAiJiIgOiAi
PyIgKSArIHMuanNvbnAgKyAiPSIgKyBjYWxsYmFja05hbWU7Ci0gICAgfQotCi0gICAgLy8gVXNl
IGRhdGEgY29udmVydGVyIHRvIHJldHJpZXZlIGpzb24gYWZ0ZXIgc2NyaXB0IGV4ZWN1dGlvbgot
ICAgIHMuY29udmVydGVyc1sic2NyaXB0IGpzb24iXSA9IGZ1bmN0aW9uKCkgewotICAgIGlmICgg
IXJlc3BvbnNlQ29udGFpbmVyICkgewotICAgIGpRdWVyeS5lcnJvciggY2FsbGJhY2tOYW1lICsg
IiB3YXMgbm90IGNhbGxlZCIgKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3BvbnNlQ29udGFpbmVy
WyAwIF07Ci0gICAgfTsKLQotICAgIC8vIGZvcmNlIGpzb24gZGF0YVR5cGUKLSAgICBzLmRhdGFU
eXBlc1sgMCBdID0gImpzb24iOwotCi0gICAgLy8gSW5zdGFsbCBjYWxsYmFjawotICAgIG92ZXJ3
cml0dGVuID0gd2luZG93WyBjYWxsYmFja05hbWUgXTsKLSAgICB3aW5kb3dbIGNhbGxiYWNrTmFt
ZSBdID0gZnVuY3Rpb24oKSB7Ci0gICAgcmVzcG9uc2VDb250YWluZXIgPSBhcmd1bWVudHM7Ci0g
ICAgfTsKLQotICAgIC8vIENsZWFuLXVwIGZ1bmN0aW9uIChmaXJlcyBhZnRlciBjb252ZXJ0ZXJz
KQotICAgIGpxWEhSLmFsd2F5cyhmdW5jdGlvbigpIHsKLSAgICAvLyBSZXN0b3JlIHByZWV4aXN0
aW5nIHZhbHVlCi0gICAgd2luZG93WyBjYWxsYmFja05hbWUgXSA9IG92ZXJ3cml0dGVuOwotCi0g
ICAgLy8gU2F2ZSBiYWNrIGFzIGZyZWUKLSAgICBpZiAoIHNbIGNhbGxiYWNrTmFtZSBdICkgewot
ICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHJlLXVzaW5nIHRoZSBvcHRpb25zIGRvZXNuJ3Qgc2NyZXcg
dGhpbmdzIGFyb3VuZAotICAgIHMuanNvbnBDYWxsYmFjayA9IG9yaWdpbmFsU2V0dGluZ3MuanNv
bnBDYWxsYmFjazsKLQotICAgIC8vIHNhdmUgdGhlIGNhbGxiYWNrIG5hbWUgZm9yIGZ1dHVyZSB1
c2UKLSAgICBvbGRDYWxsYmFja3MucHVzaCggY2FsbGJhY2tOYW1lICk7Ci0gICAgfQotCi0gICAg
Ly8gQ2FsbCBpZiBpdCB3YXMgYSBmdW5jdGlvbiBhbmQgd2UgaGF2ZSBhIHJlc3BvbnNlCi0gICAg
aWYgKCByZXNwb25zZUNvbnRhaW5lciAmJiBqUXVlcnkuaXNGdW5jdGlvbiggb3ZlcndyaXR0ZW4g
KSApIHsKLSAgICBvdmVyd3JpdHRlbiggcmVzcG9uc2VDb250YWluZXJbIDAgXSApOwotICAgIH0K
LQotICAgIHJlc3BvbnNlQ29udGFpbmVyID0gb3ZlcndyaXR0ZW4gPSB1bmRlZmluZWQ7Ci0gICAg
fSk7Ci0KLSAgICAvLyBEZWxlZ2F0ZSB0byBzY3JpcHQKLSAgICByZXR1cm4gInNjcmlwdCI7Ci0g
ICAgfQotfSk7Ci12YXIgeGhyQ2FsbGJhY2tzLCB4aHJTdXBwb3J0ZWQsCi0gICAgeGhySWQgPSAw
LAotICAgIC8vICM1MjgwOiBJbnRlcm5ldCBFeHBsb3JlciB3aWxsIGtlZXAgY29ubmVjdGlvbnMg
YWxpdmUgaWYgd2UgZG9uJ3QgYWJvcnQgb24gdW5sb2FkCi0gICAgeGhyT25VbmxvYWRBYm9ydCA9
IHdpbmRvdy5BY3RpdmVYT2JqZWN0ICYmIGZ1bmN0aW9uKCkgewotICAgIC8vIEFib3J0IGFsbCBw
ZW5kaW5nIHJlcXVlc3RzCi0gICAgdmFyIGtleTsKLSAgICBmb3IgKCBrZXkgaW4geGhyQ2FsbGJh
Y2tzICkgewotICAgIHhockNhbGxiYWNrc1sga2V5IF0oIHVuZGVmaW5lZCwgdHJ1ZSApOwotICAg
IH0KLSAgICB9OwotCi0vLyBGdW5jdGlvbnMgdG8gY3JlYXRlIHhocnMKLWZ1bmN0aW9uIGNyZWF0
ZVN0YW5kYXJkWEhSKCkgewotICAgIHRyeSB7Ci0gICAgcmV0dXJuIG5ldyB3aW5kb3cuWE1MSHR0
cFJlcXVlc3QoKTsKLSAgICB9IGNhdGNoKCBlICkge30KLX0KLQotZnVuY3Rpb24gY3JlYXRlQWN0
aXZlWEhSKCkgewotICAgIHRyeSB7Ci0gICAgcmV0dXJuIG5ldyB3aW5kb3cuQWN0aXZlWE9iamVj
dCgiTWljcm9zb2Z0LlhNTEhUVFAiKTsKLSAgICB9IGNhdGNoKCBlICkge30KLX0KLQotLy8gQ3Jl
YXRlIHRoZSByZXF1ZXN0IG9iamVjdAotLy8gKFRoaXMgaXMgc3RpbGwgYXR0YWNoZWQgdG8gYWph
eFNldHRpbmdzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KQotalF1ZXJ5LmFqYXhTZXR0aW5n
cy54aHIgPSB3aW5kb3cuQWN0aXZlWE9iamVjdCA/Ci0gICAgLyogTWljcm9zb2Z0IGZhaWxlZCB0
byBwcm9wZXJseQotICAgICAqIGltcGxlbWVudCB0aGUgWE1MSHR0cFJlcXVlc3QgaW4gSUU3IChj
YW4ndCByZXF1ZXN0IGxvY2FsIGZpbGVzKSwKLSAgICAgKiBzbyB3ZSB1c2UgdGhlIEFjdGl2ZVhP
YmplY3Qgd2hlbiBpdCBpcyBhdmFpbGFibGUKLSAgICAgKiBBZGRpdGlvbmFsbHkgWE1MSHR0cFJl
cXVlc3QgY2FuIGJlIGRpc2FibGVkIGluIElFNy9JRTggc28KLSAgICAgKiB3ZSBuZWVkIGEgZmFs
bGJhY2suCi0gICAgICovCi0gICAgZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuICF0aGlzLmlzTG9j
YWwgJiYgY3JlYXRlU3RhbmRhcmRYSFIoKSB8fCBjcmVhdGVBY3RpdmVYSFIoKTsKLSAgICB9IDoK
LSAgICAvLyBGb3IgYWxsIG90aGVyIGJyb3dzZXJzLCB1c2UgdGhlIHN0YW5kYXJkIFhNTEh0dHBS
ZXF1ZXN0IG9iamVjdAotICAgIGNyZWF0ZVN0YW5kYXJkWEhSOwotCi0vLyBEZXRlcm1pbmUgc3Vw
cG9ydCBwcm9wZXJ0aWVzCi14aHJTdXBwb3J0ZWQgPSBqUXVlcnkuYWpheFNldHRpbmdzLnhocigp
OwotalF1ZXJ5LnN1cHBvcnQuY29ycyA9ICEheGhyU3VwcG9ydGVkICYmICggIndpdGhDcmVkZW50
aWFscyIgaW4geGhyU3VwcG9ydGVkICk7Ci14aHJTdXBwb3J0ZWQgPSBqUXVlcnkuc3VwcG9ydC5h
amF4ID0gISF4aHJTdXBwb3J0ZWQ7Ci0KLS8vIENyZWF0ZSB0cmFuc3BvcnQgaWYgdGhlIGJyb3dz
ZXIgY2FuIHByb3ZpZGUgYW4geGhyCi1pZiAoIHhoclN1cHBvcnRlZCApIHsKLQotICAgIGpRdWVy
eS5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKCBzICkgewotICAgIC8vIENyb3NzIGRvbWFpbiBvbmx5
IGFsbG93ZWQgaWYgc3VwcG9ydGVkIHRocm91Z2ggWE1MSHR0cFJlcXVlc3QKLSAgICBpZiAoICFz
LmNyb3NzRG9tYWluIHx8IGpRdWVyeS5zdXBwb3J0LmNvcnMgKSB7Ci0KLSAgICB2YXIgY2FsbGJh
Y2s7Ci0KLSAgICByZXR1cm4gewotICAgIHNlbmQ6IGZ1bmN0aW9uKCBoZWFkZXJzLCBjb21wbGV0
ZSApIHsKLQotICAgIC8vIEdldCBhIG5ldyB4aHIKLSAgICB2YXIgaGFuZGxlLCBpLAotICAgIHho
ciA9IHMueGhyKCk7Ci0KLSAgICAvLyBPcGVuIHRoZSBzb2NrZXQKLSAgICAvLyBQYXNzaW5nIG51
bGwgdXNlcm5hbWUsIGdlbmVyYXRlcyBhIGxvZ2luIHBvcHVwIG9uIE9wZXJhICgjMjg2NSkKLSAg
ICBpZiAoIHMudXNlcm5hbWUgKSB7Ci0gICAgeGhyLm9wZW4oIHMudHlwZSwgcy51cmwsIHMuYXN5
bmMsIHMudXNlcm5hbWUsIHMucGFzc3dvcmQgKTsKLSAgICB9IGVsc2UgewotICAgIHhoci5vcGVu
KCBzLnR5cGUsIHMudXJsLCBzLmFzeW5jICk7Ci0gICAgfQotCi0gICAgLy8gQXBwbHkgY3VzdG9t
IGZpZWxkcyBpZiBwcm92aWRlZAotICAgIGlmICggcy54aHJGaWVsZHMgKSB7Ci0gICAgZm9yICgg
aSBpbiBzLnhockZpZWxkcyApIHsKLSAgICB4aHJbIGkgXSA9IHMueGhyRmllbGRzWyBpIF07Ci0g
ICAgfQotICAgIH0KLQotICAgIC8vIE92ZXJyaWRlIG1pbWUgdHlwZSBpZiBuZWVkZWQKLSAgICBp
ZiAoIHMubWltZVR5cGUgJiYgeGhyLm92ZXJyaWRlTWltZVR5cGUgKSB7Ci0gICAgeGhyLm92ZXJy
aWRlTWltZVR5cGUoIHMubWltZVR5cGUgKTsKLSAgICB9Ci0KLSAgICAvLyBYLVJlcXVlc3RlZC1X
aXRoIGhlYWRlcgotICAgIC8vIEZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNlZWluZyBhcyBj
b25kaXRpb25zIGZvciBhIHByZWZsaWdodCBhcmUKLSAgICAvLyBha2luIHRvIGEgamlnc2F3IHB1
enpsZSwgd2Ugc2ltcGx5IG5ldmVyIHNldCBpdCB0byBiZSBzdXJlLgotICAgIC8vIChpdCBjYW4g
YWx3YXlzIGJlIHNldCBvbiBhIHBlci1yZXF1ZXN0IGJhc2lzIG9yIGV2ZW4gdXNpbmcgYWpheFNl
dHVwKQotICAgIC8vIEZvciBzYW1lLWRvbWFpbiByZXF1ZXN0cywgd29uJ3QgY2hhbmdlIGhlYWRl
ciBpZiBhbHJlYWR5IHByb3ZpZGVkLgotICAgIGlmICggIXMuY3Jvc3NEb21haW4gJiYgIWhlYWRl
cnNbIlgtUmVxdWVzdGVkLVdpdGgiXSApIHsKLSAgICBoZWFkZXJzWyJYLVJlcXVlc3RlZC1XaXRo
Il0gPSAiWE1MSHR0cFJlcXVlc3QiOwotICAgIH0KLQotICAgIC8vIE5lZWQgYW4gZXh0cmEgdHJ5
L2NhdGNoIGZvciBjcm9zcyBkb21haW4gcmVxdWVzdHMgaW4gRmlyZWZveCAzCi0gICAgdHJ5IHsK
LSAgICBmb3IgKCBpIGluIGhlYWRlcnMgKSB7Ci0gICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoIGks
IGhlYWRlcnNbIGkgXSApOwotICAgIH0KLSAgICB9IGNhdGNoKCBlcnIgKSB7fQotCi0gICAgLy8g
RG8gc2VuZCB0aGUgcmVxdWVzdAotICAgIC8vIFRoaXMgbWF5IHJhaXNlIGFuIGV4Y2VwdGlvbiB3
aGljaCBpcyBhY3R1YWxseQotICAgIC8vIGhhbmRsZWQgaW4galF1ZXJ5LmFqYXggKHNvIG5vIHRy
eS9jYXRjaCBoZXJlKQotICAgIHhoci5zZW5kKCAoIHMuaGFzQ29udGVudCAmJiBzLmRhdGEgKSB8
fCBudWxsICk7Ci0KLSAgICAvLyBMaXN0ZW5lcgotICAgIGNhbGxiYWNrID0gZnVuY3Rpb24oIF8s
IGlzQWJvcnQgKSB7Ci0gICAgdmFyIHN0YXR1cywgcmVzcG9uc2VIZWFkZXJzLCBzdGF0dXNUZXh0
LCByZXNwb25zZXM7Ci0KLSAgICAvLyBGaXJlZm94IHRocm93cyBleGNlcHRpb25zIHdoZW4gYWNj
ZXNzaW5nIHByb3BlcnRpZXMKLSAgICAvLyBvZiBhbiB4aHIgd2hlbiBhIG5ldHdvcmsgZXJyb3Ig
b2NjdXJyZWQKLSAgICAvLyBodHRwOi8vaGVscGZ1bC5rbm9icy1kaWFscy5jb20vaW5kZXgucGhw
L0NvbXBvbmVudF9yZXR1cm5lZF9mYWlsdXJlX2NvZGU6XzB4ODAwNDAxMTFfKE5TX0VSUk9SX05P
VF9BVkFJTEFCTEUpCi0gICAgdHJ5IHsKLQotICAgIC8vIFdhcyBuZXZlciBjYWxsZWQgYW5kIGlz
IGFib3J0ZWQgb3IgY29tcGxldGUKLSAgICBpZiAoIGNhbGxiYWNrICYmICggaXNBYm9ydCB8fCB4
aHIucmVhZHlTdGF0ZSA9PT0gNCApICkgewotCi0gICAgLy8gT25seSBjYWxsZWQgb25jZQotICAg
IGNhbGxiYWNrID0gdW5kZWZpbmVkOwotCi0gICAgLy8gRG8gbm90IGtlZXAgYXMgYWN0aXZlIGFu
eW1vcmUKLSAgICBpZiAoIGhhbmRsZSApIHsKLSAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0g
alF1ZXJ5Lm5vb3A7Ci0gICAgaWYgKCB4aHJPblVubG9hZEFib3J0ICkgewotICAgIGRlbGV0ZSB4
aHJDYWxsYmFja3NbIGhhbmRsZSBdOwotICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJZiBpdCdzIGFu
IGFib3J0Ci0gICAgaWYgKCBpc0Fib3J0ICkgewotICAgIC8vIEFib3J0IGl0IG1hbnVhbGx5IGlm
IG5lZWRlZAotICAgIGlmICggeGhyLnJlYWR5U3RhdGUgIT09IDQgKSB7Ci0gICAgeGhyLmFib3J0
KCk7Ci0gICAgfQotICAgIH0gZWxzZSB7Ci0gICAgcmVzcG9uc2VzID0ge307Ci0gICAgc3RhdHVz
ID0geGhyLnN0YXR1czsKLSAgICByZXNwb25zZUhlYWRlcnMgPSB4aHIuZ2V0QWxsUmVzcG9uc2VI
ZWFkZXJzKCk7Ci0KLSAgICAvLyBXaGVuIHJlcXVlc3RpbmcgYmluYXJ5IGRhdGEsIElFNi05IHdp
bGwgdGhyb3cgYW4gZXhjZXB0aW9uCi0gICAgLy8gb24gYW55IGF0dGVtcHQgdG8gYWNjZXNzIHJl
c3BvbnNlVGV4dCAoIzExNDI2KQotICAgIGlmICggdHlwZW9mIHhoci5yZXNwb25zZVRleHQgPT09
ICJzdHJpbmciICkgewotICAgIHJlc3BvbnNlcy50ZXh0ID0geGhyLnJlc3BvbnNlVGV4dDsKLSAg
ICB9Ci0KLSAgICAvLyBGaXJlZm94IHRocm93cyBhbiBleGNlcHRpb24gd2hlbiBhY2Nlc3NpbmcK
LSAgICAvLyBzdGF0dXNUZXh0IGZvciBmYXVsdHkgY3Jvc3MtZG9tYWluIHJlcXVlc3RzCi0gICAg
dHJ5IHsKLSAgICBzdGF0dXNUZXh0ID0geGhyLnN0YXR1c1RleHQ7Ci0gICAgfSBjYXRjaCggZSAp
IHsKLSAgICAvLyBXZSBub3JtYWxpemUgd2l0aCBXZWJraXQgZ2l2aW5nIGFuIGVtcHR5IHN0YXR1
c1RleHQKLSAgICBzdGF0dXNUZXh0ID0gIiI7Ci0gICAgfQotCi0gICAgLy8gRmlsdGVyIHN0YXR1
cyBmb3Igbm9uIHN0YW5kYXJkIGJlaGF2aW9ycwotCi0gICAgLy8gSWYgdGhlIHJlcXVlc3QgaXMg
bG9jYWwgYW5kIHdlIGhhdmUgZGF0YTogYXNzdW1lIGEgc3VjY2VzcwotICAgIC8vIChzdWNjZXNz
IHdpdGggbm8gZGF0YSB3b24ndCBnZXQgbm90aWZpZWQsIHRoYXQncyB0aGUgYmVzdCB3ZQotICAg
IC8vIGNhbiBkbyBnaXZlbiBjdXJyZW50IGltcGxlbWVudGF0aW9ucykKLSAgICBpZiAoICFzdGF0
dXMgJiYgcy5pc0xvY2FsICYmICFzLmNyb3NzRG9tYWluICkgewotICAgIHN0YXR1cyA9IHJlc3Bv
bnNlcy50ZXh0ID8gMjAwIDogNDA0OwotICAgIC8vIElFIC0gIzE0NTA6IHNvbWV0aW1lcyByZXR1
cm5zIDEyMjMgd2hlbiBpdCBzaG91bGQgYmUgMjA0Ci0gICAgfSBlbHNlIGlmICggc3RhdHVzID09
PSAxMjIzICkgewotICAgIHN0YXR1cyA9IDIwNDsKLSAgICB9Ci0gICAgfQotICAgIH0KLSAgICB9
IGNhdGNoKCBmaXJlZm94QWNjZXNzRXhjZXB0aW9uICkgewotICAgIGlmICggIWlzQWJvcnQgKSB7
Ci0gICAgY29tcGxldGUoIC0xLCBmaXJlZm94QWNjZXNzRXhjZXB0aW9uICk7Ci0gICAgfQotICAg
IH0KLQotICAgIC8vIENhbGwgY29tcGxldGUgaWYgbmVlZGVkCi0gICAgaWYgKCByZXNwb25zZXMg
KSB7Ci0gICAgY29tcGxldGUoIHN0YXR1cywgc3RhdHVzVGV4dCwgcmVzcG9uc2VzLCByZXNwb25z
ZUhlYWRlcnMgKTsKLSAgICB9Ci0gICAgfTsKLQotICAgIGlmICggIXMuYXN5bmMgKSB7Ci0gICAg
Ly8gaWYgd2UncmUgaW4gc3luYyBtb2RlIHdlIGZpcmUgdGhlIGNhbGxiYWNrCi0gICAgY2FsbGJh
Y2soKTsKLSAgICB9IGVsc2UgaWYgKCB4aHIucmVhZHlTdGF0ZSA9PT0gNCApIHsKLSAgICAvLyAo
SUU2ICYgSUU3KSBpZiBpdCdzIGluIGNhY2hlIGFuZCBoYXMgYmVlbgotICAgIC8vIHJldHJpZXZl
ZCBkaXJlY3RseSB3ZSBuZWVkIHRvIGZpcmUgdGhlIGNhbGxiYWNrCi0gICAgc2V0VGltZW91dCgg
Y2FsbGJhY2sgKTsKLSAgICB9IGVsc2UgewotICAgIGhhbmRsZSA9ICsreGhySWQ7Ci0gICAgaWYg
KCB4aHJPblVubG9hZEFib3J0ICkgewotICAgIC8vIENyZWF0ZSB0aGUgYWN0aXZlIHhocnMgY2Fs
bGJhY2tzIGxpc3QgaWYgbmVlZGVkCi0gICAgLy8gYW5kIGF0dGFjaCB0aGUgdW5sb2FkIGhhbmRs
ZXIKLSAgICBpZiAoICF4aHJDYWxsYmFja3MgKSB7Ci0gICAgeGhyQ2FsbGJhY2tzID0ge307Ci0g
ICAgalF1ZXJ5KCB3aW5kb3cgKS51bmxvYWQoIHhock9uVW5sb2FkQWJvcnQgKTsKLSAgICB9Ci0g
ICAgLy8gQWRkIHRvIGxpc3Qgb2YgYWN0aXZlIHhocnMgY2FsbGJhY2tzCi0gICAgeGhyQ2FsbGJh
Y2tzWyBoYW5kbGUgXSA9IGNhbGxiYWNrOwotICAgIH0KLSAgICB4aHIub25yZWFkeXN0YXRlY2hh
bmdlID0gY2FsbGJhY2s7Ci0gICAgfQotICAgIH0sCi0KLSAgICBhYm9ydDogZnVuY3Rpb24oKSB7
Ci0gICAgaWYgKCBjYWxsYmFjayApIHsKLSAgICBjYWxsYmFjayggdW5kZWZpbmVkLCB0cnVlICk7
Ci0gICAgfQotICAgIH0KLSAgICB9OwotICAgIH0KLSAgICB9KTsKLX0KLXZhciBmeE5vdywgdGlt
ZXJJZCwKLSAgICByZnh0eXBlcyA9IC9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLywKLSAgICByZnhu
dW0gPSBuZXcgUmVnRXhwKCAiXig/OihbKy1dKT18KSgiICsgY29yZV9wbnVtICsgIikoW2EteiVd
KikkIiwgImkiICksCi0gICAgcnJ1biA9IC9xdWV1ZUhvb2tzJC8sCi0gICAgYW5pbWF0aW9uUHJl
ZmlsdGVycyA9IFsgZGVmYXVsdFByZWZpbHRlciBdLAotICAgIHR3ZWVuZXJzID0gewotICAgICIq
IjogW2Z1bmN0aW9uKCBwcm9wLCB2YWx1ZSApIHsKLSAgICB2YXIgZW5kLCB1bml0LAotICAgIHR3
ZWVuID0gdGhpcy5jcmVhdGVUd2VlbiggcHJvcCwgdmFsdWUgKSwKLSAgICBwYXJ0cyA9IHJmeG51
bS5leGVjKCB2YWx1ZSApLAotICAgIHRhcmdldCA9IHR3ZWVuLmN1cigpLAotICAgIHN0YXJ0ID0g
K3RhcmdldCB8fCAwLAotICAgIHNjYWxlID0gMSwKLSAgICBtYXhJdGVyYXRpb25zID0gMjA7Ci0K
LSAgICBpZiAoIHBhcnRzICkgewotICAgIGVuZCA9ICtwYXJ0c1syXTsKLSAgICB1bml0ID0gcGFy
dHNbM10gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gPyAiIiA6ICJweCIgKTsKLQotICAg
IC8vIFdlIG5lZWQgdG8gY29tcHV0ZSBzdGFydGluZyB2YWx1ZQotICAgIGlmICggdW5pdCAhPT0g
InB4IiAmJiBzdGFydCApIHsKLSAgICAvLyBJdGVyYXRpdmVseSBhcHByb3hpbWF0ZSBmcm9tIGEg
bm9uemVybyBzdGFydGluZyBwb2ludAotICAgIC8vIFByZWZlciB0aGUgY3VycmVudCBwcm9wZXJ0
eSwgYmVjYXVzZSB0aGlzIHByb2Nlc3Mgd2lsbCBiZSB0cml2aWFsIGlmIGl0IHVzZXMgdGhlIHNh
bWUgdW5pdHMKLSAgICAvLyBGYWxsYmFjayB0byBlbmQgb3IgYSBzaW1wbGUgY29uc3RhbnQKLSAg
ICBzdGFydCA9IGpRdWVyeS5jc3MoIHR3ZWVuLmVsZW0sIHByb3AsIHRydWUgKSB8fCBlbmQgfHwg
MTsKLQotICAgIGRvIHsKLSAgICAvLyBJZiBwcmV2aW91cyBpdGVyYXRpb24gemVyb2VkIG91dCwg
ZG91YmxlIHVudGlsIHdlIGdldCAqc29tZXRoaW5nKgotICAgIC8vIFVzZSBhIHN0cmluZyBmb3Ig
ZG91YmxpbmcgZmFjdG9yIHNvIHdlIGRvbid0IGFjY2lkZW50YWxseSBzZWUgc2NhbGUgYXMgdW5j
aGFuZ2VkIGJlbG93Ci0gICAgc2NhbGUgPSBzY2FsZSB8fCAiLjUiOwotCi0gICAgLy8gQWRqdXN0
IGFuZCBhcHBseQotICAgIHN0YXJ0ID0gc3RhcnQgLyBzY2FsZTsKLSAgICBqUXVlcnkuc3R5bGUo
IHR3ZWVuLmVsZW0sIHByb3AsIHN0YXJ0ICsgdW5pdCApOwotCi0gICAgLy8gVXBkYXRlIHNjYWxl
LCB0b2xlcmF0aW5nIHplcm8gb3IgTmFOIGZyb20gdHdlZW4uY3VyKCkKLSAgICAvLyBBbmQgYnJl
YWtpbmcgdGhlIGxvb3AgaWYgc2NhbGUgaXMgdW5jaGFuZ2VkIG9yIHBlcmZlY3QsIG9yIGlmIHdl
J3ZlIGp1c3QgaGFkIGVub3VnaAotICAgIH0gd2hpbGUgKCBzY2FsZSAhPT0gKHNjYWxlID0gdHdl
ZW4uY3VyKCkgLyB0YXJnZXQpICYmIHNjYWxlICE9PSAxICYmIC0tbWF4SXRlcmF0aW9ucyApOwot
ICAgIH0KLQotICAgIHR3ZWVuLnVuaXQgPSB1bml0OwotICAgIHR3ZWVuLnN0YXJ0ID0gc3RhcnQ7
Ci0gICAgLy8gSWYgYSArPS8tPSB0b2tlbiB3YXMgcHJvdmlkZWQsIHdlJ3JlIGRvaW5nIGEgcmVs
YXRpdmUgYW5pbWF0aW9uCi0gICAgdHdlZW4uZW5kID0gcGFydHNbMV0gPyBzdGFydCArICggcGFy
dHNbMV0gKyAxICkgKiBlbmQgOiBlbmQ7Ci0gICAgfQotICAgIHJldHVybiB0d2VlbjsKLSAgICB9
XQotICAgIH07Ci0KLS8vIEFuaW1hdGlvbnMgY3JlYXRlZCBzeW5jaHJvbm91c2x5IHdpbGwgcnVu
IHN5bmNocm9ub3VzbHkKLWZ1bmN0aW9uIGNyZWF0ZUZ4Tm93KCkgewotICAgIHNldFRpbWVvdXQo
ZnVuY3Rpb24oKSB7Ci0gICAgZnhOb3cgPSB1bmRlZmluZWQ7Ci0gICAgfSk7Ci0gICAgcmV0dXJu
ICggZnhOb3cgPSBqUXVlcnkubm93KCkgKTsKLX0KLQotZnVuY3Rpb24gY3JlYXRlVHdlZW5zKCBh
bmltYXRpb24sIHByb3BzICkgewotICAgIGpRdWVyeS5lYWNoKCBwcm9wcywgZnVuY3Rpb24oIHBy
b3AsIHZhbHVlICkgewotICAgIHZhciBjb2xsZWN0aW9uID0gKCB0d2VlbmVyc1sgcHJvcCBdIHx8
IFtdICkuY29uY2F0KCB0d2VlbmVyc1sgIioiIF0gKSwKLSAgICBpbmRleCA9IDAsCi0gICAgbGVu
Z3RoID0gY29sbGVjdGlvbi5sZW5ndGg7Ci0gICAgZm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5k
ZXgrKyApIHsKLSAgICBpZiAoIGNvbGxlY3Rpb25bIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBw
cm9wLCB2YWx1ZSApICkgewotCi0gICAgLy8gd2UncmUgZG9uZSB3aXRoIHRoaXMgcHJvcGVydHkK
LSAgICByZXR1cm47Ci0gICAgfQotICAgIH0KLSAgICB9KTsKLX0KLQotZnVuY3Rpb24gQW5pbWF0
aW9uKCBlbGVtLCBwcm9wZXJ0aWVzLCBvcHRpb25zICkgewotICAgIHZhciByZXN1bHQsCi0gICAg
c3RvcHBlZCwKLSAgICBpbmRleCA9IDAsCi0gICAgbGVuZ3RoID0gYW5pbWF0aW9uUHJlZmlsdGVy
cy5sZW5ndGgsCi0gICAgZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKS5hbHdheXMoIGZ1bmN0
aW9uKCkgewotICAgIC8vIGRvbid0IG1hdGNoIGVsZW0gaW4gdGhlIDphbmltYXRlZCBzZWxlY3Rv
cgotICAgIGRlbGV0ZSB0aWNrLmVsZW07Ci0gICAgfSksCi0gICAgdGljayA9IGZ1bmN0aW9uKCkg
ewotICAgIGlmICggc3RvcHBlZCApIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHZh
ciBjdXJyZW50VGltZSA9IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCksCi0gICAgcmVtYWluaW5nID0g
TWF0aC5tYXgoIDAsIGFuaW1hdGlvbi5zdGFydFRpbWUgKyBhbmltYXRpb24uZHVyYXRpb24gLSBj
dXJyZW50VGltZSApLAotICAgIC8vIGFyY2hhaWMgY3Jhc2ggYnVnIHdvbid0IGFsbG93IHVzIHRv
IHVzZSAxIC0gKCAwLjUgfHwgMCApICgjMTI0OTcpCi0gICAgdGVtcCA9IHJlbWFpbmluZyAvIGFu
aW1hdGlvbi5kdXJhdGlvbiB8fCAwLAotICAgIHBlcmNlbnQgPSAxIC0gdGVtcCwKLSAgICBpbmRl
eCA9IDAsCi0gICAgbGVuZ3RoID0gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGg7Ci0KLSAgICBmb3Ig
KCA7IGluZGV4IDwgbGVuZ3RoIDsgaW5kZXgrKyApIHsKLSAgICBhbmltYXRpb24udHdlZW5zWyBp
bmRleCBdLnJ1biggcGVyY2VudCApOwotICAgIH0KLQotICAgIGRlZmVycmVkLm5vdGlmeVdpdGgo
IGVsZW0sIFsgYW5pbWF0aW9uLCBwZXJjZW50LCByZW1haW5pbmcgXSk7Ci0KLSAgICBpZiAoIHBl
cmNlbnQgPCAxICYmIGxlbmd0aCApIHsKLSAgICByZXR1cm4gcmVtYWluaW5nOwotICAgIH0gZWxz
ZSB7Ci0gICAgZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uIF0gKTsKLSAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIH0sCi0gICAgYW5pbWF0aW9uID0gZGVmZXJyZWQu
cHJvbWlzZSh7Ci0gICAgZWxlbTogZWxlbSwKLSAgICBwcm9wczogalF1ZXJ5LmV4dGVuZCgge30s
IHByb3BlcnRpZXMgKSwKLSAgICBvcHRzOiBqUXVlcnkuZXh0ZW5kKCB0cnVlLCB7IHNwZWNpYWxF
YXNpbmc6IHt9IH0sIG9wdGlvbnMgKSwKLSAgICBvcmlnaW5hbFByb3BlcnRpZXM6IHByb3BlcnRp
ZXMsCi0gICAgb3JpZ2luYWxPcHRpb25zOiBvcHRpb25zLAotICAgIHN0YXJ0VGltZTogZnhOb3cg
fHwgY3JlYXRlRnhOb3coKSwKLSAgICBkdXJhdGlvbjogb3B0aW9ucy5kdXJhdGlvbiwKLSAgICB0
d2VlbnM6IFtdLAotICAgIGNyZWF0ZVR3ZWVuOiBmdW5jdGlvbiggcHJvcCwgZW5kICkgewotICAg
IHZhciB0d2VlbiA9IGpRdWVyeS5Ud2VlbiggZWxlbSwgYW5pbWF0aW9uLm9wdHMsIHByb3AsIGVu
ZCwKLSAgICBhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nWyBwcm9wIF0gfHwgYW5pbWF0aW9u
Lm9wdHMuZWFzaW5nICk7Ci0gICAgYW5pbWF0aW9uLnR3ZWVucy5wdXNoKCB0d2VlbiApOwotICAg
IHJldHVybiB0d2VlbjsKLSAgICB9LAotICAgIHN0b3A6IGZ1bmN0aW9uKCBnb3RvRW5kICkgewot
ICAgIHZhciBpbmRleCA9IDAsCi0gICAgLy8gaWYgd2UgYXJlIGdvaW5nIHRvIHRoZSBlbmQsIHdl
IHdhbnQgdG8gcnVuIGFsbCB0aGUgdHdlZW5zCi0gICAgLy8gb3RoZXJ3aXNlIHdlIHNraXAgdGhp
cyBwYXJ0Ci0gICAgbGVuZ3RoID0gZ290b0VuZCA/IGFuaW1hdGlvbi50d2VlbnMubGVuZ3RoIDog
MDsKLSAgICBpZiAoIHN0b3BwZWQgKSB7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotICAgIHN0
b3BwZWQgPSB0cnVlOwotICAgIGZvciAoIDsgaW5kZXggPCBsZW5ndGggOyBpbmRleCsrICkgewot
ICAgIGFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCAxICk7Ci0gICAgfQotCi0gICAgLy8g
cmVzb2x2ZSB3aGVuIHdlIHBsYXllZCB0aGUgbGFzdCBmcmFtZQotICAgIC8vIG90aGVyd2lzZSwg
cmVqZWN0Ci0gICAgaWYgKCBnb3RvRW5kICkgewotICAgIGRlZmVycmVkLnJlc29sdmVXaXRoKCBl
bGVtLCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7Ci0gICAgfSBlbHNlIHsKLSAgICBkZWZlcnJl
ZC5yZWplY3RXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7Ci0gICAgfQotICAg
IHJldHVybiB0aGlzOwotICAgIH0KLSAgICB9KSwKLSAgICBwcm9wcyA9IGFuaW1hdGlvbi5wcm9w
czsKLQotICAgIHByb3BGaWx0ZXIoIHByb3BzLCBhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5n
ICk7Ci0KLSAgICBmb3IgKCA7IGluZGV4IDwgbGVuZ3RoIDsgaW5kZXgrKyApIHsKLSAgICByZXN1
bHQgPSBhbmltYXRpb25QcmVmaWx0ZXJzWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlvbiwgZWxlbSwg
cHJvcHMsIGFuaW1hdGlvbi5vcHRzICk7Ci0gICAgaWYgKCByZXN1bHQgKSB7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLSAgICB9Ci0gICAgfQotCi0gICAgY3JlYXRlVHdlZW5zKCBhbmltYXRpb24sIHBy
b3BzICk7Ci0KLSAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBhbmltYXRpb24ub3B0cy5zdGFy
dCApICkgewotICAgIGFuaW1hdGlvbi5vcHRzLnN0YXJ0LmNhbGwoIGVsZW0sIGFuaW1hdGlvbiAp
OwotICAgIH0KLQotICAgIGpRdWVyeS5meC50aW1lcigKLSAgICBqUXVlcnkuZXh0ZW5kKCB0aWNr
LCB7Ci0gICAgZWxlbTogZWxlbSwKLSAgICBhbmltOiBhbmltYXRpb24sCi0gICAgcXVldWU6IGFu
aW1hdGlvbi5vcHRzLnF1ZXVlCi0gICAgfSkKLSAgICApOwotCi0gICAgLy8gYXR0YWNoIGNhbGxi
YWNrcyBmcm9tIG9wdGlvbnMKLSAgICByZXR1cm4gYW5pbWF0aW9uLnByb2dyZXNzKCBhbmltYXRp
b24ub3B0cy5wcm9ncmVzcyApCi0gICAgLmRvbmUoIGFuaW1hdGlvbi5vcHRzLmRvbmUsIGFuaW1h
dGlvbi5vcHRzLmNvbXBsZXRlICkKLSAgICAuZmFpbCggYW5pbWF0aW9uLm9wdHMuZmFpbCApCi0g
ICAgLmFsd2F5cyggYW5pbWF0aW9uLm9wdHMuYWx3YXlzICk7Ci19Ci0KLWZ1bmN0aW9uIHByb3BG
aWx0ZXIoIHByb3BzLCBzcGVjaWFsRWFzaW5nICkgewotICAgIHZhciB2YWx1ZSwgbmFtZSwgaW5k
ZXgsIGVhc2luZywgaG9va3M7Ci0KLSAgICAvLyBjYW1lbENhc2UsIHNwZWNpYWxFYXNpbmcgYW5k
IGV4cGFuZCBjc3NIb29rIHBhc3MKLSAgICBmb3IgKCBpbmRleCBpbiBwcm9wcyApIHsKLSAgICBu
YW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggaW5kZXggKTsKLSAgICBlYXNpbmcgPSBzcGVjaWFsRWFz
aW5nWyBuYW1lIF07Ci0gICAgdmFsdWUgPSBwcm9wc1sgaW5kZXggXTsKLSAgICBpZiAoIGpRdWVy
eS5pc0FycmF5KCB2YWx1ZSApICkgewotICAgIGVhc2luZyA9IHZhbHVlWyAxIF07Ci0gICAgdmFs
dWUgPSBwcm9wc1sgaW5kZXggXSA9IHZhbHVlWyAwIF07Ci0gICAgfQotCi0gICAgaWYgKCBpbmRl
eCAhPT0gbmFtZSApIHsKLSAgICBwcm9wc1sgbmFtZSBdID0gdmFsdWU7Ci0gICAgZGVsZXRlIHBy
b3BzWyBpbmRleCBdOwotICAgIH0KLQotICAgIGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1l
IF07Ci0gICAgaWYgKCBob29rcyAmJiAiZXhwYW5kIiBpbiBob29rcyApIHsKLSAgICB2YWx1ZSA9
IGhvb2tzLmV4cGFuZCggdmFsdWUgKTsKLSAgICBkZWxldGUgcHJvcHNbIG5hbWUgXTsKLQotICAg
IC8vIG5vdCBxdWl0ZSAkLmV4dGVuZCwgdGhpcyB3b250IG92ZXJ3cml0ZSBrZXlzIGFscmVhZHkg
cHJlc2VudC4KLSAgICAvLyBhbHNvIC0gcmV1c2luZyAnaW5kZXgnIGZyb20gYWJvdmUgYmVjYXVz
ZSB3ZSBoYXZlIHRoZSBjb3JyZWN0ICJuYW1lIgotICAgIGZvciAoIGluZGV4IGluIHZhbHVlICkg
ewotICAgIGlmICggISggaW5kZXggaW4gcHJvcHMgKSApIHsKLSAgICBwcm9wc1sgaW5kZXggXSA9
IHZhbHVlWyBpbmRleCBdOwotICAgIHNwZWNpYWxFYXNpbmdbIGluZGV4IF0gPSBlYXNpbmc7Ci0g
ICAgfQotICAgIH0KLSAgICB9IGVsc2UgewotICAgIHNwZWNpYWxFYXNpbmdbIG5hbWUgXSA9IGVh
c2luZzsKLSAgICB9Ci0gICAgfQotfQotCi1qUXVlcnkuQW5pbWF0aW9uID0galF1ZXJ5LmV4dGVu
ZCggQW5pbWF0aW9uLCB7Ci0KLSAgICB0d2VlbmVyOiBmdW5jdGlvbiggcHJvcHMsIGNhbGxiYWNr
ICkgewotICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHByb3BzICkgKSB7Ci0gICAgY2FsbGJh
Y2sgPSBwcm9wczsKLSAgICBwcm9wcyA9IFsgIioiIF07Ci0gICAgfSBlbHNlIHsKLSAgICBwcm9w
cyA9IHByb3BzLnNwbGl0KCIgIik7Ci0gICAgfQotCi0gICAgdmFyIHByb3AsCi0gICAgaW5kZXgg
PSAwLAotICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDsKLQotICAgIGZvciAoIDsgaW5kZXggPCBs
ZW5ndGggOyBpbmRleCsrICkgewotICAgIHByb3AgPSBwcm9wc1sgaW5kZXggXTsKLSAgICB0d2Vl
bmVyc1sgcHJvcCBdID0gdHdlZW5lcnNbIHByb3AgXSB8fCBbXTsKLSAgICB0d2VlbmVyc1sgcHJv
cCBdLnVuc2hpZnQoIGNhbGxiYWNrICk7Ci0gICAgfQotICAgIH0sCi0KLSAgICBwcmVmaWx0ZXI6
IGZ1bmN0aW9uKCBjYWxsYmFjaywgcHJlcGVuZCApIHsKLSAgICBpZiAoIHByZXBlbmQgKSB7Ci0g
ICAgYW5pbWF0aW9uUHJlZmlsdGVycy51bnNoaWZ0KCBjYWxsYmFjayApOwotICAgIH0gZWxzZSB7
Ci0gICAgYW5pbWF0aW9uUHJlZmlsdGVycy5wdXNoKCBjYWxsYmFjayApOwotICAgIH0KLSAgICB9
Ci19KTsKLQotZnVuY3Rpb24gZGVmYXVsdFByZWZpbHRlciggZWxlbSwgcHJvcHMsIG9wdHMgKSB7
Ci0gICAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi8KLSAgICB2YXIgcHJvcCwgaW5kZXgsIGxl
bmd0aCwKLSAgICB2YWx1ZSwgZGF0YVNob3csIHRvZ2dsZSwKLSAgICB0d2VlbiwgaG9va3MsIG9s
ZGZpcmUsCi0gICAgYW5pbSA9IHRoaXMsCi0gICAgc3R5bGUgPSBlbGVtLnN0eWxlLAotICAgIG9y
aWcgPSB7fSwKLSAgICBoYW5kbGVkID0gW10sCi0gICAgaGlkZGVuID0gZWxlbS5ub2RlVHlwZSAm
JiBpc0hpZGRlbiggZWxlbSApOwotCi0gICAgLy8gaGFuZGxlIHF1ZXVlOiBmYWxzZSBwcm9taXNl
cwotICAgIGlmICggIW9wdHMucXVldWUgKSB7Ci0gICAgaG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9v
a3MoIGVsZW0sICJmeCIgKTsKLSAgICBpZiAoIGhvb2tzLnVucXVldWVkID09IG51bGwgKSB7Ci0g
ICAgaG9va3MudW5xdWV1ZWQgPSAwOwotICAgIG9sZGZpcmUgPSBob29rcy5lbXB0eS5maXJlOwot
ICAgIGhvb2tzLmVtcHR5LmZpcmUgPSBmdW5jdGlvbigpIHsKLSAgICBpZiAoICFob29rcy51bnF1
ZXVlZCApIHsKLSAgICBvbGRmaXJlKCk7Ci0gICAgfQotICAgIH07Ci0gICAgfQotICAgIGhvb2tz
LnVucXVldWVkKys7Ci0KLSAgICBhbmltLmFsd2F5cyhmdW5jdGlvbigpIHsKLSAgICAvLyBkb2lu
ZyB0aGlzIG1ha2VzIHN1cmUgdGhhdCB0aGUgY29tcGxldGUgaGFuZGxlciB3aWxsIGJlIGNhbGxl
ZAotICAgIC8vIGJlZm9yZSB0aGlzIGNvbXBsZXRlcwotICAgIGFuaW0uYWx3YXlzKGZ1bmN0aW9u
KCkgewotICAgIGhvb2tzLnVucXVldWVkLS07Ci0gICAgaWYgKCAhalF1ZXJ5LnF1ZXVlKCBlbGVt
LCAiZngiICkubGVuZ3RoICkgewotICAgIGhvb2tzLmVtcHR5LmZpcmUoKTsKLSAgICB9Ci0gICAg
fSk7Ci0gICAgfSk7Ci0gICAgfQotCi0gICAgLy8gaGVpZ2h0L3dpZHRoIG92ZXJmbG93IHBhc3MK
LSAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKCAiaGVpZ2h0IiBpbiBwcm9wcyB8fCAi
d2lkdGgiIGluIHByb3BzICkgKSB7Ci0gICAgLy8gTWFrZSBzdXJlIHRoYXQgbm90aGluZyBzbmVh
a3Mgb3V0Ci0gICAgLy8gUmVjb3JkIGFsbCAzIG92ZXJmbG93IGF0dHJpYnV0ZXMgYmVjYXVzZSBJ
RSBkb2VzIG5vdAotICAgIC8vIGNoYW5nZSB0aGUgb3ZlcmZsb3cgYXR0cmlidXRlIHdoZW4gb3Zl
cmZsb3dYIGFuZAotICAgIC8vIG92ZXJmbG93WSBhcmUgc2V0IHRvIHRoZSBzYW1lIHZhbHVlCi0g
ICAgb3B0cy5vdmVyZmxvdyA9IFsgc3R5bGUub3ZlcmZsb3csIHN0eWxlLm92ZXJmbG93WCwgc3R5
bGUub3ZlcmZsb3dZIF07Ci0KLSAgICAvLyBTZXQgZGlzcGxheSBwcm9wZXJ0eSB0byBpbmxpbmUt
YmxvY2sgZm9yIGhlaWdodC93aWR0aAotICAgIC8vIGFuaW1hdGlvbnMgb24gaW5saW5lIGVsZW1l
bnRzIHRoYXQgYXJlIGhhdmluZyB3aWR0aC9oZWlnaHQgYW5pbWF0ZWQKLSAgICBpZiAoIGpRdWVy
eS5jc3MoIGVsZW0sICJkaXNwbGF5IiApID09PSAiaW5saW5lIiAmJgotICAgIGpRdWVyeS5jc3Mo
IGVsZW0sICJmbG9hdCIgKSA9PT0gIm5vbmUiICkgewotCi0gICAgLy8gaW5saW5lLWxldmVsIGVs
ZW1lbnRzIGFjY2VwdCBpbmxpbmUtYmxvY2s7Ci0gICAgLy8gYmxvY2stbGV2ZWwgZWxlbWVudHMg
bmVlZCB0byBiZSBpbmxpbmUgd2l0aCBsYXlvdXQKLSAgICBpZiAoICFqUXVlcnkuc3VwcG9ydC5p
bmxpbmVCbG9ja05lZWRzTGF5b3V0IHx8IGNzc19kZWZhdWx0RGlzcGxheSggZWxlbS5ub2RlTmFt
ZSApID09PSAiaW5saW5lIiApIHsKLSAgICBzdHlsZS5kaXNwbGF5ID0gImlubGluZS1ibG9jayI7
Ci0KLSAgICB9IGVsc2UgewotICAgIHN0eWxlLnpvb20gPSAxOwotICAgIH0KLSAgICB9Ci0gICAg
fQotCi0gICAgaWYgKCBvcHRzLm92ZXJmbG93ICkgewotICAgIHN0eWxlLm92ZXJmbG93ID0gImhp
ZGRlbiI7Ci0gICAgaWYgKCAhalF1ZXJ5LnN1cHBvcnQuc2hyaW5rV3JhcEJsb2NrcyApIHsKLSAg
ICBhbmltLmFsd2F5cyhmdW5jdGlvbigpIHsKLSAgICBzdHlsZS5vdmVyZmxvdyA9IG9wdHMub3Zl
cmZsb3dbIDAgXTsKLSAgICBzdHlsZS5vdmVyZmxvd1ggPSBvcHRzLm92ZXJmbG93WyAxIF07Ci0g
ICAgc3R5bGUub3ZlcmZsb3dZID0gb3B0cy5vdmVyZmxvd1sgMiBdOwotICAgIH0pOwotICAgIH0K
LSAgICB9Ci0KLQotICAgIC8vIHNob3cvaGlkZSBwYXNzCi0gICAgZm9yICggaW5kZXggaW4gcHJv
cHMgKSB7Ci0gICAgdmFsdWUgPSBwcm9wc1sgaW5kZXggXTsKLSAgICBpZiAoIHJmeHR5cGVzLmV4
ZWMoIHZhbHVlICkgKSB7Ci0gICAgZGVsZXRlIHByb3BzWyBpbmRleCBdOwotICAgIHRvZ2dsZSA9
IHRvZ2dsZSB8fCB2YWx1ZSA9PT0gInRvZ2dsZSI7Ci0gICAgaWYgKCB2YWx1ZSA9PT0gKCBoaWRk
ZW4gPyAiaGlkZSIgOiAic2hvdyIgKSApIHsKLSAgICBjb250aW51ZTsKLSAgICB9Ci0gICAgaGFu
ZGxlZC5wdXNoKCBpbmRleCApOwotICAgIH0KLSAgICB9Ci0KLSAgICBsZW5ndGggPSBoYW5kbGVk
Lmxlbmd0aDsKLSAgICBpZiAoIGxlbmd0aCApIHsKLSAgICBkYXRhU2hvdyA9IGpRdWVyeS5fZGF0
YSggZWxlbSwgImZ4c2hvdyIgKSB8fCBqUXVlcnkuX2RhdGEoIGVsZW0sICJmeHNob3ciLCB7fSAp
OwotICAgIGlmICggImhpZGRlbiIgaW4gZGF0YVNob3cgKSB7Ci0gICAgaGlkZGVuID0gZGF0YVNo
b3cuaGlkZGVuOwotICAgIH0KLQotICAgIC8vIHN0b3JlIHN0YXRlIGlmIGl0cyB0b2dnbGUgLSBl
bmFibGVzIC5zdG9wKCkudG9nZ2xlKCkgdG8gInJldmVyc2UiCi0gICAgaWYgKCB0b2dnbGUgKSB7
Ci0gICAgZGF0YVNob3cuaGlkZGVuID0gIWhpZGRlbjsKLSAgICB9Ci0gICAgaWYgKCBoaWRkZW4g
KSB7Ci0gICAgalF1ZXJ5KCBlbGVtICkuc2hvdygpOwotICAgIH0gZWxzZSB7Ci0gICAgYW5pbS5k
b25lKGZ1bmN0aW9uKCkgewotICAgIGpRdWVyeSggZWxlbSApLmhpZGUoKTsKLSAgICB9KTsKLSAg
ICB9Ci0gICAgYW5pbS5kb25lKGZ1bmN0aW9uKCkgewotICAgIHZhciBwcm9wOwotICAgIGpRdWVy
eS5fcmVtb3ZlRGF0YSggZWxlbSwgImZ4c2hvdyIgKTsKLSAgICBmb3IgKCBwcm9wIGluIG9yaWcg
KSB7Ci0gICAgalF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBvcmlnWyBwcm9wIF0gKTsKLSAgICB9
Ci0gICAgfSk7Ci0gICAgZm9yICggaW5kZXggPSAwIDsgaW5kZXggPCBsZW5ndGggOyBpbmRleCsr
ICkgewotICAgIHByb3AgPSBoYW5kbGVkWyBpbmRleCBdOwotICAgIHR3ZWVuID0gYW5pbS5jcmVh
dGVUd2VlbiggcHJvcCwgaGlkZGVuID8gZGF0YVNob3dbIHByb3AgXSA6IDAgKTsKLSAgICBvcmln
WyBwcm9wIF0gPSBkYXRhU2hvd1sgcHJvcCBdIHx8IGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCAp
OwotCi0gICAgaWYgKCAhKCBwcm9wIGluIGRhdGFTaG93ICkgKSB7Ci0gICAgZGF0YVNob3dbIHBy
b3AgXSA9IHR3ZWVuLnN0YXJ0OwotICAgIGlmICggaGlkZGVuICkgewotICAgIHR3ZWVuLmVuZCA9
IHR3ZWVuLnN0YXJ0OwotICAgIHR3ZWVuLnN0YXJ0ID0gcHJvcCA9PT0gIndpZHRoIiB8fCBwcm9w
ID09PSAiaGVpZ2h0IiA/IDEgOiAwOwotICAgIH0KLSAgICB9Ci0gICAgfQotICAgIH0KLX0KLQot
ZnVuY3Rpb24gVHdlZW4oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nICkgewotICAg
IHJldHVybiBuZXcgVHdlZW4ucHJvdG90eXBlLmluaXQoIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVu
ZCwgZWFzaW5nICk7Ci19Ci1qUXVlcnkuVHdlZW4gPSBUd2VlbjsKLQotVHdlZW4ucHJvdG90eXBl
ID0gewotICAgIGNvbnN0cnVjdG9yOiBUd2VlbiwKLSAgICBpbml0OiBmdW5jdGlvbiggZWxlbSwg
b3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcsIHVuaXQgKSB7Ci0gICAgdGhpcy5lbGVtID0gZWxl
bTsKLSAgICB0aGlzLnByb3AgPSBwcm9wOwotICAgIHRoaXMuZWFzaW5nID0gZWFzaW5nIHx8ICJz
d2luZyI7Ci0gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uczsKLSAgICB0aGlzLnN0YXJ0ID0gdGhp
cy5ub3cgPSB0aGlzLmN1cigpOwotICAgIHRoaXMuZW5kID0gZW5kOwotICAgIHRoaXMudW5pdCA9
IHVuaXQgfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gPyAiIiA6ICJweCIgKTsKLSAgICB9
LAotICAgIGN1cjogZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGhvb2tzID0gVHdlZW4ucHJvcEhvb2tz
WyB0aGlzLnByb3AgXTsKLQotICAgIHJldHVybiBob29rcyAmJiBob29rcy5nZXQgPwotICAgIGhv
b2tzLmdldCggdGhpcyApIDoKLSAgICBUd2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KCB0aGlz
ICk7Ci0gICAgfSwKLSAgICBydW46IGZ1bmN0aW9uKCBwZXJjZW50ICkgewotICAgIHZhciBlYXNl
ZCwKLSAgICBob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07Ci0KLSAgICBpZiAo
IHRoaXMub3B0aW9ucy5kdXJhdGlvbiApIHsKLSAgICB0aGlzLnBvcyA9IGVhc2VkID0galF1ZXJ5
LmVhc2luZ1sgdGhpcy5lYXNpbmcgXSgKLSAgICBwZXJjZW50LCB0aGlzLm9wdGlvbnMuZHVyYXRp
b24gKiBwZXJjZW50LCAwLCAxLCB0aGlzLm9wdGlvbnMuZHVyYXRpb24KLSAgICApOwotICAgIH0g
ZWxzZSB7Ci0gICAgdGhpcy5wb3MgPSBlYXNlZCA9IHBlcmNlbnQ7Ci0gICAgfQotICAgIHRoaXMu
bm93ID0gKCB0aGlzLmVuZCAtIHRoaXMuc3RhcnQgKSAqIGVhc2VkICsgdGhpcy5zdGFydDsKLQot
ICAgIGlmICggdGhpcy5vcHRpb25zLnN0ZXAgKSB7Ci0gICAgdGhpcy5vcHRpb25zLnN0ZXAuY2Fs
bCggdGhpcy5lbGVtLCB0aGlzLm5vdywgdGhpcyApOwotICAgIH0KLQotICAgIGlmICggaG9va3Mg
JiYgaG9va3Muc2V0ICkgewotICAgIGhvb2tzLnNldCggdGhpcyApOwotICAgIH0gZWxzZSB7Ci0g
ICAgVHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LnNldCggdGhpcyApOwotICAgIH0KLSAgICByZXR1
cm4gdGhpczsKLSAgICB9Ci19OwotCi1Ud2Vlbi5wcm90b3R5cGUuaW5pdC5wcm90b3R5cGUgPSBU
d2Vlbi5wcm90b3R5cGU7Ci0KLVR3ZWVuLnByb3BIb29rcyA9IHsKLSAgICBfZGVmYXVsdDogewot
ICAgIGdldDogZnVuY3Rpb24oIHR3ZWVuICkgewotICAgIHZhciByZXN1bHQ7Ci0KLSAgICBpZiAo
IHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSAhPSBudWxsICYmCi0gICAgKCF0d2Vlbi5lbGVtLnN0
eWxlIHx8IHR3ZWVuLmVsZW0uc3R5bGVbIHR3ZWVuLnByb3AgXSA9PSBudWxsKSApIHsKLSAgICBy
ZXR1cm4gdHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdOwotICAgIH0KLQotICAgIC8vIHBhc3Npbmcg
YW4gZW1wdHkgc3RyaW5nIGFzIGEgM3JkIHBhcmFtZXRlciB0byAuY3NzIHdpbGwgYXV0b21hdGlj
YWxseQotICAgIC8vIGF0dGVtcHQgYSBwYXJzZUZsb2F0IGFuZCBmYWxsYmFjayB0byBhIHN0cmlu
ZyBpZiB0aGUgcGFyc2UgZmFpbHMKLSAgICAvLyBzbywgc2ltcGxlIHZhbHVlcyBzdWNoIGFzICIx
MHB4IiBhcmUgcGFyc2VkIHRvIEZsb2F0LgotICAgIC8vIGNvbXBsZXggdmFsdWVzIHN1Y2ggYXMg
InJvdGF0ZSgxcmFkKSIgYXJlIHJldHVybmVkIGFzIGlzLgotICAgIHJlc3VsdCA9IGpRdWVyeS5j
c3MoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsICIiICk7Ci0gICAgLy8gRW1wdHkgc3RyaW5ncywg
bnVsbCwgdW5kZWZpbmVkIGFuZCAiYXV0byIgYXJlIGNvbnZlcnRlZCB0byAwLgotICAgIHJldHVy
biAhcmVzdWx0IHx8IHJlc3VsdCA9PT0gImF1dG8iID8gMCA6IHJlc3VsdDsKLSAgICB9LAotICAg
IHNldDogZnVuY3Rpb24oIHR3ZWVuICkgewotICAgIC8vIHVzZSBzdGVwIGhvb2sgZm9yIGJhY2sg
Y29tcGF0IC0gdXNlIGNzc0hvb2sgaWYgaXRzIHRoZXJlIC0gdXNlIC5zdHlsZSBpZiBpdHMKLSAg
ICAvLyBhdmFpbGFibGUgYW5kIHVzZSBwbGFpbiBwcm9wZXJ0aWVzIHdoZXJlIGF2YWlsYWJsZQot
ICAgIGlmICggalF1ZXJ5LmZ4LnN0ZXBbIHR3ZWVuLnByb3AgXSApIHsKLSAgICBqUXVlcnkuZngu
c3RlcFsgdHdlZW4ucHJvcCBdKCB0d2VlbiApOwotICAgIH0gZWxzZSBpZiAoIHR3ZWVuLmVsZW0u
c3R5bGUgJiYgKCB0d2Vlbi5lbGVtLnN0eWxlWyBqUXVlcnkuY3NzUHJvcHNbIHR3ZWVuLnByb3Ag
XSBdICE9IG51bGwgfHwgalF1ZXJ5LmNzc0hvb2tzWyB0d2Vlbi5wcm9wIF0gKSApIHsKLSAgICBq
UXVlcnkuc3R5bGUoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIHR3ZWVuLm5vdyArIHR3ZWVuLnVu
aXQgKTsKLSAgICB9IGVsc2UgewotICAgIHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVu
Lm5vdzsKLSAgICB9Ci0gICAgfQotICAgIH0KLX07Ci0KLS8vIFJlbW92ZSBpbiAyLjAgLSB0aGlz
IHN1cHBvcnRzIElFOCdzIHBhbmljIGJhc2VkIGFwcHJvYWNoCi0vLyB0byBzZXR0aW5nIHRoaW5n
cyBvbiBkaXNjb25uZWN0ZWQgbm9kZXMKLQotVHdlZW4ucHJvcEhvb2tzLnNjcm9sbFRvcCA9IFR3
ZWVuLnByb3BIb29rcy5zY3JvbGxMZWZ0ID0gewotICAgIHNldDogZnVuY3Rpb24oIHR3ZWVuICkg
ewotICAgIGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSAmJiB0d2Vlbi5lbGVtLnBhcmVudE5vZGUg
KSB7Ci0gICAgdHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93OwotICAgIH0KLSAg
ICB9Ci19OwotCi1qUXVlcnkuZWFjaChbICJ0b2dnbGUiLCAic2hvdyIsICJoaWRlIiBdLCBmdW5j
dGlvbiggaSwgbmFtZSApIHsKLSAgICB2YXIgY3NzRm4gPSBqUXVlcnkuZm5bIG5hbWUgXTsKLSAg
ICBqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayAp
IHsKLSAgICByZXR1cm4gc3BlZWQgPT0gbnVsbCB8fCB0eXBlb2Ygc3BlZWQgPT09ICJib29sZWFu
IiA/Ci0gICAgY3NzRm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApIDoKLSAgICB0aGlzLmFuaW1h
dGUoIGdlbkZ4KCBuYW1lLCB0cnVlICksIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7Ci0gICAg
fTsKLX0pOwotCi1qUXVlcnkuZm4uZXh0ZW5kKHsKLSAgICBmYWRlVG86IGZ1bmN0aW9uKCBzcGVl
ZCwgdG8sIGVhc2luZywgY2FsbGJhY2sgKSB7Ci0KLSAgICAvLyBzaG93IGFueSBoaWRkZW4gZWxl
bWVudHMgYWZ0ZXIgc2V0dGluZyBvcGFjaXR5IHRvIDAKLSAgICByZXR1cm4gdGhpcy5maWx0ZXIo
IGlzSGlkZGVuICkuY3NzKCAib3BhY2l0eSIsIDAgKS5zaG93KCkKLQotICAgIC8vIGFuaW1hdGUg
dG8gdGhlIHZhbHVlIHNwZWNpZmllZAotICAgIC5lbmQoKS5hbmltYXRlKHsgb3BhY2l0eTogdG8g
fSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTsKLSAgICB9LAotICAgIGFuaW1hdGU6IGZ1bmN0
aW9uKCBwcm9wLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHsKLSAgICB2YXIgZW1wdHkgPSBq
UXVlcnkuaXNFbXB0eU9iamVjdCggcHJvcCApLAotICAgIG9wdGFsbCA9IGpRdWVyeS5zcGVlZCgg
c3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSwKLSAgICBkb0FuaW1hdGlvbiA9IGZ1bmN0aW9uKCkg
ewotICAgIC8vIE9wZXJhdGUgb24gYSBjb3B5IG9mIHByb3Agc28gcGVyLXByb3BlcnR5IGVhc2lu
ZyB3b24ndCBiZSBsb3N0Ci0gICAgdmFyIGFuaW0gPSBBbmltYXRpb24oIHRoaXMsIGpRdWVyeS5l
eHRlbmQoIHt9LCBwcm9wICksIG9wdGFsbCApOwotICAgIGRvQW5pbWF0aW9uLmZpbmlzaCA9IGZ1
bmN0aW9uKCkgewotICAgIGFuaW0uc3RvcCggdHJ1ZSApOwotICAgIH07Ci0gICAgLy8gRW1wdHkg
YW5pbWF0aW9ucywgb3IgZmluaXNoaW5nIHJlc29sdmVzIGltbWVkaWF0ZWx5Ci0gICAgaWYgKCBl
bXB0eSB8fCBqUXVlcnkuX2RhdGEoIHRoaXMsICJmaW5pc2giICkgKSB7Ci0gICAgYW5pbS5zdG9w
KCB0cnVlICk7Ci0gICAgfQotICAgIH07Ci0gICAgZG9BbmltYXRpb24uZmluaXNoID0gZG9Bbmlt
YXRpb247Ci0KLSAgICByZXR1cm4gZW1wdHkgfHwgb3B0YWxsLnF1ZXVlID09PSBmYWxzZSA/Ci0g
ICAgdGhpcy5lYWNoKCBkb0FuaW1hdGlvbiApIDoKLSAgICB0aGlzLnF1ZXVlKCBvcHRhbGwucXVl
dWUsIGRvQW5pbWF0aW9uICk7Ci0gICAgfSwKLSAgICBzdG9wOiBmdW5jdGlvbiggdHlwZSwgY2xl
YXJRdWV1ZSwgZ290b0VuZCApIHsKLSAgICB2YXIgc3RvcFF1ZXVlID0gZnVuY3Rpb24oIGhvb2tz
ICkgewotICAgIHZhciBzdG9wID0gaG9va3Muc3RvcDsKLSAgICBkZWxldGUgaG9va3Muc3RvcDsK
LSAgICBzdG9wKCBnb3RvRW5kICk7Ci0gICAgfTsKLQotICAgIGlmICggdHlwZW9mIHR5cGUgIT09
ICJzdHJpbmciICkgewotICAgIGdvdG9FbmQgPSBjbGVhclF1ZXVlOwotICAgIGNsZWFyUXVldWUg
PSB0eXBlOwotICAgIHR5cGUgPSB1bmRlZmluZWQ7Ci0gICAgfQotICAgIGlmICggY2xlYXJRdWV1
ZSAmJiB0eXBlICE9PSBmYWxzZSApIHsKLSAgICB0aGlzLnF1ZXVlKCB0eXBlIHx8ICJmeCIsIFtd
ICk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKLSAgICB2YXIg
ZGVxdWV1ZSA9IHRydWUsCi0gICAgaW5kZXggPSB0eXBlICE9IG51bGwgJiYgdHlwZSArICJxdWV1
ZUhvb2tzIiwKLSAgICB0aW1lcnMgPSBqUXVlcnkudGltZXJzLAotICAgIGRhdGEgPSBqUXVlcnku
X2RhdGEoIHRoaXMgKTsKLQotICAgIGlmICggaW5kZXggKSB7Ci0gICAgaWYgKCBkYXRhWyBpbmRl
eCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCApIHsKLSAgICBzdG9wUXVldWUoIGRhdGFbIGluZGV4
IF0gKTsKLSAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICBmb3IgKCBpbmRleCBpbiBkYXRhICkgewot
ICAgIGlmICggZGF0YVsgaW5kZXggXSAmJiBkYXRhWyBpbmRleCBdLnN0b3AgJiYgcnJ1bi50ZXN0
KCBpbmRleCApICkgewotICAgIHN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApOwotICAgIH0KLSAg
ICB9Ci0gICAgfQotCi0gICAgZm9yICggaW5kZXggPSB0aW1lcnMubGVuZ3RoOyBpbmRleC0tOyAp
IHsKLSAgICBpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmICh0eXBlID09IG51
bGwgfHwgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlKSApIHsKLSAgICB0aW1lcnNbIGlu
ZGV4IF0uYW5pbS5zdG9wKCBnb3RvRW5kICk7Ci0gICAgZGVxdWV1ZSA9IGZhbHNlOwotICAgIHRp
bWVycy5zcGxpY2UoIGluZGV4LCAxICk7Ci0gICAgfQotICAgIH0KLQotICAgIC8vIHN0YXJ0IHRo
ZSBuZXh0IGluIHRoZSBxdWV1ZSBpZiB0aGUgbGFzdCBzdGVwIHdhc24ndCBmb3JjZWQKLSAgICAv
LyB0aW1lcnMgY3VycmVudGx5IHdpbGwgY2FsbCB0aGVpciBjb21wbGV0ZSBjYWxsYmFja3MsIHdo
aWNoIHdpbGwgZGVxdWV1ZQotICAgIC8vIGJ1dCBvbmx5IGlmIHRoZXkgd2VyZSBnb3RvRW5kCi0g
ICAgaWYgKCBkZXF1ZXVlIHx8ICFnb3RvRW5kICkgewotICAgIGpRdWVyeS5kZXF1ZXVlKCB0aGlz
LCB0eXBlICk7Ci0gICAgfQotICAgIH0pOwotICAgIH0sCi0gICAgZmluaXNoOiBmdW5jdGlvbigg
dHlwZSApIHsKLSAgICBpZiAoIHR5cGUgIT09IGZhbHNlICkgewotICAgIHR5cGUgPSB0eXBlIHx8
ICJmeCI7Ci0gICAgfQotICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7Ci0gICAgdmFy
IGluZGV4LAotICAgIGRhdGEgPSBqUXVlcnkuX2RhdGEoIHRoaXMgKSwKLSAgICBxdWV1ZSA9IGRh
dGFbIHR5cGUgKyAicXVldWUiIF0sCi0gICAgaG9va3MgPSBkYXRhWyB0eXBlICsgInF1ZXVlSG9v
a3MiIF0sCi0gICAgdGltZXJzID0galF1ZXJ5LnRpbWVycywKLSAgICBsZW5ndGggPSBxdWV1ZSA/
IHF1ZXVlLmxlbmd0aCA6IDA7Ci0KLSAgICAvLyBlbmFibGUgZmluaXNoaW5nIGZsYWcgb24gcHJp
dmF0ZSBkYXRhCi0gICAgZGF0YS5maW5pc2ggPSB0cnVlOwotCi0gICAgLy8gZW1wdHkgdGhlIHF1
ZXVlIGZpcnN0Ci0gICAgalF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBbXSApOwotCi0gICAgaWYg
KCBob29rcyAmJiBob29rcy5jdXIgJiYgaG9va3MuY3VyLmZpbmlzaCApIHsKLSAgICBob29rcy5j
dXIuZmluaXNoLmNhbGwoIHRoaXMgKTsKLSAgICB9Ci0KLSAgICAvLyBsb29rIGZvciBhbnkgYWN0
aXZlIGFuaW1hdGlvbnMsIGFuZCBmaW5pc2ggdGhlbQotICAgIGZvciAoIGluZGV4ID0gdGltZXJz
Lmxlbmd0aDsgaW5kZXgtLTsgKSB7Ci0gICAgaWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0g
dGhpcyAmJiB0aW1lcnNbIGluZGV4IF0ucXVldWUgPT09IHR5cGUgKSB7Ci0gICAgdGltZXJzWyBp
bmRleCBdLmFuaW0uc3RvcCggdHJ1ZSApOwotICAgIHRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7
Ci0gICAgfQotICAgIH0KLQotICAgIC8vIGxvb2sgZm9yIGFueSBhbmltYXRpb25zIGluIHRoZSBv
bGQgcXVldWUgYW5kIGZpbmlzaCB0aGVtCi0gICAgZm9yICggaW5kZXggPSAwOyBpbmRleCA8IGxl
bmd0aDsgaW5kZXgrKyApIHsKLSAgICBpZiAoIHF1ZXVlWyBpbmRleCBdICYmIHF1ZXVlWyBpbmRl
eCBdLmZpbmlzaCApIHsKLSAgICBxdWV1ZVsgaW5kZXggXS5maW5pc2guY2FsbCggdGhpcyApOwot
ICAgIH0KLSAgICB9Ci0KLSAgICAvLyB0dXJuIG9mZiBmaW5pc2hpbmcgZmxhZwotICAgIGRlbGV0
ZSBkYXRhLmZpbmlzaDsKLSAgICB9KTsKLSAgICB9Ci19KTsKLQotLy8gR2VuZXJhdGUgcGFyYW1l
dGVycyB0byBjcmVhdGUgYSBzdGFuZGFyZCBhbmltYXRpb24KLWZ1bmN0aW9uIGdlbkZ4KCB0eXBl
LCBpbmNsdWRlV2lkdGggKSB7Ci0gICAgdmFyIHdoaWNoLAotICAgIGF0dHJzID0geyBoZWlnaHQ6
IHR5cGUgfSwKLSAgICBpID0gMDsKLQotICAgIC8vIGlmIHdlIGluY2x1ZGUgd2lkdGgsIHN0ZXAg
dmFsdWUgaXMgMSB0byBkbyBhbGwgY3NzRXhwYW5kIHZhbHVlcywKLSAgICAvLyBpZiB3ZSBkb24n
dCBpbmNsdWRlIHdpZHRoLCBzdGVwIHZhbHVlIGlzIDIgdG8gc2tpcCBvdmVyIExlZnQgYW5kIFJp
Z2h0Ci0gICAgaW5jbHVkZVdpZHRoID0gaW5jbHVkZVdpZHRoPyAxIDogMDsKLSAgICBmb3IoIDsg
aSA8IDQgOyBpICs9IDIgLSBpbmNsdWRlV2lkdGggKSB7Ci0gICAgd2hpY2ggPSBjc3NFeHBhbmRb
IGkgXTsKLSAgICBhdHRyc1sgIm1hcmdpbiIgKyB3aGljaCBdID0gYXR0cnNbICJwYWRkaW5nIiAr
IHdoaWNoIF0gPSB0eXBlOwotICAgIH0KLQotICAgIGlmICggaW5jbHVkZVdpZHRoICkgewotICAg
IGF0dHJzLm9wYWNpdHkgPSBhdHRycy53aWR0aCA9IHR5cGU7Ci0gICAgfQotCi0gICAgcmV0dXJu
IGF0dHJzOwotfQotCi0vLyBHZW5lcmF0ZSBzaG9ydGN1dHMgZm9yIGN1c3RvbSBhbmltYXRpb25z
Ci1qUXVlcnkuZWFjaCh7Ci0gICAgc2xpZGVEb3duOiBnZW5GeCgic2hvdyIpLAotICAgIHNsaWRl
VXA6IGdlbkZ4KCJoaWRlIiksCi0gICAgc2xpZGVUb2dnbGU6IGdlbkZ4KCJ0b2dnbGUiKSwKLSAg
ICBmYWRlSW46IHsgb3BhY2l0eTogInNob3ciIH0sCi0gICAgZmFkZU91dDogeyBvcGFjaXR5OiAi
aGlkZSIgfSwKLSAgICBmYWRlVG9nZ2xlOiB7IG9wYWNpdHk6ICJ0b2dnbGUiIH0KLX0sIGZ1bmN0
aW9uKCBuYW1lLCBwcm9wcyApIHsKLSAgICBqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBz
cGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHsKLSAgICByZXR1cm4gdGhpcy5hbmltYXRlKCBwcm9w
cywgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTsKLSAgICB9OwotfSk7Ci0KLWpRdWVyeS5zcGVl
ZCA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBmbiApIHsKLSAgICB2YXIgb3B0ID0gc3BlZWQg
JiYgdHlwZW9mIHNwZWVkID09PSAib2JqZWN0IiA/IGpRdWVyeS5leHRlbmQoIHt9LCBzcGVlZCAp
IDogewotICAgIGNvbXBsZXRlOiBmbiB8fCAhZm4gJiYgZWFzaW5nIHx8Ci0gICAgalF1ZXJ5Lmlz
RnVuY3Rpb24oIHNwZWVkICkgJiYgc3BlZWQsCi0gICAgZHVyYXRpb246IHNwZWVkLAotICAgIGVh
c2luZzogZm4gJiYgZWFzaW5nIHx8IGVhc2luZyAmJiAhalF1ZXJ5LmlzRnVuY3Rpb24oIGVhc2lu
ZyApICYmIGVhc2luZwotICAgIH07Ci0KLSAgICBvcHQuZHVyYXRpb24gPSBqUXVlcnkuZngub2Zm
ID8gMCA6IHR5cGVvZiBvcHQuZHVyYXRpb24gPT09ICJudW1iZXIiID8gb3B0LmR1cmF0aW9uIDoK
LSAgICBvcHQuZHVyYXRpb24gaW4galF1ZXJ5LmZ4LnNwZWVkcyA/IGpRdWVyeS5meC5zcGVlZHNb
IG9wdC5kdXJhdGlvbiBdIDogalF1ZXJ5LmZ4LnNwZWVkcy5fZGVmYXVsdDsKLQotICAgIC8vIG5v
cm1hbGl6ZSBvcHQucXVldWUgLSB0cnVlL3VuZGVmaW5lZC9udWxsIC0+ICJmeCIKLSAgICBpZiAo
IG9wdC5xdWV1ZSA9PSBudWxsIHx8IG9wdC5xdWV1ZSA9PT0gdHJ1ZSApIHsKLSAgICBvcHQucXVl
dWUgPSAiZngiOwotICAgIH0KLQotICAgIC8vIFF1ZXVlaW5nCi0gICAgb3B0Lm9sZCA9IG9wdC5j
b21wbGV0ZTsKLQotICAgIG9wdC5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkgewotICAgIGlmICggalF1
ZXJ5LmlzRnVuY3Rpb24oIG9wdC5vbGQgKSApIHsKLSAgICBvcHQub2xkLmNhbGwoIHRoaXMgKTsK
LSAgICB9Ci0KLSAgICBpZiAoIG9wdC5xdWV1ZSApIHsKLSAgICBqUXVlcnkuZGVxdWV1ZSggdGhp
cywgb3B0LnF1ZXVlICk7Ci0gICAgfQotICAgIH07Ci0KLSAgICByZXR1cm4gb3B0OwotfTsKLQot
alF1ZXJ5LmVhc2luZyA9IHsKLSAgICBsaW5lYXI6IGZ1bmN0aW9uKCBwICkgewotICAgIHJldHVy
biBwOwotICAgIH0sCi0gICAgc3dpbmc6IGZ1bmN0aW9uKCBwICkgewotICAgIHJldHVybiAwLjUg
LSBNYXRoLmNvcyggcCpNYXRoLlBJICkgLyAyOwotICAgIH0KLX07Ci0KLWpRdWVyeS50aW1lcnMg
PSBbXTsKLWpRdWVyeS5meCA9IFR3ZWVuLnByb3RvdHlwZS5pbml0OwotalF1ZXJ5LmZ4LnRpY2sg
PSBmdW5jdGlvbigpIHsKLSAgICB2YXIgdGltZXIsCi0gICAgdGltZXJzID0galF1ZXJ5LnRpbWVy
cywKLSAgICBpID0gMDsKLQotICAgIGZ4Tm93ID0galF1ZXJ5Lm5vdygpOwotCi0gICAgZm9yICgg
OyBpIDwgdGltZXJzLmxlbmd0aDsgaSsrICkgewotICAgIHRpbWVyID0gdGltZXJzWyBpIF07Ci0g
ICAgLy8gQ2hlY2tzIHRoZSB0aW1lciBoYXMgbm90IGFscmVhZHkgYmVlbiByZW1vdmVkCi0gICAg
aWYgKCAhdGltZXIoKSAmJiB0aW1lcnNbIGkgXSA9PT0gdGltZXIgKSB7Ci0gICAgdGltZXJzLnNw
bGljZSggaS0tLCAxICk7Ci0gICAgfQotICAgIH0KLQotICAgIGlmICggIXRpbWVycy5sZW5ndGgg
KSB7Ci0gICAgalF1ZXJ5LmZ4LnN0b3AoKTsKLSAgICB9Ci0gICAgZnhOb3cgPSB1bmRlZmluZWQ7
Ci19OwotCi1qUXVlcnkuZngudGltZXIgPSBmdW5jdGlvbiggdGltZXIgKSB7Ci0gICAgaWYgKCB0
aW1lcigpICYmIGpRdWVyeS50aW1lcnMucHVzaCggdGltZXIgKSApIHsKLSAgICBqUXVlcnkuZngu
c3RhcnQoKTsKLSAgICB9Ci19OwotCi1qUXVlcnkuZnguaW50ZXJ2YWwgPSAxMzsKLQotalF1ZXJ5
LmZ4LnN0YXJ0ID0gZnVuY3Rpb24oKSB7Ci0gICAgaWYgKCAhdGltZXJJZCApIHsKLSAgICB0aW1l
cklkID0gc2V0SW50ZXJ2YWwoIGpRdWVyeS5meC50aWNrLCBqUXVlcnkuZnguaW50ZXJ2YWwgKTsK
LSAgICB9Ci19OwotCi1qUXVlcnkuZnguc3RvcCA9IGZ1bmN0aW9uKCkgewotICAgIGNsZWFySW50
ZXJ2YWwoIHRpbWVySWQgKTsKLSAgICB0aW1lcklkID0gbnVsbDsKLX07Ci0KLWpRdWVyeS5meC5z
cGVlZHMgPSB7Ci0gICAgc2xvdzogNjAwLAotICAgIGZhc3Q6IDIwMCwKLSAgICAvLyBEZWZhdWx0
IHNwZWVkCi0gICAgX2RlZmF1bHQ6IDQwMAotfTsKLQotLy8gQmFjayBDb21wYXQgPDEuOCBleHRl
bnNpb24gcG9pbnQKLWpRdWVyeS5meC5zdGVwID0ge307Ci0KLWlmICggalF1ZXJ5LmV4cHIgJiYg
alF1ZXJ5LmV4cHIuZmlsdGVycyApIHsKLSAgICBqUXVlcnkuZXhwci5maWx0ZXJzLmFuaW1hdGVk
ID0gZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgcmV0dXJuIGpRdWVyeS5ncmVwKGpRdWVyeS50aW1l
cnMsIGZ1bmN0aW9uKCBmbiApIHsKLSAgICByZXR1cm4gZWxlbSA9PT0gZm4uZWxlbTsKLSAgICB9
KS5sZW5ndGg7Ci0gICAgfTsKLX0KLWpRdWVyeS5mbi5vZmZzZXQgPSBmdW5jdGlvbiggb3B0aW9u
cyApIHsKLSAgICBpZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7Ci0gICAgcmV0dXJuIG9wdGlvbnMg
PT09IHVuZGVmaW5lZCA/Ci0gICAgdGhpcyA6Ci0gICAgdGhpcy5lYWNoKGZ1bmN0aW9uKCBpICkg
ewotICAgIGpRdWVyeS5vZmZzZXQuc2V0T2Zmc2V0KCB0aGlzLCBvcHRpb25zLCBpICk7Ci0gICAg
fSk7Ci0gICAgfQotCi0gICAgdmFyIGRvY0VsZW0sIHdpbiwKLSAgICBib3ggPSB7IHRvcDogMCwg
bGVmdDogMCB9LAotICAgIGVsZW0gPSB0aGlzWyAwIF0sCi0gICAgZG9jID0gZWxlbSAmJiBlbGVt
Lm93bmVyRG9jdW1lbnQ7Ci0KLSAgICBpZiAoICFkb2MgKSB7Ci0gICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGRvY0VsZW0gPSBkb2MuZG9jdW1lbnRFbGVtZW50OwotCi0gICAgLy8gTWFrZSBzdXJl
IGl0J3Mgbm90IGEgZGlzY29ubmVjdGVkIERPTSBub2RlCi0gICAgaWYgKCAhalF1ZXJ5LmNvbnRh
aW5zKCBkb2NFbGVtLCBlbGVtICkgKSB7Ci0gICAgcmV0dXJuIGJveDsKLSAgICB9Ci0KLSAgICAv
LyBJZiB3ZSBkb24ndCBoYXZlIGdCQ1IsIGp1c3QgdXNlIDAsMCByYXRoZXIgdGhhbiBlcnJvcgot
ICAgIC8vIEJsYWNrQmVycnkgNSwgaU9TIDMgKG9yaWdpbmFsIGlQaG9uZSkKLSAgICBpZiAoIHR5
cGVvZiBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCAhPT0gY29yZV9zdHJ1bmRlZmluZWQgKSB7
Ci0gICAgYm94ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKLSAgICB9Ci0gICAgd2lu
ID0gZ2V0V2luZG93KCBkb2MgKTsKLSAgICByZXR1cm4gewotICAgIHRvcDogYm94LnRvcCAgKyAo
IHdpbi5wYWdlWU9mZnNldCB8fCBkb2NFbGVtLnNjcm9sbFRvcCApICAtICggZG9jRWxlbS5jbGll
bnRUb3AgIHx8IDAgKSwKLSAgICBsZWZ0OiBib3gubGVmdCArICggd2luLnBhZ2VYT2Zmc2V0IHx8
IGRvY0VsZW0uc2Nyb2xsTGVmdCApIC0gKCBkb2NFbGVtLmNsaWVudExlZnQgfHwgMCApCi0gICAg
fTsKLX07Ci0KLWpRdWVyeS5vZmZzZXQgPSB7Ci0KLSAgICBzZXRPZmZzZXQ6IGZ1bmN0aW9uKCBl
bGVtLCBvcHRpb25zLCBpICkgewotICAgIHZhciBwb3NpdGlvbiA9IGpRdWVyeS5jc3MoIGVsZW0s
ICJwb3NpdGlvbiIgKTsKLQotICAgIC8vIHNldCBwb3NpdGlvbiBmaXJzdCwgaW4tY2FzZSB0b3Av
bGVmdCBhcmUgc2V0IGV2ZW4gb24gc3RhdGljIGVsZW0KLSAgICBpZiAoIHBvc2l0aW9uID09PSAi
c3RhdGljIiApIHsKLSAgICBlbGVtLnN0eWxlLnBvc2l0aW9uID0gInJlbGF0aXZlIjsKLSAgICB9
Ci0KLSAgICB2YXIgY3VyRWxlbSA9IGpRdWVyeSggZWxlbSApLAotICAgIGN1ck9mZnNldCA9IGN1
ckVsZW0ub2Zmc2V0KCksCi0gICAgY3VyQ1NTVG9wID0galF1ZXJ5LmNzcyggZWxlbSwgInRvcCIg
KSwKLSAgICBjdXJDU1NMZWZ0ID0galF1ZXJ5LmNzcyggZWxlbSwgImxlZnQiICksCi0gICAgY2Fs
Y3VsYXRlUG9zaXRpb24gPSAoIHBvc2l0aW9uID09PSAiYWJzb2x1dGUiIHx8IHBvc2l0aW9uID09
PSAiZml4ZWQiICkgJiYgalF1ZXJ5LmluQXJyYXkoImF1dG8iLCBbY3VyQ1NTVG9wLCBjdXJDU1NM
ZWZ0XSkgPiAtMSwKLSAgICBwcm9wcyA9IHt9LCBjdXJQb3NpdGlvbiA9IHt9LCBjdXJUb3AsIGN1
ckxlZnQ7Ci0KLSAgICAvLyBuZWVkIHRvIGJlIGFibGUgdG8gY2FsY3VsYXRlIHBvc2l0aW9uIGlm
IGVpdGhlciB0b3Agb3IgbGVmdCBpcyBhdXRvIGFuZCBwb3NpdGlvbiBpcyBlaXRoZXIgYWJzb2x1
dGUgb3IgZml4ZWQKLSAgICBpZiAoIGNhbGN1bGF0ZVBvc2l0aW9uICkgewotICAgIGN1clBvc2l0
aW9uID0gY3VyRWxlbS5wb3NpdGlvbigpOwotICAgIGN1clRvcCA9IGN1clBvc2l0aW9uLnRvcDsK
LSAgICBjdXJMZWZ0ID0gY3VyUG9zaXRpb24ubGVmdDsKLSAgICB9IGVsc2UgewotICAgIGN1clRv
cCA9IHBhcnNlRmxvYXQoIGN1ckNTU1RvcCApIHx8IDA7Ci0gICAgY3VyTGVmdCA9IHBhcnNlRmxv
YXQoIGN1ckNTU0xlZnQgKSB8fCAwOwotICAgIH0KLQotICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rp
b24oIG9wdGlvbnMgKSApIHsKLSAgICBvcHRpb25zID0gb3B0aW9ucy5jYWxsKCBlbGVtLCBpLCBj
dXJPZmZzZXQgKTsKLSAgICB9Ci0KLSAgICBpZiAoIG9wdGlvbnMudG9wICE9IG51bGwgKSB7Ci0g
ICAgcHJvcHMudG9wID0gKCBvcHRpb25zLnRvcCAtIGN1ck9mZnNldC50b3AgKSArIGN1clRvcDsK
LSAgICB9Ci0gICAgaWYgKCBvcHRpb25zLmxlZnQgIT0gbnVsbCApIHsKLSAgICBwcm9wcy5sZWZ0
ID0gKCBvcHRpb25zLmxlZnQgLSBjdXJPZmZzZXQubGVmdCApICsgY3VyTGVmdDsKLSAgICB9Ci0K
LSAgICBpZiAoICJ1c2luZyIgaW4gb3B0aW9ucyApIHsKLSAgICBvcHRpb25zLnVzaW5nLmNhbGwo
IGVsZW0sIHByb3BzICk7Ci0gICAgfSBlbHNlIHsKLSAgICBjdXJFbGVtLmNzcyggcHJvcHMgKTsK
LSAgICB9Ci0gICAgfQotfTsKLQotCi1qUXVlcnkuZm4uZXh0ZW5kKHsKLQotICAgIHBvc2l0aW9u
OiBmdW5jdGlvbigpIHsKLSAgICBpZiAoICF0aGlzWyAwIF0gKSB7Ci0gICAgcmV0dXJuOwotICAg
IH0KLQotICAgIHZhciBvZmZzZXRQYXJlbnQsIG9mZnNldCwKLSAgICBwYXJlbnRPZmZzZXQgPSB7
IHRvcDogMCwgbGVmdDogMCB9LAotICAgIGVsZW0gPSB0aGlzWyAwIF07Ci0KLSAgICAvLyBmaXhl
ZCBlbGVtZW50cyBhcmUgb2Zmc2V0IGZyb20gd2luZG93IChwYXJlbnRPZmZzZXQgPSB7dG9wOjAs
IGxlZnQ6IDB9LCBiZWNhdXNlIGl0IGlzIGl0J3Mgb25seSBvZmZzZXQgcGFyZW50Ci0gICAgaWYg
KCBqUXVlcnkuY3NzKCBlbGVtLCAicG9zaXRpb24iICkgPT09ICJmaXhlZCIgKSB7Ci0gICAgLy8g
d2UgYXNzdW1lIHRoYXQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGlzIGF2YWlsYWJsZSB3aGVuIGNv
bXB1dGVkIHBvc2l0aW9uIGlzIGZpeGVkCi0gICAgb2Zmc2V0ID0gZWxlbS5nZXRCb3VuZGluZ0Ns
aWVudFJlY3QoKTsKLSAgICB9IGVsc2UgewotICAgIC8vIEdldCAqcmVhbCogb2Zmc2V0UGFyZW50
Ci0gICAgb2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQoKTsKLQotICAgIC8vIEdldCBj
b3JyZWN0IG9mZnNldHMKLSAgICBvZmZzZXQgPSB0aGlzLm9mZnNldCgpOwotICAgIGlmICggIWpR
dWVyeS5ub2RlTmFtZSggb2Zmc2V0UGFyZW50WyAwIF0sICJodG1sIiApICkgewotICAgIHBhcmVu
dE9mZnNldCA9IG9mZnNldFBhcmVudC5vZmZzZXQoKTsKLSAgICB9Ci0KLSAgICAvLyBBZGQgb2Zm
c2V0UGFyZW50IGJvcmRlcnMKLSAgICBwYXJlbnRPZmZzZXQudG9wICArPSBqUXVlcnkuY3NzKCBv
ZmZzZXRQYXJlbnRbIDAgXSwgImJvcmRlclRvcFdpZHRoIiwgdHJ1ZSApOwotICAgIHBhcmVudE9m
ZnNldC5sZWZ0ICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudFsgMCBdLCAiYm9yZGVyTGVmdFdp
ZHRoIiwgdHJ1ZSApOwotICAgIH0KLQotICAgIC8vIFN1YnRyYWN0IHBhcmVudCBvZmZzZXRzIGFu
ZCBlbGVtZW50IG1hcmdpbnMKLSAgICAvLyBub3RlOiB3aGVuIGFuIGVsZW1lbnQgaGFzIG1hcmdp
bjogYXV0byB0aGUgb2Zmc2V0TGVmdCBhbmQgbWFyZ2luTGVmdAotICAgIC8vIGFyZSB0aGUgc2Ft
ZSBpbiBTYWZhcmkgY2F1c2luZyBvZmZzZXQubGVmdCB0byBpbmNvcnJlY3RseSBiZSAwCi0gICAg
cmV0dXJuIHsKLSAgICB0b3A6ICBvZmZzZXQudG9wICAtIHBhcmVudE9mZnNldC50b3AgLSBqUXVl
cnkuY3NzKCBlbGVtLCAibWFyZ2luVG9wIiwgdHJ1ZSApLAotICAgIGxlZnQ6IG9mZnNldC5sZWZ0
IC0gcGFyZW50T2Zmc2V0LmxlZnQgLSBqUXVlcnkuY3NzKCBlbGVtLCAibWFyZ2luTGVmdCIsIHRy
dWUpCi0gICAgfTsKLSAgICB9LAotCi0gICAgb2Zmc2V0UGFyZW50OiBmdW5jdGlvbigpIHsKLSAg
ICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKSB7Ci0gICAgdmFyIG9mZnNldFBhcmVudCA9IHRo
aXMub2Zmc2V0UGFyZW50IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKLSAgICB3aGlsZSAo
IG9mZnNldFBhcmVudCAmJiAoICFqUXVlcnkubm9kZU5hbWUoIG9mZnNldFBhcmVudCwgImh0bWwi
ICkgJiYgalF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCAicG9zaXRpb24iKSA9PT0gInN0YXRpYyIg
KSApIHsKLSAgICBvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQub2Zmc2V0UGFyZW50OwotICAg
IH0KLSAgICByZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsK
LSAgICB9KTsKLSAgICB9Ci19KTsKLQotCi0vLyBDcmVhdGUgc2Nyb2xsTGVmdCBhbmQgc2Nyb2xs
VG9wIG1ldGhvZHMKLWpRdWVyeS5lYWNoKCB7c2Nyb2xsTGVmdDogInBhZ2VYT2Zmc2V0Iiwgc2Ny
b2xsVG9wOiAicGFnZVlPZmZzZXQifSwgZnVuY3Rpb24oIG1ldGhvZCwgcHJvcCApIHsKLSAgICB2
YXIgdG9wID0gL1kvLnRlc3QoIHByb3AgKTsKLQotICAgIGpRdWVyeS5mblsgbWV0aG9kIF0gPSBm
dW5jdGlvbiggdmFsICkgewotICAgIHJldHVybiBqUXVlcnkuYWNjZXNzKCB0aGlzLCBmdW5jdGlv
biggZWxlbSwgbWV0aG9kLCB2YWwgKSB7Ci0gICAgdmFyIHdpbiA9IGdldFdpbmRvdyggZWxlbSAp
OwotCi0gICAgaWYgKCB2YWwgPT09IHVuZGVmaW5lZCApIHsKLSAgICByZXR1cm4gd2luID8gKHBy
b3AgaW4gd2luKSA/IHdpblsgcHJvcCBdIDoKLSAgICB3aW4uZG9jdW1lbnQuZG9jdW1lbnRFbGVt
ZW50WyBtZXRob2QgXSA6Ci0gICAgZWxlbVsgbWV0aG9kIF07Ci0gICAgfQotCi0gICAgaWYgKCB3
aW4gKSB7Ci0gICAgd2luLnNjcm9sbFRvKAotICAgICF0b3AgPyB2YWwgOiBqUXVlcnkoIHdpbiAp
LnNjcm9sbExlZnQoKSwKLSAgICB0b3AgPyB2YWwgOiBqUXVlcnkoIHdpbiApLnNjcm9sbFRvcCgp
Ci0gICAgKTsKLQotICAgIH0gZWxzZSB7Ci0gICAgZWxlbVsgbWV0aG9kIF0gPSB2YWw7Ci0gICAg
fQotICAgIH0sIG1ldGhvZCwgdmFsLCBhcmd1bWVudHMubGVuZ3RoLCBudWxsICk7Ci0gICAgfTsK
LX0pOwotCi1mdW5jdGlvbiBnZXRXaW5kb3coIGVsZW0gKSB7Ci0gICAgcmV0dXJuIGpRdWVyeS5p
c1dpbmRvdyggZWxlbSApID8KLSAgICBlbGVtIDoKLSAgICBlbGVtLm5vZGVUeXBlID09PSA5ID8K
LSAgICBlbGVtLmRlZmF1bHRWaWV3IHx8IGVsZW0ucGFyZW50V2luZG93IDoKLSAgICBmYWxzZTsK
LX0KLS8vIENyZWF0ZSBpbm5lckhlaWdodCwgaW5uZXJXaWR0aCwgaGVpZ2h0LCB3aWR0aCwgb3V0
ZXJIZWlnaHQgYW5kIG91dGVyV2lkdGggbWV0aG9kcwotalF1ZXJ5LmVhY2goIHsgSGVpZ2h0OiAi
aGVpZ2h0IiwgV2lkdGg6ICJ3aWR0aCIgfSwgZnVuY3Rpb24oIG5hbWUsIHR5cGUgKSB7Ci0gICAg
alF1ZXJ5LmVhY2goIHsgcGFkZGluZzogImlubmVyIiArIG5hbWUsIGNvbnRlbnQ6IHR5cGUsICIi
OiAib3V0ZXIiICsgbmFtZSB9LCBmdW5jdGlvbiggZGVmYXVsdEV4dHJhLCBmdW5jTmFtZSApIHsK
LSAgICAvLyBtYXJnaW4gaXMgb25seSBmb3Igb3V0ZXJIZWlnaHQsIG91dGVyV2lkdGgKLSAgICBq
UXVlcnkuZm5bIGZ1bmNOYW1lIF0gPSBmdW5jdGlvbiggbWFyZ2luLCB2YWx1ZSApIHsKLSAgICB2
YXIgY2hhaW5hYmxlID0gYXJndW1lbnRzLmxlbmd0aCAmJiAoIGRlZmF1bHRFeHRyYSB8fCB0eXBl
b2YgbWFyZ2luICE9PSAiYm9vbGVhbiIgKSwKLSAgICBleHRyYSA9IGRlZmF1bHRFeHRyYSB8fCAo
IG1hcmdpbiA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gdHJ1ZSA/ICJtYXJnaW4iIDogImJvcmRlciIg
KTsKLQotICAgIHJldHVybiBqUXVlcnkuYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgdHlw
ZSwgdmFsdWUgKSB7Ci0gICAgdmFyIGRvYzsKLQotICAgIGlmICggalF1ZXJ5LmlzV2luZG93KCBl
bGVtICkgKSB7Ci0gICAgLy8gQXMgb2YgNS84LzIwMTIgdGhpcyB3aWxsIHlpZWxkIGluY29ycmVj
dCByZXN1bHRzIGZvciBNb2JpbGUgU2FmYXJpLCBidXQgdGhlcmUKLSAgICAvLyBpc24ndCBhIHdo
b2xlIGxvdCB3ZSBjYW4gZG8uIFNlZSBwdWxsIHJlcXVlc3QgYXQgdGhpcyBVUkwgZm9yIGRpc2N1
c3Npb246Ci0gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkvcHVsbC83NjQK
LSAgICByZXR1cm4gZWxlbS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbICJjbGllbnQiICsgbmFt
ZSBdOwotICAgIH0KLQotICAgIC8vIEdldCBkb2N1bWVudCB3aWR0aCBvciBoZWlnaHQKLSAgICBp
ZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7Ci0gICAgZG9jID0gZWxlbS5kb2N1bWVudEVsZW1l
bnQ7Ci0KLSAgICAvLyBFaXRoZXIgc2Nyb2xsW1dpZHRoL0hlaWdodF0gb3Igb2Zmc2V0W1dpZHRo
L0hlaWdodF0gb3IgY2xpZW50W1dpZHRoL0hlaWdodF0sIHdoaWNoZXZlciBpcyBncmVhdGVzdAot
ICAgIC8vIHVuZm9ydHVuYXRlbHksIHRoaXMgY2F1c2VzIGJ1ZyAjMzgzOCBpbiBJRTYvOCBvbmx5
LCBidXQgdGhlcmUgaXMgY3VycmVudGx5IG5vIGdvb2QsIHNtYWxsIHdheSB0byBmaXggaXQuCi0g
ICAgcmV0dXJuIE1hdGgubWF4KAotICAgIGVsZW0uYm9keVsgInNjcm9sbCIgKyBuYW1lIF0sIGRv
Y1sgInNjcm9sbCIgKyBuYW1lIF0sCi0gICAgZWxlbS5ib2R5WyAib2Zmc2V0IiArIG5hbWUgXSwg
ZG9jWyAib2Zmc2V0IiArIG5hbWUgXSwKLSAgICBkb2NbICJjbGllbnQiICsgbmFtZSBdCi0gICAg
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/Ci0gICAgLy8gR2V0
IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudCwgcmVxdWVzdGluZyBidXQgbm90IGZvcmNp
bmcgcGFyc2VGbG9hdAotICAgIGpRdWVyeS5jc3MoIGVsZW0sIHR5cGUsIGV4dHJhICkgOgotCi0g
ICAgLy8gU2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudAotICAgIGpRdWVyeS5zdHls
ZSggZWxlbSwgdHlwZSwgdmFsdWUsIGV4dHJhICk7Ci0gICAgfSwgdHlwZSwgY2hhaW5hYmxlID8g
bWFyZ2luIDogdW5kZWZpbmVkLCBjaGFpbmFibGUsIG51bGwgKTsKLSAgICB9OwotICAgIH0pOwot
fSk7Ci0vLyBMaW1pdCBzY29wZSBwb2xsdXRpb24gZnJvbSBhbnkgZGVwcmVjYXRlZCBBUEkKLS8v
IChmdW5jdGlvbigpIHsKLQotLy8gfSkoKTsKLS8vIEV4cG9zZSBqUXVlcnkgdG8gdGhlIGdsb2Jh
bCBvYmplY3QKLXdpbmRvdy5qUXVlcnkgPSB3aW5kb3cuJCA9IGpRdWVyeTsKLQotLy8gRXhwb3Nl
IGpRdWVyeSBhcyBhbiBBTUQgbW9kdWxlLCBidXQgb25seSBmb3IgQU1EIGxvYWRlcnMgdGhhdAot
Ly8gdW5kZXJzdGFuZCB0aGUgaXNzdWVzIHdpdGggbG9hZGluZyBtdWx0aXBsZSB2ZXJzaW9ucyBv
ZiBqUXVlcnkKLS8vIGluIGEgcGFnZSB0aGF0IGFsbCBtaWdodCBjYWxsIGRlZmluZSgpLiBUaGUg
bG9hZGVyIHdpbGwgaW5kaWNhdGUKLS8vIHRoZXkgaGF2ZSBzcGVjaWFsIGFsbG93YW5jZXMgZm9y
IG11bHRpcGxlIGpRdWVyeSB2ZXJzaW9ucyBieQotLy8gc3BlY2lmeWluZyBkZWZpbmUuYW1kLmpR
dWVyeSA9IHRydWUuIFJlZ2lzdGVyIGFzIGEgbmFtZWQgbW9kdWxlLAotLy8gc2luY2UgalF1ZXJ5
IGNhbiBiZSBjb25jYXRlbmF0ZWQgd2l0aCBvdGhlciBmaWxlcyB0aGF0IG1heSB1c2UgZGVmaW5l
LAotLy8gYnV0IG5vdCB1c2UgYSBwcm9wZXIgY29uY2F0ZW5hdGlvbiBzY3JpcHQgdGhhdCB1bmRl
cnN0YW5kcyBhbm9ueW1vdXMKLS8vIEFNRCBtb2R1bGVzLiBBIG5hbWVkIEFNRCBpcyBzYWZlc3Qg
YW5kIG1vc3Qgcm9idXN0IHdheSB0byByZWdpc3Rlci4KLS8vIExvd2VyY2FzZSBqcXVlcnkgaXMg
dXNlZCBiZWNhdXNlIEFNRCBtb2R1bGUgbmFtZXMgYXJlIGRlcml2ZWQgZnJvbQotLy8gZmlsZSBu
YW1lcywgYW5kIGpRdWVyeSBpcyBub3JtYWxseSBkZWxpdmVyZWQgaW4gYSBsb3dlcmNhc2UgZmls
ZSBuYW1lLgotLy8gRG8gdGhpcyBhZnRlciBjcmVhdGluZyB0aGUgZ2xvYmFsIHNvIHRoYXQgaWYg
YW4gQU1EIG1vZHVsZSB3YW50cyB0byBjYWxsCi0vLyBub0NvbmZsaWN0IHRvIGhpZGUgdGhpcyB2
ZXJzaW9uIG9mIGpRdWVyeSwgaXQgd2lsbCB3b3JrLgotaWYgKCB0eXBlb2YgZGVmaW5lID09PSAi
ZnVuY3Rpb24iICYmIGRlZmluZS5hbWQgJiYgZGVmaW5lLmFtZC5qUXVlcnkgKSB7Ci0gICAgZGVm
aW5lKCAianF1ZXJ5IiwgW10sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGpRdWVyeTsgfSApOwotfQot
Ci19KSggd2luZG93ICk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1
cmUtZXhhbXBsZXMvanF1ZXJ5L2Jvd2VyX2NvbXBvbmVudHMvdG9kb212Yy1jb21tb24vYmFzZS5j
c3MgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hp
dGVjdHVyZS1leGFtcGxlcy9qcXVlcnkvYm93ZXJfY29tcG9uZW50cy90b2RvbXZjLWNvbW1vbi9i
YXNlLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzM3Y2Q5Y2M4YzdlMDdlNDY5
MWQ0ZWUxYmFhNzAyZTQ5OTNjYTIxYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9qcXVlcnkvYm93ZXJfY29tcG9uZW50cy90b2RvbXZj
LWNvbW1vbi9iYXNlLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDU1NCArMCwwIEBACi1odG1sLAot
Ym9keSB7Ci0gICAgbWFyZ2luOiAwOwotICAgIHBhZGRpbmc6IDA7Ci19Ci0KLWJ1dHRvbiB7Ci0g
ICAgbWFyZ2luOiAwOwotICAgIHBhZGRpbmc6IDA7Ci0gICAgYm9yZGVyOiAwOwotICAgIGJhY2tn
cm91bmQ6IG5vbmU7Ci0gICAgZm9udC1zaXplOiAxMDAlOwotICAgIHZlcnRpY2FsLWFsaWduOiBi
YXNlbGluZTsKLSAgICBmb250LWZhbWlseTogaW5oZXJpdDsKLSAgICBjb2xvcjogaW5oZXJpdDsK
LSAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7Ci0gICAgLyotbW96LWFwcGVhcmFuY2U6IG5v
bmU7Ki8KLSAgICAtbXMtYXBwZWFyYW5jZTogbm9uZTsKLSAgICAtby1hcHBlYXJhbmNlOiBub25l
OwotICAgIGFwcGVhcmFuY2U6IG5vbmU7Ci19Ci0KLWJvZHkgewotICAgIGZvbnQ6IDE0cHggJ0hl
bHZldGljYSBOZXVlJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsKLSAgICBsaW5lLWhl
aWdodDogMS40ZW07Ci0gICAgYmFja2dyb3VuZDogI2VhZWFlYSB1cmwoJ2JnLnBuZycpOwotICAg
IGNvbG9yOiAjNGQ0ZDRkOwotICAgIHdpZHRoOiA1NTBweDsKLSAgICBtYXJnaW46IDAgYXV0bzsK
LSAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKLSAgICAtbW96LWZvbnQt
c21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKLSAgICAtbXMtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlh
c2VkOwotICAgIC1vLWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKLSAgICBmb250LXNtb290
aGluZzogYW50aWFsaWFzZWQ7Ci19Ci0KLSN0b2RvYXBwIHsKLSAgICBiYWNrZ3JvdW5kOiAjZmZm
OwotICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKLSAgICBtYXJnaW46
IDEzMHB4IDAgNDBweCAwOwotICAgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7Ci0gICAgcG9zaXRp
b246IHJlbGF0aXZlOwotICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDJweDsKLSAgICBib3Jk
ZXItdG9wLXJpZ2h0LXJhZGl1czogMnB4OwotICAgIGJveC1zaGFkb3c6IDAgMnB4IDZweCAwIHJn
YmEoMCwgMCwgMCwgMC4yKSwKLSAgICAwIDI1cHggNTBweCAwIHJnYmEoMCwgMCwgMCwgMC4xNSk7
Ci19Ci0KLSN0b2RvYXBwOmJlZm9yZSB7Ci0gICAgY29udGVudDogJyc7Ci0gICAgYm9yZGVyLWxl
ZnQ6IDFweCBzb2xpZCAjZjVkNmQ2OwotICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNmNWQ2
ZDY7Ci0gICAgd2lkdGg6IDJweDsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiAw
OwotICAgIGxlZnQ6IDQwcHg7Ci0gICAgaGVpZ2h0OiAxMDAlOwotfQotCi0jdG9kb2FwcCBpbnB1
dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7Ci0gICAgZm9udC1zdHlsZTogaXRhbGljOwot
fQotCi0jdG9kb2FwcCBpbnB1dDo6LW1vei1wbGFjZWhvbGRlciB7Ci0gICAgZm9udC1zdHlsZTog
aXRhbGljOwotICAgIGNvbG9yOiAjYTlhOWE5OwotfQotCi0jdG9kb2FwcCBoMSB7Ci0gICAgcG9z
aXRpb246IGFic29sdXRlOwotICAgIHRvcDogLTEyMHB4OwotICAgIHdpZHRoOiAxMDAlOwotICAg
IGZvbnQtc2l6ZTogNzBweDsKLSAgICBmb250LXdlaWdodDogYm9sZDsKLSAgICB0ZXh0LWFsaWdu
OiBjZW50ZXI7Ci0gICAgY29sb3I6ICNiM2IzYjM7Ci0gICAgY29sb3I6IHJnYmEoMjU1LCAyNTUs
IDI1NSwgMC4zKTsKLSAgICB0ZXh0LXNoYWRvdzogLTFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4y
KTsKLSAgICAtd2Via2l0LXRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7Ci0gICAg
LW1vei10ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5OwotICAgIC1tcy10ZXh0LXJl
bmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5OwotICAgIC1vLXRleHQtcmVuZGVyaW5nOiBvcHRp
bWl6ZUxlZ2liaWxpdHk7Ci0gICAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsK
LX0KLQotI2hlYWRlciB7Ci0gICAgcGFkZGluZy10b3A6IDE1cHg7Ci0gICAgYm9yZGVyLXJhZGl1
czogaW5oZXJpdDsKLX0KLQotI2hlYWRlcjpiZWZvcmUgewotICAgIGNvbnRlbnQ6ICcnOwotICAg
IHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6IDA7Ci0gICAgcmlnaHQ6IDA7Ci0gICAgbGVm
dDogMDsKLSAgICBoZWlnaHQ6IDE1cHg7Ci0gICAgei1pbmRleDogMjsKLSAgICBib3JkZXItYm90
dG9tOiAxcHggc29saWQgIzZjNjE1YzsKLSAgICBiYWNrZ3JvdW5kOiAjOGQ3ZDc3OwotICAgIGJh
Y2tncm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20s
IGZyb20ocmdiYSgxMzIsIDExMCwgMTAwLCAwLjgpKSx0byhyZ2JhKDEwMSwgODQsIDc2LCAwLjgp
KSk7Ci0gICAgYmFja2dyb3VuZDogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCByZ2JhKDEz
MiwgMTEwLCAxMDAsIDAuOCksIHJnYmEoMTAxLCA4NCwgNzYsIDAuOCkpOwotICAgIGJhY2tncm91
bmQ6IC1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwgcmdiYSgxMzIsIDExMCwgMTAwLCAwLjgpLCBy
Z2JhKDEwMSwgODQsIDc2LCAwLjgpKTsKLSAgICBiYWNrZ3JvdW5kOiAtby1saW5lYXItZ3JhZGll
bnQodG9wLCByZ2JhKDEzMiwgMTEwLCAxMDAsIDAuOCksIHJnYmEoMTAxLCA4NCwgNzYsIDAuOCkp
OwotICAgIGJhY2tncm91bmQ6IC1tcy1saW5lYXItZ3JhZGllbnQodG9wLCByZ2JhKDEzMiwgMTEw
LCAxMDAsIDAuOCksIHJnYmEoMTAxLCA4NCwgNzYsIDAuOCkpOwotICAgIGJhY2tncm91bmQ6IGxp
bmVhci1ncmFkaWVudCh0b3AsIHJnYmEoMTMyLCAxMTAsIDEwMCwgMC44KSwgcmdiYSgxMDEsIDg0
LCA3NiwgMC44KSk7Ci0gICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMXB4OwotICAgIGJvcmRl
ci10b3AtcmlnaHQtcmFkaXVzOiAxcHg7Ci19Ci0KLSNuZXctdG9kbywKLS5lZGl0IHsKLSAgICBw
b3NpdGlvbjogcmVsYXRpdmU7Ci0gICAgbWFyZ2luOiAwOwotICAgIHdpZHRoOiAxMDAlOwotICAg
IGZvbnQtc2l6ZTogMjRweDsKLSAgICBmb250LWZhbWlseTogaW5oZXJpdDsKLSAgICBsaW5lLWhl
aWdodDogMS40ZW07Ci0gICAgYm9yZGVyOiAwOwotICAgIG91dGxpbmU6IG5vbmU7Ci0gICAgY29s
b3I6IGluaGVyaXQ7Ci0gICAgcGFkZGluZzogNnB4OwotICAgIGJvcmRlcjogMXB4IHNvbGlkICM5
OTk7Ci0gICAgYm94LXNoYWRvdzogaW5zZXQgMCAtMXB4IDVweCAwIHJnYmEoMCwgMCwgMCwgMC4y
KTsKLSAgICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7Ci0gICAgLW1vei1ib3gtc2l6
aW5nOiBib3JkZXItYm94OwotICAgIC1tcy1ib3gtc2l6aW5nOiBib3JkZXItYm94OwotICAgIC1v
LWJveC1zaXppbmc6IGJvcmRlci1ib3g7Ci0gICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKLSAg
ICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKLSAgICAtbW96LWZvbnQtc21v
b3RoaW5nOiBhbnRpYWxpYXNlZDsKLSAgICAtbXMtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2Vk
OwotICAgIC1vLWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKLSAgICBmb250LXNtb290aGlu
ZzogYW50aWFsaWFzZWQ7Ci19Ci0KLSNuZXctdG9kbyB7Ci0gICAgcGFkZGluZzogMTZweCAxNnB4
IDE2cHggNjBweDsKLSAgICBib3JkZXI6IG5vbmU7Ci0gICAgYmFja2dyb3VuZDogcmdiYSgwLCAw
LCAwLCAwLjAyKTsKLSAgICB6LWluZGV4OiAyOwotICAgIGJveC1zaGFkb3c6IG5vbmU7Ci19Ci0K
LSNtYWluIHsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gICAgei1pbmRleDogMjsKLSAgICBi
b3JkZXItdG9wOiAxcHggZG90dGVkICNhZGFkYWQ7Ci19Ci0KLWxhYmVsW2Zvcj0ndG9nZ2xlLWFs
bCddIHsKLSAgICBkaXNwbGF5OiBub25lOwotfQotCi0jdG9nZ2xlLWFsbCB7Ci0gICAgcG9zaXRp
b246IGFic29sdXRlOwotICAgIHRvcDogLTQycHg7Ci0gICAgbGVmdDogLTRweDsKLSAgICB3aWR0
aDogNDBweDsKLSAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci0gICAgYm9yZGVyOiBub25lOyAvKiBN
b2JpbGUgU2FmYXJpICovCi19Ci0KLSN0b2dnbGUtYWxsOmJlZm9yZSB7Ci0gICAgY29udGVudDog
J8K7JzsKLSAgICBmb250LXNpemU6IDI4cHg7Ci0gICAgY29sb3I6ICNkOWQ5ZDk7Ci0gICAgcGFk
ZGluZzogMCAyNXB4IDdweDsKLX0KLQotI3RvZ2dsZS1hbGw6Y2hlY2tlZDpiZWZvcmUgewotICAg
IGNvbG9yOiAjNzM3MzczOwotfQotCi0jdG9kby1saXN0IHsKLSAgICBtYXJnaW46IDA7Ci0gICAg
cGFkZGluZzogMDsKLSAgICBsaXN0LXN0eWxlOiBub25lOwotfQotCi0jdG9kby1saXN0IGxpIHsK
LSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gICAgZm9udC1zaXplOiAyNHB4OwotICAgIGJvcmRl
ci1ib3R0b206IDFweCBkb3R0ZWQgI2NjYzsKLX0KLQotI3RvZG8tbGlzdCBsaTpsYXN0LWNoaWxk
IHsKLSAgICBib3JkZXItYm90dG9tOiBub25lOwotfQotCi0jdG9kby1saXN0IGxpLmVkaXRpbmcg
ewotICAgIGJvcmRlci1ib3R0b206IG5vbmU7Ci0gICAgcGFkZGluZzogMDsKLX0KLQotI3RvZG8t
bGlzdCBsaS5lZGl0aW5nIC5lZGl0IHsKLSAgICBkaXNwbGF5OiBibG9jazsKLSAgICB3aWR0aDog
NTA2cHg7Ci0gICAgcGFkZGluZzogMTNweCAxN3B4IDEycHggMTdweDsKLSAgICBtYXJnaW46IDAg
MCAwIDQzcHg7Ci19Ci0KLSN0b2RvLWxpc3QgbGkuZWRpdGluZyAudmlldyB7Ci0gICAgZGlzcGxh
eTogbm9uZTsKLX0KLQotI3RvZG8tbGlzdCBsaSAudG9nZ2xlIHsKLSAgICB0ZXh0LWFsaWduOiBj
ZW50ZXI7Ci0gICAgd2lkdGg6IDQwcHg7Ci0gICAgLyogYXV0bywgc2luY2Ugbm9uLVdlYktpdCBi
cm93c2VycyBkb2Vzbid0IHN1cHBvcnQgaW5wdXQgc3R5bGluZyAqLwotICAgIGhlaWdodDogYXV0
bzsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiAwOwotICAgIGJvdHRvbTogMDsK
LSAgICBtYXJnaW46IGF1dG8gMDsKLSAgICBib3JkZXI6IG5vbmU7IC8qIE1vYmlsZSBTYWZhcmkg
Ki8KLSAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7Ci0gICAgLyotbW96LWFwcGVhcmFuY2U6
IG5vbmU7Ki8KLSAgICAtbXMtYXBwZWFyYW5jZTogbm9uZTsKLSAgICAtby1hcHBlYXJhbmNlOiBu
b25lOwotICAgIGFwcGVhcmFuY2U6IG5vbmU7Ci19Ci0KLSN0b2RvLWxpc3QgbGkgLnRvZ2dsZTph
ZnRlciB7Ci0gICAgY29udGVudDogJ+KclCc7Ci0gICAgbGluZS1oZWlnaHQ6IDQzcHg7IC8qIDQw
ICsgYSBjb3VwbGUgb2YgcGl4ZWxzIHZpc3VhbCBhZGp1c3RtZW50ICovCi0gICAgZm9udC1zaXpl
OiAyMHB4OwotICAgIGNvbG9yOiAjZDlkOWQ5OwotICAgIHRleHQtc2hhZG93OiAwIC0xcHggMCAj
YmZiZmJmOwotfQotCi0jdG9kby1saXN0IGxpIC50b2dnbGU6Y2hlY2tlZDphZnRlciB7Ci0gICAg
Y29sb3I6ICM4NWFkYTc7Ci0gICAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgIzY2OTk5MTsKLSAgICBi
b3R0b206IDFweDsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci19Ci0KLSN0b2RvLWxpc3QgbGkg
bGFiZWwgewotICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7Ci0gICAgcGFkZGluZzogMTVweDsK
LSAgICBtYXJnaW4tbGVmdDogNDVweDsKLSAgICBkaXNwbGF5OiBibG9jazsKLSAgICBsaW5lLWhl
aWdodDogMS4yOwotICAgIC13ZWJraXQtdHJhbnNpdGlvbjogY29sb3IgMC40czsKLSAgICAtbW96
LXRyYW5zaXRpb246IGNvbG9yIDAuNHM7Ci0gICAgLW1zLXRyYW5zaXRpb246IGNvbG9yIDAuNHM7
Ci0gICAgLW8tdHJhbnNpdGlvbjogY29sb3IgMC40czsKLSAgICB0cmFuc2l0aW9uOiBjb2xvciAw
LjRzOwotfQotCi0jdG9kby1saXN0IGxpLmNvbXBsZXRlZCBsYWJlbCB7Ci0gICAgY29sb3I6ICNh
OWE5YTk7Ci0gICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ci19Ci0KLSN0b2RvLWxp
c3QgbGkgLmRlc3Ryb3kgewotICAgIGRpc3BsYXk6IG5vbmU7Ci0gICAgcG9zaXRpb246IGFic29s
dXRlOwotICAgIHRvcDogMDsKLSAgICByaWdodDogMTBweDsKLSAgICBib3R0b206IDA7Ci0gICAg
d2lkdGg6IDQwcHg7Ci0gICAgaGVpZ2h0OiA0MHB4OwotICAgIG1hcmdpbjogYXV0byAwOwotICAg
IGZvbnQtc2l6ZTogMjJweDsKLSAgICBjb2xvcjogI2E4OGE4YTsKLSAgICAtd2Via2l0LXRyYW5z
aXRpb246IGFsbCAwLjJzOwotICAgIC1tb3otdHJhbnNpdGlvbjogYWxsIDAuMnM7Ci0gICAgLW1z
LXRyYW5zaXRpb246IGFsbCAwLjJzOwotICAgIC1vLXRyYW5zaXRpb246IGFsbCAwLjJzOwotICAg
IHRyYW5zaXRpb246IGFsbCAwLjJzOwotfQotCi0jdG9kby1saXN0IGxpIC5kZXN0cm95OmhvdmVy
IHsKLSAgICB0ZXh0LXNoYWRvdzogMCAwIDFweCAjMDAwLAotICAgICAwIDAgMTBweCByZ2JhKDE5
OSwgMTA3LCAxMDcsIDAuOCk7Ci0gICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEuMyk7Ci0g
ICAgLW1vei10cmFuc2Zvcm06IHNjYWxlKDEuMyk7Ci0gICAgLW1zLXRyYW5zZm9ybTogc2NhbGUo
MS4zKTsKLSAgICAtby10cmFuc2Zvcm06IHNjYWxlKDEuMyk7Ci0gICAgdHJhbnNmb3JtOiBzY2Fs
ZSgxLjMpOwotfQotCi0jdG9kby1saXN0IGxpIC5kZXN0cm95OmFmdGVyIHsKLSAgICBjb250ZW50
OiAn4pyWJzsKLX0KLQotI3RvZG8tbGlzdCBsaTpob3ZlciAuZGVzdHJveSB7Ci0gICAgZGlzcGxh
eTogYmxvY2s7Ci19Ci0KLSN0b2RvLWxpc3QgbGkgLmVkaXQgewotICAgIGRpc3BsYXk6IG5vbmU7
Ci19Ci0KLSN0b2RvLWxpc3QgbGkuZWRpdGluZzpsYXN0LWNoaWxkIHsKLSAgICBtYXJnaW4tYm90
dG9tOiAtMXB4OwotfQotCi0jZm9vdGVyIHsKLSAgICBjb2xvcjogIzc3NzsKLSAgICBwYWRkaW5n
OiAwIDE1cHg7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHJpZ2h0OiAwOwotICAgIGJv
dHRvbTogLTMxcHg7Ci0gICAgbGVmdDogMDsKLSAgICBoZWlnaHQ6IDIwcHg7Ci0gICAgei1pbmRl
eDogMTsKLSAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci19Ci0KLSNmb290ZXI6YmVmb3JlIHsKLSAg
ICBjb250ZW50OiAnJzsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgcmlnaHQ6IDA7Ci0g
ICAgYm90dG9tOiAzMXB4OwotICAgIGxlZnQ6IDA7Ci0gICAgaGVpZ2h0OiA1MHB4OwotICAgIHot
aW5kZXg6IC0xOwotICAgIGJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMyks
Ci0gICAgMCA2cHggMCAtM3B4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KSwKLSAgICAwIDdweCAx
cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMyksCi0gICAgMCA0M3B4IDAgLTZweCByZ2JhKDI1NSwg
MjU1LCAyNTUsIDAuOCksCi0gICAgMCA0NHB4IDJweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKTsK
LX0KLQotI3RvZG8tY291bnQgewotICAgIGZsb2F0OiBsZWZ0OwotICAgIHRleHQtYWxpZ246IGxl
ZnQ7Ci19Ci0KLSNmaWx0ZXJzIHsKLSAgICBtYXJnaW46IDA7Ci0gICAgcGFkZGluZzogMDsKLSAg
ICBsaXN0LXN0eWxlOiBub25lOwotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICByaWdodDog
MDsKLSAgICBsZWZ0OiAwOwotfQotCi0jZmlsdGVycyBsaSB7Ci0gICAgZGlzcGxheTogaW5saW5l
OwotfQotCi0jZmlsdGVycyBsaSBhIHsKLSAgICBjb2xvcjogIzgzNzU2ZjsKLSAgICBtYXJnaW46
IDJweDsKLSAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Ci19Ci0KLSNmaWx0ZXJzIGxpIGEuc2Vs
ZWN0ZWQgewotICAgIGZvbnQtd2VpZ2h0OiBib2xkOwotfQotCi0jY2xlYXItY29tcGxldGVkIHsK
LSAgICBmbG9hdDogcmlnaHQ7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIGxpbmUtaGVp
Z2h0OiAyMHB4OwotICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKLSAgICBiYWNrZ3JvdW5kOiBy
Z2JhKDAsIDAsIDAsIDAuMSk7Ci0gICAgZm9udC1zaXplOiAxMXB4OwotICAgIHBhZGRpbmc6IDAg
MTBweDsKLSAgICBib3JkZXItcmFkaXVzOiAzcHg7Ci0gICAgYm94LXNoYWRvdzogMCAtMXB4IDAg
MCByZ2JhKDAsIDAsIDAsIDAuMik7Ci19Ci0KLSNjbGVhci1jb21wbGV0ZWQ6aG92ZXIgewotICAg
IGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4xNSk7Ci0gICAgYm94LXNoYWRvdzogMCAtMXB4
IDAgMCByZ2JhKDAsIDAsIDAsIDAuMyk7Ci19Ci0KLSNpbmZvIHsKLSAgICBtYXJnaW46IDY1cHgg
YXV0byAwOwotICAgIGNvbG9yOiAjYTZhNmE2OwotICAgIGZvbnQtc2l6ZTogMTJweDsKLSAgICB0
ZXh0LXNoYWRvdzogMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7Ci0gICAgdGV4dC1h
bGlnbjogY2VudGVyOwotfQotCi0jaW5mbyBhIHsKLSAgICBjb2xvcjogaW5oZXJpdDsKLX0KLQot
LyoKLSAgICBIYWNrIHRvIHJlbW92ZSBiYWNrZ3JvdW5kIGZyb20gTW9iaWxlIFNhZmFyaS4KLSAg
ICBDYW4ndCB1c2UgaXQgZ2xvYmFsbHkgc2luY2UgaXQgZGVzdHJveXMgY2hlY2tib3hlcyBpbiBG
aXJlZm94IGFuZCBPcGVyYQotKi8KLUBtZWRpYSBzY3JlZW4gYW5kICgtd2Via2l0LW1pbi1kZXZp
Y2UtcGl4ZWwtcmF0aW86MCkgewotICAgICN0b2dnbGUtYWxsLAotICAgICN0b2RvLWxpc3QgbGkg
LnRvZ2dsZSB7Ci0gICAgYmFja2dyb3VuZDogbm9uZTsKLSAgICB9Ci0KLSAgICAjdG9kby1saXN0
IGxpIC50b2dnbGUgewotICAgIGhlaWdodDogNDBweDsKLSAgICB9Ci0KLSAgICAjdG9nZ2xlLWFs
bCB7Ci0gICAgdG9wOiAtNTZweDsKLSAgICBsZWZ0OiAtMTVweDsKLSAgICB3aWR0aDogNjVweDsK
LSAgICBoZWlnaHQ6IDQxcHg7Ci0gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7
Ci0gICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOwotICAgIC13ZWJraXQtYXBwZWFyYW5jZTog
bm9uZTsKLSAgICBhcHBlYXJhbmNlOiBub25lOwotICAgIH0KLX0KLQotLmhpZGRlbnsKLSAgICBk
aXNwbGF5Om5vbmU7Ci19Ci0KLWhyIHsKLSAgICBtYXJnaW46IDIwcHggMDsKLSAgICBib3JkZXI6
IDA7Ci0gICAgYm9yZGVyLXRvcDogMXB4IGRhc2hlZCAjQzVDNUM1OwotICAgIGJvcmRlci1ib3R0
b206IDFweCBkYXNoZWQgI0Y3RjdGNzsKLX0KLQotLmxlYXJuIGEgewotICAgIGZvbnQtd2VpZ2h0
OiBub3JtYWw7Ci0gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwotICAgIGNvbG9yOiAjYjgzZjQ1
OwotfQotCi0ubGVhcm4gYTpob3ZlciB7Ci0gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7
Ci0gICAgY29sb3I6ICM3ODdlN2U7Ci19Ci0KLS5sZWFybiBoMywKLS5sZWFybiBoNCwKLS5sZWFy
biBoNSB7Ci0gICAgbWFyZ2luOiAxMHB4IDA7Ci0gICAgZm9udC13ZWlnaHQ6IDUwMDsKLSAgICBs
aW5lLWhlaWdodDogMS4yOwotICAgIGNvbG9yOiAjMDAwOwotfQotCi0ubGVhcm4gaDMgewotICAg
IGZvbnQtc2l6ZTogMjRweDsKLX0KLQotLmxlYXJuIGg0IHsKLSAgICBmb250LXNpemU6IDE4cHg7
Ci19Ci0KLS5sZWFybiBoNSB7Ci0gICAgbWFyZ2luLWJvdHRvbTogMDsKLSAgICBmb250LXNpemU6
IDE0cHg7Ci19Ci0KLS5sZWFybiB1bCB7Ci0gICAgcGFkZGluZzogMDsKLSAgICBtYXJnaW46IDAg
MCAzMHB4IDI1cHg7Ci19Ci0KLS5sZWFybiBsaSB7Ci0gICAgbGluZS1oZWlnaHQ6IDIwcHg7Ci19
Ci0KLS5sZWFybiBwIHsKLSAgICBmb250LXNpemU6IDE1cHg7Ci0gICAgZm9udC13ZWlnaHQ6IDMw
MDsKLSAgICBsaW5lLWhlaWdodDogMS4zOwotICAgIG1hcmdpbi10b3A6IDA7Ci0gICAgbWFyZ2lu
LWJvdHRvbTogMDsKLX0KLQotLnF1b3RlIHsKLSAgICBib3JkZXI6IG5vbmU7Ci0gICAgbWFyZ2lu
OiAyMHB4IDAgNjBweCAwOwotfQotCi0ucXVvdGUgcCB7Ci0gICAgZm9udC1zdHlsZTogaXRhbGlj
OwotfQotCi0ucXVvdGUgcDpiZWZvcmUgewotICAgIGNvbnRlbnQ6ICfigJwnOwotICAgIGZvbnQt
c2l6ZTogNTBweDsKLSAgICBvcGFjaXR5OiAuMTU7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwot
ICAgIHRvcDogLTIwcHg7Ci0gICAgbGVmdDogM3B4OwotfQotCi0ucXVvdGUgcDphZnRlciB7Ci0g
ICAgY29udGVudDogJ+KAnSc7Ci0gICAgZm9udC1zaXplOiA1MHB4OwotICAgIG9wYWNpdHk6IC4x
NTsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgYm90dG9tOiAtNDJweDsKLSAgICByaWdo
dDogM3B4OwotfQotCi0ucXVvdGUgZm9vdGVyIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0g
ICAgYm90dG9tOiAtNDBweDsKLSAgICByaWdodDogMDsKLX0KLQotLnF1b3RlIGZvb3RlciBpbWcg
ewotICAgIGJvcmRlci1yYWRpdXM6IDNweDsKLX0KLQotLnF1b3RlIGZvb3RlciBhIHsKLSAgICBt
YXJnaW4tbGVmdDogNXB4OwotICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ci19Ci0KLS5zcGVl
Y2gtYnViYmxlIHsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gICAgcGFkZGluZzogMTBweDsK
LSAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIC4wNCk7Ci0gICAgYm9yZGVyLXJhZGl1czog
NXB4OwotfQotCi0uc3BlZWNoLWJ1YmJsZTphZnRlciB7Ci0gICAgY29udGVudDogJyc7Ci0gICAg
cG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogMTAwJTsKLSAgICByaWdodDogMzBweDsKLSAg
ICBib3JkZXI6IDEzcHggc29saWQgdHJhbnNwYXJlbnQ7Ci0gICAgYm9yZGVyLXRvcC1jb2xvcjog
cmdiYSgwLCAwLCAwLCAuMDQpOwotfQotCi0vKipib2R5Ki8ubGVhcm4tYmFyID4gLmxlYXJuIHsK
LSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgd2lkdGg6IDI3MnB4OwotICAgIHRvcDogOHB4
OwotICAgIGxlZnQ6IC0zMDBweDsKLSAgICBwYWRkaW5nOiAxMHB4OwotICAgIGJvcmRlci1yYWRp
dXM6IDVweDsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIC42KTsK
LSAgICB0cmFuc2l0aW9uLXByb3BlcnR5OiBsZWZ0OwotICAgIHRyYW5zaXRpb24tZHVyYXRpb246
IDUwMG1zOwotfQotCi1AbWVkaWEgKG1pbi13aWR0aDogODk5cHgpIHsKLSAgICAvKipib2R5Ki8u
bGVhcm4tYmFyIHsKLSAgICB3aWR0aDogYXV0bzsKLSAgICBtYXJnaW46IDAgMCAwIDMwMHB4Owot
ICAgIH0KLSAgICAvKipib2R5Ki8ubGVhcm4tYmFyID4gLmxlYXJuIHsKLSAgICBsZWZ0OiA4cHg7
Ci0gICAgfQotICAgIC8qKmJvZHkqLy5sZWFybi1iYXIgI3RvZG9hcHAgewotICAgIHdpZHRoOiA1
NTBweDsKLSAgICBtYXJnaW46IDEzMHB4IGF1dG8gNDBweCBhdXRvOwotICAgIH0KLX0KZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL2pxdWVyeS9ib3dlcl9jb21wb25lbnRzL3RvZG9tdmMtY29tbW9u
L2Jhc2UuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L2FyY2hpdGVjdHVyZS1leGFtcGxlcy9qcXVlcnkvYm93ZXJfY29tcG9uZW50cy90b2RvbXZjLWNv
bW1vbi9iYXNlLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOWJmNDI0MGZhZDlh
OWMxMTk0YzgxNTg2ZGMyOTE2YmVjMWNjYTc4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2pxdWVyeS9ib3dlcl9jb21wb25lbnRzL3Rv
ZG9tdmMtY29tbW9uL2Jhc2UuanMKKysrIC9kZXYvbnVsbApAQCAtMSwyMDkgKzAsMCBAQAotKGZ1
bmN0aW9uICgpIHsKLSAgICAndXNlIHN0cmljdCc7Ci0KLSAgICAvLyBVbmRlcnNjb3JlJ3MgVGVt
cGxhdGUgTW9kdWxlCi0gICAgLy8gQ291cnRlc3kgb2YgdW5kZXJzY29yZWpzLm9yZwotICAgIHZh
ciBfID0gKGZ1bmN0aW9uIChfKSB7Ci0gICAgXy5kZWZhdWx0cyA9IGZ1bmN0aW9uIChvYmplY3Qp
IHsKLSAgICBpZiAoIW9iamVjdCkgewotICAgIHJldHVybiBvYmplY3Q7Ci0gICAgfQotICAgIGZv
ciAodmFyIGFyZ3NJbmRleCA9IDEsIGFyZ3NMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBhcmdz
SW5kZXggPCBhcmdzTGVuZ3RoOyBhcmdzSW5kZXgrKykgewotICAgIHZhciBpdGVyYWJsZSA9IGFy
Z3VtZW50c1thcmdzSW5kZXhdOwotICAgIGlmIChpdGVyYWJsZSkgewotICAgIGZvciAodmFyIGtl
eSBpbiBpdGVyYWJsZSkgewotICAgIGlmIChvYmplY3Rba2V5XSA9PSBudWxsKSB7Ci0gICAgb2Jq
ZWN0W2tleV0gPSBpdGVyYWJsZVtrZXldOwotICAgIH0KLSAgICB9Ci0gICAgfQotICAgIH0KLSAg
ICByZXR1cm4gb2JqZWN0OwotICAgIH0KLQotICAgIC8vIEJ5IGRlZmF1bHQsIFVuZGVyc2NvcmUg
dXNlcyBFUkItc3R5bGUgdGVtcGxhdGUgZGVsaW1pdGVycywgY2hhbmdlIHRoZQotICAgIC8vIGZv
bGxvd2luZyB0ZW1wbGF0ZSBzZXR0aW5ncyB0byB1c2UgYWx0ZXJuYXRpdmUgZGVsaW1pdGVycy4K
LSAgICBfLnRlbXBsYXRlU2V0dGluZ3MgPSB7Ci0gICAgZXZhbHVhdGUgICAgOiAvPCUoW1xzXFNd
Kz8pJT4vZywKLSAgICBpbnRlcnBvbGF0ZSA6IC88JT0oW1xzXFNdKz8pJT4vZywKLSAgICBlc2Nh
cGUgICAgICA6IC88JS0oW1xzXFNdKz8pJT4vZwotICAgIH07Ci0KLSAgICAvLyBXaGVuIGN1c3Rv
bWl6aW5nIGB0ZW1wbGF0ZVNldHRpbmdzYCwgaWYgeW91IGRvbid0IHdhbnQgdG8gZGVmaW5lIGFu
Ci0gICAgLy8gaW50ZXJwb2xhdGlvbiwgZXZhbHVhdGlvbiBvciBlc2NhcGluZyByZWdleCwgd2Ug
bmVlZCBvbmUgdGhhdCBpcwotICAgIC8vIGd1YXJhbnRlZWQgbm90IHRvIG1hdGNoLgotICAgIHZh
ciBub01hdGNoID0gLyguKV4vOwotCi0gICAgLy8gQ2VydGFpbiBjaGFyYWN0ZXJzIG5lZWQgdG8g
YmUgZXNjYXBlZCBzbyB0aGF0IHRoZXkgY2FuIGJlIHB1dCBpbnRvIGEKLSAgICAvLyBzdHJpbmcg
bGl0ZXJhbC4KLSAgICB2YXIgZXNjYXBlcyA9IHsKLSAgICAiJyI6ICAgICAgIiciLAotICAgICdc
XCc6ICAgICAnXFwnLAotICAgICdccic6ICAgICAncicsCi0gICAgJ1xuJzogICAgICduJywKLSAg
ICAnXHQnOiAgICAgJ3QnLAotICAgICdcdTIwMjgnOiAndTIwMjgnLAotICAgICdcdTIwMjknOiAn
dTIwMjknCi0gICAgfTsKLQotICAgIHZhciBlc2NhcGVyID0gL1xcfCd8XHJ8XG58XHR8XHUyMDI4
fFx1MjAyOS9nOwotCi0gICAgLy8gSmF2YVNjcmlwdCBtaWNyby10ZW1wbGF0aW5nLCBzaW1pbGFy
IHRvIEpvaG4gUmVzaWcncyBpbXBsZW1lbnRhdGlvbi4KLSAgICAvLyBVbmRlcnNjb3JlIHRlbXBs
YXRpbmcgaGFuZGxlcyBhcmJpdHJhcnkgZGVsaW1pdGVycywgcHJlc2VydmVzIHdoaXRlc3BhY2Us
Ci0gICAgLy8gYW5kIGNvcnJlY3RseSBlc2NhcGVzIHF1b3RlcyB3aXRoaW4gaW50ZXJwb2xhdGVk
IGNvZGUuCi0gICAgXy50ZW1wbGF0ZSA9IGZ1bmN0aW9uKHRleHQsIGRhdGEsIHNldHRpbmdzKSB7
Ci0gICAgdmFyIHJlbmRlcjsKLSAgICBzZXR0aW5ncyA9IF8uZGVmYXVsdHMoe30sIHNldHRpbmdz
LCBfLnRlbXBsYXRlU2V0dGluZ3MpOwotCi0gICAgLy8gQ29tYmluZSBkZWxpbWl0ZXJzIGludG8g
b25lIHJlZ3VsYXIgZXhwcmVzc2lvbiB2aWEgYWx0ZXJuYXRpb24uCi0gICAgdmFyIG1hdGNoZXIg
PSBuZXcgUmVnRXhwKFsKLSAgICAoc2V0dGluZ3MuZXNjYXBlIHx8IG5vTWF0Y2gpLnNvdXJjZSwK
LSAgICAoc2V0dGluZ3MuaW50ZXJwb2xhdGUgfHwgbm9NYXRjaCkuc291cmNlLAotICAgIChzZXR0
aW5ncy5ldmFsdWF0ZSB8fCBub01hdGNoKS5zb3VyY2UKLSAgICBdLmpvaW4oJ3wnKSArICd8JCcs
ICdnJyk7Ci0KLSAgICAvLyBDb21waWxlIHRoZSB0ZW1wbGF0ZSBzb3VyY2UsIGVzY2FwaW5nIHN0
cmluZyBsaXRlcmFscyBhcHByb3ByaWF0ZWx5LgotICAgIHZhciBpbmRleCA9IDA7Ci0gICAgdmFy
IHNvdXJjZSA9ICJfX3ArPSciOwotICAgIHRleHQucmVwbGFjZShtYXRjaGVyLCBmdW5jdGlvbiht
YXRjaCwgZXNjYXBlLCBpbnRlcnBvbGF0ZSwgZXZhbHVhdGUsIG9mZnNldCkgewotICAgIHNvdXJj
ZSArPSB0ZXh0LnNsaWNlKGluZGV4LCBvZmZzZXQpCi0gICAgLnJlcGxhY2UoZXNjYXBlciwgZnVu
Y3Rpb24obWF0Y2gpIHsgcmV0dXJuICdcXCcgKyBlc2NhcGVzW21hdGNoXTsgfSk7Ci0KLSAgICBp
ZiAoZXNjYXBlKSB7Ci0gICAgc291cmNlICs9ICInK1xuKChfX3Q9KCIgKyBlc2NhcGUgKyAiKSk9
PW51bGw/Jyc6Xy5lc2NhcGUoX190KSkrXG4nIjsKLSAgICB9Ci0gICAgaWYgKGludGVycG9sYXRl
KSB7Ci0gICAgc291cmNlICs9ICInK1xuKChfX3Q9KCIgKyBpbnRlcnBvbGF0ZSArICIpKT09bnVs
bD8nJzpfX3QpK1xuJyI7Ci0gICAgfQotICAgIGlmIChldmFsdWF0ZSkgewotICAgIHNvdXJjZSAr
PSAiJztcbiIgKyBldmFsdWF0ZSArICJcbl9fcCs9JyI7Ci0gICAgfQotICAgIGluZGV4ID0gb2Zm
c2V0ICsgbWF0Y2gubGVuZ3RoOwotICAgIHJldHVybiBtYXRjaDsKLSAgICB9KTsKLSAgICBzb3Vy
Y2UgKz0gIic7XG4iOwotCi0gICAgLy8gSWYgYSB2YXJpYWJsZSBpcyBub3Qgc3BlY2lmaWVkLCBw
bGFjZSBkYXRhIHZhbHVlcyBpbiBsb2NhbCBzY29wZS4KLSAgICBpZiAoIXNldHRpbmdzLnZhcmlh
YmxlKSBzb3VyY2UgPSAnd2l0aChvYmp8fHt9KXtcbicgKyBzb3VyY2UgKyAnfVxuJzsKLQotICAg
IHNvdXJjZSA9ICJ2YXIgX190LF9fcD0nJyxfX2o9QXJyYXkucHJvdG90eXBlLmpvaW4sIiArCi0g
ICAgInByaW50PWZ1bmN0aW9uKCl7X19wKz1fX2ouY2FsbChhcmd1bWVudHMsJycpO307XG4iICsK
LSAgICBzb3VyY2UgKyAicmV0dXJuIF9fcDtcbiI7Ci0KLSAgICB0cnkgewotICAgIHJlbmRlciA9
IG5ldyBGdW5jdGlvbihzZXR0aW5ncy52YXJpYWJsZSB8fCAnb2JqJywgJ18nLCBzb3VyY2UpOwot
ICAgIH0gY2F0Y2ggKGUpIHsKLSAgICBlLnNvdXJjZSA9IHNvdXJjZTsKLSAgICB0aHJvdyBlOwot
ICAgIH0KLQotICAgIGlmIChkYXRhKSByZXR1cm4gcmVuZGVyKGRhdGEsIF8pOwotICAgIHZhciB0
ZW1wbGF0ZSA9IGZ1bmN0aW9uKGRhdGEpIHsKLSAgICByZXR1cm4gcmVuZGVyLmNhbGwodGhpcywg
ZGF0YSwgXyk7Ci0gICAgfTsKLQotICAgIC8vIFByb3ZpZGUgdGhlIGNvbXBpbGVkIGZ1bmN0aW9u
IHNvdXJjZSBhcyBhIGNvbnZlbmllbmNlIGZvciBwcmVjb21waWxhdGlvbi4KLSAgICB0ZW1wbGF0
ZS5zb3VyY2UgPSAnZnVuY3Rpb24oJyArIChzZXR0aW5ncy52YXJpYWJsZSB8fCAnb2JqJykgKyAn
KXtcbicgKyBzb3VyY2UgKyAnfSc7Ci0KLSAgICByZXR1cm4gdGVtcGxhdGU7Ci0gICAgfTsKLQot
ICAgIHJldHVybiBfOwotICAgIH0pKHt9KTsKLQotICAgIGlmIChsb2NhdGlvbi5ob3N0bmFtZSA9
PT0gJ3RvZG9tdmMuY29tJykgewotICAgIHdpbmRvdy5fZ2FxID0gW1snX3NldEFjY291bnQnLCdV
QS0zMTA4MTA2Mi0xJ10sWydfdHJhY2tQYWdldmlldyddXTsoZnVuY3Rpb24oZCx0KXt2YXIgZz1k
LmNyZWF0ZUVsZW1lbnQodCkscz1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKHQpWzBdO2cuc3JjPScv
L3d3dy5nb29nbGUtYW5hbHl0aWNzLmNvbS9nYS5qcyc7cy5wYXJlbnROb2RlLmluc2VydEJlZm9y
ZShnLHMpfShkb2N1bWVudCwnc2NyaXB0JykpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHJlZGly
ZWN0KCkgewotICAgIGlmIChsb2NhdGlvbi5ob3N0bmFtZSA9PT0gJ3Rhc3RlanMuZ2l0aHViLmlv
JykgewotICAgIGxvY2F0aW9uLmhyZWYgPSBsb2NhdGlvbi5ocmVmLnJlcGxhY2UoJ3Rhc3RlanMu
Z2l0aHViLmlvL3RvZG9tdmMnLCAndG9kb212Yy5jb20nKTsKLSAgICB9Ci0gICAgfQotCi0gICAg
ZnVuY3Rpb24gZmluZFJvb3QoKSB7Ci0gICAgdmFyIGJhc2U7Ci0KLSAgICBbL2xhYnMvLCAvXHcq
LWV4YW1wbGVzL10uZm9yRWFjaChmdW5jdGlvbiAoaHJlZikgewotICAgIHZhciBtYXRjaCA9IGxv
Y2F0aW9uLmhyZWYubWF0Y2goaHJlZik7Ci0KLSAgICBpZiAoIWJhc2UgJiYgbWF0Y2gpIHsKLSAg
ICBiYXNlID0gbG9jYXRpb24uaHJlZi5pbmRleE9mKG1hdGNoKTsKLSAgICB9Ci0gICAgfSk7Ci0K
LSAgICByZXR1cm4gbG9jYXRpb24uaHJlZi5zdWJzdHIoMCwgYmFzZSk7Ci0gICAgfQotCi0gICAg
ZnVuY3Rpb24gZ2V0RmlsZShmaWxlLCBjYWxsYmFjaykgewotICAgIGlmICghbG9jYXRpb24uaG9z
dCkgewotICAgIHJldHVybiBjb25zb2xlLmluZm8oJ01pc3MgdGhlIGluZm8gYmFyPyBSdW4gVG9k
b01WQyBmcm9tIGEgc2VydmVyIHRvIGF2b2lkIGEgY3Jvc3Mtb3JpZ2luIGVycm9yLicpOwotICAg
IH0KLQotICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKLQotICAgIHhoci5vcGVu
KCdHRVQnLCBmaW5kUm9vdCgpICsgZmlsZSwgdHJ1ZSk7Ci0gICAgeGhyLnNlbmQoKTsKLQotICAg
IHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7Ci0gICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCAm
JiBjYWxsYmFjaykgewotICAgIGNhbGxiYWNrKHhoci5yZXNwb25zZVRleHQpOwotICAgIH0KLSAg
ICB9OwotICAgIH0KLQotICAgIGZ1bmN0aW9uIExlYXJuKGxlYXJuSlNPTiwgY29uZmlnKSB7Ci0g
ICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIExlYXJuKSkgewotICAgIHJldHVybiBuZXcgTGVhcm4o
bGVhcm5KU09OLCBjb25maWcpOwotICAgIH0KLQotICAgIHZhciB0ZW1wbGF0ZSwgZnJhbWV3b3Jr
OwotCi0gICAgaWYgKHR5cGVvZiBsZWFybkpTT04gIT09ICdvYmplY3QnKSB7Ci0gICAgdHJ5IHsK
LSAgICBsZWFybkpTT04gPSBKU09OLnBhcnNlKGxlYXJuSlNPTik7Ci0gICAgfSBjYXRjaCAoZSkg
ewotICAgIHJldHVybjsKLSAgICB9Ci0gICAgfQotCi0gICAgaWYgKGNvbmZpZykgewotICAgIHRl
bXBsYXRlID0gY29uZmlnLnRlbXBsYXRlOwotICAgIGZyYW1ld29yayA9IGNvbmZpZy5mcmFtZXdv
cms7Ci0gICAgfQotCi0gICAgaWYgKCF0ZW1wbGF0ZSAmJiBsZWFybkpTT04udGVtcGxhdGVzKSB7
Ci0gICAgdGVtcGxhdGUgPSBsZWFybkpTT04udGVtcGxhdGVzLnRvZG9tdmM7Ci0gICAgfQotCi0g
ICAgaWYgKCFmcmFtZXdvcmsgJiYgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtZnJhbWV3
b3JrXScpKSB7Ci0gICAgZnJhbWV3b3JrID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEt
ZnJhbWV3b3JrXScpLmdldEF0dHJpYnV0ZSgnZGF0YS1mcmFtZXdvcmsnKTsKLSAgICB9Ci0KLQot
ICAgIGlmICh0ZW1wbGF0ZSAmJiBsZWFybkpTT05bZnJhbWV3b3JrXSkgewotICAgIHRoaXMuZnJh
bWV3b3JrSlNPTiA9IGxlYXJuSlNPTltmcmFtZXdvcmtdOwotICAgIHRoaXMudGVtcGxhdGUgPSB0
ZW1wbGF0ZTsKLQotICAgIHRoaXMuYXBwZW5kKCk7Ci0gICAgfQotICAgIH0KLQotICAgIExlYXJu
LnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiAoKSB7Ci0gICAgdmFyIGFzaWRlID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnYXNpZGUnKTsKLSAgICBhc2lkZS5pbm5lckhUTUwgPSBfLnRlbXBs
YXRlKHRoaXMudGVtcGxhdGUsIHRoaXMuZnJhbWV3b3JrSlNPTik7Ci0gICAgYXNpZGUuY2xhc3NO
YW1lID0gJ2xlYXJuJzsKLQotICAgIC8vIExvY2FsaXplIGRlbW8gbGlua3MKLSAgICB2YXIgZGVt
b0xpbmtzID0gYXNpZGUucXVlcnlTZWxlY3RvckFsbCgnLmRlbW8tbGluaycpOwotICAgIEFycmF5
LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoZGVtb0xpbmtzLCBmdW5jdGlvbiAoZGVtb0xpbmspIHsK
LSAgICBkZW1vTGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBmaW5kUm9vdCgpICsgZGVtb0xpbmsu
Z2V0QXR0cmlidXRlKCdocmVmJykpOwotICAgIH0pOwotCi0gICAgZG9jdW1lbnQuYm9keS5jbGFz
c05hbWUgPSAoZG9jdW1lbnQuYm9keS5jbGFzc05hbWUgKyAnIGxlYXJuLWJhcicpLnRyaW0oKTsK
LSAgICBkb2N1bWVudC5ib2R5Lmluc2VydEFkamFjZW50SFRNTCgnYWZ0ZXJCZWdpbicsIGFzaWRl
Lm91dGVySFRNTCk7Ci0gICAgfTsKLQotICAgIHJlZGlyZWN0KCk7Ci0gICAgZ2V0RmlsZSgnbGVh
cm4uanNvbicsIExlYXJuKTsKLX0pKCk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9qcXVlcnkv
Ym93ZXJfY29tcG9uZW50cy90b2RvbXZjLWNvbW1vbi9iZy5wbmcgYi9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9qcXVl
cnkvYm93ZXJfY29tcG9uZW50cy90b2RvbXZjLWNvbW1vbi9iZy5wbmcKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGIyYTc2MDA4MjVlZTExZjIxODQ5ZWQ0NzU0OTljN2QxZWNiY2M4NzAu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRj
aApsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmxpdGVyYWwgMjEyNgp6Y21WLVUyKGtCeFApPGg7M0t8
TGswMDBlMU5KTFRxMDAza0YwMDNrSDB7e1IzNFVCIXEwMDAwQ1ApdC1zPyhYakUKej4rOXlgPUhL
N250PX4zdDAwME81TmtsPFpjd1RqdShRNHZ+N0tXRVcjWW0/bEtfdjtUbXwhRmMpQE53RW5tdHNo
Cnp4IU9+ejgxSlQzcEZzbT5tPTA0aFZhX2xYbF9ibT0rTTs9ZUk8JSRyTzJ0YWBzdWgqU3IjUE93
Kj9hZHEhTyFDVgp6KjAmYilya0NDRVYpMW5JdWlMQm50VUgtTUpJOyZxWWd6fGRATmhubl9hYmky
Z2BwdTROQU1WaWQzaFMlP3F1en4KempsSmYoeDhjajxQR2NqbipKK2F7Jkg1cCpuNSQ1ZTM/PEtD
Yz9vMDZtQXNOU2JnUFdPP1B6I0N6bjwhPXs+e1ZTCnpVVkVQMW1zZzlgXk9GVWhTTzVydFhIaFJs
eVUyaT42JEJUPWdsR2B7SmxjdEdIcndSSW0pNkJ1dTY1akxRbl5IOAp6dmw5bFpxVUJBKyVxdk01
WEMreVlAbWZBKFlCflhQPWV8Njx7JSReZVU4bnJLP3YyY2NiQEpvbTVDRz5yS0FMN0oKenBsSEVJ
YXZWcHwwcDEmbSFHYFRpPzw3aVo7fUBHNyNaKX1LbSUyIUZIblEwKiY/UExSKUchSEFhSGdVI2N8
JGR6CnpwaiMwSG1lYWRJZT5gIyk9SmprYntCPUZLblUzcGMtJllAal9qNihoNFl+K1VxPFBVMzZD
OzViPU1eRmA9cDFkSQp6azxDUU9QTmE3PiFeSj1MSHVueDF4aTRRWEstWXsmTW9UOGt5NlZiOWN8
V2huT3dGfmM9M3pPeThhZ2t0bGlTNiMKemAjOEZgOUgpRD1ibWs5QjVNblcmX3IjKWYkYys7JExT
ci1AXkFuOGRoY35JcXV1dj5qT0s3cHc3TEo7JlgwaTFDCnpHTXNIZFAxT3NAbnkkJGohPlhBaWkl
N2JwNWs+YHB5TkEhfmVwYikoKXA5elI0WWw2ej1VfXtDSWRoMXooRnBBbwp6UUlXITswenBDeUM0
KjdZTGtaQ09AY3VsMFJfJnpnaHNBOEVrKXolPCFwLWJ2c3NwbFlZMn1QOyF2NENZajlrbUYKemIw
Yk5fbTRWKmZeWVpNb2IyKGozcEtqfjd2I1p0a3M9SW8re3N1JVdpdWtkSkgkYj9mWmtpQT1QWV8z
T2hEQmtvCnooTFRRSFkmRl5eMmhHLVlgKlo5M3ZifmM/KihKY2hEalRmQ3M/elJtKmAqTipWLSQ9
P1FxdGhuU3IqP09TM3NqSwp6bzxfVV5me35hZzYwdWw+ak5wS2E5MntATkgrU3N0WCVAfXhCKkpr
IWx9UFoxY0NsSW5zfn01XiFSbmNVaypybUEKeiVTSVZndDU4RVF4TEorT2lGcTx5dTRlT0R8OUx0
M2ROc2VmeE91cSlEJiRfJWowRGdxQ3kxZ3pjfHRURDMqbWVlCnp7PSV8PGBgfV9IeXBoT3V7Oyl4
a1JnK1FuSENDM1RmK2tzcHFWNip8UUstUmNxRH00PktrQnV3cXV5WkxVcHxncgp6UFViVWJGYkJy
UGQxeE9gXkMqci1pM3A5KkYjKE9CaCE0V3lAYUMmKiF8T3xHWGNqREEmWWhGeztjRDcqbyhHU14K
ekBwUVNFNyl4XzgxPVF5amU2KkxRI1RYdS03KG87Uzh1M3RwREE8U2djS2NLT3BtQTs9SEJaU0BP
RlRAX1hPdnhxCnoqTnwzS0x5dGd6SDZHVSYmVW9jNFp6azRsdW0zUHs5P2ZwSTQrUUdQSit2NmAx
bGZScTNMY1MqKE0qV0srfGIlTwp6ZSR6PjBfZGRqJWhtQ3NwZVhkaFlSfS1pOUE9Q2BFb0NoVVl1
SH5eeCE5K3wmKFBnYio+Q2s8PTlqfCkqQHh5ZlQKenBQIytLdDx9MzlifDNXbDRmeFQoK0c/YUg+
Z0deZEBNRWFVT0pSZnk1NVR0Rkk3XlkpVnVNVT03UHAweTU1alN+CnorVEopaWdNeXJxa1g7d1U4
ajY4aUlEdHFKWWhTX0QzX09lbS1AZzZtZV9SZmlRfXVUX0stQS05cUclfWdrM0U5Ywp6IThgS2dz
TU5YbSliZWxvUGZNcWwqfCYkTT4xcWBpIWNZKVJGWW5qTll1KmdTdkA4WGViVjclfXhZTD42KUdK
UEoKekpwQTdLMzFsY0p1SUZLU3cte3g0RlgwSzJBeil+WGc8YHNPdSQ0fF48TUM3QCt4Ynd4c0dn
VHZKSUFMalB7NjhMCno4QVl1U0dTMEdVZ2s2V2B2NFc7UnkqdW9FVG51bFBpfDU3MyVsdipaeHcj
djZ5VVFeTU9mY3BUI1Y4UklEViMjTgp6RDFgK0FlbXNPaCl3YldERXhWY2ZwS3opanlWPTx+JlpY
UGc2Y3xaREU3VTRiazxEXj4tKF5YSlg0WXpvaU5SdkwKenl1WTd+MjZ3LVBeWnclNkZ9c2hCd1Yy
JDAyYzhSc1NVeTZkTTkyZGlDQXhpWDNJVXFzcTVpZzY+VV8hVnkqcTUkCnpqbX0xNnRKcitRWiZU
P0hra3BlSXdWWC1yMUVJPUAlWmx0OzY8dHdIODZJRD5nKm1qJkUhQSkpJWdYSj14NnUjbAp6Y0tF
UD5ieDRycVYqa2BCQnJaJE1xanR7VHNIY3hVSD47KWlBS31CKEtpbGEmVkQlYj82bSZeMFdLNF4m
RVpOQUkKejhBTVlzXyUkRCV8TStAK2NRcUwtaGk0eUc+aCpqd2RpaSFXMXt9cD5aaHdGWXRfNFN1
MWtqWTk8YkFaanp+OWVrCnpfRGlhcitBZkpGUF85QHltVW8kS1c+PC01YCEkVk5PSTF5KEVEU0g0
V3BDaWpFXz5hbCFOdD1eZVZFUiN1SjE9Ygp6O0JXRjJJZ3lGNUxleFYreWVjJEtpbjtBaUBteW87
Rz56SiZqcmRXI2VjWGhJWnBoNU9ZcXdfUEVmY0Y1NjxPMTkKekwpOHIhS00oKWlmMGBAP1c0KEpk
Yyk3V29QR14mPSQ8elVzTStIQ1dha0NeM3RaeGsrUGpRR31CPlo1PFo2Vnh3CnpCQEhyViQmbH5A
VGFqNzBwY2V7aVN1UkxzVWN6RFlfNVRuRHE4UHlfUTN3aGBEOCE0aks7dkZkUlArUTA9ekp5Kgp6
enVXZCUhYWlARHt8Kko8STtPRCZpJWx7SnAtOCpQdTNWR0xXaXlrNnYjWG1RcXdgLSslZSR8Q0p3
KkBgNXpiMzwKekV9eiM7a1JoTCZxNVBERzZAbW0qJD5adV9aWkUjcTNNYytOJjFPXjdob2g5UVI3
YCtMJGNCUDVwcUc9ZnFBMHVoCnpVQnVrYXhURm1IKTx8WGJ2cDJjPUhTYk5rcFh3NzNhNWx2N1Yk
amI5MiN5WjE0MUAkWD9GfUp0OGdJVTdXbTZtOQp6P2VfOzt6c25tNmBMWmVQPlQ9JClLcj5aP2ty
KlVtRnFSN3p4MEM2XmJtY3NjQDFBR3R3X3JOSD4tWG0kZCp8UTwKem4mMUxuMHU3PWwmSUxzPiVD
a0pwYERpRzlGMTh4NE5lK2xnPCNpP2U3akwleDs0Wm5Sa05eTXgwNypxb002TjwkCkVmKD4wTiEy
a2ROCgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5L2luZGV4Lmh0bWwgYi9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9qcXVlcnkvaW5kZXguaHRtbAppbmRleCBjNDg5M2NmMDAxYWJhNzI2YjJkMTk3NjIzZjJl
NjcxZWMwN2VmNGY3Li40MTRhYzU4ZjYxYWJjMmI3MjJkYjUzZmVlY2U3ZTAzZTUyZmQzMzQ0IDEw
MDY0NAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L2FyY2hpdGVjdHVyZS1leGFtcGxlcy9qcXVlcnkvaW5kZXguaHRtbAorKysgYi9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9qcXVlcnkvaW5kZXguaHRtbApAQCAtMSw1MiArMSw2MSBAQAogPCFkb2N0eXBlIGh0bWw+CiA8
aHRtbCBsYW5nPSJlbiIgZGF0YS1mcmFtZXdvcms9ImpxdWVyeSI+CiAgICAgPGhlYWQ+Ci0gICAg
PG1ldGEgY2hhcnNldD0idXRmLTgiPgotICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0
aWJsZSIgY29udGVudD0iSUU9ZWRnZSI+Ci0gICAgPHRpdGxlPmpRdWVyeSDigKIgVG9kb01WQzwv
dGl0bGU+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJib3dlcl9jb21wb25lbnRz
L3RvZG9tdmMtY29tbW9uL2Jhc2UuY3NzIj4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhy
ZWY9ImNzcy9hcHAuY3NzIj4KKyAgICAgICAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICAgICAg
ICA8dGl0bGU+alF1ZXJ5IOKAoiBUb2RvTVZDPC90aXRsZT4KKyAgICAgICAgPGxpbmsgcmVsPSJz
dHlsZXNoZWV0IiBocmVmPSJub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFzZS5jc3MiPgor
ICAgICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Im5vZGVfbW9kdWxlcy90b2RvbXZj
LWFwcC1jc3MvaW5kZXguY3NzIj4KKyAgICAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVm
PSJjc3MvYXBwLmNzcyI+CiAgICAgPC9oZWFkPgogICAgIDxib2R5PgotICAgIDxzZWN0aW9uIGlk
PSJ0b2RvYXBwIj4KLSAgICA8aGVhZGVyIGlkPSJoZWFkZXIiPgotICAgIDxoMT50b2RvczwvaDE+
Ci0gICAgPGlucHV0IGlkPSJuZXctdG9kbyIgcGxhY2Vob2xkZXI9IldoYXQgbmVlZHMgdG8gYmUg
ZG9uZT8iIGF1dG9mb2N1cz4KLSAgICA8L2hlYWRlcj4KLSAgICA8c2VjdGlvbiBpZD0ibWFpbiI+
Ci0gICAgPGlucHV0IGlkPSJ0b2dnbGUtYWxsIiB0eXBlPSJjaGVja2JveCI+Ci0gICAgPGxhYmVs
IGZvcj0idG9nZ2xlLWFsbCI+TWFyayBhbGwgYXMgY29tcGxldGU8L2xhYmVsPgotICAgIDx1bCBp
ZD0idG9kby1saXN0Ij48L3VsPgotICAgIDwvc2VjdGlvbj4KLSAgICA8Zm9vdGVyIGlkPSJmb290
ZXIiPgotICAgIDxzcGFuIGlkPSJ0b2RvLWNvdW50Ij48c3Ryb25nPjA8L3N0cm9uZz4gaXRlbSBs
ZWZ0PC9zcGFuPgotICAgIDxidXR0b24gaWQ9ImNsZWFyLWNvbXBsZXRlZCI+Q2xlYXIgY29tcGxl
dGVkPC9idXR0b24+Ci0gICAgPC9mb290ZXI+Ci0gICAgPC9zZWN0aW9uPgotICAgIDxmb290ZXIg
aWQ9ImluZm8iPgotICAgIDxwPkRvdWJsZS1jbGljayB0byBlZGl0IGEgdG9kbzwvcD4KLSAgICA8
cD5DcmVhdGVkIGJ5IDxhIGhyZWY9Imh0dHA6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cyI+U2lu
ZHJlIFNvcmh1czwvYT48L3A+Ci0gICAgPHA+UGFydCBvZiA8YSBocmVmPSJodHRwOi8vdG9kb212
Yy5jb20iPlRvZG9NVkM8L2E+PC9wPgotICAgIDwvZm9vdGVyPgotICAgIDxzY3JpcHQgaWQ9InRv
ZG8tdGVtcGxhdGUiIHR5cGU9InRleHQveC1oYW5kbGViYXJzLXRlbXBsYXRlIj4KLSAgICB7eyN0
aGlzfX0KLSAgICA8bGkge3sjaWYgY29tcGxldGVkfX1jbGFzcz0iY29tcGxldGVkInt7L2lmfX0g
ZGF0YS1pZD0ie3tpZH19Ij4KLSAgICA8ZGl2IGNsYXNzPSJ2aWV3Ij4KLSAgICA8aW5wdXQgY2xh
c3M9InRvZ2dsZSIgdHlwZT0iY2hlY2tib3giIHt7I2lmIGNvbXBsZXRlZH19Y2hlY2tlZHt7L2lm
fX0+Ci0gICAgPGxhYmVsPnt7dGl0bGV9fTwvbGFiZWw+Ci0gICAgPGJ1dHRvbiBjbGFzcz0iZGVz
dHJveSI+PC9idXR0b24+Ci0gICAgPC9kaXY+Ci0gICAgPGlucHV0IGNsYXNzPSJlZGl0IiB2YWx1
ZT0ie3t0aXRsZX19Ij4KLSAgICA8L2xpPgotICAgIHt7L3RoaXN9fQotICAgIDwvc2NyaXB0Pgot
ICAgIDxzY3JpcHQgaWQ9ImZvb3Rlci10ZW1wbGF0ZSIgdHlwZT0idGV4dC94LWhhbmRsZWJhcnMt
dGVtcGxhdGUiPgotICAgIDxzcGFuIGlkPSJ0b2RvLWNvdW50Ij48c3Ryb25nPnt7YWN0aXZlVG9k
b0NvdW50fX08L3N0cm9uZz4ge3thY3RpdmVUb2RvV29yZH19IGxlZnQ8L3NwYW4+Ci0gICAge3sj
aWYgY29tcGxldGVkVG9kb3N9fTxidXR0b24gaWQ9ImNsZWFyLWNvbXBsZXRlZCI+Q2xlYXIgY29t
cGxldGVkICh7e2NvbXBsZXRlZFRvZG9zfX0pPC9idXR0b24+e3svaWZ9fQotICAgIDwvc2NyaXB0
PgotICAgIDxzY3JpcHQgc3JjPSJib3dlcl9jb21wb25lbnRzL3RvZG9tdmMtY29tbW9uL2Jhc2Uu
anMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgc3JjPSJib3dlcl9jb21wb25lbnRzL2pxdWVyeS9q
cXVlcnkuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgc3JjPSJib3dlcl9jb21wb25lbnRzL2hh
bmRsZWJhcnMvaGFuZGxlYmFycy5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCBzcmM9ImpzL2Fw
cC5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzZWN0aW9uIGlkPSJ0b2RvYXBwIj4KKyAgICAgICAg
ICAgIDxoZWFkZXIgaWQ9ImhlYWRlciI+CisgICAgICAgICAgICAgICAgPGgxPnRvZG9zPC9oMT4K
KyAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9Im5ldy10b2RvIiBwbGFjZWhvbGRlcj0iV2hhdCBu
ZWVkcyB0byBiZSBkb25lPyIgYXV0b2ZvY3VzPgorICAgICAgICAgICAgPC9oZWFkZXI+CisgICAg
ICAgICAgICA8c2VjdGlvbiBpZD0ibWFpbiI+CisgICAgICAgICAgICAgICAgPGlucHV0IGlkPSJ0
b2dnbGUtYWxsIiB0eXBlPSJjaGVja2JveCI+CisgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0i
dG9nZ2xlLWFsbCI+TWFyayBhbGwgYXMgY29tcGxldGU8L2xhYmVsPgorICAgICAgICAgICAgICAg
IDx1bCBpZD0idG9kby1saXN0Ij48L3VsPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAg
ICAgICAgPGZvb3RlciBpZD0iZm9vdGVyIj48L2Zvb3Rlcj4KKyAgICAgICAgPC9zZWN0aW9uPgor
ICAgICAgICA8Zm9vdGVyIGlkPSJpbmZvIj4KKyAgICAgICAgICAgIDxwPkRvdWJsZS1jbGljayB0
byBlZGl0IGEgdG9kbzwvcD4KKyAgICAgICAgICAgIDxwPkNyZWF0ZWQgYnkgPGEgaHJlZj0iaHR0
cDovL3NpbmRyZXNvcmh1cy5jb20iPlNpbmRyZSBTb3JodXM8L2E+PC9wPgorICAgICAgICAgICAg
PHA+UGFydCBvZiA8YSBocmVmPSJodHRwOi8vdG9kb212Yy5jb20iPlRvZG9NVkM8L2E+PC9wPgor
ICAgICAgICA8L2Zvb3Rlcj4KKyAgICAgICAgPHNjcmlwdCBpZD0idG9kby10ZW1wbGF0ZSIgdHlw
ZT0idGV4dC94LWhhbmRsZWJhcnMtdGVtcGxhdGUiPgorICAgICAgICAgICAge3sjdGhpc319Cisg
ICAgICAgICAgICA8bGkge3sjaWYgY29tcGxldGVkfX1jbGFzcz0iY29tcGxldGVkInt7L2lmfX0g
ZGF0YS1pZD0ie3tpZH19Ij4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2aWV3Ij4KKyAg
ICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJ0b2dnbGUiIHR5cGU9ImNoZWNrYm94IiB7
eyNpZiBjb21wbGV0ZWR9fWNoZWNrZWR7ey9pZn19PgorICAgICAgICAgICAgICAgICAgICA8bGFi
ZWw+e3t0aXRsZX19PC9sYWJlbD4KKyAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0i
ZGVzdHJveSI+PC9idXR0b24+CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAg
ICAgPGlucHV0IGNsYXNzPSJlZGl0IiB2YWx1ZT0ie3t0aXRsZX19Ij4KKyAgICAgICAgICAgIDwv
bGk+CisgICAgICAgIHt7L3RoaXN9fQorICAgICAgICA8L3NjcmlwdD4KKyAgICAgICAgPHNjcmlw
dCBpZD0iZm9vdGVyLXRlbXBsYXRlIiB0eXBlPSJ0ZXh0L3gtaGFuZGxlYmFycy10ZW1wbGF0ZSI+
CisgICAgICAgICAgICA8c3BhbiBpZD0idG9kby1jb3VudCI+PHN0cm9uZz57e2FjdGl2ZVRvZG9D
b3VudH19PC9zdHJvbmc+IHt7YWN0aXZlVG9kb1dvcmR9fSBsZWZ0PC9zcGFuPgorICAgICAgICAg
ICAgPHVsIGlkPSJmaWx0ZXJzIj4KKyAgICAgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAg
ICAgICAgIDxhIHt7I2VxIGZpbHRlciAnYWxsJ319Y2xhc3M9InNlbGVjdGVkInt7L2VxfX0gaHJl
Zj0iIy9hbGwiPkFsbDwvYT4KKyAgICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgICAg
IDxsaT4KKyAgICAgICAgICAgICAgICAgICAgPGEge3sjZXEgZmlsdGVyICdhY3RpdmUnfX1jbGFz
cz0ic2VsZWN0ZWQie3svZXF9fWhyZWY9IiMvYWN0aXZlIj5BY3RpdmU8L2E+CisgICAgICAgICAg
ICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgICAgICAgIDxh
IHt7I2VxIGZpbHRlciAnY29tcGxldGVkJ319Y2xhc3M9InNlbGVjdGVkInt7L2VxfX1ocmVmPSIj
L2NvbXBsZXRlZCI+Q29tcGxldGVkPC9hPgorICAgICAgICAgICAgICAgIDwvbGk+CisgICAgICAg
ICAgICA8L3VsPgorICAgICAgICAgICAge3sjaWYgY29tcGxldGVkVG9kb3N9fTxidXR0b24gaWQ9
ImNsZWFyLWNvbXBsZXRlZCI+Q2xlYXIgY29tcGxldGVkPC9idXR0b24+e3svaWZ9fQorICAgICAg
ICA8L3NjcmlwdD4KKyAgICAgICAgPCEtLSA8c2NyaXB0IHNyYz0ibm9kZV9tb2R1bGVzL3RvZG9t
dmMtY29tbW9uL2Jhc2UuanMiPjwvc2NyaXB0PiAtLT4KKyAgICAgICAgPHNjcmlwdCBzcmM9Im5v
ZGVfbW9kdWxlcy9qcXVlcnkvZGlzdC9qcXVlcnkuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2Ny
aXB0IHNyYz0ibm9kZV9tb2R1bGVzL2hhbmRsZWJhcnMvZGlzdC9oYW5kbGViYXJzLmpzIj48L3Nj
cmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9Im5vZGVfbW9kdWxlcy9kaXJlY3Rvci9idWlsZC9k
aXJlY3Rvci5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJqcy9hcHAuanMiPjwv
c2NyaXB0PgogICAgIDwvYm9keT4KIDwvaHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2px
dWVyeS9qcy9hcHAuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9qcXVlcnkvanMvYXBwLmpzCmluZGV4IDEyZmIy
NGQ1MDI1ZDNjODVjZTIwMzU4NTE3NzliYjExYTdlNDAzYjMuLjIzZjRhZWFhYzY2NjQ3MWU0Y2Y0
ZWNmMGFiNGQ3YjM3ODkxYTA5NWEgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2pxdWVyeS9qcy9h
cHAuanMKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5L2pzL2FwcC5qcwpAQCAtMSwxODcgKzEsMTky
IEBACi0vKmdsb2JhbCBqUXVlcnksIEhhbmRsZWJhcnMgKi8KKy8qZ2xvYmFsIGpRdWVyeSwgSGFu
ZGxlYmFycywgUm91dGVyICovCiBqUXVlcnkoZnVuY3Rpb24gKCQpIHsKICAgICAndXNlIHN0cmlj
dCc7CiAKLSAgICB2YXIgVXRpbHMgPSB7Ci0gICAgdXVpZDogZnVuY3Rpb24gKCkgewotICAgIC8q
anNoaW50IGJpdHdpc2U6ZmFsc2UgKi8KLSAgICB2YXIgaSwgcmFuZG9tOwotICAgIHZhciB1dWlk
ID0gJyc7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgewotICAgIHJhbmRvbSA9IE1h
dGgucmFuZG9tKCkgKiAxNiB8IDA7Ci0gICAgaWYgKGkgPT09IDggfHwgaSA9PT0gMTIgfHwgaSA9
PT0gMTYgfHwgaSA9PT0gMjApIHsKLSAgICB1dWlkICs9ICctJzsKLSAgICB9Ci0gICAgdXVpZCAr
PSAoaSA9PT0gMTIgPyA0IDogKGkgPT09IDE2ID8gKHJhbmRvbSAmIDMgfCA4KSA6IHJhbmRvbSkp
LnRvU3RyaW5nKDE2KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdXVpZDsKLSAgICB9LAotICAgIHBs
dXJhbGl6ZTogZnVuY3Rpb24gKGNvdW50LCB3b3JkKSB7Ci0gICAgcmV0dXJuIGNvdW50ID09PSAx
ID8gd29yZCA6IHdvcmQgKyAncyc7Ci0gICAgfSwKLSAgICBzdG9yZTogZnVuY3Rpb24gKG5hbWVz
cGFjZSwgZGF0YSkgewotICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgewotICAgIHJldHVy
biBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShuYW1lc3BhY2UsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTsK
LSAgICB9IGVsc2UgewotICAgIHZhciBzdG9yZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWVz
cGFjZSk7Ci0gICAgcmV0dXJuIChzdG9yZSAmJiBKU09OLnBhcnNlKHN0b3JlKSkgfHwgW107Ci0g
ICAgfQotICAgIH0KLSAgICB9OwotCi0gICAgdmFyIEFwcCA9IHsKLSAgICBpbml0OiBmdW5jdGlv
biAoKSB7Ci0gICAgdGhpcy5FTlRFUl9LRVkgPSAxMzsKLSAgICB0aGlzLnRvZG9zID0gVXRpbHMu
c3RvcmUoJ3RvZG9zLWpxdWVyeScpOwotICAgIHRoaXMuY2FjaGVFbGVtZW50cygpOwotICAgIHRo
aXMuYmluZEV2ZW50cygpOwotICAgIHRoaXMucmVuZGVyKCk7Ci0gICAgfSwKLSAgICBjYWNoZUVs
ZW1lbnRzOiBmdW5jdGlvbiAoKSB7Ci0gICAgdGhpcy50b2RvVGVtcGxhdGUgPSBIYW5kbGViYXJz
LmNvbXBpbGUoJCgnI3RvZG8tdGVtcGxhdGUnKS5odG1sKCkpOwotICAgIHRoaXMuZm9vdGVyVGVt
cGxhdGUgPSBIYW5kbGViYXJzLmNvbXBpbGUoJCgnI2Zvb3Rlci10ZW1wbGF0ZScpLmh0bWwoKSk7
Ci0gICAgdGhpcy4kdG9kb0FwcCA9ICQoJyN0b2RvYXBwJyk7Ci0gICAgdGhpcy4kaGVhZGVyID0g
dGhpcy4kdG9kb0FwcC5maW5kKCcjaGVhZGVyJyk7Ci0gICAgdGhpcy4kbWFpbiA9IHRoaXMuJHRv
ZG9BcHAuZmluZCgnI21haW4nKTsKLSAgICB0aGlzLiRmb290ZXIgPSB0aGlzLiR0b2RvQXBwLmZp
bmQoJyNmb290ZXInKTsKLSAgICB0aGlzLiRuZXdUb2RvID0gdGhpcy4kaGVhZGVyLmZpbmQoJyNu
ZXctdG9kbycpOwotICAgIHRoaXMuJHRvZ2dsZUFsbCA9IHRoaXMuJG1haW4uZmluZCgnI3RvZ2ds
ZS1hbGwnKTsKLSAgICB0aGlzLiR0b2RvTGlzdCA9IHRoaXMuJG1haW4uZmluZCgnI3RvZG8tbGlz
dCcpOwotICAgIHRoaXMuJGNvdW50ID0gdGhpcy4kZm9vdGVyLmZpbmQoJyN0b2RvLWNvdW50Jyk7
Ci0gICAgdGhpcy4kY2xlYXJCdG4gPSB0aGlzLiRmb290ZXIuZmluZCgnI2NsZWFyLWNvbXBsZXRl
ZCcpOwotICAgIH0sCi0gICAgYmluZEV2ZW50czogZnVuY3Rpb24gKCkgewotICAgIHZhciBsaXN0
ID0gdGhpcy4kdG9kb0xpc3Q7Ci0gICAgdGhpcy4kbmV3VG9kby5vbigna2V5dXAnLCB0aGlzLmNy
ZWF0ZSk7Ci0gICAgdGhpcy4kdG9nZ2xlQWxsLm9uKCdjaGFuZ2UnLCB0aGlzLnRvZ2dsZUFsbCk7
Ci0gICAgdGhpcy4kZm9vdGVyLm9uKCdjbGljaycsICcjY2xlYXItY29tcGxldGVkJywgdGhpcy5k
ZXN0cm95Q29tcGxldGVkKTsKLSAgICBsaXN0Lm9uKCdjaGFuZ2UnLCAnLnRvZ2dsZScsIHRoaXMu
dG9nZ2xlKTsKLSAgICBsaXN0Lm9uKCdkYmxjbGljaycsICdsYWJlbCcsIHRoaXMuZWRpdCk7Ci0g
ICAgbGlzdC5vbigna2V5cHJlc3MnLCAnLmVkaXQnLCB0aGlzLmJsdXJPbkVudGVyKTsKLSAgICBs
aXN0Lm9uKCdibHVyJywgJy5lZGl0JywgdGhpcy51cGRhdGUpOwotICAgIGxpc3Qub24oJ2NsaWNr
JywgJy5kZXN0cm95JywgdGhpcy5kZXN0cm95KTsKLSAgICB9LAotICAgIHJlbmRlcjogZnVuY3Rp
b24gKCkgewotICAgIHRoaXMuJHRvZG9MaXN0Lmh0bWwodGhpcy50b2RvVGVtcGxhdGUodGhpcy50
b2RvcykpOwotICAgIHRoaXMuJG1haW4udG9nZ2xlKCEhdGhpcy50b2Rvcy5sZW5ndGgpOwotICAg
IHRoaXMuJHRvZ2dsZUFsbC5wcm9wKCdjaGVja2VkJywgIXRoaXMuYWN0aXZlVG9kb0NvdW50KCkp
OwotICAgIHRoaXMucmVuZGVyRm9vdGVyKCk7Ci0gICAgVXRpbHMuc3RvcmUoJ3RvZG9zLWpxdWVy
eScsIHRoaXMudG9kb3MpOwotICAgIH0sCi0gICAgcmVuZGVyRm9vdGVyOiBmdW5jdGlvbiAoKSB7
Ci0gICAgdmFyIHRvZG9Db3VudCA9IHRoaXMudG9kb3MubGVuZ3RoOwotICAgIHZhciBhY3RpdmVU
b2RvQ291bnQgPSB0aGlzLmFjdGl2ZVRvZG9Db3VudCgpOwotICAgIHZhciBmb290ZXIgPSB7Ci0g
ICAgYWN0aXZlVG9kb0NvdW50OiBhY3RpdmVUb2RvQ291bnQsCi0gICAgYWN0aXZlVG9kb1dvcmQ6
IFV0aWxzLnBsdXJhbGl6ZShhY3RpdmVUb2RvQ291bnQsICdpdGVtJyksCi0gICAgY29tcGxldGVk
VG9kb3M6IHRvZG9Db3VudCAtIGFjdGl2ZVRvZG9Db3VudAotICAgIH07Ci0KLSAgICB0aGlzLiRm
b290ZXIudG9nZ2xlKCEhdG9kb0NvdW50KTsKLSAgICB0aGlzLiRmb290ZXIuaHRtbCh0aGlzLmZv
b3RlclRlbXBsYXRlKGZvb3RlcikpOwotICAgIH0sCi0gICAgdG9nZ2xlQWxsOiBmdW5jdGlvbiAo
KSB7Ci0gICAgdmFyIGlzQ2hlY2tlZCA9ICQodGhpcykucHJvcCgnY2hlY2tlZCcpOwotCi0gICAg
JC5lYWNoKEFwcC50b2RvcywgZnVuY3Rpb24gKGksIHZhbCkgewotICAgIHZhbC5jb21wbGV0ZWQg
PSBpc0NoZWNrZWQ7CisgICAgSGFuZGxlYmFycy5yZWdpc3RlckhlbHBlcignZXEnLCBmdW5jdGlv
biAoYSwgYiwgb3B0aW9ucykgeworICAgICAgICByZXR1cm4gYSA9PT0gYiA/IG9wdGlvbnMuZm4o
dGhpcykgOiBvcHRpb25zLmludmVyc2UodGhpcyk7CiAgICAgfSk7CiAKLSAgICBBcHAucmVuZGVy
KCk7Ci0gICAgfSwKLSAgICBhY3RpdmVUb2RvQ291bnQ6IGZ1bmN0aW9uICgpIHsKLSAgICB2YXIg
Y291bnQgPSAwOwotCi0gICAgJC5lYWNoKHRoaXMudG9kb3MsIGZ1bmN0aW9uIChpLCB2YWwpIHsK
LSAgICBpZiAoIXZhbC5jb21wbGV0ZWQpIHsKLSAgICBjb3VudCsrOwotICAgIH0KLSAgICB9KTsK
IAotICAgIHJldHVybiBjb3VudDsKLSAgICB9LAotICAgIGRlc3Ryb3lDb21wbGV0ZWQ6IGZ1bmN0
aW9uICgpIHsKLSAgICB2YXIgdG9kb3MgPSBBcHAudG9kb3M7Ci0gICAgdmFyIGwgPSB0b2Rvcy5s
ZW5ndGg7Ci0KLSAgICB3aGlsZSAobC0tKSB7Ci0gICAgaWYgKHRvZG9zW2xdLmNvbXBsZXRlZCkg
ewotICAgIHRvZG9zLnNwbGljZShsLCAxKTsKLSAgICB9Ci0gICAgfQotCi0gICAgQXBwLnJlbmRl
cigpOwotICAgIH0sCi0gICAgLy8gYWNjZXB0cyBhbiBlbGVtZW50IGZyb20gaW5zaWRlIHRoZSBg
Lml0ZW1gIGRpdiBhbmQKLSAgICAvLyByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHRvZG8gaW4g
dGhlIHRvZG9zIGFycmF5Ci0gICAgZ2V0VG9kbzogZnVuY3Rpb24gKGVsZW0sIGNhbGxiYWNrKSB7
Ci0gICAgdmFyIGlkID0gJChlbGVtKS5jbG9zZXN0KCdsaScpLmRhdGEoJ2lkJyk7Ci0KLSAgICAk
LmVhY2godGhpcy50b2RvcywgZnVuY3Rpb24gKGksIHZhbCkgewotICAgIGlmICh2YWwuaWQgPT09
IGlkKSB7Ci0gICAgY2FsbGJhY2suYXBwbHkoQXBwLCBhcmd1bWVudHMpOwotICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0gICAgfSk7Ci0gICAgfSwKLSAgICBjcmVhdGU6IGZ1bmN0aW9uIChlKSB7
Ci0gICAgdmFyICRpbnB1dCA9ICQodGhpcyk7Ci0gICAgdmFyIHZhbCA9ICQudHJpbSgkaW5wdXQu
dmFsKCkpOwotCi0gICAgaWYgKGUud2hpY2ggIT09IEFwcC5FTlRFUl9LRVkgfHwgIXZhbCkgewot
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBcHAudG9kb3MucHVzaCh7Ci0gICAgaWQ6IFV0aWxz
LnV1aWQoKSwKLSAgICB0aXRsZTogdmFsLAotICAgIGNvbXBsZXRlZDogZmFsc2UKLSAgICB9KTsK
KyAgICB2YXIgdXRpbCA9IHsKKyAgICAgICAgdXVpZDogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgLypqc2hpbnQgYml0d2lzZTpmYWxzZSAqLworICAgICAgICAgICAgdmFyIGksIHJhbmRvbTsK
KyAgICAgICAgICAgIHZhciB1dWlkID0gJyc7CisKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkg
PCAzMjsgaSsrKSB7CisgICAgICAgICAgICAgICAgcmFuZG9tID0gTWF0aC5yYW5kb20oKSAqIDE2
IHwgMDsKKyAgICAgICAgICAgICAgICBpZiAoaSA9PT0gOCB8fCBpID09PSAxMiB8fCBpID09PSAx
NiB8fCBpID09PSAyMCkgeworICAgICAgICAgICAgICAgICAgICB1dWlkICs9ICctJzsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdXVpZCArPSAoaSA9PT0gMTIgPyA0IDogKGkg
PT09IDE2ID8gKHJhbmRvbSAmIDMgfCA4KSA6IHJhbmRvbSkpLnRvU3RyaW5nKDE2KTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHV1aWQ7CisgICAgICAgIH0sCisgICAgICAg
IHBsdXJhbGl6ZTogZnVuY3Rpb24gKGNvdW50LCB3b3JkKSB7CisgICAgICAgICAgICByZXR1cm4g
Y291bnQgPT09IDEgPyB3b3JkIDogd29yZCArICdzJzsKKyAgICAgICAgfSwKKyAgICAgICAgc3Rv
cmU6IGZ1bmN0aW9uIChuYW1lc3BhY2UsIGRhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiBbXTsK
KyAgICAgICAgfQorICAgIH07CiAKLSAgICAkaW5wdXQudmFsKCcnKTsKLSAgICBBcHAucmVuZGVy
KCk7Ci0gICAgfSwKLSAgICB0b2dnbGU6IGZ1bmN0aW9uICgpIHsKLSAgICBBcHAuZ2V0VG9kbyh0
aGlzLCBmdW5jdGlvbiAoaSwgdmFsKSB7Ci0gICAgdmFsLmNvbXBsZXRlZCA9ICF2YWwuY29tcGxl
dGVkOwotICAgIH0pOwotICAgIEFwcC5yZW5kZXIoKTsKLSAgICB9LAotICAgIGVkaXQ6IGZ1bmN0
aW9uICgpIHsKLSAgICB2YXIgJGlucHV0ID0gJCh0aGlzKS5jbG9zZXN0KCdsaScpLmFkZENsYXNz
KCdlZGl0aW5nJykuZmluZCgnLmVkaXQnKTsKLSAgICB2YXIgdmFsID0gJGlucHV0LnZhbCgpOwot
Ci0gICAgJGlucHV0LnZhbCh2YWwpLmZvY3VzKCk7Ci0gICAgfSwKLSAgICBibHVyT25FbnRlcjog
ZnVuY3Rpb24gKGUpIHsKLSAgICBpZiAoZS53aGljaCA9PT0gQXBwLkVOVEVSX0tFWSkgewotICAg
IGUudGFyZ2V0LmJsdXIoKTsKLSAgICB9Ci0gICAgfSwKLSAgICB1cGRhdGU6IGZ1bmN0aW9uICgp
IHsKLSAgICB2YXIgdmFsID0gJC50cmltKCQodGhpcykucmVtb3ZlQ2xhc3MoJ2VkaXRpbmcnKS52
YWwoKSk7Ci0KLSAgICBBcHAuZ2V0VG9kbyh0aGlzLCBmdW5jdGlvbiAoaSkgewotICAgIGlmICh2
YWwpIHsKLSAgICB0aGlzLnRvZG9zW2ldLnRpdGxlID0gdmFsOwotICAgIH0gZWxzZSB7Ci0gICAg
dGhpcy50b2Rvcy5zcGxpY2UoaSwgMSk7Ci0gICAgfQotICAgIHRoaXMucmVuZGVyKCk7Ci0gICAg
fSk7Ci0gICAgfSwKLSAgICBkZXN0cm95OiBmdW5jdGlvbiAoKSB7Ci0gICAgQXBwLmdldFRvZG8o
dGhpcywgZnVuY3Rpb24gKGkpIHsKLSAgICB0aGlzLnRvZG9zLnNwbGljZShpLCAxKTsKLSAgICB0
aGlzLnJlbmRlcigpOwotICAgIH0pOwotICAgIH0KKyAgICB2YXIgQXBwID0geworICAgICAgICBF
TlRFUl9LRVk6IDEzLAorICAgICAgICBFU0NBUEVfS0VZOiAyNywKKyAgICAgICAgaW5pdDogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgdGhpcy50b2RvcyA9IHV0aWwuc3RvcmUoJ3RvZG9zLWpx
dWVyeScpOworICAgICAgICAgICAgdGhpcy50b2RvVGVtcGxhdGUgPSBIYW5kbGViYXJzLmNvbXBp
bGUoJCgnI3RvZG8tdGVtcGxhdGUnKS5odG1sKCkpOworICAgICAgICAgICAgdGhpcy5mb290ZXJU
ZW1wbGF0ZSA9IEhhbmRsZWJhcnMuY29tcGlsZSgkKCcjZm9vdGVyLXRlbXBsYXRlJykuaHRtbCgp
KTsKKyAgICAgICAgICAgIHRoaXMuYmluZEV2ZW50cygpOworCisgICAgICAgICAgICBuZXcgUm91
dGVyKHsKKyAgICAgICAgICAgICAgICAnLzpmaWx0ZXInOiBmdW5jdGlvbiAoZmlsdGVyKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyID0gZmlsdGVyOworICAgICAgICAgICAgICAg
ICAgICB0aGlzLnJlbmRlcigpOworICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKQorICAgICAg
ICAgICAgfSkuaW5pdCgnL2FsbCcpOworICAgICAgICB9LAorICAgICAgICBiaW5kRXZlbnRzOiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICAkKCcjbmV3LXRvZG8nKS5vbigna2V5dXAnLCB0aGlz
LmNyZWF0ZS5iaW5kKHRoaXMpKTsKKyAgICAgICAgICAgICQoJyN0b2dnbGUtYWxsJykub24oJ2No
YW5nZScsIHRoaXMudG9nZ2xlQWxsLmJpbmQodGhpcykpOworICAgICAgICAgICAgJCgnI2Zvb3Rl
cicpLm9uKCdjbGljaycsICcjY2xlYXItY29tcGxldGVkJywgdGhpcy5kZXN0cm95Q29tcGxldGVk
LmJpbmQodGhpcykpOworICAgICAgICAgICAgJCgnI3RvZG8tbGlzdCcpCisgICAgICAgICAgICAg
ICAgLm9uKCdjaGFuZ2UnLCAnLnRvZ2dsZScsIHRoaXMudG9nZ2xlLmJpbmQodGhpcykpCisgICAg
ICAgICAgICAgICAgLm9uKCdkYmxjbGljaycsICdsYWJlbCcsIHRoaXMuZWRpdC5iaW5kKHRoaXMp
KQorICAgICAgICAgICAgICAgIC5vbigna2V5dXAnLCAnLmVkaXQnLCB0aGlzLmVkaXRLZXl1cC5i
aW5kKHRoaXMpKQorICAgICAgICAgICAgICAgIC5vbignZm9jdXNvdXQnLCAnLmVkaXQnLCB0aGlz
LnVwZGF0ZS5iaW5kKHRoaXMpKQorICAgICAgICAgICAgICAgIC5vbignY2xpY2snLCAnLmRlc3Ry
b3knLCB0aGlzLmRlc3Ryb3kuYmluZCh0aGlzKSk7CisgICAgICAgIH0sCisgICAgICAgIHJlbmRl
cjogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIHRvZG9zID0gdGhpcy5nZXRGaWx0ZXJl
ZFRvZG9zKCk7CisgICAgICAgICAgICAkKCcjdG9kby1saXN0JykuaHRtbCh0aGlzLnRvZG9UZW1w
bGF0ZSh0b2RvcykpOworICAgICAgICAgICAgJCgnI21haW4nKS50b2dnbGUodG9kb3MubGVuZ3Ro
ID4gMCk7CisgICAgICAgICAgICAkKCcjdG9nZ2xlLWFsbCcpLnByb3AoJ2NoZWNrZWQnLCB0aGlz
LmdldEFjdGl2ZVRvZG9zKCkubGVuZ3RoID09PSAwKTsKKyAgICAgICAgICAgIHRoaXMucmVuZGVy
Rm9vdGVyKCk7CisgICAgICAgICAgICAkKCcjbmV3LXRvZG8nKS5mb2N1cygpOworICAgICAgICAg
ICAgdXRpbC5zdG9yZSgndG9kb3MtanF1ZXJ5JywgdGhpcy50b2Rvcyk7CisgICAgICAgIH0sCisg
ICAgICAgIHJlbmRlckZvb3RlcjogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIHRvZG9D
b3VudCA9IHRoaXMudG9kb3MubGVuZ3RoOworICAgICAgICAgICAgdmFyIGFjdGl2ZVRvZG9Db3Vu
dCA9IHRoaXMuZ2V0QWN0aXZlVG9kb3MoKS5sZW5ndGg7CisgICAgICAgICAgICB2YXIgdGVtcGxh
dGUgPSB0aGlzLmZvb3RlclRlbXBsYXRlKHsKKyAgICAgICAgICAgICAgICBhY3RpdmVUb2RvQ291
bnQ6IGFjdGl2ZVRvZG9Db3VudCwKKyAgICAgICAgICAgICAgICBhY3RpdmVUb2RvV29yZDogdXRp
bC5wbHVyYWxpemUoYWN0aXZlVG9kb0NvdW50LCAnaXRlbScpLAorICAgICAgICAgICAgICAgIGNv
bXBsZXRlZFRvZG9zOiB0b2RvQ291bnQgLSBhY3RpdmVUb2RvQ291bnQsCisgICAgICAgICAgICAg
ICAgZmlsdGVyOiB0aGlzLmZpbHRlcgorICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICQo
JyNmb290ZXInKS50b2dnbGUodG9kb0NvdW50ID4gMCkuaHRtbCh0ZW1wbGF0ZSk7CisgICAgICAg
IH0sCisgICAgICAgIHRvZ2dsZUFsbDogZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgIHZhciBp
c0NoZWNrZWQgPSAkKGUudGFyZ2V0KS5wcm9wKCdjaGVja2VkJyk7CisKKyAgICAgICAgICAgIHRo
aXMudG9kb3MuZm9yRWFjaChmdW5jdGlvbiAodG9kbykgeworICAgICAgICAgICAgICAgIHRvZG8u
Y29tcGxldGVkID0gaXNDaGVja2VkOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIHRo
aXMucmVuZGVyKCk7CisgICAgICAgIH0sCisgICAgICAgIGdldEFjdGl2ZVRvZG9zOiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy50b2Rvcy5maWx0ZXIoZnVuY3Rpb24gKHRv
ZG8pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gIXRvZG8uY29tcGxldGVkOworICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0sCisgICAgICAgIGdldENvbXBsZXRlZFRvZG9zOiBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy50b2Rvcy5maWx0ZXIoZnVuY3Rpb24gKHRvZG8p
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdG9kby5jb21wbGV0ZWQ7CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgfSwKKyAgICAgICAgZ2V0RmlsdGVyZWRUb2RvczogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVyID09PSAnYWN0aXZlJykgeworICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzLmdldEFjdGl2ZVRvZG9zKCk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmICh0aGlzLmZpbHRlciA9PT0gJ2NvbXBsZXRlZCcpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5nZXRDb21wbGV0ZWRUb2RvcygpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICByZXR1cm4gdGhpcy50b2RvczsKKyAgICAgICAgfSwKKyAgICAgICAgZGVzdHJveUNv
bXBsZXRlZDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdGhpcy50b2RvcyA9IHRoaXMuZ2V0
QWN0aXZlVG9kb3MoKTsKKyAgICAgICAgICAgIHRoaXMuZmlsdGVyID0gJ2FsbCc7CisgICAgICAg
ICAgICB0aGlzLnJlbmRlcigpOworICAgICAgICB9LAorICAgICAgICAvLyBhY2NlcHRzIGFuIGVs
ZW1lbnQgZnJvbSBpbnNpZGUgdGhlIGAuaXRlbWAgZGl2IGFuZAorICAgICAgICAvLyByZXR1cm5z
IHRoZSBjb3JyZXNwb25kaW5nIGluZGV4IGluIHRoZSBgdG9kb3NgIGFycmF5CisgICAgICAgIGlu
ZGV4RnJvbUVsOiBmdW5jdGlvbiAoZWwpIHsKKyAgICAgICAgICAgIHZhciBpZCA9ICQoZWwpLmNs
b3Nlc3QoJ2xpJykuZGF0YSgnaWQnKTsKKyAgICAgICAgICAgIHZhciB0b2RvcyA9IHRoaXMudG9k
b3M7CisgICAgICAgICAgICB2YXIgaSA9IHRvZG9zLmxlbmd0aDsKKworICAgICAgICAgICAgd2hp
bGUgKGktLSkgeworICAgICAgICAgICAgICAgIGlmICh0b2Rvc1tpXS5pZCA9PT0gaWQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9LAorICAgICAgICBjcmVhdGU6IGZ1bmN0aW9uIChlKSB7CisgICAgICAg
ICAgICB2YXIgJGlucHV0ID0gJChlLnRhcmdldCk7CisgICAgICAgICAgICB2YXIgdmFsID0gJC50
cmltKCRpbnB1dC52YWwoKSk7CisKKyAgICAgICAgICAgIGlmIChlLndoaWNoICE9PSB0aGlzLkVO
VEVSX0tFWSB8fCAhdmFsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICB0aGlzLnRvZG9zLnB1c2goeworICAgICAgICAgICAgICAgIGlkOiB1
dGlsLnV1aWQoKSwKKyAgICAgICAgICAgICAgICB0aXRsZTogdmFsLAorICAgICAgICAgICAgICAg
IGNvbXBsZXRlZDogZmFsc2UKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAkaW5wdXQu
dmFsKCcnKTsKKworICAgICAgICAgICAgdGhpcy5yZW5kZXIoKTsKKyAgICAgICAgfSwKKyAgICAg
ICAgdG9nZ2xlOiBmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAgdmFyIGkgPSB0aGlzLmluZGV4
RnJvbUVsKGUudGFyZ2V0KTsKKyAgICAgICAgICAgIHRoaXMudG9kb3NbaV0uY29tcGxldGVkID0g
IXRoaXMudG9kb3NbaV0uY29tcGxldGVkOworICAgICAgICAgICAgdGhpcy5yZW5kZXIoKTsKKyAg
ICAgICAgfSwKKyAgICAgICAgZWRpdDogZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgIHZhciAk
aW5wdXQgPSAkKGUudGFyZ2V0KS5jbG9zZXN0KCdsaScpLmFkZENsYXNzKCdlZGl0aW5nJykuZmlu
ZCgnLmVkaXQnKTsKKyAgICAgICAgICAgICRpbnB1dC52YWwoJGlucHV0LnZhbCgpKS5mb2N1cygp
OworICAgICAgICB9LAorICAgICAgICBlZGl0S2V5dXA6IGZ1bmN0aW9uIChlKSB7CisgICAgICAg
ICAgICBpZiAoZS53aGljaCA9PT0gdGhpcy5FTlRFUl9LRVkpIHsKKyAgICAgICAgICAgICAgICBl
LnRhcmdldC5ibHVyKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChlLndoaWNo
ID09PSB0aGlzLkVTQ0FQRV9LRVkpIHsKKyAgICAgICAgICAgICAgICAkKGUudGFyZ2V0KS5kYXRh
KCdhYm9ydCcsIHRydWUpLmJsdXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAg
ICAgdXBkYXRlOiBmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAgdmFyIGVsID0gZS50YXJnZXQ7
CisgICAgICAgICAgICB2YXIgJGVsID0gJChlbCk7CisgICAgICAgICAgICB2YXIgdmFsID0gJGVs
LnZhbCgpLnRyaW0oKTsKKworICAgICAgICAgICAgaWYgKCF2YWwpIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLmRlc3Ryb3koZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoJGVsLmRhdGEoJ2Fib3J0JykpIHsKKyAgICAgICAgICAgICAg
ICAkZWwuZGF0YSgnYWJvcnQnLCBmYWxzZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIHRoaXMudG9kb3NbdGhpcy5pbmRleEZyb21FbChlbCldLnRpdGxlID0gdmFsOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0aGlzLnJlbmRlcigpOworICAgICAgICB9LAor
ICAgICAgICBkZXN0cm95OiBmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAgdGhpcy50b2Rvcy5z
cGxpY2UodGhpcy5pbmRleEZyb21FbChlLnRhcmdldCksIDEpOworICAgICAgICAgICAgdGhpcy5y
ZW5kZXIoKTsKKyAgICAgICAgfQogICAgIH07CiAKICAgICB3aW5kb3cuYXBwID0gQXBwOwotICAg
IFV0aWxzLnN0b3JlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gW107IH0KLQotICAgIEFwcC5pbml0
KCk7CisgICAgd2luZG93LmFwcC5pbml0KCk7CiB9KTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L2pxdWVyeS9ub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2hhbmRsZWJhcnMuanMgYi9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9qcXVlcnkvbm9kZV9tb2R1bGVzL2hhbmRsZWJhcnMvZGlzdC9oYW5kbGViYXJzLmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmMxMWVlMzNjYmUwNDRiYWJhYmJhMTg0YTY2ODMyNTg4MWEyYjQwNzUKLS0t
IC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9qcXVlcnkvbm9kZV9tb2R1bGVzL2hhbmRsZWJh
cnMvZGlzdC9oYW5kbGViYXJzLmpzCkBAIC0wLDAgKzEsNDcxMyBAQAorLyoqIQorCisgQGxpY2Vu
c2UKKyBoYW5kbGViYXJzIHY0LjAuNgorCitDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNiBieSBZZWh1
ZGEgS2F0egorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwg
dG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3Nv
Y2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAoraW4g
dGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0
YXRpb24gdGhlIHJpZ2h0cwordG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBk
aXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorY29waWVzIG9mIHRoZSBTb2Z0d2Fy
ZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCitmdXJuaXNo
ZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUg
YWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBi
ZSBpbmNsdWRlZCBpbgorYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUg
U29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdB
UlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5P
VCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRQorQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFO
WSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElP
TiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBP
UiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVB
TElOR1MgSU4KK1RIRSBTT0ZUV0FSRS4KKworKi8KKy8qKiEKKworIEBsaWNlbnNlCisgaGFuZGxl
YmFycyB2NC4wLjYKKworQ29weXJpZ2h0IChDKSAyMDExLTIwMTYgYnkgWWVodWRhIEthdHoKKwor
UGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJz
b24gb2J0YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1
bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKK2luIHRoZSBTb2Z0d2Fy
ZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSBy
aWdodHMKK3RvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwg
c3VibGljZW5zZSwgYW5kL29yIHNlbGwKK2NvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBw
ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworZnVybmlzaGVkIHRvIGRvIHNv
LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHly
aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQg
aW4KK2FsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgor
CitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBB
TlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBU
TyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUK
K0FVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERB
TUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJB
Q1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4gQ09OTkVD
VElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCitU
SEUgU09GVFdBUkUuCisKKyovCisvKiohCisKKyBAbGljZW5zZQorIGhhbmRsZWJhcnMgdjQuMC42
CisKK0NvcHlyaWdodCAoQykgMjAxMS0yMDE2IGJ5IFllaHVkYSBLYXR6CisKK1Blcm1pc3Npb24g
aXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmlu
ZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBm
aWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCBy
ZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCit0byB1
c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2Us
IGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNv
bnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0
byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl
IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCithbGwgY29w
aWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRX
QVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVY
UFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitBVVRIT1JTIE9S
IENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9U
SEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9S
IE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBU
SEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorVEhFIFNPRlRXQVJF
LgorCisqLworKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3Qs
IGZhY3RvcnkpIHsKKyAgICBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9m
IG1vZHVsZSA9PT0gJ29iamVjdCcpCisgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgp
OworICAgIGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1k
KQorICAgICAgICBkZWZpbmUoW10sIGZhY3RvcnkpOworICAgIGVsc2UgaWYodHlwZW9mIGV4cG9y
dHMgPT09ICdvYmplY3QnKQorICAgICAgICBleHBvcnRzWyJIYW5kbGViYXJzIl0gPSBmYWN0b3J5
KCk7CisgICAgZWxzZQorICAgICAgICByb290WyJIYW5kbGViYXJzIl0gPSBmYWN0b3J5KCk7Cit9
KSh0aGlzLCBmdW5jdGlvbigpIHsKK3JldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykg
eyAvLyB3ZWJwYWNrQm9vdHN0cmFwCisvKioqKioqLyAgICAvLyBUaGUgbW9kdWxlIGNhY2hlCisv
KioqKioqLyAgICB2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9OworCisvKioqKioqLyAgICAvLyBU
aGUgcmVxdWlyZSBmdW5jdGlvbgorLyoqKioqKi8gICAgZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVp
cmVfXyhtb2R1bGVJZCkgeworCisvKioqKioqLyAgICAgICAgLy8gQ2hlY2sgaWYgbW9kdWxlIGlz
IGluIGNhY2hlCisvKioqKioqLyAgICAgICAgaWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0p
CisvKioqKioqLyAgICAgICAgICAgIHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5l
eHBvcnRzOworCisvKioqKioqLyAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1
dCBpdCBpbnRvIHRoZSBjYWNoZSkKKy8qKioqKiovICAgICAgICB2YXIgbW9kdWxlID0gaW5zdGFs
bGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7CisvKioqKioqLyAgICAgICAgICAgIGV4cG9ydHM6IHt9
LAorLyoqKioqKi8gICAgICAgICAgICBpZDogbW9kdWxlSWQsCisvKioqKioqLyAgICAgICAgICAg
IGxvYWRlZDogZmFsc2UKKy8qKioqKiovICAgICAgICB9OworCisvKioqKioqLyAgICAgICAgLy8g
RXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uCisvKioqKioqLyAgICAgICAgbW9kdWxlc1ttb2R1
bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJw
YWNrX3JlcXVpcmVfXyk7CisKKy8qKioqKiovICAgICAgICAvLyBGbGFnIHRoZSBtb2R1bGUgYXMg
bG9hZGVkCisvKioqKioqLyAgICAgICAgbW9kdWxlLmxvYWRlZCA9IHRydWU7CisKKy8qKioqKiov
ICAgICAgICAvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZQorLyoqKioqKi8gICAg
ICAgIHJldHVybiBtb2R1bGUuZXhwb3J0czsKKy8qKioqKiovICAgIH0KKworCisvKioqKioqLyAg
ICAvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKQorLyoq
KioqKi8gICAgX193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlczsKKworLyoqKioqKi8gICAg
Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGUKKy8qKioqKiovICAgIF9fd2VicGFja19yZXF1aXJl
X18uYyA9IGluc3RhbGxlZE1vZHVsZXM7CisKKy8qKioqKiovICAgIC8vIF9fd2VicGFja19wdWJs
aWNfcGF0aF9fCisvKioqKioqLyAgICBfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSAiIjsKKworLyoq
KioqKi8gICAgLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzCisvKioqKioq
LyAgICByZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXygwKTsKKy8qKioqKiovIH0pCisvKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLworLyoqKioqKi8gKFsKKy8qIDAgKi8KKy8qKiovIGZ1bmN0aW9uKG1vZHVsZSwg
ZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisgICAgJ3VzZSBzdHJpY3QnOworCisg
ICAgdmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpWydk
ZWZhdWx0J107CisKKyAgICBleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlOworCisgICAgdmFyIF9o
YW5kbGViYXJzUnVudGltZSA9IF9fd2VicGFja19yZXF1aXJlX18oMik7CisKKyAgICB2YXIgX2hh
bmRsZWJhcnNSdW50aW1lMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2hhbmRsZWJhcnNSdW50
aW1lKTsKKworICAgIC8vIENvbXBpbGVyIGltcG9ydHMKKworICAgIHZhciBfaGFuZGxlYmFyc0Nv
bXBpbGVyQXN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNCk7CisKKyAgICB2YXIgX2hhbmRsZWJh
cnNDb21waWxlckFzdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9oYW5kbGViYXJzQ29tcGls
ZXJBc3QpOworCisgICAgdmFyIF9oYW5kbGViYXJzQ29tcGlsZXJCYXNlID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygyNSk7CisKKyAgICB2YXIgX2hhbmRsZWJhcnNDb21waWxlckNvbXBpbGVyID0gX193
ZWJwYWNrX3JlcXVpcmVfXygzMCk7CisKKyAgICB2YXIgX2hhbmRsZWJhcnNDb21waWxlckphdmFz
Y3JpcHRDb21waWxlciA9IF9fd2VicGFja19yZXF1aXJlX18oMzEpOworCisgICAgdmFyIF9oYW5k
bGViYXJzQ29tcGlsZXJKYXZhc2NyaXB0Q29tcGlsZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVs
dChfaGFuZGxlYmFyc0NvbXBpbGVySmF2YXNjcmlwdENvbXBpbGVyKTsKKworICAgIHZhciBfaGFu
ZGxlYmFyc0NvbXBpbGVyVmlzaXRvciA9IF9fd2VicGFja19yZXF1aXJlX18oMjgpOworCisgICAg
dmFyIF9oYW5kbGViYXJzQ29tcGlsZXJWaXNpdG9yMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQo
X2hhbmRsZWJhcnNDb21waWxlclZpc2l0b3IpOworCisgICAgdmFyIF9oYW5kbGViYXJzTm9Db25m
bGljdCA9IF9fd2VicGFja19yZXF1aXJlX18oMjMpOworCisgICAgdmFyIF9oYW5kbGViYXJzTm9D
b25mbGljdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9oYW5kbGViYXJzTm9Db25mbGljdCk7
CisKKyAgICB2YXIgX2NyZWF0ZSA9IF9oYW5kbGViYXJzUnVudGltZTJbJ2RlZmF1bHQnXS5jcmVh
dGU7CisgICAgZnVuY3Rpb24gY3JlYXRlKCkgeworICAgICAgdmFyIGhiID0gX2NyZWF0ZSgpOwor
CisgICAgICBoYi5jb21waWxlID0gZnVuY3Rpb24gKGlucHV0LCBvcHRpb25zKSB7CisgICAgICAg
IHJldHVybiBfaGFuZGxlYmFyc0NvbXBpbGVyQ29tcGlsZXIuY29tcGlsZShpbnB1dCwgb3B0aW9u
cywgaGIpOworICAgICAgfTsKKyAgICAgIGhiLnByZWNvbXBpbGUgPSBmdW5jdGlvbiAoaW5wdXQs
IG9wdGlvbnMpIHsKKyAgICAgICAgcmV0dXJuIF9oYW5kbGViYXJzQ29tcGlsZXJDb21waWxlci5w
cmVjb21waWxlKGlucHV0LCBvcHRpb25zLCBoYik7CisgICAgICB9OworCisgICAgICBoYi5BU1Qg
PSBfaGFuZGxlYmFyc0NvbXBpbGVyQXN0MlsnZGVmYXVsdCddOworICAgICAgaGIuQ29tcGlsZXIg
PSBfaGFuZGxlYmFyc0NvbXBpbGVyQ29tcGlsZXIuQ29tcGlsZXI7CisgICAgICBoYi5KYXZhU2Ny
aXB0Q29tcGlsZXIgPSBfaGFuZGxlYmFyc0NvbXBpbGVySmF2YXNjcmlwdENvbXBpbGVyMlsnZGVm
YXVsdCddOworICAgICAgaGIuUGFyc2VyID0gX2hhbmRsZWJhcnNDb21waWxlckJhc2UucGFyc2Vy
OworICAgICAgaGIucGFyc2UgPSBfaGFuZGxlYmFyc0NvbXBpbGVyQmFzZS5wYXJzZTsKKworICAg
ICAgcmV0dXJuIGhiOworICAgIH0KKworICAgIHZhciBpbnN0ID0gY3JlYXRlKCk7CisgICAgaW5z
dC5jcmVhdGUgPSBjcmVhdGU7CisKKyAgICBfaGFuZGxlYmFyc05vQ29uZmxpY3QyWydkZWZhdWx0
J10oaW5zdCk7CisKKyAgICBpbnN0LlZpc2l0b3IgPSBfaGFuZGxlYmFyc0NvbXBpbGVyVmlzaXRv
cjJbJ2RlZmF1bHQnXTsKKworICAgIGluc3RbJ2RlZmF1bHQnXSA9IGluc3Q7CisKKyAgICBleHBv
cnRzWydkZWZhdWx0J10gPSBpbnN0OworICAgIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVm
YXVsdCddOworCisvKioqLyB9LAorLyogMSAqLworLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBv
cnRzKSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBleHBvcnRzWyJkZWZhdWx0Il0gPSBm
dW5jdGlvbiAob2JqKSB7CisgICAgICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2Jq
IDogeworICAgICAgICAiZGVmYXVsdCI6IG9iagorICAgICAgfTsKKyAgICB9OworCisgICAgZXhw
b3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTsKKworLyoqKi8gfSwKKy8qIDIgKi8KKy8qKiovIGZ1bmN0
aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisgICAgJ3VzZSBz
dHJpY3QnOworCisgICAgdmFyIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygzKVsnZGVmYXVsdCddOworCisgICAgdmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQg
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpWydkZWZhdWx0J107CisKKyAgICBleHBvcnRzLl9fZXNN
b2R1bGUgPSB0cnVlOworCisgICAgdmFyIF9oYW5kbGViYXJzQmFzZSA9IF9fd2VicGFja19yZXF1
aXJlX18oNCk7CisKKyAgICB2YXIgYmFzZSA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKF9oYW5k
bGViYXJzQmFzZSk7CisKKyAgICAvLyBFYWNoIG9mIHRoZXNlIGF1Z21lbnQgdGhlIEhhbmRsZWJh
cnMgb2JqZWN0LiBObyBuZWVkIHRvIHNldHVwIGhlcmUuCisgICAgLy8gKFRoaXMgaXMgZG9uZSB0
byBlYXNpbHkgc2hhcmUgY29kZSBiZXR3ZWVuIGNvbW1vbmpzIGFuZCBicm93c2UgZW52cykKKwor
ICAgIHZhciBfaGFuZGxlYmFyc1NhZmVTdHJpbmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKTsK
KworICAgIHZhciBfaGFuZGxlYmFyc1NhZmVTdHJpbmcyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVs
dChfaGFuZGxlYmFyc1NhZmVTdHJpbmcpOworCisgICAgdmFyIF9oYW5kbGViYXJzRXhjZXB0aW9u
ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTsKKworICAgIHZhciBfaGFuZGxlYmFyc0V4Y2VwdGlv
bjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9oYW5kbGViYXJzRXhjZXB0aW9uKTsKKworICAg
IHZhciBfaGFuZGxlYmFyc1V0aWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTsKKworICAgIHZh
ciBVdGlscyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKF9oYW5kbGViYXJzVXRpbHMpOworCisg
ICAgdmFyIF9oYW5kbGViYXJzUnVudGltZSA9IF9fd2VicGFja19yZXF1aXJlX18oMjIpOworCisg
ICAgdmFyIHJ1bnRpbWUgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChfaGFuZGxlYmFyc1J1bnRp
bWUpOworCisgICAgdmFyIF9oYW5kbGViYXJzTm9Db25mbGljdCA9IF9fd2VicGFja19yZXF1aXJl
X18oMjMpOworCisgICAgdmFyIF9oYW5kbGViYXJzTm9Db25mbGljdDIgPSBfaW50ZXJvcFJlcXVp
cmVEZWZhdWx0KF9oYW5kbGViYXJzTm9Db25mbGljdCk7CisKKyAgICAvLyBGb3IgY29tcGF0aWJp
bGl0eSBhbmQgdXNhZ2Ugb3V0c2lkZSBvZiBtb2R1bGUgc3lzdGVtcywgbWFrZSB0aGUgSGFuZGxl
YmFycyBvYmplY3QgYSBuYW1lc3BhY2UKKyAgICBmdW5jdGlvbiBjcmVhdGUoKSB7CisgICAgICB2
YXIgaGIgPSBuZXcgYmFzZS5IYW5kbGViYXJzRW52aXJvbm1lbnQoKTsKKworICAgICAgVXRpbHMu
ZXh0ZW5kKGhiLCBiYXNlKTsKKyAgICAgIGhiLlNhZmVTdHJpbmcgPSBfaGFuZGxlYmFyc1NhZmVT
dHJpbmcyWydkZWZhdWx0J107CisgICAgICBoYi5FeGNlcHRpb24gPSBfaGFuZGxlYmFyc0V4Y2Vw
dGlvbjJbJ2RlZmF1bHQnXTsKKyAgICAgIGhiLlV0aWxzID0gVXRpbHM7CisgICAgICBoYi5lc2Nh
cGVFeHByZXNzaW9uID0gVXRpbHMuZXNjYXBlRXhwcmVzc2lvbjsKKworICAgICAgaGIuVk0gPSBy
dW50aW1lOworICAgICAgaGIudGVtcGxhdGUgPSBmdW5jdGlvbiAoc3BlYykgeworICAgICAgICBy
ZXR1cm4gcnVudGltZS50ZW1wbGF0ZShzcGVjLCBoYik7CisgICAgICB9OworCisgICAgICByZXR1
cm4gaGI7CisgICAgfQorCisgICAgdmFyIGluc3QgPSBjcmVhdGUoKTsKKyAgICBpbnN0LmNyZWF0
ZSA9IGNyZWF0ZTsKKworICAgIF9oYW5kbGViYXJzTm9Db25mbGljdDJbJ2RlZmF1bHQnXShpbnN0
KTsKKworICAgIGluc3RbJ2RlZmF1bHQnXSA9IGluc3Q7CisKKyAgICBleHBvcnRzWydkZWZhdWx0
J10gPSBpbnN0OworICAgIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddOworCisv
KioqLyB9LAorLyogMyAqLworLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7CisKKyAg
ICAidXNlIHN0cmljdCI7CisKKyAgICBleHBvcnRzWyJkZWZhdWx0Il0gPSBmdW5jdGlvbiAob2Jq
KSB7CisgICAgICBpZiAob2JqICYmIG9iai5fX2VzTW9kdWxlKSB7CisgICAgICAgIHJldHVybiBv
Ymo7CisgICAgICB9IGVsc2UgeworICAgICAgICB2YXIgbmV3T2JqID0ge307CisKKyAgICAgICAg
aWYgKG9iaiAhPSBudWxsKSB7CisgICAgICAgICAgZm9yICh2YXIga2V5IGluIG9iaikgeworICAg
ICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtl
eSkpIG5ld09ialtrZXldID0gb2JqW2tleV07CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgbmV3T2JqWyJkZWZhdWx0Il0gPSBvYmo7CisgICAgICAgIHJldHVybiBuZXdPYmo7Cisg
ICAgICB9CisgICAgfTsKKworICAgIGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7CisKKy8qKiov
IH0sCisvKiA0ICovCisvKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19y
ZXF1aXJlX18pIHsKKworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIHZhciBfaW50ZXJvcFJlcXVp
cmVEZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKVsnZGVmYXVsdCddOworCisgICAgZXhw
b3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTsKKyAgICBleHBvcnRzLkhhbmRsZWJhcnNFbnZpcm9ubWVu
dCA9IEhhbmRsZWJhcnNFbnZpcm9ubWVudDsKKworICAgIHZhciBfdXRpbHMgPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKDUpOworCisgICAgdmFyIF9leGNlcHRpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KDYpOworCisgICAgdmFyIF9leGNlcHRpb24yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZXhj
ZXB0aW9uKTsKKworICAgIHZhciBfaGVscGVycyA9IF9fd2VicGFja19yZXF1aXJlX18oMTApOwor
CisgICAgdmFyIF9kZWNvcmF0b3JzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOCk7CisKKyAgICB2
YXIgX2xvZ2dlciA9IF9fd2VicGFja19yZXF1aXJlX18oMjApOworCisgICAgdmFyIF9sb2dnZXIy
ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbG9nZ2VyKTsKKworICAgIHZhciBWRVJTSU9OID0g
JzQuMC41JzsKKyAgICBleHBvcnRzLlZFUlNJT04gPSBWRVJTSU9OOworICAgIHZhciBDT01QSUxF
Ul9SRVZJU0lPTiA9IDc7CisKKyAgICBleHBvcnRzLkNPTVBJTEVSX1JFVklTSU9OID0gQ09NUElM
RVJfUkVWSVNJT047CisgICAgdmFyIFJFVklTSU9OX0NIQU5HRVMgPSB7CisgICAgICAxOiAnPD0g
MS4wLnJjLjInLCAvLyAxLjAucmMuMiBpcyBhY3R1YWxseSByZXYyIGJ1dCBkb2Vzbid0IHJlcG9y
dCBpdAorICAgICAgMjogJz09IDEuMC4wLXJjLjMnLAorICAgICAgMzogJz09IDEuMC4wLXJjLjQn
LAorICAgICAgNDogJz09IDEueC54JywKKyAgICAgIDU6ICc9PSAyLjAuMC1hbHBoYS54JywKKyAg
ICAgIDY6ICc+PSAyLjAuMC1iZXRhLjEnLAorICAgICAgNzogJz49IDQuMC4wJworICAgIH07CisK
KyAgICBleHBvcnRzLlJFVklTSU9OX0NIQU5HRVMgPSBSRVZJU0lPTl9DSEFOR0VTOworICAgIHZh
ciBvYmplY3RUeXBlID0gJ1tvYmplY3QgT2JqZWN0XSc7CisKKyAgICBmdW5jdGlvbiBIYW5kbGVi
YXJzRW52aXJvbm1lbnQoaGVscGVycywgcGFydGlhbHMsIGRlY29yYXRvcnMpIHsKKyAgICAgIHRo
aXMuaGVscGVycyA9IGhlbHBlcnMgfHwge307CisgICAgICB0aGlzLnBhcnRpYWxzID0gcGFydGlh
bHMgfHwge307CisgICAgICB0aGlzLmRlY29yYXRvcnMgPSBkZWNvcmF0b3JzIHx8IHt9OworCisg
ICAgICBfaGVscGVycy5yZWdpc3RlckRlZmF1bHRIZWxwZXJzKHRoaXMpOworICAgICAgX2RlY29y
YXRvcnMucmVnaXN0ZXJEZWZhdWx0RGVjb3JhdG9ycyh0aGlzKTsKKyAgICB9CisKKyAgICBIYW5k
bGViYXJzRW52aXJvbm1lbnQucHJvdG90eXBlID0geworICAgICAgY29uc3RydWN0b3I6IEhhbmRs
ZWJhcnNFbnZpcm9ubWVudCwKKworICAgICAgbG9nZ2VyOiBfbG9nZ2VyMlsnZGVmYXVsdCddLAor
ICAgICAgbG9nOiBfbG9nZ2VyMlsnZGVmYXVsdCddLmxvZywKKworICAgICAgcmVnaXN0ZXJIZWxw
ZXI6IGZ1bmN0aW9uIHJlZ2lzdGVySGVscGVyKG5hbWUsIGZuKSB7CisgICAgICAgIGlmIChfdXRp
bHMudG9TdHJpbmcuY2FsbChuYW1lKSA9PT0gb2JqZWN0VHlwZSkgeworICAgICAgICAgIGlmIChm
bikgeworICAgICAgICAgICAgdGhyb3cgbmV3IF9leGNlcHRpb24yWydkZWZhdWx0J10oJ0FyZyBu
b3Qgc3VwcG9ydGVkIHdpdGggbXVsdGlwbGUgaGVscGVycycpOworICAgICAgICAgIH0KKyAgICAg
ICAgICBfdXRpbHMuZXh0ZW5kKHRoaXMuaGVscGVycywgbmFtZSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgdGhpcy5oZWxwZXJzW25hbWVdID0gZm47CisgICAgICAgIH0KKyAgICAgIH0s
CisgICAgICB1bnJlZ2lzdGVySGVscGVyOiBmdW5jdGlvbiB1bnJlZ2lzdGVySGVscGVyKG5hbWUp
IHsKKyAgICAgICAgZGVsZXRlIHRoaXMuaGVscGVyc1tuYW1lXTsKKyAgICAgIH0sCisKKyAgICAg
IHJlZ2lzdGVyUGFydGlhbDogZnVuY3Rpb24gcmVnaXN0ZXJQYXJ0aWFsKG5hbWUsIHBhcnRpYWwp
IHsKKyAgICAgICAgaWYgKF91dGlscy50b1N0cmluZy5jYWxsKG5hbWUpID09PSBvYmplY3RUeXBl
KSB7CisgICAgICAgICAgX3V0aWxzLmV4dGVuZCh0aGlzLnBhcnRpYWxzLCBuYW1lKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICBpZiAodHlwZW9mIHBhcnRpYWwgPT09ICd1bmRlZmluZWQn
KSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgX2V4Y2VwdGlvbjJbJ2RlZmF1bHQnXSgnQXR0ZW1w
dGluZyB0byByZWdpc3RlciBhIHBhcnRpYWwgY2FsbGVkICInICsgbmFtZSArICciIGFzIHVuZGVm
aW5lZCcpOworICAgICAgICAgIH0KKyAgICAgICAgICB0aGlzLnBhcnRpYWxzW25hbWVdID0gcGFy
dGlhbDsKKyAgICAgICAgfQorICAgICAgfSwKKyAgICAgIHVucmVnaXN0ZXJQYXJ0aWFsOiBmdW5j
dGlvbiB1bnJlZ2lzdGVyUGFydGlhbChuYW1lKSB7CisgICAgICAgIGRlbGV0ZSB0aGlzLnBhcnRp
YWxzW25hbWVdOworICAgICAgfSwKKworICAgICAgcmVnaXN0ZXJEZWNvcmF0b3I6IGZ1bmN0aW9u
IHJlZ2lzdGVyRGVjb3JhdG9yKG5hbWUsIGZuKSB7CisgICAgICAgIGlmIChfdXRpbHMudG9TdHJp
bmcuY2FsbChuYW1lKSA9PT0gb2JqZWN0VHlwZSkgeworICAgICAgICAgIGlmIChmbikgeworICAg
ICAgICAgICAgdGhyb3cgbmV3IF9leGNlcHRpb24yWydkZWZhdWx0J10oJ0FyZyBub3Qgc3VwcG9y
dGVkIHdpdGggbXVsdGlwbGUgZGVjb3JhdG9ycycpOworICAgICAgICAgIH0KKyAgICAgICAgICBf
dXRpbHMuZXh0ZW5kKHRoaXMuZGVjb3JhdG9ycywgbmFtZSk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgdGhpcy5kZWNvcmF0b3JzW25hbWVdID0gZm47CisgICAgICAgIH0KKyAgICAgIH0s
CisgICAgICB1bnJlZ2lzdGVyRGVjb3JhdG9yOiBmdW5jdGlvbiB1bnJlZ2lzdGVyRGVjb3JhdG9y
KG5hbWUpIHsKKyAgICAgICAgZGVsZXRlIHRoaXMuZGVjb3JhdG9yc1tuYW1lXTsKKyAgICAgIH0K
KyAgICB9OworCisgICAgdmFyIGxvZyA9IF9sb2dnZXIyWydkZWZhdWx0J10ubG9nOworCisgICAg
ZXhwb3J0cy5sb2cgPSBsb2c7CisgICAgZXhwb3J0cy5jcmVhdGVGcmFtZSA9IF91dGlscy5jcmVh
dGVGcmFtZTsKKyAgICBleHBvcnRzLmxvZ2dlciA9IF9sb2dnZXIyWydkZWZhdWx0J107CisKKy8q
KiovIH0sCisvKiA1ICovCisvKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHsKKworICAg
ICd1c2Ugc3RyaWN0JzsKKworICAgIGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7CisgICAgZXhw
b3J0cy5leHRlbmQgPSBleHRlbmQ7CisgICAgZXhwb3J0cy5pbmRleE9mID0gaW5kZXhPZjsKKyAg
ICBleHBvcnRzLmVzY2FwZUV4cHJlc3Npb24gPSBlc2NhcGVFeHByZXNzaW9uOworICAgIGV4cG9y
dHMuaXNFbXB0eSA9IGlzRW1wdHk7CisgICAgZXhwb3J0cy5jcmVhdGVGcmFtZSA9IGNyZWF0ZUZy
YW1lOworICAgIGV4cG9ydHMuYmxvY2tQYXJhbXMgPSBibG9ja1BhcmFtczsKKyAgICBleHBvcnRz
LmFwcGVuZENvbnRleHRQYXRoID0gYXBwZW5kQ29udGV4dFBhdGg7CisgICAgdmFyIGVzY2FwZSA9
IHsKKyAgICAgICcmJzogJyZhbXA7JywKKyAgICAgICc8JzogJyZsdDsnLAorICAgICAgJz4nOiAn
Jmd0OycsCisgICAgICAnIic6ICcmcXVvdDsnLAorICAgICAgIiciOiAnJiN4Mjc7JywKKyAgICAg
ICdgJzogJyYjeDYwOycsCisgICAgICAnPSc6ICcmI3gzRDsnCisgICAgfTsKKworICAgIHZhciBi
YWRDaGFycyA9IC9bJjw+IidgPV0vZywKKyAgICAgICAgcG9zc2libGUgPSAvWyY8PiInYD1dLzsK
KworICAgIGZ1bmN0aW9uIGVzY2FwZUNoYXIoY2hyKSB7CisgICAgICByZXR1cm4gZXNjYXBlW2No
cl07CisgICAgfQorCisgICAgZnVuY3Rpb24gZXh0ZW5kKG9iaiAvKiAsIC4uLnNvdXJjZSAqLykg
eworICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKKyAg
ICAgICAgZm9yICh2YXIga2V5IGluIGFyZ3VtZW50c1tpXSkgeworICAgICAgICAgIGlmIChPYmpl
Y3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYXJndW1lbnRzW2ldLCBrZXkpKSB7Cisg
ICAgICAgICAgICBvYmpba2V5XSA9IGFyZ3VtZW50c1tpXVtrZXldOworICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgfQorCisgICAgICByZXR1cm4gb2JqOworICAgIH0KKworICAgIHZhciB0
b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7CisKKyAgICBleHBvcnRzLnRvU3Ry
aW5nID0gdG9TdHJpbmc7CisgICAgLy8gU291cmNlZCBmcm9tIGxvZGFzaAorICAgIC8vIGh0dHBz
Oi8vZ2l0aHViLmNvbS9iZXN0aWVqcy9sb2Rhc2gvYmxvYi9tYXN0ZXIvTElDRU5TRS50eHQKKyAg
ICAvKiBlc2xpbnQtZGlzYWJsZSBmdW5jLXN0eWxlICovCisgICAgdmFyIGlzRnVuY3Rpb24gPSBm
dW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7CisgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09
PSAnZnVuY3Rpb24nOworICAgIH07CisgICAgLy8gZmFsbGJhY2sgZm9yIG9sZGVyIHZlcnNpb25z
IG9mIENocm9tZSBhbmQgU2FmYXJpCisgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8KKyAg
ICBpZiAoaXNGdW5jdGlvbigveC8pKSB7CisgICAgICBleHBvcnRzLmlzRnVuY3Rpb24gPSBpc0Z1
bmN0aW9uID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUg
PT09ICdmdW5jdGlvbicgJiYgdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEZ1bmN0
aW9uXSc7CisgICAgICB9OworICAgIH0KKyAgICBleHBvcnRzLmlzRnVuY3Rpb24gPSBpc0Z1bmN0
aW9uOworCisgICAgLyogZXNsaW50LWVuYWJsZSBmdW5jLXN0eWxlICovCisKKyAgICAvKiBpc3Rh
bmJ1bCBpZ25vcmUgbmV4dCAqLworICAgIHZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBm
dW5jdGlvbiAodmFsdWUpIHsKKyAgICAgIHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09
ICdvYmplY3QnID8gdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEFycmF5XScgOiBm
YWxzZTsKKyAgICB9OworCisgICAgZXhwb3J0cy5pc0FycmF5ID0gaXNBcnJheTsKKyAgICAvLyBP
bGRlciBJRSB2ZXJzaW9ucyBkbyBub3QgZGlyZWN0bHkgc3VwcG9ydCBpbmRleE9mIHNvIHdlIG11
c3QgaW1wbGVtZW50IG91ciBvd24sIHNhZGx5LgorCisgICAgZnVuY3Rpb24gaW5kZXhPZihhcnJh
eSwgdmFsdWUpIHsKKyAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhcnJheS5sZW5ndGg7IGkg
PCBsZW47IGkrKykgeworICAgICAgICBpZiAoYXJyYXlbaV0gPT09IHZhbHVlKSB7CisgICAgICAg
ICAgcmV0dXJuIGk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHJldHVybiAtMTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBlc2NhcGVFeHByZXNzaW9uKHN0cmluZykgeworICAgICAgaWYgKHR5
cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7CisgICAgICAgIC8vIGRvbid0IGVzY2FwZSBTYWZl
U3RyaW5ncywgc2luY2UgdGhleSdyZSBhbHJlYWR5IHNhZmUKKyAgICAgICAgaWYgKHN0cmluZyAm
JiBzdHJpbmcudG9IVE1MKSB7CisgICAgICAgICAgcmV0dXJuIHN0cmluZy50b0hUTUwoKTsKKyAg
ICAgICAgfSBlbHNlIGlmIChzdHJpbmcgPT0gbnVsbCkgeworICAgICAgICAgIHJldHVybiAnJzsK
KyAgICAgICAgfSBlbHNlIGlmICghc3RyaW5nKSB7CisgICAgICAgICAgcmV0dXJuIHN0cmluZyAr
ICcnOworICAgICAgICB9CisKKyAgICAgICAgLy8gRm9yY2UgYSBzdHJpbmcgY29udmVyc2lvbiBh
cyB0aGlzIHdpbGwgYmUgZG9uZSBieSB0aGUgYXBwZW5kIHJlZ2FyZGxlc3MgYW5kCisgICAgICAg
IC8vIHRoZSByZWdleCB0ZXN0IHdpbGwgZG8gdGhpcyB0cmFuc3BhcmVudGx5IGJlaGluZCB0aGUg
c2NlbmVzLCBjYXVzaW5nIGlzc3VlcyBpZgorICAgICAgICAvLyBhbiBvYmplY3QncyB0byBzdHJp
bmcgaGFzIGVzY2FwZWQgY2hhcmFjdGVycyBpbiBpdC4KKyAgICAgICAgc3RyaW5nID0gJycgKyBz
dHJpbmc7CisgICAgICB9CisKKyAgICAgIGlmICghcG9zc2libGUudGVzdChzdHJpbmcpKSB7Cisg
ICAgICAgIHJldHVybiBzdHJpbmc7CisgICAgICB9CisgICAgICByZXR1cm4gc3RyaW5nLnJlcGxh
Y2UoYmFkQ2hhcnMsIGVzY2FwZUNoYXIpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGlzRW1wdHko
dmFsdWUpIHsKKyAgICAgIGlmICghdmFsdWUgJiYgdmFsdWUgIT09IDApIHsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0
aCA9PT0gMCkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBjcmVhdGVGcmFt
ZShvYmplY3QpIHsKKyAgICAgIHZhciBmcmFtZSA9IGV4dGVuZCh7fSwgb2JqZWN0KTsKKyAgICAg
IGZyYW1lLl9wYXJlbnQgPSBvYmplY3Q7CisgICAgICByZXR1cm4gZnJhbWU7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gYmxvY2tQYXJhbXMocGFyYW1zLCBpZHMpIHsKKyAgICAgIHBhcmFtcy5wYXRo
ID0gaWRzOworICAgICAgcmV0dXJuIHBhcmFtczsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBhcHBl
bmRDb250ZXh0UGF0aChjb250ZXh0UGF0aCwgaWQpIHsKKyAgICAgIHJldHVybiAoY29udGV4dFBh
dGggPyBjb250ZXh0UGF0aCArICcuJyA6ICcnKSArIGlkOworICAgIH0KKworLyoqKi8gfSwKKy8q
IDYgKi8KKy8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVf
XykgeworCisgICAgJ3VzZSBzdHJpY3QnOworCisgICAgdmFyIF9PYmplY3QkZGVmaW5lUHJvcGVy
dHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpWydkZWZhdWx0J107CisKKyAgICBleHBvcnRzLl9f
ZXNNb2R1bGUgPSB0cnVlOworCisgICAgdmFyIGVycm9yUHJvcHMgPSBbJ2Rlc2NyaXB0aW9uJywg
J2ZpbGVOYW1lJywgJ2xpbmVOdW1iZXInLCAnbWVzc2FnZScsICduYW1lJywgJ251bWJlcicsICdz
dGFjayddOworCisgICAgZnVuY3Rpb24gRXhjZXB0aW9uKG1lc3NhZ2UsIG5vZGUpIHsKKyAgICAg
IHZhciBsb2MgPSBub2RlICYmIG5vZGUubG9jLAorICAgICAgICAgIGxpbmUgPSB1bmRlZmluZWQs
CisgICAgICAgICAgY29sdW1uID0gdW5kZWZpbmVkOworICAgICAgaWYgKGxvYykgeworICAgICAg
ICBsaW5lID0gbG9jLnN0YXJ0LmxpbmU7CisgICAgICAgIGNvbHVtbiA9IGxvYy5zdGFydC5jb2x1
bW47CisKKyAgICAgICAgbWVzc2FnZSArPSAnIC0gJyArIGxpbmUgKyAnOicgKyBjb2x1bW47Cisg
ICAgICB9CisKKyAgICAgIHZhciB0bXAgPSBFcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3IuY2Fs
bCh0aGlzLCBtZXNzYWdlKTsKKworICAgICAgLy8gVW5mb3J0dW5hdGVseSBlcnJvcnMgYXJlIG5v
dCBlbnVtZXJhYmxlIGluIENocm9tZSAoYXQgbGVhc3QpLCBzbyBgZm9yIHByb3AgaW4gdG1wYCBk
b2Vzbid0IHdvcmsuCisgICAgICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBlcnJvclByb3BzLmxl
bmd0aDsgaWR4KyspIHsKKyAgICAgICAgdGhpc1tlcnJvclByb3BzW2lkeF1dID0gdG1wW2Vycm9y
UHJvcHNbaWR4XV07CisgICAgICB9CisKKyAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICov
CisgICAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHsKKyAgICAgICAgRXJyb3IuY2Fw
dHVyZVN0YWNrVHJhY2UodGhpcywgRXhjZXB0aW9uKTsKKyAgICAgIH0KKworICAgICAgdHJ5IHsK
KyAgICAgICAgaWYgKGxvYykgeworICAgICAgICAgIHRoaXMubGluZU51bWJlciA9IGxpbmU7CisK
KyAgICAgICAgICAvLyBXb3JrIGFyb3VuZCBpc3N1ZSB1bmRlciBzYWZhcmkgd2hlcmUgd2UgY2Fu
J3QgZGlyZWN0bHkgc2V0IHRoZSBjb2x1bW4gdmFsdWUKKyAgICAgICAgICAvKiBpc3RhbmJ1bCBp
Z25vcmUgbmV4dCAqLworICAgICAgICAgIGlmIChfT2JqZWN0JGRlZmluZVByb3BlcnR5KSB7Cisg
ICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2NvbHVtbicsIHsgdmFsdWU6
IGNvbHVtbiB9KTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5jb2x1bW4g
PSBjb2x1bW47CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9IGNhdGNoIChub3ApIHsK
KyAgICAgICAgLyogSWdub3JlIGlmIHRoZSBicm93c2VyIGlzIHZlcnkgcGFydGljdWxhciAqLwor
ICAgICAgfQorICAgIH0KKworICAgIEV4Y2VwdGlvbi5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTsK
KworICAgIGV4cG9ydHNbJ2RlZmF1bHQnXSA9IEV4Y2VwdGlvbjsKKyAgICBtb2R1bGUuZXhwb3J0
cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTsKKworLyoqKi8gfSwKKy8qIDcgKi8KKy8qKiovIGZ1bmN0
aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisgICAgbW9kdWxl
LmV4cG9ydHMgPSB7ICJkZWZhdWx0IjogX193ZWJwYWNrX3JlcXVpcmVfXyg4KSwgX19lc01vZHVs
ZTogdHJ1ZSB9OworCisvKioqLyB9LAorLyogOCAqLworLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBl
eHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyAgICB2YXIgJCA9IF9fd2VicGFja19y
ZXF1aXJlX18oOSk7CisgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0
eShpdCwga2V5LCBkZXNjKXsKKyAgICAgIHJldHVybiAkLnNldERlc2MoaXQsIGtleSwgZGVzYyk7
CisgICAgfTsKKworLyoqKi8gfSwKKy8qIDkgKi8KKy8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhw
b3J0cykgeworCisgICAgdmFyICRPYmplY3QgPSBPYmplY3Q7CisgICAgbW9kdWxlLmV4cG9ydHMg
PSB7CisgICAgICBjcmVhdGU6ICAgICAkT2JqZWN0LmNyZWF0ZSwKKyAgICAgIGdldFByb3RvOiAg
ICRPYmplY3QuZ2V0UHJvdG90eXBlT2YsCisgICAgICBpc0VudW06ICAgICB7fS5wcm9wZXJ0eUlz
RW51bWVyYWJsZSwKKyAgICAgIGdldERlc2M6ICAgICRPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yLAorICAgICAgc2V0RGVzYzogICAgJE9iamVjdC5kZWZpbmVQcm9wZXJ0eSwKKyAgICAg
IHNldERlc2NzOiAgICRPYmplY3QuZGVmaW5lUHJvcGVydGllcywKKyAgICAgIGdldEtleXM6ICAg
ICRPYmplY3Qua2V5cywKKyAgICAgIGdldE5hbWVzOiAgICRPYmplY3QuZ2V0T3duUHJvcGVydHlO
YW1lcywKKyAgICAgIGdldFN5bWJvbHM6ICRPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLAor
ICAgICAgZWFjaDogICAgICAgW10uZm9yRWFjaAorICAgIH07CisKKy8qKiovIH0sCisvKiAxMCAq
LworLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7
CisKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICB2YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9
IF9fd2VicGFja19yZXF1aXJlX18oMSlbJ2RlZmF1bHQnXTsKKworICAgIGV4cG9ydHMuX19lc01v
ZHVsZSA9IHRydWU7CisgICAgZXhwb3J0cy5yZWdpc3RlckRlZmF1bHRIZWxwZXJzID0gcmVnaXN0
ZXJEZWZhdWx0SGVscGVyczsKKworICAgIHZhciBfaGVscGVyc0Jsb2NrSGVscGVyTWlzc2luZyA9
IF9fd2VicGFja19yZXF1aXJlX18oMTEpOworCisgICAgdmFyIF9oZWxwZXJzQmxvY2tIZWxwZXJN
aXNzaW5nMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2hlbHBlcnNCbG9ja0hlbHBlck1pc3Np
bmcpOworCisgICAgdmFyIF9oZWxwZXJzRWFjaCA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpOwor
CisgICAgdmFyIF9oZWxwZXJzRWFjaDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9oZWxwZXJz
RWFjaCk7CisKKyAgICB2YXIgX2hlbHBlcnNIZWxwZXJNaXNzaW5nID0gX193ZWJwYWNrX3JlcXVp
cmVfXygxMyk7CisKKyAgICB2YXIgX2hlbHBlcnNIZWxwZXJNaXNzaW5nMiA9IF9pbnRlcm9wUmVx
dWlyZURlZmF1bHQoX2hlbHBlcnNIZWxwZXJNaXNzaW5nKTsKKworICAgIHZhciBfaGVscGVyc0lm
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNCk7CisKKyAgICB2YXIgX2hlbHBlcnNJZjIgPSBfaW50
ZXJvcFJlcXVpcmVEZWZhdWx0KF9oZWxwZXJzSWYpOworCisgICAgdmFyIF9oZWxwZXJzTG9nID0g
X193ZWJwYWNrX3JlcXVpcmVfXygxNSk7CisKKyAgICB2YXIgX2hlbHBlcnNMb2cyID0gX2ludGVy
b3BSZXF1aXJlRGVmYXVsdChfaGVscGVyc0xvZyk7CisKKyAgICB2YXIgX2hlbHBlcnNMb29rdXAg
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTsKKworICAgIHZhciBfaGVscGVyc0xvb2t1cDIgPSBf
aW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9oZWxwZXJzTG9va3VwKTsKKworICAgIHZhciBfaGVscGVy
c1dpdGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KTsKKworICAgIHZhciBfaGVscGVyc1dpdGgy
ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaGVscGVyc1dpdGgpOworCisgICAgZnVuY3Rpb24g
cmVnaXN0ZXJEZWZhdWx0SGVscGVycyhpbnN0YW5jZSkgeworICAgICAgX2hlbHBlcnNCbG9ja0hl
bHBlck1pc3NpbmcyWydkZWZhdWx0J10oaW5zdGFuY2UpOworICAgICAgX2hlbHBlcnNFYWNoMlsn
ZGVmYXVsdCddKGluc3RhbmNlKTsKKyAgICAgIF9oZWxwZXJzSGVscGVyTWlzc2luZzJbJ2RlZmF1
bHQnXShpbnN0YW5jZSk7CisgICAgICBfaGVscGVyc0lmMlsnZGVmYXVsdCddKGluc3RhbmNlKTsK
KyAgICAgIF9oZWxwZXJzTG9nMlsnZGVmYXVsdCddKGluc3RhbmNlKTsKKyAgICAgIF9oZWxwZXJz
TG9va3VwMlsnZGVmYXVsdCddKGluc3RhbmNlKTsKKyAgICAgIF9oZWxwZXJzV2l0aDJbJ2RlZmF1
bHQnXShpbnN0YW5jZSk7CisgICAgfQorCisvKioqLyB9LAorLyogMTEgKi8KKy8qKiovIGZ1bmN0
aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisgICAgJ3VzZSBz
dHJpY3QnOworCisgICAgZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTsKKworICAgIHZhciBfdXRp
bHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpOworCisgICAgZXhwb3J0c1snZGVmYXVsdCddID0g
ZnVuY3Rpb24gKGluc3RhbmNlKSB7CisgICAgICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignYmxv
Y2tIZWxwZXJNaXNzaW5nJywgZnVuY3Rpb24gKGNvbnRleHQsIG9wdGlvbnMpIHsKKyAgICAgICAg
dmFyIGludmVyc2UgPSBvcHRpb25zLmludmVyc2UsCisgICAgICAgICAgICBmbiA9IG9wdGlvbnMu
Zm47CisKKyAgICAgICAgaWYgKGNvbnRleHQgPT09IHRydWUpIHsKKyAgICAgICAgICByZXR1cm4g
Zm4odGhpcyk7CisgICAgICAgIH0gZWxzZSBpZiAoY29udGV4dCA9PT0gZmFsc2UgfHwgY29udGV4
dCA9PSBudWxsKSB7CisgICAgICAgICAgcmV0dXJuIGludmVyc2UodGhpcyk7CisgICAgICAgIH0g
ZWxzZSBpZiAoX3V0aWxzLmlzQXJyYXkoY29udGV4dCkpIHsKKyAgICAgICAgICBpZiAoY29udGV4
dC5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICBpZiAob3B0aW9ucy5pZHMpIHsKKyAgICAgICAg
ICAgICAgb3B0aW9ucy5pZHMgPSBbb3B0aW9ucy5uYW1lXTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmhlbHBlcnMuZWFjaChjb250ZXh0LCBvcHRpb25zKTsK
KyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIGludmVyc2UodGhpcyk7Cisg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGlmIChvcHRpb25zLmRhdGEg
JiYgb3B0aW9ucy5pZHMpIHsKKyAgICAgICAgICAgIHZhciBkYXRhID0gX3V0aWxzLmNyZWF0ZUZy
YW1lKG9wdGlvbnMuZGF0YSk7CisgICAgICAgICAgICBkYXRhLmNvbnRleHRQYXRoID0gX3V0aWxz
LmFwcGVuZENvbnRleHRQYXRoKG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCwgb3B0aW9ucy5uYW1l
KTsKKyAgICAgICAgICAgIG9wdGlvbnMgPSB7IGRhdGE6IGRhdGEgfTsKKyAgICAgICAgICB9CisK
KyAgICAgICAgICByZXR1cm4gZm4oY29udGV4dCwgb3B0aW9ucyk7CisgICAgICAgIH0KKyAgICAg
IH0pOworICAgIH07CisKKyAgICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTsK
KworLyoqKi8gfSwKKy8qIDEyICovCisvKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9f
d2VicGFja19yZXF1aXJlX18pIHsKKworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIHZhciBfaW50
ZXJvcFJlcXVpcmVEZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKVsnZGVmYXVsdCddOwor
CisgICAgZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTsKKworICAgIHZhciBfdXRpbHMgPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKDUpOworCisgICAgdmFyIF9leGNlcHRpb24gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKDYpOworCisgICAgdmFyIF9leGNlcHRpb24yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVs
dChfZXhjZXB0aW9uKTsKKworICAgIGV4cG9ydHNbJ2RlZmF1bHQnXSA9IGZ1bmN0aW9uIChpbnN0
YW5jZSkgeworICAgICAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2VhY2gnLCBmdW5jdGlvbiAo
Y29udGV4dCwgb3B0aW9ucykgeworICAgICAgICBpZiAoIW9wdGlvbnMpIHsKKyAgICAgICAgICB0
aHJvdyBuZXcgX2V4Y2VwdGlvbjJbJ2RlZmF1bHQnXSgnTXVzdCBwYXNzIGl0ZXJhdG9yIHRvICNl
YWNoJyk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgZm4gPSBvcHRpb25zLmZuLAorICAgICAg
ICAgICAgaW52ZXJzZSA9IG9wdGlvbnMuaW52ZXJzZSwKKyAgICAgICAgICAgIGkgPSAwLAorICAg
ICAgICAgICAgcmV0ID0gJycsCisgICAgICAgICAgICBkYXRhID0gdW5kZWZpbmVkLAorICAgICAg
ICAgICAgY29udGV4dFBhdGggPSB1bmRlZmluZWQ7CisKKyAgICAgICAgaWYgKG9wdGlvbnMuZGF0
YSAmJiBvcHRpb25zLmlkcykgeworICAgICAgICAgIGNvbnRleHRQYXRoID0gX3V0aWxzLmFwcGVu
ZENvbnRleHRQYXRoKG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCwgb3B0aW9ucy5pZHNbMF0pICsg
Jy4nOworICAgICAgICB9CisKKyAgICAgICAgaWYgKF91dGlscy5pc0Z1bmN0aW9uKGNvbnRleHQp
KSB7CisgICAgICAgICAgY29udGV4dCA9IGNvbnRleHQuY2FsbCh0aGlzKTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChvcHRpb25zLmRhdGEpIHsKKyAgICAgICAgICBkYXRhID0gX3V0aWxzLmNy
ZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBl
eGVjSXRlcmF0aW9uKGZpZWxkLCBpbmRleCwgbGFzdCkgeworICAgICAgICAgIGlmIChkYXRhKSB7
CisgICAgICAgICAgICBkYXRhLmtleSA9IGZpZWxkOworICAgICAgICAgICAgZGF0YS5pbmRleCA9
IGluZGV4OworICAgICAgICAgICAgZGF0YS5maXJzdCA9IGluZGV4ID09PSAwOworICAgICAgICAg
ICAgZGF0YS5sYXN0ID0gISFsYXN0OworCisgICAgICAgICAgICBpZiAoY29udGV4dFBhdGgpIHsK
KyAgICAgICAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGNvbnRleHRQYXRoICsgZmllbGQ7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgcmV0ID0gcmV0ICsgZm4oY29u
dGV4dFtmaWVsZF0sIHsKKyAgICAgICAgICAgIGRhdGE6IGRhdGEsCisgICAgICAgICAgICBibG9j
a1BhcmFtczogX3V0aWxzLmJsb2NrUGFyYW1zKFtjb250ZXh0W2ZpZWxkXSwgZmllbGRdLCBbY29u
dGV4dFBhdGggKyBmaWVsZCwgbnVsbF0pCisgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoY29udGV4dCAmJiB0eXBlb2YgY29udGV4dCA9PT0gJ29iamVjdCcpIHsKKyAgICAg
ICAgICBpZiAoX3V0aWxzLmlzQXJyYXkoY29udGV4dCkpIHsKKyAgICAgICAgICAgIGZvciAodmFy
IGogPSBjb250ZXh0Lmxlbmd0aDsgaSA8IGo7IGkrKykgeworICAgICAgICAgICAgICBpZiAoaSBp
biBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAgZXhlY0l0ZXJhdGlvbihpLCBpLCBpID09PSBj
b250ZXh0Lmxlbmd0aCAtIDEpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBwcmlvcktleSA9IHVuZGVmaW5lZDsKKwor
ICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGNvbnRleHQpIHsKKyAgICAgICAgICAgICAgaWYg
KGNvbnRleHQuaGFzT3duUHJvcGVydHkoa2V5KSkgeworICAgICAgICAgICAgICAgIC8vIFdlJ3Jl
IHJ1bm5pbmcgdGhlIGl0ZXJhdGlvbnMgb25lIHN0ZXAgb3V0IG9mIHN5bmMgc28gd2UgY2FuIGRl
dGVjdAorICAgICAgICAgICAgICAgIC8vIHRoZSBsYXN0IGl0ZXJhdGlvbiB3aXRob3V0IGhhdmUg
dG8gc2NhbiB0aGUgb2JqZWN0IHR3aWNlIGFuZCBjcmVhdGUKKyAgICAgICAgICAgICAgICAvLyBh
biBpdGVybWVkaWF0ZSBrZXlzIGFycmF5LgorICAgICAgICAgICAgICAgIGlmIChwcmlvcktleSAh
PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgICAgICBleGVjSXRlcmF0aW9uKHByaW9yS2V5
LCBpIC0gMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHByaW9yS2V5ID0g
a2V5OworICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKHByaW9yS2V5ICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAg
ICAgZXhlY0l0ZXJhdGlvbihwcmlvcktleSwgaSAtIDEsIHRydWUpOworICAgICAgICAgICAgfQor
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChpID09PSAwKSB7CisgICAgICAg
ICAgcmV0ID0gaW52ZXJzZSh0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXQ7
CisgICAgICB9KTsKKyAgICB9OworCisgICAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZh
dWx0J107CisKKy8qKiovIH0sCisvKiAxMyAqLworLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBv
cnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICB2
YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18oMSlbJ2RlZmF1
bHQnXTsKKworICAgIGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7CisKKyAgICB2YXIgX2V4Y2Vw
dGlvbiA9IF9fd2VicGFja19yZXF1aXJlX18oNik7CisKKyAgICB2YXIgX2V4Y2VwdGlvbjIgPSBf
aW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9leGNlcHRpb24pOworCisgICAgZXhwb3J0c1snZGVmYXVs
dCddID0gZnVuY3Rpb24gKGluc3RhbmNlKSB7CisgICAgICBpbnN0YW5jZS5yZWdpc3RlckhlbHBl
cignaGVscGVyTWlzc2luZycsIGZ1bmN0aW9uICgpIC8qIFthcmdzLCBdb3B0aW9ucyAqL3sKKyAg
ICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHsKKyAgICAgICAgICAvLyBBIG1pc3Np
bmcgZmllbGQgaW4gYSB7e2Zvb319IGNvbnN0cnVjdC4KKyAgICAgICAgICByZXR1cm4gdW5kZWZp
bmVkOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIC8vIFNvbWVvbmUgaXMgYWN0dWFsbHkg
dHJ5aW5nIHRvIGNhbGwgc29tZXRoaW5nLCBibG93IHVwLgorICAgICAgICAgIHRocm93IG5ldyBf
ZXhjZXB0aW9uMlsnZGVmYXVsdCddKCdNaXNzaW5nIGhlbHBlcjogIicgKyBhcmd1bWVudHNbYXJn
dW1lbnRzLmxlbmd0aCAtIDFdLm5hbWUgKyAnIicpOworICAgICAgICB9CisgICAgICB9KTsKKyAg
ICB9OworCisgICAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107CisKKy8qKiov
IH0sCisvKiAxNCAqLworLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tf
cmVxdWlyZV9fKSB7CisKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICBleHBvcnRzLl9fZXNNb2R1
bGUgPSB0cnVlOworCisgICAgdmFyIF91dGlscyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7CisK
KyAgICBleHBvcnRzWydkZWZhdWx0J10gPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHsKKyAgICAgIGlu
c3RhbmNlLnJlZ2lzdGVySGVscGVyKCdpZicsIGZ1bmN0aW9uIChjb25kaXRpb25hbCwgb3B0aW9u
cykgeworICAgICAgICBpZiAoX3V0aWxzLmlzRnVuY3Rpb24oY29uZGl0aW9uYWwpKSB7CisgICAg
ICAgICAgY29uZGl0aW9uYWwgPSBjb25kaXRpb25hbC5jYWxsKHRoaXMpOworICAgICAgICB9CisK
KyAgICAgICAgLy8gRGVmYXVsdCBiZWhhdmlvciBpcyB0byByZW5kZXIgdGhlIHBvc2l0aXZlIHBh
dGggaWYgdGhlIHZhbHVlIGlzIHRydXRoeSBhbmQgbm90IGVtcHR5LgorICAgICAgICAvLyBUaGUg
YGluY2x1ZGVaZXJvYCBvcHRpb24gbWF5IGJlIHNldCB0byB0cmVhdCB0aGUgY29uZHRpb25hbCBh
cyBwdXJlbHkgbm90IGVtcHR5IGJhc2VkIG9uIHRoZQorICAgICAgICAvLyBiZWhhdmlvciBvZiBp
c0VtcHR5LiBFZmZlY3RpdmVseSB0aGlzIGRldGVybWluZXMgaWYgMCBpcyBoYW5kbGVkIGJ5IHRo
ZSBwb3NpdGl2ZSBwYXRoIG9yIG5lZ2F0aXZlLgorICAgICAgICBpZiAoIW9wdGlvbnMuaGFzaC5p
bmNsdWRlWmVybyAmJiAhY29uZGl0aW9uYWwgfHwgX3V0aWxzLmlzRW1wdHkoY29uZGl0aW9uYWwp
KSB7CisgICAgICAgICAgcmV0dXJuIG9wdGlvbnMuaW52ZXJzZSh0aGlzKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICByZXR1cm4gb3B0aW9ucy5mbih0aGlzKTsKKyAgICAgICAgfQorICAg
ICAgfSk7CisKKyAgICAgIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCd1bmxlc3MnLCBmdW5jdGlv
biAoY29uZGl0aW9uYWwsIG9wdGlvbnMpIHsKKyAgICAgICAgcmV0dXJuIGluc3RhbmNlLmhlbHBl
cnNbJ2lmJ10uY2FsbCh0aGlzLCBjb25kaXRpb25hbCwgeyBmbjogb3B0aW9ucy5pbnZlcnNlLCBp
bnZlcnNlOiBvcHRpb25zLmZuLCBoYXNoOiBvcHRpb25zLmhhc2ggfSk7CisgICAgICB9KTsKKyAg
ICB9OworCisgICAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107CisKKy8qKiov
IH0sCisvKiAxNSAqLworLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7CisKKyAgICAn
dXNlIHN0cmljdCc7CisKKyAgICBleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlOworCisgICAgZXhw
b3J0c1snZGVmYXVsdCddID0gZnVuY3Rpb24gKGluc3RhbmNlKSB7CisgICAgICBpbnN0YW5jZS5y
ZWdpc3RlckhlbHBlcignbG9nJywgZnVuY3Rpb24gKCkgLyogbWVzc2FnZSwgb3B0aW9ucyAqL3sK
KyAgICAgICAgdmFyIGFyZ3MgPSBbdW5kZWZpbmVkXSwKKyAgICAgICAgICAgIG9wdGlvbnMgPSBh
cmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdOworICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpKyspIHsKKyAgICAgICAgICBhcmdzLnB1c2goYXJn
dW1lbnRzW2ldKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBsZXZlbCA9IDE7CisgICAgICAg
IGlmIChvcHRpb25zLmhhc2gubGV2ZWwgIT0gbnVsbCkgeworICAgICAgICAgIGxldmVsID0gb3B0
aW9ucy5oYXNoLmxldmVsOworICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZGF0YSAmJiBvcHRp
b25zLmRhdGEubGV2ZWwgIT0gbnVsbCkgeworICAgICAgICAgIGxldmVsID0gb3B0aW9ucy5kYXRh
LmxldmVsOworICAgICAgICB9CisgICAgICAgIGFyZ3NbMF0gPSBsZXZlbDsKKworICAgICAgICBp
bnN0YW5jZS5sb2cuYXBwbHkoaW5zdGFuY2UsIGFyZ3MpOworICAgICAgfSk7CisgICAgfTsKKwor
ICAgIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddOworCisvKioqLyB9LAorLyog
MTYgKi8KKy8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykgeworCisgICAgJ3VzZSBzdHJp
Y3QnOworCisgICAgZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTsKKworICAgIGV4cG9ydHNbJ2Rl
ZmF1bHQnXSA9IGZ1bmN0aW9uIChpbnN0YW5jZSkgeworICAgICAgaW5zdGFuY2UucmVnaXN0ZXJI
ZWxwZXIoJ2xvb2t1cCcsIGZ1bmN0aW9uIChvYmosIGZpZWxkKSB7CisgICAgICAgIHJldHVybiBv
YmogJiYgb2JqW2ZpZWxkXTsKKyAgICAgIH0pOworICAgIH07CisKKyAgICBtb2R1bGUuZXhwb3J0
cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTsKKworLyoqKi8gfSwKKy8qIDE3ICovCisvKioqLyBmdW5j
dGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworICAgICd1c2Ug
c3RyaWN0JzsKKworICAgIGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7CisKKyAgICB2YXIgX3V0
aWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTsKKworICAgIGV4cG9ydHNbJ2RlZmF1bHQnXSA9
IGZ1bmN0aW9uIChpbnN0YW5jZSkgeworICAgICAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ3dp
dGgnLCBmdW5jdGlvbiAoY29udGV4dCwgb3B0aW9ucykgeworICAgICAgICBpZiAoX3V0aWxzLmlz
RnVuY3Rpb24oY29udGV4dCkpIHsKKyAgICAgICAgICBjb250ZXh0ID0gY29udGV4dC5jYWxsKHRo
aXMpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGZuID0gb3B0aW9ucy5mbjsKKworICAgICAg
ICBpZiAoIV91dGlscy5pc0VtcHR5KGNvbnRleHQpKSB7CisgICAgICAgICAgdmFyIGRhdGEgPSBv
cHRpb25zLmRhdGE7CisgICAgICAgICAgaWYgKG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmlkcykg
eworICAgICAgICAgICAgZGF0YSA9IF91dGlscy5jcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpOwor
ICAgICAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IF91dGlscy5hcHBlbmRDb250ZXh0UGF0aChv
cHRpb25zLmRhdGEuY29udGV4dFBhdGgsIG9wdGlvbnMuaWRzWzBdKTsKKyAgICAgICAgICB9CisK
KyAgICAgICAgICByZXR1cm4gZm4oY29udGV4dCwgeworICAgICAgICAgICAgZGF0YTogZGF0YSwK
KyAgICAgICAgICAgIGJsb2NrUGFyYW1zOiBfdXRpbHMuYmxvY2tQYXJhbXMoW2NvbnRleHRdLCBb
ZGF0YSAmJiBkYXRhLmNvbnRleHRQYXRoXSkKKyAgICAgICAgICB9KTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICByZXR1cm4gb3B0aW9ucy5pbnZlcnNlKHRoaXMpOworICAgICAgICB9Cisg
ICAgICB9KTsKKyAgICB9OworCisgICAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0
J107CisKKy8qKiovIH0sCisvKiAxOCAqLworLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRz
LCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICB2YXIg
X2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18oMSlbJ2RlZmF1bHQn
XTsKKworICAgIGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7CisgICAgZXhwb3J0cy5yZWdpc3Rl
ckRlZmF1bHREZWNvcmF0b3JzID0gcmVnaXN0ZXJEZWZhdWx0RGVjb3JhdG9yczsKKworICAgIHZh
ciBfZGVjb3JhdG9yc0lubGluZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTkpOworCisgICAgdmFy
IF9kZWNvcmF0b3JzSW5saW5lMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2RlY29yYXRvcnNJ
bmxpbmUpOworCisgICAgZnVuY3Rpb24gcmVnaXN0ZXJEZWZhdWx0RGVjb3JhdG9ycyhpbnN0YW5j
ZSkgeworICAgICAgX2RlY29yYXRvcnNJbmxpbmUyWydkZWZhdWx0J10oaW5zdGFuY2UpOworICAg
IH0KKworLyoqKi8gfSwKKy8qIDE5ICovCisvKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMs
IF9fd2VicGFja19yZXF1aXJlX18pIHsKKworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIGV4cG9y
dHMuX19lc01vZHVsZSA9IHRydWU7CisKKyAgICB2YXIgX3V0aWxzID0gX193ZWJwYWNrX3JlcXVp
cmVfXyg1KTsKKworICAgIGV4cG9ydHNbJ2RlZmF1bHQnXSA9IGZ1bmN0aW9uIChpbnN0YW5jZSkg
eworICAgICAgaW5zdGFuY2UucmVnaXN0ZXJEZWNvcmF0b3IoJ2lubGluZScsIGZ1bmN0aW9uIChm
biwgcHJvcHMsIGNvbnRhaW5lciwgb3B0aW9ucykgeworICAgICAgICB2YXIgcmV0ID0gZm47Cisg
ICAgICAgIGlmICghcHJvcHMucGFydGlhbHMpIHsKKyAgICAgICAgICBwcm9wcy5wYXJ0aWFscyA9
IHt9OworICAgICAgICAgIHJldCA9IGZ1bmN0aW9uIChjb250ZXh0LCBvcHRpb25zKSB7CisgICAg
ICAgICAgICAvLyBDcmVhdGUgYSBuZXcgcGFydGlhbHMgc3RhY2sgZnJhbWUgcHJpb3IgdG8gZXhl
Yy4KKyAgICAgICAgICAgIHZhciBvcmlnaW5hbCA9IGNvbnRhaW5lci5wYXJ0aWFsczsKKyAgICAg
ICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IF91dGlscy5leHRlbmQoe30sIG9yaWdpbmFsLCBw
cm9wcy5wYXJ0aWFscyk7CisgICAgICAgICAgICB2YXIgcmV0ID0gZm4oY29udGV4dCwgb3B0aW9u
cyk7CisgICAgICAgICAgICBjb250YWluZXIucGFydGlhbHMgPSBvcmlnaW5hbDsKKyAgICAgICAg
ICAgIHJldHVybiByZXQ7CisgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIHByb3Bz
LnBhcnRpYWxzW29wdGlvbnMuYXJnc1swXV0gPSBvcHRpb25zLmZuOworCisgICAgICAgIHJldHVy
biByZXQ7CisgICAgICB9KTsKKyAgICB9OworCisgICAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRz
WydkZWZhdWx0J107CisKKy8qKiovIH0sCisvKiAyMCAqLworLyoqKi8gZnVuY3Rpb24obW9kdWxl
LCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyAgICAndXNlIHN0cmljdCc7CisK
KyAgICBleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlOworCisgICAgdmFyIF91dGlscyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oNSk7CisKKyAgICB2YXIgbG9nZ2VyID0geworICAgICAgbWV0aG9kTWFw
OiBbJ2RlYnVnJywgJ2luZm8nLCAnd2FybicsICdlcnJvciddLAorICAgICAgbGV2ZWw6ICdpbmZv
JywKKworICAgICAgLy8gTWFwcyBhIGdpdmVuIGxldmVsIHZhbHVlIHRvIHRoZSBgbWV0aG9kTWFw
YCBpbmRleGVzIGFib3ZlLgorICAgICAgbG9va3VwTGV2ZWw6IGZ1bmN0aW9uIGxvb2t1cExldmVs
KGxldmVsKSB7CisgICAgICAgIGlmICh0eXBlb2YgbGV2ZWwgPT09ICdzdHJpbmcnKSB7CisgICAg
ICAgICAgdmFyIGxldmVsTWFwID0gX3V0aWxzLmluZGV4T2YobG9nZ2VyLm1ldGhvZE1hcCwgbGV2
ZWwudG9Mb3dlckNhc2UoKSk7CisgICAgICAgICAgaWYgKGxldmVsTWFwID49IDApIHsKKyAgICAg
ICAgICAgIGxldmVsID0gbGV2ZWxNYXA7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGxldmVsID0gcGFyc2VJbnQobGV2ZWwsIDEwKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gbGV2ZWw7CisgICAgICB9LAorCisgICAgICAvLyBDYW4gYmUgb3ZlcnJp
ZGRlbiBpbiB0aGUgaG9zdCBlbnZpcm9ubWVudAorICAgICAgbG9nOiBmdW5jdGlvbiBsb2cobGV2
ZWwpIHsKKyAgICAgICAgbGV2ZWwgPSBsb2dnZXIubG9va3VwTGV2ZWwobGV2ZWwpOworCisgICAg
ICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbG9nZ2VyLmxvb2t1cExl
dmVsKGxvZ2dlci5sZXZlbCkgPD0gbGV2ZWwpIHsKKyAgICAgICAgICB2YXIgbWV0aG9kID0gbG9n
Z2VyLm1ldGhvZE1hcFtsZXZlbF07CisgICAgICAgICAgaWYgKCFjb25zb2xlW21ldGhvZF0pIHsK
KyAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZQorICAgICAgICAg
ICAgbWV0aG9kID0gJ2xvZyc7CisgICAgICAgICAgfQorCisgICAgICAgICAgZm9yICh2YXIgX2xl
biA9IGFyZ3VtZW50cy5sZW5ndGgsIG1lc3NhZ2UgPSBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAx
IDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7CisgICAgICAgICAgICBtZXNz
YWdlW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTsKKyAgICAgICAgICB9CisKKyAgICAgICAg
ICBjb25zb2xlW21ldGhvZF0uYXBwbHkoY29uc29sZSwgbWVzc2FnZSk7IC8vIGVzbGludC1kaXNh
YmxlLWxpbmUgbm8tY29uc29sZQorICAgICAgICB9CisgICAgICB9CisgICAgfTsKKworICAgIGV4
cG9ydHNbJ2RlZmF1bHQnXSA9IGxvZ2dlcjsKKyAgICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNb
J2RlZmF1bHQnXTsKKworLyoqKi8gfSwKKy8qIDIxICovCisvKioqLyBmdW5jdGlvbihtb2R1bGUs
IGV4cG9ydHMpIHsKKworICAgIC8vIEJ1aWxkIG91dCBvdXIgYmFzaWMgU2FmZVN0cmluZyB0eXBl
CisgICAgJ3VzZSBzdHJpY3QnOworCisgICAgZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTsKKyAg
ICBmdW5jdGlvbiBTYWZlU3RyaW5nKHN0cmluZykgeworICAgICAgdGhpcy5zdHJpbmcgPSBzdHJp
bmc7CisgICAgfQorCisgICAgU2FmZVN0cmluZy5wcm90b3R5cGUudG9TdHJpbmcgPSBTYWZlU3Ry
aW5nLnByb3RvdHlwZS50b0hUTUwgPSBmdW5jdGlvbiAoKSB7CisgICAgICByZXR1cm4gJycgKyB0
aGlzLnN0cmluZzsKKyAgICB9OworCisgICAgZXhwb3J0c1snZGVmYXVsdCddID0gU2FmZVN0cmlu
ZzsKKyAgICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTsKKworLyoqKi8gfSwK
Ky8qIDIyICovCisvKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1
aXJlX18pIHsKKworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIHZhciBfaW50ZXJvcFJlcXVpcmVX
aWxkY2FyZCA9IF9fd2VicGFja19yZXF1aXJlX18oMylbJ2RlZmF1bHQnXTsKKworICAgIHZhciBf
aW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKVsnZGVmYXVsdCdd
OworCisgICAgZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTsKKyAgICBleHBvcnRzLmNoZWNrUmV2
aXNpb24gPSBjaGVja1JldmlzaW9uOworICAgIGV4cG9ydHMudGVtcGxhdGUgPSB0ZW1wbGF0ZTsK
KyAgICBleHBvcnRzLndyYXBQcm9ncmFtID0gd3JhcFByb2dyYW07CisgICAgZXhwb3J0cy5yZXNv
bHZlUGFydGlhbCA9IHJlc29sdmVQYXJ0aWFsOworICAgIGV4cG9ydHMuaW52b2tlUGFydGlhbCA9
IGludm9rZVBhcnRpYWw7CisgICAgZXhwb3J0cy5ub29wID0gbm9vcDsKKworICAgIHZhciBfdXRp
bHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpOworCisgICAgdmFyIFV0aWxzID0gX2ludGVyb3BS
ZXF1aXJlV2lsZGNhcmQoX3V0aWxzKTsKKworICAgIHZhciBfZXhjZXB0aW9uID0gX193ZWJwYWNr
X3JlcXVpcmVfXyg2KTsKKworICAgIHZhciBfZXhjZXB0aW9uMiA9IF9pbnRlcm9wUmVxdWlyZURl
ZmF1bHQoX2V4Y2VwdGlvbik7CisKKyAgICB2YXIgX2Jhc2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KDQpOworCisgICAgZnVuY3Rpb24gY2hlY2tSZXZpc2lvbihjb21waWxlckluZm8pIHsKKyAgICAg
IHZhciBjb21waWxlclJldmlzaW9uID0gY29tcGlsZXJJbmZvICYmIGNvbXBpbGVySW5mb1swXSB8
fCAxLAorICAgICAgICAgIGN1cnJlbnRSZXZpc2lvbiA9IF9iYXNlLkNPTVBJTEVSX1JFVklTSU9O
OworCisgICAgICBpZiAoY29tcGlsZXJSZXZpc2lvbiAhPT0gY3VycmVudFJldmlzaW9uKSB7Cisg
ICAgICAgIGlmIChjb21waWxlclJldmlzaW9uIDwgY3VycmVudFJldmlzaW9uKSB7CisgICAgICAg
ICAgdmFyIHJ1bnRpbWVWZXJzaW9ucyA9IF9iYXNlLlJFVklTSU9OX0NIQU5HRVNbY3VycmVudFJl
dmlzaW9uXSwKKyAgICAgICAgICAgICAgY29tcGlsZXJWZXJzaW9ucyA9IF9iYXNlLlJFVklTSU9O
X0NIQU5HRVNbY29tcGlsZXJSZXZpc2lvbl07CisgICAgICAgICAgdGhyb3cgbmV3IF9leGNlcHRp
b24yWydkZWZhdWx0J10oJ1RlbXBsYXRlIHdhcyBwcmVjb21waWxlZCB3aXRoIGFuIG9sZGVyIHZl
cnNpb24gb2YgSGFuZGxlYmFycyB0aGFuIHRoZSBjdXJyZW50IHJ1bnRpbWUuICcgKyAnUGxlYXNl
IHVwZGF0ZSB5b3VyIHByZWNvbXBpbGVyIHRvIGEgbmV3ZXIgdmVyc2lvbiAoJyArIHJ1bnRpbWVW
ZXJzaW9ucyArICcpIG9yIGRvd25ncmFkZSB5b3VyIHJ1bnRpbWUgdG8gYW4gb2xkZXIgdmVyc2lv
biAoJyArIGNvbXBpbGVyVmVyc2lvbnMgKyAnKS4nKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAvLyBVc2UgdGhlIGVtYmVkZGVkIHZlcnNpb24gaW5mbyBzaW5jZSB0aGUgcnVudGltZSBk
b2Vzbid0IGtub3cgYWJvdXQgdGhpcyByZXZpc2lvbiB5ZXQKKyAgICAgICAgICB0aHJvdyBuZXcg
X2V4Y2VwdGlvbjJbJ2RlZmF1bHQnXSgnVGVtcGxhdGUgd2FzIHByZWNvbXBpbGVkIHdpdGggYSBu
ZXdlciB2ZXJzaW9uIG9mIEhhbmRsZWJhcnMgdGhhbiB0aGUgY3VycmVudCBydW50aW1lLiAnICsg
J1BsZWFzZSB1cGRhdGUgeW91ciBydW50aW1lIHRvIGEgbmV3ZXIgdmVyc2lvbiAoJyArIGNvbXBp
bGVySW5mb1sxXSArICcpLicpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgZnVu
Y3Rpb24gdGVtcGxhdGUodGVtcGxhdGVTcGVjLCBlbnYpIHsKKyAgICAgIC8qIGlzdGFuYnVsIGln
bm9yZSBuZXh0ICovCisgICAgICBpZiAoIWVudikgeworICAgICAgICB0aHJvdyBuZXcgX2V4Y2Vw
dGlvbjJbJ2RlZmF1bHQnXSgnTm8gZW52aXJvbm1lbnQgcGFzc2VkIHRvIHRlbXBsYXRlJyk7Cisg
ICAgICB9CisgICAgICBpZiAoIXRlbXBsYXRlU3BlYyB8fCAhdGVtcGxhdGVTcGVjLm1haW4pIHsK
KyAgICAgICAgdGhyb3cgbmV3IF9leGNlcHRpb24yWydkZWZhdWx0J10oJ1Vua25vd24gdGVtcGxh
dGUgb2JqZWN0OiAnICsgdHlwZW9mIHRlbXBsYXRlU3BlYyk7CisgICAgICB9CisKKyAgICAgIHRl
bXBsYXRlU3BlYy5tYWluLmRlY29yYXRvciA9IHRlbXBsYXRlU3BlYy5tYWluX2Q7CisKKyAgICAg
IC8vIE5vdGU6IFVzaW5nIGVudi5WTSByZWZlcmVuY2VzIHJhdGhlciB0aGFuIGxvY2FsIHZhciBy
ZWZlcmVuY2VzIHRocm91Z2hvdXQgdGhpcyBzZWN0aW9uIHRvIGFsbG93CisgICAgICAvLyBmb3Ig
ZXh0ZXJuYWwgdXNlcnMgdG8gb3ZlcnJpZGUgdGhlc2UgYXMgcHN1ZWRvLXN1cHBvcnRlZCBBUElz
LgorICAgICAgZW52LlZNLmNoZWNrUmV2aXNpb24odGVtcGxhdGVTcGVjLmNvbXBpbGVyKTsKKwor
ICAgICAgZnVuY3Rpb24gaW52b2tlUGFydGlhbFdyYXBwZXIocGFydGlhbCwgY29udGV4dCwgb3B0
aW9ucykgeworICAgICAgICBpZiAob3B0aW9ucy5oYXNoKSB7CisgICAgICAgICAgY29udGV4dCA9
IFV0aWxzLmV4dGVuZCh7fSwgY29udGV4dCwgb3B0aW9ucy5oYXNoKTsKKyAgICAgICAgICBpZiAo
b3B0aW9ucy5pZHMpIHsKKyAgICAgICAgICAgIG9wdGlvbnMuaWRzWzBdID0gdHJ1ZTsKKyAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwYXJ0aWFsID0gZW52LlZNLnJlc29sdmVQYXJ0
aWFsLmNhbGwodGhpcywgcGFydGlhbCwgY29udGV4dCwgb3B0aW9ucyk7CisgICAgICAgIHZhciBy
ZXN1bHQgPSBlbnYuVk0uaW52b2tlUGFydGlhbC5jYWxsKHRoaXMsIHBhcnRpYWwsIGNvbnRleHQs
IG9wdGlvbnMpOworCisgICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCAmJiBlbnYuY29tcGlsZSkg
eworICAgICAgICAgIG9wdGlvbnMucGFydGlhbHNbb3B0aW9ucy5uYW1lXSA9IGVudi5jb21waWxl
KHBhcnRpYWwsIHRlbXBsYXRlU3BlYy5jb21waWxlck9wdGlvbnMsIGVudik7CisgICAgICAgICAg
cmVzdWx0ID0gb3B0aW9ucy5wYXJ0aWFsc1tvcHRpb25zLm5hbWVdKGNvbnRleHQsIG9wdGlvbnMp
OworICAgICAgICB9CisgICAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgeworICAgICAgICAgIGlm
IChvcHRpb25zLmluZGVudCkgeworICAgICAgICAgICAgdmFyIGxpbmVzID0gcmVzdWx0LnNwbGl0
KCdcbicpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBsaW5lcy5sZW5ndGg7IGkg
PCBsOyBpKyspIHsKKyAgICAgICAgICAgICAgaWYgKCFsaW5lc1tpXSAmJiBpICsgMSA9PT0gbCkg
eworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgbGluZXNbaV0gPSBvcHRpb25zLmluZGVudCArIGxpbmVzW2ldOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmVzdWx0ID0gbGluZXMuam9pbignXG4nKTsKKyAgICAgICAgICB9CisgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB0aHJvdyBu
ZXcgX2V4Y2VwdGlvbjJbJ2RlZmF1bHQnXSgnVGhlIHBhcnRpYWwgJyArIG9wdGlvbnMubmFtZSAr
ICcgY291bGQgbm90IGJlIGNvbXBpbGVkIHdoZW4gcnVubmluZyBpbiBydW50aW1lLW9ubHkgbW9k
ZScpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIC8vIEp1c3QgYWRkIHdhdGVyCisgICAg
ICB2YXIgY29udGFpbmVyID0geworICAgICAgICBzdHJpY3Q6IGZ1bmN0aW9uIHN0cmljdChvYmos
IG5hbWUpIHsKKyAgICAgICAgICBpZiAoIShuYW1lIGluIG9iaikpIHsKKyAgICAgICAgICAgIHRo
cm93IG5ldyBfZXhjZXB0aW9uMlsnZGVmYXVsdCddKCciJyArIG5hbWUgKyAnIiBub3QgZGVmaW5l
ZCBpbiAnICsgb2JqKTsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIG9ialtuYW1lXTsK
KyAgICAgICAgfSwKKyAgICAgICAgbG9va3VwOiBmdW5jdGlvbiBsb29rdXAoZGVwdGhzLCBuYW1l
KSB7CisgICAgICAgICAgdmFyIGxlbiA9IGRlcHRocy5sZW5ndGg7CisgICAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgICAgICAgICAgaWYgKGRlcHRoc1tpXSAmJiBk
ZXB0aHNbaV1bbmFtZV0gIT0gbnVsbCkgeworICAgICAgICAgICAgICByZXR1cm4gZGVwdGhzW2ld
W25hbWVdOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAg
bGFtYmRhOiBmdW5jdGlvbiBsYW1iZGEoY3VycmVudCwgY29udGV4dCkgeworICAgICAgICAgIHJl
dHVybiB0eXBlb2YgY3VycmVudCA9PT0gJ2Z1bmN0aW9uJyA/IGN1cnJlbnQuY2FsbChjb250ZXh0
KSA6IGN1cnJlbnQ7CisgICAgICAgIH0sCisKKyAgICAgICAgZXNjYXBlRXhwcmVzc2lvbjogVXRp
bHMuZXNjYXBlRXhwcmVzc2lvbiwKKyAgICAgICAgaW52b2tlUGFydGlhbDogaW52b2tlUGFydGlh
bFdyYXBwZXIsCisKKyAgICAgICAgZm46IGZ1bmN0aW9uIGZuKGkpIHsKKyAgICAgICAgICB2YXIg
cmV0ID0gdGVtcGxhdGVTcGVjW2ldOworICAgICAgICAgIHJldC5kZWNvcmF0b3IgPSB0ZW1wbGF0
ZVNwZWNbaSArICdfZCddOworICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0sCisKKyAg
ICAgICAgcHJvZ3JhbXM6IFtdLAorICAgICAgICBwcm9ncmFtOiBmdW5jdGlvbiBwcm9ncmFtKGks
IGRhdGEsIGRlY2xhcmVkQmxvY2tQYXJhbXMsIGJsb2NrUGFyYW1zLCBkZXB0aHMpIHsKKyAgICAg
ICAgICB2YXIgcHJvZ3JhbVdyYXBwZXIgPSB0aGlzLnByb2dyYW1zW2ldLAorICAgICAgICAgICAg
ICBmbiA9IHRoaXMuZm4oaSk7CisgICAgICAgICAgaWYgKGRhdGEgfHwgZGVwdGhzIHx8IGJsb2Nr
UGFyYW1zIHx8IGRlY2xhcmVkQmxvY2tQYXJhbXMpIHsKKyAgICAgICAgICAgIHByb2dyYW1XcmFw
cGVyID0gd3JhcFByb2dyYW0odGhpcywgaSwgZm4sIGRhdGEsIGRlY2xhcmVkQmxvY2tQYXJhbXMs
IGJsb2NrUGFyYW1zLCBkZXB0aHMpOworICAgICAgICAgIH0gZWxzZSBpZiAoIXByb2dyYW1XcmFw
cGVyKSB7CisgICAgICAgICAgICBwcm9ncmFtV3JhcHBlciA9IHRoaXMucHJvZ3JhbXNbaV0gPSB3
cmFwUHJvZ3JhbSh0aGlzLCBpLCBmbik7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiBw
cm9ncmFtV3JhcHBlcjsKKyAgICAgICAgfSwKKworICAgICAgICBkYXRhOiBmdW5jdGlvbiBkYXRh
KHZhbHVlLCBkZXB0aCkgeworICAgICAgICAgIHdoaWxlICh2YWx1ZSAmJiBkZXB0aC0tKSB7Cisg
ICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLl9wYXJlbnQ7CisgICAgICAgICAgfQorICAgICAgICAg
IHJldHVybiB2YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgbWVyZ2U6IGZ1bmN0aW9uIG1lcmdl
KHBhcmFtLCBjb21tb24pIHsKKyAgICAgICAgICB2YXIgb2JqID0gcGFyYW0gfHwgY29tbW9uOwor
CisgICAgICAgICAgaWYgKHBhcmFtICYmIGNvbW1vbiAmJiBwYXJhbSAhPT0gY29tbW9uKSB7Cisg
ICAgICAgICAgICBvYmogPSBVdGlscy5leHRlbmQoe30sIGNvbW1vbiwgcGFyYW0pOworICAgICAg
ICAgIH0KKworICAgICAgICAgIHJldHVybiBvYmo7CisgICAgICAgIH0sCisKKyAgICAgICAgbm9v
cDogZW52LlZNLm5vb3AsCisgICAgICAgIGNvbXBpbGVySW5mbzogdGVtcGxhdGVTcGVjLmNvbXBp
bGVyCisgICAgICB9OworCisgICAgICBmdW5jdGlvbiByZXQoY29udGV4dCkgeworICAgICAgICB2
YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMSB8fCBhcmd1bWVudHNbMV0gPT09IHVu
ZGVmaW5lZCA/IHt9IDogYXJndW1lbnRzWzFdOworCisgICAgICAgIHZhciBkYXRhID0gb3B0aW9u
cy5kYXRhOworCisgICAgICAgIHJldC5fc2V0dXAob3B0aW9ucyk7CisgICAgICAgIGlmICghb3B0
aW9ucy5wYXJ0aWFsICYmIHRlbXBsYXRlU3BlYy51c2VEYXRhKSB7CisgICAgICAgICAgZGF0YSA9
IGluaXREYXRhKGNvbnRleHQsIGRhdGEpOworICAgICAgICB9CisgICAgICAgIHZhciBkZXB0aHMg
PSB1bmRlZmluZWQsCisgICAgICAgICAgICBibG9ja1BhcmFtcyA9IHRlbXBsYXRlU3BlYy51c2VC
bG9ja1BhcmFtcyA/IFtdIDogdW5kZWZpbmVkOworICAgICAgICBpZiAodGVtcGxhdGVTcGVjLnVz
ZURlcHRocykgeworICAgICAgICAgIGlmIChvcHRpb25zLmRlcHRocykgeworICAgICAgICAgICAg
ZGVwdGhzID0gY29udGV4dCAhPSBvcHRpb25zLmRlcHRoc1swXSA/IFtjb250ZXh0XS5jb25jYXQo
b3B0aW9ucy5kZXB0aHMpIDogb3B0aW9ucy5kZXB0aHM7CisgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGRlcHRocyA9IFtjb250ZXh0XTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBmdW5jdGlvbiBtYWluKGNvbnRleHQgLyosIG9wdGlvbnMqLykgeworICAgICAgICAg
IHJldHVybiAnJyArIHRlbXBsYXRlU3BlYy5tYWluKGNvbnRhaW5lciwgY29udGV4dCwgY29udGFp
bmVyLmhlbHBlcnMsIGNvbnRhaW5lci5wYXJ0aWFscywgZGF0YSwgYmxvY2tQYXJhbXMsIGRlcHRo
cyk7CisgICAgICAgIH0KKyAgICAgICAgbWFpbiA9IGV4ZWN1dGVEZWNvcmF0b3JzKHRlbXBsYXRl
U3BlYy5tYWluLCBtYWluLCBjb250YWluZXIsIG9wdGlvbnMuZGVwdGhzIHx8IFtdLCBkYXRhLCBi
bG9ja1BhcmFtcyk7CisgICAgICAgIHJldHVybiBtYWluKGNvbnRleHQsIG9wdGlvbnMpOworICAg
ICAgfQorICAgICAgcmV0LmlzVG9wID0gdHJ1ZTsKKworICAgICAgcmV0Ll9zZXR1cCA9IGZ1bmN0
aW9uIChvcHRpb25zKSB7CisgICAgICAgIGlmICghb3B0aW9ucy5wYXJ0aWFsKSB7CisgICAgICAg
ICAgY29udGFpbmVyLmhlbHBlcnMgPSBjb250YWluZXIubWVyZ2Uob3B0aW9ucy5oZWxwZXJzLCBl
bnYuaGVscGVycyk7CisKKyAgICAgICAgICBpZiAodGVtcGxhdGVTcGVjLnVzZVBhcnRpYWwpIHsK
KyAgICAgICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IGNvbnRhaW5lci5tZXJnZShvcHRpb25z
LnBhcnRpYWxzLCBlbnYucGFydGlhbHMpOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAodGVt
cGxhdGVTcGVjLnVzZVBhcnRpYWwgfHwgdGVtcGxhdGVTcGVjLnVzZURlY29yYXRvcnMpIHsKKyAg
ICAgICAgICAgIGNvbnRhaW5lci5kZWNvcmF0b3JzID0gY29udGFpbmVyLm1lcmdlKG9wdGlvbnMu
ZGVjb3JhdG9ycywgZW52LmRlY29yYXRvcnMpOworICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICBjb250YWluZXIuaGVscGVycyA9IG9wdGlvbnMuaGVscGVyczsKKyAgICAg
ICAgICBjb250YWluZXIucGFydGlhbHMgPSBvcHRpb25zLnBhcnRpYWxzOworICAgICAgICAgIGNv
bnRhaW5lci5kZWNvcmF0b3JzID0gb3B0aW9ucy5kZWNvcmF0b3JzOworICAgICAgICB9CisgICAg
ICB9OworCisgICAgICByZXQuX2NoaWxkID0gZnVuY3Rpb24gKGksIGRhdGEsIGJsb2NrUGFyYW1z
LCBkZXB0aHMpIHsKKyAgICAgICAgaWYgKHRlbXBsYXRlU3BlYy51c2VCbG9ja1BhcmFtcyAmJiAh
YmxvY2tQYXJhbXMpIHsKKyAgICAgICAgICB0aHJvdyBuZXcgX2V4Y2VwdGlvbjJbJ2RlZmF1bHQn
XSgnbXVzdCBwYXNzIGJsb2NrIHBhcmFtcycpOworICAgICAgICB9CisgICAgICAgIGlmICh0ZW1w
bGF0ZVNwZWMudXNlRGVwdGhzICYmICFkZXB0aHMpIHsKKyAgICAgICAgICB0aHJvdyBuZXcgX2V4
Y2VwdGlvbjJbJ2RlZmF1bHQnXSgnbXVzdCBwYXNzIHBhcmVudCBkZXB0aHMnKTsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiB3cmFwUHJvZ3JhbShjb250YWluZXIsIGksIHRlbXBsYXRlU3Bl
Y1tpXSwgZGF0YSwgMCwgYmxvY2tQYXJhbXMsIGRlcHRocyk7CisgICAgICB9OworICAgICAgcmV0
dXJuIHJldDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB3cmFwUHJvZ3JhbShjb250YWluZXIsIGks
IGZuLCBkYXRhLCBkZWNsYXJlZEJsb2NrUGFyYW1zLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7Cisg
ICAgICBmdW5jdGlvbiBwcm9nKGNvbnRleHQpIHsKKyAgICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1
bWVudHMubGVuZ3RoIDw9IDEgfHwgYXJndW1lbnRzWzFdID09PSB1bmRlZmluZWQgPyB7fSA6IGFy
Z3VtZW50c1sxXTsKKworICAgICAgICB2YXIgY3VycmVudERlcHRocyA9IGRlcHRoczsKKyAgICAg
ICAgaWYgKGRlcHRocyAmJiBjb250ZXh0ICE9IGRlcHRoc1swXSkgeworICAgICAgICAgIGN1cnJl
bnREZXB0aHMgPSBbY29udGV4dF0uY29uY2F0KGRlcHRocyk7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gZm4oY29udGFpbmVyLCBjb250ZXh0LCBjb250YWluZXIuaGVscGVycywgY29udGFp
bmVyLnBhcnRpYWxzLCBvcHRpb25zLmRhdGEgfHwgZGF0YSwgYmxvY2tQYXJhbXMgJiYgW29wdGlv
bnMuYmxvY2tQYXJhbXNdLmNvbmNhdChibG9ja1BhcmFtcyksIGN1cnJlbnREZXB0aHMpOworICAg
ICAgfQorCisgICAgICBwcm9nID0gZXhlY3V0ZURlY29yYXRvcnMoZm4sIHByb2csIGNvbnRhaW5l
ciwgZGVwdGhzLCBkYXRhLCBibG9ja1BhcmFtcyk7CisKKyAgICAgIHByb2cucHJvZ3JhbSA9IGk7
CisgICAgICBwcm9nLmRlcHRoID0gZGVwdGhzID8gZGVwdGhzLmxlbmd0aCA6IDA7CisgICAgICBw
cm9nLmJsb2NrUGFyYW1zID0gZGVjbGFyZWRCbG9ja1BhcmFtcyB8fCAwOworICAgICAgcmV0dXJu
IHByb2c7CisgICAgfQorCisgICAgZnVuY3Rpb24gcmVzb2x2ZVBhcnRpYWwocGFydGlhbCwgY29u
dGV4dCwgb3B0aW9ucykgeworICAgICAgaWYgKCFwYXJ0aWFsKSB7CisgICAgICAgIGlmIChvcHRp
b25zLm5hbWUgPT09ICdAcGFydGlhbC1ibG9jaycpIHsKKyAgICAgICAgICB2YXIgZGF0YSA9IG9w
dGlvbnMuZGF0YTsKKyAgICAgICAgICB3aGlsZSAoZGF0YVsncGFydGlhbC1ibG9jayddID09PSBu
b29wKSB7CisgICAgICAgICAgICBkYXRhID0gZGF0YS5fcGFyZW50OworICAgICAgICAgIH0KKyAg
ICAgICAgICBwYXJ0aWFsID0gZGF0YVsncGFydGlhbC1ibG9jayddOworICAgICAgICAgIGRhdGFb
J3BhcnRpYWwtYmxvY2snXSA9IG5vb3A7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcGFy
dGlhbCA9IG9wdGlvbnMucGFydGlhbHNbb3B0aW9ucy5uYW1lXTsKKyAgICAgICAgfQorICAgICAg
fSBlbHNlIGlmICghcGFydGlhbC5jYWxsICYmICFvcHRpb25zLm5hbWUpIHsKKyAgICAgICAgLy8g
VGhpcyBpcyBhIGR5bmFtaWMgcGFydGlhbCB0aGF0IHJldHVybmVkIGEgc3RyaW5nCisgICAgICAg
IG9wdGlvbnMubmFtZSA9IHBhcnRpYWw7CisgICAgICAgIHBhcnRpYWwgPSBvcHRpb25zLnBhcnRp
YWxzW3BhcnRpYWxdOworICAgICAgfQorICAgICAgcmV0dXJuIHBhcnRpYWw7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gaW52b2tlUGFydGlhbChwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKSB7Cisg
ICAgICBvcHRpb25zLnBhcnRpYWwgPSB0cnVlOworICAgICAgaWYgKG9wdGlvbnMuaWRzKSB7Cisg
ICAgICAgIG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCA9IG9wdGlvbnMuaWRzWzBdIHx8IG9wdGlv
bnMuZGF0YS5jb250ZXh0UGF0aDsKKyAgICAgIH0KKworICAgICAgdmFyIHBhcnRpYWxCbG9jayA9
IHVuZGVmaW5lZDsKKyAgICAgIGlmIChvcHRpb25zLmZuICYmIG9wdGlvbnMuZm4gIT09IG5vb3Ap
IHsKKyAgICAgICAgb3B0aW9ucy5kYXRhID0gX2Jhc2UuY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRh
KTsKKyAgICAgICAgcGFydGlhbEJsb2NrID0gb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ10g
PSBvcHRpb25zLmZuOworCisgICAgICAgIGlmIChwYXJ0aWFsQmxvY2sucGFydGlhbHMpIHsKKyAg
ICAgICAgICBvcHRpb25zLnBhcnRpYWxzID0gVXRpbHMuZXh0ZW5kKHt9LCBvcHRpb25zLnBhcnRp
YWxzLCBwYXJ0aWFsQmxvY2sucGFydGlhbHMpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAg
IGlmIChwYXJ0aWFsID09PSB1bmRlZmluZWQgJiYgcGFydGlhbEJsb2NrKSB7CisgICAgICAgIHBh
cnRpYWwgPSBwYXJ0aWFsQmxvY2s7CisgICAgICB9CisKKyAgICAgIGlmIChwYXJ0aWFsID09PSB1
bmRlZmluZWQpIHsKKyAgICAgICAgdGhyb3cgbmV3IF9leGNlcHRpb24yWydkZWZhdWx0J10oJ1Ro
ZSBwYXJ0aWFsICcgKyBvcHRpb25zLm5hbWUgKyAnIGNvdWxkIG5vdCBiZSBmb3VuZCcpOworICAg
ICAgfSBlbHNlIGlmIChwYXJ0aWFsIGluc3RhbmNlb2YgRnVuY3Rpb24pIHsKKyAgICAgICAgcmV0
dXJuIHBhcnRpYWwoY29udGV4dCwgb3B0aW9ucyk7CisgICAgICB9CisgICAgfQorCisgICAgZnVu
Y3Rpb24gbm9vcCgpIHsKKyAgICAgIHJldHVybiAnJzsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBp
bml0RGF0YShjb250ZXh0LCBkYXRhKSB7CisgICAgICBpZiAoIWRhdGEgfHwgISgncm9vdCcgaW4g
ZGF0YSkpIHsKKyAgICAgICAgZGF0YSA9IGRhdGEgPyBfYmFzZS5jcmVhdGVGcmFtZShkYXRhKSA6
IHt9OworICAgICAgICBkYXRhLnJvb3QgPSBjb250ZXh0OworICAgICAgfQorICAgICAgcmV0dXJu
IGRhdGE7CisgICAgfQorCisgICAgZnVuY3Rpb24gZXhlY3V0ZURlY29yYXRvcnMoZm4sIHByb2cs
IGNvbnRhaW5lciwgZGVwdGhzLCBkYXRhLCBibG9ja1BhcmFtcykgeworICAgICAgaWYgKGZuLmRl
Y29yYXRvcikgeworICAgICAgICB2YXIgcHJvcHMgPSB7fTsKKyAgICAgICAgcHJvZyA9IGZuLmRl
Y29yYXRvcihwcm9nLCBwcm9wcywgY29udGFpbmVyLCBkZXB0aHMgJiYgZGVwdGhzWzBdLCBkYXRh
LCBibG9ja1BhcmFtcywgZGVwdGhzKTsKKyAgICAgICAgVXRpbHMuZXh0ZW5kKHByb2csIHByb3Bz
KTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBwcm9nOworICAgIH0KKworLyoqKi8gfSwKKy8qIDIz
ICovCisvKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHsKKworICAgIC8qIFdFQlBBQ0sg
VkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihnbG9iYWwpIHsvKiBnbG9iYWwgd2luZG93ICovCisg
ICAgJ3VzZSBzdHJpY3QnOworCisgICAgZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTsKKworICAg
IGV4cG9ydHNbJ2RlZmF1bHQnXSA9IGZ1bmN0aW9uIChIYW5kbGViYXJzKSB7CisgICAgICAvKiBp
c3RhbmJ1bCBpZ25vcmUgbmV4dCAqLworICAgICAgdmFyIHJvb3QgPSB0eXBlb2YgZ2xvYmFsICE9
PSAndW5kZWZpbmVkJyA/IGdsb2JhbCA6IHdpbmRvdywKKyAgICAgICAgICAkSGFuZGxlYmFycyA9
IHJvb3QuSGFuZGxlYmFyczsKKyAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovCisgICAg
ICBIYW5kbGViYXJzLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmIChyb290
LkhhbmRsZWJhcnMgPT09IEhhbmRsZWJhcnMpIHsKKyAgICAgICAgICByb290LkhhbmRsZWJhcnMg
PSAkSGFuZGxlYmFyczsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gSGFuZGxlYmFyczsKKyAg
ICAgIH07CisgICAgfTsKKworICAgIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCdd
OworICAgIC8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChleHBvcnRzLCAoZnVuY3Rp
b24oKSB7IHJldHVybiB0aGlzOyB9KCkpKSkKKworLyoqKi8gfSwKKy8qIDI0ICovCisvKioqLyBm
dW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHsKKworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIGV4
cG9ydHMuX19lc01vZHVsZSA9IHRydWU7CisgICAgdmFyIEFTVCA9IHsKKyAgICAgIC8vIFB1Ymxp
YyBBUEkgdXNlZCB0byBldmFsdWF0ZSBkZXJpdmVkIGF0dHJpYnV0ZXMgcmVnYXJkaW5nIEFTVCBu
b2RlcworICAgICAgaGVscGVyczogeworICAgICAgICAvLyBhIG11c3RhY2hlIGlzIGRlZmluaXRl
bHkgYSBoZWxwZXIgaWY6CisgICAgICAgIC8vICogaXQgaXMgYW4gZWxpZ2libGUgaGVscGVyLCBh
bmQKKyAgICAgICAgLy8gKiBpdCBoYXMgYXQgbGVhc3Qgb25lIHBhcmFtZXRlciBvciBoYXNoIHNl
Z21lbnQKKyAgICAgICAgaGVscGVyRXhwcmVzc2lvbjogZnVuY3Rpb24gaGVscGVyRXhwcmVzc2lv
bihub2RlKSB7CisgICAgICAgICAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ1N1YkV4cHJlc3Npb24n
IHx8IChub2RlLnR5cGUgPT09ICdNdXN0YWNoZVN0YXRlbWVudCcgfHwgbm9kZS50eXBlID09PSAn
QmxvY2tTdGF0ZW1lbnQnKSAmJiAhIShub2RlLnBhcmFtcyAmJiBub2RlLnBhcmFtcy5sZW5ndGgg
fHwgbm9kZS5oYXNoKTsKKyAgICAgICAgfSwKKworICAgICAgICBzY29wZWRJZDogZnVuY3Rpb24g
c2NvcGVkSWQocGF0aCkgeworICAgICAgICAgIHJldHVybiAoL15cLnx0aGlzXGIvLnRlc3QocGF0
aC5vcmlnaW5hbCkKKyAgICAgICAgICApOworICAgICAgICB9LAorCisgICAgICAgIC8vIGFuIElE
IGlzIHNpbXBsZSBpZiBpdCBvbmx5IGhhcyBvbmUgcGFydCwgYW5kIHRoYXQgcGFydCBpcyBub3QK
KyAgICAgICAgLy8gYC4uYCBvciBgdGhpc2AuCisgICAgICAgIHNpbXBsZUlkOiBmdW5jdGlvbiBz
aW1wbGVJZChwYXRoKSB7CisgICAgICAgICAgcmV0dXJuIHBhdGgucGFydHMubGVuZ3RoID09PSAx
ICYmICFBU1QuaGVscGVycy5zY29wZWRJZChwYXRoKSAmJiAhcGF0aC5kZXB0aDsKKyAgICAgICAg
fQorICAgICAgfQorICAgIH07CisKKyAgICAvLyBNdXN0IGJlIGV4cG9ydGVkIGFzIGFuIG9iamVj
dCByYXRoZXIgdGhhbiB0aGUgcm9vdCBvZiB0aGUgbW9kdWxlIGFzIHRoZSBqaXNvbiBsZXhlcgor
ICAgIC8vIG11c3QgbW9kaWZ5IHRoZSBvYmplY3QgdG8gb3BlcmF0ZSBwcm9wZXJseS4KKyAgICBl
eHBvcnRzWydkZWZhdWx0J10gPSBBU1Q7CisgICAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydk
ZWZhdWx0J107CisKKy8qKiovIH0sCisvKiAyNSAqLworLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBl
eHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyAgICAndXNlIHN0cmljdCc7CisKKyAg
ICB2YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18oMSlbJ2Rl
ZmF1bHQnXTsKKworICAgIHZhciBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCA9IF9fd2VicGFja19y
ZXF1aXJlX18oMylbJ2RlZmF1bHQnXTsKKworICAgIGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7
CisgICAgZXhwb3J0cy5wYXJzZSA9IHBhcnNlOworCisgICAgdmFyIF9wYXJzZXIgPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKDI2KTsKKworICAgIHZhciBfcGFyc2VyMiA9IF9pbnRlcm9wUmVxdWlyZURl
ZmF1bHQoX3BhcnNlcik7CisKKyAgICB2YXIgX3doaXRlc3BhY2VDb250cm9sID0gX193ZWJwYWNr
X3JlcXVpcmVfXygyNyk7CisKKyAgICB2YXIgX3doaXRlc3BhY2VDb250cm9sMiA9IF9pbnRlcm9w
UmVxdWlyZURlZmF1bHQoX3doaXRlc3BhY2VDb250cm9sKTsKKworICAgIHZhciBfaGVscGVycyA9
IF9fd2VicGFja19yZXF1aXJlX18oMjkpOworCisgICAgdmFyIEhlbHBlcnMgPSBfaW50ZXJvcFJl
cXVpcmVXaWxkY2FyZChfaGVscGVycyk7CisKKyAgICB2YXIgX3V0aWxzID0gX193ZWJwYWNrX3Jl
cXVpcmVfXyg1KTsKKworICAgIGV4cG9ydHMucGFyc2VyID0gX3BhcnNlcjJbJ2RlZmF1bHQnXTsK
KworICAgIHZhciB5eSA9IHt9OworICAgIF91dGlscy5leHRlbmQoeXksIEhlbHBlcnMpOworCisg
ICAgZnVuY3Rpb24gcGFyc2UoaW5wdXQsIG9wdGlvbnMpIHsKKyAgICAgIC8vIEp1c3QgcmV0dXJu
IGlmIGFuIGFscmVhZHktY29tcGlsZWQgQVNUIHdhcyBwYXNzZWQgaW4uCisgICAgICBpZiAoaW5w
dXQudHlwZSA9PT0gJ1Byb2dyYW0nKSB7CisgICAgICAgIHJldHVybiBpbnB1dDsKKyAgICAgIH0K
KworICAgICAgX3BhcnNlcjJbJ2RlZmF1bHQnXS55eSA9IHl5OworCisgICAgICAvLyBBbHRlcmlu
ZyB0aGUgc2hhcmVkIG9iamVjdCBoZXJlLCBidXQgdGhpcyBpcyBvayBhcyBwYXJzZXIgaXMgYSBz
eW5jIG9wZXJhdGlvbgorICAgICAgeXkubG9jSW5mbyA9IGZ1bmN0aW9uIChsb2NJbmZvKSB7Cisg
ICAgICAgIHJldHVybiBuZXcgeXkuU291cmNlTG9jYXRpb24ob3B0aW9ucyAmJiBvcHRpb25zLnNy
Y05hbWUsIGxvY0luZm8pOworICAgICAgfTsKKworICAgICAgdmFyIHN0cmlwID0gbmV3IF93aGl0
ZXNwYWNlQ29udHJvbDJbJ2RlZmF1bHQnXShvcHRpb25zKTsKKyAgICAgIHJldHVybiBzdHJpcC5h
Y2NlcHQoX3BhcnNlcjJbJ2RlZmF1bHQnXS5wYXJzZShpbnB1dCkpOworICAgIH0KKworLyoqKi8g
fSwKKy8qIDI2ICovCisvKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHsKKworICAgIC8q
IGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovCisgICAgLyogSmlzb24gZ2VuZXJhdGVkIHBhcnNlciAq
LworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHZhciBoYW5kbGViYXJzID0gKGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgdmFyIHBhcnNlciA9IHsgdHJhY2U6IGZ1bmN0aW9uIHRyYWNlKCkge30sCisg
ICAgICAgICAgICB5eToge30sCisgICAgICAgICAgICBzeW1ib2xzXzogeyAiZXJyb3IiOiAyLCAi
cm9vdCI6IDMsICJwcm9ncmFtIjogNCwgIkVPRiI6IDUsICJwcm9ncmFtX3JlcGV0aXRpb24wIjog
NiwgInN0YXRlbWVudCI6IDcsICJtdXN0YWNoZSI6IDgsICJibG9jayI6IDksICJyYXdCbG9jayI6
IDEwLCAicGFydGlhbCI6IDExLCAicGFydGlhbEJsb2NrIjogMTIsICJjb250ZW50IjogMTMsICJD
T01NRU5UIjogMTQsICJDT05URU5UIjogMTUsICJvcGVuUmF3QmxvY2siOiAxNiwgInJhd0Jsb2Nr
X3JlcGV0aXRpb25fcGx1czAiOiAxNywgIkVORF9SQVdfQkxPQ0siOiAxOCwgIk9QRU5fUkFXX0JM
T0NLIjogMTksICJoZWxwZXJOYW1lIjogMjAsICJvcGVuUmF3QmxvY2tfcmVwZXRpdGlvbjAiOiAy
MSwgIm9wZW5SYXdCbG9ja19vcHRpb24wIjogMjIsICJDTE9TRV9SQVdfQkxPQ0siOiAyMywgIm9w
ZW5CbG9jayI6IDI0LCAiYmxvY2tfb3B0aW9uMCI6IDI1LCAiY2xvc2VCbG9jayI6IDI2LCAib3Bl
bkludmVyc2UiOiAyNywgImJsb2NrX29wdGlvbjEiOiAyOCwgIk9QRU5fQkxPQ0siOiAyOSwgIm9w
ZW5CbG9ja19yZXBldGl0aW9uMCI6IDMwLCAib3BlbkJsb2NrX29wdGlvbjAiOiAzMSwgIm9wZW5C
bG9ja19vcHRpb24xIjogMzIsICJDTE9TRSI6IDMzLCAiT1BFTl9JTlZFUlNFIjogMzQsICJvcGVu
SW52ZXJzZV9yZXBldGl0aW9uMCI6IDM1LCAib3BlbkludmVyc2Vfb3B0aW9uMCI6IDM2LCAib3Bl
bkludmVyc2Vfb3B0aW9uMSI6IDM3LCAib3BlbkludmVyc2VDaGFpbiI6IDM4LCAiT1BFTl9JTlZF
UlNFX0NIQUlOIjogMzksICJvcGVuSW52ZXJzZUNoYWluX3JlcGV0aXRpb24wIjogNDAsICJvcGVu
SW52ZXJzZUNoYWluX29wdGlvbjAiOiA0MSwgIm9wZW5JbnZlcnNlQ2hhaW5fb3B0aW9uMSI6IDQy
LCAiaW52ZXJzZUFuZFByb2dyYW0iOiA0MywgIklOVkVSU0UiOiA0NCwgImludmVyc2VDaGFpbiI6
IDQ1LCAiaW52ZXJzZUNoYWluX29wdGlvbjAiOiA0NiwgIk9QRU5fRU5EQkxPQ0siOiA0NywgIk9Q
RU4iOiA0OCwgIm11c3RhY2hlX3JlcGV0aXRpb24wIjogNDksICJtdXN0YWNoZV9vcHRpb24wIjog
NTAsICJPUEVOX1VORVNDQVBFRCI6IDUxLCAibXVzdGFjaGVfcmVwZXRpdGlvbjEiOiA1MiwgIm11
c3RhY2hlX29wdGlvbjEiOiA1MywgIkNMT1NFX1VORVNDQVBFRCI6IDU0LCAiT1BFTl9QQVJUSUFM
IjogNTUsICJwYXJ0aWFsTmFtZSI6IDU2LCAicGFydGlhbF9yZXBldGl0aW9uMCI6IDU3LCAicGFy
dGlhbF9vcHRpb24wIjogNTgsICJvcGVuUGFydGlhbEJsb2NrIjogNTksICJPUEVOX1BBUlRJQUxf
QkxPQ0siOiA2MCwgIm9wZW5QYXJ0aWFsQmxvY2tfcmVwZXRpdGlvbjAiOiA2MSwgIm9wZW5QYXJ0
aWFsQmxvY2tfb3B0aW9uMCI6IDYyLCAicGFyYW0iOiA2MywgInNleHByIjogNjQsICJPUEVOX1NF
WFBSIjogNjUsICJzZXhwcl9yZXBldGl0aW9uMCI6IDY2LCAic2V4cHJfb3B0aW9uMCI6IDY3LCAi
Q0xPU0VfU0VYUFIiOiA2OCwgImhhc2giOiA2OSwgImhhc2hfcmVwZXRpdGlvbl9wbHVzMCI6IDcw
LCAiaGFzaFNlZ21lbnQiOiA3MSwgIklEIjogNzIsICJFUVVBTFMiOiA3MywgImJsb2NrUGFyYW1z
IjogNzQsICJPUEVOX0JMT0NLX1BBUkFNUyI6IDc1LCAiYmxvY2tQYXJhbXNfcmVwZXRpdGlvbl9w
bHVzMCI6IDc2LCAiQ0xPU0VfQkxPQ0tfUEFSQU1TIjogNzcsICJwYXRoIjogNzgsICJkYXRhTmFt
ZSI6IDc5LCAiU1RSSU5HIjogODAsICJOVU1CRVIiOiA4MSwgIkJPT0xFQU4iOiA4MiwgIlVOREVG
SU5FRCI6IDgzLCAiTlVMTCI6IDg0LCAiREFUQSI6IDg1LCAicGF0aFNlZ21lbnRzIjogODYsICJT
RVAiOiA4NywgIiRhY2NlcHQiOiAwLCAiJGVuZCI6IDEgfSwKKyAgICAgICAgICAgIHRlcm1pbmFs
c186IHsgMjogImVycm9yIiwgNTogIkVPRiIsIDE0OiAiQ09NTUVOVCIsIDE1OiAiQ09OVEVOVCIs
IDE4OiAiRU5EX1JBV19CTE9DSyIsIDE5OiAiT1BFTl9SQVdfQkxPQ0siLCAyMzogIkNMT1NFX1JB
V19CTE9DSyIsIDI5OiAiT1BFTl9CTE9DSyIsIDMzOiAiQ0xPU0UiLCAzNDogIk9QRU5fSU5WRVJT
RSIsIDM5OiAiT1BFTl9JTlZFUlNFX0NIQUlOIiwgNDQ6ICJJTlZFUlNFIiwgNDc6ICJPUEVOX0VO
REJMT0NLIiwgNDg6ICJPUEVOIiwgNTE6ICJPUEVOX1VORVNDQVBFRCIsIDU0OiAiQ0xPU0VfVU5F
U0NBUEVEIiwgNTU6ICJPUEVOX1BBUlRJQUwiLCA2MDogIk9QRU5fUEFSVElBTF9CTE9DSyIsIDY1
OiAiT1BFTl9TRVhQUiIsIDY4OiAiQ0xPU0VfU0VYUFIiLCA3MjogIklEIiwgNzM6ICJFUVVBTFMi
LCA3NTogIk9QRU5fQkxPQ0tfUEFSQU1TIiwgNzc6ICJDTE9TRV9CTE9DS19QQVJBTVMiLCA4MDog
IlNUUklORyIsIDgxOiAiTlVNQkVSIiwgODI6ICJCT09MRUFOIiwgODM6ICJVTkRFRklORUQiLCA4
NDogIk5VTEwiLCA4NTogIkRBVEEiLCA4NzogIlNFUCIgfSwKKyAgICAgICAgICAgIHByb2R1Y3Rp
b25zXzogWzAsIFszLCAyXSwgWzQsIDFdLCBbNywgMV0sIFs3LCAxXSwgWzcsIDFdLCBbNywgMV0s
IFs3LCAxXSwgWzcsIDFdLCBbNywgMV0sIFsxMywgMV0sIFsxMCwgM10sIFsxNiwgNV0sIFs5LCA0
XSwgWzksIDRdLCBbMjQsIDZdLCBbMjcsIDZdLCBbMzgsIDZdLCBbNDMsIDJdLCBbNDUsIDNdLCBb
NDUsIDFdLCBbMjYsIDNdLCBbOCwgNV0sIFs4LCA1XSwgWzExLCA1XSwgWzEyLCAzXSwgWzU5LCA1
XSwgWzYzLCAxXSwgWzYzLCAxXSwgWzY0LCA1XSwgWzY5LCAxXSwgWzcxLCAzXSwgWzc0LCAzXSwg
WzIwLCAxXSwgWzIwLCAxXSwgWzIwLCAxXSwgWzIwLCAxXSwgWzIwLCAxXSwgWzIwLCAxXSwgWzIw
LCAxXSwgWzU2LCAxXSwgWzU2LCAxXSwgWzc5LCAyXSwgWzc4LCAxXSwgWzg2LCAzXSwgWzg2LCAx
XSwgWzYsIDBdLCBbNiwgMl0sIFsxNywgMV0sIFsxNywgMl0sIFsyMSwgMF0sIFsyMSwgMl0sIFsy
MiwgMF0sIFsyMiwgMV0sIFsyNSwgMF0sIFsyNSwgMV0sIFsyOCwgMF0sIFsyOCwgMV0sIFszMCwg
MF0sIFszMCwgMl0sIFszMSwgMF0sIFszMSwgMV0sIFszMiwgMF0sIFszMiwgMV0sIFszNSwgMF0s
IFszNSwgMl0sIFszNiwgMF0sIFszNiwgMV0sIFszNywgMF0sIFszNywgMV0sIFs0MCwgMF0sIFs0
MCwgMl0sIFs0MSwgMF0sIFs0MSwgMV0sIFs0MiwgMF0sIFs0MiwgMV0sIFs0NiwgMF0sIFs0Niwg
MV0sIFs0OSwgMF0sIFs0OSwgMl0sIFs1MCwgMF0sIFs1MCwgMV0sIFs1MiwgMF0sIFs1MiwgMl0s
IFs1MywgMF0sIFs1MywgMV0sIFs1NywgMF0sIFs1NywgMl0sIFs1OCwgMF0sIFs1OCwgMV0sIFs2
MSwgMF0sIFs2MSwgMl0sIFs2MiwgMF0sIFs2MiwgMV0sIFs2NiwgMF0sIFs2NiwgMl0sIFs2Nywg
MF0sIFs2NywgMV0sIFs3MCwgMV0sIFs3MCwgMl0sIFs3NiwgMV0sIFs3NiwgMl1dLAorICAgICAg
ICAgICAgcGVyZm9ybUFjdGlvbjogZnVuY3Rpb24gYW5vbnltb3VzKHl5dGV4dCwgeXlsZW5nLCB5
eWxpbmVubywgeXksIHl5c3RhdGUsICQkLCBfJAorICAgICAgICAgICAgLyoqLykgeworCisgICAg
ICAgICAgICAgICAgdmFyICQwID0gJCQubGVuZ3RoIC0gMTsKKyAgICAgICAgICAgICAgICBzd2l0
Y2ggKHl5c3RhdGUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuICQkWyQwIC0gMV07CisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy4kID0geXkucHJlcGFyZVByb2dyYW0oJCRbJDBdKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLiQgPSAkJFskMF07CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy4kID0gJCRbJDBdOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9ICQk
WyQwXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICBjYXNlIDY6CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQgPSAkJFskMF07CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA3Ogor
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kID0gJCRbJDBdOworICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDk6CisgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLiQgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0NvbW1lbnRT
dGF0ZW1lbnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB5eS5zdHJpcENv
bW1lbnQoJCRbJDBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpcDogeXkuc3Ry
aXBGbGFncygkJFskMF0sICQkWyQwXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9j
OiB5eS5sb2NJbmZvKHRoaXMuXyQpCisgICAgICAgICAgICAgICAgICAgICAgICB9OworCisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDoK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9IHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0eXBlOiAnQ29udGVudFN0YXRlbWVudCcsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3JpZ2luYWw6ICQkWyQwXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1
ZTogJCRbJDBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYzogeXkubG9jSW5mbyh0
aGlzLl8kKQorICAgICAgICAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTE6CisgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLiQgPSB5eS5wcmVwYXJlUmF3QmxvY2soJCRbJDAgLSAyXSwgJCRbJDAg
LSAxXSwgJCRbJDBdLCB0aGlzLl8kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICBjYXNlIDEyOgorICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy4kID0geyBwYXRoOiAkJFskMCAtIDNdLCBwYXJhbXM6ICQkWyQwIC0gMl0sIGhhc2g6ICQkWyQw
IC0gMV0gfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICBjYXNlIDEzOgorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kID0geXkucHJlcGFy
ZUJsb2NrKCQkWyQwIC0gM10sICQkWyQwIC0gMl0sICQkWyQwIC0gMV0sICQkWyQwXSwgZmFsc2Us
IHRoaXMuXyQpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgMTQ6CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQgPSB5eS5wcmVw
YXJlQmxvY2soJCRbJDAgLSAzXSwgJCRbJDAgLSAyXSwgJCRbJDAgLSAxXSwgJCRbJDBdLCB0cnVl
LCB0aGlzLl8kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICBjYXNlIDE1OgorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kID0geyBvcGVu
OiAkJFskMCAtIDVdLCBwYXRoOiAkJFskMCAtIDRdLCBwYXJhbXM6ICQkWyQwIC0gM10sIGhhc2g6
ICQkWyQwIC0gMl0sIGJsb2NrUGFyYW1zOiAkJFskMCAtIDFdLCBzdHJpcDogeXkuc3RyaXBGbGFn
cygkJFskMCAtIDVdLCAkJFskMF0pIH07CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSAxNjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMuJCA9IHsgcGF0aDogJCRbJDAgLSA0XSwgcGFyYW1zOiAkJFskMCAtIDNdLCBoYXNoOiAkJFsk
MCAtIDJdLCBibG9ja1BhcmFtczogJCRbJDAgLSAxXSwgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRb
JDAgLSA1XSwgJCRbJDBdKSB9OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgMTc6CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQg
PSB7IHBhdGg6ICQkWyQwIC0gNF0sIHBhcmFtczogJCRbJDAgLSAzXSwgaGFzaDogJCRbJDAgLSAy
XSwgYmxvY2tQYXJhbXM6ICQkWyQwIC0gMV0sIHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwIC0g
NV0sICQkWyQwXSkgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICBjYXNlIDE4OgorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kID0geyBz
dHJpcDogeXkuc3RyaXBGbGFncygkJFskMCAtIDFdLCAkJFskMCAtIDFdKSwgcHJvZ3JhbTogJCRb
JDBdIH07CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSAxOToKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbnZlcnNlID0geXkucHJl
cGFyZUJsb2NrKCQkWyQwIC0gMl0sICQkWyQwIC0gMV0sICQkWyQwXSwgJCRbJDBdLCBmYWxzZSwg
dGhpcy5fJCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbSA9IHl5LnByZXBh
cmVQcm9ncmFtKFtpbnZlcnNlXSwgJCRbJDAgLSAxXS5sb2MpOworICAgICAgICAgICAgICAgICAg
ICAgICAgcHJvZ3JhbS5jaGFpbmVkID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy4kID0geyBzdHJpcDogJCRbJDAgLSAyXS5zdHJpcCwgcHJvZ3JhbTogcHJvZ3JhbSwgY2hh
aW46IHRydWUgfTsKKworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgMjA6CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQgPSAkJFsk
MF07CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSAyMToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9IHsgcGF0aDogJCRbJDAg
LSAxXSwgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAgLSAyXSwgJCRbJDBdKSB9OworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjI6Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQgPSB5eS5wcmVwYXJlTXVzdGFjaGUoJCRbJDAg
LSAzXSwgJCRbJDAgLSAyXSwgJCRbJDAgLSAxXSwgJCRbJDAgLSA0XSwgeXkuc3RyaXBGbGFncygk
JFskMCAtIDRdLCAkJFskMF0pLCB0aGlzLl8kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDIzOgorICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy4kID0geXkucHJlcGFyZU11c3RhY2hlKCQkWyQwIC0gM10sICQkWyQwIC0gMl0sICQk
WyQwIC0gMV0sICQkWyQwIC0gNF0sIHl5LnN0cmlwRmxhZ3MoJCRbJDAgLSA0XSwgJCRbJDBdKSwg
dGhpcy5fJCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSAyNDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9IHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnUGFydGlhbFN0YXRlbWVudCcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbmFtZTogJCRbJDAgLSAzXSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJhbXM6ICQkWyQwIC0gMl0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaGFzaDogJCRbJDAgLSAxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnQ6
ICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQk
WyQwIC0gNF0sICQkWyQwXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jOiB5eS5s
b2NJbmZvKHRoaXMuXyQpCisgICAgICAgICAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyNToKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9IHl5LnByZXBhcmVQYXJ0aWFsQmxvY2soJCRbJDAg
LSAyXSwgJCRbJDAgLSAxXSwgJCRbJDBdLCB0aGlzLl8kKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDI2OgorICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy4kID0geyBwYXRoOiAkJFskMCAtIDNdLCBwYXJhbXM6ICQkWyQwIC0gMl0s
IGhhc2g6ICQkWyQwIC0gMV0sIHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwIC0gNF0sICQkWyQw
XSkgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICBjYXNlIDI3OgorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kID0gJCRbJDBdOworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjg6
CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQgPSAkJFskMF07CisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOToKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMuJCA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
eXBlOiAnU3ViRXhwcmVzc2lvbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDog
JCRbJDAgLSAzXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6ICQkWyQwIC0g
Ml0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaDogJCRbJDAgLSAxXSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsb2M6IHl5LmxvY0luZm8odGhpcy5fJCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICBjYXNlIDMwOgorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4k
ID0geyB0eXBlOiAnSGFzaCcsIHBhaXJzOiAkJFskMF0sIGxvYzogeXkubG9jSW5mbyh0aGlzLl8k
KSB9OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgMzE6CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQgPSB7IHR5cGU6ICdIYXNo
UGFpcicsIGtleTogeXkuaWQoJCRbJDAgLSAyXSksIHZhbHVlOiAkJFskMF0sIGxvYzogeXkubG9j
SW5mbyh0aGlzLl8kKSB9OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgMzI6CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQgPSB5
eS5pZCgkJFskMCAtIDFdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICBjYXNlIDMzOgorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kID0g
JCRbJDBdOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgMzQ6CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQgPSAkJFskMF07Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAz
NToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9IHsgdHlwZTogJ1N0cmluZ0xpdGVy
YWwnLCB2YWx1ZTogJCRbJDBdLCBvcmlnaW5hbDogJCRbJDBdLCBsb2M6IHl5LmxvY0luZm8odGhp
cy5fJCkgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICBjYXNlIDM2OgorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kID0geyB0eXBlOiAn
TnVtYmVyTGl0ZXJhbCcsIHZhbHVlOiBOdW1iZXIoJCRbJDBdKSwgb3JpZ2luYWw6IE51bWJlcigk
JFskMF0pLCBsb2M6IHl5LmxvY0luZm8odGhpcy5fJCkgfTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDM3OgorICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy4kID0geyB0eXBlOiAnQm9vbGVhbkxpdGVyYWwnLCB2YWx1ZTogJCRbJDBd
ID09PSAndHJ1ZScsIG9yaWdpbmFsOiAkJFskMF0gPT09ICd0cnVlJywgbG9jOiB5eS5sb2NJbmZv
KHRoaXMuXyQpIH07CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSAzODoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9IHsgdHlw
ZTogJ1VuZGVmaW5lZExpdGVyYWwnLCBvcmlnaW5hbDogdW5kZWZpbmVkLCB2YWx1ZTogdW5kZWZp
bmVkLCBsb2M6IHl5LmxvY0luZm8odGhpcy5fJCkgfTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDM5OgorICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy4kID0geyB0eXBlOiAnTnVsbExpdGVyYWwnLCBvcmlnaW5hbDogbnVsbCwgdmFs
dWU6IG51bGwsIGxvYzogeXkubG9jSW5mbyh0aGlzLl8kKSB9OworICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDA6CisgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLiQgPSAkJFskMF07CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0MToKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMuJCA9ICQkWyQwXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICBjYXNlIDQyOgorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kID0g
eXkucHJlcGFyZVBhdGgodHJ1ZSwgJCRbJDBdLCB0aGlzLl8kKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDQzOgorICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy4kID0geXkucHJlcGFyZVBhdGgoZmFsc2UsICQkWyQwXSwgdGhpcy5f
JCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSA0NDoKKyAgICAgICAgICAgICAgICAgICAgICAgICQkWyQwIC0gMl0ucHVzaCh7IHBhcnQ6
IHl5LmlkKCQkWyQwXSksIG9yaWdpbmFsOiAkJFskMF0sIHNlcGFyYXRvcjogJCRbJDAgLSAxXSB9
KTt0aGlzLiQgPSAkJFskMCAtIDJdOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgNDU6CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
LiQgPSBbeyBwYXJ0OiB5eS5pZCgkJFskMF0pLCBvcmlnaW5hbDogJCRbJDBdIH1dOworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDY6Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDQ3OgorICAgICAgICAgICAgICAg
ICAgICAgICAgJCRbJDAgLSAxXS5wdXNoKCQkWyQwXSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0ODoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMuJCA9IFskJFskMF1dOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDk6CisgICAgICAgICAgICAgICAgICAgICAgICAk
JFskMCAtIDFdLnB1c2goJCRbJDBdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICBjYXNlIDUwOgorICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy4kID0gW107CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSA1MToKKyAgICAgICAgICAgICAgICAgICAgICAgICQkWyQwIC0gMV0ucHVzaCgk
JFskMF0pOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgNTg6CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQgPSBbXTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDU5Ogor
ICAgICAgICAgICAgICAgICAgICAgICAgJCRbJDAgLSAxXS5wdXNoKCQkWyQwXSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA2NDoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9IFtdOworICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgNjU6CisgICAgICAgICAgICAgICAg
ICAgICAgICAkJFskMCAtIDFdLnB1c2goJCRbJDBdKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDcwOgorICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy4kID0gW107CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSA3MToKKyAgICAgICAgICAgICAgICAgICAgICAgICQkWyQwIC0g
MV0ucHVzaCgkJFskMF0pOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgNzg6CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQgPSBb
XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBj
YXNlIDc5OgorICAgICAgICAgICAgICAgICAgICAgICAgJCRbJDAgLSAxXS5wdXNoKCQkWyQwXSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSA4MjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9IFtdOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgODM6CisgICAgICAg
ICAgICAgICAgICAgICAgICAkJFskMCAtIDFdLnB1c2goJCRbJDBdKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDg2OgorICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy4kID0gW107CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA4NzoKKyAgICAgICAgICAgICAgICAgICAgICAg
ICQkWyQwIC0gMV0ucHVzaCgkJFskMF0pOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgOTA6CisgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLiQgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICBjYXNlIDkxOgorICAgICAgICAgICAgICAgICAgICAgICAgJCRbJDAgLSAxXS5wdXNo
KCQkWyQwXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSA5NDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9IFtdOworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgOTU6
CisgICAgICAgICAgICAgICAgICAgICAgICAkJFskMCAtIDFdLnB1c2goJCRbJDBdKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDk4Ogor
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kID0gWyQkWyQwXV07CisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA5OToKKyAgICAgICAg
ICAgICAgICAgICAgICAgICQkWyQwIC0gMV0ucHVzaCgkJFskMF0pOworICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTAwOgorICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy4kID0gWyQkWyQwXV07CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDE6CisgICAgICAgICAgICAgICAg
ICAgICAgICAkJFskMCAtIDFdLnB1c2goJCRbJDBdKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB0
YWJsZTogW3sgMzogMSwgNDogMiwgNTogWzIsIDQ2XSwgNjogMywgMTQ6IFsyLCA0Nl0sIDE1OiBb
MiwgNDZdLCAxOTogWzIsIDQ2XSwgMjk6IFsyLCA0Nl0sIDM0OiBbMiwgNDZdLCA0ODogWzIsIDQ2
XSwgNTE6IFsyLCA0Nl0sIDU1OiBbMiwgNDZdLCA2MDogWzIsIDQ2XSB9LCB7IDE6IFszXSB9LCB7
IDU6IFsxLCA0XSB9LCB7IDU6IFsyLCAyXSwgNzogNSwgODogNiwgOTogNywgMTA6IDgsIDExOiA5
LCAxMjogMTAsIDEzOiAxMSwgMTQ6IFsxLCAxMl0sIDE1OiBbMSwgMjBdLCAxNjogMTcsIDE5OiBb
MSwgMjNdLCAyNDogMTUsIDI3OiAxNiwgMjk6IFsxLCAyMV0sIDM0OiBbMSwgMjJdLCAzOTogWzIs
IDJdLCA0NDogWzIsIDJdLCA0NzogWzIsIDJdLCA0ODogWzEsIDEzXSwgNTE6IFsxLCAxNF0sIDU1
OiBbMSwgMThdLCA1OTogMTksIDYwOiBbMSwgMjRdIH0sIHsgMTogWzIsIDFdIH0sIHsgNTogWzIs
IDQ3XSwgMTQ6IFsyLCA0N10sIDE1OiBbMiwgNDddLCAxOTogWzIsIDQ3XSwgMjk6IFsyLCA0N10s
IDM0OiBbMiwgNDddLCAzOTogWzIsIDQ3XSwgNDQ6IFsyLCA0N10sIDQ3OiBbMiwgNDddLCA0ODog
WzIsIDQ3XSwgNTE6IFsyLCA0N10sIDU1OiBbMiwgNDddLCA2MDogWzIsIDQ3XSB9LCB7IDU6IFsy
LCAzXSwgMTQ6IFsyLCAzXSwgMTU6IFsyLCAzXSwgMTk6IFsyLCAzXSwgMjk6IFsyLCAzXSwgMzQ6
IFsyLCAzXSwgMzk6IFsyLCAzXSwgNDQ6IFsyLCAzXSwgNDc6IFsyLCAzXSwgNDg6IFsyLCAzXSwg
NTE6IFsyLCAzXSwgNTU6IFsyLCAzXSwgNjA6IFsyLCAzXSB9LCB7IDU6IFsyLCA0XSwgMTQ6IFsy
LCA0XSwgMTU6IFsyLCA0XSwgMTk6IFsyLCA0XSwgMjk6IFsyLCA0XSwgMzQ6IFsyLCA0XSwgMzk6
IFsyLCA0XSwgNDQ6IFsyLCA0XSwgNDc6IFsyLCA0XSwgNDg6IFsyLCA0XSwgNTE6IFsyLCA0XSwg
NTU6IFsyLCA0XSwgNjA6IFsyLCA0XSB9LCB7IDU6IFsyLCA1XSwgMTQ6IFsyLCA1XSwgMTU6IFsy
LCA1XSwgMTk6IFsyLCA1XSwgMjk6IFsyLCA1XSwgMzQ6IFsyLCA1XSwgMzk6IFsyLCA1XSwgNDQ6
IFsyLCA1XSwgNDc6IFsyLCA1XSwgNDg6IFsyLCA1XSwgNTE6IFsyLCA1XSwgNTU6IFsyLCA1XSwg
NjA6IFsyLCA1XSB9LCB7IDU6IFsyLCA2XSwgMTQ6IFsyLCA2XSwgMTU6IFsyLCA2XSwgMTk6IFsy
LCA2XSwgMjk6IFsyLCA2XSwgMzQ6IFsyLCA2XSwgMzk6IFsyLCA2XSwgNDQ6IFsyLCA2XSwgNDc6
IFsyLCA2XSwgNDg6IFsyLCA2XSwgNTE6IFsyLCA2XSwgNTU6IFsyLCA2XSwgNjA6IFsyLCA2XSB9
LCB7IDU6IFsyLCA3XSwgMTQ6IFsyLCA3XSwgMTU6IFsyLCA3XSwgMTk6IFsyLCA3XSwgMjk6IFsy
LCA3XSwgMzQ6IFsyLCA3XSwgMzk6IFsyLCA3XSwgNDQ6IFsyLCA3XSwgNDc6IFsyLCA3XSwgNDg6
IFsyLCA3XSwgNTE6IFsyLCA3XSwgNTU6IFsyLCA3XSwgNjA6IFsyLCA3XSB9LCB7IDU6IFsyLCA4
XSwgMTQ6IFsyLCA4XSwgMTU6IFsyLCA4XSwgMTk6IFsyLCA4XSwgMjk6IFsyLCA4XSwgMzQ6IFsy
LCA4XSwgMzk6IFsyLCA4XSwgNDQ6IFsyLCA4XSwgNDc6IFsyLCA4XSwgNDg6IFsyLCA4XSwgNTE6
IFsyLCA4XSwgNTU6IFsyLCA4XSwgNjA6IFsyLCA4XSB9LCB7IDU6IFsyLCA5XSwgMTQ6IFsyLCA5
XSwgMTU6IFsyLCA5XSwgMTk6IFsyLCA5XSwgMjk6IFsyLCA5XSwgMzQ6IFsyLCA5XSwgMzk6IFsy
LCA5XSwgNDQ6IFsyLCA5XSwgNDc6IFsyLCA5XSwgNDg6IFsyLCA5XSwgNTE6IFsyLCA5XSwgNTU6
IFsyLCA5XSwgNjA6IFsyLCA5XSB9LCB7IDIwOiAyNSwgNzI6IFsxLCAzNV0sIDc4OiAyNiwgNzk6
IDI3LCA4MDogWzEsIDI4XSwgODE6IFsxLCAyOV0sIDgyOiBbMSwgMzBdLCA4MzogWzEsIDMxXSwg
ODQ6IFsxLCAzMl0sIDg1OiBbMSwgMzRdLCA4NjogMzMgfSwgeyAyMDogMzYsIDcyOiBbMSwgMzVd
LCA3ODogMjYsIDc5OiAyNywgODA6IFsxLCAyOF0sIDgxOiBbMSwgMjldLCA4MjogWzEsIDMwXSwg
ODM6IFsxLCAzMV0sIDg0OiBbMSwgMzJdLCA4NTogWzEsIDM0XSwgODY6IDMzIH0sIHsgNDogMzcs
IDY6IDMsIDE0OiBbMiwgNDZdLCAxNTogWzIsIDQ2XSwgMTk6IFsyLCA0Nl0sIDI5OiBbMiwgNDZd
LCAzNDogWzIsIDQ2XSwgMzk6IFsyLCA0Nl0sIDQ0OiBbMiwgNDZdLCA0NzogWzIsIDQ2XSwgNDg6
IFsyLCA0Nl0sIDUxOiBbMiwgNDZdLCA1NTogWzIsIDQ2XSwgNjA6IFsyLCA0Nl0gfSwgeyA0OiAz
OCwgNjogMywgMTQ6IFsyLCA0Nl0sIDE1OiBbMiwgNDZdLCAxOTogWzIsIDQ2XSwgMjk6IFsyLCA0
Nl0sIDM0OiBbMiwgNDZdLCA0NDogWzIsIDQ2XSwgNDc6IFsyLCA0Nl0sIDQ4OiBbMiwgNDZdLCA1
MTogWzIsIDQ2XSwgNTU6IFsyLCA0Nl0sIDYwOiBbMiwgNDZdIH0sIHsgMTM6IDQwLCAxNTogWzEs
IDIwXSwgMTc6IDM5IH0sIHsgMjA6IDQyLCA1NjogNDEsIDY0OiA0MywgNjU6IFsxLCA0NF0sIDcy
OiBbMSwgMzVdLCA3ODogMjYsIDc5OiAyNywgODA6IFsxLCAyOF0sIDgxOiBbMSwgMjldLCA4Mjog
WzEsIDMwXSwgODM6IFsxLCAzMV0sIDg0OiBbMSwgMzJdLCA4NTogWzEsIDM0XSwgODY6IDMzIH0s
IHsgNDogNDUsIDY6IDMsIDE0OiBbMiwgNDZdLCAxNTogWzIsIDQ2XSwgMTk6IFsyLCA0Nl0sIDI5
OiBbMiwgNDZdLCAzNDogWzIsIDQ2XSwgNDc6IFsyLCA0Nl0sIDQ4OiBbMiwgNDZdLCA1MTogWzIs
IDQ2XSwgNTU6IFsyLCA0Nl0sIDYwOiBbMiwgNDZdIH0sIHsgNTogWzIsIDEwXSwgMTQ6IFsyLCAx
MF0sIDE1OiBbMiwgMTBdLCAxODogWzIsIDEwXSwgMTk6IFsyLCAxMF0sIDI5OiBbMiwgMTBdLCAz
NDogWzIsIDEwXSwgMzk6IFsyLCAxMF0sIDQ0OiBbMiwgMTBdLCA0NzogWzIsIDEwXSwgNDg6IFsy
LCAxMF0sIDUxOiBbMiwgMTBdLCA1NTogWzIsIDEwXSwgNjA6IFsyLCAxMF0gfSwgeyAyMDogNDYs
IDcyOiBbMSwgMzVdLCA3ODogMjYsIDc5OiAyNywgODA6IFsxLCAyOF0sIDgxOiBbMSwgMjldLCA4
MjogWzEsIDMwXSwgODM6IFsxLCAzMV0sIDg0OiBbMSwgMzJdLCA4NTogWzEsIDM0XSwgODY6IDMz
IH0sIHsgMjA6IDQ3LCA3MjogWzEsIDM1XSwgNzg6IDI2LCA3OTogMjcsIDgwOiBbMSwgMjhdLCA4
MTogWzEsIDI5XSwgODI6IFsxLCAzMF0sIDgzOiBbMSwgMzFdLCA4NDogWzEsIDMyXSwgODU6IFsx
LCAzNF0sIDg2OiAzMyB9LCB7IDIwOiA0OCwgNzI6IFsxLCAzNV0sIDc4OiAyNiwgNzk6IDI3LCA4
MDogWzEsIDI4XSwgODE6IFsxLCAyOV0sIDgyOiBbMSwgMzBdLCA4MzogWzEsIDMxXSwgODQ6IFsx
LCAzMl0sIDg1OiBbMSwgMzRdLCA4NjogMzMgfSwgeyAyMDogNDIsIDU2OiA0OSwgNjQ6IDQzLCA2
NTogWzEsIDQ0XSwgNzI6IFsxLCAzNV0sIDc4OiAyNiwgNzk6IDI3LCA4MDogWzEsIDI4XSwgODE6
IFsxLCAyOV0sIDgyOiBbMSwgMzBdLCA4MzogWzEsIDMxXSwgODQ6IFsxLCAzMl0sIDg1OiBbMSwg
MzRdLCA4NjogMzMgfSwgeyAzMzogWzIsIDc4XSwgNDk6IDUwLCA2NTogWzIsIDc4XSwgNzI6IFsy
LCA3OF0sIDgwOiBbMiwgNzhdLCA4MTogWzIsIDc4XSwgODI6IFsyLCA3OF0sIDgzOiBbMiwgNzhd
LCA4NDogWzIsIDc4XSwgODU6IFsyLCA3OF0gfSwgeyAyMzogWzIsIDMzXSwgMzM6IFsyLCAzM10s
IDU0OiBbMiwgMzNdLCA2NTogWzIsIDMzXSwgNjg6IFsyLCAzM10sIDcyOiBbMiwgMzNdLCA3NTog
WzIsIDMzXSwgODA6IFsyLCAzM10sIDgxOiBbMiwgMzNdLCA4MjogWzIsIDMzXSwgODM6IFsyLCAz
M10sIDg0OiBbMiwgMzNdLCA4NTogWzIsIDMzXSB9LCB7IDIzOiBbMiwgMzRdLCAzMzogWzIsIDM0
XSwgNTQ6IFsyLCAzNF0sIDY1OiBbMiwgMzRdLCA2ODogWzIsIDM0XSwgNzI6IFsyLCAzNF0sIDc1
OiBbMiwgMzRdLCA4MDogWzIsIDM0XSwgODE6IFsyLCAzNF0sIDgyOiBbMiwgMzRdLCA4MzogWzIs
IDM0XSwgODQ6IFsyLCAzNF0sIDg1OiBbMiwgMzRdIH0sIHsgMjM6IFsyLCAzNV0sIDMzOiBbMiwg
MzVdLCA1NDogWzIsIDM1XSwgNjU6IFsyLCAzNV0sIDY4OiBbMiwgMzVdLCA3MjogWzIsIDM1XSwg
NzU6IFsyLCAzNV0sIDgwOiBbMiwgMzVdLCA4MTogWzIsIDM1XSwgODI6IFsyLCAzNV0sIDgzOiBb
MiwgMzVdLCA4NDogWzIsIDM1XSwgODU6IFsyLCAzNV0gfSwgeyAyMzogWzIsIDM2XSwgMzM6IFsy
LCAzNl0sIDU0OiBbMiwgMzZdLCA2NTogWzIsIDM2XSwgNjg6IFsyLCAzNl0sIDcyOiBbMiwgMzZd
LCA3NTogWzIsIDM2XSwgODA6IFsyLCAzNl0sIDgxOiBbMiwgMzZdLCA4MjogWzIsIDM2XSwgODM6
IFsyLCAzNl0sIDg0OiBbMiwgMzZdLCA4NTogWzIsIDM2XSB9LCB7IDIzOiBbMiwgMzddLCAzMzog
WzIsIDM3XSwgNTQ6IFsyLCAzN10sIDY1OiBbMiwgMzddLCA2ODogWzIsIDM3XSwgNzI6IFsyLCAz
N10sIDc1OiBbMiwgMzddLCA4MDogWzIsIDM3XSwgODE6IFsyLCAzN10sIDgyOiBbMiwgMzddLCA4
MzogWzIsIDM3XSwgODQ6IFsyLCAzN10sIDg1OiBbMiwgMzddIH0sIHsgMjM6IFsyLCAzOF0sIDMz
OiBbMiwgMzhdLCA1NDogWzIsIDM4XSwgNjU6IFsyLCAzOF0sIDY4OiBbMiwgMzhdLCA3MjogWzIs
IDM4XSwgNzU6IFsyLCAzOF0sIDgwOiBbMiwgMzhdLCA4MTogWzIsIDM4XSwgODI6IFsyLCAzOF0s
IDgzOiBbMiwgMzhdLCA4NDogWzIsIDM4XSwgODU6IFsyLCAzOF0gfSwgeyAyMzogWzIsIDM5XSwg
MzM6IFsyLCAzOV0sIDU0OiBbMiwgMzldLCA2NTogWzIsIDM5XSwgNjg6IFsyLCAzOV0sIDcyOiBb
MiwgMzldLCA3NTogWzIsIDM5XSwgODA6IFsyLCAzOV0sIDgxOiBbMiwgMzldLCA4MjogWzIsIDM5
XSwgODM6IFsyLCAzOV0sIDg0OiBbMiwgMzldLCA4NTogWzIsIDM5XSB9LCB7IDIzOiBbMiwgNDNd
LCAzMzogWzIsIDQzXSwgNTQ6IFsyLCA0M10sIDY1OiBbMiwgNDNdLCA2ODogWzIsIDQzXSwgNzI6
IFsyLCA0M10sIDc1OiBbMiwgNDNdLCA4MDogWzIsIDQzXSwgODE6IFsyLCA0M10sIDgyOiBbMiwg
NDNdLCA4MzogWzIsIDQzXSwgODQ6IFsyLCA0M10sIDg1OiBbMiwgNDNdLCA4NzogWzEsIDUxXSB9
LCB7IDcyOiBbMSwgMzVdLCA4NjogNTIgfSwgeyAyMzogWzIsIDQ1XSwgMzM6IFsyLCA0NV0sIDU0
OiBbMiwgNDVdLCA2NTogWzIsIDQ1XSwgNjg6IFsyLCA0NV0sIDcyOiBbMiwgNDVdLCA3NTogWzIs
IDQ1XSwgODA6IFsyLCA0NV0sIDgxOiBbMiwgNDVdLCA4MjogWzIsIDQ1XSwgODM6IFsyLCA0NV0s
IDg0OiBbMiwgNDVdLCA4NTogWzIsIDQ1XSwgODc6IFsyLCA0NV0gfSwgeyA1MjogNTMsIDU0OiBb
MiwgODJdLCA2NTogWzIsIDgyXSwgNzI6IFsyLCA4Ml0sIDgwOiBbMiwgODJdLCA4MTogWzIsIDgy
XSwgODI6IFsyLCA4Ml0sIDgzOiBbMiwgODJdLCA4NDogWzIsIDgyXSwgODU6IFsyLCA4Ml0gfSwg
eyAyNTogNTQsIDM4OiA1NiwgMzk6IFsxLCA1OF0sIDQzOiA1NywgNDQ6IFsxLCA1OV0sIDQ1OiA1
NSwgNDc6IFsyLCA1NF0gfSwgeyAyODogNjAsIDQzOiA2MSwgNDQ6IFsxLCA1OV0sIDQ3OiBbMiwg
NTZdIH0sIHsgMTM6IDYzLCAxNTogWzEsIDIwXSwgMTg6IFsxLCA2Ml0gfSwgeyAxNTogWzIsIDQ4
XSwgMTg6IFsyLCA0OF0gfSwgeyAzMzogWzIsIDg2XSwgNTc6IDY0LCA2NTogWzIsIDg2XSwgNzI6
IFsyLCA4Nl0sIDgwOiBbMiwgODZdLCA4MTogWzIsIDg2XSwgODI6IFsyLCA4Nl0sIDgzOiBbMiwg
ODZdLCA4NDogWzIsIDg2XSwgODU6IFsyLCA4Nl0gfSwgeyAzMzogWzIsIDQwXSwgNjU6IFsyLCA0
MF0sIDcyOiBbMiwgNDBdLCA4MDogWzIsIDQwXSwgODE6IFsyLCA0MF0sIDgyOiBbMiwgNDBdLCA4
MzogWzIsIDQwXSwgODQ6IFsyLCA0MF0sIDg1OiBbMiwgNDBdIH0sIHsgMzM6IFsyLCA0MV0sIDY1
OiBbMiwgNDFdLCA3MjogWzIsIDQxXSwgODA6IFsyLCA0MV0sIDgxOiBbMiwgNDFdLCA4MjogWzIs
IDQxXSwgODM6IFsyLCA0MV0sIDg0OiBbMiwgNDFdLCA4NTogWzIsIDQxXSB9LCB7IDIwOiA2NSwg
NzI6IFsxLCAzNV0sIDc4OiAyNiwgNzk6IDI3LCA4MDogWzEsIDI4XSwgODE6IFsxLCAyOV0sIDgy
OiBbMSwgMzBdLCA4MzogWzEsIDMxXSwgODQ6IFsxLCAzMl0sIDg1OiBbMSwgMzRdLCA4NjogMzMg
fSwgeyAyNjogNjYsIDQ3OiBbMSwgNjddIH0sIHsgMzA6IDY4LCAzMzogWzIsIDU4XSwgNjU6IFsy
LCA1OF0sIDcyOiBbMiwgNThdLCA3NTogWzIsIDU4XSwgODA6IFsyLCA1OF0sIDgxOiBbMiwgNThd
LCA4MjogWzIsIDU4XSwgODM6IFsyLCA1OF0sIDg0OiBbMiwgNThdLCA4NTogWzIsIDU4XSB9LCB7
IDMzOiBbMiwgNjRdLCAzNTogNjksIDY1OiBbMiwgNjRdLCA3MjogWzIsIDY0XSwgNzU6IFsyLCA2
NF0sIDgwOiBbMiwgNjRdLCA4MTogWzIsIDY0XSwgODI6IFsyLCA2NF0sIDgzOiBbMiwgNjRdLCA4
NDogWzIsIDY0XSwgODU6IFsyLCA2NF0gfSwgeyAyMTogNzAsIDIzOiBbMiwgNTBdLCA2NTogWzIs
IDUwXSwgNzI6IFsyLCA1MF0sIDgwOiBbMiwgNTBdLCA4MTogWzIsIDUwXSwgODI6IFsyLCA1MF0s
IDgzOiBbMiwgNTBdLCA4NDogWzIsIDUwXSwgODU6IFsyLCA1MF0gfSwgeyAzMzogWzIsIDkwXSwg
NjE6IDcxLCA2NTogWzIsIDkwXSwgNzI6IFsyLCA5MF0sIDgwOiBbMiwgOTBdLCA4MTogWzIsIDkw
XSwgODI6IFsyLCA5MF0sIDgzOiBbMiwgOTBdLCA4NDogWzIsIDkwXSwgODU6IFsyLCA5MF0gfSwg
eyAyMDogNzUsIDMzOiBbMiwgODBdLCA1MDogNzIsIDYzOiA3MywgNjQ6IDc2LCA2NTogWzEsIDQ0
XSwgNjk6IDc0LCA3MDogNzcsIDcxOiA3OCwgNzI6IFsxLCA3OV0sIDc4OiAyNiwgNzk6IDI3LCA4
MDogWzEsIDI4XSwgODE6IFsxLCAyOV0sIDgyOiBbMSwgMzBdLCA4MzogWzEsIDMxXSwgODQ6IFsx
LCAzMl0sIDg1OiBbMSwgMzRdLCA4NjogMzMgfSwgeyA3MjogWzEsIDgwXSB9LCB7IDIzOiBbMiwg
NDJdLCAzMzogWzIsIDQyXSwgNTQ6IFsyLCA0Ml0sIDY1OiBbMiwgNDJdLCA2ODogWzIsIDQyXSwg
NzI6IFsyLCA0Ml0sIDc1OiBbMiwgNDJdLCA4MDogWzIsIDQyXSwgODE6IFsyLCA0Ml0sIDgyOiBb
MiwgNDJdLCA4MzogWzIsIDQyXSwgODQ6IFsyLCA0Ml0sIDg1OiBbMiwgNDJdLCA4NzogWzEsIDUx
XSB9LCB7IDIwOiA3NSwgNTM6IDgxLCA1NDogWzIsIDg0XSwgNjM6IDgyLCA2NDogNzYsIDY1OiBb
MSwgNDRdLCA2OTogODMsIDcwOiA3NywgNzE6IDc4LCA3MjogWzEsIDc5XSwgNzg6IDI2LCA3OTog
MjcsIDgwOiBbMSwgMjhdLCA4MTogWzEsIDI5XSwgODI6IFsxLCAzMF0sIDgzOiBbMSwgMzFdLCA4
NDogWzEsIDMyXSwgODU6IFsxLCAzNF0sIDg2OiAzMyB9LCB7IDI2OiA4NCwgNDc6IFsxLCA2N10g
fSwgeyA0NzogWzIsIDU1XSB9LCB7IDQ6IDg1LCA2OiAzLCAxNDogWzIsIDQ2XSwgMTU6IFsyLCA0
Nl0sIDE5OiBbMiwgNDZdLCAyOTogWzIsIDQ2XSwgMzQ6IFsyLCA0Nl0sIDM5OiBbMiwgNDZdLCA0
NDogWzIsIDQ2XSwgNDc6IFsyLCA0Nl0sIDQ4OiBbMiwgNDZdLCA1MTogWzIsIDQ2XSwgNTU6IFsy
LCA0Nl0sIDYwOiBbMiwgNDZdIH0sIHsgNDc6IFsyLCAyMF0gfSwgeyAyMDogODYsIDcyOiBbMSwg
MzVdLCA3ODogMjYsIDc5OiAyNywgODA6IFsxLCAyOF0sIDgxOiBbMSwgMjldLCA4MjogWzEsIDMw
XSwgODM6IFsxLCAzMV0sIDg0OiBbMSwgMzJdLCA4NTogWzEsIDM0XSwgODY6IDMzIH0sIHsgNDog
ODcsIDY6IDMsIDE0OiBbMiwgNDZdLCAxNTogWzIsIDQ2XSwgMTk6IFsyLCA0Nl0sIDI5OiBbMiwg
NDZdLCAzNDogWzIsIDQ2XSwgNDc6IFsyLCA0Nl0sIDQ4OiBbMiwgNDZdLCA1MTogWzIsIDQ2XSwg
NTU6IFsyLCA0Nl0sIDYwOiBbMiwgNDZdIH0sIHsgMjY6IDg4LCA0NzogWzEsIDY3XSB9LCB7IDQ3
OiBbMiwgNTddIH0sIHsgNTogWzIsIDExXSwgMTQ6IFsyLCAxMV0sIDE1OiBbMiwgMTFdLCAxOTog
WzIsIDExXSwgMjk6IFsyLCAxMV0sIDM0OiBbMiwgMTFdLCAzOTogWzIsIDExXSwgNDQ6IFsyLCAx
MV0sIDQ3OiBbMiwgMTFdLCA0ODogWzIsIDExXSwgNTE6IFsyLCAxMV0sIDU1OiBbMiwgMTFdLCA2
MDogWzIsIDExXSB9LCB7IDE1OiBbMiwgNDldLCAxODogWzIsIDQ5XSB9LCB7IDIwOiA3NSwgMzM6
IFsyLCA4OF0sIDU4OiA4OSwgNjM6IDkwLCA2NDogNzYsIDY1OiBbMSwgNDRdLCA2OTogOTEsIDcw
OiA3NywgNzE6IDc4LCA3MjogWzEsIDc5XSwgNzg6IDI2LCA3OTogMjcsIDgwOiBbMSwgMjhdLCA4
MTogWzEsIDI5XSwgODI6IFsxLCAzMF0sIDgzOiBbMSwgMzFdLCA4NDogWzEsIDMyXSwgODU6IFsx
LCAzNF0sIDg2OiAzMyB9LCB7IDY1OiBbMiwgOTRdLCA2NjogOTIsIDY4OiBbMiwgOTRdLCA3Mjog
WzIsIDk0XSwgODA6IFsyLCA5NF0sIDgxOiBbMiwgOTRdLCA4MjogWzIsIDk0XSwgODM6IFsyLCA5
NF0sIDg0OiBbMiwgOTRdLCA4NTogWzIsIDk0XSB9LCB7IDU6IFsyLCAyNV0sIDE0OiBbMiwgMjVd
LCAxNTogWzIsIDI1XSwgMTk6IFsyLCAyNV0sIDI5OiBbMiwgMjVdLCAzNDogWzIsIDI1XSwgMzk6
IFsyLCAyNV0sIDQ0OiBbMiwgMjVdLCA0NzogWzIsIDI1XSwgNDg6IFsyLCAyNV0sIDUxOiBbMiwg
MjVdLCA1NTogWzIsIDI1XSwgNjA6IFsyLCAyNV0gfSwgeyAyMDogOTMsIDcyOiBbMSwgMzVdLCA3
ODogMjYsIDc5OiAyNywgODA6IFsxLCAyOF0sIDgxOiBbMSwgMjldLCA4MjogWzEsIDMwXSwgODM6
IFsxLCAzMV0sIDg0OiBbMSwgMzJdLCA4NTogWzEsIDM0XSwgODY6IDMzIH0sIHsgMjA6IDc1LCAz
MTogOTQsIDMzOiBbMiwgNjBdLCA2MzogOTUsIDY0OiA3NiwgNjU6IFsxLCA0NF0sIDY5OiA5Niwg
NzA6IDc3LCA3MTogNzgsIDcyOiBbMSwgNzldLCA3NTogWzIsIDYwXSwgNzg6IDI2LCA3OTogMjcs
IDgwOiBbMSwgMjhdLCA4MTogWzEsIDI5XSwgODI6IFsxLCAzMF0sIDgzOiBbMSwgMzFdLCA4NDog
WzEsIDMyXSwgODU6IFsxLCAzNF0sIDg2OiAzMyB9LCB7IDIwOiA3NSwgMzM6IFsyLCA2Nl0sIDM2
OiA5NywgNjM6IDk4LCA2NDogNzYsIDY1OiBbMSwgNDRdLCA2OTogOTksIDcwOiA3NywgNzE6IDc4
LCA3MjogWzEsIDc5XSwgNzU6IFsyLCA2Nl0sIDc4OiAyNiwgNzk6IDI3LCA4MDogWzEsIDI4XSwg
ODE6IFsxLCAyOV0sIDgyOiBbMSwgMzBdLCA4MzogWzEsIDMxXSwgODQ6IFsxLCAzMl0sIDg1OiBb
MSwgMzRdLCA4NjogMzMgfSwgeyAyMDogNzUsIDIyOiAxMDAsIDIzOiBbMiwgNTJdLCA2MzogMTAx
LCA2NDogNzYsIDY1OiBbMSwgNDRdLCA2OTogMTAyLCA3MDogNzcsIDcxOiA3OCwgNzI6IFsxLCA3
OV0sIDc4OiAyNiwgNzk6IDI3LCA4MDogWzEsIDI4XSwgODE6IFsxLCAyOV0sIDgyOiBbMSwgMzBd
LCA4MzogWzEsIDMxXSwgODQ6IFsxLCAzMl0sIDg1OiBbMSwgMzRdLCA4NjogMzMgfSwgeyAyMDog
NzUsIDMzOiBbMiwgOTJdLCA2MjogMTAzLCA2MzogMTA0LCA2NDogNzYsIDY1OiBbMSwgNDRdLCA2
OTogMTA1LCA3MDogNzcsIDcxOiA3OCwgNzI6IFsxLCA3OV0sIDc4OiAyNiwgNzk6IDI3LCA4MDog
WzEsIDI4XSwgODE6IFsxLCAyOV0sIDgyOiBbMSwgMzBdLCA4MzogWzEsIDMxXSwgODQ6IFsxLCAz
Ml0sIDg1OiBbMSwgMzRdLCA4NjogMzMgfSwgeyAzMzogWzEsIDEwNl0gfSwgeyAzMzogWzIsIDc5
XSwgNjU6IFsyLCA3OV0sIDcyOiBbMiwgNzldLCA4MDogWzIsIDc5XSwgODE6IFsyLCA3OV0sIDgy
OiBbMiwgNzldLCA4MzogWzIsIDc5XSwgODQ6IFsyLCA3OV0sIDg1OiBbMiwgNzldIH0sIHsgMzM6
IFsyLCA4MV0gfSwgeyAyMzogWzIsIDI3XSwgMzM6IFsyLCAyN10sIDU0OiBbMiwgMjddLCA2NTog
WzIsIDI3XSwgNjg6IFsyLCAyN10sIDcyOiBbMiwgMjddLCA3NTogWzIsIDI3XSwgODA6IFsyLCAy
N10sIDgxOiBbMiwgMjddLCA4MjogWzIsIDI3XSwgODM6IFsyLCAyN10sIDg0OiBbMiwgMjddLCA4
NTogWzIsIDI3XSB9LCB7IDIzOiBbMiwgMjhdLCAzMzogWzIsIDI4XSwgNTQ6IFsyLCAyOF0sIDY1
OiBbMiwgMjhdLCA2ODogWzIsIDI4XSwgNzI6IFsyLCAyOF0sIDc1OiBbMiwgMjhdLCA4MDogWzIs
IDI4XSwgODE6IFsyLCAyOF0sIDgyOiBbMiwgMjhdLCA4MzogWzIsIDI4XSwgODQ6IFsyLCAyOF0s
IDg1OiBbMiwgMjhdIH0sIHsgMjM6IFsyLCAzMF0sIDMzOiBbMiwgMzBdLCA1NDogWzIsIDMwXSwg
Njg6IFsyLCAzMF0sIDcxOiAxMDcsIDcyOiBbMSwgMTA4XSwgNzU6IFsyLCAzMF0gfSwgeyAyMzog
WzIsIDk4XSwgMzM6IFsyLCA5OF0sIDU0OiBbMiwgOThdLCA2ODogWzIsIDk4XSwgNzI6IFsyLCA5
OF0sIDc1OiBbMiwgOThdIH0sIHsgMjM6IFsyLCA0NV0sIDMzOiBbMiwgNDVdLCA1NDogWzIsIDQ1
XSwgNjU6IFsyLCA0NV0sIDY4OiBbMiwgNDVdLCA3MjogWzIsIDQ1XSwgNzM6IFsxLCAxMDldLCA3
NTogWzIsIDQ1XSwgODA6IFsyLCA0NV0sIDgxOiBbMiwgNDVdLCA4MjogWzIsIDQ1XSwgODM6IFsy
LCA0NV0sIDg0OiBbMiwgNDVdLCA4NTogWzIsIDQ1XSwgODc6IFsyLCA0NV0gfSwgeyAyMzogWzIs
IDQ0XSwgMzM6IFsyLCA0NF0sIDU0OiBbMiwgNDRdLCA2NTogWzIsIDQ0XSwgNjg6IFsyLCA0NF0s
IDcyOiBbMiwgNDRdLCA3NTogWzIsIDQ0XSwgODA6IFsyLCA0NF0sIDgxOiBbMiwgNDRdLCA4Mjog
WzIsIDQ0XSwgODM6IFsyLCA0NF0sIDg0OiBbMiwgNDRdLCA4NTogWzIsIDQ0XSwgODc6IFsyLCA0
NF0gfSwgeyA1NDogWzEsIDExMF0gfSwgeyA1NDogWzIsIDgzXSwgNjU6IFsyLCA4M10sIDcyOiBb
MiwgODNdLCA4MDogWzIsIDgzXSwgODE6IFsyLCA4M10sIDgyOiBbMiwgODNdLCA4MzogWzIsIDgz
XSwgODQ6IFsyLCA4M10sIDg1OiBbMiwgODNdIH0sIHsgNTQ6IFsyLCA4NV0gfSwgeyA1OiBbMiwg
MTNdLCAxNDogWzIsIDEzXSwgMTU6IFsyLCAxM10sIDE5OiBbMiwgMTNdLCAyOTogWzIsIDEzXSwg
MzQ6IFsyLCAxM10sIDM5OiBbMiwgMTNdLCA0NDogWzIsIDEzXSwgNDc6IFsyLCAxM10sIDQ4OiBb
MiwgMTNdLCA1MTogWzIsIDEzXSwgNTU6IFsyLCAxM10sIDYwOiBbMiwgMTNdIH0sIHsgMzg6IDU2
LCAzOTogWzEsIDU4XSwgNDM6IDU3LCA0NDogWzEsIDU5XSwgNDU6IDExMiwgNDY6IDExMSwgNDc6
IFsyLCA3Nl0gfSwgeyAzMzogWzIsIDcwXSwgNDA6IDExMywgNjU6IFsyLCA3MF0sIDcyOiBbMiwg
NzBdLCA3NTogWzIsIDcwXSwgODA6IFsyLCA3MF0sIDgxOiBbMiwgNzBdLCA4MjogWzIsIDcwXSwg
ODM6IFsyLCA3MF0sIDg0OiBbMiwgNzBdLCA4NTogWzIsIDcwXSB9LCB7IDQ3OiBbMiwgMThdIH0s
IHsgNTogWzIsIDE0XSwgMTQ6IFsyLCAxNF0sIDE1OiBbMiwgMTRdLCAxOTogWzIsIDE0XSwgMjk6
IFsyLCAxNF0sIDM0OiBbMiwgMTRdLCAzOTogWzIsIDE0XSwgNDQ6IFsyLCAxNF0sIDQ3OiBbMiwg
MTRdLCA0ODogWzIsIDE0XSwgNTE6IFsyLCAxNF0sIDU1OiBbMiwgMTRdLCA2MDogWzIsIDE0XSB9
LCB7IDMzOiBbMSwgMTE0XSB9LCB7IDMzOiBbMiwgODddLCA2NTogWzIsIDg3XSwgNzI6IFsyLCA4
N10sIDgwOiBbMiwgODddLCA4MTogWzIsIDg3XSwgODI6IFsyLCA4N10sIDgzOiBbMiwgODddLCA4
NDogWzIsIDg3XSwgODU6IFsyLCA4N10gfSwgeyAzMzogWzIsIDg5XSB9LCB7IDIwOiA3NSwgNjM6
IDExNiwgNjQ6IDc2LCA2NTogWzEsIDQ0XSwgNjc6IDExNSwgNjg6IFsyLCA5Nl0sIDY5OiAxMTcs
IDcwOiA3NywgNzE6IDc4LCA3MjogWzEsIDc5XSwgNzg6IDI2LCA3OTogMjcsIDgwOiBbMSwgMjhd
LCA4MTogWzEsIDI5XSwgODI6IFsxLCAzMF0sIDgzOiBbMSwgMzFdLCA4NDogWzEsIDMyXSwgODU6
IFsxLCAzNF0sIDg2OiAzMyB9LCB7IDMzOiBbMSwgMTE4XSB9LCB7IDMyOiAxMTksIDMzOiBbMiwg
NjJdLCA3NDogMTIwLCA3NTogWzEsIDEyMV0gfSwgeyAzMzogWzIsIDU5XSwgNjU6IFsyLCA1OV0s
IDcyOiBbMiwgNTldLCA3NTogWzIsIDU5XSwgODA6IFsyLCA1OV0sIDgxOiBbMiwgNTldLCA4Mjog
WzIsIDU5XSwgODM6IFsyLCA1OV0sIDg0OiBbMiwgNTldLCA4NTogWzIsIDU5XSB9LCB7IDMzOiBb
MiwgNjFdLCA3NTogWzIsIDYxXSB9LCB7IDMzOiBbMiwgNjhdLCAzNzogMTIyLCA3NDogMTIzLCA3
NTogWzEsIDEyMV0gfSwgeyAzMzogWzIsIDY1XSwgNjU6IFsyLCA2NV0sIDcyOiBbMiwgNjVdLCA3
NTogWzIsIDY1XSwgODA6IFsyLCA2NV0sIDgxOiBbMiwgNjVdLCA4MjogWzIsIDY1XSwgODM6IFsy
LCA2NV0sIDg0OiBbMiwgNjVdLCA4NTogWzIsIDY1XSB9LCB7IDMzOiBbMiwgNjddLCA3NTogWzIs
IDY3XSB9LCB7IDIzOiBbMSwgMTI0XSB9LCB7IDIzOiBbMiwgNTFdLCA2NTogWzIsIDUxXSwgNzI6
IFsyLCA1MV0sIDgwOiBbMiwgNTFdLCA4MTogWzIsIDUxXSwgODI6IFsyLCA1MV0sIDgzOiBbMiwg
NTFdLCA4NDogWzIsIDUxXSwgODU6IFsyLCA1MV0gfSwgeyAyMzogWzIsIDUzXSB9LCB7IDMzOiBb
MSwgMTI1XSB9LCB7IDMzOiBbMiwgOTFdLCA2NTogWzIsIDkxXSwgNzI6IFsyLCA5MV0sIDgwOiBb
MiwgOTFdLCA4MTogWzIsIDkxXSwgODI6IFsyLCA5MV0sIDgzOiBbMiwgOTFdLCA4NDogWzIsIDkx
XSwgODU6IFsyLCA5MV0gfSwgeyAzMzogWzIsIDkzXSB9LCB7IDU6IFsyLCAyMl0sIDE0OiBbMiwg
MjJdLCAxNTogWzIsIDIyXSwgMTk6IFsyLCAyMl0sIDI5OiBbMiwgMjJdLCAzNDogWzIsIDIyXSwg
Mzk6IFsyLCAyMl0sIDQ0OiBbMiwgMjJdLCA0NzogWzIsIDIyXSwgNDg6IFsyLCAyMl0sIDUxOiBb
MiwgMjJdLCA1NTogWzIsIDIyXSwgNjA6IFsyLCAyMl0gfSwgeyAyMzogWzIsIDk5XSwgMzM6IFsy
LCA5OV0sIDU0OiBbMiwgOTldLCA2ODogWzIsIDk5XSwgNzI6IFsyLCA5OV0sIDc1OiBbMiwgOTld
IH0sIHsgNzM6IFsxLCAxMDldIH0sIHsgMjA6IDc1LCA2MzogMTI2LCA2NDogNzYsIDY1OiBbMSwg
NDRdLCA3MjogWzEsIDM1XSwgNzg6IDI2LCA3OTogMjcsIDgwOiBbMSwgMjhdLCA4MTogWzEsIDI5
XSwgODI6IFsxLCAzMF0sIDgzOiBbMSwgMzFdLCA4NDogWzEsIDMyXSwgODU6IFsxLCAzNF0sIDg2
OiAzMyB9LCB7IDU6IFsyLCAyM10sIDE0OiBbMiwgMjNdLCAxNTogWzIsIDIzXSwgMTk6IFsyLCAy
M10sIDI5OiBbMiwgMjNdLCAzNDogWzIsIDIzXSwgMzk6IFsyLCAyM10sIDQ0OiBbMiwgMjNdLCA0
NzogWzIsIDIzXSwgNDg6IFsyLCAyM10sIDUxOiBbMiwgMjNdLCA1NTogWzIsIDIzXSwgNjA6IFsy
LCAyM10gfSwgeyA0NzogWzIsIDE5XSB9LCB7IDQ3OiBbMiwgNzddIH0sIHsgMjA6IDc1LCAzMzog
WzIsIDcyXSwgNDE6IDEyNywgNjM6IDEyOCwgNjQ6IDc2LCA2NTogWzEsIDQ0XSwgNjk6IDEyOSwg
NzA6IDc3LCA3MTogNzgsIDcyOiBbMSwgNzldLCA3NTogWzIsIDcyXSwgNzg6IDI2LCA3OTogMjcs
IDgwOiBbMSwgMjhdLCA4MTogWzEsIDI5XSwgODI6IFsxLCAzMF0sIDgzOiBbMSwgMzFdLCA4NDog
WzEsIDMyXSwgODU6IFsxLCAzNF0sIDg2OiAzMyB9LCB7IDU6IFsyLCAyNF0sIDE0OiBbMiwgMjRd
LCAxNTogWzIsIDI0XSwgMTk6IFsyLCAyNF0sIDI5OiBbMiwgMjRdLCAzNDogWzIsIDI0XSwgMzk6
IFsyLCAyNF0sIDQ0OiBbMiwgMjRdLCA0NzogWzIsIDI0XSwgNDg6IFsyLCAyNF0sIDUxOiBbMiwg
MjRdLCA1NTogWzIsIDI0XSwgNjA6IFsyLCAyNF0gfSwgeyA2ODogWzEsIDEzMF0gfSwgeyA2NTog
WzIsIDk1XSwgNjg6IFsyLCA5NV0sIDcyOiBbMiwgOTVdLCA4MDogWzIsIDk1XSwgODE6IFsyLCA5
NV0sIDgyOiBbMiwgOTVdLCA4MzogWzIsIDk1XSwgODQ6IFsyLCA5NV0sIDg1OiBbMiwgOTVdIH0s
IHsgNjg6IFsyLCA5N10gfSwgeyA1OiBbMiwgMjFdLCAxNDogWzIsIDIxXSwgMTU6IFsyLCAyMV0s
IDE5OiBbMiwgMjFdLCAyOTogWzIsIDIxXSwgMzQ6IFsyLCAyMV0sIDM5OiBbMiwgMjFdLCA0NDog
WzIsIDIxXSwgNDc6IFsyLCAyMV0sIDQ4OiBbMiwgMjFdLCA1MTogWzIsIDIxXSwgNTU6IFsyLCAy
MV0sIDYwOiBbMiwgMjFdIH0sIHsgMzM6IFsxLCAxMzFdIH0sIHsgMzM6IFsyLCA2M10gfSwgeyA3
MjogWzEsIDEzM10sIDc2OiAxMzIgfSwgeyAzMzogWzEsIDEzNF0gfSwgeyAzMzogWzIsIDY5XSB9
LCB7IDE1OiBbMiwgMTJdIH0sIHsgMTQ6IFsyLCAyNl0sIDE1OiBbMiwgMjZdLCAxOTogWzIsIDI2
XSwgMjk6IFsyLCAyNl0sIDM0OiBbMiwgMjZdLCA0NzogWzIsIDI2XSwgNDg6IFsyLCAyNl0sIDUx
OiBbMiwgMjZdLCA1NTogWzIsIDI2XSwgNjA6IFsyLCAyNl0gfSwgeyAyMzogWzIsIDMxXSwgMzM6
IFsyLCAzMV0sIDU0OiBbMiwgMzFdLCA2ODogWzIsIDMxXSwgNzI6IFsyLCAzMV0sIDc1OiBbMiwg
MzFdIH0sIHsgMzM6IFsyLCA3NF0sIDQyOiAxMzUsIDc0OiAxMzYsIDc1OiBbMSwgMTIxXSB9LCB7
IDMzOiBbMiwgNzFdLCA2NTogWzIsIDcxXSwgNzI6IFsyLCA3MV0sIDc1OiBbMiwgNzFdLCA4MDog
WzIsIDcxXSwgODE6IFsyLCA3MV0sIDgyOiBbMiwgNzFdLCA4MzogWzIsIDcxXSwgODQ6IFsyLCA3
MV0sIDg1OiBbMiwgNzFdIH0sIHsgMzM6IFsyLCA3M10sIDc1OiBbMiwgNzNdIH0sIHsgMjM6IFsy
LCAyOV0sIDMzOiBbMiwgMjldLCA1NDogWzIsIDI5XSwgNjU6IFsyLCAyOV0sIDY4OiBbMiwgMjld
LCA3MjogWzIsIDI5XSwgNzU6IFsyLCAyOV0sIDgwOiBbMiwgMjldLCA4MTogWzIsIDI5XSwgODI6
IFsyLCAyOV0sIDgzOiBbMiwgMjldLCA4NDogWzIsIDI5XSwgODU6IFsyLCAyOV0gfSwgeyAxNDog
WzIsIDE1XSwgMTU6IFsyLCAxNV0sIDE5OiBbMiwgMTVdLCAyOTogWzIsIDE1XSwgMzQ6IFsyLCAx
NV0sIDM5OiBbMiwgMTVdLCA0NDogWzIsIDE1XSwgNDc6IFsyLCAxNV0sIDQ4OiBbMiwgMTVdLCA1
MTogWzIsIDE1XSwgNTU6IFsyLCAxNV0sIDYwOiBbMiwgMTVdIH0sIHsgNzI6IFsxLCAxMzhdLCA3
NzogWzEsIDEzN10gfSwgeyA3MjogWzIsIDEwMF0sIDc3OiBbMiwgMTAwXSB9LCB7IDE0OiBbMiwg
MTZdLCAxNTogWzIsIDE2XSwgMTk6IFsyLCAxNl0sIDI5OiBbMiwgMTZdLCAzNDogWzIsIDE2XSwg
NDQ6IFsyLCAxNl0sIDQ3OiBbMiwgMTZdLCA0ODogWzIsIDE2XSwgNTE6IFsyLCAxNl0sIDU1OiBb
MiwgMTZdLCA2MDogWzIsIDE2XSB9LCB7IDMzOiBbMSwgMTM5XSB9LCB7IDMzOiBbMiwgNzVdIH0s
IHsgMzM6IFsyLCAzMl0gfSwgeyA3MjogWzIsIDEwMV0sIDc3OiBbMiwgMTAxXSB9LCB7IDE0OiBb
MiwgMTddLCAxNTogWzIsIDE3XSwgMTk6IFsyLCAxN10sIDI5OiBbMiwgMTddLCAzNDogWzIsIDE3
XSwgMzk6IFsyLCAxN10sIDQ0OiBbMiwgMTddLCA0NzogWzIsIDE3XSwgNDg6IFsyLCAxN10sIDUx
OiBbMiwgMTddLCA1NTogWzIsIDE3XSwgNjA6IFsyLCAxN10gfV0sCisgICAgICAgICAgICBkZWZh
dWx0QWN0aW9uczogeyA0OiBbMiwgMV0sIDU1OiBbMiwgNTVdLCA1NzogWzIsIDIwXSwgNjE6IFsy
LCA1N10sIDc0OiBbMiwgODFdLCA4MzogWzIsIDg1XSwgODc6IFsyLCAxOF0sIDkxOiBbMiwgODld
LCAxMDI6IFsyLCA1M10sIDEwNTogWzIsIDkzXSwgMTExOiBbMiwgMTldLCAxMTI6IFsyLCA3N10s
IDExNzogWzIsIDk3XSwgMTIwOiBbMiwgNjNdLCAxMjM6IFsyLCA2OV0sIDEyNDogWzIsIDEyXSwg
MTM2OiBbMiwgNzVdLCAxMzc6IFsyLCAzMl0gfSwKKyAgICAgICAgICAgIHBhcnNlRXJyb3I6IGZ1
bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3
IEVycm9yKHN0cik7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgcGFyc2U6IGZ1bmN0aW9u
IHBhcnNlKGlucHV0KSB7CisgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzLAorICAgICAg
ICAgICAgICAgICAgICBzdGFjayA9IFswXSwKKyAgICAgICAgICAgICAgICAgICAgdnN0YWNrID0g
W251bGxdLAorICAgICAgICAgICAgICAgICAgICBsc3RhY2sgPSBbXSwKKyAgICAgICAgICAgICAg
ICAgICAgdGFibGUgPSB0aGlzLnRhYmxlLAorICAgICAgICAgICAgICAgICAgICB5eXRleHQgPSAi
IiwKKyAgICAgICAgICAgICAgICAgICAgeXlsaW5lbm8gPSAwLAorICAgICAgICAgICAgICAgICAg
ICB5eWxlbmcgPSAwLAorICAgICAgICAgICAgICAgICAgICByZWNvdmVyaW5nID0gMCwKKyAgICAg
ICAgICAgICAgICAgICAgVEVSUk9SID0gMiwKKyAgICAgICAgICAgICAgICAgICAgRU9GID0gMTsK
KyAgICAgICAgICAgICAgICB0aGlzLmxleGVyLnNldElucHV0KGlucHV0KTsKKyAgICAgICAgICAg
ICAgICB0aGlzLmxleGVyLnl5ID0gdGhpcy55eTsKKyAgICAgICAgICAgICAgICB0aGlzLnl5Lmxl
eGVyID0gdGhpcy5sZXhlcjsKKyAgICAgICAgICAgICAgICB0aGlzLnl5LnBhcnNlciA9IHRoaXM7
CisgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmxleGVyLnl5bGxvYyA9PSAidW5kZWZp
bmVkIikgdGhpcy5sZXhlci55eWxsb2MgPSB7fTsKKyAgICAgICAgICAgICAgICB2YXIgeXlsb2Mg
PSB0aGlzLmxleGVyLnl5bGxvYzsKKyAgICAgICAgICAgICAgICBsc3RhY2sucHVzaCh5eWxvYyk7
CisgICAgICAgICAgICAgICAgdmFyIHJhbmdlcyA9IHRoaXMubGV4ZXIub3B0aW9ucyAmJiB0aGlz
LmxleGVyLm9wdGlvbnMucmFuZ2VzOworICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy55
eS5wYXJzZUVycm9yID09PSAiZnVuY3Rpb24iKSB0aGlzLnBhcnNlRXJyb3IgPSB0aGlzLnl5LnBh
cnNlRXJyb3I7CisgICAgICAgICAgICAgICAgZnVuY3Rpb24gcG9wU3RhY2sobikgeworICAgICAg
ICAgICAgICAgICAgICBzdGFjay5sZW5ndGggPSBzdGFjay5sZW5ndGggLSAyICogbjsKKyAgICAg
ICAgICAgICAgICAgICAgdnN0YWNrLmxlbmd0aCA9IHZzdGFjay5sZW5ndGggLSBuOworICAgICAg
ICAgICAgICAgICAgICBsc3RhY2subGVuZ3RoID0gbHN0YWNrLmxlbmd0aCAtIG47CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGxleCgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgdmFyIHRva2VuOworICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHNlbGYubGV4
ZXIubGV4KCkgfHwgMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiAhPT0g
Im51bWJlciIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gc2VsZi5zeW1ib2xz
X1t0b2tlbl0gfHwgdG9rZW47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRva2VuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2
YXIgc3ltYm9sLAorICAgICAgICAgICAgICAgICAgICBwcmVFcnJvclN5bWJvbCwKKyAgICAgICAg
ICAgICAgICAgICAgc3RhdGUsCisgICAgICAgICAgICAgICAgICAgIGFjdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICAgYSwKKyAgICAgICAgICAgICAgICAgICAgciwKKyAgICAgICAgICAgICAgICAg
ICAgeXl2YWwgPSB7fSwKKyAgICAgICAgICAgICAgICAgICAgcCwKKyAgICAgICAgICAgICAgICAg
ICAgbGVuLAorICAgICAgICAgICAgICAgICAgICBuZXdTdGF0ZSwKKyAgICAgICAgICAgICAgICAg
ICAgZXhwZWN0ZWQ7CisgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgc3RhdGUgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGVdKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBhY3Rpb24gPSB0aGlzLmRlZmF1bHRBY3Rpb25zW3N0YXRlXTsKKyAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2wgPT09
IG51bGwgfHwgdHlwZW9mIHN5bWJvbCA9PSAidW5kZWZpbmVkIikgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN5bWJvbCA9IGxleCgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gdGFibGVbc3RhdGVdICYmIHRhYmxlW3N0
YXRlXVtzeW1ib2xdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGlmICh0eXBlb2YgYWN0aW9uID09PSAidW5kZWZpbmVkIiB8fCAhYWN0aW9uLmxlbmd0aCB8fCAh
YWN0aW9uWzBdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyU3RyID0gIiI7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlY292ZXJpbmcpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBleHBlY3RlZCA9IFtdOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAocCBpbiB0YWJsZVtzdGF0ZV0pIGlmICh0aGlzLnRlcm1pbmFsc19bcF0gJiYgcCA+IDIp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQucHVzaCgiJyIgKyB0
aGlzLnRlcm1pbmFsc19bcF0gKyAiJyIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5sZXhlci5zaG93UG9zaXRpb24p
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyU3RyID0gIlBhcnNlIGVycm9y
IG9uIGxpbmUgIiArICh5eWxpbmVubyArIDEpICsgIjpcbiIgKyB0aGlzLmxleGVyLnNob3dQb3Np
dGlvbigpICsgIlxuRXhwZWN0aW5nICIgKyBleHBlY3RlZC5qb2luKCIsICIpICsgIiwgZ290ICci
ICsgKHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCkgKyAiJyI7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXJyU3RyID0gIlBhcnNlIGVycm9yIG9uIGxpbmUgIiArICh5eWxpbmVubyArIDEpICsgIjog
VW5leHBlY3RlZCAiICsgKHN5bWJvbCA9PSAxID8gImVuZCBvZiBpbnB1dCIgOiAiJyIgKyAodGhp
cy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sKSArICInIik7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyc2VFcnJv
cihlcnJTdHIsIHsgdGV4dDogdGhpcy5sZXhlci5tYXRjaCwgdG9rZW46IHRoaXMudGVybWluYWxz
X1tzeW1ib2xdIHx8IHN5bWJvbCwgbGluZTogdGhpcy5sZXhlci55eWxpbmVubywgbG9jOiB5eWxv
YywgZXhwZWN0ZWQ6IGV4cGVjdGVkIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25bMF0gaW5z
dGFuY2VvZiBBcnJheSAmJiBhY3Rpb24ubGVuZ3RoID4gMSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3Nz
aWJsZSBhdCBzdGF0ZTogIiArIHN0YXRlICsgIiwgdG9rZW46ICIgKyBzeW1ib2wpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYWN0aW9uWzBdKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhY2sucHVzaChzeW1ib2wpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZz
dGFjay5wdXNoKHRoaXMubGV4ZXIueXl0ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsc3RhY2sucHVzaCh0aGlzLmxleGVyLnl5bGxvYyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhY2sucHVzaChhY3Rpb25bMV0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN5bWJvbCA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcmVFcnJv
clN5bWJvbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5eWxlbmcgPSB0aGlz
LmxleGVyLnl5bGVuZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXl0ZXh0ID0g
dGhpcy5sZXhlci55eXRleHQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHl5bGlu
ZW5vID0gdGhpcy5sZXhlci55eWxpbmVubzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeXlsb2MgPSB0aGlzLmxleGVyLnl5bGxvYzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHJlY292ZXJpbmcgPiAwKSByZWNvdmVyaW5nLS07CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lt
Ym9sID0gcHJlRXJyb3JTeW1ib2w7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy
ZUVycm9yU3ltYm9sID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIDI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuID0gdGhpcy5wcm9kdWN0aW9u
c19bYWN0aW9uWzFdXVsxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB5eXZhbC4kID0g
dnN0YWNrW3ZzdGFjay5sZW5ndGggLSBsZW5dOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHl5dmFsLl8kID0geyBmaXJzdF9saW5lOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwg
MSldLmZpcnN0X2xpbmUsIGxhc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0
X2xpbmUsIGZpcnN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5m
aXJzdF9jb2x1bW4sIGxhc3RfY29sdW1uOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLmxhc3Rf
Y29sdW1uIH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlcykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5eXZhbC5fJC5yYW5nZSA9IFtsc3RhY2tbbHN0
YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLnJhbmdlWzBdLCBsc3RhY2tbbHN0YWNrLmxlbmd0aCAt
IDFdLnJhbmdlWzFdXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgciA9IHRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHl5dmFsLCB5eXRl
eHQsIHl5bGVuZywgeXlsaW5lbm8sIHRoaXMueXksIGFjdGlvblsxXSwgdnN0YWNrLCBsc3RhY2sp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgciAhPT0gInVuZGVmaW5l
ZCIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHI7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChs
ZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sgPSBzdGFjay5zbGlj
ZSgwLCAtMSAqIGxlbiAqIDIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2c3Rh
Y2sgPSB2c3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsc3RhY2sgPSBsc3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNo
KHRoaXMucHJvZHVjdGlvbnNfW2FjdGlvblsxXV1bMF0pOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZzdGFjay5wdXNoKHl5dmFsLiQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxzdGFjay5wdXNoKHl5dmFsLl8kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdT
dGF0ZSA9IHRhYmxlW3N0YWNrW3N0YWNrLmxlbmd0aCAtIDJdXVtzdGFja1tzdGFjay5sZW5ndGgg
LSAxXV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChuZXdTdGF0ZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIC8qIEppc29u
IGdlbmVyYXRlZCBsZXhlciAqLworICAgICAgICB2YXIgbGV4ZXIgPSAoZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgdmFyIGxleGVyID0geyBFT0Y6IDEsCisgICAgICAgICAgICAgICAgcGFyc2VF
cnJvcjogZnVuY3Rpb24gcGFyc2VFcnJvcihzdHIsIGhhc2gpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHRoaXMueXkucGFyc2VyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnl5
LnBhcnNlci5wYXJzZUVycm9yKHN0ciwgaGFzaCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Ioc3RyKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgc2V0
SW5wdXQ6IGZ1bmN0aW9uIHNldElucHV0KGlucHV0KSB7CisgICAgICAgICAgICAgICAgICAgIHRo
aXMuX2lucHV0ID0gaW5wdXQ7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX21vcmUgPSB0aGlz
Ll9sZXNzID0gdGhpcy5kb25lID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHRoaXMueXls
aW5lbm8gPSB0aGlzLnl5bGVuZyA9IDA7CisgICAgICAgICAgICAgICAgICAgIHRoaXMueXl0ZXh0
ID0gdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaCA9ICcnOworICAgICAgICAgICAgICAgICAgICB0
aGlzLmNvbmRpdGlvblN0YWNrID0gWydJTklUSUFMJ107CisgICAgICAgICAgICAgICAgICAgIHRo
aXMueXlsbG9jID0geyBmaXJzdF9saW5lOiAxLCBmaXJzdF9jb2x1bW46IDAsIGxhc3RfbGluZTog
MSwgbGFzdF9jb2x1bW46IDAgfTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9u
cy5yYW5nZXMpIHRoaXMueXlsbG9jLnJhbmdlID0gWzAsIDBdOworICAgICAgICAgICAgICAgICAg
ICB0aGlzLm9mZnNldCA9IDA7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAg
ICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgaW5wdXQ6IGZ1bmN0aW9uIGlucHV0KCkg
eworICAgICAgICAgICAgICAgICAgICB2YXIgY2ggPSB0aGlzLl9pbnB1dFswXTsKKyAgICAgICAg
ICAgICAgICAgICAgdGhpcy55eXRleHQgKz0gY2g7CisgICAgICAgICAgICAgICAgICAgIHRoaXMu
eXlsZW5nKys7CisgICAgICAgICAgICAgICAgICAgIHRoaXMub2Zmc2V0Kys7CisgICAgICAgICAg
ICAgICAgICAgIHRoaXMubWF0Y2ggKz0gY2g7CisgICAgICAgICAgICAgICAgICAgIHRoaXMubWF0
Y2hlZCArPSBjaDsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmVzID0gY2gubWF0Y2goLyg/
OlxyXG4/fFxuKS4qL2cpOworICAgICAgICAgICAgICAgICAgICBpZiAobGluZXMpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMueXlsaW5lbm8rKzsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMueXlsbG9jLmxhc3RfbGluZSsrOworICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKzsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25z
LnJhbmdlcykgdGhpcy55eWxsb2MucmFuZ2VbMV0rKzsKKworICAgICAgICAgICAgICAgICAgICB0
aGlzLl9pbnB1dCA9IHRoaXMuX2lucHV0LnNsaWNlKDEpOworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gY2g7CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB1bnB1dDogZnVu
Y3Rpb24gdW5wdXQoY2gpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGxlbiA9IGNoLmxlbmd0
aDsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmVzID0gY2guc3BsaXQoLyg/OlxyXG4/fFxu
KS9nKTsKKworICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnB1dCA9IGNoICsgdGhpcy5faW5w
dXQ7CisgICAgICAgICAgICAgICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy55eXRleHQuc3Vic3Ry
KDAsIHRoaXMueXl0ZXh0Lmxlbmd0aCAtIGxlbiAtIDEpOworICAgICAgICAgICAgICAgICAgICAv
L3RoaXMueXlsZW5nIC09IGxlbjsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5vZmZzZXQgLT0g
bGVuOworICAgICAgICAgICAgICAgICAgICB2YXIgb2xkTGluZXMgPSB0aGlzLm1hdGNoLnNwbGl0
KC8oPzpcclxuP3xcbikvZyk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2ggPSB0aGlz
Lm1hdGNoLnN1YnN0cigwLCB0aGlzLm1hdGNoLmxlbmd0aCAtIDEpOworICAgICAgICAgICAgICAg
ICAgICB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5s
ZW5ndGggLSAxKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAobGluZXMubGVuZ3RoIC0gMSkg
dGhpcy55eWxpbmVubyAtPSBsaW5lcy5sZW5ndGggLSAxOworICAgICAgICAgICAgICAgICAgICB2
YXIgciA9IHRoaXMueXlsbG9jLnJhbmdlOworCisgICAgICAgICAgICAgICAgICAgIHRoaXMueXls
bG9jID0geyBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5maXJzdF9saW5lLAorICAgICAgICAgICAg
ICAgICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vICsgMSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgbGFzdF9jb2x1bW46IGxpbmVzID8gKGxpbmVzLmxlbmd0aCA9PT0g
b2xkTGluZXMubGVuZ3RoID8gdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIDogMCkgKyBvbGRMaW5l
c1tvbGRMaW5lcy5sZW5ndGggLSBsaW5lcy5sZW5ndGhdLmxlbmd0aCAtIGxpbmVzWzBdLmxlbmd0
aCA6IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiAtIGxlbgorICAgICAgICAgICAgICAgICAgICB9
OworCisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFtyWzBdLCByWzBdICsgdGhp
cy55eWxlbmcgLSBsZW5dOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgbW9y
ZTogZnVuY3Rpb24gbW9yZSgpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fbW9yZSA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgIH0s
CisgICAgICAgICAgICAgICAgbGVzczogZnVuY3Rpb24gbGVzcyhuKSB7CisgICAgICAgICAgICAg
ICAgICAgIHRoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShuKSk7CisgICAgICAgICAgICAgICAg
fSwKKyAgICAgICAgICAgICAgICBwYXN0SW5wdXQ6IGZ1bmN0aW9uIHBhc3RJbnB1dCgpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIHBhc3QgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMu
bWF0Y2hlZC5sZW5ndGggLSB0aGlzLm1hdGNoLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiAocGFzdC5sZW5ndGggPiAyMCA/ICcuLi4nIDogJycpICsgcGFzdC5zdWJzdHIoLTIw
KS5yZXBsYWNlKC9cbi9nLCAiIik7CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAg
ICB1cGNvbWluZ0lucHV0OiBmdW5jdGlvbiB1cGNvbWluZ0lucHV0KCkgeworICAgICAgICAgICAg
ICAgICAgICB2YXIgbmV4dCA9IHRoaXMubWF0Y2g7CisgICAgICAgICAgICAgICAgICAgIGlmIChu
ZXh0Lmxlbmd0aCA8IDIwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0ICs9IHRoaXMu
X2lucHV0LnN1YnN0cigwLCAyMCAtIG5leHQubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG5leHQuc3Vic3RyKDAsIDIwKSArIChuZXh0
Lmxlbmd0aCA+IDIwID8gJy4uLicgOiAnJykpLnJlcGxhY2UoL1xuL2csICIiKTsKKyAgICAgICAg
ICAgICAgICB9LAorICAgICAgICAgICAgICAgIHNob3dQb3NpdGlvbjogZnVuY3Rpb24gc2hvd1Bv
c2l0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgcHJlID0gdGhpcy5wYXN0SW5wdXQo
KTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGMgPSBuZXcgQXJyYXkocHJlLmxlbmd0aCArIDEp
LmpvaW4oIi0iKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZSArIHRoaXMudXBjb21p
bmdJbnB1dCgpICsgIlxuIiArIGMgKyAiXiI7CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgICAgICBuZXh0OiBmdW5jdGlvbiBuZXh0KCkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
dGhpcy5kb25lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9pbnB1
dCkgdGhpcy5kb25lID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgICAgICB2YXIgdG9rZW4sIG1h
dGNoLCB0ZW1wTWF0Y2gsIGluZGV4LCBjb2wsIGxpbmVzOworICAgICAgICAgICAgICAgICAgICBp
ZiAoIXRoaXMuX21vcmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueXl0ZXh0ID0g
Jyc7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoID0gJyc7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdmFyIHJ1bGVzID0gdGhpcy5fY3VycmVu
dFJ1bGVzKCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMu
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBNYXRjaCA9IHRoaXMu
X2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbcnVsZXNbaV1dKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh0ZW1wTWF0Y2ggJiYgKCFtYXRjaCB8fCB0ZW1wTWF0Y2hbMF0ubGVuZ3RoID4gbWF0
Y2hbMF0ubGVuZ3RoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gdGVt
cE1hdGNoOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gaTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5mbGV4KSBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzID0gbWF0
Y2hbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGxpbmVzKSB0aGlzLnl5bGluZW5vICs9IGxpbmVzLmxlbmd0aDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMueXlsbG9jID0geyBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5sYXN0X2xp
bmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5v
ICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXls
bG9jLmxhc3RfY29sdW1uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RfY29sdW1u
OiBsaW5lcyA/IGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aCAtIGxpbmVzW2xpbmVzLmxl
bmd0aCAtIDFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5sYXN0X2Nv
bHVtbiArIG1hdGNoWzBdLmxlbmd0aCB9OworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy55
eXRleHQgKz0gbWF0Y2hbMF07CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoICs9
IG1hdGNoWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaGVzID0gbWF0Y2g7
CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnl5bGVuZyA9IHRoaXMueXl0ZXh0Lmxlbmd0
aDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbdGhpcy5vZmZz
ZXQsIHRoaXMub2Zmc2V0ICs9IHRoaXMueXlsZW5nXTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21vcmUgPSBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMuX2lucHV0ID0gdGhpcy5faW5wdXQuc2xpY2UobWF0Y2hbMF0u
bGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2hlZCArPSBtYXRjaFsw
XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gdGhpcy5wZXJmb3JtQWN0aW9uLmNh
bGwodGhpcywgdGhpcy55eSwgdGhpcywgcnVsZXNbaW5kZXhdLCB0aGlzLmNvbmRpdGlvblN0YWNr
W3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV0pOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHRoaXMuZG9uZSAmJiB0aGlzLl9pbnB1dCkgdGhpcy5kb25lID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4pIHJldHVybiB0b2tlbjtlbHNlIHJldHVybjsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faW5w
dXQgPT09ICIiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7Cisg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5wYXJzZUVycm9yKCdMZXhpY2FsIGVycm9yIG9uIGxpbmUgJyArICh0aGlzLnl5bGlu
ZW5vICsgMSkgKyAnLiBVbnJlY29nbml6ZWQgdGV4dC5cbicgKyB0aGlzLnNob3dQb3NpdGlvbigp
LCB7IHRleHQ6ICIiLCB0b2tlbjogbnVsbCwgbGluZTogdGhpcy55eWxpbmVubyB9KTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgbGV4
OiBmdW5jdGlvbiBsZXgoKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciByID0gdGhpcy5uZXh0
KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgciAhPT0gJ3VuZGVmaW5lZCcpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByOworICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGV4KCk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIGJl
Z2luOiBmdW5jdGlvbiBiZWdpbihjb25kaXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgdGhp
cy5jb25kaXRpb25TdGFjay5wdXNoKGNvbmRpdGlvbik7CisgICAgICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgICAgICBwb3BTdGF0ZTogZnVuY3Rpb24gcG9wU3RhdGUoKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOworICAgICAgICAgICAg
ICAgIH0sCisgICAgICAgICAgICAgICAgX2N1cnJlbnRSdWxlczogZnVuY3Rpb24gX2N1cnJlbnRS
dWxlcygpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uc1t0aGlz
LmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV1dLnJ1bGVzOwor
ICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgdG9wU3RhdGU6IGZ1bmN0aW9uIHRv
cFN0YXRlKCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFj
a1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDJdOworICAgICAgICAgICAgICAgIH0sCisg
ICAgICAgICAgICAgICAgcHVzaFN0YXRlOiBmdW5jdGlvbiBiZWdpbihjb25kaXRpb24pIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGhpcy5iZWdpbihjb25kaXRpb24pOworICAgICAgICAgICAgICAg
IH0gfTsKKyAgICAgICAgICAgIGxleGVyLm9wdGlvbnMgPSB7fTsKKyAgICAgICAgICAgIGxleGVy
LnBlcmZvcm1BY3Rpb24gPSBmdW5jdGlvbiBhbm9ueW1vdXMoeXksIHl5XywgJGF2b2lkaW5nX25h
bWVfY29sbGlzaW9ucywgWVlfU1RBUlQKKyAgICAgICAgICAgIC8qKi8pIHsKKworICAgICAgICAg
ICAgICAgIGZ1bmN0aW9uIHN0cmlwKHN0YXJ0LCBlbmQpIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHl5Xy55eXRleHQgPSB5eV8ueXl0ZXh0LnN1YnN0cihzdGFydCwgeXlfLnl5bGVuZyAt
IGVuZCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdmFyIFlZU1RBVEUg
PSBZWV9TVEFSVDsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKCRhdm9pZGluZ19uYW1lX2NvbGxp
c2lvbnMpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHl5Xy55eXRleHQuc2xpY2UoLTIpID09PSAiXFxcXCIpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHJpcCgwLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLmJlZ2luKCJtdSIpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh5
eV8ueXl0ZXh0LnNsaWNlKC0xKSA9PT0gIlxcIikgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0cmlwKDAsIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmVnaW4o
ImVtdSIpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLmJlZ2luKCJtdSIpOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Xy55eXRleHQpIHJldHVybiAxNTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
MToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxNTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gMTU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJlZ2luKCdyYXcnKTty
ZXR1cm4gMTU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2hvdWxkIGJlIHVzaW5nIGB0aGlzLnRvcFN0YXRl
KClgIGJlbG93LCBidXQgaXQgY3VycmVudGx5CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBy
ZXR1cm5zIHRoZSBzZWNvbmQgdG9wIGluc3RlYWQgb2YgdGhlIGZpcnN0IHRvcC4gT3BlbmVkIGFu
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBpc3N1ZSBhYm91dCBpdCBhdCBodHRwczovL2dp
dGh1Yi5jb20vemFhY2gvamlzb24vaXNzdWVzLzI5MQorICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXSA9
PT0gJ3JhdycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTU7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHl5Xy55eXRleHQgPSB5eV8ueXl0ZXh0LnN1YnN0cig1LCB5eV8ueXlsZW5nIC0gOSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdFTkRfUkFXX0JMT0NLJzsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAx
NTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBj
YXNlIDY6CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gMTQ7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gNjU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSA4OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDY4OworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgOToK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDEwOgorICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5i
ZWdpbigncmF3Jyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMjM7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDExOgor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDU1OworICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTI6CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gNjA7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSAxMzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAy
OTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBj
YXNlIDE0OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDQ3OworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTU6CisgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7cmV0dXJuIDQ0OworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTY6CisgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7cmV0dXJuIDQ0OworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTc6CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gMzQ7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxODoKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiAzOTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICBjYXNlIDE5OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDUxOworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjA6
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gNDg7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyMToKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMudW5wdXQoeXlfLnl5dGV4dCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLnBvcFN0YXRlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJlZ2luKCdj
b20nKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgMjI6CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTQ7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDIzOgorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIDQ4OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgMjQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
NzM7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSAyNToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA3MjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDI2OgorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIDcyOworICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjc6CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gODc7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSAyODoKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSB3aGl0
ZXNwYWNlCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSAyOToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtyZXR1
cm4gNTQ7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSAzMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtyZXR1
cm4gMzM7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSAzMToKKyAgICAgICAgICAgICAgICAgICAgICAgIHl5Xy55eXRleHQgPSBzdHJpcCgx
LCAyKS5yZXBsYWNlKC9cXCIvZywgJyInKTtyZXR1cm4gODA7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAzMjoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHl5Xy55eXRleHQgPSBzdHJpcCgxLCAyKS5yZXBsYWNlKC9cXCcvZywgIiciKTty
ZXR1cm4gODA7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSAzMzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA4NTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDM0Ogor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDgyOworICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzU6CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gODI7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSAzNjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA4
MzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBj
YXNlIDM3OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDg0OworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzg6CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gODE7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAzOToKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiA3NTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICBjYXNlIDQwOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDc3OworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDE6
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gNzI7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0MjoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHl5Xy55eXRleHQgPSB5eV8ueXl0ZXh0LnJlcGxhY2UoL1xcKFtcXFxdXSkvZywg
JyQxJyk7cmV0dXJuIDcyOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgNDM6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0lO
VkFMSUQnOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgNDQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gNTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07
CisgICAgICAgICAgICBsZXhlci5ydWxlcyA9IFsvXig/OlteXHgwMF0qPyg/PShce1x7KSkpLywg
L14oPzpbXlx4MDBdKykvLCAvXig/OlteXHgwMF17Mix9Pyg/PShce1x7fFxcXHtce3xcXFxcXHtc
e3wkKSkpLywgL14oPzpce1x7XHtceyg/PVteXC9dKSkvLCAvXig/Olx7XHtce1x7XC9bXlxzISIj
JS0sXC5cLzstPkBcWy1cXmBcey1+XSsoPz1bPX1cc1wvLl0pXH1cfVx9XH0pLywgL14oPzpbXlx4
MDBdKj8oPz0oXHtce1x7XHspKSkvLCAvXig/Oltcc1xTXSo/LS0ofik/XH1cfSkvLCAvXig/Olwo
KS8sIC9eKD86XCkpLywgL14oPzpce1x7XHtceykvLCAvXig/Olx9XH1cfVx9KS8sIC9eKD86XHtc
eyh+KT8+KS8sIC9eKD86XHtceyh+KT8jPikvLCAvXig/Olx7XHsofik/I1wqPykvLCAvXig/Olx7
XHsofik/XC8pLywgL14oPzpce1x7KH4pP1xeXHMqKH4pP1x9XH0pLywgL14oPzpce1x7KH4pP1xz
KmVsc2Vccyoofik/XH1cfSkvLCAvXig/Olx7XHsofik/XF4pLywgL14oPzpce1x7KH4pP1xzKmVs
c2VcYikvLCAvXig/Olx7XHsofik/XHspLywgL14oPzpce1x7KH4pPyYpLywgL14oPzpce1x7KH4p
PyEtLSkvLCAvXig/Olx7XHsofik/IVtcc1xTXSo/XH1cfSkvLCAvXig/Olx7XHsofik/XCo/KS8s
IC9eKD86PSkvLCAvXig/OlwuXC4pLywgL14oPzpcLig/PShbPX59XHNcLy4pfF0pKSkvLCAvXig/
OltcLy5dKS8sIC9eKD86XHMrKS8sIC9eKD86XH0ofik/XH1cfSkvLCAvXig/Oih+KT9cfVx9KS8s
IC9eKD86IihcXFsiXXxbXiJdKSoiKS8sIC9eKD86JyhcXFsnXXxbXiddKSonKS8sIC9eKD86QCkv
LCAvXig/OnRydWUoPz0oW359XHMpXSkpKS8sIC9eKD86ZmFsc2UoPz0oW359XHMpXSkpKS8sIC9e
KD86dW5kZWZpbmVkKD89KFt+fVxzKV0pKSkvLCAvXig/Om51bGwoPz0oW359XHMpXSkpKS8sIC9e
KD86LT9bMC05XSsoPzpcLlswLTldKyk/KD89KFt+fVxzKV0pKSkvLCAvXig/OmFzXHMrXHwpLywg
L14oPzpcfCkvLCAvXig/OihbXlxzISIjJS0sXC5cLzstPkBcWy1cXmBcey1+XSsoPz0oWz1+fVxz
XC8uKXxdKSkpKS8sIC9eKD86XFsoXFxcXXxbXlxdXSkqXF0pLywgL14oPzouKS8sIC9eKD86JCkv
XTsKKyAgICAgICAgICAgIGxleGVyLmNvbmRpdGlvbnMgPSB7ICJtdSI6IHsgInJ1bGVzIjogWzcs
IDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIy
LCAyMywgMjQsIDI1LCAyNiwgMjcsIDI4LCAyOSwgMzAsIDMxLCAzMiwgMzMsIDM0LCAzNSwgMzYs
IDM3LCAzOCwgMzksIDQwLCA0MSwgNDIsIDQzLCA0NF0sICJpbmNsdXNpdmUiOiBmYWxzZSB9LCAi
ZW11IjogeyAicnVsZXMiOiBbMl0sICJpbmNsdXNpdmUiOiBmYWxzZSB9LCAiY29tIjogeyAicnVs
ZXMiOiBbNl0sICJpbmNsdXNpdmUiOiBmYWxzZSB9LCAicmF3IjogeyAicnVsZXMiOiBbMywgNCwg
NV0sICJpbmNsdXNpdmUiOiBmYWxzZSB9LCAiSU5JVElBTCI6IHsgInJ1bGVzIjogWzAsIDEsIDQ0
XSwgImluY2x1c2l2ZSI6IHRydWUgfSB9OworICAgICAgICAgICAgcmV0dXJuIGxleGVyOworICAg
ICAgICB9KSgpOworICAgICAgICBwYXJzZXIubGV4ZXIgPSBsZXhlcjsKKyAgICAgICAgZnVuY3Rp
b24gUGFyc2VyKCkgeworICAgICAgICAgICAgdGhpcy55eSA9IHt9OworICAgICAgICB9UGFyc2Vy
LnByb3RvdHlwZSA9IHBhcnNlcjtwYXJzZXIuUGFyc2VyID0gUGFyc2VyOworICAgICAgICByZXR1
cm4gbmV3IFBhcnNlcigpOworICAgIH0pKCk7ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTsKKyAg
ICBleHBvcnRzWydkZWZhdWx0J10gPSBoYW5kbGViYXJzOworCisvKioqLyB9LAorLyogMjcgKi8K
Ky8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewor
CisgICAgJ3VzZSBzdHJpY3QnOworCisgICAgdmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKDEpWydkZWZhdWx0J107CisKKyAgICBleHBvcnRzLl9fZXNNb2R1
bGUgPSB0cnVlOworCisgICAgdmFyIF92aXNpdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOCk7
CisKKyAgICB2YXIgX3Zpc2l0b3IyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdmlzaXRvcik7
CisKKyAgICBmdW5jdGlvbiBXaGl0ZXNwYWNlQ29udHJvbCgpIHsKKyAgICAgIHZhciBvcHRpb25z
ID0gYXJndW1lbnRzLmxlbmd0aCA8PSAwIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8g
e30gOiBhcmd1bWVudHNbMF07CisKKyAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7CisgICAg
fQorICAgIFdoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZSA9IG5ldyBfdmlzaXRvcjJbJ2RlZmF1
bHQnXSgpOworCisgICAgV2hpdGVzcGFjZUNvbnRyb2wucHJvdG90eXBlLlByb2dyYW0gPSBmdW5j
dGlvbiAocHJvZ3JhbSkgeworICAgICAgdmFyIGRvU3RhbmRhbG9uZSA9ICF0aGlzLm9wdGlvbnMu
aWdub3JlU3RhbmRhbG9uZTsKKworICAgICAgdmFyIGlzUm9vdCA9ICF0aGlzLmlzUm9vdFNlZW47
CisgICAgICB0aGlzLmlzUm9vdFNlZW4gPSB0cnVlOworCisgICAgICB2YXIgYm9keSA9IHByb2dy
YW0uYm9keTsKKyAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gYm9keS5sZW5ndGg7IGkgPCBsOyBp
KyspIHsKKyAgICAgICAgdmFyIGN1cnJlbnQgPSBib2R5W2ldLAorICAgICAgICAgICAgc3RyaXAg
PSB0aGlzLmFjY2VwdChjdXJyZW50KTsKKworICAgICAgICBpZiAoIXN0cmlwKSB7CisgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICB2YXIgX2lzUHJldldoaXRlc3BhY2Ug
PSBpc1ByZXZXaGl0ZXNwYWNlKGJvZHksIGksIGlzUm9vdCksCisgICAgICAgICAgICBfaXNOZXh0
V2hpdGVzcGFjZSA9IGlzTmV4dFdoaXRlc3BhY2UoYm9keSwgaSwgaXNSb290KSwKKyAgICAgICAg
ICAgIG9wZW5TdGFuZGFsb25lID0gc3RyaXAub3BlblN0YW5kYWxvbmUgJiYgX2lzUHJldldoaXRl
c3BhY2UsCisgICAgICAgICAgICBjbG9zZVN0YW5kYWxvbmUgPSBzdHJpcC5jbG9zZVN0YW5kYWxv
bmUgJiYgX2lzTmV4dFdoaXRlc3BhY2UsCisgICAgICAgICAgICBpbmxpbmVTdGFuZGFsb25lID0g
c3RyaXAuaW5saW5lU3RhbmRhbG9uZSAmJiBfaXNQcmV2V2hpdGVzcGFjZSAmJiBfaXNOZXh0V2hp
dGVzcGFjZTsKKworICAgICAgICBpZiAoc3RyaXAuY2xvc2UpIHsKKyAgICAgICAgICBvbWl0Umln
aHQoYm9keSwgaSwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0cmlwLm9wZW4pIHsK
KyAgICAgICAgICBvbWl0TGVmdChib2R5LCBpLCB0cnVlKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChkb1N0YW5kYWxvbmUgJiYgaW5saW5lU3RhbmRhbG9uZSkgeworICAgICAgICAgIG9taXRS
aWdodChib2R5LCBpKTsKKworICAgICAgICAgIGlmIChvbWl0TGVmdChib2R5LCBpKSkgeworICAg
ICAgICAgICAgLy8gSWYgd2UgYXJlIG9uIGEgc3RhbmRhbG9uZSBub2RlLCBzYXZlIHRoZSBpbmRl
bnQgaW5mbyBmb3IgcGFydGlhbHMKKyAgICAgICAgICAgIGlmIChjdXJyZW50LnR5cGUgPT09ICdQ
YXJ0aWFsU3RhdGVtZW50JykgeworICAgICAgICAgICAgICAvLyBQdWxsIG91dCB0aGUgd2hpdGVz
cGFjZSBmcm9tIHRoZSBmaW5hbCBsaW5lCisgICAgICAgICAgICAgIGN1cnJlbnQuaW5kZW50ID0g
LyhbIFx0XSskKS8uZXhlYyhib2R5W2kgLSAxXS5vcmlnaW5hbClbMV07CisgICAgICAgICAgICB9
CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChkb1N0YW5kYWxvbmUgJiYgb3Bl
blN0YW5kYWxvbmUpIHsKKyAgICAgICAgICBvbWl0UmlnaHQoKGN1cnJlbnQucHJvZ3JhbSB8fCBj
dXJyZW50LmludmVyc2UpLmJvZHkpOworCisgICAgICAgICAgLy8gU3RyaXAgb3V0IHRoZSBwcmV2
aW91cyBjb250ZW50IG5vZGUgaWYgaXQncyB3aGl0ZXNwYWNlIG9ubHkKKyAgICAgICAgICBvbWl0
TGVmdChib2R5LCBpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZG9TdGFuZGFsb25lICYmIGNs
b3NlU3RhbmRhbG9uZSkgeworICAgICAgICAgIC8vIEFsd2F5cyBzdHJpcCB0aGUgbmV4dCBub2Rl
CisgICAgICAgICAgb21pdFJpZ2h0KGJvZHksIGkpOworCisgICAgICAgICAgb21pdExlZnQoKGN1
cnJlbnQuaW52ZXJzZSB8fCBjdXJyZW50LnByb2dyYW0pLmJvZHkpOworICAgICAgICB9CisgICAg
ICB9CisKKyAgICAgIHJldHVybiBwcm9ncmFtOworICAgIH07CisKKyAgICBXaGl0ZXNwYWNlQ29u
dHJvbC5wcm90b3R5cGUuQmxvY2tTdGF0ZW1lbnQgPSBXaGl0ZXNwYWNlQ29udHJvbC5wcm90b3R5
cGUuRGVjb3JhdG9yQmxvY2sgPSBXaGl0ZXNwYWNlQ29udHJvbC5wcm90b3R5cGUuUGFydGlhbEJs
b2NrU3RhdGVtZW50ID0gZnVuY3Rpb24gKGJsb2NrKSB7CisgICAgICB0aGlzLmFjY2VwdChibG9j
ay5wcm9ncmFtKTsKKyAgICAgIHRoaXMuYWNjZXB0KGJsb2NrLmludmVyc2UpOworCisgICAgICAv
LyBGaW5kIHRoZSBpbnZlcnNlIHByb2dyYW0gdGhhdCBpcyBpbnZvbGVkIHdpdGggd2hpdGVzcGFj
ZSBzdHJpcHBpbmcuCisgICAgICB2YXIgcHJvZ3JhbSA9IGJsb2NrLnByb2dyYW0gfHwgYmxvY2su
aW52ZXJzZSwKKyAgICAgICAgICBpbnZlcnNlID0gYmxvY2sucHJvZ3JhbSAmJiBibG9jay5pbnZl
cnNlLAorICAgICAgICAgIGZpcnN0SW52ZXJzZSA9IGludmVyc2UsCisgICAgICAgICAgbGFzdElu
dmVyc2UgPSBpbnZlcnNlOworCisgICAgICBpZiAoaW52ZXJzZSAmJiBpbnZlcnNlLmNoYWluZWQp
IHsKKyAgICAgICAgZmlyc3RJbnZlcnNlID0gaW52ZXJzZS5ib2R5WzBdLnByb2dyYW07CisKKyAg
ICAgICAgLy8gV2FsayB0aGUgaW52ZXJzZSBjaGFpbiB0byBmaW5kIHRoZSBsYXN0IGludmVyc2Ug
dGhhdCBpcyBhY3R1YWxseSBpbiB0aGUgY2hhaW4uCisgICAgICAgIHdoaWxlIChsYXN0SW52ZXJz
ZS5jaGFpbmVkKSB7CisgICAgICAgICAgbGFzdEludmVyc2UgPSBsYXN0SW52ZXJzZS5ib2R5W2xh
c3RJbnZlcnNlLmJvZHkubGVuZ3RoIC0gMV0ucHJvZ3JhbTsKKyAgICAgICAgfQorICAgICAgfQor
CisgICAgICB2YXIgc3RyaXAgPSB7CisgICAgICAgIG9wZW46IGJsb2NrLm9wZW5TdHJpcC5vcGVu
LAorICAgICAgICBjbG9zZTogYmxvY2suY2xvc2VTdHJpcC5jbG9zZSwKKworICAgICAgICAvLyBE
ZXRlcm1pbmUgdGhlIHN0YW5kYWxvbmUgY2FuZGlhY3kuIEJhc2ljYWxseSBmbGFnIG91ciBjb250
ZW50IGFzIGJlaW5nIHBvc3NpYmx5IHN0YW5kYWxvbmUKKyAgICAgICAgLy8gc28gb3VyIHBhcmVu
dCBjYW4gZGV0ZXJtaW5lIGlmIHdlIGFjdHVhbGx5IGFyZSBzdGFuZGFsb25lCisgICAgICAgIG9w
ZW5TdGFuZGFsb25lOiBpc05leHRXaGl0ZXNwYWNlKHByb2dyYW0uYm9keSksCisgICAgICAgIGNs
b3NlU3RhbmRhbG9uZTogaXNQcmV2V2hpdGVzcGFjZSgoZmlyc3RJbnZlcnNlIHx8IHByb2dyYW0p
LmJvZHkpCisgICAgICB9OworCisgICAgICBpZiAoYmxvY2sub3BlblN0cmlwLmNsb3NlKSB7Cisg
ICAgICAgIG9taXRSaWdodChwcm9ncmFtLmJvZHksIG51bGwsIHRydWUpOworICAgICAgfQorCisg
ICAgICBpZiAoaW52ZXJzZSkgeworICAgICAgICB2YXIgaW52ZXJzZVN0cmlwID0gYmxvY2suaW52
ZXJzZVN0cmlwOworCisgICAgICAgIGlmIChpbnZlcnNlU3RyaXAub3BlbikgeworICAgICAgICAg
IG9taXRMZWZ0KHByb2dyYW0uYm9keSwgbnVsbCwgdHJ1ZSk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoaW52ZXJzZVN0cmlwLmNsb3NlKSB7CisgICAgICAgICAgb21pdFJpZ2h0KGZpcnN0SW52
ZXJzZS5ib2R5LCBudWxsLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYmxvY2suY2xv
c2VTdHJpcC5vcGVuKSB7CisgICAgICAgICAgb21pdExlZnQobGFzdEludmVyc2UuYm9keSwgbnVs
bCwgdHJ1ZSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBGaW5kIHN0YW5kYWxvbmUgZWxzZSBz
dGF0bWVudHMKKyAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuaWdub3JlU3RhbmRhbG9uZSAmJiBp
c1ByZXZXaGl0ZXNwYWNlKHByb2dyYW0uYm9keSkgJiYgaXNOZXh0V2hpdGVzcGFjZShmaXJzdElu
dmVyc2UuYm9keSkpIHsKKyAgICAgICAgICBvbWl0TGVmdChwcm9ncmFtLmJvZHkpOworICAgICAg
ICAgIG9taXRSaWdodChmaXJzdEludmVyc2UuYm9keSk7CisgICAgICAgIH0KKyAgICAgIH0gZWxz
ZSBpZiAoYmxvY2suY2xvc2VTdHJpcC5vcGVuKSB7CisgICAgICAgIG9taXRMZWZ0KHByb2dyYW0u
Ym9keSwgbnVsbCwgdHJ1ZSk7CisgICAgICB9CisKKyAgICAgIHJldHVybiBzdHJpcDsKKyAgICB9
OworCisgICAgV2hpdGVzcGFjZUNvbnRyb2wucHJvdG90eXBlLkRlY29yYXRvciA9IFdoaXRlc3Bh
Y2VDb250cm9sLnByb3RvdHlwZS5NdXN0YWNoZVN0YXRlbWVudCA9IGZ1bmN0aW9uIChtdXN0YWNo
ZSkgeworICAgICAgcmV0dXJuIG11c3RhY2hlLnN0cmlwOworICAgIH07CisKKyAgICBXaGl0ZXNw
YWNlQ29udHJvbC5wcm90b3R5cGUuUGFydGlhbFN0YXRlbWVudCA9IFdoaXRlc3BhY2VDb250cm9s
LnByb3RvdHlwZS5Db21tZW50U3RhdGVtZW50ID0gZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAgIC8q
IGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovCisgICAgICB2YXIgc3RyaXAgPSBub2RlLnN0cmlwIHx8
IHt9OworICAgICAgcmV0dXJuIHsKKyAgICAgICAgaW5saW5lU3RhbmRhbG9uZTogdHJ1ZSwKKyAg
ICAgICAgb3Blbjogc3RyaXAub3BlbiwKKyAgICAgICAgY2xvc2U6IHN0cmlwLmNsb3NlCisgICAg
ICB9OworICAgIH07CisKKyAgICBmdW5jdGlvbiBpc1ByZXZXaGl0ZXNwYWNlKGJvZHksIGksIGlz
Um9vdCkgeworICAgICAgaWYgKGkgPT09IHVuZGVmaW5lZCkgeworICAgICAgICBpID0gYm9keS5s
ZW5ndGg7CisgICAgICB9CisKKyAgICAgIC8vIE5vZGVzIHRoYXQgZW5kIHdpdGggbmV3bGluZXMg
YXJlIGNvbnNpZGVyZWQgd2hpdGVzcGFjZSAoYnV0IGFyZSBzcGVjaWFsCisgICAgICAvLyBjYXNl
ZCBmb3Igc3RyaXAgb3BlcmF0aW9ucykKKyAgICAgIHZhciBwcmV2ID0gYm9keVtpIC0gMV0sCisg
ICAgICAgICAgc2libGluZyA9IGJvZHlbaSAtIDJdOworICAgICAgaWYgKCFwcmV2KSB7CisgICAg
ICAgIHJldHVybiBpc1Jvb3Q7CisgICAgICB9CisKKyAgICAgIGlmIChwcmV2LnR5cGUgPT09ICdD
b250ZW50U3RhdGVtZW50JykgeworICAgICAgICByZXR1cm4gKHNpYmxpbmcgfHwgIWlzUm9vdCA/
IC9ccj9cblxzKj8kLyA6IC8oXnxccj9cbilccyo/JC8pLnRlc3QocHJldi5vcmlnaW5hbCk7Cisg
ICAgICB9CisgICAgfQorICAgIGZ1bmN0aW9uIGlzTmV4dFdoaXRlc3BhY2UoYm9keSwgaSwgaXNS
b290KSB7CisgICAgICBpZiAoaSA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgIGkgPSAtMTsKKyAg
ICAgIH0KKworICAgICAgdmFyIG5leHQgPSBib2R5W2kgKyAxXSwKKyAgICAgICAgICBzaWJsaW5n
ID0gYm9keVtpICsgMl07CisgICAgICBpZiAoIW5leHQpIHsKKyAgICAgICAgcmV0dXJuIGlzUm9v
dDsKKyAgICAgIH0KKworICAgICAgaWYgKG5leHQudHlwZSA9PT0gJ0NvbnRlbnRTdGF0ZW1lbnQn
KSB7CisgICAgICAgIHJldHVybiAoc2libGluZyB8fCAhaXNSb290ID8gL15ccyo/XHI/XG4vIDog
L15ccyo/KFxyP1xufCQpLykudGVzdChuZXh0Lm9yaWdpbmFsKTsKKyAgICAgIH0KKyAgICB9CisK
KyAgICAvLyBNYXJrcyB0aGUgbm9kZSB0byB0aGUgcmlnaHQgb2YgdGhlIHBvc2l0aW9uIGFzIG9t
aXR0ZWQuCisgICAgLy8gSS5lLiB7e2Zvb319JyAnIHdpbGwgbWFyayB0aGUgJyAnIG5vZGUgYXMg
b21pdHRlZC4KKyAgICAvLworICAgIC8vIElmIGkgaXMgdW5kZWZpbmVkLCB0aGVuIHRoZSBmaXJz
dCBjaGlsZCB3aWxsIGJlIG1hcmtlZCBhcyBzdWNoLgorICAgIC8vCisgICAgLy8gSWYgbXVsaXRw
bGUgaXMgdHJ1dGh5IHRoZW4gYWxsIHdoaXRlc3BhY2Ugd2lsbCBiZSBzdHJpcHBlZCBvdXQgdW50
aWwgbm9uLXdoaXRlc3BhY2UKKyAgICAvLyBjb250ZW50IGlzIG1ldC4KKyAgICBmdW5jdGlvbiBv
bWl0UmlnaHQoYm9keSwgaSwgbXVsdGlwbGUpIHsKKyAgICAgIHZhciBjdXJyZW50ID0gYm9keVtp
ID09IG51bGwgPyAwIDogaSArIDFdOworICAgICAgaWYgKCFjdXJyZW50IHx8IGN1cnJlbnQudHlw
ZSAhPT0gJ0NvbnRlbnRTdGF0ZW1lbnQnIHx8ICFtdWx0aXBsZSAmJiBjdXJyZW50LnJpZ2h0U3Ry
aXBwZWQpIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorCisgICAgICB2YXIgb3JpZ2luYWwg
PSBjdXJyZW50LnZhbHVlOworICAgICAgY3VycmVudC52YWx1ZSA9IGN1cnJlbnQudmFsdWUucmVw
bGFjZShtdWx0aXBsZSA/IC9eXHMrLyA6IC9eWyBcdF0qXHI/XG4/LywgJycpOworICAgICAgY3Vy
cmVudC5yaWdodFN0cmlwcGVkID0gY3VycmVudC52YWx1ZSAhPT0gb3JpZ2luYWw7CisgICAgfQor
CisgICAgLy8gTWFya3MgdGhlIG5vZGUgdG8gdGhlIGxlZnQgb2YgdGhlIHBvc2l0aW9uIGFzIG9t
aXR0ZWQuCisgICAgLy8gSS5lLiAnICd7e2Zvb319IHdpbGwgbWFyayB0aGUgJyAnIG5vZGUgYXMg
b21pdHRlZC4KKyAgICAvLworICAgIC8vIElmIGkgaXMgdW5kZWZpbmVkIHRoZW4gdGhlIGxhc3Qg
Y2hpbGQgd2lsbCBiZSBtYXJrZWQgYXMgc3VjaC4KKyAgICAvLworICAgIC8vIElmIG11bGl0cGxl
IGlzIHRydXRoeSB0aGVuIGFsbCB3aGl0ZXNwYWNlIHdpbGwgYmUgc3RyaXBwZWQgb3V0IHVudGls
IG5vbi13aGl0ZXNwYWNlCisgICAgLy8gY29udGVudCBpcyBtZXQuCisgICAgZnVuY3Rpb24gb21p
dExlZnQoYm9keSwgaSwgbXVsdGlwbGUpIHsKKyAgICAgIHZhciBjdXJyZW50ID0gYm9keVtpID09
IG51bGwgPyBib2R5Lmxlbmd0aCAtIDEgOiBpIC0gMV07CisgICAgICBpZiAoIWN1cnJlbnQgfHwg
Y3VycmVudC50eXBlICE9PSAnQ29udGVudFN0YXRlbWVudCcgfHwgIW11bHRpcGxlICYmIGN1cnJl
bnQubGVmdFN0cmlwcGVkKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKworICAgICAgLy8g
V2Ugb21pdCB0aGUgbGFzdCBub2RlIGlmIGl0J3Mgd2hpdGVzcGFjZSBvbmx5IGFuZCBub3QgcHJl
Y2VlZGVkIGJ5IGEgbm9uLWNvbnRlbnQgbm9kZS4KKyAgICAgIHZhciBvcmlnaW5hbCA9IGN1cnJl
bnQudmFsdWU7CisgICAgICBjdXJyZW50LnZhbHVlID0gY3VycmVudC52YWx1ZS5yZXBsYWNlKG11
bHRpcGxlID8gL1xzKyQvIDogL1sgXHRdKyQvLCAnJyk7CisgICAgICBjdXJyZW50LmxlZnRTdHJp
cHBlZCA9IGN1cnJlbnQudmFsdWUgIT09IG9yaWdpbmFsOworICAgICAgcmV0dXJuIGN1cnJlbnQu
bGVmdFN0cmlwcGVkOworICAgIH0KKworICAgIGV4cG9ydHNbJ2RlZmF1bHQnXSA9IFdoaXRlc3Bh
Y2VDb250cm9sOworICAgIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddOworCisv
KioqLyB9LAorLyogMjggKi8KKy8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJw
YWNrX3JlcXVpcmVfXykgeworCisgICAgJ3VzZSBzdHJpY3QnOworCisgICAgdmFyIF9pbnRlcm9w
UmVxdWlyZURlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpWydkZWZhdWx0J107CisKKyAg
ICBleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlOworCisgICAgdmFyIF9leGNlcHRpb24gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKDYpOworCisgICAgdmFyIF9leGNlcHRpb24yID0gX2ludGVyb3BSZXF1
aXJlRGVmYXVsdChfZXhjZXB0aW9uKTsKKworICAgIGZ1bmN0aW9uIFZpc2l0b3IoKSB7CisgICAg
ICB0aGlzLnBhcmVudHMgPSBbXTsKKyAgICB9CisKKyAgICBWaXNpdG9yLnByb3RvdHlwZSA9IHsK
KyAgICAgIGNvbnN0cnVjdG9yOiBWaXNpdG9yLAorICAgICAgbXV0YXRpbmc6IGZhbHNlLAorCisg
ICAgICAvLyBWaXNpdHMgYSBnaXZlbiB2YWx1ZS4gSWYgbXV0YXRpbmcsIHdpbGwgcmVwbGFjZSB0
aGUgdmFsdWUgaWYgbmVjZXNzYXJ5LgorICAgICAgYWNjZXB0S2V5OiBmdW5jdGlvbiBhY2NlcHRL
ZXkobm9kZSwgbmFtZSkgeworICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLmFjY2VwdChub2RlW25h
bWVdKTsKKyAgICAgICAgaWYgKHRoaXMubXV0YXRpbmcpIHsKKyAgICAgICAgICAvLyBIYWNreSBz
YW5pdHkgY2hlY2s6IFRoaXMgbWF5IGhhdmUgYSBmZXcgZmFsc2UgcG9zaXRpdmVzIGZvciB0eXBl
IGZvciB0aGUgaGVscGVyCisgICAgICAgICAgLy8gbWV0aG9kcyBidXQgd2lsbCBnZW5lcmFsbHkg
ZG8gdGhlIHJpZ2h0IHRoaW5nIHdpdGhvdXQgYSBsb3Qgb2Ygb3ZlcmhlYWQuCisgICAgICAgICAg
aWYgKHZhbHVlICYmICFWaXNpdG9yLnByb3RvdHlwZVt2YWx1ZS50eXBlXSkgeworICAgICAgICAg
ICAgdGhyb3cgbmV3IF9leGNlcHRpb24yWydkZWZhdWx0J10oJ1VuZXhwZWN0ZWQgbm9kZSB0eXBl
ICInICsgdmFsdWUudHlwZSArICciIGZvdW5kIHdoZW4gYWNjZXB0aW5nICcgKyBuYW1lICsgJyBv
biAnICsgbm9kZS50eXBlKTsKKyAgICAgICAgICB9CisgICAgICAgICAgbm9kZVtuYW1lXSA9IHZh
bHVlOworICAgICAgICB9CisgICAgICB9LAorCisgICAgICAvLyBQZXJmb3JtcyBhbiBhY2NlcHQg
b3BlcmF0aW9uIHdpdGggYWRkZWQgc2FuaXR5IGNoZWNrIHRvIGVuc3VyZQorICAgICAgLy8gcmVx
dWlyZWQga2V5cyBhcmUgbm90IHJlbW92ZWQuCisgICAgICBhY2NlcHRSZXF1aXJlZDogZnVuY3Rp
b24gYWNjZXB0UmVxdWlyZWQobm9kZSwgbmFtZSkgeworICAgICAgICB0aGlzLmFjY2VwdEtleShu
b2RlLCBuYW1lKTsKKworICAgICAgICBpZiAoIW5vZGVbbmFtZV0pIHsKKyAgICAgICAgICB0aHJv
dyBuZXcgX2V4Y2VwdGlvbjJbJ2RlZmF1bHQnXShub2RlLnR5cGUgKyAnIHJlcXVpcmVzICcgKyBu
YW1lKTsKKyAgICAgICAgfQorICAgICAgfSwKKworICAgICAgLy8gVHJhdmVyc2VzIGEgZ2l2ZW4g
YXJyYXkuIElmIG11dGF0aW5nLCBlbXB0eSByZXNwbnNlcyB3aWxsIGJlIHJlbW92ZWQKKyAgICAg
IC8vIGZvciBjaGlsZCBlbGVtZW50cy4KKyAgICAgIGFjY2VwdEFycmF5OiBmdW5jdGlvbiBhY2Nl
cHRBcnJheShhcnJheSkgeworICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGFycmF5Lmxlbmd0
aDsgaSA8IGw7IGkrKykgeworICAgICAgICAgIHRoaXMuYWNjZXB0S2V5KGFycmF5LCBpKTsKKwor
ICAgICAgICAgIGlmICghYXJyYXlbaV0pIHsKKyAgICAgICAgICAgIGFycmF5LnNwbGljZShpLCAx
KTsKKyAgICAgICAgICAgIGktLTsKKyAgICAgICAgICAgIGwtLTsKKyAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgIH0sCisKKyAgICAgIGFjY2VwdDogZnVuY3Rpb24gYWNjZXB0KG9iamVjdCkg
eworICAgICAgICBpZiAoIW9iamVjdCkgeworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBTYW5pdHkgY29kZSAqLworICAgICAg
ICBpZiAoIXRoaXNbb2JqZWN0LnR5cGVdKSB7CisgICAgICAgICAgdGhyb3cgbmV3IF9leGNlcHRp
b24yWydkZWZhdWx0J10oJ1Vua25vd24gdHlwZTogJyArIG9iamVjdC50eXBlLCBvYmplY3QpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHRoaXMuY3VycmVudCkgeworICAgICAgICAgIHRoaXMu
cGFyZW50cy51bnNoaWZ0KHRoaXMuY3VycmVudCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5j
dXJyZW50ID0gb2JqZWN0OworCisgICAgICAgIHZhciByZXQgPSB0aGlzW29iamVjdC50eXBlXShv
YmplY3QpOworCisgICAgICAgIHRoaXMuY3VycmVudCA9IHRoaXMucGFyZW50cy5zaGlmdCgpOwor
CisgICAgICAgIGlmICghdGhpcy5tdXRhdGluZyB8fCByZXQpIHsKKyAgICAgICAgICByZXR1cm4g
cmV0OworICAgICAgICB9IGVsc2UgaWYgKHJldCAhPT0gZmFsc2UpIHsKKyAgICAgICAgICByZXR1
cm4gb2JqZWN0OworICAgICAgICB9CisgICAgICB9LAorCisgICAgICBQcm9ncmFtOiBmdW5jdGlv
biBQcm9ncmFtKHByb2dyYW0pIHsKKyAgICAgICAgdGhpcy5hY2NlcHRBcnJheShwcm9ncmFtLmJv
ZHkpOworICAgICAgfSwKKworICAgICAgTXVzdGFjaGVTdGF0ZW1lbnQ6IHZpc2l0U3ViRXhwcmVz
c2lvbiwKKyAgICAgIERlY29yYXRvcjogdmlzaXRTdWJFeHByZXNzaW9uLAorCisgICAgICBCbG9j
a1N0YXRlbWVudDogdmlzaXRCbG9jaywKKyAgICAgIERlY29yYXRvckJsb2NrOiB2aXNpdEJsb2Nr
LAorCisgICAgICBQYXJ0aWFsU3RhdGVtZW50OiB2aXNpdFBhcnRpYWwsCisgICAgICBQYXJ0aWFs
QmxvY2tTdGF0ZW1lbnQ6IGZ1bmN0aW9uIFBhcnRpYWxCbG9ja1N0YXRlbWVudChwYXJ0aWFsKSB7
CisgICAgICAgIHZpc2l0UGFydGlhbC5jYWxsKHRoaXMsIHBhcnRpYWwpOworCisgICAgICAgIHRo
aXMuYWNjZXB0S2V5KHBhcnRpYWwsICdwcm9ncmFtJyk7CisgICAgICB9LAorCisgICAgICBDb250
ZW50U3RhdGVtZW50OiBmdW5jdGlvbiBDb250ZW50U3RhdGVtZW50KCkgLyogY29udGVudCAqL3t9
LAorICAgICAgQ29tbWVudFN0YXRlbWVudDogZnVuY3Rpb24gQ29tbWVudFN0YXRlbWVudCgpIC8q
IGNvbW1lbnQgKi97fSwKKworICAgICAgU3ViRXhwcmVzc2lvbjogdmlzaXRTdWJFeHByZXNzaW9u
LAorCisgICAgICBQYXRoRXhwcmVzc2lvbjogZnVuY3Rpb24gUGF0aEV4cHJlc3Npb24oKSAvKiBw
YXRoICove30sCisKKyAgICAgIFN0cmluZ0xpdGVyYWw6IGZ1bmN0aW9uIFN0cmluZ0xpdGVyYWwo
KSAvKiBzdHJpbmcgKi97fSwKKyAgICAgIE51bWJlckxpdGVyYWw6IGZ1bmN0aW9uIE51bWJlckxp
dGVyYWwoKSAvKiBudW1iZXIgKi97fSwKKyAgICAgIEJvb2xlYW5MaXRlcmFsOiBmdW5jdGlvbiBC
b29sZWFuTGl0ZXJhbCgpIC8qIGJvb2wgKi97fSwKKyAgICAgIFVuZGVmaW5lZExpdGVyYWw6IGZ1
bmN0aW9uIFVuZGVmaW5lZExpdGVyYWwoKSAvKiBsaXRlcmFsICove30sCisgICAgICBOdWxsTGl0
ZXJhbDogZnVuY3Rpb24gTnVsbExpdGVyYWwoKSAvKiBsaXRlcmFsICove30sCisKKyAgICAgIEhh
c2g6IGZ1bmN0aW9uIEhhc2goaGFzaCkgeworICAgICAgICB0aGlzLmFjY2VwdEFycmF5KGhhc2gu
cGFpcnMpOworICAgICAgfSwKKyAgICAgIEhhc2hQYWlyOiBmdW5jdGlvbiBIYXNoUGFpcihwYWly
KSB7CisgICAgICAgIHRoaXMuYWNjZXB0UmVxdWlyZWQocGFpciwgJ3ZhbHVlJyk7CisgICAgICB9
CisgICAgfTsKKworICAgIGZ1bmN0aW9uIHZpc2l0U3ViRXhwcmVzc2lvbihtdXN0YWNoZSkgewor
ICAgICAgdGhpcy5hY2NlcHRSZXF1aXJlZChtdXN0YWNoZSwgJ3BhdGgnKTsKKyAgICAgIHRoaXMu
YWNjZXB0QXJyYXkobXVzdGFjaGUucGFyYW1zKTsKKyAgICAgIHRoaXMuYWNjZXB0S2V5KG11c3Rh
Y2hlLCAnaGFzaCcpOworICAgIH0KKyAgICBmdW5jdGlvbiB2aXNpdEJsb2NrKGJsb2NrKSB7Cisg
ICAgICB2aXNpdFN1YkV4cHJlc3Npb24uY2FsbCh0aGlzLCBibG9jayk7CisKKyAgICAgIHRoaXMu
YWNjZXB0S2V5KGJsb2NrLCAncHJvZ3JhbScpOworICAgICAgdGhpcy5hY2NlcHRLZXkoYmxvY2ss
ICdpbnZlcnNlJyk7CisgICAgfQorICAgIGZ1bmN0aW9uIHZpc2l0UGFydGlhbChwYXJ0aWFsKSB7
CisgICAgICB0aGlzLmFjY2VwdFJlcXVpcmVkKHBhcnRpYWwsICduYW1lJyk7CisgICAgICB0aGlz
LmFjY2VwdEFycmF5KHBhcnRpYWwucGFyYW1zKTsKKyAgICAgIHRoaXMuYWNjZXB0S2V5KHBhcnRp
YWwsICdoYXNoJyk7CisgICAgfQorCisgICAgZXhwb3J0c1snZGVmYXVsdCddID0gVmlzaXRvcjsK
KyAgICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTsKKworLyoqKi8gfSwKKy8q
IDI5ICovCisvKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJl
X18pIHsKKworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIHZhciBfaW50ZXJvcFJlcXVpcmVEZWZh
dWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKVsnZGVmYXVsdCddOworCisgICAgZXhwb3J0cy5f
X2VzTW9kdWxlID0gdHJ1ZTsKKyAgICBleHBvcnRzLlNvdXJjZUxvY2F0aW9uID0gU291cmNlTG9j
YXRpb247CisgICAgZXhwb3J0cy5pZCA9IGlkOworICAgIGV4cG9ydHMuc3RyaXBGbGFncyA9IHN0
cmlwRmxhZ3M7CisgICAgZXhwb3J0cy5zdHJpcENvbW1lbnQgPSBzdHJpcENvbW1lbnQ7CisgICAg
ZXhwb3J0cy5wcmVwYXJlUGF0aCA9IHByZXBhcmVQYXRoOworICAgIGV4cG9ydHMucHJlcGFyZU11
c3RhY2hlID0gcHJlcGFyZU11c3RhY2hlOworICAgIGV4cG9ydHMucHJlcGFyZVJhd0Jsb2NrID0g
cHJlcGFyZVJhd0Jsb2NrOworICAgIGV4cG9ydHMucHJlcGFyZUJsb2NrID0gcHJlcGFyZUJsb2Nr
OworICAgIGV4cG9ydHMucHJlcGFyZVByb2dyYW0gPSBwcmVwYXJlUHJvZ3JhbTsKKyAgICBleHBv
cnRzLnByZXBhcmVQYXJ0aWFsQmxvY2sgPSBwcmVwYXJlUGFydGlhbEJsb2NrOworCisgICAgdmFy
IF9leGNlcHRpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpOworCisgICAgdmFyIF9leGNlcHRp
b24yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZXhjZXB0aW9uKTsKKworICAgIGZ1bmN0aW9u
IHZhbGlkYXRlQ2xvc2Uob3BlbiwgY2xvc2UpIHsKKyAgICAgIGNsb3NlID0gY2xvc2UucGF0aCA/
IGNsb3NlLnBhdGgub3JpZ2luYWwgOiBjbG9zZTsKKworICAgICAgaWYgKG9wZW4ucGF0aC5vcmln
aW5hbCAhPT0gY2xvc2UpIHsKKyAgICAgICAgdmFyIGVycm9yTm9kZSA9IHsgbG9jOiBvcGVuLnBh
dGgubG9jIH07CisKKyAgICAgICAgdGhyb3cgbmV3IF9leGNlcHRpb24yWydkZWZhdWx0J10ob3Bl
bi5wYXRoLm9yaWdpbmFsICsgIiBkb2Vzbid0IG1hdGNoICIgKyBjbG9zZSwgZXJyb3JOb2RlKTsK
KyAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBTb3VyY2VMb2NhdGlvbihzb3VyY2UsIGxv
Y0luZm8pIHsKKyAgICAgIHRoaXMuc291cmNlID0gc291cmNlOworICAgICAgdGhpcy5zdGFydCA9
IHsKKyAgICAgICAgbGluZTogbG9jSW5mby5maXJzdF9saW5lLAorICAgICAgICBjb2x1bW46IGxv
Y0luZm8uZmlyc3RfY29sdW1uCisgICAgICB9OworICAgICAgdGhpcy5lbmQgPSB7CisgICAgICAg
IGxpbmU6IGxvY0luZm8ubGFzdF9saW5lLAorICAgICAgICBjb2x1bW46IGxvY0luZm8ubGFzdF9j
b2x1bW4KKyAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gaWQodG9rZW4pIHsKKyAgICAg
IGlmICgvXlxbLipcXSQvLnRlc3QodG9rZW4pKSB7CisgICAgICAgIHJldHVybiB0b2tlbi5zdWJz
dHIoMSwgdG9rZW4ubGVuZ3RoIC0gMik7CisgICAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4g
dG9rZW47CisgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gc3RyaXBGbGFncyhvcGVuLCBj
bG9zZSkgeworICAgICAgcmV0dXJuIHsKKyAgICAgICAgb3Blbjogb3Blbi5jaGFyQXQoMikgPT09
ICd+JywKKyAgICAgICAgY2xvc2U6IGNsb3NlLmNoYXJBdChjbG9zZS5sZW5ndGggLSAzKSA9PT0g
J34nCisgICAgICB9OworICAgIH0KKworICAgIGZ1bmN0aW9uIHN0cmlwQ29tbWVudChjb21tZW50
KSB7CisgICAgICByZXR1cm4gY29tbWVudC5yZXBsYWNlKC9eXHtce34/XCEtPy0/LywgJycpLnJl
cGxhY2UoLy0/LT9+P1x9XH0kLywgJycpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHByZXBhcmVQ
YXRoKGRhdGEsIHBhcnRzLCBsb2MpIHsKKyAgICAgIGxvYyA9IHRoaXMubG9jSW5mbyhsb2MpOwor
CisgICAgICB2YXIgb3JpZ2luYWwgPSBkYXRhID8gJ0AnIDogJycsCisgICAgICAgICAgZGlnID0g
W10sCisgICAgICAgICAgZGVwdGggPSAwLAorICAgICAgICAgIGRlcHRoU3RyaW5nID0gJyc7CisK
KyAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcGFydHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7Cisg
ICAgICAgIHZhciBwYXJ0ID0gcGFydHNbaV0ucGFydCwKKworICAgICAgICAvLyBJZiB3ZSBoYXZl
IFtdIHN5bnRheCB0aGVuIHdlIGRvIG5vdCB0cmVhdCBwYXRoIHJlZmVyZW5jZXMgYXMgb3BlcmF0
b3JzLAorICAgICAgICAvLyBpLmUuIGZvby5bdGhpc10gcmVzb2x2ZXMgdG8gYXBwcm94aW1hdGVs
eSBjb250ZXh0LmZvb1sndGhpcyddCisgICAgICAgIGlzTGl0ZXJhbCA9IHBhcnRzW2ldLm9yaWdp
bmFsICE9PSBwYXJ0OworICAgICAgICBvcmlnaW5hbCArPSAocGFydHNbaV0uc2VwYXJhdG9yIHx8
ICcnKSArIHBhcnQ7CisKKyAgICAgICAgaWYgKCFpc0xpdGVyYWwgJiYgKHBhcnQgPT09ICcuLicg
fHwgcGFydCA9PT0gJy4nIHx8IHBhcnQgPT09ICd0aGlzJykpIHsKKyAgICAgICAgICBpZiAoZGln
Lmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBfZXhjZXB0aW9uMlsnZGVmYXVs
dCddKCdJbnZhbGlkIHBhdGg6ICcgKyBvcmlnaW5hbCwgeyBsb2M6IGxvYyB9KTsKKyAgICAgICAg
ICB9IGVsc2UgaWYgKHBhcnQgPT09ICcuLicpIHsKKyAgICAgICAgICAgIGRlcHRoKys7CisgICAg
ICAgICAgICBkZXB0aFN0cmluZyArPSAnLi4vJzsKKyAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgZGlnLnB1c2gocGFydCk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAg
ICAgcmV0dXJuIHsKKyAgICAgICAgdHlwZTogJ1BhdGhFeHByZXNzaW9uJywKKyAgICAgICAgZGF0
YTogZGF0YSwKKyAgICAgICAgZGVwdGg6IGRlcHRoLAorICAgICAgICBwYXJ0czogZGlnLAorICAg
ICAgICBvcmlnaW5hbDogb3JpZ2luYWwsCisgICAgICAgIGxvYzogbG9jCisgICAgICB9OworICAg
IH0KKworICAgIGZ1bmN0aW9uIHByZXBhcmVNdXN0YWNoZShwYXRoLCBwYXJhbXMsIGhhc2gsIG9w
ZW4sIHN0cmlwLCBsb2NJbmZvKSB7CisgICAgICAvLyBNdXN0IHVzZSBjaGFyQXQgdG8gc3VwcG9y
dCBJRSBwcmUtMTAKKyAgICAgIHZhciBlc2NhcGVGbGFnID0gb3Blbi5jaGFyQXQoMykgfHwgb3Bl
bi5jaGFyQXQoMiksCisgICAgICAgICAgZXNjYXBlZCA9IGVzY2FwZUZsYWcgIT09ICd7JyAmJiBl
c2NhcGVGbGFnICE9PSAnJic7CisKKyAgICAgIHZhciBkZWNvcmF0b3IgPSAvXCovLnRlc3Qob3Bl
bik7CisgICAgICByZXR1cm4geworICAgICAgICB0eXBlOiBkZWNvcmF0b3IgPyAnRGVjb3JhdG9y
JyA6ICdNdXN0YWNoZVN0YXRlbWVudCcsCisgICAgICAgIHBhdGg6IHBhdGgsCisgICAgICAgIHBh
cmFtczogcGFyYW1zLAorICAgICAgICBoYXNoOiBoYXNoLAorICAgICAgICBlc2NhcGVkOiBlc2Nh
cGVkLAorICAgICAgICBzdHJpcDogc3RyaXAsCisgICAgICAgIGxvYzogdGhpcy5sb2NJbmZvKGxv
Y0luZm8pCisgICAgICB9OworICAgIH0KKworICAgIGZ1bmN0aW9uIHByZXBhcmVSYXdCbG9jayhv
cGVuUmF3QmxvY2ssIGNvbnRlbnRzLCBjbG9zZSwgbG9jSW5mbykgeworICAgICAgdmFsaWRhdGVD
bG9zZShvcGVuUmF3QmxvY2ssIGNsb3NlKTsKKworICAgICAgbG9jSW5mbyA9IHRoaXMubG9jSW5m
byhsb2NJbmZvKTsKKyAgICAgIHZhciBwcm9ncmFtID0geworICAgICAgICB0eXBlOiAnUHJvZ3Jh
bScsCisgICAgICAgIGJvZHk6IGNvbnRlbnRzLAorICAgICAgICBzdHJpcDoge30sCisgICAgICAg
IGxvYzogbG9jSW5mbworICAgICAgfTsKKworICAgICAgcmV0dXJuIHsKKyAgICAgICAgdHlwZTog
J0Jsb2NrU3RhdGVtZW50JywKKyAgICAgICAgcGF0aDogb3BlblJhd0Jsb2NrLnBhdGgsCisgICAg
ICAgIHBhcmFtczogb3BlblJhd0Jsb2NrLnBhcmFtcywKKyAgICAgICAgaGFzaDogb3BlblJhd0Js
b2NrLmhhc2gsCisgICAgICAgIHByb2dyYW06IHByb2dyYW0sCisgICAgICAgIG9wZW5TdHJpcDog
e30sCisgICAgICAgIGludmVyc2VTdHJpcDoge30sCisgICAgICAgIGNsb3NlU3RyaXA6IHt9LAor
ICAgICAgICBsb2M6IGxvY0luZm8KKyAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gcHJl
cGFyZUJsb2NrKG9wZW5CbG9jaywgcHJvZ3JhbSwgaW52ZXJzZUFuZFByb2dyYW0sIGNsb3NlLCBp
bnZlcnRlZCwgbG9jSW5mbykgeworICAgICAgaWYgKGNsb3NlICYmIGNsb3NlLnBhdGgpIHsKKyAg
ICAgICAgdmFsaWRhdGVDbG9zZShvcGVuQmxvY2ssIGNsb3NlKTsKKyAgICAgIH0KKworICAgICAg
dmFyIGRlY29yYXRvciA9IC9cKi8udGVzdChvcGVuQmxvY2sub3Blbik7CisKKyAgICAgIHByb2dy
YW0uYmxvY2tQYXJhbXMgPSBvcGVuQmxvY2suYmxvY2tQYXJhbXM7CisKKyAgICAgIHZhciBpbnZl
cnNlID0gdW5kZWZpbmVkLAorICAgICAgICAgIGludmVyc2VTdHJpcCA9IHVuZGVmaW5lZDsKKwor
ICAgICAgaWYgKGludmVyc2VBbmRQcm9ncmFtKSB7CisgICAgICAgIGlmIChkZWNvcmF0b3IpIHsK
KyAgICAgICAgICB0aHJvdyBuZXcgX2V4Y2VwdGlvbjJbJ2RlZmF1bHQnXSgnVW5leHBlY3RlZCBp
bnZlcnNlIGJsb2NrIG9uIGRlY29yYXRvcicsIGludmVyc2VBbmRQcm9ncmFtKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChpbnZlcnNlQW5kUHJvZ3JhbS5jaGFpbikgeworICAgICAgICAgIGlu
dmVyc2VBbmRQcm9ncmFtLnByb2dyYW0uYm9keVswXS5jbG9zZVN0cmlwID0gY2xvc2Uuc3RyaXA7
CisgICAgICAgIH0KKworICAgICAgICBpbnZlcnNlU3RyaXAgPSBpbnZlcnNlQW5kUHJvZ3JhbS5z
dHJpcDsKKyAgICAgICAgaW52ZXJzZSA9IGludmVyc2VBbmRQcm9ncmFtLnByb2dyYW07CisgICAg
ICB9CisKKyAgICAgIGlmIChpbnZlcnRlZCkgeworICAgICAgICBpbnZlcnRlZCA9IGludmVyc2U7
CisgICAgICAgIGludmVyc2UgPSBwcm9ncmFtOworICAgICAgICBwcm9ncmFtID0gaW52ZXJ0ZWQ7
CisgICAgICB9CisKKyAgICAgIHJldHVybiB7CisgICAgICAgIHR5cGU6IGRlY29yYXRvciA/ICdE
ZWNvcmF0b3JCbG9jaycgOiAnQmxvY2tTdGF0ZW1lbnQnLAorICAgICAgICBwYXRoOiBvcGVuQmxv
Y2sucGF0aCwKKyAgICAgICAgcGFyYW1zOiBvcGVuQmxvY2sucGFyYW1zLAorICAgICAgICBoYXNo
OiBvcGVuQmxvY2suaGFzaCwKKyAgICAgICAgcHJvZ3JhbTogcHJvZ3JhbSwKKyAgICAgICAgaW52
ZXJzZTogaW52ZXJzZSwKKyAgICAgICAgb3BlblN0cmlwOiBvcGVuQmxvY2suc3RyaXAsCisgICAg
ICAgIGludmVyc2VTdHJpcDogaW52ZXJzZVN0cmlwLAorICAgICAgICBjbG9zZVN0cmlwOiBjbG9z
ZSAmJiBjbG9zZS5zdHJpcCwKKyAgICAgICAgbG9jOiB0aGlzLmxvY0luZm8obG9jSW5mbykKKyAg
ICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gcHJlcGFyZVByb2dyYW0oc3RhdGVtZW50cywg
bG9jKSB7CisgICAgICBpZiAoIWxvYyAmJiBzdGF0ZW1lbnRzLmxlbmd0aCkgeworICAgICAgICB2
YXIgZmlyc3RMb2MgPSBzdGF0ZW1lbnRzWzBdLmxvYywKKyAgICAgICAgICAgIGxhc3RMb2MgPSBz
dGF0ZW1lbnRzW3N0YXRlbWVudHMubGVuZ3RoIC0gMV0ubG9jOworCisgICAgICAgIC8qIGlzdGFu
YnVsIGlnbm9yZSBlbHNlICovCisgICAgICAgIGlmIChmaXJzdExvYyAmJiBsYXN0TG9jKSB7Cisg
ICAgICAgICAgbG9jID0geworICAgICAgICAgICAgc291cmNlOiBmaXJzdExvYy5zb3VyY2UsCisg
ICAgICAgICAgICBzdGFydDogeworICAgICAgICAgICAgICBsaW5lOiBmaXJzdExvYy5zdGFydC5s
aW5lLAorICAgICAgICAgICAgICBjb2x1bW46IGZpcnN0TG9jLnN0YXJ0LmNvbHVtbgorICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgIGVuZDogeworICAgICAgICAgICAgICBsaW5lOiBsYXN0TG9j
LmVuZC5saW5lLAorICAgICAgICAgICAgICBjb2x1bW46IGxhc3RMb2MuZW5kLmNvbHVtbgorICAg
ICAgICAgICAgfQorICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgcmV0
dXJuIHsKKyAgICAgICAgdHlwZTogJ1Byb2dyYW0nLAorICAgICAgICBib2R5OiBzdGF0ZW1lbnRz
LAorICAgICAgICBzdHJpcDoge30sCisgICAgICAgIGxvYzogbG9jCisgICAgICB9OworICAgIH0K
KworICAgIGZ1bmN0aW9uIHByZXBhcmVQYXJ0aWFsQmxvY2sob3BlbiwgcHJvZ3JhbSwgY2xvc2Us
IGxvY0luZm8pIHsKKyAgICAgIHZhbGlkYXRlQ2xvc2Uob3BlbiwgY2xvc2UpOworCisgICAgICBy
ZXR1cm4geworICAgICAgICB0eXBlOiAnUGFydGlhbEJsb2NrU3RhdGVtZW50JywKKyAgICAgICAg
bmFtZTogb3Blbi5wYXRoLAorICAgICAgICBwYXJhbXM6IG9wZW4ucGFyYW1zLAorICAgICAgICBo
YXNoOiBvcGVuLmhhc2gsCisgICAgICAgIHByb2dyYW06IHByb2dyYW0sCisgICAgICAgIG9wZW5T
dHJpcDogb3Blbi5zdHJpcCwKKyAgICAgICAgY2xvc2VTdHJpcDogY2xvc2UgJiYgY2xvc2Uuc3Ry
aXAsCisgICAgICAgIGxvYzogdGhpcy5sb2NJbmZvKGxvY0luZm8pCisgICAgICB9OworICAgIH0K
KworLyoqKi8gfSwKKy8qIDMwICovCisvKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9f
d2VicGFja19yZXF1aXJlX18pIHsKKworICAgIC8qIGVzbGludC1kaXNhYmxlIG5ldy1jYXAgKi8K
KworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIHZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0g
X193ZWJwYWNrX3JlcXVpcmVfXygxKVsnZGVmYXVsdCddOworCisgICAgZXhwb3J0cy5fX2VzTW9k
dWxlID0gdHJ1ZTsKKyAgICBleHBvcnRzLkNvbXBpbGVyID0gQ29tcGlsZXI7CisgICAgZXhwb3J0
cy5wcmVjb21waWxlID0gcHJlY29tcGlsZTsKKyAgICBleHBvcnRzLmNvbXBpbGUgPSBjb21waWxl
OworCisgICAgdmFyIF9leGNlcHRpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpOworCisgICAg
dmFyIF9leGNlcHRpb24yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZXhjZXB0aW9uKTsKKwor
ICAgIHZhciBfdXRpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpOworCisgICAgdmFyIF9hc3Qg
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0KTsKKworICAgIHZhciBfYXN0MiA9IF9pbnRlcm9wUmVx
dWlyZURlZmF1bHQoX2FzdCk7CisKKyAgICB2YXIgc2xpY2UgPSBbXS5zbGljZTsKKworICAgIGZ1
bmN0aW9uIENvbXBpbGVyKCkge30KKworICAgIC8vIHRoZSBmb3VuZEhlbHBlciByZWdpc3RlciB3
aWxsIGRpc2FtYmlndWF0ZSBoZWxwZXIgbG9va3VwIGZyb20gZmluZGluZyBhCisgICAgLy8gZnVu
Y3Rpb24gaW4gYSBjb250ZXh0LiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgbXVzdGFjaGUgY29tcGF0
aWJpbGl0eSwgd2hpY2gKKyAgICAvLyByZXF1aXJlcyB0aGF0IGNvbnRleHQgZnVuY3Rpb25zIGlu
IGJsb2NrcyBhcmUgZXZhbHVhdGVkIGJ5IGJsb2NrSGVscGVyTWlzc2luZywKKyAgICAvLyBhbmQg
dGhlbiBwcm9jZWVkIGFzIGlmIHRoZSByZXN1bHRpbmcgdmFsdWUgd2FzIHByb3ZpZGVkIHRvIGJs
b2NrSGVscGVyTWlzc2luZy4KKworICAgIENvbXBpbGVyLnByb3RvdHlwZSA9IHsKKyAgICAgIGNv
bXBpbGVyOiBDb21waWxlciwKKworICAgICAgZXF1YWxzOiBmdW5jdGlvbiBlcXVhbHMob3RoZXIp
IHsKKyAgICAgICAgdmFyIGxlbiA9IHRoaXMub3Bjb2Rlcy5sZW5ndGg7CisgICAgICAgIGlmIChv
dGhlci5vcGNvZGVzLmxlbmd0aCAhPT0gbGVuKSB7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAg
ICAgICAgIHZhciBvcGNvZGUgPSB0aGlzLm9wY29kZXNbaV0sCisgICAgICAgICAgICAgIG90aGVy
T3Bjb2RlID0gb3RoZXIub3Bjb2Rlc1tpXTsKKyAgICAgICAgICBpZiAob3Bjb2RlLm9wY29kZSAh
PT0gb3RoZXJPcGNvZGUub3Bjb2RlIHx8ICFhcmdFcXVhbHMob3Bjb2RlLmFyZ3MsIG90aGVyT3Bj
b2RlLmFyZ3MpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgLy8gV2Uga25vdyB0aGF0IGxlbmd0aCBpcyB0aGUgc2FtZSBiZXR3
ZWVuIHRoZSB0d28gYXJyYXlzIGJlY2F1c2UgdGhleSBhcmUgZGlyZWN0bHkgdGllZAorICAgICAg
ICAvLyB0byB0aGUgb3Bjb2RlIGJlaGF2aW9yIGFib3ZlLgorICAgICAgICBsZW4gPSB0aGlzLmNo
aWxkcmVuLmxlbmd0aDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgewor
ICAgICAgICAgIGlmICghdGhpcy5jaGlsZHJlbltpXS5lcXVhbHMob3RoZXIuY2hpbGRyZW5baV0p
KSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9LAorCisgICAgICBndWlkOiAwLAorCisgICAg
ICBjb21waWxlOiBmdW5jdGlvbiBjb21waWxlKHByb2dyYW0sIG9wdGlvbnMpIHsKKyAgICAgICAg
dGhpcy5zb3VyY2VOb2RlID0gW107CisgICAgICAgIHRoaXMub3Bjb2RlcyA9IFtdOworICAgICAg
ICB0aGlzLmNoaWxkcmVuID0gW107CisgICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7Cisg
ICAgICAgIHRoaXMuc3RyaW5nUGFyYW1zID0gb3B0aW9ucy5zdHJpbmdQYXJhbXM7CisgICAgICAg
IHRoaXMudHJhY2tJZHMgPSBvcHRpb25zLnRyYWNrSWRzOworCisgICAgICAgIG9wdGlvbnMuYmxv
Y2tQYXJhbXMgPSBvcHRpb25zLmJsb2NrUGFyYW1zIHx8IFtdOworCisgICAgICAgIC8vIFRoZXNl
IGNoYW5nZXMgd2lsbCBwcm9wYWdhdGUgdG8gdGhlIG90aGVyIGNvbXBpbGVyIGNvbXBvbmVudHMK
KyAgICAgICAgdmFyIGtub3duSGVscGVycyA9IG9wdGlvbnMua25vd25IZWxwZXJzOworICAgICAg
ICBvcHRpb25zLmtub3duSGVscGVycyA9IHsKKyAgICAgICAgICAnaGVscGVyTWlzc2luZyc6IHRy
dWUsCisgICAgICAgICAgJ2Jsb2NrSGVscGVyTWlzc2luZyc6IHRydWUsCisgICAgICAgICAgJ2Vh
Y2gnOiB0cnVlLAorICAgICAgICAgICdpZic6IHRydWUsCisgICAgICAgICAgJ3VubGVzcyc6IHRy
dWUsCisgICAgICAgICAgJ3dpdGgnOiB0cnVlLAorICAgICAgICAgICdsb2cnOiB0cnVlLAorICAg
ICAgICAgICdsb29rdXAnOiB0cnVlCisgICAgICAgIH07CisgICAgICAgIGlmIChrbm93bkhlbHBl
cnMpIHsKKyAgICAgICAgICBmb3IgKHZhciBfbmFtZSBpbiBrbm93bkhlbHBlcnMpIHsKKyAgICAg
ICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovCisgICAgICAgICAgICBpZiAoX25hbWUg
aW4ga25vd25IZWxwZXJzKSB7CisgICAgICAgICAgICAgIG9wdGlvbnMua25vd25IZWxwZXJzW19u
YW1lXSA9IGtub3duSGVscGVyc1tfbmFtZV07CisgICAgICAgICAgICB9CisgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRoaXMuYWNjZXB0KHByb2dyYW0pOworICAgICAg
fSwKKworICAgICAgY29tcGlsZVByb2dyYW06IGZ1bmN0aW9uIGNvbXBpbGVQcm9ncmFtKHByb2dy
YW0pIHsKKyAgICAgICAgdmFyIGNoaWxkQ29tcGlsZXIgPSBuZXcgdGhpcy5jb21waWxlcigpLAor
ICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuZXctY2FwCisgICAgICAgIHJlc3Vs
dCA9IGNoaWxkQ29tcGlsZXIuY29tcGlsZShwcm9ncmFtLCB0aGlzLm9wdGlvbnMpLAorICAgICAg
ICAgICAgZ3VpZCA9IHRoaXMuZ3VpZCsrOworCisgICAgICAgIHRoaXMudXNlUGFydGlhbCA9IHRo
aXMudXNlUGFydGlhbCB8fCByZXN1bHQudXNlUGFydGlhbDsKKworICAgICAgICB0aGlzLmNoaWxk
cmVuW2d1aWRdID0gcmVzdWx0OworICAgICAgICB0aGlzLnVzZURlcHRocyA9IHRoaXMudXNlRGVw
dGhzIHx8IHJlc3VsdC51c2VEZXB0aHM7CisKKyAgICAgICAgcmV0dXJuIGd1aWQ7CisgICAgICB9
LAorCisgICAgICBhY2NlcHQ6IGZ1bmN0aW9uIGFjY2VwdChub2RlKSB7CisgICAgICAgIC8qIGlz
dGFuYnVsIGlnbm9yZSBuZXh0OiBTYW5pdHkgY29kZSAqLworICAgICAgICBpZiAoIXRoaXNbbm9k
ZS50eXBlXSkgeworICAgICAgICAgIHRocm93IG5ldyBfZXhjZXB0aW9uMlsnZGVmYXVsdCddKCdV
bmtub3duIHR5cGU6ICcgKyBub2RlLnR5cGUsIG5vZGUpOworICAgICAgICB9CisKKyAgICAgICAg
dGhpcy5zb3VyY2VOb2RlLnVuc2hpZnQobm9kZSk7CisgICAgICAgIHZhciByZXQgPSB0aGlzW25v
ZGUudHlwZV0obm9kZSk7CisgICAgICAgIHRoaXMuc291cmNlTm9kZS5zaGlmdCgpOworICAgICAg
ICByZXR1cm4gcmV0OworICAgICAgfSwKKworICAgICAgUHJvZ3JhbTogZnVuY3Rpb24gUHJvZ3Jh
bShwcm9ncmFtKSB7CisgICAgICAgIHRoaXMub3B0aW9ucy5ibG9ja1BhcmFtcy51bnNoaWZ0KHBy
b2dyYW0uYmxvY2tQYXJhbXMpOworCisgICAgICAgIHZhciBib2R5ID0gcHJvZ3JhbS5ib2R5LAor
ICAgICAgICAgICAgYm9keUxlbmd0aCA9IGJvZHkubGVuZ3RoOworICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGJvZHlMZW5ndGg7IGkrKykgeworICAgICAgICAgIHRoaXMuYWNjZXB0KGJvZHlb
aV0pOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5vcHRpb25zLmJsb2NrUGFyYW1zLnNoaWZ0
KCk7CisKKyAgICAgICAgdGhpcy5pc1NpbXBsZSA9IGJvZHlMZW5ndGggPT09IDE7CisgICAgICAg
IHRoaXMuYmxvY2tQYXJhbXMgPSBwcm9ncmFtLmJsb2NrUGFyYW1zID8gcHJvZ3JhbS5ibG9ja1Bh
cmFtcy5sZW5ndGggOiAwOworCisgICAgICAgIHJldHVybiB0aGlzOworICAgICAgfSwKKworICAg
ICAgQmxvY2tTdGF0ZW1lbnQ6IGZ1bmN0aW9uIEJsb2NrU3RhdGVtZW50KGJsb2NrKSB7CisgICAg
ICAgIHRyYW5zZm9ybUxpdGVyYWxUb1BhdGgoYmxvY2spOworCisgICAgICAgIHZhciBwcm9ncmFt
ID0gYmxvY2sucHJvZ3JhbSwKKyAgICAgICAgICAgIGludmVyc2UgPSBibG9jay5pbnZlcnNlOwor
CisgICAgICAgIHByb2dyYW0gPSBwcm9ncmFtICYmIHRoaXMuY29tcGlsZVByb2dyYW0ocHJvZ3Jh
bSk7CisgICAgICAgIGludmVyc2UgPSBpbnZlcnNlICYmIHRoaXMuY29tcGlsZVByb2dyYW0oaW52
ZXJzZSk7CisKKyAgICAgICAgdmFyIHR5cGUgPSB0aGlzLmNsYXNzaWZ5U2V4cHIoYmxvY2spOwor
CisgICAgICAgIGlmICh0eXBlID09PSAnaGVscGVyJykgeworICAgICAgICAgIHRoaXMuaGVscGVy
U2V4cHIoYmxvY2ssIHByb2dyYW0sIGludmVyc2UpOworICAgICAgICB9IGVsc2UgaWYgKHR5cGUg
PT09ICdzaW1wbGUnKSB7CisgICAgICAgICAgdGhpcy5zaW1wbGVTZXhwcihibG9jayk7CisKKyAg
ICAgICAgICAvLyBub3cgdGhhdCB0aGUgc2ltcGxlIG11c3RhY2hlIGlzIHJlc29sdmVkLCB3ZSBu
ZWVkIHRvCisgICAgICAgICAgLy8gZXZhbHVhdGUgaXQgYnkgZXhlY3V0aW5nIGBibG9ja0hlbHBl
ck1pc3NpbmdgCisgICAgICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hQcm9ncmFtJywgcHJvZ3JhbSk7
CisgICAgICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hQcm9ncmFtJywgaW52ZXJzZSk7CisgICAgICAg
ICAgdGhpcy5vcGNvZGUoJ2VtcHR5SGFzaCcpOworICAgICAgICAgIHRoaXMub3Bjb2RlKCdibG9j
a1ZhbHVlJywgYmxvY2sucGF0aC5vcmlnaW5hbCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgdGhpcy5hbWJpZ3VvdXNTZXhwcihibG9jaywgcHJvZ3JhbSwgaW52ZXJzZSk7CisKKyAgICAg
ICAgICAvLyBub3cgdGhhdCB0aGUgc2ltcGxlIG11c3RhY2hlIGlzIHJlc29sdmVkLCB3ZSBuZWVk
IHRvCisgICAgICAgICAgLy8gZXZhbHVhdGUgaXQgYnkgZXhlY3V0aW5nIGBibG9ja0hlbHBlck1p
c3NpbmdgCisgICAgICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hQcm9ncmFtJywgcHJvZ3JhbSk7Cisg
ICAgICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hQcm9ncmFtJywgaW52ZXJzZSk7CisgICAgICAgICAg
dGhpcy5vcGNvZGUoJ2VtcHR5SGFzaCcpOworICAgICAgICAgIHRoaXMub3Bjb2RlKCdhbWJpZ3Vv
dXNCbG9ja1ZhbHVlJyk7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLm9wY29kZSgnYXBwZW5k
Jyk7CisgICAgICB9LAorCisgICAgICBEZWNvcmF0b3JCbG9jazogZnVuY3Rpb24gRGVjb3JhdG9y
QmxvY2soZGVjb3JhdG9yKSB7CisgICAgICAgIHZhciBwcm9ncmFtID0gZGVjb3JhdG9yLnByb2dy
YW0gJiYgdGhpcy5jb21waWxlUHJvZ3JhbShkZWNvcmF0b3IucHJvZ3JhbSk7CisgICAgICAgIHZh
ciBwYXJhbXMgPSB0aGlzLnNldHVwRnVsbE11c3RhY2hlUGFyYW1zKGRlY29yYXRvciwgcHJvZ3Jh
bSwgdW5kZWZpbmVkKSwKKyAgICAgICAgICAgIHBhdGggPSBkZWNvcmF0b3IucGF0aDsKKworICAg
ICAgICB0aGlzLnVzZURlY29yYXRvcnMgPSB0cnVlOworICAgICAgICB0aGlzLm9wY29kZSgncmVn
aXN0ZXJEZWNvcmF0b3InLCBwYXJhbXMubGVuZ3RoLCBwYXRoLm9yaWdpbmFsKTsKKyAgICAgIH0s
CisKKyAgICAgIFBhcnRpYWxTdGF0ZW1lbnQ6IGZ1bmN0aW9uIFBhcnRpYWxTdGF0ZW1lbnQocGFy
dGlhbCkgeworICAgICAgICB0aGlzLnVzZVBhcnRpYWwgPSB0cnVlOworCisgICAgICAgIHZhciBw
cm9ncmFtID0gcGFydGlhbC5wcm9ncmFtOworICAgICAgICBpZiAocHJvZ3JhbSkgeworICAgICAg
ICAgIHByb2dyYW0gPSB0aGlzLmNvbXBpbGVQcm9ncmFtKHBhcnRpYWwucHJvZ3JhbSk7CisgICAg
ICAgIH0KKworICAgICAgICB2YXIgcGFyYW1zID0gcGFydGlhbC5wYXJhbXM7CisgICAgICAgIGlm
IChwYXJhbXMubGVuZ3RoID4gMSkgeworICAgICAgICAgIHRocm93IG5ldyBfZXhjZXB0aW9uMlsn
ZGVmYXVsdCddKCdVbnN1cHBvcnRlZCBudW1iZXIgb2YgcGFydGlhbCBhcmd1bWVudHM6ICcgKyBw
YXJhbXMubGVuZ3RoLCBwYXJ0aWFsKTsKKyAgICAgICAgfSBlbHNlIGlmICghcGFyYW1zLmxlbmd0
aCkgeworICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZXhwbGljaXRQYXJ0aWFsQ29udGV4dCkg
eworICAgICAgICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hMaXRlcmFsJywgJ3VuZGVmaW5lZCcpOwor
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwYXJhbXMucHVzaCh7IHR5cGU6ICdQYXRo
RXhwcmVzc2lvbicsIHBhcnRzOiBbXSwgZGVwdGg6IDAgfSk7CisgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgdmFyIHBhcnRpYWxOYW1lID0gcGFydGlhbC5uYW1lLm9yaWdpbmFsLAor
ICAgICAgICAgICAgaXNEeW5hbWljID0gcGFydGlhbC5uYW1lLnR5cGUgPT09ICdTdWJFeHByZXNz
aW9uJzsKKyAgICAgICAgaWYgKGlzRHluYW1pYykgeworICAgICAgICAgIHRoaXMuYWNjZXB0KHBh
cnRpYWwubmFtZSk7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLnNldHVwRnVsbE11c3RhY2hl
UGFyYW1zKHBhcnRpYWwsIHByb2dyYW0sIHVuZGVmaW5lZCwgdHJ1ZSk7CisKKyAgICAgICAgdmFy
IGluZGVudCA9IHBhcnRpYWwuaW5kZW50IHx8ICcnOworICAgICAgICBpZiAodGhpcy5vcHRpb25z
LnByZXZlbnRJbmRlbnQgJiYgaW5kZW50KSB7CisgICAgICAgICAgdGhpcy5vcGNvZGUoJ2FwcGVu
ZENvbnRlbnQnLCBpbmRlbnQpOworICAgICAgICAgIGluZGVudCA9ICcnOworICAgICAgICB9CisK
KyAgICAgICAgdGhpcy5vcGNvZGUoJ2ludm9rZVBhcnRpYWwnLCBpc0R5bmFtaWMsIHBhcnRpYWxO
YW1lLCBpbmRlbnQpOworICAgICAgICB0aGlzLm9wY29kZSgnYXBwZW5kJyk7CisgICAgICB9LAor
ICAgICAgUGFydGlhbEJsb2NrU3RhdGVtZW50OiBmdW5jdGlvbiBQYXJ0aWFsQmxvY2tTdGF0ZW1l
bnQocGFydGlhbEJsb2NrKSB7CisgICAgICAgIHRoaXMuUGFydGlhbFN0YXRlbWVudChwYXJ0aWFs
QmxvY2spOworICAgICAgfSwKKworICAgICAgTXVzdGFjaGVTdGF0ZW1lbnQ6IGZ1bmN0aW9uIE11
c3RhY2hlU3RhdGVtZW50KG11c3RhY2hlKSB7CisgICAgICAgIHRoaXMuU3ViRXhwcmVzc2lvbiht
dXN0YWNoZSk7CisKKyAgICAgICAgaWYgKG11c3RhY2hlLmVzY2FwZWQgJiYgIXRoaXMub3B0aW9u
cy5ub0VzY2FwZSkgeworICAgICAgICAgIHRoaXMub3Bjb2RlKCdhcHBlbmRFc2NhcGVkJyk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdGhpcy5vcGNvZGUoJ2FwcGVuZCcpOworICAgICAg
ICB9CisgICAgICB9LAorICAgICAgRGVjb3JhdG9yOiBmdW5jdGlvbiBEZWNvcmF0b3IoZGVjb3Jh
dG9yKSB7CisgICAgICAgIHRoaXMuRGVjb3JhdG9yQmxvY2soZGVjb3JhdG9yKTsKKyAgICAgIH0s
CisKKyAgICAgIENvbnRlbnRTdGF0ZW1lbnQ6IGZ1bmN0aW9uIENvbnRlbnRTdGF0ZW1lbnQoY29u
dGVudCkgeworICAgICAgICBpZiAoY29udGVudC52YWx1ZSkgeworICAgICAgICAgIHRoaXMub3Bj
b2RlKCdhcHBlbmRDb250ZW50JywgY29udGVudC52YWx1ZSk7CisgICAgICAgIH0KKyAgICAgIH0s
CisKKyAgICAgIENvbW1lbnRTdGF0ZW1lbnQ6IGZ1bmN0aW9uIENvbW1lbnRTdGF0ZW1lbnQoKSB7
fSwKKworICAgICAgU3ViRXhwcmVzc2lvbjogZnVuY3Rpb24gU3ViRXhwcmVzc2lvbihzZXhwcikg
eworICAgICAgICB0cmFuc2Zvcm1MaXRlcmFsVG9QYXRoKHNleHByKTsKKyAgICAgICAgdmFyIHR5
cGUgPSB0aGlzLmNsYXNzaWZ5U2V4cHIoc2V4cHIpOworCisgICAgICAgIGlmICh0eXBlID09PSAn
c2ltcGxlJykgeworICAgICAgICAgIHRoaXMuc2ltcGxlU2V4cHIoc2V4cHIpOworICAgICAgICB9
IGVsc2UgaWYgKHR5cGUgPT09ICdoZWxwZXInKSB7CisgICAgICAgICAgdGhpcy5oZWxwZXJTZXhw
cihzZXhwcik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdGhpcy5hbWJpZ3VvdXNTZXhw
cihzZXhwcik7CisgICAgICAgIH0KKyAgICAgIH0sCisgICAgICBhbWJpZ3VvdXNTZXhwcjogZnVu
Y3Rpb24gYW1iaWd1b3VzU2V4cHIoc2V4cHIsIHByb2dyYW0sIGludmVyc2UpIHsKKyAgICAgICAg
dmFyIHBhdGggPSBzZXhwci5wYXRoLAorICAgICAgICAgICAgbmFtZSA9IHBhdGgucGFydHNbMF0s
CisgICAgICAgICAgICBpc0Jsb2NrID0gcHJvZ3JhbSAhPSBudWxsIHx8IGludmVyc2UgIT0gbnVs
bDsKKworICAgICAgICB0aGlzLm9wY29kZSgnZ2V0Q29udGV4dCcsIHBhdGguZGVwdGgpOworCisg
ICAgICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIHByb2dyYW0pOworICAgICAgICB0aGlz
Lm9wY29kZSgncHVzaFByb2dyYW0nLCBpbnZlcnNlKTsKKworICAgICAgICBwYXRoLnN0cmljdCA9
IHRydWU7CisgICAgICAgIHRoaXMuYWNjZXB0KHBhdGgpOworCisgICAgICAgIHRoaXMub3Bjb2Rl
KCdpbnZva2VBbWJpZ3VvdXMnLCBuYW1lLCBpc0Jsb2NrKTsKKyAgICAgIH0sCisKKyAgICAgIHNp
bXBsZVNleHByOiBmdW5jdGlvbiBzaW1wbGVTZXhwcihzZXhwcikgeworICAgICAgICB2YXIgcGF0
aCA9IHNleHByLnBhdGg7CisgICAgICAgIHBhdGguc3RyaWN0ID0gdHJ1ZTsKKyAgICAgICAgdGhp
cy5hY2NlcHQocGF0aCk7CisgICAgICAgIHRoaXMub3Bjb2RlKCdyZXNvbHZlUG9zc2libGVMYW1i
ZGEnKTsKKyAgICAgIH0sCisKKyAgICAgIGhlbHBlclNleHByOiBmdW5jdGlvbiBoZWxwZXJTZXhw
cihzZXhwciwgcHJvZ3JhbSwgaW52ZXJzZSkgeworICAgICAgICB2YXIgcGFyYW1zID0gdGhpcy5z
ZXR1cEZ1bGxNdXN0YWNoZVBhcmFtcyhzZXhwciwgcHJvZ3JhbSwgaW52ZXJzZSksCisgICAgICAg
ICAgICBwYXRoID0gc2V4cHIucGF0aCwKKyAgICAgICAgICAgIG5hbWUgPSBwYXRoLnBhcnRzWzBd
OworCisgICAgICAgIGlmICh0aGlzLm9wdGlvbnMua25vd25IZWxwZXJzW25hbWVdKSB7CisgICAg
ICAgICAgdGhpcy5vcGNvZGUoJ2ludm9rZUtub3duSGVscGVyJywgcGFyYW1zLmxlbmd0aCwgbmFt
ZSk7CisgICAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLmtub3duSGVscGVyc09ubHkpIHsK
KyAgICAgICAgICB0aHJvdyBuZXcgX2V4Y2VwdGlvbjJbJ2RlZmF1bHQnXSgnWW91IHNwZWNpZmll
ZCBrbm93bkhlbHBlcnNPbmx5LCBidXQgdXNlZCB0aGUgdW5rbm93biBoZWxwZXIgJyArIG5hbWUs
IHNleHByKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBwYXRoLnN0cmljdCA9IHRydWU7
CisgICAgICAgICAgcGF0aC5mYWxzeSA9IHRydWU7CisKKyAgICAgICAgICB0aGlzLmFjY2VwdChw
YXRoKTsKKyAgICAgICAgICB0aGlzLm9wY29kZSgnaW52b2tlSGVscGVyJywgcGFyYW1zLmxlbmd0
aCwgcGF0aC5vcmlnaW5hbCwgX2FzdDJbJ2RlZmF1bHQnXS5oZWxwZXJzLnNpbXBsZUlkKHBhdGgp
KTsKKyAgICAgICAgfQorICAgICAgfSwKKworICAgICAgUGF0aEV4cHJlc3Npb246IGZ1bmN0aW9u
IFBhdGhFeHByZXNzaW9uKHBhdGgpIHsKKyAgICAgICAgdGhpcy5hZGREZXB0aChwYXRoLmRlcHRo
KTsKKyAgICAgICAgdGhpcy5vcGNvZGUoJ2dldENvbnRleHQnLCBwYXRoLmRlcHRoKTsKKworICAg
ICAgICB2YXIgbmFtZSA9IHBhdGgucGFydHNbMF0sCisgICAgICAgICAgICBzY29wZWQgPSBfYXN0
MlsnZGVmYXVsdCddLmhlbHBlcnMuc2NvcGVkSWQocGF0aCksCisgICAgICAgICAgICBibG9ja1Bh
cmFtSWQgPSAhcGF0aC5kZXB0aCAmJiAhc2NvcGVkICYmIHRoaXMuYmxvY2tQYXJhbUluZGV4KG5h
bWUpOworCisgICAgICAgIGlmIChibG9ja1BhcmFtSWQpIHsKKyAgICAgICAgICB0aGlzLm9wY29k
ZSgnbG9va3VwQmxvY2tQYXJhbScsIGJsb2NrUGFyYW1JZCwgcGF0aC5wYXJ0cyk7CisgICAgICAg
IH0gZWxzZSBpZiAoIW5hbWUpIHsKKyAgICAgICAgICAvLyBDb250ZXh0IHJlZmVyZW5jZSwgaS5l
LiBge3tmb28gLn19YCBvciBge3tmb28gLi59fWAKKyAgICAgICAgICB0aGlzLm9wY29kZSgncHVz
aENvbnRleHQnKTsKKyAgICAgICAgfSBlbHNlIGlmIChwYXRoLmRhdGEpIHsKKyAgICAgICAgICB0
aGlzLm9wdGlvbnMuZGF0YSA9IHRydWU7CisgICAgICAgICAgdGhpcy5vcGNvZGUoJ2xvb2t1cERh
dGEnLCBwYXRoLmRlcHRoLCBwYXRoLnBhcnRzLCBwYXRoLnN0cmljdCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgdGhpcy5vcGNvZGUoJ2xvb2t1cE9uQ29udGV4dCcsIHBhdGgucGFydHMs
IHBhdGguZmFsc3ksIHBhdGguc3RyaWN0LCBzY29wZWQpOworICAgICAgICB9CisgICAgICB9LAor
CisgICAgICBTdHJpbmdMaXRlcmFsOiBmdW5jdGlvbiBTdHJpbmdMaXRlcmFsKHN0cmluZykgewor
ICAgICAgICB0aGlzLm9wY29kZSgncHVzaFN0cmluZycsIHN0cmluZy52YWx1ZSk7CisgICAgICB9
LAorCisgICAgICBOdW1iZXJMaXRlcmFsOiBmdW5jdGlvbiBOdW1iZXJMaXRlcmFsKG51bWJlcikg
eworICAgICAgICB0aGlzLm9wY29kZSgncHVzaExpdGVyYWwnLCBudW1iZXIudmFsdWUpOworICAg
ICAgfSwKKworICAgICAgQm9vbGVhbkxpdGVyYWw6IGZ1bmN0aW9uIEJvb2xlYW5MaXRlcmFsKGJv
b2wpIHsKKyAgICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hMaXRlcmFsJywgYm9vbC52YWx1ZSk7Cisg
ICAgICB9LAorCisgICAgICBVbmRlZmluZWRMaXRlcmFsOiBmdW5jdGlvbiBVbmRlZmluZWRMaXRl
cmFsKCkgeworICAgICAgICB0aGlzLm9wY29kZSgncHVzaExpdGVyYWwnLCAndW5kZWZpbmVkJyk7
CisgICAgICB9LAorCisgICAgICBOdWxsTGl0ZXJhbDogZnVuY3Rpb24gTnVsbExpdGVyYWwoKSB7
CisgICAgICAgIHRoaXMub3Bjb2RlKCdwdXNoTGl0ZXJhbCcsICdudWxsJyk7CisgICAgICB9LAor
CisgICAgICBIYXNoOiBmdW5jdGlvbiBIYXNoKGhhc2gpIHsKKyAgICAgICAgdmFyIHBhaXJzID0g
aGFzaC5wYWlycywKKyAgICAgICAgICAgIGkgPSAwLAorICAgICAgICAgICAgbCA9IHBhaXJzLmxl
bmd0aDsKKworICAgICAgICB0aGlzLm9wY29kZSgncHVzaEhhc2gnKTsKKworICAgICAgICBmb3Ig
KDsgaSA8IGw7IGkrKykgeworICAgICAgICAgIHRoaXMucHVzaFBhcmFtKHBhaXJzW2ldLnZhbHVl
KTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoaS0tKSB7CisgICAgICAgICAgdGhpcy5vcGNv
ZGUoJ2Fzc2lnblRvSGFzaCcsIHBhaXJzW2ldLmtleSk7CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5vcGNvZGUoJ3BvcEhhc2gnKTsKKyAgICAgIH0sCisKKyAgICAgIC8vIEhFTFBFUlMKKyAgICAg
IG9wY29kZTogZnVuY3Rpb24gb3Bjb2RlKG5hbWUpIHsKKyAgICAgICAgdGhpcy5vcGNvZGVzLnB1
c2goeyBvcGNvZGU6IG5hbWUsIGFyZ3M6IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSwgbG9jOiB0
aGlzLnNvdXJjZU5vZGVbMF0ubG9jIH0pOworICAgICAgfSwKKworICAgICAgYWRkRGVwdGg6IGZ1
bmN0aW9uIGFkZERlcHRoKGRlcHRoKSB7CisgICAgICAgIGlmICghZGVwdGgpIHsKKyAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB0aGlzLnVzZURlcHRocyA9IHRydWU7Cisg
ICAgICB9LAorCisgICAgICBjbGFzc2lmeVNleHByOiBmdW5jdGlvbiBjbGFzc2lmeVNleHByKHNl
eHByKSB7CisgICAgICAgIHZhciBpc1NpbXBsZSA9IF9hc3QyWydkZWZhdWx0J10uaGVscGVycy5z
aW1wbGVJZChzZXhwci5wYXRoKTsKKworICAgICAgICB2YXIgaXNCbG9ja1BhcmFtID0gaXNTaW1w
bGUgJiYgISF0aGlzLmJsb2NrUGFyYW1JbmRleChzZXhwci5wYXRoLnBhcnRzWzBdKTsKKworICAg
ICAgICAvLyBhIG11c3RhY2hlIGlzIGFuIGVsaWdpYmxlIGhlbHBlciBpZjoKKyAgICAgICAgLy8g
KiBpdHMgaWQgaXMgc2ltcGxlIChhIHNpbmdsZSBwYXJ0LCBub3QgYHRoaXNgIG9yIGAuLmApCisg
ICAgICAgIHZhciBpc0hlbHBlciA9ICFpc0Jsb2NrUGFyYW0gJiYgX2FzdDJbJ2RlZmF1bHQnXS5o
ZWxwZXJzLmhlbHBlckV4cHJlc3Npb24oc2V4cHIpOworCisgICAgICAgIC8vIGlmIGEgbXVzdGFj
aGUgaXMgYW4gZWxpZ2libGUgaGVscGVyIGJ1dCBub3QgYSBkZWZpbml0ZQorICAgICAgICAvLyBo
ZWxwZXIsIGl0IGlzIGFtYmlndW91cywgYW5kIHdpbGwgYmUgcmVzb2x2ZWQgaW4gYSBsYXRlcgor
ICAgICAgICAvLyBwYXNzIG9yIGF0IHJ1bnRpbWUuCisgICAgICAgIHZhciBpc0VsaWdpYmxlID0g
IWlzQmxvY2tQYXJhbSAmJiAoaXNIZWxwZXIgfHwgaXNTaW1wbGUpOworCisgICAgICAgIC8vIGlm
IGFtYmlndW91cywgd2UgY2FuIHBvc3NpYmx5IHJlc29sdmUgdGhlIGFtYmlndWl0eSBub3cKKyAg
ICAgICAgLy8gQW4gZWxpZ2libGUgaGVscGVyIGlzIG9uZSB0aGF0IGRvZXMgbm90IGhhdmUgYSBj
b21wbGV4IHBhdGgsIGkuZS4gYHRoaXMuZm9vYCwgYC4uL2Zvb2AgZXRjLgorICAgICAgICBpZiAo
aXNFbGlnaWJsZSAmJiAhaXNIZWxwZXIpIHsKKyAgICAgICAgICB2YXIgX25hbWUyID0gc2V4cHIu
cGF0aC5wYXJ0c1swXSwKKyAgICAgICAgICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9uczsKKwor
ICAgICAgICAgIGlmIChvcHRpb25zLmtub3duSGVscGVyc1tfbmFtZTJdKSB7CisgICAgICAgICAg
ICBpc0hlbHBlciA9IHRydWU7CisgICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmtub3duSGVs
cGVyc09ubHkpIHsKKyAgICAgICAgICAgIGlzRWxpZ2libGUgPSBmYWxzZTsKKyAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNIZWxwZXIpIHsKKyAgICAgICAgICByZXR1cm4g
J2hlbHBlcic7CisgICAgICAgIH0gZWxzZSBpZiAoaXNFbGlnaWJsZSkgeworICAgICAgICAgIHJl
dHVybiAnYW1iaWd1b3VzJzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICByZXR1cm4gJ3Np
bXBsZSc7CisgICAgICAgIH0KKyAgICAgIH0sCisKKyAgICAgIHB1c2hQYXJhbXM6IGZ1bmN0aW9u
IHB1c2hQYXJhbXMocGFyYW1zKSB7CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcGFyYW1z
Lmxlbmd0aDsgaSA8IGw7IGkrKykgeworICAgICAgICAgIHRoaXMucHVzaFBhcmFtKHBhcmFtc1tp
XSk7CisgICAgICAgIH0KKyAgICAgIH0sCisKKyAgICAgIHB1c2hQYXJhbTogZnVuY3Rpb24gcHVz
aFBhcmFtKHZhbCkgeworICAgICAgICB2YXIgdmFsdWUgPSB2YWwudmFsdWUgIT0gbnVsbCA/IHZh
bC52YWx1ZSA6IHZhbC5vcmlnaW5hbCB8fCAnJzsKKworICAgICAgICBpZiAodGhpcy5zdHJpbmdQ
YXJhbXMpIHsKKyAgICAgICAgICBpZiAodmFsdWUucmVwbGFjZSkgeworICAgICAgICAgICAgdmFs
dWUgPSB2YWx1ZS5yZXBsYWNlKC9eKFwuP1wuXC8pKi9nLCAnJykucmVwbGFjZSgvXC8vZywgJy4n
KTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAodmFsLmRlcHRoKSB7CisgICAgICAgICAg
ICB0aGlzLmFkZERlcHRoKHZhbC5kZXB0aCk7CisgICAgICAgICAgfQorICAgICAgICAgIHRoaXMu
b3Bjb2RlKCdnZXRDb250ZXh0JywgdmFsLmRlcHRoIHx8IDApOworICAgICAgICAgIHRoaXMub3Bj
b2RlKCdwdXNoU3RyaW5nUGFyYW0nLCB2YWx1ZSwgdmFsLnR5cGUpOworCisgICAgICAgICAgaWYg
KHZhbC50eXBlID09PSAnU3ViRXhwcmVzc2lvbicpIHsKKyAgICAgICAgICAgIC8vIFN1YkV4cHJl
c3Npb25zIGdldCBldmFsdWF0ZWQgYW5kIHBhc3NlZCBpbgorICAgICAgICAgICAgLy8gaW4gc3Ry
aW5nIHBhcmFtcyBtb2RlLgorICAgICAgICAgICAgdGhpcy5hY2NlcHQodmFsKTsKKyAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgaWYgKHRoaXMudHJhY2tJZHMpIHsKKyAg
ICAgICAgICAgIHZhciBibG9ja1BhcmFtSW5kZXggPSB1bmRlZmluZWQ7CisgICAgICAgICAgICBp
ZiAodmFsLnBhcnRzICYmICFfYXN0MlsnZGVmYXVsdCddLmhlbHBlcnMuc2NvcGVkSWQodmFsKSAm
JiAhdmFsLmRlcHRoKSB7CisgICAgICAgICAgICAgIGJsb2NrUGFyYW1JbmRleCA9IHRoaXMuYmxv
Y2tQYXJhbUluZGV4KHZhbC5wYXJ0c1swXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoYmxvY2tQYXJhbUluZGV4KSB7CisgICAgICAgICAgICAgIHZhciBibG9ja1BhcmFtQ2hpbGQg
PSB2YWwucGFydHMuc2xpY2UoMSkuam9pbignLicpOworICAgICAgICAgICAgICB0aGlzLm9wY29k
ZSgncHVzaElkJywgJ0Jsb2NrUGFyYW0nLCBibG9ja1BhcmFtSW5kZXgsIGJsb2NrUGFyYW1DaGls
ZCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICB2YWx1ZSA9IHZhbC5vcmln
aW5hbCB8fCB2YWx1ZTsKKyAgICAgICAgICAgICAgaWYgKHZhbHVlLnJlcGxhY2UpIHsKKyAgICAg
ICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL150aGlzKD86XC58JCkvLCAnJykucmVw
bGFjZSgvXlwuXC8vLCAnJykucmVwbGFjZSgvXlwuJC8sICcnKTsKKyAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgIHRoaXMub3Bjb2RlKCdwdXNoSWQnLCB2YWwudHlwZSwgdmFsdWUpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICB0aGlzLmFjY2VwdCh2YWwpOwor
ICAgICAgICB9CisgICAgICB9LAorCisgICAgICBzZXR1cEZ1bGxNdXN0YWNoZVBhcmFtczogZnVu
Y3Rpb24gc2V0dXBGdWxsTXVzdGFjaGVQYXJhbXMoc2V4cHIsIHByb2dyYW0sIGludmVyc2UsIG9t
aXRFbXB0eSkgeworICAgICAgICB2YXIgcGFyYW1zID0gc2V4cHIucGFyYW1zOworICAgICAgICB0
aGlzLnB1c2hQYXJhbXMocGFyYW1zKTsKKworICAgICAgICB0aGlzLm9wY29kZSgncHVzaFByb2dy
YW0nLCBwcm9ncmFtKTsKKyAgICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hQcm9ncmFtJywgaW52ZXJz
ZSk7CisKKyAgICAgICAgaWYgKHNleHByLmhhc2gpIHsKKyAgICAgICAgICB0aGlzLmFjY2VwdChz
ZXhwci5oYXNoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB0aGlzLm9wY29kZSgnZW1w
dHlIYXNoJywgb21pdEVtcHR5KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBwYXJhbXM7
CisgICAgICB9LAorCisgICAgICBibG9ja1BhcmFtSW5kZXg6IGZ1bmN0aW9uIGJsb2NrUGFyYW1J
bmRleChuYW1lKSB7CisgICAgICAgIGZvciAodmFyIGRlcHRoID0gMCwgbGVuID0gdGhpcy5vcHRp
b25zLmJsb2NrUGFyYW1zLmxlbmd0aDsgZGVwdGggPCBsZW47IGRlcHRoKyspIHsKKyAgICAgICAg
ICB2YXIgYmxvY2tQYXJhbXMgPSB0aGlzLm9wdGlvbnMuYmxvY2tQYXJhbXNbZGVwdGhdLAorICAg
ICAgICAgICAgICBwYXJhbSA9IGJsb2NrUGFyYW1zICYmIF91dGlscy5pbmRleE9mKGJsb2NrUGFy
YW1zLCBuYW1lKTsKKyAgICAgICAgICBpZiAoYmxvY2tQYXJhbXMgJiYgcGFyYW0gPj0gMCkgewor
ICAgICAgICAgICAgcmV0dXJuIFtkZXB0aCwgcGFyYW1dOworICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgfQorICAgIH07CisKKyAgICBmdW5jdGlvbiBwcmVjb21waWxlKGlucHV0LCBvcHRp
b25zLCBlbnYpIHsKKyAgICAgIGlmIChpbnB1dCA9PSBudWxsIHx8IHR5cGVvZiBpbnB1dCAhPT0g
J3N0cmluZycgJiYgaW5wdXQudHlwZSAhPT0gJ1Byb2dyYW0nKSB7CisgICAgICAgIHRocm93IG5l
dyBfZXhjZXB0aW9uMlsnZGVmYXVsdCddKCdZb3UgbXVzdCBwYXNzIGEgc3RyaW5nIG9yIEhhbmRs
ZWJhcnMgQVNUIHRvIEhhbmRsZWJhcnMucHJlY29tcGlsZS4gWW91IHBhc3NlZCAnICsgaW5wdXQp
OworICAgICAgfQorCisgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKKyAgICAgIGlmICgh
KCdkYXRhJyBpbiBvcHRpb25zKSkgeworICAgICAgICBvcHRpb25zLmRhdGEgPSB0cnVlOworICAg
ICAgfQorICAgICAgaWYgKG9wdGlvbnMuY29tcGF0KSB7CisgICAgICAgIG9wdGlvbnMudXNlRGVw
dGhzID0gdHJ1ZTsKKyAgICAgIH0KKworICAgICAgdmFyIGFzdCA9IGVudi5wYXJzZShpbnB1dCwg
b3B0aW9ucyksCisgICAgICAgICAgZW52aXJvbm1lbnQgPSBuZXcgZW52LkNvbXBpbGVyKCkuY29t
cGlsZShhc3QsIG9wdGlvbnMpOworICAgICAgcmV0dXJuIG5ldyBlbnYuSmF2YVNjcmlwdENvbXBp
bGVyKCkuY29tcGlsZShlbnZpcm9ubWVudCwgb3B0aW9ucyk7CisgICAgfQorCisgICAgZnVuY3Rp
b24gY29tcGlsZShpbnB1dCwgb3B0aW9ucywgZW52KSB7CisgICAgICBpZiAob3B0aW9ucyA9PT0g
dW5kZWZpbmVkKSBvcHRpb25zID0ge307CisKKyAgICAgIGlmIChpbnB1dCA9PSBudWxsIHx8IHR5
cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycgJiYgaW5wdXQudHlwZSAhPT0gJ1Byb2dyYW0nKSB7Cisg
ICAgICAgIHRocm93IG5ldyBfZXhjZXB0aW9uMlsnZGVmYXVsdCddKCdZb3UgbXVzdCBwYXNzIGEg
c3RyaW5nIG9yIEhhbmRsZWJhcnMgQVNUIHRvIEhhbmRsZWJhcnMuY29tcGlsZS4gWW91IHBhc3Nl
ZCAnICsgaW5wdXQpOworICAgICAgfQorCisgICAgICBpZiAoISgnZGF0YScgaW4gb3B0aW9ucykp
IHsKKyAgICAgICAgb3B0aW9ucy5kYXRhID0gdHJ1ZTsKKyAgICAgIH0KKyAgICAgIGlmIChvcHRp
b25zLmNvbXBhdCkgeworICAgICAgICBvcHRpb25zLnVzZURlcHRocyA9IHRydWU7CisgICAgICB9
CisKKyAgICAgIHZhciBjb21waWxlZCA9IHVuZGVmaW5lZDsKKworICAgICAgZnVuY3Rpb24gY29t
cGlsZUlucHV0KCkgeworICAgICAgICB2YXIgYXN0ID0gZW52LnBhcnNlKGlucHV0LCBvcHRpb25z
KSwKKyAgICAgICAgICAgIGVudmlyb25tZW50ID0gbmV3IGVudi5Db21waWxlcigpLmNvbXBpbGUo
YXN0LCBvcHRpb25zKSwKKyAgICAgICAgICAgIHRlbXBsYXRlU3BlYyA9IG5ldyBlbnYuSmF2YVNj
cmlwdENvbXBpbGVyKCkuY29tcGlsZShlbnZpcm9ubWVudCwgb3B0aW9ucywgdW5kZWZpbmVkLCB0
cnVlKTsKKyAgICAgICAgcmV0dXJuIGVudi50ZW1wbGF0ZSh0ZW1wbGF0ZVNwZWMpOworICAgICAg
fQorCisgICAgICAvLyBUZW1wbGF0ZSBpcyBvbmx5IGNvbXBpbGVkIG9uIGZpcnN0IHVzZSBhbmQg
Y2FjaGVkIGFmdGVyIHRoYXQgcG9pbnQuCisgICAgICBmdW5jdGlvbiByZXQoY29udGV4dCwgZXhl
Y09wdGlvbnMpIHsKKyAgICAgICAgaWYgKCFjb21waWxlZCkgeworICAgICAgICAgIGNvbXBpbGVk
ID0gY29tcGlsZUlucHV0KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNvbXBpbGVkLmNh
bGwodGhpcywgY29udGV4dCwgZXhlY09wdGlvbnMpOworICAgICAgfQorICAgICAgcmV0Ll9zZXR1
cCA9IGZ1bmN0aW9uIChzZXR1cE9wdGlvbnMpIHsKKyAgICAgICAgaWYgKCFjb21waWxlZCkgewor
ICAgICAgICAgIGNvbXBpbGVkID0gY29tcGlsZUlucHV0KCk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIGNvbXBpbGVkLl9zZXR1cChzZXR1cE9wdGlvbnMpOworICAgICAgfTsKKyAgICAgIHJl
dC5fY2hpbGQgPSBmdW5jdGlvbiAoaSwgZGF0YSwgYmxvY2tQYXJhbXMsIGRlcHRocykgeworICAg
ICAgICBpZiAoIWNvbXBpbGVkKSB7CisgICAgICAgICAgY29tcGlsZWQgPSBjb21waWxlSW5wdXQo
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY29tcGlsZWQuX2NoaWxkKGksIGRhdGEsIGJs
b2NrUGFyYW1zLCBkZXB0aHMpOworICAgICAgfTsKKyAgICAgIHJldHVybiByZXQ7CisgICAgfQor
CisgICAgZnVuY3Rpb24gYXJnRXF1YWxzKGEsIGIpIHsKKyAgICAgIGlmIChhID09PSBiKSB7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgfQorCisgICAgICBpZiAoX3V0aWxzLmlzQXJyYXko
YSkgJiYgX3V0aWxzLmlzQXJyYXkoYikgJiYgYS5sZW5ndGggPT09IGIubGVuZ3RoKSB7CisgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgeworICAgICAgICAgIGlmICgh
YXJnRXF1YWxzKGFbaV0sIGJbaV0pKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgfQorICAgIH0K
KworICAgIGZ1bmN0aW9uIHRyYW5zZm9ybUxpdGVyYWxUb1BhdGgoc2V4cHIpIHsKKyAgICAgIGlm
ICghc2V4cHIucGF0aC5wYXJ0cykgeworICAgICAgICB2YXIgbGl0ZXJhbCA9IHNleHByLnBhdGg7
CisgICAgICAgIC8vIENhc3RpbmcgdG8gc3RyaW5nIGhlcmUgdG8gbWFrZSBmYWxzZSBhbmQgMCBs
aXRlcmFsIHZhbHVlcyBwbGF5IG5pY2VseSB3aXRoIHRoZSByZXN0CisgICAgICAgIC8vIG9mIHRo
ZSBzeXN0ZW0uCisgICAgICAgIHNleHByLnBhdGggPSB7CisgICAgICAgICAgdHlwZTogJ1BhdGhF
eHByZXNzaW9uJywKKyAgICAgICAgICBkYXRhOiBmYWxzZSwKKyAgICAgICAgICBkZXB0aDogMCwK
KyAgICAgICAgICBwYXJ0czogW2xpdGVyYWwub3JpZ2luYWwgKyAnJ10sCisgICAgICAgICAgb3Jp
Z2luYWw6IGxpdGVyYWwub3JpZ2luYWwgKyAnJywKKyAgICAgICAgICBsb2M6IGxpdGVyYWwubG9j
CisgICAgICAgIH07CisgICAgICB9CisgICAgfQorCisvKioqLyB9LAorLyogMzEgKi8KKy8qKiov
IGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisgICAg
J3VzZSBzdHJpY3QnOworCisgICAgdmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKDEpWydkZWZhdWx0J107CisKKyAgICBleHBvcnRzLl9fZXNNb2R1bGUgPSB0
cnVlOworCisgICAgdmFyIF9iYXNlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTsKKworICAgIHZh
ciBfZXhjZXB0aW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTsKKworICAgIHZhciBfZXhjZXB0
aW9uMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2V4Y2VwdGlvbik7CisKKyAgICB2YXIgX3V0
aWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTsKKworICAgIHZhciBfY29kZUdlbiA9IF9fd2Vi
cGFja19yZXF1aXJlX18oMzIpOworCisgICAgdmFyIF9jb2RlR2VuMiA9IF9pbnRlcm9wUmVxdWly
ZURlZmF1bHQoX2NvZGVHZW4pOworCisgICAgZnVuY3Rpb24gTGl0ZXJhbCh2YWx1ZSkgeworICAg
ICAgdGhpcy52YWx1ZSA9IHZhbHVlOworICAgIH0KKworICAgIGZ1bmN0aW9uIEphdmFTY3JpcHRD
b21waWxlcigpIHt9CisKKyAgICBKYXZhU2NyaXB0Q29tcGlsZXIucHJvdG90eXBlID0geworICAg
ICAgLy8gUFVCTElDIEFQSTogWW91IGNhbiBvdmVycmlkZSB0aGVzZSBtZXRob2RzIGluIGEgc3Vi
Y2xhc3MgdG8gcHJvdmlkZQorICAgICAgLy8gYWx0ZXJuYXRpdmUgY29tcGlsZWQgZm9ybXMgZm9y
IG5hbWUgbG9va3VwIGFuZCBidWZmZXJpbmcgc2VtYW50aWNzCisgICAgICBuYW1lTG9va3VwOiBm
dW5jdGlvbiBuYW1lTG9va3VwKHBhcmVudCwgbmFtZSAvKiAsIHR5cGUqLykgeworICAgICAgICBp
ZiAoSmF2YVNjcmlwdENvbXBpbGVyLmlzVmFsaWRKYXZhU2NyaXB0VmFyaWFibGVOYW1lKG5hbWUp
KSB7CisgICAgICAgICAgcmV0dXJuIFtwYXJlbnQsICcuJywgbmFtZV07CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgcmV0dXJuIFtwYXJlbnQsICdbJywgSlNPTi5zdHJpbmdpZnkobmFtZSks
ICddJ107CisgICAgICAgIH0KKyAgICAgIH0sCisgICAgICBkZXB0aGVkTG9va3VwOiBmdW5jdGlv
biBkZXB0aGVkTG9va3VwKG5hbWUpIHsKKyAgICAgICAgcmV0dXJuIFt0aGlzLmFsaWFzYWJsZSgn
Y29udGFpbmVyLmxvb2t1cCcpLCAnKGRlcHRocywgIicsIG5hbWUsICciKSddOworICAgICAgfSwK
KworICAgICAgY29tcGlsZXJJbmZvOiBmdW5jdGlvbiBjb21waWxlckluZm8oKSB7CisgICAgICAg
IHZhciByZXZpc2lvbiA9IF9iYXNlLkNPTVBJTEVSX1JFVklTSU9OLAorICAgICAgICAgICAgdmVy
c2lvbnMgPSBfYmFzZS5SRVZJU0lPTl9DSEFOR0VTW3JldmlzaW9uXTsKKyAgICAgICAgcmV0dXJu
IFtyZXZpc2lvbiwgdmVyc2lvbnNdOworICAgICAgfSwKKworICAgICAgYXBwZW5kVG9CdWZmZXI6
IGZ1bmN0aW9uIGFwcGVuZFRvQnVmZmVyKHNvdXJjZSwgbG9jYXRpb24sIGV4cGxpY2l0KSB7Cisg
ICAgICAgIC8vIEZvcmNlIGEgc291cmNlIGFzIHRoaXMgc2ltcGxpZmllcyB0aGUgbWVyZ2UgbG9n
aWMuCisgICAgICAgIGlmICghX3V0aWxzLmlzQXJyYXkoc291cmNlKSkgeworICAgICAgICAgIHNv
dXJjZSA9IFtzb3VyY2VdOworICAgICAgICB9CisgICAgICAgIHNvdXJjZSA9IHRoaXMuc291cmNl
LndyYXAoc291cmNlLCBsb2NhdGlvbik7CisKKyAgICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQu
aXNTaW1wbGUpIHsKKyAgICAgICAgICByZXR1cm4gWydyZXR1cm4gJywgc291cmNlLCAnOyddOwor
ICAgICAgICB9IGVsc2UgaWYgKGV4cGxpY2l0KSB7CisgICAgICAgICAgLy8gVGhpcyBpcyBhIGNh
c2Ugd2hlcmUgdGhlIGJ1ZmZlciBvcGVyYXRpb24gb2NjdXJzIGFzIGEgY2hpbGQgb2YgYW5vdGhl
cgorICAgICAgICAgIC8vIGNvbnN0cnVjdCwgZ2VuZXJhbGx5IGJyYWNlcy4gV2UgaGF2ZSB0byBl
eHBsaWNpdGx5IG91dHB1dCB0aGVzZSBidWZmZXIKKyAgICAgICAgICAvLyBvcGVyYXRpb25zIHRv
IGVuc3VyZSB0aGF0IHRoZSBlbWl0dGVkIGNvZGUgZ29lcyBpbiB0aGUgY29ycmVjdCBsb2NhdGlv
bi4KKyAgICAgICAgICByZXR1cm4gWydidWZmZXIgKz0gJywgc291cmNlLCAnOyddOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgIHNvdXJjZS5hcHBlbmRUb0J1ZmZlciA9IHRydWU7CisgICAg
ICAgICAgcmV0dXJuIHNvdXJjZTsKKyAgICAgICAgfQorICAgICAgfSwKKworICAgICAgaW5pdGlh
bGl6ZUJ1ZmZlcjogZnVuY3Rpb24gaW5pdGlhbGl6ZUJ1ZmZlcigpIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMucXVvdGVkU3RyaW5nKCcnKTsKKyAgICAgIH0sCisgICAgICAvLyBFTkQgUFVCTElDIEFQ
SQorCisgICAgICBjb21waWxlOiBmdW5jdGlvbiBjb21waWxlKGVudmlyb25tZW50LCBvcHRpb25z
LCBjb250ZXh0LCBhc09iamVjdCkgeworICAgICAgICB0aGlzLmVudmlyb25tZW50ID0gZW52aXJv
bm1lbnQ7CisgICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7CisgICAgICAgIHRoaXMuc3Ry
aW5nUGFyYW1zID0gdGhpcy5vcHRpb25zLnN0cmluZ1BhcmFtczsKKyAgICAgICAgdGhpcy50cmFj
a0lkcyA9IHRoaXMub3B0aW9ucy50cmFja0lkczsKKyAgICAgICAgdGhpcy5wcmVjb21waWxlID0g
IWFzT2JqZWN0OworCisgICAgICAgIHRoaXMubmFtZSA9IHRoaXMuZW52aXJvbm1lbnQubmFtZTsK
KyAgICAgICAgdGhpcy5pc0NoaWxkID0gISFjb250ZXh0OworICAgICAgICB0aGlzLmNvbnRleHQg
PSBjb250ZXh0IHx8IHsKKyAgICAgICAgICBkZWNvcmF0b3JzOiBbXSwKKyAgICAgICAgICBwcm9n
cmFtczogW10sCisgICAgICAgICAgZW52aXJvbm1lbnRzOiBbXQorICAgICAgICB9OworCisgICAg
ICAgIHRoaXMucHJlYW1ibGUoKTsKKworICAgICAgICB0aGlzLnN0YWNrU2xvdCA9IDA7CisgICAg
ICAgIHRoaXMuc3RhY2tWYXJzID0gW107CisgICAgICAgIHRoaXMuYWxpYXNlcyA9IHt9OworICAg
ICAgICB0aGlzLnJlZ2lzdGVycyA9IHsgbGlzdDogW10gfTsKKyAgICAgICAgdGhpcy5oYXNoZXMg
PSBbXTsKKyAgICAgICAgdGhpcy5jb21waWxlU3RhY2sgPSBbXTsKKyAgICAgICAgdGhpcy5pbmxp
bmVTdGFjayA9IFtdOworICAgICAgICB0aGlzLmJsb2NrUGFyYW1zID0gW107CisKKyAgICAgICAg
dGhpcy5jb21waWxlQ2hpbGRyZW4oZW52aXJvbm1lbnQsIG9wdGlvbnMpOworCisgICAgICAgIHRo
aXMudXNlRGVwdGhzID0gdGhpcy51c2VEZXB0aHMgfHwgZW52aXJvbm1lbnQudXNlRGVwdGhzIHx8
IGVudmlyb25tZW50LnVzZURlY29yYXRvcnMgfHwgdGhpcy5vcHRpb25zLmNvbXBhdDsKKyAgICAg
ICAgdGhpcy51c2VCbG9ja1BhcmFtcyA9IHRoaXMudXNlQmxvY2tQYXJhbXMgfHwgZW52aXJvbm1l
bnQudXNlQmxvY2tQYXJhbXM7CisKKyAgICAgICAgdmFyIG9wY29kZXMgPSBlbnZpcm9ubWVudC5v
cGNvZGVzLAorICAgICAgICAgICAgb3Bjb2RlID0gdW5kZWZpbmVkLAorICAgICAgICAgICAgZmly
c3RMb2MgPSB1bmRlZmluZWQsCisgICAgICAgICAgICBpID0gdW5kZWZpbmVkLAorICAgICAgICAg
ICAgbCA9IHVuZGVmaW5lZDsKKworICAgICAgICBmb3IgKGkgPSAwLCBsID0gb3Bjb2Rlcy5sZW5n
dGg7IGkgPCBsOyBpKyspIHsKKyAgICAgICAgICBvcGNvZGUgPSBvcGNvZGVzW2ldOworCisgICAg
ICAgICAgdGhpcy5zb3VyY2UuY3VycmVudExvY2F0aW9uID0gb3Bjb2RlLmxvYzsKKyAgICAgICAg
ICBmaXJzdExvYyA9IGZpcnN0TG9jIHx8IG9wY29kZS5sb2M7CisgICAgICAgICAgdGhpc1tvcGNv
ZGUub3Bjb2RlXS5hcHBseSh0aGlzLCBvcGNvZGUuYXJncyk7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBGbHVzaCBhbnkgdHJhaWxpbmcgY29udGVudCB0aGF0IG1pZ2h0IGJlIHBlbmRpbmcuCisg
ICAgICAgIHRoaXMuc291cmNlLmN1cnJlbnRMb2NhdGlvbiA9IGZpcnN0TG9jOworICAgICAgICB0
aGlzLnB1c2hTb3VyY2UoJycpOworCisgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICov
CisgICAgICAgIGlmICh0aGlzLnN0YWNrU2xvdCB8fCB0aGlzLmlubGluZVN0YWNrLmxlbmd0aCB8
fCB0aGlzLmNvbXBpbGVTdGFjay5sZW5ndGgpIHsKKyAgICAgICAgICB0aHJvdyBuZXcgX2V4Y2Vw
dGlvbjJbJ2RlZmF1bHQnXSgnQ29tcGlsZSBjb21wbGV0ZWQgd2l0aCBjb250ZW50IGxlZnQgb24g
c3RhY2snKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghdGhpcy5kZWNvcmF0b3JzLmlzRW1w
dHkoKSkgeworICAgICAgICAgIHRoaXMudXNlRGVjb3JhdG9ycyA9IHRydWU7CisKKyAgICAgICAg
ICB0aGlzLmRlY29yYXRvcnMucHJlcGVuZCgndmFyIGRlY29yYXRvcnMgPSBjb250YWluZXIuZGVj
b3JhdG9ycztcbicpOworICAgICAgICAgIHRoaXMuZGVjb3JhdG9ycy5wdXNoKCdyZXR1cm4gZm47
Jyk7CisKKyAgICAgICAgICBpZiAoYXNPYmplY3QpIHsKKyAgICAgICAgICAgIHRoaXMuZGVjb3Jh
dG9ycyA9IEZ1bmN0aW9uLmFwcGx5KHRoaXMsIFsnZm4nLCAncHJvcHMnLCAnY29udGFpbmVyJywg
J2RlcHRoMCcsICdkYXRhJywgJ2Jsb2NrUGFyYW1zJywgJ2RlcHRocycsIHRoaXMuZGVjb3JhdG9y
cy5tZXJnZSgpXSk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuZGVjb3Jh
dG9ycy5wcmVwZW5kKCdmdW5jdGlvbihmbiwgcHJvcHMsIGNvbnRhaW5lciwgZGVwdGgwLCBkYXRh
LCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4nKTsKKyAgICAgICAgICAgIHRoaXMuZGVjb3JhdG9y
cy5wdXNoKCd9XG4nKTsKKyAgICAgICAgICAgIHRoaXMuZGVjb3JhdG9ycyA9IHRoaXMuZGVjb3Jh
dG9ycy5tZXJnZSgpOworICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB0
aGlzLmRlY29yYXRvcnMgPSB1bmRlZmluZWQ7CisgICAgICAgIH0KKworICAgICAgICB2YXIgZm4g
PSB0aGlzLmNyZWF0ZUZ1bmN0aW9uQ29udGV4dChhc09iamVjdCk7CisgICAgICAgIGlmICghdGhp
cy5pc0NoaWxkKSB7CisgICAgICAgICAgdmFyIHJldCA9IHsKKyAgICAgICAgICAgIGNvbXBpbGVy
OiB0aGlzLmNvbXBpbGVySW5mbygpLAorICAgICAgICAgICAgbWFpbjogZm4KKyAgICAgICAgICB9
OworCisgICAgICAgICAgaWYgKHRoaXMuZGVjb3JhdG9ycykgeworICAgICAgICAgICAgcmV0Lm1h
aW5fZCA9IHRoaXMuZGVjb3JhdG9yczsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjYW1lbGNhc2UK
KyAgICAgICAgICAgIHJldC51c2VEZWNvcmF0b3JzID0gdHJ1ZTsKKyAgICAgICAgICB9CisKKyAg
ICAgICAgICB2YXIgX2NvbnRleHQgPSB0aGlzLmNvbnRleHQ7CisgICAgICAgICAgdmFyIHByb2dy
YW1zID0gX2NvbnRleHQucHJvZ3JhbXM7CisgICAgICAgICAgdmFyIGRlY29yYXRvcnMgPSBfY29u
dGV4dC5kZWNvcmF0b3JzOworCisgICAgICAgICAgZm9yIChpID0gMCwgbCA9IHByb2dyYW1zLmxl
bmd0aDsgaSA8IGw7IGkrKykgeworICAgICAgICAgICAgaWYgKHByb2dyYW1zW2ldKSB7CisgICAg
ICAgICAgICAgIHJldFtpXSA9IHByb2dyYW1zW2ldOworICAgICAgICAgICAgICBpZiAoZGVjb3Jh
dG9yc1tpXSkgeworICAgICAgICAgICAgICAgIHJldFtpICsgJ19kJ10gPSBkZWNvcmF0b3JzW2ld
OworICAgICAgICAgICAgICAgIHJldC51c2VEZWNvcmF0b3JzID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIGlmICh0aGlzLmVu
dmlyb25tZW50LnVzZVBhcnRpYWwpIHsKKyAgICAgICAgICAgIHJldC51c2VQYXJ0aWFsID0gdHJ1
ZTsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5kYXRhKSB7CisgICAg
ICAgICAgICByZXQudXNlRGF0YSA9IHRydWU7CisgICAgICAgICAgfQorICAgICAgICAgIGlmICh0
aGlzLnVzZURlcHRocykgeworICAgICAgICAgICAgcmV0LnVzZURlcHRocyA9IHRydWU7CisgICAg
ICAgICAgfQorICAgICAgICAgIGlmICh0aGlzLnVzZUJsb2NrUGFyYW1zKSB7CisgICAgICAgICAg
ICByZXQudXNlQmxvY2tQYXJhbXMgPSB0cnVlOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAo
dGhpcy5vcHRpb25zLmNvbXBhdCkgeworICAgICAgICAgICAgcmV0LmNvbXBhdCA9IHRydWU7Cisg
ICAgICAgICAgfQorCisgICAgICAgICAgaWYgKCFhc09iamVjdCkgeworICAgICAgICAgICAgcmV0
LmNvbXBpbGVyID0gSlNPTi5zdHJpbmdpZnkocmV0LmNvbXBpbGVyKTsKKworICAgICAgICAgICAg
dGhpcy5zb3VyY2UuY3VycmVudExvY2F0aW9uID0geyBzdGFydDogeyBsaW5lOiAxLCBjb2x1bW46
IDAgfSB9OworICAgICAgICAgICAgcmV0ID0gdGhpcy5vYmplY3RMaXRlcmFsKHJldCk7CisKKyAg
ICAgICAgICAgIGlmIChvcHRpb25zLnNyY05hbWUpIHsKKyAgICAgICAgICAgICAgcmV0ID0gcmV0
LnRvU3RyaW5nV2l0aFNvdXJjZU1hcCh7IGZpbGU6IG9wdGlvbnMuZGVzdE5hbWUgfSk7CisgICAg
ICAgICAgICAgIHJldC5tYXAgPSByZXQubWFwICYmIHJldC5tYXAudG9TdHJpbmcoKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHJldCA9IHJldC50b1N0cmluZygpOworICAg
ICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXQuY29tcGlsZXJP
cHRpb25zID0gdGhpcy5vcHRpb25zOworICAgICAgICAgIH0KKworICAgICAgICAgIHJldHVybiBy
ZXQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcmV0dXJuIGZuOworICAgICAgICB9Cisg
ICAgICB9LAorCisgICAgICBwcmVhbWJsZTogZnVuY3Rpb24gcHJlYW1ibGUoKSB7CisgICAgICAg
IC8vIHRyYWNrIHRoZSBsYXN0IGNvbnRleHQgcHVzaGVkIGludG8gcGxhY2UgdG8gYWxsb3cgc2tp
cHBpbmcgdGhlCisgICAgICAgIC8vIGdldENvbnRleHQgb3Bjb2RlIHdoZW4gaXQgd291bGQgYmUg
YSBub29wCisgICAgICAgIHRoaXMubGFzdENvbnRleHQgPSAwOworICAgICAgICB0aGlzLnNvdXJj
ZSA9IG5ldyBfY29kZUdlbjJbJ2RlZmF1bHQnXSh0aGlzLm9wdGlvbnMuc3JjTmFtZSk7CisgICAg
ICAgIHRoaXMuZGVjb3JhdG9ycyA9IG5ldyBfY29kZUdlbjJbJ2RlZmF1bHQnXSh0aGlzLm9wdGlv
bnMuc3JjTmFtZSk7CisgICAgICB9LAorCisgICAgICBjcmVhdGVGdW5jdGlvbkNvbnRleHQ6IGZ1
bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uQ29udGV4dChhc09iamVjdCkgeworICAgICAgICB2YXIgdmFy
RGVjbGFyYXRpb25zID0gJyc7CisKKyAgICAgICAgdmFyIGxvY2FscyA9IHRoaXMuc3RhY2tWYXJz
LmNvbmNhdCh0aGlzLnJlZ2lzdGVycy5saXN0KTsKKyAgICAgICAgaWYgKGxvY2Fscy5sZW5ndGgg
PiAwKSB7CisgICAgICAgICAgdmFyRGVjbGFyYXRpb25zICs9ICcsICcgKyBsb2NhbHMuam9pbign
LCAnKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEdlbmVyYXRlIG1pbmltaXplciBhbGlhcyBt
YXBwaW5ncworICAgICAgICAvLworICAgICAgICAvLyBXaGVuIHVzaW5nIHRydWUgU291cmNlTm9k
ZXMsIHRoaXMgd2lsbCB1cGRhdGUgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIGdpdmVuIGFsaWFzCisg
ICAgICAgIC8vIGFzIHRoZSBzb3VyY2Ugbm9kZXMgYXJlIHJldXNlZCBpbiBzaXR1LiBGb3IgdGhl
IG5vbi1zb3VyY2Ugbm9kZSBjb21waWxhdGlvbiBtb2RlLAorICAgICAgICAvLyBhbGlhc2VzIHdp
bGwgbm90IGJlIHVzZWQsIGJ1dCB0aGlzIGNhc2UgaXMgYWxyZWFkeSBiZWluZyBydW4gb24gdGhl
IGNsaWVudCBhbmQKKyAgICAgICAgLy8gd2UgYXJlbid0IGNvbmNlcm4gYWJvdXQgbWluaW1pemlu
ZyB0aGUgdGVtcGxhdGUgc2l6ZS4KKyAgICAgICAgdmFyIGFsaWFzQ291bnQgPSAwOworICAgICAg
ICBmb3IgKHZhciBhbGlhcyBpbiB0aGlzLmFsaWFzZXMpIHsKKyAgICAgICAgICAvLyBlc2xpbnQt
ZGlzYWJsZS1saW5lIGd1YXJkLWZvci1pbgorICAgICAgICAgIHZhciBub2RlID0gdGhpcy5hbGlh
c2VzW2FsaWFzXTsKKworICAgICAgICAgIGlmICh0aGlzLmFsaWFzZXMuaGFzT3duUHJvcGVydHko
YWxpYXMpICYmIG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5yZWZlcmVuY2VDb3VudCA+IDEpIHsKKyAg
ICAgICAgICAgIHZhckRlY2xhcmF0aW9ucyArPSAnLCBhbGlhcycgKyArK2FsaWFzQ291bnQgKyAn
PScgKyBhbGlhczsKKyAgICAgICAgICAgIG5vZGUuY2hpbGRyZW5bMF0gPSAnYWxpYXMnICsgYWxp
YXNDb3VudDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB2YXIgcGFyYW1zID0g
Wydjb250YWluZXInLCAnZGVwdGgwJywgJ2hlbHBlcnMnLCAncGFydGlhbHMnLCAnZGF0YSddOwor
CisgICAgICAgIGlmICh0aGlzLnVzZUJsb2NrUGFyYW1zIHx8IHRoaXMudXNlRGVwdGhzKSB7Cisg
ICAgICAgICAgcGFyYW1zLnB1c2goJ2Jsb2NrUGFyYW1zJyk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHRoaXMudXNlRGVwdGhzKSB7CisgICAgICAgICAgcGFyYW1zLnB1c2goJ2RlcHRocycpOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gUGVyZm9ybSBhIHNlY29uZCBwYXNzIG92ZXIgdGhlIG91
dHB1dCB0byBtZXJnZSBjb250ZW50IHdoZW4gcG9zc2libGUKKyAgICAgICAgdmFyIHNvdXJjZSA9
IHRoaXMubWVyZ2VTb3VyY2UodmFyRGVjbGFyYXRpb25zKTsKKworICAgICAgICBpZiAoYXNPYmpl
Y3QpIHsKKyAgICAgICAgICBwYXJhbXMucHVzaChzb3VyY2UpOworCisgICAgICAgICAgcmV0dXJu
IEZ1bmN0aW9uLmFwcGx5KHRoaXMsIHBhcmFtcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgcmV0dXJuIHRoaXMuc291cmNlLndyYXAoWydmdW5jdGlvbignLCBwYXJhbXMuam9pbignLCcp
LCAnKSB7XG4gICcsIHNvdXJjZSwgJ30nXSk7CisgICAgICAgIH0KKyAgICAgIH0sCisgICAgICBt
ZXJnZVNvdXJjZTogZnVuY3Rpb24gbWVyZ2VTb3VyY2UodmFyRGVjbGFyYXRpb25zKSB7CisgICAg
ICAgIHZhciBpc1NpbXBsZSA9IHRoaXMuZW52aXJvbm1lbnQuaXNTaW1wbGUsCisgICAgICAgICAg
ICBhcHBlbmRPbmx5ID0gIXRoaXMuZm9yY2VCdWZmZXIsCisgICAgICAgICAgICBhcHBlbmRGaXJz
dCA9IHVuZGVmaW5lZCwKKyAgICAgICAgICAgIHNvdXJjZVNlZW4gPSB1bmRlZmluZWQsCisgICAg
ICAgICAgICBidWZmZXJTdGFydCA9IHVuZGVmaW5lZCwKKyAgICAgICAgICAgIGJ1ZmZlckVuZCA9
IHVuZGVmaW5lZDsKKyAgICAgICAgdGhpcy5zb3VyY2UuZWFjaChmdW5jdGlvbiAobGluZSkgewor
ICAgICAgICAgIGlmIChsaW5lLmFwcGVuZFRvQnVmZmVyKSB7CisgICAgICAgICAgICBpZiAoYnVm
ZmVyU3RhcnQpIHsKKyAgICAgICAgICAgICAgbGluZS5wcmVwZW5kKCcgICsgJyk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBidWZmZXJTdGFydCA9IGxpbmU7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBidWZmZXJFbmQgPSBsaW5lOworICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBpZiAoYnVmZmVyU3RhcnQpIHsKKyAgICAgICAgICAgICAgaWYgKCFzb3Vy
Y2VTZWVuKSB7CisgICAgICAgICAgICAgICAgYXBwZW5kRmlyc3QgPSB0cnVlOworICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJ1ZmZlclN0YXJ0LnByZXBlbmQoJ2J1ZmZl
ciArPSAnKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBidWZmZXJFbmQuYWRkKCc7
Jyk7CisgICAgICAgICAgICAgIGJ1ZmZlclN0YXJ0ID0gYnVmZmVyRW5kID0gdW5kZWZpbmVkOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzb3VyY2VTZWVuID0gdHJ1ZTsKKyAgICAgICAg
ICAgIGlmICghaXNTaW1wbGUpIHsKKyAgICAgICAgICAgICAgYXBwZW5kT25seSA9IGZhbHNlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgaWYgKGFw
cGVuZE9ubHkpIHsKKyAgICAgICAgICBpZiAoYnVmZmVyU3RhcnQpIHsKKyAgICAgICAgICAgIGJ1
ZmZlclN0YXJ0LnByZXBlbmQoJ3JldHVybiAnKTsKKyAgICAgICAgICAgIGJ1ZmZlckVuZC5hZGQo
JzsnKTsKKyAgICAgICAgICB9IGVsc2UgaWYgKCFzb3VyY2VTZWVuKSB7CisgICAgICAgICAgICB0
aGlzLnNvdXJjZS5wdXNoKCdyZXR1cm4gIiI7Jyk7CisgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgeworICAgICAgICAgIHZhckRlY2xhcmF0aW9ucyArPSAnLCBidWZmZXIgPSAnICsgKGFwcGVu
ZEZpcnN0ID8gJycgOiB0aGlzLmluaXRpYWxpemVCdWZmZXIoKSk7CisKKyAgICAgICAgICBpZiAo
YnVmZmVyU3RhcnQpIHsKKyAgICAgICAgICAgIGJ1ZmZlclN0YXJ0LnByZXBlbmQoJ3JldHVybiBi
dWZmZXIgKyAnKTsKKyAgICAgICAgICAgIGJ1ZmZlckVuZC5hZGQoJzsnKTsKKyAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgdGhpcy5zb3VyY2UucHVzaCgncmV0dXJuIGJ1ZmZlcjsnKTsK
KyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAodmFyRGVjbGFyYXRpb25zKSB7
CisgICAgICAgICAgdGhpcy5zb3VyY2UucHJlcGVuZCgndmFyICcgKyB2YXJEZWNsYXJhdGlvbnMu
c3Vic3RyaW5nKDIpICsgKGFwcGVuZEZpcnN0ID8gJycgOiAnO1xuJykpOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIHRoaXMuc291cmNlLm1lcmdlKCk7CisgICAgICB9LAorCisgICAgICAv
LyBbYmxvY2tWYWx1ZV0KKyAgICAgIC8vCisgICAgICAvLyBPbiBzdGFjaywgYmVmb3JlOiBoYXNo
LCBpbnZlcnNlLCBwcm9ncmFtLCB2YWx1ZQorICAgICAgLy8gT24gc3RhY2ssIGFmdGVyOiByZXR1
cm4gdmFsdWUgb2YgYmxvY2tIZWxwZXJNaXNzaW5nCisgICAgICAvLworICAgICAgLy8gVGhlIHB1
cnBvc2Ugb2YgdGhpcyBvcGNvZGUgaXMgdG8gdGFrZSBhIGJsb2NrIG9mIHRoZSBmb3JtCisgICAg
ICAvLyBge3sjdGhpcy5mb299fS4uLnt7L3RoaXMuZm9vfX1gLCByZXNvbHZlIHRoZSB2YWx1ZSBv
ZiBgZm9vYCwgYW5kCisgICAgICAvLyByZXBsYWNlIGl0IG9uIHRoZSBzdGFjayB3aXRoIHRoZSBy
ZXN1bHQgb2YgcHJvcGVybHkKKyAgICAgIC8vIGludm9raW5nIGJsb2NrSGVscGVyTWlzc2luZy4K
KyAgICAgIGJsb2NrVmFsdWU6IGZ1bmN0aW9uIGJsb2NrVmFsdWUobmFtZSkgeworICAgICAgICB2
YXIgYmxvY2tIZWxwZXJNaXNzaW5nID0gdGhpcy5hbGlhc2FibGUoJ2hlbHBlcnMuYmxvY2tIZWxw
ZXJNaXNzaW5nJyksCisgICAgICAgICAgICBwYXJhbXMgPSBbdGhpcy5jb250ZXh0TmFtZSgwKV07
CisgICAgICAgIHRoaXMuc2V0dXBIZWxwZXJBcmdzKG5hbWUsIDAsIHBhcmFtcyk7CisKKyAgICAg
ICAgdmFyIGJsb2NrTmFtZSA9IHRoaXMucG9wU3RhY2soKTsKKyAgICAgICAgcGFyYW1zLnNwbGlj
ZSgxLCAwLCBibG9ja05hbWUpOworCisgICAgICAgIHRoaXMucHVzaCh0aGlzLnNvdXJjZS5mdW5j
dGlvbkNhbGwoYmxvY2tIZWxwZXJNaXNzaW5nLCAnY2FsbCcsIHBhcmFtcykpOworICAgICAgfSwK
KworICAgICAgLy8gW2FtYmlndW91c0Jsb2NrVmFsdWVdCisgICAgICAvLworICAgICAgLy8gT24g
c3RhY2ssIGJlZm9yZTogaGFzaCwgaW52ZXJzZSwgcHJvZ3JhbSwgdmFsdWUKKyAgICAgIC8vIENv
bXBpbGVyIHZhbHVlLCBiZWZvcmU6IGxhc3RIZWxwZXI9dmFsdWUgb2YgbGFzdCBmb3VuZCBoZWxw
ZXIsIGlmIGFueQorICAgICAgLy8gT24gc3RhY2ssIGFmdGVyLCBpZiBubyBsYXN0SGVscGVyOiBz
YW1lIGFzIFtibG9ja1ZhbHVlXQorICAgICAgLy8gT24gc3RhY2ssIGFmdGVyLCBpZiBsYXN0SGVs
cGVyOiB2YWx1ZQorICAgICAgYW1iaWd1b3VzQmxvY2tWYWx1ZTogZnVuY3Rpb24gYW1iaWd1b3Vz
QmxvY2tWYWx1ZSgpIHsKKyAgICAgICAgLy8gV2UncmUgYmVpbmcgYSBiaXQgY2hlZWt5IGFuZCBy
ZXVzaW5nIHRoZSBvcHRpb25zIHZhbHVlIGZyb20gdGhlIHByaW9yIGV4ZWMKKyAgICAgICAgdmFy
IGJsb2NrSGVscGVyTWlzc2luZyA9IHRoaXMuYWxpYXNhYmxlKCdoZWxwZXJzLmJsb2NrSGVscGVy
TWlzc2luZycpLAorICAgICAgICAgICAgcGFyYW1zID0gW3RoaXMuY29udGV4dE5hbWUoMCldOwor
ICAgICAgICB0aGlzLnNldHVwSGVscGVyQXJncygnJywgMCwgcGFyYW1zLCB0cnVlKTsKKworICAg
ICAgICB0aGlzLmZsdXNoSW5saW5lKCk7CisKKyAgICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzLnRv
cFN0YWNrKCk7CisgICAgICAgIHBhcmFtcy5zcGxpY2UoMSwgMCwgY3VycmVudCk7CisKKyAgICAg
ICAgdGhpcy5wdXNoU291cmNlKFsnaWYgKCEnLCB0aGlzLmxhc3RIZWxwZXIsICcpIHsgJywgY3Vy
cmVudCwgJyA9ICcsIHRoaXMuc291cmNlLmZ1bmN0aW9uQ2FsbChibG9ja0hlbHBlck1pc3Npbmcs
ICdjYWxsJywgcGFyYW1zKSwgJ30nXSk7CisgICAgICB9LAorCisgICAgICAvLyBbYXBwZW5kQ29u
dGVudF0KKyAgICAgIC8vCisgICAgICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi4KKyAgICAgIC8v
IE9uIHN0YWNrLCBhZnRlcjogLi4uCisgICAgICAvLworICAgICAgLy8gQXBwZW5kcyB0aGUgc3Ry
aW5nIHZhbHVlIG9mIGBjb250ZW50YCB0byB0aGUgY3VycmVudCBidWZmZXIKKyAgICAgIGFwcGVu
ZENvbnRlbnQ6IGZ1bmN0aW9uIGFwcGVuZENvbnRlbnQoY29udGVudCkgeworICAgICAgICBpZiAo
dGhpcy5wZW5kaW5nQ29udGVudCkgeworICAgICAgICAgIGNvbnRlbnQgPSB0aGlzLnBlbmRpbmdD
b250ZW50ICsgY29udGVudDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB0aGlzLnBlbmRp
bmdMb2NhdGlvbiA9IHRoaXMuc291cmNlLmN1cnJlbnRMb2NhdGlvbjsKKyAgICAgICAgfQorCisg
ICAgICAgIHRoaXMucGVuZGluZ0NvbnRlbnQgPSBjb250ZW50OworICAgICAgfSwKKworICAgICAg
Ly8gW2FwcGVuZF0KKyAgICAgIC8vCisgICAgICAvLyBPbiBzdGFjaywgYmVmb3JlOiB2YWx1ZSwg
Li4uCisgICAgICAvLyBPbiBzdGFjaywgYWZ0ZXI6IC4uLgorICAgICAgLy8KKyAgICAgIC8vIENv
ZXJjZXMgYHZhbHVlYCB0byBhIFN0cmluZyBhbmQgYXBwZW5kcyBpdCB0byB0aGUgY3VycmVudCBi
dWZmZXIuCisgICAgICAvLworICAgICAgLy8gSWYgYHZhbHVlYCBpcyB0cnV0aHksIG9yIDAsIGl0
IGlzIGNvZXJjZWQgaW50byBhIHN0cmluZyBhbmQgYXBwZW5kZWQKKyAgICAgIC8vIE90aGVyd2lz
ZSwgdGhlIGVtcHR5IHN0cmluZyBpcyBhcHBlbmRlZAorICAgICAgYXBwZW5kOiBmdW5jdGlvbiBh
cHBlbmQoKSB7CisgICAgICAgIGlmICh0aGlzLmlzSW5saW5lKCkpIHsKKyAgICAgICAgICB0aGlz
LnJlcGxhY2VTdGFjayhmdW5jdGlvbiAoY3VycmVudCkgeworICAgICAgICAgICAgcmV0dXJuIFsn
ICE9IG51bGwgPyAnLCBjdXJyZW50LCAnIDogIiInXTsKKyAgICAgICAgICB9KTsKKworICAgICAg
ICAgIHRoaXMucHVzaFNvdXJjZSh0aGlzLmFwcGVuZFRvQnVmZmVyKHRoaXMucG9wU3RhY2soKSkp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHZhciBsb2NhbCA9IHRoaXMucG9wU3RhY2so
KTsKKyAgICAgICAgICB0aGlzLnB1c2hTb3VyY2UoWydpZiAoJywgbG9jYWwsICcgIT0gbnVsbCkg
eyAnLCB0aGlzLmFwcGVuZFRvQnVmZmVyKGxvY2FsLCB1bmRlZmluZWQsIHRydWUpLCAnIH0nXSk7
CisgICAgICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQuaXNTaW1wbGUpIHsKKyAgICAgICAgICAg
IHRoaXMucHVzaFNvdXJjZShbJ2Vsc2UgeyAnLCB0aGlzLmFwcGVuZFRvQnVmZmVyKCInJyIsIHVu
ZGVmaW5lZCwgdHJ1ZSksICcgfSddKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0s
CisKKyAgICAgIC8vIFthcHBlbmRFc2NhcGVkXQorICAgICAgLy8KKyAgICAgIC8vIE9uIHN0YWNr
LCBiZWZvcmU6IHZhbHVlLCAuLi4KKyAgICAgIC8vIE9uIHN0YWNrLCBhZnRlcjogLi4uCisgICAg
ICAvLworICAgICAgLy8gRXNjYXBlIGB2YWx1ZWAgYW5kIGFwcGVuZCBpdCB0byB0aGUgYnVmZmVy
CisgICAgICBhcHBlbmRFc2NhcGVkOiBmdW5jdGlvbiBhcHBlbmRFc2NhcGVkKCkgeworICAgICAg
ICB0aGlzLnB1c2hTb3VyY2UodGhpcy5hcHBlbmRUb0J1ZmZlcihbdGhpcy5hbGlhc2FibGUoJ2Nv
bnRhaW5lci5lc2NhcGVFeHByZXNzaW9uJyksICcoJywgdGhpcy5wb3BTdGFjaygpLCAnKSddKSk7
CisgICAgICB9LAorCisgICAgICAvLyBbZ2V0Q29udGV4dF0KKyAgICAgIC8vCisgICAgICAvLyBP
biBzdGFjaywgYmVmb3JlOiAuLi4KKyAgICAgIC8vIE9uIHN0YWNrLCBhZnRlcjogLi4uCisgICAg
ICAvLyBDb21waWxlciB2YWx1ZSwgYWZ0ZXI6IGxhc3RDb250ZXh0PWRlcHRoCisgICAgICAvLwor
ICAgICAgLy8gU2V0IHRoZSB2YWx1ZSBvZiB0aGUgYGxhc3RDb250ZXh0YCBjb21waWxlciB2YWx1
ZSB0byB0aGUgZGVwdGgKKyAgICAgIGdldENvbnRleHQ6IGZ1bmN0aW9uIGdldENvbnRleHQoZGVw
dGgpIHsKKyAgICAgICAgdGhpcy5sYXN0Q29udGV4dCA9IGRlcHRoOworICAgICAgfSwKKworICAg
ICAgLy8gW3B1c2hDb250ZXh0XQorICAgICAgLy8KKyAgICAgIC8vIE9uIHN0YWNrLCBiZWZvcmU6
IC4uLgorICAgICAgLy8gT24gc3RhY2ssIGFmdGVyOiBjdXJyZW50Q29udGV4dCwgLi4uCisgICAg
ICAvLworICAgICAgLy8gUHVzaGVzIHRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCBjb250ZXh0IG9u
dG8gdGhlIHN0YWNrLgorICAgICAgcHVzaENvbnRleHQ6IGZ1bmN0aW9uIHB1c2hDb250ZXh0KCkg
eworICAgICAgICB0aGlzLnB1c2hTdGFja0xpdGVyYWwodGhpcy5jb250ZXh0TmFtZSh0aGlzLmxh
c3RDb250ZXh0KSk7CisgICAgICB9LAorCisgICAgICAvLyBbbG9va3VwT25Db250ZXh0XQorICAg
ICAgLy8KKyAgICAgIC8vIE9uIHN0YWNrLCBiZWZvcmU6IC4uLgorICAgICAgLy8gT24gc3RhY2ss
IGFmdGVyOiBjdXJyZW50Q29udGV4dFtuYW1lXSwgLi4uCisgICAgICAvLworICAgICAgLy8gTG9v
a3MgdXAgdGhlIHZhbHVlIG9mIGBuYW1lYCBvbiB0aGUgY3VycmVudCBjb250ZXh0IGFuZCBwdXNo
ZXMKKyAgICAgIC8vIGl0IG9udG8gdGhlIHN0YWNrLgorICAgICAgbG9va3VwT25Db250ZXh0OiBm
dW5jdGlvbiBsb29rdXBPbkNvbnRleHQocGFydHMsIGZhbHN5LCBzdHJpY3QsIHNjb3BlZCkgewor
ICAgICAgICB2YXIgaSA9IDA7CisKKyAgICAgICAgaWYgKCFzY29wZWQgJiYgdGhpcy5vcHRpb25z
LmNvbXBhdCAmJiAhdGhpcy5sYXN0Q29udGV4dCkgeworICAgICAgICAgIC8vIFRoZSBkZXB0aGVk
IHF1ZXJ5IGlzIGV4cGVjdGVkIHRvIGhhbmRsZSB0aGUgdW5kZWZpbmVkIGxvZ2ljIGZvciB0aGUg
cm9vdCBsZXZlbCB0aGF0CisgICAgICAgICAgLy8gaXMgaW1wbGVtZW50ZWQgYmVsb3csIHNvIHdl
IGV2YWx1YXRlIHRoYXQgZGlyZWN0bHkgaW4gY29tcGF0IG1vZGUKKyAgICAgICAgICB0aGlzLnB1
c2godGhpcy5kZXB0aGVkTG9va3VwKHBhcnRzW2krK10pKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICB0aGlzLnB1c2hDb250ZXh0KCk7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLnJl
c29sdmVQYXRoKCdjb250ZXh0JywgcGFydHMsIGksIGZhbHN5LCBzdHJpY3QpOworICAgICAgfSwK
KworICAgICAgLy8gW2xvb2t1cEJsb2NrUGFyYW1dCisgICAgICAvLworICAgICAgLy8gT24gc3Rh
Y2ssIGJlZm9yZTogLi4uCisgICAgICAvLyBPbiBzdGFjaywgYWZ0ZXI6IGJsb2NrUGFyYW1bbmFt
ZV0sIC4uLgorICAgICAgLy8KKyAgICAgIC8vIExvb2tzIHVwIHRoZSB2YWx1ZSBvZiBgcGFydHNg
IG9uIHRoZSBnaXZlbiBibG9jayBwYXJhbSBhbmQgcHVzaGVzCisgICAgICAvLyBpdCBvbnRvIHRo
ZSBzdGFjay4KKyAgICAgIGxvb2t1cEJsb2NrUGFyYW06IGZ1bmN0aW9uIGxvb2t1cEJsb2NrUGFy
YW0oYmxvY2tQYXJhbUlkLCBwYXJ0cykgeworICAgICAgICB0aGlzLnVzZUJsb2NrUGFyYW1zID0g
dHJ1ZTsKKworICAgICAgICB0aGlzLnB1c2goWydibG9ja1BhcmFtc1snLCBibG9ja1BhcmFtSWRb
MF0sICddWycsIGJsb2NrUGFyYW1JZFsxXSwgJ10nXSk7CisgICAgICAgIHRoaXMucmVzb2x2ZVBh
dGgoJ2NvbnRleHQnLCBwYXJ0cywgMSk7CisgICAgICB9LAorCisgICAgICAvLyBbbG9va3VwRGF0
YV0KKyAgICAgIC8vCisgICAgICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi4KKyAgICAgIC8vIE9u
IHN0YWNrLCBhZnRlcjogZGF0YSwgLi4uCisgICAgICAvLworICAgICAgLy8gUHVzaCB0aGUgZGF0
YSBsb29rdXAgb3BlcmF0b3IKKyAgICAgIGxvb2t1cERhdGE6IGZ1bmN0aW9uIGxvb2t1cERhdGEo
ZGVwdGgsIHBhcnRzLCBzdHJpY3QpIHsKKyAgICAgICAgaWYgKCFkZXB0aCkgeworICAgICAgICAg
IHRoaXMucHVzaFN0YWNrTGl0ZXJhbCgnZGF0YScpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbCgnY29udGFpbmVyLmRhdGEoZGF0YSwgJyArIGRlcHRo
ICsgJyknKTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMucmVzb2x2ZVBhdGgoJ2RhdGEnLCBw
YXJ0cywgMCwgdHJ1ZSwgc3RyaWN0KTsKKyAgICAgIH0sCisKKyAgICAgIHJlc29sdmVQYXRoOiBm
dW5jdGlvbiByZXNvbHZlUGF0aCh0eXBlLCBwYXJ0cywgaSwgZmFsc3ksIHN0cmljdCkgeworICAg
ICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dAorCisgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7
CisKKyAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zdHJpY3QgfHwgdGhpcy5vcHRpb25zLmFzc3Vt
ZU9iamVjdHMpIHsKKyAgICAgICAgICB0aGlzLnB1c2goc3RyaWN0TG9va3VwKHRoaXMub3B0aW9u
cy5zdHJpY3QgJiYgc3RyaWN0LCB0aGlzLCBwYXJ0cywgdHlwZSkpOworICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBsZW4gPSBwYXJ0cy5sZW5ndGg7CisgICAgICAg
IGZvciAoOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1s
b29wLWZ1bmMgKi8KKyAgICAgICAgICB0aGlzLnJlcGxhY2VTdGFjayhmdW5jdGlvbiAoY3VycmVu
dCkgeworICAgICAgICAgICAgdmFyIGxvb2t1cCA9IF90aGlzLm5hbWVMb29rdXAoY3VycmVudCwg
cGFydHNbaV0sIHR5cGUpOworICAgICAgICAgICAgLy8gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCB6
ZXJvIGFuZCBmYWxzZSBhcmUgaGFuZGxlZCBwcm9wZXJseSBpZiB0aGUgY29udGV4dCAoZmFsc3kg
ZmxhZykKKyAgICAgICAgICAgIC8vIG5lZWRzIHRvIGhhdmUgdGhlIHNwZWNpYWwgaGFuZGxpbmcg
Zm9yIHRoZXNlIHZhbHVlcy4KKyAgICAgICAgICAgIGlmICghZmFsc3kpIHsKKyAgICAgICAgICAg
ICAgcmV0dXJuIFsnICE9IG51bGwgPyAnLCBsb29rdXAsICcgOiAnLCBjdXJyZW50XTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSB3ZSBjYW4gdXNlIGdl
bmVyaWMgZmFsc3kgaGFuZGxpbmcKKyAgICAgICAgICAgICAgcmV0dXJuIFsnICYmICcsIGxvb2t1
cF07CisgICAgICAgICAgICB9CisgICAgICAgICAgfSk7CisgICAgICAgICAgLyogZXNsaW50LWVu
YWJsZSBuby1sb29wLWZ1bmMgKi8KKyAgICAgICAgfQorICAgICAgfSwKKworICAgICAgLy8gW3Jl
c29sdmVQb3NzaWJsZUxhbWJkYV0KKyAgICAgIC8vCisgICAgICAvLyBPbiBzdGFjaywgYmVmb3Jl
OiB2YWx1ZSwgLi4uCisgICAgICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHJlc29sdmVkIHZhbHVlLCAu
Li4KKyAgICAgIC8vCisgICAgICAvLyBJZiB0aGUgYHZhbHVlYCBpcyBhIGxhbWJkYSwgcmVwbGFj
ZSBpdCBvbiB0aGUgc3RhY2sgYnkKKyAgICAgIC8vIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGxh
bWJkYQorICAgICAgcmVzb2x2ZVBvc3NpYmxlTGFtYmRhOiBmdW5jdGlvbiByZXNvbHZlUG9zc2li
bGVMYW1iZGEoKSB7CisgICAgICAgIHRoaXMucHVzaChbdGhpcy5hbGlhc2FibGUoJ2NvbnRhaW5l
ci5sYW1iZGEnKSwgJygnLCB0aGlzLnBvcFN0YWNrKCksICcsICcsIHRoaXMuY29udGV4dE5hbWUo
MCksICcpJ10pOworICAgICAgfSwKKworICAgICAgLy8gW3B1c2hTdHJpbmdQYXJhbV0KKyAgICAg
IC8vCisgICAgICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi4KKyAgICAgIC8vIE9uIHN0YWNrLCBh
ZnRlcjogc3RyaW5nLCBjdXJyZW50Q29udGV4dCwgLi4uCisgICAgICAvLworICAgICAgLy8gVGhp
cyBvcGNvZGUgaXMgZGVzaWduZWQgZm9yIHVzZSBpbiBzdHJpbmcgbW9kZSwgd2hpY2gKKyAgICAg
IC8vIHByb3ZpZGVzIHRoZSBzdHJpbmcgdmFsdWUgb2YgYSBwYXJhbWV0ZXIgYWxvbmcgd2l0aCBp
dHMKKyAgICAgIC8vIGRlcHRoIHJhdGhlciB0aGFuIHJlc29sdmluZyBpdCBpbW1lZGlhdGVseS4K
KyAgICAgIHB1c2hTdHJpbmdQYXJhbTogZnVuY3Rpb24gcHVzaFN0cmluZ1BhcmFtKHN0cmluZywg
dHlwZSkgeworICAgICAgICB0aGlzLnB1c2hDb250ZXh0KCk7CisgICAgICAgIHRoaXMucHVzaFN0
cmluZyh0eXBlKTsKKworICAgICAgICAvLyBJZiBpdCdzIGEgc3ViZXhwcmVzc2lvbiwgdGhlIHN0
cmluZyByZXN1bHQKKyAgICAgICAgLy8gd2lsbCBiZSBwdXNoZWQgYWZ0ZXIgdGhpcyBvcGNvZGUu
CisgICAgICAgIGlmICh0eXBlICE9PSAnU3ViRXhwcmVzc2lvbicpIHsKKyAgICAgICAgICBpZiAo
dHlwZW9mIHN0cmluZyA9PT0gJ3N0cmluZycpIHsKKyAgICAgICAgICAgIHRoaXMucHVzaFN0cmlu
ZyhzdHJpbmcpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLnB1c2hTdGFj
a0xpdGVyYWwoc3RyaW5nKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0sCisKKyAg
ICAgIGVtcHR5SGFzaDogZnVuY3Rpb24gZW1wdHlIYXNoKG9taXRFbXB0eSkgeworICAgICAgICBp
ZiAodGhpcy50cmFja0lkcykgeworICAgICAgICAgIHRoaXMucHVzaCgne30nKTsgLy8gaGFzaElk
cworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLnN0cmluZ1BhcmFtcykgeworICAgICAgICAg
IHRoaXMucHVzaCgne30nKTsgLy8gaGFzaENvbnRleHRzCisgICAgICAgICAgdGhpcy5wdXNoKCd7
fScpOyAvLyBoYXNoVHlwZXMKKyAgICAgICAgfQorICAgICAgICB0aGlzLnB1c2hTdGFja0xpdGVy
YWwob21pdEVtcHR5ID8gJ3VuZGVmaW5lZCcgOiAne30nKTsKKyAgICAgIH0sCisgICAgICBwdXNo
SGFzaDogZnVuY3Rpb24gcHVzaEhhc2goKSB7CisgICAgICAgIGlmICh0aGlzLmhhc2gpIHsKKyAg
ICAgICAgICB0aGlzLmhhc2hlcy5wdXNoKHRoaXMuaGFzaCk7CisgICAgICAgIH0KKyAgICAgICAg
dGhpcy5oYXNoID0geyB2YWx1ZXM6IFtdLCB0eXBlczogW10sIGNvbnRleHRzOiBbXSwgaWRzOiBb
XSB9OworICAgICAgfSwKKyAgICAgIHBvcEhhc2g6IGZ1bmN0aW9uIHBvcEhhc2goKSB7CisgICAg
ICAgIHZhciBoYXNoID0gdGhpcy5oYXNoOworICAgICAgICB0aGlzLmhhc2ggPSB0aGlzLmhhc2hl
cy5wb3AoKTsKKworICAgICAgICBpZiAodGhpcy50cmFja0lkcykgeworICAgICAgICAgIHRoaXMu
cHVzaCh0aGlzLm9iamVjdExpdGVyYWwoaGFzaC5pZHMpKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAodGhpcy5zdHJpbmdQYXJhbXMpIHsKKyAgICAgICAgICB0aGlzLnB1c2godGhpcy5vYmplY3RM
aXRlcmFsKGhhc2guY29udGV4dHMpKTsKKyAgICAgICAgICB0aGlzLnB1c2godGhpcy5vYmplY3RM
aXRlcmFsKGhhc2gudHlwZXMpKTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMucHVzaCh0aGlz
Lm9iamVjdExpdGVyYWwoaGFzaC52YWx1ZXMpKTsKKyAgICAgIH0sCisKKyAgICAgIC8vIFtwdXNo
U3RyaW5nXQorICAgICAgLy8KKyAgICAgIC8vIE9uIHN0YWNrLCBiZWZvcmU6IC4uLgorICAgICAg
Ly8gT24gc3RhY2ssIGFmdGVyOiBxdW90ZWRTdHJpbmcoc3RyaW5nKSwgLi4uCisgICAgICAvLwor
ICAgICAgLy8gUHVzaCBhIHF1b3RlZCB2ZXJzaW9uIG9mIGBzdHJpbmdgIG9udG8gdGhlIHN0YWNr
CisgICAgICBwdXNoU3RyaW5nOiBmdW5jdGlvbiBwdXNoU3RyaW5nKHN0cmluZykgeworICAgICAg
ICB0aGlzLnB1c2hTdGFja0xpdGVyYWwodGhpcy5xdW90ZWRTdHJpbmcoc3RyaW5nKSk7CisgICAg
ICB9LAorCisgICAgICAvLyBbcHVzaExpdGVyYWxdCisgICAgICAvLworICAgICAgLy8gT24gc3Rh
Y2ssIGJlZm9yZTogLi4uCisgICAgICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHZhbHVlLCAuLi4KKyAg
ICAgIC8vCisgICAgICAvLyBQdXNoZXMgYSB2YWx1ZSBvbnRvIHRoZSBzdGFjay4gVGhpcyBvcGVy
YXRpb24gcHJldmVudHMKKyAgICAgIC8vIHRoZSBjb21waWxlciBmcm9tIGNyZWF0aW5nIGEgdGVt
cG9yYXJ5IHZhcmlhYmxlIHRvIGhvbGQKKyAgICAgIC8vIGl0LgorICAgICAgcHVzaExpdGVyYWw6
IGZ1bmN0aW9uIHB1c2hMaXRlcmFsKHZhbHVlKSB7CisgICAgICAgIHRoaXMucHVzaFN0YWNrTGl0
ZXJhbCh2YWx1ZSk7CisgICAgICB9LAorCisgICAgICAvLyBbcHVzaFByb2dyYW1dCisgICAgICAv
LworICAgICAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uCisgICAgICAvLyBPbiBzdGFjaywgYWZ0
ZXI6IHByb2dyYW0oZ3VpZCksIC4uLgorICAgICAgLy8KKyAgICAgIC8vIFB1c2ggYSBwcm9ncmFt
IGV4cHJlc3Npb24gb250byB0aGUgc3RhY2suIFRoaXMgdGFrZXMKKyAgICAgIC8vIGEgY29tcGls
ZS10aW1lIGd1aWQgYW5kIGNvbnZlcnRzIGl0IGludG8gYSBydW50aW1lLWFjY2Vzc2libGUKKyAg
ICAgIC8vIGV4cHJlc3Npb24uCisgICAgICBwdXNoUHJvZ3JhbTogZnVuY3Rpb24gcHVzaFByb2dy
YW0oZ3VpZCkgeworICAgICAgICBpZiAoZ3VpZCAhPSBudWxsKSB7CisgICAgICAgICAgdGhpcy5w
dXNoU3RhY2tMaXRlcmFsKHRoaXMucHJvZ3JhbUV4cHJlc3Npb24oZ3VpZCkpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbChudWxsKTsKKyAgICAgICAg
fQorICAgICAgfSwKKworICAgICAgLy8gW3JlZ2lzdGVyRGVjb3JhdG9yXQorICAgICAgLy8KKyAg
ICAgIC8vIE9uIHN0YWNrLCBiZWZvcmU6IGhhc2gsIHByb2dyYW0sIHBhcmFtcy4uLiwgLi4uCisg
ICAgICAvLyBPbiBzdGFjaywgYWZ0ZXI6IC4uLgorICAgICAgLy8KKyAgICAgIC8vIFBvcHMgb2Zm
IHRoZSBkZWNvcmF0b3IncyBwYXJhbWV0ZXJzLCBpbnZva2VzIHRoZSBkZWNvcmF0b3IsCisgICAg
ICAvLyBhbmQgaW5zZXJ0cyB0aGUgZGVjb3JhdG9yIGludG8gdGhlIGRlY29yYXRvcnMgbGlzdC4K
KyAgICAgIHJlZ2lzdGVyRGVjb3JhdG9yOiBmdW5jdGlvbiByZWdpc3RlckRlY29yYXRvcihwYXJh
bVNpemUsIG5hbWUpIHsKKyAgICAgICAgdmFyIGZvdW5kRGVjb3JhdG9yID0gdGhpcy5uYW1lTG9v
a3VwKCdkZWNvcmF0b3JzJywgbmFtZSwgJ2RlY29yYXRvcicpLAorICAgICAgICAgICAgb3B0aW9u
cyA9IHRoaXMuc2V0dXBIZWxwZXJBcmdzKG5hbWUsIHBhcmFtU2l6ZSk7CisKKyAgICAgICAgdGhp
cy5kZWNvcmF0b3JzLnB1c2goWydmbiA9ICcsIHRoaXMuZGVjb3JhdG9ycy5mdW5jdGlvbkNhbGwo
Zm91bmREZWNvcmF0b3IsICcnLCBbJ2ZuJywgJ3Byb3BzJywgJ2NvbnRhaW5lcicsIG9wdGlvbnNd
KSwgJyB8fCBmbjsnXSk7CisgICAgICB9LAorCisgICAgICAvLyBbaW52b2tlSGVscGVyXQorICAg
ICAgLy8KKyAgICAgIC8vIE9uIHN0YWNrLCBiZWZvcmU6IGhhc2gsIGludmVyc2UsIHByb2dyYW0s
IHBhcmFtcy4uLiwgLi4uCisgICAgICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHJlc3VsdCBvZiBoZWxw
ZXIgaW52b2NhdGlvbgorICAgICAgLy8KKyAgICAgIC8vIFBvcHMgb2ZmIHRoZSBoZWxwZXIncyBw
YXJhbWV0ZXJzLCBpbnZva2VzIHRoZSBoZWxwZXIsCisgICAgICAvLyBhbmQgcHVzaGVzIHRoZSBo
ZWxwZXIncyByZXR1cm4gdmFsdWUgb250byB0aGUgc3RhY2suCisgICAgICAvLworICAgICAgLy8g
SWYgdGhlIGhlbHBlciBpcyBub3QgZm91bmQsIGBoZWxwZXJNaXNzaW5nYCBpcyBjYWxsZWQuCisg
ICAgICBpbnZva2VIZWxwZXI6IGZ1bmN0aW9uIGludm9rZUhlbHBlcihwYXJhbVNpemUsIG5hbWUs
IGlzU2ltcGxlKSB7CisgICAgICAgIHZhciBub25IZWxwZXIgPSB0aGlzLnBvcFN0YWNrKCksCisg
ICAgICAgICAgICBoZWxwZXIgPSB0aGlzLnNldHVwSGVscGVyKHBhcmFtU2l6ZSwgbmFtZSksCisg
ICAgICAgICAgICBzaW1wbGUgPSBpc1NpbXBsZSA/IFtoZWxwZXIubmFtZSwgJyB8fCAnXSA6ICcn
OworCisgICAgICAgIHZhciBsb29rdXAgPSBbJygnXS5jb25jYXQoc2ltcGxlLCBub25IZWxwZXIp
OworICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5zdHJpY3QpIHsKKyAgICAgICAgICBsb29rdXAu
cHVzaCgnIHx8ICcsIHRoaXMuYWxpYXNhYmxlKCdoZWxwZXJzLmhlbHBlck1pc3NpbmcnKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgbG9va3VwLnB1c2goJyknKTsKKworICAgICAgICB0aGlzLnB1c2go
dGhpcy5zb3VyY2UuZnVuY3Rpb25DYWxsKGxvb2t1cCwgJ2NhbGwnLCBoZWxwZXIuY2FsbFBhcmFt
cykpOworICAgICAgfSwKKworICAgICAgLy8gW2ludm9rZUtub3duSGVscGVyXQorICAgICAgLy8K
KyAgICAgIC8vIE9uIHN0YWNrLCBiZWZvcmU6IGhhc2gsIGludmVyc2UsIHByb2dyYW0sIHBhcmFt
cy4uLiwgLi4uCisgICAgICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHJlc3VsdCBvZiBoZWxwZXIgaW52
b2NhdGlvbgorICAgICAgLy8KKyAgICAgIC8vIFRoaXMgb3BlcmF0aW9uIGlzIHVzZWQgd2hlbiB0
aGUgaGVscGVyIGlzIGtub3duIHRvIGV4aXN0LAorICAgICAgLy8gc28gYSBgaGVscGVyTWlzc2lu
Z2AgZmFsbGJhY2sgaXMgbm90IHJlcXVpcmVkLgorICAgICAgaW52b2tlS25vd25IZWxwZXI6IGZ1
bmN0aW9uIGludm9rZUtub3duSGVscGVyKHBhcmFtU2l6ZSwgbmFtZSkgeworICAgICAgICB2YXIg
aGVscGVyID0gdGhpcy5zZXR1cEhlbHBlcihwYXJhbVNpemUsIG5hbWUpOworICAgICAgICB0aGlz
LnB1c2godGhpcy5zb3VyY2UuZnVuY3Rpb25DYWxsKGhlbHBlci5uYW1lLCAnY2FsbCcsIGhlbHBl
ci5jYWxsUGFyYW1zKSk7CisgICAgICB9LAorCisgICAgICAvLyBbaW52b2tlQW1iaWd1b3VzXQor
ICAgICAgLy8KKyAgICAgIC8vIE9uIHN0YWNrLCBiZWZvcmU6IGhhc2gsIGludmVyc2UsIHByb2dy
YW0sIHBhcmFtcy4uLiwgLi4uCisgICAgICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHJlc3VsdCBvZiBk
aXNhbWJpZ3VhdGlvbgorICAgICAgLy8KKyAgICAgIC8vIFRoaXMgb3BlcmF0aW9uIGlzIHVzZWQg
d2hlbiBhbiBleHByZXNzaW9uIGxpa2UgYHt7Zm9vfX1gCisgICAgICAvLyBpcyBwcm92aWRlZCwg
YnV0IHdlIGRvbid0IGtub3cgYXQgY29tcGlsZS10aW1lIHdoZXRoZXIgaXQKKyAgICAgIC8vIGlz
IGEgaGVscGVyIG9yIGEgcGF0aC4KKyAgICAgIC8vCisgICAgICAvLyBUaGlzIG9wZXJhdGlvbiBl
bWl0cyBtb3JlIGNvZGUgdGhhbiB0aGUgb3RoZXIgb3B0aW9ucywKKyAgICAgIC8vIGFuZCBjYW4g
YmUgYXZvaWRlZCBieSBwYXNzaW5nIHRoZSBga25vd25IZWxwZXJzYCBhbmQKKyAgICAgIC8vIGBr
bm93bkhlbHBlcnNPbmx5YCBmbGFncyBhdCBjb21waWxlLXRpbWUuCisgICAgICBpbnZva2VBbWJp
Z3VvdXM6IGZ1bmN0aW9uIGludm9rZUFtYmlndW91cyhuYW1lLCBoZWxwZXJDYWxsKSB7CisgICAg
ICAgIHRoaXMudXNlUmVnaXN0ZXIoJ2hlbHBlcicpOworCisgICAgICAgIHZhciBub25IZWxwZXIg
PSB0aGlzLnBvcFN0YWNrKCk7CisKKyAgICAgICAgdGhpcy5lbXB0eUhhc2goKTsKKyAgICAgICAg
dmFyIGhlbHBlciA9IHRoaXMuc2V0dXBIZWxwZXIoMCwgbmFtZSwgaGVscGVyQ2FsbCk7CisKKyAg
ICAgICAgdmFyIGhlbHBlck5hbWUgPSB0aGlzLmxhc3RIZWxwZXIgPSB0aGlzLm5hbWVMb29rdXAo
J2hlbHBlcnMnLCBuYW1lLCAnaGVscGVyJyk7CisKKyAgICAgICAgdmFyIGxvb2t1cCA9IFsnKCcs
ICcoaGVscGVyID0gJywgaGVscGVyTmFtZSwgJyB8fCAnLCBub25IZWxwZXIsICcpJ107CisgICAg
ICAgIGlmICghdGhpcy5vcHRpb25zLnN0cmljdCkgeworICAgICAgICAgIGxvb2t1cFswXSA9ICco
aGVscGVyID0gJzsKKyAgICAgICAgICBsb29rdXAucHVzaCgnICE9IG51bGwgPyBoZWxwZXIgOiAn
LCB0aGlzLmFsaWFzYWJsZSgnaGVscGVycy5oZWxwZXJNaXNzaW5nJykpOworICAgICAgICB9CisK
KyAgICAgICAgdGhpcy5wdXNoKFsnKCcsIGxvb2t1cCwgaGVscGVyLnBhcmFtc0luaXQgPyBbJyks
KCcsIGhlbHBlci5wYXJhbXNJbml0XSA6IFtdLCAnKSwnLCAnKHR5cGVvZiBoZWxwZXIgPT09ICcs
IHRoaXMuYWxpYXNhYmxlKCciZnVuY3Rpb24iJyksICcgPyAnLCB0aGlzLnNvdXJjZS5mdW5jdGlv
bkNhbGwoJ2hlbHBlcicsICdjYWxsJywgaGVscGVyLmNhbGxQYXJhbXMpLCAnIDogaGVscGVyKSkn
XSk7CisgICAgICB9LAorCisgICAgICAvLyBbaW52b2tlUGFydGlhbF0KKyAgICAgIC8vCisgICAg
ICAvLyBPbiBzdGFjaywgYmVmb3JlOiBjb250ZXh0LCAuLi4KKyAgICAgIC8vIE9uIHN0YWNrIGFm
dGVyOiByZXN1bHQgb2YgcGFydGlhbCBpbnZvY2F0aW9uCisgICAgICAvLworICAgICAgLy8gVGhp
cyBvcGVyYXRpb24gcG9wcyBvZmYgYSBjb250ZXh0LCBpbnZva2VzIGEgcGFydGlhbCB3aXRoIHRo
YXQgY29udGV4dCwKKyAgICAgIC8vIGFuZCBwdXNoZXMgdGhlIHJlc3VsdCBvZiB0aGUgaW52b2Nh
dGlvbiBiYWNrLgorICAgICAgaW52b2tlUGFydGlhbDogZnVuY3Rpb24gaW52b2tlUGFydGlhbChp
c0R5bmFtaWMsIG5hbWUsIGluZGVudCkgeworICAgICAgICB2YXIgcGFyYW1zID0gW10sCisgICAg
ICAgICAgICBvcHRpb25zID0gdGhpcy5zZXR1cFBhcmFtcyhuYW1lLCAxLCBwYXJhbXMpOworCisg
ICAgICAgIGlmIChpc0R5bmFtaWMpIHsKKyAgICAgICAgICBuYW1lID0gdGhpcy5wb3BTdGFjaygp
OworICAgICAgICAgIGRlbGV0ZSBvcHRpb25zLm5hbWU7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoaW5kZW50KSB7CisgICAgICAgICAgb3B0aW9ucy5pbmRlbnQgPSBKU09OLnN0cmluZ2lmeShp
bmRlbnQpOworICAgICAgICB9CisgICAgICAgIG9wdGlvbnMuaGVscGVycyA9ICdoZWxwZXJzJzsK
KyAgICAgICAgb3B0aW9ucy5wYXJ0aWFscyA9ICdwYXJ0aWFscyc7CisgICAgICAgIG9wdGlvbnMu
ZGVjb3JhdG9ycyA9ICdjb250YWluZXIuZGVjb3JhdG9ycyc7CisKKyAgICAgICAgaWYgKCFpc0R5
bmFtaWMpIHsKKyAgICAgICAgICBwYXJhbXMudW5zaGlmdCh0aGlzLm5hbWVMb29rdXAoJ3BhcnRp
YWxzJywgbmFtZSwgJ3BhcnRpYWwnKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcGFy
YW1zLnVuc2hpZnQobmFtZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAodGhpcy5vcHRpb25z
LmNvbXBhdCkgeworICAgICAgICAgIG9wdGlvbnMuZGVwdGhzID0gJ2RlcHRocyc7CisgICAgICAg
IH0KKyAgICAgICAgb3B0aW9ucyA9IHRoaXMub2JqZWN0TGl0ZXJhbChvcHRpb25zKTsKKyAgICAg
ICAgcGFyYW1zLnB1c2gob3B0aW9ucyk7CisKKyAgICAgICAgdGhpcy5wdXNoKHRoaXMuc291cmNl
LmZ1bmN0aW9uQ2FsbCgnY29udGFpbmVyLmludm9rZVBhcnRpYWwnLCAnJywgcGFyYW1zKSk7Cisg
ICAgICB9LAorCisgICAgICAvLyBbYXNzaWduVG9IYXNoXQorICAgICAgLy8KKyAgICAgIC8vIE9u
IHN0YWNrLCBiZWZvcmU6IHZhbHVlLCAuLi4sIGhhc2gsIC4uLgorICAgICAgLy8gT24gc3RhY2ss
IGFmdGVyOiAuLi4sIGhhc2gsIC4uLgorICAgICAgLy8KKyAgICAgIC8vIFBvcHMgYSB2YWx1ZSBv
ZmYgdGhlIHN0YWNrIGFuZCBhc3NpZ25zIGl0IHRvIHRoZSBjdXJyZW50IGhhc2gKKyAgICAgIGFz
c2lnblRvSGFzaDogZnVuY3Rpb24gYXNzaWduVG9IYXNoKGtleSkgeworICAgICAgICB2YXIgdmFs
dWUgPSB0aGlzLnBvcFN0YWNrKCksCisgICAgICAgICAgICBjb250ZXh0ID0gdW5kZWZpbmVkLAor
ICAgICAgICAgICAgdHlwZSA9IHVuZGVmaW5lZCwKKyAgICAgICAgICAgIGlkID0gdW5kZWZpbmVk
OworCisgICAgICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7CisgICAgICAgICAgaWQgPSB0aGlzLnBv
cFN0YWNrKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7Cisg
ICAgICAgICAgdHlwZSA9IHRoaXMucG9wU3RhY2soKTsKKyAgICAgICAgICBjb250ZXh0ID0gdGhp
cy5wb3BTdGFjaygpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGhhc2ggPSB0aGlzLmhhc2g7
CisgICAgICAgIGlmIChjb250ZXh0KSB7CisgICAgICAgICAgaGFzaC5jb250ZXh0c1trZXldID0g
Y29udGV4dDsKKyAgICAgICAgfQorICAgICAgICBpZiAodHlwZSkgeworICAgICAgICAgIGhhc2gu
dHlwZXNba2V5XSA9IHR5cGU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlkKSB7CisgICAgICAg
ICAgaGFzaC5pZHNba2V5XSA9IGlkOworICAgICAgICB9CisgICAgICAgIGhhc2gudmFsdWVzW2tl
eV0gPSB2YWx1ZTsKKyAgICAgIH0sCisKKyAgICAgIHB1c2hJZDogZnVuY3Rpb24gcHVzaElkKHR5
cGUsIG5hbWUsIGNoaWxkKSB7CisgICAgICAgIGlmICh0eXBlID09PSAnQmxvY2tQYXJhbScpIHsK
KyAgICAgICAgICB0aGlzLnB1c2hTdGFja0xpdGVyYWwoJ2Jsb2NrUGFyYW1zWycgKyBuYW1lWzBd
ICsgJ10ucGF0aFsnICsgbmFtZVsxXSArICddJyArIChjaGlsZCA/ICcgKyAnICsgSlNPTi5zdHJp
bmdpZnkoJy4nICsgY2hpbGQpIDogJycpKTsKKyAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAn
UGF0aEV4cHJlc3Npb24nKSB7CisgICAgICAgICAgdGhpcy5wdXNoU3RyaW5nKG5hbWUpOworICAg
ICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdTdWJFeHByZXNzaW9uJykgeworICAgICAgICAgIHRo
aXMucHVzaFN0YWNrTGl0ZXJhbCgndHJ1ZScpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
IHRoaXMucHVzaFN0YWNrTGl0ZXJhbCgnbnVsbCcpOworICAgICAgICB9CisgICAgICB9LAorCisg
ICAgICAvLyBIRUxQRVJTCisKKyAgICAgIGNvbXBpbGVyOiBKYXZhU2NyaXB0Q29tcGlsZXIsCisK
KyAgICAgIGNvbXBpbGVDaGlsZHJlbjogZnVuY3Rpb24gY29tcGlsZUNoaWxkcmVuKGVudmlyb25t
ZW50LCBvcHRpb25zKSB7CisgICAgICAgIHZhciBjaGlsZHJlbiA9IGVudmlyb25tZW50LmNoaWxk
cmVuLAorICAgICAgICAgICAgY2hpbGQgPSB1bmRlZmluZWQsCisgICAgICAgICAgICBjb21waWxl
ciA9IHVuZGVmaW5lZDsKKworICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGNoaWxkcmVuLmxl
bmd0aDsgaSA8IGw7IGkrKykgeworICAgICAgICAgIGNoaWxkID0gY2hpbGRyZW5baV07CisgICAg
ICAgICAgY29tcGlsZXIgPSBuZXcgdGhpcy5jb21waWxlcigpOyAvLyBlc2xpbnQtZGlzYWJsZS1s
aW5lIG5ldy1jYXAKKworICAgICAgICAgIHZhciBleGlzdGluZyA9IHRoaXMubWF0Y2hFeGlzdGlu
Z1Byb2dyYW0oY2hpbGQpOworCisgICAgICAgICAgaWYgKGV4aXN0aW5nID09IG51bGwpIHsKKyAg
ICAgICAgICAgIHRoaXMuY29udGV4dC5wcm9ncmFtcy5wdXNoKCcnKTsgLy8gUGxhY2Vob2xkZXIg
dG8gcHJldmVudCBuYW1lIGNvbmZsaWN0cyBmb3IgbmVzdGVkIGNoaWxkcmVuCisgICAgICAgICAg
ICB2YXIgaW5kZXggPSB0aGlzLmNvbnRleHQucHJvZ3JhbXMubGVuZ3RoOworICAgICAgICAgICAg
Y2hpbGQuaW5kZXggPSBpbmRleDsKKyAgICAgICAgICAgIGNoaWxkLm5hbWUgPSAncHJvZ3JhbScg
KyBpbmRleDsKKyAgICAgICAgICAgIHRoaXMuY29udGV4dC5wcm9ncmFtc1tpbmRleF0gPSBjb21w
aWxlci5jb21waWxlKGNoaWxkLCBvcHRpb25zLCB0aGlzLmNvbnRleHQsICF0aGlzLnByZWNvbXBp
bGUpOworICAgICAgICAgICAgdGhpcy5jb250ZXh0LmRlY29yYXRvcnNbaW5kZXhdID0gY29tcGls
ZXIuZGVjb3JhdG9yczsKKyAgICAgICAgICAgIHRoaXMuY29udGV4dC5lbnZpcm9ubWVudHNbaW5k
ZXhdID0gY2hpbGQ7CisKKyAgICAgICAgICAgIHRoaXMudXNlRGVwdGhzID0gdGhpcy51c2VEZXB0
aHMgfHwgY29tcGlsZXIudXNlRGVwdGhzOworICAgICAgICAgICAgdGhpcy51c2VCbG9ja1BhcmFt
cyA9IHRoaXMudXNlQmxvY2tQYXJhbXMgfHwgY29tcGlsZXIudXNlQmxvY2tQYXJhbXM7CisgICAg
ICAgICAgICBjaGlsZC51c2VEZXB0aHMgPSB0aGlzLnVzZURlcHRoczsKKyAgICAgICAgICAgIGNo
aWxkLnVzZUJsb2NrUGFyYW1zID0gdGhpcy51c2VCbG9ja1BhcmFtczsKKyAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgY2hpbGQuaW5kZXggPSBleGlzdGluZy5pbmRleDsKKyAgICAgICAg
ICAgIGNoaWxkLm5hbWUgPSAncHJvZ3JhbScgKyBleGlzdGluZy5pbmRleDsKKworICAgICAgICAg
ICAgdGhpcy51c2VEZXB0aHMgPSB0aGlzLnVzZURlcHRocyB8fCBleGlzdGluZy51c2VEZXB0aHM7
CisgICAgICAgICAgICB0aGlzLnVzZUJsb2NrUGFyYW1zID0gdGhpcy51c2VCbG9ja1BhcmFtcyB8
fCBleGlzdGluZy51c2VCbG9ja1BhcmFtczsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
IH0sCisgICAgICBtYXRjaEV4aXN0aW5nUHJvZ3JhbTogZnVuY3Rpb24gbWF0Y2hFeGlzdGluZ1By
b2dyYW0oY2hpbGQpIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRoaXMuY29udGV4
dC5lbnZpcm9ubWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgICB2YXIgZW52
aXJvbm1lbnQgPSB0aGlzLmNvbnRleHQuZW52aXJvbm1lbnRzW2ldOworICAgICAgICAgIGlmIChl
bnZpcm9ubWVudCAmJiBlbnZpcm9ubWVudC5lcXVhbHMoY2hpbGQpKSB7CisgICAgICAgICAgICBy
ZXR1cm4gZW52aXJvbm1lbnQ7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9LAorCisg
ICAgICBwcm9ncmFtRXhwcmVzc2lvbjogZnVuY3Rpb24gcHJvZ3JhbUV4cHJlc3Npb24oZ3VpZCkg
eworICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLmVudmlyb25tZW50LmNoaWxkcmVuW2d1aWRdLAor
ICAgICAgICAgICAgcHJvZ3JhbVBhcmFtcyA9IFtjaGlsZC5pbmRleCwgJ2RhdGEnLCBjaGlsZC5i
bG9ja1BhcmFtc107CisKKyAgICAgICAgaWYgKHRoaXMudXNlQmxvY2tQYXJhbXMgfHwgdGhpcy51
c2VEZXB0aHMpIHsKKyAgICAgICAgICBwcm9ncmFtUGFyYW1zLnB1c2goJ2Jsb2NrUGFyYW1zJyk7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMudXNlRGVwdGhzKSB7CisgICAgICAgICAgcHJv
Z3JhbVBhcmFtcy5wdXNoKCdkZXB0aHMnKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAn
Y29udGFpbmVyLnByb2dyYW0oJyArIHByb2dyYW1QYXJhbXMuam9pbignLCAnKSArICcpJzsKKyAg
ICAgIH0sCisKKyAgICAgIHVzZVJlZ2lzdGVyOiBmdW5jdGlvbiB1c2VSZWdpc3RlcihuYW1lKSB7
CisgICAgICAgIGlmICghdGhpcy5yZWdpc3RlcnNbbmFtZV0pIHsKKyAgICAgICAgICB0aGlzLnJl
Z2lzdGVyc1tuYW1lXSA9IHRydWU7CisgICAgICAgICAgdGhpcy5yZWdpc3RlcnMubGlzdC5wdXNo
KG5hbWUpOworICAgICAgICB9CisgICAgICB9LAorCisgICAgICBwdXNoOiBmdW5jdGlvbiBwdXNo
KGV4cHIpIHsKKyAgICAgICAgaWYgKCEoZXhwciBpbnN0YW5jZW9mIExpdGVyYWwpKSB7CisgICAg
ICAgICAgZXhwciA9IHRoaXMuc291cmNlLndyYXAoZXhwcik7CisgICAgICAgIH0KKworICAgICAg
ICB0aGlzLmlubGluZVN0YWNrLnB1c2goZXhwcik7CisgICAgICAgIHJldHVybiBleHByOworICAg
ICAgfSwKKworICAgICAgcHVzaFN0YWNrTGl0ZXJhbDogZnVuY3Rpb24gcHVzaFN0YWNrTGl0ZXJh
bChpdGVtKSB7CisgICAgICAgIHRoaXMucHVzaChuZXcgTGl0ZXJhbChpdGVtKSk7CisgICAgICB9
LAorCisgICAgICBwdXNoU291cmNlOiBmdW5jdGlvbiBwdXNoU291cmNlKHNvdXJjZSkgeworICAg
ICAgICBpZiAodGhpcy5wZW5kaW5nQ29udGVudCkgeworICAgICAgICAgIHRoaXMuc291cmNlLnB1
c2godGhpcy5hcHBlbmRUb0J1ZmZlcih0aGlzLnNvdXJjZS5xdW90ZWRTdHJpbmcodGhpcy5wZW5k
aW5nQ29udGVudCksIHRoaXMucGVuZGluZ0xvY2F0aW9uKSk7CisgICAgICAgICAgdGhpcy5wZW5k
aW5nQ29udGVudCA9IHVuZGVmaW5lZDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzb3VyY2Up
IHsKKyAgICAgICAgICB0aGlzLnNvdXJjZS5wdXNoKHNvdXJjZSk7CisgICAgICAgIH0KKyAgICAg
IH0sCisKKyAgICAgIHJlcGxhY2VTdGFjazogZnVuY3Rpb24gcmVwbGFjZVN0YWNrKGNhbGxiYWNr
KSB7CisgICAgICAgIHZhciBwcmVmaXggPSBbJygnXSwKKyAgICAgICAgICAgIHN0YWNrID0gdW5k
ZWZpbmVkLAorICAgICAgICAgICAgY3JlYXRlZFN0YWNrID0gdW5kZWZpbmVkLAorICAgICAgICAg
ICAgdXNlZExpdGVyYWwgPSB1bmRlZmluZWQ7CisKKyAgICAgICAgLyogaXN0YW5idWwgaWdub3Jl
IG5leHQgKi8KKyAgICAgICAgaWYgKCF0aGlzLmlzSW5saW5lKCkpIHsKKyAgICAgICAgICB0aHJv
dyBuZXcgX2V4Y2VwdGlvbjJbJ2RlZmF1bHQnXSgncmVwbGFjZVN0YWNrIG9uIG5vbi1pbmxpbmUn
KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFdlIHdhbnQgdG8gbWVyZ2UgdGhlIGlubGluZSBz
dGF0ZW1lbnQgaW50byB0aGUgcmVwbGFjZW1lbnQgc3RhdGVtZW50IHZpYSAnLCcKKyAgICAgICAg
dmFyIHRvcCA9IHRoaXMucG9wU3RhY2sodHJ1ZSk7CisKKyAgICAgICAgaWYgKHRvcCBpbnN0YW5j
ZW9mIExpdGVyYWwpIHsKKyAgICAgICAgICAvLyBMaXRlcmFscyBkbyBub3QgbmVlZCB0byBiZSBp
bmxpbmVkCisgICAgICAgICAgc3RhY2sgPSBbdG9wLnZhbHVlXTsKKyAgICAgICAgICBwcmVmaXgg
PSBbJygnLCBzdGFja107CisgICAgICAgICAgdXNlZExpdGVyYWwgPSB0cnVlOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgIC8vIEdldCBvciBjcmVhdGUgdGhlIGN1cnJlbnQgc3RhY2sgbmFt
ZSBmb3IgdXNlIGJ5IHRoZSBpbmxpbmUKKyAgICAgICAgICBjcmVhdGVkU3RhY2sgPSB0cnVlOwor
ICAgICAgICAgIHZhciBfbmFtZSA9IHRoaXMuaW5jclN0YWNrKCk7CisKKyAgICAgICAgICBwcmVm
aXggPSBbJygoJywgdGhpcy5wdXNoKF9uYW1lKSwgJyA9ICcsIHRvcCwgJyknXTsKKyAgICAgICAg
ICBzdGFjayA9IHRoaXMudG9wU3RhY2soKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBpdGVt
ID0gY2FsbGJhY2suY2FsbCh0aGlzLCBzdGFjayk7CisKKyAgICAgICAgaWYgKCF1c2VkTGl0ZXJh
bCkgeworICAgICAgICAgIHRoaXMucG9wU3RhY2soKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
Y3JlYXRlZFN0YWNrKSB7CisgICAgICAgICAgdGhpcy5zdGFja1Nsb3QtLTsKKyAgICAgICAgfQor
ICAgICAgICB0aGlzLnB1c2gocHJlZml4LmNvbmNhdChpdGVtLCAnKScpKTsKKyAgICAgIH0sCisK
KyAgICAgIGluY3JTdGFjazogZnVuY3Rpb24gaW5jclN0YWNrKCkgeworICAgICAgICB0aGlzLnN0
YWNrU2xvdCsrOworICAgICAgICBpZiAodGhpcy5zdGFja1Nsb3QgPiB0aGlzLnN0YWNrVmFycy5s
ZW5ndGgpIHsKKyAgICAgICAgICB0aGlzLnN0YWNrVmFycy5wdXNoKCdzdGFjaycgKyB0aGlzLnN0
YWNrU2xvdCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMudG9wU3RhY2tOYW1lKCk7
CisgICAgICB9LAorICAgICAgdG9wU3RhY2tOYW1lOiBmdW5jdGlvbiB0b3BTdGFja05hbWUoKSB7
CisgICAgICAgIHJldHVybiAnc3RhY2snICsgdGhpcy5zdGFja1Nsb3Q7CisgICAgICB9LAorICAg
ICAgZmx1c2hJbmxpbmU6IGZ1bmN0aW9uIGZsdXNoSW5saW5lKCkgeworICAgICAgICB2YXIgaW5s
aW5lU3RhY2sgPSB0aGlzLmlubGluZVN0YWNrOworICAgICAgICB0aGlzLmlubGluZVN0YWNrID0g
W107CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBpbmxpbmVTdGFjay5sZW5ndGg7IGkg
PCBsZW47IGkrKykgeworICAgICAgICAgIHZhciBlbnRyeSA9IGlubGluZVN0YWNrW2ldOworICAg
ICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqLworICAgICAgICAgIGlmIChlbnRyeSBpbnN0
YW5jZW9mIExpdGVyYWwpIHsKKyAgICAgICAgICAgIHRoaXMuY29tcGlsZVN0YWNrLnB1c2goZW50
cnkpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgc3RhY2sgPSB0aGlzLmlu
Y3JTdGFjaygpOworICAgICAgICAgICAgdGhpcy5wdXNoU291cmNlKFtzdGFjaywgJyA9ICcsIGVu
dHJ5LCAnOyddKTsKKyAgICAgICAgICAgIHRoaXMuY29tcGlsZVN0YWNrLnB1c2goc3RhY2spOwor
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSwKKyAgICAgIGlzSW5saW5lOiBmdW5jdGlv
biBpc0lubGluZSgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuaW5saW5lU3RhY2subGVuZ3RoOwor
ICAgICAgfSwKKworICAgICAgcG9wU3RhY2s6IGZ1bmN0aW9uIHBvcFN0YWNrKHdyYXBwZWQpIHsK
KyAgICAgICAgdmFyIGlubGluZSA9IHRoaXMuaXNJbmxpbmUoKSwKKyAgICAgICAgICAgIGl0ZW0g
PSAoaW5saW5lID8gdGhpcy5pbmxpbmVTdGFjayA6IHRoaXMuY29tcGlsZVN0YWNrKS5wb3AoKTsK
KworICAgICAgICBpZiAoIXdyYXBwZWQgJiYgaXRlbSBpbnN0YW5jZW9mIExpdGVyYWwpIHsKKyAg
ICAgICAgICByZXR1cm4gaXRlbS52YWx1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBp
ZiAoIWlubGluZSkgeworICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8KKyAg
ICAgICAgICAgIGlmICghdGhpcy5zdGFja1Nsb3QpIHsKKyAgICAgICAgICAgICAgdGhyb3cgbmV3
IF9leGNlcHRpb24yWydkZWZhdWx0J10oJ0ludmFsaWQgc3RhY2sgcG9wJyk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB0aGlzLnN0YWNrU2xvdC0tOworICAgICAgICAgIH0KKyAgICAgICAg
ICByZXR1cm4gaXRlbTsKKyAgICAgICAgfQorICAgICAgfSwKKworICAgICAgdG9wU3RhY2s6IGZ1
bmN0aW9uIHRvcFN0YWNrKCkgeworICAgICAgICB2YXIgc3RhY2sgPSB0aGlzLmlzSW5saW5lKCkg
PyB0aGlzLmlubGluZVN0YWNrIDogdGhpcy5jb21waWxlU3RhY2ssCisgICAgICAgICAgICBpdGVt
ID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07CisKKyAgICAgICAgLyogaXN0YW5idWwgaWdub3Jl
IGlmICovCisgICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgTGl0ZXJhbCkgeworICAgICAgICAg
IHJldHVybiBpdGVtLnZhbHVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHJldHVybiBp
dGVtOworICAgICAgICB9CisgICAgICB9LAorCisgICAgICBjb250ZXh0TmFtZTogZnVuY3Rpb24g
Y29udGV4dE5hbWUoY29udGV4dCkgeworICAgICAgICBpZiAodGhpcy51c2VEZXB0aHMgJiYgY29u
dGV4dCkgeworICAgICAgICAgIHJldHVybiAnZGVwdGhzWycgKyBjb250ZXh0ICsgJ10nOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgIHJldHVybiAnZGVwdGgnICsgY29udGV4dDsKKyAgICAg
ICAgfQorICAgICAgfSwKKworICAgICAgcXVvdGVkU3RyaW5nOiBmdW5jdGlvbiBxdW90ZWRTdHJp
bmcoc3RyKSB7CisgICAgICAgIHJldHVybiB0aGlzLnNvdXJjZS5xdW90ZWRTdHJpbmcoc3RyKTsK
KyAgICAgIH0sCisKKyAgICAgIG9iamVjdExpdGVyYWw6IGZ1bmN0aW9uIG9iamVjdExpdGVyYWwo
b2JqKSB7CisgICAgICAgIHJldHVybiB0aGlzLnNvdXJjZS5vYmplY3RMaXRlcmFsKG9iaik7Cisg
ICAgICB9LAorCisgICAgICBhbGlhc2FibGU6IGZ1bmN0aW9uIGFsaWFzYWJsZShuYW1lKSB7Cisg
ICAgICAgIHZhciByZXQgPSB0aGlzLmFsaWFzZXNbbmFtZV07CisgICAgICAgIGlmIChyZXQpIHsK
KyAgICAgICAgICByZXQucmVmZXJlbmNlQ291bnQrKzsKKyAgICAgICAgICByZXR1cm4gcmV0Owor
ICAgICAgICB9CisKKyAgICAgICAgcmV0ID0gdGhpcy5hbGlhc2VzW25hbWVdID0gdGhpcy5zb3Vy
Y2Uud3JhcChuYW1lKTsKKyAgICAgICAgcmV0LmFsaWFzYWJsZSA9IHRydWU7CisgICAgICAgIHJl
dC5yZWZlcmVuY2VDb3VudCA9IDE7CisKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgIH0sCisK
KyAgICAgIHNldHVwSGVscGVyOiBmdW5jdGlvbiBzZXR1cEhlbHBlcihwYXJhbVNpemUsIG5hbWUs
IGJsb2NrSGVscGVyKSB7CisgICAgICAgIHZhciBwYXJhbXMgPSBbXSwKKyAgICAgICAgICAgIHBh
cmFtc0luaXQgPSB0aGlzLnNldHVwSGVscGVyQXJncyhuYW1lLCBwYXJhbVNpemUsIHBhcmFtcywg
YmxvY2tIZWxwZXIpOworICAgICAgICB2YXIgZm91bmRIZWxwZXIgPSB0aGlzLm5hbWVMb29rdXAo
J2hlbHBlcnMnLCBuYW1lLCAnaGVscGVyJyksCisgICAgICAgICAgICBjYWxsQ29udGV4dCA9IHRo
aXMuYWxpYXNhYmxlKHRoaXMuY29udGV4dE5hbWUoMCkgKyAnICE9IG51bGwgPyAnICsgdGhpcy5j
b250ZXh0TmFtZSgwKSArICcgOiB7fScpOworCisgICAgICAgIHJldHVybiB7CisgICAgICAgICAg
cGFyYW1zOiBwYXJhbXMsCisgICAgICAgICAgcGFyYW1zSW5pdDogcGFyYW1zSW5pdCwKKyAgICAg
ICAgICBuYW1lOiBmb3VuZEhlbHBlciwKKyAgICAgICAgICBjYWxsUGFyYW1zOiBbY2FsbENvbnRl
eHRdLmNvbmNhdChwYXJhbXMpCisgICAgICAgIH07CisgICAgICB9LAorCisgICAgICBzZXR1cFBh
cmFtczogZnVuY3Rpb24gc2V0dXBQYXJhbXMoaGVscGVyLCBwYXJhbVNpemUsIHBhcmFtcykgewor
ICAgICAgICB2YXIgb3B0aW9ucyA9IHt9LAorICAgICAgICAgICAgY29udGV4dHMgPSBbXSwKKyAg
ICAgICAgICAgIHR5cGVzID0gW10sCisgICAgICAgICAgICBpZHMgPSBbXSwKKyAgICAgICAgICAg
IG9iamVjdEFyZ3MgPSAhcGFyYW1zLAorICAgICAgICAgICAgcGFyYW0gPSB1bmRlZmluZWQ7CisK
KyAgICAgICAgaWYgKG9iamVjdEFyZ3MpIHsKKyAgICAgICAgICBwYXJhbXMgPSBbXTsKKyAgICAg
ICAgfQorCisgICAgICAgIG9wdGlvbnMubmFtZSA9IHRoaXMucXVvdGVkU3RyaW5nKGhlbHBlcik7
CisgICAgICAgIG9wdGlvbnMuaGFzaCA9IHRoaXMucG9wU3RhY2soKTsKKworICAgICAgICBpZiAo
dGhpcy50cmFja0lkcykgeworICAgICAgICAgIG9wdGlvbnMuaGFzaElkcyA9IHRoaXMucG9wU3Rh
Y2soKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5zdHJpbmdQYXJhbXMpIHsKKyAgICAg
ICAgICBvcHRpb25zLmhhc2hUeXBlcyA9IHRoaXMucG9wU3RhY2soKTsKKyAgICAgICAgICBvcHRp
b25zLmhhc2hDb250ZXh0cyA9IHRoaXMucG9wU3RhY2soKTsKKyAgICAgICAgfQorCisgICAgICAg
IHZhciBpbnZlcnNlID0gdGhpcy5wb3BTdGFjaygpLAorICAgICAgICAgICAgcHJvZ3JhbSA9IHRo
aXMucG9wU3RhY2soKTsKKworICAgICAgICAvLyBBdm9pZCBzZXR0aW5nIGZuIGFuZCBpbnZlcnNl
IGlmIG5laXRoZXIgYXJlIHNldC4gVGhpcyBhbGxvd3MKKyAgICAgICAgLy8gaGVscGVycyB0byBk
byBhIGNoZWNrIGZvciBgaWYgKG9wdGlvbnMuZm4pYAorICAgICAgICBpZiAocHJvZ3JhbSB8fCBp
bnZlcnNlKSB7CisgICAgICAgICAgb3B0aW9ucy5mbiA9IHByb2dyYW0gfHwgJ2NvbnRhaW5lci5u
b29wJzsKKyAgICAgICAgICBvcHRpb25zLmludmVyc2UgPSBpbnZlcnNlIHx8ICdjb250YWluZXIu
bm9vcCc7CisgICAgICAgIH0KKworICAgICAgICAvLyBUaGUgcGFyYW1ldGVycyBnbyBvbiB0byB0
aGUgc3RhY2sgaW4gb3JkZXIgKG1ha2luZyBzdXJlIHRoYXQgdGhleSBhcmUgZXZhbHVhdGVkIGlu
IG9yZGVyKQorICAgICAgICAvLyBzbyB3ZSBuZWVkIHRvIHBvcCB0aGVtIG9mZiB0aGUgc3RhY2sg
aW4gcmV2ZXJzZSBvcmRlcgorICAgICAgICB2YXIgaSA9IHBhcmFtU2l6ZTsKKyAgICAgICAgd2hp
bGUgKGktLSkgeworICAgICAgICAgIHBhcmFtID0gdGhpcy5wb3BTdGFjaygpOworICAgICAgICAg
IHBhcmFtc1tpXSA9IHBhcmFtOworCisgICAgICAgICAgaWYgKHRoaXMudHJhY2tJZHMpIHsKKyAg
ICAgICAgICAgIGlkc1tpXSA9IHRoaXMucG9wU3RhY2soKTsKKyAgICAgICAgICB9CisgICAgICAg
ICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7CisgICAgICAgICAgICB0eXBlc1tpXSA9IHRoaXMu
cG9wU3RhY2soKTsKKyAgICAgICAgICAgIGNvbnRleHRzW2ldID0gdGhpcy5wb3BTdGFjaygpOwor
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChvYmplY3RBcmdzKSB7CisgICAg
ICAgICAgb3B0aW9ucy5hcmdzID0gdGhpcy5zb3VyY2UuZ2VuZXJhdGVBcnJheShwYXJhbXMpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHRoaXMudHJhY2tJZHMpIHsKKyAgICAgICAgICBvcHRp
b25zLmlkcyA9IHRoaXMuc291cmNlLmdlbmVyYXRlQXJyYXkoaWRzKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAodGhpcy5zdHJpbmdQYXJhbXMpIHsKKyAgICAgICAgICBvcHRpb25zLnR5cGVzID0g
dGhpcy5zb3VyY2UuZ2VuZXJhdGVBcnJheSh0eXBlcyk7CisgICAgICAgICAgb3B0aW9ucy5jb250
ZXh0cyA9IHRoaXMuc291cmNlLmdlbmVyYXRlQXJyYXkoY29udGV4dHMpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5kYXRhKSB7CisgICAgICAgICAgb3B0aW9ucy5kYXRh
ID0gJ2RhdGEnOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLnVzZUJsb2NrUGFyYW1zKSB7
CisgICAgICAgICAgb3B0aW9ucy5ibG9ja1BhcmFtcyA9ICdibG9ja1BhcmFtcyc7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIG9wdGlvbnM7CisgICAgICB9LAorCisgICAgICBzZXR1cEhlbHBl
ckFyZ3M6IGZ1bmN0aW9uIHNldHVwSGVscGVyQXJncyhoZWxwZXIsIHBhcmFtU2l6ZSwgcGFyYW1z
LCB1c2VSZWdpc3RlcikgeworICAgICAgICB2YXIgb3B0aW9ucyA9IHRoaXMuc2V0dXBQYXJhbXMo
aGVscGVyLCBwYXJhbVNpemUsIHBhcmFtcyk7CisgICAgICAgIG9wdGlvbnMgPSB0aGlzLm9iamVj
dExpdGVyYWwob3B0aW9ucyk7CisgICAgICAgIGlmICh1c2VSZWdpc3RlcikgeworICAgICAgICAg
IHRoaXMudXNlUmVnaXN0ZXIoJ29wdGlvbnMnKTsKKyAgICAgICAgICBwYXJhbXMucHVzaCgnb3B0
aW9ucycpOworICAgICAgICAgIHJldHVybiBbJ29wdGlvbnM9Jywgb3B0aW9uc107CisgICAgICAg
IH0gZWxzZSBpZiAocGFyYW1zKSB7CisgICAgICAgICAgcGFyYW1zLnB1c2gob3B0aW9ucyk7Cisg
ICAgICAgICAgcmV0dXJuICcnOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHJldHVybiBv
cHRpb25zOworICAgICAgICB9CisgICAgICB9CisgICAgfTsKKworICAgIChmdW5jdGlvbiAoKSB7
CisgICAgICB2YXIgcmVzZXJ2ZWRXb3JkcyA9ICgnYnJlYWsgZWxzZSBuZXcgdmFyJyArICcgY2Fz
ZSBmaW5hbGx5IHJldHVybiB2b2lkJyArICcgY2F0Y2ggZm9yIHN3aXRjaCB3aGlsZScgKyAnIGNv
bnRpbnVlIGZ1bmN0aW9uIHRoaXMgd2l0aCcgKyAnIGRlZmF1bHQgaWYgdGhyb3cnICsgJyBkZWxl
dGUgaW4gdHJ5JyArICcgZG8gaW5zdGFuY2VvZiB0eXBlb2YnICsgJyBhYnN0cmFjdCBlbnVtIGlu
dCBzaG9ydCcgKyAnIGJvb2xlYW4gZXhwb3J0IGludGVyZmFjZSBzdGF0aWMnICsgJyBieXRlIGV4
dGVuZHMgbG9uZyBzdXBlcicgKyAnIGNoYXIgZmluYWwgbmF0aXZlIHN5bmNocm9uaXplZCcgKyAn
IGNsYXNzIGZsb2F0IHBhY2thZ2UgdGhyb3dzJyArICcgY29uc3QgZ290byBwcml2YXRlIHRyYW5z
aWVudCcgKyAnIGRlYnVnZ2VyIGltcGxlbWVudHMgcHJvdGVjdGVkIHZvbGF0aWxlJyArICcgZG91
YmxlIGltcG9ydCBwdWJsaWMgbGV0IHlpZWxkIGF3YWl0JyArICcgbnVsbCB0cnVlIGZhbHNlJyku
c3BsaXQoJyAnKTsKKworICAgICAgdmFyIGNvbXBpbGVyV29yZHMgPSBKYXZhU2NyaXB0Q29tcGls
ZXIuUkVTRVJWRURfV09SRFMgPSB7fTsKKworICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSByZXNl
cnZlZFdvcmRzLmxlbmd0aDsgaSA8IGw7IGkrKykgeworICAgICAgICBjb21waWxlcldvcmRzW3Jl
c2VydmVkV29yZHNbaV1dID0gdHJ1ZTsKKyAgICAgIH0KKyAgICB9KSgpOworCisgICAgSmF2YVNj
cmlwdENvbXBpbGVyLmlzVmFsaWRKYXZhU2NyaXB0VmFyaWFibGVOYW1lID0gZnVuY3Rpb24gKG5h
bWUpIHsKKyAgICAgIHJldHVybiAhSmF2YVNjcmlwdENvbXBpbGVyLlJFU0VSVkVEX1dPUkRTW25h
bWVdICYmIC9eW2EtekEtWl8kXVswLTlhLXpBLVpfJF0qJC8udGVzdChuYW1lKTsKKyAgICB9Owor
CisgICAgZnVuY3Rpb24gc3RyaWN0TG9va3VwKHJlcXVpcmVUZXJtaW5hbCwgY29tcGlsZXIsIHBh
cnRzLCB0eXBlKSB7CisgICAgICB2YXIgc3RhY2sgPSBjb21waWxlci5wb3BTdGFjaygpLAorICAg
ICAgICAgIGkgPSAwLAorICAgICAgICAgIGxlbiA9IHBhcnRzLmxlbmd0aDsKKyAgICAgIGlmIChy
ZXF1aXJlVGVybWluYWwpIHsKKyAgICAgICAgbGVuLS07CisgICAgICB9CisKKyAgICAgIGZvciAo
OyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgc3RhY2sgPSBjb21waWxlci5uYW1lTG9va3VwKHN0
YWNrLCBwYXJ0c1tpXSwgdHlwZSk7CisgICAgICB9CisKKyAgICAgIGlmIChyZXF1aXJlVGVybWlu
YWwpIHsKKyAgICAgICAgcmV0dXJuIFtjb21waWxlci5hbGlhc2FibGUoJ2NvbnRhaW5lci5zdHJp
Y3QnKSwgJygnLCBzdGFjaywgJywgJywgY29tcGlsZXIucXVvdGVkU3RyaW5nKHBhcnRzW2ldKSwg
JyknXTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBzdGFjazsKKyAgICAgIH0KKyAg
ICB9CisKKyAgICBleHBvcnRzWydkZWZhdWx0J10gPSBKYXZhU2NyaXB0Q29tcGlsZXI7CisgICAg
bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107CisKKy8qKiovIH0sCisvKiAzMiAq
LworLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7
CisKKyAgICAvKiBnbG9iYWwgZGVmaW5lICovCisgICAgJ3VzZSBzdHJpY3QnOworCisgICAgZXhw
b3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTsKKworICAgIHZhciBfdXRpbHMgPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKDUpOworCisgICAgdmFyIFNvdXJjZU5vZGUgPSB1bmRlZmluZWQ7CisKKyAgICB0cnkg
eworICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8KKyAgICAgIGlmIChmYWxzZSkgewor
ICAgICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IHRoaXMgaW4gQU1EIGVudmlyb25tZW50cy4gRm9y
IHRoZXNlIGVudmlyb25tZW50cywgd2UgYXN1c21lIHRoYXQKKyAgICAgICAgLy8gdGhleSBhcmUg
cnVubmluZyBvbiB0aGUgYnJvd3NlciBhbmQgdGh1cyBoYXZlIG5vIG5lZWQgZm9yIHRoZSBzb3Vy
Y2UtbWFwIGxpYnJhcnkuCisgICAgICAgIHZhciBTb3VyY2VNYXAgPSByZXF1aXJlKCdzb3VyY2Ut
bWFwJyk7CisgICAgICAgIFNvdXJjZU5vZGUgPSBTb3VyY2VNYXAuU291cmNlTm9kZTsKKyAgICAg
IH0KKyAgICB9IGNhdGNoIChlcnIpIHt9CisgICAgLyogTk9QICovCisKKyAgICAvKiBpc3RhbmJ1
bCBpZ25vcmUgaWY6IHRlc3RlZCBidXQgbm90IGNvdmVyZWQgaW4gaXN0YW5idWwgZHVlIHRvIGRp
c3QgYnVpbGQgICovCisgICAgaWYgKCFTb3VyY2VOb2RlKSB7CisgICAgICBTb3VyY2VOb2RlID0g
ZnVuY3Rpb24gKGxpbmUsIGNvbHVtbiwgc3JjRmlsZSwgY2h1bmtzKSB7CisgICAgICAgIHRoaXMu
c3JjID0gJyc7CisgICAgICAgIGlmIChjaHVua3MpIHsKKyAgICAgICAgICB0aGlzLmFkZChjaHVu
a3MpOworICAgICAgICB9CisgICAgICB9OworICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQg
Ki8KKyAgICAgIFNvdXJjZU5vZGUucHJvdG90eXBlID0geworICAgICAgICBhZGQ6IGZ1bmN0aW9u
IGFkZChjaHVua3MpIHsKKyAgICAgICAgICBpZiAoX3V0aWxzLmlzQXJyYXkoY2h1bmtzKSkgewor
ICAgICAgICAgICAgY2h1bmtzID0gY2h1bmtzLmpvaW4oJycpOworICAgICAgICAgIH0KKyAgICAg
ICAgICB0aGlzLnNyYyArPSBjaHVua3M7CisgICAgICAgIH0sCisgICAgICAgIHByZXBlbmQ6IGZ1
bmN0aW9uIHByZXBlbmQoY2h1bmtzKSB7CisgICAgICAgICAgaWYgKF91dGlscy5pc0FycmF5KGNo
dW5rcykpIHsKKyAgICAgICAgICAgIGNodW5rcyA9IGNodW5rcy5qb2luKCcnKTsKKyAgICAgICAg
ICB9CisgICAgICAgICAgdGhpcy5zcmMgPSBjaHVua3MgKyB0aGlzLnNyYzsKKyAgICAgICAgfSwK
KyAgICAgICAgdG9TdHJpbmdXaXRoU291cmNlTWFwOiBmdW5jdGlvbiB0b1N0cmluZ1dpdGhTb3Vy
Y2VNYXAoKSB7CisgICAgICAgICAgcmV0dXJuIHsgY29kZTogdGhpcy50b1N0cmluZygpIH07Cisg
ICAgICAgIH0sCisgICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbiB0b1N0cmluZygpIHsKKyAgICAg
ICAgICByZXR1cm4gdGhpcy5zcmM7CisgICAgICAgIH0KKyAgICAgIH07CisgICAgfQorCisgICAg
ZnVuY3Rpb24gY2FzdENodW5rKGNodW5rLCBjb2RlR2VuLCBsb2MpIHsKKyAgICAgIGlmIChfdXRp
bHMuaXNBcnJheShjaHVuaykpIHsKKyAgICAgICAgdmFyIHJldCA9IFtdOworCisgICAgICAgIGZv
ciAodmFyIGkgPSAwLCBsZW4gPSBjaHVuay5sZW5ndGg7IGkgPCBsZW47IGkrKykgeworICAgICAg
ICAgIHJldC5wdXNoKGNvZGVHZW4ud3JhcChjaHVua1tpXSwgbG9jKSk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHJldDsKKyAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNodW5rID09PSAnYm9v
bGVhbicgfHwgdHlwZW9mIGNodW5rID09PSAnbnVtYmVyJykgeworICAgICAgICAvLyBIYW5kbGUg
cHJpbWl0aXZlcyB0aGF0IHRoZSBTb3VyY2VOb2RlIHdpbGwgdGhyb3cgdXAgb24KKyAgICAgICAg
cmV0dXJuIGNodW5rICsgJyc7CisgICAgICB9CisgICAgICByZXR1cm4gY2h1bms7CisgICAgfQor
CisgICAgZnVuY3Rpb24gQ29kZUdlbihzcmNGaWxlKSB7CisgICAgICB0aGlzLnNyY0ZpbGUgPSBz
cmNGaWxlOworICAgICAgdGhpcy5zb3VyY2UgPSBbXTsKKyAgICB9CisKKyAgICBDb2RlR2VuLnBy
b3RvdHlwZSA9IHsKKyAgICAgIGlzRW1wdHk6IGZ1bmN0aW9uIGlzRW1wdHkoKSB7CisgICAgICAg
IHJldHVybiAhdGhpcy5zb3VyY2UubGVuZ3RoOworICAgICAgfSwKKyAgICAgIHByZXBlbmQ6IGZ1
bmN0aW9uIHByZXBlbmQoc291cmNlLCBsb2MpIHsKKyAgICAgICAgdGhpcy5zb3VyY2UudW5zaGlm
dCh0aGlzLndyYXAoc291cmNlLCBsb2MpKTsKKyAgICAgIH0sCisgICAgICBwdXNoOiBmdW5jdGlv
biBwdXNoKHNvdXJjZSwgbG9jKSB7CisgICAgICAgIHRoaXMuc291cmNlLnB1c2godGhpcy53cmFw
KHNvdXJjZSwgbG9jKSk7CisgICAgICB9LAorCisgICAgICBtZXJnZTogZnVuY3Rpb24gbWVyZ2Uo
KSB7CisgICAgICAgIHZhciBzb3VyY2UgPSB0aGlzLmVtcHR5KCk7CisgICAgICAgIHRoaXMuZWFj
aChmdW5jdGlvbiAobGluZSkgeworICAgICAgICAgIHNvdXJjZS5hZGQoWycgICcsIGxpbmUsICdc
biddKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBzb3VyY2U7CisgICAgICB9LAorCisg
ICAgICBlYWNoOiBmdW5jdGlvbiBlYWNoKGl0ZXIpIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDAs
IGxlbiA9IHRoaXMuc291cmNlLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgaXRl
cih0aGlzLnNvdXJjZVtpXSk7CisgICAgICAgIH0KKyAgICAgIH0sCisKKyAgICAgIGVtcHR5OiBm
dW5jdGlvbiBlbXB0eSgpIHsKKyAgICAgICAgdmFyIGxvYyA9IHRoaXMuY3VycmVudExvY2F0aW9u
IHx8IHsgc3RhcnQ6IHt9IH07CisgICAgICAgIHJldHVybiBuZXcgU291cmNlTm9kZShsb2Muc3Rh
cnQubGluZSwgbG9jLnN0YXJ0LmNvbHVtbiwgdGhpcy5zcmNGaWxlKTsKKyAgICAgIH0sCisgICAg
ICB3cmFwOiBmdW5jdGlvbiB3cmFwKGNodW5rKSB7CisgICAgICAgIHZhciBsb2MgPSBhcmd1bWVu
dHMubGVuZ3RoIDw9IDEgfHwgYXJndW1lbnRzWzFdID09PSB1bmRlZmluZWQgPyB0aGlzLmN1cnJl
bnRMb2NhdGlvbiB8fCB7IHN0YXJ0OiB7fSB9IDogYXJndW1lbnRzWzFdOworCisgICAgICAgIGlm
IChjaHVuayBpbnN0YW5jZW9mIFNvdXJjZU5vZGUpIHsKKyAgICAgICAgICByZXR1cm4gY2h1bms7
CisgICAgICAgIH0KKworICAgICAgICBjaHVuayA9IGNhc3RDaHVuayhjaHVuaywgdGhpcywgbG9j
KTsKKworICAgICAgICByZXR1cm4gbmV3IFNvdXJjZU5vZGUobG9jLnN0YXJ0LmxpbmUsIGxvYy5z
dGFydC5jb2x1bW4sIHRoaXMuc3JjRmlsZSwgY2h1bmspOworICAgICAgfSwKKworICAgICAgZnVu
Y3Rpb25DYWxsOiBmdW5jdGlvbiBmdW5jdGlvbkNhbGwoZm4sIHR5cGUsIHBhcmFtcykgeworICAg
ICAgICBwYXJhbXMgPSB0aGlzLmdlbmVyYXRlTGlzdChwYXJhbXMpOworICAgICAgICByZXR1cm4g
dGhpcy53cmFwKFtmbiwgdHlwZSA/ICcuJyArIHR5cGUgKyAnKCcgOiAnKCcsIHBhcmFtcywgJykn
XSk7CisgICAgICB9LAorCisgICAgICBxdW90ZWRTdHJpbmc6IGZ1bmN0aW9uIHF1b3RlZFN0cmlu
ZyhzdHIpIHsKKyAgICAgICAgcmV0dXJuICciJyArIChzdHIgKyAnJykucmVwbGFjZSgvXFwvZywg
J1xcXFwnKS5yZXBsYWNlKC8iL2csICdcXCInKS5yZXBsYWNlKC9cbi9nLCAnXFxuJykucmVwbGFj
ZSgvXHIvZywgJ1xccicpLnJlcGxhY2UoL1x1MjAyOC9nLCAnXFx1MjAyOCcpIC8vIFBlciBFY21h
LTI2MiA3LjMgKyA3LjguNAorICAgICAgICAucmVwbGFjZSgvXHUyMDI5L2csICdcXHUyMDI5Jykg
KyAnIic7CisgICAgICB9LAorCisgICAgICBvYmplY3RMaXRlcmFsOiBmdW5jdGlvbiBvYmplY3RM
aXRlcmFsKG9iaikgeworICAgICAgICB2YXIgcGFpcnMgPSBbXTsKKworICAgICAgICBmb3IgKHZh
ciBrZXkgaW4gb2JqKSB7CisgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7
CisgICAgICAgICAgICB2YXIgdmFsdWUgPSBjYXN0Q2h1bmsob2JqW2tleV0sIHRoaXMpOworICAg
ICAgICAgICAgaWYgKHZhbHVlICE9PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAgICBwYWly
cy5wdXNoKFt0aGlzLnF1b3RlZFN0cmluZyhrZXkpLCAnOicsIHZhbHVlXSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdmFyIHJldCA9IHRoaXMuZ2Vu
ZXJhdGVMaXN0KHBhaXJzKTsKKyAgICAgICAgcmV0LnByZXBlbmQoJ3snKTsKKyAgICAgICAgcmV0
LmFkZCgnfScpOworICAgICAgICByZXR1cm4gcmV0OworICAgICAgfSwKKworICAgICAgZ2VuZXJh
dGVMaXN0OiBmdW5jdGlvbiBnZW5lcmF0ZUxpc3QoZW50cmllcykgeworICAgICAgICB2YXIgcmV0
ID0gdGhpcy5lbXB0eSgpOworCisgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBlbnRyaWVz
Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgaWYgKGkpIHsKKyAgICAgICAgICAg
IHJldC5hZGQoJywnKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICByZXQuYWRkKGNhc3RDaHVu
ayhlbnRyaWVzW2ldLCB0aGlzKSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0Owor
ICAgICAgfSwKKworICAgICAgZ2VuZXJhdGVBcnJheTogZnVuY3Rpb24gZ2VuZXJhdGVBcnJheShl
bnRyaWVzKSB7CisgICAgICAgIHZhciByZXQgPSB0aGlzLmdlbmVyYXRlTGlzdChlbnRyaWVzKTsK
KyAgICAgICAgcmV0LnByZXBlbmQoJ1snKTsKKyAgICAgICAgcmV0LmFkZCgnXScpOworCisgICAg
ICAgIHJldHVybiByZXQ7CisgICAgICB9CisgICAgfTsKKworICAgIGV4cG9ydHNbJ2RlZmF1bHQn
XSA9IENvZGVHZW47CisgICAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107CisK
Ky8qKiovIH0KKy8qKioqKiovIF0pCit9KTsKKzsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9qcXVlcnkvbm9kZV9tb2R1bGVzL2pxdWVyeS9kaXN0
L2pxdWVyeS5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2pxdWVyeS9ub2RlX21vZHVsZXMvanF1ZXJ5L2Rpc3Qv
anF1ZXJ5LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUxYWVhMjkzYTMzZmE0YjJiODdmYWJiNDA2MGU3NjI2ZGMy
YTQ4OTEKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9qcXVlcnkvbm9kZV9tb2R1bGVz
L2pxdWVyeS9kaXN0L2pxdWVyeS5qcwpAQCAtMCwwICsxLDEwMjIwIEBACisvKiEKKyAqIGpRdWVy
eSBKYXZhU2NyaXB0IExpYnJhcnkgdjMuMS4xCisgKiBodHRwczovL2pxdWVyeS5jb20vCisgKgor
ICogSW5jbHVkZXMgU2l6emxlLmpzCisgKiBodHRwczovL3NpenpsZWpzLmNvbS8KKyAqCisgKiBD
b3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycworICogUmVs
ZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCisgKiBodHRwczovL2pxdWVyeS5vcmcvbGljZW5z
ZQorICoKKyAqIERhdGU6IDIwMTYtMDktMjJUMjI6MzBaCisgKi8KKyggZnVuY3Rpb24oIGdsb2Jh
bCwgZmFjdG9yeSApIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGlmICggdHlwZW9mIG1v
ZHVsZSA9PT0gIm9iamVjdCIgJiYgdHlwZW9mIG1vZHVsZS5leHBvcnRzID09PSAib2JqZWN0IiAp
IHsKKworICAgICAgICAvLyBGb3IgQ29tbW9uSlMgYW5kIENvbW1vbkpTLWxpa2UgZW52aXJvbm1l
bnRzIHdoZXJlIGEgcHJvcGVyIGB3aW5kb3dgCisgICAgICAgIC8vIGlzIHByZXNlbnQsIGV4ZWN1
dGUgdGhlIGZhY3RvcnkgYW5kIGdldCBqUXVlcnkuCisgICAgICAgIC8vIEZvciBlbnZpcm9ubWVu
dHMgdGhhdCBkbyBub3QgaGF2ZSBhIGB3aW5kb3dgIHdpdGggYSBgZG9jdW1lbnRgCisgICAgICAg
IC8vIChzdWNoIGFzIE5vZGUuanMpLCBleHBvc2UgYSBmYWN0b3J5IGFzIG1vZHVsZS5leHBvcnRz
LgorICAgICAgICAvLyBUaGlzIGFjY2VudHVhdGVzIHRoZSBuZWVkIGZvciB0aGUgY3JlYXRpb24g
b2YgYSByZWFsIGB3aW5kb3dgLgorICAgICAgICAvLyBlLmcuIHZhciBqUXVlcnkgPSByZXF1aXJl
KCJqcXVlcnkiKSh3aW5kb3cpOworICAgICAgICAvLyBTZWUgdGlja2V0ICMxNDU0OSBmb3IgbW9y
ZSBpbmZvLgorICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbC5kb2N1bWVudCA/CisgICAg
ICAgICAgICBmYWN0b3J5KCBnbG9iYWwsIHRydWUgKSA6CisgICAgICAgICAgICBmdW5jdGlvbigg
dyApIHsKKyAgICAgICAgICAgICAgICBpZiAoICF3LmRvY3VtZW50ICkgeworICAgICAgICAgICAg
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoICJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBh
IGRvY3VtZW50IiApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFjdG9yeSggdyApOworICAgICAgICAgICAgfTsKKyAgICB9IGVsc2UgeworICAgICAgICBmYWN0
b3J5KCBnbG9iYWwgKTsKKyAgICB9CisKKy8vIFBhc3MgdGhpcyBpZiB3aW5kb3cgaXMgbm90IGRl
ZmluZWQgeWV0Cit9ICkoIHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiID8gd2luZG93IDog
dGhpcywgZnVuY3Rpb24oIHdpbmRvdywgbm9HbG9iYWwgKSB7CisKKy8vIEVkZ2UgPD0gMTIgLSAx
MyssIEZpcmVmb3ggPD0xOCAtIDQ1KywgSUUgMTAgLSAxMSwgU2FmYXJpIDUuMSAtIDkrLCBpT1Mg
NiAtIDkuMQorLy8gdGhyb3cgZXhjZXB0aW9ucyB3aGVuIG5vbi1zdHJpY3QgY29kZSAoZS5nLiwg
QVNQLk5FVCA0LjUpIGFjY2Vzc2VzIHN0cmljdCBtb2RlCisvLyBhcmd1bWVudHMuY2FsbGVlLmNh
bGxlciAodHJhYy0xMzMzNSkuIEJ1dCBhcyBvZiBqUXVlcnkgMy4wICgyMDE2KSwgc3RyaWN0IG1v
ZGUgc2hvdWxkIGJlIGNvbW1vbgorLy8gZW5vdWdoIHRoYXQgYWxsIHN1Y2ggYXR0ZW1wdHMgYXJl
IGd1YXJkZWQgaW4gYSB0cnkgYmxvY2suCisidXNlIHN0cmljdCI7CisKK3ZhciBhcnIgPSBbXTsK
KwordmFyIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50OworCit2YXIgZ2V0UHJvdG8gPSBPYmpl
Y3QuZ2V0UHJvdG90eXBlT2Y7CisKK3ZhciBzbGljZSA9IGFyci5zbGljZTsKKwordmFyIGNvbmNh
dCA9IGFyci5jb25jYXQ7CisKK3ZhciBwdXNoID0gYXJyLnB1c2g7CisKK3ZhciBpbmRleE9mID0g
YXJyLmluZGV4T2Y7CisKK3ZhciBjbGFzczJ0eXBlID0ge307CisKK3ZhciB0b1N0cmluZyA9IGNs
YXNzMnR5cGUudG9TdHJpbmc7CisKK3ZhciBoYXNPd24gPSBjbGFzczJ0eXBlLmhhc093blByb3Bl
cnR5OworCit2YXIgZm5Ub1N0cmluZyA9IGhhc093bi50b1N0cmluZzsKKwordmFyIE9iamVjdEZ1
bmN0aW9uU3RyaW5nID0gZm5Ub1N0cmluZy5jYWxsKCBPYmplY3QgKTsKKwordmFyIHN1cHBvcnQg
PSB7fTsKKworCisKKyAgICBmdW5jdGlvbiBET01FdmFsKCBjb2RlLCBkb2MgKSB7CisgICAgICAg
IGRvYyA9IGRvYyB8fCBkb2N1bWVudDsKKworICAgICAgICB2YXIgc2NyaXB0ID0gZG9jLmNyZWF0
ZUVsZW1lbnQoICJzY3JpcHQiICk7CisKKyAgICAgICAgc2NyaXB0LnRleHQgPSBjb2RlOworICAg
ICAgICBkb2MuaGVhZC5hcHBlbmRDaGlsZCggc2NyaXB0ICkucGFyZW50Tm9kZS5yZW1vdmVDaGls
ZCggc2NyaXB0ICk7CisgICAgfQorLyogZ2xvYmFsIFN5bWJvbCAqLworLy8gRGVmaW5pbmcgdGhp
cyBnbG9iYWwgaW4gLmVzbGludHJjLmpzb24gd291bGQgY3JlYXRlIGEgZGFuZ2VyIG9mIHVzaW5n
IHRoZSBnbG9iYWwKKy8vIHVuZ3VhcmRlZCBpbiBhbm90aGVyIHBsYWNlLCBpdCBzZWVtcyBzYWZl
ciB0byBkZWZpbmUgZ2xvYmFsIG9ubHkgZm9yIHRoaXMgbW9kdWxlCisKKworCit2YXIKKyAgICB2
ZXJzaW9uID0gIjMuMS4xIiwKKworICAgIC8vIERlZmluZSBhIGxvY2FsIGNvcHkgb2YgalF1ZXJ5
CisgICAgalF1ZXJ5ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkgeworCisgICAgICAg
IC8vIFRoZSBqUXVlcnkgb2JqZWN0IGlzIGFjdHVhbGx5IGp1c3QgdGhlIGluaXQgY29uc3RydWN0
b3IgJ2VuaGFuY2VkJworICAgICAgICAvLyBOZWVkIGluaXQgaWYgalF1ZXJ5IGlzIGNhbGxlZCAo
anVzdCBhbGxvdyBlcnJvciB0byBiZSB0aHJvd24gaWYgbm90IGluY2x1ZGVkKQorICAgICAgICBy
ZXR1cm4gbmV3IGpRdWVyeS5mbi5pbml0KCBzZWxlY3RvciwgY29udGV4dCApOworICAgIH0sCisK
KyAgICAvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHkKKyAgICAvLyBNYWtlIHN1cmUgd2Ug
dHJpbSBCT00gYW5kIE5CU1AKKyAgICBydHJpbSA9IC9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVG
Rlx4QTBdKyQvZywKKworICAgIC8vIE1hdGNoZXMgZGFzaGVkIHN0cmluZyBmb3IgY2FtZWxpemlu
ZworICAgIHJtc1ByZWZpeCA9IC9eLW1zLS8sCisgICAgcmRhc2hBbHBoYSA9IC8tKFthLXpdKS9n
LAorCisgICAgLy8gVXNlZCBieSBqUXVlcnkuY2FtZWxDYXNlIGFzIGNhbGxiYWNrIHRvIHJlcGxh
Y2UoKQorICAgIGZjYW1lbENhc2UgPSBmdW5jdGlvbiggYWxsLCBsZXR0ZXIgKSB7CisgICAgICAg
IHJldHVybiBsZXR0ZXIudG9VcHBlckNhc2UoKTsKKyAgICB9OworCitqUXVlcnkuZm4gPSBqUXVl
cnkucHJvdG90eXBlID0geworCisgICAgLy8gVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBqUXVlcnkg
YmVpbmcgdXNlZAorICAgIGpxdWVyeTogdmVyc2lvbiwKKworICAgIGNvbnN0cnVjdG9yOiBqUXVl
cnksCisKKyAgICAvLyBUaGUgZGVmYXVsdCBsZW5ndGggb2YgYSBqUXVlcnkgb2JqZWN0IGlzIDAK
KyAgICBsZW5ndGg6IDAsCisKKyAgICB0b0FycmF5OiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0
dXJuIHNsaWNlLmNhbGwoIHRoaXMgKTsKKyAgICB9LAorCisgICAgLy8gR2V0IHRoZSBOdGggZWxl
bWVudCBpbiB0aGUgbWF0Y2hlZCBlbGVtZW50IHNldCBPUgorICAgIC8vIEdldCB0aGUgd2hvbGUg
bWF0Y2hlZCBlbGVtZW50IHNldCBhcyBhIGNsZWFuIGFycmF5CisgICAgZ2V0OiBmdW5jdGlvbigg
bnVtICkgeworCisgICAgICAgIC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIGluIGEgY2xlYW4g
YXJyYXkKKyAgICAgICAgaWYgKCBudW0gPT0gbnVsbCApIHsKKyAgICAgICAgICAgIHJldHVybiBz
bGljZS5jYWxsKCB0aGlzICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBSZXR1cm4ganVzdCB0
aGUgb25lIGVsZW1lbnQgZnJvbSB0aGUgc2V0CisgICAgICAgIHJldHVybiBudW0gPCAwID8gdGhp
c1sgbnVtICsgdGhpcy5sZW5ndGggXSA6IHRoaXNbIG51bSBdOworICAgIH0sCisKKyAgICAvLyBU
YWtlIGFuIGFycmF5IG9mIGVsZW1lbnRzIGFuZCBwdXNoIGl0IG9udG8gdGhlIHN0YWNrCisgICAg
Ly8gKHJldHVybmluZyB0aGUgbmV3IG1hdGNoZWQgZWxlbWVudCBzZXQpCisgICAgcHVzaFN0YWNr
OiBmdW5jdGlvbiggZWxlbXMgKSB7CisKKyAgICAgICAgLy8gQnVpbGQgYSBuZXcgalF1ZXJ5IG1h
dGNoZWQgZWxlbWVudCBzZXQKKyAgICAgICAgdmFyIHJldCA9IGpRdWVyeS5tZXJnZSggdGhpcy5j
b25zdHJ1Y3RvcigpLCBlbGVtcyApOworCisgICAgICAgIC8vIEFkZCB0aGUgb2xkIG9iamVjdCBv
bnRvIHRoZSBzdGFjayAoYXMgYSByZWZlcmVuY2UpCisgICAgICAgIHJldC5wcmV2T2JqZWN0ID0g
dGhpczsKKworICAgICAgICAvLyBSZXR1cm4gdGhlIG5ld2x5LWZvcm1lZCBlbGVtZW50IHNldAor
ICAgICAgICByZXR1cm4gcmV0OworICAgIH0sCisKKyAgICAvLyBFeGVjdXRlIGEgY2FsbGJhY2sg
Zm9yIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgc2V0LgorICAgIGVhY2g6IGZ1bmN0aW9u
KCBjYWxsYmFjayApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5lYWNoKCB0aGlzLCBjYWxsYmFj
ayApOworICAgIH0sCisKKyAgICBtYXA6IGZ1bmN0aW9uKCBjYWxsYmFjayApIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkubWFwKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwg
aSApIHsKKyAgICAgICAgICAgIHJldHVybiBjYWxsYmFjay5jYWxsKCBlbGVtLCBpLCBlbGVtICk7
CisgICAgICAgIH0gKSApOworICAgIH0sCisKKyAgICBzbGljZTogZnVuY3Rpb24oKSB7CisgICAg
ICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggc2xpY2UuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyAp
ICk7CisgICAgfSwKKworICAgIGZpcnN0OiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuZXEoIDAgKTsKKyAgICB9LAorCisgICAgbGFzdDogZnVuY3Rpb24oKSB7CisgICAgICAgIHJl
dHVybiB0aGlzLmVxKCAtMSApOworICAgIH0sCisKKyAgICBlcTogZnVuY3Rpb24oIGkgKSB7Cisg
ICAgICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aCwKKyAgICAgICAgICAgIGogPSAraSArICggaSA8
IDAgPyBsZW4gOiAwICk7CisgICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggaiA+PSAwICYm
IGogPCBsZW4gPyBbIHRoaXNbIGogXSBdIDogW10gKTsKKyAgICB9LAorCisgICAgZW5kOiBmdW5j
dGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMucHJldk9iamVjdCB8fCB0aGlzLmNvbnN0cnVj
dG9yKCk7CisgICAgfSwKKworICAgIC8vIEZvciBpbnRlcm5hbCB1c2Ugb25seS4KKyAgICAvLyBC
ZWhhdmVzIGxpa2UgYW4gQXJyYXkncyBtZXRob2QsIG5vdCBsaWtlIGEgalF1ZXJ5IG1ldGhvZC4K
KyAgICBwdXNoOiBwdXNoLAorICAgIHNvcnQ6IGFyci5zb3J0LAorICAgIHNwbGljZTogYXJyLnNw
bGljZQorfTsKKworalF1ZXJ5LmV4dGVuZCA9IGpRdWVyeS5mbi5leHRlbmQgPSBmdW5jdGlvbigp
IHsKKyAgICB2YXIgb3B0aW9ucywgbmFtZSwgc3JjLCBjb3B5LCBjb3B5SXNBcnJheSwgY2xvbmUs
CisgICAgICAgIHRhcmdldCA9IGFyZ3VtZW50c1sgMCBdIHx8IHt9LAorICAgICAgICBpID0gMSwK
KyAgICAgICAgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCwKKyAgICAgICAgZGVlcCA9IGZhbHNl
OworCisgICAgLy8gSGFuZGxlIGEgZGVlcCBjb3B5IHNpdHVhdGlvbgorICAgIGlmICggdHlwZW9m
IHRhcmdldCA9PT0gImJvb2xlYW4iICkgeworICAgICAgICBkZWVwID0gdGFyZ2V0OworCisgICAg
ICAgIC8vIFNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXQKKyAgICAgICAgdGFyZ2V0ID0g
YXJndW1lbnRzWyBpIF0gfHwge307CisgICAgICAgIGkrKzsKKyAgICB9CisKKyAgICAvLyBIYW5k
bGUgY2FzZSB3aGVuIHRhcmdldCBpcyBhIHN0cmluZyBvciBzb21ldGhpbmcgKHBvc3NpYmxlIGlu
IGRlZXAgY29weSkKKyAgICBpZiAoIHR5cGVvZiB0YXJnZXQgIT09ICJvYmplY3QiICYmICFqUXVl
cnkuaXNGdW5jdGlvbiggdGFyZ2V0ICkgKSB7CisgICAgICAgIHRhcmdldCA9IHt9OworICAgIH0K
KworICAgIC8vIEV4dGVuZCBqUXVlcnkgaXRzZWxmIGlmIG9ubHkgb25lIGFyZ3VtZW50IGlzIHBh
c3NlZAorICAgIGlmICggaSA9PT0gbGVuZ3RoICkgeworICAgICAgICB0YXJnZXQgPSB0aGlzOwor
ICAgICAgICBpLS07CisgICAgfQorCisgICAgZm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7CisK
KyAgICAgICAgLy8gT25seSBkZWFsIHdpdGggbm9uLW51bGwvdW5kZWZpbmVkIHZhbHVlcworICAg
ICAgICBpZiAoICggb3B0aW9ucyA9IGFyZ3VtZW50c1sgaSBdICkgIT0gbnVsbCApIHsKKworICAg
ICAgICAgICAgLy8gRXh0ZW5kIHRoZSBiYXNlIG9iamVjdAorICAgICAgICAgICAgZm9yICggbmFt
ZSBpbiBvcHRpb25zICkgeworICAgICAgICAgICAgICAgIHNyYyA9IHRhcmdldFsgbmFtZSBdOwor
ICAgICAgICAgICAgICAgIGNvcHkgPSBvcHRpb25zWyBuYW1lIF07CisKKyAgICAgICAgICAgICAg
ICAvLyBQcmV2ZW50IG5ldmVyLWVuZGluZyBsb29wCisgICAgICAgICAgICAgICAgaWYgKCB0YXJn
ZXQgPT09IGNvcHkgKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFJlY3Vyc2UgaWYgd2UncmUgbWVyZ2luZyBw
bGFpbiBvYmplY3RzIG9yIGFycmF5cworICAgICAgICAgICAgICAgIGlmICggZGVlcCAmJiBjb3B5
ICYmICggalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvcHkgKSB8fAorICAgICAgICAgICAgICAgICAg
ICAoIGNvcHlJc0FycmF5ID0galF1ZXJ5LmlzQXJyYXkoIGNvcHkgKSApICkgKSB7CisKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCBjb3B5SXNBcnJheSApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvcHlJc0FycmF5ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBjbG9uZSA9
IHNyYyAmJiBqUXVlcnkuaXNBcnJheSggc3JjICkgPyBzcmMgOiBbXTsKKworICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmUgPSBzcmMgJiYg
alF1ZXJ5LmlzUGxhaW5PYmplY3QoIHNyYyApID8gc3JjIDoge307CisgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBOZXZlciBtb3ZlIG9yaWdpbmFsIG9iamVj
dHMsIGNsb25lIHRoZW0KKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0WyBuYW1lIF0gPSBqUXVl
cnkuZXh0ZW5kKCBkZWVwLCBjbG9uZSwgY29weSApOworCisgICAgICAgICAgICAgICAgLy8gRG9u
J3QgYnJpbmcgaW4gdW5kZWZpbmVkIHZhbHVlcworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
IGNvcHkgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0WyBuYW1l
IF0gPSBjb3B5OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8vIFJldHVybiB0aGUgbW9kaWZpZWQgb2JqZWN0CisgICAgcmV0dXJuIHRh
cmdldDsKK307CisKK2pRdWVyeS5leHRlbmQoIHsKKworICAgIC8vIFVuaXF1ZSBmb3IgZWFjaCBj
b3B5IG9mIGpRdWVyeSBvbiB0aGUgcGFnZQorICAgIGV4cGFuZG86ICJqUXVlcnkiICsgKCB2ZXJz
aW9uICsgTWF0aC5yYW5kb20oKSApLnJlcGxhY2UoIC9cRC9nLCAiIiApLAorCisgICAgLy8gQXNz
dW1lIGpRdWVyeSBpcyByZWFkeSB3aXRob3V0IHRoZSByZWFkeSBtb2R1bGUKKyAgICBpc1JlYWR5
OiB0cnVlLAorCisgICAgZXJyb3I6IGZ1bmN0aW9uKCBtc2cgKSB7CisgICAgICAgIHRocm93IG5l
dyBFcnJvciggbXNnICk7CisgICAgfSwKKworICAgIG5vb3A6IGZ1bmN0aW9uKCkge30sCisKKyAg
ICBpc0Z1bmN0aW9uOiBmdW5jdGlvbiggb2JqICkgeworICAgICAgICByZXR1cm4galF1ZXJ5LnR5
cGUoIG9iaiApID09PSAiZnVuY3Rpb24iOworICAgIH0sCisKKyAgICBpc0FycmF5OiBBcnJheS5p
c0FycmF5LAorCisgICAgaXNXaW5kb3c6IGZ1bmN0aW9uKCBvYmogKSB7CisgICAgICAgIHJldHVy
biBvYmogIT0gbnVsbCAmJiBvYmogPT09IG9iai53aW5kb3c7CisgICAgfSwKKworICAgIGlzTnVt
ZXJpYzogZnVuY3Rpb24oIG9iaiApIHsKKworICAgICAgICAvLyBBcyBvZiBqUXVlcnkgMy4wLCBp
c051bWVyaWMgaXMgbGltaXRlZCB0bworICAgICAgICAvLyBzdHJpbmdzIGFuZCBudW1iZXJzIChw
cmltaXRpdmVzIG9yIG9iamVjdHMpCisgICAgICAgIC8vIHRoYXQgY2FuIGJlIGNvZXJjZWQgdG8g
ZmluaXRlIG51bWJlcnMgKGdoLTI2NjIpCisgICAgICAgIHZhciB0eXBlID0galF1ZXJ5LnR5cGUo
IG9iaiApOworICAgICAgICByZXR1cm4gKCB0eXBlID09PSAibnVtYmVyIiB8fCB0eXBlID09PSAi
c3RyaW5nIiApICYmCisKKyAgICAgICAgICAgIC8vIHBhcnNlRmxvYXQgTmFOcyBudW1lcmljLWNh
c3QgZmFsc2UgcG9zaXRpdmVzICgiIikKKyAgICAgICAgICAgIC8vIC4uLmJ1dCBtaXNpbnRlcnBy
ZXRzIGxlYWRpbmctbnVtYmVyIHN0cmluZ3MsIHBhcnRpY3VsYXJseSBoZXggbGl0ZXJhbHMgKCIw
eC4uLiIpCisgICAgICAgICAgICAvLyBzdWJ0cmFjdGlvbiBmb3JjZXMgaW5maW5pdGllcyB0byBO
YU4KKyAgICAgICAgICAgICFpc05hTiggb2JqIC0gcGFyc2VGbG9hdCggb2JqICkgKTsKKyAgICB9
LAorCisgICAgaXNQbGFpbk9iamVjdDogZnVuY3Rpb24oIG9iaiApIHsKKyAgICAgICAgdmFyIHBy
b3RvLCBDdG9yOworCisgICAgICAgIC8vIERldGVjdCBvYnZpb3VzIG5lZ2F0aXZlcworICAgICAg
ICAvLyBVc2UgdG9TdHJpbmcgaW5zdGVhZCBvZiBqUXVlcnkudHlwZSB0byBjYXRjaCBob3N0IG9i
amVjdHMKKyAgICAgICAgaWYgKCAhb2JqIHx8IHRvU3RyaW5nLmNhbGwoIG9iaiApICE9PSAiW29i
amVjdCBPYmplY3RdIiApIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
CisgICAgICAgIHByb3RvID0gZ2V0UHJvdG8oIG9iaiApOworCisgICAgICAgIC8vIE9iamVjdHMg
d2l0aCBubyBwcm90b3R5cGUgKGUuZy4sIGBPYmplY3QuY3JlYXRlKCBudWxsIClgKSBhcmUgcGxh
aW4KKyAgICAgICAgaWYgKCAhcHJvdG8gKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIE9iamVjdHMgd2l0aCBwcm90b3R5cGUgYXJlIHBsYWluIGlm
ZiB0aGV5IHdlcmUgY29uc3RydWN0ZWQgYnkgYSBnbG9iYWwgT2JqZWN0IGZ1bmN0aW9uCisgICAg
ICAgIEN0b3IgPSBoYXNPd24uY2FsbCggcHJvdG8sICJjb25zdHJ1Y3RvciIgKSAmJiBwcm90by5j
b25zdHJ1Y3RvcjsKKyAgICAgICAgcmV0dXJuIHR5cGVvZiBDdG9yID09PSAiZnVuY3Rpb24iICYm
IGZuVG9TdHJpbmcuY2FsbCggQ3RvciApID09PSBPYmplY3RGdW5jdGlvblN0cmluZzsKKyAgICB9
LAorCisgICAgaXNFbXB0eU9iamVjdDogZnVuY3Rpb24oIG9iaiApIHsKKworICAgICAgICAvKiBl
c2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqLworICAgICAgICAvLyBTZWUgaHR0cHM6Ly9n
aXRodWIuY29tL2VzbGludC9lc2xpbnQvaXNzdWVzLzYxMjUKKyAgICAgICAgdmFyIG5hbWU7CisK
KyAgICAgICAgZm9yICggbmFtZSBpbiBvYmogKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSwKKworICAgIHR5cGU6IGZ1
bmN0aW9uKCBvYmogKSB7CisgICAgICAgIGlmICggb2JqID09IG51bGwgKSB7CisgICAgICAgICAg
ICByZXR1cm4gb2JqICsgIiI7CisgICAgICAgIH0KKworICAgICAgICAvLyBTdXBwb3J0OiBBbmRy
b2lkIDw9Mi4zIG9ubHkgKGZ1bmN0aW9uaXNoIFJlZ0V4cCkKKyAgICAgICAgcmV0dXJuIHR5cGVv
ZiBvYmogPT09ICJvYmplY3QiIHx8IHR5cGVvZiBvYmogPT09ICJmdW5jdGlvbiIgPworICAgICAg
ICAgICAgY2xhc3MydHlwZVsgdG9TdHJpbmcuY2FsbCggb2JqICkgXSB8fCAib2JqZWN0IiA6Cisg
ICAgICAgICAgICB0eXBlb2Ygb2JqOworICAgIH0sCisKKyAgICAvLyBFdmFsdWF0ZXMgYSBzY3Jp
cHQgaW4gYSBnbG9iYWwgY29udGV4dAorICAgIGdsb2JhbEV2YWw6IGZ1bmN0aW9uKCBjb2RlICkg
eworICAgICAgICBET01FdmFsKCBjb2RlICk7CisgICAgfSwKKworICAgIC8vIENvbnZlcnQgZGFz
aGVkIHRvIGNhbWVsQ2FzZTsgdXNlZCBieSB0aGUgY3NzIGFuZCBkYXRhIG1vZHVsZXMKKyAgICAv
LyBTdXBwb3J0OiBJRSA8PTkgLSAxMSwgRWRnZSAxMiAtIDEzCisgICAgLy8gTWljcm9zb2Z0IGZv
cmdvdCB0byBodW1wIHRoZWlyIHZlbmRvciBwcmVmaXggKCM5NTcyKQorICAgIGNhbWVsQ2FzZTog
ZnVuY3Rpb24oIHN0cmluZyApIHsKKyAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKCBybXNQ
cmVmaXgsICJtcy0iICkucmVwbGFjZSggcmRhc2hBbHBoYSwgZmNhbWVsQ2FzZSApOworICAgIH0s
CisKKyAgICBub2RlTmFtZTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7CisgICAgICAgIHJldHVy
biBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50
b0xvd2VyQ2FzZSgpOworICAgIH0sCisKKyAgICBlYWNoOiBmdW5jdGlvbiggb2JqLCBjYWxsYmFj
ayApIHsKKyAgICAgICAgdmFyIGxlbmd0aCwgaSA9IDA7CisKKyAgICAgICAgaWYgKCBpc0FycmF5
TGlrZSggb2JqICkgKSB7CisgICAgICAgICAgICBsZW5ndGggPSBvYmoubGVuZ3RoOworICAgICAg
ICAgICAgZm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7CisgICAgICAgICAgICAgICAgaWYgKCBj
YWxsYmFjay5jYWxsKCBvYmpbIGkgXSwgaSwgb2JqWyBpIF0gKSA9PT0gZmFsc2UgKSB7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoIGkgaW4gb2JqICkgeworICAgICAg
ICAgICAgICAgIGlmICggY2FsbGJhY2suY2FsbCggb2JqWyBpIF0sIGksIG9ialsgaSBdICkgPT09
IGZhbHNlICkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gb2JqOworICAgIH0s
CisKKyAgICAvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHkKKyAgICB0cmltOiBmdW5jdGlv
biggdGV4dCApIHsKKyAgICAgICAgcmV0dXJuIHRleHQgPT0gbnVsbCA/CisgICAgICAgICAgICAi
IiA6CisgICAgICAgICAgICAoIHRleHQgKyAiIiApLnJlcGxhY2UoIHJ0cmltLCAiIiApOworICAg
IH0sCisKKyAgICAvLyByZXN1bHRzIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5CisgICAgbWFr
ZUFycmF5OiBmdW5jdGlvbiggYXJyLCByZXN1bHRzICkgeworICAgICAgICB2YXIgcmV0ID0gcmVz
dWx0cyB8fCBbXTsKKworICAgICAgICBpZiAoIGFyciAhPSBudWxsICkgeworICAgICAgICAgICAg
aWYgKCBpc0FycmF5TGlrZSggT2JqZWN0KCBhcnIgKSApICkgeworICAgICAgICAgICAgICAgIGpR
dWVyeS5tZXJnZSggcmV0LAorICAgICAgICAgICAgICAgICAgICB0eXBlb2YgYXJyID09PSAic3Ry
aW5nIiA/CisgICAgICAgICAgICAgICAgICAgIFsgYXJyIF0gOiBhcnIKKyAgICAgICAgICAgICAg
ICApOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwdXNoLmNhbGwoIHJl
dCwgYXJyICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0
OworICAgIH0sCisKKyAgICBpbkFycmF5OiBmdW5jdGlvbiggZWxlbSwgYXJyLCBpICkgeworICAg
ICAgICByZXR1cm4gYXJyID09IG51bGwgPyAtMSA6IGluZGV4T2YuY2FsbCggYXJyLCBlbGVtLCBp
ICk7CisgICAgfSwKKworICAgIC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRv
bUpTIDEgb25seQorICAgIC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5j
aWVudCBXZWJLaXQKKyAgICBtZXJnZTogZnVuY3Rpb24oIGZpcnN0LCBzZWNvbmQgKSB7CisgICAg
ICAgIHZhciBsZW4gPSArc2Vjb25kLmxlbmd0aCwKKyAgICAgICAgICAgIGogPSAwLAorICAgICAg
ICAgICAgaSA9IGZpcnN0Lmxlbmd0aDsKKworICAgICAgICBmb3IgKCA7IGogPCBsZW47IGorKyAp
IHsKKyAgICAgICAgICAgIGZpcnN0WyBpKysgXSA9IHNlY29uZFsgaiBdOworICAgICAgICB9CisK
KyAgICAgICAgZmlyc3QubGVuZ3RoID0gaTsKKworICAgICAgICByZXR1cm4gZmlyc3Q7CisgICAg
fSwKKworICAgIGdyZXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ssIGludmVydCApIHsKKyAg
ICAgICAgdmFyIGNhbGxiYWNrSW52ZXJzZSwKKyAgICAgICAgICAgIG1hdGNoZXMgPSBbXSwKKyAg
ICAgICAgICAgIGkgPSAwLAorICAgICAgICAgICAgbGVuZ3RoID0gZWxlbXMubGVuZ3RoLAorICAg
ICAgICAgICAgY2FsbGJhY2tFeHBlY3QgPSAhaW52ZXJ0OworCisgICAgICAgIC8vIEdvIHRocm91
Z2ggdGhlIGFycmF5LCBvbmx5IHNhdmluZyB0aGUgaXRlbXMKKyAgICAgICAgLy8gdGhhdCBwYXNz
IHRoZSB2YWxpZGF0b3IgZnVuY3Rpb24KKyAgICAgICAgZm9yICggOyBpIDwgbGVuZ3RoOyBpKysg
KSB7CisgICAgICAgICAgICBjYWxsYmFja0ludmVyc2UgPSAhY2FsbGJhY2soIGVsZW1zWyBpIF0s
IGkgKTsKKyAgICAgICAgICAgIGlmICggY2FsbGJhY2tJbnZlcnNlICE9PSBjYWxsYmFja0V4cGVj
dCApIHsKKyAgICAgICAgICAgICAgICBtYXRjaGVzLnB1c2goIGVsZW1zWyBpIF0gKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtYXRjaGVzOworICAgIH0sCisK
KyAgICAvLyBhcmcgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHkKKyAgICBtYXA6IGZ1bmN0aW9u
KCBlbGVtcywgY2FsbGJhY2ssIGFyZyApIHsKKyAgICAgICAgdmFyIGxlbmd0aCwgdmFsdWUsCisg
ICAgICAgICAgICBpID0gMCwKKyAgICAgICAgICAgIHJldCA9IFtdOworCisgICAgICAgIC8vIEdv
IHRocm91Z2ggdGhlIGFycmF5LCB0cmFuc2xhdGluZyBlYWNoIG9mIHRoZSBpdGVtcyB0byB0aGVp
ciBuZXcgdmFsdWVzCisgICAgICAgIGlmICggaXNBcnJheUxpa2UoIGVsZW1zICkgKSB7CisgICAg
ICAgICAgICBsZW5ndGggPSBlbGVtcy5sZW5ndGg7CisgICAgICAgICAgICBmb3IgKCA7IGkgPCBs
ZW5ndGg7IGkrKyApIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sg
aSBdLCBpLCBhcmcgKTsKKworICAgICAgICAgICAgICAgIGlmICggdmFsdWUgIT0gbnVsbCApIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2goIHZhbHVlICk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorCisgICAgICAgIC8vIEdvIHRocm91Z2ggZXZlcnkga2V5IG9uIHRo
ZSBvYmplY3QsCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKCBpIGluIGVsZW1z
ICkgeworICAgICAgICAgICAgICAgIHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFy
ZyApOworCisgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZSAhPSBudWxsICkgeworICAgICAgICAg
ICAgICAgICAgICByZXQucHVzaCggdmFsdWUgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlz
CisgICAgICAgIHJldHVybiBjb25jYXQuYXBwbHkoIFtdLCByZXQgKTsKKyAgICB9LAorCisgICAg
Ly8gQSBnbG9iYWwgR1VJRCBjb3VudGVyIGZvciBvYmplY3RzCisgICAgZ3VpZDogMSwKKworICAg
IC8vIEJpbmQgYSBmdW5jdGlvbiB0byBhIGNvbnRleHQsIG9wdGlvbmFsbHkgcGFydGlhbGx5IGFw
cGx5aW5nIGFueQorICAgIC8vIGFyZ3VtZW50cy4KKyAgICBwcm94eTogZnVuY3Rpb24oIGZuLCBj
b250ZXh0ICkgeworICAgICAgICB2YXIgdG1wLCBhcmdzLCBwcm94eTsKKworICAgICAgICBpZiAo
IHR5cGVvZiBjb250ZXh0ID09PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgIHRtcCA9IGZuWyBj
b250ZXh0IF07CisgICAgICAgICAgICBjb250ZXh0ID0gZm47CisgICAgICAgICAgICBmbiA9IHRt
cDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFF1aWNrIGNoZWNrIHRvIGRldGVybWluZSBpZiB0
YXJnZXQgaXMgY2FsbGFibGUsIGluIHRoZSBzcGVjCisgICAgICAgIC8vIHRoaXMgdGhyb3dzIGEg
VHlwZUVycm9yLCBidXQgd2Ugd2lsbCBqdXN0IHJldHVybiB1bmRlZmluZWQuCisgICAgICAgIGlm
ICggIWpRdWVyeS5pc0Z1bmN0aW9uKCBmbiApICkgeworICAgICAgICAgICAgcmV0dXJuIHVuZGVm
aW5lZDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNpbXVsYXRlZCBiaW5kCisgICAgICAgIGFy
Z3MgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMsIDIgKTsKKyAgICAgICAgcHJveHkgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSggY29udGV4dCB8fCB0aGlzLCBhcmdz
LmNvbmNhdCggc2xpY2UuY2FsbCggYXJndW1lbnRzICkgKSApOworICAgICAgICB9OworCisgICAg
ICAgIC8vIFNldCB0aGUgZ3VpZCBvZiB1bmlxdWUgaGFuZGxlciB0byB0aGUgc2FtZSBvZiBvcmln
aW5hbCBoYW5kbGVyLCBzbyBpdCBjYW4gYmUgcmVtb3ZlZAorICAgICAgICBwcm94eS5ndWlkID0g
Zm4uZ3VpZCA9IGZuLmd1aWQgfHwgalF1ZXJ5Lmd1aWQrKzsKKworICAgICAgICByZXR1cm4gcHJv
eHk7CisgICAgfSwKKworICAgIG5vdzogRGF0ZS5ub3csCisKKyAgICAvLyBqUXVlcnkuc3VwcG9y
dCBpcyBub3QgdXNlZCBpbiBDb3JlIGJ1dCBvdGhlciBwcm9qZWN0cyBhdHRhY2ggdGhlaXIKKyAg
ICAvLyBwcm9wZXJ0aWVzIHRvIGl0IHNvIGl0IG5lZWRzIHRvIGV4aXN0LgorICAgIHN1cHBvcnQ6
IHN1cHBvcnQKK30gKTsKKworaWYgKCB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICkgewor
ICAgIGpRdWVyeS5mblsgU3ltYm9sLml0ZXJhdG9yIF0gPSBhcnJbIFN5bWJvbC5pdGVyYXRvciBd
OworfQorCisvLyBQb3B1bGF0ZSB0aGUgY2xhc3MydHlwZSBtYXAKK2pRdWVyeS5lYWNoKCAiQm9v
bGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJv
ciBTeW1ib2wiLnNwbGl0KCAiICIgKSwKK2Z1bmN0aW9uKCBpLCBuYW1lICkgeworICAgIGNsYXNz
MnR5cGVbICJbb2JqZWN0ICIgKyBuYW1lICsgIl0iIF0gPSBuYW1lLnRvTG93ZXJDYXNlKCk7Cit9
ICk7CisKK2Z1bmN0aW9uIGlzQXJyYXlMaWtlKCBvYmogKSB7CisKKyAgICAvLyBTdXBwb3J0OiBy
ZWFsIGlPUyA4LjIgb25seSAobm90IHJlcHJvZHVjaWJsZSBpbiBzaW11bGF0b3IpCisgICAgLy8g
YGluYCBjaGVjayB1c2VkIHRvIHByZXZlbnQgSklUIGVycm9yIChnaC0yMTQ1KQorICAgIC8vIGhh
c093biBpc24ndCB1c2VkIGhlcmUgZHVlIHRvIGZhbHNlIG5lZ2F0aXZlcworICAgIC8vIHJlZ2Fy
ZGluZyBOb2RlbGlzdCBsZW5ndGggaW4gSUUKKyAgICB2YXIgbGVuZ3RoID0gISFvYmogJiYgImxl
bmd0aCIgaW4gb2JqICYmIG9iai5sZW5ndGgsCisgICAgICAgIHR5cGUgPSBqUXVlcnkudHlwZSgg
b2JqICk7CisKKyAgICBpZiAoIHR5cGUgPT09ICJmdW5jdGlvbiIgfHwgalF1ZXJ5LmlzV2luZG93
KCBvYmogKSApIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0
eXBlID09PSAiYXJyYXkiIHx8IGxlbmd0aCA9PT0gMCB8fAorICAgICAgICB0eXBlb2YgbGVuZ3Ro
ID09PSAibnVtYmVyIiAmJiBsZW5ndGggPiAwICYmICggbGVuZ3RoIC0gMSApIGluIG9iajsKK30K
K3ZhciBTaXp6bGUgPQorLyohCisgKiBTaXp6bGUgQ1NTIFNlbGVjdG9yIEVuZ2luZSB2Mi4zLjMK
KyAqIGh0dHBzOi8vc2l6emxlanMuY29tLworICoKKyAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRh
dGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzCisgKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxp
Y2Vuc2UKKyAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2UKKyAqCisgKiBEYXRlOiAyMDE2LTA4
LTA4CisgKi8KKyhmdW5jdGlvbiggd2luZG93ICkgeworCit2YXIgaSwKKyAgICBzdXBwb3J0LAor
ICAgIEV4cHIsCisgICAgZ2V0VGV4dCwKKyAgICBpc1hNTCwKKyAgICB0b2tlbml6ZSwKKyAgICBj
b21waWxlLAorICAgIHNlbGVjdCwKKyAgICBvdXRlcm1vc3RDb250ZXh0LAorICAgIHNvcnRJbnB1
dCwKKyAgICBoYXNEdXBsaWNhdGUsCisKKyAgICAvLyBMb2NhbCBkb2N1bWVudCB2YXJzCisgICAg
c2V0RG9jdW1lbnQsCisgICAgZG9jdW1lbnQsCisgICAgZG9jRWxlbSwKKyAgICBkb2N1bWVudElz
SFRNTCwKKyAgICByYnVnZ3lRU0EsCisgICAgcmJ1Z2d5TWF0Y2hlcywKKyAgICBtYXRjaGVzLAor
ICAgIGNvbnRhaW5zLAorCisgICAgLy8gSW5zdGFuY2Utc3BlY2lmaWMgZGF0YQorICAgIGV4cGFu
ZG8gPSAic2l6emxlIiArIDEgKiBuZXcgRGF0ZSgpLAorICAgIHByZWZlcnJlZERvYyA9IHdpbmRv
dy5kb2N1bWVudCwKKyAgICBkaXJydW5zID0gMCwKKyAgICBkb25lID0gMCwKKyAgICBjbGFzc0Nh
Y2hlID0gY3JlYXRlQ2FjaGUoKSwKKyAgICB0b2tlbkNhY2hlID0gY3JlYXRlQ2FjaGUoKSwKKyAg
ICBjb21waWxlckNhY2hlID0gY3JlYXRlQ2FjaGUoKSwKKyAgICBzb3J0T3JkZXIgPSBmdW5jdGlv
biggYSwgYiApIHsKKyAgICAgICAgaWYgKCBhID09PSBiICkgeworICAgICAgICAgICAgaGFzRHVw
bGljYXRlID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9LAorCisg
ICAgLy8gSW5zdGFuY2UgbWV0aG9kcworICAgIGhhc093biA9ICh7fSkuaGFzT3duUHJvcGVydHks
CisgICAgYXJyID0gW10sCisgICAgcG9wID0gYXJyLnBvcCwKKyAgICBwdXNoX25hdGl2ZSA9IGFy
ci5wdXNoLAorICAgIHB1c2ggPSBhcnIucHVzaCwKKyAgICBzbGljZSA9IGFyci5zbGljZSwKKyAg
ICAvLyBVc2UgYSBzdHJpcHBlZC1kb3duIGluZGV4T2YgYXMgaXQncyBmYXN0ZXIgdGhhbiBuYXRp
dmUKKyAgICAvLyBodHRwczovL2pzcGVyZi5jb20vdGhvci1pbmRleG9mLXZzLWZvci81CisgICAg
aW5kZXhPZiA9IGZ1bmN0aW9uKCBsaXN0LCBlbGVtICkgeworICAgICAgICB2YXIgaSA9IDAsCisg
ICAgICAgICAgICBsZW4gPSBsaXN0Lmxlbmd0aDsKKyAgICAgICAgZm9yICggOyBpIDwgbGVuOyBp
KysgKSB7CisgICAgICAgICAgICBpZiAoIGxpc3RbaV0gPT09IGVsZW0gKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IC0xOworICAgIH0sCisKKyAgICBib29sZWFucyA9ICJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1
dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9v
cHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZCIsCisKKyAgICAvLyBSZWd1
bGFyIGV4cHJlc3Npb25zCisKKyAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXNlbGVj
dG9ycy8jd2hpdGVzcGFjZQorICAgIHdoaXRlc3BhY2UgPSAiW1xceDIwXFx0XFxyXFxuXFxmXSIs
CisKKyAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9zeW5kYXRhLmh0bWwjdmFsdWUt
ZGVmLWlkZW50aWZpZXIKKyAgICBpZGVudGlmaWVyID0gIig/OlxcXFwufFtcXHctXXxbXlwwLVxc
eGEwXSkrIiwKKworICAgIC8vIEF0dHJpYnV0ZSBzZWxlY3RvcnM6IGh0dHA6Ly93d3cudzMub3Jn
L1RSL3NlbGVjdG9ycy8jYXR0cmlidXRlLXNlbGVjdG9ycworICAgIGF0dHJpYnV0ZXMgPSAiXFxb
IiArIHdoaXRlc3BhY2UgKyAiKigiICsgaWRlbnRpZmllciArICIpKD86IiArIHdoaXRlc3BhY2Ug
KworICAgICAgICAvLyBPcGVyYXRvciAoY2FwdHVyZSAyKQorICAgICAgICAiKihbKl4kfCF+XT89
KSIgKyB3aGl0ZXNwYWNlICsKKyAgICAgICAgLy8gIkF0dHJpYnV0ZSB2YWx1ZXMgbXVzdCBiZSBD
U1MgaWRlbnRpZmllcnMgW2NhcHR1cmUgNV0gb3Igc3RyaW5ncyBbY2FwdHVyZSAzIG9yIGNhcHR1
cmUgNF0iCisgICAgICAgICIqKD86JygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86XFxcXC58
W15cXFxcXCJdKSopXCJ8KCIgKyBpZGVudGlmaWVyICsgIikpfCkiICsgd2hpdGVzcGFjZSArCisg
ICAgICAgICIqXFxdIiwKKworICAgIHBzZXVkb3MgPSAiOigiICsgaWRlbnRpZmllciArICIpKD86
XFwoKCIgKworICAgICAgICAvLyBUbyByZWR1Y2UgdGhlIG51bWJlciBvZiBzZWxlY3RvcnMgbmVl
ZGluZyB0b2tlbml6ZSBpbiB0aGUgcHJlRmlsdGVyLCBwcmVmZXIgYXJndW1lbnRzOgorICAgICAg
ICAvLyAxLiBxdW90ZWQgKGNhcHR1cmUgMzsgY2FwdHVyZSA0IG9yIGNhcHR1cmUgNSkKKyAgICAg
ICAgIignKCg/OlxcXFwufFteXFxcXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcIil8
IiArCisgICAgICAgIC8vIDIuIHNpbXBsZSAoY2FwdHVyZSA2KQorICAgICAgICAiKCg/OlxcXFwu
fFteXFxcXCgpW1xcXV18IiArIGF0dHJpYnV0ZXMgKyAiKSopfCIgKworICAgICAgICAvLyAzLiBh
bnl0aGluZyBlbHNlIChjYXB0dXJlIDIpCisgICAgICAgICIuKiIgKworICAgICAgICAiKVxcKXwp
IiwKKworICAgIC8vIExlYWRpbmcgYW5kIG5vbi1lc2NhcGVkIHRyYWlsaW5nIHdoaXRlc3BhY2Us
IGNhcHR1cmluZyBzb21lIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMgcHJlY2VkaW5nIHRoZSBs
YXR0ZXIKKyAgICByd2hpdGVzcGFjZSA9IG5ldyBSZWdFeHAoIHdoaXRlc3BhY2UgKyAiKyIsICJn
IiApLAorICAgIHJ0cmltID0gbmV3IFJlZ0V4cCggIl4iICsgd2hpdGVzcGFjZSArICIrfCgoPzpe
fFteXFxcXF0pKD86XFxcXC4pKikiICsgd2hpdGVzcGFjZSArICIrJCIsICJnIiApLAorCisgICAg
cmNvbW1hID0gbmV3IFJlZ0V4cCggIl4iICsgd2hpdGVzcGFjZSArICIqLCIgKyB3aGl0ZXNwYWNl
ICsgIioiICksCisgICAgcmNvbWJpbmF0b3JzID0gbmV3IFJlZ0V4cCggIl4iICsgd2hpdGVzcGFj
ZSArICIqKFs+K35dfCIgKyB3aGl0ZXNwYWNlICsgIikiICsgd2hpdGVzcGFjZSArICIqIiApLAor
CisgICAgcmF0dHJpYnV0ZVF1b3RlcyA9IG5ldyBSZWdFeHAoICI9IiArIHdoaXRlc3BhY2UgKyAi
KihbXlxcXSdcIl0qPykiICsgd2hpdGVzcGFjZSArICIqXFxdIiwgImciICksCisKKyAgICBycHNl
dWRvID0gbmV3IFJlZ0V4cCggcHNldWRvcyApLAorICAgIHJpZGVudGlmaWVyID0gbmV3IFJlZ0V4
cCggIl4iICsgaWRlbnRpZmllciArICIkIiApLAorCisgICAgbWF0Y2hFeHByID0geworICAgICAg
ICAiSUQiOiBuZXcgUmVnRXhwKCAiXiMoIiArIGlkZW50aWZpZXIgKyAiKSIgKSwKKyAgICAgICAg
IkNMQVNTIjogbmV3IFJlZ0V4cCggIl5cXC4oIiArIGlkZW50aWZpZXIgKyAiKSIgKSwKKyAgICAg
ICAgIlRBRyI6IG5ldyBSZWdFeHAoICJeKCIgKyBpZGVudGlmaWVyICsgInxbKl0pIiApLAorICAg
ICAgICAiQVRUUiI6IG5ldyBSZWdFeHAoICJeIiArIGF0dHJpYnV0ZXMgKSwKKyAgICAgICAgIlBT
RVVETyI6IG5ldyBSZWdFeHAoICJeIiArIHBzZXVkb3MgKSwKKyAgICAgICAgIkNISUxEIjogbmV3
IFJlZ0V4cCggIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBl
KSg/OlxcKCIgKyB3aGl0ZXNwYWNlICsKKyAgICAgICAgICAgICIqKGV2ZW58b2RkfCgoWystXXwp
KFxcZCopbnwpIiArIHdoaXRlc3BhY2UgKyAiKig/OihbKy1dfCkiICsgd2hpdGVzcGFjZSArCisg
ICAgICAgICAgICAiKihcXGQrKXwpKSIgKyB3aGl0ZXNwYWNlICsgIipcXCl8KSIsICJpIiApLAor
ICAgICAgICAiYm9vbCI6IG5ldyBSZWdFeHAoICJeKD86IiArIGJvb2xlYW5zICsgIikkIiwgImki
ICksCisgICAgICAgIC8vIEZvciB1c2UgaW4gbGlicmFyaWVzIGltcGxlbWVudGluZyAuaXMoKQor
ICAgICAgICAvLyBXZSB1c2UgdGhpcyBmb3IgUE9TIG1hdGNoaW5nIGluIGBzZWxlY3RgCisgICAg
ICAgICJuZWVkc0NvbnRleHQiOiBuZXcgUmVnRXhwKCAiXiIgKyB3aGl0ZXNwYWNlICsgIipbPit+
XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcKCIgKworICAgICAgICAg
ICAgd2hpdGVzcGFjZSArICIqKCg/Oi1cXGQpP1xcZCopIiArIHdoaXRlc3BhY2UgKyAiKlxcKXwp
KD89W14tXXwkKSIsICJpIiApCisgICAgfSwKKworICAgIHJpbnB1dHMgPSAvXig/OmlucHV0fHNl
bGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLAorICAgIHJoZWFkZXIgPSAvXmhcZCQvaSwKKworICAg
IHJuYXRpdmUgPSAvXltee10rXHtccypcW25hdGl2ZSBcdy8sCisKKyAgICAvLyBFYXNpbHktcGFy
c2VhYmxlL3JldHJpZXZhYmxlIElEIG9yIFRBRyBvciBDTEFTUyBzZWxlY3RvcnMKKyAgICBycXVp
Y2tFeHByID0gL14oPzojKFtcdy1dKyl8KFx3Kyl8XC4oW1x3LV0rKSkkLywKKworICAgIHJzaWJs
aW5nID0gL1srfl0vLAorCisgICAgLy8gQ1NTIGVzY2FwZXMKKyAgICAvLyBodHRwOi8vd3d3Lncz
Lm9yZy9UUi9DU1MyMS9zeW5kYXRhLmh0bWwjZXNjYXBlZC1jaGFyYWN0ZXJzCisgICAgcnVuZXNj
YXBlID0gbmV3IFJlZ0V4cCggIlxcXFwoW1xcZGEtZl17MSw2fSIgKyB3aGl0ZXNwYWNlICsgIj98
KCIgKyB3aGl0ZXNwYWNlICsgIil8LikiLCAiaWciICksCisgICAgZnVuZXNjYXBlID0gZnVuY3Rp
b24oIF8sIGVzY2FwZWQsIGVzY2FwZWRXaGl0ZXNwYWNlICkgeworICAgICAgICB2YXIgaGlnaCA9
ICIweCIgKyBlc2NhcGVkIC0gMHgxMDAwMDsKKyAgICAgICAgLy8gTmFOIG1lYW5zIG5vbi1jb2Rl
cG9pbnQKKyAgICAgICAgLy8gU3VwcG9ydDogRmlyZWZveDwyNAorICAgICAgICAvLyBXb3JrYXJv
dW5kIGVycm9uZW91cyBudW1lcmljIGludGVycHJldGF0aW9uIG9mICsiMHgiCisgICAgICAgIHJl
dHVybiBoaWdoICE9PSBoaWdoIHx8IGVzY2FwZWRXaGl0ZXNwYWNlID8KKyAgICAgICAgICAgIGVz
Y2FwZWQgOgorICAgICAgICAgICAgaGlnaCA8IDAgPworICAgICAgICAgICAgICAgIC8vIEJNUCBj
b2RlcG9pbnQKKyAgICAgICAgICAgICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKCBoaWdoICsgMHgx
MDAwMCApIDoKKyAgICAgICAgICAgICAgICAvLyBTdXBwbGVtZW50YWwgUGxhbmUgY29kZXBvaW50
IChzdXJyb2dhdGUgcGFpcikKKyAgICAgICAgICAgICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKCBo
aWdoID4+IDEwIHwgMHhEODAwLCBoaWdoICYgMHgzRkYgfCAweERDMDAgKTsKKyAgICB9LAorCisg
ICAgLy8gQ1NTIHN0cmluZy9pZGVudGlmaWVyIHNlcmlhbGl6YXRpb24KKyAgICAvLyBodHRwczov
L2RyYWZ0cy5jc3N3Zy5vcmcvY3Nzb20vI2NvbW1vbi1zZXJpYWxpemluZy1pZGlvbXMKKyAgICBy
Y3NzZXNjYXBlID0gLyhbXDAtXHgxZlx4N2ZdfF4tP1xkKXxeLSR8W15cMC1ceDFmXHg3Zi1cdUZG
RkZcdy1dL2csCisgICAgZmNzc2VzY2FwZSA9IGZ1bmN0aW9uKCBjaCwgYXNDb2RlUG9pbnQgKSB7
CisgICAgICAgIGlmICggYXNDb2RlUG9pbnQgKSB7CisKKyAgICAgICAgICAgIC8vIFUrMDAwMCBO
VUxMIGJlY29tZXMgVStGRkZEIFJFUExBQ0VNRU5UIENIQVJBQ1RFUgorICAgICAgICAgICAgaWYg
KCBjaCA9PT0gIlwwIiApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gIlx1RkZGRCI7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIENvbnRyb2wgY2hhcmFjdGVycyBhbmQgKGRlcGVu
ZGVudCB1cG9uIHBvc2l0aW9uKSBudW1iZXJzIGdldCBlc2NhcGVkIGFzIGNvZGUgcG9pbnRzCisg
ICAgICAgICAgICByZXR1cm4gY2guc2xpY2UoIDAsIC0xICkgKyAiXFwiICsgY2guY2hhckNvZGVB
dCggY2gubGVuZ3RoIC0gMSApLnRvU3RyaW5nKCAxNiApICsgIiAiOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gT3RoZXIgcG90ZW50aWFsbHktc3BlY2lhbCBBU0NJSSBjaGFyYWN0ZXJzIGdldCBi
YWNrc2xhc2gtZXNjYXBlZAorICAgICAgICByZXR1cm4gIlxcIiArIGNoOworICAgIH0sCisKKyAg
ICAvLyBVc2VkIGZvciBpZnJhbWVzCisgICAgLy8gU2VlIHNldERvY3VtZW50KCkKKyAgICAvLyBS
ZW1vdmluZyB0aGUgZnVuY3Rpb24gd3JhcHBlciBjYXVzZXMgYSAiUGVybWlzc2lvbiBEZW5pZWQi
CisgICAgLy8gZXJyb3IgaW4gSUUKKyAgICB1bmxvYWRIYW5kbGVyID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHNldERvY3VtZW50KCk7CisgICAgfSwKKworICAgIGRpc2FibGVkQW5jZXN0b3IgPSBh
ZGRDb21iaW5hdG9yKAorICAgICAgICBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIHJl
dHVybiBlbGVtLmRpc2FibGVkID09PSB0cnVlICYmICgiZm9ybSIgaW4gZWxlbSB8fCAibGFiZWwi
IGluIGVsZW0pOworICAgICAgICB9LAorICAgICAgICB7IGRpcjogInBhcmVudE5vZGUiLCBuZXh0
OiAibGVnZW5kIiB9CisgICAgKTsKKworLy8gT3B0aW1pemUgZm9yIHB1c2guYXBwbHkoIF8sIE5v
ZGVMaXN0ICkKK3RyeSB7CisgICAgcHVzaC5hcHBseSgKKyAgICAgICAgKGFyciA9IHNsaWNlLmNh
bGwoIHByZWZlcnJlZERvYy5jaGlsZE5vZGVzICkpLAorICAgICAgICBwcmVmZXJyZWREb2MuY2hp
bGROb2RlcworICAgICk7CisgICAgLy8gU3VwcG9ydDogQW5kcm9pZDw0LjAKKyAgICAvLyBEZXRl
Y3Qgc2lsZW50bHkgZmFpbGluZyBwdXNoLmFwcGx5CisgICAgYXJyWyBwcmVmZXJyZWREb2MuY2hp
bGROb2Rlcy5sZW5ndGggXS5ub2RlVHlwZTsKK30gY2F0Y2ggKCBlICkgeworICAgIHB1c2ggPSB7
IGFwcGx5OiBhcnIubGVuZ3RoID8KKworICAgICAgICAvLyBMZXZlcmFnZSBzbGljZSBpZiBwb3Nz
aWJsZQorICAgICAgICBmdW5jdGlvbiggdGFyZ2V0LCBlbHMgKSB7CisgICAgICAgICAgICBwdXNo
X25hdGl2ZS5hcHBseSggdGFyZ2V0LCBzbGljZS5jYWxsKGVscykgKTsKKyAgICAgICAgfSA6CisK
KyAgICAgICAgLy8gU3VwcG9ydDogSUU8OQorICAgICAgICAvLyBPdGhlcndpc2UgYXBwZW5kIGRp
cmVjdGx5CisgICAgICAgIGZ1bmN0aW9uKCB0YXJnZXQsIGVscyApIHsKKyAgICAgICAgICAgIHZh
ciBqID0gdGFyZ2V0Lmxlbmd0aCwKKyAgICAgICAgICAgICAgICBpID0gMDsKKyAgICAgICAgICAg
IC8vIENhbid0IHRydXN0IE5vZGVMaXN0Lmxlbmd0aAorICAgICAgICAgICAgd2hpbGUgKCAodGFy
Z2V0W2orK10gPSBlbHNbaSsrXSkgKSB7fQorICAgICAgICAgICAgdGFyZ2V0Lmxlbmd0aCA9IGog
LSAxOworICAgICAgICB9CisgICAgfTsKK30KKworZnVuY3Rpb24gU2l6emxlKCBzZWxlY3Rvciwg
Y29udGV4dCwgcmVzdWx0cywgc2VlZCApIHsKKyAgICB2YXIgbSwgaSwgZWxlbSwgbmlkLCBtYXRj
aCwgZ3JvdXBzLCBuZXdTZWxlY3RvciwKKyAgICAgICAgbmV3Q29udGV4dCA9IGNvbnRleHQgJiYg
Y29udGV4dC5vd25lckRvY3VtZW50LAorCisgICAgICAgIC8vIG5vZGVUeXBlIGRlZmF1bHRzIHRv
IDksIHNpbmNlIGNvbnRleHQgZGVmYXVsdHMgdG8gZG9jdW1lbnQKKyAgICAgICAgbm9kZVR5cGUg
PSBjb250ZXh0ID8gY29udGV4dC5ub2RlVHlwZSA6IDk7CisKKyAgICByZXN1bHRzID0gcmVzdWx0
cyB8fCBbXTsKKworICAgIC8vIFJldHVybiBlYXJseSBmcm9tIGNhbGxzIHdpdGggaW52YWxpZCBz
ZWxlY3RvciBvciBjb250ZXh0CisgICAgaWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09ICJzdHJpbmci
IHx8ICFzZWxlY3RvciB8fAorICAgICAgICBub2RlVHlwZSAhPT0gMSAmJiBub2RlVHlwZSAhPT0g
OSAmJiBub2RlVHlwZSAhPT0gMTEgKSB7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAg
fQorCisgICAgLy8gVHJ5IHRvIHNob3J0Y3V0IGZpbmQgb3BlcmF0aW9ucyAoYXMgb3Bwb3NlZCB0
byBmaWx0ZXJzKSBpbiBIVE1MIGRvY3VtZW50cworICAgIGlmICggIXNlZWQgKSB7CisKKyAgICAg
ICAgaWYgKCAoIGNvbnRleHQgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IHBy
ZWZlcnJlZERvYyApICE9PSBkb2N1bWVudCApIHsKKyAgICAgICAgICAgIHNldERvY3VtZW50KCBj
b250ZXh0ICk7CisgICAgICAgIH0KKyAgICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1l
bnQ7CisKKyAgICAgICAgaWYgKCBkb2N1bWVudElzSFRNTCApIHsKKworICAgICAgICAgICAgLy8g
SWYgdGhlIHNlbGVjdG9yIGlzIHN1ZmZpY2llbnRseSBzaW1wbGUsIHRyeSB1c2luZyBhICJnZXQq
QnkqIiBET00gbWV0aG9kCisgICAgICAgICAgICAvLyAoZXhjZXB0aW5nIERvY3VtZW50RnJhZ21l
bnQgY29udGV4dCwgd2hlcmUgdGhlIG1ldGhvZHMgZG9uJ3QgZXhpc3QpCisgICAgICAgICAgICBp
ZiAoIG5vZGVUeXBlICE9PSAxMSAmJiAobWF0Y2ggPSBycXVpY2tFeHByLmV4ZWMoIHNlbGVjdG9y
ICkpICkgeworCisgICAgICAgICAgICAgICAgLy8gSUQgc2VsZWN0b3IKKyAgICAgICAgICAgICAg
ICBpZiAoIChtID0gbWF0Y2hbMV0pICkgeworCisgICAgICAgICAgICAgICAgICAgIC8vIERvY3Vt
ZW50IGNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBub2RlVHlwZSA9PT0gOSApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRC
eUlkKCBtICkpICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDog
SUUsIE9wZXJhLCBXZWJraXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBp
ZGVudGlmeSB2ZXJzaW9ucworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdldEVsZW1l
bnRCeUlkIGNhbiBtYXRjaCBlbGVtZW50cyBieSBuYW1lIGluc3RlYWQgb2YgSUQKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0uaWQgPT09IG0gKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCggZWxlbSApOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgIC8vIEVsZW1lbnQgY29udGV4dAorICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBJRSwg
T3BlcmEsIFdlYmtpdAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogaWRlbnRpZnkg
dmVyc2lvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdldEVsZW1lbnRCeUlkIGNhbiBt
YXRjaCBlbGVtZW50cyBieSBuYW1lIGluc3RlYWQgb2YgSUQKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggbmV3Q29udGV4dCAmJiAoZWxlbSA9IG5ld0NvbnRleHQuZ2V0RWxlbWVudEJ5SWQo
IG0gKSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWlucyggY29udGV4dCwg
ZWxlbSApICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5pZCA9PT0gbSApIHsK
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCggZWxlbSApOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBU
eXBlIHNlbGVjdG9yCisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggbWF0Y2hbMl0gKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHB1c2guYXBwbHkoIHJlc3VsdHMsIGNvbnRleHQuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoIHNlbGVjdG9yICkgKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdHM7CisKKyAgICAgICAgICAgICAgICAvLyBDbGFzcyBzZWxlY3RvcgorICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoIChtID0gbWF0Y2hbM10pICYmIHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNs
YXNzTmFtZSAmJgorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFz
c05hbWUgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgcHVzaC5hcHBseSggcmVzdWx0cywgY29u
dGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBtICkgKTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdHM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAvLyBUYWtlIGFkdmFudGFnZSBvZiBxdWVyeVNlbGVjdG9yQWxsCisgICAgICAgICAg
ICBpZiAoIHN1cHBvcnQucXNhICYmCisgICAgICAgICAgICAgICAgIWNvbXBpbGVyQ2FjaGVbIHNl
bGVjdG9yICsgIiAiIF0gJiYKKyAgICAgICAgICAgICAgICAoIXJidWdneVFTQSB8fCAhcmJ1Z2d5
UVNBLnRlc3QoIHNlbGVjdG9yICkpICkgeworCisgICAgICAgICAgICAgICAgaWYgKCBub2RlVHlw
ZSAhPT0gMSApIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3Q29udGV4dCA9IGNvbnRleHQ7Cisg
ICAgICAgICAgICAgICAgICAgIG5ld1NlbGVjdG9yID0gc2VsZWN0b3I7CisKKyAgICAgICAgICAg
ICAgICAvLyBxU0EgbG9va3Mgb3V0c2lkZSBFbGVtZW50IGNvbnRleHQsIHdoaWNoIGlzIG5vdCB3
aGF0IHdlIHdhbnQKKyAgICAgICAgICAgICAgICAvLyBUaGFua3MgdG8gQW5kcmV3IER1cG9udCBm
b3IgdGhpcyB3b3JrYXJvdW5kIHRlY2huaXF1ZQorICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6
IElFIDw9OAorICAgICAgICAgICAgICAgIC8vIEV4Y2x1ZGUgb2JqZWN0IGVsZW1lbnRzCisgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmICggY29udGV4dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9
PSAib2JqZWN0IiApIHsKKworICAgICAgICAgICAgICAgICAgICAvLyBDYXB0dXJlIHRoZSBjb250
ZXh0IElELCBzZXR0aW5nIGl0IGZpcnN0IGlmIG5lY2Vzc2FyeQorICAgICAgICAgICAgICAgICAg
ICBpZiAoIChuaWQgPSBjb250ZXh0LmdldEF0dHJpYnV0ZSggImlkIiApKSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG5pZCA9IG5pZC5yZXBsYWNlKCByY3NzZXNjYXBlLCBmY3NzZXNjYXBl
ICk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LnNldEF0dHJpYnV0ZSggImlkIiwgKG5pZCA9IGV4cGFuZG8pICk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBQcmVmaXggZXZlcnkgc2Vs
ZWN0b3IgaW4gdGhlIGxpc3QKKyAgICAgICAgICAgICAgICAgICAgZ3JvdXBzID0gdG9rZW5pemUo
IHNlbGVjdG9yICk7CisgICAgICAgICAgICAgICAgICAgIGkgPSBncm91cHMubGVuZ3RoOworICAg
ICAgICAgICAgICAgICAgICB3aGlsZSAoIGktLSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGdyb3Vwc1tpXSA9ICIjIiArIG5pZCArICIgIiArIHRvU2VsZWN0b3IoIGdyb3Vwc1tpXSApOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG5ld1NlbGVjdG9yID0g
Z3JvdXBzLmpvaW4oICIsIiApOworCisgICAgICAgICAgICAgICAgICAgIC8vIEV4cGFuZCBjb250
ZXh0IGZvciBzaWJsaW5nIHNlbGVjdG9ycworICAgICAgICAgICAgICAgICAgICBuZXdDb250ZXh0
ID0gcnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJl
bnROb2RlICkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCBuZXdTZWxlY3RvciApIHsKKyAgICAgICAg
ICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2guYXBwbHkoIHJl
c3VsdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29udGV4dC5xdWVyeVNlbGVj
dG9yQWxsKCBuZXdTZWxlY3RvciApCisgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICAgICAgICAgICAgICAgIH0g
Y2F0Y2ggKCBxc2FFcnJvciApIHsKKyAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggbmlkID09PSBleHBhbmRvICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVtb3ZlQXR0cmlidXRlKCAiaWQiICk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBBbGwgb3Ro
ZXJzCisgICAgcmV0dXJuIHNlbGVjdCggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sICIkMSIgKSwg
Y29udGV4dCwgcmVzdWx0cywgc2VlZCApOworfQorCisvKioKKyAqIENyZWF0ZSBrZXktdmFsdWUg
Y2FjaGVzIG9mIGxpbWl0ZWQgc2l6ZQorICogQHJldHVybnMge2Z1bmN0aW9uKHN0cmluZywgb2Jq
ZWN0KX0gUmV0dXJucyB0aGUgT2JqZWN0IGRhdGEgYWZ0ZXIgc3RvcmluZyBpdCBvbiBpdHNlbGYg
d2l0aAorICogIHByb3BlcnR5IG5hbWUgdGhlIChzcGFjZS1zdWZmaXhlZCkgc3RyaW5nIGFuZCAo
aWYgdGhlIGNhY2hlIGlzIGxhcmdlciB0aGFuIEV4cHIuY2FjaGVMZW5ndGgpCisgKiAgZGVsZXRp
bmcgdGhlIG9sZGVzdCBlbnRyeQorICovCitmdW5jdGlvbiBjcmVhdGVDYWNoZSgpIHsKKyAgICB2
YXIga2V5cyA9IFtdOworCisgICAgZnVuY3Rpb24gY2FjaGUoIGtleSwgdmFsdWUgKSB7CisgICAg
ICAgIC8vIFVzZSAoa2V5ICsgIiAiKSB0byBhdm9pZCBjb2xsaXNpb24gd2l0aCBuYXRpdmUgcHJv
dG90eXBlIHByb3BlcnRpZXMgKHNlZSBJc3N1ZSAjMTU3KQorICAgICAgICBpZiAoIGtleXMucHVz
aCgga2V5ICsgIiAiICkgPiBFeHByLmNhY2hlTGVuZ3RoICkgeworICAgICAgICAgICAgLy8gT25s
eSBrZWVwIHRoZSBtb3N0IHJlY2VudCBlbnRyaWVzCisgICAgICAgICAgICBkZWxldGUgY2FjaGVb
IGtleXMuc2hpZnQoKSBdOworICAgICAgICB9CisgICAgICAgIHJldHVybiAoY2FjaGVbIGtleSAr
ICIgIiBdID0gdmFsdWUpOworICAgIH0KKyAgICByZXR1cm4gY2FjaGU7Cit9CisKKy8qKgorICog
TWFyayBhIGZ1bmN0aW9uIGZvciBzcGVjaWFsIHVzZSBieSBTaXp6bGUKKyAqIEBwYXJhbSB7RnVu
Y3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBtYXJrCisgKi8KK2Z1bmN0aW9uIG1hcmtGdW5jdGlv
biggZm4gKSB7CisgICAgZm5bIGV4cGFuZG8gXSA9IHRydWU7CisgICAgcmV0dXJuIGZuOworfQor
CisvKioKKyAqIFN1cHBvcnQgdGVzdGluZyB1c2luZyBhbiBlbGVtZW50CisgKiBAcGFyYW0ge0Z1
bmN0aW9ufSBmbiBQYXNzZWQgdGhlIGNyZWF0ZWQgZWxlbWVudCBhbmQgcmV0dXJucyBhIGJvb2xl
YW4gcmVzdWx0CisgKi8KK2Z1bmN0aW9uIGFzc2VydCggZm4gKSB7CisgICAgdmFyIGVsID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiZmllbGRzZXQiKTsKKworICAgIHRyeSB7CisgICAgICAgIHJl
dHVybiAhIWZuKCBlbCApOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0gZmluYWxseSB7CisgICAgICAgIC8vIFJlbW92ZSBmcm9tIGl0cyBwYXJlbnQgYnkg
ZGVmYXVsdAorICAgICAgICBpZiAoIGVsLnBhcmVudE5vZGUgKSB7CisgICAgICAgICAgICBlbC5w
YXJlbnROb2RlLnJlbW92ZUNoaWxkKCBlbCApOworICAgICAgICB9CisgICAgICAgIC8vIHJlbGVh
c2UgbWVtb3J5IGluIElFCisgICAgICAgIGVsID0gbnVsbDsKKyAgICB9Cit9CisKKy8qKgorICog
QWRkcyB0aGUgc2FtZSBoYW5kbGVyIGZvciBhbGwgb2YgdGhlIHNwZWNpZmllZCBhdHRycworICog
QHBhcmFtIHtTdHJpbmd9IGF0dHJzIFBpcGUtc2VwYXJhdGVkIGxpc3Qgb2YgYXR0cmlidXRlcwor
ICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciBUaGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBhcHBs
aWVkCisgKi8KK2Z1bmN0aW9uIGFkZEhhbmRsZSggYXR0cnMsIGhhbmRsZXIgKSB7CisgICAgdmFy
IGFyciA9IGF0dHJzLnNwbGl0KCJ8IiksCisgICAgICAgIGkgPSBhcnIubGVuZ3RoOworCisgICAg
d2hpbGUgKCBpLS0gKSB7CisgICAgICAgIEV4cHIuYXR0ckhhbmRsZVsgYXJyW2ldIF0gPSBoYW5k
bGVyOworICAgIH0KK30KKworLyoqCisgKiBDaGVja3MgZG9jdW1lbnQgb3JkZXIgb2YgdHdvIHNp
YmxpbmdzCisgKiBAcGFyYW0ge0VsZW1lbnR9IGEKKyAqIEBwYXJhbSB7RWxlbWVudH0gYgorICog
QHJldHVybnMge051bWJlcn0gUmV0dXJucyBsZXNzIHRoYW4gMCBpZiBhIHByZWNlZGVzIGIsIGdy
ZWF0ZXIgdGhhbiAwIGlmIGEgZm9sbG93cyBiCisgKi8KK2Z1bmN0aW9uIHNpYmxpbmdDaGVjaygg
YSwgYiApIHsKKyAgICB2YXIgY3VyID0gYiAmJiBhLAorICAgICAgICBkaWZmID0gY3VyICYmIGEu
bm9kZVR5cGUgPT09IDEgJiYgYi5ub2RlVHlwZSA9PT0gMSAmJgorICAgICAgICAgICAgYS5zb3Vy
Y2VJbmRleCAtIGIuc291cmNlSW5kZXg7CisKKyAgICAvLyBVc2UgSUUgc291cmNlSW5kZXggaWYg
YXZhaWxhYmxlIG9uIGJvdGggbm9kZXMKKyAgICBpZiAoIGRpZmYgKSB7CisgICAgICAgIHJldHVy
biBkaWZmOworICAgIH0KKworICAgIC8vIENoZWNrIGlmIGIgZm9sbG93cyBhCisgICAgaWYgKCBj
dXIgKSB7CisgICAgICAgIHdoaWxlICggKGN1ciA9IGN1ci5uZXh0U2libGluZykgKSB7CisgICAg
ICAgICAgICBpZiAoIGN1ciA9PT0gYiApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gYSA/IDEgOiAtMTsK
K30KKworLyoqCisgKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGlu
cHV0IHR5cGVzCisgKiBAcGFyYW0ge1N0cmluZ30gdHlwZQorICovCitmdW5jdGlvbiBjcmVhdGVJ
bnB1dFBzZXVkbyggdHlwZSApIHsKKyAgICByZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7CisgICAg
ICAgIHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOworICAgICAgICByZXR1
cm4gbmFtZSA9PT0gImlucHV0IiAmJiBlbGVtLnR5cGUgPT09IHR5cGU7CisgICAgfTsKK30KKwor
LyoqCisgKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGJ1dHRvbnMK
KyAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlCisgKi8KK2Z1bmN0aW9uIGNyZWF0ZUJ1dHRvblBzZXVk
byggdHlwZSApIHsKKyAgICByZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgIHZhciBu
YW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOworICAgICAgICByZXR1cm4gKG5hbWUg
PT09ICJpbnB1dCIgfHwgbmFtZSA9PT0gImJ1dHRvbiIpICYmIGVsZW0udHlwZSA9PT0gdHlwZTsK
KyAgICB9OworfQorCisvKioKKyAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRv
cyBmb3IgOmVuYWJsZWQvOmRpc2FibGVkCisgKiBAcGFyYW0ge0Jvb2xlYW59IGRpc2FibGVkIHRy
dWUgZm9yIDpkaXNhYmxlZDsgZmFsc2UgZm9yIDplbmFibGVkCisgKi8KK2Z1bmN0aW9uIGNyZWF0
ZURpc2FibGVkUHNldWRvKCBkaXNhYmxlZCApIHsKKworICAgIC8vIEtub3duIDpkaXNhYmxlZCBm
YWxzZSBwb3NpdGl2ZXM6IGZpZWxkc2V0W2Rpc2FibGVkXSA+IGxlZ2VuZDpudGgtb2YtdHlwZShu
KzIpIDpjYW4tZGlzYWJsZQorICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKKworICAgICAg
ICAvLyBPbmx5IGNlcnRhaW4gZWxlbWVudHMgY2FuIG1hdGNoIDplbmFibGVkIG9yIDpkaXNhYmxl
ZAorICAgICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zY3Jp
cHRpbmcuaHRtbCNzZWxlY3Rvci1lbmFibGVkCisgICAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVj
LndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NjcmlwdGluZy5odG1sI3NlbGVjdG9yLWRpc2FibGVkCisg
ICAgICAgIGlmICggImZvcm0iIGluIGVsZW0gKSB7CisKKyAgICAgICAgICAgIC8vIENoZWNrIGZv
ciBpbmhlcml0ZWQgZGlzYWJsZWRuZXNzIG9uIHJlbGV2YW50IG5vbi1kaXNhYmxlZCBlbGVtZW50
czoKKyAgICAgICAgICAgIC8vICogbGlzdGVkIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50cyBpbiBh
IGRpc2FibGVkIGZpZWxkc2V0CisgICAgICAgICAgICAvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndo
YXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY2F0ZWdvcnktbGlzdGVkCisgICAgICAgICAg
ICAvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwj
Y29uY2VwdC1mZS1kaXNhYmxlZAorICAgICAgICAgICAgLy8gKiBvcHRpb24gZWxlbWVudHMgaW4g
YSBkaXNhYmxlZCBvcHRncm91cAorICAgICAgICAgICAgLy8gICBodHRwczovL2h0bWwuc3BlYy53
aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NvbmNlcHQtb3B0aW9uLWRpc2FibGVkCisg
ICAgICAgICAgICAvLyBBbGwgc3VjaCBlbGVtZW50cyBoYXZlIGEgImZvcm0iIHByb3BlcnR5Lgor
ICAgICAgICAgICAgaWYgKCBlbGVtLnBhcmVudE5vZGUgJiYgZWxlbS5kaXNhYmxlZCA9PT0gZmFs
c2UgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBPcHRpb24gZWxlbWVudHMgZGVmZXIgdG8gYSBw
YXJlbnQgb3B0Z3JvdXAgaWYgcHJlc2VudAorICAgICAgICAgICAgICAgIGlmICggImxhYmVsIiBp
biBlbGVtICkgeworICAgICAgICAgICAgICAgICAgICBpZiAoICJsYWJlbCIgaW4gZWxlbS5wYXJl
bnROb2RlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0ucGFyZW50Tm9k
ZS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAvLyBTdXBwb3J0OiBJRSA2IC0gMTEKKyAgICAgICAgICAgICAgICAvLyBVc2UgdGhlIGlz
RGlzYWJsZWQgc2hvcnRjdXQgcHJvcGVydHkgdG8gY2hlY2sgZm9yIGRpc2FibGVkIGZpZWxkc2V0
IGFuY2VzdG9ycworICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLmlzRGlzYWJsZWQgPT09IGRp
c2FibGVkIHx8CisKKyAgICAgICAgICAgICAgICAgICAgLy8gV2hlcmUgdGhlcmUgaXMgbm8gaXNE
aXNhYmxlZCwgY2hlY2sgbWFudWFsbHkKKyAgICAgICAgICAgICAgICAgICAgLyoganNoaW50IC1X
MDE4ICovCisgICAgICAgICAgICAgICAgICAgIGVsZW0uaXNEaXNhYmxlZCAhPT0gIWRpc2FibGVk
ICYmCisgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZEFuY2VzdG9yKCBlbGVtICkgPT09
IGRpc2FibGVkOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gZWxlbS5kaXNh
YmxlZCA9PT0gZGlzYWJsZWQ7CisKKyAgICAgICAgLy8gVHJ5IHRvIHdpbm5vdyBvdXQgZWxlbWVu
dHMgdGhhdCBjYW4ndCBiZSBkaXNhYmxlZCBiZWZvcmUgdHJ1c3RpbmcgdGhlIGRpc2FibGVkIHBy
b3BlcnR5LgorICAgICAgICAvLyBTb21lIHZpY3RpbXMgZ2V0IGNhdWdodCBpbiBvdXIgbmV0IChs
YWJlbCwgbGVnZW5kLCBtZW51LCB0cmFjayksIGJ1dCBpdCBzaG91bGRuJ3QKKyAgICAgICAgLy8g
ZXZlbiBleGlzdCBvbiB0aGVtLCBsZXQgYWxvbmUgaGF2ZSBhIGJvb2xlYW4gdmFsdWUuCisgICAg
ICAgIH0gZWxzZSBpZiAoICJsYWJlbCIgaW4gZWxlbSApIHsKKyAgICAgICAgICAgIHJldHVybiBl
bGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFJlbWFp
bmluZyBlbGVtZW50cyBhcmUgbmVpdGhlciA6ZW5hYmxlZCBub3IgOmRpc2FibGVkCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9OworfQorCisvKioKKyAqIFJldHVybnMgYSBmdW5jdGlvbiB0
byB1c2UgaW4gcHNldWRvcyBmb3IgcG9zaXRpb25hbHMKKyAqIEBwYXJhbSB7RnVuY3Rpb259IGZu
CisgKi8KK2Z1bmN0aW9uIGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZuICkgeworICAgIHJldHVy
biBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIGFyZ3VtZW50ICkgeworICAgICAgICBhcmd1bWVudCA9
ICthcmd1bWVudDsKKyAgICAgICAgcmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwg
bWF0Y2hlcyApIHsKKyAgICAgICAgICAgIHZhciBqLAorICAgICAgICAgICAgICAgIG1hdGNoSW5k
ZXhlcyA9IGZuKCBbXSwgc2VlZC5sZW5ndGgsIGFyZ3VtZW50ICksCisgICAgICAgICAgICAgICAg
aSA9IG1hdGNoSW5kZXhlcy5sZW5ndGg7CisKKyAgICAgICAgICAgIC8vIE1hdGNoIGVsZW1lbnRz
IGZvdW5kIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhlcworICAgICAgICAgICAgd2hpbGUgKCBpLS0g
KSB7CisgICAgICAgICAgICAgICAgaWYgKCBzZWVkWyAoaiA9IG1hdGNoSW5kZXhlc1tpXSkgXSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgc2VlZFtqXSA9ICEobWF0Y2hlc1tqXSA9IHNlZWRbal0p
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfSk7
Cit9CisKKy8qKgorICogQ2hlY2tzIGEgbm9kZSBmb3IgdmFsaWRpdHkgYXMgYSBTaXp6bGUgY29u
dGV4dAorICogQHBhcmFtIHtFbGVtZW50fE9iamVjdD19IGNvbnRleHQKKyAqIEByZXR1cm5zIHtF
bGVtZW50fE9iamVjdHxCb29sZWFufSBUaGUgaW5wdXQgbm9kZSBpZiBhY2NlcHRhYmxlLCBvdGhl
cndpc2UgYSBmYWxzeSB2YWx1ZQorICovCitmdW5jdGlvbiB0ZXN0Q29udGV4dCggY29udGV4dCAp
IHsKKyAgICByZXR1cm4gY29udGV4dCAmJiB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFn
TmFtZSAhPT0gInVuZGVmaW5lZCIgJiYgY29udGV4dDsKK30KKworLy8gRXhwb3NlIHN1cHBvcnQg
dmFycyBmb3IgY29udmVuaWVuY2UKK3N1cHBvcnQgPSBTaXp6bGUuc3VwcG9ydCA9IHt9OworCisv
KioKKyAqIERldGVjdHMgWE1MIG5vZGVzCisgKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBlbGVt
IEFuIGVsZW1lbnQgb3IgYSBkb2N1bWVudAorICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWZm
IGVsZW0gaXMgYSBub24tSFRNTCBYTUwgbm9kZQorICovCitpc1hNTCA9IFNpenpsZS5pc1hNTCA9
IGZ1bmN0aW9uKCBlbGVtICkgeworICAgIC8vIGRvY3VtZW50RWxlbWVudCBpcyB2ZXJpZmllZCBm
b3IgY2FzZXMgd2hlcmUgaXQgZG9lc24ndCB5ZXQgZXhpc3QKKyAgICAvLyAoc3VjaCBhcyBsb2Fk
aW5nIGlmcmFtZXMgaW4gSUUgLSAjNDgzMykKKyAgICB2YXIgZG9jdW1lbnRFbGVtZW50ID0gZWxl
bSAmJiAoZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0pLmRvY3VtZW50RWxlbWVudDsKKyAgICBy
ZXR1cm4gZG9jdW1lbnRFbGVtZW50ID8gZG9jdW1lbnRFbGVtZW50Lm5vZGVOYW1lICE9PSAiSFRN
TCIgOiBmYWxzZTsKK307CisKKy8qKgorICogU2V0cyBkb2N1bWVudC1yZWxhdGVkIHZhcmlhYmxl
cyBvbmNlIGJhc2VkIG9uIHRoZSBjdXJyZW50IGRvY3VtZW50CisgKiBAcGFyYW0ge0VsZW1lbnR8
T2JqZWN0fSBbZG9jXSBBbiBlbGVtZW50IG9yIGRvY3VtZW50IG9iamVjdCB0byB1c2UgdG8gc2V0
IHRoZSBkb2N1bWVudAorICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY3VycmVudCBk
b2N1bWVudAorICovCitzZXREb2N1bWVudCA9IFNpenpsZS5zZXREb2N1bWVudCA9IGZ1bmN0aW9u
KCBub2RlICkgeworICAgIHZhciBoYXNDb21wYXJlLCBzdWJXaW5kb3csCisgICAgICAgIGRvYyA9
IG5vZGUgPyBub2RlLm93bmVyRG9jdW1lbnQgfHwgbm9kZSA6IHByZWZlcnJlZERvYzsKKworICAg
IC8vIFJldHVybiBlYXJseSBpZiBkb2MgaXMgaW52YWxpZCBvciBhbHJlYWR5IHNlbGVjdGVkCisg
ICAgaWYgKCBkb2MgPT09IGRvY3VtZW50IHx8IGRvYy5ub2RlVHlwZSAhPT0gOSB8fCAhZG9jLmRv
Y3VtZW50RWxlbWVudCApIHsKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50OworICAgIH0KKworICAg
IC8vIFVwZGF0ZSBnbG9iYWwgdmFyaWFibGVzCisgICAgZG9jdW1lbnQgPSBkb2M7CisgICAgZG9j
RWxlbSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKKyAgICBkb2N1bWVudElzSFRNTCA9ICFp
c1hNTCggZG9jdW1lbnQgKTsKKworICAgIC8vIFN1cHBvcnQ6IElFIDktMTEsIEVkZ2UKKyAgICAv
LyBBY2Nlc3NpbmcgaWZyYW1lIGRvY3VtZW50cyBhZnRlciB1bmxvYWQgdGhyb3dzICJwZXJtaXNz
aW9uIGRlbmllZCIgZXJyb3JzIChqUXVlcnkgIzEzOTM2KQorICAgIGlmICggcHJlZmVycmVkRG9j
ICE9PSBkb2N1bWVudCAmJgorICAgICAgICAoc3ViV2luZG93ID0gZG9jdW1lbnQuZGVmYXVsdFZp
ZXcpICYmIHN1YldpbmRvdy50b3AgIT09IHN1YldpbmRvdyApIHsKKworICAgICAgICAvLyBTdXBw
b3J0OiBJRSAxMSwgRWRnZQorICAgICAgICBpZiAoIHN1YldpbmRvdy5hZGRFdmVudExpc3RlbmVy
ICkgeworICAgICAgICAgICAgc3ViV2luZG93LmFkZEV2ZW50TGlzdGVuZXIoICJ1bmxvYWQiLCB1
bmxvYWRIYW5kbGVyLCBmYWxzZSApOworCisgICAgICAgIC8vIFN1cHBvcnQ6IElFIDkgLSAxMCBv
bmx5CisgICAgICAgIH0gZWxzZSBpZiAoIHN1YldpbmRvdy5hdHRhY2hFdmVudCApIHsKKyAgICAg
ICAgICAgIHN1YldpbmRvdy5hdHRhY2hFdmVudCggIm9udW5sb2FkIiwgdW5sb2FkSGFuZGxlciAp
OworICAgICAgICB9CisgICAgfQorCisgICAgLyogQXR0cmlidXRlcworICAgIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gKi8KKworICAgIC8vIFN1cHBvcnQ6IElFPDgKKyAgICAvLyBWZXJpZnkgdGhhdCBnZXRBdHRy
aWJ1dGUgcmVhbGx5IHJldHVybnMgYXR0cmlidXRlcyBhbmQgbm90IHByb3BlcnRpZXMKKyAgICAv
LyAoZXhjZXB0aW5nIElFOCBib29sZWFucykKKyAgICBzdXBwb3J0LmF0dHJpYnV0ZXMgPSBhc3Nl
cnQoZnVuY3Rpb24oIGVsICkgeworICAgICAgICBlbC5jbGFzc05hbWUgPSAiaSI7CisgICAgICAg
IHJldHVybiAhZWwuZ2V0QXR0cmlidXRlKCJjbGFzc05hbWUiKTsKKyAgICB9KTsKKworICAgIC8q
IGdldEVsZW1lbnQocylCeSoKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyAgICAvLyBDaGVjayBp
ZiBnZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpIHJldHVybnMgb25seSBlbGVtZW50cworICAgIHN1
cHBvcnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPSBhc3NlcnQoZnVuY3Rpb24oIGVsICkgeworICAg
ICAgICBlbC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgiIikgKTsKKyAgICAg
ICAgcmV0dXJuICFlbC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aDsKKyAgICB9KTsK
KworICAgIC8vIFN1cHBvcnQ6IElFPDkKKyAgICBzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05h
bWUgPSBybmF0aXZlLnRlc3QoIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKTsKKwor
ICAgIC8vIFN1cHBvcnQ6IElFPDEwCisgICAgLy8gQ2hlY2sgaWYgZ2V0RWxlbWVudEJ5SWQgcmV0
dXJucyBlbGVtZW50cyBieSBuYW1lCisgICAgLy8gVGhlIGJyb2tlbiBnZXRFbGVtZW50QnlJZCBt
ZXRob2RzIGRvbid0IHBpY2sgdXAgcHJvZ3JhbW1hdGljYWxseS1zZXQgbmFtZXMsCisgICAgLy8g
c28gdXNlIGEgcm91bmRhYm91dCBnZXRFbGVtZW50c0J5TmFtZSB0ZXN0CisgICAgc3VwcG9ydC5n
ZXRCeUlkID0gYXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHsKKyAgICAgICAgZG9jRWxlbS5hcHBlbmRD
aGlsZCggZWwgKS5pZCA9IGV4cGFuZG87CisgICAgICAgIHJldHVybiAhZG9jdW1lbnQuZ2V0RWxl
bWVudHNCeU5hbWUgfHwgIWRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCBleHBhbmRvICkubGVu
Z3RoOworICAgIH0pOworCisgICAgLy8gSUQgZmlsdGVyIGFuZCBmaW5kCisgICAgaWYgKCBzdXBw
b3J0LmdldEJ5SWQgKSB7CisgICAgICAgIEV4cHIuZmlsdGVyWyJJRCJdID0gZnVuY3Rpb24oIGlk
ICkgeworICAgICAgICAgICAgdmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVu
ZXNjYXBlICk7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCJpZCIpID09PSBhdHRySWQ7CisgICAg
ICAgICAgICB9OworICAgICAgICB9OworICAgICAgICBFeHByLmZpbmRbIklEIl0gPSBmdW5jdGlv
biggaWQsIGNvbnRleHQgKSB7CisgICAgICAgICAgICBpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVs
ZW1lbnRCeUlkICE9PSAidW5kZWZpbmVkIiAmJiBkb2N1bWVudElzSFRNTCApIHsKKyAgICAgICAg
ICAgICAgICB2YXIgZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVsZW0gPyBbIGVsZW0gXSA6IFtdOworICAgICAgICAgICAgfQorICAg
ICAgICB9OworICAgIH0gZWxzZSB7CisgICAgICAgIEV4cHIuZmlsdGVyWyJJRCJdID0gIGZ1bmN0
aW9uKCBpZCApIHsKKyAgICAgICAgICAgIHZhciBhdHRySWQgPSBpZC5yZXBsYWNlKCBydW5lc2Nh
cGUsIGZ1bmVzY2FwZSApOworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgewor
ICAgICAgICAgICAgICAgIHZhciBub2RlID0gdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSAh
PT0gInVuZGVmaW5lZCIgJiYKKyAgICAgICAgICAgICAgICAgICAgZWxlbS5nZXRBdHRyaWJ1dGVO
b2RlKCJpZCIpOworICAgICAgICAgICAgICAgIHJldHVybiBub2RlICYmIG5vZGUudmFsdWUgPT09
IGF0dHJJZDsKKyAgICAgICAgICAgIH07CisgICAgICAgIH07CisKKyAgICAgICAgLy8gU3VwcG9y
dDogSUUgNiAtIDcgb25seQorICAgICAgICAvLyBnZXRFbGVtZW50QnlJZCBpcyBub3QgcmVsaWFi
bGUgYXMgYSBmaW5kIHNob3J0Y3V0CisgICAgICAgIEV4cHIuZmluZFsiSUQiXSA9IGZ1bmN0aW9u
KCBpZCwgY29udGV4dCApIHsKKyAgICAgICAgICAgIGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxl
bWVudEJ5SWQgIT09ICJ1bmRlZmluZWQiICYmIGRvY3VtZW50SXNIVE1MICkgeworICAgICAgICAg
ICAgICAgIHZhciBub2RlLCBpLCBlbGVtcywKKyAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGNv
bnRleHQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7CisKKyAgICAgICAgICAgICAgICBpZiAoIGVsZW0g
KSB7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gVmVyaWZ5IHRoZSBpZCBhdHRyaWJ1dGUKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCBub2RlICYmIG5vZGUudmFsdWUgPT09IGlkICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsgZWxlbSBdOworICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gRmFsbCBiYWNrIG9uIGdldEVsZW1lbnRzQnlO
YW1lCisgICAgICAgICAgICAgICAgICAgIGVsZW1zID0gY29udGV4dC5nZXRFbGVtZW50c0J5TmFt
ZSggaWQgKTsKKyAgICAgICAgICAgICAgICAgICAgaSA9IDA7CisgICAgICAgICAgICAgICAgICAg
IHdoaWxlICggKGVsZW0gPSBlbGVtc1tpKytdKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoImlkIik7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gaWQgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFsgZWxlbSBdOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgcmV0dXJuIFtdOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKworICAgIC8v
IFRhZworICAgIEV4cHIuZmluZFsiVEFHIl0gPSBzdXBwb3J0LmdldEVsZW1lbnRzQnlUYWdOYW1l
ID8KKyAgICAgICAgZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHsKKyAgICAgICAgICAgIGlmICgg
dHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09ICJ1bmRlZmluZWQiICkgewor
ICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcg
KTsKKworICAgICAgICAgICAgLy8gRG9jdW1lbnRGcmFnbWVudCBub2RlcyBkb24ndCBoYXZlIGdF
QlROCisgICAgICAgICAgICB9IGVsc2UgaWYgKCBzdXBwb3J0LnFzYSApIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCB0YWcgKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSA6CisKKyAgICAgICAgZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHsKKyAg
ICAgICAgICAgIHZhciBlbGVtLAorICAgICAgICAgICAgICAgIHRtcCA9IFtdLAorICAgICAgICAg
ICAgICAgIGkgPSAwLAorICAgICAgICAgICAgICAgIC8vIEJ5IGhhcHB5IGNvaW5jaWRlbmNlLCBh
IChicm9rZW4pIGdFQlROIGFwcGVhcnMgb24gRG9jdW1lbnRGcmFnbWVudCBub2RlcyB0b28KKyAg
ICAgICAgICAgICAgICByZXN1bHRzID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFn
ICk7CisKKyAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgcG9zc2libGUgY29tbWVudHMKKyAgICAg
ICAgICAgIGlmICggdGFnID09PSAiKiIgKSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKCAoZWxl
bSA9IHJlc3VsdHNbaSsrXSkgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2Rl
VHlwZSA9PT0gMSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcC5wdXNoKCBlbGVtICk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdG1wOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dHM7CisgICAgICAgIH07CisKKyAgICAvLyBDbGFzcworICAgIEV4cHIuZmluZFsiQ0xBU1MiXSA9
IHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJiBmdW5jdGlvbiggY2xhc3NOYW1lLCBj
b250ZXh0ICkgeworICAgICAgICBpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFz
c05hbWUgIT09ICJ1bmRlZmluZWQiICYmIGRvY3VtZW50SXNIVE1MICkgeworICAgICAgICAgICAg
cmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggY2xhc3NOYW1lICk7CisgICAg
ICAgIH0KKyAgICB9OworCisgICAgLyogUVNBL21hdGNoZXNTZWxlY3RvcgorICAgIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0gKi8KKworICAgIC8vIFFTQSBhbmQgbWF0Y2hlc1NlbGVjdG9yIHN1cHBvcnQKKworICAg
IC8vIG1hdGNoZXNTZWxlY3Rvcig6YWN0aXZlKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoSUU5
L09wZXJhIDExLjUpCisgICAgcmJ1Z2d5TWF0Y2hlcyA9IFtdOworCisgICAgLy8gcVNhKDpmb2N1
cykgcmVwb3J0cyBmYWxzZSB3aGVuIHRydWUgKENocm9tZSAyMSkKKyAgICAvLyBXZSBhbGxvdyB0
aGlzIGJlY2F1c2Ugb2YgYSBidWcgaW4gSUU4LzkgdGhhdCB0aHJvd3MgYW4gZXJyb3IKKyAgICAv
LyB3aGVuZXZlciBgZG9jdW1lbnQuYWN0aXZlRWxlbWVudGAgaXMgYWNjZXNzZWQgb24gYW4gaWZy
YW1lCisgICAgLy8gU28sIHdlIGFsbG93IDpmb2N1cyB0byBwYXNzIHRocm91Z2ggUVNBIGFsbCB0
aGUgdGltZSB0byBhdm9pZCB0aGUgSUUgZXJyb3IKKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLmpx
dWVyeS5jb20vdGlja2V0LzEzMzc4CisgICAgcmJ1Z2d5UVNBID0gW107CisKKyAgICBpZiAoIChz
dXBwb3J0LnFzYSA9IHJuYXRpdmUudGVzdCggZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCApKSAp
IHsKKyAgICAgICAgLy8gQnVpbGQgUVNBIHJlZ2V4CisgICAgICAgIC8vIFJlZ2V4IHN0cmF0ZWd5
IGFkb3B0ZWQgZnJvbSBEaWVnbyBQZXJpbmkKKyAgICAgICAgYXNzZXJ0KGZ1bmN0aW9uKCBlbCAp
IHsKKyAgICAgICAgICAgIC8vIFNlbGVjdCBpcyBzZXQgdG8gZW1wdHkgc3RyaW5nIG9uIHB1cnBv
c2UKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgdG8gdGVzdCBJRSdzIHRyZWF0bWVudCBvZiBub3Qg
ZXhwbGljaXRseQorICAgICAgICAgICAgLy8gc2V0dGluZyBhIGJvb2xlYW4gY29udGVudCBhdHRy
aWJ1dGUsCisgICAgICAgICAgICAvLyBzaW5jZSBpdHMgcHJlc2VuY2Ugc2hvdWxkIGJlIGVub3Vn
aAorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEyMzU5Cisg
ICAgICAgICAgICBkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmlubmVySFRNTCA9ICI8YSBpZD0n
IiArIGV4cGFuZG8gKyAiJz48L2E+IiArCisgICAgICAgICAgICAgICAgIjxzZWxlY3QgaWQ9JyIg
KyBleHBhbmRvICsgIi1cclxcJyBtc2FsbG93Y2FwdHVyZT0nJz4iICsKKyAgICAgICAgICAgICAg
ICAiPG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iOworCisgICAgICAgICAg
ICAvLyBTdXBwb3J0OiBJRTgsIE9wZXJhIDExLTEyLjE2CisgICAgICAgICAgICAvLyBOb3RoaW5n
IHNob3VsZCBiZSBzZWxlY3RlZCB3aGVuIGVtcHR5IHN0cmluZ3MgZm9sbG93IF49IG9yICQ9IG9y
ICo9CisgICAgICAgICAgICAvLyBUaGUgdGVzdCBhdHRyaWJ1dGUgbXVzdCBiZSB1bmtub3duIGlu
IE9wZXJhIGJ1dCAic2FmZSIgZm9yIFdpblJUCisgICAgICAgICAgICAvLyBodHRwczovL21zZG4u
bWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2llL2hoNDY1Mzg4LmFzcHgjYXR0cmlidXRlX3Nl
Y3Rpb24KKyAgICAgICAgICAgIGlmICggZWwucXVlcnlTZWxlY3RvckFsbCgiW21zYWxsb3djYXB0
dXJlXj0nJ10iKS5sZW5ndGggKSB7CisgICAgICAgICAgICAgICAgcmJ1Z2d5UVNBLnB1c2goICJb
Kl4kXT0iICsgd2hpdGVzcGFjZSArICIqKD86Jyd8XCJcIikiICk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIFN1cHBvcnQ6IElFOAorICAgICAgICAgICAgLy8gQm9vbGVhbiBhdHRy
aWJ1dGVzIGFuZCAidmFsdWUiIGFyZSBub3QgdHJlYXRlZCBjb3JyZWN0bHkKKyAgICAgICAgICAg
IGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIltzZWxlY3RlZF0iKS5sZW5ndGggKSB7CisgICAg
ICAgICAgICAgICAgcmJ1Z2d5UVNBLnB1c2goICJcXFsiICsgd2hpdGVzcGFjZSArICIqKD86dmFs
dWV8IiArIGJvb2xlYW5zICsgIikiICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v
IFN1cHBvcnQ6IENocm9tZTwyOSwgQW5kcm9pZDw0LjQsIFNhZmFyaTw3LjArLCBpT1M8Ny4wKywg
UGhhbnRvbUpTPDEuOS44KworICAgICAgICAgICAgaWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCgg
IltpZH49IiArIGV4cGFuZG8gKyAiLV0iICkubGVuZ3RoICkgeworICAgICAgICAgICAgICAgIHJi
dWdneVFTQS5wdXNoKCJ+PSIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBXZWJr
aXQvT3BlcmEgLSA6Y2hlY2tlZCBzaG91bGQgcmV0dXJuIHNlbGVjdGVkIG9wdGlvbiBlbGVtZW50
cworICAgICAgICAgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9SRUMtY3NzMy1zZWxl
Y3RvcnMtMjAxMTA5MjkvI2NoZWNrZWQKKyAgICAgICAgICAgIC8vIElFOCB0aHJvd3MgZXJyb3Ig
aGVyZSBhbmQgd2lsbCBub3Qgc2VlIGxhdGVyIHRlc3RzCisgICAgICAgICAgICBpZiAoICFlbC5x
dWVyeVNlbGVjdG9yQWxsKCI6Y2hlY2tlZCIpLmxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICBy
YnVnZ3lRU0EucHVzaCgiOmNoZWNrZWQiKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ly8gU3VwcG9ydDogU2FmYXJpIDgrLCBpT1MgOCsKKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY4NTEKKyAgICAgICAgICAgIC8vIEluLXBh
Z2UgYHNlbGVjdG9yI2lkIHNpYmxpbmctY29tYmluYXRvciBzZWxlY3RvcmAgZmFpbHMKKyAgICAg
ICAgICAgIGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoICJhIyIgKyBleHBhbmRvICsgIisqIiAp
Lmxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICByYnVnZ3lRU0EucHVzaCgiLiMuK1srfl0iKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgYXNzZXJ0KGZ1bmN0aW9uKCBl
bCApIHsKKyAgICAgICAgICAgIGVsLmlubmVySFRNTCA9ICI8YSBocmVmPScnIGRpc2FibGVkPSdk
aXNhYmxlZCc+PC9hPiIgKworICAgICAgICAgICAgICAgICI8c2VsZWN0IGRpc2FibGVkPSdkaXNh
YmxlZCc+PG9wdGlvbi8+PC9zZWxlY3Q+IjsKKworICAgICAgICAgICAgLy8gU3VwcG9ydDogV2lu
ZG93cyA4IE5hdGl2ZSBBcHBzCisgICAgICAgICAgICAvLyBUaGUgdHlwZSBhbmQgbmFtZSBhdHRy
aWJ1dGVzIGFyZSByZXN0cmljdGVkIGR1cmluZyAuaW5uZXJIVE1MIGFzc2lnbm1lbnQKKyAgICAg
ICAgICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7CisgICAg
ICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoICJ0eXBlIiwgImhpZGRlbiIgKTsKKyAgICAgICAg
ICAgIGVsLmFwcGVuZENoaWxkKCBpbnB1dCApLnNldEF0dHJpYnV0ZSggIm5hbWUiLCAiRCIgKTsK
KworICAgICAgICAgICAgLy8gU3VwcG9ydDogSUU4CisgICAgICAgICAgICAvLyBFbmZvcmNlIGNh
c2Utc2Vuc2l0aXZpdHkgb2YgbmFtZSBhdHRyaWJ1dGUKKyAgICAgICAgICAgIGlmICggZWwucXVl
cnlTZWxlY3RvckFsbCgiW25hbWU9ZF0iKS5sZW5ndGggKSB7CisgICAgICAgICAgICAgICAgcmJ1
Z2d5UVNBLnB1c2goICJuYW1lIiArIHdoaXRlc3BhY2UgKyAiKlsqXiR8IX5dPz0iICk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZGIDMuNSAtIDplbmFibGVkLzpkaXNhYmxlZCBh
bmQgaGlkZGVuIGVsZW1lbnRzIChoaWRkZW4gZWxlbWVudHMgYXJlIHN0aWxsIGVuYWJsZWQpCisg
ICAgICAgICAgICAvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgYW5kIHdpbGwgbm90IHNlZSBsYXRl
ciB0ZXN0cworICAgICAgICAgICAgaWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKCI6ZW5hYmxlZCIp
Lmxlbmd0aCAhPT0gMiApIHsKKyAgICAgICAgICAgICAgICByYnVnZ3lRU0EucHVzaCggIjplbmFi
bGVkIiwgIjpkaXNhYmxlZCIgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gU3Vw
cG9ydDogSUU5LTExKworICAgICAgICAgICAgLy8gSUUncyA6ZGlzYWJsZWQgc2VsZWN0b3IgZG9l
cyBub3QgcGljayB1cCB0aGUgY2hpbGRyZW4gb2YgZGlzYWJsZWQgZmllbGRzZXRzCisgICAgICAg
ICAgICBkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmRpc2FibGVkID0gdHJ1ZTsKKyAgICAgICAg
ICAgIGlmICggZWwucXVlcnlTZWxlY3RvckFsbCgiOmRpc2FibGVkIikubGVuZ3RoICE9PSAyICkg
eworICAgICAgICAgICAgICAgIHJidWdneVFTQS5wdXNoKCAiOmVuYWJsZWQiLCAiOmRpc2FibGVk
IiApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBPcGVyYSAxMC0xMSBkb2VzIG5v
dCB0aHJvdyBvbiBwb3N0LWNvbW1hIGludmFsaWQgcHNldWRvcworICAgICAgICAgICAgZWwucXVl
cnlTZWxlY3RvckFsbCgiKiw6eCIpOworICAgICAgICAgICAgcmJ1Z2d5UVNBLnB1c2goIiwuKjoi
KTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgaWYgKCAoc3VwcG9ydC5tYXRjaGVzU2VsZWN0
b3IgPSBybmF0aXZlLnRlc3QoIChtYXRjaGVzID0gZG9jRWxlbS5tYXRjaGVzIHx8CisgICAgICAg
IGRvY0VsZW0ud2Via2l0TWF0Y2hlc1NlbGVjdG9yIHx8CisgICAgICAgIGRvY0VsZW0ubW96TWF0
Y2hlc1NlbGVjdG9yIHx8CisgICAgICAgIGRvY0VsZW0ub01hdGNoZXNTZWxlY3RvciB8fAorICAg
ICAgICBkb2NFbGVtLm1zTWF0Y2hlc1NlbGVjdG9yKSApKSApIHsKKworICAgICAgICBhc3NlcnQo
ZnVuY3Rpb24oIGVsICkgeworICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIGl0J3MgcG9z
c2libGUgdG8gZG8gbWF0Y2hlc1NlbGVjdG9yCisgICAgICAgICAgICAvLyBvbiBhIGRpc2Nvbm5l
Y3RlZCBub2RlIChJRSA5KQorICAgICAgICAgICAgc3VwcG9ydC5kaXNjb25uZWN0ZWRNYXRjaCA9
IG1hdGNoZXMuY2FsbCggZWwsICIqIiApOworCisgICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBm
YWlsIHdpdGggYW4gZXhjZXB0aW9uCisgICAgICAgICAgICAvLyBHZWNrbyBkb2VzIG5vdCBlcnJv
ciwgcmV0dXJucyBmYWxzZSBpbnN0ZWFkCisgICAgICAgICAgICBtYXRjaGVzLmNhbGwoIGVsLCAi
W3MhPScnXTp4IiApOworICAgICAgICAgICAgcmJ1Z2d5TWF0Y2hlcy5wdXNoKCAiIT0iLCBwc2V1
ZG9zICk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIHJidWdneVFTQSA9IHJidWdneVFTQS5s
ZW5ndGggJiYgbmV3IFJlZ0V4cCggcmJ1Z2d5UVNBLmpvaW4oInwiKSApOworICAgIHJidWdneU1h
dGNoZXMgPSByYnVnZ3lNYXRjaGVzLmxlbmd0aCAmJiBuZXcgUmVnRXhwKCByYnVnZ3lNYXRjaGVz
LmpvaW4oInwiKSApOworCisgICAgLyogQ29udGFpbnMKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisg
ICAgaGFzQ29tcGFyZSA9IHJuYXRpdmUudGVzdCggZG9jRWxlbS5jb21wYXJlRG9jdW1lbnRQb3Np
dGlvbiApOworCisgICAgLy8gRWxlbWVudCBjb250YWlucyBhbm90aGVyCisgICAgLy8gUHVycG9z
ZWZ1bGx5IHNlbGYtZXhjbHVzaXZlCisgICAgLy8gQXMgaW4sIGFuIGVsZW1lbnQgZG9lcyBub3Qg
Y29udGFpbiBpdHNlbGYKKyAgICBjb250YWlucyA9IGhhc0NvbXBhcmUgfHwgcm5hdGl2ZS50ZXN0
KCBkb2NFbGVtLmNvbnRhaW5zICkgPworICAgICAgICBmdW5jdGlvbiggYSwgYiApIHsKKyAgICAg
ICAgICAgIHZhciBhZG93biA9IGEubm9kZVR5cGUgPT09IDkgPyBhLmRvY3VtZW50RWxlbWVudCA6
IGEsCisgICAgICAgICAgICAgICAgYnVwID0gYiAmJiBiLnBhcmVudE5vZGU7CisgICAgICAgICAg
ICByZXR1cm4gYSA9PT0gYnVwIHx8ICEhKCBidXAgJiYgYnVwLm5vZGVUeXBlID09PSAxICYmICgK
KyAgICAgICAgICAgICAgICBhZG93bi5jb250YWlucyA/CisgICAgICAgICAgICAgICAgICAgIGFk
b3duLmNvbnRhaW5zKCBidXAgKSA6CisgICAgICAgICAgICAgICAgICAgIGEuY29tcGFyZURvY3Vt
ZW50UG9zaXRpb24gJiYgYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYnVwICkgJiAxNgorICAg
ICAgICAgICAgKSk7CisgICAgICAgIH0gOgorICAgICAgICBmdW5jdGlvbiggYSwgYiApIHsKKyAg
ICAgICAgICAgIGlmICggYiApIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAoIChiID0gYi5wYXJl
bnROb2RlKSApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBiID09PSBhICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH07CisKKyAgICAvKiBTb3J0aW5nCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisg
ICAgLy8gRG9jdW1lbnQgb3JkZXIgc29ydGluZworICAgIHNvcnRPcmRlciA9IGhhc0NvbXBhcmUg
PworICAgIGZ1bmN0aW9uKCBhLCBiICkgeworCisgICAgICAgIC8vIEZsYWcgZm9yIGR1cGxpY2F0
ZSByZW1vdmFsCisgICAgICAgIGlmICggYSA9PT0gYiApIHsKKyAgICAgICAgICAgIGhhc0R1cGxp
Y2F0ZSA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIFNvcnQgb24gbWV0aG9kIGV4aXN0ZW5jZSBpZiBvbmx5IG9uZSBpbnB1dCBoYXMgY29tcGFy
ZURvY3VtZW50UG9zaXRpb24KKyAgICAgICAgdmFyIGNvbXBhcmUgPSAhYS5jb21wYXJlRG9jdW1l
bnRQb3NpdGlvbiAtICFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uOworICAgICAgICBpZiAoIGNv
bXBhcmUgKSB7CisgICAgICAgICAgICByZXR1cm4gY29tcGFyZTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIENhbGN1bGF0ZSBwb3NpdGlvbiBpZiBib3RoIGlucHV0cyBiZWxvbmcgdG8gdGhlIHNh
bWUgZG9jdW1lbnQKKyAgICAgICAgY29tcGFyZSA9ICggYS5vd25lckRvY3VtZW50IHx8IGEgKSA9
PT0gKCBiLm93bmVyRG9jdW1lbnQgfHwgYiApID8KKyAgICAgICAgICAgIGEuY29tcGFyZURvY3Vt
ZW50UG9zaXRpb24oIGIgKSA6CisKKyAgICAgICAgICAgIC8vIE90aGVyd2lzZSB3ZSBrbm93IHRo
ZXkgYXJlIGRpc2Nvbm5lY3RlZAorICAgICAgICAgICAgMTsKKworICAgICAgICAvLyBEaXNjb25u
ZWN0ZWQgbm9kZXMKKyAgICAgICAgaWYgKCBjb21wYXJlICYgMSB8fAorICAgICAgICAgICAgKCFz
dXBwb3J0LnNvcnREZXRhY2hlZCAmJiBiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBhICkgPT09
IGNvbXBhcmUpICkgeworCisgICAgICAgICAgICAvLyBDaG9vc2UgdGhlIGZpcnN0IGVsZW1lbnQg
dGhhdCBpcyByZWxhdGVkIHRvIG91ciBwcmVmZXJyZWQgZG9jdW1lbnQKKyAgICAgICAgICAgIGlm
ICggYSA9PT0gZG9jdW1lbnQgfHwgYS5vd25lckRvY3VtZW50ID09PSBwcmVmZXJyZWREb2MgJiYg
Y29udGFpbnMocHJlZmVycmVkRG9jLCBhKSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIGIgPT09IGRvY3VtZW50IHx8IGIub3du
ZXJEb2N1bWVudCA9PT0gcHJlZmVycmVkRG9jICYmIGNvbnRhaW5zKHByZWZlcnJlZERvYywgYikg
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIE1haW50YWluIG9yaWdpbmFsIG9yZGVyCisgICAgICAgICAgICByZXR1cm4gc29ydElu
cHV0ID8KKyAgICAgICAgICAgICAgICAoIGluZGV4T2YoIHNvcnRJbnB1dCwgYSApIC0gaW5kZXhP
Ziggc29ydElucHV0LCBiICkgKSA6CisgICAgICAgICAgICAgICAgMDsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBjb21wYXJlICYgNCA/IC0xIDogMTsKKyAgICB9IDoKKyAgICBmdW5jdGlv
biggYSwgYiApIHsKKyAgICAgICAgLy8gRXhpdCBlYXJseSBpZiB0aGUgbm9kZXMgYXJlIGlkZW50
aWNhbAorICAgICAgICBpZiAoIGEgPT09IGIgKSB7CisgICAgICAgICAgICBoYXNEdXBsaWNhdGUg
PSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICB2YXIg
Y3VyLAorICAgICAgICAgICAgaSA9IDAsCisgICAgICAgICAgICBhdXAgPSBhLnBhcmVudE5vZGUs
CisgICAgICAgICAgICBidXAgPSBiLnBhcmVudE5vZGUsCisgICAgICAgICAgICBhcCA9IFsgYSBd
LAorICAgICAgICAgICAgYnAgPSBbIGIgXTsKKworICAgICAgICAvLyBQYXJlbnRsZXNzIG5vZGVz
IGFyZSBlaXRoZXIgZG9jdW1lbnRzIG9yIGRpc2Nvbm5lY3RlZAorICAgICAgICBpZiAoICFhdXAg
fHwgIWJ1cCApIHsKKyAgICAgICAgICAgIHJldHVybiBhID09PSBkb2N1bWVudCA/IC0xIDoKKyAg
ICAgICAgICAgICAgICBiID09PSBkb2N1bWVudCA/IDEgOgorICAgICAgICAgICAgICAgIGF1cCA/
IC0xIDoKKyAgICAgICAgICAgICAgICBidXAgPyAxIDoKKyAgICAgICAgICAgICAgICBzb3J0SW5w
dXQgPworICAgICAgICAgICAgICAgICggaW5kZXhPZiggc29ydElucHV0LCBhICkgLSBpbmRleE9m
KCBzb3J0SW5wdXQsIGIgKSApIDoKKyAgICAgICAgICAgICAgICAwOworCisgICAgICAgIC8vIElm
IHRoZSBub2RlcyBhcmUgc2libGluZ3MsIHdlIGNhbiBkbyBhIHF1aWNrIGNoZWNrCisgICAgICAg
IH0gZWxzZSBpZiAoIGF1cCA9PT0gYnVwICkgeworICAgICAgICAgICAgcmV0dXJuIHNpYmxpbmdD
aGVjayggYSwgYiApOworICAgICAgICB9CisKKyAgICAgICAgLy8gT3RoZXJ3aXNlIHdlIG5lZWQg
ZnVsbCBsaXN0cyBvZiB0aGVpciBhbmNlc3RvcnMgZm9yIGNvbXBhcmlzb24KKyAgICAgICAgY3Vy
ID0gYTsKKyAgICAgICAgd2hpbGUgKCAoY3VyID0gY3VyLnBhcmVudE5vZGUpICkgeworICAgICAg
ICAgICAgYXAudW5zaGlmdCggY3VyICk7CisgICAgICAgIH0KKyAgICAgICAgY3VyID0gYjsKKyAg
ICAgICAgd2hpbGUgKCAoY3VyID0gY3VyLnBhcmVudE5vZGUpICkgeworICAgICAgICAgICAgYnAu
dW5zaGlmdCggY3VyICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBXYWxrIGRvd24gdGhlIHRy
ZWUgbG9va2luZyBmb3IgYSBkaXNjcmVwYW5jeQorICAgICAgICB3aGlsZSAoIGFwW2ldID09PSBi
cFtpXSApIHsKKyAgICAgICAgICAgIGkrKzsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBp
ID8KKyAgICAgICAgICAgIC8vIERvIGEgc2libGluZyBjaGVjayBpZiB0aGUgbm9kZXMgaGF2ZSBh
IGNvbW1vbiBhbmNlc3RvcgorICAgICAgICAgICAgc2libGluZ0NoZWNrKCBhcFtpXSwgYnBbaV0g
KSA6CisKKyAgICAgICAgICAgIC8vIE90aGVyd2lzZSBub2RlcyBpbiBvdXIgZG9jdW1lbnQgc29y
dCBmaXJzdAorICAgICAgICAgICAgYXBbaV0gPT09IHByZWZlcnJlZERvYyA/IC0xIDoKKyAgICAg
ICAgICAgIGJwW2ldID09PSBwcmVmZXJyZWREb2MgPyAxIDoKKyAgICAgICAgICAgIDA7CisgICAg
fTsKKworICAgIHJldHVybiBkb2N1bWVudDsKK307CisKK1NpenpsZS5tYXRjaGVzID0gZnVuY3Rp
b24oIGV4cHIsIGVsZW1lbnRzICkgeworICAgIHJldHVybiBTaXp6bGUoIGV4cHIsIG51bGwsIG51
bGwsIGVsZW1lbnRzICk7Cit9OworCitTaXp6bGUubWF0Y2hlc1NlbGVjdG9yID0gZnVuY3Rpb24o
IGVsZW0sIGV4cHIgKSB7CisgICAgLy8gU2V0IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVkCisgICAg
aWYgKCAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtICkgIT09IGRvY3VtZW50ICkgeworICAg
ICAgICBzZXREb2N1bWVudCggZWxlbSApOworICAgIH0KKworICAgIC8vIE1ha2Ugc3VyZSB0aGF0
IGF0dHJpYnV0ZSBzZWxlY3RvcnMgYXJlIHF1b3RlZAorICAgIGV4cHIgPSBleHByLnJlcGxhY2Uo
IHJhdHRyaWJ1dGVRdW90ZXMsICI9JyQxJ10iICk7CisKKyAgICBpZiAoIHN1cHBvcnQubWF0Y2hl
c1NlbGVjdG9yICYmIGRvY3VtZW50SXNIVE1MICYmCisgICAgICAgICFjb21waWxlckNhY2hlWyBl
eHByICsgIiAiIF0gJiYKKyAgICAgICAgKCAhcmJ1Z2d5TWF0Y2hlcyB8fCAhcmJ1Z2d5TWF0Y2hl
cy50ZXN0KCBleHByICkgKSAmJgorICAgICAgICAoICFyYnVnZ3lRU0EgICAgIHx8ICFyYnVnZ3lR
U0EudGVzdCggZXhwciApICkgKSB7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHZhciBy
ZXQgPSBtYXRjaGVzLmNhbGwoIGVsZW0sIGV4cHIgKTsKKworICAgICAgICAgICAgLy8gSUUgOSdz
IG1hdGNoZXNTZWxlY3RvciByZXR1cm5zIGZhbHNlIG9uIGRpc2Nvbm5lY3RlZCBub2RlcworICAg
ICAgICAgICAgaWYgKCByZXQgfHwgc3VwcG9ydC5kaXNjb25uZWN0ZWRNYXRjaCB8fAorICAgICAg
ICAgICAgICAgICAgICAvLyBBcyB3ZWxsLCBkaXNjb25uZWN0ZWQgbm9kZXMgYXJlIHNhaWQgdG8g
YmUgaW4gYSBkb2N1bWVudAorICAgICAgICAgICAgICAgICAgICAvLyBmcmFnbWVudCBpbiBJRSA5
CisgICAgICAgICAgICAgICAgICAgIGVsZW0uZG9jdW1lbnQgJiYgZWxlbS5kb2N1bWVudC5ub2Rl
VHlwZSAhPT0gMTEgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBjYXRjaCAoZSkge30KKyAgICB9CisKKyAgICByZXR1cm4gU2l6emxlKCBl
eHByLCBkb2N1bWVudCwgbnVsbCwgWyBlbGVtIF0gKS5sZW5ndGggPiAwOworfTsKKworU2l6emxl
LmNvbnRhaW5zID0gZnVuY3Rpb24oIGNvbnRleHQsIGVsZW0gKSB7CisgICAgLy8gU2V0IGRvY3Vt
ZW50IHZhcnMgaWYgbmVlZGVkCisgICAgaWYgKCAoIGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBj
b250ZXh0ICkgIT09IGRvY3VtZW50ICkgeworICAgICAgICBzZXREb2N1bWVudCggY29udGV4dCAp
OworICAgIH0KKyAgICByZXR1cm4gY29udGFpbnMoIGNvbnRleHQsIGVsZW0gKTsKK307CisKK1Np
enpsZS5hdHRyID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7CisgICAgLy8gU2V0IGRvY3VtZW50
IHZhcnMgaWYgbmVlZGVkCisgICAgaWYgKCAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtICkg
IT09IGRvY3VtZW50ICkgeworICAgICAgICBzZXREb2N1bWVudCggZWxlbSApOworICAgIH0KKwor
ICAgIHZhciBmbiA9IEV4cHIuYXR0ckhhbmRsZVsgbmFtZS50b0xvd2VyQ2FzZSgpIF0sCisgICAg
ICAgIC8vIERvbid0IGdldCBmb29sZWQgYnkgT2JqZWN0LnByb3RvdHlwZSBwcm9wZXJ0aWVzIChq
UXVlcnkgIzEzODA3KQorICAgICAgICB2YWwgPSBmbiAmJiBoYXNPd24uY2FsbCggRXhwci5hdHRy
SGFuZGxlLCBuYW1lLnRvTG93ZXJDYXNlKCkgKSA/CisgICAgICAgICAgICBmbiggZWxlbSwgbmFt
ZSwgIWRvY3VtZW50SXNIVE1MICkgOgorICAgICAgICAgICAgdW5kZWZpbmVkOworCisgICAgcmV0
dXJuIHZhbCAhPT0gdW5kZWZpbmVkID8KKyAgICAgICAgdmFsIDoKKyAgICAgICAgc3VwcG9ydC5h
dHRyaWJ1dGVzIHx8ICFkb2N1bWVudElzSFRNTCA/CisgICAgICAgICAgICBlbGVtLmdldEF0dHJp
YnV0ZSggbmFtZSApIDoKKyAgICAgICAgICAgICh2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUo
bmFtZSkpICYmIHZhbC5zcGVjaWZpZWQgPworICAgICAgICAgICAgICAgIHZhbC52YWx1ZSA6Cisg
ICAgICAgICAgICAgICAgbnVsbDsKK307CisKK1NpenpsZS5lc2NhcGUgPSBmdW5jdGlvbiggc2Vs
ICkgeworICAgIHJldHVybiAoc2VsICsgIiIpLnJlcGxhY2UoIHJjc3Nlc2NhcGUsIGZjc3Nlc2Nh
cGUgKTsKK307CisKK1NpenpsZS5lcnJvciA9IGZ1bmN0aW9uKCBtc2cgKSB7CisgICAgdGhyb3cg
bmV3IEVycm9yKCAiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIiArIG1z
ZyApOworfTsKKworLyoqCisgKiBEb2N1bWVudCBzb3J0aW5nIGFuZCByZW1vdmluZyBkdXBsaWNh
dGVzCisgKiBAcGFyYW0ge0FycmF5TGlrZX0gcmVzdWx0cworICovCitTaXp6bGUudW5pcXVlU29y
dCA9IGZ1bmN0aW9uKCByZXN1bHRzICkgeworICAgIHZhciBlbGVtLAorICAgICAgICBkdXBsaWNh
dGVzID0gW10sCisgICAgICAgIGogPSAwLAorICAgICAgICBpID0gMDsKKworICAgIC8vIFVubGVz
cyB3ZSAqa25vdyogd2UgY2FuIGRldGVjdCBkdXBsaWNhdGVzLCBhc3N1bWUgdGhlaXIgcHJlc2Vu
Y2UKKyAgICBoYXNEdXBsaWNhdGUgPSAhc3VwcG9ydC5kZXRlY3REdXBsaWNhdGVzOworICAgIHNv
cnRJbnB1dCA9ICFzdXBwb3J0LnNvcnRTdGFibGUgJiYgcmVzdWx0cy5zbGljZSggMCApOworICAg
IHJlc3VsdHMuc29ydCggc29ydE9yZGVyICk7CisKKyAgICBpZiAoIGhhc0R1cGxpY2F0ZSApIHsK
KyAgICAgICAgd2hpbGUgKCAoZWxlbSA9IHJlc3VsdHNbaSsrXSkgKSB7CisgICAgICAgICAgICBp
ZiAoIGVsZW0gPT09IHJlc3VsdHNbIGkgXSApIHsKKyAgICAgICAgICAgICAgICBqID0gZHVwbGlj
YXRlcy5wdXNoKCBpICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUg
KCBqLS0gKSB7CisgICAgICAgICAgICByZXN1bHRzLnNwbGljZSggZHVwbGljYXRlc1sgaiBdLCAx
ICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBDbGVhciBpbnB1dCBhZnRlciBzb3J0aW5n
IHRvIHJlbGVhc2Ugb2JqZWN0cworICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5
L3NpenpsZS9wdWxsLzIyNQorICAgIHNvcnRJbnB1dCA9IG51bGw7CisKKyAgICByZXR1cm4gcmVz
dWx0czsKK307CisKKy8qKgorICogVXRpbGl0eSBmdW5jdGlvbiBmb3IgcmV0cmlldmluZyB0aGUg
dGV4dCB2YWx1ZSBvZiBhbiBhcnJheSBvZiBET00gbm9kZXMKKyAqIEBwYXJhbSB7QXJyYXl8RWxl
bWVudH0gZWxlbQorICovCitnZXRUZXh0ID0gU2l6emxlLmdldFRleHQgPSBmdW5jdGlvbiggZWxl
bSApIHsKKyAgICB2YXIgbm9kZSwKKyAgICAgICAgcmV0ID0gIiIsCisgICAgICAgIGkgPSAwLAor
ICAgICAgICBub2RlVHlwZSA9IGVsZW0ubm9kZVR5cGU7CisKKyAgICBpZiAoICFub2RlVHlwZSAp
IHsKKyAgICAgICAgLy8gSWYgbm8gbm9kZVR5cGUsIHRoaXMgaXMgZXhwZWN0ZWQgdG8gYmUgYW4g
YXJyYXkKKyAgICAgICAgd2hpbGUgKCAobm9kZSA9IGVsZW1baSsrXSkgKSB7CisgICAgICAgICAg
ICAvLyBEbyBub3QgdHJhdmVyc2UgY29tbWVudCBub2RlcworICAgICAgICAgICAgcmV0ICs9IGdl
dFRleHQoIG5vZGUgKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoIG5vZGVUeXBlID09PSAx
IHx8IG5vZGVUeXBlID09PSA5IHx8IG5vZGVUeXBlID09PSAxMSApIHsKKyAgICAgICAgLy8gVXNl
IHRleHRDb250ZW50IGZvciBlbGVtZW50cworICAgICAgICAvLyBpbm5lclRleHQgdXNhZ2UgcmVt
b3ZlZCBmb3IgY29uc2lzdGVuY3kgb2YgbmV3IGxpbmVzIChqUXVlcnkgIzExMTUzKQorICAgICAg
ICBpZiAoIHR5cGVvZiBlbGVtLnRleHRDb250ZW50ID09PSAic3RyaW5nIiApIHsKKyAgICAgICAg
ICAgIHJldHVybiBlbGVtLnRleHRDb250ZW50OworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgLy8gVHJhdmVyc2UgaXRzIGNoaWxkcmVuCisgICAgICAgICAgICBmb3IgKCBlbGVtID0gZWxl
bS5maXJzdENoaWxkOyBlbGVtOyBlbGVtID0gZWxlbS5uZXh0U2libGluZyApIHsKKyAgICAgICAg
ICAgICAgICByZXQgKz0gZ2V0VGV4dCggZWxlbSApOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfSBlbHNlIGlmICggbm9kZVR5cGUgPT09IDMgfHwgbm9kZVR5cGUgPT09IDQgKSB7Cisg
ICAgICAgIHJldHVybiBlbGVtLm5vZGVWYWx1ZTsKKyAgICB9CisgICAgLy8gRG8gbm90IGluY2x1
ZGUgY29tbWVudCBvciBwcm9jZXNzaW5nIGluc3RydWN0aW9uIG5vZGVzCisKKyAgICByZXR1cm4g
cmV0OworfTsKKworRXhwciA9IFNpenpsZS5zZWxlY3RvcnMgPSB7CisKKyAgICAvLyBDYW4gYmUg
YWRqdXN0ZWQgYnkgdGhlIHVzZXIKKyAgICBjYWNoZUxlbmd0aDogNTAsCisKKyAgICBjcmVhdGVQ
c2V1ZG86IG1hcmtGdW5jdGlvbiwKKworICAgIG1hdGNoOiBtYXRjaEV4cHIsCisKKyAgICBhdHRy
SGFuZGxlOiB7fSwKKworICAgIGZpbmQ6IHt9LAorCisgICAgcmVsYXRpdmU6IHsKKyAgICAgICAg
Ij4iOiB7IGRpcjogInBhcmVudE5vZGUiLCBmaXJzdDogdHJ1ZSB9LAorICAgICAgICAiICI6IHsg
ZGlyOiAicGFyZW50Tm9kZSIgfSwKKyAgICAgICAgIisiOiB7IGRpcjogInByZXZpb3VzU2libGlu
ZyIsIGZpcnN0OiB0cnVlIH0sCisgICAgICAgICJ+IjogeyBkaXI6ICJwcmV2aW91c1NpYmxpbmci
IH0KKyAgICB9LAorCisgICAgcHJlRmlsdGVyOiB7CisgICAgICAgICJBVFRSIjogZnVuY3Rpb24o
IG1hdGNoICkgeworICAgICAgICAgICAgbWF0Y2hbMV0gPSBtYXRjaFsxXS5yZXBsYWNlKCBydW5l
c2NhcGUsIGZ1bmVzY2FwZSApOworCisgICAgICAgICAgICAvLyBNb3ZlIHRoZSBnaXZlbiB2YWx1
ZSB0byBtYXRjaFszXSB3aGV0aGVyIHF1b3RlZCBvciB1bnF1b3RlZAorICAgICAgICAgICAgbWF0
Y2hbM10gPSAoIG1hdGNoWzNdIHx8IG1hdGNoWzRdIHx8IG1hdGNoWzVdIHx8ICIiICkucmVwbGFj
ZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTsKKworICAgICAgICAgICAgaWYgKCBtYXRjaFsyXSA9
PT0gIn49IiApIHsKKyAgICAgICAgICAgICAgICBtYXRjaFszXSA9ICIgIiArIG1hdGNoWzNdICsg
IiAiOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gbWF0Y2guc2xpY2UoIDAs
IDQgKTsKKyAgICAgICAgfSwKKworICAgICAgICAiQ0hJTEQiOiBmdW5jdGlvbiggbWF0Y2ggKSB7
CisgICAgICAgICAgICAvKiBtYXRjaGVzIGZyb20gbWF0Y2hFeHByWyJDSElMRCJdCisgICAgICAg
ICAgICAgICAgMSB0eXBlIChvbmx5fG50aHwuLi4pCisgICAgICAgICAgICAgICAgMiB3aGF0IChj
aGlsZHxvZi10eXBlKQorICAgICAgICAgICAgICAgIDMgYXJndW1lbnQgKGV2ZW58b2RkfFxkKnxc
ZCpuKFsrLV1cZCspP3wuLi4pCisgICAgICAgICAgICAgICAgNCB4bi1jb21wb25lbnQgb2YgeG4r
eSBhcmd1bWVudCAoWystXT9cZCpufCkKKyAgICAgICAgICAgICAgICA1IHNpZ24gb2YgeG4tY29t
cG9uZW50CisgICAgICAgICAgICAgICAgNiB4IG9mIHhuLWNvbXBvbmVudAorICAgICAgICAgICAg
ICAgIDcgc2lnbiBvZiB5LWNvbXBvbmVudAorICAgICAgICAgICAgICAgIDggeSBvZiB5LWNvbXBv
bmVudAorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1hdGNoWzFdID0gbWF0Y2hbMV0udG9M
b3dlckNhc2UoKTsKKworICAgICAgICAgICAgaWYgKCBtYXRjaFsxXS5zbGljZSggMCwgMyApID09
PSAibnRoIiApIHsKKyAgICAgICAgICAgICAgICAvLyBudGgtKiByZXF1aXJlcyBhcmd1bWVudAor
ICAgICAgICAgICAgICAgIGlmICggIW1hdGNoWzNdICkgeworICAgICAgICAgICAgICAgICAgICBT
aXp6bGUuZXJyb3IoIG1hdGNoWzBdICk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgLy8gbnVtZXJpYyB4IGFuZCB5IHBhcmFtZXRlcnMgZm9yIEV4cHIuZmlsdGVyLkNISUxE
CisgICAgICAgICAgICAgICAgLy8gcmVtZW1iZXIgdGhhdCBmYWxzZS90cnVlIGNhc3QgcmVzcGVj
dGl2ZWx5IHRvIDAvMQorICAgICAgICAgICAgICAgIG1hdGNoWzRdID0gKyggbWF0Y2hbNF0gPyBt
YXRjaFs1XSArIChtYXRjaFs2XSB8fCAxKSA6IDIgKiAoIG1hdGNoWzNdID09PSAiZXZlbiIgfHwg
bWF0Y2hbM10gPT09ICJvZGQiICkgKTsKKyAgICAgICAgICAgICAgICBtYXRjaFs1XSA9ICsoICgg
bWF0Y2hbN10gKyBtYXRjaFs4XSApIHx8IG1hdGNoWzNdID09PSAib2RkIiApOworCisgICAgICAg
ICAgICAvLyBvdGhlciB0eXBlcyBwcm9oaWJpdCBhcmd1bWVudHMKKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAoIG1hdGNoWzNdICkgeworICAgICAgICAgICAgICAgIFNpenpsZS5lcnJvciggbWF0Y2hb
MF0gKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIG1hdGNoOworICAgICAg
ICB9LAorCisgICAgICAgICJQU0VVRE8iOiBmdW5jdGlvbiggbWF0Y2ggKSB7CisgICAgICAgICAg
ICB2YXIgZXhjZXNzLAorICAgICAgICAgICAgICAgIHVucXVvdGVkID0gIW1hdGNoWzZdICYmIG1h
dGNoWzJdOworCisgICAgICAgICAgICBpZiAoIG1hdGNoRXhwclsiQ0hJTEQiXS50ZXN0KCBtYXRj
aFswXSApICkgeworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAvLyBBY2NlcHQgcXVvdGVkIGFyZ3VtZW50cyBhcy1pcworICAgICAgICAg
ICAgaWYgKCBtYXRjaFszXSApIHsKKyAgICAgICAgICAgICAgICBtYXRjaFsyXSA9IG1hdGNoWzRd
IHx8IG1hdGNoWzVdIHx8ICIiOworCisgICAgICAgICAgICAvLyBTdHJpcCBleGNlc3MgY2hhcmFj
dGVycyBmcm9tIHVucXVvdGVkIGFyZ3VtZW50cworICAgICAgICAgICAgfSBlbHNlIGlmICggdW5x
dW90ZWQgJiYgcnBzZXVkby50ZXN0KCB1bnF1b3RlZCApICYmCisgICAgICAgICAgICAgICAgLy8g
R2V0IGV4Y2VzcyBmcm9tIHRva2VuaXplIChyZWN1cnNpdmVseSkKKyAgICAgICAgICAgICAgICAo
ZXhjZXNzID0gdG9rZW5pemUoIHVucXVvdGVkLCB0cnVlICkpICYmCisgICAgICAgICAgICAgICAg
Ly8gYWR2YW5jZSB0byB0aGUgbmV4dCBjbG9zaW5nIHBhcmVudGhlc2lzCisgICAgICAgICAgICAg
ICAgKGV4Y2VzcyA9IHVucXVvdGVkLmluZGV4T2YoICIpIiwgdW5xdW90ZWQubGVuZ3RoIC0gZXhj
ZXNzICkgLSB1bnF1b3RlZC5sZW5ndGgpICkgeworCisgICAgICAgICAgICAgICAgLy8gZXhjZXNz
IGlzIGEgbmVnYXRpdmUgaW5kZXgKKyAgICAgICAgICAgICAgICBtYXRjaFswXSA9IG1hdGNoWzBd
LnNsaWNlKCAwLCBleGNlc3MgKTsKKyAgICAgICAgICAgICAgICBtYXRjaFsyXSA9IHVucXVvdGVk
LnNsaWNlKCAwLCBleGNlc3MgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gUmV0
dXJuIG9ubHkgY2FwdHVyZXMgbmVlZGVkIGJ5IHRoZSBwc2V1ZG8gZmlsdGVyIG1ldGhvZCAodHlw
ZSBhbmQgYXJndW1lbnQpCisgICAgICAgICAgICByZXR1cm4gbWF0Y2guc2xpY2UoIDAsIDMgKTsK
KyAgICAgICAgfQorICAgIH0sCisKKyAgICBmaWx0ZXI6IHsKKworICAgICAgICAiVEFHIjogZnVu
Y3Rpb24oIG5vZGVOYW1lU2VsZWN0b3IgKSB7CisgICAgICAgICAgICB2YXIgbm9kZU5hbWUgPSBu
b2RlTmFtZVNlbGVjdG9yLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICkudG9Mb3dlckNh
c2UoKTsKKyAgICAgICAgICAgIHJldHVybiBub2RlTmFtZVNlbGVjdG9yID09PSAiKiIgPworICAg
ICAgICAgICAgICAgIGZ1bmN0aW9uKCkgeyByZXR1cm4gdHJ1ZTsgfSA6CisgICAgICAgICAgICAg
ICAgZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLm5v
ZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbm9kZU5hbWU7CisgICAg
ICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICAiQ0xBU1MiOiBmdW5jdGlvbigg
Y2xhc3NOYW1lICkgeworICAgICAgICAgICAgdmFyIHBhdHRlcm4gPSBjbGFzc0NhY2hlWyBjbGFz
c05hbWUgKyAiICIgXTsKKworICAgICAgICAgICAgcmV0dXJuIHBhdHRlcm4gfHwKKyAgICAgICAg
ICAgICAgICAocGF0dGVybiA9IG5ldyBSZWdFeHAoICIoXnwiICsgd2hpdGVzcGFjZSArICIpIiAr
IGNsYXNzTmFtZSArICIoIiArIHdoaXRlc3BhY2UgKyAifCQpIiApKSAmJgorICAgICAgICAgICAg
ICAgIGNsYXNzQ2FjaGUoIGNsYXNzTmFtZSwgZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QoIHR5cGVvZiBlbGVtLmNsYXNzTmFtZSA9PT0g
InN0cmluZyIgJiYgZWxlbS5jbGFzc05hbWUgfHwgdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlICE9
PSAidW5kZWZpbmVkIiAmJiBlbGVtLmdldEF0dHJpYnV0ZSgiY2xhc3MiKSB8fCAiIiApOworICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICB9LAorCisgICAgICAgICJBVFRSIjogZnVuY3Rpb24o
IG5hbWUsIG9wZXJhdG9yLCBjaGVjayApIHsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigg
ZWxlbSApIHsKKyAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gU2l6emxlLmF0dHIoIGVsZW0s
IG5hbWUgKTsKKworICAgICAgICAgICAgICAgIGlmICggcmVzdWx0ID09IG51bGwgKSB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRvciA9PT0gIiE9IjsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgaWYgKCAhb3BlcmF0b3IgKSB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJl
c3VsdCArPSAiIjsKKworICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRvciA9PT0gIj0iID8g
cmVzdWx0ID09PSBjaGVjayA6CisgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID09PSAiIT0i
ID8gcmVzdWx0ICE9PSBjaGVjayA6CisgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID09PSAi
Xj0iID8gY2hlY2sgJiYgcmVzdWx0LmluZGV4T2YoIGNoZWNrICkgPT09IDAgOgorICAgICAgICAg
ICAgICAgICAgICBvcGVyYXRvciA9PT0gIio9IiA/IGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBj
aGVjayApID4gLTEgOgorICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciA9PT0gIiQ9IiA/IGNo
ZWNrICYmIHJlc3VsdC5zbGljZSggLWNoZWNrLmxlbmd0aCApID09PSBjaGVjayA6CisgICAgICAg
ICAgICAgICAgICAgIG9wZXJhdG9yID09PSAifj0iID8gKCAiICIgKyByZXN1bHQucmVwbGFjZSgg
cndoaXRlc3BhY2UsICIgIiApICsgIiAiICkuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDoKKyAgICAg
ICAgICAgICAgICAgICAgb3BlcmF0b3IgPT09ICJ8PSIgPyByZXN1bHQgPT09IGNoZWNrIHx8IHJl
c3VsdC5zbGljZSggMCwgY2hlY2subGVuZ3RoICsgMSApID09PSBjaGVjayArICItIiA6CisgICAg
ICAgICAgICAgICAgICAgIGZhbHNlOworICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAg
ICAgICAiQ0hJTEQiOiBmdW5jdGlvbiggdHlwZSwgd2hhdCwgYXJndW1lbnQsIGZpcnN0LCBsYXN0
ICkgeworICAgICAgICAgICAgdmFyIHNpbXBsZSA9IHR5cGUuc2xpY2UoIDAsIDMgKSAhPT0gIm50
aCIsCisgICAgICAgICAgICAgICAgZm9yd2FyZCA9IHR5cGUuc2xpY2UoIC00ICkgIT09ICJsYXN0
IiwKKyAgICAgICAgICAgICAgICBvZlR5cGUgPSB3aGF0ID09PSAib2YtdHlwZSI7CisKKyAgICAg
ICAgICAgIHJldHVybiBmaXJzdCA9PT0gMSAmJiBsYXN0ID09PSAwID8KKworICAgICAgICAgICAg
ICAgIC8vIFNob3J0Y3V0IGZvciA6bnRoLSoobikKKyAgICAgICAgICAgICAgICBmdW5jdGlvbigg
ZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEhZWxlbS5wYXJlbnROb2RlOwor
ICAgICAgICAgICAgICAgIH0gOgorCisgICAgICAgICAgICAgICAgZnVuY3Rpb24oIGVsZW0sIGNv
bnRleHQsIHhtbCApIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGNhY2hlLCB1bmlxdWVDYWNo
ZSwgb3V0ZXJDYWNoZSwgbm9kZSwgbm9kZUluZGV4LCBzdGFydCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRpciA9IHNpbXBsZSAhPT0gZm9yd2FyZCA/ICJuZXh0U2libGluZyIgOiAicHJldmlv
dXNTaWJsaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IGVsZW0ucGFyZW50
Tm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBvZlR5cGUgJiYgZWxlbS5ub2Rl
TmFtZS50b0xvd2VyQ2FzZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgdXNlQ2FjaGUgPSAh
eG1sICYmICFvZlR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBkaWZmID0gZmFsc2U7CisK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCBwYXJlbnQgKSB7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIDooZmlyc3R8bGFzdHxvbmx5KS0oY2hpbGR8b2YtdHlwZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggc2ltcGxlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdoaWxlICggZGlyICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlID0g
ZWxlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCAobm9kZSA9IG5v
ZGVbIGRpciBdKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
b2ZUeXBlID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLm5v
ZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUgOgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGUubm9kZVR5cGUgPT09IDEgKSB7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV2ZXJzZSBkaXJlY3Rpb24gZm9y
IDpvbmx5LSogKGlmIHdlIGhhdmVuJ3QgeWV0IGRvbmUgc28pCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXJ0ID0gZGlyID0gdHlwZSA9PT0gIm9ubHkiICYmICFzdGFydCAmJiAi
bmV4dFNpYmxpbmciOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBbIGZvcndhcmQgPyBwYXJlbnQuZmly
c3RDaGlsZCA6IHBhcmVudC5sYXN0Q2hpbGQgXTsKKworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gbm9uLXhtbCA6bnRoLWNoaWxkKC4uLikgc3RvcmVzIGNhY2hlIGRhdGEgb24gYHBhcmVudGAK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZm9yd2FyZCAmJiB1c2VDYWNoZSApIHsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlZWsgYGVsZW1gIGZyb20gYSBwcmV2aW91
c2x5LWNhY2hlZCBpbmRleAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLi4uaW4g
YSBnemlwLWZyaWVuZGx5IHdheQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBw
YXJlbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZXJDYWNoZSA9IG5vZGVbIGV4
cGFuZG8gXSB8fCAobm9kZVsgZXhwYW5kbyBdID0ge30pOworCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gU3VwcG9ydDogSUUgPDkgb25seQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsg
bm9kZS51bmlxdWVJRCBdIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvdXRl
ckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYWNoZSA9IHVuaXF1ZUNhY2hlWyB0eXBlIF0gfHwgW107CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZUluZGV4ID0gY2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBjYWNoZVsg
MSBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmYgPSBub2RlSW5kZXggJiYgY2Fj
aGVbIDIgXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZUluZGV4ICYm
IHBhcmVudC5jaGlsZE5vZGVzWyBub2RlSW5kZXggXTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdoaWxlICggKG5vZGUgPSArK25vZGVJbmRleCAmJiBub2RlICYmIG5vZGVbIGRpciBd
IHx8CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmFsbGJhY2sgdG8gc2Vl
a2luZyBgZWxlbWAgZnJvbSB0aGUgc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGRpZmYgPSBub2RlSW5kZXggPSAwKSB8fCBzdGFydC5wb3AoKSkgKSB7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiBmb3VuZCwgY2FjaGUgaW5kZXhlcyBvbiBg
cGFyZW50YCBhbmQgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBu
b2RlLm5vZGVUeXBlID09PSAxICYmICsrZGlmZiAmJiBub2RlID09PSBlbGVtICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVlQ2FjaGVbIHR5cGUgXSA9IFsgZGly
cnVucywgbm9kZUluZGV4LCBkaWZmIF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2UgcHJldmlvdXNseS1jYWNoZWQgZWxl
bWVudCBpbmRleCBpZiBhdmFpbGFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IHVzZUNhY2hlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAuLi5pbiBh
IGd6aXAtZnJpZW5kbHkgd2F5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUg
PSBlbGVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRlckNhY2hlID0gbm9k
ZVsgZXhwYW5kbyBdIHx8IChub2RlWyBleHBhbmRvIF0gPSB7fSk7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogSUUgPDkgb25seQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChq
UXVlcnkgZ2gtMTcwOSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVlQ2Fj
aGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSk7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUgPSB1bmlxdWVDYWNoZVsgdHlwZSBd
IHx8IFtdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggPSBjYWNo
ZVsgMCBdID09PSBkaXJydW5zICYmIGNhY2hlWyAxIF07CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRpZmYgPSBub2RlSW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8geG1sIDpudGgtY2hpbGQoLi4uKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yIDpudGgtbGFzdC1jaGlsZCguLi4pIG9y
IDpudGgoLWxhc3QpPy1vZi10eXBlKC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIGRpZmYgPT09IGZhbHNlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBVc2UgdGhlIHNhbWUgbG9vcCBhcyBhYm92ZSB0byBzZWVrIGBlbGVtYCBmcm9tIHRoZSBzdGFy
dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIChub2RlID0gKytub2Rl
SW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKGRpZmYgPSBub2RlSW5kZXggPSAwKSB8fCBzdGFydC5wb3AoKSkgKSB7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKCBvZlR5cGUgPworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUubm9kZU5hbWUudG9Mb3dl
ckNhc2UoKSA9PT0gbmFtZSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbm9kZS5ub2RlVHlwZSA9PT0gMSApICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKytkaWZmICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gQ2FjaGUgdGhlIGluZGV4IG9mIGVhY2ggZW5jb3VudGVyZWQgZWxlbWVudAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdXNlQ2FjaGUgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dGVyQ2FjaGUg
PSBub2RlWyBleHBhbmRvIF0gfHwgKG5vZGVbIGV4cGFuZG8gXSA9IHt9KTsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBJRSA8OSBvbmx5
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlZmVuZCBh
Z2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVb
IG5vZGUudW5pcXVlSUQgXSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSA9IHt9KTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWVDYWNoZVsgdHlwZSBd
ID0gWyBkaXJydW5zLCBkaWZmIF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBu
b2RlID09PSBlbGVtICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluY29ycG9yYXRl
IHRoZSBvZmZzZXQsIHRoZW4gY2hlY2sgYWdhaW5zdCBjeWNsZSBzaXplCisgICAgICAgICAgICAg
ICAgICAgICAgICBkaWZmIC09IGxhc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZGlmZiA9PT0gZmlyc3QgfHwgKCBkaWZmICUgZmlyc3QgPT09IDAgJiYgZGlmZiAvIGZpcnN0ID49
IDAgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH07CisgICAgICAg
IH0sCisKKyAgICAgICAgIlBTRVVETyI6IGZ1bmN0aW9uKCBwc2V1ZG8sIGFyZ3VtZW50ICkgewor
ICAgICAgICAgICAgLy8gcHNldWRvLWNsYXNzIG5hbWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlCisg
ICAgICAgICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI3BzZXVkby1jbGFz
c2VzCisgICAgICAgICAgICAvLyBQcmlvcml0aXplIGJ5IGNhc2Ugc2Vuc2l0aXZpdHkgaW4gY2Fz
ZSBjdXN0b20gcHNldWRvcyBhcmUgYWRkZWQgd2l0aCB1cHBlcmNhc2UgbGV0dGVycworICAgICAg
ICAgICAgLy8gUmVtZW1iZXIgdGhhdCBzZXRGaWx0ZXJzIGluaGVyaXRzIGZyb20gcHNldWRvcwor
ICAgICAgICAgICAgdmFyIGFyZ3MsCisgICAgICAgICAgICAgICAgZm4gPSBFeHByLnBzZXVkb3Nb
IHBzZXVkbyBdIHx8IEV4cHIuc2V0RmlsdGVyc1sgcHNldWRvLnRvTG93ZXJDYXNlKCkgXSB8fAor
ICAgICAgICAgICAgICAgICAgICBTaXp6bGUuZXJyb3IoICJ1bnN1cHBvcnRlZCBwc2V1ZG86ICIg
KyBwc2V1ZG8gKTsKKworICAgICAgICAgICAgLy8gVGhlIHVzZXIgbWF5IHVzZSBjcmVhdGVQc2V1
ZG8gdG8gaW5kaWNhdGUgdGhhdAorICAgICAgICAgICAgLy8gYXJndW1lbnRzIGFyZSBuZWVkZWQg
dG8gY3JlYXRlIHRoZSBmaWx0ZXIgZnVuY3Rpb24KKyAgICAgICAgICAgIC8vIGp1c3QgYXMgU2l6
emxlIGRvZXMKKyAgICAgICAgICAgIGlmICggZm5bIGV4cGFuZG8gXSApIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZm4oIGFyZ3VtZW50ICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC8vIEJ1dCBtYWludGFpbiBzdXBwb3J0IGZvciBvbGQgc2lnbmF0dXJlcworICAgICAgICAgICAg
aWYgKCBmbi5sZW5ndGggPiAxICkgeworICAgICAgICAgICAgICAgIGFyZ3MgPSBbIHBzZXVkbywg
cHNldWRvLCAiIiwgYXJndW1lbnQgXTsKKyAgICAgICAgICAgICAgICByZXR1cm4gRXhwci5zZXRG
aWx0ZXJzLmhhc093blByb3BlcnR5KCBwc2V1ZG8udG9Mb3dlckNhc2UoKSApID8KKyAgICAgICAg
ICAgICAgICAgICAgbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIGlkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtYXRjaGVkID0gZm4oIHNlZWQsIGFyZ3VtZW50ICksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaSA9IG1hdGNoZWQubGVuZ3RoOworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUg
KCBpLS0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4ID0gaW5kZXhPZiggc2Vl
ZCwgbWF0Y2hlZFtpXSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZWRbIGlkeCBd
ID0gISggbWF0Y2hlc1sgaWR4IF0gPSBtYXRjaGVkW2ldICk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pIDoKKyAgICAgICAgICAgICAgICAgICAgZnVu
Y3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm4oIGVsZW0s
IDAsIGFyZ3MgKTsKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgcmV0dXJuIGZuOworICAgICAgICB9CisgICAgfSwKKworICAgIHBzZXVkb3M6IHsK
KyAgICAgICAgLy8gUG90ZW50aWFsbHkgY29tcGxleCBwc2V1ZG9zCisgICAgICAgICJub3QiOiBt
YXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlbGVjdG9yICkgeworICAgICAgICAgICAgLy8gVHJpbSB0
aGUgc2VsZWN0b3IgcGFzc2VkIHRvIGNvbXBpbGUKKyAgICAgICAgICAgIC8vIHRvIGF2b2lkIHRy
ZWF0aW5nIGxlYWRpbmcgYW5kIHRyYWlsaW5nCisgICAgICAgICAgICAvLyBzcGFjZXMgYXMgY29t
YmluYXRvcnMKKyAgICAgICAgICAgIHZhciBpbnB1dCA9IFtdLAorICAgICAgICAgICAgICAgIHJl
c3VsdHMgPSBbXSwKKyAgICAgICAgICAgICAgICBtYXRjaGVyID0gY29tcGlsZSggc2VsZWN0b3Iu
cmVwbGFjZSggcnRyaW0sICIkMSIgKSApOworCisgICAgICAgICAgICByZXR1cm4gbWF0Y2hlclsg
ZXhwYW5kbyBdID8KKyAgICAgICAgICAgICAgICBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQs
IG1hdGNoZXMsIGNvbnRleHQsIHhtbCApIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW0s
CisgICAgICAgICAgICAgICAgICAgICAgICB1bm1hdGNoZWQgPSBtYXRjaGVyKCBzZWVkLCBudWxs
LCB4bWwsIFtdICksCisgICAgICAgICAgICAgICAgICAgICAgICBpID0gc2VlZC5sZW5ndGg7CisK
KyAgICAgICAgICAgICAgICAgICAgLy8gTWF0Y2ggZWxlbWVudHMgdW5tYXRjaGVkIGJ5IGBtYXRj
aGVyYAorICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGktLSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggKGVsZW0gPSB1bm1hdGNoZWRbaV0pICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNlZWRbaV0gPSAhKG1hdGNoZXNbaV0gPSBlbGVtKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0p
IDoKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkgeworICAg
ICAgICAgICAgICAgICAgICBpbnB1dFswXSA9IGVsZW07CisgICAgICAgICAgICAgICAgICAgIG1h
dGNoZXIoIGlucHV0LCBudWxsLCB4bWwsIHJlc3VsdHMgKTsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gRG9uJ3Qga2VlcCB0aGUgZWxlbWVudCAoaXNzdWUgIzI5OSkKKyAgICAgICAgICAgICAgICAg
ICAgaW5wdXRbMF0gPSBudWxsOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gIXJlc3VsdHMu
cG9wKCk7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgfSksCisKKyAgICAgICAgImhhcyI6
IG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VsZWN0b3IgKSB7CisgICAgICAgICAgICByZXR1cm4g
ZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNpenpsZSggc2VsZWN0
b3IsIGVsZW0gKS5sZW5ndGggPiAwOworICAgICAgICAgICAgfTsKKyAgICAgICAgfSksCisKKyAg
ICAgICAgImNvbnRhaW5zIjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCB0ZXh0ICkgeworICAgICAg
ICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTsKKyAgICAg
ICAgICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
KCBlbGVtLnRleHRDb250ZW50IHx8IGVsZW0uaW5uZXJUZXh0IHx8IGdldFRleHQoIGVsZW0gKSAp
LmluZGV4T2YoIHRleHQgKSA+IC0xOworICAgICAgICAgICAgfTsKKyAgICAgICAgfSksCisKKyAg
ICAgICAgLy8gIldoZXRoZXIgYW4gZWxlbWVudCBpcyByZXByZXNlbnRlZCBieSBhIDpsYW5nKCkg
c2VsZWN0b3IKKyAgICAgICAgLy8gaXMgYmFzZWQgc29sZWx5IG9uIHRoZSBlbGVtZW50J3MgbGFu
Z3VhZ2UgdmFsdWUKKyAgICAgICAgLy8gYmVpbmcgZXF1YWwgdG8gdGhlIGlkZW50aWZpZXIgQywK
KyAgICAgICAgLy8gb3IgYmVnaW5uaW5nIHdpdGggdGhlIGlkZW50aWZpZXIgQyBpbW1lZGlhdGVs
eSBmb2xsb3dlZCBieSAiLSIuCisgICAgICAgIC8vIFRoZSBtYXRjaGluZyBvZiBDIGFnYWluc3Qg
dGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZSBpcyBwZXJmb3JtZWQgY2FzZS1pbnNlbnNpdGl2
ZWx5LgorICAgICAgICAvLyBUaGUgaWRlbnRpZmllciBDIGRvZXMgbm90IGhhdmUgdG8gYmUgYSB2
YWxpZCBsYW5ndWFnZSBuYW1lLiIKKyAgICAgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvc2Vs
ZWN0b3JzLyNsYW5nLXBzZXVkbworICAgICAgICAibGFuZyI6IG1hcmtGdW5jdGlvbiggZnVuY3Rp
b24oIGxhbmcgKSB7CisgICAgICAgICAgICAvLyBsYW5nIHZhbHVlIG11c3QgYmUgYSB2YWxpZCBp
ZGVudGlmaWVyCisgICAgICAgICAgICBpZiAoICFyaWRlbnRpZmllci50ZXN0KGxhbmcgfHwgIiIp
ICkgeworICAgICAgICAgICAgICAgIFNpenpsZS5lcnJvciggInVuc3VwcG9ydGVkIGxhbmc6ICIg
KyBsYW5nICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsYW5nID0gbGFuZy5yZXBsYWNl
KCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7CisgICAgICAgICAgICByZXR1
cm4gZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgdmFyIGVsZW1MYW5nOworICAg
ICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAoZWxlbUxhbmcgPSBk
b2N1bWVudElzSFRNTCA/CisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmxhbmcgOgorICAg
ICAgICAgICAgICAgICAgICAgICAgZWxlbS5nZXRBdHRyaWJ1dGUoInhtbDpsYW5nIikgfHwgZWxl
bS5nZXRBdHRyaWJ1dGUoImxhbmciKSkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGVs
ZW1MYW5nID0gZWxlbUxhbmcudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlbGVtTGFuZyA9PT0gbGFuZyB8fCBlbGVtTGFuZy5pbmRleE9mKCBsYW5nICsgIi0i
ICkgPT09IDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IHdoaWxl
ICggKGVsZW0gPSBlbGVtLnBhcmVudE5vZGUpICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9OworICAgICAgICB9KSwK
KworICAgICAgICAvLyBNaXNjZWxsYW5lb3VzCisgICAgICAgICJ0YXJnZXQiOiBmdW5jdGlvbigg
ZWxlbSApIHsKKyAgICAgICAgICAgIHZhciBoYXNoID0gd2luZG93LmxvY2F0aW9uICYmIHdpbmRv
dy5sb2NhdGlvbi5oYXNoOworICAgICAgICAgICAgcmV0dXJuIGhhc2ggJiYgaGFzaC5zbGljZSgg
MSApID09PSBlbGVtLmlkOworICAgICAgICB9LAorCisgICAgICAgICJyb290IjogZnVuY3Rpb24o
IGVsZW0gKSB7CisgICAgICAgICAgICByZXR1cm4gZWxlbSA9PT0gZG9jRWxlbTsKKyAgICAgICAg
fSwKKworICAgICAgICAiZm9jdXMiOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIHJl
dHVybiBlbGVtID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmICghZG9jdW1lbnQuaGFzRm9j
dXMgfHwgZG9jdW1lbnQuaGFzRm9jdXMoKSkgJiYgISEoZWxlbS50eXBlIHx8IGVsZW0uaHJlZiB8
fCB+ZWxlbS50YWJJbmRleCk7CisgICAgICAgIH0sCisKKyAgICAgICAgLy8gQm9vbGVhbiBwcm9w
ZXJ0aWVzCisgICAgICAgICJlbmFibGVkIjogY3JlYXRlRGlzYWJsZWRQc2V1ZG8oIGZhbHNlICks
CisgICAgICAgICJkaXNhYmxlZCI6IGNyZWF0ZURpc2FibGVkUHNldWRvKCB0cnVlICksCisKKyAg
ICAgICAgImNoZWNrZWQiOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIC8vIEluIENT
UzMsIDpjaGVja2VkIHNob3VsZCByZXR1cm4gYm90aCBjaGVja2VkIGFuZCBzZWxlY3RlZCBlbGVt
ZW50cworICAgICAgICAgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9SRUMtY3NzMy1z
ZWxlY3RvcnMtMjAxMTA5MjkvI2NoZWNrZWQKKyAgICAgICAgICAgIHZhciBub2RlTmFtZSA9IGVs
ZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgICAgIHJldHVybiAobm9kZU5hbWUg
PT09ICJpbnB1dCIgJiYgISFlbGVtLmNoZWNrZWQpIHx8IChub2RlTmFtZSA9PT0gIm9wdGlvbiIg
JiYgISFlbGVtLnNlbGVjdGVkKTsKKyAgICAgICAgfSwKKworICAgICAgICAic2VsZWN0ZWQiOiBm
dW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIC8vIEFjY2Vzc2luZyB0aGlzIHByb3BlcnR5
IG1ha2VzIHNlbGVjdGVkLWJ5LWRlZmF1bHQKKyAgICAgICAgICAgIC8vIG9wdGlvbnMgaW4gU2Fm
YXJpIHdvcmsgcHJvcGVybHkKKyAgICAgICAgICAgIGlmICggZWxlbS5wYXJlbnROb2RlICkgewor
ICAgICAgICAgICAgICAgIGVsZW0ucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4OworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICByZXR1cm4gZWxlbS5zZWxlY3RlZCA9PT0gdHJ1ZTsKKyAgICAg
ICAgfSwKKworICAgICAgICAvLyBDb250ZW50cworICAgICAgICAiZW1wdHkiOiBmdW5jdGlvbigg
ZWxlbSApIHsKKyAgICAgICAgICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8j
ZW1wdHktcHNldWRvCisgICAgICAgICAgICAvLyA6ZW1wdHkgaXMgbmVnYXRlZCBieSBlbGVtZW50
ICgxKSBvciBjb250ZW50IG5vZGVzICh0ZXh0OiAzOyBjZGF0YTogNDsgZW50aXR5IHJlZjogNSks
CisgICAgICAgICAgICAvLyAgIGJ1dCBub3QgYnkgb3RoZXJzIChjb21tZW50OiA4OyBwcm9jZXNz
aW5nIGluc3RydWN0aW9uOiA3OyBldGMuKQorICAgICAgICAgICAgLy8gbm9kZVR5cGUgPCA2IHdv
cmtzIGJlY2F1c2UgYXR0cmlidXRlcyAoMikgZG8gbm90IGFwcGVhciBhcyBjaGlsZHJlbgorICAg
ICAgICAgICAgZm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0u
bmV4dFNpYmxpbmcgKSB7CisgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlIDwgNiAp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9LAorCisg
ICAgICAgICJwYXJlbnQiOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIHJldHVybiAh
RXhwci5wc2V1ZG9zWyJlbXB0eSJdKCBlbGVtICk7CisgICAgICAgIH0sCisKKyAgICAgICAgLy8g
RWxlbWVudC9pbnB1dCB0eXBlcworICAgICAgICAiaGVhZGVyIjogZnVuY3Rpb24oIGVsZW0gKSB7
CisgICAgICAgICAgICByZXR1cm4gcmhlYWRlci50ZXN0KCBlbGVtLm5vZGVOYW1lICk7CisgICAg
ICAgIH0sCisKKyAgICAgICAgImlucHV0IjogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAg
ICByZXR1cm4gcmlucHV0cy50ZXN0KCBlbGVtLm5vZGVOYW1lICk7CisgICAgICAgIH0sCisKKyAg
ICAgICAgImJ1dHRvbiI6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgdmFyIG5hbWUg
PSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7CisgICAgICAgICAgICByZXR1cm4gbmFtZSA9
PT0gImlucHV0IiAmJiBlbGVtLnR5cGUgPT09ICJidXR0b24iIHx8IG5hbWUgPT09ICJidXR0b24i
OworICAgICAgICB9LAorCisgICAgICAgICJ0ZXh0IjogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAg
ICAgICAgICB2YXIgYXR0cjsKKyAgICAgICAgICAgIHJldHVybiBlbGVtLm5vZGVOYW1lLnRvTG93
ZXJDYXNlKCkgPT09ICJpbnB1dCIgJiYKKyAgICAgICAgICAgICAgICBlbGVtLnR5cGUgPT09ICJ0
ZXh0IiAmJgorCisgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogSUU8OAorICAgICAgICAgICAg
ICAgIC8vIE5ldyBIVE1MNSBhdHRyaWJ1dGUgdmFsdWVzIChlLmcuLCAic2VhcmNoIikgYXBwZWFy
IHdpdGggZWxlbS50eXBlID09PSAidGV4dCIKKyAgICAgICAgICAgICAgICAoIChhdHRyID0gZWxl
bS5nZXRBdHRyaWJ1dGUoInR5cGUiKSkgPT0gbnVsbCB8fCBhdHRyLnRvTG93ZXJDYXNlKCkgPT09
ICJ0ZXh0IiApOworICAgICAgICB9LAorCisgICAgICAgIC8vIFBvc2l0aW9uLWluLWNvbGxlY3Rp
b24KKyAgICAgICAgImZpcnN0IjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgIHJldHVybiBbIDAgXTsKKyAgICAgICAgfSksCisKKyAgICAgICAgImxhc3Qi
OiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCAp
IHsKKyAgICAgICAgICAgIHJldHVybiBbIGxlbmd0aCAtIDEgXTsKKyAgICAgICAgfSksCisKKyAg
ICAgICAgImVxIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVz
LCBsZW5ndGgsIGFyZ3VtZW50ICkgeworICAgICAgICAgICAgcmV0dXJuIFsgYXJndW1lbnQgPCAw
ID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudCBdOworICAgICAgICB9KSwKKworICAgICAg
ICAiZXZlbiI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywg
bGVuZ3RoICkgeworICAgICAgICAgICAgdmFyIGkgPSAwOworICAgICAgICAgICAgZm9yICggOyBp
IDwgbGVuZ3RoOyBpICs9IDIgKSB7CisgICAgICAgICAgICAgICAgbWF0Y2hJbmRleGVzLnB1c2go
IGkgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBtYXRjaEluZGV4ZXM7Cisg
ICAgICAgIH0pLAorCisgICAgICAgICJvZGQiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0
aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHsKKyAgICAgICAgICAgIHZhciBpID0gMTsKKyAg
ICAgICAgICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAyICkgeworICAgICAgICAgICAgICAg
IG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gbWF0Y2hJbmRleGVzOworICAgICAgICB9KSwKKworICAgICAgICAibHQiOiBjcmVhdGVQb3Np
dGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7
CisgICAgICAgICAgICB2YXIgaSA9IGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDog
YXJndW1lbnQ7CisgICAgICAgICAgICBmb3IgKCA7IC0taSA+PSAwOyApIHsKKyAgICAgICAgICAg
ICAgICBtYXRjaEluZGV4ZXMucHVzaCggaSApOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
cmV0dXJuIG1hdGNoSW5kZXhlczsKKyAgICAgICAgfSksCisKKyAgICAgICAgImd0IjogY3JlYXRl
UG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50
ICkgeworICAgICAgICAgICAgdmFyIGkgPSBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0
aCA6IGFyZ3VtZW50OworICAgICAgICAgICAgZm9yICggOyArK2kgPCBsZW5ndGg7ICkgeworICAg
ICAgICAgICAgICAgIG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gbWF0Y2hJbmRleGVzOworICAgICAgICB9KQorICAgIH0KK307CisKK0V4
cHIucHNldWRvc1sibnRoIl0gPSBFeHByLnBzZXVkb3NbImVxIl07CisKKy8vIEFkZCBidXR0b24v
aW5wdXQgdHlwZSBwc2V1ZG9zCitmb3IgKCBpIGluIHsgcmFkaW86IHRydWUsIGNoZWNrYm94OiB0
cnVlLCBmaWxlOiB0cnVlLCBwYXNzd29yZDogdHJ1ZSwgaW1hZ2U6IHRydWUgfSApIHsKKyAgICBF
eHByLnBzZXVkb3NbIGkgXSA9IGNyZWF0ZUlucHV0UHNldWRvKCBpICk7Cit9Citmb3IgKCBpIGlu
IHsgc3VibWl0OiB0cnVlLCByZXNldDogdHJ1ZSB9ICkgeworICAgIEV4cHIucHNldWRvc1sgaSBd
ID0gY3JlYXRlQnV0dG9uUHNldWRvKCBpICk7Cit9CisKKy8vIEVhc3kgQVBJIGZvciBjcmVhdGlu
ZyBuZXcgc2V0RmlsdGVycworZnVuY3Rpb24gc2V0RmlsdGVycygpIHt9CitzZXRGaWx0ZXJzLnBy
b3RvdHlwZSA9IEV4cHIuZmlsdGVycyA9IEV4cHIucHNldWRvczsKK0V4cHIuc2V0RmlsdGVycyA9
IG5ldyBzZXRGaWx0ZXJzKCk7CisKK3Rva2VuaXplID0gU2l6emxlLnRva2VuaXplID0gZnVuY3Rp
b24oIHNlbGVjdG9yLCBwYXJzZU9ubHkgKSB7CisgICAgdmFyIG1hdGNoZWQsIG1hdGNoLCB0b2tl
bnMsIHR5cGUsCisgICAgICAgIHNvRmFyLCBncm91cHMsIHByZUZpbHRlcnMsCisgICAgICAgIGNh
Y2hlZCA9IHRva2VuQ2FjaGVbIHNlbGVjdG9yICsgIiAiIF07CisKKyAgICBpZiAoIGNhY2hlZCAp
IHsKKyAgICAgICAgcmV0dXJuIHBhcnNlT25seSA/IDAgOiBjYWNoZWQuc2xpY2UoIDAgKTsKKyAg
ICB9CisKKyAgICBzb0ZhciA9IHNlbGVjdG9yOworICAgIGdyb3VwcyA9IFtdOworICAgIHByZUZp
bHRlcnMgPSBFeHByLnByZUZpbHRlcjsKKworICAgIHdoaWxlICggc29GYXIgKSB7CisKKyAgICAg
ICAgLy8gQ29tbWEgYW5kIGZpcnN0IHJ1bgorICAgICAgICBpZiAoICFtYXRjaGVkIHx8IChtYXRj
aCA9IHJjb21tYS5leGVjKCBzb0ZhciApKSApIHsKKyAgICAgICAgICAgIGlmICggbWF0Y2ggKSB7
CisgICAgICAgICAgICAgICAgLy8gRG9uJ3QgY29uc3VtZSB0cmFpbGluZyBjb21tYXMgYXMgdmFs
aWQKKyAgICAgICAgICAgICAgICBzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaFswXS5sZW5ndGgg
KSB8fCBzb0ZhcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdyb3Vwcy5wdXNoKCAodG9r
ZW5zID0gW10pICk7CisgICAgICAgIH0KKworICAgICAgICBtYXRjaGVkID0gZmFsc2U7CisKKyAg
ICAgICAgLy8gQ29tYmluYXRvcnMKKyAgICAgICAgaWYgKCAobWF0Y2ggPSByY29tYmluYXRvcnMu
ZXhlYyggc29GYXIgKSkgKSB7CisgICAgICAgICAgICBtYXRjaGVkID0gbWF0Y2guc2hpZnQoKTsK
KyAgICAgICAgICAgIHRva2Vucy5wdXNoKHsKKyAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hl
ZCwKKyAgICAgICAgICAgICAgICAvLyBDYXN0IGRlc2NlbmRhbnQgY29tYmluYXRvcnMgdG8gc3Bh
Y2UKKyAgICAgICAgICAgICAgICB0eXBlOiBtYXRjaFswXS5yZXBsYWNlKCBydHJpbSwgIiAiICkK
KyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgc29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hl
ZC5sZW5ndGggKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZpbHRlcnMKKyAgICAgICAgZm9y
ICggdHlwZSBpbiBFeHByLmZpbHRlciApIHsKKyAgICAgICAgICAgIGlmICggKG1hdGNoID0gbWF0
Y2hFeHByWyB0eXBlIF0uZXhlYyggc29GYXIgKSkgJiYgKCFwcmVGaWx0ZXJzWyB0eXBlIF0gfHwK
KyAgICAgICAgICAgICAgICAobWF0Y2ggPSBwcmVGaWx0ZXJzWyB0eXBlIF0oIG1hdGNoICkpKSAp
IHsKKyAgICAgICAgICAgICAgICBtYXRjaGVkID0gbWF0Y2guc2hpZnQoKTsKKyAgICAgICAgICAg
ICAgICB0b2tlbnMucHVzaCh7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaGVkLAor
ICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLAorICAgICAgICAgICAgICAgICAgICBtYXRj
aGVzOiBtYXRjaAorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHNvRmFyID0g
c29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBpZiAoICFtYXRjaGVkICkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgaW52YWxpZCBleGNl
c3MKKyAgICAvLyBpZiB3ZSdyZSBqdXN0IHBhcnNpbmcKKyAgICAvLyBPdGhlcndpc2UsIHRocm93
IGFuIGVycm9yIG9yIHJldHVybiB0b2tlbnMKKyAgICByZXR1cm4gcGFyc2VPbmx5ID8KKyAgICAg
ICAgc29GYXIubGVuZ3RoIDoKKyAgICAgICAgc29GYXIgPworICAgICAgICAgICAgU2l6emxlLmVy
cm9yKCBzZWxlY3RvciApIDoKKyAgICAgICAgICAgIC8vIENhY2hlIHRoZSB0b2tlbnMKKyAgICAg
ICAgICAgIHRva2VuQ2FjaGUoIHNlbGVjdG9yLCBncm91cHMgKS5zbGljZSggMCApOworfTsKKwor
ZnVuY3Rpb24gdG9TZWxlY3RvciggdG9rZW5zICkgeworICAgIHZhciBpID0gMCwKKyAgICAgICAg
bGVuID0gdG9rZW5zLmxlbmd0aCwKKyAgICAgICAgc2VsZWN0b3IgPSAiIjsKKyAgICBmb3IgKCA7
IGkgPCBsZW47IGkrKyApIHsKKyAgICAgICAgc2VsZWN0b3IgKz0gdG9rZW5zW2ldLnZhbHVlOwor
ICAgIH0KKyAgICByZXR1cm4gc2VsZWN0b3I7Cit9CisKK2Z1bmN0aW9uIGFkZENvbWJpbmF0b3Io
IG1hdGNoZXIsIGNvbWJpbmF0b3IsIGJhc2UgKSB7CisgICAgdmFyIGRpciA9IGNvbWJpbmF0b3Iu
ZGlyLAorICAgICAgICBza2lwID0gY29tYmluYXRvci5uZXh0LAorICAgICAgICBrZXkgPSBza2lw
IHx8IGRpciwKKyAgICAgICAgY2hlY2tOb25FbGVtZW50cyA9IGJhc2UgJiYga2V5ID09PSAicGFy
ZW50Tm9kZSIsCisgICAgICAgIGRvbmVOYW1lID0gZG9uZSsrOworCisgICAgcmV0dXJuIGNvbWJp
bmF0b3IuZmlyc3QgPworICAgICAgICAvLyBDaGVjayBhZ2FpbnN0IGNsb3Nlc3QgYW5jZXN0b3Iv
cHJlY2VkaW5nIGVsZW1lbnQKKyAgICAgICAgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCAp
IHsKKyAgICAgICAgICAgIHdoaWxlICggKGVsZW0gPSBlbGVtWyBkaXIgXSkgKSB7CisgICAgICAg
ICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwg
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0gOgorCisgICAgICAgIC8vIENoZWNrIGFnYWluc3QgYWxsIGFuY2Vz
dG9yL3ByZWNlZGluZyBlbGVtZW50cworICAgICAgICBmdW5jdGlvbiggZWxlbSwgY29udGV4dCwg
eG1sICkgeworICAgICAgICAgICAgdmFyIG9sZENhY2hlLCB1bmlxdWVDYWNoZSwgb3V0ZXJDYWNo
ZSwKKyAgICAgICAgICAgICAgICBuZXdDYWNoZSA9IFsgZGlycnVucywgZG9uZU5hbWUgXTsKKwor
ICAgICAgICAgICAgLy8gV2UgY2FuJ3Qgc2V0IGFyYml0cmFyeSBkYXRhIG9uIFhNTCBub2Rlcywg
c28gdGhleSBkb24ndCBiZW5lZml0IGZyb20gY29tYmluYXRvciBjYWNoaW5nCisgICAgICAgICAg
ICBpZiAoIHhtbCApIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAoIChlbGVtID0gZWxlbVsgZGly
IF0pICkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwg
Y2hlY2tOb25FbGVtZW50cyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbWF0Y2hl
ciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIHdoaWxlICggKGVsZW0gPSBlbGVtWyBkaXIgXSkgKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0ZXJDYWNoZSA9IGVsZW1bIGV4cGFuZG8gXSB8fCAoZWxl
bVsgZXhwYW5kbyBdID0ge30pOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0
OiBJRSA8OSBvbmx5CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZlbmQgYWdhaW5zdCBj
bG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgZWxlbS51bmlxdWVJRCBdIHx8IChvdXRlckNh
Y2hlWyBlbGVtLnVuaXF1ZUlEIF0gPSB7fSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggc2tpcCAmJiBza2lwID09PSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGVsZW1bIGRpciBdIHx8IGVsZW07CisgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCAob2xkQ2FjaGUgPSB1bmlxdWVDYWNoZVsg
a2V5IF0pICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkQ2FjaGVbIDAgXSA9PT0g
ZGlycnVucyAmJiBvbGRDYWNoZVsgMSBdID09PSBkb25lTmFtZSApIHsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEFzc2lnbiB0byBuZXdDYWNoZSBzbyByZXN1bHRzIGJhY2stcHJv
cGFnYXRlIHRvIHByZXZpb3VzIGVsZW1lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIChuZXdDYWNoZVsgMiBdID0gb2xkQ2FjaGVbIDIgXSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJldXNlIG5l
d2NhY2hlIHNvIHJlc3VsdHMgYmFjay1wcm9wYWdhdGUgdG8gcHJldmlvdXMgZWxlbWVudHMKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWVDYWNoZVsga2V5IF0gPSBuZXdDYWNoZTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgbWF0Y2ggbWVhbnMgd2UncmUgZG9u
ZTsgYSBmYWlsIG1lYW5zIHdlIGhhdmUgdG8ga2VlcCBjaGVja2luZworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggKG5ld0NhY2hlWyAyIF0gPSBtYXRjaGVyKCBlbGVtLCBjb250ZXh0
LCB4bWwgKSkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfTsKK30KKworZnVuY3Rpb24g
ZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICkgeworICAgIHJldHVybiBtYXRjaGVycy5sZW5ndGgg
PiAxID8KKyAgICAgICAgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHsKKyAgICAgICAg
ICAgIHZhciBpID0gbWF0Y2hlcnMubGVuZ3RoOworICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7
CisgICAgICAgICAgICAgICAgaWYgKCAhbWF0Y2hlcnNbaV0oIGVsZW0sIGNvbnRleHQsIHhtbCAp
ICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0gOgor
ICAgICAgICBtYXRjaGVyc1swXTsKK30KKworZnVuY3Rpb24gbXVsdGlwbGVDb250ZXh0cyggc2Vs
ZWN0b3IsIGNvbnRleHRzLCByZXN1bHRzICkgeworICAgIHZhciBpID0gMCwKKyAgICAgICAgbGVu
ID0gY29udGV4dHMubGVuZ3RoOworICAgIGZvciAoIDsgaSA8IGxlbjsgaSsrICkgeworICAgICAg
ICBTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0c1tpXSwgcmVzdWx0cyApOworICAgIH0KKyAgICBy
ZXR1cm4gcmVzdWx0czsKK30KKworZnVuY3Rpb24gY29uZGVuc2UoIHVubWF0Y2hlZCwgbWFwLCBm
aWx0ZXIsIGNvbnRleHQsIHhtbCApIHsKKyAgICB2YXIgZWxlbSwKKyAgICAgICAgbmV3VW5tYXRj
aGVkID0gW10sCisgICAgICAgIGkgPSAwLAorICAgICAgICBsZW4gPSB1bm1hdGNoZWQubGVuZ3Ro
LAorICAgICAgICBtYXBwZWQgPSBtYXAgIT0gbnVsbDsKKworICAgIGZvciAoIDsgaSA8IGxlbjsg
aSsrICkgeworICAgICAgICBpZiAoIChlbGVtID0gdW5tYXRjaGVkW2ldKSApIHsKKyAgICAgICAg
ICAgIGlmICggIWZpbHRlciB8fCBmaWx0ZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkgeworICAg
ICAgICAgICAgICAgIG5ld1VubWF0Y2hlZC5wdXNoKCBlbGVtICk7CisgICAgICAgICAgICAgICAg
aWYgKCBtYXBwZWQgKSB7CisgICAgICAgICAgICAgICAgICAgIG1hcC5wdXNoKCBpICk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIG5ld1VubWF0Y2hlZDsKK30KKworZnVuY3Rpb24gc2V0TWF0Y2hlciggcHJlRmlsdGVyLCBz
ZWxlY3RvciwgbWF0Y2hlciwgcG9zdEZpbHRlciwgcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICkg
eworICAgIGlmICggcG9zdEZpbHRlciAmJiAhcG9zdEZpbHRlclsgZXhwYW5kbyBdICkgeworICAg
ICAgICBwb3N0RmlsdGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbHRlciApOworICAgIH0KKyAgICBp
ZiAoIHBvc3RGaW5kZXIgJiYgIXBvc3RGaW5kZXJbIGV4cGFuZG8gXSApIHsKKyAgICAgICAgcG9z
dEZpbmRlciA9IHNldE1hdGNoZXIoIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciApOworICAgIH0K
KyAgICByZXR1cm4gbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCByZXN1bHRzLCBjb250ZXh0
LCB4bWwgKSB7CisgICAgICAgIHZhciB0ZW1wLCBpLCBlbGVtLAorICAgICAgICAgICAgcHJlTWFw
ID0gW10sCisgICAgICAgICAgICBwb3N0TWFwID0gW10sCisgICAgICAgICAgICBwcmVleGlzdGlu
ZyA9IHJlc3VsdHMubGVuZ3RoLAorCisgICAgICAgICAgICAvLyBHZXQgaW5pdGlhbCBlbGVtZW50
cyBmcm9tIHNlZWQgb3IgY29udGV4dAorICAgICAgICAgICAgZWxlbXMgPSBzZWVkIHx8IG11bHRp
cGxlQ29udGV4dHMoIHNlbGVjdG9yIHx8ICIqIiwgY29udGV4dC5ub2RlVHlwZSA/IFsgY29udGV4
dCBdIDogY29udGV4dCwgW10gKSwKKworICAgICAgICAgICAgLy8gUHJlZmlsdGVyIHRvIGdldCBt
YXRjaGVyIGlucHV0LCBwcmVzZXJ2aW5nIGEgbWFwIGZvciBzZWVkLXJlc3VsdHMgc3luY2hyb25p
emF0aW9uCisgICAgICAgICAgICBtYXRjaGVySW4gPSBwcmVGaWx0ZXIgJiYgKCBzZWVkIHx8ICFz
ZWxlY3RvciApID8KKyAgICAgICAgICAgICAgICBjb25kZW5zZSggZWxlbXMsIHByZU1hcCwgcHJl
RmlsdGVyLCBjb250ZXh0LCB4bWwgKSA6CisgICAgICAgICAgICAgICAgZWxlbXMsCisKKyAgICAg
ICAgICAgIG1hdGNoZXJPdXQgPSBtYXRjaGVyID8KKyAgICAgICAgICAgICAgICAvLyBJZiB3ZSBo
YXZlIGEgcG9zdEZpbmRlciwgb3IgZmlsdGVyZWQgc2VlZCwgb3Igbm9uLXNlZWQgcG9zdEZpbHRl
ciBvciBwcmVleGlzdGluZyByZXN1bHRzLAorICAgICAgICAgICAgICAgIHBvc3RGaW5kZXIgfHwg
KCBzZWVkID8gcHJlRmlsdGVyIDogcHJlZXhpc3RpbmcgfHwgcG9zdEZpbHRlciApID8KKworICAg
ICAgICAgICAgICAgICAgICAvLyAuLi5pbnRlcm1lZGlhdGUgcHJvY2Vzc2luZyBpcyBuZWNlc3Nh
cnkKKyAgICAgICAgICAgICAgICAgICAgW10gOgorCisgICAgICAgICAgICAgICAgICAgIC8vIC4u
Lm90aGVyd2lzZSB1c2UgcmVzdWx0cyBkaXJlY3RseQorICAgICAgICAgICAgICAgICAgICByZXN1
bHRzIDoKKyAgICAgICAgICAgICAgICBtYXRjaGVySW47CisKKyAgICAgICAgLy8gRmluZCBwcmlt
YXJ5IG1hdGNoZXMKKyAgICAgICAgaWYgKCBtYXRjaGVyICkgeworICAgICAgICAgICAgbWF0Y2hl
ciggbWF0Y2hlckluLCBtYXRjaGVyT3V0LCBjb250ZXh0LCB4bWwgKTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIEFwcGx5IHBvc3RGaWx0ZXIKKyAgICAgICAgaWYgKCBwb3N0RmlsdGVyICkgewor
ICAgICAgICAgICAgdGVtcCA9IGNvbmRlbnNlKCBtYXRjaGVyT3V0LCBwb3N0TWFwICk7CisgICAg
ICAgICAgICBwb3N0RmlsdGVyKCB0ZW1wLCBbXSwgY29udGV4dCwgeG1sICk7CisKKyAgICAgICAg
ICAgIC8vIFVuLW1hdGNoIGZhaWxpbmcgZWxlbWVudHMgYnkgbW92aW5nIHRoZW0gYmFjayB0byBt
YXRjaGVySW4KKyAgICAgICAgICAgIGkgPSB0ZW1wLmxlbmd0aDsKKyAgICAgICAgICAgIHdoaWxl
ICggaS0tICkgeworICAgICAgICAgICAgICAgIGlmICggKGVsZW0gPSB0ZW1wW2ldKSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgbWF0Y2hlck91dFsgcG9zdE1hcFtpXSBdID0gIShtYXRjaGVySW5b
IHBvc3RNYXBbaV0gXSA9IGVsZW0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGlmICggc2VlZCApIHsKKyAgICAgICAgICAgIGlmICggcG9z
dEZpbmRlciB8fCBwcmVGaWx0ZXIgKSB7CisgICAgICAgICAgICAgICAgaWYgKCBwb3N0RmluZGVy
ICkgeworICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGZpbmFsIG1hdGNoZXJPdXQgYnkg
Y29uZGVuc2luZyB0aGlzIGludGVybWVkaWF0ZSBpbnRvIHBvc3RGaW5kZXIgY29udGV4dHMKKyAg
ICAgICAgICAgICAgICAgICAgdGVtcCA9IFtdOworICAgICAgICAgICAgICAgICAgICBpID0gbWF0
Y2hlck91dC5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlICggaS0tICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCAoZWxlbSA9IG1hdGNoZXJPdXRbaV0pICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlc3RvcmUgbWF0Y2hlckluIHNpbmNlIGVsZW0g
aXMgbm90IHlldCBhIGZpbmFsIG1hdGNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVt
cC5wdXNoKCAobWF0Y2hlckluW2ldID0gZWxlbSkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBwb3N0RmluZGVy
KCBudWxsLCAobWF0Y2hlck91dCA9IFtdKSwgdGVtcCwgeG1sICk7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgLy8gTW92ZSBtYXRjaGVkIGVsZW1lbnRzIGZyb20gc2VlZCB0
byByZXN1bHRzIHRvIGtlZXAgdGhlbSBzeW5jaHJvbml6ZWQKKyAgICAgICAgICAgICAgICBpID0g
bWF0Y2hlck91dC5sZW5ndGg7CisgICAgICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmICggKGVsZW0gPSBtYXRjaGVyT3V0W2ldKSAmJgorICAgICAgICAg
ICAgICAgICAgICAgICAgKHRlbXAgPSBwb3N0RmluZGVyID8gaW5kZXhPZiggc2VlZCwgZWxlbSAp
IDogcHJlTWFwW2ldKSA+IC0xICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICBzZWVkW3Rl
bXBdID0gIShyZXN1bHRzW3RlbXBdID0gZWxlbSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgLy8gQWRkIGVsZW1lbnRz
IHRvIHJlc3VsdHMsIHRocm91Z2ggcG9zdEZpbmRlciBpZiBkZWZpbmVkCisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBtYXRjaGVyT3V0ID0gY29uZGVuc2UoCisgICAgICAgICAgICAgICAg
bWF0Y2hlck91dCA9PT0gcmVzdWx0cyA/CisgICAgICAgICAgICAgICAgICAgIG1hdGNoZXJPdXQu
c3BsaWNlKCBwcmVleGlzdGluZywgbWF0Y2hlck91dC5sZW5ndGggKSA6CisgICAgICAgICAgICAg
ICAgICAgIG1hdGNoZXJPdXQKKyAgICAgICAgICAgICk7CisgICAgICAgICAgICBpZiAoIHBvc3RG
aW5kZXIgKSB7CisgICAgICAgICAgICAgICAgcG9zdEZpbmRlciggbnVsbCwgcmVzdWx0cywgbWF0
Y2hlck91dCwgeG1sICk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHB1
c2guYXBwbHkoIHJlc3VsdHMsIG1hdGNoZXJPdXQgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0pOworfQorCitmdW5jdGlvbiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zICkgewor
ICAgIHZhciBjaGVja0NvbnRleHQsIG1hdGNoZXIsIGosCisgICAgICAgIGxlbiA9IHRva2Vucy5s
ZW5ndGgsCisgICAgICAgIGxlYWRpbmdSZWxhdGl2ZSA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1sw
XS50eXBlIF0sCisgICAgICAgIGltcGxpY2l0UmVsYXRpdmUgPSBsZWFkaW5nUmVsYXRpdmUgfHwg
RXhwci5yZWxhdGl2ZVsiICJdLAorICAgICAgICBpID0gbGVhZGluZ1JlbGF0aXZlID8gMSA6IDAs
CisKKyAgICAgICAgLy8gVGhlIGZvdW5kYXRpb25hbCBtYXRjaGVyIGVuc3VyZXMgdGhhdCBlbGVt
ZW50cyBhcmUgcmVhY2hhYmxlIGZyb20gdG9wLWxldmVsIGNvbnRleHQocykKKyAgICAgICAgbWF0
Y2hDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAg
ICByZXR1cm4gZWxlbSA9PT0gY2hlY2tDb250ZXh0OworICAgICAgICB9LCBpbXBsaWNpdFJlbGF0
aXZlLCB0cnVlICksCisgICAgICAgIG1hdGNoQW55Q29udGV4dCA9IGFkZENvbWJpbmF0b3IoIGZ1
bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgcmV0dXJuIGluZGV4T2YoIGNoZWNrQ29udGV4
dCwgZWxlbSApID4gLTE7CisgICAgICAgIH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSwKKyAg
ICAgICAgbWF0Y2hlcnMgPSBbIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7CisgICAg
ICAgICAgICB2YXIgcmV0ID0gKCAhbGVhZGluZ1JlbGF0aXZlICYmICggeG1sIHx8IGNvbnRleHQg
IT09IG91dGVybW9zdENvbnRleHQgKSApIHx8ICgKKyAgICAgICAgICAgICAgICAoY2hlY2tDb250
ZXh0ID0gY29udGV4dCkubm9kZVR5cGUgPworICAgICAgICAgICAgICAgICAgICBtYXRjaENvbnRl
eHQoIGVsZW0sIGNvbnRleHQsIHhtbCApIDoKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hBbnlD
b250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSApOworICAgICAgICAgICAgLy8gQXZvaWQgaGFu
Z2luZyBvbnRvIGVsZW1lbnQgKGlzc3VlICMyOTkpCisgICAgICAgICAgICBjaGVja0NvbnRleHQg
PSBudWxsOworICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfSBdOworCisgICAgZm9y
ICggOyBpIDwgbGVuOyBpKysgKSB7CisgICAgICAgIGlmICggKG1hdGNoZXIgPSBFeHByLnJlbGF0
aXZlWyB0b2tlbnNbaV0udHlwZSBdKSApIHsKKyAgICAgICAgICAgIG1hdGNoZXJzID0gWyBhZGRD
b21iaW5hdG9yKGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLCBtYXRjaGVyKSBdOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgbWF0Y2hlciA9IEV4cHIuZmlsdGVyWyB0b2tlbnNbaV0u
dHlwZSBdLmFwcGx5KCBudWxsLCB0b2tlbnNbaV0ubWF0Y2hlcyApOworCisgICAgICAgICAgICAv
LyBSZXR1cm4gc3BlY2lhbCB1cG9uIHNlZWluZyBhIHBvc2l0aW9uYWwgbWF0Y2hlcgorICAgICAg
ICAgICAgaWYgKCBtYXRjaGVyWyBleHBhbmRvIF0gKSB7CisgICAgICAgICAgICAgICAgLy8gRmlu
ZCB0aGUgbmV4dCByZWxhdGl2ZSBvcGVyYXRvciAoaWYgYW55KSBmb3IgcHJvcGVyIGhhbmRsaW5n
CisgICAgICAgICAgICAgICAgaiA9ICsraTsKKyAgICAgICAgICAgICAgICBmb3IgKCA7IGogPCBs
ZW47IGorKyApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBFeHByLnJlbGF0aXZlWyB0b2tl
bnNbal0udHlwZSBdICkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJu
IHNldE1hdGNoZXIoCisgICAgICAgICAgICAgICAgICAgIGkgPiAxICYmIGVsZW1lbnRNYXRjaGVy
KCBtYXRjaGVycyApLAorICAgICAgICAgICAgICAgICAgICBpID4gMSAmJiB0b1NlbGVjdG9yKAor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHByZWNlZGluZyB0b2tlbiB3YXMgYSBk
ZXNjZW5kYW50IGNvbWJpbmF0b3IsIGluc2VydCBhbiBpbXBsaWNpdCBhbnktZWxlbWVudCBgKmAK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vucy5zbGljZSggMCwgaSAtIDEgKS5jb25jYXQo
eyB2YWx1ZTogdG9rZW5zWyBpIC0gMiBdLnR5cGUgPT09ICIgIiA/ICIqIiA6ICIiIH0pCisgICAg
ICAgICAgICAgICAgICAgICkucmVwbGFjZSggcnRyaW0sICIkMSIgKSwKKyAgICAgICAgICAgICAg
ICAgICAgbWF0Y2hlciwKKyAgICAgICAgICAgICAgICAgICAgaSA8IGogJiYgbWF0Y2hlckZyb21U
b2tlbnMoIHRva2Vucy5zbGljZSggaSwgaiApICksCisgICAgICAgICAgICAgICAgICAgIGogPCBs
ZW4gJiYgbWF0Y2hlckZyb21Ub2tlbnMoICh0b2tlbnMgPSB0b2tlbnMuc2xpY2UoIGogKSkgKSwK
KyAgICAgICAgICAgICAgICAgICAgaiA8IGxlbiAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKQorICAg
ICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtYXRjaGVycy5wdXNo
KCBtYXRjaGVyICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZWxlbWVudE1hdGNo
ZXIoIG1hdGNoZXJzICk7Cit9CisKK2Z1bmN0aW9uIG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycygg
ZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycyApIHsKKyAgICB2YXIgYnlTZXQgPSBzZXRNYXRj
aGVycy5sZW5ndGggPiAwLAorICAgICAgICBieUVsZW1lbnQgPSBlbGVtZW50TWF0Y2hlcnMubGVu
Z3RoID4gMCwKKyAgICAgICAgc3VwZXJNYXRjaGVyID0gZnVuY3Rpb24oIHNlZWQsIGNvbnRleHQs
IHhtbCwgcmVzdWx0cywgb3V0ZXJtb3N0ICkgeworICAgICAgICAgICAgdmFyIGVsZW0sIGosIG1h
dGNoZXIsCisgICAgICAgICAgICAgICAgbWF0Y2hlZENvdW50ID0gMCwKKyAgICAgICAgICAgICAg
ICBpID0gIjAiLAorICAgICAgICAgICAgICAgIHVubWF0Y2hlZCA9IHNlZWQgJiYgW10sCisgICAg
ICAgICAgICAgICAgc2V0TWF0Y2hlZCA9IFtdLAorICAgICAgICAgICAgICAgIGNvbnRleHRCYWNr
dXAgPSBvdXRlcm1vc3RDb250ZXh0LAorICAgICAgICAgICAgICAgIC8vIFdlIG11c3QgYWx3YXlz
IGhhdmUgZWl0aGVyIHNlZWQgZWxlbWVudHMgb3Igb3V0ZXJtb3N0IGNvbnRleHQKKyAgICAgICAg
ICAgICAgICBlbGVtcyA9IHNlZWQgfHwgYnlFbGVtZW50ICYmIEV4cHIuZmluZFsiVEFHIl0oICIq
Iiwgb3V0ZXJtb3N0ICksCisgICAgICAgICAgICAgICAgLy8gVXNlIGludGVnZXIgZGlycnVucyBp
ZmYgdGhpcyBpcyB0aGUgb3V0ZXJtb3N0IG1hdGNoZXIKKyAgICAgICAgICAgICAgICBkaXJydW5z
VW5pcXVlID0gKGRpcnJ1bnMgKz0gY29udGV4dEJhY2t1cCA9PSBudWxsID8gMSA6IE1hdGgucmFu
ZG9tKCkgfHwgMC4xKSwKKyAgICAgICAgICAgICAgICBsZW4gPSBlbGVtcy5sZW5ndGg7CisKKyAg
ICAgICAgICAgIGlmICggb3V0ZXJtb3N0ICkgeworICAgICAgICAgICAgICAgIG91dGVybW9zdENv
bnRleHQgPSBjb250ZXh0ID09PSBkb2N1bWVudCB8fCBjb250ZXh0IHx8IG91dGVybW9zdDsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQWRkIGVsZW1lbnRzIHBhc3NpbmcgZWxlbWVu
dE1hdGNoZXJzIGRpcmVjdGx5IHRvIHJlc3VsdHMKKyAgICAgICAgICAgIC8vIFN1cHBvcnQ6IElF
PDksIFNhZmFyaQorICAgICAgICAgICAgLy8gVG9sZXJhdGUgTm9kZUxpc3QgcHJvcGVydGllcyAo
SUU6ICJsZW5ndGgiOyBTYWZhcmk6IDxudW1iZXI+KSBtYXRjaGluZyBlbGVtZW50cyBieSBpZAor
ICAgICAgICAgICAgZm9yICggOyBpICE9PSBsZW4gJiYgKGVsZW0gPSBlbGVtc1tpXSkgIT0gbnVs
bDsgaSsrICkgeworICAgICAgICAgICAgICAgIGlmICggYnlFbGVtZW50ICYmIGVsZW0gKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGogPSAwOworICAgICAgICAgICAgICAgICAgICBpZiAoICFjb250
ZXh0ICYmIGVsZW0ub3duZXJEb2N1bWVudCAhPT0gZG9jdW1lbnQgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBzZXREb2N1bWVudCggZWxlbSApOworICAgICAgICAgICAgICAgICAgICAgICAg
eG1sID0gIWRvY3VtZW50SXNIVE1MOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIHdoaWxlICggKG1hdGNoZXIgPSBlbGVtZW50TWF0Y2hlcnNbaisrXSkgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQgfHwgZG9j
dW1lbnQsIHhtbCkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNo
KCBlbGVtICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCBvdXRlcm1vc3QgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkaXJydW5zID0g
ZGlycnVuc1VuaXF1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIC8vIFRyYWNrIHVubWF0Y2hlZCBlbGVtZW50cyBmb3Igc2V0IGZp
bHRlcnMKKyAgICAgICAgICAgICAgICBpZiAoIGJ5U2V0ICkgeworICAgICAgICAgICAgICAgICAg
ICAvLyBUaGV5IHdpbGwgaGF2ZSBnb25lIHRocm91Z2ggYWxsIHBvc3NpYmxlIG1hdGNoZXJzCisg
ICAgICAgICAgICAgICAgICAgIGlmICggKGVsZW0gPSAhbWF0Y2hlciAmJiBlbGVtKSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWRDb3VudC0tOworICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gTGVuZ3RoZW4gdGhlIGFycmF5IGZvciBldmVy
eSBlbGVtZW50LCBtYXRjaGVkIG9yIG5vdAorICAgICAgICAgICAgICAgICAgICBpZiAoIHNlZWQg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bm1hdGNoZWQucHVzaCggZWxlbSApOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyBgaWAgaXMgbm93IHRoZSBjb3VudCBvZiBlbGVtZW50cyB2aXNpdGVkIGFi
b3ZlLCBhbmQgYWRkaW5nIGl0IHRvIGBtYXRjaGVkQ291bnRgCisgICAgICAgICAgICAvLyBtYWtl
cyB0aGUgbGF0dGVyIG5vbm5lZ2F0aXZlLgorICAgICAgICAgICAgbWF0Y2hlZENvdW50ICs9IGk7
CisKKyAgICAgICAgICAgIC8vIEFwcGx5IHNldCBmaWx0ZXJzIHRvIHVubWF0Y2hlZCBlbGVtZW50
cworICAgICAgICAgICAgLy8gTk9URTogVGhpcyBjYW4gYmUgc2tpcHBlZCBpZiB0aGVyZSBhcmUg
bm8gdW5tYXRjaGVkIGVsZW1lbnRzIChpLmUuLCBgbWF0Y2hlZENvdW50YAorICAgICAgICAgICAg
Ly8gZXF1YWxzIGBpYCksIHVubGVzcyB3ZSBkaWRuJ3QgdmlzaXQgX2FueV8gZWxlbWVudHMgaW4g
dGhlIGFib3ZlIGxvb3AgYmVjYXVzZSB3ZSBoYXZlCisgICAgICAgICAgICAvLyBubyBlbGVtZW50
IG1hdGNoZXJzIGFuZCBubyBzZWVkLgorICAgICAgICAgICAgLy8gSW5jcmVtZW50aW5nIGFuIGlu
aXRpYWxseS1zdHJpbmcgIjAiIGBpYCBhbGxvd3MgYGlgIHRvIHJlbWFpbiBhIHN0cmluZyBvbmx5
IGluIHRoYXQKKyAgICAgICAgICAgIC8vIGNhc2UsIHdoaWNoIHdpbGwgcmVzdWx0IGluIGEgIjAw
IiBgbWF0Y2hlZENvdW50YCB0aGF0IGRpZmZlcnMgZnJvbSBgaWAgYnV0IGlzIGFsc28KKyAgICAg
ICAgICAgIC8vIG51bWVyaWNhbGx5IHplcm8uCisgICAgICAgICAgICBpZiAoIGJ5U2V0ICYmIGkg
IT09IG1hdGNoZWRDb3VudCApIHsKKyAgICAgICAgICAgICAgICBqID0gMDsKKyAgICAgICAgICAg
ICAgICB3aGlsZSAoIChtYXRjaGVyID0gc2V0TWF0Y2hlcnNbaisrXSkgKSB7CisgICAgICAgICAg
ICAgICAgICAgIG1hdGNoZXIoIHVubWF0Y2hlZCwgc2V0TWF0Y2hlZCwgY29udGV4dCwgeG1sICk7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCBzZWVkICkgeworICAg
ICAgICAgICAgICAgICAgICAvLyBSZWludGVncmF0ZSBlbGVtZW50IG1hdGNoZXMgdG8gZWxpbWlu
YXRlIHRoZSBuZWVkIGZvciBzb3J0aW5nCisgICAgICAgICAgICAgICAgICAgIGlmICggbWF0Y2hl
ZENvdW50ID4gMCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggaS0tICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISh1bm1hdGNoZWRbaV0gfHwgc2V0TWF0
Y2hlZFtpXSkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hdGNoZWRb
aV0gPSBwb3AuY2FsbCggcmVzdWx0cyApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIC8vIERpc2NhcmQgaW5kZXggcGxhY2Vob2xkZXIgdmFsdWVzIHRvIGdl
dCBvbmx5IGFjdHVhbCBtYXRjaGVzCisgICAgICAgICAgICAgICAgICAgIHNldE1hdGNoZWQgPSBj
b25kZW5zZSggc2V0TWF0Y2hlZCApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIC8vIEFkZCBtYXRjaGVzIHRvIHJlc3VsdHMKKyAgICAgICAgICAgICAgICBwdXNoLmFwcGx5
KCByZXN1bHRzLCBzZXRNYXRjaGVkICk7CisKKyAgICAgICAgICAgICAgICAvLyBTZWVkbGVzcyBz
ZXQgbWF0Y2hlcyBzdWNjZWVkaW5nIG11bHRpcGxlIHN1Y2Nlc3NmdWwgbWF0Y2hlcnMgc3RpcHVs
YXRlIHNvcnRpbmcKKyAgICAgICAgICAgICAgICBpZiAoIG91dGVybW9zdCAmJiAhc2VlZCAmJiBz
ZXRNYXRjaGVkLmxlbmd0aCA+IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgKCBtYXRjaGVkQ291
bnQgKyBzZXRNYXRjaGVycy5sZW5ndGggKSA+IDEgKSB7CisKKyAgICAgICAgICAgICAgICAgICAg
U2l6emxlLnVuaXF1ZVNvcnQoIHJlc3VsdHMgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIC8vIE92ZXJyaWRlIG1hbmlwdWxhdGlvbiBvZiBnbG9iYWxz
IGJ5IG5lc3RlZCBtYXRjaGVycworICAgICAgICAgICAgaWYgKCBvdXRlcm1vc3QgKSB7CisgICAg
ICAgICAgICAgICAgZGlycnVucyA9IGRpcnJ1bnNVbmlxdWU7CisgICAgICAgICAgICAgICAgb3V0
ZXJtb3N0Q29udGV4dCA9IGNvbnRleHRCYWNrdXA7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHJldHVybiB1bm1hdGNoZWQ7CisgICAgICAgIH07CisKKyAgICByZXR1cm4gYnlTZXQgPwor
ICAgICAgICBtYXJrRnVuY3Rpb24oIHN1cGVyTWF0Y2hlciApIDoKKyAgICAgICAgc3VwZXJNYXRj
aGVyOworfQorCitjb21waWxlID0gU2l6emxlLmNvbXBpbGUgPSBmdW5jdGlvbiggc2VsZWN0b3Is
IG1hdGNoIC8qIEludGVybmFsIFVzZSBPbmx5ICovICkgeworICAgIHZhciBpLAorICAgICAgICBz
ZXRNYXRjaGVycyA9IFtdLAorICAgICAgICBlbGVtZW50TWF0Y2hlcnMgPSBbXSwKKyAgICAgICAg
Y2FjaGVkID0gY29tcGlsZXJDYWNoZVsgc2VsZWN0b3IgKyAiICIgXTsKKworICAgIGlmICggIWNh
Y2hlZCApIHsKKyAgICAgICAgLy8gR2VuZXJhdGUgYSBmdW5jdGlvbiBvZiByZWN1cnNpdmUgZnVu
Y3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2hlY2sgZWFjaCBlbGVtZW50CisgICAgICAgIGlm
ICggIW1hdGNoICkgeworICAgICAgICAgICAgbWF0Y2ggPSB0b2tlbml6ZSggc2VsZWN0b3IgKTsK
KyAgICAgICAgfQorICAgICAgICBpID0gbWF0Y2gubGVuZ3RoOworICAgICAgICB3aGlsZSAoIGkt
LSApIHsKKyAgICAgICAgICAgIGNhY2hlZCA9IG1hdGNoZXJGcm9tVG9rZW5zKCBtYXRjaFtpXSAp
OworICAgICAgICAgICAgaWYgKCBjYWNoZWRbIGV4cGFuZG8gXSApIHsKKyAgICAgICAgICAgICAg
ICBzZXRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgZWxlbWVudE1hdGNoZXJzLnB1c2goIGNhY2hlZCApOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgLy8gQ2FjaGUgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uCisg
ICAgICAgIGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGUoIHNlbGVjdG9yLCBtYXRjaGVyRnJvbUdyb3Vw
TWF0Y2hlcnMoIGVsZW1lbnRNYXRjaGVycywgc2V0TWF0Y2hlcnMgKSApOworCisgICAgICAgIC8v
IFNhdmUgc2VsZWN0b3IgYW5kIHRva2VuaXphdGlvbgorICAgICAgICBjYWNoZWQuc2VsZWN0b3Ig
PSBzZWxlY3RvcjsKKyAgICB9CisgICAgcmV0dXJuIGNhY2hlZDsKK307CisKKy8qKgorICogQSBs
b3ctbGV2ZWwgc2VsZWN0aW9uIGZ1bmN0aW9uIHRoYXQgd29ya3Mgd2l0aCBTaXp6bGUncyBjb21w
aWxlZAorICogIHNlbGVjdG9yIGZ1bmN0aW9ucworICogQHBhcmFtIHtTdHJpbmd8RnVuY3Rpb259
IHNlbGVjdG9yIEEgc2VsZWN0b3Igb3IgYSBwcmUtY29tcGlsZWQKKyAqICBzZWxlY3RvciBmdW5j
dGlvbiBidWlsdCB3aXRoIFNpenpsZS5jb21waWxlCisgKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRl
eHQKKyAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHRzXQorICogQHBhcmFtIHtBcnJheX0gW3NlZWRd
IEEgc2V0IG9mIGVsZW1lbnRzIHRvIG1hdGNoIGFnYWluc3QKKyAqLworc2VsZWN0ID0gU2l6emxl
LnNlbGVjdCA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApIHsK
KyAgICB2YXIgaSwgdG9rZW5zLCB0b2tlbiwgdHlwZSwgZmluZCwKKyAgICAgICAgY29tcGlsZWQg
PSB0eXBlb2Ygc2VsZWN0b3IgPT09ICJmdW5jdGlvbiIgJiYgc2VsZWN0b3IsCisgICAgICAgIG1h
dGNoID0gIXNlZWQgJiYgdG9rZW5pemUoIChzZWxlY3RvciA9IGNvbXBpbGVkLnNlbGVjdG9yIHx8
IHNlbGVjdG9yKSApOworCisgICAgcmVzdWx0cyA9IHJlc3VsdHMgfHwgW107CisKKyAgICAvLyBU
cnkgdG8gbWluaW1pemUgb3BlcmF0aW9ucyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBzZWxlY3RvciBp
biB0aGUgbGlzdCBhbmQgbm8gc2VlZAorICAgIC8vICh0aGUgbGF0dGVyIG9mIHdoaWNoIGd1YXJh
bnRlZXMgdXMgY29udGV4dCkKKyAgICBpZiAoIG1hdGNoLmxlbmd0aCA9PT0gMSApIHsKKworICAg
ICAgICAvLyBSZWR1Y2UgY29udGV4dCBpZiB0aGUgbGVhZGluZyBjb21wb3VuZCBzZWxlY3RvciBp
cyBhbiBJRAorICAgICAgICB0b2tlbnMgPSBtYXRjaFswXSA9IG1hdGNoWzBdLnNsaWNlKCAwICk7
CisgICAgICAgIGlmICggdG9rZW5zLmxlbmd0aCA+IDIgJiYgKHRva2VuID0gdG9rZW5zWzBdKS50
eXBlID09PSAiSUQiICYmCisgICAgICAgICAgICAgICAgY29udGV4dC5ub2RlVHlwZSA9PT0gOSAm
JiBkb2N1bWVudElzSFRNTCAmJiBFeHByLnJlbGF0aXZlWyB0b2tlbnNbMV0udHlwZSBdICkgewor
CisgICAgICAgICAgICBjb250ZXh0ID0gKCBFeHByLmZpbmRbIklEIl0oIHRva2VuLm1hdGNoZXNb
MF0ucmVwbGFjZShydW5lc2NhcGUsIGZ1bmVzY2FwZSksIGNvbnRleHQgKSB8fCBbXSApWzBdOwor
ICAgICAgICAgICAgaWYgKCAhY29udGV4dCApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0czsKKworICAgICAgICAgICAgLy8gUHJlY29tcGlsZWQgbWF0Y2hlcnMgd2lsbCBzdGlsbCB2
ZXJpZnkgYW5jZXN0cnksIHNvIHN0ZXAgdXAgYSBsZXZlbAorICAgICAgICAgICAgfSBlbHNlIGlm
ICggY29tcGlsZWQgKSB7CisgICAgICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHQucGFyZW50
Tm9kZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3Rvci5z
bGljZSggdG9rZW5zLnNoaWZ0KCkudmFsdWUubGVuZ3RoICk7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBGZXRjaCBhIHNlZWQgc2V0IGZvciByaWdodC10by1sZWZ0IG1hdGNoaW5nCisgICAgICAg
IGkgPSBtYXRjaEV4cHJbIm5lZWRzQ29udGV4dCJdLnRlc3QoIHNlbGVjdG9yICkgPyAwIDogdG9r
ZW5zLmxlbmd0aDsKKyAgICAgICAgd2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAgICB0b2tlbiA9
IHRva2Vuc1tpXTsKKworICAgICAgICAgICAgLy8gQWJvcnQgaWYgd2UgaGl0IGEgY29tYmluYXRv
cgorICAgICAgICAgICAgaWYgKCBFeHByLnJlbGF0aXZlWyAodHlwZSA9IHRva2VuLnR5cGUpIF0g
KSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoIChmaW5kID0gRXhwci5maW5kWyB0eXBlIF0pICkgeworICAgICAgICAgICAgICAgIC8vIFNl
YXJjaCwgZXhwYW5kaW5nIGNvbnRleHQgZm9yIGxlYWRpbmcgc2libGluZyBjb21iaW5hdG9ycwor
ICAgICAgICAgICAgICAgIGlmICggKHNlZWQgPSBmaW5kKAorICAgICAgICAgICAgICAgICAgICB0
b2tlbi5tYXRjaGVzWzBdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICksCisgICAgICAg
ICAgICAgICAgICAgIHJzaWJsaW5nLnRlc3QoIHRva2Vuc1swXS50eXBlICkgJiYgdGVzdENvbnRl
eHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8IGNvbnRleHQKKyAgICAgICAgICAgICAgICApKSAp
IHsKKworICAgICAgICAgICAgICAgICAgICAvLyBJZiBzZWVkIGlzIGVtcHR5IG9yIG5vIHRva2Vu
cyByZW1haW4sIHdlIGNhbiByZXR1cm4gZWFybHkKKyAgICAgICAgICAgICAgICAgICAgdG9rZW5z
LnNwbGljZSggaSwgMSApOworICAgICAgICAgICAgICAgICAgICBzZWxlY3RvciA9IHNlZWQubGVu
Z3RoICYmIHRvU2VsZWN0b3IoIHRva2VucyApOworICAgICAgICAgICAgICAgICAgICBpZiAoICFz
ZWxlY3RvciApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2guYXBwbHkoIHJlc3VsdHMs
IHNlZWQgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOworICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ29tcGls
ZSBhbmQgZXhlY3V0ZSBhIGZpbHRlcmluZyBmdW5jdGlvbiBpZiBvbmUgaXMgbm90IHByb3ZpZGVk
CisgICAgLy8gUHJvdmlkZSBgbWF0Y2hgIHRvIGF2b2lkIHJldG9rZW5pemF0aW9uIGlmIHdlIG1v
ZGlmaWVkIHRoZSBzZWxlY3RvciBhYm92ZQorICAgICggY29tcGlsZWQgfHwgY29tcGlsZSggc2Vs
ZWN0b3IsIG1hdGNoICkgKSgKKyAgICAgICAgc2VlZCwKKyAgICAgICAgY29udGV4dCwKKyAgICAg
ICAgIWRvY3VtZW50SXNIVE1MLAorICAgICAgICByZXN1bHRzLAorICAgICAgICAhY29udGV4dCB8
fCByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVu
dE5vZGUgKSB8fCBjb250ZXh0CisgICAgKTsKKyAgICByZXR1cm4gcmVzdWx0czsKK307CisKKy8v
IE9uZS10aW1lIGFzc2lnbm1lbnRzCisKKy8vIFNvcnQgc3RhYmlsaXR5CitzdXBwb3J0LnNvcnRT
dGFibGUgPSBleHBhbmRvLnNwbGl0KCIiKS5zb3J0KCBzb3J0T3JkZXIgKS5qb2luKCIiKSA9PT0g
ZXhwYW5kbzsKKworLy8gU3VwcG9ydDogQ2hyb21lIDE0LTM1KworLy8gQWx3YXlzIGFzc3VtZSBk
dXBsaWNhdGVzIGlmIHRoZXkgYXJlbid0IHBhc3NlZCB0byB0aGUgY29tcGFyaXNvbiBmdW5jdGlv
bgorc3VwcG9ydC5kZXRlY3REdXBsaWNhdGVzID0gISFoYXNEdXBsaWNhdGU7CisKKy8vIEluaXRp
YWxpemUgYWdhaW5zdCB0aGUgZGVmYXVsdCBkb2N1bWVudAorc2V0RG9jdW1lbnQoKTsKKworLy8g
U3VwcG9ydDogV2Via2l0PDUzNy4zMiAtIFNhZmFyaSA2LjAuMy9DaHJvbWUgMjUgKGZpeGVkIGlu
IENocm9tZSAyNykKKy8vIERldGFjaGVkIG5vZGVzIGNvbmZvdW5kaW5nbHkgZm9sbG93ICplYWNo
IG90aGVyKgorc3VwcG9ydC5zb3J0RGV0YWNoZWQgPSBhc3NlcnQoZnVuY3Rpb24oIGVsICkgewor
ICAgIC8vIFNob3VsZCByZXR1cm4gMSwgYnV0IHJldHVybnMgNCAoZm9sbG93aW5nKQorICAgIHJl
dHVybiBlbC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
ZmllbGRzZXQiKSApICYgMTsKK30pOworCisvLyBTdXBwb3J0OiBJRTw4CisvLyBQcmV2ZW50IGF0
dHJpYnV0ZS9wcm9wZXJ0eSAiaW50ZXJwb2xhdGlvbiIKKy8vIGh0dHBzOi8vbXNkbi5taWNyb3Nv
ZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1MzY0MjklMjhWUy44NSUyOS5hc3B4CitpZiAoICFhc3Nl
cnQoZnVuY3Rpb24oIGVsICkgeworICAgIGVsLmlubmVySFRNTCA9ICI8YSBocmVmPScjJz48L2E+
IjsKKyAgICByZXR1cm4gZWwuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKSA9PT0gIiMi
IDsKK30pICkgeworICAgIGFkZEhhbmRsZSggInR5cGV8aHJlZnxoZWlnaHR8d2lkdGgiLCBmdW5j
dGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7CisgICAgICAgIGlmICggIWlzWE1MICkgeworICAg
ICAgICAgICAgcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lLCBuYW1lLnRvTG93ZXJDYXNl
KCkgPT09ICJ0eXBlIiA/IDEgOiAyICk7CisgICAgICAgIH0KKyAgICB9KTsKK30KKworLy8gU3Vw
cG9ydDogSUU8OQorLy8gVXNlIGRlZmF1bHRWYWx1ZSBpbiBwbGFjZSBvZiBnZXRBdHRyaWJ1dGUo
InZhbHVlIikKK2lmICggIXN1cHBvcnQuYXR0cmlidXRlcyB8fCAhYXNzZXJ0KGZ1bmN0aW9uKCBl
bCApIHsKKyAgICBlbC5pbm5lckhUTUwgPSAiPGlucHV0Lz4iOworICAgIGVsLmZpcnN0Q2hpbGQu
c2V0QXR0cmlidXRlKCAidmFsdWUiLCAiIiApOworICAgIHJldHVybiBlbC5maXJzdENoaWxkLmdl
dEF0dHJpYnV0ZSggInZhbHVlIiApID09PSAiIjsKK30pICkgeworICAgIGFkZEhhbmRsZSggInZh
bHVlIiwgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkgeworICAgICAgICBpZiAoICFpc1hN
TCAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICJpbnB1dCIgKSB7CisgICAgICAg
ICAgICByZXR1cm4gZWxlbS5kZWZhdWx0VmFsdWU7CisgICAgICAgIH0KKyAgICB9KTsKK30KKwor
Ly8gU3VwcG9ydDogSUU8OQorLy8gVXNlIGdldEF0dHJpYnV0ZU5vZGUgdG8gZmV0Y2ggYm9vbGVh
bnMgd2hlbiBnZXRBdHRyaWJ1dGUgbGllcworaWYgKCAhYXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHsK
KyAgICByZXR1cm4gZWwuZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpID09IG51bGw7Cit9KSApIHsK
KyAgICBhZGRIYW5kbGUoIGJvb2xlYW5zLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7
CisgICAgICAgIHZhciB2YWw7CisgICAgICAgIGlmICggIWlzWE1MICkgeworICAgICAgICAgICAg
cmV0dXJuIGVsZW1bIG5hbWUgXSA9PT0gdHJ1ZSA/IG5hbWUudG9Mb3dlckNhc2UoKSA6CisgICAg
ICAgICAgICAgICAgICAgICh2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKSkgJiYg
dmFsLnNwZWNpZmllZCA/CisgICAgICAgICAgICAgICAgICAgIHZhbC52YWx1ZSA6CisgICAgICAg
ICAgICAgICAgbnVsbDsKKyAgICAgICAgfQorICAgIH0pOworfQorCityZXR1cm4gU2l6emxlOwor
Cit9KSggd2luZG93ICk7CisKKworCitqUXVlcnkuZmluZCA9IFNpenpsZTsKK2pRdWVyeS5leHBy
ID0gU2l6emxlLnNlbGVjdG9yczsKKworLy8gRGVwcmVjYXRlZAoralF1ZXJ5LmV4cHJbICI6IiBd
ID0galF1ZXJ5LmV4cHIucHNldWRvczsKK2pRdWVyeS51bmlxdWVTb3J0ID0galF1ZXJ5LnVuaXF1
ZSA9IFNpenpsZS51bmlxdWVTb3J0OworalF1ZXJ5LnRleHQgPSBTaXp6bGUuZ2V0VGV4dDsKK2pR
dWVyeS5pc1hNTERvYyA9IFNpenpsZS5pc1hNTDsKK2pRdWVyeS5jb250YWlucyA9IFNpenpsZS5j
b250YWluczsKK2pRdWVyeS5lc2NhcGVTZWxlY3RvciA9IFNpenpsZS5lc2NhcGU7CisKKworCisK
K3ZhciBkaXIgPSBmdW5jdGlvbiggZWxlbSwgZGlyLCB1bnRpbCApIHsKKyAgICB2YXIgbWF0Y2hl
ZCA9IFtdLAorICAgICAgICB0cnVuY2F0ZSA9IHVudGlsICE9PSB1bmRlZmluZWQ7CisKKyAgICB3
aGlsZSAoICggZWxlbSA9IGVsZW1bIGRpciBdICkgJiYgZWxlbS5ub2RlVHlwZSAhPT0gOSApIHsK
KyAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkgeworICAgICAgICAgICAgaWYgKCB0
cnVuY2F0ZSAmJiBqUXVlcnkoIGVsZW0gKS5pcyggdW50aWwgKSApIHsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1hdGNoZWQucHVzaCggZWxlbSAp
OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBtYXRjaGVkOworfTsKKworCit2YXIgc2li
bGluZ3MgPSBmdW5jdGlvbiggbiwgZWxlbSApIHsKKyAgICB2YXIgbWF0Y2hlZCA9IFtdOworCisg
ICAgZm9yICggOyBuOyBuID0gbi5uZXh0U2libGluZyApIHsKKyAgICAgICAgaWYgKCBuLm5vZGVU
eXBlID09PSAxICYmIG4gIT09IGVsZW0gKSB7CisgICAgICAgICAgICBtYXRjaGVkLnB1c2goIG4g
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBtYXRjaGVkOworfTsKKworCit2YXIg
cm5lZWRzQ29udGV4dCA9IGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dDsKKwordmFyIHJz
aW5nbGVUYWcgPSAoIC9ePChbYS16XVteXC9cMD46XHgyMFx0XHJcblxmXSopW1x4MjBcdFxyXG5c
Zl0qXC8/Pig/OjxcL1wxPnwpJC9pICk7CisKKworCit2YXIgcmlzU2ltcGxlID0gL14uW146I1xb
XC4sXSokLzsKKworLy8gSW1wbGVtZW50IHRoZSBpZGVudGljYWwgZnVuY3Rpb25hbGl0eSBmb3Ig
ZmlsdGVyIGFuZCBub3QKK2Z1bmN0aW9uIHdpbm5vdyggZWxlbWVudHMsIHF1YWxpZmllciwgbm90
ICkgeworICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHF1YWxpZmllciApICkgeworICAgICAg
ICByZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSwgaSApIHsKKyAg
ICAgICAgICAgIHJldHVybiAhIXF1YWxpZmllci5jYWxsKCBlbGVtLCBpLCBlbGVtICkgIT09IG5v
dDsKKyAgICAgICAgfSApOworICAgIH0KKworICAgIC8vIFNpbmdsZSBlbGVtZW50CisgICAgaWYg
KCBxdWFsaWZpZXIubm9kZVR5cGUgKSB7CisgICAgICAgIHJldHVybiBqUXVlcnkuZ3JlcCggZWxl
bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgcmV0dXJuICggZWxlbSA9PT0g
cXVhbGlmaWVyICkgIT09IG5vdDsKKyAgICAgICAgfSApOworICAgIH0KKworICAgIC8vIEFycmF5
bGlrZSBvZiBlbGVtZW50cyAoalF1ZXJ5LCBhcmd1bWVudHMsIEFycmF5KQorICAgIGlmICggdHlw
ZW9mIHF1YWxpZmllciAhPT0gInN0cmluZyIgKSB7CisgICAgICAgIHJldHVybiBqUXVlcnkuZ3Jl
cCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgcmV0dXJuICggaW5k
ZXhPZi5jYWxsKCBxdWFsaWZpZXIsIGVsZW0gKSA+IC0xICkgIT09IG5vdDsKKyAgICAgICAgfSAp
OworICAgIH0KKworICAgIC8vIFNpbXBsZSBzZWxlY3RvciB0aGF0IGNhbiBiZSBmaWx0ZXJlZCBk
aXJlY3RseSwgcmVtb3Zpbmcgbm9uLUVsZW1lbnRzCisgICAgaWYgKCByaXNTaW1wbGUudGVzdCgg
cXVhbGlmaWVyICkgKSB7CisgICAgICAgIHJldHVybiBqUXVlcnkuZmlsdGVyKCBxdWFsaWZpZXIs
IGVsZW1lbnRzLCBub3QgKTsKKyAgICB9CisKKyAgICAvLyBDb21wbGV4IHNlbGVjdG9yLCBjb21w
YXJlIHRoZSB0d28gc2V0cywgcmVtb3Zpbmcgbm9uLUVsZW1lbnRzCisgICAgcXVhbGlmaWVyID0g
alF1ZXJ5LmZpbHRlciggcXVhbGlmaWVyLCBlbGVtZW50cyApOworICAgIHJldHVybiBqUXVlcnku
Z3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICByZXR1cm4gKCBpbmRl
eE9mLmNhbGwoIHF1YWxpZmllciwgZWxlbSApID4gLTEgKSAhPT0gbm90ICYmIGVsZW0ubm9kZVR5
cGUgPT09IDE7CisgICAgfSApOworfQorCitqUXVlcnkuZmlsdGVyID0gZnVuY3Rpb24oIGV4cHIs
IGVsZW1zLCBub3QgKSB7CisgICAgdmFyIGVsZW0gPSBlbGVtc1sgMCBdOworCisgICAgaWYgKCBu
b3QgKSB7CisgICAgICAgIGV4cHIgPSAiOm5vdCgiICsgZXhwciArICIpIjsKKyAgICB9CisKKyAg
ICBpZiAoIGVsZW1zLmxlbmd0aCA9PT0gMSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkgeworICAg
ICAgICByZXR1cm4galF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBlbGVtLCBleHByICkgPyBb
IGVsZW0gXSA6IFtdOworICAgIH0KKworICAgIHJldHVybiBqUXVlcnkuZmluZC5tYXRjaGVzKCBl
eHByLCBqUXVlcnkuZ3JlcCggZWxlbXMsIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICByZXR1
cm4gZWxlbS5ub2RlVHlwZSA9PT0gMTsKKyAgICB9ICkgKTsKK307CisKK2pRdWVyeS5mbi5leHRl
bmQoIHsKKyAgICBmaW5kOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CisgICAgICAgIHZhciBpLCBy
ZXQsCisgICAgICAgICAgICBsZW4gPSB0aGlzLmxlbmd0aCwKKyAgICAgICAgICAgIHNlbGYgPSB0
aGlzOworCisgICAgICAgIGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSAic3RyaW5nIiApIHsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5KCBzZWxlY3RvciApLmZpbHRl
ciggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBsZW47IGkr
KyApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuY29udGFpbnMoIHNlbGZbIGkg
XSwgdGhpcyApICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9ICkgKTsK
KyAgICAgICAgfQorCisgICAgICAgIHJldCA9IHRoaXMucHVzaFN0YWNrKCBbXSApOworCisgICAg
ICAgIGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7CisgICAgICAgICAgICBqUXVlcnkuZmlu
ZCggc2VsZWN0b3IsIHNlbGZbIGkgXSwgcmV0ICk7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gbGVuID4gMSA/IGpRdWVyeS51bmlxdWVTb3J0KCByZXQgKSA6IHJldDsKKyAgICB9LAorICAg
IGZpbHRlcjogZnVuY3Rpb24oIHNlbGVjdG9yICkgeworICAgICAgICByZXR1cm4gdGhpcy5wdXNo
U3RhY2soIHdpbm5vdyggdGhpcywgc2VsZWN0b3IgfHwgW10sIGZhbHNlICkgKTsKKyAgICB9LAor
ICAgIG5vdDogZnVuY3Rpb24oIHNlbGVjdG9yICkgeworICAgICAgICByZXR1cm4gdGhpcy5wdXNo
U3RhY2soIHdpbm5vdyggdGhpcywgc2VsZWN0b3IgfHwgW10sIHRydWUgKSApOworICAgIH0sCisg
ICAgaXM6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKKyAgICAgICAgcmV0dXJuICEhd2lubm93KAor
ICAgICAgICAgICAgdGhpcywKKworICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHBvc2l0aW9u
YWwvcmVsYXRpdmUgc2VsZWN0b3IsIGNoZWNrIG1lbWJlcnNoaXAgaW4gdGhlIHJldHVybmVkIHNl
dAorICAgICAgICAgICAgLy8gc28gJCgicDpmaXJzdCIpLmlzKCJwOmxhc3QiKSB3b24ndCByZXR1
cm4gdHJ1ZSBmb3IgYSBkb2Mgd2l0aCB0d28gInAiLgorICAgICAgICAgICAgdHlwZW9mIHNlbGVj
dG9yID09PSAic3RyaW5nIiAmJiBybmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICkgPworICAg
ICAgICAgICAgICAgIGpRdWVyeSggc2VsZWN0b3IgKSA6CisgICAgICAgICAgICAgICAgc2VsZWN0
b3IgfHwgW10sCisgICAgICAgICAgICBmYWxzZQorICAgICAgICApLmxlbmd0aDsKKyAgICB9Cit9
ICk7CisKKworLy8gSW5pdGlhbGl6ZSBhIGpRdWVyeSBvYmplY3QKKworCisvLyBBIGNlbnRyYWwg
cmVmZXJlbmNlIHRvIHRoZSByb290IGpRdWVyeShkb2N1bWVudCkKK3ZhciByb290alF1ZXJ5LAor
CisgICAgLy8gQSBzaW1wbGUgd2F5IHRvIGNoZWNrIGZvciBIVE1MIHN0cmluZ3MKKyAgICAvLyBQ
cmlvcml0aXplICNpZCBvdmVyIDx0YWc+IHRvIGF2b2lkIFhTUyB2aWEgbG9jYXRpb24uaGFzaCAo
Izk1MjEpCisgICAgLy8gU3RyaWN0IEhUTUwgcmVjb2duaXRpb24gKCMxMTI5MDogbXVzdCBzdGFy
dCB3aXRoIDwpCisgICAgLy8gU2hvcnRjdXQgc2ltcGxlICNpZCBjYXNlIGZvciBzcGVlZAorICAg
IHJxdWlja0V4cHIgPSAvXig/OlxzKig8W1x3XFddKz4pW14+XSp8IyhbXHctXSspKSQvLAorCisg
ICAgaW5pdCA9IGpRdWVyeS5mbi5pbml0ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCBy
b290ICkgeworICAgICAgICB2YXIgbWF0Y2gsIGVsZW07CisKKyAgICAgICAgLy8gSEFORExFOiAk
KCIiKSwgJChudWxsKSwgJCh1bmRlZmluZWQpLCAkKGZhbHNlKQorICAgICAgICBpZiAoICFzZWxl
Y3RvciApIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gTWV0aG9kIGluaXQoKSBhY2NlcHRzIGFuIGFsdGVybmF0ZSByb290alF1ZXJ5CisgICAgICAg
IC8vIHNvIG1pZ3JhdGUgY2FuIHN1cHBvcnQgalF1ZXJ5LnN1YiAoZ2gtMjEwMSkKKyAgICAgICAg
cm9vdCA9IHJvb3QgfHwgcm9vdGpRdWVyeTsKKworICAgICAgICAvLyBIYW5kbGUgSFRNTCBzdHJp
bmdzCisgICAgICAgIGlmICggdHlwZW9mIHNlbGVjdG9yID09PSAic3RyaW5nIiApIHsKKyAgICAg
ICAgICAgIGlmICggc2VsZWN0b3JbIDAgXSA9PT0gIjwiICYmCisgICAgICAgICAgICAgICAgc2Vs
ZWN0b3JbIHNlbGVjdG9yLmxlbmd0aCAtIDEgXSA9PT0gIj4iICYmCisgICAgICAgICAgICAgICAg
c2VsZWN0b3IubGVuZ3RoID49IDMgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBBc3N1bWUgdGhh
dCBzdHJpbmdzIHRoYXQgc3RhcnQgYW5kIGVuZCB3aXRoIDw+IGFyZSBIVE1MIGFuZCBza2lwIHRo
ZSByZWdleCBjaGVjaworICAgICAgICAgICAgICAgIG1hdGNoID0gWyBudWxsLCBzZWxlY3Rvciwg
bnVsbCBdOworCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1hdGNoID0g
cnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBNYXRjaCBodG1sIG9yIG1ha2Ugc3VyZSBubyBjb250ZXh0IGlzIHNwZWNpZmllZCBmb3Ig
I2lkCisgICAgICAgICAgICBpZiAoIG1hdGNoICYmICggbWF0Y2hbIDEgXSB8fCAhY29udGV4dCAp
ICkgeworCisgICAgICAgICAgICAgICAgLy8gSEFORExFOiAkKGh0bWwpIC0+ICQoYXJyYXkpCisg
ICAgICAgICAgICAgICAgaWYgKCBtYXRjaFsgMSBdICkgeworICAgICAgICAgICAgICAgICAgICBj
b250ZXh0ID0gY29udGV4dCBpbnN0YW5jZW9mIGpRdWVyeSA/IGNvbnRleHRbIDAgXSA6IGNvbnRl
eHQ7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gT3B0aW9uIHRvIHJ1biBzY3JpcHRzIGlzIHRy
dWUgZm9yIGJhY2stY29tcGF0CisgICAgICAgICAgICAgICAgICAgIC8vIEludGVudGlvbmFsbHkg
bGV0IHRoZSBlcnJvciBiZSB0aHJvd24gaWYgcGFyc2VIVE1MIGlzIG5vdCBwcmVzZW50CisgICAg
ICAgICAgICAgICAgICAgIGpRdWVyeS5tZXJnZSggdGhpcywgalF1ZXJ5LnBhcnNlSFRNTCgKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1hdGNoWyAxIF0sCisgICAgICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0ICYmIGNvbnRleHQubm9kZVR5cGUgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwg
Y29udGV4dCA6IGRvY3VtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZQorICAgICAg
ICAgICAgICAgICAgICApICk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gSEFORExFOiAkKGh0
bWwsIHByb3BzKQorICAgICAgICAgICAgICAgICAgICBpZiAoIHJzaW5nbGVUYWcudGVzdCggbWF0
Y2hbIDEgXSApICYmIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBjb250ZXh0ICkgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKCBtYXRjaCBpbiBjb250ZXh0ICkgeworCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gUHJvcGVydGllcyBvZiBjb250ZXh0IGFyZSBjYWxsZWQgYXMg
bWV0aG9kcyBpZiBwb3NzaWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggalF1
ZXJ5LmlzRnVuY3Rpb24oIHRoaXNbIG1hdGNoIF0gKSApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpc1sgbWF0Y2ggXSggY29udGV4dFsgbWF0Y2ggXSApOworCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gLi4uYW5kIG90aGVyd2lzZSBzZXQgYXMgYXR0cmlidXRl
cworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMuYXR0ciggbWF0Y2gsIGNvbnRleHRbIG1hdGNoIF0gKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsK
KworICAgICAgICAgICAgICAgIC8vIEhBTkRMRTogJCgjaWQpCisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCBtYXRjaFsgMiBdICk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtICkgeworCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBJbmplY3QgdGhlIGVsZW1lbnQgZGlyZWN0bHkgaW50
byB0aGUgalF1ZXJ5IG9iamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1sgMCBdID0g
ZWxlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gMTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEhBTkRMRTogJChleHByLCAkKC4uLikpCisgICAg
ICAgICAgICB9IGVsc2UgaWYgKCAhY29udGV4dCB8fCBjb250ZXh0LmpxdWVyeSApIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gKCBjb250ZXh0IHx8IHJvb3QgKS5maW5kKCBzZWxlY3RvciApOwor
CisgICAgICAgICAgICAvLyBIQU5ETEU6ICQoZXhwciwgY29udGV4dCkKKyAgICAgICAgICAgIC8v
ICh3aGljaCBpcyBqdXN0IGVxdWl2YWxlbnQgdG86ICQoY29udGV4dCkuZmluZChleHByKQorICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rv
ciggY29udGV4dCApLmZpbmQoIHNlbGVjdG9yICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
Ly8gSEFORExFOiAkKERPTUVsZW1lbnQpCisgICAgICAgIH0gZWxzZSBpZiAoIHNlbGVjdG9yLm5v
ZGVUeXBlICkgeworICAgICAgICAgICAgdGhpc1sgMCBdID0gc2VsZWN0b3I7CisgICAgICAgICAg
ICB0aGlzLmxlbmd0aCA9IDE7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKworICAgICAgICAv
LyBIQU5ETEU6ICQoZnVuY3Rpb24pCisgICAgICAgIC8vIFNob3J0Y3V0IGZvciBkb2N1bWVudCBy
ZWFkeQorICAgICAgICB9IGVsc2UgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggc2VsZWN0b3IgKSAp
IHsKKyAgICAgICAgICAgIHJldHVybiByb290LnJlYWR5ICE9PSB1bmRlZmluZWQgPworICAgICAg
ICAgICAgICAgIHJvb3QucmVhZHkoIHNlbGVjdG9yICkgOgorCisgICAgICAgICAgICAgICAgLy8g
RXhlY3V0ZSBpbW1lZGlhdGVseSBpZiByZWFkeSBpcyBub3QgcHJlc2VudAorICAgICAgICAgICAg
ICAgIHNlbGVjdG9yKCBqUXVlcnkgKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBqUXVl
cnkubWFrZUFycmF5KCBzZWxlY3RvciwgdGhpcyApOworICAgIH07CisKKy8vIEdpdmUgdGhlIGlu
aXQgZnVuY3Rpb24gdGhlIGpRdWVyeSBwcm90b3R5cGUgZm9yIGxhdGVyIGluc3RhbnRpYXRpb24K
K2luaXQucHJvdG90eXBlID0galF1ZXJ5LmZuOworCisvLyBJbml0aWFsaXplIGNlbnRyYWwgcmVm
ZXJlbmNlCityb290alF1ZXJ5ID0galF1ZXJ5KCBkb2N1bWVudCApOworCisKK3ZhciBycGFyZW50
c3ByZXYgPSAvXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLywKKworICAgIC8vIE1ldGhv
ZHMgZ3VhcmFudGVlZCB0byBwcm9kdWNlIGEgdW5pcXVlIHNldCB3aGVuIHN0YXJ0aW5nIGZyb20g
YSB1bmlxdWUgc2V0CisgICAgZ3VhcmFudGVlZFVuaXF1ZSA9IHsKKyAgICAgICAgY2hpbGRyZW46
IHRydWUsCisgICAgICAgIGNvbnRlbnRzOiB0cnVlLAorICAgICAgICBuZXh0OiB0cnVlLAorICAg
ICAgICBwcmV2OiB0cnVlCisgICAgfTsKKworalF1ZXJ5LmZuLmV4dGVuZCggeworICAgIGhhczog
ZnVuY3Rpb24oIHRhcmdldCApIHsKKyAgICAgICAgdmFyIHRhcmdldHMgPSBqUXVlcnkoIHRhcmdl
dCwgdGhpcyApLAorICAgICAgICAgICAgbCA9IHRhcmdldHMubGVuZ3RoOworCisgICAgICAgIHJl
dHVybiB0aGlzLmZpbHRlciggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgaSA9IDA7Cisg
ICAgICAgICAgICBmb3IgKCA7IGkgPCBsOyBpKysgKSB7CisgICAgICAgICAgICAgICAgaWYgKCBq
UXVlcnkuY29udGFpbnMoIHRoaXMsIHRhcmdldHNbIGkgXSApICkgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gKTsKKyAgICB9LAorCisgICAgY2xvc2VzdDogZnVuY3Rpb24oIHNlbGVjdG9ycywgY29u
dGV4dCApIHsKKyAgICAgICAgdmFyIGN1ciwKKyAgICAgICAgICAgIGkgPSAwLAorICAgICAgICAg
ICAgbCA9IHRoaXMubGVuZ3RoLAorICAgICAgICAgICAgbWF0Y2hlZCA9IFtdLAorICAgICAgICAg
ICAgdGFyZ2V0cyA9IHR5cGVvZiBzZWxlY3RvcnMgIT09ICJzdHJpbmciICYmIGpRdWVyeSggc2Vs
ZWN0b3JzICk7CisKKyAgICAgICAgLy8gUG9zaXRpb25hbCBzZWxlY3RvcnMgbmV2ZXIgbWF0Y2gs
IHNpbmNlIHRoZXJlJ3Mgbm8gX3NlbGVjdGlvbl8gY29udGV4dAorICAgICAgICBpZiAoICFybmVl
ZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9ycyApICkgeworICAgICAgICAgICAgZm9yICggOyBpIDwg
bDsgaSsrICkgeworICAgICAgICAgICAgICAgIGZvciAoIGN1ciA9IHRoaXNbIGkgXTsgY3VyICYm
IGN1ciAhPT0gY29udGV4dDsgY3VyID0gY3VyLnBhcmVudE5vZGUgKSB7CisKKyAgICAgICAgICAg
ICAgICAgICAgLy8gQWx3YXlzIHNraXAgZG9jdW1lbnQgZnJhZ21lbnRzCisgICAgICAgICAgICAg
ICAgICAgIGlmICggY3VyLm5vZGVUeXBlIDwgMTEgJiYgKCB0YXJnZXRzID8KKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRhcmdldHMuaW5kZXgoIGN1ciApID4gLTEgOgorCisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBEb24ndCBwYXNzIG5vbi1lbGVtZW50cyB0byBTaXp6bGUKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGN1ci5ub2RlVHlwZSA9PT0gMSAmJgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggY3VyLCBzZWxlY3RvcnMgKSAp
ICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkLnB1c2goIGN1ciApOworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
dGhpcy5wdXNoU3RhY2soIG1hdGNoZWQubGVuZ3RoID4gMSA/IGpRdWVyeS51bmlxdWVTb3J0KCBt
YXRjaGVkICkgOiBtYXRjaGVkICk7CisgICAgfSwKKworICAgIC8vIERldGVybWluZSB0aGUgcG9z
aXRpb24gb2YgYW4gZWxlbWVudCB3aXRoaW4gdGhlIHNldAorICAgIGluZGV4OiBmdW5jdGlvbigg
ZWxlbSApIHsKKworICAgICAgICAvLyBObyBhcmd1bWVudCwgcmV0dXJuIGluZGV4IGluIHBhcmVu
dAorICAgICAgICBpZiAoICFlbGVtICkgeworICAgICAgICAgICAgcmV0dXJuICggdGhpc1sgMCBd
ICYmIHRoaXNbIDAgXS5wYXJlbnROb2RlICkgPyB0aGlzLmZpcnN0KCkucHJldkFsbCgpLmxlbmd0
aCA6IC0xOworICAgICAgICB9CisKKyAgICAgICAgLy8gSW5kZXggaW4gc2VsZWN0b3IKKyAgICAg
ICAgaWYgKCB0eXBlb2YgZWxlbSA9PT0gInN0cmluZyIgKSB7CisgICAgICAgICAgICByZXR1cm4g
aW5kZXhPZi5jYWxsKCBqUXVlcnkoIGVsZW0gKSwgdGhpc1sgMCBdICk7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBMb2NhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBkZXNpcmVkIGVsZW1lbnQKKyAg
ICAgICAgcmV0dXJuIGluZGV4T2YuY2FsbCggdGhpcywKKworICAgICAgICAgICAgLy8gSWYgaXQg
cmVjZWl2ZXMgYSBqUXVlcnkgb2JqZWN0LCB0aGUgZmlyc3QgZWxlbWVudCBpcyB1c2VkCisgICAg
ICAgICAgICBlbGVtLmpxdWVyeSA/IGVsZW1bIDAgXSA6IGVsZW0KKyAgICAgICAgKTsKKyAgICB9
LAorCisgICAgYWRkOiBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7CisgICAgICAgIHJl
dHVybiB0aGlzLnB1c2hTdGFjaygKKyAgICAgICAgICAgIGpRdWVyeS51bmlxdWVTb3J0KAorICAg
ICAgICAgICAgICAgIGpRdWVyeS5tZXJnZSggdGhpcy5nZXQoKSwgalF1ZXJ5KCBzZWxlY3Rvciwg
Y29udGV4dCApICkKKyAgICAgICAgICAgICkKKyAgICAgICAgKTsKKyAgICB9LAorCisgICAgYWRk
QmFjazogZnVuY3Rpb24oIHNlbGVjdG9yICkgeworICAgICAgICByZXR1cm4gdGhpcy5hZGQoIHNl
bGVjdG9yID09IG51bGwgPworICAgICAgICAgICAgdGhpcy5wcmV2T2JqZWN0IDogdGhpcy5wcmV2
T2JqZWN0LmZpbHRlciggc2VsZWN0b3IgKQorICAgICAgICApOworICAgIH0KK30gKTsKKworZnVu
Y3Rpb24gc2libGluZyggY3VyLCBkaXIgKSB7CisgICAgd2hpbGUgKCAoIGN1ciA9IGN1clsgZGly
IF0gKSAmJiBjdXIubm9kZVR5cGUgIT09IDEgKSB7fQorICAgIHJldHVybiBjdXI7Cit9CisKK2pR
dWVyeS5lYWNoKCB7CisgICAgcGFyZW50OiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgdmFy
IHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTsKKyAgICAgICAgcmV0dXJuIHBhcmVudCAmJiBwYXJl
bnQubm9kZVR5cGUgIT09IDExID8gcGFyZW50IDogbnVsbDsKKyAgICB9LAorICAgIHBhcmVudHM6
IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICByZXR1cm4gZGlyKCBlbGVtLCAicGFyZW50Tm9k
ZSIgKTsKKyAgICB9LAorICAgIHBhcmVudHNVbnRpbDogZnVuY3Rpb24oIGVsZW0sIGksIHVudGls
ICkgeworICAgICAgICByZXR1cm4gZGlyKCBlbGVtLCAicGFyZW50Tm9kZSIsIHVudGlsICk7Cisg
ICAgfSwKKyAgICBuZXh0OiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgcmV0dXJuIHNpYmxp
bmcoIGVsZW0sICJuZXh0U2libGluZyIgKTsKKyAgICB9LAorICAgIHByZXY6IGZ1bmN0aW9uKCBl
bGVtICkgeworICAgICAgICByZXR1cm4gc2libGluZyggZWxlbSwgInByZXZpb3VzU2libGluZyIg
KTsKKyAgICB9LAorICAgIG5leHRBbGw6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICByZXR1
cm4gZGlyKCBlbGVtLCAibmV4dFNpYmxpbmciICk7CisgICAgfSwKKyAgICBwcmV2QWxsOiBmdW5j
dGlvbiggZWxlbSApIHsKKyAgICAgICAgcmV0dXJuIGRpciggZWxlbSwgInByZXZpb3VzU2libGlu
ZyIgKTsKKyAgICB9LAorICAgIG5leHRVbnRpbDogZnVuY3Rpb24oIGVsZW0sIGksIHVudGlsICkg
eworICAgICAgICByZXR1cm4gZGlyKCBlbGVtLCAibmV4dFNpYmxpbmciLCB1bnRpbCApOworICAg
IH0sCisgICAgcHJldlVudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7CisgICAgICAg
IHJldHVybiBkaXIoIGVsZW0sICJwcmV2aW91c1NpYmxpbmciLCB1bnRpbCApOworICAgIH0sCisg
ICAgc2libGluZ3M6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICByZXR1cm4gc2libGluZ3Mo
ICggZWxlbS5wYXJlbnROb2RlIHx8IHt9ICkuZmlyc3RDaGlsZCwgZWxlbSApOworICAgIH0sCisg
ICAgY2hpbGRyZW46IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICByZXR1cm4gc2libGluZ3Mo
IGVsZW0uZmlyc3RDaGlsZCApOworICAgIH0sCisgICAgY29udGVudHM6IGZ1bmN0aW9uKCBlbGVt
ICkgeworICAgICAgICByZXR1cm4gZWxlbS5jb250ZW50RG9jdW1lbnQgfHwgalF1ZXJ5Lm1lcmdl
KCBbXSwgZWxlbS5jaGlsZE5vZGVzICk7CisgICAgfQorfSwgZnVuY3Rpb24oIG5hbWUsIGZuICkg
eworICAgIGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHVudGlsLCBzZWxlY3RvciApIHsK
KyAgICAgICAgdmFyIG1hdGNoZWQgPSBqUXVlcnkubWFwKCB0aGlzLCBmbiwgdW50aWwgKTsKKwor
ICAgICAgICBpZiAoIG5hbWUuc2xpY2UoIC01ICkgIT09ICJVbnRpbCIgKSB7CisgICAgICAgICAg
ICBzZWxlY3RvciA9IHVudGlsOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBzZWxlY3RvciAm
JiB0eXBlb2Ygc2VsZWN0b3IgPT09ICJzdHJpbmciICkgeworICAgICAgICAgICAgbWF0Y2hlZCA9
IGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCBtYXRjaGVkICk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoIHRoaXMubGVuZ3RoID4gMSApIHsKKworICAgICAgICAgICAgLy8gUmVtb3ZlIGR1cGxp
Y2F0ZXMKKyAgICAgICAgICAgIGlmICggIWd1YXJhbnRlZWRVbmlxdWVbIG5hbWUgXSApIHsKKyAg
ICAgICAgICAgICAgICBqUXVlcnkudW5pcXVlU29ydCggbWF0Y2hlZCApOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAvLyBSZXZlcnNlIG9yZGVyIGZvciBwYXJlbnRzKiBhbmQgcHJldi1k
ZXJpdmF0aXZlcworICAgICAgICAgICAgaWYgKCBycGFyZW50c3ByZXYudGVzdCggbmFtZSApICkg
eworICAgICAgICAgICAgICAgIG1hdGNoZWQucmV2ZXJzZSgpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBtYXRjaGVkICk7CisgICAg
fTsKK30gKTsKK3ZhciBybm90aHRtbHdoaXRlID0gKCAvW15ceDIwXHRcclxuXGZdKy9nICk7CisK
KworCisvLyBDb252ZXJ0IFN0cmluZy1mb3JtYXR0ZWQgb3B0aW9ucyBpbnRvIE9iamVjdC1mb3Jt
YXR0ZWQgb25lcworZnVuY3Rpb24gY3JlYXRlT3B0aW9ucyggb3B0aW9ucyApIHsKKyAgICB2YXIg
b2JqZWN0ID0ge307CisgICAgalF1ZXJ5LmVhY2goIG9wdGlvbnMubWF0Y2goIHJub3RodG1sd2hp
dGUgKSB8fCBbXSwgZnVuY3Rpb24oIF8sIGZsYWcgKSB7CisgICAgICAgIG9iamVjdFsgZmxhZyBd
ID0gdHJ1ZTsKKyAgICB9ICk7CisgICAgcmV0dXJuIG9iamVjdDsKK30KKworLyoKKyAqIENyZWF0
ZSBhIGNhbGxiYWNrIGxpc3QgdXNpbmcgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgorICoKKyAq
ICBvcHRpb25zOiBhbiBvcHRpb25hbCBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBvcHRpb25zIHRo
YXQgd2lsbCBjaGFuZ2UgaG93CisgKiAgICAgICAgICB0aGUgY2FsbGJhY2sgbGlzdCBiZWhhdmVz
IG9yIGEgbW9yZSB0cmFkaXRpb25hbCBvcHRpb24gb2JqZWN0CisgKgorICogQnkgZGVmYXVsdCBh
IGNhbGxiYWNrIGxpc3Qgd2lsbCBhY3QgbGlrZSBhbiBldmVudCBjYWxsYmFjayBsaXN0IGFuZCBj
YW4gYmUKKyAqICJmaXJlZCIgbXVsdGlwbGUgdGltZXMuCisgKgorICogUG9zc2libGUgb3B0aW9u
czoKKyAqCisgKiAgb25jZTogICAgICAgICAgIHdpbGwgZW5zdXJlIHRoZSBjYWxsYmFjayBsaXN0
IGNhbiBvbmx5IGJlIGZpcmVkIG9uY2UgKGxpa2UgYSBEZWZlcnJlZCkKKyAqCisgKiAgbWVtb3J5
OiAgICAgICAgIHdpbGwga2VlcCB0cmFjayBvZiBwcmV2aW91cyB2YWx1ZXMgYW5kIHdpbGwgY2Fs
bCBhbnkgY2FsbGJhY2sgYWRkZWQKKyAqICAgICAgICAgICAgICAgICAgYWZ0ZXIgdGhlIGxpc3Qg
aGFzIGJlZW4gZmlyZWQgcmlnaHQgYXdheSB3aXRoIHRoZSBsYXRlc3QgIm1lbW9yaXplZCIKKyAq
ICAgICAgICAgICAgICAgICAgdmFsdWVzIChsaWtlIGEgRGVmZXJyZWQpCisgKgorICogIHVuaXF1
ZTogICAgICAgICB3aWxsIGVuc3VyZSBhIGNhbGxiYWNrIGNhbiBvbmx5IGJlIGFkZGVkIG9uY2Ug
KG5vIGR1cGxpY2F0ZSBpbiB0aGUgbGlzdCkKKyAqCisgKiAgc3RvcE9uRmFsc2U6ICAgIGludGVy
cnVwdCBjYWxsaW5ncyB3aGVuIGEgY2FsbGJhY2sgcmV0dXJucyBmYWxzZQorICoKKyAqLworalF1
ZXJ5LkNhbGxiYWNrcyA9IGZ1bmN0aW9uKCBvcHRpb25zICkgeworCisgICAgLy8gQ29udmVydCBv
cHRpb25zIGZyb20gU3RyaW5nLWZvcm1hdHRlZCB0byBPYmplY3QtZm9ybWF0dGVkIGlmIG5lZWRl
ZAorICAgIC8vICh3ZSBjaGVjayBpbiBjYWNoZSBmaXJzdCkKKyAgICBvcHRpb25zID0gdHlwZW9m
IG9wdGlvbnMgPT09ICJzdHJpbmciID8KKyAgICAgICAgY3JlYXRlT3B0aW9ucyggb3B0aW9ucyAp
IDoKKyAgICAgICAgalF1ZXJ5LmV4dGVuZCgge30sIG9wdGlvbnMgKTsKKworICAgIHZhciAvLyBG
bGFnIHRvIGtub3cgaWYgbGlzdCBpcyBjdXJyZW50bHkgZmlyaW5nCisgICAgICAgIGZpcmluZywK
KworICAgICAgICAvLyBMYXN0IGZpcmUgdmFsdWUgZm9yIG5vbi1mb3JnZXR0YWJsZSBsaXN0cwor
ICAgICAgICBtZW1vcnksCisKKyAgICAgICAgLy8gRmxhZyB0byBrbm93IGlmIGxpc3Qgd2FzIGFs
cmVhZHkgZmlyZWQKKyAgICAgICAgZmlyZWQsCisKKyAgICAgICAgLy8gRmxhZyB0byBwcmV2ZW50
IGZpcmluZworICAgICAgICBsb2NrZWQsCisKKyAgICAgICAgLy8gQWN0dWFsIGNhbGxiYWNrIGxp
c3QKKyAgICAgICAgbGlzdCA9IFtdLAorCisgICAgICAgIC8vIFF1ZXVlIG9mIGV4ZWN1dGlvbiBk
YXRhIGZvciByZXBlYXRhYmxlIGxpc3RzCisgICAgICAgIHF1ZXVlID0gW10sCisKKyAgICAgICAg
Ly8gSW5kZXggb2YgY3VycmVudGx5IGZpcmluZyBjYWxsYmFjayAobW9kaWZpZWQgYnkgYWRkL3Jl
bW92ZSBhcyBuZWVkZWQpCisgICAgICAgIGZpcmluZ0luZGV4ID0gLTEsCisKKyAgICAgICAgLy8g
RmlyZSBjYWxsYmFja3MKKyAgICAgICAgZmlyZSA9IGZ1bmN0aW9uKCkgeworCisgICAgICAgICAg
ICAvLyBFbmZvcmNlIHNpbmdsZS1maXJpbmcKKyAgICAgICAgICAgIGxvY2tlZCA9IG9wdGlvbnMu
b25jZTsKKworICAgICAgICAgICAgLy8gRXhlY3V0ZSBjYWxsYmFja3MgZm9yIGFsbCBwZW5kaW5n
IGV4ZWN1dGlvbnMsCisgICAgICAgICAgICAvLyByZXNwZWN0aW5nIGZpcmluZ0luZGV4IG92ZXJy
aWRlcyBhbmQgcnVudGltZSBjaGFuZ2VzCisgICAgICAgICAgICBmaXJlZCA9IGZpcmluZyA9IHRy
dWU7CisgICAgICAgICAgICBmb3IgKCA7IHF1ZXVlLmxlbmd0aDsgZmlyaW5nSW5kZXggPSAtMSAp
IHsKKyAgICAgICAgICAgICAgICBtZW1vcnkgPSBxdWV1ZS5zaGlmdCgpOworICAgICAgICAgICAg
ICAgIHdoaWxlICggKytmaXJpbmdJbmRleCA8IGxpc3QubGVuZ3RoICkgeworCisgICAgICAgICAg
ICAgICAgICAgIC8vIFJ1biBjYWxsYmFjayBhbmQgY2hlY2sgZm9yIGVhcmx5IHRlcm1pbmF0aW9u
CisgICAgICAgICAgICAgICAgICAgIGlmICggbGlzdFsgZmlyaW5nSW5kZXggXS5hcHBseSggbWVt
b3J5WyAwIF0sIG1lbW9yeVsgMSBdICkgPT09IGZhbHNlICYmCisgICAgICAgICAgICAgICAgICAg
ICAgICBvcHRpb25zLnN0b3BPbkZhbHNlICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBKdW1wIHRvIGVuZCBhbmQgZm9yZ2V0IHRoZSBkYXRhIHNvIC5hZGQgZG9lc24ndCByZS1maXJl
CisgICAgICAgICAgICAgICAgICAgICAgICBmaXJpbmdJbmRleCA9IGxpc3QubGVuZ3RoOworICAg
ICAgICAgICAgICAgICAgICAgICAgbWVtb3J5ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZv
cmdldCB0aGUgZGF0YSBpZiB3ZSdyZSBkb25lIHdpdGggaXQKKyAgICAgICAgICAgIGlmICggIW9w
dGlvbnMubWVtb3J5ICkgeworICAgICAgICAgICAgICAgIG1lbW9yeSA9IGZhbHNlOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBmaXJpbmcgPSBmYWxzZTsKKworICAgICAgICAgICAgLy8g
Q2xlYW4gdXAgaWYgd2UncmUgZG9uZSBmaXJpbmcgZm9yIGdvb2QKKyAgICAgICAgICAgIGlmICgg
bG9ja2VkICkgeworCisgICAgICAgICAgICAgICAgLy8gS2VlcCBhbiBlbXB0eSBsaXN0IGlmIHdl
IGhhdmUgZGF0YSBmb3IgZnV0dXJlIGFkZCBjYWxscworICAgICAgICAgICAgICAgIGlmICggbWVt
b3J5ICkgeworICAgICAgICAgICAgICAgICAgICBsaXN0ID0gW107CisKKyAgICAgICAgICAgICAg
ICAvLyBPdGhlcndpc2UsIHRoaXMgb2JqZWN0IGlzIHNwZW50CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbGlzdCA9ICIiOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKworICAgICAgICAvLyBBY3R1YWwgQ2FsbGJhY2tz
IG9iamVjdAorICAgICAgICBzZWxmID0geworCisgICAgICAgICAgICAvLyBBZGQgYSBjYWxsYmFj
ayBvciBhIGNvbGxlY3Rpb24gb2YgY2FsbGJhY2tzIHRvIHRoZSBsaXN0CisgICAgICAgICAgICBh
ZGQ6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGlmICggbGlzdCApIHsKKworICAgICAg
ICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIG1lbW9yeSBmcm9tIGEgcGFzdCBydW4sIHdlIHNo
b3VsZCBmaXJlIGFmdGVyIGFkZGluZworICAgICAgICAgICAgICAgICAgICBpZiAoIG1lbW9yeSAm
JiAhZmlyaW5nICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZmlyaW5nSW5kZXggPSBsaXN0
Lmxlbmd0aCAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBxdWV1ZS5wdXNoKCBtZW1vcnkg
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICggZnVuY3Rp
b24gYWRkKCBhcmdzICkgeworICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmVhY2goIGFy
Z3MsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBqUXVlcnkuaXNGdW5jdGlvbiggYXJnICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggIW9wdGlvbnMudW5pcXVlIHx8ICFzZWxmLmhhcyggYXJnICkgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0LnB1c2goIGFyZyApOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIGlmICggYXJnICYmIGFyZy5sZW5ndGggJiYgalF1ZXJ5LnR5cGUoIGFyZyApICE9PSAi
c3RyaW5nIiApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnNwZWN0
IHJlY3Vyc2l2ZWx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZCggYXJnICk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
fSApOworICAgICAgICAgICAgICAgICAgICB9ICkoIGFyZ3VtZW50cyApOworCisgICAgICAgICAg
ICAgICAgICAgIGlmICggbWVtb3J5ICYmICFmaXJpbmcgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBmaXJlKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9LAorCisgICAgICAgICAg
ICAvLyBSZW1vdmUgYSBjYWxsYmFjayBmcm9tIHRoZSBsaXN0CisgICAgICAgICAgICByZW1vdmU6
IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGpRdWVyeS5lYWNoKCBhcmd1bWVudHMsIGZ1
bmN0aW9uKCBfLCBhcmcgKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleDsKKyAgICAg
ICAgICAgICAgICAgICAgd2hpbGUgKCAoIGluZGV4ID0galF1ZXJ5LmluQXJyYXkoIGFyZywgbGlz
dCwgaW5kZXggKSApID4gLTEgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsaXN0LnNwbGlj
ZSggaW5kZXgsIDEgKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIGZpcmlu
ZyBpbmRleGVzCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGluZGV4IDw9IGZpcmluZ0lu
ZGV4ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcmluZ0luZGV4LS07CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9ICk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9LAor
CisgICAgICAgICAgICAvLyBDaGVjayBpZiBhIGdpdmVuIGNhbGxiYWNrIGlzIGluIHRoZSBsaXN0
LgorICAgICAgICAgICAgLy8gSWYgbm8gYXJndW1lbnQgaXMgZ2l2ZW4sIHJldHVybiB3aGV0aGVy
IG9yIG5vdCBsaXN0IGhhcyBjYWxsYmFja3MgYXR0YWNoZWQuCisgICAgICAgICAgICBoYXM6IGZ1
bmN0aW9uKCBmbiApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZm4gPworICAgICAgICAgICAg
ICAgICAgICBqUXVlcnkuaW5BcnJheSggZm4sIGxpc3QgKSA+IC0xIDoKKyAgICAgICAgICAgICAg
ICAgICAgbGlzdC5sZW5ndGggPiAwOworICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgLy8g
UmVtb3ZlIGFsbCBjYWxsYmFja3MgZnJvbSB0aGUgbGlzdAorICAgICAgICAgICAgZW1wdHk6IGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGlmICggbGlzdCApIHsKKyAgICAgICAgICAgICAg
ICAgICAgbGlzdCA9IFtdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1
cm4gdGhpczsKKyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIC8vIERpc2FibGUgLmZpcmUg
YW5kIC5hZGQKKyAgICAgICAgICAgIC8vIEFib3J0IGFueSBjdXJyZW50L3BlbmRpbmcgZXhlY3V0
aW9ucworICAgICAgICAgICAgLy8gQ2xlYXIgYWxsIGNhbGxiYWNrcyBhbmQgdmFsdWVzCisgICAg
ICAgICAgICBkaXNhYmxlOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBsb2NrZWQgPSBx
dWV1ZSA9IFtdOworICAgICAgICAgICAgICAgIGxpc3QgPSBtZW1vcnkgPSAiIjsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBkaXNhYmxl
ZDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICFsaXN0OworICAgICAgICAg
ICAgfSwKKworICAgICAgICAgICAgLy8gRGlzYWJsZSAuZmlyZQorICAgICAgICAgICAgLy8gQWxz
byBkaXNhYmxlIC5hZGQgdW5sZXNzIHdlIGhhdmUgbWVtb3J5IChzaW5jZSBpdCB3b3VsZCBoYXZl
IG5vIGVmZmVjdCkKKyAgICAgICAgICAgIC8vIEFib3J0IGFueSBwZW5kaW5nIGV4ZWN1dGlvbnMK
KyAgICAgICAgICAgIGxvY2s6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGxvY2tlZCA9
IHF1ZXVlID0gW107CisgICAgICAgICAgICAgICAgaWYgKCAhbWVtb3J5ICYmICFmaXJpbmcgKSB7
CisgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBtZW1vcnkgPSAiIjsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9LAorICAgICAg
ICAgICAgbG9ja2VkOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISFsb2Nr
ZWQ7CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAvLyBDYWxsIGFsbCBjYWxsYmFja3Mg
d2l0aCB0aGUgZ2l2ZW4gY29udGV4dCBhbmQgYXJndW1lbnRzCisgICAgICAgICAgICBmaXJlV2l0
aDogZnVuY3Rpb24oIGNvbnRleHQsIGFyZ3MgKSB7CisgICAgICAgICAgICAgICAgaWYgKCAhbG9j
a2VkICkgeworICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJncyB8fCBbXTsKKyAgICAgICAg
ICAgICAgICAgICAgYXJncyA9IFsgY29udGV4dCwgYXJncy5zbGljZSA/IGFyZ3Muc2xpY2UoKSA6
IGFyZ3MgXTsKKyAgICAgICAgICAgICAgICAgICAgcXVldWUucHVzaCggYXJncyApOworICAgICAg
ICAgICAgICAgICAgICBpZiAoICFmaXJpbmcgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBm
aXJlKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAvLyBD
YWxsIGFsbCB0aGUgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cworICAgICAgICAg
ICAgZmlyZTogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgc2VsZi5maXJlV2l0aCggdGhp
cywgYXJndW1lbnRzICk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAg
ICB9LAorCisgICAgICAgICAgICAvLyBUbyBrbm93IGlmIHRoZSBjYWxsYmFja3MgaGF2ZSBhbHJl
YWR5IGJlZW4gY2FsbGVkIGF0IGxlYXN0IG9uY2UKKyAgICAgICAgICAgIGZpcmVkOiBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISFmaXJlZDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfTsKKworICAgIHJldHVybiBzZWxmOworfTsKKworCitmdW5jdGlvbiBJZGVudGl0eSgg
diApIHsKKyAgICByZXR1cm4gdjsKK30KK2Z1bmN0aW9uIFRocm93ZXIoIGV4ICkgeworICAgIHRo
cm93IGV4OworfQorCitmdW5jdGlvbiBhZG9wdFZhbHVlKCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0
ICkgeworICAgIHZhciBtZXRob2Q7CisKKyAgICB0cnkgeworCisgICAgICAgIC8vIENoZWNrIGZv
ciBwcm9taXNlIGFzcGVjdCBmaXJzdCB0byBwcml2aWxlZ2Ugc3luY2hyb25vdXMgYmVoYXZpb3IK
KyAgICAgICAgaWYgKCB2YWx1ZSAmJiBqUXVlcnkuaXNGdW5jdGlvbiggKCBtZXRob2QgPSB2YWx1
ZS5wcm9taXNlICkgKSApIHsKKyAgICAgICAgICAgIG1ldGhvZC5jYWxsKCB2YWx1ZSApLmRvbmUo
IHJlc29sdmUgKS5mYWlsKCByZWplY3QgKTsKKworICAgICAgICAvLyBPdGhlciB0aGVuYWJsZXMK
KyAgICAgICAgfSBlbHNlIGlmICggdmFsdWUgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oICggbWV0aG9k
ID0gdmFsdWUudGhlbiApICkgKSB7CisgICAgICAgICAgICBtZXRob2QuY2FsbCggdmFsdWUsIHJl
c29sdmUsIHJlamVjdCApOworCisgICAgICAgIC8vIE90aGVyIG5vbi10aGVuYWJsZXMKKyAgICAg
ICAgfSBlbHNlIHsKKworICAgICAgICAgICAgLy8gU3VwcG9ydDogQW5kcm9pZCA0LjAgb25seQor
ICAgICAgICAgICAgLy8gU3RyaWN0IG1vZGUgZnVuY3Rpb25zIGludm9rZWQgd2l0aG91dCAuY2Fs
bC8uYXBwbHkgZ2V0IGdsb2JhbC1vYmplY3QgY29udGV4dAorICAgICAgICAgICAgcmVzb2x2ZS5j
YWxsKCB1bmRlZmluZWQsIHZhbHVlICk7CisgICAgICAgIH0KKworICAgIC8vIEZvciBQcm9taXNl
cy9BKywgY29udmVydCBleGNlcHRpb25zIGludG8gcmVqZWN0aW9ucworICAgIC8vIFNpbmNlIGpR
dWVyeS53aGVuIGRvZXNuJ3QgdW53cmFwIHRoZW5hYmxlcywgd2UgY2FuIHNraXAgdGhlIGV4dHJh
IGNoZWNrcyBhcHBlYXJpbmcgaW4KKyAgICAvLyBEZWZlcnJlZCN0aGVuIHRvIGNvbmRpdGlvbmFs
bHkgc3VwcHJlc3MgcmVqZWN0aW9uLgorICAgIH0gY2F0Y2ggKCB2YWx1ZSApIHsKKworICAgICAg
ICAvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCBvbmx5CisgICAgICAgIC8vIFN0cmljdCBtb2RlIGZ1
bmN0aW9ucyBpbnZva2VkIHdpdGhvdXQgLmNhbGwvLmFwcGx5IGdldCBnbG9iYWwtb2JqZWN0IGNv
bnRleHQKKyAgICAgICAgcmVqZWN0LmNhbGwoIHVuZGVmaW5lZCwgdmFsdWUgKTsKKyAgICB9Cit9
CisKK2pRdWVyeS5leHRlbmQoIHsKKworICAgIERlZmVycmVkOiBmdW5jdGlvbiggZnVuYyApIHsK
KyAgICAgICAgdmFyIHR1cGxlcyA9IFsKKworICAgICAgICAgICAgICAgIC8vIGFjdGlvbiwgYWRk
IGxpc3RlbmVyLCBjYWxsYmFja3MsCisgICAgICAgICAgICAgICAgLy8gLi4uIC50aGVuIGhhbmRs
ZXJzLCBhcmd1bWVudCBpbmRleCwgW2ZpbmFsIHN0YXRlXQorICAgICAgICAgICAgICAgIFsgIm5v
dGlmeSIsICJwcm9ncmVzcyIsIGpRdWVyeS5DYWxsYmFja3MoICJtZW1vcnkiICksCisgICAgICAg
ICAgICAgICAgICAgIGpRdWVyeS5DYWxsYmFja3MoICJtZW1vcnkiICksIDIgXSwKKyAgICAgICAg
ICAgICAgICBbICJyZXNvbHZlIiwgImRvbmUiLCBqUXVlcnkuQ2FsbGJhY2tzKCAib25jZSBtZW1v
cnkiICksCisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5DYWxsYmFja3MoICJvbmNlIG1lbW9y
eSIgKSwgMCwgInJlc29sdmVkIiBdLAorICAgICAgICAgICAgICAgIFsgInJlamVjdCIsICJmYWls
IiwgalF1ZXJ5LkNhbGxiYWNrcyggIm9uY2UgbWVtb3J5IiApLAorICAgICAgICAgICAgICAgICAg
ICBqUXVlcnkuQ2FsbGJhY2tzKCAib25jZSBtZW1vcnkiICksIDEsICJyZWplY3RlZCIgXQorICAg
ICAgICAgICAgXSwKKyAgICAgICAgICAgIHN0YXRlID0gInBlbmRpbmciLAorICAgICAgICAgICAg
cHJvbWlzZSA9IHsKKyAgICAgICAgICAgICAgICBzdGF0ZTogZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBzdGF0ZTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAg
ICAgICAgIGFsd2F5czogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIGRlZmVycmVk
LmRvbmUoIGFyZ3VtZW50cyApLmZhaWwoIGFyZ3VtZW50cyApOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICJjYXRj
aCI6IGZ1bmN0aW9uKCBmbiApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2Uu
dGhlbiggbnVsbCwgZm4gKTsKKyAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAg
Ly8gS2VlcCBwaXBlIGZvciBiYWNrLWNvbXBhdAorICAgICAgICAgICAgICAgIHBpcGU6IGZ1bmN0
aW9uKCAvKiBmbkRvbmUsIGZuRmFpbCwgZm5Qcm9ncmVzcyAqLyApIHsKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIGZucyA9IGFyZ3VtZW50czsKKworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
alF1ZXJ5LkRlZmVycmVkKCBmdW5jdGlvbiggbmV3RGVmZXIgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggaSwgdHVwbGUgKSB7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYXAgdHVwbGVzIChwcm9ncmVzcywgZG9uZSwg
ZmFpbCkgdG8gYXJndW1lbnRzIChkb25lLCBmYWlsLCBwcm9ncmVzcykKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgZm4gPSBqUXVlcnkuaXNGdW5jdGlvbiggZm5zWyB0dXBsZVsgNCBd
IF0gKSAmJiBmbnNbIHR1cGxlWyA0IF0gXTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGRlZmVycmVkLnByb2dyZXNzKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5l
d0RlZmVyLm5vdGlmeSB9KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlZmVycmVk
LmRvbmUoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIucmVzb2x2ZSB9
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlZmVycmVkLmZhaWwoZnVuY3Rpb24o
KSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIucmVqZWN0IH0pCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmZXJyZWRbIHR1cGxlWyAxIF0gXSggZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXR1cm5lZCA9IGZuICYmIGZuLmFwcGx5
KCB0aGlzLCBhcmd1bWVudHMgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCByZXR1cm5lZCAmJiBqUXVlcnkuaXNGdW5jdGlvbiggcmV0dXJuZWQucHJvbWlzZSApICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWQucHJvbWlzZSgpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnByb2dyZXNzKCBuZXdEZWZl
ci5ub3RpZnkgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5kb25l
KCBuZXdEZWZlci5yZXNvbHZlICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAuZmFpbCggbmV3RGVmZXIucmVqZWN0ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdE
ZWZlclsgdHVwbGVbIDAgXSArICJXaXRoIiBdKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm4gPyBbIHJldHVybmVkIF0gOiBhcmd1bWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9ICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9ICk7
CisgICAgICAgICAgICAgICAgICAgICAgICBmbnMgPSBudWxsOworICAgICAgICAgICAgICAgICAg
ICB9ICkucHJvbWlzZSgpOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgdGhl
bjogZnVuY3Rpb24oIG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBvblByb2dyZXNzICkgeworICAg
ICAgICAgICAgICAgICAgICB2YXIgbWF4RGVwdGggPSAwOworICAgICAgICAgICAgICAgICAgICBm
dW5jdGlvbiByZXNvbHZlKCBkZXB0aCwgZGVmZXJyZWQsIGhhbmRsZXIsIHNwZWNpYWwgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhcmdzID0gYXJndW1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtaWdodFRocm93ID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgcmV0dXJuZWQsIHRoZW47CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy4zCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL3Byb21pc2VzYXBsdXMu
Y29tLyNwb2ludC01OQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWdu
b3JlIGRvdWJsZS1yZXNvbHV0aW9uIGF0dGVtcHRzCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGRlcHRoIDwgbWF4RGVwdGggKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5l
ZCA9IGhhbmRsZXIuYXBwbHkoIHRoYXQsIGFyZ3MgKTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9wcm9taXNlc2FwbHVz
LmNvbS8jcG9pbnQtNDgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
cmV0dXJuZWQgPT09IGRlZmVycmVkLnByb21pc2UoKSApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCAiVGhlbmFibGUgc2VsZi1y
ZXNvbHV0aW9uIiApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBQcm9taXNlcy9B
KyBzZWN0aW9ucyAyLjMuMy4xLCAzLjUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTU0CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2lu
dC03NQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV0cmlldmUgYHRo
ZW5gIG9ubHkgb25jZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbiA9
IHJldHVybmVkICYmCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy40CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQt
NjQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IGNoZWNr
IG9iamVjdHMgYW5kIGZ1bmN0aW9ucyBmb3IgdGhlbmFiaWxpdHkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoIHR5cGVvZiByZXR1cm5lZCA9PT0gIm9iamVjdCIgfHwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHJldHVy
bmVkID09PSAiZnVuY3Rpb24iICkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm5lZC50aGVuOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBIYW5kbGUgYSByZXR1cm5lZCB0aGVuYWJsZQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdGhlbiApICkgeworCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3BlY2lhbCBwcm9jZXNzb3Jz
IChub3RpZnkpIGp1c3Qgd2FpdCBmb3IgcmVzb2x1dGlvbgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggc3BlY2lhbCApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhlbi5jYWxsKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQs
IElkZW50aXR5LCBzcGVjaWFsICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIFRocm93ZXIsIHNwZWNp
YWwgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm9ybWFsIHByb2Nlc3Nv
cnMgKHJlc29sdmUpIGFsc28gaG9vayBpbnRvIHByb2dyZXNzCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyAuLi5hbmQgZGlzcmVnYXJkIG9sZGVyIHJlc29sdXRpb24g
dmFsdWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heERl
cHRoKys7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhl
bi5jYWxsKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LCBzcGVjaWFsICksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCBtYXhE
ZXB0aCwgZGVmZXJyZWQsIFRocm93ZXIsIHNwZWNpYWwgKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwg
SWRlbnRpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmZXJyZWQubm90aWZ5V2l0aCApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgYWxs
IG90aGVyIHJldHVybmVkIHZhbHVlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IE9ubHkgc3Vic3RpdHV0ZSBoYW5kbGVycyBwYXNzIG9uIGNvbnRleHQKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgbXVsdGlwbGUgdmFsdWVzIChub24tc3Bl
YyBiZWhhdmlvcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGhhbmRsZXIgIT09IElkZW50aXR5ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aGF0ID0gdW5kZWZpbmVkOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhcmdzID0gWyByZXR1cm5lZCBdOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFByb2Nlc3MgdGhlIHZhbHVlKHMpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gRGVmYXVsdCBwcm9jZXNzIGlzIHJlc29sdmUKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHNwZWNpYWwgfHwgZGVmZXJyZWQu
cmVzb2x2ZVdpdGggKSggdGhhdCwgYXJncyApOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgbm9ybWFsIHByb2Nlc3NvcnMgKHJlc29s
dmUpIGNhdGNoIGFuZCByZWplY3QgZXhjZXB0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwcm9jZXNzID0gc3BlY2lhbCA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtaWdodFRocm93IDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRy
eSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pZ2h0VGhy
b3coKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoICgg
ZSApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2so
IGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJvY2Vzcy5zdGFja1RyYWNlICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuNC4xCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1
cy5jb20vI3BvaW50LTYxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIElnbm9yZSBwb3N0LXJlc29sdXRpb24gZXhjZXB0aW9ucworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRlcHRoICsgMSA+PSBtYXhEZXB0aCAp
IHsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
T25seSBzdWJzdGl0dXRlIGhhbmRsZXJzIHBhc3Mgb24gY29udGV4dAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIG11bHRpcGxlIHZhbHVlcyAo
bm9uLXNwZWMgYmVoYXZpb3IpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGhhbmRsZXIgIT09IFRocm93ZXIgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCA9IHVuZGVmaW5lZDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0g
WyBlIF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVy
cmVkLnJlamVjdFdpdGgoIHRoYXQsIGFyZ3MgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4z
LjMuMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1
cy5jb20vI3BvaW50LTU3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmUtcmVzb2x2
ZSBwcm9taXNlcyBpbW1lZGlhdGVseSB0byBkb2RnZSBmYWxzZSByZWplY3Rpb24gZnJvbQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN1YnNlcXVlbnQgZXJyb3JzCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBkZXB0aCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHJvY2VzcygpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbCBhbiBvcHRpb25hbCBo
b29rIHRvIHJlY29yZCB0aGUgc3RhY2ssIGluIGNhc2Ugb2YgZXhjZXB0aW9uCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHNpbmNlIGl0J3Mgb3RoZXJ3aXNlIGxvc3Qgd2hlbiBl
eGVjdXRpb24gZ29lcyBhc3luYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGpRdWVyeS5EZWZlcnJlZC5nZXRTdGFja0hvb2sgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwcm9jZXNzLnN0YWNrVHJhY2UgPSBqUXVlcnkuRGVmZXJyZWQuZ2V0U3Rh
Y2tIb29rKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoIHByb2Nlc3MgKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9OworICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5E
ZWZlcnJlZCggZnVuY3Rpb24oIG5ld0RlZmVyICkgeworCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBwcm9ncmVzc19oYW5kbGVycy5hZGQoIC4uLiApCisgICAgICAgICAgICAgICAgICAgICAg
ICB0dXBsZXNbIDAgXVsgMyBdLmFkZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNv
bHZlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuZXdEZWZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5LmlzRnVuY3Rpb24oIG9uUHJvZ3Jlc3MgKSA/CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvblByb2dyZXNzIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIElkZW50aXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdE
ZWZlci5ub3RpZnlXaXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAg
ICAgICAgICAgICAgICAgKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gZnVsZmlsbGVk
X2hhbmRsZXJzLmFkZCggLi4uICkKKyAgICAgICAgICAgICAgICAgICAgICAgIHR1cGxlc1sgMSBd
WyAzIF0uYWRkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5ld0RlZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuaXNG
dW5jdGlvbiggb25GdWxmaWxsZWQgKSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvbkZ1bGZpbGxlZCA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJ
ZGVudGl0eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlamVjdGVkX2hhbmRsZXJz
LmFkZCggLi4uICkKKyAgICAgICAgICAgICAgICAgICAgICAgIHR1cGxlc1sgMiBdWyAzIF0uYWRk
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Rl
ZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuaXNGdW5jdGlvbigg
b25SZWplY3RlZCApID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uUmVq
ZWN0ZWQgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhyb3dlcgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgICAgICk7Cisg
ICAgICAgICAgICAgICAgICAgIH0gKS5wcm9taXNlKCk7CisgICAgICAgICAgICAgICAgfSwKKwor
ICAgICAgICAgICAgICAgIC8vIEdldCBhIHByb21pc2UgZm9yIHRoaXMgZGVmZXJyZWQKKyAgICAg
ICAgICAgICAgICAvLyBJZiBvYmogaXMgcHJvdmlkZWQsIHRoZSBwcm9taXNlIGFzcGVjdCBpcyBh
ZGRlZCB0byB0aGUgb2JqZWN0CisgICAgICAgICAgICAgICAgcHJvbWlzZTogZnVuY3Rpb24oIG9i
aiApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iaiAhPSBudWxsID8galF1ZXJ5LmV4
dGVuZCggb2JqLCBwcm9taXNlICkgOiBwcm9taXNlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0sCisgICAgICAgICAgICBkZWZlcnJlZCA9IHt9OworCisgICAgICAgIC8vIEFkZCBs
aXN0LXNwZWNpZmljIG1ldGhvZHMKKyAgICAgICAgalF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rp
b24oIGksIHR1cGxlICkgeworICAgICAgICAgICAgdmFyIGxpc3QgPSB0dXBsZVsgMiBdLAorICAg
ICAgICAgICAgICAgIHN0YXRlU3RyaW5nID0gdHVwbGVbIDUgXTsKKworICAgICAgICAgICAgLy8g
cHJvbWlzZS5wcm9ncmVzcyA9IGxpc3QuYWRkCisgICAgICAgICAgICAvLyBwcm9taXNlLmRvbmUg
PSBsaXN0LmFkZAorICAgICAgICAgICAgLy8gcHJvbWlzZS5mYWlsID0gbGlzdC5hZGQKKyAgICAg
ICAgICAgIHByb21pc2VbIHR1cGxlWyAxIF0gXSA9IGxpc3QuYWRkOworCisgICAgICAgICAgICAv
LyBIYW5kbGUgc3RhdGUKKyAgICAgICAgICAgIGlmICggc3RhdGVTdHJpbmcgKSB7CisgICAgICAg
ICAgICAgICAgbGlzdC5hZGQoCisgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCkgeworCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBzdGF0ZSA9ICJyZXNvbHZlZCIgKGkuZS4sIGZ1bGZp
bGxlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0YXRlID0gInJlamVjdGVkIgorICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZVN0cmluZzsKKyAgICAgICAgICAgICAg
ICAgICAgfSwKKworICAgICAgICAgICAgICAgICAgICAvLyByZWplY3RlZF9jYWxsYmFja3MuZGlz
YWJsZQorICAgICAgICAgICAgICAgICAgICAvLyBmdWxmaWxsZWRfY2FsbGJhY2tzLmRpc2FibGUK
KyAgICAgICAgICAgICAgICAgICAgdHVwbGVzWyAzIC0gaSBdWyAyIF0uZGlzYWJsZSwKKworICAg
ICAgICAgICAgICAgICAgICAvLyBwcm9ncmVzc19jYWxsYmFja3MubG9jaworICAgICAgICAgICAg
ICAgICAgICB0dXBsZXNbIDAgXVsgMiBdLmxvY2sKKyAgICAgICAgICAgICAgICApOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAvLyBwcm9ncmVzc19oYW5kbGVycy5maXJlCisgICAgICAg
ICAgICAvLyBmdWxmaWxsZWRfaGFuZGxlcnMuZmlyZQorICAgICAgICAgICAgLy8gcmVqZWN0ZWRf
aGFuZGxlcnMuZmlyZQorICAgICAgICAgICAgbGlzdC5hZGQoIHR1cGxlWyAzIF0uZmlyZSApOwor
CisgICAgICAgICAgICAvLyBkZWZlcnJlZC5ub3RpZnkgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQu
bm90aWZ5V2l0aCguLi4pIH0KKyAgICAgICAgICAgIC8vIGRlZmVycmVkLnJlc29sdmUgPSBmdW5j
dGlvbigpIHsgZGVmZXJyZWQucmVzb2x2ZVdpdGgoLi4uKSB9CisgICAgICAgICAgICAvLyBkZWZl
cnJlZC5yZWplY3QgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQucmVqZWN0V2l0aCguLi4pIH0KKyAg
ICAgICAgICAgIGRlZmVycmVkWyB0dXBsZVsgMCBdIF0gPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgICAgICBkZWZlcnJlZFsgdHVwbGVbIDAgXSArICJXaXRoIiBdKCB0aGlzID09PSBkZWZlcnJl
ZCA/IHVuZGVmaW5lZCA6IHRoaXMsIGFyZ3VtZW50cyApOworICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgLy8gZGVmZXJyZWQubm90aWZ5
V2l0aCA9IGxpc3QuZmlyZVdpdGgKKyAgICAgICAgICAgIC8vIGRlZmVycmVkLnJlc29sdmVXaXRo
ID0gbGlzdC5maXJlV2l0aAorICAgICAgICAgICAgLy8gZGVmZXJyZWQucmVqZWN0V2l0aCA9IGxp
c3QuZmlyZVdpdGgKKyAgICAgICAgICAgIGRlZmVycmVkWyB0dXBsZVsgMCBdICsgIldpdGgiIF0g
PSBsaXN0LmZpcmVXaXRoOworICAgICAgICB9ICk7CisKKyAgICAgICAgLy8gTWFrZSB0aGUgZGVm
ZXJyZWQgYSBwcm9taXNlCisgICAgICAgIHByb21pc2UucHJvbWlzZSggZGVmZXJyZWQgKTsKKwor
ICAgICAgICAvLyBDYWxsIGdpdmVuIGZ1bmMgaWYgYW55CisgICAgICAgIGlmICggZnVuYyApIHsK
KyAgICAgICAgICAgIGZ1bmMuY2FsbCggZGVmZXJyZWQsIGRlZmVycmVkICk7CisgICAgICAgIH0K
KworICAgICAgICAvLyBBbGwgZG9uZSEKKyAgICAgICAgcmV0dXJuIGRlZmVycmVkOworICAgIH0s
CisKKyAgICAvLyBEZWZlcnJlZCBoZWxwZXIKKyAgICB3aGVuOiBmdW5jdGlvbiggc2luZ2xlVmFs
dWUgKSB7CisgICAgICAgIHZhcgorCisgICAgICAgICAgICAvLyBjb3VudCBvZiB1bmNvbXBsZXRl
ZCBzdWJvcmRpbmF0ZXMKKyAgICAgICAgICAgIHJlbWFpbmluZyA9IGFyZ3VtZW50cy5sZW5ndGgs
CisKKyAgICAgICAgICAgIC8vIGNvdW50IG9mIHVucHJvY2Vzc2VkIGFyZ3VtZW50cworICAgICAg
ICAgICAgaSA9IHJlbWFpbmluZywKKworICAgICAgICAgICAgLy8gc3Vib3JkaW5hdGUgZnVsZmls
bG1lbnQgZGF0YQorICAgICAgICAgICAgcmVzb2x2ZUNvbnRleHRzID0gQXJyYXkoIGkgKSwKKyAg
ICAgICAgICAgIHJlc29sdmVWYWx1ZXMgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSwKKworICAg
ICAgICAgICAgLy8gdGhlIG1hc3RlciBEZWZlcnJlZAorICAgICAgICAgICAgbWFzdGVyID0galF1
ZXJ5LkRlZmVycmVkKCksCisKKyAgICAgICAgICAgIC8vIHN1Ym9yZGluYXRlIGNhbGxiYWNrIGZh
Y3RvcnkKKyAgICAgICAgICAgIHVwZGF0ZUZ1bmMgPSBmdW5jdGlvbiggaSApIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZnVuY3Rpb24oIHZhbHVlICkgeworICAgICAgICAgICAgICAgICAgICBy
ZXNvbHZlQ29udGV4dHNbIGkgXSA9IHRoaXM7CisgICAgICAgICAgICAgICAgICAgIHJlc29sdmVW
YWx1ZXNbIGkgXSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gc2xpY2UuY2FsbCggYXJndW1lbnRz
ICkgOiB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAhKCAtLXJlbWFpbmluZyApICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyLnJlc29sdmVXaXRoKCByZXNvbHZlQ29u
dGV4dHMsIHJlc29sdmVWYWx1ZXMgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH07CisgICAgICAgICAgICB9OworCisgICAgICAgIC8vIFNpbmdsZS0gYW5kIGVtcHR5
IGFyZ3VtZW50cyBhcmUgYWRvcHRlZCBsaWtlIFByb21pc2UucmVzb2x2ZQorICAgICAgICBpZiAo
IHJlbWFpbmluZyA8PSAxICkgeworICAgICAgICAgICAgYWRvcHRWYWx1ZSggc2luZ2xlVmFsdWUs
IG1hc3Rlci5kb25lKCB1cGRhdGVGdW5jKCBpICkgKS5yZXNvbHZlLCBtYXN0ZXIucmVqZWN0ICk7
CisKKyAgICAgICAgICAgIC8vIFVzZSAudGhlbigpIHRvIHVud3JhcCBzZWNvbmRhcnkgdGhlbmFi
bGVzIChjZi4gZ2gtMzAwMCkKKyAgICAgICAgICAgIGlmICggbWFzdGVyLnN0YXRlKCkgPT09ICJw
ZW5kaW5nIiB8fAorICAgICAgICAgICAgICAgIGpRdWVyeS5pc0Z1bmN0aW9uKCByZXNvbHZlVmFs
dWVzWyBpIF0gJiYgcmVzb2x2ZVZhbHVlc1sgaSBdLnRoZW4gKSApIHsKKworICAgICAgICAgICAg
ICAgIHJldHVybiBtYXN0ZXIudGhlbigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgLy8gTXVsdGlwbGUgYXJndW1lbnRzIGFyZSBhZ2dyZWdhdGVkIGxpa2UgUHJvbWlzZS5h
bGwgYXJyYXkgZWxlbWVudHMKKyAgICAgICAgd2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAgICBh
ZG9wdFZhbHVlKCByZXNvbHZlVmFsdWVzWyBpIF0sIHVwZGF0ZUZ1bmMoIGkgKSwgbWFzdGVyLnJl
amVjdCApOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG1hc3Rlci5wcm9taXNlKCk7Cisg
ICAgfQorfSApOworCisKKy8vIFRoZXNlIHVzdWFsbHkgaW5kaWNhdGUgYSBwcm9ncmFtbWVyIG1p
c3Rha2UgZHVyaW5nIGRldmVsb3BtZW50LAorLy8gd2FybiBhYm91dCB0aGVtIEFTQVAgcmF0aGVy
IHRoYW4gc3dhbGxvd2luZyB0aGVtIGJ5IGRlZmF1bHQuCit2YXIgcmVycm9yTmFtZXMgPSAvXihF
dmFsfEludGVybmFsfFJhbmdlfFJlZmVyZW5jZXxTeW50YXh8VHlwZXxVUkkpRXJyb3IkLzsKKwor
alF1ZXJ5LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2sgPSBmdW5jdGlvbiggZXJyb3IsIHN0YWNrICkg
eworCisgICAgLy8gU3VwcG9ydDogSUUgOCAtIDkgb25seQorICAgIC8vIENvbnNvbGUgZXhpc3Rz
IHdoZW4gZGV2IHRvb2xzIGFyZSBvcGVuLCB3aGljaCBjYW4gaGFwcGVuIGF0IGFueSB0aW1lCisg
ICAgaWYgKCB3aW5kb3cuY29uc29sZSAmJiB3aW5kb3cuY29uc29sZS53YXJuICYmIGVycm9yICYm
IHJlcnJvck5hbWVzLnRlc3QoIGVycm9yLm5hbWUgKSApIHsKKyAgICAgICAgd2luZG93LmNvbnNv
bGUud2FybiggImpRdWVyeS5EZWZlcnJlZCBleGNlcHRpb246ICIgKyBlcnJvci5tZXNzYWdlLCBl
cnJvci5zdGFjaywgc3RhY2sgKTsKKyAgICB9Cit9OworCisKKworCitqUXVlcnkucmVhZHlFeGNl
cHRpb24gPSBmdW5jdGlvbiggZXJyb3IgKSB7CisgICAgd2luZG93LnNldFRpbWVvdXQoIGZ1bmN0
aW9uKCkgeworICAgICAgICB0aHJvdyBlcnJvcjsKKyAgICB9ICk7Cit9OworCisKKworCisvLyBU
aGUgZGVmZXJyZWQgdXNlZCBvbiBET00gcmVhZHkKK3ZhciByZWFkeUxpc3QgPSBqUXVlcnkuRGVm
ZXJyZWQoKTsKKworalF1ZXJ5LmZuLnJlYWR5ID0gZnVuY3Rpb24oIGZuICkgeworCisgICAgcmVh
ZHlMaXN0CisgICAgICAgIC50aGVuKCBmbiApCisKKyAgICAgICAgLy8gV3JhcCBqUXVlcnkucmVh
ZHlFeGNlcHRpb24gaW4gYSBmdW5jdGlvbiBzbyB0aGF0IHRoZSBsb29rdXAKKyAgICAgICAgLy8g
aGFwcGVucyBhdCB0aGUgdGltZSBvZiBlcnJvciBoYW5kbGluZyBpbnN0ZWFkIG9mIGNhbGxiYWNr
CisgICAgICAgIC8vIHJlZ2lzdHJhdGlvbi4KKyAgICAgICAgLmNhdGNoKCBmdW5jdGlvbiggZXJy
b3IgKSB7CisgICAgICAgICAgICBqUXVlcnkucmVhZHlFeGNlcHRpb24oIGVycm9yICk7CisgICAg
ICAgIH0gKTsKKworICAgIHJldHVybiB0aGlzOworfTsKKworalF1ZXJ5LmV4dGVuZCggeworCisg
ICAgLy8gSXMgdGhlIERPTSByZWFkeSB0byBiZSB1c2VkPyBTZXQgdG8gdHJ1ZSBvbmNlIGl0IG9j
Y3Vycy4KKyAgICBpc1JlYWR5OiBmYWxzZSwKKworICAgIC8vIEEgY291bnRlciB0byB0cmFjayBo
b3cgbWFueSBpdGVtcyB0byB3YWl0IGZvciBiZWZvcmUKKyAgICAvLyB0aGUgcmVhZHkgZXZlbnQg
ZmlyZXMuIFNlZSAjNjc4MQorICAgIHJlYWR5V2FpdDogMSwKKworICAgIC8vIEhvbGQgKG9yIHJl
bGVhc2UpIHRoZSByZWFkeSBldmVudAorICAgIGhvbGRSZWFkeTogZnVuY3Rpb24oIGhvbGQgKSB7
CisgICAgICAgIGlmICggaG9sZCApIHsKKyAgICAgICAgICAgIGpRdWVyeS5yZWFkeVdhaXQrKzsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGpRdWVyeS5yZWFkeSggdHJ1ZSApOworICAg
ICAgICB9CisgICAgfSwKKworICAgIC8vIEhhbmRsZSB3aGVuIHRoZSBET00gaXMgcmVhZHkKKyAg
ICByZWFkeTogZnVuY3Rpb24oIHdhaXQgKSB7CisKKyAgICAgICAgLy8gQWJvcnQgaWYgdGhlcmUg
YXJlIHBlbmRpbmcgaG9sZHMgb3Igd2UncmUgYWxyZWFkeSByZWFkeQorICAgICAgICBpZiAoIHdh
aXQgPT09IHRydWUgPyAtLWpRdWVyeS5yZWFkeVdhaXQgOiBqUXVlcnkuaXNSZWFkeSApIHsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFJlbWVtYmVyIHRoYXQg
dGhlIERPTSBpcyByZWFkeQorICAgICAgICBqUXVlcnkuaXNSZWFkeSA9IHRydWU7CisKKyAgICAg
ICAgLy8gSWYgYSBub3JtYWwgRE9NIFJlYWR5IGV2ZW50IGZpcmVkLCBkZWNyZW1lbnQsIGFuZCB3
YWl0IGlmIG5lZWQgYmUKKyAgICAgICAgaWYgKCB3YWl0ICE9PSB0cnVlICYmIC0talF1ZXJ5LnJl
YWR5V2FpdCA+IDAgKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICAvLyBJZiB0aGVyZSBhcmUgZnVuY3Rpb25zIGJvdW5kLCB0byBleGVjdXRlCisgICAgICAgIHJl
YWR5TGlzdC5yZXNvbHZlV2l0aCggZG9jdW1lbnQsIFsgalF1ZXJ5IF0gKTsKKyAgICB9Cit9ICk7
CisKK2pRdWVyeS5yZWFkeS50aGVuID0gcmVhZHlMaXN0LnRoZW47CisKKy8vIFRoZSByZWFkeSBl
dmVudCBoYW5kbGVyIGFuZCBzZWxmIGNsZWFudXAgbWV0aG9kCitmdW5jdGlvbiBjb21wbGV0ZWQo
KSB7CisgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggIkRPTUNvbnRlbnRMb2FkZWQi
LCBjb21wbGV0ZWQgKTsKKyAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lciggImxvYWQiLCBj
b21wbGV0ZWQgKTsKKyAgICBqUXVlcnkucmVhZHkoKTsKK30KKworLy8gQ2F0Y2ggY2FzZXMgd2hl
cmUgJChkb2N1bWVudCkucmVhZHkoKSBpcyBjYWxsZWQKKy8vIGFmdGVyIHRoZSBicm93c2VyIGV2
ZW50IGhhcyBhbHJlYWR5IG9jY3VycmVkLgorLy8gU3VwcG9ydDogSUUgPD05IC0gMTAgb25seQor
Ly8gT2xkZXIgSUUgc29tZXRpbWVzIHNpZ25hbHMgImludGVyYWN0aXZlIiB0b28gc29vbgoraWYg
KCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSAiY29tcGxldGUiIHx8CisgICAgKCBkb2N1bWVudC5y
ZWFkeVN0YXRlICE9PSAibG9hZGluZyIgJiYgIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kb1Nj
cm9sbCApICkgeworCisgICAgLy8gSGFuZGxlIGl0IGFzeW5jaHJvbm91c2x5IHRvIGFsbG93IHNj
cmlwdHMgdGhlIG9wcG9ydHVuaXR5IHRvIGRlbGF5IHJlYWR5CisgICAgd2luZG93LnNldFRpbWVv
dXQoIGpRdWVyeS5yZWFkeSApOworCit9IGVsc2UgeworCisgICAgLy8gVXNlIHRoZSBoYW5keSBl
dmVudCBjYWxsYmFjaworICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICJET01Db250ZW50
TG9hZGVkIiwgY29tcGxldGVkICk7CisKKyAgICAvLyBBIGZhbGxiYWNrIHRvIHdpbmRvdy5vbmxv
YWQsIHRoYXQgd2lsbCBhbHdheXMgd29yaworICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCAi
bG9hZCIsIGNvbXBsZXRlZCApOworfQorCisKKworCisvLyBNdWx0aWZ1bmN0aW9uYWwgbWV0aG9k
IHRvIGdldCBhbmQgc2V0IHZhbHVlcyBvZiBhIGNvbGxlY3Rpb24KKy8vIFRoZSB2YWx1ZS9zIGNh
biBvcHRpb25hbGx5IGJlIGV4ZWN1dGVkIGlmIGl0J3MgYSBmdW5jdGlvbgordmFyIGFjY2VzcyA9
IGZ1bmN0aW9uKCBlbGVtcywgZm4sIGtleSwgdmFsdWUsIGNoYWluYWJsZSwgZW1wdHlHZXQsIHJh
dyApIHsKKyAgICB2YXIgaSA9IDAsCisgICAgICAgIGxlbiA9IGVsZW1zLmxlbmd0aCwKKyAgICAg
ICAgYnVsayA9IGtleSA9PSBudWxsOworCisgICAgLy8gU2V0cyBtYW55IHZhbHVlcworICAgIGlm
ICggalF1ZXJ5LnR5cGUoIGtleSApID09PSAib2JqZWN0IiApIHsKKyAgICAgICAgY2hhaW5hYmxl
ID0gdHJ1ZTsKKyAgICAgICAgZm9yICggaSBpbiBrZXkgKSB7CisgICAgICAgICAgICBhY2Nlc3Mo
IGVsZW1zLCBmbiwgaSwga2V5WyBpIF0sIHRydWUsIGVtcHR5R2V0LCByYXcgKTsKKyAgICAgICAg
fQorCisgICAgLy8gU2V0cyBvbmUgdmFsdWUKKyAgICB9IGVsc2UgaWYgKCB2YWx1ZSAhPT0gdW5k
ZWZpbmVkICkgeworICAgICAgICBjaGFpbmFibGUgPSB0cnVlOworCisgICAgICAgIGlmICggIWpR
dWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkgeworICAgICAgICAgICAgcmF3ID0gdHJ1ZTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICggYnVsayApIHsKKworICAgICAgICAgICAgLy8gQnVsayBv
cGVyYXRpb25zIHJ1biBhZ2FpbnN0IHRoZSBlbnRpcmUgc2V0CisgICAgICAgICAgICBpZiAoIHJh
dyApIHsKKyAgICAgICAgICAgICAgICBmbi5jYWxsKCBlbGVtcywgdmFsdWUgKTsKKyAgICAgICAg
ICAgICAgICBmbiA9IG51bGw7CisKKyAgICAgICAgICAgIC8vIC4uLmV4Y2VwdCB3aGVuIGV4ZWN1
dGluZyBmdW5jdGlvbiB2YWx1ZXMKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgYnVsayA9IGZuOworICAgICAgICAgICAgICAgIGZuID0gZnVuY3Rpb24oIGVsZW0sIGtleSwg
dmFsdWUgKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBidWxrLmNhbGwoIGpRdWVyeSgg
ZWxlbSApLCB2YWx1ZSApOworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoIGZuICkgeworICAgICAgICAgICAgZm9yICggOyBpIDwgbGVu
OyBpKysgKSB7CisgICAgICAgICAgICAgICAgZm4oCisgICAgICAgICAgICAgICAgICAgIGVsZW1z
WyBpIF0sIGtleSwgcmF3ID8KKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgOgorICAgICAgICAg
ICAgICAgICAgICB2YWx1ZS5jYWxsKCBlbGVtc1sgaSBdLCBpLCBmbiggZWxlbXNbIGkgXSwga2V5
ICkgKQorICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpZiAoIGNoYWluYWJsZSApIHsKKyAgICAgICAgcmV0dXJuIGVsZW1zOworICAgIH0K
KworICAgIC8vIEdldHMKKyAgICBpZiAoIGJ1bGsgKSB7CisgICAgICAgIHJldHVybiBmbi5jYWxs
KCBlbGVtcyApOworICAgIH0KKworICAgIHJldHVybiBsZW4gPyBmbiggZWxlbXNbIDAgXSwga2V5
ICkgOiBlbXB0eUdldDsKK307Cit2YXIgYWNjZXB0RGF0YSA9IGZ1bmN0aW9uKCBvd25lciApIHsK
KworICAgIC8vIEFjY2VwdHMgb25seToKKyAgICAvLyAgLSBOb2RlCisgICAgLy8gICAgLSBOb2Rl
LkVMRU1FTlRfTk9ERQorICAgIC8vICAgIC0gTm9kZS5ET0NVTUVOVF9OT0RFCisgICAgLy8gIC0g
T2JqZWN0CisgICAgLy8gICAgLSBBbnkKKyAgICByZXR1cm4gb3duZXIubm9kZVR5cGUgPT09IDEg
fHwgb3duZXIubm9kZVR5cGUgPT09IDkgfHwgISggK293bmVyLm5vZGVUeXBlICk7Cit9OworCisK
KworCitmdW5jdGlvbiBEYXRhKCkgeworICAgIHRoaXMuZXhwYW5kbyA9IGpRdWVyeS5leHBhbmRv
ICsgRGF0YS51aWQrKzsKK30KKworRGF0YS51aWQgPSAxOworCitEYXRhLnByb3RvdHlwZSA9IHsK
KworICAgIGNhY2hlOiBmdW5jdGlvbiggb3duZXIgKSB7CisKKyAgICAgICAgLy8gQ2hlY2sgaWYg
dGhlIG93bmVyIG9iamVjdCBhbHJlYWR5IGhhcyBhIGNhY2hlCisgICAgICAgIHZhciB2YWx1ZSA9
IG93bmVyWyB0aGlzLmV4cGFuZG8gXTsKKworICAgICAgICAvLyBJZiBub3QsIGNyZWF0ZSBvbmUK
KyAgICAgICAgaWYgKCAhdmFsdWUgKSB7CisgICAgICAgICAgICB2YWx1ZSA9IHt9OworCisgICAg
ICAgICAgICAvLyBXZSBjYW4gYWNjZXB0IGRhdGEgZm9yIG5vbi1lbGVtZW50IG5vZGVzIGluIG1v
ZGVybiBicm93c2VycywKKyAgICAgICAgICAgIC8vIGJ1dCB3ZSBzaG91bGQgbm90LCBzZWUgIzgz
MzUuCisgICAgICAgICAgICAvLyBBbHdheXMgcmV0dXJuIGFuIGVtcHR5IG9iamVjdC4KKyAgICAg
ICAgICAgIGlmICggYWNjZXB0RGF0YSggb3duZXIgKSApIHsKKworICAgICAgICAgICAgICAgIC8v
IElmIGl0IGlzIGEgbm9kZSB1bmxpa2VseSB0byBiZSBzdHJpbmdpZnktZWQgb3IgbG9vcGVkIG92
ZXIKKyAgICAgICAgICAgICAgICAvLyB1c2UgcGxhaW4gYXNzaWdubWVudAorICAgICAgICAgICAg
ICAgIGlmICggb3duZXIubm9kZVR5cGUgKSB7CisgICAgICAgICAgICAgICAgICAgIG93bmVyWyB0
aGlzLmV4cGFuZG8gXSA9IHZhbHVlOworCisgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHNl
Y3VyZSBpdCBpbiBhIG5vbi1lbnVtZXJhYmxlIHByb3BlcnR5CisgICAgICAgICAgICAgICAgLy8g
Y29uZmlndXJhYmxlIG11c3QgYmUgdHJ1ZSB0byBhbGxvdyB0aGUgcHJvcGVydHkgdG8gYmUKKyAg
ICAgICAgICAgICAgICAvLyBkZWxldGVkIHdoZW4gZGF0YSBpcyByZW1vdmVkCisgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KCBvd25lciwgdGhpcy5leHBhbmRvLCB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTog
dmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICAg
ICAgICAgICAgICAgICAgfSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9LAorICAgIHNldDogZnVuY3Rp
b24oIG93bmVyLCBkYXRhLCB2YWx1ZSApIHsKKyAgICAgICAgdmFyIHByb3AsCisgICAgICAgICAg
ICBjYWNoZSA9IHRoaXMuY2FjaGUoIG93bmVyICk7CisKKyAgICAgICAgLy8gSGFuZGxlOiBbIG93
bmVyLCBrZXksIHZhbHVlIF0gYXJncworICAgICAgICAvLyBBbHdheXMgdXNlIGNhbWVsQ2FzZSBr
ZXkgKGdoLTIyNTcpCisgICAgICAgIGlmICggdHlwZW9mIGRhdGEgPT09ICJzdHJpbmciICkgewor
ICAgICAgICAgICAgY2FjaGVbIGpRdWVyeS5jYW1lbENhc2UoIGRhdGEgKSBdID0gdmFsdWU7CisK
KyAgICAgICAgLy8gSGFuZGxlOiBbIG93bmVyLCB7IHByb3BlcnRpZXMgfSBdIGFyZ3MKKyAgICAg
ICAgfSBlbHNlIHsKKworICAgICAgICAgICAgLy8gQ29weSB0aGUgcHJvcGVydGllcyBvbmUtYnkt
b25lIHRvIHRoZSBjYWNoZSBvYmplY3QKKyAgICAgICAgICAgIGZvciAoIHByb3AgaW4gZGF0YSAp
IHsKKyAgICAgICAgICAgICAgICBjYWNoZVsgalF1ZXJ5LmNhbWVsQ2FzZSggcHJvcCApIF0gPSBk
YXRhWyBwcm9wIF07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNh
Y2hlOworICAgIH0sCisgICAgZ2V0OiBmdW5jdGlvbiggb3duZXIsIGtleSApIHsKKyAgICAgICAg
cmV0dXJuIGtleSA9PT0gdW5kZWZpbmVkID8KKyAgICAgICAgICAgIHRoaXMuY2FjaGUoIG93bmVy
ICkgOgorCisgICAgICAgICAgICAvLyBBbHdheXMgdXNlIGNhbWVsQ2FzZSBrZXkgKGdoLTIyNTcp
CisgICAgICAgICAgICBvd25lclsgdGhpcy5leHBhbmRvIF0gJiYgb3duZXJbIHRoaXMuZXhwYW5k
byBdWyBqUXVlcnkuY2FtZWxDYXNlKCBrZXkgKSBdOworICAgIH0sCisgICAgYWNjZXNzOiBmdW5j
dGlvbiggb3duZXIsIGtleSwgdmFsdWUgKSB7CisKKyAgICAgICAgLy8gSW4gY2FzZXMgd2hlcmUg
ZWl0aGVyOgorICAgICAgICAvLworICAgICAgICAvLyAgIDEuIE5vIGtleSB3YXMgc3BlY2lmaWVk
CisgICAgICAgIC8vICAgMi4gQSBzdHJpbmcga2V5IHdhcyBzcGVjaWZpZWQsIGJ1dCBubyB2YWx1
ZSBwcm92aWRlZAorICAgICAgICAvLworICAgICAgICAvLyBUYWtlIHRoZSAicmVhZCIgcGF0aCBh
bmQgYWxsb3cgdGhlIGdldCBtZXRob2QgdG8gZGV0ZXJtaW5lCisgICAgICAgIC8vIHdoaWNoIHZh
bHVlIHRvIHJldHVybiwgcmVzcGVjdGl2ZWx5IGVpdGhlcjoKKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gICAxLiBUaGUgZW50aXJlIGNhY2hlIG9iamVjdAorICAgICAgICAvLyAgIDIuIFRoZSBkYXRh
IHN0b3JlZCBhdCB0aGUga2V5CisgICAgICAgIC8vCisgICAgICAgIGlmICgga2V5ID09PSB1bmRl
ZmluZWQgfHwKKyAgICAgICAgICAgICAgICAoICgga2V5ICYmIHR5cGVvZiBrZXkgPT09ICJzdHJp
bmciICkgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCApICkgeworCisgICAgICAgICAgICByZXR1cm4g
dGhpcy5nZXQoIG93bmVyLCBrZXkgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFdoZW4gdGhl
IGtleSBpcyBub3QgYSBzdHJpbmcsIG9yIGJvdGggYSBrZXkgYW5kIHZhbHVlCisgICAgICAgIC8v
IGFyZSBzcGVjaWZpZWQsIHNldCBvciBleHRlbmQgKGV4aXN0aW5nIG9iamVjdHMpIHdpdGggZWl0
aGVyOgorICAgICAgICAvLworICAgICAgICAvLyAgIDEuIEFuIG9iamVjdCBvZiBwcm9wZXJ0aWVz
CisgICAgICAgIC8vICAgMi4gQSBrZXkgYW5kIHZhbHVlCisgICAgICAgIC8vCisgICAgICAgIHRo
aXMuc2V0KCBvd25lciwga2V5LCB2YWx1ZSApOworCisgICAgICAgIC8vIFNpbmNlIHRoZSAic2V0
IiBwYXRoIGNhbiBoYXZlIHR3byBwb3NzaWJsZSBlbnRyeSBwb2ludHMKKyAgICAgICAgLy8gcmV0
dXJuIHRoZSBleHBlY3RlZCBkYXRhIGJhc2VkIG9uIHdoaWNoIHBhdGggd2FzIHRha2VuWypdCisg
ICAgICAgIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiBrZXk7CisgICAgfSwK
KyAgICByZW1vdmU6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkgeworICAgICAgICB2YXIgaSwKKyAg
ICAgICAgICAgIGNhY2hlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdOworCisgICAgICAgIGlmICgg
Y2FjaGUgPT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGlmICgga2V5ICE9PSB1bmRlZmluZWQgKSB7CisKKyAgICAgICAgICAgIC8vIFN1
cHBvcnQgYXJyYXkgb3Igc3BhY2Ugc2VwYXJhdGVkIHN0cmluZyBvZiBrZXlzCisgICAgICAgICAg
ICBpZiAoIGpRdWVyeS5pc0FycmF5KCBrZXkgKSApIHsKKworICAgICAgICAgICAgICAgIC8vIElm
IGtleSBpcyBhbiBhcnJheSBvZiBrZXlzLi4uCisgICAgICAgICAgICAgICAgLy8gV2UgYWx3YXlz
IHNldCBjYW1lbENhc2Uga2V5cywgc28gcmVtb3ZlIHRoYXQuCisgICAgICAgICAgICAgICAga2V5
ID0ga2V5Lm1hcCggalF1ZXJ5LmNhbWVsQ2FzZSApOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBrZXkgPSBqUXVlcnkuY2FtZWxDYXNlKCBrZXkgKTsKKworICAgICAgICAg
ICAgICAgIC8vIElmIGEga2V5IHdpdGggdGhlIHNwYWNlcyBleGlzdHMsIHVzZSBpdC4KKyAgICAg
ICAgICAgICAgICAvLyBPdGhlcndpc2UsIGNyZWF0ZSBhbiBhcnJheSBieSBtYXRjaGluZyBub24t
d2hpdGVzcGFjZQorICAgICAgICAgICAgICAgIGtleSA9IGtleSBpbiBjYWNoZSA/CisgICAgICAg
ICAgICAgICAgICAgIFsga2V5IF0gOgorICAgICAgICAgICAgICAgICAgICAoIGtleS5tYXRjaCgg
cm5vdGh0bWx3aGl0ZSApIHx8IFtdICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGkg
PSBrZXkubGVuZ3RoOworCisgICAgICAgICAgICB3aGlsZSAoIGktLSApIHsKKyAgICAgICAgICAg
ICAgICBkZWxldGUgY2FjaGVbIGtleVsgaSBdIF07CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICAvLyBSZW1vdmUgdGhlIGV4cGFuZG8gaWYgdGhlcmUncyBubyBtb3JlIGRhdGEK
KyAgICAgICAgaWYgKCBrZXkgPT09IHVuZGVmaW5lZCB8fCBqUXVlcnkuaXNFbXB0eU9iamVjdCgg
Y2FjaGUgKSApIHsKKworICAgICAgICAgICAgLy8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NQor
ICAgICAgICAgICAgLy8gV2Via2l0ICYgQmxpbmsgcGVyZm9ybWFuY2Ugc3VmZmVycyB3aGVuIGRl
bGV0aW5nIHByb3BlcnRpZXMKKyAgICAgICAgICAgIC8vIGZyb20gRE9NIG5vZGVzLCBzbyBzZXQg
dG8gdW5kZWZpbmVkIGluc3RlYWQKKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1
bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTM3ODYwNyAoYnVnIHJlc3RyaWN0ZWQp
CisgICAgICAgICAgICBpZiAoIG93bmVyLm5vZGVUeXBlICkgeworICAgICAgICAgICAgICAgIG93
bmVyWyB0aGlzLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgZGVsZXRlIG93bmVyWyB0aGlzLmV4cGFuZG8gXTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0sCisgICAgaGFzRGF0YTogZnVuY3Rpb24oIG93bmVyICkgewor
ICAgICAgICB2YXIgY2FjaGUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07CisgICAgICAgIHJldHVy
biBjYWNoZSAhPT0gdW5kZWZpbmVkICYmICFqUXVlcnkuaXNFbXB0eU9iamVjdCggY2FjaGUgKTsK
KyAgICB9Cit9OwordmFyIGRhdGFQcml2ID0gbmV3IERhdGEoKTsKKwordmFyIGRhdGFVc2VyID0g
bmV3IERhdGEoKTsKKworCisKKy8vICBJbXBsZW1lbnRhdGlvbiBTdW1tYXJ5CisvLworLy8gIDEu
IEVuZm9yY2UgQVBJIHN1cmZhY2UgYW5kIHNlbWFudGljIGNvbXBhdGliaWxpdHkgd2l0aCAxLjku
eCBicmFuY2gKKy8vICAyLiBJbXByb3ZlIHRoZSBtb2R1bGUncyBtYWludGFpbmFiaWxpdHkgYnkg
cmVkdWNpbmcgdGhlIHN0b3JhZ2UKKy8vICAgICAgcGF0aHMgdG8gYSBzaW5nbGUgbWVjaGFuaXNt
LgorLy8gIDMuIFVzZSB0aGUgc2FtZSBzaW5nbGUgbWVjaGFuaXNtIHRvIHN1cHBvcnQgInByaXZh
dGUiIGFuZCAidXNlciIgZGF0YS4KKy8vICA0LiBfTmV2ZXJfIGV4cG9zZSAicHJpdmF0ZSIgZGF0
YSB0byB1c2VyIGNvZGUgKFRPRE86IERyb3AgX2RhdGEsIF9yZW1vdmVEYXRhKQorLy8gIDUuIEF2
b2lkIGV4cG9zaW5nIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb24gdXNlciBvYmplY3RzIChlZy4g
ZXhwYW5kbyBwcm9wZXJ0aWVzKQorLy8gIDYuIFByb3ZpZGUgYSBjbGVhciBwYXRoIGZvciBpbXBs
ZW1lbnRhdGlvbiB1cGdyYWRlIHRvIFdlYWtNYXAgaW4gMjAxNAorCit2YXIgcmJyYWNlID0gL14o
Pzpce1tcd1xXXSpcfXxcW1tcd1xXXSpcXSkkLywKKyAgICBybXVsdGlEYXNoID0gL1tBLVpdL2c7
CisKK2Z1bmN0aW9uIGdldERhdGEoIGRhdGEgKSB7CisgICAgaWYgKCBkYXRhID09PSAidHJ1ZSIg
KSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICggZGF0YSA9PT0gImZh
bHNlIiApIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICggZGF0YSA9
PT0gIm51bGwiICkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICAvLyBPbmx5
IGNvbnZlcnQgdG8gYSBudW1iZXIgaWYgaXQgZG9lc24ndCBjaGFuZ2UgdGhlIHN0cmluZworICAg
IGlmICggZGF0YSA9PT0gK2RhdGEgKyAiIiApIHsKKyAgICAgICAgcmV0dXJuICtkYXRhOworICAg
IH0KKworICAgIGlmICggcmJyYWNlLnRlc3QoIGRhdGEgKSApIHsKKyAgICAgICAgcmV0dXJuIEpT
T04ucGFyc2UoIGRhdGEgKTsKKyAgICB9CisKKyAgICByZXR1cm4gZGF0YTsKK30KKworZnVuY3Rp
b24gZGF0YUF0dHIoIGVsZW0sIGtleSwgZGF0YSApIHsKKyAgICB2YXIgbmFtZTsKKworICAgIC8v
IElmIG5vdGhpbmcgd2FzIGZvdW5kIGludGVybmFsbHksIHRyeSB0byBmZXRjaCBhbnkKKyAgICAv
LyBkYXRhIGZyb20gdGhlIEhUTUw1IGRhdGEtKiBhdHRyaWJ1dGUKKyAgICBpZiAoIGRhdGEgPT09
IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkgeworICAgICAgICBuYW1lID0gImRh
dGEtIiArIGtleS5yZXBsYWNlKCBybXVsdGlEYXNoLCAiLSQmIiApLnRvTG93ZXJDYXNlKCk7Cisg
ICAgICAgIGRhdGEgPSBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApOworCisgICAgICAgIGlmICgg
dHlwZW9mIGRhdGEgPT09ICJzdHJpbmciICkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAg
ICAgICAgICBkYXRhID0gZ2V0RGF0YSggZGF0YSApOworICAgICAgICAgICAgfSBjYXRjaCAoIGUg
KSB7fQorCisgICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2Ugc2V0IHRoZSBkYXRhIHNvIGl0IGlz
bid0IGNoYW5nZWQgbGF0ZXIKKyAgICAgICAgICAgIGRhdGFVc2VyLnNldCggZWxlbSwga2V5LCBk
YXRhICk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkYXRhID0gdW5kZWZpbmVkOwor
ICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBkYXRhOworfQorCitqUXVlcnkuZXh0ZW5kKCB7
CisgICAgaGFzRGF0YTogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgIHJldHVybiBkYXRhVXNl
ci5oYXNEYXRhKCBlbGVtICkgfHwgZGF0YVByaXYuaGFzRGF0YSggZWxlbSApOworICAgIH0sCisK
KyAgICBkYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHsKKyAgICAgICAgcmV0dXJu
IGRhdGFVc2VyLmFjY2VzcyggZWxlbSwgbmFtZSwgZGF0YSApOworICAgIH0sCisKKyAgICByZW1v
dmVEYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsKKyAgICAgICAgZGF0YVVzZXIucmVtb3Zl
KCBlbGVtLCBuYW1lICk7CisgICAgfSwKKworICAgIC8vIFRPRE86IE5vdyB0aGF0IGFsbCBjYWxs
cyB0byBfZGF0YSBhbmQgX3JlbW92ZURhdGEgaGF2ZSBiZWVuIHJlcGxhY2VkCisgICAgLy8gd2l0
aCBkaXJlY3QgY2FsbHMgdG8gZGF0YVByaXYgbWV0aG9kcywgdGhlc2UgY2FuIGJlIGRlcHJlY2F0
ZWQuCisgICAgX2RhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkgeworICAgICAgICBy
ZXR1cm4gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7CisgICAgfSwKKworICAg
IF9yZW1vdmVEYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsKKyAgICAgICAgZGF0YVByaXYu
cmVtb3ZlKCBlbGVtLCBuYW1lICk7CisgICAgfQorfSApOworCitqUXVlcnkuZm4uZXh0ZW5kKCB7
CisgICAgZGF0YTogZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7CisgICAgICAgIHZhciBpLCBuYW1l
LCBkYXRhLAorICAgICAgICAgICAgZWxlbSA9IHRoaXNbIDAgXSwKKyAgICAgICAgICAgIGF0dHJz
ID0gZWxlbSAmJiBlbGVtLmF0dHJpYnV0ZXM7CisKKyAgICAgICAgLy8gR2V0cyBhbGwgdmFsdWVz
CisgICAgICAgIGlmICgga2V5ID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICBpZiAoIHRo
aXMubGVuZ3RoICkgeworICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhVXNlci5nZXQoIGVsZW0g
KTsKKworICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAhZGF0YVBy
aXYuZ2V0KCBlbGVtLCAiaGFzRGF0YUF0dHJzIiApICkgeworICAgICAgICAgICAgICAgICAgICBp
ID0gYXR0cnMubGVuZ3RoOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGktLSApIHsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogSUUgMTEgb25seQorICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gVGhlIGF0dHJzIGVsZW1lbnRzIGNhbiBiZSBudWxsICgjMTQ4OTQp
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGF0dHJzWyBpIF0gKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbmFtZSA9IGF0dHJzWyBpIF0ubmFtZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIG5hbWUuaW5kZXhPZiggImRhdGEtIiApID09PSAwICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggbmFt
ZS5zbGljZSggNSApICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFBdHRy
KCBlbGVtLCBuYW1lLCBkYXRhWyBuYW1lIF0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgZGF0YVByaXYuc2V0KCBlbGVtLCAiaGFzRGF0YUF0dHJzIiwgdHJ1
ZSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0
dXJuIGRhdGE7CisgICAgICAgIH0KKworICAgICAgICAvLyBTZXRzIG11bHRpcGxlIHZhbHVlcwor
ICAgICAgICBpZiAoIHR5cGVvZiBrZXkgPT09ICJvYmplY3QiICkgeworICAgICAgICAgICAgcmV0
dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZGF0YVVzZXIuc2V0
KCB0aGlzLCBrZXkgKTsKKyAgICAgICAgICAgIH0gKTsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHsKKyAgICAgICAgICAgIHZhciBk
YXRhOworCisgICAgICAgICAgICAvLyBUaGUgY2FsbGluZyBqUXVlcnkgb2JqZWN0IChlbGVtZW50
IG1hdGNoZXMpIGlzIG5vdCBlbXB0eQorICAgICAgICAgICAgLy8gKGFuZCB0aGVyZWZvcmUgaGFz
IGFuIGVsZW1lbnQgYXBwZWFycyBhdCB0aGlzWyAwIF0pIGFuZCB0aGUKKyAgICAgICAgICAgIC8v
IGB2YWx1ZWAgcGFyYW1ldGVyIHdhcyBub3QgdW5kZWZpbmVkLiBBbiBlbXB0eSBqUXVlcnkgb2Jq
ZWN0CisgICAgICAgICAgICAvLyB3aWxsIHJlc3VsdCBpbiBgdW5kZWZpbmVkYCBmb3IgZWxlbSA9
IHRoaXNbIDAgXSB3aGljaCB3aWxsCisgICAgICAgICAgICAvLyB0aHJvdyBhbiBleGNlcHRpb24g
aWYgYW4gYXR0ZW1wdCB0byByZWFkIGEgZGF0YSBjYWNoZSBpcyBtYWRlLgorICAgICAgICAgICAg
aWYgKCBlbGVtICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSB7CisKKyAgICAgICAgICAgICAgICAv
LyBBdHRlbXB0IHRvIGdldCBkYXRhIGZyb20gdGhlIGNhY2hlCisgICAgICAgICAgICAgICAgLy8g
VGhlIGtleSB3aWxsIGFsd2F5cyBiZSBjYW1lbENhc2VkIGluIERhdGEKKyAgICAgICAgICAgICAg
ICBkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtLCBrZXkgKTsKKyAgICAgICAgICAgICAgICBpZiAo
IGRhdGEgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byAiZGlz
Y292ZXIiIHRoZSBkYXRhIGluCisgICAgICAgICAgICAgICAgLy8gSFRNTDUgY3VzdG9tIGRhdGEt
KiBhdHRycworICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhQXR0ciggZWxlbSwga2V5ICk7Cisg
ICAgICAgICAgICAgICAgaWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBkYXRhOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IC8vIFdlIHRyaWVkIHJlYWxseSBoYXJkLCBidXQgdGhlIGRhdGEgZG9lc24ndCBleGlzdC4KKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFNl
dCB0aGUgZGF0YS4uLgorICAgICAgICAgICAgdGhpcy5lYWNoKCBmdW5jdGlvbigpIHsKKworICAg
ICAgICAgICAgICAgIC8vIFdlIGFsd2F5cyBzdG9yZSB0aGUgY2FtZWxDYXNlZCBrZXkKKyAgICAg
ICAgICAgICAgICBkYXRhVXNlci5zZXQoIHRoaXMsIGtleSwgdmFsdWUgKTsKKyAgICAgICAgICAg
IH0gKTsKKyAgICAgICAgfSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxLCBudWxs
LCB0cnVlICk7CisgICAgfSwKKworICAgIHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBrZXkgKSB7Cisg
ICAgICAgIHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZGF0YVVz
ZXIucmVtb3ZlKCB0aGlzLCBrZXkgKTsKKyAgICAgICAgfSApOworICAgIH0KK30gKTsKKworCitq
UXVlcnkuZXh0ZW5kKCB7CisgICAgcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBkYXRhICkg
eworICAgICAgICB2YXIgcXVldWU7CisKKyAgICAgICAgaWYgKCBlbGVtICkgeworICAgICAgICAg
ICAgdHlwZSA9ICggdHlwZSB8fCAiZngiICkgKyAicXVldWUiOworICAgICAgICAgICAgcXVldWUg
PSBkYXRhUHJpdi5nZXQoIGVsZW0sIHR5cGUgKTsKKworICAgICAgICAgICAgLy8gU3BlZWQgdXAg
ZGVxdWV1ZSBieSBnZXR0aW5nIG91dCBxdWlja2x5IGlmIHRoaXMgaXMganVzdCBhIGxvb2t1cAor
ICAgICAgICAgICAgaWYgKCBkYXRhICkgeworICAgICAgICAgICAgICAgIGlmICggIXF1ZXVlIHx8
IGpRdWVyeS5pc0FycmF5KCBkYXRhICkgKSB7CisgICAgICAgICAgICAgICAgICAgIHF1ZXVlID0g
ZGF0YVByaXYuYWNjZXNzKCBlbGVtLCB0eXBlLCBqUXVlcnkubWFrZUFycmF5KCBkYXRhICkgKTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBxdWV1ZS5wdXNo
KCBkYXRhICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
cmV0dXJuIHF1ZXVlIHx8IFtdOworICAgICAgICB9CisgICAgfSwKKworICAgIGRlcXVldWU6IGZ1
bmN0aW9uKCBlbGVtLCB0eXBlICkgeworICAgICAgICB0eXBlID0gdHlwZSB8fCAiZngiOworCisg
ICAgICAgIHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggZWxlbSwgdHlwZSApLAorICAgICAgICAg
ICAgc3RhcnRMZW5ndGggPSBxdWV1ZS5sZW5ndGgsCisgICAgICAgICAgICBmbiA9IHF1ZXVlLnNo
aWZ0KCksCisgICAgICAgICAgICBob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgdHlw
ZSApLAorICAgICAgICAgICAgbmV4dCA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGpR
dWVyeS5kZXF1ZXVlKCBlbGVtLCB0eXBlICk7CisgICAgICAgICAgICB9OworCisgICAgICAgIC8v
IElmIHRoZSBmeCBxdWV1ZSBpcyBkZXF1ZXVlZCwgYWx3YXlzIHJlbW92ZSB0aGUgcHJvZ3Jlc3Mg
c2VudGluZWwKKyAgICAgICAgaWYgKCBmbiA9PT0gImlucHJvZ3Jlc3MiICkgeworICAgICAgICAg
ICAgZm4gPSBxdWV1ZS5zaGlmdCgpOworICAgICAgICAgICAgc3RhcnRMZW5ndGgtLTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmICggZm4gKSB7CisKKyAgICAgICAgICAgIC8vIEFkZCBhIHByb2dy
ZXNzIHNlbnRpbmVsIHRvIHByZXZlbnQgdGhlIGZ4IHF1ZXVlIGZyb20gYmVpbmcKKyAgICAgICAg
ICAgIC8vIGF1dG9tYXRpY2FsbHkgZGVxdWV1ZWQKKyAgICAgICAgICAgIGlmICggdHlwZSA9PT0g
ImZ4IiApIHsKKyAgICAgICAgICAgICAgICBxdWV1ZS51bnNoaWZ0KCAiaW5wcm9ncmVzcyIgKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ2xlYXIgdXAgdGhlIGxhc3QgcXVldWUg
c3RvcCBmdW5jdGlvbgorICAgICAgICAgICAgZGVsZXRlIGhvb2tzLnN0b3A7CisgICAgICAgICAg
ICBmbi5jYWxsKCBlbGVtLCBuZXh0LCBob29rcyApOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KCAhc3RhcnRMZW5ndGggJiYgaG9va3MgKSB7CisgICAgICAgICAgICBob29rcy5lbXB0eS5maXJl
KCk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgLy8gTm90IHB1YmxpYyAtIGdlbmVyYXRlIGEg
cXVldWVIb29rcyBvYmplY3QsIG9yIHJldHVybiB0aGUgY3VycmVudCBvbmUKKyAgICBfcXVldWVI
b29rczogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7CisgICAgICAgIHZhciBrZXkgPSB0eXBlICsg
InF1ZXVlSG9va3MiOworICAgICAgICByZXR1cm4gZGF0YVByaXYuZ2V0KCBlbGVtLCBrZXkgKSB8
fCBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIGtleSwgeworICAgICAgICAgICAgZW1wdHk6IGpRdWVy
eS5DYWxsYmFja3MoICJvbmNlIG1lbW9yeSIgKS5hZGQoIGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgICAgIGRhdGFQcml2LnJlbW92ZSggZWxlbSwgWyB0eXBlICsgInF1ZXVlIiwga2V5IF0gKTsK
KyAgICAgICAgICAgIH0gKQorICAgICAgICB9ICk7CisgICAgfQorfSApOworCitqUXVlcnkuZm4u
ZXh0ZW5kKCB7CisgICAgcXVldWU6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkgeworICAgICAgICB2
YXIgc2V0dGVyID0gMjsKKworICAgICAgICBpZiAoIHR5cGVvZiB0eXBlICE9PSAic3RyaW5nIiAp
IHsKKyAgICAgICAgICAgIGRhdGEgPSB0eXBlOworICAgICAgICAgICAgdHlwZSA9ICJmeCI7Cisg
ICAgICAgICAgICBzZXR0ZXItLTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggYXJndW1lbnRz
Lmxlbmd0aCA8IHNldHRlciApIHsKKyAgICAgICAgICAgIHJldHVybiBqUXVlcnkucXVldWUoIHRo
aXNbIDAgXSwgdHlwZSApOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRhdGEgPT09IHVu
ZGVmaW5lZCA/CisgICAgICAgICAgICB0aGlzIDoKKyAgICAgICAgICAgIHRoaXMuZWFjaCggZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCB0aGlz
LCB0eXBlLCBkYXRhICk7CisKKyAgICAgICAgICAgICAgICAvLyBFbnN1cmUgYSBob29rcyBmb3Ig
dGhpcyBxdWV1ZQorICAgICAgICAgICAgICAgIGpRdWVyeS5fcXVldWVIb29rcyggdGhpcywgdHlw
ZSApOworCisgICAgICAgICAgICAgICAgaWYgKCB0eXBlID09PSAiZngiICYmIHF1ZXVlWyAwIF0g
IT09ICJpbnByb2dyZXNzIiApIHsKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmRlcXVldWUo
IHRoaXMsIHR5cGUgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9ICk7CisgICAg
fSwKKyAgICBkZXF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
ZWFjaCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlw
ZSApOworICAgICAgICB9ICk7CisgICAgfSwKKyAgICBjbGVhclF1ZXVlOiBmdW5jdGlvbiggdHlw
ZSApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMucXVldWUoIHR5cGUgfHwgImZ4IiwgW10gKTsKKyAg
ICB9LAorCisgICAgLy8gR2V0IGEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHF1ZXVlcyBvZiBhIGNl
cnRhaW4gdHlwZQorICAgIC8vIGFyZSBlbXB0aWVkIChmeCBpcyB0aGUgdHlwZSBieSBkZWZhdWx0
KQorICAgIHByb21pc2U6IGZ1bmN0aW9uKCB0eXBlLCBvYmogKSB7CisgICAgICAgIHZhciB0bXAs
CisgICAgICAgICAgICBjb3VudCA9IDEsCisgICAgICAgICAgICBkZWZlciA9IGpRdWVyeS5EZWZl
cnJlZCgpLAorICAgICAgICAgICAgZWxlbWVudHMgPSB0aGlzLAorICAgICAgICAgICAgaSA9IHRo
aXMubGVuZ3RoLAorICAgICAgICAgICAgcmVzb2x2ZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgICAgIGlmICggISggLS1jb3VudCApICkgeworICAgICAgICAgICAgICAgICAgICBkZWZlci5y
ZXNvbHZlV2l0aCggZWxlbWVudHMsIFsgZWxlbWVudHMgXSApOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH07CisKKyAgICAgICAgaWYgKCB0eXBlb2YgdHlwZSAhPT0gInN0cmluZyIg
KSB7CisgICAgICAgICAgICBvYmogPSB0eXBlOworICAgICAgICAgICAgdHlwZSA9IHVuZGVmaW5l
ZDsKKyAgICAgICAgfQorICAgICAgICB0eXBlID0gdHlwZSB8fCAiZngiOworCisgICAgICAgIHdo
aWxlICggaS0tICkgeworICAgICAgICAgICAgdG1wID0gZGF0YVByaXYuZ2V0KCBlbGVtZW50c1sg
aSBdLCB0eXBlICsgInF1ZXVlSG9va3MiICk7CisgICAgICAgICAgICBpZiAoIHRtcCAmJiB0bXAu
ZW1wdHkgKSB7CisgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgICAgICB0bXAu
ZW1wdHkuYWRkKCByZXNvbHZlICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
cmVzb2x2ZSgpOworICAgICAgICByZXR1cm4gZGVmZXIucHJvbWlzZSggb2JqICk7CisgICAgfQor
fSApOwordmFyIHBudW0gPSAoIC9bKy1dPyg/OlxkKlwufClcZCsoPzpbZUVdWystXT9cZCt8KS8g
KS5zb3VyY2U7CisKK3ZhciByY3NzTnVtID0gbmV3IFJlZ0V4cCggIl4oPzooWystXSk9fCkoIiAr
IHBudW0gKyAiKShbYS16JV0qKSQiLCAiaSIgKTsKKworCit2YXIgY3NzRXhwYW5kID0gWyAiVG9w
IiwgIlJpZ2h0IiwgIkJvdHRvbSIsICJMZWZ0IiBdOworCit2YXIgaXNIaWRkZW5XaXRoaW5UcmVl
ID0gZnVuY3Rpb24oIGVsZW0sIGVsICkgeworCisgICAgICAgIC8vIGlzSGlkZGVuV2l0aGluVHJl
ZSBtaWdodCBiZSBjYWxsZWQgZnJvbSBqUXVlcnkjZmlsdGVyIGZ1bmN0aW9uOworICAgICAgICAv
LyBpbiB0aGF0IGNhc2UsIGVsZW1lbnQgd2lsbCBiZSBzZWNvbmQgYXJndW1lbnQKKyAgICAgICAg
ZWxlbSA9IGVsIHx8IGVsZW07CisKKyAgICAgICAgLy8gSW5saW5lIHN0eWxlIHRydW1wcyBhbGwK
KyAgICAgICAgcmV0dXJuIGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gIm5vbmUiIHx8CisgICAgICAg
ICAgICBlbGVtLnN0eWxlLmRpc3BsYXkgPT09ICIiICYmCisKKyAgICAgICAgICAgIC8vIE90aGVy
d2lzZSwgY2hlY2sgY29tcHV0ZWQgc3R5bGUKKyAgICAgICAgICAgIC8vIFN1cHBvcnQ6IEZpcmVm
b3ggPD00MyAtIDQ1CisgICAgICAgICAgICAvLyBEaXNjb25uZWN0ZWQgZWxlbWVudHMgY2FuIGhh
dmUgY29tcHV0ZWQgZGlzcGxheTogbm9uZSwgc28gZmlyc3QgY29uZmlybSB0aGF0IGVsZW0gaXMK
KyAgICAgICAgICAgIC8vIGluIHRoZSBkb2N1bWVudC4KKyAgICAgICAgICAgIGpRdWVyeS5jb250
YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICkgJiYKKworICAgICAgICAgICAgalF1ZXJ5
LmNzcyggZWxlbSwgImRpc3BsYXkiICkgPT09ICJub25lIjsKKyAgICB9OworCit2YXIgc3dhcCA9
IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBjYWxsYmFjaywgYXJncyApIHsKKyAgICB2YXIgcmV0
LCBuYW1lLAorICAgICAgICBvbGQgPSB7fTsKKworICAgIC8vIFJlbWVtYmVyIHRoZSBvbGQgdmFs
dWVzLCBhbmQgaW5zZXJ0IHRoZSBuZXcgb25lcworICAgIGZvciAoIG5hbWUgaW4gb3B0aW9ucyAp
IHsKKyAgICAgICAgb2xkWyBuYW1lIF0gPSBlbGVtLnN0eWxlWyBuYW1lIF07CisgICAgICAgIGVs
ZW0uc3R5bGVbIG5hbWUgXSA9IG9wdGlvbnNbIG5hbWUgXTsKKyAgICB9CisKKyAgICByZXQgPSBj
YWxsYmFjay5hcHBseSggZWxlbSwgYXJncyB8fCBbXSApOworCisgICAgLy8gUmV2ZXJ0IHRoZSBv
bGQgdmFsdWVzCisgICAgZm9yICggbmFtZSBpbiBvcHRpb25zICkgeworICAgICAgICBlbGVtLnN0
eWxlWyBuYW1lIF0gPSBvbGRbIG5hbWUgXTsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfTsK
KworCisKKworZnVuY3Rpb24gYWRqdXN0Q1NTKCBlbGVtLCBwcm9wLCB2YWx1ZVBhcnRzLCB0d2Vl
biApIHsKKyAgICB2YXIgYWRqdXN0ZWQsCisgICAgICAgIHNjYWxlID0gMSwKKyAgICAgICAgbWF4
SXRlcmF0aW9ucyA9IDIwLAorICAgICAgICBjdXJyZW50VmFsdWUgPSB0d2VlbiA/CisgICAgICAg
ICAgICBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHdlZW4uY3VyKCk7Cisg
ICAgICAgICAgICB9IDoKKyAgICAgICAgICAgIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAg
IHJldHVybiBqUXVlcnkuY3NzKCBlbGVtLCBwcm9wLCAiIiApOworICAgICAgICAgICAgfSwKKyAg
ICAgICAgaW5pdGlhbCA9IGN1cnJlbnRWYWx1ZSgpLAorICAgICAgICB1bml0ID0gdmFsdWVQYXJ0
cyAmJiB2YWx1ZVBhcnRzWyAzIF0gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gPyAiIiA6
ICJweCIgKSwKKworICAgICAgICAvLyBTdGFydGluZyB2YWx1ZSBjb21wdXRhdGlvbiBpcyByZXF1
aXJlZCBmb3IgcG90ZW50aWFsIHVuaXQgbWlzbWF0Y2hlcworICAgICAgICBpbml0aWFsSW5Vbml0
ID0gKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gfHwgdW5pdCAhPT0gInB4IiAmJiAraW5pdGlh
bCApICYmCisgICAgICAgICAgICByY3NzTnVtLmV4ZWMoIGpRdWVyeS5jc3MoIGVsZW0sIHByb3Ag
KSApOworCisgICAgaWYgKCBpbml0aWFsSW5Vbml0ICYmIGluaXRpYWxJblVuaXRbIDMgXSAhPT0g
dW5pdCApIHsKKworICAgICAgICAvLyBUcnVzdCB1bml0cyByZXBvcnRlZCBieSBqUXVlcnkuY3Nz
CisgICAgICAgIHVuaXQgPSB1bml0IHx8IGluaXRpYWxJblVuaXRbIDMgXTsKKworICAgICAgICAv
LyBNYWtlIHN1cmUgd2UgdXBkYXRlIHRoZSB0d2VlbiBwcm9wZXJ0aWVzIGxhdGVyIG9uCisgICAg
ICAgIHZhbHVlUGFydHMgPSB2YWx1ZVBhcnRzIHx8IFtdOworCisgICAgICAgIC8vIEl0ZXJhdGl2
ZWx5IGFwcHJveGltYXRlIGZyb20gYSBub256ZXJvIHN0YXJ0aW5nIHBvaW50CisgICAgICAgIGlu
aXRpYWxJblVuaXQgPSAraW5pdGlhbCB8fCAxOworCisgICAgICAgIGRvIHsKKworICAgICAgICAg
ICAgLy8gSWYgcHJldmlvdXMgaXRlcmF0aW9uIHplcm9lZCBvdXQsIGRvdWJsZSB1bnRpbCB3ZSBn
ZXQgKnNvbWV0aGluZyouCisgICAgICAgICAgICAvLyBVc2Ugc3RyaW5nIGZvciBkb3VibGluZyBz
byB3ZSBkb24ndCBhY2NpZGVudGFsbHkgc2VlIHNjYWxlIGFzIHVuY2hhbmdlZCBiZWxvdworICAg
ICAgICAgICAgc2NhbGUgPSBzY2FsZSB8fCAiLjUiOworCisgICAgICAgICAgICAvLyBBZGp1c3Qg
YW5kIGFwcGx5CisgICAgICAgICAgICBpbml0aWFsSW5Vbml0ID0gaW5pdGlhbEluVW5pdCAvIHNj
YWxlOworICAgICAgICAgICAgalF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBpbml0aWFsSW5Vbml0
ICsgdW5pdCApOworCisgICAgICAgIC8vIFVwZGF0ZSBzY2FsZSwgdG9sZXJhdGluZyB6ZXJvIG9y
IE5hTiBmcm9tIHR3ZWVuLmN1cigpCisgICAgICAgIC8vIEJyZWFrIHRoZSBsb29wIGlmIHNjYWxl
IGlzIHVuY2hhbmdlZCBvciBwZXJmZWN0LCBvciBpZiB3ZSd2ZSBqdXN0IGhhZCBlbm91Z2guCisg
ICAgICAgIH0gd2hpbGUgKAorICAgICAgICAgICAgc2NhbGUgIT09ICggc2NhbGUgPSBjdXJyZW50
VmFsdWUoKSAvIGluaXRpYWwgKSAmJiBzY2FsZSAhPT0gMSAmJiAtLW1heEl0ZXJhdGlvbnMKKyAg
ICAgICAgKTsKKyAgICB9CisKKyAgICBpZiAoIHZhbHVlUGFydHMgKSB7CisgICAgICAgIGluaXRp
YWxJblVuaXQgPSAraW5pdGlhbEluVW5pdCB8fCAraW5pdGlhbCB8fCAwOworCisgICAgICAgIC8v
IEFwcGx5IHJlbGF0aXZlIG9mZnNldCAoKz0vLT0pIGlmIHNwZWNpZmllZAorICAgICAgICBhZGp1
c3RlZCA9IHZhbHVlUGFydHNbIDEgXSA/CisgICAgICAgICAgICBpbml0aWFsSW5Vbml0ICsgKCB2
YWx1ZVBhcnRzWyAxIF0gKyAxICkgKiB2YWx1ZVBhcnRzWyAyIF0gOgorICAgICAgICAgICAgK3Zh
bHVlUGFydHNbIDIgXTsKKyAgICAgICAgaWYgKCB0d2VlbiApIHsKKyAgICAgICAgICAgIHR3ZWVu
LnVuaXQgPSB1bml0OworICAgICAgICAgICAgdHdlZW4uc3RhcnQgPSBpbml0aWFsSW5Vbml0Owor
ICAgICAgICAgICAgdHdlZW4uZW5kID0gYWRqdXN0ZWQ7CisgICAgICAgIH0KKyAgICB9CisgICAg
cmV0dXJuIGFkanVzdGVkOworfQorCisKK3ZhciBkZWZhdWx0RGlzcGxheU1hcCA9IHt9OworCitm
dW5jdGlvbiBnZXREZWZhdWx0RGlzcGxheSggZWxlbSApIHsKKyAgICB2YXIgdGVtcCwKKyAgICAg
ICAgZG9jID0gZWxlbS5vd25lckRvY3VtZW50LAorICAgICAgICBub2RlTmFtZSA9IGVsZW0ubm9k
ZU5hbWUsCisgICAgICAgIGRpc3BsYXkgPSBkZWZhdWx0RGlzcGxheU1hcFsgbm9kZU5hbWUgXTsK
KworICAgIGlmICggZGlzcGxheSApIHsKKyAgICAgICAgcmV0dXJuIGRpc3BsYXk7CisgICAgfQor
CisgICAgdGVtcCA9IGRvYy5ib2R5LmFwcGVuZENoaWxkKCBkb2MuY3JlYXRlRWxlbWVudCggbm9k
ZU5hbWUgKSApOworICAgIGRpc3BsYXkgPSBqUXVlcnkuY3NzKCB0ZW1wLCAiZGlzcGxheSIgKTsK
KworICAgIHRlbXAucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggdGVtcCApOworCisgICAgaWYgKCBk
aXNwbGF5ID09PSAibm9uZSIgKSB7CisgICAgICAgIGRpc3BsYXkgPSAiYmxvY2siOworICAgIH0K
KyAgICBkZWZhdWx0RGlzcGxheU1hcFsgbm9kZU5hbWUgXSA9IGRpc3BsYXk7CisKKyAgICByZXR1
cm4gZGlzcGxheTsKK30KKworZnVuY3Rpb24gc2hvd0hpZGUoIGVsZW1lbnRzLCBzaG93ICkgewor
ICAgIHZhciBkaXNwbGF5LCBlbGVtLAorICAgICAgICB2YWx1ZXMgPSBbXSwKKyAgICAgICAgaW5k
ZXggPSAwLAorICAgICAgICBsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7CisKKyAgICAvLyBEZXRl
cm1pbmUgbmV3IGRpc3BsYXkgdmFsdWUgZm9yIGVsZW1lbnRzIHRoYXQgbmVlZCB0byBjaGFuZ2UK
KyAgICBmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkgeworICAgICAgICBlbGVtID0g
ZWxlbWVudHNbIGluZGV4IF07CisgICAgICAgIGlmICggIWVsZW0uc3R5bGUgKSB7CisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGRpc3BsYXkgPSBlbGVtLnN0eWxl
LmRpc3BsYXk7CisgICAgICAgIGlmICggc2hvdyApIHsKKworICAgICAgICAgICAgLy8gU2luY2Ug
d2UgZm9yY2UgdmlzaWJpbGl0eSB1cG9uIGNhc2NhZGUtaGlkZGVuIGVsZW1lbnRzLCBhbiBpbW1l
ZGlhdGUgKGFuZCBzbG93KQorICAgICAgICAgICAgLy8gY2hlY2sgaXMgcmVxdWlyZWQgaW4gdGhp
cyBmaXJzdCBsb29wIHVubGVzcyB3ZSBoYXZlIGEgbm9uZW1wdHkgZGlzcGxheSB2YWx1ZSAoZWl0
aGVyCisgICAgICAgICAgICAvLyBpbmxpbmUgb3IgYWJvdXQtdG8tYmUtcmVzdG9yZWQpCisgICAg
ICAgICAgICBpZiAoIGRpc3BsYXkgPT09ICJub25lIiApIHsKKyAgICAgICAgICAgICAgICB2YWx1
ZXNbIGluZGV4IF0gPSBkYXRhUHJpdi5nZXQoIGVsZW0sICJkaXNwbGF5IiApIHx8IG51bGw7Cisg
ICAgICAgICAgICAgICAgaWYgKCAhdmFsdWVzWyBpbmRleCBdICkgeworICAgICAgICAgICAgICAg
ICAgICBlbGVtLnN0eWxlLmRpc3BsYXkgPSAiIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoIGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gIiIgJiYgaXNI
aWRkZW5XaXRoaW5UcmVlKCBlbGVtICkgKSB7CisgICAgICAgICAgICAgICAgdmFsdWVzWyBpbmRl
eCBdID0gZ2V0RGVmYXVsdERpc3BsYXkoIGVsZW0gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGlmICggZGlzcGxheSAhPT0gIm5vbmUiICkgeworICAgICAg
ICAgICAgICAgIHZhbHVlc1sgaW5kZXggXSA9ICJub25lIjsKKworICAgICAgICAgICAgICAgIC8v
IFJlbWVtYmVyIHdoYXQgd2UncmUgb3ZlcndyaXRpbmcKKyAgICAgICAgICAgICAgICBkYXRhUHJp
di5zZXQoIGVsZW0sICJkaXNwbGF5IiwgZGlzcGxheSApOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgLy8gU2V0IHRoZSBkaXNwbGF5IG9mIHRoZSBlbGVtZW50cyBpbiBh
IHNlY29uZCBsb29wIHRvIGF2b2lkIGNvbnN0YW50IHJlZmxvdworICAgIGZvciAoIGluZGV4ID0g
MDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7CisgICAgICAgIGlmICggdmFsdWVzWyBpbmRl
eCBdICE9IG51bGwgKSB7CisgICAgICAgICAgICBlbGVtZW50c1sgaW5kZXggXS5zdHlsZS5kaXNw
bGF5ID0gdmFsdWVzWyBpbmRleCBdOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGVs
ZW1lbnRzOworfQorCitqUXVlcnkuZm4uZXh0ZW5kKCB7CisgICAgc2hvdzogZnVuY3Rpb24oKSB7
CisgICAgICAgIHJldHVybiBzaG93SGlkZSggdGhpcywgdHJ1ZSApOworICAgIH0sCisgICAgaGlk
ZTogZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBzaG93SGlkZSggdGhpcyApOworICAgIH0s
CisgICAgdG9nZ2xlOiBmdW5jdGlvbiggc3RhdGUgKSB7CisgICAgICAgIGlmICggdHlwZW9mIHN0
YXRlID09PSAiYm9vbGVhbiIgKSB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGUgPyB0aGlzLnNo
b3coKSA6IHRoaXMuaGlkZSgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRoaXMuZWFj
aCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBpZiAoIGlzSGlkZGVuV2l0aGluVHJlZSggdGhp
cyApICkgeworICAgICAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLnNob3coKTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkuaGlkZSgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9ICk7CisgICAgfQorfSApOwordmFyIHJjaGVja2FibGVUeXBl
ID0gKCAvXig/OmNoZWNrYm94fHJhZGlvKSQvaSApOworCit2YXIgcnRhZ05hbWUgPSAoIC88KFth
LXpdW15cL1wwPlx4MjBcdFxyXG5cZl0rKS9pICk7CisKK3ZhciByc2NyaXB0VHlwZSA9ICggL14k
fFwvKD86amF2YXxlY21hKXNjcmlwdC9pICk7CisKKworCisvLyBXZSBoYXZlIHRvIGNsb3NlIHRo
ZXNlIHRhZ3MgdG8gc3VwcG9ydCBYSFRNTCAoIzEzMjAwKQordmFyIHdyYXBNYXAgPSB7CisKKyAg
ICAvLyBTdXBwb3J0OiBJRSA8PTkgb25seQorICAgIG9wdGlvbjogWyAxLCAiPHNlbGVjdCBtdWx0
aXBsZT0nbXVsdGlwbGUnPiIsICI8L3NlbGVjdD4iIF0sCisKKyAgICAvLyBYSFRNTCBwYXJzZXJz
IGRvIG5vdCBtYWdpY2FsbHkgaW5zZXJ0IGVsZW1lbnRzIGluIHRoZQorICAgIC8vIHNhbWUgd2F5
IHRoYXQgdGFnIHNvdXAgcGFyc2VycyBkby4gU28gd2UgY2Fubm90IHNob3J0ZW4KKyAgICAvLyB0
aGlzIGJ5IG9taXR0aW5nIDx0Ym9keT4gb3Igb3RoZXIgcmVxdWlyZWQgZWxlbWVudHMuCisgICAg
dGhlYWQ6IFsgMSwgIjx0YWJsZT4iLCAiPC90YWJsZT4iIF0sCisgICAgY29sOiBbIDIsICI8dGFi
bGU+PGNvbGdyb3VwPiIsICI8L2NvbGdyb3VwPjwvdGFibGU+IiBdLAorICAgIHRyOiBbIDIsICI8
dGFibGU+PHRib2R5PiIsICI8L3Rib2R5PjwvdGFibGU+IiBdLAorICAgIHRkOiBbIDMsICI8dGFi
bGU+PHRib2R5Pjx0cj4iLCAiPC90cj48L3Rib2R5PjwvdGFibGU+IiBdLAorCisgICAgX2RlZmF1
bHQ6IFsgMCwgIiIsICIiIF0KK307CisKKy8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5Cit3cmFwTWFw
Lm9wdGdyb3VwID0gd3JhcE1hcC5vcHRpb247CisKK3dyYXBNYXAudGJvZHkgPSB3cmFwTWFwLnRm
b290ID0gd3JhcE1hcC5jb2xncm91cCA9IHdyYXBNYXAuY2FwdGlvbiA9IHdyYXBNYXAudGhlYWQ7
Cit3cmFwTWFwLnRoID0gd3JhcE1hcC50ZDsKKworCitmdW5jdGlvbiBnZXRBbGwoIGNvbnRleHQs
IHRhZyApIHsKKworICAgIC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHkKKyAgICAvLyBVc2Ug
dHlwZW9mIHRvIGF2b2lkIHplcm8tYXJndW1lbnQgbWV0aG9kIGludm9jYXRpb24gb24gaG9zdCBv
YmplY3RzICgjMTUxNTEpCisgICAgdmFyIHJldDsKKworICAgIGlmICggdHlwZW9mIGNvbnRleHQu
Z2V0RWxlbWVudHNCeVRhZ05hbWUgIT09ICJ1bmRlZmluZWQiICkgeworICAgICAgICByZXQgPSBj
b250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgfHwgIioiICk7CisKKyAgICB9IGVsc2Ug
aWYgKCB0eXBlb2YgY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsICE9PSAidW5kZWZpbmVkIiApIHsK
KyAgICAgICAgcmV0ID0gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCB0YWcgfHwgIioiICk7CisK
KyAgICB9IGVsc2UgeworICAgICAgICByZXQgPSBbXTsKKyAgICB9CisKKyAgICBpZiAoIHRhZyA9
PT0gdW5kZWZpbmVkIHx8IHRhZyAmJiBqUXVlcnkubm9kZU5hbWUoIGNvbnRleHQsIHRhZyApICkg
eworICAgICAgICByZXR1cm4galF1ZXJ5Lm1lcmdlKCBbIGNvbnRleHQgXSwgcmV0ICk7CisgICAg
fQorCisgICAgcmV0dXJuIHJldDsKK30KKworCisvLyBNYXJrIHNjcmlwdHMgYXMgaGF2aW5nIGFs
cmVhZHkgYmVlbiBldmFsdWF0ZWQKK2Z1bmN0aW9uIHNldEdsb2JhbEV2YWwoIGVsZW1zLCByZWZF
bGVtZW50cyApIHsKKyAgICB2YXIgaSA9IDAsCisgICAgICAgIGwgPSBlbGVtcy5sZW5ndGg7CisK
KyAgICBmb3IgKCA7IGkgPCBsOyBpKysgKSB7CisgICAgICAgIGRhdGFQcml2LnNldCgKKyAgICAg
ICAgICAgIGVsZW1zWyBpIF0sCisgICAgICAgICAgICAiZ2xvYmFsRXZhbCIsCisgICAgICAgICAg
ICAhcmVmRWxlbWVudHMgfHwgZGF0YVByaXYuZ2V0KCByZWZFbGVtZW50c1sgaSBdLCAiZ2xvYmFs
RXZhbCIgKQorICAgICAgICApOworICAgIH0KK30KKworCit2YXIgcmh0bWwgPSAvPHwmIz9cdys7
LzsKKworZnVuY3Rpb24gYnVpbGRGcmFnbWVudCggZWxlbXMsIGNvbnRleHQsIHNjcmlwdHMsIHNl
bGVjdGlvbiwgaWdub3JlZCApIHsKKyAgICB2YXIgZWxlbSwgdG1wLCB0YWcsIHdyYXAsIGNvbnRh
aW5zLCBqLAorICAgICAgICBmcmFnbWVudCA9IGNvbnRleHQuY3JlYXRlRG9jdW1lbnRGcmFnbWVu
dCgpLAorICAgICAgICBub2RlcyA9IFtdLAorICAgICAgICBpID0gMCwKKyAgICAgICAgbCA9IGVs
ZW1zLmxlbmd0aDsKKworICAgIGZvciAoIDsgaSA8IGw7IGkrKyApIHsKKyAgICAgICAgZWxlbSA9
IGVsZW1zWyBpIF07CisKKyAgICAgICAgaWYgKCBlbGVtIHx8IGVsZW0gPT09IDAgKSB7CisKKyAg
ICAgICAgICAgIC8vIEFkZCBub2RlcyBkaXJlY3RseQorICAgICAgICAgICAgaWYgKCBqUXVlcnku
dHlwZSggZWxlbSApID09PSAib2JqZWN0IiApIHsKKworICAgICAgICAgICAgICAgIC8vIFN1cHBv
cnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seQorICAgICAgICAgICAgICAg
IC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXQKKyAg
ICAgICAgICAgICAgICBqUXVlcnkubWVyZ2UoIG5vZGVzLCBlbGVtLm5vZGVUeXBlID8gWyBlbGVt
IF0gOiBlbGVtICk7CisKKyAgICAgICAgICAgIC8vIENvbnZlcnQgbm9uLWh0bWwgaW50byBhIHRl
eHQgbm9kZQorICAgICAgICAgICAgfSBlbHNlIGlmICggIXJodG1sLnRlc3QoIGVsZW0gKSApIHsK
KyAgICAgICAgICAgICAgICBub2Rlcy5wdXNoKCBjb250ZXh0LmNyZWF0ZVRleHROb2RlKCBlbGVt
ICkgKTsKKworICAgICAgICAgICAgLy8gQ29udmVydCBodG1sIGludG8gRE9NIG5vZGVzCisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRtcCA9IHRtcCB8fCBmcmFnbWVudC5h
cHBlbmRDaGlsZCggY29udGV4dC5jcmVhdGVFbGVtZW50KCAiZGl2IiApICk7CisKKyAgICAgICAg
ICAgICAgICAvLyBEZXNlcmlhbGl6ZSBhIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9uCisgICAgICAg
ICAgICAgICAgdGFnID0gKCBydGFnTmFtZS5leGVjKCBlbGVtICkgfHwgWyAiIiwgIiIgXSApWyAx
IF0udG9Mb3dlckNhc2UoKTsKKyAgICAgICAgICAgICAgICB3cmFwID0gd3JhcE1hcFsgdGFnIF0g
fHwgd3JhcE1hcC5fZGVmYXVsdDsKKyAgICAgICAgICAgICAgICB0bXAuaW5uZXJIVE1MID0gd3Jh
cFsgMSBdICsgalF1ZXJ5Lmh0bWxQcmVmaWx0ZXIoIGVsZW0gKSArIHdyYXBbIDIgXTsKKworICAg
ICAgICAgICAgICAgIC8vIERlc2NlbmQgdGhyb3VnaCB3cmFwcGVycyB0byB0aGUgcmlnaHQgY29u
dGVudAorICAgICAgICAgICAgICAgIGogPSB3cmFwWyAwIF07CisgICAgICAgICAgICAgICAgd2hp
bGUgKCBqLS0gKSB7CisgICAgICAgICAgICAgICAgICAgIHRtcCA9IHRtcC5sYXN0Q2hpbGQ7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogQW5kcm9pZCA8
PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5CisgICAgICAgICAgICAgICAgLy8gcHVzaC5hcHBs
eShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdAorICAgICAgICAgICAgICAg
IGpRdWVyeS5tZXJnZSggbm9kZXMsIHRtcC5jaGlsZE5vZGVzICk7CisKKyAgICAgICAgICAgICAg
ICAvLyBSZW1lbWJlciB0aGUgdG9wLWxldmVsIGNvbnRhaW5lcgorICAgICAgICAgICAgICAgIHRt
cCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7CisKKyAgICAgICAgICAgICAgICAvLyBFbnN1cmUgdGhl
IGNyZWF0ZWQgbm9kZXMgYXJlIG9ycGhhbmVkICgjMTIzOTIpCisgICAgICAgICAgICAgICAgdG1w
LnRleHRDb250ZW50ID0gIiI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICAvLyBSZW1vdmUgd3JhcHBlciBmcm9tIGZyYWdtZW50CisgICAgZnJhZ21lbnQudGV4dENvbnRl
bnQgPSAiIjsKKworICAgIGkgPSAwOworICAgIHdoaWxlICggKCBlbGVtID0gbm9kZXNbIGkrKyBd
ICkgKSB7CisKKyAgICAgICAgLy8gU2tpcCBlbGVtZW50cyBhbHJlYWR5IGluIHRoZSBjb250ZXh0
IGNvbGxlY3Rpb24gKHRyYWMtNDA4NykKKyAgICAgICAgaWYgKCBzZWxlY3Rpb24gJiYgalF1ZXJ5
LmluQXJyYXkoIGVsZW0sIHNlbGVjdGlvbiApID4gLTEgKSB7CisgICAgICAgICAgICBpZiAoIGln
bm9yZWQgKSB7CisgICAgICAgICAgICAgICAgaWdub3JlZC5wdXNoKCBlbGVtICk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnRh
aW5zID0galF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKTsKKworICAg
ICAgICAvLyBBcHBlbmQgdG8gZnJhZ21lbnQKKyAgICAgICAgdG1wID0gZ2V0QWxsKCBmcmFnbWVu
dC5hcHBlbmRDaGlsZCggZWxlbSApLCAic2NyaXB0IiApOworCisgICAgICAgIC8vIFByZXNlcnZl
IHNjcmlwdCBldmFsdWF0aW9uIGhpc3RvcnkKKyAgICAgICAgaWYgKCBjb250YWlucyApIHsKKyAg
ICAgICAgICAgIHNldEdsb2JhbEV2YWwoIHRtcCApOworICAgICAgICB9CisKKyAgICAgICAgLy8g
Q2FwdHVyZSBleGVjdXRhYmxlcworICAgICAgICBpZiAoIHNjcmlwdHMgKSB7CisgICAgICAgICAg
ICBqID0gMDsKKyAgICAgICAgICAgIHdoaWxlICggKCBlbGVtID0gdG1wWyBqKysgXSApICkgewor
ICAgICAgICAgICAgICAgIGlmICggcnNjcmlwdFR5cGUudGVzdCggZWxlbS50eXBlIHx8ICIiICkg
KSB7CisgICAgICAgICAgICAgICAgICAgIHNjcmlwdHMucHVzaCggZWxlbSApOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBm
cmFnbWVudDsKK30KKworCisoIGZ1bmN0aW9uKCkgeworICAgIHZhciBmcmFnbWVudCA9IGRvY3Vt
ZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSwKKyAgICAgICAgZGl2ID0gZnJhZ21lbnQuYXBw
ZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJkaXYiICkgKSwKKyAgICAgICAgaW5w
dXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiaW5wdXQiICk7CisKKyAgICAvLyBTdXBwb3J0
OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5CisgICAgLy8gQ2hlY2sgc3RhdGUgbG9zdCBpZiB0aGUg
bmFtZSBpcyBzZXQgKCMxMTIxNykKKyAgICAvLyBTdXBwb3J0OiBXaW5kb3dzIFdlYiBBcHBzIChX
V0EpCisgICAgLy8gYG5hbWVgIGFuZCBgdHlwZWAgbXVzdCB1c2UgLnNldEF0dHJpYnV0ZSBmb3Ig
V1dBICgjMTQ5MDEpCisgICAgaW5wdXQuc2V0QXR0cmlidXRlKCAidHlwZSIsICJyYWRpbyIgKTsK
KyAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoICJjaGVja2VkIiwgImNoZWNrZWQiICk7CisgICAgaW5w
dXQuc2V0QXR0cmlidXRlKCAibmFtZSIsICJ0IiApOworCisgICAgZGl2LmFwcGVuZENoaWxkKCBp
bnB1dCApOworCisgICAgLy8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMSBvbmx5CisgICAgLy8gT2xk
ZXIgV2ViS2l0IGRvZXNuJ3QgY2xvbmUgY2hlY2tlZCBzdGF0ZSBjb3JyZWN0bHkgaW4gZnJhZ21l
bnRzCisgICAgc3VwcG9ydC5jaGVja0Nsb25lID0gZGl2LmNsb25lTm9kZSggdHJ1ZSApLmNsb25l
Tm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5jaGVja2VkOworCisgICAgLy8gU3VwcG9ydDogSUUgPD0x
MSBvbmx5CisgICAgLy8gTWFrZSBzdXJlIHRleHRhcmVhIChhbmQgY2hlY2tib3gpIGRlZmF1bHRW
YWx1ZSBpcyBwcm9wZXJseSBjbG9uZWQKKyAgICBkaXYuaW5uZXJIVE1MID0gIjx0ZXh0YXJlYT54
PC90ZXh0YXJlYT4iOworICAgIHN1cHBvcnQubm9DbG9uZUNoZWNrZWQgPSAhIWRpdi5jbG9uZU5v
ZGUoIHRydWUgKS5sYXN0Q2hpbGQuZGVmYXVsdFZhbHVlOworfSApKCk7Cit2YXIgZG9jdW1lbnRF
bGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OworCisKKwordmFyCisgICAgcmtleUV2
ZW50ID0gL15rZXkvLAorICAgIHJtb3VzZUV2ZW50ID0gL14oPzptb3VzZXxwb2ludGVyfGNvbnRl
eHRtZW51fGRyYWd8ZHJvcCl8Y2xpY2svLAorICAgIHJ0eXBlbmFtZXNwYWNlID0gL14oW14uXSop
KD86XC4oLispfCkvOworCitmdW5jdGlvbiByZXR1cm5UcnVlKCkgeworICAgIHJldHVybiB0cnVl
OworfQorCitmdW5jdGlvbiByZXR1cm5GYWxzZSgpIHsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
Ky8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5CisvLyBTZWUgIzEzMzkzIGZvciBtb3JlIGluZm8KK2Z1
bmN0aW9uIHNhZmVBY3RpdmVFbGVtZW50KCkgeworICAgIHRyeSB7CisgICAgICAgIHJldHVybiBk
b2N1bWVudC5hY3RpdmVFbGVtZW50OworICAgIH0gY2F0Y2ggKCBlcnIgKSB7IH0KK30KKworZnVu
Y3Rpb24gb24oIGVsZW0sIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIG9uZSApIHsKKyAgICB2
YXIgb3JpZ0ZuLCB0eXBlOworCisgICAgLy8gVHlwZXMgY2FuIGJlIGEgbWFwIG9mIHR5cGVzL2hh
bmRsZXJzCisgICAgaWYgKCB0eXBlb2YgdHlwZXMgPT09ICJvYmplY3QiICkgeworCisgICAgICAg
IC8vICggdHlwZXMtT2JqZWN0LCBzZWxlY3RvciwgZGF0YSApCisgICAgICAgIGlmICggdHlwZW9m
IHNlbGVjdG9yICE9PSAic3RyaW5nIiApIHsKKworICAgICAgICAgICAgLy8gKCB0eXBlcy1PYmpl
Y3QsIGRhdGEgKQorICAgICAgICAgICAgZGF0YSA9IGRhdGEgfHwgc2VsZWN0b3I7CisgICAgICAg
ICAgICBzZWxlY3RvciA9IHVuZGVmaW5lZDsKKyAgICAgICAgfQorICAgICAgICBmb3IgKCB0eXBl
IGluIHR5cGVzICkgeworICAgICAgICAgICAgb24oIGVsZW0sIHR5cGUsIHNlbGVjdG9yLCBkYXRh
LCB0eXBlc1sgdHlwZSBdLCBvbmUgKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZWxlbTsK
KyAgICB9CisKKyAgICBpZiAoIGRhdGEgPT0gbnVsbCAmJiBmbiA9PSBudWxsICkgeworCisgICAg
ICAgIC8vICggdHlwZXMsIGZuICkKKyAgICAgICAgZm4gPSBzZWxlY3RvcjsKKyAgICAgICAgZGF0
YSA9IHNlbGVjdG9yID0gdW5kZWZpbmVkOworICAgIH0gZWxzZSBpZiAoIGZuID09IG51bGwgKSB7
CisgICAgICAgIGlmICggdHlwZW9mIHNlbGVjdG9yID09PSAic3RyaW5nIiApIHsKKworICAgICAg
ICAgICAgLy8gKCB0eXBlcywgc2VsZWN0b3IsIGZuICkKKyAgICAgICAgICAgIGZuID0gZGF0YTsK
KyAgICAgICAgICAgIGRhdGEgPSB1bmRlZmluZWQ7CisgICAgICAgIH0gZWxzZSB7CisKKyAgICAg
ICAgICAgIC8vICggdHlwZXMsIGRhdGEsIGZuICkKKyAgICAgICAgICAgIGZuID0gZGF0YTsKKyAg
ICAgICAgICAgIGRhdGEgPSBzZWxlY3RvcjsKKyAgICAgICAgICAgIHNlbGVjdG9yID0gdW5kZWZp
bmVkOworICAgICAgICB9CisgICAgfQorICAgIGlmICggZm4gPT09IGZhbHNlICkgeworICAgICAg
ICBmbiA9IHJldHVybkZhbHNlOworICAgIH0gZWxzZSBpZiAoICFmbiApIHsKKyAgICAgICAgcmV0
dXJuIGVsZW07CisgICAgfQorCisgICAgaWYgKCBvbmUgPT09IDEgKSB7CisgICAgICAgIG9yaWdG
biA9IGZuOworICAgICAgICBmbiA9IGZ1bmN0aW9uKCBldmVudCApIHsKKworICAgICAgICAgICAg
Ly8gQ2FuIHVzZSBhbiBlbXB0eSBzZXQsIHNpbmNlIGV2ZW50IGNvbnRhaW5zIHRoZSBpbmZvCisg
ICAgICAgICAgICBqUXVlcnkoKS5vZmYoIGV2ZW50ICk7CisgICAgICAgICAgICByZXR1cm4gb3Jp
Z0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKKyAgICAgICAgfTsKKworICAgICAgICAvLyBV
c2Ugc2FtZSBndWlkIHNvIGNhbGxlciBjYW4gcmVtb3ZlIHVzaW5nIG9yaWdGbgorICAgICAgICBm
bi5ndWlkID0gb3JpZ0ZuLmd1aWQgfHwgKCBvcmlnRm4uZ3VpZCA9IGpRdWVyeS5ndWlkKysgKTsK
KyAgICB9CisgICAgcmV0dXJuIGVsZW0uZWFjaCggZnVuY3Rpb24oKSB7CisgICAgICAgIGpRdWVy
eS5ldmVudC5hZGQoIHRoaXMsIHR5cGVzLCBmbiwgZGF0YSwgc2VsZWN0b3IgKTsKKyAgICB9ICk7
Cit9CisKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBldmVudHMgLS0gbm90
IHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuCisgKiBQcm9wcyB0byBEZWFuIEVkd2FyZHMn
IGFkZEV2ZW50IGxpYnJhcnkgZm9yIG1hbnkgb2YgdGhlIGlkZWFzLgorICovCitqUXVlcnkuZXZl
bnQgPSB7CisKKyAgICBnbG9iYWw6IHt9LAorCisgICAgYWRkOiBmdW5jdGlvbiggZWxlbSwgdHlw
ZXMsIGhhbmRsZXIsIGRhdGEsIHNlbGVjdG9yICkgeworCisgICAgICAgIHZhciBoYW5kbGVPYmpJ
biwgZXZlbnRIYW5kbGUsIHRtcCwKKyAgICAgICAgICAgIGV2ZW50cywgdCwgaGFuZGxlT2JqLAor
ICAgICAgICAgICAgc3BlY2lhbCwgaGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMsIG9yaWdUeXBl
LAorICAgICAgICAgICAgZWxlbURhdGEgPSBkYXRhUHJpdi5nZXQoIGVsZW0gKTsKKworICAgICAg
ICAvLyBEb24ndCBhdHRhY2ggZXZlbnRzIHRvIG5vRGF0YSBvciB0ZXh0L2NvbW1lbnQgbm9kZXMg
KGJ1dCBhbGxvdyBwbGFpbiBvYmplY3RzKQorICAgICAgICBpZiAoICFlbGVtRGF0YSApIHsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENhbGxlciBjYW4gcGFz
cyBpbiBhbiBvYmplY3Qgb2YgY3VzdG9tIGRhdGEgaW4gbGlldSBvZiB0aGUgaGFuZGxlcgorICAg
ICAgICBpZiAoIGhhbmRsZXIuaGFuZGxlciApIHsKKyAgICAgICAgICAgIGhhbmRsZU9iakluID0g
aGFuZGxlcjsKKyAgICAgICAgICAgIGhhbmRsZXIgPSBoYW5kbGVPYmpJbi5oYW5kbGVyOworICAg
ICAgICAgICAgc2VsZWN0b3IgPSBoYW5kbGVPYmpJbi5zZWxlY3RvcjsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIEVuc3VyZSB0aGF0IGludmFsaWQgc2VsZWN0b3JzIHRocm93IGV4Y2VwdGlvbnMg
YXQgYXR0YWNoIHRpbWUKKyAgICAgICAgLy8gRXZhbHVhdGUgYWdhaW5zdCBkb2N1bWVudEVsZW1l
bnQgaW4gY2FzZSBlbGVtIGlzIGEgbm9uLWVsZW1lbnQgbm9kZSAoZS5nLiwgZG9jdW1lbnQpCisg
ICAgICAgIGlmICggc2VsZWN0b3IgKSB7CisgICAgICAgICAgICBqUXVlcnkuZmluZC5tYXRjaGVz
U2VsZWN0b3IoIGRvY3VtZW50RWxlbWVudCwgc2VsZWN0b3IgKTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBoYW5kbGVyIGhhcyBhIHVuaXF1ZSBJRCwgdXNlZCB0
byBmaW5kL3JlbW92ZSBpdCBsYXRlcgorICAgICAgICBpZiAoICFoYW5kbGVyLmd1aWQgKSB7Cisg
ICAgICAgICAgICBoYW5kbGVyLmd1aWQgPSBqUXVlcnkuZ3VpZCsrOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gSW5pdCB0aGUgZWxlbWVudCdzIGV2ZW50IHN0cnVjdHVyZSBhbmQgbWFpbiBoYW5k
bGVyLCBpZiB0aGlzIGlzIHRoZSBmaXJzdAorICAgICAgICBpZiAoICEoIGV2ZW50cyA9IGVsZW1E
YXRhLmV2ZW50cyApICkgeworICAgICAgICAgICAgZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzID0g
e307CisgICAgICAgIH0KKyAgICAgICAgaWYgKCAhKCBldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhh
bmRsZSApICkgeworICAgICAgICAgICAgZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgPSBm
dW5jdGlvbiggZSApIHsKKworICAgICAgICAgICAgICAgIC8vIERpc2NhcmQgdGhlIHNlY29uZCBl
dmVudCBvZiBhIGpRdWVyeS5ldmVudC50cmlnZ2VyKCkgYW5kCisgICAgICAgICAgICAgICAgLy8g
d2hlbiBhbiBldmVudCBpcyBjYWxsZWQgYWZ0ZXIgYSBwYWdlIGhhcyB1bmxvYWRlZAorICAgICAg
ICAgICAgICAgIHJldHVybiB0eXBlb2YgalF1ZXJ5ICE9PSAidW5kZWZpbmVkIiAmJiBqUXVlcnku
ZXZlbnQudHJpZ2dlcmVkICE9PSBlLnR5cGUgPworICAgICAgICAgICAgICAgICAgICBqUXVlcnku
ZXZlbnQuZGlzcGF0Y2guYXBwbHkoIGVsZW0sIGFyZ3VtZW50cyApIDogdW5kZWZpbmVkOworICAg
ICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEhhbmRsZSBtdWx0aXBsZSBldmVu
dHMgc2VwYXJhdGVkIGJ5IGEgc3BhY2UKKyAgICAgICAgdHlwZXMgPSAoIHR5cGVzIHx8ICIiICku
bWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbICIiIF07CisgICAgICAgIHQgPSB0eXBlcy5sZW5n
dGg7CisgICAgICAgIHdoaWxlICggdC0tICkgeworICAgICAgICAgICAgdG1wID0gcnR5cGVuYW1l
c3BhY2UuZXhlYyggdHlwZXNbIHQgXSApIHx8IFtdOworICAgICAgICAgICAgdHlwZSA9IG9yaWdU
eXBlID0gdG1wWyAxIF07CisgICAgICAgICAgICBuYW1lc3BhY2VzID0gKCB0bXBbIDIgXSB8fCAi
IiApLnNwbGl0KCAiLiIgKS5zb3J0KCk7CisKKyAgICAgICAgICAgIC8vIFRoZXJlICptdXN0KiBi
ZSBhIHR5cGUsIG5vIGF0dGFjaGluZyBuYW1lc3BhY2Utb25seSBoYW5kbGVycworICAgICAgICAg
ICAgaWYgKCAhdHlwZSApIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLy8gSWYgZXZlbnQgY2hhbmdlcyBpdHMgdHlwZSwgdXNlIHRoZSBz
cGVjaWFsIGV2ZW50IGhhbmRsZXJzIGZvciB0aGUgY2hhbmdlZCB0eXBlCisgICAgICAgICAgICBz
cGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTsKKworICAgICAgICAg
ICAgLy8gSWYgc2VsZWN0b3IgZGVmaW5lZCwgZGV0ZXJtaW5lIHNwZWNpYWwgZXZlbnQgYXBpIHR5
cGUsIG90aGVyd2lzZSBnaXZlbiB0eXBlCisgICAgICAgICAgICB0eXBlID0gKCBzZWxlY3RvciA/
IHNwZWNpYWwuZGVsZWdhdGVUeXBlIDogc3BlY2lhbC5iaW5kVHlwZSApIHx8IHR5cGU7CisKKyAg
ICAgICAgICAgIC8vIFVwZGF0ZSBzcGVjaWFsIGJhc2VkIG9uIG5ld2x5IHJlc2V0IHR5cGUKKyAg
ICAgICAgICAgIHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9Owor
CisgICAgICAgICAgICAvLyBoYW5kbGVPYmogaXMgcGFzc2VkIHRvIGFsbCBldmVudCBoYW5kbGVy
cworICAgICAgICAgICAgaGFuZGxlT2JqID0galF1ZXJ5LmV4dGVuZCggeworICAgICAgICAgICAg
ICAgIHR5cGU6IHR5cGUsCisgICAgICAgICAgICAgICAgb3JpZ1R5cGU6IG9yaWdUeXBlLAorICAg
ICAgICAgICAgICAgIGRhdGE6IGRhdGEsCisgICAgICAgICAgICAgICAgaGFuZGxlcjogaGFuZGxl
ciwKKyAgICAgICAgICAgICAgICBndWlkOiBoYW5kbGVyLmd1aWQsCisgICAgICAgICAgICAgICAg
c2VsZWN0b3I6IHNlbGVjdG9yLAorICAgICAgICAgICAgICAgIG5lZWRzQ29udGV4dDogc2VsZWN0
b3IgJiYgalF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICksCisg
ICAgICAgICAgICAgICAgbmFtZXNwYWNlOiBuYW1lc3BhY2VzLmpvaW4oICIuIiApCisgICAgICAg
ICAgICB9LCBoYW5kbGVPYmpJbiApOworCisgICAgICAgICAgICAvLyBJbml0IHRoZSBldmVudCBo
YW5kbGVyIHF1ZXVlIGlmIHdlJ3JlIHRoZSBmaXJzdAorICAgICAgICAgICAgaWYgKCAhKCBoYW5k
bGVycyA9IGV2ZW50c1sgdHlwZSBdICkgKSB7CisgICAgICAgICAgICAgICAgaGFuZGxlcnMgPSBl
dmVudHNbIHR5cGUgXSA9IFtdOworICAgICAgICAgICAgICAgIGhhbmRsZXJzLmRlbGVnYXRlQ291
bnQgPSAwOworCisgICAgICAgICAgICAgICAgLy8gT25seSB1c2UgYWRkRXZlbnRMaXN0ZW5lciBp
ZiB0aGUgc3BlY2lhbCBldmVudHMgaGFuZGxlciByZXR1cm5zIGZhbHNlCisgICAgICAgICAgICAg
ICAgaWYgKCAhc3BlY2lhbC5zZXR1cCB8fAorICAgICAgICAgICAgICAgICAgICBzcGVjaWFsLnNl
dHVwLmNhbGwoIGVsZW0sIGRhdGEsIG5hbWVzcGFjZXMsIGV2ZW50SGFuZGxlICkgPT09IGZhbHNl
ICkgeworCisgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5hZGRFdmVudExpc3RlbmVyICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5hZGRFdmVudExpc3RlbmVyKCB0eXBlLCBl
dmVudEhhbmRsZSApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIHNwZWNpYWwuYWRkICkgeworICAgICAg
ICAgICAgICAgIHNwZWNpYWwuYWRkLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApOworCisgICAgICAg
ICAgICAgICAgaWYgKCAhaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCApIHsKKyAgICAgICAgICAgICAg
ICAgICAgaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCA9IGhhbmRsZXIuZ3VpZDsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEFkZCB0byB0aGUgZWxlbWVu
dCdzIGhhbmRsZXIgbGlzdCwgZGVsZWdhdGVzIGluIGZyb250CisgICAgICAgICAgICBpZiAoIHNl
bGVjdG9yICkgeworICAgICAgICAgICAgICAgIGhhbmRsZXJzLnNwbGljZSggaGFuZGxlcnMuZGVs
ZWdhdGVDb3VudCsrLCAwLCBoYW5kbGVPYmogKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgaGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIEtlZXAgdHJhY2sgb2Ygd2hpY2ggZXZlbnRzIGhhdmUgZXZlciBiZWVu
IHVzZWQsIGZvciBldmVudCBvcHRpbWl6YXRpb24KKyAgICAgICAgICAgIGpRdWVyeS5ldmVudC5n
bG9iYWxbIHR5cGUgXSA9IHRydWU7CisgICAgICAgIH0KKworICAgIH0sCisKKyAgICAvLyBEZXRh
Y2ggYW4gZXZlbnQgb3Igc2V0IG9mIGV2ZW50cyBmcm9tIGFuIGVsZW1lbnQKKyAgICByZW1vdmU6
IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgc2VsZWN0b3IsIG1hcHBlZFR5cGVzICkg
eworCisgICAgICAgIHZhciBqLCBvcmlnQ291bnQsIHRtcCwKKyAgICAgICAgICAgIGV2ZW50cywg
dCwgaGFuZGxlT2JqLAorICAgICAgICAgICAgc3BlY2lhbCwgaGFuZGxlcnMsIHR5cGUsIG5hbWVz
cGFjZXMsIG9yaWdUeXBlLAorICAgICAgICAgICAgZWxlbURhdGEgPSBkYXRhUHJpdi5oYXNEYXRh
KCBlbGVtICkgJiYgZGF0YVByaXYuZ2V0KCBlbGVtICk7CisKKyAgICAgICAgaWYgKCAhZWxlbURh
dGEgfHwgISggZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzICkgKSB7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBPbmNlIGZvciBlYWNoIHR5cGUubmFtZXNwYWNl
IGluIHR5cGVzOyB0eXBlIG1heSBiZSBvbWl0dGVkCisgICAgICAgIHR5cGVzID0gKCB0eXBlcyB8
fCAiIiApLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyAiIiBdOworICAgICAgICB0ID0gdHlw
ZXMubGVuZ3RoOworICAgICAgICB3aGlsZSAoIHQtLSApIHsKKyAgICAgICAgICAgIHRtcCA9IHJ0
eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzWyB0IF0gKSB8fCBbXTsKKyAgICAgICAgICAgIHR5cGUg
PSBvcmlnVHlwZSA9IHRtcFsgMSBdOworICAgICAgICAgICAgbmFtZXNwYWNlcyA9ICggdG1wWyAy
IF0gfHwgIiIgKS5zcGxpdCggIi4iICkuc29ydCgpOworCisgICAgICAgICAgICAvLyBVbmJpbmQg
YWxsIGV2ZW50cyAob24gdGhpcyBuYW1lc3BhY2UsIGlmIHByb3ZpZGVkKSBmb3IgdGhlIGVsZW1l
bnQKKyAgICAgICAgICAgIGlmICggIXR5cGUgKSB7CisgICAgICAgICAgICAgICAgZm9yICggdHlw
ZSBpbiBldmVudHMgKSB7CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5yZW1vdmUo
IGVsZW0sIHR5cGUgKyB0eXBlc1sgdCBdLCBoYW5kbGVyLCBzZWxlY3RvciwgdHJ1ZSApOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwg
e307CisgICAgICAgICAgICB0eXBlID0gKCBzZWxlY3RvciA/IHNwZWNpYWwuZGVsZWdhdGVUeXBl
IDogc3BlY2lhbC5iaW5kVHlwZSApIHx8IHR5cGU7CisgICAgICAgICAgICBoYW5kbGVycyA9IGV2
ZW50c1sgdHlwZSBdIHx8IFtdOworICAgICAgICAgICAgdG1wID0gdG1wWyAyIF0gJiYKKyAgICAg
ICAgICAgICAgICBuZXcgUmVnRXhwKCAiKF58XFwuKSIgKyBuYW1lc3BhY2VzLmpvaW4oICJcXC4o
PzouKlxcLnwpIiApICsgIihcXC58JCkiICk7CisKKyAgICAgICAgICAgIC8vIFJlbW92ZSBtYXRj
aGluZyBldmVudHMKKyAgICAgICAgICAgIG9yaWdDb3VudCA9IGogPSBoYW5kbGVycy5sZW5ndGg7
CisgICAgICAgICAgICB3aGlsZSAoIGotLSApIHsKKyAgICAgICAgICAgICAgICBoYW5kbGVPYmog
PSBoYW5kbGVyc1sgaiBdOworCisgICAgICAgICAgICAgICAgaWYgKCAoIG1hcHBlZFR5cGVzIHx8
IG9yaWdUeXBlID09PSBoYW5kbGVPYmoub3JpZ1R5cGUgKSAmJgorICAgICAgICAgICAgICAgICAg
ICAoICFoYW5kbGVyIHx8IGhhbmRsZXIuZ3VpZCA9PT0gaGFuZGxlT2JqLmd1aWQgKSAmJgorICAg
ICAgICAgICAgICAgICAgICAoICF0bXAgfHwgdG1wLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2Ug
KSApICYmCisgICAgICAgICAgICAgICAgICAgICggIXNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSBo
YW5kbGVPYmouc2VsZWN0b3IgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yID09
PSAiKioiICYmIGhhbmRsZU9iai5zZWxlY3RvciApICkgeworICAgICAgICAgICAgICAgICAgICBo
YW5kbGVycy5zcGxpY2UoIGosIDEgKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIGhhbmRs
ZU9iai5zZWxlY3RvciApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzLmRlbGVn
YXRlQ291bnQtLTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBp
ZiAoIHNwZWNpYWwucmVtb3ZlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lhbC5y
ZW1vdmUuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFJlbW92ZSBn
ZW5lcmljIGV2ZW50IGhhbmRsZXIgaWYgd2UgcmVtb3ZlZCBzb21ldGhpbmcgYW5kIG5vIG1vcmUg
aGFuZGxlcnMgZXhpc3QKKyAgICAgICAgICAgIC8vIChhdm9pZHMgcG90ZW50aWFsIGZvciBlbmRs
ZXNzIHJlY3Vyc2lvbiBkdXJpbmcgcmVtb3ZhbCBvZiBzcGVjaWFsIGV2ZW50IGhhbmRsZXJzKQor
ICAgICAgICAgICAgaWYgKCBvcmlnQ291bnQgJiYgIWhhbmRsZXJzLmxlbmd0aCApIHsKKyAgICAg
ICAgICAgICAgICBpZiAoICFzcGVjaWFsLnRlYXJkb3duIHx8CisgICAgICAgICAgICAgICAgICAg
IHNwZWNpYWwudGVhcmRvd24uY2FsbCggZWxlbSwgbmFtZXNwYWNlcywgZWxlbURhdGEuaGFuZGxl
ICkgPT09IGZhbHNlICkgeworCisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5yZW1vdmVFdmVu
dCggZWxlbSwgdHlwZSwgZWxlbURhdGEuaGFuZGxlICk7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgZGVsZXRlIGV2ZW50c1sgdHlwZSBdOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgLy8gUmVtb3ZlIGRhdGEgYW5kIHRoZSBleHBhbmRvIGlmIGl0J3Mg
bm8gbG9uZ2VyIHVzZWQKKyAgICAgICAgaWYgKCBqUXVlcnkuaXNFbXB0eU9iamVjdCggZXZlbnRz
ICkgKSB7CisgICAgICAgICAgICBkYXRhUHJpdi5yZW1vdmUoIGVsZW0sICJoYW5kbGUgZXZlbnRz
IiApOworICAgICAgICB9CisgICAgfSwKKworICAgIGRpc3BhdGNoOiBmdW5jdGlvbiggbmF0aXZl
RXZlbnQgKSB7CisKKyAgICAgICAgLy8gTWFrZSBhIHdyaXRhYmxlIGpRdWVyeS5FdmVudCBmcm9t
IHRoZSBuYXRpdmUgZXZlbnQgb2JqZWN0CisgICAgICAgIHZhciBldmVudCA9IGpRdWVyeS5ldmVu
dC5maXgoIG5hdGl2ZUV2ZW50ICk7CisKKyAgICAgICAgdmFyIGksIGosIHJldCwgbWF0Y2hlZCwg
aGFuZGxlT2JqLCBoYW5kbGVyUXVldWUsCisgICAgICAgICAgICBhcmdzID0gbmV3IEFycmF5KCBh
cmd1bWVudHMubGVuZ3RoICksCisgICAgICAgICAgICBoYW5kbGVycyA9ICggZGF0YVByaXYuZ2V0
KCB0aGlzLCAiZXZlbnRzIiApIHx8IHt9IClbIGV2ZW50LnR5cGUgXSB8fCBbXSwKKyAgICAgICAg
ICAgIHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZXZlbnQudHlwZSBdIHx8IHt9Owor
CisgICAgICAgIC8vIFVzZSB0aGUgZml4LWVkIGpRdWVyeS5FdmVudCByYXRoZXIgdGhhbiB0aGUg
KHJlYWQtb25seSkgbmF0aXZlIGV2ZW50CisgICAgICAgIGFyZ3NbIDAgXSA9IGV2ZW50OworCisg
ICAgICAgIGZvciAoIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrICkgeworICAgICAg
ICAgICAgYXJnc1sgaSBdID0gYXJndW1lbnRzWyBpIF07CisgICAgICAgIH0KKworICAgICAgICBl
dmVudC5kZWxlZ2F0ZVRhcmdldCA9IHRoaXM7CisKKyAgICAgICAgLy8gQ2FsbCB0aGUgcHJlRGlz
cGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlLCBhbmQgbGV0IGl0IGJhaWwgaWYgZGVzaXJl
ZAorICAgICAgICBpZiAoIHNwZWNpYWwucHJlRGlzcGF0Y2ggJiYgc3BlY2lhbC5wcmVEaXNwYXRj
aC5jYWxsKCB0aGlzLCBldmVudCApID09PSBmYWxzZSApIHsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIERldGVybWluZSBoYW5kbGVycworICAgICAgICBoYW5k
bGVyUXVldWUgPSBqUXVlcnkuZXZlbnQuaGFuZGxlcnMuY2FsbCggdGhpcywgZXZlbnQsIGhhbmRs
ZXJzICk7CisKKyAgICAgICAgLy8gUnVuIGRlbGVnYXRlcyBmaXJzdDsgdGhleSBtYXkgd2FudCB0
byBzdG9wIHByb3BhZ2F0aW9uIGJlbmVhdGggdXMKKyAgICAgICAgaSA9IDA7CisgICAgICAgIHdo
aWxlICggKCBtYXRjaGVkID0gaGFuZGxlclF1ZXVlWyBpKysgXSApICYmICFldmVudC5pc1Byb3Bh
Z2F0aW9uU3RvcHBlZCgpICkgeworICAgICAgICAgICAgZXZlbnQuY3VycmVudFRhcmdldCA9IG1h
dGNoZWQuZWxlbTsKKworICAgICAgICAgICAgaiA9IDA7CisgICAgICAgICAgICB3aGlsZSAoICgg
aGFuZGxlT2JqID0gbWF0Y2hlZC5oYW5kbGVyc1sgaisrIF0gKSAmJgorICAgICAgICAgICAgICAg
ICFldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpICkgeworCisgICAgICAgICAg
ICAgICAgLy8gVHJpZ2dlcmVkIGV2ZW50IG11c3QgZWl0aGVyIDEpIGhhdmUgbm8gbmFtZXNwYWNl
LCBvciAyKSBoYXZlIG5hbWVzcGFjZShzKQorICAgICAgICAgICAgICAgIC8vIGEgc3Vic2V0IG9y
IGVxdWFsIHRvIHRob3NlIGluIHRoZSBib3VuZCBldmVudCAoYm90aCBjYW4gaGF2ZSBubyBuYW1l
c3BhY2UpLgorICAgICAgICAgICAgICAgIGlmICggIWV2ZW50LnJuYW1lc3BhY2UgfHwgZXZlbnQu
cm5hbWVzcGFjZS50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSB7CisKKyAgICAgICAgICAg
ICAgICAgICAgZXZlbnQuaGFuZGxlT2JqID0gaGFuZGxlT2JqOworICAgICAgICAgICAgICAgICAg
ICBldmVudC5kYXRhID0gaGFuZGxlT2JqLmRhdGE7CisKKyAgICAgICAgICAgICAgICAgICAgcmV0
ID0gKCAoIGpRdWVyeS5ldmVudC5zcGVjaWFsWyBoYW5kbGVPYmoub3JpZ1R5cGUgXSB8fCB7fSAp
LmhhbmRsZSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT2JqLmhhbmRsZXIgKS5h
cHBseSggbWF0Y2hlZC5lbGVtLCBhcmdzICk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBy
ZXQgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKCBldmVu
dC5yZXN1bHQgPSByZXQgKSA9PT0gZmFsc2UgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
dmVudC5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIC8vIENhbGwgdGhlIHBvc3REaXNwYXRjaCBob29rIGZvciB0aGUgbWFw
cGVkIHR5cGUKKyAgICAgICAgaWYgKCBzcGVjaWFsLnBvc3REaXNwYXRjaCApIHsKKyAgICAgICAg
ICAgIHNwZWNpYWwucG9zdERpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICk7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gZXZlbnQucmVzdWx0OworICAgIH0sCisKKyAgICBoYW5kbGVyczog
ZnVuY3Rpb24oIGV2ZW50LCBoYW5kbGVycyApIHsKKyAgICAgICAgdmFyIGksIGhhbmRsZU9iaiwg
c2VsLCBtYXRjaGVkSGFuZGxlcnMsIG1hdGNoZWRTZWxlY3RvcnMsCisgICAgICAgICAgICBoYW5k
bGVyUXVldWUgPSBbXSwKKyAgICAgICAgICAgIGRlbGVnYXRlQ291bnQgPSBoYW5kbGVycy5kZWxl
Z2F0ZUNvdW50LAorICAgICAgICAgICAgY3VyID0gZXZlbnQudGFyZ2V0OworCisgICAgICAgIC8v
IEZpbmQgZGVsZWdhdGUgaGFuZGxlcnMKKyAgICAgICAgaWYgKCBkZWxlZ2F0ZUNvdW50ICYmCisK
KyAgICAgICAgICAgIC8vIFN1cHBvcnQ6IElFIDw9OQorICAgICAgICAgICAgLy8gQmxhY2staG9s
ZSBTVkcgPHVzZT4gaW5zdGFuY2UgdHJlZXMgKHRyYWMtMTMxODApCisgICAgICAgICAgICBjdXIu
bm9kZVR5cGUgJiYKKworICAgICAgICAgICAgLy8gU3VwcG9ydDogRmlyZWZveCA8PTQyCisgICAg
ICAgICAgICAvLyBTdXBwcmVzcyBzcGVjLXZpb2xhdGluZyBjbGlja3MgaW5kaWNhdGluZyBhIG5v
bi1wcmltYXJ5IHBvaW50ZXIgYnV0dG9uICh0cmFjLTM4NjEpCisgICAgICAgICAgICAvLyBodHRw
czovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNldmVudC10eXBlLWNsaWNrCisg
ICAgICAgICAgICAvLyBTdXBwb3J0OiBJRSAxMSBvbmx5CisgICAgICAgICAgICAvLyAuLi5idXQg
bm90IGFycm93IGtleSAiY2xpY2tzIiBvZiByYWRpbyBpbnB1dHMsIHdoaWNoIGNhbiBoYXZlIGBi
dXR0b25gIC0xIChnaC0yMzQzKQorICAgICAgICAgICAgISggZXZlbnQudHlwZSA9PT0gImNsaWNr
IiAmJiBldmVudC5idXR0b24gPj0gMSApICkgeworCisgICAgICAgICAgICBmb3IgKCA7IGN1ciAh
PT0gdGhpczsgY3VyID0gY3VyLnBhcmVudE5vZGUgfHwgdGhpcyApIHsKKworICAgICAgICAgICAg
ICAgIC8vIERvbid0IGNoZWNrIG5vbi1lbGVtZW50cyAoIzEzMjA4KQorICAgICAgICAgICAgICAg
IC8vIERvbid0IHByb2Nlc3MgY2xpY2tzIG9uIGRpc2FibGVkIGVsZW1lbnRzICgjNjkxMSwgIzgx
NjUsICMxMTM4MiwgIzExNzY0KQorICAgICAgICAgICAgICAgIGlmICggY3VyLm5vZGVUeXBlID09
PSAxICYmICEoIGV2ZW50LnR5cGUgPT09ICJjbGljayIgJiYgY3VyLmRpc2FibGVkID09PSB0cnVl
ICkgKSB7CisgICAgICAgICAgICAgICAgICAgIG1hdGNoZWRIYW5kbGVycyA9IFtdOworICAgICAg
ICAgICAgICAgICAgICBtYXRjaGVkU2VsZWN0b3JzID0ge307CisgICAgICAgICAgICAgICAgICAg
IGZvciAoIGkgPSAwOyBpIDwgZGVsZWdhdGVDb3VudDsgaSsrICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgaGFuZGxlT2JqID0gaGFuZGxlcnNbIGkgXTsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gRG9uJ3QgY29uZmxpY3Qgd2l0aCBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMg
KCMxMzIwMykKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbCA9IGhhbmRsZU9iai5zZWxlY3Rv
ciArICIgIjsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaGVkU2VsZWN0b3Jz
WyBzZWwgXSA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1h
dGNoZWRTZWxlY3RvcnNbIHNlbCBdID0gaGFuZGxlT2JqLm5lZWRzQ29udGV4dCA/CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSggc2VsLCB0aGlzICkuaW5kZXgoIGN1ciAp
ID4gLTEgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZmluZCggc2Vs
LCB0aGlzLCBudWxsLCBbIGN1ciBdICkubGVuZ3RoOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkSGFuZGxlcnMucHVzaCggaGFu
ZGxlT2JqICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaGVkSGFuZGxlcnMubGVuZ3RoICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlclF1ZXVlLnB1c2goIHsgZWxlbTogY3VyLCBo
YW5kbGVyczogbWF0Y2hlZEhhbmRsZXJzIH0gKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEFk
ZCB0aGUgcmVtYWluaW5nIChkaXJlY3RseS1ib3VuZCkgaGFuZGxlcnMKKyAgICAgICAgY3VyID0g
dGhpczsKKyAgICAgICAgaWYgKCBkZWxlZ2F0ZUNvdW50IDwgaGFuZGxlcnMubGVuZ3RoICkgewor
ICAgICAgICAgICAgaGFuZGxlclF1ZXVlLnB1c2goIHsgZWxlbTogY3VyLCBoYW5kbGVyczogaGFu
ZGxlcnMuc2xpY2UoIGRlbGVnYXRlQ291bnQgKSB9ICk7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gaGFuZGxlclF1ZXVlOworICAgIH0sCisKKyAgICBhZGRQcm9wOiBmdW5jdGlvbiggbmFt
ZSwgaG9vayApIHsKKyAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KCBqUXVlcnkuRXZlbnQu
cHJvdG90eXBlLCBuYW1lLCB7CisgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAg
ICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAorCisgICAgICAgICAgICBnZXQ6IGpRdWVyeS5pc0Z1
bmN0aW9uKCBob29rICkgPworICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoIHRoaXMub3JpZ2luYWxFdmVudCApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gaG9vayggdGhpcy5vcmlnaW5hbEV2ZW50ICk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IDoKKyAgICAgICAgICAgICAgICBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGlzLm9yaWdpbmFsRXZlbnQgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxFdmVudFsgbmFt
ZSBdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSwKKworICAgICAg
ICAgICAgc2V0OiBmdW5jdGlvbiggdmFsdWUgKSB7CisgICAgICAgICAgICAgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KCB0aGlzLCBuYW1lLCB7CisgICAgICAgICAgICAgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKKyAgICAg
ICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCisgICAgICAgICAgICAgICAgICAgIHZhbHVl
OiB2YWx1ZQorICAgICAgICAgICAgICAgIH0gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSAp
OworICAgIH0sCisKKyAgICBmaXg6IGZ1bmN0aW9uKCBvcmlnaW5hbEV2ZW50ICkgeworICAgICAg
ICByZXR1cm4gb3JpZ2luYWxFdmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/CisgICAgICAgICAgICBv
cmlnaW5hbEV2ZW50IDoKKyAgICAgICAgICAgIG5ldyBqUXVlcnkuRXZlbnQoIG9yaWdpbmFsRXZl
bnQgKTsKKyAgICB9LAorCisgICAgc3BlY2lhbDogeworICAgICAgICBsb2FkOiB7CisKKyAgICAg
ICAgICAgIC8vIFByZXZlbnQgdHJpZ2dlcmVkIGltYWdlLmxvYWQgZXZlbnRzIGZyb20gYnViYmxp
bmcgdG8gd2luZG93LmxvYWQKKyAgICAgICAgICAgIG5vQnViYmxlOiB0cnVlCisgICAgICAgIH0s
CisgICAgICAgIGZvY3VzOiB7CisKKyAgICAgICAgICAgIC8vIEZpcmUgbmF0aXZlIGV2ZW50IGlm
IHBvc3NpYmxlIHNvIGJsdXIvZm9jdXMgc2VxdWVuY2UgaXMgY29ycmVjdAorICAgICAgICAgICAg
dHJpZ2dlcjogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgaWYgKCB0aGlzICE9PSBzYWZl
QWN0aXZlRWxlbWVudCgpICYmIHRoaXMuZm9jdXMgKSB7CisgICAgICAgICAgICAgICAgICAgIHRo
aXMuZm9jdXMoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBkZWxlZ2F0ZVR5cGU6ICJmb2N1
c2luIgorICAgICAgICB9LAorICAgICAgICBibHVyOiB7CisgICAgICAgICAgICB0cmlnZ2VyOiBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBpZiAoIHRoaXMgPT09IHNhZmVBY3RpdmVFbGVt
ZW50KCkgJiYgdGhpcy5ibHVyICkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLmJsdXIoKTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICBkZWxlZ2F0ZVR5cGU6ICJmb2N1c291dCIKKyAgICAg
ICAgfSwKKyAgICAgICAgY2xpY2s6IHsKKworICAgICAgICAgICAgLy8gRm9yIGNoZWNrYm94LCBm
aXJlIG5hdGl2ZSBldmVudCBzbyBjaGVja2VkIHN0YXRlIHdpbGwgYmUgcmlnaHQKKyAgICAgICAg
ICAgIHRyaWdnZXI6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGlmICggdGhpcy50eXBl
ID09PSAiY2hlY2tib3giICYmIHRoaXMuY2xpY2sgJiYgalF1ZXJ5Lm5vZGVOYW1lKCB0aGlzLCAi
aW5wdXQiICkgKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xpY2soKTsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0sCisKKyAgICAgICAgICAgIC8vIEZvciBjcm9zcy1icm93c2VyIGNvbnNpc3RlbmN5LCBkb24n
dCBmaXJlIG5hdGl2ZSAuY2xpY2soKSBvbiBsaW5rcworICAgICAgICAgICAgX2RlZmF1bHQ6IGZ1
bmN0aW9uKCBldmVudCApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5Lm5vZGVOYW1l
KCBldmVudC50YXJnZXQsICJhIiApOworICAgICAgICAgICAgfQorICAgICAgICB9LAorCisgICAg
ICAgIGJlZm9yZXVubG9hZDogeworICAgICAgICAgICAgcG9zdERpc3BhdGNoOiBmdW5jdGlvbigg
ZXZlbnQgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBGaXJlZm94IDIwKworICAg
ICAgICAgICAgICAgIC8vIEZpcmVmb3ggZG9lc24ndCBhbGVydCBpZiB0aGUgcmV0dXJuVmFsdWUg
ZmllbGQgaXMgbm90IHNldC4KKyAgICAgICAgICAgICAgICBpZiAoIGV2ZW50LnJlc3VsdCAhPT0g
dW5kZWZpbmVkICYmIGV2ZW50Lm9yaWdpbmFsRXZlbnQgKSB7CisgICAgICAgICAgICAgICAgICAg
IGV2ZW50Lm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWUgPSBldmVudC5yZXN1bHQ7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfTsKKworalF1ZXJ5
LnJlbW92ZUV2ZW50ID0gZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGhhbmRsZSApIHsKKworICAgIC8v
IFRoaXMgImlmIiBpcyBuZWVkZWQgZm9yIHBsYWluIG9iamVjdHMKKyAgICBpZiAoIGVsZW0ucmVt
b3ZlRXZlbnRMaXN0ZW5lciApIHsKKyAgICAgICAgZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKCB0
eXBlLCBoYW5kbGUgKTsKKyAgICB9Cit9OworCitqUXVlcnkuRXZlbnQgPSBmdW5jdGlvbiggc3Jj
LCBwcm9wcyApIHsKKworICAgIC8vIEFsbG93IGluc3RhbnRpYXRpb24gd2l0aG91dCB0aGUgJ25l
dycga2V5d29yZAorICAgIGlmICggISggdGhpcyBpbnN0YW5jZW9mIGpRdWVyeS5FdmVudCApICkg
eworICAgICAgICByZXR1cm4gbmV3IGpRdWVyeS5FdmVudCggc3JjLCBwcm9wcyApOworICAgIH0K
KworICAgIC8vIEV2ZW50IG9iamVjdAorICAgIGlmICggc3JjICYmIHNyYy50eXBlICkgeworICAg
ICAgICB0aGlzLm9yaWdpbmFsRXZlbnQgPSBzcmM7CisgICAgICAgIHRoaXMudHlwZSA9IHNyYy50
eXBlOworCisgICAgICAgIC8vIEV2ZW50cyBidWJibGluZyB1cCB0aGUgZG9jdW1lbnQgbWF5IGhh
dmUgYmVlbiBtYXJrZWQgYXMgcHJldmVudGVkCisgICAgICAgIC8vIGJ5IGEgaGFuZGxlciBsb3dl
ciBkb3duIHRoZSB0cmVlOyByZWZsZWN0IHRoZSBjb3JyZWN0IHZhbHVlLgorICAgICAgICB0aGlz
LmlzRGVmYXVsdFByZXZlbnRlZCA9IHNyYy5kZWZhdWx0UHJldmVudGVkIHx8CisgICAgICAgICAg
ICAgICAgc3JjLmRlZmF1bHRQcmV2ZW50ZWQgPT09IHVuZGVmaW5lZCAmJgorCisgICAgICAgICAg
ICAgICAgLy8gU3VwcG9ydDogQW5kcm9pZCA8PTIuMyBvbmx5CisgICAgICAgICAgICAgICAgc3Jj
LnJldHVyblZhbHVlID09PSBmYWxzZSA/CisgICAgICAgICAgICByZXR1cm5UcnVlIDoKKyAgICAg
ICAgICAgIHJldHVybkZhbHNlOworCisgICAgICAgIC8vIENyZWF0ZSB0YXJnZXQgcHJvcGVydGll
cworICAgICAgICAvLyBTdXBwb3J0OiBTYWZhcmkgPD02IC0gNyBvbmx5CisgICAgICAgIC8vIFRh
cmdldCBzaG91bGQgbm90IGJlIGEgdGV4dCBub2RlICgjNTA0LCAjMTMxNDMpCisgICAgICAgIHRo
aXMudGFyZ2V0ID0gKCBzcmMudGFyZ2V0ICYmIHNyYy50YXJnZXQubm9kZVR5cGUgPT09IDMgKSA/
CisgICAgICAgICAgICBzcmMudGFyZ2V0LnBhcmVudE5vZGUgOgorICAgICAgICAgICAgc3JjLnRh
cmdldDsKKworICAgICAgICB0aGlzLmN1cnJlbnRUYXJnZXQgPSBzcmMuY3VycmVudFRhcmdldDsK
KyAgICAgICAgdGhpcy5yZWxhdGVkVGFyZ2V0ID0gc3JjLnJlbGF0ZWRUYXJnZXQ7CisKKyAgICAv
LyBFdmVudCB0eXBlCisgICAgfSBlbHNlIHsKKyAgICAgICAgdGhpcy50eXBlID0gc3JjOworICAg
IH0KKworICAgIC8vIFB1dCBleHBsaWNpdGx5IHByb3ZpZGVkIHByb3BlcnRpZXMgb250byB0aGUg
ZXZlbnQgb2JqZWN0CisgICAgaWYgKCBwcm9wcyApIHsKKyAgICAgICAgalF1ZXJ5LmV4dGVuZCgg
dGhpcywgcHJvcHMgKTsKKyAgICB9CisKKyAgICAvLyBDcmVhdGUgYSB0aW1lc3RhbXAgaWYgaW5j
b21pbmcgZXZlbnQgZG9lc24ndCBoYXZlIG9uZQorICAgIHRoaXMudGltZVN0YW1wID0gc3JjICYm
IHNyYy50aW1lU3RhbXAgfHwgalF1ZXJ5Lm5vdygpOworCisgICAgLy8gTWFyayBpdCBhcyBmaXhl
ZAorICAgIHRoaXNbIGpRdWVyeS5leHBhbmRvIF0gPSB0cnVlOworfTsKKworLy8galF1ZXJ5LkV2
ZW50IGlzIGJhc2VkIG9uIERPTTMgRXZlbnRzIGFzIHNwZWNpZmllZCBieSB0aGUgRUNNQVNjcmlw
dCBMYW5ndWFnZSBCaW5kaW5nCisvLyBodHRwczovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00t
TGV2ZWwtMy1FdmVudHMtMjAwMzAzMzEvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCitqUXVlcnku
RXZlbnQucHJvdG90eXBlID0geworICAgIGNvbnN0cnVjdG9yOiBqUXVlcnkuRXZlbnQsCisgICAg
aXNEZWZhdWx0UHJldmVudGVkOiByZXR1cm5GYWxzZSwKKyAgICBpc1Byb3BhZ2F0aW9uU3RvcHBl
ZDogcmV0dXJuRmFsc2UsCisgICAgaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVy
bkZhbHNlLAorICAgIGlzU2ltdWxhdGVkOiBmYWxzZSwKKworICAgIHByZXZlbnREZWZhdWx0OiBm
dW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7CisKKyAgICAg
ICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSByZXR1cm5UcnVlOworCisgICAgICAgIGlmICgg
ZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHsKKyAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQo
KTsKKyAgICAgICAgfQorICAgIH0sCisgICAgc3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHsK
KyAgICAgICAgdmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7CisKKyAgICAgICAgdGhpcy5pc1By
b3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7CisKKyAgICAgICAgaWYgKCBlICYmICF0aGlz
LmlzU2ltdWxhdGVkICkgeworICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAg
ICAgfQorICAgIH0sCisgICAgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHsK
KyAgICAgICAgdmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7CisKKyAgICAgICAgdGhpcy5pc0lt
bWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7CisKKyAgICAgICAgaWYgKCBl
ICYmICF0aGlzLmlzU2ltdWxhdGVkICkgeworICAgICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJv
cGFnYXRpb24oKTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuc3RvcFByb3BhZ2F0aW9uKCk7
CisgICAgfQorfTsKKworLy8gSW5jbHVkZXMgYWxsIGNvbW1vbiBldmVudCBwcm9wcyBpbmNsdWRp
bmcgS2V5RXZlbnQgYW5kIE1vdXNlRXZlbnQgc3BlY2lmaWMgcHJvcHMKK2pRdWVyeS5lYWNoKCB7
CisgICAgYWx0S2V5OiB0cnVlLAorICAgIGJ1YmJsZXM6IHRydWUsCisgICAgY2FuY2VsYWJsZTog
dHJ1ZSwKKyAgICBjaGFuZ2VkVG91Y2hlczogdHJ1ZSwKKyAgICBjdHJsS2V5OiB0cnVlLAorICAg
IGRldGFpbDogdHJ1ZSwKKyAgICBldmVudFBoYXNlOiB0cnVlLAorICAgIG1ldGFLZXk6IHRydWUs
CisgICAgcGFnZVg6IHRydWUsCisgICAgcGFnZVk6IHRydWUsCisgICAgc2hpZnRLZXk6IHRydWUs
CisgICAgdmlldzogdHJ1ZSwKKyAgICAiY2hhciI6IHRydWUsCisgICAgY2hhckNvZGU6IHRydWUs
CisgICAga2V5OiB0cnVlLAorICAgIGtleUNvZGU6IHRydWUsCisgICAgYnV0dG9uOiB0cnVlLAor
ICAgIGJ1dHRvbnM6IHRydWUsCisgICAgY2xpZW50WDogdHJ1ZSwKKyAgICBjbGllbnRZOiB0cnVl
LAorICAgIG9mZnNldFg6IHRydWUsCisgICAgb2Zmc2V0WTogdHJ1ZSwKKyAgICBwb2ludGVySWQ6
IHRydWUsCisgICAgcG9pbnRlclR5cGU6IHRydWUsCisgICAgc2NyZWVuWDogdHJ1ZSwKKyAgICBz
Y3JlZW5ZOiB0cnVlLAorICAgIHRhcmdldFRvdWNoZXM6IHRydWUsCisgICAgdG9FbGVtZW50OiB0
cnVlLAorICAgIHRvdWNoZXM6IHRydWUsCisKKyAgICB3aGljaDogZnVuY3Rpb24oIGV2ZW50ICkg
eworICAgICAgICB2YXIgYnV0dG9uID0gZXZlbnQuYnV0dG9uOworCisgICAgICAgIC8vIEFkZCB3
aGljaCBmb3Iga2V5IGV2ZW50cworICAgICAgICBpZiAoIGV2ZW50LndoaWNoID09IG51bGwgJiYg
cmtleUV2ZW50LnRlc3QoIGV2ZW50LnR5cGUgKSApIHsKKyAgICAgICAgICAgIHJldHVybiBldmVu
dC5jaGFyQ29kZSAhPSBudWxsID8gZXZlbnQuY2hhckNvZGUgOiBldmVudC5rZXlDb2RlOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gQWRkIHdoaWNoIGZvciBjbGljazogMSA9PT0gbGVmdDsgMiA9
PT0gbWlkZGxlOyAzID09PSByaWdodAorICAgICAgICBpZiAoICFldmVudC53aGljaCAmJiBidXR0
b24gIT09IHVuZGVmaW5lZCAmJiBybW91c2VFdmVudC50ZXN0KCBldmVudC50eXBlICkgKSB7Cisg
ICAgICAgICAgICBpZiAoIGJ1dHRvbiAmIDEgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggYnV0dG9uICYgMiApIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCBi
dXR0b24gJiA0ICkgeworICAgICAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBldmVu
dC53aGljaDsKKyAgICB9Cit9LCBqUXVlcnkuZXZlbnQuYWRkUHJvcCApOworCisvLyBDcmVhdGUg
bW91c2VlbnRlci9sZWF2ZSBldmVudHMgdXNpbmcgbW91c2VvdmVyL291dCBhbmQgZXZlbnQtdGlt
ZSBjaGVja3MKKy8vIHNvIHRoYXQgZXZlbnQgZGVsZWdhdGlvbiB3b3JrcyBpbiBqUXVlcnkuCisv
LyBEbyB0aGUgc2FtZSBmb3IgcG9pbnRlcmVudGVyL3BvaW50ZXJsZWF2ZSBhbmQgcG9pbnRlcm92
ZXIvcG9pbnRlcm91dAorLy8KKy8vIFN1cHBvcnQ6IFNhZmFyaSA3IG9ubHkKKy8vIFNhZmFyaSBz
ZW5kcyBtb3VzZWVudGVyIHRvbyBvZnRlbjsgc2VlOgorLy8gaHR0cHM6Ly9idWdzLmNocm9taXVt
Lm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDcwMjU4CisvLyBmb3IgdGhlIGRlc2Ny
aXB0aW9uIG9mIHRoZSBidWcgKGl0IGV4aXN0ZWQgaW4gb2xkZXIgQ2hyb21lIHZlcnNpb25zIGFz
IHdlbGwpLgoralF1ZXJ5LmVhY2goIHsKKyAgICBtb3VzZWVudGVyOiAibW91c2VvdmVyIiwKKyAg
ICBtb3VzZWxlYXZlOiAibW91c2VvdXQiLAorICAgIHBvaW50ZXJlbnRlcjogInBvaW50ZXJvdmVy
IiwKKyAgICBwb2ludGVybGVhdmU6ICJwb2ludGVyb3V0IgorfSwgZnVuY3Rpb24oIG9yaWcsIGZp
eCApIHsKKyAgICBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgb3JpZyBdID0geworICAgICAgICBkZWxl
Z2F0ZVR5cGU6IGZpeCwKKyAgICAgICAgYmluZFR5cGU6IGZpeCwKKworICAgICAgICBoYW5kbGU6
IGZ1bmN0aW9uKCBldmVudCApIHsKKyAgICAgICAgICAgIHZhciByZXQsCisgICAgICAgICAgICAg
ICAgdGFyZ2V0ID0gdGhpcywKKyAgICAgICAgICAgICAgICByZWxhdGVkID0gZXZlbnQucmVsYXRl
ZFRhcmdldCwKKyAgICAgICAgICAgICAgICBoYW5kbGVPYmogPSBldmVudC5oYW5kbGVPYmo7CisK
KyAgICAgICAgICAgIC8vIEZvciBtb3VzZWVudGVyL2xlYXZlIGNhbGwgdGhlIGhhbmRsZXIgaWYg
cmVsYXRlZCBpcyBvdXRzaWRlIHRoZSB0YXJnZXQuCisgICAgICAgICAgICAvLyBOQjogTm8gcmVs
YXRlZFRhcmdldCBpZiB0aGUgbW91c2UgbGVmdC9lbnRlcmVkIHRoZSBicm93c2VyIHdpbmRvdwor
ICAgICAgICAgICAgaWYgKCAhcmVsYXRlZCB8fCAoIHJlbGF0ZWQgIT09IHRhcmdldCAmJiAhalF1
ZXJ5LmNvbnRhaW5zKCB0YXJnZXQsIHJlbGF0ZWQgKSApICkgeworICAgICAgICAgICAgICAgIGV2
ZW50LnR5cGUgPSBoYW5kbGVPYmoub3JpZ1R5cGU7CisgICAgICAgICAgICAgICAgcmV0ID0gaGFu
ZGxlT2JqLmhhbmRsZXIuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOworICAgICAgICAgICAgICAg
IGV2ZW50LnR5cGUgPSBmaXg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmV0
OworICAgICAgICB9CisgICAgfTsKK30gKTsKKworalF1ZXJ5LmZuLmV4dGVuZCggeworCisgICAg
b246IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkgeworICAgICAgICByZXR1
cm4gb24oIHRoaXMsIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKTsKKyAgICB9LAorICAgIG9u
ZTogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKSB7CisgICAgICAgIHJldHVy
biBvbiggdGhpcywgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgMSApOworICAgIH0sCisgICAg
b2ZmOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBmbiApIHsKKyAgICAgICAgdmFyIGhhbmRs
ZU9iaiwgdHlwZTsKKyAgICAgICAgaWYgKCB0eXBlcyAmJiB0eXBlcy5wcmV2ZW50RGVmYXVsdCAm
JiB0eXBlcy5oYW5kbGVPYmogKSB7CisKKyAgICAgICAgICAgIC8vICggZXZlbnQgKSAgZGlzcGF0
Y2hlZCBqUXVlcnkuRXZlbnQKKyAgICAgICAgICAgIGhhbmRsZU9iaiA9IHR5cGVzLmhhbmRsZU9i
ajsKKyAgICAgICAgICAgIGpRdWVyeSggdHlwZXMuZGVsZWdhdGVUYXJnZXQgKS5vZmYoCisgICAg
ICAgICAgICAgICAgaGFuZGxlT2JqLm5hbWVzcGFjZSA/CisgICAgICAgICAgICAgICAgICAgIGhh
bmRsZU9iai5vcmlnVHlwZSArICIuIiArIGhhbmRsZU9iai5uYW1lc3BhY2UgOgorICAgICAgICAg
ICAgICAgICAgICBoYW5kbGVPYmoub3JpZ1R5cGUsCisgICAgICAgICAgICAgICAgaGFuZGxlT2Jq
LnNlbGVjdG9yLAorICAgICAgICAgICAgICAgIGhhbmRsZU9iai5oYW5kbGVyCisgICAgICAgICAg
ICApOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCB0
eXBlb2YgdHlwZXMgPT09ICJvYmplY3QiICkgeworCisgICAgICAgICAgICAvLyAoIHR5cGVzLW9i
amVjdCBbLCBzZWxlY3Rvcl0gKQorICAgICAgICAgICAgZm9yICggdHlwZSBpbiB0eXBlcyApIHsK
KyAgICAgICAgICAgICAgICB0aGlzLm9mZiggdHlwZSwgc2VsZWN0b3IsIHR5cGVzWyB0eXBlIF0g
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9Cisg
ICAgICAgIGlmICggc2VsZWN0b3IgPT09IGZhbHNlIHx8IHR5cGVvZiBzZWxlY3RvciA9PT0gImZ1
bmN0aW9uIiApIHsKKworICAgICAgICAgICAgLy8gKCB0eXBlcyBbLCBmbl0gKQorICAgICAgICAg
ICAgZm4gPSBzZWxlY3RvcjsKKyAgICAgICAgICAgIHNlbGVjdG9yID0gdW5kZWZpbmVkOworICAg
ICAgICB9CisgICAgICAgIGlmICggZm4gPT09IGZhbHNlICkgeworICAgICAgICAgICAgZm4gPSBy
ZXR1cm5GYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgIGpRdWVyeS5ldmVudC5yZW1vdmUoIHRoaXMsIHR5cGVzLCBmbiwg
c2VsZWN0b3IgKTsKKyAgICAgICAgfSApOworICAgIH0KK30gKTsKKworCit2YXIKKworICAgIC8q
IGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi8KKworICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5j
b20vZXNsaW50L2VzbGludC9pc3N1ZXMvMzIyOQorICAgIHJ4aHRtbFRhZyA9IC88KD8hYXJlYXxi
cnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFthLXpdW15cL1wwPlx4
MjBcdFxyXG5cZl0qKVtePl0qKVwvPi9naSwKKworICAgIC8qIGVzbGludC1lbmFibGUgKi8KKwor
ICAgIC8vIFN1cHBvcnQ6IElFIDw9MTAgLSAxMSwgRWRnZSAxMiAtIDEzCisgICAgLy8gSW4gSUUv
RWRnZSB1c2luZyByZWdleCBncm91cHMgaGVyZSBjYXVzZXMgc2V2ZXJlIHNsb3dkb3ducy4KKyAg
ICAvLyBTZWUgaHR0cHM6Ly9jb25uZWN0Lm1pY3Jvc29mdC5jb20vSUUvZmVlZGJhY2svZGV0YWls
cy8xNzM2NTEyLworICAgIHJub0lubmVyaHRtbCA9IC88c2NyaXB0fDxzdHlsZXw8bGluay9pLAor
CisgICAgLy8gY2hlY2tlZD0iY2hlY2tlZCIgb3IgY2hlY2tlZAorICAgIHJjaGVja2VkID0gL2No
ZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksCisgICAgcnNjcmlwdFR5cGVNYXNrZWQg
PSAvXnRydWVcLyguKikvLAorICAgIHJjbGVhblNjcmlwdCA9IC9eXHMqPCEoPzpcW0NEQVRBXFt8
LS0pfCg/OlxdXF18LS0pPlxzKiQvZzsKKworZnVuY3Rpb24gbWFuaXB1bGF0aW9uVGFyZ2V0KCBl
bGVtLCBjb250ZW50ICkgeworICAgIGlmICggalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAidGFibGUi
ICkgJiYKKyAgICAgICAgalF1ZXJ5Lm5vZGVOYW1lKCBjb250ZW50Lm5vZGVUeXBlICE9PSAxMSA/
IGNvbnRlbnQgOiBjb250ZW50LmZpcnN0Q2hpbGQsICJ0ciIgKSApIHsKKworICAgICAgICByZXR1
cm4gZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSggInRib2R5IiApWyAwIF0gfHwgZWxlbTsKKyAg
ICB9CisKKyAgICByZXR1cm4gZWxlbTsKK30KKworLy8gUmVwbGFjZS9yZXN0b3JlIHRoZSB0eXBl
IGF0dHJpYnV0ZSBvZiBzY3JpcHQgZWxlbWVudHMgZm9yIHNhZmUgRE9NIG1hbmlwdWxhdGlvbgor
ZnVuY3Rpb24gZGlzYWJsZVNjcmlwdCggZWxlbSApIHsKKyAgICBlbGVtLnR5cGUgPSAoIGVsZW0u
Z2V0QXR0cmlidXRlKCAidHlwZSIgKSAhPT0gbnVsbCApICsgIi8iICsgZWxlbS50eXBlOworICAg
IHJldHVybiBlbGVtOworfQorZnVuY3Rpb24gcmVzdG9yZVNjcmlwdCggZWxlbSApIHsKKyAgICB2
YXIgbWF0Y2ggPSByc2NyaXB0VHlwZU1hc2tlZC5leGVjKCBlbGVtLnR5cGUgKTsKKworICAgIGlm
ICggbWF0Y2ggKSB7CisgICAgICAgIGVsZW0udHlwZSA9IG1hdGNoWyAxIF07CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZWxlbS5yZW1vdmVBdHRyaWJ1dGUoICJ0eXBlIiApOworICAgIH0KKworICAg
IHJldHVybiBlbGVtOworfQorCitmdW5jdGlvbiBjbG9uZUNvcHlFdmVudCggc3JjLCBkZXN0ICkg
eworICAgIHZhciBpLCBsLCB0eXBlLCBwZGF0YU9sZCwgcGRhdGFDdXIsIHVkYXRhT2xkLCB1ZGF0
YUN1ciwgZXZlbnRzOworCisgICAgaWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAxICkgeworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gMS4gQ29weSBwcml2YXRlIGRhdGE6IGV2ZW50cywg
aGFuZGxlcnMsIGV0Yy4KKyAgICBpZiAoIGRhdGFQcml2Lmhhc0RhdGEoIHNyYyApICkgeworICAg
ICAgICBwZGF0YU9sZCA9IGRhdGFQcml2LmFjY2Vzcyggc3JjICk7CisgICAgICAgIHBkYXRhQ3Vy
ID0gZGF0YVByaXYuc2V0KCBkZXN0LCBwZGF0YU9sZCApOworICAgICAgICBldmVudHMgPSBwZGF0
YU9sZC5ldmVudHM7CisKKyAgICAgICAgaWYgKCBldmVudHMgKSB7CisgICAgICAgICAgICBkZWxl
dGUgcGRhdGFDdXIuaGFuZGxlOworICAgICAgICAgICAgcGRhdGFDdXIuZXZlbnRzID0ge307CisK
KyAgICAgICAgICAgIGZvciAoIHR5cGUgaW4gZXZlbnRzICkgeworICAgICAgICAgICAgICAgIGZv
ciAoIGkgPSAwLCBsID0gZXZlbnRzWyB0eXBlIF0ubGVuZ3RoOyBpIDwgbDsgaSsrICkgeworICAg
ICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQuYWRkKCBkZXN0LCB0eXBlLCBldmVudHNbIHR5
cGUgXVsgaSBdICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorCisgICAgLy8gMi4gQ29weSB1c2VyIGRhdGEKKyAgICBpZiAoIGRhdGFVc2VyLmhh
c0RhdGEoIHNyYyApICkgeworICAgICAgICB1ZGF0YU9sZCA9IGRhdGFVc2VyLmFjY2Vzcyggc3Jj
ICk7CisgICAgICAgIHVkYXRhQ3VyID0galF1ZXJ5LmV4dGVuZCgge30sIHVkYXRhT2xkICk7CisK
KyAgICAgICAgZGF0YVVzZXIuc2V0KCBkZXN0LCB1ZGF0YUN1ciApOworICAgIH0KK30KKworLy8g
Rml4IElFIGJ1Z3MsIHNlZSBzdXBwb3J0IHRlc3RzCitmdW5jdGlvbiBmaXhJbnB1dCggc3JjLCBk
ZXN0ICkgeworICAgIHZhciBub2RlTmFtZSA9IGRlc3Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsK
KworICAgIC8vIEZhaWxzIHRvIHBlcnNpc3QgdGhlIGNoZWNrZWQgc3RhdGUgb2YgYSBjbG9uZWQg
Y2hlY2tib3ggb3IgcmFkaW8gYnV0dG9uLgorICAgIGlmICggbm9kZU5hbWUgPT09ICJpbnB1dCIg
JiYgcmNoZWNrYWJsZVR5cGUudGVzdCggc3JjLnR5cGUgKSApIHsKKyAgICAgICAgZGVzdC5jaGVj
a2VkID0gc3JjLmNoZWNrZWQ7CisKKyAgICAvLyBGYWlscyB0byByZXR1cm4gdGhlIHNlbGVjdGVk
IG9wdGlvbiB0byB0aGUgZGVmYXVsdCBzZWxlY3RlZCBzdGF0ZSB3aGVuIGNsb25pbmcgb3B0aW9u
cworICAgIH0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSAiaW5wdXQiIHx8IG5vZGVOYW1lID09PSAi
dGV4dGFyZWEiICkgeworICAgICAgICBkZXN0LmRlZmF1bHRWYWx1ZSA9IHNyYy5kZWZhdWx0VmFs
dWU7CisgICAgfQorfQorCitmdW5jdGlvbiBkb21NYW5pcCggY29sbGVjdGlvbiwgYXJncywgY2Fs
bGJhY2ssIGlnbm9yZWQgKSB7CisKKyAgICAvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlzCisg
ICAgYXJncyA9IGNvbmNhdC5hcHBseSggW10sIGFyZ3MgKTsKKworICAgIHZhciBmcmFnbWVudCwg
Zmlyc3QsIHNjcmlwdHMsIGhhc1NjcmlwdHMsIG5vZGUsIGRvYywKKyAgICAgICAgaSA9IDAsCisg
ICAgICAgIGwgPSBjb2xsZWN0aW9uLmxlbmd0aCwKKyAgICAgICAgaU5vQ2xvbmUgPSBsIC0gMSwK
KyAgICAgICAgdmFsdWUgPSBhcmdzWyAwIF0sCisgICAgICAgIGlzRnVuY3Rpb24gPSBqUXVlcnku
aXNGdW5jdGlvbiggdmFsdWUgKTsKKworICAgIC8vIFdlIGNhbid0IGNsb25lTm9kZSBmcmFnbWVu
dHMgdGhhdCBjb250YWluIGNoZWNrZWQsIGluIFdlYktpdAorICAgIGlmICggaXNGdW5jdGlvbiB8
fAorICAgICAgICAgICAgKCBsID4gMSAmJiB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciICYmCisg
ICAgICAgICAgICAgICAgIXN1cHBvcnQuY2hlY2tDbG9uZSAmJiByY2hlY2tlZC50ZXN0KCB2YWx1
ZSApICkgKSB7CisgICAgICAgIHJldHVybiBjb2xsZWN0aW9uLmVhY2goIGZ1bmN0aW9uKCBpbmRl
eCApIHsKKyAgICAgICAgICAgIHZhciBzZWxmID0gY29sbGVjdGlvbi5lcSggaW5kZXggKTsKKyAg
ICAgICAgICAgIGlmICggaXNGdW5jdGlvbiApIHsKKyAgICAgICAgICAgICAgICBhcmdzWyAwIF0g
PSB2YWx1ZS5jYWxsKCB0aGlzLCBpbmRleCwgc2VsZi5odG1sKCkgKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGRvbU1hbmlwKCBzZWxmLCBhcmdzLCBjYWxsYmFjaywgaWdub3JlZCApOwor
ICAgICAgICB9ICk7CisgICAgfQorCisgICAgaWYgKCBsICkgeworICAgICAgICBmcmFnbWVudCA9
IGJ1aWxkRnJhZ21lbnQoIGFyZ3MsIGNvbGxlY3Rpb25bIDAgXS5vd25lckRvY3VtZW50LCBmYWxz
ZSwgY29sbGVjdGlvbiwgaWdub3JlZCApOworICAgICAgICBmaXJzdCA9IGZyYWdtZW50LmZpcnN0
Q2hpbGQ7CisKKyAgICAgICAgaWYgKCBmcmFnbWVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSAp
IHsKKyAgICAgICAgICAgIGZyYWdtZW50ID0gZmlyc3Q7CisgICAgICAgIH0KKworICAgICAgICAv
LyBSZXF1aXJlIGVpdGhlciBuZXcgY29udGVudCBvciBhbiBpbnRlcmVzdCBpbiBpZ25vcmVkIGVs
ZW1lbnRzIHRvIGludm9rZSB0aGUgY2FsbGJhY2sKKyAgICAgICAgaWYgKCBmaXJzdCB8fCBpZ25v
cmVkICkgeworICAgICAgICAgICAgc2NyaXB0cyA9IGpRdWVyeS5tYXAoIGdldEFsbCggZnJhZ21l
bnQsICJzY3JpcHQiICksIGRpc2FibGVTY3JpcHQgKTsKKyAgICAgICAgICAgIGhhc1NjcmlwdHMg
PSBzY3JpcHRzLmxlbmd0aDsKKworICAgICAgICAgICAgLy8gVXNlIHRoZSBvcmlnaW5hbCBmcmFn
bWVudCBmb3IgdGhlIGxhc3QgaXRlbQorICAgICAgICAgICAgLy8gaW5zdGVhZCBvZiB0aGUgZmly
c3QgYmVjYXVzZSBpdCBjYW4gZW5kIHVwCisgICAgICAgICAgICAvLyBiZWluZyBlbXB0aWVkIGlu
Y29ycmVjdGx5IGluIGNlcnRhaW4gc2l0dWF0aW9ucyAoIzgwNzApLgorICAgICAgICAgICAgZm9y
ICggOyBpIDwgbDsgaSsrICkgeworICAgICAgICAgICAgICAgIG5vZGUgPSBmcmFnbWVudDsKKwor
ICAgICAgICAgICAgICAgIGlmICggaSAhPT0gaU5vQ2xvbmUgKSB7CisgICAgICAgICAgICAgICAg
ICAgIG5vZGUgPSBqUXVlcnkuY2xvbmUoIG5vZGUsIHRydWUsIHRydWUgKTsKKworICAgICAgICAg
ICAgICAgICAgICAvLyBLZWVwIHJlZmVyZW5jZXMgdG8gY2xvbmVkIHNjcmlwdHMgZm9yIGxhdGVy
IHJlc3RvcmF0aW9uCisgICAgICAgICAgICAgICAgICAgIGlmICggaGFzU2NyaXB0cyApIHsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQ
aGFudG9tSlMgMSBvbmx5CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBwdXNoLmFwcGx5KF8s
IGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0CisgICAgICAgICAgICAgICAgICAg
ICAgICBqUXVlcnkubWVyZ2UoIHNjcmlwdHMsIGdldEFsbCggbm9kZSwgInNjcmlwdCIgKSApOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgY2FsbGJhY2suY2FsbCggY29sbGVjdGlvblsgaSBdLCBub2RlLCBpICk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICggaGFzU2NyaXB0cyApIHsKKyAgICAgICAgICAgICAgICBk
b2MgPSBzY3JpcHRzWyBzY3JpcHRzLmxlbmd0aCAtIDEgXS5vd25lckRvY3VtZW50OworCisgICAg
ICAgICAgICAgICAgLy8gUmVlbmFibGUgc2NyaXB0cworICAgICAgICAgICAgICAgIGpRdWVyeS5t
YXAoIHNjcmlwdHMsIHJlc3RvcmVTY3JpcHQgKTsKKworICAgICAgICAgICAgICAgIC8vIEV2YWx1
YXRlIGV4ZWN1dGFibGUgc2NyaXB0cyBvbiBmaXJzdCBkb2N1bWVudCBpbnNlcnRpb24KKyAgICAg
ICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGhhc1NjcmlwdHM7IGkrKyApIHsKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZSA9IHNjcmlwdHNbIGkgXTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCByc2NyaXB0VHlwZS50ZXN0KCBub2RlLnR5cGUgfHwgIiIgKSAmJgorICAgICAgICAgICAgICAg
ICAgICAgICAgIWRhdGFQcml2LmFjY2Vzcyggbm9kZSwgImdsb2JhbEV2YWwiICkgJiYKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGpRdWVyeS5jb250YWlucyggZG9jLCBub2RlICkgKSB7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggbm9kZS5zcmMgKSB7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBPcHRpb25hbCBBSkFYIGRlcGVuZGVuY3ksIGJ1dCB3b24ndCBydW4g
c2NyaXB0cyBpZiBub3QgcHJlc2VudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
alF1ZXJ5Ll9ldmFsVXJsICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVl
cnkuX2V2YWxVcmwoIG5vZGUuc3JjICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBET01FdmFsKCBub2RlLnRleHRDb250ZW50LnJlcGxhY2UoIHJjbGVhblNjcmlwdCwgIiIg
KSwgZG9jICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gY29sbGVjdGlvbjsKK30KKworZnVuY3Rpb24gcmVtb3ZlKCBlbGVtLCBzZWxl
Y3Rvciwga2VlcERhdGEgKSB7CisgICAgdmFyIG5vZGUsCisgICAgICAgIG5vZGVzID0gc2VsZWN0
b3IgPyBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgZWxlbSApIDogZWxlbSwKKyAgICAgICAgaSA9
IDA7CisKKyAgICBmb3IgKCA7ICggbm9kZSA9IG5vZGVzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7
CisgICAgICAgIGlmICggIWtlZXBEYXRhICYmIG5vZGUubm9kZVR5cGUgPT09IDEgKSB7CisgICAg
ICAgICAgICBqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIG5vZGUgKSApOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKCBub2RlLnBhcmVudE5vZGUgKSB7CisgICAgICAgICAgICBpZiAoIGtlZXBE
YXRhICYmIGpRdWVyeS5jb250YWlucyggbm9kZS5vd25lckRvY3VtZW50LCBub2RlICkgKSB7Cisg
ICAgICAgICAgICAgICAgc2V0R2xvYmFsRXZhbCggZ2V0QWxsKCBub2RlLCAic2NyaXB0IiApICk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQo
IG5vZGUgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBlbGVtOworfQorCitqUXVl
cnkuZXh0ZW5kKCB7CisgICAgaHRtbFByZWZpbHRlcjogZnVuY3Rpb24oIGh0bWwgKSB7CisgICAg
ICAgIHJldHVybiBodG1sLnJlcGxhY2UoIHJ4aHRtbFRhZywgIjwkMT48LyQyPiIgKTsKKyAgICB9
LAorCisgICAgY2xvbmU6IGZ1bmN0aW9uKCBlbGVtLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFu
ZEV2ZW50cyApIHsKKyAgICAgICAgdmFyIGksIGwsIHNyY0VsZW1lbnRzLCBkZXN0RWxlbWVudHMs
CisgICAgICAgICAgICBjbG9uZSA9IGVsZW0uY2xvbmVOb2RlKCB0cnVlICksCisgICAgICAgICAg
ICBpblBhZ2UgPSBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApOwor
CisgICAgICAgIC8vIEZpeCBJRSBjbG9uaW5nIGlzc3VlcworICAgICAgICBpZiAoICFzdXBwb3J0
Lm5vQ2xvbmVDaGVja2VkICYmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBlbGVtLm5vZGVUeXBl
ID09PSAxMSApICYmCisgICAgICAgICAgICAgICAgIWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkg
eworCisgICAgICAgICAgICAvLyBXZSBlc2NoZXcgU2l6emxlIGhlcmUgZm9yIHBlcmZvcm1hbmNl
IHJlYXNvbnM6IGh0dHBzOi8vanNwZXJmLmNvbS9nZXRhbGwtdnMtc2l6emxlLzIKKyAgICAgICAg
ICAgIGRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUgKTsKKyAgICAgICAgICAgIHNyY0VsZW1l
bnRzID0gZ2V0QWxsKCBlbGVtICk7CisKKyAgICAgICAgICAgIGZvciAoIGkgPSAwLCBsID0gc3Jj
RWxlbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrICkgeworICAgICAgICAgICAgICAgIGZpeElucHV0
KCBzcmNFbGVtZW50c1sgaSBdLCBkZXN0RWxlbWVudHNbIGkgXSApOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgLy8gQ29weSB0aGUgZXZlbnRzIGZyb20gdGhlIG9yaWdpbmFs
IHRvIHRoZSBjbG9uZQorICAgICAgICBpZiAoIGRhdGFBbmRFdmVudHMgKSB7CisgICAgICAgICAg
ICBpZiAoIGRlZXBEYXRhQW5kRXZlbnRzICkgeworICAgICAgICAgICAgICAgIHNyY0VsZW1lbnRz
ID0gc3JjRWxlbWVudHMgfHwgZ2V0QWxsKCBlbGVtICk7CisgICAgICAgICAgICAgICAgZGVzdEVs
ZW1lbnRzID0gZGVzdEVsZW1lbnRzIHx8IGdldEFsbCggY2xvbmUgKTsKKworICAgICAgICAgICAg
ICAgIGZvciAoIGkgPSAwLCBsID0gc3JjRWxlbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrICkgewor
ICAgICAgICAgICAgICAgICAgICBjbG9uZUNvcHlFdmVudCggc3JjRWxlbWVudHNbIGkgXSwgZGVz
dEVsZW1lbnRzWyBpIF0gKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIGNsb25lQ29weUV2ZW50KCBlbGVtLCBjbG9uZSApOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gUHJlc2VydmUgc2NyaXB0IGV2YWx1YXRp
b24gaGlzdG9yeQorICAgICAgICBkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lLCAic2NyaXB0
IiApOworICAgICAgICBpZiAoIGRlc3RFbGVtZW50cy5sZW5ndGggPiAwICkgeworICAgICAgICAg
ICAgc2V0R2xvYmFsRXZhbCggZGVzdEVsZW1lbnRzLCAhaW5QYWdlICYmIGdldEFsbCggZWxlbSwg
InNjcmlwdCIgKSApOworICAgICAgICB9CisKKyAgICAgICAgLy8gUmV0dXJuIHRoZSBjbG9uZWQg
c2V0CisgICAgICAgIHJldHVybiBjbG9uZTsKKyAgICB9LAorCisgICAgY2xlYW5EYXRhOiBmdW5j
dGlvbiggZWxlbXMgKSB7CisgICAgICAgIHZhciBkYXRhLCBlbGVtLCB0eXBlLAorICAgICAgICAg
ICAgc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsLAorICAgICAgICAgICAgaSA9IDA7CisK
KyAgICAgICAgZm9yICggOyAoIGVsZW0gPSBlbGVtc1sgaSBdICkgIT09IHVuZGVmaW5lZDsgaSsr
ICkgeworICAgICAgICAgICAgaWYgKCBhY2NlcHREYXRhKCBlbGVtICkgKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCAoIGRhdGEgPSBlbGVtWyBkYXRhUHJpdi5leHBhbmRvIF0gKSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCBkYXRhLmV2ZW50cyApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAoIHR5cGUgaW4gZGF0YS5ldmVudHMgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBzcGVjaWFsWyB0eXBlIF0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKTsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBhdm9pZCBqUXVlcnkuZXZl
bnQucmVtb3ZlJ3Mgb3ZlcmhlYWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkucmVtb3ZlRXZlbnQoIGVs
ZW0sIHR5cGUsIGRhdGEuaGFuZGxlICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NSsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gQXNzaWduIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIHVzaW5nIGRlbGV0ZSwgc2Vl
IERhdGEjcmVtb3ZlCisgICAgICAgICAgICAgICAgICAgIGVsZW1bIGRhdGFQcml2LmV4cGFuZG8g
XSA9IHVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCBl
bGVtWyBkYXRhVXNlci5leHBhbmRvIF0gKSB7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gU3Vw
cG9ydDogQ2hyb21lIDw9MzUgLSA0NSsKKyAgICAgICAgICAgICAgICAgICAgLy8gQXNzaWduIHVu
ZGVmaW5lZCBpbnN0ZWFkIG9mIHVzaW5nIGRlbGV0ZSwgc2VlIERhdGEjcmVtb3ZlCisgICAgICAg
ICAgICAgICAgICAgIGVsZW1bIGRhdGFVc2VyLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9ICk7CisKK2pR
dWVyeS5mbi5leHRlbmQoIHsKKyAgICBkZXRhY2g6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKKyAg
ICAgICAgcmV0dXJuIHJlbW92ZSggdGhpcywgc2VsZWN0b3IsIHRydWUgKTsKKyAgICB9LAorCisg
ICAgcmVtb3ZlOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CisgICAgICAgIHJldHVybiByZW1vdmUo
IHRoaXMsIHNlbGVjdG9yICk7CisgICAgfSwKKworICAgIHRleHQ6IGZ1bmN0aW9uKCB2YWx1ZSAp
IHsKKyAgICAgICAgcmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkgeworICAg
ICAgICAgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPworICAgICAgICAgICAgICAgIGpR
dWVyeS50ZXh0KCB0aGlzICkgOgorICAgICAgICAgICAgICAgIHRoaXMuZW1wdHkoKS5lYWNoKCBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGlzLm5vZGVUeXBlID09PSAx
IHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHRDb250ZW50ID0gdmFsdWU7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9ICk7CisgICAgICAgIH0sIG51bGwsIHZhbHVl
LCBhcmd1bWVudHMubGVuZ3RoICk7CisgICAgfSwKKworICAgIGFwcGVuZDogZnVuY3Rpb24oKSB7
CisgICAgICAgIHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxl
bSApIHsKKyAgICAgICAgICAgIGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVU
eXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkgeworICAgICAgICAgICAgICAgIHZh
ciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMsIGVsZW0gKTsKKyAgICAgICAgICAg
ICAgICB0YXJnZXQuYXBwZW5kQ2hpbGQoIGVsZW0gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSApOworICAgIH0sCisKKyAgICBwcmVwZW5kOiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu
IGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAg
ICAgaWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRo
aXMubm9kZVR5cGUgPT09IDkgKSB7CisgICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IG1hbmlw
dWxhdGlvblRhcmdldCggdGhpcywgZWxlbSApOworICAgICAgICAgICAgICAgIHRhcmdldC5pbnNl
cnRCZWZvcmUoIGVsZW0sIHRhcmdldC5maXJzdENoaWxkICk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gKTsKKyAgICB9LAorCisgICAgYmVmb3JlOiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0
dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAg
ICAgICAgaWYgKCB0aGlzLnBhcmVudE5vZGUgKSB7CisgICAgICAgICAgICAgICAgdGhpcy5wYXJl
bnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcyApOworICAgICAgICAgICAgfQorICAgICAg
ICB9ICk7CisgICAgfSwKKworICAgIGFmdGVyOiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu
IGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAg
ICAgaWYgKCB0aGlzLnBhcmVudE5vZGUgKSB7CisgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnRO
b2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcy5uZXh0U2libGluZyApOworICAgICAgICAgICAg
fQorICAgICAgICB9ICk7CisgICAgfSwKKworICAgIGVtcHR5OiBmdW5jdGlvbigpIHsKKyAgICAg
ICAgdmFyIGVsZW0sCisgICAgICAgICAgICBpID0gMDsKKworICAgICAgICBmb3IgKCA7ICggZWxl
bSA9IHRoaXNbIGkgXSApICE9IG51bGw7IGkrKyApIHsKKyAgICAgICAgICAgIGlmICggZWxlbS5u
b2RlVHlwZSA9PT0gMSApIHsKKworICAgICAgICAgICAgICAgIC8vIFByZXZlbnQgbWVtb3J5IGxl
YWtzCisgICAgICAgICAgICAgICAgalF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBlbGVtLCBmYWxz
ZSApICk7CisKKyAgICAgICAgICAgICAgICAvLyBSZW1vdmUgYW55IHJlbWFpbmluZyBub2Rlcwor
ICAgICAgICAgICAgICAgIGVsZW0udGV4dENvbnRlbnQgPSAiIjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0sCisKKyAgICBjbG9uZTogZnVu
Y3Rpb24oIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkgeworICAgICAgICBkYXRh
QW5kRXZlbnRzID0gZGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZmFsc2UgOiBkYXRhQW5kRXZlbnRz
OworICAgICAgICBkZWVwRGF0YUFuZEV2ZW50cyA9IGRlZXBEYXRhQW5kRXZlbnRzID09IG51bGwg
PyBkYXRhQW5kRXZlbnRzIDogZGVlcERhdGFBbmRFdmVudHM7CisKKyAgICAgICAgcmV0dXJuIHRo
aXMubWFwKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHJldHVybiBqUXVlcnkuY2xvbmUoIHRo
aXMsIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICk7CisgICAgICAgIH0gKTsKKyAg
ICB9LAorCisgICAgaHRtbDogZnVuY3Rpb24oIHZhbHVlICkgeworICAgICAgICByZXR1cm4gYWNj
ZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7CisgICAgICAgICAgICB2YXIgZWxlbSA9IHRo
aXNbIDAgXSB8fCB7fSwKKyAgICAgICAgICAgICAgICBpID0gMCwKKyAgICAgICAgICAgICAgICBs
ID0gdGhpcy5sZW5ndGg7CisKKyAgICAgICAgICAgIGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCAm
JiBlbGVtLm5vZGVUeXBlID09PSAxICkgeworICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLmlu
bmVySFRNTDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gU2VlIGlmIHdlIGNhbiB0
YWtlIGEgc2hvcnRjdXQgYW5kIGp1c3QgdXNlIGlubmVySFRNTAorICAgICAgICAgICAgaWYgKCB0
eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciICYmICFybm9Jbm5lcmh0bWwudGVzdCggdmFsdWUgKSAm
JgorICAgICAgICAgICAgICAgICF3cmFwTWFwWyAoIHJ0YWdOYW1lLmV4ZWMoIHZhbHVlICkgfHwg
WyAiIiwgIiIgXSApWyAxIF0udG9Mb3dlckNhc2UoKSBdICkgeworCisgICAgICAgICAgICAgICAg
dmFsdWUgPSBqUXVlcnkuaHRtbFByZWZpbHRlciggdmFsdWUgKTsKKworICAgICAgICAgICAgICAg
IHRyeSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoIDsgaSA8IGw7IGkrKyApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVsZW0gPSB0aGlzWyBpIF0gfHwge307CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFJlbW92ZSBlbGVtZW50IG5vZGVzIGFuZCBwcmV2ZW50IG1lbW9yeSBs
ZWFrcworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCgg
ZWxlbSwgZmFsc2UgKSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uaW5uZXJI
VE1MID0gdmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICBlbGVtID0gMDsKKworICAgICAgICAgICAgICAg
IC8vIElmIHVzaW5nIGlubmVySFRNTCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB1c2UgdGhlIGZhbGxi
YWNrIG1ldGhvZAorICAgICAgICAgICAgICAgIH0gY2F0Y2ggKCBlICkge30KKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKCBlbGVtICkgeworICAgICAgICAgICAgICAgIHRoaXMuZW1w
dHkoKS5hcHBlbmQoIHZhbHVlICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sIG51bGwsIHZh
bHVlLCBhcmd1bWVudHMubGVuZ3RoICk7CisgICAgfSwKKworICAgIHJlcGxhY2VXaXRoOiBmdW5j
dGlvbigpIHsKKyAgICAgICAgdmFyIGlnbm9yZWQgPSBbXTsKKworICAgICAgICAvLyBNYWtlIHRo
ZSBjaGFuZ2VzLCByZXBsYWNpbmcgZWFjaCBub24taWdub3JlZCBjb250ZXh0IGVsZW1lbnQgd2l0
aCB0aGUgbmV3IGNvbnRlbnQKKyAgICAgICAgcmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVu
dHMsIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgdmFyIHBhcmVudCA9IHRoaXMucGFy
ZW50Tm9kZTsKKworICAgICAgICAgICAgaWYgKCBqUXVlcnkuaW5BcnJheSggdGhpcywgaWdub3Jl
ZCApIDwgMCApIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIHRo
aXMgKSApOworICAgICAgICAgICAgICAgIGlmICggcGFyZW50ICkgeworICAgICAgICAgICAgICAg
ICAgICBwYXJlbnQucmVwbGFjZUNoaWxkKCBlbGVtLCB0aGlzICk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorCisgICAgICAgIC8vIEZvcmNlIGNhbGxiYWNrIGludm9jYXRpb24K
KyAgICAgICAgfSwgaWdub3JlZCApOworICAgIH0KK30gKTsKKworalF1ZXJ5LmVhY2goIHsKKyAg
ICBhcHBlbmRUbzogImFwcGVuZCIsCisgICAgcHJlcGVuZFRvOiAicHJlcGVuZCIsCisgICAgaW5z
ZXJ0QmVmb3JlOiAiYmVmb3JlIiwKKyAgICBpbnNlcnRBZnRlcjogImFmdGVyIiwKKyAgICByZXBs
YWNlQWxsOiAicmVwbGFjZVdpdGgiCit9LCBmdW5jdGlvbiggbmFtZSwgb3JpZ2luYWwgKSB7Cisg
ICAgalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CisgICAgICAgIHZh
ciBlbGVtcywKKyAgICAgICAgICAgIHJldCA9IFtdLAorICAgICAgICAgICAgaW5zZXJ0ID0galF1
ZXJ5KCBzZWxlY3RvciApLAorICAgICAgICAgICAgbGFzdCA9IGluc2VydC5sZW5ndGggLSAxLAor
ICAgICAgICAgICAgaSA9IDA7CisKKyAgICAgICAgZm9yICggOyBpIDw9IGxhc3Q7IGkrKyApIHsK
KyAgICAgICAgICAgIGVsZW1zID0gaSA9PT0gbGFzdCA/IHRoaXMgOiB0aGlzLmNsb25lKCB0cnVl
ICk7CisgICAgICAgICAgICBqUXVlcnkoIGluc2VydFsgaSBdIClbIG9yaWdpbmFsIF0oIGVsZW1z
ICk7CisKKyAgICAgICAgICAgIC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRv
bUpTIDEgb25seQorICAgICAgICAgICAgLy8gLmdldCgpIGJlY2F1c2UgcHVzaC5hcHBseShfLCBh
cnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdAorICAgICAgICAgICAgcHVzaC5hcHBs
eSggcmV0LCBlbGVtcy5nZXQoKSApOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRoaXMu
cHVzaFN0YWNrKCByZXQgKTsKKyAgICB9OworfSApOwordmFyIHJtYXJnaW4gPSAoIC9ebWFyZ2lu
LyApOworCit2YXIgcm51bW5vbnB4ID0gbmV3IFJlZ0V4cCggIl4oIiArIHBudW0gKyAiKSg/IXB4
KVthLXolXSskIiwgImkiICk7CisKK3ZhciBnZXRTdHlsZXMgPSBmdW5jdGlvbiggZWxlbSApIHsK
KworICAgICAgICAvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHksIEZpcmVmb3ggPD0zMCAoIzE1MDk4
LCAjMTQxNTApCisgICAgICAgIC8vIElFIHRocm93cyBvbiBlbGVtZW50cyBjcmVhdGVkIGluIHBv
cHVwcworICAgICAgICAvLyBGRiBtZWFud2hpbGUgdGhyb3dzIG9uIGZyYW1lIGVsZW1lbnRzIHRo
cm91Z2ggImRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUiCisgICAgICAgIHZhciB2aWV3ID0g
ZWxlbS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3OworCisgICAgICAgIGlmICggIXZpZXcgfHwg
IXZpZXcub3BlbmVyICkgeworICAgICAgICAgICAgdmlldyA9IHdpbmRvdzsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiB2aWV3LmdldENvbXB1dGVkU3R5bGUoIGVsZW0gKTsKKyAgICB9Owor
CisKKworKCBmdW5jdGlvbigpIHsKKworICAgIC8vIEV4ZWN1dGluZyBib3RoIHBpeGVsUG9zaXRp
b24gJiBib3hTaXppbmdSZWxpYWJsZSB0ZXN0cyByZXF1aXJlIG9ubHkgb25lIGxheW91dAorICAg
IC8vIHNvIHRoZXkncmUgZXhlY3V0ZWQgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHRoZSBzZWNv
bmQgY29tcHV0YXRpb24uCisgICAgZnVuY3Rpb24gY29tcHV0ZVN0eWxlVGVzdHMoKSB7CisKKyAg
ICAgICAgLy8gVGhpcyBpcyBhIHNpbmdsZXRvbiwgd2UgbmVlZCB0byBleGVjdXRlIGl0IG9ubHkg
b25jZQorICAgICAgICBpZiAoICFkaXYgKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBkaXYuc3R5bGUuY3NzVGV4dCA9CisgICAgICAgICAgICAiYm94LXNpemlu
Zzpib3JkZXItYm94OyIgKworICAgICAgICAgICAgInBvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6
YmxvY2s7IiArCisgICAgICAgICAgICAibWFyZ2luOmF1dG87Ym9yZGVyOjFweDtwYWRkaW5nOjFw
eDsiICsKKyAgICAgICAgICAgICJ0b3A6MSU7d2lkdGg6NTAlIjsKKyAgICAgICAgZGl2LmlubmVy
SFRNTCA9ICIiOworICAgICAgICBkb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoIGNvbnRhaW5l
ciApOworCisgICAgICAgIHZhciBkaXZTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCBk
aXYgKTsKKyAgICAgICAgcGl4ZWxQb3NpdGlvblZhbCA9IGRpdlN0eWxlLnRvcCAhPT0gIjElIjsK
KworICAgICAgICAvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5LCBGaXJlZm94IDw9
MyAtIDQ0CisgICAgICAgIHJlbGlhYmxlTWFyZ2luTGVmdFZhbCA9IGRpdlN0eWxlLm1hcmdpbkxl
ZnQgPT09ICIycHgiOworICAgICAgICBib3hTaXppbmdSZWxpYWJsZVZhbCA9IGRpdlN0eWxlLndp
ZHRoID09PSAiNHB4IjsKKworICAgICAgICAvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBv
bmx5CisgICAgICAgIC8vIFNvbWUgc3R5bGVzIGNvbWUgYmFjayB3aXRoIHBlcmNlbnRhZ2UgdmFs
dWVzLCBldmVuIHRob3VnaCB0aGV5IHNob3VsZG4ndAorICAgICAgICBkaXYuc3R5bGUubWFyZ2lu
UmlnaHQgPSAiNTAlIjsKKyAgICAgICAgcGl4ZWxNYXJnaW5SaWdodFZhbCA9IGRpdlN0eWxlLm1h
cmdpblJpZ2h0ID09PSAiNHB4IjsKKworICAgICAgICBkb2N1bWVudEVsZW1lbnQucmVtb3ZlQ2hp
bGQoIGNvbnRhaW5lciApOworCisgICAgICAgIC8vIE51bGxpZnkgdGhlIGRpdiBzbyBpdCB3b3Vs
ZG4ndCBiZSBzdG9yZWQgaW4gdGhlIG1lbW9yeSBhbmQKKyAgICAgICAgLy8gaXQgd2lsbCBhbHNv
IGJlIGEgc2lnbiB0aGF0IGNoZWNrcyBhbHJlYWR5IHBlcmZvcm1lZAorICAgICAgICBkaXYgPSBu
dWxsOworICAgIH0KKworICAgIHZhciBwaXhlbFBvc2l0aW9uVmFsLCBib3hTaXppbmdSZWxpYWJs
ZVZhbCwgcGl4ZWxNYXJnaW5SaWdodFZhbCwgcmVsaWFibGVNYXJnaW5MZWZ0VmFsLAorICAgICAg
ICBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiZGl2IiApLAorICAgICAgICBk
aXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiZGl2IiApOworCisgICAgLy8gRmluaXNoIGVh
cmx5IGluIGxpbWl0ZWQgKG5vbi1icm93c2VyKSBlbnZpcm9ubWVudHMKKyAgICBpZiAoICFkaXYu
c3R5bGUgKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBTdXBwb3J0OiBJRSA8
PTkgLSAxMSBvbmx5CisgICAgLy8gU3R5bGUgb2YgY2xvbmVkIGVsZW1lbnQgYWZmZWN0cyBzb3Vy
Y2UgZWxlbWVudCBjbG9uZWQgKCM4OTA4KQorICAgIGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9
ICJjb250ZW50LWJveCI7CisgICAgZGl2LmNsb25lTm9kZSggdHJ1ZSApLnN0eWxlLmJhY2tncm91
bmRDbGlwID0gIiI7CisgICAgc3VwcG9ydC5jbGVhckNsb25lU3R5bGUgPSBkaXYuc3R5bGUuYmFj
a2dyb3VuZENsaXAgPT09ICJjb250ZW50LWJveCI7CisKKyAgICBjb250YWluZXIuc3R5bGUuY3Nz
VGV4dCA9ICJib3JkZXI6MDt3aWR0aDo4cHg7aGVpZ2h0OjA7dG9wOjA7bGVmdDotOTk5OXB4OyIg
KworICAgICAgICAicGFkZGluZzowO21hcmdpbi10b3A6MXB4O3Bvc2l0aW9uOmFic29sdXRlIjsK
KyAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoIGRpdiApOworCisgICAgalF1ZXJ5LmV4dGVuZCgg
c3VwcG9ydCwgeworICAgICAgICBwaXhlbFBvc2l0aW9uOiBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgIGNvbXB1dGVTdHlsZVRlc3RzKCk7CisgICAgICAgICAgICByZXR1cm4gcGl4ZWxQb3NpdGlv
blZhbDsKKyAgICAgICAgfSwKKyAgICAgICAgYm94U2l6aW5nUmVsaWFibGU6IGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgY29tcHV0ZVN0eWxlVGVzdHMoKTsKKyAgICAgICAgICAgIHJldHVybiBi
b3hTaXppbmdSZWxpYWJsZVZhbDsKKyAgICAgICAgfSwKKyAgICAgICAgcGl4ZWxNYXJnaW5SaWdo
dDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBjb21wdXRlU3R5bGVUZXN0cygpOworICAgICAg
ICAgICAgcmV0dXJuIHBpeGVsTWFyZ2luUmlnaHRWYWw7CisgICAgICAgIH0sCisgICAgICAgIHJl
bGlhYmxlTWFyZ2luTGVmdDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBjb21wdXRlU3R5bGVU
ZXN0cygpOworICAgICAgICAgICAgcmV0dXJuIHJlbGlhYmxlTWFyZ2luTGVmdFZhbDsKKyAgICAg
ICAgfQorICAgIH0gKTsKK30gKSgpOworCisKK2Z1bmN0aW9uIGN1ckNTUyggZWxlbSwgbmFtZSwg
Y29tcHV0ZWQgKSB7CisgICAgdmFyIHdpZHRoLCBtaW5XaWR0aCwgbWF4V2lkdGgsIHJldCwKKyAg
ICAgICAgc3R5bGUgPSBlbGVtLnN0eWxlOworCisgICAgY29tcHV0ZWQgPSBjb21wdXRlZCB8fCBn
ZXRTdHlsZXMoIGVsZW0gKTsKKworICAgIC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5CisgICAgLy8g
Z2V0UHJvcGVydHlWYWx1ZSBpcyBvbmx5IG5lZWRlZCBmb3IgLmNzcygnZmlsdGVyJykgKCMxMjUz
NykKKyAgICBpZiAoIGNvbXB1dGVkICkgeworICAgICAgICByZXQgPSBjb21wdXRlZC5nZXRQcm9w
ZXJ0eVZhbHVlKCBuYW1lICkgfHwgY29tcHV0ZWRbIG5hbWUgXTsKKworICAgICAgICBpZiAoIHJl
dCA9PT0gIiIgJiYgIWpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICkg
KSB7CisgICAgICAgICAgICByZXQgPSBqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUgKTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIEEgdHJpYnV0ZSB0byB0aGUgImF3ZXNvbWUgaGFjayBieSBEZWFu
IEVkd2FyZHMiCisgICAgICAgIC8vIEFuZHJvaWQgQnJvd3NlciByZXR1cm5zIHBlcmNlbnRhZ2Ug
Zm9yIHNvbWUgdmFsdWVzLAorICAgICAgICAvLyBidXQgd2lkdGggc2VlbXMgdG8gYmUgcmVsaWFi
bHkgcGl4ZWxzLgorICAgICAgICAvLyBUaGlzIGlzIGFnYWluc3QgdGhlIENTU09NIGRyYWZ0IHNw
ZWM6CisgICAgICAgIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3NvbS8jcmVzb2x2ZWQt
dmFsdWVzCisgICAgICAgIGlmICggIXN1cHBvcnQucGl4ZWxNYXJnaW5SaWdodCgpICYmIHJudW1u
b25weC50ZXN0KCByZXQgKSAmJiBybWFyZ2luLnRlc3QoIG5hbWUgKSApIHsKKworICAgICAgICAg
ICAgLy8gUmVtZW1iZXIgdGhlIG9yaWdpbmFsIHZhbHVlcworICAgICAgICAgICAgd2lkdGggPSBz
dHlsZS53aWR0aDsKKyAgICAgICAgICAgIG1pbldpZHRoID0gc3R5bGUubWluV2lkdGg7CisgICAg
ICAgICAgICBtYXhXaWR0aCA9IHN0eWxlLm1heFdpZHRoOworCisgICAgICAgICAgICAvLyBQdXQg
aW4gdGhlIG5ldyB2YWx1ZXMgdG8gZ2V0IGEgY29tcHV0ZWQgdmFsdWUgb3V0CisgICAgICAgICAg
ICBzdHlsZS5taW5XaWR0aCA9IHN0eWxlLm1heFdpZHRoID0gc3R5bGUud2lkdGggPSByZXQ7Cisg
ICAgICAgICAgICByZXQgPSBjb21wdXRlZC53aWR0aDsKKworICAgICAgICAgICAgLy8gUmV2ZXJ0
IHRoZSBjaGFuZ2VkIHZhbHVlcworICAgICAgICAgICAgc3R5bGUud2lkdGggPSB3aWR0aDsKKyAg
ICAgICAgICAgIHN0eWxlLm1pbldpZHRoID0gbWluV2lkdGg7CisgICAgICAgICAgICBzdHlsZS5t
YXhXaWR0aCA9IG1heFdpZHRoOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJldCAh
PT0gdW5kZWZpbmVkID8KKworICAgICAgICAvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5Cisg
ICAgICAgIC8vIElFIHJldHVybnMgekluZGV4IHZhbHVlIGFzIGFuIGludGVnZXIuCisgICAgICAg
IHJldCArICIiIDoKKyAgICAgICAgcmV0OworfQorCisKK2Z1bmN0aW9uIGFkZEdldEhvb2tJZigg
Y29uZGl0aW9uRm4sIGhvb2tGbiApIHsKKworICAgIC8vIERlZmluZSB0aGUgaG9vaywgd2UnbGwg
Y2hlY2sgb24gdGhlIGZpcnN0IHJ1biBpZiBpdCdzIHJlYWxseSBuZWVkZWQuCisgICAgcmV0dXJu
IHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGlmICggY29uZGl0aW9u
Rm4oKSApIHsKKworICAgICAgICAgICAgICAgIC8vIEhvb2sgbm90IG5lZWRlZCAob3IgaXQncyBu
b3QgcG9zc2libGUgdG8gdXNlIGl0IGR1ZQorICAgICAgICAgICAgICAgIC8vIHRvIG1pc3Npbmcg
ZGVwZW5kZW5jeSksIHJlbW92ZSBpdC4KKyAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5nZXQ7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBIb29rIG5lZWRlZDsgcmVkZWZpbmUgaXQgc28gdGhhdCB0aGUgc3VwcG9ydCB0ZXN0IGlzIG5v
dCBleGVjdXRlZCBhZ2Fpbi4KKyAgICAgICAgICAgIHJldHVybiAoIHRoaXMuZ2V0ID0gaG9va0Zu
ICkuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOworICAgICAgICB9CisgICAgfTsKK30KKworCit2
YXIKKworICAgIC8vIFN3YXBwYWJsZSBpZiBkaXNwbGF5IGlzIG5vbmUgb3Igc3RhcnRzIHdpdGgg
dGFibGUKKyAgICAvLyBleGNlcHQgInRhYmxlIiwgInRhYmxlLWNlbGwiLCBvciAidGFibGUtY2Fw
dGlvbiIKKyAgICAvLyBTZWUgaGVyZSBmb3IgZGlzcGxheSB2YWx1ZXM6IGh0dHBzOi8vZGV2ZWxv
cGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ1NTL2Rpc3BsYXkKKyAgICByZGlzcGxheXN3YXAg
PSAvXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sCisgICAgY3NzU2hvdyA9IHsgcG9zaXRpb246
ICJhYnNvbHV0ZSIsIHZpc2liaWxpdHk6ICJoaWRkZW4iLCBkaXNwbGF5OiAiYmxvY2siIH0sCisg
ICAgY3NzTm9ybWFsVHJhbnNmb3JtID0geworICAgICAgICBsZXR0ZXJTcGFjaW5nOiAiMCIsCisg
ICAgICAgIGZvbnRXZWlnaHQ6ICI0MDAiCisgICAgfSwKKworICAgIGNzc1ByZWZpeGVzID0gWyAi
V2Via2l0IiwgIk1veiIsICJtcyIgXSwKKyAgICBlbXB0eVN0eWxlID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCggImRpdiIgKS5zdHlsZTsKKworLy8gUmV0dXJuIGEgY3NzIHByb3BlcnR5IG1hcHBl
ZCB0byBhIHBvdGVudGlhbGx5IHZlbmRvciBwcmVmaXhlZCBwcm9wZXJ0eQorZnVuY3Rpb24gdmVu
ZG9yUHJvcE5hbWUoIG5hbWUgKSB7CisKKyAgICAvLyBTaG9ydGN1dCBmb3IgbmFtZXMgdGhhdCBh
cmUgbm90IHZlbmRvciBwcmVmaXhlZAorICAgIGlmICggbmFtZSBpbiBlbXB0eVN0eWxlICkgewor
ICAgICAgICByZXR1cm4gbmFtZTsKKyAgICB9CisKKyAgICAvLyBDaGVjayBmb3IgdmVuZG9yIHBy
ZWZpeGVkIG5hbWVzCisgICAgdmFyIGNhcE5hbWUgPSBuYW1lWyAwIF0udG9VcHBlckNhc2UoKSAr
IG5hbWUuc2xpY2UoIDEgKSwKKyAgICAgICAgaSA9IGNzc1ByZWZpeGVzLmxlbmd0aDsKKworICAg
IHdoaWxlICggaS0tICkgeworICAgICAgICBuYW1lID0gY3NzUHJlZml4ZXNbIGkgXSArIGNhcE5h
bWU7CisgICAgICAgIGlmICggbmFtZSBpbiBlbXB0eVN0eWxlICkgeworICAgICAgICAgICAgcmV0
dXJuIG5hbWU7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Z1bmN0aW9uIHNldFBvc2l0aXZlTnVt
YmVyKCBlbGVtLCB2YWx1ZSwgc3VidHJhY3QgKSB7CisKKyAgICAvLyBBbnkgcmVsYXRpdmUgKCsv
LSkgdmFsdWVzIGhhdmUgYWxyZWFkeSBiZWVuCisgICAgLy8gbm9ybWFsaXplZCBhdCB0aGlzIHBv
aW50CisgICAgdmFyIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICk7CisgICAgcmV0dXJu
IG1hdGNoZXMgPworCisgICAgICAgIC8vIEd1YXJkIGFnYWluc3QgdW5kZWZpbmVkICJzdWJ0cmFj
dCIsIGUuZy4sIHdoZW4gdXNlZCBhcyBpbiBjc3NIb29rcworICAgICAgICBNYXRoLm1heCggMCwg
bWF0Y2hlc1sgMiBdIC0gKCBzdWJ0cmFjdCB8fCAwICkgKSArICggbWF0Y2hlc1sgMyBdIHx8ICJw
eCIgKSA6CisgICAgICAgIHZhbHVlOworfQorCitmdW5jdGlvbiBhdWdtZW50V2lkdGhPckhlaWdo
dCggZWxlbSwgbmFtZSwgZXh0cmEsIGlzQm9yZGVyQm94LCBzdHlsZXMgKSB7CisgICAgdmFyIGks
CisgICAgICAgIHZhbCA9IDA7CisKKyAgICAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgdGhlIHJpZ2h0
IG1lYXN1cmVtZW50LCBhdm9pZCBhdWdtZW50YXRpb24KKyAgICBpZiAoIGV4dHJhID09PSAoIGlz
Qm9yZGVyQm94ID8gImJvcmRlciIgOiAiY29udGVudCIgKSApIHsKKyAgICAgICAgaSA9IDQ7CisK
KyAgICAvLyBPdGhlcndpc2UgaW5pdGlhbGl6ZSBmb3IgaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBw
cm9wZXJ0aWVzCisgICAgfSBlbHNlIHsKKyAgICAgICAgaSA9IG5hbWUgPT09ICJ3aWR0aCIgPyAx
IDogMDsKKyAgICB9CisKKyAgICBmb3IgKCA7IGkgPCA0OyBpICs9IDIgKSB7CisKKyAgICAgICAg
Ly8gQm90aCBib3ggbW9kZWxzIGV4Y2x1ZGUgbWFyZ2luLCBzbyBhZGQgaXQgaWYgd2Ugd2FudCBp
dAorICAgICAgICBpZiAoIGV4dHJhID09PSAibWFyZ2luIiApIHsKKyAgICAgICAgICAgIHZhbCAr
PSBqUXVlcnkuY3NzKCBlbGVtLCBleHRyYSArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMg
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggaXNCb3JkZXJCb3ggKSB7CisKKyAgICAgICAg
ICAgIC8vIGJvcmRlci1ib3ggaW5jbHVkZXMgcGFkZGluZywgc28gcmVtb3ZlIGl0IGlmIHdlIHdh
bnQgY29udGVudAorICAgICAgICAgICAgaWYgKCBleHRyYSA9PT0gImNvbnRlbnQiICkgeworICAg
ICAgICAgICAgICAgIHZhbCAtPSBqUXVlcnkuY3NzKCBlbGVtLCAicGFkZGluZyIgKyBjc3NFeHBh
bmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v
IEF0IHRoaXMgcG9pbnQsIGV4dHJhIGlzbid0IGJvcmRlciBub3IgbWFyZ2luLCBzbyByZW1vdmUg
Ym9yZGVyCisgICAgICAgICAgICBpZiAoIGV4dHJhICE9PSAibWFyZ2luIiApIHsKKyAgICAgICAg
ICAgICAgICB2YWwgLT0galF1ZXJ5LmNzcyggZWxlbSwgImJvcmRlciIgKyBjc3NFeHBhbmRbIGkg
XSArICJXaWR0aCIsIHRydWUsIHN0eWxlcyApOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgeworCisgICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCBleHRyYSBpc24ndCBjb250ZW50
LCBzbyBhZGQgcGFkZGluZworICAgICAgICAgICAgdmFsICs9IGpRdWVyeS5jc3MoIGVsZW0sICJw
YWRkaW5nIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTsKKworICAgICAgICAgICAg
Ly8gQXQgdGhpcyBwb2ludCwgZXh0cmEgaXNuJ3QgY29udGVudCBub3IgcGFkZGluZywgc28gYWRk
IGJvcmRlcgorICAgICAgICAgICAgaWYgKCBleHRyYSAhPT0gInBhZGRpbmciICkgeworICAgICAg
ICAgICAgICAgIHZhbCArPSBqUXVlcnkuY3NzKCBlbGVtLCAiYm9yZGVyIiArIGNzc0V4cGFuZFsg
aSBdICsgIldpZHRoIiwgdHJ1ZSwgc3R5bGVzICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gdmFsOworfQorCitmdW5jdGlvbiBnZXRXaWR0aE9ySGVpZ2h0
KCBlbGVtLCBuYW1lLCBleHRyYSApIHsKKworICAgIC8vIFN0YXJ0IHdpdGggb2Zmc2V0IHByb3Bl
cnR5LCB3aGljaCBpcyBlcXVpdmFsZW50IHRvIHRoZSBib3JkZXItYm94IHZhbHVlCisgICAgdmFy
IHZhbCwKKyAgICAgICAgdmFsdWVJc0JvcmRlckJveCA9IHRydWUsCisgICAgICAgIHN0eWxlcyA9
IGdldFN0eWxlcyggZWxlbSApLAorICAgICAgICBpc0JvcmRlckJveCA9IGpRdWVyeS5jc3MoIGVs
ZW0sICJib3hTaXppbmciLCBmYWxzZSwgc3R5bGVzICkgPT09ICJib3JkZXItYm94IjsKKworICAg
IC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seQorICAgIC8vIFJ1bm5pbmcgZ2V0Qm91bmRpbmdDbGll
bnRSZWN0IG9uIGEgZGlzY29ubmVjdGVkIG5vZGUKKyAgICAvLyBpbiBJRSB0aHJvd3MgYW4gZXJy
b3IuCisgICAgaWYgKCBlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICkgeworICAgICAgICB2
YWwgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpWyBuYW1lIF07CisgICAgfQorCisgICAg
Ly8gU29tZSBub24taHRtbCBlbGVtZW50cyByZXR1cm4gdW5kZWZpbmVkIGZvciBvZmZzZXRXaWR0
aCwgc28gY2hlY2sgZm9yIG51bGwvdW5kZWZpbmVkCisgICAgLy8gc3ZnIC0gaHR0cHM6Ly9idWd6
aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ5Mjg1CisgICAgLy8gTWF0aE1MIC0g
aHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDkxNjY4CisgICAg
aWYgKCB2YWwgPD0gMCB8fCB2YWwgPT0gbnVsbCApIHsKKworICAgICAgICAvLyBGYWxsIGJhY2sg
dG8gY29tcHV0ZWQgdGhlbiB1bmNvbXB1dGVkIGNzcyBpZiBuZWNlc3NhcnkKKyAgICAgICAgdmFs
ID0gY3VyQ1NTKCBlbGVtLCBuYW1lLCBzdHlsZXMgKTsKKyAgICAgICAgaWYgKCB2YWwgPCAwIHx8
IHZhbCA9PSBudWxsICkgeworICAgICAgICAgICAgdmFsID0gZWxlbS5zdHlsZVsgbmFtZSBdOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gQ29tcHV0ZWQgdW5pdCBpcyBub3QgcGl4ZWxzLiBTdG9w
IGhlcmUgYW5kIHJldHVybi4KKyAgICAgICAgaWYgKCBybnVtbm9ucHgudGVzdCggdmFsICkgKSB7
CisgICAgICAgICAgICByZXR1cm4gdmFsOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ2hlY2sg
Zm9yIHN0eWxlIGluIGNhc2UgYSBicm93c2VyIHdoaWNoIHJldHVybnMgdW5yZWxpYWJsZSB2YWx1
ZXMKKyAgICAgICAgLy8gZm9yIGdldENvbXB1dGVkU3R5bGUgc2lsZW50bHkgZmFsbHMgYmFjayB0
byB0aGUgcmVsaWFibGUgZWxlbS5zdHlsZQorICAgICAgICB2YWx1ZUlzQm9yZGVyQm94ID0gaXNC
b3JkZXJCb3ggJiYKKyAgICAgICAgICAgICggc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSgpIHx8
IHZhbCA9PT0gZWxlbS5zdHlsZVsgbmFtZSBdICk7CisKKyAgICAgICAgLy8gTm9ybWFsaXplICIi
LCBhdXRvLCBhbmQgcHJlcGFyZSBmb3IgZXh0cmEKKyAgICAgICAgdmFsID0gcGFyc2VGbG9hdCgg
dmFsICkgfHwgMDsKKyAgICB9CisKKyAgICAvLyBVc2UgdGhlIGFjdGl2ZSBib3gtc2l6aW5nIG1v
ZGVsIHRvIGFkZC9zdWJ0cmFjdCBpcnJlbGV2YW50IHN0eWxlcworICAgIHJldHVybiAoIHZhbCAr
CisgICAgICAgIGF1Z21lbnRXaWR0aE9ySGVpZ2h0KAorICAgICAgICAgICAgZWxlbSwKKyAgICAg
ICAgICAgIG5hbWUsCisgICAgICAgICAgICBleHRyYSB8fCAoIGlzQm9yZGVyQm94ID8gImJvcmRl
ciIgOiAiY29udGVudCIgKSwKKyAgICAgICAgICAgIHZhbHVlSXNCb3JkZXJCb3gsCisgICAgICAg
ICAgICBzdHlsZXMKKyAgICAgICAgKQorICAgICkgKyAicHgiOworfQorCitqUXVlcnkuZXh0ZW5k
KCB7CisKKyAgICAvLyBBZGQgaW4gc3R5bGUgcHJvcGVydHkgaG9va3MgZm9yIG92ZXJyaWRpbmcg
dGhlIGRlZmF1bHQKKyAgICAvLyBiZWhhdmlvciBvZiBnZXR0aW5nIGFuZCBzZXR0aW5nIGEgc3R5
bGUgcHJvcGVydHkKKyAgICBjc3NIb29rczogeworICAgICAgICBvcGFjaXR5OiB7CisgICAgICAg
ICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIGNvbXB1dGVkICkgeworCisgICAgICAgICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBhbHdh
eXMgZ2V0IGEgbnVtYmVyIGJhY2sgZnJvbSBvcGFjaXR5CisgICAgICAgICAgICAgICAgICAgIHZh
ciByZXQgPSBjdXJDU1MoIGVsZW0sICJvcGFjaXR5IiApOworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gcmV0ID09PSAiIiA/ICIxIiA6IHJldDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9LAorCisgICAgLy8gRG9uJ3QgYXV0b21hdGljYWxseSBh
ZGQgInB4IiB0byB0aGVzZSBwb3NzaWJseS11bml0bGVzcyBwcm9wZXJ0aWVzCisgICAgY3NzTnVt
YmVyOiB7CisgICAgICAgICJhbmltYXRpb25JdGVyYXRpb25Db3VudCI6IHRydWUsCisgICAgICAg
ICJjb2x1bW5Db3VudCI6IHRydWUsCisgICAgICAgICJmaWxsT3BhY2l0eSI6IHRydWUsCisgICAg
ICAgICJmbGV4R3JvdyI6IHRydWUsCisgICAgICAgICJmbGV4U2hyaW5rIjogdHJ1ZSwKKyAgICAg
ICAgImZvbnRXZWlnaHQiOiB0cnVlLAorICAgICAgICAibGluZUhlaWdodCI6IHRydWUsCisgICAg
ICAgICJvcGFjaXR5IjogdHJ1ZSwKKyAgICAgICAgIm9yZGVyIjogdHJ1ZSwKKyAgICAgICAgIm9y
cGhhbnMiOiB0cnVlLAorICAgICAgICAid2lkb3dzIjogdHJ1ZSwKKyAgICAgICAgInpJbmRleCI6
IHRydWUsCisgICAgICAgICJ6b29tIjogdHJ1ZQorICAgIH0sCisKKyAgICAvLyBBZGQgaW4gcHJv
cGVydGllcyB3aG9zZSBuYW1lcyB5b3Ugd2lzaCB0byBmaXggYmVmb3JlCisgICAgLy8gc2V0dGlu
ZyBvciBnZXR0aW5nIHRoZSB2YWx1ZQorICAgIGNzc1Byb3BzOiB7CisgICAgICAgICJmbG9hdCI6
ICJjc3NGbG9hdCIKKyAgICB9LAorCisgICAgLy8gR2V0IGFuZCBzZXQgdGhlIHN0eWxlIHByb3Bl
cnR5IG9uIGEgRE9NIE5vZGUKKyAgICBzdHlsZTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVl
LCBleHRyYSApIHsKKworICAgICAgICAvLyBEb24ndCBzZXQgc3R5bGVzIG9uIHRleHQgYW5kIGNv
bW1lbnQgbm9kZXMKKyAgICAgICAgaWYgKCAhZWxlbSB8fCBlbGVtLm5vZGVUeXBlID09PSAzIHx8
IGVsZW0ubm9kZVR5cGUgPT09IDggfHwgIWVsZW0uc3R5bGUgKSB7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5n
IHdpdGggdGhlIHJpZ2h0IG5hbWUKKyAgICAgICAgdmFyIHJldCwgdHlwZSwgaG9va3MsCisgICAg
ICAgICAgICBvcmlnTmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5hbWUgKSwKKyAgICAgICAgICAg
IHN0eWxlID0gZWxlbS5zdHlsZTsKKworICAgICAgICBuYW1lID0galF1ZXJ5LmNzc1Byb3BzWyBv
cmlnTmFtZSBdIHx8CisgICAgICAgICAgICAoIGpRdWVyeS5jc3NQcm9wc1sgb3JpZ05hbWUgXSA9
IHZlbmRvclByb3BOYW1lKCBvcmlnTmFtZSApIHx8IG9yaWdOYW1lICk7CisKKyAgICAgICAgLy8g
R2V0cyBob29rIGZvciB0aGUgcHJlZml4ZWQgdmVyc2lvbiwgdGhlbiB1bnByZWZpeGVkIHZlcnNp
b24KKyAgICAgICAgaG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3Nz
SG9va3NbIG9yaWdOYW1lIF07CisKKyAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgc2V0dGluZyBh
IHZhbHVlCisgICAgICAgIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAg
IHR5cGUgPSB0eXBlb2YgdmFsdWU7CisKKyAgICAgICAgICAgIC8vIENvbnZlcnQgIis9IiBvciAi
LT0iIHRvIHJlbGF0aXZlIG51bWJlcnMgKCM3MzQ1KQorICAgICAgICAgICAgaWYgKCB0eXBlID09
PSAic3RyaW5nIiAmJiAoIHJldCA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKSApICYmIHJldFsgMSBd
ICkgeworICAgICAgICAgICAgICAgIHZhbHVlID0gYWRqdXN0Q1NTKCBlbGVtLCBuYW1lLCByZXQg
KTsKKworICAgICAgICAgICAgICAgIC8vIEZpeGVzIGJ1ZyAjOTIzNworICAgICAgICAgICAgICAg
IHR5cGUgPSAibnVtYmVyIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTWFrZSBz
dXJlIHRoYXQgbnVsbCBhbmQgTmFOIHZhbHVlcyBhcmVuJ3Qgc2V0ICgjNzExNikKKyAgICAgICAg
ICAgIGlmICggdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSAhPT0gdmFsdWUgKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBJZiBhIG51bWJl
ciB3YXMgcGFzc2VkIGluLCBhZGQgdGhlIHVuaXQgKGV4Y2VwdCBmb3IgY2VydGFpbiBDU1MgcHJv
cGVydGllcykKKyAgICAgICAgICAgIGlmICggdHlwZSA9PT0gIm51bWJlciIgKSB7CisgICAgICAg
ICAgICAgICAgdmFsdWUgKz0gcmV0ICYmIHJldFsgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsg
b3JpZ05hbWUgXSA/ICIiIDogInB4IiApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBiYWNrZ3JvdW5kLSogcHJvcHMgYWZmZWN0IG9yaWdpbmFsIGNsb25lJ3MgdmFsdWVzCisgICAg
ICAgICAgICBpZiAoICFzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSAmJiB2YWx1ZSA9PT0gIiIgJiYg
bmFtZS5pbmRleE9mKCAiYmFja2dyb3VuZCIgKSA9PT0gMCApIHsKKyAgICAgICAgICAgICAgICBz
dHlsZVsgbmFtZSBdID0gImluaGVyaXQiOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkLCB1c2UgdGhhdCB2YWx1ZSwgb3RoZXJ3aXNlIGp1c3Qg
c2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUKKyAgICAgICAgICAgIGlmICggIWhvb2tzIHx8ICEoICJz
ZXQiIGluIGhvb2tzICkgfHwKKyAgICAgICAgICAgICAgICAoIHZhbHVlID0gaG9va3Muc2V0KCBl
bGVtLCB2YWx1ZSwgZXh0cmEgKSApICE9PSB1bmRlZmluZWQgKSB7CisKKyAgICAgICAgICAgICAg
ICBzdHlsZVsgbmFtZSBdID0gdmFsdWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSBlbHNl
IHsKKworICAgICAgICAgICAgLy8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIG5vbi1j
b21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlCisgICAgICAgICAgICBpZiAoIGhvb2tzICYmICJnZXQi
IGluIGhvb2tzICYmCisgICAgICAgICAgICAgICAgKCByZXQgPSBob29rcy5nZXQoIGVsZW0sIGZh
bHNlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHsKKworICAgICAgICAgICAgICAgIHJldHVy
biByZXQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE90aGVyd2lzZSBqdXN0IGdl
dCB0aGUgdmFsdWUgZnJvbSB0aGUgc3R5bGUgb2JqZWN0CisgICAgICAgICAgICByZXR1cm4gc3R5
bGVbIG5hbWUgXTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBjc3M6IGZ1bmN0aW9uKCBlbGVt
LCBuYW1lLCBleHRyYSwgc3R5bGVzICkgeworICAgICAgICB2YXIgdmFsLCBudW0sIGhvb2tzLAor
ICAgICAgICAgICAgb3JpZ05hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lICk7CisKKyAgICAg
ICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lCisg
ICAgICAgIG5hbWUgPSBqUXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0gfHwKKyAgICAgICAgICAg
ICggalF1ZXJ5LmNzc1Byb3BzWyBvcmlnTmFtZSBdID0gdmVuZG9yUHJvcE5hbWUoIG9yaWdOYW1l
ICkgfHwgb3JpZ05hbWUgKTsKKworICAgICAgICAvLyBUcnkgcHJlZml4ZWQgbmFtZSBmb2xsb3dl
ZCBieSB0aGUgdW5wcmVmaXhlZCBuYW1lCisgICAgICAgIGhvb2tzID0galF1ZXJ5LmNzc0hvb2tz
WyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdOworCisgICAgICAgIC8vIElm
IGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBjb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlCisg
ICAgICAgIGlmICggaG9va3MgJiYgImdldCIgaW4gaG9va3MgKSB7CisgICAgICAgICAgICB2YWwg
PSBob29rcy5nZXQoIGVsZW0sIHRydWUsIGV4dHJhICk7CisgICAgICAgIH0KKworICAgICAgICAv
LyBPdGhlcndpc2UsIGlmIGEgd2F5IHRvIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZXhpc3RzLCB1
c2UgdGhhdAorICAgICAgICBpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAg
dmFsID0gY3VyQ1NTKCBlbGVtLCBuYW1lLCBzdHlsZXMgKTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIENvbnZlcnQgIm5vcm1hbCIgdG8gY29tcHV0ZWQgdmFsdWUKKyAgICAgICAgaWYgKCB2YWwg
PT09ICJub3JtYWwiICYmIG5hbWUgaW4gY3NzTm9ybWFsVHJhbnNmb3JtICkgeworICAgICAgICAg
ICAgdmFsID0gY3NzTm9ybWFsVHJhbnNmb3JtWyBuYW1lIF07CisgICAgICAgIH0KKworICAgICAg
ICAvLyBNYWtlIG51bWVyaWMgaWYgZm9yY2VkIG9yIGEgcXVhbGlmaWVyIHdhcyBwcm92aWRlZCBh
bmQgdmFsIGxvb2tzIG51bWVyaWMKKyAgICAgICAgaWYgKCBleHRyYSA9PT0gIiIgfHwgZXh0cmEg
KSB7CisgICAgICAgICAgICBudW0gPSBwYXJzZUZsb2F0KCB2YWwgKTsKKyAgICAgICAgICAgIHJl
dHVybiBleHRyYSA9PT0gdHJ1ZSB8fCBpc0Zpbml0ZSggbnVtICkgPyBudW0gfHwgMCA6IHZhbDsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsOworICAgIH0KK30gKTsKKworalF1ZXJ5LmVh
Y2goIFsgImhlaWdodCIsICJ3aWR0aCIgXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7CisgICAgalF1
ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gPSB7CisgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0sIGNv
bXB1dGVkLCBleHRyYSApIHsKKyAgICAgICAgICAgIGlmICggY29tcHV0ZWQgKSB7CisKKyAgICAg
ICAgICAgICAgICAvLyBDZXJ0YWluIGVsZW1lbnRzIGNhbiBoYXZlIGRpbWVuc2lvbiBpbmZvIGlm
IHdlIGludmlzaWJseSBzaG93IHRoZW0KKyAgICAgICAgICAgICAgICAvLyBidXQgaXQgbXVzdCBo
YXZlIGEgY3VycmVudCBkaXNwbGF5IHN0eWxlIHRoYXQgd291bGQgYmVuZWZpdAorICAgICAgICAg
ICAgICAgIHJldHVybiByZGlzcGxheXN3YXAudGVzdCggalF1ZXJ5LmNzcyggZWxlbSwgImRpc3Bs
YXkiICkgKSAmJgorCisgICAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IFNhZmFyaSA4Kwor
ICAgICAgICAgICAgICAgICAgICAvLyBUYWJsZSBjb2x1bW5zIGluIFNhZmFyaSBoYXZlIG5vbi16
ZXJvIG9mZnNldFdpZHRoICYgemVybworICAgICAgICAgICAgICAgICAgICAvLyBnZXRCb3VuZGlu
Z0NsaWVudFJlY3QoKS53aWR0aCB1bmxlc3MgZGlzcGxheSBpcyBjaGFuZ2VkLgorICAgICAgICAg
ICAgICAgICAgICAvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHkKKyAgICAgICAgICAgICAgICAgICAg
Ly8gUnVubmluZyBnZXRCb3VuZGluZ0NsaWVudFJlY3Qgb24gYSBkaXNjb25uZWN0ZWQgbm9kZQor
ICAgICAgICAgICAgICAgICAgICAvLyBpbiBJRSB0aHJvd3MgYW4gZXJyb3IuCisgICAgICAgICAg
ICAgICAgICAgICggIWVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggfHwgIWVsZW0uZ2V0Qm91
bmRpbmdDbGllbnRSZWN0KCkud2lkdGggKSA/CisgICAgICAgICAgICAgICAgICAgICAgICBzd2Fw
KCBlbGVtLCBjc3NTaG93LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgbmFtZSwgZXh0cmEgKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0gKSA6CisgICAgICAgICAgICAgICAgICAgICAgICBnZXRXaWR0aE9y
SGVpZ2h0KCBlbGVtLCBuYW1lLCBleHRyYSApOworICAgICAgICAgICAgfQorICAgICAgICB9LAor
CisgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBleHRyYSApIHsKKyAgICAgICAg
ICAgIHZhciBtYXRjaGVzLAorICAgICAgICAgICAgICAgIHN0eWxlcyA9IGV4dHJhICYmIGdldFN0
eWxlcyggZWxlbSApLAorICAgICAgICAgICAgICAgIHN1YnRyYWN0ID0gZXh0cmEgJiYgYXVnbWVu
dFdpZHRoT3JIZWlnaHQoCisgICAgICAgICAgICAgICAgICAgIGVsZW0sCisgICAgICAgICAgICAg
ICAgICAgIG5hbWUsCisgICAgICAgICAgICAgICAgICAgIGV4dHJhLAorICAgICAgICAgICAgICAg
ICAgICBqUXVlcnkuY3NzKCBlbGVtLCAiYm94U2l6aW5nIiwgZmFsc2UsIHN0eWxlcyApID09PSAi
Ym9yZGVyLWJveCIsCisgICAgICAgICAgICAgICAgICAgIHN0eWxlcworICAgICAgICAgICAgICAg
ICk7CisKKyAgICAgICAgICAgIC8vIENvbnZlcnQgdG8gcGl4ZWxzIGlmIHZhbHVlIGFkanVzdG1l
bnQgaXMgbmVlZGVkCisgICAgICAgICAgICBpZiAoIHN1YnRyYWN0ICYmICggbWF0Y2hlcyA9IHJj
c3NOdW0uZXhlYyggdmFsdWUgKSApICYmCisgICAgICAgICAgICAgICAgKCBtYXRjaGVzWyAzIF0g
fHwgInB4IiApICE9PSAicHgiICkgeworCisgICAgICAgICAgICAgICAgZWxlbS5zdHlsZVsgbmFt
ZSBdID0gdmFsdWU7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBqUXVlcnkuY3NzKCBlbGVtLCBu
YW1lICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBzZXRQb3NpdGl2ZU51
bWJlciggZWxlbSwgdmFsdWUsIHN1YnRyYWN0ICk7CisgICAgICAgIH0KKyAgICB9OworfSApOwor
CitqUXVlcnkuY3NzSG9va3MubWFyZ2luTGVmdCA9IGFkZEdldEhvb2tJZiggc3VwcG9ydC5yZWxp
YWJsZU1hcmdpbkxlZnQsCisgICAgZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkgeworICAgICAg
ICBpZiAoIGNvbXB1dGVkICkgeworICAgICAgICAgICAgcmV0dXJuICggcGFyc2VGbG9hdCggY3Vy
Q1NTKCBlbGVtLCAibWFyZ2luTGVmdCIgKSApIHx8CisgICAgICAgICAgICAgICAgZWxlbS5nZXRC
b3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0KKyAgICAgICAgICAgICAgICAgICAgc3dhcCggZWxl
bSwgeyBtYXJnaW5MZWZ0OiAwIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDsKKyAgICAgICAgICAg
ICAgICAgICAgfSApCisgICAgICAgICAgICAgICAgKSArICJweCI7CisgICAgICAgIH0KKyAgICB9
CispOworCisvLyBUaGVzZSBob29rcyBhcmUgdXNlZCBieSBhbmltYXRlIHRvIGV4cGFuZCBwcm9w
ZXJ0aWVzCitqUXVlcnkuZWFjaCggeworICAgIG1hcmdpbjogIiIsCisgICAgcGFkZGluZzogIiIs
CisgICAgYm9yZGVyOiAiV2lkdGgiCit9LCBmdW5jdGlvbiggcHJlZml4LCBzdWZmaXggKSB7Cisg
ICAgalF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXSA9IHsKKyAgICAgICAgZXhwYW5k
OiBmdW5jdGlvbiggdmFsdWUgKSB7CisgICAgICAgICAgICB2YXIgaSA9IDAsCisgICAgICAgICAg
ICAgICAgZXhwYW5kZWQgPSB7fSwKKworICAgICAgICAgICAgICAgIC8vIEFzc3VtZXMgYSBzaW5n
bGUgbnVtYmVyIGlmIG5vdCBhIHN0cmluZworICAgICAgICAgICAgICAgIHBhcnRzID0gdHlwZW9m
IHZhbHVlID09PSAic3RyaW5nIiA/IHZhbHVlLnNwbGl0KCAiICIgKSA6IFsgdmFsdWUgXTsKKwor
ICAgICAgICAgICAgZm9yICggOyBpIDwgNDsgaSsrICkgeworICAgICAgICAgICAgICAgIGV4cGFu
ZGVkWyBwcmVmaXggKyBjc3NFeHBhbmRbIGkgXSArIHN1ZmZpeCBdID0KKyAgICAgICAgICAgICAg
ICAgICAgcGFydHNbIGkgXSB8fCBwYXJ0c1sgaSAtIDIgXSB8fCBwYXJ0c1sgMCBdOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gZXhwYW5kZWQ7CisgICAgICAgIH0KKyAgICB9
OworCisgICAgaWYgKCAhcm1hcmdpbi50ZXN0KCBwcmVmaXggKSApIHsKKyAgICAgICAgalF1ZXJ5
LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXS5zZXQgPSBzZXRQb3NpdGl2ZU51bWJlcjsKKyAg
ICB9Cit9ICk7CisKK2pRdWVyeS5mbi5leHRlbmQoIHsKKyAgICBjc3M6IGZ1bmN0aW9uKCBuYW1l
LCB2YWx1ZSApIHsKKyAgICAgICAgcmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0s
IG5hbWUsIHZhbHVlICkgeworICAgICAgICAgICAgdmFyIHN0eWxlcywgbGVuLAorICAgICAgICAg
ICAgICAgIG1hcCA9IHt9LAorICAgICAgICAgICAgICAgIGkgPSAwOworCisgICAgICAgICAgICBp
ZiAoIGpRdWVyeS5pc0FycmF5KCBuYW1lICkgKSB7CisgICAgICAgICAgICAgICAgc3R5bGVzID0g
Z2V0U3R5bGVzKCBlbGVtICk7CisgICAgICAgICAgICAgICAgbGVuID0gbmFtZS5sZW5ndGg7CisK
KyAgICAgICAgICAgICAgICBmb3IgKCA7IGkgPCBsZW47IGkrKyApIHsKKyAgICAgICAgICAgICAg
ICAgICAgbWFwWyBuYW1lWyBpIF0gXSA9IGpRdWVyeS5jc3MoIGVsZW0sIG5hbWVbIGkgXSwgZmFs
c2UsIHN0eWxlcyApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVy
biBtYXA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZSAhPT0gdW5k
ZWZpbmVkID8KKyAgICAgICAgICAgICAgICBqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUsIHZhbHVl
ICkgOgorICAgICAgICAgICAgICAgIGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKTsKKyAgICAgICAg
fSwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7CisgICAgfQorfSApOworCisK
K2Z1bmN0aW9uIFR3ZWVuKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApIHsKKyAg
ICByZXR1cm4gbmV3IFR3ZWVuLnByb3RvdHlwZS5pbml0KCBlbGVtLCBvcHRpb25zLCBwcm9wLCBl
bmQsIGVhc2luZyApOworfQoralF1ZXJ5LlR3ZWVuID0gVHdlZW47CisKK1R3ZWVuLnByb3RvdHlw
ZSA9IHsKKyAgICBjb25zdHJ1Y3RvcjogVHdlZW4sCisgICAgaW5pdDogZnVuY3Rpb24oIGVsZW0s
IG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nLCB1bml0ICkgeworICAgICAgICB0aGlzLmVsZW0g
PSBlbGVtOworICAgICAgICB0aGlzLnByb3AgPSBwcm9wOworICAgICAgICB0aGlzLmVhc2luZyA9
IGVhc2luZyB8fCBqUXVlcnkuZWFzaW5nLl9kZWZhdWx0OworICAgICAgICB0aGlzLm9wdGlvbnMg
PSBvcHRpb25zOworICAgICAgICB0aGlzLnN0YXJ0ID0gdGhpcy5ub3cgPSB0aGlzLmN1cigpOwor
ICAgICAgICB0aGlzLmVuZCA9IGVuZDsKKyAgICAgICAgdGhpcy51bml0ID0gdW5pdCB8fCAoIGpR
dWVyeS5jc3NOdW1iZXJbIHByb3AgXSA/ICIiIDogInB4IiApOworICAgIH0sCisgICAgY3VyOiBm
dW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGhvb2tzID0gVHdlZW4ucHJvcEhvb2tzWyB0aGlzLnBy
b3AgXTsKKworICAgICAgICByZXR1cm4gaG9va3MgJiYgaG9va3MuZ2V0ID8KKyAgICAgICAgICAg
IGhvb2tzLmdldCggdGhpcyApIDoKKyAgICAgICAgICAgIFR3ZWVuLnByb3BIb29rcy5fZGVmYXVs
dC5nZXQoIHRoaXMgKTsKKyAgICB9LAorICAgIHJ1bjogZnVuY3Rpb24oIHBlcmNlbnQgKSB7Cisg
ICAgICAgIHZhciBlYXNlZCwKKyAgICAgICAgICAgIGhvb2tzID0gVHdlZW4ucHJvcEhvb2tzWyB0
aGlzLnByb3AgXTsKKworICAgICAgICBpZiAoIHRoaXMub3B0aW9ucy5kdXJhdGlvbiApIHsKKyAg
ICAgICAgICAgIHRoaXMucG9zID0gZWFzZWQgPSBqUXVlcnkuZWFzaW5nWyB0aGlzLmVhc2luZyBd
KAorICAgICAgICAgICAgICAgIHBlcmNlbnQsIHRoaXMub3B0aW9ucy5kdXJhdGlvbiAqIHBlcmNl
bnQsIDAsIDEsIHRoaXMub3B0aW9ucy5kdXJhdGlvbgorICAgICAgICAgICAgKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMucG9zID0gZWFzZWQgPSBwZXJjZW50OworICAgICAg
ICB9CisgICAgICAgIHRoaXMubm93ID0gKCB0aGlzLmVuZCAtIHRoaXMuc3RhcnQgKSAqIGVhc2Vk
ICsgdGhpcy5zdGFydDsKKworICAgICAgICBpZiAoIHRoaXMub3B0aW9ucy5zdGVwICkgeworICAg
ICAgICAgICAgdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCggdGhpcy5lbGVtLCB0aGlzLm5vdywgdGhp
cyApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBob29rcyAmJiBob29rcy5zZXQgKSB7Cisg
ICAgICAgICAgICBob29rcy5zZXQoIHRoaXMgKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5zZXQoIHRoaXMgKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICB9Cit9OworCitUd2Vlbi5wcm90b3R5cGUuaW5pdC5wcm90
b3R5cGUgPSBUd2Vlbi5wcm90b3R5cGU7CisKK1R3ZWVuLnByb3BIb29rcyA9IHsKKyAgICBfZGVm
YXVsdDogeworICAgICAgICBnZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHsKKyAgICAgICAgICAgIHZh
ciByZXN1bHQ7CisKKyAgICAgICAgICAgIC8vIFVzZSBhIHByb3BlcnR5IG9uIHRoZSBlbGVtZW50
IGRpcmVjdGx5IHdoZW4gaXQgaXMgbm90IGEgRE9NIGVsZW1lbnQsCisgICAgICAgICAgICAvLyBv
ciB3aGVuIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHN0eWxlIHByb3BlcnR5IHRoYXQgZXhpc3RzLgor
ICAgICAgICAgICAgaWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlICE9PSAxIHx8CisgICAgICAgICAg
ICAgICAgdHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdICE9IG51bGwgJiYgdHdlZW4uZWxlbS5zdHls
ZVsgdHdlZW4ucHJvcCBdID09IG51bGwgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHR3ZWVu
LmVsZW1bIHR3ZWVuLnByb3AgXTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gUGFz
c2luZyBhbiBlbXB0eSBzdHJpbmcgYXMgYSAzcmQgcGFyYW1ldGVyIHRvIC5jc3Mgd2lsbCBhdXRv
bWF0aWNhbGx5CisgICAgICAgICAgICAvLyBhdHRlbXB0IGEgcGFyc2VGbG9hdCBhbmQgZmFsbGJh
Y2sgdG8gYSBzdHJpbmcgaWYgdGhlIHBhcnNlIGZhaWxzLgorICAgICAgICAgICAgLy8gU2ltcGxl
IHZhbHVlcyBzdWNoIGFzICIxMHB4IiBhcmUgcGFyc2VkIHRvIEZsb2F0OworICAgICAgICAgICAg
Ly8gY29tcGxleCB2YWx1ZXMgc3VjaCBhcyAicm90YXRlKDFyYWQpIiBhcmUgcmV0dXJuZWQgYXMt
aXMuCisgICAgICAgICAgICByZXN1bHQgPSBqUXVlcnkuY3NzKCB0d2Vlbi5lbGVtLCB0d2Vlbi5w
cm9wLCAiIiApOworCisgICAgICAgICAgICAvLyBFbXB0eSBzdHJpbmdzLCBudWxsLCB1bmRlZmlu
ZWQgYW5kICJhdXRvIiBhcmUgY29udmVydGVkIHRvIDAuCisgICAgICAgICAgICByZXR1cm4gIXJl
c3VsdCB8fCByZXN1bHQgPT09ICJhdXRvIiA/IDAgOiByZXN1bHQ7CisgICAgICAgIH0sCisgICAg
ICAgIHNldDogZnVuY3Rpb24oIHR3ZWVuICkgeworCisgICAgICAgICAgICAvLyBVc2Ugc3RlcCBo
b29rIGZvciBiYWNrIGNvbXBhdC4KKyAgICAgICAgICAgIC8vIFVzZSBjc3NIb29rIGlmIGl0cyB0
aGVyZS4KKyAgICAgICAgICAgIC8vIFVzZSAuc3R5bGUgaWYgYXZhaWxhYmxlIGFuZCB1c2UgcGxh
aW4gcHJvcGVydGllcyB3aGVyZSBhdmFpbGFibGUuCisgICAgICAgICAgICBpZiAoIGpRdWVyeS5m
eC5zdGVwWyB0d2Vlbi5wcm9wIF0gKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5LmZ4LnN0ZXBb
IHR3ZWVuLnByb3AgXSggdHdlZW4gKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIHR3ZWVuLmVs
ZW0ubm9kZVR5cGUgPT09IDEgJiYKKyAgICAgICAgICAgICAgICAoIHR3ZWVuLmVsZW0uc3R5bGVb
IGpRdWVyeS5jc3NQcm9wc1sgdHdlZW4ucHJvcCBdIF0gIT0gbnVsbCB8fAorICAgICAgICAgICAg
ICAgICAgICBqUXVlcnkuY3NzSG9va3NbIHR3ZWVuLnByb3AgXSApICkgeworICAgICAgICAgICAg
ICAgIGpRdWVyeS5zdHlsZSggdHdlZW4uZWxlbSwgdHdlZW4ucHJvcCwgdHdlZW4ubm93ICsgdHdl
ZW4udW5pdCApOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0d2Vlbi5l
bGVtWyB0d2Vlbi5wcm9wIF0gPSB0d2Vlbi5ub3c7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9Cit9OworCisvLyBTdXBwb3J0OiBJRSA8PTkgb25seQorLy8gUGFuaWMgYmFzZWQgYXBw
cm9hY2ggdG8gc2V0dGluZyB0aGluZ3Mgb24gZGlzY29ubmVjdGVkIG5vZGVzCitUd2Vlbi5wcm9w
SG9va3Muc2Nyb2xsVG9wID0gVHdlZW4ucHJvcEhvb2tzLnNjcm9sbExlZnQgPSB7CisgICAgc2V0
OiBmdW5jdGlvbiggdHdlZW4gKSB7CisgICAgICAgIGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSAm
JiB0d2Vlbi5lbGVtLnBhcmVudE5vZGUgKSB7CisgICAgICAgICAgICB0d2Vlbi5lbGVtWyB0d2Vl
bi5wcm9wIF0gPSB0d2Vlbi5ub3c7CisgICAgICAgIH0KKyAgICB9Cit9OworCitqUXVlcnkuZWFz
aW5nID0geworICAgIGxpbmVhcjogZnVuY3Rpb24oIHAgKSB7CisgICAgICAgIHJldHVybiBwOwor
ICAgIH0sCisgICAgc3dpbmc6IGZ1bmN0aW9uKCBwICkgeworICAgICAgICByZXR1cm4gMC41IC0g
TWF0aC5jb3MoIHAgKiBNYXRoLlBJICkgLyAyOworICAgIH0sCisgICAgX2RlZmF1bHQ6ICJzd2lu
ZyIKK307CisKK2pRdWVyeS5meCA9IFR3ZWVuLnByb3RvdHlwZS5pbml0OworCisvLyBCYWNrIGNv
bXBhdCA8MS44IGV4dGVuc2lvbiBwb2ludAoralF1ZXJ5LmZ4LnN0ZXAgPSB7fTsKKworCisKKwor
dmFyCisgICAgZnhOb3csIHRpbWVySWQsCisgICAgcmZ4dHlwZXMgPSAvXig/OnRvZ2dsZXxzaG93
fGhpZGUpJC8sCisgICAgcnJ1biA9IC9xdWV1ZUhvb2tzJC87CisKK2Z1bmN0aW9uIHJhZigpIHsK
KyAgICBpZiAoIHRpbWVySWQgKSB7CisgICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJh
bWUoIHJhZiApOworICAgICAgICBqUXVlcnkuZngudGljaygpOworICAgIH0KK30KKworLy8gQW5p
bWF0aW9ucyBjcmVhdGVkIHN5bmNocm9ub3VzbHkgd2lsbCBydW4gc3luY2hyb25vdXNseQorZnVu
Y3Rpb24gY3JlYXRlRnhOb3coKSB7CisgICAgd2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkg
eworICAgICAgICBmeE5vdyA9IHVuZGVmaW5lZDsKKyAgICB9ICk7CisgICAgcmV0dXJuICggZnhO
b3cgPSBqUXVlcnkubm93KCkgKTsKK30KKworLy8gR2VuZXJhdGUgcGFyYW1ldGVycyB0byBjcmVh
dGUgYSBzdGFuZGFyZCBhbmltYXRpb24KK2Z1bmN0aW9uIGdlbkZ4KCB0eXBlLCBpbmNsdWRlV2lk
dGggKSB7CisgICAgdmFyIHdoaWNoLAorICAgICAgICBpID0gMCwKKyAgICAgICAgYXR0cnMgPSB7
IGhlaWdodDogdHlwZSB9OworCisgICAgLy8gSWYgd2UgaW5jbHVkZSB3aWR0aCwgc3RlcCB2YWx1
ZSBpcyAxIHRvIGRvIGFsbCBjc3NFeHBhbmQgdmFsdWVzLAorICAgIC8vIG90aGVyd2lzZSBzdGVw
IHZhbHVlIGlzIDIgdG8gc2tpcCBvdmVyIExlZnQgYW5kIFJpZ2h0CisgICAgaW5jbHVkZVdpZHRo
ID0gaW5jbHVkZVdpZHRoID8gMSA6IDA7CisgICAgZm9yICggOyBpIDwgNDsgaSArPSAyIC0gaW5j
bHVkZVdpZHRoICkgeworICAgICAgICB3aGljaCA9IGNzc0V4cGFuZFsgaSBdOworICAgICAgICBh
dHRyc1sgIm1hcmdpbiIgKyB3aGljaCBdID0gYXR0cnNbICJwYWRkaW5nIiArIHdoaWNoIF0gPSB0
eXBlOworICAgIH0KKworICAgIGlmICggaW5jbHVkZVdpZHRoICkgeworICAgICAgICBhdHRycy5v
cGFjaXR5ID0gYXR0cnMud2lkdGggPSB0eXBlOworICAgIH0KKworICAgIHJldHVybiBhdHRyczsK
K30KKworZnVuY3Rpb24gY3JlYXRlVHdlZW4oIHZhbHVlLCBwcm9wLCBhbmltYXRpb24gKSB7Cisg
ICAgdmFyIHR3ZWVuLAorICAgICAgICBjb2xsZWN0aW9uID0gKCBBbmltYXRpb24udHdlZW5lcnNb
IHByb3AgXSB8fCBbXSApLmNvbmNhdCggQW5pbWF0aW9uLnR3ZWVuZXJzWyAiKiIgXSApLAorICAg
ICAgICBpbmRleCA9IDAsCisgICAgICAgIGxlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoOworICAg
IGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7CisgICAgICAgIGlmICggKCB0d2Vl
biA9IGNvbGxlY3Rpb25bIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBwcm9wLCB2YWx1ZSApICkg
KSB7CisKKyAgICAgICAgICAgIC8vIFdlJ3JlIGRvbmUgd2l0aCB0aGlzIHByb3BlcnR5CisgICAg
ICAgICAgICByZXR1cm4gdHdlZW47CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Z1bmN0aW9uIGRl
ZmF1bHRQcmVmaWx0ZXIoIGVsZW0sIHByb3BzLCBvcHRzICkgeworICAgIHZhciBwcm9wLCB2YWx1
ZSwgdG9nZ2xlLCBob29rcywgb2xkZmlyZSwgcHJvcFR3ZWVuLCByZXN0b3JlRGlzcGxheSwgZGlz
cGxheSwKKyAgICAgICAgaXNCb3ggPSAid2lkdGgiIGluIHByb3BzIHx8ICJoZWlnaHQiIGluIHBy
b3BzLAorICAgICAgICBhbmltID0gdGhpcywKKyAgICAgICAgb3JpZyA9IHt9LAorICAgICAgICBz
dHlsZSA9IGVsZW0uc3R5bGUsCisgICAgICAgIGhpZGRlbiA9IGVsZW0ubm9kZVR5cGUgJiYgaXNI
aWRkZW5XaXRoaW5UcmVlKCBlbGVtICksCisgICAgICAgIGRhdGFTaG93ID0gZGF0YVByaXYuZ2V0
KCBlbGVtLCAiZnhzaG93IiApOworCisgICAgLy8gUXVldWUtc2tpcHBpbmcgYW5pbWF0aW9ucyBo
aWphY2sgdGhlIGZ4IGhvb2tzCisgICAgaWYgKCAhb3B0cy5xdWV1ZSApIHsKKyAgICAgICAgaG9v
a3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sICJmeCIgKTsKKyAgICAgICAgaWYgKCBob29r
cy51bnF1ZXVlZCA9PSBudWxsICkgeworICAgICAgICAgICAgaG9va3MudW5xdWV1ZWQgPSAwOwor
ICAgICAgICAgICAgb2xkZmlyZSA9IGhvb2tzLmVtcHR5LmZpcmU7CisgICAgICAgICAgICBob29r
cy5lbXB0eS5maXJlID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgaWYgKCAhaG9va3Mu
dW5xdWV1ZWQgKSB7CisgICAgICAgICAgICAgICAgICAgIG9sZGZpcmUoKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgICAgIGhvb2tzLnVucXVldWVk
Kys7CisKKyAgICAgICAgYW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkgeworCisgICAgICAgICAgICAv
LyBFbnN1cmUgdGhlIGNvbXBsZXRlIGhhbmRsZXIgaXMgY2FsbGVkIGJlZm9yZSB0aGlzIGNvbXBs
ZXRlcworICAgICAgICAgICAgYW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ICAgIGhvb2tzLnVucXVldWVkLS07CisgICAgICAgICAgICAgICAgaWYgKCAhalF1ZXJ5LnF1ZXVl
KCBlbGVtLCAiZngiICkubGVuZ3RoICkgeworICAgICAgICAgICAgICAgICAgICBob29rcy5lbXB0
eS5maXJlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSApOworICAgICAgICB9
ICk7CisgICAgfQorCisgICAgLy8gRGV0ZWN0IHNob3cvaGlkZSBhbmltYXRpb25zCisgICAgZm9y
ICggcHJvcCBpbiBwcm9wcyApIHsKKyAgICAgICAgdmFsdWUgPSBwcm9wc1sgcHJvcCBdOworICAg
ICAgICBpZiAoIHJmeHR5cGVzLnRlc3QoIHZhbHVlICkgKSB7CisgICAgICAgICAgICBkZWxldGUg
cHJvcHNbIHByb3AgXTsKKyAgICAgICAgICAgIHRvZ2dsZSA9IHRvZ2dsZSB8fCB2YWx1ZSA9PT0g
InRvZ2dsZSI7CisgICAgICAgICAgICBpZiAoIHZhbHVlID09PSAoIGhpZGRlbiA/ICJoaWRlIiA6
ICJzaG93IiApICkgeworCisgICAgICAgICAgICAgICAgLy8gUHJldGVuZCB0byBiZSBoaWRkZW4g
aWYgdGhpcyBpcyBhICJzaG93IiBhbmQKKyAgICAgICAgICAgICAgICAvLyB0aGVyZSBpcyBzdGls
bCBkYXRhIGZyb20gYSBzdG9wcGVkIHNob3cvaGlkZQorICAgICAgICAgICAgICAgIGlmICggdmFs
dWUgPT09ICJzaG93IiAmJiBkYXRhU2hvdyAmJiBkYXRhU2hvd1sgcHJvcCBdICE9PSB1bmRlZmlu
ZWQgKSB7CisgICAgICAgICAgICAgICAgICAgIGhpZGRlbiA9IHRydWU7CisKKyAgICAgICAgICAg
ICAgICAvLyBJZ25vcmUgYWxsIG90aGVyIG5vLW9wIHNob3cvaGlkZSBkYXRhCisgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgb3JpZ1sgcHJvcCBdID0gZGF0YVNo
b3cgJiYgZGF0YVNob3dbIHByb3AgXSB8fCBqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AgKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIC8vIEJhaWwgb3V0IGlmIHRoaXMgaXMgYSBuby1vcCBsaWtl
IC5oaWRlKCkuaGlkZSgpCisgICAgcHJvcFR3ZWVuID0gIWpRdWVyeS5pc0VtcHR5T2JqZWN0KCBw
cm9wcyApOworICAgIGlmICggIXByb3BUd2VlbiAmJiBqUXVlcnkuaXNFbXB0eU9iamVjdCggb3Jp
ZyApICkgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gUmVzdHJpY3QgIm92ZXJm
bG93IiBhbmQgImRpc3BsYXkiIHN0eWxlcyBkdXJpbmcgYm94IGFuaW1hdGlvbnMKKyAgICBpZiAo
IGlzQm94ICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7CisKKyAgICAgICAgLy8gU3VwcG9ydDog
SUUgPD05IC0gMTEsIEVkZ2UgMTIgLSAxMworICAgICAgICAvLyBSZWNvcmQgYWxsIDMgb3ZlcmZs
b3cgYXR0cmlidXRlcyBiZWNhdXNlIElFIGRvZXMgbm90IGluZmVyIHRoZSBzaG9ydGhhbmQKKyAg
ICAgICAgLy8gZnJvbSBpZGVudGljYWxseS12YWx1ZWQgb3ZlcmZsb3dYIGFuZCBvdmVyZmxvd1kK
KyAgICAgICAgb3B0cy5vdmVyZmxvdyA9IFsgc3R5bGUub3ZlcmZsb3csIHN0eWxlLm92ZXJmbG93
WCwgc3R5bGUub3ZlcmZsb3dZIF07CisKKyAgICAgICAgLy8gSWRlbnRpZnkgYSBkaXNwbGF5IHR5
cGUsIHByZWZlcnJpbmcgb2xkIHNob3cvaGlkZSBkYXRhIG92ZXIgdGhlIENTUyBjYXNjYWRlCisg
ICAgICAgIHJlc3RvcmVEaXNwbGF5ID0gZGF0YVNob3cgJiYgZGF0YVNob3cuZGlzcGxheTsKKyAg
ICAgICAgaWYgKCByZXN0b3JlRGlzcGxheSA9PSBudWxsICkgeworICAgICAgICAgICAgcmVzdG9y
ZURpc3BsYXkgPSBkYXRhUHJpdi5nZXQoIGVsZW0sICJkaXNwbGF5IiApOworICAgICAgICB9Cisg
ICAgICAgIGRpc3BsYXkgPSBqUXVlcnkuY3NzKCBlbGVtLCAiZGlzcGxheSIgKTsKKyAgICAgICAg
aWYgKCBkaXNwbGF5ID09PSAibm9uZSIgKSB7CisgICAgICAgICAgICBpZiAoIHJlc3RvcmVEaXNw
bGF5ICkgeworICAgICAgICAgICAgICAgIGRpc3BsYXkgPSByZXN0b3JlRGlzcGxheTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgICAgICAvLyBHZXQgbm9uZW1wdHkgdmFsdWUo
cykgYnkgdGVtcG9yYXJpbHkgZm9yY2luZyB2aXNpYmlsaXR5CisgICAgICAgICAgICAgICAgc2hv
d0hpZGUoIFsgZWxlbSBdLCB0cnVlICk7CisgICAgICAgICAgICAgICAgcmVzdG9yZURpc3BsYXkg
PSBlbGVtLnN0eWxlLmRpc3BsYXkgfHwgcmVzdG9yZURpc3BsYXk7CisgICAgICAgICAgICAgICAg
ZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW0sICJkaXNwbGF5IiApOworICAgICAgICAgICAgICAg
IHNob3dIaWRlKCBbIGVsZW0gXSApOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgLy8gQW5pbWF0ZSBpbmxpbmUgZWxlbWVudHMgYXMgaW5saW5lLWJsb2NrCisgICAgICAgIGlm
ICggZGlzcGxheSA9PT0gImlubGluZSIgfHwgZGlzcGxheSA9PT0gImlubGluZS1ibG9jayIgJiYg
cmVzdG9yZURpc3BsYXkgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIGlmICggalF1ZXJ5LmNzcygg
ZWxlbSwgImZsb2F0IiApID09PSAibm9uZSIgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBSZXN0
b3JlIHRoZSBvcmlnaW5hbCBkaXNwbGF5IHZhbHVlIGF0IHRoZSBlbmQgb2YgcHVyZSBzaG93L2hp
ZGUgYW5pbWF0aW9ucworICAgICAgICAgICAgICAgIGlmICggIXByb3BUd2VlbiApIHsKKyAgICAg
ICAgICAgICAgICAgICAgYW5pbS5kb25lKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN0eWxlLmRpc3BsYXkgPSByZXN0b3JlRGlzcGxheTsKKyAgICAgICAgICAgICAgICAg
ICAgfSApOworICAgICAgICAgICAgICAgICAgICBpZiAoIHJlc3RvcmVEaXNwbGF5ID09IG51bGwg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5ID0gc3R5bGUuZGlzcGxheTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3RvcmVEaXNwbGF5ID0gZGlzcGxheSA9PT0gIm5vbmUi
ID8gIiIgOiBkaXNwbGF5OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHN0eWxlLmRpc3BsYXkgPSAiaW5saW5lLWJsb2NrIjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICggb3B0cy5vdmVyZmxvdyApIHsK
KyAgICAgICAgc3R5bGUub3ZlcmZsb3cgPSAiaGlkZGVuIjsKKyAgICAgICAgYW5pbS5hbHdheXMo
IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgc3R5bGUub3ZlcmZsb3cgPSBvcHRzLm92ZXJmbG93
WyAwIF07CisgICAgICAgICAgICBzdHlsZS5vdmVyZmxvd1ggPSBvcHRzLm92ZXJmbG93WyAxIF07
CisgICAgICAgICAgICBzdHlsZS5vdmVyZmxvd1kgPSBvcHRzLm92ZXJmbG93WyAyIF07CisgICAg
ICAgIH0gKTsKKyAgICB9CisKKyAgICAvLyBJbXBsZW1lbnQgc2hvdy9oaWRlIGFuaW1hdGlvbnMK
KyAgICBwcm9wVHdlZW4gPSBmYWxzZTsKKyAgICBmb3IgKCBwcm9wIGluIG9yaWcgKSB7CisKKyAg
ICAgICAgLy8gR2VuZXJhbCBzaG93L2hpZGUgc2V0dXAgZm9yIHRoaXMgZWxlbWVudCBhbmltYXRp
b24KKyAgICAgICAgaWYgKCAhcHJvcFR3ZWVuICkgeworICAgICAgICAgICAgaWYgKCBkYXRhU2hv
dyApIHsKKyAgICAgICAgICAgICAgICBpZiAoICJoaWRkZW4iIGluIGRhdGFTaG93ICkgeworICAg
ICAgICAgICAgICAgICAgICBoaWRkZW4gPSBkYXRhU2hvdy5oaWRkZW47CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkYXRhU2hvdyA9IGRh
dGFQcml2LmFjY2VzcyggZWxlbSwgImZ4c2hvdyIsIHsgZGlzcGxheTogcmVzdG9yZURpc3BsYXkg
fSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTdG9yZSBoaWRkZW4vdmlzaWJs
ZSBmb3IgdG9nZ2xlIHNvIGAuc3RvcCgpLnRvZ2dsZSgpYCAicmV2ZXJzZXMiCisgICAgICAgICAg
ICBpZiAoIHRvZ2dsZSApIHsKKyAgICAgICAgICAgICAgICBkYXRhU2hvdy5oaWRkZW4gPSAhaGlk
ZGVuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTaG93IGVsZW1lbnRzIGJlZm9y
ZSBhbmltYXRpbmcgdGhlbQorICAgICAgICAgICAgaWYgKCBoaWRkZW4gKSB7CisgICAgICAgICAg
ICAgICAgc2hvd0hpZGUoIFsgZWxlbSBdLCB0cnVlICk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWxvb3AtZnVuYyAqLworCisgICAgICAgICAgICBh
bmltLmRvbmUoIGZ1bmN0aW9uKCkgeworCisgICAgICAgICAgICAvKiBlc2xpbnQtZW5hYmxlIG5v
LWxvb3AtZnVuYyAqLworCisgICAgICAgICAgICAgICAgLy8gVGhlIGZpbmFsIHN0ZXAgb2YgYSAi
aGlkZSIgYW5pbWF0aW9uIGlzIGFjdHVhbGx5IGhpZGluZyB0aGUgZWxlbWVudAorICAgICAgICAg
ICAgICAgIGlmICggIWhpZGRlbiApIHsKKyAgICAgICAgICAgICAgICAgICAgc2hvd0hpZGUoIFsg
ZWxlbSBdICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRhdGFQcml2LnJl
bW92ZSggZWxlbSwgImZ4c2hvdyIgKTsKKyAgICAgICAgICAgICAgICBmb3IgKCBwcm9wIGluIG9y
aWcgKSB7CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgb3Jp
Z1sgcHJvcCBdICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSApOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gUGVyLXByb3BlcnR5IHNldHVwCisgICAgICAgIHByb3BUd2VlbiA9
IGNyZWF0ZVR3ZWVuKCBoaWRkZW4gPyBkYXRhU2hvd1sgcHJvcCBdIDogMCwgcHJvcCwgYW5pbSAp
OworICAgICAgICBpZiAoICEoIHByb3AgaW4gZGF0YVNob3cgKSApIHsKKyAgICAgICAgICAgIGRh
dGFTaG93WyBwcm9wIF0gPSBwcm9wVHdlZW4uc3RhcnQ7CisgICAgICAgICAgICBpZiAoIGhpZGRl
biApIHsKKyAgICAgICAgICAgICAgICBwcm9wVHdlZW4uZW5kID0gcHJvcFR3ZWVuLnN0YXJ0Owor
ICAgICAgICAgICAgICAgIHByb3BUd2Vlbi5zdGFydCA9IDA7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK2Z1bmN0aW9uIHByb3BGaWx0ZXIoIHByb3BzLCBzcGVjaWFsRWFz
aW5nICkgeworICAgIHZhciBpbmRleCwgbmFtZSwgZWFzaW5nLCB2YWx1ZSwgaG9va3M7CisKKyAg
ICAvLyBjYW1lbENhc2UsIHNwZWNpYWxFYXNpbmcgYW5kIGV4cGFuZCBjc3NIb29rIHBhc3MKKyAg
ICBmb3IgKCBpbmRleCBpbiBwcm9wcyApIHsKKyAgICAgICAgbmFtZSA9IGpRdWVyeS5jYW1lbENh
c2UoIGluZGV4ICk7CisgICAgICAgIGVhc2luZyA9IHNwZWNpYWxFYXNpbmdbIG5hbWUgXTsKKyAg
ICAgICAgdmFsdWUgPSBwcm9wc1sgaW5kZXggXTsKKyAgICAgICAgaWYgKCBqUXVlcnkuaXNBcnJh
eSggdmFsdWUgKSApIHsKKyAgICAgICAgICAgIGVhc2luZyA9IHZhbHVlWyAxIF07CisgICAgICAg
ICAgICB2YWx1ZSA9IHByb3BzWyBpbmRleCBdID0gdmFsdWVbIDAgXTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICggaW5kZXggIT09IG5hbWUgKSB7CisgICAgICAgICAgICBwcm9wc1sgbmFtZSBd
ID0gdmFsdWU7CisgICAgICAgICAgICBkZWxldGUgcHJvcHNbIGluZGV4IF07CisgICAgICAgIH0K
KworICAgICAgICBob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdOworICAgICAgICBpZiAo
IGhvb2tzICYmICJleHBhbmQiIGluIGhvb2tzICkgeworICAgICAgICAgICAgdmFsdWUgPSBob29r
cy5leHBhbmQoIHZhbHVlICk7CisgICAgICAgICAgICBkZWxldGUgcHJvcHNbIG5hbWUgXTsKKwor
ICAgICAgICAgICAgLy8gTm90IHF1aXRlICQuZXh0ZW5kLCB0aGlzIHdvbid0IG92ZXJ3cml0ZSBl
eGlzdGluZyBrZXlzLgorICAgICAgICAgICAgLy8gUmV1c2luZyAnaW5kZXgnIGJlY2F1c2Ugd2Ug
aGF2ZSB0aGUgY29ycmVjdCAibmFtZSIKKyAgICAgICAgICAgIGZvciAoIGluZGV4IGluIHZhbHVl
ICkgeworICAgICAgICAgICAgICAgIGlmICggISggaW5kZXggaW4gcHJvcHMgKSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgcHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgaW5kZXggXTsKKyAgICAgICAg
ICAgICAgICAgICAgc3BlY2lhbEVhc2luZ1sgaW5kZXggXSA9IGVhc2luZzsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzcGVj
aWFsRWFzaW5nWyBuYW1lIF0gPSBlYXNpbmc7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Z1bmN0
aW9uIEFuaW1hdGlvbiggZWxlbSwgcHJvcGVydGllcywgb3B0aW9ucyApIHsKKyAgICB2YXIgcmVz
dWx0LAorICAgICAgICBzdG9wcGVkLAorICAgICAgICBpbmRleCA9IDAsCisgICAgICAgIGxlbmd0
aCA9IEFuaW1hdGlvbi5wcmVmaWx0ZXJzLmxlbmd0aCwKKyAgICAgICAgZGVmZXJyZWQgPSBqUXVl
cnkuRGVmZXJyZWQoKS5hbHdheXMoIGZ1bmN0aW9uKCkgeworCisgICAgICAgICAgICAvLyBEb24n
dCBtYXRjaCBlbGVtIGluIHRoZSA6YW5pbWF0ZWQgc2VsZWN0b3IKKyAgICAgICAgICAgIGRlbGV0
ZSB0aWNrLmVsZW07CisgICAgICAgIH0gKSwKKyAgICAgICAgdGljayA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgaWYgKCBzdG9wcGVkICkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBjdXJyZW50VGltZSA9IGZ4Tm93IHx8
IGNyZWF0ZUZ4Tm93KCksCisgICAgICAgICAgICAgICAgcmVtYWluaW5nID0gTWF0aC5tYXgoIDAs
IGFuaW1hdGlvbi5zdGFydFRpbWUgKyBhbmltYXRpb24uZHVyYXRpb24gLSBjdXJyZW50VGltZSAp
LAorCisgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogQW5kcm9pZCAyLjMgb25seQorICAgICAg
ICAgICAgICAgIC8vIEFyY2hhaWMgY3Jhc2ggYnVnIHdvbid0IGFsbG93IHVzIHRvIHVzZSBgMSAt
ICggMC41IHx8IDAgKWAgKCMxMjQ5NykKKyAgICAgICAgICAgICAgICB0ZW1wID0gcmVtYWluaW5n
IC8gYW5pbWF0aW9uLmR1cmF0aW9uIHx8IDAsCisgICAgICAgICAgICAgICAgcGVyY2VudCA9IDEg
LSB0ZW1wLAorICAgICAgICAgICAgICAgIGluZGV4ID0gMCwKKyAgICAgICAgICAgICAgICBsZW5n
dGggPSBhbmltYXRpb24udHdlZW5zLmxlbmd0aDsKKworICAgICAgICAgICAgZm9yICggOyBpbmRl
eCA8IGxlbmd0aDsgaW5kZXgrKyApIHsKKyAgICAgICAgICAgICAgICBhbmltYXRpb24udHdlZW5z
WyBpbmRleCBdLnJ1biggcGVyY2VudCApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBk
ZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgcGVyY2VudCwgcmVtYWluaW5n
IF0gKTsKKworICAgICAgICAgICAgaWYgKCBwZXJjZW50IDwgMSAmJiBsZW5ndGggKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlbWFpbmluZzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uIF0gKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0s
CisgICAgICAgIGFuaW1hdGlvbiA9IGRlZmVycmVkLnByb21pc2UoIHsKKyAgICAgICAgICAgIGVs
ZW06IGVsZW0sCisgICAgICAgICAgICBwcm9wczogalF1ZXJ5LmV4dGVuZCgge30sIHByb3BlcnRp
ZXMgKSwKKyAgICAgICAgICAgIG9wdHM6IGpRdWVyeS5leHRlbmQoIHRydWUsIHsKKyAgICAgICAg
ICAgICAgICBzcGVjaWFsRWFzaW5nOiB7fSwKKyAgICAgICAgICAgICAgICBlYXNpbmc6IGpRdWVy
eS5lYXNpbmcuX2RlZmF1bHQKKyAgICAgICAgICAgIH0sIG9wdGlvbnMgKSwKKyAgICAgICAgICAg
IG9yaWdpbmFsUHJvcGVydGllczogcHJvcGVydGllcywKKyAgICAgICAgICAgIG9yaWdpbmFsT3B0
aW9uczogb3B0aW9ucywKKyAgICAgICAgICAgIHN0YXJ0VGltZTogZnhOb3cgfHwgY3JlYXRlRnhO
b3coKSwKKyAgICAgICAgICAgIGR1cmF0aW9uOiBvcHRpb25zLmR1cmF0aW9uLAorICAgICAgICAg
ICAgdHdlZW5zOiBbXSwKKyAgICAgICAgICAgIGNyZWF0ZVR3ZWVuOiBmdW5jdGlvbiggcHJvcCwg
ZW5kICkgeworICAgICAgICAgICAgICAgIHZhciB0d2VlbiA9IGpRdWVyeS5Ud2VlbiggZWxlbSwg
YW5pbWF0aW9uLm9wdHMsIHByb3AsIGVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1h
dGlvbi5vcHRzLnNwZWNpYWxFYXNpbmdbIHByb3AgXSB8fCBhbmltYXRpb24ub3B0cy5lYXNpbmcg
KTsKKyAgICAgICAgICAgICAgICBhbmltYXRpb24udHdlZW5zLnB1c2goIHR3ZWVuICk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHR3ZWVuOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHN0
b3A6IGZ1bmN0aW9uKCBnb3RvRW5kICkgeworICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IDAs
CisKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGdvaW5nIHRvIHRoZSBlbmQsIHdl
IHdhbnQgdG8gcnVuIGFsbCB0aGUgdHdlZW5zCisgICAgICAgICAgICAgICAgICAgIC8vIG90aGVy
d2lzZSB3ZSBza2lwIHRoaXMgcGFydAorICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBnb3Rv
RW5kID8gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGggOiAwOworICAgICAgICAgICAgICAgIGlmICgg
c3RvcHBlZCApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIHN0b3BwZWQgPSB0cnVlOworICAgICAgICAgICAgICAg
IGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7CisgICAgICAgICAgICAgICAgICAg
IGFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCAxICk7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgLy8gUmVzb2x2ZSB3aGVuIHdlIHBsYXllZCB0aGUgbGFzdCBmcmFt
ZTsgb3RoZXJ3aXNlLCByZWplY3QKKyAgICAgICAgICAgICAgICBpZiAoIGdvdG9FbmQgKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9u
LCAxLCAwIF0gKTsKKyAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVs
ZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZWplY3RXaXRoKCBlbGVtLCBbIGFuaW1hdGlv
biwgZ290b0VuZCBdICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzOworICAgICAgICAgICAgfQorICAgICAgICB9ICksCisgICAgICAgIHByb3BzID0gYW5p
bWF0aW9uLnByb3BzOworCisgICAgcHJvcEZpbHRlciggcHJvcHMsIGFuaW1hdGlvbi5vcHRzLnNw
ZWNpYWxFYXNpbmcgKTsKKworICAgIGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7
CisgICAgICAgIHJlc3VsdCA9IEFuaW1hdGlvbi5wcmVmaWx0ZXJzWyBpbmRleCBdLmNhbGwoIGFu
aW1hdGlvbiwgZWxlbSwgcHJvcHMsIGFuaW1hdGlvbi5vcHRzICk7CisgICAgICAgIGlmICggcmVz
dWx0ICkgeworICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggcmVzdWx0LnN0b3Ag
KSApIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkuX3F1ZXVlSG9va3MoIGFuaW1hdGlvbi5lbGVt
LCBhbmltYXRpb24ub3B0cy5xdWV1ZSApLnN0b3AgPQorICAgICAgICAgICAgICAgICAgICBqUXVl
cnkucHJveHkoIHJlc3VsdC5zdG9wLCByZXN1bHQgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBqUXVlcnkubWFwKCBw
cm9wcywgY3JlYXRlVHdlZW4sIGFuaW1hdGlvbiApOworCisgICAgaWYgKCBqUXVlcnkuaXNGdW5j
dGlvbiggYW5pbWF0aW9uLm9wdHMuc3RhcnQgKSApIHsKKyAgICAgICAgYW5pbWF0aW9uLm9wdHMu
c3RhcnQuY2FsbCggZWxlbSwgYW5pbWF0aW9uICk7CisgICAgfQorCisgICAgalF1ZXJ5LmZ4LnRp
bWVyKAorICAgICAgICBqUXVlcnkuZXh0ZW5kKCB0aWNrLCB7CisgICAgICAgICAgICBlbGVtOiBl
bGVtLAorICAgICAgICAgICAgYW5pbTogYW5pbWF0aW9uLAorICAgICAgICAgICAgcXVldWU6IGFu
aW1hdGlvbi5vcHRzLnF1ZXVlCisgICAgICAgIH0gKQorICAgICk7CisKKyAgICAvLyBhdHRhY2gg
Y2FsbGJhY2tzIGZyb20gb3B0aW9ucworICAgIHJldHVybiBhbmltYXRpb24ucHJvZ3Jlc3MoIGFu
aW1hdGlvbi5vcHRzLnByb2dyZXNzICkKKyAgICAgICAgLmRvbmUoIGFuaW1hdGlvbi5vcHRzLmRv
bmUsIGFuaW1hdGlvbi5vcHRzLmNvbXBsZXRlICkKKyAgICAgICAgLmZhaWwoIGFuaW1hdGlvbi5v
cHRzLmZhaWwgKQorICAgICAgICAuYWx3YXlzKCBhbmltYXRpb24ub3B0cy5hbHdheXMgKTsKK30K
KworalF1ZXJ5LkFuaW1hdGlvbiA9IGpRdWVyeS5leHRlbmQoIEFuaW1hdGlvbiwgeworCisgICAg
dHdlZW5lcnM6IHsKKyAgICAgICAgIioiOiBbIGZ1bmN0aW9uKCBwcm9wLCB2YWx1ZSApIHsKKyAg
ICAgICAgICAgIHZhciB0d2VlbiA9IHRoaXMuY3JlYXRlVHdlZW4oIHByb3AsIHZhbHVlICk7Cisg
ICAgICAgICAgICBhZGp1c3RDU1MoIHR3ZWVuLmVsZW0sIHByb3AsIHJjc3NOdW0uZXhlYyggdmFs
dWUgKSwgdHdlZW4gKTsKKyAgICAgICAgICAgIHJldHVybiB0d2VlbjsKKyAgICAgICAgfSBdCisg
ICAgfSwKKworICAgIHR3ZWVuZXI6IGZ1bmN0aW9uKCBwcm9wcywgY2FsbGJhY2sgKSB7CisgICAg
ICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHByb3BzICkgKSB7CisgICAgICAgICAgICBjYWxs
YmFjayA9IHByb3BzOworICAgICAgICAgICAgcHJvcHMgPSBbICIqIiBdOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgcHJvcHMgPSBwcm9wcy5tYXRjaCggcm5vdGh0bWx3aGl0ZSApOwor
ICAgICAgICB9CisKKyAgICAgICAgdmFyIHByb3AsCisgICAgICAgICAgICBpbmRleCA9IDAsCisg
ICAgICAgICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7CisKKyAgICAgICAgZm9yICggOyBpbmRl
eCA8IGxlbmd0aDsgaW5kZXgrKyApIHsKKyAgICAgICAgICAgIHByb3AgPSBwcm9wc1sgaW5kZXgg
XTsKKyAgICAgICAgICAgIEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdID0gQW5pbWF0aW9uLnR3
ZWVuZXJzWyBwcm9wIF0gfHwgW107CisgICAgICAgICAgICBBbmltYXRpb24udHdlZW5lcnNbIHBy
b3AgXS51bnNoaWZ0KCBjYWxsYmFjayApOworICAgICAgICB9CisgICAgfSwKKworICAgIHByZWZp
bHRlcnM6IFsgZGVmYXVsdFByZWZpbHRlciBdLAorCisgICAgcHJlZmlsdGVyOiBmdW5jdGlvbigg
Y2FsbGJhY2ssIHByZXBlbmQgKSB7CisgICAgICAgIGlmICggcHJlcGVuZCApIHsKKyAgICAgICAg
ICAgIEFuaW1hdGlvbi5wcmVmaWx0ZXJzLnVuc2hpZnQoIGNhbGxiYWNrICk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBBbmltYXRpb24ucHJlZmlsdGVycy5wdXNoKCBjYWxsYmFjayAp
OworICAgICAgICB9CisgICAgfQorfSApOworCitqUXVlcnkuc3BlZWQgPSBmdW5jdGlvbiggc3Bl
ZWQsIGVhc2luZywgZm4gKSB7CisgICAgdmFyIG9wdCA9IHNwZWVkICYmIHR5cGVvZiBzcGVlZCA9
PT0gIm9iamVjdCIgPyBqUXVlcnkuZXh0ZW5kKCB7fSwgc3BlZWQgKSA6IHsKKyAgICAgICAgY29t
cGxldGU6IGZuIHx8ICFmbiAmJiBlYXNpbmcgfHwKKyAgICAgICAgICAgIGpRdWVyeS5pc0Z1bmN0
aW9uKCBzcGVlZCApICYmIHNwZWVkLAorICAgICAgICBkdXJhdGlvbjogc3BlZWQsCisgICAgICAg
IGVhc2luZzogZm4gJiYgZWFzaW5nIHx8IGVhc2luZyAmJiAhalF1ZXJ5LmlzRnVuY3Rpb24oIGVh
c2luZyApICYmIGVhc2luZworICAgIH07CisKKyAgICAvLyBHbyB0byB0aGUgZW5kIHN0YXRlIGlm
IGZ4IGFyZSBvZmYgb3IgaWYgZG9jdW1lbnQgaXMgaGlkZGVuCisgICAgaWYgKCBqUXVlcnkuZngu
b2ZmIHx8IGRvY3VtZW50LmhpZGRlbiApIHsKKyAgICAgICAgb3B0LmR1cmF0aW9uID0gMDsKKwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGlmICggdHlwZW9mIG9wdC5kdXJhdGlvbiAhPT0gIm51bWJl
ciIgKSB7CisgICAgICAgICAgICBpZiAoIG9wdC5kdXJhdGlvbiBpbiBqUXVlcnkuZnguc3BlZWRz
ICkgeworICAgICAgICAgICAgICAgIG9wdC5kdXJhdGlvbiA9IGpRdWVyeS5meC5zcGVlZHNbIG9w
dC5kdXJhdGlvbiBdOworCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG9w
dC5kdXJhdGlvbiA9IGpRdWVyeS5meC5zcGVlZHMuX2RlZmF1bHQ7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBOb3JtYWxpemUgb3B0LnF1ZXVlIC0gdHJ1ZS91bmRl
ZmluZWQvbnVsbCAtPiAiZngiCisgICAgaWYgKCBvcHQucXVldWUgPT0gbnVsbCB8fCBvcHQucXVl
dWUgPT09IHRydWUgKSB7CisgICAgICAgIG9wdC5xdWV1ZSA9ICJmeCI7CisgICAgfQorCisgICAg
Ly8gUXVldWVpbmcKKyAgICBvcHQub2xkID0gb3B0LmNvbXBsZXRlOworCisgICAgb3B0LmNvbXBs
ZXRlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIG9wdC5v
bGQgKSApIHsKKyAgICAgICAgICAgIG9wdC5vbGQuY2FsbCggdGhpcyApOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKCBvcHQucXVldWUgKSB7CisgICAgICAgICAgICBqUXVlcnkuZGVxdWV1ZSgg
dGhpcywgb3B0LnF1ZXVlICk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgcmV0dXJuIG9wdDsK
K307CisKK2pRdWVyeS5mbi5leHRlbmQoIHsKKyAgICBmYWRlVG86IGZ1bmN0aW9uKCBzcGVlZCwg
dG8sIGVhc2luZywgY2FsbGJhY2sgKSB7CisKKyAgICAgICAgLy8gU2hvdyBhbnkgaGlkZGVuIGVs
ZW1lbnRzIGFmdGVyIHNldHRpbmcgb3BhY2l0eSB0byAwCisgICAgICAgIHJldHVybiB0aGlzLmZp
bHRlciggaXNIaWRkZW5XaXRoaW5UcmVlICkuY3NzKCAib3BhY2l0eSIsIDAgKS5zaG93KCkKKwor
ICAgICAgICAgICAgLy8gQW5pbWF0ZSB0byB0aGUgdmFsdWUgc3BlY2lmaWVkCisgICAgICAgICAg
ICAuZW5kKCkuYW5pbWF0ZSggeyBvcGFjaXR5OiB0byB9LCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFj
ayApOworICAgIH0sCisgICAgYW5pbWF0ZTogZnVuY3Rpb24oIHByb3AsIHNwZWVkLCBlYXNpbmcs
IGNhbGxiYWNrICkgeworICAgICAgICB2YXIgZW1wdHkgPSBqUXVlcnkuaXNFbXB0eU9iamVjdCgg
cHJvcCApLAorICAgICAgICAgICAgb3B0YWxsID0galF1ZXJ5LnNwZWVkKCBzcGVlZCwgZWFzaW5n
LCBjYWxsYmFjayApLAorICAgICAgICAgICAgZG9BbmltYXRpb24gPSBmdW5jdGlvbigpIHsKKwor
ICAgICAgICAgICAgICAgIC8vIE9wZXJhdGUgb24gYSBjb3B5IG9mIHByb3Agc28gcGVyLXByb3Bl
cnR5IGVhc2luZyB3b24ndCBiZSBsb3N0CisgICAgICAgICAgICAgICAgdmFyIGFuaW0gPSBBbmlt
YXRpb24oIHRoaXMsIGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wICksIG9wdGFsbCApOworCisgICAg
ICAgICAgICAgICAgLy8gRW1wdHkgYW5pbWF0aW9ucywgb3IgZmluaXNoaW5nIHJlc29sdmVzIGlt
bWVkaWF0ZWx5CisgICAgICAgICAgICAgICAgaWYgKCBlbXB0eSB8fCBkYXRhUHJpdi5nZXQoIHRo
aXMsICJmaW5pc2giICkgKSB7CisgICAgICAgICAgICAgICAgICAgIGFuaW0uc3RvcCggdHJ1ZSAp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBkb0FuaW1h
dGlvbi5maW5pc2ggPSBkb0FuaW1hdGlvbjsKKworICAgICAgICByZXR1cm4gZW1wdHkgfHwgb3B0
YWxsLnF1ZXVlID09PSBmYWxzZSA/CisgICAgICAgICAgICB0aGlzLmVhY2goIGRvQW5pbWF0aW9u
ICkgOgorICAgICAgICAgICAgdGhpcy5xdWV1ZSggb3B0YWxsLnF1ZXVlLCBkb0FuaW1hdGlvbiAp
OworICAgIH0sCisgICAgc3RvcDogZnVuY3Rpb24oIHR5cGUsIGNsZWFyUXVldWUsIGdvdG9FbmQg
KSB7CisgICAgICAgIHZhciBzdG9wUXVldWUgPSBmdW5jdGlvbiggaG9va3MgKSB7CisgICAgICAg
ICAgICB2YXIgc3RvcCA9IGhvb2tzLnN0b3A7CisgICAgICAgICAgICBkZWxldGUgaG9va3Muc3Rv
cDsKKyAgICAgICAgICAgIHN0b3AoIGdvdG9FbmQgKTsKKyAgICAgICAgfTsKKworICAgICAgICBp
ZiAoIHR5cGVvZiB0eXBlICE9PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgIGdvdG9FbmQgPSBj
bGVhclF1ZXVlOworICAgICAgICAgICAgY2xlYXJRdWV1ZSA9IHR5cGU7CisgICAgICAgICAgICB0
eXBlID0gdW5kZWZpbmVkOworICAgICAgICB9CisgICAgICAgIGlmICggY2xlYXJRdWV1ZSAmJiB0
eXBlICE9PSBmYWxzZSApIHsKKyAgICAgICAgICAgIHRoaXMucXVldWUoIHR5cGUgfHwgImZ4Iiwg
W10gKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgdmFyIGRlcXVldWUgPSB0cnVlLAorICAgICAgICAgICAgICAgIGluZGV4
ID0gdHlwZSAhPSBudWxsICYmIHR5cGUgKyAicXVldWVIb29rcyIsCisgICAgICAgICAgICAgICAg
dGltZXJzID0galF1ZXJ5LnRpbWVycywKKyAgICAgICAgICAgICAgICBkYXRhID0gZGF0YVByaXYu
Z2V0KCB0aGlzICk7CisKKyAgICAgICAgICAgIGlmICggaW5kZXggKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCApIHsKKyAgICAgICAg
ICAgICAgICAgICAgc3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmb3IgKCBpbmRleCBpbiBk
YXRhICkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsg
aW5kZXggXS5zdG9wICYmIHJydW4udGVzdCggaW5kZXggKSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKCBp
bmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkgeworICAgICAgICAgICAgICAgIGlmICgg
dGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRoaXMgJiYKKyAgICAgICAgICAgICAgICAgICAgKCB0
eXBlID09IG51bGwgfHwgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlICkgKSB7CisKKyAg
ICAgICAgICAgICAgICAgICAgdGltZXJzWyBpbmRleCBdLmFuaW0uc3RvcCggZ290b0VuZCApOwor
ICAgICAgICAgICAgICAgICAgICBkZXF1ZXVlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAg
IHRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBTdGFydCB0aGUgbmV4dCBpbiB0aGUgcXVldWUgaWYgdGhl
IGxhc3Qgc3RlcCB3YXNuJ3QgZm9yY2VkLgorICAgICAgICAgICAgLy8gVGltZXJzIGN1cnJlbnRs
eSB3aWxsIGNhbGwgdGhlaXIgY29tcGxldGUgY2FsbGJhY2tzLCB3aGljaAorICAgICAgICAgICAg
Ly8gd2lsbCBkZXF1ZXVlIGJ1dCBvbmx5IGlmIHRoZXkgd2VyZSBnb3RvRW5kLgorICAgICAgICAg
ICAgaWYgKCBkZXF1ZXVlIHx8ICFnb3RvRW5kICkgeworICAgICAgICAgICAgICAgIGpRdWVyeS5k
ZXF1ZXVlKCB0aGlzLCB0eXBlICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gKTsKKyAgICB9
LAorICAgIGZpbmlzaDogZnVuY3Rpb24oIHR5cGUgKSB7CisgICAgICAgIGlmICggdHlwZSAhPT0g
ZmFsc2UgKSB7CisgICAgICAgICAgICB0eXBlID0gdHlwZSB8fCAiZngiOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdmFyIGlu
ZGV4LAorICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKSwKKyAgICAg
ICAgICAgICAgICBxdWV1ZSA9IGRhdGFbIHR5cGUgKyAicXVldWUiIF0sCisgICAgICAgICAgICAg
ICAgaG9va3MgPSBkYXRhWyB0eXBlICsgInF1ZXVlSG9va3MiIF0sCisgICAgICAgICAgICAgICAg
dGltZXJzID0galF1ZXJ5LnRpbWVycywKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBxdWV1ZSA/
IHF1ZXVlLmxlbmd0aCA6IDA7CisKKyAgICAgICAgICAgIC8vIEVuYWJsZSBmaW5pc2hpbmcgZmxh
ZyBvbiBwcml2YXRlIGRhdGEKKyAgICAgICAgICAgIGRhdGEuZmluaXNoID0gdHJ1ZTsKKworICAg
ICAgICAgICAgLy8gRW1wdHkgdGhlIHF1ZXVlIGZpcnN0CisgICAgICAgICAgICBqUXVlcnkucXVl
dWUoIHRoaXMsIHR5cGUsIFtdICk7CisKKyAgICAgICAgICAgIGlmICggaG9va3MgJiYgaG9va3Mu
c3RvcCApIHsKKyAgICAgICAgICAgICAgICBob29rcy5zdG9wLmNhbGwoIHRoaXMsIHRydWUgKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTG9vayBmb3IgYW55IGFjdGl2ZSBhbmlt
YXRpb25zLCBhbmQgZmluaXNoIHRoZW0KKyAgICAgICAgICAgIGZvciAoIGluZGV4ID0gdGltZXJz
Lmxlbmd0aDsgaW5kZXgtLTsgKSB7CisgICAgICAgICAgICAgICAgaWYgKCB0aW1lcnNbIGluZGV4
IF0uZWxlbSA9PT0gdGhpcyAmJiB0aW1lcnNbIGluZGV4IF0ucXVldWUgPT09IHR5cGUgKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIHRydWUgKTsKKyAg
ICAgICAgICAgICAgICAgICAgdGltZXJzLnNwbGljZSggaW5kZXgsIDEgKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIExvb2sgZm9yIGFueSBhbmlt
YXRpb25zIGluIHRoZSBvbGQgcXVldWUgYW5kIGZpbmlzaCB0aGVtCisgICAgICAgICAgICBmb3Ig
KCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkgeworICAgICAgICAgICAgICAg
IGlmICggcXVldWVbIGluZGV4IF0gJiYgcXVldWVbIGluZGV4IF0uZmluaXNoICkgeworICAgICAg
ICAgICAgICAgICAgICBxdWV1ZVsgaW5kZXggXS5maW5pc2guY2FsbCggdGhpcyApOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVHVybiBvZmYgZmlu
aXNoaW5nIGZsYWcKKyAgICAgICAgICAgIGRlbGV0ZSBkYXRhLmZpbmlzaDsKKyAgICAgICAgfSAp
OworICAgIH0KK30gKTsKKworalF1ZXJ5LmVhY2goIFsgInRvZ2dsZSIsICJzaG93IiwgImhpZGUi
IF0sIGZ1bmN0aW9uKCBpLCBuYW1lICkgeworICAgIHZhciBjc3NGbiA9IGpRdWVyeS5mblsgbmFt
ZSBdOworICAgIGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNh
bGxiYWNrICkgeworICAgICAgICByZXR1cm4gc3BlZWQgPT0gbnVsbCB8fCB0eXBlb2Ygc3BlZWQg
PT09ICJib29sZWFuIiA/CisgICAgICAgICAgICBjc3NGbi5hcHBseSggdGhpcywgYXJndW1lbnRz
ICkgOgorICAgICAgICAgICAgdGhpcy5hbmltYXRlKCBnZW5GeCggbmFtZSwgdHJ1ZSApLCBzcGVl
ZCwgZWFzaW5nLCBjYWxsYmFjayApOworICAgIH07Cit9ICk7CisKKy8vIEdlbmVyYXRlIHNob3J0
Y3V0cyBmb3IgY3VzdG9tIGFuaW1hdGlvbnMKK2pRdWVyeS5lYWNoKCB7CisgICAgc2xpZGVEb3du
OiBnZW5GeCggInNob3ciICksCisgICAgc2xpZGVVcDogZ2VuRngoICJoaWRlIiApLAorICAgIHNs
aWRlVG9nZ2xlOiBnZW5GeCggInRvZ2dsZSIgKSwKKyAgICBmYWRlSW46IHsgb3BhY2l0eTogInNo
b3ciIH0sCisgICAgZmFkZU91dDogeyBvcGFjaXR5OiAiaGlkZSIgfSwKKyAgICBmYWRlVG9nZ2xl
OiB7IG9wYWNpdHk6ICJ0b2dnbGUiIH0KK30sIGZ1bmN0aW9uKCBuYW1lLCBwcm9wcyApIHsKKyAg
ICBqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayAp
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuYW5pbWF0ZSggcHJvcHMsIHNwZWVkLCBlYXNpbmcsIGNh
bGxiYWNrICk7CisgICAgfTsKK30gKTsKKworalF1ZXJ5LnRpbWVycyA9IFtdOworalF1ZXJ5LmZ4
LnRpY2sgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgdGltZXIsCisgICAgICAgIGkgPSAwLAorICAg
ICAgICB0aW1lcnMgPSBqUXVlcnkudGltZXJzOworCisgICAgZnhOb3cgPSBqUXVlcnkubm93KCk7
CisKKyAgICBmb3IgKCA7IGkgPCB0aW1lcnMubGVuZ3RoOyBpKysgKSB7CisgICAgICAgIHRpbWVy
ID0gdGltZXJzWyBpIF07CisKKyAgICAgICAgLy8gQ2hlY2tzIHRoZSB0aW1lciBoYXMgbm90IGFs
cmVhZHkgYmVlbiByZW1vdmVkCisgICAgICAgIGlmICggIXRpbWVyKCkgJiYgdGltZXJzWyBpIF0g
PT09IHRpbWVyICkgeworICAgICAgICAgICAgdGltZXJzLnNwbGljZSggaS0tLCAxICk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAoICF0aW1lcnMubGVuZ3RoICkgeworICAgICAgICBqUXVl
cnkuZnguc3RvcCgpOworICAgIH0KKyAgICBmeE5vdyA9IHVuZGVmaW5lZDsKK307CisKK2pRdWVy
eS5meC50aW1lciA9IGZ1bmN0aW9uKCB0aW1lciApIHsKKyAgICBqUXVlcnkudGltZXJzLnB1c2go
IHRpbWVyICk7CisgICAgaWYgKCB0aW1lcigpICkgeworICAgICAgICBqUXVlcnkuZnguc3RhcnQo
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBqUXVlcnkudGltZXJzLnBvcCgpOworICAgIH0KK307
CisKK2pRdWVyeS5meC5pbnRlcnZhbCA9IDEzOworalF1ZXJ5LmZ4LnN0YXJ0ID0gZnVuY3Rpb24o
KSB7CisgICAgaWYgKCAhdGltZXJJZCApIHsKKyAgICAgICAgdGltZXJJZCA9IHdpbmRvdy5yZXF1
ZXN0QW5pbWF0aW9uRnJhbWUgPworICAgICAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25G
cmFtZSggcmFmICkgOgorICAgICAgICAgICAgd2luZG93LnNldEludGVydmFsKCBqUXVlcnkuZngu
dGljaywgalF1ZXJ5LmZ4LmludGVydmFsICk7CisgICAgfQorfTsKKworalF1ZXJ5LmZ4LnN0b3Ag
PSBmdW5jdGlvbigpIHsKKyAgICBpZiAoIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSApIHsK
KyAgICAgICAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKCB0aW1lcklkICk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwoIHRpbWVySWQgKTsKKyAgICB9CisK
KyAgICB0aW1lcklkID0gbnVsbDsKK307CisKK2pRdWVyeS5meC5zcGVlZHMgPSB7CisgICAgc2xv
dzogNjAwLAorICAgIGZhc3Q6IDIwMCwKKworICAgIC8vIERlZmF1bHQgc3BlZWQKKyAgICBfZGVm
YXVsdDogNDAwCit9OworCisKKy8vIEJhc2VkIG9mZiBvZiB0aGUgcGx1Z2luIGJ5IENsaW50IEhl
bGZlcnMsIHdpdGggcGVybWlzc2lvbi4KKy8vIGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8y
MDEwMDMyNDAxNDc0Ny9odHRwOi8vYmxpbmRzaWduYWxzLmNvbS9pbmRleC5waHAvMjAwOS8wNy9q
cXVlcnktZGVsYXkvCitqUXVlcnkuZm4uZGVsYXkgPSBmdW5jdGlvbiggdGltZSwgdHlwZSApIHsK
KyAgICB0aW1lID0galF1ZXJ5LmZ4ID8galF1ZXJ5LmZ4LnNwZWVkc1sgdGltZSBdIHx8IHRpbWUg
OiB0aW1lOworICAgIHR5cGUgPSB0eXBlIHx8ICJmeCI7CisKKyAgICByZXR1cm4gdGhpcy5xdWV1
ZSggdHlwZSwgZnVuY3Rpb24oIG5leHQsIGhvb2tzICkgeworICAgICAgICB2YXIgdGltZW91dCA9
IHdpbmRvdy5zZXRUaW1lb3V0KCBuZXh0LCB0aW1lICk7CisgICAgICAgIGhvb2tzLnN0b3AgPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQoIHRpbWVvdXQgKTsK
KyAgICAgICAgfTsKKyAgICB9ICk7Cit9OworCisKKyggZnVuY3Rpb24oKSB7CisgICAgdmFyIGlu
cHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImlucHV0IiApLAorICAgICAgICBzZWxlY3Qg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAic2VsZWN0IiApLAorICAgICAgICBvcHQgPSBzZWxl
Y3QuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJvcHRpb24iICkgKTsKKwor
ICAgIGlucHV0LnR5cGUgPSAiY2hlY2tib3giOworCisgICAgLy8gU3VwcG9ydDogQW5kcm9pZCA8
PTQuMyBvbmx5CisgICAgLy8gRGVmYXVsdCB2YWx1ZSBmb3IgYSBjaGVja2JveCBzaG91bGQgYmUg
Im9uIgorICAgIHN1cHBvcnQuY2hlY2tPbiA9IGlucHV0LnZhbHVlICE9PSAiIjsKKworICAgIC8v
IFN1cHBvcnQ6IElFIDw9MTEgb25seQorICAgIC8vIE11c3QgYWNjZXNzIHNlbGVjdGVkSW5kZXgg
dG8gbWFrZSBkZWZhdWx0IG9wdGlvbnMgc2VsZWN0CisgICAgc3VwcG9ydC5vcHRTZWxlY3RlZCA9
IG9wdC5zZWxlY3RlZDsKKworICAgIC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seQorICAgIC8vIEFu
IGlucHV0IGxvc2VzIGl0cyB2YWx1ZSBhZnRlciBiZWNvbWluZyBhIHJhZGlvCisgICAgaW5wdXQg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiaW5wdXQiICk7CisgICAgaW5wdXQudmFsdWUgPSAi
dCI7CisgICAgaW5wdXQudHlwZSA9ICJyYWRpbyI7CisgICAgc3VwcG9ydC5yYWRpb1ZhbHVlID0g
aW5wdXQudmFsdWUgPT09ICJ0IjsKK30gKSgpOworCisKK3ZhciBib29sSG9vaywKKyAgICBhdHRy
SGFuZGxlID0galF1ZXJ5LmV4cHIuYXR0ckhhbmRsZTsKKworalF1ZXJ5LmZuLmV4dGVuZCggewor
ICAgIGF0dHI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKKyAgICAgICAgcmV0dXJuIGFjY2Vz
cyggdGhpcywgalF1ZXJ5LmF0dHIsIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSAp
OworICAgIH0sCisKKyAgICByZW1vdmVBdHRyOiBmdW5jdGlvbiggbmFtZSApIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBqUXVlcnkucmVtb3Zl
QXR0ciggdGhpcywgbmFtZSApOworICAgICAgICB9ICk7CisgICAgfQorfSApOworCitqUXVlcnku
ZXh0ZW5kKCB7CisgICAgYXR0cjogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkgeworICAg
ICAgICB2YXIgcmV0LCBob29rcywKKyAgICAgICAgICAgIG5UeXBlID0gZWxlbS5ub2RlVHlwZTsK
KworICAgICAgICAvLyBEb24ndCBnZXQvc2V0IGF0dHJpYnV0ZXMgb24gdGV4dCwgY29tbWVudCBh
bmQgYXR0cmlidXRlIG5vZGVzCisgICAgICAgIGlmICggblR5cGUgPT09IDMgfHwgblR5cGUgPT09
IDggfHwgblR5cGUgPT09IDIgKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBGYWxsYmFjayB0byBwcm9wIHdoZW4gYXR0cmlidXRlcyBhcmUgbm90IHN1cHBv
cnRlZAorICAgICAgICBpZiAoIHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSA9PT0gInVuZGVmaW5l
ZCIgKSB7CisgICAgICAgICAgICByZXR1cm4galF1ZXJ5LnByb3AoIGVsZW0sIG5hbWUsIHZhbHVl
ICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBBdHRyaWJ1dGUgaG9va3MgYXJlIGRldGVybWlu
ZWQgYnkgdGhlIGxvd2VyY2FzZSB2ZXJzaW9uCisgICAgICAgIC8vIEdyYWIgbmVjZXNzYXJ5IGhv
b2sgaWYgb25lIGlzIGRlZmluZWQKKyAgICAgICAgaWYgKCBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5
LmlzWE1MRG9jKCBlbGVtICkgKSB7CisgICAgICAgICAgICBob29rcyA9IGpRdWVyeS5hdHRySG9v
a3NbIG5hbWUudG9Mb3dlckNhc2UoKSBdIHx8CisgICAgICAgICAgICAgICAgKCBqUXVlcnkuZXhw
ci5tYXRjaC5ib29sLnRlc3QoIG5hbWUgKSA/IGJvb2xIb29rIDogdW5kZWZpbmVkICk7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAg
ICBpZiAoIHZhbHVlID09PSBudWxsICkgeworICAgICAgICAgICAgICAgIGpRdWVyeS5yZW1vdmVB
dHRyKCBlbGVtLCBuYW1lICk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoIGhvb2tzICYmICJzZXQiIGluIGhvb2tzICYmCisgICAgICAg
ICAgICAgICAgKCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5k
ZWZpbmVkICkgeworICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCB2YWx1ZSArICIiICk7CisgICAg
ICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIGhvb2tzICYm
ICJnZXQiIGluIGhvb2tzICYmICggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkgKSAhPT0g
bnVsbCApIHsKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KKworICAgICAgICBy
ZXQgPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBuYW1lICk7CisKKyAgICAgICAgLy8gTm9uLWV4
aXN0ZW50IGF0dHJpYnV0ZXMgcmV0dXJuIG51bGwsIHdlIG5vcm1hbGl6ZSB0byB1bmRlZmluZWQK
KyAgICAgICAgcmV0dXJuIHJldCA9PSBudWxsID8gdW5kZWZpbmVkIDogcmV0OworICAgIH0sCisK
KyAgICBhdHRySG9va3M6IHsKKyAgICAgICAgdHlwZTogeworICAgICAgICAgICAgc2V0OiBmdW5j
dGlvbiggZWxlbSwgdmFsdWUgKSB7CisgICAgICAgICAgICAgICAgaWYgKCAhc3VwcG9ydC5yYWRp
b1ZhbHVlICYmIHZhbHVlID09PSAicmFkaW8iICYmCisgICAgICAgICAgICAgICAgICAgIGpRdWVy
eS5ub2RlTmFtZSggZWxlbSwgImlucHV0IiApICkgeworICAgICAgICAgICAgICAgICAgICB2YXIg
dmFsID0gZWxlbS52YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUo
ICJ0eXBlIiwgdmFsdWUgKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWwgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBlbGVtLnZhbHVlID0gdmFsOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9LAorCisgICAgcmVtb3ZlQXR0cjogZnVu
Y3Rpb24oIGVsZW0sIHZhbHVlICkgeworICAgICAgICB2YXIgbmFtZSwKKyAgICAgICAgICAgIGkg
PSAwLAorCisgICAgICAgICAgICAvLyBBdHRyaWJ1dGUgbmFtZXMgY2FuIGNvbnRhaW4gbm9uLUhU
TUwgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzCisgICAgICAgICAgICAvLyBodHRwczovL2h0bWwuc3Bl
Yy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNhdHRyaWJ1dGVzLTIKKyAgICAgICAg
ICAgIGF0dHJOYW1lcyA9IHZhbHVlICYmIHZhbHVlLm1hdGNoKCBybm90aHRtbHdoaXRlICk7CisK
KyAgICAgICAgaWYgKCBhdHRyTmFtZXMgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKKyAgICAg
ICAgICAgIHdoaWxlICggKCBuYW1lID0gYXR0ck5hbWVzWyBpKysgXSApICkgeworICAgICAgICAg
ICAgICAgIGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBuYW1lICk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9Cit9ICk7CisKKy8vIEhvb2tzIGZvciBib29sZWFuIGF0dHJpYnV0ZXMKK2Jv
b2xIb29rID0geworICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkgeworICAg
ICAgICBpZiAoIHZhbHVlID09PSBmYWxzZSApIHsKKworICAgICAgICAgICAgLy8gUmVtb3ZlIGJv
b2xlYW4gYXR0cmlidXRlcyB3aGVuIHNldCB0byBmYWxzZQorICAgICAgICAgICAgalF1ZXJ5LnJl
bW92ZUF0dHIoIGVsZW0sIG5hbWUgKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGVs
ZW0uc2V0QXR0cmlidXRlKCBuYW1lLCBuYW1lICk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IG5hbWU7CisgICAgfQorfTsKKworalF1ZXJ5LmVhY2goIGpRdWVyeS5leHByLm1hdGNoLmJvb2wu
c291cmNlLm1hdGNoKCAvXHcrL2cgKSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7CisgICAgdmFyIGdl
dHRlciA9IGF0dHJIYW5kbGVbIG5hbWUgXSB8fCBqUXVlcnkuZmluZC5hdHRyOworCisgICAgYXR0
ckhhbmRsZVsgbmFtZSBdID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkgeworICAgICAg
ICB2YXIgcmV0LCBoYW5kbGUsCisgICAgICAgICAgICBsb3dlcmNhc2VOYW1lID0gbmFtZS50b0xv
d2VyQ2FzZSgpOworCisgICAgICAgIGlmICggIWlzWE1MICkgeworCisgICAgICAgICAgICAvLyBB
dm9pZCBhbiBpbmZpbml0ZSBsb29wIGJ5IHRlbXBvcmFyaWx5IHJlbW92aW5nIHRoaXMgZnVuY3Rp
b24gZnJvbSB0aGUgZ2V0dGVyCisgICAgICAgICAgICBoYW5kbGUgPSBhdHRySGFuZGxlWyBsb3dl
cmNhc2VOYW1lIF07CisgICAgICAgICAgICBhdHRySGFuZGxlWyBsb3dlcmNhc2VOYW1lIF0gPSBy
ZXQ7CisgICAgICAgICAgICByZXQgPSBnZXR0ZXIoIGVsZW0sIG5hbWUsIGlzWE1MICkgIT0gbnVs
bCA/CisgICAgICAgICAgICAgICAgbG93ZXJjYXNlTmFtZSA6CisgICAgICAgICAgICAgICAgbnVs
bDsKKyAgICAgICAgICAgIGF0dHJIYW5kbGVbIGxvd2VyY2FzZU5hbWUgXSA9IGhhbmRsZTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gcmV0OworICAgIH07Cit9ICk7CisKKworCisKK3ZhciBy
Zm9jdXNhYmxlID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSwKKyAgICBy
Y2xpY2thYmxlID0gL14oPzphfGFyZWEpJC9pOworCitqUXVlcnkuZm4uZXh0ZW5kKCB7CisgICAg
cHJvcDogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkgeworICAgICAgICByZXR1cm4gYWNjZXNzKCB0
aGlzLCBqUXVlcnkucHJvcCwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7Cisg
ICAgfSwKKworICAgIHJlbW92ZVByb3A6IGZ1bmN0aW9uKCBuYW1lICkgeworICAgICAgICByZXR1
cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzWyBqUXVl
cnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWUgXTsKKyAgICAgICAgfSApOworICAgIH0KK30gKTsK
KworalF1ZXJ5LmV4dGVuZCggeworICAgIHByb3A6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1
ZSApIHsKKyAgICAgICAgdmFyIHJldCwgaG9va3MsCisgICAgICAgICAgICBuVHlwZSA9IGVsZW0u
bm9kZVR5cGU7CisKKyAgICAgICAgLy8gRG9uJ3QgZ2V0L3NldCBwcm9wZXJ0aWVzIG9uIHRleHQs
IGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2RlcworICAgICAgICBpZiAoIG5UeXBlID09PSAzIHx8
IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkgeworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKCBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBl
bGVtICkgKSB7CisKKyAgICAgICAgICAgIC8vIEZpeCBuYW1lIGFuZCBhdHRhY2ggaG9va3MKKyAg
ICAgICAgICAgIG5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7CisgICAgICAg
ICAgICBob29rcyA9IGpRdWVyeS5wcm9wSG9va3NbIG5hbWUgXTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIGlmICggaG9va3Mg
JiYgInNldCIgaW4gaG9va3MgJiYKKyAgICAgICAgICAgICAgICAoIHJldCA9IGhvb2tzLnNldCgg
ZWxlbSwgdmFsdWUsIG5hbWUgKSApICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHJldDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuICggZWxlbVsg
bmFtZSBdID0gdmFsdWUgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggaG9va3MgJiYgImdl
dCIgaW4gaG9va3MgJiYgKCByZXQgPSBob29rcy5nZXQoIGVsZW0sIG5hbWUgKSApICE9PSBudWxs
ICkgeworICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biBlbGVtWyBuYW1lIF07CisgICAgfSwKKworICAgIHByb3BIb29rczogeworICAgICAgICB0YWJJ
bmRleDogeworICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKKworICAgICAgICAg
ICAgICAgIC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHkKKyAgICAgICAgICAgICAgICAvLyBl
bGVtLnRhYkluZGV4IGRvZXNuJ3QgYWx3YXlzIHJldHVybiB0aGUKKyAgICAgICAgICAgICAgICAv
LyBjb3JyZWN0IHZhbHVlIHdoZW4gaXQgaGFzbid0IGJlZW4gZXhwbGljaXRseSBzZXQKKyAgICAg
ICAgICAgICAgICAvLyBodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxNDExMTYyMzMzNDcv
aHR0cDovL2ZsdWlkcHJvamVjdC5vcmcvYmxvZy8yMDA4LzAxLzA5L2dldHRpbmctc2V0dGluZy1h
bmQtcmVtb3ZpbmctdGFiaW5kZXgtdmFsdWVzLXdpdGgtamF2YXNjcmlwdC8KKyAgICAgICAgICAg
ICAgICAvLyBVc2UgcHJvcGVyIGF0dHJpYnV0ZSByZXRyaWV2YWwoIzEyMDcyKQorICAgICAgICAg
ICAgICAgIHZhciB0YWJpbmRleCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sICJ0YWJpbmRleCIg
KTsKKworICAgICAgICAgICAgICAgIGlmICggdGFiaW5kZXggKSB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBwYXJzZUludCggdGFiaW5kZXgsIDEwICk7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgaWYgKAorICAgICAgICAgICAgICAgICAgICByZm9jdXNhYmxlLnRl
c3QoIGVsZW0ubm9kZU5hbWUgKSB8fAorICAgICAgICAgICAgICAgICAgICByY2xpY2thYmxlLnRl
c3QoIGVsZW0ubm9kZU5hbWUgKSAmJgorICAgICAgICAgICAgICAgICAgICBlbGVtLmhyZWYKKyAg
ICAgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfSwKKworICAgIHByb3BGaXg6IHsKKyAgICAgICAgImZvciI6ICJodG1s
Rm9yIiwKKyAgICAgICAgImNsYXNzIjogImNsYXNzTmFtZSIKKyAgICB9Cit9ICk7CisKKy8vIFN1
cHBvcnQ6IElFIDw9MTEgb25seQorLy8gQWNjZXNzaW5nIHRoZSBzZWxlY3RlZEluZGV4IHByb3Bl
cnR5CisvLyBmb3JjZXMgdGhlIGJyb3dzZXIgdG8gcmVzcGVjdCBzZXR0aW5nIHNlbGVjdGVkCisv
LyBvbiB0aGUgb3B0aW9uCisvLyBUaGUgZ2V0dGVyIGVuc3VyZXMgYSBkZWZhdWx0IG9wdGlvbiBp
cyBzZWxlY3RlZAorLy8gd2hlbiBpbiBhbiBvcHRncm91cAorLy8gZXNsaW50IHJ1bGUgIm5vLXVu
dXNlZC1leHByZXNzaW9ucyIgaXMgZGlzYWJsZWQgZm9yIHRoaXMgY29kZQorLy8gc2luY2UgaXQg
Y29uc2lkZXJzIHN1Y2ggYWNjZXNzaW9ucyBub29wCitpZiAoICFzdXBwb3J0Lm9wdFNlbGVjdGVk
ICkgeworICAgIGpRdWVyeS5wcm9wSG9va3Muc2VsZWN0ZWQgPSB7CisgICAgICAgIGdldDogZnVu
Y3Rpb24oIGVsZW0gKSB7CisKKyAgICAgICAgICAgIC8qIGVzbGludCBuby11bnVzZWQtZXhwcmVz
c2lvbnM6ICJvZmYiICovCisKKyAgICAgICAgICAgIHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5v
ZGU7CisgICAgICAgICAgICBpZiAoIHBhcmVudCAmJiBwYXJlbnQucGFyZW50Tm9kZSApIHsKKyAg
ICAgICAgICAgICAgICBwYXJlbnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4OworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0sCisgICAgICAgIHNldDog
ZnVuY3Rpb24oIGVsZW0gKSB7CisKKyAgICAgICAgICAgIC8qIGVzbGludCBuby11bnVzZWQtZXhw
cmVzc2lvbnM6ICJvZmYiICovCisKKyAgICAgICAgICAgIHZhciBwYXJlbnQgPSBlbGVtLnBhcmVu
dE5vZGU7CisgICAgICAgICAgICBpZiAoIHBhcmVudCApIHsKKyAgICAgICAgICAgICAgICBwYXJl
bnQuc2VsZWN0ZWRJbmRleDsKKworICAgICAgICAgICAgICAgIGlmICggcGFyZW50LnBhcmVudE5v
ZGUgKSB7CisgICAgICAgICAgICAgICAgICAgIHBhcmVudC5wYXJlbnROb2RlLnNlbGVjdGVkSW5k
ZXg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsK
K30KKworalF1ZXJ5LmVhY2goIFsKKyAgICAidGFiSW5kZXgiLAorICAgICJyZWFkT25seSIsCisg
ICAgIm1heExlbmd0aCIsCisgICAgImNlbGxTcGFjaW5nIiwKKyAgICAiY2VsbFBhZGRpbmciLAor
ICAgICJyb3dTcGFuIiwKKyAgICAiY29sU3BhbiIsCisgICAgInVzZU1hcCIsCisgICAgImZyYW1l
Qm9yZGVyIiwKKyAgICAiY29udGVudEVkaXRhYmxlIgorXSwgZnVuY3Rpb24oKSB7CisgICAgalF1
ZXJ5LnByb3BGaXhbIHRoaXMudG9Mb3dlckNhc2UoKSBdID0gdGhpczsKK30gKTsKKworCisKKwor
ICAgIC8vIFN0cmlwIGFuZCBjb2xsYXBzZSB3aGl0ZXNwYWNlIGFjY29yZGluZyB0byBIVE1MIHNw
ZWMKKyAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9pbmZyYXN0
cnVjdHVyZS5odG1sI3N0cmlwLWFuZC1jb2xsYXBzZS13aGl0ZXNwYWNlCisgICAgZnVuY3Rpb24g
c3RyaXBBbmRDb2xsYXBzZSggdmFsdWUgKSB7CisgICAgICAgIHZhciB0b2tlbnMgPSB2YWx1ZS5t
YXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdOworICAgICAgICByZXR1cm4gdG9rZW5zLmpvaW4o
ICIgIiApOworICAgIH0KKworCitmdW5jdGlvbiBnZXRDbGFzcyggZWxlbSApIHsKKyAgICByZXR1
cm4gZWxlbS5nZXRBdHRyaWJ1dGUgJiYgZWxlbS5nZXRBdHRyaWJ1dGUoICJjbGFzcyIgKSB8fCAi
IjsKK30KKworalF1ZXJ5LmZuLmV4dGVuZCggeworICAgIGFkZENsYXNzOiBmdW5jdGlvbiggdmFs
dWUgKSB7CisgICAgICAgIHZhciBjbGFzc2VzLCBlbGVtLCBjdXIsIGN1clZhbHVlLCBjbGF6eiwg
aiwgZmluYWxWYWx1ZSwKKyAgICAgICAgICAgIGkgPSAwOworCisgICAgICAgIGlmICggalF1ZXJ5
LmlzRnVuY3Rpb24oIHZhbHVlICkgKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKCBm
dW5jdGlvbiggaiApIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkoIHRoaXMgKS5hZGRDbGFzcygg
dmFsdWUuY2FsbCggdGhpcywgaiwgZ2V0Q2xhc3MoIHRoaXMgKSApICk7CisgICAgICAgICAgICB9
ICk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIg
JiYgdmFsdWUgKSB7CisgICAgICAgICAgICBjbGFzc2VzID0gdmFsdWUubWF0Y2goIHJub3RodG1s
d2hpdGUgKSB8fCBbXTsKKworICAgICAgICAgICAgd2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysg
XSApICkgeworICAgICAgICAgICAgICAgIGN1clZhbHVlID0gZ2V0Q2xhc3MoIGVsZW0gKTsKKyAg
ICAgICAgICAgICAgICBjdXIgPSBlbGVtLm5vZGVUeXBlID09PSAxICYmICggIiAiICsgc3RyaXBB
bmRDb2xsYXBzZSggY3VyVmFsdWUgKSArICIgIiApOworCisgICAgICAgICAgICAgICAgaWYgKCBj
dXIgKSB7CisgICAgICAgICAgICAgICAgICAgIGogPSAwOworICAgICAgICAgICAgICAgICAgICB3
aGlsZSAoICggY2xhenogPSBjbGFzc2VzWyBqKysgXSApICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBjdXIuaW5kZXhPZiggIiAiICsgY2xhenogKyAiICIgKSA8IDAgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY3VyICs9IGNsYXp6ICsgIiAiOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgLy8gT25seSBhc3NpZ24gaWYgZGlmZmVyZW50IHRvIGF2b2lkIHVubmVlZGVkIHJlbmRlcmlu
Zy4KKyAgICAgICAgICAgICAgICAgICAgZmluYWxWYWx1ZSA9IHN0cmlwQW5kQ29sbGFwc2UoIGN1
ciApOworICAgICAgICAgICAgICAgICAgICBpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoICJjbGFzcyIsIGZp
bmFsVmFsdWUgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0sCisK
KyAgICByZW1vdmVDbGFzczogZnVuY3Rpb24oIHZhbHVlICkgeworICAgICAgICB2YXIgY2xhc3Nl
cywgZWxlbSwgY3VyLCBjdXJWYWx1ZSwgY2xhenosIGosIGZpbmFsVmFsdWUsCisgICAgICAgICAg
ICBpID0gMDsKKworICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGogKSB7CisgICAgICAgICAg
ICAgICAgalF1ZXJ5KCB0aGlzICkucmVtb3ZlQ2xhc3MoIHZhbHVlLmNhbGwoIHRoaXMsIGosIGdl
dENsYXNzKCB0aGlzICkgKSApOworICAgICAgICAgICAgfSApOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmF0
dHIoICJjbGFzcyIsICIiICk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHR5cGVvZiB2YWx1
ZSA9PT0gInN0cmluZyIgJiYgdmFsdWUgKSB7CisgICAgICAgICAgICBjbGFzc2VzID0gdmFsdWUu
bWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTsKKworICAgICAgICAgICAgd2hpbGUgKCAoIGVs
ZW0gPSB0aGlzWyBpKysgXSApICkgeworICAgICAgICAgICAgICAgIGN1clZhbHVlID0gZ2V0Q2xh
c3MoIGVsZW0gKTsKKworICAgICAgICAgICAgICAgIC8vIFRoaXMgZXhwcmVzc2lvbiBpcyBoZXJl
IGZvciBiZXR0ZXIgY29tcHJlc3NpYmlsaXR5IChzZWUgYWRkQ2xhc3MpCisgICAgICAgICAgICAg
ICAgY3VyID0gZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAoICIgIiArIHN0cmlwQW5kQ29sbGFwc2Uo
IGN1clZhbHVlICkgKyAiICIgKTsKKworICAgICAgICAgICAgICAgIGlmICggY3VyICkgeworICAg
ICAgICAgICAgICAgICAgICBqID0gMDsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCAoIGNs
YXp6ID0gY2xhc3Nlc1sgaisrIF0gKSApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
UmVtb3ZlICphbGwqIGluc3RhbmNlcworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBj
dXIuaW5kZXhPZiggIiAiICsgY2xhenogKyAiICIgKSA+IC0xICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGN1ciA9IGN1ci5yZXBsYWNlKCAiICIgKyBjbGF6eiArICIgIiwgIiAiICk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICAvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5u
ZWVkZWQgcmVuZGVyaW5nLgorICAgICAgICAgICAgICAgICAgICBmaW5hbFZhbHVlID0gc3RyaXBB
bmRDb2xsYXBzZSggY3VyICk7CisgICAgICAgICAgICAgICAgICAgIGlmICggY3VyVmFsdWUgIT09
IGZpbmFsVmFsdWUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0
ZSggImNsYXNzIiwgZmluYWxWYWx1ZSApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRo
aXM7CisgICAgfSwKKworICAgIHRvZ2dsZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUsIHN0YXRlVmFs
ICkgeworICAgICAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTsKKworICAgICAgICBpZiAoIHR5
cGVvZiBzdGF0ZVZhbCA9PT0gImJvb2xlYW4iICYmIHR5cGUgPT09ICJzdHJpbmciICkgeworICAg
ICAgICAgICAgcmV0dXJuIHN0YXRlVmFsID8gdGhpcy5hZGRDbGFzcyggdmFsdWUgKSA6IHRoaXMu
cmVtb3ZlQ2xhc3MoIHZhbHVlICk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIGpRdWVyeS5p
c0Z1bmN0aW9uKCB2YWx1ZSApICkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaCggZnVu
Y3Rpb24oIGkgKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkudG9nZ2xlQ2xhc3Mo
CisgICAgICAgICAgICAgICAgICAgIHZhbHVlLmNhbGwoIHRoaXMsIGksIGdldENsYXNzKCB0aGlz
ICksIHN0YXRlVmFsICksCisgICAgICAgICAgICAgICAgICAgIHN0YXRlVmFsCisgICAgICAgICAg
ICAgICAgKTsKKyAgICAgICAgICAgIH0gKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0
aGlzLmVhY2goIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdmFyIGNsYXNzTmFtZSwgaSwgc2Vs
ZiwgY2xhc3NOYW1lczsKKworICAgICAgICAgICAgaWYgKCB0eXBlID09PSAic3RyaW5nIiApIHsK
KworICAgICAgICAgICAgICAgIC8vIFRvZ2dsZSBpbmRpdmlkdWFsIGNsYXNzIG5hbWVzCisgICAg
ICAgICAgICAgICAgaSA9IDA7CisgICAgICAgICAgICAgICAgc2VsZiA9IGpRdWVyeSggdGhpcyAp
OworICAgICAgICAgICAgICAgIGNsYXNzTmFtZXMgPSB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0
ZSApIHx8IFtdOworCisgICAgICAgICAgICAgICAgd2hpbGUgKCAoIGNsYXNzTmFtZSA9IGNsYXNz
TmFtZXNbIGkrKyBdICkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgZWFjaCBj
bGFzc05hbWUgZ2l2ZW4sIHNwYWNlIHNlcGFyYXRlZCBsaXN0CisgICAgICAgICAgICAgICAgICAg
IGlmICggc2VsZi5oYXNDbGFzcyggY2xhc3NOYW1lICkgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLnJlbW92ZUNsYXNzKCBjbGFzc05hbWUgKTsKKyAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRkQ2xhc3MoIGNsYXNzTmFt
ZSApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBUb2dnbGUgd2hvbGUgY2xhc3MgbmFtZQorICAgICAgICAgICAgfSBlbHNlIGlmICgg
dmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0eXBlID09PSAiYm9vbGVhbiIgKSB7CisgICAgICAgICAg
ICAgICAgY2xhc3NOYW1lID0gZ2V0Q2xhc3MoIHRoaXMgKTsKKyAgICAgICAgICAgICAgICBpZiAo
IGNsYXNzTmFtZSApIHsKKworICAgICAgICAgICAgICAgICAgICAvLyBTdG9yZSBjbGFzc05hbWUg
aWYgc2V0CisgICAgICAgICAgICAgICAgICAgIGRhdGFQcml2LnNldCggdGhpcywgIl9fY2xhc3NO
YW1lX18iLCBjbGFzc05hbWUgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAvLyBJZiB0aGUgZWxlbWVudCBoYXMgYSBjbGFzcyBuYW1lIG9yIGlmIHdlJ3JlIHBhc3NlZCBg
ZmFsc2VgLAorICAgICAgICAgICAgICAgIC8vIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBjbGFzc25h
bWUgKGlmIHRoZXJlIHdhcyBvbmUsIHRoZSBhYm92ZSBzYXZlZCBpdCkuCisgICAgICAgICAgICAg
ICAgLy8gT3RoZXJ3aXNlIGJyaW5nIGJhY2sgd2hhdGV2ZXIgd2FzIHByZXZpb3VzbHkgc2F2ZWQg
KGlmIGFueXRoaW5nKSwKKyAgICAgICAgICAgICAgICAvLyBmYWxsaW5nIGJhY2sgdG8gdGhlIGVt
cHR5IHN0cmluZyBpZiBub3RoaW5nIHdhcyBzdG9yZWQuCisgICAgICAgICAgICAgICAgaWYgKCB0
aGlzLnNldEF0dHJpYnV0ZSApIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1
dGUoICJjbGFzcyIsCisgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgfHwgdmFsdWUg
PT09IGZhbHNlID8KKyAgICAgICAgICAgICAgICAgICAgICAgICIiIDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFQcml2LmdldCggdGhpcywgIl9fY2xhc3NOYW1lX18iICkgfHwgIiIKKyAg
ICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gKTsKKyAgICB9LAorCisgICAgaGFzQ2xhc3M6IGZ1bmN0aW9uKCBzZWxlY3RvciAp
IHsKKyAgICAgICAgdmFyIGNsYXNzTmFtZSwgZWxlbSwKKyAgICAgICAgICAgIGkgPSAwOworCisg
ICAgICAgIGNsYXNzTmFtZSA9ICIgIiArIHNlbGVjdG9yICsgIiAiOworICAgICAgICB3aGlsZSAo
ICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7CisgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5
cGUgPT09IDEgJiYKKyAgICAgICAgICAgICAgICAoICIgIiArIHN0cmlwQW5kQ29sbGFwc2UoIGdl
dENsYXNzKCBlbGVtICkgKSArICIgIiApLmluZGV4T2YoIGNsYXNzTmFtZSApID4gLTEgKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30gKTsKKworCisKKwordmFyIHJyZXR1
cm4gPSAvXHIvZzsKKworalF1ZXJ5LmZuLmV4dGVuZCggeworICAgIHZhbDogZnVuY3Rpb24oIHZh
bHVlICkgeworICAgICAgICB2YXIgaG9va3MsIHJldCwgaXNGdW5jdGlvbiwKKyAgICAgICAgICAg
IGVsZW0gPSB0aGlzWyAwIF07CisKKyAgICAgICAgaWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHsK
KyAgICAgICAgICAgIGlmICggZWxlbSApIHsKKyAgICAgICAgICAgICAgICBob29rcyA9IGpRdWVy
eS52YWxIb29rc1sgZWxlbS50eXBlIF0gfHwKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnZh
bEhvb2tzWyBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTsKKworICAgICAgICAgICAgICAg
IGlmICggaG9va3MgJiYKKyAgICAgICAgICAgICAgICAgICAgImdldCIgaW4gaG9va3MgJiYKKyAg
ICAgICAgICAgICAgICAgICAgKCByZXQgPSBob29rcy5nZXQoIGVsZW0sICJ2YWx1ZSIgKSApICE9
PSB1bmRlZmluZWQKKyAgICAgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJldDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXQgPSBlbGVt
LnZhbHVlOworCisgICAgICAgICAgICAgICAgLy8gSGFuZGxlIG1vc3QgY29tbW9uIHN0cmluZyBj
YXNlcworICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIHJldCA9PT0gInN0cmluZyIgKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQucmVwbGFjZSggcnJldHVybiwgIiIgKTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBIYW5kbGUgY2FzZXMgd2hlcmUg
dmFsdWUgaXMgbnVsbC91bmRlZiBvciBudW1iZXIKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0
ID09IG51bGwgPyAiIiA6IHJldDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgaXNGdW5jdGlvbiA9IGpRdWVyeS5pc0Z1bmN0aW9uKCB2
YWx1ZSApOworCisgICAgICAgIHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkgeworICAg
ICAgICAgICAgdmFyIHZhbDsKKworICAgICAgICAgICAgaWYgKCB0aGlzLm5vZGVUeXBlICE9PSAx
ICkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKCBpc0Z1bmN0aW9uICkgeworICAgICAgICAgICAgICAgIHZhbCA9IHZhbHVlLmNhbGwo
IHRoaXMsIGksIGpRdWVyeSggdGhpcyApLnZhbCgpICk7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIHZhbCA9IHZhbHVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBUcmVhdCBudWxsL3VuZGVmaW5lZCBhcyAiIjsgY29udmVydCBudW1iZXJzIHRvIHN0cmlu
ZworICAgICAgICAgICAgaWYgKCB2YWwgPT0gbnVsbCApIHsKKyAgICAgICAgICAgICAgICB2YWwg
PSAiIjsKKworICAgICAgICAgICAgfSBlbHNlIGlmICggdHlwZW9mIHZhbCA9PT0gIm51bWJlciIg
KSB7CisgICAgICAgICAgICAgICAgdmFsICs9ICIiOworCisgICAgICAgICAgICB9IGVsc2UgaWYg
KCBqUXVlcnkuaXNBcnJheSggdmFsICkgKSB7CisgICAgICAgICAgICAgICAgdmFsID0galF1ZXJ5
Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsdWUgKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biB2YWx1ZSA9PSBudWxsID8gIiIgOiB2YWx1ZSArICIiOworICAgICAgICAgICAgICAgIH0gKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaG9va3MgPSBqUXVlcnkudmFsSG9va3NbIHRo
aXMudHlwZSBdIHx8IGpRdWVyeS52YWxIb29rc1sgdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgp
IF07CisKKyAgICAgICAgICAgIC8vIElmIHNldCByZXR1cm5zIHVuZGVmaW5lZCwgZmFsbCBiYWNr
IHRvIG5vcm1hbCBzZXR0aW5nCisgICAgICAgICAgICBpZiAoICFob29rcyB8fCAhKCAic2V0IiBp
biBob29rcyApIHx8IGhvb2tzLnNldCggdGhpcywgdmFsLCAidmFsdWUiICkgPT09IHVuZGVmaW5l
ZCApIHsKKyAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsOworICAgICAgICAgICAgfQor
ICAgICAgICB9ICk7CisgICAgfQorfSApOworCitqUXVlcnkuZXh0ZW5kKCB7CisgICAgdmFsSG9v
a3M6IHsKKyAgICAgICAgb3B0aW9uOiB7CisgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVt
ICkgeworCisgICAgICAgICAgICAgICAgdmFyIHZhbCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0s
ICJ2YWx1ZSIgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsICE9IG51bGwgPworICAgICAg
ICAgICAgICAgICAgICB2YWwgOgorCisgICAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IElF
IDw9MTAgLSAxMSBvbmx5CisgICAgICAgICAgICAgICAgICAgIC8vIG9wdGlvbi50ZXh0IHRocm93
cyBleGNlcHRpb25zICgjMTQ2ODYsICMxNDg1OCkKKyAgICAgICAgICAgICAgICAgICAgLy8gU3Ry
aXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2UKKyAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6
Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jc3RyaXAtYW5kLWNvbGxhcHNlLXdoaXRlc3BhY2UKKyAg
ICAgICAgICAgICAgICAgICAgc3RyaXBBbmRDb2xsYXBzZSggalF1ZXJ5LnRleHQoIGVsZW0gKSAp
OworICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICBzZWxlY3Q6IHsKKyAgICAgICAg
ICAgIGdldDogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgdmFyIHZhbHVlLCBv
cHRpb24sIGksCisgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsCisg
ICAgICAgICAgICAgICAgICAgIGluZGV4ID0gZWxlbS5zZWxlY3RlZEluZGV4LAorICAgICAgICAg
ICAgICAgICAgICBvbmUgPSBlbGVtLnR5cGUgPT09ICJzZWxlY3Qtb25lIiwKKyAgICAgICAgICAg
ICAgICAgICAgdmFsdWVzID0gb25lID8gbnVsbCA6IFtdLAorICAgICAgICAgICAgICAgICAgICBt
YXggPSBvbmUgPyBpbmRleCArIDEgOiBvcHRpb25zLmxlbmd0aDsKKworICAgICAgICAgICAgICAg
IGlmICggaW5kZXggPCAwICkgeworICAgICAgICAgICAgICAgICAgICBpID0gbWF4OworCisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaSA9IG9uZSA/IGluZGV4
IDogMDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBMb29wIHRocm91
Z2ggYWxsIHRoZSBzZWxlY3RlZCBvcHRpb25zCisgICAgICAgICAgICAgICAgZm9yICggOyBpIDwg
bWF4OyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgIG9wdGlvbiA9IG9wdGlvbnNbIGkgXTsK
KworICAgICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBJRSA8PTkgb25seQorICAgICAgICAg
ICAgICAgICAgICAvLyBJRTgtOSBkb2Vzbid0IHVwZGF0ZSBzZWxlY3RlZCBhZnRlciBmb3JtIHJl
c2V0ICgjMjU1MSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAoIG9wdGlvbi5zZWxlY3RlZCB8
fCBpID09PSBpbmRleCApICYmCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEb24n
dCByZXR1cm4gb3B0aW9ucyB0aGF0IGFyZSBkaXNhYmxlZCBvciBpbiBhIGRpc2FibGVkIG9wdGdy
b3VwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIW9wdGlvbi5kaXNhYmxlZCAmJgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICggIW9wdGlvbi5wYXJlbnROb2RlLmRpc2FibGVkIHx8
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFqUXVlcnkubm9kZU5hbWUoIG9wdGlv
bi5wYXJlbnROb2RlLCAib3B0Z3JvdXAiICkgKSApIHsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gR2V0IHRoZSBzcGVjaWZpYyB2YWx1ZSBmb3IgdGhlIG9wdGlvbgorICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsdWUgPSBqUXVlcnkoIG9wdGlvbiApLnZhbCgpOworCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIGFuIGFycmF5IGZvciBvbmUgc2VsZWN0cwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBvbmUgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBNdWx0aS1TZWxlY3RzIHJldHVybiBhbiBhcnJheQorICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goIHZhbHVlICk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFs
dWVzOworICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxlbSwg
dmFsdWUgKSB7CisgICAgICAgICAgICAgICAgdmFyIG9wdGlvblNldCwgb3B0aW9uLAorICAgICAg
ICAgICAgICAgICAgICBvcHRpb25zID0gZWxlbS5vcHRpb25zLAorICAgICAgICAgICAgICAgICAg
ICB2YWx1ZXMgPSBqUXVlcnkubWFrZUFycmF5KCB2YWx1ZSApLAorICAgICAgICAgICAgICAgICAg
ICBpID0gb3B0aW9ucy5sZW5ndGg7CisKKyAgICAgICAgICAgICAgICB3aGlsZSAoIGktLSApIHsK
KyAgICAgICAgICAgICAgICAgICAgb3B0aW9uID0gb3B0aW9uc1sgaSBdOworCisgICAgICAgICAg
ICAgICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbmQtYXNzaWduICovCisKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCBvcHRpb24uc2VsZWN0ZWQgPQorICAgICAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5LmluQXJyYXkoIGpRdWVyeS52YWxIb29rcy5vcHRpb24uZ2V0KCBvcHRpb24gKSwg
dmFsdWVzICkgPiAtMQorICAgICAgICAgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG9wdGlvblNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLWNvbmQtYXNzaWduICovCisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gRm9yY2UgYnJvd3NlcnMgdG8gYmVoYXZl
IGNvbnNpc3RlbnRseSB3aGVuIG5vbi1tYXRjaGluZyB2YWx1ZSBpcyBzZXQKKyAgICAgICAgICAg
ICAgICBpZiAoICFvcHRpb25TZXQgKSB7CisgICAgICAgICAgICAgICAgICAgIGVsZW0uc2VsZWN0
ZWRJbmRleCA9IC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4g
dmFsdWVzOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfSApOworCisvLyBSYWRp
b3MgYW5kIGNoZWNrYm94ZXMgZ2V0dGVyL3NldHRlcgoralF1ZXJ5LmVhY2goIFsgInJhZGlvIiwg
ImNoZWNrYm94IiBdLCBmdW5jdGlvbigpIHsKKyAgICBqUXVlcnkudmFsSG9va3NbIHRoaXMgXSA9
IHsKKyAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7CisgICAgICAgICAgICBp
ZiAoIGpRdWVyeS5pc0FycmF5KCB2YWx1ZSApICkgeworICAgICAgICAgICAgICAgIHJldHVybiAo
IGVsZW0uY2hlY2tlZCA9IGpRdWVyeS5pbkFycmF5KCBqUXVlcnkoIGVsZW0gKS52YWwoKSwgdmFs
dWUgKSA+IC0xICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIGlmICgg
IXN1cHBvcnQuY2hlY2tPbiApIHsKKyAgICAgICAgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0uZ2V0
ID0gZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICByZXR1cm4gZWxlbS5nZXRBdHRyaWJ1
dGUoICJ2YWx1ZSIgKSA9PT0gbnVsbCA/ICJvbiIgOiBlbGVtLnZhbHVlOworICAgICAgICB9Owor
ICAgIH0KK30gKTsKKworCisKKworLy8gUmV0dXJuIGpRdWVyeSBmb3IgYXR0cmlidXRlcy1vbmx5
IGluY2x1c2lvbgorCisKK3ZhciByZm9jdXNNb3JwaCA9IC9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vz
b3V0Ymx1cikkLzsKKworalF1ZXJ5LmV4dGVuZCggalF1ZXJ5LmV2ZW50LCB7CisKKyAgICB0cmln
Z2VyOiBmdW5jdGlvbiggZXZlbnQsIGRhdGEsIGVsZW0sIG9ubHlIYW5kbGVycyApIHsKKworICAg
ICAgICB2YXIgaSwgY3VyLCB0bXAsIGJ1YmJsZVR5cGUsIG9udHlwZSwgaGFuZGxlLCBzcGVjaWFs
LAorICAgICAgICAgICAgZXZlbnRQYXRoID0gWyBlbGVtIHx8IGRvY3VtZW50IF0sCisgICAgICAg
ICAgICB0eXBlID0gaGFzT3duLmNhbGwoIGV2ZW50LCAidHlwZSIgKSA/IGV2ZW50LnR5cGUgOiBl
dmVudCwKKyAgICAgICAgICAgIG5hbWVzcGFjZXMgPSBoYXNPd24uY2FsbCggZXZlbnQsICJuYW1l
c3BhY2UiICkgPyBldmVudC5uYW1lc3BhY2Uuc3BsaXQoICIuIiApIDogW107CisKKyAgICAgICAg
Y3VyID0gdG1wID0gZWxlbSA9IGVsZW0gfHwgZG9jdW1lbnQ7CisKKyAgICAgICAgLy8gRG9uJ3Qg
ZG8gZXZlbnRzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXMKKyAgICAgICAgaWYgKCBlbGVtLm5v
ZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggKSB7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBmb2N1cy9ibHVyIG1vcnBocyB0byBmb2N1c2lu
L291dDsgZW5zdXJlIHdlJ3JlIG5vdCBmaXJpbmcgdGhlbSByaWdodCBub3cKKyAgICAgICAgaWYg
KCByZm9jdXNNb3JwaC50ZXN0KCB0eXBlICsgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCApICkgewor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCB0eXBlLmluZGV4
T2YoICIuIiApID4gLTEgKSB7CisKKyAgICAgICAgICAgIC8vIE5hbWVzcGFjZWQgdHJpZ2dlcjsg
Y3JlYXRlIGEgcmVnZXhwIHRvIG1hdGNoIGV2ZW50IHR5cGUgaW4gaGFuZGxlKCkKKyAgICAgICAg
ICAgIG5hbWVzcGFjZXMgPSB0eXBlLnNwbGl0KCAiLiIgKTsKKyAgICAgICAgICAgIHR5cGUgPSBu
YW1lc3BhY2VzLnNoaWZ0KCk7CisgICAgICAgICAgICBuYW1lc3BhY2VzLnNvcnQoKTsKKyAgICAg
ICAgfQorICAgICAgICBvbnR5cGUgPSB0eXBlLmluZGV4T2YoICI6IiApIDwgMCAmJiAib24iICsg
dHlwZTsKKworICAgICAgICAvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYSBqUXVlcnkuRXZlbnQgb2Jq
ZWN0LCBPYmplY3QsIG9yIGp1c3QgYW4gZXZlbnQgdHlwZSBzdHJpbmcKKyAgICAgICAgZXZlbnQg
PSBldmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/CisgICAgICAgICAgICBldmVudCA6CisgICAgICAg
ICAgICBuZXcgalF1ZXJ5LkV2ZW50KCB0eXBlLCB0eXBlb2YgZXZlbnQgPT09ICJvYmplY3QiICYm
IGV2ZW50ICk7CisKKyAgICAgICAgLy8gVHJpZ2dlciBiaXRtYXNrOiAmIDEgZm9yIG5hdGl2ZSBo
YW5kbGVyczsgJiAyIGZvciBqUXVlcnkgKGFsd2F5cyB0cnVlKQorICAgICAgICBldmVudC5pc1Ry
aWdnZXIgPSBvbmx5SGFuZGxlcnMgPyAyIDogMzsKKyAgICAgICAgZXZlbnQubmFtZXNwYWNlID0g
bmFtZXNwYWNlcy5qb2luKCAiLiIgKTsKKyAgICAgICAgZXZlbnQucm5hbWVzcGFjZSA9IGV2ZW50
Lm5hbWVzcGFjZSA/CisgICAgICAgICAgICBuZXcgUmVnRXhwKCAiKF58XFwuKSIgKyBuYW1lc3Bh
Y2VzLmpvaW4oICJcXC4oPzouKlxcLnwpIiApICsgIihcXC58JCkiICkgOgorICAgICAgICAgICAg
bnVsbDsKKworICAgICAgICAvLyBDbGVhbiB1cCB0aGUgZXZlbnQgaW4gY2FzZSBpdCBpcyBiZWlu
ZyByZXVzZWQKKyAgICAgICAgZXZlbnQucmVzdWx0ID0gdW5kZWZpbmVkOworICAgICAgICBpZiAo
ICFldmVudC50YXJnZXQgKSB7CisgICAgICAgICAgICBldmVudC50YXJnZXQgPSBlbGVtOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gQ2xvbmUgYW55IGluY29taW5nIGRhdGEgYW5kIHByZXBlbmQg
dGhlIGV2ZW50LCBjcmVhdGluZyB0aGUgaGFuZGxlciBhcmcgbGlzdAorICAgICAgICBkYXRhID0g
ZGF0YSA9PSBudWxsID8KKyAgICAgICAgICAgIFsgZXZlbnQgXSA6CisgICAgICAgICAgICBqUXVl
cnkubWFrZUFycmF5KCBkYXRhLCBbIGV2ZW50IF0gKTsKKworICAgICAgICAvLyBBbGxvdyBzcGVj
aWFsIGV2ZW50cyB0byBkcmF3IG91dHNpZGUgdGhlIGxpbmVzCisgICAgICAgIHNwZWNpYWwgPSBq
UXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9OworICAgICAgICBpZiAoICFvbmx5SGFu
ZGxlcnMgJiYgc3BlY2lhbC50cmlnZ2VyICYmIHNwZWNpYWwudHJpZ2dlci5hcHBseSggZWxlbSwg
ZGF0YSApID09PSBmYWxzZSApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIERldGVybWluZSBldmVudCBwcm9wYWdhdGlvbiBwYXRoIGluIGFkdmFuY2UsIHBl
ciBXM0MgZXZlbnRzIHNwZWMgKCM5OTUxKQorICAgICAgICAvLyBCdWJibGUgdXAgdG8gZG9jdW1l
bnQsIHRoZW4gdG8gd2luZG93OyB3YXRjaCBmb3IgYSBnbG9iYWwgb3duZXJEb2N1bWVudCB2YXIg
KCM5NzI0KQorICAgICAgICBpZiAoICFvbmx5SGFuZGxlcnMgJiYgIXNwZWNpYWwubm9CdWJibGUg
JiYgIWpRdWVyeS5pc1dpbmRvdyggZWxlbSApICkgeworCisgICAgICAgICAgICBidWJibGVUeXBl
ID0gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgfHwgdHlwZTsKKyAgICAgICAgICAgIGlmICggIXJmb2N1
c01vcnBoLnRlc3QoIGJ1YmJsZVR5cGUgKyB0eXBlICkgKSB7CisgICAgICAgICAgICAgICAgY3Vy
ID0gY3VyLnBhcmVudE5vZGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKCA7IGN1
cjsgY3VyID0gY3VyLnBhcmVudE5vZGUgKSB7CisgICAgICAgICAgICAgICAgZXZlbnRQYXRoLnB1
c2goIGN1ciApOworICAgICAgICAgICAgICAgIHRtcCA9IGN1cjsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgLy8gT25seSBhZGQgd2luZG93IGlmIHdlIGdvdCB0byBkb2N1bWVudCAoZS5n
Liwgbm90IHBsYWluIG9iaiBvciBkZXRhY2hlZCBET00pCisgICAgICAgICAgICBpZiAoIHRtcCA9
PT0gKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQgKSApIHsKKyAgICAgICAgICAgICAg
ICBldmVudFBhdGgucHVzaCggdG1wLmRlZmF1bHRWaWV3IHx8IHRtcC5wYXJlbnRXaW5kb3cgfHwg
d2luZG93ICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBGaXJlIGhh
bmRsZXJzIG9uIHRoZSBldmVudCBwYXRoCisgICAgICAgIGkgPSAwOworICAgICAgICB3aGlsZSAo
ICggY3VyID0gZXZlbnRQYXRoWyBpKysgXSApICYmICFldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBl
ZCgpICkgeworCisgICAgICAgICAgICBldmVudC50eXBlID0gaSA+IDEgPworICAgICAgICAgICAg
ICAgIGJ1YmJsZVR5cGUgOgorICAgICAgICAgICAgICAgIHNwZWNpYWwuYmluZFR5cGUgfHwgdHlw
ZTsKKworICAgICAgICAgICAgLy8galF1ZXJ5IGhhbmRsZXIKKyAgICAgICAgICAgIGhhbmRsZSA9
ICggZGF0YVByaXYuZ2V0KCBjdXIsICJldmVudHMiICkgfHwge30gKVsgZXZlbnQudHlwZSBdICYm
CisgICAgICAgICAgICAgICAgZGF0YVByaXYuZ2V0KCBjdXIsICJoYW5kbGUiICk7CisgICAgICAg
ICAgICBpZiAoIGhhbmRsZSApIHsKKyAgICAgICAgICAgICAgICBoYW5kbGUuYXBwbHkoIGN1ciwg
ZGF0YSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBOYXRpdmUgaGFuZGxlcgor
ICAgICAgICAgICAgaGFuZGxlID0gb250eXBlICYmIGN1clsgb250eXBlIF07CisgICAgICAgICAg
ICBpZiAoIGhhbmRsZSAmJiBoYW5kbGUuYXBwbHkgJiYgYWNjZXB0RGF0YSggY3VyICkgKSB7Cisg
ICAgICAgICAgICAgICAgZXZlbnQucmVzdWx0ID0gaGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKTsK
KyAgICAgICAgICAgICAgICBpZiAoIGV2ZW50LnJlc3VsdCA9PT0gZmFsc2UgKSB7CisgICAgICAg
ICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGV2ZW50LnR5cGUgPSB0eXBlOworCisg
ICAgICAgIC8vIElmIG5vYm9keSBwcmV2ZW50ZWQgdGhlIGRlZmF1bHQgYWN0aW9uLCBkbyBpdCBu
b3cKKyAgICAgICAgaWYgKCAhb25seUhhbmRsZXJzICYmICFldmVudC5pc0RlZmF1bHRQcmV2ZW50
ZWQoKSApIHsKKworICAgICAgICAgICAgaWYgKCAoICFzcGVjaWFsLl9kZWZhdWx0IHx8CisgICAg
ICAgICAgICAgICAgc3BlY2lhbC5fZGVmYXVsdC5hcHBseSggZXZlbnRQYXRoLnBvcCgpLCBkYXRh
ICkgPT09IGZhbHNlICkgJiYKKyAgICAgICAgICAgICAgICBhY2NlcHREYXRhKCBlbGVtICkgKSB7
CisKKyAgICAgICAgICAgICAgICAvLyBDYWxsIGEgbmF0aXZlIERPTSBtZXRob2Qgb24gdGhlIHRh
cmdldCB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGV2ZW50LgorICAgICAgICAgICAgICAgIC8v
IERvbid0IGRvIGRlZmF1bHQgYWN0aW9ucyBvbiB3aW5kb3csIHRoYXQncyB3aGVyZSBnbG9iYWwg
dmFyaWFibGVzIGJlICgjNjE3MCkKKyAgICAgICAgICAgICAgICBpZiAoIG9udHlwZSAmJiBqUXVl
cnkuaXNGdW5jdGlvbiggZWxlbVsgdHlwZSBdICkgJiYgIWpRdWVyeS5pc1dpbmRvdyggZWxlbSAp
ICkgeworCisgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IHJlLXRyaWdnZXIgYW4gb25GT08g
ZXZlbnQgd2hlbiB3ZSBjYWxsIGl0cyBGT08oKSBtZXRob2QKKyAgICAgICAgICAgICAgICAgICAg
dG1wID0gZWxlbVsgb250eXBlIF07CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCB0bXAgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtWyBvbnR5cGUgXSA9IG51bGw7CisgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBQcmV2ZW50IHJlLXRyaWdn
ZXJpbmcgb2YgdGhlIHNhbWUgZXZlbnQsIHNpbmNlIHdlIGFscmVhZHkgYnViYmxlZCBpdCBhYm92
ZQorICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdHlwZTsKKyAg
ICAgICAgICAgICAgICAgICAgZWxlbVsgdHlwZSBdKCk7CisgICAgICAgICAgICAgICAgICAgIGpR
dWVyeS5ldmVudC50cmlnZ2VyZWQgPSB1bmRlZmluZWQ7CisKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCB0bXAgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtWyBvbnR5cGUgXSA9IHRt
cDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBldmVudC5yZXN1bHQ7CisgICAgfSwKKwor
ICAgIC8vIFBpZ2d5YmFjayBvbiBhIGRvbm9yIGV2ZW50IHRvIHNpbXVsYXRlIGEgZGlmZmVyZW50
IG9uZQorICAgIC8vIFVzZWQgb25seSBmb3IgYGZvY3VzKGluIHwgb3V0KWAgZXZlbnRzCisgICAg
c2ltdWxhdGU6IGZ1bmN0aW9uKCB0eXBlLCBlbGVtLCBldmVudCApIHsKKyAgICAgICAgdmFyIGUg
PSBqUXVlcnkuZXh0ZW5kKAorICAgICAgICAgICAgbmV3IGpRdWVyeS5FdmVudCgpLAorICAgICAg
ICAgICAgZXZlbnQsCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHlwZTogdHlwZSwK
KyAgICAgICAgICAgICAgICBpc1NpbXVsYXRlZDogdHJ1ZQorICAgICAgICAgICAgfQorICAgICAg
ICApOworCisgICAgICAgIGpRdWVyeS5ldmVudC50cmlnZ2VyKCBlLCBudWxsLCBlbGVtICk7Cisg
ICAgfQorCit9ICk7CisKK2pRdWVyeS5mbi5leHRlbmQoIHsKKworICAgIHRyaWdnZXI6IGZ1bmN0
aW9uKCB0eXBlLCBkYXRhICkgeworICAgICAgICByZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgIGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCB0aGlzICk7
CisgICAgICAgIH0gKTsKKyAgICB9LAorICAgIHRyaWdnZXJIYW5kbGVyOiBmdW5jdGlvbiggdHlw
ZSwgZGF0YSApIHsKKyAgICAgICAgdmFyIGVsZW0gPSB0aGlzWyAwIF07CisgICAgICAgIGlmICgg
ZWxlbSApIHsKKyAgICAgICAgICAgIHJldHVybiBqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwg
ZGF0YSwgZWxlbSwgdHJ1ZSApOworICAgICAgICB9CisgICAgfQorfSApOworCisKK2pRdWVyeS5l
YWNoKCAoICJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgcmVzaXplIHNjcm9sbCBjbGljayBk
YmxjbGljayAiICsKKyAgICAibW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBt
b3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgIiArCisgICAgImNoYW5nZSBzZWxlY3Qgc3Vi
bWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgY29udGV4dG1lbnUiICkuc3BsaXQoICIgIiApLAor
ICAgIGZ1bmN0aW9uKCBpLCBuYW1lICkgeworCisgICAgLy8gSGFuZGxlIGV2ZW50IGJpbmRpbmcK
KyAgICBqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBkYXRhLCBmbiApIHsKKyAgICAgICAg
cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAwID8KKyAgICAgICAgICAgIHRoaXMub24oIG5hbWUs
IG51bGwsIGRhdGEsIGZuICkgOgorICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCBuYW1lICk7Cisg
ICAgfTsKK30gKTsKKworalF1ZXJ5LmZuLmV4dGVuZCggeworICAgIGhvdmVyOiBmdW5jdGlvbigg
Zm5PdmVyLCBmbk91dCApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMubW91c2VlbnRlciggZm5PdmVy
ICkubW91c2VsZWF2ZSggZm5PdXQgfHwgZm5PdmVyICk7CisgICAgfQorfSApOworCisKKworCitz
dXBwb3J0LmZvY3VzaW4gPSAib25mb2N1c2luIiBpbiB3aW5kb3c7CisKKworLy8gU3VwcG9ydDog
RmlyZWZveCA8PTQ0CisvLyBGaXJlZm94IGRvZXNuJ3QgaGF2ZSBmb2N1cyhpbiB8IG91dCkgZXZl
bnRzCisvLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hv
d19idWcuY2dpP2lkPTY4Nzc4NworLy8KKy8vIFN1cHBvcnQ6IENocm9tZSA8PTQ4IC0gNDksIFNh
ZmFyaSA8PTkuMCAtIDkuMQorLy8gZm9jdXMoaW4gfCBvdXQpIGV2ZW50cyBmaXJlIGFmdGVyIGZv
Y3VzICYgYmx1ciBldmVudHMsCisvLyB3aGljaCBpcyBzcGVjIHZpb2xhdGlvbiAtIGh0dHA6Ly93
d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnRzLWZvY3VzZXZlbnQtZXZlbnQt
b3JkZXIKKy8vIFJlbGF0ZWQgdGlja2V0IC0gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2No
cm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDQ5ODU3CitpZiAoICFzdXBwb3J0LmZvY3VzaW4gKSB7
CisgICAgalF1ZXJ5LmVhY2goIHsgZm9jdXM6ICJmb2N1c2luIiwgYmx1cjogImZvY3Vzb3V0IiB9
LCBmdW5jdGlvbiggb3JpZywgZml4ICkgeworCisgICAgICAgIC8vIEF0dGFjaCBhIHNpbmdsZSBj
YXB0dXJpbmcgaGFuZGxlciBvbiB0aGUgZG9jdW1lbnQgd2hpbGUgc29tZW9uZSB3YW50cyBmb2N1
c2luL2ZvY3Vzb3V0CisgICAgICAgIHZhciBoYW5kbGVyID0gZnVuY3Rpb24oIGV2ZW50ICkgewor
ICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCBmaXgsIGV2ZW50LnRhcmdldCwgalF1
ZXJ5LmV2ZW50LmZpeCggZXZlbnQgKSApOworICAgICAgICB9OworCisgICAgICAgIGpRdWVyeS5l
dmVudC5zcGVjaWFsWyBmaXggXSA9IHsKKyAgICAgICAgICAgIHNldHVwOiBmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgICAgICB2YXIgZG9jID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMsCisg
ICAgICAgICAgICAgICAgICAgIGF0dGFjaGVzID0gZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCAp
OworCisgICAgICAgICAgICAgICAgaWYgKCAhYXR0YWNoZXMgKSB7CisgICAgICAgICAgICAgICAg
ICAgIGRvYy5hZGRFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXgsICgg
YXR0YWNoZXMgfHwgMCApICsgMSApOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHRlYXJk
b3duOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgZG9jID0gdGhpcy5vd25lckRv
Y3VtZW50IHx8IHRoaXMsCisgICAgICAgICAgICAgICAgICAgIGF0dGFjaGVzID0gZGF0YVByaXYu
YWNjZXNzKCBkb2MsIGZpeCApIC0gMTsKKworICAgICAgICAgICAgICAgIGlmICggIWF0dGFjaGVz
ICkgeworICAgICAgICAgICAgICAgICAgICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lciggb3JpZywg
aGFuZGxlciwgdHJ1ZSApOworICAgICAgICAgICAgICAgICAgICBkYXRhUHJpdi5yZW1vdmUoIGRv
YywgZml4ICk7CisKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICBkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4LCBhdHRhY2hlcyApOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9ICk7Cit9Cit2YXIgbG9jYXRpb24g
PSB3aW5kb3cubG9jYXRpb247CisKK3ZhciBub25jZSA9IGpRdWVyeS5ub3coKTsKKwordmFyIHJx
dWVyeSA9ICggL1w/LyApOworCisKKworLy8gQ3Jvc3MtYnJvd3NlciB4bWwgcGFyc2luZworalF1
ZXJ5LnBhcnNlWE1MID0gZnVuY3Rpb24oIGRhdGEgKSB7CisgICAgdmFyIHhtbDsKKyAgICBpZiAo
ICFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSAic3RyaW5nIiApIHsKKyAgICAgICAgcmV0dXJuIG51
bGw7CisgICAgfQorCisgICAgLy8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHkKKyAgICAvLyBJRSB0
aHJvd3Mgb24gcGFyc2VGcm9tU3RyaW5nIHdpdGggaW52YWxpZCBpbnB1dC4KKyAgICB0cnkgewor
ICAgICAgICB4bWwgPSAoIG5ldyB3aW5kb3cuRE9NUGFyc2VyKCkgKS5wYXJzZUZyb21TdHJpbmco
IGRhdGEsICJ0ZXh0L3htbCIgKTsKKyAgICB9IGNhdGNoICggZSApIHsKKyAgICAgICAgeG1sID0g
dW5kZWZpbmVkOworICAgIH0KKworICAgIGlmICggIXhtbCB8fCB4bWwuZ2V0RWxlbWVudHNCeVRh
Z05hbWUoICJwYXJzZXJlcnJvciIgKS5sZW5ndGggKSB7CisgICAgICAgIGpRdWVyeS5lcnJvcigg
IkludmFsaWQgWE1MOiAiICsgZGF0YSApOworICAgIH0KKyAgICByZXR1cm4geG1sOworfTsKKwor
Cit2YXIKKyAgICByYnJhY2tldCA9IC9cW1xdJC8sCisgICAgckNSTEYgPSAvXHI/XG4vZywKKyAg
ICByc3VibWl0dGVyVHlwZXMgPSAvXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkk
L2ksCisgICAgcnN1Ym1pdHRhYmxlID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2Vu
KS9pOworCitmdW5jdGlvbiBidWlsZFBhcmFtcyggcHJlZml4LCBvYmosIHRyYWRpdGlvbmFsLCBh
ZGQgKSB7CisgICAgdmFyIG5hbWU7CisKKyAgICBpZiAoIGpRdWVyeS5pc0FycmF5KCBvYmogKSAp
IHsKKworICAgICAgICAvLyBTZXJpYWxpemUgYXJyYXkgaXRlbS4KKyAgICAgICAgalF1ZXJ5LmVh
Y2goIG9iaiwgZnVuY3Rpb24oIGksIHYgKSB7CisgICAgICAgICAgICBpZiAoIHRyYWRpdGlvbmFs
IHx8IHJicmFja2V0LnRlc3QoIHByZWZpeCApICkgeworCisgICAgICAgICAgICAgICAgLy8gVHJl
YXQgZWFjaCBhcnJheSBpdGVtIGFzIGEgc2NhbGFyLgorICAgICAgICAgICAgICAgIGFkZCggcHJl
Zml4LCB2ICk7CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgICAgICAvLyBJ
dGVtIGlzIG5vbi1zY2FsYXIgKGFycmF5IG9yIG9iamVjdCksIGVuY29kZSBpdHMgbnVtZXJpYyBp
bmRleC4KKyAgICAgICAgICAgICAgICBidWlsZFBhcmFtcygKKyAgICAgICAgICAgICAgICAgICAg
cHJlZml4ICsgIlsiICsgKCB0eXBlb2YgdiA9PT0gIm9iamVjdCIgJiYgdiAhPSBudWxsID8gaSA6
ICIiICkgKyAiXSIsCisgICAgICAgICAgICAgICAgICAgIHYsCisgICAgICAgICAgICAgICAgICAg
IHRyYWRpdGlvbmFsLAorICAgICAgICAgICAgICAgICAgICBhZGQKKyAgICAgICAgICAgICAgICAp
OworICAgICAgICAgICAgfQorICAgICAgICB9ICk7CisKKyAgICB9IGVsc2UgaWYgKCAhdHJhZGl0
aW9uYWwgJiYgalF1ZXJ5LnR5cGUoIG9iaiApID09PSAib2JqZWN0IiApIHsKKworICAgICAgICAv
LyBTZXJpYWxpemUgb2JqZWN0IGl0ZW0uCisgICAgICAgIGZvciAoIG5hbWUgaW4gb2JqICkgewor
ICAgICAgICAgICAgYnVpbGRQYXJhbXMoIHByZWZpeCArICJbIiArIG5hbWUgKyAiXSIsIG9ialsg
bmFtZSBdLCB0cmFkaXRpb25hbCwgYWRkICk7CisgICAgICAgIH0KKworICAgIH0gZWxzZSB7CisK
KyAgICAgICAgLy8gU2VyaWFsaXplIHNjYWxhciBpdGVtLgorICAgICAgICBhZGQoIHByZWZpeCwg
b2JqICk7CisgICAgfQorfQorCisvLyBTZXJpYWxpemUgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50
cyBvciBhIHNldCBvZgorLy8ga2V5L3ZhbHVlcyBpbnRvIGEgcXVlcnkgc3RyaW5nCitqUXVlcnku
cGFyYW0gPSBmdW5jdGlvbiggYSwgdHJhZGl0aW9uYWwgKSB7CisgICAgdmFyIHByZWZpeCwKKyAg
ICAgICAgcyA9IFtdLAorICAgICAgICBhZGQgPSBmdW5jdGlvbigga2V5LCB2YWx1ZU9yRnVuY3Rp
b24gKSB7CisKKyAgICAgICAgICAgIC8vIElmIHZhbHVlIGlzIGEgZnVuY3Rpb24sIGludm9rZSBp
dCBhbmQgdXNlIGl0cyByZXR1cm4gdmFsdWUKKyAgICAgICAgICAgIHZhciB2YWx1ZSA9IGpRdWVy
eS5pc0Z1bmN0aW9uKCB2YWx1ZU9yRnVuY3Rpb24gKSA/CisgICAgICAgICAgICAgICAgdmFsdWVP
ckZ1bmN0aW9uKCkgOgorICAgICAgICAgICAgICAgIHZhbHVlT3JGdW5jdGlvbjsKKworICAgICAg
ICAgICAgc1sgcy5sZW5ndGggXSA9IGVuY29kZVVSSUNvbXBvbmVudCgga2V5ICkgKyAiPSIgKwor
ICAgICAgICAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudCggdmFsdWUgPT0gbnVsbCA/ICIiIDog
dmFsdWUgKTsKKyAgICAgICAgfTsKKworICAgIC8vIElmIGFuIGFycmF5IHdhcyBwYXNzZWQgaW4s
IGFzc3VtZSB0aGF0IGl0IGlzIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMuCisgICAgaWYgKCBq
UXVlcnkuaXNBcnJheSggYSApIHx8ICggYS5qcXVlcnkgJiYgIWpRdWVyeS5pc1BsYWluT2JqZWN0
KCBhICkgKSApIHsKKworICAgICAgICAvLyBTZXJpYWxpemUgdGhlIGZvcm0gZWxlbWVudHMKKyAg
ICAgICAgalF1ZXJ5LmVhY2goIGEsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgYWRkKCB0aGlz
Lm5hbWUsIHRoaXMudmFsdWUgKTsKKyAgICAgICAgfSApOworCisgICAgfSBlbHNlIHsKKworICAg
ICAgICAvLyBJZiB0cmFkaXRpb25hbCwgZW5jb2RlIHRoZSAib2xkIiB3YXkgKHRoZSB3YXkgMS4z
LjIgb3Igb2xkZXIKKyAgICAgICAgLy8gZGlkIGl0KSwgb3RoZXJ3aXNlIGVuY29kZSBwYXJhbXMg
cmVjdXJzaXZlbHkuCisgICAgICAgIGZvciAoIHByZWZpeCBpbiBhICkgeworICAgICAgICAgICAg
YnVpbGRQYXJhbXMoIHByZWZpeCwgYVsgcHJlZml4IF0sIHRyYWRpdGlvbmFsLCBhZGQgKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIC8vIFJldHVybiB0aGUgcmVzdWx0aW5nIHNlcmlhbGl6YXRp
b24KKyAgICByZXR1cm4gcy5qb2luKCAiJiIgKTsKK307CisKK2pRdWVyeS5mbi5leHRlbmQoIHsK
KyAgICBzZXJpYWxpemU6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4galF1ZXJ5LnBhcmFt
KCB0aGlzLnNlcmlhbGl6ZUFycmF5KCkgKTsKKyAgICB9LAorICAgIHNlcmlhbGl6ZUFycmF5OiBm
dW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHsKKworICAg
ICAgICAgICAgLy8gQ2FuIGFkZCBwcm9wSG9vayBmb3IgImVsZW1lbnRzIiB0byBmaWx0ZXIgb3Ig
YWRkIGZvcm0gZWxlbWVudHMKKyAgICAgICAgICAgIHZhciBlbGVtZW50cyA9IGpRdWVyeS5wcm9w
KCB0aGlzLCAiZWxlbWVudHMiICk7CisgICAgICAgICAgICByZXR1cm4gZWxlbWVudHMgPyBqUXVl
cnkubWFrZUFycmF5KCBlbGVtZW50cyApIDogdGhpczsKKyAgICAgICAgfSApCisgICAgICAgIC5m
aWx0ZXIoIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdmFyIHR5cGUgPSB0aGlzLnR5cGU7CisK
KyAgICAgICAgICAgIC8vIFVzZSAuaXMoICI6ZGlzYWJsZWQiICkgc28gdGhhdCBmaWVsZHNldFtk
aXNhYmxlZF0gd29ya3MKKyAgICAgICAgICAgIHJldHVybiB0aGlzLm5hbWUgJiYgIWpRdWVyeSgg
dGhpcyApLmlzKCAiOmRpc2FibGVkIiApICYmCisgICAgICAgICAgICAgICAgcnN1Ym1pdHRhYmxl
LnRlc3QoIHRoaXMubm9kZU5hbWUgKSAmJiAhcnN1Ym1pdHRlclR5cGVzLnRlc3QoIHR5cGUgKSAm
JgorICAgICAgICAgICAgICAgICggdGhpcy5jaGVja2VkIHx8ICFyY2hlY2thYmxlVHlwZS50ZXN0
KCB0eXBlICkgKTsKKyAgICAgICAgfSApCisgICAgICAgIC5tYXAoIGZ1bmN0aW9uKCBpLCBlbGVt
ICkgeworICAgICAgICAgICAgdmFyIHZhbCA9IGpRdWVyeSggdGhpcyApLnZhbCgpOworCisgICAg
ICAgICAgICBpZiAoIHZhbCA9PSBudWxsICkgeworICAgICAgICAgICAgICAgIHJldHVybiBudWxs
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0FycmF5KCB2YWwg
KSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbigg
dmFsICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBuYW1lOiBlbGVtLm5hbWUsIHZh
bHVlOiB2YWwucmVwbGFjZSggckNSTEYsICJcclxuIiApIH07CisgICAgICAgICAgICAgICAgfSAp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4geyBuYW1lOiBlbGVtLm5hbWUs
IHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsICJcclxuIiApIH07CisgICAgICAgIH0gKS5nZXQo
KTsKKyAgICB9Cit9ICk7CisKKwordmFyCisgICAgcjIwID0gLyUyMC9nLAorICAgIHJoYXNoID0g
LyMuKiQvLAorICAgIHJhbnRpQ2FjaGUgPSAvKFs/Jl0pXz1bXiZdKi8sCisgICAgcmhlYWRlcnMg
PSAvXiguKj8pOlsgXHRdKihbXlxyXG5dKikkL21nLAorCisgICAgLy8gIzc2NTMsICM4MTI1LCAj
ODE1MjogbG9jYWwgcHJvdG9jb2wgZGV0ZWN0aW9uCisgICAgcmxvY2FsUHJvdG9jb2wgPSAvXig/
OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLywK
KyAgICBybm9Db250ZW50ID0gL14oPzpHRVR8SEVBRCkkLywKKyAgICBycHJvdG9jb2wgPSAvXlwv
XC8vLAorCisgICAgLyogUHJlZmlsdGVycworICAgICAqIDEpIFRoZXkgYXJlIHVzZWZ1bCB0byBp
bnRyb2R1Y2UgY3VzdG9tIGRhdGFUeXBlcyAoc2VlIGFqYXgvanNvbnAuanMgZm9yIGFuIGV4YW1w
bGUpCisgICAgICogMikgVGhlc2UgYXJlIGNhbGxlZDoKKyAgICAgKiAgICAtIEJFRk9SRSBhc2tp
bmcgZm9yIGEgdHJhbnNwb3J0CisgICAgICogICAgLSBBRlRFUiBwYXJhbSBzZXJpYWxpemF0aW9u
IChzLmRhdGEgaXMgYSBzdHJpbmcgaWYgcy5wcm9jZXNzRGF0YSBpcyB0cnVlKQorICAgICAqIDMp
IGtleSBpcyB0aGUgZGF0YVR5cGUKKyAgICAgKiA0KSB0aGUgY2F0Y2hhbGwgc3ltYm9sICIqIiBj
YW4gYmUgdXNlZAorICAgICAqIDUpIGV4ZWN1dGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0
IGRhdGFUeXBlIGFuZCBUSEVOIGNvbnRpbnVlIGRvd24gdG8gIioiIGlmIG5lZWRlZAorICAgICAq
LworICAgIHByZWZpbHRlcnMgPSB7fSwKKworICAgIC8qIFRyYW5zcG9ydHMgYmluZGluZ3MKKyAg
ICAgKiAxKSBrZXkgaXMgdGhlIGRhdGFUeXBlCisgICAgICogMikgdGhlIGNhdGNoYWxsIHN5bWJv
bCAiKiIgY2FuIGJlIHVzZWQKKyAgICAgKiAzKSBzZWxlY3Rpb24gd2lsbCBzdGFydCB3aXRoIHRy
YW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBnbyB0byAiKiIgaWYgbmVlZGVkCisgICAgICovCisg
ICAgdHJhbnNwb3J0cyA9IHt9LAorCisgICAgLy8gQXZvaWQgY29tbWVudC1wcm9sb2cgY2hhciBz
ZXF1ZW5jZSAoIzEwMDk4KTsgbXVzdCBhcHBlYXNlIGxpbnQgYW5kIGV2YWRlIGNvbXByZXNzaW9u
CisgICAgYWxsVHlwZXMgPSAiKi8iLmNvbmNhdCggIioiICksCisKKyAgICAvLyBBbmNob3IgdGFn
IGZvciBwYXJzaW5nIHRoZSBkb2N1bWVudCBvcmlnaW4KKyAgICBvcmlnaW5BbmNob3IgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCAiYSIgKTsKKyAgICBvcmlnaW5BbmNob3IuaHJlZiA9IGxvY2F0
aW9uLmhyZWY7CisKKy8vIEJhc2UgImNvbnN0cnVjdG9yIiBmb3IgalF1ZXJ5LmFqYXhQcmVmaWx0
ZXIgYW5kIGpRdWVyeS5hamF4VHJhbnNwb3J0CitmdW5jdGlvbiBhZGRUb1ByZWZpbHRlcnNPclRy
YW5zcG9ydHMoIHN0cnVjdHVyZSApIHsKKworICAgIC8vIGRhdGFUeXBlRXhwcmVzc2lvbiBpcyBv
cHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gIioiCisgICAgcmV0dXJuIGZ1bmN0aW9uKCBkYXRhVHlw
ZUV4cHJlc3Npb24sIGZ1bmMgKSB7CisKKyAgICAgICAgaWYgKCB0eXBlb2YgZGF0YVR5cGVFeHBy
ZXNzaW9uICE9PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgIGZ1bmMgPSBkYXRhVHlwZUV4cHJl
c3Npb247CisgICAgICAgICAgICBkYXRhVHlwZUV4cHJlc3Npb24gPSAiKiI7CisgICAgICAgIH0K
KworICAgICAgICB2YXIgZGF0YVR5cGUsCisgICAgICAgICAgICBpID0gMCwKKyAgICAgICAgICAg
IGRhdGFUeXBlcyA9IGRhdGFUeXBlRXhwcmVzc2lvbi50b0xvd2VyQ2FzZSgpLm1hdGNoKCBybm90
aHRtbHdoaXRlICkgfHwgW107CisKKyAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggZnVu
YyApICkgeworCisgICAgICAgICAgICAvLyBGb3IgZWFjaCBkYXRhVHlwZSBpbiB0aGUgZGF0YVR5
cGVFeHByZXNzaW9uCisgICAgICAgICAgICB3aGlsZSAoICggZGF0YVR5cGUgPSBkYXRhVHlwZXNb
IGkrKyBdICkgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBQcmVwZW5kIGlmIHJlcXVlc3RlZAor
ICAgICAgICAgICAgICAgIGlmICggZGF0YVR5cGVbIDAgXSA9PT0gIisiICkgeworICAgICAgICAg
ICAgICAgICAgICBkYXRhVHlwZSA9IGRhdGFUeXBlLnNsaWNlKCAxICkgfHwgIioiOworICAgICAg
ICAgICAgICAgICAgICAoIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5
cGUgXSB8fCBbXSApLnVuc2hpZnQoIGZ1bmMgKTsKKworICAgICAgICAgICAgICAgIC8vIE90aGVy
d2lzZSBhcHBlbmQKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICAoIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSAp
LnB1c2goIGZ1bmMgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9OworfQorCisvLyBCYXNlIGluc3BlY3Rpb24gZnVuY3Rpb24gZm9yIHByZWZpbHRl
cnMgYW5kIHRyYW5zcG9ydHMKK2Z1bmN0aW9uIGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRz
KCBzdHJ1Y3R1cmUsIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKSB7CisKKyAgICB2
YXIgaW5zcGVjdGVkID0ge30sCisgICAgICAgIHNlZWtpbmdUcmFuc3BvcnQgPSAoIHN0cnVjdHVy
ZSA9PT0gdHJhbnNwb3J0cyApOworCisgICAgZnVuY3Rpb24gaW5zcGVjdCggZGF0YVR5cGUgKSB7
CisgICAgICAgIHZhciBzZWxlY3RlZDsKKyAgICAgICAgaW5zcGVjdGVkWyBkYXRhVHlwZSBdID0g
dHJ1ZTsKKyAgICAgICAgalF1ZXJ5LmVhY2goIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSwg
ZnVuY3Rpb24oIF8sIHByZWZpbHRlck9yRmFjdG9yeSApIHsKKyAgICAgICAgICAgIHZhciBkYXRh
VHlwZU9yVHJhbnNwb3J0ID0gcHJlZmlsdGVyT3JGYWN0b3J5KCBvcHRpb25zLCBvcmlnaW5hbE9w
dGlvbnMsIGpxWEhSICk7CisgICAgICAgICAgICBpZiAoIHR5cGVvZiBkYXRhVHlwZU9yVHJhbnNw
b3J0ID09PSAic3RyaW5nIiAmJgorICAgICAgICAgICAgICAgICFzZWVraW5nVHJhbnNwb3J0ICYm
ICFpbnNwZWN0ZWRbIGRhdGFUeXBlT3JUcmFuc3BvcnQgXSApIHsKKworICAgICAgICAgICAgICAg
IG9wdGlvbnMuZGF0YVR5cGVzLnVuc2hpZnQoIGRhdGFUeXBlT3JUcmFuc3BvcnQgKTsKKyAgICAg
ICAgICAgICAgICBpbnNwZWN0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIGlmICggc2Vla2luZ1RyYW5zcG9y
dCApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISggc2VsZWN0ZWQgPSBkYXRhVHlwZU9yVHJh
bnNwb3J0ICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gKTsKKyAgICAgICAgcmV0dXJuIHNl
bGVjdGVkOworICAgIH0KKworICAgIHJldHVybiBpbnNwZWN0KCBvcHRpb25zLmRhdGFUeXBlc1sg
MCBdICkgfHwgIWluc3BlY3RlZFsgIioiIF0gJiYgaW5zcGVjdCggIioiICk7Cit9CisKKy8vIEEg
c3BlY2lhbCBleHRlbmQgZm9yIGFqYXggb3B0aW9ucworLy8gdGhhdCB0YWtlcyAiZmxhdCIgb3B0
aW9ucyAobm90IHRvIGJlIGRlZXAgZXh0ZW5kZWQpCisvLyBGaXhlcyAjOTg4NworZnVuY3Rpb24g
YWpheEV4dGVuZCggdGFyZ2V0LCBzcmMgKSB7CisgICAgdmFyIGtleSwgZGVlcCwKKyAgICAgICAg
ZmxhdE9wdGlvbnMgPSBqUXVlcnkuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zIHx8IHt9OworCisg
ICAgZm9yICgga2V5IGluIHNyYyApIHsKKyAgICAgICAgaWYgKCBzcmNbIGtleSBdICE9PSB1bmRl
ZmluZWQgKSB7CisgICAgICAgICAgICAoIGZsYXRPcHRpb25zWyBrZXkgXSA/IHRhcmdldCA6ICgg
ZGVlcCB8fCAoIGRlZXAgPSB7fSApICkgKVsga2V5IF0gPSBzcmNbIGtleSBdOworICAgICAgICB9
CisgICAgfQorICAgIGlmICggZGVlcCApIHsKKyAgICAgICAgalF1ZXJ5LmV4dGVuZCggdHJ1ZSwg
dGFyZ2V0LCBkZWVwICk7CisgICAgfQorCisgICAgcmV0dXJuIHRhcmdldDsKK30KKworLyogSGFu
ZGxlcyByZXNwb25zZXMgdG8gYW4gYWpheCByZXF1ZXN0OgorICogLSBmaW5kcyB0aGUgcmlnaHQg
ZGF0YVR5cGUgKG1lZGlhdGVzIGJldHdlZW4gY29udGVudC10eXBlIGFuZCBleHBlY3RlZCBkYXRh
VHlwZSkKKyAqIC0gcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZQorICovCitmdW5j
dGlvbiBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICkgeworCisgICAg
dmFyIGN0LCB0eXBlLCBmaW5hbERhdGFUeXBlLCBmaXJzdERhdGFUeXBlLAorICAgICAgICBjb250
ZW50cyA9IHMuY29udGVudHMsCisgICAgICAgIGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzOworCisg
ICAgLy8gUmVtb3ZlIGF1dG8gZGF0YVR5cGUgYW5kIGdldCBjb250ZW50LXR5cGUgaW4gdGhlIHBy
b2Nlc3MKKyAgICB3aGlsZSAoIGRhdGFUeXBlc1sgMCBdID09PSAiKiIgKSB7CisgICAgICAgIGRh
dGFUeXBlcy5zaGlmdCgpOworICAgICAgICBpZiAoIGN0ID09PSB1bmRlZmluZWQgKSB7CisgICAg
ICAgICAgICBjdCA9IHMubWltZVR5cGUgfHwganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoICJDb250
ZW50LVR5cGUiICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBDaGVjayBpZiB3ZSdyZSBk
ZWFsaW5nIHdpdGggYSBrbm93biBjb250ZW50LXR5cGUKKyAgICBpZiAoIGN0ICkgeworICAgICAg
ICBmb3IgKCB0eXBlIGluIGNvbnRlbnRzICkgeworICAgICAgICAgICAgaWYgKCBjb250ZW50c1sg
dHlwZSBdICYmIGNvbnRlbnRzWyB0eXBlIF0udGVzdCggY3QgKSApIHsKKyAgICAgICAgICAgICAg
ICBkYXRhVHlwZXMudW5zaGlmdCggdHlwZSApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdl
IGhhdmUgYSByZXNwb25zZSBmb3IgdGhlIGV4cGVjdGVkIGRhdGFUeXBlCisgICAgaWYgKCBkYXRh
VHlwZXNbIDAgXSBpbiByZXNwb25zZXMgKSB7CisgICAgICAgIGZpbmFsRGF0YVR5cGUgPSBkYXRh
VHlwZXNbIDAgXTsKKyAgICB9IGVsc2UgeworCisgICAgICAgIC8vIFRyeSBjb252ZXJ0aWJsZSBk
YXRhVHlwZXMKKyAgICAgICAgZm9yICggdHlwZSBpbiByZXNwb25zZXMgKSB7CisgICAgICAgICAg
ICBpZiAoICFkYXRhVHlwZXNbIDAgXSB8fCBzLmNvbnZlcnRlcnNbIHR5cGUgKyAiICIgKyBkYXRh
VHlwZXNbIDAgXSBdICkgeworICAgICAgICAgICAgICAgIGZpbmFsRGF0YVR5cGUgPSB0eXBlOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCAh
Zmlyc3REYXRhVHlwZSApIHsKKyAgICAgICAgICAgICAgICBmaXJzdERhdGFUeXBlID0gdHlwZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIE9yIGp1c3QgdXNlIGZpcnN0
IG9uZQorICAgICAgICBmaW5hbERhdGFUeXBlID0gZmluYWxEYXRhVHlwZSB8fCBmaXJzdERhdGFU
eXBlOworICAgIH0KKworICAgIC8vIElmIHdlIGZvdW5kIGEgZGF0YVR5cGUKKyAgICAvLyBXZSBh
ZGQgdGhlIGRhdGFUeXBlIHRvIHRoZSBsaXN0IGlmIG5lZWRlZAorICAgIC8vIGFuZCByZXR1cm4g
dGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2UKKyAgICBpZiAoIGZpbmFsRGF0YVR5cGUgKSB7Cisg
ICAgICAgIGlmICggZmluYWxEYXRhVHlwZSAhPT0gZGF0YVR5cGVzWyAwIF0gKSB7CisgICAgICAg
ICAgICBkYXRhVHlwZXMudW5zaGlmdCggZmluYWxEYXRhVHlwZSApOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiByZXNwb25zZXNbIGZpbmFsRGF0YVR5cGUgXTsKKyAgICB9Cit9CisKKy8qIENo
YWluIGNvbnZlcnNpb25zIGdpdmVuIHRoZSByZXF1ZXN0IGFuZCB0aGUgb3JpZ2luYWwgcmVzcG9u
c2UKKyAqIEFsc28gc2V0cyB0aGUgcmVzcG9uc2VYWFggZmllbGRzIG9uIHRoZSBqcVhIUiBpbnN0
YW5jZQorICovCitmdW5jdGlvbiBhamF4Q29udmVydCggcywgcmVzcG9uc2UsIGpxWEhSLCBpc1N1
Y2Nlc3MgKSB7CisgICAgdmFyIGNvbnYyLCBjdXJyZW50LCBjb252LCB0bXAsIHByZXYsCisgICAg
ICAgIGNvbnZlcnRlcnMgPSB7fSwKKworICAgICAgICAvLyBXb3JrIHdpdGggYSBjb3B5IG9mIGRh
dGFUeXBlcyBpbiBjYXNlIHdlIG5lZWQgdG8gbW9kaWZ5IGl0IGZvciBjb252ZXJzaW9uCisgICAg
ICAgIGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzLnNsaWNlKCk7CisKKyAgICAvLyBDcmVhdGUgY29u
dmVydGVycyBtYXAgd2l0aCBsb3dlcmNhc2VkIGtleXMKKyAgICBpZiAoIGRhdGFUeXBlc1sgMSBd
ICkgeworICAgICAgICBmb3IgKCBjb252IGluIHMuY29udmVydGVycyApIHsKKyAgICAgICAgICAg
IGNvbnZlcnRlcnNbIGNvbnYudG9Mb3dlckNhc2UoKSBdID0gcy5jb252ZXJ0ZXJzWyBjb252IF07
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjdXJyZW50ID0gZGF0YVR5cGVzLnNoaWZ0KCk7CisK
KyAgICAvLyBDb252ZXJ0IHRvIGVhY2ggc2VxdWVudGlhbCBkYXRhVHlwZQorICAgIHdoaWxlICgg
Y3VycmVudCApIHsKKworICAgICAgICBpZiAoIHMucmVzcG9uc2VGaWVsZHNbIGN1cnJlbnQgXSAp
IHsKKyAgICAgICAgICAgIGpxWEhSWyBzLnJlc3BvbnNlRmllbGRzWyBjdXJyZW50IF0gXSA9IHJl
c3BvbnNlOworICAgICAgICB9CisKKyAgICAgICAgLy8gQXBwbHkgdGhlIGRhdGFGaWx0ZXIgaWYg
cHJvdmlkZWQKKyAgICAgICAgaWYgKCAhcHJldiAmJiBpc1N1Y2Nlc3MgJiYgcy5kYXRhRmlsdGVy
ICkgeworICAgICAgICAgICAgcmVzcG9uc2UgPSBzLmRhdGFGaWx0ZXIoIHJlc3BvbnNlLCBzLmRh
dGFUeXBlICk7CisgICAgICAgIH0KKworICAgICAgICBwcmV2ID0gY3VycmVudDsKKyAgICAgICAg
Y3VycmVudCA9IGRhdGFUeXBlcy5zaGlmdCgpOworCisgICAgICAgIGlmICggY3VycmVudCApIHsK
KworICAgICAgICAgICAgLy8gVGhlcmUncyBvbmx5IHdvcmsgdG8gZG8gaWYgY3VycmVudCBkYXRh
VHlwZSBpcyBub24tYXV0bworICAgICAgICAgICAgaWYgKCBjdXJyZW50ID09PSAiKiIgKSB7CisK
KyAgICAgICAgICAgICAgICBjdXJyZW50ID0gcHJldjsKKworICAgICAgICAgICAgLy8gQ29udmVy
dCByZXNwb25zZSBpZiBwcmV2IGRhdGFUeXBlIGlzIG5vbi1hdXRvIGFuZCBkaWZmZXJzIGZyb20g
Y3VycmVudAorICAgICAgICAgICAgfSBlbHNlIGlmICggcHJldiAhPT0gIioiICYmIHByZXYgIT09
IGN1cnJlbnQgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBTZWVrIGEgZGlyZWN0IGNvbnZlcnRl
cgorICAgICAgICAgICAgICAgIGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgIiAiICsgY3VycmVu
dCBdIHx8IGNvbnZlcnRlcnNbICIqICIgKyBjdXJyZW50IF07CisKKyAgICAgICAgICAgICAgICAv
LyBJZiBub25lIGZvdW5kLCBzZWVrIGEgcGFpcgorICAgICAgICAgICAgICAgIGlmICggIWNvbnYg
KSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoIGNvbnYyIGluIGNvbnZlcnRlcnMgKSB7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGNvbnYyIG91dHB1dHMgY3VycmVudAorICAg
ICAgICAgICAgICAgICAgICAgICAgdG1wID0gY29udjIuc3BsaXQoICIgIiApOworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCB0bXBbIDEgXSA9PT0gY3VycmVudCApIHsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIElmIHByZXYgY2FuIGJlIGNvbnZlcnRlZCB0byBhY2NlcHRl
ZCBpbnB1dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnYgPSBjb252ZXJ0ZXJzWyBw
cmV2ICsgIiAiICsgdG1wWyAwIF0gXSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb252ZXJ0ZXJzWyAiKiAiICsgdG1wWyAwIF0gXTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGNvbnYgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Q29uZGVuc2UgZXF1aXZhbGVuY2UgY29udmVydGVycworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIGNvbnYgPT09IHRydWUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb252ID0gY29udmVydGVyc1sgY29udjIgXTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIGluc2VydCB0aGUgaW50ZXJtZWRpYXRlIGRh
dGFUeXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGNvbnZl
cnRlcnNbIGNvbnYyIF0gIT09IHRydWUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjdXJyZW50ID0gdG1wWyAwIF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhVHlwZXMudW5zaGlmdCggdG1wWyAxIF0gKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAvLyBBcHBseSBjb252ZXJ0ZXIgKGlmIG5vdCBhbiBlcXVpdmFsZW5jZSkKKyAgICAgICAg
ICAgICAgICBpZiAoIGNvbnYgIT09IHRydWUgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgLy8g
VW5sZXNzIGVycm9ycyBhcmUgYWxsb3dlZCB0byBidWJibGUsIGNhdGNoIGFuZCByZXR1cm4gdGhl
bQorICAgICAgICAgICAgICAgICAgICBpZiAoIGNvbnYgJiYgcy50aHJvd3MgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7CisgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gY29udiggcmVzcG9uc2UgKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKCBlICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlOiAi
cGFyc2VyZXJyb3IiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogY29u
diA/IGUgOiAiTm8gY29udmVyc2lvbiBmcm9tICIgKyBwcmV2ICsgIiB0byAiICsgY3VycmVudAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4geyBzdGF0ZTogInN1Y2Nlc3MiLCBkYXRh
OiByZXNwb25zZSB9OworfQorCitqUXVlcnkuZXh0ZW5kKCB7CisKKyAgICAvLyBDb3VudGVyIGZv
ciBob2xkaW5nIHRoZSBudW1iZXIgb2YgYWN0aXZlIHF1ZXJpZXMKKyAgICBhY3RpdmU6IDAsCisK
KyAgICAvLyBMYXN0LU1vZGlmaWVkIGhlYWRlciBjYWNoZSBmb3IgbmV4dCByZXF1ZXN0CisgICAg
bGFzdE1vZGlmaWVkOiB7fSwKKyAgICBldGFnOiB7fSwKKworICAgIGFqYXhTZXR0aW5nczogewor
ICAgICAgICB1cmw6IGxvY2F0aW9uLmhyZWYsCisgICAgICAgIHR5cGU6ICJHRVQiLAorICAgICAg
ICBpc0xvY2FsOiBybG9jYWxQcm90b2NvbC50ZXN0KCBsb2NhdGlvbi5wcm90b2NvbCApLAorICAg
ICAgICBnbG9iYWw6IHRydWUsCisgICAgICAgIHByb2Nlc3NEYXRhOiB0cnVlLAorICAgICAgICBh
c3luYzogdHJ1ZSwKKyAgICAgICAgY29udGVudFR5cGU6ICJhcHBsaWNhdGlvbi94LXd3dy1mb3Jt
LXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLAorCisgICAgICAgIC8qCisgICAgICAgIHRpbWVv
dXQ6IDAsCisgICAgICAgIGRhdGE6IG51bGwsCisgICAgICAgIGRhdGFUeXBlOiBudWxsLAorICAg
ICAgICB1c2VybmFtZTogbnVsbCwKKyAgICAgICAgcGFzc3dvcmQ6IG51bGwsCisgICAgICAgIGNh
Y2hlOiBudWxsLAorICAgICAgICB0aHJvd3M6IGZhbHNlLAorICAgICAgICB0cmFkaXRpb25hbDog
ZmFsc2UsCisgICAgICAgIGhlYWRlcnM6IHt9LAorICAgICAgICAqLworCisgICAgICAgIGFjY2Vw
dHM6IHsKKyAgICAgICAgICAgICIqIjogYWxsVHlwZXMsCisgICAgICAgICAgICB0ZXh0OiAidGV4
dC9wbGFpbiIsCisgICAgICAgICAgICBodG1sOiAidGV4dC9odG1sIiwKKyAgICAgICAgICAgIHht
bDogImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLAorICAgICAgICAgICAganNvbjogImFwcGxp
Y2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCIKKyAgICAgICAgfSwKKworICAgICAgICBjb250
ZW50czogeworICAgICAgICAgICAgeG1sOiAvXGJ4bWxcYi8sCisgICAgICAgICAgICBodG1sOiAv
XGJodG1sLywKKyAgICAgICAgICAgIGpzb246IC9cYmpzb25cYi8KKyAgICAgICAgfSwKKworICAg
ICAgICByZXNwb25zZUZpZWxkczogeworICAgICAgICAgICAgeG1sOiAicmVzcG9uc2VYTUwiLAor
ICAgICAgICAgICAgdGV4dDogInJlc3BvbnNlVGV4dCIsCisgICAgICAgICAgICBqc29uOiAicmVz
cG9uc2VKU09OIgorICAgICAgICB9LAorCisgICAgICAgIC8vIERhdGEgY29udmVydGVycworICAg
ICAgICAvLyBLZXlzIHNlcGFyYXRlIHNvdXJjZSAob3IgY2F0Y2hhbGwgIioiKSBhbmQgZGVzdGlu
YXRpb24gdHlwZXMgd2l0aCBhIHNpbmdsZSBzcGFjZQorICAgICAgICBjb252ZXJ0ZXJzOiB7CisK
KyAgICAgICAgICAgIC8vIENvbnZlcnQgYW55dGhpbmcgdG8gdGV4dAorICAgICAgICAgICAgIiog
dGV4dCI6IFN0cmluZywKKworICAgICAgICAgICAgLy8gVGV4dCB0byBodG1sICh0cnVlID0gbm8g
dHJhbnNmb3JtYXRpb24pCisgICAgICAgICAgICAidGV4dCBodG1sIjogdHJ1ZSwKKworICAgICAg
ICAgICAgLy8gRXZhbHVhdGUgdGV4dCBhcyBhIGpzb24gZXhwcmVzc2lvbgorICAgICAgICAgICAg
InRleHQganNvbiI6IEpTT04ucGFyc2UsCisKKyAgICAgICAgICAgIC8vIFBhcnNlIHRleHQgYXMg
eG1sCisgICAgICAgICAgICAidGV4dCB4bWwiOiBqUXVlcnkucGFyc2VYTUwKKyAgICAgICAgfSwK
KworICAgICAgICAvLyBGb3Igb3B0aW9ucyB0aGF0IHNob3VsZG4ndCBiZSBkZWVwIGV4dGVuZGVk
OgorICAgICAgICAvLyB5b3UgY2FuIGFkZCB5b3VyIG93biBjdXN0b20gb3B0aW9ucyBoZXJlIGlm
CisgICAgICAgIC8vIGFuZCB3aGVuIHlvdSBjcmVhdGUgb25lIHRoYXQgc2hvdWxkbid0IGJlCisg
ICAgICAgIC8vIGRlZXAgZXh0ZW5kZWQgKHNlZSBhamF4RXh0ZW5kKQorICAgICAgICBmbGF0T3B0
aW9uczogeworICAgICAgICAgICAgdXJsOiB0cnVlLAorICAgICAgICAgICAgY29udGV4dDogdHJ1
ZQorICAgICAgICB9CisgICAgfSwKKworICAgIC8vIENyZWF0ZXMgYSBmdWxsIGZsZWRnZWQgc2V0
dGluZ3Mgb2JqZWN0IGludG8gdGFyZ2V0CisgICAgLy8gd2l0aCBib3RoIGFqYXhTZXR0aW5ncyBh
bmQgc2V0dGluZ3MgZmllbGRzLgorICAgIC8vIElmIHRhcmdldCBpcyBvbWl0dGVkLCB3cml0ZXMg
aW50byBhamF4U2V0dGluZ3MuCisgICAgYWpheFNldHVwOiBmdW5jdGlvbiggdGFyZ2V0LCBzZXR0
aW5ncyApIHsKKyAgICAgICAgcmV0dXJuIHNldHRpbmdzID8KKworICAgICAgICAgICAgLy8gQnVp
bGRpbmcgYSBzZXR0aW5ncyBvYmplY3QKKyAgICAgICAgICAgIGFqYXhFeHRlbmQoIGFqYXhFeHRl
bmQoIHRhcmdldCwgalF1ZXJ5LmFqYXhTZXR0aW5ncyApLCBzZXR0aW5ncyApIDoKKworICAgICAg
ICAgICAgLy8gRXh0ZW5kaW5nIGFqYXhTZXR0aW5ncworICAgICAgICAgICAgYWpheEV4dGVuZCgg
alF1ZXJ5LmFqYXhTZXR0aW5ncywgdGFyZ2V0ICk7CisgICAgfSwKKworICAgIGFqYXhQcmVmaWx0
ZXI6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycyApLAorICAgIGFqYXhU
cmFuc3BvcnQ6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cyApLAorCisg
ICAgLy8gTWFpbiBtZXRob2QKKyAgICBhamF4OiBmdW5jdGlvbiggdXJsLCBvcHRpb25zICkgewor
CisgICAgICAgIC8vIElmIHVybCBpcyBhbiBvYmplY3QsIHNpbXVsYXRlIHByZS0xLjUgc2lnbmF0
dXJlCisgICAgICAgIGlmICggdHlwZW9mIHVybCA9PT0gIm9iamVjdCIgKSB7CisgICAgICAgICAg
ICBvcHRpb25zID0gdXJsOworICAgICAgICAgICAgdXJsID0gdW5kZWZpbmVkOworICAgICAgICB9
CisKKyAgICAgICAgLy8gRm9yY2Ugb3B0aW9ucyB0byBiZSBhbiBvYmplY3QKKyAgICAgICAgb3B0
aW9ucyA9IG9wdGlvbnMgfHwge307CisKKyAgICAgICAgdmFyIHRyYW5zcG9ydCwKKworICAgICAg
ICAgICAgLy8gVVJMIHdpdGhvdXQgYW50aS1jYWNoZSBwYXJhbQorICAgICAgICAgICAgY2FjaGVV
UkwsCisKKyAgICAgICAgICAgIC8vIFJlc3BvbnNlIGhlYWRlcnMKKyAgICAgICAgICAgIHJlc3Bv
bnNlSGVhZGVyc1N0cmluZywKKyAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVycywKKworICAgICAg
ICAgICAgLy8gdGltZW91dCBoYW5kbGUKKyAgICAgICAgICAgIHRpbWVvdXRUaW1lciwKKworICAg
ICAgICAgICAgLy8gVXJsIGNsZWFudXAgdmFyCisgICAgICAgICAgICB1cmxBbmNob3IsCisKKyAg
ICAgICAgICAgIC8vIFJlcXVlc3Qgc3RhdGUgKGJlY29tZXMgZmFsc2UgdXBvbiBzZW5kIGFuZCB0
cnVlIHVwb24gY29tcGxldGlvbikKKyAgICAgICAgICAgIGNvbXBsZXRlZCwKKworICAgICAgICAg
ICAgLy8gVG8ga25vdyBpZiBnbG9iYWwgZXZlbnRzIGFyZSB0byBiZSBkaXNwYXRjaGVkCisgICAg
ICAgICAgICBmaXJlR2xvYmFscywKKworICAgICAgICAgICAgLy8gTG9vcCB2YXJpYWJsZQorICAg
ICAgICAgICAgaSwKKworICAgICAgICAgICAgLy8gdW5jYWNoZWQgcGFydCBvZiB0aGUgdXJsCisg
ICAgICAgICAgICB1bmNhY2hlZCwKKworICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBmaW5hbCBv
cHRpb25zIG9iamVjdAorICAgICAgICAgICAgcyA9IGpRdWVyeS5hamF4U2V0dXAoIHt9LCBvcHRp
b25zICksCisKKyAgICAgICAgICAgIC8vIENhbGxiYWNrcyBjb250ZXh0CisgICAgICAgICAgICBj
YWxsYmFja0NvbnRleHQgPSBzLmNvbnRleHQgfHwgcywKKworICAgICAgICAgICAgLy8gQ29udGV4
dCBmb3IgZ2xvYmFsIGV2ZW50cyBpcyBjYWxsYmFja0NvbnRleHQgaWYgaXQgaXMgYSBET00gbm9k
ZSBvciBqUXVlcnkgY29sbGVjdGlvbgorICAgICAgICAgICAgZ2xvYmFsRXZlbnRDb250ZXh0ID0g
cy5jb250ZXh0ICYmCisgICAgICAgICAgICAgICAgKCBjYWxsYmFja0NvbnRleHQubm9kZVR5cGUg
fHwgY2FsbGJhY2tDb250ZXh0LmpxdWVyeSApID8KKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5
KCBjYWxsYmFja0NvbnRleHQgKSA6CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudCwK
KworICAgICAgICAgICAgLy8gRGVmZXJyZWRzCisgICAgICAgICAgICBkZWZlcnJlZCA9IGpRdWVy
eS5EZWZlcnJlZCgpLAorICAgICAgICAgICAgY29tcGxldGVEZWZlcnJlZCA9IGpRdWVyeS5DYWxs
YmFja3MoICJvbmNlIG1lbW9yeSIgKSwKKworICAgICAgICAgICAgLy8gU3RhdHVzLWRlcGVuZGVu
dCBjYWxsYmFja3MKKyAgICAgICAgICAgIHN0YXR1c0NvZGUgPSBzLnN0YXR1c0NvZGUgfHwge30s
CisKKyAgICAgICAgICAgIC8vIEhlYWRlcnMgKHRoZXkgYXJlIHNlbnQgYWxsIGF0IG9uY2UpCisg
ICAgICAgICAgICByZXF1ZXN0SGVhZGVycyA9IHt9LAorICAgICAgICAgICAgcmVxdWVzdEhlYWRl
cnNOYW1lcyA9IHt9LAorCisgICAgICAgICAgICAvLyBEZWZhdWx0IGFib3J0IG1lc3NhZ2UKKyAg
ICAgICAgICAgIHN0ckFib3J0ID0gImNhbmNlbGVkIiwKKworICAgICAgICAgICAgLy8gRmFrZSB4
aHIKKyAgICAgICAgICAgIGpxWEhSID0geworICAgICAgICAgICAgICAgIHJlYWR5U3RhdGU6IDAs
CisKKyAgICAgICAgICAgICAgICAvLyBCdWlsZHMgaGVhZGVycyBoYXNodGFibGUgaWYgbmVlZGVk
CisgICAgICAgICAgICAgICAgZ2V0UmVzcG9uc2VIZWFkZXI6IGZ1bmN0aW9uKCBrZXkgKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHZhciBtYXRjaDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBj
b21wbGV0ZWQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFyZXNwb25zZUhlYWRl
cnMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzID0ge307
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCAoIG1hdGNoID0gcmhlYWRlcnMu
ZXhlYyggcmVzcG9uc2VIZWFkZXJzU3RyaW5nICkgKSApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzWyBtYXRjaFsgMSBdLnRvTG93ZXJDYXNlKCkgXSA9
IG1hdGNoWyAyIF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSByZXNwb25zZUhl
YWRlcnNbIGtleS50b0xvd2VyQ2FzZSgpIF07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoID09IG51bGwgPyBudWxsIDogbWF0Y2g7CisgICAg
ICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgIC8vIFJhdyBzdHJpbmcKKyAgICAgICAg
ICAgICAgICBnZXRBbGxSZXNwb25zZUhlYWRlcnM6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gY29tcGxldGVkID8gcmVzcG9uc2VIZWFkZXJzU3RyaW5nIDogbnVsbDsK
KyAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgLy8gQ2FjaGVzIHRoZSBoZWFk
ZXIKKyAgICAgICAgICAgICAgICBzZXRSZXF1ZXN0SGVhZGVyOiBmdW5jdGlvbiggbmFtZSwgdmFs
dWUgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggY29tcGxldGVkID09IG51bGwgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gcmVxdWVzdEhlYWRlcnNOYW1lc1sgbmFtZS50
b0xvd2VyQ2FzZSgpIF0gPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RIZWFk
ZXJzTmFtZXNbIG5hbWUudG9Mb3dlckNhc2UoKSBdIHx8IG5hbWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXF1ZXN0SGVhZGVyc1sgbmFtZSBdID0gdmFsdWU7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAg
fSwKKworICAgICAgICAgICAgICAgIC8vIE92ZXJyaWRlcyByZXNwb25zZSBjb250ZW50LXR5cGUg
aGVhZGVyCisgICAgICAgICAgICAgICAgb3ZlcnJpZGVNaW1lVHlwZTogZnVuY3Rpb24oIHR5cGUg
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggY29tcGxldGVkID09IG51bGwgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBzLm1pbWVUeXBlID0gdHlwZTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICB9
LAorCisgICAgICAgICAgICAgICAgLy8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3MKKyAgICAg
ICAgICAgICAgICBzdGF0dXNDb2RlOiBmdW5jdGlvbiggbWFwICkgeworICAgICAgICAgICAgICAg
ICAgICB2YXIgY29kZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXAgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIGNvbXBsZXRlZCApIHsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEV4ZWN1dGUgdGhlIGFwcHJvcHJpYXRlIGNhbGxiYWNrcworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGpxWEhSLmFsd2F5cyggbWFwWyBqcVhIUi5zdGF0dXMgXSApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIExhenktYWRkIHRoZSBuZXcgY2FsbGJhY2tzIGluIGEgd2F5IHRoYXQgcHJlc2Vy
dmVzIG9sZCBvbmVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggY29kZSBpbiBt
YXAgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c0NvZGVbIGNvZGUg
XSA9IFsgc3RhdHVzQ29kZVsgY29kZSBdLCBtYXBbIGNvZGUgXSBdOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAg
ICB9LAorCisgICAgICAgICAgICAgICAgLy8gQ2FuY2VsIHRoZSByZXF1ZXN0CisgICAgICAgICAg
ICAgICAgYWJvcnQ6IGZ1bmN0aW9uKCBzdGF0dXNUZXh0ICkgeworICAgICAgICAgICAgICAgICAg
ICB2YXIgZmluYWxUZXh0ID0gc3RhdHVzVGV4dCB8fCBzdHJBYm9ydDsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCB0cmFuc3BvcnQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3Bv
cnQuYWJvcnQoIGZpbmFsVGV4dCApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGRvbmUoIDAsIGZpbmFsVGV4dCApOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdGhpczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworCisgICAgICAgIC8v
IEF0dGFjaCBkZWZlcnJlZHMKKyAgICAgICAgZGVmZXJyZWQucHJvbWlzZSgganFYSFIgKTsKKwor
ICAgICAgICAvLyBBZGQgcHJvdG9jb2wgaWYgbm90IHByb3ZpZGVkIChwcmVmaWx0ZXJzIG1pZ2h0
IGV4cGVjdCBpdCkKKyAgICAgICAgLy8gSGFuZGxlIGZhbHN5IHVybCBpbiB0aGUgc2V0dGluZ3Mg
b2JqZWN0ICgjMTAwOTM6IGNvbnNpc3RlbmN5IHdpdGggb2xkIHNpZ25hdHVyZSkKKyAgICAgICAg
Ly8gV2UgYWxzbyB1c2UgdGhlIHVybCBwYXJhbWV0ZXIgaWYgYXZhaWxhYmxlCisgICAgICAgIHMu
dXJsID0gKCAoIHVybCB8fCBzLnVybCB8fCBsb2NhdGlvbi5ocmVmICkgKyAiIiApCisgICAgICAg
ICAgICAucmVwbGFjZSggcnByb3RvY29sLCBsb2NhdGlvbi5wcm90b2NvbCArICIvLyIgKTsKKwor
ICAgICAgICAvLyBBbGlhcyBtZXRob2Qgb3B0aW9uIHRvIHR5cGUgYXMgcGVyIHRpY2tldCAjMTIw
MDQKKyAgICAgICAgcy50eXBlID0gb3B0aW9ucy5tZXRob2QgfHwgb3B0aW9ucy50eXBlIHx8IHMu
bWV0aG9kIHx8IHMudHlwZTsKKworICAgICAgICAvLyBFeHRyYWN0IGRhdGFUeXBlcyBsaXN0Cisg
ICAgICAgIHMuZGF0YVR5cGVzID0gKCBzLmRhdGFUeXBlIHx8ICIqIiApLnRvTG93ZXJDYXNlKCku
bWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbICIiIF07CisKKyAgICAgICAgLy8gQSBjcm9zcy1k
b21haW4gcmVxdWVzdCBpcyBpbiBvcmRlciB3aGVuIHRoZSBvcmlnaW4gZG9lc24ndCBtYXRjaCB0
aGUgY3VycmVudCBvcmlnaW4uCisgICAgICAgIGlmICggcy5jcm9zc0RvbWFpbiA9PSBudWxsICkg
eworICAgICAgICAgICAgdXJsQW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImEiICk7
CisKKyAgICAgICAgICAgIC8vIFN1cHBvcnQ6IElFIDw9OCAtIDExLCBFZGdlIDEyIC0gMTMKKyAg
ICAgICAgICAgIC8vIElFIHRocm93cyBleGNlcHRpb24gb24gYWNjZXNzaW5nIHRoZSBocmVmIHBy
b3BlcnR5IGlmIHVybCBpcyBtYWxmb3JtZWQsCisgICAgICAgICAgICAvLyBlLmcuIGh0dHA6Ly9l
eGFtcGxlLmNvbTo4MHgvCisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHVybEFu
Y2hvci5ocmVmID0gcy51cmw7CisKKyAgICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBJRSA8PTgg
LSAxMSBvbmx5CisgICAgICAgICAgICAgICAgLy8gQW5jaG9yJ3MgaG9zdCBwcm9wZXJ0eSBpc24n
dCBjb3JyZWN0bHkgc2V0IHdoZW4gcy51cmwgaXMgcmVsYXRpdmUKKyAgICAgICAgICAgICAgICB1
cmxBbmNob3IuaHJlZiA9IHVybEFuY2hvci5ocmVmOworICAgICAgICAgICAgICAgIHMuY3Jvc3NE
b21haW4gPSBvcmlnaW5BbmNob3IucHJvdG9jb2wgKyAiLy8iICsgb3JpZ2luQW5jaG9yLmhvc3Qg
IT09CisgICAgICAgICAgICAgICAgICAgIHVybEFuY2hvci5wcm90b2NvbCArICIvLyIgKyB1cmxB
bmNob3IuaG9zdDsKKyAgICAgICAgICAgIH0gY2F0Y2ggKCBlICkgeworCisgICAgICAgICAgICAg
ICAgLy8gSWYgdGhlcmUgaXMgYW4gZXJyb3IgcGFyc2luZyB0aGUgVVJMLCBhc3N1bWUgaXQgaXMg
Y3Jvc3NEb21haW4sCisgICAgICAgICAgICAgICAgLy8gaXQgY2FuIGJlIHJlamVjdGVkIGJ5IHRo
ZSB0cmFuc3BvcnQgaWYgaXQgaXMgaW52YWxpZAorICAgICAgICAgICAgICAgIHMuY3Jvc3NEb21h
aW4gPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQ29udmVy
dCBkYXRhIGlmIG5vdCBhbHJlYWR5IGEgc3RyaW5nCisgICAgICAgIGlmICggcy5kYXRhICYmIHMu
cHJvY2Vzc0RhdGEgJiYgdHlwZW9mIHMuZGF0YSAhPT0gInN0cmluZyIgKSB7CisgICAgICAgICAg
ICBzLmRhdGEgPSBqUXVlcnkucGFyYW0oIHMuZGF0YSwgcy50cmFkaXRpb25hbCApOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gQXBwbHkgcHJlZmlsdGVycworICAgICAgICBpbnNwZWN0UHJlZmls
dGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycywgcywgb3B0aW9ucywganFYSFIgKTsKKworICAg
ICAgICAvLyBJZiByZXF1ZXN0IHdhcyBhYm9ydGVkIGluc2lkZSBhIHByZWZpbHRlciwgc3RvcCB0
aGVyZQorICAgICAgICBpZiAoIGNvbXBsZXRlZCApIHsKKyAgICAgICAgICAgIHJldHVybiBqcVhI
UjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFdlIGNhbiBmaXJlIGdsb2JhbCBldmVudHMgYXMg
b2Ygbm93IGlmIGFza2VkIHRvCisgICAgICAgIC8vIERvbid0IGZpcmUgZXZlbnRzIGlmIGpRdWVy
eS5ldmVudCBpcyB1bmRlZmluZWQgaW4gYW4gQU1ELXVzYWdlIHNjZW5hcmlvICgjMTUxMTgpCisg
ICAgICAgIGZpcmVHbG9iYWxzID0galF1ZXJ5LmV2ZW50ICYmIHMuZ2xvYmFsOworCisgICAgICAg
IC8vIFdhdGNoIGZvciBhIG5ldyBzZXQgb2YgcmVxdWVzdHMKKyAgICAgICAgaWYgKCBmaXJlR2xv
YmFscyAmJiBqUXVlcnkuYWN0aXZlKysgPT09IDAgKSB7CisgICAgICAgICAgICBqUXVlcnkuZXZl
bnQudHJpZ2dlciggImFqYXhTdGFydCIgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFVwcGVy
Y2FzZSB0aGUgdHlwZQorICAgICAgICBzLnR5cGUgPSBzLnR5cGUudG9VcHBlckNhc2UoKTsKKwor
ICAgICAgICAvLyBEZXRlcm1pbmUgaWYgcmVxdWVzdCBoYXMgY29udGVudAorICAgICAgICBzLmhh
c0NvbnRlbnQgPSAhcm5vQ29udGVudC50ZXN0KCBzLnR5cGUgKTsKKworICAgICAgICAvLyBTYXZl
IHRoZSBVUkwgaW4gY2FzZSB3ZSdyZSB0b3lpbmcgd2l0aCB0aGUgSWYtTW9kaWZpZWQtU2luY2UK
KyAgICAgICAgLy8gYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyIGxhdGVyIG9uCisgICAgICAg
IC8vIFJlbW92ZSBoYXNoIHRvIHNpbXBsaWZ5IHVybCBtYW5pcHVsYXRpb24KKyAgICAgICAgY2Fj
aGVVUkwgPSBzLnVybC5yZXBsYWNlKCByaGFzaCwgIiIgKTsKKworICAgICAgICAvLyBNb3JlIG9w
dGlvbnMgaGFuZGxpbmcgZm9yIHJlcXVlc3RzIHdpdGggbm8gY29udGVudAorICAgICAgICBpZiAo
ICFzLmhhc0NvbnRlbnQgKSB7CisKKyAgICAgICAgICAgIC8vIFJlbWVtYmVyIHRoZSBoYXNoIHNv
IHdlIGNhbiBwdXQgaXQgYmFjaworICAgICAgICAgICAgdW5jYWNoZWQgPSBzLnVybC5zbGljZSgg
Y2FjaGVVUkwubGVuZ3RoICk7CisKKyAgICAgICAgICAgIC8vIElmIGRhdGEgaXMgYXZhaWxhYmxl
LCBhcHBlbmQgZGF0YSB0byB1cmwKKyAgICAgICAgICAgIGlmICggcy5kYXRhICkgeworICAgICAg
ICAgICAgICAgIGNhY2hlVVJMICs9ICggcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyAiJiIgOiAi
PyIgKSArIHMuZGF0YTsKKworICAgICAgICAgICAgICAgIC8vICM5NjgyOiByZW1vdmUgZGF0YSBz
byB0aGF0IGl0J3Mgbm90IHVzZWQgaW4gYW4gZXZlbnR1YWwgcmV0cnkKKyAgICAgICAgICAgICAg
ICBkZWxldGUgcy5kYXRhOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBBZGQgb3Ig
dXBkYXRlIGFudGktY2FjaGUgcGFyYW0gaWYgbmVlZGVkCisgICAgICAgICAgICBpZiAoIHMuY2Fj
aGUgPT09IGZhbHNlICkgeworICAgICAgICAgICAgICAgIGNhY2hlVVJMID0gY2FjaGVVUkwucmVw
bGFjZSggcmFudGlDYWNoZSwgIiQxIiApOworICAgICAgICAgICAgICAgIHVuY2FjaGVkID0gKCBy
cXVlcnkudGVzdCggY2FjaGVVUkwgKSA/ICImIiA6ICI/IiApICsgIl89IiArICggbm9uY2UrKyAp
ICsgdW5jYWNoZWQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFB1dCBoYXNoIGFu
ZCBhbnRpLWNhY2hlIG9uIHRoZSBVUkwgdGhhdCB3aWxsIGJlIHJlcXVlc3RlZCAoZ2gtMTczMikK
KyAgICAgICAgICAgIHMudXJsID0gY2FjaGVVUkwgKyB1bmNhY2hlZDsKKworICAgICAgICAvLyBD
aGFuZ2UgJyUyMCcgdG8gJysnIGlmIHRoaXMgaXMgZW5jb2RlZCBmb3JtIGJvZHkgY29udGVudCAo
Z2gtMjY1OCkKKyAgICAgICAgfSBlbHNlIGlmICggcy5kYXRhICYmIHMucHJvY2Vzc0RhdGEgJiYK
KyAgICAgICAgICAgICggcy5jb250ZW50VHlwZSB8fCAiIiApLmluZGV4T2YoICJhcHBsaWNhdGlv
bi94LXd3dy1mb3JtLXVybGVuY29kZWQiICkgPT09IDAgKSB7CisgICAgICAgICAgICBzLmRhdGEg
PSBzLmRhdGEucmVwbGFjZSggcjIwLCAiKyIgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNl
dCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBp
biBpZk1vZGlmaWVkIG1vZGUuCisgICAgICAgIGlmICggcy5pZk1vZGlmaWVkICkgeworICAgICAg
ICAgICAgaWYgKCBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdICkgeworICAgICAgICAg
ICAgICAgIGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoICJJZi1Nb2RpZmllZC1TaW5jZSIsIGpRdWVy
eS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmICggalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gKSB7CisgICAgICAgICAgICAgICAganFYSFIu
c2V0UmVxdWVzdEhlYWRlciggIklmLU5vbmUtTWF0Y2giLCBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwg
XSApOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gU2V0IHRoZSBjb3Jy
ZWN0IGhlYWRlciwgaWYgZGF0YSBpcyBiZWluZyBzZW50CisgICAgICAgIGlmICggcy5kYXRhICYm
IHMuaGFzQ29udGVudCAmJiBzLmNvbnRlbnRUeXBlICE9PSBmYWxzZSB8fCBvcHRpb25zLmNvbnRl
bnRUeXBlICkgeworICAgICAgICAgICAganFYSFIuc2V0UmVxdWVzdEhlYWRlciggIkNvbnRlbnQt
VHlwZSIsIHMuY29udGVudFR5cGUgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNldCB0aGUg
QWNjZXB0cyBoZWFkZXIgZm9yIHRoZSBzZXJ2ZXIsIGRlcGVuZGluZyBvbiB0aGUgZGF0YVR5cGUK
KyAgICAgICAganFYSFIuc2V0UmVxdWVzdEhlYWRlcigKKyAgICAgICAgICAgICJBY2NlcHQiLAor
ICAgICAgICAgICAgcy5kYXRhVHlwZXNbIDAgXSAmJiBzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWyAw
IF0gXSA/CisgICAgICAgICAgICAgICAgcy5hY2NlcHRzWyBzLmRhdGFUeXBlc1sgMCBdIF0gKwor
ICAgICAgICAgICAgICAgICAgICAoIHMuZGF0YVR5cGVzWyAwIF0gIT09ICIqIiA/ICIsICIgKyBh
bGxUeXBlcyArICI7IHE9MC4wMSIgOiAiIiApIDoKKyAgICAgICAgICAgICAgICBzLmFjY2VwdHNb
ICIqIiBdCisgICAgICAgICk7CisKKyAgICAgICAgLy8gQ2hlY2sgZm9yIGhlYWRlcnMgb3B0aW9u
CisgICAgICAgIGZvciAoIGkgaW4gcy5oZWFkZXJzICkgeworICAgICAgICAgICAganFYSFIuc2V0
UmVxdWVzdEhlYWRlciggaSwgcy5oZWFkZXJzWyBpIF0gKTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIEFsbG93IGN1c3RvbSBoZWFkZXJzL21pbWV0eXBlcyBhbmQgZWFybHkgYWJvcnQKKyAgICAg
ICAgaWYgKCBzLmJlZm9yZVNlbmQgJiYKKyAgICAgICAgICAgICggcy5iZWZvcmVTZW5kLmNhbGwo
IGNhbGxiYWNrQ29udGV4dCwganFYSFIsIHMgKSA9PT0gZmFsc2UgfHwgY29tcGxldGVkICkgKSB7
CisKKyAgICAgICAgICAgIC8vIEFib3J0IGlmIG5vdCBkb25lIGFscmVhZHkgYW5kIHJldHVybgor
ICAgICAgICAgICAgcmV0dXJuIGpxWEhSLmFib3J0KCk7CisgICAgICAgIH0KKworICAgICAgICAv
LyBBYm9ydGluZyBpcyBubyBsb25nZXIgYSBjYW5jZWxsYXRpb24KKyAgICAgICAgc3RyQWJvcnQg
PSAiYWJvcnQiOworCisgICAgICAgIC8vIEluc3RhbGwgY2FsbGJhY2tzIG9uIGRlZmVycmVkcwor
ICAgICAgICBjb21wbGV0ZURlZmVycmVkLmFkZCggcy5jb21wbGV0ZSApOworICAgICAgICBqcVhI
Ui5kb25lKCBzLnN1Y2Nlc3MgKTsKKyAgICAgICAganFYSFIuZmFpbCggcy5lcnJvciApOworCisg
ICAgICAgIC8vIEdldCB0cmFuc3BvcnQKKyAgICAgICAgdHJhbnNwb3J0ID0gaW5zcGVjdFByZWZp
bHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMsIHMsIG9wdGlvbnMsIGpxWEhSICk7CisKKyAg
ICAgICAgLy8gSWYgbm8gdHJhbnNwb3J0LCB3ZSBhdXRvLWFib3J0CisgICAgICAgIGlmICggIXRy
YW5zcG9ydCApIHsKKyAgICAgICAgICAgIGRvbmUoIC0xLCAiTm8gVHJhbnNwb3J0IiApOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAganFYSFIucmVhZHlTdGF0ZSA9IDE7CisKKyAgICAg
ICAgICAgIC8vIFNlbmQgZ2xvYmFsIGV2ZW50CisgICAgICAgICAgICBpZiAoIGZpcmVHbG9iYWxz
ICkgeworICAgICAgICAgICAgICAgIGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCAiYWpheFNl
bmQiLCBbIGpxWEhSLCBzIF0gKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSWYg
cmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYWpheFNlbmQsIHN0b3AgdGhlcmUKKyAgICAgICAg
ICAgIGlmICggY29tcGxldGVkICkgeworICAgICAgICAgICAgICAgIHJldHVybiBqcVhIUjsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVGltZW91dAorICAgICAgICAgICAgaWYgKCBz
LmFzeW5jICYmIHMudGltZW91dCA+IDAgKSB7CisgICAgICAgICAgICAgICAgdGltZW91dFRpbWVy
ID0gd2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICBq
cVhIUi5hYm9ydCggInRpbWVvdXQiICk7CisgICAgICAgICAgICAgICAgfSwgcy50aW1lb3V0ICk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgY29t
cGxldGVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgdHJhbnNwb3J0LnNlbmQoIHJlcXVlc3RI
ZWFkZXJzLCBkb25lICk7CisgICAgICAgICAgICB9IGNhdGNoICggZSApIHsKKworICAgICAgICAg
ICAgICAgIC8vIFJldGhyb3cgcG9zdC1jb21wbGV0aW9uIGV4Y2VwdGlvbnMKKyAgICAgICAgICAg
ICAgICBpZiAoIGNvbXBsZXRlZCApIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBQcm9wYWdhdGUgb3RoZXJzIGFz
IHJlc3VsdHMKKyAgICAgICAgICAgICAgICBkb25lKCAtMSwgZSApOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgLy8gQ2FsbGJhY2sgZm9yIHdoZW4gZXZlcnl0aGluZyBpcyBk
b25lCisgICAgICAgIGZ1bmN0aW9uIGRvbmUoIHN0YXR1cywgbmF0aXZlU3RhdHVzVGV4dCwgcmVz
cG9uc2VzLCBoZWFkZXJzICkgeworICAgICAgICAgICAgdmFyIGlzU3VjY2Vzcywgc3VjY2Vzcywg
ZXJyb3IsIHJlc3BvbnNlLCBtb2RpZmllZCwKKyAgICAgICAgICAgICAgICBzdGF0dXNUZXh0ID0g
bmF0aXZlU3RhdHVzVGV4dDsKKworICAgICAgICAgICAgLy8gSWdub3JlIHJlcGVhdCBpbnZvY2F0
aW9ucworICAgICAgICAgICAgaWYgKCBjb21wbGV0ZWQgKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb21wbGV0ZWQgPSB0cnVlOworCisg
ICAgICAgICAgICAvLyBDbGVhciB0aW1lb3V0IGlmIGl0IGV4aXN0cworICAgICAgICAgICAgaWYg
KCB0aW1lb3V0VGltZXIgKSB7CisgICAgICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCgg
dGltZW91dFRpbWVyICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIERlcmVmZXJl
bmNlIHRyYW5zcG9ydCBmb3IgZWFybHkgZ2FyYmFnZSBjb2xsZWN0aW9uCisgICAgICAgICAgICAv
LyAobm8gbWF0dGVyIGhvdyBsb25nIHRoZSBqcVhIUiBvYmplY3Qgd2lsbCBiZSB1c2VkKQorICAg
ICAgICAgICAgdHJhbnNwb3J0ID0gdW5kZWZpbmVkOworCisgICAgICAgICAgICAvLyBDYWNoZSBy
ZXNwb25zZSBoZWFkZXJzCisgICAgICAgICAgICByZXNwb25zZUhlYWRlcnNTdHJpbmcgPSBoZWFk
ZXJzIHx8ICIiOworCisgICAgICAgICAgICAvLyBTZXQgcmVhZHlTdGF0ZQorICAgICAgICAgICAg
anFYSFIucmVhZHlTdGF0ZSA9IHN0YXR1cyA+IDAgPyA0IDogMDsKKworICAgICAgICAgICAgLy8g
RGV0ZXJtaW5lIGlmIHN1Y2Nlc3NmdWwKKyAgICAgICAgICAgIGlzU3VjY2VzcyA9IHN0YXR1cyA+
PSAyMDAgJiYgc3RhdHVzIDwgMzAwIHx8IHN0YXR1cyA9PT0gMzA0OworCisgICAgICAgICAgICAv
LyBHZXQgcmVzcG9uc2UgZGF0YQorICAgICAgICAgICAgaWYgKCByZXNwb25zZXMgKSB7CisgICAg
ICAgICAgICAgICAgcmVzcG9uc2UgPSBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVz
cG9uc2VzICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIENvbnZlcnQgbm8gbWF0
dGVyIHdoYXQgKHRoYXQgd2F5IHJlc3BvbnNlWFhYIGZpZWxkcyBhcmUgYWx3YXlzIHNldCkKKyAg
ICAgICAgICAgIHJlc3BvbnNlID0gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNlLCBqcVhIUiwgaXNT
dWNjZXNzICk7CisKKyAgICAgICAgICAgIC8vIElmIHN1Y2Nlc3NmdWwsIGhhbmRsZSB0eXBlIGNo
YWluaW5nCisgICAgICAgICAgICBpZiAoIGlzU3VjY2VzcyApIHsKKworICAgICAgICAgICAgICAg
IC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVy
LCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuCisgICAgICAgICAgICAgICAgaWYgKCBzLmlmTW9kaWZp
ZWQgKSB7CisgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VI
ZWFkZXIoICJMYXN0LU1vZGlmaWVkIiApOworICAgICAgICAgICAgICAgICAgICBpZiAoIG1vZGlm
aWVkICkgeworICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2Fj
aGVVUkwgXSA9IG1vZGlmaWVkOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoICJldGFnIiApOworICAg
ICAgICAgICAgICAgICAgICBpZiAoIG1vZGlmaWVkICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGlmIG5vIGNvbnRl
bnQKKyAgICAgICAgICAgICAgICBpZiAoIHN0YXR1cyA9PT0gMjA0IHx8IHMudHlwZSA9PT0gIkhF
QUQiICkgeworICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0ID0gIm5vY29udGVudCI7CisK
KyAgICAgICAgICAgICAgICAvLyBpZiBub3QgbW9kaWZpZWQKKyAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKCBzdGF0dXMgPT09IDMwNCApIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4
dCA9ICJub3Rtb2RpZmllZCI7CisKKyAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGRhdGEs
IGxldCdzIGNvbnZlcnQgaXQKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICBzdGF0dXNUZXh0ID0gcmVzcG9uc2Uuc3RhdGU7CisgICAgICAgICAgICAgICAgICAg
IHN1Y2Nlc3MgPSByZXNwb25zZS5kYXRhOworICAgICAgICAgICAgICAgICAgICBlcnJvciA9IHJl
c3BvbnNlLmVycm9yOworICAgICAgICAgICAgICAgICAgICBpc1N1Y2Nlc3MgPSAhZXJyb3I7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKworICAgICAgICAgICAgICAg
IC8vIEV4dHJhY3QgZXJyb3IgZnJvbSBzdGF0dXNUZXh0IGFuZCBub3JtYWxpemUgZm9yIG5vbi1h
Ym9ydHMKKyAgICAgICAgICAgICAgICBlcnJvciA9IHN0YXR1c1RleHQ7CisgICAgICAgICAgICAg
ICAgaWYgKCBzdGF0dXMgfHwgIXN0YXR1c1RleHQgKSB7CisgICAgICAgICAgICAgICAgICAgIHN0
YXR1c1RleHQgPSAiZXJyb3IiOworICAgICAgICAgICAgICAgICAgICBpZiAoIHN0YXR1cyA8IDAg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAwOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBTZXQgZGF0YSBmb3IgdGhlIGZha2UgeGhyIG9iamVjdAorICAgICAgICAgICAganFYSFIuc3Rh
dHVzID0gc3RhdHVzOworICAgICAgICAgICAganFYSFIuc3RhdHVzVGV4dCA9ICggbmF0aXZlU3Rh
dHVzVGV4dCB8fCBzdGF0dXNUZXh0ICkgKyAiIjsKKworICAgICAgICAgICAgLy8gU3VjY2Vzcy9F
cnJvcgorICAgICAgICAgICAgaWYgKCBpc1N1Y2Nlc3MgKSB7CisgICAgICAgICAgICAgICAgZGVm
ZXJyZWQucmVzb2x2ZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBzdWNjZXNzLCBzdGF0dXNUZXh0
LCBqcVhIUiBdICk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRlZmVy
cmVkLnJlamVjdFdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCwgZXJy
b3IgXSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTdGF0dXMtZGVwZW5kZW50
IGNhbGxiYWNrcworICAgICAgICAgICAganFYSFIuc3RhdHVzQ29kZSggc3RhdHVzQ29kZSApOwor
ICAgICAgICAgICAgc3RhdHVzQ29kZSA9IHVuZGVmaW5lZDsKKworICAgICAgICAgICAgaWYgKCBm
aXJlR2xvYmFscyApIHsKKyAgICAgICAgICAgICAgICBnbG9iYWxFdmVudENvbnRleHQudHJpZ2dl
ciggaXNTdWNjZXNzID8gImFqYXhTdWNjZXNzIiA6ICJhamF4RXJyb3IiLAorICAgICAgICAgICAg
ICAgICAgICBbIGpxWEhSLCBzLCBpc1N1Y2Nlc3MgPyBzdWNjZXNzIDogZXJyb3IgXSApOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBDb21wbGV0ZQorICAgICAgICAgICAgY29tcGxl
dGVEZWZlcnJlZC5maXJlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0
IF0gKTsKKworICAgICAgICAgICAgaWYgKCBmaXJlR2xvYmFscyApIHsKKyAgICAgICAgICAgICAg
ICBnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggImFqYXhDb21wbGV0ZSIsIFsganFYSFIsIHMg
XSApOworCisgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBnbG9iYWwgQUpBWCBjb3VudGVy
CisgICAgICAgICAgICAgICAgaWYgKCAhKCAtLWpRdWVyeS5hY3RpdmUgKSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoICJhamF4U3RvcCIgKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4ganFY
SFI7CisgICAgfSwKKworICAgIGdldEpTT046IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNr
ICkgeworICAgICAgICByZXR1cm4galF1ZXJ5LmdldCggdXJsLCBkYXRhLCBjYWxsYmFjaywgImpz
b24iICk7CisgICAgfSwKKworICAgIGdldFNjcmlwdDogZnVuY3Rpb24oIHVybCwgY2FsbGJhY2sg
KSB7CisgICAgICAgIHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIHVuZGVmaW5lZCwgY2FsbGJhY2ss
ICJzY3JpcHQiICk7CisgICAgfQorfSApOworCitqUXVlcnkuZWFjaCggWyAiZ2V0IiwgInBvc3Qi
IF0sIGZ1bmN0aW9uKCBpLCBtZXRob2QgKSB7CisgICAgalF1ZXJ5WyBtZXRob2QgXSA9IGZ1bmN0
aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrLCB0eXBlICkgeworCisgICAgICAgIC8vIFNoaWZ0IGFy
Z3VtZW50cyBpZiBkYXRhIGFyZ3VtZW50IHdhcyBvbWl0dGVkCisgICAgICAgIGlmICggalF1ZXJ5
LmlzRnVuY3Rpb24oIGRhdGEgKSApIHsKKyAgICAgICAgICAgIHR5cGUgPSB0eXBlIHx8IGNhbGxi
YWNrOworICAgICAgICAgICAgY2FsbGJhY2sgPSBkYXRhOworICAgICAgICAgICAgZGF0YSA9IHVu
ZGVmaW5lZDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRoZSB1cmwgY2FuIGJlIGFuIG9wdGlv
bnMgb2JqZWN0ICh3aGljaCB0aGVuIG11c3QgaGF2ZSAudXJsKQorICAgICAgICByZXR1cm4galF1
ZXJ5LmFqYXgoIGpRdWVyeS5leHRlbmQoIHsKKyAgICAgICAgICAgIHVybDogdXJsLAorICAgICAg
ICAgICAgdHlwZTogbWV0aG9kLAorICAgICAgICAgICAgZGF0YVR5cGU6IHR5cGUsCisgICAgICAg
ICAgICBkYXRhOiBkYXRhLAorICAgICAgICAgICAgc3VjY2VzczogY2FsbGJhY2sKKyAgICAgICAg
fSwgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIHVybCApICYmIHVybCApICk7CisgICAgfTsKK30gKTsK
KworCitqUXVlcnkuX2V2YWxVcmwgPSBmdW5jdGlvbiggdXJsICkgeworICAgIHJldHVybiBqUXVl
cnkuYWpheCggeworICAgICAgICB1cmw6IHVybCwKKworICAgICAgICAvLyBNYWtlIHRoaXMgZXhw
bGljaXQsIHNpbmNlIHVzZXIgY2FuIG92ZXJyaWRlIHRoaXMgdGhyb3VnaCBhamF4U2V0dXAgKCMx
MTI2NCkKKyAgICAgICAgdHlwZTogIkdFVCIsCisgICAgICAgIGRhdGFUeXBlOiAic2NyaXB0IiwK
KyAgICAgICAgY2FjaGU6IHRydWUsCisgICAgICAgIGFzeW5jOiBmYWxzZSwKKyAgICAgICAgZ2xv
YmFsOiBmYWxzZSwKKyAgICAgICAgInRocm93cyI6IHRydWUKKyAgICB9ICk7Cit9OworCisKK2pR
dWVyeS5mbi5leHRlbmQoIHsKKyAgICB3cmFwQWxsOiBmdW5jdGlvbiggaHRtbCApIHsKKyAgICAg
ICAgdmFyIHdyYXA7CisKKyAgICAgICAgaWYgKCB0aGlzWyAwIF0gKSB7CisgICAgICAgICAgICBp
ZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBodG1sICkgKSB7CisgICAgICAgICAgICAgICAgaHRtbCA9
IGh0bWwuY2FsbCggdGhpc1sgMCBdICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v
IFRoZSBlbGVtZW50cyB0byB3cmFwIHRoZSB0YXJnZXQgYXJvdW5kCisgICAgICAgICAgICB3cmFw
ID0galF1ZXJ5KCBodG1sLCB0aGlzWyAwIF0ub3duZXJEb2N1bWVudCApLmVxKCAwICkuY2xvbmUo
IHRydWUgKTsKKworICAgICAgICAgICAgaWYgKCB0aGlzWyAwIF0ucGFyZW50Tm9kZSApIHsKKyAg
ICAgICAgICAgICAgICB3cmFwLmluc2VydEJlZm9yZSggdGhpc1sgMCBdICk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHdyYXAubWFwKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAg
ICB2YXIgZWxlbSA9IHRoaXM7CisKKyAgICAgICAgICAgICAgICB3aGlsZSAoIGVsZW0uZmlyc3RF
bGVtZW50Q2hpbGQgKSB7CisgICAgICAgICAgICAgICAgICAgIGVsZW0gPSBlbGVtLmZpcnN0RWxl
bWVudENoaWxkOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBl
bGVtOworICAgICAgICAgICAgfSApLmFwcGVuZCggdGhpcyApOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKworICAgIHdyYXBJbm5lcjogZnVuY3Rpb24oIGh0bWwg
KSB7CisgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGh0bWwgKSApIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkgeworICAgICAgICAgICAgICAgIGpR
dWVyeSggdGhpcyApLndyYXBJbm5lciggaHRtbC5jYWxsKCB0aGlzLCBpICkgKTsKKyAgICAgICAg
ICAgIH0gKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgdmFyIHNlbGYgPSBqUXVlcnkoIHRoaXMgKSwKKyAgICAgICAgICAg
ICAgICBjb250ZW50cyA9IHNlbGYuY29udGVudHMoKTsKKworICAgICAgICAgICAgaWYgKCBjb250
ZW50cy5sZW5ndGggKSB7CisgICAgICAgICAgICAgICAgY29udGVudHMud3JhcEFsbCggaHRtbCAp
OworCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNlbGYuYXBwZW5kKCBo
dG1sICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gKTsKKyAgICB9LAorCisgICAgd3JhcDog
ZnVuY3Rpb24oIGh0bWwgKSB7CisgICAgICAgIHZhciBpc0Z1bmN0aW9uID0galF1ZXJ5LmlzRnVu
Y3Rpb24oIGh0bWwgKTsKKworICAgICAgICByZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSAp
IHsKKyAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLndyYXBBbGwoIGlzRnVuY3Rpb24gPyBodG1s
LmNhbGwoIHRoaXMsIGkgKSA6IGh0bWwgKTsKKyAgICAgICAgfSApOworICAgIH0sCisKKyAgICB1
bndyYXA6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKKyAgICAgICAgdGhpcy5wYXJlbnQoIHNlbGVj
dG9yICkubm90KCAiYm9keSIgKS5lYWNoKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGpRdWVy
eSggdGhpcyApLnJlcGxhY2VXaXRoKCB0aGlzLmNoaWxkTm9kZXMgKTsKKyAgICAgICAgfSApOwor
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9Cit9ICk7CisKKworalF1ZXJ5LmV4cHIucHNldWRv
cy5oaWRkZW4gPSBmdW5jdGlvbiggZWxlbSApIHsKKyAgICByZXR1cm4gIWpRdWVyeS5leHByLnBz
ZXVkb3MudmlzaWJsZSggZWxlbSApOworfTsKK2pRdWVyeS5leHByLnBzZXVkb3MudmlzaWJsZSA9
IGZ1bmN0aW9uKCBlbGVtICkgeworICAgIHJldHVybiAhISggZWxlbS5vZmZzZXRXaWR0aCB8fCBl
bGVtLm9mZnNldEhlaWdodCB8fCBlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICk7Cit9Owor
CisKKworCitqUXVlcnkuYWpheFNldHRpbmdzLnhociA9IGZ1bmN0aW9uKCkgeworICAgIHRyeSB7
CisgICAgICAgIHJldHVybiBuZXcgd2luZG93LlhNTEh0dHBSZXF1ZXN0KCk7CisgICAgfSBjYXRj
aCAoIGUgKSB7fQorfTsKKwordmFyIHhoclN1Y2Nlc3NTdGF0dXMgPSB7CisKKyAgICAgICAgLy8g
RmlsZSBwcm90b2NvbCBhbHdheXMgeWllbGRzIHN0YXR1cyBjb2RlIDAsIGFzc3VtZSAyMDAKKyAg
ICAgICAgMDogMjAwLAorCisgICAgICAgIC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5CisgICAgICAg
IC8vICMxNDUwOiBzb21ldGltZXMgSUUgcmV0dXJucyAxMjIzIHdoZW4gaXQgc2hvdWxkIGJlIDIw
NAorICAgICAgICAxMjIzOiAyMDQKKyAgICB9LAorICAgIHhoclN1cHBvcnRlZCA9IGpRdWVyeS5h
amF4U2V0dGluZ3MueGhyKCk7CisKK3N1cHBvcnQuY29ycyA9ICEheGhyU3VwcG9ydGVkICYmICgg
IndpdGhDcmVkZW50aWFscyIgaW4geGhyU3VwcG9ydGVkICk7CitzdXBwb3J0LmFqYXggPSB4aHJT
dXBwb3J0ZWQgPSAhIXhoclN1cHBvcnRlZDsKKworalF1ZXJ5LmFqYXhUcmFuc3BvcnQoIGZ1bmN0
aW9uKCBvcHRpb25zICkgeworICAgIHZhciBjYWxsYmFjaywgZXJyb3JDYWxsYmFjazsKKworICAg
IC8vIENyb3NzIGRvbWFpbiBvbmx5IGFsbG93ZWQgaWYgc3VwcG9ydGVkIHRocm91Z2ggWE1MSHR0
cFJlcXVlc3QKKyAgICBpZiAoIHN1cHBvcnQuY29ycyB8fCB4aHJTdXBwb3J0ZWQgJiYgIW9wdGlv
bnMuY3Jvc3NEb21haW4gKSB7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBzZW5kOiBm
dW5jdGlvbiggaGVhZGVycywgY29tcGxldGUgKSB7CisgICAgICAgICAgICAgICAgdmFyIGksCisg
ICAgICAgICAgICAgICAgICAgIHhociA9IG9wdGlvbnMueGhyKCk7CisKKyAgICAgICAgICAgICAg
ICB4aHIub3BlbigKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlLAorICAgICAgICAg
ICAgICAgICAgICBvcHRpb25zLnVybCwKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5hc3lu
YywKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy51c2VybmFtZSwKKyAgICAgICAgICAgICAg
ICAgICAgb3B0aW9ucy5wYXNzd29yZAorICAgICAgICAgICAgICAgICk7CisKKyAgICAgICAgICAg
ICAgICAvLyBBcHBseSBjdXN0b20gZmllbGRzIGlmIHByb3ZpZGVkCisgICAgICAgICAgICAgICAg
aWYgKCBvcHRpb25zLnhockZpZWxkcyApIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICggaSBp
biBvcHRpb25zLnhockZpZWxkcyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHhoclsgaSBd
ID0gb3B0aW9ucy54aHJGaWVsZHNbIGkgXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIE92ZXJyaWRlIG1pbWUgdHlwZSBpZiBu
ZWVkZWQKKyAgICAgICAgICAgICAgICBpZiAoIG9wdGlvbnMubWltZVR5cGUgJiYgeGhyLm92ZXJy
aWRlTWltZVR5cGUgKSB7CisgICAgICAgICAgICAgICAgICAgIHhoci5vdmVycmlkZU1pbWVUeXBl
KCBvcHRpb25zLm1pbWVUeXBlICk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgLy8gWC1SZXF1ZXN0ZWQtV2l0aCBoZWFkZXIKKyAgICAgICAgICAgICAgICAvLyBGb3IgY3Jv
c3MtZG9tYWluIHJlcXVlc3RzLCBzZWVpbmcgYXMgY29uZGl0aW9ucyBmb3IgYSBwcmVmbGlnaHQg
YXJlCisgICAgICAgICAgICAgICAgLy8gYWtpbiB0byBhIGppZ3NhdyBwdXp6bGUsIHdlIHNpbXBs
eSBuZXZlciBzZXQgaXQgdG8gYmUgc3VyZS4KKyAgICAgICAgICAgICAgICAvLyAoaXQgY2FuIGFs
d2F5cyBiZSBzZXQgb24gYSBwZXItcmVxdWVzdCBiYXNpcyBvciBldmVuIHVzaW5nIGFqYXhTZXR1
cCkKKyAgICAgICAgICAgICAgICAvLyBGb3Igc2FtZS1kb21haW4gcmVxdWVzdHMsIHdvbid0IGNo
YW5nZSBoZWFkZXIgaWYgYWxyZWFkeSBwcm92aWRlZC4KKyAgICAgICAgICAgICAgICBpZiAoICFv
cHRpb25zLmNyb3NzRG9tYWluICYmICFoZWFkZXJzWyAiWC1SZXF1ZXN0ZWQtV2l0aCIgXSApIHsK
KyAgICAgICAgICAgICAgICAgICAgaGVhZGVyc1sgIlgtUmVxdWVzdGVkLVdpdGgiIF0gPSAiWE1M
SHR0cFJlcXVlc3QiOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFNl
dCBoZWFkZXJzCisgICAgICAgICAgICAgICAgZm9yICggaSBpbiBoZWFkZXJzICkgeworICAgICAg
ICAgICAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlciggaSwgaGVhZGVyc1sgaSBdICk7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gQ2FsbGJhY2sKKyAgICAgICAg
ICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uKCB0eXBlICkgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNhbGxi
YWNrICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZXJyb3JDYWxs
YmFjayA9IHhoci5vbmxvYWQgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIu
b25lcnJvciA9IHhoci5vbmFib3J0ID0geGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGUgPT09ICJhYm9ydCIgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoci5hYm9ydCgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHR5cGUgPT09ICJlcnJvciIgKSB7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogSUUgPD05IG9ubHkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT24gYSBtYW51YWwgbmF0aXZlIGFib3J0LCBJ
RTkgdGhyb3dzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVycm9ycyBvbiBh
bnkgcHJvcGVydHkgYWNjZXNzIHRoYXQgaXMgbm90IHJlYWR5U3RhdGUKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgeGhyLnN0YXR1cyAhPT0gIm51bWJlciIgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZSggMCwgImVycm9y
IiApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGUoCisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBGaWxlOiBwcm90b2NvbCBhbHdheXMgeWllbGRzIHN0
YXR1cyAwOyBzZWUgIzg2MDUsICMxNDIwNworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHhoci5zdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeGhyLnN0YXR1c1RleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21w
bGV0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoclN1Y2Nlc3NTdGF0
dXNbIHhoci5zdGF0dXMgXSB8fCB4aHIuc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeGhyLnN0YXR1c1RleHQsCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBJRTkgaGFzIG5vIFhIUjIgYnV0IHRocm93cyBvbiBiaW5hcnkgKHRy
YWMtMTE0MjYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3IgWEhS
MiBub24tdGV4dCwgbGV0IHRoZSBjYWxsZXIgaGFuZGxlIGl0IChnaC0yNDk4KQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKCB4aHIucmVzcG9uc2VUeXBlIHx8ICJ0ZXh0IiAp
ICE9PSAidGV4dCIgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBl
b2YgeGhyLnJlc3BvbnNlVGV4dCAhPT0gInN0cmluZyIgPworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsgYmluYXJ5OiB4aHIucmVzcG9uc2UgfSA6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyB0ZXh0OiB4aHIucmVzcG9uc2VUZXh0IH0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIuZ2V0QWxsUmVzcG9uc2VI
ZWFkZXJzKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIC8vIExp
c3RlbiB0byBldmVudHMKKyAgICAgICAgICAgICAgICB4aHIub25sb2FkID0gY2FsbGJhY2soKTsK
KyAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrID0geGhyLm9uZXJyb3IgPSBjYWxsYmFjaygg
ImVycm9yIiApOworCisgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogSUUgOSBvbmx5CisgICAg
ICAgICAgICAgICAgLy8gVXNlIG9ucmVhZHlzdGF0ZWNoYW5nZSB0byByZXBsYWNlIG9uYWJvcnQK
KyAgICAgICAgICAgICAgICAvLyB0byBoYW5kbGUgdW5jYXVnaHQgYWJvcnRzCisgICAgICAgICAg
ICAgICAgaWYgKCB4aHIub25hYm9ydCAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAg
ICAgICB4aHIub25hYm9ydCA9IGVycm9yQ2FsbGJhY2s7CisgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9u
KCkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayByZWFkeVN0YXRlIGJlZm9y
ZSB0aW1lb3V0IGFzIGl0IGNoYW5nZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggeGhy
LnJlYWR5U3RhdGUgPT09IDQgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBB
bGxvdyBvbmVycm9yIHRvIGJlIGNhbGxlZCBmaXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBidXQgdGhhdCB3aWxsIG5vdCBoYW5kbGUgYSBuYXRpdmUgYWJvcnQKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBBbHNvLCBzYXZlIGVycm9yQ2FsbGJhY2sgdG8gYSB2YXJp
YWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzIHhoci5vbmVycm9yIGNhbm5v
dCBiZSBhY2Nlc3NlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1l
b3V0KCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBj
YWxsYmFjayApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yQ2Fs
bGJhY2soKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBD
cmVhdGUgdGhlIGFib3J0IGNhbGxiYWNrCisgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxs
YmFjayggImFib3J0IiApOworCisgICAgICAgICAgICAgICAgdHJ5IHsKKworICAgICAgICAgICAg
ICAgICAgICAvLyBEbyBzZW5kIHRoZSByZXF1ZXN0ICh0aGlzIG1heSByYWlzZSBhbiBleGNlcHRp
b24pCisgICAgICAgICAgICAgICAgICAgIHhoci5zZW5kKCBvcHRpb25zLmhhc0NvbnRlbnQgJiYg
b3B0aW9ucy5kYXRhIHx8IG51bGwgKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoICggZSApIHsK
KworICAgICAgICAgICAgICAgICAgICAvLyAjMTQ2ODM6IE9ubHkgcmV0aHJvdyBpZiB0aGlzIGhh
c24ndCBiZWVuIG5vdGlmaWVkIGFzIGFuIGVycm9yIHlldAorICAgICAgICAgICAgICAgICAgICBp
ZiAoIGNhbGxiYWNrICkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisKKyAg
ICAgICAgICAgIGFib3J0OiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBpZiAoIGNhbGxi
YWNrICkgeworICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9Cit9ICk7CisKKworCisKKy8vIFBy
ZXZlbnQgYXV0by1leGVjdXRpb24gb2Ygc2NyaXB0cyB3aGVuIG5vIGV4cGxpY2l0IGRhdGFUeXBl
IHdhcyBwcm92aWRlZCAoU2VlIGdoLTI0MzIpCitqUXVlcnkuYWpheFByZWZpbHRlciggZnVuY3Rp
b24oIHMgKSB7CisgICAgaWYgKCBzLmNyb3NzRG9tYWluICkgeworICAgICAgICBzLmNvbnRlbnRz
LnNjcmlwdCA9IGZhbHNlOworICAgIH0KK30gKTsKKworLy8gSW5zdGFsbCBzY3JpcHQgZGF0YVR5
cGUKK2pRdWVyeS5hamF4U2V0dXAoIHsKKyAgICBhY2NlcHRzOiB7CisgICAgICAgIHNjcmlwdDog
InRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgIiArCisgICAgICAgICAg
ICAiYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0IgorICAg
IH0sCisgICAgY29udGVudHM6IHsKKyAgICAgICAgc2NyaXB0OiAvXGIoPzpqYXZhfGVjbWEpc2Ny
aXB0XGIvCisgICAgfSwKKyAgICBjb252ZXJ0ZXJzOiB7CisgICAgICAgICJ0ZXh0IHNjcmlwdCI6
IGZ1bmN0aW9uKCB0ZXh0ICkgeworICAgICAgICAgICAgalF1ZXJ5Lmdsb2JhbEV2YWwoIHRleHQg
KTsKKyAgICAgICAgICAgIHJldHVybiB0ZXh0OworICAgICAgICB9CisgICAgfQorfSApOworCisv
LyBIYW5kbGUgY2FjaGUncyBzcGVjaWFsIGNhc2UgYW5kIGNyb3NzRG9tYWluCitqUXVlcnkuYWph
eFByZWZpbHRlciggInNjcmlwdCIsIGZ1bmN0aW9uKCBzICkgeworICAgIGlmICggcy5jYWNoZSA9
PT0gdW5kZWZpbmVkICkgeworICAgICAgICBzLmNhY2hlID0gZmFsc2U7CisgICAgfQorICAgIGlm
ICggcy5jcm9zc0RvbWFpbiApIHsKKyAgICAgICAgcy50eXBlID0gIkdFVCI7CisgICAgfQorfSAp
OworCisvLyBCaW5kIHNjcmlwdCB0YWcgaGFjayB0cmFuc3BvcnQKK2pRdWVyeS5hamF4VHJhbnNw
b3J0KCAic2NyaXB0IiwgZnVuY3Rpb24oIHMgKSB7CisKKyAgICAvLyBUaGlzIHRyYW5zcG9ydCBv
bmx5IGRlYWxzIHdpdGggY3Jvc3MgZG9tYWluIHJlcXVlc3RzCisgICAgaWYgKCBzLmNyb3NzRG9t
YWluICkgeworICAgICAgICB2YXIgc2NyaXB0LCBjYWxsYmFjazsKKyAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgIHNlbmQ6IGZ1bmN0aW9uKCBfLCBjb21wbGV0ZSApIHsKKyAgICAgICAgICAg
ICAgICBzY3JpcHQgPSBqUXVlcnkoICI8c2NyaXB0PiIgKS5wcm9wKCB7CisgICAgICAgICAgICAg
ICAgICAgIGNoYXJzZXQ6IHMuc2NyaXB0Q2hhcnNldCwKKyAgICAgICAgICAgICAgICAgICAgc3Jj
OiBzLnVybAorICAgICAgICAgICAgICAgIH0gKS5vbigKKyAgICAgICAgICAgICAgICAgICAgImxv
YWQgZXJyb3IiLAorICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uKCBldnQg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQucmVtb3ZlKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjYWxsYmFjayA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIGV2dCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZSggZXZ0LnR5
cGUgPT09ICJlcnJvciIgPyA0MDQgOiAyMDAsIGV2dC50eXBlICk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICApOworCisg
ICAgICAgICAgICAgICAgLy8gVXNlIG5hdGl2ZSBET00gbWFuaXB1bGF0aW9uIHRvIGF2b2lkIG91
ciBkb21NYW5pcCBBSkFYIHRyaWNrZXJ5CisgICAgICAgICAgICAgICAgZG9jdW1lbnQuaGVhZC5h
cHBlbmRDaGlsZCggc2NyaXB0WyAwIF0gKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBh
Ym9ydDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgaWYgKCBjYWxsYmFjayApIHsKKyAg
ICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH07CisgICAgfQorfSApOworCisKKworCit2YXIgb2xkQ2FsbGJhY2tz
ID0gW10sCisgICAgcmpzb25wID0gLyg9KVw/KD89JnwkKXxcP1w/LzsKKworLy8gRGVmYXVsdCBq
c29ucCBzZXR0aW5ncworalF1ZXJ5LmFqYXhTZXR1cCggeworICAgIGpzb25wOiAiY2FsbGJhY2si
LAorICAgIGpzb25wQ2FsbGJhY2s6IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgY2FsbGJhY2sg
PSBvbGRDYWxsYmFja3MucG9wKCkgfHwgKCBqUXVlcnkuZXhwYW5kbyArICJfIiArICggbm9uY2Ur
KyApICk7CisgICAgICAgIHRoaXNbIGNhbGxiYWNrIF0gPSB0cnVlOworICAgICAgICByZXR1cm4g
Y2FsbGJhY2s7CisgICAgfQorfSApOworCisvLyBEZXRlY3QsIG5vcm1hbGl6ZSBvcHRpb25zIGFu
ZCBpbnN0YWxsIGNhbGxiYWNrcyBmb3IganNvbnAgcmVxdWVzdHMKK2pRdWVyeS5hamF4UHJlZmls
dGVyKCAianNvbiBqc29ucCIsIGZ1bmN0aW9uKCBzLCBvcmlnaW5hbFNldHRpbmdzLCBqcVhIUiAp
IHsKKworICAgIHZhciBjYWxsYmFja05hbWUsIG92ZXJ3cml0dGVuLCByZXNwb25zZUNvbnRhaW5l
ciwKKyAgICAgICAganNvblByb3AgPSBzLmpzb25wICE9PSBmYWxzZSAmJiAoIHJqc29ucC50ZXN0
KCBzLnVybCApID8KKyAgICAgICAgICAgICJ1cmwiIDoKKyAgICAgICAgICAgIHR5cGVvZiBzLmRh
dGEgPT09ICJzdHJpbmciICYmCisgICAgICAgICAgICAgICAgKCBzLmNvbnRlbnRUeXBlIHx8ICIi
ICkKKyAgICAgICAgICAgICAgICAgICAgLmluZGV4T2YoICJhcHBsaWNhdGlvbi94LXd3dy1mb3Jt
LXVybGVuY29kZWQiICkgPT09IDAgJiYKKyAgICAgICAgICAgICAgICByanNvbnAudGVzdCggcy5k
YXRhICkgJiYgImRhdGEiCisgICAgICAgICk7CisKKyAgICAvLyBIYW5kbGUgaWZmIHRoZSBleHBl
Y3RlZCBkYXRhIHR5cGUgaXMgImpzb25wIiBvciB3ZSBoYXZlIGEgcGFyYW1ldGVyIHRvIHNldAor
ICAgIGlmICgganNvblByb3AgfHwgcy5kYXRhVHlwZXNbIDAgXSA9PT0gImpzb25wIiApIHsKKwor
ICAgICAgICAvLyBHZXQgY2FsbGJhY2sgbmFtZSwgcmVtZW1iZXJpbmcgcHJlZXhpc3RpbmcgdmFs
dWUgYXNzb2NpYXRlZCB3aXRoIGl0CisgICAgICAgIGNhbGxiYWNrTmFtZSA9IHMuanNvbnBDYWxs
YmFjayA9IGpRdWVyeS5pc0Z1bmN0aW9uKCBzLmpzb25wQ2FsbGJhY2sgKSA/CisgICAgICAgICAg
ICBzLmpzb25wQ2FsbGJhY2soKSA6CisgICAgICAgICAgICBzLmpzb25wQ2FsbGJhY2s7CisKKyAg
ICAgICAgLy8gSW5zZXJ0IGNhbGxiYWNrIGludG8gdXJsIG9yIGZvcm0gZGF0YQorICAgICAgICBp
ZiAoIGpzb25Qcm9wICkgeworICAgICAgICAgICAgc1sganNvblByb3AgXSA9IHNbIGpzb25Qcm9w
IF0ucmVwbGFjZSggcmpzb25wLCAiJDEiICsgY2FsbGJhY2tOYW1lICk7CisgICAgICAgIH0gZWxz
ZSBpZiAoIHMuanNvbnAgIT09IGZhbHNlICkgeworICAgICAgICAgICAgcy51cmwgKz0gKCBycXVl
cnkudGVzdCggcy51cmwgKSA/ICImIiA6ICI/IiApICsgcy5qc29ucCArICI9IiArIGNhbGxiYWNr
TmFtZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFVzZSBkYXRhIGNvbnZlcnRlciB0byByZXRy
aWV2ZSBqc29uIGFmdGVyIHNjcmlwdCBleGVjdXRpb24KKyAgICAgICAgcy5jb252ZXJ0ZXJzWyAi
c2NyaXB0IGpzb24iIF0gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGlmICggIXJlc3BvbnNl
Q29udGFpbmVyICkgeworICAgICAgICAgICAgICAgIGpRdWVyeS5lcnJvciggY2FsbGJhY2tOYW1l
ICsgIiB3YXMgbm90IGNhbGxlZCIgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biByZXNwb25zZUNvbnRhaW5lclsgMCBdOworICAgICAgICB9OworCisgICAgICAgIC8vIEZvcmNl
IGpzb24gZGF0YVR5cGUKKyAgICAgICAgcy5kYXRhVHlwZXNbIDAgXSA9ICJqc29uIjsKKworICAg
ICAgICAvLyBJbnN0YWxsIGNhbGxiYWNrCisgICAgICAgIG92ZXJ3cml0dGVuID0gd2luZG93WyBj
YWxsYmFja05hbWUgXTsKKyAgICAgICAgd2luZG93WyBjYWxsYmFja05hbWUgXSA9IGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgcmVzcG9uc2VDb250YWluZXIgPSBhcmd1bWVudHM7CisgICAgICAg
IH07CisKKyAgICAgICAgLy8gQ2xlYW4tdXAgZnVuY3Rpb24gKGZpcmVzIGFmdGVyIGNvbnZlcnRl
cnMpCisgICAgICAgIGpxWEhSLmFsd2F5cyggZnVuY3Rpb24oKSB7CisKKyAgICAgICAgICAgIC8v
IElmIHByZXZpb3VzIHZhbHVlIGRpZG4ndCBleGlzdCAtIHJlbW92ZSBpdAorICAgICAgICAgICAg
aWYgKCBvdmVyd3JpdHRlbiA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgIGpRdWVy
eSggd2luZG93ICkucmVtb3ZlUHJvcCggY2FsbGJhY2tOYW1lICk7CisKKyAgICAgICAgICAgIC8v
IE90aGVyd2lzZSByZXN0b3JlIHByZWV4aXN0aW5nIHZhbHVlCisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBvdmVyd3JpdHRlbjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gU2F2ZSBiYWNrIGFzIGZyZWUKKyAgICAg
ICAgICAgIGlmICggc1sgY2FsbGJhY2tOYW1lIF0gKSB7CisKKyAgICAgICAgICAgICAgICAvLyBN
YWtlIHN1cmUgdGhhdCByZS11c2luZyB0aGUgb3B0aW9ucyBkb2Vzbid0IHNjcmV3IHRoaW5ncyBh
cm91bmQKKyAgICAgICAgICAgICAgICBzLmpzb25wQ2FsbGJhY2sgPSBvcmlnaW5hbFNldHRpbmdz
Lmpzb25wQ2FsbGJhY2s7CisKKyAgICAgICAgICAgICAgICAvLyBTYXZlIHRoZSBjYWxsYmFjayBu
YW1lIGZvciBmdXR1cmUgdXNlCisgICAgICAgICAgICAgICAgb2xkQ2FsbGJhY2tzLnB1c2goIGNh
bGxiYWNrTmFtZSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBDYWxsIGlmIGl0
IHdhcyBhIGZ1bmN0aW9uIGFuZCB3ZSBoYXZlIGEgcmVzcG9uc2UKKyAgICAgICAgICAgIGlmICgg
cmVzcG9uc2VDb250YWluZXIgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIG92ZXJ3cml0dGVuICkgKSB7
CisgICAgICAgICAgICAgICAgb3ZlcndyaXR0ZW4oIHJlc3BvbnNlQ29udGFpbmVyWyAwIF0gKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmVzcG9uc2VDb250YWluZXIgPSBvdmVyd3Jp
dHRlbiA9IHVuZGVmaW5lZDsKKyAgICAgICAgfSApOworCisgICAgICAgIC8vIERlbGVnYXRlIHRv
IHNjcmlwdAorICAgICAgICByZXR1cm4gInNjcmlwdCI7CisgICAgfQorfSApOworCisKKworCisv
LyBTdXBwb3J0OiBTYWZhcmkgOCBvbmx5CisvLyBJbiBTYWZhcmkgOCBkb2N1bWVudHMgY3JlYXRl
ZCB2aWEgZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50CisvLyBjb2xs
YXBzZSBzaWJsaW5nIGZvcm1zOiB0aGUgc2Vjb25kIG9uZSBiZWNvbWVzIGEgY2hpbGQgb2YgdGhl
IGZpcnN0IG9uZS4KKy8vIEJlY2F1c2Ugb2YgdGhhdCwgdGhpcyBzZWN1cml0eSBtZWFzdXJlIGhh
cyB0byBiZSBkaXNhYmxlZCBpbiBTYWZhcmkgOC4KKy8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzczMzcKK3N1cHBvcnQuY3JlYXRlSFRNTERvY3VtZW50ID0gKCBm
dW5jdGlvbigpIHsKKyAgICB2YXIgYm9keSA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0
ZUhUTUxEb2N1bWVudCggIiIgKS5ib2R5OworICAgIGJvZHkuaW5uZXJIVE1MID0gIjxmb3JtPjwv
Zm9ybT48Zm9ybT48L2Zvcm0+IjsKKyAgICByZXR1cm4gYm9keS5jaGlsZE5vZGVzLmxlbmd0aCA9
PT0gMjsKK30gKSgpOworCisKKy8vIEFyZ3VtZW50ICJkYXRhIiBzaG91bGQgYmUgc3RyaW5nIG9m
IGh0bWwKKy8vIGNvbnRleHQgKG9wdGlvbmFsKTogSWYgc3BlY2lmaWVkLCB0aGUgZnJhZ21lbnQg
d2lsbCBiZSBjcmVhdGVkIGluIHRoaXMgY29udGV4dCwKKy8vIGRlZmF1bHRzIHRvIGRvY3VtZW50
CisvLyBrZWVwU2NyaXB0cyAob3B0aW9uYWwpOiBJZiB0cnVlLCB3aWxsIGluY2x1ZGUgc2NyaXB0
cyBwYXNzZWQgaW4gdGhlIGh0bWwgc3RyaW5nCitqUXVlcnkucGFyc2VIVE1MID0gZnVuY3Rpb24o
IGRhdGEsIGNvbnRleHQsIGtlZXBTY3JpcHRzICkgeworICAgIGlmICggdHlwZW9mIGRhdGEgIT09
ICJzdHJpbmciICkgeworICAgICAgICByZXR1cm4gW107CisgICAgfQorICAgIGlmICggdHlwZW9m
IGNvbnRleHQgPT09ICJib29sZWFuIiApIHsKKyAgICAgICAga2VlcFNjcmlwdHMgPSBjb250ZXh0
OworICAgICAgICBjb250ZXh0ID0gZmFsc2U7CisgICAgfQorCisgICAgdmFyIGJhc2UsIHBhcnNl
ZCwgc2NyaXB0czsKKworICAgIGlmICggIWNvbnRleHQgKSB7CisKKyAgICAgICAgLy8gU3RvcCBz
Y3JpcHRzIG9yIGlubGluZSBldmVudCBoYW5kbGVycyBmcm9tIGJlaW5nIGV4ZWN1dGVkIGltbWVk
aWF0ZWx5CisgICAgICAgIC8vIGJ5IHVzaW5nIGRvY3VtZW50LmltcGxlbWVudGF0aW9uCisgICAg
ICAgIGlmICggc3VwcG9ydC5jcmVhdGVIVE1MRG9jdW1lbnQgKSB7CisgICAgICAgICAgICBjb250
ZXh0ID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCAiIiApOwor
CisgICAgICAgICAgICAvLyBTZXQgdGhlIGJhc2UgaHJlZiBmb3IgdGhlIGNyZWF0ZWQgZG9jdW1l
bnQKKyAgICAgICAgICAgIC8vIHNvIGFueSBwYXJzZWQgZWxlbWVudHMgd2l0aCBVUkxzCisgICAg
ICAgICAgICAvLyBhcmUgYmFzZWQgb24gdGhlIGRvY3VtZW50J3MgVVJMIChnaC0yOTY1KQorICAg
ICAgICAgICAgYmFzZSA9IGNvbnRleHQuY3JlYXRlRWxlbWVudCggImJhc2UiICk7CisgICAgICAg
ICAgICBiYXNlLmhyZWYgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmOworICAgICAgICAgICAgY29u
dGV4dC5oZWFkLmFwcGVuZENoaWxkKCBiYXNlICk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBjb250ZXh0ID0gZG9jdW1lbnQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwYXJzZWQg
PSByc2luZ2xlVGFnLmV4ZWMoIGRhdGEgKTsKKyAgICBzY3JpcHRzID0gIWtlZXBTY3JpcHRzICYm
IFtdOworCisgICAgLy8gU2luZ2xlIHRhZworICAgIGlmICggcGFyc2VkICkgeworICAgICAgICBy
ZXR1cm4gWyBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIHBhcnNlZFsgMSBdICkgXTsKKyAgICB9CisK
KyAgICBwYXJzZWQgPSBidWlsZEZyYWdtZW50KCBbIGRhdGEgXSwgY29udGV4dCwgc2NyaXB0cyAp
OworCisgICAgaWYgKCBzY3JpcHRzICYmIHNjcmlwdHMubGVuZ3RoICkgeworICAgICAgICBqUXVl
cnkoIHNjcmlwdHMgKS5yZW1vdmUoKTsKKyAgICB9CisKKyAgICByZXR1cm4galF1ZXJ5Lm1lcmdl
KCBbXSwgcGFyc2VkLmNoaWxkTm9kZXMgKTsKK307CisKKworLyoqCisgKiBMb2FkIGEgdXJsIGlu
dG8gYSBwYWdlCisgKi8KK2pRdWVyeS5mbi5sb2FkID0gZnVuY3Rpb24oIHVybCwgcGFyYW1zLCBj
YWxsYmFjayApIHsKKyAgICB2YXIgc2VsZWN0b3IsIHR5cGUsIHJlc3BvbnNlLAorICAgICAgICBz
ZWxmID0gdGhpcywKKyAgICAgICAgb2ZmID0gdXJsLmluZGV4T2YoICIgIiApOworCisgICAgaWYg
KCBvZmYgPiAtMSApIHsKKyAgICAgICAgc2VsZWN0b3IgPSBzdHJpcEFuZENvbGxhcHNlKCB1cmwu
c2xpY2UoIG9mZiApICk7CisgICAgICAgIHVybCA9IHVybC5zbGljZSggMCwgb2ZmICk7CisgICAg
fQorCisgICAgLy8gSWYgaXQncyBhIGZ1bmN0aW9uCisgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlv
biggcGFyYW1zICkgKSB7CisKKyAgICAgICAgLy8gV2UgYXNzdW1lIHRoYXQgaXQncyB0aGUgY2Fs
bGJhY2sKKyAgICAgICAgY2FsbGJhY2sgPSBwYXJhbXM7CisgICAgICAgIHBhcmFtcyA9IHVuZGVm
aW5lZDsKKworICAgIC8vIE90aGVyd2lzZSwgYnVpbGQgYSBwYXJhbSBzdHJpbmcKKyAgICB9IGVs
c2UgaWYgKCBwYXJhbXMgJiYgdHlwZW9mIHBhcmFtcyA9PT0gIm9iamVjdCIgKSB7CisgICAgICAg
IHR5cGUgPSAiUE9TVCI7CisgICAgfQorCisgICAgLy8gSWYgd2UgaGF2ZSBlbGVtZW50cyB0byBt
b2RpZnksIG1ha2UgdGhlIHJlcXVlc3QKKyAgICBpZiAoIHNlbGYubGVuZ3RoID4gMCApIHsKKyAg
ICAgICAgalF1ZXJ5LmFqYXgoIHsKKyAgICAgICAgICAgIHVybDogdXJsLAorCisgICAgICAgICAg
ICAvLyBJZiAidHlwZSIgdmFyaWFibGUgaXMgdW5kZWZpbmVkLCB0aGVuICJHRVQiIG1ldGhvZCB3
aWxsIGJlIHVzZWQuCisgICAgICAgICAgICAvLyBNYWtlIHZhbHVlIG9mIHRoaXMgZmllbGQgZXhw
bGljaXQgc2luY2UKKyAgICAgICAgICAgIC8vIHVzZXIgY2FuIG92ZXJyaWRlIGl0IHRocm91Z2gg
YWpheFNldHVwIG1ldGhvZAorICAgICAgICAgICAgdHlwZTogdHlwZSB8fCAiR0VUIiwKKyAgICAg
ICAgICAgIGRhdGFUeXBlOiAiaHRtbCIsCisgICAgICAgICAgICBkYXRhOiBwYXJhbXMKKyAgICAg
ICAgfSApLmRvbmUoIGZ1bmN0aW9uKCByZXNwb25zZVRleHQgKSB7CisKKyAgICAgICAgICAgIC8v
IFNhdmUgcmVzcG9uc2UgZm9yIHVzZSBpbiBjb21wbGV0ZSBjYWxsYmFjaworICAgICAgICAgICAg
cmVzcG9uc2UgPSBhcmd1bWVudHM7CisKKyAgICAgICAgICAgIHNlbGYuaHRtbCggc2VsZWN0b3Ig
PworCisgICAgICAgICAgICAgICAgLy8gSWYgYSBzZWxlY3RvciB3YXMgc3BlY2lmaWVkLCBsb2Nh
dGUgdGhlIHJpZ2h0IGVsZW1lbnRzIGluIGEgZHVtbXkgZGl2CisgICAgICAgICAgICAgICAgLy8g
RXhjbHVkZSBzY3JpcHRzIHRvIGF2b2lkIElFICdQZXJtaXNzaW9uIERlbmllZCcgZXJyb3JzCisg
ICAgICAgICAgICAgICAgalF1ZXJ5KCAiPGRpdj4iICkuYXBwZW5kKCBqUXVlcnkucGFyc2VIVE1M
KCByZXNwb25zZVRleHQgKSApLmZpbmQoIHNlbGVjdG9yICkgOgorCisgICAgICAgICAgICAgICAg
Ly8gT3RoZXJ3aXNlIHVzZSB0aGUgZnVsbCByZXN1bHQKKyAgICAgICAgICAgICAgICByZXNwb25z
ZVRleHQgKTsKKworICAgICAgICAvLyBJZiB0aGUgcmVxdWVzdCBzdWNjZWVkcywgdGhpcyBmdW5j
dGlvbiBnZXRzICJkYXRhIiwgInN0YXR1cyIsICJqcVhIUiIKKyAgICAgICAgLy8gYnV0IHRoZXkg
YXJlIGlnbm9yZWQgYmVjYXVzZSByZXNwb25zZSB3YXMgc2V0IGFib3ZlLgorICAgICAgICAvLyBJ
ZiBpdCBmYWlscywgdGhpcyBmdW5jdGlvbiBnZXRzICJqcVhIUiIsICJzdGF0dXMiLCAiZXJyb3Ii
CisgICAgICAgIH0gKS5hbHdheXMoIGNhbGxiYWNrICYmIGZ1bmN0aW9uKCBqcVhIUiwgc3RhdHVz
ICkgeworICAgICAgICAgICAgc2VsZi5lYWNoKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAg
ICBjYWxsYmFjay5hcHBseSggdGhpcywgcmVzcG9uc2UgfHwgWyBqcVhIUi5yZXNwb25zZVRleHQs
IHN0YXR1cywganFYSFIgXSApOworICAgICAgICAgICAgfSApOworICAgICAgICB9ICk7CisgICAg
fQorCisgICAgcmV0dXJuIHRoaXM7Cit9OworCisKKworCisvLyBBdHRhY2ggYSBidW5jaCBvZiBm
dW5jdGlvbnMgZm9yIGhhbmRsaW5nIGNvbW1vbiBBSkFYIGV2ZW50cworalF1ZXJ5LmVhY2goIFsK
KyAgICAiYWpheFN0YXJ0IiwKKyAgICAiYWpheFN0b3AiLAorICAgICJhamF4Q29tcGxldGUiLAor
ICAgICJhamF4RXJyb3IiLAorICAgICJhamF4U3VjY2VzcyIsCisgICAgImFqYXhTZW5kIgorXSwg
ZnVuY3Rpb24oIGksIHR5cGUgKSB7CisgICAgalF1ZXJ5LmZuWyB0eXBlIF0gPSBmdW5jdGlvbigg
Zm4gKSB7CisgICAgICAgIHJldHVybiB0aGlzLm9uKCB0eXBlLCBmbiApOworICAgIH07Cit9ICk7
CisKKworCisKK2pRdWVyeS5leHByLnBzZXVkb3MuYW5pbWF0ZWQgPSBmdW5jdGlvbiggZWxlbSAp
IHsKKyAgICByZXR1cm4galF1ZXJ5LmdyZXAoIGpRdWVyeS50aW1lcnMsIGZ1bmN0aW9uKCBmbiAp
IHsKKyAgICAgICAgcmV0dXJuIGVsZW0gPT09IGZuLmVsZW07CisgICAgfSApLmxlbmd0aDsKK307
CisKKworCisKKy8qKgorICogR2V0cyBhIHdpbmRvdyBmcm9tIGFuIGVsZW1lbnQKKyAqLworZnVu
Y3Rpb24gZ2V0V2luZG93KCBlbGVtICkgeworICAgIHJldHVybiBqUXVlcnkuaXNXaW5kb3coIGVs
ZW0gKSA/IGVsZW0gOiBlbGVtLm5vZGVUeXBlID09PSA5ICYmIGVsZW0uZGVmYXVsdFZpZXc7Cit9
CisKK2pRdWVyeS5vZmZzZXQgPSB7CisgICAgc2V0T2Zmc2V0OiBmdW5jdGlvbiggZWxlbSwgb3B0
aW9ucywgaSApIHsKKyAgICAgICAgdmFyIGN1clBvc2l0aW9uLCBjdXJMZWZ0LCBjdXJDU1NUb3As
IGN1clRvcCwgY3VyT2Zmc2V0LCBjdXJDU1NMZWZ0LCBjYWxjdWxhdGVQb3NpdGlvbiwKKyAgICAg
ICAgICAgIHBvc2l0aW9uID0galF1ZXJ5LmNzcyggZWxlbSwgInBvc2l0aW9uIiApLAorICAgICAg
ICAgICAgY3VyRWxlbSA9IGpRdWVyeSggZWxlbSApLAorICAgICAgICAgICAgcHJvcHMgPSB7fTsK
KworICAgICAgICAvLyBTZXQgcG9zaXRpb24gZmlyc3QsIGluLWNhc2UgdG9wL2xlZnQgYXJlIHNl
dCBldmVuIG9uIHN0YXRpYyBlbGVtCisgICAgICAgIGlmICggcG9zaXRpb24gPT09ICJzdGF0aWMi
ICkgeworICAgICAgICAgICAgZWxlbS5zdHlsZS5wb3NpdGlvbiA9ICJyZWxhdGl2ZSI7CisgICAg
ICAgIH0KKworICAgICAgICBjdXJPZmZzZXQgPSBjdXJFbGVtLm9mZnNldCgpOworICAgICAgICBj
dXJDU1NUb3AgPSBqUXVlcnkuY3NzKCBlbGVtLCAidG9wIiApOworICAgICAgICBjdXJDU1NMZWZ0
ID0galF1ZXJ5LmNzcyggZWxlbSwgImxlZnQiICk7CisgICAgICAgIGNhbGN1bGF0ZVBvc2l0aW9u
ID0gKCBwb3NpdGlvbiA9PT0gImFic29sdXRlIiB8fCBwb3NpdGlvbiA9PT0gImZpeGVkIiApICYm
CisgICAgICAgICAgICAoIGN1ckNTU1RvcCArIGN1ckNTU0xlZnQgKS5pbmRleE9mKCAiYXV0byIg
KSA+IC0xOworCisgICAgICAgIC8vIE5lZWQgdG8gYmUgYWJsZSB0byBjYWxjdWxhdGUgcG9zaXRp
b24gaWYgZWl0aGVyCisgICAgICAgIC8vIHRvcCBvciBsZWZ0IGlzIGF1dG8gYW5kIHBvc2l0aW9u
IGlzIGVpdGhlciBhYnNvbHV0ZSBvciBmaXhlZAorICAgICAgICBpZiAoIGNhbGN1bGF0ZVBvc2l0
aW9uICkgeworICAgICAgICAgICAgY3VyUG9zaXRpb24gPSBjdXJFbGVtLnBvc2l0aW9uKCk7Cisg
ICAgICAgICAgICBjdXJUb3AgPSBjdXJQb3NpdGlvbi50b3A7CisgICAgICAgICAgICBjdXJMZWZ0
ID0gY3VyUG9zaXRpb24ubGVmdDsKKworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY3Vy
VG9wID0gcGFyc2VGbG9hdCggY3VyQ1NTVG9wICkgfHwgMDsKKyAgICAgICAgICAgIGN1ckxlZnQg
PSBwYXJzZUZsb2F0KCBjdXJDU1NMZWZ0ICkgfHwgMDsKKyAgICAgICAgfQorCisgICAgICAgIGlm
ICggalF1ZXJ5LmlzRnVuY3Rpb24oIG9wdGlvbnMgKSApIHsKKworICAgICAgICAgICAgLy8gVXNl
IGpRdWVyeS5leHRlbmQgaGVyZSB0byBhbGxvdyBtb2RpZmljYXRpb24gb2YgY29vcmRpbmF0ZXMg
YXJndW1lbnQgKGdoLTE4NDgpCisgICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5jYWxsKCBl
bGVtLCBpLCBqUXVlcnkuZXh0ZW5kKCB7fSwgY3VyT2Zmc2V0ICkgKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICggb3B0aW9ucy50b3AgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHByb3BzLnRv
cCA9ICggb3B0aW9ucy50b3AgLSBjdXJPZmZzZXQudG9wICkgKyBjdXJUb3A7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCBvcHRpb25zLmxlZnQgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHByb3Bz
LmxlZnQgPSAoIG9wdGlvbnMubGVmdCAtIGN1ck9mZnNldC5sZWZ0ICkgKyBjdXJMZWZ0OworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKCAidXNpbmciIGluIG9wdGlvbnMgKSB7CisgICAgICAgICAg
ICBvcHRpb25zLnVzaW5nLmNhbGwoIGVsZW0sIHByb3BzICk7CisKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGN1ckVsZW0uY3NzKCBwcm9wcyApOworICAgICAgICB9CisgICAgfQorfTsK
KworalF1ZXJ5LmZuLmV4dGVuZCggeworICAgIG9mZnNldDogZnVuY3Rpb24oIG9wdGlvbnMgKSB7
CisKKyAgICAgICAgLy8gUHJlc2VydmUgY2hhaW5pbmcgZm9yIHNldHRlcgorICAgICAgICBpZiAo
IGFyZ3VtZW50cy5sZW5ndGggKSB7CisgICAgICAgICAgICByZXR1cm4gb3B0aW9ucyA9PT0gdW5k
ZWZpbmVkID8KKyAgICAgICAgICAgICAgICB0aGlzIDoKKyAgICAgICAgICAgICAgICB0aGlzLmVh
Y2goIGZ1bmN0aW9uKCBpICkgeworICAgICAgICAgICAgICAgICAgICBqUXVlcnkub2Zmc2V0LnNl
dE9mZnNldCggdGhpcywgb3B0aW9ucywgaSApOworICAgICAgICAgICAgICAgIH0gKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZhciBkb2NFbGVtLCB3aW4sIHJlY3QsIGRvYywKKyAgICAgICAgICAg
IGVsZW0gPSB0aGlzWyAwIF07CisKKyAgICAgICAgaWYgKCAhZWxlbSApIHsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seQor
ICAgICAgICAvLyBSdW5uaW5nIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBvbiBhCisgICAgICAgIC8v
IGRpc2Nvbm5lY3RlZCBub2RlIGluIElFIHRocm93cyBhbiBlcnJvcgorICAgICAgICBpZiAoICFl
bGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICkgeworICAgICAgICAgICAgcmV0dXJuIHsgdG9w
OiAwLCBsZWZ0OiAwIH07CisgICAgICAgIH0KKworICAgICAgICByZWN0ID0gZWxlbS5nZXRCb3Vu
ZGluZ0NsaWVudFJlY3QoKTsKKworICAgICAgICAvLyBNYWtlIHN1cmUgZWxlbWVudCBpcyBub3Qg
aGlkZGVuIChkaXNwbGF5OiBub25lKQorICAgICAgICBpZiAoIHJlY3Qud2lkdGggfHwgcmVjdC5o
ZWlnaHQgKSB7CisgICAgICAgICAgICBkb2MgPSBlbGVtLm93bmVyRG9jdW1lbnQ7CisgICAgICAg
ICAgICB3aW4gPSBnZXRXaW5kb3coIGRvYyApOworICAgICAgICAgICAgZG9jRWxlbSA9IGRvYy5k
b2N1bWVudEVsZW1lbnQ7CisKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAg
dG9wOiByZWN0LnRvcCArIHdpbi5wYWdlWU9mZnNldCAtIGRvY0VsZW0uY2xpZW50VG9wLAorICAg
ICAgICAgICAgICAgIGxlZnQ6IHJlY3QubGVmdCArIHdpbi5wYWdlWE9mZnNldCAtIGRvY0VsZW0u
Y2xpZW50TGVmdAorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFJldHVy
biB6ZXJvcyBmb3IgZGlzY29ubmVjdGVkIGFuZCBoaWRkZW4gZWxlbWVudHMgKGdoLTIzMTApCisg
ICAgICAgIHJldHVybiByZWN0OworICAgIH0sCisKKyAgICBwb3NpdGlvbjogZnVuY3Rpb24oKSB7
CisgICAgICAgIGlmICggIXRoaXNbIDAgXSApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIHZhciBvZmZzZXRQYXJlbnQsIG9mZnNldCwKKyAgICAgICAgICAgIGVs
ZW0gPSB0aGlzWyAwIF0sCisgICAgICAgICAgICBwYXJlbnRPZmZzZXQgPSB7IHRvcDogMCwgbGVm
dDogMCB9OworCisgICAgICAgIC8vIEZpeGVkIGVsZW1lbnRzIGFyZSBvZmZzZXQgZnJvbSB3aW5k
b3cgKHBhcmVudE9mZnNldCA9IHt0b3A6MCwgbGVmdDogMH0sCisgICAgICAgIC8vIGJlY2F1c2Ug
aXQgaXMgaXRzIG9ubHkgb2Zmc2V0IHBhcmVudAorICAgICAgICBpZiAoIGpRdWVyeS5jc3MoIGVs
ZW0sICJwb3NpdGlvbiIgKSA9PT0gImZpeGVkIiApIHsKKworICAgICAgICAgICAgLy8gQXNzdW1l
IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBpcyB0aGVyZSB3aGVuIGNvbXB1dGVkIHBvc2l0aW9uIGlz
IGZpeGVkCisgICAgICAgICAgICBvZmZzZXQgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgp
OworCisgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgIC8vIEdldCAqcmVhbCogb2Zmc2V0
UGFyZW50CisgICAgICAgICAgICBvZmZzZXRQYXJlbnQgPSB0aGlzLm9mZnNldFBhcmVudCgpOwor
CisgICAgICAgICAgICAvLyBHZXQgY29ycmVjdCBvZmZzZXRzCisgICAgICAgICAgICBvZmZzZXQg
PSB0aGlzLm9mZnNldCgpOworICAgICAgICAgICAgaWYgKCAhalF1ZXJ5Lm5vZGVOYW1lKCBvZmZz
ZXRQYXJlbnRbIDAgXSwgImh0bWwiICkgKSB7CisgICAgICAgICAgICAgICAgcGFyZW50T2Zmc2V0
ID0gb2Zmc2V0UGFyZW50Lm9mZnNldCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBBZGQgb2Zmc2V0UGFyZW50IGJvcmRlcnMKKyAgICAgICAgICAgIHBhcmVudE9mZnNldCA9IHsK
KyAgICAgICAgICAgICAgICB0b3A6IHBhcmVudE9mZnNldC50b3AgKyBqUXVlcnkuY3NzKCBvZmZz
ZXRQYXJlbnRbIDAgXSwgImJvcmRlclRvcFdpZHRoIiwgdHJ1ZSApLAorICAgICAgICAgICAgICAg
IGxlZnQ6IHBhcmVudE9mZnNldC5sZWZ0ICsgalF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50WyAwIF0s
ICJib3JkZXJMZWZ0V2lkdGgiLCB0cnVlICkKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBTdWJ0cmFjdCBwYXJlbnQgb2Zmc2V0cyBhbmQgZWxlbWVudCBtYXJnaW5zCisg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICB0b3A6IG9mZnNldC50b3AgLSBwYXJlbnRPZmZz
ZXQudG9wIC0galF1ZXJ5LmNzcyggZWxlbSwgIm1hcmdpblRvcCIsIHRydWUgKSwKKyAgICAgICAg
ICAgIGxlZnQ6IG9mZnNldC5sZWZ0IC0gcGFyZW50T2Zmc2V0LmxlZnQgLSBqUXVlcnkuY3NzKCBl
bGVtLCAibWFyZ2luTGVmdCIsIHRydWUgKQorICAgICAgICB9OworICAgIH0sCisKKyAgICAvLyBU
aGlzIG1ldGhvZCB3aWxsIHJldHVybiBkb2N1bWVudEVsZW1lbnQgaW4gdGhlIGZvbGxvd2luZyBj
YXNlczoKKyAgICAvLyAxKSBGb3IgdGhlIGVsZW1lbnQgaW5zaWRlIHRoZSBpZnJhbWUgd2l0aG91
dCBvZmZzZXRQYXJlbnQsIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuCisgICAgLy8gICAgZG9jdW1l
bnRFbGVtZW50IG9mIHRoZSBwYXJlbnQgd2luZG93CisgICAgLy8gMikgRm9yIHRoZSBoaWRkZW4g
b3IgZGV0YWNoZWQgZWxlbWVudAorICAgIC8vIDMpIEZvciBib2R5IG9yIGh0bWwgZWxlbWVudCwg
aS5lLiBpbiBjYXNlIG9mIHRoZSBodG1sIG5vZGUgLSBpdCB3aWxsIHJldHVybiBpdHNlbGYKKyAg
ICAvLworICAgIC8vIGJ1dCB0aG9zZSBleGNlcHRpb25zIHdlcmUgbmV2ZXIgcHJlc2VudGVkIGFz
IGEgcmVhbCBsaWZlIHVzZS1jYXNlcworICAgIC8vIGFuZCBtaWdodCBiZSBjb25zaWRlcmVkIGFz
IG1vcmUgcHJlZmVyYWJsZSByZXN1bHRzLgorICAgIC8vCisgICAgLy8gVGhpcyBsb2dpYywgaG93
ZXZlciwgaXMgbm90IGd1YXJhbnRlZWQgYW5kIGNhbiBjaGFuZ2UgYXQgYW55IHBvaW50IGluIHRo
ZSBmdXR1cmUKKyAgICBvZmZzZXRQYXJlbnQ6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4g
dGhpcy5tYXAoIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdmFyIG9mZnNldFBhcmVudCA9IHRo
aXMub2Zmc2V0UGFyZW50OworCisgICAgICAgICAgICB3aGlsZSAoIG9mZnNldFBhcmVudCAmJiBq
UXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsICJwb3NpdGlvbiIgKSA9PT0gInN0YXRpYyIgKSB7Cisg
ICAgICAgICAgICAgICAgb2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50Lm9mZnNldFBhcmVudDsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIG9mZnNldFBhcmVudCB8fCBkb2N1
bWVudEVsZW1lbnQ7CisgICAgICAgIH0gKTsKKyAgICB9Cit9ICk7CisKKy8vIENyZWF0ZSBzY3Jv
bGxMZWZ0IGFuZCBzY3JvbGxUb3AgbWV0aG9kcworalF1ZXJ5LmVhY2goIHsgc2Nyb2xsTGVmdDog
InBhZ2VYT2Zmc2V0Iiwgc2Nyb2xsVG9wOiAicGFnZVlPZmZzZXQiIH0sIGZ1bmN0aW9uKCBtZXRo
b2QsIHByb3AgKSB7CisgICAgdmFyIHRvcCA9ICJwYWdlWU9mZnNldCIgPT09IHByb3A7CisKKyAg
ICBqUXVlcnkuZm5bIG1ldGhvZCBdID0gZnVuY3Rpb24oIHZhbCApIHsKKyAgICAgICAgcmV0dXJu
IGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIG1ldGhvZCwgdmFsICkgeworICAgICAgICAg
ICAgdmFyIHdpbiA9IGdldFdpbmRvdyggZWxlbSApOworCisgICAgICAgICAgICBpZiAoIHZhbCA9
PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgIHJldHVybiB3aW4gPyB3aW5bIHByb3Ag
XSA6IGVsZW1bIG1ldGhvZCBdOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIHdp
biApIHsKKyAgICAgICAgICAgICAgICB3aW4uc2Nyb2xsVG8oCisgICAgICAgICAgICAgICAgICAg
ICF0b3AgPyB2YWwgOiB3aW4ucGFnZVhPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgIHRvcCA/
IHZhbCA6IHdpbi5wYWdlWU9mZnNldAorICAgICAgICAgICAgICAgICk7CisKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZWxlbVsgbWV0aG9kIF0gPSB2YWw7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0sIG1ldGhvZCwgdmFsLCBhcmd1bWVudHMubGVuZ3RoICk7CisgICAg
fTsKK30gKTsKKworLy8gU3VwcG9ydDogU2FmYXJpIDw9NyAtIDkuMSwgQ2hyb21lIDw9MzcgLSA0
OQorLy8gQWRkIHRoZSB0b3AvbGVmdCBjc3NIb29rcyB1c2luZyBqUXVlcnkuZm4ucG9zaXRpb24K
Ky8vIFdlYmtpdCBidWc6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
OTA4NAorLy8gQmxpbmsgYnVnOiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0v
aXNzdWVzL2RldGFpbD9pZD01ODkzNDcKKy8vIGdldENvbXB1dGVkU3R5bGUgcmV0dXJucyBwZXJj
ZW50IHdoZW4gc3BlY2lmaWVkIGZvciB0b3AvbGVmdC9ib3R0b20vcmlnaHQ7CisvLyByYXRoZXIg
dGhhbiBtYWtlIHRoZSBjc3MgbW9kdWxlIGRlcGVuZCBvbiB0aGUgb2Zmc2V0IG1vZHVsZSwganVz
dCBjaGVjayBmb3IgaXQgaGVyZQoralF1ZXJ5LmVhY2goIFsgInRvcCIsICJsZWZ0IiBdLCBmdW5j
dGlvbiggaSwgcHJvcCApIHsKKyAgICBqUXVlcnkuY3NzSG9va3NbIHByb3AgXSA9IGFkZEdldEhv
b2tJZiggc3VwcG9ydC5waXhlbFBvc2l0aW9uLAorICAgICAgICBmdW5jdGlvbiggZWxlbSwgY29t
cHV0ZWQgKSB7CisgICAgICAgICAgICBpZiAoIGNvbXB1dGVkICkgeworICAgICAgICAgICAgICAg
IGNvbXB1dGVkID0gY3VyQ1NTKCBlbGVtLCBwcm9wICk7CisKKyAgICAgICAgICAgICAgICAvLyBJ
ZiBjdXJDU1MgcmV0dXJucyBwZXJjZW50YWdlLCBmYWxsYmFjayB0byBvZmZzZXQKKyAgICAgICAg
ICAgICAgICByZXR1cm4gcm51bW5vbnB4LnRlc3QoIGNvbXB1dGVkICkgPworICAgICAgICAgICAg
ICAgICAgICBqUXVlcnkoIGVsZW0gKS5wb3NpdGlvbigpWyBwcm9wIF0gKyAicHgiIDoKKyAgICAg
ICAgICAgICAgICAgICAgY29tcHV0ZWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAp
OworfSApOworCisKKy8vIENyZWF0ZSBpbm5lckhlaWdodCwgaW5uZXJXaWR0aCwgaGVpZ2h0LCB3
aWR0aCwgb3V0ZXJIZWlnaHQgYW5kIG91dGVyV2lkdGggbWV0aG9kcworalF1ZXJ5LmVhY2goIHsg
SGVpZ2h0OiAiaGVpZ2h0IiwgV2lkdGg6ICJ3aWR0aCIgfSwgZnVuY3Rpb24oIG5hbWUsIHR5cGUg
KSB7CisgICAgalF1ZXJ5LmVhY2goIHsgcGFkZGluZzogImlubmVyIiArIG5hbWUsIGNvbnRlbnQ6
IHR5cGUsICIiOiAib3V0ZXIiICsgbmFtZSB9LAorICAgICAgICBmdW5jdGlvbiggZGVmYXVsdEV4
dHJhLCBmdW5jTmFtZSApIHsKKworICAgICAgICAvLyBNYXJnaW4gaXMgb25seSBmb3Igb3V0ZXJI
ZWlnaHQsIG91dGVyV2lkdGgKKyAgICAgICAgalF1ZXJ5LmZuWyBmdW5jTmFtZSBdID0gZnVuY3Rp
b24oIG1hcmdpbiwgdmFsdWUgKSB7CisgICAgICAgICAgICB2YXIgY2hhaW5hYmxlID0gYXJndW1l
bnRzLmxlbmd0aCAmJiAoIGRlZmF1bHRFeHRyYSB8fCB0eXBlb2YgbWFyZ2luICE9PSAiYm9vbGVh
biIgKSwKKyAgICAgICAgICAgICAgICBleHRyYSA9IGRlZmF1bHRFeHRyYSB8fCAoIG1hcmdpbiA9
PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gdHJ1ZSA/ICJtYXJnaW4iIDogImJvcmRlciIgKTsKKworICAg
ICAgICAgICAgcmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIHR5cGUsIHZhbHVl
ICkgeworICAgICAgICAgICAgICAgIHZhciBkb2M7CisKKyAgICAgICAgICAgICAgICBpZiAoIGpR
dWVyeS5pc1dpbmRvdyggZWxlbSApICkgeworCisgICAgICAgICAgICAgICAgICAgIC8vICQoIHdp
bmRvdyApLm91dGVyV2lkdGgvSGVpZ2h0IHJldHVybiB3L2ggaW5jbHVkaW5nIHNjcm9sbGJhcnMg
KGdoLTE3MjkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jTmFtZS5pbmRleE9mKCAi
b3V0ZXIiICkgPT09IDAgPworICAgICAgICAgICAgICAgICAgICAgICAgZWxlbVsgImlubmVyIiAr
IG5hbWUgXSA6CisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmRvY3VtZW50LmRvY3VtZW50
RWxlbWVudFsgImNsaWVudCIgKyBuYW1lIF07CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgLy8gR2V0IGRvY3VtZW50IHdpZHRoIG9yIGhlaWdodAorICAgICAgICAgICAgICAg
IGlmICggZWxlbS5ub2RlVHlwZSA9PT0gOSApIHsKKyAgICAgICAgICAgICAgICAgICAgZG9jID0g
ZWxlbS5kb2N1bWVudEVsZW1lbnQ7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gRWl0aGVyIHNj
cm9sbFtXaWR0aC9IZWlnaHRdIG9yIG9mZnNldFtXaWR0aC9IZWlnaHRdIG9yIGNsaWVudFtXaWR0
aC9IZWlnaHRdLAorICAgICAgICAgICAgICAgICAgICAvLyB3aGljaGV2ZXIgaXMgZ3JlYXRlc3QK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KAorICAgICAgICAgICAgICAgICAg
ICAgICAgZWxlbS5ib2R5WyAic2Nyb2xsIiArIG5hbWUgXSwgZG9jWyAic2Nyb2xsIiArIG5hbWUg
XSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uYm9keVsgIm9mZnNldCIgKyBuYW1lIF0s
IGRvY1sgIm9mZnNldCIgKyBuYW1lIF0sCisgICAgICAgICAgICAgICAgICAgICAgICBkb2NbICJj
bGllbnQiICsgbmFtZSBdCisgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPworCisgICAg
ICAgICAgICAgICAgICAgIC8vIEdldCB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVsZW1lbnQsIHJl
cXVlc3RpbmcgYnV0IG5vdCBmb3JjaW5nIHBhcnNlRmxvYXQKKyAgICAgICAgICAgICAgICAgICAg
alF1ZXJ5LmNzcyggZWxlbSwgdHlwZSwgZXh0cmEgKSA6CisKKyAgICAgICAgICAgICAgICAgICAg
Ly8gU2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudAorICAgICAgICAgICAgICAgICAg
ICBqUXVlcnkuc3R5bGUoIGVsZW0sIHR5cGUsIHZhbHVlLCBleHRyYSApOworICAgICAgICAgICAg
fSwgdHlwZSwgY2hhaW5hYmxlID8gbWFyZ2luIDogdW5kZWZpbmVkLCBjaGFpbmFibGUgKTsKKyAg
ICAgICAgfTsKKyAgICB9ICk7Cit9ICk7CisKKworalF1ZXJ5LmZuLmV4dGVuZCggeworCisgICAg
YmluZDogZnVuY3Rpb24oIHR5cGVzLCBkYXRhLCBmbiApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
b24oIHR5cGVzLCBudWxsLCBkYXRhLCBmbiApOworICAgIH0sCisgICAgdW5iaW5kOiBmdW5jdGlv
biggdHlwZXMsIGZuICkgeworICAgICAgICByZXR1cm4gdGhpcy5vZmYoIHR5cGVzLCBudWxsLCBm
biApOworICAgIH0sCisKKyAgICBkZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywg
ZGF0YSwgZm4gKSB7CisgICAgICAgIHJldHVybiB0aGlzLm9uKCB0eXBlcywgc2VsZWN0b3IsIGRh
dGEsIGZuICk7CisgICAgfSwKKyAgICB1bmRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5
cGVzLCBmbiApIHsKKworICAgICAgICAvLyAoIG5hbWVzcGFjZSApIG9yICggc2VsZWN0b3IsIHR5
cGVzIFssIGZuXSApCisgICAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8KKyAg
ICAgICAgICAgIHRoaXMub2ZmKCBzZWxlY3RvciwgIioqIiApIDoKKyAgICAgICAgICAgIHRoaXMu
b2ZmKCB0eXBlcywgc2VsZWN0b3IgfHwgIioqIiwgZm4gKTsKKyAgICB9Cit9ICk7CisKK2pRdWVy
eS5wYXJzZUpTT04gPSBKU09OLnBhcnNlOworCisKKworCisvLyBSZWdpc3RlciBhcyBhIG5hbWVk
IEFNRCBtb2R1bGUsIHNpbmNlIGpRdWVyeSBjYW4gYmUgY29uY2F0ZW5hdGVkIHdpdGggb3RoZXIK
Ky8vIGZpbGVzIHRoYXQgbWF5IHVzZSBkZWZpbmUsIGJ1dCBub3QgdmlhIGEgcHJvcGVyIGNvbmNh
dGVuYXRpb24gc2NyaXB0IHRoYXQKKy8vIHVuZGVyc3RhbmRzIGFub255bW91cyBBTUQgbW9kdWxl
cy4gQSBuYW1lZCBBTUQgaXMgc2FmZXN0IGFuZCBtb3N0IHJvYnVzdAorLy8gd2F5IHRvIHJlZ2lz
dGVyLiBMb3dlcmNhc2UganF1ZXJ5IGlzIHVzZWQgYmVjYXVzZSBBTUQgbW9kdWxlIG5hbWVzIGFy
ZQorLy8gZGVyaXZlZCBmcm9tIGZpbGUgbmFtZXMsIGFuZCBqUXVlcnkgaXMgbm9ybWFsbHkgZGVs
aXZlcmVkIGluIGEgbG93ZXJjYXNlCisvLyBmaWxlIG5hbWUuIERvIHRoaXMgYWZ0ZXIgY3JlYXRp
bmcgdGhlIGdsb2JhbCBzbyB0aGF0IGlmIGFuIEFNRCBtb2R1bGUgd2FudHMKKy8vIHRvIGNhbGwg
bm9Db25mbGljdCB0byBoaWRlIHRoaXMgdmVyc2lvbiBvZiBqUXVlcnksIGl0IHdpbGwgd29yay4K
KworLy8gTm90ZSB0aGF0IGZvciBtYXhpbXVtIHBvcnRhYmlsaXR5LCBsaWJyYXJpZXMgdGhhdCBh
cmUgbm90IGpRdWVyeSBzaG91bGQKKy8vIGRlY2xhcmUgdGhlbXNlbHZlcyBhcyBhbm9ueW1vdXMg
bW9kdWxlcywgYW5kIGF2b2lkIHNldHRpbmcgYSBnbG9iYWwgaWYgYW4KKy8vIEFNRCBsb2FkZXIg
aXMgcHJlc2VudC4galF1ZXJ5IGlzIGEgc3BlY2lhbCBjYXNlLiBGb3IgbW9yZSBpbmZvcm1hdGlv
biwgc2VlCisvLyBodHRwczovL2dpdGh1Yi5jb20vanJidXJrZS9yZXF1aXJlanMvd2lraS9VcGRh
dGluZy1leGlzdGluZy1saWJyYXJpZXMjd2lraS1hbm9uCisKK2lmICggdHlwZW9mIGRlZmluZSA9
PT0gImZ1bmN0aW9uIiAmJiBkZWZpbmUuYW1kICkgeworICAgIGRlZmluZSggImpxdWVyeSIsIFtd
LCBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeTsKKyAgICB9ICk7Cit9CisKKwor
CisKK3ZhcgorCisgICAgLy8gTWFwIG92ZXIgalF1ZXJ5IGluIGNhc2Ugb2Ygb3ZlcndyaXRlCisg
ICAgX2pRdWVyeSA9IHdpbmRvdy5qUXVlcnksCisKKyAgICAvLyBNYXAgb3ZlciB0aGUgJCBpbiBj
YXNlIG9mIG92ZXJ3cml0ZQorICAgIF8kID0gd2luZG93LiQ7CisKK2pRdWVyeS5ub0NvbmZsaWN0
ID0gZnVuY3Rpb24oIGRlZXAgKSB7CisgICAgaWYgKCB3aW5kb3cuJCA9PT0galF1ZXJ5ICkgewor
ICAgICAgICB3aW5kb3cuJCA9IF8kOworICAgIH0KKworICAgIGlmICggZGVlcCAmJiB3aW5kb3cu
alF1ZXJ5ID09PSBqUXVlcnkgKSB7CisgICAgICAgIHdpbmRvdy5qUXVlcnkgPSBfalF1ZXJ5Owor
ICAgIH0KKworICAgIHJldHVybiBqUXVlcnk7Cit9OworCisvLyBFeHBvc2UgalF1ZXJ5IGFuZCAk
IGlkZW50aWZpZXJzLCBldmVuIGluIEFNRAorLy8gKCM3MTAyI2NvbW1lbnQ6MTAsIGh0dHBzOi8v
Z2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L3B1bGwvNTU3KQorLy8gYW5kIENvbW1vbkpTIGZvciBi
cm93c2VyIGVtdWxhdG9ycyAoIzEzNTY2KQoraWYgKCAhbm9HbG9iYWwgKSB7CisgICAgd2luZG93
LmpRdWVyeSA9IHdpbmRvdy4kID0galF1ZXJ5OworfQorCisKKworCisKK3JldHVybiBqUXVlcnk7
Cit9ICk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9qcXVlcnkvbm9kZV9tb2R1bGVzL3RvZG9t
dmMtYXBwLWNzcy9pbmRleC5jc3MgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9qcXVlcnkvbm9kZV9tb2R1bGVzL3Rv
ZG9tdmMtYXBwLWNzcy9pbmRleC5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTdlYTE4MDE2MTIxMjZmMWRiNjVj
ZTA1NjhmMmEwMjM3M2I5M2I1NQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2pxdWVy
eS9ub2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL2luZGV4LmNzcwpAQCAtMCwwICsxLDM3OCBA
QAoraHRtbCwKK2JvZHkgeworICAgIG1hcmdpbjogMDsKKyAgICBwYWRkaW5nOiAwOworfQorCiti
dXR0b24geworICAgIG1hcmdpbjogMDsKKyAgICBwYWRkaW5nOiAwOworICAgIGJvcmRlcjogMDsK
KyAgICBiYWNrZ3JvdW5kOiBub25lOworICAgIGZvbnQtc2l6ZTogMTAwJTsKKyAgICB2ZXJ0aWNh
bC1hbGlnbjogYmFzZWxpbmU7CisgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CisgICAgZm9udC13
ZWlnaHQ6IGluaGVyaXQ7CisgICAgY29sb3I6IGluaGVyaXQ7CisgICAgLXdlYmtpdC1hcHBlYXJh
bmNlOiBub25lOworICAgIGFwcGVhcmFuY2U6IG5vbmU7CisgICAgLXdlYmtpdC1mb250LXNtb290
aGluZzogYW50aWFsaWFzZWQ7CisgICAgLW1vei1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7
CisgICAgZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOworfQorCitib2R5IHsKKyAgICBmb250
OiAxNHB4ICdIZWx2ZXRpY2EgTmV1ZScsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7Cisg
ICAgbGluZS1oZWlnaHQ6IDEuNGVtOworICAgIGJhY2tncm91bmQ6ICNmNWY1ZjU7CisgICAgY29s
b3I6ICM0ZDRkNGQ7CisgICAgbWluLXdpZHRoOiAyMzBweDsKKyAgICBtYXgtd2lkdGg6IDU1MHB4
OworICAgIG1hcmdpbjogMCBhdXRvOworICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlh
bGlhc2VkOworICAgIC1tb3otZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOworICAgIGZvbnQt
c21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKKyAgICBmb250LXdlaWdodDogMzAwOworfQorCitidXR0
b24sCitpbnB1dFt0eXBlPSJjaGVja2JveCJdIHsKKyAgICBvdXRsaW5lOiBub25lOworfQorCisu
aGlkZGVuIHsKKyAgICBkaXNwbGF5OiBub25lOworfQorCisjdG9kb2FwcCB7CisgICAgYmFja2dy
b3VuZDogI2ZmZjsKKyAgICBtYXJnaW46IDEzMHB4IDAgNDBweCAwOworICAgIHBvc2l0aW9uOiBy
ZWxhdGl2ZTsKKyAgICBib3gtc2hhZG93OiAwIDJweCA0cHggMCByZ2JhKDAsIDAsIDAsIDAuMiks
CisgICAgICAgICAgICAgICAgMCAyNXB4IDUwcHggMCByZ2JhKDAsIDAsIDAsIDAuMSk7Cit9CisK
KyN0b2RvYXBwIGlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHsKKyAgICBmb250LXN0
eWxlOiBpdGFsaWM7CisgICAgZm9udC13ZWlnaHQ6IDMwMDsKKyAgICBjb2xvcjogI2U2ZTZlNjsK
K30KKworI3RvZG9hcHAgaW5wdXQ6Oi1tb3otcGxhY2Vob2xkZXIgeworICAgIGZvbnQtc3R5bGU6
IGl0YWxpYzsKKyAgICBmb250LXdlaWdodDogMzAwOworICAgIGNvbG9yOiAjZTZlNmU2OworfQor
CisjdG9kb2FwcCBpbnB1dDo6aW5wdXQtcGxhY2Vob2xkZXIgeworICAgIGZvbnQtc3R5bGU6IGl0
YWxpYzsKKyAgICBmb250LXdlaWdodDogMzAwOworICAgIGNvbG9yOiAjZTZlNmU2OworfQorCisj
dG9kb2FwcCBoMSB7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHRvcDogLTE1NXB4Owor
ICAgIHdpZHRoOiAxMDAlOworICAgIGZvbnQtc2l6ZTogMTAwcHg7CisgICAgZm9udC13ZWlnaHQ6
IDEwMDsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgY29sb3I6IHJnYmEoMTc1LCA0Nywg
NDcsIDAuMTUpOworICAgIC13ZWJraXQtdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0
eTsKKyAgICAtbW96LXRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7CisgICAgdGV4
dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKK30KKworI25ldy10b2RvLAorLmVkaXQg
eworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBtYXJnaW46IDA7CisgICAgd2lkdGg6IDEw
MCU7CisgICAgZm9udC1zaXplOiAyNHB4OworICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OworICAg
IGZvbnQtd2VpZ2h0OiBpbmhlcml0OworICAgIGxpbmUtaGVpZ2h0OiAxLjRlbTsKKyAgICBib3Jk
ZXI6IDA7CisgICAgb3V0bGluZTogbm9uZTsKKyAgICBjb2xvcjogaW5oZXJpdDsKKyAgICBwYWRk
aW5nOiA2cHg7CisgICAgYm9yZGVyOiAxcHggc29saWQgIzk5OTsKKyAgICBib3gtc2hhZG93OiBp
bnNldCAwIC0xcHggNXB4IDAgcmdiYSgwLCAwLCAwLCAwLjIpOworICAgIGJveC1zaXppbmc6IGJv
cmRlci1ib3g7CisgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CisgICAg
LW1vei1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CisgICAgZm9udC1zbW9vdGhpbmc6IGFu
dGlhbGlhc2VkOworfQorCisjbmV3LXRvZG8geworICAgIHBhZGRpbmc6IDE2cHggMTZweCAxNnB4
IDYwcHg7CisgICAgYm9yZGVyOiBub25lOworICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwg
MC4wMDMpOworICAgIGJveC1zaGFkb3c6IGluc2V0IDAgLTJweCAxcHggcmdiYSgwLDAsMCwwLjAz
KTsKK30KKworI21haW4geworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICB6LWluZGV4OiAy
OworICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZTZlNmU2OworfQorCitsYWJlbFtmb3I9J3Rv
Z2dsZS1hbGwnXSB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworI3RvZ2dsZS1hbGwgeworICAg
IHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IC01NXB4OworICAgIGxlZnQ6IC0xMnB4Owor
ICAgIHdpZHRoOiA2MHB4OworICAgIGhlaWdodDogMzRweDsKKyAgICB0ZXh0LWFsaWduOiBjZW50
ZXI7CisgICAgYm9yZGVyOiBub25lOyAvKiBNb2JpbGUgU2FmYXJpICovCit9CisKKyN0b2dnbGUt
YWxsOmJlZm9yZSB7CisgICAgY29udGVudDogJ+Kdryc7CisgICAgZm9udC1zaXplOiAyMnB4Owor
ICAgIGNvbG9yOiAjZTZlNmU2OworICAgIHBhZGRpbmc6IDEwcHggMjdweCAxMHB4IDI3cHg7Cit9
CisKKyN0b2dnbGUtYWxsOmNoZWNrZWQ6YmVmb3JlIHsKKyAgICBjb2xvcjogIzczNzM3MzsKK30K
KworI3RvZG8tbGlzdCB7CisgICAgbWFyZ2luOiAwOworICAgIHBhZGRpbmc6IDA7CisgICAgbGlz
dC1zdHlsZTogbm9uZTsKK30KKworI3RvZG8tbGlzdCBsaSB7CisgICAgcG9zaXRpb246IHJlbGF0
aXZlOworICAgIGZvbnQtc2l6ZTogMjRweDsKKyAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQg
I2VkZWRlZDsKK30KKworI3RvZG8tbGlzdCBsaTpsYXN0LWNoaWxkIHsKKyAgICBib3JkZXItYm90
dG9tOiBub25lOworfQorCisjdG9kby1saXN0IGxpLmVkaXRpbmcgeworICAgIGJvcmRlci1ib3R0
b206IG5vbmU7CisgICAgcGFkZGluZzogMDsKK30KKworI3RvZG8tbGlzdCBsaS5lZGl0aW5nIC5l
ZGl0IHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICB3aWR0aDogNTA2cHg7CisgICAgcGFkZGlu
ZzogMTNweCAxN3B4IDEycHggMTdweDsKKyAgICBtYXJnaW46IDAgMCAwIDQzcHg7Cit9CisKKyN0
b2RvLWxpc3QgbGkuZWRpdGluZyAudmlldyB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworI3Rv
ZG8tbGlzdCBsaSAudG9nZ2xlIHsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgd2lkdGg6
IDQwcHg7CisgICAgLyogYXV0bywgc2luY2Ugbm9uLVdlYktpdCBicm93c2VycyBkb2Vzbid0IHN1
cHBvcnQgaW5wdXQgc3R5bGluZyAqLworICAgIGhlaWdodDogYXV0bzsKKyAgICBwb3NpdGlvbjog
YWJzb2x1dGU7CisgICAgdG9wOiAwOworICAgIGJvdHRvbTogMDsKKyAgICBtYXJnaW46IGF1dG8g
MDsKKyAgICBib3JkZXI6IG5vbmU7IC8qIE1vYmlsZSBTYWZhcmkgKi8KKyAgICAtd2Via2l0LWFw
cGVhcmFuY2U6IG5vbmU7CisgICAgYXBwZWFyYW5jZTogbm9uZTsKK30KKworI3RvZG8tbGlzdCBs
aSAudG9nZ2xlOmFmdGVyIHsKKyAgICBjb250ZW50OiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1
dGY4LDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iNDAiIGhl
aWdodD0iNDAiIHZpZXdCb3g9Ii0xMCAtMTggMTAwIDEzNSI+PGNpcmNsZSBjeD0iNTAiIGN5PSI1
MCIgcj0iNTAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2VkZWRlZCIgc3Ryb2tlLXdpZHRoPSIzIi8+
PC9zdmc+Jyk7Cit9CisKKyN0b2RvLWxpc3QgbGkgLnRvZ2dsZTpjaGVja2VkOmFmdGVyIHsKKyAg
ICBjb250ZW50OiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9Imh0dHA6
Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9Ii0x
MCAtMTggMTAwIDEzNSI+PGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgcj0iNTAiIGZpbGw9Im5vbmUi
IHN0cm9rZT0iI2JkZGFkNSIgc3Ryb2tlLXdpZHRoPSIzIi8+PHBhdGggZmlsbD0iIzVkYzJhZiIg
ZD0iTTcyIDI1TDQyIDcxIDI3IDU2bC00IDQgMjAgMjAgMzQtNTJ6Ii8+PC9zdmc+Jyk7Cit9CisK
KyN0b2RvLWxpc3QgbGkgbGFiZWwgeworICAgIHdoaXRlLXNwYWNlOiBwcmU7CisgICAgd29yZC1i
cmVhazogYnJlYWstd29yZDsKKyAgICBwYWRkaW5nOiAxNXB4IDYwcHggMTVweCAxNXB4OworICAg
IG1hcmdpbi1sZWZ0OiA0NXB4OworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIGxpbmUtaGVpZ2h0
OiAxLjI7CisgICAgdHJhbnNpdGlvbjogY29sb3IgMC40czsKK30KKworI3RvZG8tbGlzdCBsaS5j
b21wbGV0ZWQgbGFiZWwgeworICAgIGNvbG9yOiAjZDlkOWQ5OworICAgIHRleHQtZGVjb3JhdGlv
bjogbGluZS10aHJvdWdoOworfQorCisjdG9kby1saXN0IGxpIC5kZXN0cm95IHsKKyAgICBkaXNw
bGF5OiBub25lOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDA7CisgICAgcmln
aHQ6IDEwcHg7CisgICAgYm90dG9tOiAwOworICAgIHdpZHRoOiA0MHB4OworICAgIGhlaWdodDog
NDBweDsKKyAgICBtYXJnaW46IGF1dG8gMDsKKyAgICBmb250LXNpemU6IDMwcHg7CisgICAgY29s
b3I6ICNjYzlhOWE7CisgICAgbWFyZ2luLWJvdHRvbTogMTFweDsKKyAgICB0cmFuc2l0aW9uOiBj
b2xvciAwLjJzIGVhc2Utb3V0OworfQorCisjdG9kby1saXN0IGxpIC5kZXN0cm95OmhvdmVyIHsK
KyAgICBjb2xvcjogI2FmNWI1ZTsKK30KKworI3RvZG8tbGlzdCBsaSAuZGVzdHJveTphZnRlciB7
CisgICAgY29udGVudDogJ8OXJzsKK30KKworI3RvZG8tbGlzdCBsaTpob3ZlciAuZGVzdHJveSB7
CisgICAgZGlzcGxheTogYmxvY2s7Cit9CisKKyN0b2RvLWxpc3QgbGkgLmVkaXQgeworICAgIGRp
c3BsYXk6IG5vbmU7Cit9CisKKyN0b2RvLWxpc3QgbGkuZWRpdGluZzpsYXN0LWNoaWxkIHsKKyAg
ICBtYXJnaW4tYm90dG9tOiAtMXB4OworfQorCisjZm9vdGVyIHsKKyAgICBjb2xvcjogIzc3NzsK
KyAgICBwYWRkaW5nOiAxMHB4IDE1cHg7CisgICAgaGVpZ2h0OiAyMHB4OworICAgIHRleHQtYWxp
Z246IGNlbnRlcjsKKyAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2U2ZTZlNjsKK30KKworI2Zv
b3RlcjpiZWZvcmUgeworICAgIGNvbnRlbnQ6ICcnOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsK
KyAgICByaWdodDogMDsKKyAgICBib3R0b206IDA7CisgICAgbGVmdDogMDsKKyAgICBoZWlnaHQ6
IDUwcHg7CisgICAgb3ZlcmZsb3c6IGhpZGRlbjsKKyAgICBib3gtc2hhZG93OiAwIDFweCAxcHgg
cmdiYSgwLCAwLCAwLCAwLjIpLAorICAgICAgICAgICAgICAgIDAgOHB4IDAgLTNweCAjZjZmNmY2
LAorICAgICAgICAgICAgICAgIDAgOXB4IDFweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwKKyAg
ICAgICAgICAgICAgICAwIDE2cHggMCAtNnB4ICNmNmY2ZjYsCisgICAgICAgICAgICAgICAgMCAx
N3B4IDJweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKTsKK30KKworI3RvZG8tY291bnQgeworICAg
IGZsb2F0OiBsZWZ0OworICAgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKKyN0b2RvLWNvdW50IHN0
cm9uZyB7CisgICAgZm9udC13ZWlnaHQ6IDMwMDsKK30KKworI2ZpbHRlcnMgeworICAgIG1hcmdp
bjogMDsKKyAgICBwYWRkaW5nOiAwOworICAgIGxpc3Qtc3R5bGU6IG5vbmU7CisgICAgcG9zaXRp
b246IGFic29sdXRlOworICAgIHJpZ2h0OiAwOworICAgIGxlZnQ6IDA7Cit9CisKKyNmaWx0ZXJz
IGxpIHsKKyAgICBkaXNwbGF5OiBpbmxpbmU7Cit9CisKKyNmaWx0ZXJzIGxpIGEgeworICAgIGNv
bG9yOiBpbmhlcml0OworICAgIG1hcmdpbjogM3B4OworICAgIHBhZGRpbmc6IDNweCA3cHg7Cisg
ICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFy
ZW50OworICAgIGJvcmRlci1yYWRpdXM6IDNweDsKK30KKworI2ZpbHRlcnMgbGkgYS5zZWxlY3Rl
ZCwKKyNmaWx0ZXJzIGxpIGE6aG92ZXIgeworICAgIGJvcmRlci1jb2xvcjogcmdiYSgxNzUsIDQ3
LCA0NywgMC4xKTsKK30KKworI2ZpbHRlcnMgbGkgYS5zZWxlY3RlZCB7CisgICAgYm9yZGVyLWNv
bG9yOiByZ2JhKDE3NSwgNDcsIDQ3LCAwLjIpOworfQorCisjY2xlYXItY29tcGxldGVkLAoraHRt
bCAjY2xlYXItY29tcGxldGVkOmFjdGl2ZSB7CisgICAgZmxvYXQ6IHJpZ2h0OworICAgIHBvc2l0
aW9uOiByZWxhdGl2ZTsKKyAgICBsaW5lLWhlaWdodDogMjBweDsKKyAgICB0ZXh0LWRlY29yYXRp
b246IG5vbmU7CisgICAgY3Vyc29yOiBwb2ludGVyOworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsK
K30KKworI2NsZWFyLWNvbXBsZXRlZDpob3ZlciB7CisgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRl
cmxpbmU7Cit9CisKKyNpbmZvIHsKKyAgICBtYXJnaW46IDY1cHggYXV0byAwOworICAgIGNvbG9y
OiAjYmZiZmJmOworICAgIGZvbnQtc2l6ZTogMTBweDsKKyAgICB0ZXh0LXNoYWRvdzogMCAxcHgg
MCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworfQor
CisjaW5mbyBwIHsKKyAgICBsaW5lLWhlaWdodDogMTsKK30KKworI2luZm8gYSB7CisgICAgY29s
b3I6IGluaGVyaXQ7CisgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgIGZvbnQtd2VpZ2h0
OiA0MDA7Cit9CisKKyNpbmZvIGE6aG92ZXIgeworICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJs
aW5lOworfQorCisvKgorICAgIEhhY2sgdG8gcmVtb3ZlIGJhY2tncm91bmQgZnJvbSBNb2JpbGUg
U2FmYXJpLgorICAgIENhbid0IHVzZSBpdCBnbG9iYWxseSBzaW5jZSBpdCBkZXN0cm95cyBjaGVj
a2JveGVzIGluIEZpcmVmb3gKKyovCitAbWVkaWEgc2NyZWVuIGFuZCAoLXdlYmtpdC1taW4tZGV2
aWNlLXBpeGVsLXJhdGlvOjApIHsKKyAgICAjdG9nZ2xlLWFsbCwKKyAgICAjdG9kby1saXN0IGxp
IC50b2dnbGUgeworICAgICAgICBiYWNrZ3JvdW5kOiBub25lOworICAgIH0KKworICAgICN0b2Rv
LWxpc3QgbGkgLnRvZ2dsZSB7CisgICAgICAgIGhlaWdodDogNDBweDsKKyAgICB9CisKKyAgICAj
dG9nZ2xlLWFsbCB7CisgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOwor
ICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7CisgICAgICAgIC13ZWJraXQtYXBwZWFy
YW5jZTogbm9uZTsKKyAgICAgICAgYXBwZWFyYW5jZTogbm9uZTsKKyAgICB9Cit9CisKK0BtZWRp
YSAobWF4LXdpZHRoOiA0MzBweCkgeworICAgICNmb290ZXIgeworICAgICAgICBoZWlnaHQ6IDUw
cHg7CisgICAgfQorCisgICAgI2ZpbHRlcnMgeworICAgICAgICBib3R0b206IDEwcHg7CisgICAg
fQorfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5L25vZGVfbW9kdWxlcy90b2RvbXZj
LWFwcC1jc3MvcGFja2FnZS5qc29uIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5L25vZGVfbW9kdWxlcy90
b2RvbXZjLWFwcC1jc3MvcGFja2FnZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU1MGVmYTYzZjhmMTk0OGU0
NGI4YjVmOGIwN2Y3MTUyMzY3Njc4YzUKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9q
cXVlcnkvbm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9wYWNrYWdlLmpzb24KQEAgLTAsMCAr
MSwxMDMgQEAKK3sKKyAgIl9hcmdzIjogWworICAgIFsKKyAgICAgIHsKKyAgICAgICAgInJhdyI6
ICJ0b2RvbXZjLWFwcC1jc3NAfjEuMC4xIiwKKyAgICAgICAgInNjb3BlIjogbnVsbCwKKyAgICAg
ICAgImVzY2FwZWROYW1lIjogInRvZG9tdmMtYXBwLWNzcyIsCisgICAgICAgICJuYW1lIjogInRv
ZG9tdmMtYXBwLWNzcyIsCisgICAgICAgICJyYXdTcGVjIjogIn4xLjAuMSIsCisgICAgICAgICJz
cGVjIjogIj49MS4wLjEgPDEuMS4wIiwKKyAgICAgICAgInR5cGUiOiAicmFuZ2UiCisgICAgICB9
LAorICAgICAgIi9Vc2Vycy9hZGR5by9wcm9qZWN0cy9zcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5IgorICAgIF0KKyAgXSwKKyAgIl9mcm9t
IjogInRvZG9tdmMtYXBwLWNzc0A+PTEuMC4xIDwxLjEuMCIsCisgICJfaWQiOiAidG9kb212Yy1h
cHAtY3NzQDEuMC40IiwKKyAgIl9pbkNhY2hlIjogdHJ1ZSwKKyAgIl9sb2NhdGlvbiI6ICIvdG9k
b212Yy1hcHAtY3NzIiwKKyAgIl9ub2RlVmVyc2lvbiI6ICIwLjEyLjAiLAorICAiX25wbVVzZXIi
OiB7CisgICAgIm5hbWUiOiAic2luZHJlc29yaHVzIiwKKyAgICAiZW1haWwiOiAic2luZHJlc29y
aHVzQGdtYWlsLmNvbSIKKyAgfSwKKyAgIl9ucG1WZXJzaW9uIjogIjIuNS4xIiwKKyAgIl9waGFu
dG9tQ2hpbGRyZW4iOiB7fSwKKyAgIl9yZXF1ZXN0ZWQiOiB7CisgICAgInJhdyI6ICJ0b2RvbXZj
LWFwcC1jc3NAfjEuMC4xIiwKKyAgICAic2NvcGUiOiBudWxsLAorICAgICJlc2NhcGVkTmFtZSI6
ICJ0b2RvbXZjLWFwcC1jc3MiLAorICAgICJuYW1lIjogInRvZG9tdmMtYXBwLWNzcyIsCisgICAg
InJhd1NwZWMiOiAifjEuMC4xIiwKKyAgICAic3BlYyI6ICI+PTEuMC4xIDwxLjEuMCIsCisgICAg
InR5cGUiOiAicmFuZ2UiCisgIH0sCisgICJfcmVxdWlyZWRCeSI6IFsKKyAgICAiLyIKKyAgXSwK
KyAgIl9yZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90b2RvbXZjLWFwcC1j
c3MvLS90b2RvbXZjLWFwcC1jc3MtMS4wLjQudGd6IiwKKyAgIl9zaGFzdW0iOiAiZDI1MjkyNzlh
NmRhNWJlZmIwNmI1NWMwYzMyNGM1ZmNmZDk0ZDY1NiIsCisgICJfc2hyaW5rd3JhcCI6IG51bGws
CisgICJfc3BlYyI6ICJ0b2RvbXZjLWFwcC1jc3NAfjEuMC4xIiwKKyAgIl93aGVyZSI6ICIvVXNl
cnMvYWRkeW8vcHJvamVjdHMvc3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL2pxdWVyeSIsCisgICJhdXRob3IiOiB7CisgICAgIm5hbWUiOiAiU2luZHJl
IFNvcmh1cyIsCisgICAgImVtYWlsIjogInNpbmRyZXNvcmh1c0BnbWFpbC5jb20iLAorICAgICJ1
cmwiOiAic2luZHJlc29yaHVzLmNvbSIKKyAgfSwKKyAgImJ1Z3MiOiB7CisgICAgInVybCI6ICJo
dHRwczovL2dpdGh1Yi5jb20vdGFzdGVqcy90b2RvbXZjLWFwcC1jc3MvaXNzdWVzIgorICB9LAor
ICAiZGVwZW5kZW5jaWVzIjoge30sCisgICJkZXNjcmlwdGlvbiI6ICJDU1MgZm9yIFRvZG9NVkMg
YXBwcyIsCisgICJkZXZEZXBlbmRlbmNpZXMiOiB7fSwKKyAgImRpcmVjdG9yaWVzIjoge30sCisg
ICJkaXN0IjogeworICAgICJzaGFzdW0iOiAiZDI1MjkyNzlhNmRhNWJlZmIwNmI1NWMwYzMyNGM1
ZmNmZDk0ZDY1NiIsCisgICAgInRhcmJhbGwiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcv
dG9kb212Yy1hcHAtY3NzLy0vdG9kb212Yy1hcHAtY3NzLTEuMC40LnRneiIKKyAgfSwKKyAgImZp
bGVzIjogWworICAgICJpbmRleC5jc3MiCisgIF0sCisgICJnaXRIZWFkIjogIjFlNGUzODg4NGEz
NTE5M2VhZjE4MDhhNWJhNDQ0MjE4MzI4NjcxODQiLAorICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9n
aXRodWIuY29tL3Rhc3RlanMvdG9kb212Yy1hcHAtY3NzIiwKKyAgImtleXdvcmRzIjogWworICAg
ICJ0b2RvbXZjIiwKKyAgICAidGFzdGVqcyIsCisgICAgImFwcCIsCisgICAgInRvZG8iLAorICAg
ICJ0ZW1wbGF0ZSIsCisgICAgImNzcyIsCisgICAgInN0eWxlIiwKKyAgICAic3R5bGVzaGVldCIK
KyAgXSwKKyAgImxpY2Vuc2UiOiAiQ0MtQlktNC4wIiwKKyAgIm1haW50YWluZXJzIjogWworICAg
IHsKKyAgICAgICJuYW1lIjogInNpbmRyZXNvcmh1cyIsCisgICAgICAiZW1haWwiOiAic2luZHJl
c29yaHVzQGdtYWlsLmNvbSIKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogImFkZHlvc21h
bmkiLAorICAgICAgImVtYWlsIjogImFkZHlvc21hbmlAZ21haWwuY29tIgorICAgIH0sCisgICAg
eworICAgICAgIm5hbWUiOiAicGFzc3kiLAorICAgICAgImVtYWlsIjogInBoYXJ0aWdAcmRyZWku
bmV0IgorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAic3RlcGhlbnBsdXNwbHVzIiwKKyAg
ICAgICJlbWFpbCI6ICJzYXdjaHVrQGdtYWlsLmNvbSIKKyAgICB9CisgIF0sCisgICJuYW1lIjog
InRvZG9tdmMtYXBwLWNzcyIsCisgICJvcHRpb25hbERlcGVuZGVuY2llcyI6IHt9LAorICAicmVh
ZG1lIjogIkVSUk9SOiBObyBSRUFETUUgZGF0YSBmb3VuZCEiLAorICAicmVwb3NpdG9yeSI6IHsK
KyAgICAidHlwZSI6ICJnaXQiLAorICAgICJ1cmwiOiAiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS90
YXN0ZWpzL3RvZG9tdmMtYXBwLWNzcy5naXQiCisgIH0sCisgICJzY3JpcHRzIjoge30sCisgICJ2
ZXJzaW9uIjogIjEuMC40IgorfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5L25vZGVf
bW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvcmVhZG1lLm1kIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5L25v
ZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvcmVhZG1lLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZkZGJlYmYw
MjRjMDRhZWI2MDIwY2FmMTMxYTJlZDAzMTg5MDgwYTUKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9qcXVlcnkvbm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9yZWFkbWUubWQKQEAg
LTAsMCArMSwyOCBAQAorIyB0b2RvbXZjLWFwcC1jc3MKKworPiBDU1MgZm9yIFRvZG9NVkMgYXBw
cworCishW10oc2NyZWVuc2hvdC5wbmcpCisKKworIyMgSW5zdGFsbAorCisKK2BgYAorJCBucG0g
aW5zdGFsbCAtLXNhdmUgdG9kb212Yy1hcHAtY3NzCitgYGAKKworCisjIyBHZXR0aW5nIHN0YXJ0
ZWQKKworYGBgaHRtbAorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJub2RlX21vZHVsZXMv
dG9kb212Yy1hcHAtY3NzL2luZGV4LmNzcyI+CitgYGAKKworU2VlIHRoZSBbVG9kb01WQyBhcHAg
dGVtcGxhdGVdKGh0dHBzOi8vZ2l0aHViLmNvbS90YXN0ZWpzL3RvZG9tdmMtYXBwLXRlbXBsYXRl
KS4KKworCisKKyMjIExpY2Vuc2UKKworPGEgcmVsPSJsaWNlbnNlIiBocmVmPSJodHRwOi8vY3Jl
YXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS80LjAvZGVlZC5lbl9VUyI+PGltZyBhbHQ9IkNy
ZWF0aXZlIENvbW1vbnMgTGljZW5zZSIgc3R5bGU9ImJvcmRlci13aWR0aDowIiBzcmM9Imh0dHA6
Ly9pLmNyZWF0aXZlY29tbW9ucy5vcmcvbC9ieS80LjAvODB4MTUucG5nIiAvPjwvYT48YnIgLz5U
aGlzIDxzcGFuIHhtbG5zOmRjdD0iaHR0cDovL3B1cmwub3JnL2RjL3Rlcm1zLyIgaHJlZj0iaHR0
cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL0ludGVyYWN0aXZlUmVzb3VyY2UiIHJlbD0iZGN0OnR5
cGUiPndvcms8L3NwYW4+IGJ5IDxhIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9y
Zy9ucyMiIGhyZWY9Imh0dHA6Ly9zaW5kcmVzb3JodXMuY29tIiBwcm9wZXJ0eT0iY2M6YXR0cmli
dXRpb25OYW1lIiByZWw9ImNjOmF0dHJpYnV0aW9uVVJMIj5TaW5kcmUgU29yaHVzPC9hPiBpcyBs
aWNlbnNlZCB1bmRlciBhIDxhIHJlbD0ibGljZW5zZSIgaHJlZj0iaHR0cDovL2NyZWF0aXZlY29t
bW9ucy5vcmcvbGljZW5zZXMvYnkvNC4wL2RlZWQuZW5fVVMiPkNyZWF0aXZlIENvbW1vbnMgQXR0
cmlidXRpb24gNC4wIEludGVybmF0aW9uYWwgTGljZW5zZTwvYT4uCmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9qcXVlcnkvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuY3NzIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvanF1ZXJ5L25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmNzcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40ZDI1ZDNjODRhYzZjNmFlZjI2Yjk2ODNhMmJjMTBjNjFmOTYwYzhmCi0tLSAvZGV2
L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5L25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1v
bi9iYXNlLmNzcwpAQCAtMCwwICsxLDE0MSBAQAoraHIgeworICAgIG1hcmdpbjogMjBweCAwOwor
ICAgIGJvcmRlcjogMDsKKyAgICBib3JkZXItdG9wOiAxcHggZGFzaGVkICNjNWM1YzU7CisgICAg
Ym9yZGVyLWJvdHRvbTogMXB4IGRhc2hlZCAjZjdmN2Y3OworfQorCisubGVhcm4gYSB7CisgICAg
Zm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgICAgY29s
b3I6ICNiODNmNDU7Cit9CisKKy5sZWFybiBhOmhvdmVyIHsKKyAgICB0ZXh0LWRlY29yYXRpb246
IHVuZGVybGluZTsKKyAgICBjb2xvcjogIzc4N2U3ZTsKK30KKworLmxlYXJuIGgzLAorLmxlYXJu
IGg0LAorLmxlYXJuIGg1IHsKKyAgICBtYXJnaW46IDEwcHggMDsKKyAgICBmb250LXdlaWdodDog
NTAwOworICAgIGxpbmUtaGVpZ2h0OiAxLjI7CisgICAgY29sb3I6ICMwMDA7Cit9CisKKy5sZWFy
biBoMyB7CisgICAgZm9udC1zaXplOiAyNHB4OworfQorCisubGVhcm4gaDQgeworICAgIGZvbnQt
c2l6ZTogMThweDsKK30KKworLmxlYXJuIGg1IHsKKyAgICBtYXJnaW4tYm90dG9tOiAwOworICAg
IGZvbnQtc2l6ZTogMTRweDsKK30KKworLmxlYXJuIHVsIHsKKyAgICBwYWRkaW5nOiAwOworICAg
IG1hcmdpbjogMCAwIDMwcHggMjVweDsKK30KKworLmxlYXJuIGxpIHsKKyAgICBsaW5lLWhlaWdo
dDogMjBweDsKK30KKworLmxlYXJuIHAgeworICAgIGZvbnQtc2l6ZTogMTVweDsKKyAgICBmb250
LXdlaWdodDogMzAwOworICAgIGxpbmUtaGVpZ2h0OiAxLjM7CisgICAgbWFyZ2luLXRvcDogMDsK
KyAgICBtYXJnaW4tYm90dG9tOiAwOworfQorCisjaXNzdWUtY291bnQgeworICAgIGRpc3BsYXk6
IG5vbmU7Cit9CisKKy5xdW90ZSB7CisgICAgYm9yZGVyOiBub25lOworICAgIG1hcmdpbjogMjBw
eCAwIDYwcHggMDsKK30KKworLnF1b3RlIHAgeworICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30K
KworLnF1b3RlIHA6YmVmb3JlIHsKKyAgICBjb250ZW50OiAn4oCcJzsKKyAgICBmb250LXNpemU6
IDUwcHg7CisgICAgb3BhY2l0eTogLjE1OworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0
b3A6IC0yMHB4OworICAgIGxlZnQ6IDNweDsKK30KKworLnF1b3RlIHA6YWZ0ZXIgeworICAgIGNv
bnRlbnQ6ICfigJ0nOworICAgIGZvbnQtc2l6ZTogNTBweDsKKyAgICBvcGFjaXR5OiAuMTU7Cisg
ICAgcG9zaXRpb246IGFic29sdXRlOworICAgIGJvdHRvbTogLTQycHg7CisgICAgcmlnaHQ6IDNw
eDsKK30KKworLnF1b3RlIGZvb3RlciB7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIGJv
dHRvbTogLTQwcHg7CisgICAgcmlnaHQ6IDA7Cit9CisKKy5xdW90ZSBmb290ZXIgaW1nIHsKKyAg
ICBib3JkZXItcmFkaXVzOiAzcHg7Cit9CisKKy5xdW90ZSBmb290ZXIgYSB7CisgICAgbWFyZ2lu
LWxlZnQ6IDVweDsKKyAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOworfQorCisuc3BlZWNoLWJ1
YmJsZSB7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIHBhZGRpbmc6IDEwcHg7CisgICAg
YmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAuMDQpOworICAgIGJvcmRlci1yYWRpdXM6IDVweDsK
K30KKworLnNwZWVjaC1idWJibGU6YWZ0ZXIgeworICAgIGNvbnRlbnQ6ICcnOworICAgIHBvc2l0
aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDEwMCU7CisgICAgcmlnaHQ6IDMwcHg7CisgICAgYm9y
ZGVyOiAxM3B4IHNvbGlkIHRyYW5zcGFyZW50OworICAgIGJvcmRlci10b3AtY29sb3I6IHJnYmEo
MCwgMCwgMCwgLjA0KTsKK30KKworLmxlYXJuLWJhciA+IC5sZWFybiB7CisgICAgcG9zaXRpb246
IGFic29sdXRlOworICAgIHdpZHRoOiAyNzJweDsKKyAgICB0b3A6IDhweDsKKyAgICBsZWZ0OiAt
MzAwcHg7CisgICAgcGFkZGluZzogMTBweDsKKyAgICBib3JkZXItcmFkaXVzOiA1cHg7CisgICAg
YmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAuNik7CisgICAgdHJhbnNpdGlv
bi1wcm9wZXJ0eTogbGVmdDsKKyAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiA1MDBtczsKK30KKwor
QG1lZGlhIChtaW4td2lkdGg6IDg5OXB4KSB7CisgICAgLmxlYXJuLWJhciB7CisgICAgICAgIHdp
ZHRoOiBhdXRvOworICAgICAgICBwYWRkaW5nLWxlZnQ6IDMwMHB4OworICAgIH0KKworICAgIC5s
ZWFybi1iYXIgPiAubGVhcm4geworICAgICAgICBsZWZ0OiA4cHg7CisgICAgfQorfQpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5L25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNl
LmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5L25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNl
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjgxZTAwNmJjNTAyZGRjNGM3NGY0N2JkMTNhODM5MjI3N2Y4MzBkYjgK
LS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9qcXVlcnkvbm9kZV9tb2R1bGVzL3RvZG9t
dmMtY29tbW9uL2Jhc2UuanMKQEAgLTAsMCArMSwyNDkgQEAKKy8qIGdsb2JhbCBfICovCisoZnVu
Y3Rpb24gKCkgeworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIC8qIGpzaGludCBpZ25vcmU6c3Rh
cnQgKi8KKyAgICAvLyBVbmRlcnNjb3JlJ3MgVGVtcGxhdGUgTW9kdWxlCisgICAgLy8gQ291cnRl
c3kgb2YgdW5kZXJzY29yZWpzLm9yZworICAgIHZhciBfID0gKGZ1bmN0aW9uIChfKSB7CisgICAg
ICAgIF8uZGVmYXVsdHMgPSBmdW5jdGlvbiAob2JqZWN0KSB7CisgICAgICAgICAgICBpZiAoIW9i
amVjdCkgeworICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBmb3IgKHZhciBhcmdzSW5kZXggPSAxLCBhcmdzTGVuZ3RoID0gYXJndW1lbnRz
Lmxlbmd0aDsgYXJnc0luZGV4IDwgYXJnc0xlbmd0aDsgYXJnc0luZGV4KyspIHsKKyAgICAgICAg
ICAgICAgICB2YXIgaXRlcmFibGUgPSBhcmd1bWVudHNbYXJnc0luZGV4XTsKKyAgICAgICAgICAg
ICAgICBpZiAoaXRlcmFibGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGlu
IGl0ZXJhYmxlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0W2tleV0gPT0g
bnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFtrZXldID0gaXRlcmFi
bGVba2V5XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBv
YmplY3Q7CisgICAgICAgIH0KKworICAgICAgICAvLyBCeSBkZWZhdWx0LCBVbmRlcnNjb3JlIHVz
ZXMgRVJCLXN0eWxlIHRlbXBsYXRlIGRlbGltaXRlcnMsIGNoYW5nZSB0aGUKKyAgICAgICAgLy8g
Zm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJz
LgorICAgICAgICBfLnRlbXBsYXRlU2V0dGluZ3MgPSB7CisgICAgICAgICAgICBldmFsdWF0ZSAg
ICA6IC88JShbXHNcU10rPyklPi9nLAorICAgICAgICAgICAgaW50ZXJwb2xhdGUgOiAvPCU9KFtc
c1xTXSs/KSU+L2csCisgICAgICAgICAgICBlc2NhcGUgICAgICA6IC88JS0oW1xzXFNdKz8pJT4v
ZworICAgICAgICB9OworCisgICAgICAgIC8vIFdoZW4gY3VzdG9taXppbmcgYHRlbXBsYXRlU2V0
dGluZ3NgLCBpZiB5b3UgZG9uJ3Qgd2FudCB0byBkZWZpbmUgYW4KKyAgICAgICAgLy8gaW50ZXJw
b2xhdGlvbiwgZXZhbHVhdGlvbiBvciBlc2NhcGluZyByZWdleCwgd2UgbmVlZCBvbmUgdGhhdCBp
cworICAgICAgICAvLyBndWFyYW50ZWVkIG5vdCB0byBtYXRjaC4KKyAgICAgICAgdmFyIG5vTWF0
Y2ggPSAvKC4pXi87CisKKyAgICAgICAgLy8gQ2VydGFpbiBjaGFyYWN0ZXJzIG5lZWQgdG8gYmUg
ZXNjYXBlZCBzbyB0aGF0IHRoZXkgY2FuIGJlIHB1dCBpbnRvIGEKKyAgICAgICAgLy8gc3RyaW5n
IGxpdGVyYWwuCisgICAgICAgIHZhciBlc2NhcGVzID0geworICAgICAgICAgICAgIiciOiAgICAg
ICInIiwKKyAgICAgICAgICAgICdcXCc6ICAgICAnXFwnLAorICAgICAgICAgICAgJ1xyJzogICAg
ICdyJywKKyAgICAgICAgICAgICdcbic6ICAgICAnbicsCisgICAgICAgICAgICAnXHQnOiAgICAg
J3QnLAorICAgICAgICAgICAgJ1x1MjAyOCc6ICd1MjAyOCcsCisgICAgICAgICAgICAnXHUyMDI5
JzogJ3UyMDI5JworICAgICAgICB9OworCisgICAgICAgIHZhciBlc2NhcGVyID0gL1xcfCd8XHJ8
XG58XHR8XHUyMDI4fFx1MjAyOS9nOworCisgICAgICAgIC8vIEphdmFTY3JpcHQgbWljcm8tdGVt
cGxhdGluZywgc2ltaWxhciB0byBKb2huIFJlc2lnJ3MgaW1wbGVtZW50YXRpb24uCisgICAgICAg
IC8vIFVuZGVyc2NvcmUgdGVtcGxhdGluZyBoYW5kbGVzIGFyYml0cmFyeSBkZWxpbWl0ZXJzLCBw
cmVzZXJ2ZXMgd2hpdGVzcGFjZSwKKyAgICAgICAgLy8gYW5kIGNvcnJlY3RseSBlc2NhcGVzIHF1
b3RlcyB3aXRoaW4gaW50ZXJwb2xhdGVkIGNvZGUuCisgICAgICAgIF8udGVtcGxhdGUgPSBmdW5j
dGlvbih0ZXh0LCBkYXRhLCBzZXR0aW5ncykgeworICAgICAgICAgICAgdmFyIHJlbmRlcjsKKyAg
ICAgICAgICAgIHNldHRpbmdzID0gXy5kZWZhdWx0cyh7fSwgc2V0dGluZ3MsIF8udGVtcGxhdGVT
ZXR0aW5ncyk7CisKKyAgICAgICAgICAgIC8vIENvbWJpbmUgZGVsaW1pdGVycyBpbnRvIG9uZSBy
ZWd1bGFyIGV4cHJlc3Npb24gdmlhIGFsdGVybmF0aW9uLgorICAgICAgICAgICAgdmFyIG1hdGNo
ZXIgPSBuZXcgUmVnRXhwKFsKKyAgICAgICAgICAgICAgICAoc2V0dGluZ3MuZXNjYXBlIHx8IG5v
TWF0Y2gpLnNvdXJjZSwKKyAgICAgICAgICAgICAgICAoc2V0dGluZ3MuaW50ZXJwb2xhdGUgfHwg
bm9NYXRjaCkuc291cmNlLAorICAgICAgICAgICAgICAgIChzZXR0aW5ncy5ldmFsdWF0ZSB8fCBu
b01hdGNoKS5zb3VyY2UKKyAgICAgICAgICAgIF0uam9pbignfCcpICsgJ3wkJywgJ2cnKTsKKwor
ICAgICAgICAgICAgLy8gQ29tcGlsZSB0aGUgdGVtcGxhdGUgc291cmNlLCBlc2NhcGluZyBzdHJp
bmcgbGl0ZXJhbHMgYXBwcm9wcmlhdGVseS4KKyAgICAgICAgICAgIHZhciBpbmRleCA9IDA7Cisg
ICAgICAgICAgICB2YXIgc291cmNlID0gIl9fcCs9JyI7CisgICAgICAgICAgICB0ZXh0LnJlcGxh
Y2UobWF0Y2hlciwgZnVuY3Rpb24obWF0Y2gsIGVzY2FwZSwgaW50ZXJwb2xhdGUsIGV2YWx1YXRl
LCBvZmZzZXQpIHsKKyAgICAgICAgICAgICAgICBzb3VyY2UgKz0gdGV4dC5zbGljZShpbmRleCwg
b2Zmc2V0KQorICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShlc2NhcGVyLCBmdW5jdGlvbiht
YXRjaCkgeyByZXR1cm4gJ1xcJyArIGVzY2FwZXNbbWF0Y2hdOyB9KTsKKworICAgICAgICAgICAg
ICAgIGlmIChlc2NhcGUpIHsKKyAgICAgICAgICAgICAgICAgICAgc291cmNlICs9ICInK1xuKChf
X3Q9KCIgKyBlc2NhcGUgKyAiKSk9PW51bGw/Jyc6Xy5lc2NhcGUoX190KSkrXG4nIjsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGludGVycG9sYXRlKSB7CisgICAgICAg
ICAgICAgICAgICAgIHNvdXJjZSArPSAiJytcbigoX190PSgiICsgaW50ZXJwb2xhdGUgKyAiKSk9
PW51bGw/Jyc6X190KStcbiciOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAoZXZhbHVhdGUpIHsKKyAgICAgICAgICAgICAgICAgICAgc291cmNlICs9ICInO1xuIiArIGV2
YWx1YXRlICsgIlxuX19wKz0nIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
aW5kZXggPSBvZmZzZXQgKyBtYXRjaC5sZW5ndGg7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1h
dGNoOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBzb3VyY2UgKz0gIic7XG4iOworCisg
ICAgICAgICAgICAvLyBJZiBhIHZhcmlhYmxlIGlzIG5vdCBzcGVjaWZpZWQsIHBsYWNlIGRhdGEg
dmFsdWVzIGluIGxvY2FsIHNjb3BlLgorICAgICAgICAgICAgaWYgKCFzZXR0aW5ncy52YXJpYWJs
ZSkgc291cmNlID0gJ3dpdGgob2JqfHx7fSl7XG4nICsgc291cmNlICsgJ31cbic7CisKKyAgICAg
ICAgICAgIHNvdXJjZSA9ICJ2YXIgX190LF9fcD0nJyxfX2o9QXJyYXkucHJvdG90eXBlLmpvaW4s
IiArCisgICAgICAgICAgICAgICAgInByaW50PWZ1bmN0aW9uKCl7X19wKz1fX2ouY2FsbChhcmd1
bWVudHMsJycpO307XG4iICsKKyAgICAgICAgICAgICAgICBzb3VyY2UgKyAicmV0dXJuIF9fcDtc
biI7CisKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgcmVuZGVyID0gbmV3IEZ1
bmN0aW9uKHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonLCAnXycsIHNvdXJjZSk7CisgICAgICAg
ICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgZS5zb3VyY2UgPSBzb3VyY2U7Cisg
ICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KGRhdGEpIHJldHVybiByZW5kZXIoZGF0YSwgXyk7CisgICAgICAgICAgICB2YXIgdGVtcGxhdGUg
PSBmdW5jdGlvbihkYXRhKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlci5jYWxsKHRo
aXMsIGRhdGEsIF8pOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgLy8gUHJvdmlkZSB0
aGUgY29tcGlsZWQgZnVuY3Rpb24gc291cmNlIGFzIGEgY29udmVuaWVuY2UgZm9yIHByZWNvbXBp
bGF0aW9uLgorICAgICAgICAgICAgdGVtcGxhdGUuc291cmNlID0gJ2Z1bmN0aW9uKCcgKyAoc2V0
dGluZ3MudmFyaWFibGUgfHwgJ29iaicpICsgJyl7XG4nICsgc291cmNlICsgJ30nOworCisgICAg
ICAgICAgICByZXR1cm4gdGVtcGxhdGU7CisgICAgICAgIH07CisKKyAgICAgICAgcmV0dXJuIF87
CisgICAgfSkoe30pOworCisgICAgaWYgKGxvY2F0aW9uLmhvc3RuYW1lID09PSAndG9kb212Yy5j
b20nKSB7CisgICAgICAgIChmdW5jdGlvbihpLHMsbyxnLHIsYSxtKXtpWydHb29nbGVBbmFseXRp
Y3NPYmplY3QnXT1yO2lbcl09aVtyXXx8ZnVuY3Rpb24oKXsKKyAgICAgICAgKGlbcl0ucT1pW3Jd
LnF8fFtdKS5wdXNoKGFyZ3VtZW50cyl9LGlbcl0ubD0xKm5ldyBEYXRlKCk7YT1zLmNyZWF0ZUVs
ZW1lbnQobyksCisgICAgICAgIG09cy5nZXRFbGVtZW50c0J5VGFnTmFtZShvKVswXTthLmFzeW5j
PTE7YS5zcmM9ZzttLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbSkKKyAgICAgICAgfSkod2lu
ZG93LGRvY3VtZW50LCdzY3JpcHQnLCdodHRwczovL3d3dy5nb29nbGUtYW5hbHl0aWNzLmNvbS9h
bmFseXRpY3MuanMnLCdnYScpOworICAgICAgICBnYSgnY3JlYXRlJywgJ1VBLTMxMDgxMDYyLTEn
LCAnYXV0bycpOworICAgICAgICBnYSgnc2VuZCcsICdwYWdldmlldycpOworICAgIH0KKyAgICAv
KiBqc2hpbnQgaWdub3JlOmVuZCAqLworCisgICAgZnVuY3Rpb24gcmVkaXJlY3QoKSB7CisgICAg
ICAgIGlmIChsb2NhdGlvbi5ob3N0bmFtZSA9PT0gJ3Rhc3RlanMuZ2l0aHViLmlvJykgeworICAg
ICAgICAgICAgbG9jYXRpb24uaHJlZiA9IGxvY2F0aW9uLmhyZWYucmVwbGFjZSgndGFzdGVqcy5n
aXRodWIuaW8vdG9kb212YycsICd0b2RvbXZjLmNvbScpOworICAgICAgICB9CisgICAgfQorCisg
ICAgZnVuY3Rpb24gZmluZFJvb3QoKSB7CisgICAgICAgIHZhciBiYXNlID0gbG9jYXRpb24uaHJl
Zi5pbmRleE9mKCdleGFtcGxlcy8nKTsKKyAgICAgICAgcmV0dXJuIGxvY2F0aW9uLmhyZWYuc3Vi
c3RyKDAsIGJhc2UpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGdldEZpbGUoZmlsZSwgY2FsbGJh
Y2spIHsKKyAgICAgICAgaWYgKCFsb2NhdGlvbi5ob3N0KSB7CisgICAgICAgICAgICByZXR1cm4g
Y29uc29sZS5pbmZvKCdNaXNzIHRoZSBpbmZvIGJhcj8gUnVuIFRvZG9NVkMgZnJvbSBhIHNlcnZl
ciB0byBhdm9pZCBhIGNyb3NzLW9yaWdpbiBlcnJvci4nKTsKKyAgICAgICAgfQorCisgICAgICAg
IHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKworICAgICAgICB4aHIub3BlbignR0VU
JywgZmluZFJvb3QoKSArIGZpbGUsIHRydWUpOworICAgICAgICB4aHIuc2VuZCgpOworCisgICAg
ICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAoeGhyLnN0YXR1
cyA9PT0gMjAwICYmIGNhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2soeGhyLnJl
c3BvbnNlVGV4dCk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorCisgICAgZnVu
Y3Rpb24gTGVhcm4obGVhcm5KU09OLCBjb25maWcpIHsKKyAgICAgICAgaWYgKCEodGhpcyBpbnN0
YW5jZW9mIExlYXJuKSkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBMZWFybihsZWFybkpTT04s
IGNvbmZpZyk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgdGVtcGxhdGUsIGZyYW1ld29yazsK
KworICAgICAgICBpZiAodHlwZW9mIGxlYXJuSlNPTiAhPT0gJ29iamVjdCcpIHsKKyAgICAgICAg
ICAgIHRyeSB7CisgICAgICAgICAgICAgICAgbGVhcm5KU09OID0gSlNPTi5wYXJzZShsZWFybkpT
T04pOworICAgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb25maWcpIHsKKyAgICAg
ICAgICAgIHRlbXBsYXRlID0gY29uZmlnLnRlbXBsYXRlOworICAgICAgICAgICAgZnJhbWV3b3Jr
ID0gY29uZmlnLmZyYW1ld29yazsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghdGVtcGxhdGUg
JiYgbGVhcm5KU09OLnRlbXBsYXRlcykgeworICAgICAgICAgICAgdGVtcGxhdGUgPSBsZWFybkpT
T04udGVtcGxhdGVzLnRvZG9tdmM7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWZyYW1ld29y
ayAmJiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1mcmFtZXdvcmtdJykpIHsKKyAgICAg
ICAgICAgIGZyYW1ld29yayA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWZyYW1ld29y
a10nKS5kYXRhc2V0LmZyYW1ld29yazsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMudGVtcGxh
dGUgPSB0ZW1wbGF0ZTsKKworICAgICAgICBpZiAobGVhcm5KU09OLmJhY2tlbmQpIHsKKyAgICAg
ICAgICAgIHRoaXMuZnJhbWV3b3JrSlNPTiA9IGxlYXJuSlNPTi5iYWNrZW5kOworICAgICAgICAg
ICAgdGhpcy5mcmFtZXdvcmtKU09OLmlzc3VlTGFiZWwgPSBmcmFtZXdvcms7CisgICAgICAgICAg
ICB0aGlzLmFwcGVuZCh7CisgICAgICAgICAgICAgICAgYmFja2VuZDogdHJ1ZQorICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0gZWxzZSBpZiAobGVhcm5KU09OW2ZyYW1ld29ya10pIHsKKyAgICAg
ICAgICAgIHRoaXMuZnJhbWV3b3JrSlNPTiA9IGxlYXJuSlNPTltmcmFtZXdvcmtdOworICAgICAg
ICAgICAgdGhpcy5mcmFtZXdvcmtKU09OLmlzc3VlTGFiZWwgPSBmcmFtZXdvcms7CisgICAgICAg
ICAgICB0aGlzLmFwcGVuZCgpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5mZXRjaElzc3Vl
Q291bnQoKTsKKyAgICB9CisKKyAgICBMZWFybi5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24g
KG9wdHMpIHsKKyAgICAgICAgdmFyIGFzaWRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYXNp
ZGUnKTsKKyAgICAgICAgYXNpZGUuaW5uZXJIVE1MID0gXy50ZW1wbGF0ZSh0aGlzLnRlbXBsYXRl
LCB0aGlzLmZyYW1ld29ya0pTT04pOworICAgICAgICBhc2lkZS5jbGFzc05hbWUgPSAnbGVhcm4n
OworCisgICAgICAgIGlmIChvcHRzICYmIG9wdHMuYmFja2VuZCkgeworICAgICAgICAgICAgLy8g
UmVtb3ZlIGRlbW8gbGluaworICAgICAgICAgICAgdmFyIHNvdXJjZUxpbmtzID0gYXNpZGUucXVl
cnlTZWxlY3RvcignLnNvdXJjZS1saW5rcycpOworICAgICAgICAgICAgdmFyIGhlYWRpbmcgPSBz
b3VyY2VMaW5rcy5maXJzdEVsZW1lbnRDaGlsZDsKKyAgICAgICAgICAgIHZhciBzb3VyY2VMaW5r
ID0gc291cmNlTGlua3MubGFzdEVsZW1lbnRDaGlsZDsKKyAgICAgICAgICAgIC8vIENvcnJlY3Qg
bGluayBwYXRoCisgICAgICAgICAgICB2YXIgaHJlZiA9IHNvdXJjZUxpbmsuZ2V0QXR0cmlidXRl
KCdocmVmJyk7CisgICAgICAgICAgICBzb3VyY2VMaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhy
ZWYuc3Vic3RyKGhyZWYubGFzdEluZGV4T2YoJ2h0dHAnKSkpOworICAgICAgICAgICAgc291cmNl
TGlua3MuaW5uZXJIVE1MID0gaGVhZGluZy5vdXRlckhUTUwgKyBzb3VyY2VMaW5rLm91dGVySFRN
TDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIExvY2FsaXplIGRlbW8gbGlua3MK
KyAgICAgICAgICAgIHZhciBkZW1vTGlua3MgPSBhc2lkZS5xdWVyeVNlbGVjdG9yQWxsKCcuZGVt
by1saW5rJyk7CisgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGRlbW9M
aW5rcywgZnVuY3Rpb24gKGRlbW9MaW5rKSB7CisgICAgICAgICAgICAgICAgaWYgKGRlbW9MaW5r
LmdldEF0dHJpYnV0ZSgnaHJlZicpLnN1YnN0cigwLCA0KSAhPT0gJ2h0dHAnKSB7CisgICAgICAg
ICAgICAgICAgICAgIGRlbW9MaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIGZpbmRSb290KCkgKyBk
ZW1vTGluay5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTmFtZSA9
IChkb2N1bWVudC5ib2R5LmNsYXNzTmFtZSArICcgbGVhcm4tYmFyJykudHJpbSgpOworICAgICAg
ICBkb2N1bWVudC5ib2R5Lmluc2VydEFkamFjZW50SFRNTCgnYWZ0ZXJCZWdpbicsIGFzaWRlLm91
dGVySFRNTCk7CisgICAgfTsKKworICAgIExlYXJuLnByb3RvdHlwZS5mZXRjaElzc3VlQ291bnQg
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBpc3N1ZUxpbmsgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnaXNzdWUtY291bnQtbGluaycpOworICAgICAgICBpZiAoaXNzdWVMaW5rKSB7Cisg
ICAgICAgICAgICB2YXIgdXJsID0gaXNzdWVMaW5rLmhyZWYucmVwbGFjZSgnaHR0cHM6Ly9naXRo
dWIuY29tJywgJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MnKTsKKyAgICAgICAgICAgIHZh
ciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICAgICAgICAgIHhoci5vcGVuKCdHRVQn
LCB1cmwsIHRydWUpOworICAgICAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uIChlKSB7Cisg
ICAgICAgICAgICAgICAgdmFyIHBhcnNlZFJlc3BvbnNlID0gSlNPTi5wYXJzZShlLnRhcmdldC5y
ZXNwb25zZVRleHQpOworICAgICAgICAgICAgICAgIGlmIChwYXJzZWRSZXNwb25zZSBpbnN0YW5j
ZW9mIEFycmF5KSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IHBhcnNlZFJlc3Bv
bnNlLmxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ICE9PSAwKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpc3N1ZUxpbmsuaW5uZXJIVE1MID0gJ1RoaXMgYXBwIGhhcyAn
ICsgY291bnQgKyAnIG9wZW4gaXNzdWVzJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdpc3N1ZS1jb3VudCcpLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5l
JzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH07CisgICAgICAgICAgICB4aHIuc2VuZCgpOworICAgICAgICB9CisgICAgfTsKKworICAgIHJl
ZGlyZWN0KCk7CisgICAgZ2V0RmlsZSgnbGVhcm4uanNvbicsIExlYXJuKTsKK30pKCk7CmRpZmYg
LS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9qcXVlcnkvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL3Bh
Y2thZ2UuanNvbiBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2pxdWVyeS9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21t
b24vcGFja2FnZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU1MjVkNDMyZDFlMTE0NTc0ZWI4NDEwNWRiZWIy
ZDAyM2M2NWI3ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9qcXVlcnkvbm9kZV9t
b2R1bGVzL3RvZG9tdmMtY29tbW9uL3BhY2thZ2UuanNvbgpAQCAtMCwwICsxLDEwNCBAQAorewor
ICAiX2FyZ3MiOiBbCisgICAgWworICAgICAgeworICAgICAgICAicmF3IjogInRvZG9tdmMtY29t
bW9uQH4xLjAuMSIsCisgICAgICAgICJzY29wZSI6IG51bGwsCisgICAgICAgICJlc2NhcGVkTmFt
ZSI6ICJ0b2RvbXZjLWNvbW1vbiIsCisgICAgICAgICJuYW1lIjogInRvZG9tdmMtY29tbW9uIiwK
KyAgICAgICAgInJhd1NwZWMiOiAifjEuMC4xIiwKKyAgICAgICAgInNwZWMiOiAiPj0xLjAuMSA8
MS4xLjAiLAorICAgICAgICAidHlwZSI6ICJyYW5nZSIKKyAgICAgIH0sCisgICAgICAiL1VzZXJz
L2FkZHlvL3Byb2plY3RzL3NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVy
ZS1leGFtcGxlcy9qcXVlcnkiCisgICAgXQorICBdLAorICAiX2Zyb20iOiAidG9kb212Yy1jb21t
b25APj0xLjAuMSA8MS4xLjAiLAorICAiX2lkIjogInRvZG9tdmMtY29tbW9uQDEuMC4zIiwKKyAg
Il9pbkNhY2hlIjogdHJ1ZSwKKyAgIl9sb2NhdGlvbiI6ICIvdG9kb212Yy1jb21tb24iLAorICAi
X25vZGVWZXJzaW9uIjogIjcuMS4wIiwKKyAgIl9ucG1PcGVyYXRpb25hbEludGVybmFsIjogewor
ICAgICJob3N0IjogInBhY2thZ2VzLTE4LWVhc3QuaW50ZXJuYWwubnBtanMuY29tIiwKKyAgICAi
dG1wIjogInRtcC90b2RvbXZjLWNvbW1vbi0xLjAuMy50Z3pfMTQ3OTI3NjM2MTIyN18wLjUxMTI0
ODgwMTM2OTIyIgorICB9LAorICAiX25wbVVzZXIiOiB7CisgICAgIm5hbWUiOiAic2luZHJlc29y
aHVzIiwKKyAgICAiZW1haWwiOiAic2luZHJlc29yaHVzQGdtYWlsLmNvbSIKKyAgfSwKKyAgIl9u
cG1WZXJzaW9uIjogIjMuMTAuOSIsCisgICJfcGhhbnRvbUNoaWxkcmVuIjoge30sCisgICJfcmVx
dWVzdGVkIjogeworICAgICJyYXciOiAidG9kb212Yy1jb21tb25AfjEuMC4xIiwKKyAgICAic2Nv
cGUiOiBudWxsLAorICAgICJlc2NhcGVkTmFtZSI6ICJ0b2RvbXZjLWNvbW1vbiIsCisgICAgIm5h
bWUiOiAidG9kb212Yy1jb21tb24iLAorICAgICJyYXdTcGVjIjogIn4xLjAuMSIsCisgICAgInNw
ZWMiOiAiPj0xLjAuMSA8MS4xLjAiLAorICAgICJ0eXBlIjogInJhbmdlIgorICB9LAorICAiX3Jl
cXVpcmVkQnkiOiBbCisgICAgIi8iCisgIF0sCisgICJfcmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdp
c3RyeS5ucG1qcy5vcmcvdG9kb212Yy1jb21tb24vLS90b2RvbXZjLWNvbW1vbi0xLjAuMy50Z3oi
LAorICAiX3NoYXN1bSI6ICJjYmExODY4MTA5Y2FhNDAxYjkwOGViZjc3Nzk0Y2MxMDE0Yjc0ODcz
IiwKKyAgIl9zaHJpbmt3cmFwIjogbnVsbCwKKyAgIl9zcGVjIjogInRvZG9tdmMtY29tbW9uQH4x
LjAuMSIsCisgICJfd2hlcmUiOiAiL1VzZXJzL2FkZHlvL3Byb2plY3RzL3NwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9qcXVlcnkiLAorICAiYXV0aG9y
IjogeworICAgICJuYW1lIjogIlRhc3RlSlMiCisgIH0sCisgICJidWdzIjogeworICAgICJ1cmwi
OiAiaHR0cHM6Ly9naXRodWIuY29tL3Rhc3RlanMvdG9kb212Yy1jb21tb24vaXNzdWVzIgorICB9
LAorICAiZGVwZW5kZW5jaWVzIjoge30sCisgICJkZXNjcmlwdGlvbiI6ICJDb21tb24gVG9kb01W
QyB1dGlsaXRpZXMgdXNlZCBieSBvdXIgYXBwcyIsCisgICJkZXZEZXBlbmRlbmNpZXMiOiB7fSwK
KyAgImRpcmVjdG9yaWVzIjoge30sCisgICJkaXN0IjogeworICAgICJzaGFzdW0iOiAiY2JhMTg2
ODEwOWNhYTQwMWI5MDhlYmY3Nzc5NGNjMTAxNGI3NDg3MyIsCisgICAgInRhcmJhbGwiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdG9kb212Yy1jb21tb24vLS90b2RvbXZjLWNvbW1vbi0x
LjAuMy50Z3oiCisgIH0sCisgICJmaWxlcyI6IFsKKyAgICAiYmFzZS5qcyIsCisgICAgImJhc2Uu
Y3NzIgorICBdLAorICAiZ2l0SGVhZCI6ICJlNzQyNWJhZmI5NTYxZDc2NmI3Njk4NDQ4MTBlMDQ5
NjczNGZmZThjIiwKKyAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS90YXN0ZWpzL3Rv
ZG9tdmMtY29tbW9uI3JlYWRtZSIsCisgICJrZXl3b3JkcyI6IFsKKyAgICAidG9kb212YyIsCisg
ICAgInRhc3RlanMiLAorICAgICJ1dGlsIiwKKyAgICAidXRpbGl0aWVzIgorICBdLAorICAibGlj
ZW5zZSI6ICJNSVQiLAorICAibWFpbiI6ICJiYXNlLmpzIiwKKyAgIm1haW50YWluZXJzIjogWwor
ICAgIHsKKyAgICAgICJuYW1lIjogInNpbmRyZXNvcmh1cyIsCisgICAgICAiZW1haWwiOiAic2lu
ZHJlc29yaHVzQGdtYWlsLmNvbSIKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogImFkZHlv
c21hbmkiLAorICAgICAgImVtYWlsIjogImFkZHlvc21hbmlAZ21haWwuY29tIgorICAgIH0sCisg
ICAgeworICAgICAgIm5hbWUiOiAicGFzc3kiLAorICAgICAgImVtYWlsIjogInBoYXJ0aWdAcmRy
ZWkubmV0IgorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAic3RlcGhlbnBsdXNwbHVzIiwK
KyAgICAgICJlbWFpbCI6ICJzYXdjaHVrQGdtYWlsLmNvbSIKKyAgICB9CisgIF0sCisgICJuYW1l
IjogInRvZG9tdmMtY29tbW9uIiwKKyAgIm9wdGlvbmFsRGVwZW5kZW5jaWVzIjoge30sCisgICJy
ZWFkbWUiOiAiRVJST1I6IE5vIFJFQURNRSBkYXRhIGZvdW5kISIsCisgICJyZXBvc2l0b3J5Ijog
eworICAgICJ0eXBlIjogImdpdCIsCisgICAgInVybCI6ICJnaXQraHR0cHM6Ly9naXRodWIuY29t
L3Rhc3RlanMvdG9kb212Yy1jb21tb24uZ2l0IgorICB9LAorICAic2NyaXB0cyI6IHt9LAorICAi
c3R5bGUiOiAiYmFzZS5jc3MiLAorICAidmVyc2lvbiI6ICIxLjAuMyIKK30KZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL2pxdWVyeS9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vcmVhZG1lLm1k
IGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvanF1ZXJ5L25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9yZWFkbWUu
bWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uN2E1ZGU1MTE4ZjNmYzc3NThlOGRkYzBhNjg2ODc0OWNlZTljYWY5NQot
LS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2pxdWVyeS9ub2RlX21vZHVsZXMvdG9kb212
Yy1jb21tb24vcmVhZG1lLm1kCkBAIC0wLDAgKzEsMTUgQEAKKyMgdG9kb212Yy1jb21tb24KKwor
PiBDb21tb24gVG9kb01WQyB1dGlsaXRpZXMgdXNlZCBieSBvdXIgYXBwcworCisKKyMjIEluc3Rh
bGwKKworYGBgCiskIG5wbSBpbnN0YWxsIC0tc2F2ZSB0b2RvbXZjLWNvbW1vbgorYGBgCisKKwor
IyMgTGljZW5zZQorCitNSVQgwqkgW1Rhc3RlSlNdKGh0dHA6Ly90YXN0ZWpzLmNvbSkKZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL2pxdWVyeS9wYWNrYWdlLmpzb24gYi9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9qcXVl
cnkvcGFja2FnZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA5N2M4NWZjM2E1NjJjMDJjMzc3ODk2MGJmNWI4
MTBkZjgxZGY3NTUKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9qcXVlcnkvcGFja2Fn
ZS5qc29uCkBAIC0wLDAgKzEsMTAgQEAKK3sKKyAgInByaXZhdGUiOiB0cnVlLAorICAiZGVwZW5k
ZW5jaWVzIjogeworICAgICJkaXJlY3RvciI6ICJ+MS4yLjIiLAorICAgICJoYW5kbGViYXJzIjog
Il40LjAuNiIsCisgICAgImpxdWVyeSI6ICJeMy4xLjEiLAorICAgICJ0b2RvbXZjLWFwcC1jc3Mi
OiAifjEuMC4xIiwKKyAgICAidG9kb212Yy1jb21tb24iOiAifjEuMC4xIgorICB9Cit9CmRpZmYg
LS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9qcXVlcnkvcmVhZG1lLm1kIGIvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5
L3JlYWRtZS5tZAppbmRleCA2Mzc0NjkwYjIzM2FlNmRkMDhkODUyOTg1N2JjOTMyZWZmZDM0NjRl
Li5kYWI2Y2YwZTYyMGMyZTZkMjg2OGVkNjQ0YjllY2JmNjMwYmU5Mjg2IDEwMDY0NAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVy
ZS1leGFtcGxlcy9qcXVlcnkvcmVhZG1lLm1kCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2pxdWVyeS9yZWFk
bWUubWQKQEAgLTExLDEwICsxMSwxMCBAQCBUaGUgW2pRdWVyeSB3ZWJzaXRlXShodHRwOi8vanF1
ZXJ5LmNvbSkgaXMgYSBncmVhdCByZXNvdXJjZSBmb3IgZ2V0dGluZyBzdGFydGVkLgogCiBIZXJl
IGFyZSBzb21lIGxpbmtzIHlvdSBtYXkgZmluZCBoZWxwZnVsOgogCi0qIFtIb3cgalF1ZXJ5IFdv
cmtzXShodHRwOi8vbGVhcm4uanF1ZXJ5LmNvbS9hYm91dC1qcXVlcnkvaG93LWpxdWVyeS13b3Jr
cykKKyogW0xlYXJuaW5nIENlbnRlcl0oaHR0cDovL2xlYXJuLmpxdWVyeS5jb20vKQogKiBbQVBJ
IFJlZmVyZW5jZV0oaHR0cDovL2FwaS5qcXVlcnkuY29tKQogKiBbUGx1Z2luc10oaHR0cDovL3Bs
dWdpbnMuanF1ZXJ5LmNvbSkKLSogW0Jyb3dlciBTdXBwb3J0XShodHRwOi8vanF1ZXJ5LmNvbS9i
cm93c2VyLXN1cHBvcnQpCisqIFtCcm93c2VyIFN1cHBvcnRdKGh0dHA6Ly9qcXVlcnkuY29tL2Jy
b3dzZXItc3VwcG9ydCkKICogW0Jsb2ddKGh0dHA6Ly9ibG9nLmpxdWVyeS5jb20pCiAKIEFydGlj
bGVzIGFuZCBndWlkZXMgZnJvbSB0aGUgY29tbXVuaXR5Ogo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309819</attachid>
            <date>2017-05-11 16:37:08 -0700</date>
            <delta_ts>2017-05-11 17:55:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171308-20170511163707.patch</filename>
            <type>text/plain</type>
            <size>959043</size>
            <attacher name="Addy Osmani">addyo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1NjgzCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGVjNDZiZjNlOGFh
MmIyMTYyMjE3ZWMxNDJiMGMzOWQwYTk5ZGFlZmMuLjNjMWI4ZDhlOTliNjRkMmI1OWYyMTI4YzMx
NDRhYWViMmIyNDQxYTQgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTctMDUt
MTEgIEFkZHkgT3NtYW5pICA8YWRkeW9zbWFuaUBnbWFpbC5jb20+CisKKyAgICAgICAgU3BlZWRv
bWV0ZXI6IFVwZGF0ZSB0aGUgalF1ZXJ5IGltcGxlbWVudGF0aW9uIHRvIGEgbW9yZSByZWNlbnQg
bGlicmFyeSB2ZXJzaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzEzMDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBVcGRhdGVzIHRoZSBqUXVlcnkgaW1wbGVtZW50YXRpb24gb2YgVG9kb01WQyB0byBh
IG1vcmUgcmVjZW50IHZlcnNpb24KKworICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9qcXVlcnkvYm93ZXIuanNvbjogUmVtb3ZlZC4K
KyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvanF1ZXJ5L2Jvd2VyX2NvbXBvbmVudHMvaGFuZGxlYmFycy9oYW5kbGViYXJzLmpzOiBS
ZW1vdmVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9qcXVlcnkvYm93ZXJfY29tcG9uZW50cy9qcXVlcnkvanF1ZXJ5LmpzOiBS
ZW1vdmVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9qcXVlcnkvYm93ZXJfY29tcG9uZW50cy90b2RvbXZjLWNvbW1vbi9iYXNl
LmNzczogUmVtb3ZlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5L2Jvd2VyX2NvbXBvbmVudHMvdG9kb212Yy1jb21t
b24vYmFzZS5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5L2Jvd2VyX2NvbXBvbmVudHMvdG9kb212
Yy1jb21tb24vYmcucG5nOiBSZW1vdmVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9qcXVlcnkvaW5kZXguaHRtbDoKKyAgICAg
ICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
anF1ZXJ5L2pzL2FwcC5qczoKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5L25vZGVfbW9kdWxlcy9oYW5kbGViYXJzL2Rp
c3QvaGFuZGxlYmFycy5qczogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2pxdWVyeS9ub2RlX21vZHVsZXMvanF1ZXJ5
L2Rpc3QvanF1ZXJ5LmpzOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5L25vZGVfbW9kdWxlcy90b2RvbXZj
LWFwcC1jc3MvaW5kZXguY3NzOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5L25vZGVfbW9kdWxlcy90b2Rv
bXZjLWFwcC1jc3MvcGFja2FnZS5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5L25vZGVfbW9kdWxl
cy90b2RvbXZjLWFwcC1jc3MvcmVhZG1lLm1kOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5L25vZGVfbW9k
dWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmNzczogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2pxdWVyeS9ub2RlX21v
ZHVsZXMvdG9kb212Yy1jb21tb24vYmFzZS5qczogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2pxdWVyeS9ub2RlX21v
ZHVsZXMvdG9kb212Yy1jb21tb24vcGFja2FnZS5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBTcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5L25v
ZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9yZWFkbWUubWQ6IEFkZGVkLgorICAgICAgICAqIFNw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9qcXVlcnkv
cGFja2FnZS5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5L3JlYWRtZS5tZDoKKwogMjAxNy0wNC0y
MSAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFNpbXBsZSBsaW5l
IGxheW91dDogQWRkIHBlcmZvcm1hbmNlIHRlc3QgdG8gbWVhc3VyZSBtaWQtd29yZCBsaW5lIGJy
ZWFraW5nIHdpdGggbG9uZyB0ZXh0LgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5L2Jv
d2VyLmpzb24gYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L2FyY2hpdGVjdHVyZS1leGFtcGxlcy9qcXVlcnkvYm93ZXIuanNvbgpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMmJkYjMzZDc3NjRjNGIxMjhlNzYwYTVkYThlMjYyM2JkNGJiN2I0OC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9qcXVlcnkvYm93ZXIuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotewotICAi
bmFtZSI6ICJ0b2RvbXZjLWpxdWVyeSIsCi0gICJ2ZXJzaW9uIjogIjAuMC4wIiwKLSAgImRlcGVu
ZGVuY2llcyI6IHsKLSAgICAianF1ZXJ5IjogIn4xLjkuMSIsCi0gICAgImhhbmRsZWJhcnMiOiAi
fjEuMC4wLXJjLjMiLAotICAgICJ0b2RvbXZjLWNvbW1vbiI6ICJ+MC4xLjQiCi0gIH0KLX0KZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2pxdWVyeS9ib3dlcl9jb21wb25lbnRzL2hhbmRsZWJhcnMv
aGFuZGxlYmFycy5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2pxdWVyeS9ib3dlcl9jb21wb25lbnRzL2hhbmRs
ZWJhcnMvaGFuZGxlYmFycy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWU2NmU5
MjY3YWQyNzhiZDU0NWNlNGQyYjdlMzU0NDY5OTY1ZmNhMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9qcXVlcnkvYm93ZXJfY29tcG9u
ZW50cy9oYW5kbGViYXJzL2hhbmRsZWJhcnMuanMKKysrIC9kZXYvbnVsbApAQCAtMSwyMjAxICsw
LDAgQEAKLS8qCi0KLUNvcHlyaWdodCAoQykgMjAxMSBieSBZZWh1ZGEgS2F0egotCi1QZXJtaXNz
aW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRh
aW5pbmcgYSBjb3B5Ci1vZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRp
b24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAotaW4gdGhlIFNvZnR3YXJlIHdpdGhv
dXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwot
dG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNl
bnNlLCBhbmQvb3Igc2VsbAotY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBw
ZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi1mdXJuaXNoZWQgdG8gZG8gc28sIHN1Ympl
Y3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotCi1UaGUgYWJvdmUgY29weXJpZ2h0IG5v
dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotYWxs
IGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0KLVRIRSBT
T0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5E
LCBFWFBSRVNTIE9SCi1JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLUZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotQVVUSE9S
UyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBP
UiBPVEhFUgotTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9S
VCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLU9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJ
VEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KLVRIRSBTT0ZU
V0FSRS4KLQotKi8KLQotLy8gbGliL2hhbmRsZWJhcnMvYmFzZS5qcwotCi0vKmpzaGludCBlcW51
bGw6dHJ1ZSovCi10aGlzLkhhbmRsZWJhcnMgPSB7fTsKLQotKGZ1bmN0aW9uKEhhbmRsZWJhcnMp
IHsKLQotSGFuZGxlYmFycy5WRVJTSU9OID0gIjEuMC4wLXJjLjMiOwotSGFuZGxlYmFycy5DT01Q
SUxFUl9SRVZJU0lPTiA9IDI7Ci0KLUhhbmRsZWJhcnMuUkVWSVNJT05fQ0hBTkdFUyA9IHsKLSAg
MTogJzw9IDEuMC5yYy4yJywgLy8gMS4wLnJjLjIgaXMgYWN0dWFsbHkgcmV2MiBidXQgZG9lc24n
dCByZXBvcnQgaXQKLSAgMjogJz49IDEuMC4wLXJjLjMnCi19OwotCi1IYW5kbGViYXJzLmhlbHBl
cnMgID0ge307Ci1IYW5kbGViYXJzLnBhcnRpYWxzID0ge307Ci0KLUhhbmRsZWJhcnMucmVnaXN0
ZXJIZWxwZXIgPSBmdW5jdGlvbihuYW1lLCBmbiwgaW52ZXJzZSkgewotICBpZihpbnZlcnNlKSB7
IGZuLm5vdCA9IGludmVyc2U7IH0KLSAgdGhpcy5oZWxwZXJzW25hbWVdID0gZm47Ci19OwotCi1I
YW5kbGViYXJzLnJlZ2lzdGVyUGFydGlhbCA9IGZ1bmN0aW9uKG5hbWUsIHN0cikgewotICB0aGlz
LnBhcnRpYWxzW25hbWVdID0gc3RyOwotfTsKLQotSGFuZGxlYmFycy5yZWdpc3RlckhlbHBlcign
aGVscGVyTWlzc2luZycsIGZ1bmN0aW9uKGFyZykgewotICBpZihhcmd1bWVudHMubGVuZ3RoID09
PSAyKSB7Ci0gICAgcmV0dXJuIHVuZGVmaW5lZDsKLSAgfSBlbHNlIHsKLSAgICB0aHJvdyBuZXcg
RXJyb3IoIkNvdWxkIG5vdCBmaW5kIHByb3BlcnR5ICciICsgYXJnICsgIiciKTsKLSAgfQotfSk7
Ci0KLXZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsIGZ1bmN0aW9uVHlw
ZSA9ICJbb2JqZWN0IEZ1bmN0aW9uXSI7Ci0KLUhhbmRsZWJhcnMucmVnaXN0ZXJIZWxwZXIoJ2Js
b2NrSGVscGVyTWlzc2luZycsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHsKLSAgdmFyIGlu
dmVyc2UgPSBvcHRpb25zLmludmVyc2UgfHwgZnVuY3Rpb24oKSB7fSwgZm4gPSBvcHRpb25zLmZu
OwotCi0KLSAgdmFyIHJldCA9ICIiOwotICB2YXIgdHlwZSA9IHRvU3RyaW5nLmNhbGwoY29udGV4
dCk7Ci0KLSAgaWYodHlwZSA9PT0gZnVuY3Rpb25UeXBlKSB7IGNvbnRleHQgPSBjb250ZXh0LmNh
bGwodGhpcyk7IH0KLQotICBpZihjb250ZXh0ID09PSB0cnVlKSB7Ci0gICAgcmV0dXJuIGZuKHRo
aXMpOwotICB9IGVsc2UgaWYoY29udGV4dCA9PT0gZmFsc2UgfHwgY29udGV4dCA9PSBudWxsKSB7
Ci0gICAgcmV0dXJuIGludmVyc2UodGhpcyk7Ci0gIH0gZWxzZSBpZih0eXBlID09PSAiW29iamVj
dCBBcnJheV0iKSB7Ci0gICAgaWYoY29udGV4dC5sZW5ndGggPiAwKSB7Ci0gICAgICByZXR1cm4g
SGFuZGxlYmFycy5oZWxwZXJzLmVhY2goY29udGV4dCwgb3B0aW9ucyk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICByZXR1
cm4gZm4oY29udGV4dCk7Ci0gIH0KLX0pOwotCi1IYW5kbGViYXJzLksgPSBmdW5jdGlvbigpIHt9
OwotCi1IYW5kbGViYXJzLmNyZWF0ZUZyYW1lID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbihv
YmplY3QpIHsKLSAgSGFuZGxlYmFycy5LLnByb3RvdHlwZSA9IG9iamVjdDsKLSAgdmFyIG9iaiA9
IG5ldyBIYW5kbGViYXJzLksoKTsKLSAgSGFuZGxlYmFycy5LLnByb3RvdHlwZSA9IG51bGw7Ci0g
IHJldHVybiBvYmo7Ci19OwotCi1IYW5kbGViYXJzLmxvZ2dlciA9IHsKLSAgREVCVUc6IDAsIElO
Rk86IDEsIFdBUk46IDIsIEVSUk9SOiAzLCBsZXZlbDogMywKLQotICBtZXRob2RNYXA6IHswOiAn
ZGVidWcnLCAxOiAnaW5mbycsIDI6ICd3YXJuJywgMzogJ2Vycm9yJ30sCi0KLSAgLy8gY2FuIGJl
IG92ZXJyaWRkZW4gaW4gdGhlIGhvc3QgZW52aXJvbm1lbnQKLSAgbG9nOiBmdW5jdGlvbihsZXZl
bCwgb2JqKSB7Ci0gICAgaWYgKEhhbmRsZWJhcnMubG9nZ2VyLmxldmVsIDw9IGxldmVsKSB7Ci0g
ICAgICB2YXIgbWV0aG9kID0gSGFuZGxlYmFycy5sb2dnZXIubWV0aG9kTWFwW2xldmVsXTsKLSAg
ICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgY29uc29sZVttZXRob2Rd
KSB7Ci0gICAgICAgIGNvbnNvbGVbbWV0aG9kXS5jYWxsKGNvbnNvbGUsIG9iaik7Ci0gICAgICB9
Ci0gICAgfQotICB9Ci19OwotCi1IYW5kbGViYXJzLmxvZyA9IGZ1bmN0aW9uKGxldmVsLCBvYmop
IHsgSGFuZGxlYmFycy5sb2dnZXIubG9nKGxldmVsLCBvYmopOyB9OwotCi1IYW5kbGViYXJzLnJl
Z2lzdGVySGVscGVyKCdlYWNoJywgZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykgewotICB2YXIg
Zm4gPSBvcHRpb25zLmZuLCBpbnZlcnNlID0gb3B0aW9ucy5pbnZlcnNlOwotICB2YXIgaSA9IDAs
IHJldCA9ICIiLCBkYXRhOwotCi0gIGlmIChvcHRpb25zLmRhdGEpIHsKLSAgICBkYXRhID0gSGFu
ZGxlYmFycy5jcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpOwotICB9Ci0KLSAgaWYoY29udGV4dCAm
JiB0eXBlb2YgY29udGV4dCA9PT0gJ29iamVjdCcpIHsKLSAgICBpZihjb250ZXh0IGluc3RhbmNl
b2YgQXJyYXkpewotICAgICAgZm9yKHZhciBqID0gY29udGV4dC5sZW5ndGg7IGk8ajsgaSsrKSB7
Ci0gICAgICAgIGlmIChkYXRhKSB7IGRhdGEuaW5kZXggPSBpOyB9Ci0gICAgICAgIHJldCA9IHJl
dCArIGZuKGNvbnRleHRbaV0sIHsgZGF0YTogZGF0YSB9KTsKLSAgICAgIH0KLSAgICB9IGVsc2Ug
ewotICAgICAgZm9yKHZhciBrZXkgaW4gY29udGV4dCkgewotICAgICAgICBpZihjb250ZXh0Lmhh
c093blByb3BlcnR5KGtleSkpIHsKLSAgICAgICAgICBpZihkYXRhKSB7IGRhdGEua2V5ID0ga2V5
OyB9Ci0gICAgICAgICAgcmV0ID0gcmV0ICsgZm4oY29udGV4dFtrZXldLCB7ZGF0YTogZGF0YX0p
OwotICAgICAgICAgIGkrKzsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGlm
KGkgPT09IDApewotICAgIHJldCA9IGludmVyc2UodGhpcyk7Ci0gIH0KLQotICByZXR1cm4gcmV0
OwotfSk7Ci0KLUhhbmRsZWJhcnMucmVnaXN0ZXJIZWxwZXIoJ2lmJywgZnVuY3Rpb24oY29udGV4
dCwgb3B0aW9ucykgewotICB2YXIgdHlwZSA9IHRvU3RyaW5nLmNhbGwoY29udGV4dCk7Ci0gIGlm
KHR5cGUgPT09IGZ1bmN0aW9uVHlwZSkgeyBjb250ZXh0ID0gY29udGV4dC5jYWxsKHRoaXMpOyB9
Ci0KLSAgaWYoIWNvbnRleHQgfHwgSGFuZGxlYmFycy5VdGlscy5pc0VtcHR5KGNvbnRleHQpKSB7
Ci0gICAgcmV0dXJuIG9wdGlvbnMuaW52ZXJzZSh0aGlzKTsKLSAgfSBlbHNlIHsKLSAgICByZXR1
cm4gb3B0aW9ucy5mbih0aGlzKTsKLSAgfQotfSk7Ci0KLUhhbmRsZWJhcnMucmVnaXN0ZXJIZWxw
ZXIoJ3VubGVzcycsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHsKLSAgdmFyIGZuID0gb3B0
aW9ucy5mbiwgaW52ZXJzZSA9IG9wdGlvbnMuaW52ZXJzZTsKLSAgb3B0aW9ucy5mbiA9IGludmVy
c2U7Ci0gIG9wdGlvbnMuaW52ZXJzZSA9IGZuOwotCi0gIHJldHVybiBIYW5kbGViYXJzLmhlbHBl
cnNbJ2lmJ10uY2FsbCh0aGlzLCBjb250ZXh0LCBvcHRpb25zKTsKLX0pOwotCi1IYW5kbGViYXJz
LnJlZ2lzdGVySGVscGVyKCd3aXRoJywgZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykgewotICBy
ZXR1cm4gb3B0aW9ucy5mbihjb250ZXh0KTsKLX0pOwotCi1IYW5kbGViYXJzLnJlZ2lzdGVySGVs
cGVyKCdsb2cnLCBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7Ci0gIHZhciBsZXZlbCA9IG9w
dGlvbnMuZGF0YSAmJiBvcHRpb25zLmRhdGEubGV2ZWwgIT0gbnVsbCA/IHBhcnNlSW50KG9wdGlv
bnMuZGF0YS5sZXZlbCwgMTApIDogMTsKLSAgSGFuZGxlYmFycy5sb2cobGV2ZWwsIGNvbnRleHQp
OwotfSk7Ci0KLX0odGhpcy5IYW5kbGViYXJzKSk7Ci07Ci0vLyBsaWIvaGFuZGxlYmFycy9jb21w
aWxlci9wYXJzZXIuanMKLS8qIEppc29uIGdlbmVyYXRlZCBwYXJzZXIgKi8KLXZhciBoYW5kbGVi
YXJzID0gKGZ1bmN0aW9uKCl7Ci12YXIgcGFyc2VyID0ge3RyYWNlOiBmdW5jdGlvbiB0cmFjZSgp
IHsgfSwKLXl5OiB7fSwKLXN5bWJvbHNfOiB7ImVycm9yIjoyLCJyb290IjozLCJwcm9ncmFtIjo0
LCJFT0YiOjUsInNpbXBsZUludmVyc2UiOjYsInN0YXRlbWVudHMiOjcsInN0YXRlbWVudCI6OCwi
b3BlbkludmVyc2UiOjksImNsb3NlQmxvY2siOjEwLCJvcGVuQmxvY2siOjExLCJtdXN0YWNoZSI6
MTIsInBhcnRpYWwiOjEzLCJDT05URU5UIjoxNCwiQ09NTUVOVCI6MTUsIk9QRU5fQkxPQ0siOjE2
LCJpbk11c3RhY2hlIjoxNywiQ0xPU0UiOjE4LCJPUEVOX0lOVkVSU0UiOjE5LCJPUEVOX0VOREJM
T0NLIjoyMCwicGF0aCI6MjEsIk9QRU4iOjIyLCJPUEVOX1VORVNDQVBFRCI6MjMsIk9QRU5fUEFS
VElBTCI6MjQsInBhcnRpYWxOYW1lIjoyNSwicGFyYW1zIjoyNiwiaGFzaCI6MjcsIkRBVEEiOjI4
LCJwYXJhbSI6MjksIlNUUklORyI6MzAsIklOVEVHRVIiOjMxLCJCT09MRUFOIjozMiwiaGFzaFNl
Z21lbnRzIjozMywiaGFzaFNlZ21lbnQiOjM0LCJJRCI6MzUsIkVRVUFMUyI6MzYsIlBBUlRJQUxf
TkFNRSI6MzcsInBhdGhTZWdtZW50cyI6MzgsIlNFUCI6MzksIiRhY2NlcHQiOjAsIiRlbmQiOjF9
LAotdGVybWluYWxzXzogezI6ImVycm9yIiw1OiJFT0YiLDE0OiJDT05URU5UIiwxNToiQ09NTUVO
VCIsMTY6Ik9QRU5fQkxPQ0siLDE4OiJDTE9TRSIsMTk6Ik9QRU5fSU5WRVJTRSIsMjA6Ik9QRU5f
RU5EQkxPQ0siLDIyOiJPUEVOIiwyMzoiT1BFTl9VTkVTQ0FQRUQiLDI0OiJPUEVOX1BBUlRJQUwi
LDI4OiJEQVRBIiwzMDoiU1RSSU5HIiwzMToiSU5URUdFUiIsMzI6IkJPT0xFQU4iLDM1OiJJRCIs
MzY6IkVRVUFMUyIsMzc6IlBBUlRJQUxfTkFNRSIsMzk6IlNFUCJ9LAotcHJvZHVjdGlvbnNfOiBb
MCxbMywyXSxbNCwyXSxbNCwzXSxbNCwyXSxbNCwxXSxbNCwxXSxbNCwwXSxbNywxXSxbNywyXSxb
OCwzXSxbOCwzXSxbOCwxXSxbOCwxXSxbOCwxXSxbOCwxXSxbMTEsM10sWzksM10sWzEwLDNdLFsx
MiwzXSxbMTIsM10sWzEzLDNdLFsxMyw0XSxbNiwyXSxbMTcsM10sWzE3LDJdLFsxNywyXSxbMTcs
MV0sWzE3LDFdLFsyNiwyXSxbMjYsMV0sWzI5LDFdLFsyOSwxXSxbMjksMV0sWzI5LDFdLFsyOSwx
XSxbMjcsMV0sWzMzLDJdLFszMywxXSxbMzQsM10sWzM0LDNdLFszNCwzXSxbMzQsM10sWzM0LDNd
LFsyNSwxXSxbMjEsMV0sWzM4LDNdLFszOCwxXV0sCi1wZXJmb3JtQWN0aW9uOiBmdW5jdGlvbiBh
bm9ueW1vdXMoeXl0ZXh0LHl5bGVuZyx5eWxpbmVubyx5eSx5eXN0YXRlLCQkLF8kKSB7Ci0KLXZh
ciAkMCA9ICQkLmxlbmd0aCAtIDE7Ci1zd2l0Y2ggKHl5c3RhdGUpIHsKLWNhc2UgMTogcmV0dXJu
ICQkWyQwLTFdOwotYnJlYWs7Ci1jYXNlIDI6IHRoaXMuJCA9IG5ldyB5eS5Qcm9ncmFtTm9kZShb
XSwgJCRbJDBdKTsKLWJyZWFrOwotY2FzZSAzOiB0aGlzLiQgPSBuZXcgeXkuUHJvZ3JhbU5vZGUo
JCRbJDAtMl0sICQkWyQwXSk7Ci1icmVhazsKLWNhc2UgNDogdGhpcy4kID0gbmV3IHl5LlByb2dy
YW1Ob2RlKCQkWyQwLTFdLCBbXSk7Ci1icmVhazsKLWNhc2UgNTogdGhpcy4kID0gbmV3IHl5LlBy
b2dyYW1Ob2RlKCQkWyQwXSk7Ci1icmVhazsKLWNhc2UgNjogdGhpcy4kID0gbmV3IHl5LlByb2dy
YW1Ob2RlKFtdLCBbXSk7Ci1icmVhazsKLWNhc2UgNzogdGhpcy4kID0gbmV3IHl5LlByb2dyYW1O
b2RlKFtdKTsKLWJyZWFrOwotY2FzZSA4OiB0aGlzLiQgPSBbJCRbJDBdXTsKLWJyZWFrOwotY2Fz
ZSA5OiAkJFskMC0xXS5wdXNoKCQkWyQwXSk7IHRoaXMuJCA9ICQkWyQwLTFdOwotYnJlYWs7Ci1j
YXNlIDEwOiB0aGlzLiQgPSBuZXcgeXkuQmxvY2tOb2RlKCQkWyQwLTJdLCAkJFskMC0xXS5pbnZl
cnNlLCAkJFskMC0xXSwgJCRbJDBdKTsKLWJyZWFrOwotY2FzZSAxMTogdGhpcy4kID0gbmV3IHl5
LkJsb2NrTm9kZSgkJFskMC0yXSwgJCRbJDAtMV0sICQkWyQwLTFdLmludmVyc2UsICQkWyQwXSk7
Ci1icmVhazsKLWNhc2UgMTI6IHRoaXMuJCA9ICQkWyQwXTsKLWJyZWFrOwotY2FzZSAxMzogdGhp
cy4kID0gJCRbJDBdOwotYnJlYWs7Ci1jYXNlIDE0OiB0aGlzLiQgPSBuZXcgeXkuQ29udGVudE5v
ZGUoJCRbJDBdKTsKLWJyZWFrOwotY2FzZSAxNTogdGhpcy4kID0gbmV3IHl5LkNvbW1lbnROb2Rl
KCQkWyQwXSk7Ci1icmVhazsKLWNhc2UgMTY6IHRoaXMuJCA9IG5ldyB5eS5NdXN0YWNoZU5vZGUo
JCRbJDAtMV1bMF0sICQkWyQwLTFdWzFdKTsKLWJyZWFrOwotY2FzZSAxNzogdGhpcy4kID0gbmV3
IHl5Lk11c3RhY2hlTm9kZSgkJFskMC0xXVswXSwgJCRbJDAtMV1bMV0pOwotYnJlYWs7Ci1jYXNl
IDE4OiB0aGlzLiQgPSAkJFskMC0xXTsKLWJyZWFrOwotY2FzZSAxOTogdGhpcy4kID0gbmV3IHl5
Lk11c3RhY2hlTm9kZSgkJFskMC0xXVswXSwgJCRbJDAtMV1bMV0pOwotYnJlYWs7Ci1jYXNlIDIw
OiB0aGlzLiQgPSBuZXcgeXkuTXVzdGFjaGVOb2RlKCQkWyQwLTFdWzBdLCAkJFskMC0xXVsxXSwg
dHJ1ZSk7Ci1icmVhazsKLWNhc2UgMjE6IHRoaXMuJCA9IG5ldyB5eS5QYXJ0aWFsTm9kZSgkJFsk
MC0xXSk7Ci1icmVhazsKLWNhc2UgMjI6IHRoaXMuJCA9IG5ldyB5eS5QYXJ0aWFsTm9kZSgkJFsk
MC0yXSwgJCRbJDAtMV0pOwotYnJlYWs7Ci1jYXNlIDIzOgotYnJlYWs7Ci1jYXNlIDI0OiB0aGlz
LiQgPSBbWyQkWyQwLTJdXS5jb25jYXQoJCRbJDAtMV0pLCAkJFskMF1dOwotYnJlYWs7Ci1jYXNl
IDI1OiB0aGlzLiQgPSBbWyQkWyQwLTFdXS5jb25jYXQoJCRbJDBdKSwgbnVsbF07Ci1icmVhazsK
LWNhc2UgMjY6IHRoaXMuJCA9IFtbJCRbJDAtMV1dLCAkJFskMF1dOwotYnJlYWs7Ci1jYXNlIDI3
OiB0aGlzLiQgPSBbWyQkWyQwXV0sIG51bGxdOwotYnJlYWs7Ci1jYXNlIDI4OiB0aGlzLiQgPSBb
W25ldyB5eS5EYXRhTm9kZSgkJFskMF0pXSwgbnVsbF07Ci1icmVhazsKLWNhc2UgMjk6ICQkWyQw
LTFdLnB1c2goJCRbJDBdKTsgdGhpcy4kID0gJCRbJDAtMV07Ci1icmVhazsKLWNhc2UgMzA6IHRo
aXMuJCA9IFskJFskMF1dOwotYnJlYWs7Ci1jYXNlIDMxOiB0aGlzLiQgPSAkJFskMF07Ci1icmVh
azsKLWNhc2UgMzI6IHRoaXMuJCA9IG5ldyB5eS5TdHJpbmdOb2RlKCQkWyQwXSk7Ci1icmVhazsK
LWNhc2UgMzM6IHRoaXMuJCA9IG5ldyB5eS5JbnRlZ2VyTm9kZSgkJFskMF0pOwotYnJlYWs7Ci1j
YXNlIDM0OiB0aGlzLiQgPSBuZXcgeXkuQm9vbGVhbk5vZGUoJCRbJDBdKTsKLWJyZWFrOwotY2Fz
ZSAzNTogdGhpcy4kID0gbmV3IHl5LkRhdGFOb2RlKCQkWyQwXSk7Ci1icmVhazsKLWNhc2UgMzY6
IHRoaXMuJCA9IG5ldyB5eS5IYXNoTm9kZSgkJFskMF0pOwotYnJlYWs7Ci1jYXNlIDM3OiAkJFsk
MC0xXS5wdXNoKCQkWyQwXSk7IHRoaXMuJCA9ICQkWyQwLTFdOwotYnJlYWs7Ci1jYXNlIDM4OiB0
aGlzLiQgPSBbJCRbJDBdXTsKLWJyZWFrOwotY2FzZSAzOTogdGhpcy4kID0gWyQkWyQwLTJdLCAk
JFskMF1dOwotYnJlYWs7Ci1jYXNlIDQwOiB0aGlzLiQgPSBbJCRbJDAtMl0sIG5ldyB5eS5TdHJp
bmdOb2RlKCQkWyQwXSldOwotYnJlYWs7Ci1jYXNlIDQxOiB0aGlzLiQgPSBbJCRbJDAtMl0sIG5l
dyB5eS5JbnRlZ2VyTm9kZSgkJFskMF0pXTsKLWJyZWFrOwotY2FzZSA0MjogdGhpcy4kID0gWyQk
WyQwLTJdLCBuZXcgeXkuQm9vbGVhbk5vZGUoJCRbJDBdKV07Ci1icmVhazsKLWNhc2UgNDM6IHRo
aXMuJCA9IFskJFskMC0yXSwgbmV3IHl5LkRhdGFOb2RlKCQkWyQwXSldOwotYnJlYWs7Ci1jYXNl
IDQ0OiB0aGlzLiQgPSBuZXcgeXkuUGFydGlhbE5hbWVOb2RlKCQkWyQwXSk7Ci1icmVhazsKLWNh
c2UgNDU6IHRoaXMuJCA9IG5ldyB5eS5JZE5vZGUoJCRbJDBdKTsKLWJyZWFrOwotY2FzZSA0Njog
JCRbJDAtMl0ucHVzaCgkJFskMF0pOyB0aGlzLiQgPSAkJFskMC0yXTsKLWJyZWFrOwotY2FzZSA0
NzogdGhpcy4kID0gWyQkWyQwXV07Ci1icmVhazsKLX0KLX0sCi10YWJsZTogW3szOjEsNDoyLDU6
WzIsN10sNjozLDc6NCw4OjYsOTo3LDExOjgsMTI6OSwxMzoxMCwxNDpbMSwxMV0sMTU6WzEsMTJd
LDE2OlsxLDEzXSwxOTpbMSw1XSwyMjpbMSwxNF0sMjM6WzEsMTVdLDI0OlsxLDE2XX0sezE6WzNd
fSx7NTpbMSwxN119LHs1OlsyLDZdLDc6MTgsODo2LDk6NywxMTo4LDEyOjksMTM6MTAsMTQ6WzEs
MTFdLDE1OlsxLDEyXSwxNjpbMSwxM10sMTk6WzEsMTldLDIwOlsyLDZdLDIyOlsxLDE0XSwyMzpb
MSwxNV0sMjQ6WzEsMTZdfSx7NTpbMiw1XSw2OjIwLDg6MjEsOTo3LDExOjgsMTI6OSwxMzoxMCwx
NDpbMSwxMV0sMTU6WzEsMTJdLDE2OlsxLDEzXSwxOTpbMSw1XSwyMDpbMiw1XSwyMjpbMSwxNF0s
MjM6WzEsMTVdLDI0OlsxLDE2XX0sezE3OjIzLDE4OlsxLDIyXSwyMToyNCwyODpbMSwyNV0sMzU6
WzEsMjddLDM4OjI2fSx7NTpbMiw4XSwxNDpbMiw4XSwxNTpbMiw4XSwxNjpbMiw4XSwxOTpbMiw4
XSwyMDpbMiw4XSwyMjpbMiw4XSwyMzpbMiw4XSwyNDpbMiw4XX0sezQ6MjgsNjozLDc6NCw4OjYs
OTo3LDExOjgsMTI6OSwxMzoxMCwxNDpbMSwxMV0sMTU6WzEsMTJdLDE2OlsxLDEzXSwxOTpbMSw1
XSwyMDpbMiw3XSwyMjpbMSwxNF0sMjM6WzEsMTVdLDI0OlsxLDE2XX0sezQ6MjksNjozLDc6NCw4
OjYsOTo3LDExOjgsMTI6OSwxMzoxMCwxNDpbMSwxMV0sMTU6WzEsMTJdLDE2OlsxLDEzXSwxOTpb
MSw1XSwyMDpbMiw3XSwyMjpbMSwxNF0sMjM6WzEsMTVdLDI0OlsxLDE2XX0sezU6WzIsMTJdLDE0
OlsyLDEyXSwxNTpbMiwxMl0sMTY6WzIsMTJdLDE5OlsyLDEyXSwyMDpbMiwxMl0sMjI6WzIsMTJd
LDIzOlsyLDEyXSwyNDpbMiwxMl19LHs1OlsyLDEzXSwxNDpbMiwxM10sMTU6WzIsMTNdLDE2Olsy
LDEzXSwxOTpbMiwxM10sMjA6WzIsMTNdLDIyOlsyLDEzXSwyMzpbMiwxM10sMjQ6WzIsMTNdfSx7
NTpbMiwxNF0sMTQ6WzIsMTRdLDE1OlsyLDE0XSwxNjpbMiwxNF0sMTk6WzIsMTRdLDIwOlsyLDE0
XSwyMjpbMiwxNF0sMjM6WzIsMTRdLDI0OlsyLDE0XX0sezU6WzIsMTVdLDE0OlsyLDE1XSwxNTpb
MiwxNV0sMTY6WzIsMTVdLDE5OlsyLDE1XSwyMDpbMiwxNV0sMjI6WzIsMTVdLDIzOlsyLDE1XSwy
NDpbMiwxNV19LHsxNzozMCwyMToyNCwyODpbMSwyNV0sMzU6WzEsMjddLDM4OjI2fSx7MTc6MzEs
MjE6MjQsMjg6WzEsMjVdLDM1OlsxLDI3XSwzODoyNn0sezE3OjMyLDIxOjI0LDI4OlsxLDI1XSwz
NTpbMSwyN10sMzg6MjZ9LHsyNTozMywzNzpbMSwzNF19LHsxOlsyLDFdfSx7NTpbMiwyXSw4OjIx
LDk6NywxMTo4LDEyOjksMTM6MTAsMTQ6WzEsMTFdLDE1OlsxLDEyXSwxNjpbMSwxM10sMTk6WzEs
MTldLDIwOlsyLDJdLDIyOlsxLDE0XSwyMzpbMSwxNV0sMjQ6WzEsMTZdfSx7MTc6MjMsMjE6MjQs
Mjg6WzEsMjVdLDM1OlsxLDI3XSwzODoyNn0sezU6WzIsNF0sNzozNSw4OjYsOTo3LDExOjgsMTI6
OSwxMzoxMCwxNDpbMSwxMV0sMTU6WzEsMTJdLDE2OlsxLDEzXSwxOTpbMSwxOV0sMjA6WzIsNF0s
MjI6WzEsMTRdLDIzOlsxLDE1XSwyNDpbMSwxNl19LHs1OlsyLDldLDE0OlsyLDldLDE1OlsyLDld
LDE2OlsyLDldLDE5OlsyLDldLDIwOlsyLDldLDIyOlsyLDldLDIzOlsyLDldLDI0OlsyLDldfSx7
NTpbMiwyM10sMTQ6WzIsMjNdLDE1OlsyLDIzXSwxNjpbMiwyM10sMTk6WzIsMjNdLDIwOlsyLDIz
XSwyMjpbMiwyM10sMjM6WzIsMjNdLDI0OlsyLDIzXX0sezE4OlsxLDM2XX0sezE4OlsyLDI3XSwy
MTo0MSwyNjozNywyNzozOCwyODpbMSw0NV0sMjk6MzksMzA6WzEsNDJdLDMxOlsxLDQzXSwzMjpb
MSw0NF0sMzM6NDAsMzQ6NDYsMzU6WzEsNDddLDM4OjI2fSx7MTg6WzIsMjhdfSx7MTg6WzIsNDVd
LDI4OlsyLDQ1XSwzMDpbMiw0NV0sMzE6WzIsNDVdLDMyOlsyLDQ1XSwzNTpbMiw0NV0sMzk6WzEs
NDhdfSx7MTg6WzIsNDddLDI4OlsyLDQ3XSwzMDpbMiw0N10sMzE6WzIsNDddLDMyOlsyLDQ3XSwz
NTpbMiw0N10sMzk6WzIsNDddfSx7MTA6NDksMjA6WzEsNTBdfSx7MTA6NTEsMjA6WzEsNTBdfSx7
MTg6WzEsNTJdfSx7MTg6WzEsNTNdfSx7MTg6WzEsNTRdfSx7MTg6WzEsNTVdLDIxOjU2LDM1Olsx
LDI3XSwzODoyNn0sezE4OlsyLDQ0XSwzNTpbMiw0NF19LHs1OlsyLDNdLDg6MjEsOTo3LDExOjgs
MTI6OSwxMzoxMCwxNDpbMSwxMV0sMTU6WzEsMTJdLDE2OlsxLDEzXSwxOTpbMSwxOV0sMjA6WzIs
M10sMjI6WzEsMTRdLDIzOlsxLDE1XSwyNDpbMSwxNl19LHsxNDpbMiwxN10sMTU6WzIsMTddLDE2
OlsyLDE3XSwxOTpbMiwxN10sMjA6WzIsMTddLDIyOlsyLDE3XSwyMzpbMiwxN10sMjQ6WzIsMTdd
fSx7MTg6WzIsMjVdLDIxOjQxLDI3OjU3LDI4OlsxLDQ1XSwyOTo1OCwzMDpbMSw0Ml0sMzE6WzEs
NDNdLDMyOlsxLDQ0XSwzMzo0MCwzNDo0NiwzNTpbMSw0N10sMzg6MjZ9LHsxODpbMiwyNl19LHsx
ODpbMiwzMF0sMjg6WzIsMzBdLDMwOlsyLDMwXSwzMTpbMiwzMF0sMzI6WzIsMzBdLDM1OlsyLDMw
XX0sezE4OlsyLDM2XSwzNDo1OSwzNTpbMSw2MF19LHsxODpbMiwzMV0sMjg6WzIsMzFdLDMwOlsy
LDMxXSwzMTpbMiwzMV0sMzI6WzIsMzFdLDM1OlsyLDMxXX0sezE4OlsyLDMyXSwyODpbMiwzMl0s
MzA6WzIsMzJdLDMxOlsyLDMyXSwzMjpbMiwzMl0sMzU6WzIsMzJdfSx7MTg6WzIsMzNdLDI4Olsy
LDMzXSwzMDpbMiwzM10sMzE6WzIsMzNdLDMyOlsyLDMzXSwzNTpbMiwzM119LHsxODpbMiwzNF0s
Mjg6WzIsMzRdLDMwOlsyLDM0XSwzMTpbMiwzNF0sMzI6WzIsMzRdLDM1OlsyLDM0XX0sezE4Olsy
LDM1XSwyODpbMiwzNV0sMzA6WzIsMzVdLDMxOlsyLDM1XSwzMjpbMiwzNV0sMzU6WzIsMzVdfSx7
MTg6WzIsMzhdLDM1OlsyLDM4XX0sezE4OlsyLDQ3XSwyODpbMiw0N10sMzA6WzIsNDddLDMxOlsy
LDQ3XSwzMjpbMiw0N10sMzU6WzIsNDddLDM2OlsxLDYxXSwzOTpbMiw0N119LHszNTpbMSw2Ml19
LHs1OlsyLDEwXSwxNDpbMiwxMF0sMTU6WzIsMTBdLDE2OlsyLDEwXSwxOTpbMiwxMF0sMjA6WzIs
MTBdLDIyOlsyLDEwXSwyMzpbMiwxMF0sMjQ6WzIsMTBdfSx7MjE6NjMsMzU6WzEsMjddLDM4OjI2
fSx7NTpbMiwxMV0sMTQ6WzIsMTFdLDE1OlsyLDExXSwxNjpbMiwxMV0sMTk6WzIsMTFdLDIwOlsy
LDExXSwyMjpbMiwxMV0sMjM6WzIsMTFdLDI0OlsyLDExXX0sezE0OlsyLDE2XSwxNTpbMiwxNl0s
MTY6WzIsMTZdLDE5OlsyLDE2XSwyMDpbMiwxNl0sMjI6WzIsMTZdLDIzOlsyLDE2XSwyNDpbMiwx
Nl19LHs1OlsyLDE5XSwxNDpbMiwxOV0sMTU6WzIsMTldLDE2OlsyLDE5XSwxOTpbMiwxOV0sMjA6
WzIsMTldLDIyOlsyLDE5XSwyMzpbMiwxOV0sMjQ6WzIsMTldfSx7NTpbMiwyMF0sMTQ6WzIsMjBd
LDE1OlsyLDIwXSwxNjpbMiwyMF0sMTk6WzIsMjBdLDIwOlsyLDIwXSwyMjpbMiwyMF0sMjM6WzIs
MjBdLDI0OlsyLDIwXX0sezU6WzIsMjFdLDE0OlsyLDIxXSwxNTpbMiwyMV0sMTY6WzIsMjFdLDE5
OlsyLDIxXSwyMDpbMiwyMV0sMjI6WzIsMjFdLDIzOlsyLDIxXSwyNDpbMiwyMV19LHsxODpbMSw2
NF19LHsxODpbMiwyNF19LHsxODpbMiwyOV0sMjg6WzIsMjldLDMwOlsyLDI5XSwzMTpbMiwyOV0s
MzI6WzIsMjldLDM1OlsyLDI5XX0sezE4OlsyLDM3XSwzNTpbMiwzN119LHszNjpbMSw2MV19LHsy
MTo2NSwyODpbMSw2OV0sMzA6WzEsNjZdLDMxOlsxLDY3XSwzMjpbMSw2OF0sMzU6WzEsMjddLDM4
OjI2fSx7MTg6WzIsNDZdLDI4OlsyLDQ2XSwzMDpbMiw0Nl0sMzE6WzIsNDZdLDMyOlsyLDQ2XSwz
NTpbMiw0Nl0sMzk6WzIsNDZdfSx7MTg6WzEsNzBdfSx7NTpbMiwyMl0sMTQ6WzIsMjJdLDE1Olsy
LDIyXSwxNjpbMiwyMl0sMTk6WzIsMjJdLDIwOlsyLDIyXSwyMjpbMiwyMl0sMjM6WzIsMjJdLDI0
OlsyLDIyXX0sezE4OlsyLDM5XSwzNTpbMiwzOV19LHsxODpbMiw0MF0sMzU6WzIsNDBdfSx7MTg6
WzIsNDFdLDM1OlsyLDQxXX0sezE4OlsyLDQyXSwzNTpbMiw0Ml19LHsxODpbMiw0M10sMzU6WzIs
NDNdfSx7NTpbMiwxOF0sMTQ6WzIsMThdLDE1OlsyLDE4XSwxNjpbMiwxOF0sMTk6WzIsMThdLDIw
OlsyLDE4XSwyMjpbMiwxOF0sMjM6WzIsMThdLDI0OlsyLDE4XX1dLAotZGVmYXVsdEFjdGlvbnM6
IHsxNzpbMiwxXSwyNTpbMiwyOF0sMzg6WzIsMjZdLDU3OlsyLDI0XX0sCi1wYXJzZUVycm9yOiBm
dW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkgewotICAgIHRocm93IG5ldyBFcnJvcihzdHIp
OwotfSwKLXBhcnNlOiBmdW5jdGlvbiBwYXJzZShpbnB1dCkgewotICAgIHZhciBzZWxmID0gdGhp
cywgc3RhY2sgPSBbMF0sIHZzdGFjayA9IFtudWxsXSwgbHN0YWNrID0gW10sIHRhYmxlID0gdGhp
cy50YWJsZSwgeXl0ZXh0ID0gIiIsIHl5bGluZW5vID0gMCwgeXlsZW5nID0gMCwgcmVjb3Zlcmlu
ZyA9IDAsIFRFUlJPUiA9IDIsIEVPRiA9IDE7Ci0gICAgdGhpcy5sZXhlci5zZXRJbnB1dChpbnB1
dCk7Ci0gICAgdGhpcy5sZXhlci55eSA9IHRoaXMueXk7Ci0gICAgdGhpcy55eS5sZXhlciA9IHRo
aXMubGV4ZXI7Ci0gICAgdGhpcy55eS5wYXJzZXIgPSB0aGlzOwotICAgIGlmICh0eXBlb2YgdGhp
cy5sZXhlci55eWxsb2MgPT0gInVuZGVmaW5lZCIpCi0gICAgICAgIHRoaXMubGV4ZXIueXlsbG9j
ID0ge307Ci0gICAgdmFyIHl5bG9jID0gdGhpcy5sZXhlci55eWxsb2M7Ci0gICAgbHN0YWNrLnB1
c2goeXlsb2MpOwotICAgIHZhciByYW5nZXMgPSB0aGlzLmxleGVyLm9wdGlvbnMgJiYgdGhpcy5s
ZXhlci5vcHRpb25zLnJhbmdlczsKLSAgICBpZiAodHlwZW9mIHRoaXMueXkucGFyc2VFcnJvciA9
PT0gImZ1bmN0aW9uIikKLSAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gdGhpcy55eS5wYXJzZUVy
cm9yOwotICAgIGZ1bmN0aW9uIHBvcFN0YWNrKG4pIHsKLSAgICAgICAgc3RhY2subGVuZ3RoID0g
c3RhY2subGVuZ3RoIC0gMiAqIG47Ci0gICAgICAgIHZzdGFjay5sZW5ndGggPSB2c3RhY2subGVu
Z3RoIC0gbjsKLSAgICAgICAgbHN0YWNrLmxlbmd0aCA9IGxzdGFjay5sZW5ndGggLSBuOwotICAg
IH0KLSAgICBmdW5jdGlvbiBsZXgoKSB7Ci0gICAgICAgIHZhciB0b2tlbjsKLSAgICAgICAgdG9r
ZW4gPSBzZWxmLmxleGVyLmxleCgpIHx8IDE7Ci0gICAgICAgIGlmICh0eXBlb2YgdG9rZW4gIT09
ICJudW1iZXIiKSB7Ci0gICAgICAgICAgICB0b2tlbiA9IHNlbGYuc3ltYm9sc19bdG9rZW5dIHx8
IHRva2VuOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b2tlbjsKLSAgICB9Ci0gICAgdmFy
IHN5bWJvbCwgcHJlRXJyb3JTeW1ib2wsIHN0YXRlLCBhY3Rpb24sIGEsIHIsIHl5dmFsID0ge30s
IHAsIGxlbiwgbmV3U3RhdGUsIGV4cGVjdGVkOwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAg
IHN0YXRlID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07Ci0gICAgICAgIGlmICh0aGlzLmRlZmF1
bHRBY3Rpb25zW3N0YXRlXSkgewotICAgICAgICAgICAgYWN0aW9uID0gdGhpcy5kZWZhdWx0QWN0
aW9uc1tzdGF0ZV07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoc3ltYm9sID09
PSBudWxsIHx8IHR5cGVvZiBzeW1ib2wgPT0gInVuZGVmaW5lZCIpIHsKLSAgICAgICAgICAgICAg
ICBzeW1ib2wgPSBsZXgoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFjdGlvbiA9IHRh
YmxlW3N0YXRlXSAmJiB0YWJsZVtzdGF0ZV1bc3ltYm9sXTsKLSAgICAgICAgfQotICAgICAgICBp
ZiAodHlwZW9mIGFjdGlvbiA9PT0gInVuZGVmaW5lZCIgfHwgIWFjdGlvbi5sZW5ndGggfHwgIWFj
dGlvblswXSkgewotICAgICAgICAgICAgdmFyIGVyclN0ciA9ICIiOwotICAgICAgICAgICAgaWYg
KCFyZWNvdmVyaW5nKSB7Ci0gICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBbXTsKLSAgICAgICAg
ICAgICAgICBmb3IgKHAgaW4gdGFibGVbc3RhdGVdKQotICAgICAgICAgICAgICAgICAgICBpZiAo
dGhpcy50ZXJtaW5hbHNfW3BdICYmIHAgPiAyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBl
eHBlY3RlZC5wdXNoKCInIiArIHRoaXMudGVybWluYWxzX1twXSArICInIik7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodGhpcy5sZXhlci5zaG93UG9zaXRpb24p
IHsKLSAgICAgICAgICAgICAgICAgICAgZXJyU3RyID0gIlBhcnNlIGVycm9yIG9uIGxpbmUgIiAr
ICh5eWxpbmVubyArIDEpICsgIjpcbiIgKyB0aGlzLmxleGVyLnNob3dQb3NpdGlvbigpICsgIlxu
RXhwZWN0aW5nICIgKyBleHBlY3RlZC5qb2luKCIsICIpICsgIiwgZ290ICciICsgKHRoaXMudGVy
bWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCkgKyAiJyI7Ci0gICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgZXJyU3RyID0gIlBhcnNlIGVycm9yIG9uIGxpbmUgIiAr
ICh5eWxpbmVubyArIDEpICsgIjogVW5leHBlY3RlZCAiICsgKHN5bWJvbCA9PSAxPyJlbmQgb2Yg
aW5wdXQiOiInIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgIiciKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdGhpcy5wYXJzZUVycm9yKGVyclN0
ciwge3RleHQ6IHRoaXMubGV4ZXIubWF0Y2gsIHRva2VuOiB0aGlzLnRlcm1pbmFsc19bc3ltYm9s
XSB8fCBzeW1ib2wsIGxpbmU6IHRoaXMubGV4ZXIueXlsaW5lbm8sIGxvYzogeXlsb2MsIGV4cGVj
dGVkOiBleHBlY3RlZH0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChh
Y3Rpb25bMF0gaW5zdGFuY2VvZiBBcnJheSAmJiBhY3Rpb24ubGVuZ3RoID4gMSkgewotICAgICAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3Nz
aWJsZSBhdCBzdGF0ZTogIiArIHN0YXRlICsgIiwgdG9rZW46ICIgKyBzeW1ib2wpOwotICAgICAg
ICB9Ci0gICAgICAgIHN3aXRjaCAoYWN0aW9uWzBdKSB7Ci0gICAgICAgIGNhc2UgMToKLSAgICAg
ICAgICAgIHN0YWNrLnB1c2goc3ltYm9sKTsKLSAgICAgICAgICAgIHZzdGFjay5wdXNoKHRoaXMu
bGV4ZXIueXl0ZXh0KTsKLSAgICAgICAgICAgIGxzdGFjay5wdXNoKHRoaXMubGV4ZXIueXlsbG9j
KTsKLSAgICAgICAgICAgIHN0YWNrLnB1c2goYWN0aW9uWzFdKTsKLSAgICAgICAgICAgIHN5bWJv
bCA9IG51bGw7Ci0gICAgICAgICAgICBpZiAoIXByZUVycm9yU3ltYm9sKSB7Ci0gICAgICAgICAg
ICAgICAgeXlsZW5nID0gdGhpcy5sZXhlci55eWxlbmc7Ci0gICAgICAgICAgICAgICAgeXl0ZXh0
ID0gdGhpcy5sZXhlci55eXRleHQ7Ci0gICAgICAgICAgICAgICAgeXlsaW5lbm8gPSB0aGlzLmxl
eGVyLnl5bGluZW5vOwotICAgICAgICAgICAgICAgIHl5bG9jID0gdGhpcy5sZXhlci55eWxsb2M7
Ci0gICAgICAgICAgICAgICAgaWYgKHJlY292ZXJpbmcgPiAwKQotICAgICAgICAgICAgICAgICAg
ICByZWNvdmVyaW5nLS07Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHN5
bWJvbCA9IHByZUVycm9yU3ltYm9sOwotICAgICAgICAgICAgICAgIHByZUVycm9yU3ltYm9sID0g
bnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI6
Ci0gICAgICAgICAgICBsZW4gPSB0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzFdOwotICAg
ICAgICAgICAgeXl2YWwuJCA9IHZzdGFja1t2c3RhY2subGVuZ3RoIC0gbGVuXTsKLSAgICAgICAg
ICAgIHl5dmFsLl8kID0ge2ZpcnN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8
fCAxKV0uZmlyc3RfbGluZSwgbGFzdF9saW5lOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLmxh
c3RfbGluZSwgZmlyc3RfY29sdW1uOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSld
LmZpcnN0X2NvbHVtbiwgbGFzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFz
dF9jb2x1bW59OwotICAgICAgICAgICAgaWYgKHJhbmdlcykgewotICAgICAgICAgICAgICAgIHl5
dmFsLl8kLnJhbmdlID0gW2xzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0ucmFuZ2Vb
MF0sIGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ucmFuZ2VbMV1dOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgciA9IHRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHl5dmFsLCB5eXRleHQsIHl5
bGVuZywgeXlsaW5lbm8sIHRoaXMueXksIGFjdGlvblsxXSwgdnN0YWNrLCBsc3RhY2spOwotICAg
ICAgICAgICAgaWYgKHR5cGVvZiByICE9PSAidW5kZWZpbmVkIikgewotICAgICAgICAgICAgICAg
IHJldHVybiByOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGxlbikgewotICAgICAg
ICAgICAgICAgIHN0YWNrID0gc3RhY2suc2xpY2UoMCwgLTEgKiBsZW4gKiAyKTsKLSAgICAgICAg
ICAgICAgICB2c3RhY2sgPSB2c3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pOwotICAgICAgICAgICAg
ICAgIGxzdGFjayA9IGxzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBzdGFjay5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW2FjdGlvblsxXV1bMF0pOwot
ICAgICAgICAgICAgdnN0YWNrLnB1c2goeXl2YWwuJCk7Ci0gICAgICAgICAgICBsc3RhY2sucHVz
aCh5eXZhbC5fJCk7Ci0gICAgICAgICAgICBuZXdTdGF0ZSA9IHRhYmxlW3N0YWNrW3N0YWNrLmxl
bmd0aCAtIDJdXVtzdGFja1tzdGFjay5sZW5ndGggLSAxXV07Ci0gICAgICAgICAgICBzdGFjay5w
dXNoKG5ld1N0YXRlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDM6Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLX07Ci0vKiBKaXNvbiBnZW5lcmF0ZWQgbGV4ZXIgKi8KLXZhciBsZXhlciA9IChmdW5jdGlv
bigpewotdmFyIGxleGVyID0gKHtFT0Y6MSwKLXBhcnNlRXJyb3I6ZnVuY3Rpb24gcGFyc2VFcnJv
cihzdHIsIGhhc2gpIHsKLSAgICAgICAgaWYgKHRoaXMueXkucGFyc2VyKSB7Ci0gICAgICAgICAg
ICB0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHN0ciwgaGFzaCk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Ioc3RyKTsKLSAgICAgICAgfQotICAgIH0sCi1z
ZXRJbnB1dDpmdW5jdGlvbiAoaW5wdXQpIHsKLSAgICAgICAgdGhpcy5faW5wdXQgPSBpbnB1dDsK
LSAgICAgICAgdGhpcy5fbW9yZSA9IHRoaXMuX2xlc3MgPSB0aGlzLmRvbmUgPSBmYWxzZTsKLSAg
ICAgICAgdGhpcy55eWxpbmVubyA9IHRoaXMueXlsZW5nID0gMDsKLSAgICAgICAgdGhpcy55eXRl
eHQgPSB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoID0gJyc7Ci0gICAgICAgIHRoaXMuY29uZGl0
aW9uU3RhY2sgPSBbJ0lOSVRJQUwnXTsKLSAgICAgICAgdGhpcy55eWxsb2MgPSB7Zmlyc3RfbGlu
ZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9OwotICAgICAgICBp
ZiAodGhpcy5vcHRpb25zLnJhbmdlcykgdGhpcy55eWxsb2MucmFuZ2UgPSBbMCwwXTsKLSAgICAg
ICAgdGhpcy5vZmZzZXQgPSAwOwotICAgICAgICByZXR1cm4gdGhpczsKLSAgICB9LAotaW5wdXQ6
ZnVuY3Rpb24gKCkgewotICAgICAgICB2YXIgY2ggPSB0aGlzLl9pbnB1dFswXTsKLSAgICAgICAg
dGhpcy55eXRleHQgKz0gY2g7Ci0gICAgICAgIHRoaXMueXlsZW5nKys7Ci0gICAgICAgIHRoaXMu
b2Zmc2V0Kys7Ci0gICAgICAgIHRoaXMubWF0Y2ggKz0gY2g7Ci0gICAgICAgIHRoaXMubWF0Y2hl
ZCArPSBjaDsKLSAgICAgICAgdmFyIGxpbmVzID0gY2gubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cp
OwotICAgICAgICBpZiAobGluZXMpIHsKLSAgICAgICAgICAgIHRoaXMueXlsaW5lbm8rKzsKLSAg
ICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfbGluZSsrOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKzsKLSAgICAgICAgfQotICAgICAgICBp
ZiAodGhpcy5vcHRpb25zLnJhbmdlcykgdGhpcy55eWxsb2MucmFuZ2VbMV0rKzsKLQotICAgICAg
ICB0aGlzLl9pbnB1dCA9IHRoaXMuX2lucHV0LnNsaWNlKDEpOwotICAgICAgICByZXR1cm4gY2g7
Ci0gICAgfSwKLXVucHV0OmZ1bmN0aW9uIChjaCkgewotICAgICAgICB2YXIgbGVuID0gY2gubGVu
Z3RoOwotICAgICAgICB2YXIgbGluZXMgPSBjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpOwotCi0g
ICAgICAgIHRoaXMuX2lucHV0ID0gY2ggKyB0aGlzLl9pbnB1dDsKLSAgICAgICAgdGhpcy55eXRl
eHQgPSB0aGlzLnl5dGV4dC5zdWJzdHIoMCwgdGhpcy55eXRleHQubGVuZ3RoLWxlbi0xKTsKLSAg
ICAgICAgLy90aGlzLnl5bGVuZyAtPSBsZW47Ci0gICAgICAgIHRoaXMub2Zmc2V0IC09IGxlbjsK
LSAgICAgICAgdmFyIG9sZExpbmVzID0gdGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cp
OwotICAgICAgICB0aGlzLm1hdGNoID0gdGhpcy5tYXRjaC5zdWJzdHIoMCwgdGhpcy5tYXRjaC5s
ZW5ndGgtMSk7Ci0gICAgICAgIHRoaXMubWF0Y2hlZCA9IHRoaXMubWF0Y2hlZC5zdWJzdHIoMCwg
dGhpcy5tYXRjaGVkLmxlbmd0aC0xKTsKLQotICAgICAgICBpZiAobGluZXMubGVuZ3RoLTEpIHRo
aXMueXlsaW5lbm8gLT0gbGluZXMubGVuZ3RoLTE7Ci0gICAgICAgIHZhciByID0gdGhpcy55eWxs
b2MucmFuZ2U7Ci0KLSAgICAgICAgdGhpcy55eWxsb2MgPSB7Zmlyc3RfbGluZTogdGhpcy55eWxs
b2MuZmlyc3RfbGluZSwKLSAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMueXlsaW5lbm8rMSwKLSAg
ICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiwKLSAgICAgICAg
ICBsYXN0X2NvbHVtbjogbGluZXMgPwotICAgICAgICAgICAgICAobGluZXMubGVuZ3RoID09PSBv
bGRMaW5lcy5sZW5ndGggPyB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4gOiAwKSArIG9sZExpbmVz
W29sZExpbmVzLmxlbmd0aCAtIGxpbmVzLmxlbmd0aF0ubGVuZ3RoIC0gbGluZXNbMF0ubGVuZ3Ro
OgotICAgICAgICAgICAgICB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4gLSBsZW4KLSAgICAgICAg
ICB9OwotCi0gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7Ci0gICAgICAgICAgICB0
aGlzLnl5bGxvYy5yYW5nZSA9IFtyWzBdLCByWzBdICsgdGhpcy55eWxlbmcgLSBsZW5dOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiB0aGlzOwotICAgIH0sCi1tb3JlOmZ1bmN0aW9uICgpIHsK
LSAgICAgICAgdGhpcy5fbW9yZSA9IHRydWU7Ci0gICAgICAgIHJldHVybiB0aGlzOwotICAgIH0s
Ci1sZXNzOmZ1bmN0aW9uIChuKSB7Ci0gICAgICAgIHRoaXMudW5wdXQodGhpcy5tYXRjaC5zbGlj
ZShuKSk7Ci0gICAgfSwKLXBhc3RJbnB1dDpmdW5jdGlvbiAoKSB7Ci0gICAgICAgIHZhciBwYXN0
ID0gdGhpcy5tYXRjaGVkLnN1YnN0cigwLCB0aGlzLm1hdGNoZWQubGVuZ3RoIC0gdGhpcy5tYXRj
aC5sZW5ndGgpOwotICAgICAgICByZXR1cm4gKHBhc3QubGVuZ3RoID4gMjAgPyAnLi4uJzonJykg
KyBwYXN0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csICIiKTsKLSAgICB9LAotdXBjb21pbmdJ
bnB1dDpmdW5jdGlvbiAoKSB7Ci0gICAgICAgIHZhciBuZXh0ID0gdGhpcy5tYXRjaDsKLSAgICAg
ICAgaWYgKG5leHQubGVuZ3RoIDwgMjApIHsKLSAgICAgICAgICAgIG5leHQgKz0gdGhpcy5faW5w
dXQuc3Vic3RyKDAsIDIwLW5leHQubGVuZ3RoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
KG5leHQuc3Vic3RyKDAsMjApKyhuZXh0Lmxlbmd0aCA+IDIwID8gJy4uLic6JycpKS5yZXBsYWNl
KC9cbi9nLCAiIik7Ci0gICAgfSwKLXNob3dQb3NpdGlvbjpmdW5jdGlvbiAoKSB7Ci0gICAgICAg
IHZhciBwcmUgPSB0aGlzLnBhc3RJbnB1dCgpOwotICAgICAgICB2YXIgYyA9IG5ldyBBcnJheShw
cmUubGVuZ3RoICsgMSkuam9pbigiLSIpOwotICAgICAgICByZXR1cm4gcHJlICsgdGhpcy51cGNv
bWluZ0lucHV0KCkgKyAiXG4iICsgYysiXiI7Ci0gICAgfSwKLW5leHQ6ZnVuY3Rpb24gKCkgewot
ICAgICAgICBpZiAodGhpcy5kb25lKSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKCF0aGlzLl9pbnB1dCkgdGhpcy5kb25lID0gdHJ1ZTsKLQot
ICAgICAgICB2YXIgdG9rZW4sCi0gICAgICAgICAgICBtYXRjaCwKLSAgICAgICAgICAgIHRlbXBN
YXRjaCwKLSAgICAgICAgICAgIGluZGV4LAotICAgICAgICAgICAgY29sLAotICAgICAgICAgICAg
bGluZXM7Ci0gICAgICAgIGlmICghdGhpcy5fbW9yZSkgewotICAgICAgICAgICAgdGhpcy55eXRl
eHQgPSAnJzsKLSAgICAgICAgICAgIHRoaXMubWF0Y2ggPSAnJzsKLSAgICAgICAgfQotICAgICAg
ICB2YXIgcnVsZXMgPSB0aGlzLl9jdXJyZW50UnVsZXMoKTsKLSAgICAgICAgZm9yICh2YXIgaT0w
O2kgPCBydWxlcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgdGVtcE1hdGNoID0gdGhpcy5f
aW5wdXQubWF0Y2godGhpcy5ydWxlc1tydWxlc1tpXV0pOwotICAgICAgICAgICAgaWYgKHRlbXBN
YXRjaCAmJiAoIW1hdGNoIHx8IHRlbXBNYXRjaFswXS5sZW5ndGggPiBtYXRjaFswXS5sZW5ndGgp
KSB7Ci0gICAgICAgICAgICAgICAgbWF0Y2ggPSB0ZW1wTWF0Y2g7Ci0gICAgICAgICAgICAgICAg
aW5kZXggPSBpOwotICAgICAgICAgICAgICAgIGlmICghdGhpcy5vcHRpb25zLmZsZXgpIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChtYXRjaCkgewotICAgICAg
ICAgICAgbGluZXMgPSBtYXRjaFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk7Ci0gICAgICAg
ICAgICBpZiAobGluZXMpIHRoaXMueXlsaW5lbm8gKz0gbGluZXMubGVuZ3RoOwotICAgICAgICAg
ICAgdGhpcy55eWxsb2MgPSB7Zmlyc3RfbGluZTogdGhpcy55eWxsb2MubGFzdF9saW5lLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vKzEsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29s
dW1uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9jb2x1bW46IGxpbmVzID8gbGlu
ZXNbbGluZXMubGVuZ3RoLTFdLmxlbmd0aC1saW5lc1tsaW5lcy5sZW5ndGgtMV0ubWF0Y2goL1xy
P1xuPy8pWzBdLmxlbmd0aCA6IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uICsgbWF0Y2hbMF0ubGVu
Z3RofTsKLSAgICAgICAgICAgIHRoaXMueXl0ZXh0ICs9IG1hdGNoWzBdOwotICAgICAgICAgICAg
dGhpcy5tYXRjaCArPSBtYXRjaFswXTsKLSAgICAgICAgICAgIHRoaXMubWF0Y2hlcyA9IG1hdGNo
OwotICAgICAgICAgICAgdGhpcy55eWxlbmcgPSB0aGlzLnl5dGV4dC5sZW5ndGg7Ci0gICAgICAg
ICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykgewotICAgICAgICAgICAgICAgIHRoaXMueXls
bG9jLnJhbmdlID0gW3RoaXMub2Zmc2V0LCB0aGlzLm9mZnNldCArPSB0aGlzLnl5bGVuZ107Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB0aGlzLl9tb3JlID0gZmFsc2U7Ci0gICAgICAgICAg
ICB0aGlzLl9pbnB1dCA9IHRoaXMuX2lucHV0LnNsaWNlKG1hdGNoWzBdLmxlbmd0aCk7Ci0gICAg
ICAgICAgICB0aGlzLm1hdGNoZWQgKz0gbWF0Y2hbMF07Ci0gICAgICAgICAgICB0b2tlbiA9IHRo
aXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsIHRoaXMueXksIHRoaXMsIHJ1bGVzW2luZGV4XSx0
aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKTsKLSAgICAg
ICAgICAgIGlmICh0aGlzLmRvbmUgJiYgdGhpcy5faW5wdXQpIHRoaXMuZG9uZSA9IGZhbHNlOwot
ICAgICAgICAgICAgaWYgKHRva2VuKSByZXR1cm4gdG9rZW47Ci0gICAgICAgICAgICBlbHNlIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAodGhpcy5faW5wdXQgPT09ICIiKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gdGhpcy5FT0Y7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBy
ZXR1cm4gdGhpcy5wYXJzZUVycm9yKCdMZXhpY2FsIGVycm9yIG9uIGxpbmUgJysodGhpcy55eWxp
bmVubysxKSsnLiBVbnJlY29nbml6ZWQgdGV4dC5cbicrdGhpcy5zaG93UG9zaXRpb24oKSwKLSAg
ICAgICAgICAgICAgICAgICAge3RleHQ6ICIiLCB0b2tlbjogbnVsbCwgbGluZTogdGhpcy55eWxp
bmVub30pOwotICAgICAgICB9Ci0gICAgfSwKLWxleDpmdW5jdGlvbiBsZXgoKSB7Ci0gICAgICAg
IHZhciByID0gdGhpcy5uZXh0KCk7Ci0gICAgICAgIGlmICh0eXBlb2YgciAhPT0gJ3VuZGVmaW5l
ZCcpIHsKLSAgICAgICAgICAgIHJldHVybiByOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgcmV0dXJuIHRoaXMubGV4KCk7Ci0gICAgICAgIH0KLSAgICB9LAotYmVnaW46ZnVuY3Rpb24g
YmVnaW4oY29uZGl0aW9uKSB7Ci0gICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sucHVzaChjb25k
aXRpb24pOwotICAgIH0sCi1wb3BTdGF0ZTpmdW5jdGlvbiBwb3BTdGF0ZSgpIHsKLSAgICAgICAg
cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk7Ci0gICAgfSwKLV9jdXJyZW50UnVsZXM6
ZnVuY3Rpb24gX2N1cnJlbnRSdWxlcygpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9u
c1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxl
czsKLSAgICB9LAotdG9wU3RhdGU6ZnVuY3Rpb24gKCkgewotICAgICAgICByZXR1cm4gdGhpcy5j
b25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0yXTsKLSAgICB9LAotcHVz
aFN0YXRlOmZ1bmN0aW9uIGJlZ2luKGNvbmRpdGlvbikgewotICAgICAgICB0aGlzLmJlZ2luKGNv
bmRpdGlvbik7Ci0gICAgfX0pOwotbGV4ZXIub3B0aW9ucyA9IHt9OwotbGV4ZXIucGVyZm9ybUFj
dGlvbiA9IGZ1bmN0aW9uIGFub255bW91cyh5eSx5eV8sJGF2b2lkaW5nX25hbWVfY29sbGlzaW9u
cyxZWV9TVEFSVCkgewotCi12YXIgWVlTVEFURT1ZWV9TVEFSVAotc3dpdGNoKCRhdm9pZGluZ19u
YW1lX2NvbGxpc2lvbnMpIHsKLWNhc2UgMDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYoeXlfLnl5dGV4dC5zbGljZSgtMSkgIT09ICJcXCIpIHRoaXMuYmVnaW4oIm11Iik7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHl5Xy55eXRleHQuc2xpY2Uo
LTEpID09PSAiXFwiKSB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5zdWJzdHIoMCx5eV8ueXlsZW5n
LTEpLCB0aGlzLmJlZ2luKCJlbXUiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYoeXlfLnl5dGV4dCkgcmV0dXJuIDE0OwotCi1icmVhazsKLWNhc2UgMTogcmV0dXJuIDE0
OwotYnJlYWs7Ci1jYXNlIDI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
KHl5Xy55eXRleHQuc2xpY2UoLTEpICE9PSAiXFwiKSB0aGlzLnBvcFN0YXRlKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHl5Xy55eXRleHQuc2xpY2UoLTEpID09PSAi
XFwiKSB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5zdWJzdHIoMCx5eV8ueXlsZW5nLTEpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTQ7Ci0KLWJyZWFrOwotY2Fz
ZSAzOiB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5zdWJzdHIoMCwgeXlfLnl5bGVuZy00KTsgdGhp
cy5wb3BTdGF0ZSgpOyByZXR1cm4gMTU7Ci1icmVhazsKLWNhc2UgNDogdGhpcy5iZWdpbigicGFy
Iik7IHJldHVybiAyNDsKLWJyZWFrOwotY2FzZSA1OiByZXR1cm4gMTY7Ci1icmVhazsKLWNhc2Ug
NjogcmV0dXJuIDIwOwotYnJlYWs7Ci1jYXNlIDc6IHJldHVybiAxOTsKLWJyZWFrOwotY2FzZSA4
OiByZXR1cm4gMTk7Ci1icmVhazsKLWNhc2UgOTogcmV0dXJuIDIzOwotYnJlYWs7Ci1jYXNlIDEw
OiByZXR1cm4gMjM7Ci1icmVhazsKLWNhc2UgMTE6IHRoaXMucG9wU3RhdGUoKTsgdGhpcy5iZWdp
bignY29tJyk7Ci1icmVhazsKLWNhc2UgMTI6IHl5Xy55eXRleHQgPSB5eV8ueXl0ZXh0LnN1YnN0
cigzLHl5Xy55eWxlbmctNSk7IHRoaXMucG9wU3RhdGUoKTsgcmV0dXJuIDE1OwotYnJlYWs7Ci1j
YXNlIDEzOiByZXR1cm4gMjI7Ci1icmVhazsKLWNhc2UgMTQ6IHJldHVybiAzNjsKLWJyZWFrOwot
Y2FzZSAxNTogcmV0dXJuIDM1OwotYnJlYWs7Ci1jYXNlIDE2OiByZXR1cm4gMzU7Ci1icmVhazsK
LWNhc2UgMTc6IHJldHVybiAzOTsKLWJyZWFrOwotY2FzZSAxODogLyppZ25vcmUgd2hpdGVzcGFj
ZSovCi1icmVhazsKLWNhc2UgMTk6IHRoaXMucG9wU3RhdGUoKTsgcmV0dXJuIDE4OwotYnJlYWs7
Ci1jYXNlIDIwOiB0aGlzLnBvcFN0YXRlKCk7IHJldHVybiAxODsKLWJyZWFrOwotY2FzZSAyMTog
eXlfLnl5dGV4dCA9IHl5Xy55eXRleHQuc3Vic3RyKDEseXlfLnl5bGVuZy0yKS5yZXBsYWNlKC9c
XCIvZywnIicpOyByZXR1cm4gMzA7Ci1icmVhazsKLWNhc2UgMjI6IHl5Xy55eXRleHQgPSB5eV8u
eXl0ZXh0LnN1YnN0cigxLHl5Xy55eWxlbmctMikucmVwbGFjZSgvXFwnL2csIiciKTsgcmV0dXJu
IDMwOwotYnJlYWs7Ci1jYXNlIDIzOiB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5zdWJzdHIoMSk7
IHJldHVybiAyODsKLWJyZWFrOwotY2FzZSAyNDogcmV0dXJuIDMyOwotYnJlYWs7Ci1jYXNlIDI1
OiByZXR1cm4gMzI7Ci1icmVhazsKLWNhc2UgMjY6IHJldHVybiAzMTsKLWJyZWFrOwotY2FzZSAy
NzogcmV0dXJuIDM1OwotYnJlYWs7Ci1jYXNlIDI4OiB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5z
dWJzdHIoMSwgeXlfLnl5bGVuZy0yKTsgcmV0dXJuIDM1OwotYnJlYWs7Ci1jYXNlIDI5OiByZXR1
cm4gJ0lOVkFMSUQnOwotYnJlYWs7Ci1jYXNlIDMwOiAvKmlnbm9yZSB3aGl0ZXNwYWNlKi8KLWJy
ZWFrOwotY2FzZSAzMTogdGhpcy5wb3BTdGF0ZSgpOyByZXR1cm4gMzc7Ci1icmVhazsKLWNhc2Ug
MzI6IHJldHVybiA1OwotYnJlYWs7Ci19Ci19OwotbGV4ZXIucnVsZXMgPSBbL14oPzpbXlx4MDBd
Kj8oPz0oXHtceykpKS8sL14oPzpbXlx4MDBdKykvLC9eKD86W15ceDAwXXsyLH0/KD89KFx7XHt8
JCkpKS8sL14oPzpbXHNcU10qPy0tXH1cfSkvLC9eKD86XHtcez4pLywvXig/Olx7XHsjKS8sL14o
Pzpce1x7XC8pLywvXig/Olx7XHtcXikvLC9eKD86XHtce1xzKmVsc2VcYikvLC9eKD86XHtce1x7
KS8sL14oPzpce1x7JikvLC9eKD86XHtceyEtLSkvLC9eKD86XHtceyFbXHNcU10qP1x9XH0pLywv
Xig/Olx7XHspLywvXig/Oj0pLywvXig/OlwuKD89W30gXSkpLywvXig/OlwuXC4pLywvXig/Oltc
Ly5dKS8sL14oPzpccyspLywvXig/Olx9XH1cfSkvLC9eKD86XH1cfSkvLC9eKD86IihcXFsiXXxb
XiJdKSoiKS8sL14oPzonKFxcWyddfFteJ10pKicpLywvXig/OkBbYS16QS1aXSspLywvXig/OnRy
dWUoPz1bfVxzXSkpLywvXig/OmZhbHNlKD89W31cc10pKS8sL14oPzpbMC05XSsoPz1bfVxzXSkp
LywvXig/OlthLXpBLVowLTlfJC1dKyg/PVs9fVxzXC8uXSkpLywvXig/OlxbW15cXV0qXF0pLywv
Xig/Oi4pLywvXig/OlxzKykvLC9eKD86W2EtekEtWjAtOV8kLS9dKykvLC9eKD86JCkvXTsKLWxl
eGVyLmNvbmRpdGlvbnMgPSB7Im11Ijp7InJ1bGVzIjpbNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMs
MTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzJdLCJpbmNs
dXNpdmUiOmZhbHNlfSwiZW11Ijp7InJ1bGVzIjpbMl0sImluY2x1c2l2ZSI6ZmFsc2V9LCJjb20i
OnsicnVsZXMiOlszXSwiaW5jbHVzaXZlIjpmYWxzZX0sInBhciI6eyJydWxlcyI6WzMwLDMxXSwi
aW5jbHVzaXZlIjpmYWxzZX0sIklOSVRJQUwiOnsicnVsZXMiOlswLDEsMzJdLCJpbmNsdXNpdmUi
OnRydWV9fTsKLXJldHVybiBsZXhlcjt9KSgpCi1wYXJzZXIubGV4ZXIgPSBsZXhlcjsKLWZ1bmN0
aW9uIFBhcnNlciAoKSB7IHRoaXMueXkgPSB7fTsgfVBhcnNlci5wcm90b3R5cGUgPSBwYXJzZXI7
cGFyc2VyLlBhcnNlciA9IFBhcnNlcjsKLXJldHVybiBuZXcgUGFyc2VyOwotfSkoKTs7Ci0vLyBs
aWIvaGFuZGxlYmFycy9jb21waWxlci9iYXNlLmpzCi1IYW5kbGViYXJzLlBhcnNlciA9IGhhbmRs
ZWJhcnM7Ci0KLUhhbmRsZWJhcnMucGFyc2UgPSBmdW5jdGlvbihpbnB1dCkgewotCi0gIC8vIEp1
c3QgcmV0dXJuIGlmIGFuIGFscmVhZHktY29tcGlsZSBBU1Qgd2FzIHBhc3NlZCBpbi4KLSAgaWYo
aW5wdXQuY29uc3RydWN0b3IgPT09IEhhbmRsZWJhcnMuQVNULlByb2dyYW1Ob2RlKSB7IHJldHVy
biBpbnB1dDsgfQotCi0gIEhhbmRsZWJhcnMuUGFyc2VyLnl5ID0gSGFuZGxlYmFycy5BU1Q7Ci0g
IHJldHVybiBIYW5kbGViYXJzLlBhcnNlci5wYXJzZShpbnB1dCk7Ci19OwotCi1IYW5kbGViYXJz
LnByaW50ID0gZnVuY3Rpb24oYXN0KSB7Ci0gIHJldHVybiBuZXcgSGFuZGxlYmFycy5QcmludFZp
c2l0b3IoKS5hY2NlcHQoYXN0KTsKLX07OwotLy8gbGliL2hhbmRsZWJhcnMvY29tcGlsZXIvYXN0
LmpzCi0oZnVuY3Rpb24oKSB7Ci0KLSAgSGFuZGxlYmFycy5BU1QgPSB7fTsKLQotICBIYW5kbGVi
YXJzLkFTVC5Qcm9ncmFtTm9kZSA9IGZ1bmN0aW9uKHN0YXRlbWVudHMsIGludmVyc2UpIHsKLSAg
ICB0aGlzLnR5cGUgPSAicHJvZ3JhbSI7Ci0gICAgdGhpcy5zdGF0ZW1lbnRzID0gc3RhdGVtZW50
czsKLSAgICBpZihpbnZlcnNlKSB7IHRoaXMuaW52ZXJzZSA9IG5ldyBIYW5kbGViYXJzLkFTVC5Q
cm9ncmFtTm9kZShpbnZlcnNlKTsgfQotICB9OwotCi0gIEhhbmRsZWJhcnMuQVNULk11c3RhY2hl
Tm9kZSA9IGZ1bmN0aW9uKHJhd1BhcmFtcywgaGFzaCwgdW5lc2NhcGVkKSB7Ci0gICAgdGhpcy50
eXBlID0gIm11c3RhY2hlIjsKLSAgICB0aGlzLmVzY2FwZWQgPSAhdW5lc2NhcGVkOwotICAgIHRo
aXMuaGFzaCA9IGhhc2g7Ci0KLSAgICB2YXIgaWQgPSB0aGlzLmlkID0gcmF3UGFyYW1zWzBdOwot
ICAgIHZhciBwYXJhbXMgPSB0aGlzLnBhcmFtcyA9IHJhd1BhcmFtcy5zbGljZSgxKTsKLQotICAg
IC8vIGEgbXVzdGFjaGUgaXMgYW4gZWxpZ2libGUgaGVscGVyIGlmOgotICAgIC8vICogaXRzIGlk
IGlzIHNpbXBsZSAoYSBzaW5nbGUgcGFydCwgbm90IGB0aGlzYCBvciBgLi5gKQotICAgIHZhciBl
bGlnaWJsZUhlbHBlciA9IHRoaXMuZWxpZ2libGVIZWxwZXIgPSBpZC5pc1NpbXBsZTsKLQotICAg
IC8vIGEgbXVzdGFjaGUgaXMgZGVmaW5pdGVseSBhIGhlbHBlciBpZjoKLSAgICAvLyAqIGl0IGlz
IGFuIGVsaWdpYmxlIGhlbHBlciwgYW5kCi0gICAgLy8gKiBpdCBoYXMgYXQgbGVhc3Qgb25lIHBh
cmFtZXRlciBvciBoYXNoIHNlZ21lbnQKLSAgICB0aGlzLmlzSGVscGVyID0gZWxpZ2libGVIZWxw
ZXIgJiYgKHBhcmFtcy5sZW5ndGggfHwgaGFzaCk7Ci0KLSAgICAvLyBpZiBhIG11c3RhY2hlIGlz
IGFuIGVsaWdpYmxlIGhlbHBlciBidXQgbm90IGEgZGVmaW5pdGUKLSAgICAvLyBoZWxwZXIsIGl0
IGlzIGFtYmlndW91cywgYW5kIHdpbGwgYmUgcmVzb2x2ZWQgaW4gYSBsYXRlcgotICAgIC8vIHBh
c3Mgb3IgYXQgcnVudGltZS4KLSAgfTsKLQotICBIYW5kbGViYXJzLkFTVC5QYXJ0aWFsTm9kZSA9
IGZ1bmN0aW9uKHBhcnRpYWxOYW1lLCBjb250ZXh0KSB7Ci0gICAgdGhpcy50eXBlICAgICAgICAg
PSAicGFydGlhbCI7Ci0gICAgdGhpcy5wYXJ0aWFsTmFtZSAgPSBwYXJ0aWFsTmFtZTsKLSAgICB0
aGlzLmNvbnRleHQgICAgICA9IGNvbnRleHQ7Ci0gIH07Ci0KLSAgdmFyIHZlcmlmeU1hdGNoID0g
ZnVuY3Rpb24ob3BlbiwgY2xvc2UpIHsKLSAgICBpZihvcGVuLm9yaWdpbmFsICE9PSBjbG9zZS5v
cmlnaW5hbCkgewotICAgICAgdGhyb3cgbmV3IEhhbmRsZWJhcnMuRXhjZXB0aW9uKG9wZW4ub3Jp
Z2luYWwgKyAiIGRvZXNuJ3QgbWF0Y2ggIiArIGNsb3NlLm9yaWdpbmFsKTsKLSAgICB9Ci0gIH07
Ci0KLSAgSGFuZGxlYmFycy5BU1QuQmxvY2tOb2RlID0gZnVuY3Rpb24obXVzdGFjaGUsIHByb2dy
YW0sIGludmVyc2UsIGNsb3NlKSB7Ci0gICAgdmVyaWZ5TWF0Y2gobXVzdGFjaGUuaWQsIGNsb3Nl
KTsKLSAgICB0aGlzLnR5cGUgPSAiYmxvY2siOwotICAgIHRoaXMubXVzdGFjaGUgPSBtdXN0YWNo
ZTsKLSAgICB0aGlzLnByb2dyYW0gID0gcHJvZ3JhbTsKLSAgICB0aGlzLmludmVyc2UgID0gaW52
ZXJzZTsKLQotICAgIGlmICh0aGlzLmludmVyc2UgJiYgIXRoaXMucHJvZ3JhbSkgewotICAgICAg
dGhpcy5pc0ludmVyc2UgPSB0cnVlOwotICAgIH0KLSAgfTsKLQotICBIYW5kbGViYXJzLkFTVC5D
b250ZW50Tm9kZSA9IGZ1bmN0aW9uKHN0cmluZykgewotICAgIHRoaXMudHlwZSA9ICJjb250ZW50
IjsKLSAgICB0aGlzLnN0cmluZyA9IHN0cmluZzsKLSAgfTsKLQotICBIYW5kbGViYXJzLkFTVC5I
YXNoTm9kZSA9IGZ1bmN0aW9uKHBhaXJzKSB7Ci0gICAgdGhpcy50eXBlID0gImhhc2giOwotICAg
IHRoaXMucGFpcnMgPSBwYWlyczsKLSAgfTsKLQotICBIYW5kbGViYXJzLkFTVC5JZE5vZGUgPSBm
dW5jdGlvbihwYXJ0cykgewotICAgIHRoaXMudHlwZSA9ICJJRCI7Ci0gICAgdGhpcy5vcmlnaW5h
bCA9IHBhcnRzLmpvaW4oIi4iKTsKLQotICAgIHZhciBkaWcgPSBbXSwgZGVwdGggPSAwOwotCi0g
ICAgZm9yKHZhciBpPTAsbD1wYXJ0cy5sZW5ndGg7IGk8bDsgaSsrKSB7Ci0gICAgICB2YXIgcGFy
dCA9IHBhcnRzW2ldOwotCi0gICAgICBpZiAocGFydCA9PT0gIi4uIiB8fCBwYXJ0ID09PSAiLiIg
fHwgcGFydCA9PT0gInRoaXMiKSB7Ci0gICAgICAgIGlmIChkaWcubGVuZ3RoID4gMCkgeyB0aHJv
dyBuZXcgSGFuZGxlYmFycy5FeGNlcHRpb24oIkludmFsaWQgcGF0aDogIiArIHRoaXMub3JpZ2lu
YWwpOyB9Ci0gICAgICAgIGVsc2UgaWYgKHBhcnQgPT09ICIuLiIpIHsgZGVwdGgrKzsgfQotICAg
ICAgICBlbHNlIHsgdGhpcy5pc1Njb3BlZCA9IHRydWU7IH0KLSAgICAgIH0KLSAgICAgIGVsc2Ug
eyBkaWcucHVzaChwYXJ0KTsgfQotICAgIH0KLQotICAgIHRoaXMucGFydHMgICAgPSBkaWc7Ci0g
ICAgdGhpcy5zdHJpbmcgICA9IGRpZy5qb2luKCcuJyk7Ci0gICAgdGhpcy5kZXB0aCAgICA9IGRl
cHRoOwotCi0gICAgLy8gYW4gSUQgaXMgc2ltcGxlIGlmIGl0IG9ubHkgaGFzIG9uZSBwYXJ0LCBh
bmQgdGhhdCBwYXJ0IGlzIG5vdAotICAgIC8vIGAuLmAgb3IgYHRoaXNgLgotICAgIHRoaXMuaXNT
aW1wbGUgPSBwYXJ0cy5sZW5ndGggPT09IDEgJiYgIXRoaXMuaXNTY29wZWQgJiYgZGVwdGggPT09
IDA7Ci0KLSAgICB0aGlzLnN0cmluZ01vZGVWYWx1ZSA9IHRoaXMuc3RyaW5nOwotICB9OwotCi0g
IEhhbmRsZWJhcnMuQVNULlBhcnRpYWxOYW1lTm9kZSA9IGZ1bmN0aW9uKG5hbWUpIHsKLSAgICB0
aGlzLnR5cGUgPSAiUEFSVElBTF9OQU1FIjsKLSAgICB0aGlzLm5hbWUgPSBuYW1lOwotICB9Owot
Ci0gIEhhbmRsZWJhcnMuQVNULkRhdGFOb2RlID0gZnVuY3Rpb24oaWQpIHsKLSAgICB0aGlzLnR5
cGUgPSAiREFUQSI7Ci0gICAgdGhpcy5pZCA9IGlkOwotICB9OwotCi0gIEhhbmRsZWJhcnMuQVNU
LlN0cmluZ05vZGUgPSBmdW5jdGlvbihzdHJpbmcpIHsKLSAgICB0aGlzLnR5cGUgPSAiU1RSSU5H
IjsKLSAgICB0aGlzLnN0cmluZyA9IHN0cmluZzsKLSAgICB0aGlzLnN0cmluZ01vZGVWYWx1ZSA9
IHN0cmluZzsKLSAgfTsKLQotICBIYW5kbGViYXJzLkFTVC5JbnRlZ2VyTm9kZSA9IGZ1bmN0aW9u
KGludGVnZXIpIHsKLSAgICB0aGlzLnR5cGUgPSAiSU5URUdFUiI7Ci0gICAgdGhpcy5pbnRlZ2Vy
ID0gaW50ZWdlcjsKLSAgICB0aGlzLnN0cmluZ01vZGVWYWx1ZSA9IE51bWJlcihpbnRlZ2VyKTsK
LSAgfTsKLQotICBIYW5kbGViYXJzLkFTVC5Cb29sZWFuTm9kZSA9IGZ1bmN0aW9uKGJvb2wpIHsK
LSAgICB0aGlzLnR5cGUgPSAiQk9PTEVBTiI7Ci0gICAgdGhpcy5ib29sID0gYm9vbDsKLSAgICB0
aGlzLnN0cmluZ01vZGVWYWx1ZSA9IGJvb2wgPT09ICJ0cnVlIjsKLSAgfTsKLQotICBIYW5kbGVi
YXJzLkFTVC5Db21tZW50Tm9kZSA9IGZ1bmN0aW9uKGNvbW1lbnQpIHsKLSAgICB0aGlzLnR5cGUg
PSAiY29tbWVudCI7Ci0gICAgdGhpcy5jb21tZW50ID0gY29tbWVudDsKLSAgfTsKLQotfSkoKTs7
Ci0vLyBsaWIvaGFuZGxlYmFycy91dGlscy5qcwotCi12YXIgZXJyb3JQcm9wcyA9IFsnZGVzY3Jp
cHRpb24nLCAnZmlsZU5hbWUnLCAnbGluZU51bWJlcicsICdtZXNzYWdlJywgJ25hbWUnLCAnbnVt
YmVyJywgJ3N0YWNrJ107Ci0KLUhhbmRsZWJhcnMuRXhjZXB0aW9uID0gZnVuY3Rpb24obWVzc2Fn
ZSkgewotICB2YXIgdG1wID0gRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yLmFwcGx5KHRoaXMs
IGFyZ3VtZW50cyk7Ci0KLSAgLy8gVW5mb3J0dW5hdGVseSBlcnJvcnMgYXJlIG5vdCBlbnVtZXJh
YmxlIGluIENocm9tZSAoYXQgbGVhc3QpLCBzbyBgZm9yIHByb3AgaW4gdG1wYCBkb2Vzbid0IHdv
cmsuCi0gIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IGVycm9yUHJvcHMubGVuZ3RoOyBpZHgrKykg
ewotICAgIHRoaXNbZXJyb3JQcm9wc1tpZHhdXSA9IHRtcFtlcnJvclByb3BzW2lkeF1dOwotICB9
Ci19OwotSGFuZGxlYmFycy5FeGNlcHRpb24ucHJvdG90eXBlID0gbmV3IEVycm9yKCk7Ci0KLS8v
IEJ1aWxkIG91dCBvdXIgYmFzaWMgU2FmZVN0cmluZyB0eXBlCi1IYW5kbGViYXJzLlNhZmVTdHJp
bmcgPSBmdW5jdGlvbihzdHJpbmcpIHsKLSAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7Ci19OwotSGFu
ZGxlYmFycy5TYWZlU3RyaW5nLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkgewotICBy
ZXR1cm4gdGhpcy5zdHJpbmcudG9TdHJpbmcoKTsKLX07Ci0KLShmdW5jdGlvbigpIHsKLSAgdmFy
IGVzY2FwZSA9IHsKLSAgICAiJiI6ICImYW1wOyIsCi0gICAgIjwiOiAiJmx0OyIsCi0gICAgIj4i
OiAiJmd0OyIsCi0gICAgJyInOiAiJnF1b3Q7IiwKLSAgICAiJyI6ICImI3gyNzsiLAotICAgICJg
IjogIiYjeDYwOyIKLSAgfTsKLQotICB2YXIgYmFkQ2hhcnMgPSAvWyY8PiInYF0vZzsKLSAgdmFy
IHBvc3NpYmxlID0gL1smPD4iJ2BdLzsKLQotICB2YXIgZXNjYXBlQ2hhciA9IGZ1bmN0aW9uKGNo
cikgewotICAgIHJldHVybiBlc2NhcGVbY2hyXSB8fCAiJmFtcDsiOwotICB9OwotCi0gIEhhbmRs
ZWJhcnMuVXRpbHMgPSB7Ci0gICAgZXNjYXBlRXhwcmVzc2lvbjogZnVuY3Rpb24oc3RyaW5nKSB7
Ci0gICAgICAvLyBkb24ndCBlc2NhcGUgU2FmZVN0cmluZ3MsIHNpbmNlIHRoZXkncmUgYWxyZWFk
eSBzYWZlCi0gICAgICBpZiAoc3RyaW5nIGluc3RhbmNlb2YgSGFuZGxlYmFycy5TYWZlU3RyaW5n
KSB7Ci0gICAgICAgIHJldHVybiBzdHJpbmcudG9TdHJpbmcoKTsKLSAgICAgIH0gZWxzZSBpZiAo
c3RyaW5nID09IG51bGwgfHwgc3RyaW5nID09PSBmYWxzZSkgewotICAgICAgICByZXR1cm4gIiI7
Ci0gICAgICB9Ci0KLSAgICAgIGlmKCFwb3NzaWJsZS50ZXN0KHN0cmluZykpIHsgcmV0dXJuIHN0
cmluZzsgfQotICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKGJhZENoYXJzLCBlc2NhcGVDaGFy
KTsKLSAgICB9LAotCi0gICAgaXNFbXB0eTogZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgIGlmICgh
dmFsdWUgJiYgdmFsdWUgIT09IDApIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9IGVs
c2UgaWYoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gIltvYmplY3Qg
QXJyYXldIiAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotICB9
OwotfSkoKTs7Ci0vLyBsaWIvaGFuZGxlYmFycy9jb21waWxlci9jb21waWxlci5qcwotCi0vKmpz
aGludCBlcW51bGw6dHJ1ZSovCi1IYW5kbGViYXJzLkNvbXBpbGVyID0gZnVuY3Rpb24oKSB7fTsK
LUhhbmRsZWJhcnMuSmF2YVNjcmlwdENvbXBpbGVyID0gZnVuY3Rpb24oKSB7fTsKLQotKGZ1bmN0
aW9uKENvbXBpbGVyLCBKYXZhU2NyaXB0Q29tcGlsZXIpIHsKLSAgLy8gdGhlIGZvdW5kSGVscGVy
IHJlZ2lzdGVyIHdpbGwgZGlzYW1iaWd1YXRlIGhlbHBlciBsb29rdXAgZnJvbSBmaW5kaW5nIGEK
LSAgLy8gZnVuY3Rpb24gaW4gYSBjb250ZXh0LiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgbXVzdGFj
aGUgY29tcGF0aWJpbGl0eSwgd2hpY2gKLSAgLy8gcmVxdWlyZXMgdGhhdCBjb250ZXh0IGZ1bmN0
aW9ucyBpbiBibG9ja3MgYXJlIGV2YWx1YXRlZCBieSBibG9ja0hlbHBlck1pc3NpbmcsCi0gIC8v
IGFuZCB0aGVuIHByb2NlZWQgYXMgaWYgdGhlIHJlc3VsdGluZyB2YWx1ZSB3YXMgcHJvdmlkZWQg
dG8gYmxvY2tIZWxwZXJNaXNzaW5nLgotCi0gIENvbXBpbGVyLnByb3RvdHlwZSA9IHsKLSAgICBj
b21waWxlcjogQ29tcGlsZXIsCi0KLSAgICBkaXNhc3NlbWJsZTogZnVuY3Rpb24oKSB7Ci0gICAg
ICB2YXIgb3Bjb2RlcyA9IHRoaXMub3Bjb2Rlcywgb3Bjb2RlLCBvdXQgPSBbXSwgcGFyYW1zLCBw
YXJhbTsKLQotICAgICAgZm9yICh2YXIgaT0wLCBsPW9wY29kZXMubGVuZ3RoOyBpPGw7IGkrKykg
ewotICAgICAgICBvcGNvZGUgPSBvcGNvZGVzW2ldOwotCi0gICAgICAgIGlmIChvcGNvZGUub3Bj
b2RlID09PSAnREVDTEFSRScpIHsKLSAgICAgICAgICBvdXQucHVzaCgiREVDTEFSRSAiICsgb3Bj
b2RlLm5hbWUgKyAiPSIgKyBvcGNvZGUudmFsdWUpOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgIHBhcmFtcyA9IFtdOwotICAgICAgICAgIGZvciAodmFyIGo9MDsgajxvcGNvZGUuYXJncy5s
ZW5ndGg7IGorKykgewotICAgICAgICAgICAgcGFyYW0gPSBvcGNvZGUuYXJnc1tqXTsKLSAgICAg
ICAgICAgIGlmICh0eXBlb2YgcGFyYW0gPT09ICJzdHJpbmciKSB7Ci0gICAgICAgICAgICAgIHBh
cmFtID0gIlwiIiArIHBhcmFtLnJlcGxhY2UoIlxuIiwgIlxcbiIpICsgIlwiIjsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHBhcmFtcy5wdXNoKHBhcmFtKTsKLSAgICAgICAgICB9Ci0gICAg
ICAgICAgb3V0LnB1c2gob3Bjb2RlLm9wY29kZSArICIgIiArIHBhcmFtcy5qb2luKCIgIikpOwot
ICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiBvdXQuam9pbigiXG4iKTsKLSAgICB9
LAotICAgIGVxdWFsczogZnVuY3Rpb24ob3RoZXIpIHsKLSAgICAgIHZhciBsZW4gPSB0aGlzLm9w
Y29kZXMubGVuZ3RoOwotICAgICAgaWYgKG90aGVyLm9wY29kZXMubGVuZ3RoICE9PSBsZW4pIHsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotCi0gICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgIHZhciBvcGNvZGUgPSB0aGlzLm9wY29kZXNbaV0sCi0g
ICAgICAgICAgICBvdGhlck9wY29kZSA9IG90aGVyLm9wY29kZXNbaV07Ci0gICAgICAgIGlmIChv
cGNvZGUub3Bjb2RlICE9PSBvdGhlck9wY29kZS5vcGNvZGUgfHwgb3Bjb2RlLmFyZ3MubGVuZ3Ro
ICE9PSBvdGhlck9wY29kZS5hcmdzLmxlbmd0aCkgewotICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG9wY29kZS5hcmdzLmxlbmd0
aDsgaisrKSB7Ci0gICAgICAgICAgaWYgKG9wY29kZS5hcmdzW2pdICE9PSBvdGhlck9wY29kZS5h
cmdzW2pdKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgZ3VpZDogMCwK
LQotICAgIGNvbXBpbGU6IGZ1bmN0aW9uKHByb2dyYW0sIG9wdGlvbnMpIHsKLSAgICAgIHRoaXMu
Y2hpbGRyZW4gPSBbXTsKLSAgICAgIHRoaXMuZGVwdGhzID0ge2xpc3Q6IFtdfTsKLSAgICAgIHRo
aXMub3B0aW9ucyA9IG9wdGlvbnM7Ci0KLSAgICAgIC8vIFRoZXNlIGNoYW5nZXMgd2lsbCBwcm9w
YWdhdGUgdG8gdGhlIG90aGVyIGNvbXBpbGVyIGNvbXBvbmVudHMKLSAgICAgIHZhciBrbm93bkhl
bHBlcnMgPSB0aGlzLm9wdGlvbnMua25vd25IZWxwZXJzOwotICAgICAgdGhpcy5vcHRpb25zLmtu
b3duSGVscGVycyA9IHsKLSAgICAgICAgJ2hlbHBlck1pc3NpbmcnOiB0cnVlLAotICAgICAgICAn
YmxvY2tIZWxwZXJNaXNzaW5nJzogdHJ1ZSwKLSAgICAgICAgJ2VhY2gnOiB0cnVlLAotICAgICAg
ICAnaWYnOiB0cnVlLAotICAgICAgICAndW5sZXNzJzogdHJ1ZSwKLSAgICAgICAgJ3dpdGgnOiB0
cnVlLAotICAgICAgICAnbG9nJzogdHJ1ZQotICAgICAgfTsKLSAgICAgIGlmIChrbm93bkhlbHBl
cnMpIHsKLSAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBrbm93bkhlbHBlcnMpIHsKLSAgICAgICAg
ICB0aGlzLm9wdGlvbnMua25vd25IZWxwZXJzW25hbWVdID0ga25vd25IZWxwZXJzW25hbWVdOwot
ICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiB0aGlzLnByb2dyYW0ocHJvZ3JhbSk7
Ci0gICAgfSwKLQotICAgIGFjY2VwdDogZnVuY3Rpb24obm9kZSkgewotICAgICAgcmV0dXJuIHRo
aXNbbm9kZS50eXBlXShub2RlKTsKLSAgICB9LAotCi0gICAgcHJvZ3JhbTogZnVuY3Rpb24ocHJv
Z3JhbSkgewotICAgICAgdmFyIHN0YXRlbWVudHMgPSBwcm9ncmFtLnN0YXRlbWVudHMsIHN0YXRl
bWVudDsKLSAgICAgIHRoaXMub3Bjb2RlcyA9IFtdOwotCi0gICAgICBmb3IodmFyIGk9MCwgbD1z
dGF0ZW1lbnRzLmxlbmd0aDsgaTxsOyBpKyspIHsKLSAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVt
ZW50c1tpXTsKLSAgICAgICAgdGhpc1tzdGF0ZW1lbnQudHlwZV0oc3RhdGVtZW50KTsKLSAgICAg
IH0KLSAgICAgIHRoaXMuaXNTaW1wbGUgPSBsID09PSAxOwotCi0gICAgICB0aGlzLmRlcHRocy5s
aXN0ID0gdGhpcy5kZXB0aHMubGlzdC5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsKLSAgICAgICAgcmV0
dXJuIGEgLSBiOwotICAgICAgfSk7Ci0KLSAgICAgIHJldHVybiB0aGlzOwotICAgIH0sCi0KLSAg
ICBjb21waWxlUHJvZ3JhbTogZnVuY3Rpb24ocHJvZ3JhbSkgewotICAgICAgdmFyIHJlc3VsdCA9
IG5ldyB0aGlzLmNvbXBpbGVyKCkuY29tcGlsZShwcm9ncmFtLCB0aGlzLm9wdGlvbnMpOwotICAg
ICAgdmFyIGd1aWQgPSB0aGlzLmd1aWQrKywgZGVwdGg7Ci0KLSAgICAgIHRoaXMudXNlUGFydGlh
bCA9IHRoaXMudXNlUGFydGlhbCB8fCByZXN1bHQudXNlUGFydGlhbDsKLQotICAgICAgdGhpcy5j
aGlsZHJlbltndWlkXSA9IHJlc3VsdDsKLQotICAgICAgZm9yKHZhciBpPTAsIGw9cmVzdWx0LmRl
cHRocy5saXN0Lmxlbmd0aDsgaTxsOyBpKyspIHsKLSAgICAgICAgZGVwdGggPSByZXN1bHQuZGVw
dGhzLmxpc3RbaV07Ci0KLSAgICAgICAgaWYoZGVwdGggPCAyKSB7IGNvbnRpbnVlOyB9Ci0gICAg
ICAgIGVsc2UgeyB0aGlzLmFkZERlcHRoKGRlcHRoIC0gMSk7IH0KLSAgICAgIH0KLQotICAgICAg
cmV0dXJuIGd1aWQ7Ci0gICAgfSwKLQotICAgIGJsb2NrOiBmdW5jdGlvbihibG9jaykgewotICAg
ICAgdmFyIG11c3RhY2hlID0gYmxvY2subXVzdGFjaGUsCi0gICAgICAgICAgcHJvZ3JhbSA9IGJs
b2NrLnByb2dyYW0sCi0gICAgICAgICAgaW52ZXJzZSA9IGJsb2NrLmludmVyc2U7Ci0KLSAgICAg
IGlmIChwcm9ncmFtKSB7Ci0gICAgICAgIHByb2dyYW0gPSB0aGlzLmNvbXBpbGVQcm9ncmFtKHBy
b2dyYW0pOwotICAgICAgfQotCi0gICAgICBpZiAoaW52ZXJzZSkgewotICAgICAgICBpbnZlcnNl
ID0gdGhpcy5jb21waWxlUHJvZ3JhbShpbnZlcnNlKTsKLSAgICAgIH0KLQotICAgICAgdmFyIHR5
cGUgPSB0aGlzLmNsYXNzaWZ5TXVzdGFjaGUobXVzdGFjaGUpOwotCi0gICAgICBpZiAodHlwZSA9
PT0gImhlbHBlciIpIHsKLSAgICAgICAgdGhpcy5oZWxwZXJNdXN0YWNoZShtdXN0YWNoZSwgcHJv
Z3JhbSwgaW52ZXJzZSk7Ci0gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICJzaW1wbGUiKSB7Ci0g
ICAgICAgIHRoaXMuc2ltcGxlTXVzdGFjaGUobXVzdGFjaGUpOwotCi0gICAgICAgIC8vIG5vdyB0
aGF0IHRoZSBzaW1wbGUgbXVzdGFjaGUgaXMgcmVzb2x2ZWQsIHdlIG5lZWQgdG8KLSAgICAgICAg
Ly8gZXZhbHVhdGUgaXQgYnkgZXhlY3V0aW5nIGBibG9ja0hlbHBlck1pc3NpbmdgCi0gICAgICAg
IHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIHByb2dyYW0pOwotICAgICAgICB0aGlzLm9wY29k
ZSgncHVzaFByb2dyYW0nLCBpbnZlcnNlKTsKLSAgICAgICAgdGhpcy5vcGNvZGUoJ2VtcHR5SGFz
aCcpOwotICAgICAgICB0aGlzLm9wY29kZSgnYmxvY2tWYWx1ZScpOwotICAgICAgfSBlbHNlIHsK
LSAgICAgICAgdGhpcy5hbWJpZ3VvdXNNdXN0YWNoZShtdXN0YWNoZSwgcHJvZ3JhbSwgaW52ZXJz
ZSk7Ci0KLSAgICAgICAgLy8gbm93IHRoYXQgdGhlIHNpbXBsZSBtdXN0YWNoZSBpcyByZXNvbHZl
ZCwgd2UgbmVlZCB0bwotICAgICAgICAvLyBldmFsdWF0ZSBpdCBieSBleGVjdXRpbmcgYGJsb2Nr
SGVscGVyTWlzc2luZ2AKLSAgICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hQcm9ncmFtJywgcHJvZ3Jh
bSk7Ci0gICAgICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIGludmVyc2UpOwotICAgICAg
ICB0aGlzLm9wY29kZSgnZW1wdHlIYXNoJyk7Ci0gICAgICAgIHRoaXMub3Bjb2RlKCdhbWJpZ3Vv
dXNCbG9ja1ZhbHVlJyk7Ci0gICAgICB9Ci0KLSAgICAgIHRoaXMub3Bjb2RlKCdhcHBlbmQnKTsK
LSAgICB9LAotCi0gICAgaGFzaDogZnVuY3Rpb24oaGFzaCkgewotICAgICAgdmFyIHBhaXJzID0g
aGFzaC5wYWlycywgcGFpciwgdmFsOwotCi0gICAgICB0aGlzLm9wY29kZSgncHVzaEhhc2gnKTsK
LQotICAgICAgZm9yKHZhciBpPTAsIGw9cGFpcnMubGVuZ3RoOyBpPGw7IGkrKykgewotICAgICAg
ICBwYWlyID0gcGFpcnNbaV07Ci0gICAgICAgIHZhbCAgPSBwYWlyWzFdOwotCi0gICAgICAgIGlm
ICh0aGlzLm9wdGlvbnMuc3RyaW5nUGFyYW1zKSB7Ci0gICAgICAgICAgdGhpcy5vcGNvZGUoJ3B1
c2hTdHJpbmdQYXJhbScsIHZhbC5zdHJpbmdNb2RlVmFsdWUsIHZhbC50eXBlKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICB0aGlzLmFjY2VwdCh2YWwpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgdGhpcy5vcGNvZGUoJ2Fzc2lnblRvSGFzaCcsIHBhaXJbMF0pOwotICAgICAgfQotICAgICAg
dGhpcy5vcGNvZGUoJ3BvcEhhc2gnKTsKLSAgICB9LAotCi0gICAgcGFydGlhbDogZnVuY3Rpb24o
cGFydGlhbCkgewotICAgICAgdmFyIHBhcnRpYWxOYW1lID0gcGFydGlhbC5wYXJ0aWFsTmFtZTsK
LSAgICAgIHRoaXMudXNlUGFydGlhbCA9IHRydWU7Ci0KLSAgICAgIGlmKHBhcnRpYWwuY29udGV4
dCkgewotICAgICAgICB0aGlzLklEKHBhcnRpYWwuY29udGV4dCk7Ci0gICAgICB9IGVsc2Ugewot
ICAgICAgICB0aGlzLm9wY29kZSgncHVzaCcsICdkZXB0aDAnKTsKLSAgICAgIH0KLQotICAgICAg
dGhpcy5vcGNvZGUoJ2ludm9rZVBhcnRpYWwnLCBwYXJ0aWFsTmFtZS5uYW1lKTsKLSAgICAgIHRo
aXMub3Bjb2RlKCdhcHBlbmQnKTsKLSAgICB9LAotCi0gICAgY29udGVudDogZnVuY3Rpb24oY29u
dGVudCkgewotICAgICAgdGhpcy5vcGNvZGUoJ2FwcGVuZENvbnRlbnQnLCBjb250ZW50LnN0cmlu
Zyk7Ci0gICAgfSwKLQotICAgIG11c3RhY2hlOiBmdW5jdGlvbihtdXN0YWNoZSkgewotICAgICAg
dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7Ci0gICAgICB2YXIgdHlwZSA9IHRoaXMuY2xhc3Np
ZnlNdXN0YWNoZShtdXN0YWNoZSk7Ci0KLSAgICAgIGlmICh0eXBlID09PSAic2ltcGxlIikgewot
ICAgICAgICB0aGlzLnNpbXBsZU11c3RhY2hlKG11c3RhY2hlKTsKLSAgICAgIH0gZWxzZSBpZiAo
dHlwZSA9PT0gImhlbHBlciIpIHsKLSAgICAgICAgdGhpcy5oZWxwZXJNdXN0YWNoZShtdXN0YWNo
ZSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB0aGlzLmFtYmlndW91c011c3RhY2hlKG11c3Rh
Y2hlKTsKLSAgICAgIH0KLQotICAgICAgaWYobXVzdGFjaGUuZXNjYXBlZCAmJiAhb3B0aW9ucy5u
b0VzY2FwZSkgewotICAgICAgICB0aGlzLm9wY29kZSgnYXBwZW5kRXNjYXBlZCcpOwotICAgICAg
fSBlbHNlIHsKLSAgICAgICAgdGhpcy5vcGNvZGUoJ2FwcGVuZCcpOwotICAgICAgfQotICAgIH0s
Ci0KLSAgICBhbWJpZ3VvdXNNdXN0YWNoZTogZnVuY3Rpb24obXVzdGFjaGUsIHByb2dyYW0sIGlu
dmVyc2UpIHsKLSAgICAgIHZhciBpZCA9IG11c3RhY2hlLmlkLAotICAgICAgICAgIG5hbWUgPSBp
ZC5wYXJ0c1swXSwKLSAgICAgICAgICBpc0Jsb2NrID0gcHJvZ3JhbSAhPSBudWxsIHx8IGludmVy
c2UgIT0gbnVsbDsKLQotICAgICAgdGhpcy5vcGNvZGUoJ2dldENvbnRleHQnLCBpZC5kZXB0aCk7
Ci0KLSAgICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIHByb2dyYW0pOwotICAgICAgdGhp
cy5vcGNvZGUoJ3B1c2hQcm9ncmFtJywgaW52ZXJzZSk7Ci0KLSAgICAgIHRoaXMub3Bjb2RlKCdp
bnZva2VBbWJpZ3VvdXMnLCBuYW1lLCBpc0Jsb2NrKTsKLSAgICB9LAotCi0gICAgc2ltcGxlTXVz
dGFjaGU6IGZ1bmN0aW9uKG11c3RhY2hlKSB7Ci0gICAgICB2YXIgaWQgPSBtdXN0YWNoZS5pZDsK
LQotICAgICAgaWYgKGlkLnR5cGUgPT09ICdEQVRBJykgewotICAgICAgICB0aGlzLkRBVEEoaWQp
OwotICAgICAgfSBlbHNlIGlmIChpZC5wYXJ0cy5sZW5ndGgpIHsKLSAgICAgICAgdGhpcy5JRChp
ZCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvLyBTaW1wbGlmaWVkIElEIGZvciBgdGhpc2AK
LSAgICAgICAgdGhpcy5hZGREZXB0aChpZC5kZXB0aCk7Ci0gICAgICAgIHRoaXMub3Bjb2RlKCdn
ZXRDb250ZXh0JywgaWQuZGVwdGgpOwotICAgICAgICB0aGlzLm9wY29kZSgncHVzaENvbnRleHQn
KTsKLSAgICAgIH0KLQotICAgICAgdGhpcy5vcGNvZGUoJ3Jlc29sdmVQb3NzaWJsZUxhbWJkYScp
OwotICAgIH0sCi0KLSAgICBoZWxwZXJNdXN0YWNoZTogZnVuY3Rpb24obXVzdGFjaGUsIHByb2dy
YW0sIGludmVyc2UpIHsKLSAgICAgIHZhciBwYXJhbXMgPSB0aGlzLnNldHVwRnVsbE11c3RhY2hl
UGFyYW1zKG11c3RhY2hlLCBwcm9ncmFtLCBpbnZlcnNlKSwKLSAgICAgICAgICBuYW1lID0gbXVz
dGFjaGUuaWQucGFydHNbMF07Ci0KLSAgICAgIGlmICh0aGlzLm9wdGlvbnMua25vd25IZWxwZXJz
W25hbWVdKSB7Ci0gICAgICAgIHRoaXMub3Bjb2RlKCdpbnZva2VLbm93bkhlbHBlcicsIHBhcmFt
cy5sZW5ndGgsIG5hbWUpOwotICAgICAgfSBlbHNlIGlmICh0aGlzLmtub3duSGVscGVyc09ubHkp
IHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJZb3Ugc3BlY2lmaWVkIGtub3duSGVscGVyc09u
bHksIGJ1dCB1c2VkIHRoZSB1bmtub3duIGhlbHBlciAiICsgbmFtZSk7Ci0gICAgICB9IGVsc2Ug
ewotICAgICAgICB0aGlzLm9wY29kZSgnaW52b2tlSGVscGVyJywgcGFyYW1zLmxlbmd0aCwgbmFt
ZSk7Ci0gICAgICB9Ci0gICAgfSwKLQotICAgIElEOiBmdW5jdGlvbihpZCkgewotICAgICAgdGhp
cy5hZGREZXB0aChpZC5kZXB0aCk7Ci0gICAgICB0aGlzLm9wY29kZSgnZ2V0Q29udGV4dCcsIGlk
LmRlcHRoKTsKLQotICAgICAgdmFyIG5hbWUgPSBpZC5wYXJ0c1swXTsKLSAgICAgIGlmICghbmFt
ZSkgewotICAgICAgICB0aGlzLm9wY29kZSgncHVzaENvbnRleHQnKTsKLSAgICAgIH0gZWxzZSB7
Ci0gICAgICAgIHRoaXMub3Bjb2RlKCdsb29rdXBPbkNvbnRleHQnLCBpZC5wYXJ0c1swXSk7Ci0g
ICAgICB9Ci0KLSAgICAgIGZvcih2YXIgaT0xLCBsPWlkLnBhcnRzLmxlbmd0aDsgaTxsOyBpKysp
IHsKLSAgICAgICAgdGhpcy5vcGNvZGUoJ2xvb2t1cCcsIGlkLnBhcnRzW2ldKTsKLSAgICAgIH0K
LSAgICB9LAotCi0gICAgREFUQTogZnVuY3Rpb24oZGF0YSkgewotICAgICAgdGhpcy5vcHRpb25z
LmRhdGEgPSB0cnVlOwotICAgICAgdGhpcy5vcGNvZGUoJ2xvb2t1cERhdGEnLCBkYXRhLmlkKTsK
LSAgICB9LAotCi0gICAgU1RSSU5HOiBmdW5jdGlvbihzdHJpbmcpIHsKLSAgICAgIHRoaXMub3Bj
b2RlKCdwdXNoU3RyaW5nJywgc3RyaW5nLnN0cmluZyk7Ci0gICAgfSwKLQotICAgIElOVEVHRVI6
IGZ1bmN0aW9uKGludGVnZXIpIHsKLSAgICAgIHRoaXMub3Bjb2RlKCdwdXNoTGl0ZXJhbCcsIGlu
dGVnZXIuaW50ZWdlcik7Ci0gICAgfSwKLQotICAgIEJPT0xFQU46IGZ1bmN0aW9uKGJvb2wpIHsK
LSAgICAgIHRoaXMub3Bjb2RlKCdwdXNoTGl0ZXJhbCcsIGJvb2wuYm9vbCk7Ci0gICAgfSwKLQot
ICAgIGNvbW1lbnQ6IGZ1bmN0aW9uKCkge30sCi0KLSAgICAvLyBIRUxQRVJTCi0gICAgb3Bjb2Rl
OiBmdW5jdGlvbihuYW1lKSB7Ci0gICAgICB0aGlzLm9wY29kZXMucHVzaCh7IG9wY29kZTogbmFt
ZSwgYXJnczogW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpIH0pOwotICAgIH0sCi0KLSAgICBk
ZWNsYXJlOiBmdW5jdGlvbihuYW1lLCB2YWx1ZSkgewotICAgICAgdGhpcy5vcGNvZGVzLnB1c2go
eyBvcGNvZGU6ICdERUNMQVJFJywgbmFtZTogbmFtZSwgdmFsdWU6IHZhbHVlIH0pOwotICAgIH0s
Ci0KLSAgICBhZGREZXB0aDogZnVuY3Rpb24oZGVwdGgpIHsKLSAgICAgIGlmKGlzTmFOKGRlcHRo
KSkgeyB0aHJvdyBuZXcgRXJyb3IoIkVXT1QiKTsgfQotICAgICAgaWYoZGVwdGggPT09IDApIHsg
cmV0dXJuOyB9Ci0KLSAgICAgIGlmKCF0aGlzLmRlcHRoc1tkZXB0aF0pIHsKLSAgICAgICAgdGhp
cy5kZXB0aHNbZGVwdGhdID0gdHJ1ZTsKLSAgICAgICAgdGhpcy5kZXB0aHMubGlzdC5wdXNoKGRl
cHRoKTsKLSAgICAgIH0KLSAgICB9LAotCi0gICAgY2xhc3NpZnlNdXN0YWNoZTogZnVuY3Rpb24o
bXVzdGFjaGUpIHsKLSAgICAgIHZhciBpc0hlbHBlciAgID0gbXVzdGFjaGUuaXNIZWxwZXI7Ci0g
ICAgICB2YXIgaXNFbGlnaWJsZSA9IG11c3RhY2hlLmVsaWdpYmxlSGVscGVyOwotICAgICAgdmFy
IG9wdGlvbnMgICAgPSB0aGlzLm9wdGlvbnM7Ci0KLSAgICAgIC8vIGlmIGFtYmlndW91cywgd2Ug
Y2FuIHBvc3NpYmx5IHJlc29sdmUgdGhlIGFtYmlndWl0eSBub3cKLSAgICAgIGlmIChpc0VsaWdp
YmxlICYmICFpc0hlbHBlcikgewotICAgICAgICB2YXIgbmFtZSA9IG11c3RhY2hlLmlkLnBhcnRz
WzBdOwotCi0gICAgICAgIGlmIChvcHRpb25zLmtub3duSGVscGVyc1tuYW1lXSkgewotICAgICAg
ICAgIGlzSGVscGVyID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmtub3duSGVs
cGVyc09ubHkpIHsKLSAgICAgICAgICBpc0VsaWdpYmxlID0gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICAgIH0KLQotICAgICAgaWYgKGlzSGVscGVyKSB7IHJldHVybiAiaGVscGVyIjsgfQotICAgICAg
ZWxzZSBpZiAoaXNFbGlnaWJsZSkgeyByZXR1cm4gImFtYmlndW91cyI7IH0KLSAgICAgIGVsc2Ug
eyByZXR1cm4gInNpbXBsZSI7IH0KLSAgICB9LAotCi0gICAgcHVzaFBhcmFtczogZnVuY3Rpb24o
cGFyYW1zKSB7Ci0gICAgICB2YXIgaSA9IHBhcmFtcy5sZW5ndGgsIHBhcmFtOwotCi0gICAgICB3
aGlsZShpLS0pIHsKLSAgICAgICAgcGFyYW0gPSBwYXJhbXNbaV07Ci0KLSAgICAgICAgaWYodGhp
cy5vcHRpb25zLnN0cmluZ1BhcmFtcykgewotICAgICAgICAgIGlmKHBhcmFtLmRlcHRoKSB7Ci0g
ICAgICAgICAgICB0aGlzLmFkZERlcHRoKHBhcmFtLmRlcHRoKTsKLSAgICAgICAgICB9Ci0KLSAg
ICAgICAgICB0aGlzLm9wY29kZSgnZ2V0Q29udGV4dCcsIHBhcmFtLmRlcHRoIHx8IDApOwotICAg
ICAgICAgIHRoaXMub3Bjb2RlKCdwdXNoU3RyaW5nUGFyYW0nLCBwYXJhbS5zdHJpbmdNb2RlVmFs
dWUsIHBhcmFtLnR5cGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHRoaXNbcGFyYW0u
dHlwZV0ocGFyYW0pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLQotICAgIHNldHVwTXVz
dGFjaGVQYXJhbXM6IGZ1bmN0aW9uKG11c3RhY2hlKSB7Ci0gICAgICB2YXIgcGFyYW1zID0gbXVz
dGFjaGUucGFyYW1zOwotICAgICAgdGhpcy5wdXNoUGFyYW1zKHBhcmFtcyk7Ci0KLSAgICAgIGlm
KG11c3RhY2hlLmhhc2gpIHsKLSAgICAgICAgdGhpcy5oYXNoKG11c3RhY2hlLmhhc2gpOwotICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgdGhpcy5vcGNvZGUoJ2VtcHR5SGFzaCcpOwotICAgICAgfQot
Ci0gICAgICByZXR1cm4gcGFyYW1zOwotICAgIH0sCi0KLSAgICAvLyB0aGlzIHdpbGwgcmVwbGFj
ZSBzZXR1cE11c3RhY2hlUGFyYW1zIHdoZW4gd2UncmUgZG9uZQotICAgIHNldHVwRnVsbE11c3Rh
Y2hlUGFyYW1zOiBmdW5jdGlvbihtdXN0YWNoZSwgcHJvZ3JhbSwgaW52ZXJzZSkgewotICAgICAg
dmFyIHBhcmFtcyA9IG11c3RhY2hlLnBhcmFtczsKLSAgICAgIHRoaXMucHVzaFBhcmFtcyhwYXJh
bXMpOwotCi0gICAgICB0aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBwcm9ncmFtKTsKLSAgICAg
IHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIGludmVyc2UpOwotCi0gICAgICBpZihtdXN0YWNo
ZS5oYXNoKSB7Ci0gICAgICAgIHRoaXMuaGFzaChtdXN0YWNoZS5oYXNoKTsKLSAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgIHRoaXMub3Bjb2RlKCdlbXB0eUhhc2gnKTsKLSAgICAgIH0KLQotICAgICAg
cmV0dXJuIHBhcmFtczsKLSAgICB9Ci0gIH07Ci0KLSAgdmFyIExpdGVyYWwgPSBmdW5jdGlvbih2
YWx1ZSkgewotICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKLSAgfTsKLQotICBKYXZhU2NyaXB0Q29t
cGlsZXIucHJvdG90eXBlID0gewotICAgIC8vIFBVQkxJQyBBUEk6IFlvdSBjYW4gb3ZlcnJpZGUg
dGhlc2UgbWV0aG9kcyBpbiBhIHN1YmNsYXNzIHRvIHByb3ZpZGUKLSAgICAvLyBhbHRlcm5hdGl2
ZSBjb21waWxlZCBmb3JtcyBmb3IgbmFtZSBsb29rdXAgYW5kIGJ1ZmZlcmluZyBzZW1hbnRpY3MK
LSAgICBuYW1lTG9va3VwOiBmdW5jdGlvbihwYXJlbnQsIG5hbWUgLyogLCB0eXBlKi8pIHsKLSAg
ICAgIGlmICgvXlswLTldKyQvLnRlc3QobmFtZSkpIHsKLSAgICAgICAgcmV0dXJuIHBhcmVudCAr
ICJbIiArIG5hbWUgKyAiXSI7Ci0gICAgICB9IGVsc2UgaWYgKEphdmFTY3JpcHRDb21waWxlci5p
c1ZhbGlkSmF2YVNjcmlwdFZhcmlhYmxlTmFtZShuYW1lKSkgewotICAgICAgICByZXR1cm4gcGFy
ZW50ICsgIi4iICsgbmFtZTsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICByZXR1cm4g
cGFyZW50ICsgIlsnIiArIG5hbWUgKyAiJ10iOwotICAgICAgfQotICAgIH0sCi0KLSAgICBhcHBl
bmRUb0J1ZmZlcjogZnVuY3Rpb24oc3RyaW5nKSB7Ci0gICAgICBpZiAodGhpcy5lbnZpcm9ubWVu
dC5pc1NpbXBsZSkgewotICAgICAgICByZXR1cm4gInJldHVybiAiICsgc3RyaW5nICsgIjsiOwot
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICBhcHBlbmRUb0J1ZmZl
cjogdHJ1ZSwKLSAgICAgICAgICBjb250ZW50OiBzdHJpbmcsCi0gICAgICAgICAgdG9TdHJpbmc6
IGZ1bmN0aW9uKCkgeyByZXR1cm4gImJ1ZmZlciArPSAiICsgc3RyaW5nICsgIjsiOyB9Ci0gICAg
ICAgIH07Ci0gICAgICB9Ci0gICAgfSwKLQotICAgIGluaXRpYWxpemVCdWZmZXI6IGZ1bmN0aW9u
KCkgewotICAgICAgcmV0dXJuIHRoaXMucXVvdGVkU3RyaW5nKCIiKTsKLSAgICB9LAotCi0gICAg
bmFtZXNwYWNlOiAiSGFuZGxlYmFycyIsCi0gICAgLy8gRU5EIFBVQkxJQyBBUEkKLQotICAgIGNv
bXBpbGU6IGZ1bmN0aW9uKGVudmlyb25tZW50LCBvcHRpb25zLCBjb250ZXh0LCBhc09iamVjdCkg
ewotICAgICAgdGhpcy5lbnZpcm9ubWVudCA9IGVudmlyb25tZW50OwotICAgICAgdGhpcy5vcHRp
b25zID0gb3B0aW9ucyB8fCB7fTsKLQotICAgICAgSGFuZGxlYmFycy5sb2coSGFuZGxlYmFycy5s
b2dnZXIuREVCVUcsIHRoaXMuZW52aXJvbm1lbnQuZGlzYXNzZW1ibGUoKSArICJcblxuIik7Ci0K
LSAgICAgIHRoaXMubmFtZSA9IHRoaXMuZW52aXJvbm1lbnQubmFtZTsKLSAgICAgIHRoaXMuaXND
aGlsZCA9ICEhY29udGV4dDsKLSAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQgfHwgewotICAg
ICAgICBwcm9ncmFtczogW10sCi0gICAgICAgIGVudmlyb25tZW50czogW10sCi0gICAgICAgIGFs
aWFzZXM6IHsgfQotICAgICAgfTsKLQotICAgICAgdGhpcy5wcmVhbWJsZSgpOwotCi0gICAgICB0
aGlzLnN0YWNrU2xvdCA9IDA7Ci0gICAgICB0aGlzLnN0YWNrVmFycyA9IFtdOwotICAgICAgdGhp
cy5yZWdpc3RlcnMgPSB7IGxpc3Q6IFtdIH07Ci0gICAgICB0aGlzLmNvbXBpbGVTdGFjayA9IFtd
OwotICAgICAgdGhpcy5pbmxpbmVTdGFjayA9IFtdOwotCi0gICAgICB0aGlzLmNvbXBpbGVDaGls
ZHJlbihlbnZpcm9ubWVudCwgb3B0aW9ucyk7Ci0KLSAgICAgIHZhciBvcGNvZGVzID0gZW52aXJv
bm1lbnQub3Bjb2Rlcywgb3Bjb2RlOwotCi0gICAgICB0aGlzLmkgPSAwOwotCi0gICAgICBmb3Io
bD1vcGNvZGVzLmxlbmd0aDsgdGhpcy5pPGw7IHRoaXMuaSsrKSB7Ci0gICAgICAgIG9wY29kZSA9
IG9wY29kZXNbdGhpcy5pXTsKLQotICAgICAgICBpZihvcGNvZGUub3Bjb2RlID09PSAnREVDTEFS
RScpIHsKLSAgICAgICAgICB0aGlzW29wY29kZS5uYW1lXSA9IG9wY29kZS52YWx1ZTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICB0aGlzW29wY29kZS5vcGNvZGVdLmFwcGx5KHRoaXMsIG9w
Y29kZS5hcmdzKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICByZXR1cm4gdGhpcy5jcmVh
dGVGdW5jdGlvbkNvbnRleHQoYXNPYmplY3QpOwotICAgIH0sCi0KLSAgICBuZXh0T3Bjb2RlOiBm
dW5jdGlvbigpIHsKLSAgICAgIHZhciBvcGNvZGVzID0gdGhpcy5lbnZpcm9ubWVudC5vcGNvZGVz
OwotICAgICAgcmV0dXJuIG9wY29kZXNbdGhpcy5pICsgMV07Ci0gICAgfSwKLQotICAgIGVhdDog
ZnVuY3Rpb24oKSB7Ci0gICAgICB0aGlzLmkgPSB0aGlzLmkgKyAxOwotICAgIH0sCi0KLSAgICBw
cmVhbWJsZTogZnVuY3Rpb24oKSB7Ci0gICAgICB2YXIgb3V0ID0gW107Ci0KLSAgICAgIGlmICgh
dGhpcy5pc0NoaWxkKSB7Ci0gICAgICAgIHZhciBuYW1lc3BhY2UgPSB0aGlzLm5hbWVzcGFjZTsK
LSAgICAgICAgdmFyIGNvcGllcyA9ICJoZWxwZXJzID0gaGVscGVycyB8fCAiICsgbmFtZXNwYWNl
ICsgIi5oZWxwZXJzOyI7Ci0gICAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LnVzZVBhcnRpYWwp
IHsgY29waWVzID0gY29waWVzICsgIiBwYXJ0aWFscyA9IHBhcnRpYWxzIHx8ICIgKyBuYW1lc3Bh
Y2UgKyAiLnBhcnRpYWxzOyI7IH0KLSAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5kYXRhKSB7IGNv
cGllcyA9IGNvcGllcyArICIgZGF0YSA9IGRhdGEgfHwge307IjsgfQotICAgICAgICBvdXQucHVz
aChjb3BpZXMpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgb3V0LnB1c2goJycpOwotICAgICAg
fQotCi0gICAgICBpZiAoIXRoaXMuZW52aXJvbm1lbnQuaXNTaW1wbGUpIHsKLSAgICAgICAgb3V0
LnB1c2goIiwgYnVmZmVyID0gIiArIHRoaXMuaW5pdGlhbGl6ZUJ1ZmZlcigpKTsKLSAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgIG91dC5wdXNoKCIiKTsKLSAgICAgIH0KLQotICAgICAgLy8gdHJhY2sg
dGhlIGxhc3QgY29udGV4dCBwdXNoZWQgaW50byBwbGFjZSB0byBhbGxvdyBza2lwcGluZyB0aGUK
LSAgICAgIC8vIGdldENvbnRleHQgb3Bjb2RlIHdoZW4gaXQgd291bGQgYmUgYSBub29wCi0gICAg
ICB0aGlzLmxhc3RDb250ZXh0ID0gMDsKLSAgICAgIHRoaXMuc291cmNlID0gb3V0OwotICAgIH0s
Ci0KLSAgICBjcmVhdGVGdW5jdGlvbkNvbnRleHQ6IGZ1bmN0aW9uKGFzT2JqZWN0KSB7Ci0gICAg
ICB2YXIgbG9jYWxzID0gdGhpcy5zdGFja1ZhcnMuY29uY2F0KHRoaXMucmVnaXN0ZXJzLmxpc3Qp
OwotCi0gICAgICBpZihsb2NhbHMubGVuZ3RoID4gMCkgewotICAgICAgICB0aGlzLnNvdXJjZVsx
XSA9IHRoaXMuc291cmNlWzFdICsgIiwgIiArIGxvY2Fscy5qb2luKCIsICIpOwotICAgICAgfQot
Ci0gICAgICAvLyBHZW5lcmF0ZSBtaW5pbWl6ZXIgYWxpYXMgbWFwcGluZ3MKLSAgICAgIGlmICgh
dGhpcy5pc0NoaWxkKSB7Ci0gICAgICAgIGZvciAodmFyIGFsaWFzIGluIHRoaXMuY29udGV4dC5h
bGlhc2VzKSB7Ci0gICAgICAgICAgdGhpcy5zb3VyY2VbMV0gPSB0aGlzLnNvdXJjZVsxXSArICcs
ICcgKyBhbGlhcyArICc9JyArIHRoaXMuY29udGV4dC5hbGlhc2VzW2FsaWFzXTsKLSAgICAgICAg
fQotICAgICAgfQotCi0gICAgICBpZiAodGhpcy5zb3VyY2VbMV0pIHsKLSAgICAgICAgdGhpcy5z
b3VyY2VbMV0gPSAidmFyICIgKyB0aGlzLnNvdXJjZVsxXS5zdWJzdHJpbmcoMikgKyAiOyI7Ci0g
ICAgICB9Ci0KLSAgICAgIC8vIE1lcmdlIGNoaWxkcmVuCi0gICAgICBpZiAoIXRoaXMuaXNDaGls
ZCkgewotICAgICAgICB0aGlzLnNvdXJjZVsxXSArPSAnXG4nICsgdGhpcy5jb250ZXh0LnByb2dy
YW1zLmpvaW4oJ1xuJykgKyAnXG4nOwotICAgICAgfQotCi0gICAgICBpZiAoIXRoaXMuZW52aXJv
bm1lbnQuaXNTaW1wbGUpIHsKLSAgICAgICAgdGhpcy5zb3VyY2UucHVzaCgicmV0dXJuIGJ1ZmZl
cjsiKTsKLSAgICAgIH0KLQotICAgICAgdmFyIHBhcmFtcyA9IHRoaXMuaXNDaGlsZCA/IFsiZGVw
dGgwIiwgImRhdGEiXSA6IFsiSGFuZGxlYmFycyIsICJkZXB0aDAiLCAiaGVscGVycyIsICJwYXJ0
aWFscyIsICJkYXRhIl07Ci0KLSAgICAgIGZvcih2YXIgaT0wLCBsPXRoaXMuZW52aXJvbm1lbnQu
ZGVwdGhzLmxpc3QubGVuZ3RoOyBpPGw7IGkrKykgewotICAgICAgICBwYXJhbXMucHVzaCgiZGVw
dGgiICsgdGhpcy5lbnZpcm9ubWVudC5kZXB0aHMubGlzdFtpXSk7Ci0gICAgICB9Ci0KLSAgICAg
IC8vIFBlcmZvcm0gYSBzZWNvbmQgcGFzcyBvdmVyIHRoZSBvdXRwdXQgdG8gbWVyZ2UgY29udGVu
dCB3aGVuIHBvc3NpYmxlCi0gICAgICB2YXIgc291cmNlID0gdGhpcy5tZXJnZVNvdXJjZSgpOwot
Ci0gICAgICBpZiAoIXRoaXMuaXNDaGlsZCkgewotICAgICAgICB2YXIgcmV2aXNpb24gPSBIYW5k
bGViYXJzLkNPTVBJTEVSX1JFVklTSU9OLAotICAgICAgICAgICAgdmVyc2lvbnMgPSBIYW5kbGVi
YXJzLlJFVklTSU9OX0NIQU5HRVNbcmV2aXNpb25dOwotICAgICAgICBzb3VyY2UgPSAidGhpcy5j
b21waWxlckluZm8gPSBbIityZXZpc2lvbisiLCciK3ZlcnNpb25zKyInXTtcbiIrc291cmNlOwot
ICAgICAgfQotCi0gICAgICBpZiAoYXNPYmplY3QpIHsKLSAgICAgICAgcGFyYW1zLnB1c2goc291
cmNlKTsKLQotICAgICAgICByZXR1cm4gRnVuY3Rpb24uYXBwbHkodGhpcywgcGFyYW1zKTsKLSAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgIHZhciBmdW5jdGlvblNvdXJjZSA9ICdmdW5jdGlvbiAnICsg
KHRoaXMubmFtZSB8fCAnJykgKyAnKCcgKyBwYXJhbXMuam9pbignLCcpICsgJykge1xuICAnICsg
c291cmNlICsgJ30nOwotICAgICAgICBIYW5kbGViYXJzLmxvZyhIYW5kbGViYXJzLmxvZ2dlci5E
RUJVRywgZnVuY3Rpb25Tb3VyY2UgKyAiXG5cbiIpOwotICAgICAgICByZXR1cm4gZnVuY3Rpb25T
b3VyY2U7Ci0gICAgICB9Ci0gICAgfSwKLSAgICBtZXJnZVNvdXJjZTogZnVuY3Rpb24oKSB7Ci0g
ICAgICAvLyBXQVJOOiBXZSBhcmUgbm90IGhhbmRsaW5nIHRoZSBjYXNlIHdoZXJlIGJ1ZmZlciBp
cyBzdGlsbCBwb3B1bGF0ZWQgYXMgdGhlIHNvdXJjZSBzaG91bGQKLSAgICAgIC8vIG5vdCBoYXZl
IGJ1ZmZlciBhcHBlbmQgb3BlcmF0aW9ucyBhcyB0aGVpciBmaW5hbCBhY3Rpb24uCi0gICAgICB2
YXIgc291cmNlID0gJycsCi0gICAgICAgICAgYnVmZmVyOwotICAgICAgZm9yICh2YXIgaSA9IDAs
IGxlbiA9IHRoaXMuc291cmNlLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgIHZhciBs
aW5lID0gdGhpcy5zb3VyY2VbaV07Ci0gICAgICAgIGlmIChsaW5lLmFwcGVuZFRvQnVmZmVyKSB7
Ci0gICAgICAgICAgaWYgKGJ1ZmZlcikgewotICAgICAgICAgICAgYnVmZmVyID0gYnVmZmVyICsg
J1xuICAgICsgJyArIGxpbmUuY29udGVudDsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgYnVmZmVyID0gbGluZS5jb250ZW50OwotICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICBpZiAoYnVmZmVyKSB7Ci0gICAgICAgICAgICBzb3VyY2UgKz0gJ2J1ZmZlciAr
PSAnICsgYnVmZmVyICsgJztcbiAgJzsKLSAgICAgICAgICAgIGJ1ZmZlciA9IHVuZGVmaW5lZDsK
LSAgICAgICAgICB9Ci0gICAgICAgICAgc291cmNlICs9IGxpbmUgKyAnXG4gICc7Ci0gICAgICAg
IH0KLSAgICAgIH0KLSAgICAgIHJldHVybiBzb3VyY2U7Ci0gICAgfSwKLQotICAgIC8vIFtibG9j
a1ZhbHVlXQotICAgIC8vCi0gICAgLy8gT24gc3RhY2ssIGJlZm9yZTogaGFzaCwgaW52ZXJzZSwg
cHJvZ3JhbSwgdmFsdWUKLSAgICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHJldHVybiB2YWx1ZSBvZiBi
bG9ja0hlbHBlck1pc3NpbmcKLSAgICAvLwotICAgIC8vIFRoZSBwdXJwb3NlIG9mIHRoaXMgb3Bj
b2RlIGlzIHRvIHRha2UgYSBibG9jayBvZiB0aGUgZm9ybQotICAgIC8vIGB7eyNmb299fS4uLnt7
L2Zvb319YCwgcmVzb2x2ZSB0aGUgdmFsdWUgb2YgYGZvb2AsIGFuZAotICAgIC8vIHJlcGxhY2Ug
aXQgb24gdGhlIHN0YWNrIHdpdGggdGhlIHJlc3VsdCBvZiBwcm9wZXJseQotICAgIC8vIGludm9r
aW5nIGJsb2NrSGVscGVyTWlzc2luZy4KLSAgICBibG9ja1ZhbHVlOiBmdW5jdGlvbigpIHsKLSAg
ICAgIHRoaXMuY29udGV4dC5hbGlhc2VzLmJsb2NrSGVscGVyTWlzc2luZyA9ICdoZWxwZXJzLmJs
b2NrSGVscGVyTWlzc2luZyc7Ci0KLSAgICAgIHZhciBwYXJhbXMgPSBbImRlcHRoMCJdOwotICAg
ICAgdGhpcy5zZXR1cFBhcmFtcygwLCBwYXJhbXMpOwotCi0gICAgICB0aGlzLnJlcGxhY2VTdGFj
ayhmdW5jdGlvbihjdXJyZW50KSB7Ci0gICAgICAgIHBhcmFtcy5zcGxpY2UoMSwgMCwgY3VycmVu
dCk7Ci0gICAgICAgIHJldHVybiAiYmxvY2tIZWxwZXJNaXNzaW5nLmNhbGwoIiArIHBhcmFtcy5q
b2luKCIsICIpICsgIikiOwotICAgICAgfSk7Ci0gICAgfSwKLQotICAgIC8vIFthbWJpZ3VvdXNC
bG9ja1ZhbHVlXQotICAgIC8vCi0gICAgLy8gT24gc3RhY2ssIGJlZm9yZTogaGFzaCwgaW52ZXJz
ZSwgcHJvZ3JhbSwgdmFsdWUKLSAgICAvLyBDb21waWxlciB2YWx1ZSwgYmVmb3JlOiBsYXN0SGVs
cGVyPXZhbHVlIG9mIGxhc3QgZm91bmQgaGVscGVyLCBpZiBhbnkKLSAgICAvLyBPbiBzdGFjaywg
YWZ0ZXIsIGlmIG5vIGxhc3RIZWxwZXI6IHNhbWUgYXMgW2Jsb2NrVmFsdWVdCi0gICAgLy8gT24g
c3RhY2ssIGFmdGVyLCBpZiBsYXN0SGVscGVyOiB2YWx1ZQotICAgIGFtYmlndW91c0Jsb2NrVmFs
dWU6IGZ1bmN0aW9uKCkgewotICAgICAgdGhpcy5jb250ZXh0LmFsaWFzZXMuYmxvY2tIZWxwZXJN
aXNzaW5nID0gJ2hlbHBlcnMuYmxvY2tIZWxwZXJNaXNzaW5nJzsKLQotICAgICAgdmFyIHBhcmFt
cyA9IFsiZGVwdGgwIl07Ci0gICAgICB0aGlzLnNldHVwUGFyYW1zKDAsIHBhcmFtcyk7Ci0KLSAg
ICAgIHZhciBjdXJyZW50ID0gdGhpcy50b3BTdGFjaygpOwotICAgICAgcGFyYW1zLnNwbGljZSgx
LCAwLCBjdXJyZW50KTsKLQotICAgICAgLy8gVXNlIHRoZSBvcHRpb25zIHZhbHVlIGdlbmVyYXRl
ZCBmcm9tIHRoZSBpbnZvY2F0aW9uCi0gICAgICBwYXJhbXNbcGFyYW1zLmxlbmd0aC0xXSA9ICdv
cHRpb25zJzsKLQotICAgICAgdGhpcy5zb3VyY2UucHVzaCgiaWYgKCEiICsgdGhpcy5sYXN0SGVs
cGVyICsgIikgeyAiICsgY3VycmVudCArICIgPSBibG9ja0hlbHBlck1pc3NpbmcuY2FsbCgiICsg
cGFyYW1zLmpvaW4oIiwgIikgKyAiKTsgfSIpOwotICAgIH0sCi0KLSAgICAvLyBbYXBwZW5kQ29u
dGVudF0KLSAgICAvLwotICAgIC8vIE9uIHN0YWNrLCBiZWZvcmU6IC4uLgotICAgIC8vIE9uIHN0
YWNrLCBhZnRlcjogLi4uCi0gICAgLy8KLSAgICAvLyBBcHBlbmRzIHRoZSBzdHJpbmcgdmFsdWUg
b2YgYGNvbnRlbnRgIHRvIHRoZSBjdXJyZW50IGJ1ZmZlcgotICAgIGFwcGVuZENvbnRlbnQ6IGZ1
bmN0aW9uKGNvbnRlbnQpIHsKLSAgICAgIHRoaXMuc291cmNlLnB1c2godGhpcy5hcHBlbmRUb0J1
ZmZlcih0aGlzLnF1b3RlZFN0cmluZyhjb250ZW50KSkpOwotICAgIH0sCi0KLSAgICAvLyBbYXBw
ZW5kXQotICAgIC8vCi0gICAgLy8gT24gc3RhY2ssIGJlZm9yZTogdmFsdWUsIC4uLgotICAgIC8v
IE9uIHN0YWNrLCBhZnRlcjogLi4uCi0gICAgLy8KLSAgICAvLyBDb2VyY2VzIGB2YWx1ZWAgdG8g
YSBTdHJpbmcgYW5kIGFwcGVuZHMgaXQgdG8gdGhlIGN1cnJlbnQgYnVmZmVyLgotICAgIC8vCi0g
ICAgLy8gSWYgYHZhbHVlYCBpcyB0cnV0aHksIG9yIDAsIGl0IGlzIGNvZXJjZWQgaW50byBhIHN0
cmluZyBhbmQgYXBwZW5kZWQKLSAgICAvLyBPdGhlcndpc2UsIHRoZSBlbXB0eSBzdHJpbmcgaXMg
YXBwZW5kZWQKLSAgICBhcHBlbmQ6IGZ1bmN0aW9uKCkgewotICAgICAgLy8gRm9yY2UgYW55dGhp
bmcgdGhhdCBpcyBpbmxpbmVkIG9udG8gdGhlIHN0YWNrIHNvIHdlIGRvbid0IGhhdmUgZHVwbGlj
YXRpb24KLSAgICAgIC8vIHdoZW4gd2UgZXhhbWluZSBsb2NhbAotICAgICAgdGhpcy5mbHVzaElu
bGluZSgpOwotICAgICAgdmFyIGxvY2FsID0gdGhpcy5wb3BTdGFjaygpOwotICAgICAgdGhpcy5z
b3VyY2UucHVzaCgiaWYoIiArIGxvY2FsICsgIiB8fCAiICsgbG9jYWwgKyAiID09PSAwKSB7ICIg
KyB0aGlzLmFwcGVuZFRvQnVmZmVyKGxvY2FsKSArICIgfSIpOwotICAgICAgaWYgKHRoaXMuZW52
aXJvbm1lbnQuaXNTaW1wbGUpIHsKLSAgICAgICAgdGhpcy5zb3VyY2UucHVzaCgiZWxzZSB7ICIg
KyB0aGlzLmFwcGVuZFRvQnVmZmVyKCInJyIpICsgIiB9Iik7Ci0gICAgICB9Ci0gICAgfSwKLQot
ICAgIC8vIFthcHBlbmRFc2NhcGVkXQotICAgIC8vCi0gICAgLy8gT24gc3RhY2ssIGJlZm9yZTog
dmFsdWUsIC4uLgotICAgIC8vIE9uIHN0YWNrLCBhZnRlcjogLi4uCi0gICAgLy8KLSAgICAvLyBF
c2NhcGUgYHZhbHVlYCBhbmQgYXBwZW5kIGl0IHRvIHRoZSBidWZmZXIKLSAgICBhcHBlbmRFc2Nh
cGVkOiBmdW5jdGlvbigpIHsKLSAgICAgIHRoaXMuY29udGV4dC5hbGlhc2VzLmVzY2FwZUV4cHJl
c3Npb24gPSAndGhpcy5lc2NhcGVFeHByZXNzaW9uJzsKLQotICAgICAgdGhpcy5zb3VyY2UucHVz
aCh0aGlzLmFwcGVuZFRvQnVmZmVyKCJlc2NhcGVFeHByZXNzaW9uKCIgKyB0aGlzLnBvcFN0YWNr
KCkgKyAiKSIpKTsKLSAgICB9LAotCi0gICAgLy8gW2dldENvbnRleHRdCi0gICAgLy8KLSAgICAv
LyBPbiBzdGFjaywgYmVmb3JlOiAuLi4KLSAgICAvLyBPbiBzdGFjaywgYWZ0ZXI6IC4uLgotICAg
IC8vIENvbXBpbGVyIHZhbHVlLCBhZnRlcjogbGFzdENvbnRleHQ9ZGVwdGgKLSAgICAvLwotICAg
IC8vIFNldCB0aGUgdmFsdWUgb2YgdGhlIGBsYXN0Q29udGV4dGAgY29tcGlsZXIgdmFsdWUgdG8g
dGhlIGRlcHRoCi0gICAgZ2V0Q29udGV4dDogZnVuY3Rpb24oZGVwdGgpIHsKLSAgICAgIGlmKHRo
aXMubGFzdENvbnRleHQgIT09IGRlcHRoKSB7Ci0gICAgICAgIHRoaXMubGFzdENvbnRleHQgPSBk
ZXB0aDsKLSAgICAgIH0KLSAgICB9LAotCi0gICAgLy8gW2xvb2t1cE9uQ29udGV4dF0KLSAgICAv
LwotICAgIC8vIE9uIHN0YWNrLCBiZWZvcmU6IC4uLgotICAgIC8vIE9uIHN0YWNrLCBhZnRlcjog
Y3VycmVudENvbnRleHRbbmFtZV0sIC4uLgotICAgIC8vCi0gICAgLy8gTG9va3MgdXAgdGhlIHZh
bHVlIG9mIGBuYW1lYCBvbiB0aGUgY3VycmVudCBjb250ZXh0IGFuZCBwdXNoZXMKLSAgICAvLyBp
dCBvbnRvIHRoZSBzdGFjay4KLSAgICBsb29rdXBPbkNvbnRleHQ6IGZ1bmN0aW9uKG5hbWUpIHsK
LSAgICAgIHRoaXMucHVzaCh0aGlzLm5hbWVMb29rdXAoJ2RlcHRoJyArIHRoaXMubGFzdENvbnRl
eHQsIG5hbWUsICdjb250ZXh0JykpOwotICAgIH0sCi0KLSAgICAvLyBbcHVzaENvbnRleHRdCi0g
ICAgLy8KLSAgICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi4KLSAgICAvLyBPbiBzdGFjaywgYWZ0
ZXI6IGN1cnJlbnRDb250ZXh0LCAuLi4KLSAgICAvLwotICAgIC8vIFB1c2hlcyB0aGUgdmFsdWUg
b2YgdGhlIGN1cnJlbnQgY29udGV4dCBvbnRvIHRoZSBzdGFjay4KLSAgICBwdXNoQ29udGV4dDog
ZnVuY3Rpb24oKSB7Ci0gICAgICB0aGlzLnB1c2hTdGFja0xpdGVyYWwoJ2RlcHRoJyArIHRoaXMu
bGFzdENvbnRleHQpOwotICAgIH0sCi0KLSAgICAvLyBbcmVzb2x2ZVBvc3NpYmxlTGFtYmRhXQot
ICAgIC8vCi0gICAgLy8gT24gc3RhY2ssIGJlZm9yZTogdmFsdWUsIC4uLgotICAgIC8vIE9uIHN0
YWNrLCBhZnRlcjogcmVzb2x2ZWQgdmFsdWUsIC4uLgotICAgIC8vCi0gICAgLy8gSWYgdGhlIGB2
YWx1ZWAgaXMgYSBsYW1iZGEsIHJlcGxhY2UgaXQgb24gdGhlIHN0YWNrIGJ5Ci0gICAgLy8gdGhl
IHJldHVybiB2YWx1ZSBvZiB0aGUgbGFtYmRhCi0gICAgcmVzb2x2ZVBvc3NpYmxlTGFtYmRhOiBm
dW5jdGlvbigpIHsKLSAgICAgIHRoaXMuY29udGV4dC5hbGlhc2VzLmZ1bmN0aW9uVHlwZSA9ICci
ZnVuY3Rpb24iJzsKLQotICAgICAgdGhpcy5yZXBsYWNlU3RhY2soZnVuY3Rpb24oY3VycmVudCkg
ewotICAgICAgICByZXR1cm4gInR5cGVvZiAiICsgY3VycmVudCArICIgPT09IGZ1bmN0aW9uVHlw
ZSA/ICIgKyBjdXJyZW50ICsgIi5hcHBseShkZXB0aDApIDogIiArIGN1cnJlbnQ7Ci0gICAgICB9
KTsKLSAgICB9LAotCi0gICAgLy8gW2xvb2t1cF0KLSAgICAvLwotICAgIC8vIE9uIHN0YWNrLCBi
ZWZvcmU6IHZhbHVlLCAuLi4KLSAgICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHZhbHVlW25hbWVdLCAu
Li4KLSAgICAvLwotICAgIC8vIFJlcGxhY2UgdGhlIHZhbHVlIG9uIHRoZSBzdGFjayB3aXRoIHRo
ZSByZXN1bHQgb2YgbG9va2luZwotICAgIC8vIHVwIGBuYW1lYCBvbiBgdmFsdWVgCi0gICAgbG9v
a3VwOiBmdW5jdGlvbihuYW1lKSB7Ci0gICAgICB0aGlzLnJlcGxhY2VTdGFjayhmdW5jdGlvbihj
dXJyZW50KSB7Ci0gICAgICAgIHJldHVybiBjdXJyZW50ICsgIiA9PSBudWxsIHx8ICIgKyBjdXJy
ZW50ICsgIiA9PT0gZmFsc2UgPyAiICsgY3VycmVudCArICIgOiAiICsgdGhpcy5uYW1lTG9va3Vw
KGN1cnJlbnQsIG5hbWUsICdjb250ZXh0Jyk7Ci0gICAgICB9KTsKLSAgICB9LAotCi0gICAgLy8g
W2xvb2t1cERhdGFdCi0gICAgLy8KLSAgICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi4KLSAgICAv
LyBPbiBzdGFjaywgYWZ0ZXI6IGRhdGFbaWRdLCAuLi4KLSAgICAvLwotICAgIC8vIFB1c2ggdGhl
IHJlc3VsdCBvZiBsb29raW5nIHVwIGBpZGAgb24gdGhlIGN1cnJlbnQgZGF0YQotICAgIGxvb2t1
cERhdGE6IGZ1bmN0aW9uKGlkKSB7Ci0gICAgICB0aGlzLnB1c2godGhpcy5uYW1lTG9va3VwKCdk
YXRhJywgaWQsICdkYXRhJykpOwotICAgIH0sCi0KLSAgICAvLyBbcHVzaFN0cmluZ1BhcmFtXQot
ICAgIC8vCi0gICAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uCi0gICAgLy8gT24gc3RhY2ssIGFm
dGVyOiBzdHJpbmcsIGN1cnJlbnRDb250ZXh0LCAuLi4KLSAgICAvLwotICAgIC8vIFRoaXMgb3Bj
b2RlIGlzIGRlc2lnbmVkIGZvciB1c2UgaW4gc3RyaW5nIG1vZGUsIHdoaWNoCi0gICAgLy8gcHJv
dmlkZXMgdGhlIHN0cmluZyB2YWx1ZSBvZiBhIHBhcmFtZXRlciBhbG9uZyB3aXRoIGl0cwotICAg
IC8vIGRlcHRoIHJhdGhlciB0aGFuIHJlc29sdmluZyBpdCBpbW1lZGlhdGVseS4KLSAgICBwdXNo
U3RyaW5nUGFyYW06IGZ1bmN0aW9uKHN0cmluZywgdHlwZSkgewotICAgICAgdGhpcy5wdXNoU3Rh
Y2tMaXRlcmFsKCdkZXB0aCcgKyB0aGlzLmxhc3RDb250ZXh0KTsKLQotICAgICAgdGhpcy5wdXNo
U3RyaW5nKHR5cGUpOwotCi0gICAgICBpZiAodHlwZW9mIHN0cmluZyA9PT0gJ3N0cmluZycpIHsK
LSAgICAgICAgdGhpcy5wdXNoU3RyaW5nKHN0cmluZyk7Ci0gICAgICB9IGVsc2UgewotICAgICAg
ICB0aGlzLnB1c2hTdGFja0xpdGVyYWwoc3RyaW5nKTsKLSAgICAgIH0KLSAgICB9LAotCi0gICAg
ZW1wdHlIYXNoOiBmdW5jdGlvbigpIHsKLSAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbCgne30n
KTsKLQotICAgICAgaWYgKHRoaXMub3B0aW9ucy5zdHJpbmdQYXJhbXMpIHsKLSAgICAgICAgdGhp
cy5yZWdpc3RlcignaGFzaFR5cGVzJywgJ3t9Jyk7Ci0gICAgICB9Ci0gICAgfSwKLSAgICBwdXNo
SGFzaDogZnVuY3Rpb24oKSB7Ci0gICAgICB0aGlzLmhhc2ggPSB7dmFsdWVzOiBbXSwgdHlwZXM6
IFtdfTsKLSAgICB9LAotICAgIHBvcEhhc2g6IGZ1bmN0aW9uKCkgewotICAgICAgdmFyIGhhc2gg
PSB0aGlzLmhhc2g7Ci0gICAgICB0aGlzLmhhc2ggPSB1bmRlZmluZWQ7Ci0KLSAgICAgIGlmICh0
aGlzLm9wdGlvbnMuc3RyaW5nUGFyYW1zKSB7Ci0gICAgICAgIHRoaXMucmVnaXN0ZXIoJ2hhc2hU
eXBlcycsICd7JyArIGhhc2gudHlwZXMuam9pbignLCcpICsgJ30nKTsKLSAgICAgIH0KLSAgICAg
IHRoaXMucHVzaCgne1xuICAgICcgKyBoYXNoLnZhbHVlcy5qb2luKCcsXG4gICAgJykgKyAnXG4g
IH0nKTsKLSAgICB9LAotCi0gICAgLy8gW3B1c2hTdHJpbmddCi0gICAgLy8KLSAgICAvLyBPbiBz
dGFjaywgYmVmb3JlOiAuLi4KLSAgICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHF1b3RlZFN0cmluZyhz
dHJpbmcpLCAuLi4KLSAgICAvLwotICAgIC8vIFB1c2ggYSBxdW90ZWQgdmVyc2lvbiBvZiBgc3Ry
aW5nYCBvbnRvIHRoZSBzdGFjawotICAgIHB1c2hTdHJpbmc6IGZ1bmN0aW9uKHN0cmluZykgewot
ICAgICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKHRoaXMucXVvdGVkU3RyaW5nKHN0cmluZykpOwot
ICAgIH0sCi0KLSAgICAvLyBbcHVzaF0KLSAgICAvLwotICAgIC8vIE9uIHN0YWNrLCBiZWZvcmU6
IC4uLgotICAgIC8vIE9uIHN0YWNrLCBhZnRlcjogZXhwciwgLi4uCi0gICAgLy8KLSAgICAvLyBQ
dXNoIGFuIGV4cHJlc3Npb24gb250byB0aGUgc3RhY2sKLSAgICBwdXNoOiBmdW5jdGlvbihleHBy
KSB7Ci0gICAgICB0aGlzLmlubGluZVN0YWNrLnB1c2goZXhwcik7Ci0gICAgICByZXR1cm4gZXhw
cjsKLSAgICB9LAotCi0gICAgLy8gW3B1c2hMaXRlcmFsXQotICAgIC8vCi0gICAgLy8gT24gc3Rh
Y2ssIGJlZm9yZTogLi4uCi0gICAgLy8gT24gc3RhY2ssIGFmdGVyOiB2YWx1ZSwgLi4uCi0gICAg
Ly8KLSAgICAvLyBQdXNoZXMgYSB2YWx1ZSBvbnRvIHRoZSBzdGFjay4gVGhpcyBvcGVyYXRpb24g
cHJldmVudHMKLSAgICAvLyB0aGUgY29tcGlsZXIgZnJvbSBjcmVhdGluZyBhIHRlbXBvcmFyeSB2
YXJpYWJsZSB0byBob2xkCi0gICAgLy8gaXQuCi0gICAgcHVzaExpdGVyYWw6IGZ1bmN0aW9uKHZh
bHVlKSB7Ci0gICAgICB0aGlzLnB1c2hTdGFja0xpdGVyYWwodmFsdWUpOwotICAgIH0sCi0KLSAg
ICAvLyBbcHVzaFByb2dyYW1dCi0gICAgLy8KLSAgICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi4K
LSAgICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHByb2dyYW0oZ3VpZCksIC4uLgotICAgIC8vCi0gICAg
Ly8gUHVzaCBhIHByb2dyYW0gZXhwcmVzc2lvbiBvbnRvIHRoZSBzdGFjay4gVGhpcyB0YWtlcwot
ICAgIC8vIGEgY29tcGlsZS10aW1lIGd1aWQgYW5kIGNvbnZlcnRzIGl0IGludG8gYSBydW50aW1l
LWFjY2Vzc2libGUKLSAgICAvLyBleHByZXNzaW9uLgotICAgIHB1c2hQcm9ncmFtOiBmdW5jdGlv
bihndWlkKSB7Ci0gICAgICBpZiAoZ3VpZCAhPSBudWxsKSB7Ci0gICAgICAgIHRoaXMucHVzaFN0
YWNrTGl0ZXJhbCh0aGlzLnByb2dyYW1FeHByZXNzaW9uKGd1aWQpKTsKLSAgICAgIH0gZWxzZSB7
Ci0gICAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbChudWxsKTsKLSAgICAgIH0KLSAgICB9LAot
Ci0gICAgLy8gW2ludm9rZUhlbHBlcl0KLSAgICAvLwotICAgIC8vIE9uIHN0YWNrLCBiZWZvcmU6
IGhhc2gsIGludmVyc2UsIHByb2dyYW0sIHBhcmFtcy4uLiwgLi4uCi0gICAgLy8gT24gc3RhY2ss
IGFmdGVyOiByZXN1bHQgb2YgaGVscGVyIGludm9jYXRpb24KLSAgICAvLwotICAgIC8vIFBvcHMg
b2ZmIHRoZSBoZWxwZXIncyBwYXJhbWV0ZXJzLCBpbnZva2VzIHRoZSBoZWxwZXIsCi0gICAgLy8g
YW5kIHB1c2hlcyB0aGUgaGVscGVyJ3MgcmV0dXJuIHZhbHVlIG9udG8gdGhlIHN0YWNrLgotICAg
IC8vCi0gICAgLy8gSWYgdGhlIGhlbHBlciBpcyBub3QgZm91bmQsIGBoZWxwZXJNaXNzaW5nYCBp
cyBjYWxsZWQuCi0gICAgaW52b2tlSGVscGVyOiBmdW5jdGlvbihwYXJhbVNpemUsIG5hbWUpIHsK
LSAgICAgIHRoaXMuY29udGV4dC5hbGlhc2VzLmhlbHBlck1pc3NpbmcgPSAnaGVscGVycy5oZWxw
ZXJNaXNzaW5nJzsKLQotICAgICAgdmFyIGhlbHBlciA9IHRoaXMubGFzdEhlbHBlciA9IHRoaXMu
c2V0dXBIZWxwZXIocGFyYW1TaXplLCBuYW1lLCB0cnVlKTsKLQotICAgICAgdGhpcy5wdXNoKGhl
bHBlci5uYW1lKTsKLSAgICAgIHRoaXMucmVwbGFjZVN0YWNrKGZ1bmN0aW9uKG5hbWUpIHsKLSAg
ICAgICAgcmV0dXJuIG5hbWUgKyAnID8gJyArIG5hbWUgKyAnLmNhbGwoJyArCi0gICAgICAgICAg
ICBoZWxwZXIuY2FsbFBhcmFtcyArICIpICIgKyAiOiBoZWxwZXJNaXNzaW5nLmNhbGwoIiArCi0g
ICAgICAgICAgICBoZWxwZXIuaGVscGVyTWlzc2luZ1BhcmFtcyArICIpIjsKLSAgICAgIH0pOwot
ICAgIH0sCi0KLSAgICAvLyBbaW52b2tlS25vd25IZWxwZXJdCi0gICAgLy8KLSAgICAvLyBPbiBz
dGFjaywgYmVmb3JlOiBoYXNoLCBpbnZlcnNlLCBwcm9ncmFtLCBwYXJhbXMuLi4sIC4uLgotICAg
IC8vIE9uIHN0YWNrLCBhZnRlcjogcmVzdWx0IG9mIGhlbHBlciBpbnZvY2F0aW9uCi0gICAgLy8K
LSAgICAvLyBUaGlzIG9wZXJhdGlvbiBpcyB1c2VkIHdoZW4gdGhlIGhlbHBlciBpcyBrbm93biB0
byBleGlzdCwKLSAgICAvLyBzbyBhIGBoZWxwZXJNaXNzaW5nYCBmYWxsYmFjayBpcyBub3QgcmVx
dWlyZWQuCi0gICAgaW52b2tlS25vd25IZWxwZXI6IGZ1bmN0aW9uKHBhcmFtU2l6ZSwgbmFtZSkg
ewotICAgICAgdmFyIGhlbHBlciA9IHRoaXMuc2V0dXBIZWxwZXIocGFyYW1TaXplLCBuYW1lKTsK
LSAgICAgIHRoaXMucHVzaChoZWxwZXIubmFtZSArICIuY2FsbCgiICsgaGVscGVyLmNhbGxQYXJh
bXMgKyAiKSIpOwotICAgIH0sCi0KLSAgICAvLyBbaW52b2tlQW1iaWd1b3VzXQotICAgIC8vCi0g
ICAgLy8gT24gc3RhY2ssIGJlZm9yZTogaGFzaCwgaW52ZXJzZSwgcHJvZ3JhbSwgcGFyYW1zLi4u
LCAuLi4KLSAgICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHJlc3VsdCBvZiBkaXNhbWJpZ3VhdGlvbgot
ICAgIC8vCi0gICAgLy8gVGhpcyBvcGVyYXRpb24gaXMgdXNlZCB3aGVuIGFuIGV4cHJlc3Npb24g
bGlrZSBge3tmb299fWAKLSAgICAvLyBpcyBwcm92aWRlZCwgYnV0IHdlIGRvbid0IGtub3cgYXQg
Y29tcGlsZS10aW1lIHdoZXRoZXIgaXQKLSAgICAvLyBpcyBhIGhlbHBlciBvciBhIHBhdGguCi0g
ICAgLy8KLSAgICAvLyBUaGlzIG9wZXJhdGlvbiBlbWl0cyBtb3JlIGNvZGUgdGhhbiB0aGUgb3Ro
ZXIgb3B0aW9ucywKLSAgICAvLyBhbmQgY2FuIGJlIGF2b2lkZWQgYnkgcGFzc2luZyB0aGUgYGtu
b3duSGVscGVyc2AgYW5kCi0gICAgLy8gYGtub3duSGVscGVyc09ubHlgIGZsYWdzIGF0IGNvbXBp
bGUtdGltZS4KLSAgICBpbnZva2VBbWJpZ3VvdXM6IGZ1bmN0aW9uKG5hbWUsIGhlbHBlckNhbGwp
IHsKLSAgICAgIHRoaXMuY29udGV4dC5hbGlhc2VzLmZ1bmN0aW9uVHlwZSA9ICciZnVuY3Rpb24i
JzsKLQotICAgICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKCd7fScpOyAgICAvLyBIYXNoIHZhbHVl
Ci0gICAgICB2YXIgaGVscGVyID0gdGhpcy5zZXR1cEhlbHBlcigwLCBuYW1lLCBoZWxwZXJDYWxs
KTsKLQotICAgICAgdmFyIGhlbHBlck5hbWUgPSB0aGlzLmxhc3RIZWxwZXIgPSB0aGlzLm5hbWVM
b29rdXAoJ2hlbHBlcnMnLCBuYW1lLCAnaGVscGVyJyk7Ci0KLSAgICAgIHZhciBub25IZWxwZXIg
PSB0aGlzLm5hbWVMb29rdXAoJ2RlcHRoJyArIHRoaXMubGFzdENvbnRleHQsIG5hbWUsICdjb250
ZXh0Jyk7Ci0gICAgICB2YXIgbmV4dFN0YWNrID0gdGhpcy5uZXh0U3RhY2soKTsKLQotICAgICAg
dGhpcy5zb3VyY2UucHVzaCgnaWYgKCcgKyBuZXh0U3RhY2sgKyAnID0gJyArIGhlbHBlck5hbWUg
KyAnKSB7ICcgKyBuZXh0U3RhY2sgKyAnID0gJyArIG5leHRTdGFjayArICcuY2FsbCgnICsgaGVs
cGVyLmNhbGxQYXJhbXMgKyAnKTsgfScpOwotICAgICAgdGhpcy5zb3VyY2UucHVzaCgnZWxzZSB7
ICcgKyBuZXh0U3RhY2sgKyAnID0gJyArIG5vbkhlbHBlciArICc7ICcgKyBuZXh0U3RhY2sgKyAn
ID0gdHlwZW9mICcgKyBuZXh0U3RhY2sgKyAnID09PSBmdW5jdGlvblR5cGUgPyAnICsgbmV4dFN0
YWNrICsgJy5hcHBseShkZXB0aDApIDogJyArIG5leHRTdGFjayArICc7IH0nKTsKLSAgICB9LAot
Ci0gICAgLy8gW2ludm9rZVBhcnRpYWxdCi0gICAgLy8KLSAgICAvLyBPbiBzdGFjaywgYmVmb3Jl
OiBjb250ZXh0LCAuLi4KLSAgICAvLyBPbiBzdGFjayBhZnRlcjogcmVzdWx0IG9mIHBhcnRpYWwg
aW52b2NhdGlvbgotICAgIC8vCi0gICAgLy8gVGhpcyBvcGVyYXRpb24gcG9wcyBvZmYgYSBjb250
ZXh0LCBpbnZva2VzIGEgcGFydGlhbCB3aXRoIHRoYXQgY29udGV4dCwKLSAgICAvLyBhbmQgcHVz
aGVzIHRoZSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24gYmFjay4KLSAgICBpbnZva2VQYXJ0aWFs
OiBmdW5jdGlvbihuYW1lKSB7Ci0gICAgICB2YXIgcGFyYW1zID0gW3RoaXMubmFtZUxvb2t1cCgn
cGFydGlhbHMnLCBuYW1lLCAncGFydGlhbCcpLCAiJyIgKyBuYW1lICsgIiciLCB0aGlzLnBvcFN0
YWNrKCksICJoZWxwZXJzIiwgInBhcnRpYWxzIl07Ci0KLSAgICAgIGlmICh0aGlzLm9wdGlvbnMu
ZGF0YSkgewotICAgICAgICBwYXJhbXMucHVzaCgiZGF0YSIpOwotICAgICAgfQotCi0gICAgICB0
aGlzLmNvbnRleHQuYWxpYXNlcy5zZWxmID0gInRoaXMiOwotICAgICAgdGhpcy5wdXNoKCJzZWxm
Lmludm9rZVBhcnRpYWwoIiArIHBhcmFtcy5qb2luKCIsICIpICsgIikiKTsKLSAgICB9LAotCi0g
ICAgLy8gW2Fzc2lnblRvSGFzaF0KLSAgICAvLwotICAgIC8vIE9uIHN0YWNrLCBiZWZvcmU6IHZh
bHVlLCBoYXNoLCAuLi4KLSAgICAvLyBPbiBzdGFjaywgYWZ0ZXI6IGhhc2gsIC4uLgotICAgIC8v
Ci0gICAgLy8gUG9wcyBhIHZhbHVlIGFuZCBoYXNoIG9mZiB0aGUgc3RhY2ssIGFzc2lnbnMgYGhh
c2hba2V5XSA9IHZhbHVlYAotICAgIC8vIGFuZCBwdXNoZXMgdGhlIGhhc2ggYmFjayBvbnRvIHRo
ZSBzdGFjay4KLSAgICBhc3NpZ25Ub0hhc2g6IGZ1bmN0aW9uKGtleSkgewotICAgICAgdmFyIHZh
bHVlID0gdGhpcy5wb3BTdGFjaygpLAotICAgICAgICAgIHR5cGU7Ci0KLSAgICAgIGlmICh0aGlz
Lm9wdGlvbnMuc3RyaW5nUGFyYW1zKSB7Ci0gICAgICAgIHR5cGUgPSB0aGlzLnBvcFN0YWNrKCk7
Ci0gICAgICAgIHRoaXMucG9wU3RhY2soKTsKLSAgICAgIH0KLQotICAgICAgdmFyIGhhc2ggPSB0
aGlzLmhhc2g7Ci0gICAgICBpZiAodHlwZSkgewotICAgICAgICBoYXNoLnR5cGVzLnB1c2goIici
ICsga2V5ICsgIic6ICIgKyB0eXBlKTsKLSAgICAgIH0KLSAgICAgIGhhc2gudmFsdWVzLnB1c2go
IiciICsga2V5ICsgIic6ICgiICsgdmFsdWUgKyAiKSIpOwotICAgIH0sCi0KLSAgICAvLyBIRUxQ
RVJTCi0KLSAgICBjb21waWxlcjogSmF2YVNjcmlwdENvbXBpbGVyLAotCi0gICAgY29tcGlsZUNo
aWxkcmVuOiBmdW5jdGlvbihlbnZpcm9ubWVudCwgb3B0aW9ucykgewotICAgICAgdmFyIGNoaWxk
cmVuID0gZW52aXJvbm1lbnQuY2hpbGRyZW4sIGNoaWxkLCBjb21waWxlcjsKLQotICAgICAgZm9y
KHZhciBpPTAsIGw9Y2hpbGRyZW4ubGVuZ3RoOyBpPGw7IGkrKykgewotICAgICAgICBjaGlsZCA9
IGNoaWxkcmVuW2ldOwotICAgICAgICBjb21waWxlciA9IG5ldyB0aGlzLmNvbXBpbGVyKCk7Ci0K
LSAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5tYXRjaEV4aXN0aW5nUHJvZ3JhbShjaGlsZCk7Ci0K
LSAgICAgICAgaWYgKGluZGV4ID09IG51bGwpIHsKLSAgICAgICAgICB0aGlzLmNvbnRleHQucHJv
Z3JhbXMucHVzaCgnJyk7ICAgICAvLyBQbGFjZWhvbGRlciB0byBwcmV2ZW50IG5hbWUgY29uZmxp
Y3RzIGZvciBuZXN0ZWQgY2hpbGRyZW4KLSAgICAgICAgICBpbmRleCA9IHRoaXMuY29udGV4dC5w
cm9ncmFtcy5sZW5ndGg7Ci0gICAgICAgICAgY2hpbGQuaW5kZXggPSBpbmRleDsKLSAgICAgICAg
ICBjaGlsZC5uYW1lID0gJ3Byb2dyYW0nICsgaW5kZXg7Ci0gICAgICAgICAgdGhpcy5jb250ZXh0
LnByb2dyYW1zW2luZGV4XSA9IGNvbXBpbGVyLmNvbXBpbGUoY2hpbGQsIG9wdGlvbnMsIHRoaXMu
Y29udGV4dCk7Ci0gICAgICAgICAgdGhpcy5jb250ZXh0LmVudmlyb25tZW50c1tpbmRleF0gPSBj
aGlsZDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBjaGlsZC5pbmRleCA9IGluZGV4Owot
ICAgICAgICAgIGNoaWxkLm5hbWUgPSAncHJvZ3JhbScgKyBpbmRleDsKLSAgICAgICAgfQotICAg
ICAgfQotICAgIH0sCi0gICAgbWF0Y2hFeGlzdGluZ1Byb2dyYW06IGZ1bmN0aW9uKGNoaWxkKSB7
Ci0gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5jb250ZXh0LmVudmlyb25tZW50cy5s
ZW5ndGg7IGkgPCBsZW47IGkrKykgewotICAgICAgICB2YXIgZW52aXJvbm1lbnQgPSB0aGlzLmNv
bnRleHQuZW52aXJvbm1lbnRzW2ldOwotICAgICAgICBpZiAoZW52aXJvbm1lbnQgJiYgZW52aXJv
bm1lbnQuZXF1YWxzKGNoaWxkKSkgewotICAgICAgICAgIHJldHVybiBpOwotICAgICAgICB9Ci0g
ICAgICB9Ci0gICAgfSwKLQotICAgIHByb2dyYW1FeHByZXNzaW9uOiBmdW5jdGlvbihndWlkKSB7
Ci0gICAgICB0aGlzLmNvbnRleHQuYWxpYXNlcy5zZWxmID0gInRoaXMiOwotCi0gICAgICBpZihn
dWlkID09IG51bGwpIHsKLSAgICAgICAgcmV0dXJuICJzZWxmLm5vb3AiOwotICAgICAgfQotCi0g
ICAgICB2YXIgY2hpbGQgPSB0aGlzLmVudmlyb25tZW50LmNoaWxkcmVuW2d1aWRdLAotICAgICAg
ICAgIGRlcHRocyA9IGNoaWxkLmRlcHRocy5saXN0LCBkZXB0aDsKLQotICAgICAgdmFyIHByb2dy
YW1QYXJhbXMgPSBbY2hpbGQuaW5kZXgsIGNoaWxkLm5hbWUsICJkYXRhIl07Ci0KLSAgICAgIGZv
cih2YXIgaT0wLCBsID0gZGVwdGhzLmxlbmd0aDsgaTxsOyBpKyspIHsKLSAgICAgICAgZGVwdGgg
PSBkZXB0aHNbaV07Ci0KLSAgICAgICAgaWYoZGVwdGggPT09IDEpIHsgcHJvZ3JhbVBhcmFtcy5w
dXNoKCJkZXB0aDAiKTsgfQotICAgICAgICBlbHNlIHsgcHJvZ3JhbVBhcmFtcy5wdXNoKCJkZXB0
aCIgKyAoZGVwdGggLSAxKSk7IH0KLSAgICAgIH0KLQotICAgICAgaWYoZGVwdGhzLmxlbmd0aCA9
PT0gMCkgewotICAgICAgICByZXR1cm4gInNlbGYucHJvZ3JhbSgiICsgcHJvZ3JhbVBhcmFtcy5q
b2luKCIsICIpICsgIikiOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcHJvZ3JhbVBhcmFtcy5z
aGlmdCgpOwotICAgICAgICByZXR1cm4gInNlbGYucHJvZ3JhbVdpdGhEZXB0aCgiICsgcHJvZ3Jh
bVBhcmFtcy5qb2luKCIsICIpICsgIikiOwotICAgICAgfQotICAgIH0sCi0KLSAgICByZWdpc3Rl
cjogZnVuY3Rpb24obmFtZSwgdmFsKSB7Ci0gICAgICB0aGlzLnVzZVJlZ2lzdGVyKG5hbWUpOwot
ICAgICAgdGhpcy5zb3VyY2UucHVzaChuYW1lICsgIiA9ICIgKyB2YWwgKyAiOyIpOwotICAgIH0s
Ci0KLSAgICB1c2VSZWdpc3RlcjogZnVuY3Rpb24obmFtZSkgewotICAgICAgaWYoIXRoaXMucmVn
aXN0ZXJzW25hbWVdKSB7Ci0gICAgICAgIHRoaXMucmVnaXN0ZXJzW25hbWVdID0gdHJ1ZTsKLSAg
ICAgICAgdGhpcy5yZWdpc3RlcnMubGlzdC5wdXNoKG5hbWUpOwotICAgICAgfQotICAgIH0sCi0K
LSAgICBwdXNoU3RhY2tMaXRlcmFsOiBmdW5jdGlvbihpdGVtKSB7Ci0gICAgICByZXR1cm4gdGhp
cy5wdXNoKG5ldyBMaXRlcmFsKGl0ZW0pKTsKLSAgICB9LAotCi0gICAgcHVzaFN0YWNrOiBmdW5j
dGlvbihpdGVtKSB7Ci0gICAgICB0aGlzLmZsdXNoSW5saW5lKCk7Ci0KLSAgICAgIHZhciBzdGFj
ayA9IHRoaXMuaW5jclN0YWNrKCk7Ci0gICAgICBpZiAoaXRlbSkgewotICAgICAgICB0aGlzLnNv
dXJjZS5wdXNoKHN0YWNrICsgIiA9ICIgKyBpdGVtICsgIjsiKTsKLSAgICAgIH0KLSAgICAgIHRo
aXMuY29tcGlsZVN0YWNrLnB1c2goc3RhY2spOwotICAgICAgcmV0dXJuIHN0YWNrOwotICAgIH0s
Ci0KLSAgICByZXBsYWNlU3RhY2s6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7Ci0gICAgICB2YXIgcHJl
Zml4ID0gJycsCi0gICAgICAgICAgaW5saW5lID0gdGhpcy5pc0lubGluZSgpLAotICAgICAgICAg
IHN0YWNrOwotCi0gICAgICAvLyBJZiB3ZSBhcmUgY3VycmVudGx5IGlubGluZSB0aGVuIHdlIHdh
bnQgdG8gbWVyZ2UgdGhlIGlubGluZSBzdGF0ZW1lbnQgaW50byB0aGUKLSAgICAgIC8vIHJlcGxh
Y2VtZW50IHN0YXRlbWVudCB2aWEgJywnCi0gICAgICBpZiAoaW5saW5lKSB7Ci0gICAgICAgIHZh
ciB0b3AgPSB0aGlzLnBvcFN0YWNrKHRydWUpOwotCi0gICAgICAgIGlmICh0b3AgaW5zdGFuY2Vv
ZiBMaXRlcmFsKSB7Ci0gICAgICAgICAgLy8gTGl0ZXJhbHMgZG8gbm90IG5lZWQgdG8gYmUgaW5s
aW5lZAotICAgICAgICAgIHN0YWNrID0gdG9wLnZhbHVlOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgIC8vIEdldCBvciBjcmVhdGUgdGhlIGN1cnJlbnQgc3RhY2sgbmFtZSBmb3IgdXNlIGJ5
IHRoZSBpbmxpbmUKLSAgICAgICAgICB2YXIgbmFtZSA9IHRoaXMuc3RhY2tTbG90ID8gdGhpcy50
b3BTdGFja05hbWUoKSA6IHRoaXMuaW5jclN0YWNrKCk7Ci0KLSAgICAgICAgICBwcmVmaXggPSAn
KCcgKyB0aGlzLnB1c2gobmFtZSkgKyAnID0gJyArIHRvcCArICcpLCc7Ci0gICAgICAgICAgc3Rh
Y2sgPSB0aGlzLnRvcFN0YWNrKCk7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAg
IHN0YWNrID0gdGhpcy50b3BTdGFjaygpOwotICAgICAgfQotCi0gICAgICB2YXIgaXRlbSA9IGNh
bGxiYWNrLmNhbGwodGhpcywgc3RhY2spOwotCi0gICAgICBpZiAoaW5saW5lKSB7Ci0gICAgICAg
IGlmICh0aGlzLmlubGluZVN0YWNrLmxlbmd0aCB8fCB0aGlzLmNvbXBpbGVTdGFjay5sZW5ndGgp
IHsKLSAgICAgICAgICB0aGlzLnBvcFN0YWNrKCk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5w
dXNoKCcoJyArIHByZWZpeCArIGl0ZW0gKyAnKScpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAg
Ly8gUHJldmVudCBtb2RpZmljYXRpb24gb2YgdGhlIGNvbnRleHQgZGVwdGggdmFyaWFibGUuIFRo
cm91Z2ggcmVwbGFjZVN0YWNrCi0gICAgICAgIGlmICghL15zdGFjay8udGVzdChzdGFjaykpIHsK
LSAgICAgICAgICBzdGFjayA9IHRoaXMubmV4dFN0YWNrKCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICB0aGlzLnNvdXJjZS5wdXNoKHN0YWNrICsgIiA9ICgiICsgcHJlZml4ICsgaXRlbSArICIpOyIp
OwotICAgICAgfQotICAgICAgcmV0dXJuIHN0YWNrOwotICAgIH0sCi0KLSAgICBuZXh0U3RhY2s6
IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCk7Ci0gICAgfSwKLQot
ICAgIGluY3JTdGFjazogZnVuY3Rpb24oKSB7Ci0gICAgICB0aGlzLnN0YWNrU2xvdCsrOwotICAg
ICAgaWYodGhpcy5zdGFja1Nsb3QgPiB0aGlzLnN0YWNrVmFycy5sZW5ndGgpIHsgdGhpcy5zdGFj
a1ZhcnMucHVzaCgic3RhY2siICsgdGhpcy5zdGFja1Nsb3QpOyB9Ci0gICAgICByZXR1cm4gdGhp
cy50b3BTdGFja05hbWUoKTsKLSAgICB9LAotICAgIHRvcFN0YWNrTmFtZTogZnVuY3Rpb24oKSB7
Ci0gICAgICByZXR1cm4gInN0YWNrIiArIHRoaXMuc3RhY2tTbG90OwotICAgIH0sCi0gICAgZmx1
c2hJbmxpbmU6IGZ1bmN0aW9uKCkgewotICAgICAgdmFyIGlubGluZVN0YWNrID0gdGhpcy5pbmxp
bmVTdGFjazsKLSAgICAgIGlmIChpbmxpbmVTdGFjay5sZW5ndGgpIHsKLSAgICAgICAgdGhpcy5p
bmxpbmVTdGFjayA9IFtdOwotICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gaW5saW5lU3Rh
Y2subGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgICB2YXIgZW50cnkgPSBpbmxpbmVT
dGFja1tpXTsKLSAgICAgICAgICBpZiAoZW50cnkgaW5zdGFuY2VvZiBMaXRlcmFsKSB7Ci0gICAg
ICAgICAgICB0aGlzLmNvbXBpbGVTdGFjay5wdXNoKGVudHJ5KTsKLSAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgdGhpcy5wdXNoU3RhY2soZW50cnkpOwotICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgfQotICAgIH0sCi0gICAgaXNJbmxpbmU6IGZ1bmN0aW9uKCkgewotICAgICAg
cmV0dXJuIHRoaXMuaW5saW5lU3RhY2subGVuZ3RoOwotICAgIH0sCi0KLSAgICBwb3BTdGFjazog
ZnVuY3Rpb24od3JhcHBlZCkgewotICAgICAgdmFyIGlubGluZSA9IHRoaXMuaXNJbmxpbmUoKSwK
LSAgICAgICAgICBpdGVtID0gKGlubGluZSA/IHRoaXMuaW5saW5lU3RhY2sgOiB0aGlzLmNvbXBp
bGVTdGFjaykucG9wKCk7Ci0KLSAgICAgIGlmICghd3JhcHBlZCAmJiAoaXRlbSBpbnN0YW5jZW9m
IExpdGVyYWwpKSB7Ci0gICAgICAgIHJldHVybiBpdGVtLnZhbHVlOwotICAgICAgfSBlbHNlIHsK
LSAgICAgICAgaWYgKCFpbmxpbmUpIHsKLSAgICAgICAgICB0aGlzLnN0YWNrU2xvdC0tOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBpdGVtOwotICAgICAgfQotICAgIH0sCi0KLSAgICB0b3BT
dGFjazogZnVuY3Rpb24od3JhcHBlZCkgewotICAgICAgdmFyIHN0YWNrID0gKHRoaXMuaXNJbmxp
bmUoKSA/IHRoaXMuaW5saW5lU3RhY2sgOiB0aGlzLmNvbXBpbGVTdGFjayksCi0gICAgICAgICAg
aXRlbSA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdOwotCi0gICAgICBpZiAoIXdyYXBwZWQgJiYg
KGl0ZW0gaW5zdGFuY2VvZiBMaXRlcmFsKSkgewotICAgICAgICByZXR1cm4gaXRlbS52YWx1ZTsK
LSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBpdGVtOwotICAgICAgfQotICAgIH0sCi0K
LSAgICBxdW90ZWRTdHJpbmc6IGZ1bmN0aW9uKHN0cikgewotICAgICAgcmV0dXJuICciJyArIHN0
cgotICAgICAgICAucmVwbGFjZSgvXFwvZywgJ1xcXFwnKQotICAgICAgICAucmVwbGFjZSgvIi9n
LCAnXFwiJykKLSAgICAgICAgLnJlcGxhY2UoL1xuL2csICdcXG4nKQotICAgICAgICAucmVwbGFj
ZSgvXHIvZywgJ1xccicpICsgJyInOwotICAgIH0sCi0KLSAgICBzZXR1cEhlbHBlcjogZnVuY3Rp
b24ocGFyYW1TaXplLCBuYW1lLCBtaXNzaW5nUGFyYW1zKSB7Ci0gICAgICB2YXIgcGFyYW1zID0g
W107Ci0gICAgICB0aGlzLnNldHVwUGFyYW1zKHBhcmFtU2l6ZSwgcGFyYW1zLCBtaXNzaW5nUGFy
YW1zKTsKLSAgICAgIHZhciBmb3VuZEhlbHBlciA9IHRoaXMubmFtZUxvb2t1cCgnaGVscGVycycs
IG5hbWUsICdoZWxwZXInKTsKLQotICAgICAgcmV0dXJuIHsKLSAgICAgICAgcGFyYW1zOiBwYXJh
bXMsCi0gICAgICAgIG5hbWU6IGZvdW5kSGVscGVyLAotICAgICAgICBjYWxsUGFyYW1zOiBbImRl
cHRoMCJdLmNvbmNhdChwYXJhbXMpLmpvaW4oIiwgIiksCi0gICAgICAgIGhlbHBlck1pc3NpbmdQ
YXJhbXM6IG1pc3NpbmdQYXJhbXMgJiYgWyJkZXB0aDAiLCB0aGlzLnF1b3RlZFN0cmluZyhuYW1l
KV0uY29uY2F0KHBhcmFtcykuam9pbigiLCAiKQotICAgICAgfTsKLSAgICB9LAotCi0gICAgLy8g
dGhlIHBhcmFtcyBhbmQgY29udGV4dHMgYXJndW1lbnRzIGFyZSBwYXNzZWQgaW4gYXJyYXlzCi0g
ICAgLy8gdG8gZmlsbCBpbgotICAgIHNldHVwUGFyYW1zOiBmdW5jdGlvbihwYXJhbVNpemUsIHBh
cmFtcywgdXNlUmVnaXN0ZXIpIHsKLSAgICAgIHZhciBvcHRpb25zID0gW10sIGNvbnRleHRzID0g
W10sIHR5cGVzID0gW10sIHBhcmFtLCBpbnZlcnNlLCBwcm9ncmFtOwotCi0gICAgICBvcHRpb25z
LnB1c2goImhhc2g6IiArIHRoaXMucG9wU3RhY2soKSk7Ci0KLSAgICAgIGludmVyc2UgPSB0aGlz
LnBvcFN0YWNrKCk7Ci0gICAgICBwcm9ncmFtID0gdGhpcy5wb3BTdGFjaygpOwotCi0gICAgICAv
LyBBdm9pZCBzZXR0aW5nIGZuIGFuZCBpbnZlcnNlIGlmIG5laXRoZXIgYXJlIHNldC4gVGhpcyBh
bGxvd3MKLSAgICAgIC8vIGhlbHBlcnMgdG8gZG8gYSBjaGVjayBmb3IgYGlmIChvcHRpb25zLmZu
KWAKLSAgICAgIGlmIChwcm9ncmFtIHx8IGludmVyc2UpIHsKLSAgICAgICAgaWYgKCFwcm9ncmFt
KSB7Ci0gICAgICAgICAgdGhpcy5jb250ZXh0LmFsaWFzZXMuc2VsZiA9ICJ0aGlzIjsKLSAgICAg
ICAgICBwcm9ncmFtID0gInNlbGYubm9vcCI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWlu
dmVyc2UpIHsKLSAgICAgICAgIHRoaXMuY29udGV4dC5hbGlhc2VzLnNlbGYgPSAidGhpcyI7Ci0g
ICAgICAgICAgaW52ZXJzZSA9ICJzZWxmLm5vb3AiOwotICAgICAgICB9Ci0KLSAgICAgICAgb3B0
aW9ucy5wdXNoKCJpbnZlcnNlOiIgKyBpbnZlcnNlKTsKLSAgICAgICAgb3B0aW9ucy5wdXNoKCJm
bjoiICsgcHJvZ3JhbSk7Ci0gICAgICB9Ci0KLSAgICAgIGZvcih2YXIgaT0wOyBpPHBhcmFtU2l6
ZTsgaSsrKSB7Ci0gICAgICAgIHBhcmFtID0gdGhpcy5wb3BTdGFjaygpOwotICAgICAgICBwYXJh
bXMucHVzaChwYXJhbSk7Ci0KLSAgICAgICAgaWYodGhpcy5vcHRpb25zLnN0cmluZ1BhcmFtcykg
ewotICAgICAgICAgIHR5cGVzLnB1c2godGhpcy5wb3BTdGFjaygpKTsKLSAgICAgICAgICBjb250
ZXh0cy5wdXNoKHRoaXMucG9wU3RhY2soKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAg
aWYgKHRoaXMub3B0aW9ucy5zdHJpbmdQYXJhbXMpIHsKLSAgICAgICAgb3B0aW9ucy5wdXNoKCJj
b250ZXh0czpbIiArIGNvbnRleHRzLmpvaW4oIiwiKSArICJdIik7Ci0gICAgICAgIG9wdGlvbnMu
cHVzaCgidHlwZXM6WyIgKyB0eXBlcy5qb2luKCIsIikgKyAiXSIpOwotICAgICAgICBvcHRpb25z
LnB1c2goImhhc2hUeXBlczpoYXNoVHlwZXMiKTsKLSAgICAgIH0KLQotICAgICAgaWYodGhpcy5v
cHRpb25zLmRhdGEpIHsKLSAgICAgICAgb3B0aW9ucy5wdXNoKCJkYXRhOmRhdGEiKTsKLSAgICAg
IH0KLQotICAgICAgb3B0aW9ucyA9ICJ7IiArIG9wdGlvbnMuam9pbigiLCIpICsgIn0iOwotICAg
ICAgaWYgKHVzZVJlZ2lzdGVyKSB7Ci0gICAgICAgIHRoaXMucmVnaXN0ZXIoJ29wdGlvbnMnLCBv
cHRpb25zKTsKLSAgICAgICAgcGFyYW1zLnB1c2goJ29wdGlvbnMnKTsKLSAgICAgIH0gZWxzZSB7
Ci0gICAgICAgIHBhcmFtcy5wdXNoKG9wdGlvbnMpOwotICAgICAgfQotICAgICAgcmV0dXJuIHBh
cmFtcy5qb2luKCIsICIpOwotICAgIH0KLSAgfTsKLQotICB2YXIgcmVzZXJ2ZWRXb3JkcyA9ICgK
LSAgICAiYnJlYWsgZWxzZSBuZXcgdmFyIiArCi0gICAgIiBjYXNlIGZpbmFsbHkgcmV0dXJuIHZv
aWQiICsKLSAgICAiIGNhdGNoIGZvciBzd2l0Y2ggd2hpbGUiICsKLSAgICAiIGNvbnRpbnVlIGZ1
bmN0aW9uIHRoaXMgd2l0aCIgKwotICAgICIgZGVmYXVsdCBpZiB0aHJvdyIgKwotICAgICIgZGVs
ZXRlIGluIHRyeSIgKwotICAgICIgZG8gaW5zdGFuY2VvZiB0eXBlb2YiICsKLSAgICAiIGFic3Ry
YWN0IGVudW0gaW50IHNob3J0IiArCi0gICAgIiBib29sZWFuIGV4cG9ydCBpbnRlcmZhY2Ugc3Rh
dGljIiArCi0gICAgIiBieXRlIGV4dGVuZHMgbG9uZyBzdXBlciIgKwotICAgICIgY2hhciBmaW5h
bCBuYXRpdmUgc3luY2hyb25pemVkIiArCi0gICAgIiBjbGFzcyBmbG9hdCBwYWNrYWdlIHRocm93
cyIgKwotICAgICIgY29uc3QgZ290byBwcml2YXRlIHRyYW5zaWVudCIgKwotICAgICIgZGVidWdn
ZXIgaW1wbGVtZW50cyBwcm90ZWN0ZWQgdm9sYXRpbGUiICsKLSAgICAiIGRvdWJsZSBpbXBvcnQg
cHVibGljIGxldCB5aWVsZCIKLSAgKS5zcGxpdCgiICIpOwotCi0gIHZhciBjb21waWxlcldvcmRz
ID0gSmF2YVNjcmlwdENvbXBpbGVyLlJFU0VSVkVEX1dPUkRTID0ge307Ci0KLSAgZm9yKHZhciBp
PTAsIGw9cmVzZXJ2ZWRXb3Jkcy5sZW5ndGg7IGk8bDsgaSsrKSB7Ci0gICAgY29tcGlsZXJXb3Jk
c1tyZXNlcnZlZFdvcmRzW2ldXSA9IHRydWU7Ci0gIH0KLQotICBKYXZhU2NyaXB0Q29tcGlsZXIu
aXNWYWxpZEphdmFTY3JpcHRWYXJpYWJsZU5hbWUgPSBmdW5jdGlvbihuYW1lKSB7Ci0gICAgaWYo
IUphdmFTY3JpcHRDb21waWxlci5SRVNFUlZFRF9XT1JEU1tuYW1lXSAmJiAvXlthLXpBLVpfJF1b
MC05YS16QS1aXyRdKyQvLnRlc3QobmFtZSkpIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgICByZXR1cm4gZmFsc2U7Ci0gIH07Ci0KLX0pKEhhbmRsZWJhcnMuQ29tcGlsZXIsIEhhbmRs
ZWJhcnMuSmF2YVNjcmlwdENvbXBpbGVyKTsKLQotSGFuZGxlYmFycy5wcmVjb21waWxlID0gZnVu
Y3Rpb24oaW5wdXQsIG9wdGlvbnMpIHsKLSAgaWYgKCFpbnB1dCB8fCAodHlwZW9mIGlucHV0ICE9
PSAnc3RyaW5nJyAmJiBpbnB1dC5jb25zdHJ1Y3RvciAhPT0gSGFuZGxlYmFycy5BU1QuUHJvZ3Jh
bU5vZGUpKSB7Ci0gICAgdGhyb3cgbmV3IEhhbmRsZWJhcnMuRXhjZXB0aW9uKCJZb3UgbXVzdCBw
YXNzIGEgc3RyaW5nIG9yIEhhbmRsZWJhcnMgQVNUIHRvIEhhbmRsZWJhcnMuY29tcGlsZS4gWW91
IHBhc3NlZCAiICsgaW5wdXQpOwotICB9Ci0KLSAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307Ci0g
IGlmICghKCdkYXRhJyBpbiBvcHRpb25zKSkgewotICAgIG9wdGlvbnMuZGF0YSA9IHRydWU7Ci0g
IH0KLSAgdmFyIGFzdCA9IEhhbmRsZWJhcnMucGFyc2UoaW5wdXQpOwotICB2YXIgZW52aXJvbm1l
bnQgPSBuZXcgSGFuZGxlYmFycy5Db21waWxlcigpLmNvbXBpbGUoYXN0LCBvcHRpb25zKTsKLSAg
cmV0dXJuIG5ldyBIYW5kbGViYXJzLkphdmFTY3JpcHRDb21waWxlcigpLmNvbXBpbGUoZW52aXJv
bm1lbnQsIG9wdGlvbnMpOwotfTsKLQotSGFuZGxlYmFycy5jb21waWxlID0gZnVuY3Rpb24oaW5w
dXQsIG9wdGlvbnMpIHsKLSAgaWYgKCFpbnB1dCB8fCAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5n
JyAmJiBpbnB1dC5jb25zdHJ1Y3RvciAhPT0gSGFuZGxlYmFycy5BU1QuUHJvZ3JhbU5vZGUpKSB7
Ci0gICAgdGhyb3cgbmV3IEhhbmRsZWJhcnMuRXhjZXB0aW9uKCJZb3UgbXVzdCBwYXNzIGEgc3Ry
aW5nIG9yIEhhbmRsZWJhcnMgQVNUIHRvIEhhbmRsZWJhcnMuY29tcGlsZS4gWW91IHBhc3NlZCAi
ICsgaW5wdXQpOwotICB9Ci0KLSAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307Ci0gIGlmICghKCdk
YXRhJyBpbiBvcHRpb25zKSkgewotICAgIG9wdGlvbnMuZGF0YSA9IHRydWU7Ci0gIH0KLSAgdmFy
IGNvbXBpbGVkOwotICBmdW5jdGlvbiBjb21waWxlKCkgewotICAgIHZhciBhc3QgPSBIYW5kbGVi
YXJzLnBhcnNlKGlucHV0KTsKLSAgICB2YXIgZW52aXJvbm1lbnQgPSBuZXcgSGFuZGxlYmFycy5D
b21waWxlcigpLmNvbXBpbGUoYXN0LCBvcHRpb25zKTsKLSAgICB2YXIgdGVtcGxhdGVTcGVjID0g
bmV3IEhhbmRsZWJhcnMuSmF2YVNjcmlwdENvbXBpbGVyKCkuY29tcGlsZShlbnZpcm9ubWVudCwg
b3B0aW9ucywgdW5kZWZpbmVkLCB0cnVlKTsKLSAgICByZXR1cm4gSGFuZGxlYmFycy50ZW1wbGF0
ZSh0ZW1wbGF0ZVNwZWMpOwotICB9Ci0KLSAgLy8gVGVtcGxhdGUgaXMgb25seSBjb21waWxlZCBv
biBmaXJzdCB1c2UgYW5kIGNhY2hlZCBhZnRlciB0aGF0IHBvaW50LgotICByZXR1cm4gZnVuY3Rp
b24oY29udGV4dCwgb3B0aW9ucykgewotICAgIGlmICghY29tcGlsZWQpIHsKLSAgICAgIGNvbXBp
bGVkID0gY29tcGlsZSgpOwotICAgIH0KLSAgICByZXR1cm4gY29tcGlsZWQuY2FsbCh0aGlzLCBj
b250ZXh0LCBvcHRpb25zKTsKLSAgfTsKLX07Ci07Ci0vLyBsaWIvaGFuZGxlYmFycy9ydW50aW1l
LmpzCi1IYW5kbGViYXJzLlZNID0gewotICB0ZW1wbGF0ZTogZnVuY3Rpb24odGVtcGxhdGVTcGVj
KSB7Ci0gICAgLy8gSnVzdCBhZGQgd2F0ZXIKLSAgICB2YXIgY29udGFpbmVyID0gewotICAgICAg
ZXNjYXBlRXhwcmVzc2lvbjogSGFuZGxlYmFycy5VdGlscy5lc2NhcGVFeHByZXNzaW9uLAotICAg
ICAgaW52b2tlUGFydGlhbDogSGFuZGxlYmFycy5WTS5pbnZva2VQYXJ0aWFsLAotICAgICAgcHJv
Z3JhbXM6IFtdLAotICAgICAgcHJvZ3JhbTogZnVuY3Rpb24oaSwgZm4sIGRhdGEpIHsKLSAgICAg
ICAgdmFyIHByb2dyYW1XcmFwcGVyID0gdGhpcy5wcm9ncmFtc1tpXTsKLSAgICAgICAgaWYoZGF0
YSkgewotICAgICAgICAgIHJldHVybiBIYW5kbGViYXJzLlZNLnByb2dyYW0oZm4sIGRhdGEpOwot
ICAgICAgICB9IGVsc2UgaWYocHJvZ3JhbVdyYXBwZXIpIHsKLSAgICAgICAgICByZXR1cm4gcHJv
Z3JhbVdyYXBwZXI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgcHJvZ3JhbVdyYXBwZXIg
PSB0aGlzLnByb2dyYW1zW2ldID0gSGFuZGxlYmFycy5WTS5wcm9ncmFtKGZuKTsKLSAgICAgICAg
ICByZXR1cm4gcHJvZ3JhbVdyYXBwZXI7Ci0gICAgICAgIH0KLSAgICAgIH0sCi0gICAgICBwcm9n
cmFtV2l0aERlcHRoOiBIYW5kbGViYXJzLlZNLnByb2dyYW1XaXRoRGVwdGgsCi0gICAgICBub29w
OiBIYW5kbGViYXJzLlZNLm5vb3AsCi0gICAgICBjb21waWxlckluZm86IG51bGwKLSAgICB9Owot
Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHsKLSAgICAgIG9wdGlvbnMg
PSBvcHRpb25zIHx8IHt9OwotICAgICAgdmFyIHJlc3VsdCA9IHRlbXBsYXRlU3BlYy5jYWxsKGNv
bnRhaW5lciwgSGFuZGxlYmFycywgY29udGV4dCwgb3B0aW9ucy5oZWxwZXJzLCBvcHRpb25zLnBh
cnRpYWxzLCBvcHRpb25zLmRhdGEpOwotCi0gICAgICB2YXIgY29tcGlsZXJJbmZvID0gY29udGFp
bmVyLmNvbXBpbGVySW5mbyB8fCBbXSwKLSAgICAgICAgICBjb21waWxlclJldmlzaW9uID0gY29t
cGlsZXJJbmZvWzBdIHx8IDEsCi0gICAgICAgICAgY3VycmVudFJldmlzaW9uID0gSGFuZGxlYmFy
cy5DT01QSUxFUl9SRVZJU0lPTjsKLQotICAgICAgaWYgKGNvbXBpbGVyUmV2aXNpb24gIT09IGN1
cnJlbnRSZXZpc2lvbikgewotICAgICAgICBpZiAoY29tcGlsZXJSZXZpc2lvbiA8IGN1cnJlbnRS
ZXZpc2lvbikgewotICAgICAgICAgIHZhciBydW50aW1lVmVyc2lvbnMgPSBIYW5kbGViYXJzLlJF
VklTSU9OX0NIQU5HRVNbY3VycmVudFJldmlzaW9uXSwKLSAgICAgICAgICAgICAgY29tcGlsZXJW
ZXJzaW9ucyA9IEhhbmRsZWJhcnMuUkVWSVNJT05fQ0hBTkdFU1tjb21waWxlclJldmlzaW9uXTsK
LSAgICAgICAgICB0aHJvdyAiVGVtcGxhdGUgd2FzIHByZWNvbXBpbGVkIHdpdGggYW4gb2xkZXIg
dmVyc2lvbiBvZiBIYW5kbGViYXJzIHRoYW4gdGhlIGN1cnJlbnQgcnVudGltZS4gIisKLSAgICAg
ICAgICAgICAgICAiUGxlYXNlIHVwZGF0ZSB5b3VyIHByZWNvbXBpbGVyIHRvIGEgbmV3ZXIgdmVy
c2lvbiAoIitydW50aW1lVmVyc2lvbnMrIikgb3IgZG93bmdyYWRlIHlvdXIgcnVudGltZSB0byBh
biBvbGRlciB2ZXJzaW9uICgiK2NvbXBpbGVyVmVyc2lvbnMrIikuIjsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAvLyBVc2UgdGhlIGVtYmVkZGVkIHZlcnNpb24gaW5mbyBzaW5jZSB0aGUg
cnVudGltZSBkb2Vzbid0IGtub3cgYWJvdXQgdGhpcyByZXZpc2lvbiB5ZXQKLSAgICAgICAgICB0
aHJvdyAiVGVtcGxhdGUgd2FzIHByZWNvbXBpbGVkIHdpdGggYSBuZXdlciB2ZXJzaW9uIG9mIEhh
bmRsZWJhcnMgdGhhbiB0aGUgY3VycmVudCBydW50aW1lLiAiKwotICAgICAgICAgICAgICAgICJQ
bGVhc2UgdXBkYXRlIHlvdXIgcnVudGltZSB0byBhIG5ld2VyIHZlcnNpb24gKCIrY29tcGlsZXJJ
bmZvWzFdKyIpLiI7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICB9OwotICB9LAotCi0gIHByb2dyYW1XaXRoRGVwdGg6IGZ1bmN0aW9uKGZuLCBkYXRhLCAk
ZGVwdGgpIHsKLSAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3Vt
ZW50cywgMik7Ci0KLSAgICByZXR1cm4gZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykgewotICAg
ICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307Ci0KLSAgICAgIHJldHVybiBmbi5hcHBseSh0aGlz
LCBbY29udGV4dCwgb3B0aW9ucy5kYXRhIHx8IGRhdGFdLmNvbmNhdChhcmdzKSk7Ci0gICAgfTsK
LSAgfSwKLSAgcHJvZ3JhbTogZnVuY3Rpb24oZm4sIGRhdGEpIHsKLSAgICByZXR1cm4gZnVuY3Rp
b24oY29udGV4dCwgb3B0aW9ucykgewotICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307Ci0K
LSAgICAgIHJldHVybiBmbihjb250ZXh0LCBvcHRpb25zLmRhdGEgfHwgZGF0YSk7Ci0gICAgfTsK
LSAgfSwKLSAgbm9vcDogZnVuY3Rpb24oKSB7IHJldHVybiAiIjsgfSwKLSAgaW52b2tlUGFydGlh
bDogZnVuY3Rpb24ocGFydGlhbCwgbmFtZSwgY29udGV4dCwgaGVscGVycywgcGFydGlhbHMsIGRh
dGEpIHsKLSAgICB2YXIgb3B0aW9ucyA9IHsgaGVscGVyczogaGVscGVycywgcGFydGlhbHM6IHBh
cnRpYWxzLCBkYXRhOiBkYXRhIH07Ci0KLSAgICBpZihwYXJ0aWFsID09PSB1bmRlZmluZWQpIHsK
LSAgICAgIHRocm93IG5ldyBIYW5kbGViYXJzLkV4Y2VwdGlvbigiVGhlIHBhcnRpYWwgIiArIG5h
bWUgKyAiIGNvdWxkIG5vdCBiZSBmb3VuZCIpOwotICAgIH0gZWxzZSBpZihwYXJ0aWFsIGluc3Rh
bmNlb2YgRnVuY3Rpb24pIHsKLSAgICAgIHJldHVybiBwYXJ0aWFsKGNvbnRleHQsIG9wdGlvbnMp
OwotICAgIH0gZWxzZSBpZiAoIUhhbmRsZWJhcnMuY29tcGlsZSkgewotICAgICAgdGhyb3cgbmV3
IEhhbmRsZWJhcnMuRXhjZXB0aW9uKCJUaGUgcGFydGlhbCAiICsgbmFtZSArICIgY291bGQgbm90
IGJlIGNvbXBpbGVkIHdoZW4gcnVubmluZyBpbiBydW50aW1lLW9ubHkgbW9kZSIpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICBwYXJ0aWFsc1tuYW1lXSA9IEhhbmRsZWJhcnMuY29tcGlsZShwYXJ0aWFs
LCB7ZGF0YTogZGF0YSAhPT0gdW5kZWZpbmVkfSk7Ci0gICAgICByZXR1cm4gcGFydGlhbHNbbmFt
ZV0oY29udGV4dCwgb3B0aW9ucyk7Ci0gICAgfQotICB9Ci19OwotCi1IYW5kbGViYXJzLnRlbXBs
YXRlID0gSGFuZGxlYmFycy5WTS50ZW1wbGF0ZTsKLTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L2pxdWVyeS9ib3dlcl9jb21wb25lbnRzL2pxdWVyeS9qcXVlcnkuanMgYi9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9q
cXVlcnkvYm93ZXJfY29tcG9uZW50cy9qcXVlcnkvanF1ZXJ5LmpzCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwM2ZlZWYyZDk5YWUyM2JkNjliMTAzZGZjZDZmNjQ2ZDBmOGZmZTFjLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNl
VGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L2pxdWVyeS9ib3dlcl9jb21wb25lbnRzL2pxdWVyeS9qcXVlcnkuanMKKysrIC9kZXYvbnVsbApA
QCAtMSw5NTk3ICswLDAgQEAKLS8qIQotICogalF1ZXJ5IEphdmFTY3JpcHQgTGlicmFyeSB2MS45
LjEKLSAqIGh0dHA6Ly9qcXVlcnkuY29tLwotICoKLSAqIEluY2x1ZGVzIFNpenpsZS5qcwotICog
aHR0cDovL3NpenpsZWpzLmNvbS8KLSAqCi0gKiBDb3B5cmlnaHQgMjAwNSwgMjAxMiBqUXVlcnkg
Rm91bmRhdGlvbiwgSW5jLiBhbmQgb3RoZXIgY29udHJpYnV0b3JzCi0gKiBSZWxlYXNlZCB1bmRl
ciB0aGUgTUlUIGxpY2Vuc2UKLSAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2UKLSAqCi0gKiBE
YXRlOiAyMDEzLTItNAotICovCi0oZnVuY3Rpb24oIHdpbmRvdywgdW5kZWZpbmVkICkgewotCi0v
LyBDYW4ndCBkbyB0aGlzIGJlY2F1c2Ugc2V2ZXJhbCBhcHBzIGluY2x1ZGluZyBBU1AuTkVUIHRy
YWNlCi0vLyB0aGUgc3RhY2sgdmlhIGFyZ3VtZW50cy5jYWxsZXIuY2FsbGVlIGFuZCBGaXJlZm94
IGRpZXMgaWYKLS8vIHlvdSB0cnkgdG8gdHJhY2UgdGhyb3VnaCAidXNlIHN0cmljdCIgY2FsbCBj
aGFpbnMuICgjMTMzMzUpCi0vLyBTdXBwb3J0OiBGaXJlZm94IDE4KwotLy8idXNlIHN0cmljdCI7
Ci12YXIKLSAgICAvLyBUaGUgZGVmZXJyZWQgdXNlZCBvbiBET00gcmVhZHkKLSAgICByZWFkeUxp
c3QsCi0KLSAgICAvLyBBIGNlbnRyYWwgcmVmZXJlbmNlIHRvIHRoZSByb290IGpRdWVyeShkb2N1
bWVudCkKLSAgICByb290alF1ZXJ5LAotCi0gICAgLy8gU3VwcG9ydDogSUU8OQotICAgIC8vIEZv
ciBgdHlwZW9mIG5vZGUubWV0aG9kYCBpbnN0ZWFkIG9mIGBub2RlLm1ldGhvZCAhPT0gdW5kZWZp
bmVkYAotICAgIGNvcmVfc3RydW5kZWZpbmVkID0gdHlwZW9mIHVuZGVmaW5lZCwKLQotICAgIC8v
IFVzZSB0aGUgY29ycmVjdCBkb2N1bWVudCBhY2NvcmRpbmdseSB3aXRoIHdpbmRvdyBhcmd1bWVu
dCAoc2FuZGJveCkKLSAgICBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudCwKLSAgICBsb2NhdGlv
biA9IHdpbmRvdy5sb2NhdGlvbiwKLQotICAgIC8vIE1hcCBvdmVyIGpRdWVyeSBpbiBjYXNlIG9m
IG92ZXJ3cml0ZQotICAgIF9qUXVlcnkgPSB3aW5kb3cualF1ZXJ5LAotCi0gICAgLy8gTWFwIG92
ZXIgdGhlICQgaW4gY2FzZSBvZiBvdmVyd3JpdGUKLSAgICBfJCA9IHdpbmRvdy4kLAotCi0gICAg
Ly8gW1tDbGFzc11dIC0+IHR5cGUgcGFpcnMKLSAgICBjbGFzczJ0eXBlID0ge30sCi0KLSAgICAv
LyBMaXN0IG9mIGRlbGV0ZWQgZGF0YSBjYWNoZSBpZHMsIHNvIHdlIGNhbiByZXVzZSB0aGVtCi0g
ICAgY29yZV9kZWxldGVkSWRzID0gW10sCi0KLSAgICBjb3JlX3ZlcnNpb24gPSAiMS45LjEiLAot
Ci0gICAgLy8gU2F2ZSBhIHJlZmVyZW5jZSB0byBzb21lIGNvcmUgbWV0aG9kcwotICAgIGNvcmVf
Y29uY2F0ID0gY29yZV9kZWxldGVkSWRzLmNvbmNhdCwKLSAgICBjb3JlX3B1c2ggPSBjb3JlX2Rl
bGV0ZWRJZHMucHVzaCwKLSAgICBjb3JlX3NsaWNlID0gY29yZV9kZWxldGVkSWRzLnNsaWNlLAot
ICAgIGNvcmVfaW5kZXhPZiA9IGNvcmVfZGVsZXRlZElkcy5pbmRleE9mLAotICAgIGNvcmVfdG9T
dHJpbmcgPSBjbGFzczJ0eXBlLnRvU3RyaW5nLAotICAgIGNvcmVfaGFzT3duID0gY2xhc3MydHlw
ZS5oYXNPd25Qcm9wZXJ0eSwKLSAgICBjb3JlX3RyaW0gPSBjb3JlX3ZlcnNpb24udHJpbSwKLQot
ICAgIC8vIERlZmluZSBhIGxvY2FsIGNvcHkgb2YgalF1ZXJ5Ci0gICAgalF1ZXJ5ID0gZnVuY3Rp
b24oIHNlbGVjdG9yLCBjb250ZXh0ICkgewotICAgIC8vIFRoZSBqUXVlcnkgb2JqZWN0IGlzIGFj
dHVhbGx5IGp1c3QgdGhlIGluaXQgY29uc3RydWN0b3IgJ2VuaGFuY2VkJwotICAgIHJldHVybiBu
ZXcgalF1ZXJ5LmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0LCByb290alF1ZXJ5ICk7Ci0gICAg
fSwKLQotICAgIC8vIFVzZWQgZm9yIG1hdGNoaW5nIG51bWJlcnMKLSAgICBjb3JlX3BudW0gPSAv
WystXT8oPzpcZCpcLnwpXGQrKD86W2VFXVsrLV0/XGQrfCkvLnNvdXJjZSwKLQotICAgIC8vIFVz
ZWQgZm9yIHNwbGl0dGluZyBvbiB3aGl0ZXNwYWNlCi0gICAgY29yZV9ybm90d2hpdGUgPSAvXFMr
L2csCi0KLSAgICAvLyBNYWtlIHN1cmUgd2UgdHJpbSBCT00gYW5kIE5CU1AgKGhlcmUncyBsb29r
aW5nIGF0IHlvdSwgU2FmYXJpIDUuMCBhbmQgSUUpCi0gICAgcnRyaW0gPSAvXltcc1x1RkVGRlx4
QTBdK3xbXHNcdUZFRkZceEEwXSskL2csCi0KLSAgICAvLyBBIHNpbXBsZSB3YXkgdG8gY2hlY2sg
Zm9yIEhUTUwgc3RyaW5ncwotICAgIC8vIFByaW9yaXRpemUgI2lkIG92ZXIgPHRhZz4gdG8gYXZv
aWQgWFNTIHZpYSBsb2NhdGlvbi5oYXNoICgjOTUyMSkKLSAgICAvLyBTdHJpY3QgSFRNTCByZWNv
Z25pdGlvbiAoIzExMjkwOiBtdXN0IHN0YXJ0IHdpdGggPCkKLSAgICBycXVpY2tFeHByID0gL14o
PzooPFtcd1xXXSs+KVtePl0qfCMoW1x3LV0qKSkkLywKLQotICAgIC8vIE1hdGNoIGEgc3RhbmRh
bG9uZSB0YWcKLSAgICByc2luZ2xlVGFnID0gL148KFx3KylccypcLz8+KD86PFwvXDE+fCkkLywK
LQotICAgIC8vIEpTT04gUmVnRXhwCi0gICAgcnZhbGlkY2hhcnMgPSAvXltcXSw6e31cc10qJC8s
Ci0gICAgcnZhbGlkYnJhY2VzID0gLyg/Ol58OnwsKSg/OlxzKlxbKSsvZywKLSAgICBydmFsaWRl
c2NhcGUgPSAvXFwoPzpbIlxcXC9iZm5ydF18dVtcZGEtZkEtRl17NH0pL2csCi0gICAgcnZhbGlk
dG9rZW5zID0gLyJbXiJcXFxyXG5dKiJ8dHJ1ZXxmYWxzZXxudWxsfC0/KD86XGQrXC58KVxkKyg/
OltlRV1bKy1dP1xkK3wpL2csCi0KLSAgICAvLyBNYXRjaGVzIGRhc2hlZCBzdHJpbmcgZm9yIGNh
bWVsaXppbmcKLSAgICBybXNQcmVmaXggPSAvXi1tcy0vLAotICAgIHJkYXNoQWxwaGEgPSAvLShb
XGRhLXpdKS9naSwKLQotICAgIC8vIFVzZWQgYnkgalF1ZXJ5LmNhbWVsQ2FzZSBhcyBjYWxsYmFj
ayB0byByZXBsYWNlKCkKLSAgICBmY2FtZWxDYXNlID0gZnVuY3Rpb24oIGFsbCwgbGV0dGVyICkg
ewotICAgIHJldHVybiBsZXR0ZXIudG9VcHBlckNhc2UoKTsKLSAgICB9LAotCi0gICAgLy8gVGhl
IHJlYWR5IGV2ZW50IGhhbmRsZXIKLSAgICBjb21wbGV0ZWQgPSBmdW5jdGlvbiggZXZlbnQgKSB7
Ci0KLSAgICAvLyByZWFkeVN0YXRlID09PSAiY29tcGxldGUiIGlzIGdvb2QgZW5vdWdoIGZvciB1
cyB0byBjYWxsIHRoZSBkb20gcmVhZHkgaW4gb2xkSUUKLSAgICBpZiAoIGRvY3VtZW50LmFkZEV2
ZW50TGlzdGVuZXIgfHwgZXZlbnQudHlwZSA9PT0gImxvYWQiIHx8IGRvY3VtZW50LnJlYWR5U3Rh
dGUgPT09ICJjb21wbGV0ZSIgKSB7Ci0gICAgZGV0YWNoKCk7Ci0gICAgalF1ZXJ5LnJlYWR5KCk7
Ci0gICAgfQotICAgIH0sCi0gICAgLy8gQ2xlYW4tdXAgbWV0aG9kIGZvciBkb20gcmVhZHkgZXZl
bnRzCi0gICAgZGV0YWNoID0gZnVuY3Rpb24oKSB7Ci0gICAgaWYgKCBkb2N1bWVudC5hZGRFdmVu
dExpc3RlbmVyICkgewotICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoICJET01Db250
ZW50TG9hZGVkIiwgY29tcGxldGVkLCBmYWxzZSApOwotICAgIHdpbmRvdy5yZW1vdmVFdmVudExp
c3RlbmVyKCAibG9hZCIsIGNvbXBsZXRlZCwgZmFsc2UgKTsKLQotICAgIH0gZWxzZSB7Ci0gICAg
ZG9jdW1lbnQuZGV0YWNoRXZlbnQoICJvbnJlYWR5c3RhdGVjaGFuZ2UiLCBjb21wbGV0ZWQgKTsK
LSAgICB3aW5kb3cuZGV0YWNoRXZlbnQoICJvbmxvYWQiLCBjb21wbGV0ZWQgKTsKLSAgICB9Ci0g
ICAgfTsKLQotalF1ZXJ5LmZuID0galF1ZXJ5LnByb3RvdHlwZSA9IHsKLSAgICAvLyBUaGUgY3Vy
cmVudCB2ZXJzaW9uIG9mIGpRdWVyeSBiZWluZyB1c2VkCi0gICAganF1ZXJ5OiBjb3JlX3ZlcnNp
b24sCi0KLSAgICBjb25zdHJ1Y3RvcjogalF1ZXJ5LAotICAgIGluaXQ6IGZ1bmN0aW9uKCBzZWxl
Y3RvciwgY29udGV4dCwgcm9vdGpRdWVyeSApIHsKLSAgICB2YXIgbWF0Y2gsIGVsZW07Ci0KLSAg
ICAvLyBIQU5ETEU6ICQoIiIpLCAkKG51bGwpLCAkKHVuZGVmaW5lZCksICQoZmFsc2UpCi0gICAg
aWYgKCAhc2VsZWN0b3IgKSB7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotCi0gICAgLy8gSGFu
ZGxlIEhUTUwgc3RyaW5ncwotICAgIGlmICggdHlwZW9mIHNlbGVjdG9yID09PSAic3RyaW5nIiAp
IHsKLSAgICBpZiAoIHNlbGVjdG9yLmNoYXJBdCgwKSA9PT0gIjwiICYmIHNlbGVjdG9yLmNoYXJB
dCggc2VsZWN0b3IubGVuZ3RoIC0gMSApID09PSAiPiIgJiYgc2VsZWN0b3IubGVuZ3RoID49IDMg
KSB7Ci0gICAgLy8gQXNzdW1lIHRoYXQgc3RyaW5ncyB0aGF0IHN0YXJ0IGFuZCBlbmQgd2l0aCA8
PiBhcmUgSFRNTCBhbmQgc2tpcCB0aGUgcmVnZXggY2hlY2sKLSAgICBtYXRjaCA9IFsgbnVsbCwg
c2VsZWN0b3IsIG51bGwgXTsKLQotICAgIH0gZWxzZSB7Ci0gICAgbWF0Y2ggPSBycXVpY2tFeHBy
LmV4ZWMoIHNlbGVjdG9yICk7Ci0gICAgfQotCi0gICAgLy8gTWF0Y2ggaHRtbCBvciBtYWtlIHN1
cmUgbm8gY29udGV4dCBpcyBzcGVjaWZpZWQgZm9yICNpZAotICAgIGlmICggbWF0Y2ggJiYgKG1h
dGNoWzFdIHx8ICFjb250ZXh0KSApIHsKLQotICAgIC8vIEhBTkRMRTogJChodG1sKSAtPiAkKGFy
cmF5KQotICAgIGlmICggbWF0Y2hbMV0gKSB7Ci0gICAgY29udGV4dCA9IGNvbnRleHQgaW5zdGFu
Y2VvZiBqUXVlcnkgPyBjb250ZXh0WzBdIDogY29udGV4dDsKLQotICAgIC8vIHNjcmlwdHMgaXMg
dHJ1ZSBmb3IgYmFjay1jb21wYXQKLSAgICBqUXVlcnkubWVyZ2UoIHRoaXMsIGpRdWVyeS5wYXJz
ZUhUTUwoCi0gICAgbWF0Y2hbMV0sCi0gICAgY29udGV4dCAmJiBjb250ZXh0Lm5vZGVUeXBlID8g
Y29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgOiBkb2N1bWVudCwKLSAgICB0cnVlCi0g
ICAgKSApOwotCi0gICAgLy8gSEFORExFOiAkKGh0bWwsIHByb3BzKQotICAgIGlmICggcnNpbmds
ZVRhZy50ZXN0KCBtYXRjaFsxXSApICYmIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBjb250ZXh0ICkg
KSB7Ci0gICAgZm9yICggbWF0Y2ggaW4gY29udGV4dCApIHsKLSAgICAvLyBQcm9wZXJ0aWVzIG9m
IGNvbnRleHQgYXJlIGNhbGxlZCBhcyBtZXRob2RzIGlmIHBvc3NpYmxlCi0gICAgaWYgKCBqUXVl
cnkuaXNGdW5jdGlvbiggdGhpc1sgbWF0Y2ggXSApICkgewotICAgIHRoaXNbIG1hdGNoIF0oIGNv
bnRleHRbIG1hdGNoIF0gKTsKLQotICAgIC8vIC4uLmFuZCBvdGhlcndpc2Ugc2V0IGFzIGF0dHJp
YnV0ZXMKLSAgICB9IGVsc2UgewotICAgIHRoaXMuYXR0ciggbWF0Y2gsIGNvbnRleHRbIG1hdGNo
IF0gKTsKLSAgICB9Ci0gICAgfQotICAgIH0KLQotICAgIHJldHVybiB0aGlzOwotCi0gICAgLy8g
SEFORExFOiAkKCNpZCkKLSAgICB9IGVsc2UgewotICAgIGVsZW0gPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCggbWF0Y2hbMl0gKTsKLQotICAgIC8vIENoZWNrIHBhcmVudE5vZGUgdG8gY2F0Y2gg
d2hlbiBCbGFja2JlcnJ5IDQuNiByZXR1cm5zCi0gICAgLy8gbm9kZXMgdGhhdCBhcmUgbm8gbG9u
Z2VyIGluIHRoZSBkb2N1bWVudCAjNjk2MwotICAgIGlmICggZWxlbSAmJiBlbGVtLnBhcmVudE5v
ZGUgKSB7Ci0gICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIElFIGFuZCBPcGVyYSByZXR1cm4g
aXRlbXMKLSAgICAvLyBieSBuYW1lIGluc3RlYWQgb2YgSUQKLSAgICBpZiAoIGVsZW0uaWQgIT09
IG1hdGNoWzJdICkgewotICAgIHJldHVybiByb290alF1ZXJ5LmZpbmQoIHNlbGVjdG9yICk7Ci0g
ICAgfQotCi0gICAgLy8gT3RoZXJ3aXNlLCB3ZSBpbmplY3QgdGhlIGVsZW1lbnQgZGlyZWN0bHkg
aW50byB0aGUgalF1ZXJ5IG9iamVjdAotICAgIHRoaXMubGVuZ3RoID0gMTsKLSAgICB0aGlzWzBd
ID0gZWxlbTsKLSAgICB9Ci0KLSAgICB0aGlzLmNvbnRleHQgPSBkb2N1bWVudDsKLSAgICB0aGlz
LnNlbGVjdG9yID0gc2VsZWN0b3I7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotCi0gICAgLy8g
SEFORExFOiAkKGV4cHIsICQoLi4uKSkKLSAgICB9IGVsc2UgaWYgKCAhY29udGV4dCB8fCBjb250
ZXh0LmpxdWVyeSApIHsKLSAgICByZXR1cm4gKCBjb250ZXh0IHx8IHJvb3RqUXVlcnkgKS5maW5k
KCBzZWxlY3RvciApOwotCi0gICAgLy8gSEFORExFOiAkKGV4cHIsIGNvbnRleHQpCi0gICAgLy8g
KHdoaWNoIGlzIGp1c3QgZXF1aXZhbGVudCB0bzogJChjb250ZXh0KS5maW5kKGV4cHIpCi0gICAg
fSBlbHNlIHsKLSAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3RvciggY29udGV4dCApLmZpbmQoIHNl
bGVjdG9yICk7Ci0gICAgfQotCi0gICAgLy8gSEFORExFOiAkKERPTUVsZW1lbnQpCi0gICAgfSBl
bHNlIGlmICggc2VsZWN0b3Iubm9kZVR5cGUgKSB7Ci0gICAgdGhpcy5jb250ZXh0ID0gdGhpc1sw
XSA9IHNlbGVjdG9yOwotICAgIHRoaXMubGVuZ3RoID0gMTsKLSAgICByZXR1cm4gdGhpczsKLQot
ICAgIC8vIEhBTkRMRTogJChmdW5jdGlvbikKLSAgICAvLyBTaG9ydGN1dCBmb3IgZG9jdW1lbnQg
cmVhZHkKLSAgICB9IGVsc2UgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggc2VsZWN0b3IgKSApIHsK
LSAgICByZXR1cm4gcm9vdGpRdWVyeS5yZWFkeSggc2VsZWN0b3IgKTsKLSAgICB9Ci0KLSAgICBp
ZiAoIHNlbGVjdG9yLnNlbGVjdG9yICE9PSB1bmRlZmluZWQgKSB7Ci0gICAgdGhpcy5zZWxlY3Rv
ciA9IHNlbGVjdG9yLnNlbGVjdG9yOwotICAgIHRoaXMuY29udGV4dCA9IHNlbGVjdG9yLmNvbnRl
eHQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIGpRdWVyeS5tYWtlQXJyYXkoIHNlbGVjdG9yLCB0aGlz
ICk7Ci0gICAgfSwKLQotICAgIC8vIFN0YXJ0IHdpdGggYW4gZW1wdHkgc2VsZWN0b3IKLSAgICBz
ZWxlY3RvcjogIiIsCi0KLSAgICAvLyBUaGUgZGVmYXVsdCBsZW5ndGggb2YgYSBqUXVlcnkgb2Jq
ZWN0IGlzIDAKLSAgICBsZW5ndGg6IDAsCi0KLSAgICAvLyBUaGUgbnVtYmVyIG9mIGVsZW1lbnRz
IGNvbnRhaW5lZCBpbiB0aGUgbWF0Y2hlZCBlbGVtZW50IHNldAotICAgIHNpemU6IGZ1bmN0aW9u
KCkgewotICAgIHJldHVybiB0aGlzLmxlbmd0aDsKLSAgICB9LAotCi0gICAgdG9BcnJheTogZnVu
Y3Rpb24oKSB7Ci0gICAgcmV0dXJuIGNvcmVfc2xpY2UuY2FsbCggdGhpcyApOwotICAgIH0sCi0K
LSAgICAvLyBHZXQgdGhlIE50aCBlbGVtZW50IGluIHRoZSBtYXRjaGVkIGVsZW1lbnQgc2V0IE9S
Ci0gICAgLy8gR2V0IHRoZSB3aG9sZSBtYXRjaGVkIGVsZW1lbnQgc2V0IGFzIGEgY2xlYW4gYXJy
YXkKLSAgICBnZXQ6IGZ1bmN0aW9uKCBudW0gKSB7Ci0gICAgcmV0dXJuIG51bSA9PSBudWxsID8K
LQotICAgIC8vIFJldHVybiBhICdjbGVhbicgYXJyYXkKLSAgICB0aGlzLnRvQXJyYXkoKSA6Ci0K
LSAgICAvLyBSZXR1cm4ganVzdCB0aGUgb2JqZWN0Ci0gICAgKCBudW0gPCAwID8gdGhpc1sgdGhp
cy5sZW5ndGggKyBudW0gXSA6IHRoaXNbIG51bSBdICk7Ci0gICAgfSwKLQotICAgIC8vIFRha2Ug
YW4gYXJyYXkgb2YgZWxlbWVudHMgYW5kIHB1c2ggaXQgb250byB0aGUgc3RhY2sKLSAgICAvLyAo
cmV0dXJuaW5nIHRoZSBuZXcgbWF0Y2hlZCBlbGVtZW50IHNldCkKLSAgICBwdXNoU3RhY2s6IGZ1
bmN0aW9uKCBlbGVtcyApIHsKLQotICAgIC8vIEJ1aWxkIGEgbmV3IGpRdWVyeSBtYXRjaGVkIGVs
ZW1lbnQgc2V0Ci0gICAgdmFyIHJldCA9IGpRdWVyeS5tZXJnZSggdGhpcy5jb25zdHJ1Y3Rvcigp
LCBlbGVtcyApOwotCi0gICAgLy8gQWRkIHRoZSBvbGQgb2JqZWN0IG9udG8gdGhlIHN0YWNrIChh
cyBhIHJlZmVyZW5jZSkKLSAgICByZXQucHJldk9iamVjdCA9IHRoaXM7Ci0gICAgcmV0LmNvbnRl
eHQgPSB0aGlzLmNvbnRleHQ7Ci0KLSAgICAvLyBSZXR1cm4gdGhlIG5ld2x5LWZvcm1lZCBlbGVt
ZW50IHNldAotICAgIHJldHVybiByZXQ7Ci0gICAgfSwKLQotICAgIC8vIEV4ZWN1dGUgYSBjYWxs
YmFjayBmb3IgZXZlcnkgZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBzZXQuCi0gICAgLy8gKFlvdSBj
YW4gc2VlZCB0aGUgYXJndW1lbnRzIHdpdGggYW4gYXJyYXkgb2YgYXJncywgYnV0IHRoaXMgaXMK
LSAgICAvLyBvbmx5IHVzZWQgaW50ZXJuYWxseS4pCi0gICAgZWFjaDogZnVuY3Rpb24oIGNhbGxi
YWNrLCBhcmdzICkgewotICAgIHJldHVybiBqUXVlcnkuZWFjaCggdGhpcywgY2FsbGJhY2ssIGFy
Z3MgKTsKLSAgICB9LAotCi0gICAgcmVhZHk6IGZ1bmN0aW9uKCBmbiApIHsKLSAgICAvLyBBZGQg
dGhlIGNhbGxiYWNrCi0gICAgalF1ZXJ5LnJlYWR5LnByb21pc2UoKS5kb25lKCBmbiApOwotCi0g
ICAgcmV0dXJuIHRoaXM7Ci0gICAgfSwKLQotICAgIHNsaWNlOiBmdW5jdGlvbigpIHsKLSAgICBy
ZXR1cm4gdGhpcy5wdXNoU3RhY2soIGNvcmVfc2xpY2UuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyAp
ICk7Ci0gICAgfSwKLQotICAgIGZpcnN0OiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5l
cSggMCApOwotICAgIH0sCi0KLSAgICBsYXN0OiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhp
cy5lcSggLTEgKTsKLSAgICB9LAotCi0gICAgZXE6IGZ1bmN0aW9uKCBpICkgewotICAgIHZhciBs
ZW4gPSB0aGlzLmxlbmd0aCwKLSAgICBqID0gK2kgKyAoIGkgPCAwID8gbGVuIDogMCApOwotICAg
IHJldHVybiB0aGlzLnB1c2hTdGFjayggaiA+PSAwICYmIGogPCBsZW4gPyBbIHRoaXNbal0gXSA6
IFtdICk7Ci0gICAgfSwKLQotICAgIG1hcDogZnVuY3Rpb24oIGNhbGxiYWNrICkgewotICAgIHJl
dHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5Lm1hcCh0aGlzLCBmdW5jdGlvbiggZWxlbSwgaSAp
IHsKLSAgICByZXR1cm4gY2FsbGJhY2suY2FsbCggZWxlbSwgaSwgZWxlbSApOwotICAgIH0pKTsK
LSAgICB9LAotCi0gICAgZW5kOiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5wcmV2T2Jq
ZWN0IHx8IHRoaXMuY29uc3RydWN0b3IobnVsbCk7Ci0gICAgfSwKLQotICAgIC8vIEZvciBpbnRl
cm5hbCB1c2Ugb25seS4KLSAgICAvLyBCZWhhdmVzIGxpa2UgYW4gQXJyYXkncyBtZXRob2QsIG5v
dCBsaWtlIGEgalF1ZXJ5IG1ldGhvZC4KLSAgICBwdXNoOiBjb3JlX3B1c2gsCi0gICAgc29ydDog
W10uc29ydCwKLSAgICBzcGxpY2U6IFtdLnNwbGljZQotfTsKLQotLy8gR2l2ZSB0aGUgaW5pdCBm
dW5jdGlvbiB0aGUgalF1ZXJ5IHByb3RvdHlwZSBmb3IgbGF0ZXIgaW5zdGFudGlhdGlvbgotalF1
ZXJ5LmZuLmluaXQucHJvdG90eXBlID0galF1ZXJ5LmZuOwotCi1qUXVlcnkuZXh0ZW5kID0galF1
ZXJ5LmZuLmV4dGVuZCA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBzcmMsIGNvcHlJc0FycmF5LCBj
b3B5LCBuYW1lLCBvcHRpb25zLCBjbG9uZSwKLSAgICB0YXJnZXQgPSBhcmd1bWVudHNbMF0gfHwg
e30sCi0gICAgaSA9IDEsCi0gICAgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCwKLSAgICBkZWVw
ID0gZmFsc2U7Ci0KLSAgICAvLyBIYW5kbGUgYSBkZWVwIGNvcHkgc2l0dWF0aW9uCi0gICAgaWYg
KCB0eXBlb2YgdGFyZ2V0ID09PSAiYm9vbGVhbiIgKSB7Ci0gICAgZGVlcCA9IHRhcmdldDsKLSAg
ICB0YXJnZXQgPSBhcmd1bWVudHNbMV0gfHwge307Ci0gICAgLy8gc2tpcCB0aGUgYm9vbGVhbiBh
bmQgdGhlIHRhcmdldAotICAgIGkgPSAyOwotICAgIH0KLQotICAgIC8vIEhhbmRsZSBjYXNlIHdo
ZW4gdGFyZ2V0IGlzIGEgc3RyaW5nIG9yIHNvbWV0aGluZyAocG9zc2libGUgaW4gZGVlcCBjb3B5
KQotICAgIGlmICggdHlwZW9mIHRhcmdldCAhPT0gIm9iamVjdCIgJiYgIWpRdWVyeS5pc0Z1bmN0
aW9uKHRhcmdldCkgKSB7Ci0gICAgdGFyZ2V0ID0ge307Ci0gICAgfQotCi0gICAgLy8gZXh0ZW5k
IGpRdWVyeSBpdHNlbGYgaWYgb25seSBvbmUgYXJndW1lbnQgaXMgcGFzc2VkCi0gICAgaWYgKCBs
ZW5ndGggPT09IGkgKSB7Ci0gICAgdGFyZ2V0ID0gdGhpczsKLSAgICAtLWk7Ci0gICAgfQotCi0g
ICAgZm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7Ci0gICAgLy8gT25seSBkZWFsIHdpdGggbm9u
LW51bGwvdW5kZWZpbmVkIHZhbHVlcwotICAgIGlmICggKG9wdGlvbnMgPSBhcmd1bWVudHNbIGkg
XSkgIT0gbnVsbCApIHsKLSAgICAvLyBFeHRlbmQgdGhlIGJhc2Ugb2JqZWN0Ci0gICAgZm9yICgg
bmFtZSBpbiBvcHRpb25zICkgewotICAgIHNyYyA9IHRhcmdldFsgbmFtZSBdOwotICAgIGNvcHkg
PSBvcHRpb25zWyBuYW1lIF07Ci0KLSAgICAvLyBQcmV2ZW50IG5ldmVyLWVuZGluZyBsb29wCi0g
ICAgaWYgKCB0YXJnZXQgPT09IGNvcHkgKSB7Ci0gICAgY29udGludWU7Ci0gICAgfQotCi0gICAg
Ly8gUmVjdXJzZSBpZiB3ZSdyZSBtZXJnaW5nIHBsYWluIG9iamVjdHMgb3IgYXJyYXlzCi0gICAg
aWYgKCBkZWVwICYmIGNvcHkgJiYgKCBqUXVlcnkuaXNQbGFpbk9iamVjdChjb3B5KSB8fCAoY29w
eUlzQXJyYXkgPSBqUXVlcnkuaXNBcnJheShjb3B5KSkgKSApIHsKLSAgICBpZiAoIGNvcHlJc0Fy
cmF5ICkgewotICAgIGNvcHlJc0FycmF5ID0gZmFsc2U7Ci0gICAgY2xvbmUgPSBzcmMgJiYgalF1
ZXJ5LmlzQXJyYXkoc3JjKSA/IHNyYyA6IFtdOwotCi0gICAgfSBlbHNlIHsKLSAgICBjbG9uZSA9
IHNyYyAmJiBqUXVlcnkuaXNQbGFpbk9iamVjdChzcmMpID8gc3JjIDoge307Ci0gICAgfQotCi0g
ICAgLy8gTmV2ZXIgbW92ZSBvcmlnaW5hbCBvYmplY3RzLCBjbG9uZSB0aGVtCi0gICAgdGFyZ2V0
WyBuYW1lIF0gPSBqUXVlcnkuZXh0ZW5kKCBkZWVwLCBjbG9uZSwgY29weSApOwotCi0gICAgLy8g
RG9uJ3QgYnJpbmcgaW4gdW5kZWZpbmVkIHZhbHVlcwotICAgIH0gZWxzZSBpZiAoIGNvcHkgIT09
IHVuZGVmaW5lZCApIHsKLSAgICB0YXJnZXRbIG5hbWUgXSA9IGNvcHk7Ci0gICAgfQotICAgIH0K
LSAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIHRoZSBtb2RpZmllZCBvYmplY3QKLSAgICBy
ZXR1cm4gdGFyZ2V0OwotfTsKLQotalF1ZXJ5LmV4dGVuZCh7Ci0gICAgbm9Db25mbGljdDogZnVu
Y3Rpb24oIGRlZXAgKSB7Ci0gICAgaWYgKCB3aW5kb3cuJCA9PT0galF1ZXJ5ICkgewotICAgIHdp
bmRvdy4kID0gXyQ7Ci0gICAgfQotCi0gICAgaWYgKCBkZWVwICYmIHdpbmRvdy5qUXVlcnkgPT09
IGpRdWVyeSApIHsKLSAgICB3aW5kb3cualF1ZXJ5ID0gX2pRdWVyeTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4galF1ZXJ5OwotICAgIH0sCi0KLSAgICAvLyBJcyB0aGUgRE9NIHJlYWR5IHRvIGJlIHVz
ZWQ/IFNldCB0byB0cnVlIG9uY2UgaXQgb2NjdXJzLgotICAgIGlzUmVhZHk6IGZhbHNlLAotCi0g
ICAgLy8gQSBjb3VudGVyIHRvIHRyYWNrIGhvdyBtYW55IGl0ZW1zIHRvIHdhaXQgZm9yIGJlZm9y
ZQotICAgIC8vIHRoZSByZWFkeSBldmVudCBmaXJlcy4gU2VlICM2NzgxCi0gICAgcmVhZHlXYWl0
OiAxLAotCi0gICAgLy8gSG9sZCAob3IgcmVsZWFzZSkgdGhlIHJlYWR5IGV2ZW50Ci0gICAgaG9s
ZFJlYWR5OiBmdW5jdGlvbiggaG9sZCApIHsKLSAgICBpZiAoIGhvbGQgKSB7Ci0gICAgalF1ZXJ5
LnJlYWR5V2FpdCsrOwotICAgIH0gZWxzZSB7Ci0gICAgalF1ZXJ5LnJlYWR5KCB0cnVlICk7Ci0g
ICAgfQotICAgIH0sCi0KLSAgICAvLyBIYW5kbGUgd2hlbiB0aGUgRE9NIGlzIHJlYWR5Ci0gICAg
cmVhZHk6IGZ1bmN0aW9uKCB3YWl0ICkgewotCi0gICAgLy8gQWJvcnQgaWYgdGhlcmUgYXJlIHBl
bmRpbmcgaG9sZHMgb3Igd2UncmUgYWxyZWFkeSByZWFkeQotICAgIGlmICggd2FpdCA9PT0gdHJ1
ZSA/IC0talF1ZXJ5LnJlYWR5V2FpdCA6IGpRdWVyeS5pc1JlYWR5ICkgewotICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICAvLyBNYWtlIHN1cmUgYm9keSBleGlzdHMsIGF0IGxlYXN0LCBpbiBjYXNl
IElFIGdldHMgYSBsaXR0bGUgb3ZlcnplYWxvdXMgKHRpY2tldCAjNTQ0MykuCi0gICAgaWYgKCAh
ZG9jdW1lbnQuYm9keSApIHsKLSAgICByZXR1cm4gc2V0VGltZW91dCggalF1ZXJ5LnJlYWR5ICk7
Ci0gICAgfQotCi0gICAgLy8gUmVtZW1iZXIgdGhhdCB0aGUgRE9NIGlzIHJlYWR5Ci0gICAgalF1
ZXJ5LmlzUmVhZHkgPSB0cnVlOwotCi0gICAgLy8gSWYgYSBub3JtYWwgRE9NIFJlYWR5IGV2ZW50
IGZpcmVkLCBkZWNyZW1lbnQsIGFuZCB3YWl0IGlmIG5lZWQgYmUKLSAgICBpZiAoIHdhaXQgIT09
IHRydWUgJiYgLS1qUXVlcnkucmVhZHlXYWl0ID4gMCApIHsKLSAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgLy8gSWYgdGhlcmUgYXJlIGZ1bmN0aW9ucyBib3VuZCwgdG8gZXhlY3V0ZQotICAgIHJl
YWR5TGlzdC5yZXNvbHZlV2l0aCggZG9jdW1lbnQsIFsgalF1ZXJ5IF0gKTsKLQotICAgIC8vIFRy
aWdnZXIgYW55IGJvdW5kIHJlYWR5IGV2ZW50cwotICAgIGlmICggalF1ZXJ5LmZuLnRyaWdnZXIg
KSB7Ci0gICAgalF1ZXJ5KCBkb2N1bWVudCApLnRyaWdnZXIoInJlYWR5Iikub2ZmKCJyZWFkeSIp
OwotICAgIH0KLSAgICB9LAotCi0gICAgLy8gU2VlIHRlc3QvdW5pdC9jb3JlLmpzIGZvciBkZXRh
aWxzIGNvbmNlcm5pbmcgaXNGdW5jdGlvbi4KLSAgICAvLyBTaW5jZSB2ZXJzaW9uIDEuMywgRE9N
IG1ldGhvZHMgYW5kIGZ1bmN0aW9ucyBsaWtlIGFsZXJ0Ci0gICAgLy8gYXJlbid0IHN1cHBvcnRl
ZC4gVGhleSByZXR1cm4gZmFsc2Ugb24gSUUgKCMyOTY4KS4KLSAgICBpc0Z1bmN0aW9uOiBmdW5j
dGlvbiggb2JqICkgewotICAgIHJldHVybiBqUXVlcnkudHlwZShvYmopID09PSAiZnVuY3Rpb24i
OwotICAgIH0sCi0KLSAgICBpc0FycmF5OiBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uKCBvYmog
KSB7Ci0gICAgcmV0dXJuIGpRdWVyeS50eXBlKG9iaikgPT09ICJhcnJheSI7Ci0gICAgfSwKLQot
ICAgIGlzV2luZG93OiBmdW5jdGlvbiggb2JqICkgewotICAgIHJldHVybiBvYmogIT0gbnVsbCAm
JiBvYmogPT0gb2JqLndpbmRvdzsKLSAgICB9LAotCi0gICAgaXNOdW1lcmljOiBmdW5jdGlvbigg
b2JqICkgewotICAgIHJldHVybiAhaXNOYU4oIHBhcnNlRmxvYXQob2JqKSApICYmIGlzRmluaXRl
KCBvYmogKTsKLSAgICB9LAotCi0gICAgdHlwZTogZnVuY3Rpb24oIG9iaiApIHsKLSAgICBpZiAo
IG9iaiA9PSBudWxsICkgewotICAgIHJldHVybiBTdHJpbmcoIG9iaiApOwotICAgIH0KLSAgICBy
ZXR1cm4gdHlwZW9mIG9iaiA9PT0gIm9iamVjdCIgfHwgdHlwZW9mIG9iaiA9PT0gImZ1bmN0aW9u
IiA/Ci0gICAgY2xhc3MydHlwZVsgY29yZV90b1N0cmluZy5jYWxsKG9iaikgXSB8fCAib2JqZWN0
IiA6Ci0gICAgdHlwZW9mIG9iajsKLSAgICB9LAotCi0gICAgaXNQbGFpbk9iamVjdDogZnVuY3Rp
b24oIG9iaiApIHsKLSAgICAvLyBNdXN0IGJlIGFuIE9iamVjdC4KLSAgICAvLyBCZWNhdXNlIG9m
IElFLCB3ZSBhbHNvIGhhdmUgdG8gY2hlY2sgdGhlIHByZXNlbmNlIG9mIHRoZSBjb25zdHJ1Y3Rv
ciBwcm9wZXJ0eS4KLSAgICAvLyBNYWtlIHN1cmUgdGhhdCBET00gbm9kZXMgYW5kIHdpbmRvdyBv
YmplY3RzIGRvbid0IHBhc3MgdGhyb3VnaCwgYXMgd2VsbAotICAgIGlmICggIW9iaiB8fCBqUXVl
cnkudHlwZShvYmopICE9PSAib2JqZWN0IiB8fCBvYmoubm9kZVR5cGUgfHwgalF1ZXJ5LmlzV2lu
ZG93KCBvYmogKSApIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgdHJ5IHsKLSAg
ICAvLyBOb3Qgb3duIGNvbnN0cnVjdG9yIHByb3BlcnR5IG11c3QgYmUgT2JqZWN0Ci0gICAgaWYg
KCBvYmouY29uc3RydWN0b3IgJiYKLSAgICAhY29yZV9oYXNPd24uY2FsbChvYmosICJjb25zdHJ1
Y3RvciIpICYmCi0gICAgIWNvcmVfaGFzT3duLmNhbGwob2JqLmNvbnN0cnVjdG9yLnByb3RvdHlw
ZSwgImlzUHJvdG90eXBlT2YiKSApIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIH0g
Y2F0Y2ggKCBlICkgewotICAgIC8vIElFOCw5IFdpbGwgdGhyb3cgZXhjZXB0aW9ucyBvbiBjZXJ0
YWluIGhvc3Qgb2JqZWN0cyAjOTg5NwotICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAv
LyBPd24gcHJvcGVydGllcyBhcmUgZW51bWVyYXRlZCBmaXJzdGx5LCBzbyB0byBzcGVlZCB1cCwK
LSAgICAvLyBpZiBsYXN0IG9uZSBpcyBvd24sIHRoZW4gYWxsIHByb3BlcnRpZXMgYXJlIG93bi4K
LQotICAgIHZhciBrZXk7Ci0gICAgZm9yICgga2V5IGluIG9iaiApIHt9Ci0KLSAgICByZXR1cm4g
a2V5ID09PSB1bmRlZmluZWQgfHwgY29yZV9oYXNPd24uY2FsbCggb2JqLCBrZXkgKTsKLSAgICB9
LAotCi0gICAgaXNFbXB0eU9iamVjdDogZnVuY3Rpb24oIG9iaiApIHsKLSAgICB2YXIgbmFtZTsK
LSAgICBmb3IgKCBuYW1lIGluIG9iaiApIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAg
IHJldHVybiB0cnVlOwotICAgIH0sCi0KLSAgICBlcnJvcjogZnVuY3Rpb24oIG1zZyApIHsKLSAg
ICB0aHJvdyBuZXcgRXJyb3IoIG1zZyApOwotICAgIH0sCi0KLSAgICAvLyBkYXRhOiBzdHJpbmcg
b2YgaHRtbAotICAgIC8vIGNvbnRleHQgKG9wdGlvbmFsKTogSWYgc3BlY2lmaWVkLCB0aGUgZnJh
Z21lbnQgd2lsbCBiZSBjcmVhdGVkIGluIHRoaXMgY29udGV4dCwgZGVmYXVsdHMgdG8gZG9jdW1l
bnQKLSAgICAvLyBrZWVwU2NyaXB0cyAob3B0aW9uYWwpOiBJZiB0cnVlLCB3aWxsIGluY2x1ZGUg
c2NyaXB0cyBwYXNzZWQgaW4gdGhlIGh0bWwgc3RyaW5nCi0gICAgcGFyc2VIVE1MOiBmdW5jdGlv
biggZGF0YSwgY29udGV4dCwga2VlcFNjcmlwdHMgKSB7Ci0gICAgaWYgKCAhZGF0YSB8fCB0eXBl
b2YgZGF0YSAhPT0gInN0cmluZyIgKSB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIGlm
ICggdHlwZW9mIGNvbnRleHQgPT09ICJib29sZWFuIiApIHsKLSAgICBrZWVwU2NyaXB0cyA9IGNv
bnRleHQ7Ci0gICAgY29udGV4dCA9IGZhbHNlOwotICAgIH0KLSAgICBjb250ZXh0ID0gY29udGV4
dCB8fCBkb2N1bWVudDsKLQotICAgIHZhciBwYXJzZWQgPSByc2luZ2xlVGFnLmV4ZWMoIGRhdGEg
KSwKLSAgICBzY3JpcHRzID0gIWtlZXBTY3JpcHRzICYmIFtdOwotCi0gICAgLy8gU2luZ2xlIHRh
ZwotICAgIGlmICggcGFyc2VkICkgewotICAgIHJldHVybiBbIGNvbnRleHQuY3JlYXRlRWxlbWVu
dCggcGFyc2VkWzFdICkgXTsKLSAgICB9Ci0KLSAgICBwYXJzZWQgPSBqUXVlcnkuYnVpbGRGcmFn
bWVudCggWyBkYXRhIF0sIGNvbnRleHQsIHNjcmlwdHMgKTsKLSAgICBpZiAoIHNjcmlwdHMgKSB7
Ci0gICAgalF1ZXJ5KCBzY3JpcHRzICkucmVtb3ZlKCk7Ci0gICAgfQotICAgIHJldHVybiBqUXVl
cnkubWVyZ2UoIFtdLCBwYXJzZWQuY2hpbGROb2RlcyApOwotICAgIH0sCi0KLSAgICBwYXJzZUpT
T046IGZ1bmN0aW9uKCBkYXRhICkgewotICAgIC8vIEF0dGVtcHQgdG8gcGFyc2UgdXNpbmcgdGhl
IG5hdGl2ZSBKU09OIHBhcnNlciBmaXJzdAotICAgIGlmICggd2luZG93LkpTT04gJiYgd2luZG93
LkpTT04ucGFyc2UgKSB7Ci0gICAgcmV0dXJuIHdpbmRvdy5KU09OLnBhcnNlKCBkYXRhICk7Ci0g
ICAgfQotCi0gICAgaWYgKCBkYXRhID09PSBudWxsICkgewotICAgIHJldHVybiBkYXRhOwotICAg
IH0KLQotICAgIGlmICggdHlwZW9mIGRhdGEgPT09ICJzdHJpbmciICkgewotCi0gICAgLy8gTWFr
ZSBzdXJlIGxlYWRpbmcvdHJhaWxpbmcgd2hpdGVzcGFjZSBpcyByZW1vdmVkIChJRSBjYW4ndCBo
YW5kbGUgaXQpCi0gICAgZGF0YSA9IGpRdWVyeS50cmltKCBkYXRhICk7Ci0KLSAgICBpZiAoIGRh
dGEgKSB7Ci0gICAgLy8gTWFrZSBzdXJlIHRoZSBpbmNvbWluZyBkYXRhIGlzIGFjdHVhbCBKU09O
Ci0gICAgLy8gTG9naWMgYm9ycm93ZWQgZnJvbSBodHRwOi8vanNvbi5vcmcvanNvbjIuanMKLSAg
ICBpZiAoIHJ2YWxpZGNoYXJzLnRlc3QoIGRhdGEucmVwbGFjZSggcnZhbGlkZXNjYXBlLCAiQCIg
KQotICAgIC5yZXBsYWNlKCBydmFsaWR0b2tlbnMsICJdIiApCi0gICAgLnJlcGxhY2UoIHJ2YWxp
ZGJyYWNlcywgIiIpKSApIHsKLQotICAgIHJldHVybiAoIG5ldyBGdW5jdGlvbiggInJldHVybiAi
ICsgZGF0YSApICkoKTsKLSAgICB9Ci0gICAgfQotICAgIH0KLQotICAgIGpRdWVyeS5lcnJvcigg
IkludmFsaWQgSlNPTjogIiArIGRhdGEgKTsKLSAgICB9LAotCi0gICAgLy8gQ3Jvc3MtYnJvd3Nl
ciB4bWwgcGFyc2luZwotICAgIHBhcnNlWE1MOiBmdW5jdGlvbiggZGF0YSApIHsKLSAgICB2YXIg
eG1sLCB0bXA7Ci0gICAgaWYgKCAhZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gInN0cmluZyIgKSB7
Ci0gICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIHRyeSB7Ci0gICAgaWYgKCB3aW5kb3cuRE9N
UGFyc2VyICkgeyAvLyBTdGFuZGFyZAotICAgIHRtcCA9IG5ldyBET01QYXJzZXIoKTsKLSAgICB4
bWwgPSB0bXAucGFyc2VGcm9tU3RyaW5nKCBkYXRhICwgInRleHQveG1sIiApOwotICAgIH0gZWxz
ZSB7IC8vIElFCi0gICAgeG1sID0gbmV3IEFjdGl2ZVhPYmplY3QoICJNaWNyb3NvZnQuWE1MRE9N
IiApOwotICAgIHhtbC5hc3luYyA9ICJmYWxzZSI7Ci0gICAgeG1sLmxvYWRYTUwoIGRhdGEgKTsK
LSAgICB9Ci0gICAgfSBjYXRjaCggZSApIHsKLSAgICB4bWwgPSB1bmRlZmluZWQ7Ci0gICAgfQot
ICAgIGlmICggIXhtbCB8fCAheG1sLmRvY3VtZW50RWxlbWVudCB8fCB4bWwuZ2V0RWxlbWVudHNC
eVRhZ05hbWUoICJwYXJzZXJlcnJvciIgKS5sZW5ndGggKSB7Ci0gICAgalF1ZXJ5LmVycm9yKCAi
SW52YWxpZCBYTUw6ICIgKyBkYXRhICk7Ci0gICAgfQotICAgIHJldHVybiB4bWw7Ci0gICAgfSwK
LQotICAgIG5vb3A6IGZ1bmN0aW9uKCkge30sCi0KLSAgICAvLyBFdmFsdWF0ZXMgYSBzY3JpcHQg
aW4gYSBnbG9iYWwgY29udGV4dAotICAgIC8vIFdvcmthcm91bmRzIGJhc2VkIG9uIGZpbmRpbmdz
IGJ5IEppbSBEcmlzY29sbAotICAgIC8vIGh0dHA6Ly93ZWJsb2dzLmphdmEubmV0L2Jsb2cvZHJp
c2NvbGwvYXJjaGl2ZS8yMDA5LzA5LzA4L2V2YWwtamF2YXNjcmlwdC1nbG9iYWwtY29udGV4dAot
ICAgIGdsb2JhbEV2YWw6IGZ1bmN0aW9uKCBkYXRhICkgewotICAgIGlmICggZGF0YSAmJiBqUXVl
cnkudHJpbSggZGF0YSApICkgewotICAgIC8vIFdlIHVzZSBleGVjU2NyaXB0IG9uIEludGVybmV0
IEV4cGxvcmVyCi0gICAgLy8gV2UgdXNlIGFuIGFub255bW91cyBmdW5jdGlvbiBzbyB0aGF0IGNv
bnRleHQgaXMgd2luZG93Ci0gICAgLy8gcmF0aGVyIHRoYW4galF1ZXJ5IGluIEZpcmVmb3gKLSAg
ICAoIHdpbmRvdy5leGVjU2NyaXB0IHx8IGZ1bmN0aW9uKCBkYXRhICkgewotICAgIHdpbmRvd1sg
ImV2YWwiIF0uY2FsbCggd2luZG93LCBkYXRhICk7Ci0gICAgfSApKCBkYXRhICk7Ci0gICAgfQot
ICAgIH0sCi0KLSAgICAvLyBDb252ZXJ0IGRhc2hlZCB0byBjYW1lbENhc2U7IHVzZWQgYnkgdGhl
IGNzcyBhbmQgZGF0YSBtb2R1bGVzCi0gICAgLy8gTWljcm9zb2Z0IGZvcmdvdCB0byBodW1wIHRo
ZWlyIHZlbmRvciBwcmVmaXggKCM5NTcyKQotICAgIGNhbWVsQ2FzZTogZnVuY3Rpb24oIHN0cmlu
ZyApIHsKLSAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoIHJtc1ByZWZpeCwgIm1zLSIgKS5yZXBs
YWNlKCByZGFzaEFscGhhLCBmY2FtZWxDYXNlICk7Ci0gICAgfSwKLQotICAgIG5vZGVOYW1lOiBm
dW5jdGlvbiggZWxlbSwgbmFtZSApIHsKLSAgICByZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVt
Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUudG9Mb3dlckNhc2UoKTsKLSAgICB9LAot
Ci0gICAgLy8gYXJncyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seQotICAgIGVhY2g6IGZ1bmN0
aW9uKCBvYmosIGNhbGxiYWNrLCBhcmdzICkgewotICAgIHZhciB2YWx1ZSwKLSAgICBpID0gMCwK
LSAgICBsZW5ndGggPSBvYmoubGVuZ3RoLAotICAgIGlzQXJyYXkgPSBpc0FycmF5bGlrZSggb2Jq
ICk7Ci0KLSAgICBpZiAoIGFyZ3MgKSB7Ci0gICAgaWYgKCBpc0FycmF5ICkgewotICAgIGZvciAo
IDsgaSA8IGxlbmd0aDsgaSsrICkgewotICAgIHZhbHVlID0gY2FsbGJhY2suYXBwbHkoIG9ialsg
aSBdLCBhcmdzICk7Ci0KLSAgICBpZiAoIHZhbHVlID09PSBmYWxzZSApIHsKLSAgICBicmVhazsK
LSAgICB9Ci0gICAgfQotICAgIH0gZWxzZSB7Ci0gICAgZm9yICggaSBpbiBvYmogKSB7Ci0gICAg
dmFsdWUgPSBjYWxsYmFjay5hcHBseSggb2JqWyBpIF0sIGFyZ3MgKTsKLQotICAgIGlmICggdmFs
dWUgPT09IGZhbHNlICkgewotICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci0gICAgfQotCi0gICAg
Ly8gQSBzcGVjaWFsLCBmYXN0LCBjYXNlIGZvciB0aGUgbW9zdCBjb21tb24gdXNlIG9mIGVhY2gK
LSAgICB9IGVsc2UgewotICAgIGlmICggaXNBcnJheSApIHsKLSAgICBmb3IgKCA7IGkgPCBsZW5n
dGg7IGkrKyApIHsKLSAgICB2YWx1ZSA9IGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpb
IGkgXSApOwotCi0gICAgaWYgKCB2YWx1ZSA9PT0gZmFsc2UgKSB7Ci0gICAgYnJlYWs7Ci0gICAg
fQotICAgIH0KLSAgICB9IGVsc2UgewotICAgIGZvciAoIGkgaW4gb2JqICkgewotICAgIHZhbHVl
ID0gY2FsbGJhY2suY2FsbCggb2JqWyBpIF0sIGksIG9ialsgaSBdICk7Ci0KLSAgICBpZiAoIHZh
bHVlID09PSBmYWxzZSApIHsKLSAgICBicmVhazsKLSAgICB9Ci0gICAgfQotICAgIH0KLSAgICB9
Ci0KLSAgICByZXR1cm4gb2JqOwotICAgIH0sCi0KLSAgICAvLyBVc2UgbmF0aXZlIFN0cmluZy50
cmltIGZ1bmN0aW9uIHdoZXJldmVyIHBvc3NpYmxlCi0gICAgdHJpbTogY29yZV90cmltICYmICFj
b3JlX3RyaW0uY2FsbCgiXHVGRUZGXHhBMCIpID8KLSAgICBmdW5jdGlvbiggdGV4dCApIHsKLSAg
ICByZXR1cm4gdGV4dCA9PSBudWxsID8KLSAgICAiIiA6Ci0gICAgY29yZV90cmltLmNhbGwoIHRl
eHQgKTsKLSAgICB9IDoKLQotICAgIC8vIE90aGVyd2lzZSB1c2Ugb3VyIG93biB0cmltbWluZyBm
dW5jdGlvbmFsaXR5Ci0gICAgZnVuY3Rpb24oIHRleHQgKSB7Ci0gICAgcmV0dXJuIHRleHQgPT0g
bnVsbCA/Ci0gICAgIiIgOgotICAgICggdGV4dCArICIiICkucmVwbGFjZSggcnRyaW0sICIiICk7
Ci0gICAgfSwKLQotICAgIC8vIHJlc3VsdHMgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHkKLSAg
ICBtYWtlQXJyYXk6IGZ1bmN0aW9uKCBhcnIsIHJlc3VsdHMgKSB7Ci0gICAgdmFyIHJldCA9IHJl
c3VsdHMgfHwgW107Ci0KLSAgICBpZiAoIGFyciAhPSBudWxsICkgewotICAgIGlmICggaXNBcnJh
eWxpa2UoIE9iamVjdChhcnIpICkgKSB7Ci0gICAgalF1ZXJ5Lm1lcmdlKCByZXQsCi0gICAgdHlw
ZW9mIGFyciA9PT0gInN0cmluZyIgPwotICAgIFsgYXJyIF0gOiBhcnIKLSAgICApOwotICAgIH0g
ZWxzZSB7Ci0gICAgY29yZV9wdXNoLmNhbGwoIHJldCwgYXJyICk7Ci0gICAgfQotICAgIH0KLQot
ICAgIHJldHVybiByZXQ7Ci0gICAgfSwKLQotICAgIGluQXJyYXk6IGZ1bmN0aW9uKCBlbGVtLCBh
cnIsIGkgKSB7Ci0gICAgdmFyIGxlbjsKLQotICAgIGlmICggYXJyICkgewotICAgIGlmICggY29y
ZV9pbmRleE9mICkgewotICAgIHJldHVybiBjb3JlX2luZGV4T2YuY2FsbCggYXJyLCBlbGVtLCBp
ICk7Ci0gICAgfQotCi0gICAgbGVuID0gYXJyLmxlbmd0aDsKLSAgICBpID0gaSA/IGkgPCAwID8g
TWF0aC5tYXgoIDAsIGxlbiArIGkgKSA6IGkgOiAwOwotCi0gICAgZm9yICggOyBpIDwgbGVuOyBp
KysgKSB7Ci0gICAgLy8gU2tpcCBhY2Nlc3NpbmcgaW4gc3BhcnNlIGFycmF5cwotICAgIGlmICgg
aSBpbiBhcnIgJiYgYXJyWyBpIF0gPT09IGVsZW0gKSB7Ci0gICAgcmV0dXJuIGk7Ci0gICAgfQot
ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gLTE7Ci0gICAgfSwKLQotICAgIG1lcmdlOiBmdW5j
dGlvbiggZmlyc3QsIHNlY29uZCApIHsKLSAgICB2YXIgbCA9IHNlY29uZC5sZW5ndGgsCi0gICAg
aSA9IGZpcnN0Lmxlbmd0aCwKLSAgICBqID0gMDsKLQotICAgIGlmICggdHlwZW9mIGwgPT09ICJu
dW1iZXIiICkgewotICAgIGZvciAoIDsgaiA8IGw7IGorKyApIHsKLSAgICBmaXJzdFsgaSsrIF0g
PSBzZWNvbmRbIGogXTsKLSAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICB3aGlsZSAoIHNlY29uZFtq
XSAhPT0gdW5kZWZpbmVkICkgewotICAgIGZpcnN0WyBpKysgXSA9IHNlY29uZFsgaisrIF07Ci0g
ICAgfQotICAgIH0KLQotICAgIGZpcnN0Lmxlbmd0aCA9IGk7Ci0KLSAgICByZXR1cm4gZmlyc3Q7
Ci0gICAgfSwKLQotICAgIGdyZXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ssIGludiApIHsK
LSAgICB2YXIgcmV0VmFsLAotICAgIHJldCA9IFtdLAotICAgIGkgPSAwLAotICAgIGxlbmd0aCA9
IGVsZW1zLmxlbmd0aDsKLSAgICBpbnYgPSAhIWludjsKLQotICAgIC8vIEdvIHRocm91Z2ggdGhl
IGFycmF5LCBvbmx5IHNhdmluZyB0aGUgaXRlbXMKLSAgICAvLyB0aGF0IHBhc3MgdGhlIHZhbGlk
YXRvciBmdW5jdGlvbgotICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkgewotICAgIHJldFZh
bCA9ICEhY2FsbGJhY2soIGVsZW1zWyBpIF0sIGkgKTsKLSAgICBpZiAoIGludiAhPT0gcmV0VmFs
ICkgewotICAgIHJldC5wdXNoKCBlbGVtc1sgaSBdICk7Ci0gICAgfQotICAgIH0KLQotICAgIHJl
dHVybiByZXQ7Ci0gICAgfSwKLQotICAgIC8vIGFyZyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25s
eQotICAgIG1hcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgYXJnICkgewotICAgIHZhciB2
YWx1ZSwKLSAgICBpID0gMCwKLSAgICBsZW5ndGggPSBlbGVtcy5sZW5ndGgsCi0gICAgaXNBcnJh
eSA9IGlzQXJyYXlsaWtlKCBlbGVtcyApLAotICAgIHJldCA9IFtdOwotCi0gICAgLy8gR28gdGhy
b3VnaCB0aGUgYXJyYXksIHRyYW5zbGF0aW5nIGVhY2ggb2YgdGhlIGl0ZW1zIHRvIHRoZWlyCi0g
ICAgaWYgKCBpc0FycmF5ICkgewotICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkgewotICAg
IHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApOwotCi0gICAgaWYgKCB2YWx1
ZSAhPSBudWxsICkgewotICAgIHJldFsgcmV0Lmxlbmd0aCBdID0gdmFsdWU7Ci0gICAgfQotICAg
IH0KLQotICAgIC8vIEdvIHRocm91Z2ggZXZlcnkga2V5IG9uIHRoZSBvYmplY3QsCi0gICAgfSBl
bHNlIHsKLSAgICBmb3IgKCBpIGluIGVsZW1zICkgewotICAgIHZhbHVlID0gY2FsbGJhY2soIGVs
ZW1zWyBpIF0sIGksIGFyZyApOwotCi0gICAgaWYgKCB2YWx1ZSAhPSBudWxsICkgewotICAgIHJl
dFsgcmV0Lmxlbmd0aCBdID0gdmFsdWU7Ci0gICAgfQotICAgIH0KLSAgICB9Ci0KLSAgICAvLyBG
bGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlzCi0gICAgcmV0dXJuIGNvcmVfY29uY2F0LmFwcGx5KCBb
XSwgcmV0ICk7Ci0gICAgfSwKLQotICAgIC8vIEEgZ2xvYmFsIEdVSUQgY291bnRlciBmb3Igb2Jq
ZWN0cwotICAgIGd1aWQ6IDEsCi0KLSAgICAvLyBCaW5kIGEgZnVuY3Rpb24gdG8gYSBjb250ZXh0
LCBvcHRpb25hbGx5IHBhcnRpYWxseSBhcHBseWluZyBhbnkKLSAgICAvLyBhcmd1bWVudHMuCi0g
ICAgcHJveHk6IGZ1bmN0aW9uKCBmbiwgY29udGV4dCApIHsKLSAgICB2YXIgYXJncywgcHJveHks
IHRtcDsKLQotICAgIGlmICggdHlwZW9mIGNvbnRleHQgPT09ICJzdHJpbmciICkgewotICAgIHRt
cCA9IGZuWyBjb250ZXh0IF07Ci0gICAgY29udGV4dCA9IGZuOwotICAgIGZuID0gdG1wOwotICAg
IH0KLQotICAgIC8vIFF1aWNrIGNoZWNrIHRvIGRldGVybWluZSBpZiB0YXJnZXQgaXMgY2FsbGFi
bGUsIGluIHRoZSBzcGVjCi0gICAgLy8gdGhpcyB0aHJvd3MgYSBUeXBlRXJyb3IsIGJ1dCB3ZSB3
aWxsIGp1c3QgcmV0dXJuIHVuZGVmaW5lZC4KLSAgICBpZiAoICFqUXVlcnkuaXNGdW5jdGlvbigg
Zm4gKSApIHsKLSAgICByZXR1cm4gdW5kZWZpbmVkOwotICAgIH0KLQotICAgIC8vIFNpbXVsYXRl
ZCBiaW5kCi0gICAgYXJncyA9IGNvcmVfc2xpY2UuY2FsbCggYXJndW1lbnRzLCAyICk7Ci0gICAg
cHJveHkgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gZm4uYXBwbHkoIGNvbnRleHQgfHwgdGhp
cywgYXJncy5jb25jYXQoIGNvcmVfc2xpY2UuY2FsbCggYXJndW1lbnRzICkgKSApOwotICAgIH07
Ci0KLSAgICAvLyBTZXQgdGhlIGd1aWQgb2YgdW5pcXVlIGhhbmRsZXIgdG8gdGhlIHNhbWUgb2Yg
b3JpZ2luYWwgaGFuZGxlciwgc28gaXQgY2FuIGJlIHJlbW92ZWQKLSAgICBwcm94eS5ndWlkID0g
Zm4uZ3VpZCA9IGZuLmd1aWQgfHwgalF1ZXJ5Lmd1aWQrKzsKLQotICAgIHJldHVybiBwcm94eTsK
LSAgICB9LAotCi0gICAgLy8gTXVsdGlmdW5jdGlvbmFsIG1ldGhvZCB0byBnZXQgYW5kIHNldCB2
YWx1ZXMgb2YgYSBjb2xsZWN0aW9uCi0gICAgLy8gVGhlIHZhbHVlL3MgY2FuIG9wdGlvbmFsbHkg
YmUgZXhlY3V0ZWQgaWYgaXQncyBhIGZ1bmN0aW9uCi0gICAgYWNjZXNzOiBmdW5jdGlvbiggZWxl
bXMsIGZuLCBrZXksIHZhbHVlLCBjaGFpbmFibGUsIGVtcHR5R2V0LCByYXcgKSB7Ci0gICAgdmFy
IGkgPSAwLAotICAgIGxlbmd0aCA9IGVsZW1zLmxlbmd0aCwKLSAgICBidWxrID0ga2V5ID09IG51
bGw7Ci0KLSAgICAvLyBTZXRzIG1hbnkgdmFsdWVzCi0gICAgaWYgKCBqUXVlcnkudHlwZSgga2V5
ICkgPT09ICJvYmplY3QiICkgewotICAgIGNoYWluYWJsZSA9IHRydWU7Ci0gICAgZm9yICggaSBp
biBrZXkgKSB7Ci0gICAgalF1ZXJ5LmFjY2VzcyggZWxlbXMsIGZuLCBpLCBrZXlbaV0sIHRydWUs
IGVtcHR5R2V0LCByYXcgKTsKLSAgICB9Ci0KLSAgICAvLyBTZXRzIG9uZSB2YWx1ZQotICAgIH0g
ZWxzZSBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7Ci0gICAgY2hhaW5hYmxlID0gdHJ1ZTsK
LQotICAgIGlmICggIWpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkgewotICAgIHJhdyA9IHRy
dWU7Ci0gICAgfQotCi0gICAgaWYgKCBidWxrICkgewotICAgIC8vIEJ1bGsgb3BlcmF0aW9ucyBy
dW4gYWdhaW5zdCB0aGUgZW50aXJlIHNldAotICAgIGlmICggcmF3ICkgewotICAgIGZuLmNhbGwo
IGVsZW1zLCB2YWx1ZSApOwotICAgIGZuID0gbnVsbDsKLQotICAgIC8vIC4uLmV4Y2VwdCB3aGVu
IGV4ZWN1dGluZyBmdW5jdGlvbiB2YWx1ZXMKLSAgICB9IGVsc2UgewotICAgIGJ1bGsgPSBmbjsK
LSAgICBmbiA9IGZ1bmN0aW9uKCBlbGVtLCBrZXksIHZhbHVlICkgewotICAgIHJldHVybiBidWxr
LmNhbGwoIGpRdWVyeSggZWxlbSApLCB2YWx1ZSApOwotICAgIH07Ci0gICAgfQotICAgIH0KLQot
ICAgIGlmICggZm4gKSB7Ci0gICAgZm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7Ci0gICAgZm4o
IGVsZW1zW2ldLCBrZXksIHJhdyA/IHZhbHVlIDogdmFsdWUuY2FsbCggZWxlbXNbaV0sIGksIGZu
KCBlbGVtc1tpXSwga2V5ICkgKSApOwotICAgIH0KLSAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJu
IGNoYWluYWJsZSA/Ci0gICAgZWxlbXMgOgotCi0gICAgLy8gR2V0cwotICAgIGJ1bGsgPwotICAg
IGZuLmNhbGwoIGVsZW1zICkgOgotICAgIGxlbmd0aCA/IGZuKCBlbGVtc1swXSwga2V5ICkgOiBl
bXB0eUdldDsKLSAgICB9LAotCi0gICAgbm93OiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gKCBu
ZXcgRGF0ZSgpICkuZ2V0VGltZSgpOwotICAgIH0KLX0pOwotCi1qUXVlcnkucmVhZHkucHJvbWlz
ZSA9IGZ1bmN0aW9uKCBvYmogKSB7Ci0gICAgaWYgKCAhcmVhZHlMaXN0ICkgewotCi0gICAgcmVh
ZHlMaXN0ID0galF1ZXJ5LkRlZmVycmVkKCk7Ci0KLSAgICAvLyBDYXRjaCBjYXNlcyB3aGVyZSAk
KGRvY3VtZW50KS5yZWFkeSgpIGlzIGNhbGxlZCBhZnRlciB0aGUgYnJvd3NlciBldmVudCBoYXMg
YWxyZWFkeSBvY2N1cnJlZC4KLSAgICAvLyB3ZSBvbmNlIHRyaWVkIHRvIHVzZSByZWFkeVN0YXRl
ICJpbnRlcmFjdGl2ZSIgaGVyZSwgYnV0IGl0IGNhdXNlZCBpc3N1ZXMgbGlrZSB0aGUgb25lCi0g
ICAgLy8gZGlzY292ZXJlZCBieSBDaHJpc1MgaGVyZTogaHR0cDovL2J1Z3MuanF1ZXJ5LmNvbS90
aWNrZXQvMTIyODIjY29tbWVudDoxNQotICAgIGlmICggZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0g
ImNvbXBsZXRlIiApIHsKLSAgICAvLyBIYW5kbGUgaXQgYXN5bmNocm9ub3VzbHkgdG8gYWxsb3cg
c2NyaXB0cyB0aGUgb3Bwb3J0dW5pdHkgdG8gZGVsYXkgcmVhZHkKLSAgICBzZXRUaW1lb3V0KCBq
UXVlcnkucmVhZHkgKTsKLQotICAgIC8vIFN0YW5kYXJkcy1iYXNlZCBicm93c2VycyBzdXBwb3J0
IERPTUNvbnRlbnRMb2FkZWQKLSAgICB9IGVsc2UgaWYgKCBkb2N1bWVudC5hZGRFdmVudExpc3Rl
bmVyICkgewotICAgIC8vIFVzZSB0aGUgaGFuZHkgZXZlbnQgY2FsbGJhY2sKLSAgICBkb2N1bWVu
dC5hZGRFdmVudExpc3RlbmVyKCAiRE9NQ29udGVudExvYWRlZCIsIGNvbXBsZXRlZCwgZmFsc2Ug
KTsKLQotICAgIC8vIEEgZmFsbGJhY2sgdG8gd2luZG93Lm9ubG9hZCwgdGhhdCB3aWxsIGFsd2F5
cyB3b3JrCi0gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoICJsb2FkIiwgY29tcGxldGVkLCBm
YWxzZSApOwotCi0gICAgLy8gSWYgSUUgZXZlbnQgbW9kZWwgaXMgdXNlZAotICAgIH0gZWxzZSB7
Ci0gICAgLy8gRW5zdXJlIGZpcmluZyBiZWZvcmUgb25sb2FkLCBtYXliZSBsYXRlIGJ1dCBzYWZl
IGFsc28gZm9yIGlmcmFtZXMKLSAgICBkb2N1bWVudC5hdHRhY2hFdmVudCggIm9ucmVhZHlzdGF0
ZWNoYW5nZSIsIGNvbXBsZXRlZCApOwotCi0gICAgLy8gQSBmYWxsYmFjayB0byB3aW5kb3cub25s
b2FkLCB0aGF0IHdpbGwgYWx3YXlzIHdvcmsKLSAgICB3aW5kb3cuYXR0YWNoRXZlbnQoICJvbmxv
YWQiLCBjb21wbGV0ZWQgKTsKLQotICAgIC8vIElmIElFIGFuZCBub3QgYSBmcmFtZQotICAgIC8v
IGNvbnRpbnVhbGx5IGNoZWNrIHRvIHNlZSBpZiB0aGUgZG9jdW1lbnQgaXMgcmVhZHkKLSAgICB2
YXIgdG9wID0gZmFsc2U7Ci0KLSAgICB0cnkgewotICAgIHRvcCA9IHdpbmRvdy5mcmFtZUVsZW1l
bnQgPT0gbnVsbCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7Ci0gICAgfSBjYXRjaChlKSB7
fQotCi0gICAgaWYgKCB0b3AgJiYgdG9wLmRvU2Nyb2xsICkgewotICAgIChmdW5jdGlvbiBkb1Nj
cm9sbENoZWNrKCkgewotICAgIGlmICggIWpRdWVyeS5pc1JlYWR5ICkgewotCi0gICAgdHJ5IHsK
LSAgICAvLyBVc2UgdGhlIHRyaWNrIGJ5IERpZWdvIFBlcmluaQotICAgIC8vIGh0dHA6Ly9qYXZh
c2NyaXB0Lm53Ym94LmNvbS9JRUNvbnRlbnRMb2FkZWQvCi0gICAgdG9wLmRvU2Nyb2xsKCJsZWZ0
Iik7Ci0gICAgfSBjYXRjaChlKSB7Ci0gICAgcmV0dXJuIHNldFRpbWVvdXQoIGRvU2Nyb2xsQ2hl
Y2ssIDUwICk7Ci0gICAgfQotCi0gICAgLy8gZGV0YWNoIGFsbCBkb20gcmVhZHkgZXZlbnRzCi0g
ICAgZGV0YWNoKCk7Ci0KLSAgICAvLyBhbmQgZXhlY3V0ZSBhbnkgd2FpdGluZyBmdW5jdGlvbnMK
LSAgICBqUXVlcnkucmVhZHkoKTsKLSAgICB9Ci0gICAgfSkoKTsKLSAgICB9Ci0gICAgfQotICAg
IH0KLSAgICByZXR1cm4gcmVhZHlMaXN0LnByb21pc2UoIG9iaiApOwotfTsKLQotLy8gUG9wdWxh
dGUgdGhlIGNsYXNzMnR5cGUgbWFwCi1qUXVlcnkuZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5n
IEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvciIuc3BsaXQoIiAiKSwgZnVu
Y3Rpb24oaSwgbmFtZSkgewotICAgIGNsYXNzMnR5cGVbICJbb2JqZWN0ICIgKyBuYW1lICsgIl0i
IF0gPSBuYW1lLnRvTG93ZXJDYXNlKCk7Ci19KTsKLQotZnVuY3Rpb24gaXNBcnJheWxpa2UoIG9i
aiApIHsKLSAgICB2YXIgbGVuZ3RoID0gb2JqLmxlbmd0aCwKLSAgICB0eXBlID0galF1ZXJ5LnR5
cGUoIG9iaiApOwotCi0gICAgaWYgKCBqUXVlcnkuaXNXaW5kb3coIG9iaiApICkgewotICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIG9iai5ub2RlVHlwZSA9PT0gMSAmJiBsZW5n
dGggKSB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHR5cGUgPT09ICJh
cnJheSIgfHwgdHlwZSAhPT0gImZ1bmN0aW9uIiAmJgotICAgICggbGVuZ3RoID09PSAwIHx8Ci0g
ICAgdHlwZW9mIGxlbmd0aCA9PT0gIm51bWJlciIgJiYgbGVuZ3RoID4gMCAmJiAoIGxlbmd0aCAt
IDEgKSBpbiBvYmogKTsKLX0KLQotLy8gQWxsIGpRdWVyeSBvYmplY3RzIHNob3VsZCBwb2ludCBi
YWNrIHRvIHRoZXNlCi1yb290alF1ZXJ5ID0galF1ZXJ5KGRvY3VtZW50KTsKLS8vIFN0cmluZyB0
byBPYmplY3Qgb3B0aW9ucyBmb3JtYXQgY2FjaGUKLXZhciBvcHRpb25zQ2FjaGUgPSB7fTsKLQot
Ly8gQ29udmVydCBTdHJpbmctZm9ybWF0dGVkIG9wdGlvbnMgaW50byBPYmplY3QtZm9ybWF0dGVk
IG9uZXMgYW5kIHN0b3JlIGluIGNhY2hlCi1mdW5jdGlvbiBjcmVhdGVPcHRpb25zKCBvcHRpb25z
ICkgewotICAgIHZhciBvYmplY3QgPSBvcHRpb25zQ2FjaGVbIG9wdGlvbnMgXSA9IHt9OwotICAg
IGpRdWVyeS5lYWNoKCBvcHRpb25zLm1hdGNoKCBjb3JlX3Jub3R3aGl0ZSApIHx8IFtdLCBmdW5j
dGlvbiggXywgZmxhZyApIHsKLSAgICBvYmplY3RbIGZsYWcgXSA9IHRydWU7Ci0gICAgfSk7Ci0g
ICAgcmV0dXJuIG9iamVjdDsKLX0KLQotLyoKLSAqIENyZWF0ZSBhIGNhbGxiYWNrIGxpc3QgdXNp
bmcgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgotICoKLSAqICAgIG9wdGlvbnM6IGFuIG9wdGlv
bmFsIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIG9wdGlvbnMgdGhhdCB3aWxsIGNoYW5nZSBob3cK
LSAqICAgICAgICAgICAgdGhlIGNhbGxiYWNrIGxpc3QgYmVoYXZlcyBvciBhIG1vcmUgdHJhZGl0
aW9uYWwgb3B0aW9uIG9iamVjdAotICoKLSAqIEJ5IGRlZmF1bHQgYSBjYWxsYmFjayBsaXN0IHdp
bGwgYWN0IGxpa2UgYW4gZXZlbnQgY2FsbGJhY2sgbGlzdCBhbmQgY2FuIGJlCi0gKiAiZmlyZWQi
IG11bHRpcGxlIHRpbWVzLgotICoKLSAqIFBvc3NpYmxlIG9wdGlvbnM6Ci0gKgotICogICAgb25j
ZTogICAgICAgICAgICB3aWxsIGVuc3VyZSB0aGUgY2FsbGJhY2sgbGlzdCBjYW4gb25seSBiZSBm
aXJlZCBvbmNlIChsaWtlIGEgRGVmZXJyZWQpCi0gKgotICogICAgbWVtb3J5OiAgICAgICAgICAg
IHdpbGwga2VlcCB0cmFjayBvZiBwcmV2aW91cyB2YWx1ZXMgYW5kIHdpbGwgY2FsbCBhbnkgY2Fs
bGJhY2sgYWRkZWQKLSAqICAgICAgICAgICAgICAgICAgICBhZnRlciB0aGUgbGlzdCBoYXMgYmVl
biBmaXJlZCByaWdodCBhd2F5IHdpdGggdGhlIGxhdGVzdCAibWVtb3JpemVkIgotICogICAgICAg
ICAgICAgICAgICAgIHZhbHVlcyAobGlrZSBhIERlZmVycmVkKQotICoKLSAqICAgIHVuaXF1ZTog
ICAgICAgICAgICB3aWxsIGVuc3VyZSBhIGNhbGxiYWNrIGNhbiBvbmx5IGJlIGFkZGVkIG9uY2Ug
KG5vIGR1cGxpY2F0ZSBpbiB0aGUgbGlzdCkKLSAqCi0gKiAgICBzdG9wT25GYWxzZTogICAgaW50
ZXJydXB0IGNhbGxpbmdzIHdoZW4gYSBjYWxsYmFjayByZXR1cm5zIGZhbHNlCi0gKgotICovCi1q
UXVlcnkuQ2FsbGJhY2tzID0gZnVuY3Rpb24oIG9wdGlvbnMgKSB7Ci0KLSAgICAvLyBDb252ZXJ0
IG9wdGlvbnMgZnJvbSBTdHJpbmctZm9ybWF0dGVkIHRvIE9iamVjdC1mb3JtYXR0ZWQgaWYgbmVl
ZGVkCi0gICAgLy8gKHdlIGNoZWNrIGluIGNhY2hlIGZpcnN0KQotICAgIG9wdGlvbnMgPSB0eXBl
b2Ygb3B0aW9ucyA9PT0gInN0cmluZyIgPwotICAgICggb3B0aW9uc0NhY2hlWyBvcHRpb25zIF0g
fHwgY3JlYXRlT3B0aW9ucyggb3B0aW9ucyApICkgOgotICAgIGpRdWVyeS5leHRlbmQoIHt9LCBv
cHRpb25zICk7Ci0KLSAgICB2YXIgLy8gRmxhZyB0byBrbm93IGlmIGxpc3QgaXMgY3VycmVudGx5
IGZpcmluZwotICAgIGZpcmluZywKLSAgICAvLyBMYXN0IGZpcmUgdmFsdWUgKGZvciBub24tZm9y
Z2V0dGFibGUgbGlzdHMpCi0gICAgbWVtb3J5LAotICAgIC8vIEZsYWcgdG8ga25vdyBpZiBsaXN0
IHdhcyBhbHJlYWR5IGZpcmVkCi0gICAgZmlyZWQsCi0gICAgLy8gRW5kIG9mIHRoZSBsb29wIHdo
ZW4gZmlyaW5nCi0gICAgZmlyaW5nTGVuZ3RoLAotICAgIC8vIEluZGV4IG9mIGN1cnJlbnRseSBm
aXJpbmcgY2FsbGJhY2sgKG1vZGlmaWVkIGJ5IHJlbW92ZSBpZiBuZWVkZWQpCi0gICAgZmlyaW5n
SW5kZXgsCi0gICAgLy8gRmlyc3QgY2FsbGJhY2sgdG8gZmlyZSAodXNlZCBpbnRlcm5hbGx5IGJ5
IGFkZCBhbmQgZmlyZVdpdGgpCi0gICAgZmlyaW5nU3RhcnQsCi0gICAgLy8gQWN0dWFsIGNhbGxi
YWNrIGxpc3QKLSAgICBsaXN0ID0gW10sCi0gICAgLy8gU3RhY2sgb2YgZmlyZSBjYWxscyBmb3Ig
cmVwZWF0YWJsZSBsaXN0cwotICAgIHN0YWNrID0gIW9wdGlvbnMub25jZSAmJiBbXSwKLSAgICAv
LyBGaXJlIGNhbGxiYWNrcwotICAgIGZpcmUgPSBmdW5jdGlvbiggZGF0YSApIHsKLSAgICBtZW1v
cnkgPSBvcHRpb25zLm1lbW9yeSAmJiBkYXRhOwotICAgIGZpcmVkID0gdHJ1ZTsKLSAgICBmaXJp
bmdJbmRleCA9IGZpcmluZ1N0YXJ0IHx8IDA7Ci0gICAgZmlyaW5nU3RhcnQgPSAwOwotICAgIGZp
cmluZ0xlbmd0aCA9IGxpc3QubGVuZ3RoOwotICAgIGZpcmluZyA9IHRydWU7Ci0gICAgZm9yICgg
OyBsaXN0ICYmIGZpcmluZ0luZGV4IDwgZmlyaW5nTGVuZ3RoOyBmaXJpbmdJbmRleCsrICkgewot
ICAgIGlmICggbGlzdFsgZmlyaW5nSW5kZXggXS5hcHBseSggZGF0YVsgMCBdLCBkYXRhWyAxIF0g
KSA9PT0gZmFsc2UgJiYgb3B0aW9ucy5zdG9wT25GYWxzZSApIHsKLSAgICBtZW1vcnkgPSBmYWxz
ZTsgLy8gVG8gcHJldmVudCBmdXJ0aGVyIGNhbGxzIHVzaW5nIGFkZAotICAgIGJyZWFrOwotICAg
IH0KLSAgICB9Ci0gICAgZmlyaW5nID0gZmFsc2U7Ci0gICAgaWYgKCBsaXN0ICkgewotICAgIGlm
ICggc3RhY2sgKSB7Ci0gICAgaWYgKCBzdGFjay5sZW5ndGggKSB7Ci0gICAgZmlyZSggc3RhY2su
c2hpZnQoKSApOwotICAgIH0KLSAgICB9IGVsc2UgaWYgKCBtZW1vcnkgKSB7Ci0gICAgbGlzdCA9
IFtdOwotICAgIH0gZWxzZSB7Ci0gICAgc2VsZi5kaXNhYmxlKCk7Ci0gICAgfQotICAgIH0KLSAg
ICB9LAotICAgIC8vIEFjdHVhbCBDYWxsYmFja3Mgb2JqZWN0Ci0gICAgc2VsZiA9IHsKLSAgICAv
LyBBZGQgYSBjYWxsYmFjayBvciBhIGNvbGxlY3Rpb24gb2YgY2FsbGJhY2tzIHRvIHRoZSBsaXN0
Ci0gICAgYWRkOiBmdW5jdGlvbigpIHsKLSAgICBpZiAoIGxpc3QgKSB7Ci0gICAgLy8gRmlyc3Qs
IHdlIHNhdmUgdGhlIGN1cnJlbnQgbGVuZ3RoCi0gICAgdmFyIHN0YXJ0ID0gbGlzdC5sZW5ndGg7
Ci0gICAgKGZ1bmN0aW9uIGFkZCggYXJncyApIHsKLSAgICBqUXVlcnkuZWFjaCggYXJncywgZnVu
Y3Rpb24oIF8sIGFyZyApIHsKLSAgICB2YXIgdHlwZSA9IGpRdWVyeS50eXBlKCBhcmcgKTsKLSAg
ICBpZiAoIHR5cGUgPT09ICJmdW5jdGlvbiIgKSB7Ci0gICAgaWYgKCAhb3B0aW9ucy51bmlxdWUg
fHwgIXNlbGYuaGFzKCBhcmcgKSApIHsKLSAgICBsaXN0LnB1c2goIGFyZyApOwotICAgIH0KLSAg
ICB9IGVsc2UgaWYgKCBhcmcgJiYgYXJnLmxlbmd0aCAmJiB0eXBlICE9PSAic3RyaW5nIiApIHsK
LSAgICAvLyBJbnNwZWN0IHJlY3Vyc2l2ZWx5Ci0gICAgYWRkKCBhcmcgKTsKLSAgICB9Ci0gICAg
fSk7Ci0gICAgfSkoIGFyZ3VtZW50cyApOwotICAgIC8vIERvIHdlIG5lZWQgdG8gYWRkIHRoZSBj
YWxsYmFja3MgdG8gdGhlCi0gICAgLy8gY3VycmVudCBmaXJpbmcgYmF0Y2g/Ci0gICAgaWYgKCBm
aXJpbmcgKSB7Ci0gICAgZmlyaW5nTGVuZ3RoID0gbGlzdC5sZW5ndGg7Ci0gICAgLy8gV2l0aCBt
ZW1vcnksIGlmIHdlJ3JlIG5vdCBmaXJpbmcgdGhlbgotICAgIC8vIHdlIHNob3VsZCBjYWxsIHJp
Z2h0IGF3YXkKLSAgICB9IGVsc2UgaWYgKCBtZW1vcnkgKSB7Ci0gICAgZmlyaW5nU3RhcnQgPSBz
dGFydDsKLSAgICBmaXJlKCBtZW1vcnkgKTsKLSAgICB9Ci0gICAgfQotICAgIHJldHVybiB0aGlz
OwotICAgIH0sCi0gICAgLy8gUmVtb3ZlIGEgY2FsbGJhY2sgZnJvbSB0aGUgbGlzdAotICAgIHJl
bW92ZTogZnVuY3Rpb24oKSB7Ci0gICAgaWYgKCBsaXN0ICkgewotICAgIGpRdWVyeS5lYWNoKCBh
cmd1bWVudHMsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7Ci0gICAgdmFyIGluZGV4OwotICAgIHdoaWxl
KCAoIGluZGV4ID0galF1ZXJ5LmluQXJyYXkoIGFyZywgbGlzdCwgaW5kZXggKSApID4gLTEgKSB7
Ci0gICAgbGlzdC5zcGxpY2UoIGluZGV4LCAxICk7Ci0gICAgLy8gSGFuZGxlIGZpcmluZyBpbmRl
eGVzCi0gICAgaWYgKCBmaXJpbmcgKSB7Ci0gICAgaWYgKCBpbmRleCA8PSBmaXJpbmdMZW5ndGgg
KSB7Ci0gICAgZmlyaW5nTGVuZ3RoLS07Ci0gICAgfQotICAgIGlmICggaW5kZXggPD0gZmlyaW5n
SW5kZXggKSB7Ci0gICAgZmlyaW5nSW5kZXgtLTsKLSAgICB9Ci0gICAgfQotICAgIH0KLSAgICB9
KTsKLSAgICB9Ci0gICAgcmV0dXJuIHRoaXM7Ci0gICAgfSwKLSAgICAvLyBDaGVjayBpZiBhIGdp
dmVuIGNhbGxiYWNrIGlzIGluIHRoZSBsaXN0LgotICAgIC8vIElmIG5vIGFyZ3VtZW50IGlzIGdp
dmVuLCByZXR1cm4gd2hldGhlciBvciBub3QgbGlzdCBoYXMgY2FsbGJhY2tzIGF0dGFjaGVkLgot
ICAgIGhhczogZnVuY3Rpb24oIGZuICkgewotICAgIHJldHVybiBmbiA/IGpRdWVyeS5pbkFycmF5
KCBmbiwgbGlzdCApID4gLTEgOiAhISggbGlzdCAmJiBsaXN0Lmxlbmd0aCApOwotICAgIH0sCi0g
ICAgLy8gUmVtb3ZlIGFsbCBjYWxsYmFja3MgZnJvbSB0aGUgbGlzdAotICAgIGVtcHR5OiBmdW5j
dGlvbigpIHsKLSAgICBsaXN0ID0gW107Ci0gICAgcmV0dXJuIHRoaXM7Ci0gICAgfSwKLSAgICAv
LyBIYXZlIHRoZSBsaXN0IGRvIG5vdGhpbmcgYW55bW9yZQotICAgIGRpc2FibGU6IGZ1bmN0aW9u
KCkgewotICAgIGxpc3QgPSBzdGFjayA9IG1lbW9yeSA9IHVuZGVmaW5lZDsKLSAgICByZXR1cm4g
dGhpczsKLSAgICB9LAotICAgIC8vIElzIGl0IGRpc2FibGVkPwotICAgIGRpc2FibGVkOiBmdW5j
dGlvbigpIHsKLSAgICByZXR1cm4gIWxpc3Q7Ci0gICAgfSwKLSAgICAvLyBMb2NrIHRoZSBsaXN0
IGluIGl0cyBjdXJyZW50IHN0YXRlCi0gICAgbG9jazogZnVuY3Rpb24oKSB7Ci0gICAgc3RhY2sg
PSB1bmRlZmluZWQ7Ci0gICAgaWYgKCAhbWVtb3J5ICkgewotICAgIHNlbGYuZGlzYWJsZSgpOwot
ICAgIH0KLSAgICByZXR1cm4gdGhpczsKLSAgICB9LAotICAgIC8vIElzIGl0IGxvY2tlZD8KLSAg
ICBsb2NrZWQ6IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiAhc3RhY2s7Ci0gICAgfSwKLSAgICAv
LyBDYWxsIGFsbCBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gY29udGV4dCBhbmQgYXJndW1lbnRz
Ci0gICAgZmlyZVdpdGg6IGZ1bmN0aW9uKCBjb250ZXh0LCBhcmdzICkgewotICAgIGFyZ3MgPSBh
cmdzIHx8IFtdOwotICAgIGFyZ3MgPSBbIGNvbnRleHQsIGFyZ3Muc2xpY2UgPyBhcmdzLnNsaWNl
KCkgOiBhcmdzIF07Ci0gICAgaWYgKCBsaXN0ICYmICggIWZpcmVkIHx8IHN0YWNrICkgKSB7Ci0g
ICAgaWYgKCBmaXJpbmcgKSB7Ci0gICAgc3RhY2sucHVzaCggYXJncyApOwotICAgIH0gZWxzZSB7
Ci0gICAgZmlyZSggYXJncyApOwotICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRoaXM7Ci0gICAg
fSwKLSAgICAvLyBDYWxsIGFsbCB0aGUgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50
cwotICAgIGZpcmU6IGZ1bmN0aW9uKCkgewotICAgIHNlbGYuZmlyZVdpdGgoIHRoaXMsIGFyZ3Vt
ZW50cyApOwotICAgIHJldHVybiB0aGlzOwotICAgIH0sCi0gICAgLy8gVG8ga25vdyBpZiB0aGUg
Y2FsbGJhY2tzIGhhdmUgYWxyZWFkeSBiZWVuIGNhbGxlZCBhdCBsZWFzdCBvbmNlCi0gICAgZmly
ZWQ6IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiAhIWZpcmVkOwotICAgIH0KLSAgICB9OwotCi0g
ICAgcmV0dXJuIHNlbGY7Ci19OwotalF1ZXJ5LmV4dGVuZCh7Ci0KLSAgICBEZWZlcnJlZDogZnVu
Y3Rpb24oIGZ1bmMgKSB7Ci0gICAgdmFyIHR1cGxlcyA9IFsKLSAgICAvLyBhY3Rpb24sIGFkZCBs
aXN0ZW5lciwgbGlzdGVuZXIgbGlzdCwgZmluYWwgc3RhdGUKLSAgICBbICJyZXNvbHZlIiwgImRv
bmUiLCBqUXVlcnkuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCAicmVzb2x2ZWQiIF0sCi0gICAg
WyAicmVqZWN0IiwgImZhaWwiLCBqUXVlcnkuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCAicmVq
ZWN0ZWQiIF0sCi0gICAgWyAibm90aWZ5IiwgInByb2dyZXNzIiwgalF1ZXJ5LkNhbGxiYWNrcygi
bWVtb3J5IikgXQotICAgIF0sCi0gICAgc3RhdGUgPSAicGVuZGluZyIsCi0gICAgcHJvbWlzZSA9
IHsKLSAgICBzdGF0ZTogZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHN0YXRlOwotICAgIH0sCi0g
ICAgYWx3YXlzOiBmdW5jdGlvbigpIHsKLSAgICBkZWZlcnJlZC5kb25lKCBhcmd1bWVudHMgKS5m
YWlsKCBhcmd1bWVudHMgKTsKLSAgICByZXR1cm4gdGhpczsKLSAgICB9LAotICAgIHRoZW46IGZ1
bmN0aW9uKCAvKiBmbkRvbmUsIGZuRmFpbCwgZm5Qcm9ncmVzcyAqLyApIHsKLSAgICB2YXIgZm5z
ID0gYXJndW1lbnRzOwotICAgIHJldHVybiBqUXVlcnkuRGVmZXJyZWQoZnVuY3Rpb24oIG5ld0Rl
ZmVyICkgewotICAgIGpRdWVyeS5lYWNoKCB0dXBsZXMsIGZ1bmN0aW9uKCBpLCB0dXBsZSApIHsK
LSAgICB2YXIgYWN0aW9uID0gdHVwbGVbIDAgXSwKLSAgICBmbiA9IGpRdWVyeS5pc0Z1bmN0aW9u
KCBmbnNbIGkgXSApICYmIGZuc1sgaSBdOwotICAgIC8vIGRlZmVycmVkWyBkb25lIHwgZmFpbCB8
IHByb2dyZXNzIF0gZm9yIGZvcndhcmRpbmcgYWN0aW9ucyB0byBuZXdEZWZlcgotICAgIGRlZmVy
cmVkWyB0dXBsZVsxXSBdKGZ1bmN0aW9uKCkgewotICAgIHZhciByZXR1cm5lZCA9IGZuICYmIGZu
LmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKLSAgICBpZiAoIHJldHVybmVkICYmIGpRdWVyeS5p
c0Z1bmN0aW9uKCByZXR1cm5lZC5wcm9taXNlICkgKSB7Ci0gICAgcmV0dXJuZWQucHJvbWlzZSgp
Ci0gICAgLmRvbmUoIG5ld0RlZmVyLnJlc29sdmUgKQotICAgIC5mYWlsKCBuZXdEZWZlci5yZWpl
Y3QgKQotICAgIC5wcm9ncmVzcyggbmV3RGVmZXIubm90aWZ5ICk7Ci0gICAgfSBlbHNlIHsKLSAg
ICBuZXdEZWZlclsgYWN0aW9uICsgIldpdGgiIF0oIHRoaXMgPT09IHByb21pc2UgPyBuZXdEZWZl
ci5wcm9taXNlKCkgOiB0aGlzLCBmbiA/IFsgcmV0dXJuZWQgXSA6IGFyZ3VtZW50cyApOwotICAg
IH0KLSAgICB9KTsKLSAgICB9KTsKLSAgICBmbnMgPSBudWxsOwotICAgIH0pLnByb21pc2UoKTsK
LSAgICB9LAotICAgIC8vIEdldCBhIHByb21pc2UgZm9yIHRoaXMgZGVmZXJyZWQKLSAgICAvLyBJ
ZiBvYmogaXMgcHJvdmlkZWQsIHRoZSBwcm9taXNlIGFzcGVjdCBpcyBhZGRlZCB0byB0aGUgb2Jq
ZWN0Ci0gICAgcHJvbWlzZTogZnVuY3Rpb24oIG9iaiApIHsKLSAgICByZXR1cm4gb2JqICE9IG51
bGwgPyBqUXVlcnkuZXh0ZW5kKCBvYmosIHByb21pc2UgKSA6IHByb21pc2U7Ci0gICAgfQotICAg
IH0sCi0gICAgZGVmZXJyZWQgPSB7fTsKLQotICAgIC8vIEtlZXAgcGlwZSBmb3IgYmFjay1jb21w
YXQKLSAgICBwcm9taXNlLnBpcGUgPSBwcm9taXNlLnRoZW47Ci0KLSAgICAvLyBBZGQgbGlzdC1z
cGVjaWZpYyBtZXRob2RzCi0gICAgalF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIGksIHR1
cGxlICkgewotICAgIHZhciBsaXN0ID0gdHVwbGVbIDIgXSwKLSAgICBzdGF0ZVN0cmluZyA9IHR1
cGxlWyAzIF07Ci0KLSAgICAvLyBwcm9taXNlWyBkb25lIHwgZmFpbCB8IHByb2dyZXNzIF0gPSBs
aXN0LmFkZAotICAgIHByb21pc2VbIHR1cGxlWzFdIF0gPSBsaXN0LmFkZDsKLQotICAgIC8vIEhh
bmRsZSBzdGF0ZQotICAgIGlmICggc3RhdGVTdHJpbmcgKSB7Ci0gICAgbGlzdC5hZGQoZnVuY3Rp
b24oKSB7Ci0gICAgLy8gc3RhdGUgPSBbIHJlc29sdmVkIHwgcmVqZWN0ZWQgXQotICAgIHN0YXRl
ID0gc3RhdGVTdHJpbmc7Ci0KLSAgICAvLyBbIHJlamVjdF9saXN0IHwgcmVzb2x2ZV9saXN0IF0u
ZGlzYWJsZTsgcHJvZ3Jlc3NfbGlzdC5sb2NrCi0gICAgfSwgdHVwbGVzWyBpIF4gMSBdWyAyIF0u
ZGlzYWJsZSwgdHVwbGVzWyAyIF1bIDIgXS5sb2NrICk7Ci0gICAgfQotCi0gICAgLy8gZGVmZXJy
ZWRbIHJlc29sdmUgfCByZWplY3QgfCBub3RpZnkgXQotICAgIGRlZmVycmVkWyB0dXBsZVswXSBd
ID0gZnVuY3Rpb24oKSB7Ci0gICAgZGVmZXJyZWRbIHR1cGxlWzBdICsgIldpdGgiIF0oIHRoaXMg
PT09IGRlZmVycmVkID8gcHJvbWlzZSA6IHRoaXMsIGFyZ3VtZW50cyApOwotICAgIHJldHVybiB0
aGlzOwotICAgIH07Ci0gICAgZGVmZXJyZWRbIHR1cGxlWzBdICsgIldpdGgiIF0gPSBsaXN0LmZp
cmVXaXRoOwotICAgIH0pOwotCi0gICAgLy8gTWFrZSB0aGUgZGVmZXJyZWQgYSBwcm9taXNlCi0g
ICAgcHJvbWlzZS5wcm9taXNlKCBkZWZlcnJlZCApOwotCi0gICAgLy8gQ2FsbCBnaXZlbiBmdW5j
IGlmIGFueQotICAgIGlmICggZnVuYyApIHsKLSAgICBmdW5jLmNhbGwoIGRlZmVycmVkLCBkZWZl
cnJlZCApOwotICAgIH0KLQotICAgIC8vIEFsbCBkb25lIQotICAgIHJldHVybiBkZWZlcnJlZDsK
LSAgICB9LAotCi0gICAgLy8gRGVmZXJyZWQgaGVscGVyCi0gICAgd2hlbjogZnVuY3Rpb24oIHN1
Ym9yZGluYXRlIC8qICwgLi4uLCBzdWJvcmRpbmF0ZU4gKi8gKSB7Ci0gICAgdmFyIGkgPSAwLAot
ICAgIHJlc29sdmVWYWx1ZXMgPSBjb3JlX3NsaWNlLmNhbGwoIGFyZ3VtZW50cyApLAotICAgIGxl
bmd0aCA9IHJlc29sdmVWYWx1ZXMubGVuZ3RoLAotCi0gICAgLy8gdGhlIGNvdW50IG9mIHVuY29t
cGxldGVkIHN1Ym9yZGluYXRlcwotICAgIHJlbWFpbmluZyA9IGxlbmd0aCAhPT0gMSB8fCAoIHN1
Ym9yZGluYXRlICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBzdWJvcmRpbmF0ZS5wcm9taXNlICkgKSA/
IGxlbmd0aCA6IDAsCi0KLSAgICAvLyB0aGUgbWFzdGVyIERlZmVycmVkLiBJZiByZXNvbHZlVmFs
dWVzIGNvbnNpc3Qgb2Ygb25seSBhIHNpbmdsZSBEZWZlcnJlZCwganVzdCB1c2UgdGhhdC4KLSAg
ICBkZWZlcnJlZCA9IHJlbWFpbmluZyA9PT0gMSA/IHN1Ym9yZGluYXRlIDogalF1ZXJ5LkRlZmVy
cmVkKCksCi0KLSAgICAvLyBVcGRhdGUgZnVuY3Rpb24gZm9yIGJvdGggcmVzb2x2ZSBhbmQgcHJv
Z3Jlc3MgdmFsdWVzCi0gICAgdXBkYXRlRnVuYyA9IGZ1bmN0aW9uKCBpLCBjb250ZXh0cywgdmFs
dWVzICkgewotICAgIHJldHVybiBmdW5jdGlvbiggdmFsdWUgKSB7Ci0gICAgY29udGV4dHNbIGkg
XSA9IHRoaXM7Ci0gICAgdmFsdWVzWyBpIF0gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGNvcmVf
c2xpY2UuY2FsbCggYXJndW1lbnRzICkgOiB2YWx1ZTsKLSAgICBpZiggdmFsdWVzID09PSBwcm9n
cmVzc1ZhbHVlcyApIHsKLSAgICBkZWZlcnJlZC5ub3RpZnlXaXRoKCBjb250ZXh0cywgdmFsdWVz
ICk7Ci0gICAgfSBlbHNlIGlmICggISggLS1yZW1haW5pbmcgKSApIHsKLSAgICBkZWZlcnJlZC5y
ZXNvbHZlV2l0aCggY29udGV4dHMsIHZhbHVlcyApOwotICAgIH0KLSAgICB9OwotICAgIH0sCi0K
LSAgICBwcm9ncmVzc1ZhbHVlcywgcHJvZ3Jlc3NDb250ZXh0cywgcmVzb2x2ZUNvbnRleHRzOwot
Ci0gICAgLy8gYWRkIGxpc3RlbmVycyB0byBEZWZlcnJlZCBzdWJvcmRpbmF0ZXM7IHRyZWF0IG90
aGVycyBhcyByZXNvbHZlZAotICAgIGlmICggbGVuZ3RoID4gMSApIHsKLSAgICBwcm9ncmVzc1Zh
bHVlcyA9IG5ldyBBcnJheSggbGVuZ3RoICk7Ci0gICAgcHJvZ3Jlc3NDb250ZXh0cyA9IG5ldyBB
cnJheSggbGVuZ3RoICk7Ci0gICAgcmVzb2x2ZUNvbnRleHRzID0gbmV3IEFycmF5KCBsZW5ndGgg
KTsKLSAgICBmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHsKLSAgICBpZiAoIHJlc29sdmVWYWx1
ZXNbIGkgXSAmJiBqUXVlcnkuaXNGdW5jdGlvbiggcmVzb2x2ZVZhbHVlc1sgaSBdLnByb21pc2Ug
KSApIHsKLSAgICByZXNvbHZlVmFsdWVzWyBpIF0ucHJvbWlzZSgpCi0gICAgLmRvbmUoIHVwZGF0
ZUZ1bmMoIGksIHJlc29sdmVDb250ZXh0cywgcmVzb2x2ZVZhbHVlcyApICkKLSAgICAuZmFpbCgg
ZGVmZXJyZWQucmVqZWN0ICkKLSAgICAucHJvZ3Jlc3MoIHVwZGF0ZUZ1bmMoIGksIHByb2dyZXNz
Q29udGV4dHMsIHByb2dyZXNzVmFsdWVzICkgKTsKLSAgICB9IGVsc2UgewotICAgIC0tcmVtYWlu
aW5nOwotICAgIH0KLSAgICB9Ci0gICAgfQotCi0gICAgLy8gaWYgd2UncmUgbm90IHdhaXRpbmcg
b24gYW55dGhpbmcsIHJlc29sdmUgdGhlIG1hc3RlcgotICAgIGlmICggIXJlbWFpbmluZyApIHsK
LSAgICBkZWZlcnJlZC5yZXNvbHZlV2l0aCggcmVzb2x2ZUNvbnRleHRzLCByZXNvbHZlVmFsdWVz
ICk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRlZmVycmVkLnByb21pc2UoKTsKLSAgICB9Ci19KTsK
LWpRdWVyeS5zdXBwb3J0ID0gKGZ1bmN0aW9uKCkgewotCi0gICAgdmFyIHN1cHBvcnQsIGFsbCwg
YSwKLSAgICBpbnB1dCwgc2VsZWN0LCBmcmFnbWVudCwKLSAgICBvcHQsIGV2ZW50TmFtZSwgaXNT
dXBwb3J0ZWQsIGksCi0gICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0K
LSAgICAvLyBTZXR1cAotICAgIGRpdi5zZXRBdHRyaWJ1dGUoICJjbGFzc05hbWUiLCAidCIgKTsK
LSAgICBkaXYuaW5uZXJIVE1MID0gIiAgPGxpbmsvPjx0YWJsZT48L3RhYmxlPjxhIGhyZWY9Jy9h
Jz5hPC9hPjxpbnB1dCB0eXBlPSdjaGVja2JveCcvPiI7Ci0KLSAgICAvLyBTdXBwb3J0IHRlc3Rz
IHdvbid0IHJ1biBpbiBzb21lIGxpbWl0ZWQgb3Igbm9uLWJyb3dzZXIgZW52aXJvbm1lbnRzCi0g
ICAgYWxsID0gZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7Ci0gICAgYSA9IGRpdi5nZXRF
bGVtZW50c0J5VGFnTmFtZSgiYSIpWyAwIF07Ci0gICAgaWYgKCAhYWxsIHx8ICFhIHx8ICFhbGwu
bGVuZ3RoICkgewotICAgIHJldHVybiB7fTsKLSAgICB9Ci0KLSAgICAvLyBGaXJzdCBiYXRjaCBv
ZiB0ZXN0cwotICAgIHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwot
ICAgIG9wdCA9IHNlbGVjdC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0
aW9uIikgKTsKLSAgICBpbnB1dCA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKVsg
MCBdOwotCi0gICAgYS5zdHlsZS5jc3NUZXh0ID0gInRvcDoxcHg7ZmxvYXQ6bGVmdDtvcGFjaXR5
Oi41IjsKLSAgICBzdXBwb3J0ID0gewotICAgIC8vIFRlc3Qgc2V0QXR0cmlidXRlIG9uIGNhbWVs
Q2FzZSBjbGFzcy4gSWYgaXQgd29ya3MsIHdlIG5lZWQgYXR0ckZpeGVzIHdoZW4gZG9pbmcgZ2V0
L3NldEF0dHJpYnV0ZSAoaWU2LzcpCi0gICAgZ2V0U2V0QXR0cmlidXRlOiBkaXYuY2xhc3NOYW1l
ICE9PSAidCIsCi0KLSAgICAvLyBJRSBzdHJpcHMgbGVhZGluZyB3aGl0ZXNwYWNlIHdoZW4gLmlu
bmVySFRNTCBpcyB1c2VkCi0gICAgbGVhZGluZ1doaXRlc3BhY2U6IGRpdi5maXJzdENoaWxkLm5v
ZGVUeXBlID09PSAzLAotCi0gICAgLy8gTWFrZSBzdXJlIHRoYXQgdGJvZHkgZWxlbWVudHMgYXJl
bid0IGF1dG9tYXRpY2FsbHkgaW5zZXJ0ZWQKLSAgICAvLyBJRSB3aWxsIGluc2VydCB0aGVtIGlu
dG8gZW1wdHkgdGFibGVzCi0gICAgdGJvZHk6ICFkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRi
b2R5IikubGVuZ3RoLAotCi0gICAgLy8gTWFrZSBzdXJlIHRoYXQgbGluayBlbGVtZW50cyBnZXQg
c2VyaWFsaXplZCBjb3JyZWN0bHkgYnkgaW5uZXJIVE1MCi0gICAgLy8gVGhpcyByZXF1aXJlcyBh
IHdyYXBwZXIgZWxlbWVudCBpbiBJRQotICAgIGh0bWxTZXJpYWxpemU6ICEhZGl2LmdldEVsZW1l
bnRzQnlUYWdOYW1lKCJsaW5rIikubGVuZ3RoLAotCi0gICAgLy8gR2V0IHRoZSBzdHlsZSBpbmZv
cm1hdGlvbiBmcm9tIGdldEF0dHJpYnV0ZQotICAgIC8vIChJRSB1c2VzIC5jc3NUZXh0IGluc3Rl
YWQpCi0gICAgc3R5bGU6IC90b3AvLnRlc3QoIGEuZ2V0QXR0cmlidXRlKCJzdHlsZSIpICksCi0K
LSAgICAvLyBNYWtlIHN1cmUgdGhhdCBVUkxzIGFyZW4ndCBtYW5pcHVsYXRlZAotICAgIC8vIChJ
RSBub3JtYWxpemVzIGl0IGJ5IGRlZmF1bHQpCi0gICAgaHJlZk5vcm1hbGl6ZWQ6IGEuZ2V0QXR0
cmlidXRlKCJocmVmIikgPT09ICIvYSIsCi0KLSAgICAvLyBNYWtlIHN1cmUgdGhhdCBlbGVtZW50
IG9wYWNpdHkgZXhpc3RzCi0gICAgLy8gKElFIHVzZXMgZmlsdGVyIGluc3RlYWQpCi0gICAgLy8g
VXNlIGEgcmVnZXggdG8gd29yayBhcm91bmQgYSBXZWJLaXQgaXNzdWUuIFNlZSAjNTE0NQotICAg
IG9wYWNpdHk6IC9eMC41Ly50ZXN0KCBhLnN0eWxlLm9wYWNpdHkgKSwKLQotICAgIC8vIFZlcmlm
eSBzdHlsZSBmbG9hdCBleGlzdGVuY2UKLSAgICAvLyAoSUUgdXNlcyBzdHlsZUZsb2F0IGluc3Rl
YWQgb2YgY3NzRmxvYXQpCi0gICAgY3NzRmxvYXQ6ICEhYS5zdHlsZS5jc3NGbG9hdCwKLQotICAg
IC8vIENoZWNrIHRoZSBkZWZhdWx0IGNoZWNrYm94L3JhZGlvIHZhbHVlICgiIiBvbiBXZWJLaXQ7
ICJvbiIgZWxzZXdoZXJlKQotICAgIGNoZWNrT246ICEhaW5wdXQudmFsdWUsCi0KLSAgICAvLyBN
YWtlIHN1cmUgdGhhdCBhIHNlbGVjdGVkLWJ5LWRlZmF1bHQgb3B0aW9uIGhhcyBhIHdvcmtpbmcg
c2VsZWN0ZWQgcHJvcGVydHkuCi0gICAgLy8gKFdlYktpdCBkZWZhdWx0cyB0byBmYWxzZSBpbnN0
ZWFkIG9mIHRydWUsIElFIHRvbywgaWYgaXQncyBpbiBhbiBvcHRncm91cCkKLSAgICBvcHRTZWxl
Y3RlZDogb3B0LnNlbGVjdGVkLAotCi0gICAgLy8gVGVzdHMgZm9yIGVuY3R5cGUgc3VwcG9ydCBv
biBhIGZvcm0gKCM2NzQzKQotICAgIGVuY3R5cGU6ICEhZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
Zm9ybSIpLmVuY3R5cGUsCi0KLSAgICAvLyBNYWtlcyBzdXJlIGNsb25pbmcgYW4gaHRtbDUgZWxl
bWVudCBkb2VzIG5vdCBjYXVzZSBwcm9ibGVtcwotICAgIC8vIFdoZXJlIG91dGVySFRNTCBpcyB1
bmRlZmluZWQsIHRoaXMgc3RpbGwgd29ya3MKLSAgICBodG1sNUNsb25lOiBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJuYXYiKS5jbG9uZU5vZGUoIHRydWUgKS5vdXRlckhUTUwgIT09ICI8Om5hdj48
LzpuYXY+IiwKLQotICAgIC8vIGpRdWVyeS5zdXBwb3J0LmJveE1vZGVsIERFUFJFQ0FURUQgaW4g
MS44IHNpbmNlIHdlIGRvbid0IHN1cHBvcnQgUXVpcmtzIE1vZGUKLSAgICBib3hNb2RlbDogZG9j
dW1lbnQuY29tcGF0TW9kZSA9PT0gIkNTUzFDb21wYXQiLAotCi0gICAgLy8gV2lsbCBiZSBkZWZp
bmVkIGxhdGVyCi0gICAgZGVsZXRlRXhwYW5kbzogdHJ1ZSwKLSAgICBub0Nsb25lRXZlbnQ6IHRy
dWUsCi0gICAgaW5saW5lQmxvY2tOZWVkc0xheW91dDogZmFsc2UsCi0gICAgc2hyaW5rV3JhcEJs
b2NrczogZmFsc2UsCi0gICAgcmVsaWFibGVNYXJnaW5SaWdodDogdHJ1ZSwKLSAgICBib3hTaXpp
bmdSZWxpYWJsZTogdHJ1ZSwKLSAgICBwaXhlbFBvc2l0aW9uOiBmYWxzZQotICAgIH07Ci0KLSAg
ICAvLyBNYWtlIHN1cmUgY2hlY2tlZCBzdGF0dXMgaXMgcHJvcGVybHkgY2xvbmVkCi0gICAgaW5w
dXQuY2hlY2tlZCA9IHRydWU7Ci0gICAgc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCA9IGlucHV0LmNs
b25lTm9kZSggdHJ1ZSApLmNoZWNrZWQ7Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgb3B0
aW9ucyBpbnNpZGUgZGlzYWJsZWQgc2VsZWN0cyBhcmVuJ3QgbWFya2VkIGFzIGRpc2FibGVkCi0g
ICAgLy8gKFdlYktpdCBtYXJrcyB0aGVtIGFzIGRpc2FibGVkKQotICAgIHNlbGVjdC5kaXNhYmxl
ZCA9IHRydWU7Ci0gICAgc3VwcG9ydC5vcHREaXNhYmxlZCA9ICFvcHQuZGlzYWJsZWQ7Ci0KLSAg
ICAvLyBTdXBwb3J0OiBJRTw5Ci0gICAgdHJ5IHsKLSAgICBkZWxldGUgZGl2LnRlc3Q7Ci0gICAg
fSBjYXRjaCggZSApIHsKLSAgICBzdXBwb3J0LmRlbGV0ZUV4cGFuZG8gPSBmYWxzZTsKLSAgICB9
Ci0KLSAgICAvLyBDaGVjayBpZiB3ZSBjYW4gdHJ1c3QgZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpCi0g
ICAgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgIGlucHV0LnNl
dEF0dHJpYnV0ZSggInZhbHVlIiwgIiIgKTsKLSAgICBzdXBwb3J0LmlucHV0ID0gaW5wdXQuZ2V0
QXR0cmlidXRlKCAidmFsdWUiICkgPT09ICIiOwotCi0gICAgLy8gQ2hlY2sgaWYgYW4gaW5wdXQg
bWFpbnRhaW5zIGl0cyB2YWx1ZSBhZnRlciBiZWNvbWluZyBhIHJhZGlvCi0gICAgaW5wdXQudmFs
dWUgPSAidCI7Ci0gICAgaW5wdXQuc2V0QXR0cmlidXRlKCAidHlwZSIsICJyYWRpbyIgKTsKLSAg
ICBzdXBwb3J0LnJhZGlvVmFsdWUgPSBpbnB1dC52YWx1ZSA9PT0gInQiOwotCi0gICAgLy8gIzEx
MjE3IC0gV2ViS2l0IGxvc2VzIGNoZWNrIHdoZW4gdGhlIG5hbWUgaXMgYWZ0ZXIgdGhlIGNoZWNr
ZWQgYXR0cmlidXRlCi0gICAgaW5wdXQuc2V0QXR0cmlidXRlKCAiY2hlY2tlZCIsICJ0IiApOwot
ICAgIGlucHV0LnNldEF0dHJpYnV0ZSggIm5hbWUiLCAidCIgKTsKLQotICAgIGZyYWdtZW50ID0g
ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwotICAgIGZyYWdtZW50LmFwcGVuZENo
aWxkKCBpbnB1dCApOwotCi0gICAgLy8gQ2hlY2sgaWYgYSBkaXNjb25uZWN0ZWQgY2hlY2tib3gg
d2lsbCByZXRhaW4gaXRzIGNoZWNrZWQKLSAgICAvLyB2YWx1ZSBvZiB0cnVlIGFmdGVyIGFwcGVu
ZGVkIHRvIHRoZSBET00gKElFNi83KQotICAgIHN1cHBvcnQuYXBwZW5kQ2hlY2tlZCA9IGlucHV0
LmNoZWNrZWQ7Ci0KLSAgICAvLyBXZWJLaXQgZG9lc24ndCBjbG9uZSBjaGVja2VkIHN0YXRlIGNv
cnJlY3RseSBpbiBmcmFnbWVudHMKLSAgICBzdXBwb3J0LmNoZWNrQ2xvbmUgPSBmcmFnbWVudC5j
bG9uZU5vZGUoIHRydWUgKS5jbG9uZU5vZGUoIHRydWUgKS5sYXN0Q2hpbGQuY2hlY2tlZDsKLQot
ICAgIC8vIFN1cHBvcnQ6IElFPDkKLSAgICAvLyBPcGVyYSBkb2VzIG5vdCBjbG9uZSBldmVudHMg
KGFuZCB0eXBlb2YgZGl2LmF0dGFjaEV2ZW50ID09PSB1bmRlZmluZWQpLgotICAgIC8vIElFOS0x
MCBjbG9uZXMgZXZlbnRzIGJvdW5kIHZpYSBhdHRhY2hFdmVudCwgYnV0IHRoZXkgZG9uJ3QgdHJp
Z2dlciB3aXRoIC5jbGljaygpCi0gICAgaWYgKCBkaXYuYXR0YWNoRXZlbnQgKSB7Ci0gICAgZGl2
LmF0dGFjaEV2ZW50KCAib25jbGljayIsIGZ1bmN0aW9uKCkgewotICAgIHN1cHBvcnQubm9DbG9u
ZUV2ZW50ID0gZmFsc2U7Ci0gICAgfSk7Ci0KLSAgICBkaXYuY2xvbmVOb2RlKCB0cnVlICkuY2xp
Y2soKTsKLSAgICB9Ci0KLSAgICAvLyBTdXBwb3J0OiBJRTw5IChsYWNrIHN1Ym1pdC9jaGFuZ2Ug
YnViYmxlKSwgRmlyZWZveCAxNysgKGxhY2sgZm9jdXNpbiBldmVudCkKLSAgICAvLyBCZXdhcmUg
b2YgQ1NQIHJlc3RyaWN0aW9ucyAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vU2Vj
dXJpdHkvQ1NQKSwgdGVzdC9jc3AucGhwCi0gICAgZm9yICggaSBpbiB7IHN1Ym1pdDogdHJ1ZSwg
Y2hhbmdlOiB0cnVlLCBmb2N1c2luOiB0cnVlIH0pIHsKLSAgICBkaXYuc2V0QXR0cmlidXRlKCBl
dmVudE5hbWUgPSAib24iICsgaSwgInQiICk7Ci0KLSAgICBzdXBwb3J0WyBpICsgIkJ1YmJsZXMi
IF0gPSBldmVudE5hbWUgaW4gd2luZG93IHx8IGRpdi5hdHRyaWJ1dGVzWyBldmVudE5hbWUgXS5l
eHBhbmRvID09PSBmYWxzZTsKLSAgICB9Ci0KLSAgICBkaXYuc3R5bGUuYmFja2dyb3VuZENsaXAg
PSAiY29udGVudC1ib3giOwotICAgIGRpdi5jbG9uZU5vZGUoIHRydWUgKS5zdHlsZS5iYWNrZ3Jv
dW5kQ2xpcCA9ICIiOwotICAgIHN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlID0gZGl2LnN0eWxlLmJh
Y2tncm91bmRDbGlwID09PSAiY29udGVudC1ib3giOwotCi0gICAgLy8gUnVuIHRlc3RzIHRoYXQg
bmVlZCBhIGJvZHkgYXQgZG9jIHJlYWR5Ci0gICAgalF1ZXJ5KGZ1bmN0aW9uKCkgewotICAgIHZh
ciBjb250YWluZXIsIG1hcmdpbkRpdiwgdGRzLAotICAgIGRpdlJlc2V0ID0gInBhZGRpbmc6MDtt
YXJnaW46MDtib3JkZXI6MDtkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Y29udGVudC1ib3g7LW1v
ei1ib3gtc2l6aW5nOmNvbnRlbnQtYm94Oy13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDsi
LAotICAgIGJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdOwot
Ci0gICAgaWYgKCAhYm9keSApIHsKLSAgICAvLyBSZXR1cm4gZm9yIGZyYW1lc2V0IGRvY3MgdGhh
dCBkb24ndCBoYXZlIGEgYm9keQotICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjb250YWluZXIg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICBjb250YWluZXIuc3R5bGUuY3Nz
VGV4dCA9ICJib3JkZXI6MDt3aWR0aDowO2hlaWdodDowO3Bvc2l0aW9uOmFic29sdXRlO3RvcDow
O2xlZnQ6LTk5OTlweDttYXJnaW4tdG9wOjFweCI7Ci0KLSAgICBib2R5LmFwcGVuZENoaWxkKCBj
b250YWluZXIgKS5hcHBlbmRDaGlsZCggZGl2ICk7Ci0KLSAgICAvLyBTdXBwb3J0OiBJRTgKLSAg
ICAvLyBDaGVjayBpZiB0YWJsZSBjZWxscyBzdGlsbCBoYXZlIG9mZnNldFdpZHRoL0hlaWdodCB3
aGVuIHRoZXkgYXJlIHNldAotICAgIC8vIHRvIGRpc3BsYXk6bm9uZSBhbmQgdGhlcmUgYXJlIHN0
aWxsIG90aGVyIHZpc2libGUgdGFibGUgY2VsbHMgaW4gYQotICAgIC8vIHRhYmxlIHJvdzsgaWYg
c28sIG9mZnNldFdpZHRoL0hlaWdodCBhcmUgbm90IHJlbGlhYmxlIGZvciB1c2Ugd2hlbgotICAg
IC8vIGRldGVybWluaW5nIGlmIGFuIGVsZW1lbnQgaGFzIGJlZW4gaGlkZGVuIGRpcmVjdGx5IHVz
aW5nCi0gICAgLy8gZGlzcGxheTpub25lIChpdCBpcyBzdGlsbCBzYWZlIHRvIHVzZSBvZmZzZXRz
IGlmIGEgcGFyZW50IGVsZW1lbnQgaXMKLSAgICAvLyBoaWRkZW47IGRvbiBzYWZldHkgZ29nZ2xl
cyBhbmQgc2VlIGJ1ZyAjNDUxMiBmb3IgbW9yZSBpbmZvcm1hdGlvbikuCi0gICAgZGl2LmlubmVy
SFRNTCA9ICI8dGFibGU+PHRyPjx0ZD48L3RkPjx0ZD50PC90ZD48L3RyPjwvdGFibGU+IjsKLSAg
ICB0ZHMgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgdGRzWyAwIF0uc3R5
bGUuY3NzVGV4dCA9ICJwYWRkaW5nOjA7bWFyZ2luOjA7Ym9yZGVyOjA7ZGlzcGxheTpub25lIjsK
LSAgICBpc1N1cHBvcnRlZCA9ICggdGRzWyAwIF0ub2Zmc2V0SGVpZ2h0ID09PSAwICk7Ci0KLSAg
ICB0ZHNbIDAgXS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgdGRzWyAxIF0uc3R5bGUuZGlzcGxh
eSA9ICJub25lIjsKLQotICAgIC8vIFN1cHBvcnQ6IElFOAotICAgIC8vIENoZWNrIGlmIGVtcHR5
IHRhYmxlIGNlbGxzIHN0aWxsIGhhdmUgb2Zmc2V0V2lkdGgvSGVpZ2h0Ci0gICAgc3VwcG9ydC5y
ZWxpYWJsZUhpZGRlbk9mZnNldHMgPSBpc1N1cHBvcnRlZCAmJiAoIHRkc1sgMCBdLm9mZnNldEhl
aWdodCA9PT0gMCApOwotCi0gICAgLy8gQ2hlY2sgYm94LXNpemluZyBhbmQgbWFyZ2luIGJlaGF2
aW9yCi0gICAgZGl2LmlubmVySFRNTCA9ICIiOwotICAgIGRpdi5zdHlsZS5jc3NUZXh0ID0gImJv
eC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDstd2Via2l0LWJv
eC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjFweDtib3JkZXI6MXB4O2Rpc3BsYXk6YmxvY2s7
d2lkdGg6NHB4O21hcmdpbi10b3A6MSU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjElOyI7Ci0gICAg
c3VwcG9ydC5ib3hTaXppbmcgPSAoIGRpdi5vZmZzZXRXaWR0aCA9PT0gNCApOwotICAgIHN1cHBv
cnQuZG9lc05vdEluY2x1ZGVNYXJnaW5JbkJvZHlPZmZzZXQgPSAoIGJvZHkub2Zmc2V0VG9wICE9
PSAxICk7Ci0KLSAgICAvLyBVc2Ugd2luZG93LmdldENvbXB1dGVkU3R5bGUgYmVjYXVzZSBqc2Rv
bSBvbiBub2RlLmpzIHdpbGwgYnJlYWsgd2l0aG91dCBpdC4KLSAgICBpZiAoIHdpbmRvdy5nZXRD
b21wdXRlZFN0eWxlICkgewotICAgIHN1cHBvcnQucGl4ZWxQb3NpdGlvbiA9ICggd2luZG93Lmdl
dENvbXB1dGVkU3R5bGUoIGRpdiwgbnVsbCApIHx8IHt9ICkudG9wICE9PSAiMSUiOwotICAgIHN1
cHBvcnQuYm94U2l6aW5nUmVsaWFibGUgPSAoIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCBkaXYs
IG51bGwgKSB8fCB7IHdpZHRoOiAiNHB4IiB9ICkud2lkdGggPT09ICI0cHgiOwotCi0gICAgLy8g
Q2hlY2sgaWYgZGl2IHdpdGggZXhwbGljaXQgd2lkdGggYW5kIG5vIG1hcmdpbi1yaWdodCBpbmNv
cnJlY3RseQotICAgIC8vIGdldHMgY29tcHV0ZWQgbWFyZ2luLXJpZ2h0IGJhc2VkIG9uIHdpZHRo
IG9mIGNvbnRhaW5lci4gKCMzMzMzKQotICAgIC8vIEZhaWxzIGluIFdlYktpdCBiZWZvcmUgRmVi
IDIwMTEgbmlnaHRsaWVzCi0gICAgLy8gV2ViS2l0IEJ1ZyAxMzM0MyAtIGdldENvbXB1dGVkU3R5
bGUgcmV0dXJucyB3cm9uZyB2YWx1ZSBmb3IgbWFyZ2luLXJpZ2h0Ci0gICAgbWFyZ2luRGl2ID0g
ZGl2LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSApOwotICAgIG1h
cmdpbkRpdi5zdHlsZS5jc3NUZXh0ID0gZGl2LnN0eWxlLmNzc1RleHQgPSBkaXZSZXNldDsKLSAg
ICBtYXJnaW5EaXYuc3R5bGUubWFyZ2luUmlnaHQgPSBtYXJnaW5EaXYuc3R5bGUud2lkdGggPSAi
MCI7Ci0gICAgZGl2LnN0eWxlLndpZHRoID0gIjFweCI7Ci0KLSAgICBzdXBwb3J0LnJlbGlhYmxl
TWFyZ2luUmlnaHQgPQotICAgICFwYXJzZUZsb2F0KCAoIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxl
KCBtYXJnaW5EaXYsIG51bGwgKSB8fCB7fSApLm1hcmdpblJpZ2h0ICk7Ci0gICAgfQotCi0gICAg
aWYgKCB0eXBlb2YgZGl2LnN0eWxlLnpvb20gIT09IGNvcmVfc3RydW5kZWZpbmVkICkgewotICAg
IC8vIFN1cHBvcnQ6IElFPDgKLSAgICAvLyBDaGVjayBpZiBuYXRpdmVseSBibG9jay1sZXZlbCBl
bGVtZW50cyBhY3QgbGlrZSBpbmxpbmUtYmxvY2sKLSAgICAvLyBlbGVtZW50cyB3aGVuIHNldHRp
bmcgdGhlaXIgZGlzcGxheSB0byAnaW5saW5lJyBhbmQgZ2l2aW5nCi0gICAgLy8gdGhlbSBsYXlv
dXQKLSAgICBkaXYuaW5uZXJIVE1MID0gIiI7Ci0gICAgZGl2LnN0eWxlLmNzc1RleHQgPSBkaXZS
ZXNldCArICJ3aWR0aDoxcHg7cGFkZGluZzoxcHg7ZGlzcGxheTppbmxpbmU7em9vbToxIjsKLSAg
ICBzdXBwb3J0LmlubGluZUJsb2NrTmVlZHNMYXlvdXQgPSAoIGRpdi5vZmZzZXRXaWR0aCA9PT0g
MyApOwotCi0gICAgLy8gU3VwcG9ydDogSUU2Ci0gICAgLy8gQ2hlY2sgaWYgZWxlbWVudHMgd2l0
aCBsYXlvdXQgc2hyaW5rLXdyYXAgdGhlaXIgY2hpbGRyZW4KLSAgICBkaXYuc3R5bGUuZGlzcGxh
eSA9ICJibG9jayI7Ci0gICAgZGl2LmlubmVySFRNTCA9ICI8ZGl2PjwvZGl2PiI7Ci0gICAgZGl2
LmZpcnN0Q2hpbGQuc3R5bGUud2lkdGggPSAiNXB4IjsKLSAgICBzdXBwb3J0LnNocmlua1dyYXBC
bG9ja3MgPSAoIGRpdi5vZmZzZXRXaWR0aCAhPT0gMyApOwotCi0gICAgaWYgKCBzdXBwb3J0Lmlu
bGluZUJsb2NrTmVlZHNMYXlvdXQgKSB7Ci0gICAgLy8gUHJldmVudCBJRSA2IGZyb20gYWZmZWN0
aW5nIGxheW91dCBmb3IgcG9zaXRpb25lZCBlbGVtZW50cyAjMTEwNDgKLSAgICAvLyBQcmV2ZW50
IElFIGZyb20gc2hyaW5raW5nIHRoZSBib2R5IGluIElFIDcgbW9kZSAjMTI4NjkKLSAgICAvLyBT
dXBwb3J0OiBJRTw4Ci0gICAgYm9keS5zdHlsZS56b29tID0gMTsKLSAgICB9Ci0gICAgfQotCi0g
ICAgYm9keS5yZW1vdmVDaGlsZCggY29udGFpbmVyICk7Ci0KLSAgICAvLyBOdWxsIGVsZW1lbnRz
IHRvIGF2b2lkIGxlYWtzIGluIElFCi0gICAgY29udGFpbmVyID0gZGl2ID0gdGRzID0gbWFyZ2lu
RGl2ID0gbnVsbDsKLSAgICB9KTsKLQotICAgIC8vIE51bGwgZWxlbWVudHMgdG8gYXZvaWQgbGVh
a3MgaW4gSUUKLSAgICBhbGwgPSBzZWxlY3QgPSBmcmFnbWVudCA9IG9wdCA9IGEgPSBpbnB1dCA9
IG51bGw7Ci0KLSAgICByZXR1cm4gc3VwcG9ydDsKLX0pKCk7Ci0KLXZhciByYnJhY2UgPSAvKD86
XHtbXHNcU10qXH18XFtbXHNcU10qXF0pJC8sCi0gICAgcm11bHRpRGFzaCA9IC8oW0EtWl0pL2c7
Ci0KLWZ1bmN0aW9uIGludGVybmFsRGF0YSggZWxlbSwgbmFtZSwgZGF0YSwgcHZ0IC8qIEludGVy
bmFsIFVzZSBPbmx5ICovICl7Ci0gICAgaWYgKCAhalF1ZXJ5LmFjY2VwdERhdGEoIGVsZW0gKSAp
IHsKLSAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdmFyIHRoaXNDYWNoZSwgcmV0LAotICAgIGlu
dGVybmFsS2V5ID0galF1ZXJ5LmV4cGFuZG8sCi0gICAgZ2V0QnlOYW1lID0gdHlwZW9mIG5hbWUg
PT09ICJzdHJpbmciLAotCi0gICAgLy8gV2UgaGF2ZSB0byBoYW5kbGUgRE9NIG5vZGVzIGFuZCBK
UyBvYmplY3RzIGRpZmZlcmVudGx5IGJlY2F1c2UgSUU2LTcKLSAgICAvLyBjYW4ndCBHQyBvYmpl
Y3QgcmVmZXJlbmNlcyBwcm9wZXJseSBhY3Jvc3MgdGhlIERPTS1KUyBib3VuZGFyeQotICAgIGlz
Tm9kZSA9IGVsZW0ubm9kZVR5cGUsCi0KLSAgICAvLyBPbmx5IERPTSBub2RlcyBuZWVkIHRoZSBn
bG9iYWwgalF1ZXJ5IGNhY2hlOyBKUyBvYmplY3QgZGF0YSBpcwotICAgIC8vIGF0dGFjaGVkIGRp
cmVjdGx5IHRvIHRoZSBvYmplY3Qgc28gR0MgY2FuIG9jY3VyIGF1dG9tYXRpY2FsbHkKLSAgICBj
YWNoZSA9IGlzTm9kZSA/IGpRdWVyeS5jYWNoZSA6IGVsZW0sCi0KLSAgICAvLyBPbmx5IGRlZmlu
aW5nIGFuIElEIGZvciBKUyBvYmplY3RzIGlmIGl0cyBjYWNoZSBhbHJlYWR5IGV4aXN0cyBhbGxv
d3MKLSAgICAvLyB0aGUgY29kZSB0byBzaG9ydGN1dCBvbiB0aGUgc2FtZSBwYXRoIGFzIGEgRE9N
IG5vZGUgd2l0aCBubyBjYWNoZQotICAgIGlkID0gaXNOb2RlID8gZWxlbVsgaW50ZXJuYWxLZXkg
XSA6IGVsZW1bIGludGVybmFsS2V5IF0gJiYgaW50ZXJuYWxLZXk7Ci0KLSAgICAvLyBBdm9pZCBk
b2luZyBhbnkgbW9yZSB3b3JrIHRoYW4gd2UgbmVlZCB0byB3aGVuIHRyeWluZyB0byBnZXQgZGF0
YSBvbiBhbgotICAgIC8vIG9iamVjdCB0aGF0IGhhcyBubyBkYXRhIGF0IGFsbAotICAgIGlmICgg
KCFpZCB8fCAhY2FjaGVbaWRdIHx8ICghcHZ0ICYmICFjYWNoZVtpZF0uZGF0YSkpICYmIGdldEJ5
TmFtZSAmJiBkYXRhID09PSB1bmRlZmluZWQgKSB7Ci0gICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlmICggIWlkICkgewotICAgIC8vIE9ubHkgRE9NIG5vZGVzIG5lZWQgYSBuZXcgdW5pcXVlIElE
IGZvciBlYWNoIGVsZW1lbnQgc2luY2UgdGhlaXIgZGF0YQotICAgIC8vIGVuZHMgdXAgaW4gdGhl
IGdsb2JhbCBjYWNoZQotICAgIGlmICggaXNOb2RlICkgewotICAgIGVsZW1bIGludGVybmFsS2V5
IF0gPSBpZCA9IGNvcmVfZGVsZXRlZElkcy5wb3AoKSB8fCBqUXVlcnkuZ3VpZCsrOwotICAgIH0g
ZWxzZSB7Ci0gICAgaWQgPSBpbnRlcm5hbEtleTsKLSAgICB9Ci0gICAgfQotCi0gICAgaWYgKCAh
Y2FjaGVbIGlkIF0gKSB7Ci0gICAgY2FjaGVbIGlkIF0gPSB7fTsKLQotICAgIC8vIEF2b2lkcyBl
eHBvc2luZyBqUXVlcnkgbWV0YWRhdGEgb24gcGxhaW4gSlMgb2JqZWN0cyB3aGVuIHRoZSBvYmpl
Y3QKLSAgICAvLyBpcyBzZXJpYWxpemVkIHVzaW5nIEpTT04uc3RyaW5naWZ5Ci0gICAgaWYgKCAh
aXNOb2RlICkgewotICAgIGNhY2hlWyBpZCBdLnRvSlNPTiA9IGpRdWVyeS5ub29wOwotICAgIH0K
LSAgICB9Ci0KLSAgICAvLyBBbiBvYmplY3QgY2FuIGJlIHBhc3NlZCB0byBqUXVlcnkuZGF0YSBp
bnN0ZWFkIG9mIGEga2V5L3ZhbHVlIHBhaXI7IHRoaXMgZ2V0cwotICAgIC8vIHNoYWxsb3cgY29w
aWVkIG92ZXIgb250byB0aGUgZXhpc3RpbmcgY2FjaGUKLSAgICBpZiAoIHR5cGVvZiBuYW1lID09
PSAib2JqZWN0IiB8fCB0eXBlb2YgbmFtZSA9PT0gImZ1bmN0aW9uIiApIHsKLSAgICBpZiAoIHB2
dCApIHsKLSAgICBjYWNoZVsgaWQgXSA9IGpRdWVyeS5leHRlbmQoIGNhY2hlWyBpZCBdLCBuYW1l
ICk7Ci0gICAgfSBlbHNlIHsKLSAgICBjYWNoZVsgaWQgXS5kYXRhID0galF1ZXJ5LmV4dGVuZCgg
Y2FjaGVbIGlkIF0uZGF0YSwgbmFtZSApOwotICAgIH0KLSAgICB9Ci0KLSAgICB0aGlzQ2FjaGUg
PSBjYWNoZVsgaWQgXTsKLQotICAgIC8vIGpRdWVyeSBkYXRhKCkgaXMgc3RvcmVkIGluIGEgc2Vw
YXJhdGUgb2JqZWN0IGluc2lkZSB0aGUgb2JqZWN0J3MgaW50ZXJuYWwgZGF0YQotICAgIC8vIGNh
Y2hlIGluIG9yZGVyIHRvIGF2b2lkIGtleSBjb2xsaXNpb25zIGJldHdlZW4gaW50ZXJuYWwgZGF0
YSBhbmQgdXNlci1kZWZpbmVkCi0gICAgLy8gZGF0YS4KLSAgICBpZiAoICFwdnQgKSB7Ci0gICAg
aWYgKCAhdGhpc0NhY2hlLmRhdGEgKSB7Ci0gICAgdGhpc0NhY2hlLmRhdGEgPSB7fTsKLSAgICB9
Ci0KLSAgICB0aGlzQ2FjaGUgPSB0aGlzQ2FjaGUuZGF0YTsKLSAgICB9Ci0KLSAgICBpZiAoIGRh
dGEgIT09IHVuZGVmaW5lZCApIHsKLSAgICB0aGlzQ2FjaGVbIGpRdWVyeS5jYW1lbENhc2UoIG5h
bWUgKSBdID0gZGF0YTsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayBmb3IgYm90aCBjb252ZXJ0ZWQt
dG8tY2FtZWwgYW5kIG5vbi1jb252ZXJ0ZWQgZGF0YSBwcm9wZXJ0eSBuYW1lcwotICAgIC8vIElm
IGEgZGF0YSBwcm9wZXJ0eSB3YXMgc3BlY2lmaWVkCi0gICAgaWYgKCBnZXRCeU5hbWUgKSB7Ci0K
LSAgICAvLyBGaXJzdCBUcnkgdG8gZmluZCBhcy1pcyBwcm9wZXJ0eSBkYXRhCi0gICAgcmV0ID0g
dGhpc0NhY2hlWyBuYW1lIF07Ci0KLSAgICAvLyBUZXN0IGZvciBudWxsfHVuZGVmaW5lZCBwcm9w
ZXJ0eSBkYXRhCi0gICAgaWYgKCByZXQgPT0gbnVsbCApIHsKLQotICAgIC8vIFRyeSB0byBmaW5k
IHRoZSBjYW1lbENhc2VkIHByb3BlcnR5Ci0gICAgcmV0ID0gdGhpc0NhY2hlWyBqUXVlcnkuY2Ft
ZWxDYXNlKCBuYW1lICkgXTsKLSAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICByZXQgPSB0aGlzQ2Fj
aGU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldDsKLX0KLQotZnVuY3Rpb24gaW50ZXJuYWxSZW1v
dmVEYXRhKCBlbGVtLCBuYW1lLCBwdnQgKSB7Ci0gICAgaWYgKCAhalF1ZXJ5LmFjY2VwdERhdGEo
IGVsZW0gKSApIHsKLSAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdmFyIGksIGwsIHRoaXNDYWNo
ZSwKLSAgICBpc05vZGUgPSBlbGVtLm5vZGVUeXBlLAotCi0gICAgLy8gU2VlIGpRdWVyeS5kYXRh
IGZvciBtb3JlIGluZm9ybWF0aW9uCi0gICAgY2FjaGUgPSBpc05vZGUgPyBqUXVlcnkuY2FjaGUg
OiBlbGVtLAotICAgIGlkID0gaXNOb2RlID8gZWxlbVsgalF1ZXJ5LmV4cGFuZG8gXSA6IGpRdWVy
eS5leHBhbmRvOwotCi0gICAgLy8gSWYgdGhlcmUgaXMgYWxyZWFkeSBubyBjYWNoZSBlbnRyeSBm
b3IgdGhpcyBvYmplY3QsIHRoZXJlIGlzIG5vCi0gICAgLy8gcHVycG9zZSBpbiBjb250aW51aW5n
Ci0gICAgaWYgKCAhY2FjaGVbIGlkIF0gKSB7Ci0gICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
ICggbmFtZSApIHsKLQotICAgIHRoaXNDYWNoZSA9IHB2dCA/IGNhY2hlWyBpZCBdIDogY2FjaGVb
IGlkIF0uZGF0YTsKLQotICAgIGlmICggdGhpc0NhY2hlICkgewotCi0gICAgLy8gU3VwcG9ydCBh
cnJheSBvciBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nIG5hbWVzIGZvciBkYXRhIGtleXMKLSAgICBp
ZiAoICFqUXVlcnkuaXNBcnJheSggbmFtZSApICkgewotCi0gICAgLy8gdHJ5IHRoZSBzdHJpbmcg
YXMgYSBrZXkgYmVmb3JlIGFueSBtYW5pcHVsYXRpb24KLSAgICBpZiAoIG5hbWUgaW4gdGhpc0Nh
Y2hlICkgewotICAgIG5hbWUgPSBbIG5hbWUgXTsKLSAgICB9IGVsc2UgewotCi0gICAgLy8gc3Bs
aXQgdGhlIGNhbWVsIGNhc2VkIHZlcnNpb24gYnkgc3BhY2VzIHVubGVzcyBhIGtleSB3aXRoIHRo
ZSBzcGFjZXMgZXhpc3RzCi0gICAgbmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5hbWUgKTsKLSAg
ICBpZiAoIG5hbWUgaW4gdGhpc0NhY2hlICkgewotICAgIG5hbWUgPSBbIG5hbWUgXTsKLSAgICB9
IGVsc2UgewotICAgIG5hbWUgPSBuYW1lLnNwbGl0KCIgIik7Ci0gICAgfQotICAgIH0KLSAgICB9
IGVsc2UgewotICAgIC8vIElmICJuYW1lIiBpcyBhbiBhcnJheSBvZiBrZXlzLi4uCi0gICAgLy8g
V2hlbiBkYXRhIGlzIGluaXRpYWxseSBjcmVhdGVkLCB2aWEgKCJrZXkiLCAidmFsIikgc2lnbmF0
dXJlLAotICAgIC8vIGtleXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gY2FtZWxDYXNlLgotICAgIC8v
IFNpbmNlIHRoZXJlIGlzIG5vIHdheSB0byB0ZWxsIF9ob3dfIGEga2V5IHdhcyBhZGRlZCwgcmVt
b3ZlCi0gICAgLy8gYm90aCBwbGFpbiBrZXkgYW5kIGNhbWVsQ2FzZSBrZXkuICMxMjc4NgotICAg
IC8vIFRoaXMgd2lsbCBvbmx5IHBlbmFsaXplIHRoZSBhcnJheSBhcmd1bWVudCBwYXRoLgotICAg
IG5hbWUgPSBuYW1lLmNvbmNhdCggalF1ZXJ5Lm1hcCggbmFtZSwgalF1ZXJ5LmNhbWVsQ2FzZSAp
ICk7Ci0gICAgfQotCi0gICAgZm9yICggaSA9IDAsIGwgPSBuYW1lLmxlbmd0aDsgaSA8IGw7IGkr
KyApIHsKLSAgICBkZWxldGUgdGhpc0NhY2hlWyBuYW1lW2ldIF07Ci0gICAgfQotCi0gICAgLy8g
SWYgdGhlcmUgaXMgbm8gZGF0YSBsZWZ0IGluIHRoZSBjYWNoZSwgd2Ugd2FudCB0byBjb250aW51
ZQotICAgIC8vIGFuZCBsZXQgdGhlIGNhY2hlIG9iamVjdCBpdHNlbGYgZ2V0IGRlc3Ryb3llZAot
ICAgIGlmICggISggcHZ0ID8gaXNFbXB0eURhdGFPYmplY3QgOiBqUXVlcnkuaXNFbXB0eU9iamVj
dCApKCB0aGlzQ2FjaGUgKSApIHsKLSAgICByZXR1cm47Ci0gICAgfQotICAgIH0KLSAgICB9Ci0K
LSAgICAvLyBTZWUgalF1ZXJ5LmRhdGEgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSAgICBpZiAoICFw
dnQgKSB7Ci0gICAgZGVsZXRlIGNhY2hlWyBpZCBdLmRhdGE7Ci0KLSAgICAvLyBEb24ndCBkZXN0
cm95IHRoZSBwYXJlbnQgY2FjaGUgdW5sZXNzIHRoZSBpbnRlcm5hbCBkYXRhIG9iamVjdAotICAg
IC8vIGhhZCBiZWVuIHRoZSBvbmx5IHRoaW5nIGxlZnQgaW4gaXQKLSAgICBpZiAoICFpc0VtcHR5
RGF0YU9iamVjdCggY2FjaGVbIGlkIF0gKSApIHsKLSAgICByZXR1cm47Ci0gICAgfQotICAgIH0K
LQotICAgIC8vIERlc3Ryb3kgdGhlIGNhY2hlCi0gICAgaWYgKCBpc05vZGUgKSB7Ci0gICAgalF1
ZXJ5LmNsZWFuRGF0YSggWyBlbGVtIF0sIHRydWUgKTsKLQotICAgIC8vIFVzZSBkZWxldGUgd2hl
biBzdXBwb3J0ZWQgZm9yIGV4cGFuZG9zIG9yIGBjYWNoZWAgaXMgbm90IGEgd2luZG93IHBlciBp
c1dpbmRvdyAoIzEwMDgwKQotICAgIH0gZWxzZSBpZiAoIGpRdWVyeS5zdXBwb3J0LmRlbGV0ZUV4
cGFuZG8gfHwgY2FjaGUgIT0gY2FjaGUud2luZG93ICkgewotICAgIGRlbGV0ZSBjYWNoZVsgaWQg
XTsKLQotICAgIC8vIFdoZW4gYWxsIGVsc2UgZmFpbHMsIG51bGwKLSAgICB9IGVsc2UgewotICAg
IGNhY2hlWyBpZCBdID0gbnVsbDsKLSAgICB9Ci19Ci0KLWpRdWVyeS5leHRlbmQoewotICAgIGNh
Y2hlOiB7fSwKLQotICAgIC8vIFVuaXF1ZSBmb3IgZWFjaCBjb3B5IG9mIGpRdWVyeSBvbiB0aGUg
cGFnZQotICAgIC8vIE5vbi1kaWdpdHMgcmVtb3ZlZCB0byBtYXRjaCByaW5saW5lalF1ZXJ5Ci0g
ICAgZXhwYW5kbzogImpRdWVyeSIgKyAoIGNvcmVfdmVyc2lvbiArIE1hdGgucmFuZG9tKCkgKS5y
ZXBsYWNlKCAvXEQvZywgIiIgKSwKLQotICAgIC8vIFRoZSBmb2xsb3dpbmcgZWxlbWVudHMgdGhy
b3cgdW5jYXRjaGFibGUgZXhjZXB0aW9ucyBpZiB5b3UKLSAgICAvLyBhdHRlbXB0IHRvIGFkZCBl
eHBhbmRvIHByb3BlcnRpZXMgdG8gdGhlbS4KLSAgICBub0RhdGE6IHsKLSAgICAiZW1iZWQiOiB0
cnVlLAotICAgIC8vIEJhbiBhbGwgb2JqZWN0cyBleGNlcHQgZm9yIEZsYXNoICh3aGljaCBoYW5k
bGUgZXhwYW5kb3MpCi0gICAgIm9iamVjdCI6ICJjbHNpZDpEMjdDREI2RS1BRTZELTExY2YtOTZC
OC00NDQ1NTM1NDAwMDAiLAotICAgICJhcHBsZXQiOiB0cnVlCi0gICAgfSwKLQotICAgIGhhc0Rh
dGE6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgIGVsZW0gPSBlbGVtLm5vZGVUeXBlID8galF1ZXJ5
LmNhY2hlWyBlbGVtW2pRdWVyeS5leHBhbmRvXSBdIDogZWxlbVsgalF1ZXJ5LmV4cGFuZG8gXTsK
LSAgICByZXR1cm4gISFlbGVtICYmICFpc0VtcHR5RGF0YU9iamVjdCggZWxlbSApOwotICAgIH0s
Ci0KLSAgICBkYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHsKLSAgICByZXR1cm4g
aW50ZXJuYWxEYXRhKCBlbGVtLCBuYW1lLCBkYXRhICk7Ci0gICAgfSwKLQotICAgIHJlbW92ZURh
dGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewotICAgIHJldHVybiBpbnRlcm5hbFJlbW92ZURh
dGEoIGVsZW0sIG5hbWUgKTsKLSAgICB9LAotCi0gICAgLy8gRm9yIGludGVybmFsIHVzZSBvbmx5
LgotICAgIF9kYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHsKLSAgICByZXR1cm4g
aW50ZXJuYWxEYXRhKCBlbGVtLCBuYW1lLCBkYXRhLCB0cnVlICk7Ci0gICAgfSwKLQotICAgIF9y
ZW1vdmVEYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsKLSAgICByZXR1cm4gaW50ZXJuYWxS
ZW1vdmVEYXRhKCBlbGVtLCBuYW1lLCB0cnVlICk7Ci0gICAgfSwKLQotICAgIC8vIEEgbWV0aG9k
IGZvciBkZXRlcm1pbmluZyBpZiBhIERPTSBub2RlIGNhbiBoYW5kbGUgdGhlIGRhdGEgZXhwYW5k
bwotICAgIGFjY2VwdERhdGE6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgIC8vIERvIG5vdCBzZXQg
ZGF0YSBvbiBub24tZWxlbWVudCBiZWNhdXNlIGl0IHdpbGwgbm90IGJlIGNsZWFyZWQgKCM4MzM1
KS4KLSAgICBpZiAoIGVsZW0ubm9kZVR5cGUgJiYgZWxlbS5ub2RlVHlwZSAhPT0gMSAmJiBlbGVt
Lm5vZGVUeXBlICE9PSA5ICkgewotICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICB2YXIg
bm9EYXRhID0gZWxlbS5ub2RlTmFtZSAmJiBqUXVlcnkubm9EYXRhWyBlbGVtLm5vZGVOYW1lLnRv
TG93ZXJDYXNlKCkgXTsKLQotICAgIC8vIG5vZGVzIGFjY2VwdCBkYXRhIHVubGVzcyBvdGhlcndp
c2Ugc3BlY2lmaWVkOyByZWplY3Rpb24gY2FuIGJlIGNvbmRpdGlvbmFsCi0gICAgcmV0dXJuICFu
b0RhdGEgfHwgbm9EYXRhICE9PSB0cnVlICYmIGVsZW0uZ2V0QXR0cmlidXRlKCJjbGFzc2lkIikg
PT09IG5vRGF0YTsKLSAgICB9Ci19KTsKLQotalF1ZXJ5LmZuLmV4dGVuZCh7Ci0gICAgZGF0YTog
ZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7Ci0gICAgdmFyIGF0dHJzLCBuYW1lLAotICAgIGVsZW0g
PSB0aGlzWzBdLAotICAgIGkgPSAwLAotICAgIGRhdGEgPSBudWxsOwotCi0gICAgLy8gR2V0cyBh
bGwgdmFsdWVzCi0gICAgaWYgKCBrZXkgPT09IHVuZGVmaW5lZCApIHsKLSAgICBpZiAoIHRoaXMu
bGVuZ3RoICkgewotICAgIGRhdGEgPSBqUXVlcnkuZGF0YSggZWxlbSApOwotCi0gICAgaWYgKCBl
bGVtLm5vZGVUeXBlID09PSAxICYmICFqUXVlcnkuX2RhdGEoIGVsZW0sICJwYXJzZWRBdHRycyIg
KSApIHsKLSAgICBhdHRycyA9IGVsZW0uYXR0cmlidXRlczsKLSAgICBmb3IgKCA7IGkgPCBhdHRy
cy5sZW5ndGg7IGkrKyApIHsKLSAgICBuYW1lID0gYXR0cnNbaV0ubmFtZTsKLQotICAgIGlmICgg
IW5hbWUuaW5kZXhPZiggImRhdGEtIiApICkgewotICAgIG5hbWUgPSBqUXVlcnkuY2FtZWxDYXNl
KCBuYW1lLnNsaWNlKDUpICk7Ci0KLSAgICBkYXRhQXR0ciggZWxlbSwgbmFtZSwgZGF0YVsgbmFt
ZSBdICk7Ci0gICAgfQotICAgIH0KLSAgICBqUXVlcnkuX2RhdGEoIGVsZW0sICJwYXJzZWRBdHRy
cyIsIHRydWUgKTsKLSAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGRhdGE7Ci0gICAgfQotCi0g
ICAgLy8gU2V0cyBtdWx0aXBsZSB2YWx1ZXMKLSAgICBpZiAoIHR5cGVvZiBrZXkgPT09ICJvYmpl
Y3QiICkgewotICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7Ci0gICAgalF1ZXJ5LmRh
dGEoIHRoaXMsIGtleSApOwotICAgIH0pOwotICAgIH0KLQotICAgIHJldHVybiBqUXVlcnkuYWNj
ZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7Ci0KLSAgICBpZiAoIHZhbHVlID09PSB1bmRl
ZmluZWQgKSB7Ci0gICAgLy8gVHJ5IHRvIGZldGNoIGFueSBpbnRlcm5hbGx5IHN0b3JlZCBkYXRh
IGZpcnN0Ci0gICAgcmV0dXJuIGVsZW0gPyBkYXRhQXR0ciggZWxlbSwga2V5LCBqUXVlcnkuZGF0
YSggZWxlbSwga2V5ICkgKSA6IG51bGw7Ci0gICAgfQotCi0gICAgdGhpcy5lYWNoKGZ1bmN0aW9u
KCkgewotICAgIGpRdWVyeS5kYXRhKCB0aGlzLCBrZXksIHZhbHVlICk7Ci0gICAgfSk7Ci0gICAg
fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxLCBudWxsLCB0cnVlICk7Ci0gICAg
fSwKLQotICAgIHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBrZXkgKSB7Ci0gICAgcmV0dXJuIHRoaXMu
ZWFjaChmdW5jdGlvbigpIHsKLSAgICBqUXVlcnkucmVtb3ZlRGF0YSggdGhpcywga2V5ICk7Ci0g
ICAgfSk7Ci0gICAgfQotfSk7Ci0KLWZ1bmN0aW9uIGRhdGFBdHRyKCBlbGVtLCBrZXksIGRhdGEg
KSB7Ci0gICAgLy8gSWYgbm90aGluZyB3YXMgZm91bmQgaW50ZXJuYWxseSwgdHJ5IHRvIGZldGNo
IGFueQotICAgIC8vIGRhdGEgZnJvbSB0aGUgSFRNTDUgZGF0YS0qIGF0dHJpYnV0ZQotICAgIGlm
ICggZGF0YSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7Ci0KLSAgICB2
YXIgbmFtZSA9ICJkYXRhLSIgKyBrZXkucmVwbGFjZSggcm11bHRpRGFzaCwgIi0kMSIgKS50b0xv
d2VyQ2FzZSgpOwotCi0gICAgZGF0YSA9IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7Ci0KLSAg
ICBpZiAoIHR5cGVvZiBkYXRhID09PSAic3RyaW5nIiApIHsKLSAgICB0cnkgewotICAgIGRhdGEg
PSBkYXRhID09PSAidHJ1ZSIgPyB0cnVlIDoKLSAgICBkYXRhID09PSAiZmFsc2UiID8gZmFsc2Ug
OgotICAgIGRhdGEgPT09ICJudWxsIiA/IG51bGwgOgotICAgIC8vIE9ubHkgY29udmVydCB0byBh
IG51bWJlciBpZiBpdCBkb2Vzbid0IGNoYW5nZSB0aGUgc3RyaW5nCi0gICAgK2RhdGEgKyAiIiA9
PT0gZGF0YSA/ICtkYXRhIDoKLSAgICByYnJhY2UudGVzdCggZGF0YSApID8galF1ZXJ5LnBhcnNl
SlNPTiggZGF0YSApIDoKLSAgICBkYXRhOwotICAgIH0gY2F0Y2goIGUgKSB7fQotCi0gICAgLy8g
TWFrZSBzdXJlIHdlIHNldCB0aGUgZGF0YSBzbyBpdCBpc24ndCBjaGFuZ2VkIGxhdGVyCi0gICAg
alF1ZXJ5LmRhdGEoIGVsZW0sIGtleSwgZGF0YSApOwotCi0gICAgfSBlbHNlIHsKLSAgICBkYXRh
ID0gdW5kZWZpbmVkOwotICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZGF0YTsKLX0KLQotLy8g
Y2hlY2tzIGEgY2FjaGUgb2JqZWN0IGZvciBlbXB0aW5lc3MKLWZ1bmN0aW9uIGlzRW1wdHlEYXRh
T2JqZWN0KCBvYmogKSB7Ci0gICAgdmFyIG5hbWU7Ci0gICAgZm9yICggbmFtZSBpbiBvYmogKSB7
Ci0KLSAgICAvLyBpZiB0aGUgcHVibGljIGRhdGEgb2JqZWN0IGlzIGVtcHR5LCB0aGUgcHJpdmF0
ZSBpcyBzdGlsbCBlbXB0eQotICAgIGlmICggbmFtZSA9PT0gImRhdGEiICYmIGpRdWVyeS5pc0Vt
cHR5T2JqZWN0KCBvYmpbbmFtZV0gKSApIHsKLSAgICBjb250aW51ZTsKLSAgICB9Ci0gICAgaWYg
KCBuYW1lICE9PSAidG9KU09OIiApIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIH0K
LQotICAgIHJldHVybiB0cnVlOwotfQotalF1ZXJ5LmV4dGVuZCh7Ci0gICAgcXVldWU6IGZ1bmN0
aW9uKCBlbGVtLCB0eXBlLCBkYXRhICkgewotICAgIHZhciBxdWV1ZTsKLQotICAgIGlmICggZWxl
bSApIHsKLSAgICB0eXBlID0gKCB0eXBlIHx8ICJmeCIgKSArICJxdWV1ZSI7Ci0gICAgcXVldWUg
PSBqUXVlcnkuX2RhdGEoIGVsZW0sIHR5cGUgKTsKLQotICAgIC8vIFNwZWVkIHVwIGRlcXVldWUg
YnkgZ2V0dGluZyBvdXQgcXVpY2tseSBpZiB0aGlzIGlzIGp1c3QgYSBsb29rdXAKLSAgICBpZiAo
IGRhdGEgKSB7Ci0gICAgaWYgKCAhcXVldWUgfHwgalF1ZXJ5LmlzQXJyYXkoZGF0YSkgKSB7Ci0g
ICAgcXVldWUgPSBqUXVlcnkuX2RhdGEoIGVsZW0sIHR5cGUsIGpRdWVyeS5tYWtlQXJyYXkoZGF0
YSkgKTsKLSAgICB9IGVsc2UgewotICAgIHF1ZXVlLnB1c2goIGRhdGEgKTsKLSAgICB9Ci0gICAg
fQotICAgIHJldHVybiBxdWV1ZSB8fCBbXTsKLSAgICB9Ci0gICAgfSwKLQotICAgIGRlcXVldWU6
IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkgewotICAgIHR5cGUgPSB0eXBlIHx8ICJmeCI7Ci0KLSAg
ICB2YXIgcXVldWUgPSBqUXVlcnkucXVldWUoIGVsZW0sIHR5cGUgKSwKLSAgICBzdGFydExlbmd0
aCA9IHF1ZXVlLmxlbmd0aCwKLSAgICBmbiA9IHF1ZXVlLnNoaWZ0KCksCi0gICAgaG9va3MgPSBq
UXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sIHR5cGUgKSwKLSAgICBuZXh0ID0gZnVuY3Rpb24oKSB7
Ci0gICAgalF1ZXJ5LmRlcXVldWUoIGVsZW0sIHR5cGUgKTsKLSAgICB9OwotCi0gICAgLy8gSWYg
dGhlIGZ4IHF1ZXVlIGlzIGRlcXVldWVkLCBhbHdheXMgcmVtb3ZlIHRoZSBwcm9ncmVzcyBzZW50
aW5lbAotICAgIGlmICggZm4gPT09ICJpbnByb2dyZXNzIiApIHsKLSAgICBmbiA9IHF1ZXVlLnNo
aWZ0KCk7Ci0gICAgc3RhcnRMZW5ndGgtLTsKLSAgICB9Ci0KLSAgICBob29rcy5jdXIgPSBmbjsK
LSAgICBpZiAoIGZuICkgewotCi0gICAgLy8gQWRkIGEgcHJvZ3Jlc3Mgc2VudGluZWwgdG8gcHJl
dmVudCB0aGUgZnggcXVldWUgZnJvbSBiZWluZwotICAgIC8vIGF1dG9tYXRpY2FsbHkgZGVxdWV1
ZWQKLSAgICBpZiAoIHR5cGUgPT09ICJmeCIgKSB7Ci0gICAgcXVldWUudW5zaGlmdCggImlucHJv
Z3Jlc3MiICk7Ci0gICAgfQotCi0gICAgLy8gY2xlYXIgdXAgdGhlIGxhc3QgcXVldWUgc3RvcCBm
dW5jdGlvbgotICAgIGRlbGV0ZSBob29rcy5zdG9wOwotICAgIGZuLmNhbGwoIGVsZW0sIG5leHQs
IGhvb2tzICk7Ci0gICAgfQotCi0gICAgaWYgKCAhc3RhcnRMZW5ndGggJiYgaG9va3MgKSB7Ci0g
ICAgaG9va3MuZW1wdHkuZmlyZSgpOwotICAgIH0KLSAgICB9LAotCi0gICAgLy8gbm90IGludGVu
ZGVkIGZvciBwdWJsaWMgY29uc3VtcHRpb24gLSBnZW5lcmF0ZXMgYSBxdWV1ZUhvb2tzIG9iamVj
dCwgb3IgcmV0dXJucyB0aGUgY3VycmVudCBvbmUKLSAgICBfcXVldWVIb29rczogZnVuY3Rpb24o
IGVsZW0sIHR5cGUgKSB7Ci0gICAgdmFyIGtleSA9IHR5cGUgKyAicXVldWVIb29rcyI7Ci0gICAg
cmV0dXJuIGpRdWVyeS5fZGF0YSggZWxlbSwga2V5ICkgfHwgalF1ZXJ5Ll9kYXRhKCBlbGVtLCBr
ZXksIHsKLSAgICBlbXB0eTogalF1ZXJ5LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKS5hZGQoZnVu
Y3Rpb24oKSB7Ci0gICAgalF1ZXJ5Ll9yZW1vdmVEYXRhKCBlbGVtLCB0eXBlICsgInF1ZXVlIiAp
OwotICAgIGpRdWVyeS5fcmVtb3ZlRGF0YSggZWxlbSwga2V5ICk7Ci0gICAgfSkKLSAgICB9KTsK
LSAgICB9Ci19KTsKLQotalF1ZXJ5LmZuLmV4dGVuZCh7Ci0gICAgcXVldWU6IGZ1bmN0aW9uKCB0
eXBlLCBkYXRhICkgewotICAgIHZhciBzZXR0ZXIgPSAyOwotCi0gICAgaWYgKCB0eXBlb2YgdHlw
ZSAhPT0gInN0cmluZyIgKSB7Ci0gICAgZGF0YSA9IHR5cGU7Ci0gICAgdHlwZSA9ICJmeCI7Ci0g
ICAgc2V0dGVyLS07Ci0gICAgfQotCi0gICAgaWYgKCBhcmd1bWVudHMubGVuZ3RoIDwgc2V0dGVy
ICkgewotICAgIHJldHVybiBqUXVlcnkucXVldWUoIHRoaXNbMF0sIHR5cGUgKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gZGF0YSA9PT0gdW5kZWZpbmVkID8KLSAgICB0aGlzIDoKLSAgICB0aGlzLmVh
Y2goZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBl
LCBkYXRhICk7Ci0KLSAgICAvLyBlbnN1cmUgYSBob29rcyBmb3IgdGhpcyBxdWV1ZQotICAgIGpR
dWVyeS5fcXVldWVIb29rcyggdGhpcywgdHlwZSApOwotCi0gICAgaWYgKCB0eXBlID09PSAiZngi
ICYmIHF1ZXVlWzBdICE9PSAiaW5wcm9ncmVzcyIgKSB7Ci0gICAgalF1ZXJ5LmRlcXVldWUoIHRo
aXMsIHR5cGUgKTsKLSAgICB9Ci0gICAgfSk7Ci0gICAgfSwKLSAgICBkZXF1ZXVlOiBmdW5jdGlv
biggdHlwZSApIHsKLSAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewotICAgIGpRdWVy
eS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7Ci0gICAgfSk7Ci0gICAgfSwKLSAgICAvLyBCYXNlZCBv
ZmYgb2YgdGhlIHBsdWdpbiBieSBDbGludCBIZWxmZXJzLCB3aXRoIHBlcm1pc3Npb24uCi0gICAg
Ly8gaHR0cDovL2JsaW5kc2lnbmFscy5jb20vaW5kZXgucGhwLzIwMDkvMDcvanF1ZXJ5LWRlbGF5
LwotICAgIGRlbGF5OiBmdW5jdGlvbiggdGltZSwgdHlwZSApIHsKLSAgICB0aW1lID0galF1ZXJ5
LmZ4ID8galF1ZXJ5LmZ4LnNwZWVkc1sgdGltZSBdIHx8IHRpbWUgOiB0aW1lOwotICAgIHR5cGUg
PSB0eXBlIHx8ICJmeCI7Ci0KLSAgICByZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSwgZnVuY3Rpb24o
IG5leHQsIGhvb2tzICkgewotICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dCggbmV4dCwgdGlt
ZSApOwotICAgIGhvb2tzLnN0b3AgPSBmdW5jdGlvbigpIHsKLSAgICBjbGVhclRpbWVvdXQoIHRp
bWVvdXQgKTsKLSAgICB9OwotICAgIH0pOwotICAgIH0sCi0gICAgY2xlYXJRdWV1ZTogZnVuY3Rp
b24oIHR5cGUgKSB7Ci0gICAgcmV0dXJuIHRoaXMucXVldWUoIHR5cGUgfHwgImZ4IiwgW10gKTsK
LSAgICB9LAotICAgIC8vIEdldCBhIHByb21pc2UgcmVzb2x2ZWQgd2hlbiBxdWV1ZXMgb2YgYSBj
ZXJ0YWluIHR5cGUKLSAgICAvLyBhcmUgZW1wdGllZCAoZnggaXMgdGhlIHR5cGUgYnkgZGVmYXVs
dCkKLSAgICBwcm9taXNlOiBmdW5jdGlvbiggdHlwZSwgb2JqICkgewotICAgIHZhciB0bXAsCi0g
ICAgY291bnQgPSAxLAotICAgIGRlZmVyID0galF1ZXJ5LkRlZmVycmVkKCksCi0gICAgZWxlbWVu
dHMgPSB0aGlzLAotICAgIGkgPSB0aGlzLmxlbmd0aCwKLSAgICByZXNvbHZlID0gZnVuY3Rpb24o
KSB7Ci0gICAgaWYgKCAhKCAtLWNvdW50ICkgKSB7Ci0gICAgZGVmZXIucmVzb2x2ZVdpdGgoIGVs
ZW1lbnRzLCBbIGVsZW1lbnRzIF0gKTsKLSAgICB9Ci0gICAgfTsKLQotICAgIGlmICggdHlwZW9m
IHR5cGUgIT09ICJzdHJpbmciICkgewotICAgIG9iaiA9IHR5cGU7Ci0gICAgdHlwZSA9IHVuZGVm
aW5lZDsKLSAgICB9Ci0gICAgdHlwZSA9IHR5cGUgfHwgImZ4IjsKLQotICAgIHdoaWxlKCBpLS0g
KSB7Ci0gICAgdG1wID0galF1ZXJ5Ll9kYXRhKCBlbGVtZW50c1sgaSBdLCB0eXBlICsgInF1ZXVl
SG9va3MiICk7Ci0gICAgaWYgKCB0bXAgJiYgdG1wLmVtcHR5ICkgewotICAgIGNvdW50Kys7Ci0g
ICAgdG1wLmVtcHR5LmFkZCggcmVzb2x2ZSApOwotICAgIH0KLSAgICB9Ci0gICAgcmVzb2x2ZSgp
OwotICAgIHJldHVybiBkZWZlci5wcm9taXNlKCBvYmogKTsKLSAgICB9Ci19KTsKLXZhciBub2Rl
SG9vaywgYm9vbEhvb2ssCi0gICAgcmNsYXNzID0gL1tcdFxyXG5dL2csCi0gICAgcnJldHVybiA9
IC9cci9nLAotICAgIHJmb2N1c2FibGUgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0
b258b2JqZWN0KSQvaSwKLSAgICByY2xpY2thYmxlID0gL14oPzphfGFyZWEpJC9pLAotICAgIHJi
b29sZWFuID0gL14oPzpjaGVja2VkfHNlbGVjdGVkfGF1dG9mb2N1c3xhdXRvcGxheXxhc3luY3xj
b250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5
fHJlcXVpcmVkfHNjb3BlZCkkL2ksCi0gICAgcnVzZURlZmF1bHQgPSAvXig/OmNoZWNrZWR8c2Vs
ZWN0ZWQpJC9pLAotICAgIGdldFNldEF0dHJpYnV0ZSA9IGpRdWVyeS5zdXBwb3J0LmdldFNldEF0
dHJpYnV0ZSwKLSAgICBnZXRTZXRJbnB1dCA9IGpRdWVyeS5zdXBwb3J0LmlucHV0OwotCi1qUXVl
cnkuZm4uZXh0ZW5kKHsKLSAgICBhdHRyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7Ci0gICAg
cmV0dXJuIGpRdWVyeS5hY2Nlc3MoIHRoaXMsIGpRdWVyeS5hdHRyLCBuYW1lLCB2YWx1ZSwgYXJn
dW1lbnRzLmxlbmd0aCA+IDEgKTsKLSAgICB9LAotCi0gICAgcmVtb3ZlQXR0cjogZnVuY3Rpb24o
IG5hbWUgKSB7Ci0gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKLSAgICBqUXVlcnku
cmVtb3ZlQXR0ciggdGhpcywgbmFtZSApOwotICAgIH0pOwotICAgIH0sCi0KLSAgICBwcm9wOiBm
dW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7Ci0gICAgcmV0dXJuIGpRdWVyeS5hY2Nlc3MoIHRoaXMs
IGpRdWVyeS5wcm9wLCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTsKLSAgICB9
LAotCi0gICAgcmVtb3ZlUHJvcDogZnVuY3Rpb24oIG5hbWUgKSB7Ci0gICAgbmFtZSA9IGpRdWVy
eS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTsKLSAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9u
KCkgewotICAgIC8vIHRyeS9jYXRjaCBoYW5kbGVzIGNhc2VzIHdoZXJlIElFIGJhbGtzIChzdWNo
IGFzIHJlbW92aW5nIGEgcHJvcGVydHkgb24gd2luZG93KQotICAgIHRyeSB7Ci0gICAgdGhpc1sg
bmFtZSBdID0gdW5kZWZpbmVkOwotICAgIGRlbGV0ZSB0aGlzWyBuYW1lIF07Ci0gICAgfSBjYXRj
aCggZSApIHt9Ci0gICAgfSk7Ci0gICAgfSwKLQotICAgIGFkZENsYXNzOiBmdW5jdGlvbiggdmFs
dWUgKSB7Ci0gICAgdmFyIGNsYXNzZXMsIGVsZW0sIGN1ciwgY2xhenosIGosCi0gICAgaSA9IDAs
Ci0gICAgbGVuID0gdGhpcy5sZW5ndGgsCi0gICAgcHJvY2VlZCA9IHR5cGVvZiB2YWx1ZSA9PT0g
InN0cmluZyIgJiYgdmFsdWU7Ci0KLSAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSAp
ICkgewotICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oIGogKSB7Ci0gICAgalF1ZXJ5KCB0
aGlzICkuYWRkQ2xhc3MoIHZhbHVlLmNhbGwoIHRoaXMsIGosIHRoaXMuY2xhc3NOYW1lICkgKTsK
LSAgICB9KTsKLSAgICB9Ci0KLSAgICBpZiAoIHByb2NlZWQgKSB7Ci0gICAgLy8gVGhlIGRpc2p1
bmN0aW9uIGhlcmUgaXMgZm9yIGJldHRlciBjb21wcmVzc2liaWxpdHkgKHNlZSByZW1vdmVDbGFz
cykKLSAgICBjbGFzc2VzID0gKCB2YWx1ZSB8fCAiIiApLm1hdGNoKCBjb3JlX3Jub3R3aGl0ZSAp
IHx8IFtdOwotCi0gICAgZm9yICggOyBpIDwgbGVuOyBpKysgKSB7Ci0gICAgZWxlbSA9IHRoaXNb
IGkgXTsKLSAgICBjdXIgPSBlbGVtLm5vZGVUeXBlID09PSAxICYmICggZWxlbS5jbGFzc05hbWUg
PwotICAgICggIiAiICsgZWxlbS5jbGFzc05hbWUgKyAiICIgKS5yZXBsYWNlKCByY2xhc3MsICIg
IiApIDoKLSAgICAiICIKLSAgICApOwotCi0gICAgaWYgKCBjdXIgKSB7Ci0gICAgaiA9IDA7Ci0g
ICAgd2hpbGUgKCAoY2xhenogPSBjbGFzc2VzW2orK10pICkgewotICAgIGlmICggY3VyLmluZGV4
T2YoICIgIiArIGNsYXp6ICsgIiAiICkgPCAwICkgewotICAgIGN1ciArPSBjbGF6eiArICIgIjsK
LSAgICB9Ci0gICAgfQotICAgIGVsZW0uY2xhc3NOYW1lID0galF1ZXJ5LnRyaW0oIGN1ciApOwot
Ci0gICAgfQotICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdGhpczsKLSAgICB9LAotCi0gICAg
cmVtb3ZlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKLSAgICB2YXIgY2xhc3NlcywgZWxlbSwg
Y3VyLCBjbGF6eiwgaiwKLSAgICBpID0gMCwKLSAgICBsZW4gPSB0aGlzLmxlbmd0aCwKLSAgICBw
cm9jZWVkID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gMCB8fCB0eXBlb2YgdmFsdWUgPT09ICJzdHJp
bmciICYmIHZhbHVlOwotCi0gICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHsK
LSAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCBqICkgewotICAgIGpRdWVyeSggdGhpcyAp
LnJlbW92ZUNsYXNzKCB2YWx1ZS5jYWxsKCB0aGlzLCBqLCB0aGlzLmNsYXNzTmFtZSApICk7Ci0g
ICAgfSk7Ci0gICAgfQotICAgIGlmICggcHJvY2VlZCApIHsKLSAgICBjbGFzc2VzID0gKCB2YWx1
ZSB8fCAiIiApLm1hdGNoKCBjb3JlX3Jub3R3aGl0ZSApIHx8IFtdOwotCi0gICAgZm9yICggOyBp
IDwgbGVuOyBpKysgKSB7Ci0gICAgZWxlbSA9IHRoaXNbIGkgXTsKLSAgICAvLyBUaGlzIGV4cHJl
c3Npb24gaXMgaGVyZSBmb3IgYmV0dGVyIGNvbXByZXNzaWJpbGl0eSAoc2VlIGFkZENsYXNzKQot
ICAgIGN1ciA9IGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKCBlbGVtLmNsYXNzTmFtZSA/Ci0gICAg
KCAiICIgKyBlbGVtLmNsYXNzTmFtZSArICIgIiApLnJlcGxhY2UoIHJjbGFzcywgIiAiICkgOgot
ICAgICIiCi0gICAgKTsKLQotICAgIGlmICggY3VyICkgewotICAgIGogPSAwOwotICAgIHdoaWxl
ICggKGNsYXp6ID0gY2xhc3Nlc1tqKytdKSApIHsKLSAgICAvLyBSZW1vdmUgKmFsbCogaW5zdGFu
Y2VzCi0gICAgd2hpbGUgKCBjdXIuaW5kZXhPZiggIiAiICsgY2xhenogKyAiICIgKSA+PSAwICkg
ewotICAgIGN1ciA9IGN1ci5yZXBsYWNlKCAiICIgKyBjbGF6eiArICIgIiwgIiAiICk7Ci0gICAg
fQotICAgIH0KLSAgICBlbGVtLmNsYXNzTmFtZSA9IHZhbHVlID8galF1ZXJ5LnRyaW0oIGN1ciAp
IDogIiI7Ci0gICAgfQotICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdGhpczsKLSAgICB9LAot
Ci0gICAgdG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSwgc3RhdGVWYWwgKSB7Ci0gICAgdmFy
IHR5cGUgPSB0eXBlb2YgdmFsdWUsCi0gICAgaXNCb29sID0gdHlwZW9mIHN0YXRlVmFsID09PSAi
Ym9vbGVhbiI7Ci0KLSAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkgewotICAg
IHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oIGkgKSB7Ci0gICAgalF1ZXJ5KCB0aGlzICkudG9n
Z2xlQ2xhc3MoIHZhbHVlLmNhbGwodGhpcywgaSwgdGhpcy5jbGFzc05hbWUsIHN0YXRlVmFsKSwg
c3RhdGVWYWwgKTsKLSAgICB9KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0
aW9uKCkgewotICAgIGlmICggdHlwZSA9PT0gInN0cmluZyIgKSB7Ci0gICAgLy8gdG9nZ2xlIGlu
ZGl2aWR1YWwgY2xhc3MgbmFtZXMKLSAgICB2YXIgY2xhc3NOYW1lLAotICAgIGkgPSAwLAotICAg
IHNlbGYgPSBqUXVlcnkoIHRoaXMgKSwKLSAgICBzdGF0ZSA9IHN0YXRlVmFsLAotICAgIGNsYXNz
TmFtZXMgPSB2YWx1ZS5tYXRjaCggY29yZV9ybm90d2hpdGUgKSB8fCBbXTsKLQotICAgIHdoaWxl
ICggKGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNbIGkrKyBdKSApIHsKLSAgICAvLyBjaGVjayBlYWNo
IGNsYXNzTmFtZSBnaXZlbiwgc3BhY2Ugc2VwYXJhdGVkIGxpc3QKLSAgICBzdGF0ZSA9IGlzQm9v
bCA/IHN0YXRlIDogIXNlbGYuaGFzQ2xhc3MoIGNsYXNzTmFtZSApOwotICAgIHNlbGZbIHN0YXRl
ID8gImFkZENsYXNzIiA6ICJyZW1vdmVDbGFzcyIgXSggY2xhc3NOYW1lICk7Ci0gICAgfQotCi0g
ICAgLy8gVG9nZ2xlIHdob2xlIGNsYXNzIG5hbWUKLSAgICB9IGVsc2UgaWYgKCB0eXBlID09PSBj
b3JlX3N0cnVuZGVmaW5lZCB8fCB0eXBlID09PSAiYm9vbGVhbiIgKSB7Ci0gICAgaWYgKCB0aGlz
LmNsYXNzTmFtZSApIHsKLSAgICAvLyBzdG9yZSBjbGFzc05hbWUgaWYgc2V0Ci0gICAgalF1ZXJ5
Ll9kYXRhKCB0aGlzLCAiX19jbGFzc05hbWVfXyIsIHRoaXMuY2xhc3NOYW1lICk7Ci0gICAgfQot
Ci0gICAgLy8gSWYgdGhlIGVsZW1lbnQgaGFzIGEgY2xhc3MgbmFtZSBvciBpZiB3ZSdyZSBwYXNz
ZWQgImZhbHNlIiwKLSAgICAvLyB0aGVuIHJlbW92ZSB0aGUgd2hvbGUgY2xhc3NuYW1lIChpZiB0
aGVyZSB3YXMgb25lLCB0aGUgYWJvdmUgc2F2ZWQgaXQpLgotICAgIC8vIE90aGVyd2lzZSBicmlu
ZyBiYWNrIHdoYXRldmVyIHdhcyBwcmV2aW91c2x5IHNhdmVkIChpZiBhbnl0aGluZyksCi0gICAg
Ly8gZmFsbGluZyBiYWNrIHRvIHRoZSBlbXB0eSBzdHJpbmcgaWYgbm90aGluZyB3YXMgc3RvcmVk
LgotICAgIHRoaXMuY2xhc3NOYW1lID0gdGhpcy5jbGFzc05hbWUgfHwgdmFsdWUgPT09IGZhbHNl
ID8gIiIgOiBqUXVlcnkuX2RhdGEoIHRoaXMsICJfX2NsYXNzTmFtZV9fIiApIHx8ICIiOwotICAg
IH0KLSAgICB9KTsKLSAgICB9LAotCi0gICAgaGFzQ2xhc3M6IGZ1bmN0aW9uKCBzZWxlY3RvciAp
IHsKLSAgICB2YXIgY2xhc3NOYW1lID0gIiAiICsgc2VsZWN0b3IgKyAiICIsCi0gICAgaSA9IDAs
Ci0gICAgbCA9IHRoaXMubGVuZ3RoOwotICAgIGZvciAoIDsgaSA8IGw7IGkrKyApIHsKLSAgICBp
ZiAoIHRoaXNbaV0ubm9kZVR5cGUgPT09IDEgJiYgKCIgIiArIHRoaXNbaV0uY2xhc3NOYW1lICsg
IiAiKS5yZXBsYWNlKHJjbGFzcywgIiAiKS5pbmRleE9mKCBjbGFzc05hbWUgKSA+PSAwICkgewot
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fSwKLQotICAgIHZhbDogZnVuY3Rpb24oIHZhbHVlICkgewotICAgIHZhciByZXQsIGhvb2tzLCBp
c0Z1bmN0aW9uLAotICAgIGVsZW0gPSB0aGlzWzBdOwotCi0gICAgaWYgKCAhYXJndW1lbnRzLmxl
bmd0aCApIHsKLSAgICBpZiAoIGVsZW0gKSB7Ci0gICAgaG9va3MgPSBqUXVlcnkudmFsSG9va3Nb
IGVsZW0udHlwZSBdIHx8IGpRdWVyeS52YWxIb29rc1sgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2Fz
ZSgpIF07Ci0KLSAgICBpZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tzICYmIChyZXQgPSBob29r
cy5nZXQoIGVsZW0sICJ2YWx1ZSIgKSkgIT09IHVuZGVmaW5lZCApIHsKLSAgICByZXR1cm4gcmV0
OwotICAgIH0KLQotICAgIHJldCA9IGVsZW0udmFsdWU7Ci0KLSAgICByZXR1cm4gdHlwZW9mIHJl
dCA9PT0gInN0cmluZyIgPwotICAgIC8vIGhhbmRsZSBtb3N0IGNvbW1vbiBzdHJpbmcgY2FzZXMK
LSAgICByZXQucmVwbGFjZShycmV0dXJuLCAiIikgOgotICAgIC8vIGhhbmRsZSBjYXNlcyB3aGVy
ZSB2YWx1ZSBpcyBudWxsL3VuZGVmIG9yIG51bWJlcgotICAgIHJldCA9PSBudWxsID8gIiIgOiBy
ZXQ7Ci0gICAgfQotCi0gICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlzRnVuY3Rpb24gPSBqUXVl
cnkuaXNGdW5jdGlvbiggdmFsdWUgKTsKLQotICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24o
IGkgKSB7Ci0gICAgdmFyIHZhbCwKLSAgICBzZWxmID0galF1ZXJ5KHRoaXMpOwotCi0gICAgaWYg
KCB0aGlzLm5vZGVUeXBlICE9PSAxICkgewotICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAo
IGlzRnVuY3Rpb24gKSB7Ci0gICAgdmFsID0gdmFsdWUuY2FsbCggdGhpcywgaSwgc2VsZi52YWwo
KSApOwotICAgIH0gZWxzZSB7Ci0gICAgdmFsID0gdmFsdWU7Ci0gICAgfQotCi0gICAgLy8gVHJl
YXQgbnVsbC91bmRlZmluZWQgYXMgIiI7IGNvbnZlcnQgbnVtYmVycyB0byBzdHJpbmcKLSAgICBp
ZiAoIHZhbCA9PSBudWxsICkgewotICAgIHZhbCA9ICIiOwotICAgIH0gZWxzZSBpZiAoIHR5cGVv
ZiB2YWwgPT09ICJudW1iZXIiICkgewotICAgIHZhbCArPSAiIjsKLSAgICB9IGVsc2UgaWYgKCBq
UXVlcnkuaXNBcnJheSggdmFsICkgKSB7Ci0gICAgdmFsID0galF1ZXJ5Lm1hcCh2YWwsIGZ1bmN0
aW9uICggdmFsdWUgKSB7Ci0gICAgcmV0dXJuIHZhbHVlID09IG51bGwgPyAiIiA6IHZhbHVlICsg
IiI7Ci0gICAgfSk7Ci0gICAgfQotCi0gICAgaG9va3MgPSBqUXVlcnkudmFsSG9va3NbIHRoaXMu
dHlwZSBdIHx8IGpRdWVyeS52YWxIb29rc1sgdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIF07
Ci0KLSAgICAvLyBJZiBzZXQgcmV0dXJucyB1bmRlZmluZWQsIGZhbGwgYmFjayB0byBub3JtYWwg
c2V0dGluZwotICAgIGlmICggIWhvb2tzIHx8ICEoInNldCIgaW4gaG9va3MpIHx8IGhvb2tzLnNl
dCggdGhpcywgdmFsLCAidmFsdWUiICkgPT09IHVuZGVmaW5lZCApIHsKLSAgICB0aGlzLnZhbHVl
ID0gdmFsOwotICAgIH0KLSAgICB9KTsKLSAgICB9Ci19KTsKLQotalF1ZXJ5LmV4dGVuZCh7Ci0g
ICAgdmFsSG9va3M6IHsKLSAgICBvcHRpb246IHsKLSAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkg
ewotICAgIC8vIGF0dHJpYnV0ZXMudmFsdWUgaXMgdW5kZWZpbmVkIGluIEJsYWNrYmVycnkgNC43
IGJ1dAotICAgIC8vIHVzZXMgLnZhbHVlLiBTZWUgIzY5MzIKLSAgICB2YXIgdmFsID0gZWxlbS5h
dHRyaWJ1dGVzLnZhbHVlOwotICAgIHJldHVybiAhdmFsIHx8IHZhbC5zcGVjaWZpZWQgPyBlbGVt
LnZhbHVlIDogZWxlbS50ZXh0OwotICAgIH0KLSAgICB9LAotICAgIHNlbGVjdDogewotICAgIGdl
dDogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgdmFyIHZhbHVlLCBvcHRpb24sCi0gICAgb3B0aW9u
cyA9IGVsZW0ub3B0aW9ucywKLSAgICBpbmRleCA9IGVsZW0uc2VsZWN0ZWRJbmRleCwKLSAgICBv
bmUgPSBlbGVtLnR5cGUgPT09ICJzZWxlY3Qtb25lIiB8fCBpbmRleCA8IDAsCi0gICAgdmFsdWVz
ID0gb25lID8gbnVsbCA6IFtdLAotICAgIG1heCA9IG9uZSA/IGluZGV4ICsgMSA6IG9wdGlvbnMu
bGVuZ3RoLAotICAgIGkgPSBpbmRleCA8IDAgPwotICAgIG1heCA6Ci0gICAgb25lID8gaW5kZXgg
OiAwOwotCi0gICAgLy8gTG9vcCB0aHJvdWdoIGFsbCB0aGUgc2VsZWN0ZWQgb3B0aW9ucwotICAg
IGZvciAoIDsgaSA8IG1heDsgaSsrICkgewotICAgIG9wdGlvbiA9IG9wdGlvbnNbIGkgXTsKLQot
ICAgIC8vIG9sZElFIGRvZXNuJ3QgdXBkYXRlIHNlbGVjdGVkIGFmdGVyIGZvcm0gcmVzZXQgKCMy
NTUxKQotICAgIGlmICggKCBvcHRpb24uc2VsZWN0ZWQgfHwgaSA9PT0gaW5kZXggKSAmJgotICAg
IC8vIERvbid0IHJldHVybiBvcHRpb25zIHRoYXQgYXJlIGRpc2FibGVkIG9yIGluIGEgZGlzYWJs
ZWQgb3B0Z3JvdXAKLSAgICAoIGpRdWVyeS5zdXBwb3J0Lm9wdERpc2FibGVkID8gIW9wdGlvbi5k
aXNhYmxlZCA6IG9wdGlvbi5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIikgPT09IG51bGwgKSAmJgot
ICAgICggIW9wdGlvbi5wYXJlbnROb2RlLmRpc2FibGVkIHx8ICFqUXVlcnkubm9kZU5hbWUoIG9w
dGlvbi5wYXJlbnROb2RlLCAib3B0Z3JvdXAiICkgKSApIHsKLQotICAgIC8vIEdldCB0aGUgc3Bl
Y2lmaWMgdmFsdWUgZm9yIHRoZSBvcHRpb24KLSAgICB2YWx1ZSA9IGpRdWVyeSggb3B0aW9uICku
dmFsKCk7Ci0KLSAgICAvLyBXZSBkb24ndCBuZWVkIGFuIGFycmF5IGZvciBvbmUgc2VsZWN0cwot
ICAgIGlmICggb25lICkgewotICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0KLSAgICAvLyBNdWx0
aS1TZWxlY3RzIHJldHVybiBhbiBhcnJheQotICAgIHZhbHVlcy5wdXNoKCB2YWx1ZSApOwotICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdmFsdWVzOwotICAgIH0sCi0KLSAgICBzZXQ6IGZ1bmN0
aW9uKCBlbGVtLCB2YWx1ZSApIHsKLSAgICB2YXIgdmFsdWVzID0galF1ZXJ5Lm1ha2VBcnJheSgg
dmFsdWUgKTsKLQotICAgIGpRdWVyeShlbGVtKS5maW5kKCJvcHRpb24iKS5lYWNoKGZ1bmN0aW9u
KCkgewotICAgIHRoaXMuc2VsZWN0ZWQgPSBqUXVlcnkuaW5BcnJheSggalF1ZXJ5KHRoaXMpLnZh
bCgpLCB2YWx1ZXMgKSA+PSAwOwotICAgIH0pOwotCi0gICAgaWYgKCAhdmFsdWVzLmxlbmd0aCAp
IHsKLSAgICBlbGVtLnNlbGVjdGVkSW5kZXggPSAtMTsKLSAgICB9Ci0gICAgcmV0dXJuIHZhbHVl
czsKLSAgICB9Ci0gICAgfQotICAgIH0sCi0KLSAgICBhdHRyOiBmdW5jdGlvbiggZWxlbSwgbmFt
ZSwgdmFsdWUgKSB7Ci0gICAgdmFyIGhvb2tzLCBub3R4bWwsIHJldCwKLSAgICBuVHlwZSA9IGVs
ZW0ubm9kZVR5cGU7Ci0KLSAgICAvLyBkb24ndCBnZXQvc2V0IGF0dHJpYnV0ZXMgb24gdGV4dCwg
Y29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzCi0gICAgaWYgKCAhZWxlbSB8fCBuVHlwZSA9PT0g
MyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHsKLSAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgLy8gRmFsbGJhY2sgdG8gcHJvcCB3aGVuIGF0dHJpYnV0ZXMgYXJlIG5vdCBzdXBwb3J0
ZWQKLSAgICBpZiAoIHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSA9PT0gY29yZV9zdHJ1bmRlZmlu
ZWQgKSB7Ci0gICAgcmV0dXJuIGpRdWVyeS5wcm9wKCBlbGVtLCBuYW1lLCB2YWx1ZSApOwotICAg
IH0KLQotICAgIG5vdHhtbCA9IG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0g
KTsKLQotICAgIC8vIEFsbCBhdHRyaWJ1dGVzIGFyZSBsb3dlcmNhc2UKLSAgICAvLyBHcmFiIG5l
Y2Vzc2FyeSBob29rIGlmIG9uZSBpcyBkZWZpbmVkCi0gICAgaWYgKCBub3R4bWwgKSB7Ci0gICAg
bmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTsKLSAgICBob29rcyA9IGpRdWVyeS5hdHRySG9va3Nb
IG5hbWUgXSB8fCAoIHJib29sZWFuLnRlc3QoIG5hbWUgKSA/IGJvb2xIb29rIDogbm9kZUhvb2sg
KTsKLSAgICB9Ci0KLSAgICBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7Ci0KLSAgICBpZiAo
IHZhbHVlID09PSBudWxsICkgewotICAgIGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7
Ci0KLSAgICB9IGVsc2UgaWYgKCBob29rcyAmJiBub3R4bWwgJiYgInNldCIgaW4gaG9va3MgJiYg
KHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKSkgIT09IHVuZGVmaW5lZCApIHsK
LSAgICByZXR1cm4gcmV0OwotCi0gICAgfSBlbHNlIHsKLSAgICBlbGVtLnNldEF0dHJpYnV0ZSgg
bmFtZSwgdmFsdWUgKyAiIiApOwotICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0KLSAgICB9IGVs
c2UgaWYgKCBob29rcyAmJiBub3R4bWwgJiYgImdldCIgaW4gaG9va3MgJiYgKHJldCA9IGhvb2tz
LmdldCggZWxlbSwgbmFtZSApKSAhPT0gbnVsbCApIHsKLSAgICByZXR1cm4gcmV0OwotCi0gICAg
fSBlbHNlIHsKLQotICAgIC8vIEluIElFOSssIEZsYXNoIG9iamVjdHMgZG9uJ3QgaGF2ZSAuZ2V0
QXR0cmlidXRlICgjMTI5NDUpCi0gICAgLy8gU3VwcG9ydDogSUU5KwotICAgIGlmICggdHlwZW9m
IGVsZW0uZ2V0QXR0cmlidXRlICE9PSBjb3JlX3N0cnVuZGVmaW5lZCApIHsKLSAgICByZXQgPSAg
ZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKTsKLSAgICB9Ci0KLSAgICAvLyBOb24tZXhpc3RlbnQg
YXR0cmlidXRlcyByZXR1cm4gbnVsbCwgd2Ugbm9ybWFsaXplIHRvIHVuZGVmaW5lZAotICAgIHJl
dHVybiByZXQgPT0gbnVsbCA/Ci0gICAgdW5kZWZpbmVkIDoKLSAgICByZXQ7Ci0gICAgfQotICAg
IH0sCi0KLSAgICByZW1vdmVBdHRyOiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7Ci0gICAgdmFy
IG5hbWUsIHByb3BOYW1lLAotICAgIGkgPSAwLAotICAgIGF0dHJOYW1lcyA9IHZhbHVlICYmIHZh
bHVlLm1hdGNoKCBjb3JlX3Jub3R3aGl0ZSApOwotCi0gICAgaWYgKCBhdHRyTmFtZXMgJiYgZWxl
bS5ub2RlVHlwZSA9PT0gMSApIHsKLSAgICB3aGlsZSAoIChuYW1lID0gYXR0ck5hbWVzW2krK10p
ICkgewotICAgIHByb3BOYW1lID0galF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lOwotCi0g
ICAgLy8gQm9vbGVhbiBhdHRyaWJ1dGVzIGdldCBzcGVjaWFsIHRyZWF0bWVudCAoIzEwODcwKQot
ICAgIGlmICggcmJvb2xlYW4udGVzdCggbmFtZSApICkgewotICAgIC8vIFNldCBjb3JyZXNwb25k
aW5nIHByb3BlcnR5IHRvIGZhbHNlIGZvciBib29sZWFuIGF0dHJpYnV0ZXMKLSAgICAvLyBBbHNv
IGNsZWFyIGRlZmF1bHRDaGVja2VkL2RlZmF1bHRTZWxlY3RlZCAoaWYgYXBwcm9wcmlhdGUpIGZv
ciBJRTw4Ci0gICAgaWYgKCAhZ2V0U2V0QXR0cmlidXRlICYmIHJ1c2VEZWZhdWx0LnRlc3QoIG5h
bWUgKSApIHsKLSAgICBlbGVtWyBqUXVlcnkuY2FtZWxDYXNlKCAiZGVmYXVsdC0iICsgbmFtZSAp
IF0gPQotICAgIGVsZW1bIHByb3BOYW1lIF0gPSBmYWxzZTsKLSAgICB9IGVsc2UgewotICAgIGVs
ZW1bIHByb3BOYW1lIF0gPSBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBTZWUgIzk2OTkgZm9yIGV4
cGxhbmF0aW9uIG9mIHRoaXMgYXBwcm9hY2ggKHNldHRpbmcgZmlyc3QsIHRoZW4gcmVtb3ZhbCkK
LSAgICB9IGVsc2UgewotICAgIGpRdWVyeS5hdHRyKCBlbGVtLCBuYW1lLCAiIiApOwotICAgIH0K
LQotICAgIGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBnZXRTZXRBdHRyaWJ1dGUgPyBuYW1lIDogcHJv
cE5hbWUgKTsKLSAgICB9Ci0gICAgfQotICAgIH0sCi0KLSAgICBhdHRySG9va3M6IHsKLSAgICB0
eXBlOiB7Ci0gICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7Ci0gICAgaWYgKCAhalF1
ZXJ5LnN1cHBvcnQucmFkaW9WYWx1ZSAmJiB2YWx1ZSA9PT0gInJhZGlvIiAmJiBqUXVlcnkubm9k
ZU5hbWUoZWxlbSwgImlucHV0IikgKSB7Ci0gICAgLy8gU2V0dGluZyB0aGUgdHlwZSBvbiBhIHJh
ZGlvIGJ1dHRvbiBhZnRlciB0aGUgdmFsdWUgcmVzZXRzIHRoZSB2YWx1ZSBpbiBJRTYtOQotICAg
IC8vIFJlc2V0IHZhbHVlIHRvIGRlZmF1bHQgaW4gY2FzZSB0eXBlIGlzIHNldCBhZnRlciB2YWx1
ZSBkdXJpbmcgY3JlYXRpb24KLSAgICB2YXIgdmFsID0gZWxlbS52YWx1ZTsKLSAgICBlbGVtLnNl
dEF0dHJpYnV0ZSggInR5cGUiLCB2YWx1ZSApOwotICAgIGlmICggdmFsICkgewotICAgIGVsZW0u
dmFsdWUgPSB2YWw7Ci0gICAgfQotICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0gICAgfQotICAg
IH0KLSAgICB9LAotCi0gICAgcHJvcEZpeDogewotICAgIHRhYmluZGV4OiAidGFiSW5kZXgiLAot
ICAgIHJlYWRvbmx5OiAicmVhZE9ubHkiLAotICAgICJmb3IiOiAiaHRtbEZvciIsCi0gICAgImNs
YXNzIjogImNsYXNzTmFtZSIsCi0gICAgbWF4bGVuZ3RoOiAibWF4TGVuZ3RoIiwKLSAgICBjZWxs
c3BhY2luZzogImNlbGxTcGFjaW5nIiwKLSAgICBjZWxscGFkZGluZzogImNlbGxQYWRkaW5nIiwK
LSAgICByb3dzcGFuOiAicm93U3BhbiIsCi0gICAgY29sc3BhbjogImNvbFNwYW4iLAotICAgIHVz
ZW1hcDogInVzZU1hcCIsCi0gICAgZnJhbWVib3JkZXI6ICJmcmFtZUJvcmRlciIsCi0gICAgY29u
dGVudGVkaXRhYmxlOiAiY29udGVudEVkaXRhYmxlIgotICAgIH0sCi0KLSAgICBwcm9wOiBmdW5j
dGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7Ci0gICAgdmFyIHJldCwgaG9va3MsIG5vdHhtbCwK
LSAgICBuVHlwZSA9IGVsZW0ubm9kZVR5cGU7Ci0KLSAgICAvLyBkb24ndCBnZXQvc2V0IHByb3Bl
cnRpZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzCi0gICAgaWYgKCAhZWxl
bSB8fCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHsKLSAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgbm90eG1sID0gblR5cGUgIT09IDEgfHwgIWpRdWVyeS5pc1hN
TERvYyggZWxlbSApOwotCi0gICAgaWYgKCBub3R4bWwgKSB7Ci0gICAgLy8gRml4IG5hbWUgYW5k
IGF0dGFjaCBob29rcwotICAgIG5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7
Ci0gICAgaG9va3MgPSBqUXVlcnkucHJvcEhvb2tzWyBuYW1lIF07Ci0gICAgfQotCi0gICAgaWYg
KCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkgewotICAgIGlmICggaG9va3MgJiYgInNldCIgaW4gaG9v
a3MgJiYgKHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKSkgIT09IHVuZGVmaW5l
ZCApIHsKLSAgICByZXR1cm4gcmV0OwotCi0gICAgfSBlbHNlIHsKLSAgICByZXR1cm4gKCBlbGVt
WyBuYW1lIF0gPSB2YWx1ZSApOwotICAgIH0KLQotICAgIH0gZWxzZSB7Ci0gICAgaWYgKCBob29r
cyAmJiAiZ2V0IiBpbiBob29rcyAmJiAocmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkpICE9
PSBudWxsICkgewotICAgIHJldHVybiByZXQ7Ci0KLSAgICB9IGVsc2UgewotICAgIHJldHVybiBl
bGVtWyBuYW1lIF07Ci0gICAgfQotICAgIH0KLSAgICB9LAotCi0gICAgcHJvcEhvb2tzOiB7Ci0g
ICAgdGFiSW5kZXg6IHsKLSAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgIC8vIGVsZW0u
dGFiSW5kZXggZG9lc24ndCBhbHdheXMgcmV0dXJuIHRoZSBjb3JyZWN0IHZhbHVlIHdoZW4gaXQg
aGFzbid0IGJlZW4gZXhwbGljaXRseSBzZXQKLSAgICAvLyBodHRwOi8vZmx1aWRwcm9qZWN0Lm9y
Zy9ibG9nLzIwMDgvMDEvMDkvZ2V0dGluZy1zZXR0aW5nLWFuZC1yZW1vdmluZy10YWJpbmRleC12
YWx1ZXMtd2l0aC1qYXZhc2NyaXB0LwotICAgIHZhciBhdHRyaWJ1dGVOb2RlID0gZWxlbS5nZXRB
dHRyaWJ1dGVOb2RlKCJ0YWJpbmRleCIpOwotCi0gICAgcmV0dXJuIGF0dHJpYnV0ZU5vZGUgJiYg
YXR0cmlidXRlTm9kZS5zcGVjaWZpZWQgPwotICAgIHBhcnNlSW50KCBhdHRyaWJ1dGVOb2RlLnZh
bHVlLCAxMCApIDoKLSAgICByZm9jdXNhYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSB8fCByY2xp
Y2thYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSAmJiBlbGVtLmhyZWYgPwotICAgIDAgOgotICAg
IHVuZGVmaW5lZDsKLSAgICB9Ci0gICAgfQotICAgIH0KLX0pOwotCi0vLyBIb29rIGZvciBib29s
ZWFuIGF0dHJpYnV0ZXMKLWJvb2xIb29rID0gewotICAgIGdldDogZnVuY3Rpb24oIGVsZW0sIG5h
bWUgKSB7Ci0gICAgdmFyCi0gICAgLy8gVXNlIC5wcm9wIHRvIGRldGVybWluZSBpZiB0aGlzIGF0
dHJpYnV0ZSBpcyB1bmRlcnN0b29kIGFzIGJvb2xlYW4KLSAgICBwcm9wID0galF1ZXJ5LnByb3Ao
IGVsZW0sIG5hbWUgKSwKLQotICAgIC8vIEZldGNoIGl0IGFjY29yZGluZ2x5Ci0gICAgYXR0ciA9
IHR5cGVvZiBwcm9wID09PSAiYm9vbGVhbiIgJiYgZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKSwK
LSAgICBkZXRhaWwgPSB0eXBlb2YgcHJvcCA9PT0gImJvb2xlYW4iID8KLQotICAgIGdldFNldElu
cHV0ICYmIGdldFNldEF0dHJpYnV0ZSA/Ci0gICAgYXR0ciAhPSBudWxsIDoKLSAgICAvLyBvbGRJ
RSBmYWJyaWNhdGVzIGFuIGVtcHR5IHN0cmluZyBmb3IgbWlzc2luZyBib29sZWFuIGF0dHJpYnV0
ZXMKLSAgICAvLyBhbmQgY29uZmxhdGVzIGNoZWNrZWQvc2VsZWN0ZWQgaW50byBhdHRyb3BlcnRp
ZXMKLSAgICBydXNlRGVmYXVsdC50ZXN0KCBuYW1lICkgPwotICAgIGVsZW1bIGpRdWVyeS5jYW1l
bENhc2UoICJkZWZhdWx0LSIgKyBuYW1lICkgXSA6Ci0gICAgISFhdHRyIDoKLQotICAgIC8vIGZl
dGNoIGFuIGF0dHJpYnV0ZSBub2RlIGZvciBwcm9wZXJ0aWVzIG5vdCByZWNvZ25pemVkIGFzIGJv
b2xlYW4KLSAgICBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKTsKLQotICAgIHJldHVybiBk
ZXRhaWwgJiYgZGV0YWlsLnZhbHVlICE9PSBmYWxzZSA/Ci0gICAgbmFtZS50b0xvd2VyQ2FzZSgp
IDoKLSAgICB1bmRlZmluZWQ7Ci0gICAgfSwKLSAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1
ZSwgbmFtZSApIHsKLSAgICBpZiAoIHZhbHVlID09PSBmYWxzZSApIHsKLSAgICAvLyBSZW1vdmUg
Ym9vbGVhbiBhdHRyaWJ1dGVzIHdoZW4gc2V0IHRvIGZhbHNlCi0gICAgalF1ZXJ5LnJlbW92ZUF0
dHIoIGVsZW0sIG5hbWUgKTsKLSAgICB9IGVsc2UgaWYgKCBnZXRTZXRJbnB1dCAmJiBnZXRTZXRB
dHRyaWJ1dGUgfHwgIXJ1c2VEZWZhdWx0LnRlc3QoIG5hbWUgKSApIHsKLSAgICAvLyBJRTw4IG5l
ZWRzIHRoZSAqcHJvcGVydHkqIG5hbWUKLSAgICBlbGVtLnNldEF0dHJpYnV0ZSggIWdldFNldEF0
dHJpYnV0ZSAmJiBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWUsIG5hbWUgKTsKLQotICAg
IC8vIFVzZSBkZWZhdWx0Q2hlY2tlZCBhbmQgZGVmYXVsdFNlbGVjdGVkIGZvciBvbGRJRQotICAg
IH0gZWxzZSB7Ci0gICAgZWxlbVsgalF1ZXJ5LmNhbWVsQ2FzZSggImRlZmF1bHQtIiArIG5hbWUg
KSBdID0gZWxlbVsgbmFtZSBdID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmFtZTsKLSAg
ICB9Ci19OwotCi0vLyBmaXggb2xkSUUgdmFsdWUgYXR0cm9wZXJ0eQotaWYgKCAhZ2V0U2V0SW5w
dXQgfHwgIWdldFNldEF0dHJpYnV0ZSApIHsKLSAgICBqUXVlcnkuYXR0ckhvb2tzLnZhbHVlID0g
ewotICAgIGdldDogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7Ci0gICAgdmFyIHJldCA9IGVsZW0u
Z2V0QXR0cmlidXRlTm9kZSggbmFtZSApOwotICAgIHJldHVybiBqUXVlcnkubm9kZU5hbWUoIGVs
ZW0sICJpbnB1dCIgKSA/Ci0KLSAgICAvLyBJZ25vcmUgdGhlIHZhbHVlICpwcm9wZXJ0eSogYnkg
dXNpbmcgZGVmYXVsdFZhbHVlCi0gICAgZWxlbS5kZWZhdWx0VmFsdWUgOgotCi0gICAgcmV0ICYm
IHJldC5zcGVjaWZpZWQgPyByZXQudmFsdWUgOiB1bmRlZmluZWQ7Ci0gICAgfSwKLSAgICBzZXQ6
IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgbmFtZSApIHsKLSAgICBpZiAoIGpRdWVyeS5ub2RlTmFt
ZSggZWxlbSwgImlucHV0IiApICkgewotICAgIC8vIERvZXMgbm90IHJldHVybiBzbyB0aGF0IHNl
dEF0dHJpYnV0ZSBpcyBhbHNvIHVzZWQKLSAgICBlbGVtLmRlZmF1bHRWYWx1ZSA9IHZhbHVlOwot
ICAgIH0gZWxzZSB7Ci0gICAgLy8gVXNlIG5vZGVIb29rIGlmIGRlZmluZWQgKCMxOTU0KTsgb3Ro
ZXJ3aXNlIHNldEF0dHJpYnV0ZSBpcyBmaW5lCi0gICAgcmV0dXJuIG5vZGVIb29rICYmIG5vZGVI
b29rLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKTsKLSAgICB9Ci0gICAgfQotICAgIH07Ci19Ci0K
LS8vIElFNi83IGRvIG5vdCBzdXBwb3J0IGdldHRpbmcvc2V0dGluZyBzb21lIGF0dHJpYnV0ZXMg
d2l0aCBnZXQvc2V0QXR0cmlidXRlCi1pZiAoICFnZXRTZXRBdHRyaWJ1dGUgKSB7Ci0KLSAgICAv
LyBVc2UgdGhpcyBmb3IgYW55IGF0dHJpYnV0ZSBpbiBJRTYvNwotICAgIC8vIFRoaXMgZml4ZXMg
YWxtb3N0IGV2ZXJ5IElFNi83IGlzc3VlCi0gICAgbm9kZUhvb2sgPSBqUXVlcnkudmFsSG9va3Mu
YnV0dG9uID0gewotICAgIGdldDogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7Ci0gICAgdmFyIHJl
dCA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggbmFtZSApOwotICAgIHJldHVybiByZXQgJiYgKCBu
YW1lID09PSAiaWQiIHx8IG5hbWUgPT09ICJuYW1lIiB8fCBuYW1lID09PSAiY29vcmRzIiA/IHJl
dC52YWx1ZSAhPT0gIiIgOiByZXQuc3BlY2lmaWVkICkgPwotICAgIHJldC52YWx1ZSA6Ci0gICAg
dW5kZWZpbmVkOwotICAgIH0sCi0gICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIG5hbWUg
KSB7Ci0gICAgLy8gU2V0IHRoZSBleGlzdGluZyBvciBjcmVhdGUgYSBuZXcgYXR0cmlidXRlIG5v
ZGUKLSAgICB2YXIgcmV0ID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICk7Ci0gICAgaWYg
KCAhcmV0ICkgewotICAgIGVsZW0uc2V0QXR0cmlidXRlTm9kZSgKLSAgICAocmV0ID0gZWxlbS5v
d25lckRvY3VtZW50LmNyZWF0ZUF0dHJpYnV0ZSggbmFtZSApKQotICAgICk7Ci0gICAgfQotCi0g
ICAgcmV0LnZhbHVlID0gdmFsdWUgKz0gIiI7Ci0KLSAgICAvLyBCcmVhayBhc3NvY2lhdGlvbiB3
aXRoIGNsb25lZCBlbGVtZW50cyBieSBhbHNvIHVzaW5nIHNldEF0dHJpYnV0ZSAoIzk2NDYpCi0g
ICAgcmV0dXJuIG5hbWUgPT09ICJ2YWx1ZSIgfHwgdmFsdWUgPT09IGVsZW0uZ2V0QXR0cmlidXRl
KCBuYW1lICkgPwotICAgIHZhbHVlIDoKLSAgICB1bmRlZmluZWQ7Ci0gICAgfQotICAgIH07Ci0K
LSAgICAvLyBTZXQgY29udGVudGVkaXRhYmxlIHRvIGZhbHNlIG9uIHJlbW92YWxzKCMxMDQyOSkK
LSAgICAvLyBTZXR0aW5nIHRvIGVtcHR5IHN0cmluZyB0aHJvd3MgYW4gZXJyb3IgYXMgYW4gaW52
YWxpZCB2YWx1ZQotICAgIGpRdWVyeS5hdHRySG9va3MuY29udGVudGVkaXRhYmxlID0gewotICAg
IGdldDogbm9kZUhvb2suZ2V0LAotICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1l
ICkgewotICAgIG5vZGVIb29rLnNldCggZWxlbSwgdmFsdWUgPT09ICIiID8gZmFsc2UgOiB2YWx1
ZSwgbmFtZSApOwotICAgIH0KLSAgICB9OwotCi0gICAgLy8gU2V0IHdpZHRoIGFuZCBoZWlnaHQg
dG8gYXV0byBpbnN0ZWFkIG9mIDAgb24gZW1wdHkgc3RyaW5nKCBCdWcgIzgxNTAgKQotICAgIC8v
IFRoaXMgaXMgZm9yIHJlbW92YWxzCi0gICAgalF1ZXJ5LmVhY2goWyAid2lkdGgiLCAiaGVpZ2h0
IiBdLCBmdW5jdGlvbiggaSwgbmFtZSApIHsKLSAgICBqUXVlcnkuYXR0ckhvb2tzWyBuYW1lIF0g
PSBqUXVlcnkuZXh0ZW5kKCBqUXVlcnkuYXR0ckhvb2tzWyBuYW1lIF0sIHsKLSAgICBzZXQ6IGZ1
bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKLSAgICBpZiAoIHZhbHVlID09PSAiIiApIHsKLSAgICBl
bGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgImF1dG8iICk7Ci0gICAgcmV0dXJuIHZhbHVlOwotICAg
IH0KLSAgICB9Ci0gICAgfSk7Ci0gICAgfSk7Ci19Ci0KLQotLy8gU29tZSBhdHRyaWJ1dGVzIHJl
cXVpcmUgYSBzcGVjaWFsIGNhbGwgb24gSUUKLS8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20v
ZW4tdXMvbGlicmFyeS9tczUzNjQyOSUyOFZTLjg1JTI5LmFzcHgKLWlmICggIWpRdWVyeS5zdXBw
b3J0LmhyZWZOb3JtYWxpemVkICkgewotICAgIGpRdWVyeS5lYWNoKFsgImhyZWYiLCAic3JjIiwg
IndpZHRoIiwgImhlaWdodCIgXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7Ci0gICAgalF1ZXJ5LmF0
dHJIb29rc1sgbmFtZSBdID0galF1ZXJ5LmV4dGVuZCggalF1ZXJ5LmF0dHJIb29rc1sgbmFtZSBd
LCB7Ci0gICAgZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICB2YXIgcmV0ID0gZWxlbS5nZXRB
dHRyaWJ1dGUoIG5hbWUsIDIgKTsKLSAgICByZXR1cm4gcmV0ID09IG51bGwgPyB1bmRlZmluZWQg
OiByZXQ7Ci0gICAgfQotICAgIH0pOwotICAgIH0pOwotCi0gICAgLy8gaHJlZi9zcmMgcHJvcGVy
dHkgc2hvdWxkIGdldCB0aGUgZnVsbCBub3JtYWxpemVkIFVSTCAoIzEwMjk5LyMxMjkxNSkKLSAg
ICBqUXVlcnkuZWFjaChbICJocmVmIiwgInNyYyIgXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7Ci0g
ICAgalF1ZXJ5LnByb3BIb29rc1sgbmFtZSBdID0gewotICAgIGdldDogZnVuY3Rpb24oIGVsZW0g
KSB7Ci0gICAgcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lLCA0ICk7Ci0gICAgfQotICAg
IH07Ci0gICAgfSk7Ci19Ci0KLWlmICggIWpRdWVyeS5zdXBwb3J0LnN0eWxlICkgewotICAgIGpR
dWVyeS5hdHRySG9va3Muc3R5bGUgPSB7Ci0gICAgZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKLSAg
ICAvLyBSZXR1cm4gdW5kZWZpbmVkIGluIHRoZSBjYXNlIG9mIGVtcHR5IHN0cmluZwotICAgIC8v
IE5vdGU6IElFIHVwcGVyY2FzZXMgY3NzIHByb3BlcnR5IG5hbWVzLCBidXQgaWYgd2Ugd2VyZSB0
byAudG9Mb3dlckNhc2UoKQotICAgIC8vIC5jc3NUZXh0LCB0aGF0IHdvdWxkIGRlc3Ryb3kgY2Fz
ZSBzZW5zdGl0aXZpdHkgaW4gVVJMJ3MsIGxpa2UgaW4gImJhY2tncm91bmQiCi0gICAgcmV0dXJu
IGVsZW0uc3R5bGUuY3NzVGV4dCB8fCB1bmRlZmluZWQ7Ci0gICAgfSwKLSAgICBzZXQ6IGZ1bmN0
aW9uKCBlbGVtLCB2YWx1ZSApIHsKLSAgICByZXR1cm4gKCBlbGVtLnN0eWxlLmNzc1RleHQgPSB2
YWx1ZSArICIiICk7Ci0gICAgfQotICAgIH07Ci19Ci0KLS8vIFNhZmFyaSBtaXMtcmVwb3J0cyB0
aGUgZGVmYXVsdCBzZWxlY3RlZCBwcm9wZXJ0eSBvZiBhbiBvcHRpb24KLS8vIEFjY2Vzc2luZyB0
aGUgcGFyZW50J3Mgc2VsZWN0ZWRJbmRleCBwcm9wZXJ0eSBmaXhlcyBpdAotaWYgKCAhalF1ZXJ5
LnN1cHBvcnQub3B0U2VsZWN0ZWQgKSB7Ci0gICAgalF1ZXJ5LnByb3BIb29rcy5zZWxlY3RlZCA9
IGpRdWVyeS5leHRlbmQoIGpRdWVyeS5wcm9wSG9va3Muc2VsZWN0ZWQsIHsKLSAgICBnZXQ6IGZ1
bmN0aW9uKCBlbGVtICkgewotICAgIHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7Ci0KLSAg
ICBpZiAoIHBhcmVudCApIHsKLSAgICBwYXJlbnQuc2VsZWN0ZWRJbmRleDsKLQotICAgIC8vIE1h
a2Ugc3VyZSB0aGF0IGl0IGFsc28gd29ya3Mgd2l0aCBvcHRncm91cHMsIHNlZSAjNTcwMQotICAg
IGlmICggcGFyZW50LnBhcmVudE5vZGUgKSB7Ci0gICAgcGFyZW50LnBhcmVudE5vZGUuc2VsZWN0
ZWRJbmRleDsKLSAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICB9KTsK
LX0KLQotLy8gSUU2LzcgY2FsbCBlbmN0eXBlIGVuY29kaW5nCi1pZiAoICFqUXVlcnkuc3VwcG9y
dC5lbmN0eXBlICkgewotICAgIGpRdWVyeS5wcm9wRml4LmVuY3R5cGUgPSAiZW5jb2RpbmciOwot
fQotCi0vLyBSYWRpb3MgYW5kIGNoZWNrYm94ZXMgZ2V0dGVyL3NldHRlcgotaWYgKCAhalF1ZXJ5
LnN1cHBvcnQuY2hlY2tPbiApIHsKLSAgICBqUXVlcnkuZWFjaChbICJyYWRpbyIsICJjaGVja2Jv
eCIgXSwgZnVuY3Rpb24oKSB7Ci0gICAgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0gPSB7Ci0gICAg
Z2V0OiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgaW4g
V2Via2l0ICIiIGlzIHJldHVybmVkIGluc3RlYWQgb2YgIm9uIiBpZiBhIHZhbHVlIGlzbid0IHNw
ZWNpZmllZAotICAgIHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSgidmFsdWUiKSA9PT0gbnVsbCA/
ICJvbiIgOiBlbGVtLnZhbHVlOwotICAgIH0KLSAgICB9OwotICAgIH0pOwotfQotalF1ZXJ5LmVh
Y2goWyAicmFkaW8iLCAiY2hlY2tib3giIF0sIGZ1bmN0aW9uKCkgewotICAgIGpRdWVyeS52YWxI
b29rc1sgdGhpcyBdID0galF1ZXJ5LmV4dGVuZCggalF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0sIHsK
LSAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKLSAgICBpZiAoIGpRdWVyeS5pc0Fy
cmF5KCB2YWx1ZSApICkgewotICAgIHJldHVybiAoIGVsZW0uY2hlY2tlZCA9IGpRdWVyeS5pbkFy
cmF5KCBqUXVlcnkoZWxlbSkudmFsKCksIHZhbHVlICkgPj0gMCApOwotICAgIH0KLSAgICB9Ci0g
ICAgfSk7Ci19KTsKLXZhciByZm9ybUVsZW1zID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWEp
JC9pLAotICAgIHJrZXlFdmVudCA9IC9ea2V5LywKLSAgICBybW91c2VFdmVudCA9IC9eKD86bW91
c2V8Y29udGV4dG1lbnUpfGNsaWNrLywKLSAgICByZm9jdXNNb3JwaCA9IC9eKD86Zm9jdXNpbmZv
Y3VzfGZvY3Vzb3V0Ymx1cikkLywKLSAgICBydHlwZW5hbWVzcGFjZSA9IC9eKFteLl0qKSg/Olwu
KC4rKXwpJC87Ci0KLWZ1bmN0aW9uIHJldHVyblRydWUoKSB7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWZ1bmN0aW9uIHJldHVybkZhbHNlKCkgewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotLyoK
LSAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIGV2ZW50cyAtLSBub3QgcGFydCBvZiB0
aGUgcHVibGljIGludGVyZmFjZS4KLSAqIFByb3BzIHRvIERlYW4gRWR3YXJkcycgYWRkRXZlbnQg
bGlicmFyeSBmb3IgbWFueSBvZiB0aGUgaWRlYXMuCi0gKi8KLWpRdWVyeS5ldmVudCA9IHsKLQot
ICAgIGdsb2JhbDoge30sCi0KLSAgICBhZGQ6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxl
ciwgZGF0YSwgc2VsZWN0b3IgKSB7Ci0gICAgdmFyIHRtcCwgZXZlbnRzLCB0LCBoYW5kbGVPYmpJ
biwKLSAgICBzcGVjaWFsLCBldmVudEhhbmRsZSwgaGFuZGxlT2JqLAotICAgIGhhbmRsZXJzLCB0
eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSwKLSAgICBlbGVtRGF0YSA9IGpRdWVyeS5fZGF0YSgg
ZWxlbSApOwotCi0gICAgLy8gRG9uJ3QgYXR0YWNoIGV2ZW50cyB0byBub0RhdGEgb3IgdGV4dC9j
b21tZW50IG5vZGVzIChidXQgYWxsb3cgcGxhaW4gb2JqZWN0cykKLSAgICBpZiAoICFlbGVtRGF0
YSApIHsKLSAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQ2FsbGVyIGNhbiBwYXNzIGluIGFu
IG9iamVjdCBvZiBjdXN0b20gZGF0YSBpbiBsaWV1IG9mIHRoZSBoYW5kbGVyCi0gICAgaWYgKCBo
YW5kbGVyLmhhbmRsZXIgKSB7Ci0gICAgaGFuZGxlT2JqSW4gPSBoYW5kbGVyOwotICAgIGhhbmRs
ZXIgPSBoYW5kbGVPYmpJbi5oYW5kbGVyOwotICAgIHNlbGVjdG9yID0gaGFuZGxlT2JqSW4uc2Vs
ZWN0b3I7Ci0gICAgfQotCi0gICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGhhbmRsZXIgaGFzIGEg
dW5pcXVlIElELCB1c2VkIHRvIGZpbmQvcmVtb3ZlIGl0IGxhdGVyCi0gICAgaWYgKCAhaGFuZGxl
ci5ndWlkICkgewotICAgIGhhbmRsZXIuZ3VpZCA9IGpRdWVyeS5ndWlkKys7Ci0gICAgfQotCi0g
ICAgLy8gSW5pdCB0aGUgZWxlbWVudCdzIGV2ZW50IHN0cnVjdHVyZSBhbmQgbWFpbiBoYW5kbGVy
LCBpZiB0aGlzIGlzIHRoZSBmaXJzdAotICAgIGlmICggIShldmVudHMgPSBlbGVtRGF0YS5ldmVu
dHMpICkgewotICAgIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyA9IHt9OwotICAgIH0KLSAgICBp
ZiAoICEoZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUpICkgewotICAgIGV2ZW50SGFuZGxl
ID0gZWxlbURhdGEuaGFuZGxlID0gZnVuY3Rpb24oIGUgKSB7Ci0gICAgLy8gRGlzY2FyZCB0aGUg
c2Vjb25kIGV2ZW50IG9mIGEgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoKSBhbmQKLSAgICAvLyB3aGVu
IGFuIGV2ZW50IGlzIGNhbGxlZCBhZnRlciBhIHBhZ2UgaGFzIHVubG9hZGVkCi0gICAgcmV0dXJu
IHR5cGVvZiBqUXVlcnkgIT09IGNvcmVfc3RydW5kZWZpbmVkICYmICghZSB8fCBqUXVlcnkuZXZl
bnQudHJpZ2dlcmVkICE9PSBlLnR5cGUpID8KLSAgICBqUXVlcnkuZXZlbnQuZGlzcGF0Y2guYXBw
bHkoIGV2ZW50SGFuZGxlLmVsZW0sIGFyZ3VtZW50cyApIDoKLSAgICB1bmRlZmluZWQ7Ci0gICAg
fTsKLSAgICAvLyBBZGQgZWxlbSBhcyBhIHByb3BlcnR5IG9mIHRoZSBoYW5kbGUgZm4gdG8gcHJl
dmVudCBhIG1lbW9yeSBsZWFrIHdpdGggSUUgbm9uLW5hdGl2ZSBldmVudHMKLSAgICBldmVudEhh
bmRsZS5lbGVtID0gZWxlbTsKLSAgICB9Ci0KLSAgICAvLyBIYW5kbGUgbXVsdGlwbGUgZXZlbnRz
IHNlcGFyYXRlZCBieSBhIHNwYWNlCi0gICAgLy8galF1ZXJ5KC4uLikuYmluZCgibW91c2VvdmVy
IG1vdXNlb3V0IiwgZm4pOwotICAgIHR5cGVzID0gKCB0eXBlcyB8fCAiIiApLm1hdGNoKCBjb3Jl
X3Jub3R3aGl0ZSApIHx8IFsiIl07Ci0gICAgdCA9IHR5cGVzLmxlbmd0aDsKLSAgICB3aGlsZSAo
IHQtLSApIHsKLSAgICB0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1t0XSApIHx8IFtd
OwotICAgIHR5cGUgPSBvcmlnVHlwZSA9IHRtcFsxXTsKLSAgICBuYW1lc3BhY2VzID0gKCB0bXBb
Ml0gfHwgIiIgKS5zcGxpdCggIi4iICkuc29ydCgpOwotCi0gICAgLy8gSWYgZXZlbnQgY2hhbmdl
cyBpdHMgdHlwZSwgdXNlIHRoZSBzcGVjaWFsIGV2ZW50IGhhbmRsZXJzIGZvciB0aGUgY2hhbmdl
ZCB0eXBlCi0gICAgc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307
Ci0KLSAgICAvLyBJZiBzZWxlY3RvciBkZWZpbmVkLCBkZXRlcm1pbmUgc3BlY2lhbCBldmVudCBh
cGkgdHlwZSwgb3RoZXJ3aXNlIGdpdmVuIHR5cGUKLSAgICB0eXBlID0gKCBzZWxlY3RvciA/IHNw
ZWNpYWwuZGVsZWdhdGVUeXBlIDogc3BlY2lhbC5iaW5kVHlwZSApIHx8IHR5cGU7Ci0KLSAgICAv
LyBVcGRhdGUgc3BlY2lhbCBiYXNlZCBvbiBuZXdseSByZXNldCB0eXBlCi0gICAgc3BlY2lhbCA9
IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307Ci0KLSAgICAvLyBoYW5kbGVPYmog
aXMgcGFzc2VkIHRvIGFsbCBldmVudCBoYW5kbGVycwotICAgIGhhbmRsZU9iaiA9IGpRdWVyeS5l
eHRlbmQoewotICAgIHR5cGU6IHR5cGUsCi0gICAgb3JpZ1R5cGU6IG9yaWdUeXBlLAotICAgIGRh
dGE6IGRhdGEsCi0gICAgaGFuZGxlcjogaGFuZGxlciwKLSAgICBndWlkOiBoYW5kbGVyLmd1aWQs
Ci0gICAgc2VsZWN0b3I6IHNlbGVjdG9yLAotICAgIG5lZWRzQ29udGV4dDogc2VsZWN0b3IgJiYg
alF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICksCi0gICAgbmFt
ZXNwYWNlOiBuYW1lc3BhY2VzLmpvaW4oIi4iKQotICAgIH0sIGhhbmRsZU9iakluICk7Ci0KLSAg
ICAvLyBJbml0IHRoZSBldmVudCBoYW5kbGVyIHF1ZXVlIGlmIHdlJ3JlIHRoZSBmaXJzdAotICAg
IGlmICggIShoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdKSApIHsKLSAgICBoYW5kbGVycyA9IGV2
ZW50c1sgdHlwZSBdID0gW107Ci0gICAgaGFuZGxlcnMuZGVsZWdhdGVDb3VudCA9IDA7Ci0KLSAg
ICAvLyBPbmx5IHVzZSBhZGRFdmVudExpc3RlbmVyL2F0dGFjaEV2ZW50IGlmIHRoZSBzcGVjaWFs
IGV2ZW50cyBoYW5kbGVyIHJldHVybnMgZmFsc2UKLSAgICBpZiAoICFzcGVjaWFsLnNldHVwIHx8
IHNwZWNpYWwuc2V0dXAuY2FsbCggZWxlbSwgZGF0YSwgbmFtZXNwYWNlcywgZXZlbnRIYW5kbGUg
KSA9PT0gZmFsc2UgKSB7Ci0gICAgLy8gQmluZCB0aGUgZ2xvYmFsIGV2ZW50IGhhbmRsZXIgdG8g
dGhlIGVsZW1lbnQKLSAgICBpZiAoIGVsZW0uYWRkRXZlbnRMaXN0ZW5lciApIHsKLSAgICBlbGVt
LmFkZEV2ZW50TGlzdGVuZXIoIHR5cGUsIGV2ZW50SGFuZGxlLCBmYWxzZSApOwotCi0gICAgfSBl
bHNlIGlmICggZWxlbS5hdHRhY2hFdmVudCApIHsKLSAgICBlbGVtLmF0dGFjaEV2ZW50KCAib24i
ICsgdHlwZSwgZXZlbnRIYW5kbGUgKTsKLSAgICB9Ci0gICAgfQotICAgIH0KLQotICAgIGlmICgg
c3BlY2lhbC5hZGQgKSB7Ci0gICAgc3BlY2lhbC5hZGQuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7
Ci0KLSAgICBpZiAoICFoYW5kbGVPYmouaGFuZGxlci5ndWlkICkgewotICAgIGhhbmRsZU9iai5o
YW5kbGVyLmd1aWQgPSBoYW5kbGVyLmd1aWQ7Ci0gICAgfQotICAgIH0KLQotICAgIC8vIEFkZCB0
byB0aGUgZWxlbWVudCdzIGhhbmRsZXIgbGlzdCwgZGVsZWdhdGVzIGluIGZyb250Ci0gICAgaWYg
KCBzZWxlY3RvciApIHsKLSAgICBoYW5kbGVycy5zcGxpY2UoIGhhbmRsZXJzLmRlbGVnYXRlQ291
bnQrKywgMCwgaGFuZGxlT2JqICk7Ci0gICAgfSBlbHNlIHsKLSAgICBoYW5kbGVycy5wdXNoKCBo
YW5kbGVPYmogKTsKLSAgICB9Ci0KLSAgICAvLyBLZWVwIHRyYWNrIG9mIHdoaWNoIGV2ZW50cyBo
YXZlIGV2ZXIgYmVlbiB1c2VkLCBmb3IgZXZlbnQgb3B0aW1pemF0aW9uCi0gICAgalF1ZXJ5LmV2
ZW50Lmdsb2JhbFsgdHlwZSBdID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBOdWxsaWZ5IGVsZW0g
dG8gcHJldmVudCBtZW1vcnkgbGVha3MgaW4gSUUKLSAgICBlbGVtID0gbnVsbDsKLSAgICB9LAot
Ci0gICAgLy8gRGV0YWNoIGFuIGV2ZW50IG9yIHNldCBvZiBldmVudHMgZnJvbSBhbiBlbGVtZW50
Ci0gICAgcmVtb3ZlOiBmdW5jdGlvbiggZWxlbSwgdHlwZXMsIGhhbmRsZXIsIHNlbGVjdG9yLCBt
YXBwZWRUeXBlcyApIHsKLSAgICB2YXIgaiwgaGFuZGxlT2JqLCB0bXAsCi0gICAgb3JpZ0NvdW50
LCB0LCBldmVudHMsCi0gICAgc3BlY2lhbCwgaGFuZGxlcnMsIHR5cGUsCi0gICAgbmFtZXNwYWNl
cywgb3JpZ1R5cGUsCi0gICAgZWxlbURhdGEgPSBqUXVlcnkuaGFzRGF0YSggZWxlbSApICYmIGpR
dWVyeS5fZGF0YSggZWxlbSApOwotCi0gICAgaWYgKCAhZWxlbURhdGEgfHwgIShldmVudHMgPSBl
bGVtRGF0YS5ldmVudHMpICkgewotICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBPbmNlIGZv
ciBlYWNoIHR5cGUubmFtZXNwYWNlIGluIHR5cGVzOyB0eXBlIG1heSBiZSBvbWl0dGVkCi0gICAg
dHlwZXMgPSAoIHR5cGVzIHx8ICIiICkubWF0Y2goIGNvcmVfcm5vdHdoaXRlICkgfHwgWyIiXTsK
LSAgICB0ID0gdHlwZXMubGVuZ3RoOwotICAgIHdoaWxlICggdC0tICkgewotICAgIHRtcCA9IHJ0
eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzW3RdICkgfHwgW107Ci0gICAgdHlwZSA9IG9yaWdUeXBl
ID0gdG1wWzFdOwotICAgIG5hbWVzcGFjZXMgPSAoIHRtcFsyXSB8fCAiIiApLnNwbGl0KCAiLiIg
KS5zb3J0KCk7Ci0KLSAgICAvLyBVbmJpbmQgYWxsIGV2ZW50cyAob24gdGhpcyBuYW1lc3BhY2Us
IGlmIHByb3ZpZGVkKSBmb3IgdGhlIGVsZW1lbnQKLSAgICBpZiAoICF0eXBlICkgewotICAgIGZv
ciAoIHR5cGUgaW4gZXZlbnRzICkgewotICAgIGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5
cGUgKyB0eXBlc1sgdCBdLCBoYW5kbGVyLCBzZWxlY3RvciwgdHJ1ZSApOwotICAgIH0KLSAgICBj
b250aW51ZTsKLSAgICB9Ci0KLSAgICBzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5
cGUgXSB8fCB7fTsKLSAgICB0eXBlID0gKCBzZWxlY3RvciA/IHNwZWNpYWwuZGVsZWdhdGVUeXBl
IDogc3BlY2lhbC5iaW5kVHlwZSApIHx8IHR5cGU7Ci0gICAgaGFuZGxlcnMgPSBldmVudHNbIHR5
cGUgXSB8fCBbXTsKLSAgICB0bXAgPSB0bXBbMl0gJiYgbmV3IFJlZ0V4cCggIihefFxcLikiICsg
bmFtZXNwYWNlcy5qb2luKCJcXC4oPzouKlxcLnwpIikgKyAiKFxcLnwkKSIgKTsKLQotICAgIC8v
IFJlbW92ZSBtYXRjaGluZyBldmVudHMKLSAgICBvcmlnQ291bnQgPSBqID0gaGFuZGxlcnMubGVu
Z3RoOwotICAgIHdoaWxlICggai0tICkgewotICAgIGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBqIF07
Ci0KLSAgICBpZiAoICggbWFwcGVkVHlwZXMgfHwgb3JpZ1R5cGUgPT09IGhhbmRsZU9iai5vcmln
VHlwZSApICYmCi0gICAgKCAhaGFuZGxlciB8fCBoYW5kbGVyLmd1aWQgPT09IGhhbmRsZU9iai5n
dWlkICkgJiYKLSAgICAoICF0bXAgfHwgdG1wLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSAp
ICYmCi0gICAgKCAhc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09IGhhbmRsZU9iai5zZWxlY3RvciB8
fCBzZWxlY3RvciA9PT0gIioqIiAmJiBoYW5kbGVPYmouc2VsZWN0b3IgKSApIHsKLSAgICBoYW5k
bGVycy5zcGxpY2UoIGosIDEgKTsKLQotICAgIGlmICggaGFuZGxlT2JqLnNlbGVjdG9yICkgewot
ICAgIGhhbmRsZXJzLmRlbGVnYXRlQ291bnQtLTsKLSAgICB9Ci0gICAgaWYgKCBzcGVjaWFsLnJl
bW92ZSApIHsKLSAgICBzcGVjaWFsLnJlbW92ZS5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTsKLSAg
ICB9Ci0gICAgfQotICAgIH0KLQotICAgIC8vIFJlbW92ZSBnZW5lcmljIGV2ZW50IGhhbmRsZXIg
aWYgd2UgcmVtb3ZlZCBzb21ldGhpbmcgYW5kIG5vIG1vcmUgaGFuZGxlcnMgZXhpc3QKLSAgICAv
LyAoYXZvaWRzIHBvdGVudGlhbCBmb3IgZW5kbGVzcyByZWN1cnNpb24gZHVyaW5nIHJlbW92YWwg
b2Ygc3BlY2lhbCBldmVudCBoYW5kbGVycykKLSAgICBpZiAoIG9yaWdDb3VudCAmJiAhaGFuZGxl
cnMubGVuZ3RoICkgewotICAgIGlmICggIXNwZWNpYWwudGVhcmRvd24gfHwgc3BlY2lhbC50ZWFy
ZG93bi5jYWxsKCBlbGVtLCBuYW1lc3BhY2VzLCBlbGVtRGF0YS5oYW5kbGUgKSA9PT0gZmFsc2Ug
KSB7Ci0gICAgalF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBlbGVtRGF0YS5oYW5kbGUg
KTsKLSAgICB9Ci0KLSAgICBkZWxldGUgZXZlbnRzWyB0eXBlIF07Ci0gICAgfQotICAgIH0KLQot
ICAgIC8vIFJlbW92ZSB0aGUgZXhwYW5kbyBpZiBpdCdzIG5vIGxvbmdlciB1c2VkCi0gICAgaWYg
KCBqUXVlcnkuaXNFbXB0eU9iamVjdCggZXZlbnRzICkgKSB7Ci0gICAgZGVsZXRlIGVsZW1EYXRh
LmhhbmRsZTsKLQotICAgIC8vIHJlbW92ZURhdGEgYWxzbyBjaGVja3MgZm9yIGVtcHRpbmVzcyBh
bmQgY2xlYXJzIHRoZSBleHBhbmRvIGlmIGVtcHR5Ci0gICAgLy8gc28gdXNlIGl0IGluc3RlYWQg
b2YgZGVsZXRlCi0gICAgalF1ZXJ5Ll9yZW1vdmVEYXRhKCBlbGVtLCAiZXZlbnRzIiApOwotICAg
IH0KLSAgICB9LAotCi0gICAgdHJpZ2dlcjogZnVuY3Rpb24oIGV2ZW50LCBkYXRhLCBlbGVtLCBv
bmx5SGFuZGxlcnMgKSB7Ci0gICAgdmFyIGhhbmRsZSwgb250eXBlLCBjdXIsCi0gICAgYnViYmxl
VHlwZSwgc3BlY2lhbCwgdG1wLCBpLAotICAgIGV2ZW50UGF0aCA9IFsgZWxlbSB8fCBkb2N1bWVu
dCBdLAotICAgIHR5cGUgPSBjb3JlX2hhc093bi5jYWxsKCBldmVudCwgInR5cGUiICkgPyBldmVu
dC50eXBlIDogZXZlbnQsCi0gICAgbmFtZXNwYWNlcyA9IGNvcmVfaGFzT3duLmNhbGwoIGV2ZW50
LCAibmFtZXNwYWNlIiApID8gZXZlbnQubmFtZXNwYWNlLnNwbGl0KCIuIikgOiBbXTsKLQotICAg
IGN1ciA9IHRtcCA9IGVsZW0gPSBlbGVtIHx8IGRvY3VtZW50OwotCi0gICAgLy8gRG9uJ3QgZG8g
ZXZlbnRzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXMKLSAgICBpZiAoIGVsZW0ubm9kZVR5cGUg
PT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCApIHsKLSAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgLy8gZm9jdXMvYmx1ciBtb3JwaHMgdG8gZm9jdXNpbi9vdXQ7IGVuc3VyZSB3ZSdyZSBub3Qg
ZmlyaW5nIHRoZW0gcmlnaHQgbm93Ci0gICAgaWYgKCByZm9jdXNNb3JwaC50ZXN0KCB0eXBlICsg
alF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCApICkgewotICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZiAoIHR5cGUuaW5kZXhPZigiLiIpID49IDAgKSB7Ci0gICAgLy8gTmFtZXNwYWNlZCB0cmlnZ2Vy
OyBjcmVhdGUgYSByZWdleHAgdG8gbWF0Y2ggZXZlbnQgdHlwZSBpbiBoYW5kbGUoKQotICAgIG5h
bWVzcGFjZXMgPSB0eXBlLnNwbGl0KCIuIik7Ci0gICAgdHlwZSA9IG5hbWVzcGFjZXMuc2hpZnQo
KTsKLSAgICBuYW1lc3BhY2VzLnNvcnQoKTsKLSAgICB9Ci0gICAgb250eXBlID0gdHlwZS5pbmRl
eE9mKCI6IikgPCAwICYmICJvbiIgKyB0eXBlOwotCi0gICAgLy8gQ2FsbGVyIGNhbiBwYXNzIGlu
IGEgalF1ZXJ5LkV2ZW50IG9iamVjdCwgT2JqZWN0LCBvciBqdXN0IGFuIGV2ZW50IHR5cGUgc3Ry
aW5nCi0gICAgZXZlbnQgPSBldmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/Ci0gICAgZXZlbnQgOgot
ICAgIG5ldyBqUXVlcnkuRXZlbnQoIHR5cGUsIHR5cGVvZiBldmVudCA9PT0gIm9iamVjdCIgJiYg
ZXZlbnQgKTsKLQotICAgIGV2ZW50LmlzVHJpZ2dlciA9IHRydWU7Ci0gICAgZXZlbnQubmFtZXNw
YWNlID0gbmFtZXNwYWNlcy5qb2luKCIuIik7Ci0gICAgZXZlbnQubmFtZXNwYWNlX3JlID0gZXZl
bnQubmFtZXNwYWNlID8KLSAgICBuZXcgUmVnRXhwKCAiKF58XFwuKSIgKyBuYW1lc3BhY2VzLmpv
aW4oIlxcLig/Oi4qXFwufCkiKSArICIoXFwufCQpIiApIDoKLSAgICBudWxsOwotCi0gICAgLy8g
Q2xlYW4gdXAgdGhlIGV2ZW50IGluIGNhc2UgaXQgaXMgYmVpbmcgcmV1c2VkCi0gICAgZXZlbnQu
cmVzdWx0ID0gdW5kZWZpbmVkOwotICAgIGlmICggIWV2ZW50LnRhcmdldCApIHsKLSAgICBldmVu
dC50YXJnZXQgPSBlbGVtOwotICAgIH0KLQotICAgIC8vIENsb25lIGFueSBpbmNvbWluZyBkYXRh
IGFuZCBwcmVwZW5kIHRoZSBldmVudCwgY3JlYXRpbmcgdGhlIGhhbmRsZXIgYXJnIGxpc3QKLSAg
ICBkYXRhID0gZGF0YSA9PSBudWxsID8KLSAgICBbIGV2ZW50IF0gOgotICAgIGpRdWVyeS5tYWtl
QXJyYXkoIGRhdGEsIFsgZXZlbnQgXSApOwotCi0gICAgLy8gQWxsb3cgc3BlY2lhbCBldmVudHMg
dG8gZHJhdyBvdXRzaWRlIHRoZSBsaW5lcwotICAgIHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3Bl
Y2lhbFsgdHlwZSBdIHx8IHt9OwotICAgIGlmICggIW9ubHlIYW5kbGVycyAmJiBzcGVjaWFsLnRy
aWdnZXIgJiYgc3BlY2lhbC50cmlnZ2VyLmFwcGx5KCBlbGVtLCBkYXRhICkgPT09IGZhbHNlICkg
ewotICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBEZXRlcm1pbmUgZXZlbnQgcHJvcGFnYXRp
b24gcGF0aCBpbiBhZHZhbmNlLCBwZXIgVzNDIGV2ZW50cyBzcGVjICgjOTk1MSkKLSAgICAvLyBC
dWJibGUgdXAgdG8gZG9jdW1lbnQsIHRoZW4gdG8gd2luZG93OyB3YXRjaCBmb3IgYSBnbG9iYWwg
b3duZXJEb2N1bWVudCB2YXIgKCM5NzI0KQotICAgIGlmICggIW9ubHlIYW5kbGVycyAmJiAhc3Bl
Y2lhbC5ub0J1YmJsZSAmJiAhalF1ZXJ5LmlzV2luZG93KCBlbGVtICkgKSB7Ci0KLSAgICBidWJi
bGVUeXBlID0gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgfHwgdHlwZTsKLSAgICBpZiAoICFyZm9jdXNN
b3JwaC50ZXN0KCBidWJibGVUeXBlICsgdHlwZSApICkgewotICAgIGN1ciA9IGN1ci5wYXJlbnRO
b2RlOwotICAgIH0KLSAgICBmb3IgKCA7IGN1cjsgY3VyID0gY3VyLnBhcmVudE5vZGUgKSB7Ci0g
ICAgZXZlbnRQYXRoLnB1c2goIGN1ciApOwotICAgIHRtcCA9IGN1cjsKLSAgICB9Ci0KLSAgICAv
LyBPbmx5IGFkZCB3aW5kb3cgaWYgd2UgZ290IHRvIGRvY3VtZW50IChlLmcuLCBub3QgcGxhaW4g
b2JqIG9yIGRldGFjaGVkIERPTSkKLSAgICBpZiAoIHRtcCA9PT0gKGVsZW0ub3duZXJEb2N1bWVu
dCB8fCBkb2N1bWVudCkgKSB7Ci0gICAgZXZlbnRQYXRoLnB1c2goIHRtcC5kZWZhdWx0VmlldyB8
fCB0bXAucGFyZW50V2luZG93IHx8IHdpbmRvdyApOwotICAgIH0KLSAgICB9Ci0KLSAgICAvLyBG
aXJlIGhhbmRsZXJzIG9uIHRoZSBldmVudCBwYXRoCi0gICAgaSA9IDA7Ci0gICAgd2hpbGUgKCAo
Y3VyID0gZXZlbnRQYXRoW2krK10pICYmICFldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkg
ewotCi0gICAgZXZlbnQudHlwZSA9IGkgPiAxID8KLSAgICBidWJibGVUeXBlIDoKLSAgICBzcGVj
aWFsLmJpbmRUeXBlIHx8IHR5cGU7Ci0KLSAgICAvLyBqUXVlcnkgaGFuZGxlcgotICAgIGhhbmRs
ZSA9ICggalF1ZXJ5Ll9kYXRhKCBjdXIsICJldmVudHMiICkgfHwge30gKVsgZXZlbnQudHlwZSBd
ICYmIGpRdWVyeS5fZGF0YSggY3VyLCAiaGFuZGxlIiApOwotICAgIGlmICggaGFuZGxlICkgewot
ICAgIGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICk7Ci0gICAgfQotCi0gICAgLy8gTmF0aXZlIGhh
bmRsZXIKLSAgICBoYW5kbGUgPSBvbnR5cGUgJiYgY3VyWyBvbnR5cGUgXTsKLSAgICBpZiAoIGhh
bmRsZSAmJiBqUXVlcnkuYWNjZXB0RGF0YSggY3VyICkgJiYgaGFuZGxlLmFwcGx5ICYmIGhhbmRs
ZS5hcHBseSggY3VyLCBkYXRhICkgPT09IGZhbHNlICkgewotICAgIGV2ZW50LnByZXZlbnREZWZh
dWx0KCk7Ci0gICAgfQotICAgIH0KLSAgICBldmVudC50eXBlID0gdHlwZTsKLQotICAgIC8vIElm
IG5vYm9keSBwcmV2ZW50ZWQgdGhlIGRlZmF1bHQgYWN0aW9uLCBkbyBpdCBub3cKLSAgICBpZiAo
ICFvbmx5SGFuZGxlcnMgJiYgIWV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpICkgewotCi0gICAg
aWYgKCAoIXNwZWNpYWwuX2RlZmF1bHQgfHwgc3BlY2lhbC5fZGVmYXVsdC5hcHBseSggZWxlbS5v
d25lckRvY3VtZW50LCBkYXRhICkgPT09IGZhbHNlKSAmJgotICAgICEodHlwZSA9PT0gImNsaWNr
IiAmJiBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJhIiApKSAmJiBqUXVlcnkuYWNjZXB0RGF0YSgg
ZWxlbSApICkgewotCi0gICAgLy8gQ2FsbCBhIG5hdGl2ZSBET00gbWV0aG9kIG9uIHRoZSB0YXJn
ZXQgd2l0aCB0aGUgc2FtZSBuYW1lIG5hbWUgYXMgdGhlIGV2ZW50LgotICAgIC8vIENhbid0IHVz
ZSBhbiAuaXNGdW5jdGlvbigpIGNoZWNrIGhlcmUgYmVjYXVzZSBJRTYvNyBmYWlscyB0aGF0IHRl
c3QuCi0gICAgLy8gRG9uJ3QgZG8gZGVmYXVsdCBhY3Rpb25zIG9uIHdpbmRvdywgdGhhdCdzIHdo
ZXJlIGdsb2JhbCB2YXJpYWJsZXMgYmUgKCM2MTcwKQotICAgIGlmICggb250eXBlICYmIGVsZW1b
IHR5cGUgXSAmJiAhalF1ZXJ5LmlzV2luZG93KCBlbGVtICkgKSB7Ci0KLSAgICAvLyBEb24ndCBy
ZS10cmlnZ2VyIGFuIG9uRk9PIGV2ZW50IHdoZW4gd2UgY2FsbCBpdHMgRk9PKCkgbWV0aG9kCi0g
ICAgdG1wID0gZWxlbVsgb250eXBlIF07Ci0KLSAgICBpZiAoIHRtcCApIHsKLSAgICBlbGVtWyBv
bnR5cGUgXSA9IG51bGw7Ci0gICAgfQotCi0gICAgLy8gUHJldmVudCByZS10cmlnZ2VyaW5nIG9m
IHRoZSBzYW1lIGV2ZW50LCBzaW5jZSB3ZSBhbHJlYWR5IGJ1YmJsZWQgaXQgYWJvdmUKLSAgICBq
UXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdHlwZTsKLSAgICB0cnkgewotICAgIGVsZW1bIHR5cGUg
XSgpOwotICAgIH0gY2F0Y2ggKCBlICkgewotICAgIC8vIElFPDkgZGllcyBvbiBmb2N1cy9ibHVy
IHRvIGhpZGRlbiBlbGVtZW50ICgjMTQ4NiwjMTI1MTgpCi0gICAgLy8gb25seSByZXByb2R1Y2li
bGUgb24gd2luWFAgSUU4IG5hdGl2ZSwgbm90IElFOSBpbiBJRTggbW9kZQotICAgIH0KLSAgICBq
UXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdW5kZWZpbmVkOwotCi0gICAgaWYgKCB0bXAgKSB7Ci0g
ICAgZWxlbVsgb250eXBlIF0gPSB0bXA7Ci0gICAgfQotICAgIH0KLSAgICB9Ci0gICAgfQotCi0g
ICAgcmV0dXJuIGV2ZW50LnJlc3VsdDsKLSAgICB9LAotCi0gICAgZGlzcGF0Y2g6IGZ1bmN0aW9u
KCBldmVudCApIHsKLQotICAgIC8vIE1ha2UgYSB3cml0YWJsZSBqUXVlcnkuRXZlbnQgZnJvbSB0
aGUgbmF0aXZlIGV2ZW50IG9iamVjdAotICAgIGV2ZW50ID0galF1ZXJ5LmV2ZW50LmZpeCggZXZl
bnQgKTsKLQotICAgIHZhciBpLCByZXQsIGhhbmRsZU9iaiwgbWF0Y2hlZCwgaiwKLSAgICBoYW5k
bGVyUXVldWUgPSBbXSwKLSAgICBhcmdzID0gY29yZV9zbGljZS5jYWxsKCBhcmd1bWVudHMgKSwK
LSAgICBoYW5kbGVycyA9ICggalF1ZXJ5Ll9kYXRhKCB0aGlzLCAiZXZlbnRzIiApIHx8IHt9IClb
IGV2ZW50LnR5cGUgXSB8fCBbXSwKLSAgICBzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxb
IGV2ZW50LnR5cGUgXSB8fCB7fTsKLQotICAgIC8vIFVzZSB0aGUgZml4LWVkIGpRdWVyeS5FdmVu
dCByYXRoZXIgdGhhbiB0aGUgKHJlYWQtb25seSkgbmF0aXZlIGV2ZW50Ci0gICAgYXJnc1swXSA9
IGV2ZW50OwotICAgIGV2ZW50LmRlbGVnYXRlVGFyZ2V0ID0gdGhpczsKLQotICAgIC8vIENhbGwg
dGhlIHByZURpc3BhdGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZSwgYW5kIGxldCBpdCBiYWls
IGlmIGRlc2lyZWQKLSAgICBpZiAoIHNwZWNpYWwucHJlRGlzcGF0Y2ggJiYgc3BlY2lhbC5wcmVE
aXNwYXRjaC5jYWxsKCB0aGlzLCBldmVudCApID09PSBmYWxzZSApIHsKLSAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gRGV0ZXJtaW5lIGhhbmRsZXJzCi0gICAgaGFuZGxlclF1ZXVlID0galF1
ZXJ5LmV2ZW50LmhhbmRsZXJzLmNhbGwoIHRoaXMsIGV2ZW50LCBoYW5kbGVycyApOwotCi0gICAg
Ly8gUnVuIGRlbGVnYXRlcyBmaXJzdDsgdGhleSBtYXkgd2FudCB0byBzdG9wIHByb3BhZ2F0aW9u
IGJlbmVhdGggdXMKLSAgICBpID0gMDsKLSAgICB3aGlsZSAoIChtYXRjaGVkID0gaGFuZGxlclF1
ZXVlWyBpKysgXSkgJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7Ci0gICAgZXZl
bnQuY3VycmVudFRhcmdldCA9IG1hdGNoZWQuZWxlbTsKLQotICAgIGogPSAwOwotICAgIHdoaWxl
ICggKGhhbmRsZU9iaiA9IG1hdGNoZWQuaGFuZGxlcnNbIGorKyBdKSAmJiAhZXZlbnQuaXNJbW1l
ZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSApIHsKLQotICAgIC8vIFRyaWdnZXJlZCBldmVudCBt
dXN0IGVpdGhlciAxKSBoYXZlIG5vIG5hbWVzcGFjZSwgb3IKLSAgICAvLyAyKSBoYXZlIG5hbWVz
cGFjZShzKSBhIHN1YnNldCBvciBlcXVhbCB0byB0aG9zZSBpbiB0aGUgYm91bmQgZXZlbnQgKGJv
dGggY2FuIGhhdmUgbm8gbmFtZXNwYWNlKS4KLSAgICBpZiAoICFldmVudC5uYW1lc3BhY2VfcmUg
fHwgZXZlbnQubmFtZXNwYWNlX3JlLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSApIHsKLQot
ICAgIGV2ZW50LmhhbmRsZU9iaiA9IGhhbmRsZU9iajsKLSAgICBldmVudC5kYXRhID0gaGFuZGxl
T2JqLmRhdGE7Ci0KLSAgICByZXQgPSAoIChqUXVlcnkuZXZlbnQuc3BlY2lhbFsgaGFuZGxlT2Jq
Lm9yaWdUeXBlIF0gfHwge30pLmhhbmRsZSB8fCBoYW5kbGVPYmouaGFuZGxlciApCi0gICAgLmFw
cGx5KCBtYXRjaGVkLmVsZW0sIGFyZ3MgKTsKLQotICAgIGlmICggcmV0ICE9PSB1bmRlZmluZWQg
KSB7Ci0gICAgaWYgKCAoZXZlbnQucmVzdWx0ID0gcmV0KSA9PT0gZmFsc2UgKSB7Ci0gICAgZXZl
bnQucHJldmVudERlZmF1bHQoKTsKLSAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKLSAgICB9
Ci0gICAgfQotICAgIH0KLSAgICB9Ci0gICAgfQotCi0gICAgLy8gQ2FsbCB0aGUgcG9zdERpc3Bh
dGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZQotICAgIGlmICggc3BlY2lhbC5wb3N0RGlzcGF0
Y2ggKSB7Ci0gICAgc3BlY2lhbC5wb3N0RGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gZXZlbnQucmVzdWx0OwotICAgIH0sCi0KLSAgICBoYW5kbGVyczog
ZnVuY3Rpb24oIGV2ZW50LCBoYW5kbGVycyApIHsKLSAgICB2YXIgc2VsLCBoYW5kbGVPYmosIG1h
dGNoZXMsIGksCi0gICAgaGFuZGxlclF1ZXVlID0gW10sCi0gICAgZGVsZWdhdGVDb3VudCA9IGhh
bmRsZXJzLmRlbGVnYXRlQ291bnQsCi0gICAgY3VyID0gZXZlbnQudGFyZ2V0OwotCi0gICAgLy8g
RmluZCBkZWxlZ2F0ZSBoYW5kbGVycwotICAgIC8vIEJsYWNrLWhvbGUgU1ZHIDx1c2U+IGluc3Rh
bmNlIHRyZWVzICgjMTMxODApCi0gICAgLy8gQXZvaWQgbm9uLWxlZnQtY2xpY2sgYnViYmxpbmcg
aW4gRmlyZWZveCAoIzM4NjEpCi0gICAgaWYgKCBkZWxlZ2F0ZUNvdW50ICYmIGN1ci5ub2RlVHlw
ZSAmJiAoIWV2ZW50LmJ1dHRvbiB8fCBldmVudC50eXBlICE9PSAiY2xpY2siKSApIHsKLQotICAg
IGZvciAoIDsgY3VyICE9IHRoaXM7IGN1ciA9IGN1ci5wYXJlbnROb2RlIHx8IHRoaXMgKSB7Ci0K
LSAgICAvLyBEb24ndCBjaGVjayBub24tZWxlbWVudHMgKCMxMzIwOCkKLSAgICAvLyBEb24ndCBw
cm9jZXNzIGNsaWNrcyBvbiBkaXNhYmxlZCBlbGVtZW50cyAoIzY5MTEsICM4MTY1LCAjMTEzODIs
ICMxMTc2NCkKLSAgICBpZiAoIGN1ci5ub2RlVHlwZSA9PT0gMSAmJiAoY3VyLmRpc2FibGVkICE9
PSB0cnVlIHx8IGV2ZW50LnR5cGUgIT09ICJjbGljayIpICkgewotICAgIG1hdGNoZXMgPSBbXTsK
LSAgICBmb3IgKCBpID0gMDsgaSA8IGRlbGVnYXRlQ291bnQ7IGkrKyApIHsKLSAgICBoYW5kbGVP
YmogPSBoYW5kbGVyc1sgaSBdOwotCi0gICAgLy8gRG9uJ3QgY29uZmxpY3Qgd2l0aCBPYmplY3Qu
cHJvdG90eXBlIHByb3BlcnRpZXMgKCMxMzIwMykKLSAgICBzZWwgPSBoYW5kbGVPYmouc2VsZWN0
b3IgKyAiICI7Ci0KLSAgICBpZiAoIG1hdGNoZXNbIHNlbCBdID09PSB1bmRlZmluZWQgKSB7Ci0g
ICAgbWF0Y2hlc1sgc2VsIF0gPSBoYW5kbGVPYmoubmVlZHNDb250ZXh0ID8KLSAgICBqUXVlcnko
IHNlbCwgdGhpcyApLmluZGV4KCBjdXIgKSA+PSAwIDoKLSAgICBqUXVlcnkuZmluZCggc2VsLCB0
aGlzLCBudWxsLCBbIGN1ciBdICkubGVuZ3RoOwotICAgIH0KLSAgICBpZiAoIG1hdGNoZXNbIHNl
bCBdICkgewotICAgIG1hdGNoZXMucHVzaCggaGFuZGxlT2JqICk7Ci0gICAgfQotICAgIH0KLSAg
ICBpZiAoIG1hdGNoZXMubGVuZ3RoICkgewotICAgIGhhbmRsZXJRdWV1ZS5wdXNoKHsgZWxlbTog
Y3VyLCBoYW5kbGVyczogbWF0Y2hlcyB9KTsKLSAgICB9Ci0gICAgfQotICAgIH0KLSAgICB9Ci0K
LSAgICAvLyBBZGQgdGhlIHJlbWFpbmluZyAoZGlyZWN0bHktYm91bmQpIGhhbmRsZXJzCi0gICAg
aWYgKCBkZWxlZ2F0ZUNvdW50IDwgaGFuZGxlcnMubGVuZ3RoICkgewotICAgIGhhbmRsZXJRdWV1
ZS5wdXNoKHsgZWxlbTogdGhpcywgaGFuZGxlcnM6IGhhbmRsZXJzLnNsaWNlKCBkZWxlZ2F0ZUNv
dW50ICkgfSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGhhbmRsZXJRdWV1ZTsKLSAgICB9LAotCi0g
ICAgZml4OiBmdW5jdGlvbiggZXZlbnQgKSB7Ci0gICAgaWYgKCBldmVudFsgalF1ZXJ5LmV4cGFu
ZG8gXSApIHsKLSAgICByZXR1cm4gZXZlbnQ7Ci0gICAgfQotCi0gICAgLy8gQ3JlYXRlIGEgd3Jp
dGFibGUgY29weSBvZiB0aGUgZXZlbnQgb2JqZWN0IGFuZCBub3JtYWxpemUgc29tZSBwcm9wZXJ0
aWVzCi0gICAgdmFyIGksIHByb3AsIGNvcHksCi0gICAgdHlwZSA9IGV2ZW50LnR5cGUsCi0gICAg
b3JpZ2luYWxFdmVudCA9IGV2ZW50LAotICAgIGZpeEhvb2sgPSB0aGlzLmZpeEhvb2tzWyB0eXBl
IF07Ci0KLSAgICBpZiAoICFmaXhIb29rICkgewotICAgIHRoaXMuZml4SG9va3NbIHR5cGUgXSA9
IGZpeEhvb2sgPQotICAgIHJtb3VzZUV2ZW50LnRlc3QoIHR5cGUgKSA/IHRoaXMubW91c2VIb29r
cyA6Ci0gICAgcmtleUV2ZW50LnRlc3QoIHR5cGUgKSA/IHRoaXMua2V5SG9va3MgOgotICAgIHt9
OwotICAgIH0KLSAgICBjb3B5ID0gZml4SG9vay5wcm9wcyA/IHRoaXMucHJvcHMuY29uY2F0KCBm
aXhIb29rLnByb3BzICkgOiB0aGlzLnByb3BzOwotCi0gICAgZXZlbnQgPSBuZXcgalF1ZXJ5LkV2
ZW50KCBvcmlnaW5hbEV2ZW50ICk7Ci0KLSAgICBpID0gY29weS5sZW5ndGg7Ci0gICAgd2hpbGUg
KCBpLS0gKSB7Ci0gICAgcHJvcCA9IGNvcHlbIGkgXTsKLSAgICBldmVudFsgcHJvcCBdID0gb3Jp
Z2luYWxFdmVudFsgcHJvcCBdOwotICAgIH0KLQotICAgIC8vIFN1cHBvcnQ6IElFPDkKLSAgICAv
LyBGaXggdGFyZ2V0IHByb3BlcnR5ICgjMTkyNSkKLSAgICBpZiAoICFldmVudC50YXJnZXQgKSB7
Ci0gICAgZXZlbnQudGFyZ2V0ID0gb3JpZ2luYWxFdmVudC5zcmNFbGVtZW50IHx8IGRvY3VtZW50
OwotICAgIH0KLQotICAgIC8vIFN1cHBvcnQ6IENocm9tZSAyMyssIFNhZmFyaT8KLSAgICAvLyBU
YXJnZXQgc2hvdWxkIG5vdCBiZSBhIHRleHQgbm9kZSAoIzUwNCwgIzEzMTQzKQotICAgIGlmICgg
ZXZlbnQudGFyZ2V0Lm5vZGVUeXBlID09PSAzICkgewotICAgIGV2ZW50LnRhcmdldCA9IGV2ZW50
LnRhcmdldC5wYXJlbnROb2RlOwotICAgIH0KLQotICAgIC8vIFN1cHBvcnQ6IElFPDkKLSAgICAv
LyBGb3IgbW91c2Uva2V5IGV2ZW50cywgbWV0YUtleT09ZmFsc2UgaWYgaXQncyB1bmRlZmluZWQg
KCMzMzY4LCAjMTEzMjgpCi0gICAgZXZlbnQubWV0YUtleSA9ICEhZXZlbnQubWV0YUtleTsKLQot
ICAgIHJldHVybiBmaXhIb29rLmZpbHRlciA/IGZpeEhvb2suZmlsdGVyKCBldmVudCwgb3JpZ2lu
YWxFdmVudCApIDogZXZlbnQ7Ci0gICAgfSwKLQotICAgIC8vIEluY2x1ZGVzIHNvbWUgZXZlbnQg
cHJvcHMgc2hhcmVkIGJ5IEtleUV2ZW50IGFuZCBNb3VzZUV2ZW50Ci0gICAgcHJvcHM6ICJhbHRL
ZXkgYnViYmxlcyBjYW5jZWxhYmxlIGN0cmxLZXkgY3VycmVudFRhcmdldCBldmVudFBoYXNlIG1l
dGFLZXkgcmVsYXRlZFRhcmdldCBzaGlmdEtleSB0YXJnZXQgdGltZVN0YW1wIHZpZXcgd2hpY2gi
LnNwbGl0KCIgIiksCi0KLSAgICBmaXhIb29rczoge30sCi0KLSAgICBrZXlIb29rczogewotICAg
IHByb3BzOiAiY2hhciBjaGFyQ29kZSBrZXkga2V5Q29kZSIuc3BsaXQoIiAiKSwKLSAgICBmaWx0
ZXI6IGZ1bmN0aW9uKCBldmVudCwgb3JpZ2luYWwgKSB7Ci0KLSAgICAvLyBBZGQgd2hpY2ggZm9y
IGtleSBldmVudHMKLSAgICBpZiAoIGV2ZW50LndoaWNoID09IG51bGwgKSB7Ci0gICAgZXZlbnQu
d2hpY2ggPSBvcmlnaW5hbC5jaGFyQ29kZSAhPSBudWxsID8gb3JpZ2luYWwuY2hhckNvZGUgOiBv
cmlnaW5hbC5rZXlDb2RlOwotICAgIH0KLQotICAgIHJldHVybiBldmVudDsKLSAgICB9Ci0gICAg
fSwKLQotICAgIG1vdXNlSG9va3M6IHsKLSAgICBwcm9wczogImJ1dHRvbiBidXR0b25zIGNsaWVu
dFggY2xpZW50WSBmcm9tRWxlbWVudCBvZmZzZXRYIG9mZnNldFkgcGFnZVggcGFnZVkgc2NyZWVu
WCBzY3JlZW5ZIHRvRWxlbWVudCIuc3BsaXQoIiAiKSwKLSAgICBmaWx0ZXI6IGZ1bmN0aW9uKCBl
dmVudCwgb3JpZ2luYWwgKSB7Ci0gICAgdmFyIGJvZHksIGV2ZW50RG9jLCBkb2MsCi0gICAgYnV0
dG9uID0gb3JpZ2luYWwuYnV0dG9uLAotICAgIGZyb21FbGVtZW50ID0gb3JpZ2luYWwuZnJvbUVs
ZW1lbnQ7Ci0KLSAgICAvLyBDYWxjdWxhdGUgcGFnZVgvWSBpZiBtaXNzaW5nIGFuZCBjbGllbnRY
L1kgYXZhaWxhYmxlCi0gICAgaWYgKCBldmVudC5wYWdlWCA9PSBudWxsICYmIG9yaWdpbmFsLmNs
aWVudFggIT0gbnVsbCApIHsKLSAgICBldmVudERvYyA9IGV2ZW50LnRhcmdldC5vd25lckRvY3Vt
ZW50IHx8IGRvY3VtZW50OwotICAgIGRvYyA9IGV2ZW50RG9jLmRvY3VtZW50RWxlbWVudDsKLSAg
ICBib2R5ID0gZXZlbnREb2MuYm9keTsKLQotICAgIGV2ZW50LnBhZ2VYID0gb3JpZ2luYWwuY2xp
ZW50WCArICggZG9jICYmIGRvYy5zY3JvbGxMZWZ0IHx8IGJvZHkgJiYgYm9keS5zY3JvbGxMZWZ0
IHx8IDAgKSAtICggZG9jICYmIGRvYy5jbGllbnRMZWZ0IHx8IGJvZHkgJiYgYm9keS5jbGllbnRM
ZWZ0IHx8IDAgKTsKLSAgICBldmVudC5wYWdlWSA9IG9yaWdpbmFsLmNsaWVudFkgKyAoIGRvYyAm
JiBkb2Muc2Nyb2xsVG9wICB8fCBib2R5ICYmIGJvZHkuc2Nyb2xsVG9wICB8fCAwICkgLSAoIGRv
YyAmJiBkb2MuY2xpZW50VG9wICB8fCBib2R5ICYmIGJvZHkuY2xpZW50VG9wICB8fCAwICk7Ci0g
ICAgfQotCi0gICAgLy8gQWRkIHJlbGF0ZWRUYXJnZXQsIGlmIG5lY2Vzc2FyeQotICAgIGlmICgg
IWV2ZW50LnJlbGF0ZWRUYXJnZXQgJiYgZnJvbUVsZW1lbnQgKSB7Ci0gICAgZXZlbnQucmVsYXRl
ZFRhcmdldCA9IGZyb21FbGVtZW50ID09PSBldmVudC50YXJnZXQgPyBvcmlnaW5hbC50b0VsZW1l
bnQgOiBmcm9tRWxlbWVudDsKLSAgICB9Ci0KLSAgICAvLyBBZGQgd2hpY2ggZm9yIGNsaWNrOiAx
ID09PSBsZWZ0OyAyID09PSBtaWRkbGU7IDMgPT09IHJpZ2h0Ci0gICAgLy8gTm90ZTogYnV0dG9u
IGlzIG5vdCBub3JtYWxpemVkLCBzbyBkb24ndCB1c2UgaXQKLSAgICBpZiAoICFldmVudC53aGlj
aCAmJiBidXR0b24gIT09IHVuZGVmaW5lZCApIHsKLSAgICBldmVudC53aGljaCA9ICggYnV0dG9u
ICYgMSA/IDEgOiAoIGJ1dHRvbiAmIDIgPyAzIDogKCBidXR0b24gJiA0ID8gMiA6IDAgKSApICk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIGV2ZW50OwotICAgIH0KLSAgICB9LAotCi0gICAgc3BlY2lh
bDogewotICAgIGxvYWQ6IHsKLSAgICAvLyBQcmV2ZW50IHRyaWdnZXJlZCBpbWFnZS5sb2FkIGV2
ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIHdpbmRvdy5sb2FkCi0gICAgbm9CdWJibGU6IHRydWUKLSAg
ICB9LAotICAgIGNsaWNrOiB7Ci0gICAgLy8gRm9yIGNoZWNrYm94LCBmaXJlIG5hdGl2ZSBldmVu
dCBzbyBjaGVja2VkIHN0YXRlIHdpbGwgYmUgcmlnaHQKLSAgICB0cmlnZ2VyOiBmdW5jdGlvbigp
IHsKLSAgICBpZiAoIGpRdWVyeS5ub2RlTmFtZSggdGhpcywgImlucHV0IiApICYmIHRoaXMudHlw
ZSA9PT0gImNoZWNrYm94IiAmJiB0aGlzLmNsaWNrICkgewotICAgIHRoaXMuY2xpY2soKTsKLSAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIH0KLSAgICB9LAotICAgIGZvY3VzOiB7Ci0gICAg
Ly8gRmlyZSBuYXRpdmUgZXZlbnQgaWYgcG9zc2libGUgc28gYmx1ci9mb2N1cyBzZXF1ZW5jZSBp
cyBjb3JyZWN0Ci0gICAgdHJpZ2dlcjogZnVuY3Rpb24oKSB7Ci0gICAgaWYgKCB0aGlzICE9PSBk
b2N1bWVudC5hY3RpdmVFbGVtZW50ICYmIHRoaXMuZm9jdXMgKSB7Ci0gICAgdHJ5IHsKLSAgICB0
aGlzLmZvY3VzKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICAgIH0gY2F0Y2ggKCBlICkgewotICAg
IC8vIFN1cHBvcnQ6IElFPDkKLSAgICAvLyBJZiB3ZSBlcnJvciBvbiBmb2N1cyB0byBoaWRkZW4g
ZWxlbWVudCAoIzE0ODYsICMxMjUxOCksCi0gICAgLy8gbGV0IC50cmlnZ2VyKCkgcnVuIHRoZSBo
YW5kbGVycwotICAgIH0KLSAgICB9Ci0gICAgfSwKLSAgICBkZWxlZ2F0ZVR5cGU6ICJmb2N1c2lu
IgotICAgIH0sCi0gICAgYmx1cjogewotICAgIHRyaWdnZXI6IGZ1bmN0aW9uKCkgewotICAgIGlm
ICggdGhpcyA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiB0aGlzLmJsdXIgKSB7Ci0gICAg
dGhpcy5ibHVyKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICB9LAotICAgIGRlbGVn
YXRlVHlwZTogImZvY3Vzb3V0IgotICAgIH0sCi0KLSAgICBiZWZvcmV1bmxvYWQ6IHsKLSAgICBw
b3N0RGlzcGF0Y2g6IGZ1bmN0aW9uKCBldmVudCApIHsKLQotICAgIC8vIEV2ZW4gd2hlbiByZXR1
cm5WYWx1ZSBlcXVhbHMgdG8gdW5kZWZpbmVkIEZpcmVmb3ggd2lsbCBzdGlsbCBzaG93IGFsZXJ0
Ci0gICAgaWYgKCBldmVudC5yZXN1bHQgIT09IHVuZGVmaW5lZCApIHsKLSAgICBldmVudC5vcmln
aW5hbEV2ZW50LnJldHVyblZhbHVlID0gZXZlbnQucmVzdWx0OwotICAgIH0KLSAgICB9Ci0gICAg
fQotICAgIH0sCi0KLSAgICBzaW11bGF0ZTogZnVuY3Rpb24oIHR5cGUsIGVsZW0sIGV2ZW50LCBi
dWJibGUgKSB7Ci0gICAgLy8gUGlnZ3liYWNrIG9uIGEgZG9ub3IgZXZlbnQgdG8gc2ltdWxhdGUg
YSBkaWZmZXJlbnQgb25lLgotICAgIC8vIEZha2Ugb3JpZ2luYWxFdmVudCB0byBhdm9pZCBkb25v
cidzIHN0b3BQcm9wYWdhdGlvbiwgYnV0IGlmIHRoZQotICAgIC8vIHNpbXVsYXRlZCBldmVudCBw
cmV2ZW50cyBkZWZhdWx0IHRoZW4gd2UgZG8gdGhlIHNhbWUgb24gdGhlIGRvbm9yLgotICAgIHZh
ciBlID0galF1ZXJ5LmV4dGVuZCgKLSAgICBuZXcgalF1ZXJ5LkV2ZW50KCksCi0gICAgZXZlbnQs
Ci0gICAgeyB0eXBlOiB0eXBlLAotICAgIGlzU2ltdWxhdGVkOiB0cnVlLAotICAgIG9yaWdpbmFs
RXZlbnQ6IHt9Ci0gICAgfQotICAgICk7Ci0gICAgaWYgKCBidWJibGUgKSB7Ci0gICAgalF1ZXJ5
LmV2ZW50LnRyaWdnZXIoIGUsIG51bGwsIGVsZW0gKTsKLSAgICB9IGVsc2UgewotICAgIGpRdWVy
eS5ldmVudC5kaXNwYXRjaC5jYWxsKCBlbGVtLCBlICk7Ci0gICAgfQotICAgIGlmICggZS5pc0Rl
ZmF1bHRQcmV2ZW50ZWQoKSApIHsKLSAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwotICAgIH0K
LSAgICB9Ci19OwotCi1qUXVlcnkucmVtb3ZlRXZlbnQgPSBkb2N1bWVudC5yZW1vdmVFdmVudExp
c3RlbmVyID8KLSAgICBmdW5jdGlvbiggZWxlbSwgdHlwZSwgaGFuZGxlICkgewotICAgIGlmICgg
ZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyICkgewotICAgIGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5l
ciggdHlwZSwgaGFuZGxlLCBmYWxzZSApOwotICAgIH0KLSAgICB9IDoKLSAgICBmdW5jdGlvbigg
ZWxlbSwgdHlwZSwgaGFuZGxlICkgewotICAgIHZhciBuYW1lID0gIm9uIiArIHR5cGU7Ci0KLSAg
ICBpZiAoIGVsZW0uZGV0YWNoRXZlbnQgKSB7Ci0KLSAgICAvLyAjODU0NSwgIzcwNTQsIHByZXZl
bnRpbmcgbWVtb3J5IGxlYWtzIGZvciBjdXN0b20gZXZlbnRzIGluIElFNi04Ci0gICAgLy8gZGV0
YWNoRXZlbnQgbmVlZGVkIHByb3BlcnR5IG9uIGVsZW1lbnQsIGJ5IG5hbWUgb2YgdGhhdCBldmVu
dCwgdG8gcHJvcGVybHkgZXhwb3NlIGl0IHRvIEdDCi0gICAgaWYgKCB0eXBlb2YgZWxlbVsgbmFt
ZSBdID09PSBjb3JlX3N0cnVuZGVmaW5lZCApIHsKLSAgICBlbGVtWyBuYW1lIF0gPSBudWxsOwot
ICAgIH0KLQotICAgIGVsZW0uZGV0YWNoRXZlbnQoIG5hbWUsIGhhbmRsZSApOwotICAgIH0KLSAg
ICB9OwotCi1qUXVlcnkuRXZlbnQgPSBmdW5jdGlvbiggc3JjLCBwcm9wcyApIHsKLSAgICAvLyBB
bGxvdyBpbnN0YW50aWF0aW9uIHdpdGhvdXQgdGhlICduZXcnIGtleXdvcmQKLSAgICBpZiAoICEo
dGhpcyBpbnN0YW5jZW9mIGpRdWVyeS5FdmVudCkgKSB7Ci0gICAgcmV0dXJuIG5ldyBqUXVlcnku
RXZlbnQoIHNyYywgcHJvcHMgKTsKLSAgICB9Ci0KLSAgICAvLyBFdmVudCBvYmplY3QKLSAgICBp
ZiAoIHNyYyAmJiBzcmMudHlwZSApIHsKLSAgICB0aGlzLm9yaWdpbmFsRXZlbnQgPSBzcmM7Ci0g
ICAgdGhpcy50eXBlID0gc3JjLnR5cGU7Ci0KLSAgICAvLyBFdmVudHMgYnViYmxpbmcgdXAgdGhl
IGRvY3VtZW50IG1heSBoYXZlIGJlZW4gbWFya2VkIGFzIHByZXZlbnRlZAotICAgIC8vIGJ5IGEg
aGFuZGxlciBsb3dlciBkb3duIHRoZSB0cmVlOyByZWZsZWN0IHRoZSBjb3JyZWN0IHZhbHVlLgot
ICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gKCBzcmMuZGVmYXVsdFByZXZlbnRlZCB8fCBz
cmMucmV0dXJuVmFsdWUgPT09IGZhbHNlIHx8Ci0gICAgc3JjLmdldFByZXZlbnREZWZhdWx0ICYm
IHNyYy5nZXRQcmV2ZW50RGVmYXVsdCgpICkgPyByZXR1cm5UcnVlIDogcmV0dXJuRmFsc2U7Ci0K
LSAgICAvLyBFdmVudCB0eXBlCi0gICAgfSBlbHNlIHsKLSAgICB0aGlzLnR5cGUgPSBzcmM7Ci0g
ICAgfQotCi0gICAgLy8gUHV0IGV4cGxpY2l0bHkgcHJvdmlkZWQgcHJvcGVydGllcyBvbnRvIHRo
ZSBldmVudCBvYmplY3QKLSAgICBpZiAoIHByb3BzICkgewotICAgIGpRdWVyeS5leHRlbmQoIHRo
aXMsIHByb3BzICk7Ci0gICAgfQotCi0gICAgLy8gQ3JlYXRlIGEgdGltZXN0YW1wIGlmIGluY29t
aW5nIGV2ZW50IGRvZXNuJ3QgaGF2ZSBvbmUKLSAgICB0aGlzLnRpbWVTdGFtcCA9IHNyYyAmJiBz
cmMudGltZVN0YW1wIHx8IGpRdWVyeS5ub3coKTsKLQotICAgIC8vIE1hcmsgaXQgYXMgZml4ZWQK
LSAgICB0aGlzWyBqUXVlcnkuZXhwYW5kbyBdID0gdHJ1ZTsKLX07Ci0KLS8vIGpRdWVyeS5FdmVu
dCBpcyBiYXNlZCBvbiBET00zIEV2ZW50cyBhcyBzcGVjaWZpZWQgYnkgdGhlIEVDTUFTY3JpcHQg
TGFuZ3VhZ2UgQmluZGluZwotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2
ZWwtMy1FdmVudHMtMjAwMzAzMzEvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCi1qUXVlcnkuRXZl
bnQucHJvdG90eXBlID0gewotICAgIGlzRGVmYXVsdFByZXZlbnRlZDogcmV0dXJuRmFsc2UsCi0g
ICAgaXNQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLAotICAgIGlzSW1tZWRpYXRlUHJv
cGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSwKLQotICAgIHByZXZlbnREZWZhdWx0OiBmdW5j
dGlvbigpIHsKLSAgICB2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDsKLQotICAgIHRoaXMuaXNE
ZWZhdWx0UHJldmVudGVkID0gcmV0dXJuVHJ1ZTsKLSAgICBpZiAoICFlICkgewotICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICAvLyBJZiBwcmV2ZW50RGVmYXVsdCBleGlzdHMsIHJ1biBpdCBvbiB0
aGUgb3JpZ2luYWwgZXZlbnQKLSAgICBpZiAoIGUucHJldmVudERlZmF1bHQgKSB7Ci0gICAgZS5w
cmV2ZW50RGVmYXVsdCgpOwotCi0gICAgLy8gU3VwcG9ydDogSUUKLSAgICAvLyBPdGhlcndpc2Ug
c2V0IHRoZSByZXR1cm5WYWx1ZSBwcm9wZXJ0eSBvZiB0aGUgb3JpZ2luYWwgZXZlbnQgdG8gZmFs
c2UKLSAgICB9IGVsc2UgewotICAgIGUucmV0dXJuVmFsdWUgPSBmYWxzZTsKLSAgICB9Ci0gICAg
fSwKLSAgICBzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkgewotICAgIHZhciBlID0gdGhpcy5v
cmlnaW5hbEV2ZW50OwotCi0gICAgdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRy
dWU7Ci0gICAgaWYgKCAhZSApIHsKLSAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIElmIHN0b3BQ
cm9wYWdhdGlvbiBleGlzdHMsIHJ1biBpdCBvbiB0aGUgb3JpZ2luYWwgZXZlbnQKLSAgICBpZiAo
IGUuc3RvcFByb3BhZ2F0aW9uICkgewotICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7Ci0gICAgfQot
Ci0gICAgLy8gU3VwcG9ydDogSUUKLSAgICAvLyBTZXQgdGhlIGNhbmNlbEJ1YmJsZSBwcm9wZXJ0
eSBvZiB0aGUgb3JpZ2luYWwgZXZlbnQgdG8gdHJ1ZQotICAgIGUuY2FuY2VsQnViYmxlID0gdHJ1
ZTsKLSAgICB9LAotICAgIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7Ci0g
ICAgdGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7Ci0gICAg
dGhpcy5zdG9wUHJvcGFnYXRpb24oKTsKLSAgICB9Ci19OwotCi0vLyBDcmVhdGUgbW91c2VlbnRl
ci9sZWF2ZSBldmVudHMgdXNpbmcgbW91c2VvdmVyL291dCBhbmQgZXZlbnQtdGltZSBjaGVja3MK
LWpRdWVyeS5lYWNoKHsKLSAgICBtb3VzZWVudGVyOiAibW91c2VvdmVyIiwKLSAgICBtb3VzZWxl
YXZlOiAibW91c2VvdXQiCi19LCBmdW5jdGlvbiggb3JpZywgZml4ICkgewotICAgIGpRdWVyeS5l
dmVudC5zcGVjaWFsWyBvcmlnIF0gPSB7Ci0gICAgZGVsZWdhdGVUeXBlOiBmaXgsCi0gICAgYmlu
ZFR5cGU6IGZpeCwKLQotICAgIGhhbmRsZTogZnVuY3Rpb24oIGV2ZW50ICkgewotICAgIHZhciBy
ZXQsCi0gICAgdGFyZ2V0ID0gdGhpcywKLSAgICByZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdl
dCwKLSAgICBoYW5kbGVPYmogPSBldmVudC5oYW5kbGVPYmo7Ci0KLSAgICAvLyBGb3IgbW91c2Vu
dGVyL2xlYXZlIGNhbGwgdGhlIGhhbmRsZXIgaWYgcmVsYXRlZCBpcyBvdXRzaWRlIHRoZSB0YXJn
ZXQuCi0gICAgLy8gTkI6IE5vIHJlbGF0ZWRUYXJnZXQgaWYgdGhlIG1vdXNlIGxlZnQvZW50ZXJl
ZCB0aGUgYnJvd3NlciB3aW5kb3cKLSAgICBpZiAoICFyZWxhdGVkIHx8IChyZWxhdGVkICE9PSB0
YXJnZXQgJiYgIWpRdWVyeS5jb250YWlucyggdGFyZ2V0LCByZWxhdGVkICkpICkgewotICAgIGV2
ZW50LnR5cGUgPSBoYW5kbGVPYmoub3JpZ1R5cGU7Ci0gICAgcmV0ID0gaGFuZGxlT2JqLmhhbmRs
ZXIuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOwotICAgIGV2ZW50LnR5cGUgPSBmaXg7Ci0gICAg
fQotICAgIHJldHVybiByZXQ7Ci0gICAgfQotICAgIH07Ci19KTsKLQotLy8gSUUgc3VibWl0IGRl
bGVnYXRpb24KLWlmICggIWpRdWVyeS5zdXBwb3J0LnN1Ym1pdEJ1YmJsZXMgKSB7Ci0KLSAgICBq
UXVlcnkuZXZlbnQuc3BlY2lhbC5zdWJtaXQgPSB7Ci0gICAgc2V0dXA6IGZ1bmN0aW9uKCkgewot
ICAgIC8vIE9ubHkgbmVlZCB0aGlzIGZvciBkZWxlZ2F0ZWQgZm9ybSBzdWJtaXQgZXZlbnRzCi0g
ICAgaWYgKCBqUXVlcnkubm9kZU5hbWUoIHRoaXMsICJmb3JtIiApICkgewotICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICAvLyBMYXp5LWFkZCBhIHN1Ym1pdCBoYW5kbGVyIHdoZW4gYSBk
ZXNjZW5kYW50IGZvcm0gbWF5IHBvdGVudGlhbGx5IGJlIHN1Ym1pdHRlZAotICAgIGpRdWVyeS5l
dmVudC5hZGQoIHRoaXMsICJjbGljay5fc3VibWl0IGtleXByZXNzLl9zdWJtaXQiLCBmdW5jdGlv
biggZSApIHsKLSAgICAvLyBOb2RlIG5hbWUgY2hlY2sgYXZvaWRzIGEgVk1MLXJlbGF0ZWQgY3Jh
c2ggaW4gSUUgKCM5ODA3KQotICAgIHZhciBlbGVtID0gZS50YXJnZXQsCi0gICAgZm9ybSA9IGpR
dWVyeS5ub2RlTmFtZSggZWxlbSwgImlucHV0IiApIHx8IGpRdWVyeS5ub2RlTmFtZSggZWxlbSwg
ImJ1dHRvbiIgKSA/IGVsZW0uZm9ybSA6IHVuZGVmaW5lZDsKLSAgICBpZiAoIGZvcm0gJiYgIWpR
dWVyeS5fZGF0YSggZm9ybSwgInN1Ym1pdEJ1YmJsZXMiICkgKSB7Ci0gICAgalF1ZXJ5LmV2ZW50
LmFkZCggZm9ybSwgInN1Ym1pdC5fc3VibWl0IiwgZnVuY3Rpb24oIGV2ZW50ICkgewotICAgIGV2
ZW50Ll9zdWJtaXRfYnViYmxlID0gdHJ1ZTsKLSAgICB9KTsKLSAgICBqUXVlcnkuX2RhdGEoIGZv
cm0sICJzdWJtaXRCdWJibGVzIiwgdHJ1ZSApOwotICAgIH0KLSAgICB9KTsKLSAgICAvLyByZXR1
cm4gdW5kZWZpbmVkIHNpbmNlIHdlIGRvbid0IG5lZWQgYW4gZXZlbnQgbGlzdGVuZXIKLSAgICB9
LAotCi0gICAgcG9zdERpc3BhdGNoOiBmdW5jdGlvbiggZXZlbnQgKSB7Ci0gICAgLy8gSWYgZm9y
bSB3YXMgc3VibWl0dGVkIGJ5IHRoZSB1c2VyLCBidWJibGUgdGhlIGV2ZW50IHVwIHRoZSB0cmVl
Ci0gICAgaWYgKCBldmVudC5fc3VibWl0X2J1YmJsZSApIHsKLSAgICBkZWxldGUgZXZlbnQuX3N1
Ym1pdF9idWJibGU7Ci0gICAgaWYgKCB0aGlzLnBhcmVudE5vZGUgJiYgIWV2ZW50LmlzVHJpZ2dl
ciApIHsKLSAgICBqUXVlcnkuZXZlbnQuc2ltdWxhdGUoICJzdWJtaXQiLCB0aGlzLnBhcmVudE5v
ZGUsIGV2ZW50LCB0cnVlICk7Ci0gICAgfQotICAgIH0KLSAgICB9LAotCi0gICAgdGVhcmRvd246
IGZ1bmN0aW9uKCkgewotICAgIC8vIE9ubHkgbmVlZCB0aGlzIGZvciBkZWxlZ2F0ZWQgZm9ybSBz
dWJtaXQgZXZlbnRzCi0gICAgaWYgKCBqUXVlcnkubm9kZU5hbWUoIHRoaXMsICJmb3JtIiApICkg
ewotICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBSZW1vdmUgZGVsZWdhdGVkIGhh
bmRsZXJzOyBjbGVhbkRhdGEgZXZlbnR1YWxseSByZWFwcyBzdWJtaXQgaGFuZGxlcnMgYXR0YWNo
ZWQgYWJvdmUKLSAgICBqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCAiLl9zdWJtaXQiICk7Ci0g
ICAgfQotICAgIH07Ci19Ci0KLS8vIElFIGNoYW5nZSBkZWxlZ2F0aW9uIGFuZCBjaGVja2JveC9y
YWRpbyBmaXgKLWlmICggIWpRdWVyeS5zdXBwb3J0LmNoYW5nZUJ1YmJsZXMgKSB7Ci0KLSAgICBq
UXVlcnkuZXZlbnQuc3BlY2lhbC5jaGFuZ2UgPSB7Ci0KLSAgICBzZXR1cDogZnVuY3Rpb24oKSB7
Ci0KLSAgICBpZiAoIHJmb3JtRWxlbXMudGVzdCggdGhpcy5ub2RlTmFtZSApICkgewotICAgIC8v
IElFIGRvZXNuJ3QgZmlyZSBjaGFuZ2Ugb24gYSBjaGVjay9yYWRpbyB1bnRpbCBibHVyOyB0cmln
Z2VyIGl0IG9uIGNsaWNrCi0gICAgLy8gYWZ0ZXIgYSBwcm9wZXJ0eWNoYW5nZS4gRWF0IHRoZSBi
bHVyLWNoYW5nZSBpbiBzcGVjaWFsLmNoYW5nZS5oYW5kbGUuCi0gICAgLy8gVGhpcyBzdGlsbCBm
aXJlcyBvbmNoYW5nZSBhIHNlY29uZCB0aW1lIGZvciBjaGVjay9yYWRpbyBhZnRlciBibHVyLgot
ICAgIGlmICggdGhpcy50eXBlID09PSAiY2hlY2tib3giIHx8IHRoaXMudHlwZSA9PT0gInJhZGlv
IiApIHsKLSAgICBqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCAicHJvcGVydHljaGFuZ2UuX2NoYW5n
ZSIsIGZ1bmN0aW9uKCBldmVudCApIHsKLSAgICBpZiAoIGV2ZW50Lm9yaWdpbmFsRXZlbnQucHJv
cGVydHlOYW1lID09PSAiY2hlY2tlZCIgKSB7Ci0gICAgdGhpcy5fanVzdF9jaGFuZ2VkID0gdHJ1
ZTsKLSAgICB9Ci0gICAgfSk7Ci0gICAgalF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgImNsaWNrLl9j
aGFuZ2UiLCBmdW5jdGlvbiggZXZlbnQgKSB7Ci0gICAgaWYgKCB0aGlzLl9qdXN0X2NoYW5nZWQg
JiYgIWV2ZW50LmlzVHJpZ2dlciApIHsKLSAgICB0aGlzLl9qdXN0X2NoYW5nZWQgPSBmYWxzZTsK
LSAgICB9Ci0gICAgLy8gQWxsb3cgdHJpZ2dlcmVkLCBzaW11bGF0ZWQgY2hhbmdlIGV2ZW50cyAo
IzExNTAwKQotICAgIGpRdWVyeS5ldmVudC5zaW11bGF0ZSggImNoYW5nZSIsIHRoaXMsIGV2ZW50
LCB0cnVlICk7Ci0gICAgfSk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAg
Ly8gRGVsZWdhdGVkIGV2ZW50OyBsYXp5LWFkZCBhIGNoYW5nZSBoYW5kbGVyIG9uIGRlc2NlbmRh
bnQgaW5wdXRzCi0gICAgalF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgImJlZm9yZWFjdGl2YXRlLl9j
aGFuZ2UiLCBmdW5jdGlvbiggZSApIHsKLSAgICB2YXIgZWxlbSA9IGUudGFyZ2V0OwotCi0gICAg
aWYgKCByZm9ybUVsZW1zLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSAmJiAhalF1ZXJ5Ll9kYXRhKCBl
bGVtLCAiY2hhbmdlQnViYmxlcyIgKSApIHsKLSAgICBqUXVlcnkuZXZlbnQuYWRkKCBlbGVtLCAi
Y2hhbmdlLl9jaGFuZ2UiLCBmdW5jdGlvbiggZXZlbnQgKSB7Ci0gICAgaWYgKCB0aGlzLnBhcmVu
dE5vZGUgJiYgIWV2ZW50LmlzU2ltdWxhdGVkICYmICFldmVudC5pc1RyaWdnZXIgKSB7Ci0gICAg
alF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCAiY2hhbmdlIiwgdGhpcy5wYXJlbnROb2RlLCBldmVudCwg
dHJ1ZSApOwotICAgIH0KLSAgICB9KTsKLSAgICBqUXVlcnkuX2RhdGEoIGVsZW0sICJjaGFuZ2VC
dWJibGVzIiwgdHJ1ZSApOwotICAgIH0KLSAgICB9KTsKLSAgICB9LAotCi0gICAgaGFuZGxlOiBm
dW5jdGlvbiggZXZlbnQgKSB7Ci0gICAgdmFyIGVsZW0gPSBldmVudC50YXJnZXQ7Ci0KLSAgICAv
LyBTd2FsbG93IG5hdGl2ZSBjaGFuZ2UgZXZlbnRzIGZyb20gY2hlY2tib3gvcmFkaW8sIHdlIGFs
cmVhZHkgdHJpZ2dlcmVkIHRoZW0gYWJvdmUKLSAgICBpZiAoIHRoaXMgIT09IGVsZW0gfHwgZXZl
bnQuaXNTaW11bGF0ZWQgfHwgZXZlbnQuaXNUcmlnZ2VyIHx8IChlbGVtLnR5cGUgIT09ICJyYWRp
byIgJiYgZWxlbS50eXBlICE9PSAiY2hlY2tib3giKSApIHsKLSAgICByZXR1cm4gZXZlbnQuaGFu
ZGxlT2JqLmhhbmRsZXIuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOwotICAgIH0KLSAgICB9LAot
Ci0gICAgdGVhcmRvd246IGZ1bmN0aW9uKCkgewotICAgIGpRdWVyeS5ldmVudC5yZW1vdmUoIHRo
aXMsICIuX2NoYW5nZSIgKTsKLQotICAgIHJldHVybiAhcmZvcm1FbGVtcy50ZXN0KCB0aGlzLm5v
ZGVOYW1lICk7Ci0gICAgfQotICAgIH07Ci19Ci0KLS8vIENyZWF0ZSAiYnViYmxpbmciIGZvY3Vz
IGFuZCBibHVyIGV2ZW50cwotaWYgKCAhalF1ZXJ5LnN1cHBvcnQuZm9jdXNpbkJ1YmJsZXMgKSB7
Ci0gICAgalF1ZXJ5LmVhY2goeyBmb2N1czogImZvY3VzaW4iLCBibHVyOiAiZm9jdXNvdXQiIH0s
IGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7Ci0KLSAgICAvLyBBdHRhY2ggYSBzaW5nbGUgY2FwdHVy
aW5nIGhhbmRsZXIgd2hpbGUgc29tZW9uZSB3YW50cyBmb2N1c2luL2ZvY3Vzb3V0Ci0gICAgdmFy
IGF0dGFjaGVzID0gMCwKLSAgICBoYW5kbGVyID0gZnVuY3Rpb24oIGV2ZW50ICkgewotICAgIGpR
dWVyeS5ldmVudC5zaW11bGF0ZSggZml4LCBldmVudC50YXJnZXQsIGpRdWVyeS5ldmVudC5maXgo
IGV2ZW50ICksIHRydWUgKTsKLSAgICB9OwotCi0gICAgalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGZp
eCBdID0gewotICAgIHNldHVwOiBmdW5jdGlvbigpIHsKLSAgICBpZiAoIGF0dGFjaGVzKysgPT09
IDAgKSB7Ci0gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggb3JpZywgaGFuZGxlciwgdHJ1
ZSApOwotICAgIH0KLSAgICB9LAotICAgIHRlYXJkb3duOiBmdW5jdGlvbigpIHsKLSAgICBpZiAo
IC0tYXR0YWNoZXMgPT09IDAgKSB7Ci0gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigg
b3JpZywgaGFuZGxlciwgdHJ1ZSApOwotICAgIH0KLSAgICB9Ci0gICAgfTsKLSAgICB9KTsKLX0K
LQotalF1ZXJ5LmZuLmV4dGVuZCh7Ci0KLSAgICBvbjogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3Rv
ciwgZGF0YSwgZm4sIC8qSU5URVJOQUwqLyBvbmUgKSB7Ci0gICAgdmFyIHR5cGUsIG9yaWdGbjsK
LQotICAgIC8vIFR5cGVzIGNhbiBiZSBhIG1hcCBvZiB0eXBlcy9oYW5kbGVycwotICAgIGlmICgg
dHlwZW9mIHR5cGVzID09PSAib2JqZWN0IiApIHsKLSAgICAvLyAoIHR5cGVzLU9iamVjdCwgc2Vs
ZWN0b3IsIGRhdGEgKQotICAgIGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSAic3RyaW5nIiApIHsK
LSAgICAvLyAoIHR5cGVzLU9iamVjdCwgZGF0YSApCi0gICAgZGF0YSA9IGRhdGEgfHwgc2VsZWN0
b3I7Ci0gICAgc2VsZWN0b3IgPSB1bmRlZmluZWQ7Ci0gICAgfQotICAgIGZvciAoIHR5cGUgaW4g
dHlwZXMgKSB7Ci0gICAgdGhpcy5vbiggdHlwZSwgc2VsZWN0b3IsIGRhdGEsIHR5cGVzWyB0eXBl
IF0sIG9uZSApOwotICAgIH0KLSAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0KLSAgICBpZiAoIGRh
dGEgPT0gbnVsbCAmJiBmbiA9PSBudWxsICkgewotICAgIC8vICggdHlwZXMsIGZuICkKLSAgICBm
biA9IHNlbGVjdG9yOwotICAgIGRhdGEgPSBzZWxlY3RvciA9IHVuZGVmaW5lZDsKLSAgICB9IGVs
c2UgaWYgKCBmbiA9PSBudWxsICkgewotICAgIGlmICggdHlwZW9mIHNlbGVjdG9yID09PSAic3Ry
aW5nIiApIHsKLSAgICAvLyAoIHR5cGVzLCBzZWxlY3RvciwgZm4gKQotICAgIGZuID0gZGF0YTsK
LSAgICBkYXRhID0gdW5kZWZpbmVkOwotICAgIH0gZWxzZSB7Ci0gICAgLy8gKCB0eXBlcywgZGF0
YSwgZm4gKQotICAgIGZuID0gZGF0YTsKLSAgICBkYXRhID0gc2VsZWN0b3I7Ci0gICAgc2VsZWN0
b3IgPSB1bmRlZmluZWQ7Ci0gICAgfQotICAgIH0KLSAgICBpZiAoIGZuID09PSBmYWxzZSApIHsK
LSAgICBmbiA9IHJldHVybkZhbHNlOwotICAgIH0gZWxzZSBpZiAoICFmbiApIHsKLSAgICByZXR1
cm4gdGhpczsKLSAgICB9Ci0KLSAgICBpZiAoIG9uZSA9PT0gMSApIHsKLSAgICBvcmlnRm4gPSBm
bjsKLSAgICBmbiA9IGZ1bmN0aW9uKCBldmVudCApIHsKLSAgICAvLyBDYW4gdXNlIGFuIGVtcHR5
IHNldCwgc2luY2UgZXZlbnQgY29udGFpbnMgdGhlIGluZm8KLSAgICBqUXVlcnkoKS5vZmYoIGV2
ZW50ICk7Ci0gICAgcmV0dXJuIG9yaWdGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7Ci0gICAg
fTsKLSAgICAvLyBVc2Ugc2FtZSBndWlkIHNvIGNhbGxlciBjYW4gcmVtb3ZlIHVzaW5nIG9yaWdG
bgotICAgIGZuLmd1aWQgPSBvcmlnRm4uZ3VpZCB8fCAoIG9yaWdGbi5ndWlkID0galF1ZXJ5Lmd1
aWQrKyApOwotICAgIH0KLSAgICByZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHsKLSAgICBq
UXVlcnkuZXZlbnQuYWRkKCB0aGlzLCB0eXBlcywgZm4sIGRhdGEsIHNlbGVjdG9yICk7Ci0gICAg
fSk7Ci0gICAgfSwKLSAgICBvbmU6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZu
ICkgewotICAgIHJldHVybiB0aGlzLm9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuLCAxICk7
Ci0gICAgfSwKLSAgICBvZmY6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGZuICkgewotICAg
IHZhciBoYW5kbGVPYmosIHR5cGU7Ci0gICAgaWYgKCB0eXBlcyAmJiB0eXBlcy5wcmV2ZW50RGVm
YXVsdCAmJiB0eXBlcy5oYW5kbGVPYmogKSB7Ci0gICAgLy8gKCBldmVudCApICBkaXNwYXRjaGVk
IGpRdWVyeS5FdmVudAotICAgIGhhbmRsZU9iaiA9IHR5cGVzLmhhbmRsZU9iajsKLSAgICBqUXVl
cnkoIHR5cGVzLmRlbGVnYXRlVGFyZ2V0ICkub2ZmKAotICAgIGhhbmRsZU9iai5uYW1lc3BhY2Ug
PyBoYW5kbGVPYmoub3JpZ1R5cGUgKyAiLiIgKyBoYW5kbGVPYmoubmFtZXNwYWNlIDogaGFuZGxl
T2JqLm9yaWdUeXBlLAotICAgIGhhbmRsZU9iai5zZWxlY3RvciwKLSAgICBoYW5kbGVPYmouaGFu
ZGxlcgotICAgICk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotICAgIGlmICggdHlwZW9mIHR5
cGVzID09PSAib2JqZWN0IiApIHsKLSAgICAvLyAoIHR5cGVzLW9iamVjdCBbLCBzZWxlY3Rvcl0g
KQotICAgIGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7Ci0gICAgdGhpcy5vZmYoIHR5cGUsIHNlbGVj
dG9yLCB0eXBlc1sgdHlwZSBdICk7Ci0gICAgfQotICAgIHJldHVybiB0aGlzOwotICAgIH0KLSAg
ICBpZiAoIHNlbGVjdG9yID09PSBmYWxzZSB8fCB0eXBlb2Ygc2VsZWN0b3IgPT09ICJmdW5jdGlv
biIgKSB7Ci0gICAgLy8gKCB0eXBlcyBbLCBmbl0gKQotICAgIGZuID0gc2VsZWN0b3I7Ci0gICAg
c2VsZWN0b3IgPSB1bmRlZmluZWQ7Ci0gICAgfQotICAgIGlmICggZm4gPT09IGZhbHNlICkgewot
ICAgIGZuID0gcmV0dXJuRmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rp
b24oKSB7Ci0gICAgalF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywgdHlwZXMsIGZuLCBzZWxlY3Rv
ciApOwotICAgIH0pOwotICAgIH0sCi0KLSAgICBiaW5kOiBmdW5jdGlvbiggdHlwZXMsIGRhdGEs
IGZuICkgewotICAgIHJldHVybiB0aGlzLm9uKCB0eXBlcywgbnVsbCwgZGF0YSwgZm4gKTsKLSAg
ICB9LAotICAgIHVuYmluZDogZnVuY3Rpb24oIHR5cGVzLCBmbiApIHsKLSAgICByZXR1cm4gdGhp
cy5vZmYoIHR5cGVzLCBudWxsLCBmbiApOwotICAgIH0sCi0KLSAgICBkZWxlZ2F0ZTogZnVuY3Rp
b24oIHNlbGVjdG9yLCB0eXBlcywgZGF0YSwgZm4gKSB7Ci0gICAgcmV0dXJuIHRoaXMub24oIHR5
cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKTsKLSAgICB9LAotICAgIHVuZGVsZWdhdGU6IGZ1bmN0
aW9uKCBzZWxlY3RvciwgdHlwZXMsIGZuICkgewotICAgIC8vICggbmFtZXNwYWNlICkgb3IgKCBz
ZWxlY3RvciwgdHlwZXMgWywgZm5dICkKLSAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0g
MSA/IHRoaXMub2ZmKCBzZWxlY3RvciwgIioqIiApIDogdGhpcy5vZmYoIHR5cGVzLCBzZWxlY3Rv
ciB8fCAiKioiLCBmbiApOwotICAgIH0sCi0KLSAgICB0cmlnZ2VyOiBmdW5jdGlvbiggdHlwZSwg
ZGF0YSApIHsKLSAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewotICAgIGpRdWVyeS5l
dmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCB0aGlzICk7Ci0gICAgfSk7Ci0gICAgfSwKLSAgICB0
cmlnZ2VySGFuZGxlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7Ci0gICAgdmFyIGVsZW0gPSB0
aGlzWzBdOwotICAgIGlmICggZWxlbSApIHsKLSAgICByZXR1cm4galF1ZXJ5LmV2ZW50LnRyaWdn
ZXIoIHR5cGUsIGRhdGEsIGVsZW0sIHRydWUgKTsKLSAgICB9Ci0gICAgfQotfSk7Ci0vKiEKLSAq
IFNpenpsZSBDU1MgU2VsZWN0b3IgRW5naW5lCi0gKiBDb3B5cmlnaHQgMjAxMiBqUXVlcnkgRm91
bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzCi0gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlU
IGxpY2Vuc2UKLSAqIGh0dHA6Ly9zaXp6bGVqcy5jb20vCi0gKi8KLShmdW5jdGlvbiggd2luZG93
LCB1bmRlZmluZWQgKSB7Ci0KLXZhciBpLAotICAgIGNhY2hlZHJ1bnMsCi0gICAgRXhwciwKLSAg
ICBnZXRUZXh0LAotICAgIGlzWE1MLAotICAgIGNvbXBpbGUsCi0gICAgaGFzRHVwbGljYXRlLAot
ICAgIG91dGVybW9zdENvbnRleHQsCi0KLSAgICAvLyBMb2NhbCBkb2N1bWVudCB2YXJzCi0gICAg
c2V0RG9jdW1lbnQsCi0gICAgZG9jdW1lbnQsCi0gICAgZG9jRWxlbSwKLSAgICBkb2N1bWVudElz
WE1MLAotICAgIHJidWdneVFTQSwKLSAgICByYnVnZ3lNYXRjaGVzLAotICAgIG1hdGNoZXMsCi0g
ICAgY29udGFpbnMsCi0gICAgc29ydE9yZGVyLAotCi0gICAgLy8gSW5zdGFuY2Utc3BlY2lmaWMg
ZGF0YQotICAgIGV4cGFuZG8gPSAic2l6emxlIiArIC0obmV3IERhdGUoKSksCi0gICAgcHJlZmVy
cmVkRG9jID0gd2luZG93LmRvY3VtZW50LAotICAgIHN1cHBvcnQgPSB7fSwKLSAgICBkaXJydW5z
ID0gMCwKLSAgICBkb25lID0gMCwKLSAgICBjbGFzc0NhY2hlID0gY3JlYXRlQ2FjaGUoKSwKLSAg
ICB0b2tlbkNhY2hlID0gY3JlYXRlQ2FjaGUoKSwKLSAgICBjb21waWxlckNhY2hlID0gY3JlYXRl
Q2FjaGUoKSwKLQotICAgIC8vIEdlbmVyYWwtcHVycG9zZSBjb25zdGFudHMKLSAgICBzdHJ1bmRl
ZmluZWQgPSB0eXBlb2YgdW5kZWZpbmVkLAotICAgIE1BWF9ORUdBVElWRSA9IDEgPDwgMzEsCi0K
LSAgICAvLyBBcnJheSBtZXRob2RzCi0gICAgYXJyID0gW10sCi0gICAgcG9wID0gYXJyLnBvcCwK
LSAgICBwdXNoID0gYXJyLnB1c2gsCi0gICAgc2xpY2UgPSBhcnIuc2xpY2UsCi0gICAgLy8gVXNl
IGEgc3RyaXBwZWQtZG93biBpbmRleE9mIGlmIHdlIGNhbid0IHVzZSBhIG5hdGl2ZSBvbmUKLSAg
ICBpbmRleE9mID0gYXJyLmluZGV4T2YgfHwgZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgdmFyIGkg
PSAwLAotICAgIGxlbiA9IHRoaXMubGVuZ3RoOwotICAgIGZvciAoIDsgaSA8IGxlbjsgaSsrICkg
ewotICAgIGlmICggdGhpc1tpXSA9PT0gZWxlbSApIHsKLSAgICByZXR1cm4gaTsKLSAgICB9Ci0g
ICAgfQotICAgIHJldHVybiAtMTsKLSAgICB9LAotCi0KLSAgICAvLyBSZWd1bGFyIGV4cHJlc3Np
b25zCi0KLSAgICAvLyBXaGl0ZXNwYWNlIGNoYXJhY3RlcnMgaHR0cDovL3d3dy53My5vcmcvVFIv
Y3NzMy1zZWxlY3RvcnMvI3doaXRlc3BhY2UKLSAgICB3aGl0ZXNwYWNlID0gIltcXHgyMFxcdFxc
clxcblxcZl0iLAotICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtc3ludGF4LyNjaGFy
YWN0ZXJzCi0gICAgY2hhcmFjdGVyRW5jb2RpbmcgPSAiKD86XFxcXC58W1xcdy1dfFteXFx4MDAt
XFx4YTBdKSsiLAotCi0gICAgLy8gTG9vc2VseSBtb2RlbGVkIG9uIENTUyBpZGVudGlmaWVyIGNo
YXJhY3RlcnMKLSAgICAvLyBBbiB1bnF1b3RlZCB2YWx1ZSBzaG91bGQgYmUgYSBDU1MgaWRlbnRp
ZmllciBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXNlbGVjdG9ycy8jYXR0cmlidXRlLXNlbGVj
dG9ycwotICAgIC8vIFByb3BlciBzeW50YXg6IGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIxL3N5
bmRhdGEuaHRtbCN2YWx1ZS1kZWYtaWRlbnRpZmllcgotICAgIGlkZW50aWZpZXIgPSBjaGFyYWN0
ZXJFbmNvZGluZy5yZXBsYWNlKCAidyIsICJ3IyIgKSwKLQotICAgIC8vIEFjY2VwdGFibGUgb3Bl
cmF0b3JzIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jYXR0cmlidXRlLXNlbGVjdG9y
cwotICAgIG9wZXJhdG9ycyA9ICIoWypeJHwhfl0/PSkiLAotICAgIGF0dHJpYnV0ZXMgPSAiXFxb
IiArIHdoaXRlc3BhY2UgKyAiKigiICsgY2hhcmFjdGVyRW5jb2RpbmcgKyAiKSIgKyB3aGl0ZXNw
YWNlICsKLSAgICAiKig/OiIgKyBvcGVyYXRvcnMgKyB3aGl0ZXNwYWNlICsgIiooPzooWydcIl0p
KCg/OlxcXFwufFteXFxcXF0pKj8pXFwzfCgiICsgaWRlbnRpZmllciArICIpfCl8KSIgKyB3aGl0
ZXNwYWNlICsgIipcXF0iLAotCi0gICAgLy8gUHJlZmVyIGFyZ3VtZW50cyBxdW90ZWQsCi0gICAg
Ly8gICB0aGVuIG5vdCBjb250YWluaW5nIHBzZXVkb3MvYnJhY2tldHMsCi0gICAgLy8gICB0aGVu
IGF0dHJpYnV0ZSBzZWxlY3RvcnMvbm9uLXBhcmVudGhldGljYWwgZXhwcmVzc2lvbnMsCi0gICAg
Ly8gICB0aGVuIGFueXRoaW5nIGVsc2UKLSAgICAvLyBUaGVzZSBwcmVmZXJlbmNlcyBhcmUgaGVy
ZSB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBzZWxlY3RvcnMKLSAgICAvLyAgIG5lZWRpbmcgdG9r
ZW5pemUgaW4gdGhlIFBTRVVETyBwcmVGaWx0ZXIKLSAgICBwc2V1ZG9zID0gIjooIiArIGNoYXJh
Y3RlckVuY29kaW5nICsgIikoPzpcXCgoKFsnXCJdKSgoPzpcXFxcLnxbXlxcXFxdKSo/KVxcM3wo
KD86XFxcXC58W15cXFxcKClbXFxdXXwiICsgYXR0cmlidXRlcy5yZXBsYWNlKCAzLCA4ICkgKyAi
KSopfC4qKVxcKXwpIiwKLQotICAgIC8vIExlYWRpbmcgYW5kIG5vbi1lc2NhcGVkIHRyYWlsaW5n
IHdoaXRlc3BhY2UsIGNhcHR1cmluZyBzb21lIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMgcHJl
Y2VkaW5nIHRoZSBsYXR0ZXIKLSAgICBydHJpbSA9IG5ldyBSZWdFeHAoICJeIiArIHdoaXRlc3Bh
Y2UgKyAiK3woKD86XnxbXlxcXFxdKSg/OlxcXFwuKSopIiArIHdoaXRlc3BhY2UgKyAiKyQiLCAi
ZyIgKSwKLQotICAgIHJjb21tYSA9IG5ldyBSZWdFeHAoICJeIiArIHdoaXRlc3BhY2UgKyAiKiwi
ICsgd2hpdGVzcGFjZSArICIqIiApLAotICAgIHJjb21iaW5hdG9ycyA9IG5ldyBSZWdFeHAoICJe
IiArIHdoaXRlc3BhY2UgKyAiKihbXFx4MjBcXHRcXHJcXG5cXGY+K35dKSIgKyB3aGl0ZXNwYWNl
ICsgIioiICksCi0gICAgcnBzZXVkbyA9IG5ldyBSZWdFeHAoIHBzZXVkb3MgKSwKLSAgICByaWRl
bnRpZmllciA9IG5ldyBSZWdFeHAoICJeIiArIGlkZW50aWZpZXIgKyAiJCIgKSwKLQotICAgIG1h
dGNoRXhwciA9IHsKLSAgICAiSUQiOiBuZXcgUmVnRXhwKCAiXiMoIiArIGNoYXJhY3RlckVuY29k
aW5nICsgIikiICksCi0gICAgIkNMQVNTIjogbmV3IFJlZ0V4cCggIl5cXC4oIiArIGNoYXJhY3Rl
ckVuY29kaW5nICsgIikiICksCi0gICAgIk5BTUUiOiBuZXcgUmVnRXhwKCAiXlxcW25hbWU9Wydc
Il0/KCIgKyBjaGFyYWN0ZXJFbmNvZGluZyArICIpWydcIl0/XFxdIiApLAotICAgICJUQUciOiBu
ZXcgUmVnRXhwKCAiXigiICsgY2hhcmFjdGVyRW5jb2RpbmcucmVwbGFjZSggInciLCAidyoiICkg
KyAiKSIgKSwKLSAgICAiQVRUUiI6IG5ldyBSZWdFeHAoICJeIiArIGF0dHJpYnV0ZXMgKSwKLSAg
ICAiUFNFVURPIjogbmV3IFJlZ0V4cCggIl4iICsgcHNldWRvcyApLAotICAgICJDSElMRCI6IG5l
dyBSZWdFeHAoICJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlw
ZSkoPzpcXCgiICsgd2hpdGVzcGFjZSArCi0gICAgIiooZXZlbnxvZGR8KChbKy1dfCkoXFxkKilu
fCkiICsgd2hpdGVzcGFjZSArICIqKD86KFsrLV18KSIgKyB3aGl0ZXNwYWNlICsKLSAgICAiKihc
XGQrKXwpKSIgKyB3aGl0ZXNwYWNlICsgIipcXCl8KSIsICJpIiApLAotICAgIC8vIEZvciB1c2Ug
aW4gbGlicmFyaWVzIGltcGxlbWVudGluZyAuaXMoKQotICAgIC8vIFdlIHVzZSB0aGlzIGZvciBQ
T1MgbWF0Y2hpbmcgaW4gYHNlbGVjdGAKLSAgICAibmVlZHNDb250ZXh0IjogbmV3IFJlZ0V4cCgg
Il4iICsgd2hpdGVzcGFjZSArICIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8
bGFzdCkoPzpcXCgiICsKLSAgICB3aGl0ZXNwYWNlICsgIiooKD86LVxcZCk/XFxkKikiICsgd2hp
dGVzcGFjZSArICIqXFwpfCkoPz1bXi1dfCQpIiwgImkiICkKLSAgICB9LAotCi0gICAgcnNpYmxp
bmcgPSAvW1x4MjBcdFxyXG5cZl0qWyt+XS8sCi0KLSAgICBybmF0aXZlID0gL15bXntdK1x7XHMq
XFtuYXRpdmUgY29kZS8sCi0KLSAgICAvLyBFYXNpbHktcGFyc2VhYmxlL3JldHJpZXZhYmxlIElE
IG9yIFRBRyBvciBDTEFTUyBzZWxlY3RvcnMKLSAgICBycXVpY2tFeHByID0gL14oPzojKFtcdy1d
Kyl8KFx3Kyl8XC4oW1x3LV0rKSkkLywKLQotICAgIHJpbnB1dHMgPSAvXig/OmlucHV0fHNlbGVj
dHx0ZXh0YXJlYXxidXR0b24pJC9pLAotICAgIHJoZWFkZXIgPSAvXmhcZCQvaSwKLQotICAgIHJl
c2NhcGUgPSAvJ3xcXC9nLAotICAgIHJhdHRyaWJ1dGVRdW90ZXMgPSAvXD1bXHgyMFx0XHJcblxm
XSooW14nIlxdXSopW1x4MjBcdFxyXG5cZl0qXF0vZywKLQotICAgIC8vIENTUyBlc2NhcGVzIGh0
dHA6Ly93d3cudzMub3JnL1RSL0NTUzIxL3N5bmRhdGEuaHRtbCNlc2NhcGVkLWNoYXJhY3RlcnMK
LSAgICBydW5lc2NhcGUgPSAvXFwoW1xkYS1mQS1GXXsxLDZ9W1x4MjBcdFxyXG5cZl0/fC4pL2cs
Ci0gICAgZnVuZXNjYXBlID0gZnVuY3Rpb24oIF8sIGVzY2FwZWQgKSB7Ci0gICAgdmFyIGhpZ2gg
PSAiMHgiICsgZXNjYXBlZCAtIDB4MTAwMDA7Ci0gICAgLy8gTmFOIG1lYW5zIG5vbi1jb2RlcG9p
bnQKLSAgICByZXR1cm4gaGlnaCAhPT0gaGlnaCA/Ci0gICAgZXNjYXBlZCA6Ci0gICAgLy8gQk1Q
IGNvZGVwb2ludAotICAgIGhpZ2ggPCAwID8KLSAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKCBoaWdo
ICsgMHgxMDAwMCApIDoKLSAgICAvLyBTdXBwbGVtZW50YWwgUGxhbmUgY29kZXBvaW50IChzdXJy
b2dhdGUgcGFpcikKLSAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKCBoaWdoID4+IDEwIHwgMHhEODAw
LCBoaWdoICYgMHgzRkYgfCAweERDMDAgKTsKLSAgICB9OwotCi0vLyBVc2UgYSBzdHJpcHBlZC1k
b3duIHNsaWNlIGlmIHdlIGNhbid0IHVzZSBhIG5hdGl2ZSBvbmUKLXRyeSB7Ci0gICAgc2xpY2Uu
Y2FsbCggcHJlZmVycmVkRG9jLmRvY3VtZW50RWxlbWVudC5jaGlsZE5vZGVzLCAwIClbMF0ubm9k
ZVR5cGU7Ci19IGNhdGNoICggZSApIHsKLSAgICBzbGljZSA9IGZ1bmN0aW9uKCBpICkgewotICAg
IHZhciBlbGVtLAotICAgIHJlc3VsdHMgPSBbXTsKLSAgICB3aGlsZSAoIChlbGVtID0gdGhpc1tp
KytdKSApIHsKLSAgICByZXN1bHRzLnB1c2goIGVsZW0gKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJl
c3VsdHM7Ci0gICAgfTsKLX0KLQotLyoqCi0gKiBGb3IgZmVhdHVyZSBkZXRlY3Rpb24KLSAqIEBw
YXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byB0ZXN0IGZvciBuYXRpdmUgc3VwcG9y
dAotICovCi1mdW5jdGlvbiBpc05hdGl2ZSggZm4gKSB7Ci0gICAgcmV0dXJuIHJuYXRpdmUudGVz
dCggZm4gKyAiIiApOwotfQotCi0vKioKLSAqIENyZWF0ZSBrZXktdmFsdWUgY2FjaGVzIG9mIGxp
bWl0ZWQgc2l6ZQotICogQHJldHVybnMge0Z1bmN0aW9uKHN0cmluZywgT2JqZWN0KX0gUmV0dXJu
cyB0aGUgT2JqZWN0IGRhdGEgYWZ0ZXIgc3RvcmluZyBpdCBvbiBpdHNlbGYgd2l0aAotICogICAg
cHJvcGVydHkgbmFtZSB0aGUgKHNwYWNlLXN1ZmZpeGVkKSBzdHJpbmcgYW5kIChpZiB0aGUgY2Fj
aGUgaXMgbGFyZ2VyIHRoYW4gRXhwci5jYWNoZUxlbmd0aCkKLSAqICAgIGRlbGV0aW5nIHRoZSBv
bGRlc3QgZW50cnkKLSAqLwotZnVuY3Rpb24gY3JlYXRlQ2FjaGUoKSB7Ci0gICAgdmFyIGNhY2hl
LAotICAgIGtleXMgPSBbXTsKLQotICAgIHJldHVybiAoY2FjaGUgPSBmdW5jdGlvbigga2V5LCB2
YWx1ZSApIHsKLSAgICAvLyBVc2UgKGtleSArICIgIikgdG8gYXZvaWQgY29sbGlzaW9uIHdpdGgg
bmF0aXZlIHByb3RvdHlwZSBwcm9wZXJ0aWVzIChzZWUgSXNzdWUgIzE1NykKLSAgICBpZiAoIGtl
eXMucHVzaCgga2V5ICs9ICIgIiApID4gRXhwci5jYWNoZUxlbmd0aCApIHsKLSAgICAvLyBPbmx5
IGtlZXAgdGhlIG1vc3QgcmVjZW50IGVudHJpZXMKLSAgICBkZWxldGUgY2FjaGVbIGtleXMuc2hp
ZnQoKSBdOwotICAgIH0KLSAgICByZXR1cm4gKGNhY2hlWyBrZXkgXSA9IHZhbHVlKTsKLSAgICB9
KTsKLX0KLQotLyoqCi0gKiBNYXJrIGEgZnVuY3Rpb24gZm9yIHNwZWNpYWwgdXNlIGJ5IFNpenps
ZQotICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIG1hcmsKLSAqLwotZnVu
Y3Rpb24gbWFya0Z1bmN0aW9uKCBmbiApIHsKLSAgICBmblsgZXhwYW5kbyBdID0gdHJ1ZTsKLSAg
ICByZXR1cm4gZm47Ci19Ci0KLS8qKgotICogU3VwcG9ydCB0ZXN0aW5nIHVzaW5nIGFuIGVsZW1l
bnQKLSAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFBhc3NlZCB0aGUgY3JlYXRlZCBkaXYgYW5kIGV4
cGVjdHMgYSBib29sZWFuIHJlc3VsdAotICovCi1mdW5jdGlvbiBhc3NlcnQoIGZuICkgewotICAg
IHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLQotICAgIHRyeSB7Ci0g
ICAgcmV0dXJuIGZuKCBkaXYgKTsKLSAgICB9IGNhdGNoIChlKSB7Ci0gICAgcmV0dXJuIGZhbHNl
OwotICAgIH0gZmluYWxseSB7Ci0gICAgLy8gcmVsZWFzZSBtZW1vcnkgaW4gSUUKLSAgICBkaXYg
PSBudWxsOwotICAgIH0KLX0KLQotZnVuY3Rpb24gU2l6emxlKCBzZWxlY3RvciwgY29udGV4dCwg
cmVzdWx0cywgc2VlZCApIHsKLSAgICB2YXIgbWF0Y2gsIGVsZW0sIG0sIG5vZGVUeXBlLAotICAg
IC8vIFFTQSB2YXJzCi0gICAgaSwgZ3JvdXBzLCBvbGQsIG5pZCwgbmV3Q29udGV4dCwgbmV3U2Vs
ZWN0b3I7Ci0KLSAgICBpZiAoICggY29udGV4dCA/IGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBj
b250ZXh0IDogcHJlZmVycmVkRG9jICkgIT09IGRvY3VtZW50ICkgewotICAgIHNldERvY3VtZW50
KCBjb250ZXh0ICk7Ci0gICAgfQotCi0gICAgY29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7
Ci0gICAgcmVzdWx0cyA9IHJlc3VsdHMgfHwgW107Ci0KLSAgICBpZiAoICFzZWxlY3RvciB8fCB0
eXBlb2Ygc2VsZWN0b3IgIT09ICJzdHJpbmciICkgewotICAgIHJldHVybiByZXN1bHRzOwotICAg
IH0KLQotICAgIGlmICggKG5vZGVUeXBlID0gY29udGV4dC5ub2RlVHlwZSkgIT09IDEgJiYgbm9k
ZVR5cGUgIT09IDkgKSB7Ci0gICAgcmV0dXJuIFtdOwotICAgIH0KLQotICAgIGlmICggIWRvY3Vt
ZW50SXNYTUwgJiYgIXNlZWQgKSB7Ci0KLSAgICAvLyBTaG9ydGN1dHMKLSAgICBpZiAoIChtYXRj
aCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKSkgKSB7Ci0gICAgLy8gU3BlZWQtdXA6IFNp
enpsZSgiI0lEIikKLSAgICBpZiAoIChtID0gbWF0Y2hbMV0pICkgewotICAgIGlmICggbm9kZVR5
cGUgPT09IDkgKSB7Ci0gICAgZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKTsKLSAg
ICAvLyBDaGVjayBwYXJlbnROb2RlIHRvIGNhdGNoIHdoZW4gQmxhY2tiZXJyeSA0LjYgcmV0dXJu
cwotICAgIC8vIG5vZGVzIHRoYXQgYXJlIG5vIGxvbmdlciBpbiB0aGUgZG9jdW1lbnQgIzY5NjMK
LSAgICBpZiAoIGVsZW0gJiYgZWxlbS5wYXJlbnROb2RlICkgewotICAgIC8vIEhhbmRsZSB0aGUg
Y2FzZSB3aGVyZSBJRSwgT3BlcmEsIGFuZCBXZWJraXQgcmV0dXJuIGl0ZW1zCi0gICAgLy8gYnkg
bmFtZSBpbnN0ZWFkIG9mIElECi0gICAgaWYgKCBlbGVtLmlkID09PSBtICkgewotICAgIHJlc3Vs
dHMucHVzaCggZWxlbSApOwotICAgIHJldHVybiByZXN1bHRzOwotICAgIH0KLSAgICB9IGVsc2Ug
ewotICAgIHJldHVybiByZXN1bHRzOwotICAgIH0KLSAgICB9IGVsc2UgewotICAgIC8vIENvbnRl
eHQgaXMgbm90IGEgZG9jdW1lbnQKLSAgICBpZiAoIGNvbnRleHQub3duZXJEb2N1bWVudCAmJiAo
ZWxlbSA9IGNvbnRleHQub3duZXJEb2N1bWVudC5nZXRFbGVtZW50QnlJZCggbSApKSAmJgotICAg
IGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICkgJiYgZWxlbS5pZCA9PT0gbSApIHsKLSAgICByZXN1
bHRzLnB1c2goIGVsZW0gKTsKLSAgICByZXR1cm4gcmVzdWx0czsKLSAgICB9Ci0gICAgfQotCi0g
ICAgLy8gU3BlZWQtdXA6IFNpenpsZSgiVEFHIikKLSAgICB9IGVsc2UgaWYgKCBtYXRjaFsyXSAp
IHsKLSAgICBwdXNoLmFwcGx5KCByZXN1bHRzLCBzbGljZS5jYWxsKGNvbnRleHQuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoIHNlbGVjdG9yICksIDApICk7Ci0gICAgcmV0dXJuIHJlc3VsdHM7Ci0KLSAg
ICAvLyBTcGVlZC11cDogU2l6emxlKCIuQ0xBU1MiKQotICAgIH0gZWxzZSBpZiAoIChtID0gbWF0
Y2hbM10pICYmIHN1cHBvcnQuZ2V0QnlDbGFzc05hbWUgJiYgY29udGV4dC5nZXRFbGVtZW50c0J5
Q2xhc3NOYW1lICkgewotICAgIHB1c2guYXBwbHkoIHJlc3VsdHMsIHNsaWNlLmNhbGwoY29udGV4
dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBtICksIDApICk7Ci0gICAgcmV0dXJuIHJlc3VsdHM7
Ci0gICAgfQotICAgIH0KLQotICAgIC8vIFFTQSBwYXRoCi0gICAgaWYgKCBzdXBwb3J0LnFzYSAm
JiAhcmJ1Z2d5UVNBLnRlc3Qoc2VsZWN0b3IpICkgewotICAgIG9sZCA9IHRydWU7Ci0gICAgbmlk
ID0gZXhwYW5kbzsKLSAgICBuZXdDb250ZXh0ID0gY29udGV4dDsKLSAgICBuZXdTZWxlY3RvciA9
IG5vZGVUeXBlID09PSA5ICYmIHNlbGVjdG9yOwotCi0gICAgLy8gcVNBIHdvcmtzIHN0cmFuZ2Vs
eSBvbiBFbGVtZW50LXJvb3RlZCBxdWVyaWVzCi0gICAgLy8gV2UgY2FuIHdvcmsgYXJvdW5kIHRo
aXMgYnkgc3BlY2lmeWluZyBhbiBleHRyYSBJRCBvbiB0aGUgcm9vdAotICAgIC8vIGFuZCB3b3Jr
aW5nIHVwIGZyb20gdGhlcmUgKFRoYW5rcyB0byBBbmRyZXcgRHVwb250IGZvciB0aGUgdGVjaG5p
cXVlKQotICAgIC8vIElFIDggZG9lc24ndCB3b3JrIG9uIG9iamVjdCBlbGVtZW50cwotICAgIGlm
ICggbm9kZVR5cGUgPT09IDEgJiYgY29udGV4dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAi
b2JqZWN0IiApIHsKLSAgICBncm91cHMgPSB0b2tlbml6ZSggc2VsZWN0b3IgKTsKLQotICAgIGlm
ICggKG9sZCA9IGNvbnRleHQuZ2V0QXR0cmlidXRlKCJpZCIpKSApIHsKLSAgICBuaWQgPSBvbGQu
cmVwbGFjZSggcmVzY2FwZSwgIlxcJCYiICk7Ci0gICAgfSBlbHNlIHsKLSAgICBjb250ZXh0LnNl
dEF0dHJpYnV0ZSggImlkIiwgbmlkICk7Ci0gICAgfQotICAgIG5pZCA9ICJbaWQ9JyIgKyBuaWQg
KyAiJ10gIjsKLQotICAgIGkgPSBncm91cHMubGVuZ3RoOwotICAgIHdoaWxlICggaS0tICkgewot
ICAgIGdyb3Vwc1tpXSA9IG5pZCArIHRvU2VsZWN0b3IoIGdyb3Vwc1tpXSApOwotICAgIH0KLSAg
ICBuZXdDb250ZXh0ID0gcnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKSAmJiBjb250ZXh0LnBhcmVu
dE5vZGUgfHwgY29udGV4dDsKLSAgICBuZXdTZWxlY3RvciA9IGdyb3Vwcy5qb2luKCIsIik7Ci0g
ICAgfQotCi0gICAgaWYgKCBuZXdTZWxlY3RvciApIHsKLSAgICB0cnkgewotICAgIHB1c2guYXBw
bHkoIHJlc3VsdHMsIHNsaWNlLmNhbGwoIG5ld0NvbnRleHQucXVlcnlTZWxlY3RvckFsbCgKLSAg
ICBuZXdTZWxlY3RvcgotICAgICksIDAgKSApOwotICAgIHJldHVybiByZXN1bHRzOwotICAgIH0g
Y2F0Y2gocXNhRXJyb3IpIHsKLSAgICB9IGZpbmFsbHkgewotICAgIGlmICggIW9sZCApIHsKLSAg
ICBjb250ZXh0LnJlbW92ZUF0dHJpYnV0ZSgiaWQiKTsKLSAgICB9Ci0gICAgfQotICAgIH0KLSAg
ICB9Ci0gICAgfQotCi0gICAgLy8gQWxsIG90aGVycwotICAgIHJldHVybiBzZWxlY3QoIHNlbGVj
dG9yLnJlcGxhY2UoIHJ0cmltLCAiJDEiICksIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKTsKLX0K
LQotLyoqCi0gKiBEZXRlY3QgeG1sCi0gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBlbGVtIEFu
IGVsZW1lbnQgb3IgYSBkb2N1bWVudAotICovCi1pc1hNTCA9IFNpenpsZS5pc1hNTCA9IGZ1bmN0
aW9uKCBlbGVtICkgewotICAgIC8vIGRvY3VtZW50RWxlbWVudCBpcyB2ZXJpZmllZCBmb3IgY2Fz
ZXMgd2hlcmUgaXQgZG9lc24ndCB5ZXQgZXhpc3QKLSAgICAvLyAoc3VjaCBhcyBsb2FkaW5nIGlm
cmFtZXMgaW4gSUUgLSAjNDgzMykKLSAgICB2YXIgZG9jdW1lbnRFbGVtZW50ID0gZWxlbSAmJiAo
ZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0pLmRvY3VtZW50RWxlbWVudDsKLSAgICByZXR1cm4g
ZG9jdW1lbnRFbGVtZW50ID8gZG9jdW1lbnRFbGVtZW50Lm5vZGVOYW1lICE9PSAiSFRNTCIgOiBm
YWxzZTsKLX07Ci0KLS8qKgotICogU2V0cyBkb2N1bWVudC1yZWxhdGVkIHZhcmlhYmxlcyBvbmNl
IGJhc2VkIG9uIHRoZSBjdXJyZW50IGRvY3VtZW50Ci0gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0
fSBbZG9jXSBBbiBlbGVtZW50IG9yIGRvY3VtZW50IG9iamVjdCB0byB1c2UgdG8gc2V0IHRoZSBk
b2N1bWVudAotICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY3VycmVudCBkb2N1bWVu
dAotICovCi1zZXREb2N1bWVudCA9IFNpenpsZS5zZXREb2N1bWVudCA9IGZ1bmN0aW9uKCBub2Rl
ICkgewotICAgIHZhciBkb2MgPSBub2RlID8gbm9kZS5vd25lckRvY3VtZW50IHx8IG5vZGUgOiBw
cmVmZXJyZWREb2M7Ci0KLSAgICAvLyBJZiBubyBkb2N1bWVudCBhbmQgZG9jdW1lbnRFbGVtZW50
IGlzIGF2YWlsYWJsZSwgcmV0dXJuCi0gICAgaWYgKCBkb2MgPT09IGRvY3VtZW50IHx8IGRvYy5u
b2RlVHlwZSAhPT0gOSB8fCAhZG9jLmRvY3VtZW50RWxlbWVudCApIHsKLSAgICByZXR1cm4gZG9j
dW1lbnQ7Ci0gICAgfQotCi0gICAgLy8gU2V0IG91ciBkb2N1bWVudAotICAgIGRvY3VtZW50ID0g
ZG9jOwotICAgIGRvY0VsZW0gPSBkb2MuZG9jdW1lbnRFbGVtZW50OwotCi0gICAgLy8gU3VwcG9y
dCB0ZXN0cwotICAgIGRvY3VtZW50SXNYTUwgPSBpc1hNTCggZG9jICk7Ci0KLSAgICAvLyBDaGVj
ayBpZiBnZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpIHJldHVybnMgb25seSBlbGVtZW50cwotICAg
IHN1cHBvcnQudGFnTmFtZU5vQ29tbWVudHMgPSBhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsKLSAg
ICBkaXYuYXBwZW5kQ2hpbGQoIGRvYy5jcmVhdGVDb21tZW50KCIiKSApOwotICAgIHJldHVybiAh
ZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RoOwotICAgIH0pOwotCi0gICAgLy8g
Q2hlY2sgaWYgYXR0cmlidXRlcyBzaG91bGQgYmUgcmV0cmlldmVkIGJ5IGF0dHJpYnV0ZSBub2Rl
cwotICAgIHN1cHBvcnQuYXR0cmlidXRlcyA9IGFzc2VydChmdW5jdGlvbiggZGl2ICkgewotICAg
IGRpdi5pbm5lckhUTUwgPSAiPHNlbGVjdD48L3NlbGVjdD4iOwotICAgIHZhciB0eXBlID0gdHlw
ZW9mIGRpdi5sYXN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJtdWx0aXBsZSIpOwotICAgIC8vIElFOCBy
ZXR1cm5zIGEgc3RyaW5nIGZvciBzb21lIGF0dHJpYnV0ZXMgZXZlbiB3aGVuIG5vdCBwcmVzZW50
Ci0gICAgcmV0dXJuIHR5cGUgIT09ICJib29sZWFuIiAmJiB0eXBlICE9PSAic3RyaW5nIjsKLSAg
ICB9KTsKLQotICAgIC8vIENoZWNrIGlmIGdldEVsZW1lbnRzQnlDbGFzc05hbWUgY2FuIGJlIHRy
dXN0ZWQKLSAgICBzdXBwb3J0LmdldEJ5Q2xhc3NOYW1lID0gYXNzZXJ0KGZ1bmN0aW9uKCBkaXYg
KSB7Ci0gICAgLy8gT3BlcmEgY2FuJ3QgZmluZCBhIHNlY29uZCBjbGFzc25hbWUgKGluIDkuNikK
LSAgICBkaXYuaW5uZXJIVE1MID0gIjxkaXYgY2xhc3M9J2hpZGRlbiBlJz48L2Rpdj48ZGl2IGNs
YXNzPSdoaWRkZW4nPjwvZGl2PiI7Ci0gICAgaWYgKCAhZGl2LmdldEVsZW1lbnRzQnlDbGFzc05h
bWUgfHwgIWRpdi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoICkgewotICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBTYWZhcmkgMy4yIGNhY2hlcyBjbGFzcyBhdHRy
aWJ1dGVzIGFuZCBkb2Vzbid0IGNhdGNoIGNoYW5nZXMKLSAgICBkaXYubGFzdENoaWxkLmNsYXNz
TmFtZSA9ICJlIjsKLSAgICByZXR1cm4gZGl2LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImUiKS5s
ZW5ndGggPT09IDI7Ci0gICAgfSk7Ci0KLSAgICAvLyBDaGVjayBpZiBnZXRFbGVtZW50QnlJZCBy
ZXR1cm5zIGVsZW1lbnRzIGJ5IG5hbWUKLSAgICAvLyBDaGVjayBpZiBnZXRFbGVtZW50c0J5TmFt
ZSBwcml2aWxlZ2VzIGZvcm0gY29udHJvbHMgb3IgcmV0dXJucyBlbGVtZW50cyBieSBJRAotICAg
IHN1cHBvcnQuZ2V0QnlOYW1lID0gYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7Ci0gICAgLy8gSW5q
ZWN0IGNvbnRlbnQKLSAgICBkaXYuaWQgPSBleHBhbmRvICsgMDsKLSAgICBkaXYuaW5uZXJIVE1M
ID0gIjxhIG5hbWU9JyIgKyBleHBhbmRvICsgIic+PC9hPjxkaXYgbmFtZT0nIiArIGV4cGFuZG8g
KyAiJz48L2Rpdj4iOwotICAgIGRvY0VsZW0uaW5zZXJ0QmVmb3JlKCBkaXYsIGRvY0VsZW0uZmly
c3RDaGlsZCApOwotCi0gICAgLy8gVGVzdAotICAgIHZhciBwYXNzID0gZG9jLmdldEVsZW1lbnRz
QnlOYW1lICYmCi0gICAgLy8gYnVnZ3kgYnJvd3NlcnMgd2lsbCByZXR1cm4gZmV3ZXIgdGhhbiB0
aGUgY29ycmVjdCAyCi0gICAgZG9jLmdldEVsZW1lbnRzQnlOYW1lKCBleHBhbmRvICkubGVuZ3Ro
ID09PSAyICsKLSAgICAvLyBidWdneSBicm93c2VycyB3aWxsIHJldHVybiBtb3JlIHRoYW4gdGhl
IGNvcnJlY3QgMAotICAgIGRvYy5nZXRFbGVtZW50c0J5TmFtZSggZXhwYW5kbyArIDAgKS5sZW5n
dGg7Ci0gICAgc3VwcG9ydC5nZXRJZE5vdE5hbWUgPSAhZG9jLmdldEVsZW1lbnRCeUlkKCBleHBh
bmRvICk7Ci0KLSAgICAvLyBDbGVhbnVwCi0gICAgZG9jRWxlbS5yZW1vdmVDaGlsZCggZGl2ICk7
Ci0KLSAgICByZXR1cm4gcGFzczsKLSAgICB9KTsKLQotICAgIC8vIElFNi83IHJldHVybiBtb2Rp
ZmllZCBhdHRyaWJ1dGVzCi0gICAgRXhwci5hdHRySGFuZGxlID0gYXNzZXJ0KGZ1bmN0aW9uKCBk
aXYgKSB7Ci0gICAgZGl2LmlubmVySFRNTCA9ICI8YSBocmVmPScjJz48L2E+IjsKLSAgICByZXR1
cm4gZGl2LmZpcnN0Q2hpbGQgJiYgdHlwZW9mIGRpdi5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSAh
PT0gc3RydW5kZWZpbmVkICYmCi0gICAgZGl2LmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVm
IikgPT09ICIjIjsKLSAgICB9KSA/Ci0gICAge30gOgotICAgIHsKLSAgICAiaHJlZiI6IGZ1bmN0
aW9uKCBlbGVtICkgewotICAgIHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggImhyZWYiLCAyICk7
Ci0gICAgfSwKLSAgICAidHlwZSI6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgIHJldHVybiBlbGVt
LmdldEF0dHJpYnV0ZSgidHlwZSIpOwotICAgIH0KLSAgICB9OwotCi0gICAgLy8gSUQgZmluZCBh
bmQgZmlsdGVyCi0gICAgaWYgKCBzdXBwb3J0LmdldElkTm90TmFtZSApIHsKLSAgICBFeHByLmZp
bmRbIklEIl0gPSBmdW5jdGlvbiggaWQsIGNvbnRleHQgKSB7Ci0gICAgaWYgKCB0eXBlb2YgY29u
dGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gc3RydW5kZWZpbmVkICYmICFkb2N1bWVudElzWE1MICkg
ewotICAgIHZhciBtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggaWQgKTsKLSAgICAvLyBDaGVj
ayBwYXJlbnROb2RlIHRvIGNhdGNoIHdoZW4gQmxhY2tiZXJyeSA0LjYgcmV0dXJucwotICAgIC8v
IG5vZGVzIHRoYXQgYXJlIG5vIGxvbmdlciBpbiB0aGUgZG9jdW1lbnQgIzY5NjMKLSAgICByZXR1
cm4gbSAmJiBtLnBhcmVudE5vZGUgPyBbbV0gOiBbXTsKLSAgICB9Ci0gICAgfTsKLSAgICBFeHBy
LmZpbHRlclsiSUQiXSA9IGZ1bmN0aW9uKCBpZCApIHsKLSAgICB2YXIgYXR0cklkID0gaWQucmVw
bGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTsKLSAgICByZXR1cm4gZnVuY3Rpb24oIGVsZW0g
KSB7Ci0gICAgcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCJpZCIpID09PSBhdHRySWQ7Ci0gICAg
fTsKLSAgICB9OwotICAgIH0gZWxzZSB7Ci0gICAgRXhwci5maW5kWyJJRCJdID0gZnVuY3Rpb24o
IGlkLCBjb250ZXh0ICkgewotICAgIGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQg
IT09IHN0cnVuZGVmaW5lZCAmJiAhZG9jdW1lbnRJc1hNTCApIHsKLSAgICB2YXIgbSA9IGNvbnRl
eHQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7Ci0KLSAgICByZXR1cm4gbSA/Ci0gICAgbS5pZCA9PT0g
aWQgfHwgdHlwZW9mIG0uZ2V0QXR0cmlidXRlTm9kZSAhPT0gc3RydW5kZWZpbmVkICYmIG0uZ2V0
QXR0cmlidXRlTm9kZSgiaWQiKS52YWx1ZSA9PT0gaWQgPwotICAgIFttXSA6Ci0gICAgdW5kZWZp
bmVkIDoKLSAgICBbXTsKLSAgICB9Ci0gICAgfTsKLSAgICBFeHByLmZpbHRlclsiSUQiXSA9ICBm
dW5jdGlvbiggaWQgKSB7Ci0gICAgdmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UoIHJ1bmVzY2FwZSwg
ZnVuZXNjYXBlICk7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgewotICAgIHZhciBub2Rl
ID0gdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSAhPT0gc3RydW5kZWZpbmVkICYmIGVsZW0u
Z2V0QXR0cmlidXRlTm9kZSgiaWQiKTsKLSAgICByZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlID09
PSBhdHRySWQ7Ci0gICAgfTsKLSAgICB9OwotICAgIH0KLQotICAgIC8vIFRhZwotICAgIEV4cHIu
ZmluZFsiVEFHIl0gPSBzdXBwb3J0LnRhZ05hbWVOb0NvbW1lbnRzID8KLSAgICBmdW5jdGlvbigg
dGFnLCBjb250ZXh0ICkgewotICAgIGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRh
Z05hbWUgIT09IHN0cnVuZGVmaW5lZCApIHsKLSAgICByZXR1cm4gY29udGV4dC5nZXRFbGVtZW50
c0J5VGFnTmFtZSggdGFnICk7Ci0gICAgfQotICAgIH0gOgotICAgIGZ1bmN0aW9uKCB0YWcsIGNv
bnRleHQgKSB7Ci0gICAgdmFyIGVsZW0sCi0gICAgdG1wID0gW10sCi0gICAgaSA9IDAsCi0gICAg
cmVzdWx0cyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApOwotCi0gICAgLy8g
RmlsdGVyIG91dCBwb3NzaWJsZSBjb21tZW50cwotICAgIGlmICggdGFnID09PSAiKiIgKSB7Ci0g
ICAgd2hpbGUgKCAoZWxlbSA9IHJlc3VsdHNbaSsrXSkgKSB7Ci0gICAgaWYgKCBlbGVtLm5vZGVU
eXBlID09PSAxICkgewotICAgIHRtcC5wdXNoKCBlbGVtICk7Ci0gICAgfQotICAgIH0KLQotICAg
IHJldHVybiB0bXA7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHRzOwotICAgIH07Ci0KLSAgICAv
LyBOYW1lCi0gICAgRXhwci5maW5kWyJOQU1FIl0gPSBzdXBwb3J0LmdldEJ5TmFtZSAmJiBmdW5j
dGlvbiggdGFnLCBjb250ZXh0ICkgewotICAgIGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVu
dHNCeU5hbWUgIT09IHN0cnVuZGVmaW5lZCApIHsKLSAgICByZXR1cm4gY29udGV4dC5nZXRFbGVt
ZW50c0J5TmFtZSggbmFtZSApOwotICAgIH0KLSAgICB9OwotCi0gICAgLy8gQ2xhc3MKLSAgICBF
eHByLmZpbmRbIkNMQVNTIl0gPSBzdXBwb3J0LmdldEJ5Q2xhc3NOYW1lICYmIGZ1bmN0aW9uKCBj
bGFzc05hbWUsIGNvbnRleHQgKSB7Ci0gICAgaWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50
c0J5Q2xhc3NOYW1lICE9PSBzdHJ1bmRlZmluZWQgJiYgIWRvY3VtZW50SXNYTUwgKSB7Ci0gICAg
cmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggY2xhc3NOYW1lICk7Ci0gICAg
fQotICAgIH07Ci0KLSAgICAvLyBRU0EgYW5kIG1hdGNoZXNTZWxlY3RvciBzdXBwb3J0Ci0KLSAg
ICAvLyBtYXRjaGVzU2VsZWN0b3IoOmFjdGl2ZSkgcmVwb3J0cyBmYWxzZSB3aGVuIHRydWUgKElF
OS9PcGVyYSAxMS41KQotICAgIHJidWdneU1hdGNoZXMgPSBbXTsKLQotICAgIC8vIHFTYSg6Zm9j
dXMpIHJlcG9ydHMgZmFsc2Ugd2hlbiB0cnVlIChDaHJvbWUgMjEpLAotICAgIC8vIG5vIG5lZWQg
dG8gYWxzbyBhZGQgdG8gYnVnZ3lNYXRjaGVzIHNpbmNlIG1hdGNoZXMgY2hlY2tzIGJ1Z2d5UVNB
Ci0gICAgLy8gQSBzdXBwb3J0IHRlc3Qgd291bGQgcmVxdWlyZSB0b28gbXVjaCBjb2RlICh3b3Vs
ZCBpbmNsdWRlIGRvY3VtZW50IHJlYWR5KQotICAgIHJidWdneVFTQSA9IFsgIjpmb2N1cyIgXTsK
LQotICAgIGlmICggKHN1cHBvcnQucXNhID0gaXNOYXRpdmUoZG9jLnF1ZXJ5U2VsZWN0b3JBbGwp
KSApIHsKLSAgICAvLyBCdWlsZCBRU0EgcmVnZXgKLSAgICAvLyBSZWdleCBzdHJhdGVneSBhZG9w
dGVkIGZyb20gRGllZ28gUGVyaW5pCi0gICAgYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7Ci0gICAg
Ly8gU2VsZWN0IGlzIHNldCB0byBlbXB0eSBzdHJpbmcgb24gcHVycG9zZQotICAgIC8vIFRoaXMg
aXMgdG8gdGVzdCBJRSdzIHRyZWF0bWVudCBvZiBub3QgZXhwbGljdGx5Ci0gICAgLy8gc2V0dGlu
ZyBhIGJvb2xlYW4gY29udGVudCBhdHRyaWJ1dGUsCi0gICAgLy8gc2luY2UgaXRzIHByZXNlbmNl
IHNob3VsZCBiZSBlbm91Z2gKLSAgICAvLyBodHRwOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8x
MjM1OQotICAgIGRpdi5pbm5lckhUTUwgPSAiPHNlbGVjdD48b3B0aW9uIHNlbGVjdGVkPScnPjwv
b3B0aW9uPjwvc2VsZWN0PiI7Ci0KLSAgICAvLyBJRTggLSBTb21lIGJvb2xlYW4gYXR0cmlidXRl
cyBhcmUgbm90IHRyZWF0ZWQgY29ycmVjdGx5Ci0gICAgaWYgKCAhZGl2LnF1ZXJ5U2VsZWN0b3JB
bGwoIltzZWxlY3RlZF0iKS5sZW5ndGggKSB7Ci0gICAgcmJ1Z2d5UVNBLnB1c2goICJcXFsiICsg
d2hpdGVzcGFjZSArICIqKD86Y2hlY2tlZHxkaXNhYmxlZHxpc21hcHxtdWx0aXBsZXxyZWFkb25s
eXxzZWxlY3RlZHx2YWx1ZSkiICk7Ci0gICAgfQotCi0gICAgLy8gV2Via2l0L09wZXJhIC0gOmNo
ZWNrZWQgc2hvdWxkIHJldHVybiBzZWxlY3RlZCBvcHRpb24gZWxlbWVudHMKLSAgICAvLyBodHRw
Oi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tl
ZAotICAgIC8vIElFOCB0aHJvd3MgZXJyb3IgaGVyZSBhbmQgd2lsbCBub3Qgc2VlIGxhdGVyIHRl
c3RzCi0gICAgaWYgKCAhZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoIjpjaGVja2VkIikubGVuZ3RoICkg
ewotICAgIHJidWdneVFTQS5wdXNoKCI6Y2hlY2tlZCIpOwotICAgIH0KLSAgICB9KTsKLQotICAg
IGFzc2VydChmdW5jdGlvbiggZGl2ICkgewotCi0gICAgLy8gT3BlcmEgMTAtMTIvSUU4IC0gXj0g
JD0gKj0gYW5kIGVtcHR5IHZhbHVlcwotICAgIC8vIFNob3VsZCBub3Qgc2VsZWN0IGFueXRoaW5n
Ci0gICAgZGl2LmlubmVySFRNTCA9ICI8aW5wdXQgdHlwZT0naGlkZGVuJyBpPScnLz4iOwotICAg
IGlmICggZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoIltpXj0nJ10iKS5sZW5ndGggKSB7Ci0gICAgcmJ1
Z2d5UVNBLnB1c2goICJbKl4kXT0iICsgd2hpdGVzcGFjZSArICIqKD86XCJcInwnJykiICk7Ci0g
ICAgfQotCi0gICAgLy8gRkYgMy41IC0gOmVuYWJsZWQvOmRpc2FibGVkIGFuZCBoaWRkZW4gZWxl
bWVudHMgKGhpZGRlbiBlbGVtZW50cyBhcmUgc3RpbGwgZW5hYmxlZCkKLSAgICAvLyBJRTggdGhy
b3dzIGVycm9yIGhlcmUgYW5kIHdpbGwgbm90IHNlZSBsYXRlciB0ZXN0cwotICAgIGlmICggIWRp
di5xdWVyeVNlbGVjdG9yQWxsKCI6ZW5hYmxlZCIpLmxlbmd0aCApIHsKLSAgICByYnVnZ3lRU0Eu
cHVzaCggIjplbmFibGVkIiwgIjpkaXNhYmxlZCIgKTsKLSAgICB9Ci0KLSAgICAvLyBPcGVyYSAx
MC0xMSBkb2VzIG5vdCB0aHJvdyBvbiBwb3N0LWNvbW1hIGludmFsaWQgcHNldWRvcwotICAgIGRp
di5xdWVyeVNlbGVjdG9yQWxsKCIqLDp4Iik7Ci0gICAgcmJ1Z2d5UVNBLnB1c2goIiwuKjoiKTsK
LSAgICB9KTsKLSAgICB9Ci0KLSAgICBpZiAoIChzdXBwb3J0Lm1hdGNoZXNTZWxlY3RvciA9IGlz
TmF0aXZlKCAobWF0Y2hlcyA9IGRvY0VsZW0ubWF0Y2hlc1NlbGVjdG9yIHx8Ci0gICAgZG9jRWxl
bS5tb3pNYXRjaGVzU2VsZWN0b3IgfHwKLSAgICBkb2NFbGVtLndlYmtpdE1hdGNoZXNTZWxlY3Rv
ciB8fAotICAgIGRvY0VsZW0ub01hdGNoZXNTZWxlY3RvciB8fAotICAgIGRvY0VsZW0ubXNNYXRj
aGVzU2VsZWN0b3IpICkpICkgewotCi0gICAgYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7Ci0gICAg
Ly8gQ2hlY2sgdG8gc2VlIGlmIGl0J3MgcG9zc2libGUgdG8gZG8gbWF0Y2hlc1NlbGVjdG9yCi0g
ICAgLy8gb24gYSBkaXNjb25uZWN0ZWQgbm9kZSAoSUUgOSkKLSAgICBzdXBwb3J0LmRpc2Nvbm5l
Y3RlZE1hdGNoID0gbWF0Y2hlcy5jYWxsKCBkaXYsICJkaXYiICk7Ci0KLSAgICAvLyBUaGlzIHNo
b3VsZCBmYWlsIHdpdGggYW4gZXhjZXB0aW9uCi0gICAgLy8gR2Vja28gZG9lcyBub3QgZXJyb3Is
IHJldHVybnMgZmFsc2UgaW5zdGVhZAotICAgIG1hdGNoZXMuY2FsbCggZGl2LCAiW3MhPScnXTp4
IiApOwotICAgIHJidWdneU1hdGNoZXMucHVzaCggIiE9IiwgcHNldWRvcyApOwotICAgIH0pOwot
ICAgIH0KLQotICAgIHJidWdneVFTQSA9IG5ldyBSZWdFeHAoIHJidWdneVFTQS5qb2luKCJ8Iikg
KTsKLSAgICByYnVnZ3lNYXRjaGVzID0gbmV3IFJlZ0V4cCggcmJ1Z2d5TWF0Y2hlcy5qb2luKCJ8
IikgKTsKLQotICAgIC8vIEVsZW1lbnQgY29udGFpbnMgYW5vdGhlcgotICAgIC8vIFB1cnBvc2Vm
dWxseSBkb2VzIG5vdCBpbXBsZW1lbnQgaW5jbHVzaXZlIGRlc2NlbmRlbnQKLSAgICAvLyBBcyBp
biwgYW4gZWxlbWVudCBkb2VzIG5vdCBjb250YWluIGl0c2VsZgotICAgIGNvbnRhaW5zID0gaXNO
YXRpdmUoZG9jRWxlbS5jb250YWlucykgfHwgZG9jRWxlbS5jb21wYXJlRG9jdW1lbnRQb3NpdGlv
biA/Ci0gICAgZnVuY3Rpb24oIGEsIGIgKSB7Ci0gICAgdmFyIGFkb3duID0gYS5ub2RlVHlwZSA9
PT0gOSA/IGEuZG9jdW1lbnRFbGVtZW50IDogYSwKLSAgICBidXAgPSBiICYmIGIucGFyZW50Tm9k
ZTsKLSAgICByZXR1cm4gYSA9PT0gYnVwIHx8ICEhKCBidXAgJiYgYnVwLm5vZGVUeXBlID09PSAx
ICYmICgKLSAgICBhZG93bi5jb250YWlucyA/Ci0gICAgYWRvd24uY29udGFpbnMoIGJ1cCApIDoK
LSAgICBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICYmIGEuY29tcGFyZURvY3VtZW50UG9zaXRp
b24oIGJ1cCApICYgMTYKLSAgICApKTsKLSAgICB9IDoKLSAgICBmdW5jdGlvbiggYSwgYiApIHsK
LSAgICBpZiAoIGIgKSB7Ci0gICAgd2hpbGUgKCAoYiA9IGIucGFyZW50Tm9kZSkgKSB7Ci0gICAg
aWYgKCBiID09PSBhICkgewotICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICB9Ci0gICAgfQot
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9OwotCi0gICAgLy8gRG9jdW1lbnQgb3JkZXIgc29ydGlu
ZwotICAgIHNvcnRPcmRlciA9IGRvY0VsZW0uY29tcGFyZURvY3VtZW50UG9zaXRpb24gPwotICAg
IGZ1bmN0aW9uKCBhLCBiICkgewotICAgIHZhciBjb21wYXJlOwotCi0gICAgaWYgKCBhID09PSBi
ICkgewotICAgIGhhc0R1cGxpY2F0ZSA9IHRydWU7Ci0gICAgcmV0dXJuIDA7Ci0gICAgfQotCi0g
ICAgaWYgKCAoY29tcGFyZSA9IGIuY29tcGFyZURvY3VtZW50UG9zaXRpb24gJiYgYS5jb21wYXJl
RG9jdW1lbnRQb3NpdGlvbiAmJiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBiICkpICkgewot
ICAgIGlmICggY29tcGFyZSAmIDEgfHwgYS5wYXJlbnROb2RlICYmIGEucGFyZW50Tm9kZS5ub2Rl
VHlwZSA9PT0gMTEgKSB7Ci0gICAgaWYgKCBhID09PSBkb2MgfHwgY29udGFpbnMoIHByZWZlcnJl
ZERvYywgYSApICkgewotICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgaWYgKCBiID09PSBkb2Mg
fHwgY29udGFpbnMoIHByZWZlcnJlZERvYywgYiApICkgewotICAgIHJldHVybiAxOwotICAgIH0K
LSAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIGNvbXBhcmUgJiA0ID8gLTEgOiAxOwot
ICAgIH0KLQotICAgIHJldHVybiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uID8gLTEgOiAxOwot
ICAgIH0gOgotICAgIGZ1bmN0aW9uKCBhLCBiICkgewotICAgIHZhciBjdXIsCi0gICAgaSA9IDAs
Ci0gICAgYXVwID0gYS5wYXJlbnROb2RlLAotICAgIGJ1cCA9IGIucGFyZW50Tm9kZSwKLSAgICBh
cCA9IFsgYSBdLAotICAgIGJwID0gWyBiIF07Ci0KLSAgICAvLyBFeGl0IGVhcmx5IGlmIHRoZSBu
b2RlcyBhcmUgaWRlbnRpY2FsCi0gICAgaWYgKCBhID09PSBiICkgewotICAgIGhhc0R1cGxpY2F0
ZSA9IHRydWU7Ci0gICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBQYXJlbnRsZXNzIG5vZGVzIGFyZSBl
aXRoZXIgZG9jdW1lbnRzIG9yIGRpc2Nvbm5lY3RlZAotICAgIH0gZWxzZSBpZiAoICFhdXAgfHwg
IWJ1cCApIHsKLSAgICByZXR1cm4gYSA9PT0gZG9jID8gLTEgOgotICAgIGIgPT09IGRvYyA/IDEg
OgotICAgIGF1cCA/IC0xIDoKLSAgICBidXAgPyAxIDoKLSAgICAwOwotCi0gICAgLy8gSWYgdGhl
IG5vZGVzIGFyZSBzaWJsaW5ncywgd2UgY2FuIGRvIGEgcXVpY2sgY2hlY2sKLSAgICB9IGVsc2Ug
aWYgKCBhdXAgPT09IGJ1cCApIHsKLSAgICByZXR1cm4gc2libGluZ0NoZWNrKCBhLCBiICk7Ci0g
ICAgfQotCi0gICAgLy8gT3RoZXJ3aXNlIHdlIG5lZWQgZnVsbCBsaXN0cyBvZiB0aGVpciBhbmNl
c3RvcnMgZm9yIGNvbXBhcmlzb24KLSAgICBjdXIgPSBhOwotICAgIHdoaWxlICggKGN1ciA9IGN1
ci5wYXJlbnROb2RlKSApIHsKLSAgICBhcC51bnNoaWZ0KCBjdXIgKTsKLSAgICB9Ci0gICAgY3Vy
ID0gYjsKLSAgICB3aGlsZSAoIChjdXIgPSBjdXIucGFyZW50Tm9kZSkgKSB7Ci0gICAgYnAudW5z
aGlmdCggY3VyICk7Ci0gICAgfQotCi0gICAgLy8gV2FsayBkb3duIHRoZSB0cmVlIGxvb2tpbmcg
Zm9yIGEgZGlzY3JlcGFuY3kKLSAgICB3aGlsZSAoIGFwW2ldID09PSBicFtpXSApIHsKLSAgICBp
Kys7Ci0gICAgfQotCi0gICAgcmV0dXJuIGkgPwotICAgIC8vIERvIGEgc2libGluZyBjaGVjayBp
ZiB0aGUgbm9kZXMgaGF2ZSBhIGNvbW1vbiBhbmNlc3RvcgotICAgIHNpYmxpbmdDaGVjayggYXBb
aV0sIGJwW2ldICkgOgotCi0gICAgLy8gT3RoZXJ3aXNlIG5vZGVzIGluIG91ciBkb2N1bWVudCBz
b3J0IGZpcnN0Ci0gICAgYXBbaV0gPT09IHByZWZlcnJlZERvYyA/IC0xIDoKLSAgICBicFtpXSA9
PT0gcHJlZmVycmVkRG9jID8gMSA6Ci0gICAgMDsKLSAgICB9OwotCi0gICAgLy8gQWx3YXlzIGFz
c3VtZSB0aGUgcHJlc2VuY2Ugb2YgZHVwbGljYXRlcyBpZiBzb3J0IGRvZXNuJ3QKLSAgICAvLyBw
YXNzIHRoZW0gdG8gb3VyIGNvbXBhcmlzb24gZnVuY3Rpb24gKGFzIGluIEdvb2dsZSBDaHJvbWUp
LgotICAgIGhhc0R1cGxpY2F0ZSA9IGZhbHNlOwotICAgIFswLCAwXS5zb3J0KCBzb3J0T3JkZXIg
KTsKLSAgICBzdXBwb3J0LmRldGVjdER1cGxpY2F0ZXMgPSBoYXNEdXBsaWNhdGU7Ci0KLSAgICBy
ZXR1cm4gZG9jdW1lbnQ7Ci19OwotCi1TaXp6bGUubWF0Y2hlcyA9IGZ1bmN0aW9uKCBleHByLCBl
bGVtZW50cyApIHsKLSAgICByZXR1cm4gU2l6emxlKCBleHByLCBudWxsLCBudWxsLCBlbGVtZW50
cyApOwotfTsKLQotU2l6emxlLm1hdGNoZXNTZWxlY3RvciA9IGZ1bmN0aW9uKCBlbGVtLCBleHBy
ICkgewotICAgIC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZAotICAgIGlmICggKCBlbGVt
Lm93bmVyRG9jdW1lbnQgfHwgZWxlbSApICE9PSBkb2N1bWVudCApIHsKLSAgICBzZXREb2N1bWVu
dCggZWxlbSApOwotICAgIH0KLQotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGF0dHJpYnV0ZSBzZWxl
Y3RvcnMgYXJlIHF1b3RlZAotICAgIGV4cHIgPSBleHByLnJlcGxhY2UoIHJhdHRyaWJ1dGVRdW90
ZXMsICI9JyQxJ10iICk7Ci0KLSAgICAvLyByYnVnZ3lRU0EgYWx3YXlzIGNvbnRhaW5zIDpmb2N1
cywgc28gbm8gbmVlZCBmb3IgYW4gZXhpc3RlbmNlIGNoZWNrCi0gICAgaWYgKCBzdXBwb3J0Lm1h
dGNoZXNTZWxlY3RvciAmJiAhZG9jdW1lbnRJc1hNTCAmJiAoIXJidWdneU1hdGNoZXMgfHwgIXJi
dWdneU1hdGNoZXMudGVzdChleHByKSkgJiYgIXJidWdneVFTQS50ZXN0KGV4cHIpICkgewotICAg
IHRyeSB7Ci0gICAgdmFyIHJldCA9IG1hdGNoZXMuY2FsbCggZWxlbSwgZXhwciApOwotCi0gICAg
Ly8gSUUgOSdzIG1hdGNoZXNTZWxlY3RvciByZXR1cm5zIGZhbHNlIG9uIGRpc2Nvbm5lY3RlZCBu
b2RlcwotICAgIGlmICggcmV0IHx8IHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggfHwKLSAgICAv
LyBBcyB3ZWxsLCBkaXNjb25uZWN0ZWQgbm9kZXMgYXJlIHNhaWQgdG8gYmUgaW4gYSBkb2N1bWVu
dAotICAgIC8vIGZyYWdtZW50IGluIElFIDkKLSAgICBlbGVtLmRvY3VtZW50ICYmIGVsZW0uZG9j
dW1lbnQubm9kZVR5cGUgIT09IDExICkgewotICAgIHJldHVybiByZXQ7Ci0gICAgfQotICAgIH0g
Y2F0Y2goZSkge30KLSAgICB9Ci0KLSAgICByZXR1cm4gU2l6emxlKCBleHByLCBkb2N1bWVudCwg
bnVsbCwgW2VsZW1dICkubGVuZ3RoID4gMDsKLX07Ci0KLVNpenpsZS5jb250YWlucyA9IGZ1bmN0
aW9uKCBjb250ZXh0LCBlbGVtICkgewotICAgIC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRl
ZAotICAgIGlmICggKCBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCApICE9PSBkb2N1
bWVudCApIHsKLSAgICBzZXREb2N1bWVudCggY29udGV4dCApOwotICAgIH0KLSAgICByZXR1cm4g
Y29udGFpbnMoIGNvbnRleHQsIGVsZW0gKTsKLX07Ci0KLVNpenpsZS5hdHRyID0gZnVuY3Rpb24o
IGVsZW0sIG5hbWUgKSB7Ci0gICAgdmFyIHZhbDsKLQotICAgIC8vIFNldCBkb2N1bWVudCB2YXJz
IGlmIG5lZWRlZAotICAgIGlmICggKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSApICE9PSBk
b2N1bWVudCApIHsKLSAgICBzZXREb2N1bWVudCggZWxlbSApOwotICAgIH0KLQotICAgIGlmICgg
IWRvY3VtZW50SXNYTUwgKSB7Ci0gICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTsKLSAgICB9
Ci0gICAgaWYgKCAodmFsID0gRXhwci5hdHRySGFuZGxlWyBuYW1lIF0pICkgewotICAgIHJldHVy
biB2YWwoIGVsZW0gKTsKLSAgICB9Ci0gICAgaWYgKCBkb2N1bWVudElzWE1MIHx8IHN1cHBvcnQu
YXR0cmlidXRlcyApIHsKLSAgICByZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKTsKLSAg
ICB9Ci0gICAgcmV0dXJuICggKHZhbCA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggbmFtZSApKSB8
fCBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApICkgJiYgZWxlbVsgbmFtZSBdID09PSB0cnVlID8K
LSAgICBuYW1lIDoKLSAgICB2YWwgJiYgdmFsLnNwZWNpZmllZCA/IHZhbC52YWx1ZSA6IG51bGw7
Ci19OwotCi1TaXp6bGUuZXJyb3IgPSBmdW5jdGlvbiggbXNnICkgewotICAgIHRocm93IG5ldyBF
cnJvciggIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIgKyBtc2cgKTsK
LX07Ci0KLS8vIERvY3VtZW50IHNvcnRpbmcgYW5kIHJlbW92aW5nIGR1cGxpY2F0ZXMKLVNpenps
ZS51bmlxdWVTb3J0ID0gZnVuY3Rpb24oIHJlc3VsdHMgKSB7Ci0gICAgdmFyIGVsZW0sCi0gICAg
ZHVwbGljYXRlcyA9IFtdLAotICAgIGkgPSAxLAotICAgIGogPSAwOwotCi0gICAgLy8gVW5sZXNz
IHdlICprbm93KiB3ZSBjYW4gZGV0ZWN0IGR1cGxpY2F0ZXMsIGFzc3VtZSB0aGVpciBwcmVzZW5j
ZQotICAgIGhhc0R1cGxpY2F0ZSA9ICFzdXBwb3J0LmRldGVjdER1cGxpY2F0ZXM7Ci0gICAgcmVz
dWx0cy5zb3J0KCBzb3J0T3JkZXIgKTsKLQotICAgIGlmICggaGFzRHVwbGljYXRlICkgewotICAg
IGZvciAoIDsgKGVsZW0gPSByZXN1bHRzW2ldKTsgaSsrICkgewotICAgIGlmICggZWxlbSA9PT0g
cmVzdWx0c1sgaSAtIDEgXSApIHsKLSAgICBqID0gZHVwbGljYXRlcy5wdXNoKCBpICk7Ci0gICAg
fQotICAgIH0KLSAgICB3aGlsZSAoIGotLSApIHsKLSAgICByZXN1bHRzLnNwbGljZSggZHVwbGlj
YXRlc1sgaiBdLCAxICk7Ci0gICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXN1bHRzOwotfTsK
LQotZnVuY3Rpb24gc2libGluZ0NoZWNrKCBhLCBiICkgewotICAgIHZhciBjdXIgPSBiICYmIGEs
Ci0gICAgZGlmZiA9IGN1ciAmJiAoIH5iLnNvdXJjZUluZGV4IHx8IE1BWF9ORUdBVElWRSApIC0g
KCB+YS5zb3VyY2VJbmRleCB8fCBNQVhfTkVHQVRJVkUgKTsKLQotICAgIC8vIFVzZSBJRSBzb3Vy
Y2VJbmRleCBpZiBhdmFpbGFibGUgb24gYm90aCBub2RlcwotICAgIGlmICggZGlmZiApIHsKLSAg
ICByZXR1cm4gZGlmZjsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayBpZiBiIGZvbGxvd3MgYQotICAg
IGlmICggY3VyICkgewotICAgIHdoaWxlICggKGN1ciA9IGN1ci5uZXh0U2libGluZykgKSB7Ci0g
ICAgaWYgKCBjdXIgPT09IGIgKSB7Ci0gICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIGEgPyAxIDogLTE7Ci19Ci0KLS8vIFJldHVybnMgYSBmdW5jdGlvbiB0
byB1c2UgaW4gcHNldWRvcyBmb3IgaW5wdXQgdHlwZXMKLWZ1bmN0aW9uIGNyZWF0ZUlucHV0UHNl
dWRvKCB0eXBlICkgewotICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICB2YXIgbmFt
ZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKLSAgICByZXR1cm4gbmFtZSA9PT0gImlu
cHV0IiAmJiBlbGVtLnR5cGUgPT09IHR5cGU7Ci0gICAgfTsKLX0KLQotLy8gUmV0dXJucyBhIGZ1
bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBidXR0b25zCi1mdW5jdGlvbiBjcmVhdGVCdXR0
b25Qc2V1ZG8oIHR5cGUgKSB7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgewotICAgIHZh
ciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOwotICAgIHJldHVybiAobmFtZSA9
PT0gImlucHV0IiB8fCBuYW1lID09PSAiYnV0dG9uIikgJiYgZWxlbS50eXBlID09PSB0eXBlOwot
ICAgIH07Ci19Ci0KLS8vIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3Ig
cG9zaXRpb25hbHMKLWZ1bmN0aW9uIGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZuICkgewotICAg
IHJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIGFyZ3VtZW50ICkgewotICAgIGFyZ3VtZW50
ID0gK2FyZ3VtZW50OwotICAgIHJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1h
dGNoZXMgKSB7Ci0gICAgdmFyIGosCi0gICAgbWF0Y2hJbmRleGVzID0gZm4oIFtdLCBzZWVkLmxl
bmd0aCwgYXJndW1lbnQgKSwKLSAgICBpID0gbWF0Y2hJbmRleGVzLmxlbmd0aDsKLQotICAgIC8v
IE1hdGNoIGVsZW1lbnRzIGZvdW5kIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhlcwotICAgIHdoaWxl
ICggaS0tICkgewotICAgIGlmICggc2VlZFsgKGogPSBtYXRjaEluZGV4ZXNbaV0pIF0gKSB7Ci0g
ICAgc2VlZFtqXSA9ICEobWF0Y2hlc1tqXSA9IHNlZWRbal0pOwotICAgIH0KLSAgICB9Ci0gICAg
fSk7Ci0gICAgfSk7Ci19Ci0KLS8qKgotICogVXRpbGl0eSBmdW5jdGlvbiBmb3IgcmV0cmlldmlu
ZyB0aGUgdGV4dCB2YWx1ZSBvZiBhbiBhcnJheSBvZiBET00gbm9kZXMKLSAqIEBwYXJhbSB7QXJy
YXl8RWxlbWVudH0gZWxlbQotICovCi1nZXRUZXh0ID0gU2l6emxlLmdldFRleHQgPSBmdW5jdGlv
biggZWxlbSApIHsKLSAgICB2YXIgbm9kZSwKLSAgICByZXQgPSAiIiwKLSAgICBpID0gMCwKLSAg
ICBub2RlVHlwZSA9IGVsZW0ubm9kZVR5cGU7Ci0KLSAgICBpZiAoICFub2RlVHlwZSApIHsKLSAg
ICAvLyBJZiBubyBub2RlVHlwZSwgdGhpcyBpcyBleHBlY3RlZCB0byBiZSBhbiBhcnJheQotICAg
IGZvciAoIDsgKG5vZGUgPSBlbGVtW2ldKTsgaSsrICkgewotICAgIC8vIERvIG5vdCB0cmF2ZXJz
ZSBjb21tZW50IG5vZGVzCi0gICAgcmV0ICs9IGdldFRleHQoIG5vZGUgKTsKLSAgICB9Ci0gICAg
fSBlbHNlIGlmICggbm9kZVR5cGUgPT09IDEgfHwgbm9kZVR5cGUgPT09IDkgfHwgbm9kZVR5cGUg
PT09IDExICkgewotICAgIC8vIFVzZSB0ZXh0Q29udGVudCBmb3IgZWxlbWVudHMKLSAgICAvLyBp
bm5lclRleHQgdXNhZ2UgcmVtb3ZlZCBmb3IgY29uc2lzdGVuY3kgb2YgbmV3IGxpbmVzIChzZWUg
IzExMTUzKQotICAgIGlmICggdHlwZW9mIGVsZW0udGV4dENvbnRlbnQgPT09ICJzdHJpbmciICkg
ewotICAgIHJldHVybiBlbGVtLnRleHRDb250ZW50OwotICAgIH0gZWxzZSB7Ci0gICAgLy8gVHJh
dmVyc2UgaXRzIGNoaWxkcmVuCi0gICAgZm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxl
bTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7Ci0gICAgcmV0ICs9IGdldFRleHQoIGVsZW0g
KTsKLSAgICB9Ci0gICAgfQotICAgIH0gZWxzZSBpZiAoIG5vZGVUeXBlID09PSAzIHx8IG5vZGVU
eXBlID09PSA0ICkgewotICAgIHJldHVybiBlbGVtLm5vZGVWYWx1ZTsKLSAgICB9Ci0gICAgLy8g
RG8gbm90IGluY2x1ZGUgY29tbWVudCBvciBwcm9jZXNzaW5nIGluc3RydWN0aW9uIG5vZGVzCi0K
LSAgICByZXR1cm4gcmV0OwotfTsKLQotRXhwciA9IFNpenpsZS5zZWxlY3RvcnMgPSB7Ci0KLSAg
ICAvLyBDYW4gYmUgYWRqdXN0ZWQgYnkgdGhlIHVzZXIKLSAgICBjYWNoZUxlbmd0aDogNTAsCi0K
LSAgICBjcmVhdGVQc2V1ZG86IG1hcmtGdW5jdGlvbiwKLQotICAgIG1hdGNoOiBtYXRjaEV4cHIs
Ci0KLSAgICBmaW5kOiB7fSwKLQotICAgIHJlbGF0aXZlOiB7Ci0gICAgIj4iOiB7IGRpcjogInBh
cmVudE5vZGUiLCBmaXJzdDogdHJ1ZSB9LAotICAgICIgIjogeyBkaXI6ICJwYXJlbnROb2RlIiB9
LAotICAgICIrIjogeyBkaXI6ICJwcmV2aW91c1NpYmxpbmciLCBmaXJzdDogdHJ1ZSB9LAotICAg
ICJ+IjogeyBkaXI6ICJwcmV2aW91c1NpYmxpbmciIH0KLSAgICB9LAotCi0gICAgcHJlRmlsdGVy
OiB7Ci0gICAgIkFUVFIiOiBmdW5jdGlvbiggbWF0Y2ggKSB7Ci0gICAgbWF0Y2hbMV0gPSBtYXRj
aFsxXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApOwotCi0gICAgLy8gTW92ZSB0aGUg
Z2l2ZW4gdmFsdWUgdG8gbWF0Y2hbM10gd2hldGhlciBxdW90ZWQgb3IgdW5xdW90ZWQKLSAgICBt
YXRjaFszXSA9ICggbWF0Y2hbNF0gfHwgbWF0Y2hbNV0gfHwgIiIgKS5yZXBsYWNlKCBydW5lc2Nh
cGUsIGZ1bmVzY2FwZSApOwotCi0gICAgaWYgKCBtYXRjaFsyXSA9PT0gIn49IiApIHsKLSAgICBt
YXRjaFszXSA9ICIgIiArIG1hdGNoWzNdICsgIiAiOwotICAgIH0KLQotICAgIHJldHVybiBtYXRj
aC5zbGljZSggMCwgNCApOwotICAgIH0sCi0KLSAgICAiQ0hJTEQiOiBmdW5jdGlvbiggbWF0Y2gg
KSB7Ci0gICAgLyogbWF0Y2hlcyBmcm9tIG1hdGNoRXhwclsiQ0hJTEQiXQotICAgIDEgdHlwZSAo
b25seXxudGh8Li4uKQotICAgIDIgd2hhdCAoY2hpbGR8b2YtdHlwZSkKLSAgICAzIGFyZ3VtZW50
IChldmVufG9kZHxcZCp8XGQqbihbKy1dXGQrKT98Li4uKQotICAgIDQgeG4tY29tcG9uZW50IG9m
IHhuK3kgYXJndW1lbnQgKFsrLV0/XGQqbnwpCi0gICAgNSBzaWduIG9mIHhuLWNvbXBvbmVudAot
ICAgIDYgeCBvZiB4bi1jb21wb25lbnQKLSAgICA3IHNpZ24gb2YgeS1jb21wb25lbnQKLSAgICA4
IHkgb2YgeS1jb21wb25lbnQKLSAgICAqLwotICAgIG1hdGNoWzFdID0gbWF0Y2hbMV0udG9Mb3dl
ckNhc2UoKTsKLQotICAgIGlmICggbWF0Y2hbMV0uc2xpY2UoIDAsIDMgKSA9PT0gIm50aCIgKSB7
Ci0gICAgLy8gbnRoLSogcmVxdWlyZXMgYXJndW1lbnQKLSAgICBpZiAoICFtYXRjaFszXSApIHsK
LSAgICBTaXp6bGUuZXJyb3IoIG1hdGNoWzBdICk7Ci0gICAgfQotCi0gICAgLy8gbnVtZXJpYyB4
IGFuZCB5IHBhcmFtZXRlcnMgZm9yIEV4cHIuZmlsdGVyLkNISUxECi0gICAgLy8gcmVtZW1iZXIg
dGhhdCBmYWxzZS90cnVlIGNhc3QgcmVzcGVjdGl2ZWx5IHRvIDAvMQotICAgIG1hdGNoWzRdID0g
KyggbWF0Y2hbNF0gPyBtYXRjaFs1XSArIChtYXRjaFs2XSB8fCAxKSA6IDIgKiAoIG1hdGNoWzNd
ID09PSAiZXZlbiIgfHwgbWF0Y2hbM10gPT09ICJvZGQiICkgKTsKLSAgICBtYXRjaFs1XSA9ICso
ICggbWF0Y2hbN10gKyBtYXRjaFs4XSApIHx8IG1hdGNoWzNdID09PSAib2RkIiApOwotCi0gICAg
Ly8gb3RoZXIgdHlwZXMgcHJvaGliaXQgYXJndW1lbnRzCi0gICAgfSBlbHNlIGlmICggbWF0Y2hb
M10gKSB7Ci0gICAgU2l6emxlLmVycm9yKCBtYXRjaFswXSApOwotICAgIH0KLQotICAgIHJldHVy
biBtYXRjaDsKLSAgICB9LAotCi0gICAgIlBTRVVETyI6IGZ1bmN0aW9uKCBtYXRjaCApIHsKLSAg
ICB2YXIgZXhjZXNzLAotICAgIHVucXVvdGVkID0gIW1hdGNoWzVdICYmIG1hdGNoWzJdOwotCi0g
ICAgaWYgKCBtYXRjaEV4cHJbIkNISUxEIl0udGVzdCggbWF0Y2hbMF0gKSApIHsKLSAgICByZXR1
cm4gbnVsbDsKLSAgICB9Ci0KLSAgICAvLyBBY2NlcHQgcXVvdGVkIGFyZ3VtZW50cyBhcy1pcwot
ICAgIGlmICggbWF0Y2hbNF0gKSB7Ci0gICAgbWF0Y2hbMl0gPSBtYXRjaFs0XTsKLQotICAgIC8v
IFN0cmlwIGV4Y2VzcyBjaGFyYWN0ZXJzIGZyb20gdW5xdW90ZWQgYXJndW1lbnRzCi0gICAgfSBl
bHNlIGlmICggdW5xdW90ZWQgJiYgcnBzZXVkby50ZXN0KCB1bnF1b3RlZCApICYmCi0gICAgLy8g
R2V0IGV4Y2VzcyBmcm9tIHRva2VuaXplIChyZWN1cnNpdmVseSkKLSAgICAoZXhjZXNzID0gdG9r
ZW5pemUoIHVucXVvdGVkLCB0cnVlICkpICYmCi0gICAgLy8gYWR2YW5jZSB0byB0aGUgbmV4dCBj
bG9zaW5nIHBhcmVudGhlc2lzCi0gICAgKGV4Y2VzcyA9IHVucXVvdGVkLmluZGV4T2YoICIpIiwg
dW5xdW90ZWQubGVuZ3RoIC0gZXhjZXNzICkgLSB1bnF1b3RlZC5sZW5ndGgpICkgewotCi0gICAg
Ly8gZXhjZXNzIGlzIGEgbmVnYXRpdmUgaW5kZXgKLSAgICBtYXRjaFswXSA9IG1hdGNoWzBdLnNs
aWNlKCAwLCBleGNlc3MgKTsKLSAgICBtYXRjaFsyXSA9IHVucXVvdGVkLnNsaWNlKCAwLCBleGNl
c3MgKTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gb25seSBjYXB0dXJlcyBuZWVkZWQgYnkgdGhl
IHBzZXVkbyBmaWx0ZXIgbWV0aG9kICh0eXBlIGFuZCBhcmd1bWVudCkKLSAgICByZXR1cm4gbWF0
Y2guc2xpY2UoIDAsIDMgKTsKLSAgICB9Ci0gICAgfSwKLQotICAgIGZpbHRlcjogewotCi0gICAg
IlRBRyI6IGZ1bmN0aW9uKCBub2RlTmFtZSApIHsKLSAgICBpZiAoIG5vZGVOYW1lID09PSAiKiIg
KSB7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKCkgeyByZXR1cm4gdHJ1ZTsgfTsKLSAgICB9Ci0KLSAg
ICBub2RlTmFtZSA9IG5vZGVOYW1lLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICkudG9M
b3dlckNhc2UoKTsKLSAgICByZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgcmV0dXJuIGVs
ZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBub2RlTmFtZTsK
LSAgICB9OwotICAgIH0sCi0KLSAgICAiQ0xBU1MiOiBmdW5jdGlvbiggY2xhc3NOYW1lICkgewot
ICAgIHZhciBwYXR0ZXJuID0gY2xhc3NDYWNoZVsgY2xhc3NOYW1lICsgIiAiIF07Ci0KLSAgICBy
ZXR1cm4gcGF0dGVybiB8fAotICAgIChwYXR0ZXJuID0gbmV3IFJlZ0V4cCggIihefCIgKyB3aGl0
ZXNwYWNlICsgIikiICsgY2xhc3NOYW1lICsgIigiICsgd2hpdGVzcGFjZSArICJ8JCkiICkpICYm
Ci0gICAgY2xhc3NDYWNoZSggY2xhc3NOYW1lLCBmdW5jdGlvbiggZWxlbSApIHsKLSAgICByZXR1
cm4gcGF0dGVybi50ZXN0KCBlbGVtLmNsYXNzTmFtZSB8fCAodHlwZW9mIGVsZW0uZ2V0QXR0cmli
dXRlICE9PSBzdHJ1bmRlZmluZWQgJiYgZWxlbS5nZXRBdHRyaWJ1dGUoImNsYXNzIikpIHx8ICIi
ICk7Ci0gICAgfSk7Ci0gICAgfSwKLQotICAgICJBVFRSIjogZnVuY3Rpb24oIG5hbWUsIG9wZXJh
dG9yLCBjaGVjayApIHsKLSAgICByZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgdmFyIHJl
c3VsdCA9IFNpenpsZS5hdHRyKCBlbGVtLCBuYW1lICk7Ci0KLSAgICBpZiAoIHJlc3VsdCA9PSBu
dWxsICkgewotICAgIHJldHVybiBvcGVyYXRvciA9PT0gIiE9IjsKLSAgICB9Ci0gICAgaWYgKCAh
b3BlcmF0b3IgKSB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmVzdWx0ICs9ICIi
OwotCi0gICAgcmV0dXJuIG9wZXJhdG9yID09PSAiPSIgPyByZXN1bHQgPT09IGNoZWNrIDoKLSAg
ICBvcGVyYXRvciA9PT0gIiE9IiA/IHJlc3VsdCAhPT0gY2hlY2sgOgotICAgIG9wZXJhdG9yID09
PSAiXj0iID8gY2hlY2sgJiYgcmVzdWx0LmluZGV4T2YoIGNoZWNrICkgPT09IDAgOgotICAgIG9w
ZXJhdG9yID09PSAiKj0iID8gY2hlY2sgJiYgcmVzdWx0LmluZGV4T2YoIGNoZWNrICkgPiAtMSA6
Ci0gICAgb3BlcmF0b3IgPT09ICIkPSIgPyBjaGVjayAmJiByZXN1bHQuc2xpY2UoIC1jaGVjay5s
ZW5ndGggKSA9PT0gY2hlY2sgOgotICAgIG9wZXJhdG9yID09PSAifj0iID8gKCAiICIgKyByZXN1
bHQgKyAiICIgKS5pbmRleE9mKCBjaGVjayApID4gLTEgOgotICAgIG9wZXJhdG9yID09PSAifD0i
ID8gcmVzdWx0ID09PSBjaGVjayB8fCByZXN1bHQuc2xpY2UoIDAsIGNoZWNrLmxlbmd0aCArIDEg
KSA9PT0gY2hlY2sgKyAiLSIgOgotICAgIGZhbHNlOwotICAgIH07Ci0gICAgfSwKLQotICAgICJD
SElMRCI6IGZ1bmN0aW9uKCB0eXBlLCB3aGF0LCBhcmd1bWVudCwgZmlyc3QsIGxhc3QgKSB7Ci0g
ICAgdmFyIHNpbXBsZSA9IHR5cGUuc2xpY2UoIDAsIDMgKSAhPT0gIm50aCIsCi0gICAgZm9yd2Fy
ZCA9IHR5cGUuc2xpY2UoIC00ICkgIT09ICJsYXN0IiwKLSAgICBvZlR5cGUgPSB3aGF0ID09PSAi
b2YtdHlwZSI7Ci0KLSAgICByZXR1cm4gZmlyc3QgPT09IDEgJiYgbGFzdCA9PT0gMCA/Ci0KLSAg
ICAvLyBTaG9ydGN1dCBmb3IgOm50aC0qKG4pCi0gICAgZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAg
cmV0dXJuICEhZWxlbS5wYXJlbnROb2RlOwotICAgIH0gOgotCi0gICAgZnVuY3Rpb24oIGVsZW0s
IGNvbnRleHQsIHhtbCApIHsKLSAgICB2YXIgY2FjaGUsIG91dGVyQ2FjaGUsIG5vZGUsIGRpZmYs
IG5vZGVJbmRleCwgc3RhcnQsCi0gICAgZGlyID0gc2ltcGxlICE9PSBmb3J3YXJkID8gIm5leHRT
aWJsaW5nIiA6ICJwcmV2aW91c1NpYmxpbmciLAotICAgIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9k
ZSwKLSAgICBuYW1lID0gb2ZUeXBlICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSwKLSAg
ICB1c2VDYWNoZSA9ICF4bWwgJiYgIW9mVHlwZTsKLQotICAgIGlmICggcGFyZW50ICkgewotCi0g
ICAgLy8gOihmaXJzdHxsYXN0fG9ubHkpLShjaGlsZHxvZi10eXBlKQotICAgIGlmICggc2ltcGxl
ICkgewotICAgIHdoaWxlICggZGlyICkgewotICAgIG5vZGUgPSBlbGVtOwotICAgIHdoaWxlICgg
KG5vZGUgPSBub2RlWyBkaXIgXSkgKSB7Ci0gICAgaWYgKCBvZlR5cGUgPyBub2RlLm5vZGVOYW1l
LnRvTG93ZXJDYXNlKCkgPT09IG5hbWUgOiBub2RlLm5vZGVUeXBlID09PSAxICkgewotICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gICAgfQotICAgIC8vIFJldmVyc2UgZGlyZWN0aW9uIGZvciA6
b25seS0qIChpZiB3ZSBoYXZlbid0IHlldCBkb25lIHNvKQotICAgIHN0YXJ0ID0gZGlyID0gdHlw
ZSA9PT0gIm9ubHkiICYmICFzdGFydCAmJiAibmV4dFNpYmxpbmciOwotICAgIH0KLSAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBzdGFydCA9IFsgZm9yd2FyZCA/IHBhcmVudC5maXJzdENo
aWxkIDogcGFyZW50Lmxhc3RDaGlsZCBdOwotCi0gICAgLy8gbm9uLXhtbCA6bnRoLWNoaWxkKC4u
Likgc3RvcmVzIGNhY2hlIGRhdGEgb24gYHBhcmVudGAKLSAgICBpZiAoIGZvcndhcmQgJiYgdXNl
Q2FjaGUgKSB7Ci0gICAgLy8gU2VlayBgZWxlbWAgZnJvbSBhIHByZXZpb3VzbHktY2FjaGVkIGlu
ZGV4Ci0gICAgb3V0ZXJDYWNoZSA9IHBhcmVudFsgZXhwYW5kbyBdIHx8IChwYXJlbnRbIGV4cGFu
ZG8gXSA9IHt9KTsKLSAgICBjYWNoZSA9IG91dGVyQ2FjaGVbIHR5cGUgXSB8fCBbXTsKLSAgICBu
b2RlSW5kZXggPSBjYWNoZVswXSA9PT0gZGlycnVucyAmJiBjYWNoZVsxXTsKLSAgICBkaWZmID0g
Y2FjaGVbMF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVbMl07Ci0gICAgbm9kZSA9IG5vZGVJbmRleCAm
JiBwYXJlbnQuY2hpbGROb2Rlc1sgbm9kZUluZGV4IF07Ci0KLSAgICB3aGlsZSAoIChub2RlID0g
Kytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fAotCi0gICAgLy8gRmFsbGJhY2sg
dG8gc2Vla2luZyBgZWxlbWAgZnJvbSB0aGUgc3RhcnQKLSAgICAoZGlmZiA9IG5vZGVJbmRleCA9
IDApIHx8IHN0YXJ0LnBvcCgpKSApIHsKLQotICAgIC8vIFdoZW4gZm91bmQsIGNhY2hlIGluZGV4
ZXMgb24gYHBhcmVudGAgYW5kIGJyZWFrCi0gICAgaWYgKCBub2RlLm5vZGVUeXBlID09PSAxICYm
ICsrZGlmZiAmJiBub2RlID09PSBlbGVtICkgewotICAgIG91dGVyQ2FjaGVbIHR5cGUgXSA9IFsg
ZGlycnVucywgbm9kZUluZGV4LCBkaWZmIF07Ci0gICAgYnJlYWs7Ci0gICAgfQotICAgIH0KLQot
ICAgIC8vIFVzZSBwcmV2aW91c2x5LWNhY2hlZCBlbGVtZW50IGluZGV4IGlmIGF2YWlsYWJsZQot
ICAgIH0gZWxzZSBpZiAoIHVzZUNhY2hlICYmIChjYWNoZSA9IChlbGVtWyBleHBhbmRvIF0gfHwg
KGVsZW1bIGV4cGFuZG8gXSA9IHt9KSlbIHR5cGUgXSkgJiYgY2FjaGVbMF0gPT09IGRpcnJ1bnMg
KSB7Ci0gICAgZGlmZiA9IGNhY2hlWzFdOwotCi0gICAgLy8geG1sIDpudGgtY2hpbGQoLi4uKSBv
ciA6bnRoLWxhc3QtY2hpbGQoLi4uKSBvciA6bnRoKC1sYXN0KT8tb2YtdHlwZSguLi4pCi0gICAg
fSBlbHNlIHsKLSAgICAvLyBVc2UgdGhlIHNhbWUgbG9vcCBhcyBhYm92ZSB0byBzZWVrIGBlbGVt
YCBmcm9tIHRoZSBzdGFydAotICAgIHdoaWxlICggKG5vZGUgPSArK25vZGVJbmRleCAmJiBub2Rl
ICYmIG5vZGVbIGRpciBdIHx8Ci0gICAgKGRpZmYgPSBub2RlSW5kZXggPSAwKSB8fCBzdGFydC5w
b3AoKSkgKSB7Ci0KLSAgICBpZiAoICggb2ZUeXBlID8gbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2Fz
ZSgpID09PSBuYW1lIDogbm9kZS5ub2RlVHlwZSA9PT0gMSApICYmICsrZGlmZiApIHsKLSAgICAv
LyBDYWNoZSB0aGUgaW5kZXggb2YgZWFjaCBlbmNvdW50ZXJlZCBlbGVtZW50Ci0gICAgaWYgKCB1
c2VDYWNoZSApIHsKLSAgICAobm9kZVsgZXhwYW5kbyBdIHx8IChub2RlWyBleHBhbmRvIF0gPSB7
fSkpWyB0eXBlIF0gPSBbIGRpcnJ1bnMsIGRpZmYgXTsKLSAgICB9Ci0KLSAgICBpZiAoIG5vZGUg
PT09IGVsZW0gKSB7Ci0gICAgYnJlYWs7Ci0gICAgfQotICAgIH0KLSAgICB9Ci0gICAgfQotCi0g
ICAgLy8gSW5jb3Jwb3JhdGUgdGhlIG9mZnNldCwgdGhlbiBjaGVjayBhZ2FpbnN0IGN5Y2xlIHNp
emUKLSAgICBkaWZmIC09IGxhc3Q7Ci0gICAgcmV0dXJuIGRpZmYgPT09IGZpcnN0IHx8ICggZGlm
ZiAlIGZpcnN0ID09PSAwICYmIGRpZmYgLyBmaXJzdCA+PSAwICk7Ci0gICAgfQotICAgIH07Ci0g
ICAgfSwKLQotICAgICJQU0VVRE8iOiBmdW5jdGlvbiggcHNldWRvLCBhcmd1bWVudCApIHsKLSAg
ICAvLyBwc2V1ZG8tY2xhc3MgbmFtZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUKLSAgICAvLyBodHRw
Oi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI3BzZXVkby1jbGFzc2VzCi0gICAgLy8gUHJpb3Jp
dGl6ZSBieSBjYXNlIHNlbnNpdGl2aXR5IGluIGNhc2UgY3VzdG9tIHBzZXVkb3MgYXJlIGFkZGVk
IHdpdGggdXBwZXJjYXNlIGxldHRlcnMKLSAgICAvLyBSZW1lbWJlciB0aGF0IHNldEZpbHRlcnMg
aW5oZXJpdHMgZnJvbSBwc2V1ZG9zCi0gICAgdmFyIGFyZ3MsCi0gICAgZm4gPSBFeHByLnBzZXVk
b3NbIHBzZXVkbyBdIHx8IEV4cHIuc2V0RmlsdGVyc1sgcHNldWRvLnRvTG93ZXJDYXNlKCkgXSB8
fAotICAgIFNpenpsZS5lcnJvciggInVuc3VwcG9ydGVkIHBzZXVkbzogIiArIHBzZXVkbyApOwot
Ci0gICAgLy8gVGhlIHVzZXIgbWF5IHVzZSBjcmVhdGVQc2V1ZG8gdG8gaW5kaWNhdGUgdGhhdAot
ICAgIC8vIGFyZ3VtZW50cyBhcmUgbmVlZGVkIHRvIGNyZWF0ZSB0aGUgZmlsdGVyIGZ1bmN0aW9u
Ci0gICAgLy8ganVzdCBhcyBTaXp6bGUgZG9lcwotICAgIGlmICggZm5bIGV4cGFuZG8gXSApIHsK
LSAgICByZXR1cm4gZm4oIGFyZ3VtZW50ICk7Ci0gICAgfQotCi0gICAgLy8gQnV0IG1haW50YWlu
IHN1cHBvcnQgZm9yIG9sZCBzaWduYXR1cmVzCi0gICAgaWYgKCBmbi5sZW5ndGggPiAxICkgewot
ICAgIGFyZ3MgPSBbIHBzZXVkbywgcHNldWRvLCAiIiwgYXJndW1lbnQgXTsKLSAgICByZXR1cm4g
RXhwci5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KCBwc2V1ZG8udG9Mb3dlckNhc2UoKSApID8K
LSAgICBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7Ci0gICAgdmFyIGlk
eCwKLSAgICBtYXRjaGVkID0gZm4oIHNlZWQsIGFyZ3VtZW50ICksCi0gICAgaSA9IG1hdGNoZWQu
bGVuZ3RoOwotICAgIHdoaWxlICggaS0tICkgewotICAgIGlkeCA9IGluZGV4T2YuY2FsbCggc2Vl
ZCwgbWF0Y2hlZFtpXSApOwotICAgIHNlZWRbIGlkeCBdID0gISggbWF0Y2hlc1sgaWR4IF0gPSBt
YXRjaGVkW2ldICk7Ci0gICAgfQotICAgIH0pIDoKLSAgICBmdW5jdGlvbiggZWxlbSApIHsKLSAg
ICByZXR1cm4gZm4oIGVsZW0sIDAsIGFyZ3MgKTsKLSAgICB9OwotICAgIH0KLQotICAgIHJldHVy
biBmbjsKLSAgICB9Ci0gICAgfSwKLQotICAgIHBzZXVkb3M6IHsKLSAgICAvLyBQb3RlbnRpYWxs
eSBjb21wbGV4IHBzZXVkb3MKLSAgICAibm90IjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWxl
Y3RvciApIHsKLSAgICAvLyBUcmltIHRoZSBzZWxlY3RvciBwYXNzZWQgdG8gY29tcGlsZQotICAg
IC8vIHRvIGF2b2lkIHRyZWF0aW5nIGxlYWRpbmcgYW5kIHRyYWlsaW5nCi0gICAgLy8gc3BhY2Vz
IGFzIGNvbWJpbmF0b3JzCi0gICAgdmFyIGlucHV0ID0gW10sCi0gICAgcmVzdWx0cyA9IFtdLAot
ICAgIG1hdGNoZXIgPSBjb21waWxlKCBzZWxlY3Rvci5yZXBsYWNlKCBydHJpbSwgIiQxIiApICk7
Ci0KLSAgICByZXR1cm4gbWF0Y2hlclsgZXhwYW5kbyBdID8KLSAgICBtYXJrRnVuY3Rpb24oZnVu
Y3Rpb24oIHNlZWQsIG1hdGNoZXMsIGNvbnRleHQsIHhtbCApIHsKLSAgICB2YXIgZWxlbSwKLSAg
ICB1bm1hdGNoZWQgPSBtYXRjaGVyKCBzZWVkLCBudWxsLCB4bWwsIFtdICksCi0gICAgaSA9IHNl
ZWQubGVuZ3RoOwotCi0gICAgLy8gTWF0Y2ggZWxlbWVudHMgdW5tYXRjaGVkIGJ5IGBtYXRjaGVy
YAotICAgIHdoaWxlICggaS0tICkgewotICAgIGlmICggKGVsZW0gPSB1bm1hdGNoZWRbaV0pICkg
ewotICAgIHNlZWRbaV0gPSAhKG1hdGNoZXNbaV0gPSBlbGVtKTsKLSAgICB9Ci0gICAgfQotICAg
IH0pIDoKLSAgICBmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkgewotICAgIGlucHV0WzBd
ID0gZWxlbTsKLSAgICBtYXRjaGVyKCBpbnB1dCwgbnVsbCwgeG1sLCByZXN1bHRzICk7Ci0gICAg
cmV0dXJuICFyZXN1bHRzLnBvcCgpOwotICAgIH07Ci0gICAgfSksCi0KLSAgICAiaGFzIjogbWFy
a0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKLSAgICByZXR1cm4gZnVuY3Rpb24oIGVs
ZW0gKSB7Ci0gICAgcmV0dXJuIFNpenpsZSggc2VsZWN0b3IsIGVsZW0gKS5sZW5ndGggPiAwOwot
ICAgIH07Ci0gICAgfSksCi0KLSAgICAiY29udGFpbnMiOiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24o
IHRleHQgKSB7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgewotICAgIHJldHVybiAoIGVs
ZW0udGV4dENvbnRlbnQgfHwgZWxlbS5pbm5lclRleHQgfHwgZ2V0VGV4dCggZWxlbSApICkuaW5k
ZXhPZiggdGV4dCApID4gLTE7Ci0gICAgfTsKLSAgICB9KSwKLQotICAgIC8vICJXaGV0aGVyIGFu
IGVsZW1lbnQgaXMgcmVwcmVzZW50ZWQgYnkgYSA6bGFuZygpIHNlbGVjdG9yCi0gICAgLy8gaXMg
YmFzZWQgc29sZWx5IG9uIHRoZSBlbGVtZW50J3MgbGFuZ3VhZ2UgdmFsdWUKLSAgICAvLyBiZWlu
ZyBlcXVhbCB0byB0aGUgaWRlbnRpZmllciBDLAotICAgIC8vIG9yIGJlZ2lubmluZyB3aXRoIHRo
ZSBpZGVudGlmaWVyIEMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgIi0iLgotICAgIC8vIFRoZSBt
YXRjaGluZyBvZiBDIGFnYWluc3QgdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZSBpcyBwZXJm
b3JtZWQgY2FzZS1pbnNlbnNpdGl2ZWx5LgotICAgIC8vIFRoZSBpZGVudGlmaWVyIEMgZG9lcyBu
b3QgaGF2ZSB0byBiZSBhIHZhbGlkIGxhbmd1YWdlIG5hbWUuIgotICAgIC8vIGh0dHA6Ly93d3cu
dzMub3JnL1RSL3NlbGVjdG9ycy8jbGFuZy1wc2V1ZG8KLSAgICAibGFuZyI6IG1hcmtGdW5jdGlv
biggZnVuY3Rpb24oIGxhbmcgKSB7Ci0gICAgLy8gbGFuZyB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQg
aWRlbnRpZmlkZXIKLSAgICBpZiAoICFyaWRlbnRpZmllci50ZXN0KGxhbmcgfHwgIiIpICkgewot
ICAgIFNpenpsZS5lcnJvciggInVuc3VwcG9ydGVkIGxhbmc6ICIgKyBsYW5nICk7Ci0gICAgfQot
ICAgIGxhbmcgPSBsYW5nLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICkudG9Mb3dlckNh
c2UoKTsKLSAgICByZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgdmFyIGVsZW1MYW5nOwot
ICAgIGRvIHsKLSAgICBpZiAoIChlbGVtTGFuZyA9IGRvY3VtZW50SXNYTUwgPwotICAgIGVsZW0u
Z2V0QXR0cmlidXRlKCJ4bWw6bGFuZyIpIHx8IGVsZW0uZ2V0QXR0cmlidXRlKCJsYW5nIikgOgot
ICAgIGVsZW0ubGFuZykgKSB7Ci0KLSAgICBlbGVtTGFuZyA9IGVsZW1MYW5nLnRvTG93ZXJDYXNl
KCk7Ci0gICAgcmV0dXJuIGVsZW1MYW5nID09PSBsYW5nIHx8IGVsZW1MYW5nLmluZGV4T2YoIGxh
bmcgKyAiLSIgKSA9PT0gMDsKLSAgICB9Ci0gICAgfSB3aGlsZSAoIChlbGVtID0gZWxlbS5wYXJl
bnROb2RlKSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICAg
IH07Ci0gICAgfSksCi0KLSAgICAvLyBNaXNjZWxsYW5lb3VzCi0gICAgInRhcmdldCI6IGZ1bmN0
aW9uKCBlbGVtICkgewotICAgIHZhciBoYXNoID0gd2luZG93LmxvY2F0aW9uICYmIHdpbmRvdy5s
b2NhdGlvbi5oYXNoOwotICAgIHJldHVybiBoYXNoICYmIGhhc2guc2xpY2UoIDEgKSA9PT0gZWxl
bS5pZDsKLSAgICB9LAotCi0gICAgInJvb3QiOiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICByZXR1
cm4gZWxlbSA9PT0gZG9jRWxlbTsKLSAgICB9LAotCi0gICAgImZvY3VzIjogZnVuY3Rpb24oIGVs
ZW0gKSB7Ci0gICAgcmV0dXJuIGVsZW0gPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgKCFk
b2N1bWVudC5oYXNGb2N1cyB8fCBkb2N1bWVudC5oYXNGb2N1cygpKSAmJiAhIShlbGVtLnR5cGUg
fHwgZWxlbS5ocmVmIHx8IH5lbGVtLnRhYkluZGV4KTsKLSAgICB9LAotCi0gICAgLy8gQm9vbGVh
biBwcm9wZXJ0aWVzCi0gICAgImVuYWJsZWQiOiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICByZXR1
cm4gZWxlbS5kaXNhYmxlZCA9PT0gZmFsc2U7Ci0gICAgfSwKLQotICAgICJkaXNhYmxlZCI6IGZ1
bmN0aW9uKCBlbGVtICkgewotICAgIHJldHVybiBlbGVtLmRpc2FibGVkID09PSB0cnVlOwotICAg
IH0sCi0KLSAgICAiY2hlY2tlZCI6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgIC8vIEluIENTUzMs
IDpjaGVja2VkIHNob3VsZCByZXR1cm4gYm90aCBjaGVja2VkIGFuZCBzZWxlY3RlZCBlbGVtZW50
cwotICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIw
MTEwOTI5LyNjaGVja2VkCi0gICAgdmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2Vy
Q2FzZSgpOwotICAgIHJldHVybiAobm9kZU5hbWUgPT09ICJpbnB1dCIgJiYgISFlbGVtLmNoZWNr
ZWQpIHx8IChub2RlTmFtZSA9PT0gIm9wdGlvbiIgJiYgISFlbGVtLnNlbGVjdGVkKTsKLSAgICB9
LAotCi0gICAgInNlbGVjdGVkIjogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgLy8gQWNjZXNzaW5n
IHRoaXMgcHJvcGVydHkgbWFrZXMgc2VsZWN0ZWQtYnktZGVmYXVsdAotICAgIC8vIG9wdGlvbnMg
aW4gU2FmYXJpIHdvcmsgcHJvcGVybHkKLSAgICBpZiAoIGVsZW0ucGFyZW50Tm9kZSApIHsKLSAg
ICBlbGVtLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDsKLSAgICB9Ci0KLSAgICByZXR1cm4gZWxl
bS5zZWxlY3RlZCA9PT0gdHJ1ZTsKLSAgICB9LAotCi0gICAgLy8gQ29udGVudHMKLSAgICAiZW1w
dHkiOiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxl
Y3RvcnMvI2VtcHR5LXBzZXVkbwotICAgIC8vIDplbXB0eSBpcyBvbmx5IGFmZmVjdGVkIGJ5IGVs
ZW1lbnQgbm9kZXMgYW5kIGNvbnRlbnQgbm9kZXMoaW5jbHVkaW5nIHRleHQoMyksIGNkYXRhKDQp
KSwKLSAgICAvLyAgIG5vdCBjb21tZW50LCBwcm9jZXNzaW5nIGluc3RydWN0aW9ucywgb3Igb3Ro
ZXJzCi0gICAgLy8gVGhhbmtzIHRvIERpZWdvIFBlcmluaSBmb3IgdGhlIG5vZGVOYW1lIHNob3J0
Y3V0Ci0gICAgLy8gICBHcmVhdGVyIHRoYW4gIkAiIG1lYW5zIGFscGhhIGNoYXJhY3RlcnMgKHNw
ZWNpZmljYWxseSBub3Qgc3RhcnRpbmcgd2l0aCAiIyIgb3IgIj8iKQotICAgIGZvciAoIGVsZW0g
PSBlbGVtLmZpcnN0Q2hpbGQ7IGVsZW07IGVsZW0gPSBlbGVtLm5leHRTaWJsaW5nICkgewotICAg
IGlmICggZWxlbS5ub2RlTmFtZSA+ICJAIiB8fCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0u
bm9kZVR5cGUgPT09IDQgKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICB9Ci0gICAg
cmV0dXJuIHRydWU7Ci0gICAgfSwKLQotICAgICJwYXJlbnQiOiBmdW5jdGlvbiggZWxlbSApIHsK
LSAgICByZXR1cm4gIUV4cHIucHNldWRvc1siZW1wdHkiXSggZWxlbSApOwotICAgIH0sCi0KLSAg
ICAvLyBFbGVtZW50L2lucHV0IHR5cGVzCi0gICAgImhlYWRlciI6IGZ1bmN0aW9uKCBlbGVtICkg
ewotICAgIHJldHVybiByaGVhZGVyLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTsKLSAgICB9LAotCi0g
ICAgImlucHV0IjogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgcmV0dXJuIHJpbnB1dHMudGVzdCgg
ZWxlbS5ub2RlTmFtZSApOwotICAgIH0sCi0KLSAgICAiYnV0dG9uIjogZnVuY3Rpb24oIGVsZW0g
KSB7Ci0gICAgdmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7Ci0gICAgcmV0
dXJuIG5hbWUgPT09ICJpbnB1dCIgJiYgZWxlbS50eXBlID09PSAiYnV0dG9uIiB8fCBuYW1lID09
PSAiYnV0dG9uIjsKLSAgICB9LAotCi0gICAgInRleHQiOiBmdW5jdGlvbiggZWxlbSApIHsKLSAg
ICB2YXIgYXR0cjsKLSAgICAvLyBJRTYgYW5kIDcgd2lsbCBtYXAgZWxlbS50eXBlIHRvICd0ZXh0
JyBmb3IgbmV3IEhUTUw1IHR5cGVzIChzZWFyY2gsIGV0YykKLSAgICAvLyB1c2UgZ2V0QXR0cmli
dXRlIGluc3RlYWQgdG8gdGVzdCB0aGlzIGNhc2UKLSAgICByZXR1cm4gZWxlbS5ub2RlTmFtZS50
b0xvd2VyQ2FzZSgpID09PSAiaW5wdXQiICYmCi0gICAgZWxlbS50eXBlID09PSAidGV4dCIgJiYK
LSAgICAoIChhdHRyID0gZWxlbS5nZXRBdHRyaWJ1dGUoInR5cGUiKSkgPT0gbnVsbCB8fCBhdHRy
LnRvTG93ZXJDYXNlKCkgPT09IGVsZW0udHlwZSApOwotICAgIH0sCi0KLSAgICAvLyBQb3NpdGlv
bi1pbi1jb2xsZWN0aW9uCi0gICAgImZpcnN0IjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5j
dGlvbigpIHsKLSAgICByZXR1cm4gWyAwIF07Ci0gICAgfSksCi0KLSAgICAibGFzdCI6IGNyZWF0
ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkgewotICAg
IHJldHVybiBbIGxlbmd0aCAtIDEgXTsKLSAgICB9KSwKLQotICAgICJlcSI6IGNyZWF0ZVBvc2l0
aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHsK
LSAgICByZXR1cm4gWyBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50
IF07Ci0gICAgfSksCi0KLSAgICAiZXZlbiI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rp
b24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkgewotICAgIHZhciBpID0gMDsKLSAgICBmb3IgKCA7
IGkgPCBsZW5ndGg7IGkgKz0gMiApIHsKLSAgICBtYXRjaEluZGV4ZXMucHVzaCggaSApOwotICAg
IH0KLSAgICByZXR1cm4gbWF0Y2hJbmRleGVzOwotICAgIH0pLAotCi0gICAgIm9kZCI6IGNyZWF0
ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkgewotICAg
IHZhciBpID0gMTsKLSAgICBmb3IgKCA7IGkgPCBsZW5ndGg7IGkgKz0gMiApIHsKLSAgICBtYXRj
aEluZGV4ZXMucHVzaCggaSApOwotICAgIH0KLSAgICByZXR1cm4gbWF0Y2hJbmRleGVzOwotICAg
IH0pLAotCi0gICAgImx0IjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJ
bmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkgewotICAgIHZhciBpID0gYXJndW1lbnQgPCAwID8g
YXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudDsKLSAgICBmb3IgKCA7IC0taSA+PSAwOyApIHsK
LSAgICBtYXRjaEluZGV4ZXMucHVzaCggaSApOwotICAgIH0KLSAgICByZXR1cm4gbWF0Y2hJbmRl
eGVzOwotICAgIH0pLAotCi0gICAgImd0IjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlv
biggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkgewotICAgIHZhciBpID0gYXJndW1l
bnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudDsKLSAgICBmb3IgKCA7ICsraSA8
IGxlbmd0aDsgKSB7Ci0gICAgbWF0Y2hJbmRleGVzLnB1c2goIGkgKTsKLSAgICB9Ci0gICAgcmV0
dXJuIG1hdGNoSW5kZXhlczsKLSAgICB9KQotICAgIH0KLX07Ci0KLS8vIEFkZCBidXR0b24vaW5w
dXQgdHlwZSBwc2V1ZG9zCi1mb3IgKCBpIGluIHsgcmFkaW86IHRydWUsIGNoZWNrYm94OiB0cnVl
LCBmaWxlOiB0cnVlLCBwYXNzd29yZDogdHJ1ZSwgaW1hZ2U6IHRydWUgfSApIHsKLSAgICBFeHBy
LnBzZXVkb3NbIGkgXSA9IGNyZWF0ZUlucHV0UHNldWRvKCBpICk7Ci19Ci1mb3IgKCBpIGluIHsg
c3VibWl0OiB0cnVlLCByZXNldDogdHJ1ZSB9ICkgewotICAgIEV4cHIucHNldWRvc1sgaSBdID0g
Y3JlYXRlQnV0dG9uUHNldWRvKCBpICk7Ci19Ci0KLWZ1bmN0aW9uIHRva2VuaXplKCBzZWxlY3Rv
ciwgcGFyc2VPbmx5ICkgewotICAgIHZhciBtYXRjaGVkLCBtYXRjaCwgdG9rZW5zLCB0eXBlLAot
ICAgIHNvRmFyLCBncm91cHMsIHByZUZpbHRlcnMsCi0gICAgY2FjaGVkID0gdG9rZW5DYWNoZVsg
c2VsZWN0b3IgKyAiICIgXTsKLQotICAgIGlmICggY2FjaGVkICkgewotICAgIHJldHVybiBwYXJz
ZU9ubHkgPyAwIDogY2FjaGVkLnNsaWNlKCAwICk7Ci0gICAgfQotCi0gICAgc29GYXIgPSBzZWxl
Y3RvcjsKLSAgICBncm91cHMgPSBbXTsKLSAgICBwcmVGaWx0ZXJzID0gRXhwci5wcmVGaWx0ZXI7
Ci0KLSAgICB3aGlsZSAoIHNvRmFyICkgewotCi0gICAgLy8gQ29tbWEgYW5kIGZpcnN0IHJ1bgot
ICAgIGlmICggIW1hdGNoZWQgfHwgKG1hdGNoID0gcmNvbW1hLmV4ZWMoIHNvRmFyICkpICkgewot
ICAgIGlmICggbWF0Y2ggKSB7Ci0gICAgLy8gRG9uJ3QgY29uc3VtZSB0cmFpbGluZyBjb21tYXMg
YXMgdmFsaWQKLSAgICBzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaFswXS5sZW5ndGggKSB8fCBz
b0ZhcjsKLSAgICB9Ci0gICAgZ3JvdXBzLnB1c2goIHRva2VucyA9IFtdICk7Ci0gICAgfQotCi0g
ICAgbWF0Y2hlZCA9IGZhbHNlOwotCi0gICAgLy8gQ29tYmluYXRvcnMKLSAgICBpZiAoIChtYXRj
aCA9IHJjb21iaW5hdG9ycy5leGVjKCBzb0ZhciApKSApIHsKLSAgICBtYXRjaGVkID0gbWF0Y2gu
c2hpZnQoKTsKLSAgICB0b2tlbnMucHVzaCggewotICAgIHZhbHVlOiBtYXRjaGVkLAotICAgIC8v
IENhc3QgZGVzY2VuZGFudCBjb21iaW5hdG9ycyB0byBzcGFjZQotICAgIHR5cGU6IG1hdGNoWzBd
LnJlcGxhY2UoIHJ0cmltLCAiICIgKQotICAgIH0gKTsKLSAgICBzb0ZhciA9IHNvRmFyLnNsaWNl
KCBtYXRjaGVkLmxlbmd0aCApOwotICAgIH0KLQotICAgIC8vIEZpbHRlcnMKLSAgICBmb3IgKCB0
eXBlIGluIEV4cHIuZmlsdGVyICkgewotICAgIGlmICggKG1hdGNoID0gbWF0Y2hFeHByWyB0eXBl
IF0uZXhlYyggc29GYXIgKSkgJiYgKCFwcmVGaWx0ZXJzWyB0eXBlIF0gfHwKLSAgICAobWF0Y2gg
PSBwcmVGaWx0ZXJzWyB0eXBlIF0oIG1hdGNoICkpKSApIHsKLSAgICBtYXRjaGVkID0gbWF0Y2gu
c2hpZnQoKTsKLSAgICB0b2tlbnMucHVzaCggewotICAgIHZhbHVlOiBtYXRjaGVkLAotICAgIHR5
cGU6IHR5cGUsCi0gICAgbWF0Y2hlczogbWF0Y2gKLSAgICB9ICk7Ci0gICAgc29GYXIgPSBzb0Zh
ci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTsKLSAgICB9Ci0gICAgfQotCi0gICAgaWYgKCAhbWF0
Y2hlZCApIHsKLSAgICBicmVhazsKLSAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIHRoZSBs
ZW5ndGggb2YgdGhlIGludmFsaWQgZXhjZXNzCi0gICAgLy8gaWYgd2UncmUganVzdCBwYXJzaW5n
Ci0gICAgLy8gT3RoZXJ3aXNlLCB0aHJvdyBhbiBlcnJvciBvciByZXR1cm4gdG9rZW5zCi0gICAg
cmV0dXJuIHBhcnNlT25seSA/Ci0gICAgc29GYXIubGVuZ3RoIDoKLSAgICBzb0ZhciA/Ci0gICAg
U2l6emxlLmVycm9yKCBzZWxlY3RvciApIDoKLSAgICAvLyBDYWNoZSB0aGUgdG9rZW5zCi0gICAg
dG9rZW5DYWNoZSggc2VsZWN0b3IsIGdyb3VwcyApLnNsaWNlKCAwICk7Ci19Ci0KLWZ1bmN0aW9u
IHRvU2VsZWN0b3IoIHRva2VucyApIHsKLSAgICB2YXIgaSA9IDAsCi0gICAgbGVuID0gdG9rZW5z
Lmxlbmd0aCwKLSAgICBzZWxlY3RvciA9ICIiOwotICAgIGZvciAoIDsgaSA8IGxlbjsgaSsrICkg
ewotICAgIHNlbGVjdG9yICs9IHRva2Vuc1tpXS52YWx1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIHNl
bGVjdG9yOwotfQotCi1mdW5jdGlvbiBhZGRDb21iaW5hdG9yKCBtYXRjaGVyLCBjb21iaW5hdG9y
LCBiYXNlICkgewotICAgIHZhciBkaXIgPSBjb21iaW5hdG9yLmRpciwKLSAgICBjaGVja05vbkVs
ZW1lbnRzID0gYmFzZSAmJiBkaXIgPT09ICJwYXJlbnROb2RlIiwKLSAgICBkb25lTmFtZSA9IGRv
bmUrKzsKLQotICAgIHJldHVybiBjb21iaW5hdG9yLmZpcnN0ID8KLSAgICAvLyBDaGVjayBhZ2Fp
bnN0IGNsb3Nlc3QgYW5jZXN0b3IvcHJlY2VkaW5nIGVsZW1lbnQKLSAgICBmdW5jdGlvbiggZWxl
bSwgY29udGV4dCwgeG1sICkgewotICAgIHdoaWxlICggKGVsZW0gPSBlbGVtWyBkaXIgXSkgKSB7
Ci0gICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7Ci0g
ICAgcmV0dXJuIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApOwotICAgIH0KLSAgICB9Ci0g
ICAgfSA6Ci0KLSAgICAvLyBDaGVjayBhZ2FpbnN0IGFsbCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxl
bWVudHMKLSAgICBmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkgewotICAgIHZhciBkYXRh
LCBjYWNoZSwgb3V0ZXJDYWNoZSwKLSAgICBkaXJrZXkgPSBkaXJydW5zICsgIiAiICsgZG9uZU5h
bWU7Ci0KLSAgICAvLyBXZSBjYW4ndCBzZXQgYXJiaXRyYXJ5IGRhdGEgb24gWE1MIG5vZGVzLCBz
byB0aGV5IGRvbid0IGJlbmVmaXQgZnJvbSBkaXIgY2FjaGluZwotICAgIGlmICggeG1sICkgewot
ICAgIHdoaWxlICggKGVsZW0gPSBlbGVtWyBkaXIgXSkgKSB7Ci0gICAgaWYgKCBlbGVtLm5vZGVU
eXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7Ci0gICAgaWYgKCBtYXRjaGVyKCBlbGVt
LCBjb250ZXh0LCB4bWwgKSApIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgfQotICAg
IH0KLSAgICB9IGVsc2UgewotICAgIHdoaWxlICggKGVsZW0gPSBlbGVtWyBkaXIgXSkgKSB7Ci0g
ICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7Ci0gICAg
b3V0ZXJDYWNoZSA9IGVsZW1bIGV4cGFuZG8gXSB8fCAoZWxlbVsgZXhwYW5kbyBdID0ge30pOwot
ICAgIGlmICggKGNhY2hlID0gb3V0ZXJDYWNoZVsgZGlyIF0pICYmIGNhY2hlWzBdID09PSBkaXJr
ZXkgKSB7Ci0gICAgaWYgKCAoZGF0YSA9IGNhY2hlWzFdKSA9PT0gdHJ1ZSB8fCBkYXRhID09PSBj
YWNoZWRydW5zICkgewotICAgIHJldHVybiBkYXRhID09PSB0cnVlOwotICAgIH0KLSAgICB9IGVs
c2UgewotICAgIGNhY2hlID0gb3V0ZXJDYWNoZVsgZGlyIF0gPSBbIGRpcmtleSBdOwotICAgIGNh
Y2hlWzFdID0gbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgfHwgY2FjaGVkcnVuczsKLSAg
ICBpZiAoIGNhY2hlWzFdID09PSB0cnVlICkgewotICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAg
ICB9Ci0gICAgfQotICAgIH0KLSAgICB9Ci0gICAgfTsKLX0KLQotZnVuY3Rpb24gZWxlbWVudE1h
dGNoZXIoIG1hdGNoZXJzICkgewotICAgIHJldHVybiBtYXRjaGVycy5sZW5ndGggPiAxID8KLSAg
ICBmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkgewotICAgIHZhciBpID0gbWF0Y2hlcnMu
bGVuZ3RoOwotICAgIHdoaWxlICggaS0tICkgewotICAgIGlmICggIW1hdGNoZXJzW2ldKCBlbGVt
LCBjb250ZXh0LCB4bWwgKSApIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIH0KLSAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9IDoKLSAgICBtYXRjaGVyc1swXTsKLX0KLQotZnVuY3Rpb24g
Y29uZGVuc2UoIHVubWF0Y2hlZCwgbWFwLCBmaWx0ZXIsIGNvbnRleHQsIHhtbCApIHsKLSAgICB2
YXIgZWxlbSwKLSAgICBuZXdVbm1hdGNoZWQgPSBbXSwKLSAgICBpID0gMCwKLSAgICBsZW4gPSB1
bm1hdGNoZWQubGVuZ3RoLAotICAgIG1hcHBlZCA9IG1hcCAhPSBudWxsOwotCi0gICAgZm9yICgg
OyBpIDwgbGVuOyBpKysgKSB7Ci0gICAgaWYgKCAoZWxlbSA9IHVubWF0Y2hlZFtpXSkgKSB7Ci0g
ICAgaWYgKCAhZmlsdGVyIHx8IGZpbHRlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7Ci0gICAg
bmV3VW5tYXRjaGVkLnB1c2goIGVsZW0gKTsKLSAgICBpZiAoIG1hcHBlZCApIHsKLSAgICBtYXAu
cHVzaCggaSApOwotICAgIH0KLSAgICB9Ci0gICAgfQotICAgIH0KLQotICAgIHJldHVybiBuZXdV
bm1hdGNoZWQ7Ci19Ci0KLWZ1bmN0aW9uIHNldE1hdGNoZXIoIHByZUZpbHRlciwgc2VsZWN0b3Is
IG1hdGNoZXIsIHBvc3RGaWx0ZXIsIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciApIHsKLSAgICBp
ZiAoIHBvc3RGaWx0ZXIgJiYgIXBvc3RGaWx0ZXJbIGV4cGFuZG8gXSApIHsKLSAgICBwb3N0Rmls
dGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbHRlciApOwotICAgIH0KLSAgICBpZiAoIHBvc3RGaW5k
ZXIgJiYgIXBvc3RGaW5kZXJbIGV4cGFuZG8gXSApIHsKLSAgICBwb3N0RmluZGVyID0gc2V0TWF0
Y2hlciggcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICk7Ci0gICAgfQotICAgIHJldHVybiBtYXJr
RnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIHJlc3VsdHMsIGNvbnRleHQsIHhtbCApIHsKLSAgICB2
YXIgdGVtcCwgaSwgZWxlbSwKLSAgICBwcmVNYXAgPSBbXSwKLSAgICBwb3N0TWFwID0gW10sCi0g
ICAgcHJlZXhpc3RpbmcgPSByZXN1bHRzLmxlbmd0aCwKLQotICAgIC8vIEdldCBpbml0aWFsIGVs
ZW1lbnRzIGZyb20gc2VlZCBvciBjb250ZXh0Ci0gICAgZWxlbXMgPSBzZWVkIHx8IG11bHRpcGxl
Q29udGV4dHMoIHNlbGVjdG9yIHx8ICIqIiwgY29udGV4dC5ub2RlVHlwZSA/IFsgY29udGV4dCBd
IDogY29udGV4dCwgW10gKSwKLQotICAgIC8vIFByZWZpbHRlciB0byBnZXQgbWF0Y2hlciBpbnB1
dCwgcHJlc2VydmluZyBhIG1hcCBmb3Igc2VlZC1yZXN1bHRzIHN5bmNocm9uaXphdGlvbgotICAg
IG1hdGNoZXJJbiA9IHByZUZpbHRlciAmJiAoIHNlZWQgfHwgIXNlbGVjdG9yICkgPwotICAgIGNv
bmRlbnNlKCBlbGVtcywgcHJlTWFwLCBwcmVGaWx0ZXIsIGNvbnRleHQsIHhtbCApIDoKLSAgICBl
bGVtcywKLQotICAgIG1hdGNoZXJPdXQgPSBtYXRjaGVyID8KLSAgICAvLyBJZiB3ZSBoYXZlIGEg
cG9zdEZpbmRlciwgb3IgZmlsdGVyZWQgc2VlZCwgb3Igbm9uLXNlZWQgcG9zdEZpbHRlciBvciBw
cmVleGlzdGluZyByZXN1bHRzLAotICAgIHBvc3RGaW5kZXIgfHwgKCBzZWVkID8gcHJlRmlsdGVy
IDogcHJlZXhpc3RpbmcgfHwgcG9zdEZpbHRlciApID8KLQotICAgIC8vIC4uLmludGVybWVkaWF0
ZSBwcm9jZXNzaW5nIGlzIG5lY2Vzc2FyeQotICAgIFtdIDoKLQotICAgIC8vIC4uLm90aGVyd2lz
ZSB1c2UgcmVzdWx0cyBkaXJlY3RseQotICAgIHJlc3VsdHMgOgotICAgIG1hdGNoZXJJbjsKLQot
ICAgIC8vIEZpbmQgcHJpbWFyeSBtYXRjaGVzCi0gICAgaWYgKCBtYXRjaGVyICkgewotICAgIG1h
dGNoZXIoIG1hdGNoZXJJbiwgbWF0Y2hlck91dCwgY29udGV4dCwgeG1sICk7Ci0gICAgfQotCi0g
ICAgLy8gQXBwbHkgcG9zdEZpbHRlcgotICAgIGlmICggcG9zdEZpbHRlciApIHsKLSAgICB0ZW1w
ID0gY29uZGVuc2UoIG1hdGNoZXJPdXQsIHBvc3RNYXAgKTsKLSAgICBwb3N0RmlsdGVyKCB0ZW1w
LCBbXSwgY29udGV4dCwgeG1sICk7Ci0KLSAgICAvLyBVbi1tYXRjaCBmYWlsaW5nIGVsZW1lbnRz
IGJ5IG1vdmluZyB0aGVtIGJhY2sgdG8gbWF0Y2hlckluCi0gICAgaSA9IHRlbXAubGVuZ3RoOwot
ICAgIHdoaWxlICggaS0tICkgewotICAgIGlmICggKGVsZW0gPSB0ZW1wW2ldKSApIHsKLSAgICBt
YXRjaGVyT3V0WyBwb3N0TWFwW2ldIF0gPSAhKG1hdGNoZXJJblsgcG9zdE1hcFtpXSBdID0gZWxl
bSk7Ci0gICAgfQotICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIHNlZWQgKSB7Ci0gICAgaWYgKCBw
b3N0RmluZGVyIHx8IHByZUZpbHRlciApIHsKLSAgICBpZiAoIHBvc3RGaW5kZXIgKSB7Ci0gICAg
Ly8gR2V0IHRoZSBmaW5hbCBtYXRjaGVyT3V0IGJ5IGNvbmRlbnNpbmcgdGhpcyBpbnRlcm1lZGlh
dGUgaW50byBwb3N0RmluZGVyIGNvbnRleHRzCi0gICAgdGVtcCA9IFtdOwotICAgIGkgPSBtYXRj
aGVyT3V0Lmxlbmd0aDsKLSAgICB3aGlsZSAoIGktLSApIHsKLSAgICBpZiAoIChlbGVtID0gbWF0
Y2hlck91dFtpXSkgKSB7Ci0gICAgLy8gUmVzdG9yZSBtYXRjaGVySW4gc2luY2UgZWxlbSBpcyBu
b3QgeWV0IGEgZmluYWwgbWF0Y2gKLSAgICB0ZW1wLnB1c2goIChtYXRjaGVySW5baV0gPSBlbGVt
KSApOwotICAgIH0KLSAgICB9Ci0gICAgcG9zdEZpbmRlciggbnVsbCwgKG1hdGNoZXJPdXQgPSBb
XSksIHRlbXAsIHhtbCApOwotICAgIH0KLQotICAgIC8vIE1vdmUgbWF0Y2hlZCBlbGVtZW50cyBm
cm9tIHNlZWQgdG8gcmVzdWx0cyB0byBrZWVwIHRoZW0gc3luY2hyb25pemVkCi0gICAgaSA9IG1h
dGNoZXJPdXQubGVuZ3RoOwotICAgIHdoaWxlICggaS0tICkgewotICAgIGlmICggKGVsZW0gPSBt
YXRjaGVyT3V0W2ldKSAmJgotICAgICh0ZW1wID0gcG9zdEZpbmRlciA/IGluZGV4T2YuY2FsbCgg
c2VlZCwgZWxlbSApIDogcHJlTWFwW2ldKSA+IC0xICkgewotCi0gICAgc2VlZFt0ZW1wXSA9ICEo
cmVzdWx0c1t0ZW1wXSA9IGVsZW0pOwotICAgIH0KLSAgICB9Ci0gICAgfQotCi0gICAgLy8gQWRk
IGVsZW1lbnRzIHRvIHJlc3VsdHMsIHRocm91Z2ggcG9zdEZpbmRlciBpZiBkZWZpbmVkCi0gICAg
fSBlbHNlIHsKLSAgICBtYXRjaGVyT3V0ID0gY29uZGVuc2UoCi0gICAgbWF0Y2hlck91dCA9PT0g
cmVzdWx0cyA/Ci0gICAgbWF0Y2hlck91dC5zcGxpY2UoIHByZWV4aXN0aW5nLCBtYXRjaGVyT3V0
Lmxlbmd0aCApIDoKLSAgICBtYXRjaGVyT3V0Ci0gICAgKTsKLSAgICBpZiAoIHBvc3RGaW5kZXIg
KSB7Ci0gICAgcG9zdEZpbmRlciggbnVsbCwgcmVzdWx0cywgbWF0Y2hlck91dCwgeG1sICk7Ci0g
ICAgfSBlbHNlIHsKLSAgICBwdXNoLmFwcGx5KCByZXN1bHRzLCBtYXRjaGVyT3V0ICk7Ci0gICAg
fQotICAgIH0KLSAgICB9KTsKLX0KLQotZnVuY3Rpb24gbWF0Y2hlckZyb21Ub2tlbnMoIHRva2Vu
cyApIHsKLSAgICB2YXIgY2hlY2tDb250ZXh0LCBtYXRjaGVyLCBqLAotICAgIGxlbiA9IHRva2Vu
cy5sZW5ndGgsCi0gICAgbGVhZGluZ1JlbGF0aXZlID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zWzBd
LnR5cGUgXSwKLSAgICBpbXBsaWNpdFJlbGF0aXZlID0gbGVhZGluZ1JlbGF0aXZlIHx8IEV4cHIu
cmVsYXRpdmVbIiAiXSwKLSAgICBpID0gbGVhZGluZ1JlbGF0aXZlID8gMSA6IDAsCi0KLSAgICAv
LyBUaGUgZm91bmRhdGlvbmFsIG1hdGNoZXIgZW5zdXJlcyB0aGF0IGVsZW1lbnRzIGFyZSByZWFj
aGFibGUgZnJvbSB0b3AtbGV2ZWwgY29udGV4dChzKQotICAgIG1hdGNoQ29udGV4dCA9IGFkZENv
bWJpbmF0b3IoIGZ1bmN0aW9uKCBlbGVtICkgewotICAgIHJldHVybiBlbGVtID09PSBjaGVja0Nv
bnRleHQ7Ci0gICAgfSwgaW1wbGljaXRSZWxhdGl2ZSwgdHJ1ZSApLAotICAgIG1hdGNoQW55Q29u
dGV4dCA9IGFkZENvbWJpbmF0b3IoIGZ1bmN0aW9uKCBlbGVtICkgewotICAgIHJldHVybiBpbmRl
eE9mLmNhbGwoIGNoZWNrQ29udGV4dCwgZWxlbSApID4gLTE7Ci0gICAgfSwgaW1wbGljaXRSZWxh
dGl2ZSwgdHJ1ZSApLAotICAgIG1hdGNoZXJzID0gWyBmdW5jdGlvbiggZWxlbSwgY29udGV4dCwg
eG1sICkgewotICAgIHJldHVybiAoICFsZWFkaW5nUmVsYXRpdmUgJiYgKCB4bWwgfHwgY29udGV4
dCAhPT0gb3V0ZXJtb3N0Q29udGV4dCApICkgfHwgKAotICAgIChjaGVja0NvbnRleHQgPSBjb250
ZXh0KS5ub2RlVHlwZSA/Ci0gICAgbWF0Y2hDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSA6
Ci0gICAgbWF0Y2hBbnlDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSApOwotICAgIH0gXTsK
LQotICAgIGZvciAoIDsgaSA8IGxlbjsgaSsrICkgewotICAgIGlmICggKG1hdGNoZXIgPSBFeHBy
LnJlbGF0aXZlWyB0b2tlbnNbaV0udHlwZSBdKSApIHsKLSAgICBtYXRjaGVycyA9IFsgYWRkQ29t
YmluYXRvcihlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSwgbWF0Y2hlcikgXTsKLSAgICB9IGVs
c2UgewotICAgIG1hdGNoZXIgPSBFeHByLmZpbHRlclsgdG9rZW5zW2ldLnR5cGUgXS5hcHBseSgg
bnVsbCwgdG9rZW5zW2ldLm1hdGNoZXMgKTsKLQotICAgIC8vIFJldHVybiBzcGVjaWFsIHVwb24g
c2VlaW5nIGEgcG9zaXRpb25hbCBtYXRjaGVyCi0gICAgaWYgKCBtYXRjaGVyWyBleHBhbmRvIF0g
KSB7Ci0gICAgLy8gRmluZCB0aGUgbmV4dCByZWxhdGl2ZSBvcGVyYXRvciAoaWYgYW55KSBmb3Ig
cHJvcGVyIGhhbmRsaW5nCi0gICAgaiA9ICsraTsKLSAgICBmb3IgKCA7IGogPCBsZW47IGorKyAp
IHsKLSAgICBpZiAoIEV4cHIucmVsYXRpdmVbIHRva2Vuc1tqXS50eXBlIF0gKSB7Ci0gICAgYnJl
YWs7Ci0gICAgfQotICAgIH0KLSAgICByZXR1cm4gc2V0TWF0Y2hlcigKLSAgICBpID4gMSAmJiBl
bGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSwKLSAgICBpID4gMSAmJiB0b1NlbGVjdG9yKCB0b2tl
bnMuc2xpY2UoIDAsIGkgLSAxICkgKS5yZXBsYWNlKCBydHJpbSwgIiQxIiApLAotICAgIG1hdGNo
ZXIsCi0gICAgaSA8IGogJiYgbWF0Y2hlckZyb21Ub2tlbnMoIHRva2Vucy5zbGljZSggaSwgaiAp
ICksCi0gICAgaiA8IGxlbiAmJiBtYXRjaGVyRnJvbVRva2VucyggKHRva2VucyA9IHRva2Vucy5z
bGljZSggaiApKSApLAotICAgIGogPCBsZW4gJiYgdG9TZWxlY3RvciggdG9rZW5zICkKLSAgICAp
OwotICAgIH0KLSAgICBtYXRjaGVycy5wdXNoKCBtYXRjaGVyICk7Ci0gICAgfQotICAgIH0KLQot
ICAgIHJldHVybiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKTsKLX0KLQotZnVuY3Rpb24gbWF0
Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkgewot
ICAgIC8vIEEgY291bnRlciB0byBzcGVjaWZ5IHdoaWNoIGVsZW1lbnQgaXMgY3VycmVudGx5IGJl
aW5nIG1hdGNoZWQKLSAgICB2YXIgbWF0Y2hlckNhY2hlZFJ1bnMgPSAwLAotICAgIGJ5U2V0ID0g
c2V0TWF0Y2hlcnMubGVuZ3RoID4gMCwKLSAgICBieUVsZW1lbnQgPSBlbGVtZW50TWF0Y2hlcnMu
bGVuZ3RoID4gMCwKLSAgICBzdXBlck1hdGNoZXIgPSBmdW5jdGlvbiggc2VlZCwgY29udGV4dCwg
eG1sLCByZXN1bHRzLCBleHBhbmRDb250ZXh0ICkgewotICAgIHZhciBlbGVtLCBqLCBtYXRjaGVy
LAotICAgIHNldE1hdGNoZWQgPSBbXSwKLSAgICBtYXRjaGVkQ291bnQgPSAwLAotICAgIGkgPSAi
MCIsCi0gICAgdW5tYXRjaGVkID0gc2VlZCAmJiBbXSwKLSAgICBvdXRlcm1vc3QgPSBleHBhbmRD
b250ZXh0ICE9IG51bGwsCi0gICAgY29udGV4dEJhY2t1cCA9IG91dGVybW9zdENvbnRleHQsCi0g
ICAgLy8gV2UgbXVzdCBhbHdheXMgaGF2ZSBlaXRoZXIgc2VlZCBlbGVtZW50cyBvciBjb250ZXh0
Ci0gICAgZWxlbXMgPSBzZWVkIHx8IGJ5RWxlbWVudCAmJiBFeHByLmZpbmRbIlRBRyJdKCAiKiIs
IGV4cGFuZENvbnRleHQgJiYgY29udGV4dC5wYXJlbnROb2RlIHx8IGNvbnRleHQgKSwKLSAgICAv
LyBVc2UgaW50ZWdlciBkaXJydW5zIGlmZiB0aGlzIGlzIHRoZSBvdXRlcm1vc3QgbWF0Y2hlcgot
ICAgIGRpcnJ1bnNVbmlxdWUgPSAoZGlycnVucyArPSBjb250ZXh0QmFja3VwID09IG51bGwgPyAx
IDogTWF0aC5yYW5kb20oKSB8fCAwLjEpOwotCi0gICAgaWYgKCBvdXRlcm1vc3QgKSB7Ci0gICAg
b3V0ZXJtb3N0Q29udGV4dCA9IGNvbnRleHQgIT09IGRvY3VtZW50ICYmIGNvbnRleHQ7Ci0gICAg
Y2FjaGVkcnVucyA9IG1hdGNoZXJDYWNoZWRSdW5zOwotICAgIH0KLQotICAgIC8vIEFkZCBlbGVt
ZW50cyBwYXNzaW5nIGVsZW1lbnRNYXRjaGVycyBkaXJlY3RseSB0byByZXN1bHRzCi0gICAgLy8g
S2VlcCBgaWAgYSBzdHJpbmcgaWYgdGhlcmUgYXJlIG5vIGVsZW1lbnRzIHNvIGBtYXRjaGVkQ291
bnRgIHdpbGwgYmUgIjAwIiBiZWxvdwotICAgIGZvciAoIDsgKGVsZW0gPSBlbGVtc1tpXSkgIT0g
bnVsbDsgaSsrICkgewotICAgIGlmICggYnlFbGVtZW50ICYmIGVsZW0gKSB7Ci0gICAgaiA9IDA7
Ci0gICAgd2hpbGUgKCAobWF0Y2hlciA9IGVsZW1lbnRNYXRjaGVyc1tqKytdKSApIHsKLSAgICBp
ZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkgewotICAgIHJlc3VsdHMucHVzaCgg
ZWxlbSApOwotICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci0gICAgaWYgKCBvdXRlcm1vc3QgKSB7
Ci0gICAgZGlycnVucyA9IGRpcnJ1bnNVbmlxdWU7Ci0gICAgY2FjaGVkcnVucyA9ICsrbWF0Y2hl
ckNhY2hlZFJ1bnM7Ci0gICAgfQotICAgIH0KLQotICAgIC8vIFRyYWNrIHVubWF0Y2hlZCBlbGVt
ZW50cyBmb3Igc2V0IGZpbHRlcnMKLSAgICBpZiAoIGJ5U2V0ICkgewotICAgIC8vIFRoZXkgd2ls
bCBoYXZlIGdvbmUgdGhyb3VnaCBhbGwgcG9zc2libGUgbWF0Y2hlcnMKLSAgICBpZiAoIChlbGVt
ID0gIW1hdGNoZXIgJiYgZWxlbSkgKSB7Ci0gICAgbWF0Y2hlZENvdW50LS07Ci0gICAgfQotCi0g
ICAgLy8gTGVuZ3RoZW4gdGhlIGFycmF5IGZvciBldmVyeSBlbGVtZW50LCBtYXRjaGVkIG9yIG5v
dAotICAgIGlmICggc2VlZCApIHsKLSAgICB1bm1hdGNoZWQucHVzaCggZWxlbSApOwotICAgIH0K
LSAgICB9Ci0gICAgfQotCi0gICAgLy8gQXBwbHkgc2V0IGZpbHRlcnMgdG8gdW5tYXRjaGVkIGVs
ZW1lbnRzCi0gICAgbWF0Y2hlZENvdW50ICs9IGk7Ci0gICAgaWYgKCBieVNldCAmJiBpICE9PSBt
YXRjaGVkQ291bnQgKSB7Ci0gICAgaiA9IDA7Ci0gICAgd2hpbGUgKCAobWF0Y2hlciA9IHNldE1h
dGNoZXJzW2orK10pICkgewotICAgIG1hdGNoZXIoIHVubWF0Y2hlZCwgc2V0TWF0Y2hlZCwgY29u
dGV4dCwgeG1sICk7Ci0gICAgfQotCi0gICAgaWYgKCBzZWVkICkgewotICAgIC8vIFJlaW50ZWdy
YXRlIGVsZW1lbnQgbWF0Y2hlcyB0byBlbGltaW5hdGUgdGhlIG5lZWQgZm9yIHNvcnRpbmcKLSAg
ICBpZiAoIG1hdGNoZWRDb3VudCA+IDAgKSB7Ci0gICAgd2hpbGUgKCBpLS0gKSB7Ci0gICAgaWYg
KCAhKHVubWF0Y2hlZFtpXSB8fCBzZXRNYXRjaGVkW2ldKSApIHsKLSAgICBzZXRNYXRjaGVkW2ld
ID0gcG9wLmNhbGwoIHJlc3VsdHMgKTsKLSAgICB9Ci0gICAgfQotICAgIH0KLQotICAgIC8vIERp
c2NhcmQgaW5kZXggcGxhY2Vob2xkZXIgdmFsdWVzIHRvIGdldCBvbmx5IGFjdHVhbCBtYXRjaGVz
Ci0gICAgc2V0TWF0Y2hlZCA9IGNvbmRlbnNlKCBzZXRNYXRjaGVkICk7Ci0gICAgfQotCi0gICAg
Ly8gQWRkIG1hdGNoZXMgdG8gcmVzdWx0cwotICAgIHB1c2guYXBwbHkoIHJlc3VsdHMsIHNldE1h
dGNoZWQgKTsKLQotICAgIC8vIFNlZWRsZXNzIHNldCBtYXRjaGVzIHN1Y2NlZWRpbmcgbXVsdGlw
bGUgc3VjY2Vzc2Z1bCBtYXRjaGVycyBzdGlwdWxhdGUgc29ydGluZwotICAgIGlmICggb3V0ZXJt
b3N0ICYmICFzZWVkICYmIHNldE1hdGNoZWQubGVuZ3RoID4gMCAmJgotICAgICggbWF0Y2hlZENv
dW50ICsgc2V0TWF0Y2hlcnMubGVuZ3RoICkgPiAxICkgewotCi0gICAgU2l6emxlLnVuaXF1ZVNv
cnQoIHJlc3VsdHMgKTsKLSAgICB9Ci0gICAgfQotCi0gICAgLy8gT3ZlcnJpZGUgbWFuaXB1bGF0
aW9uIG9mIGdsb2JhbHMgYnkgbmVzdGVkIG1hdGNoZXJzCi0gICAgaWYgKCBvdXRlcm1vc3QgKSB7
Ci0gICAgZGlycnVucyA9IGRpcnJ1bnNVbmlxdWU7Ci0gICAgb3V0ZXJtb3N0Q29udGV4dCA9IGNv
bnRleHRCYWNrdXA7Ci0gICAgfQotCi0gICAgcmV0dXJuIHVubWF0Y2hlZDsKLSAgICB9OwotCi0g
ICAgcmV0dXJuIGJ5U2V0ID8KLSAgICBtYXJrRnVuY3Rpb24oIHN1cGVyTWF0Y2hlciApIDoKLSAg
ICBzdXBlck1hdGNoZXI7Ci19Ci0KLWNvbXBpbGUgPSBTaXp6bGUuY29tcGlsZSA9IGZ1bmN0aW9u
KCBzZWxlY3RvciwgZ3JvdXAgLyogSW50ZXJuYWwgVXNlIE9ubHkgKi8gKSB7Ci0gICAgdmFyIGks
Ci0gICAgc2V0TWF0Y2hlcnMgPSBbXSwKLSAgICBlbGVtZW50TWF0Y2hlcnMgPSBbXSwKLSAgICBj
YWNoZWQgPSBjb21waWxlckNhY2hlWyBzZWxlY3RvciArICIgIiBdOwotCi0gICAgaWYgKCAhY2Fj
aGVkICkgewotICAgIC8vIEdlbmVyYXRlIGEgZnVuY3Rpb24gb2YgcmVjdXJzaXZlIGZ1bmN0aW9u
cyB0aGF0IGNhbiBiZSB1c2VkIHRvIGNoZWNrIGVhY2ggZWxlbWVudAotICAgIGlmICggIWdyb3Vw
ICkgewotICAgIGdyb3VwID0gdG9rZW5pemUoIHNlbGVjdG9yICk7Ci0gICAgfQotICAgIGkgPSBn
cm91cC5sZW5ndGg7Ci0gICAgd2hpbGUgKCBpLS0gKSB7Ci0gICAgY2FjaGVkID0gbWF0Y2hlckZy
b21Ub2tlbnMoIGdyb3VwW2ldICk7Ci0gICAgaWYgKCBjYWNoZWRbIGV4cGFuZG8gXSApIHsKLSAg
ICBzZXRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTsKLSAgICB9IGVsc2UgewotICAgIGVsZW1lbnRN
YXRjaGVycy5wdXNoKCBjYWNoZWQgKTsKLSAgICB9Ci0gICAgfQotCi0gICAgLy8gQ2FjaGUgdGhl
IGNvbXBpbGVkIGZ1bmN0aW9uCi0gICAgY2FjaGVkID0gY29tcGlsZXJDYWNoZSggc2VsZWN0b3Is
IG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycyAp
ICk7Ci0gICAgfQotICAgIHJldHVybiBjYWNoZWQ7Ci19OwotCi1mdW5jdGlvbiBtdWx0aXBsZUNv
bnRleHRzKCBzZWxlY3RvciwgY29udGV4dHMsIHJlc3VsdHMgKSB7Ci0gICAgdmFyIGkgPSAwLAot
ICAgIGxlbiA9IGNvbnRleHRzLmxlbmd0aDsKLSAgICBmb3IgKCA7IGkgPCBsZW47IGkrKyApIHsK
LSAgICBTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0c1tpXSwgcmVzdWx0cyApOwotICAgIH0KLSAg
ICByZXR1cm4gcmVzdWx0czsKLX0KLQotZnVuY3Rpb24gc2VsZWN0KCBzZWxlY3RvciwgY29udGV4
dCwgcmVzdWx0cywgc2VlZCApIHsKLSAgICB2YXIgaSwgdG9rZW5zLCB0b2tlbiwgdHlwZSwgZmlu
ZCwKLSAgICBtYXRjaCA9IHRva2VuaXplKCBzZWxlY3RvciApOwotCi0gICAgaWYgKCAhc2VlZCAp
IHsKLSAgICAvLyBUcnkgdG8gbWluaW1pemUgb3BlcmF0aW9ucyBpZiB0aGVyZSBpcyBvbmx5IG9u
ZSBncm91cAotICAgIGlmICggbWF0Y2gubGVuZ3RoID09PSAxICkgewotCi0gICAgLy8gVGFrZSBh
IHNob3J0Y3V0IGFuZCBzZXQgdGhlIGNvbnRleHQgaWYgdGhlIHJvb3Qgc2VsZWN0b3IgaXMgYW4g
SUQKLSAgICB0b2tlbnMgPSBtYXRjaFswXSA9IG1hdGNoWzBdLnNsaWNlKCAwICk7Ci0gICAgaWYg
KCB0b2tlbnMubGVuZ3RoID4gMiAmJiAodG9rZW4gPSB0b2tlbnNbMF0pLnR5cGUgPT09ICJJRCIg
JiYKLSAgICBjb250ZXh0Lm5vZGVUeXBlID09PSA5ICYmICFkb2N1bWVudElzWE1MICYmCi0gICAg
RXhwci5yZWxhdGl2ZVsgdG9rZW5zWzFdLnR5cGUgXSApIHsKLQotICAgIGNvbnRleHQgPSBFeHBy
LmZpbmRbIklEIl0oIHRva2VuLm1hdGNoZXNbMF0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2Nh
cGUgKSwgY29udGV4dCApWzBdOwotICAgIGlmICggIWNvbnRleHQgKSB7Ci0gICAgcmV0dXJuIHJl
c3VsdHM7Ci0gICAgfQotCi0gICAgc2VsZWN0b3IgPSBzZWxlY3Rvci5zbGljZSggdG9rZW5zLnNo
aWZ0KCkudmFsdWUubGVuZ3RoICk7Ci0gICAgfQotCi0gICAgLy8gRmV0Y2ggYSBzZWVkIHNldCBm
b3IgcmlnaHQtdG8tbGVmdCBtYXRjaGluZwotICAgIGkgPSBtYXRjaEV4cHJbIm5lZWRzQ29udGV4
dCJdLnRlc3QoIHNlbGVjdG9yICkgPyAwIDogdG9rZW5zLmxlbmd0aDsKLSAgICB3aGlsZSAoIGkt
LSApIHsKLSAgICB0b2tlbiA9IHRva2Vuc1tpXTsKLQotICAgIC8vIEFib3J0IGlmIHdlIGhpdCBh
IGNvbWJpbmF0b3IKLSAgICBpZiAoIEV4cHIucmVsYXRpdmVbICh0eXBlID0gdG9rZW4udHlwZSkg
XSApIHsKLSAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKCAoZmluZCA9IEV4cHIuZmluZFsgdHlw
ZSBdKSApIHsKLSAgICAvLyBTZWFyY2gsIGV4cGFuZGluZyBjb250ZXh0IGZvciBsZWFkaW5nIHNp
YmxpbmcgY29tYmluYXRvcnMKLSAgICBpZiAoIChzZWVkID0gZmluZCgKLSAgICB0b2tlbi5tYXRj
aGVzWzBdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICksCi0gICAgcnNpYmxpbmcudGVz
dCggdG9rZW5zWzBdLnR5cGUgKSAmJiBjb250ZXh0LnBhcmVudE5vZGUgfHwgY29udGV4dAotICAg
ICkpICkgewotCi0gICAgLy8gSWYgc2VlZCBpcyBlbXB0eSBvciBubyB0b2tlbnMgcmVtYWluLCB3
ZSBjYW4gcmV0dXJuIGVhcmx5Ci0gICAgdG9rZW5zLnNwbGljZSggaSwgMSApOwotICAgIHNlbGVj
dG9yID0gc2VlZC5sZW5ndGggJiYgdG9TZWxlY3RvciggdG9rZW5zICk7Ci0gICAgaWYgKCAhc2Vs
ZWN0b3IgKSB7Ci0gICAgcHVzaC5hcHBseSggcmVzdWx0cywgc2xpY2UuY2FsbCggc2VlZCwgMCAp
ICk7Ci0gICAgcmV0dXJuIHJlc3VsdHM7Ci0gICAgfQotCi0gICAgYnJlYWs7Ci0gICAgfQotICAg
IH0KLSAgICB9Ci0gICAgfQotICAgIH0KLQotICAgIC8vIENvbXBpbGUgYW5kIGV4ZWN1dGUgYSBm
aWx0ZXJpbmcgZnVuY3Rpb24KLSAgICAvLyBQcm92aWRlIGBtYXRjaGAgdG8gYXZvaWQgcmV0b2tl
bml6YXRpb24gaWYgd2UgbW9kaWZpZWQgdGhlIHNlbGVjdG9yIGFib3ZlCi0gICAgY29tcGlsZSgg
c2VsZWN0b3IsIG1hdGNoICkoCi0gICAgc2VlZCwKLSAgICBjb250ZXh0LAotICAgIGRvY3VtZW50
SXNYTUwsCi0gICAgcmVzdWx0cywKLSAgICByc2libGluZy50ZXN0KCBzZWxlY3RvciApCi0gICAg
KTsKLSAgICByZXR1cm4gcmVzdWx0czsKLX0KLQotLy8gRGVwcmVjYXRlZAotRXhwci5wc2V1ZG9z
WyJudGgiXSA9IEV4cHIucHNldWRvc1siZXEiXTsKLQotLy8gRWFzeSBBUEkgZm9yIGNyZWF0aW5n
IG5ldyBzZXRGaWx0ZXJzCi1mdW5jdGlvbiBzZXRGaWx0ZXJzKCkge30KLUV4cHIuZmlsdGVycyA9
IHNldEZpbHRlcnMucHJvdG90eXBlID0gRXhwci5wc2V1ZG9zOwotRXhwci5zZXRGaWx0ZXJzID0g
bmV3IHNldEZpbHRlcnMoKTsKLQotLy8gSW5pdGlhbGl6ZSB3aXRoIHRoZSBkZWZhdWx0IGRvY3Vt
ZW50Ci1zZXREb2N1bWVudCgpOwotCi0vLyBPdmVycmlkZSBzaXp6bGUgYXR0cmlidXRlIHJldHJp
ZXZhbAotU2l6emxlLmF0dHIgPSBqUXVlcnkuYXR0cjsKLWpRdWVyeS5maW5kID0gU2l6emxlOwot
alF1ZXJ5LmV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzOwotalF1ZXJ5LmV4cHJbIjoiXSA9IGpRdWVy
eS5leHByLnBzZXVkb3M7Ci1qUXVlcnkudW5pcXVlID0gU2l6emxlLnVuaXF1ZVNvcnQ7Ci1qUXVl
cnkudGV4dCA9IFNpenpsZS5nZXRUZXh0OwotalF1ZXJ5LmlzWE1MRG9jID0gU2l6emxlLmlzWE1M
OwotalF1ZXJ5LmNvbnRhaW5zID0gU2l6emxlLmNvbnRhaW5zOwotCi0KLX0pKCB3aW5kb3cgKTsK
LXZhciBydW50aWwgPSAvVW50aWwkLywKLSAgICBycGFyZW50c3ByZXYgPSAvXig/OnBhcmVudHN8
cHJldig/OlVudGlsfEFsbCkpLywKLSAgICBpc1NpbXBsZSA9IC9eLlteOiNcW1wuLF0qJC8sCi0g
ICAgcm5lZWRzQ29udGV4dCA9IGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dCwKLSAgICAv
LyBtZXRob2RzIGd1YXJhbnRlZWQgdG8gcHJvZHVjZSBhIHVuaXF1ZSBzZXQgd2hlbiBzdGFydGlu
ZyBmcm9tIGEgdW5pcXVlIHNldAotICAgIGd1YXJhbnRlZWRVbmlxdWUgPSB7Ci0gICAgY2hpbGRy
ZW46IHRydWUsCi0gICAgY29udGVudHM6IHRydWUsCi0gICAgbmV4dDogdHJ1ZSwKLSAgICBwcmV2
OiB0cnVlCi0gICAgfTsKLQotalF1ZXJ5LmZuLmV4dGVuZCh7Ci0gICAgZmluZDogZnVuY3Rpb24o
IHNlbGVjdG9yICkgewotICAgIHZhciBpLCByZXQsIHNlbGYsCi0gICAgbGVuID0gdGhpcy5sZW5n
dGg7Ci0KLSAgICBpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gInN0cmluZyIgKSB7Ci0gICAgc2Vs
ZiA9IHRoaXM7Ci0gICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkoIHNlbGVjdG9yICku
ZmlsdGVyKGZ1bmN0aW9uKCkgewotICAgIGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7Ci0g
ICAgaWYgKCBqUXVlcnkuY29udGFpbnMoIHNlbGZbIGkgXSwgdGhpcyApICkgewotICAgIHJldHVy
biB0cnVlOwotICAgIH0KLSAgICB9Ci0gICAgfSkgKTsKLSAgICB9Ci0KLSAgICByZXQgPSBbXTsK
LSAgICBmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkgewotICAgIGpRdWVyeS5maW5kKCBzZWxl
Y3RvciwgdGhpc1sgaSBdLCByZXQgKTsKLSAgICB9Ci0KLSAgICAvLyBOZWVkZWQgYmVjYXVzZSAk
KCBzZWxlY3RvciwgY29udGV4dCApIGJlY29tZXMgJCggY29udGV4dCApLmZpbmQoIHNlbGVjdG9y
ICkKLSAgICByZXQgPSB0aGlzLnB1c2hTdGFjayggbGVuID4gMSA/IGpRdWVyeS51bmlxdWUoIHJl
dCApIDogcmV0ICk7Ci0gICAgcmV0LnNlbGVjdG9yID0gKCB0aGlzLnNlbGVjdG9yID8gdGhpcy5z
ZWxlY3RvciArICIgIiA6ICIiICkgKyBzZWxlY3RvcjsKLSAgICByZXR1cm4gcmV0OwotICAgIH0s
Ci0KLSAgICBoYXM6IGZ1bmN0aW9uKCB0YXJnZXQgKSB7Ci0gICAgdmFyIGksCi0gICAgdGFyZ2V0
cyA9IGpRdWVyeSggdGFyZ2V0LCB0aGlzICksCi0gICAgbGVuID0gdGFyZ2V0cy5sZW5ndGg7Ci0K
LSAgICByZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKSB7Ci0gICAgZm9yICggaSA9IDA7IGkg
PCBsZW47IGkrKyApIHsKLSAgICBpZiAoIGpRdWVyeS5jb250YWlucyggdGhpcywgdGFyZ2V0c1tp
XSApICkgewotICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICB9Ci0gICAgfSk7Ci0gICAgfSwK
LQotICAgIG5vdDogZnVuY3Rpb24oIHNlbGVjdG9yICkgewotICAgIHJldHVybiB0aGlzLnB1c2hT
dGFjayggd2lubm93KHRoaXMsIHNlbGVjdG9yLCBmYWxzZSkgKTsKLSAgICB9LAotCi0gICAgZmls
dGVyOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7Ci0gICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3
aW5ub3codGhpcywgc2VsZWN0b3IsIHRydWUpICk7Ci0gICAgfSwKLQotICAgIGlzOiBmdW5jdGlv
biggc2VsZWN0b3IgKSB7Ci0gICAgcmV0dXJuICEhc2VsZWN0b3IgJiYgKAotICAgIHR5cGVvZiBz
ZWxlY3RvciA9PT0gInN0cmluZyIgPwotICAgIC8vIElmIHRoaXMgaXMgYSBwb3NpdGlvbmFsL3Jl
bGF0aXZlIHNlbGVjdG9yLCBjaGVjayBtZW1iZXJzaGlwIGluIHRoZSByZXR1cm5lZCBzZXQKLSAg
ICAvLyBzbyAkKCJwOmZpcnN0IikuaXMoInA6bGFzdCIpIHdvbid0IHJldHVybiB0cnVlIGZvciBh
IGRvYyB3aXRoIHR3byAicCIuCi0gICAgcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApID8K
LSAgICBqUXVlcnkoIHNlbGVjdG9yLCB0aGlzLmNvbnRleHQgKS5pbmRleCggdGhpc1swXSApID49
IDAgOgotICAgIGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCB0aGlzICkubGVuZ3RoID4gMCA6Ci0g
ICAgdGhpcy5maWx0ZXIoIHNlbGVjdG9yICkubGVuZ3RoID4gMCApOwotICAgIH0sCi0KLSAgICBj
bG9zZXN0OiBmdW5jdGlvbiggc2VsZWN0b3JzLCBjb250ZXh0ICkgewotICAgIHZhciBjdXIsCi0g
ICAgaSA9IDAsCi0gICAgbCA9IHRoaXMubGVuZ3RoLAotICAgIHJldCA9IFtdLAotICAgIHBvcyA9
IHJuZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3JzICkgfHwgdHlwZW9mIHNlbGVjdG9ycyAhPT0g
InN0cmluZyIgPwotICAgIGpRdWVyeSggc2VsZWN0b3JzLCBjb250ZXh0IHx8IHRoaXMuY29udGV4
dCApIDoKLSAgICAwOwotCi0gICAgZm9yICggOyBpIDwgbDsgaSsrICkgewotICAgIGN1ciA9IHRo
aXNbaV07Ci0KLSAgICB3aGlsZSAoIGN1ciAmJiBjdXIub3duZXJEb2N1bWVudCAmJiBjdXIgIT09
IGNvbnRleHQgJiYgY3VyLm5vZGVUeXBlICE9PSAxMSApIHsKLSAgICBpZiAoIHBvcyA/IHBvcy5p
bmRleChjdXIpID4gLTEgOiBqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoY3VyLCBzZWxlY3Rv
cnMpICkgewotICAgIHJldC5wdXNoKCBjdXIgKTsKLSAgICBicmVhazsKLSAgICB9Ci0gICAgY3Vy
ID0gY3VyLnBhcmVudE5vZGU7Ci0gICAgfQotICAgIH0KLQotICAgIHJldHVybiB0aGlzLnB1c2hT
dGFjayggcmV0Lmxlbmd0aCA+IDEgPyBqUXVlcnkudW5pcXVlKCByZXQgKSA6IHJldCApOwotICAg
IH0sCi0KLSAgICAvLyBEZXRlcm1pbmUgdGhlIHBvc2l0aW9uIG9mIGFuIGVsZW1lbnQgd2l0aGlu
Ci0gICAgLy8gdGhlIG1hdGNoZWQgc2V0IG9mIGVsZW1lbnRzCi0gICAgaW5kZXg6IGZ1bmN0aW9u
KCBlbGVtICkgewotCi0gICAgLy8gTm8gYXJndW1lbnQsIHJldHVybiBpbmRleCBpbiBwYXJlbnQK
LSAgICBpZiAoICFlbGVtICkgewotICAgIHJldHVybiAoIHRoaXNbMF0gJiYgdGhpc1swXS5wYXJl
bnROb2RlICkgPyB0aGlzLmZpcnN0KCkucHJldkFsbCgpLmxlbmd0aCA6IC0xOwotICAgIH0KLQot
ICAgIC8vIGluZGV4IGluIHNlbGVjdG9yCi0gICAgaWYgKCB0eXBlb2YgZWxlbSA9PT0gInN0cmlu
ZyIgKSB7Ci0gICAgcmV0dXJuIGpRdWVyeS5pbkFycmF5KCB0aGlzWzBdLCBqUXVlcnkoIGVsZW0g
KSApOwotICAgIH0KLQotICAgIC8vIExvY2F0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGRlc2lyZWQg
ZWxlbWVudAotICAgIHJldHVybiBqUXVlcnkuaW5BcnJheSgKLSAgICAvLyBJZiBpdCByZWNlaXZl
cyBhIGpRdWVyeSBvYmplY3QsIHRoZSBmaXJzdCBlbGVtZW50IGlzIHVzZWQKLSAgICBlbGVtLmpx
dWVyeSA/IGVsZW1bMF0gOiBlbGVtLCB0aGlzICk7Ci0gICAgfSwKLQotICAgIGFkZDogZnVuY3Rp
b24oIHNlbGVjdG9yLCBjb250ZXh0ICkgewotICAgIHZhciBzZXQgPSB0eXBlb2Ygc2VsZWN0b3Ig
PT09ICJzdHJpbmciID8KLSAgICBqUXVlcnkoIHNlbGVjdG9yLCBjb250ZXh0ICkgOgotICAgIGpR
dWVyeS5tYWtlQXJyYXkoIHNlbGVjdG9yICYmIHNlbGVjdG9yLm5vZGVUeXBlID8gWyBzZWxlY3Rv
ciBdIDogc2VsZWN0b3IgKSwKLSAgICBhbGwgPSBqUXVlcnkubWVyZ2UoIHRoaXMuZ2V0KCksIHNl
dCApOwotCi0gICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkudW5pcXVlKGFsbCkgKTsK
LSAgICB9LAotCi0gICAgYWRkQmFjazogZnVuY3Rpb24oIHNlbGVjdG9yICkgewotICAgIHJldHVy
biB0aGlzLmFkZCggc2VsZWN0b3IgPT0gbnVsbCA/Ci0gICAgdGhpcy5wcmV2T2JqZWN0IDogdGhp
cy5wcmV2T2JqZWN0LmZpbHRlcihzZWxlY3RvcikKLSAgICApOwotICAgIH0KLX0pOwotCi1qUXVl
cnkuZm4uYW5kU2VsZiA9IGpRdWVyeS5mbi5hZGRCYWNrOwotCi1mdW5jdGlvbiBzaWJsaW5nKCBj
dXIsIGRpciApIHsKLSAgICBkbyB7Ci0gICAgY3VyID0gY3VyWyBkaXIgXTsKLSAgICB9IHdoaWxl
ICggY3VyICYmIGN1ci5ub2RlVHlwZSAhPT0gMSApOwotCi0gICAgcmV0dXJuIGN1cjsKLX0KLQot
alF1ZXJ5LmVhY2goewotICAgIHBhcmVudDogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgdmFyIHBh
cmVudCA9IGVsZW0ucGFyZW50Tm9kZTsKLSAgICByZXR1cm4gcGFyZW50ICYmIHBhcmVudC5ub2Rl
VHlwZSAhPT0gMTEgPyBwYXJlbnQgOiBudWxsOwotICAgIH0sCi0gICAgcGFyZW50czogZnVuY3Rp
b24oIGVsZW0gKSB7Ci0gICAgcmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0sICJwYXJlbnROb2RlIiAp
OwotICAgIH0sCi0gICAgcGFyZW50c1VudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7
Ci0gICAgcmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0sICJwYXJlbnROb2RlIiwgdW50aWwgKTsKLSAg
ICB9LAotICAgIG5leHQ6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgIHJldHVybiBzaWJsaW5nKCBl
bGVtLCAibmV4dFNpYmxpbmciICk7Ci0gICAgfSwKLSAgICBwcmV2OiBmdW5jdGlvbiggZWxlbSAp
IHsKLSAgICByZXR1cm4gc2libGluZyggZWxlbSwgInByZXZpb3VzU2libGluZyIgKTsKLSAgICB9
LAotICAgIG5leHRBbGw6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgIHJldHVybiBqUXVlcnkuZGly
KCBlbGVtLCAibmV4dFNpYmxpbmciICk7Ci0gICAgfSwKLSAgICBwcmV2QWxsOiBmdW5jdGlvbigg
ZWxlbSApIHsKLSAgICByZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgInByZXZpb3VzU2libGluZyIg
KTsKLSAgICB9LAotICAgIG5leHRVbnRpbDogZnVuY3Rpb24oIGVsZW0sIGksIHVudGlsICkgewot
ICAgIHJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCAibmV4dFNpYmxpbmciLCB1bnRpbCApOwotICAg
IH0sCi0gICAgcHJldlVudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7Ci0gICAgcmV0
dXJuIGpRdWVyeS5kaXIoIGVsZW0sICJwcmV2aW91c1NpYmxpbmciLCB1bnRpbCApOwotICAgIH0s
Ci0gICAgc2libGluZ3M6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgIHJldHVybiBqUXVlcnkuc2li
bGluZyggKCBlbGVtLnBhcmVudE5vZGUgfHwge30gKS5maXJzdENoaWxkLCBlbGVtICk7Ci0gICAg
fSwKLSAgICBjaGlsZHJlbjogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgcmV0dXJuIGpRdWVyeS5z
aWJsaW5nKCBlbGVtLmZpcnN0Q2hpbGQgKTsKLSAgICB9LAotICAgIGNvbnRlbnRzOiBmdW5jdGlv
biggZWxlbSApIHsKLSAgICByZXR1cm4galF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiaWZyYW1lIiAp
ID8KLSAgICBlbGVtLmNvbnRlbnREb2N1bWVudCB8fCBlbGVtLmNvbnRlbnRXaW5kb3cuZG9jdW1l
bnQgOgotICAgIGpRdWVyeS5tZXJnZSggW10sIGVsZW0uY2hpbGROb2RlcyApOwotICAgIH0KLX0s
IGZ1bmN0aW9uKCBuYW1lLCBmbiApIHsKLSAgICBqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9u
KCB1bnRpbCwgc2VsZWN0b3IgKSB7Ci0gICAgdmFyIHJldCA9IGpRdWVyeS5tYXAoIHRoaXMsIGZu
LCB1bnRpbCApOwotCi0gICAgaWYgKCAhcnVudGlsLnRlc3QoIG5hbWUgKSApIHsKLSAgICBzZWxl
Y3RvciA9IHVudGlsOwotICAgIH0KLQotICAgIGlmICggc2VsZWN0b3IgJiYgdHlwZW9mIHNlbGVj
dG9yID09PSAic3RyaW5nIiApIHsKLSAgICByZXQgPSBqUXVlcnkuZmlsdGVyKCBzZWxlY3Rvciwg
cmV0ICk7Ci0gICAgfQotCi0gICAgcmV0ID0gdGhpcy5sZW5ndGggPiAxICYmICFndWFyYW50ZWVk
VW5pcXVlWyBuYW1lIF0gPyBqUXVlcnkudW5pcXVlKCByZXQgKSA6IHJldDsKLQotICAgIGlmICgg
dGhpcy5sZW5ndGggPiAxICYmIHJwYXJlbnRzcHJldi50ZXN0KCBuYW1lICkgKSB7Ci0gICAgcmV0
ID0gcmV0LnJldmVyc2UoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIHJl
dCApOwotICAgIH07Ci19KTsKLQotalF1ZXJ5LmV4dGVuZCh7Ci0gICAgZmlsdGVyOiBmdW5jdGlv
biggZXhwciwgZWxlbXMsIG5vdCApIHsKLSAgICBpZiAoIG5vdCApIHsKLSAgICBleHByID0gIjpu
b3QoIiArIGV4cHIgKyAiKSI7Ci0gICAgfQotCi0gICAgcmV0dXJuIGVsZW1zLmxlbmd0aCA9PT0g
MSA/Ci0gICAgalF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKGVsZW1zWzBdLCBleHByKSA/IFsg
ZWxlbXNbMF0gXSA6IFtdIDoKLSAgICBqUXVlcnkuZmluZC5tYXRjaGVzKGV4cHIsIGVsZW1zKTsK
LSAgICB9LAotCi0gICAgZGlyOiBmdW5jdGlvbiggZWxlbSwgZGlyLCB1bnRpbCApIHsKLSAgICB2
YXIgbWF0Y2hlZCA9IFtdLAotICAgIGN1ciA9IGVsZW1bIGRpciBdOwotCi0gICAgd2hpbGUgKCBj
dXIgJiYgY3VyLm5vZGVUeXBlICE9PSA5ICYmICh1bnRpbCA9PT0gdW5kZWZpbmVkIHx8IGN1ci5u
b2RlVHlwZSAhPT0gMSB8fCAhalF1ZXJ5KCBjdXIgKS5pcyggdW50aWwgKSkgKSB7Ci0gICAgaWYg
KCBjdXIubm9kZVR5cGUgPT09IDEgKSB7Ci0gICAgbWF0Y2hlZC5wdXNoKCBjdXIgKTsKLSAgICB9
Ci0gICAgY3VyID0gY3VyW2Rpcl07Ci0gICAgfQotICAgIHJldHVybiBtYXRjaGVkOwotICAgIH0s
Ci0KLSAgICBzaWJsaW5nOiBmdW5jdGlvbiggbiwgZWxlbSApIHsKLSAgICB2YXIgciA9IFtdOwot
Ci0gICAgZm9yICggOyBuOyBuID0gbi5uZXh0U2libGluZyApIHsKLSAgICBpZiAoIG4ubm9kZVR5
cGUgPT09IDEgJiYgbiAhPT0gZWxlbSApIHsKLSAgICByLnB1c2goIG4gKTsKLSAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIHI7Ci0gICAgfQotfSk7Ci0KLS8vIEltcGxlbWVudCB0aGUgaWRlbnRp
Y2FsIGZ1bmN0aW9uYWxpdHkgZm9yIGZpbHRlciBhbmQgbm90Ci1mdW5jdGlvbiB3aW5ub3coIGVs
ZW1lbnRzLCBxdWFsaWZpZXIsIGtlZXAgKSB7Ci0KLSAgICAvLyBDYW4ndCBwYXNzIG51bGwgb3Ig
dW5kZWZpbmVkIHRvIGluZGV4T2YgaW4gRmlyZWZveCA0Ci0gICAgLy8gU2V0IHRvIDAgdG8gc2tp
cCBzdHJpbmcgY2hlY2sKLSAgICBxdWFsaWZpZXIgPSBxdWFsaWZpZXIgfHwgMDsKLQotICAgIGlm
ICggalF1ZXJ5LmlzRnVuY3Rpb24oIHF1YWxpZmllciApICkgewotICAgIHJldHVybiBqUXVlcnku
Z3JlcChlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7Ci0gICAgdmFyIHJldFZhbCA9ICEh
cXVhbGlmaWVyLmNhbGwoIGVsZW0sIGksIGVsZW0gKTsKLSAgICByZXR1cm4gcmV0VmFsID09PSBr
ZWVwOwotICAgIH0pOwotCi0gICAgfSBlbHNlIGlmICggcXVhbGlmaWVyLm5vZGVUeXBlICkgewot
ICAgIHJldHVybiBqUXVlcnkuZ3JlcChlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAg
cmV0dXJuICggZWxlbSA9PT0gcXVhbGlmaWVyICkgPT09IGtlZXA7Ci0gICAgfSk7Ci0KLSAgICB9
IGVsc2UgaWYgKCB0eXBlb2YgcXVhbGlmaWVyID09PSAic3RyaW5nIiApIHsKLSAgICB2YXIgZmls
dGVyZWQgPSBqUXVlcnkuZ3JlcChlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgcmV0
dXJuIGVsZW0ubm9kZVR5cGUgPT09IDE7Ci0gICAgfSk7Ci0KLSAgICBpZiAoIGlzU2ltcGxlLnRl
c3QoIHF1YWxpZmllciApICkgewotICAgIHJldHVybiBqUXVlcnkuZmlsdGVyKHF1YWxpZmllciwg
ZmlsdGVyZWQsICFrZWVwKTsKLSAgICB9IGVsc2UgewotICAgIHF1YWxpZmllciA9IGpRdWVyeS5m
aWx0ZXIoIHF1YWxpZmllciwgZmlsdGVyZWQgKTsKLSAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJu
IGpRdWVyeS5ncmVwKGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHsKLSAgICByZXR1cm4gKCBq
UXVlcnkuaW5BcnJheSggZWxlbSwgcXVhbGlmaWVyICkgPj0gMCApID09PSBrZWVwOwotICAgIH0p
OwotfQotZnVuY3Rpb24gY3JlYXRlU2FmZUZyYWdtZW50KCBkb2N1bWVudCApIHsKLSAgICB2YXIg
bGlzdCA9IG5vZGVOYW1lcy5zcGxpdCggInwiICksCi0gICAgc2FmZUZyYWcgPSBkb2N1bWVudC5j
cmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Ci0KLSAgICBpZiAoIHNhZmVGcmFnLmNyZWF0ZUVsZW1l
bnQgKSB7Ci0gICAgd2hpbGUgKCBsaXN0Lmxlbmd0aCApIHsKLSAgICBzYWZlRnJhZy5jcmVhdGVF
bGVtZW50KAotICAgIGxpc3QucG9wKCkKLSAgICApOwotICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu
IHNhZmVGcmFnOwotfQotCi12YXIgbm9kZU5hbWVzID0gImFiYnJ8YXJ0aWNsZXxhc2lkZXxhdWRp
b3xiZGl8Y2FudmFzfGRhdGF8ZGF0YWxpc3R8ZGV0YWlsc3xmaWdjYXB0aW9ufGZpZ3VyZXxmb290
ZXJ8IiArCi0gICAgImhlYWRlcnxoZ3JvdXB8bWFya3xtZXRlcnxuYXZ8b3V0cHV0fHByb2dyZXNz
fHNlY3Rpb258c3VtbWFyeXx0aW1lfHZpZGVvIiwKLSAgICByaW5saW5lalF1ZXJ5ID0gLyBqUXVl
cnlcZCs9Iig/Om51bGx8XGQrKSIvZywKLSAgICBybm9zaGltY2FjaGUgPSBuZXcgUmVnRXhwKCI8
KD86IiArIG5vZGVOYW1lcyArICIpW1xccy8+XSIsICJpIiksCi0gICAgcmxlYWRpbmdXaGl0ZXNw
YWNlID0gL15ccysvLAotICAgIHJ4aHRtbFRhZyA9IC88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8
aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcdzpdKylbXj5dKilcLz4vZ2ksCi0gICAgcnRh
Z05hbWUgPSAvPChbXHc6XSspLywKLSAgICBydGJvZHkgPSAvPHRib2R5L2ksCi0gICAgcmh0bWwg
PSAvPHwmIz9cdys7LywKLSAgICBybm9Jbm5lcmh0bWwgPSAvPCg/OnNjcmlwdHxzdHlsZXxsaW5r
KS9pLAotICAgIG1hbmlwdWxhdGlvbl9yY2hlY2thYmxlVHlwZSA9IC9eKD86Y2hlY2tib3h8cmFk
aW8pJC9pLAotICAgIC8vIGNoZWNrZWQ9ImNoZWNrZWQiIG9yIGNoZWNrZWQKLSAgICByY2hlY2tl
ZCA9IC9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLAotICAgIHJzY3JpcHRUeXBl
ID0gL14kfFwvKD86amF2YXxlY21hKXNjcmlwdC9pLAotICAgIHJzY3JpcHRUeXBlTWFza2VkID0g
L150cnVlXC8oLiopLywKLSAgICByY2xlYW5TY3JpcHQgPSAvXlxzKjwhKD86XFtDREFUQVxbfC0t
KXwoPzpcXVxdfC0tKT5ccyokL2csCi0KLSAgICAvLyBXZSBoYXZlIHRvIGNsb3NlIHRoZXNlIHRh
Z3MgdG8gc3VwcG9ydCBYSFRNTCAoIzEzMjAwKQotICAgIHdyYXBNYXAgPSB7Ci0gICAgb3B0aW9u
OiBbIDEsICI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+IiwgIjwvc2VsZWN0PiIgXSwKLSAg
ICBsZWdlbmQ6IFsgMSwgIjxmaWVsZHNldD4iLCAiPC9maWVsZHNldD4iIF0sCi0gICAgYXJlYTog
WyAxLCAiPG1hcD4iLCAiPC9tYXA+IiBdLAotICAgIHBhcmFtOiBbIDEsICI8b2JqZWN0PiIsICI8
L29iamVjdD4iIF0sCi0gICAgdGhlYWQ6IFsgMSwgIjx0YWJsZT4iLCAiPC90YWJsZT4iIF0sCi0g
ICAgdHI6IFsgMiwgIjx0YWJsZT48dGJvZHk+IiwgIjwvdGJvZHk+PC90YWJsZT4iIF0sCi0gICAg
Y29sOiBbIDIsICI8dGFibGU+PHRib2R5PjwvdGJvZHk+PGNvbGdyb3VwPiIsICI8L2NvbGdyb3Vw
PjwvdGFibGU+IiBdLAotICAgIHRkOiBbIDMsICI8dGFibGU+PHRib2R5Pjx0cj4iLCAiPC90cj48
L3Rib2R5PjwvdGFibGU+IiBdLAotCi0gICAgLy8gSUU2LTggY2FuJ3Qgc2VyaWFsaXplIGxpbmss
IHNjcmlwdCwgc3R5bGUsIG9yIGFueSBodG1sNSAoTm9TY29wZSkgdGFncywKLSAgICAvLyB1bmxl
c3Mgd3JhcHBlZCBpbiBhIGRpdiB3aXRoIG5vbi1icmVha2luZyBjaGFyYWN0ZXJzIGluIGZyb250
IG9mIGl0LgotICAgIF9kZWZhdWx0OiBqUXVlcnkuc3VwcG9ydC5odG1sU2VyaWFsaXplID8gWyAw
LCAiIiwgIiIgXSA6IFsgMSwgIlg8ZGl2PiIsICI8L2Rpdj4iICBdCi0gICAgfSwKLSAgICBzYWZl
RnJhZ21lbnQgPSBjcmVhdGVTYWZlRnJhZ21lbnQoIGRvY3VtZW50ICksCi0gICAgZnJhZ21lbnRE
aXYgPSBzYWZlRnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRp
diIpICk7Ci0KLXdyYXBNYXAub3B0Z3JvdXAgPSB3cmFwTWFwLm9wdGlvbjsKLXdyYXBNYXAudGJv
ZHkgPSB3cmFwTWFwLnRmb290ID0gd3JhcE1hcC5jb2xncm91cCA9IHdyYXBNYXAuY2FwdGlvbiA9
IHdyYXBNYXAudGhlYWQ7Ci13cmFwTWFwLnRoID0gd3JhcE1hcC50ZDsKLQotalF1ZXJ5LmZuLmV4
dGVuZCh7Ci0gICAgdGV4dDogZnVuY3Rpb24oIHZhbHVlICkgewotICAgIHJldHVybiBqUXVlcnku
YWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7Ci0gICAgcmV0dXJuIHZhbHVlID09PSB1
bmRlZmluZWQgPwotICAgIGpRdWVyeS50ZXh0KCB0aGlzICkgOgotICAgIHRoaXMuZW1wdHkoKS5h
cHBlbmQoICggdGhpc1swXSAmJiB0aGlzWzBdLm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQgKS5j
cmVhdGVUZXh0Tm9kZSggdmFsdWUgKSApOwotICAgIH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMu
bGVuZ3RoICk7Ci0gICAgfSwKLQotICAgIHdyYXBBbGw6IGZ1bmN0aW9uKCBodG1sICkgewotICAg
IGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGh0bWwgKSApIHsKLSAgICByZXR1cm4gdGhpcy5lYWNo
KGZ1bmN0aW9uKGkpIHsKLSAgICBqUXVlcnkodGhpcykud3JhcEFsbCggaHRtbC5jYWxsKHRoaXMs
IGkpICk7Ci0gICAgfSk7Ci0gICAgfQotCi0gICAgaWYgKCB0aGlzWzBdICkgewotICAgIC8vIFRo
ZSBlbGVtZW50cyB0byB3cmFwIHRoZSB0YXJnZXQgYXJvdW5kCi0gICAgdmFyIHdyYXAgPSBqUXVl
cnkoIGh0bWwsIHRoaXNbMF0ub3duZXJEb2N1bWVudCApLmVxKDApLmNsb25lKHRydWUpOwotCi0g
ICAgaWYgKCB0aGlzWzBdLnBhcmVudE5vZGUgKSB7Ci0gICAgd3JhcC5pbnNlcnRCZWZvcmUoIHRo
aXNbMF0gKTsKLSAgICB9Ci0KLSAgICB3cmFwLm1hcChmdW5jdGlvbigpIHsKLSAgICB2YXIgZWxl
bSA9IHRoaXM7Ci0KLSAgICB3aGlsZSAoIGVsZW0uZmlyc3RDaGlsZCAmJiBlbGVtLmZpcnN0Q2hp
bGQubm9kZVR5cGUgPT09IDEgKSB7Ci0gICAgZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsKLSAgICB9
Ci0KLSAgICByZXR1cm4gZWxlbTsKLSAgICB9KS5hcHBlbmQoIHRoaXMgKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gdGhpczsKLSAgICB9LAotCi0gICAgd3JhcElubmVyOiBmdW5jdGlvbiggaHRtbCAp
IHsKLSAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBodG1sICkgKSB7Ci0gICAgcmV0dXJuIHRo
aXMuZWFjaChmdW5jdGlvbihpKSB7Ci0gICAgalF1ZXJ5KHRoaXMpLndyYXBJbm5lciggaHRtbC5j
YWxsKHRoaXMsIGkpICk7Ci0gICAgfSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRoaXMuZWFjaChm
dW5jdGlvbigpIHsKLSAgICB2YXIgc2VsZiA9IGpRdWVyeSggdGhpcyApLAotICAgIGNvbnRlbnRz
ID0gc2VsZi5jb250ZW50cygpOwotCi0gICAgaWYgKCBjb250ZW50cy5sZW5ndGggKSB7Ci0gICAg
Y29udGVudHMud3JhcEFsbCggaHRtbCApOwotCi0gICAgfSBlbHNlIHsKLSAgICBzZWxmLmFwcGVu
ZCggaHRtbCApOwotICAgIH0KLSAgICB9KTsKLSAgICB9LAotCi0gICAgd3JhcDogZnVuY3Rpb24o
IGh0bWwgKSB7Ci0gICAgdmFyIGlzRnVuY3Rpb24gPSBqUXVlcnkuaXNGdW5jdGlvbiggaHRtbCAp
OwotCi0gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihpKSB7Ci0gICAgalF1ZXJ5KCB0aGlz
ICkud3JhcEFsbCggaXNGdW5jdGlvbiA/IGh0bWwuY2FsbCh0aGlzLCBpKSA6IGh0bWwgKTsKLSAg
ICB9KTsKLSAgICB9LAotCi0gICAgdW53cmFwOiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhp
cy5wYXJlbnQoKS5lYWNoKGZ1bmN0aW9uKCkgewotICAgIGlmICggIWpRdWVyeS5ub2RlTmFtZSgg
dGhpcywgImJvZHkiICkgKSB7Ci0gICAgalF1ZXJ5KCB0aGlzICkucmVwbGFjZVdpdGgoIHRoaXMu
Y2hpbGROb2RlcyApOwotICAgIH0KLSAgICB9KS5lbmQoKTsKLSAgICB9LAotCi0gICAgYXBwZW5k
OiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsIHRydWUs
IGZ1bmN0aW9uKCBlbGVtICkgewotICAgIGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlz
Lm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkgewotICAgIHRoaXMuYXBw
ZW5kQ2hpbGQoIGVsZW0gKTsKLSAgICB9Ci0gICAgfSk7Ci0gICAgfSwKLQotICAgIHByZXBlbmQ6
IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywgdHJ1ZSwg
ZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgaWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMu
bm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7Ci0gICAgdGhpcy5pbnNl
cnRCZWZvcmUoIGVsZW0sIHRoaXMuZmlyc3RDaGlsZCApOwotICAgIH0KLSAgICB9KTsKLSAgICB9
LAotCi0gICAgYmVmb3JlOiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5kb21NYW5pcCgg
YXJndW1lbnRzLCBmYWxzZSwgZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgaWYgKCB0aGlzLnBhcmVu
dE5vZGUgKSB7Ci0gICAgdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcyAp
OwotICAgIH0KLSAgICB9KTsKLSAgICB9LAotCi0gICAgYWZ0ZXI6IGZ1bmN0aW9uKCkgewotICAg
IHJldHVybiB0aGlzLmRvbU1hbmlwKCBhcmd1bWVudHMsIGZhbHNlLCBmdW5jdGlvbiggZWxlbSAp
IHsKLSAgICBpZiAoIHRoaXMucGFyZW50Tm9kZSApIHsKLSAgICB0aGlzLnBhcmVudE5vZGUuaW5z
ZXJ0QmVmb3JlKCBlbGVtLCB0aGlzLm5leHRTaWJsaW5nICk7Ci0gICAgfQotICAgIH0pOwotICAg
IH0sCi0KLSAgICAvLyBrZWVwRGF0YSBpcyBmb3IgaW50ZXJuYWwgdXNlIG9ubHktLWRvIG5vdCBk
b2N1bWVudAotICAgIHJlbW92ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCBrZWVwRGF0YSApIHsKLSAg
ICB2YXIgZWxlbSwKLSAgICBpID0gMDsKLQotICAgIGZvciAoIDsgKGVsZW0gPSB0aGlzW2ldKSAh
PSBudWxsOyBpKysgKSB7Ci0gICAgaWYgKCAhc2VsZWN0b3IgfHwgalF1ZXJ5LmZpbHRlciggc2Vs
ZWN0b3IsIFsgZWxlbSBdICkubGVuZ3RoID4gMCApIHsKLSAgICBpZiAoICFrZWVwRGF0YSAmJiBl
bGVtLm5vZGVUeXBlID09PSAxICkgewotICAgIGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxl
bSApICk7Ci0gICAgfQotCi0gICAgaWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7Ci0gICAgaWYgKCBr
ZWVwRGF0YSAmJiBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApICkg
ewotICAgIHNldEdsb2JhbEV2YWwoIGdldEFsbCggZWxlbSwgInNjcmlwdCIgKSApOwotICAgIH0K
LSAgICBlbGVtLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGVsZW0gKTsKLSAgICB9Ci0gICAgfQot
ICAgIH0KLQotICAgIHJldHVybiB0aGlzOwotICAgIH0sCi0KLSAgICBlbXB0eTogZnVuY3Rpb24o
KSB7Ci0gICAgdmFyIGVsZW0sCi0gICAgaSA9IDA7Ci0KLSAgICBmb3IgKCA7IChlbGVtID0gdGhp
c1tpXSkgIT0gbnVsbDsgaSsrICkgewotICAgIC8vIFJlbW92ZSBlbGVtZW50IG5vZGVzIGFuZCBw
cmV2ZW50IG1lbW9yeSBsZWFrcwotICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKLSAg
ICBqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTsKLSAgICB9Ci0KLSAg
ICAvLyBSZW1vdmUgYW55IHJlbWFpbmluZyBub2RlcwotICAgIHdoaWxlICggZWxlbS5maXJzdENo
aWxkICkgewotICAgIGVsZW0ucmVtb3ZlQ2hpbGQoIGVsZW0uZmlyc3RDaGlsZCApOwotICAgIH0K
LQotICAgIC8vIElmIHRoaXMgaXMgYSBzZWxlY3QsIGVuc3VyZSB0aGF0IGl0IGRpc3BsYXlzIGVt
cHR5ICgjMTIzMzYpCi0gICAgLy8gU3VwcG9ydDogSUU8OQotICAgIGlmICggZWxlbS5vcHRpb25z
ICYmIGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgInNlbGVjdCIgKSApIHsKLSAgICBlbGVtLm9wdGlv
bnMubGVuZ3RoID0gMDsKLSAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRoaXM7Ci0gICAgfSwK
LQotICAgIGNsb25lOiBmdW5jdGlvbiggZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMg
KSB7Ci0gICAgZGF0YUFuZEV2ZW50cyA9IGRhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGZhbHNlIDog
ZGF0YUFuZEV2ZW50czsKLSAgICBkZWVwRGF0YUFuZEV2ZW50cyA9IGRlZXBEYXRhQW5kRXZlbnRz
ID09IG51bGwgPyBkYXRhQW5kRXZlbnRzIDogZGVlcERhdGFBbmRFdmVudHM7Ci0KLSAgICByZXR1
cm4gdGhpcy5tYXAoIGZ1bmN0aW9uICgpIHsKLSAgICByZXR1cm4galF1ZXJ5LmNsb25lKCB0aGlz
LCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApOwotICAgIH0pOwotICAgIH0sCi0K
LSAgICBodG1sOiBmdW5jdGlvbiggdmFsdWUgKSB7Ci0gICAgcmV0dXJuIGpRdWVyeS5hY2Nlc3Mo
IHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHsKLSAgICB2YXIgZWxlbSA9IHRoaXNbMF0gfHwge30s
Ci0gICAgaSA9IDAsCi0gICAgbCA9IHRoaXMubGVuZ3RoOwotCi0gICAgaWYgKCB2YWx1ZSA9PT0g
dW5kZWZpbmVkICkgewotICAgIHJldHVybiBlbGVtLm5vZGVUeXBlID09PSAxID8KLSAgICBlbGVt
LmlubmVySFRNTC5yZXBsYWNlKCByaW5saW5lalF1ZXJ5LCAiIiApIDoKLSAgICB1bmRlZmluZWQ7
Ci0gICAgfQotCi0gICAgLy8gU2VlIGlmIHdlIGNhbiB0YWtlIGEgc2hvcnRjdXQgYW5kIGp1c3Qg
dXNlIGlubmVySFRNTAotICAgIGlmICggdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiAmJiAhcm5v
SW5uZXJodG1sLnRlc3QoIHZhbHVlICkgJiYKLSAgICAoIGpRdWVyeS5zdXBwb3J0Lmh0bWxTZXJp
YWxpemUgfHwgIXJub3NoaW1jYWNoZS50ZXN0KCB2YWx1ZSApICApICYmCi0gICAgKCBqUXVlcnku
c3VwcG9ydC5sZWFkaW5nV2hpdGVzcGFjZSB8fCAhcmxlYWRpbmdXaGl0ZXNwYWNlLnRlc3QoIHZh
bHVlICkgKSAmJgotICAgICF3cmFwTWFwWyAoIHJ0YWdOYW1lLmV4ZWMoIHZhbHVlICkgfHwgWyIi
LCAiIl0gKVsxXS50b0xvd2VyQ2FzZSgpIF0gKSB7Ci0KLSAgICB2YWx1ZSA9IHZhbHVlLnJlcGxh
Y2UoIHJ4aHRtbFRhZywgIjwkMT48LyQyPiIgKTsKLQotICAgIHRyeSB7Ci0gICAgZm9yICg7IGkg
PCBsOyBpKysgKSB7Ci0gICAgLy8gUmVtb3ZlIGVsZW1lbnQgbm9kZXMgYW5kIHByZXZlbnQgbWVt
b3J5IGxlYWtzCi0gICAgZWxlbSA9IHRoaXNbaV0gfHwge307Ci0gICAgaWYgKCBlbGVtLm5vZGVU
eXBlID09PSAxICkgewotICAgIGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFsc2Ug
KSApOwotICAgIGVsZW0uaW5uZXJIVE1MID0gdmFsdWU7Ci0gICAgfQotICAgIH0KLQotICAgIGVs
ZW0gPSAwOwotCi0gICAgLy8gSWYgdXNpbmcgaW5uZXJIVE1MIHRocm93cyBhbiBleGNlcHRpb24s
IHVzZSB0aGUgZmFsbGJhY2sgbWV0aG9kCi0gICAgfSBjYXRjaChlKSB7fQotICAgIH0KLQotICAg
IGlmICggZWxlbSApIHsKLSAgICB0aGlzLmVtcHR5KCkuYXBwZW5kKCB2YWx1ZSApOwotICAgIH0K
LSAgICB9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApOwotICAgIH0sCi0KLSAgICBy
ZXBsYWNlV2l0aDogZnVuY3Rpb24oIHZhbHVlICkgewotICAgIHZhciBpc0Z1bmMgPSBqUXVlcnku
aXNGdW5jdGlvbiggdmFsdWUgKTsKLQotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBlbGVtZW50
cyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBET00gYmVmb3JlIHRoZXkgYXJlIGluc2VydGVkCi0gICAg
Ly8gdGhpcyBjYW4gaGVscCBmaXggcmVwbGFjaW5nIGEgcGFyZW50IHdpdGggY2hpbGQgZWxlbWVu
dHMKLSAgICBpZiAoICFpc0Z1bmMgJiYgdHlwZW9mIHZhbHVlICE9PSAic3RyaW5nIiApIHsKLSAg
ICB2YWx1ZSA9IGpRdWVyeSggdmFsdWUgKS5ub3QoIHRoaXMgKS5kZXRhY2goKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdGhpcy5kb21NYW5pcCggWyB2YWx1ZSBdLCB0cnVlLCBmdW5jdGlvbiggZWxl
bSApIHsKLSAgICB2YXIgbmV4dCA9IHRoaXMubmV4dFNpYmxpbmcsCi0gICAgcGFyZW50ID0gdGhp
cy5wYXJlbnROb2RlOwotCi0gICAgaWYgKCBwYXJlbnQgKSB7Ci0gICAgalF1ZXJ5KCB0aGlzICku
cmVtb3ZlKCk7Ci0gICAgcGFyZW50Lmluc2VydEJlZm9yZSggZWxlbSwgbmV4dCApOwotICAgIH0K
LSAgICB9KTsKLSAgICB9LAotCi0gICAgZGV0YWNoOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7Ci0g
ICAgcmV0dXJuIHRoaXMucmVtb3ZlKCBzZWxlY3RvciwgdHJ1ZSApOwotICAgIH0sCi0KLSAgICBk
b21NYW5pcDogZnVuY3Rpb24oIGFyZ3MsIHRhYmxlLCBjYWxsYmFjayApIHsKLQotICAgIC8vIEZs
YXR0ZW4gYW55IG5lc3RlZCBhcnJheXMKLSAgICBhcmdzID0gY29yZV9jb25jYXQuYXBwbHkoIFtd
LCBhcmdzICk7Ci0KLSAgICB2YXIgZmlyc3QsIG5vZGUsIGhhc1NjcmlwdHMsCi0gICAgc2NyaXB0
cywgZG9jLCBmcmFnbWVudCwKLSAgICBpID0gMCwKLSAgICBsID0gdGhpcy5sZW5ndGgsCi0gICAg
c2V0ID0gdGhpcywKLSAgICBpTm9DbG9uZSA9IGwgLSAxLAotICAgIHZhbHVlID0gYXJnc1swXSwK
LSAgICBpc0Z1bmN0aW9uID0galF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICk7Ci0KLSAgICAvLyBX
ZSBjYW4ndCBjbG9uZU5vZGUgZnJhZ21lbnRzIHRoYXQgY29udGFpbiBjaGVja2VkLCBpbiBXZWJL
aXQKLSAgICBpZiAoIGlzRnVuY3Rpb24gfHwgISggbCA8PSAxIHx8IHR5cGVvZiB2YWx1ZSAhPT0g
InN0cmluZyIgfHwgalF1ZXJ5LnN1cHBvcnQuY2hlY2tDbG9uZSB8fCAhcmNoZWNrZWQudGVzdCgg
dmFsdWUgKSApICkgewotICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oIGluZGV4ICkgewot
ICAgIHZhciBzZWxmID0gc2V0LmVxKCBpbmRleCApOwotICAgIGlmICggaXNGdW5jdGlvbiApIHsK
LSAgICBhcmdzWzBdID0gdmFsdWUuY2FsbCggdGhpcywgaW5kZXgsIHRhYmxlID8gc2VsZi5odG1s
KCkgOiB1bmRlZmluZWQgKTsKLSAgICB9Ci0gICAgc2VsZi5kb21NYW5pcCggYXJncywgdGFibGUs
IGNhbGxiYWNrICk7Ci0gICAgfSk7Ci0gICAgfQotCi0gICAgaWYgKCBsICkgewotICAgIGZyYWdt
ZW50ID0galF1ZXJ5LmJ1aWxkRnJhZ21lbnQoIGFyZ3MsIHRoaXNbIDAgXS5vd25lckRvY3VtZW50
LCBmYWxzZSwgdGhpcyApOwotICAgIGZpcnN0ID0gZnJhZ21lbnQuZmlyc3RDaGlsZDsKLQotICAg
IGlmICggZnJhZ21lbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDEgKSB7Ci0gICAgZnJhZ21lbnQg
PSBmaXJzdDsKLSAgICB9Ci0KLSAgICBpZiAoIGZpcnN0ICkgewotICAgIHRhYmxlID0gdGFibGUg
JiYgalF1ZXJ5Lm5vZGVOYW1lKCBmaXJzdCwgInRyIiApOwotICAgIHNjcmlwdHMgPSBqUXVlcnku
bWFwKCBnZXRBbGwoIGZyYWdtZW50LCAic2NyaXB0IiApLCBkaXNhYmxlU2NyaXB0ICk7Ci0gICAg
aGFzU2NyaXB0cyA9IHNjcmlwdHMubGVuZ3RoOwotCi0gICAgLy8gVXNlIHRoZSBvcmlnaW5hbCBm
cmFnbWVudCBmb3IgdGhlIGxhc3QgaXRlbSBpbnN0ZWFkIG9mIHRoZSBmaXJzdCBiZWNhdXNlIGl0
IGNhbiBlbmQgdXAKLSAgICAvLyBiZWluZyBlbXB0aWVkIGluY29ycmVjdGx5IGluIGNlcnRhaW4g
c2l0dWF0aW9ucyAoIzgwNzApLgotICAgIGZvciAoIDsgaSA8IGw7IGkrKyApIHsKLSAgICBub2Rl
ID0gZnJhZ21lbnQ7Ci0KLSAgICBpZiAoIGkgIT09IGlOb0Nsb25lICkgewotICAgIG5vZGUgPSBq
UXVlcnkuY2xvbmUoIG5vZGUsIHRydWUsIHRydWUgKTsKLQotICAgIC8vIEtlZXAgcmVmZXJlbmNl
cyB0byBjbG9uZWQgc2NyaXB0cyBmb3IgbGF0ZXIgcmVzdG9yYXRpb24KLSAgICBpZiAoIGhhc1Nj
cmlwdHMgKSB7Ci0gICAgalF1ZXJ5Lm1lcmdlKCBzY3JpcHRzLCBnZXRBbGwoIG5vZGUsICJzY3Jp
cHQiICkgKTsKLSAgICB9Ci0gICAgfQotCi0gICAgY2FsbGJhY2suY2FsbCgKLSAgICB0YWJsZSAm
JiBqUXVlcnkubm9kZU5hbWUoIHRoaXNbaV0sICJ0YWJsZSIgKSA/Ci0gICAgZmluZE9yQXBwZW5k
KCB0aGlzW2ldLCAidGJvZHkiICkgOgotICAgIHRoaXNbaV0sCi0gICAgbm9kZSwKLSAgICBpCi0g
ICAgKTsKLSAgICB9Ci0KLSAgICBpZiAoIGhhc1NjcmlwdHMgKSB7Ci0gICAgZG9jID0gc2NyaXB0
c1sgc2NyaXB0cy5sZW5ndGggLSAxIF0ub3duZXJEb2N1bWVudDsKLQotICAgIC8vIFJlZW5hYmxl
IHNjcmlwdHMKLSAgICBqUXVlcnkubWFwKCBzY3JpcHRzLCByZXN0b3JlU2NyaXB0ICk7Ci0KLSAg
ICAvLyBFdmFsdWF0ZSBleGVjdXRhYmxlIHNjcmlwdHMgb24gZmlyc3QgZG9jdW1lbnQgaW5zZXJ0
aW9uCi0gICAgZm9yICggaSA9IDA7IGkgPCBoYXNTY3JpcHRzOyBpKysgKSB7Ci0gICAgbm9kZSA9
IHNjcmlwdHNbIGkgXTsKLSAgICBpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIG5vZGUudHlwZSB8fCAi
IiApICYmCi0gICAgIWpRdWVyeS5fZGF0YSggbm9kZSwgImdsb2JhbEV2YWwiICkgJiYgalF1ZXJ5
LmNvbnRhaW5zKCBkb2MsIG5vZGUgKSApIHsKLQotICAgIGlmICggbm9kZS5zcmMgKSB7Ci0gICAg
Ly8gSG9wZSBhamF4IGlzIGF2YWlsYWJsZS4uLgotICAgIGpRdWVyeS5hamF4KHsKLSAgICB1cmw6
IG5vZGUuc3JjLAotICAgIHR5cGU6ICJHRVQiLAotICAgIGRhdGFUeXBlOiAic2NyaXB0IiwKLSAg
ICBhc3luYzogZmFsc2UsCi0gICAgZ2xvYmFsOiBmYWxzZSwKLSAgICAidGhyb3dzIjogdHJ1ZQot
ICAgIH0pOwotICAgIH0gZWxzZSB7Ci0gICAgalF1ZXJ5Lmdsb2JhbEV2YWwoICggbm9kZS50ZXh0
IHx8IG5vZGUudGV4dENvbnRlbnQgfHwgbm9kZS5pbm5lckhUTUwgfHwgIiIgKS5yZXBsYWNlKCBy
Y2xlYW5TY3JpcHQsICIiICkgKTsKLSAgICB9Ci0gICAgfQotICAgIH0KLSAgICB9Ci0KLSAgICAv
LyBGaXggIzExODA5OiBBdm9pZCBsZWFraW5nIG1lbW9yeQotICAgIGZyYWdtZW50ID0gZmlyc3Qg
PSBudWxsOwotICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdGhpczsKLSAgICB9Ci19KTsKLQot
ZnVuY3Rpb24gZmluZE9yQXBwZW5kKCBlbGVtLCB0YWcgKSB7Ci0gICAgcmV0dXJuIGVsZW0uZ2V0
RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApWzBdIHx8IGVsZW0uYXBwZW5kQ2hpbGQoIGVsZW0ub3du
ZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCB0YWcgKSApOwotfQotCi0vLyBSZXBsYWNlL3Jlc3Rv
cmUgdGhlIHR5cGUgYXR0cmlidXRlIG9mIHNjcmlwdCBlbGVtZW50cyBmb3Igc2FmZSBET00gbWFu
aXB1bGF0aW9uCi1mdW5jdGlvbiBkaXNhYmxlU2NyaXB0KCBlbGVtICkgewotICAgIHZhciBhdHRy
ID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCJ0eXBlIik7Ci0gICAgZWxlbS50eXBlID0gKCBhdHRy
ICYmIGF0dHIuc3BlY2lmaWVkICkgKyAiLyIgKyBlbGVtLnR5cGU7Ci0gICAgcmV0dXJuIGVsZW07
Ci19Ci1mdW5jdGlvbiByZXN0b3JlU2NyaXB0KCBlbGVtICkgewotICAgIHZhciBtYXRjaCA9IHJz
Y3JpcHRUeXBlTWFza2VkLmV4ZWMoIGVsZW0udHlwZSApOwotICAgIGlmICggbWF0Y2ggKSB7Ci0g
ICAgZWxlbS50eXBlID0gbWF0Y2hbMV07Ci0gICAgfSBlbHNlIHsKLSAgICBlbGVtLnJlbW92ZUF0
dHJpYnV0ZSgidHlwZSIpOwotICAgIH0KLSAgICByZXR1cm4gZWxlbTsKLX0KLQotLy8gTWFyayBz
Y3JpcHRzIGFzIGhhdmluZyBhbHJlYWR5IGJlZW4gZXZhbHVhdGVkCi1mdW5jdGlvbiBzZXRHbG9i
YWxFdmFsKCBlbGVtcywgcmVmRWxlbWVudHMgKSB7Ci0gICAgdmFyIGVsZW0sCi0gICAgaSA9IDA7
Ci0gICAgZm9yICggOyAoZWxlbSA9IGVsZW1zW2ldKSAhPSBudWxsOyBpKysgKSB7Ci0gICAgalF1
ZXJ5Ll9kYXRhKCBlbGVtLCAiZ2xvYmFsRXZhbCIsICFyZWZFbGVtZW50cyB8fCBqUXVlcnkuX2Rh
dGEoIHJlZkVsZW1lbnRzW2ldLCAiZ2xvYmFsRXZhbCIgKSApOwotICAgIH0KLX0KLQotZnVuY3Rp
b24gY2xvbmVDb3B5RXZlbnQoIHNyYywgZGVzdCApIHsKLQotICAgIGlmICggZGVzdC5ub2RlVHlw
ZSAhPT0gMSB8fCAhalF1ZXJ5Lmhhc0RhdGEoIHNyYyApICkgewotICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICB2YXIgdHlwZSwgaSwgbCwKLSAgICBvbGREYXRhID0galF1ZXJ5Ll9kYXRhKCBzcmMg
KSwKLSAgICBjdXJEYXRhID0galF1ZXJ5Ll9kYXRhKCBkZXN0LCBvbGREYXRhICksCi0gICAgZXZl
bnRzID0gb2xkRGF0YS5ldmVudHM7Ci0KLSAgICBpZiAoIGV2ZW50cyApIHsKLSAgICBkZWxldGUg
Y3VyRGF0YS5oYW5kbGU7Ci0gICAgY3VyRGF0YS5ldmVudHMgPSB7fTsKLQotICAgIGZvciAoIHR5
cGUgaW4gZXZlbnRzICkgewotICAgIGZvciAoIGkgPSAwLCBsID0gZXZlbnRzWyB0eXBlIF0ubGVu
Z3RoOyBpIDwgbDsgaSsrICkgewotICAgIGpRdWVyeS5ldmVudC5hZGQoIGRlc3QsIHR5cGUsIGV2
ZW50c1sgdHlwZSBdWyBpIF0gKTsKLSAgICB9Ci0gICAgfQotICAgIH0KLQotICAgIC8vIG1ha2Ug
dGhlIGNsb25lZCBwdWJsaWMgZGF0YSBvYmplY3QgYSBjb3B5IGZyb20gdGhlIG9yaWdpbmFsCi0g
ICAgaWYgKCBjdXJEYXRhLmRhdGEgKSB7Ci0gICAgY3VyRGF0YS5kYXRhID0galF1ZXJ5LmV4dGVu
ZCgge30sIGN1ckRhdGEuZGF0YSApOwotICAgIH0KLX0KLQotZnVuY3Rpb24gZml4Q2xvbmVOb2Rl
SXNzdWVzKCBzcmMsIGRlc3QgKSB7Ci0gICAgdmFyIG5vZGVOYW1lLCBlLCBkYXRhOwotCi0gICAg
Ly8gV2UgZG8gbm90IG5lZWQgdG8gZG8gYW55dGhpbmcgZm9yIG5vbi1FbGVtZW50cwotICAgIGlm
ICggZGVzdC5ub2RlVHlwZSAhPT0gMSApIHsKLSAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbm9k
ZU5hbWUgPSBkZXN0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7Ci0KLSAgICAvLyBJRTYtOCBjb3Bp
ZXMgZXZlbnRzIGJvdW5kIHZpYSBhdHRhY2hFdmVudCB3aGVuIHVzaW5nIGNsb25lTm9kZS4KLSAg
ICBpZiAoICFqUXVlcnkuc3VwcG9ydC5ub0Nsb25lRXZlbnQgJiYgZGVzdFsgalF1ZXJ5LmV4cGFu
ZG8gXSApIHsKLSAgICBkYXRhID0galF1ZXJ5Ll9kYXRhKCBkZXN0ICk7Ci0KLSAgICBmb3IgKCBl
IGluIGRhdGEuZXZlbnRzICkgewotICAgIGpRdWVyeS5yZW1vdmVFdmVudCggZGVzdCwgZSwgZGF0
YS5oYW5kbGUgKTsKLSAgICB9Ci0KLSAgICAvLyBFdmVudCBkYXRhIGdldHMgcmVmZXJlbmNlZCBp
bnN0ZWFkIG9mIGNvcGllZCBpZiB0aGUgZXhwYW5kbyBnZXRzIGNvcGllZCB0b28KLSAgICBkZXN0
LnJlbW92ZUF0dHJpYnV0ZSggalF1ZXJ5LmV4cGFuZG8gKTsKLSAgICB9Ci0KLSAgICAvLyBJRSBi
bGFua3MgY29udGVudHMgd2hlbiBjbG9uaW5nIHNjcmlwdHMsIGFuZCB0cmllcyB0byBldmFsdWF0
ZSBuZXdseS1zZXQgdGV4dAotICAgIGlmICggbm9kZU5hbWUgPT09ICJzY3JpcHQiICYmIGRlc3Qu
dGV4dCAhPT0gc3JjLnRleHQgKSB7Ci0gICAgZGlzYWJsZVNjcmlwdCggZGVzdCApLnRleHQgPSBz
cmMudGV4dDsKLSAgICByZXN0b3JlU2NyaXB0KCBkZXN0ICk7Ci0KLSAgICAvLyBJRTYtMTAgaW1w
cm9wZXJseSBjbG9uZXMgY2hpbGRyZW4gb2Ygb2JqZWN0IGVsZW1lbnRzIHVzaW5nIGNsYXNzaWQu
Ci0gICAgLy8gSUUxMCB0aHJvd3MgTm9Nb2RpZmljYXRpb25BbGxvd2VkRXJyb3IgaWYgcGFyZW50
IGlzIG51bGwsICMxMjEzMi4KLSAgICB9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gIm9iamVjdCIg
KSB7Ci0gICAgaWYgKCBkZXN0LnBhcmVudE5vZGUgKSB7Ci0gICAgZGVzdC5vdXRlckhUTUwgPSBz
cmMub3V0ZXJIVE1MOwotICAgIH0KLQotICAgIC8vIFRoaXMgcGF0aCBhcHBlYXJzIHVuYXZvaWRh
YmxlIGZvciBJRTkuIFdoZW4gY2xvbmluZyBhbiBvYmplY3QKLSAgICAvLyBlbGVtZW50IGluIElF
OSwgdGhlIG91dGVySFRNTCBzdHJhdGVneSBhYm92ZSBpcyBub3Qgc3VmZmljaWVudC4KLSAgICAv
LyBJZiB0aGUgc3JjIGhhcyBpbm5lckhUTUwgYW5kIHRoZSBkZXN0aW5hdGlvbiBkb2VzIG5vdCwK
LSAgICAvLyBjb3B5IHRoZSBzcmMuaW5uZXJIVE1MIGludG8gdGhlIGRlc3QuaW5uZXJIVE1MLiAj
MTAzMjQKLSAgICBpZiAoIGpRdWVyeS5zdXBwb3J0Lmh0bWw1Q2xvbmUgJiYgKCBzcmMuaW5uZXJI
VE1MICYmICFqUXVlcnkudHJpbShkZXN0LmlubmVySFRNTCkgKSApIHsKLSAgICBkZXN0LmlubmVy
SFRNTCA9IHNyYy5pbm5lckhUTUw7Ci0gICAgfQotCi0gICAgfSBlbHNlIGlmICggbm9kZU5hbWUg
PT09ICJpbnB1dCIgJiYgbWFuaXB1bGF0aW9uX3JjaGVja2FibGVUeXBlLnRlc3QoIHNyYy50eXBl
ICkgKSB7Ci0gICAgLy8gSUU2LTggZmFpbHMgdG8gcGVyc2lzdCB0aGUgY2hlY2tlZCBzdGF0ZSBv
ZiBhIGNsb25lZCBjaGVja2JveAotICAgIC8vIG9yIHJhZGlvIGJ1dHRvbi4gV29yc2UsIElFNi03
IGZhaWwgdG8gZ2l2ZSB0aGUgY2xvbmVkIGVsZW1lbnQKLSAgICAvLyBhIGNoZWNrZWQgYXBwZWFy
YW5jZSBpZiB0aGUgZGVmYXVsdENoZWNrZWQgdmFsdWUgaXNuJ3QgYWxzbyBzZXQKLQotICAgIGRl
c3QuZGVmYXVsdENoZWNrZWQgPSBkZXN0LmNoZWNrZWQgPSBzcmMuY2hlY2tlZDsKLQotICAgIC8v
IElFNi03IGdldCBjb25mdXNlZCBhbmQgZW5kIHVwIHNldHRpbmcgdGhlIHZhbHVlIG9mIGEgY2xv
bmVkCi0gICAgLy8gY2hlY2tib3gvcmFkaW8gYnV0dG9uIHRvIGFuIGVtcHR5IHN0cmluZyBpbnN0
ZWFkIG9mICJvbiIKLSAgICBpZiAoIGRlc3QudmFsdWUgIT09IHNyYy52YWx1ZSApIHsKLSAgICBk
ZXN0LnZhbHVlID0gc3JjLnZhbHVlOwotICAgIH0KLQotICAgIC8vIElFNi04IGZhaWxzIHRvIHJl
dHVybiB0aGUgc2VsZWN0ZWQgb3B0aW9uIHRvIHRoZSBkZWZhdWx0IHNlbGVjdGVkCi0gICAgLy8g
c3RhdGUgd2hlbiBjbG9uaW5nIG9wdGlvbnMKLSAgICB9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0g
Im9wdGlvbiIgKSB7Ci0gICAgZGVzdC5kZWZhdWx0U2VsZWN0ZWQgPSBkZXN0LnNlbGVjdGVkID0g
c3JjLmRlZmF1bHRTZWxlY3RlZDsKLQotICAgIC8vIElFNi04IGZhaWxzIHRvIHNldCB0aGUgZGVm
YXVsdFZhbHVlIHRvIHRoZSBjb3JyZWN0IHZhbHVlIHdoZW4KLSAgICAvLyBjbG9uaW5nIG90aGVy
IHR5cGVzIG9mIGlucHV0IGZpZWxkcwotICAgIH0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSAiaW5w
dXQiIHx8IG5vZGVOYW1lID09PSAidGV4dGFyZWEiICkgewotICAgIGRlc3QuZGVmYXVsdFZhbHVl
ID0gc3JjLmRlZmF1bHRWYWx1ZTsKLSAgICB9Ci19Ci0KLWpRdWVyeS5lYWNoKHsKLSAgICBhcHBl
bmRUbzogImFwcGVuZCIsCi0gICAgcHJlcGVuZFRvOiAicHJlcGVuZCIsCi0gICAgaW5zZXJ0QmVm
b3JlOiAiYmVmb3JlIiwKLSAgICBpbnNlcnRBZnRlcjogImFmdGVyIiwKLSAgICByZXBsYWNlQWxs
OiAicmVwbGFjZVdpdGgiCi19LCBmdW5jdGlvbiggbmFtZSwgb3JpZ2luYWwgKSB7Ci0gICAgalF1
ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc2VsZWN0b3IgKSB7Ci0gICAgdmFyIGVsZW1zLAot
ICAgIGkgPSAwLAotICAgIHJldCA9IFtdLAotICAgIGluc2VydCA9IGpRdWVyeSggc2VsZWN0b3Ig
KSwKLSAgICBsYXN0ID0gaW5zZXJ0Lmxlbmd0aCAtIDE7Ci0KLSAgICBmb3IgKCA7IGkgPD0gbGFz
dDsgaSsrICkgewotICAgIGVsZW1zID0gaSA9PT0gbGFzdCA/IHRoaXMgOiB0aGlzLmNsb25lKHRy
dWUpOwotICAgIGpRdWVyeSggaW5zZXJ0W2ldIClbIG9yaWdpbmFsIF0oIGVsZW1zICk7Ci0KLSAg
ICAvLyBNb2Rlcm4gYnJvd3NlcnMgY2FuIGFwcGx5IGpRdWVyeSBjb2xsZWN0aW9ucyBhcyBhcnJh
eXMsIGJ1dCBvbGRJRSBuZWVkcyBhIC5nZXQoKQotICAgIGNvcmVfcHVzaC5hcHBseSggcmV0LCBl
bGVtcy5nZXQoKSApOwotICAgIH0KLQotICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggcmV0ICk7
Ci0gICAgfTsKLX0pOwotCi1mdW5jdGlvbiBnZXRBbGwoIGNvbnRleHQsIHRhZyApIHsKLSAgICB2
YXIgZWxlbXMsIGVsZW0sCi0gICAgaSA9IDAsCi0gICAgZm91bmQgPSB0eXBlb2YgY29udGV4dC5n
ZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gY29yZV9zdHJ1bmRlZmluZWQgPyBjb250ZXh0LmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCB0YWcgfHwgIioiICkgOgotICAgIHR5cGVvZiBjb250ZXh0LnF1ZXJ5
U2VsZWN0b3JBbGwgIT09IGNvcmVfc3RydW5kZWZpbmVkID8gY29udGV4dC5xdWVyeVNlbGVjdG9y
QWxsKCB0YWcgfHwgIioiICkgOgotICAgIHVuZGVmaW5lZDsKLQotICAgIGlmICggIWZvdW5kICkg
ewotICAgIGZvciAoIGZvdW5kID0gW10sIGVsZW1zID0gY29udGV4dC5jaGlsZE5vZGVzIHx8IGNv
bnRleHQ7IChlbGVtID0gZWxlbXNbaV0pICE9IG51bGw7IGkrKyApIHsKLSAgICBpZiAoICF0YWcg
fHwgalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCB0YWcgKSApIHsKLSAgICBmb3VuZC5wdXNoKCBlbGVt
ICk7Ci0gICAgfSBlbHNlIHsKLSAgICBqUXVlcnkubWVyZ2UoIGZvdW5kLCBnZXRBbGwoIGVsZW0s
IHRhZyApICk7Ci0gICAgfQotICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdGFnID09PSB1bmRl
ZmluZWQgfHwgdGFnICYmIGpRdWVyeS5ub2RlTmFtZSggY29udGV4dCwgdGFnICkgPwotICAgIGpR
dWVyeS5tZXJnZSggWyBjb250ZXh0IF0sIGZvdW5kICkgOgotICAgIGZvdW5kOwotfQotCi0vLyBV
c2VkIGluIGJ1aWxkRnJhZ21lbnQsIGZpeGVzIHRoZSBkZWZhdWx0Q2hlY2tlZCBwcm9wZXJ0eQot
ZnVuY3Rpb24gZml4RGVmYXVsdENoZWNrZWQoIGVsZW0gKSB7Ci0gICAgaWYgKCBtYW5pcHVsYXRp
b25fcmNoZWNrYWJsZVR5cGUudGVzdCggZWxlbS50eXBlICkgKSB7Ci0gICAgZWxlbS5kZWZhdWx0
Q2hlY2tlZCA9IGVsZW0uY2hlY2tlZDsKLSAgICB9Ci19Ci0KLWpRdWVyeS5leHRlbmQoewotICAg
IGNsb25lOiBmdW5jdGlvbiggZWxlbSwgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMg
KSB7Ci0gICAgdmFyIGRlc3RFbGVtZW50cywgbm9kZSwgY2xvbmUsIGksIHNyY0VsZW1lbnRzLAot
ICAgIGluUGFnZSA9IGpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICk7
Ci0KLSAgICBpZiAoIGpRdWVyeS5zdXBwb3J0Lmh0bWw1Q2xvbmUgfHwgalF1ZXJ5LmlzWE1MRG9j
KGVsZW0pIHx8ICFybm9zaGltY2FjaGUudGVzdCggIjwiICsgZWxlbS5ub2RlTmFtZSArICI+IiAp
ICkgewotICAgIGNsb25lID0gZWxlbS5jbG9uZU5vZGUoIHRydWUgKTsKLQotICAgIC8vIElFPD04
IGRvZXMgbm90IHByb3Blcmx5IGNsb25lIGRldGFjaGVkLCB1bmtub3duIGVsZW1lbnQgbm9kZXMK
LSAgICB9IGVsc2UgewotICAgIGZyYWdtZW50RGl2LmlubmVySFRNTCA9IGVsZW0ub3V0ZXJIVE1M
OwotICAgIGZyYWdtZW50RGl2LnJlbW92ZUNoaWxkKCBjbG9uZSA9IGZyYWdtZW50RGl2LmZpcnN0
Q2hpbGQgKTsKLSAgICB9Ci0KLSAgICBpZiAoICghalF1ZXJ5LnN1cHBvcnQubm9DbG9uZUV2ZW50
IHx8ICFqUXVlcnkuc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCkgJiYKLSAgICAoZWxlbS5ub2RlVHlw
ZSA9PT0gMSB8fCBlbGVtLm5vZGVUeXBlID09PSAxMSkgJiYgIWpRdWVyeS5pc1hNTERvYyhlbGVt
KSApIHsKLQotICAgIC8vIFdlIGVzY2hldyBTaXp6bGUgaGVyZSBmb3IgcGVyZm9ybWFuY2UgcmVh
c29uczogaHR0cDovL2pzcGVyZi5jb20vZ2V0YWxsLXZzLXNpenpsZS8yCi0gICAgZGVzdEVsZW1l
bnRzID0gZ2V0QWxsKCBjbG9uZSApOwotICAgIHNyY0VsZW1lbnRzID0gZ2V0QWxsKCBlbGVtICk7
Ci0KLSAgICAvLyBGaXggYWxsIElFIGNsb25pbmcgaXNzdWVzCi0gICAgZm9yICggaSA9IDA7IChu
b2RlID0gc3JjRWxlbWVudHNbaV0pICE9IG51bGw7ICsraSApIHsKLSAgICAvLyBFbnN1cmUgdGhh
dCB0aGUgZGVzdGluYXRpb24gbm9kZSBpcyBub3QgbnVsbDsgRml4ZXMgIzk1ODcKLSAgICBpZiAo
IGRlc3RFbGVtZW50c1tpXSApIHsKLSAgICBmaXhDbG9uZU5vZGVJc3N1ZXMoIG5vZGUsIGRlc3RF
bGVtZW50c1tpXSApOwotICAgIH0KLSAgICB9Ci0gICAgfQotCi0gICAgLy8gQ29weSB0aGUgZXZl
bnRzIGZyb20gdGhlIG9yaWdpbmFsIHRvIHRoZSBjbG9uZQotICAgIGlmICggZGF0YUFuZEV2ZW50
cyApIHsKLSAgICBpZiAoIGRlZXBEYXRhQW5kRXZlbnRzICkgewotICAgIHNyY0VsZW1lbnRzID0g
c3JjRWxlbWVudHMgfHwgZ2V0QWxsKCBlbGVtICk7Ci0gICAgZGVzdEVsZW1lbnRzID0gZGVzdEVs
ZW1lbnRzIHx8IGdldEFsbCggY2xvbmUgKTsKLQotICAgIGZvciAoIGkgPSAwOyAobm9kZSA9IHNy
Y0VsZW1lbnRzW2ldKSAhPSBudWxsOyBpKysgKSB7Ci0gICAgY2xvbmVDb3B5RXZlbnQoIG5vZGUs
IGRlc3RFbGVtZW50c1tpXSApOwotICAgIH0KLSAgICB9IGVsc2UgewotICAgIGNsb25lQ29weUV2
ZW50KCBlbGVtLCBjbG9uZSApOwotICAgIH0KLSAgICB9Ci0KLSAgICAvLyBQcmVzZXJ2ZSBzY3Jp
cHQgZXZhbHVhdGlvbiBoaXN0b3J5Ci0gICAgZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSwg
InNjcmlwdCIgKTsKLSAgICBpZiAoIGRlc3RFbGVtZW50cy5sZW5ndGggPiAwICkgewotICAgIHNl
dEdsb2JhbEV2YWwoIGRlc3RFbGVtZW50cywgIWluUGFnZSAmJiBnZXRBbGwoIGVsZW0sICJzY3Jp
cHQiICkgKTsKLSAgICB9Ci0KLSAgICBkZXN0RWxlbWVudHMgPSBzcmNFbGVtZW50cyA9IG5vZGUg
PSBudWxsOwotCi0gICAgLy8gUmV0dXJuIHRoZSBjbG9uZWQgc2V0Ci0gICAgcmV0dXJuIGNsb25l
OwotICAgIH0sCi0KLSAgICBidWlsZEZyYWdtZW50OiBmdW5jdGlvbiggZWxlbXMsIGNvbnRleHQs
IHNjcmlwdHMsIHNlbGVjdGlvbiApIHsKLSAgICB2YXIgaiwgZWxlbSwgY29udGFpbnMsCi0gICAg
dG1wLCB0YWcsIHRib2R5LCB3cmFwLAotICAgIGwgPSBlbGVtcy5sZW5ndGgsCi0KLSAgICAvLyBF
bnN1cmUgYSBzYWZlIGZyYWdtZW50Ci0gICAgc2FmZSA9IGNyZWF0ZVNhZmVGcmFnbWVudCggY29u
dGV4dCApLAotCi0gICAgbm9kZXMgPSBbXSwKLSAgICBpID0gMDsKLQotICAgIGZvciAoIDsgaSA8
IGw7IGkrKyApIHsKLSAgICBlbGVtID0gZWxlbXNbIGkgXTsKLQotICAgIGlmICggZWxlbSB8fCBl
bGVtID09PSAwICkgewotCi0gICAgLy8gQWRkIG5vZGVzIGRpcmVjdGx5Ci0gICAgaWYgKCBqUXVl
cnkudHlwZSggZWxlbSApID09PSAib2JqZWN0IiApIHsKLSAgICBqUXVlcnkubWVyZ2UoIG5vZGVz
LCBlbGVtLm5vZGVUeXBlID8gWyBlbGVtIF0gOiBlbGVtICk7Ci0KLSAgICAvLyBDb252ZXJ0IG5v
bi1odG1sIGludG8gYSB0ZXh0IG5vZGUKLSAgICB9IGVsc2UgaWYgKCAhcmh0bWwudGVzdCggZWxl
bSApICkgewotICAgIG5vZGVzLnB1c2goIGNvbnRleHQuY3JlYXRlVGV4dE5vZGUoIGVsZW0gKSAp
OwotCi0gICAgLy8gQ29udmVydCBodG1sIGludG8gRE9NIG5vZGVzCi0gICAgfSBlbHNlIHsKLSAg
ICB0bXAgPSB0bXAgfHwgc2FmZS5hcHBlbmRDaGlsZCggY29udGV4dC5jcmVhdGVFbGVtZW50KCJk
aXYiKSApOwotCi0gICAgLy8gRGVzZXJpYWxpemUgYSBzdGFuZGFyZCByZXByZXNlbnRhdGlvbgot
ICAgIHRhZyA9ICggcnRhZ05hbWUuZXhlYyggZWxlbSApIHx8IFsiIiwgIiJdIClbMV0udG9Mb3dl
ckNhc2UoKTsKLSAgICB3cmFwID0gd3JhcE1hcFsgdGFnIF0gfHwgd3JhcE1hcC5fZGVmYXVsdDsK
LQotICAgIHRtcC5pbm5lckhUTUwgPSB3cmFwWzFdICsgZWxlbS5yZXBsYWNlKCByeGh0bWxUYWcs
ICI8JDE+PC8kMj4iICkgKyB3cmFwWzJdOwotCi0gICAgLy8gRGVzY2VuZCB0aHJvdWdoIHdyYXBw
ZXJzIHRvIHRoZSByaWdodCBjb250ZW50Ci0gICAgaiA9IHdyYXBbMF07Ci0gICAgd2hpbGUgKCBq
LS0gKSB7Ci0gICAgdG1wID0gdG1wLmxhc3RDaGlsZDsKLSAgICB9Ci0KLSAgICAvLyBNYW51YWxs
eSBhZGQgbGVhZGluZyB3aGl0ZXNwYWNlIHJlbW92ZWQgYnkgSUUKLSAgICBpZiAoICFqUXVlcnku
c3VwcG9ydC5sZWFkaW5nV2hpdGVzcGFjZSAmJiBybGVhZGluZ1doaXRlc3BhY2UudGVzdCggZWxl
bSApICkgewotICAgIG5vZGVzLnB1c2goIGNvbnRleHQuY3JlYXRlVGV4dE5vZGUoIHJsZWFkaW5n
V2hpdGVzcGFjZS5leGVjKCBlbGVtIClbMF0gKSApOwotICAgIH0KLQotICAgIC8vIFJlbW92ZSBJ
RSdzIGF1dG9pbnNlcnRlZCA8dGJvZHk+IGZyb20gdGFibGUgZnJhZ21lbnRzCi0gICAgaWYgKCAh
alF1ZXJ5LnN1cHBvcnQudGJvZHkgKSB7Ci0KLSAgICAvLyBTdHJpbmcgd2FzIGEgPHRhYmxlPiwg
Km1heSogaGF2ZSBzcHVyaW91cyA8dGJvZHk+Ci0gICAgZWxlbSA9IHRhZyA9PT0gInRhYmxlIiAm
JiAhcnRib2R5LnRlc3QoIGVsZW0gKSA/Ci0gICAgdG1wLmZpcnN0Q2hpbGQgOgotCi0gICAgLy8g
U3RyaW5nIHdhcyBhIGJhcmUgPHRoZWFkPiBvciA8dGZvb3Q+Ci0gICAgd3JhcFsxXSA9PT0gIjx0
YWJsZT4iICYmICFydGJvZHkudGVzdCggZWxlbSApID8KLSAgICB0bXAgOgotICAgIDA7Ci0KLSAg
ICBqID0gZWxlbSAmJiBlbGVtLmNoaWxkTm9kZXMubGVuZ3RoOwotICAgIHdoaWxlICggai0tICkg
ewotICAgIGlmICggalF1ZXJ5Lm5vZGVOYW1lKCAodGJvZHkgPSBlbGVtLmNoaWxkTm9kZXNbal0p
LCAidGJvZHkiICkgJiYgIXRib2R5LmNoaWxkTm9kZXMubGVuZ3RoICkgewotICAgIGVsZW0ucmVt
b3ZlQ2hpbGQoIHRib2R5ICk7Ci0gICAgfQotICAgIH0KLSAgICB9Ci0KLSAgICBqUXVlcnkubWVy
Z2UoIG5vZGVzLCB0bXAuY2hpbGROb2RlcyApOwotCi0gICAgLy8gRml4ICMxMjM5MiBmb3IgV2Vi
S2l0IGFuZCBJRSA+IDkKLSAgICB0bXAudGV4dENvbnRlbnQgPSAiIjsKLQotICAgIC8vIEZpeCAj
MTIzOTIgZm9yIG9sZElFCi0gICAgd2hpbGUgKCB0bXAuZmlyc3RDaGlsZCApIHsKLSAgICB0bXAu
cmVtb3ZlQ2hpbGQoIHRtcC5maXJzdENoaWxkICk7Ci0gICAgfQotCi0gICAgLy8gUmVtZW1iZXIg
dGhlIHRvcC1sZXZlbCBjb250YWluZXIgZm9yIHByb3BlciBjbGVhbnVwCi0gICAgdG1wID0gc2Fm
ZS5sYXN0Q2hpbGQ7Ci0gICAgfQotICAgIH0KLSAgICB9Ci0KLSAgICAvLyBGaXggIzExMzU2OiBD
bGVhciBlbGVtZW50cyBmcm9tIGZyYWdtZW50Ci0gICAgaWYgKCB0bXAgKSB7Ci0gICAgc2FmZS5y
ZW1vdmVDaGlsZCggdG1wICk7Ci0gICAgfQotCi0gICAgLy8gUmVzZXQgZGVmYXVsdENoZWNrZWQg
Zm9yIGFueSByYWRpb3MgYW5kIGNoZWNrYm94ZXMKLSAgICAvLyBhYm91dCB0byBiZSBhcHBlbmRl
ZCB0byB0aGUgRE9NIGluIElFIDYvNyAoIzgwNjApCi0gICAgaWYgKCAhalF1ZXJ5LnN1cHBvcnQu
YXBwZW5kQ2hlY2tlZCApIHsKLSAgICBqUXVlcnkuZ3JlcCggZ2V0QWxsKCBub2RlcywgImlucHV0
IiApLCBmaXhEZWZhdWx0Q2hlY2tlZCApOwotICAgIH0KLQotICAgIGkgPSAwOwotICAgIHdoaWxl
ICggKGVsZW0gPSBub2Rlc1sgaSsrIF0pICkgewotCi0gICAgLy8gIzQwODcgLSBJZiBvcmlnaW4g
YW5kIGRlc3RpbmF0aW9uIGVsZW1lbnRzIGFyZSB0aGUgc2FtZSwgYW5kIHRoaXMgaXMKLSAgICAv
LyB0aGF0IGVsZW1lbnQsIGRvIG5vdCBkbyBhbnl0aGluZwotICAgIGlmICggc2VsZWN0aW9uICYm
IGpRdWVyeS5pbkFycmF5KCBlbGVtLCBzZWxlY3Rpb24gKSAhPT0gLTEgKSB7Ci0gICAgY29udGlu
dWU7Ci0gICAgfQotCi0gICAgY29udGFpbnMgPSBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJE
b2N1bWVudCwgZWxlbSApOwotCi0gICAgLy8gQXBwZW5kIHRvIGZyYWdtZW50Ci0gICAgdG1wID0g
Z2V0QWxsKCBzYWZlLmFwcGVuZENoaWxkKCBlbGVtICksICJzY3JpcHQiICk7Ci0KLSAgICAvLyBQ
cmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0b3J5Ci0gICAgaWYgKCBjb250YWlucyApIHsK
LSAgICBzZXRHbG9iYWxFdmFsKCB0bXAgKTsKLSAgICB9Ci0KLSAgICAvLyBDYXB0dXJlIGV4ZWN1
dGFibGVzCi0gICAgaWYgKCBzY3JpcHRzICkgewotICAgIGogPSAwOwotICAgIHdoaWxlICggKGVs
ZW0gPSB0bXBbIGorKyBdKSApIHsKLSAgICBpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIGVsZW0udHlw
ZSB8fCAiIiApICkgewotICAgIHNjcmlwdHMucHVzaCggZWxlbSApOwotICAgIH0KLSAgICB9Ci0g
ICAgfQotICAgIH0KLQotICAgIHRtcCA9IG51bGw7Ci0KLSAgICByZXR1cm4gc2FmZTsKLSAgICB9
LAotCi0gICAgY2xlYW5EYXRhOiBmdW5jdGlvbiggZWxlbXMsIC8qIGludGVybmFsICovIGFjY2Vw
dERhdGEgKSB7Ci0gICAgdmFyIGVsZW0sIHR5cGUsIGlkLCBkYXRhLAotICAgIGkgPSAwLAotICAg
IGludGVybmFsS2V5ID0galF1ZXJ5LmV4cGFuZG8sCi0gICAgY2FjaGUgPSBqUXVlcnkuY2FjaGUs
Ci0gICAgZGVsZXRlRXhwYW5kbyA9IGpRdWVyeS5zdXBwb3J0LmRlbGV0ZUV4cGFuZG8sCi0gICAg
c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsOwotCi0gICAgZm9yICggOyAoZWxlbSA9IGVs
ZW1zW2ldKSAhPSBudWxsOyBpKysgKSB7Ci0KLSAgICBpZiAoIGFjY2VwdERhdGEgfHwgalF1ZXJ5
LmFjY2VwdERhdGEoIGVsZW0gKSApIHsKLQotICAgIGlkID0gZWxlbVsgaW50ZXJuYWxLZXkgXTsK
LSAgICBkYXRhID0gaWQgJiYgY2FjaGVbIGlkIF07Ci0KLSAgICBpZiAoIGRhdGEgKSB7Ci0gICAg
aWYgKCBkYXRhLmV2ZW50cyApIHsKLSAgICBmb3IgKCB0eXBlIGluIGRhdGEuZXZlbnRzICkgewot
ICAgIGlmICggc3BlY2lhbFsgdHlwZSBdICkgewotICAgIGpRdWVyeS5ldmVudC5yZW1vdmUoIGVs
ZW0sIHR5cGUgKTsKLQotICAgIC8vIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBhdm9pZCBqUXVlcnku
ZXZlbnQucmVtb3ZlJ3Mgb3ZlcmhlYWQKLSAgICB9IGVsc2UgewotICAgIGpRdWVyeS5yZW1vdmVF
dmVudCggZWxlbSwgdHlwZSwgZGF0YS5oYW5kbGUgKTsKLSAgICB9Ci0gICAgfQotICAgIH0KLQot
ICAgIC8vIFJlbW92ZSBjYWNoZSBvbmx5IGlmIGl0IHdhcyBub3QgYWxyZWFkeSByZW1vdmVkIGJ5
IGpRdWVyeS5ldmVudC5yZW1vdmUKLSAgICBpZiAoIGNhY2hlWyBpZCBdICkgewotCi0gICAgZGVs
ZXRlIGNhY2hlWyBpZCBdOwotCi0gICAgLy8gSUUgZG9lcyBub3QgYWxsb3cgdXMgdG8gZGVsZXRl
IGV4cGFuZG8gcHJvcGVydGllcyBmcm9tIG5vZGVzLAotICAgIC8vIG5vciBkb2VzIGl0IGhhdmUg
YSByZW1vdmVBdHRyaWJ1dGUgZnVuY3Rpb24gb24gRG9jdW1lbnQgbm9kZXM7Ci0gICAgLy8gd2Ug
bXVzdCBoYW5kbGUgYWxsIG9mIHRoZXNlIGNhc2VzCi0gICAgaWYgKCBkZWxldGVFeHBhbmRvICkg
ewotICAgIGRlbGV0ZSBlbGVtWyBpbnRlcm5hbEtleSBdOwotCi0gICAgfSBlbHNlIGlmICggdHlw
ZW9mIGVsZW0ucmVtb3ZlQXR0cmlidXRlICE9PSBjb3JlX3N0cnVuZGVmaW5lZCApIHsKLSAgICBl
bGVtLnJlbW92ZUF0dHJpYnV0ZSggaW50ZXJuYWxLZXkgKTsKLQotICAgIH0gZWxzZSB7Ci0gICAg
ZWxlbVsgaW50ZXJuYWxLZXkgXSA9IG51bGw7Ci0gICAgfQotCi0gICAgY29yZV9kZWxldGVkSWRz
LnB1c2goIGlkICk7Ci0gICAgfQotICAgIH0KLSAgICB9Ci0gICAgfQotICAgIH0KLX0pOwotdmFy
IGlmcmFtZSwgZ2V0U3R5bGVzLCBjdXJDU1MsCi0gICAgcmFscGhhID0gL2FscGhhXChbXildKlwp
L2ksCi0gICAgcm9wYWNpdHkgPSAvb3BhY2l0eVxzKj1ccyooW14pXSopLywKLSAgICBycG9zaXRp
b24gPSAvXih0b3B8cmlnaHR8Ym90dG9tfGxlZnQpJC8sCi0gICAgLy8gc3dhcHBhYmxlIGlmIGRp
c3BsYXkgaXMgbm9uZSBvciBzdGFydHMgd2l0aCB0YWJsZSBleGNlcHQgInRhYmxlIiwgInRhYmxl
LWNlbGwiLCBvciAidGFibGUtY2FwdGlvbiIKLSAgICAvLyBzZWUgaGVyZSBmb3IgZGlzcGxheSB2
YWx1ZXM6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ1NTL2Rpc3Bs
YXkKLSAgICByZGlzcGxheXN3YXAgPSAvXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sCi0gICAg
cm1hcmdpbiA9IC9ebWFyZ2luLywKLSAgICBybnVtc3BsaXQgPSBuZXcgUmVnRXhwKCAiXigiICsg
Y29yZV9wbnVtICsgIikoLiopJCIsICJpIiApLAotICAgIHJudW1ub25weCA9IG5ldyBSZWdFeHAo
ICJeKCIgKyBjb3JlX3BudW0gKyAiKSg/IXB4KVthLXolXSskIiwgImkiICksCi0gICAgcnJlbE51
bSA9IG5ldyBSZWdFeHAoICJeKFsrLV0pPSgiICsgY29yZV9wbnVtICsgIikiLCAiaSIgKSwKLSAg
ICBlbGVtZGlzcGxheSA9IHsgQk9EWTogImJsb2NrIiB9LAotCi0gICAgY3NzU2hvdyA9IHsgcG9z
aXRpb246ICJhYnNvbHV0ZSIsIHZpc2liaWxpdHk6ICJoaWRkZW4iLCBkaXNwbGF5OiAiYmxvY2si
IH0sCi0gICAgY3NzTm9ybWFsVHJhbnNmb3JtID0gewotICAgIGxldHRlclNwYWNpbmc6IDAsCi0g
ICAgZm9udFdlaWdodDogNDAwCi0gICAgfSwKLQotICAgIGNzc0V4cGFuZCA9IFsgIlRvcCIsICJS
aWdodCIsICJCb3R0b20iLCAiTGVmdCIgXSwKLSAgICBjc3NQcmVmaXhlcyA9IFsgIldlYmtpdCIs
ICJPIiwgIk1veiIsICJtcyIgXTsKLQotLy8gcmV0dXJuIGEgY3NzIHByb3BlcnR5IG1hcHBlZCB0
byBhIHBvdGVudGlhbGx5IHZlbmRvciBwcmVmaXhlZCBwcm9wZXJ0eQotZnVuY3Rpb24gdmVuZG9y
UHJvcE5hbWUoIHN0eWxlLCBuYW1lICkgewotCi0gICAgLy8gc2hvcnRjdXQgZm9yIG5hbWVzIHRo
YXQgYXJlIG5vdCB2ZW5kb3IgcHJlZml4ZWQKLSAgICBpZiAoIG5hbWUgaW4gc3R5bGUgKSB7Ci0g
ICAgcmV0dXJuIG5hbWU7Ci0gICAgfQotCi0gICAgLy8gY2hlY2sgZm9yIHZlbmRvciBwcmVmaXhl
ZCBuYW1lcwotICAgIHZhciBjYXBOYW1lID0gbmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSAr
IG5hbWUuc2xpY2UoMSksCi0gICAgb3JpZ05hbWUgPSBuYW1lLAotICAgIGkgPSBjc3NQcmVmaXhl
cy5sZW5ndGg7Ci0KLSAgICB3aGlsZSAoIGktLSApIHsKLSAgICBuYW1lID0gY3NzUHJlZml4ZXNb
IGkgXSArIGNhcE5hbWU7Ci0gICAgaWYgKCBuYW1lIGluIHN0eWxlICkgewotICAgIHJldHVybiBu
YW1lOwotICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gb3JpZ05hbWU7Ci19Ci0KLWZ1bmN0aW9u
IGlzSGlkZGVuKCBlbGVtLCBlbCApIHsKLSAgICAvLyBpc0hpZGRlbiBtaWdodCBiZSBjYWxsZWQg
ZnJvbSBqUXVlcnkjZmlsdGVyIGZ1bmN0aW9uOwotICAgIC8vIGluIHRoYXQgY2FzZSwgZWxlbWVu
dCB3aWxsIGJlIHNlY29uZCBhcmd1bWVudAotICAgIGVsZW0gPSBlbCB8fCBlbGVtOwotICAgIHJl
dHVybiBqUXVlcnkuY3NzKCBlbGVtLCAiZGlzcGxheSIgKSA9PT0gIm5vbmUiIHx8ICFqUXVlcnku
Y29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApOwotfQotCi1mdW5jdGlvbiBzaG93
SGlkZSggZWxlbWVudHMsIHNob3cgKSB7Ci0gICAgdmFyIGRpc3BsYXksIGVsZW0sIGhpZGRlbiwK
LSAgICB2YWx1ZXMgPSBbXSwKLSAgICBpbmRleCA9IDAsCi0gICAgbGVuZ3RoID0gZWxlbWVudHMu
bGVuZ3RoOwotCi0gICAgZm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHsKLSAgICBl
bGVtID0gZWxlbWVudHNbIGluZGV4IF07Ci0gICAgaWYgKCAhZWxlbS5zdHlsZSApIHsKLSAgICBj
b250aW51ZTsKLSAgICB9Ci0KLSAgICB2YWx1ZXNbIGluZGV4IF0gPSBqUXVlcnkuX2RhdGEoIGVs
ZW0sICJvbGRkaXNwbGF5IiApOwotICAgIGRpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXk7Ci0g
ICAgaWYgKCBzaG93ICkgewotICAgIC8vIFJlc2V0IHRoZSBpbmxpbmUgZGlzcGxheSBvZiB0aGlz
IGVsZW1lbnQgdG8gbGVhcm4gaWYgaXQgaXMKLSAgICAvLyBiZWluZyBoaWRkZW4gYnkgY2FzY2Fk
ZWQgcnVsZXMgb3Igbm90Ci0gICAgaWYgKCAhdmFsdWVzWyBpbmRleCBdICYmIGRpc3BsYXkgPT09
ICJub25lIiApIHsKLSAgICBlbGVtLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICB9Ci0KLSAgICAv
LyBTZXQgZWxlbWVudHMgd2hpY2ggaGF2ZSBiZWVuIG92ZXJyaWRkZW4gd2l0aCBkaXNwbGF5OiBu
b25lCi0gICAgLy8gaW4gYSBzdHlsZXNoZWV0IHRvIHdoYXRldmVyIHRoZSBkZWZhdWx0IGJyb3dz
ZXIgc3R5bGUgaXMKLSAgICAvLyBmb3Igc3VjaCBhbiBlbGVtZW50Ci0gICAgaWYgKCBlbGVtLnN0
eWxlLmRpc3BsYXkgPT09ICIiICYmIGlzSGlkZGVuKCBlbGVtICkgKSB7Ci0gICAgdmFsdWVzWyBp
bmRleCBdID0galF1ZXJ5Ll9kYXRhKCBlbGVtLCAib2xkZGlzcGxheSIsIGNzc19kZWZhdWx0RGlz
cGxheShlbGVtLm5vZGVOYW1lKSApOwotICAgIH0KLSAgICB9IGVsc2UgewotCi0gICAgaWYgKCAh
dmFsdWVzWyBpbmRleCBdICkgewotICAgIGhpZGRlbiA9IGlzSGlkZGVuKCBlbGVtICk7Ci0KLSAg
ICBpZiAoIGRpc3BsYXkgJiYgZGlzcGxheSAhPT0gIm5vbmUiIHx8ICFoaWRkZW4gKSB7Ci0gICAg
alF1ZXJ5Ll9kYXRhKCBlbGVtLCAib2xkZGlzcGxheSIsIGhpZGRlbiA/IGRpc3BsYXkgOiBqUXVl
cnkuY3NzKCBlbGVtLCAiZGlzcGxheSIgKSApOwotICAgIH0KLSAgICB9Ci0gICAgfQotICAgIH0K
LQotICAgIC8vIFNldCB0aGUgZGlzcGxheSBvZiBtb3N0IG9mIHRoZSBlbGVtZW50cyBpbiBhIHNl
Y29uZCBsb29wCi0gICAgLy8gdG8gYXZvaWQgdGhlIGNvbnN0YW50IHJlZmxvdwotICAgIGZvciAo
IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7Ci0gICAgZWxlbSA9IGVsZW1l
bnRzWyBpbmRleCBdOwotICAgIGlmICggIWVsZW0uc3R5bGUgKSB7Ci0gICAgY29udGludWU7Ci0g
ICAgfQotICAgIGlmICggIXNob3cgfHwgZWxlbS5zdHlsZS5kaXNwbGF5ID09PSAibm9uZSIgfHwg
ZWxlbS5zdHlsZS5kaXNwbGF5ID09PSAiIiApIHsKLSAgICBlbGVtLnN0eWxlLmRpc3BsYXkgPSBz
aG93ID8gdmFsdWVzWyBpbmRleCBdIHx8ICIiIDogIm5vbmUiOwotICAgIH0KLSAgICB9Ci0KLSAg
ICByZXR1cm4gZWxlbWVudHM7Ci19Ci0KLWpRdWVyeS5mbi5leHRlbmQoewotICAgIGNzczogZnVu
Y3Rpb24oIG5hbWUsIHZhbHVlICkgewotICAgIHJldHVybiBqUXVlcnkuYWNjZXNzKCB0aGlzLCBm
dW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7Ci0gICAgdmFyIGxlbiwgc3R5bGVzLAotICAg
IG1hcCA9IHt9LAotICAgIGkgPSAwOwotCi0gICAgaWYgKCBqUXVlcnkuaXNBcnJheSggbmFtZSAp
ICkgewotICAgIHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApOwotICAgIGxlbiA9IG5hbWUubGVu
Z3RoOwotCi0gICAgZm9yICggOyBpIDwgbGVuOyBpKysgKSB7Ci0gICAgbWFwWyBuYW1lWyBpIF0g
XSA9IGpRdWVyeS5jc3MoIGVsZW0sIG5hbWVbIGkgXSwgZmFsc2UsIHN0eWxlcyApOwotICAgIH0K
LQotICAgIHJldHVybiBtYXA7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmlu
ZWQgPwotICAgIGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSwgdmFsdWUgKSA6Ci0gICAgalF1ZXJ5
LmNzcyggZWxlbSwgbmFtZSApOwotICAgIH0sIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3Ro
ID4gMSApOwotICAgIH0sCi0gICAgc2hvdzogZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHNob3dI
aWRlKCB0aGlzLCB0cnVlICk7Ci0gICAgfSwKLSAgICBoaWRlOiBmdW5jdGlvbigpIHsKLSAgICBy
ZXR1cm4gc2hvd0hpZGUoIHRoaXMgKTsKLSAgICB9LAotICAgIHRvZ2dsZTogZnVuY3Rpb24oIHN0
YXRlICkgewotICAgIHZhciBib29sID0gdHlwZW9mIHN0YXRlID09PSAiYm9vbGVhbiI7Ci0KLSAg
ICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewotICAgIGlmICggYm9vbCA/IHN0YXRlIDog
aXNIaWRkZW4oIHRoaXMgKSApIHsKLSAgICBqUXVlcnkoIHRoaXMgKS5zaG93KCk7Ci0gICAgfSBl
bHNlIHsKLSAgICBqUXVlcnkoIHRoaXMgKS5oaWRlKCk7Ci0gICAgfQotICAgIH0pOwotICAgIH0K
LX0pOwotCi1qUXVlcnkuZXh0ZW5kKHsKLSAgICAvLyBBZGQgaW4gc3R5bGUgcHJvcGVydHkgaG9v
a3MgZm9yIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQKLSAgICAvLyBiZWhhdmlvciBvZiBnZXR0aW5n
IGFuZCBzZXR0aW5nIGEgc3R5bGUgcHJvcGVydHkKLSAgICBjc3NIb29rczogewotICAgIG9wYWNp
dHk6IHsKLSAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHsKLSAgICBpZiAoIGNv
bXB1dGVkICkgewotICAgIC8vIFdlIHNob3VsZCBhbHdheXMgZ2V0IGEgbnVtYmVyIGJhY2sgZnJv
bSBvcGFjaXR5Ci0gICAgdmFyIHJldCA9IGN1ckNTUyggZWxlbSwgIm9wYWNpdHkiICk7Ci0gICAg
cmV0dXJuIHJldCA9PT0gIiIgPyAiMSIgOiByZXQ7Ci0gICAgfQotICAgIH0KLSAgICB9Ci0gICAg
fSwKLQotICAgIC8vIEV4Y2x1ZGUgdGhlIGZvbGxvd2luZyBjc3MgcHJvcGVydGllcyB0byBhZGQg
cHgKLSAgICBjc3NOdW1iZXI6IHsKLSAgICAiY29sdW1uQ291bnQiOiB0cnVlLAotICAgICJmaWxs
T3BhY2l0eSI6IHRydWUsCi0gICAgImZvbnRXZWlnaHQiOiB0cnVlLAotICAgICJsaW5lSGVpZ2h0
IjogdHJ1ZSwKLSAgICAib3BhY2l0eSI6IHRydWUsCi0gICAgIm9ycGhhbnMiOiB0cnVlLAotICAg
ICJ3aWRvd3MiOiB0cnVlLAotICAgICJ6SW5kZXgiOiB0cnVlLAotICAgICJ6b29tIjogdHJ1ZQot
ICAgIH0sCi0KLSAgICAvLyBBZGQgaW4gcHJvcGVydGllcyB3aG9zZSBuYW1lcyB5b3Ugd2lzaCB0
byBmaXggYmVmb3JlCi0gICAgLy8gc2V0dGluZyBvciBnZXR0aW5nIHRoZSB2YWx1ZQotICAgIGNz
c1Byb3BzOiB7Ci0gICAgLy8gbm9ybWFsaXplIGZsb2F0IGNzcyBwcm9wZXJ0eQotICAgICJmbG9h
dCI6IGpRdWVyeS5zdXBwb3J0LmNzc0Zsb2F0ID8gImNzc0Zsb2F0IiA6ICJzdHlsZUZsb2F0Igot
ICAgIH0sCi0KLSAgICAvLyBHZXQgYW5kIHNldCB0aGUgc3R5bGUgcHJvcGVydHkgb24gYSBET00g
Tm9kZQotICAgIHN0eWxlOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUsIGV4dHJhICkgewot
ICAgIC8vIERvbid0IHNldCBzdHlsZXMgb24gdGV4dCBhbmQgY29tbWVudCBub2RlcwotICAgIGlm
ICggIWVsZW0gfHwgZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4IHx8
ICFlbGVtLnN0eWxlICkgewotICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBNYWtlIHN1cmUg
dGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUKLSAgICB2YXIgcmV0LCB0eXBl
LCBob29rcywKLSAgICBvcmlnTmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5hbWUgKSwKLSAgICBz
dHlsZSA9IGVsZW0uc3R5bGU7Ci0KLSAgICBuYW1lID0galF1ZXJ5LmNzc1Byb3BzWyBvcmlnTmFt
ZSBdIHx8ICggalF1ZXJ5LmNzc1Byb3BzWyBvcmlnTmFtZSBdID0gdmVuZG9yUHJvcE5hbWUoIHN0
eWxlLCBvcmlnTmFtZSApICk7Ci0KLSAgICAvLyBnZXRzIGhvb2sgZm9yIHRoZSBwcmVmaXhlZCB2
ZXJzaW9uCi0gICAgLy8gZm9sbG93ZWQgYnkgdGhlIHVucHJlZml4ZWQgdmVyc2lvbgotICAgIGhv
b2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFt
ZSBdOwotCi0gICAgLy8gQ2hlY2sgaWYgd2UncmUgc2V0dGluZyBhIHZhbHVlCi0gICAgaWYgKCB2
YWx1ZSAhPT0gdW5kZWZpbmVkICkgewotICAgIHR5cGUgPSB0eXBlb2YgdmFsdWU7Ci0KLSAgICAv
LyBjb252ZXJ0IHJlbGF0aXZlIG51bWJlciBzdHJpbmdzICgrPSBvciAtPSkgdG8gcmVsYXRpdmUg
bnVtYmVycy4gIzczNDUKLSAgICBpZiAoIHR5cGUgPT09ICJzdHJpbmciICYmIChyZXQgPSBycmVs
TnVtLmV4ZWMoIHZhbHVlICkpICkgewotICAgIHZhbHVlID0gKCByZXRbMV0gKyAxICkgKiByZXRb
Ml0gKyBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKCBlbGVtLCBuYW1lICkgKTsKLSAgICAvLyBGaXhl
cyBidWcgIzkyMzcKLSAgICB0eXBlID0gIm51bWJlciI7Ci0gICAgfQotCi0gICAgLy8gTWFrZSBz
dXJlIHRoYXQgTmFOIGFuZCBudWxsIHZhbHVlcyBhcmVuJ3Qgc2V0LiBTZWU6ICM3MTE2Ci0gICAg
aWYgKCB2YWx1ZSA9PSBudWxsIHx8IHR5cGUgPT09ICJudW1iZXIiICYmIGlzTmFOKCB2YWx1ZSAp
ICkgewotICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBJZiBhIG51bWJlciB3YXMgcGFzc2Vk
IGluLCBhZGQgJ3B4JyB0byB0aGUgKGV4Y2VwdCBmb3IgY2VydGFpbiBDU1MgcHJvcGVydGllcykK
LSAgICBpZiAoIHR5cGUgPT09ICJudW1iZXIiICYmICFqUXVlcnkuY3NzTnVtYmVyWyBvcmlnTmFt
ZSBdICkgewotICAgIHZhbHVlICs9ICJweCI7Ci0gICAgfQotCi0gICAgLy8gRml4ZXMgIzg5MDgs
IGl0IGNhbiBiZSBkb25lIG1vcmUgY29ycmVjdGx5IGJ5IHNwZWNpZmluZyBzZXR0ZXJzIGluIGNz
c0hvb2tzLAotICAgIC8vIGJ1dCBpdCB3b3VsZCBtZWFuIHRvIGRlZmluZSBlaWdodCAoZm9yIGV2
ZXJ5IHByb2JsZW1hdGljIHByb3BlcnR5KSBpZGVudGljYWwgZnVuY3Rpb25zCi0gICAgaWYgKCAh
alF1ZXJ5LnN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlICYmIHZhbHVlID09PSAiIiAmJiBuYW1lLmlu
ZGV4T2YoImJhY2tncm91bmQiKSA9PT0gMCApIHsKLSAgICBzdHlsZVsgbmFtZSBdID0gImluaGVy
aXQiOwotICAgIH0KLQotICAgIC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQsIHVzZSB0aGF0IHZh
bHVlLCBvdGhlcndpc2UganVzdCBzZXQgdGhlIHNwZWNpZmllZCB2YWx1ZQotICAgIGlmICggIWhv
b2tzIHx8ICEoInNldCIgaW4gaG9va3MpIHx8ICh2YWx1ZSA9IGhvb2tzLnNldCggZWxlbSwgdmFs
dWUsIGV4dHJhICkpICE9PSB1bmRlZmluZWQgKSB7Ci0KLSAgICAvLyBXcmFwcGVkIHRvIHByZXZl
bnQgSUUgZnJvbSB0aHJvd2luZyBlcnJvcnMgd2hlbiAnaW52YWxpZCcgdmFsdWVzIGFyZSBwcm92
aWRlZAotICAgIC8vIEZpeGVzIGJ1ZyAjNTUwOQotICAgIHRyeSB7Ci0gICAgc3R5bGVbIG5hbWUg
XSA9IHZhbHVlOwotICAgIH0gY2F0Y2goZSkge30KLSAgICB9Ci0KLSAgICB9IGVsc2UgewotICAg
IC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBub24tY29tcHV0ZWQgdmFsdWUgZnJv
bSB0aGVyZQotICAgIGlmICggaG9va3MgJiYgImdldCIgaW4gaG9va3MgJiYgKHJldCA9IGhvb2tz
LmdldCggZWxlbSwgZmFsc2UsIGV4dHJhICkpICE9PSB1bmRlZmluZWQgKSB7Ci0gICAgcmV0dXJu
IHJldDsKLSAgICB9Ci0KLSAgICAvLyBPdGhlcndpc2UganVzdCBnZXQgdGhlIHZhbHVlIGZyb20g
dGhlIHN0eWxlIG9iamVjdAotICAgIHJldHVybiBzdHlsZVsgbmFtZSBdOwotICAgIH0KLSAgICB9
LAotCi0gICAgY3NzOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZXh0cmEsIHN0eWxlcyApIHsKLSAg
ICB2YXIgbnVtLCB2YWwsIGhvb2tzLAotICAgIG9yaWdOYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSgg
bmFtZSApOwotCi0gICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSBy
aWdodCBuYW1lCi0gICAgbmFtZSA9IGpRdWVyeS5jc3NQcm9wc1sgb3JpZ05hbWUgXSB8fCAoIGpR
dWVyeS5jc3NQcm9wc1sgb3JpZ05hbWUgXSA9IHZlbmRvclByb3BOYW1lKCBlbGVtLnN0eWxlLCBv
cmlnTmFtZSApICk7Ci0KLSAgICAvLyBnZXRzIGhvb2sgZm9yIHRoZSBwcmVmaXhlZCB2ZXJzaW9u
Ci0gICAgLy8gZm9sbG93ZWQgYnkgdGhlIHVucHJlZml4ZWQgdmVyc2lvbgotICAgIGhvb2tzID0g
alF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdOwot
Ci0gICAgLy8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGZy
b20gdGhlcmUKLSAgICBpZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tzICkgewotICAgIHZhbCA9
IGhvb2tzLmdldCggZWxlbSwgdHJ1ZSwgZXh0cmEgKTsKLSAgICB9Ci0KLSAgICAvLyBPdGhlcndp
c2UsIGlmIGEgd2F5IHRvIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZXhpc3RzLCB1c2UgdGhhdAot
ICAgIGlmICggdmFsID09PSB1bmRlZmluZWQgKSB7Ci0gICAgdmFsID0gY3VyQ1NTKCBlbGVtLCBu
YW1lLCBzdHlsZXMgKTsKLSAgICB9Ci0KLSAgICAvL2NvbnZlcnQgIm5vcm1hbCIgdG8gY29tcHV0
ZWQgdmFsdWUKLSAgICBpZiAoIHZhbCA9PT0gIm5vcm1hbCIgJiYgbmFtZSBpbiBjc3NOb3JtYWxU
cmFuc2Zvcm0gKSB7Ci0gICAgdmFsID0gY3NzTm9ybWFsVHJhbnNmb3JtWyBuYW1lIF07Ci0gICAg
fQotCi0gICAgLy8gUmV0dXJuLCBjb252ZXJ0aW5nIHRvIG51bWJlciBpZiBmb3JjZWQgb3IgYSBx
dWFsaWZpZXIgd2FzIHByb3ZpZGVkIGFuZCB2YWwgbG9va3MgbnVtZXJpYwotICAgIGlmICggZXh0
cmEgPT09ICIiIHx8IGV4dHJhICkgewotICAgIG51bSA9IHBhcnNlRmxvYXQoIHZhbCApOwotICAg
IHJldHVybiBleHRyYSA9PT0gdHJ1ZSB8fCBqUXVlcnkuaXNOdW1lcmljKCBudW0gKSA/IG51bSB8
fCAwIDogdmFsOwotICAgIH0KLSAgICByZXR1cm4gdmFsOwotICAgIH0sCi0KLSAgICAvLyBBIG1l
dGhvZCBmb3IgcXVpY2tseSBzd2FwcGluZyBpbi9vdXQgQ1NTIHByb3BlcnRpZXMgdG8gZ2V0IGNv
cnJlY3QgY2FsY3VsYXRpb25zCi0gICAgc3dhcDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGNh
bGxiYWNrLCBhcmdzICkgewotICAgIHZhciByZXQsIG5hbWUsCi0gICAgb2xkID0ge307Ci0KLSAg
ICAvLyBSZW1lbWJlciB0aGUgb2xkIHZhbHVlcywgYW5kIGluc2VydCB0aGUgbmV3IG9uZXMKLSAg
ICBmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7Ci0gICAgb2xkWyBuYW1lIF0gPSBlbGVtLnN0eWxl
WyBuYW1lIF07Ci0gICAgZWxlbS5zdHlsZVsgbmFtZSBdID0gb3B0aW9uc1sgbmFtZSBdOwotICAg
IH0KLQotICAgIHJldCA9IGNhbGxiYWNrLmFwcGx5KCBlbGVtLCBhcmdzIHx8IFtdICk7Ci0KLSAg
ICAvLyBSZXZlcnQgdGhlIG9sZCB2YWx1ZXMKLSAgICBmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7
Ci0gICAgZWxlbS5zdHlsZVsgbmFtZSBdID0gb2xkWyBuYW1lIF07Ci0gICAgfQotCi0gICAgcmV0
dXJuIHJldDsKLSAgICB9Ci19KTsKLQotLy8gTk9URTogd2UndmUgaW5jbHVkZWQgdGhlICJ3aW5k
b3ciIGluIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlCi0vLyBiZWNhdXNlIGpzZG9tIG9uIG5vZGUu
anMgd2lsbCBicmVhayB3aXRob3V0IGl0LgotaWYgKCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSAp
IHsKLSAgICBnZXRTdHlsZXMgPSBmdW5jdGlvbiggZWxlbSApIHsKLSAgICByZXR1cm4gd2luZG93
LmdldENvbXB1dGVkU3R5bGUoIGVsZW0sIG51bGwgKTsKLSAgICB9OwotCi0gICAgY3VyQ1NTID0g
ZnVuY3Rpb24oIGVsZW0sIG5hbWUsIF9jb21wdXRlZCApIHsKLSAgICB2YXIgd2lkdGgsIG1pbldp
ZHRoLCBtYXhXaWR0aCwKLSAgICBjb21wdXRlZCA9IF9jb21wdXRlZCB8fCBnZXRTdHlsZXMoIGVs
ZW0gKSwKLQotICAgIC8vIGdldFByb3BlcnR5VmFsdWUgaXMgb25seSBuZWVkZWQgZm9yIC5jc3Mo
J2ZpbHRlcicpIGluIElFOSwgc2VlICMxMjUzNwotICAgIHJldCA9IGNvbXB1dGVkID8gY29tcHV0
ZWQuZ2V0UHJvcGVydHlWYWx1ZSggbmFtZSApIHx8IGNvbXB1dGVkWyBuYW1lIF0gOiB1bmRlZmlu
ZWQsCi0gICAgc3R5bGUgPSBlbGVtLnN0eWxlOwotCi0gICAgaWYgKCBjb21wdXRlZCApIHsKLQot
ICAgIGlmICggcmV0ID09PSAiIiAmJiAhalF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1l
bnQsIGVsZW0gKSApIHsKLSAgICByZXQgPSBqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUgKTsKLSAg
ICB9Ci0KLSAgICAvLyBBIHRyaWJ1dGUgdG8gdGhlICJhd2Vzb21lIGhhY2sgYnkgRGVhbiBFZHdh
cmRzIgotICAgIC8vIENocm9tZSA8IDE3IGFuZCBTYWZhcmkgNS4wIHVzZXMgImNvbXB1dGVkIHZh
bHVlIiBpbnN0ZWFkIG9mICJ1c2VkIHZhbHVlIiBmb3IgbWFyZ2luLXJpZ2h0Ci0gICAgLy8gU2Fm
YXJpIDUuMS43IChhdCBsZWFzdCkgcmV0dXJucyBwZXJjZW50YWdlIGZvciBhIGxhcmdlciBzZXQg
b2YgdmFsdWVzLCBidXQgd2lkdGggc2VlbXMgdG8gYmUgcmVsaWFibHkgcGl4ZWxzCi0gICAgLy8g
dGhpcyBpcyBhZ2FpbnN0IHRoZSBDU1NPTSBkcmFmdCBzcGVjOiBodHRwOi8vZGV2LnczLm9yZy9j
c3N3Zy9jc3NvbS8jcmVzb2x2ZWQtdmFsdWVzCi0gICAgaWYgKCBybnVtbm9ucHgudGVzdCggcmV0
ICkgJiYgcm1hcmdpbi50ZXN0KCBuYW1lICkgKSB7Ci0KLSAgICAvLyBSZW1lbWJlciB0aGUgb3Jp
Z2luYWwgdmFsdWVzCi0gICAgd2lkdGggPSBzdHlsZS53aWR0aDsKLSAgICBtaW5XaWR0aCA9IHN0
eWxlLm1pbldpZHRoOwotICAgIG1heFdpZHRoID0gc3R5bGUubWF4V2lkdGg7Ci0KLSAgICAvLyBQ
dXQgaW4gdGhlIG5ldyB2YWx1ZXMgdG8gZ2V0IGEgY29tcHV0ZWQgdmFsdWUgb3V0Ci0gICAgc3R5
bGUubWluV2lkdGggPSBzdHlsZS5tYXhXaWR0aCA9IHN0eWxlLndpZHRoID0gcmV0OwotICAgIHJl
dCA9IGNvbXB1dGVkLndpZHRoOwotCi0gICAgLy8gUmV2ZXJ0IHRoZSBjaGFuZ2VkIHZhbHVlcwot
ICAgIHN0eWxlLndpZHRoID0gd2lkdGg7Ci0gICAgc3R5bGUubWluV2lkdGggPSBtaW5XaWR0aDsK
LSAgICBzdHlsZS5tYXhXaWR0aCA9IG1heFdpZHRoOwotICAgIH0KLSAgICB9Ci0KLSAgICByZXR1
cm4gcmV0OwotICAgIH07Ci19IGVsc2UgaWYgKCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY3Vy
cmVudFN0eWxlICkgewotICAgIGdldFN0eWxlcyA9IGZ1bmN0aW9uKCBlbGVtICkgewotICAgIHJl
dHVybiBlbGVtLmN1cnJlbnRTdHlsZTsKLSAgICB9OwotCi0gICAgY3VyQ1NTID0gZnVuY3Rpb24o
IGVsZW0sIG5hbWUsIF9jb21wdXRlZCApIHsKLSAgICB2YXIgbGVmdCwgcnMsIHJzTGVmdCwKLSAg
ICBjb21wdXRlZCA9IF9jb21wdXRlZCB8fCBnZXRTdHlsZXMoIGVsZW0gKSwKLSAgICByZXQgPSBj
b21wdXRlZCA/IGNvbXB1dGVkWyBuYW1lIF0gOiB1bmRlZmluZWQsCi0gICAgc3R5bGUgPSBlbGVt
LnN0eWxlOwotCi0gICAgLy8gQXZvaWQgc2V0dGluZyByZXQgdG8gZW1wdHkgc3RyaW5nIGhlcmUK
LSAgICAvLyBzbyB3ZSBkb24ndCBkZWZhdWx0IHRvIGF1dG8KLSAgICBpZiAoIHJldCA9PSBudWxs
ICYmIHN0eWxlICYmIHN0eWxlWyBuYW1lIF0gKSB7Ci0gICAgcmV0ID0gc3R5bGVbIG5hbWUgXTsK
LSAgICB9Ci0KLSAgICAvLyBGcm9tIHRoZSBhd2Vzb21lIGhhY2sgYnkgRGVhbiBFZHdhcmRzCi0g
ICAgLy8gaHR0cDovL2VyaWsuZWFlLm5ldC9hcmNoaXZlcy8yMDA3LzA3LzI3LzE4LjU0LjE1LyNj
b21tZW50LTEwMjI5MQotCi0gICAgLy8gSWYgd2UncmUgbm90IGRlYWxpbmcgd2l0aCBhIHJlZ3Vs
YXIgcGl4ZWwgbnVtYmVyCi0gICAgLy8gYnV0IGEgbnVtYmVyIHRoYXQgaGFzIGEgd2VpcmQgZW5k
aW5nLCB3ZSBuZWVkIHRvIGNvbnZlcnQgaXQgdG8gcGl4ZWxzCi0gICAgLy8gYnV0IG5vdCBwb3Np
dGlvbiBjc3MgYXR0cmlidXRlcywgYXMgdGhvc2UgYXJlIHByb3BvcnRpb25hbCB0byB0aGUgcGFy
ZW50IGVsZW1lbnQgaW5zdGVhZAotICAgIC8vIGFuZCB3ZSBjYW4ndCBtZWFzdXJlIHRoZSBwYXJl
bnQgaW5zdGVhZCBiZWNhdXNlIGl0IG1pZ2h0IHRyaWdnZXIgYSAic3RhY2tpbmcgZG9sbHMiIHBy
b2JsZW0KLSAgICBpZiAoIHJudW1ub25weC50ZXN0KCByZXQgKSAmJiAhcnBvc2l0aW9uLnRlc3Qo
IG5hbWUgKSApIHsKLQotICAgIC8vIFJlbWVtYmVyIHRoZSBvcmlnaW5hbCB2YWx1ZXMKLSAgICBs
ZWZ0ID0gc3R5bGUubGVmdDsKLSAgICBycyA9IGVsZW0ucnVudGltZVN0eWxlOwotICAgIHJzTGVm
dCA9IHJzICYmIHJzLmxlZnQ7Ci0KLSAgICAvLyBQdXQgaW4gdGhlIG5ldyB2YWx1ZXMgdG8gZ2V0
IGEgY29tcHV0ZWQgdmFsdWUgb3V0Ci0gICAgaWYgKCByc0xlZnQgKSB7Ci0gICAgcnMubGVmdCA9
IGVsZW0uY3VycmVudFN0eWxlLmxlZnQ7Ci0gICAgfQotICAgIHN0eWxlLmxlZnQgPSBuYW1lID09
PSAiZm9udFNpemUiID8gIjFlbSIgOiByZXQ7Ci0gICAgcmV0ID0gc3R5bGUucGl4ZWxMZWZ0ICsg
InB4IjsKLQotICAgIC8vIFJldmVydCB0aGUgY2hhbmdlZCB2YWx1ZXMKLSAgICBzdHlsZS5sZWZ0
ID0gbGVmdDsKLSAgICBpZiAoIHJzTGVmdCApIHsKLSAgICBycy5sZWZ0ID0gcnNMZWZ0OwotICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmV0ID09PSAiIiA/ICJhdXRvIiA6IHJldDsKLSAgICB9
OwotfQotCi1mdW5jdGlvbiBzZXRQb3NpdGl2ZU51bWJlciggZWxlbSwgdmFsdWUsIHN1YnRyYWN0
ICkgewotICAgIHZhciBtYXRjaGVzID0gcm51bXNwbGl0LmV4ZWMoIHZhbHVlICk7Ci0gICAgcmV0
dXJuIG1hdGNoZXMgPwotICAgIC8vIEd1YXJkIGFnYWluc3QgdW5kZWZpbmVkICJzdWJ0cmFjdCIs
IGUuZy4sIHdoZW4gdXNlZCBhcyBpbiBjc3NIb29rcwotICAgIE1hdGgubWF4KCAwLCBtYXRjaGVz
WyAxIF0gLSAoIHN1YnRyYWN0IHx8IDAgKSApICsgKCBtYXRjaGVzWyAyIF0gfHwgInB4IiApIDoK
LSAgICB2YWx1ZTsKLX0KLQotZnVuY3Rpb24gYXVnbWVudFdpZHRoT3JIZWlnaHQoIGVsZW0sIG5h
bWUsIGV4dHJhLCBpc0JvcmRlckJveCwgc3R5bGVzICkgewotICAgIHZhciBpID0gZXh0cmEgPT09
ICggaXNCb3JkZXJCb3ggPyAiYm9yZGVyIiA6ICJjb250ZW50IiApID8KLSAgICAvLyBJZiB3ZSBh
bHJlYWR5IGhhdmUgdGhlIHJpZ2h0IG1lYXN1cmVtZW50LCBhdm9pZCBhdWdtZW50YXRpb24KLSAg
ICA0IDoKLSAgICAvLyBPdGhlcndpc2UgaW5pdGlhbGl6ZSBmb3IgaG9yaXpvbnRhbCBvciB2ZXJ0
aWNhbCBwcm9wZXJ0aWVzCi0gICAgbmFtZSA9PT0gIndpZHRoIiA/IDEgOiAwLAotCi0gICAgdmFs
ID0gMDsKLQotICAgIGZvciAoIDsgaSA8IDQ7IGkgKz0gMiApIHsKLSAgICAvLyBib3RoIGJveCBt
b2RlbHMgZXhjbHVkZSBtYXJnaW4sIHNvIGFkZCBpdCBpZiB3ZSB3YW50IGl0Ci0gICAgaWYgKCBl
eHRyYSA9PT0gIm1hcmdpbiIgKSB7Ci0gICAgdmFsICs9IGpRdWVyeS5jc3MoIGVsZW0sIGV4dHJh
ICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApOwotICAgIH0KLQotICAgIGlmICggaXNC
b3JkZXJCb3ggKSB7Ci0gICAgLy8gYm9yZGVyLWJveCBpbmNsdWRlcyBwYWRkaW5nLCBzbyByZW1v
dmUgaXQgaWYgd2Ugd2FudCBjb250ZW50Ci0gICAgaWYgKCBleHRyYSA9PT0gImNvbnRlbnQiICkg
ewotICAgIHZhbCAtPSBqUXVlcnkuY3NzKCBlbGVtLCAicGFkZGluZyIgKyBjc3NFeHBhbmRbIGkg
XSwgdHJ1ZSwgc3R5bGVzICk7Ci0gICAgfQotCi0gICAgLy8gYXQgdGhpcyBwb2ludCwgZXh0cmEg
aXNuJ3QgYm9yZGVyIG5vciBtYXJnaW4sIHNvIHJlbW92ZSBib3JkZXIKLSAgICBpZiAoIGV4dHJh
ICE9PSAibWFyZ2luIiApIHsKLSAgICB2YWwgLT0galF1ZXJ5LmNzcyggZWxlbSwgImJvcmRlciIg
KyBjc3NFeHBhbmRbIGkgXSArICJXaWR0aCIsIHRydWUsIHN0eWxlcyApOwotICAgIH0KLSAgICB9
IGVsc2UgewotICAgIC8vIGF0IHRoaXMgcG9pbnQsIGV4dHJhIGlzbid0IGNvbnRlbnQsIHNvIGFk
ZCBwYWRkaW5nCi0gICAgdmFsICs9IGpRdWVyeS5jc3MoIGVsZW0sICJwYWRkaW5nIiArIGNzc0V4
cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTsKLQotICAgIC8vIGF0IHRoaXMgcG9pbnQsIGV4dHJh
IGlzbid0IGNvbnRlbnQgbm9yIHBhZGRpbmcsIHNvIGFkZCBib3JkZXIKLSAgICBpZiAoIGV4dHJh
ICE9PSAicGFkZGluZyIgKSB7Ci0gICAgdmFsICs9IGpRdWVyeS5jc3MoIGVsZW0sICJib3JkZXIi
ICsgY3NzRXhwYW5kWyBpIF0gKyAiV2lkdGgiLCB0cnVlLCBzdHlsZXMgKTsKLSAgICB9Ci0gICAg
fQotICAgIH0KLQotICAgIHJldHVybiB2YWw7Ci19Ci0KLWZ1bmN0aW9uIGdldFdpZHRoT3JIZWln
aHQoIGVsZW0sIG5hbWUsIGV4dHJhICkgewotCi0gICAgLy8gU3RhcnQgd2l0aCBvZmZzZXQgcHJv
cGVydHksIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGJvcmRlci1ib3ggdmFsdWUKLSAgICB2
YXIgdmFsdWVJc0JvcmRlckJveCA9IHRydWUsCi0gICAgdmFsID0gbmFtZSA9PT0gIndpZHRoIiA/
IGVsZW0ub2Zmc2V0V2lkdGggOiBlbGVtLm9mZnNldEhlaWdodCwKLSAgICBzdHlsZXMgPSBnZXRT
dHlsZXMoIGVsZW0gKSwKLSAgICBpc0JvcmRlckJveCA9IGpRdWVyeS5zdXBwb3J0LmJveFNpemlu
ZyAmJiBqUXVlcnkuY3NzKCBlbGVtLCAiYm94U2l6aW5nIiwgZmFsc2UsIHN0eWxlcyApID09PSAi
Ym9yZGVyLWJveCI7Ci0KLSAgICAvLyBzb21lIG5vbi1odG1sIGVsZW1lbnRzIHJldHVybiB1bmRl
ZmluZWQgZm9yIG9mZnNldFdpZHRoLCBzbyBjaGVjayBmb3IgbnVsbC91bmRlZmluZWQKLSAgICAv
LyBzdmcgLSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02NDky
ODUKLSAgICAvLyBNYXRoTUwgLSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVn
LmNnaT9pZD00OTE2NjgKLSAgICBpZiAoIHZhbCA8PSAwIHx8IHZhbCA9PSBudWxsICkgewotICAg
IC8vIEZhbGwgYmFjayB0byBjb21wdXRlZCB0aGVuIHVuY29tcHV0ZWQgY3NzIGlmIG5lY2Vzc2Fy
eQotICAgIHZhbCA9IGN1ckNTUyggZWxlbSwgbmFtZSwgc3R5bGVzICk7Ci0gICAgaWYgKCB2YWwg
PCAwIHx8IHZhbCA9PSBudWxsICkgewotICAgIHZhbCA9IGVsZW0uc3R5bGVbIG5hbWUgXTsKLSAg
ICB9Ci0KLSAgICAvLyBDb21wdXRlZCB1bml0IGlzIG5vdCBwaXhlbHMuIFN0b3AgaGVyZSBhbmQg
cmV0dXJuLgotICAgIGlmICggcm51bW5vbnB4LnRlc3QodmFsKSApIHsKLSAgICByZXR1cm4gdmFs
OwotICAgIH0KLQotICAgIC8vIHdlIG5lZWQgdGhlIGNoZWNrIGZvciBzdHlsZSBpbiBjYXNlIGEg
YnJvd3NlciB3aGljaCByZXR1cm5zIHVucmVsaWFibGUgdmFsdWVzCi0gICAgLy8gZm9yIGdldENv
bXB1dGVkU3R5bGUgc2lsZW50bHkgZmFsbHMgYmFjayB0byB0aGUgcmVsaWFibGUgZWxlbS5zdHls
ZQotICAgIHZhbHVlSXNCb3JkZXJCb3ggPSBpc0JvcmRlckJveCAmJiAoIGpRdWVyeS5zdXBwb3J0
LmJveFNpemluZ1JlbGlhYmxlIHx8IHZhbCA9PT0gZWxlbS5zdHlsZVsgbmFtZSBdICk7Ci0KLSAg
ICAvLyBOb3JtYWxpemUgIiIsIGF1dG8sIGFuZCBwcmVwYXJlIGZvciBleHRyYQotICAgIHZhbCA9
IHBhcnNlRmxvYXQoIHZhbCApIHx8IDA7Ci0gICAgfQotCi0gICAgLy8gdXNlIHRoZSBhY3RpdmUg
Ym94LXNpemluZyBtb2RlbCB0byBhZGQvc3VidHJhY3QgaXJyZWxldmFudCBzdHlsZXMKLSAgICBy
ZXR1cm4gKCB2YWwgKwotICAgIGF1Z21lbnRXaWR0aE9ySGVpZ2h0KAotICAgIGVsZW0sCi0gICAg
bmFtZSwKLSAgICBleHRyYSB8fCAoIGlzQm9yZGVyQm94ID8gImJvcmRlciIgOiAiY29udGVudCIg
KSwKLSAgICB2YWx1ZUlzQm9yZGVyQm94LAotICAgIHN0eWxlcwotICAgICkKLSAgICApICsgInB4
IjsKLX0KLQotLy8gVHJ5IHRvIGRldGVybWluZSB0aGUgZGVmYXVsdCBkaXNwbGF5IHZhbHVlIG9m
IGFuIGVsZW1lbnQKLWZ1bmN0aW9uIGNzc19kZWZhdWx0RGlzcGxheSggbm9kZU5hbWUgKSB7Ci0g
ICAgdmFyIGRvYyA9IGRvY3VtZW50LAotICAgIGRpc3BsYXkgPSBlbGVtZGlzcGxheVsgbm9kZU5h
bWUgXTsKLQotICAgIGlmICggIWRpc3BsYXkgKSB7Ci0gICAgZGlzcGxheSA9IGFjdHVhbERpc3Bs
YXkoIG5vZGVOYW1lLCBkb2MgKTsKLQotICAgIC8vIElmIHRoZSBzaW1wbGUgd2F5IGZhaWxzLCBy
ZWFkIGZyb20gaW5zaWRlIGFuIGlmcmFtZQotICAgIGlmICggZGlzcGxheSA9PT0gIm5vbmUiIHx8
ICFkaXNwbGF5ICkgewotICAgIC8vIFVzZSB0aGUgYWxyZWFkeS1jcmVhdGVkIGlmcmFtZSBpZiBw
b3NzaWJsZQotICAgIGlmcmFtZSA9ICggaWZyYW1lIHx8Ci0gICAgalF1ZXJ5KCI8aWZyYW1lIGZy
YW1lYm9yZGVyPScwJyB3aWR0aD0nMCcgaGVpZ2h0PScwJy8+IikKLSAgICAuY3NzKCAiY3NzVGV4
dCIsICJkaXNwbGF5OmJsb2NrICFpbXBvcnRhbnQiICkKLSAgICApLmFwcGVuZFRvKCBkb2MuZG9j
dW1lbnRFbGVtZW50ICk7Ci0KLSAgICAvLyBBbHdheXMgd3JpdGUgYSBuZXcgSFRNTCBza2VsZXRv
biBzbyBXZWJraXQgYW5kIEZpcmVmb3ggZG9uJ3QgY2hva2Ugb24gcmV1c2UKLSAgICBkb2MgPSAo
IGlmcmFtZVswXS5jb250ZW50V2luZG93IHx8IGlmcmFtZVswXS5jb250ZW50RG9jdW1lbnQgKS5k
b2N1bWVudDsKLSAgICBkb2Mud3JpdGUoIjwhZG9jdHlwZSBodG1sPjxodG1sPjxib2R5PiIpOwot
ICAgIGRvYy5jbG9zZSgpOwotCi0gICAgZGlzcGxheSA9IGFjdHVhbERpc3BsYXkoIG5vZGVOYW1l
LCBkb2MgKTsKLSAgICBpZnJhbWUuZGV0YWNoKCk7Ci0gICAgfQotCi0gICAgLy8gU3RvcmUgdGhl
IGNvcnJlY3QgZGVmYXVsdCBkaXNwbGF5Ci0gICAgZWxlbWRpc3BsYXlbIG5vZGVOYW1lIF0gPSBk
aXNwbGF5OwotICAgIH0KLQotICAgIHJldHVybiBkaXNwbGF5OwotfQotCi0vLyBDYWxsZWQgT05M
WSBmcm9tIHdpdGhpbiBjc3NfZGVmYXVsdERpc3BsYXkKLWZ1bmN0aW9uIGFjdHVhbERpc3BsYXko
IG5hbWUsIGRvYyApIHsKLSAgICB2YXIgZWxlbSA9IGpRdWVyeSggZG9jLmNyZWF0ZUVsZW1lbnQo
IG5hbWUgKSApLmFwcGVuZFRvKCBkb2MuYm9keSApLAotICAgIGRpc3BsYXkgPSBqUXVlcnkuY3Nz
KCBlbGVtWzBdLCAiZGlzcGxheSIgKTsKLSAgICBlbGVtLnJlbW92ZSgpOwotICAgIHJldHVybiBk
aXNwbGF5OwotfQotCi1qUXVlcnkuZWFjaChbICJoZWlnaHQiLCAid2lkdGgiIF0sIGZ1bmN0aW9u
KCBpLCBuYW1lICkgewotICAgIGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdID0gewotICAgIGdldDog
ZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkLCBleHRyYSApIHsKLSAgICBpZiAoIGNvbXB1dGVkICkg
ewotICAgIC8vIGNlcnRhaW4gZWxlbWVudHMgY2FuIGhhdmUgZGltZW5zaW9uIGluZm8gaWYgd2Ug
aW52aXNpYmx5IHNob3cgdGhlbQotICAgIC8vIGhvd2V2ZXIsIGl0IG11c3QgaGF2ZSBhIGN1cnJl
bnQgZGlzcGxheSBzdHlsZSB0aGF0IHdvdWxkIGJlbmVmaXQgZnJvbSB0aGlzCi0gICAgcmV0dXJu
IGVsZW0ub2Zmc2V0V2lkdGggPT09IDAgJiYgcmRpc3BsYXlzd2FwLnRlc3QoIGpRdWVyeS5jc3Mo
IGVsZW0sICJkaXNwbGF5IiApICkgPwotICAgIGpRdWVyeS5zd2FwKCBlbGVtLCBjc3NTaG93LCBm
dW5jdGlvbigpIHsKLSAgICByZXR1cm4gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgbmFtZSwgZXh0
cmEgKTsKLSAgICB9KSA6Ci0gICAgZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgbmFtZSwgZXh0cmEg
KTsKLSAgICB9Ci0gICAgfSwKLQotICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBleHRy
YSApIHsKLSAgICB2YXIgc3R5bGVzID0gZXh0cmEgJiYgZ2V0U3R5bGVzKCBlbGVtICk7Ci0gICAg
cmV0dXJuIHNldFBvc2l0aXZlTnVtYmVyKCBlbGVtLCB2YWx1ZSwgZXh0cmEgPwotICAgIGF1Z21l
bnRXaWR0aE9ySGVpZ2h0KAotICAgIGVsZW0sCi0gICAgbmFtZSwKLSAgICBleHRyYSwKLSAgICBq
UXVlcnkuc3VwcG9ydC5ib3hTaXppbmcgJiYgalF1ZXJ5LmNzcyggZWxlbSwgImJveFNpemluZyIs
IGZhbHNlLCBzdHlsZXMgKSA9PT0gImJvcmRlci1ib3giLAotICAgIHN0eWxlcwotICAgICkgOiAw
Ci0gICAgKTsKLSAgICB9Ci0gICAgfTsKLX0pOwotCi1pZiAoICFqUXVlcnkuc3VwcG9ydC5vcGFj
aXR5ICkgewotICAgIGpRdWVyeS5jc3NIb29rcy5vcGFjaXR5ID0gewotICAgIGdldDogZnVuY3Rp
b24oIGVsZW0sIGNvbXB1dGVkICkgewotICAgIC8vIElFIHVzZXMgZmlsdGVycyBmb3Igb3BhY2l0
eQotICAgIHJldHVybiByb3BhY2l0eS50ZXN0KCAoY29tcHV0ZWQgJiYgZWxlbS5jdXJyZW50U3R5
bGUgPyBlbGVtLmN1cnJlbnRTdHlsZS5maWx0ZXIgOiBlbGVtLnN0eWxlLmZpbHRlcikgfHwgIiIg
KSA/Ci0gICAgKCAwLjAxICogcGFyc2VGbG9hdCggUmVnRXhwLiQxICkgKSArICIiIDoKLSAgICBj
b21wdXRlZCA/ICIxIiA6ICIiOwotICAgIH0sCi0KLSAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2
YWx1ZSApIHsKLSAgICB2YXIgc3R5bGUgPSBlbGVtLnN0eWxlLAotICAgIGN1cnJlbnRTdHlsZSA9
IGVsZW0uY3VycmVudFN0eWxlLAotICAgIG9wYWNpdHkgPSBqUXVlcnkuaXNOdW1lcmljKCB2YWx1
ZSApID8gImFscGhhKG9wYWNpdHk9IiArIHZhbHVlICogMTAwICsgIikiIDogIiIsCi0gICAgZmls
dGVyID0gY3VycmVudFN0eWxlICYmIGN1cnJlbnRTdHlsZS5maWx0ZXIgfHwgc3R5bGUuZmlsdGVy
IHx8ICIiOwotCi0gICAgLy8gSUUgaGFzIHRyb3VibGUgd2l0aCBvcGFjaXR5IGlmIGl0IGRvZXMg
bm90IGhhdmUgbGF5b3V0Ci0gICAgLy8gRm9yY2UgaXQgYnkgc2V0dGluZyB0aGUgem9vbSBsZXZl
bAotICAgIHN0eWxlLnpvb20gPSAxOwotCi0gICAgLy8gaWYgc2V0dGluZyBvcGFjaXR5IHRvIDEs
IGFuZCBubyBvdGhlciBmaWx0ZXJzIGV4aXN0IC0gYXR0ZW1wdCB0byByZW1vdmUgZmlsdGVyIGF0
dHJpYnV0ZSAjNjY1MgotICAgIC8vIGlmIHZhbHVlID09PSAiIiwgdGhlbiByZW1vdmUgaW5saW5l
IG9wYWNpdHkgIzEyNjg1Ci0gICAgaWYgKCAoIHZhbHVlID49IDEgfHwgdmFsdWUgPT09ICIiICkg
JiYKLSAgICBqUXVlcnkudHJpbSggZmlsdGVyLnJlcGxhY2UoIHJhbHBoYSwgIiIgKSApID09PSAi
IiAmJgotICAgIHN0eWxlLnJlbW92ZUF0dHJpYnV0ZSApIHsKLQotICAgIC8vIFNldHRpbmcgc3R5
bGUuZmlsdGVyIHRvIG51bGwsICIiICYgIiAiIHN0aWxsIGxlYXZlICJmaWx0ZXI6IiBpbiB0aGUg
Y3NzVGV4dAotICAgIC8vIGlmICJmaWx0ZXI6IiBpcyBwcmVzZW50IGF0IGFsbCwgY2xlYXJUeXBl
IGlzIGRpc2FibGVkLCB3ZSB3YW50IHRvIGF2b2lkIHRoaXMKLSAgICAvLyBzdHlsZS5yZW1vdmVB
dHRyaWJ1dGUgaXMgSUUgT25seSwgYnV0IHNvIGFwcGFyZW50bHkgaXMgdGhpcyBjb2RlIHBhdGgu
Li4KLSAgICBzdHlsZS5yZW1vdmVBdHRyaWJ1dGUoICJmaWx0ZXIiICk7Ci0KLSAgICAvLyBpZiB0
aGVyZSBpcyBubyBmaWx0ZXIgc3R5bGUgYXBwbGllZCBpbiBhIGNzcyBydWxlIG9yIHVuc2V0IGlu
bGluZSBvcGFjaXR5LCB3ZSBhcmUgZG9uZQotICAgIGlmICggdmFsdWUgPT09ICIiIHx8IGN1cnJl
bnRTdHlsZSAmJiAhY3VycmVudFN0eWxlLmZpbHRlciApIHsKLSAgICByZXR1cm47Ci0gICAgfQot
ICAgIH0KLQotICAgIC8vIG90aGVyd2lzZSwgc2V0IG5ldyBmaWx0ZXIgdmFsdWVzCi0gICAgc3R5
bGUuZmlsdGVyID0gcmFscGhhLnRlc3QoIGZpbHRlciApID8KLSAgICBmaWx0ZXIucmVwbGFjZSgg
cmFscGhhLCBvcGFjaXR5ICkgOgotICAgIGZpbHRlciArICIgIiArIG9wYWNpdHk7Ci0gICAgfQot
ICAgIH07Ci19Ci0KLS8vIFRoZXNlIGhvb2tzIGNhbm5vdCBiZSBhZGRlZCB1bnRpbCBET00gcmVh
ZHkgYmVjYXVzZSB0aGUgc3VwcG9ydCB0ZXN0Ci0vLyBmb3IgaXQgaXMgbm90IHJ1biB1bnRpbCBh
ZnRlciBET00gcmVhZHkKLWpRdWVyeShmdW5jdGlvbigpIHsKLSAgICBpZiAoICFqUXVlcnkuc3Vw
cG9ydC5yZWxpYWJsZU1hcmdpblJpZ2h0ICkgewotICAgIGpRdWVyeS5jc3NIb29rcy5tYXJnaW5S
aWdodCA9IHsKLSAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHsKLSAgICBpZiAo
IGNvbXB1dGVkICkgewotICAgIC8vIFdlYktpdCBCdWcgMTMzNDMgLSBnZXRDb21wdXRlZFN0eWxl
IHJldHVybnMgd3JvbmcgdmFsdWUgZm9yIG1hcmdpbi1yaWdodAotICAgIC8vIFdvcmsgYXJvdW5k
IGJ5IHRlbXBvcmFyaWx5IHNldHRpbmcgZWxlbWVudCBkaXNwbGF5IHRvIGlubGluZS1ibG9jawot
ICAgIHJldHVybiBqUXVlcnkuc3dhcCggZWxlbSwgeyAiZGlzcGxheSI6ICJpbmxpbmUtYmxvY2si
IH0sCi0gICAgY3VyQ1NTLCBbIGVsZW0sICJtYXJnaW5SaWdodCIgXSApOwotICAgIH0KLSAgICB9
Ci0gICAgfTsKLSAgICB9Ci0KLSAgICAvLyBXZWJraXQgYnVnOiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkwODQKLSAgICAvLyBnZXRDb21wdXRlZFN0eWxlIHJldHVy
bnMgcGVyY2VudCB3aGVuIHNwZWNpZmllZCBmb3IgdG9wL2xlZnQvYm90dG9tL3JpZ2h0Ci0gICAg
Ly8gcmF0aGVyIHRoYW4gbWFrZSB0aGUgY3NzIG1vZHVsZSBkZXBlbmQgb24gdGhlIG9mZnNldCBt
b2R1bGUsIHdlIGp1c3QgY2hlY2sgZm9yIGl0IGhlcmUKLSAgICBpZiAoICFqUXVlcnkuc3VwcG9y
dC5waXhlbFBvc2l0aW9uICYmIGpRdWVyeS5mbi5wb3NpdGlvbiApIHsKLSAgICBqUXVlcnkuZWFj
aCggWyAidG9wIiwgImxlZnQiIF0sIGZ1bmN0aW9uKCBpLCBwcm9wICkgewotICAgIGpRdWVyeS5j
c3NIb29rc1sgcHJvcCBdID0gewotICAgIGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkg
ewotICAgIGlmICggY29tcHV0ZWQgKSB7Ci0gICAgY29tcHV0ZWQgPSBjdXJDU1MoIGVsZW0sIHBy
b3AgKTsKLSAgICAvLyBpZiBjdXJDU1MgcmV0dXJucyBwZXJjZW50YWdlLCBmYWxsYmFjayB0byBv
ZmZzZXQKLSAgICByZXR1cm4gcm51bW5vbnB4LnRlc3QoIGNvbXB1dGVkICkgPwotICAgIGpRdWVy
eSggZWxlbSApLnBvc2l0aW9uKClbIHByb3AgXSArICJweCIgOgotICAgIGNvbXB1dGVkOwotICAg
IH0KLSAgICB9Ci0gICAgfTsKLSAgICB9KTsKLSAgICB9Ci0KLX0pOwotCi1pZiAoIGpRdWVyeS5l
eHByICYmIGpRdWVyeS5leHByLmZpbHRlcnMgKSB7Ci0gICAgalF1ZXJ5LmV4cHIuZmlsdGVycy5o
aWRkZW4gPSBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAvLyBTdXBwb3J0OiBPcGVyYSA8PSAxMi4x
MgotICAgIC8vIE9wZXJhIHJlcG9ydHMgb2Zmc2V0V2lkdGhzIGFuZCBvZmZzZXRIZWlnaHRzIGxl
c3MgdGhhbiB6ZXJvIG9uIHNvbWUgZWxlbWVudHMKLSAgICByZXR1cm4gZWxlbS5vZmZzZXRXaWR0
aCA8PSAwICYmIGVsZW0ub2Zmc2V0SGVpZ2h0IDw9IDAgfHwKLSAgICAoIWpRdWVyeS5zdXBwb3J0
LnJlbGlhYmxlSGlkZGVuT2Zmc2V0cyAmJiAoKGVsZW0uc3R5bGUgJiYgZWxlbS5zdHlsZS5kaXNw
bGF5KSB8fCBqUXVlcnkuY3NzKCBlbGVtLCAiZGlzcGxheSIgKSkgPT09ICJub25lIik7Ci0gICAg
fTsKLQotICAgIGpRdWVyeS5leHByLmZpbHRlcnMudmlzaWJsZSA9IGZ1bmN0aW9uKCBlbGVtICkg
ewotICAgIHJldHVybiAhalF1ZXJ5LmV4cHIuZmlsdGVycy5oaWRkZW4oIGVsZW0gKTsKLSAgICB9
OwotfQotCi0vLyBUaGVzZSBob29rcyBhcmUgdXNlZCBieSBhbmltYXRlIHRvIGV4cGFuZCBwcm9w
ZXJ0aWVzCi1qUXVlcnkuZWFjaCh7Ci0gICAgbWFyZ2luOiAiIiwKLSAgICBwYWRkaW5nOiAiIiwK
LSAgICBib3JkZXI6ICJXaWR0aCIKLX0sIGZ1bmN0aW9uKCBwcmVmaXgsIHN1ZmZpeCApIHsKLSAg
ICBqUXVlcnkuY3NzSG9va3NbIHByZWZpeCArIHN1ZmZpeCBdID0gewotICAgIGV4cGFuZDogZnVu
Y3Rpb24oIHZhbHVlICkgewotICAgIHZhciBpID0gMCwKLSAgICBleHBhbmRlZCA9IHt9LAotCi0g
ICAgLy8gYXNzdW1lcyBhIHNpbmdsZSBudW1iZXIgaWYgbm90IGEgc3RyaW5nCi0gICAgcGFydHMg
PSB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciID8gdmFsdWUuc3BsaXQoIiAiKSA6IFsgdmFsdWUg
XTsKLQotICAgIGZvciAoIDsgaSA8IDQ7IGkrKyApIHsKLSAgICBleHBhbmRlZFsgcHJlZml4ICsg
Y3NzRXhwYW5kWyBpIF0gKyBzdWZmaXggXSA9Ci0gICAgcGFydHNbIGkgXSB8fCBwYXJ0c1sgaSAt
IDIgXSB8fCBwYXJ0c1sgMCBdOwotICAgIH0KLQotICAgIHJldHVybiBleHBhbmRlZDsKLSAgICB9
Ci0gICAgfTsKLQotICAgIGlmICggIXJtYXJnaW4udGVzdCggcHJlZml4ICkgKSB7Ci0gICAgalF1
ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXS5zZXQgPSBzZXRQb3NpdGl2ZU51bWJlcjsK
LSAgICB9Ci19KTsKLXZhciByMjAgPSAvJTIwL2csCi0gICAgcmJyYWNrZXQgPSAvXFtcXSQvLAot
ICAgIHJDUkxGID0gL1xyP1xuL2csCi0gICAgcnN1Ym1pdHRlclR5cGVzID0gL14oPzpzdWJtaXR8
YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLAotICAgIHJzdWJtaXR0YWJsZSA9IC9eKD86aW5w
dXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTsKLQotalF1ZXJ5LmZuLmV4dGVuZCh7Ci0gICAg
c2VyaWFsaXplOiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4galF1ZXJ5LnBhcmFtKCB0aGlzLnNl
cmlhbGl6ZUFycmF5KCkgKTsKLSAgICB9LAotICAgIHNlcmlhbGl6ZUFycmF5OiBmdW5jdGlvbigp
IHsKLSAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXsKLSAgICAvLyBDYW4gYWRkIHByb3BI
b29rIGZvciAiZWxlbWVudHMiIHRvIGZpbHRlciBvciBhZGQgZm9ybSBlbGVtZW50cwotICAgIHZh
ciBlbGVtZW50cyA9IGpRdWVyeS5wcm9wKCB0aGlzLCAiZWxlbWVudHMiICk7Ci0gICAgcmV0dXJu
IGVsZW1lbnRzID8galF1ZXJ5Lm1ha2VBcnJheSggZWxlbWVudHMgKSA6IHRoaXM7Ci0gICAgfSkK
LSAgICAuZmlsdGVyKGZ1bmN0aW9uKCl7Ci0gICAgdmFyIHR5cGUgPSB0aGlzLnR5cGU7Ci0gICAg
Ly8gVXNlIC5pcygiOmRpc2FibGVkIikgc28gdGhhdCBmaWVsZHNldFtkaXNhYmxlZF0gd29ya3MK
LSAgICByZXR1cm4gdGhpcy5uYW1lICYmICFqUXVlcnkoIHRoaXMgKS5pcyggIjpkaXNhYmxlZCIg
KSAmJgotICAgIHJzdWJtaXR0YWJsZS50ZXN0KCB0aGlzLm5vZGVOYW1lICkgJiYgIXJzdWJtaXR0
ZXJUeXBlcy50ZXN0KCB0eXBlICkgJiYKLSAgICAoIHRoaXMuY2hlY2tlZCB8fCAhbWFuaXB1bGF0
aW9uX3JjaGVja2FibGVUeXBlLnRlc3QoIHR5cGUgKSApOwotICAgIH0pCi0gICAgLm1hcChmdW5j
dGlvbiggaSwgZWxlbSApewotICAgIHZhciB2YWwgPSBqUXVlcnkoIHRoaXMgKS52YWwoKTsKLQot
ICAgIHJldHVybiB2YWwgPT0gbnVsbCA/Ci0gICAgbnVsbCA6Ci0gICAgalF1ZXJ5LmlzQXJyYXko
IHZhbCApID8KLSAgICBqUXVlcnkubWFwKCB2YWwsIGZ1bmN0aW9uKCB2YWwgKXsKLSAgICByZXR1
cm4geyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsICJcclxuIiAp
IH07Ci0gICAgfSkgOgotICAgIHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2Uo
IHJDUkxGLCAiXHJcbiIgKSB9OwotICAgIH0pLmdldCgpOwotICAgIH0KLX0pOwotCi0vL1Nlcmlh
bGl6ZSBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzIG9yIGEgc2V0IG9mCi0vL2tleS92YWx1ZXMg
aW50byBhIHF1ZXJ5IHN0cmluZwotalF1ZXJ5LnBhcmFtID0gZnVuY3Rpb24oIGEsIHRyYWRpdGlv
bmFsICkgewotICAgIHZhciBwcmVmaXgsCi0gICAgcyA9IFtdLAotICAgIGFkZCA9IGZ1bmN0aW9u
KCBrZXksIHZhbHVlICkgewotICAgIC8vIElmIHZhbHVlIGlzIGEgZnVuY3Rpb24sIGludm9rZSBp
dCBhbmQgcmV0dXJuIGl0cyB2YWx1ZQotICAgIHZhbHVlID0galF1ZXJ5LmlzRnVuY3Rpb24oIHZh
bHVlICkgPyB2YWx1ZSgpIDogKCB2YWx1ZSA9PSBudWxsID8gIiIgOiB2YWx1ZSApOwotICAgIHNb
IHMubGVuZ3RoIF0gPSBlbmNvZGVVUklDb21wb25lbnQoIGtleSApICsgIj0iICsgZW5jb2RlVVJJ
Q29tcG9uZW50KCB2YWx1ZSApOwotICAgIH07Ci0KLSAgICAvLyBTZXQgdHJhZGl0aW9uYWwgdG8g
dHJ1ZSBmb3IgalF1ZXJ5IDw9IDEuMy4yIGJlaGF2aW9yLgotICAgIGlmICggdHJhZGl0aW9uYWwg
PT09IHVuZGVmaW5lZCApIHsKLSAgICB0cmFkaXRpb25hbCA9IGpRdWVyeS5hamF4U2V0dGluZ3Mg
JiYgalF1ZXJ5LmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbDsKLSAgICB9Ci0KLSAgICAvLyBJZiBh
biBhcnJheSB3YXMgcGFzc2VkIGluLCBhc3N1bWUgdGhhdCBpdCBpcyBhbiBhcnJheSBvZiBmb3Jt
IGVsZW1lbnRzLgotICAgIGlmICggalF1ZXJ5LmlzQXJyYXkoIGEgKSB8fCAoIGEuanF1ZXJ5ICYm
ICFqUXVlcnkuaXNQbGFpbk9iamVjdCggYSApICkgKSB7Ci0gICAgLy8gU2VyaWFsaXplIHRoZSBm
b3JtIGVsZW1lbnRzCi0gICAgalF1ZXJ5LmVhY2goIGEsIGZ1bmN0aW9uKCkgewotICAgIGFkZCgg
dGhpcy5uYW1lLCB0aGlzLnZhbHVlICk7Ci0gICAgfSk7Ci0KLSAgICB9IGVsc2UgewotICAgIC8v
IElmIHRyYWRpdGlvbmFsLCBlbmNvZGUgdGhlICJvbGQiIHdheSAodGhlIHdheSAxLjMuMiBvciBv
bGRlcgotICAgIC8vIGRpZCBpdCksIG90aGVyd2lzZSBlbmNvZGUgcGFyYW1zIHJlY3Vyc2l2ZWx5
LgotICAgIGZvciAoIHByZWZpeCBpbiBhICkgewotICAgIGJ1aWxkUGFyYW1zKCBwcmVmaXgsIGFb
IHByZWZpeCBdLCB0cmFkaXRpb25hbCwgYWRkICk7Ci0gICAgfQotICAgIH0KLQotICAgIC8vIFJl
dHVybiB0aGUgcmVzdWx0aW5nIHNlcmlhbGl6YXRpb24KLSAgICByZXR1cm4gcy5qb2luKCAiJiIg
KS5yZXBsYWNlKCByMjAsICIrIiApOwotfTsKLQotZnVuY3Rpb24gYnVpbGRQYXJhbXMoIHByZWZp
eCwgb2JqLCB0cmFkaXRpb25hbCwgYWRkICkgewotICAgIHZhciBuYW1lOwotCi0gICAgaWYgKCBq
UXVlcnkuaXNBcnJheSggb2JqICkgKSB7Ci0gICAgLy8gU2VyaWFsaXplIGFycmF5IGl0ZW0uCi0g
ICAgalF1ZXJ5LmVhY2goIG9iaiwgZnVuY3Rpb24oIGksIHYgKSB7Ci0gICAgaWYgKCB0cmFkaXRp
b25hbCB8fCByYnJhY2tldC50ZXN0KCBwcmVmaXggKSApIHsKLSAgICAvLyBUcmVhdCBlYWNoIGFy
cmF5IGl0ZW0gYXMgYSBzY2FsYXIuCi0gICAgYWRkKCBwcmVmaXgsIHYgKTsKLQotICAgIH0gZWxz
ZSB7Ci0gICAgLy8gSXRlbSBpcyBub24tc2NhbGFyIChhcnJheSBvciBvYmplY3QpLCBlbmNvZGUg
aXRzIG51bWVyaWMgaW5kZXguCi0gICAgYnVpbGRQYXJhbXMoIHByZWZpeCArICJbIiArICggdHlw
ZW9mIHYgPT09ICJvYmplY3QiID8gaSA6ICIiICkgKyAiXSIsIHYsIHRyYWRpdGlvbmFsLCBhZGQg
KTsKLSAgICB9Ci0gICAgfSk7Ci0KLSAgICB9IGVsc2UgaWYgKCAhdHJhZGl0aW9uYWwgJiYgalF1
ZXJ5LnR5cGUoIG9iaiApID09PSAib2JqZWN0IiApIHsKLSAgICAvLyBTZXJpYWxpemUgb2JqZWN0
IGl0ZW0uCi0gICAgZm9yICggbmFtZSBpbiBvYmogKSB7Ci0gICAgYnVpbGRQYXJhbXMoIHByZWZp
eCArICJbIiArIG5hbWUgKyAiXSIsIG9ialsgbmFtZSBdLCB0cmFkaXRpb25hbCwgYWRkICk7Ci0g
ICAgfQotCi0gICAgfSBlbHNlIHsKLSAgICAvLyBTZXJpYWxpemUgc2NhbGFyIGl0ZW0uCi0gICAg
YWRkKCBwcmVmaXgsIG9iaiApOwotICAgIH0KLX0KLWpRdWVyeS5lYWNoKCAoImJsdXIgZm9jdXMg
Zm9jdXNpbiBmb2N1c291dCBsb2FkIHJlc2l6ZSBzY3JvbGwgdW5sb2FkIGNsaWNrIGRibGNsaWNr
ICIgKwotICAgICJtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0
IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSAiICsKLSAgICAiY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5
ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudSIpLnNwbGl0KCIgIiksIGZ1bmN0
aW9uKCBpLCBuYW1lICkgewotCi0gICAgLy8gSGFuZGxlIGV2ZW50IGJpbmRpbmcKLSAgICBqUXVl
cnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBkYXRhLCBmbiApIHsKLSAgICByZXR1cm4gYXJndW1l
bnRzLmxlbmd0aCA+IDAgPwotICAgIHRoaXMub24oIG5hbWUsIG51bGwsIGRhdGEsIGZuICkgOgot
ICAgIHRoaXMudHJpZ2dlciggbmFtZSApOwotICAgIH07Ci19KTsKLQotalF1ZXJ5LmZuLmhvdmVy
ID0gZnVuY3Rpb24oIGZuT3ZlciwgZm5PdXQgKSB7Ci0gICAgcmV0dXJuIHRoaXMubW91c2VlbnRl
ciggZm5PdmVyICkubW91c2VsZWF2ZSggZm5PdXQgfHwgZm5PdmVyICk7Ci19OwotdmFyCi0gICAg
Ly8gRG9jdW1lbnQgbG9jYXRpb24KLSAgICBhamF4TG9jUGFydHMsCi0gICAgYWpheExvY2F0aW9u
LAotICAgIGFqYXhfbm9uY2UgPSBqUXVlcnkubm93KCksCi0KLSAgICBhamF4X3JxdWVyeSA9IC9c
Py8sCi0gICAgcmhhc2ggPSAvIy4qJC8sCi0gICAgcnRzID0gLyhbPyZdKV89W14mXSovLAotICAg
IHJoZWFkZXJzID0gL14oLio/KTpbIFx0XSooW15cclxuXSopXHI/JC9tZywgLy8gSUUgbGVhdmVz
IGFuIFxyIGNoYXJhY3RlciBhdCBFT0wKLSAgICAvLyAjNzY1MywgIzgxMjUsICM4MTUyOiBsb2Nh
bCBwcm90b2NvbCBkZXRlY3Rpb24KLSAgICBybG9jYWxQcm90b2NvbCA9IC9eKD86YWJvdXR8YXBw
fGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLAotICAgIHJub0Nv
bnRlbnQgPSAvXig/OkdFVHxIRUFEKSQvLAotICAgIHJwcm90b2NvbCA9IC9eXC9cLy8sCi0gICAg
cnVybCA9IC9eKFtcdy4rLV0rOikoPzpcL1wvKFteXC8/IzpdKikoPzo6KFxkKyl8KXwpLywKLQot
ICAgIC8vIEtlZXAgYSBjb3B5IG9mIHRoZSBvbGQgbG9hZCBtZXRob2QKLSAgICBfbG9hZCA9IGpR
dWVyeS5mbi5sb2FkLAotCi0gICAgLyogUHJlZmlsdGVycwotICAgICAqIDEpIFRoZXkgYXJlIHVz
ZWZ1bCB0byBpbnRyb2R1Y2UgY3VzdG9tIGRhdGFUeXBlcyAoc2VlIGFqYXgvanNvbnAuanMgZm9y
IGFuIGV4YW1wbGUpCi0gICAgICogMikgVGhlc2UgYXJlIGNhbGxlZDoKLSAgICAgKiAgICAtIEJF
Rk9SRSBhc2tpbmcgZm9yIGEgdHJhbnNwb3J0Ci0gICAgICogICAgLSBBRlRFUiBwYXJhbSBzZXJp
YWxpemF0aW9uIChzLmRhdGEgaXMgYSBzdHJpbmcgaWYgcy5wcm9jZXNzRGF0YSBpcyB0cnVlKQot
ICAgICAqIDMpIGtleSBpcyB0aGUgZGF0YVR5cGUKLSAgICAgKiA0KSB0aGUgY2F0Y2hhbGwgc3lt
Ym9sICIqIiBjYW4gYmUgdXNlZAotICAgICAqIDUpIGV4ZWN1dGlvbiB3aWxsIHN0YXJ0IHdpdGgg
dHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGNvbnRpbnVlIGRvd24gdG8gIioiIGlmIG5lZWRl
ZAotICAgICAqLwotICAgIHByZWZpbHRlcnMgPSB7fSwKLQotICAgIC8qIFRyYW5zcG9ydHMgYmlu
ZGluZ3MKLSAgICAgKiAxKSBrZXkgaXMgdGhlIGRhdGFUeXBlCi0gICAgICogMikgdGhlIGNhdGNo
YWxsIHN5bWJvbCAiKiIgY2FuIGJlIHVzZWQKLSAgICAgKiAzKSBzZWxlY3Rpb24gd2lsbCBzdGFy
dCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBnbyB0byAiKiIgaWYgbmVlZGVkCi0g
ICAgICovCi0gICAgdHJhbnNwb3J0cyA9IHt9LAotCi0gICAgLy8gQXZvaWQgY29tbWVudC1wcm9s
b2cgY2hhciBzZXF1ZW5jZSAoIzEwMDk4KTsgbXVzdCBhcHBlYXNlIGxpbnQgYW5kIGV2YWRlIGNv
bXByZXNzaW9uCi0gICAgYWxsVHlwZXMgPSAiKi8iLmNvbmNhdCgiKiIpOwotCi0vLyAjODEzOCwg
SUUgbWF5IHRocm93IGFuIGV4Y2VwdGlvbiB3aGVuIGFjY2Vzc2luZwotLy8gYSBmaWVsZCBmcm9t
IHdpbmRvdy5sb2NhdGlvbiBpZiBkb2N1bWVudC5kb21haW4gaGFzIGJlZW4gc2V0Ci10cnkgewot
ICAgIGFqYXhMb2NhdGlvbiA9IGxvY2F0aW9uLmhyZWY7Ci19IGNhdGNoKCBlICkgewotICAgIC8v
IFVzZSB0aGUgaHJlZiBhdHRyaWJ1dGUgb2YgYW4gQSBlbGVtZW50Ci0gICAgLy8gc2luY2UgSUUg
d2lsbCBtb2RpZnkgaXQgZ2l2ZW4gZG9jdW1lbnQubG9jYXRpb24KLSAgICBhamF4TG9jYXRpb24g
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiYSIgKTsKLSAgICBhamF4TG9jYXRpb24uaHJlZiA9
ICIiOwotICAgIGFqYXhMb2NhdGlvbiA9IGFqYXhMb2NhdGlvbi5ocmVmOwotfQotCi0vLyBTZWdt
ZW50IGxvY2F0aW9uIGludG8gcGFydHMKLWFqYXhMb2NQYXJ0cyA9IHJ1cmwuZXhlYyggYWpheExv
Y2F0aW9uLnRvTG93ZXJDYXNlKCkgKSB8fCBbXTsKLQotLy8gQmFzZSAiY29uc3RydWN0b3IiIGZv
ciBqUXVlcnkuYWpheFByZWZpbHRlciBhbmQgalF1ZXJ5LmFqYXhUcmFuc3BvcnQKLWZ1bmN0aW9u
IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlICkgewotCi0gICAgLy8gZGF0
YVR5cGVFeHByZXNzaW9uIGlzIG9wdGlvbmFsIGFuZCBkZWZhdWx0cyB0byAiKiIKLSAgICByZXR1
cm4gZnVuY3Rpb24oIGRhdGFUeXBlRXhwcmVzc2lvbiwgZnVuYyApIHsKLQotICAgIGlmICggdHlw
ZW9mIGRhdGFUeXBlRXhwcmVzc2lvbiAhPT0gInN0cmluZyIgKSB7Ci0gICAgZnVuYyA9IGRhdGFU
eXBlRXhwcmVzc2lvbjsKLSAgICBkYXRhVHlwZUV4cHJlc3Npb24gPSAiKiI7Ci0gICAgfQotCi0g
ICAgdmFyIGRhdGFUeXBlLAotICAgIGkgPSAwLAotICAgIGRhdGFUeXBlcyA9IGRhdGFUeXBlRXhw
cmVzc2lvbi50b0xvd2VyQ2FzZSgpLm1hdGNoKCBjb3JlX3Jub3R3aGl0ZSApIHx8IFtdOwotCi0g
ICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggZnVuYyApICkgewotICAgIC8vIEZvciBlYWNoIGRh
dGFUeXBlIGluIHRoZSBkYXRhVHlwZUV4cHJlc3Npb24KLSAgICB3aGlsZSAoIChkYXRhVHlwZSA9
IGRhdGFUeXBlc1tpKytdKSApIHsKLSAgICAvLyBQcmVwZW5kIGlmIHJlcXVlc3RlZAotICAgIGlm
ICggZGF0YVR5cGVbMF0gPT09ICIrIiApIHsKLSAgICBkYXRhVHlwZSA9IGRhdGFUeXBlLnNsaWNl
KCAxICkgfHwgIioiOwotICAgIChzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRh
dGFUeXBlIF0gfHwgW10pLnVuc2hpZnQoIGZ1bmMgKTsKLQotICAgIC8vIE90aGVyd2lzZSBhcHBl
bmQKLSAgICB9IGVsc2UgewotICAgIChzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVb
IGRhdGFUeXBlIF0gfHwgW10pLnB1c2goIGZ1bmMgKTsKLSAgICB9Ci0gICAgfQotICAgIH0KLSAg
ICB9OwotfQotCi0vLyBCYXNlIGluc3BlY3Rpb24gZnVuY3Rpb24gZm9yIHByZWZpbHRlcnMgYW5k
IHRyYW5zcG9ydHMKLWZ1bmN0aW9uIGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1
Y3R1cmUsIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKSB7Ci0KLSAgICB2YXIgaW5z
cGVjdGVkID0ge30sCi0gICAgc2Vla2luZ1RyYW5zcG9ydCA9ICggc3RydWN0dXJlID09PSB0cmFu
c3BvcnRzICk7Ci0KLSAgICBmdW5jdGlvbiBpbnNwZWN0KCBkYXRhVHlwZSApIHsKLSAgICB2YXIg
c2VsZWN0ZWQ7Ci0gICAgaW5zcGVjdGVkWyBkYXRhVHlwZSBdID0gdHJ1ZTsKLSAgICBqUXVlcnku
ZWFjaCggc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdLCBmdW5jdGlvbiggXywgcHJlZmlsdGVy
T3JGYWN0b3J5ICkgewotICAgIHZhciBkYXRhVHlwZU9yVHJhbnNwb3J0ID0gcHJlZmlsdGVyT3JG
YWN0b3J5KCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSICk7Ci0gICAgaWYoIHR5cGVv
ZiBkYXRhVHlwZU9yVHJhbnNwb3J0ID09PSAic3RyaW5nIiAmJiAhc2Vla2luZ1RyYW5zcG9ydCAm
JiAhaW5zcGVjdGVkWyBkYXRhVHlwZU9yVHJhbnNwb3J0IF0gKSB7Ci0gICAgb3B0aW9ucy5kYXRh
VHlwZXMudW5zaGlmdCggZGF0YVR5cGVPclRyYW5zcG9ydCApOwotICAgIGluc3BlY3QoIGRhdGFU
eXBlT3JUcmFuc3BvcnQgKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSBlbHNlIGlmICggc2Vl
a2luZ1RyYW5zcG9ydCApIHsKLSAgICByZXR1cm4gISggc2VsZWN0ZWQgPSBkYXRhVHlwZU9yVHJh
bnNwb3J0ICk7Ci0gICAgfQotICAgIH0pOwotICAgIHJldHVybiBzZWxlY3RlZDsKLSAgICB9Ci0K
LSAgICByZXR1cm4gaW5zcGVjdCggb3B0aW9ucy5kYXRhVHlwZXNbIDAgXSApIHx8ICFpbnNwZWN0
ZWRbICIqIiBdICYmIGluc3BlY3QoICIqIiApOwotfQotCi0vLyBBIHNwZWNpYWwgZXh0ZW5kIGZv
ciBhamF4IG9wdGlvbnMKLS8vIHRoYXQgdGFrZXMgImZsYXQiIG9wdGlvbnMgKG5vdCB0byBiZSBk
ZWVwIGV4dGVuZGVkKQotLy8gRml4ZXMgIzk4ODcKLWZ1bmN0aW9uIGFqYXhFeHRlbmQoIHRhcmdl
dCwgc3JjICkgewotICAgIHZhciBkZWVwLCBrZXksCi0gICAgZmxhdE9wdGlvbnMgPSBqUXVlcnku
YWpheFNldHRpbmdzLmZsYXRPcHRpb25zIHx8IHt9OwotCi0gICAgZm9yICgga2V5IGluIHNyYyAp
IHsKLSAgICBpZiAoIHNyY1sga2V5IF0gIT09IHVuZGVmaW5lZCApIHsKLSAgICAoIGZsYXRPcHRp
b25zWyBrZXkgXSA/IHRhcmdldCA6ICggZGVlcCB8fCAoZGVlcCA9IHt9KSApIClbIGtleSBdID0g
c3JjWyBrZXkgXTsKLSAgICB9Ci0gICAgfQotICAgIGlmICggZGVlcCApIHsKLSAgICBqUXVlcnku
ZXh0ZW5kKCB0cnVlLCB0YXJnZXQsIGRlZXAgKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdGFyZ2V0
OwotfQotCi1qUXVlcnkuZm4ubG9hZCA9IGZ1bmN0aW9uKCB1cmwsIHBhcmFtcywgY2FsbGJhY2sg
KSB7Ci0gICAgaWYgKCB0eXBlb2YgdXJsICE9PSAic3RyaW5nIiAmJiBfbG9hZCApIHsKLSAgICBy
ZXR1cm4gX2xvYWQuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOwotICAgIH0KLQotICAgIHZhciBz
ZWxlY3RvciwgcmVzcG9uc2UsIHR5cGUsCi0gICAgc2VsZiA9IHRoaXMsCi0gICAgb2ZmID0gdXJs
LmluZGV4T2YoIiAiKTsKLQotICAgIGlmICggb2ZmID49IDAgKSB7Ci0gICAgc2VsZWN0b3IgPSB1
cmwuc2xpY2UoIG9mZiwgdXJsLmxlbmd0aCApOwotICAgIHVybCA9IHVybC5zbGljZSggMCwgb2Zm
ICk7Ci0gICAgfQotCi0gICAgLy8gSWYgaXQncyBhIGZ1bmN0aW9uCi0gICAgaWYgKCBqUXVlcnku
aXNGdW5jdGlvbiggcGFyYW1zICkgKSB7Ci0KLSAgICAvLyBXZSBhc3N1bWUgdGhhdCBpdCdzIHRo
ZSBjYWxsYmFjawotICAgIGNhbGxiYWNrID0gcGFyYW1zOwotICAgIHBhcmFtcyA9IHVuZGVmaW5l
ZDsKLQotICAgIC8vIE90aGVyd2lzZSwgYnVpbGQgYSBwYXJhbSBzdHJpbmcKLSAgICB9IGVsc2Ug
aWYgKCBwYXJhbXMgJiYgdHlwZW9mIHBhcmFtcyA9PT0gIm9iamVjdCIgKSB7Ci0gICAgdHlwZSA9
ICJQT1NUIjsKLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBoYXZlIGVsZW1lbnRzIHRvIG1vZGlmeSwg
bWFrZSB0aGUgcmVxdWVzdAotICAgIGlmICggc2VsZi5sZW5ndGggPiAwICkgewotICAgIGpRdWVy
eS5hamF4KHsKLSAgICB1cmw6IHVybCwKLQotICAgIC8vIGlmICJ0eXBlIiB2YXJpYWJsZSBpcyB1
bmRlZmluZWQsIHRoZW4gIkdFVCIgbWV0aG9kIHdpbGwgYmUgdXNlZAotICAgIHR5cGU6IHR5cGUs
Ci0gICAgZGF0YVR5cGU6ICJodG1sIiwKLSAgICBkYXRhOiBwYXJhbXMKLSAgICB9KS5kb25lKGZ1
bmN0aW9uKCByZXNwb25zZVRleHQgKSB7Ci0KLSAgICAvLyBTYXZlIHJlc3BvbnNlIGZvciB1c2Ug
aW4gY29tcGxldGUgY2FsbGJhY2sKLSAgICByZXNwb25zZSA9IGFyZ3VtZW50czsKLQotICAgIHNl
bGYuaHRtbCggc2VsZWN0b3IgPwotCi0gICAgLy8gSWYgYSBzZWxlY3RvciB3YXMgc3BlY2lmaWVk
LCBsb2NhdGUgdGhlIHJpZ2h0IGVsZW1lbnRzIGluIGEgZHVtbXkgZGl2Ci0gICAgLy8gRXhjbHVk
ZSBzY3JpcHRzIHRvIGF2b2lkIElFICdQZXJtaXNzaW9uIERlbmllZCcgZXJyb3JzCi0gICAgalF1
ZXJ5KCI8ZGl2PiIpLmFwcGVuZCggalF1ZXJ5LnBhcnNlSFRNTCggcmVzcG9uc2VUZXh0ICkgKS5m
aW5kKCBzZWxlY3RvciApIDoKLQotICAgIC8vIE90aGVyd2lzZSB1c2UgdGhlIGZ1bGwgcmVzdWx0
Ci0gICAgcmVzcG9uc2VUZXh0ICk7Ci0KLSAgICB9KS5jb21wbGV0ZSggY2FsbGJhY2sgJiYgZnVu
Y3Rpb24oIGpxWEhSLCBzdGF0dXMgKSB7Ci0gICAgc2VsZi5lYWNoKCBjYWxsYmFjaywgcmVzcG9u
c2UgfHwgWyBqcVhIUi5yZXNwb25zZVRleHQsIHN0YXR1cywganFYSFIgXSApOwotICAgIH0pOwot
ICAgIH0KLQotICAgIHJldHVybiB0aGlzOwotfTsKLQotLy8gQXR0YWNoIGEgYnVuY2ggb2YgZnVu
Y3Rpb25zIGZvciBoYW5kbGluZyBjb21tb24gQUpBWCBldmVudHMKLWpRdWVyeS5lYWNoKCBbICJh
amF4U3RhcnQiLCAiYWpheFN0b3AiLCAiYWpheENvbXBsZXRlIiwgImFqYXhFcnJvciIsICJhamF4
U3VjY2VzcyIsICJhamF4U2VuZCIgXSwgZnVuY3Rpb24oIGksIHR5cGUgKXsKLSAgICBqUXVlcnku
Zm5bIHR5cGUgXSA9IGZ1bmN0aW9uKCBmbiApewotICAgIHJldHVybiB0aGlzLm9uKCB0eXBlLCBm
biApOwotICAgIH07Ci19KTsKLQotalF1ZXJ5LmVhY2goIFsgImdldCIsICJwb3N0IiBdLCBmdW5j
dGlvbiggaSwgbWV0aG9kICkgewotICAgIGpRdWVyeVsgbWV0aG9kIF0gPSBmdW5jdGlvbiggdXJs
LCBkYXRhLCBjYWxsYmFjaywgdHlwZSApIHsKLSAgICAvLyBzaGlmdCBhcmd1bWVudHMgaWYgZGF0
YSBhcmd1bWVudCB3YXMgb21pdHRlZAotICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGRhdGEg
KSApIHsKLSAgICB0eXBlID0gdHlwZSB8fCBjYWxsYmFjazsKLSAgICBjYWxsYmFjayA9IGRhdGE7
Ci0gICAgZGF0YSA9IHVuZGVmaW5lZDsKLSAgICB9Ci0KLSAgICByZXR1cm4galF1ZXJ5LmFqYXgo
ewotICAgIHVybDogdXJsLAotICAgIHR5cGU6IG1ldGhvZCwKLSAgICBkYXRhVHlwZTogdHlwZSwK
LSAgICBkYXRhOiBkYXRhLAotICAgIHN1Y2Nlc3M6IGNhbGxiYWNrCi0gICAgfSk7Ci0gICAgfTsK
LX0pOwotCi1qUXVlcnkuZXh0ZW5kKHsKLQotICAgIC8vIENvdW50ZXIgZm9yIGhvbGRpbmcgdGhl
IG51bWJlciBvZiBhY3RpdmUgcXVlcmllcwotICAgIGFjdGl2ZTogMCwKLQotICAgIC8vIExhc3Qt
TW9kaWZpZWQgaGVhZGVyIGNhY2hlIGZvciBuZXh0IHJlcXVlc3QKLSAgICBsYXN0TW9kaWZpZWQ6
IHt9LAotICAgIGV0YWc6IHt9LAotCi0gICAgYWpheFNldHRpbmdzOiB7Ci0gICAgdXJsOiBhamF4
TG9jYXRpb24sCi0gICAgdHlwZTogIkdFVCIsCi0gICAgaXNMb2NhbDogcmxvY2FsUHJvdG9jb2wu
dGVzdCggYWpheExvY1BhcnRzWyAxIF0gKSwKLSAgICBnbG9iYWw6IHRydWUsCi0gICAgcHJvY2Vz
c0RhdGE6IHRydWUsCi0gICAgYXN5bmM6IHRydWUsCi0gICAgY29udGVudFR5cGU6ICJhcHBsaWNh
dGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLAotICAgIC8qCi0gICAg
dGltZW91dDogMCwKLSAgICBkYXRhOiBudWxsLAotICAgIGRhdGFUeXBlOiBudWxsLAotICAgIHVz
ZXJuYW1lOiBudWxsLAotICAgIHBhc3N3b3JkOiBudWxsLAotICAgIGNhY2hlOiBudWxsLAotICAg
IHRocm93czogZmFsc2UsCi0gICAgdHJhZGl0aW9uYWw6IGZhbHNlLAotICAgIGhlYWRlcnM6IHt9
LAotICAgICovCi0KLSAgICBhY2NlcHRzOiB7Ci0gICAgIioiOiBhbGxUeXBlcywKLSAgICB0ZXh0
OiAidGV4dC9wbGFpbiIsCi0gICAgaHRtbDogInRleHQvaHRtbCIsCi0gICAgeG1sOiAiYXBwbGlj
YXRpb24veG1sLCB0ZXh0L3htbCIsCi0gICAganNvbjogImFwcGxpY2F0aW9uL2pzb24sIHRleHQv
amF2YXNjcmlwdCIKLSAgICB9LAotCi0gICAgY29udGVudHM6IHsKLSAgICB4bWw6IC94bWwvLAot
ICAgIGh0bWw6IC9odG1sLywKLSAgICBqc29uOiAvanNvbi8KLSAgICB9LAotCi0gICAgcmVzcG9u
c2VGaWVsZHM6IHsKLSAgICB4bWw6ICJyZXNwb25zZVhNTCIsCi0gICAgdGV4dDogInJlc3BvbnNl
VGV4dCIKLSAgICB9LAotCi0gICAgLy8gRGF0YSBjb252ZXJ0ZXJzCi0gICAgLy8gS2V5cyBzZXBh
cmF0ZSBzb3VyY2UgKG9yIGNhdGNoYWxsICIqIikgYW5kIGRlc3RpbmF0aW9uIHR5cGVzIHdpdGgg
YSBzaW5nbGUgc3BhY2UKLSAgICBjb252ZXJ0ZXJzOiB7Ci0KLSAgICAvLyBDb252ZXJ0IGFueXRo
aW5nIHRvIHRleHQKLSAgICAiKiB0ZXh0Ijogd2luZG93LlN0cmluZywKLQotICAgIC8vIFRleHQg
dG8gaHRtbCAodHJ1ZSA9IG5vIHRyYW5zZm9ybWF0aW9uKQotICAgICJ0ZXh0IGh0bWwiOiB0cnVl
LAotCi0gICAgLy8gRXZhbHVhdGUgdGV4dCBhcyBhIGpzb24gZXhwcmVzc2lvbgotICAgICJ0ZXh0
IGpzb24iOiBqUXVlcnkucGFyc2VKU09OLAotCi0gICAgLy8gUGFyc2UgdGV4dCBhcyB4bWwKLSAg
ICAidGV4dCB4bWwiOiBqUXVlcnkucGFyc2VYTUwKLSAgICB9LAotCi0gICAgLy8gRm9yIG9wdGlv
bnMgdGhhdCBzaG91bGRuJ3QgYmUgZGVlcCBleHRlbmRlZDoKLSAgICAvLyB5b3UgY2FuIGFkZCB5
b3VyIG93biBjdXN0b20gb3B0aW9ucyBoZXJlIGlmCi0gICAgLy8gYW5kIHdoZW4geW91IGNyZWF0
ZSBvbmUgdGhhdCBzaG91bGRuJ3QgYmUKLSAgICAvLyBkZWVwIGV4dGVuZGVkIChzZWUgYWpheEV4
dGVuZCkKLSAgICBmbGF0T3B0aW9uczogewotICAgIHVybDogdHJ1ZSwKLSAgICBjb250ZXh0OiB0
cnVlCi0gICAgfQotICAgIH0sCi0KLSAgICAvLyBDcmVhdGVzIGEgZnVsbCBmbGVkZ2VkIHNldHRp
bmdzIG9iamVjdCBpbnRvIHRhcmdldAotICAgIC8vIHdpdGggYm90aCBhamF4U2V0dGluZ3MgYW5k
IHNldHRpbmdzIGZpZWxkcy4KLSAgICAvLyBJZiB0YXJnZXQgaXMgb21pdHRlZCwgd3JpdGVzIGlu
dG8gYWpheFNldHRpbmdzLgotICAgIGFqYXhTZXR1cDogZnVuY3Rpb24oIHRhcmdldCwgc2V0dGlu
Z3MgKSB7Ci0gICAgcmV0dXJuIHNldHRpbmdzID8KLQotICAgIC8vIEJ1aWxkaW5nIGEgc2V0dGlu
Z3Mgb2JqZWN0Ci0gICAgYWpheEV4dGVuZCggYWpheEV4dGVuZCggdGFyZ2V0LCBqUXVlcnkuYWph
eFNldHRpbmdzICksIHNldHRpbmdzICkgOgotCi0gICAgLy8gRXh0ZW5kaW5nIGFqYXhTZXR0aW5n
cwotICAgIGFqYXhFeHRlbmQoIGpRdWVyeS5hamF4U2V0dGluZ3MsIHRhcmdldCApOwotICAgIH0s
Ci0KLSAgICBhamF4UHJlZmlsdGVyOiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZp
bHRlcnMgKSwKLSAgICBhamF4VHJhbnNwb3J0OiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMo
IHRyYW5zcG9ydHMgKSwKLQotICAgIC8vIE1haW4gbWV0aG9kCi0gICAgYWpheDogZnVuY3Rpb24o
IHVybCwgb3B0aW9ucyApIHsKLQotICAgIC8vIElmIHVybCBpcyBhbiBvYmplY3QsIHNpbXVsYXRl
IHByZS0xLjUgc2lnbmF0dXJlCi0gICAgaWYgKCB0eXBlb2YgdXJsID09PSAib2JqZWN0IiApIHsK
LSAgICBvcHRpb25zID0gdXJsOwotICAgIHVybCA9IHVuZGVmaW5lZDsKLSAgICB9Ci0KLSAgICAv
LyBGb3JjZSBvcHRpb25zIHRvIGJlIGFuIG9iamVjdAotICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8
IHt9OwotCi0gICAgdmFyIC8vIENyb3NzLWRvbWFpbiBkZXRlY3Rpb24gdmFycwotICAgIHBhcnRz
LAotICAgIC8vIExvb3AgdmFyaWFibGUKLSAgICBpLAotICAgIC8vIFVSTCB3aXRob3V0IGFudGkt
Y2FjaGUgcGFyYW0KLSAgICBjYWNoZVVSTCwKLSAgICAvLyBSZXNwb25zZSBoZWFkZXJzIGFzIHN0
cmluZwotICAgIHJlc3BvbnNlSGVhZGVyc1N0cmluZywKLSAgICAvLyB0aW1lb3V0IGhhbmRsZQot
ICAgIHRpbWVvdXRUaW1lciwKLQotICAgIC8vIFRvIGtub3cgaWYgZ2xvYmFsIGV2ZW50cyBhcmUg
dG8gYmUgZGlzcGF0Y2hlZAotICAgIGZpcmVHbG9iYWxzLAotCi0gICAgdHJhbnNwb3J0LAotICAg
IC8vIFJlc3BvbnNlIGhlYWRlcnMKLSAgICByZXNwb25zZUhlYWRlcnMsCi0gICAgLy8gQ3JlYXRl
IHRoZSBmaW5hbCBvcHRpb25zIG9iamVjdAotICAgIHMgPSBqUXVlcnkuYWpheFNldHVwKCB7fSwg
b3B0aW9ucyApLAotICAgIC8vIENhbGxiYWNrcyBjb250ZXh0Ci0gICAgY2FsbGJhY2tDb250ZXh0
ID0gcy5jb250ZXh0IHx8IHMsCi0gICAgLy8gQ29udGV4dCBmb3IgZ2xvYmFsIGV2ZW50cyBpcyBj
YWxsYmFja0NvbnRleHQgaWYgaXQgaXMgYSBET00gbm9kZSBvciBqUXVlcnkgY29sbGVjdGlvbgot
ICAgIGdsb2JhbEV2ZW50Q29udGV4dCA9IHMuY29udGV4dCAmJiAoIGNhbGxiYWNrQ29udGV4dC5u
b2RlVHlwZSB8fCBjYWxsYmFja0NvbnRleHQuanF1ZXJ5ICkgPwotICAgIGpRdWVyeSggY2FsbGJh
Y2tDb250ZXh0ICkgOgotICAgIGpRdWVyeS5ldmVudCwKLSAgICAvLyBEZWZlcnJlZHMKLSAgICBk
ZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJlZCgpLAotICAgIGNvbXBsZXRlRGVmZXJyZWQgPSBqUXVl
cnkuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLAotICAgIC8vIFN0YXR1cy1kZXBlbmRlbnQgY2Fs
bGJhY2tzCi0gICAgc3RhdHVzQ29kZSA9IHMuc3RhdHVzQ29kZSB8fCB7fSwKLSAgICAvLyBIZWFk
ZXJzICh0aGV5IGFyZSBzZW50IGFsbCBhdCBvbmNlKQotICAgIHJlcXVlc3RIZWFkZXJzID0ge30s
Ci0gICAgcmVxdWVzdEhlYWRlcnNOYW1lcyA9IHt9LAotICAgIC8vIFRoZSBqcVhIUiBzdGF0ZQot
ICAgIHN0YXRlID0gMCwKLSAgICAvLyBEZWZhdWx0IGFib3J0IG1lc3NhZ2UKLSAgICBzdHJBYm9y
dCA9ICJjYW5jZWxlZCIsCi0gICAgLy8gRmFrZSB4aHIKLSAgICBqcVhIUiA9IHsKLSAgICByZWFk
eVN0YXRlOiAwLAotCi0gICAgLy8gQnVpbGRzIGhlYWRlcnMgaGFzaHRhYmxlIGlmIG5lZWRlZAot
ICAgIGdldFJlc3BvbnNlSGVhZGVyOiBmdW5jdGlvbigga2V5ICkgewotICAgIHZhciBtYXRjaDsK
LSAgICBpZiAoIHN0YXRlID09PSAyICkgewotICAgIGlmICggIXJlc3BvbnNlSGVhZGVycyApIHsK
LSAgICByZXNwb25zZUhlYWRlcnMgPSB7fTsKLSAgICB3aGlsZSAoIChtYXRjaCA9IHJoZWFkZXJz
LmV4ZWMoIHJlc3BvbnNlSGVhZGVyc1N0cmluZyApKSApIHsKLSAgICByZXNwb25zZUhlYWRlcnNb
IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCkgXSA9IG1hdGNoWyAyIF07Ci0gICAgfQotICAgIH0KLSAg
ICBtYXRjaCA9IHJlc3BvbnNlSGVhZGVyc1sga2V5LnRvTG93ZXJDYXNlKCkgXTsKLSAgICB9Ci0g
ICAgcmV0dXJuIG1hdGNoID09IG51bGwgPyBudWxsIDogbWF0Y2g7Ci0gICAgfSwKLQotICAgIC8v
IFJhdyBzdHJpbmcKLSAgICBnZXRBbGxSZXNwb25zZUhlYWRlcnM6IGZ1bmN0aW9uKCkgewotICAg
IHJldHVybiBzdGF0ZSA9PT0gMiA/IHJlc3BvbnNlSGVhZGVyc1N0cmluZyA6IG51bGw7Ci0gICAg
fSwKLQotICAgIC8vIENhY2hlcyB0aGUgaGVhZGVyCi0gICAgc2V0UmVxdWVzdEhlYWRlcjogZnVu
Y3Rpb24oIG5hbWUsIHZhbHVlICkgewotICAgIHZhciBsbmFtZSA9IG5hbWUudG9Mb3dlckNhc2Uo
KTsKLSAgICBpZiAoICFzdGF0ZSApIHsKLSAgICBuYW1lID0gcmVxdWVzdEhlYWRlcnNOYW1lc1sg
bG5hbWUgXSA9IHJlcXVlc3RIZWFkZXJzTmFtZXNbIGxuYW1lIF0gfHwgbmFtZTsKLSAgICByZXF1
ZXN0SGVhZGVyc1sgbmFtZSBdID0gdmFsdWU7Ci0gICAgfQotICAgIHJldHVybiB0aGlzOwotICAg
IH0sCi0KLSAgICAvLyBPdmVycmlkZXMgcmVzcG9uc2UgY29udGVudC10eXBlIGhlYWRlcgotICAg
IG92ZXJyaWRlTWltZVR5cGU6IGZ1bmN0aW9uKCB0eXBlICkgewotICAgIGlmICggIXN0YXRlICkg
ewotICAgIHMubWltZVR5cGUgPSB0eXBlOwotICAgIH0KLSAgICByZXR1cm4gdGhpczsKLSAgICB9
LAotCi0gICAgLy8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3MKLSAgICBzdGF0dXNDb2RlOiBm
dW5jdGlvbiggbWFwICkgewotICAgIHZhciBjb2RlOwotICAgIGlmICggbWFwICkgewotICAgIGlm
ICggc3RhdGUgPCAyICkgewotICAgIGZvciAoIGNvZGUgaW4gbWFwICkgewotICAgIC8vIExhenkt
YWRkIHRoZSBuZXcgY2FsbGJhY2sgaW4gYSB3YXkgdGhhdCBwcmVzZXJ2ZXMgb2xkIG9uZXMKLSAg
ICBzdGF0dXNDb2RlWyBjb2RlIF0gPSBbIHN0YXR1c0NvZGVbIGNvZGUgXSwgbWFwWyBjb2RlIF0g
XTsKLSAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAvLyBFeGVjdXRlIHRoZSBhcHByb3ByaWF0ZSBj
YWxsYmFja3MKLSAgICBqcVhIUi5hbHdheXMoIG1hcFsganFYSFIuc3RhdHVzIF0gKTsKLSAgICB9
Ci0gICAgfQotICAgIHJldHVybiB0aGlzOwotICAgIH0sCi0KLSAgICAvLyBDYW5jZWwgdGhlIHJl
cXVlc3QKLSAgICBhYm9ydDogZnVuY3Rpb24oIHN0YXR1c1RleHQgKSB7Ci0gICAgdmFyIGZpbmFs
VGV4dCA9IHN0YXR1c1RleHQgfHwgc3RyQWJvcnQ7Ci0gICAgaWYgKCB0cmFuc3BvcnQgKSB7Ci0g
ICAgdHJhbnNwb3J0LmFib3J0KCBmaW5hbFRleHQgKTsKLSAgICB9Ci0gICAgZG9uZSggMCwgZmlu
YWxUZXh0ICk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotICAgIH07Ci0KLSAgICAvLyBBdHRh
Y2ggZGVmZXJyZWRzCi0gICAgZGVmZXJyZWQucHJvbWlzZSgganFYSFIgKS5jb21wbGV0ZSA9IGNv
bXBsZXRlRGVmZXJyZWQuYWRkOwotICAgIGpxWEhSLnN1Y2Nlc3MgPSBqcVhIUi5kb25lOwotICAg
IGpxWEhSLmVycm9yID0ganFYSFIuZmFpbDsKLQotICAgIC8vIFJlbW92ZSBoYXNoIGNoYXJhY3Rl
ciAoIzc1MzE6IGFuZCBzdHJpbmcgcHJvbW90aW9uKQotICAgIC8vIEFkZCBwcm90b2NvbCBpZiBu
b3QgcHJvdmlkZWQgKCM1ODY2OiBJRTcgaXNzdWUgd2l0aCBwcm90b2NvbC1sZXNzIHVybHMpCi0g
ICAgLy8gSGFuZGxlIGZhbHN5IHVybCBpbiB0aGUgc2V0dGluZ3Mgb2JqZWN0ICgjMTAwOTM6IGNv
bnNpc3RlbmN5IHdpdGggb2xkIHNpZ25hdHVyZSkKLSAgICAvLyBXZSBhbHNvIHVzZSB0aGUgdXJs
IHBhcmFtZXRlciBpZiBhdmFpbGFibGUKLSAgICBzLnVybCA9ICggKCB1cmwgfHwgcy51cmwgfHwg
YWpheExvY2F0aW9uICkgKyAiIiApLnJlcGxhY2UoIHJoYXNoLCAiIiApLnJlcGxhY2UoIHJwcm90
b2NvbCwgYWpheExvY1BhcnRzWyAxIF0gKyAiLy8iICk7Ci0KLSAgICAvLyBBbGlhcyBtZXRob2Qg
b3B0aW9uIHRvIHR5cGUgYXMgcGVyIHRpY2tldCAjMTIwMDQKLSAgICBzLnR5cGUgPSBvcHRpb25z
Lm1ldGhvZCB8fCBvcHRpb25zLnR5cGUgfHwgcy5tZXRob2QgfHwgcy50eXBlOwotCi0gICAgLy8g
RXh0cmFjdCBkYXRhVHlwZXMgbGlzdAotICAgIHMuZGF0YVR5cGVzID0galF1ZXJ5LnRyaW0oIHMu
ZGF0YVR5cGUgfHwgIioiICkudG9Mb3dlckNhc2UoKS5tYXRjaCggY29yZV9ybm90d2hpdGUgKSB8
fCBbIiJdOwotCi0gICAgLy8gQSBjcm9zcy1kb21haW4gcmVxdWVzdCBpcyBpbiBvcmRlciB3aGVu
IHdlIGhhdmUgYSBwcm90b2NvbDpob3N0OnBvcnQgbWlzbWF0Y2gKLSAgICBpZiAoIHMuY3Jvc3NE
b21haW4gPT0gbnVsbCApIHsKLSAgICBwYXJ0cyA9IHJ1cmwuZXhlYyggcy51cmwudG9Mb3dlckNh
c2UoKSApOwotICAgIHMuY3Jvc3NEb21haW4gPSAhISggcGFydHMgJiYKLSAgICAoIHBhcnRzWyAx
IF0gIT09IGFqYXhMb2NQYXJ0c1sgMSBdIHx8IHBhcnRzWyAyIF0gIT09IGFqYXhMb2NQYXJ0c1sg
MiBdIHx8Ci0gICAgKCBwYXJ0c1sgMyBdIHx8ICggcGFydHNbIDEgXSA9PT0gImh0dHA6IiA/IDgw
IDogNDQzICkgKSAhPQotICAgICggYWpheExvY1BhcnRzWyAzIF0gfHwgKCBhamF4TG9jUGFydHNb
IDEgXSA9PT0gImh0dHA6IiA/IDgwIDogNDQzICkgKSApCi0gICAgKTsKLSAgICB9Ci0KLSAgICAv
LyBDb252ZXJ0IGRhdGEgaWYgbm90IGFscmVhZHkgYSBzdHJpbmcKLSAgICBpZiAoIHMuZGF0YSAm
JiBzLnByb2Nlc3NEYXRhICYmIHR5cGVvZiBzLmRhdGEgIT09ICJzdHJpbmciICkgewotICAgIHMu
ZGF0YSA9IGpRdWVyeS5wYXJhbSggcy5kYXRhLCBzLnRyYWRpdGlvbmFsICk7Ci0gICAgfQotCi0g
ICAgLy8gQXBwbHkgcHJlZmlsdGVycwotICAgIGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRz
KCBwcmVmaWx0ZXJzLCBzLCBvcHRpb25zLCBqcVhIUiApOwotCi0gICAgLy8gSWYgcmVxdWVzdCB3
YXMgYWJvcnRlZCBpbnNpZGUgYSBwcmVmaWx0ZXIsIHN0b3AgdGhlcmUKLSAgICBpZiAoIHN0YXRl
ID09PSAyICkgewotICAgIHJldHVybiBqcVhIUjsKLSAgICB9Ci0KLSAgICAvLyBXZSBjYW4gZmly
ZSBnbG9iYWwgZXZlbnRzIGFzIG9mIG5vdyBpZiBhc2tlZCB0bwotICAgIGZpcmVHbG9iYWxzID0g
cy5nbG9iYWw7Ci0KLSAgICAvLyBXYXRjaCBmb3IgYSBuZXcgc2V0IG9mIHJlcXVlc3RzCi0gICAg
aWYgKCBmaXJlR2xvYmFscyAmJiBqUXVlcnkuYWN0aXZlKysgPT09IDAgKSB7Ci0gICAgalF1ZXJ5
LmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpOwotICAgIH0KLQotICAgIC8vIFVwcGVyY2FzZSB0
aGUgdHlwZQotICAgIHMudHlwZSA9IHMudHlwZS50b1VwcGVyQ2FzZSgpOwotCi0gICAgLy8gRGV0
ZXJtaW5lIGlmIHJlcXVlc3QgaGFzIGNvbnRlbnQKLSAgICBzLmhhc0NvbnRlbnQgPSAhcm5vQ29u
dGVudC50ZXN0KCBzLnR5cGUgKTsKLQotICAgIC8vIFNhdmUgdGhlIFVSTCBpbiBjYXNlIHdlJ3Jl
IHRveWluZyB3aXRoIHRoZSBJZi1Nb2RpZmllZC1TaW5jZQotICAgIC8vIGFuZC9vciBJZi1Ob25l
LU1hdGNoIGhlYWRlciBsYXRlciBvbgotICAgIGNhY2hlVVJMID0gcy51cmw7Ci0KLSAgICAvLyBN
b3JlIG9wdGlvbnMgaGFuZGxpbmcgZm9yIHJlcXVlc3RzIHdpdGggbm8gY29udGVudAotICAgIGlm
ICggIXMuaGFzQ29udGVudCApIHsKLQotICAgIC8vIElmIGRhdGEgaXMgYXZhaWxhYmxlLCBhcHBl
bmQgZGF0YSB0byB1cmwKLSAgICBpZiAoIHMuZGF0YSApIHsKLSAgICBjYWNoZVVSTCA9ICggcy51
cmwgKz0gKCBhamF4X3JxdWVyeS50ZXN0KCBjYWNoZVVSTCApID8gIiYiIDogIj8iICkgKyBzLmRh
dGEgKTsKLSAgICAvLyAjOTY4MjogcmVtb3ZlIGRhdGEgc28gdGhhdCBpdCdzIG5vdCB1c2VkIGlu
IGFuIGV2ZW50dWFsIHJldHJ5Ci0gICAgZGVsZXRlIHMuZGF0YTsKLSAgICB9Ci0KLSAgICAvLyBB
ZGQgYW50aS1jYWNoZSBpbiB1cmwgaWYgbmVlZGVkCi0gICAgaWYgKCBzLmNhY2hlID09PSBmYWxz
ZSApIHsKLSAgICBzLnVybCA9IHJ0cy50ZXN0KCBjYWNoZVVSTCApID8KLQotICAgIC8vIElmIHRo
ZXJlIGlzIGFscmVhZHkgYSAnXycgcGFyYW1ldGVyLCBzZXQgaXRzIHZhbHVlCi0gICAgY2FjaGVV
UkwucmVwbGFjZSggcnRzLCAiJDFfPSIgKyBhamF4X25vbmNlKysgKSA6Ci0KLSAgICAvLyBPdGhl
cndpc2UgYWRkIG9uZSB0byB0aGUgZW5kCi0gICAgY2FjaGVVUkwgKyAoIGFqYXhfcnF1ZXJ5LnRl
c3QoIGNhY2hlVVJMICkgPyAiJiIgOiAiPyIgKSArICJfPSIgKyBhamF4X25vbmNlKys7Ci0gICAg
fQotICAgIH0KLQotICAgIC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5v
bmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuCi0gICAgaWYgKCBzLmlmTW9k
aWZpZWQgKSB7Ci0gICAgaWYgKCBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdICkgewot
ICAgIGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoICJJZi1Nb2RpZmllZC1TaW5jZSIsIGpRdWVyeS5s
YXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gKTsKLSAgICB9Ci0gICAgaWYgKCBqUXVlcnkuZXRhZ1sg
Y2FjaGVVUkwgXSApIHsKLSAgICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCAiSWYtTm9uZS1NYXRj
aCIsIGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdICk7Ci0gICAgfQotICAgIH0KLQotICAgIC8vIFNl
dCB0aGUgY29ycmVjdCBoZWFkZXIsIGlmIGRhdGEgaXMgYmVpbmcgc2VudAotICAgIGlmICggcy5k
YXRhICYmIHMuaGFzQ29udGVudCAmJiBzLmNvbnRlbnRUeXBlICE9PSBmYWxzZSB8fCBvcHRpb25z
LmNvbnRlbnRUeXBlICkgewotICAgIGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoICJDb250ZW50LVR5
cGUiLCBzLmNvbnRlbnRUeXBlICk7Ci0gICAgfQotCi0gICAgLy8gU2V0IHRoZSBBY2NlcHRzIGhl
YWRlciBmb3IgdGhlIHNlcnZlciwgZGVwZW5kaW5nIG9uIHRoZSBkYXRhVHlwZQotICAgIGpxWEhS
LnNldFJlcXVlc3RIZWFkZXIoCi0gICAgIkFjY2VwdCIsCi0gICAgcy5kYXRhVHlwZXNbIDAgXSAm
JiBzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWzBdIF0gPwotICAgIHMuYWNjZXB0c1sgcy5kYXRhVHlw
ZXNbMF0gXSArICggcy5kYXRhVHlwZXNbIDAgXSAhPT0gIioiID8gIiwgIiArIGFsbFR5cGVzICsg
IjsgcT0wLjAxIiA6ICIiICkgOgotICAgIHMuYWNjZXB0c1sgIioiIF0KLSAgICApOwotCi0gICAg
Ly8gQ2hlY2sgZm9yIGhlYWRlcnMgb3B0aW9uCi0gICAgZm9yICggaSBpbiBzLmhlYWRlcnMgKSB7
Ci0gICAganFYSFIuc2V0UmVxdWVzdEhlYWRlciggaSwgcy5oZWFkZXJzWyBpIF0gKTsKLSAgICB9
Ci0KLSAgICAvLyBBbGxvdyBjdXN0b20gaGVhZGVycy9taW1ldHlwZXMgYW5kIGVhcmx5IGFib3J0
Ci0gICAgaWYgKCBzLmJlZm9yZVNlbmQgJiYgKCBzLmJlZm9yZVNlbmQuY2FsbCggY2FsbGJhY2tD
b250ZXh0LCBqcVhIUiwgcyApID09PSBmYWxzZSB8fCBzdGF0ZSA9PT0gMiApICkgewotICAgIC8v
IEFib3J0IGlmIG5vdCBkb25lIGFscmVhZHkgYW5kIHJldHVybgotICAgIHJldHVybiBqcVhIUi5h
Ym9ydCgpOwotICAgIH0KLQotICAgIC8vIGFib3J0aW5nIGlzIG5vIGxvbmdlciBhIGNhbmNlbGxh
dGlvbgotICAgIHN0ckFib3J0ID0gImFib3J0IjsKLQotICAgIC8vIEluc3RhbGwgY2FsbGJhY2tz
IG9uIGRlZmVycmVkcwotICAgIGZvciAoIGkgaW4geyBzdWNjZXNzOiAxLCBlcnJvcjogMSwgY29t
cGxldGU6IDEgfSApIHsKLSAgICBqcVhIUlsgaSBdKCBzWyBpIF0gKTsKLSAgICB9Ci0KLSAgICAv
LyBHZXQgdHJhbnNwb3J0Ci0gICAgdHJhbnNwb3J0ID0gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5z
cG9ydHMoIHRyYW5zcG9ydHMsIHMsIG9wdGlvbnMsIGpxWEhSICk7Ci0KLSAgICAvLyBJZiBubyB0
cmFuc3BvcnQsIHdlIGF1dG8tYWJvcnQKLSAgICBpZiAoICF0cmFuc3BvcnQgKSB7Ci0gICAgZG9u
ZSggLTEsICJObyBUcmFuc3BvcnQiICk7Ci0gICAgfSBlbHNlIHsKLSAgICBqcVhIUi5yZWFkeVN0
YXRlID0gMTsKLQotICAgIC8vIFNlbmQgZ2xvYmFsIGV2ZW50Ci0gICAgaWYgKCBmaXJlR2xvYmFs
cyApIHsKLSAgICBnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggImFqYXhTZW5kIiwgWyBqcVhI
UiwgcyBdICk7Ci0gICAgfQotICAgIC8vIFRpbWVvdXQKLSAgICBpZiAoIHMuYXN5bmMgJiYgcy50
aW1lb3V0ID4gMCApIHsKLSAgICB0aW1lb3V0VGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkg
ewotICAgIGpxWEhSLmFib3J0KCJ0aW1lb3V0Iik7Ci0gICAgfSwgcy50aW1lb3V0ICk7Ci0gICAg
fQotCi0gICAgdHJ5IHsKLSAgICBzdGF0ZSA9IDE7Ci0gICAgdHJhbnNwb3J0LnNlbmQoIHJlcXVl
c3RIZWFkZXJzLCBkb25lICk7Ci0gICAgfSBjYXRjaCAoIGUgKSB7Ci0gICAgLy8gUHJvcGFnYXRl
IGV4Y2VwdGlvbiBhcyBlcnJvciBpZiBub3QgZG9uZQotICAgIGlmICggc3RhdGUgPCAyICkgewot
ICAgIGRvbmUoIC0xLCBlICk7Ci0gICAgLy8gU2ltcGx5IHJldGhyb3cgb3RoZXJ3aXNlCi0gICAg
fSBlbHNlIHsKLSAgICB0aHJvdyBlOwotICAgIH0KLSAgICB9Ci0gICAgfQotCi0gICAgLy8gQ2Fs
bGJhY2sgZm9yIHdoZW4gZXZlcnl0aGluZyBpcyBkb25lCi0gICAgZnVuY3Rpb24gZG9uZSggc3Rh
dHVzLCBuYXRpdmVTdGF0dXNUZXh0LCByZXNwb25zZXMsIGhlYWRlcnMgKSB7Ci0gICAgdmFyIGlz
U3VjY2Vzcywgc3VjY2VzcywgZXJyb3IsIHJlc3BvbnNlLCBtb2RpZmllZCwKLSAgICBzdGF0dXNU
ZXh0ID0gbmF0aXZlU3RhdHVzVGV4dDsKLQotICAgIC8vIENhbGxlZCBvbmNlCi0gICAgaWYgKCBz
dGF0ZSA9PT0gMiApIHsKLSAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gU3RhdGUgaXMgImRv
bmUiIG5vdwotICAgIHN0YXRlID0gMjsKLQotICAgIC8vIENsZWFyIHRpbWVvdXQgaWYgaXQgZXhp
c3RzCi0gICAgaWYgKCB0aW1lb3V0VGltZXIgKSB7Ci0gICAgY2xlYXJUaW1lb3V0KCB0aW1lb3V0
VGltZXIgKTsKLSAgICB9Ci0KLSAgICAvLyBEZXJlZmVyZW5jZSB0cmFuc3BvcnQgZm9yIGVhcmx5
IGdhcmJhZ2UgY29sbGVjdGlvbgotICAgIC8vIChubyBtYXR0ZXIgaG93IGxvbmcgdGhlIGpxWEhS
IG9iamVjdCB3aWxsIGJlIHVzZWQpCi0gICAgdHJhbnNwb3J0ID0gdW5kZWZpbmVkOwotCi0gICAg
Ly8gQ2FjaGUgcmVzcG9uc2UgaGVhZGVycwotICAgIHJlc3BvbnNlSGVhZGVyc1N0cmluZyA9IGhl
YWRlcnMgfHwgIiI7Ci0KLSAgICAvLyBTZXQgcmVhZHlTdGF0ZQotICAgIGpxWEhSLnJlYWR5U3Rh
dGUgPSBzdGF0dXMgPiAwID8gNCA6IDA7Ci0KLSAgICAvLyBHZXQgcmVzcG9uc2UgZGF0YQotICAg
IGlmICggcmVzcG9uc2VzICkgewotICAgIHJlc3BvbnNlID0gYWpheEhhbmRsZVJlc3BvbnNlcygg
cywganFYSFIsIHJlc3BvbnNlcyApOwotICAgIH0KLQotICAgIC8vIElmIHN1Y2Nlc3NmdWwsIGhh
bmRsZSB0eXBlIGNoYWluaW5nCi0gICAgaWYgKCBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMw
MCB8fCBzdGF0dXMgPT09IDMwNCApIHsKLQotICAgIC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2lu
Y2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuCi0g
ICAgaWYgKCBzLmlmTW9kaWZpZWQgKSB7Ci0gICAgbW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25z
ZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpOwotICAgIGlmICggbW9kaWZpZWQgKSB7Ci0gICAgalF1
ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSA9IG1vZGlmaWVkOwotICAgIH0KLSAgICBtb2Rp
ZmllZCA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCJldGFnIik7Ci0gICAgaWYgKCBtb2RpZmll
ZCApIHsKLSAgICBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSA9IG1vZGlmaWVkOwotICAgIH0KLSAg
ICB9Ci0KLSAgICAvLyBpZiBubyBjb250ZW50Ci0gICAgaWYgKCBzdGF0dXMgPT09IDIwNCApIHsK
LSAgICBpc1N1Y2Nlc3MgPSB0cnVlOwotICAgIHN0YXR1c1RleHQgPSAibm9jb250ZW50IjsKLQot
ICAgIC8vIGlmIG5vdCBtb2RpZmllZAotICAgIH0gZWxzZSBpZiAoIHN0YXR1cyA9PT0gMzA0ICkg
ewotICAgIGlzU3VjY2VzcyA9IHRydWU7Ci0gICAgc3RhdHVzVGV4dCA9ICJub3Rtb2RpZmllZCI7
Ci0KLSAgICAvLyBJZiB3ZSBoYXZlIGRhdGEsIGxldCdzIGNvbnZlcnQgaXQKLSAgICB9IGVsc2Ug
ewotICAgIGlzU3VjY2VzcyA9IGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSApOwotICAgIHN0YXR1
c1RleHQgPSBpc1N1Y2Nlc3Muc3RhdGU7Ci0gICAgc3VjY2VzcyA9IGlzU3VjY2Vzcy5kYXRhOwot
ICAgIGVycm9yID0gaXNTdWNjZXNzLmVycm9yOwotICAgIGlzU3VjY2VzcyA9ICFlcnJvcjsKLSAg
ICB9Ci0gICAgfSBlbHNlIHsKLSAgICAvLyBXZSBleHRyYWN0IGVycm9yIGZyb20gc3RhdHVzVGV4
dAotICAgIC8vIHRoZW4gbm9ybWFsaXplIHN0YXR1c1RleHQgYW5kIHN0YXR1cyBmb3Igbm9uLWFi
b3J0cwotICAgIGVycm9yID0gc3RhdHVzVGV4dDsKLSAgICBpZiAoIHN0YXR1cyB8fCAhc3RhdHVz
VGV4dCApIHsKLSAgICBzdGF0dXNUZXh0ID0gImVycm9yIjsKLSAgICBpZiAoIHN0YXR1cyA8IDAg
KSB7Ci0gICAgc3RhdHVzID0gMDsKLSAgICB9Ci0gICAgfQotICAgIH0KLQotICAgIC8vIFNldCBk
YXRhIGZvciB0aGUgZmFrZSB4aHIgb2JqZWN0Ci0gICAganFYSFIuc3RhdHVzID0gc3RhdHVzOwot
ICAgIGpxWEhSLnN0YXR1c1RleHQgPSAoIG5hdGl2ZVN0YXR1c1RleHQgfHwgc3RhdHVzVGV4dCAp
ICsgIiI7Ci0KLSAgICAvLyBTdWNjZXNzL0Vycm9yCi0gICAgaWYgKCBpc1N1Y2Nlc3MgKSB7Ci0g
ICAgZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBzdWNjZXNzLCBzdGF0
dXNUZXh0LCBqcVhIUiBdICk7Ci0gICAgfSBlbHNlIHsKLSAgICBkZWZlcnJlZC5yZWplY3RXaXRo
KCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1RleHQsIGVycm9yIF0gKTsKLSAgICB9
Ci0KLSAgICAvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrcwotICAgIGpxWEhSLnN0YXR1c0Nv
ZGUoIHN0YXR1c0NvZGUgKTsKLSAgICBzdGF0dXNDb2RlID0gdW5kZWZpbmVkOwotCi0gICAgaWYg
KCBmaXJlR2xvYmFscyApIHsKLSAgICBnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggaXNTdWNj
ZXNzID8gImFqYXhTdWNjZXNzIiA6ICJhamF4RXJyb3IiLAotICAgIFsganFYSFIsIHMsIGlzU3Vj
Y2VzcyA/IHN1Y2Nlc3MgOiBlcnJvciBdICk7Ci0gICAgfQotCi0gICAgLy8gQ29tcGxldGUKLSAg
ICBjb21wbGV0ZURlZmVycmVkLmZpcmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0
YXR1c1RleHQgXSApOwotCi0gICAgaWYgKCBmaXJlR2xvYmFscyApIHsKLSAgICBnbG9iYWxFdmVu
dENvbnRleHQudHJpZ2dlciggImFqYXhDb21wbGV0ZSIsIFsganFYSFIsIHMgXSApOwotICAgIC8v
IEhhbmRsZSB0aGUgZ2xvYmFsIEFKQVggY291bnRlcgotICAgIGlmICggISggLS1qUXVlcnkuYWN0
aXZlICkgKSB7Ci0gICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIik7Ci0gICAgfQot
ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4ganFYSFI7Ci0gICAgfSwKLQotICAgIGdldFNjcmlw
dDogZnVuY3Rpb24oIHVybCwgY2FsbGJhY2sgKSB7Ci0gICAgcmV0dXJuIGpRdWVyeS5nZXQoIHVy
bCwgdW5kZWZpbmVkLCBjYWxsYmFjaywgInNjcmlwdCIgKTsKLSAgICB9LAotCi0gICAgZ2V0SlNP
TjogZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2sgKSB7Ci0gICAgcmV0dXJuIGpRdWVyeS5n
ZXQoIHVybCwgZGF0YSwgY2FsbGJhY2ssICJqc29uIiApOwotICAgIH0KLX0pOwotCi0vKiBIYW5k
bGVzIHJlc3BvbnNlcyB0byBhbiBhamF4IHJlcXVlc3Q6Ci0gKiAtIHNldHMgYWxsIHJlc3BvbnNl
WFhYIGZpZWxkcyBhY2NvcmRpbmdseQotICogLSBmaW5kcyB0aGUgcmlnaHQgZGF0YVR5cGUgKG1l
ZGlhdGVzIGJldHdlZW4gY29udGVudC10eXBlIGFuZCBleHBlY3RlZCBkYXRhVHlwZSkKLSAqIC0g
cmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZQotICovCi1mdW5jdGlvbiBhamF4SGFu
ZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICkgewotICAgIHZhciBmaXJzdERhdGFU
eXBlLCBjdCwgZmluYWxEYXRhVHlwZSwgdHlwZSwKLSAgICBjb250ZW50cyA9IHMuY29udGVudHMs
Ci0gICAgZGF0YVR5cGVzID0gcy5kYXRhVHlwZXMsCi0gICAgcmVzcG9uc2VGaWVsZHMgPSBzLnJl
c3BvbnNlRmllbGRzOwotCi0gICAgLy8gRmlsbCByZXNwb25zZVhYWCBmaWVsZHMKLSAgICBmb3Ig
KCB0eXBlIGluIHJlc3BvbnNlRmllbGRzICkgewotICAgIGlmICggdHlwZSBpbiByZXNwb25zZXMg
KSB7Ci0gICAganFYSFJbIHJlc3BvbnNlRmllbGRzW3R5cGVdIF0gPSByZXNwb25zZXNbIHR5cGUg
XTsKLSAgICB9Ci0gICAgfQotCi0gICAgLy8gUmVtb3ZlIGF1dG8gZGF0YVR5cGUgYW5kIGdldCBj
b250ZW50LXR5cGUgaW4gdGhlIHByb2Nlc3MKLSAgICB3aGlsZSggZGF0YVR5cGVzWyAwIF0gPT09
ICIqIiApIHsKLSAgICBkYXRhVHlwZXMuc2hpZnQoKTsKLSAgICBpZiAoIGN0ID09PSB1bmRlZmlu
ZWQgKSB7Ci0gICAgY3QgPSBzLm1pbWVUeXBlIHx8IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCJD
b250ZW50LVR5cGUiKTsKLSAgICB9Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgaWYgd2UncmUgZGVh
bGluZyB3aXRoIGEga25vd24gY29udGVudC10eXBlCi0gICAgaWYgKCBjdCApIHsKLSAgICBmb3Ig
KCB0eXBlIGluIGNvbnRlbnRzICkgewotICAgIGlmICggY29udGVudHNbIHR5cGUgXSAmJiBjb250
ZW50c1sgdHlwZSBdLnRlc3QoIGN0ICkgKSB7Ci0gICAgZGF0YVR5cGVzLnVuc2hpZnQoIHR5cGUg
KTsKLSAgICBicmVhazsKLSAgICB9Ci0gICAgfQotICAgIH0KLQotICAgIC8vIENoZWNrIHRvIHNl
ZSBpZiB3ZSBoYXZlIGEgcmVzcG9uc2UgZm9yIHRoZSBleHBlY3RlZCBkYXRhVHlwZQotICAgIGlm
ICggZGF0YVR5cGVzWyAwIF0gaW4gcmVzcG9uc2VzICkgewotICAgIGZpbmFsRGF0YVR5cGUgPSBk
YXRhVHlwZXNbIDAgXTsKLSAgICB9IGVsc2UgewotICAgIC8vIFRyeSBjb252ZXJ0aWJsZSBkYXRh
VHlwZXMKLSAgICBmb3IgKCB0eXBlIGluIHJlc3BvbnNlcyApIHsKLSAgICBpZiAoICFkYXRhVHlw
ZXNbIDAgXSB8fCBzLmNvbnZlcnRlcnNbIHR5cGUgKyAiICIgKyBkYXRhVHlwZXNbMF0gXSApIHsK
LSAgICBmaW5hbERhdGFUeXBlID0gdHlwZTsKLSAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKCAh
Zmlyc3REYXRhVHlwZSApIHsKLSAgICBmaXJzdERhdGFUeXBlID0gdHlwZTsKLSAgICB9Ci0gICAg
fQotICAgIC8vIE9yIGp1c3QgdXNlIGZpcnN0IG9uZQotICAgIGZpbmFsRGF0YVR5cGUgPSBmaW5h
bERhdGFUeXBlIHx8IGZpcnN0RGF0YVR5cGU7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgZm91bmQg
YSBkYXRhVHlwZQotICAgIC8vIFdlIGFkZCB0aGUgZGF0YVR5cGUgdG8gdGhlIGxpc3QgaWYgbmVl
ZGVkCi0gICAgLy8gYW5kIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZQotICAgIGlm
ICggZmluYWxEYXRhVHlwZSApIHsKLSAgICBpZiAoIGZpbmFsRGF0YVR5cGUgIT09IGRhdGFUeXBl
c1sgMCBdICkgewotICAgIGRhdGFUeXBlcy51bnNoaWZ0KCBmaW5hbERhdGFUeXBlICk7Ci0gICAg
fQotICAgIHJldHVybiByZXNwb25zZXNbIGZpbmFsRGF0YVR5cGUgXTsKLSAgICB9Ci19Ci0KLS8v
IENoYWluIGNvbnZlcnNpb25zIGdpdmVuIHRoZSByZXF1ZXN0IGFuZCB0aGUgb3JpZ2luYWwgcmVz
cG9uc2UKLWZ1bmN0aW9uIGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSApIHsKLSAgICB2YXIgY29u
djIsIGN1cnJlbnQsIGNvbnYsIHRtcCwKLSAgICBjb252ZXJ0ZXJzID0ge30sCi0gICAgaSA9IDAs
Ci0gICAgLy8gV29yayB3aXRoIGEgY29weSBvZiBkYXRhVHlwZXMgaW4gY2FzZSB3ZSBuZWVkIHRv
IG1vZGlmeSBpdCBmb3IgY29udmVyc2lvbgotICAgIGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzLnNs
aWNlKCksCi0gICAgcHJldiA9IGRhdGFUeXBlc1sgMCBdOwotCi0gICAgLy8gQXBwbHkgdGhlIGRh
dGFGaWx0ZXIgaWYgcHJvdmlkZWQKLSAgICBpZiAoIHMuZGF0YUZpbHRlciApIHsKLSAgICByZXNw
b25zZSA9IHMuZGF0YUZpbHRlciggcmVzcG9uc2UsIHMuZGF0YVR5cGUgKTsKLSAgICB9Ci0KLSAg
ICAvLyBDcmVhdGUgY29udmVydGVycyBtYXAgd2l0aCBsb3dlcmNhc2VkIGtleXMKLSAgICBpZiAo
IGRhdGFUeXBlc1sgMSBdICkgewotICAgIGZvciAoIGNvbnYgaW4gcy5jb252ZXJ0ZXJzICkgewot
ICAgIGNvbnZlcnRlcnNbIGNvbnYudG9Mb3dlckNhc2UoKSBdID0gcy5jb252ZXJ0ZXJzWyBjb252
IF07Ci0gICAgfQotICAgIH0KLQotICAgIC8vIENvbnZlcnQgdG8gZWFjaCBzZXF1ZW50aWFsIGRh
dGFUeXBlLCB0b2xlcmF0aW5nIGxpc3QgbW9kaWZpY2F0aW9uCi0gICAgZm9yICggOyAoY3VycmVu
dCA9IGRhdGFUeXBlc1srK2ldKTsgKSB7Ci0KLSAgICAvLyBUaGVyZSdzIG9ubHkgd29yayB0byBk
byBpZiBjdXJyZW50IGRhdGFUeXBlIGlzIG5vbi1hdXRvCi0gICAgaWYgKCBjdXJyZW50ICE9PSAi
KiIgKSB7Ci0KLSAgICAvLyBDb252ZXJ0IHJlc3BvbnNlIGlmIHByZXYgZGF0YVR5cGUgaXMgbm9u
LWF1dG8gYW5kIGRpZmZlcnMgZnJvbSBjdXJyZW50Ci0gICAgaWYgKCBwcmV2ICE9PSAiKiIgJiYg
cHJldiAhPT0gY3VycmVudCApIHsKLQotICAgIC8vIFNlZWsgYSBkaXJlY3QgY29udmVydGVyCi0g
ICAgY29udiA9IGNvbnZlcnRlcnNbIHByZXYgKyAiICIgKyBjdXJyZW50IF0gfHwgY29udmVydGVy
c1sgIiogIiArIGN1cnJlbnQgXTsKLQotICAgIC8vIElmIG5vbmUgZm91bmQsIHNlZWsgYSBwYWly
Ci0gICAgaWYgKCAhY29udiApIHsKLSAgICBmb3IgKCBjb252MiBpbiBjb252ZXJ0ZXJzICkgewot
Ci0gICAgLy8gSWYgY29udjIgb3V0cHV0cyBjdXJyZW50Ci0gICAgdG1wID0gY29udjIuc3BsaXQo
IiAiKTsKLSAgICBpZiAoIHRtcFsgMSBdID09PSBjdXJyZW50ICkgewotCi0gICAgLy8gSWYgcHJl
diBjYW4gYmUgY29udmVydGVkIHRvIGFjY2VwdGVkIGlucHV0Ci0gICAgY29udiA9IGNvbnZlcnRl
cnNbIHByZXYgKyAiICIgKyB0bXBbIDAgXSBdIHx8Ci0gICAgY29udmVydGVyc1sgIiogIiArIHRt
cFsgMCBdIF07Ci0gICAgaWYgKCBjb252ICkgewotICAgIC8vIENvbmRlbnNlIGVxdWl2YWxlbmNl
IGNvbnZlcnRlcnMKLSAgICBpZiAoIGNvbnYgPT09IHRydWUgKSB7Ci0gICAgY29udiA9IGNvbnZl
cnRlcnNbIGNvbnYyIF07Ci0KLSAgICAvLyBPdGhlcndpc2UsIGluc2VydCB0aGUgaW50ZXJtZWRp
YXRlIGRhdGFUeXBlCi0gICAgfSBlbHNlIGlmICggY29udmVydGVyc1sgY29udjIgXSAhPT0gdHJ1
ZSApIHsKLSAgICBjdXJyZW50ID0gdG1wWyAwIF07Ci0gICAgZGF0YVR5cGVzLnNwbGljZSggaS0t
LCAwLCBjdXJyZW50ICk7Ci0gICAgfQotCi0gICAgYnJlYWs7Ci0gICAgfQotICAgIH0KLSAgICB9
Ci0gICAgfQotCi0gICAgLy8gQXBwbHkgY29udmVydGVyIChpZiBub3QgYW4gZXF1aXZhbGVuY2Up
Ci0gICAgaWYgKCBjb252ICE9PSB0cnVlICkgewotCi0gICAgLy8gVW5sZXNzIGVycm9ycyBhcmUg
YWxsb3dlZCB0byBidWJibGUsIGNhdGNoIGFuZCByZXR1cm4gdGhlbQotICAgIGlmICggY29udiAm
JiBzWyJ0aHJvd3MiXSApIHsKLSAgICByZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7Ci0gICAg
fSBlbHNlIHsKLSAgICB0cnkgewotICAgIHJlc3BvbnNlID0gY29udiggcmVzcG9uc2UgKTsKLSAg
ICB9IGNhdGNoICggZSApIHsKLSAgICByZXR1cm4geyBzdGF0ZTogInBhcnNlcmVycm9yIiwgZXJy
b3I6IGNvbnYgPyBlIDogIk5vIGNvbnZlcnNpb24gZnJvbSAiICsgcHJldiArICIgdG8gIiArIGN1
cnJlbnQgfTsKLSAgICB9Ci0gICAgfQotICAgIH0KLSAgICB9Ci0KLSAgICAvLyBVcGRhdGUgcHJl
diBmb3IgbmV4dCBpdGVyYXRpb24KLSAgICBwcmV2ID0gY3VycmVudDsKLSAgICB9Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHsgc3RhdGU6ICJzdWNjZXNzIiwgZGF0YTogcmVzcG9uc2UgfTsKLX0KLS8v
IEluc3RhbGwgc2NyaXB0IGRhdGFUeXBlCi1qUXVlcnkuYWpheFNldHVwKHsKLSAgICBhY2NlcHRz
OiB7Ci0gICAgc2NyaXB0OiAidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0
LCBhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQiCi0gICAg
fSwKLSAgICBjb250ZW50czogewotICAgIHNjcmlwdDogLyg/OmphdmF8ZWNtYSlzY3JpcHQvCi0g
ICAgfSwKLSAgICBjb252ZXJ0ZXJzOiB7Ci0gICAgInRleHQgc2NyaXB0IjogZnVuY3Rpb24oIHRl
eHQgKSB7Ci0gICAgalF1ZXJ5Lmdsb2JhbEV2YWwoIHRleHQgKTsKLSAgICByZXR1cm4gdGV4dDsK
LSAgICB9Ci0gICAgfQotfSk7Ci0KLS8vIEhhbmRsZSBjYWNoZSdzIHNwZWNpYWwgY2FzZSBhbmQg
Z2xvYmFsCi1qUXVlcnkuYWpheFByZWZpbHRlciggInNjcmlwdCIsIGZ1bmN0aW9uKCBzICkgewot
ICAgIGlmICggcy5jYWNoZSA9PT0gdW5kZWZpbmVkICkgewotICAgIHMuY2FjaGUgPSBmYWxzZTsK
LSAgICB9Ci0gICAgaWYgKCBzLmNyb3NzRG9tYWluICkgewotICAgIHMudHlwZSA9ICJHRVQiOwot
ICAgIHMuZ2xvYmFsID0gZmFsc2U7Ci0gICAgfQotfSk7Ci0KLS8vIEJpbmQgc2NyaXB0IHRhZyBo
YWNrIHRyYW5zcG9ydAotalF1ZXJ5LmFqYXhUcmFuc3BvcnQoICJzY3JpcHQiLCBmdW5jdGlvbihz
KSB7Ci0KLSAgICAvLyBUaGlzIHRyYW5zcG9ydCBvbmx5IGRlYWxzIHdpdGggY3Jvc3MgZG9tYWlu
IHJlcXVlc3RzCi0gICAgaWYgKCBzLmNyb3NzRG9tYWluICkgewotCi0gICAgdmFyIHNjcmlwdCwK
LSAgICBoZWFkID0gZG9jdW1lbnQuaGVhZCB8fCBqUXVlcnkoImhlYWQiKVswXSB8fCBkb2N1bWVu
dC5kb2N1bWVudEVsZW1lbnQ7Ci0KLSAgICByZXR1cm4gewotCi0gICAgc2VuZDogZnVuY3Rpb24o
IF8sIGNhbGxiYWNrICkgewotCi0gICAgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
c2NyaXB0Iik7Ci0KLSAgICBzY3JpcHQuYXN5bmMgPSB0cnVlOwotCi0gICAgaWYgKCBzLnNjcmlw
dENoYXJzZXQgKSB7Ci0gICAgc2NyaXB0LmNoYXJzZXQgPSBzLnNjcmlwdENoYXJzZXQ7Ci0gICAg
fQotCi0gICAgc2NyaXB0LnNyYyA9IHMudXJsOwotCi0gICAgLy8gQXR0YWNoIGhhbmRsZXJzIGZv
ciBhbGwgYnJvd3NlcnMKLSAgICBzY3JpcHQub25sb2FkID0gc2NyaXB0Lm9ucmVhZHlzdGF0ZWNo
YW5nZSA9IGZ1bmN0aW9uKCBfLCBpc0Fib3J0ICkgewotCi0gICAgaWYgKCBpc0Fib3J0IHx8ICFz
Y3JpcHQucmVhZHlTdGF0ZSB8fCAvbG9hZGVkfGNvbXBsZXRlLy50ZXN0KCBzY3JpcHQucmVhZHlT
dGF0ZSApICkgewotCi0gICAgLy8gSGFuZGxlIG1lbW9yeSBsZWFrIGluIElFCi0gICAgc2NyaXB0
Lm9ubG9hZCA9IHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsOwotCi0gICAgLy8gUmVt
b3ZlIHRoZSBzY3JpcHQKLSAgICBpZiAoIHNjcmlwdC5wYXJlbnROb2RlICkgewotICAgIHNjcmlw
dC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBzY3JpcHQgKTsKLSAgICB9Ci0KLSAgICAvLyBEZXJl
ZmVyZW5jZSB0aGUgc2NyaXB0Ci0gICAgc2NyaXB0ID0gbnVsbDsKLQotICAgIC8vIENhbGxiYWNr
IGlmIG5vdCBhYm9ydAotICAgIGlmICggIWlzQWJvcnQgKSB7Ci0gICAgY2FsbGJhY2soIDIwMCwg
InN1Y2Nlc3MiICk7Ci0gICAgfQotICAgIH0KLSAgICB9OwotCi0gICAgLy8gQ2lyY3VtdmVudCBJ
RTYgYnVncyB3aXRoIGJhc2UgZWxlbWVudHMgKCMyNzA5IGFuZCAjNDM3OCkgYnkgcHJlcGVuZGlu
ZwotICAgIC8vIFVzZSBuYXRpdmUgRE9NIG1hbmlwdWxhdGlvbiB0byBhdm9pZCBvdXIgZG9tTWFu
aXAgQUpBWCB0cmlja2VyeQotICAgIGhlYWQuaW5zZXJ0QmVmb3JlKCBzY3JpcHQsIGhlYWQuZmly
c3RDaGlsZCApOwotICAgIH0sCi0KLSAgICBhYm9ydDogZnVuY3Rpb24oKSB7Ci0gICAgaWYgKCBz
Y3JpcHQgKSB7Ci0gICAgc2NyaXB0Lm9ubG9hZCggdW5kZWZpbmVkLCB0cnVlICk7Ci0gICAgfQot
ICAgIH0KLSAgICB9OwotICAgIH0KLX0pOwotdmFyIG9sZENhbGxiYWNrcyA9IFtdLAotICAgIHJq
c29ucCA9IC8oPSlcPyg/PSZ8JCl8XD9cPy87Ci0KLS8vIERlZmF1bHQganNvbnAgc2V0dGluZ3MK
LWpRdWVyeS5hamF4U2V0dXAoewotICAgIGpzb25wOiAiY2FsbGJhY2siLAotICAgIGpzb25wQ2Fs
bGJhY2s6IGZ1bmN0aW9uKCkgewotICAgIHZhciBjYWxsYmFjayA9IG9sZENhbGxiYWNrcy5wb3Ao
KSB8fCAoIGpRdWVyeS5leHBhbmRvICsgIl8iICsgKCBhamF4X25vbmNlKysgKSApOwotICAgIHRo
aXNbIGNhbGxiYWNrIF0gPSB0cnVlOwotICAgIHJldHVybiBjYWxsYmFjazsKLSAgICB9Ci19KTsK
LQotLy8gRGV0ZWN0LCBub3JtYWxpemUgb3B0aW9ucyBhbmQgaW5zdGFsbCBjYWxsYmFja3MgZm9y
IGpzb25wIHJlcXVlc3RzCi1qUXVlcnkuYWpheFByZWZpbHRlciggImpzb24ganNvbnAiLCBmdW5j
dGlvbiggcywgb3JpZ2luYWxTZXR0aW5ncywganFYSFIgKSB7Ci0KLSAgICB2YXIgY2FsbGJhY2tO
YW1lLCBvdmVyd3JpdHRlbiwgcmVzcG9uc2VDb250YWluZXIsCi0gICAganNvblByb3AgPSBzLmpz
b25wICE9PSBmYWxzZSAmJiAoIHJqc29ucC50ZXN0KCBzLnVybCApID8KLSAgICAidXJsIiA6Ci0g
ICAgdHlwZW9mIHMuZGF0YSA9PT0gInN0cmluZyIgJiYgISggcy5jb250ZW50VHlwZSB8fCAiIiAp
LmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpICYmIHJqc29ucC50
ZXN0KCBzLmRhdGEgKSAmJiAiZGF0YSIKLSAgICApOwotCi0gICAgLy8gSGFuZGxlIGlmZiB0aGUg
ZXhwZWN0ZWQgZGF0YSB0eXBlIGlzICJqc29ucCIgb3Igd2UgaGF2ZSBhIHBhcmFtZXRlciB0byBz
ZXQKLSAgICBpZiAoIGpzb25Qcm9wIHx8IHMuZGF0YVR5cGVzWyAwIF0gPT09ICJqc29ucCIgKSB7
Ci0KLSAgICAvLyBHZXQgY2FsbGJhY2sgbmFtZSwgcmVtZW1iZXJpbmcgcHJlZXhpc3RpbmcgdmFs
dWUgYXNzb2NpYXRlZCB3aXRoIGl0Ci0gICAgY2FsbGJhY2tOYW1lID0gcy5qc29ucENhbGxiYWNr
ID0galF1ZXJ5LmlzRnVuY3Rpb24oIHMuanNvbnBDYWxsYmFjayApID8KLSAgICBzLmpzb25wQ2Fs
bGJhY2soKSA6Ci0gICAgcy5qc29ucENhbGxiYWNrOwotCi0gICAgLy8gSW5zZXJ0IGNhbGxiYWNr
IGludG8gdXJsIG9yIGZvcm0gZGF0YQotICAgIGlmICgganNvblByb3AgKSB7Ci0gICAgc1sganNv
blByb3AgXSA9IHNbIGpzb25Qcm9wIF0ucmVwbGFjZSggcmpzb25wLCAiJDEiICsgY2FsbGJhY2tO
YW1lICk7Ci0gICAgfSBlbHNlIGlmICggcy5qc29ucCAhPT0gZmFsc2UgKSB7Ci0gICAgcy51cmwg
Kz0gKCBhamF4X3JxdWVyeS50ZXN0KCBzLnVybCApID8gIiYiIDogIj8iICkgKyBzLmpzb25wICsg
Ij0iICsgY2FsbGJhY2tOYW1lOwotICAgIH0KLQotICAgIC8vIFVzZSBkYXRhIGNvbnZlcnRlciB0
byByZXRyaWV2ZSBqc29uIGFmdGVyIHNjcmlwdCBleGVjdXRpb24KLSAgICBzLmNvbnZlcnRlcnNb
InNjcmlwdCBqc29uIl0gPSBmdW5jdGlvbigpIHsKLSAgICBpZiAoICFyZXNwb25zZUNvbnRhaW5l
ciApIHsKLSAgICBqUXVlcnkuZXJyb3IoIGNhbGxiYWNrTmFtZSArICIgd2FzIG5vdCBjYWxsZWQi
ICk7Ci0gICAgfQotICAgIHJldHVybiByZXNwb25zZUNvbnRhaW5lclsgMCBdOwotICAgIH07Ci0K
LSAgICAvLyBmb3JjZSBqc29uIGRhdGFUeXBlCi0gICAgcy5kYXRhVHlwZXNbIDAgXSA9ICJqc29u
IjsKLQotICAgIC8vIEluc3RhbGwgY2FsbGJhY2sKLSAgICBvdmVyd3JpdHRlbiA9IHdpbmRvd1sg
Y2FsbGJhY2tOYW1lIF07Ci0gICAgd2luZG93WyBjYWxsYmFja05hbWUgXSA9IGZ1bmN0aW9uKCkg
ewotICAgIHJlc3BvbnNlQ29udGFpbmVyID0gYXJndW1lbnRzOwotICAgIH07Ci0KLSAgICAvLyBD
bGVhbi11cCBmdW5jdGlvbiAoZmlyZXMgYWZ0ZXIgY29udmVydGVycykKLSAgICBqcVhIUi5hbHdh
eXMoZnVuY3Rpb24oKSB7Ci0gICAgLy8gUmVzdG9yZSBwcmVleGlzdGluZyB2YWx1ZQotICAgIHdp
bmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBvdmVyd3JpdHRlbjsKLQotICAgIC8vIFNhdmUgYmFjayBh
cyBmcmVlCi0gICAgaWYgKCBzWyBjYWxsYmFja05hbWUgXSApIHsKLSAgICAvLyBtYWtlIHN1cmUg
dGhhdCByZS11c2luZyB0aGUgb3B0aW9ucyBkb2Vzbid0IHNjcmV3IHRoaW5ncyBhcm91bmQKLSAg
ICBzLmpzb25wQ2FsbGJhY2sgPSBvcmlnaW5hbFNldHRpbmdzLmpzb25wQ2FsbGJhY2s7Ci0KLSAg
ICAvLyBzYXZlIHRoZSBjYWxsYmFjayBuYW1lIGZvciBmdXR1cmUgdXNlCi0gICAgb2xkQ2FsbGJh
Y2tzLnB1c2goIGNhbGxiYWNrTmFtZSApOwotICAgIH0KLQotICAgIC8vIENhbGwgaWYgaXQgd2Fz
IGEgZnVuY3Rpb24gYW5kIHdlIGhhdmUgYSByZXNwb25zZQotICAgIGlmICggcmVzcG9uc2VDb250
YWluZXIgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIG92ZXJ3cml0dGVuICkgKSB7Ci0gICAgb3Zlcndy
aXR0ZW4oIHJlc3BvbnNlQ29udGFpbmVyWyAwIF0gKTsKLSAgICB9Ci0KLSAgICByZXNwb25zZUNv
bnRhaW5lciA9IG92ZXJ3cml0dGVuID0gdW5kZWZpbmVkOwotICAgIH0pOwotCi0gICAgLy8gRGVs
ZWdhdGUgdG8gc2NyaXB0Ci0gICAgcmV0dXJuICJzY3JpcHQiOwotICAgIH0KLX0pOwotdmFyIHho
ckNhbGxiYWNrcywgeGhyU3VwcG9ydGVkLAotICAgIHhocklkID0gMCwKLSAgICAvLyAjNTI4MDog
SW50ZXJuZXQgRXhwbG9yZXIgd2lsbCBrZWVwIGNvbm5lY3Rpb25zIGFsaXZlIGlmIHdlIGRvbid0
IGFib3J0IG9uIHVubG9hZAotICAgIHhock9uVW5sb2FkQWJvcnQgPSB3aW5kb3cuQWN0aXZlWE9i
amVjdCAmJiBmdW5jdGlvbigpIHsKLSAgICAvLyBBYm9ydCBhbGwgcGVuZGluZyByZXF1ZXN0cwot
ICAgIHZhciBrZXk7Ci0gICAgZm9yICgga2V5IGluIHhockNhbGxiYWNrcyApIHsKLSAgICB4aHJD
YWxsYmFja3NbIGtleSBdKCB1bmRlZmluZWQsIHRydWUgKTsKLSAgICB9Ci0gICAgfTsKLQotLy8g
RnVuY3Rpb25zIHRvIGNyZWF0ZSB4aHJzCi1mdW5jdGlvbiBjcmVhdGVTdGFuZGFyZFhIUigpIHsK
LSAgICB0cnkgewotICAgIHJldHVybiBuZXcgd2luZG93LlhNTEh0dHBSZXF1ZXN0KCk7Ci0gICAg
fSBjYXRjaCggZSApIHt9Ci19Ci0KLWZ1bmN0aW9uIGNyZWF0ZUFjdGl2ZVhIUigpIHsKLSAgICB0
cnkgewotICAgIHJldHVybiBuZXcgd2luZG93LkFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxI
VFRQIik7Ci0gICAgfSBjYXRjaCggZSApIHt9Ci19Ci0KLS8vIENyZWF0ZSB0aGUgcmVxdWVzdCBv
YmplY3QKLS8vIChUaGlzIGlzIHN0aWxsIGF0dGFjaGVkIHRvIGFqYXhTZXR0aW5ncyBmb3IgYmFj
a3dhcmQgY29tcGF0aWJpbGl0eSkKLWpRdWVyeS5hamF4U2V0dGluZ3MueGhyID0gd2luZG93LkFj
dGl2ZVhPYmplY3QgPwotICAgIC8qIE1pY3Jvc29mdCBmYWlsZWQgdG8gcHJvcGVybHkKLSAgICAg
KiBpbXBsZW1lbnQgdGhlIFhNTEh0dHBSZXF1ZXN0IGluIElFNyAoY2FuJ3QgcmVxdWVzdCBsb2Nh
bCBmaWxlcyksCi0gICAgICogc28gd2UgdXNlIHRoZSBBY3RpdmVYT2JqZWN0IHdoZW4gaXQgaXMg
YXZhaWxhYmxlCi0gICAgICogQWRkaXRpb25hbGx5IFhNTEh0dHBSZXF1ZXN0IGNhbiBiZSBkaXNh
YmxlZCBpbiBJRTcvSUU4IHNvCi0gICAgICogd2UgbmVlZCBhIGZhbGxiYWNrLgotICAgICAqLwot
ICAgIGZ1bmN0aW9uKCkgewotICAgIHJldHVybiAhdGhpcy5pc0xvY2FsICYmIGNyZWF0ZVN0YW5k
YXJkWEhSKCkgfHwgY3JlYXRlQWN0aXZlWEhSKCk7Ci0gICAgfSA6Ci0gICAgLy8gRm9yIGFsbCBv
dGhlciBicm93c2VycywgdXNlIHRoZSBzdGFuZGFyZCBYTUxIdHRwUmVxdWVzdCBvYmplY3QKLSAg
ICBjcmVhdGVTdGFuZGFyZFhIUjsKLQotLy8gRGV0ZXJtaW5lIHN1cHBvcnQgcHJvcGVydGllcwot
eGhyU3VwcG9ydGVkID0galF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIoKTsKLWpRdWVyeS5zdXBwb3J0
LmNvcnMgPSAhIXhoclN1cHBvcnRlZCAmJiAoICJ3aXRoQ3JlZGVudGlhbHMiIGluIHhoclN1cHBv
cnRlZCApOwoteGhyU3VwcG9ydGVkID0galF1ZXJ5LnN1cHBvcnQuYWpheCA9ICEheGhyU3VwcG9y
dGVkOwotCi0vLyBDcmVhdGUgdHJhbnNwb3J0IGlmIHRoZSBicm93c2VyIGNhbiBwcm92aWRlIGFu
IHhocgotaWYgKCB4aHJTdXBwb3J0ZWQgKSB7Ci0KLSAgICBqUXVlcnkuYWpheFRyYW5zcG9ydChm
dW5jdGlvbiggcyApIHsKLSAgICAvLyBDcm9zcyBkb21haW4gb25seSBhbGxvd2VkIGlmIHN1cHBv
cnRlZCB0aHJvdWdoIFhNTEh0dHBSZXF1ZXN0Ci0gICAgaWYgKCAhcy5jcm9zc0RvbWFpbiB8fCBq
UXVlcnkuc3VwcG9ydC5jb3JzICkgewotCi0gICAgdmFyIGNhbGxiYWNrOwotCi0gICAgcmV0dXJu
IHsKLSAgICBzZW5kOiBmdW5jdGlvbiggaGVhZGVycywgY29tcGxldGUgKSB7Ci0KLSAgICAvLyBH
ZXQgYSBuZXcgeGhyCi0gICAgdmFyIGhhbmRsZSwgaSwKLSAgICB4aHIgPSBzLnhocigpOwotCi0g
ICAgLy8gT3BlbiB0aGUgc29ja2V0Ci0gICAgLy8gUGFzc2luZyBudWxsIHVzZXJuYW1lLCBnZW5l
cmF0ZXMgYSBsb2dpbiBwb3B1cCBvbiBPcGVyYSAoIzI4NjUpCi0gICAgaWYgKCBzLnVzZXJuYW1l
ICkgewotICAgIHhoci5vcGVuKCBzLnR5cGUsIHMudXJsLCBzLmFzeW5jLCBzLnVzZXJuYW1lLCBz
LnBhc3N3b3JkICk7Ci0gICAgfSBlbHNlIHsKLSAgICB4aHIub3Blbiggcy50eXBlLCBzLnVybCwg
cy5hc3luYyApOwotICAgIH0KLQotICAgIC8vIEFwcGx5IGN1c3RvbSBmaWVsZHMgaWYgcHJvdmlk
ZWQKLSAgICBpZiAoIHMueGhyRmllbGRzICkgewotICAgIGZvciAoIGkgaW4gcy54aHJGaWVsZHMg
KSB7Ci0gICAgeGhyWyBpIF0gPSBzLnhockZpZWxkc1sgaSBdOwotICAgIH0KLSAgICB9Ci0KLSAg
ICAvLyBPdmVycmlkZSBtaW1lIHR5cGUgaWYgbmVlZGVkCi0gICAgaWYgKCBzLm1pbWVUeXBlICYm
IHhoci5vdmVycmlkZU1pbWVUeXBlICkgewotICAgIHhoci5vdmVycmlkZU1pbWVUeXBlKCBzLm1p
bWVUeXBlICk7Ci0gICAgfQotCi0gICAgLy8gWC1SZXF1ZXN0ZWQtV2l0aCBoZWFkZXIKLSAgICAv
LyBGb3IgY3Jvc3MtZG9tYWluIHJlcXVlc3RzLCBzZWVpbmcgYXMgY29uZGl0aW9ucyBmb3IgYSBw
cmVmbGlnaHQgYXJlCi0gICAgLy8gYWtpbiB0byBhIGppZ3NhdyBwdXp6bGUsIHdlIHNpbXBseSBu
ZXZlciBzZXQgaXQgdG8gYmUgc3VyZS4KLSAgICAvLyAoaXQgY2FuIGFsd2F5cyBiZSBzZXQgb24g
YSBwZXItcmVxdWVzdCBiYXNpcyBvciBldmVuIHVzaW5nIGFqYXhTZXR1cCkKLSAgICAvLyBGb3Ig
c2FtZS1kb21haW4gcmVxdWVzdHMsIHdvbid0IGNoYW5nZSBoZWFkZXIgaWYgYWxyZWFkeSBwcm92
aWRlZC4KLSAgICBpZiAoICFzLmNyb3NzRG9tYWluICYmICFoZWFkZXJzWyJYLVJlcXVlc3RlZC1X
aXRoIl0gKSB7Ci0gICAgaGVhZGVyc1siWC1SZXF1ZXN0ZWQtV2l0aCJdID0gIlhNTEh0dHBSZXF1
ZXN0IjsKLSAgICB9Ci0KLSAgICAvLyBOZWVkIGFuIGV4dHJhIHRyeS9jYXRjaCBmb3IgY3Jvc3Mg
ZG9tYWluIHJlcXVlc3RzIGluIEZpcmVmb3ggMwotICAgIHRyeSB7Ci0gICAgZm9yICggaSBpbiBo
ZWFkZXJzICkgewotICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBoZWFkZXJzWyBpIF0gKTsK
LSAgICB9Ci0gICAgfSBjYXRjaCggZXJyICkge30KLQotICAgIC8vIERvIHNlbmQgdGhlIHJlcXVl
c3QKLSAgICAvLyBUaGlzIG1heSByYWlzZSBhbiBleGNlcHRpb24gd2hpY2ggaXMgYWN0dWFsbHkK
LSAgICAvLyBoYW5kbGVkIGluIGpRdWVyeS5hamF4IChzbyBubyB0cnkvY2F0Y2ggaGVyZSkKLSAg
ICB4aHIuc2VuZCggKCBzLmhhc0NvbnRlbnQgJiYgcy5kYXRhICkgfHwgbnVsbCApOwotCi0gICAg
Ly8gTGlzdGVuZXIKLSAgICBjYWxsYmFjayA9IGZ1bmN0aW9uKCBfLCBpc0Fib3J0ICkgewotICAg
IHZhciBzdGF0dXMsIHJlc3BvbnNlSGVhZGVycywgc3RhdHVzVGV4dCwgcmVzcG9uc2VzOwotCi0g
ICAgLy8gRmlyZWZveCB0aHJvd3MgZXhjZXB0aW9ucyB3aGVuIGFjY2Vzc2luZyBwcm9wZXJ0aWVz
Ci0gICAgLy8gb2YgYW4geGhyIHdoZW4gYSBuZXR3b3JrIGVycm9yIG9jY3VycmVkCi0gICAgLy8g
aHR0cDovL2hlbHBmdWwua25vYnMtZGlhbHMuY29tL2luZGV4LnBocC9Db21wb25lbnRfcmV0dXJu
ZWRfZmFpbHVyZV9jb2RlOl8weDgwMDQwMTExXyhOU19FUlJPUl9OT1RfQVZBSUxBQkxFKQotICAg
IHRyeSB7Ci0KLSAgICAvLyBXYXMgbmV2ZXIgY2FsbGVkIGFuZCBpcyBhYm9ydGVkIG9yIGNvbXBs
ZXRlCi0gICAgaWYgKCBjYWxsYmFjayAmJiAoIGlzQWJvcnQgfHwgeGhyLnJlYWR5U3RhdGUgPT09
IDQgKSApIHsKLQotICAgIC8vIE9ubHkgY2FsbGVkIG9uY2UKLSAgICBjYWxsYmFjayA9IHVuZGVm
aW5lZDsKLQotICAgIC8vIERvIG5vdCBrZWVwIGFzIGFjdGl2ZSBhbnltb3JlCi0gICAgaWYgKCBo
YW5kbGUgKSB7Ci0gICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGpRdWVyeS5ub29wOwotICAg
IGlmICggeGhyT25VbmxvYWRBYm9ydCApIHsKLSAgICBkZWxldGUgeGhyQ2FsbGJhY2tzWyBoYW5k
bGUgXTsKLSAgICB9Ci0gICAgfQotCi0gICAgLy8gSWYgaXQncyBhbiBhYm9ydAotICAgIGlmICgg
aXNBYm9ydCApIHsKLSAgICAvLyBBYm9ydCBpdCBtYW51YWxseSBpZiBuZWVkZWQKLSAgICBpZiAo
IHhoci5yZWFkeVN0YXRlICE9PSA0ICkgewotICAgIHhoci5hYm9ydCgpOwotICAgIH0KLSAgICB9
IGVsc2UgewotICAgIHJlc3BvbnNlcyA9IHt9OwotICAgIHN0YXR1cyA9IHhoci5zdGF0dXM7Ci0g
ICAgcmVzcG9uc2VIZWFkZXJzID0geGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpOwotCi0gICAg
Ly8gV2hlbiByZXF1ZXN0aW5nIGJpbmFyeSBkYXRhLCBJRTYtOSB3aWxsIHRocm93IGFuIGV4Y2Vw
dGlvbgotICAgIC8vIG9uIGFueSBhdHRlbXB0IHRvIGFjY2VzcyByZXNwb25zZVRleHQgKCMxMTQy
NikKLSAgICBpZiAoIHR5cGVvZiB4aHIucmVzcG9uc2VUZXh0ID09PSAic3RyaW5nIiApIHsKLSAg
ICByZXNwb25zZXMudGV4dCA9IHhoci5yZXNwb25zZVRleHQ7Ci0gICAgfQotCi0gICAgLy8gRmly
ZWZveCB0aHJvd3MgYW4gZXhjZXB0aW9uIHdoZW4gYWNjZXNzaW5nCi0gICAgLy8gc3RhdHVzVGV4
dCBmb3IgZmF1bHR5IGNyb3NzLWRvbWFpbiByZXF1ZXN0cwotICAgIHRyeSB7Ci0gICAgc3RhdHVz
VGV4dCA9IHhoci5zdGF0dXNUZXh0OwotICAgIH0gY2F0Y2goIGUgKSB7Ci0gICAgLy8gV2Ugbm9y
bWFsaXplIHdpdGggV2Via2l0IGdpdmluZyBhbiBlbXB0eSBzdGF0dXNUZXh0Ci0gICAgc3RhdHVz
VGV4dCA9ICIiOwotICAgIH0KLQotICAgIC8vIEZpbHRlciBzdGF0dXMgZm9yIG5vbiBzdGFuZGFy
ZCBiZWhhdmlvcnMKLQotICAgIC8vIElmIHRoZSByZXF1ZXN0IGlzIGxvY2FsIGFuZCB3ZSBoYXZl
IGRhdGE6IGFzc3VtZSBhIHN1Y2Nlc3MKLSAgICAvLyAoc3VjY2VzcyB3aXRoIG5vIGRhdGEgd29u
J3QgZ2V0IG5vdGlmaWVkLCB0aGF0J3MgdGhlIGJlc3Qgd2UKLSAgICAvLyBjYW4gZG8gZ2l2ZW4g
Y3VycmVudCBpbXBsZW1lbnRhdGlvbnMpCi0gICAgaWYgKCAhc3RhdHVzICYmIHMuaXNMb2NhbCAm
JiAhcy5jcm9zc0RvbWFpbiApIHsKLSAgICBzdGF0dXMgPSByZXNwb25zZXMudGV4dCA/IDIwMCA6
IDQwNDsKLSAgICAvLyBJRSAtICMxNDUwOiBzb21ldGltZXMgcmV0dXJucyAxMjIzIHdoZW4gaXQg
c2hvdWxkIGJlIDIwNAotICAgIH0gZWxzZSBpZiAoIHN0YXR1cyA9PT0gMTIyMyApIHsKLSAgICBz
dGF0dXMgPSAyMDQ7Ci0gICAgfQotICAgIH0KLSAgICB9Ci0gICAgfSBjYXRjaCggZmlyZWZveEFj
Y2Vzc0V4Y2VwdGlvbiApIHsKLSAgICBpZiAoICFpc0Fib3J0ICkgewotICAgIGNvbXBsZXRlKCAt
MSwgZmlyZWZveEFjY2Vzc0V4Y2VwdGlvbiApOwotICAgIH0KLSAgICB9Ci0KLSAgICAvLyBDYWxs
IGNvbXBsZXRlIGlmIG5lZWRlZAotICAgIGlmICggcmVzcG9uc2VzICkgewotICAgIGNvbXBsZXRl
KCBzdGF0dXMsIHN0YXR1c1RleHQsIHJlc3BvbnNlcywgcmVzcG9uc2VIZWFkZXJzICk7Ci0gICAg
fQotICAgIH07Ci0KLSAgICBpZiAoICFzLmFzeW5jICkgewotICAgIC8vIGlmIHdlJ3JlIGluIHN5
bmMgbW9kZSB3ZSBmaXJlIHRoZSBjYWxsYmFjawotICAgIGNhbGxiYWNrKCk7Ci0gICAgfSBlbHNl
IGlmICggeGhyLnJlYWR5U3RhdGUgPT09IDQgKSB7Ci0gICAgLy8gKElFNiAmIElFNykgaWYgaXQn
cyBpbiBjYWNoZSBhbmQgaGFzIGJlZW4KLSAgICAvLyByZXRyaWV2ZWQgZGlyZWN0bHkgd2UgbmVl
ZCB0byBmaXJlIHRoZSBjYWxsYmFjawotICAgIHNldFRpbWVvdXQoIGNhbGxiYWNrICk7Ci0gICAg
fSBlbHNlIHsKLSAgICBoYW5kbGUgPSArK3hocklkOwotICAgIGlmICggeGhyT25VbmxvYWRBYm9y
dCApIHsKLSAgICAvLyBDcmVhdGUgdGhlIGFjdGl2ZSB4aHJzIGNhbGxiYWNrcyBsaXN0IGlmIG5l
ZWRlZAotICAgIC8vIGFuZCBhdHRhY2ggdGhlIHVubG9hZCBoYW5kbGVyCi0gICAgaWYgKCAheGhy
Q2FsbGJhY2tzICkgewotICAgIHhockNhbGxiYWNrcyA9IHt9OwotICAgIGpRdWVyeSggd2luZG93
ICkudW5sb2FkKCB4aHJPblVubG9hZEFib3J0ICk7Ci0gICAgfQotICAgIC8vIEFkZCB0byBsaXN0
IG9mIGFjdGl2ZSB4aHJzIGNhbGxiYWNrcwotICAgIHhockNhbGxiYWNrc1sgaGFuZGxlIF0gPSBj
YWxsYmFjazsKLSAgICB9Ci0gICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGNhbGxiYWNrOwot
ICAgIH0KLSAgICB9LAotCi0gICAgYWJvcnQ6IGZ1bmN0aW9uKCkgewotICAgIGlmICggY2FsbGJh
Y2sgKSB7Ci0gICAgY2FsbGJhY2soIHVuZGVmaW5lZCwgdHJ1ZSApOwotICAgIH0KLSAgICB9Ci0g
ICAgfTsKLSAgICB9Ci0gICAgfSk7Ci19Ci12YXIgZnhOb3csIHRpbWVySWQsCi0gICAgcmZ4dHlw
ZXMgPSAvXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sCi0gICAgcmZ4bnVtID0gbmV3IFJlZ0V4cCgg
Il4oPzooWystXSk9fCkoIiArIGNvcmVfcG51bSArICIpKFthLXolXSopJCIsICJpIiApLAotICAg
IHJydW4gPSAvcXVldWVIb29rcyQvLAotICAgIGFuaW1hdGlvblByZWZpbHRlcnMgPSBbIGRlZmF1
bHRQcmVmaWx0ZXIgXSwKLSAgICB0d2VlbmVycyA9IHsKLSAgICAiKiI6IFtmdW5jdGlvbiggcHJv
cCwgdmFsdWUgKSB7Ci0gICAgdmFyIGVuZCwgdW5pdCwKLSAgICB0d2VlbiA9IHRoaXMuY3JlYXRl
VHdlZW4oIHByb3AsIHZhbHVlICksCi0gICAgcGFydHMgPSByZnhudW0uZXhlYyggdmFsdWUgKSwK
LSAgICB0YXJnZXQgPSB0d2Vlbi5jdXIoKSwKLSAgICBzdGFydCA9ICt0YXJnZXQgfHwgMCwKLSAg
ICBzY2FsZSA9IDEsCi0gICAgbWF4SXRlcmF0aW9ucyA9IDIwOwotCi0gICAgaWYgKCBwYXJ0cyAp
IHsKLSAgICBlbmQgPSArcGFydHNbMl07Ci0gICAgdW5pdCA9IHBhcnRzWzNdIHx8ICggalF1ZXJ5
LmNzc051bWJlclsgcHJvcCBdID8gIiIgOiAicHgiICk7Ci0KLSAgICAvLyBXZSBuZWVkIHRvIGNv
bXB1dGUgc3RhcnRpbmcgdmFsdWUKLSAgICBpZiAoIHVuaXQgIT09ICJweCIgJiYgc3RhcnQgKSB7
Ci0gICAgLy8gSXRlcmF0aXZlbHkgYXBwcm94aW1hdGUgZnJvbSBhIG5vbnplcm8gc3RhcnRpbmcg
cG9pbnQKLSAgICAvLyBQcmVmZXIgdGhlIGN1cnJlbnQgcHJvcGVydHksIGJlY2F1c2UgdGhpcyBw
cm9jZXNzIHdpbGwgYmUgdHJpdmlhbCBpZiBpdCB1c2VzIHRoZSBzYW1lIHVuaXRzCi0gICAgLy8g
RmFsbGJhY2sgdG8gZW5kIG9yIGEgc2ltcGxlIGNvbnN0YW50Ci0gICAgc3RhcnQgPSBqUXVlcnku
Y3NzKCB0d2Vlbi5lbGVtLCBwcm9wLCB0cnVlICkgfHwgZW5kIHx8IDE7Ci0KLSAgICBkbyB7Ci0g
ICAgLy8gSWYgcHJldmlvdXMgaXRlcmF0aW9uIHplcm9lZCBvdXQsIGRvdWJsZSB1bnRpbCB3ZSBn
ZXQgKnNvbWV0aGluZyoKLSAgICAvLyBVc2UgYSBzdHJpbmcgZm9yIGRvdWJsaW5nIGZhY3RvciBz
byB3ZSBkb24ndCBhY2NpZGVudGFsbHkgc2VlIHNjYWxlIGFzIHVuY2hhbmdlZCBiZWxvdwotICAg
IHNjYWxlID0gc2NhbGUgfHwgIi41IjsKLQotICAgIC8vIEFkanVzdCBhbmQgYXBwbHkKLSAgICBz
dGFydCA9IHN0YXJ0IC8gc2NhbGU7Ci0gICAgalF1ZXJ5LnN0eWxlKCB0d2Vlbi5lbGVtLCBwcm9w
LCBzdGFydCArIHVuaXQgKTsKLQotICAgIC8vIFVwZGF0ZSBzY2FsZSwgdG9sZXJhdGluZyB6ZXJv
IG9yIE5hTiBmcm9tIHR3ZWVuLmN1cigpCi0gICAgLy8gQW5kIGJyZWFraW5nIHRoZSBsb29wIGlm
IHNjYWxlIGlzIHVuY2hhbmdlZCBvciBwZXJmZWN0LCBvciBpZiB3ZSd2ZSBqdXN0IGhhZCBlbm91
Z2gKLSAgICB9IHdoaWxlICggc2NhbGUgIT09IChzY2FsZSA9IHR3ZWVuLmN1cigpIC8gdGFyZ2V0
KSAmJiBzY2FsZSAhPT0gMSAmJiAtLW1heEl0ZXJhdGlvbnMgKTsKLSAgICB9Ci0KLSAgICB0d2Vl
bi51bml0ID0gdW5pdDsKLSAgICB0d2Vlbi5zdGFydCA9IHN0YXJ0OwotICAgIC8vIElmIGEgKz0v
LT0gdG9rZW4gd2FzIHByb3ZpZGVkLCB3ZSdyZSBkb2luZyBhIHJlbGF0aXZlIGFuaW1hdGlvbgot
ICAgIHR3ZWVuLmVuZCA9IHBhcnRzWzFdID8gc3RhcnQgKyAoIHBhcnRzWzFdICsgMSApICogZW5k
IDogZW5kOwotICAgIH0KLSAgICByZXR1cm4gdHdlZW47Ci0gICAgfV0KLSAgICB9OwotCi0vLyBB
bmltYXRpb25zIGNyZWF0ZWQgc3luY2hyb25vdXNseSB3aWxsIHJ1biBzeW5jaHJvbm91c2x5Ci1m
dW5jdGlvbiBjcmVhdGVGeE5vdygpIHsKLSAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewotICAg
IGZ4Tm93ID0gdW5kZWZpbmVkOwotICAgIH0pOwotICAgIHJldHVybiAoIGZ4Tm93ID0galF1ZXJ5
Lm5vdygpICk7Ci19Ci0KLWZ1bmN0aW9uIGNyZWF0ZVR3ZWVucyggYW5pbWF0aW9uLCBwcm9wcyAp
IHsKLSAgICBqUXVlcnkuZWFjaCggcHJvcHMsIGZ1bmN0aW9uKCBwcm9wLCB2YWx1ZSApIHsKLSAg
ICB2YXIgY29sbGVjdGlvbiA9ICggdHdlZW5lcnNbIHByb3AgXSB8fCBbXSApLmNvbmNhdCggdHdl
ZW5lcnNbICIqIiBdICksCi0gICAgaW5kZXggPSAwLAotICAgIGxlbmd0aCA9IGNvbGxlY3Rpb24u
bGVuZ3RoOwotICAgIGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7Ci0gICAgaWYg
KCBjb2xsZWN0aW9uWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlvbiwgcHJvcCwgdmFsdWUgKSApIHsK
LQotICAgIC8vIHdlJ3JlIGRvbmUgd2l0aCB0aGlzIHByb3BlcnR5Ci0gICAgcmV0dXJuOwotICAg
IH0KLSAgICB9Ci0gICAgfSk7Ci19Ci0KLWZ1bmN0aW9uIEFuaW1hdGlvbiggZWxlbSwgcHJvcGVy
dGllcywgb3B0aW9ucyApIHsKLSAgICB2YXIgcmVzdWx0LAotICAgIHN0b3BwZWQsCi0gICAgaW5k
ZXggPSAwLAotICAgIGxlbmd0aCA9IGFuaW1hdGlvblByZWZpbHRlcnMubGVuZ3RoLAotICAgIGRl
ZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCkuYWx3YXlzKCBmdW5jdGlvbigpIHsKLSAgICAvLyBk
b24ndCBtYXRjaCBlbGVtIGluIHRoZSA6YW5pbWF0ZWQgc2VsZWN0b3IKLSAgICBkZWxldGUgdGlj
ay5lbGVtOwotICAgIH0pLAotICAgIHRpY2sgPSBmdW5jdGlvbigpIHsKLSAgICBpZiAoIHN0b3Bw
ZWQgKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICB2YXIgY3VycmVudFRpbWUgPSBm
eE5vdyB8fCBjcmVhdGVGeE5vdygpLAotICAgIHJlbWFpbmluZyA9IE1hdGgubWF4KCAwLCBhbmlt
YXRpb24uc3RhcnRUaW1lICsgYW5pbWF0aW9uLmR1cmF0aW9uIC0gY3VycmVudFRpbWUgKSwKLSAg
ICAvLyBhcmNoYWljIGNyYXNoIGJ1ZyB3b24ndCBhbGxvdyB1cyB0byB1c2UgMSAtICggMC41IHx8
IDAgKSAoIzEyNDk3KQotICAgIHRlbXAgPSByZW1haW5pbmcgLyBhbmltYXRpb24uZHVyYXRpb24g
fHwgMCwKLSAgICBwZXJjZW50ID0gMSAtIHRlbXAsCi0gICAgaW5kZXggPSAwLAotICAgIGxlbmd0
aCA9IGFuaW1hdGlvbi50d2VlbnMubGVuZ3RoOwotCi0gICAgZm9yICggOyBpbmRleCA8IGxlbmd0
aCA7IGluZGV4KysgKSB7Ci0gICAgYW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5ydW4oIHBlcmNl
bnQgKTsKLSAgICB9Ci0KLSAgICBkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlv
biwgcGVyY2VudCwgcmVtYWluaW5nIF0pOwotCi0gICAgaWYgKCBwZXJjZW50IDwgMSAmJiBsZW5n
dGggKSB7Ci0gICAgcmV0dXJuIHJlbWFpbmluZzsKLSAgICB9IGVsc2UgewotICAgIGRlZmVycmVk
LnJlc29sdmVXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiBdICk7Ci0gICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICB9LAotICAgIGFuaW1hdGlvbiA9IGRlZmVycmVkLnByb21pc2UoewotICAgIGVs
ZW06IGVsZW0sCi0gICAgcHJvcHM6IGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wZXJ0aWVzICksCi0g
ICAgb3B0czogalF1ZXJ5LmV4dGVuZCggdHJ1ZSwgeyBzcGVjaWFsRWFzaW5nOiB7fSB9LCBvcHRp
b25zICksCi0gICAgb3JpZ2luYWxQcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzLAotICAgIG9yaWdpbmFs
T3B0aW9uczogb3B0aW9ucywKLSAgICBzdGFydFRpbWU6IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCks
Ci0gICAgZHVyYXRpb246IG9wdGlvbnMuZHVyYXRpb24sCi0gICAgdHdlZW5zOiBbXSwKLSAgICBj
cmVhdGVUd2VlbjogZnVuY3Rpb24oIHByb3AsIGVuZCApIHsKLSAgICB2YXIgdHdlZW4gPSBqUXVl
cnkuVHdlZW4oIGVsZW0sIGFuaW1hdGlvbi5vcHRzLCBwcm9wLCBlbmQsCi0gICAgYW5pbWF0aW9u
Lm9wdHMuc3BlY2lhbEVhc2luZ1sgcHJvcCBdIHx8IGFuaW1hdGlvbi5vcHRzLmVhc2luZyApOwot
ICAgIGFuaW1hdGlvbi50d2VlbnMucHVzaCggdHdlZW4gKTsKLSAgICByZXR1cm4gdHdlZW47Ci0g
ICAgfSwKLSAgICBzdG9wOiBmdW5jdGlvbiggZ290b0VuZCApIHsKLSAgICB2YXIgaW5kZXggPSAw
LAotICAgIC8vIGlmIHdlIGFyZSBnb2luZyB0byB0aGUgZW5kLCB3ZSB3YW50IHRvIHJ1biBhbGwg
dGhlIHR3ZWVucwotICAgIC8vIG90aGVyd2lzZSB3ZSBza2lwIHRoaXMgcGFydAotICAgIGxlbmd0
aCA9IGdvdG9FbmQgPyBhbmltYXRpb24udHdlZW5zLmxlbmd0aCA6IDA7Ci0gICAgaWYgKCBzdG9w
cGVkICkgewotICAgIHJldHVybiB0aGlzOwotICAgIH0KLSAgICBzdG9wcGVkID0gdHJ1ZTsKLSAg
ICBmb3IgKCA7IGluZGV4IDwgbGVuZ3RoIDsgaW5kZXgrKyApIHsKLSAgICBhbmltYXRpb24udHdl
ZW5zWyBpbmRleCBdLnJ1biggMSApOwotICAgIH0KLQotICAgIC8vIHJlc29sdmUgd2hlbiB3ZSBw
bGF5ZWQgdGhlIGxhc3QgZnJhbWUKLSAgICAvLyBvdGhlcndpc2UsIHJlamVjdAotICAgIGlmICgg
Z290b0VuZCApIHsKLSAgICBkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24s
IGdvdG9FbmQgXSApOwotICAgIH0gZWxzZSB7Ci0gICAgZGVmZXJyZWQucmVqZWN0V2l0aCggZWxl
bSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApOwotICAgIH0KLSAgICByZXR1cm4gdGhpczsKLSAg
ICB9Ci0gICAgfSksCi0gICAgcHJvcHMgPSBhbmltYXRpb24ucHJvcHM7Ci0KLSAgICBwcm9wRmls
dGVyKCBwcm9wcywgYW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZyApOwotCi0gICAgZm9yICgg
OyBpbmRleCA8IGxlbmd0aCA7IGluZGV4KysgKSB7Ci0gICAgcmVzdWx0ID0gYW5pbWF0aW9uUHJl
ZmlsdGVyc1sgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIGVsZW0sIHByb3BzLCBhbmltYXRpb24u
b3B0cyApOwotICAgIGlmICggcmVzdWx0ICkgewotICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQot
ICAgIH0KLQotICAgIGNyZWF0ZVR3ZWVucyggYW5pbWF0aW9uLCBwcm9wcyApOwotCi0gICAgaWYg
KCBqUXVlcnkuaXNGdW5jdGlvbiggYW5pbWF0aW9uLm9wdHMuc3RhcnQgKSApIHsKLSAgICBhbmlt
YXRpb24ub3B0cy5zdGFydC5jYWxsKCBlbGVtLCBhbmltYXRpb24gKTsKLSAgICB9Ci0KLSAgICBq
UXVlcnkuZngudGltZXIoCi0gICAgalF1ZXJ5LmV4dGVuZCggdGljaywgewotICAgIGVsZW06IGVs
ZW0sCi0gICAgYW5pbTogYW5pbWF0aW9uLAotICAgIHF1ZXVlOiBhbmltYXRpb24ub3B0cy5xdWV1
ZQotICAgIH0pCi0gICAgKTsKLQotICAgIC8vIGF0dGFjaCBjYWxsYmFja3MgZnJvbSBvcHRpb25z
Ci0gICAgcmV0dXJuIGFuaW1hdGlvbi5wcm9ncmVzcyggYW5pbWF0aW9uLm9wdHMucHJvZ3Jlc3Mg
KQotICAgIC5kb25lKCBhbmltYXRpb24ub3B0cy5kb25lLCBhbmltYXRpb24ub3B0cy5jb21wbGV0
ZSApCi0gICAgLmZhaWwoIGFuaW1hdGlvbi5vcHRzLmZhaWwgKQotICAgIC5hbHdheXMoIGFuaW1h
dGlvbi5vcHRzLmFsd2F5cyApOwotfQotCi1mdW5jdGlvbiBwcm9wRmlsdGVyKCBwcm9wcywgc3Bl
Y2lhbEVhc2luZyApIHsKLSAgICB2YXIgdmFsdWUsIG5hbWUsIGluZGV4LCBlYXNpbmcsIGhvb2tz
OwotCi0gICAgLy8gY2FtZWxDYXNlLCBzcGVjaWFsRWFzaW5nIGFuZCBleHBhbmQgY3NzSG9vayBw
YXNzCi0gICAgZm9yICggaW5kZXggaW4gcHJvcHMgKSB7Ci0gICAgbmFtZSA9IGpRdWVyeS5jYW1l
bENhc2UoIGluZGV4ICk7Ci0gICAgZWFzaW5nID0gc3BlY2lhbEVhc2luZ1sgbmFtZSBdOwotICAg
IHZhbHVlID0gcHJvcHNbIGluZGV4IF07Ci0gICAgaWYgKCBqUXVlcnkuaXNBcnJheSggdmFsdWUg
KSApIHsKLSAgICBlYXNpbmcgPSB2YWx1ZVsgMSBdOwotICAgIHZhbHVlID0gcHJvcHNbIGluZGV4
IF0gPSB2YWx1ZVsgMCBdOwotICAgIH0KLQotICAgIGlmICggaW5kZXggIT09IG5hbWUgKSB7Ci0g
ICAgcHJvcHNbIG5hbWUgXSA9IHZhbHVlOwotICAgIGRlbGV0ZSBwcm9wc1sgaW5kZXggXTsKLSAg
ICB9Ci0KLSAgICBob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdOwotICAgIGlmICggaG9v
a3MgJiYgImV4cGFuZCIgaW4gaG9va3MgKSB7Ci0gICAgdmFsdWUgPSBob29rcy5leHBhbmQoIHZh
bHVlICk7Ci0gICAgZGVsZXRlIHByb3BzWyBuYW1lIF07Ci0KLSAgICAvLyBub3QgcXVpdGUgJC5l
eHRlbmQsIHRoaXMgd29udCBvdmVyd3JpdGUga2V5cyBhbHJlYWR5IHByZXNlbnQuCi0gICAgLy8g
YWxzbyAtIHJldXNpbmcgJ2luZGV4JyBmcm9tIGFib3ZlIGJlY2F1c2Ugd2UgaGF2ZSB0aGUgY29y
cmVjdCAibmFtZSIKLSAgICBmb3IgKCBpbmRleCBpbiB2YWx1ZSApIHsKLSAgICBpZiAoICEoIGlu
ZGV4IGluIHByb3BzICkgKSB7Ci0gICAgcHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgaW5kZXggXTsK
LSAgICBzcGVjaWFsRWFzaW5nWyBpbmRleCBdID0gZWFzaW5nOwotICAgIH0KLSAgICB9Ci0gICAg
fSBlbHNlIHsKLSAgICBzcGVjaWFsRWFzaW5nWyBuYW1lIF0gPSBlYXNpbmc7Ci0gICAgfQotICAg
IH0KLX0KLQotalF1ZXJ5LkFuaW1hdGlvbiA9IGpRdWVyeS5leHRlbmQoIEFuaW1hdGlvbiwgewot
Ci0gICAgdHdlZW5lcjogZnVuY3Rpb24oIHByb3BzLCBjYWxsYmFjayApIHsKLSAgICBpZiAoIGpR
dWVyeS5pc0Z1bmN0aW9uKCBwcm9wcyApICkgewotICAgIGNhbGxiYWNrID0gcHJvcHM7Ci0gICAg
cHJvcHMgPSBbICIqIiBdOwotICAgIH0gZWxzZSB7Ci0gICAgcHJvcHMgPSBwcm9wcy5zcGxpdCgi
ICIpOwotICAgIH0KLQotICAgIHZhciBwcm9wLAotICAgIGluZGV4ID0gMCwKLSAgICBsZW5ndGgg
PSBwcm9wcy5sZW5ndGg7Ci0KLSAgICBmb3IgKCA7IGluZGV4IDwgbGVuZ3RoIDsgaW5kZXgrKyAp
IHsKLSAgICBwcm9wID0gcHJvcHNbIGluZGV4IF07Ci0gICAgdHdlZW5lcnNbIHByb3AgXSA9IHR3
ZWVuZXJzWyBwcm9wIF0gfHwgW107Ci0gICAgdHdlZW5lcnNbIHByb3AgXS51bnNoaWZ0KCBjYWxs
YmFjayApOwotICAgIH0KLSAgICB9LAotCi0gICAgcHJlZmlsdGVyOiBmdW5jdGlvbiggY2FsbGJh
Y2ssIHByZXBlbmQgKSB7Ci0gICAgaWYgKCBwcmVwZW5kICkgewotICAgIGFuaW1hdGlvblByZWZp
bHRlcnMudW5zaGlmdCggY2FsbGJhY2sgKTsKLSAgICB9IGVsc2UgewotICAgIGFuaW1hdGlvblBy
ZWZpbHRlcnMucHVzaCggY2FsbGJhY2sgKTsKLSAgICB9Ci0gICAgfQotfSk7Ci0KLWZ1bmN0aW9u
IGRlZmF1bHRQcmVmaWx0ZXIoIGVsZW0sIHByb3BzLCBvcHRzICkgewotICAgIC8qanNoaW50IHZh
bGlkdGhpczp0cnVlICovCi0gICAgdmFyIHByb3AsIGluZGV4LCBsZW5ndGgsCi0gICAgdmFsdWUs
IGRhdGFTaG93LCB0b2dnbGUsCi0gICAgdHdlZW4sIGhvb2tzLCBvbGRmaXJlLAotICAgIGFuaW0g
PSB0aGlzLAotICAgIHN0eWxlID0gZWxlbS5zdHlsZSwKLSAgICBvcmlnID0ge30sCi0gICAgaGFu
ZGxlZCA9IFtdLAotICAgIGhpZGRlbiA9IGVsZW0ubm9kZVR5cGUgJiYgaXNIaWRkZW4oIGVsZW0g
KTsKLQotICAgIC8vIGhhbmRsZSBxdWV1ZTogZmFsc2UgcHJvbWlzZXMKLSAgICBpZiAoICFvcHRz
LnF1ZXVlICkgewotICAgIGhvb2tzID0galF1ZXJ5Ll9xdWV1ZUhvb2tzKCBlbGVtLCAiZngiICk7
Ci0gICAgaWYgKCBob29rcy51bnF1ZXVlZCA9PSBudWxsICkgewotICAgIGhvb2tzLnVucXVldWVk
ID0gMDsKLSAgICBvbGRmaXJlID0gaG9va3MuZW1wdHkuZmlyZTsKLSAgICBob29rcy5lbXB0eS5m
aXJlID0gZnVuY3Rpb24oKSB7Ci0gICAgaWYgKCAhaG9va3MudW5xdWV1ZWQgKSB7Ci0gICAgb2xk
ZmlyZSgpOwotICAgIH0KLSAgICB9OwotICAgIH0KLSAgICBob29rcy51bnF1ZXVlZCsrOwotCi0g
ICAgYW5pbS5hbHdheXMoZnVuY3Rpb24oKSB7Ci0gICAgLy8gZG9pbmcgdGhpcyBtYWtlcyBzdXJl
IHRoYXQgdGhlIGNvbXBsZXRlIGhhbmRsZXIgd2lsbCBiZSBjYWxsZWQKLSAgICAvLyBiZWZvcmUg
dGhpcyBjb21wbGV0ZXMKLSAgICBhbmltLmFsd2F5cyhmdW5jdGlvbigpIHsKLSAgICBob29rcy51
bnF1ZXVlZC0tOwotICAgIGlmICggIWpRdWVyeS5xdWV1ZSggZWxlbSwgImZ4IiApLmxlbmd0aCAp
IHsKLSAgICBob29rcy5lbXB0eS5maXJlKCk7Ci0gICAgfQotICAgIH0pOwotICAgIH0pOwotICAg
IH0KLQotICAgIC8vIGhlaWdodC93aWR0aCBvdmVyZmxvdyBwYXNzCi0gICAgaWYgKCBlbGVtLm5v
ZGVUeXBlID09PSAxICYmICggImhlaWdodCIgaW4gcHJvcHMgfHwgIndpZHRoIiBpbiBwcm9wcyAp
ICkgewotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IG5vdGhpbmcgc25lYWtzIG91dAotICAgIC8vIFJl
Y29yZCBhbGwgMyBvdmVyZmxvdyBhdHRyaWJ1dGVzIGJlY2F1c2UgSUUgZG9lcyBub3QKLSAgICAv
LyBjaGFuZ2UgdGhlIG92ZXJmbG93IGF0dHJpYnV0ZSB3aGVuIG92ZXJmbG93WCBhbmQKLSAgICAv
LyBvdmVyZmxvd1kgYXJlIHNldCB0byB0aGUgc2FtZSB2YWx1ZQotICAgIG9wdHMub3ZlcmZsb3cg
PSBbIHN0eWxlLm92ZXJmbG93LCBzdHlsZS5vdmVyZmxvd1gsIHN0eWxlLm92ZXJmbG93WSBdOwot
Ci0gICAgLy8gU2V0IGRpc3BsYXkgcHJvcGVydHkgdG8gaW5saW5lLWJsb2NrIGZvciBoZWlnaHQv
d2lkdGgKLSAgICAvLyBhbmltYXRpb25zIG9uIGlubGluZSBlbGVtZW50cyB0aGF0IGFyZSBoYXZp
bmcgd2lkdGgvaGVpZ2h0IGFuaW1hdGVkCi0gICAgaWYgKCBqUXVlcnkuY3NzKCBlbGVtLCAiZGlz
cGxheSIgKSA9PT0gImlubGluZSIgJiYKLSAgICBqUXVlcnkuY3NzKCBlbGVtLCAiZmxvYXQiICkg
PT09ICJub25lIiApIHsKLQotICAgIC8vIGlubGluZS1sZXZlbCBlbGVtZW50cyBhY2NlcHQgaW5s
aW5lLWJsb2NrOwotICAgIC8vIGJsb2NrLWxldmVsIGVsZW1lbnRzIG5lZWQgdG8gYmUgaW5saW5l
IHdpdGggbGF5b3V0Ci0gICAgaWYgKCAhalF1ZXJ5LnN1cHBvcnQuaW5saW5lQmxvY2tOZWVkc0xh
eW91dCB8fCBjc3NfZGVmYXVsdERpc3BsYXkoIGVsZW0ubm9kZU5hbWUgKSA9PT0gImlubGluZSIg
KSB7Ci0gICAgc3R5bGUuZGlzcGxheSA9ICJpbmxpbmUtYmxvY2siOwotCi0gICAgfSBlbHNlIHsK
LSAgICBzdHlsZS56b29tID0gMTsKLSAgICB9Ci0gICAgfQotICAgIH0KLQotICAgIGlmICggb3B0
cy5vdmVyZmxvdyApIHsKLSAgICBzdHlsZS5vdmVyZmxvdyA9ICJoaWRkZW4iOwotICAgIGlmICgg
IWpRdWVyeS5zdXBwb3J0LnNocmlua1dyYXBCbG9ja3MgKSB7Ci0gICAgYW5pbS5hbHdheXMoZnVu
Y3Rpb24oKSB7Ci0gICAgc3R5bGUub3ZlcmZsb3cgPSBvcHRzLm92ZXJmbG93WyAwIF07Ci0gICAg
c3R5bGUub3ZlcmZsb3dYID0gb3B0cy5vdmVyZmxvd1sgMSBdOwotICAgIHN0eWxlLm92ZXJmbG93
WSA9IG9wdHMub3ZlcmZsb3dbIDIgXTsKLSAgICB9KTsKLSAgICB9Ci0gICAgfQotCi0KLSAgICAv
LyBzaG93L2hpZGUgcGFzcwotICAgIGZvciAoIGluZGV4IGluIHByb3BzICkgewotICAgIHZhbHVl
ID0gcHJvcHNbIGluZGV4IF07Ci0gICAgaWYgKCByZnh0eXBlcy5leGVjKCB2YWx1ZSApICkgewot
ICAgIGRlbGV0ZSBwcm9wc1sgaW5kZXggXTsKLSAgICB0b2dnbGUgPSB0b2dnbGUgfHwgdmFsdWUg
PT09ICJ0b2dnbGUiOwotICAgIGlmICggdmFsdWUgPT09ICggaGlkZGVuID8gImhpZGUiIDogInNo
b3ciICkgKSB7Ci0gICAgY29udGludWU7Ci0gICAgfQotICAgIGhhbmRsZWQucHVzaCggaW5kZXgg
KTsKLSAgICB9Ci0gICAgfQotCi0gICAgbGVuZ3RoID0gaGFuZGxlZC5sZW5ndGg7Ci0gICAgaWYg
KCBsZW5ndGggKSB7Ci0gICAgZGF0YVNob3cgPSBqUXVlcnkuX2RhdGEoIGVsZW0sICJmeHNob3ci
ICkgfHwgalF1ZXJ5Ll9kYXRhKCBlbGVtLCAiZnhzaG93Iiwge30gKTsKLSAgICBpZiAoICJoaWRk
ZW4iIGluIGRhdGFTaG93ICkgewotICAgIGhpZGRlbiA9IGRhdGFTaG93LmhpZGRlbjsKLSAgICB9
Ci0KLSAgICAvLyBzdG9yZSBzdGF0ZSBpZiBpdHMgdG9nZ2xlIC0gZW5hYmxlcyAuc3RvcCgpLnRv
Z2dsZSgpIHRvICJyZXZlcnNlIgotICAgIGlmICggdG9nZ2xlICkgewotICAgIGRhdGFTaG93Lmhp
ZGRlbiA9ICFoaWRkZW47Ci0gICAgfQotICAgIGlmICggaGlkZGVuICkgewotICAgIGpRdWVyeSgg
ZWxlbSApLnNob3coKTsKLSAgICB9IGVsc2UgewotICAgIGFuaW0uZG9uZShmdW5jdGlvbigpIHsK
LSAgICBqUXVlcnkoIGVsZW0gKS5oaWRlKCk7Ci0gICAgfSk7Ci0gICAgfQotICAgIGFuaW0uZG9u
ZShmdW5jdGlvbigpIHsKLSAgICB2YXIgcHJvcDsKLSAgICBqUXVlcnkuX3JlbW92ZURhdGEoIGVs
ZW0sICJmeHNob3ciICk7Ci0gICAgZm9yICggcHJvcCBpbiBvcmlnICkgewotICAgIGpRdWVyeS5z
dHlsZSggZWxlbSwgcHJvcCwgb3JpZ1sgcHJvcCBdICk7Ci0gICAgfQotICAgIH0pOwotICAgIGZv
ciAoIGluZGV4ID0gMCA7IGluZGV4IDwgbGVuZ3RoIDsgaW5kZXgrKyApIHsKLSAgICBwcm9wID0g
aGFuZGxlZFsgaW5kZXggXTsKLSAgICB0d2VlbiA9IGFuaW0uY3JlYXRlVHdlZW4oIHByb3AsIGhp
ZGRlbiA/IGRhdGFTaG93WyBwcm9wIF0gOiAwICk7Ci0gICAgb3JpZ1sgcHJvcCBdID0gZGF0YVNo
b3dbIHByb3AgXSB8fCBqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AgKTsKLQotICAgIGlmICggISgg
cHJvcCBpbiBkYXRhU2hvdyApICkgewotICAgIGRhdGFTaG93WyBwcm9wIF0gPSB0d2Vlbi5zdGFy
dDsKLSAgICBpZiAoIGhpZGRlbiApIHsKLSAgICB0d2Vlbi5lbmQgPSB0d2Vlbi5zdGFydDsKLSAg
ICB0d2Vlbi5zdGFydCA9IHByb3AgPT09ICJ3aWR0aCIgfHwgcHJvcCA9PT0gImhlaWdodCIgPyAx
IDogMDsKLSAgICB9Ci0gICAgfQotICAgIH0KLSAgICB9Ci19Ci0KLWZ1bmN0aW9uIFR3ZWVuKCBl
bGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApIHsKLSAgICByZXR1cm4gbmV3IFR3ZWVu
LnByb3RvdHlwZS5pbml0KCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApOwotfQot
alF1ZXJ5LlR3ZWVuID0gVHdlZW47Ci0KLVR3ZWVuLnByb3RvdHlwZSA9IHsKLSAgICBjb25zdHJ1
Y3RvcjogVHdlZW4sCi0gICAgaW5pdDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVu
ZCwgZWFzaW5nLCB1bml0ICkgewotICAgIHRoaXMuZWxlbSA9IGVsZW07Ci0gICAgdGhpcy5wcm9w
ID0gcHJvcDsKLSAgICB0aGlzLmVhc2luZyA9IGVhc2luZyB8fCAic3dpbmciOwotICAgIHRoaXMu
b3B0aW9ucyA9IG9wdGlvbnM7Ci0gICAgdGhpcy5zdGFydCA9IHRoaXMubm93ID0gdGhpcy5jdXIo
KTsKLSAgICB0aGlzLmVuZCA9IGVuZDsKLSAgICB0aGlzLnVuaXQgPSB1bml0IHx8ICggalF1ZXJ5
LmNzc051bWJlclsgcHJvcCBdID8gIiIgOiAicHgiICk7Ci0gICAgfSwKLSAgICBjdXI6IGZ1bmN0
aW9uKCkgewotICAgIHZhciBob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07Ci0K
LSAgICByZXR1cm4gaG9va3MgJiYgaG9va3MuZ2V0ID8KLSAgICBob29rcy5nZXQoIHRoaXMgKSA6
Ci0gICAgVHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LmdldCggdGhpcyApOwotICAgIH0sCi0gICAg
cnVuOiBmdW5jdGlvbiggcGVyY2VudCApIHsKLSAgICB2YXIgZWFzZWQsCi0gICAgaG9va3MgPSBU
d2Vlbi5wcm9wSG9va3NbIHRoaXMucHJvcCBdOwotCi0gICAgaWYgKCB0aGlzLm9wdGlvbnMuZHVy
YXRpb24gKSB7Ci0gICAgdGhpcy5wb3MgPSBlYXNlZCA9IGpRdWVyeS5lYXNpbmdbIHRoaXMuZWFz
aW5nIF0oCi0gICAgcGVyY2VudCwgdGhpcy5vcHRpb25zLmR1cmF0aW9uICogcGVyY2VudCwgMCwg
MSwgdGhpcy5vcHRpb25zLmR1cmF0aW9uCi0gICAgKTsKLSAgICB9IGVsc2UgewotICAgIHRoaXMu
cG9zID0gZWFzZWQgPSBwZXJjZW50OwotICAgIH0KLSAgICB0aGlzLm5vdyA9ICggdGhpcy5lbmQg
LSB0aGlzLnN0YXJ0ICkgKiBlYXNlZCArIHRoaXMuc3RhcnQ7Ci0KLSAgICBpZiAoIHRoaXMub3B0
aW9ucy5zdGVwICkgewotICAgIHRoaXMub3B0aW9ucy5zdGVwLmNhbGwoIHRoaXMuZWxlbSwgdGhp
cy5ub3csIHRoaXMgKTsKLSAgICB9Ci0KLSAgICBpZiAoIGhvb2tzICYmIGhvb2tzLnNldCApIHsK
LSAgICBob29rcy5zZXQoIHRoaXMgKTsKLSAgICB9IGVsc2UgewotICAgIFR3ZWVuLnByb3BIb29r
cy5fZGVmYXVsdC5zZXQoIHRoaXMgKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRoaXM7Ci0gICAgfQot
fTsKLQotVHdlZW4ucHJvdG90eXBlLmluaXQucHJvdG90eXBlID0gVHdlZW4ucHJvdG90eXBlOwot
Ci1Ud2Vlbi5wcm9wSG9va3MgPSB7Ci0gICAgX2RlZmF1bHQ6IHsKLSAgICBnZXQ6IGZ1bmN0aW9u
KCB0d2VlbiApIHsKLSAgICB2YXIgcmVzdWx0OwotCi0gICAgaWYgKCB0d2Vlbi5lbGVtWyB0d2Vl
bi5wcm9wIF0gIT0gbnVsbCAmJgotICAgICghdHdlZW4uZWxlbS5zdHlsZSB8fCB0d2Vlbi5lbGVt
LnN0eWxlWyB0d2Vlbi5wcm9wIF0gPT0gbnVsbCkgKSB7Ci0gICAgcmV0dXJuIHR3ZWVuLmVsZW1b
IHR3ZWVuLnByb3AgXTsKLSAgICB9Ci0KLSAgICAvLyBwYXNzaW5nIGFuIGVtcHR5IHN0cmluZyBh
cyBhIDNyZCBwYXJhbWV0ZXIgdG8gLmNzcyB3aWxsIGF1dG9tYXRpY2FsbHkKLSAgICAvLyBhdHRl
bXB0IGEgcGFyc2VGbG9hdCBhbmQgZmFsbGJhY2sgdG8gYSBzdHJpbmcgaWYgdGhlIHBhcnNlIGZh
aWxzCi0gICAgLy8gc28sIHNpbXBsZSB2YWx1ZXMgc3VjaCBhcyAiMTBweCIgYXJlIHBhcnNlZCB0
byBGbG9hdC4KLSAgICAvLyBjb21wbGV4IHZhbHVlcyBzdWNoIGFzICJyb3RhdGUoMXJhZCkiIGFy
ZSByZXR1cm5lZCBhcyBpcy4KLSAgICByZXN1bHQgPSBqUXVlcnkuY3NzKCB0d2Vlbi5lbGVtLCB0
d2Vlbi5wcm9wLCAiIiApOwotICAgIC8vIEVtcHR5IHN0cmluZ3MsIG51bGwsIHVuZGVmaW5lZCBh
bmQgImF1dG8iIGFyZSBjb252ZXJ0ZWQgdG8gMC4KLSAgICByZXR1cm4gIXJlc3VsdCB8fCByZXN1
bHQgPT09ICJhdXRvIiA/IDAgOiByZXN1bHQ7Ci0gICAgfSwKLSAgICBzZXQ6IGZ1bmN0aW9uKCB0
d2VlbiApIHsKLSAgICAvLyB1c2Ugc3RlcCBob29rIGZvciBiYWNrIGNvbXBhdCAtIHVzZSBjc3NI
b29rIGlmIGl0cyB0aGVyZSAtIHVzZSAuc3R5bGUgaWYgaXRzCi0gICAgLy8gYXZhaWxhYmxlIGFu
ZCB1c2UgcGxhaW4gcHJvcGVydGllcyB3aGVyZSBhdmFpbGFibGUKLSAgICBpZiAoIGpRdWVyeS5m
eC5zdGVwWyB0d2Vlbi5wcm9wIF0gKSB7Ci0gICAgalF1ZXJ5LmZ4LnN0ZXBbIHR3ZWVuLnByb3Ag
XSggdHdlZW4gKTsKLSAgICB9IGVsc2UgaWYgKCB0d2Vlbi5lbGVtLnN0eWxlICYmICggdHdlZW4u
ZWxlbS5zdHlsZVsgalF1ZXJ5LmNzc1Byb3BzWyB0d2Vlbi5wcm9wIF0gXSAhPSBudWxsIHx8IGpR
dWVyeS5jc3NIb29rc1sgdHdlZW4ucHJvcCBdICkgKSB7Ci0gICAgalF1ZXJ5LnN0eWxlKCB0d2Vl
bi5lbGVtLCB0d2Vlbi5wcm9wLCB0d2Vlbi5ub3cgKyB0d2Vlbi51bml0ICk7Ci0gICAgfSBlbHNl
IHsKLSAgICB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gPSB0d2Vlbi5ub3c7Ci0gICAgfQotICAg
IH0KLSAgICB9Ci19OwotCi0vLyBSZW1vdmUgaW4gMi4wIC0gdGhpcyBzdXBwb3J0cyBJRTgncyBw
YW5pYyBiYXNlZCBhcHByb2FjaAotLy8gdG8gc2V0dGluZyB0aGluZ3Mgb24gZGlzY29ubmVjdGVk
IG5vZGVzCi0KLVR3ZWVuLnByb3BIb29rcy5zY3JvbGxUb3AgPSBUd2Vlbi5wcm9wSG9va3Muc2Ny
b2xsTGVmdCA9IHsKLSAgICBzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHsKLSAgICBpZiAoIHR3ZWVu
LmVsZW0ubm9kZVR5cGUgJiYgdHdlZW4uZWxlbS5wYXJlbnROb2RlICkgewotICAgIHR3ZWVuLmVs
ZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdzsKLSAgICB9Ci0gICAgfQotfTsKLQotalF1ZXJ5
LmVhY2goWyAidG9nZ2xlIiwgInNob3ciLCAiaGlkZSIgXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7
Ci0gICAgdmFyIGNzc0ZuID0galF1ZXJ5LmZuWyBuYW1lIF07Ci0gICAgalF1ZXJ5LmZuWyBuYW1l
IF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7Ci0gICAgcmV0dXJuIHNw
ZWVkID09IG51bGwgfHwgdHlwZW9mIHNwZWVkID09PSAiYm9vbGVhbiIgPwotICAgIGNzc0ZuLmFw
cGx5KCB0aGlzLCBhcmd1bWVudHMgKSA6Ci0gICAgdGhpcy5hbmltYXRlKCBnZW5GeCggbmFtZSwg
dHJ1ZSApLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApOwotICAgIH07Ci19KTsKLQotalF1ZXJ5
LmZuLmV4dGVuZCh7Ci0gICAgZmFkZVRvOiBmdW5jdGlvbiggc3BlZWQsIHRvLCBlYXNpbmcsIGNh
bGxiYWNrICkgewotCi0gICAgLy8gc2hvdyBhbnkgaGlkZGVuIGVsZW1lbnRzIGFmdGVyIHNldHRp
bmcgb3BhY2l0eSB0byAwCi0gICAgcmV0dXJuIHRoaXMuZmlsdGVyKCBpc0hpZGRlbiApLmNzcygg
Im9wYWNpdHkiLCAwICkuc2hvdygpCi0KLSAgICAvLyBhbmltYXRlIHRvIHRoZSB2YWx1ZSBzcGVj
aWZpZWQKLSAgICAuZW5kKCkuYW5pbWF0ZSh7IG9wYWNpdHk6IHRvIH0sIHNwZWVkLCBlYXNpbmcs
IGNhbGxiYWNrICk7Ci0gICAgfSwKLSAgICBhbmltYXRlOiBmdW5jdGlvbiggcHJvcCwgc3BlZWQs
IGVhc2luZywgY2FsbGJhY2sgKSB7Ci0gICAgdmFyIGVtcHR5ID0galF1ZXJ5LmlzRW1wdHlPYmpl
Y3QoIHByb3AgKSwKLSAgICBvcHRhbGwgPSBqUXVlcnkuc3BlZWQoIHNwZWVkLCBlYXNpbmcsIGNh
bGxiYWNrICksCi0gICAgZG9BbmltYXRpb24gPSBmdW5jdGlvbigpIHsKLSAgICAvLyBPcGVyYXRl
IG9uIGEgY29weSBvZiBwcm9wIHNvIHBlci1wcm9wZXJ0eSBlYXNpbmcgd29uJ3QgYmUgbG9zdAot
ICAgIHZhciBhbmltID0gQW5pbWF0aW9uKCB0aGlzLCBqUXVlcnkuZXh0ZW5kKCB7fSwgcHJvcCAp
LCBvcHRhbGwgKTsKLSAgICBkb0FuaW1hdGlvbi5maW5pc2ggPSBmdW5jdGlvbigpIHsKLSAgICBh
bmltLnN0b3AoIHRydWUgKTsKLSAgICB9OwotICAgIC8vIEVtcHR5IGFuaW1hdGlvbnMsIG9yIGZp
bmlzaGluZyByZXNvbHZlcyBpbW1lZGlhdGVseQotICAgIGlmICggZW1wdHkgfHwgalF1ZXJ5Ll9k
YXRhKCB0aGlzLCAiZmluaXNoIiApICkgewotICAgIGFuaW0uc3RvcCggdHJ1ZSApOwotICAgIH0K
LSAgICB9OwotICAgIGRvQW5pbWF0aW9uLmZpbmlzaCA9IGRvQW5pbWF0aW9uOwotCi0gICAgcmV0
dXJuIGVtcHR5IHx8IG9wdGFsbC5xdWV1ZSA9PT0gZmFsc2UgPwotICAgIHRoaXMuZWFjaCggZG9B
bmltYXRpb24gKSA6Ci0gICAgdGhpcy5xdWV1ZSggb3B0YWxsLnF1ZXVlLCBkb0FuaW1hdGlvbiAp
OwotICAgIH0sCi0gICAgc3RvcDogZnVuY3Rpb24oIHR5cGUsIGNsZWFyUXVldWUsIGdvdG9FbmQg
KSB7Ci0gICAgdmFyIHN0b3BRdWV1ZSA9IGZ1bmN0aW9uKCBob29rcyApIHsKLSAgICB2YXIgc3Rv
cCA9IGhvb2tzLnN0b3A7Ci0gICAgZGVsZXRlIGhvb2tzLnN0b3A7Ci0gICAgc3RvcCggZ290b0Vu
ZCApOwotICAgIH07Ci0KLSAgICBpZiAoIHR5cGVvZiB0eXBlICE9PSAic3RyaW5nIiApIHsKLSAg
ICBnb3RvRW5kID0gY2xlYXJRdWV1ZTsKLSAgICBjbGVhclF1ZXVlID0gdHlwZTsKLSAgICB0eXBl
ID0gdW5kZWZpbmVkOwotICAgIH0KLSAgICBpZiAoIGNsZWFyUXVldWUgJiYgdHlwZSAhPT0gZmFs
c2UgKSB7Ci0gICAgdGhpcy5xdWV1ZSggdHlwZSB8fCAiZngiLCBbXSApOwotICAgIH0KLQotICAg
IHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGRlcXVldWUgPSB0cnVlLAot
ICAgIGluZGV4ID0gdHlwZSAhPSBudWxsICYmIHR5cGUgKyAicXVldWVIb29rcyIsCi0gICAgdGlt
ZXJzID0galF1ZXJ5LnRpbWVycywKLSAgICBkYXRhID0galF1ZXJ5Ll9kYXRhKCB0aGlzICk7Ci0K
LSAgICBpZiAoIGluZGV4ICkgewotICAgIGlmICggZGF0YVsgaW5kZXggXSAmJiBkYXRhWyBpbmRl
eCBdLnN0b3AgKSB7Ci0gICAgc3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7Ci0gICAgfQotICAg
IH0gZWxzZSB7Ci0gICAgZm9yICggaW5kZXggaW4gZGF0YSApIHsKLSAgICBpZiAoIGRhdGFbIGlu
ZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICYmIHJydW4udGVzdCggaW5kZXggKSApIHsKLSAg
ICBzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTsKLSAgICB9Ci0gICAgfQotICAgIH0KLQotICAg
IGZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsgKSB7Ci0gICAgaWYgKCB0aW1l
cnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJiAodHlwZSA9PSBudWxsIHx8IHRpbWVyc1sgaW5k
ZXggXS5xdWV1ZSA9PT0gdHlwZSkgKSB7Ci0gICAgdGltZXJzWyBpbmRleCBdLmFuaW0uc3RvcCgg
Z290b0VuZCApOwotICAgIGRlcXVldWUgPSBmYWxzZTsKLSAgICB0aW1lcnMuc3BsaWNlKCBpbmRl
eCwgMSApOwotICAgIH0KLSAgICB9Ci0KLSAgICAvLyBzdGFydCB0aGUgbmV4dCBpbiB0aGUgcXVl
dWUgaWYgdGhlIGxhc3Qgc3RlcCB3YXNuJ3QgZm9yY2VkCi0gICAgLy8gdGltZXJzIGN1cnJlbnRs
eSB3aWxsIGNhbGwgdGhlaXIgY29tcGxldGUgY2FsbGJhY2tzLCB3aGljaCB3aWxsIGRlcXVldWUK
LSAgICAvLyBidXQgb25seSBpZiB0aGV5IHdlcmUgZ290b0VuZAotICAgIGlmICggZGVxdWV1ZSB8
fCAhZ290b0VuZCApIHsKLSAgICBqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApOwotICAgIH0K
LSAgICB9KTsKLSAgICB9LAotICAgIGZpbmlzaDogZnVuY3Rpb24oIHR5cGUgKSB7Ci0gICAgaWYg
KCB0eXBlICE9PSBmYWxzZSApIHsKLSAgICB0eXBlID0gdHlwZSB8fCAiZngiOwotICAgIH0KLSAg
ICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewotICAgIHZhciBpbmRleCwKLSAgICBkYXRh
ID0galF1ZXJ5Ll9kYXRhKCB0aGlzICksCi0gICAgcXVldWUgPSBkYXRhWyB0eXBlICsgInF1ZXVl
IiBdLAotICAgIGhvb2tzID0gZGF0YVsgdHlwZSArICJxdWV1ZUhvb2tzIiBdLAotICAgIHRpbWVy
cyA9IGpRdWVyeS50aW1lcnMsCi0gICAgbGVuZ3RoID0gcXVldWUgPyBxdWV1ZS5sZW5ndGggOiAw
OwotCi0gICAgLy8gZW5hYmxlIGZpbmlzaGluZyBmbGFnIG9uIHByaXZhdGUgZGF0YQotICAgIGRh
dGEuZmluaXNoID0gdHJ1ZTsKLQotICAgIC8vIGVtcHR5IHRoZSBxdWV1ZSBmaXJzdAotICAgIGpR
dWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgW10gKTsKLQotICAgIGlmICggaG9va3MgJiYgaG9va3Mu
Y3VyICYmIGhvb2tzLmN1ci5maW5pc2ggKSB7Ci0gICAgaG9va3MuY3VyLmZpbmlzaC5jYWxsKCB0
aGlzICk7Ci0gICAgfQotCi0gICAgLy8gbG9vayBmb3IgYW55IGFjdGl2ZSBhbmltYXRpb25zLCBh
bmQgZmluaXNoIHRoZW0KLSAgICBmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07
ICkgewotICAgIGlmICggdGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRoaXMgJiYgdGltZXJzWyBp
bmRleCBdLnF1ZXVlID09PSB0eXBlICkgewotICAgIHRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3Ao
IHRydWUgKTsKLSAgICB0aW1lcnMuc3BsaWNlKCBpbmRleCwgMSApOwotICAgIH0KLSAgICB9Ci0K
LSAgICAvLyBsb29rIGZvciBhbnkgYW5pbWF0aW9ucyBpbiB0aGUgb2xkIHF1ZXVlIGFuZCBmaW5p
c2ggdGhlbQotICAgIGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7
Ci0gICAgaWYgKCBxdWV1ZVsgaW5kZXggXSAmJiBxdWV1ZVsgaW5kZXggXS5maW5pc2ggKSB7Ci0g
ICAgcXVldWVbIGluZGV4IF0uZmluaXNoLmNhbGwoIHRoaXMgKTsKLSAgICB9Ci0gICAgfQotCi0g
ICAgLy8gdHVybiBvZmYgZmluaXNoaW5nIGZsYWcKLSAgICBkZWxldGUgZGF0YS5maW5pc2g7Ci0g
ICAgfSk7Ci0gICAgfQotfSk7Ci0KLS8vIEdlbmVyYXRlIHBhcmFtZXRlcnMgdG8gY3JlYXRlIGEg
c3RhbmRhcmQgYW5pbWF0aW9uCi1mdW5jdGlvbiBnZW5GeCggdHlwZSwgaW5jbHVkZVdpZHRoICkg
ewotICAgIHZhciB3aGljaCwKLSAgICBhdHRycyA9IHsgaGVpZ2h0OiB0eXBlIH0sCi0gICAgaSA9
IDA7Ci0KLSAgICAvLyBpZiB3ZSBpbmNsdWRlIHdpZHRoLCBzdGVwIHZhbHVlIGlzIDEgdG8gZG8g
YWxsIGNzc0V4cGFuZCB2YWx1ZXMsCi0gICAgLy8gaWYgd2UgZG9uJ3QgaW5jbHVkZSB3aWR0aCwg
c3RlcCB2YWx1ZSBpcyAyIHRvIHNraXAgb3ZlciBMZWZ0IGFuZCBSaWdodAotICAgIGluY2x1ZGVX
aWR0aCA9IGluY2x1ZGVXaWR0aD8gMSA6IDA7Ci0gICAgZm9yKCA7IGkgPCA0IDsgaSArPSAyIC0g
aW5jbHVkZVdpZHRoICkgewotICAgIHdoaWNoID0gY3NzRXhwYW5kWyBpIF07Ci0gICAgYXR0cnNb
ICJtYXJnaW4iICsgd2hpY2ggXSA9IGF0dHJzWyAicGFkZGluZyIgKyB3aGljaCBdID0gdHlwZTsK
LSAgICB9Ci0KLSAgICBpZiAoIGluY2x1ZGVXaWR0aCApIHsKLSAgICBhdHRycy5vcGFjaXR5ID0g
YXR0cnMud2lkdGggPSB0eXBlOwotICAgIH0KLQotICAgIHJldHVybiBhdHRyczsKLX0KLQotLy8g
R2VuZXJhdGUgc2hvcnRjdXRzIGZvciBjdXN0b20gYW5pbWF0aW9ucwotalF1ZXJ5LmVhY2goewot
ICAgIHNsaWRlRG93bjogZ2VuRngoInNob3ciKSwKLSAgICBzbGlkZVVwOiBnZW5GeCgiaGlkZSIp
LAotICAgIHNsaWRlVG9nZ2xlOiBnZW5GeCgidG9nZ2xlIiksCi0gICAgZmFkZUluOiB7IG9wYWNp
dHk6ICJzaG93IiB9LAotICAgIGZhZGVPdXQ6IHsgb3BhY2l0eTogImhpZGUiIH0sCi0gICAgZmFk
ZVRvZ2dsZTogeyBvcGFjaXR5OiAidG9nZ2xlIiB9Ci19LCBmdW5jdGlvbiggbmFtZSwgcHJvcHMg
KSB7Ci0gICAgalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2Fs
bGJhY2sgKSB7Ci0gICAgcmV0dXJuIHRoaXMuYW5pbWF0ZSggcHJvcHMsIHNwZWVkLCBlYXNpbmcs
IGNhbGxiYWNrICk7Ci0gICAgfTsKLX0pOwotCi1qUXVlcnkuc3BlZWQgPSBmdW5jdGlvbiggc3Bl
ZWQsIGVhc2luZywgZm4gKSB7Ci0gICAgdmFyIG9wdCA9IHNwZWVkICYmIHR5cGVvZiBzcGVlZCA9
PT0gIm9iamVjdCIgPyBqUXVlcnkuZXh0ZW5kKCB7fSwgc3BlZWQgKSA6IHsKLSAgICBjb21wbGV0
ZTogZm4gfHwgIWZuICYmIGVhc2luZyB8fAotICAgIGpRdWVyeS5pc0Z1bmN0aW9uKCBzcGVlZCAp
ICYmIHNwZWVkLAotICAgIGR1cmF0aW9uOiBzcGVlZCwKLSAgICBlYXNpbmc6IGZuICYmIGVhc2lu
ZyB8fCBlYXNpbmcgJiYgIWpRdWVyeS5pc0Z1bmN0aW9uKCBlYXNpbmcgKSAmJiBlYXNpbmcKLSAg
ICB9OwotCi0gICAgb3B0LmR1cmF0aW9uID0galF1ZXJ5LmZ4Lm9mZiA/IDAgOiB0eXBlb2Ygb3B0
LmR1cmF0aW9uID09PSAibnVtYmVyIiA/IG9wdC5kdXJhdGlvbiA6Ci0gICAgb3B0LmR1cmF0aW9u
IGluIGpRdWVyeS5meC5zcGVlZHMgPyBqUXVlcnkuZnguc3BlZWRzWyBvcHQuZHVyYXRpb24gXSA6
IGpRdWVyeS5meC5zcGVlZHMuX2RlZmF1bHQ7Ci0KLSAgICAvLyBub3JtYWxpemUgb3B0LnF1ZXVl
IC0gdHJ1ZS91bmRlZmluZWQvbnVsbCAtPiAiZngiCi0gICAgaWYgKCBvcHQucXVldWUgPT0gbnVs
bCB8fCBvcHQucXVldWUgPT09IHRydWUgKSB7Ci0gICAgb3B0LnF1ZXVlID0gImZ4IjsKLSAgICB9
Ci0KLSAgICAvLyBRdWV1ZWluZwotICAgIG9wdC5vbGQgPSBvcHQuY29tcGxldGU7Ci0KLSAgICBv
cHQuY29tcGxldGUgPSBmdW5jdGlvbigpIHsKLSAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBv
cHQub2xkICkgKSB7Ci0gICAgb3B0Lm9sZC5jYWxsKCB0aGlzICk7Ci0gICAgfQotCi0gICAgaWYg
KCBvcHQucXVldWUgKSB7Ci0gICAgalF1ZXJ5LmRlcXVldWUoIHRoaXMsIG9wdC5xdWV1ZSApOwot
ICAgIH0KLSAgICB9OwotCi0gICAgcmV0dXJuIG9wdDsKLX07Ci0KLWpRdWVyeS5lYXNpbmcgPSB7
Ci0gICAgbGluZWFyOiBmdW5jdGlvbiggcCApIHsKLSAgICByZXR1cm4gcDsKLSAgICB9LAotICAg
IHN3aW5nOiBmdW5jdGlvbiggcCApIHsKLSAgICByZXR1cm4gMC41IC0gTWF0aC5jb3MoIHAqTWF0
aC5QSSApIC8gMjsKLSAgICB9Ci19OwotCi1qUXVlcnkudGltZXJzID0gW107Ci1qUXVlcnkuZngg
PSBUd2Vlbi5wcm90b3R5cGUuaW5pdDsKLWpRdWVyeS5meC50aWNrID0gZnVuY3Rpb24oKSB7Ci0g
ICAgdmFyIHRpbWVyLAotICAgIHRpbWVycyA9IGpRdWVyeS50aW1lcnMsCi0gICAgaSA9IDA7Ci0K
LSAgICBmeE5vdyA9IGpRdWVyeS5ub3coKTsKLQotICAgIGZvciAoIDsgaSA8IHRpbWVycy5sZW5n
dGg7IGkrKyApIHsKLSAgICB0aW1lciA9IHRpbWVyc1sgaSBdOwotICAgIC8vIENoZWNrcyB0aGUg
dGltZXIgaGFzIG5vdCBhbHJlYWR5IGJlZW4gcmVtb3ZlZAotICAgIGlmICggIXRpbWVyKCkgJiYg
dGltZXJzWyBpIF0gPT09IHRpbWVyICkgewotICAgIHRpbWVycy5zcGxpY2UoIGktLSwgMSApOwot
ICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoICF0aW1lcnMubGVuZ3RoICkgewotICAgIGpRdWVyeS5m
eC5zdG9wKCk7Ci0gICAgfQotICAgIGZ4Tm93ID0gdW5kZWZpbmVkOwotfTsKLQotalF1ZXJ5LmZ4
LnRpbWVyID0gZnVuY3Rpb24oIHRpbWVyICkgewotICAgIGlmICggdGltZXIoKSAmJiBqUXVlcnku
dGltZXJzLnB1c2goIHRpbWVyICkgKSB7Ci0gICAgalF1ZXJ5LmZ4LnN0YXJ0KCk7Ci0gICAgfQot
fTsKLQotalF1ZXJ5LmZ4LmludGVydmFsID0gMTM7Ci0KLWpRdWVyeS5meC5zdGFydCA9IGZ1bmN0
aW9uKCkgewotICAgIGlmICggIXRpbWVySWQgKSB7Ci0gICAgdGltZXJJZCA9IHNldEludGVydmFs
KCBqUXVlcnkuZngudGljaywgalF1ZXJ5LmZ4LmludGVydmFsICk7Ci0gICAgfQotfTsKLQotalF1
ZXJ5LmZ4LnN0b3AgPSBmdW5jdGlvbigpIHsKLSAgICBjbGVhckludGVydmFsKCB0aW1lcklkICk7
Ci0gICAgdGltZXJJZCA9IG51bGw7Ci19OwotCi1qUXVlcnkuZnguc3BlZWRzID0gewotICAgIHNs
b3c6IDYwMCwKLSAgICBmYXN0OiAyMDAsCi0gICAgLy8gRGVmYXVsdCBzcGVlZAotICAgIF9kZWZh
dWx0OiA0MDAKLX07Ci0KLS8vIEJhY2sgQ29tcGF0IDwxLjggZXh0ZW5zaW9uIHBvaW50Ci1qUXVl
cnkuZnguc3RlcCA9IHt9OwotCi1pZiAoIGpRdWVyeS5leHByICYmIGpRdWVyeS5leHByLmZpbHRl
cnMgKSB7Ci0gICAgalF1ZXJ5LmV4cHIuZmlsdGVycy5hbmltYXRlZCA9IGZ1bmN0aW9uKCBlbGVt
ICkgewotICAgIHJldHVybiBqUXVlcnkuZ3JlcChqUXVlcnkudGltZXJzLCBmdW5jdGlvbiggZm4g
KSB7Ci0gICAgcmV0dXJuIGVsZW0gPT09IGZuLmVsZW07Ci0gICAgfSkubGVuZ3RoOwotICAgIH07
Ci19Ci1qUXVlcnkuZm4ub2Zmc2V0ID0gZnVuY3Rpb24oIG9wdGlvbnMgKSB7Ci0gICAgaWYgKCBh
cmd1bWVudHMubGVuZ3RoICkgewotICAgIHJldHVybiBvcHRpb25zID09PSB1bmRlZmluZWQgPwot
ICAgIHRoaXMgOgotICAgIHRoaXMuZWFjaChmdW5jdGlvbiggaSApIHsKLSAgICBqUXVlcnkub2Zm
c2V0LnNldE9mZnNldCggdGhpcywgb3B0aW9ucywgaSApOwotICAgIH0pOwotICAgIH0KLQotICAg
IHZhciBkb2NFbGVtLCB3aW4sCi0gICAgYm94ID0geyB0b3A6IDAsIGxlZnQ6IDAgfSwKLSAgICBl
bGVtID0gdGhpc1sgMCBdLAotICAgIGRvYyA9IGVsZW0gJiYgZWxlbS5vd25lckRvY3VtZW50Owot
Ci0gICAgaWYgKCAhZG9jICkgewotICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBkb2NFbGVtID0g
ZG9jLmRvY3VtZW50RWxlbWVudDsKLQotICAgIC8vIE1ha2Ugc3VyZSBpdCdzIG5vdCBhIGRpc2Nv
bm5lY3RlZCBET00gbm9kZQotICAgIGlmICggIWpRdWVyeS5jb250YWlucyggZG9jRWxlbSwgZWxl
bSApICkgewotICAgIHJldHVybiBib3g7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgZG9uJ3QgaGF2
ZSBnQkNSLCBqdXN0IHVzZSAwLDAgcmF0aGVyIHRoYW4gZXJyb3IKLSAgICAvLyBCbGFja0JlcnJ5
IDUsIGlPUyAzIChvcmlnaW5hbCBpUGhvbmUpCi0gICAgaWYgKCB0eXBlb2YgZWxlbS5nZXRCb3Vu
ZGluZ0NsaWVudFJlY3QgIT09IGNvcmVfc3RydW5kZWZpbmVkICkgewotICAgIGJveCA9IGVsZW0u
Z2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Ci0gICAgfQotICAgIHdpbiA9IGdldFdpbmRvdyggZG9j
ICk7Ci0gICAgcmV0dXJuIHsKLSAgICB0b3A6IGJveC50b3AgICsgKCB3aW4ucGFnZVlPZmZzZXQg
fHwgZG9jRWxlbS5zY3JvbGxUb3AgKSAgLSAoIGRvY0VsZW0uY2xpZW50VG9wICB8fCAwICksCi0g
ICAgbGVmdDogYm94LmxlZnQgKyAoIHdpbi5wYWdlWE9mZnNldCB8fCBkb2NFbGVtLnNjcm9sbExl
ZnQgKSAtICggZG9jRWxlbS5jbGllbnRMZWZ0IHx8IDAgKQotICAgIH07Ci19OwotCi1qUXVlcnku
b2Zmc2V0ID0gewotCi0gICAgc2V0T2Zmc2V0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgaSAp
IHsKLSAgICB2YXIgcG9zaXRpb24gPSBqUXVlcnkuY3NzKCBlbGVtLCAicG9zaXRpb24iICk7Ci0K
LSAgICAvLyBzZXQgcG9zaXRpb24gZmlyc3QsIGluLWNhc2UgdG9wL2xlZnQgYXJlIHNldCBldmVu
IG9uIHN0YXRpYyBlbGVtCi0gICAgaWYgKCBwb3NpdGlvbiA9PT0gInN0YXRpYyIgKSB7Ci0gICAg
ZWxlbS5zdHlsZS5wb3NpdGlvbiA9ICJyZWxhdGl2ZSI7Ci0gICAgfQotCi0gICAgdmFyIGN1ckVs
ZW0gPSBqUXVlcnkoIGVsZW0gKSwKLSAgICBjdXJPZmZzZXQgPSBjdXJFbGVtLm9mZnNldCgpLAot
ICAgIGN1ckNTU1RvcCA9IGpRdWVyeS5jc3MoIGVsZW0sICJ0b3AiICksCi0gICAgY3VyQ1NTTGVm
dCA9IGpRdWVyeS5jc3MoIGVsZW0sICJsZWZ0IiApLAotICAgIGNhbGN1bGF0ZVBvc2l0aW9uID0g
KCBwb3NpdGlvbiA9PT0gImFic29sdXRlIiB8fCBwb3NpdGlvbiA9PT0gImZpeGVkIiApICYmIGpR
dWVyeS5pbkFycmF5KCJhdXRvIiwgW2N1ckNTU1RvcCwgY3VyQ1NTTGVmdF0pID4gLTEsCi0gICAg
cHJvcHMgPSB7fSwgY3VyUG9zaXRpb24gPSB7fSwgY3VyVG9wLCBjdXJMZWZ0OwotCi0gICAgLy8g
bmVlZCB0byBiZSBhYmxlIHRvIGNhbGN1bGF0ZSBwb3NpdGlvbiBpZiBlaXRoZXIgdG9wIG9yIGxl
ZnQgaXMgYXV0byBhbmQgcG9zaXRpb24gaXMgZWl0aGVyIGFic29sdXRlIG9yIGZpeGVkCi0gICAg
aWYgKCBjYWxjdWxhdGVQb3NpdGlvbiApIHsKLSAgICBjdXJQb3NpdGlvbiA9IGN1ckVsZW0ucG9z
aXRpb24oKTsKLSAgICBjdXJUb3AgPSBjdXJQb3NpdGlvbi50b3A7Ci0gICAgY3VyTGVmdCA9IGN1
clBvc2l0aW9uLmxlZnQ7Ci0gICAgfSBlbHNlIHsKLSAgICBjdXJUb3AgPSBwYXJzZUZsb2F0KCBj
dXJDU1NUb3AgKSB8fCAwOwotICAgIGN1ckxlZnQgPSBwYXJzZUZsb2F0KCBjdXJDU1NMZWZ0ICkg
fHwgMDsKLSAgICB9Ci0KLSAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBvcHRpb25zICkgKSB7
Ci0gICAgb3B0aW9ucyA9IG9wdGlvbnMuY2FsbCggZWxlbSwgaSwgY3VyT2Zmc2V0ICk7Ci0gICAg
fQotCi0gICAgaWYgKCBvcHRpb25zLnRvcCAhPSBudWxsICkgewotICAgIHByb3BzLnRvcCA9ICgg
b3B0aW9ucy50b3AgLSBjdXJPZmZzZXQudG9wICkgKyBjdXJUb3A7Ci0gICAgfQotICAgIGlmICgg
b3B0aW9ucy5sZWZ0ICE9IG51bGwgKSB7Ci0gICAgcHJvcHMubGVmdCA9ICggb3B0aW9ucy5sZWZ0
IC0gY3VyT2Zmc2V0LmxlZnQgKSArIGN1ckxlZnQ7Ci0gICAgfQotCi0gICAgaWYgKCAidXNpbmci
IGluIG9wdGlvbnMgKSB7Ci0gICAgb3B0aW9ucy51c2luZy5jYWxsKCBlbGVtLCBwcm9wcyApOwot
ICAgIH0gZWxzZSB7Ci0gICAgY3VyRWxlbS5jc3MoIHByb3BzICk7Ci0gICAgfQotICAgIH0KLX07
Ci0KLQotalF1ZXJ5LmZuLmV4dGVuZCh7Ci0KLSAgICBwb3NpdGlvbjogZnVuY3Rpb24oKSB7Ci0g
ICAgaWYgKCAhdGhpc1sgMCBdICkgewotICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB2YXIgb2Zm
c2V0UGFyZW50LCBvZmZzZXQsCi0gICAgcGFyZW50T2Zmc2V0ID0geyB0b3A6IDAsIGxlZnQ6IDAg
fSwKLSAgICBlbGVtID0gdGhpc1sgMCBdOwotCi0gICAgLy8gZml4ZWQgZWxlbWVudHMgYXJlIG9m
ZnNldCBmcm9tIHdpbmRvdyAocGFyZW50T2Zmc2V0ID0ge3RvcDowLCBsZWZ0OiAwfSwgYmVjYXVz
ZSBpdCBpcyBpdCdzIG9ubHkgb2Zmc2V0IHBhcmVudAotICAgIGlmICggalF1ZXJ5LmNzcyggZWxl
bSwgInBvc2l0aW9uIiApID09PSAiZml4ZWQiICkgewotICAgIC8vIHdlIGFzc3VtZSB0aGF0IGdl
dEJvdW5kaW5nQ2xpZW50UmVjdCBpcyBhdmFpbGFibGUgd2hlbiBjb21wdXRlZCBwb3NpdGlvbiBp
cyBmaXhlZAotICAgIG9mZnNldCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Ci0gICAg
fSBlbHNlIHsKLSAgICAvLyBHZXQgKnJlYWwqIG9mZnNldFBhcmVudAotICAgIG9mZnNldFBhcmVu
dCA9IHRoaXMub2Zmc2V0UGFyZW50KCk7Ci0KLSAgICAvLyBHZXQgY29ycmVjdCBvZmZzZXRzCi0g
ICAgb2Zmc2V0ID0gdGhpcy5vZmZzZXQoKTsKLSAgICBpZiAoICFqUXVlcnkubm9kZU5hbWUoIG9m
ZnNldFBhcmVudFsgMCBdLCAiaHRtbCIgKSApIHsKLSAgICBwYXJlbnRPZmZzZXQgPSBvZmZzZXRQ
YXJlbnQub2Zmc2V0KCk7Ci0gICAgfQotCi0gICAgLy8gQWRkIG9mZnNldFBhcmVudCBib3JkZXJz
Ci0gICAgcGFyZW50T2Zmc2V0LnRvcCAgKz0galF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50WyAwIF0s
ICJib3JkZXJUb3BXaWR0aCIsIHRydWUgKTsKLSAgICBwYXJlbnRPZmZzZXQubGVmdCArPSBqUXVl
cnkuY3NzKCBvZmZzZXRQYXJlbnRbIDAgXSwgImJvcmRlckxlZnRXaWR0aCIsIHRydWUgKTsKLSAg
ICB9Ci0KLSAgICAvLyBTdWJ0cmFjdCBwYXJlbnQgb2Zmc2V0cyBhbmQgZWxlbWVudCBtYXJnaW5z
Ci0gICAgLy8gbm90ZTogd2hlbiBhbiBlbGVtZW50IGhhcyBtYXJnaW46IGF1dG8gdGhlIG9mZnNl
dExlZnQgYW5kIG1hcmdpbkxlZnQKLSAgICAvLyBhcmUgdGhlIHNhbWUgaW4gU2FmYXJpIGNhdXNp
bmcgb2Zmc2V0LmxlZnQgdG8gaW5jb3JyZWN0bHkgYmUgMAotICAgIHJldHVybiB7Ci0gICAgdG9w
OiAgb2Zmc2V0LnRvcCAgLSBwYXJlbnRPZmZzZXQudG9wIC0galF1ZXJ5LmNzcyggZWxlbSwgIm1h
cmdpblRvcCIsIHRydWUgKSwKLSAgICBsZWZ0OiBvZmZzZXQubGVmdCAtIHBhcmVudE9mZnNldC5s
ZWZ0IC0galF1ZXJ5LmNzcyggZWxlbSwgIm1hcmdpbkxlZnQiLCB0cnVlKQotICAgIH07Ci0gICAg
fSwKLQotICAgIG9mZnNldFBhcmVudDogZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMubWFw
KGZ1bmN0aW9uKCkgewotICAgIHZhciBvZmZzZXRQYXJlbnQgPSB0aGlzLm9mZnNldFBhcmVudCB8
fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7Ci0gICAgd2hpbGUgKCBvZmZzZXRQYXJlbnQgJiYg
KCAhalF1ZXJ5Lm5vZGVOYW1lKCBvZmZzZXRQYXJlbnQsICJodG1sIiApICYmIGpRdWVyeS5jc3Mo
IG9mZnNldFBhcmVudCwgInBvc2l0aW9uIikgPT09ICJzdGF0aWMiICkgKSB7Ci0gICAgb2Zmc2V0
UGFyZW50ID0gb2Zmc2V0UGFyZW50Lm9mZnNldFBhcmVudDsKLSAgICB9Ci0gICAgcmV0dXJuIG9m
ZnNldFBhcmVudCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7Ci0gICAgfSk7Ci0gICAgfQot
fSk7Ci0KLQotLy8gQ3JlYXRlIHNjcm9sbExlZnQgYW5kIHNjcm9sbFRvcCBtZXRob2RzCi1qUXVl
cnkuZWFjaCgge3Njcm9sbExlZnQ6ICJwYWdlWE9mZnNldCIsIHNjcm9sbFRvcDogInBhZ2VZT2Zm
c2V0In0sIGZ1bmN0aW9uKCBtZXRob2QsIHByb3AgKSB7Ci0gICAgdmFyIHRvcCA9IC9ZLy50ZXN0
KCBwcm9wICk7Ci0KLSAgICBqUXVlcnkuZm5bIG1ldGhvZCBdID0gZnVuY3Rpb24oIHZhbCApIHsK
LSAgICByZXR1cm4galF1ZXJ5LmFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIG1ldGhvZCwg
dmFsICkgewotICAgIHZhciB3aW4gPSBnZXRXaW5kb3coIGVsZW0gKTsKLQotICAgIGlmICggdmFs
ID09PSB1bmRlZmluZWQgKSB7Ci0gICAgcmV0dXJuIHdpbiA/IChwcm9wIGluIHdpbikgPyB3aW5b
IHByb3AgXSA6Ci0gICAgd2luLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsgbWV0aG9kIF0gOgot
ICAgIGVsZW1bIG1ldGhvZCBdOwotICAgIH0KLQotICAgIGlmICggd2luICkgewotICAgIHdpbi5z
Y3JvbGxUbygKLSAgICAhdG9wID8gdmFsIDogalF1ZXJ5KCB3aW4gKS5zY3JvbGxMZWZ0KCksCi0g
ICAgdG9wID8gdmFsIDogalF1ZXJ5KCB3aW4gKS5zY3JvbGxUb3AoKQotICAgICk7Ci0KLSAgICB9
IGVsc2UgewotICAgIGVsZW1bIG1ldGhvZCBdID0gdmFsOwotICAgIH0KLSAgICB9LCBtZXRob2Qs
IHZhbCwgYXJndW1lbnRzLmxlbmd0aCwgbnVsbCApOwotICAgIH07Ci19KTsKLQotZnVuY3Rpb24g
Z2V0V2luZG93KCBlbGVtICkgewotICAgIHJldHVybiBqUXVlcnkuaXNXaW5kb3coIGVsZW0gKSA/
Ci0gICAgZWxlbSA6Ci0gICAgZWxlbS5ub2RlVHlwZSA9PT0gOSA/Ci0gICAgZWxlbS5kZWZhdWx0
VmlldyB8fCBlbGVtLnBhcmVudFdpbmRvdyA6Ci0gICAgZmFsc2U7Ci19Ci0vLyBDcmVhdGUgaW5u
ZXJIZWlnaHQsIGlubmVyV2lkdGgsIGhlaWdodCwgd2lkdGgsIG91dGVySGVpZ2h0IGFuZCBvdXRl
cldpZHRoIG1ldGhvZHMKLWpRdWVyeS5lYWNoKCB7IEhlaWdodDogImhlaWdodCIsIFdpZHRoOiAi
d2lkdGgiIH0sIGZ1bmN0aW9uKCBuYW1lLCB0eXBlICkgewotICAgIGpRdWVyeS5lYWNoKCB7IHBh
ZGRpbmc6ICJpbm5lciIgKyBuYW1lLCBjb250ZW50OiB0eXBlLCAiIjogIm91dGVyIiArIG5hbWUg
fSwgZnVuY3Rpb24oIGRlZmF1bHRFeHRyYSwgZnVuY05hbWUgKSB7Ci0gICAgLy8gbWFyZ2luIGlz
IG9ubHkgZm9yIG91dGVySGVpZ2h0LCBvdXRlcldpZHRoCi0gICAgalF1ZXJ5LmZuWyBmdW5jTmFt
ZSBdID0gZnVuY3Rpb24oIG1hcmdpbiwgdmFsdWUgKSB7Ci0gICAgdmFyIGNoYWluYWJsZSA9IGFy
Z3VtZW50cy5sZW5ndGggJiYgKCBkZWZhdWx0RXh0cmEgfHwgdHlwZW9mIG1hcmdpbiAhPT0gImJv
b2xlYW4iICksCi0gICAgZXh0cmEgPSBkZWZhdWx0RXh0cmEgfHwgKCBtYXJnaW4gPT09IHRydWUg
fHwgdmFsdWUgPT09IHRydWUgPyAibWFyZ2luIiA6ICJib3JkZXIiICk7Ci0KLSAgICByZXR1cm4g
alF1ZXJ5LmFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIHR5cGUsIHZhbHVlICkgewotICAg
IHZhciBkb2M7Ci0KLSAgICBpZiAoIGpRdWVyeS5pc1dpbmRvdyggZWxlbSApICkgewotICAgIC8v
IEFzIG9mIDUvOC8yMDEyIHRoaXMgd2lsbCB5aWVsZCBpbmNvcnJlY3QgcmVzdWx0cyBmb3IgTW9i
aWxlIFNhZmFyaSwgYnV0IHRoZXJlCi0gICAgLy8gaXNuJ3QgYSB3aG9sZSBsb3Qgd2UgY2FuIGRv
LiBTZWUgcHVsbCByZXF1ZXN0IGF0IHRoaXMgVVJMIGZvciBkaXNjdXNzaW9uOgotICAgIC8vIGh0
dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L3B1bGwvNzY0Ci0gICAgcmV0dXJuIGVsZW0u
ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyAiY2xpZW50IiArIG5hbWUgXTsKLSAgICB9Ci0KLSAg
ICAvLyBHZXQgZG9jdW1lbnQgd2lkdGggb3IgaGVpZ2h0Ci0gICAgaWYgKCBlbGVtLm5vZGVUeXBl
ID09PSA5ICkgewotICAgIGRvYyA9IGVsZW0uZG9jdW1lbnRFbGVtZW50OwotCi0gICAgLy8gRWl0
aGVyIHNjcm9sbFtXaWR0aC9IZWlnaHRdIG9yIG9mZnNldFtXaWR0aC9IZWlnaHRdIG9yIGNsaWVu
dFtXaWR0aC9IZWlnaHRdLCB3aGljaGV2ZXIgaXMgZ3JlYXRlc3QKLSAgICAvLyB1bmZvcnR1bmF0
ZWx5LCB0aGlzIGNhdXNlcyBidWcgIzM4MzggaW4gSUU2Lzggb25seSwgYnV0IHRoZXJlIGlzIGN1
cnJlbnRseSBubyBnb29kLCBzbWFsbCB3YXkgdG8gZml4IGl0LgotICAgIHJldHVybiBNYXRoLm1h
eCgKLSAgICBlbGVtLmJvZHlbICJzY3JvbGwiICsgbmFtZSBdLCBkb2NbICJzY3JvbGwiICsgbmFt
ZSBdLAotICAgIGVsZW0uYm9keVsgIm9mZnNldCIgKyBuYW1lIF0sIGRvY1sgIm9mZnNldCIgKyBu
YW1lIF0sCi0gICAgZG9jWyAiY2xpZW50IiArIG5hbWUgXQotICAgICk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPwotICAgIC8vIEdldCB3aWR0aCBvciBoZWlnaHQg
b24gdGhlIGVsZW1lbnQsIHJlcXVlc3RpbmcgYnV0IG5vdCBmb3JjaW5nIHBhcnNlRmxvYXQKLSAg
ICBqUXVlcnkuY3NzKCBlbGVtLCB0eXBlLCBleHRyYSApIDoKLQotICAgIC8vIFNldCB3aWR0aCBv
ciBoZWlnaHQgb24gdGhlIGVsZW1lbnQKLSAgICBqUXVlcnkuc3R5bGUoIGVsZW0sIHR5cGUsIHZh
bHVlLCBleHRyYSApOwotICAgIH0sIHR5cGUsIGNoYWluYWJsZSA/IG1hcmdpbiA6IHVuZGVmaW5l
ZCwgY2hhaW5hYmxlLCBudWxsICk7Ci0gICAgfTsKLSAgICB9KTsKLX0pOwotLy8gTGltaXQgc2Nv
cGUgcG9sbHV0aW9uIGZyb20gYW55IGRlcHJlY2F0ZWQgQVBJCi0vLyAoZnVuY3Rpb24oKSB7Ci0K
LS8vIH0pKCk7Ci0vLyBFeHBvc2UgalF1ZXJ5IHRvIHRoZSBnbG9iYWwgb2JqZWN0Ci13aW5kb3cu
alF1ZXJ5ID0gd2luZG93LiQgPSBqUXVlcnk7Ci0KLS8vIEV4cG9zZSBqUXVlcnkgYXMgYW4gQU1E
IG1vZHVsZSwgYnV0IG9ubHkgZm9yIEFNRCBsb2FkZXJzIHRoYXQKLS8vIHVuZGVyc3RhbmQgdGhl
IGlzc3VlcyB3aXRoIGxvYWRpbmcgbXVsdGlwbGUgdmVyc2lvbnMgb2YgalF1ZXJ5Ci0vLyBpbiBh
IHBhZ2UgdGhhdCBhbGwgbWlnaHQgY2FsbCBkZWZpbmUoKS4gVGhlIGxvYWRlciB3aWxsIGluZGlj
YXRlCi0vLyB0aGV5IGhhdmUgc3BlY2lhbCBhbGxvd2FuY2VzIGZvciBtdWx0aXBsZSBqUXVlcnkg
dmVyc2lvbnMgYnkKLS8vIHNwZWNpZnlpbmcgZGVmaW5lLmFtZC5qUXVlcnkgPSB0cnVlLiBSZWdp
c3RlciBhcyBhIG5hbWVkIG1vZHVsZSwKLS8vIHNpbmNlIGpRdWVyeSBjYW4gYmUgY29uY2F0ZW5h
dGVkIHdpdGggb3RoZXIgZmlsZXMgdGhhdCBtYXkgdXNlIGRlZmluZSwKLS8vIGJ1dCBub3QgdXNl
IGEgcHJvcGVyIGNvbmNhdGVuYXRpb24gc2NyaXB0IHRoYXQgdW5kZXJzdGFuZHMgYW5vbnltb3Vz
Ci0vLyBBTUQgbW9kdWxlcy4gQSBuYW1lZCBBTUQgaXMgc2FmZXN0IGFuZCBtb3N0IHJvYnVzdCB3
YXkgdG8gcmVnaXN0ZXIuCi0vLyBMb3dlcmNhc2UganF1ZXJ5IGlzIHVzZWQgYmVjYXVzZSBBTUQg
bW9kdWxlIG5hbWVzIGFyZSBkZXJpdmVkIGZyb20KLS8vIGZpbGUgbmFtZXMsIGFuZCBqUXVlcnkg
aXMgbm9ybWFsbHkgZGVsaXZlcmVkIGluIGEgbG93ZXJjYXNlIGZpbGUgbmFtZS4KLS8vIERvIHRo
aXMgYWZ0ZXIgY3JlYXRpbmcgdGhlIGdsb2JhbCBzbyB0aGF0IGlmIGFuIEFNRCBtb2R1bGUgd2Fu
dHMgdG8gY2FsbAotLy8gbm9Db25mbGljdCB0byBoaWRlIHRoaXMgdmVyc2lvbiBvZiBqUXVlcnks
IGl0IHdpbGwgd29yay4KLWlmICggdHlwZW9mIGRlZmluZSA9PT0gImZ1bmN0aW9uIiAmJiBkZWZp
bmUuYW1kICYmIGRlZmluZS5hbWQualF1ZXJ5ICkgewotICAgIGRlZmluZSggImpxdWVyeSIsIFtd
LCBmdW5jdGlvbiAoKSB7IHJldHVybiBqUXVlcnk7IH0gKTsKLX0KLQotfSkoIHdpbmRvdyApOwpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2pxdWVy
eS9ib3dlcl9jb21wb25lbnRzL3RvZG9tdmMtY29tbW9uL2Jhc2UuY3NzIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
anF1ZXJ5L2Jvd2VyX2NvbXBvbmVudHMvdG9kb212Yy1jb21tb24vYmFzZS5jc3MKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczN2NkOWNjOGM3ZTA3ZTQ2OTFkNGVlMWJhYTcwMmU0OTkz
Y2EyMWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvanF1ZXJ5L2Jvd2VyX2NvbXBvbmVudHMvdG9kb212Yy1jb21tb24vYmFzZS5jc3MK
KysrIC9kZXYvbnVsbApAQCAtMSw1NTQgKzAsMCBAQAotaHRtbCwKLWJvZHkgewotICAgIG1hcmdp
bjogMDsKLSAgICBwYWRkaW5nOiAwOwotfQotCi1idXR0b24gewotICAgIG1hcmdpbjogMDsKLSAg
ICBwYWRkaW5nOiAwOwotICAgIGJvcmRlcjogMDsKLSAgICBiYWNrZ3JvdW5kOiBub25lOwotICAg
IGZvbnQtc2l6ZTogMTAwJTsKLSAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7Ci0gICAgZm9u
dC1mYW1pbHk6IGluaGVyaXQ7Ci0gICAgY29sb3I6IGluaGVyaXQ7Ci0gICAgLXdlYmtpdC1hcHBl
YXJhbmNlOiBub25lOwotICAgIC8qLW1vei1hcHBlYXJhbmNlOiBub25lOyovCi0gICAgLW1zLWFw
cGVhcmFuY2U6IG5vbmU7Ci0gICAgLW8tYXBwZWFyYW5jZTogbm9uZTsKLSAgICBhcHBlYXJhbmNl
OiBub25lOwotfQotCi1ib2R5IHsKLSAgICBmb250OiAxNHB4ICdIZWx2ZXRpY2EgTmV1ZScsIEhl
bHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7Ci0gICAgbGluZS1oZWlnaHQ6IDEuNGVtOwotICAg
IGJhY2tncm91bmQ6ICNlYWVhZWEgdXJsKCdiZy5wbmcnKTsKLSAgICBjb2xvcjogIzRkNGQ0ZDsK
LSAgICB3aWR0aDogNTUwcHg7Ci0gICAgbWFyZ2luOiAwIGF1dG87Ci0gICAgLXdlYmtpdC1mb250
LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ci0gICAgLW1vei1mb250LXNtb290aGluZzogYW50aWFs
aWFzZWQ7Ci0gICAgLW1zLWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKLSAgICAtby1mb250
LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ci0gICAgZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2Vk
OwotfQotCi0jdG9kb2FwcCB7Ci0gICAgYmFja2dyb3VuZDogI2ZmZjsKLSAgICBiYWNrZ3JvdW5k
OiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7Ci0gICAgbWFyZ2luOiAxMzBweCAwIDQwcHggMDsK
LSAgICBib3JkZXI6IDFweCBzb2xpZCAjY2NjOwotICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLSAg
ICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAycHg7Ci0gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRp
dXM6IDJweDsKLSAgICBib3gtc2hhZG93OiAwIDJweCA2cHggMCByZ2JhKDAsIDAsIDAsIDAuMiks
Ci0gICAgMCAyNXB4IDUwcHggMCByZ2JhKDAsIDAsIDAsIDAuMTUpOwotfQotCi0jdG9kb2FwcDpi
ZWZvcmUgewotICAgIGNvbnRlbnQ6ICcnOwotICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2Y1
ZDZkNjsKLSAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjZjVkNmQ2OwotICAgIHdpZHRoOiAy
cHg7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogMDsKLSAgICBsZWZ0OiA0MHB4
OwotICAgIGhlaWdodDogMTAwJTsKLX0KLQotI3RvZG9hcHAgaW5wdXQ6Oi13ZWJraXQtaW5wdXQt
cGxhY2Vob2xkZXIgewotICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKLX0KLQotI3RvZG9hcHAgaW5w
dXQ6Oi1tb3otcGxhY2Vob2xkZXIgewotICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKLSAgICBjb2xv
cjogI2E5YTlhOTsKLX0KLQotI3RvZG9hcHAgaDEgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsK
LSAgICB0b3A6IC0xMjBweDsKLSAgICB3aWR0aDogMTAwJTsKLSAgICBmb250LXNpemU6IDcwcHg7
Ci0gICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci0gICAgdGV4dC1hbGlnbjogY2VudGVyOwotICAgIGNv
bG9yOiAjYjNiM2IzOwotICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyk7Ci0gICAg
dGV4dC1zaGFkb3c6IC0xcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMik7Ci0gICAgLXdlYmtpdC10
ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5OwotICAgIC1tb3otdGV4dC1yZW5kZXJp
bmc6IG9wdGltaXplTGVnaWJpbGl0eTsKLSAgICAtbXMtdGV4dC1yZW5kZXJpbmc6IG9wdGltaXpl
TGVnaWJpbGl0eTsKLSAgICAtby10ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5Owot
ICAgIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7Ci19Ci0KLSNoZWFkZXIgewot
ICAgIHBhZGRpbmctdG9wOiAxNXB4OwotICAgIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7Ci19Ci0K
LSNoZWFkZXI6YmVmb3JlIHsKLSAgICBjb250ZW50OiAnJzsKLSAgICBwb3NpdGlvbjogYWJzb2x1
dGU7Ci0gICAgdG9wOiAwOwotICAgIHJpZ2h0OiAwOwotICAgIGxlZnQ6IDA7Ci0gICAgaGVpZ2h0
OiAxNXB4OwotICAgIHotaW5kZXg6IDI7Ci0gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM2
YzYxNWM7Ci0gICAgYmFja2dyb3VuZDogIzhkN2Q3NzsKLSAgICBiYWNrZ3JvdW5kOiAtd2Via2l0
LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBmcm9tKHJnYmEoMTMyLCAx
MTAsIDEwMCwgMC44KSksdG8ocmdiYSgxMDEsIDg0LCA3NiwgMC44KSkpOwotICAgIGJhY2tncm91
bmQ6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgcmdiYSgxMzIsIDExMCwgMTAwLCAwLjgp
LCByZ2JhKDEwMSwgODQsIDc2LCAwLjgpKTsKLSAgICBiYWNrZ3JvdW5kOiAtbW96LWxpbmVhci1n
cmFkaWVudCh0b3AsIHJnYmEoMTMyLCAxMTAsIDEwMCwgMC44KSwgcmdiYSgxMDEsIDg0LCA3Niwg
MC44KSk7Ci0gICAgYmFja2dyb3VuZDogLW8tbGluZWFyLWdyYWRpZW50KHRvcCwgcmdiYSgxMzIs
IDExMCwgMTAwLCAwLjgpLCByZ2JhKDEwMSwgODQsIDc2LCAwLjgpKTsKLSAgICBiYWNrZ3JvdW5k
OiAtbXMtbGluZWFyLWdyYWRpZW50KHRvcCwgcmdiYSgxMzIsIDExMCwgMTAwLCAwLjgpLCByZ2Jh
KDEwMSwgODQsIDc2LCAwLjgpKTsKLSAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG9w
LCByZ2JhKDEzMiwgMTEwLCAxMDAsIDAuOCksIHJnYmEoMTAxLCA4NCwgNzYsIDAuOCkpOwotICAg
IGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDFweDsKLSAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1
czogMXB4OwotfQotCi0jbmV3LXRvZG8sCi0uZWRpdCB7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZl
OwotICAgIG1hcmdpbjogMDsKLSAgICB3aWR0aDogMTAwJTsKLSAgICBmb250LXNpemU6IDI0cHg7
Ci0gICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7Ci0gICAgbGluZS1oZWlnaHQ6IDEuNGVtOwotICAg
IGJvcmRlcjogMDsKLSAgICBvdXRsaW5lOiBub25lOwotICAgIGNvbG9yOiBpbmhlcml0OwotICAg
IHBhZGRpbmc6IDZweDsKLSAgICBib3JkZXI6IDFweCBzb2xpZCAjOTk5OwotICAgIGJveC1zaGFk
b3c6IGluc2V0IDAgLTFweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuMik7Ci0gICAgLXdlYmtpdC1i
b3gtc2l6aW5nOiBib3JkZXItYm94OwotICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsK
LSAgICAtbXMtYm94LXNpemluZzogYm9yZGVyLWJveDsKLSAgICAtby1ib3gtc2l6aW5nOiBib3Jk
ZXItYm94OwotICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7Ci0gICAgLXdlYmtpdC1mb250LXNt
b290aGluZzogYW50aWFsaWFzZWQ7Ci0gICAgLW1vei1mb250LXNtb290aGluZzogYW50aWFsaWFz
ZWQ7Ci0gICAgLW1zLWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKLSAgICAtby1mb250LXNt
b290aGluZzogYW50aWFsaWFzZWQ7Ci0gICAgZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwot
fQotCi0jbmV3LXRvZG8gewotICAgIHBhZGRpbmc6IDE2cHggMTZweCAxNnB4IDYwcHg7Ci0gICAg
Ym9yZGVyOiBub25lOwotICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4wMik7Ci0gICAg
ei1pbmRleDogMjsKLSAgICBib3gtc2hhZG93OiBub25lOwotfQotCi0jbWFpbiB7Ci0gICAgcG9z
aXRpb246IHJlbGF0aXZlOwotICAgIHotaW5kZXg6IDI7Ci0gICAgYm9yZGVyLXRvcDogMXB4IGRv
dHRlZCAjYWRhZGFkOwotfQotCi1sYWJlbFtmb3I9J3RvZ2dsZS1hbGwnXSB7Ci0gICAgZGlzcGxh
eTogbm9uZTsKLX0KLQotI3RvZ2dsZS1hbGwgewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAg
ICB0b3A6IC00MnB4OwotICAgIGxlZnQ6IC00cHg7Ci0gICAgd2lkdGg6IDQwcHg7Ci0gICAgdGV4
dC1hbGlnbjogY2VudGVyOwotICAgIGJvcmRlcjogbm9uZTsgLyogTW9iaWxlIFNhZmFyaSAqLwot
fQotCi0jdG9nZ2xlLWFsbDpiZWZvcmUgewotICAgIGNvbnRlbnQ6ICfCuyc7Ci0gICAgZm9udC1z
aXplOiAyOHB4OwotICAgIGNvbG9yOiAjZDlkOWQ5OwotICAgIHBhZGRpbmc6IDAgMjVweCA3cHg7
Ci19Ci0KLSN0b2dnbGUtYWxsOmNoZWNrZWQ6YmVmb3JlIHsKLSAgICBjb2xvcjogIzczNzM3MzsK
LX0KLQotI3RvZG8tbGlzdCB7Ci0gICAgbWFyZ2luOiAwOwotICAgIHBhZGRpbmc6IDA7Ci0gICAg
bGlzdC1zdHlsZTogbm9uZTsKLX0KLQotI3RvZG8tbGlzdCBsaSB7Ci0gICAgcG9zaXRpb246IHJl
bGF0aXZlOwotICAgIGZvbnQtc2l6ZTogMjRweDsKLSAgICBib3JkZXItYm90dG9tOiAxcHggZG90
dGVkICNjY2M7Ci19Ci0KLSN0b2RvLWxpc3QgbGk6bGFzdC1jaGlsZCB7Ci0gICAgYm9yZGVyLWJv
dHRvbTogbm9uZTsKLX0KLQotI3RvZG8tbGlzdCBsaS5lZGl0aW5nIHsKLSAgICBib3JkZXItYm90
dG9tOiBub25lOwotICAgIHBhZGRpbmc6IDA7Ci19Ci0KLSN0b2RvLWxpc3QgbGkuZWRpdGluZyAu
ZWRpdCB7Ci0gICAgZGlzcGxheTogYmxvY2s7Ci0gICAgd2lkdGg6IDUwNnB4OwotICAgIHBhZGRp
bmc6IDEzcHggMTdweCAxMnB4IDE3cHg7Ci0gICAgbWFyZ2luOiAwIDAgMCA0M3B4OwotfQotCi0j
dG9kby1saXN0IGxpLmVkaXRpbmcgLnZpZXcgewotICAgIGRpc3BsYXk6IG5vbmU7Ci19Ci0KLSN0
b2RvLWxpc3QgbGkgLnRvZ2dsZSB7Ci0gICAgdGV4dC1hbGlnbjogY2VudGVyOwotICAgIHdpZHRo
OiA0MHB4OwotICAgIC8qIGF1dG8sIHNpbmNlIG5vbi1XZWJLaXQgYnJvd3NlcnMgZG9lc24ndCBz
dXBwb3J0IGlucHV0IHN0eWxpbmcgKi8KLSAgICBoZWlnaHQ6IGF1dG87Ci0gICAgcG9zaXRpb246
IGFic29sdXRlOwotICAgIHRvcDogMDsKLSAgICBib3R0b206IDA7Ci0gICAgbWFyZ2luOiBhdXRv
IDA7Ci0gICAgYm9yZGVyOiBub25lOyAvKiBNb2JpbGUgU2FmYXJpICovCi0gICAgLXdlYmtpdC1h
cHBlYXJhbmNlOiBub25lOwotICAgIC8qLW1vei1hcHBlYXJhbmNlOiBub25lOyovCi0gICAgLW1z
LWFwcGVhcmFuY2U6IG5vbmU7Ci0gICAgLW8tYXBwZWFyYW5jZTogbm9uZTsKLSAgICBhcHBlYXJh
bmNlOiBub25lOwotfQotCi0jdG9kby1saXN0IGxpIC50b2dnbGU6YWZ0ZXIgewotICAgIGNvbnRl
bnQ6ICfinJQnOwotICAgIGxpbmUtaGVpZ2h0OiA0M3B4OyAvKiA0MCArIGEgY291cGxlIG9mIHBp
eGVscyB2aXN1YWwgYWRqdXN0bWVudCAqLwotICAgIGZvbnQtc2l6ZTogMjBweDsKLSAgICBjb2xv
cjogI2Q5ZDlkOTsKLSAgICB0ZXh0LXNoYWRvdzogMCAtMXB4IDAgI2JmYmZiZjsKLX0KLQotI3Rv
ZG8tbGlzdCBsaSAudG9nZ2xlOmNoZWNrZWQ6YWZ0ZXIgewotICAgIGNvbG9yOiAjODVhZGE3Owot
ICAgIHRleHQtc2hhZG93OiAwIDFweCAwICM2Njk5OTE7Ci0gICAgYm90dG9tOiAxcHg7Ci0gICAg
cG9zaXRpb246IHJlbGF0aXZlOwotfQotCi0jdG9kby1saXN0IGxpIGxhYmVsIHsKLSAgICB3b3Jk
LWJyZWFrOiBicmVhay13b3JkOwotICAgIHBhZGRpbmc6IDE1cHg7Ci0gICAgbWFyZ2luLWxlZnQ6
IDQ1cHg7Ci0gICAgZGlzcGxheTogYmxvY2s7Ci0gICAgbGluZS1oZWlnaHQ6IDEuMjsKLSAgICAt
d2Via2l0LXRyYW5zaXRpb246IGNvbG9yIDAuNHM7Ci0gICAgLW1vei10cmFuc2l0aW9uOiBjb2xv
ciAwLjRzOwotICAgIC1tcy10cmFuc2l0aW9uOiBjb2xvciAwLjRzOwotICAgIC1vLXRyYW5zaXRp
b246IGNvbG9yIDAuNHM7Ci0gICAgdHJhbnNpdGlvbjogY29sb3IgMC40czsKLX0KLQotI3RvZG8t
bGlzdCBsaS5jb21wbGV0ZWQgbGFiZWwgewotICAgIGNvbG9yOiAjYTlhOWE5OwotICAgIHRleHQt
ZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOwotfQotCi0jdG9kby1saXN0IGxpIC5kZXN0cm95IHsK
LSAgICBkaXNwbGF5OiBub25lOwotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6IDA7
Ci0gICAgcmlnaHQ6IDEwcHg7Ci0gICAgYm90dG9tOiAwOwotICAgIHdpZHRoOiA0MHB4OwotICAg
IGhlaWdodDogNDBweDsKLSAgICBtYXJnaW46IGF1dG8gMDsKLSAgICBmb250LXNpemU6IDIycHg7
Ci0gICAgY29sb3I6ICNhODhhOGE7Ci0gICAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgMC4yczsK
LSAgICAtbW96LXRyYW5zaXRpb246IGFsbCAwLjJzOwotICAgIC1tcy10cmFuc2l0aW9uOiBhbGwg
MC4yczsKLSAgICAtby10cmFuc2l0aW9uOiBhbGwgMC4yczsKLSAgICB0cmFuc2l0aW9uOiBhbGwg
MC4yczsKLX0KLQotI3RvZG8tbGlzdCBsaSAuZGVzdHJveTpob3ZlciB7Ci0gICAgdGV4dC1zaGFk
b3c6IDAgMCAxcHggIzAwMCwKLSAgICAgMCAwIDEwcHggcmdiYSgxOTksIDEwNywgMTA3LCAwLjgp
OwotICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLjMpOwotICAgIC1tb3otdHJhbnNmb3Jt
OiBzY2FsZSgxLjMpOwotICAgIC1tcy10cmFuc2Zvcm06IHNjYWxlKDEuMyk7Ci0gICAgLW8tdHJh
bnNmb3JtOiBzY2FsZSgxLjMpOwotICAgIHRyYW5zZm9ybTogc2NhbGUoMS4zKTsKLX0KLQotI3Rv
ZG8tbGlzdCBsaSAuZGVzdHJveTphZnRlciB7Ci0gICAgY29udGVudDogJ+Kclic7Ci19Ci0KLSN0
b2RvLWxpc3QgbGk6aG92ZXIgLmRlc3Ryb3kgewotICAgIGRpc3BsYXk6IGJsb2NrOwotfQotCi0j
dG9kby1saXN0IGxpIC5lZGl0IHsKLSAgICBkaXNwbGF5OiBub25lOwotfQotCi0jdG9kby1saXN0
IGxpLmVkaXRpbmc6bGFzdC1jaGlsZCB7Ci0gICAgbWFyZ2luLWJvdHRvbTogLTFweDsKLX0KLQot
I2Zvb3RlciB7Ci0gICAgY29sb3I6ICM3Nzc7Ci0gICAgcGFkZGluZzogMCAxNXB4OwotICAgIHBv
c2l0aW9uOiBhYnNvbHV0ZTsKLSAgICByaWdodDogMDsKLSAgICBib3R0b206IC0zMXB4OwotICAg
IGxlZnQ6IDA7Ci0gICAgaGVpZ2h0OiAyMHB4OwotICAgIHotaW5kZXg6IDE7Ci0gICAgdGV4dC1h
bGlnbjogY2VudGVyOwotfQotCi0jZm9vdGVyOmJlZm9yZSB7Ci0gICAgY29udGVudDogJyc7Ci0g
ICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHJpZ2h0OiAwOwotICAgIGJvdHRvbTogMzFweDsK
LSAgICBsZWZ0OiAwOwotICAgIGhlaWdodDogNTBweDsKLSAgICB6LWluZGV4OiAtMTsKLSAgICBi
b3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjMpLAotICAgIDAgNnB4IDAgLTNw
eCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCksCi0gICAgMCA3cHggMXB4IC0zcHggcmdiYSgwLCAw
LCAwLCAwLjMpLAotICAgIDAgNDNweCAwIC02cHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpLAot
ICAgIDAgNDRweCAycHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMik7Ci19Ci0KLSN0b2RvLWNvdW50
IHsKLSAgICBmbG9hdDogbGVmdDsKLSAgICB0ZXh0LWFsaWduOiBsZWZ0OwotfQotCi0jZmlsdGVy
cyB7Ci0gICAgbWFyZ2luOiAwOwotICAgIHBhZGRpbmc6IDA7Ci0gICAgbGlzdC1zdHlsZTogbm9u
ZTsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgcmlnaHQ6IDA7Ci0gICAgbGVmdDogMDsK
LX0KLQotI2ZpbHRlcnMgbGkgewotICAgIGRpc3BsYXk6IGlubGluZTsKLX0KLQotI2ZpbHRlcnMg
bGkgYSB7Ci0gICAgY29sb3I6ICM4Mzc1NmY7Ci0gICAgbWFyZ2luOiAycHg7Ci0gICAgdGV4dC1k
ZWNvcmF0aW9uOiBub25lOwotfQotCi0jZmlsdGVycyBsaSBhLnNlbGVjdGVkIHsKLSAgICBmb250
LXdlaWdodDogYm9sZDsKLX0KLQotI2NsZWFyLWNvbXBsZXRlZCB7Ci0gICAgZmxvYXQ6IHJpZ2h0
OwotICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLSAgICBsaW5lLWhlaWdodDogMjBweDsKLSAgICB0
ZXh0LWRlY29yYXRpb246IG5vbmU7Ci0gICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjEp
OwotICAgIGZvbnQtc2l6ZTogMTFweDsKLSAgICBwYWRkaW5nOiAwIDEwcHg7Ci0gICAgYm9yZGVy
LXJhZGl1czogM3B4OwotICAgIGJveC1zaGFkb3c6IDAgLTFweCAwIDAgcmdiYSgwLCAwLCAwLCAw
LjIpOwotfQotCi0jY2xlYXItY29tcGxldGVkOmhvdmVyIHsKLSAgICBiYWNrZ3JvdW5kOiByZ2Jh
KDAsIDAsIDAsIDAuMTUpOwotICAgIGJveC1zaGFkb3c6IDAgLTFweCAwIDAgcmdiYSgwLCAwLCAw
LCAwLjMpOwotfQotCi0jaW5mbyB7Ci0gICAgbWFyZ2luOiA2NXB4IGF1dG8gMDsKLSAgICBjb2xv
cjogI2E2YTZhNjsKLSAgICBmb250LXNpemU6IDEycHg7Ci0gICAgdGV4dC1zaGFkb3c6IDAgMXB4
IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwotICAgIHRleHQtYWxpZ246IGNlbnRlcjsKLX0K
LQotI2luZm8gYSB7Ci0gICAgY29sb3I6IGluaGVyaXQ7Ci19Ci0KLS8qCi0gICAgSGFjayB0byBy
ZW1vdmUgYmFja2dyb3VuZCBmcm9tIE1vYmlsZSBTYWZhcmkuCi0gICAgQ2FuJ3QgdXNlIGl0IGds
b2JhbGx5IHNpbmNlIGl0IGRlc3Ryb3lzIGNoZWNrYm94ZXMgaW4gRmlyZWZveCBhbmQgT3BlcmEK
LSovCi1AbWVkaWEgc2NyZWVuIGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOjAp
IHsKLSAgICAjdG9nZ2xlLWFsbCwKLSAgICAjdG9kby1saXN0IGxpIC50b2dnbGUgewotICAgIGJh
Y2tncm91bmQ6IG5vbmU7Ci0gICAgfQotCi0gICAgI3RvZG8tbGlzdCBsaSAudG9nZ2xlIHsKLSAg
ICBoZWlnaHQ6IDQwcHg7Ci0gICAgfQotCi0gICAgI3RvZ2dsZS1hbGwgewotICAgIHRvcDogLTU2
cHg7Ci0gICAgbGVmdDogLTE1cHg7Ci0gICAgd2lkdGg6IDY1cHg7Ci0gICAgaGVpZ2h0OiA0MXB4
OwotICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOwotICAgIHRyYW5zZm9ybTog
cm90YXRlKDkwZGVnKTsKLSAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7Ci0gICAgYXBwZWFy
YW5jZTogbm9uZTsKLSAgICB9Ci19Ci0KLS5oaWRkZW57Ci0gICAgZGlzcGxheTpub25lOwotfQot
Ci1ociB7Ci0gICAgbWFyZ2luOiAyMHB4IDA7Ci0gICAgYm9yZGVyOiAwOwotICAgIGJvcmRlci10
b3A6IDFweCBkYXNoZWQgI0M1QzVDNTsKLSAgICBib3JkZXItYm90dG9tOiAxcHggZGFzaGVkICNG
N0Y3Rjc7Ci19Ci0KLS5sZWFybiBhIHsKLSAgICBmb250LXdlaWdodDogbm9ybWFsOwotICAgIHRl
eHQtZGVjb3JhdGlvbjogbm9uZTsKLSAgICBjb2xvcjogI2I4M2Y0NTsKLX0KLQotLmxlYXJuIGE6
aG92ZXIgewotICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwotICAgIGNvbG9yOiAjNzg3
ZTdlOwotfQotCi0ubGVhcm4gaDMsCi0ubGVhcm4gaDQsCi0ubGVhcm4gaDUgewotICAgIG1hcmdp
bjogMTBweCAwOwotICAgIGZvbnQtd2VpZ2h0OiA1MDA7Ci0gICAgbGluZS1oZWlnaHQ6IDEuMjsK
LSAgICBjb2xvcjogIzAwMDsKLX0KLQotLmxlYXJuIGgzIHsKLSAgICBmb250LXNpemU6IDI0cHg7
Ci19Ci0KLS5sZWFybiBoNCB7Ci0gICAgZm9udC1zaXplOiAxOHB4OwotfQotCi0ubGVhcm4gaDUg
ewotICAgIG1hcmdpbi1ib3R0b206IDA7Ci0gICAgZm9udC1zaXplOiAxNHB4OwotfQotCi0ubGVh
cm4gdWwgewotICAgIHBhZGRpbmc6IDA7Ci0gICAgbWFyZ2luOiAwIDAgMzBweCAyNXB4OwotfQot
Ci0ubGVhcm4gbGkgewotICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwotfQotCi0ubGVhcm4gcCB7Ci0g
ICAgZm9udC1zaXplOiAxNXB4OwotICAgIGZvbnQtd2VpZ2h0OiAzMDA7Ci0gICAgbGluZS1oZWln
aHQ6IDEuMzsKLSAgICBtYXJnaW4tdG9wOiAwOwotICAgIG1hcmdpbi1ib3R0b206IDA7Ci19Ci0K
LS5xdW90ZSB7Ci0gICAgYm9yZGVyOiBub25lOwotICAgIG1hcmdpbjogMjBweCAwIDYwcHggMDsK
LX0KLQotLnF1b3RlIHAgewotICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKLX0KLQotLnF1b3RlIHA6
YmVmb3JlIHsKLSAgICBjb250ZW50OiAn4oCcJzsKLSAgICBmb250LXNpemU6IDUwcHg7Ci0gICAg
b3BhY2l0eTogLjE1OwotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6IC0yMHB4Owot
ICAgIGxlZnQ6IDNweDsKLX0KLQotLnF1b3RlIHA6YWZ0ZXIgewotICAgIGNvbnRlbnQ6ICfigJ0n
OwotICAgIGZvbnQtc2l6ZTogNTBweDsKLSAgICBvcGFjaXR5OiAuMTU7Ci0gICAgcG9zaXRpb246
IGFic29sdXRlOwotICAgIGJvdHRvbTogLTQycHg7Ci0gICAgcmlnaHQ6IDNweDsKLX0KLQotLnF1
b3RlIGZvb3RlciB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIGJvdHRvbTogLTQwcHg7
Ci0gICAgcmlnaHQ6IDA7Ci19Ci0KLS5xdW90ZSBmb290ZXIgaW1nIHsKLSAgICBib3JkZXItcmFk
aXVzOiAzcHg7Ci19Ci0KLS5xdW90ZSBmb290ZXIgYSB7Ci0gICAgbWFyZ2luLWxlZnQ6IDVweDsK
LSAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwotfQotCi0uc3BlZWNoLWJ1YmJsZSB7Ci0gICAg
cG9zaXRpb246IHJlbGF0aXZlOwotICAgIHBhZGRpbmc6IDEwcHg7Ci0gICAgYmFja2dyb3VuZDog
cmdiYSgwLCAwLCAwLCAuMDQpOwotICAgIGJvcmRlci1yYWRpdXM6IDVweDsKLX0KLQotLnNwZWVj
aC1idWJibGU6YWZ0ZXIgewotICAgIGNvbnRlbnQ6ICcnOwotICAgIHBvc2l0aW9uOiBhYnNvbHV0
ZTsKLSAgICB0b3A6IDEwMCU7Ci0gICAgcmlnaHQ6IDMwcHg7Ci0gICAgYm9yZGVyOiAxM3B4IHNv
bGlkIHRyYW5zcGFyZW50OwotICAgIGJvcmRlci10b3AtY29sb3I6IHJnYmEoMCwgMCwgMCwgLjA0
KTsKLX0KLQotLyoqYm9keSovLmxlYXJuLWJhciA+IC5sZWFybiB7Ci0gICAgcG9zaXRpb246IGFi
c29sdXRlOwotICAgIHdpZHRoOiAyNzJweDsKLSAgICB0b3A6IDhweDsKLSAgICBsZWZ0OiAtMzAw
cHg7Ci0gICAgcGFkZGluZzogMTBweDsKLSAgICBib3JkZXItcmFkaXVzOiA1cHg7Ci0gICAgYmFj
a2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAuNik7Ci0gICAgdHJhbnNpdGlvbi1w
cm9wZXJ0eTogbGVmdDsKLSAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiA1MDBtczsKLX0KLQotQG1l
ZGlhIChtaW4td2lkdGg6IDg5OXB4KSB7Ci0gICAgLyoqYm9keSovLmxlYXJuLWJhciB7Ci0gICAg
d2lkdGg6IGF1dG87Ci0gICAgbWFyZ2luOiAwIDAgMCAzMDBweDsKLSAgICB9Ci0gICAgLyoqYm9k
eSovLmxlYXJuLWJhciA+IC5sZWFybiB7Ci0gICAgbGVmdDogOHB4OwotICAgIH0KLSAgICAvKipi
b2R5Ki8ubGVhcm4tYmFyICN0b2RvYXBwIHsKLSAgICB3aWR0aDogNTUwcHg7Ci0gICAgbWFyZ2lu
OiAxMzBweCBhdXRvIDQwcHggYXV0bzsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9qcXVlcnkvYm93ZXJfY29tcG9uZW50cy90b2RvbXZjLWNvbW1vbi9iYXNlLmpzIGIvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvanF1ZXJ5L2Jvd2VyX2NvbXBvbmVudHMvdG9kb212Yy1jb21tb24vYmFzZS5qcwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjliZjQyNDBmYWQ5YTljMTE5NGM4MTU4NmRjMjkx
NmJlYzFjY2E3OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9qcXVlcnkvYm93ZXJfY29tcG9uZW50cy90b2RvbXZjLWNvbW1vbi9iYXNl
LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMjA5ICswLDAgQEAKLShmdW5jdGlvbiAoKSB7Ci0gICAg
J3VzZSBzdHJpY3QnOwotCi0gICAgLy8gVW5kZXJzY29yZSdzIFRlbXBsYXRlIE1vZHVsZQotICAg
IC8vIENvdXJ0ZXN5IG9mIHVuZGVyc2NvcmVqcy5vcmcKLSAgICB2YXIgXyA9IChmdW5jdGlvbiAo
XykgewotICAgIF8uZGVmYXVsdHMgPSBmdW5jdGlvbiAob2JqZWN0KSB7Ci0gICAgaWYgKCFvYmpl
Y3QpIHsKLSAgICByZXR1cm4gb2JqZWN0OwotICAgIH0KLSAgICBmb3IgKHZhciBhcmdzSW5kZXgg
PSAxLCBhcmdzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsgYXJnc0luZGV4IDwgYXJnc0xlbmd0
aDsgYXJnc0luZGV4KyspIHsKLSAgICB2YXIgaXRlcmFibGUgPSBhcmd1bWVudHNbYXJnc0luZGV4
XTsKLSAgICBpZiAoaXRlcmFibGUpIHsKLSAgICBmb3IgKHZhciBrZXkgaW4gaXRlcmFibGUpIHsK
LSAgICBpZiAob2JqZWN0W2tleV0gPT0gbnVsbCkgewotICAgIG9iamVjdFtrZXldID0gaXRlcmFi
bGVba2V5XTsKLSAgICB9Ci0gICAgfQotICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG9iamVjdDsK
LSAgICB9Ci0KLSAgICAvLyBCeSBkZWZhdWx0LCBVbmRlcnNjb3JlIHVzZXMgRVJCLXN0eWxlIHRl
bXBsYXRlIGRlbGltaXRlcnMsIGNoYW5nZSB0aGUKLSAgICAvLyBmb2xsb3dpbmcgdGVtcGxhdGUg
c2V0dGluZ3MgdG8gdXNlIGFsdGVybmF0aXZlIGRlbGltaXRlcnMuCi0gICAgXy50ZW1wbGF0ZVNl
dHRpbmdzID0gewotICAgIGV2YWx1YXRlICAgIDogLzwlKFtcc1xTXSs/KSU+L2csCi0gICAgaW50
ZXJwb2xhdGUgOiAvPCU9KFtcc1xTXSs/KSU+L2csCi0gICAgZXNjYXBlICAgICAgOiAvPCUtKFtc
c1xTXSs/KSU+L2cKLSAgICB9OwotCi0gICAgLy8gV2hlbiBjdXN0b21pemluZyBgdGVtcGxhdGVT
ZXR0aW5nc2AsIGlmIHlvdSBkb24ndCB3YW50IHRvIGRlZmluZSBhbgotICAgIC8vIGludGVycG9s
YXRpb24sIGV2YWx1YXRpb24gb3IgZXNjYXBpbmcgcmVnZXgsIHdlIG5lZWQgb25lIHRoYXQgaXMK
LSAgICAvLyBndWFyYW50ZWVkIG5vdCB0byBtYXRjaC4KLSAgICB2YXIgbm9NYXRjaCA9IC8oLile
LzsKLQotICAgIC8vIENlcnRhaW4gY2hhcmFjdGVycyBuZWVkIHRvIGJlIGVzY2FwZWQgc28gdGhh
dCB0aGV5IGNhbiBiZSBwdXQgaW50byBhCi0gICAgLy8gc3RyaW5nIGxpdGVyYWwuCi0gICAgdmFy
IGVzY2FwZXMgPSB7Ci0gICAgIiciOiAgICAgICInIiwKLSAgICAnXFwnOiAgICAgJ1xcJywKLSAg
ICAnXHInOiAgICAgJ3InLAotICAgICdcbic6ICAgICAnbicsCi0gICAgJ1x0JzogICAgICd0JywK
LSAgICAnXHUyMDI4JzogJ3UyMDI4JywKLSAgICAnXHUyMDI5JzogJ3UyMDI5JwotICAgIH07Ci0K
LSAgICB2YXIgZXNjYXBlciA9IC9cXHwnfFxyfFxufFx0fFx1MjAyOHxcdTIwMjkvZzsKLQotICAg
IC8vIEphdmFTY3JpcHQgbWljcm8tdGVtcGxhdGluZywgc2ltaWxhciB0byBKb2huIFJlc2lnJ3Mg
aW1wbGVtZW50YXRpb24uCi0gICAgLy8gVW5kZXJzY29yZSB0ZW1wbGF0aW5nIGhhbmRsZXMgYXJi
aXRyYXJ5IGRlbGltaXRlcnMsIHByZXNlcnZlcyB3aGl0ZXNwYWNlLAotICAgIC8vIGFuZCBjb3Jy
ZWN0bHkgZXNjYXBlcyBxdW90ZXMgd2l0aGluIGludGVycG9sYXRlZCBjb2RlLgotICAgIF8udGVt
cGxhdGUgPSBmdW5jdGlvbih0ZXh0LCBkYXRhLCBzZXR0aW5ncykgewotICAgIHZhciByZW5kZXI7
Ci0gICAgc2V0dGluZ3MgPSBfLmRlZmF1bHRzKHt9LCBzZXR0aW5ncywgXy50ZW1wbGF0ZVNldHRp
bmdzKTsKLQotICAgIC8vIENvbWJpbmUgZGVsaW1pdGVycyBpbnRvIG9uZSByZWd1bGFyIGV4cHJl
c3Npb24gdmlhIGFsdGVybmF0aW9uLgotICAgIHZhciBtYXRjaGVyID0gbmV3IFJlZ0V4cChbCi0g
ICAgKHNldHRpbmdzLmVzY2FwZSB8fCBub01hdGNoKS5zb3VyY2UsCi0gICAgKHNldHRpbmdzLmlu
dGVycG9sYXRlIHx8IG5vTWF0Y2gpLnNvdXJjZSwKLSAgICAoc2V0dGluZ3MuZXZhbHVhdGUgfHwg
bm9NYXRjaCkuc291cmNlCi0gICAgXS5qb2luKCd8JykgKyAnfCQnLCAnZycpOwotCi0gICAgLy8g
Q29tcGlsZSB0aGUgdGVtcGxhdGUgc291cmNlLCBlc2NhcGluZyBzdHJpbmcgbGl0ZXJhbHMgYXBw
cm9wcmlhdGVseS4KLSAgICB2YXIgaW5kZXggPSAwOwotICAgIHZhciBzb3VyY2UgPSAiX19wKz0n
IjsKLSAgICB0ZXh0LnJlcGxhY2UobWF0Y2hlciwgZnVuY3Rpb24obWF0Y2gsIGVzY2FwZSwgaW50
ZXJwb2xhdGUsIGV2YWx1YXRlLCBvZmZzZXQpIHsKLSAgICBzb3VyY2UgKz0gdGV4dC5zbGljZShp
bmRleCwgb2Zmc2V0KQotICAgIC5yZXBsYWNlKGVzY2FwZXIsIGZ1bmN0aW9uKG1hdGNoKSB7IHJl
dHVybiAnXFwnICsgZXNjYXBlc1ttYXRjaF07IH0pOwotCi0gICAgaWYgKGVzY2FwZSkgewotICAg
IHNvdXJjZSArPSAiJytcbigoX190PSgiICsgZXNjYXBlICsgIikpPT1udWxsPycnOl8uZXNjYXBl
KF9fdCkpK1xuJyI7Ci0gICAgfQotICAgIGlmIChpbnRlcnBvbGF0ZSkgewotICAgIHNvdXJjZSAr
PSAiJytcbigoX190PSgiICsgaW50ZXJwb2xhdGUgKyAiKSk9PW51bGw/Jyc6X190KStcbiciOwot
ICAgIH0KLSAgICBpZiAoZXZhbHVhdGUpIHsKLSAgICBzb3VyY2UgKz0gIic7XG4iICsgZXZhbHVh
dGUgKyAiXG5fX3ArPSciOwotICAgIH0KLSAgICBpbmRleCA9IG9mZnNldCArIG1hdGNoLmxlbmd0
aDsKLSAgICByZXR1cm4gbWF0Y2g7Ci0gICAgfSk7Ci0gICAgc291cmNlICs9ICInO1xuIjsKLQot
ICAgIC8vIElmIGEgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCwgcGxhY2UgZGF0YSB2YWx1ZXMg
aW4gbG9jYWwgc2NvcGUuCi0gICAgaWYgKCFzZXR0aW5ncy52YXJpYWJsZSkgc291cmNlID0gJ3dp
dGgob2JqfHx7fSl7XG4nICsgc291cmNlICsgJ31cbic7Ci0KLSAgICBzb3VyY2UgPSAidmFyIF9f
dCxfX3A9JycsX19qPUFycmF5LnByb3RvdHlwZS5qb2luLCIgKwotICAgICJwcmludD1mdW5jdGlv
bigpe19fcCs9X19qLmNhbGwoYXJndW1lbnRzLCcnKTt9O1xuIiArCi0gICAgc291cmNlICsgInJl
dHVybiBfX3A7XG4iOwotCi0gICAgdHJ5IHsKLSAgICByZW5kZXIgPSBuZXcgRnVuY3Rpb24oc2V0
dGluZ3MudmFyaWFibGUgfHwgJ29iaicsICdfJywgc291cmNlKTsKLSAgICB9IGNhdGNoIChlKSB7
Ci0gICAgZS5zb3VyY2UgPSBzb3VyY2U7Ci0gICAgdGhyb3cgZTsKLSAgICB9Ci0KLSAgICBpZiAo
ZGF0YSkgcmV0dXJuIHJlbmRlcihkYXRhLCBfKTsKLSAgICB2YXIgdGVtcGxhdGUgPSBmdW5jdGlv
bihkYXRhKSB7Ci0gICAgcmV0dXJuIHJlbmRlci5jYWxsKHRoaXMsIGRhdGEsIF8pOwotICAgIH07
Ci0KLSAgICAvLyBQcm92aWRlIHRoZSBjb21waWxlZCBmdW5jdGlvbiBzb3VyY2UgYXMgYSBjb252
ZW5pZW5jZSBmb3IgcHJlY29tcGlsYXRpb24uCi0gICAgdGVtcGxhdGUuc291cmNlID0gJ2Z1bmN0
aW9uKCcgKyAoc2V0dGluZ3MudmFyaWFibGUgfHwgJ29iaicpICsgJyl7XG4nICsgc291cmNlICsg
J30nOwotCi0gICAgcmV0dXJuIHRlbXBsYXRlOwotICAgIH07Ci0KLSAgICByZXR1cm4gXzsKLSAg
ICB9KSh7fSk7Ci0KLSAgICBpZiAobG9jYXRpb24uaG9zdG5hbWUgPT09ICd0b2RvbXZjLmNvbScp
IHsKLSAgICB3aW5kb3cuX2dhcSA9IFtbJ19zZXRBY2NvdW50JywnVUEtMzEwODEwNjItMSddLFsn
X3RyYWNrUGFnZXZpZXcnXV07KGZ1bmN0aW9uKGQsdCl7dmFyIGc9ZC5jcmVhdGVFbGVtZW50KHQp
LHM9ZC5nZXRFbGVtZW50c0J5VGFnTmFtZSh0KVswXTtnLnNyYz0nLy93d3cuZ29vZ2xlLWFuYWx5
dGljcy5jb20vZ2EuanMnO3MucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZyxzKX0oZG9jdW1lbnQs
J3NjcmlwdCcpKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiByZWRpcmVjdCgpIHsKLSAgICBpZiAo
bG9jYXRpb24uaG9zdG5hbWUgPT09ICd0YXN0ZWpzLmdpdGh1Yi5pbycpIHsKLSAgICBsb2NhdGlv
bi5ocmVmID0gbG9jYXRpb24uaHJlZi5yZXBsYWNlKCd0YXN0ZWpzLmdpdGh1Yi5pby90b2RvbXZj
JywgJ3RvZG9tdmMuY29tJyk7Ci0gICAgfQotICAgIH0KLQotICAgIGZ1bmN0aW9uIGZpbmRSb290
KCkgewotICAgIHZhciBiYXNlOwotCi0gICAgWy9sYWJzLywgL1x3Ki1leGFtcGxlcy9dLmZvckVh
Y2goZnVuY3Rpb24gKGhyZWYpIHsKLSAgICB2YXIgbWF0Y2ggPSBsb2NhdGlvbi5ocmVmLm1hdGNo
KGhyZWYpOwotCi0gICAgaWYgKCFiYXNlICYmIG1hdGNoKSB7Ci0gICAgYmFzZSA9IGxvY2F0aW9u
LmhyZWYuaW5kZXhPZihtYXRjaCk7Ci0gICAgfQotICAgIH0pOwotCi0gICAgcmV0dXJuIGxvY2F0
aW9uLmhyZWYuc3Vic3RyKDAsIGJhc2UpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGdldEZpbGUo
ZmlsZSwgY2FsbGJhY2spIHsKLSAgICBpZiAoIWxvY2F0aW9uLmhvc3QpIHsKLSAgICByZXR1cm4g
Y29uc29sZS5pbmZvKCdNaXNzIHRoZSBpbmZvIGJhcj8gUnVuIFRvZG9NVkMgZnJvbSBhIHNlcnZl
ciB0byBhdm9pZCBhIGNyb3NzLW9yaWdpbiBlcnJvci4nKTsKLSAgICB9Ci0KLSAgICB2YXIgeGhy
ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7Ci0KLSAgICB4aHIub3BlbignR0VUJywgZmluZFJvb3Qo
KSArIGZpbGUsIHRydWUpOwotICAgIHhoci5zZW5kKCk7Ci0KLSAgICB4aHIub25sb2FkID0gZnVu
Y3Rpb24gKCkgewotICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDAgJiYgY2FsbGJhY2spIHsKLSAg
ICBjYWxsYmFjayh4aHIucmVzcG9uc2VUZXh0KTsKLSAgICB9Ci0gICAgfTsKLSAgICB9Ci0KLSAg
ICBmdW5jdGlvbiBMZWFybihsZWFybkpTT04sIGNvbmZpZykgewotICAgIGlmICghKHRoaXMgaW5z
dGFuY2VvZiBMZWFybikpIHsKLSAgICByZXR1cm4gbmV3IExlYXJuKGxlYXJuSlNPTiwgY29uZmln
KTsKLSAgICB9Ci0KLSAgICB2YXIgdGVtcGxhdGUsIGZyYW1ld29yazsKLQotICAgIGlmICh0eXBl
b2YgbGVhcm5KU09OICE9PSAnb2JqZWN0JykgewotICAgIHRyeSB7Ci0gICAgbGVhcm5KU09OID0g
SlNPTi5wYXJzZShsZWFybkpTT04pOwotICAgIH0gY2F0Y2ggKGUpIHsKLSAgICByZXR1cm47Ci0g
ICAgfQotICAgIH0KLQotICAgIGlmIChjb25maWcpIHsKLSAgICB0ZW1wbGF0ZSA9IGNvbmZpZy50
ZW1wbGF0ZTsKLSAgICBmcmFtZXdvcmsgPSBjb25maWcuZnJhbWV3b3JrOwotICAgIH0KLQotICAg
IGlmICghdGVtcGxhdGUgJiYgbGVhcm5KU09OLnRlbXBsYXRlcykgewotICAgIHRlbXBsYXRlID0g
bGVhcm5KU09OLnRlbXBsYXRlcy50b2RvbXZjOwotICAgIH0KLQotICAgIGlmICghZnJhbWV3b3Jr
ICYmIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWZyYW1ld29ya10nKSkgewotICAgIGZy
YW1ld29yayA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWZyYW1ld29ya10nKS5nZXRB
dHRyaWJ1dGUoJ2RhdGEtZnJhbWV3b3JrJyk7Ci0gICAgfQotCi0KLSAgICBpZiAodGVtcGxhdGUg
JiYgbGVhcm5KU09OW2ZyYW1ld29ya10pIHsKLSAgICB0aGlzLmZyYW1ld29ya0pTT04gPSBsZWFy
bkpTT05bZnJhbWV3b3JrXTsKLSAgICB0aGlzLnRlbXBsYXRlID0gdGVtcGxhdGU7Ci0KLSAgICB0
aGlzLmFwcGVuZCgpOwotICAgIH0KLSAgICB9Ci0KLSAgICBMZWFybi5wcm90b3R5cGUuYXBwZW5k
ID0gZnVuY3Rpb24gKCkgewotICAgIHZhciBhc2lkZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J2FzaWRlJyk7Ci0gICAgYXNpZGUuaW5uZXJIVE1MID0gXy50ZW1wbGF0ZSh0aGlzLnRlbXBsYXRl
LCB0aGlzLmZyYW1ld29ya0pTT04pOwotICAgIGFzaWRlLmNsYXNzTmFtZSA9ICdsZWFybic7Ci0K
LSAgICAvLyBMb2NhbGl6ZSBkZW1vIGxpbmtzCi0gICAgdmFyIGRlbW9MaW5rcyA9IGFzaWRlLnF1
ZXJ5U2VsZWN0b3JBbGwoJy5kZW1vLWxpbmsnKTsKLSAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFj
aC5jYWxsKGRlbW9MaW5rcywgZnVuY3Rpb24gKGRlbW9MaW5rKSB7Ci0gICAgZGVtb0xpbmsuc2V0
QXR0cmlidXRlKCdocmVmJywgZmluZFJvb3QoKSArIGRlbW9MaW5rLmdldEF0dHJpYnV0ZSgnaHJl
ZicpKTsKLSAgICB9KTsKLQotICAgIGRvY3VtZW50LmJvZHkuY2xhc3NOYW1lID0gKGRvY3VtZW50
LmJvZHkuY2xhc3NOYW1lICsgJyBsZWFybi1iYXInKS50cmltKCk7Ci0gICAgZG9jdW1lbnQuYm9k
eS5pbnNlcnRBZGphY2VudEhUTUwoJ2FmdGVyQmVnaW4nLCBhc2lkZS5vdXRlckhUTUwpOwotICAg
IH07Ci0KLSAgICByZWRpcmVjdCgpOwotICAgIGdldEZpbGUoJ2xlYXJuLmpzb24nLCBMZWFybik7
Ci19KSgpOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5L2Jvd2VyX2NvbXBvbmVudHMv
dG9kb212Yy1jb21tb24vYmcucG5nIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5L2Jvd2VyX2NvbXBvbmVu
dHMvdG9kb212Yy1jb21tb24vYmcucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBi
MmE3NjAwODI1ZWUxMWYyMTg0OWVkNDc1NDk5YzdkMWVjYmNjODcwLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/
ZDAwMDAxCgpsaXRlcmFsIDIxMjYKemNtVi1VMihrQnhQKTxoOzNLfExrMDAwZTFOSkxUcTAwM2tG
MDAza0gwe3tSMzRVQiFxMDAwMENQKXQtcz8oWGpFCno+Kzl5YD1ISzdudD1+M3QwMDBPNU5rbDxa
Y3dUanUoUTR2fjdLV0VXI1ltP2xLX3Y7VG18IUZjKUBOd0VubXRzaAp6eCFPfno4MUpUM3BGc20+
bT0wNGhWYV9sWGxfYm09K007PWVJPCUkck8ydGFgc3VoKlNyI1BPdyo/YWRxIU8hQ1YKeiowJmIp
cmtDQ0VWKTFuSXVpTEJudFVILU1KSTsmcVlnenxkQE5obm5fYWJpMmdgcHU0TkFNVmlkM2hTJT9x
dXp+CnpqbEpmKHg4Y2o8UEdjam4qSitheyZINXAqbjUkNWUzPzxLQ2M/bzA2bUFzTlNiZ1BXTz9Q
eiNDem48IT17PntWUwp6VVZFUDFtc2c5YF5PRlVoU081cnRYSGhSbHlVMmk+NiRCVD1nbEdge0ps
Y3RHSHJ3UkltKTZCdXU2NWpMUW5eSDgKenZsOWxacVVCQSslcXZNNVhDK3lZQG1mQShZQn5YUD1l
fDY8eyUkXmVVOG5ySz92MmNjYkBKb201Q0c+cktBTDdKCnpwbEhFSWF2VnB8MHAxJm0hR2BUaT88
N2laO31ARzcjWil9S20lMiFGSG5RMComP1BMUilHIUhBYUhnVSNjfCRkegp6cGojMEhtZWFkSWU+
YCMpPUpqa2J7Qj1GS25VM3BjLSZZQGpfajYoaDRZfitVcTxQVTM2Qzs1Yj1NXkZgPXAxZEkKems8
Q1FPUE5hNz4hXko9TEh1bngxeGk0UVhLLVl7Jk1vVDhreTZWYjljfFdobk93Rn5jPTN6T3k4YWdr
dGxpUzYjCnpgIzhGYDlIKUQ9Ym1rOUI1TW5XJl9yIylmJGMrOyRMU3ItQF5BbjhkaGN+SXF1dXY+
ak9LN3B3N0xKOyZYMGkxQwp6R01zSGRQMU9zQG55JCRqIT5YQWlpJTdicDVrPmBweU5BIX5lcGIp
KClwOXpSNFlsNno9VX17Q0lkaDF6KEZwQW8KelFJVyE7MHpwQ3lDNCo3WUxrWkNPQGN1bDBSXyZ6
Z2hzQThFayl6JTwhcC1idnNzcGxZWTJ9UDshdjRDWWo5a21GCnpiMGJOX200VipmXllaTW9iMihq
M3BLan43diNadGtzPUlvK3tzdSVXaXVrZEpIJGI/ZlpraUE9UFlfM09oREJrbwp6KExUUUhZJkZe
XjJoRy1ZYCpaOTN2Yn5jPyooSmNoRGpUZkNzP3pSbSpgKk4qVi0kPT9RcXRoblNyKj9PUzNzaksK
em88X1VeZnt+YWc2MHVsPmpOcEthOTJ7QE5IK1NzdFglQH14QipKayFsfVBaMWNDbEluc359NV4h
Um5jVWsqcm1BCnolU0lWZ3Q1OEVReExKK09pRnE8eXU0ZU9EfDlMdDNkTnNlZnhPdXEpRCYkXyVq
MERncUN5MWd6Y3x0VEQzKm1lZQp6ez0lfDxgYH1fSHlwaE91ezspeGtSZytRbkhDQzNUZitrc3Bx
VjYqfFFLLVJjcUR9ND5La0J1d3F1eVpMVXB8Z3IKelBVYlViRmJCclBkMXhPYF5DKnItaTNwOSpG
IyhPQmghNFd5QGFDJiohfE98R1hjakRBJlloRns7Y0Q3Km8oR1NeCnpAcFFTRTcpeF84MT1ReWpl
NipMUSNUWHUtNyhvO1M4dTN0cERBPFNnY0tjS09wbUE7PUhCWlNAT0ZUQF9YT3Z4cQp6Kk58M0tM
eXRnekg2R1UmJlVvYzRaems0bHVtM1B7OT9mcEk0K1FHUEordjZgMWxmUnEzTGNTKihNKldLK3xi
JU8KemUkej4wX2RkaiVobUNzcGVYZGhZUn0taTlBPUNgRW9DaFVZdUh+XnghOSt8JihQZ2IqPkNr
PD05anwpKkB4eWZUCnpwUCMrS3Q8fTM5YnwzV2w0ZnhUKCtHP2FIPmdHXmRATUVhVU9KUmZ5NTVU
dEZJN15ZKVZ1TVU9N1BwMHk1NWpTfgp6K1RKKWlnTXlycWtYO3dVOGo2OGlJRHRxSlloU19EM19P
ZW0tQGc2bWVfUmZpUX11VF9LLUEtOXFHJX1nazNFOWMKeiE4YEtnc01OWG0pYmVsb1BmTXFsKnwm
JE0+MXFgaSFjWSlSRlluak5ZdSpnU3ZAOFhlYlY3JX14WUw+NilHSlBKCnpKcEE3SzMxbGNKdUlG
S1N3LXt4NEZYMEsyQXopflhnPGBzT3UkNHxePE1DN0AreGJ3eHNHZ1R2SklBTGpQezY4TAp6OEFZ
dVNHUzBHVWdrNldgdjRXO1J5KnVvRVRudWxQaXw1NzMlbHYqWnh3I3Y2eVVRXk1PZmNwVCNWOFJJ
RFYjI04KekQxYCtBZW1zT2gpd2JXREV4VmNmcEt6KWp5Vj08fiZaWFBnNmN8WkRFN1U0Yms8RF4+
LSheWEpYNFl6b2lOUnZMCnp5dVk3fjI2dy1QXlp3JTZGfXNoQndWMiQwMmM4UnNTVXk2ZE05MmRp
Q0F4aVgzSVVxc3E1aWc2PlVfIVZ5KnE1JAp6am19MTZ0SnIrUVomVD9Ia2twZUl3VlgtcjFFST1A
JVpsdDs2PHR3SDg2SUQ+ZyptaiZFIUEpKSVnWEo9eDZ1I2wKemNLRVA+Yng0cnFWKmtgQkJyWiRN
cWp0e1RzSGN4VUg+OylpQUt9QihLaWxhJlZEJWI/Nm0mXjBXSzReJkVaTkFJCno4QU1Zc18lJEQl
fE0rQCtjUXFMLWhpNHlHPmgqandkaWkhVzF7fXA+Wmh3Rll0XzRTdTFralk5PGJBWmp6fjllawp6
X0RpYXIrQWZKRlBfOUB5bVVvJEtXPjwtNWAhJFZOT0kxeShFRFNINFdwQ2lqRV8+YWwhTnQ9XmVW
RVIjdUoxPWIKejtCV0YySWd5RjVMZXhWK3llYyRLaW47QWlAbXlvO0c+ekomanJkVyNlY1hoSVpw
aDVPWXF3X1BFZmNGNTY8TzE5CnpMKThyIUtNKClpZjBgQD9XNChKZGMpN1dvUEdeJj0kPHpVc00r
SENXYWtDXjN0WnhrK1BqUUd9Qj5aNTxaNlZ4dwp6QkBIclYkJmx+QFRhajcwcGNle2lTdVJMc1Vj
ekRZXzVUbkRxOFB5X1Ezd2hgRDghNGpLO3ZGZFJQK1EwPXpKeSoKenp1V2QlIWFpQER7fCpKPEk7
T0QmaSVse0pwLTgqUHUzVkdMV2l5azZ2I1htUXF3YC0rJWUkfENKdypAYDV6YjM8CnpFfXojO2tS
aEwmcTVQREc2QG1tKiQ+WnVfWlpFI3EzTWMrTiYxT143aG9oOVFSN2ArTCRjQlA1cHFHPWZxQTB1
aAp6VUJ1a2F4VEZtSCk8fFhidnAyYz1IU2JOa3BYdzczYTVsdjdWJGpiOTIjeVoxNDFAJFg/Rn1K
dDhnSVU3V202bTkKej9lXzs7enNubTZgTFplUD5UPSQpS3I+Wj9rcipVbUZxUjd6eDBDNl5ibWNz
Y0AxQUd0d19yTkg+LVhtJGQqfFE8CnpuJjFMbjB1Nz1sJklMcz4lQ2tKcGBEaUc5RjE4eDROZSts
ZzwjaT9lN2pMJXg7NFpuUmtOXk14MDcqcW9NNk48JApFZig+ME4hMmtkTgoKZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL2pxdWVyeS9pbmRleC5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5L2luZGV4
Lmh0bWwKaW5kZXggYzQ4OTNjZjAwMWFiYTcyNmIyZDE5NzYyM2YyZTY3MWVjMDdlZjRmNy4uNDE0
YWM1OGY2MWFiYzJiNzIyZGI1M2ZlZWNlN2UwM2U1MmZkMzM0NCAxMDA2NDQKLS0tIGEvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvanF1ZXJ5L2luZGV4Lmh0bWwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5L2luZGV4Lmh0
bWwKQEAgLTEsNTIgKzEsNjEgQEAKIDwhZG9jdHlwZSBodG1sPgogPGh0bWwgbGFuZz0iZW4iIGRh
dGEtZnJhbWV3b3JrPSJqcXVlcnkiPgogICAgIDxoZWFkPgotICAgIDxtZXRhIGNoYXJzZXQ9InV0
Zi04Ij4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklF
PWVkZ2UiPgotICAgIDx0aXRsZT5qUXVlcnkg4oCiIFRvZG9NVkM8L3RpdGxlPgotICAgIDxsaW5r
IHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iYm93ZXJfY29tcG9uZW50cy90b2RvbXZjLWNvbW1vbi9i
YXNlLmNzcyI+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3MvYXBwLmNzcyI+
CisgICAgICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICAgICAgPHRpdGxlPmpRdWVyeSDi
gKIgVG9kb01WQzwvdGl0bGU+CisgICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0i
bm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuY3NzIj4KKyAgICAgICAgPGxpbmsgcmVs
PSJzdHlsZXNoZWV0IiBocmVmPSJub2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL2luZGV4LmNz
cyI+CisgICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL2FwcC5jc3MiPgog
ICAgIDwvaGVhZD4KICAgICA8Ym9keT4KLSAgICA8c2VjdGlvbiBpZD0idG9kb2FwcCI+Ci0gICAg
PGhlYWRlciBpZD0iaGVhZGVyIj4KLSAgICA8aDE+dG9kb3M8L2gxPgotICAgIDxpbnB1dCBpZD0i
bmV3LXRvZG8iIHBsYWNlaG9sZGVyPSJXaGF0IG5lZWRzIHRvIGJlIGRvbmU/IiBhdXRvZm9jdXM+
Ci0gICAgPC9oZWFkZXI+Ci0gICAgPHNlY3Rpb24gaWQ9Im1haW4iPgotICAgIDxpbnB1dCBpZD0i
dG9nZ2xlLWFsbCIgdHlwZT0iY2hlY2tib3giPgotICAgIDxsYWJlbCBmb3I9InRvZ2dsZS1hbGwi
Pk1hcmsgYWxsIGFzIGNvbXBsZXRlPC9sYWJlbD4KLSAgICA8dWwgaWQ9InRvZG8tbGlzdCI+PC91
bD4KLSAgICA8L3NlY3Rpb24+Ci0gICAgPGZvb3RlciBpZD0iZm9vdGVyIj4KLSAgICA8c3BhbiBp
ZD0idG9kby1jb3VudCI+PHN0cm9uZz4wPC9zdHJvbmc+IGl0ZW0gbGVmdDwvc3Bhbj4KLSAgICA8
YnV0dG9uIGlkPSJjbGVhci1jb21wbGV0ZWQiPkNsZWFyIGNvbXBsZXRlZDwvYnV0dG9uPgotICAg
IDwvZm9vdGVyPgotICAgIDwvc2VjdGlvbj4KLSAgICA8Zm9vdGVyIGlkPSJpbmZvIj4KLSAgICA8
cD5Eb3VibGUtY2xpY2sgdG8gZWRpdCBhIHRvZG88L3A+Ci0gICAgPHA+Q3JlYXRlZCBieSA8YSBo
cmVmPSJodHRwOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMiPlNpbmRyZSBTb3JodXM8L2E+PC9w
PgotICAgIDxwPlBhcnQgb2YgPGEgaHJlZj0iaHR0cDovL3RvZG9tdmMuY29tIj5Ub2RvTVZDPC9h
PjwvcD4KLSAgICA8L2Zvb3Rlcj4KLSAgICA8c2NyaXB0IGlkPSJ0b2RvLXRlbXBsYXRlIiB0eXBl
PSJ0ZXh0L3gtaGFuZGxlYmFycy10ZW1wbGF0ZSI+Ci0gICAge3sjdGhpc319Ci0gICAgPGxpIHt7
I2lmIGNvbXBsZXRlZH19Y2xhc3M9ImNvbXBsZXRlZCJ7ey9pZn19IGRhdGEtaWQ9Int7aWR9fSI+
Ci0gICAgPGRpdiBjbGFzcz0idmlldyI+Ci0gICAgPGlucHV0IGNsYXNzPSJ0b2dnbGUiIHR5cGU9
ImNoZWNrYm94IiB7eyNpZiBjb21wbGV0ZWR9fWNoZWNrZWR7ey9pZn19PgotICAgIDxsYWJlbD57
e3RpdGxlfX08L2xhYmVsPgotICAgIDxidXR0b24gY2xhc3M9ImRlc3Ryb3kiPjwvYnV0dG9uPgot
ICAgIDwvZGl2PgotICAgIDxpbnB1dCBjbGFzcz0iZWRpdCIgdmFsdWU9Int7dGl0bGV9fSI+Ci0g
ICAgPC9saT4KLSAgICB7ey90aGlzfX0KLSAgICA8L3NjcmlwdD4KLSAgICA8c2NyaXB0IGlkPSJm
b290ZXItdGVtcGxhdGUiIHR5cGU9InRleHQveC1oYW5kbGViYXJzLXRlbXBsYXRlIj4KLSAgICA8
c3BhbiBpZD0idG9kby1jb3VudCI+PHN0cm9uZz57e2FjdGl2ZVRvZG9Db3VudH19PC9zdHJvbmc+
IHt7YWN0aXZlVG9kb1dvcmR9fSBsZWZ0PC9zcGFuPgotICAgIHt7I2lmIGNvbXBsZXRlZFRvZG9z
fX08YnV0dG9uIGlkPSJjbGVhci1jb21wbGV0ZWQiPkNsZWFyIGNvbXBsZXRlZCAoe3tjb21wbGV0
ZWRUb2Rvc319KTwvYnV0dG9uPnt7L2lmfX0KLSAgICA8L3NjcmlwdD4KLSAgICA8c2NyaXB0IHNy
Yz0iYm93ZXJfY29tcG9uZW50cy90b2RvbXZjLWNvbW1vbi9iYXNlLmpzIj48L3NjcmlwdD4KLSAg
ICA8c2NyaXB0IHNyYz0iYm93ZXJfY29tcG9uZW50cy9qcXVlcnkvanF1ZXJ5LmpzIj48L3Njcmlw
dD4KLSAgICA8c2NyaXB0IHNyYz0iYm93ZXJfY29tcG9uZW50cy9oYW5kbGViYXJzL2hhbmRsZWJh
cnMuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgc3JjPSJqcy9hcHAuanMiPjwvc2NyaXB0Pgor
ICAgICAgICA8c2VjdGlvbiBpZD0idG9kb2FwcCI+CisgICAgICAgICAgICA8aGVhZGVyIGlkPSJo
ZWFkZXIiPgorICAgICAgICAgICAgICAgIDxoMT50b2RvczwvaDE+CisgICAgICAgICAgICAgICAg
PGlucHV0IGlkPSJuZXctdG9kbyIgcGxhY2Vob2xkZXI9IldoYXQgbmVlZHMgdG8gYmUgZG9uZT8i
IGF1dG9mb2N1cz4KKyAgICAgICAgICAgIDwvaGVhZGVyPgorICAgICAgICAgICAgPHNlY3Rpb24g
aWQ9Im1haW4iPgorICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0idG9nZ2xlLWFsbCIgdHlwZT0i
Y2hlY2tib3giPgorICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9InRvZ2dsZS1hbGwiPk1hcmsg
YWxsIGFzIGNvbXBsZXRlPC9sYWJlbD4KKyAgICAgICAgICAgICAgICA8dWwgaWQ9InRvZG8tbGlz
dCI+PC91bD4KKyAgICAgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgICAgIDxmb290ZXIgaWQ9
ImZvb3RlciI+PC9mb290ZXI+CisgICAgICAgIDwvc2VjdGlvbj4KKyAgICAgICAgPGZvb3RlciBp
ZD0iaW5mbyI+CisgICAgICAgICAgICA8cD5Eb3VibGUtY2xpY2sgdG8gZWRpdCBhIHRvZG88L3A+
CisgICAgICAgICAgICA8cD5DcmVhdGVkIGJ5IDxhIGhyZWY9Imh0dHA6Ly9zaW5kcmVzb3JodXMu
Y29tIj5TaW5kcmUgU29yaHVzPC9hPjwvcD4KKyAgICAgICAgICAgIDxwPlBhcnQgb2YgPGEgaHJl
Zj0iaHR0cDovL3RvZG9tdmMuY29tIj5Ub2RvTVZDPC9hPjwvcD4KKyAgICAgICAgPC9mb290ZXI+
CisgICAgICAgIDxzY3JpcHQgaWQ9InRvZG8tdGVtcGxhdGUiIHR5cGU9InRleHQveC1oYW5kbGVi
YXJzLXRlbXBsYXRlIj4KKyAgICAgICAgICAgIHt7I3RoaXN9fQorICAgICAgICAgICAgPGxpIHt7
I2lmIGNvbXBsZXRlZH19Y2xhc3M9ImNvbXBsZXRlZCJ7ey9pZn19IGRhdGEtaWQ9Int7aWR9fSI+
CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmlldyI+CisgICAgICAgICAgICAgICAgICAg
IDxpbnB1dCBjbGFzcz0idG9nZ2xlIiB0eXBlPSJjaGVja2JveCIge3sjaWYgY29tcGxldGVkfX1j
aGVja2Vke3svaWZ9fT4KKyAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7dGl0bGV9fTwvbGFi
ZWw+CisgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRlc3Ryb3kiPjwvYnV0dG9u
PgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0i
ZWRpdCIgdmFsdWU9Int7dGl0bGV9fSI+CisgICAgICAgICAgICA8L2xpPgorICAgICAgICB7ey90
aGlzfX0KKyAgICAgICAgPC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgaWQ9ImZvb3Rlci10ZW1w
bGF0ZSIgdHlwZT0idGV4dC94LWhhbmRsZWJhcnMtdGVtcGxhdGUiPgorICAgICAgICAgICAgPHNw
YW4gaWQ9InRvZG8tY291bnQiPjxzdHJvbmc+e3thY3RpdmVUb2RvQ291bnR9fTwvc3Ryb25nPiB7
e2FjdGl2ZVRvZG9Xb3JkfX0gbGVmdDwvc3Bhbj4KKyAgICAgICAgICAgIDx1bCBpZD0iZmlsdGVy
cyI+CisgICAgICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICAgICAgICA8YSB7eyNlcSBm
aWx0ZXIgJ2FsbCd9fWNsYXNzPSJzZWxlY3RlZCJ7ey9lcX19IGhyZWY9IiMvYWxsIj5BbGw8L2E+
CisgICAgICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGk+CisgICAgICAgICAg
ICAgICAgICAgIDxhIHt7I2VxIGZpbHRlciAnYWN0aXZlJ319Y2xhc3M9InNlbGVjdGVkInt7L2Vx
fX1ocmVmPSIjL2FjdGl2ZSI+QWN0aXZlPC9hPgorICAgICAgICAgICAgICAgIDwvbGk+CisgICAg
ICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICAgICAgICA8YSB7eyNlcSBmaWx0ZXIgJ2Nv
bXBsZXRlZCd9fWNsYXNzPSJzZWxlY3RlZCJ7ey9lcX19aHJlZj0iIy9jb21wbGV0ZWQiPkNvbXBs
ZXRlZDwvYT4KKyAgICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgPC91bD4KKyAgICAg
ICAgICAgIHt7I2lmIGNvbXBsZXRlZFRvZG9zfX08YnV0dG9uIGlkPSJjbGVhci1jb21wbGV0ZWQi
PkNsZWFyIGNvbXBsZXRlZDwvYnV0dG9uPnt7L2lmfX0KKyAgICAgICAgPC9zY3JpcHQ+CisgICAg
ICAgIDwhLS0gPHNjcmlwdCBzcmM9Im5vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmpz
Ij48L3NjcmlwdD4gLS0+CisgICAgICAgIDxzY3JpcHQgc3JjPSJub2RlX21vZHVsZXMvanF1ZXJ5
L2Rpc3QvanF1ZXJ5LmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9Im5vZGVfbW9k
dWxlcy9oYW5kbGViYXJzL2Rpc3QvaGFuZGxlYmFycy5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxz
Y3JpcHQgc3JjPSJub2RlX21vZHVsZXMvZGlyZWN0b3IvYnVpbGQvZGlyZWN0b3IuanMiPjwvc2Ny
aXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0ianMvYXBwLmpzIj48L3NjcmlwdD4KICAgICA8L2Jv
ZHk+CiA8L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9qcXVlcnkvanMvYXBwLmpzIGIv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1
cmUtZXhhbXBsZXMvanF1ZXJ5L2pzL2FwcC5qcwppbmRleCAxMmZiMjRkNTAyNWQzYzg1Y2UyMDM1
ODUxNzc5YmIxMWE3ZTQwM2IzLi4yM2Y0YWVhYWM2NjY0NzFlNGNmNGVjZjBhYjRkN2IzNzg5MWEw
OTVhIDEwMDY0NAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9qcXVlcnkvanMvYXBwLmpzCisrKyBiL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL2pxdWVyeS9qcy9hcHAuanMKQEAgLTEsMTg3ICsxLDE5MiBAQAotLypnbG9iYWwgalF1
ZXJ5LCBIYW5kbGViYXJzICovCisvKmdsb2JhbCBqUXVlcnksIEhhbmRsZWJhcnMsIFJvdXRlciAq
LwogalF1ZXJ5KGZ1bmN0aW9uICgkKSB7CiAgICAgJ3VzZSBzdHJpY3QnOwogCi0gICAgdmFyIFV0
aWxzID0gewotICAgIHV1aWQ6IGZ1bmN0aW9uICgpIHsKLSAgICAvKmpzaGludCBiaXR3aXNlOmZh
bHNlICovCi0gICAgdmFyIGksIHJhbmRvbTsKLSAgICB2YXIgdXVpZCA9ICcnOwotCi0gICAgZm9y
IChpID0gMDsgaSA8IDMyOyBpKyspIHsKLSAgICByYW5kb20gPSBNYXRoLnJhbmRvbSgpICogMTYg
fCAwOwotICAgIGlmIChpID09PSA4IHx8IGkgPT09IDEyIHx8IGkgPT09IDE2IHx8IGkgPT09IDIw
KSB7Ci0gICAgdXVpZCArPSAnLSc7Ci0gICAgfQotICAgIHV1aWQgKz0gKGkgPT09IDEyID8gNCA6
IChpID09PSAxNiA/IChyYW5kb20gJiAzIHwgOCkgOiByYW5kb20pKS50b1N0cmluZygxNik7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHV1aWQ7Ci0gICAgfSwKLSAgICBwbHVyYWxpemU6IGZ1bmN0aW9u
IChjb3VudCwgd29yZCkgewotICAgIHJldHVybiBjb3VudCA9PT0gMSA/IHdvcmQgOiB3b3JkICsg
J3MnOwotICAgIH0sCi0gICAgc3RvcmU6IGZ1bmN0aW9uIChuYW1lc3BhY2UsIGRhdGEpIHsKLSAg
ICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHsKLSAgICByZXR1cm4gbG9jYWxTdG9yYWdlLnNl
dEl0ZW0obmFtZXNwYWNlLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7Ci0gICAgfSBlbHNlIHsKLSAg
ICB2YXIgc3RvcmUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lc3BhY2UpOwotICAgIHJldHVy
biAoc3RvcmUgJiYgSlNPTi5wYXJzZShzdG9yZSkpIHx8IFtdOwotICAgIH0KLSAgICB9Ci0gICAg
fTsKLQotICAgIHZhciBBcHAgPSB7Ci0gICAgaW5pdDogZnVuY3Rpb24gKCkgewotICAgIHRoaXMu
RU5URVJfS0VZID0gMTM7Ci0gICAgdGhpcy50b2RvcyA9IFV0aWxzLnN0b3JlKCd0b2Rvcy1qcXVl
cnknKTsKLSAgICB0aGlzLmNhY2hlRWxlbWVudHMoKTsKLSAgICB0aGlzLmJpbmRFdmVudHMoKTsK
LSAgICB0aGlzLnJlbmRlcigpOwotICAgIH0sCi0gICAgY2FjaGVFbGVtZW50czogZnVuY3Rpb24g
KCkgewotICAgIHRoaXMudG9kb1RlbXBsYXRlID0gSGFuZGxlYmFycy5jb21waWxlKCQoJyN0b2Rv
LXRlbXBsYXRlJykuaHRtbCgpKTsKLSAgICB0aGlzLmZvb3RlclRlbXBsYXRlID0gSGFuZGxlYmFy
cy5jb21waWxlKCQoJyNmb290ZXItdGVtcGxhdGUnKS5odG1sKCkpOwotICAgIHRoaXMuJHRvZG9B
cHAgPSAkKCcjdG9kb2FwcCcpOwotICAgIHRoaXMuJGhlYWRlciA9IHRoaXMuJHRvZG9BcHAuZmlu
ZCgnI2hlYWRlcicpOwotICAgIHRoaXMuJG1haW4gPSB0aGlzLiR0b2RvQXBwLmZpbmQoJyNtYWlu
Jyk7Ci0gICAgdGhpcy4kZm9vdGVyID0gdGhpcy4kdG9kb0FwcC5maW5kKCcjZm9vdGVyJyk7Ci0g
ICAgdGhpcy4kbmV3VG9kbyA9IHRoaXMuJGhlYWRlci5maW5kKCcjbmV3LXRvZG8nKTsKLSAgICB0
aGlzLiR0b2dnbGVBbGwgPSB0aGlzLiRtYWluLmZpbmQoJyN0b2dnbGUtYWxsJyk7Ci0gICAgdGhp
cy4kdG9kb0xpc3QgPSB0aGlzLiRtYWluLmZpbmQoJyN0b2RvLWxpc3QnKTsKLSAgICB0aGlzLiRj
b3VudCA9IHRoaXMuJGZvb3Rlci5maW5kKCcjdG9kby1jb3VudCcpOwotICAgIHRoaXMuJGNsZWFy
QnRuID0gdGhpcy4kZm9vdGVyLmZpbmQoJyNjbGVhci1jb21wbGV0ZWQnKTsKLSAgICB9LAotICAg
IGJpbmRFdmVudHM6IGZ1bmN0aW9uICgpIHsKLSAgICB2YXIgbGlzdCA9IHRoaXMuJHRvZG9MaXN0
OwotICAgIHRoaXMuJG5ld1RvZG8ub24oJ2tleXVwJywgdGhpcy5jcmVhdGUpOwotICAgIHRoaXMu
JHRvZ2dsZUFsbC5vbignY2hhbmdlJywgdGhpcy50b2dnbGVBbGwpOwotICAgIHRoaXMuJGZvb3Rl
ci5vbignY2xpY2snLCAnI2NsZWFyLWNvbXBsZXRlZCcsIHRoaXMuZGVzdHJveUNvbXBsZXRlZCk7
Ci0gICAgbGlzdC5vbignY2hhbmdlJywgJy50b2dnbGUnLCB0aGlzLnRvZ2dsZSk7Ci0gICAgbGlz
dC5vbignZGJsY2xpY2snLCAnbGFiZWwnLCB0aGlzLmVkaXQpOwotICAgIGxpc3Qub24oJ2tleXBy
ZXNzJywgJy5lZGl0JywgdGhpcy5ibHVyT25FbnRlcik7Ci0gICAgbGlzdC5vbignYmx1cicsICcu
ZWRpdCcsIHRoaXMudXBkYXRlKTsKLSAgICBsaXN0Lm9uKCdjbGljaycsICcuZGVzdHJveScsIHRo
aXMuZGVzdHJveSk7Ci0gICAgfSwKLSAgICByZW5kZXI6IGZ1bmN0aW9uICgpIHsKLSAgICB0aGlz
LiR0b2RvTGlzdC5odG1sKHRoaXMudG9kb1RlbXBsYXRlKHRoaXMudG9kb3MpKTsKLSAgICB0aGlz
LiRtYWluLnRvZ2dsZSghIXRoaXMudG9kb3MubGVuZ3RoKTsKLSAgICB0aGlzLiR0b2dnbGVBbGwu
cHJvcCgnY2hlY2tlZCcsICF0aGlzLmFjdGl2ZVRvZG9Db3VudCgpKTsKLSAgICB0aGlzLnJlbmRl
ckZvb3RlcigpOwotICAgIFV0aWxzLnN0b3JlKCd0b2Rvcy1qcXVlcnknLCB0aGlzLnRvZG9zKTsK
LSAgICB9LAotICAgIHJlbmRlckZvb3RlcjogZnVuY3Rpb24gKCkgewotICAgIHZhciB0b2RvQ291
bnQgPSB0aGlzLnRvZG9zLmxlbmd0aDsKLSAgICB2YXIgYWN0aXZlVG9kb0NvdW50ID0gdGhpcy5h
Y3RpdmVUb2RvQ291bnQoKTsKLSAgICB2YXIgZm9vdGVyID0gewotICAgIGFjdGl2ZVRvZG9Db3Vu
dDogYWN0aXZlVG9kb0NvdW50LAotICAgIGFjdGl2ZVRvZG9Xb3JkOiBVdGlscy5wbHVyYWxpemUo
YWN0aXZlVG9kb0NvdW50LCAnaXRlbScpLAotICAgIGNvbXBsZXRlZFRvZG9zOiB0b2RvQ291bnQg
LSBhY3RpdmVUb2RvQ291bnQKLSAgICB9OwotCi0gICAgdGhpcy4kZm9vdGVyLnRvZ2dsZSghIXRv
ZG9Db3VudCk7Ci0gICAgdGhpcy4kZm9vdGVyLmh0bWwodGhpcy5mb290ZXJUZW1wbGF0ZShmb290
ZXIpKTsKLSAgICB9LAotICAgIHRvZ2dsZUFsbDogZnVuY3Rpb24gKCkgewotICAgIHZhciBpc0No
ZWNrZWQgPSAkKHRoaXMpLnByb3AoJ2NoZWNrZWQnKTsKLQotICAgICQuZWFjaChBcHAudG9kb3Ms
IGZ1bmN0aW9uIChpLCB2YWwpIHsKLSAgICB2YWwuY29tcGxldGVkID0gaXNDaGVja2VkOworICAg
IEhhbmRsZWJhcnMucmVnaXN0ZXJIZWxwZXIoJ2VxJywgZnVuY3Rpb24gKGEsIGIsIG9wdGlvbnMp
IHsKKyAgICAgICAgcmV0dXJuIGEgPT09IGIgPyBvcHRpb25zLmZuKHRoaXMpIDogb3B0aW9ucy5p
bnZlcnNlKHRoaXMpOwogICAgIH0pOwogCi0gICAgQXBwLnJlbmRlcigpOwotICAgIH0sCi0gICAg
YWN0aXZlVG9kb0NvdW50OiBmdW5jdGlvbiAoKSB7Ci0gICAgdmFyIGNvdW50ID0gMDsKLQotICAg
ICQuZWFjaCh0aGlzLnRvZG9zLCBmdW5jdGlvbiAoaSwgdmFsKSB7Ci0gICAgaWYgKCF2YWwuY29t
cGxldGVkKSB7Ci0gICAgY291bnQrKzsKLSAgICB9Ci0gICAgfSk7CiAKLSAgICByZXR1cm4gY291
bnQ7Ci0gICAgfSwKLSAgICBkZXN0cm95Q29tcGxldGVkOiBmdW5jdGlvbiAoKSB7Ci0gICAgdmFy
IHRvZG9zID0gQXBwLnRvZG9zOwotICAgIHZhciBsID0gdG9kb3MubGVuZ3RoOwotCi0gICAgd2hp
bGUgKGwtLSkgewotICAgIGlmICh0b2Rvc1tsXS5jb21wbGV0ZWQpIHsKLSAgICB0b2Rvcy5zcGxp
Y2UobCwgMSk7Ci0gICAgfQotICAgIH0KLQotICAgIEFwcC5yZW5kZXIoKTsKLSAgICB9LAotICAg
IC8vIGFjY2VwdHMgYW4gZWxlbWVudCBmcm9tIGluc2lkZSB0aGUgYC5pdGVtYCBkaXYgYW5kCi0g
ICAgLy8gcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyB0b2RvIGluIHRoZSB0b2RvcyBhcnJheQot
ICAgIGdldFRvZG86IGZ1bmN0aW9uIChlbGVtLCBjYWxsYmFjaykgewotICAgIHZhciBpZCA9ICQo
ZWxlbSkuY2xvc2VzdCgnbGknKS5kYXRhKCdpZCcpOwotCi0gICAgJC5lYWNoKHRoaXMudG9kb3Ms
IGZ1bmN0aW9uIChpLCB2YWwpIHsKLSAgICBpZiAodmFsLmlkID09PSBpZCkgewotICAgIGNhbGxi
YWNrLmFwcGx5KEFwcCwgYXJndW1lbnRzKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAg
IH0pOwotICAgIH0sCi0gICAgY3JlYXRlOiBmdW5jdGlvbiAoZSkgewotICAgIHZhciAkaW5wdXQg
PSAkKHRoaXMpOwotICAgIHZhciB2YWwgPSAkLnRyaW0oJGlucHV0LnZhbCgpKTsKLQotICAgIGlm
IChlLndoaWNoICE9PSBBcHAuRU5URVJfS0VZIHx8ICF2YWwpIHsKLSAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgQXBwLnRvZG9zLnB1c2goewotICAgIGlkOiBVdGlscy51dWlkKCksCi0gICAgdGl0
bGU6IHZhbCwKLSAgICBjb21wbGV0ZWQ6IGZhbHNlCi0gICAgfSk7CisgICAgdmFyIHV0aWwgPSB7
CisgICAgICAgIHV1aWQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIC8qanNoaW50IGJpdHdp
c2U6ZmFsc2UgKi8KKyAgICAgICAgICAgIHZhciBpLCByYW5kb207CisgICAgICAgICAgICB2YXIg
dXVpZCA9ICcnOworCisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworICAg
ICAgICAgICAgICAgIHJhbmRvbSA9IE1hdGgucmFuZG9tKCkgKiAxNiB8IDA7CisgICAgICAgICAg
ICAgICAgaWYgKGkgPT09IDggfHwgaSA9PT0gMTIgfHwgaSA9PT0gMTYgfHwgaSA9PT0gMjApIHsK
KyAgICAgICAgICAgICAgICAgICAgdXVpZCArPSAnLSc7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHV1aWQgKz0gKGkgPT09IDEyID8gNCA6IChpID09PSAxNiA/IChyYW5kb20g
JiAzIHwgOCkgOiByYW5kb20pKS50b1N0cmluZygxNik7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHJldHVybiB1dWlkOworICAgICAgICB9LAorICAgICAgICBwbHVyYWxpemU6IGZ1bmN0
aW9uIChjb3VudCwgd29yZCkgeworICAgICAgICAgICAgcmV0dXJuIGNvdW50ID09PSAxID8gd29y
ZCA6IHdvcmQgKyAncyc7CisgICAgICAgIH0sCisgICAgICAgIHN0b3JlOiBmdW5jdGlvbiAobmFt
ZXNwYWNlLCBkYXRhKSB7CisgICAgICAgICAgICByZXR1cm4gW107CisgICAgICAgIH0KKyAgICB9
OwogCi0gICAgJGlucHV0LnZhbCgnJyk7Ci0gICAgQXBwLnJlbmRlcigpOwotICAgIH0sCi0gICAg
dG9nZ2xlOiBmdW5jdGlvbiAoKSB7Ci0gICAgQXBwLmdldFRvZG8odGhpcywgZnVuY3Rpb24gKGks
IHZhbCkgewotICAgIHZhbC5jb21wbGV0ZWQgPSAhdmFsLmNvbXBsZXRlZDsKLSAgICB9KTsKLSAg
ICBBcHAucmVuZGVyKCk7Ci0gICAgfSwKLSAgICBlZGl0OiBmdW5jdGlvbiAoKSB7Ci0gICAgdmFy
ICRpbnB1dCA9ICQodGhpcykuY2xvc2VzdCgnbGknKS5hZGRDbGFzcygnZWRpdGluZycpLmZpbmQo
Jy5lZGl0Jyk7Ci0gICAgdmFyIHZhbCA9ICRpbnB1dC52YWwoKTsKLQotICAgICRpbnB1dC52YWwo
dmFsKS5mb2N1cygpOwotICAgIH0sCi0gICAgYmx1ck9uRW50ZXI6IGZ1bmN0aW9uIChlKSB7Ci0g
ICAgaWYgKGUud2hpY2ggPT09IEFwcC5FTlRFUl9LRVkpIHsKLSAgICBlLnRhcmdldC5ibHVyKCk7
Ci0gICAgfQotICAgIH0sCi0gICAgdXBkYXRlOiBmdW5jdGlvbiAoKSB7Ci0gICAgdmFyIHZhbCA9
ICQudHJpbSgkKHRoaXMpLnJlbW92ZUNsYXNzKCdlZGl0aW5nJykudmFsKCkpOwotCi0gICAgQXBw
LmdldFRvZG8odGhpcywgZnVuY3Rpb24gKGkpIHsKLSAgICBpZiAodmFsKSB7Ci0gICAgdGhpcy50
b2Rvc1tpXS50aXRsZSA9IHZhbDsKLSAgICB9IGVsc2UgewotICAgIHRoaXMudG9kb3Muc3BsaWNl
KGksIDEpOwotICAgIH0KLSAgICB0aGlzLnJlbmRlcigpOwotICAgIH0pOwotICAgIH0sCi0gICAg
ZGVzdHJveTogZnVuY3Rpb24gKCkgewotICAgIEFwcC5nZXRUb2RvKHRoaXMsIGZ1bmN0aW9uIChp
KSB7Ci0gICAgdGhpcy50b2Rvcy5zcGxpY2UoaSwgMSk7Ci0gICAgdGhpcy5yZW5kZXIoKTsKLSAg
ICB9KTsKLSAgICB9CisgICAgdmFyIEFwcCA9IHsKKyAgICAgICAgRU5URVJfS0VZOiAxMywKKyAg
ICAgICAgRVNDQVBFX0tFWTogMjcsCisgICAgICAgIGluaXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHRoaXMudG9kb3MgPSB1dGlsLnN0b3JlKCd0b2Rvcy1qcXVlcnknKTsKKyAgICAgICAg
ICAgIHRoaXMudG9kb1RlbXBsYXRlID0gSGFuZGxlYmFycy5jb21waWxlKCQoJyN0b2RvLXRlbXBs
YXRlJykuaHRtbCgpKTsKKyAgICAgICAgICAgIHRoaXMuZm9vdGVyVGVtcGxhdGUgPSBIYW5kbGVi
YXJzLmNvbXBpbGUoJCgnI2Zvb3Rlci10ZW1wbGF0ZScpLmh0bWwoKSk7CisgICAgICAgICAgICB0
aGlzLmJpbmRFdmVudHMoKTsKKworICAgICAgICAgICAgbmV3IFJvdXRlcih7CisgICAgICAgICAg
ICAgICAgJy86ZmlsdGVyJzogZnVuY3Rpb24gKGZpbHRlcikgeworICAgICAgICAgICAgICAgICAg
ICB0aGlzLmZpbHRlciA9IGZpbHRlcjsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXIo
KTsKKyAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykKKyAgICAgICAgICAgIH0pLmluaXQoJy9h
bGwnKTsKKyAgICAgICAgfSwKKyAgICAgICAgYmluZEV2ZW50czogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgJCgnI25ldy10b2RvJykub24oJ2tleXVwJywgdGhpcy5jcmVhdGUuYmluZCh0aGlz
KSk7CisgICAgICAgICAgICAkKCcjdG9nZ2xlLWFsbCcpLm9uKCdjaGFuZ2UnLCB0aGlzLnRvZ2ds
ZUFsbC5iaW5kKHRoaXMpKTsKKyAgICAgICAgICAgICQoJyNmb290ZXInKS5vbignY2xpY2snLCAn
I2NsZWFyLWNvbXBsZXRlZCcsIHRoaXMuZGVzdHJveUNvbXBsZXRlZC5iaW5kKHRoaXMpKTsKKyAg
ICAgICAgICAgICQoJyN0b2RvLWxpc3QnKQorICAgICAgICAgICAgICAgIC5vbignY2hhbmdlJywg
Jy50b2dnbGUnLCB0aGlzLnRvZ2dsZS5iaW5kKHRoaXMpKQorICAgICAgICAgICAgICAgIC5vbign
ZGJsY2xpY2snLCAnbGFiZWwnLCB0aGlzLmVkaXQuYmluZCh0aGlzKSkKKyAgICAgICAgICAgICAg
ICAub24oJ2tleXVwJywgJy5lZGl0JywgdGhpcy5lZGl0S2V5dXAuYmluZCh0aGlzKSkKKyAgICAg
ICAgICAgICAgICAub24oJ2ZvY3Vzb3V0JywgJy5lZGl0JywgdGhpcy51cGRhdGUuYmluZCh0aGlz
KSkKKyAgICAgICAgICAgICAgICAub24oJ2NsaWNrJywgJy5kZXN0cm95JywgdGhpcy5kZXN0cm95
LmJpbmQodGhpcykpOworICAgICAgICB9LAorICAgICAgICByZW5kZXI6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHZhciB0b2RvcyA9IHRoaXMuZ2V0RmlsdGVyZWRUb2RvcygpOworICAgICAg
ICAgICAgJCgnI3RvZG8tbGlzdCcpLmh0bWwodGhpcy50b2RvVGVtcGxhdGUodG9kb3MpKTsKKyAg
ICAgICAgICAgICQoJyNtYWluJykudG9nZ2xlKHRvZG9zLmxlbmd0aCA+IDApOworICAgICAgICAg
ICAgJCgnI3RvZ2dsZS1hbGwnKS5wcm9wKCdjaGVja2VkJywgdGhpcy5nZXRBY3RpdmVUb2Rvcygp
Lmxlbmd0aCA9PT0gMCk7CisgICAgICAgICAgICB0aGlzLnJlbmRlckZvb3RlcigpOworICAgICAg
ICAgICAgJCgnI25ldy10b2RvJykuZm9jdXMoKTsKKyAgICAgICAgICAgIHV0aWwuc3RvcmUoJ3Rv
ZG9zLWpxdWVyeScsIHRoaXMudG9kb3MpOworICAgICAgICB9LAorICAgICAgICByZW5kZXJGb290
ZXI6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciB0b2RvQ291bnQgPSB0aGlzLnRvZG9z
Lmxlbmd0aDsKKyAgICAgICAgICAgIHZhciBhY3RpdmVUb2RvQ291bnQgPSB0aGlzLmdldEFjdGl2
ZVRvZG9zKCkubGVuZ3RoOworICAgICAgICAgICAgdmFyIHRlbXBsYXRlID0gdGhpcy5mb290ZXJU
ZW1wbGF0ZSh7CisgICAgICAgICAgICAgICAgYWN0aXZlVG9kb0NvdW50OiBhY3RpdmVUb2RvQ291
bnQsCisgICAgICAgICAgICAgICAgYWN0aXZlVG9kb1dvcmQ6IHV0aWwucGx1cmFsaXplKGFjdGl2
ZVRvZG9Db3VudCwgJ2l0ZW0nKSwKKyAgICAgICAgICAgICAgICBjb21wbGV0ZWRUb2RvczogdG9k
b0NvdW50IC0gYWN0aXZlVG9kb0NvdW50LAorICAgICAgICAgICAgICAgIGZpbHRlcjogdGhpcy5m
aWx0ZXIKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAkKCcjZm9vdGVyJykudG9nZ2xl
KHRvZG9Db3VudCA+IDApLmh0bWwodGVtcGxhdGUpOworICAgICAgICB9LAorICAgICAgICB0b2dn
bGVBbGw6IGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICB2YXIgaXNDaGVja2VkID0gJChlLnRh
cmdldCkucHJvcCgnY2hlY2tlZCcpOworCisgICAgICAgICAgICB0aGlzLnRvZG9zLmZvckVhY2go
ZnVuY3Rpb24gKHRvZG8pIHsKKyAgICAgICAgICAgICAgICB0b2RvLmNvbXBsZXRlZCA9IGlzQ2hl
Y2tlZDsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICB0aGlzLnJlbmRlcigpOworICAg
ICAgICB9LAorICAgICAgICBnZXRBY3RpdmVUb2RvczogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMudG9kb3MuZmlsdGVyKGZ1bmN0aW9uICh0b2RvKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuICF0b2RvLmNvbXBsZXRlZDsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9
LAorICAgICAgICBnZXRDb21wbGV0ZWRUb2RvczogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
cmV0dXJuIHRoaXMudG9kb3MuZmlsdGVyKGZ1bmN0aW9uICh0b2RvKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRvZG8uY29tcGxldGVkOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0sCisg
ICAgICAgIGdldEZpbHRlcmVkVG9kb3M6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmICh0
aGlzLmZpbHRlciA9PT0gJ2FjdGl2ZScpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5n
ZXRBY3RpdmVUb2RvcygpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodGhpcy5m
aWx0ZXIgPT09ICdjb21wbGV0ZWQnKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0
Q29tcGxldGVkVG9kb3MoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHRo
aXMudG9kb3M7CisgICAgICAgIH0sCisgICAgICAgIGRlc3Ryb3lDb21wbGV0ZWQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHRoaXMudG9kb3MgPSB0aGlzLmdldEFjdGl2ZVRvZG9zKCk7Cisg
ICAgICAgICAgICB0aGlzLmZpbHRlciA9ICdhbGwnOworICAgICAgICAgICAgdGhpcy5yZW5kZXIo
KTsKKyAgICAgICAgfSwKKyAgICAgICAgLy8gYWNjZXB0cyBhbiBlbGVtZW50IGZyb20gaW5zaWRl
IHRoZSBgLml0ZW1gIGRpdiBhbmQKKyAgICAgICAgLy8gcmV0dXJucyB0aGUgY29ycmVzcG9uZGlu
ZyBpbmRleCBpbiB0aGUgYHRvZG9zYCBhcnJheQorICAgICAgICBpbmRleEZyb21FbDogZnVuY3Rp
b24gKGVsKSB7CisgICAgICAgICAgICB2YXIgaWQgPSAkKGVsKS5jbG9zZXN0KCdsaScpLmRhdGEo
J2lkJyk7CisgICAgICAgICAgICB2YXIgdG9kb3MgPSB0aGlzLnRvZG9zOworICAgICAgICAgICAg
dmFyIGkgPSB0b2Rvcy5sZW5ndGg7CisKKyAgICAgICAgICAgIHdoaWxlIChpLS0pIHsKKyAgICAg
ICAgICAgICAgICBpZiAodG9kb3NbaV0uaWQgPT09IGlkKSB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwK
KyAgICAgICAgY3JlYXRlOiBmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAgdmFyICRpbnB1dCA9
ICQoZS50YXJnZXQpOworICAgICAgICAgICAgdmFyIHZhbCA9ICQudHJpbSgkaW5wdXQudmFsKCkp
OworCisgICAgICAgICAgICBpZiAoZS53aGljaCAhPT0gdGhpcy5FTlRFUl9LRVkgfHwgIXZhbCkg
eworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
dGhpcy50b2Rvcy5wdXNoKHsKKyAgICAgICAgICAgICAgICBpZDogdXRpbC51dWlkKCksCisgICAg
ICAgICAgICAgICAgdGl0bGU6IHZhbCwKKyAgICAgICAgICAgICAgICBjb21wbGV0ZWQ6IGZhbHNl
CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgJGlucHV0LnZhbCgnJyk7CisKKyAgICAg
ICAgICAgIHRoaXMucmVuZGVyKCk7CisgICAgICAgIH0sCisgICAgICAgIHRvZ2dsZTogZnVuY3Rp
b24gKGUpIHsKKyAgICAgICAgICAgIHZhciBpID0gdGhpcy5pbmRleEZyb21FbChlLnRhcmdldCk7
CisgICAgICAgICAgICB0aGlzLnRvZG9zW2ldLmNvbXBsZXRlZCA9ICF0aGlzLnRvZG9zW2ldLmNv
bXBsZXRlZDsKKyAgICAgICAgICAgIHRoaXMucmVuZGVyKCk7CisgICAgICAgIH0sCisgICAgICAg
IGVkaXQ6IGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICB2YXIgJGlucHV0ID0gJChlLnRhcmdl
dCkuY2xvc2VzdCgnbGknKS5hZGRDbGFzcygnZWRpdGluZycpLmZpbmQoJy5lZGl0Jyk7CisgICAg
ICAgICAgICAkaW5wdXQudmFsKCRpbnB1dC52YWwoKSkuZm9jdXMoKTsKKyAgICAgICAgfSwKKyAg
ICAgICAgZWRpdEtleXVwOiBmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAgaWYgKGUud2hpY2gg
PT09IHRoaXMuRU5URVJfS0VZKSB7CisgICAgICAgICAgICAgICAgZS50YXJnZXQuYmx1cigpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZS53aGljaCA9PT0gdGhpcy5FU0NBUEVf
S0VZKSB7CisgICAgICAgICAgICAgICAgJChlLnRhcmdldCkuZGF0YSgnYWJvcnQnLCB0cnVlKS5i
bHVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIHVwZGF0ZTogZnVuY3Rp
b24gKGUpIHsKKyAgICAgICAgICAgIHZhciBlbCA9IGUudGFyZ2V0OworICAgICAgICAgICAgdmFy
ICRlbCA9ICQoZWwpOworICAgICAgICAgICAgdmFyIHZhbCA9ICRlbC52YWwoKS50cmltKCk7CisK
KyAgICAgICAgICAgIGlmICghdmFsKSB7CisgICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95KGUp
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKCRlbC5kYXRhKCdhYm9ydCcpKSB7CisgICAgICAgICAgICAgICAgJGVsLmRhdGEoJ2Fib3J0
JywgZmFsc2UpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGlzLnRv
ZG9zW3RoaXMuaW5kZXhGcm9tRWwoZWwpXS50aXRsZSA9IHZhbDsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgdGhpcy5yZW5kZXIoKTsKKyAgICAgICAgfSwKKyAgICAgICAgZGVzdHJveTog
ZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgIHRoaXMudG9kb3Muc3BsaWNlKHRoaXMuaW5kZXhG
cm9tRWwoZS50YXJnZXQpLCAxKTsKKyAgICAgICAgICAgIHRoaXMucmVuZGVyKCk7CisgICAgICAg
IH0KICAgICB9OwogCiAgICAgd2luZG93LmFwcCA9IEFwcDsKLSAgICBVdGlscy5zdG9yZSA9IGZ1
bmN0aW9uICgpIHsgcmV0dXJuIFtdOyB9Ci0KLSAgICBBcHAuaW5pdCgpOworICAgIHdpbmRvdy5h
cHAuaW5pdCgpOwogfSk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9qcXVlcnkvbm9kZV9tb2R1
bGVzL2hhbmRsZWJhcnMvZGlzdC9oYW5kbGViYXJzLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5L25v
ZGVfbW9kdWxlcy9oYW5kbGViYXJzL2Rpc3QvaGFuZGxlYmFycy5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMTFl
ZTMzY2JlMDQ0YmFiYWJiYTE4NGE2NjgzMjU4ODFhMmI0MDc1Ci0tLSAvZGV2L251bGwKKysrIGIv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1
cmUtZXhhbXBsZXMvanF1ZXJ5L25vZGVfbW9kdWxlcy9oYW5kbGViYXJzL2Rpc3QvaGFuZGxlYmFy
cy5qcwpAQCAtMCwwICsxLDQ3MTMgQEAKKy8qKiEKKworIEBsaWNlbnNlCisgaGFuZGxlYmFycyB2
NC4wLjYKKworQ29weXJpZ2h0IChDKSAyMDExLTIwMTYgYnkgWWVodWRhIEthdHoKKworUGVybWlz
c2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0
YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0
aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKK2luIHRoZSBTb2Z0d2FyZSB3aXRo
b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMK
K3RvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGlj
ZW5zZSwgYW5kL29yIHNlbGwKK2NvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQg
cGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJq
ZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBu
b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KK2Fs
bCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUg
U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO
RCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0FVVEhP
UlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMg
T1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRP
UlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBX
SVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCitUSEUgU09G
VFdBUkUuCisKKyovCisvKiohCisKKyBAbGljZW5zZQorIGhhbmRsZWJhcnMgdjQuMC42CisKK0Nv
cHlyaWdodCAoQykgMjAxMS0yMDE2IGJ5IFllaHVkYSBLYXR6CisKK1Blcm1pc3Npb24gaXMgaGVy
ZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNv
cHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAo
dGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmlj
dGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCit0byB1c2UsIGNv
cHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9v
ciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8g
d2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0
aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCithbGwgY29waWVzIG9y
IHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElT
IFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Mg
T1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5E
IE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitBVVRIT1JTIE9SIENPUFlS
SUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVS
V0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09G
VFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorVEhFIFNPRlRXQVJFLgorCisq
LworLyoqIQorCisgQGxpY2Vuc2UKKyBoYW5kbGViYXJzIHY0LjAuNgorCitDb3B5cmlnaHQgKEMp
IDIwMTEtMjAxNiBieSBZZWh1ZGEgS2F0egorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVk
LCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0aGlz
IHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdh
cmUiKSwgdG8gZGVhbAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1
ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwordG8gdXNlLCBjb3B5LCBtb2RpZnks
IG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorY29w
aWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNv
ZnR3YXJlIGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNz
aW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorYWxsIGNvcGllcyBvciBzdWJzdGFudGlh
bCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAi
QVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVE
LCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5H
RU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVS
UyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBX
SEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJ
TkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRI
RSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KK1RIRSBTT0ZUV0FSRS4KKworKi8KKyhmdW5jdGlv
biB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7CisgICAg
aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmpl
Y3QnKQorICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTsKKyAgICBlbHNlIGlmKHR5
cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkKKyAgICAgICAgZGVmaW5l
KFtdLCBmYWN0b3J5KTsKKyAgICBlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JykK
KyAgICAgICAgZXhwb3J0c1siSGFuZGxlYmFycyJdID0gZmFjdG9yeSgpOworICAgIGVsc2UKKyAg
ICAgICAgcm9vdFsiSGFuZGxlYmFycyJdID0gZmFjdG9yeSgpOworfSkodGhpcywgZnVuY3Rpb24o
KSB7CityZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3Rz
dHJhcAorLyoqKioqKi8gICAgLy8gVGhlIG1vZHVsZSBjYWNoZQorLyoqKioqKi8gICAgdmFyIGlu
c3RhbGxlZE1vZHVsZXMgPSB7fTsKKworLyoqKioqKi8gICAgLy8gVGhlIHJlcXVpcmUgZnVuY3Rp
b24KKy8qKioqKiovICAgIGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHsK
KworLyoqKioqKi8gICAgICAgIC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZQorLyoqKioq
Ki8gICAgICAgIGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKQorLyoqKioqKi8gICAgICAg
ICAgICByZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0czsKKworLyoqKioq
Ki8gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2Fj
aGUpCisvKioqKioqLyAgICAgICAgdmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxl
SWRdID0geworLyoqKioqKi8gICAgICAgICAgICBleHBvcnRzOiB7fSwKKy8qKioqKiovICAgICAg
ICAgICAgaWQ6IG1vZHVsZUlkLAorLyoqKioqKi8gICAgICAgICAgICBsb2FkZWQ6IGZhbHNlCisv
KioqKioqLyAgICAgICAgfTsKKworLyoqKioqKi8gICAgICAgIC8vIEV4ZWN1dGUgdGhlIG1vZHVs
ZSBmdW5jdGlvbgorLyoqKioqKi8gICAgICAgIG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxl
LmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pOwor
CisvKioqKioqLyAgICAgICAgLy8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZAorLyoqKioqKi8g
ICAgICAgIG1vZHVsZS5sb2FkZWQgPSB0cnVlOworCisvKioqKioqLyAgICAgICAgLy8gUmV0dXJu
IHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGUKKy8qKioqKiovICAgICAgICByZXR1cm4gbW9kdWxl
LmV4cG9ydHM7CisvKioqKioqLyAgICB9CisKKworLyoqKioqKi8gICAgLy8gZXhwb3NlIHRoZSBt
b2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXykKKy8qKioqKiovICAgIF9fd2VicGFj
a19yZXF1aXJlX18ubSA9IG1vZHVsZXM7CisKKy8qKioqKiovICAgIC8vIGV4cG9zZSB0aGUgbW9k
dWxlIGNhY2hlCisvKioqKioqLyAgICBfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRN
b2R1bGVzOworCisvKioqKioqLyAgICAvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfXworLyoqKioq
Ki8gICAgX193ZWJwYWNrX3JlcXVpcmVfXy5wID0gIiI7CisKKy8qKioqKiovICAgIC8vIExvYWQg
ZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0cworLyoqKioqKi8gICAgcmV0dXJuIF9fd2Vi
cGFja19yZXF1aXJlX18oMCk7CisvKioqKioqLyB9KQorLyoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioq
KiovIChbCisvKiAwICovCisvKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFj
a19yZXF1aXJlX18pIHsKKworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIHZhciBfaW50ZXJvcFJl
cXVpcmVEZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKVsnZGVmYXVsdCddOworCisgICAg
ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTsKKworICAgIHZhciBfaGFuZGxlYmFyc1J1bnRpbWUg
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpOworCisgICAgdmFyIF9oYW5kbGViYXJzUnVudGltZTIg
PSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9oYW5kbGViYXJzUnVudGltZSk7CisKKyAgICAvLyBD
b21waWxlciBpbXBvcnRzCisKKyAgICB2YXIgX2hhbmRsZWJhcnNDb21waWxlckFzdCA9IF9fd2Vi
cGFja19yZXF1aXJlX18oMjQpOworCisgICAgdmFyIF9oYW5kbGViYXJzQ29tcGlsZXJBc3QyID0g
X2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaGFuZGxlYmFyc0NvbXBpbGVyQXN0KTsKKworICAgIHZh
ciBfaGFuZGxlYmFyc0NvbXBpbGVyQmFzZSA9IF9fd2VicGFja19yZXF1aXJlX18oMjUpOworCisg
ICAgdmFyIF9oYW5kbGViYXJzQ29tcGlsZXJDb21waWxlciA9IF9fd2VicGFja19yZXF1aXJlX18o
MzApOworCisgICAgdmFyIF9oYW5kbGViYXJzQ29tcGlsZXJKYXZhc2NyaXB0Q29tcGlsZXIgPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKDMxKTsKKworICAgIHZhciBfaGFuZGxlYmFyc0NvbXBpbGVySmF2
YXNjcmlwdENvbXBpbGVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2hhbmRsZWJhcnNDb21w
aWxlckphdmFzY3JpcHRDb21waWxlcik7CisKKyAgICB2YXIgX2hhbmRsZWJhcnNDb21waWxlclZp
c2l0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI4KTsKKworICAgIHZhciBfaGFuZGxlYmFyc0Nv
bXBpbGVyVmlzaXRvcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9oYW5kbGViYXJzQ29tcGls
ZXJWaXNpdG9yKTsKKworICAgIHZhciBfaGFuZGxlYmFyc05vQ29uZmxpY3QgPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKDIzKTsKKworICAgIHZhciBfaGFuZGxlYmFyc05vQ29uZmxpY3QyID0gX2ludGVy
b3BSZXF1aXJlRGVmYXVsdChfaGFuZGxlYmFyc05vQ29uZmxpY3QpOworCisgICAgdmFyIF9jcmVh
dGUgPSBfaGFuZGxlYmFyc1J1bnRpbWUyWydkZWZhdWx0J10uY3JlYXRlOworICAgIGZ1bmN0aW9u
IGNyZWF0ZSgpIHsKKyAgICAgIHZhciBoYiA9IF9jcmVhdGUoKTsKKworICAgICAgaGIuY29tcGls
ZSA9IGZ1bmN0aW9uIChpbnB1dCwgb3B0aW9ucykgeworICAgICAgICByZXR1cm4gX2hhbmRsZWJh
cnNDb21waWxlckNvbXBpbGVyLmNvbXBpbGUoaW5wdXQsIG9wdGlvbnMsIGhiKTsKKyAgICAgIH07
CisgICAgICBoYi5wcmVjb21waWxlID0gZnVuY3Rpb24gKGlucHV0LCBvcHRpb25zKSB7CisgICAg
ICAgIHJldHVybiBfaGFuZGxlYmFyc0NvbXBpbGVyQ29tcGlsZXIucHJlY29tcGlsZShpbnB1dCwg
b3B0aW9ucywgaGIpOworICAgICAgfTsKKworICAgICAgaGIuQVNUID0gX2hhbmRsZWJhcnNDb21w
aWxlckFzdDJbJ2RlZmF1bHQnXTsKKyAgICAgIGhiLkNvbXBpbGVyID0gX2hhbmRsZWJhcnNDb21w
aWxlckNvbXBpbGVyLkNvbXBpbGVyOworICAgICAgaGIuSmF2YVNjcmlwdENvbXBpbGVyID0gX2hh
bmRsZWJhcnNDb21waWxlckphdmFzY3JpcHRDb21waWxlcjJbJ2RlZmF1bHQnXTsKKyAgICAgIGhi
LlBhcnNlciA9IF9oYW5kbGViYXJzQ29tcGlsZXJCYXNlLnBhcnNlcjsKKyAgICAgIGhiLnBhcnNl
ID0gX2hhbmRsZWJhcnNDb21waWxlckJhc2UucGFyc2U7CisKKyAgICAgIHJldHVybiBoYjsKKyAg
ICB9CisKKyAgICB2YXIgaW5zdCA9IGNyZWF0ZSgpOworICAgIGluc3QuY3JlYXRlID0gY3JlYXRl
OworCisgICAgX2hhbmRsZWJhcnNOb0NvbmZsaWN0MlsnZGVmYXVsdCddKGluc3QpOworCisgICAg
aW5zdC5WaXNpdG9yID0gX2hhbmRsZWJhcnNDb21waWxlclZpc2l0b3IyWydkZWZhdWx0J107CisK
KyAgICBpbnN0WydkZWZhdWx0J10gPSBpbnN0OworCisgICAgZXhwb3J0c1snZGVmYXVsdCddID0g
aW5zdDsKKyAgICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTsKKworLyoqKi8g
fSwKKy8qIDEgKi8KKy8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykgeworCisgICAgInVz
ZSBzdHJpY3QiOworCisgICAgZXhwb3J0c1siZGVmYXVsdCJdID0gZnVuY3Rpb24gKG9iaikgewor
ICAgICAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsKKyAgICAgICAgImRl
ZmF1bHQiOiBvYmoKKyAgICAgIH07CisgICAgfTsKKworICAgIGV4cG9ydHMuX19lc01vZHVsZSA9
IHRydWU7CisKKy8qKiovIH0sCisvKiAyICovCisvKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9y
dHMsIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIHZh
ciBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCA9IF9fd2VicGFja19yZXF1aXJlX18oMylbJ2RlZmF1
bHQnXTsKKworICAgIHZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVp
cmVfXygxKVsnZGVmYXVsdCddOworCisgICAgZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTsKKwor
ICAgIHZhciBfaGFuZGxlYmFyc0Jhc2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpOworCisgICAg
dmFyIGJhc2UgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChfaGFuZGxlYmFyc0Jhc2UpOworCisg
ICAgLy8gRWFjaCBvZiB0aGVzZSBhdWdtZW50IHRoZSBIYW5kbGViYXJzIG9iamVjdC4gTm8gbmVl
ZCB0byBzZXR1cCBoZXJlLgorICAgIC8vIChUaGlzIGlzIGRvbmUgdG8gZWFzaWx5IHNoYXJlIGNv
ZGUgYmV0d2VlbiBjb21tb25qcyBhbmQgYnJvd3NlIGVudnMpCisKKyAgICB2YXIgX2hhbmRsZWJh
cnNTYWZlU3RyaW5nID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMSk7CisKKyAgICB2YXIgX2hhbmRs
ZWJhcnNTYWZlU3RyaW5nMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2hhbmRsZWJhcnNTYWZl
U3RyaW5nKTsKKworICAgIHZhciBfaGFuZGxlYmFyc0V4Y2VwdGlvbiA9IF9fd2VicGFja19yZXF1
aXJlX18oNik7CisKKyAgICB2YXIgX2hhbmRsZWJhcnNFeGNlcHRpb24yID0gX2ludGVyb3BSZXF1
aXJlRGVmYXVsdChfaGFuZGxlYmFyc0V4Y2VwdGlvbik7CisKKyAgICB2YXIgX2hhbmRsZWJhcnNV
dGlscyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7CisKKyAgICB2YXIgVXRpbHMgPSBfaW50ZXJv
cFJlcXVpcmVXaWxkY2FyZChfaGFuZGxlYmFyc1V0aWxzKTsKKworICAgIHZhciBfaGFuZGxlYmFy
c1J1bnRpbWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKTsKKworICAgIHZhciBydW50aW1lID0g
X2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoX2hhbmRsZWJhcnNSdW50aW1lKTsKKworICAgIHZhciBf
aGFuZGxlYmFyc05vQ29uZmxpY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKTsKKworICAgIHZh
ciBfaGFuZGxlYmFyc05vQ29uZmxpY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaGFuZGxl
YmFyc05vQ29uZmxpY3QpOworCisgICAgLy8gRm9yIGNvbXBhdGliaWxpdHkgYW5kIHVzYWdlIG91
dHNpZGUgb2YgbW9kdWxlIHN5c3RlbXMsIG1ha2UgdGhlIEhhbmRsZWJhcnMgb2JqZWN0IGEgbmFt
ZXNwYWNlCisgICAgZnVuY3Rpb24gY3JlYXRlKCkgeworICAgICAgdmFyIGhiID0gbmV3IGJhc2Uu
SGFuZGxlYmFyc0Vudmlyb25tZW50KCk7CisKKyAgICAgIFV0aWxzLmV4dGVuZChoYiwgYmFzZSk7
CisgICAgICBoYi5TYWZlU3RyaW5nID0gX2hhbmRsZWJhcnNTYWZlU3RyaW5nMlsnZGVmYXVsdCdd
OworICAgICAgaGIuRXhjZXB0aW9uID0gX2hhbmRsZWJhcnNFeGNlcHRpb24yWydkZWZhdWx0J107
CisgICAgICBoYi5VdGlscyA9IFV0aWxzOworICAgICAgaGIuZXNjYXBlRXhwcmVzc2lvbiA9IFV0
aWxzLmVzY2FwZUV4cHJlc3Npb247CisKKyAgICAgIGhiLlZNID0gcnVudGltZTsKKyAgICAgIGhi
LnRlbXBsYXRlID0gZnVuY3Rpb24gKHNwZWMpIHsKKyAgICAgICAgcmV0dXJuIHJ1bnRpbWUudGVt
cGxhdGUoc3BlYywgaGIpOworICAgICAgfTsKKworICAgICAgcmV0dXJuIGhiOworICAgIH0KKwor
ICAgIHZhciBpbnN0ID0gY3JlYXRlKCk7CisgICAgaW5zdC5jcmVhdGUgPSBjcmVhdGU7CisKKyAg
ICBfaGFuZGxlYmFyc05vQ29uZmxpY3QyWydkZWZhdWx0J10oaW5zdCk7CisKKyAgICBpbnN0Wydk
ZWZhdWx0J10gPSBpbnN0OworCisgICAgZXhwb3J0c1snZGVmYXVsdCddID0gaW5zdDsKKyAgICBt
b2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTsKKworLyoqKi8gfSwKKy8qIDMgKi8K
Ky8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykgeworCisgICAgInVzZSBzdHJpY3QiOwor
CisgICAgZXhwb3J0c1siZGVmYXVsdCJdID0gZnVuY3Rpb24gKG9iaikgeworICAgICAgaWYgKG9i
aiAmJiBvYmouX19lc01vZHVsZSkgeworICAgICAgICByZXR1cm4gb2JqOworICAgICAgfSBlbHNl
IHsKKyAgICAgICAgdmFyIG5ld09iaiA9IHt9OworCisgICAgICAgIGlmIChvYmogIT0gbnVsbCkg
eworICAgICAgICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsKKyAgICAgICAgICAgIGlmIChPYmpl
Y3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSBuZXdPYmpba2V5XSA9
IG9ialtrZXldOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG5ld09ialsiZGVm
YXVsdCJdID0gb2JqOworICAgICAgICByZXR1cm4gbmV3T2JqOworICAgICAgfQorICAgIH07CisK
KyAgICBleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlOworCisvKioqLyB9LAorLyogNCAqLworLyoq
Ki8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyAg
ICAndXNlIHN0cmljdCc7CisKKyAgICB2YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IF9fd2Vi
cGFja19yZXF1aXJlX18oMSlbJ2RlZmF1bHQnXTsKKworICAgIGV4cG9ydHMuX19lc01vZHVsZSA9
IHRydWU7CisgICAgZXhwb3J0cy5IYW5kbGViYXJzRW52aXJvbm1lbnQgPSBIYW5kbGViYXJzRW52
aXJvbm1lbnQ7CisKKyAgICB2YXIgX3V0aWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTsKKwor
ICAgIHZhciBfZXhjZXB0aW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTsKKworICAgIHZhciBf
ZXhjZXB0aW9uMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2V4Y2VwdGlvbik7CisKKyAgICB2
YXIgX2hlbHBlcnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTsKKworICAgIHZhciBfZGVjb3Jh
dG9ycyA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpOworCisgICAgdmFyIF9sb2dnZXIgPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKDIwKTsKKworICAgIHZhciBfbG9nZ2VyMiA9IF9pbnRlcm9wUmVxdWly
ZURlZmF1bHQoX2xvZ2dlcik7CisKKyAgICB2YXIgVkVSU0lPTiA9ICc0LjAuNSc7CisgICAgZXhw
b3J0cy5WRVJTSU9OID0gVkVSU0lPTjsKKyAgICB2YXIgQ09NUElMRVJfUkVWSVNJT04gPSA3Owor
CisgICAgZXhwb3J0cy5DT01QSUxFUl9SRVZJU0lPTiA9IENPTVBJTEVSX1JFVklTSU9OOworICAg
IHZhciBSRVZJU0lPTl9DSEFOR0VTID0geworICAgICAgMTogJzw9IDEuMC5yYy4yJywgLy8gMS4w
LnJjLjIgaXMgYWN0dWFsbHkgcmV2MiBidXQgZG9lc24ndCByZXBvcnQgaXQKKyAgICAgIDI6ICc9
PSAxLjAuMC1yYy4zJywKKyAgICAgIDM6ICc9PSAxLjAuMC1yYy40JywKKyAgICAgIDQ6ICc9PSAx
LngueCcsCisgICAgICA1OiAnPT0gMi4wLjAtYWxwaGEueCcsCisgICAgICA2OiAnPj0gMi4wLjAt
YmV0YS4xJywKKyAgICAgIDc6ICc+PSA0LjAuMCcKKyAgICB9OworCisgICAgZXhwb3J0cy5SRVZJ
U0lPTl9DSEFOR0VTID0gUkVWSVNJT05fQ0hBTkdFUzsKKyAgICB2YXIgb2JqZWN0VHlwZSA9ICdb
b2JqZWN0IE9iamVjdF0nOworCisgICAgZnVuY3Rpb24gSGFuZGxlYmFyc0Vudmlyb25tZW50KGhl
bHBlcnMsIHBhcnRpYWxzLCBkZWNvcmF0b3JzKSB7CisgICAgICB0aGlzLmhlbHBlcnMgPSBoZWxw
ZXJzIHx8IHt9OworICAgICAgdGhpcy5wYXJ0aWFscyA9IHBhcnRpYWxzIHx8IHt9OworICAgICAg
dGhpcy5kZWNvcmF0b3JzID0gZGVjb3JhdG9ycyB8fCB7fTsKKworICAgICAgX2hlbHBlcnMucmVn
aXN0ZXJEZWZhdWx0SGVscGVycyh0aGlzKTsKKyAgICAgIF9kZWNvcmF0b3JzLnJlZ2lzdGVyRGVm
YXVsdERlY29yYXRvcnModGhpcyk7CisgICAgfQorCisgICAgSGFuZGxlYmFyc0Vudmlyb25tZW50
LnByb3RvdHlwZSA9IHsKKyAgICAgIGNvbnN0cnVjdG9yOiBIYW5kbGViYXJzRW52aXJvbm1lbnQs
CisKKyAgICAgIGxvZ2dlcjogX2xvZ2dlcjJbJ2RlZmF1bHQnXSwKKyAgICAgIGxvZzogX2xvZ2dl
cjJbJ2RlZmF1bHQnXS5sb2csCisKKyAgICAgIHJlZ2lzdGVySGVscGVyOiBmdW5jdGlvbiByZWdp
c3RlckhlbHBlcihuYW1lLCBmbikgeworICAgICAgICBpZiAoX3V0aWxzLnRvU3RyaW5nLmNhbGwo
bmFtZSkgPT09IG9iamVjdFR5cGUpIHsKKyAgICAgICAgICBpZiAoZm4pIHsKKyAgICAgICAgICAg
IHRocm93IG5ldyBfZXhjZXB0aW9uMlsnZGVmYXVsdCddKCdBcmcgbm90IHN1cHBvcnRlZCB3aXRo
IG11bHRpcGxlIGhlbHBlcnMnKTsKKyAgICAgICAgICB9CisgICAgICAgICAgX3V0aWxzLmV4dGVu
ZCh0aGlzLmhlbHBlcnMsIG5hbWUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHRoaXMu
aGVscGVyc1tuYW1lXSA9IGZuOworICAgICAgICB9CisgICAgICB9LAorICAgICAgdW5yZWdpc3Rl
ckhlbHBlcjogZnVuY3Rpb24gdW5yZWdpc3RlckhlbHBlcihuYW1lKSB7CisgICAgICAgIGRlbGV0
ZSB0aGlzLmhlbHBlcnNbbmFtZV07CisgICAgICB9LAorCisgICAgICByZWdpc3RlclBhcnRpYWw6
IGZ1bmN0aW9uIHJlZ2lzdGVyUGFydGlhbChuYW1lLCBwYXJ0aWFsKSB7CisgICAgICAgIGlmIChf
dXRpbHMudG9TdHJpbmcuY2FsbChuYW1lKSA9PT0gb2JqZWN0VHlwZSkgeworICAgICAgICAgIF91
dGlscy5leHRlbmQodGhpcy5wYXJ0aWFscywgbmFtZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgaWYgKHR5cGVvZiBwYXJ0aWFsID09PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAg
dGhyb3cgbmV3IF9leGNlcHRpb24yWydkZWZhdWx0J10oJ0F0dGVtcHRpbmcgdG8gcmVnaXN0ZXIg
YSBwYXJ0aWFsIGNhbGxlZCAiJyArIG5hbWUgKyAnIiBhcyB1bmRlZmluZWQnKTsKKyAgICAgICAg
ICB9CisgICAgICAgICAgdGhpcy5wYXJ0aWFsc1tuYW1lXSA9IHBhcnRpYWw7CisgICAgICAgIH0K
KyAgICAgIH0sCisgICAgICB1bnJlZ2lzdGVyUGFydGlhbDogZnVuY3Rpb24gdW5yZWdpc3RlclBh
cnRpYWwobmFtZSkgeworICAgICAgICBkZWxldGUgdGhpcy5wYXJ0aWFsc1tuYW1lXTsKKyAgICAg
IH0sCisKKyAgICAgIHJlZ2lzdGVyRGVjb3JhdG9yOiBmdW5jdGlvbiByZWdpc3RlckRlY29yYXRv
cihuYW1lLCBmbikgeworICAgICAgICBpZiAoX3V0aWxzLnRvU3RyaW5nLmNhbGwobmFtZSkgPT09
IG9iamVjdFR5cGUpIHsKKyAgICAgICAgICBpZiAoZm4pIHsKKyAgICAgICAgICAgIHRocm93IG5l
dyBfZXhjZXB0aW9uMlsnZGVmYXVsdCddKCdBcmcgbm90IHN1cHBvcnRlZCB3aXRoIG11bHRpcGxl
IGRlY29yYXRvcnMnKTsKKyAgICAgICAgICB9CisgICAgICAgICAgX3V0aWxzLmV4dGVuZCh0aGlz
LmRlY29yYXRvcnMsIG5hbWUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHRoaXMuZGVj
b3JhdG9yc1tuYW1lXSA9IGZuOworICAgICAgICB9CisgICAgICB9LAorICAgICAgdW5yZWdpc3Rl
ckRlY29yYXRvcjogZnVuY3Rpb24gdW5yZWdpc3RlckRlY29yYXRvcihuYW1lKSB7CisgICAgICAg
IGRlbGV0ZSB0aGlzLmRlY29yYXRvcnNbbmFtZV07CisgICAgICB9CisgICAgfTsKKworICAgIHZh
ciBsb2cgPSBfbG9nZ2VyMlsnZGVmYXVsdCddLmxvZzsKKworICAgIGV4cG9ydHMubG9nID0gbG9n
OworICAgIGV4cG9ydHMuY3JlYXRlRnJhbWUgPSBfdXRpbHMuY3JlYXRlRnJhbWU7CisgICAgZXhw
b3J0cy5sb2dnZXIgPSBfbG9nZ2VyMlsnZGVmYXVsdCddOworCisvKioqLyB9LAorLyogNSAqLwor
LyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7CisKKyAgICAndXNlIHN0cmljdCc7CisK
KyAgICBleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlOworICAgIGV4cG9ydHMuZXh0ZW5kID0gZXh0
ZW5kOworICAgIGV4cG9ydHMuaW5kZXhPZiA9IGluZGV4T2Y7CisgICAgZXhwb3J0cy5lc2NhcGVF
eHByZXNzaW9uID0gZXNjYXBlRXhwcmVzc2lvbjsKKyAgICBleHBvcnRzLmlzRW1wdHkgPSBpc0Vt
cHR5OworICAgIGV4cG9ydHMuY3JlYXRlRnJhbWUgPSBjcmVhdGVGcmFtZTsKKyAgICBleHBvcnRz
LmJsb2NrUGFyYW1zID0gYmxvY2tQYXJhbXM7CisgICAgZXhwb3J0cy5hcHBlbmRDb250ZXh0UGF0
aCA9IGFwcGVuZENvbnRleHRQYXRoOworICAgIHZhciBlc2NhcGUgPSB7CisgICAgICAnJic6ICcm
YW1wOycsCisgICAgICAnPCc6ICcmbHQ7JywKKyAgICAgICc+JzogJyZndDsnLAorICAgICAgJyIn
OiAnJnF1b3Q7JywKKyAgICAgICInIjogJyYjeDI3OycsCisgICAgICAnYCc6ICcmI3g2MDsnLAor
ICAgICAgJz0nOiAnJiN4M0Q7JworICAgIH07CisKKyAgICB2YXIgYmFkQ2hhcnMgPSAvWyY8PiIn
YD1dL2csCisgICAgICAgIHBvc3NpYmxlID0gL1smPD4iJ2A9XS87CisKKyAgICBmdW5jdGlvbiBl
c2NhcGVDaGFyKGNocikgeworICAgICAgcmV0dXJuIGVzY2FwZVtjaHJdOworICAgIH0KKworICAg
IGZ1bmN0aW9uIGV4dGVuZChvYmogLyogLCAuLi5zb3VyY2UgKi8pIHsKKyAgICAgIGZvciAodmFy
IGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGZvciAodmFyIGtl
eSBpbiBhcmd1bWVudHNbaV0pIHsKKyAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNP
d25Qcm9wZXJ0eS5jYWxsKGFyZ3VtZW50c1tpXSwga2V5KSkgeworICAgICAgICAgICAgb2JqW2tl
eV0gPSBhcmd1bWVudHNbaV1ba2V5XTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0K
KworICAgICAgcmV0dXJuIG9iajsKKyAgICB9CisKKyAgICB2YXIgdG9TdHJpbmcgPSBPYmplY3Qu
cHJvdG90eXBlLnRvU3RyaW5nOworCisgICAgZXhwb3J0cy50b1N0cmluZyA9IHRvU3RyaW5nOwor
ICAgIC8vIFNvdXJjZWQgZnJvbSBsb2Rhc2gKKyAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYmVz
dGllanMvbG9kYXNoL2Jsb2IvbWFzdGVyL0xJQ0VOU0UudHh0CisgICAgLyogZXNsaW50LWRpc2Fi
bGUgZnVuYy1zdHlsZSAqLworICAgIHZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gaXNGdW5jdGlv
bih2YWx1ZSkgeworICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJzsKKyAg
ICB9OworICAgIC8vIGZhbGxiYWNrIGZvciBvbGRlciB2ZXJzaW9ucyBvZiBDaHJvbWUgYW5kIFNh
ZmFyaQorICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovCisgICAgaWYgKGlzRnVuY3Rpb24o
L3gvKSkgeworICAgICAgZXhwb3J0cy5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiA9IGZ1bmN0aW9u
ICh2YWx1ZSkgeworICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYm
IHRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBGdW5jdGlvbl0nOworICAgICAgfTsK
KyAgICB9CisgICAgZXhwb3J0cy5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjsKKworICAgIC8qIGVz
bGludC1lbmFibGUgZnVuYy1zdHlsZSAqLworCisgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQg
Ki8KKyAgICB2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHZhbHVlKSB7
CisgICAgICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyA/IHRvU3Ry
aW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBBcnJheV0nIDogZmFsc2U7CisgICAgfTsKKwor
ICAgIGV4cG9ydHMuaXNBcnJheSA9IGlzQXJyYXk7CisgICAgLy8gT2xkZXIgSUUgdmVyc2lvbnMg
ZG8gbm90IGRpcmVjdGx5IHN1cHBvcnQgaW5kZXhPZiBzbyB3ZSBtdXN0IGltcGxlbWVudCBvdXIg
b3duLCBzYWRseS4KKworICAgIGZ1bmN0aW9uIGluZGV4T2YoYXJyYXksIHZhbHVlKSB7CisgICAg
ICBmb3IgKHZhciBpID0gMCwgbGVuID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKKyAg
ICAgICAgaWYgKGFycmF5W2ldID09PSB2YWx1ZSkgeworICAgICAgICAgIHJldHVybiBpOworICAg
ICAgICB9CisgICAgICB9CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgZnVuY3Rpb24g
ZXNjYXBlRXhwcmVzc2lvbihzdHJpbmcpIHsKKyAgICAgIGlmICh0eXBlb2Ygc3RyaW5nICE9PSAn
c3RyaW5nJykgeworICAgICAgICAvLyBkb24ndCBlc2NhcGUgU2FmZVN0cmluZ3MsIHNpbmNlIHRo
ZXkncmUgYWxyZWFkeSBzYWZlCisgICAgICAgIGlmIChzdHJpbmcgJiYgc3RyaW5nLnRvSFRNTCkg
eworICAgICAgICAgIHJldHVybiBzdHJpbmcudG9IVE1MKCk7CisgICAgICAgIH0gZWxzZSBpZiAo
c3RyaW5nID09IG51bGwpIHsKKyAgICAgICAgICByZXR1cm4gJyc7CisgICAgICAgIH0gZWxzZSBp
ZiAoIXN0cmluZykgeworICAgICAgICAgIHJldHVybiBzdHJpbmcgKyAnJzsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIEZvcmNlIGEgc3RyaW5nIGNvbnZlcnNpb24gYXMgdGhpcyB3aWxsIGJlIGRv
bmUgYnkgdGhlIGFwcGVuZCByZWdhcmRsZXNzIGFuZAorICAgICAgICAvLyB0aGUgcmVnZXggdGVz
dCB3aWxsIGRvIHRoaXMgdHJhbnNwYXJlbnRseSBiZWhpbmQgdGhlIHNjZW5lcywgY2F1c2luZyBp
c3N1ZXMgaWYKKyAgICAgICAgLy8gYW4gb2JqZWN0J3MgdG8gc3RyaW5nIGhhcyBlc2NhcGVkIGNo
YXJhY3RlcnMgaW4gaXQuCisgICAgICAgIHN0cmluZyA9ICcnICsgc3RyaW5nOworICAgICAgfQor
CisgICAgICBpZiAoIXBvc3NpYmxlLnRlc3Qoc3RyaW5nKSkgeworICAgICAgICByZXR1cm4gc3Ry
aW5nOworICAgICAgfQorICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKGJhZENoYXJzLCBlc2Nh
cGVDaGFyKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc0VtcHR5KHZhbHVlKSB7CisgICAgICBp
ZiAoIXZhbHVlICYmIHZhbHVlICE9PSAwKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
fSBlbHNlIGlmIChpc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gY3JlYXRlRnJhbWUob2JqZWN0KSB7CisgICAg
ICB2YXIgZnJhbWUgPSBleHRlbmQoe30sIG9iamVjdCk7CisgICAgICBmcmFtZS5fcGFyZW50ID0g
b2JqZWN0OworICAgICAgcmV0dXJuIGZyYW1lOworICAgIH0KKworICAgIGZ1bmN0aW9uIGJsb2Nr
UGFyYW1zKHBhcmFtcywgaWRzKSB7CisgICAgICBwYXJhbXMucGF0aCA9IGlkczsKKyAgICAgIHJl
dHVybiBwYXJhbXM7CisgICAgfQorCisgICAgZnVuY3Rpb24gYXBwZW5kQ29udGV4dFBhdGgoY29u
dGV4dFBhdGgsIGlkKSB7CisgICAgICByZXR1cm4gKGNvbnRleHRQYXRoID8gY29udGV4dFBhdGgg
KyAnLicgOiAnJykgKyBpZDsKKyAgICB9CisKKy8qKiovIH0sCisvKiA2ICovCisvKioqLyBmdW5j
dGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworICAgICd1c2Ug
c3RyaWN0JzsKKworICAgIHZhciBfT2JqZWN0JGRlZmluZVByb3BlcnR5ID0gX193ZWJwYWNrX3Jl
cXVpcmVfXyg3KVsnZGVmYXVsdCddOworCisgICAgZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTsK
KworICAgIHZhciBlcnJvclByb3BzID0gWydkZXNjcmlwdGlvbicsICdmaWxlTmFtZScsICdsaW5l
TnVtYmVyJywgJ21lc3NhZ2UnLCAnbmFtZScsICdudW1iZXInLCAnc3RhY2snXTsKKworICAgIGZ1
bmN0aW9uIEV4Y2VwdGlvbihtZXNzYWdlLCBub2RlKSB7CisgICAgICB2YXIgbG9jID0gbm9kZSAm
JiBub2RlLmxvYywKKyAgICAgICAgICBsaW5lID0gdW5kZWZpbmVkLAorICAgICAgICAgIGNvbHVt
biA9IHVuZGVmaW5lZDsKKyAgICAgIGlmIChsb2MpIHsKKyAgICAgICAgbGluZSA9IGxvYy5zdGFy
dC5saW5lOworICAgICAgICBjb2x1bW4gPSBsb2Muc3RhcnQuY29sdW1uOworCisgICAgICAgIG1l
c3NhZ2UgKz0gJyAtICcgKyBsaW5lICsgJzonICsgY29sdW1uOworICAgICAgfQorCisgICAgICB2
YXIgdG1wID0gRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgbWVzc2FnZSk7
CisKKyAgICAgIC8vIFVuZm9ydHVuYXRlbHkgZXJyb3JzIGFyZSBub3QgZW51bWVyYWJsZSBpbiBD
aHJvbWUgKGF0IGxlYXN0KSwgc28gYGZvciBwcm9wIGluIHRtcGAgZG9lc24ndCB3b3JrLgorICAg
ICAgZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgZXJyb3JQcm9wcy5sZW5ndGg7IGlkeCsrKSB7Cisg
ICAgICAgIHRoaXNbZXJyb3JQcm9wc1tpZHhdXSA9IHRtcFtlcnJvclByb3BzW2lkeF1dOworICAg
ICAgfQorCisgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqLworICAgICAgaWYgKEVycm9y
LmNhcHR1cmVTdGFja1RyYWNlKSB7CisgICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRo
aXMsIEV4Y2VwdGlvbik7CisgICAgICB9CisKKyAgICAgIHRyeSB7CisgICAgICAgIGlmIChsb2Mp
IHsKKyAgICAgICAgICB0aGlzLmxpbmVOdW1iZXIgPSBsaW5lOworCisgICAgICAgICAgLy8gV29y
ayBhcm91bmQgaXNzdWUgdW5kZXIgc2FmYXJpIHdoZXJlIHdlIGNhbid0IGRpcmVjdGx5IHNldCB0
aGUgY29sdW1uIHZhbHVlCisgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8KKyAg
ICAgICAgICBpZiAoX09iamVjdCRkZWZpbmVQcm9wZXJ0eSkgeworICAgICAgICAgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KHRoaXMsICdjb2x1bW4nLCB7IHZhbHVlOiBjb2x1bW4gfSk7CisgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuY29sdW1uID0gY29sdW1uOworICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgfSBjYXRjaCAobm9wKSB7CisgICAgICAgIC8qIElnbm9y
ZSBpZiB0aGUgYnJvd3NlciBpcyB2ZXJ5IHBhcnRpY3VsYXIgKi8KKyAgICAgIH0KKyAgICB9CisK
KyAgICBFeGNlcHRpb24ucHJvdG90eXBlID0gbmV3IEVycm9yKCk7CisKKyAgICBleHBvcnRzWydk
ZWZhdWx0J10gPSBFeGNlcHRpb247CisgICAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZh
dWx0J107CisKKy8qKiovIH0sCisvKiA3ICovCisvKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9y
dHMsIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworICAgIG1vZHVsZS5leHBvcnRzID0geyAiZGVm
YXVsdCI6IF9fd2VicGFja19yZXF1aXJlX18oOCksIF9fZXNNb2R1bGU6IHRydWUgfTsKKworLyoq
Ki8gfSwKKy8qIDggKi8KKy8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNr
X3JlcXVpcmVfXykgeworCisgICAgdmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpOworICAg
IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYyl7
CisgICAgICByZXR1cm4gJC5zZXREZXNjKGl0LCBrZXksIGRlc2MpOworICAgIH07CisKKy8qKiov
IH0sCisvKiA5ICovCisvKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHsKKworICAgIHZh
ciAkT2JqZWN0ID0gT2JqZWN0OworICAgIG1vZHVsZS5leHBvcnRzID0geworICAgICAgY3JlYXRl
OiAgICAgJE9iamVjdC5jcmVhdGUsCisgICAgICBnZXRQcm90bzogICAkT2JqZWN0LmdldFByb3Rv
dHlwZU9mLAorICAgICAgaXNFbnVtOiAgICAge30ucHJvcGVydHlJc0VudW1lcmFibGUsCisgICAg
ICBnZXREZXNjOiAgICAkT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciwKKyAgICAgIHNl
dERlc2M6ICAgICRPYmplY3QuZGVmaW5lUHJvcGVydHksCisgICAgICBzZXREZXNjczogICAkT2Jq
ZWN0LmRlZmluZVByb3BlcnRpZXMsCisgICAgICBnZXRLZXlzOiAgICAkT2JqZWN0LmtleXMsCisg
ICAgICBnZXROYW1lczogICAkT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMsCisgICAgICBnZXRT
eW1ib2xzOiAkT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scywKKyAgICAgIGVhY2g6ICAgICAg
IFtdLmZvckVhY2gKKyAgICB9OworCisvKioqLyB9LAorLyogMTAgKi8KKy8qKiovIGZ1bmN0aW9u
KG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisgICAgJ3VzZSBzdHJp
Y3QnOworCisgICAgdmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKDEpWydkZWZhdWx0J107CisKKyAgICBleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlOworICAg
IGV4cG9ydHMucmVnaXN0ZXJEZWZhdWx0SGVscGVycyA9IHJlZ2lzdGVyRGVmYXVsdEhlbHBlcnM7
CisKKyAgICB2YXIgX2hlbHBlcnNCbG9ja0hlbHBlck1pc3NpbmcgPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKDExKTsKKworICAgIHZhciBfaGVscGVyc0Jsb2NrSGVscGVyTWlzc2luZzIgPSBfaW50ZXJv
cFJlcXVpcmVEZWZhdWx0KF9oZWxwZXJzQmxvY2tIZWxwZXJNaXNzaW5nKTsKKworICAgIHZhciBf
aGVscGVyc0VhY2ggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTsKKworICAgIHZhciBfaGVscGVy
c0VhY2gyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaGVscGVyc0VhY2gpOworCisgICAgdmFy
IF9oZWxwZXJzSGVscGVyTWlzc2luZyA9IF9fd2VicGFja19yZXF1aXJlX18oMTMpOworCisgICAg
dmFyIF9oZWxwZXJzSGVscGVyTWlzc2luZzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9oZWxw
ZXJzSGVscGVyTWlzc2luZyk7CisKKyAgICB2YXIgX2hlbHBlcnNJZiA9IF9fd2VicGFja19yZXF1
aXJlX18oMTQpOworCisgICAgdmFyIF9oZWxwZXJzSWYyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVs
dChfaGVscGVyc0lmKTsKKworICAgIHZhciBfaGVscGVyc0xvZyA9IF9fd2VicGFja19yZXF1aXJl
X18oMTUpOworCisgICAgdmFyIF9oZWxwZXJzTG9nMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQo
X2hlbHBlcnNMb2cpOworCisgICAgdmFyIF9oZWxwZXJzTG9va3VwID0gX193ZWJwYWNrX3JlcXVp
cmVfXygxNik7CisKKyAgICB2YXIgX2hlbHBlcnNMb29rdXAyID0gX2ludGVyb3BSZXF1aXJlRGVm
YXVsdChfaGVscGVyc0xvb2t1cCk7CisKKyAgICB2YXIgX2hlbHBlcnNXaXRoID0gX193ZWJwYWNr
X3JlcXVpcmVfXygxNyk7CisKKyAgICB2YXIgX2hlbHBlcnNXaXRoMiA9IF9pbnRlcm9wUmVxdWly
ZURlZmF1bHQoX2hlbHBlcnNXaXRoKTsKKworICAgIGZ1bmN0aW9uIHJlZ2lzdGVyRGVmYXVsdEhl
bHBlcnMoaW5zdGFuY2UpIHsKKyAgICAgIF9oZWxwZXJzQmxvY2tIZWxwZXJNaXNzaW5nMlsnZGVm
YXVsdCddKGluc3RhbmNlKTsKKyAgICAgIF9oZWxwZXJzRWFjaDJbJ2RlZmF1bHQnXShpbnN0YW5j
ZSk7CisgICAgICBfaGVscGVyc0hlbHBlck1pc3NpbmcyWydkZWZhdWx0J10oaW5zdGFuY2UpOwor
ICAgICAgX2hlbHBlcnNJZjJbJ2RlZmF1bHQnXShpbnN0YW5jZSk7CisgICAgICBfaGVscGVyc0xv
ZzJbJ2RlZmF1bHQnXShpbnN0YW5jZSk7CisgICAgICBfaGVscGVyc0xvb2t1cDJbJ2RlZmF1bHQn
XShpbnN0YW5jZSk7CisgICAgICBfaGVscGVyc1dpdGgyWydkZWZhdWx0J10oaW5zdGFuY2UpOwor
ICAgIH0KKworLyoqKi8gfSwKKy8qIDExICovCisvKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9y
dHMsIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIGV4
cG9ydHMuX19lc01vZHVsZSA9IHRydWU7CisKKyAgICB2YXIgX3V0aWxzID0gX193ZWJwYWNrX3Jl
cXVpcmVfXyg1KTsKKworICAgIGV4cG9ydHNbJ2RlZmF1bHQnXSA9IGZ1bmN0aW9uIChpbnN0YW5j
ZSkgeworICAgICAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2Jsb2NrSGVscGVyTWlzc2luZycs
IGZ1bmN0aW9uIChjb250ZXh0LCBvcHRpb25zKSB7CisgICAgICAgIHZhciBpbnZlcnNlID0gb3B0
aW9ucy5pbnZlcnNlLAorICAgICAgICAgICAgZm4gPSBvcHRpb25zLmZuOworCisgICAgICAgIGlm
IChjb250ZXh0ID09PSB0cnVlKSB7CisgICAgICAgICAgcmV0dXJuIGZuKHRoaXMpOworICAgICAg
ICB9IGVsc2UgaWYgKGNvbnRleHQgPT09IGZhbHNlIHx8IGNvbnRleHQgPT0gbnVsbCkgeworICAg
ICAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpOworICAgICAgICB9IGVsc2UgaWYgKF91dGlscy5p
c0FycmF5KGNvbnRleHQpKSB7CisgICAgICAgICAgaWYgKGNvbnRleHQubGVuZ3RoID4gMCkgewor
ICAgICAgICAgICAgaWYgKG9wdGlvbnMuaWRzKSB7CisgICAgICAgICAgICAgIG9wdGlvbnMuaWRz
ID0gW29wdGlvbnMubmFtZV07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBp
bnN0YW5jZS5oZWxwZXJzLmVhY2goY29udGV4dCwgb3B0aW9ucyk7CisgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpOworICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7
CisgICAgICAgICAgICB2YXIgZGF0YSA9IF91dGlscy5jcmVhdGVGcmFtZShvcHRpb25zLmRhdGEp
OworICAgICAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IF91dGlscy5hcHBlbmRDb250ZXh0UGF0
aChvcHRpb25zLmRhdGEuY29udGV4dFBhdGgsIG9wdGlvbnMubmFtZSk7CisgICAgICAgICAgICBv
cHRpb25zID0geyBkYXRhOiBkYXRhIH07CisgICAgICAgICAgfQorCisgICAgICAgICAgcmV0dXJu
IGZuKGNvbnRleHQsIG9wdGlvbnMpOworICAgICAgICB9CisgICAgICB9KTsKKyAgICB9OworCisg
ICAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107CisKKy8qKiovIH0sCisvKiAx
MiAqLworLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9f
KSB7CisKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICB2YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVs
dCA9IF9fd2VicGFja19yZXF1aXJlX18oMSlbJ2RlZmF1bHQnXTsKKworICAgIGV4cG9ydHMuX19l
c01vZHVsZSA9IHRydWU7CisKKyAgICB2YXIgX3V0aWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1
KTsKKworICAgIHZhciBfZXhjZXB0aW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTsKKworICAg
IHZhciBfZXhjZXB0aW9uMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2V4Y2VwdGlvbik7CisK
KyAgICBleHBvcnRzWydkZWZhdWx0J10gPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHsKKyAgICAgIGlu
c3RhbmNlLnJlZ2lzdGVySGVscGVyKCdlYWNoJywgZnVuY3Rpb24gKGNvbnRleHQsIG9wdGlvbnMp
IHsKKyAgICAgICAgaWYgKCFvcHRpb25zKSB7CisgICAgICAgICAgdGhyb3cgbmV3IF9leGNlcHRp
b24yWydkZWZhdWx0J10oJ011c3QgcGFzcyBpdGVyYXRvciB0byAjZWFjaCcpOworICAgICAgICB9
CisKKyAgICAgICAgdmFyIGZuID0gb3B0aW9ucy5mbiwKKyAgICAgICAgICAgIGludmVyc2UgPSBv
cHRpb25zLmludmVyc2UsCisgICAgICAgICAgICBpID0gMCwKKyAgICAgICAgICAgIHJldCA9ICcn
LAorICAgICAgICAgICAgZGF0YSA9IHVuZGVmaW5lZCwKKyAgICAgICAgICAgIGNvbnRleHRQYXRo
ID0gdW5kZWZpbmVkOworCisgICAgICAgIGlmIChvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5pZHMp
IHsKKyAgICAgICAgICBjb250ZXh0UGF0aCA9IF91dGlscy5hcHBlbmRDb250ZXh0UGF0aChvcHRp
b25zLmRhdGEuY29udGV4dFBhdGgsIG9wdGlvbnMuaWRzWzBdKSArICcuJzsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChfdXRpbHMuaXNGdW5jdGlvbihjb250ZXh0KSkgeworICAgICAgICAgIGNv
bnRleHQgPSBjb250ZXh0LmNhbGwodGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAob3B0
aW9ucy5kYXRhKSB7CisgICAgICAgICAgZGF0YSA9IF91dGlscy5jcmVhdGVGcmFtZShvcHRpb25z
LmRhdGEpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gZXhlY0l0ZXJhdGlvbihmaWVs
ZCwgaW5kZXgsIGxhc3QpIHsKKyAgICAgICAgICBpZiAoZGF0YSkgeworICAgICAgICAgICAgZGF0
YS5rZXkgPSBmaWVsZDsKKyAgICAgICAgICAgIGRhdGEuaW5kZXggPSBpbmRleDsKKyAgICAgICAg
ICAgIGRhdGEuZmlyc3QgPSBpbmRleCA9PT0gMDsKKyAgICAgICAgICAgIGRhdGEubGFzdCA9ICEh
bGFzdDsKKworICAgICAgICAgICAgaWYgKGNvbnRleHRQYXRoKSB7CisgICAgICAgICAgICAgIGRh
dGEuY29udGV4dFBhdGggPSBjb250ZXh0UGF0aCArIGZpZWxkOworICAgICAgICAgICAgfQorICAg
ICAgICAgIH0KKworICAgICAgICAgIHJldCA9IHJldCArIGZuKGNvbnRleHRbZmllbGRdLCB7Cisg
ICAgICAgICAgICBkYXRhOiBkYXRhLAorICAgICAgICAgICAgYmxvY2tQYXJhbXM6IF91dGlscy5i
bG9ja1BhcmFtcyhbY29udGV4dFtmaWVsZF0sIGZpZWxkXSwgW2NvbnRleHRQYXRoICsgZmllbGQs
IG51bGxdKQorICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNvbnRleHQg
JiYgdHlwZW9mIGNvbnRleHQgPT09ICdvYmplY3QnKSB7CisgICAgICAgICAgaWYgKF91dGlscy5p
c0FycmF5KGNvbnRleHQpKSB7CisgICAgICAgICAgICBmb3IgKHZhciBqID0gY29udGV4dC5sZW5n
dGg7IGkgPCBqOyBpKyspIHsKKyAgICAgICAgICAgICAgaWYgKGkgaW4gY29udGV4dCkgeworICAg
ICAgICAgICAgICAgIGV4ZWNJdGVyYXRpb24oaSwgaSwgaSA9PT0gY29udGV4dC5sZW5ndGggLSAx
KTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICB2YXIgcHJpb3JLZXkgPSB1bmRlZmluZWQ7CisKKyAgICAgICAgICAgIGZvciAo
dmFyIGtleSBpbiBjb250ZXh0KSB7CisgICAgICAgICAgICAgIGlmIChjb250ZXh0Lmhhc093blBy
b3BlcnR5KGtleSkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSdyZSBydW5uaW5nIHRoZSBpdGVy
YXRpb25zIG9uZSBzdGVwIG91dCBvZiBzeW5jIHNvIHdlIGNhbiBkZXRlY3QKKyAgICAgICAgICAg
ICAgICAvLyB0aGUgbGFzdCBpdGVyYXRpb24gd2l0aG91dCBoYXZlIHRvIHNjYW4gdGhlIG9iamVj
dCB0d2ljZSBhbmQgY3JlYXRlCisgICAgICAgICAgICAgICAgLy8gYW4gaXRlcm1lZGlhdGUga2V5
cyBhcnJheS4KKyAgICAgICAgICAgICAgICBpZiAocHJpb3JLZXkgIT09IHVuZGVmaW5lZCkgewor
ICAgICAgICAgICAgICAgICAgZXhlY0l0ZXJhdGlvbihwcmlvcktleSwgaSAtIDEpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwcmlvcktleSA9IGtleTsKKyAgICAgICAgICAg
ICAgICBpKys7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChwcmlvcktleSAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgIGV4ZWNJdGVyYXRpb24o
cHJpb3JLZXksIGkgLSAxLCB0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoaSA9PT0gMCkgeworICAgICAgICAgIHJldCA9IGludmVyc2Uo
dGhpcyk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0OworICAgICAgfSk7CisgICAg
fTsKKworICAgIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddOworCisvKioqLyB9
LAorLyogMTMgKi8KKy8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3Jl
cXVpcmVfXykgeworCisgICAgJ3VzZSBzdHJpY3QnOworCisgICAgdmFyIF9pbnRlcm9wUmVxdWly
ZURlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpWydkZWZhdWx0J107CisKKyAgICBleHBv
cnRzLl9fZXNNb2R1bGUgPSB0cnVlOworCisgICAgdmFyIF9leGNlcHRpb24gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKDYpOworCisgICAgdmFyIF9leGNlcHRpb24yID0gX2ludGVyb3BSZXF1aXJlRGVm
YXVsdChfZXhjZXB0aW9uKTsKKworICAgIGV4cG9ydHNbJ2RlZmF1bHQnXSA9IGZ1bmN0aW9uIChp
bnN0YW5jZSkgeworICAgICAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2hlbHBlck1pc3Npbmcn
LCBmdW5jdGlvbiAoKSAvKiBbYXJncywgXW9wdGlvbnMgKi97CisgICAgICAgIGlmIChhcmd1bWVu
dHMubGVuZ3RoID09PSAxKSB7CisgICAgICAgICAgLy8gQSBtaXNzaW5nIGZpZWxkIGluIGEge3tm
b299fSBjb25zdHJ1Y3QuCisgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAvLyBTb21lb25lIGlzIGFjdHVhbGx5IHRyeWluZyB0byBjYWxsIHNv
bWV0aGluZywgYmxvdyB1cC4KKyAgICAgICAgICB0aHJvdyBuZXcgX2V4Y2VwdGlvbjJbJ2RlZmF1
bHQnXSgnTWlzc2luZyBoZWxwZXI6ICInICsgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAx
XS5uYW1lICsgJyInKTsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgfTsKKworICAgIG1vZHVs
ZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddOworCisvKioqLyB9LAorLyogMTQgKi8KKy8q
KiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisg
ICAgJ3VzZSBzdHJpY3QnOworCisgICAgZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTsKKworICAg
IHZhciBfdXRpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpOworCisgICAgZXhwb3J0c1snZGVm
YXVsdCddID0gZnVuY3Rpb24gKGluc3RhbmNlKSB7CisgICAgICBpbnN0YW5jZS5yZWdpc3Rlckhl
bHBlcignaWYnLCBmdW5jdGlvbiAoY29uZGl0aW9uYWwsIG9wdGlvbnMpIHsKKyAgICAgICAgaWYg
KF91dGlscy5pc0Z1bmN0aW9uKGNvbmRpdGlvbmFsKSkgeworICAgICAgICAgIGNvbmRpdGlvbmFs
ID0gY29uZGl0aW9uYWwuY2FsbCh0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIERlZmF1
bHQgYmVoYXZpb3IgaXMgdG8gcmVuZGVyIHRoZSBwb3NpdGl2ZSBwYXRoIGlmIHRoZSB2YWx1ZSBp
cyB0cnV0aHkgYW5kIG5vdCBlbXB0eS4KKyAgICAgICAgLy8gVGhlIGBpbmNsdWRlWmVyb2Agb3B0
aW9uIG1heSBiZSBzZXQgdG8gdHJlYXQgdGhlIGNvbmR0aW9uYWwgYXMgcHVyZWx5IG5vdCBlbXB0
eSBiYXNlZCBvbiB0aGUKKyAgICAgICAgLy8gYmVoYXZpb3Igb2YgaXNFbXB0eS4gRWZmZWN0aXZl
bHkgdGhpcyBkZXRlcm1pbmVzIGlmIDAgaXMgaGFuZGxlZCBieSB0aGUgcG9zaXRpdmUgcGF0aCBv
ciBuZWdhdGl2ZS4KKyAgICAgICAgaWYgKCFvcHRpb25zLmhhc2guaW5jbHVkZVplcm8gJiYgIWNv
bmRpdGlvbmFsIHx8IF91dGlscy5pc0VtcHR5KGNvbmRpdGlvbmFsKSkgeworICAgICAgICAgIHJl
dHVybiBvcHRpb25zLmludmVyc2UodGhpcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
cmV0dXJuIG9wdGlvbnMuZm4odGhpcyk7CisgICAgICAgIH0KKyAgICAgIH0pOworCisgICAgICBp
bnN0YW5jZS5yZWdpc3RlckhlbHBlcigndW5sZXNzJywgZnVuY3Rpb24gKGNvbmRpdGlvbmFsLCBv
cHRpb25zKSB7CisgICAgICAgIHJldHVybiBpbnN0YW5jZS5oZWxwZXJzWydpZiddLmNhbGwodGhp
cywgY29uZGl0aW9uYWwsIHsgZm46IG9wdGlvbnMuaW52ZXJzZSwgaW52ZXJzZTogb3B0aW9ucy5m
biwgaGFzaDogb3B0aW9ucy5oYXNoIH0pOworICAgICAgfSk7CisgICAgfTsKKworICAgIG1vZHVs
ZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddOworCisvKioqLyB9LAorLyogMTUgKi8KKy8q
KiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykgeworCisgICAgJ3VzZSBzdHJpY3QnOworCisg
ICAgZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTsKKworICAgIGV4cG9ydHNbJ2RlZmF1bHQnXSA9
IGZ1bmN0aW9uIChpbnN0YW5jZSkgeworICAgICAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2xv
ZycsIGZ1bmN0aW9uICgpIC8qIG1lc3NhZ2UsIG9wdGlvbnMgKi97CisgICAgICAgIHZhciBhcmdz
ID0gW3VuZGVmaW5lZF0sCisgICAgICAgICAgICBvcHRpb25zID0gYXJndW1lbnRzW2FyZ3VtZW50
cy5sZW5ndGggLSAxXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVu
Z3RoIC0gMTsgaSsrKSB7CisgICAgICAgICAgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7CisgICAg
ICAgIH0KKworICAgICAgICB2YXIgbGV2ZWwgPSAxOworICAgICAgICBpZiAob3B0aW9ucy5oYXNo
LmxldmVsICE9IG51bGwpIHsKKyAgICAgICAgICBsZXZlbCA9IG9wdGlvbnMuaGFzaC5sZXZlbDsK
KyAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5kYXRhLmxldmVsICE9
IG51bGwpIHsKKyAgICAgICAgICBsZXZlbCA9IG9wdGlvbnMuZGF0YS5sZXZlbDsKKyAgICAgICAg
fQorICAgICAgICBhcmdzWzBdID0gbGV2ZWw7CisKKyAgICAgICAgaW5zdGFuY2UubG9nLmFwcGx5
KGluc3RhbmNlLCBhcmdzKTsKKyAgICAgIH0pOworICAgIH07CisKKyAgICBtb2R1bGUuZXhwb3J0
cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTsKKworLyoqKi8gfSwKKy8qIDE2ICovCisvKioqLyBmdW5j
dGlvbihtb2R1bGUsIGV4cG9ydHMpIHsKKworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIGV4cG9y
dHMuX19lc01vZHVsZSA9IHRydWU7CisKKyAgICBleHBvcnRzWydkZWZhdWx0J10gPSBmdW5jdGlv
biAoaW5zdGFuY2UpIHsKKyAgICAgIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdsb29rdXAnLCBm
dW5jdGlvbiAob2JqLCBmaWVsZCkgeworICAgICAgICByZXR1cm4gb2JqICYmIG9ialtmaWVsZF07
CisgICAgICB9KTsKKyAgICB9OworCisgICAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZh
dWx0J107CisKKy8qKiovIH0sCisvKiAxNyAqLworLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBv
cnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICBl
eHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlOworCisgICAgdmFyIF91dGlscyA9IF9fd2VicGFja19y
ZXF1aXJlX18oNSk7CisKKyAgICBleHBvcnRzWydkZWZhdWx0J10gPSBmdW5jdGlvbiAoaW5zdGFu
Y2UpIHsKKyAgICAgIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCd3aXRoJywgZnVuY3Rpb24gKGNv
bnRleHQsIG9wdGlvbnMpIHsKKyAgICAgICAgaWYgKF91dGlscy5pc0Z1bmN0aW9uKGNvbnRleHQp
KSB7CisgICAgICAgICAgY29udGV4dCA9IGNvbnRleHQuY2FsbCh0aGlzKTsKKyAgICAgICAgfQor
CisgICAgICAgIHZhciBmbiA9IG9wdGlvbnMuZm47CisKKyAgICAgICAgaWYgKCFfdXRpbHMuaXNF
bXB0eShjb250ZXh0KSkgeworICAgICAgICAgIHZhciBkYXRhID0gb3B0aW9ucy5kYXRhOworICAg
ICAgICAgIGlmIChvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5pZHMpIHsKKyAgICAgICAgICAgIGRh
dGEgPSBfdXRpbHMuY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTsKKyAgICAgICAgICAgIGRhdGEu
Y29udGV4dFBhdGggPSBfdXRpbHMuYXBwZW5kQ29udGV4dFBhdGgob3B0aW9ucy5kYXRhLmNvbnRl
eHRQYXRoLCBvcHRpb25zLmlkc1swXSk7CisgICAgICAgICAgfQorCisgICAgICAgICAgcmV0dXJu
IGZuKGNvbnRleHQsIHsKKyAgICAgICAgICAgIGRhdGE6IGRhdGEsCisgICAgICAgICAgICBibG9j
a1BhcmFtczogX3V0aWxzLmJsb2NrUGFyYW1zKFtjb250ZXh0XSwgW2RhdGEgJiYgZGF0YS5jb250
ZXh0UGF0aF0pCisgICAgICAgICAgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcmV0
dXJuIG9wdGlvbnMuaW52ZXJzZSh0aGlzKTsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgfTsK
KworICAgIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddOworCisvKioqLyB9LAor
LyogMTggKi8KKy8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVp
cmVfXykgeworCisgICAgJ3VzZSBzdHJpY3QnOworCisgICAgdmFyIF9pbnRlcm9wUmVxdWlyZURl
ZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpWydkZWZhdWx0J107CisKKyAgICBleHBvcnRz
Ll9fZXNNb2R1bGUgPSB0cnVlOworICAgIGV4cG9ydHMucmVnaXN0ZXJEZWZhdWx0RGVjb3JhdG9y
cyA9IHJlZ2lzdGVyRGVmYXVsdERlY29yYXRvcnM7CisKKyAgICB2YXIgX2RlY29yYXRvcnNJbmxp
bmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KTsKKworICAgIHZhciBfZGVjb3JhdG9yc0lubGlu
ZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9kZWNvcmF0b3JzSW5saW5lKTsKKworICAgIGZ1
bmN0aW9uIHJlZ2lzdGVyRGVmYXVsdERlY29yYXRvcnMoaW5zdGFuY2UpIHsKKyAgICAgIF9kZWNv
cmF0b3JzSW5saW5lMlsnZGVmYXVsdCddKGluc3RhbmNlKTsKKyAgICB9CisKKy8qKiovIH0sCisv
KiAxOSAqLworLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWly
ZV9fKSB7CisKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICBleHBvcnRzLl9fZXNNb2R1bGUgPSB0
cnVlOworCisgICAgdmFyIF91dGlscyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7CisKKyAgICBl
eHBvcnRzWydkZWZhdWx0J10gPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHsKKyAgICAgIGluc3RhbmNl
LnJlZ2lzdGVyRGVjb3JhdG9yKCdpbmxpbmUnLCBmdW5jdGlvbiAoZm4sIHByb3BzLCBjb250YWlu
ZXIsIG9wdGlvbnMpIHsKKyAgICAgICAgdmFyIHJldCA9IGZuOworICAgICAgICBpZiAoIXByb3Bz
LnBhcnRpYWxzKSB7CisgICAgICAgICAgcHJvcHMucGFydGlhbHMgPSB7fTsKKyAgICAgICAgICBy
ZXQgPSBmdW5jdGlvbiAoY29udGV4dCwgb3B0aW9ucykgeworICAgICAgICAgICAgLy8gQ3JlYXRl
IGEgbmV3IHBhcnRpYWxzIHN0YWNrIGZyYW1lIHByaW9yIHRvIGV4ZWMuCisgICAgICAgICAgICB2
YXIgb3JpZ2luYWwgPSBjb250YWluZXIucGFydGlhbHM7CisgICAgICAgICAgICBjb250YWluZXIu
cGFydGlhbHMgPSBfdXRpbHMuZXh0ZW5kKHt9LCBvcmlnaW5hbCwgcHJvcHMucGFydGlhbHMpOwor
ICAgICAgICAgICAgdmFyIHJldCA9IGZuKGNvbnRleHQsIG9wdGlvbnMpOworICAgICAgICAgICAg
Y29udGFpbmVyLnBhcnRpYWxzID0gb3JpZ2luYWw7CisgICAgICAgICAgICByZXR1cm4gcmV0Owor
ICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICBwcm9wcy5wYXJ0aWFsc1tvcHRpb25z
LmFyZ3NbMF1dID0gb3B0aW9ucy5mbjsKKworICAgICAgICByZXR1cm4gcmV0OworICAgICAgfSk7
CisgICAgfTsKKworICAgIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddOworCisv
KioqLyB9LAorLyogMjAgKi8KKy8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJw
YWNrX3JlcXVpcmVfXykgeworCisgICAgJ3VzZSBzdHJpY3QnOworCisgICAgZXhwb3J0cy5fX2Vz
TW9kdWxlID0gdHJ1ZTsKKworICAgIHZhciBfdXRpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUp
OworCisgICAgdmFyIGxvZ2dlciA9IHsKKyAgICAgIG1ldGhvZE1hcDogWydkZWJ1ZycsICdpbmZv
JywgJ3dhcm4nLCAnZXJyb3InXSwKKyAgICAgIGxldmVsOiAnaW5mbycsCisKKyAgICAgIC8vIE1h
cHMgYSBnaXZlbiBsZXZlbCB2YWx1ZSB0byB0aGUgYG1ldGhvZE1hcGAgaW5kZXhlcyBhYm92ZS4K
KyAgICAgIGxvb2t1cExldmVsOiBmdW5jdGlvbiBsb29rdXBMZXZlbChsZXZlbCkgeworICAgICAg
ICBpZiAodHlwZW9mIGxldmVsID09PSAnc3RyaW5nJykgeworICAgICAgICAgIHZhciBsZXZlbE1h
cCA9IF91dGlscy5pbmRleE9mKGxvZ2dlci5tZXRob2RNYXAsIGxldmVsLnRvTG93ZXJDYXNlKCkp
OworICAgICAgICAgIGlmIChsZXZlbE1hcCA+PSAwKSB7CisgICAgICAgICAgICBsZXZlbCA9IGxl
dmVsTWFwOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsZXZlbCA9IHBhcnNlSW50
KGxldmVsLCAxMCk7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGxl
dmVsOworICAgICAgfSwKKworICAgICAgLy8gQ2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlIGhvc3Qg
ZW52aXJvbm1lbnQKKyAgICAgIGxvZzogZnVuY3Rpb24gbG9nKGxldmVsKSB7CisgICAgICAgIGxl
dmVsID0gbG9nZ2VyLmxvb2t1cExldmVsKGxldmVsKTsKKworICAgICAgICBpZiAodHlwZW9mIGNv
bnNvbGUgIT09ICd1bmRlZmluZWQnICYmIGxvZ2dlci5sb29rdXBMZXZlbChsb2dnZXIubGV2ZWwp
IDw9IGxldmVsKSB7CisgICAgICAgICAgdmFyIG1ldGhvZCA9IGxvZ2dlci5tZXRob2RNYXBbbGV2
ZWxdOworICAgICAgICAgIGlmICghY29uc29sZVttZXRob2RdKSB7CisgICAgICAgICAgICAvLyBl
c2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGUKKyAgICAgICAgICAgIG1ldGhvZCA9ICdsb2cn
OworICAgICAgICAgIH0KKworICAgICAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVu
Z3RoLCBtZXNzYWdlID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsg
X2tleSA8IF9sZW47IF9rZXkrKykgeworICAgICAgICAgICAgbWVzc2FnZVtfa2V5IC0gMV0gPSBh
cmd1bWVudHNbX2tleV07CisgICAgICAgICAgfQorCisgICAgICAgICAgY29uc29sZVttZXRob2Rd
LmFwcGx5KGNvbnNvbGUsIG1lc3NhZ2UpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNv
bGUKKyAgICAgICAgfQorICAgICAgfQorICAgIH07CisKKyAgICBleHBvcnRzWydkZWZhdWx0J10g
PSBsb2dnZXI7CisgICAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107CisKKy8q
KiovIH0sCisvKiAyMSAqLworLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7CisKKyAg
ICAvLyBCdWlsZCBvdXQgb3VyIGJhc2ljIFNhZmVTdHJpbmcgdHlwZQorICAgICd1c2Ugc3RyaWN0
JzsKKworICAgIGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7CisgICAgZnVuY3Rpb24gU2FmZVN0
cmluZyhzdHJpbmcpIHsKKyAgICAgIHRoaXMuc3RyaW5nID0gc3RyaW5nOworICAgIH0KKworICAg
IFNhZmVTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nID0gU2FmZVN0cmluZy5wcm90b3R5cGUudG9I
VE1MID0gZnVuY3Rpb24gKCkgeworICAgICAgcmV0dXJuICcnICsgdGhpcy5zdHJpbmc7CisgICAg
fTsKKworICAgIGV4cG9ydHNbJ2RlZmF1bHQnXSA9IFNhZmVTdHJpbmc7CisgICAgbW9kdWxlLmV4
cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107CisKKy8qKiovIH0sCisvKiAyMiAqLworLyoqKi8g
ZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyAgICAn
dXNlIHN0cmljdCc7CisKKyAgICB2YXIgX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQgPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKDMpWydkZWZhdWx0J107CisKKyAgICB2YXIgX2ludGVyb3BSZXF1aXJlRGVm
YXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18oMSlbJ2RlZmF1bHQnXTsKKworICAgIGV4cG9ydHMu
X19lc01vZHVsZSA9IHRydWU7CisgICAgZXhwb3J0cy5jaGVja1JldmlzaW9uID0gY2hlY2tSZXZp
c2lvbjsKKyAgICBleHBvcnRzLnRlbXBsYXRlID0gdGVtcGxhdGU7CisgICAgZXhwb3J0cy53cmFw
UHJvZ3JhbSA9IHdyYXBQcm9ncmFtOworICAgIGV4cG9ydHMucmVzb2x2ZVBhcnRpYWwgPSByZXNv
bHZlUGFydGlhbDsKKyAgICBleHBvcnRzLmludm9rZVBhcnRpYWwgPSBpbnZva2VQYXJ0aWFsOwor
ICAgIGV4cG9ydHMubm9vcCA9IG5vb3A7CisKKyAgICB2YXIgX3V0aWxzID0gX193ZWJwYWNrX3Jl
cXVpcmVfXyg1KTsKKworICAgIHZhciBVdGlscyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKF91
dGlscyk7CisKKyAgICB2YXIgX2V4Y2VwdGlvbiA9IF9fd2VicGFja19yZXF1aXJlX18oNik7CisK
KyAgICB2YXIgX2V4Y2VwdGlvbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9leGNlcHRpb24p
OworCisgICAgdmFyIF9iYXNlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTsKKworICAgIGZ1bmN0
aW9uIGNoZWNrUmV2aXNpb24oY29tcGlsZXJJbmZvKSB7CisgICAgICB2YXIgY29tcGlsZXJSZXZp
c2lvbiA9IGNvbXBpbGVySW5mbyAmJiBjb21waWxlckluZm9bMF0gfHwgMSwKKyAgICAgICAgICBj
dXJyZW50UmV2aXNpb24gPSBfYmFzZS5DT01QSUxFUl9SRVZJU0lPTjsKKworICAgICAgaWYgKGNv
bXBpbGVyUmV2aXNpb24gIT09IGN1cnJlbnRSZXZpc2lvbikgeworICAgICAgICBpZiAoY29tcGls
ZXJSZXZpc2lvbiA8IGN1cnJlbnRSZXZpc2lvbikgeworICAgICAgICAgIHZhciBydW50aW1lVmVy
c2lvbnMgPSBfYmFzZS5SRVZJU0lPTl9DSEFOR0VTW2N1cnJlbnRSZXZpc2lvbl0sCisgICAgICAg
ICAgICAgIGNvbXBpbGVyVmVyc2lvbnMgPSBfYmFzZS5SRVZJU0lPTl9DSEFOR0VTW2NvbXBpbGVy
UmV2aXNpb25dOworICAgICAgICAgIHRocm93IG5ldyBfZXhjZXB0aW9uMlsnZGVmYXVsdCddKCdU
ZW1wbGF0ZSB3YXMgcHJlY29tcGlsZWQgd2l0aCBhbiBvbGRlciB2ZXJzaW9uIG9mIEhhbmRsZWJh
cnMgdGhhbiB0aGUgY3VycmVudCBydW50aW1lLiAnICsgJ1BsZWFzZSB1cGRhdGUgeW91ciBwcmVj
b21waWxlciB0byBhIG5ld2VyIHZlcnNpb24gKCcgKyBydW50aW1lVmVyc2lvbnMgKyAnKSBvciBk
b3duZ3JhZGUgeW91ciBydW50aW1lIHRvIGFuIG9sZGVyIHZlcnNpb24gKCcgKyBjb21waWxlclZl
cnNpb25zICsgJykuJyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgLy8gVXNlIHRoZSBl
bWJlZGRlZCB2ZXJzaW9uIGluZm8gc2luY2UgdGhlIHJ1bnRpbWUgZG9lc24ndCBrbm93IGFib3V0
IHRoaXMgcmV2aXNpb24geWV0CisgICAgICAgICAgdGhyb3cgbmV3IF9leGNlcHRpb24yWydkZWZh
dWx0J10oJ1RlbXBsYXRlIHdhcyBwcmVjb21waWxlZCB3aXRoIGEgbmV3ZXIgdmVyc2lvbiBvZiBI
YW5kbGViYXJzIHRoYW4gdGhlIGN1cnJlbnQgcnVudGltZS4gJyArICdQbGVhc2UgdXBkYXRlIHlv
dXIgcnVudGltZSB0byBhIG5ld2VyIHZlcnNpb24gKCcgKyBjb21waWxlckluZm9bMV0gKyAnKS4n
KTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIHRlbXBsYXRlKHRl
bXBsYXRlU3BlYywgZW52KSB7CisgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLworICAg
ICAgaWYgKCFlbnYpIHsKKyAgICAgICAgdGhyb3cgbmV3IF9leGNlcHRpb24yWydkZWZhdWx0J10o
J05vIGVudmlyb25tZW50IHBhc3NlZCB0byB0ZW1wbGF0ZScpOworICAgICAgfQorICAgICAgaWYg
KCF0ZW1wbGF0ZVNwZWMgfHwgIXRlbXBsYXRlU3BlYy5tYWluKSB7CisgICAgICAgIHRocm93IG5l
dyBfZXhjZXB0aW9uMlsnZGVmYXVsdCddKCdVbmtub3duIHRlbXBsYXRlIG9iamVjdDogJyArIHR5
cGVvZiB0ZW1wbGF0ZVNwZWMpOworICAgICAgfQorCisgICAgICB0ZW1wbGF0ZVNwZWMubWFpbi5k
ZWNvcmF0b3IgPSB0ZW1wbGF0ZVNwZWMubWFpbl9kOworCisgICAgICAvLyBOb3RlOiBVc2luZyBl
bnYuVk0gcmVmZXJlbmNlcyByYXRoZXIgdGhhbiBsb2NhbCB2YXIgcmVmZXJlbmNlcyB0aHJvdWdo
b3V0IHRoaXMgc2VjdGlvbiB0byBhbGxvdworICAgICAgLy8gZm9yIGV4dGVybmFsIHVzZXJzIHRv
IG92ZXJyaWRlIHRoZXNlIGFzIHBzdWVkby1zdXBwb3J0ZWQgQVBJcy4KKyAgICAgIGVudi5WTS5j
aGVja1JldmlzaW9uKHRlbXBsYXRlU3BlYy5jb21waWxlcik7CisKKyAgICAgIGZ1bmN0aW9uIGlu
dm9rZVBhcnRpYWxXcmFwcGVyKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHsKKyAgICAgICAg
aWYgKG9wdGlvbnMuaGFzaCkgeworICAgICAgICAgIGNvbnRleHQgPSBVdGlscy5leHRlbmQoe30s
IGNvbnRleHQsIG9wdGlvbnMuaGFzaCk7CisgICAgICAgICAgaWYgKG9wdGlvbnMuaWRzKSB7Cisg
ICAgICAgICAgICBvcHRpb25zLmlkc1swXSA9IHRydWU7CisgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgcGFydGlhbCA9IGVudi5WTS5yZXNvbHZlUGFydGlhbC5jYWxsKHRoaXMsIHBh
cnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpOworICAgICAgICB2YXIgcmVzdWx0ID0gZW52LlZNLmlu
dm9rZVBhcnRpYWwuY2FsbCh0aGlzLCBwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKTsKKworICAg
ICAgICBpZiAocmVzdWx0ID09IG51bGwgJiYgZW52LmNvbXBpbGUpIHsKKyAgICAgICAgICBvcHRp
b25zLnBhcnRpYWxzW29wdGlvbnMubmFtZV0gPSBlbnYuY29tcGlsZShwYXJ0aWFsLCB0ZW1wbGF0
ZVNwZWMuY29tcGlsZXJPcHRpb25zLCBlbnYpOworICAgICAgICAgIHJlc3VsdCA9IG9wdGlvbnMu
cGFydGlhbHNbb3B0aW9ucy5uYW1lXShjb250ZXh0LCBvcHRpb25zKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAocmVzdWx0ICE9IG51bGwpIHsKKyAgICAgICAgICBpZiAob3B0aW9ucy5pbmRlbnQp
IHsKKyAgICAgICAgICAgIHZhciBsaW5lcyA9IHJlc3VsdC5zcGxpdCgnXG4nKTsKKyAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwLCBsID0gbGluZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CisgICAg
ICAgICAgICAgIGlmICghbGluZXNbaV0gJiYgaSArIDEgPT09IGwpIHsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgIGxpbmVzW2ldID0gb3B0
aW9ucy5pbmRlbnQgKyBsaW5lc1tpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlc3Vs
dCA9IGxpbmVzLmpvaW4oJ1xuJyk7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdGhyb3cgbmV3IF9leGNlcHRpb24yWydk
ZWZhdWx0J10oJ1RoZSBwYXJ0aWFsICcgKyBvcHRpb25zLm5hbWUgKyAnIGNvdWxkIG5vdCBiZSBj
b21waWxlZCB3aGVuIHJ1bm5pbmcgaW4gcnVudGltZS1vbmx5IG1vZGUnKTsKKyAgICAgICAgfQor
ICAgICAgfQorCisgICAgICAvLyBKdXN0IGFkZCB3YXRlcgorICAgICAgdmFyIGNvbnRhaW5lciA9
IHsKKyAgICAgICAgc3RyaWN0OiBmdW5jdGlvbiBzdHJpY3Qob2JqLCBuYW1lKSB7CisgICAgICAg
ICAgaWYgKCEobmFtZSBpbiBvYmopKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgX2V4Y2VwdGlv
bjJbJ2RlZmF1bHQnXSgnIicgKyBuYW1lICsgJyIgbm90IGRlZmluZWQgaW4gJyArIG9iaik7Cisg
ICAgICAgICAgfQorICAgICAgICAgIHJldHVybiBvYmpbbmFtZV07CisgICAgICAgIH0sCisgICAg
ICAgIGxvb2t1cDogZnVuY3Rpb24gbG9va3VwKGRlcHRocywgbmFtZSkgeworICAgICAgICAgIHZh
ciBsZW4gPSBkZXB0aHMubGVuZ3RoOworICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVu
OyBpKyspIHsKKyAgICAgICAgICAgIGlmIChkZXB0aHNbaV0gJiYgZGVwdGhzW2ldW25hbWVdICE9
IG51bGwpIHsKKyAgICAgICAgICAgICAgcmV0dXJuIGRlcHRoc1tpXVtuYW1lXTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGxhbWJkYTogZnVuY3Rpb24g
bGFtYmRhKGN1cnJlbnQsIGNvbnRleHQpIHsKKyAgICAgICAgICByZXR1cm4gdHlwZW9mIGN1cnJl
bnQgPT09ICdmdW5jdGlvbicgPyBjdXJyZW50LmNhbGwoY29udGV4dCkgOiBjdXJyZW50OworICAg
ICAgICB9LAorCisgICAgICAgIGVzY2FwZUV4cHJlc3Npb246IFV0aWxzLmVzY2FwZUV4cHJlc3Np
b24sCisgICAgICAgIGludm9rZVBhcnRpYWw6IGludm9rZVBhcnRpYWxXcmFwcGVyLAorCisgICAg
ICAgIGZuOiBmdW5jdGlvbiBmbihpKSB7CisgICAgICAgICAgdmFyIHJldCA9IHRlbXBsYXRlU3Bl
Y1tpXTsKKyAgICAgICAgICByZXQuZGVjb3JhdG9yID0gdGVtcGxhdGVTcGVjW2kgKyAnX2QnXTsK
KyAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9LAorCisgICAgICAgIHByb2dyYW1zOiBb
XSwKKyAgICAgICAgcHJvZ3JhbTogZnVuY3Rpb24gcHJvZ3JhbShpLCBkYXRhLCBkZWNsYXJlZEJs
b2NrUGFyYW1zLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7CisgICAgICAgICAgdmFyIHByb2dyYW1X
cmFwcGVyID0gdGhpcy5wcm9ncmFtc1tpXSwKKyAgICAgICAgICAgICAgZm4gPSB0aGlzLmZuKGkp
OworICAgICAgICAgIGlmIChkYXRhIHx8IGRlcHRocyB8fCBibG9ja1BhcmFtcyB8fCBkZWNsYXJl
ZEJsb2NrUGFyYW1zKSB7CisgICAgICAgICAgICBwcm9ncmFtV3JhcHBlciA9IHdyYXBQcm9ncmFt
KHRoaXMsIGksIGZuLCBkYXRhLCBkZWNsYXJlZEJsb2NrUGFyYW1zLCBibG9ja1BhcmFtcywgZGVw
dGhzKTsKKyAgICAgICAgICB9IGVsc2UgaWYgKCFwcm9ncmFtV3JhcHBlcikgeworICAgICAgICAg
ICAgcHJvZ3JhbVdyYXBwZXIgPSB0aGlzLnByb2dyYW1zW2ldID0gd3JhcFByb2dyYW0odGhpcywg
aSwgZm4pOworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gcHJvZ3JhbVdyYXBwZXI7Cisg
ICAgICAgIH0sCisKKyAgICAgICAgZGF0YTogZnVuY3Rpb24gZGF0YSh2YWx1ZSwgZGVwdGgpIHsK
KyAgICAgICAgICB3aGlsZSAodmFsdWUgJiYgZGVwdGgtLSkgeworICAgICAgICAgICAgdmFsdWUg
PSB2YWx1ZS5fcGFyZW50OworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gdmFsdWU7Cisg
ICAgICAgIH0sCisgICAgICAgIG1lcmdlOiBmdW5jdGlvbiBtZXJnZShwYXJhbSwgY29tbW9uKSB7
CisgICAgICAgICAgdmFyIG9iaiA9IHBhcmFtIHx8IGNvbW1vbjsKKworICAgICAgICAgIGlmIChw
YXJhbSAmJiBjb21tb24gJiYgcGFyYW0gIT09IGNvbW1vbikgeworICAgICAgICAgICAgb2JqID0g
VXRpbHMuZXh0ZW5kKHt9LCBjb21tb24sIHBhcmFtKTsKKyAgICAgICAgICB9CisKKyAgICAgICAg
ICByZXR1cm4gb2JqOworICAgICAgICB9LAorCisgICAgICAgIG5vb3A6IGVudi5WTS5ub29wLAor
ICAgICAgICBjb21waWxlckluZm86IHRlbXBsYXRlU3BlYy5jb21waWxlcgorICAgICAgfTsKKwor
ICAgICAgZnVuY3Rpb24gcmV0KGNvbnRleHQpIHsKKyAgICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1
bWVudHMubGVuZ3RoIDw9IDEgfHwgYXJndW1lbnRzWzFdID09PSB1bmRlZmluZWQgPyB7fSA6IGFy
Z3VtZW50c1sxXTsKKworICAgICAgICB2YXIgZGF0YSA9IG9wdGlvbnMuZGF0YTsKKworICAgICAg
ICByZXQuX3NldHVwKG9wdGlvbnMpOworICAgICAgICBpZiAoIW9wdGlvbnMucGFydGlhbCAmJiB0
ZW1wbGF0ZVNwZWMudXNlRGF0YSkgeworICAgICAgICAgIGRhdGEgPSBpbml0RGF0YShjb250ZXh0
LCBkYXRhKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgZGVwdGhzID0gdW5kZWZpbmVkLAorICAg
ICAgICAgICAgYmxvY2tQYXJhbXMgPSB0ZW1wbGF0ZVNwZWMudXNlQmxvY2tQYXJhbXMgPyBbXSA6
IHVuZGVmaW5lZDsKKyAgICAgICAgaWYgKHRlbXBsYXRlU3BlYy51c2VEZXB0aHMpIHsKKyAgICAg
ICAgICBpZiAob3B0aW9ucy5kZXB0aHMpIHsKKyAgICAgICAgICAgIGRlcHRocyA9IGNvbnRleHQg
IT0gb3B0aW9ucy5kZXB0aHNbMF0gPyBbY29udGV4dF0uY29uY2F0KG9wdGlvbnMuZGVwdGhzKSA6
IG9wdGlvbnMuZGVwdGhzOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkZXB0aHMg
PSBbY29udGV4dF07CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24g
bWFpbihjb250ZXh0IC8qLCBvcHRpb25zKi8pIHsKKyAgICAgICAgICByZXR1cm4gJycgKyB0ZW1w
bGF0ZVNwZWMubWFpbihjb250YWluZXIsIGNvbnRleHQsIGNvbnRhaW5lci5oZWxwZXJzLCBjb250
YWluZXIucGFydGlhbHMsIGRhdGEsIGJsb2NrUGFyYW1zLCBkZXB0aHMpOworICAgICAgICB9Cisg
ICAgICAgIG1haW4gPSBleGVjdXRlRGVjb3JhdG9ycyh0ZW1wbGF0ZVNwZWMubWFpbiwgbWFpbiwg
Y29udGFpbmVyLCBvcHRpb25zLmRlcHRocyB8fCBbXSwgZGF0YSwgYmxvY2tQYXJhbXMpOworICAg
ICAgICByZXR1cm4gbWFpbihjb250ZXh0LCBvcHRpb25zKTsKKyAgICAgIH0KKyAgICAgIHJldC5p
c1RvcCA9IHRydWU7CisKKyAgICAgIHJldC5fc2V0dXAgPSBmdW5jdGlvbiAob3B0aW9ucykgewor
ICAgICAgICBpZiAoIW9wdGlvbnMucGFydGlhbCkgeworICAgICAgICAgIGNvbnRhaW5lci5oZWxw
ZXJzID0gY29udGFpbmVyLm1lcmdlKG9wdGlvbnMuaGVscGVycywgZW52LmhlbHBlcnMpOworCisg
ICAgICAgICAgaWYgKHRlbXBsYXRlU3BlYy51c2VQYXJ0aWFsKSB7CisgICAgICAgICAgICBjb250
YWluZXIucGFydGlhbHMgPSBjb250YWluZXIubWVyZ2Uob3B0aW9ucy5wYXJ0aWFscywgZW52LnBh
cnRpYWxzKTsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKHRlbXBsYXRlU3BlYy51c2VQYXJ0
aWFsIHx8IHRlbXBsYXRlU3BlYy51c2VEZWNvcmF0b3JzKSB7CisgICAgICAgICAgICBjb250YWlu
ZXIuZGVjb3JhdG9ycyA9IGNvbnRhaW5lci5tZXJnZShvcHRpb25zLmRlY29yYXRvcnMsIGVudi5k
ZWNvcmF0b3JzKTsKKyAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgY29u
dGFpbmVyLmhlbHBlcnMgPSBvcHRpb25zLmhlbHBlcnM7CisgICAgICAgICAgY29udGFpbmVyLnBh
cnRpYWxzID0gb3B0aW9ucy5wYXJ0aWFsczsKKyAgICAgICAgICBjb250YWluZXIuZGVjb3JhdG9y
cyA9IG9wdGlvbnMuZGVjb3JhdG9yczsKKyAgICAgICAgfQorICAgICAgfTsKKworICAgICAgcmV0
Ll9jaGlsZCA9IGZ1bmN0aW9uIChpLCBkYXRhLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7CisgICAg
ICAgIGlmICh0ZW1wbGF0ZVNwZWMudXNlQmxvY2tQYXJhbXMgJiYgIWJsb2NrUGFyYW1zKSB7Cisg
ICAgICAgICAgdGhyb3cgbmV3IF9leGNlcHRpb24yWydkZWZhdWx0J10oJ211c3QgcGFzcyBibG9j
ayBwYXJhbXMnKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGVtcGxhdGVTcGVjLnVzZURlcHRo
cyAmJiAhZGVwdGhzKSB7CisgICAgICAgICAgdGhyb3cgbmV3IF9leGNlcHRpb24yWydkZWZhdWx0
J10oJ211c3QgcGFzcyBwYXJlbnQgZGVwdGhzJyk7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gd3JhcFByb2dyYW0oY29udGFpbmVyLCBpLCB0ZW1wbGF0ZVNwZWNbaV0sIGRhdGEsIDAsIGJs
b2NrUGFyYW1zLCBkZXB0aHMpOworICAgICAgfTsKKyAgICAgIHJldHVybiByZXQ7CisgICAgfQor
CisgICAgZnVuY3Rpb24gd3JhcFByb2dyYW0oY29udGFpbmVyLCBpLCBmbiwgZGF0YSwgZGVjbGFy
ZWRCbG9ja1BhcmFtcywgYmxvY2tQYXJhbXMsIGRlcHRocykgeworICAgICAgZnVuY3Rpb24gcHJv
Zyhjb250ZXh0KSB7CisgICAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA8PSAx
IHx8IGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkID8ge30gOiBhcmd1bWVudHNbMV07CisKKyAg
ICAgICAgdmFyIGN1cnJlbnREZXB0aHMgPSBkZXB0aHM7CisgICAgICAgIGlmIChkZXB0aHMgJiYg
Y29udGV4dCAhPSBkZXB0aHNbMF0pIHsKKyAgICAgICAgICBjdXJyZW50RGVwdGhzID0gW2NvbnRl
eHRdLmNvbmNhdChkZXB0aHMpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZuKGNvbnRh
aW5lciwgY29udGV4dCwgY29udGFpbmVyLmhlbHBlcnMsIGNvbnRhaW5lci5wYXJ0aWFscywgb3B0
aW9ucy5kYXRhIHx8IGRhdGEsIGJsb2NrUGFyYW1zICYmIFtvcHRpb25zLmJsb2NrUGFyYW1zXS5j
b25jYXQoYmxvY2tQYXJhbXMpLCBjdXJyZW50RGVwdGhzKTsKKyAgICAgIH0KKworICAgICAgcHJv
ZyA9IGV4ZWN1dGVEZWNvcmF0b3JzKGZuLCBwcm9nLCBjb250YWluZXIsIGRlcHRocywgZGF0YSwg
YmxvY2tQYXJhbXMpOworCisgICAgICBwcm9nLnByb2dyYW0gPSBpOworICAgICAgcHJvZy5kZXB0
aCA9IGRlcHRocyA/IGRlcHRocy5sZW5ndGggOiAwOworICAgICAgcHJvZy5ibG9ja1BhcmFtcyA9
IGRlY2xhcmVkQmxvY2tQYXJhbXMgfHwgMDsKKyAgICAgIHJldHVybiBwcm9nOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIHJlc29sdmVQYXJ0aWFsKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHsK
KyAgICAgIGlmICghcGFydGlhbCkgeworICAgICAgICBpZiAob3B0aW9ucy5uYW1lID09PSAnQHBh
cnRpYWwtYmxvY2snKSB7CisgICAgICAgICAgdmFyIGRhdGEgPSBvcHRpb25zLmRhdGE7CisgICAg
ICAgICAgd2hpbGUgKGRhdGFbJ3BhcnRpYWwtYmxvY2snXSA9PT0gbm9vcCkgeworICAgICAgICAg
ICAgZGF0YSA9IGRhdGEuX3BhcmVudDsKKyAgICAgICAgICB9CisgICAgICAgICAgcGFydGlhbCA9
IGRhdGFbJ3BhcnRpYWwtYmxvY2snXTsKKyAgICAgICAgICBkYXRhWydwYXJ0aWFsLWJsb2NrJ10g
PSBub29wOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHBhcnRpYWwgPSBvcHRpb25zLnBh
cnRpYWxzW29wdGlvbnMubmFtZV07CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSBpZiAoIXBhcnRp
YWwuY2FsbCAmJiAhb3B0aW9ucy5uYW1lKSB7CisgICAgICAgIC8vIFRoaXMgaXMgYSBkeW5hbWlj
IHBhcnRpYWwgdGhhdCByZXR1cm5lZCBhIHN0cmluZworICAgICAgICBvcHRpb25zLm5hbWUgPSBw
YXJ0aWFsOworICAgICAgICBwYXJ0aWFsID0gb3B0aW9ucy5wYXJ0aWFsc1twYXJ0aWFsXTsKKyAg
ICAgIH0KKyAgICAgIHJldHVybiBwYXJ0aWFsOworICAgIH0KKworICAgIGZ1bmN0aW9uIGludm9r
ZVBhcnRpYWwocGFydGlhbCwgY29udGV4dCwgb3B0aW9ucykgeworICAgICAgb3B0aW9ucy5wYXJ0
aWFsID0gdHJ1ZTsKKyAgICAgIGlmIChvcHRpb25zLmlkcykgeworICAgICAgICBvcHRpb25zLmRh
dGEuY29udGV4dFBhdGggPSBvcHRpb25zLmlkc1swXSB8fCBvcHRpb25zLmRhdGEuY29udGV4dFBh
dGg7CisgICAgICB9CisKKyAgICAgIHZhciBwYXJ0aWFsQmxvY2sgPSB1bmRlZmluZWQ7CisgICAg
ICBpZiAob3B0aW9ucy5mbiAmJiBvcHRpb25zLmZuICE9PSBub29wKSB7CisgICAgICAgIG9wdGlv
bnMuZGF0YSA9IF9iYXNlLmNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7CisgICAgICAgIHBhcnRp
YWxCbG9jayA9IG9wdGlvbnMuZGF0YVsncGFydGlhbC1ibG9jayddID0gb3B0aW9ucy5mbjsKKwor
ICAgICAgICBpZiAocGFydGlhbEJsb2NrLnBhcnRpYWxzKSB7CisgICAgICAgICAgb3B0aW9ucy5w
YXJ0aWFscyA9IFV0aWxzLmV4dGVuZCh7fSwgb3B0aW9ucy5wYXJ0aWFscywgcGFydGlhbEJsb2Nr
LnBhcnRpYWxzKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAocGFydGlhbCA9PT0g
dW5kZWZpbmVkICYmIHBhcnRpYWxCbG9jaykgeworICAgICAgICBwYXJ0aWFsID0gcGFydGlhbEJs
b2NrOworICAgICAgfQorCisgICAgICBpZiAocGFydGlhbCA9PT0gdW5kZWZpbmVkKSB7CisgICAg
ICAgIHRocm93IG5ldyBfZXhjZXB0aW9uMlsnZGVmYXVsdCddKCdUaGUgcGFydGlhbCAnICsgb3B0
aW9ucy5uYW1lICsgJyBjb3VsZCBub3QgYmUgZm91bmQnKTsKKyAgICAgIH0gZWxzZSBpZiAocGFy
dGlhbCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7CisgICAgICAgIHJldHVybiBwYXJ0aWFsKGNvbnRl
eHQsIG9wdGlvbnMpOworICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIG5vb3AoKSB7Cisg
ICAgICByZXR1cm4gJyc7CisgICAgfQorCisgICAgZnVuY3Rpb24gaW5pdERhdGEoY29udGV4dCwg
ZGF0YSkgeworICAgICAgaWYgKCFkYXRhIHx8ICEoJ3Jvb3QnIGluIGRhdGEpKSB7CisgICAgICAg
IGRhdGEgPSBkYXRhID8gX2Jhc2UuY3JlYXRlRnJhbWUoZGF0YSkgOiB7fTsKKyAgICAgICAgZGF0
YS5yb290ID0gY29udGV4dDsKKyAgICAgIH0KKyAgICAgIHJldHVybiBkYXRhOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIGV4ZWN1dGVEZWNvcmF0b3JzKGZuLCBwcm9nLCBjb250YWluZXIsIGRlcHRo
cywgZGF0YSwgYmxvY2tQYXJhbXMpIHsKKyAgICAgIGlmIChmbi5kZWNvcmF0b3IpIHsKKyAgICAg
ICAgdmFyIHByb3BzID0ge307CisgICAgICAgIHByb2cgPSBmbi5kZWNvcmF0b3IocHJvZywgcHJv
cHMsIGNvbnRhaW5lciwgZGVwdGhzICYmIGRlcHRoc1swXSwgZGF0YSwgYmxvY2tQYXJhbXMsIGRl
cHRocyk7CisgICAgICAgIFV0aWxzLmV4dGVuZChwcm9nLCBwcm9wcyk7CisgICAgICB9CisgICAg
ICByZXR1cm4gcHJvZzsKKyAgICB9CisKKy8qKiovIH0sCisvKiAyMyAqLworLyoqKi8gZnVuY3Rp
b24obW9kdWxlLCBleHBvcnRzKSB7CisKKyAgICAvKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8o
ZnVuY3Rpb24oZ2xvYmFsKSB7LyogZ2xvYmFsIHdpbmRvdyAqLworICAgICd1c2Ugc3RyaWN0JzsK
KworICAgIGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7CisKKyAgICBleHBvcnRzWydkZWZhdWx0
J10gPSBmdW5jdGlvbiAoSGFuZGxlYmFycykgeworICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5l
eHQgKi8KKyAgICAgIHZhciByb290ID0gdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBn
bG9iYWwgOiB3aW5kb3csCisgICAgICAgICAgJEhhbmRsZWJhcnMgPSByb290LkhhbmRsZWJhcnM7
CisgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLworICAgICAgSGFuZGxlYmFycy5ub0Nv
bmZsaWN0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAocm9vdC5IYW5kbGViYXJzID09PSBI
YW5kbGViYXJzKSB7CisgICAgICAgICAgcm9vdC5IYW5kbGViYXJzID0gJEhhbmRsZWJhcnM7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEhhbmRsZWJhcnM7CisgICAgICB9OworICAgIH07CisK
KyAgICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTsKKyAgICAvKiBXRUJQQUNL
IFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoZXhwb3J0cywgKGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhp
czsgfSgpKSkpCisKKy8qKiovIH0sCisvKiAyNCAqLworLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBl
eHBvcnRzKSB7CisKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICBleHBvcnRzLl9fZXNNb2R1bGUg
PSB0cnVlOworICAgIHZhciBBU1QgPSB7CisgICAgICAvLyBQdWJsaWMgQVBJIHVzZWQgdG8gZXZh
bHVhdGUgZGVyaXZlZCBhdHRyaWJ1dGVzIHJlZ2FyZGluZyBBU1Qgbm9kZXMKKyAgICAgIGhlbHBl
cnM6IHsKKyAgICAgICAgLy8gYSBtdXN0YWNoZSBpcyBkZWZpbml0ZWx5IGEgaGVscGVyIGlmOgor
ICAgICAgICAvLyAqIGl0IGlzIGFuIGVsaWdpYmxlIGhlbHBlciwgYW5kCisgICAgICAgIC8vICog
aXQgaGFzIGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIgb3IgaGFzaCBzZWdtZW50CisgICAgICAgIGhl
bHBlckV4cHJlc3Npb246IGZ1bmN0aW9uIGhlbHBlckV4cHJlc3Npb24obm9kZSkgeworICAgICAg
ICAgIHJldHVybiBub2RlLnR5cGUgPT09ICdTdWJFeHByZXNzaW9uJyB8fCAobm9kZS50eXBlID09
PSAnTXVzdGFjaGVTdGF0ZW1lbnQnIHx8IG5vZGUudHlwZSA9PT0gJ0Jsb2NrU3RhdGVtZW50Jykg
JiYgISEobm9kZS5wYXJhbXMgJiYgbm9kZS5wYXJhbXMubGVuZ3RoIHx8IG5vZGUuaGFzaCk7Cisg
ICAgICAgIH0sCisKKyAgICAgICAgc2NvcGVkSWQ6IGZ1bmN0aW9uIHNjb3BlZElkKHBhdGgpIHsK
KyAgICAgICAgICByZXR1cm4gKC9eXC58dGhpc1xiLy50ZXN0KHBhdGgub3JpZ2luYWwpCisgICAg
ICAgICAgKTsKKyAgICAgICAgfSwKKworICAgICAgICAvLyBhbiBJRCBpcyBzaW1wbGUgaWYgaXQg
b25seSBoYXMgb25lIHBhcnQsIGFuZCB0aGF0IHBhcnQgaXMgbm90CisgICAgICAgIC8vIGAuLmAg
b3IgYHRoaXNgLgorICAgICAgICBzaW1wbGVJZDogZnVuY3Rpb24gc2ltcGxlSWQocGF0aCkgewor
ICAgICAgICAgIHJldHVybiBwYXRoLnBhcnRzLmxlbmd0aCA9PT0gMSAmJiAhQVNULmhlbHBlcnMu
c2NvcGVkSWQocGF0aCkgJiYgIXBhdGguZGVwdGg7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9
OworCisgICAgLy8gTXVzdCBiZSBleHBvcnRlZCBhcyBhbiBvYmplY3QgcmF0aGVyIHRoYW4gdGhl
IHJvb3Qgb2YgdGhlIG1vZHVsZSBhcyB0aGUgamlzb24gbGV4ZXIKKyAgICAvLyBtdXN0IG1vZGlm
eSB0aGUgb2JqZWN0IHRvIG9wZXJhdGUgcHJvcGVybHkuCisgICAgZXhwb3J0c1snZGVmYXVsdCdd
ID0gQVNUOworICAgIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddOworCisvKioq
LyB9LAorLyogMjUgKi8KKy8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNr
X3JlcXVpcmVfXykgeworCisgICAgJ3VzZSBzdHJpY3QnOworCisgICAgdmFyIF9pbnRlcm9wUmVx
dWlyZURlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpWydkZWZhdWx0J107CisKKyAgICB2
YXIgX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpWydkZWZh
dWx0J107CisKKyAgICBleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlOworICAgIGV4cG9ydHMucGFy
c2UgPSBwYXJzZTsKKworICAgIHZhciBfcGFyc2VyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNik7
CisKKyAgICB2YXIgX3BhcnNlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wYXJzZXIpOwor
CisgICAgdmFyIF93aGl0ZXNwYWNlQ29udHJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oMjcpOwor
CisgICAgdmFyIF93aGl0ZXNwYWNlQ29udHJvbDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF93
aGl0ZXNwYWNlQ29udHJvbCk7CisKKyAgICB2YXIgX2hlbHBlcnMgPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKDI5KTsKKworICAgIHZhciBIZWxwZXJzID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoX2hl
bHBlcnMpOworCisgICAgdmFyIF91dGlscyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7CisKKyAg
ICBleHBvcnRzLnBhcnNlciA9IF9wYXJzZXIyWydkZWZhdWx0J107CisKKyAgICB2YXIgeXkgPSB7
fTsKKyAgICBfdXRpbHMuZXh0ZW5kKHl5LCBIZWxwZXJzKTsKKworICAgIGZ1bmN0aW9uIHBhcnNl
KGlucHV0LCBvcHRpb25zKSB7CisgICAgICAvLyBKdXN0IHJldHVybiBpZiBhbiBhbHJlYWR5LWNv
bXBpbGVkIEFTVCB3YXMgcGFzc2VkIGluLgorICAgICAgaWYgKGlucHV0LnR5cGUgPT09ICdQcm9n
cmFtJykgeworICAgICAgICByZXR1cm4gaW5wdXQ7CisgICAgICB9CisKKyAgICAgIF9wYXJzZXIy
WydkZWZhdWx0J10ueXkgPSB5eTsKKworICAgICAgLy8gQWx0ZXJpbmcgdGhlIHNoYXJlZCBvYmpl
Y3QgaGVyZSwgYnV0IHRoaXMgaXMgb2sgYXMgcGFyc2VyIGlzIGEgc3luYyBvcGVyYXRpb24KKyAg
ICAgIHl5LmxvY0luZm8gPSBmdW5jdGlvbiAobG9jSW5mbykgeworICAgICAgICByZXR1cm4gbmV3
IHl5LlNvdXJjZUxvY2F0aW9uKG9wdGlvbnMgJiYgb3B0aW9ucy5zcmNOYW1lLCBsb2NJbmZvKTsK
KyAgICAgIH07CisKKyAgICAgIHZhciBzdHJpcCA9IG5ldyBfd2hpdGVzcGFjZUNvbnRyb2wyWydk
ZWZhdWx0J10ob3B0aW9ucyk7CisgICAgICByZXR1cm4gc3RyaXAuYWNjZXB0KF9wYXJzZXIyWydk
ZWZhdWx0J10ucGFyc2UoaW5wdXQpKTsKKyAgICB9CisKKy8qKiovIH0sCisvKiAyNiAqLworLyoq
Ki8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7CisKKyAgICAvKiBpc3RhbmJ1bCBpZ25vcmUg
bmV4dCAqLworICAgIC8qIEppc29uIGdlbmVyYXRlZCBwYXJzZXIgKi8KKyAgICAidXNlIHN0cmlj
dCI7CisKKyAgICB2YXIgaGFuZGxlYmFycyA9IChmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBw
YXJzZXIgPSB7IHRyYWNlOiBmdW5jdGlvbiB0cmFjZSgpIHt9LAorICAgICAgICAgICAgeXk6IHt9
LAorICAgICAgICAgICAgc3ltYm9sc186IHsgImVycm9yIjogMiwgInJvb3QiOiAzLCAicHJvZ3Jh
bSI6IDQsICJFT0YiOiA1LCAicHJvZ3JhbV9yZXBldGl0aW9uMCI6IDYsICJzdGF0ZW1lbnQiOiA3
LCAibXVzdGFjaGUiOiA4LCAiYmxvY2siOiA5LCAicmF3QmxvY2siOiAxMCwgInBhcnRpYWwiOiAx
MSwgInBhcnRpYWxCbG9jayI6IDEyLCAiY29udGVudCI6IDEzLCAiQ09NTUVOVCI6IDE0LCAiQ09O
VEVOVCI6IDE1LCAib3BlblJhd0Jsb2NrIjogMTYsICJyYXdCbG9ja19yZXBldGl0aW9uX3BsdXMw
IjogMTcsICJFTkRfUkFXX0JMT0NLIjogMTgsICJPUEVOX1JBV19CTE9DSyI6IDE5LCAiaGVscGVy
TmFtZSI6IDIwLCAib3BlblJhd0Jsb2NrX3JlcGV0aXRpb24wIjogMjEsICJvcGVuUmF3QmxvY2tf
b3B0aW9uMCI6IDIyLCAiQ0xPU0VfUkFXX0JMT0NLIjogMjMsICJvcGVuQmxvY2siOiAyNCwgImJs
b2NrX29wdGlvbjAiOiAyNSwgImNsb3NlQmxvY2siOiAyNiwgIm9wZW5JbnZlcnNlIjogMjcsICJi
bG9ja19vcHRpb24xIjogMjgsICJPUEVOX0JMT0NLIjogMjksICJvcGVuQmxvY2tfcmVwZXRpdGlv
bjAiOiAzMCwgIm9wZW5CbG9ja19vcHRpb24wIjogMzEsICJvcGVuQmxvY2tfb3B0aW9uMSI6IDMy
LCAiQ0xPU0UiOiAzMywgIk9QRU5fSU5WRVJTRSI6IDM0LCAib3BlbkludmVyc2VfcmVwZXRpdGlv
bjAiOiAzNSwgIm9wZW5JbnZlcnNlX29wdGlvbjAiOiAzNiwgIm9wZW5JbnZlcnNlX29wdGlvbjEi
OiAzNywgIm9wZW5JbnZlcnNlQ2hhaW4iOiAzOCwgIk9QRU5fSU5WRVJTRV9DSEFJTiI6IDM5LCAi
b3BlbkludmVyc2VDaGFpbl9yZXBldGl0aW9uMCI6IDQwLCAib3BlbkludmVyc2VDaGFpbl9vcHRp
b24wIjogNDEsICJvcGVuSW52ZXJzZUNoYWluX29wdGlvbjEiOiA0MiwgImludmVyc2VBbmRQcm9n
cmFtIjogNDMsICJJTlZFUlNFIjogNDQsICJpbnZlcnNlQ2hhaW4iOiA0NSwgImludmVyc2VDaGFp
bl9vcHRpb24wIjogNDYsICJPUEVOX0VOREJMT0NLIjogNDcsICJPUEVOIjogNDgsICJtdXN0YWNo
ZV9yZXBldGl0aW9uMCI6IDQ5LCAibXVzdGFjaGVfb3B0aW9uMCI6IDUwLCAiT1BFTl9VTkVTQ0FQ
RUQiOiA1MSwgIm11c3RhY2hlX3JlcGV0aXRpb24xIjogNTIsICJtdXN0YWNoZV9vcHRpb24xIjog
NTMsICJDTE9TRV9VTkVTQ0FQRUQiOiA1NCwgIk9QRU5fUEFSVElBTCI6IDU1LCAicGFydGlhbE5h
bWUiOiA1NiwgInBhcnRpYWxfcmVwZXRpdGlvbjAiOiA1NywgInBhcnRpYWxfb3B0aW9uMCI6IDU4
LCAib3BlblBhcnRpYWxCbG9jayI6IDU5LCAiT1BFTl9QQVJUSUFMX0JMT0NLIjogNjAsICJvcGVu
UGFydGlhbEJsb2NrX3JlcGV0aXRpb24wIjogNjEsICJvcGVuUGFydGlhbEJsb2NrX29wdGlvbjAi
OiA2MiwgInBhcmFtIjogNjMsICJzZXhwciI6IDY0LCAiT1BFTl9TRVhQUiI6IDY1LCAic2V4cHJf
cmVwZXRpdGlvbjAiOiA2NiwgInNleHByX29wdGlvbjAiOiA2NywgIkNMT1NFX1NFWFBSIjogNjgs
ICJoYXNoIjogNjksICJoYXNoX3JlcGV0aXRpb25fcGx1czAiOiA3MCwgImhhc2hTZWdtZW50Ijog
NzEsICJJRCI6IDcyLCAiRVFVQUxTIjogNzMsICJibG9ja1BhcmFtcyI6IDc0LCAiT1BFTl9CTE9D
S19QQVJBTVMiOiA3NSwgImJsb2NrUGFyYW1zX3JlcGV0aXRpb25fcGx1czAiOiA3NiwgIkNMT1NF
X0JMT0NLX1BBUkFNUyI6IDc3LCAicGF0aCI6IDc4LCAiZGF0YU5hbWUiOiA3OSwgIlNUUklORyI6
IDgwLCAiTlVNQkVSIjogODEsICJCT09MRUFOIjogODIsICJVTkRFRklORUQiOiA4MywgIk5VTEwi
OiA4NCwgIkRBVEEiOiA4NSwgInBhdGhTZWdtZW50cyI6IDg2LCAiU0VQIjogODcsICIkYWNjZXB0
IjogMCwgIiRlbmQiOiAxIH0sCisgICAgICAgICAgICB0ZXJtaW5hbHNfOiB7IDI6ICJlcnJvciIs
IDU6ICJFT0YiLCAxNDogIkNPTU1FTlQiLCAxNTogIkNPTlRFTlQiLCAxODogIkVORF9SQVdfQkxP
Q0siLCAxOTogIk9QRU5fUkFXX0JMT0NLIiwgMjM6ICJDTE9TRV9SQVdfQkxPQ0siLCAyOTogIk9Q
RU5fQkxPQ0siLCAzMzogIkNMT1NFIiwgMzQ6ICJPUEVOX0lOVkVSU0UiLCAzOTogIk9QRU5fSU5W
RVJTRV9DSEFJTiIsIDQ0OiAiSU5WRVJTRSIsIDQ3OiAiT1BFTl9FTkRCTE9DSyIsIDQ4OiAiT1BF
TiIsIDUxOiAiT1BFTl9VTkVTQ0FQRUQiLCA1NDogIkNMT1NFX1VORVNDQVBFRCIsIDU1OiAiT1BF
Tl9QQVJUSUFMIiwgNjA6ICJPUEVOX1BBUlRJQUxfQkxPQ0siLCA2NTogIk9QRU5fU0VYUFIiLCA2
ODogIkNMT1NFX1NFWFBSIiwgNzI6ICJJRCIsIDczOiAiRVFVQUxTIiwgNzU6ICJPUEVOX0JMT0NL
X1BBUkFNUyIsIDc3OiAiQ0xPU0VfQkxPQ0tfUEFSQU1TIiwgODA6ICJTVFJJTkciLCA4MTogIk5V
TUJFUiIsIDgyOiAiQk9PTEVBTiIsIDgzOiAiVU5ERUZJTkVEIiwgODQ6ICJOVUxMIiwgODU6ICJE
QVRBIiwgODc6ICJTRVAiIH0sCisgICAgICAgICAgICBwcm9kdWN0aW9uc186IFswLCBbMywgMl0s
IFs0LCAxXSwgWzcsIDFdLCBbNywgMV0sIFs3LCAxXSwgWzcsIDFdLCBbNywgMV0sIFs3LCAxXSwg
WzcsIDFdLCBbMTMsIDFdLCBbMTAsIDNdLCBbMTYsIDVdLCBbOSwgNF0sIFs5LCA0XSwgWzI0LCA2
XSwgWzI3LCA2XSwgWzM4LCA2XSwgWzQzLCAyXSwgWzQ1LCAzXSwgWzQ1LCAxXSwgWzI2LCAzXSwg
WzgsIDVdLCBbOCwgNV0sIFsxMSwgNV0sIFsxMiwgM10sIFs1OSwgNV0sIFs2MywgMV0sIFs2Mywg
MV0sIFs2NCwgNV0sIFs2OSwgMV0sIFs3MSwgM10sIFs3NCwgM10sIFsyMCwgMV0sIFsyMCwgMV0s
IFsyMCwgMV0sIFsyMCwgMV0sIFsyMCwgMV0sIFsyMCwgMV0sIFsyMCwgMV0sIFs1NiwgMV0sIFs1
NiwgMV0sIFs3OSwgMl0sIFs3OCwgMV0sIFs4NiwgM10sIFs4NiwgMV0sIFs2LCAwXSwgWzYsIDJd
LCBbMTcsIDFdLCBbMTcsIDJdLCBbMjEsIDBdLCBbMjEsIDJdLCBbMjIsIDBdLCBbMjIsIDFdLCBb
MjUsIDBdLCBbMjUsIDFdLCBbMjgsIDBdLCBbMjgsIDFdLCBbMzAsIDBdLCBbMzAsIDJdLCBbMzEs
IDBdLCBbMzEsIDFdLCBbMzIsIDBdLCBbMzIsIDFdLCBbMzUsIDBdLCBbMzUsIDJdLCBbMzYsIDBd
LCBbMzYsIDFdLCBbMzcsIDBdLCBbMzcsIDFdLCBbNDAsIDBdLCBbNDAsIDJdLCBbNDEsIDBdLCBb
NDEsIDFdLCBbNDIsIDBdLCBbNDIsIDFdLCBbNDYsIDBdLCBbNDYsIDFdLCBbNDksIDBdLCBbNDks
IDJdLCBbNTAsIDBdLCBbNTAsIDFdLCBbNTIsIDBdLCBbNTIsIDJdLCBbNTMsIDBdLCBbNTMsIDFd
LCBbNTcsIDBdLCBbNTcsIDJdLCBbNTgsIDBdLCBbNTgsIDFdLCBbNjEsIDBdLCBbNjEsIDJdLCBb
NjIsIDBdLCBbNjIsIDFdLCBbNjYsIDBdLCBbNjYsIDJdLCBbNjcsIDBdLCBbNjcsIDFdLCBbNzAs
IDFdLCBbNzAsIDJdLCBbNzYsIDFdLCBbNzYsIDJdXSwKKyAgICAgICAgICAgIHBlcmZvcm1BY3Rp
b246IGZ1bmN0aW9uIGFub255bW91cyh5eXRleHQsIHl5bGVuZywgeXlsaW5lbm8sIHl5LCB5eXN0
YXRlLCAkJCwgXyQKKyAgICAgICAgICAgIC8qKi8pIHsKKworICAgICAgICAgICAgICAgIHZhciAk
MCA9ICQkLmxlbmd0aCAtIDE7CisgICAgICAgICAgICAgICAgc3dpdGNoICh5eXN0YXRlKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAkJFskMCAtIDFdOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9IHl5LnBy
ZXBhcmVQcm9ncmFtKCQkWyQwXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4k
ID0gJCRbJDBdOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNl
IDU6CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQgPSAkJFskMF07CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA2OgorICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy4kID0gJCRbJDBdOworICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgNzoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMuJCA9ICQkWyQwXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICBjYXNlIDg6CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
LiQgPSAkJFskMF07CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSA5OgorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kID0geworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdDb21tZW50U3RhdGVtZW50JywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogeXkuc3RyaXBDb21tZW50KCQkWyQwXSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDBdLCAk
JFskMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYzogeXkubG9jSW5mbyh0aGlz
Ll8kKQorICAgICAgICAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTA6CisgICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLiQgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0Nv
bnRlbnRTdGF0ZW1lbnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsOiAk
JFskMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICQkWyQwXSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsb2M6IHl5LmxvY0luZm8odGhpcy5fJCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICBjYXNlIDExOgorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4k
ID0geXkucHJlcGFyZVJhd0Jsb2NrKCQkWyQwIC0gMl0sICQkWyQwIC0gMV0sICQkWyQwXSwgdGhp
cy5fJCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSAxMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9IHsgcGF0aDogJCRb
JDAgLSAzXSwgcGFyYW1zOiAkJFskMCAtIDJdLCBoYXNoOiAkJFskMCAtIDFdIH07CisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxMzoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9IHl5LnByZXBhcmVCbG9jaygkJFskMCAtIDNd
LCAkJFskMCAtIDJdLCAkJFskMCAtIDFdLCAkJFskMF0sIGZhbHNlLCB0aGlzLl8kKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDE0Ogor
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kID0geXkucHJlcGFyZUJsb2NrKCQkWyQwIC0g
M10sICQkWyQwIC0gMl0sICQkWyQwIC0gMV0sICQkWyQwXSwgdHJ1ZSwgdGhpcy5fJCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxNToK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9IHsgb3BlbjogJCRbJDAgLSA1XSwgcGF0
aDogJCRbJDAgLSA0XSwgcGFyYW1zOiAkJFskMCAtIDNdLCBoYXNoOiAkJFskMCAtIDJdLCBibG9j
a1BhcmFtczogJCRbJDAgLSAxXSwgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAgLSA1XSwgJCRb
JDBdKSB9OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgMTY6CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQgPSB7IHBhdGg6ICQk
WyQwIC0gNF0sIHBhcmFtczogJCRbJDAgLSAzXSwgaGFzaDogJCRbJDAgLSAyXSwgYmxvY2tQYXJh
bXM6ICQkWyQwIC0gMV0sIHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwIC0gNV0sICQkWyQwXSkg
fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBj
YXNlIDE3OgorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kID0geyBwYXRoOiAkJFskMCAt
IDRdLCBwYXJhbXM6ICQkWyQwIC0gM10sIGhhc2g6ICQkWyQwIC0gMl0sIGJsb2NrUGFyYW1zOiAk
JFskMCAtIDFdLCBzdHJpcDogeXkuc3RyaXBGbGFncygkJFskMCAtIDVdLCAkJFskMF0pIH07Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAx
ODoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9IHsgc3RyaXA6IHl5LnN0cmlwRmxh
Z3MoJCRbJDAgLSAxXSwgJCRbJDAgLSAxXSksIHByb2dyYW06ICQkWyQwXSB9OworICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTk6CisgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgaW52ZXJzZSA9IHl5LnByZXBhcmVCbG9jaygkJFskMCAt
IDJdLCAkJFskMCAtIDFdLCAkJFskMF0sICQkWyQwXSwgZmFsc2UsIHRoaXMuXyQpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0gPSB5eS5wcmVwYXJlUHJvZ3JhbShbaW52ZXJz
ZV0sICQkWyQwIC0gMV0ubG9jKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0uY2hh
aW5lZCA9IHRydWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9IHsgc3RyaXA6
ICQkWyQwIC0gMl0uc3RyaXAsIHByb2dyYW06IHByb2dyYW0sIGNoYWluOiB0cnVlIH07CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDIw
OgorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kID0gJCRbJDBdOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjE6CisgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLiQgPSB7IHBhdGg6ICQkWyQwIC0gMV0sIHN0cmlwOiB5eS5z
dHJpcEZsYWdzKCQkWyQwIC0gMl0sICQkWyQwXSkgfTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDIyOgorICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy4kID0geXkucHJlcGFyZU11c3RhY2hlKCQkWyQwIC0gM10sICQkWyQwIC0gMl0s
ICQkWyQwIC0gMV0sICQkWyQwIC0gNF0sIHl5LnN0cmlwRmxhZ3MoJCRbJDAgLSA0XSwgJCRbJDBd
KSwgdGhpcy5fJCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSAyMzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9IHl5LnBy
ZXBhcmVNdXN0YWNoZSgkJFskMCAtIDNdLCAkJFskMCAtIDJdLCAkJFskMCAtIDFdLCAkJFskMCAt
IDRdLCB5eS5zdHJpcEZsYWdzKCQkWyQwIC0gNF0sICQkWyQwXSksIHRoaXMuXyQpOworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjQ6Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQgPSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdHlwZTogJ1BhcnRpYWxTdGF0ZW1lbnQnLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5hbWU6ICQkWyQwIC0gM10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1z
OiAkJFskMCAtIDJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2g6ICQkWyQwIC0g
MV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZW50OiAnJywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHJpcDogeXkuc3RyaXBGbGFncygkJFskMCAtIDRdLCAkJFskMF0p
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYzogeXkubG9jSW5mbyh0aGlzLl8kKQor
ICAgICAgICAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjU6CisgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLiQgPSB5eS5wcmVwYXJlUGFydGlhbEJsb2NrKCQkWyQwIC0gMl0sICQkWyQwIC0gMV0s
ICQkWyQwXSwgdGhpcy5fJCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSAyNjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9
IHsgcGF0aDogJCRbJDAgLSAzXSwgcGFyYW1zOiAkJFskMCAtIDJdLCBoYXNoOiAkJFskMCAtIDFd
LCBzdHJpcDogeXkuc3RyaXBGbGFncygkJFskMCAtIDRdLCAkJFskMF0pIH07CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyNzoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDI4OgorICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy4kID0gJCRbJDBdOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjk6CisgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLiQgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1N1YkV4cHJlc3Np
b24nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6ICQkWyQwIC0gM10sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiAkJFskMCAtIDJdLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGhhc2g6ICQkWyQwIC0gMV0sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpCisgICAgICAgICAgICAgICAgICAgICAgICB9
OworCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSAzMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9IHsgdHlwZTogJ0hhc2gn
LCBwYWlyczogJCRbJDBdLCBsb2M6IHl5LmxvY0luZm8odGhpcy5fJCkgfTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDMxOgorICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy4kID0geyB0eXBlOiAnSGFzaFBhaXInLCBrZXk6IHl5Lmlk
KCQkWyQwIC0gMl0pLCB2YWx1ZTogJCRbJDBdLCBsb2M6IHl5LmxvY0luZm8odGhpcy5fJCkgfTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNl
IDMyOgorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kID0geXkuaWQoJCRbJDAgLSAxXSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAzMzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDM0OgorICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy4kID0gJCRbJDBdOworICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzU6CisgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLiQgPSB7IHR5cGU6ICdTdHJpbmdMaXRlcmFsJywgdmFsdWU6ICQkWyQw
XSwgb3JpZ2luYWw6ICQkWyQwXSwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpIH07CisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAzNjoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9IHsgdHlwZTogJ051bWJlckxpdGVyYWwnLCB2
YWx1ZTogTnVtYmVyKCQkWyQwXSksIG9yaWdpbmFsOiBOdW1iZXIoJCRbJDBdKSwgbG9jOiB5eS5s
b2NJbmZvKHRoaXMuXyQpIH07CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSAzNzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9
IHsgdHlwZTogJ0Jvb2xlYW5MaXRlcmFsJywgdmFsdWU6ICQkWyQwXSA9PT0gJ3RydWUnLCBvcmln
aW5hbDogJCRbJDBdID09PSAndHJ1ZScsIGxvYzogeXkubG9jSW5mbyh0aGlzLl8kKSB9OworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzg6
CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQgPSB7IHR5cGU6ICdVbmRlZmluZWRMaXRl
cmFsJywgb3JpZ2luYWw6IHVuZGVmaW5lZCwgdmFsdWU6IHVuZGVmaW5lZCwgbG9jOiB5eS5sb2NJ
bmZvKHRoaXMuXyQpIH07CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSAzOToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9IHsg
dHlwZTogJ051bGxMaXRlcmFsJywgb3JpZ2luYWw6IG51bGwsIHZhbHVlOiBudWxsLCBsb2M6IHl5
LmxvY0luZm8odGhpcy5fJCkgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICBjYXNlIDQwOgorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4k
ID0gJCRbJDBdOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgNDE6CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQgPSAkJFskMF07
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSA0MjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9IHl5LnByZXBhcmVQYXRoKHRy
dWUsICQkWyQwXSwgdGhpcy5fJCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSA0MzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
JCA9IHl5LnByZXBhcmVQYXRoKGZhbHNlLCAkJFskMF0sIHRoaXMuXyQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDQ6CisgICAgICAg
ICAgICAgICAgICAgICAgICAkJFskMCAtIDJdLnB1c2goeyBwYXJ0OiB5eS5pZCgkJFskMF0pLCBv
cmlnaW5hbDogJCRbJDBdLCBzZXBhcmF0b3I6ICQkWyQwIC0gMV0gfSk7dGhpcy4kID0gJCRbJDAg
LSAyXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICBjYXNlIDQ1OgorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kID0gW3sgcGFydDogeXku
aWQoJCRbJDBdKSwgb3JpZ2luYWw6ICQkWyQwXSB9XTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDQ2OgorICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy4kID0gW107CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSA0NzoKKyAgICAgICAgICAgICAgICAgICAgICAgICQkWyQwIC0g
MV0ucHVzaCgkJFskMF0pOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgNDg6CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQgPSBb
JCRbJDBdXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICBjYXNlIDQ5OgorICAgICAgICAgICAgICAgICAgICAgICAgJCRbJDAgLSAxXS5wdXNoKCQk
WyQwXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSA1MDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9IFtdOworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTE6Cisg
ICAgICAgICAgICAgICAgICAgICAgICAkJFskMCAtIDFdLnB1c2goJCRbJDBdKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDU4OgorICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy4kID0gW107CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA1OToKKyAgICAgICAgICAgICAgICAg
ICAgICAgICQkWyQwIC0gMV0ucHVzaCgkJFskMF0pOworICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgNjQ6CisgICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLiQgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICBjYXNlIDY1OgorICAgICAgICAgICAgICAgICAgICAgICAgJCRbJDAgLSAx
XS5wdXNoKCQkWyQwXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSA3MDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9IFtd
OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgNzE6CisgICAgICAgICAgICAgICAgICAgICAgICAkJFskMCAtIDFdLnB1c2goJCRbJDBdKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNl
IDc4OgorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kID0gW107CisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA3OToKKyAgICAgICAg
ICAgICAgICAgICAgICAgICQkWyQwIC0gMV0ucHVzaCgkJFskMF0pOworICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgODI6CisgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLiQgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICBjYXNlIDgzOgorICAgICAgICAgICAgICAgICAgICAgICAg
JCRbJDAgLSAxXS5wdXNoKCQkWyQwXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSA4NjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMuJCA9IFtdOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgODc6CisgICAgICAgICAgICAgICAgICAgICAgICAkJFskMCAtIDFdLnB1c2go
JCRbJDBdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICBjYXNlIDkwOgorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kID0gW107CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA5MToK
KyAgICAgICAgICAgICAgICAgICAgICAgICQkWyQwIC0gMV0ucHVzaCgkJFskMF0pOworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgOTQ6Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDk1OgorICAgICAgICAgICAgICAg
ICAgICAgICAgJCRbJDAgLSAxXS5wdXNoKCQkWyQwXSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA5ODoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMuJCA9IFskJFskMF1dOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgOTk6CisgICAgICAgICAgICAgICAgICAgICAgICAk
JFskMCAtIDFdLnB1c2goJCRbJDBdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICBjYXNlIDEwMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMuJCA9IFskJFskMF1dOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgMTAxOgorICAgICAgICAgICAgICAgICAgICAgICAgJCRbJDAgLSAx
XS5wdXNoKCQkWyQwXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgdGFibGU6IFt7IDM6IDEsIDQ6
IDIsIDU6IFsyLCA0Nl0sIDY6IDMsIDE0OiBbMiwgNDZdLCAxNTogWzIsIDQ2XSwgMTk6IFsyLCA0
Nl0sIDI5OiBbMiwgNDZdLCAzNDogWzIsIDQ2XSwgNDg6IFsyLCA0Nl0sIDUxOiBbMiwgNDZdLCA1
NTogWzIsIDQ2XSwgNjA6IFsyLCA0Nl0gfSwgeyAxOiBbM10gfSwgeyA1OiBbMSwgNF0gfSwgeyA1
OiBbMiwgMl0sIDc6IDUsIDg6IDYsIDk6IDcsIDEwOiA4LCAxMTogOSwgMTI6IDEwLCAxMzogMTEs
IDE0OiBbMSwgMTJdLCAxNTogWzEsIDIwXSwgMTY6IDE3LCAxOTogWzEsIDIzXSwgMjQ6IDE1LCAy
NzogMTYsIDI5OiBbMSwgMjFdLCAzNDogWzEsIDIyXSwgMzk6IFsyLCAyXSwgNDQ6IFsyLCAyXSwg
NDc6IFsyLCAyXSwgNDg6IFsxLCAxM10sIDUxOiBbMSwgMTRdLCA1NTogWzEsIDE4XSwgNTk6IDE5
LCA2MDogWzEsIDI0XSB9LCB7IDE6IFsyLCAxXSB9LCB7IDU6IFsyLCA0N10sIDE0OiBbMiwgNDdd
LCAxNTogWzIsIDQ3XSwgMTk6IFsyLCA0N10sIDI5OiBbMiwgNDddLCAzNDogWzIsIDQ3XSwgMzk6
IFsyLCA0N10sIDQ0OiBbMiwgNDddLCA0NzogWzIsIDQ3XSwgNDg6IFsyLCA0N10sIDUxOiBbMiwg
NDddLCA1NTogWzIsIDQ3XSwgNjA6IFsyLCA0N10gfSwgeyA1OiBbMiwgM10sIDE0OiBbMiwgM10s
IDE1OiBbMiwgM10sIDE5OiBbMiwgM10sIDI5OiBbMiwgM10sIDM0OiBbMiwgM10sIDM5OiBbMiwg
M10sIDQ0OiBbMiwgM10sIDQ3OiBbMiwgM10sIDQ4OiBbMiwgM10sIDUxOiBbMiwgM10sIDU1OiBb
MiwgM10sIDYwOiBbMiwgM10gfSwgeyA1OiBbMiwgNF0sIDE0OiBbMiwgNF0sIDE1OiBbMiwgNF0s
IDE5OiBbMiwgNF0sIDI5OiBbMiwgNF0sIDM0OiBbMiwgNF0sIDM5OiBbMiwgNF0sIDQ0OiBbMiwg
NF0sIDQ3OiBbMiwgNF0sIDQ4OiBbMiwgNF0sIDUxOiBbMiwgNF0sIDU1OiBbMiwgNF0sIDYwOiBb
MiwgNF0gfSwgeyA1OiBbMiwgNV0sIDE0OiBbMiwgNV0sIDE1OiBbMiwgNV0sIDE5OiBbMiwgNV0s
IDI5OiBbMiwgNV0sIDM0OiBbMiwgNV0sIDM5OiBbMiwgNV0sIDQ0OiBbMiwgNV0sIDQ3OiBbMiwg
NV0sIDQ4OiBbMiwgNV0sIDUxOiBbMiwgNV0sIDU1OiBbMiwgNV0sIDYwOiBbMiwgNV0gfSwgeyA1
OiBbMiwgNl0sIDE0OiBbMiwgNl0sIDE1OiBbMiwgNl0sIDE5OiBbMiwgNl0sIDI5OiBbMiwgNl0s
IDM0OiBbMiwgNl0sIDM5OiBbMiwgNl0sIDQ0OiBbMiwgNl0sIDQ3OiBbMiwgNl0sIDQ4OiBbMiwg
Nl0sIDUxOiBbMiwgNl0sIDU1OiBbMiwgNl0sIDYwOiBbMiwgNl0gfSwgeyA1OiBbMiwgN10sIDE0
OiBbMiwgN10sIDE1OiBbMiwgN10sIDE5OiBbMiwgN10sIDI5OiBbMiwgN10sIDM0OiBbMiwgN10s
IDM5OiBbMiwgN10sIDQ0OiBbMiwgN10sIDQ3OiBbMiwgN10sIDQ4OiBbMiwgN10sIDUxOiBbMiwg
N10sIDU1OiBbMiwgN10sIDYwOiBbMiwgN10gfSwgeyA1OiBbMiwgOF0sIDE0OiBbMiwgOF0sIDE1
OiBbMiwgOF0sIDE5OiBbMiwgOF0sIDI5OiBbMiwgOF0sIDM0OiBbMiwgOF0sIDM5OiBbMiwgOF0s
IDQ0OiBbMiwgOF0sIDQ3OiBbMiwgOF0sIDQ4OiBbMiwgOF0sIDUxOiBbMiwgOF0sIDU1OiBbMiwg
OF0sIDYwOiBbMiwgOF0gfSwgeyA1OiBbMiwgOV0sIDE0OiBbMiwgOV0sIDE1OiBbMiwgOV0sIDE5
OiBbMiwgOV0sIDI5OiBbMiwgOV0sIDM0OiBbMiwgOV0sIDM5OiBbMiwgOV0sIDQ0OiBbMiwgOV0s
IDQ3OiBbMiwgOV0sIDQ4OiBbMiwgOV0sIDUxOiBbMiwgOV0sIDU1OiBbMiwgOV0sIDYwOiBbMiwg
OV0gfSwgeyAyMDogMjUsIDcyOiBbMSwgMzVdLCA3ODogMjYsIDc5OiAyNywgODA6IFsxLCAyOF0s
IDgxOiBbMSwgMjldLCA4MjogWzEsIDMwXSwgODM6IFsxLCAzMV0sIDg0OiBbMSwgMzJdLCA4NTog
WzEsIDM0XSwgODY6IDMzIH0sIHsgMjA6IDM2LCA3MjogWzEsIDM1XSwgNzg6IDI2LCA3OTogMjcs
IDgwOiBbMSwgMjhdLCA4MTogWzEsIDI5XSwgODI6IFsxLCAzMF0sIDgzOiBbMSwgMzFdLCA4NDog
WzEsIDMyXSwgODU6IFsxLCAzNF0sIDg2OiAzMyB9LCB7IDQ6IDM3LCA2OiAzLCAxNDogWzIsIDQ2
XSwgMTU6IFsyLCA0Nl0sIDE5OiBbMiwgNDZdLCAyOTogWzIsIDQ2XSwgMzQ6IFsyLCA0Nl0sIDM5
OiBbMiwgNDZdLCA0NDogWzIsIDQ2XSwgNDc6IFsyLCA0Nl0sIDQ4OiBbMiwgNDZdLCA1MTogWzIs
IDQ2XSwgNTU6IFsyLCA0Nl0sIDYwOiBbMiwgNDZdIH0sIHsgNDogMzgsIDY6IDMsIDE0OiBbMiwg
NDZdLCAxNTogWzIsIDQ2XSwgMTk6IFsyLCA0Nl0sIDI5OiBbMiwgNDZdLCAzNDogWzIsIDQ2XSwg
NDQ6IFsyLCA0Nl0sIDQ3OiBbMiwgNDZdLCA0ODogWzIsIDQ2XSwgNTE6IFsyLCA0Nl0sIDU1OiBb
MiwgNDZdLCA2MDogWzIsIDQ2XSB9LCB7IDEzOiA0MCwgMTU6IFsxLCAyMF0sIDE3OiAzOSB9LCB7
IDIwOiA0MiwgNTY6IDQxLCA2NDogNDMsIDY1OiBbMSwgNDRdLCA3MjogWzEsIDM1XSwgNzg6IDI2
LCA3OTogMjcsIDgwOiBbMSwgMjhdLCA4MTogWzEsIDI5XSwgODI6IFsxLCAzMF0sIDgzOiBbMSwg
MzFdLCA4NDogWzEsIDMyXSwgODU6IFsxLCAzNF0sIDg2OiAzMyB9LCB7IDQ6IDQ1LCA2OiAzLCAx
NDogWzIsIDQ2XSwgMTU6IFsyLCA0Nl0sIDE5OiBbMiwgNDZdLCAyOTogWzIsIDQ2XSwgMzQ6IFsy
LCA0Nl0sIDQ3OiBbMiwgNDZdLCA0ODogWzIsIDQ2XSwgNTE6IFsyLCA0Nl0sIDU1OiBbMiwgNDZd
LCA2MDogWzIsIDQ2XSB9LCB7IDU6IFsyLCAxMF0sIDE0OiBbMiwgMTBdLCAxNTogWzIsIDEwXSwg
MTg6IFsyLCAxMF0sIDE5OiBbMiwgMTBdLCAyOTogWzIsIDEwXSwgMzQ6IFsyLCAxMF0sIDM5OiBb
MiwgMTBdLCA0NDogWzIsIDEwXSwgNDc6IFsyLCAxMF0sIDQ4OiBbMiwgMTBdLCA1MTogWzIsIDEw
XSwgNTU6IFsyLCAxMF0sIDYwOiBbMiwgMTBdIH0sIHsgMjA6IDQ2LCA3MjogWzEsIDM1XSwgNzg6
IDI2LCA3OTogMjcsIDgwOiBbMSwgMjhdLCA4MTogWzEsIDI5XSwgODI6IFsxLCAzMF0sIDgzOiBb
MSwgMzFdLCA4NDogWzEsIDMyXSwgODU6IFsxLCAzNF0sIDg2OiAzMyB9LCB7IDIwOiA0NywgNzI6
IFsxLCAzNV0sIDc4OiAyNiwgNzk6IDI3LCA4MDogWzEsIDI4XSwgODE6IFsxLCAyOV0sIDgyOiBb
MSwgMzBdLCA4MzogWzEsIDMxXSwgODQ6IFsxLCAzMl0sIDg1OiBbMSwgMzRdLCA4NjogMzMgfSwg
eyAyMDogNDgsIDcyOiBbMSwgMzVdLCA3ODogMjYsIDc5OiAyNywgODA6IFsxLCAyOF0sIDgxOiBb
MSwgMjldLCA4MjogWzEsIDMwXSwgODM6IFsxLCAzMV0sIDg0OiBbMSwgMzJdLCA4NTogWzEsIDM0
XSwgODY6IDMzIH0sIHsgMjA6IDQyLCA1NjogNDksIDY0OiA0MywgNjU6IFsxLCA0NF0sIDcyOiBb
MSwgMzVdLCA3ODogMjYsIDc5OiAyNywgODA6IFsxLCAyOF0sIDgxOiBbMSwgMjldLCA4MjogWzEs
IDMwXSwgODM6IFsxLCAzMV0sIDg0OiBbMSwgMzJdLCA4NTogWzEsIDM0XSwgODY6IDMzIH0sIHsg
MzM6IFsyLCA3OF0sIDQ5OiA1MCwgNjU6IFsyLCA3OF0sIDcyOiBbMiwgNzhdLCA4MDogWzIsIDc4
XSwgODE6IFsyLCA3OF0sIDgyOiBbMiwgNzhdLCA4MzogWzIsIDc4XSwgODQ6IFsyLCA3OF0sIDg1
OiBbMiwgNzhdIH0sIHsgMjM6IFsyLCAzM10sIDMzOiBbMiwgMzNdLCA1NDogWzIsIDMzXSwgNjU6
IFsyLCAzM10sIDY4OiBbMiwgMzNdLCA3MjogWzIsIDMzXSwgNzU6IFsyLCAzM10sIDgwOiBbMiwg
MzNdLCA4MTogWzIsIDMzXSwgODI6IFsyLCAzM10sIDgzOiBbMiwgMzNdLCA4NDogWzIsIDMzXSwg
ODU6IFsyLCAzM10gfSwgeyAyMzogWzIsIDM0XSwgMzM6IFsyLCAzNF0sIDU0OiBbMiwgMzRdLCA2
NTogWzIsIDM0XSwgNjg6IFsyLCAzNF0sIDcyOiBbMiwgMzRdLCA3NTogWzIsIDM0XSwgODA6IFsy
LCAzNF0sIDgxOiBbMiwgMzRdLCA4MjogWzIsIDM0XSwgODM6IFsyLCAzNF0sIDg0OiBbMiwgMzRd
LCA4NTogWzIsIDM0XSB9LCB7IDIzOiBbMiwgMzVdLCAzMzogWzIsIDM1XSwgNTQ6IFsyLCAzNV0s
IDY1OiBbMiwgMzVdLCA2ODogWzIsIDM1XSwgNzI6IFsyLCAzNV0sIDc1OiBbMiwgMzVdLCA4MDog
WzIsIDM1XSwgODE6IFsyLCAzNV0sIDgyOiBbMiwgMzVdLCA4MzogWzIsIDM1XSwgODQ6IFsyLCAz
NV0sIDg1OiBbMiwgMzVdIH0sIHsgMjM6IFsyLCAzNl0sIDMzOiBbMiwgMzZdLCA1NDogWzIsIDM2
XSwgNjU6IFsyLCAzNl0sIDY4OiBbMiwgMzZdLCA3MjogWzIsIDM2XSwgNzU6IFsyLCAzNl0sIDgw
OiBbMiwgMzZdLCA4MTogWzIsIDM2XSwgODI6IFsyLCAzNl0sIDgzOiBbMiwgMzZdLCA4NDogWzIs
IDM2XSwgODU6IFsyLCAzNl0gfSwgeyAyMzogWzIsIDM3XSwgMzM6IFsyLCAzN10sIDU0OiBbMiwg
MzddLCA2NTogWzIsIDM3XSwgNjg6IFsyLCAzN10sIDcyOiBbMiwgMzddLCA3NTogWzIsIDM3XSwg
ODA6IFsyLCAzN10sIDgxOiBbMiwgMzddLCA4MjogWzIsIDM3XSwgODM6IFsyLCAzN10sIDg0OiBb
MiwgMzddLCA4NTogWzIsIDM3XSB9LCB7IDIzOiBbMiwgMzhdLCAzMzogWzIsIDM4XSwgNTQ6IFsy
LCAzOF0sIDY1OiBbMiwgMzhdLCA2ODogWzIsIDM4XSwgNzI6IFsyLCAzOF0sIDc1OiBbMiwgMzhd
LCA4MDogWzIsIDM4XSwgODE6IFsyLCAzOF0sIDgyOiBbMiwgMzhdLCA4MzogWzIsIDM4XSwgODQ6
IFsyLCAzOF0sIDg1OiBbMiwgMzhdIH0sIHsgMjM6IFsyLCAzOV0sIDMzOiBbMiwgMzldLCA1NDog
WzIsIDM5XSwgNjU6IFsyLCAzOV0sIDY4OiBbMiwgMzldLCA3MjogWzIsIDM5XSwgNzU6IFsyLCAz
OV0sIDgwOiBbMiwgMzldLCA4MTogWzIsIDM5XSwgODI6IFsyLCAzOV0sIDgzOiBbMiwgMzldLCA4
NDogWzIsIDM5XSwgODU6IFsyLCAzOV0gfSwgeyAyMzogWzIsIDQzXSwgMzM6IFsyLCA0M10sIDU0
OiBbMiwgNDNdLCA2NTogWzIsIDQzXSwgNjg6IFsyLCA0M10sIDcyOiBbMiwgNDNdLCA3NTogWzIs
IDQzXSwgODA6IFsyLCA0M10sIDgxOiBbMiwgNDNdLCA4MjogWzIsIDQzXSwgODM6IFsyLCA0M10s
IDg0OiBbMiwgNDNdLCA4NTogWzIsIDQzXSwgODc6IFsxLCA1MV0gfSwgeyA3MjogWzEsIDM1XSwg
ODY6IDUyIH0sIHsgMjM6IFsyLCA0NV0sIDMzOiBbMiwgNDVdLCA1NDogWzIsIDQ1XSwgNjU6IFsy
LCA0NV0sIDY4OiBbMiwgNDVdLCA3MjogWzIsIDQ1XSwgNzU6IFsyLCA0NV0sIDgwOiBbMiwgNDVd
LCA4MTogWzIsIDQ1XSwgODI6IFsyLCA0NV0sIDgzOiBbMiwgNDVdLCA4NDogWzIsIDQ1XSwgODU6
IFsyLCA0NV0sIDg3OiBbMiwgNDVdIH0sIHsgNTI6IDUzLCA1NDogWzIsIDgyXSwgNjU6IFsyLCA4
Ml0sIDcyOiBbMiwgODJdLCA4MDogWzIsIDgyXSwgODE6IFsyLCA4Ml0sIDgyOiBbMiwgODJdLCA4
MzogWzIsIDgyXSwgODQ6IFsyLCA4Ml0sIDg1OiBbMiwgODJdIH0sIHsgMjU6IDU0LCAzODogNTYs
IDM5OiBbMSwgNThdLCA0MzogNTcsIDQ0OiBbMSwgNTldLCA0NTogNTUsIDQ3OiBbMiwgNTRdIH0s
IHsgMjg6IDYwLCA0MzogNjEsIDQ0OiBbMSwgNTldLCA0NzogWzIsIDU2XSB9LCB7IDEzOiA2Mywg
MTU6IFsxLCAyMF0sIDE4OiBbMSwgNjJdIH0sIHsgMTU6IFsyLCA0OF0sIDE4OiBbMiwgNDhdIH0s
IHsgMzM6IFsyLCA4Nl0sIDU3OiA2NCwgNjU6IFsyLCA4Nl0sIDcyOiBbMiwgODZdLCA4MDogWzIs
IDg2XSwgODE6IFsyLCA4Nl0sIDgyOiBbMiwgODZdLCA4MzogWzIsIDg2XSwgODQ6IFsyLCA4Nl0s
IDg1OiBbMiwgODZdIH0sIHsgMzM6IFsyLCA0MF0sIDY1OiBbMiwgNDBdLCA3MjogWzIsIDQwXSwg
ODA6IFsyLCA0MF0sIDgxOiBbMiwgNDBdLCA4MjogWzIsIDQwXSwgODM6IFsyLCA0MF0sIDg0OiBb
MiwgNDBdLCA4NTogWzIsIDQwXSB9LCB7IDMzOiBbMiwgNDFdLCA2NTogWzIsIDQxXSwgNzI6IFsy
LCA0MV0sIDgwOiBbMiwgNDFdLCA4MTogWzIsIDQxXSwgODI6IFsyLCA0MV0sIDgzOiBbMiwgNDFd
LCA4NDogWzIsIDQxXSwgODU6IFsyLCA0MV0gfSwgeyAyMDogNjUsIDcyOiBbMSwgMzVdLCA3ODog
MjYsIDc5OiAyNywgODA6IFsxLCAyOF0sIDgxOiBbMSwgMjldLCA4MjogWzEsIDMwXSwgODM6IFsx
LCAzMV0sIDg0OiBbMSwgMzJdLCA4NTogWzEsIDM0XSwgODY6IDMzIH0sIHsgMjY6IDY2LCA0Nzog
WzEsIDY3XSB9LCB7IDMwOiA2OCwgMzM6IFsyLCA1OF0sIDY1OiBbMiwgNThdLCA3MjogWzIsIDU4
XSwgNzU6IFsyLCA1OF0sIDgwOiBbMiwgNThdLCA4MTogWzIsIDU4XSwgODI6IFsyLCA1OF0sIDgz
OiBbMiwgNThdLCA4NDogWzIsIDU4XSwgODU6IFsyLCA1OF0gfSwgeyAzMzogWzIsIDY0XSwgMzU6
IDY5LCA2NTogWzIsIDY0XSwgNzI6IFsyLCA2NF0sIDc1OiBbMiwgNjRdLCA4MDogWzIsIDY0XSwg
ODE6IFsyLCA2NF0sIDgyOiBbMiwgNjRdLCA4MzogWzIsIDY0XSwgODQ6IFsyLCA2NF0sIDg1OiBb
MiwgNjRdIH0sIHsgMjE6IDcwLCAyMzogWzIsIDUwXSwgNjU6IFsyLCA1MF0sIDcyOiBbMiwgNTBd
LCA4MDogWzIsIDUwXSwgODE6IFsyLCA1MF0sIDgyOiBbMiwgNTBdLCA4MzogWzIsIDUwXSwgODQ6
IFsyLCA1MF0sIDg1OiBbMiwgNTBdIH0sIHsgMzM6IFsyLCA5MF0sIDYxOiA3MSwgNjU6IFsyLCA5
MF0sIDcyOiBbMiwgOTBdLCA4MDogWzIsIDkwXSwgODE6IFsyLCA5MF0sIDgyOiBbMiwgOTBdLCA4
MzogWzIsIDkwXSwgODQ6IFsyLCA5MF0sIDg1OiBbMiwgOTBdIH0sIHsgMjA6IDc1LCAzMzogWzIs
IDgwXSwgNTA6IDcyLCA2MzogNzMsIDY0OiA3NiwgNjU6IFsxLCA0NF0sIDY5OiA3NCwgNzA6IDc3
LCA3MTogNzgsIDcyOiBbMSwgNzldLCA3ODogMjYsIDc5OiAyNywgODA6IFsxLCAyOF0sIDgxOiBb
MSwgMjldLCA4MjogWzEsIDMwXSwgODM6IFsxLCAzMV0sIDg0OiBbMSwgMzJdLCA4NTogWzEsIDM0
XSwgODY6IDMzIH0sIHsgNzI6IFsxLCA4MF0gfSwgeyAyMzogWzIsIDQyXSwgMzM6IFsyLCA0Ml0s
IDU0OiBbMiwgNDJdLCA2NTogWzIsIDQyXSwgNjg6IFsyLCA0Ml0sIDcyOiBbMiwgNDJdLCA3NTog
WzIsIDQyXSwgODA6IFsyLCA0Ml0sIDgxOiBbMiwgNDJdLCA4MjogWzIsIDQyXSwgODM6IFsyLCA0
Ml0sIDg0OiBbMiwgNDJdLCA4NTogWzIsIDQyXSwgODc6IFsxLCA1MV0gfSwgeyAyMDogNzUsIDUz
OiA4MSwgNTQ6IFsyLCA4NF0sIDYzOiA4MiwgNjQ6IDc2LCA2NTogWzEsIDQ0XSwgNjk6IDgzLCA3
MDogNzcsIDcxOiA3OCwgNzI6IFsxLCA3OV0sIDc4OiAyNiwgNzk6IDI3LCA4MDogWzEsIDI4XSwg
ODE6IFsxLCAyOV0sIDgyOiBbMSwgMzBdLCA4MzogWzEsIDMxXSwgODQ6IFsxLCAzMl0sIDg1OiBb
MSwgMzRdLCA4NjogMzMgfSwgeyAyNjogODQsIDQ3OiBbMSwgNjddIH0sIHsgNDc6IFsyLCA1NV0g
fSwgeyA0OiA4NSwgNjogMywgMTQ6IFsyLCA0Nl0sIDE1OiBbMiwgNDZdLCAxOTogWzIsIDQ2XSwg
Mjk6IFsyLCA0Nl0sIDM0OiBbMiwgNDZdLCAzOTogWzIsIDQ2XSwgNDQ6IFsyLCA0Nl0sIDQ3OiBb
MiwgNDZdLCA0ODogWzIsIDQ2XSwgNTE6IFsyLCA0Nl0sIDU1OiBbMiwgNDZdLCA2MDogWzIsIDQ2
XSB9LCB7IDQ3OiBbMiwgMjBdIH0sIHsgMjA6IDg2LCA3MjogWzEsIDM1XSwgNzg6IDI2LCA3OTog
MjcsIDgwOiBbMSwgMjhdLCA4MTogWzEsIDI5XSwgODI6IFsxLCAzMF0sIDgzOiBbMSwgMzFdLCA4
NDogWzEsIDMyXSwgODU6IFsxLCAzNF0sIDg2OiAzMyB9LCB7IDQ6IDg3LCA2OiAzLCAxNDogWzIs
IDQ2XSwgMTU6IFsyLCA0Nl0sIDE5OiBbMiwgNDZdLCAyOTogWzIsIDQ2XSwgMzQ6IFsyLCA0Nl0s
IDQ3OiBbMiwgNDZdLCA0ODogWzIsIDQ2XSwgNTE6IFsyLCA0Nl0sIDU1OiBbMiwgNDZdLCA2MDog
WzIsIDQ2XSB9LCB7IDI2OiA4OCwgNDc6IFsxLCA2N10gfSwgeyA0NzogWzIsIDU3XSB9LCB7IDU6
IFsyLCAxMV0sIDE0OiBbMiwgMTFdLCAxNTogWzIsIDExXSwgMTk6IFsyLCAxMV0sIDI5OiBbMiwg
MTFdLCAzNDogWzIsIDExXSwgMzk6IFsyLCAxMV0sIDQ0OiBbMiwgMTFdLCA0NzogWzIsIDExXSwg
NDg6IFsyLCAxMV0sIDUxOiBbMiwgMTFdLCA1NTogWzIsIDExXSwgNjA6IFsyLCAxMV0gfSwgeyAx
NTogWzIsIDQ5XSwgMTg6IFsyLCA0OV0gfSwgeyAyMDogNzUsIDMzOiBbMiwgODhdLCA1ODogODks
IDYzOiA5MCwgNjQ6IDc2LCA2NTogWzEsIDQ0XSwgNjk6IDkxLCA3MDogNzcsIDcxOiA3OCwgNzI6
IFsxLCA3OV0sIDc4OiAyNiwgNzk6IDI3LCA4MDogWzEsIDI4XSwgODE6IFsxLCAyOV0sIDgyOiBb
MSwgMzBdLCA4MzogWzEsIDMxXSwgODQ6IFsxLCAzMl0sIDg1OiBbMSwgMzRdLCA4NjogMzMgfSwg
eyA2NTogWzIsIDk0XSwgNjY6IDkyLCA2ODogWzIsIDk0XSwgNzI6IFsyLCA5NF0sIDgwOiBbMiwg
OTRdLCA4MTogWzIsIDk0XSwgODI6IFsyLCA5NF0sIDgzOiBbMiwgOTRdLCA4NDogWzIsIDk0XSwg
ODU6IFsyLCA5NF0gfSwgeyA1OiBbMiwgMjVdLCAxNDogWzIsIDI1XSwgMTU6IFsyLCAyNV0sIDE5
OiBbMiwgMjVdLCAyOTogWzIsIDI1XSwgMzQ6IFsyLCAyNV0sIDM5OiBbMiwgMjVdLCA0NDogWzIs
IDI1XSwgNDc6IFsyLCAyNV0sIDQ4OiBbMiwgMjVdLCA1MTogWzIsIDI1XSwgNTU6IFsyLCAyNV0s
IDYwOiBbMiwgMjVdIH0sIHsgMjA6IDkzLCA3MjogWzEsIDM1XSwgNzg6IDI2LCA3OTogMjcsIDgw
OiBbMSwgMjhdLCA4MTogWzEsIDI5XSwgODI6IFsxLCAzMF0sIDgzOiBbMSwgMzFdLCA4NDogWzEs
IDMyXSwgODU6IFsxLCAzNF0sIDg2OiAzMyB9LCB7IDIwOiA3NSwgMzE6IDk0LCAzMzogWzIsIDYw
XSwgNjM6IDk1LCA2NDogNzYsIDY1OiBbMSwgNDRdLCA2OTogOTYsIDcwOiA3NywgNzE6IDc4LCA3
MjogWzEsIDc5XSwgNzU6IFsyLCA2MF0sIDc4OiAyNiwgNzk6IDI3LCA4MDogWzEsIDI4XSwgODE6
IFsxLCAyOV0sIDgyOiBbMSwgMzBdLCA4MzogWzEsIDMxXSwgODQ6IFsxLCAzMl0sIDg1OiBbMSwg
MzRdLCA4NjogMzMgfSwgeyAyMDogNzUsIDMzOiBbMiwgNjZdLCAzNjogOTcsIDYzOiA5OCwgNjQ6
IDc2LCA2NTogWzEsIDQ0XSwgNjk6IDk5LCA3MDogNzcsIDcxOiA3OCwgNzI6IFsxLCA3OV0sIDc1
OiBbMiwgNjZdLCA3ODogMjYsIDc5OiAyNywgODA6IFsxLCAyOF0sIDgxOiBbMSwgMjldLCA4Mjog
WzEsIDMwXSwgODM6IFsxLCAzMV0sIDg0OiBbMSwgMzJdLCA4NTogWzEsIDM0XSwgODY6IDMzIH0s
IHsgMjA6IDc1LCAyMjogMTAwLCAyMzogWzIsIDUyXSwgNjM6IDEwMSwgNjQ6IDc2LCA2NTogWzEs
IDQ0XSwgNjk6IDEwMiwgNzA6IDc3LCA3MTogNzgsIDcyOiBbMSwgNzldLCA3ODogMjYsIDc5OiAy
NywgODA6IFsxLCAyOF0sIDgxOiBbMSwgMjldLCA4MjogWzEsIDMwXSwgODM6IFsxLCAzMV0sIDg0
OiBbMSwgMzJdLCA4NTogWzEsIDM0XSwgODY6IDMzIH0sIHsgMjA6IDc1LCAzMzogWzIsIDkyXSwg
NjI6IDEwMywgNjM6IDEwNCwgNjQ6IDc2LCA2NTogWzEsIDQ0XSwgNjk6IDEwNSwgNzA6IDc3LCA3
MTogNzgsIDcyOiBbMSwgNzldLCA3ODogMjYsIDc5OiAyNywgODA6IFsxLCAyOF0sIDgxOiBbMSwg
MjldLCA4MjogWzEsIDMwXSwgODM6IFsxLCAzMV0sIDg0OiBbMSwgMzJdLCA4NTogWzEsIDM0XSwg
ODY6IDMzIH0sIHsgMzM6IFsxLCAxMDZdIH0sIHsgMzM6IFsyLCA3OV0sIDY1OiBbMiwgNzldLCA3
MjogWzIsIDc5XSwgODA6IFsyLCA3OV0sIDgxOiBbMiwgNzldLCA4MjogWzIsIDc5XSwgODM6IFsy
LCA3OV0sIDg0OiBbMiwgNzldLCA4NTogWzIsIDc5XSB9LCB7IDMzOiBbMiwgODFdIH0sIHsgMjM6
IFsyLCAyN10sIDMzOiBbMiwgMjddLCA1NDogWzIsIDI3XSwgNjU6IFsyLCAyN10sIDY4OiBbMiwg
MjddLCA3MjogWzIsIDI3XSwgNzU6IFsyLCAyN10sIDgwOiBbMiwgMjddLCA4MTogWzIsIDI3XSwg
ODI6IFsyLCAyN10sIDgzOiBbMiwgMjddLCA4NDogWzIsIDI3XSwgODU6IFsyLCAyN10gfSwgeyAy
MzogWzIsIDI4XSwgMzM6IFsyLCAyOF0sIDU0OiBbMiwgMjhdLCA2NTogWzIsIDI4XSwgNjg6IFsy
LCAyOF0sIDcyOiBbMiwgMjhdLCA3NTogWzIsIDI4XSwgODA6IFsyLCAyOF0sIDgxOiBbMiwgMjhd
LCA4MjogWzIsIDI4XSwgODM6IFsyLCAyOF0sIDg0OiBbMiwgMjhdLCA4NTogWzIsIDI4XSB9LCB7
IDIzOiBbMiwgMzBdLCAzMzogWzIsIDMwXSwgNTQ6IFsyLCAzMF0sIDY4OiBbMiwgMzBdLCA3MTog
MTA3LCA3MjogWzEsIDEwOF0sIDc1OiBbMiwgMzBdIH0sIHsgMjM6IFsyLCA5OF0sIDMzOiBbMiwg
OThdLCA1NDogWzIsIDk4XSwgNjg6IFsyLCA5OF0sIDcyOiBbMiwgOThdLCA3NTogWzIsIDk4XSB9
LCB7IDIzOiBbMiwgNDVdLCAzMzogWzIsIDQ1XSwgNTQ6IFsyLCA0NV0sIDY1OiBbMiwgNDVdLCA2
ODogWzIsIDQ1XSwgNzI6IFsyLCA0NV0sIDczOiBbMSwgMTA5XSwgNzU6IFsyLCA0NV0sIDgwOiBb
MiwgNDVdLCA4MTogWzIsIDQ1XSwgODI6IFsyLCA0NV0sIDgzOiBbMiwgNDVdLCA4NDogWzIsIDQ1
XSwgODU6IFsyLCA0NV0sIDg3OiBbMiwgNDVdIH0sIHsgMjM6IFsyLCA0NF0sIDMzOiBbMiwgNDRd
LCA1NDogWzIsIDQ0XSwgNjU6IFsyLCA0NF0sIDY4OiBbMiwgNDRdLCA3MjogWzIsIDQ0XSwgNzU6
IFsyLCA0NF0sIDgwOiBbMiwgNDRdLCA4MTogWzIsIDQ0XSwgODI6IFsyLCA0NF0sIDgzOiBbMiwg
NDRdLCA4NDogWzIsIDQ0XSwgODU6IFsyLCA0NF0sIDg3OiBbMiwgNDRdIH0sIHsgNTQ6IFsxLCAx
MTBdIH0sIHsgNTQ6IFsyLCA4M10sIDY1OiBbMiwgODNdLCA3MjogWzIsIDgzXSwgODA6IFsyLCA4
M10sIDgxOiBbMiwgODNdLCA4MjogWzIsIDgzXSwgODM6IFsyLCA4M10sIDg0OiBbMiwgODNdLCA4
NTogWzIsIDgzXSB9LCB7IDU0OiBbMiwgODVdIH0sIHsgNTogWzIsIDEzXSwgMTQ6IFsyLCAxM10s
IDE1OiBbMiwgMTNdLCAxOTogWzIsIDEzXSwgMjk6IFsyLCAxM10sIDM0OiBbMiwgMTNdLCAzOTog
WzIsIDEzXSwgNDQ6IFsyLCAxM10sIDQ3OiBbMiwgMTNdLCA0ODogWzIsIDEzXSwgNTE6IFsyLCAx
M10sIDU1OiBbMiwgMTNdLCA2MDogWzIsIDEzXSB9LCB7IDM4OiA1NiwgMzk6IFsxLCA1OF0sIDQz
OiA1NywgNDQ6IFsxLCA1OV0sIDQ1OiAxMTIsIDQ2OiAxMTEsIDQ3OiBbMiwgNzZdIH0sIHsgMzM6
IFsyLCA3MF0sIDQwOiAxMTMsIDY1OiBbMiwgNzBdLCA3MjogWzIsIDcwXSwgNzU6IFsyLCA3MF0s
IDgwOiBbMiwgNzBdLCA4MTogWzIsIDcwXSwgODI6IFsyLCA3MF0sIDgzOiBbMiwgNzBdLCA4NDog
WzIsIDcwXSwgODU6IFsyLCA3MF0gfSwgeyA0NzogWzIsIDE4XSB9LCB7IDU6IFsyLCAxNF0sIDE0
OiBbMiwgMTRdLCAxNTogWzIsIDE0XSwgMTk6IFsyLCAxNF0sIDI5OiBbMiwgMTRdLCAzNDogWzIs
IDE0XSwgMzk6IFsyLCAxNF0sIDQ0OiBbMiwgMTRdLCA0NzogWzIsIDE0XSwgNDg6IFsyLCAxNF0s
IDUxOiBbMiwgMTRdLCA1NTogWzIsIDE0XSwgNjA6IFsyLCAxNF0gfSwgeyAzMzogWzEsIDExNF0g
fSwgeyAzMzogWzIsIDg3XSwgNjU6IFsyLCA4N10sIDcyOiBbMiwgODddLCA4MDogWzIsIDg3XSwg
ODE6IFsyLCA4N10sIDgyOiBbMiwgODddLCA4MzogWzIsIDg3XSwgODQ6IFsyLCA4N10sIDg1OiBb
MiwgODddIH0sIHsgMzM6IFsyLCA4OV0gfSwgeyAyMDogNzUsIDYzOiAxMTYsIDY0OiA3NiwgNjU6
IFsxLCA0NF0sIDY3OiAxMTUsIDY4OiBbMiwgOTZdLCA2OTogMTE3LCA3MDogNzcsIDcxOiA3OCwg
NzI6IFsxLCA3OV0sIDc4OiAyNiwgNzk6IDI3LCA4MDogWzEsIDI4XSwgODE6IFsxLCAyOV0sIDgy
OiBbMSwgMzBdLCA4MzogWzEsIDMxXSwgODQ6IFsxLCAzMl0sIDg1OiBbMSwgMzRdLCA4NjogMzMg
fSwgeyAzMzogWzEsIDExOF0gfSwgeyAzMjogMTE5LCAzMzogWzIsIDYyXSwgNzQ6IDEyMCwgNzU6
IFsxLCAxMjFdIH0sIHsgMzM6IFsyLCA1OV0sIDY1OiBbMiwgNTldLCA3MjogWzIsIDU5XSwgNzU6
IFsyLCA1OV0sIDgwOiBbMiwgNTldLCA4MTogWzIsIDU5XSwgODI6IFsyLCA1OV0sIDgzOiBbMiwg
NTldLCA4NDogWzIsIDU5XSwgODU6IFsyLCA1OV0gfSwgeyAzMzogWzIsIDYxXSwgNzU6IFsyLCA2
MV0gfSwgeyAzMzogWzIsIDY4XSwgMzc6IDEyMiwgNzQ6IDEyMywgNzU6IFsxLCAxMjFdIH0sIHsg
MzM6IFsyLCA2NV0sIDY1OiBbMiwgNjVdLCA3MjogWzIsIDY1XSwgNzU6IFsyLCA2NV0sIDgwOiBb
MiwgNjVdLCA4MTogWzIsIDY1XSwgODI6IFsyLCA2NV0sIDgzOiBbMiwgNjVdLCA4NDogWzIsIDY1
XSwgODU6IFsyLCA2NV0gfSwgeyAzMzogWzIsIDY3XSwgNzU6IFsyLCA2N10gfSwgeyAyMzogWzEs
IDEyNF0gfSwgeyAyMzogWzIsIDUxXSwgNjU6IFsyLCA1MV0sIDcyOiBbMiwgNTFdLCA4MDogWzIs
IDUxXSwgODE6IFsyLCA1MV0sIDgyOiBbMiwgNTFdLCA4MzogWzIsIDUxXSwgODQ6IFsyLCA1MV0s
IDg1OiBbMiwgNTFdIH0sIHsgMjM6IFsyLCA1M10gfSwgeyAzMzogWzEsIDEyNV0gfSwgeyAzMzog
WzIsIDkxXSwgNjU6IFsyLCA5MV0sIDcyOiBbMiwgOTFdLCA4MDogWzIsIDkxXSwgODE6IFsyLCA5
MV0sIDgyOiBbMiwgOTFdLCA4MzogWzIsIDkxXSwgODQ6IFsyLCA5MV0sIDg1OiBbMiwgOTFdIH0s
IHsgMzM6IFsyLCA5M10gfSwgeyA1OiBbMiwgMjJdLCAxNDogWzIsIDIyXSwgMTU6IFsyLCAyMl0s
IDE5OiBbMiwgMjJdLCAyOTogWzIsIDIyXSwgMzQ6IFsyLCAyMl0sIDM5OiBbMiwgMjJdLCA0NDog
WzIsIDIyXSwgNDc6IFsyLCAyMl0sIDQ4OiBbMiwgMjJdLCA1MTogWzIsIDIyXSwgNTU6IFsyLCAy
Ml0sIDYwOiBbMiwgMjJdIH0sIHsgMjM6IFsyLCA5OV0sIDMzOiBbMiwgOTldLCA1NDogWzIsIDk5
XSwgNjg6IFsyLCA5OV0sIDcyOiBbMiwgOTldLCA3NTogWzIsIDk5XSB9LCB7IDczOiBbMSwgMTA5
XSB9LCB7IDIwOiA3NSwgNjM6IDEyNiwgNjQ6IDc2LCA2NTogWzEsIDQ0XSwgNzI6IFsxLCAzNV0s
IDc4OiAyNiwgNzk6IDI3LCA4MDogWzEsIDI4XSwgODE6IFsxLCAyOV0sIDgyOiBbMSwgMzBdLCA4
MzogWzEsIDMxXSwgODQ6IFsxLCAzMl0sIDg1OiBbMSwgMzRdLCA4NjogMzMgfSwgeyA1OiBbMiwg
MjNdLCAxNDogWzIsIDIzXSwgMTU6IFsyLCAyM10sIDE5OiBbMiwgMjNdLCAyOTogWzIsIDIzXSwg
MzQ6IFsyLCAyM10sIDM5OiBbMiwgMjNdLCA0NDogWzIsIDIzXSwgNDc6IFsyLCAyM10sIDQ4OiBb
MiwgMjNdLCA1MTogWzIsIDIzXSwgNTU6IFsyLCAyM10sIDYwOiBbMiwgMjNdIH0sIHsgNDc6IFsy
LCAxOV0gfSwgeyA0NzogWzIsIDc3XSB9LCB7IDIwOiA3NSwgMzM6IFsyLCA3Ml0sIDQxOiAxMjcs
IDYzOiAxMjgsIDY0OiA3NiwgNjU6IFsxLCA0NF0sIDY5OiAxMjksIDcwOiA3NywgNzE6IDc4LCA3
MjogWzEsIDc5XSwgNzU6IFsyLCA3Ml0sIDc4OiAyNiwgNzk6IDI3LCA4MDogWzEsIDI4XSwgODE6
IFsxLCAyOV0sIDgyOiBbMSwgMzBdLCA4MzogWzEsIDMxXSwgODQ6IFsxLCAzMl0sIDg1OiBbMSwg
MzRdLCA4NjogMzMgfSwgeyA1OiBbMiwgMjRdLCAxNDogWzIsIDI0XSwgMTU6IFsyLCAyNF0sIDE5
OiBbMiwgMjRdLCAyOTogWzIsIDI0XSwgMzQ6IFsyLCAyNF0sIDM5OiBbMiwgMjRdLCA0NDogWzIs
IDI0XSwgNDc6IFsyLCAyNF0sIDQ4OiBbMiwgMjRdLCA1MTogWzIsIDI0XSwgNTU6IFsyLCAyNF0s
IDYwOiBbMiwgMjRdIH0sIHsgNjg6IFsxLCAxMzBdIH0sIHsgNjU6IFsyLCA5NV0sIDY4OiBbMiwg
OTVdLCA3MjogWzIsIDk1XSwgODA6IFsyLCA5NV0sIDgxOiBbMiwgOTVdLCA4MjogWzIsIDk1XSwg
ODM6IFsyLCA5NV0sIDg0OiBbMiwgOTVdLCA4NTogWzIsIDk1XSB9LCB7IDY4OiBbMiwgOTddIH0s
IHsgNTogWzIsIDIxXSwgMTQ6IFsyLCAyMV0sIDE1OiBbMiwgMjFdLCAxOTogWzIsIDIxXSwgMjk6
IFsyLCAyMV0sIDM0OiBbMiwgMjFdLCAzOTogWzIsIDIxXSwgNDQ6IFsyLCAyMV0sIDQ3OiBbMiwg
MjFdLCA0ODogWzIsIDIxXSwgNTE6IFsyLCAyMV0sIDU1OiBbMiwgMjFdLCA2MDogWzIsIDIxXSB9
LCB7IDMzOiBbMSwgMTMxXSB9LCB7IDMzOiBbMiwgNjNdIH0sIHsgNzI6IFsxLCAxMzNdLCA3Njog
MTMyIH0sIHsgMzM6IFsxLCAxMzRdIH0sIHsgMzM6IFsyLCA2OV0gfSwgeyAxNTogWzIsIDEyXSB9
LCB7IDE0OiBbMiwgMjZdLCAxNTogWzIsIDI2XSwgMTk6IFsyLCAyNl0sIDI5OiBbMiwgMjZdLCAz
NDogWzIsIDI2XSwgNDc6IFsyLCAyNl0sIDQ4OiBbMiwgMjZdLCA1MTogWzIsIDI2XSwgNTU6IFsy
LCAyNl0sIDYwOiBbMiwgMjZdIH0sIHsgMjM6IFsyLCAzMV0sIDMzOiBbMiwgMzFdLCA1NDogWzIs
IDMxXSwgNjg6IFsyLCAzMV0sIDcyOiBbMiwgMzFdLCA3NTogWzIsIDMxXSB9LCB7IDMzOiBbMiwg
NzRdLCA0MjogMTM1LCA3NDogMTM2LCA3NTogWzEsIDEyMV0gfSwgeyAzMzogWzIsIDcxXSwgNjU6
IFsyLCA3MV0sIDcyOiBbMiwgNzFdLCA3NTogWzIsIDcxXSwgODA6IFsyLCA3MV0sIDgxOiBbMiwg
NzFdLCA4MjogWzIsIDcxXSwgODM6IFsyLCA3MV0sIDg0OiBbMiwgNzFdLCA4NTogWzIsIDcxXSB9
LCB7IDMzOiBbMiwgNzNdLCA3NTogWzIsIDczXSB9LCB7IDIzOiBbMiwgMjldLCAzMzogWzIsIDI5
XSwgNTQ6IFsyLCAyOV0sIDY1OiBbMiwgMjldLCA2ODogWzIsIDI5XSwgNzI6IFsyLCAyOV0sIDc1
OiBbMiwgMjldLCA4MDogWzIsIDI5XSwgODE6IFsyLCAyOV0sIDgyOiBbMiwgMjldLCA4MzogWzIs
IDI5XSwgODQ6IFsyLCAyOV0sIDg1OiBbMiwgMjldIH0sIHsgMTQ6IFsyLCAxNV0sIDE1OiBbMiwg
MTVdLCAxOTogWzIsIDE1XSwgMjk6IFsyLCAxNV0sIDM0OiBbMiwgMTVdLCAzOTogWzIsIDE1XSwg
NDQ6IFsyLCAxNV0sIDQ3OiBbMiwgMTVdLCA0ODogWzIsIDE1XSwgNTE6IFsyLCAxNV0sIDU1OiBb
MiwgMTVdLCA2MDogWzIsIDE1XSB9LCB7IDcyOiBbMSwgMTM4XSwgNzc6IFsxLCAxMzddIH0sIHsg
NzI6IFsyLCAxMDBdLCA3NzogWzIsIDEwMF0gfSwgeyAxNDogWzIsIDE2XSwgMTU6IFsyLCAxNl0s
IDE5OiBbMiwgMTZdLCAyOTogWzIsIDE2XSwgMzQ6IFsyLCAxNl0sIDQ0OiBbMiwgMTZdLCA0Nzog
WzIsIDE2XSwgNDg6IFsyLCAxNl0sIDUxOiBbMiwgMTZdLCA1NTogWzIsIDE2XSwgNjA6IFsyLCAx
Nl0gfSwgeyAzMzogWzEsIDEzOV0gfSwgeyAzMzogWzIsIDc1XSB9LCB7IDMzOiBbMiwgMzJdIH0s
IHsgNzI6IFsyLCAxMDFdLCA3NzogWzIsIDEwMV0gfSwgeyAxNDogWzIsIDE3XSwgMTU6IFsyLCAx
N10sIDE5OiBbMiwgMTddLCAyOTogWzIsIDE3XSwgMzQ6IFsyLCAxN10sIDM5OiBbMiwgMTddLCA0
NDogWzIsIDE3XSwgNDc6IFsyLCAxN10sIDQ4OiBbMiwgMTddLCA1MTogWzIsIDE3XSwgNTU6IFsy
LCAxN10sIDYwOiBbMiwgMTddIH1dLAorICAgICAgICAgICAgZGVmYXVsdEFjdGlvbnM6IHsgNDog
WzIsIDFdLCA1NTogWzIsIDU1XSwgNTc6IFsyLCAyMF0sIDYxOiBbMiwgNTddLCA3NDogWzIsIDgx
XSwgODM6IFsyLCA4NV0sIDg3OiBbMiwgMThdLCA5MTogWzIsIDg5XSwgMTAyOiBbMiwgNTNdLCAx
MDU6IFsyLCA5M10sIDExMTogWzIsIDE5XSwgMTEyOiBbMiwgNzddLCAxMTc6IFsyLCA5N10sIDEy
MDogWzIsIDYzXSwgMTIzOiBbMiwgNjldLCAxMjQ6IFsyLCAxMl0sIDEzNjogWzIsIDc1XSwgMTM3
OiBbMiwgMzJdIH0sCisgICAgICAgICAgICBwYXJzZUVycm9yOiBmdW5jdGlvbiBwYXJzZUVycm9y
KHN0ciwgaGFzaCkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihzdHIpOworICAg
ICAgICAgICAgfSwKKyAgICAgICAgICAgIHBhcnNlOiBmdW5jdGlvbiBwYXJzZShpbnB1dCkgewor
ICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcywKKyAgICAgICAgICAgICAgICAgICAgc3Rh
Y2sgPSBbMF0sCisgICAgICAgICAgICAgICAgICAgIHZzdGFjayA9IFtudWxsXSwKKyAgICAgICAg
ICAgICAgICAgICAgbHN0YWNrID0gW10sCisgICAgICAgICAgICAgICAgICAgIHRhYmxlID0gdGhp
cy50YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgeXl0ZXh0ID0gIiIsCisgICAgICAgICAgICAg
ICAgICAgIHl5bGluZW5vID0gMCwKKyAgICAgICAgICAgICAgICAgICAgeXlsZW5nID0gMCwKKyAg
ICAgICAgICAgICAgICAgICAgcmVjb3ZlcmluZyA9IDAsCisgICAgICAgICAgICAgICAgICAgIFRF
UlJPUiA9IDIsCisgICAgICAgICAgICAgICAgICAgIEVPRiA9IDE7CisgICAgICAgICAgICAgICAg
dGhpcy5sZXhlci5zZXRJbnB1dChpbnB1dCk7CisgICAgICAgICAgICAgICAgdGhpcy5sZXhlci55
eSA9IHRoaXMueXk7CisgICAgICAgICAgICAgICAgdGhpcy55eS5sZXhlciA9IHRoaXMubGV4ZXI7
CisgICAgICAgICAgICAgICAgdGhpcy55eS5wYXJzZXIgPSB0aGlzOworICAgICAgICAgICAgICAg
IGlmICh0eXBlb2YgdGhpcy5sZXhlci55eWxsb2MgPT0gInVuZGVmaW5lZCIpIHRoaXMubGV4ZXIu
eXlsbG9jID0ge307CisgICAgICAgICAgICAgICAgdmFyIHl5bG9jID0gdGhpcy5sZXhlci55eWxs
b2M7CisgICAgICAgICAgICAgICAgbHN0YWNrLnB1c2goeXlsb2MpOworICAgICAgICAgICAgICAg
IHZhciByYW5nZXMgPSB0aGlzLmxleGVyLm9wdGlvbnMgJiYgdGhpcy5sZXhlci5vcHRpb25zLnJh
bmdlczsKKyAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMueXkucGFyc2VFcnJvciA9PT0g
ImZ1bmN0aW9uIikgdGhpcy5wYXJzZUVycm9yID0gdGhpcy55eS5wYXJzZUVycm9yOworICAgICAg
ICAgICAgICAgIGZ1bmN0aW9uIHBvcFN0YWNrKG4pIHsKKyAgICAgICAgICAgICAgICAgICAgc3Rh
Y2subGVuZ3RoID0gc3RhY2subGVuZ3RoIC0gMiAqIG47CisgICAgICAgICAgICAgICAgICAgIHZz
dGFjay5sZW5ndGggPSB2c3RhY2subGVuZ3RoIC0gbjsKKyAgICAgICAgICAgICAgICAgICAgbHN0
YWNrLmxlbmd0aCA9IGxzdGFjay5sZW5ndGggLSBuOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBmdW5jdGlvbiBsZXgoKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciB0b2tl
bjsKKyAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBzZWxmLmxleGVyLmxleCgpIHx8IDE7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdG9rZW4gIT09ICJudW1iZXIiKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHNlbGYuc3ltYm9sc19bdG9rZW5dIHx8IHRva2Vu
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tl
bjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIHN5bWJvbCwKKyAgICAg
ICAgICAgICAgICAgICAgcHJlRXJyb3JTeW1ib2wsCisgICAgICAgICAgICAgICAgICAgIHN0YXRl
LAorICAgICAgICAgICAgICAgICAgICBhY3Rpb24sCisgICAgICAgICAgICAgICAgICAgIGEsCisg
ICAgICAgICAgICAgICAgICAgIHIsCisgICAgICAgICAgICAgICAgICAgIHl5dmFsID0ge30sCisg
ICAgICAgICAgICAgICAgICAgIHAsCisgICAgICAgICAgICAgICAgICAgIGxlbiwKKyAgICAgICAg
ICAgICAgICAgICAgbmV3U3RhdGUsCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkOworICAg
ICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlID0g
c3RhY2tbc3RhY2subGVuZ3RoIC0gMV07CisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRl
ZmF1bHRBY3Rpb25zW3N0YXRlXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0g
dGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV07CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9sID09PSBudWxsIHx8IHR5cGVvZiBz
eW1ib2wgPT0gInVuZGVmaW5lZCIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1i
b2wgPSBsZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGFjdGlvbiA9IHRhYmxlW3N0YXRlXSAmJiB0YWJsZVtzdGF0ZV1bc3ltYm9sXTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFjdGlv
biA9PT0gInVuZGVmaW5lZCIgfHwgIWFjdGlvbi5sZW5ndGggfHwgIWFjdGlvblswXSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIGVyclN0ciA9ICIiOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFyZWNvdmVyaW5nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhw
ZWN0ZWQgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHAgaW4gdGFibGVb
c3RhdGVdKSBpZiAodGhpcy50ZXJtaW5hbHNfW3BdICYmIHAgPiAyKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkLnB1c2goIiciICsgdGhpcy50ZXJtaW5hbHNfW3Bd
ICsgIiciKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHRoaXMubGV4ZXIuc2hvd1Bvc2l0aW9uKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVyclN0ciA9ICJQYXJzZSBlcnJvciBvbiBsaW5lICIgKyAoeXls
aW5lbm8gKyAxKSArICI6XG4iICsgdGhpcy5sZXhlci5zaG93UG9zaXRpb24oKSArICJcbkV4cGVj
dGluZyAiICsgZXhwZWN0ZWQuam9pbigiLCAiKSArICIsIGdvdCAnIiArICh0aGlzLnRlcm1pbmFs
c19bc3ltYm9sXSB8fCBzeW1ib2wpICsgIiciOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyclN0ciA9ICJQYXJz
ZSBlcnJvciBvbiBsaW5lICIgKyAoeXlsaW5lbm8gKyAxKSArICI6IFVuZXhwZWN0ZWQgIiArIChz
eW1ib2wgPT0gMSA/ICJlbmQgb2YgaW5wdXQiIDogIiciICsgKHRoaXMudGVybWluYWxzX1tzeW1i
b2xdIHx8IHN5bWJvbCkgKyAiJyIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcnNlRXJyb3IoZXJyU3RyLCB7IHRleHQ6
IHRoaXMubGV4ZXIubWF0Y2gsIHRva2VuOiB0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1i
b2wsIGxpbmU6IHRoaXMubGV4ZXIueXlsaW5lbm8sIGxvYzogeXlsb2MsIGV4cGVjdGVkOiBleHBl
Y3RlZCB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uWzBdIGluc3RhbmNlb2YgQXJyYXkgJiYg
YWN0aW9uLmxlbmd0aCA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBF
cnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIg
KyBzdGF0ZSArICIsIHRva2VuOiAiICsgc3ltYm9sKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGFjdGlvblswXSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2go
c3ltYm9sKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2c3RhY2sucHVzaCh0aGlzLmxl
eGVyLnl5dGV4dCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHN0YWNrLnB1c2godGhp
cy5sZXhlci55eWxsb2MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2go
YWN0aW9uWzFdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2wgPSBudWxsOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJlRXJyb3JTeW1ib2wpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeXlsZW5nID0gdGhpcy5sZXhlci55eWxlbmc7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHl5dGV4dCA9IHRoaXMubGV4ZXIueXl0ZXh0
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5eWxpbmVubyA9IHRoaXMubGV4ZXIu
eXlsaW5lbm87CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHl5bG9jID0gdGhpcy5s
ZXhlci55eWxsb2M7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWNvdmVy
aW5nID4gMCkgcmVjb3ZlcmluZy0tOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbCA9IHByZUVycm9yU3lt
Ym9sOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVFcnJvclN5bWJvbCA9IG51
bGw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxlbiA9IHRoaXMucHJvZHVjdGlvbnNfW2FjdGlvblsxXV1bMV07
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXl2YWwuJCA9IHZzdGFja1t2c3RhY2subGVu
Z3RoIC0gbGVuXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB5eXZhbC5fJCA9IHsgZmly
c3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9saW5lLCBs
YXN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9saW5lLCBmaXJzdF9jb2x1
bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfY29sdW1uLCBsYXN0
X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2NvbHVtbiB9OworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZXMpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeXl2YWwuXyQucmFuZ2UgPSBbbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVu
IHx8IDEpXS5yYW5nZVswXSwgbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5yYW5nZVsxXV07Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHIgPSB0aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh5eXZhbCwgeXl0ZXh0LCB5eWxlbmcsIHl5bGlu
ZW5vLCB0aGlzLnl5LCBhY3Rpb25bMV0sIHZzdGFjaywgbHN0YWNrKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodHlwZW9mIHIgIT09ICJ1bmRlZmluZWQiKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YWNrID0gc3RhY2suc2xpY2UoMCwgLTEgKiBsZW4gKiAy
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnN0YWNrID0gdnN0YWNrLnNsaWNl
KDAsIC0xICogbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHN0YWNrID0g
bHN0YWNrLnNsaWNlKDAsIC0xICogbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaCh0aGlzLnByb2R1Y3Rpb25z
X1thY3Rpb25bMV1dWzBdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2c3RhY2sucHVz
aCh5eXZhbC4kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsc3RhY2sucHVzaCh5eXZh
bC5fJCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3RhdGUgPSB0YWJsZVtzdGFj
a1tzdGFjay5sZW5ndGggLSAyXV1bc3RhY2tbc3RhY2subGVuZ3RoIC0gMV1dOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2gobmV3U3RhdGUpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICAvKiBKaXNvbiBnZW5lcmF0ZWQgbGV4ZXIg
Ki8KKyAgICAgICAgdmFyIGxleGVyID0gKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBs
ZXhlciA9IHsgRU9GOiAxLAorICAgICAgICAgICAgICAgIHBhcnNlRXJyb3I6IGZ1bmN0aW9uIHBh
cnNlRXJyb3Ioc3RyLCBoYXNoKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnl5LnBh
cnNlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy55eS5wYXJzZXIucGFyc2VFcnJv
cihzdHIsIGhhc2gpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHN0cik7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHNldElucHV0OiBmdW5jdGlvbiBz
ZXRJbnB1dChpbnB1dCkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnB1dCA9IGlucHV0
OworICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb3JlID0gdGhpcy5fbGVzcyA9IHRoaXMuZG9u
ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB0aGlzLnl5bGluZW5vID0gdGhpcy55eWxl
bmcgPSAwOworICAgICAgICAgICAgICAgICAgICB0aGlzLnl5dGV4dCA9IHRoaXMubWF0Y2hlZCA9
IHRoaXMubWF0Y2ggPSAnJzsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb25TdGFj
ayA9IFsnSU5JVElBTCddOworICAgICAgICAgICAgICAgICAgICB0aGlzLnl5bGxvYyA9IHsgZmly
c3RfbGluZTogMSwgZmlyc3RfY29sdW1uOiAwLCBsYXN0X2xpbmU6IDEsIGxhc3RfY29sdW1uOiAw
IH07CisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB0aGlzLnl5
bGxvYy5yYW5nZSA9IFswLCAwXTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5vZmZzZXQgPSAw
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgICAgIGlucHV0OiBmdW5jdGlvbiBpbnB1dCgpIHsKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIGNoID0gdGhpcy5faW5wdXRbMF07CisgICAgICAgICAgICAgICAgICAgIHRoaXMu
eXl0ZXh0ICs9IGNoOworICAgICAgICAgICAgICAgICAgICB0aGlzLnl5bGVuZysrOworICAgICAg
ICAgICAgICAgICAgICB0aGlzLm9mZnNldCsrOworICAgICAgICAgICAgICAgICAgICB0aGlzLm1h
dGNoICs9IGNoOworICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoZWQgKz0gY2g7CisgICAg
ICAgICAgICAgICAgICAgIHZhciBsaW5lcyA9IGNoLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmVzKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLnl5bGluZW5vKys7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnl5bGxvYy5s
YXN0X2xpbmUrKzsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfY29sdW1uKys7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHRoaXMueXls
bG9jLnJhbmdlWzFdKys7CisKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlz
Ll9pbnB1dC5zbGljZSgxKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoOworICAgICAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgdW5wdXQ6IGZ1bmN0aW9uIHVucHV0KGNoKSB7
CisgICAgICAgICAgICAgICAgICAgIHZhciBsZW4gPSBjaC5sZW5ndGg7CisgICAgICAgICAgICAg
ICAgICAgIHZhciBsaW5lcyA9IGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7CisKKyAgICAgICAg
ICAgICAgICAgICAgdGhpcy5faW5wdXQgPSBjaCArIHRoaXMuX2lucHV0OworICAgICAgICAgICAg
ICAgICAgICB0aGlzLnl5dGV4dCA9IHRoaXMueXl0ZXh0LnN1YnN0cigwLCB0aGlzLnl5dGV4dC5s
ZW5ndGggLSBsZW4gLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgLy90aGlzLnl5bGVuZyAtPSBs
ZW47CisgICAgICAgICAgICAgICAgICAgIHRoaXMub2Zmc2V0IC09IGxlbjsKKyAgICAgICAgICAg
ICAgICAgICAgdmFyIG9sZExpbmVzID0gdGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cp
OworICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoID0gdGhpcy5tYXRjaC5zdWJzdHIoMCwg
dGhpcy5tYXRjaC5sZW5ndGggLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaGVk
ID0gdGhpcy5tYXRjaGVkLnN1YnN0cigwLCB0aGlzLm1hdGNoZWQubGVuZ3RoIC0gMSk7CisKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCAtIDEpIHRoaXMueXlsaW5lbm8gLT0g
bGluZXMubGVuZ3RoIC0gMTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSB0aGlzLnl5bGxv
Yy5yYW5nZTsKKworICAgICAgICAgICAgICAgICAgICB0aGlzLnl5bGxvYyA9IHsgZmlyc3RfbGlu
ZTogdGhpcy55eWxsb2MuZmlyc3RfbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhc3Rf
bGluZTogdGhpcy55eWxpbmVubyArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF9j
b2x1bW46IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGxhc3RfY29sdW1uOiBsaW5lcyA/IChsaW5lcy5sZW5ndGggPT09IG9sZExpbmVzLmxlbmd0aCA/
IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiA6IDApICsgb2xkTGluZXNbb2xkTGluZXMubGVuZ3Ro
IC0gbGluZXMubGVuZ3RoXS5sZW5ndGggLSBsaW5lc1swXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5m
aXJzdF9jb2x1bW4gLSBsZW4KKyAgICAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAg
ICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbclswXSwgclswXSArIHRoaXMueXlsZW5nIC0gbGVuXTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsK
KyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIG1vcmU6IGZ1bmN0aW9uIG1vcmUo
KSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX21vcmUgPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAg
IGxlc3M6IGZ1bmN0aW9uIGxlc3MobikgeworICAgICAgICAgICAgICAgICAgICB0aGlzLnVucHV0
KHRoaXMubWF0Y2guc2xpY2UobikpOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAg
ICAgcGFzdElucHV0OiBmdW5jdGlvbiBwYXN0SW5wdXQoKSB7CisgICAgICAgICAgICAgICAgICAg
IHZhciBwYXN0ID0gdGhpcy5tYXRjaGVkLnN1YnN0cigwLCB0aGlzLm1hdGNoZWQubGVuZ3RoIC0g
dGhpcy5tYXRjaC5sZW5ndGgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHBhc3QubGVu
Z3RoID4gMjAgPyAnLi4uJyA6ICcnKSArIHBhc3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywg
IiIpOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgdXBjb21pbmdJbnB1dDog
ZnVuY3Rpb24gdXBjb21pbmdJbnB1dCgpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQg
PSB0aGlzLm1hdGNoOworICAgICAgICAgICAgICAgICAgICBpZiAobmV4dC5sZW5ndGggPCAyMCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCArPSB0aGlzLl9pbnB1dC5zdWJzdHIoMCwg
MjAgLSBuZXh0Lmxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIChuZXh0LnN1YnN0cigwLCAyMCkgKyAobmV4dC5sZW5ndGggPiAyMCA/ICcu
Li4nIDogJycpKS5yZXBsYWNlKC9cbi9nLCAiIik7CisgICAgICAgICAgICAgICAgfSwKKyAgICAg
ICAgICAgICAgICBzaG93UG9zaXRpb246IGZ1bmN0aW9uIHNob3dQb3NpdGlvbigpIHsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIHByZSA9IHRoaXMucGFzdElucHV0KCk7CisgICAgICAgICAgICAg
ICAgICAgIHZhciBjID0gbmV3IEFycmF5KHByZS5sZW5ndGggKyAxKS5qb2luKCItIik7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBwcmUgKyB0aGlzLnVwY29taW5nSW5wdXQoKSArICJcbiIg
KyBjICsgIl4iOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgbmV4dDogZnVu
Y3Rpb24gbmV4dCgpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZG9uZSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuRU9GOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5faW5wdXQpIHRoaXMuZG9uZSA9IHRy
dWU7CisKKyAgICAgICAgICAgICAgICAgICAgdmFyIHRva2VuLCBtYXRjaCwgdGVtcE1hdGNoLCBp
bmRleCwgY29sLCBsaW5lczsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9tb3JlKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnl5dGV4dCA9ICcnOworICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5tYXRjaCA9ICcnOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIHZhciBydWxlcyA9IHRoaXMuX2N1cnJlbnRSdWxlcygpOworICAgICAg
ICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0ZW1wTWF0Y2ggPSB0aGlzLl9pbnB1dC5tYXRjaCh0aGlz
LnJ1bGVzW3J1bGVzW2ldXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVtcE1hdGNo
ICYmICghbWF0Y2ggfHwgdGVtcE1hdGNoWzBdLmxlbmd0aCA+IG1hdGNoWzBdLmxlbmd0aCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IHRlbXBNYXRjaDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCF0aGlzLm9wdGlvbnMuZmxleCkgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNo
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcyA9IG1hdGNoWzBdLm1hdGNoKC8oPzpc
clxuP3xcbikuKi9nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaW5lcykgdGhpcy55
eWxpbmVubyArPSBsaW5lcy5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnl5
bGxvYyA9IHsgZmlyc3RfbGluZTogdGhpcy55eWxsb2MubGFzdF9saW5lLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxhc3RfbGluZTogdGhpcy55eWxpbmVubyArIDEsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyBsaW5lc1ts
aW5lcy5sZW5ndGggLSAxXS5sZW5ndGggLSBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5tYXRjaCgv
XHI/XG4/LylbMF0ubGVuZ3RoIDogdGhpcy55eWxsb2MubGFzdF9jb2x1bW4gKyBtYXRjaFswXS5s
ZW5ndGggfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueXl0ZXh0ICs9IG1hdGNoWzBd
OworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaCArPSBtYXRjaFswXTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2hlcyA9IG1hdGNoOworICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy55eWxlbmcgPSB0aGlzLnl5dGV4dC5sZW5ndGg7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gW3RoaXMub2Zmc2V0LCB0aGlzLm9mZnNldCAr
PSB0aGlzLnl5bGVuZ107CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLl9tb3JlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLl9pbnB1dCA9IHRoaXMuX2lucHV0LnNsaWNlKG1hdGNoWzBdLmxlbmd0aCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoZWQgKz0gbWF0Y2hbMF07CisgICAgICAgICAgICAg
ICAgICAgICAgICB0b2tlbiA9IHRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsIHRoaXMueXks
IHRoaXMsIHJ1bGVzW2luZGV4XSwgdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0
YWNrLmxlbmd0aCAtIDFdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRvbmUg
JiYgdGhpcy5faW5wdXQpIHRoaXMuZG9uZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHRva2VuKSByZXR1cm4gdG9rZW47ZWxzZSByZXR1cm47CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2lucHV0ID09PSAiIikgeworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuRU9GOworICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VFcnJv
cignTGV4aWNhbCBlcnJvciBvbiBsaW5lICcgKyAodGhpcy55eWxpbmVubyArIDEpICsgJy4gVW5y
ZWNvZ25pemVkIHRleHQuXG4nICsgdGhpcy5zaG93UG9zaXRpb24oKSwgeyB0ZXh0OiAiIiwgdG9r
ZW46IG51bGwsIGxpbmU6IHRoaXMueXlsaW5lbm8gfSk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIGxleDogZnVuY3Rpb24gbGV4KCkg
eworICAgICAgICAgICAgICAgICAgICB2YXIgciA9IHRoaXMubmV4dCgpOworICAgICAgICAgICAg
ICAgICAgICBpZiAodHlwZW9mIHIgIT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcjsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxleCgpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBiZWdpbjogZnVuY3Rpb24gYmVn
aW4oY29uZGl0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2su
cHVzaChjb25kaXRpb24pOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgcG9w
U3RhdGU6IGZ1bmN0aW9uIHBvcFN0YXRlKCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAg
ICAgICAgIF9jdXJyZW50UnVsZXM6IGZ1bmN0aW9uIF9jdXJyZW50UnVsZXMoKSB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0
aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdXS5ydWxlczsKKyAgICAgICAgICAgICAgICB9
LAorICAgICAgICAgICAgICAgIHRvcFN0YXRlOiBmdW5jdGlvbiB0b3BTdGF0ZSgpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25T
dGFjay5sZW5ndGggLSAyXTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHB1
c2hTdGF0ZTogZnVuY3Rpb24gYmVnaW4oY29uZGl0aW9uKSB7CisgICAgICAgICAgICAgICAgICAg
IHRoaXMuYmVnaW4oY29uZGl0aW9uKTsKKyAgICAgICAgICAgICAgICB9IH07CisgICAgICAgICAg
ICBsZXhlci5vcHRpb25zID0ge307CisgICAgICAgICAgICBsZXhlci5wZXJmb3JtQWN0aW9uID0g
ZnVuY3Rpb24gYW5vbnltb3VzKHl5LCB5eV8sICRhdm9pZGluZ19uYW1lX2NvbGxpc2lvbnMsIFlZ
X1NUQVJUCisgICAgICAgICAgICAvKiovKSB7CisKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiBz
dHJpcChzdGFydCwgZW5kKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB5eV8ueXl0ZXh0
ID0geXlfLnl5dGV4dC5zdWJzdHIoc3RhcnQsIHl5Xy55eWxlbmcgLSBlbmQpOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIHZhciBZWVNUQVRFID0gWVlfU1RBUlQ7CisgICAg
ICAgICAgICAgICAgc3dpdGNoICgkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zKSB7CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eV8ueXl0
ZXh0LnNsaWNlKC0yKSA9PT0gIlxcXFwiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RyaXAoMCwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWdpbigibXUi
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoeXlfLnl5dGV4dC5zbGljZSgt
MSkgPT09ICJcXCIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpcCgwLCAxKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJlZ2luKCJlbXUiKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5iZWdpbigibXUiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh5eV8ueXl0ZXh0KSByZXR1cm4gMTU7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gMTU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5w
b3BTdGF0ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE1OworCisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAzOgorICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWdpbigncmF3Jyk7cmV0dXJuIDE1OworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFNob3VsZCBiZSB1c2luZyBgdGhpcy50b3BTdGF0ZSgpYCBiZWxvdywgYnV0IGl0
IGN1cnJlbnRseQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0aGUgc2Vjb25k
IHRvcCBpbnN0ZWFkIG9mIHRoZSBmaXJzdCB0b3AuIE9wZW5lZCBhbgorICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gaXNzdWUgYWJvdXQgaXQgYXQgaHR0cHM6Ly9naXRodWIuY29tL3phYWNoL2pp
c29uL2lzc3Vlcy8yOTEKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbmRpdGlv
blN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV0gPT09ICdyYXcnKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE1OworICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB5eV8ueXl0ZXh0ID0geXlf
Lnl5dGV4dC5zdWJzdHIoNSwgeXlfLnl5bGVuZyAtIDkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAnRU5EX1JBV19CTE9DSyc7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBj
YXNlIDU6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTU7CisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA2OgorICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIDE0OworCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSA3OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDY1OworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgODoK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA2ODsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDk6CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gMTk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSAxMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9w
U3RhdGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmVnaW4oJ3JhdycpOworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDIzOworCisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxMToKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiA1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICBjYXNlIDEyOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDYw
OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgMTM6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMjk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxNDoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiA0NzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICBjYXNlIDE1OgorICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5wb3BTdGF0ZSgpO3JldHVybiA0NDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICBjYXNlIDE2OgorICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5wb3BTdGF0ZSgpO3JldHVybiA0NDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICBjYXNlIDE3OgorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIDM0OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgMTg6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMzk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxOToK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA1MTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDIwOgorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIDQ4OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgMjE6CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVu
cHV0KHl5Xy55eXRleHQpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgp
OworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWdpbignY29tJyk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDIyOgorICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIDE0OworCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSAyMzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA0
ODsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBj
YXNlIDI0OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDczOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjU6CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gNzI7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyNjoKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiA3MjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICBjYXNlIDI3OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDg3OworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjg6
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUgd2hpdGVzcGFjZQorICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjk6CisgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7cmV0dXJuIDU0OworICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzA6CisgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7cmV0dXJuIDMzOworICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzE6CisgICAg
ICAgICAgICAgICAgICAgICAgICB5eV8ueXl0ZXh0ID0gc3RyaXAoMSwgMikucmVwbGFjZSgvXFwi
L2csICciJyk7cmV0dXJuIDgwOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgMzI6CisgICAgICAgICAgICAgICAgICAgICAgICB5eV8ueXl0
ZXh0ID0gc3RyaXAoMSwgMikucmVwbGFjZSgvXFwnL2csICInIik7cmV0dXJuIDgwOworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzM6Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gODU7CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAzNDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiA4MjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICBjYXNlIDM1OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDgy
OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgMzY6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gODM7CisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAzNzoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiA4NDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICBjYXNlIDM4OgorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIDgxOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgMzk6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gNzU7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0MDoK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA3NzsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDQxOgorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIDcyOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgNDI6CisgICAgICAgICAgICAgICAgICAgICAgICB5eV8ueXl0
ZXh0ID0geXlfLnl5dGV4dC5yZXBsYWNlKC9cXChbXFxcXV0pL2csICckMScpO3JldHVybiA3MjsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNl
IDQzOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdJTlZBTElEJzsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDQ0OgorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDU7CisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICAgICAgbGV4
ZXIucnVsZXMgPSBbL14oPzpbXlx4MDBdKj8oPz0oXHtceykpKS8sIC9eKD86W15ceDAwXSspLywg
L14oPzpbXlx4MDBdezIsfT8oPz0oXHtce3xcXFx7XHt8XFxcXFx7XHt8JCkpKS8sIC9eKD86XHtc
e1x7XHsoPz1bXlwvXSkpLywgL14oPzpce1x7XHtce1wvW15ccyEiIyUtLFwuXC87LT5AXFstXF5g
XHstfl0rKD89Wz19XHNcLy5dKVx9XH1cfVx9KS8sIC9eKD86W15ceDAwXSo/KD89KFx7XHtce1x7
KSkpLywgL14oPzpbXHNcU10qPy0tKH4pP1x9XH0pLywgL14oPzpcKCkvLCAvXig/OlwpKS8sIC9e
KD86XHtce1x7XHspLywgL14oPzpcfVx9XH1cfSkvLCAvXig/Olx7XHsofik/PikvLCAvXig/Olx7
XHsofik/Iz4pLywgL14oPzpce1x7KH4pPyNcKj8pLywgL14oPzpce1x7KH4pP1wvKS8sIC9eKD86
XHtceyh+KT9cXlxzKih+KT9cfVx9KS8sIC9eKD86XHtceyh+KT9ccyplbHNlXHMqKH4pP1x9XH0p
LywgL14oPzpce1x7KH4pP1xeKS8sIC9eKD86XHtceyh+KT9ccyplbHNlXGIpLywgL14oPzpce1x7
KH4pP1x7KS8sIC9eKD86XHtceyh+KT8mKS8sIC9eKD86XHtceyh+KT8hLS0pLywgL14oPzpce1x7
KH4pPyFbXHNcU10qP1x9XH0pLywgL14oPzpce1x7KH4pP1wqPykvLCAvXig/Oj0pLywgL14oPzpc
LlwuKS8sIC9eKD86XC4oPz0oWz1+fVxzXC8uKXxdKSkpLywgL14oPzpbXC8uXSkvLCAvXig/Olxz
KykvLCAvXig/Olx9KH4pP1x9XH0pLywgL14oPzoofik/XH1cfSkvLCAvXig/OiIoXFxbIl18W14i
XSkqIikvLCAvXig/OicoXFxbJ118W14nXSkqJykvLCAvXig/OkApLywgL14oPzp0cnVlKD89KFt+
fVxzKV0pKSkvLCAvXig/OmZhbHNlKD89KFt+fVxzKV0pKSkvLCAvXig/OnVuZGVmaW5lZCg/PShb
fn1ccyldKSkpLywgL14oPzpudWxsKD89KFt+fVxzKV0pKSkvLCAvXig/Oi0/WzAtOV0rKD86XC5b
MC05XSspPyg/PShbfn1ccyldKSkpLywgL14oPzphc1xzK1x8KS8sIC9eKD86XHwpLywgL14oPzoo
W15ccyEiIyUtLFwuXC87LT5AXFstXF5gXHstfl0rKD89KFs9fn1cc1wvLil8XSkpKSkvLCAvXig/
OlxbKFxcXF18W15cXV0pKlxdKS8sIC9eKD86LikvLCAvXig/OiQpL107CisgICAgICAgICAgICBs
ZXhlci5jb25kaXRpb25zID0geyAibXUiOiB7ICJydWxlcyI6IFs3LCA4LCA5LCAxMCwgMTEsIDEy
LCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYs
IDI3LCAyOCwgMjksIDMwLCAzMSwgMzIsIDMzLCAzNCwgMzUsIDM2LCAzNywgMzgsIDM5LCA0MCwg
NDEsIDQyLCA0MywgNDRdLCAiaW5jbHVzaXZlIjogZmFsc2UgfSwgImVtdSI6IHsgInJ1bGVzIjog
WzJdLCAiaW5jbHVzaXZlIjogZmFsc2UgfSwgImNvbSI6IHsgInJ1bGVzIjogWzZdLCAiaW5jbHVz
aXZlIjogZmFsc2UgfSwgInJhdyI6IHsgInJ1bGVzIjogWzMsIDQsIDVdLCAiaW5jbHVzaXZlIjog
ZmFsc2UgfSwgIklOSVRJQUwiOiB7ICJydWxlcyI6IFswLCAxLCA0NF0sICJpbmNsdXNpdmUiOiB0
cnVlIH0gfTsKKyAgICAgICAgICAgIHJldHVybiBsZXhlcjsKKyAgICAgICAgfSkoKTsKKyAgICAg
ICAgcGFyc2VyLmxleGVyID0gbGV4ZXI7CisgICAgICAgIGZ1bmN0aW9uIFBhcnNlcigpIHsKKyAg
ICAgICAgICAgIHRoaXMueXkgPSB7fTsKKyAgICAgICAgfVBhcnNlci5wcm90b3R5cGUgPSBwYXJz
ZXI7cGFyc2VyLlBhcnNlciA9IFBhcnNlcjsKKyAgICAgICAgcmV0dXJuIG5ldyBQYXJzZXIoKTsK
KyAgICB9KSgpO2V4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7CisgICAgZXhwb3J0c1snZGVmYXVs
dCddID0gaGFuZGxlYmFyczsKKworLyoqKi8gfSwKKy8qIDI3ICovCisvKioqLyBmdW5jdGlvbiht
b2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworICAgICd1c2Ugc3RyaWN0
JzsKKworICAgIHZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVf
XygxKVsnZGVmYXVsdCddOworCisgICAgZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTsKKworICAg
IHZhciBfdmlzaXRvciA9IF9fd2VicGFja19yZXF1aXJlX18oMjgpOworCisgICAgdmFyIF92aXNp
dG9yMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Zpc2l0b3IpOworCisgICAgZnVuY3Rpb24g
V2hpdGVzcGFjZUNvbnRyb2woKSB7CisgICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5n
dGggPD0gMCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IHt9IDogYXJndW1lbnRzWzBd
OworCisgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zOworICAgIH0KKyAgICBXaGl0ZXNwYWNl
Q29udHJvbC5wcm90b3R5cGUgPSBuZXcgX3Zpc2l0b3IyWydkZWZhdWx0J10oKTsKKworICAgIFdo
aXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5Qcm9ncmFtID0gZnVuY3Rpb24gKHByb2dyYW0pIHsK
KyAgICAgIHZhciBkb1N0YW5kYWxvbmUgPSAhdGhpcy5vcHRpb25zLmlnbm9yZVN0YW5kYWxvbmU7
CisKKyAgICAgIHZhciBpc1Jvb3QgPSAhdGhpcy5pc1Jvb3RTZWVuOworICAgICAgdGhpcy5pc1Jv
b3RTZWVuID0gdHJ1ZTsKKworICAgICAgdmFyIGJvZHkgPSBwcm9ncmFtLmJvZHk7CisgICAgICBm
b3IgKHZhciBpID0gMCwgbCA9IGJvZHkubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CisgICAgICAgIHZh
ciBjdXJyZW50ID0gYm9keVtpXSwKKyAgICAgICAgICAgIHN0cmlwID0gdGhpcy5hY2NlcHQoY3Vy
cmVudCk7CisKKyAgICAgICAgaWYgKCFzdHJpcCkgeworICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CisKKyAgICAgICAgdmFyIF9pc1ByZXZXaGl0ZXNwYWNlID0gaXNQcmV2V2hpdGVzcGFj
ZShib2R5LCBpLCBpc1Jvb3QpLAorICAgICAgICAgICAgX2lzTmV4dFdoaXRlc3BhY2UgPSBpc05l
eHRXaGl0ZXNwYWNlKGJvZHksIGksIGlzUm9vdCksCisgICAgICAgICAgICBvcGVuU3RhbmRhbG9u
ZSA9IHN0cmlwLm9wZW5TdGFuZGFsb25lICYmIF9pc1ByZXZXaGl0ZXNwYWNlLAorICAgICAgICAg
ICAgY2xvc2VTdGFuZGFsb25lID0gc3RyaXAuY2xvc2VTdGFuZGFsb25lICYmIF9pc05leHRXaGl0
ZXNwYWNlLAorICAgICAgICAgICAgaW5saW5lU3RhbmRhbG9uZSA9IHN0cmlwLmlubGluZVN0YW5k
YWxvbmUgJiYgX2lzUHJldldoaXRlc3BhY2UgJiYgX2lzTmV4dFdoaXRlc3BhY2U7CisKKyAgICAg
ICAgaWYgKHN0cmlwLmNsb3NlKSB7CisgICAgICAgICAgb21pdFJpZ2h0KGJvZHksIGksIHRydWUp
OworICAgICAgICB9CisgICAgICAgIGlmIChzdHJpcC5vcGVuKSB7CisgICAgICAgICAgb21pdExl
ZnQoYm9keSwgaSwgdHJ1ZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZG9TdGFuZGFsb25l
ICYmIGlubGluZVN0YW5kYWxvbmUpIHsKKyAgICAgICAgICBvbWl0UmlnaHQoYm9keSwgaSk7CisK
KyAgICAgICAgICBpZiAob21pdExlZnQoYm9keSwgaSkpIHsKKyAgICAgICAgICAgIC8vIElmIHdl
IGFyZSBvbiBhIHN0YW5kYWxvbmUgbm9kZSwgc2F2ZSB0aGUgaW5kZW50IGluZm8gZm9yIHBhcnRp
YWxzCisgICAgICAgICAgICBpZiAoY3VycmVudC50eXBlID09PSAnUGFydGlhbFN0YXRlbWVudCcp
IHsKKyAgICAgICAgICAgICAgLy8gUHVsbCBvdXQgdGhlIHdoaXRlc3BhY2UgZnJvbSB0aGUgZmlu
YWwgbGluZQorICAgICAgICAgICAgICBjdXJyZW50LmluZGVudCA9IC8oWyBcdF0rJCkvLmV4ZWMo
Ym9keVtpIC0gMV0ub3JpZ2luYWwpWzFdOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBpZiAoZG9TdGFuZGFsb25lICYmIG9wZW5TdGFuZGFsb25lKSB7Cisg
ICAgICAgICAgb21pdFJpZ2h0KChjdXJyZW50LnByb2dyYW0gfHwgY3VycmVudC5pbnZlcnNlKS5i
b2R5KTsKKworICAgICAgICAgIC8vIFN0cmlwIG91dCB0aGUgcHJldmlvdXMgY29udGVudCBub2Rl
IGlmIGl0J3Mgd2hpdGVzcGFjZSBvbmx5CisgICAgICAgICAgb21pdExlZnQoYm9keSwgaSk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGRvU3RhbmRhbG9uZSAmJiBjbG9zZVN0YW5kYWxvbmUpIHsK
KyAgICAgICAgICAvLyBBbHdheXMgc3RyaXAgdGhlIG5leHQgbm9kZQorICAgICAgICAgIG9taXRS
aWdodChib2R5LCBpKTsKKworICAgICAgICAgIG9taXRMZWZ0KChjdXJyZW50LmludmVyc2UgfHwg
Y3VycmVudC5wcm9ncmFtKS5ib2R5KTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICByZXR1
cm4gcHJvZ3JhbTsKKyAgICB9OworCisgICAgV2hpdGVzcGFjZUNvbnRyb2wucHJvdG90eXBlLkJs
b2NrU3RhdGVtZW50ID0gV2hpdGVzcGFjZUNvbnRyb2wucHJvdG90eXBlLkRlY29yYXRvckJsb2Nr
ID0gV2hpdGVzcGFjZUNvbnRyb2wucHJvdG90eXBlLlBhcnRpYWxCbG9ja1N0YXRlbWVudCA9IGZ1
bmN0aW9uIChibG9jaykgeworICAgICAgdGhpcy5hY2NlcHQoYmxvY2sucHJvZ3JhbSk7CisgICAg
ICB0aGlzLmFjY2VwdChibG9jay5pbnZlcnNlKTsKKworICAgICAgLy8gRmluZCB0aGUgaW52ZXJz
ZSBwcm9ncmFtIHRoYXQgaXMgaW52b2xlZCB3aXRoIHdoaXRlc3BhY2Ugc3RyaXBwaW5nLgorICAg
ICAgdmFyIHByb2dyYW0gPSBibG9jay5wcm9ncmFtIHx8IGJsb2NrLmludmVyc2UsCisgICAgICAg
ICAgaW52ZXJzZSA9IGJsb2NrLnByb2dyYW0gJiYgYmxvY2suaW52ZXJzZSwKKyAgICAgICAgICBm
aXJzdEludmVyc2UgPSBpbnZlcnNlLAorICAgICAgICAgIGxhc3RJbnZlcnNlID0gaW52ZXJzZTsK
KworICAgICAgaWYgKGludmVyc2UgJiYgaW52ZXJzZS5jaGFpbmVkKSB7CisgICAgICAgIGZpcnN0
SW52ZXJzZSA9IGludmVyc2UuYm9keVswXS5wcm9ncmFtOworCisgICAgICAgIC8vIFdhbGsgdGhl
IGludmVyc2UgY2hhaW4gdG8gZmluZCB0aGUgbGFzdCBpbnZlcnNlIHRoYXQgaXMgYWN0dWFsbHkg
aW4gdGhlIGNoYWluLgorICAgICAgICB3aGlsZSAobGFzdEludmVyc2UuY2hhaW5lZCkgeworICAg
ICAgICAgIGxhc3RJbnZlcnNlID0gbGFzdEludmVyc2UuYm9keVtsYXN0SW52ZXJzZS5ib2R5Lmxl
bmd0aCAtIDFdLnByb2dyYW07CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgdmFyIHN0cmlw
ID0geworICAgICAgICBvcGVuOiBibG9jay5vcGVuU3RyaXAub3BlbiwKKyAgICAgICAgY2xvc2U6
IGJsb2NrLmNsb3NlU3RyaXAuY2xvc2UsCisKKyAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBzdGFu
ZGFsb25lIGNhbmRpYWN5LiBCYXNpY2FsbHkgZmxhZyBvdXIgY29udGVudCBhcyBiZWluZyBwb3Nz
aWJseSBzdGFuZGFsb25lCisgICAgICAgIC8vIHNvIG91ciBwYXJlbnQgY2FuIGRldGVybWluZSBp
ZiB3ZSBhY3R1YWxseSBhcmUgc3RhbmRhbG9uZQorICAgICAgICBvcGVuU3RhbmRhbG9uZTogaXNO
ZXh0V2hpdGVzcGFjZShwcm9ncmFtLmJvZHkpLAorICAgICAgICBjbG9zZVN0YW5kYWxvbmU6IGlz
UHJldldoaXRlc3BhY2UoKGZpcnN0SW52ZXJzZSB8fCBwcm9ncmFtKS5ib2R5KQorICAgICAgfTsK
KworICAgICAgaWYgKGJsb2NrLm9wZW5TdHJpcC5jbG9zZSkgeworICAgICAgICBvbWl0UmlnaHQo
cHJvZ3JhbS5ib2R5LCBudWxsLCB0cnVlKTsKKyAgICAgIH0KKworICAgICAgaWYgKGludmVyc2Up
IHsKKyAgICAgICAgdmFyIGludmVyc2VTdHJpcCA9IGJsb2NrLmludmVyc2VTdHJpcDsKKworICAg
ICAgICBpZiAoaW52ZXJzZVN0cmlwLm9wZW4pIHsKKyAgICAgICAgICBvbWl0TGVmdChwcm9ncmFt
LmJvZHksIG51bGwsIHRydWUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGludmVyc2VTdHJp
cC5jbG9zZSkgeworICAgICAgICAgIG9taXRSaWdodChmaXJzdEludmVyc2UuYm9keSwgbnVsbCwg
dHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJsb2NrLmNsb3NlU3RyaXAub3Blbikgewor
ICAgICAgICAgIG9taXRMZWZ0KGxhc3RJbnZlcnNlLmJvZHksIG51bGwsIHRydWUpOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gRmluZCBzdGFuZGFsb25lIGVsc2Ugc3RhdG1lbnRzCisgICAgICAg
IGlmICghdGhpcy5vcHRpb25zLmlnbm9yZVN0YW5kYWxvbmUgJiYgaXNQcmV2V2hpdGVzcGFjZShw
cm9ncmFtLmJvZHkpICYmIGlzTmV4dFdoaXRlc3BhY2UoZmlyc3RJbnZlcnNlLmJvZHkpKSB7Cisg
ICAgICAgICAgb21pdExlZnQocHJvZ3JhbS5ib2R5KTsKKyAgICAgICAgICBvbWl0UmlnaHQoZmly
c3RJbnZlcnNlLmJvZHkpOworICAgICAgICB9CisgICAgICB9IGVsc2UgaWYgKGJsb2NrLmNsb3Nl
U3RyaXAub3BlbikgeworICAgICAgICBvbWl0TGVmdChwcm9ncmFtLmJvZHksIG51bGwsIHRydWUp
OworICAgICAgfQorCisgICAgICByZXR1cm4gc3RyaXA7CisgICAgfTsKKworICAgIFdoaXRlc3Bh
Y2VDb250cm9sLnByb3RvdHlwZS5EZWNvcmF0b3IgPSBXaGl0ZXNwYWNlQ29udHJvbC5wcm90b3R5
cGUuTXVzdGFjaGVTdGF0ZW1lbnQgPSBmdW5jdGlvbiAobXVzdGFjaGUpIHsKKyAgICAgIHJldHVy
biBtdXN0YWNoZS5zdHJpcDsKKyAgICB9OworCisgICAgV2hpdGVzcGFjZUNvbnRyb2wucHJvdG90
eXBlLlBhcnRpYWxTdGF0ZW1lbnQgPSBXaGl0ZXNwYWNlQ29udHJvbC5wcm90b3R5cGUuQ29tbWVu
dFN0YXRlbWVudCA9IGZ1bmN0aW9uIChub2RlKSB7CisgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUg
bmV4dCAqLworICAgICAgdmFyIHN0cmlwID0gbm9kZS5zdHJpcCB8fCB7fTsKKyAgICAgIHJldHVy
biB7CisgICAgICAgIGlubGluZVN0YW5kYWxvbmU6IHRydWUsCisgICAgICAgIG9wZW46IHN0cmlw
Lm9wZW4sCisgICAgICAgIGNsb3NlOiBzdHJpcC5jbG9zZQorICAgICAgfTsKKyAgICB9OworCisg
ICAgZnVuY3Rpb24gaXNQcmV2V2hpdGVzcGFjZShib2R5LCBpLCBpc1Jvb3QpIHsKKyAgICAgIGlm
IChpID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgaSA9IGJvZHkubGVuZ3RoOworICAgICAgfQor
CisgICAgICAvLyBOb2RlcyB0aGF0IGVuZCB3aXRoIG5ld2xpbmVzIGFyZSBjb25zaWRlcmVkIHdo
aXRlc3BhY2UgKGJ1dCBhcmUgc3BlY2lhbAorICAgICAgLy8gY2FzZWQgZm9yIHN0cmlwIG9wZXJh
dGlvbnMpCisgICAgICB2YXIgcHJldiA9IGJvZHlbaSAtIDFdLAorICAgICAgICAgIHNpYmxpbmcg
PSBib2R5W2kgLSAyXTsKKyAgICAgIGlmICghcHJldikgeworICAgICAgICByZXR1cm4gaXNSb290
OworICAgICAgfQorCisgICAgICBpZiAocHJldi50eXBlID09PSAnQ29udGVudFN0YXRlbWVudCcp
IHsKKyAgICAgICAgcmV0dXJuIChzaWJsaW5nIHx8ICFpc1Jvb3QgPyAvXHI/XG5ccyo/JC8gOiAv
KF58XHI/XG4pXHMqPyQvKS50ZXN0KHByZXYub3JpZ2luYWwpOworICAgICAgfQorICAgIH0KKyAg
ICBmdW5jdGlvbiBpc05leHRXaGl0ZXNwYWNlKGJvZHksIGksIGlzUm9vdCkgeworICAgICAgaWYg
KGkgPT09IHVuZGVmaW5lZCkgeworICAgICAgICBpID0gLTE7CisgICAgICB9CisKKyAgICAgIHZh
ciBuZXh0ID0gYm9keVtpICsgMV0sCisgICAgICAgICAgc2libGluZyA9IGJvZHlbaSArIDJdOwor
ICAgICAgaWYgKCFuZXh0KSB7CisgICAgICAgIHJldHVybiBpc1Jvb3Q7CisgICAgICB9CisKKyAg
ICAgIGlmIChuZXh0LnR5cGUgPT09ICdDb250ZW50U3RhdGVtZW50JykgeworICAgICAgICByZXR1
cm4gKHNpYmxpbmcgfHwgIWlzUm9vdCA/IC9eXHMqP1xyP1xuLyA6IC9eXHMqPyhccj9cbnwkKS8p
LnRlc3QobmV4dC5vcmlnaW5hbCk7CisgICAgICB9CisgICAgfQorCisgICAgLy8gTWFya3MgdGhl
IG5vZGUgdG8gdGhlIHJpZ2h0IG9mIHRoZSBwb3NpdGlvbiBhcyBvbWl0dGVkLgorICAgIC8vIEku
ZS4ge3tmb299fScgJyB3aWxsIG1hcmsgdGhlICcgJyBub2RlIGFzIG9taXR0ZWQuCisgICAgLy8K
KyAgICAvLyBJZiBpIGlzIHVuZGVmaW5lZCwgdGhlbiB0aGUgZmlyc3QgY2hpbGQgd2lsbCBiZSBt
YXJrZWQgYXMgc3VjaC4KKyAgICAvLworICAgIC8vIElmIG11bGl0cGxlIGlzIHRydXRoeSB0aGVu
IGFsbCB3aGl0ZXNwYWNlIHdpbGwgYmUgc3RyaXBwZWQgb3V0IHVudGlsIG5vbi13aGl0ZXNwYWNl
CisgICAgLy8gY29udGVudCBpcyBtZXQuCisgICAgZnVuY3Rpb24gb21pdFJpZ2h0KGJvZHksIGks
IG11bHRpcGxlKSB7CisgICAgICB2YXIgY3VycmVudCA9IGJvZHlbaSA9PSBudWxsID8gMCA6IGkg
KyAxXTsKKyAgICAgIGlmICghY3VycmVudCB8fCBjdXJyZW50LnR5cGUgIT09ICdDb250ZW50U3Rh
dGVtZW50JyB8fCAhbXVsdGlwbGUgJiYgY3VycmVudC5yaWdodFN0cmlwcGVkKSB7CisgICAgICAg
IHJldHVybjsKKyAgICAgIH0KKworICAgICAgdmFyIG9yaWdpbmFsID0gY3VycmVudC52YWx1ZTsK
KyAgICAgIGN1cnJlbnQudmFsdWUgPSBjdXJyZW50LnZhbHVlLnJlcGxhY2UobXVsdGlwbGUgPyAv
XlxzKy8gOiAvXlsgXHRdKlxyP1xuPy8sICcnKTsKKyAgICAgIGN1cnJlbnQucmlnaHRTdHJpcHBl
ZCA9IGN1cnJlbnQudmFsdWUgIT09IG9yaWdpbmFsOworICAgIH0KKworICAgIC8vIE1hcmtzIHRo
ZSBub2RlIHRvIHRoZSBsZWZ0IG9mIHRoZSBwb3NpdGlvbiBhcyBvbWl0dGVkLgorICAgIC8vIEku
ZS4gJyAne3tmb299fSB3aWxsIG1hcmsgdGhlICcgJyBub2RlIGFzIG9taXR0ZWQuCisgICAgLy8K
KyAgICAvLyBJZiBpIGlzIHVuZGVmaW5lZCB0aGVuIHRoZSBsYXN0IGNoaWxkIHdpbGwgYmUgbWFy
a2VkIGFzIHN1Y2guCisgICAgLy8KKyAgICAvLyBJZiBtdWxpdHBsZSBpcyB0cnV0aHkgdGhlbiBh
bGwgd2hpdGVzcGFjZSB3aWxsIGJlIHN0cmlwcGVkIG91dCB1bnRpbCBub24td2hpdGVzcGFjZQor
ICAgIC8vIGNvbnRlbnQgaXMgbWV0LgorICAgIGZ1bmN0aW9uIG9taXRMZWZ0KGJvZHksIGksIG11
bHRpcGxlKSB7CisgICAgICB2YXIgY3VycmVudCA9IGJvZHlbaSA9PSBudWxsID8gYm9keS5sZW5n
dGggLSAxIDogaSAtIDFdOworICAgICAgaWYgKCFjdXJyZW50IHx8IGN1cnJlbnQudHlwZSAhPT0g
J0NvbnRlbnRTdGF0ZW1lbnQnIHx8ICFtdWx0aXBsZSAmJiBjdXJyZW50LmxlZnRTdHJpcHBlZCkg
eworICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICAgIC8vIFdlIG9taXQgdGhlIGxhc3Qg
bm9kZSBpZiBpdCdzIHdoaXRlc3BhY2Ugb25seSBhbmQgbm90IHByZWNlZWRlZCBieSBhIG5vbi1j
b250ZW50IG5vZGUuCisgICAgICB2YXIgb3JpZ2luYWwgPSBjdXJyZW50LnZhbHVlOworICAgICAg
Y3VycmVudC52YWx1ZSA9IGN1cnJlbnQudmFsdWUucmVwbGFjZShtdWx0aXBsZSA/IC9ccyskLyA6
IC9bIFx0XSskLywgJycpOworICAgICAgY3VycmVudC5sZWZ0U3RyaXBwZWQgPSBjdXJyZW50LnZh
bHVlICE9PSBvcmlnaW5hbDsKKyAgICAgIHJldHVybiBjdXJyZW50LmxlZnRTdHJpcHBlZDsKKyAg
ICB9CisKKyAgICBleHBvcnRzWydkZWZhdWx0J10gPSBXaGl0ZXNwYWNlQ29udHJvbDsKKyAgICBt
b2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTsKKworLyoqKi8gfSwKKy8qIDI4ICov
CisvKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHsK
KworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIHZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0g
X193ZWJwYWNrX3JlcXVpcmVfXygxKVsnZGVmYXVsdCddOworCisgICAgZXhwb3J0cy5fX2VzTW9k
dWxlID0gdHJ1ZTsKKworICAgIHZhciBfZXhjZXB0aW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2
KTsKKworICAgIHZhciBfZXhjZXB0aW9uMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2V4Y2Vw
dGlvbik7CisKKyAgICBmdW5jdGlvbiBWaXNpdG9yKCkgeworICAgICAgdGhpcy5wYXJlbnRzID0g
W107CisgICAgfQorCisgICAgVmlzaXRvci5wcm90b3R5cGUgPSB7CisgICAgICBjb25zdHJ1Y3Rv
cjogVmlzaXRvciwKKyAgICAgIG11dGF0aW5nOiBmYWxzZSwKKworICAgICAgLy8gVmlzaXRzIGEg
Z2l2ZW4gdmFsdWUuIElmIG11dGF0aW5nLCB3aWxsIHJlcGxhY2UgdGhlIHZhbHVlIGlmIG5lY2Vz
c2FyeS4KKyAgICAgIGFjY2VwdEtleTogZnVuY3Rpb24gYWNjZXB0S2V5KG5vZGUsIG5hbWUpIHsK
KyAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5hY2NlcHQobm9kZVtuYW1lXSk7CisgICAgICAgIGlm
ICh0aGlzLm11dGF0aW5nKSB7CisgICAgICAgICAgLy8gSGFja3kgc2FuaXR5IGNoZWNrOiBUaGlz
IG1heSBoYXZlIGEgZmV3IGZhbHNlIHBvc2l0aXZlcyBmb3IgdHlwZSBmb3IgdGhlIGhlbHBlcgor
ICAgICAgICAgIC8vIG1ldGhvZHMgYnV0IHdpbGwgZ2VuZXJhbGx5IGRvIHRoZSByaWdodCB0aGlu
ZyB3aXRob3V0IGEgbG90IG9mIG92ZXJoZWFkLgorICAgICAgICAgIGlmICh2YWx1ZSAmJiAhVmlz
aXRvci5wcm90b3R5cGVbdmFsdWUudHlwZV0pIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBfZXhj
ZXB0aW9uMlsnZGVmYXVsdCddKCdVbmV4cGVjdGVkIG5vZGUgdHlwZSAiJyArIHZhbHVlLnR5cGUg
KyAnIiBmb3VuZCB3aGVuIGFjY2VwdGluZyAnICsgbmFtZSArICcgb24gJyArIG5vZGUudHlwZSk7
CisgICAgICAgICAgfQorICAgICAgICAgIG5vZGVbbmFtZV0gPSB2YWx1ZTsKKyAgICAgICAgfQor
ICAgICAgfSwKKworICAgICAgLy8gUGVyZm9ybXMgYW4gYWNjZXB0IG9wZXJhdGlvbiB3aXRoIGFk
ZGVkIHNhbml0eSBjaGVjayB0byBlbnN1cmUKKyAgICAgIC8vIHJlcXVpcmVkIGtleXMgYXJlIG5v
dCByZW1vdmVkLgorICAgICAgYWNjZXB0UmVxdWlyZWQ6IGZ1bmN0aW9uIGFjY2VwdFJlcXVpcmVk
KG5vZGUsIG5hbWUpIHsKKyAgICAgICAgdGhpcy5hY2NlcHRLZXkobm9kZSwgbmFtZSk7CisKKyAg
ICAgICAgaWYgKCFub2RlW25hbWVdKSB7CisgICAgICAgICAgdGhyb3cgbmV3IF9leGNlcHRpb24y
WydkZWZhdWx0J10obm9kZS50eXBlICsgJyByZXF1aXJlcyAnICsgbmFtZSk7CisgICAgICAgIH0K
KyAgICAgIH0sCisKKyAgICAgIC8vIFRyYXZlcnNlcyBhIGdpdmVuIGFycmF5LiBJZiBtdXRhdGlu
ZywgZW1wdHkgcmVzcG5zZXMgd2lsbCBiZSByZW1vdmVkCisgICAgICAvLyBmb3IgY2hpbGQgZWxl
bWVudHMuCisgICAgICBhY2NlcHRBcnJheTogZnVuY3Rpb24gYWNjZXB0QXJyYXkoYXJyYXkpIHsK
KyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcnJheS5sZW5ndGg7IGkgPCBsOyBpKyspIHsK
KyAgICAgICAgICB0aGlzLmFjY2VwdEtleShhcnJheSwgaSk7CisKKyAgICAgICAgICBpZiAoIWFy
cmF5W2ldKSB7CisgICAgICAgICAgICBhcnJheS5zcGxpY2UoaSwgMSk7CisgICAgICAgICAgICBp
LS07CisgICAgICAgICAgICBsLS07CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9LAor
CisgICAgICBhY2NlcHQ6IGZ1bmN0aW9uIGFjY2VwdChvYmplY3QpIHsKKyAgICAgICAgaWYgKCFv
YmplY3QpIHsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvKiBpc3Rh
bmJ1bCBpZ25vcmUgbmV4dDogU2FuaXR5IGNvZGUgKi8KKyAgICAgICAgaWYgKCF0aGlzW29iamVj
dC50eXBlXSkgeworICAgICAgICAgIHRocm93IG5ldyBfZXhjZXB0aW9uMlsnZGVmYXVsdCddKCdV
bmtub3duIHR5cGU6ICcgKyBvYmplY3QudHlwZSwgb2JqZWN0KTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmICh0aGlzLmN1cnJlbnQpIHsKKyAgICAgICAgICB0aGlzLnBhcmVudHMudW5zaGlmdCh0
aGlzLmN1cnJlbnQpOworICAgICAgICB9CisgICAgICAgIHRoaXMuY3VycmVudCA9IG9iamVjdDsK
KworICAgICAgICB2YXIgcmV0ID0gdGhpc1tvYmplY3QudHlwZV0ob2JqZWN0KTsKKworICAgICAg
ICB0aGlzLmN1cnJlbnQgPSB0aGlzLnBhcmVudHMuc2hpZnQoKTsKKworICAgICAgICBpZiAoIXRo
aXMubXV0YXRpbmcgfHwgcmV0KSB7CisgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfSBl
bHNlIGlmIChyZXQgIT09IGZhbHNlKSB7CisgICAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICAg
ICAgfQorICAgICAgfSwKKworICAgICAgUHJvZ3JhbTogZnVuY3Rpb24gUHJvZ3JhbShwcm9ncmFt
KSB7CisgICAgICAgIHRoaXMuYWNjZXB0QXJyYXkocHJvZ3JhbS5ib2R5KTsKKyAgICAgIH0sCisK
KyAgICAgIE11c3RhY2hlU3RhdGVtZW50OiB2aXNpdFN1YkV4cHJlc3Npb24sCisgICAgICBEZWNv
cmF0b3I6IHZpc2l0U3ViRXhwcmVzc2lvbiwKKworICAgICAgQmxvY2tTdGF0ZW1lbnQ6IHZpc2l0
QmxvY2ssCisgICAgICBEZWNvcmF0b3JCbG9jazogdmlzaXRCbG9jaywKKworICAgICAgUGFydGlh
bFN0YXRlbWVudDogdmlzaXRQYXJ0aWFsLAorICAgICAgUGFydGlhbEJsb2NrU3RhdGVtZW50OiBm
dW5jdGlvbiBQYXJ0aWFsQmxvY2tTdGF0ZW1lbnQocGFydGlhbCkgeworICAgICAgICB2aXNpdFBh
cnRpYWwuY2FsbCh0aGlzLCBwYXJ0aWFsKTsKKworICAgICAgICB0aGlzLmFjY2VwdEtleShwYXJ0
aWFsLCAncHJvZ3JhbScpOworICAgICAgfSwKKworICAgICAgQ29udGVudFN0YXRlbWVudDogZnVu
Y3Rpb24gQ29udGVudFN0YXRlbWVudCgpIC8qIGNvbnRlbnQgKi97fSwKKyAgICAgIENvbW1lbnRT
dGF0ZW1lbnQ6IGZ1bmN0aW9uIENvbW1lbnRTdGF0ZW1lbnQoKSAvKiBjb21tZW50ICove30sCisK
KyAgICAgIFN1YkV4cHJlc3Npb246IHZpc2l0U3ViRXhwcmVzc2lvbiwKKworICAgICAgUGF0aEV4
cHJlc3Npb246IGZ1bmN0aW9uIFBhdGhFeHByZXNzaW9uKCkgLyogcGF0aCAqL3t9LAorCisgICAg
ICBTdHJpbmdMaXRlcmFsOiBmdW5jdGlvbiBTdHJpbmdMaXRlcmFsKCkgLyogc3RyaW5nICove30s
CisgICAgICBOdW1iZXJMaXRlcmFsOiBmdW5jdGlvbiBOdW1iZXJMaXRlcmFsKCkgLyogbnVtYmVy
ICove30sCisgICAgICBCb29sZWFuTGl0ZXJhbDogZnVuY3Rpb24gQm9vbGVhbkxpdGVyYWwoKSAv
KiBib29sICove30sCisgICAgICBVbmRlZmluZWRMaXRlcmFsOiBmdW5jdGlvbiBVbmRlZmluZWRM
aXRlcmFsKCkgLyogbGl0ZXJhbCAqL3t9LAorICAgICAgTnVsbExpdGVyYWw6IGZ1bmN0aW9uIE51
bGxMaXRlcmFsKCkgLyogbGl0ZXJhbCAqL3t9LAorCisgICAgICBIYXNoOiBmdW5jdGlvbiBIYXNo
KGhhc2gpIHsKKyAgICAgICAgdGhpcy5hY2NlcHRBcnJheShoYXNoLnBhaXJzKTsKKyAgICAgIH0s
CisgICAgICBIYXNoUGFpcjogZnVuY3Rpb24gSGFzaFBhaXIocGFpcikgeworICAgICAgICB0aGlz
LmFjY2VwdFJlcXVpcmVkKHBhaXIsICd2YWx1ZScpOworICAgICAgfQorICAgIH07CisKKyAgICBm
dW5jdGlvbiB2aXNpdFN1YkV4cHJlc3Npb24obXVzdGFjaGUpIHsKKyAgICAgIHRoaXMuYWNjZXB0
UmVxdWlyZWQobXVzdGFjaGUsICdwYXRoJyk7CisgICAgICB0aGlzLmFjY2VwdEFycmF5KG11c3Rh
Y2hlLnBhcmFtcyk7CisgICAgICB0aGlzLmFjY2VwdEtleShtdXN0YWNoZSwgJ2hhc2gnKTsKKyAg
ICB9CisgICAgZnVuY3Rpb24gdmlzaXRCbG9jayhibG9jaykgeworICAgICAgdmlzaXRTdWJFeHBy
ZXNzaW9uLmNhbGwodGhpcywgYmxvY2spOworCisgICAgICB0aGlzLmFjY2VwdEtleShibG9jaywg
J3Byb2dyYW0nKTsKKyAgICAgIHRoaXMuYWNjZXB0S2V5KGJsb2NrLCAnaW52ZXJzZScpOworICAg
IH0KKyAgICBmdW5jdGlvbiB2aXNpdFBhcnRpYWwocGFydGlhbCkgeworICAgICAgdGhpcy5hY2Nl
cHRSZXF1aXJlZChwYXJ0aWFsLCAnbmFtZScpOworICAgICAgdGhpcy5hY2NlcHRBcnJheShwYXJ0
aWFsLnBhcmFtcyk7CisgICAgICB0aGlzLmFjY2VwdEtleShwYXJ0aWFsLCAnaGFzaCcpOworICAg
IH0KKworICAgIGV4cG9ydHNbJ2RlZmF1bHQnXSA9IFZpc2l0b3I7CisgICAgbW9kdWxlLmV4cG9y
dHMgPSBleHBvcnRzWydkZWZhdWx0J107CisKKy8qKiovIH0sCisvKiAyOSAqLworLyoqKi8gZnVu
Y3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyAgICAndXNl
IHN0cmljdCc7CisKKyAgICB2YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IF9fd2VicGFja19y
ZXF1aXJlX18oMSlbJ2RlZmF1bHQnXTsKKworICAgIGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7
CisgICAgZXhwb3J0cy5Tb3VyY2VMb2NhdGlvbiA9IFNvdXJjZUxvY2F0aW9uOworICAgIGV4cG9y
dHMuaWQgPSBpZDsKKyAgICBleHBvcnRzLnN0cmlwRmxhZ3MgPSBzdHJpcEZsYWdzOworICAgIGV4
cG9ydHMuc3RyaXBDb21tZW50ID0gc3RyaXBDb21tZW50OworICAgIGV4cG9ydHMucHJlcGFyZVBh
dGggPSBwcmVwYXJlUGF0aDsKKyAgICBleHBvcnRzLnByZXBhcmVNdXN0YWNoZSA9IHByZXBhcmVN
dXN0YWNoZTsKKyAgICBleHBvcnRzLnByZXBhcmVSYXdCbG9jayA9IHByZXBhcmVSYXdCbG9jazsK
KyAgICBleHBvcnRzLnByZXBhcmVCbG9jayA9IHByZXBhcmVCbG9jazsKKyAgICBleHBvcnRzLnBy
ZXBhcmVQcm9ncmFtID0gcHJlcGFyZVByb2dyYW07CisgICAgZXhwb3J0cy5wcmVwYXJlUGFydGlh
bEJsb2NrID0gcHJlcGFyZVBhcnRpYWxCbG9jazsKKworICAgIHZhciBfZXhjZXB0aW9uID0gX193
ZWJwYWNrX3JlcXVpcmVfXyg2KTsKKworICAgIHZhciBfZXhjZXB0aW9uMiA9IF9pbnRlcm9wUmVx
dWlyZURlZmF1bHQoX2V4Y2VwdGlvbik7CisKKyAgICBmdW5jdGlvbiB2YWxpZGF0ZUNsb3NlKG9w
ZW4sIGNsb3NlKSB7CisgICAgICBjbG9zZSA9IGNsb3NlLnBhdGggPyBjbG9zZS5wYXRoLm9yaWdp
bmFsIDogY2xvc2U7CisKKyAgICAgIGlmIChvcGVuLnBhdGgub3JpZ2luYWwgIT09IGNsb3NlKSB7
CisgICAgICAgIHZhciBlcnJvck5vZGUgPSB7IGxvYzogb3Blbi5wYXRoLmxvYyB9OworCisgICAg
ICAgIHRocm93IG5ldyBfZXhjZXB0aW9uMlsnZGVmYXVsdCddKG9wZW4ucGF0aC5vcmlnaW5hbCAr
ICIgZG9lc24ndCBtYXRjaCAiICsgY2xvc2UsIGVycm9yTm9kZSk7CisgICAgICB9CisgICAgfQor
CisgICAgZnVuY3Rpb24gU291cmNlTG9jYXRpb24oc291cmNlLCBsb2NJbmZvKSB7CisgICAgICB0
aGlzLnNvdXJjZSA9IHNvdXJjZTsKKyAgICAgIHRoaXMuc3RhcnQgPSB7CisgICAgICAgIGxpbmU6
IGxvY0luZm8uZmlyc3RfbGluZSwKKyAgICAgICAgY29sdW1uOiBsb2NJbmZvLmZpcnN0X2NvbHVt
bgorICAgICAgfTsKKyAgICAgIHRoaXMuZW5kID0geworICAgICAgICBsaW5lOiBsb2NJbmZvLmxh
c3RfbGluZSwKKyAgICAgICAgY29sdW1uOiBsb2NJbmZvLmxhc3RfY29sdW1uCisgICAgICB9Owor
ICAgIH0KKworICAgIGZ1bmN0aW9uIGlkKHRva2VuKSB7CisgICAgICBpZiAoL15cWy4qXF0kLy50
ZXN0KHRva2VuKSkgeworICAgICAgICByZXR1cm4gdG9rZW4uc3Vic3RyKDEsIHRva2VuLmxlbmd0
aCAtIDIpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIHRva2VuOworICAgICAgfQor
ICAgIH0KKworICAgIGZ1bmN0aW9uIHN0cmlwRmxhZ3Mob3BlbiwgY2xvc2UpIHsKKyAgICAgIHJl
dHVybiB7CisgICAgICAgIG9wZW46IG9wZW4uY2hhckF0KDIpID09PSAnficsCisgICAgICAgIGNs
b3NlOiBjbG9zZS5jaGFyQXQoY2xvc2UubGVuZ3RoIC0gMykgPT09ICd+JworICAgICAgfTsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBzdHJpcENvbW1lbnQoY29tbWVudCkgeworICAgICAgcmV0dXJu
IGNvbW1lbnQucmVwbGFjZSgvXlx7XHt+P1whLT8tPy8sICcnKS5yZXBsYWNlKC8tPy0/fj9cfVx9
JC8sICcnKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwcmVwYXJlUGF0aChkYXRhLCBwYXJ0cywg
bG9jKSB7CisgICAgICBsb2MgPSB0aGlzLmxvY0luZm8obG9jKTsKKworICAgICAgdmFyIG9yaWdp
bmFsID0gZGF0YSA/ICdAJyA6ICcnLAorICAgICAgICAgIGRpZyA9IFtdLAorICAgICAgICAgIGRl
cHRoID0gMCwKKyAgICAgICAgICBkZXB0aFN0cmluZyA9ICcnOworCisgICAgICBmb3IgKHZhciBp
ID0gMCwgbCA9IHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKykgeworICAgICAgICB2YXIgcGFydCA9
IHBhcnRzW2ldLnBhcnQsCisKKyAgICAgICAgLy8gSWYgd2UgaGF2ZSBbXSBzeW50YXggdGhlbiB3
ZSBkbyBub3QgdHJlYXQgcGF0aCByZWZlcmVuY2VzIGFzIG9wZXJhdG9ycywKKyAgICAgICAgLy8g
aS5lLiBmb28uW3RoaXNdIHJlc29sdmVzIHRvIGFwcHJveGltYXRlbHkgY29udGV4dC5mb29bJ3Ro
aXMnXQorICAgICAgICBpc0xpdGVyYWwgPSBwYXJ0c1tpXS5vcmlnaW5hbCAhPT0gcGFydDsKKyAg
ICAgICAgb3JpZ2luYWwgKz0gKHBhcnRzW2ldLnNlcGFyYXRvciB8fCAnJykgKyBwYXJ0OworCisg
ICAgICAgIGlmICghaXNMaXRlcmFsICYmIChwYXJ0ID09PSAnLi4nIHx8IHBhcnQgPT09ICcuJyB8
fCBwYXJ0ID09PSAndGhpcycpKSB7CisgICAgICAgICAgaWYgKGRpZy5sZW5ndGggPiAwKSB7Cisg
ICAgICAgICAgICB0aHJvdyBuZXcgX2V4Y2VwdGlvbjJbJ2RlZmF1bHQnXSgnSW52YWxpZCBwYXRo
OiAnICsgb3JpZ2luYWwsIHsgbG9jOiBsb2MgfSk7CisgICAgICAgICAgfSBlbHNlIGlmIChwYXJ0
ID09PSAnLi4nKSB7CisgICAgICAgICAgICBkZXB0aCsrOworICAgICAgICAgICAgZGVwdGhTdHJp
bmcgKz0gJy4uLyc7CisgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGRp
Zy5wdXNoKHBhcnQpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHJldHVybiB7CisgICAg
ICAgIHR5cGU6ICdQYXRoRXhwcmVzc2lvbicsCisgICAgICAgIGRhdGE6IGRhdGEsCisgICAgICAg
IGRlcHRoOiBkZXB0aCwKKyAgICAgICAgcGFydHM6IGRpZywKKyAgICAgICAgb3JpZ2luYWw6IG9y
aWdpbmFsLAorICAgICAgICBsb2M6IGxvYworICAgICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlv
biBwcmVwYXJlTXVzdGFjaGUocGF0aCwgcGFyYW1zLCBoYXNoLCBvcGVuLCBzdHJpcCwgbG9jSW5m
bykgeworICAgICAgLy8gTXVzdCB1c2UgY2hhckF0IHRvIHN1cHBvcnQgSUUgcHJlLTEwCisgICAg
ICB2YXIgZXNjYXBlRmxhZyA9IG9wZW4uY2hhckF0KDMpIHx8IG9wZW4uY2hhckF0KDIpLAorICAg
ICAgICAgIGVzY2FwZWQgPSBlc2NhcGVGbGFnICE9PSAneycgJiYgZXNjYXBlRmxhZyAhPT0gJyYn
OworCisgICAgICB2YXIgZGVjb3JhdG9yID0gL1wqLy50ZXN0KG9wZW4pOworICAgICAgcmV0dXJu
IHsKKyAgICAgICAgdHlwZTogZGVjb3JhdG9yID8gJ0RlY29yYXRvcicgOiAnTXVzdGFjaGVTdGF0
ZW1lbnQnLAorICAgICAgICBwYXRoOiBwYXRoLAorICAgICAgICBwYXJhbXM6IHBhcmFtcywKKyAg
ICAgICAgaGFzaDogaGFzaCwKKyAgICAgICAgZXNjYXBlZDogZXNjYXBlZCwKKyAgICAgICAgc3Ry
aXA6IHN0cmlwLAorICAgICAgICBsb2M6IHRoaXMubG9jSW5mbyhsb2NJbmZvKQorICAgICAgfTsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBwcmVwYXJlUmF3QmxvY2sob3BlblJhd0Jsb2NrLCBjb250
ZW50cywgY2xvc2UsIGxvY0luZm8pIHsKKyAgICAgIHZhbGlkYXRlQ2xvc2Uob3BlblJhd0Jsb2Nr
LCBjbG9zZSk7CisKKyAgICAgIGxvY0luZm8gPSB0aGlzLmxvY0luZm8obG9jSW5mbyk7CisgICAg
ICB2YXIgcHJvZ3JhbSA9IHsKKyAgICAgICAgdHlwZTogJ1Byb2dyYW0nLAorICAgICAgICBib2R5
OiBjb250ZW50cywKKyAgICAgICAgc3RyaXA6IHt9LAorICAgICAgICBsb2M6IGxvY0luZm8KKyAg
ICAgIH07CisKKyAgICAgIHJldHVybiB7CisgICAgICAgIHR5cGU6ICdCbG9ja1N0YXRlbWVudCcs
CisgICAgICAgIHBhdGg6IG9wZW5SYXdCbG9jay5wYXRoLAorICAgICAgICBwYXJhbXM6IG9wZW5S
YXdCbG9jay5wYXJhbXMsCisgICAgICAgIGhhc2g6IG9wZW5SYXdCbG9jay5oYXNoLAorICAgICAg
ICBwcm9ncmFtOiBwcm9ncmFtLAorICAgICAgICBvcGVuU3RyaXA6IHt9LAorICAgICAgICBpbnZl
cnNlU3RyaXA6IHt9LAorICAgICAgICBjbG9zZVN0cmlwOiB7fSwKKyAgICAgICAgbG9jOiBsb2NJ
bmZvCisgICAgICB9OworICAgIH0KKworICAgIGZ1bmN0aW9uIHByZXBhcmVCbG9jayhvcGVuQmxv
Y2ssIHByb2dyYW0sIGludmVyc2VBbmRQcm9ncmFtLCBjbG9zZSwgaW52ZXJ0ZWQsIGxvY0luZm8p
IHsKKyAgICAgIGlmIChjbG9zZSAmJiBjbG9zZS5wYXRoKSB7CisgICAgICAgIHZhbGlkYXRlQ2xv
c2Uob3BlbkJsb2NrLCBjbG9zZSk7CisgICAgICB9CisKKyAgICAgIHZhciBkZWNvcmF0b3IgPSAv
XCovLnRlc3Qob3BlbkJsb2NrLm9wZW4pOworCisgICAgICBwcm9ncmFtLmJsb2NrUGFyYW1zID0g
b3BlbkJsb2NrLmJsb2NrUGFyYW1zOworCisgICAgICB2YXIgaW52ZXJzZSA9IHVuZGVmaW5lZCwK
KyAgICAgICAgICBpbnZlcnNlU3RyaXAgPSB1bmRlZmluZWQ7CisKKyAgICAgIGlmIChpbnZlcnNl
QW5kUHJvZ3JhbSkgeworICAgICAgICBpZiAoZGVjb3JhdG9yKSB7CisgICAgICAgICAgdGhyb3cg
bmV3IF9leGNlcHRpb24yWydkZWZhdWx0J10oJ1VuZXhwZWN0ZWQgaW52ZXJzZSBibG9jayBvbiBk
ZWNvcmF0b3InLCBpbnZlcnNlQW5kUHJvZ3JhbSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
aW52ZXJzZUFuZFByb2dyYW0uY2hhaW4pIHsKKyAgICAgICAgICBpbnZlcnNlQW5kUHJvZ3JhbS5w
cm9ncmFtLmJvZHlbMF0uY2xvc2VTdHJpcCA9IGNsb3NlLnN0cmlwOworICAgICAgICB9CisKKyAg
ICAgICAgaW52ZXJzZVN0cmlwID0gaW52ZXJzZUFuZFByb2dyYW0uc3RyaXA7CisgICAgICAgIGlu
dmVyc2UgPSBpbnZlcnNlQW5kUHJvZ3JhbS5wcm9ncmFtOworICAgICAgfQorCisgICAgICBpZiAo
aW52ZXJ0ZWQpIHsKKyAgICAgICAgaW52ZXJ0ZWQgPSBpbnZlcnNlOworICAgICAgICBpbnZlcnNl
ID0gcHJvZ3JhbTsKKyAgICAgICAgcHJvZ3JhbSA9IGludmVydGVkOworICAgICAgfQorCisgICAg
ICByZXR1cm4geworICAgICAgICB0eXBlOiBkZWNvcmF0b3IgPyAnRGVjb3JhdG9yQmxvY2snIDog
J0Jsb2NrU3RhdGVtZW50JywKKyAgICAgICAgcGF0aDogb3BlbkJsb2NrLnBhdGgsCisgICAgICAg
IHBhcmFtczogb3BlbkJsb2NrLnBhcmFtcywKKyAgICAgICAgaGFzaDogb3BlbkJsb2NrLmhhc2gs
CisgICAgICAgIHByb2dyYW06IHByb2dyYW0sCisgICAgICAgIGludmVyc2U6IGludmVyc2UsCisg
ICAgICAgIG9wZW5TdHJpcDogb3BlbkJsb2NrLnN0cmlwLAorICAgICAgICBpbnZlcnNlU3RyaXA6
IGludmVyc2VTdHJpcCwKKyAgICAgICAgY2xvc2VTdHJpcDogY2xvc2UgJiYgY2xvc2Uuc3RyaXAs
CisgICAgICAgIGxvYzogdGhpcy5sb2NJbmZvKGxvY0luZm8pCisgICAgICB9OworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIHByZXBhcmVQcm9ncmFtKHN0YXRlbWVudHMsIGxvYykgeworICAgICAgaWYg
KCFsb2MgJiYgc3RhdGVtZW50cy5sZW5ndGgpIHsKKyAgICAgICAgdmFyIGZpcnN0TG9jID0gc3Rh
dGVtZW50c1swXS5sb2MsCisgICAgICAgICAgICBsYXN0TG9jID0gc3RhdGVtZW50c1tzdGF0ZW1l
bnRzLmxlbmd0aCAtIDFdLmxvYzsKKworICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAq
LworICAgICAgICBpZiAoZmlyc3RMb2MgJiYgbGFzdExvYykgeworICAgICAgICAgIGxvYyA9IHsK
KyAgICAgICAgICAgIHNvdXJjZTogZmlyc3RMb2Muc291cmNlLAorICAgICAgICAgICAgc3RhcnQ6
IHsKKyAgICAgICAgICAgICAgbGluZTogZmlyc3RMb2Muc3RhcnQubGluZSwKKyAgICAgICAgICAg
ICAgY29sdW1uOiBmaXJzdExvYy5zdGFydC5jb2x1bW4KKyAgICAgICAgICAgIH0sCisgICAgICAg
ICAgICBlbmQ6IHsKKyAgICAgICAgICAgICAgbGluZTogbGFzdExvYy5lbmQubGluZSwKKyAgICAg
ICAgICAgICAgY29sdW1uOiBsYXN0TG9jLmVuZC5jb2x1bW4KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICB9OworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHJldHVybiB7CisgICAgICAgIHR5
cGU6ICdQcm9ncmFtJywKKyAgICAgICAgYm9keTogc3RhdGVtZW50cywKKyAgICAgICAgc3RyaXA6
IHt9LAorICAgICAgICBsb2M6IGxvYworICAgICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBw
cmVwYXJlUGFydGlhbEJsb2NrKG9wZW4sIHByb2dyYW0sIGNsb3NlLCBsb2NJbmZvKSB7CisgICAg
ICB2YWxpZGF0ZUNsb3NlKG9wZW4sIGNsb3NlKTsKKworICAgICAgcmV0dXJuIHsKKyAgICAgICAg
dHlwZTogJ1BhcnRpYWxCbG9ja1N0YXRlbWVudCcsCisgICAgICAgIG5hbWU6IG9wZW4ucGF0aCwK
KyAgICAgICAgcGFyYW1zOiBvcGVuLnBhcmFtcywKKyAgICAgICAgaGFzaDogb3Blbi5oYXNoLAor
ICAgICAgICBwcm9ncmFtOiBwcm9ncmFtLAorICAgICAgICBvcGVuU3RyaXA6IG9wZW4uc3RyaXAs
CisgICAgICAgIGNsb3NlU3RyaXA6IGNsb3NlICYmIGNsb3NlLnN0cmlwLAorICAgICAgICBsb2M6
IHRoaXMubG9jSW5mbyhsb2NJbmZvKQorICAgICAgfTsKKyAgICB9CisKKy8qKiovIH0sCisvKiAz
MCAqLworLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9f
KSB7CisKKyAgICAvKiBlc2xpbnQtZGlzYWJsZSBuZXctY2FwICovCisKKyAgICAndXNlIHN0cmlj
dCc7CisKKyAgICB2YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJl
X18oMSlbJ2RlZmF1bHQnXTsKKworICAgIGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7CisgICAg
ZXhwb3J0cy5Db21waWxlciA9IENvbXBpbGVyOworICAgIGV4cG9ydHMucHJlY29tcGlsZSA9IHBy
ZWNvbXBpbGU7CisgICAgZXhwb3J0cy5jb21waWxlID0gY29tcGlsZTsKKworICAgIHZhciBfZXhj
ZXB0aW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTsKKworICAgIHZhciBfZXhjZXB0aW9uMiA9
IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2V4Y2VwdGlvbik7CisKKyAgICB2YXIgX3V0aWxzID0g
X193ZWJwYWNrX3JlcXVpcmVfXyg1KTsKKworICAgIHZhciBfYXN0ID0gX193ZWJwYWNrX3JlcXVp
cmVfXygyNCk7CisKKyAgICB2YXIgX2FzdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hc3Qp
OworCisgICAgdmFyIHNsaWNlID0gW10uc2xpY2U7CisKKyAgICBmdW5jdGlvbiBDb21waWxlcigp
IHt9CisKKyAgICAvLyB0aGUgZm91bmRIZWxwZXIgcmVnaXN0ZXIgd2lsbCBkaXNhbWJpZ3VhdGUg
aGVscGVyIGxvb2t1cCBmcm9tIGZpbmRpbmcgYQorICAgIC8vIGZ1bmN0aW9uIGluIGEgY29udGV4
dC4gVGhpcyBpcyBuZWNlc3NhcnkgZm9yIG11c3RhY2hlIGNvbXBhdGliaWxpdHksIHdoaWNoCisg
ICAgLy8gcmVxdWlyZXMgdGhhdCBjb250ZXh0IGZ1bmN0aW9ucyBpbiBibG9ja3MgYXJlIGV2YWx1
YXRlZCBieSBibG9ja0hlbHBlck1pc3NpbmcsCisgICAgLy8gYW5kIHRoZW4gcHJvY2VlZCBhcyBp
ZiB0aGUgcmVzdWx0aW5nIHZhbHVlIHdhcyBwcm92aWRlZCB0byBibG9ja0hlbHBlck1pc3Npbmcu
CisKKyAgICBDb21waWxlci5wcm90b3R5cGUgPSB7CisgICAgICBjb21waWxlcjogQ29tcGlsZXIs
CisKKyAgICAgIGVxdWFsczogZnVuY3Rpb24gZXF1YWxzKG90aGVyKSB7CisgICAgICAgIHZhciBs
ZW4gPSB0aGlzLm9wY29kZXMubGVuZ3RoOworICAgICAgICBpZiAob3RoZXIub3Bjb2Rlcy5sZW5n
dGggIT09IGxlbikgeworICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgICB2YXIgb3Bjb2Rl
ID0gdGhpcy5vcGNvZGVzW2ldLAorICAgICAgICAgICAgICBvdGhlck9wY29kZSA9IG90aGVyLm9w
Y29kZXNbaV07CisgICAgICAgICAgaWYgKG9wY29kZS5vcGNvZGUgIT09IG90aGVyT3Bjb2RlLm9w
Y29kZSB8fCAhYXJnRXF1YWxzKG9wY29kZS5hcmdzLCBvdGhlck9wY29kZS5hcmdzKSkgeworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IC8vIFdlIGtub3cgdGhhdCBsZW5ndGggaXMgdGhlIHNhbWUgYmV0d2VlbiB0aGUgdHdvIGFycmF5
cyBiZWNhdXNlIHRoZXkgYXJlIGRpcmVjdGx5IHRpZWQKKyAgICAgICAgLy8gdG8gdGhlIG9wY29k
ZSBiZWhhdmlvciBhYm92ZS4KKyAgICAgICAgbGVuID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7Cisg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgICBpZiAoIXRo
aXMuY2hpbGRyZW5baV0uZXF1YWxzKG90aGVyLmNoaWxkcmVuW2ldKSkgeworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgfSwKKworICAgICAgZ3VpZDogMCwKKworICAgICAgY29tcGlsZTogZnVuY3Rp
b24gY29tcGlsZShwcm9ncmFtLCBvcHRpb25zKSB7CisgICAgICAgIHRoaXMuc291cmNlTm9kZSA9
IFtdOworICAgICAgICB0aGlzLm9wY29kZXMgPSBbXTsKKyAgICAgICAgdGhpcy5jaGlsZHJlbiA9
IFtdOworICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zOworICAgICAgICB0aGlzLnN0cmlu
Z1BhcmFtcyA9IG9wdGlvbnMuc3RyaW5nUGFyYW1zOworICAgICAgICB0aGlzLnRyYWNrSWRzID0g
b3B0aW9ucy50cmFja0lkczsKKworICAgICAgICBvcHRpb25zLmJsb2NrUGFyYW1zID0gb3B0aW9u
cy5ibG9ja1BhcmFtcyB8fCBbXTsKKworICAgICAgICAvLyBUaGVzZSBjaGFuZ2VzIHdpbGwgcHJv
cGFnYXRlIHRvIHRoZSBvdGhlciBjb21waWxlciBjb21wb25lbnRzCisgICAgICAgIHZhciBrbm93
bkhlbHBlcnMgPSBvcHRpb25zLmtub3duSGVscGVyczsKKyAgICAgICAgb3B0aW9ucy5rbm93bkhl
bHBlcnMgPSB7CisgICAgICAgICAgJ2hlbHBlck1pc3NpbmcnOiB0cnVlLAorICAgICAgICAgICdi
bG9ja0hlbHBlck1pc3NpbmcnOiB0cnVlLAorICAgICAgICAgICdlYWNoJzogdHJ1ZSwKKyAgICAg
ICAgICAnaWYnOiB0cnVlLAorICAgICAgICAgICd1bmxlc3MnOiB0cnVlLAorICAgICAgICAgICd3
aXRoJzogdHJ1ZSwKKyAgICAgICAgICAnbG9nJzogdHJ1ZSwKKyAgICAgICAgICAnbG9va3VwJzog
dHJ1ZQorICAgICAgICB9OworICAgICAgICBpZiAoa25vd25IZWxwZXJzKSB7CisgICAgICAgICAg
Zm9yICh2YXIgX25hbWUgaW4ga25vd25IZWxwZXJzKSB7CisgICAgICAgICAgICAvKiBpc3RhbmJ1
bCBpZ25vcmUgZWxzZSAqLworICAgICAgICAgICAgaWYgKF9uYW1lIGluIGtub3duSGVscGVycykg
eworICAgICAgICAgICAgICBvcHRpb25zLmtub3duSGVscGVyc1tfbmFtZV0gPSBrbm93bkhlbHBl
cnNbX25hbWVdOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiB0aGlzLmFjY2VwdChwcm9ncmFtKTsKKyAgICAgIH0sCisKKyAgICAgIGNvbXBp
bGVQcm9ncmFtOiBmdW5jdGlvbiBjb21waWxlUHJvZ3JhbShwcm9ncmFtKSB7CisgICAgICAgIHZh
ciBjaGlsZENvbXBpbGVyID0gbmV3IHRoaXMuY29tcGlsZXIoKSwKKyAgICAgICAgICAgIC8vIGVz
bGludC1kaXNhYmxlLWxpbmUgbmV3LWNhcAorICAgICAgICByZXN1bHQgPSBjaGlsZENvbXBpbGVy
LmNvbXBpbGUocHJvZ3JhbSwgdGhpcy5vcHRpb25zKSwKKyAgICAgICAgICAgIGd1aWQgPSB0aGlz
Lmd1aWQrKzsKKworICAgICAgICB0aGlzLnVzZVBhcnRpYWwgPSB0aGlzLnVzZVBhcnRpYWwgfHwg
cmVzdWx0LnVzZVBhcnRpYWw7CisKKyAgICAgICAgdGhpcy5jaGlsZHJlbltndWlkXSA9IHJlc3Vs
dDsKKyAgICAgICAgdGhpcy51c2VEZXB0aHMgPSB0aGlzLnVzZURlcHRocyB8fCByZXN1bHQudXNl
RGVwdGhzOworCisgICAgICAgIHJldHVybiBndWlkOworICAgICAgfSwKKworICAgICAgYWNjZXB0
OiBmdW5jdGlvbiBhY2NlcHQobm9kZSkgeworICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4
dDogU2FuaXR5IGNvZGUgKi8KKyAgICAgICAgaWYgKCF0aGlzW25vZGUudHlwZV0pIHsKKyAgICAg
ICAgICB0aHJvdyBuZXcgX2V4Y2VwdGlvbjJbJ2RlZmF1bHQnXSgnVW5rbm93biB0eXBlOiAnICsg
bm9kZS50eXBlLCBub2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuc291cmNlTm9kZS51
bnNoaWZ0KG5vZGUpOworICAgICAgICB2YXIgcmV0ID0gdGhpc1tub2RlLnR5cGVdKG5vZGUpOwor
ICAgICAgICB0aGlzLnNvdXJjZU5vZGUuc2hpZnQoKTsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAg
ICAgIH0sCisKKyAgICAgIFByb2dyYW06IGZ1bmN0aW9uIFByb2dyYW0ocHJvZ3JhbSkgeworICAg
ICAgICB0aGlzLm9wdGlvbnMuYmxvY2tQYXJhbXMudW5zaGlmdChwcm9ncmFtLmJsb2NrUGFyYW1z
KTsKKworICAgICAgICB2YXIgYm9keSA9IHByb2dyYW0uYm9keSwKKyAgICAgICAgICAgIGJvZHlM
ZW5ndGggPSBib2R5Lmxlbmd0aDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib2R5TGVu
Z3RoOyBpKyspIHsKKyAgICAgICAgICB0aGlzLmFjY2VwdChib2R5W2ldKTsKKyAgICAgICAgfQor
CisgICAgICAgIHRoaXMub3B0aW9ucy5ibG9ja1BhcmFtcy5zaGlmdCgpOworCisgICAgICAgIHRo
aXMuaXNTaW1wbGUgPSBib2R5TGVuZ3RoID09PSAxOworICAgICAgICB0aGlzLmJsb2NrUGFyYW1z
ID0gcHJvZ3JhbS5ibG9ja1BhcmFtcyA/IHByb2dyYW0uYmxvY2tQYXJhbXMubGVuZ3RoIDogMDsK
KworICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgIH0sCisKKyAgICAgIEJsb2NrU3RhdGVtZW50
OiBmdW5jdGlvbiBCbG9ja1N0YXRlbWVudChibG9jaykgeworICAgICAgICB0cmFuc2Zvcm1MaXRl
cmFsVG9QYXRoKGJsb2NrKTsKKworICAgICAgICB2YXIgcHJvZ3JhbSA9IGJsb2NrLnByb2dyYW0s
CisgICAgICAgICAgICBpbnZlcnNlID0gYmxvY2suaW52ZXJzZTsKKworICAgICAgICBwcm9ncmFt
ID0gcHJvZ3JhbSAmJiB0aGlzLmNvbXBpbGVQcm9ncmFtKHByb2dyYW0pOworICAgICAgICBpbnZl
cnNlID0gaW52ZXJzZSAmJiB0aGlzLmNvbXBpbGVQcm9ncmFtKGludmVyc2UpOworCisgICAgICAg
IHZhciB0eXBlID0gdGhpcy5jbGFzc2lmeVNleHByKGJsb2NrKTsKKworICAgICAgICBpZiAodHlw
ZSA9PT0gJ2hlbHBlcicpIHsKKyAgICAgICAgICB0aGlzLmhlbHBlclNleHByKGJsb2NrLCBwcm9n
cmFtLCBpbnZlcnNlKTsKKyAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnc2ltcGxlJykgewor
ICAgICAgICAgIHRoaXMuc2ltcGxlU2V4cHIoYmxvY2spOworCisgICAgICAgICAgLy8gbm93IHRo
YXQgdGhlIHNpbXBsZSBtdXN0YWNoZSBpcyByZXNvbHZlZCwgd2UgbmVlZCB0bworICAgICAgICAg
IC8vIGV2YWx1YXRlIGl0IGJ5IGV4ZWN1dGluZyBgYmxvY2tIZWxwZXJNaXNzaW5nYAorICAgICAg
ICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIHByb2dyYW0pOworICAgICAgICAgIHRoaXMu
b3Bjb2RlKCdwdXNoUHJvZ3JhbScsIGludmVyc2UpOworICAgICAgICAgIHRoaXMub3Bjb2RlKCdl
bXB0eUhhc2gnKTsKKyAgICAgICAgICB0aGlzLm9wY29kZSgnYmxvY2tWYWx1ZScsIGJsb2NrLnBh
dGgub3JpZ2luYWwpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHRoaXMuYW1iaWd1b3Vz
U2V4cHIoYmxvY2ssIHByb2dyYW0sIGludmVyc2UpOworCisgICAgICAgICAgLy8gbm93IHRoYXQg
dGhlIHNpbXBsZSBtdXN0YWNoZSBpcyByZXNvbHZlZCwgd2UgbmVlZCB0bworICAgICAgICAgIC8v
IGV2YWx1YXRlIGl0IGJ5IGV4ZWN1dGluZyBgYmxvY2tIZWxwZXJNaXNzaW5nYAorICAgICAgICAg
IHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIHByb2dyYW0pOworICAgICAgICAgIHRoaXMub3Bj
b2RlKCdwdXNoUHJvZ3JhbScsIGludmVyc2UpOworICAgICAgICAgIHRoaXMub3Bjb2RlKCdlbXB0
eUhhc2gnKTsKKyAgICAgICAgICB0aGlzLm9wY29kZSgnYW1iaWd1b3VzQmxvY2tWYWx1ZScpOwor
ICAgICAgICB9CisKKyAgICAgICAgdGhpcy5vcGNvZGUoJ2FwcGVuZCcpOworICAgICAgfSwKKwor
ICAgICAgRGVjb3JhdG9yQmxvY2s6IGZ1bmN0aW9uIERlY29yYXRvckJsb2NrKGRlY29yYXRvcikg
eworICAgICAgICB2YXIgcHJvZ3JhbSA9IGRlY29yYXRvci5wcm9ncmFtICYmIHRoaXMuY29tcGls
ZVByb2dyYW0oZGVjb3JhdG9yLnByb2dyYW0pOworICAgICAgICB2YXIgcGFyYW1zID0gdGhpcy5z
ZXR1cEZ1bGxNdXN0YWNoZVBhcmFtcyhkZWNvcmF0b3IsIHByb2dyYW0sIHVuZGVmaW5lZCksCisg
ICAgICAgICAgICBwYXRoID0gZGVjb3JhdG9yLnBhdGg7CisKKyAgICAgICAgdGhpcy51c2VEZWNv
cmF0b3JzID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5vcGNvZGUoJ3JlZ2lzdGVyRGVjb3JhdG9yJywg
cGFyYW1zLmxlbmd0aCwgcGF0aC5vcmlnaW5hbCk7CisgICAgICB9LAorCisgICAgICBQYXJ0aWFs
U3RhdGVtZW50OiBmdW5jdGlvbiBQYXJ0aWFsU3RhdGVtZW50KHBhcnRpYWwpIHsKKyAgICAgICAg
dGhpcy51c2VQYXJ0aWFsID0gdHJ1ZTsKKworICAgICAgICB2YXIgcHJvZ3JhbSA9IHBhcnRpYWwu
cHJvZ3JhbTsKKyAgICAgICAgaWYgKHByb2dyYW0pIHsKKyAgICAgICAgICBwcm9ncmFtID0gdGhp
cy5jb21waWxlUHJvZ3JhbShwYXJ0aWFsLnByb2dyYW0pOworICAgICAgICB9CisKKyAgICAgICAg
dmFyIHBhcmFtcyA9IHBhcnRpYWwucGFyYW1zOworICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCA+
IDEpIHsKKyAgICAgICAgICB0aHJvdyBuZXcgX2V4Y2VwdGlvbjJbJ2RlZmF1bHQnXSgnVW5zdXBw
b3J0ZWQgbnVtYmVyIG9mIHBhcnRpYWwgYXJndW1lbnRzOiAnICsgcGFyYW1zLmxlbmd0aCwgcGFy
dGlhbCk7CisgICAgICAgIH0gZWxzZSBpZiAoIXBhcmFtcy5sZW5ndGgpIHsKKyAgICAgICAgICBp
ZiAodGhpcy5vcHRpb25zLmV4cGxpY2l0UGFydGlhbENvbnRleHQpIHsKKyAgICAgICAgICAgIHRo
aXMub3Bjb2RlKCdwdXNoTGl0ZXJhbCcsICd1bmRlZmluZWQnKTsKKyAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgcGFyYW1zLnB1c2goeyB0eXBlOiAnUGF0aEV4cHJlc3Npb24nLCBwYXJ0
czogW10sIGRlcHRoOiAwIH0pOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHZh
ciBwYXJ0aWFsTmFtZSA9IHBhcnRpYWwubmFtZS5vcmlnaW5hbCwKKyAgICAgICAgICAgIGlzRHlu
YW1pYyA9IHBhcnRpYWwubmFtZS50eXBlID09PSAnU3ViRXhwcmVzc2lvbic7CisgICAgICAgIGlm
IChpc0R5bmFtaWMpIHsKKyAgICAgICAgICB0aGlzLmFjY2VwdChwYXJ0aWFsLm5hbWUpOworICAg
ICAgICB9CisKKyAgICAgICAgdGhpcy5zZXR1cEZ1bGxNdXN0YWNoZVBhcmFtcyhwYXJ0aWFsLCBw
cm9ncmFtLCB1bmRlZmluZWQsIHRydWUpOworCisgICAgICAgIHZhciBpbmRlbnQgPSBwYXJ0aWFs
LmluZGVudCB8fCAnJzsKKyAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5wcmV2ZW50SW5kZW50ICYm
IGluZGVudCkgeworICAgICAgICAgIHRoaXMub3Bjb2RlKCdhcHBlbmRDb250ZW50JywgaW5kZW50
KTsKKyAgICAgICAgICBpbmRlbnQgPSAnJzsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMub3Bj
b2RlKCdpbnZva2VQYXJ0aWFsJywgaXNEeW5hbWljLCBwYXJ0aWFsTmFtZSwgaW5kZW50KTsKKyAg
ICAgICAgdGhpcy5vcGNvZGUoJ2FwcGVuZCcpOworICAgICAgfSwKKyAgICAgIFBhcnRpYWxCbG9j
a1N0YXRlbWVudDogZnVuY3Rpb24gUGFydGlhbEJsb2NrU3RhdGVtZW50KHBhcnRpYWxCbG9jaykg
eworICAgICAgICB0aGlzLlBhcnRpYWxTdGF0ZW1lbnQocGFydGlhbEJsb2NrKTsKKyAgICAgIH0s
CisKKyAgICAgIE11c3RhY2hlU3RhdGVtZW50OiBmdW5jdGlvbiBNdXN0YWNoZVN0YXRlbWVudCht
dXN0YWNoZSkgeworICAgICAgICB0aGlzLlN1YkV4cHJlc3Npb24obXVzdGFjaGUpOworCisgICAg
ICAgIGlmIChtdXN0YWNoZS5lc2NhcGVkICYmICF0aGlzLm9wdGlvbnMubm9Fc2NhcGUpIHsKKyAg
ICAgICAgICB0aGlzLm9wY29kZSgnYXBwZW5kRXNjYXBlZCcpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgIHRoaXMub3Bjb2RlKCdhcHBlbmQnKTsKKyAgICAgICAgfQorICAgICAgfSwKKyAg
ICAgIERlY29yYXRvcjogZnVuY3Rpb24gRGVjb3JhdG9yKGRlY29yYXRvcikgeworICAgICAgICB0
aGlzLkRlY29yYXRvckJsb2NrKGRlY29yYXRvcik7CisgICAgICB9LAorCisgICAgICBDb250ZW50
U3RhdGVtZW50OiBmdW5jdGlvbiBDb250ZW50U3RhdGVtZW50KGNvbnRlbnQpIHsKKyAgICAgICAg
aWYgKGNvbnRlbnQudmFsdWUpIHsKKyAgICAgICAgICB0aGlzLm9wY29kZSgnYXBwZW5kQ29udGVu
dCcsIGNvbnRlbnQudmFsdWUpOworICAgICAgICB9CisgICAgICB9LAorCisgICAgICBDb21tZW50
U3RhdGVtZW50OiBmdW5jdGlvbiBDb21tZW50U3RhdGVtZW50KCkge30sCisKKyAgICAgIFN1YkV4
cHJlc3Npb246IGZ1bmN0aW9uIFN1YkV4cHJlc3Npb24oc2V4cHIpIHsKKyAgICAgICAgdHJhbnNm
b3JtTGl0ZXJhbFRvUGF0aChzZXhwcik7CisgICAgICAgIHZhciB0eXBlID0gdGhpcy5jbGFzc2lm
eVNleHByKHNleHByKTsKKworICAgICAgICBpZiAodHlwZSA9PT0gJ3NpbXBsZScpIHsKKyAgICAg
ICAgICB0aGlzLnNpbXBsZVNleHByKHNleHByKTsKKyAgICAgICAgfSBlbHNlIGlmICh0eXBlID09
PSAnaGVscGVyJykgeworICAgICAgICAgIHRoaXMuaGVscGVyU2V4cHIoc2V4cHIpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgIHRoaXMuYW1iaWd1b3VzU2V4cHIoc2V4cHIpOworICAgICAg
ICB9CisgICAgICB9LAorICAgICAgYW1iaWd1b3VzU2V4cHI6IGZ1bmN0aW9uIGFtYmlndW91c1Nl
eHByKHNleHByLCBwcm9ncmFtLCBpbnZlcnNlKSB7CisgICAgICAgIHZhciBwYXRoID0gc2V4cHIu
cGF0aCwKKyAgICAgICAgICAgIG5hbWUgPSBwYXRoLnBhcnRzWzBdLAorICAgICAgICAgICAgaXNC
bG9jayA9IHByb2dyYW0gIT0gbnVsbCB8fCBpbnZlcnNlICE9IG51bGw7CisKKyAgICAgICAgdGhp
cy5vcGNvZGUoJ2dldENvbnRleHQnLCBwYXRoLmRlcHRoKTsKKworICAgICAgICB0aGlzLm9wY29k
ZSgncHVzaFByb2dyYW0nLCBwcm9ncmFtKTsKKyAgICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hQcm9n
cmFtJywgaW52ZXJzZSk7CisKKyAgICAgICAgcGF0aC5zdHJpY3QgPSB0cnVlOworICAgICAgICB0
aGlzLmFjY2VwdChwYXRoKTsKKworICAgICAgICB0aGlzLm9wY29kZSgnaW52b2tlQW1iaWd1b3Vz
JywgbmFtZSwgaXNCbG9jayk7CisgICAgICB9LAorCisgICAgICBzaW1wbGVTZXhwcjogZnVuY3Rp
b24gc2ltcGxlU2V4cHIoc2V4cHIpIHsKKyAgICAgICAgdmFyIHBhdGggPSBzZXhwci5wYXRoOwor
ICAgICAgICBwYXRoLnN0cmljdCA9IHRydWU7CisgICAgICAgIHRoaXMuYWNjZXB0KHBhdGgpOwor
ICAgICAgICB0aGlzLm9wY29kZSgncmVzb2x2ZVBvc3NpYmxlTGFtYmRhJyk7CisgICAgICB9LAor
CisgICAgICBoZWxwZXJTZXhwcjogZnVuY3Rpb24gaGVscGVyU2V4cHIoc2V4cHIsIHByb2dyYW0s
IGludmVyc2UpIHsKKyAgICAgICAgdmFyIHBhcmFtcyA9IHRoaXMuc2V0dXBGdWxsTXVzdGFjaGVQ
YXJhbXMoc2V4cHIsIHByb2dyYW0sIGludmVyc2UpLAorICAgICAgICAgICAgcGF0aCA9IHNleHBy
LnBhdGgsCisgICAgICAgICAgICBuYW1lID0gcGF0aC5wYXJ0c1swXTsKKworICAgICAgICBpZiAo
dGhpcy5vcHRpb25zLmtub3duSGVscGVyc1tuYW1lXSkgeworICAgICAgICAgIHRoaXMub3Bjb2Rl
KCdpbnZva2VLbm93bkhlbHBlcicsIHBhcmFtcy5sZW5ndGgsIG5hbWUpOworICAgICAgICB9IGVs
c2UgaWYgKHRoaXMub3B0aW9ucy5rbm93bkhlbHBlcnNPbmx5KSB7CisgICAgICAgICAgdGhyb3cg
bmV3IF9leGNlcHRpb24yWydkZWZhdWx0J10oJ1lvdSBzcGVjaWZpZWQga25vd25IZWxwZXJzT25s
eSwgYnV0IHVzZWQgdGhlIHVua25vd24gaGVscGVyICcgKyBuYW1lLCBzZXhwcik7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgcGF0aC5zdHJpY3QgPSB0cnVlOworICAgICAgICAgIHBhdGgu
ZmFsc3kgPSB0cnVlOworCisgICAgICAgICAgdGhpcy5hY2NlcHQocGF0aCk7CisgICAgICAgICAg
dGhpcy5vcGNvZGUoJ2ludm9rZUhlbHBlcicsIHBhcmFtcy5sZW5ndGgsIHBhdGgub3JpZ2luYWws
IF9hc3QyWydkZWZhdWx0J10uaGVscGVycy5zaW1wbGVJZChwYXRoKSk7CisgICAgICAgIH0KKyAg
ICAgIH0sCisKKyAgICAgIFBhdGhFeHByZXNzaW9uOiBmdW5jdGlvbiBQYXRoRXhwcmVzc2lvbihw
YXRoKSB7CisgICAgICAgIHRoaXMuYWRkRGVwdGgocGF0aC5kZXB0aCk7CisgICAgICAgIHRoaXMu
b3Bjb2RlKCdnZXRDb250ZXh0JywgcGF0aC5kZXB0aCk7CisKKyAgICAgICAgdmFyIG5hbWUgPSBw
YXRoLnBhcnRzWzBdLAorICAgICAgICAgICAgc2NvcGVkID0gX2FzdDJbJ2RlZmF1bHQnXS5oZWxw
ZXJzLnNjb3BlZElkKHBhdGgpLAorICAgICAgICAgICAgYmxvY2tQYXJhbUlkID0gIXBhdGguZGVw
dGggJiYgIXNjb3BlZCAmJiB0aGlzLmJsb2NrUGFyYW1JbmRleChuYW1lKTsKKworICAgICAgICBp
ZiAoYmxvY2tQYXJhbUlkKSB7CisgICAgICAgICAgdGhpcy5vcGNvZGUoJ2xvb2t1cEJsb2NrUGFy
YW0nLCBibG9ja1BhcmFtSWQsIHBhdGgucGFydHMpOworICAgICAgICB9IGVsc2UgaWYgKCFuYW1l
KSB7CisgICAgICAgICAgLy8gQ29udGV4dCByZWZlcmVuY2UsIGkuZS4gYHt7Zm9vIC59fWAgb3Ig
YHt7Zm9vIC4ufX1gCisgICAgICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hDb250ZXh0Jyk7CisgICAg
ICAgIH0gZWxzZSBpZiAocGF0aC5kYXRhKSB7CisgICAgICAgICAgdGhpcy5vcHRpb25zLmRhdGEg
PSB0cnVlOworICAgICAgICAgIHRoaXMub3Bjb2RlKCdsb29rdXBEYXRhJywgcGF0aC5kZXB0aCwg
cGF0aC5wYXJ0cywgcGF0aC5zdHJpY3QpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHRo
aXMub3Bjb2RlKCdsb29rdXBPbkNvbnRleHQnLCBwYXRoLnBhcnRzLCBwYXRoLmZhbHN5LCBwYXRo
LnN0cmljdCwgc2NvcGVkKTsKKyAgICAgICAgfQorICAgICAgfSwKKworICAgICAgU3RyaW5nTGl0
ZXJhbDogZnVuY3Rpb24gU3RyaW5nTGl0ZXJhbChzdHJpbmcpIHsKKyAgICAgICAgdGhpcy5vcGNv
ZGUoJ3B1c2hTdHJpbmcnLCBzdHJpbmcudmFsdWUpOworICAgICAgfSwKKworICAgICAgTnVtYmVy
TGl0ZXJhbDogZnVuY3Rpb24gTnVtYmVyTGl0ZXJhbChudW1iZXIpIHsKKyAgICAgICAgdGhpcy5v
cGNvZGUoJ3B1c2hMaXRlcmFsJywgbnVtYmVyLnZhbHVlKTsKKyAgICAgIH0sCisKKyAgICAgIEJv
b2xlYW5MaXRlcmFsOiBmdW5jdGlvbiBCb29sZWFuTGl0ZXJhbChib29sKSB7CisgICAgICAgIHRo
aXMub3Bjb2RlKCdwdXNoTGl0ZXJhbCcsIGJvb2wudmFsdWUpOworICAgICAgfSwKKworICAgICAg
VW5kZWZpbmVkTGl0ZXJhbDogZnVuY3Rpb24gVW5kZWZpbmVkTGl0ZXJhbCgpIHsKKyAgICAgICAg
dGhpcy5vcGNvZGUoJ3B1c2hMaXRlcmFsJywgJ3VuZGVmaW5lZCcpOworICAgICAgfSwKKworICAg
ICAgTnVsbExpdGVyYWw6IGZ1bmN0aW9uIE51bGxMaXRlcmFsKCkgeworICAgICAgICB0aGlzLm9w
Y29kZSgncHVzaExpdGVyYWwnLCAnbnVsbCcpOworICAgICAgfSwKKworICAgICAgSGFzaDogZnVu
Y3Rpb24gSGFzaChoYXNoKSB7CisgICAgICAgIHZhciBwYWlycyA9IGhhc2gucGFpcnMsCisgICAg
ICAgICAgICBpID0gMCwKKyAgICAgICAgICAgIGwgPSBwYWlycy5sZW5ndGg7CisKKyAgICAgICAg
dGhpcy5vcGNvZGUoJ3B1c2hIYXNoJyk7CisKKyAgICAgICAgZm9yICg7IGkgPCBsOyBpKyspIHsK
KyAgICAgICAgICB0aGlzLnB1c2hQYXJhbShwYWlyc1tpXS52YWx1ZSk7CisgICAgICAgIH0KKyAg
ICAgICAgd2hpbGUgKGktLSkgeworICAgICAgICAgIHRoaXMub3Bjb2RlKCdhc3NpZ25Ub0hhc2gn
LCBwYWlyc1tpXS5rZXkpOworICAgICAgICB9CisgICAgICAgIHRoaXMub3Bjb2RlKCdwb3BIYXNo
Jyk7CisgICAgICB9LAorCisgICAgICAvLyBIRUxQRVJTCisgICAgICBvcGNvZGU6IGZ1bmN0aW9u
IG9wY29kZShuYW1lKSB7CisgICAgICAgIHRoaXMub3Bjb2Rlcy5wdXNoKHsgb3Bjb2RlOiBuYW1l
LCBhcmdzOiBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSksIGxvYzogdGhpcy5zb3VyY2VOb2RlWzBd
LmxvYyB9KTsKKyAgICAgIH0sCisKKyAgICAgIGFkZERlcHRoOiBmdW5jdGlvbiBhZGREZXB0aChk
ZXB0aCkgeworICAgICAgICBpZiAoIWRlcHRoKSB7CisgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgdGhpcy51c2VEZXB0aHMgPSB0cnVlOworICAgICAgfSwKKworICAgICAg
Y2xhc3NpZnlTZXhwcjogZnVuY3Rpb24gY2xhc3NpZnlTZXhwcihzZXhwcikgeworICAgICAgICB2
YXIgaXNTaW1wbGUgPSBfYXN0MlsnZGVmYXVsdCddLmhlbHBlcnMuc2ltcGxlSWQoc2V4cHIucGF0
aCk7CisKKyAgICAgICAgdmFyIGlzQmxvY2tQYXJhbSA9IGlzU2ltcGxlICYmICEhdGhpcy5ibG9j
a1BhcmFtSW5kZXgoc2V4cHIucGF0aC5wYXJ0c1swXSk7CisKKyAgICAgICAgLy8gYSBtdXN0YWNo
ZSBpcyBhbiBlbGlnaWJsZSBoZWxwZXIgaWY6CisgICAgICAgIC8vICogaXRzIGlkIGlzIHNpbXBs
ZSAoYSBzaW5nbGUgcGFydCwgbm90IGB0aGlzYCBvciBgLi5gKQorICAgICAgICB2YXIgaXNIZWxw
ZXIgPSAhaXNCbG9ja1BhcmFtICYmIF9hc3QyWydkZWZhdWx0J10uaGVscGVycy5oZWxwZXJFeHBy
ZXNzaW9uKHNleHByKTsKKworICAgICAgICAvLyBpZiBhIG11c3RhY2hlIGlzIGFuIGVsaWdpYmxl
IGhlbHBlciBidXQgbm90IGEgZGVmaW5pdGUKKyAgICAgICAgLy8gaGVscGVyLCBpdCBpcyBhbWJp
Z3VvdXMsIGFuZCB3aWxsIGJlIHJlc29sdmVkIGluIGEgbGF0ZXIKKyAgICAgICAgLy8gcGFzcyBv
ciBhdCBydW50aW1lLgorICAgICAgICB2YXIgaXNFbGlnaWJsZSA9ICFpc0Jsb2NrUGFyYW0gJiYg
KGlzSGVscGVyIHx8IGlzU2ltcGxlKTsKKworICAgICAgICAvLyBpZiBhbWJpZ3VvdXMsIHdlIGNh
biBwb3NzaWJseSByZXNvbHZlIHRoZSBhbWJpZ3VpdHkgbm93CisgICAgICAgIC8vIEFuIGVsaWdp
YmxlIGhlbHBlciBpcyBvbmUgdGhhdCBkb2VzIG5vdCBoYXZlIGEgY29tcGxleCBwYXRoLCBpLmUu
IGB0aGlzLmZvb2AsIGAuLi9mb29gIGV0Yy4KKyAgICAgICAgaWYgKGlzRWxpZ2libGUgJiYgIWlz
SGVscGVyKSB7CisgICAgICAgICAgdmFyIF9uYW1lMiA9IHNleHByLnBhdGgucGFydHNbMF0sCisg
ICAgICAgICAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7CisKKyAgICAgICAgICBpZiAob3B0
aW9ucy5rbm93bkhlbHBlcnNbX25hbWUyXSkgeworICAgICAgICAgICAgaXNIZWxwZXIgPSB0cnVl
OworICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5rbm93bkhlbHBlcnNPbmx5KSB7CisgICAg
ICAgICAgICBpc0VsaWdpYmxlID0gZmFsc2U7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGlzSGVscGVyKSB7CisgICAgICAgICAgcmV0dXJuICdoZWxwZXInOworICAgICAg
ICB9IGVsc2UgaWYgKGlzRWxpZ2libGUpIHsKKyAgICAgICAgICByZXR1cm4gJ2FtYmlndW91cyc7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcmV0dXJuICdzaW1wbGUnOworICAgICAgICB9
CisgICAgICB9LAorCisgICAgICBwdXNoUGFyYW1zOiBmdW5jdGlvbiBwdXNoUGFyYW1zKHBhcmFt
cykgeworICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHBhcmFtcy5sZW5ndGg7IGkgPCBsOyBp
KyspIHsKKyAgICAgICAgICB0aGlzLnB1c2hQYXJhbShwYXJhbXNbaV0pOworICAgICAgICB9Cisg
ICAgICB9LAorCisgICAgICBwdXNoUGFyYW06IGZ1bmN0aW9uIHB1c2hQYXJhbSh2YWwpIHsKKyAg
ICAgICAgdmFyIHZhbHVlID0gdmFsLnZhbHVlICE9IG51bGwgPyB2YWwudmFsdWUgOiB2YWwub3Jp
Z2luYWwgfHwgJyc7CisKKyAgICAgICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7CisgICAgICAg
ICAgaWYgKHZhbHVlLnJlcGxhY2UpIHsKKyAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFj
ZSgvXihcLj9cLlwvKSovZywgJycpLnJlcGxhY2UoL1wvL2csICcuJyk7CisgICAgICAgICAgfQor
CisgICAgICAgICAgaWYgKHZhbC5kZXB0aCkgeworICAgICAgICAgICAgdGhpcy5hZGREZXB0aCh2
YWwuZGVwdGgpOworICAgICAgICAgIH0KKyAgICAgICAgICB0aGlzLm9wY29kZSgnZ2V0Q29udGV4
dCcsIHZhbC5kZXB0aCB8fCAwKTsKKyAgICAgICAgICB0aGlzLm9wY29kZSgncHVzaFN0cmluZ1Bh
cmFtJywgdmFsdWUsIHZhbC50eXBlKTsKKworICAgICAgICAgIGlmICh2YWwudHlwZSA9PT0gJ1N1
YkV4cHJlc3Npb24nKSB7CisgICAgICAgICAgICAvLyBTdWJFeHByZXNzaW9ucyBnZXQgZXZhbHVh
dGVkIGFuZCBwYXNzZWQgaW4KKyAgICAgICAgICAgIC8vIGluIHN0cmluZyBwYXJhbXMgbW9kZS4K
KyAgICAgICAgICAgIHRoaXMuYWNjZXB0KHZhbCk7CisgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgeworICAgICAgICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7CisgICAgICAgICAgICB2YXIgYmxv
Y2tQYXJhbUluZGV4ID0gdW5kZWZpbmVkOworICAgICAgICAgICAgaWYgKHZhbC5wYXJ0cyAmJiAh
X2FzdDJbJ2RlZmF1bHQnXS5oZWxwZXJzLnNjb3BlZElkKHZhbCkgJiYgIXZhbC5kZXB0aCkgewor
ICAgICAgICAgICAgICBibG9ja1BhcmFtSW5kZXggPSB0aGlzLmJsb2NrUGFyYW1JbmRleCh2YWwu
cGFydHNbMF0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGJsb2NrUGFyYW1JbmRl
eCkgeworICAgICAgICAgICAgICB2YXIgYmxvY2tQYXJhbUNoaWxkID0gdmFsLnBhcnRzLnNsaWNl
KDEpLmpvaW4oJy4nKTsKKyAgICAgICAgICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hJZCcsICdCbG9j
a1BhcmFtJywgYmxvY2tQYXJhbUluZGV4LCBibG9ja1BhcmFtQ2hpbGQpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgdmFsdWUgPSB2YWwub3JpZ2luYWwgfHwgdmFsdWU7Cisg
ICAgICAgICAgICAgIGlmICh2YWx1ZS5yZXBsYWNlKSB7CisgICAgICAgICAgICAgICAgdmFsdWUg
PSB2YWx1ZS5yZXBsYWNlKC9edGhpcyg/OlwufCQpLywgJycpLnJlcGxhY2UoL15cLlwvLywgJycp
LnJlcGxhY2UoL15cLiQvLCAnJyk7CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICB0
aGlzLm9wY29kZSgncHVzaElkJywgdmFsLnR5cGUsIHZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICB9CisgICAgICAgICAgdGhpcy5hY2NlcHQodmFsKTsKKyAgICAgICAgfQorICAgICAg
fSwKKworICAgICAgc2V0dXBGdWxsTXVzdGFjaGVQYXJhbXM6IGZ1bmN0aW9uIHNldHVwRnVsbE11
c3RhY2hlUGFyYW1zKHNleHByLCBwcm9ncmFtLCBpbnZlcnNlLCBvbWl0RW1wdHkpIHsKKyAgICAg
ICAgdmFyIHBhcmFtcyA9IHNleHByLnBhcmFtczsKKyAgICAgICAgdGhpcy5wdXNoUGFyYW1zKHBh
cmFtcyk7CisKKyAgICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hQcm9ncmFtJywgcHJvZ3JhbSk7Cisg
ICAgICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIGludmVyc2UpOworCisgICAgICAgIGlm
IChzZXhwci5oYXNoKSB7CisgICAgICAgICAgdGhpcy5hY2NlcHQoc2V4cHIuaGFzaCk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgdGhpcy5vcGNvZGUoJ2VtcHR5SGFzaCcsIG9taXRFbXB0
eSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcGFyYW1zOworICAgICAgfSwKKworICAg
ICAgYmxvY2tQYXJhbUluZGV4OiBmdW5jdGlvbiBibG9ja1BhcmFtSW5kZXgobmFtZSkgeworICAg
ICAgICBmb3IgKHZhciBkZXB0aCA9IDAsIGxlbiA9IHRoaXMub3B0aW9ucy5ibG9ja1BhcmFtcy5s
ZW5ndGg7IGRlcHRoIDwgbGVuOyBkZXB0aCsrKSB7CisgICAgICAgICAgdmFyIGJsb2NrUGFyYW1z
ID0gdGhpcy5vcHRpb25zLmJsb2NrUGFyYW1zW2RlcHRoXSwKKyAgICAgICAgICAgICAgcGFyYW0g
PSBibG9ja1BhcmFtcyAmJiBfdXRpbHMuaW5kZXhPZihibG9ja1BhcmFtcywgbmFtZSk7CisgICAg
ICAgICAgaWYgKGJsb2NrUGFyYW1zICYmIHBhcmFtID49IDApIHsKKyAgICAgICAgICAgIHJldHVy
biBbZGVwdGgsIHBhcmFtXTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9
OworCisgICAgZnVuY3Rpb24gcHJlY29tcGlsZShpbnB1dCwgb3B0aW9ucywgZW52KSB7CisgICAg
ICBpZiAoaW5wdXQgPT0gbnVsbCB8fCB0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnICYmIGlucHV0
LnR5cGUgIT09ICdQcm9ncmFtJykgeworICAgICAgICB0aHJvdyBuZXcgX2V4Y2VwdGlvbjJbJ2Rl
ZmF1bHQnXSgnWW91IG11c3QgcGFzcyBhIHN0cmluZyBvciBIYW5kbGViYXJzIEFTVCB0byBIYW5k
bGViYXJzLnByZWNvbXBpbGUuIFlvdSBwYXNzZWQgJyArIGlucHV0KTsKKyAgICAgIH0KKworICAg
ICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CisgICAgICBpZiAoISgnZGF0YScgaW4gb3B0aW9u
cykpIHsKKyAgICAgICAgb3B0aW9ucy5kYXRhID0gdHJ1ZTsKKyAgICAgIH0KKyAgICAgIGlmIChv
cHRpb25zLmNvbXBhdCkgeworICAgICAgICBvcHRpb25zLnVzZURlcHRocyA9IHRydWU7CisgICAg
ICB9CisKKyAgICAgIHZhciBhc3QgPSBlbnYucGFyc2UoaW5wdXQsIG9wdGlvbnMpLAorICAgICAg
ICAgIGVudmlyb25tZW50ID0gbmV3IGVudi5Db21waWxlcigpLmNvbXBpbGUoYXN0LCBvcHRpb25z
KTsKKyAgICAgIHJldHVybiBuZXcgZW52LkphdmFTY3JpcHRDb21waWxlcigpLmNvbXBpbGUoZW52
aXJvbm1lbnQsIG9wdGlvbnMpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNvbXBpbGUoaW5wdXQs
IG9wdGlvbnMsIGVudikgeworICAgICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkgb3B0aW9u
cyA9IHt9OworCisgICAgICBpZiAoaW5wdXQgPT0gbnVsbCB8fCB0eXBlb2YgaW5wdXQgIT09ICdz
dHJpbmcnICYmIGlucHV0LnR5cGUgIT09ICdQcm9ncmFtJykgeworICAgICAgICB0aHJvdyBuZXcg
X2V4Y2VwdGlvbjJbJ2RlZmF1bHQnXSgnWW91IG11c3QgcGFzcyBhIHN0cmluZyBvciBIYW5kbGVi
YXJzIEFTVCB0byBIYW5kbGViYXJzLmNvbXBpbGUuIFlvdSBwYXNzZWQgJyArIGlucHV0KTsKKyAg
ICAgIH0KKworICAgICAgaWYgKCEoJ2RhdGEnIGluIG9wdGlvbnMpKSB7CisgICAgICAgIG9wdGlv
bnMuZGF0YSA9IHRydWU7CisgICAgICB9CisgICAgICBpZiAob3B0aW9ucy5jb21wYXQpIHsKKyAg
ICAgICAgb3B0aW9ucy51c2VEZXB0aHMgPSB0cnVlOworICAgICAgfQorCisgICAgICB2YXIgY29t
cGlsZWQgPSB1bmRlZmluZWQ7CisKKyAgICAgIGZ1bmN0aW9uIGNvbXBpbGVJbnB1dCgpIHsKKyAg
ICAgICAgdmFyIGFzdCA9IGVudi5wYXJzZShpbnB1dCwgb3B0aW9ucyksCisgICAgICAgICAgICBl
bnZpcm9ubWVudCA9IG5ldyBlbnYuQ29tcGlsZXIoKS5jb21waWxlKGFzdCwgb3B0aW9ucyksCisg
ICAgICAgICAgICB0ZW1wbGF0ZVNwZWMgPSBuZXcgZW52LkphdmFTY3JpcHRDb21waWxlcigpLmNv
bXBpbGUoZW52aXJvbm1lbnQsIG9wdGlvbnMsIHVuZGVmaW5lZCwgdHJ1ZSk7CisgICAgICAgIHJl
dHVybiBlbnYudGVtcGxhdGUodGVtcGxhdGVTcGVjKTsKKyAgICAgIH0KKworICAgICAgLy8gVGVt
cGxhdGUgaXMgb25seSBjb21waWxlZCBvbiBmaXJzdCB1c2UgYW5kIGNhY2hlZCBhZnRlciB0aGF0
IHBvaW50LgorICAgICAgZnVuY3Rpb24gcmV0KGNvbnRleHQsIGV4ZWNPcHRpb25zKSB7CisgICAg
ICAgIGlmICghY29tcGlsZWQpIHsKKyAgICAgICAgICBjb21waWxlZCA9IGNvbXBpbGVJbnB1dCgp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBjb21waWxlZC5jYWxsKHRoaXMsIGNvbnRleHQs
IGV4ZWNPcHRpb25zKTsKKyAgICAgIH0KKyAgICAgIHJldC5fc2V0dXAgPSBmdW5jdGlvbiAoc2V0
dXBPcHRpb25zKSB7CisgICAgICAgIGlmICghY29tcGlsZWQpIHsKKyAgICAgICAgICBjb21waWxl
ZCA9IGNvbXBpbGVJbnB1dCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBjb21waWxlZC5f
c2V0dXAoc2V0dXBPcHRpb25zKTsKKyAgICAgIH07CisgICAgICByZXQuX2NoaWxkID0gZnVuY3Rp
b24gKGksIGRhdGEsIGJsb2NrUGFyYW1zLCBkZXB0aHMpIHsKKyAgICAgICAgaWYgKCFjb21waWxl
ZCkgeworICAgICAgICAgIGNvbXBpbGVkID0gY29tcGlsZUlucHV0KCk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIGNvbXBpbGVkLl9jaGlsZChpLCBkYXRhLCBibG9ja1BhcmFtcywgZGVwdGhz
KTsKKyAgICAgIH07CisgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIGZ1bmN0aW9uIGFy
Z0VxdWFscyhhLCBiKSB7CisgICAgICBpZiAoYSA9PT0gYikgeworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgIH0KKworICAgICAgaWYgKF91dGlscy5pc0FycmF5KGEpICYmIF91dGlscy5pc0Fy
cmF5KGIpICYmIGEubGVuZ3RoID09PSBiLmxlbmd0aCkgeworICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGEubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICBpZiAoIWFyZ0VxdWFscyhhW2ldLCBi
W2ldKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiB0
cmFuc2Zvcm1MaXRlcmFsVG9QYXRoKHNleHByKSB7CisgICAgICBpZiAoIXNleHByLnBhdGgucGFy
dHMpIHsKKyAgICAgICAgdmFyIGxpdGVyYWwgPSBzZXhwci5wYXRoOworICAgICAgICAvLyBDYXN0
aW5nIHRvIHN0cmluZyBoZXJlIHRvIG1ha2UgZmFsc2UgYW5kIDAgbGl0ZXJhbCB2YWx1ZXMgcGxh
eSBuaWNlbHkgd2l0aCB0aGUgcmVzdAorICAgICAgICAvLyBvZiB0aGUgc3lzdGVtLgorICAgICAg
ICBzZXhwci5wYXRoID0geworICAgICAgICAgIHR5cGU6ICdQYXRoRXhwcmVzc2lvbicsCisgICAg
ICAgICAgZGF0YTogZmFsc2UsCisgICAgICAgICAgZGVwdGg6IDAsCisgICAgICAgICAgcGFydHM6
IFtsaXRlcmFsLm9yaWdpbmFsICsgJyddLAorICAgICAgICAgIG9yaWdpbmFsOiBsaXRlcmFsLm9y
aWdpbmFsICsgJycsCisgICAgICAgICAgbG9jOiBsaXRlcmFsLmxvYworICAgICAgICB9OworICAg
ICAgfQorICAgIH0KKworLyoqKi8gfSwKKy8qIDMxICovCisvKioqLyBmdW5jdGlvbihtb2R1bGUs
IGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHsKKworICAgICd1c2Ugc3RyaWN0JzsKKwor
ICAgIHZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKVsn
ZGVmYXVsdCddOworCisgICAgZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTsKKworICAgIHZhciBf
YmFzZSA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7CisKKyAgICB2YXIgX2V4Y2VwdGlvbiA9IF9f
d2VicGFja19yZXF1aXJlX18oNik7CisKKyAgICB2YXIgX2V4Y2VwdGlvbjIgPSBfaW50ZXJvcFJl
cXVpcmVEZWZhdWx0KF9leGNlcHRpb24pOworCisgICAgdmFyIF91dGlscyA9IF9fd2VicGFja19y
ZXF1aXJlX18oNSk7CisKKyAgICB2YXIgX2NvZGVHZW4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMy
KTsKKworICAgIHZhciBfY29kZUdlbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jb2RlR2Vu
KTsKKworICAgIGZ1bmN0aW9uIExpdGVyYWwodmFsdWUpIHsKKyAgICAgIHRoaXMudmFsdWUgPSB2
YWx1ZTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBKYXZhU2NyaXB0Q29tcGlsZXIoKSB7fQorCisg
ICAgSmF2YVNjcmlwdENvbXBpbGVyLnByb3RvdHlwZSA9IHsKKyAgICAgIC8vIFBVQkxJQyBBUEk6
IFlvdSBjYW4gb3ZlcnJpZGUgdGhlc2UgbWV0aG9kcyBpbiBhIHN1YmNsYXNzIHRvIHByb3ZpZGUK
KyAgICAgIC8vIGFsdGVybmF0aXZlIGNvbXBpbGVkIGZvcm1zIGZvciBuYW1lIGxvb2t1cCBhbmQg
YnVmZmVyaW5nIHNlbWFudGljcworICAgICAgbmFtZUxvb2t1cDogZnVuY3Rpb24gbmFtZUxvb2t1
cChwYXJlbnQsIG5hbWUgLyogLCB0eXBlKi8pIHsKKyAgICAgICAgaWYgKEphdmFTY3JpcHRDb21w
aWxlci5pc1ZhbGlkSmF2YVNjcmlwdFZhcmlhYmxlTmFtZShuYW1lKSkgeworICAgICAgICAgIHJl
dHVybiBbcGFyZW50LCAnLicsIG5hbWVdOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHJl
dHVybiBbcGFyZW50LCAnWycsIEpTT04uc3RyaW5naWZ5KG5hbWUpLCAnXSddOworICAgICAgICB9
CisgICAgICB9LAorICAgICAgZGVwdGhlZExvb2t1cDogZnVuY3Rpb24gZGVwdGhlZExvb2t1cChu
YW1lKSB7CisgICAgICAgIHJldHVybiBbdGhpcy5hbGlhc2FibGUoJ2NvbnRhaW5lci5sb29rdXAn
KSwgJyhkZXB0aHMsICInLCBuYW1lLCAnIiknXTsKKyAgICAgIH0sCisKKyAgICAgIGNvbXBpbGVy
SW5mbzogZnVuY3Rpb24gY29tcGlsZXJJbmZvKCkgeworICAgICAgICB2YXIgcmV2aXNpb24gPSBf
YmFzZS5DT01QSUxFUl9SRVZJU0lPTiwKKyAgICAgICAgICAgIHZlcnNpb25zID0gX2Jhc2UuUkVW
SVNJT05fQ0hBTkdFU1tyZXZpc2lvbl07CisgICAgICAgIHJldHVybiBbcmV2aXNpb24sIHZlcnNp
b25zXTsKKyAgICAgIH0sCisKKyAgICAgIGFwcGVuZFRvQnVmZmVyOiBmdW5jdGlvbiBhcHBlbmRU
b0J1ZmZlcihzb3VyY2UsIGxvY2F0aW9uLCBleHBsaWNpdCkgeworICAgICAgICAvLyBGb3JjZSBh
IHNvdXJjZSBhcyB0aGlzIHNpbXBsaWZpZXMgdGhlIG1lcmdlIGxvZ2ljLgorICAgICAgICBpZiAo
IV91dGlscy5pc0FycmF5KHNvdXJjZSkpIHsKKyAgICAgICAgICBzb3VyY2UgPSBbc291cmNlXTsK
KyAgICAgICAgfQorICAgICAgICBzb3VyY2UgPSB0aGlzLnNvdXJjZS53cmFwKHNvdXJjZSwgbG9j
YXRpb24pOworCisgICAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LmlzU2ltcGxlKSB7CisgICAg
ICAgICAgcmV0dXJuIFsncmV0dXJuICcsIHNvdXJjZSwgJzsnXTsKKyAgICAgICAgfSBlbHNlIGlm
IChleHBsaWNpdCkgeworICAgICAgICAgIC8vIFRoaXMgaXMgYSBjYXNlIHdoZXJlIHRoZSBidWZm
ZXIgb3BlcmF0aW9uIG9jY3VycyBhcyBhIGNoaWxkIG9mIGFub3RoZXIKKyAgICAgICAgICAvLyBj
b25zdHJ1Y3QsIGdlbmVyYWxseSBicmFjZXMuIFdlIGhhdmUgdG8gZXhwbGljaXRseSBvdXRwdXQg
dGhlc2UgYnVmZmVyCisgICAgICAgICAgLy8gb3BlcmF0aW9ucyB0byBlbnN1cmUgdGhhdCB0aGUg
ZW1pdHRlZCBjb2RlIGdvZXMgaW4gdGhlIGNvcnJlY3QgbG9jYXRpb24uCisgICAgICAgICAgcmV0
dXJuIFsnYnVmZmVyICs9ICcsIHNvdXJjZSwgJzsnXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICBzb3VyY2UuYXBwZW5kVG9CdWZmZXIgPSB0cnVlOworICAgICAgICAgIHJldHVybiBzb3Vy
Y2U7CisgICAgICAgIH0KKyAgICAgIH0sCisKKyAgICAgIGluaXRpYWxpemVCdWZmZXI6IGZ1bmN0
aW9uIGluaXRpYWxpemVCdWZmZXIoKSB7CisgICAgICAgIHJldHVybiB0aGlzLnF1b3RlZFN0cmlu
ZygnJyk7CisgICAgICB9LAorICAgICAgLy8gRU5EIFBVQkxJQyBBUEkKKworICAgICAgY29tcGls
ZTogZnVuY3Rpb24gY29tcGlsZShlbnZpcm9ubWVudCwgb3B0aW9ucywgY29udGV4dCwgYXNPYmpl
Y3QpIHsKKyAgICAgICAgdGhpcy5lbnZpcm9ubWVudCA9IGVudmlyb25tZW50OworICAgICAgICB0
aGlzLm9wdGlvbnMgPSBvcHRpb25zOworICAgICAgICB0aGlzLnN0cmluZ1BhcmFtcyA9IHRoaXMu
b3B0aW9ucy5zdHJpbmdQYXJhbXM7CisgICAgICAgIHRoaXMudHJhY2tJZHMgPSB0aGlzLm9wdGlv
bnMudHJhY2tJZHM7CisgICAgICAgIHRoaXMucHJlY29tcGlsZSA9ICFhc09iamVjdDsKKworICAg
ICAgICB0aGlzLm5hbWUgPSB0aGlzLmVudmlyb25tZW50Lm5hbWU7CisgICAgICAgIHRoaXMuaXND
aGlsZCA9ICEhY29udGV4dDsKKyAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dCB8fCB7Cisg
ICAgICAgICAgZGVjb3JhdG9yczogW10sCisgICAgICAgICAgcHJvZ3JhbXM6IFtdLAorICAgICAg
ICAgIGVudmlyb25tZW50czogW10KKyAgICAgICAgfTsKKworICAgICAgICB0aGlzLnByZWFtYmxl
KCk7CisKKyAgICAgICAgdGhpcy5zdGFja1Nsb3QgPSAwOworICAgICAgICB0aGlzLnN0YWNrVmFy
cyA9IFtdOworICAgICAgICB0aGlzLmFsaWFzZXMgPSB7fTsKKyAgICAgICAgdGhpcy5yZWdpc3Rl
cnMgPSB7IGxpc3Q6IFtdIH07CisgICAgICAgIHRoaXMuaGFzaGVzID0gW107CisgICAgICAgIHRo
aXMuY29tcGlsZVN0YWNrID0gW107CisgICAgICAgIHRoaXMuaW5saW5lU3RhY2sgPSBbXTsKKyAg
ICAgICAgdGhpcy5ibG9ja1BhcmFtcyA9IFtdOworCisgICAgICAgIHRoaXMuY29tcGlsZUNoaWxk
cmVuKGVudmlyb25tZW50LCBvcHRpb25zKTsKKworICAgICAgICB0aGlzLnVzZURlcHRocyA9IHRo
aXMudXNlRGVwdGhzIHx8IGVudmlyb25tZW50LnVzZURlcHRocyB8fCBlbnZpcm9ubWVudC51c2VE
ZWNvcmF0b3JzIHx8IHRoaXMub3B0aW9ucy5jb21wYXQ7CisgICAgICAgIHRoaXMudXNlQmxvY2tQ
YXJhbXMgPSB0aGlzLnVzZUJsb2NrUGFyYW1zIHx8IGVudmlyb25tZW50LnVzZUJsb2NrUGFyYW1z
OworCisgICAgICAgIHZhciBvcGNvZGVzID0gZW52aXJvbm1lbnQub3Bjb2RlcywKKyAgICAgICAg
ICAgIG9wY29kZSA9IHVuZGVmaW5lZCwKKyAgICAgICAgICAgIGZpcnN0TG9jID0gdW5kZWZpbmVk
LAorICAgICAgICAgICAgaSA9IHVuZGVmaW5lZCwKKyAgICAgICAgICAgIGwgPSB1bmRlZmluZWQ7
CisKKyAgICAgICAgZm9yIChpID0gMCwgbCA9IG9wY29kZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7
CisgICAgICAgICAgb3Bjb2RlID0gb3Bjb2Rlc1tpXTsKKworICAgICAgICAgIHRoaXMuc291cmNl
LmN1cnJlbnRMb2NhdGlvbiA9IG9wY29kZS5sb2M7CisgICAgICAgICAgZmlyc3RMb2MgPSBmaXJz
dExvYyB8fCBvcGNvZGUubG9jOworICAgICAgICAgIHRoaXNbb3Bjb2RlLm9wY29kZV0uYXBwbHko
dGhpcywgb3Bjb2RlLmFyZ3MpOworICAgICAgICB9CisKKyAgICAgICAgLy8gRmx1c2ggYW55IHRy
YWlsaW5nIGNvbnRlbnQgdGhhdCBtaWdodCBiZSBwZW5kaW5nLgorICAgICAgICB0aGlzLnNvdXJj
ZS5jdXJyZW50TG9jYXRpb24gPSBmaXJzdExvYzsKKyAgICAgICAgdGhpcy5wdXNoU291cmNlKCcn
KTsKKworICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLworICAgICAgICBpZiAodGhp
cy5zdGFja1Nsb3QgfHwgdGhpcy5pbmxpbmVTdGFjay5sZW5ndGggfHwgdGhpcy5jb21waWxlU3Rh
Y2subGVuZ3RoKSB7CisgICAgICAgICAgdGhyb3cgbmV3IF9leGNlcHRpb24yWydkZWZhdWx0J10o
J0NvbXBpbGUgY29tcGxldGVkIHdpdGggY29udGVudCBsZWZ0IG9uIHN0YWNrJyk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoIXRoaXMuZGVjb3JhdG9ycy5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ICB0aGlzLnVzZURlY29yYXRvcnMgPSB0cnVlOworCisgICAgICAgICAgdGhpcy5kZWNvcmF0b3Jz
LnByZXBlbmQoJ3ZhciBkZWNvcmF0b3JzID0gY29udGFpbmVyLmRlY29yYXRvcnM7XG4nKTsKKyAg
ICAgICAgICB0aGlzLmRlY29yYXRvcnMucHVzaCgncmV0dXJuIGZuOycpOworCisgICAgICAgICAg
aWYgKGFzT2JqZWN0KSB7CisgICAgICAgICAgICB0aGlzLmRlY29yYXRvcnMgPSBGdW5jdGlvbi5h
cHBseSh0aGlzLCBbJ2ZuJywgJ3Byb3BzJywgJ2NvbnRhaW5lcicsICdkZXB0aDAnLCAnZGF0YScs
ICdibG9ja1BhcmFtcycsICdkZXB0aHMnLCB0aGlzLmRlY29yYXRvcnMubWVyZ2UoKV0pOworICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLmRlY29yYXRvcnMucHJlcGVuZCgnZnVu
Y3Rpb24oZm4sIHByb3BzLCBjb250YWluZXIsIGRlcHRoMCwgZGF0YSwgYmxvY2tQYXJhbXMsIGRl
cHRocykge1xuJyk7CisgICAgICAgICAgICB0aGlzLmRlY29yYXRvcnMucHVzaCgnfVxuJyk7Cisg
ICAgICAgICAgICB0aGlzLmRlY29yYXRvcnMgPSB0aGlzLmRlY29yYXRvcnMubWVyZ2UoKTsKKyAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdGhpcy5kZWNvcmF0b3JzID0g
dW5kZWZpbmVkOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGZuID0gdGhpcy5jcmVhdGVGdW5j
dGlvbkNvbnRleHQoYXNPYmplY3QpOworICAgICAgICBpZiAoIXRoaXMuaXNDaGlsZCkgeworICAg
ICAgICAgIHZhciByZXQgPSB7CisgICAgICAgICAgICBjb21waWxlcjogdGhpcy5jb21waWxlcklu
Zm8oKSwKKyAgICAgICAgICAgIG1haW46IGZuCisgICAgICAgICAgfTsKKworICAgICAgICAgIGlm
ICh0aGlzLmRlY29yYXRvcnMpIHsKKyAgICAgICAgICAgIHJldC5tYWluX2QgPSB0aGlzLmRlY29y
YXRvcnM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY2FtZWxjYXNlCisgICAgICAgICAgICByZXQu
dXNlRGVjb3JhdG9ycyA9IHRydWU7CisgICAgICAgICAgfQorCisgICAgICAgICAgdmFyIF9jb250
ZXh0ID0gdGhpcy5jb250ZXh0OworICAgICAgICAgIHZhciBwcm9ncmFtcyA9IF9jb250ZXh0LnBy
b2dyYW1zOworICAgICAgICAgIHZhciBkZWNvcmF0b3JzID0gX2NvbnRleHQuZGVjb3JhdG9yczsK
KworICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBwcm9ncmFtcy5sZW5ndGg7IGkgPCBsOyBpKysp
IHsKKyAgICAgICAgICAgIGlmIChwcm9ncmFtc1tpXSkgeworICAgICAgICAgICAgICByZXRbaV0g
PSBwcm9ncmFtc1tpXTsKKyAgICAgICAgICAgICAgaWYgKGRlY29yYXRvcnNbaV0pIHsKKyAgICAg
ICAgICAgICAgICByZXRbaSArICdfZCddID0gZGVjb3JhdG9yc1tpXTsKKyAgICAgICAgICAgICAg
ICByZXQudXNlRGVjb3JhdG9ycyA9IHRydWU7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC51c2VQYXJ0
aWFsKSB7CisgICAgICAgICAgICByZXQudXNlUGFydGlhbCA9IHRydWU7CisgICAgICAgICAgfQor
ICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZGF0YSkgeworICAgICAgICAgICAgcmV0LnVzZURh
dGEgPSB0cnVlOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAodGhpcy51c2VEZXB0aHMpIHsK
KyAgICAgICAgICAgIHJldC51c2VEZXB0aHMgPSB0cnVlOworICAgICAgICAgIH0KKyAgICAgICAg
ICBpZiAodGhpcy51c2VCbG9ja1BhcmFtcykgeworICAgICAgICAgICAgcmV0LnVzZUJsb2NrUGFy
YW1zID0gdHJ1ZTsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb21w
YXQpIHsKKyAgICAgICAgICAgIHJldC5jb21wYXQgPSB0cnVlOworICAgICAgICAgIH0KKworICAg
ICAgICAgIGlmICghYXNPYmplY3QpIHsKKyAgICAgICAgICAgIHJldC5jb21waWxlciA9IEpTT04u
c3RyaW5naWZ5KHJldC5jb21waWxlcik7CisKKyAgICAgICAgICAgIHRoaXMuc291cmNlLmN1cnJl
bnRMb2NhdGlvbiA9IHsgc3RhcnQ6IHsgbGluZTogMSwgY29sdW1uOiAwIH0gfTsKKyAgICAgICAg
ICAgIHJldCA9IHRoaXMub2JqZWN0TGl0ZXJhbChyZXQpOworCisgICAgICAgICAgICBpZiAob3B0
aW9ucy5zcmNOYW1lKSB7CisgICAgICAgICAgICAgIHJldCA9IHJldC50b1N0cmluZ1dpdGhTb3Vy
Y2VNYXAoeyBmaWxlOiBvcHRpb25zLmRlc3ROYW1lIH0pOworICAgICAgICAgICAgICByZXQubWFw
ID0gcmV0Lm1hcCAmJiByZXQubWFwLnRvU3RyaW5nKCk7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICByZXQgPSByZXQudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0LmNvbXBpbGVyT3B0aW9ucyA9IHRoaXMub3B0
aW9uczsKKyAgICAgICAgICB9CisKKyAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgIHJldHVybiBmbjsKKyAgICAgICAgfQorICAgICAgfSwKKworICAgICAg
cHJlYW1ibGU6IGZ1bmN0aW9uIHByZWFtYmxlKCkgeworICAgICAgICAvLyB0cmFjayB0aGUgbGFz
dCBjb250ZXh0IHB1c2hlZCBpbnRvIHBsYWNlIHRvIGFsbG93IHNraXBwaW5nIHRoZQorICAgICAg
ICAvLyBnZXRDb250ZXh0IG9wY29kZSB3aGVuIGl0IHdvdWxkIGJlIGEgbm9vcAorICAgICAgICB0
aGlzLmxhc3RDb250ZXh0ID0gMDsKKyAgICAgICAgdGhpcy5zb3VyY2UgPSBuZXcgX2NvZGVHZW4y
WydkZWZhdWx0J10odGhpcy5vcHRpb25zLnNyY05hbWUpOworICAgICAgICB0aGlzLmRlY29yYXRv
cnMgPSBuZXcgX2NvZGVHZW4yWydkZWZhdWx0J10odGhpcy5vcHRpb25zLnNyY05hbWUpOworICAg
ICAgfSwKKworICAgICAgY3JlYXRlRnVuY3Rpb25Db250ZXh0OiBmdW5jdGlvbiBjcmVhdGVGdW5j
dGlvbkNvbnRleHQoYXNPYmplY3QpIHsKKyAgICAgICAgdmFyIHZhckRlY2xhcmF0aW9ucyA9ICcn
OworCisgICAgICAgIHZhciBsb2NhbHMgPSB0aGlzLnN0YWNrVmFycy5jb25jYXQodGhpcy5yZWdp
c3RlcnMubGlzdCk7CisgICAgICAgIGlmIChsb2NhbHMubGVuZ3RoID4gMCkgeworICAgICAgICAg
IHZhckRlY2xhcmF0aW9ucyArPSAnLCAnICsgbG9jYWxzLmpvaW4oJywgJyk7CisgICAgICAgIH0K
KworICAgICAgICAvLyBHZW5lcmF0ZSBtaW5pbWl6ZXIgYWxpYXMgbWFwcGluZ3MKKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gV2hlbiB1c2luZyB0cnVlIFNvdXJjZU5vZGVzLCB0aGlzIHdpbGwgdXBk
YXRlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBnaXZlbiBhbGlhcworICAgICAgICAvLyBhcyB0aGUg
c291cmNlIG5vZGVzIGFyZSByZXVzZWQgaW4gc2l0dS4gRm9yIHRoZSBub24tc291cmNlIG5vZGUg
Y29tcGlsYXRpb24gbW9kZSwKKyAgICAgICAgLy8gYWxpYXNlcyB3aWxsIG5vdCBiZSB1c2VkLCBi
dXQgdGhpcyBjYXNlIGlzIGFscmVhZHkgYmVpbmcgcnVuIG9uIHRoZSBjbGllbnQgYW5kCisgICAg
ICAgIC8vIHdlIGFyZW4ndCBjb25jZXJuIGFib3V0IG1pbmltaXppbmcgdGhlIHRlbXBsYXRlIHNp
emUuCisgICAgICAgIHZhciBhbGlhc0NvdW50ID0gMDsKKyAgICAgICAgZm9yICh2YXIgYWxpYXMg
aW4gdGhpcy5hbGlhc2VzKSB7CisgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBndWFy
ZC1mb3ItaW4KKyAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuYWxpYXNlc1thbGlhc107CisKKyAg
ICAgICAgICBpZiAodGhpcy5hbGlhc2VzLmhhc093blByb3BlcnR5KGFsaWFzKSAmJiBub2RlLmNo
aWxkcmVuICYmIG5vZGUucmVmZXJlbmNlQ291bnQgPiAxKSB7CisgICAgICAgICAgICB2YXJEZWNs
YXJhdGlvbnMgKz0gJywgYWxpYXMnICsgKythbGlhc0NvdW50ICsgJz0nICsgYWxpYXM7CisgICAg
ICAgICAgICBub2RlLmNoaWxkcmVuWzBdID0gJ2FsaWFzJyArIGFsaWFzQ291bnQ7CisgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgdmFyIHBhcmFtcyA9IFsnY29udGFpbmVyJywgJ2Rl
cHRoMCcsICdoZWxwZXJzJywgJ3BhcnRpYWxzJywgJ2RhdGEnXTsKKworICAgICAgICBpZiAodGhp
cy51c2VCbG9ja1BhcmFtcyB8fCB0aGlzLnVzZURlcHRocykgeworICAgICAgICAgIHBhcmFtcy5w
dXNoKCdibG9ja1BhcmFtcycpOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLnVzZURlcHRo
cykgeworICAgICAgICAgIHBhcmFtcy5wdXNoKCdkZXB0aHMnKTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIFBlcmZvcm0gYSBzZWNvbmQgcGFzcyBvdmVyIHRoZSBvdXRwdXQgdG8gbWVyZ2UgY29u
dGVudCB3aGVuIHBvc3NpYmxlCisgICAgICAgIHZhciBzb3VyY2UgPSB0aGlzLm1lcmdlU291cmNl
KHZhckRlY2xhcmF0aW9ucyk7CisKKyAgICAgICAgaWYgKGFzT2JqZWN0KSB7CisgICAgICAgICAg
cGFyYW1zLnB1c2goc291cmNlKTsKKworICAgICAgICAgIHJldHVybiBGdW5jdGlvbi5hcHBseSh0
aGlzLCBwYXJhbXMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHJldHVybiB0aGlzLnNv
dXJjZS53cmFwKFsnZnVuY3Rpb24oJywgcGFyYW1zLmpvaW4oJywnKSwgJykge1xuICAnLCBzb3Vy
Y2UsICd9J10pOworICAgICAgICB9CisgICAgICB9LAorICAgICAgbWVyZ2VTb3VyY2U6IGZ1bmN0
aW9uIG1lcmdlU291cmNlKHZhckRlY2xhcmF0aW9ucykgeworICAgICAgICB2YXIgaXNTaW1wbGUg
PSB0aGlzLmVudmlyb25tZW50LmlzU2ltcGxlLAorICAgICAgICAgICAgYXBwZW5kT25seSA9ICF0
aGlzLmZvcmNlQnVmZmVyLAorICAgICAgICAgICAgYXBwZW5kRmlyc3QgPSB1bmRlZmluZWQsCisg
ICAgICAgICAgICBzb3VyY2VTZWVuID0gdW5kZWZpbmVkLAorICAgICAgICAgICAgYnVmZmVyU3Rh
cnQgPSB1bmRlZmluZWQsCisgICAgICAgICAgICBidWZmZXJFbmQgPSB1bmRlZmluZWQ7CisgICAg
ICAgIHRoaXMuc291cmNlLmVhY2goZnVuY3Rpb24gKGxpbmUpIHsKKyAgICAgICAgICBpZiAobGlu
ZS5hcHBlbmRUb0J1ZmZlcikgeworICAgICAgICAgICAgaWYgKGJ1ZmZlclN0YXJ0KSB7CisgICAg
ICAgICAgICAgIGxpbmUucHJlcGVuZCgnICArICcpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgYnVmZmVyU3RhcnQgPSBsaW5lOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYnVmZmVyRW5kID0gbGluZTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYg
KGJ1ZmZlclN0YXJ0KSB7CisgICAgICAgICAgICAgIGlmICghc291cmNlU2VlbikgeworICAgICAg
ICAgICAgICAgIGFwcGVuZEZpcnN0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBidWZmZXJTdGFydC5wcmVwZW5kKCdidWZmZXIgKz0gJyk7CisgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgYnVmZmVyRW5kLmFkZCgnOycpOworICAgICAgICAgICAg
ICBidWZmZXJTdGFydCA9IGJ1ZmZlckVuZCA9IHVuZGVmaW5lZDsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgc291cmNlU2VlbiA9IHRydWU7CisgICAgICAgICAgICBpZiAoIWlzU2ltcGxl
KSB7CisgICAgICAgICAgICAgIGFwcGVuZE9ubHkgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIGlmIChhcHBlbmRPbmx5KSB7CisgICAg
ICAgICAgaWYgKGJ1ZmZlclN0YXJ0KSB7CisgICAgICAgICAgICBidWZmZXJTdGFydC5wcmVwZW5k
KCdyZXR1cm4gJyk7CisgICAgICAgICAgICBidWZmZXJFbmQuYWRkKCc7Jyk7CisgICAgICAgICAg
fSBlbHNlIGlmICghc291cmNlU2VlbikgeworICAgICAgICAgICAgdGhpcy5zb3VyY2UucHVzaCgn
cmV0dXJuICIiOycpOworICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB2
YXJEZWNsYXJhdGlvbnMgKz0gJywgYnVmZmVyID0gJyArIChhcHBlbmRGaXJzdCA/ICcnIDogdGhp
cy5pbml0aWFsaXplQnVmZmVyKCkpOworCisgICAgICAgICAgaWYgKGJ1ZmZlclN0YXJ0KSB7Cisg
ICAgICAgICAgICBidWZmZXJTdGFydC5wcmVwZW5kKCdyZXR1cm4gYnVmZmVyICsgJyk7CisgICAg
ICAgICAgICBidWZmZXJFbmQuYWRkKCc7Jyk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHRoaXMuc291cmNlLnB1c2goJ3JldHVybiBidWZmZXI7Jyk7CisgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHZhckRlY2xhcmF0aW9ucykgeworICAgICAgICAgIHRoaXMu
c291cmNlLnByZXBlbmQoJ3ZhciAnICsgdmFyRGVjbGFyYXRpb25zLnN1YnN0cmluZygyKSArIChh
cHBlbmRGaXJzdCA/ICcnIDogJztcbicpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0
aGlzLnNvdXJjZS5tZXJnZSgpOworICAgICAgfSwKKworICAgICAgLy8gW2Jsb2NrVmFsdWVdCisg
ICAgICAvLworICAgICAgLy8gT24gc3RhY2ssIGJlZm9yZTogaGFzaCwgaW52ZXJzZSwgcHJvZ3Jh
bSwgdmFsdWUKKyAgICAgIC8vIE9uIHN0YWNrLCBhZnRlcjogcmV0dXJuIHZhbHVlIG9mIGJsb2Nr
SGVscGVyTWlzc2luZworICAgICAgLy8KKyAgICAgIC8vIFRoZSBwdXJwb3NlIG9mIHRoaXMgb3Bj
b2RlIGlzIHRvIHRha2UgYSBibG9jayBvZiB0aGUgZm9ybQorICAgICAgLy8gYHt7I3RoaXMuZm9v
fX0uLi57ey90aGlzLmZvb319YCwgcmVzb2x2ZSB0aGUgdmFsdWUgb2YgYGZvb2AsIGFuZAorICAg
ICAgLy8gcmVwbGFjZSBpdCBvbiB0aGUgc3RhY2sgd2l0aCB0aGUgcmVzdWx0IG9mIHByb3Blcmx5
CisgICAgICAvLyBpbnZva2luZyBibG9ja0hlbHBlck1pc3NpbmcuCisgICAgICBibG9ja1ZhbHVl
OiBmdW5jdGlvbiBibG9ja1ZhbHVlKG5hbWUpIHsKKyAgICAgICAgdmFyIGJsb2NrSGVscGVyTWlz
c2luZyA9IHRoaXMuYWxpYXNhYmxlKCdoZWxwZXJzLmJsb2NrSGVscGVyTWlzc2luZycpLAorICAg
ICAgICAgICAgcGFyYW1zID0gW3RoaXMuY29udGV4dE5hbWUoMCldOworICAgICAgICB0aGlzLnNl
dHVwSGVscGVyQXJncyhuYW1lLCAwLCBwYXJhbXMpOworCisgICAgICAgIHZhciBibG9ja05hbWUg
PSB0aGlzLnBvcFN0YWNrKCk7CisgICAgICAgIHBhcmFtcy5zcGxpY2UoMSwgMCwgYmxvY2tOYW1l
KTsKKworICAgICAgICB0aGlzLnB1c2godGhpcy5zb3VyY2UuZnVuY3Rpb25DYWxsKGJsb2NrSGVs
cGVyTWlzc2luZywgJ2NhbGwnLCBwYXJhbXMpKTsKKyAgICAgIH0sCisKKyAgICAgIC8vIFthbWJp
Z3VvdXNCbG9ja1ZhbHVlXQorICAgICAgLy8KKyAgICAgIC8vIE9uIHN0YWNrLCBiZWZvcmU6IGhh
c2gsIGludmVyc2UsIHByb2dyYW0sIHZhbHVlCisgICAgICAvLyBDb21waWxlciB2YWx1ZSwgYmVm
b3JlOiBsYXN0SGVscGVyPXZhbHVlIG9mIGxhc3QgZm91bmQgaGVscGVyLCBpZiBhbnkKKyAgICAg
IC8vIE9uIHN0YWNrLCBhZnRlciwgaWYgbm8gbGFzdEhlbHBlcjogc2FtZSBhcyBbYmxvY2tWYWx1
ZV0KKyAgICAgIC8vIE9uIHN0YWNrLCBhZnRlciwgaWYgbGFzdEhlbHBlcjogdmFsdWUKKyAgICAg
IGFtYmlndW91c0Jsb2NrVmFsdWU6IGZ1bmN0aW9uIGFtYmlndW91c0Jsb2NrVmFsdWUoKSB7Cisg
ICAgICAgIC8vIFdlJ3JlIGJlaW5nIGEgYml0IGNoZWVreSBhbmQgcmV1c2luZyB0aGUgb3B0aW9u
cyB2YWx1ZSBmcm9tIHRoZSBwcmlvciBleGVjCisgICAgICAgIHZhciBibG9ja0hlbHBlck1pc3Np
bmcgPSB0aGlzLmFsaWFzYWJsZSgnaGVscGVycy5ibG9ja0hlbHBlck1pc3NpbmcnKSwKKyAgICAg
ICAgICAgIHBhcmFtcyA9IFt0aGlzLmNvbnRleHROYW1lKDApXTsKKyAgICAgICAgdGhpcy5zZXR1
cEhlbHBlckFyZ3MoJycsIDAsIHBhcmFtcywgdHJ1ZSk7CisKKyAgICAgICAgdGhpcy5mbHVzaElu
bGluZSgpOworCisgICAgICAgIHZhciBjdXJyZW50ID0gdGhpcy50b3BTdGFjaygpOworICAgICAg
ICBwYXJhbXMuc3BsaWNlKDEsIDAsIGN1cnJlbnQpOworCisgICAgICAgIHRoaXMucHVzaFNvdXJj
ZShbJ2lmICghJywgdGhpcy5sYXN0SGVscGVyLCAnKSB7ICcsIGN1cnJlbnQsICcgPSAnLCB0aGlz
LnNvdXJjZS5mdW5jdGlvbkNhbGwoYmxvY2tIZWxwZXJNaXNzaW5nLCAnY2FsbCcsIHBhcmFtcyks
ICd9J10pOworICAgICAgfSwKKworICAgICAgLy8gW2FwcGVuZENvbnRlbnRdCisgICAgICAvLwor
ICAgICAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uCisgICAgICAvLyBPbiBzdGFjaywgYWZ0ZXI6
IC4uLgorICAgICAgLy8KKyAgICAgIC8vIEFwcGVuZHMgdGhlIHN0cmluZyB2YWx1ZSBvZiBgY29u
dGVudGAgdG8gdGhlIGN1cnJlbnQgYnVmZmVyCisgICAgICBhcHBlbmRDb250ZW50OiBmdW5jdGlv
biBhcHBlbmRDb250ZW50KGNvbnRlbnQpIHsKKyAgICAgICAgaWYgKHRoaXMucGVuZGluZ0NvbnRl
bnQpIHsKKyAgICAgICAgICBjb250ZW50ID0gdGhpcy5wZW5kaW5nQ29udGVudCArIGNvbnRlbnQ7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdGhpcy5wZW5kaW5nTG9jYXRpb24gPSB0aGlz
LnNvdXJjZS5jdXJyZW50TG9jYXRpb247CisgICAgICAgIH0KKworICAgICAgICB0aGlzLnBlbmRp
bmdDb250ZW50ID0gY29udGVudDsKKyAgICAgIH0sCisKKyAgICAgIC8vIFthcHBlbmRdCisgICAg
ICAvLworICAgICAgLy8gT24gc3RhY2ssIGJlZm9yZTogdmFsdWUsIC4uLgorICAgICAgLy8gT24g
c3RhY2ssIGFmdGVyOiAuLi4KKyAgICAgIC8vCisgICAgICAvLyBDb2VyY2VzIGB2YWx1ZWAgdG8g
YSBTdHJpbmcgYW5kIGFwcGVuZHMgaXQgdG8gdGhlIGN1cnJlbnQgYnVmZmVyLgorICAgICAgLy8K
KyAgICAgIC8vIElmIGB2YWx1ZWAgaXMgdHJ1dGh5LCBvciAwLCBpdCBpcyBjb2VyY2VkIGludG8g
YSBzdHJpbmcgYW5kIGFwcGVuZGVkCisgICAgICAvLyBPdGhlcndpc2UsIHRoZSBlbXB0eSBzdHJp
bmcgaXMgYXBwZW5kZWQKKyAgICAgIGFwcGVuZDogZnVuY3Rpb24gYXBwZW5kKCkgeworICAgICAg
ICBpZiAodGhpcy5pc0lubGluZSgpKSB7CisgICAgICAgICAgdGhpcy5yZXBsYWNlU3RhY2soZnVu
Y3Rpb24gKGN1cnJlbnQpIHsKKyAgICAgICAgICAgIHJldHVybiBbJyAhPSBudWxsID8gJywgY3Vy
cmVudCwgJyA6ICIiJ107CisgICAgICAgICAgfSk7CisKKyAgICAgICAgICB0aGlzLnB1c2hTb3Vy
Y2UodGhpcy5hcHBlbmRUb0J1ZmZlcih0aGlzLnBvcFN0YWNrKCkpKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICB2YXIgbG9jYWwgPSB0aGlzLnBvcFN0YWNrKCk7CisgICAgICAgICAgdGhp
cy5wdXNoU291cmNlKFsnaWYgKCcsIGxvY2FsLCAnICE9IG51bGwpIHsgJywgdGhpcy5hcHBlbmRU
b0J1ZmZlcihsb2NhbCwgdW5kZWZpbmVkLCB0cnVlKSwgJyB9J10pOworICAgICAgICAgIGlmICh0
aGlzLmVudmlyb25tZW50LmlzU2ltcGxlKSB7CisgICAgICAgICAgICB0aGlzLnB1c2hTb3VyY2Uo
WydlbHNlIHsgJywgdGhpcy5hcHBlbmRUb0J1ZmZlcigiJyciLCB1bmRlZmluZWQsIHRydWUpLCAn
IH0nXSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9LAorCisgICAgICAvLyBbYXBw
ZW5kRXNjYXBlZF0KKyAgICAgIC8vCisgICAgICAvLyBPbiBzdGFjaywgYmVmb3JlOiB2YWx1ZSwg
Li4uCisgICAgICAvLyBPbiBzdGFjaywgYWZ0ZXI6IC4uLgorICAgICAgLy8KKyAgICAgIC8vIEVz
Y2FwZSBgdmFsdWVgIGFuZCBhcHBlbmQgaXQgdG8gdGhlIGJ1ZmZlcgorICAgICAgYXBwZW5kRXNj
YXBlZDogZnVuY3Rpb24gYXBwZW5kRXNjYXBlZCgpIHsKKyAgICAgICAgdGhpcy5wdXNoU291cmNl
KHRoaXMuYXBwZW5kVG9CdWZmZXIoW3RoaXMuYWxpYXNhYmxlKCdjb250YWluZXIuZXNjYXBlRXhw
cmVzc2lvbicpLCAnKCcsIHRoaXMucG9wU3RhY2soKSwgJyknXSkpOworICAgICAgfSwKKworICAg
ICAgLy8gW2dldENvbnRleHRdCisgICAgICAvLworICAgICAgLy8gT24gc3RhY2ssIGJlZm9yZTog
Li4uCisgICAgICAvLyBPbiBzdGFjaywgYWZ0ZXI6IC4uLgorICAgICAgLy8gQ29tcGlsZXIgdmFs
dWUsIGFmdGVyOiBsYXN0Q29udGV4dD1kZXB0aAorICAgICAgLy8KKyAgICAgIC8vIFNldCB0aGUg
dmFsdWUgb2YgdGhlIGBsYXN0Q29udGV4dGAgY29tcGlsZXIgdmFsdWUgdG8gdGhlIGRlcHRoCisg
ICAgICBnZXRDb250ZXh0OiBmdW5jdGlvbiBnZXRDb250ZXh0KGRlcHRoKSB7CisgICAgICAgIHRo
aXMubGFzdENvbnRleHQgPSBkZXB0aDsKKyAgICAgIH0sCisKKyAgICAgIC8vIFtwdXNoQ29udGV4
dF0KKyAgICAgIC8vCisgICAgICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi4KKyAgICAgIC8vIE9u
IHN0YWNrLCBhZnRlcjogY3VycmVudENvbnRleHQsIC4uLgorICAgICAgLy8KKyAgICAgIC8vIFB1
c2hlcyB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgY29udGV4dCBvbnRvIHRoZSBzdGFjay4KKyAg
ICAgIHB1c2hDb250ZXh0OiBmdW5jdGlvbiBwdXNoQ29udGV4dCgpIHsKKyAgICAgICAgdGhpcy5w
dXNoU3RhY2tMaXRlcmFsKHRoaXMuY29udGV4dE5hbWUodGhpcy5sYXN0Q29udGV4dCkpOworICAg
ICAgfSwKKworICAgICAgLy8gW2xvb2t1cE9uQ29udGV4dF0KKyAgICAgIC8vCisgICAgICAvLyBP
biBzdGFjaywgYmVmb3JlOiAuLi4KKyAgICAgIC8vIE9uIHN0YWNrLCBhZnRlcjogY3VycmVudENv
bnRleHRbbmFtZV0sIC4uLgorICAgICAgLy8KKyAgICAgIC8vIExvb2tzIHVwIHRoZSB2YWx1ZSBv
ZiBgbmFtZWAgb24gdGhlIGN1cnJlbnQgY29udGV4dCBhbmQgcHVzaGVzCisgICAgICAvLyBpdCBv
bnRvIHRoZSBzdGFjay4KKyAgICAgIGxvb2t1cE9uQ29udGV4dDogZnVuY3Rpb24gbG9va3VwT25D
b250ZXh0KHBhcnRzLCBmYWxzeSwgc3RyaWN0LCBzY29wZWQpIHsKKyAgICAgICAgdmFyIGkgPSAw
OworCisgICAgICAgIGlmICghc2NvcGVkICYmIHRoaXMub3B0aW9ucy5jb21wYXQgJiYgIXRoaXMu
bGFzdENvbnRleHQpIHsKKyAgICAgICAgICAvLyBUaGUgZGVwdGhlZCBxdWVyeSBpcyBleHBlY3Rl
ZCB0byBoYW5kbGUgdGhlIHVuZGVmaW5lZCBsb2dpYyBmb3IgdGhlIHJvb3QgbGV2ZWwgdGhhdAor
ICAgICAgICAgIC8vIGlzIGltcGxlbWVudGVkIGJlbG93LCBzbyB3ZSBldmFsdWF0ZSB0aGF0IGRp
cmVjdGx5IGluIGNvbXBhdCBtb2RlCisgICAgICAgICAgdGhpcy5wdXNoKHRoaXMuZGVwdGhlZExv
b2t1cChwYXJ0c1tpKytdKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdGhpcy5wdXNo
Q29udGV4dCgpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5yZXNvbHZlUGF0aCgnY29udGV4
dCcsIHBhcnRzLCBpLCBmYWxzeSwgc3RyaWN0KTsKKyAgICAgIH0sCisKKyAgICAgIC8vIFtsb29r
dXBCbG9ja1BhcmFtXQorICAgICAgLy8KKyAgICAgIC8vIE9uIHN0YWNrLCBiZWZvcmU6IC4uLgor
ICAgICAgLy8gT24gc3RhY2ssIGFmdGVyOiBibG9ja1BhcmFtW25hbWVdLCAuLi4KKyAgICAgIC8v
CisgICAgICAvLyBMb29rcyB1cCB0aGUgdmFsdWUgb2YgYHBhcnRzYCBvbiB0aGUgZ2l2ZW4gYmxv
Y2sgcGFyYW0gYW5kIHB1c2hlcworICAgICAgLy8gaXQgb250byB0aGUgc3RhY2suCisgICAgICBs
b29rdXBCbG9ja1BhcmFtOiBmdW5jdGlvbiBsb29rdXBCbG9ja1BhcmFtKGJsb2NrUGFyYW1JZCwg
cGFydHMpIHsKKyAgICAgICAgdGhpcy51c2VCbG9ja1BhcmFtcyA9IHRydWU7CisKKyAgICAgICAg
dGhpcy5wdXNoKFsnYmxvY2tQYXJhbXNbJywgYmxvY2tQYXJhbUlkWzBdLCAnXVsnLCBibG9ja1Bh
cmFtSWRbMV0sICddJ10pOworICAgICAgICB0aGlzLnJlc29sdmVQYXRoKCdjb250ZXh0JywgcGFy
dHMsIDEpOworICAgICAgfSwKKworICAgICAgLy8gW2xvb2t1cERhdGFdCisgICAgICAvLworICAg
ICAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uCisgICAgICAvLyBPbiBzdGFjaywgYWZ0ZXI6IGRh
dGEsIC4uLgorICAgICAgLy8KKyAgICAgIC8vIFB1c2ggdGhlIGRhdGEgbG9va3VwIG9wZXJhdG9y
CisgICAgICBsb29rdXBEYXRhOiBmdW5jdGlvbiBsb29rdXBEYXRhKGRlcHRoLCBwYXJ0cywgc3Ry
aWN0KSB7CisgICAgICAgIGlmICghZGVwdGgpIHsKKyAgICAgICAgICB0aGlzLnB1c2hTdGFja0xp
dGVyYWwoJ2RhdGEnKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB0aGlzLnB1c2hTdGFj
a0xpdGVyYWwoJ2NvbnRhaW5lci5kYXRhKGRhdGEsICcgKyBkZXB0aCArICcpJyk7CisgICAgICAg
IH0KKworICAgICAgICB0aGlzLnJlc29sdmVQYXRoKCdkYXRhJywgcGFydHMsIDAsIHRydWUsIHN0
cmljdCk7CisgICAgICB9LAorCisgICAgICByZXNvbHZlUGF0aDogZnVuY3Rpb24gcmVzb2x2ZVBh
dGgodHlwZSwgcGFydHMsIGksIGZhbHN5LCBzdHJpY3QpIHsKKyAgICAgICAgLy8gaXN0YW5idWwg
aWdub3JlIG5leHQKKworICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOworCisgICAgICAgIGlmICh0
aGlzLm9wdGlvbnMuc3RyaWN0IHx8IHRoaXMub3B0aW9ucy5hc3N1bWVPYmplY3RzKSB7CisgICAg
ICAgICAgdGhpcy5wdXNoKHN0cmljdExvb2t1cCh0aGlzLm9wdGlvbnMuc3RyaWN0ICYmIHN0cmlj
dCwgdGhpcywgcGFydHMsIHR5cGUpKTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICB2YXIgbGVuID0gcGFydHMubGVuZ3RoOworICAgICAgICBmb3IgKDsgaSA8IGxlbjsg
aSsrKSB7CisgICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tbG9vcC1mdW5jICovCisgICAg
ICAgICAgdGhpcy5yZXBsYWNlU3RhY2soZnVuY3Rpb24gKGN1cnJlbnQpIHsKKyAgICAgICAgICAg
IHZhciBsb29rdXAgPSBfdGhpcy5uYW1lTG9va3VwKGN1cnJlbnQsIHBhcnRzW2ldLCB0eXBlKTsK
KyAgICAgICAgICAgIC8vIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgemVybyBhbmQgZmFsc2UgYXJl
IGhhbmRsZWQgcHJvcGVybHkgaWYgdGhlIGNvbnRleHQgKGZhbHN5IGZsYWcpCisgICAgICAgICAg
ICAvLyBuZWVkcyB0byBoYXZlIHRoZSBzcGVjaWFsIGhhbmRsaW5nIGZvciB0aGVzZSB2YWx1ZXMu
CisgICAgICAgICAgICBpZiAoIWZhbHN5KSB7CisgICAgICAgICAgICAgIHJldHVybiBbJyAhPSBu
dWxsID8gJywgbG9va3VwLCAnIDogJywgY3VycmVudF07CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAvLyBPdGhlcndpc2Ugd2UgY2FuIHVzZSBnZW5lcmljIGZhbHN5IGhhbmRs
aW5nCisgICAgICAgICAgICAgIHJldHVybiBbJyAmJiAnLCBsb29rdXBdOworICAgICAgICAgICAg
fQorICAgICAgICAgIH0pOworICAgICAgICAgIC8qIGVzbGludC1lbmFibGUgbm8tbG9vcC1mdW5j
ICovCisgICAgICAgIH0KKyAgICAgIH0sCisKKyAgICAgIC8vIFtyZXNvbHZlUG9zc2libGVMYW1i
ZGFdCisgICAgICAvLworICAgICAgLy8gT24gc3RhY2ssIGJlZm9yZTogdmFsdWUsIC4uLgorICAg
ICAgLy8gT24gc3RhY2ssIGFmdGVyOiByZXNvbHZlZCB2YWx1ZSwgLi4uCisgICAgICAvLworICAg
ICAgLy8gSWYgdGhlIGB2YWx1ZWAgaXMgYSBsYW1iZGEsIHJlcGxhY2UgaXQgb24gdGhlIHN0YWNr
IGJ5CisgICAgICAvLyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBsYW1iZGEKKyAgICAgIHJlc29s
dmVQb3NzaWJsZUxhbWJkYTogZnVuY3Rpb24gcmVzb2x2ZVBvc3NpYmxlTGFtYmRhKCkgeworICAg
ICAgICB0aGlzLnB1c2goW3RoaXMuYWxpYXNhYmxlKCdjb250YWluZXIubGFtYmRhJyksICcoJywg
dGhpcy5wb3BTdGFjaygpLCAnLCAnLCB0aGlzLmNvbnRleHROYW1lKDApLCAnKSddKTsKKyAgICAg
IH0sCisKKyAgICAgIC8vIFtwdXNoU3RyaW5nUGFyYW1dCisgICAgICAvLworICAgICAgLy8gT24g
c3RhY2ssIGJlZm9yZTogLi4uCisgICAgICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHN0cmluZywgY3Vy
cmVudENvbnRleHQsIC4uLgorICAgICAgLy8KKyAgICAgIC8vIFRoaXMgb3Bjb2RlIGlzIGRlc2ln
bmVkIGZvciB1c2UgaW4gc3RyaW5nIG1vZGUsIHdoaWNoCisgICAgICAvLyBwcm92aWRlcyB0aGUg
c3RyaW5nIHZhbHVlIG9mIGEgcGFyYW1ldGVyIGFsb25nIHdpdGggaXRzCisgICAgICAvLyBkZXB0
aCByYXRoZXIgdGhhbiByZXNvbHZpbmcgaXQgaW1tZWRpYXRlbHkuCisgICAgICBwdXNoU3RyaW5n
UGFyYW06IGZ1bmN0aW9uIHB1c2hTdHJpbmdQYXJhbShzdHJpbmcsIHR5cGUpIHsKKyAgICAgICAg
dGhpcy5wdXNoQ29udGV4dCgpOworICAgICAgICB0aGlzLnB1c2hTdHJpbmcodHlwZSk7CisKKyAg
ICAgICAgLy8gSWYgaXQncyBhIHN1YmV4cHJlc3Npb24sIHRoZSBzdHJpbmcgcmVzdWx0CisgICAg
ICAgIC8vIHdpbGwgYmUgcHVzaGVkIGFmdGVyIHRoaXMgb3Bjb2RlLgorICAgICAgICBpZiAodHlw
ZSAhPT0gJ1N1YkV4cHJlc3Npb24nKSB7CisgICAgICAgICAgaWYgKHR5cGVvZiBzdHJpbmcgPT09
ICdzdHJpbmcnKSB7CisgICAgICAgICAgICB0aGlzLnB1c2hTdHJpbmcoc3RyaW5nKTsKKyAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKHN0cmluZyk7
CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9LAorCisgICAgICBlbXB0eUhhc2g6IGZ1
bmN0aW9uIGVtcHR5SGFzaChvbWl0RW1wdHkpIHsKKyAgICAgICAgaWYgKHRoaXMudHJhY2tJZHMp
IHsKKyAgICAgICAgICB0aGlzLnB1c2goJ3t9Jyk7IC8vIGhhc2hJZHMKKyAgICAgICAgfQorICAg
ICAgICBpZiAodGhpcy5zdHJpbmdQYXJhbXMpIHsKKyAgICAgICAgICB0aGlzLnB1c2goJ3t9Jyk7
IC8vIGhhc2hDb250ZXh0cworICAgICAgICAgIHRoaXMucHVzaCgne30nKTsgLy8gaGFzaFR5cGVz
CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKG9taXRFbXB0eSA/ICd1
bmRlZmluZWQnIDogJ3t9Jyk7CisgICAgICB9LAorICAgICAgcHVzaEhhc2g6IGZ1bmN0aW9uIHB1
c2hIYXNoKCkgeworICAgICAgICBpZiAodGhpcy5oYXNoKSB7CisgICAgICAgICAgdGhpcy5oYXNo
ZXMucHVzaCh0aGlzLmhhc2gpOworICAgICAgICB9CisgICAgICAgIHRoaXMuaGFzaCA9IHsgdmFs
dWVzOiBbXSwgdHlwZXM6IFtdLCBjb250ZXh0czogW10sIGlkczogW10gfTsKKyAgICAgIH0sCisg
ICAgICBwb3BIYXNoOiBmdW5jdGlvbiBwb3BIYXNoKCkgeworICAgICAgICB2YXIgaGFzaCA9IHRo
aXMuaGFzaDsKKyAgICAgICAgdGhpcy5oYXNoID0gdGhpcy5oYXNoZXMucG9wKCk7CisKKyAgICAg
ICAgaWYgKHRoaXMudHJhY2tJZHMpIHsKKyAgICAgICAgICB0aGlzLnB1c2godGhpcy5vYmplY3RM
aXRlcmFsKGhhc2guaWRzKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuc3RyaW5nUGFy
YW1zKSB7CisgICAgICAgICAgdGhpcy5wdXNoKHRoaXMub2JqZWN0TGl0ZXJhbChoYXNoLmNvbnRl
eHRzKSk7CisgICAgICAgICAgdGhpcy5wdXNoKHRoaXMub2JqZWN0TGl0ZXJhbChoYXNoLnR5cGVz
KSk7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLnB1c2godGhpcy5vYmplY3RMaXRlcmFsKGhh
c2gudmFsdWVzKSk7CisgICAgICB9LAorCisgICAgICAvLyBbcHVzaFN0cmluZ10KKyAgICAgIC8v
CisgICAgICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi4KKyAgICAgIC8vIE9uIHN0YWNrLCBhZnRl
cjogcXVvdGVkU3RyaW5nKHN0cmluZyksIC4uLgorICAgICAgLy8KKyAgICAgIC8vIFB1c2ggYSBx
dW90ZWQgdmVyc2lvbiBvZiBgc3RyaW5nYCBvbnRvIHRoZSBzdGFjaworICAgICAgcHVzaFN0cmlu
ZzogZnVuY3Rpb24gcHVzaFN0cmluZyhzdHJpbmcpIHsKKyAgICAgICAgdGhpcy5wdXNoU3RhY2tM
aXRlcmFsKHRoaXMucXVvdGVkU3RyaW5nKHN0cmluZykpOworICAgICAgfSwKKworICAgICAgLy8g
W3B1c2hMaXRlcmFsXQorICAgICAgLy8KKyAgICAgIC8vIE9uIHN0YWNrLCBiZWZvcmU6IC4uLgor
ICAgICAgLy8gT24gc3RhY2ssIGFmdGVyOiB2YWx1ZSwgLi4uCisgICAgICAvLworICAgICAgLy8g
UHVzaGVzIGEgdmFsdWUgb250byB0aGUgc3RhY2suIFRoaXMgb3BlcmF0aW9uIHByZXZlbnRzCisg
ICAgICAvLyB0aGUgY29tcGlsZXIgZnJvbSBjcmVhdGluZyBhIHRlbXBvcmFyeSB2YXJpYWJsZSB0
byBob2xkCisgICAgICAvLyBpdC4KKyAgICAgIHB1c2hMaXRlcmFsOiBmdW5jdGlvbiBwdXNoTGl0
ZXJhbCh2YWx1ZSkgeworICAgICAgICB0aGlzLnB1c2hTdGFja0xpdGVyYWwodmFsdWUpOworICAg
ICAgfSwKKworICAgICAgLy8gW3B1c2hQcm9ncmFtXQorICAgICAgLy8KKyAgICAgIC8vIE9uIHN0
YWNrLCBiZWZvcmU6IC4uLgorICAgICAgLy8gT24gc3RhY2ssIGFmdGVyOiBwcm9ncmFtKGd1aWQp
LCAuLi4KKyAgICAgIC8vCisgICAgICAvLyBQdXNoIGEgcHJvZ3JhbSBleHByZXNzaW9uIG9udG8g
dGhlIHN0YWNrLiBUaGlzIHRha2VzCisgICAgICAvLyBhIGNvbXBpbGUtdGltZSBndWlkIGFuZCBj
b252ZXJ0cyBpdCBpbnRvIGEgcnVudGltZS1hY2Nlc3NpYmxlCisgICAgICAvLyBleHByZXNzaW9u
LgorICAgICAgcHVzaFByb2dyYW06IGZ1bmN0aW9uIHB1c2hQcm9ncmFtKGd1aWQpIHsKKyAgICAg
ICAgaWYgKGd1aWQgIT0gbnVsbCkgeworICAgICAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbCh0
aGlzLnByb2dyYW1FeHByZXNzaW9uKGd1aWQpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICB0aGlzLnB1c2hTdGFja0xpdGVyYWwobnVsbCk7CisgICAgICAgIH0KKyAgICAgIH0sCisKKyAg
ICAgIC8vIFtyZWdpc3RlckRlY29yYXRvcl0KKyAgICAgIC8vCisgICAgICAvLyBPbiBzdGFjaywg
YmVmb3JlOiBoYXNoLCBwcm9ncmFtLCBwYXJhbXMuLi4sIC4uLgorICAgICAgLy8gT24gc3RhY2ss
IGFmdGVyOiAuLi4KKyAgICAgIC8vCisgICAgICAvLyBQb3BzIG9mZiB0aGUgZGVjb3JhdG9yJ3Mg
cGFyYW1ldGVycywgaW52b2tlcyB0aGUgZGVjb3JhdG9yLAorICAgICAgLy8gYW5kIGluc2VydHMg
dGhlIGRlY29yYXRvciBpbnRvIHRoZSBkZWNvcmF0b3JzIGxpc3QuCisgICAgICByZWdpc3RlckRl
Y29yYXRvcjogZnVuY3Rpb24gcmVnaXN0ZXJEZWNvcmF0b3IocGFyYW1TaXplLCBuYW1lKSB7Cisg
ICAgICAgIHZhciBmb3VuZERlY29yYXRvciA9IHRoaXMubmFtZUxvb2t1cCgnZGVjb3JhdG9ycycs
IG5hbWUsICdkZWNvcmF0b3InKSwKKyAgICAgICAgICAgIG9wdGlvbnMgPSB0aGlzLnNldHVwSGVs
cGVyQXJncyhuYW1lLCBwYXJhbVNpemUpOworCisgICAgICAgIHRoaXMuZGVjb3JhdG9ycy5wdXNo
KFsnZm4gPSAnLCB0aGlzLmRlY29yYXRvcnMuZnVuY3Rpb25DYWxsKGZvdW5kRGVjb3JhdG9yLCAn
JywgWydmbicsICdwcm9wcycsICdjb250YWluZXInLCBvcHRpb25zXSksICcgfHwgZm47J10pOwor
ICAgICAgfSwKKworICAgICAgLy8gW2ludm9rZUhlbHBlcl0KKyAgICAgIC8vCisgICAgICAvLyBP
biBzdGFjaywgYmVmb3JlOiBoYXNoLCBpbnZlcnNlLCBwcm9ncmFtLCBwYXJhbXMuLi4sIC4uLgor
ICAgICAgLy8gT24gc3RhY2ssIGFmdGVyOiByZXN1bHQgb2YgaGVscGVyIGludm9jYXRpb24KKyAg
ICAgIC8vCisgICAgICAvLyBQb3BzIG9mZiB0aGUgaGVscGVyJ3MgcGFyYW1ldGVycywgaW52b2tl
cyB0aGUgaGVscGVyLAorICAgICAgLy8gYW5kIHB1c2hlcyB0aGUgaGVscGVyJ3MgcmV0dXJuIHZh
bHVlIG9udG8gdGhlIHN0YWNrLgorICAgICAgLy8KKyAgICAgIC8vIElmIHRoZSBoZWxwZXIgaXMg
bm90IGZvdW5kLCBgaGVscGVyTWlzc2luZ2AgaXMgY2FsbGVkLgorICAgICAgaW52b2tlSGVscGVy
OiBmdW5jdGlvbiBpbnZva2VIZWxwZXIocGFyYW1TaXplLCBuYW1lLCBpc1NpbXBsZSkgeworICAg
ICAgICB2YXIgbm9uSGVscGVyID0gdGhpcy5wb3BTdGFjaygpLAorICAgICAgICAgICAgaGVscGVy
ID0gdGhpcy5zZXR1cEhlbHBlcihwYXJhbVNpemUsIG5hbWUpLAorICAgICAgICAgICAgc2ltcGxl
ID0gaXNTaW1wbGUgPyBbaGVscGVyLm5hbWUsICcgfHwgJ10gOiAnJzsKKworICAgICAgICB2YXIg
bG9va3VwID0gWycoJ10uY29uY2F0KHNpbXBsZSwgbm9uSGVscGVyKTsKKyAgICAgICAgaWYgKCF0
aGlzLm9wdGlvbnMuc3RyaWN0KSB7CisgICAgICAgICAgbG9va3VwLnB1c2goJyB8fCAnLCB0aGlz
LmFsaWFzYWJsZSgnaGVscGVycy5oZWxwZXJNaXNzaW5nJykpOworICAgICAgICB9CisgICAgICAg
IGxvb2t1cC5wdXNoKCcpJyk7CisKKyAgICAgICAgdGhpcy5wdXNoKHRoaXMuc291cmNlLmZ1bmN0
aW9uQ2FsbChsb29rdXAsICdjYWxsJywgaGVscGVyLmNhbGxQYXJhbXMpKTsKKyAgICAgIH0sCisK
KyAgICAgIC8vIFtpbnZva2VLbm93bkhlbHBlcl0KKyAgICAgIC8vCisgICAgICAvLyBPbiBzdGFj
aywgYmVmb3JlOiBoYXNoLCBpbnZlcnNlLCBwcm9ncmFtLCBwYXJhbXMuLi4sIC4uLgorICAgICAg
Ly8gT24gc3RhY2ssIGFmdGVyOiByZXN1bHQgb2YgaGVscGVyIGludm9jYXRpb24KKyAgICAgIC8v
CisgICAgICAvLyBUaGlzIG9wZXJhdGlvbiBpcyB1c2VkIHdoZW4gdGhlIGhlbHBlciBpcyBrbm93
biB0byBleGlzdCwKKyAgICAgIC8vIHNvIGEgYGhlbHBlck1pc3NpbmdgIGZhbGxiYWNrIGlzIG5v
dCByZXF1aXJlZC4KKyAgICAgIGludm9rZUtub3duSGVscGVyOiBmdW5jdGlvbiBpbnZva2VLbm93
bkhlbHBlcihwYXJhbVNpemUsIG5hbWUpIHsKKyAgICAgICAgdmFyIGhlbHBlciA9IHRoaXMuc2V0
dXBIZWxwZXIocGFyYW1TaXplLCBuYW1lKTsKKyAgICAgICAgdGhpcy5wdXNoKHRoaXMuc291cmNl
LmZ1bmN0aW9uQ2FsbChoZWxwZXIubmFtZSwgJ2NhbGwnLCBoZWxwZXIuY2FsbFBhcmFtcykpOwor
ICAgICAgfSwKKworICAgICAgLy8gW2ludm9rZUFtYmlndW91c10KKyAgICAgIC8vCisgICAgICAv
LyBPbiBzdGFjaywgYmVmb3JlOiBoYXNoLCBpbnZlcnNlLCBwcm9ncmFtLCBwYXJhbXMuLi4sIC4u
LgorICAgICAgLy8gT24gc3RhY2ssIGFmdGVyOiByZXN1bHQgb2YgZGlzYW1iaWd1YXRpb24KKyAg
ICAgIC8vCisgICAgICAvLyBUaGlzIG9wZXJhdGlvbiBpcyB1c2VkIHdoZW4gYW4gZXhwcmVzc2lv
biBsaWtlIGB7e2Zvb319YAorICAgICAgLy8gaXMgcHJvdmlkZWQsIGJ1dCB3ZSBkb24ndCBrbm93
IGF0IGNvbXBpbGUtdGltZSB3aGV0aGVyIGl0CisgICAgICAvLyBpcyBhIGhlbHBlciBvciBhIHBh
dGguCisgICAgICAvLworICAgICAgLy8gVGhpcyBvcGVyYXRpb24gZW1pdHMgbW9yZSBjb2RlIHRo
YW4gdGhlIG90aGVyIG9wdGlvbnMsCisgICAgICAvLyBhbmQgY2FuIGJlIGF2b2lkZWQgYnkgcGFz
c2luZyB0aGUgYGtub3duSGVscGVyc2AgYW5kCisgICAgICAvLyBga25vd25IZWxwZXJzT25seWAg
ZmxhZ3MgYXQgY29tcGlsZS10aW1lLgorICAgICAgaW52b2tlQW1iaWd1b3VzOiBmdW5jdGlvbiBp
bnZva2VBbWJpZ3VvdXMobmFtZSwgaGVscGVyQ2FsbCkgeworICAgICAgICB0aGlzLnVzZVJlZ2lz
dGVyKCdoZWxwZXInKTsKKworICAgICAgICB2YXIgbm9uSGVscGVyID0gdGhpcy5wb3BTdGFjaygp
OworCisgICAgICAgIHRoaXMuZW1wdHlIYXNoKCk7CisgICAgICAgIHZhciBoZWxwZXIgPSB0aGlz
LnNldHVwSGVscGVyKDAsIG5hbWUsIGhlbHBlckNhbGwpOworCisgICAgICAgIHZhciBoZWxwZXJO
YW1lID0gdGhpcy5sYXN0SGVscGVyID0gdGhpcy5uYW1lTG9va3VwKCdoZWxwZXJzJywgbmFtZSwg
J2hlbHBlcicpOworCisgICAgICAgIHZhciBsb29rdXAgPSBbJygnLCAnKGhlbHBlciA9ICcsIGhl
bHBlck5hbWUsICcgfHwgJywgbm9uSGVscGVyLCAnKSddOworICAgICAgICBpZiAoIXRoaXMub3B0
aW9ucy5zdHJpY3QpIHsKKyAgICAgICAgICBsb29rdXBbMF0gPSAnKGhlbHBlciA9ICc7CisgICAg
ICAgICAgbG9va3VwLnB1c2goJyAhPSBudWxsID8gaGVscGVyIDogJywgdGhpcy5hbGlhc2FibGUo
J2hlbHBlcnMuaGVscGVyTWlzc2luZycpKTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMucHVz
aChbJygnLCBsb29rdXAsIGhlbHBlci5wYXJhbXNJbml0ID8gWycpLCgnLCBoZWxwZXIucGFyYW1z
SW5pdF0gOiBbXSwgJyksJywgJyh0eXBlb2YgaGVscGVyID09PSAnLCB0aGlzLmFsaWFzYWJsZSgn
ImZ1bmN0aW9uIicpLCAnID8gJywgdGhpcy5zb3VyY2UuZnVuY3Rpb25DYWxsKCdoZWxwZXInLCAn
Y2FsbCcsIGhlbHBlci5jYWxsUGFyYW1zKSwgJyA6IGhlbHBlcikpJ10pOworICAgICAgfSwKKwor
ICAgICAgLy8gW2ludm9rZVBhcnRpYWxdCisgICAgICAvLworICAgICAgLy8gT24gc3RhY2ssIGJl
Zm9yZTogY29udGV4dCwgLi4uCisgICAgICAvLyBPbiBzdGFjayBhZnRlcjogcmVzdWx0IG9mIHBh
cnRpYWwgaW52b2NhdGlvbgorICAgICAgLy8KKyAgICAgIC8vIFRoaXMgb3BlcmF0aW9uIHBvcHMg
b2ZmIGEgY29udGV4dCwgaW52b2tlcyBhIHBhcnRpYWwgd2l0aCB0aGF0IGNvbnRleHQsCisgICAg
ICAvLyBhbmQgcHVzaGVzIHRoZSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24gYmFjay4KKyAgICAg
IGludm9rZVBhcnRpYWw6IGZ1bmN0aW9uIGludm9rZVBhcnRpYWwoaXNEeW5hbWljLCBuYW1lLCBp
bmRlbnQpIHsKKyAgICAgICAgdmFyIHBhcmFtcyA9IFtdLAorICAgICAgICAgICAgb3B0aW9ucyA9
IHRoaXMuc2V0dXBQYXJhbXMobmFtZSwgMSwgcGFyYW1zKTsKKworICAgICAgICBpZiAoaXNEeW5h
bWljKSB7CisgICAgICAgICAgbmFtZSA9IHRoaXMucG9wU3RhY2soKTsKKyAgICAgICAgICBkZWxl
dGUgb3B0aW9ucy5uYW1lOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGluZGVudCkgeworICAg
ICAgICAgIG9wdGlvbnMuaW5kZW50ID0gSlNPTi5zdHJpbmdpZnkoaW5kZW50KTsKKyAgICAgICAg
fQorICAgICAgICBvcHRpb25zLmhlbHBlcnMgPSAnaGVscGVycyc7CisgICAgICAgIG9wdGlvbnMu
cGFydGlhbHMgPSAncGFydGlhbHMnOworICAgICAgICBvcHRpb25zLmRlY29yYXRvcnMgPSAnY29u
dGFpbmVyLmRlY29yYXRvcnMnOworCisgICAgICAgIGlmICghaXNEeW5hbWljKSB7CisgICAgICAg
ICAgcGFyYW1zLnVuc2hpZnQodGhpcy5uYW1lTG9va3VwKCdwYXJ0aWFscycsIG5hbWUsICdwYXJ0
aWFsJykpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHBhcmFtcy51bnNoaWZ0KG5hbWUp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb21wYXQpIHsKKyAgICAg
ICAgICBvcHRpb25zLmRlcHRocyA9ICdkZXB0aHMnOworICAgICAgICB9CisgICAgICAgIG9wdGlv
bnMgPSB0aGlzLm9iamVjdExpdGVyYWwob3B0aW9ucyk7CisgICAgICAgIHBhcmFtcy5wdXNoKG9w
dGlvbnMpOworCisgICAgICAgIHRoaXMucHVzaCh0aGlzLnNvdXJjZS5mdW5jdGlvbkNhbGwoJ2Nv
bnRhaW5lci5pbnZva2VQYXJ0aWFsJywgJycsIHBhcmFtcykpOworICAgICAgfSwKKworICAgICAg
Ly8gW2Fzc2lnblRvSGFzaF0KKyAgICAgIC8vCisgICAgICAvLyBPbiBzdGFjaywgYmVmb3JlOiB2
YWx1ZSwgLi4uLCBoYXNoLCAuLi4KKyAgICAgIC8vIE9uIHN0YWNrLCBhZnRlcjogLi4uLCBoYXNo
LCAuLi4KKyAgICAgIC8vCisgICAgICAvLyBQb3BzIGEgdmFsdWUgb2ZmIHRoZSBzdGFjayBhbmQg
YXNzaWducyBpdCB0byB0aGUgY3VycmVudCBoYXNoCisgICAgICBhc3NpZ25Ub0hhc2g6IGZ1bmN0
aW9uIGFzc2lnblRvSGFzaChrZXkpIHsKKyAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5wb3BTdGFj
aygpLAorICAgICAgICAgICAgY29udGV4dCA9IHVuZGVmaW5lZCwKKyAgICAgICAgICAgIHR5cGUg
PSB1bmRlZmluZWQsCisgICAgICAgICAgICBpZCA9IHVuZGVmaW5lZDsKKworICAgICAgICBpZiAo
dGhpcy50cmFja0lkcykgeworICAgICAgICAgIGlkID0gdGhpcy5wb3BTdGFjaygpOworICAgICAg
ICB9CisgICAgICAgIGlmICh0aGlzLnN0cmluZ1BhcmFtcykgeworICAgICAgICAgIHR5cGUgPSB0
aGlzLnBvcFN0YWNrKCk7CisgICAgICAgICAgY29udGV4dCA9IHRoaXMucG9wU3RhY2soKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHZhciBoYXNoID0gdGhpcy5oYXNoOworICAgICAgICBpZiAoY29u
dGV4dCkgeworICAgICAgICAgIGhhc2guY29udGV4dHNba2V5XSA9IGNvbnRleHQ7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHR5cGUpIHsKKyAgICAgICAgICBoYXNoLnR5cGVzW2tleV0gPSB0eXBl
OworICAgICAgICB9CisgICAgICAgIGlmIChpZCkgeworICAgICAgICAgIGhhc2guaWRzW2tleV0g
PSBpZDsKKyAgICAgICAgfQorICAgICAgICBoYXNoLnZhbHVlc1trZXldID0gdmFsdWU7CisgICAg
ICB9LAorCisgICAgICBwdXNoSWQ6IGZ1bmN0aW9uIHB1c2hJZCh0eXBlLCBuYW1lLCBjaGlsZCkg
eworICAgICAgICBpZiAodHlwZSA9PT0gJ0Jsb2NrUGFyYW0nKSB7CisgICAgICAgICAgdGhpcy5w
dXNoU3RhY2tMaXRlcmFsKCdibG9ja1BhcmFtc1snICsgbmFtZVswXSArICddLnBhdGhbJyArIG5h
bWVbMV0gKyAnXScgKyAoY2hpbGQgPyAnICsgJyArIEpTT04uc3RyaW5naWZ5KCcuJyArIGNoaWxk
KSA6ICcnKSk7CisgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ1BhdGhFeHByZXNzaW9uJykg
eworICAgICAgICAgIHRoaXMucHVzaFN0cmluZyhuYW1lKTsKKyAgICAgICAgfSBlbHNlIGlmICh0
eXBlID09PSAnU3ViRXhwcmVzc2lvbicpIHsKKyAgICAgICAgICB0aGlzLnB1c2hTdGFja0xpdGVy
YWwoJ3RydWUnKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB0aGlzLnB1c2hTdGFja0xp
dGVyYWwoJ251bGwnKTsKKyAgICAgICAgfQorICAgICAgfSwKKworICAgICAgLy8gSEVMUEVSUwor
CisgICAgICBjb21waWxlcjogSmF2YVNjcmlwdENvbXBpbGVyLAorCisgICAgICBjb21waWxlQ2hp
bGRyZW46IGZ1bmN0aW9uIGNvbXBpbGVDaGlsZHJlbihlbnZpcm9ubWVudCwgb3B0aW9ucykgewor
ICAgICAgICB2YXIgY2hpbGRyZW4gPSBlbnZpcm9ubWVudC5jaGlsZHJlbiwKKyAgICAgICAgICAg
IGNoaWxkID0gdW5kZWZpbmVkLAorICAgICAgICAgICAgY29tcGlsZXIgPSB1bmRlZmluZWQ7CisK
KyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKysp
IHsKKyAgICAgICAgICBjaGlsZCA9IGNoaWxkcmVuW2ldOworICAgICAgICAgIGNvbXBpbGVyID0g
bmV3IHRoaXMuY29tcGlsZXIoKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuZXctY2FwCisKKyAg
ICAgICAgICB2YXIgZXhpc3RpbmcgPSB0aGlzLm1hdGNoRXhpc3RpbmdQcm9ncmFtKGNoaWxkKTsK
KworICAgICAgICAgIGlmIChleGlzdGluZyA9PSBudWxsKSB7CisgICAgICAgICAgICB0aGlzLmNv
bnRleHQucHJvZ3JhbXMucHVzaCgnJyk7IC8vIFBsYWNlaG9sZGVyIHRvIHByZXZlbnQgbmFtZSBj
b25mbGljdHMgZm9yIG5lc3RlZCBjaGlsZHJlbgorICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhp
cy5jb250ZXh0LnByb2dyYW1zLmxlbmd0aDsKKyAgICAgICAgICAgIGNoaWxkLmluZGV4ID0gaW5k
ZXg7CisgICAgICAgICAgICBjaGlsZC5uYW1lID0gJ3Byb2dyYW0nICsgaW5kZXg7CisgICAgICAg
ICAgICB0aGlzLmNvbnRleHQucHJvZ3JhbXNbaW5kZXhdID0gY29tcGlsZXIuY29tcGlsZShjaGls
ZCwgb3B0aW9ucywgdGhpcy5jb250ZXh0LCAhdGhpcy5wcmVjb21waWxlKTsKKyAgICAgICAgICAg
IHRoaXMuY29udGV4dC5kZWNvcmF0b3JzW2luZGV4XSA9IGNvbXBpbGVyLmRlY29yYXRvcnM7Cisg
ICAgICAgICAgICB0aGlzLmNvbnRleHQuZW52aXJvbm1lbnRzW2luZGV4XSA9IGNoaWxkOworCisg
ICAgICAgICAgICB0aGlzLnVzZURlcHRocyA9IHRoaXMudXNlRGVwdGhzIHx8IGNvbXBpbGVyLnVz
ZURlcHRoczsKKyAgICAgICAgICAgIHRoaXMudXNlQmxvY2tQYXJhbXMgPSB0aGlzLnVzZUJsb2Nr
UGFyYW1zIHx8IGNvbXBpbGVyLnVzZUJsb2NrUGFyYW1zOworICAgICAgICAgICAgY2hpbGQudXNl
RGVwdGhzID0gdGhpcy51c2VEZXB0aHM7CisgICAgICAgICAgICBjaGlsZC51c2VCbG9ja1BhcmFt
cyA9IHRoaXMudXNlQmxvY2tQYXJhbXM7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGNoaWxkLmluZGV4ID0gZXhpc3RpbmcuaW5kZXg7CisgICAgICAgICAgICBjaGlsZC5uYW1lID0g
J3Byb2dyYW0nICsgZXhpc3RpbmcuaW5kZXg7CisKKyAgICAgICAgICAgIHRoaXMudXNlRGVwdGhz
ID0gdGhpcy51c2VEZXB0aHMgfHwgZXhpc3RpbmcudXNlRGVwdGhzOworICAgICAgICAgICAgdGhp
cy51c2VCbG9ja1BhcmFtcyA9IHRoaXMudXNlQmxvY2tQYXJhbXMgfHwgZXhpc3RpbmcudXNlQmxv
Y2tQYXJhbXM7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9LAorICAgICAgbWF0Y2hF
eGlzdGluZ1Byb2dyYW06IGZ1bmN0aW9uIG1hdGNoRXhpc3RpbmdQcm9ncmFtKGNoaWxkKSB7Cisg
ICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB0aGlzLmNvbnRleHQuZW52aXJvbm1lbnRzLmxl
bmd0aDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgdmFyIGVudmlyb25tZW50ID0gdGhpcy5j
b250ZXh0LmVudmlyb25tZW50c1tpXTsKKyAgICAgICAgICBpZiAoZW52aXJvbm1lbnQgJiYgZW52
aXJvbm1lbnQuZXF1YWxzKGNoaWxkKSkgeworICAgICAgICAgICAgcmV0dXJuIGVudmlyb25tZW50
OworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSwKKworICAgICAgcHJvZ3JhbUV4cHJl
c3Npb246IGZ1bmN0aW9uIHByb2dyYW1FeHByZXNzaW9uKGd1aWQpIHsKKyAgICAgICAgdmFyIGNo
aWxkID0gdGhpcy5lbnZpcm9ubWVudC5jaGlsZHJlbltndWlkXSwKKyAgICAgICAgICAgIHByb2dy
YW1QYXJhbXMgPSBbY2hpbGQuaW5kZXgsICdkYXRhJywgY2hpbGQuYmxvY2tQYXJhbXNdOworCisg
ICAgICAgIGlmICh0aGlzLnVzZUJsb2NrUGFyYW1zIHx8IHRoaXMudXNlRGVwdGhzKSB7CisgICAg
ICAgICAgcHJvZ3JhbVBhcmFtcy5wdXNoKCdibG9ja1BhcmFtcycpOworICAgICAgICB9CisgICAg
ICAgIGlmICh0aGlzLnVzZURlcHRocykgeworICAgICAgICAgIHByb2dyYW1QYXJhbXMucHVzaCgn
ZGVwdGhzJyk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gJ2NvbnRhaW5lci5wcm9ncmFt
KCcgKyBwcm9ncmFtUGFyYW1zLmpvaW4oJywgJykgKyAnKSc7CisgICAgICB9LAorCisgICAgICB1
c2VSZWdpc3RlcjogZnVuY3Rpb24gdXNlUmVnaXN0ZXIobmFtZSkgeworICAgICAgICBpZiAoIXRo
aXMucmVnaXN0ZXJzW25hbWVdKSB7CisgICAgICAgICAgdGhpcy5yZWdpc3RlcnNbbmFtZV0gPSB0
cnVlOworICAgICAgICAgIHRoaXMucmVnaXN0ZXJzLmxpc3QucHVzaChuYW1lKTsKKyAgICAgICAg
fQorICAgICAgfSwKKworICAgICAgcHVzaDogZnVuY3Rpb24gcHVzaChleHByKSB7CisgICAgICAg
IGlmICghKGV4cHIgaW5zdGFuY2VvZiBMaXRlcmFsKSkgeworICAgICAgICAgIGV4cHIgPSB0aGlz
LnNvdXJjZS53cmFwKGV4cHIpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5pbmxpbmVTdGFj
ay5wdXNoKGV4cHIpOworICAgICAgICByZXR1cm4gZXhwcjsKKyAgICAgIH0sCisKKyAgICAgIHB1
c2hTdGFja0xpdGVyYWw6IGZ1bmN0aW9uIHB1c2hTdGFja0xpdGVyYWwoaXRlbSkgeworICAgICAg
ICB0aGlzLnB1c2gobmV3IExpdGVyYWwoaXRlbSkpOworICAgICAgfSwKKworICAgICAgcHVzaFNv
dXJjZTogZnVuY3Rpb24gcHVzaFNvdXJjZShzb3VyY2UpIHsKKyAgICAgICAgaWYgKHRoaXMucGVu
ZGluZ0NvbnRlbnQpIHsKKyAgICAgICAgICB0aGlzLnNvdXJjZS5wdXNoKHRoaXMuYXBwZW5kVG9C
dWZmZXIodGhpcy5zb3VyY2UucXVvdGVkU3RyaW5nKHRoaXMucGVuZGluZ0NvbnRlbnQpLCB0aGlz
LnBlbmRpbmdMb2NhdGlvbikpOworICAgICAgICAgIHRoaXMucGVuZGluZ0NvbnRlbnQgPSB1bmRl
ZmluZWQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc291cmNlKSB7CisgICAgICAgICAgdGhp
cy5zb3VyY2UucHVzaChzb3VyY2UpOworICAgICAgICB9CisgICAgICB9LAorCisgICAgICByZXBs
YWNlU3RhY2s6IGZ1bmN0aW9uIHJlcGxhY2VTdGFjayhjYWxsYmFjaykgeworICAgICAgICB2YXIg
cHJlZml4ID0gWycoJ10sCisgICAgICAgICAgICBzdGFjayA9IHVuZGVmaW5lZCwKKyAgICAgICAg
ICAgIGNyZWF0ZWRTdGFjayA9IHVuZGVmaW5lZCwKKyAgICAgICAgICAgIHVzZWRMaXRlcmFsID0g
dW5kZWZpbmVkOworCisgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovCisgICAgICAg
IGlmICghdGhpcy5pc0lubGluZSgpKSB7CisgICAgICAgICAgdGhyb3cgbmV3IF9leGNlcHRpb24y
WydkZWZhdWx0J10oJ3JlcGxhY2VTdGFjayBvbiBub24taW5saW5lJyk7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBXZSB3YW50IHRvIG1lcmdlIHRoZSBpbmxpbmUgc3RhdGVtZW50IGludG8gdGhl
IHJlcGxhY2VtZW50IHN0YXRlbWVudCB2aWEgJywnCisgICAgICAgIHZhciB0b3AgPSB0aGlzLnBv
cFN0YWNrKHRydWUpOworCisgICAgICAgIGlmICh0b3AgaW5zdGFuY2VvZiBMaXRlcmFsKSB7Cisg
ICAgICAgICAgLy8gTGl0ZXJhbHMgZG8gbm90IG5lZWQgdG8gYmUgaW5saW5lZAorICAgICAgICAg
IHN0YWNrID0gW3RvcC52YWx1ZV07CisgICAgICAgICAgcHJlZml4ID0gWycoJywgc3RhY2tdOwor
ICAgICAgICAgIHVzZWRMaXRlcmFsID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAvLyBHZXQgb3IgY3JlYXRlIHRoZSBjdXJyZW50IHN0YWNrIG5hbWUgZm9yIHVzZSBieSB0aGUg
aW5saW5lCisgICAgICAgICAgY3JlYXRlZFN0YWNrID0gdHJ1ZTsKKyAgICAgICAgICB2YXIgX25h
bWUgPSB0aGlzLmluY3JTdGFjaygpOworCisgICAgICAgICAgcHJlZml4ID0gWycoKCcsIHRoaXMu
cHVzaChfbmFtZSksICcgPSAnLCB0b3AsICcpJ107CisgICAgICAgICAgc3RhY2sgPSB0aGlzLnRv
cFN0YWNrKCk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgaXRlbSA9IGNhbGxiYWNrLmNhbGwo
dGhpcywgc3RhY2spOworCisgICAgICAgIGlmICghdXNlZExpdGVyYWwpIHsKKyAgICAgICAgICB0
aGlzLnBvcFN0YWNrKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNyZWF0ZWRTdGFjaykgewor
ICAgICAgICAgIHRoaXMuc3RhY2tTbG90LS07CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5wdXNo
KHByZWZpeC5jb25jYXQoaXRlbSwgJyknKSk7CisgICAgICB9LAorCisgICAgICBpbmNyU3RhY2s6
IGZ1bmN0aW9uIGluY3JTdGFjaygpIHsKKyAgICAgICAgdGhpcy5zdGFja1Nsb3QrKzsKKyAgICAg
ICAgaWYgKHRoaXMuc3RhY2tTbG90ID4gdGhpcy5zdGFja1ZhcnMubGVuZ3RoKSB7CisgICAgICAg
ICAgdGhpcy5zdGFja1ZhcnMucHVzaCgnc3RhY2snICsgdGhpcy5zdGFja1Nsb3QpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0aGlzLnRvcFN0YWNrTmFtZSgpOworICAgICAgfSwKKyAgICAg
IHRvcFN0YWNrTmFtZTogZnVuY3Rpb24gdG9wU3RhY2tOYW1lKCkgeworICAgICAgICByZXR1cm4g
J3N0YWNrJyArIHRoaXMuc3RhY2tTbG90OworICAgICAgfSwKKyAgICAgIGZsdXNoSW5saW5lOiBm
dW5jdGlvbiBmbHVzaElubGluZSgpIHsKKyAgICAgICAgdmFyIGlubGluZVN0YWNrID0gdGhpcy5p
bmxpbmVTdGFjazsKKyAgICAgICAgdGhpcy5pbmxpbmVTdGFjayA9IFtdOworICAgICAgICBmb3Ig
KHZhciBpID0gMCwgbGVuID0gaW5saW5lU3RhY2subGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKKyAg
ICAgICAgICB2YXIgZW50cnkgPSBpbmxpbmVTdGFja1tpXTsKKyAgICAgICAgICAvKiBpc3RhbmJ1
bCBpZ25vcmUgaWYgKi8KKyAgICAgICAgICBpZiAoZW50cnkgaW5zdGFuY2VvZiBMaXRlcmFsKSB7
CisgICAgICAgICAgICB0aGlzLmNvbXBpbGVTdGFjay5wdXNoKGVudHJ5KTsKKyAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgdmFyIHN0YWNrID0gdGhpcy5pbmNyU3RhY2soKTsKKyAgICAg
ICAgICAgIHRoaXMucHVzaFNvdXJjZShbc3RhY2ssICcgPSAnLCBlbnRyeSwgJzsnXSk7CisgICAg
ICAgICAgICB0aGlzLmNvbXBpbGVTdGFjay5wdXNoKHN0YWNrKTsKKyAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgIH0sCisgICAgICBpc0lubGluZTogZnVuY3Rpb24gaXNJbmxpbmUoKSB7Cisg
ICAgICAgIHJldHVybiB0aGlzLmlubGluZVN0YWNrLmxlbmd0aDsKKyAgICAgIH0sCisKKyAgICAg
IHBvcFN0YWNrOiBmdW5jdGlvbiBwb3BTdGFjayh3cmFwcGVkKSB7CisgICAgICAgIHZhciBpbmxp
bmUgPSB0aGlzLmlzSW5saW5lKCksCisgICAgICAgICAgICBpdGVtID0gKGlubGluZSA/IHRoaXMu
aW5saW5lU3RhY2sgOiB0aGlzLmNvbXBpbGVTdGFjaykucG9wKCk7CisKKyAgICAgICAgaWYgKCF3
cmFwcGVkICYmIGl0ZW0gaW5zdGFuY2VvZiBMaXRlcmFsKSB7CisgICAgICAgICAgcmV0dXJuIGl0
ZW0udmFsdWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgaWYgKCFpbmxpbmUpIHsKKyAg
ICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovCisgICAgICAgICAgICBpZiAoIXRo
aXMuc3RhY2tTbG90KSB7CisgICAgICAgICAgICAgIHRocm93IG5ldyBfZXhjZXB0aW9uMlsnZGVm
YXVsdCddKCdJbnZhbGlkIHN0YWNrIHBvcCcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
dGhpcy5zdGFja1Nsb3QtLTsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIGl0ZW07Cisg
ICAgICAgIH0KKyAgICAgIH0sCisKKyAgICAgIHRvcFN0YWNrOiBmdW5jdGlvbiB0b3BTdGFjaygp
IHsKKyAgICAgICAgdmFyIHN0YWNrID0gdGhpcy5pc0lubGluZSgpID8gdGhpcy5pbmxpbmVTdGFj
ayA6IHRoaXMuY29tcGlsZVN0YWNrLAorICAgICAgICAgICAgaXRlbSA9IHN0YWNrW3N0YWNrLmxl
bmd0aCAtIDFdOworCisgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqLworICAgICAgICBp
ZiAoaXRlbSBpbnN0YW5jZW9mIExpdGVyYWwpIHsKKyAgICAgICAgICByZXR1cm4gaXRlbS52YWx1
ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICByZXR1cm4gaXRlbTsKKyAgICAgICAgfQor
ICAgICAgfSwKKworICAgICAgY29udGV4dE5hbWU6IGZ1bmN0aW9uIGNvbnRleHROYW1lKGNvbnRl
eHQpIHsKKyAgICAgICAgaWYgKHRoaXMudXNlRGVwdGhzICYmIGNvbnRleHQpIHsKKyAgICAgICAg
ICByZXR1cm4gJ2RlcHRoc1snICsgY29udGV4dCArICddJzsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICByZXR1cm4gJ2RlcHRoJyArIGNvbnRleHQ7CisgICAgICAgIH0KKyAgICAgIH0sCisK
KyAgICAgIHF1b3RlZFN0cmluZzogZnVuY3Rpb24gcXVvdGVkU3RyaW5nKHN0cikgeworICAgICAg
ICByZXR1cm4gdGhpcy5zb3VyY2UucXVvdGVkU3RyaW5nKHN0cik7CisgICAgICB9LAorCisgICAg
ICBvYmplY3RMaXRlcmFsOiBmdW5jdGlvbiBvYmplY3RMaXRlcmFsKG9iaikgeworICAgICAgICBy
ZXR1cm4gdGhpcy5zb3VyY2Uub2JqZWN0TGl0ZXJhbChvYmopOworICAgICAgfSwKKworICAgICAg
YWxpYXNhYmxlOiBmdW5jdGlvbiBhbGlhc2FibGUobmFtZSkgeworICAgICAgICB2YXIgcmV0ID0g
dGhpcy5hbGlhc2VzW25hbWVdOworICAgICAgICBpZiAocmV0KSB7CisgICAgICAgICAgcmV0LnJl
ZmVyZW5jZUNvdW50Kys7CisgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldCA9IHRoaXMuYWxpYXNlc1tuYW1lXSA9IHRoaXMuc291cmNlLndyYXAobmFtZSk7Cisg
ICAgICAgIHJldC5hbGlhc2FibGUgPSB0cnVlOworICAgICAgICByZXQucmVmZXJlbmNlQ291bnQg
PSAxOworCisgICAgICAgIHJldHVybiByZXQ7CisgICAgICB9LAorCisgICAgICBzZXR1cEhlbHBl
cjogZnVuY3Rpb24gc2V0dXBIZWxwZXIocGFyYW1TaXplLCBuYW1lLCBibG9ja0hlbHBlcikgewor
ICAgICAgICB2YXIgcGFyYW1zID0gW10sCisgICAgICAgICAgICBwYXJhbXNJbml0ID0gdGhpcy5z
ZXR1cEhlbHBlckFyZ3MobmFtZSwgcGFyYW1TaXplLCBwYXJhbXMsIGJsb2NrSGVscGVyKTsKKyAg
ICAgICAgdmFyIGZvdW5kSGVscGVyID0gdGhpcy5uYW1lTG9va3VwKCdoZWxwZXJzJywgbmFtZSwg
J2hlbHBlcicpLAorICAgICAgICAgICAgY2FsbENvbnRleHQgPSB0aGlzLmFsaWFzYWJsZSh0aGlz
LmNvbnRleHROYW1lKDApICsgJyAhPSBudWxsID8gJyArIHRoaXMuY29udGV4dE5hbWUoMCkgKyAn
IDoge30nKTsKKworICAgICAgICByZXR1cm4geworICAgICAgICAgIHBhcmFtczogcGFyYW1zLAor
ICAgICAgICAgIHBhcmFtc0luaXQ6IHBhcmFtc0luaXQsCisgICAgICAgICAgbmFtZTogZm91bmRI
ZWxwZXIsCisgICAgICAgICAgY2FsbFBhcmFtczogW2NhbGxDb250ZXh0XS5jb25jYXQocGFyYW1z
KQorICAgICAgICB9OworICAgICAgfSwKKworICAgICAgc2V0dXBQYXJhbXM6IGZ1bmN0aW9uIHNl
dHVwUGFyYW1zKGhlbHBlciwgcGFyYW1TaXplLCBwYXJhbXMpIHsKKyAgICAgICAgdmFyIG9wdGlv
bnMgPSB7fSwKKyAgICAgICAgICAgIGNvbnRleHRzID0gW10sCisgICAgICAgICAgICB0eXBlcyA9
IFtdLAorICAgICAgICAgICAgaWRzID0gW10sCisgICAgICAgICAgICBvYmplY3RBcmdzID0gIXBh
cmFtcywKKyAgICAgICAgICAgIHBhcmFtID0gdW5kZWZpbmVkOworCisgICAgICAgIGlmIChvYmpl
Y3RBcmdzKSB7CisgICAgICAgICAgcGFyYW1zID0gW107CisgICAgICAgIH0KKworICAgICAgICBv
cHRpb25zLm5hbWUgPSB0aGlzLnF1b3RlZFN0cmluZyhoZWxwZXIpOworICAgICAgICBvcHRpb25z
Lmhhc2ggPSB0aGlzLnBvcFN0YWNrKCk7CisKKyAgICAgICAgaWYgKHRoaXMudHJhY2tJZHMpIHsK
KyAgICAgICAgICBvcHRpb25zLmhhc2hJZHMgPSB0aGlzLnBvcFN0YWNrKCk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7CisgICAgICAgICAgb3B0aW9ucy5oYXNo
VHlwZXMgPSB0aGlzLnBvcFN0YWNrKCk7CisgICAgICAgICAgb3B0aW9ucy5oYXNoQ29udGV4dHMg
PSB0aGlzLnBvcFN0YWNrKCk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgaW52ZXJzZSA9IHRo
aXMucG9wU3RhY2soKSwKKyAgICAgICAgICAgIHByb2dyYW0gPSB0aGlzLnBvcFN0YWNrKCk7CisK
KyAgICAgICAgLy8gQXZvaWQgc2V0dGluZyBmbiBhbmQgaW52ZXJzZSBpZiBuZWl0aGVyIGFyZSBz
ZXQuIFRoaXMgYWxsb3dzCisgICAgICAgIC8vIGhlbHBlcnMgdG8gZG8gYSBjaGVjayBmb3IgYGlm
IChvcHRpb25zLmZuKWAKKyAgICAgICAgaWYgKHByb2dyYW0gfHwgaW52ZXJzZSkgeworICAgICAg
ICAgIG9wdGlvbnMuZm4gPSBwcm9ncmFtIHx8ICdjb250YWluZXIubm9vcCc7CisgICAgICAgICAg
b3B0aW9ucy5pbnZlcnNlID0gaW52ZXJzZSB8fCAnY29udGFpbmVyLm5vb3AnOworICAgICAgICB9
CisKKyAgICAgICAgLy8gVGhlIHBhcmFtZXRlcnMgZ28gb24gdG8gdGhlIHN0YWNrIGluIG9yZGVy
IChtYWtpbmcgc3VyZSB0aGF0IHRoZXkgYXJlIGV2YWx1YXRlZCBpbiBvcmRlcikKKyAgICAgICAg
Ly8gc28gd2UgbmVlZCB0byBwb3AgdGhlbSBvZmYgdGhlIHN0YWNrIGluIHJldmVyc2Ugb3JkZXIK
KyAgICAgICAgdmFyIGkgPSBwYXJhbVNpemU7CisgICAgICAgIHdoaWxlIChpLS0pIHsKKyAgICAg
ICAgICBwYXJhbSA9IHRoaXMucG9wU3RhY2soKTsKKyAgICAgICAgICBwYXJhbXNbaV0gPSBwYXJh
bTsKKworICAgICAgICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7CisgICAgICAgICAgICBpZHNbaV0g
PSB0aGlzLnBvcFN0YWNrKCk7CisgICAgICAgICAgfQorICAgICAgICAgIGlmICh0aGlzLnN0cmlu
Z1BhcmFtcykgeworICAgICAgICAgICAgdHlwZXNbaV0gPSB0aGlzLnBvcFN0YWNrKCk7CisgICAg
ICAgICAgICBjb250ZXh0c1tpXSA9IHRoaXMucG9wU3RhY2soKTsKKyAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBpZiAob2JqZWN0QXJncykgeworICAgICAgICAgIG9wdGlvbnMuYXJn
cyA9IHRoaXMuc291cmNlLmdlbmVyYXRlQXJyYXkocGFyYW1zKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7CisgICAgICAgICAgb3B0aW9ucy5pZHMgPSB0aGlzLnNv
dXJjZS5nZW5lcmF0ZUFycmF5KGlkcyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuc3Ry
aW5nUGFyYW1zKSB7CisgICAgICAgICAgb3B0aW9ucy50eXBlcyA9IHRoaXMuc291cmNlLmdlbmVy
YXRlQXJyYXkodHlwZXMpOworICAgICAgICAgIG9wdGlvbnMuY29udGV4dHMgPSB0aGlzLnNvdXJj
ZS5nZW5lcmF0ZUFycmF5KGNvbnRleHRzKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0aGlz
Lm9wdGlvbnMuZGF0YSkgeworICAgICAgICAgIG9wdGlvbnMuZGF0YSA9ICdkYXRhJzsKKyAgICAg
ICAgfQorICAgICAgICBpZiAodGhpcy51c2VCbG9ja1BhcmFtcykgeworICAgICAgICAgIG9wdGlv
bnMuYmxvY2tQYXJhbXMgPSAnYmxvY2tQYXJhbXMnOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBvcHRpb25zOworICAgICAgfSwKKworICAgICAgc2V0dXBIZWxwZXJBcmdzOiBmdW5jdGlvbiBz
ZXR1cEhlbHBlckFyZ3MoaGVscGVyLCBwYXJhbVNpemUsIHBhcmFtcywgdXNlUmVnaXN0ZXIpIHsK
KyAgICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLnNldHVwUGFyYW1zKGhlbHBlciwgcGFyYW1TaXpl
LCBwYXJhbXMpOworICAgICAgICBvcHRpb25zID0gdGhpcy5vYmplY3RMaXRlcmFsKG9wdGlvbnMp
OworICAgICAgICBpZiAodXNlUmVnaXN0ZXIpIHsKKyAgICAgICAgICB0aGlzLnVzZVJlZ2lzdGVy
KCdvcHRpb25zJyk7CisgICAgICAgICAgcGFyYW1zLnB1c2goJ29wdGlvbnMnKTsKKyAgICAgICAg
ICByZXR1cm4gWydvcHRpb25zPScsIG9wdGlvbnNdOworICAgICAgICB9IGVsc2UgaWYgKHBhcmFt
cykgeworICAgICAgICAgIHBhcmFtcy5wdXNoKG9wdGlvbnMpOworICAgICAgICAgIHJldHVybiAn
JzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICByZXR1cm4gb3B0aW9uczsKKyAgICAgICAg
fQorICAgICAgfQorICAgIH07CisKKyAgICAoZnVuY3Rpb24gKCkgeworICAgICAgdmFyIHJlc2Vy
dmVkV29yZHMgPSAoJ2JyZWFrIGVsc2UgbmV3IHZhcicgKyAnIGNhc2UgZmluYWxseSByZXR1cm4g
dm9pZCcgKyAnIGNhdGNoIGZvciBzd2l0Y2ggd2hpbGUnICsgJyBjb250aW51ZSBmdW5jdGlvbiB0
aGlzIHdpdGgnICsgJyBkZWZhdWx0IGlmIHRocm93JyArICcgZGVsZXRlIGluIHRyeScgKyAnIGRv
IGluc3RhbmNlb2YgdHlwZW9mJyArICcgYWJzdHJhY3QgZW51bSBpbnQgc2hvcnQnICsgJyBib29s
ZWFuIGV4cG9ydCBpbnRlcmZhY2Ugc3RhdGljJyArICcgYnl0ZSBleHRlbmRzIGxvbmcgc3VwZXIn
ICsgJyBjaGFyIGZpbmFsIG5hdGl2ZSBzeW5jaHJvbml6ZWQnICsgJyBjbGFzcyBmbG9hdCBwYWNr
YWdlIHRocm93cycgKyAnIGNvbnN0IGdvdG8gcHJpdmF0ZSB0cmFuc2llbnQnICsgJyBkZWJ1Z2dl
ciBpbXBsZW1lbnRzIHByb3RlY3RlZCB2b2xhdGlsZScgKyAnIGRvdWJsZSBpbXBvcnQgcHVibGlj
IGxldCB5aWVsZCBhd2FpdCcgKyAnIG51bGwgdHJ1ZSBmYWxzZScpLnNwbGl0KCcgJyk7CisKKyAg
ICAgIHZhciBjb21waWxlcldvcmRzID0gSmF2YVNjcmlwdENvbXBpbGVyLlJFU0VSVkVEX1dPUkRT
ID0ge307CisKKyAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcmVzZXJ2ZWRXb3Jkcy5sZW5ndGg7
IGkgPCBsOyBpKyspIHsKKyAgICAgICAgY29tcGlsZXJXb3Jkc1tyZXNlcnZlZFdvcmRzW2ldXSA9
IHRydWU7CisgICAgICB9CisgICAgfSkoKTsKKworICAgIEphdmFTY3JpcHRDb21waWxlci5pc1Zh
bGlkSmF2YVNjcmlwdFZhcmlhYmxlTmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICByZXR1
cm4gIUphdmFTY3JpcHRDb21waWxlci5SRVNFUlZFRF9XT1JEU1tuYW1lXSAmJiAvXlthLXpBLVpf
JF1bMC05YS16QS1aXyRdKiQvLnRlc3QobmFtZSk7CisgICAgfTsKKworICAgIGZ1bmN0aW9uIHN0
cmljdExvb2t1cChyZXF1aXJlVGVybWluYWwsIGNvbXBpbGVyLCBwYXJ0cywgdHlwZSkgeworICAg
ICAgdmFyIHN0YWNrID0gY29tcGlsZXIucG9wU3RhY2soKSwKKyAgICAgICAgICBpID0gMCwKKyAg
ICAgICAgICBsZW4gPSBwYXJ0cy5sZW5ndGg7CisgICAgICBpZiAocmVxdWlyZVRlcm1pbmFsKSB7
CisgICAgICAgIGxlbi0tOworICAgICAgfQorCisgICAgICBmb3IgKDsgaSA8IGxlbjsgaSsrKSB7
CisgICAgICAgIHN0YWNrID0gY29tcGlsZXIubmFtZUxvb2t1cChzdGFjaywgcGFydHNbaV0sIHR5
cGUpOworICAgICAgfQorCisgICAgICBpZiAocmVxdWlyZVRlcm1pbmFsKSB7CisgICAgICAgIHJl
dHVybiBbY29tcGlsZXIuYWxpYXNhYmxlKCdjb250YWluZXIuc3RyaWN0JyksICcoJywgc3RhY2ss
ICcsICcsIGNvbXBpbGVyLnF1b3RlZFN0cmluZyhwYXJ0c1tpXSksICcpJ107CisgICAgICB9IGVs
c2UgeworICAgICAgICByZXR1cm4gc3RhY2s7CisgICAgICB9CisgICAgfQorCisgICAgZXhwb3J0
c1snZGVmYXVsdCddID0gSmF2YVNjcmlwdENvbXBpbGVyOworICAgIG1vZHVsZS5leHBvcnRzID0g
ZXhwb3J0c1snZGVmYXVsdCddOworCisvKioqLyB9LAorLyogMzIgKi8KKy8qKiovIGZ1bmN0aW9u
KG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisgICAgLyogZ2xvYmFs
IGRlZmluZSAqLworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIGV4cG9ydHMuX19lc01vZHVsZSA9
IHRydWU7CisKKyAgICB2YXIgX3V0aWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTsKKworICAg
IHZhciBTb3VyY2VOb2RlID0gdW5kZWZpbmVkOworCisgICAgdHJ5IHsKKyAgICAgIC8qIGlzdGFu
YnVsIGlnbm9yZSBuZXh0ICovCisgICAgICBpZiAoZmFsc2UpIHsKKyAgICAgICAgLy8gV2UgZG9u
J3Qgc3VwcG9ydCB0aGlzIGluIEFNRCBlbnZpcm9ubWVudHMuIEZvciB0aGVzZSBlbnZpcm9ubWVu
dHMsIHdlIGFzdXNtZSB0aGF0CisgICAgICAgIC8vIHRoZXkgYXJlIHJ1bm5pbmcgb24gdGhlIGJy
b3dzZXIgYW5kIHRodXMgaGF2ZSBubyBuZWVkIGZvciB0aGUgc291cmNlLW1hcCBsaWJyYXJ5Lgor
ICAgICAgICB2YXIgU291cmNlTWFwID0gcmVxdWlyZSgnc291cmNlLW1hcCcpOworICAgICAgICBT
b3VyY2VOb2RlID0gU291cmNlTWFwLlNvdXJjZU5vZGU7CisgICAgICB9CisgICAgfSBjYXRjaCAo
ZXJyKSB7fQorICAgIC8qIE5PUCAqLworCisgICAgLyogaXN0YW5idWwgaWdub3JlIGlmOiB0ZXN0
ZWQgYnV0IG5vdCBjb3ZlcmVkIGluIGlzdGFuYnVsIGR1ZSB0byBkaXN0IGJ1aWxkICAqLworICAg
IGlmICghU291cmNlTm9kZSkgeworICAgICAgU291cmNlTm9kZSA9IGZ1bmN0aW9uIChsaW5lLCBj
b2x1bW4sIHNyY0ZpbGUsIGNodW5rcykgeworICAgICAgICB0aGlzLnNyYyA9ICcnOworICAgICAg
ICBpZiAoY2h1bmtzKSB7CisgICAgICAgICAgdGhpcy5hZGQoY2h1bmtzKTsKKyAgICAgICAgfQor
ICAgICAgfTsKKyAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovCisgICAgICBTb3VyY2VO
b2RlLnByb3RvdHlwZSA9IHsKKyAgICAgICAgYWRkOiBmdW5jdGlvbiBhZGQoY2h1bmtzKSB7Cisg
ICAgICAgICAgaWYgKF91dGlscy5pc0FycmF5KGNodW5rcykpIHsKKyAgICAgICAgICAgIGNodW5r
cyA9IGNodW5rcy5qb2luKCcnKTsKKyAgICAgICAgICB9CisgICAgICAgICAgdGhpcy5zcmMgKz0g
Y2h1bmtzOworICAgICAgICB9LAorICAgICAgICBwcmVwZW5kOiBmdW5jdGlvbiBwcmVwZW5kKGNo
dW5rcykgeworICAgICAgICAgIGlmIChfdXRpbHMuaXNBcnJheShjaHVua3MpKSB7CisgICAgICAg
ICAgICBjaHVua3MgPSBjaHVua3Muam9pbignJyk7CisgICAgICAgICAgfQorICAgICAgICAgIHRo
aXMuc3JjID0gY2h1bmtzICsgdGhpcy5zcmM7CisgICAgICAgIH0sCisgICAgICAgIHRvU3RyaW5n
V2l0aFNvdXJjZU1hcDogZnVuY3Rpb24gdG9TdHJpbmdXaXRoU291cmNlTWFwKCkgeworICAgICAg
ICAgIHJldHVybiB7IGNvZGU6IHRoaXMudG9TdHJpbmcoKSB9OworICAgICAgICB9LAorICAgICAg
ICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoKSB7CisgICAgICAgICAgcmV0dXJuIHRoaXMu
c3JjOworICAgICAgICB9CisgICAgICB9OworICAgIH0KKworICAgIGZ1bmN0aW9uIGNhc3RDaHVu
ayhjaHVuaywgY29kZUdlbiwgbG9jKSB7CisgICAgICBpZiAoX3V0aWxzLmlzQXJyYXkoY2h1bmsp
KSB7CisgICAgICAgIHZhciByZXQgPSBbXTsKKworICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVu
ID0gY2h1bmsubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgICByZXQucHVzaChjb2Rl
R2VuLndyYXAoY2h1bmtbaV0sIGxvYykpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXQ7
CisgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjaHVuayA9PT0gJ2Jvb2xlYW4nIHx8IHR5cGVvZiBj
aHVuayA9PT0gJ251bWJlcicpIHsKKyAgICAgICAgLy8gSGFuZGxlIHByaW1pdGl2ZXMgdGhhdCB0
aGUgU291cmNlTm9kZSB3aWxsIHRocm93IHVwIG9uCisgICAgICAgIHJldHVybiBjaHVuayArICcn
OworICAgICAgfQorICAgICAgcmV0dXJuIGNodW5rOworICAgIH0KKworICAgIGZ1bmN0aW9uIENv
ZGVHZW4oc3JjRmlsZSkgeworICAgICAgdGhpcy5zcmNGaWxlID0gc3JjRmlsZTsKKyAgICAgIHRo
aXMuc291cmNlID0gW107CisgICAgfQorCisgICAgQ29kZUdlbi5wcm90b3R5cGUgPSB7CisgICAg
ICBpc0VtcHR5OiBmdW5jdGlvbiBpc0VtcHR5KCkgeworICAgICAgICByZXR1cm4gIXRoaXMuc291
cmNlLmxlbmd0aDsKKyAgICAgIH0sCisgICAgICBwcmVwZW5kOiBmdW5jdGlvbiBwcmVwZW5kKHNv
dXJjZSwgbG9jKSB7CisgICAgICAgIHRoaXMuc291cmNlLnVuc2hpZnQodGhpcy53cmFwKHNvdXJj
ZSwgbG9jKSk7CisgICAgICB9LAorICAgICAgcHVzaDogZnVuY3Rpb24gcHVzaChzb3VyY2UsIGxv
YykgeworICAgICAgICB0aGlzLnNvdXJjZS5wdXNoKHRoaXMud3JhcChzb3VyY2UsIGxvYykpOwor
ICAgICAgfSwKKworICAgICAgbWVyZ2U6IGZ1bmN0aW9uIG1lcmdlKCkgeworICAgICAgICB2YXIg
c291cmNlID0gdGhpcy5lbXB0eSgpOworICAgICAgICB0aGlzLmVhY2goZnVuY3Rpb24gKGxpbmUp
IHsKKyAgICAgICAgICBzb3VyY2UuYWRkKFsnICAnLCBsaW5lLCAnXG4nXSk7CisgICAgICAgIH0p
OworICAgICAgICByZXR1cm4gc291cmNlOworICAgICAgfSwKKworICAgICAgZWFjaDogZnVuY3Rp
b24gZWFjaChpdGVyKSB7CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB0aGlzLnNvdXJj
ZS5sZW5ndGg7IGkgPCBsZW47IGkrKykgeworICAgICAgICAgIGl0ZXIodGhpcy5zb3VyY2VbaV0p
OworICAgICAgICB9CisgICAgICB9LAorCisgICAgICBlbXB0eTogZnVuY3Rpb24gZW1wdHkoKSB7
CisgICAgICAgIHZhciBsb2MgPSB0aGlzLmN1cnJlbnRMb2NhdGlvbiB8fCB7IHN0YXJ0OiB7fSB9
OworICAgICAgICByZXR1cm4gbmV3IFNvdXJjZU5vZGUobG9jLnN0YXJ0LmxpbmUsIGxvYy5zdGFy
dC5jb2x1bW4sIHRoaXMuc3JjRmlsZSk7CisgICAgICB9LAorICAgICAgd3JhcDogZnVuY3Rpb24g
d3JhcChjaHVuaykgeworICAgICAgICB2YXIgbG9jID0gYXJndW1lbnRzLmxlbmd0aCA8PSAxIHx8
IGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkID8gdGhpcy5jdXJyZW50TG9jYXRpb24gfHwgeyBz
dGFydDoge30gfSA6IGFyZ3VtZW50c1sxXTsKKworICAgICAgICBpZiAoY2h1bmsgaW5zdGFuY2Vv
ZiBTb3VyY2VOb2RlKSB7CisgICAgICAgICAgcmV0dXJuIGNodW5rOworICAgICAgICB9CisKKyAg
ICAgICAgY2h1bmsgPSBjYXN0Q2h1bmsoY2h1bmssIHRoaXMsIGxvYyk7CisKKyAgICAgICAgcmV0
dXJuIG5ldyBTb3VyY2VOb2RlKGxvYy5zdGFydC5saW5lLCBsb2Muc3RhcnQuY29sdW1uLCB0aGlz
LnNyY0ZpbGUsIGNodW5rKTsKKyAgICAgIH0sCisKKyAgICAgIGZ1bmN0aW9uQ2FsbDogZnVuY3Rp
b24gZnVuY3Rpb25DYWxsKGZuLCB0eXBlLCBwYXJhbXMpIHsKKyAgICAgICAgcGFyYW1zID0gdGhp
cy5nZW5lcmF0ZUxpc3QocGFyYW1zKTsKKyAgICAgICAgcmV0dXJuIHRoaXMud3JhcChbZm4sIHR5
cGUgPyAnLicgKyB0eXBlICsgJygnIDogJygnLCBwYXJhbXMsICcpJ10pOworICAgICAgfSwKKwor
ICAgICAgcXVvdGVkU3RyaW5nOiBmdW5jdGlvbiBxdW90ZWRTdHJpbmcoc3RyKSB7CisgICAgICAg
IHJldHVybiAnIicgKyAoc3RyICsgJycpLnJlcGxhY2UoL1xcL2csICdcXFxcJykucmVwbGFjZSgv
Ii9nLCAnXFwiJykucmVwbGFjZSgvXG4vZywgJ1xcbicpLnJlcGxhY2UoL1xyL2csICdcXHInKS5y
ZXBsYWNlKC9cdTIwMjgvZywgJ1xcdTIwMjgnKSAvLyBQZXIgRWNtYS0yNjIgNy4zICsgNy44LjQK
KyAgICAgICAgLnJlcGxhY2UoL1x1MjAyOS9nLCAnXFx1MjAyOScpICsgJyInOworICAgICAgfSwK
KworICAgICAgb2JqZWN0TGl0ZXJhbDogZnVuY3Rpb24gb2JqZWN0TGl0ZXJhbChvYmopIHsKKyAg
ICAgICAgdmFyIHBhaXJzID0gW107CisKKyAgICAgICAgZm9yICh2YXIga2V5IGluIG9iaikgewor
ICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkgeworICAgICAgICAgICAgdmFy
IHZhbHVlID0gY2FzdENodW5rKG9ialtrZXldLCB0aGlzKTsKKyAgICAgICAgICAgIGlmICh2YWx1
ZSAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAgICAgcGFpcnMucHVzaChbdGhpcy5xdW90
ZWRTdHJpbmcoa2V5KSwgJzonLCB2YWx1ZV0pOworICAgICAgICAgICAgfQorICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIHZhciByZXQgPSB0aGlzLmdlbmVyYXRlTGlzdChwYWlycyk7
CisgICAgICAgIHJldC5wcmVwZW5kKCd7Jyk7CisgICAgICAgIHJldC5hZGQoJ30nKTsKKyAgICAg
ICAgcmV0dXJuIHJldDsKKyAgICAgIH0sCisKKyAgICAgIGdlbmVyYXRlTGlzdDogZnVuY3Rpb24g
Z2VuZXJhdGVMaXN0KGVudHJpZXMpIHsKKyAgICAgICAgdmFyIHJldCA9IHRoaXMuZW1wdHkoKTsK
KworICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gZW50cmllcy5sZW5ndGg7IGkgPCBsZW47
IGkrKykgeworICAgICAgICAgIGlmIChpKSB7CisgICAgICAgICAgICByZXQuYWRkKCcsJyk7Cisg
ICAgICAgICAgfQorCisgICAgICAgICAgcmV0LmFkZChjYXN0Q2h1bmsoZW50cmllc1tpXSwgdGhp
cykpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgIH0sCisKKyAgICAg
IGdlbmVyYXRlQXJyYXk6IGZ1bmN0aW9uIGdlbmVyYXRlQXJyYXkoZW50cmllcykgeworICAgICAg
ICB2YXIgcmV0ID0gdGhpcy5nZW5lcmF0ZUxpc3QoZW50cmllcyk7CisgICAgICAgIHJldC5wcmVw
ZW5kKCdbJyk7CisgICAgICAgIHJldC5hZGQoJ10nKTsKKworICAgICAgICByZXR1cm4gcmV0Owor
ICAgICAgfQorICAgIH07CisKKyAgICBleHBvcnRzWydkZWZhdWx0J10gPSBDb2RlR2VuOworICAg
IG1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddOworCisvKioqLyB9CisvKioqKioq
LyBdKQorfSk7Cis7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvanF1ZXJ5L25vZGVfbW9kdWxlcy9qcXVlcnkvZGlzdC9qcXVlcnkuanMgYi9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9qcXVlcnkvbm9kZV9tb2R1bGVzL2pxdWVyeS9kaXN0L2pxdWVyeS5qcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5lMWFlYTI5M2EzM2ZhNGIyYjg3ZmFiYjQwNjBlNzYyNmRjMmE0ODkxCi0tLSAvZGV2L251
bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5L25vZGVfbW9kdWxlcy9qcXVlcnkvZGlzdC9qcXVl
cnkuanMKQEAgLTAsMCArMSwxMDIyMCBAQAorLyohCisgKiBqUXVlcnkgSmF2YVNjcmlwdCBMaWJy
YXJ5IHYzLjEuMQorICogaHR0cHM6Ly9qcXVlcnkuY29tLworICoKKyAqIEluY2x1ZGVzIFNpenps
ZS5qcworICogaHR0cHM6Ly9zaXp6bGVqcy5jb20vCisgKgorICogQ29weXJpZ2h0IGpRdWVyeSBG
b3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMKKyAqIFJlbGVhc2VkIHVuZGVyIHRoZSBN
SVQgbGljZW5zZQorICogaHR0cHM6Ly9qcXVlcnkub3JnL2xpY2Vuc2UKKyAqCisgKiBEYXRlOiAy
MDE2LTA5LTIyVDIyOjMwWgorICovCisoIGZ1bmN0aW9uKCBnbG9iYWwsIGZhY3RvcnkgKSB7CisK
KyAgICAidXNlIHN0cmljdCI7CisKKyAgICBpZiAoIHR5cGVvZiBtb2R1bGUgPT09ICJvYmplY3Qi
ICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gIm9iamVjdCIgKSB7CisKKyAgICAgICAgLy8g
Rm9yIENvbW1vbkpTIGFuZCBDb21tb25KUy1saWtlIGVudmlyb25tZW50cyB3aGVyZSBhIHByb3Bl
ciBgd2luZG93YAorICAgICAgICAvLyBpcyBwcmVzZW50LCBleGVjdXRlIHRoZSBmYWN0b3J5IGFu
ZCBnZXQgalF1ZXJ5LgorICAgICAgICAvLyBGb3IgZW52aXJvbm1lbnRzIHRoYXQgZG8gbm90IGhh
dmUgYSBgd2luZG93YCB3aXRoIGEgYGRvY3VtZW50YAorICAgICAgICAvLyAoc3VjaCBhcyBOb2Rl
LmpzKSwgZXhwb3NlIGEgZmFjdG9yeSBhcyBtb2R1bGUuZXhwb3J0cy4KKyAgICAgICAgLy8gVGhp
cyBhY2NlbnR1YXRlcyB0aGUgbmVlZCBmb3IgdGhlIGNyZWF0aW9uIG9mIGEgcmVhbCBgd2luZG93
YC4KKyAgICAgICAgLy8gZS5nLiB2YXIgalF1ZXJ5ID0gcmVxdWlyZSgianF1ZXJ5Iikod2luZG93
KTsKKyAgICAgICAgLy8gU2VlIHRpY2tldCAjMTQ1NDkgZm9yIG1vcmUgaW5mby4KKyAgICAgICAg
bW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwuZG9jdW1lbnQgPworICAgICAgICAgICAgZmFjdG9yeSgg
Z2xvYmFsLCB0cnVlICkgOgorICAgICAgICAgICAgZnVuY3Rpb24oIHcgKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCAhdy5kb2N1bWVudCApIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCAialF1ZXJ5IHJlcXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVudCIgKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhY3RvcnkoIHcgKTsKKyAg
ICAgICAgICAgIH07CisgICAgfSBlbHNlIHsKKyAgICAgICAgZmFjdG9yeSggZ2xvYmFsICk7Cisg
ICAgfQorCisvLyBQYXNzIHRoaXMgaWYgd2luZG93IGlzIG5vdCBkZWZpbmVkIHlldAorfSApKCB0
eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiA/IHdpbmRvdyA6IHRoaXMsIGZ1bmN0aW9uKCB3
aW5kb3csIG5vR2xvYmFsICkgeworCisvLyBFZGdlIDw9IDEyIC0gMTMrLCBGaXJlZm94IDw9MTgg
LSA0NSssIElFIDEwIC0gMTEsIFNhZmFyaSA1LjEgLSA5KywgaU9TIDYgLSA5LjEKKy8vIHRocm93
IGV4Y2VwdGlvbnMgd2hlbiBub24tc3RyaWN0IGNvZGUgKGUuZy4sIEFTUC5ORVQgNC41KSBhY2Nl
c3NlcyBzdHJpY3QgbW9kZQorLy8gYXJndW1lbnRzLmNhbGxlZS5jYWxsZXIgKHRyYWMtMTMzMzUp
LiBCdXQgYXMgb2YgalF1ZXJ5IDMuMCAoMjAxNiksIHN0cmljdCBtb2RlIHNob3VsZCBiZSBjb21t
b24KKy8vIGVub3VnaCB0aGF0IGFsbCBzdWNoIGF0dGVtcHRzIGFyZSBndWFyZGVkIGluIGEgdHJ5
IGJsb2NrLgorInVzZSBzdHJpY3QiOworCit2YXIgYXJyID0gW107CisKK3ZhciBkb2N1bWVudCA9
IHdpbmRvdy5kb2N1bWVudDsKKwordmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9m
OworCit2YXIgc2xpY2UgPSBhcnIuc2xpY2U7CisKK3ZhciBjb25jYXQgPSBhcnIuY29uY2F0Owor
Cit2YXIgcHVzaCA9IGFyci5wdXNoOworCit2YXIgaW5kZXhPZiA9IGFyci5pbmRleE9mOworCit2
YXIgY2xhc3MydHlwZSA9IHt9OworCit2YXIgdG9TdHJpbmcgPSBjbGFzczJ0eXBlLnRvU3RyaW5n
OworCit2YXIgaGFzT3duID0gY2xhc3MydHlwZS5oYXNPd25Qcm9wZXJ0eTsKKwordmFyIGZuVG9T
dHJpbmcgPSBoYXNPd24udG9TdHJpbmc7CisKK3ZhciBPYmplY3RGdW5jdGlvblN0cmluZyA9IGZu
VG9TdHJpbmcuY2FsbCggT2JqZWN0ICk7CisKK3ZhciBzdXBwb3J0ID0ge307CisKKworCisgICAg
ZnVuY3Rpb24gRE9NRXZhbCggY29kZSwgZG9jICkgeworICAgICAgICBkb2MgPSBkb2MgfHwgZG9j
dW1lbnQ7CisKKyAgICAgICAgdmFyIHNjcmlwdCA9IGRvYy5jcmVhdGVFbGVtZW50KCAic2NyaXB0
IiApOworCisgICAgICAgIHNjcmlwdC50ZXh0ID0gY29kZTsKKyAgICAgICAgZG9jLmhlYWQuYXBw
ZW5kQ2hpbGQoIHNjcmlwdCApLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHNjcmlwdCApOworICAg
IH0KKy8qIGdsb2JhbCBTeW1ib2wgKi8KKy8vIERlZmluaW5nIHRoaXMgZ2xvYmFsIGluIC5lc2xp
bnRyYy5qc29uIHdvdWxkIGNyZWF0ZSBhIGRhbmdlciBvZiB1c2luZyB0aGUgZ2xvYmFsCisvLyB1
bmd1YXJkZWQgaW4gYW5vdGhlciBwbGFjZSwgaXQgc2VlbXMgc2FmZXIgdG8gZGVmaW5lIGdsb2Jh
bCBvbmx5IGZvciB0aGlzIG1vZHVsZQorCisKKwordmFyCisgICAgdmVyc2lvbiA9ICIzLjEuMSIs
CisKKyAgICAvLyBEZWZpbmUgYSBsb2NhbCBjb3B5IG9mIGpRdWVyeQorICAgIGpRdWVyeSA9IGZ1
bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHsKKworICAgICAgICAvLyBUaGUgalF1ZXJ5IG9i
amVjdCBpcyBhY3R1YWxseSBqdXN0IHRoZSBpbml0IGNvbnN0cnVjdG9yICdlbmhhbmNlZCcKKyAg
ICAgICAgLy8gTmVlZCBpbml0IGlmIGpRdWVyeSBpcyBjYWxsZWQgKGp1c3QgYWxsb3cgZXJyb3Ig
dG8gYmUgdGhyb3duIGlmIG5vdCBpbmNsdWRlZCkKKyAgICAgICAgcmV0dXJuIG5ldyBqUXVlcnku
Zm4uaW5pdCggc2VsZWN0b3IsIGNvbnRleHQgKTsKKyAgICB9LAorCisgICAgLy8gU3VwcG9ydDog
QW5kcm9pZCA8PTQuMCBvbmx5CisgICAgLy8gTWFrZSBzdXJlIHdlIHRyaW0gQk9NIGFuZCBOQlNQ
CisgICAgcnRyaW0gPSAvXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csCisKKyAg
ICAvLyBNYXRjaGVzIGRhc2hlZCBzdHJpbmcgZm9yIGNhbWVsaXppbmcKKyAgICBybXNQcmVmaXgg
PSAvXi1tcy0vLAorICAgIHJkYXNoQWxwaGEgPSAvLShbYS16XSkvZywKKworICAgIC8vIFVzZWQg
YnkgalF1ZXJ5LmNhbWVsQ2FzZSBhcyBjYWxsYmFjayB0byByZXBsYWNlKCkKKyAgICBmY2FtZWxD
YXNlID0gZnVuY3Rpb24oIGFsbCwgbGV0dGVyICkgeworICAgICAgICByZXR1cm4gbGV0dGVyLnRv
VXBwZXJDYXNlKCk7CisgICAgfTsKKworalF1ZXJ5LmZuID0galF1ZXJ5LnByb3RvdHlwZSA9IHsK
KworICAgIC8vIFRoZSBjdXJyZW50IHZlcnNpb24gb2YgalF1ZXJ5IGJlaW5nIHVzZWQKKyAgICBq
cXVlcnk6IHZlcnNpb24sCisKKyAgICBjb25zdHJ1Y3RvcjogalF1ZXJ5LAorCisgICAgLy8gVGhl
IGRlZmF1bHQgbGVuZ3RoIG9mIGEgalF1ZXJ5IG9iamVjdCBpcyAwCisgICAgbGVuZ3RoOiAwLAor
CisgICAgdG9BcnJheTogZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBzbGljZS5jYWxsKCB0
aGlzICk7CisgICAgfSwKKworICAgIC8vIEdldCB0aGUgTnRoIGVsZW1lbnQgaW4gdGhlIG1hdGNo
ZWQgZWxlbWVudCBzZXQgT1IKKyAgICAvLyBHZXQgdGhlIHdob2xlIG1hdGNoZWQgZWxlbWVudCBz
ZXQgYXMgYSBjbGVhbiBhcnJheQorICAgIGdldDogZnVuY3Rpb24oIG51bSApIHsKKworICAgICAg
ICAvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyBpbiBhIGNsZWFuIGFycmF5CisgICAgICAgIGlm
ICggbnVtID09IG51bGwgKSB7CisgICAgICAgICAgICByZXR1cm4gc2xpY2UuY2FsbCggdGhpcyAp
OworICAgICAgICB9CisKKyAgICAgICAgLy8gUmV0dXJuIGp1c3QgdGhlIG9uZSBlbGVtZW50IGZy
b20gdGhlIHNldAorICAgICAgICByZXR1cm4gbnVtIDwgMCA/IHRoaXNbIG51bSArIHRoaXMubGVu
Z3RoIF0gOiB0aGlzWyBudW0gXTsKKyAgICB9LAorCisgICAgLy8gVGFrZSBhbiBhcnJheSBvZiBl
bGVtZW50cyBhbmQgcHVzaCBpdCBvbnRvIHRoZSBzdGFjaworICAgIC8vIChyZXR1cm5pbmcgdGhl
IG5ldyBtYXRjaGVkIGVsZW1lbnQgc2V0KQorICAgIHB1c2hTdGFjazogZnVuY3Rpb24oIGVsZW1z
ICkgeworCisgICAgICAgIC8vIEJ1aWxkIGEgbmV3IGpRdWVyeSBtYXRjaGVkIGVsZW1lbnQgc2V0
CisgICAgICAgIHZhciByZXQgPSBqUXVlcnkubWVyZ2UoIHRoaXMuY29uc3RydWN0b3IoKSwgZWxl
bXMgKTsKKworICAgICAgICAvLyBBZGQgdGhlIG9sZCBvYmplY3Qgb250byB0aGUgc3RhY2sgKGFz
IGEgcmVmZXJlbmNlKQorICAgICAgICByZXQucHJldk9iamVjdCA9IHRoaXM7CisKKyAgICAgICAg
Ly8gUmV0dXJuIHRoZSBuZXdseS1mb3JtZWQgZWxlbWVudCBzZXQKKyAgICAgICAgcmV0dXJuIHJl
dDsKKyAgICB9LAorCisgICAgLy8gRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBldmVyeSBlbGVtZW50
IGluIHRoZSBtYXRjaGVkIHNldC4KKyAgICBlYWNoOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7Cisg
ICAgICAgIHJldHVybiBqUXVlcnkuZWFjaCggdGhpcywgY2FsbGJhY2sgKTsKKyAgICB9LAorCisg
ICAgbWFwOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7CisgICAgICAgIHJldHVybiB0aGlzLnB1c2hT
dGFjayggalF1ZXJ5Lm1hcCggdGhpcywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7CisgICAgICAgICAg
ICByZXR1cm4gY2FsbGJhY2suY2FsbCggZWxlbSwgaSwgZWxlbSApOworICAgICAgICB9ICkgKTsK
KyAgICB9LAorCisgICAgc2xpY2U6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5w
dXNoU3RhY2soIHNsaWNlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSApOworICAgIH0sCisKKyAg
ICBmaXJzdDogZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLmVxKCAwICk7CisgICAg
fSwKKworICAgIGxhc3Q6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5lcSggLTEg
KTsKKyAgICB9LAorCisgICAgZXE6IGZ1bmN0aW9uKCBpICkgeworICAgICAgICB2YXIgbGVuID0g
dGhpcy5sZW5ndGgsCisgICAgICAgICAgICBqID0gK2kgKyAoIGkgPCAwID8gbGVuIDogMCApOwor
ICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIGogPj0gMCAmJiBqIDwgbGVuID8gWyB0aGlz
WyBqIF0gXSA6IFtdICk7CisgICAgfSwKKworICAgIGVuZDogZnVuY3Rpb24oKSB7CisgICAgICAg
IHJldHVybiB0aGlzLnByZXZPYmplY3QgfHwgdGhpcy5jb25zdHJ1Y3RvcigpOworICAgIH0sCisK
KyAgICAvLyBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuCisgICAgLy8gQmVoYXZlcyBsaWtlIGFuIEFy
cmF5J3MgbWV0aG9kLCBub3QgbGlrZSBhIGpRdWVyeSBtZXRob2QuCisgICAgcHVzaDogcHVzaCwK
KyAgICBzb3J0OiBhcnIuc29ydCwKKyAgICBzcGxpY2U6IGFyci5zcGxpY2UKK307CisKK2pRdWVy
eS5leHRlbmQgPSBqUXVlcnkuZm4uZXh0ZW5kID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIG9wdGlv
bnMsIG5hbWUsIHNyYywgY29weSwgY29weUlzQXJyYXksIGNsb25lLAorICAgICAgICB0YXJnZXQg
PSBhcmd1bWVudHNbIDAgXSB8fCB7fSwKKyAgICAgICAgaSA9IDEsCisgICAgICAgIGxlbmd0aCA9
IGFyZ3VtZW50cy5sZW5ndGgsCisgICAgICAgIGRlZXAgPSBmYWxzZTsKKworICAgIC8vIEhhbmRs
ZSBhIGRlZXAgY29weSBzaXR1YXRpb24KKyAgICBpZiAoIHR5cGVvZiB0YXJnZXQgPT09ICJib29s
ZWFuIiApIHsKKyAgICAgICAgZGVlcCA9IHRhcmdldDsKKworICAgICAgICAvLyBTa2lwIHRoZSBi
b29sZWFuIGFuZCB0aGUgdGFyZ2V0CisgICAgICAgIHRhcmdldCA9IGFyZ3VtZW50c1sgaSBdIHx8
IHt9OworICAgICAgICBpKys7CisgICAgfQorCisgICAgLy8gSGFuZGxlIGNhc2Ugd2hlbiB0YXJn
ZXQgaXMgYSBzdHJpbmcgb3Igc29tZXRoaW5nIChwb3NzaWJsZSBpbiBkZWVwIGNvcHkpCisgICAg
aWYgKCB0eXBlb2YgdGFyZ2V0ICE9PSAib2JqZWN0IiAmJiAhalF1ZXJ5LmlzRnVuY3Rpb24oIHRh
cmdldCApICkgeworICAgICAgICB0YXJnZXQgPSB7fTsKKyAgICB9CisKKyAgICAvLyBFeHRlbmQg
alF1ZXJ5IGl0c2VsZiBpZiBvbmx5IG9uZSBhcmd1bWVudCBpcyBwYXNzZWQKKyAgICBpZiAoIGkg
PT09IGxlbmd0aCApIHsKKyAgICAgICAgdGFyZ2V0ID0gdGhpczsKKyAgICAgICAgaS0tOworICAg
IH0KKworICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkgeworCisgICAgICAgIC8vIE9ubHkg
ZGVhbCB3aXRoIG5vbi1udWxsL3VuZGVmaW5lZCB2YWx1ZXMKKyAgICAgICAgaWYgKCAoIG9wdGlv
bnMgPSBhcmd1bWVudHNbIGkgXSApICE9IG51bGwgKSB7CisKKyAgICAgICAgICAgIC8vIEV4dGVu
ZCB0aGUgYmFzZSBvYmplY3QKKyAgICAgICAgICAgIGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHsK
KyAgICAgICAgICAgICAgICBzcmMgPSB0YXJnZXRbIG5hbWUgXTsKKyAgICAgICAgICAgICAgICBj
b3B5ID0gb3B0aW9uc1sgbmFtZSBdOworCisgICAgICAgICAgICAgICAgLy8gUHJldmVudCBuZXZl
ci1lbmRpbmcgbG9vcAorICAgICAgICAgICAgICAgIGlmICggdGFyZ2V0ID09PSBjb3B5ICkgewor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAvLyBSZWN1cnNlIGlmIHdlJ3JlIG1lcmdpbmcgcGxhaW4gb2JqZWN0cyBvciBh
cnJheXMKKyAgICAgICAgICAgICAgICBpZiAoIGRlZXAgJiYgY29weSAmJiAoIGpRdWVyeS5pc1Bs
YWluT2JqZWN0KCBjb3B5ICkgfHwKKyAgICAgICAgICAgICAgICAgICAgKCBjb3B5SXNBcnJheSA9
IGpRdWVyeS5pc0FycmF5KCBjb3B5ICkgKSApICkgeworCisgICAgICAgICAgICAgICAgICAgIGlm
ICggY29weUlzQXJyYXkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb3B5SXNBcnJheSA9
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmUgPSBzcmMgJiYgalF1ZXJ5Lmlz
QXJyYXkoIHNyYyApID8gc3JjIDogW107CisKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNsb25lID0gc3JjICYmIGpRdWVyeS5pc1BsYWluT2Jq
ZWN0KCBzcmMgKSA/IHNyYyA6IHt9OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgLy8gTmV2ZXIgbW92ZSBvcmlnaW5hbCBvYmplY3RzLCBjbG9uZSB0aGVtCisg
ICAgICAgICAgICAgICAgICAgIHRhcmdldFsgbmFtZSBdID0galF1ZXJ5LmV4dGVuZCggZGVlcCwg
Y2xvbmUsIGNvcHkgKTsKKworICAgICAgICAgICAgICAgIC8vIERvbid0IGJyaW5nIGluIHVuZGVm
aW5lZCB2YWx1ZXMKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBjb3B5ICE9PSB1bmRlZmlu
ZWQgKSB7CisgICAgICAgICAgICAgICAgICAgIHRhcmdldFsgbmFtZSBdID0gY29weTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBS
ZXR1cm4gdGhlIG1vZGlmaWVkIG9iamVjdAorICAgIHJldHVybiB0YXJnZXQ7Cit9OworCitqUXVl
cnkuZXh0ZW5kKCB7CisKKyAgICAvLyBVbmlxdWUgZm9yIGVhY2ggY29weSBvZiBqUXVlcnkgb24g
dGhlIHBhZ2UKKyAgICBleHBhbmRvOiAialF1ZXJ5IiArICggdmVyc2lvbiArIE1hdGgucmFuZG9t
KCkgKS5yZXBsYWNlKCAvXEQvZywgIiIgKSwKKworICAgIC8vIEFzc3VtZSBqUXVlcnkgaXMgcmVh
ZHkgd2l0aG91dCB0aGUgcmVhZHkgbW9kdWxlCisgICAgaXNSZWFkeTogdHJ1ZSwKKworICAgIGVy
cm9yOiBmdW5jdGlvbiggbXNnICkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIG1zZyApOwor
ICAgIH0sCisKKyAgICBub29wOiBmdW5jdGlvbigpIHt9LAorCisgICAgaXNGdW5jdGlvbjogZnVu
Y3Rpb24oIG9iaiApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS50eXBlKCBvYmogKSA9PT0gImZ1
bmN0aW9uIjsKKyAgICB9LAorCisgICAgaXNBcnJheTogQXJyYXkuaXNBcnJheSwKKworICAgIGlz
V2luZG93OiBmdW5jdGlvbiggb2JqICkgeworICAgICAgICByZXR1cm4gb2JqICE9IG51bGwgJiYg
b2JqID09PSBvYmoud2luZG93OworICAgIH0sCisKKyAgICBpc051bWVyaWM6IGZ1bmN0aW9uKCBv
YmogKSB7CisKKyAgICAgICAgLy8gQXMgb2YgalF1ZXJ5IDMuMCwgaXNOdW1lcmljIGlzIGxpbWl0
ZWQgdG8KKyAgICAgICAgLy8gc3RyaW5ncyBhbmQgbnVtYmVycyAocHJpbWl0aXZlcyBvciBvYmpl
Y3RzKQorICAgICAgICAvLyB0aGF0IGNhbiBiZSBjb2VyY2VkIHRvIGZpbml0ZSBudW1iZXJzIChn
aC0yNjYyKQorICAgICAgICB2YXIgdHlwZSA9IGpRdWVyeS50eXBlKCBvYmogKTsKKyAgICAgICAg
cmV0dXJuICggdHlwZSA9PT0gIm51bWJlciIgfHwgdHlwZSA9PT0gInN0cmluZyIgKSAmJgorCisg
ICAgICAgICAgICAvLyBwYXJzZUZsb2F0IE5hTnMgbnVtZXJpYy1jYXN0IGZhbHNlIHBvc2l0aXZl
cyAoIiIpCisgICAgICAgICAgICAvLyAuLi5idXQgbWlzaW50ZXJwcmV0cyBsZWFkaW5nLW51bWJl
ciBzdHJpbmdzLCBwYXJ0aWN1bGFybHkgaGV4IGxpdGVyYWxzICgiMHguLi4iKQorICAgICAgICAg
ICAgLy8gc3VidHJhY3Rpb24gZm9yY2VzIGluZmluaXRpZXMgdG8gTmFOCisgICAgICAgICAgICAh
aXNOYU4oIG9iaiAtIHBhcnNlRmxvYXQoIG9iaiApICk7CisgICAgfSwKKworICAgIGlzUGxhaW5P
YmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7CisgICAgICAgIHZhciBwcm90bywgQ3RvcjsKKworICAg
ICAgICAvLyBEZXRlY3Qgb2J2aW91cyBuZWdhdGl2ZXMKKyAgICAgICAgLy8gVXNlIHRvU3RyaW5n
IGluc3RlYWQgb2YgalF1ZXJ5LnR5cGUgdG8gY2F0Y2ggaG9zdCBvYmplY3RzCisgICAgICAgIGlm
ICggIW9iaiB8fCB0b1N0cmluZy5jYWxsKCBvYmogKSAhPT0gIltvYmplY3QgT2JqZWN0XSIgKSB7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBwcm90byA9
IGdldFByb3RvKCBvYmogKTsKKworICAgICAgICAvLyBPYmplY3RzIHdpdGggbm8gcHJvdG90eXBl
IChlLmcuLCBgT2JqZWN0LmNyZWF0ZSggbnVsbCApYCkgYXJlIHBsYWluCisgICAgICAgIGlmICgg
IXByb3RvICkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBPYmplY3RzIHdpdGggcHJvdG90eXBlIGFyZSBwbGFpbiBpZmYgdGhleSB3ZXJlIGNvbnN0
cnVjdGVkIGJ5IGEgZ2xvYmFsIE9iamVjdCBmdW5jdGlvbgorICAgICAgICBDdG9yID0gaGFzT3du
LmNhbGwoIHByb3RvLCAiY29uc3RydWN0b3IiICkgJiYgcHJvdG8uY29uc3RydWN0b3I7CisgICAg
ICAgIHJldHVybiB0eXBlb2YgQ3RvciA9PT0gImZ1bmN0aW9uIiAmJiBmblRvU3RyaW5nLmNhbGwo
IEN0b3IgKSA9PT0gT2JqZWN0RnVuY3Rpb25TdHJpbmc7CisgICAgfSwKKworICAgIGlzRW1wdHlP
YmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7CisKKyAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8t
dW51c2VkLXZhcnMgKi8KKyAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lc2xpbnQv
ZXNsaW50L2lzc3Vlcy82MTI1CisgICAgICAgIHZhciBuYW1lOworCisgICAgICAgIGZvciAoIG5h
bWUgaW4gb2JqICkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0sCisKKyAgICB0eXBlOiBmdW5jdGlvbiggb2JqICkgewor
ICAgICAgICBpZiAoIG9iaiA9PSBudWxsICkgeworICAgICAgICAgICAgcmV0dXJuIG9iaiArICIi
OworICAgICAgICB9CisKKyAgICAgICAgLy8gU3VwcG9ydDogQW5kcm9pZCA8PTIuMyBvbmx5IChm
dW5jdGlvbmlzaCBSZWdFeHApCisgICAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSAib2JqZWN0
IiB8fCB0eXBlb2Ygb2JqID09PSAiZnVuY3Rpb24iID8KKyAgICAgICAgICAgIGNsYXNzMnR5cGVb
IHRvU3RyaW5nLmNhbGwoIG9iaiApIF0gfHwgIm9iamVjdCIgOgorICAgICAgICAgICAgdHlwZW9m
IG9iajsKKyAgICB9LAorCisgICAgLy8gRXZhbHVhdGVzIGEgc2NyaXB0IGluIGEgZ2xvYmFsIGNv
bnRleHQKKyAgICBnbG9iYWxFdmFsOiBmdW5jdGlvbiggY29kZSApIHsKKyAgICAgICAgRE9NRXZh
bCggY29kZSApOworICAgIH0sCisKKyAgICAvLyBDb252ZXJ0IGRhc2hlZCB0byBjYW1lbENhc2U7
IHVzZWQgYnkgdGhlIGNzcyBhbmQgZGF0YSBtb2R1bGVzCisgICAgLy8gU3VwcG9ydDogSUUgPD05
IC0gMTEsIEVkZ2UgMTIgLSAxMworICAgIC8vIE1pY3Jvc29mdCBmb3Jnb3QgdG8gaHVtcCB0aGVp
ciB2ZW5kb3IgcHJlZml4ICgjOTU3MikKKyAgICBjYW1lbENhc2U6IGZ1bmN0aW9uKCBzdHJpbmcg
KSB7CisgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSggcm1zUHJlZml4LCAibXMtIiApLnJl
cGxhY2UoIHJkYXNoQWxwaGEsIGZjYW1lbENhc2UgKTsKKyAgICB9LAorCisgICAgbm9kZU5hbWU6
IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgeworICAgICAgICByZXR1cm4gZWxlbS5ub2RlTmFtZSAm
JiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUudG9Mb3dlckNhc2UoKTsKKyAg
ICB9LAorCisgICAgZWFjaDogZnVuY3Rpb24oIG9iaiwgY2FsbGJhY2sgKSB7CisgICAgICAgIHZh
ciBsZW5ndGgsIGkgPSAwOworCisgICAgICAgIGlmICggaXNBcnJheUxpa2UoIG9iaiApICkgewor
ICAgICAgICAgICAgbGVuZ3RoID0gb2JqLmxlbmd0aDsKKyAgICAgICAgICAgIGZvciAoIDsgaSA8
IGxlbmd0aDsgaSsrICkgeworICAgICAgICAgICAgICAgIGlmICggY2FsbGJhY2suY2FsbCggb2Jq
WyBpIF0sIGksIG9ialsgaSBdICkgPT09IGZhbHNlICkgeworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBmb3IgKCBpIGluIG9iaiApIHsKKyAgICAgICAgICAgICAgICBpZiAoIGNh
bGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSApID09PSBmYWxzZSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG9iajsKKyAgICB9LAorCisgICAgLy8gU3VwcG9y
dDogQW5kcm9pZCA8PTQuMCBvbmx5CisgICAgdHJpbTogZnVuY3Rpb24oIHRleHQgKSB7CisgICAg
ICAgIHJldHVybiB0ZXh0ID09IG51bGwgPworICAgICAgICAgICAgIiIgOgorICAgICAgICAgICAg
KCB0ZXh0ICsgIiIgKS5yZXBsYWNlKCBydHJpbSwgIiIgKTsKKyAgICB9LAorCisgICAgLy8gcmVz
dWx0cyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seQorICAgIG1ha2VBcnJheTogZnVuY3Rpb24o
IGFyciwgcmVzdWx0cyApIHsKKyAgICAgICAgdmFyIHJldCA9IHJlc3VsdHMgfHwgW107CisKKyAg
ICAgICAgaWYgKCBhcnIgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIGlmICggaXNBcnJheUxpa2Uo
IE9iamVjdCggYXJyICkgKSApIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkubWVyZ2UoIHJldCwK
KyAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGFyciA9PT0gInN0cmluZyIgPworICAgICAgICAg
ICAgICAgICAgICBbIGFyciBdIDogYXJyCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHVzaC5jYWxsKCByZXQsIGFyciApOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9LAorCisgICAg
aW5BcnJheTogZnVuY3Rpb24oIGVsZW0sIGFyciwgaSApIHsKKyAgICAgICAgcmV0dXJuIGFyciA9
PSBudWxsID8gLTEgOiBpbmRleE9mLmNhbGwoIGFyciwgZWxlbSwgaSApOworICAgIH0sCisKKyAg
ICAvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHkKKyAgICAv
LyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0CisgICAg
bWVyZ2U6IGZ1bmN0aW9uKCBmaXJzdCwgc2Vjb25kICkgeworICAgICAgICB2YXIgbGVuID0gK3Nl
Y29uZC5sZW5ndGgsCisgICAgICAgICAgICBqID0gMCwKKyAgICAgICAgICAgIGkgPSBmaXJzdC5s
ZW5ndGg7CisKKyAgICAgICAgZm9yICggOyBqIDwgbGVuOyBqKysgKSB7CisgICAgICAgICAgICBm
aXJzdFsgaSsrIF0gPSBzZWNvbmRbIGogXTsKKyAgICAgICAgfQorCisgICAgICAgIGZpcnN0Lmxl
bmd0aCA9IGk7CisKKyAgICAgICAgcmV0dXJuIGZpcnN0OworICAgIH0sCisKKyAgICBncmVwOiBm
dW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBpbnZlcnQgKSB7CisgICAgICAgIHZhciBjYWxsYmFj
a0ludmVyc2UsCisgICAgICAgICAgICBtYXRjaGVzID0gW10sCisgICAgICAgICAgICBpID0gMCwK
KyAgICAgICAgICAgIGxlbmd0aCA9IGVsZW1zLmxlbmd0aCwKKyAgICAgICAgICAgIGNhbGxiYWNr
RXhwZWN0ID0gIWludmVydDsKKworICAgICAgICAvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgb25s
eSBzYXZpbmcgdGhlIGl0ZW1zCisgICAgICAgIC8vIHRoYXQgcGFzcyB0aGUgdmFsaWRhdG9yIGZ1
bmN0aW9uCisgICAgICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkgeworICAgICAgICAgICAg
Y2FsbGJhY2tJbnZlcnNlID0gIWNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpICk7CisgICAgICAgICAg
ICBpZiAoIGNhbGxiYWNrSW52ZXJzZSAhPT0gY2FsbGJhY2tFeHBlY3QgKSB7CisgICAgICAgICAg
ICAgICAgbWF0Y2hlcy5wdXNoKCBlbGVtc1sgaSBdICk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICByZXR1cm4gbWF0Y2hlczsKKyAgICB9LAorCisgICAgLy8gYXJnIGlzIGZv
ciBpbnRlcm5hbCB1c2FnZSBvbmx5CisgICAgbWFwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNr
LCBhcmcgKSB7CisgICAgICAgIHZhciBsZW5ndGgsIHZhbHVlLAorICAgICAgICAgICAgaSA9IDAs
CisgICAgICAgICAgICByZXQgPSBbXTsKKworICAgICAgICAvLyBHbyB0aHJvdWdoIHRoZSBhcnJh
eSwgdHJhbnNsYXRpbmcgZWFjaCBvZiB0aGUgaXRlbXMgdG8gdGhlaXIgbmV3IHZhbHVlcworICAg
ICAgICBpZiAoIGlzQXJyYXlMaWtlKCBlbGVtcyApICkgeworICAgICAgICAgICAgbGVuZ3RoID0g
ZWxlbXMubGVuZ3RoOworICAgICAgICAgICAgZm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7Cisg
ICAgICAgICAgICAgICAgdmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7CisK
KyAgICAgICAgICAgICAgICBpZiAoIHZhbHVlICE9IG51bGwgKSB7CisgICAgICAgICAgICAgICAg
ICAgIHJldC5wdXNoKCB2YWx1ZSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAvLyBHbyB0aHJvdWdoIGV2ZXJ5IGtleSBvbiB0aGUgb2JqZWN0LAorICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgZm9yICggaSBpbiBlbGVtcyApIHsKKyAgICAgICAgICAg
ICAgICB2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTsKKworICAgICAgICAg
ICAgICAgIGlmICggdmFsdWUgIT0gbnVsbCApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0LnB1
c2goIHZhbHVlICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgLy8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5cworICAgICAgICByZXR1cm4g
Y29uY2F0LmFwcGx5KCBbXSwgcmV0ICk7CisgICAgfSwKKworICAgIC8vIEEgZ2xvYmFsIEdVSUQg
Y291bnRlciBmb3Igb2JqZWN0cworICAgIGd1aWQ6IDEsCisKKyAgICAvLyBCaW5kIGEgZnVuY3Rp
b24gdG8gYSBjb250ZXh0LCBvcHRpb25hbGx5IHBhcnRpYWxseSBhcHBseWluZyBhbnkKKyAgICAv
LyBhcmd1bWVudHMuCisgICAgcHJveHk6IGZ1bmN0aW9uKCBmbiwgY29udGV4dCApIHsKKyAgICAg
ICAgdmFyIHRtcCwgYXJncywgcHJveHk7CisKKyAgICAgICAgaWYgKCB0eXBlb2YgY29udGV4dCA9
PT0gInN0cmluZyIgKSB7CisgICAgICAgICAgICB0bXAgPSBmblsgY29udGV4dCBdOworICAgICAg
ICAgICAgY29udGV4dCA9IGZuOworICAgICAgICAgICAgZm4gPSB0bXA7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBRdWljayBjaGVjayB0byBkZXRlcm1pbmUgaWYgdGFyZ2V0IGlzIGNhbGxhYmxl
LCBpbiB0aGUgc3BlYworICAgICAgICAvLyB0aGlzIHRocm93cyBhIFR5cGVFcnJvciwgYnV0IHdl
IHdpbGwganVzdCByZXR1cm4gdW5kZWZpbmVkLgorICAgICAgICBpZiAoICFqUXVlcnkuaXNGdW5j
dGlvbiggZm4gKSApIHsKKyAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CisgICAgICAgIH0K
KworICAgICAgICAvLyBTaW11bGF0ZWQgYmluZAorICAgICAgICBhcmdzID0gc2xpY2UuY2FsbCgg
YXJndW1lbnRzLCAyICk7CisgICAgICAgIHByb3h5ID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICByZXR1cm4gZm4uYXBwbHkoIGNvbnRleHQgfHwgdGhpcywgYXJncy5jb25jYXQoIHNsaWNlLmNh
bGwoIGFyZ3VtZW50cyApICkgKTsKKyAgICAgICAgfTsKKworICAgICAgICAvLyBTZXQgdGhlIGd1
aWQgb2YgdW5pcXVlIGhhbmRsZXIgdG8gdGhlIHNhbWUgb2Ygb3JpZ2luYWwgaGFuZGxlciwgc28g
aXQgY2FuIGJlIHJlbW92ZWQKKyAgICAgICAgcHJveHkuZ3VpZCA9IGZuLmd1aWQgPSBmbi5ndWlk
IHx8IGpRdWVyeS5ndWlkKys7CisKKyAgICAgICAgcmV0dXJuIHByb3h5OworICAgIH0sCisKKyAg
ICBub3c6IERhdGUubm93LAorCisgICAgLy8galF1ZXJ5LnN1cHBvcnQgaXMgbm90IHVzZWQgaW4g
Q29yZSBidXQgb3RoZXIgcHJvamVjdHMgYXR0YWNoIHRoZWlyCisgICAgLy8gcHJvcGVydGllcyB0
byBpdCBzbyBpdCBuZWVkcyB0byBleGlzdC4KKyAgICBzdXBwb3J0OiBzdXBwb3J0Cit9ICk7CisK
K2lmICggdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiApIHsKKyAgICBqUXVlcnkuZm5bIFN5
bWJvbC5pdGVyYXRvciBdID0gYXJyWyBTeW1ib2wuaXRlcmF0b3IgXTsKK30KKworLy8gUG9wdWxh
dGUgdGhlIGNsYXNzMnR5cGUgbWFwCitqUXVlcnkuZWFjaCggIkJvb2xlYW4gTnVtYmVyIFN0cmlu
ZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IgU3ltYm9sIi5zcGxpdCgg
IiAiICksCitmdW5jdGlvbiggaSwgbmFtZSApIHsKKyAgICBjbGFzczJ0eXBlWyAiW29iamVjdCAi
ICsgbmFtZSArICJdIiBdID0gbmFtZS50b0xvd2VyQ2FzZSgpOworfSApOworCitmdW5jdGlvbiBp
c0FycmF5TGlrZSggb2JqICkgeworCisgICAgLy8gU3VwcG9ydDogcmVhbCBpT1MgOC4yIG9ubHkg
KG5vdCByZXByb2R1Y2libGUgaW4gc2ltdWxhdG9yKQorICAgIC8vIGBpbmAgY2hlY2sgdXNlZCB0
byBwcmV2ZW50IEpJVCBlcnJvciAoZ2gtMjE0NSkKKyAgICAvLyBoYXNPd24gaXNuJ3QgdXNlZCBo
ZXJlIGR1ZSB0byBmYWxzZSBuZWdhdGl2ZXMKKyAgICAvLyByZWdhcmRpbmcgTm9kZWxpc3QgbGVu
Z3RoIGluIElFCisgICAgdmFyIGxlbmd0aCA9ICEhb2JqICYmICJsZW5ndGgiIGluIG9iaiAmJiBv
YmoubGVuZ3RoLAorICAgICAgICB0eXBlID0galF1ZXJ5LnR5cGUoIG9iaiApOworCisgICAgaWYg
KCB0eXBlID09PSAiZnVuY3Rpb24iIHx8IGpRdWVyeS5pc1dpbmRvdyggb2JqICkgKSB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHlwZSA9PT0gImFycmF5IiB8
fCBsZW5ndGggPT09IDAgfHwKKyAgICAgICAgdHlwZW9mIGxlbmd0aCA9PT0gIm51bWJlciIgJiYg
bGVuZ3RoID4gMCAmJiAoIGxlbmd0aCAtIDEgKSBpbiBvYmo7Cit9Cit2YXIgU2l6emxlID0KKy8q
IQorICogU2l6emxlIENTUyBTZWxlY3RvciBFbmdpbmUgdjIuMy4zCisgKiBodHRwczovL3Npenps
ZWpzLmNvbS8KKyAqCisgKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNv
bnRyaWJ1dG9ycworICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCisgKiBodHRwOi8v
anF1ZXJ5Lm9yZy9saWNlbnNlCisgKgorICogRGF0ZTogMjAxNi0wOC0wOAorICovCisoZnVuY3Rp
b24oIHdpbmRvdyApIHsKKwordmFyIGksCisgICAgc3VwcG9ydCwKKyAgICBFeHByLAorICAgIGdl
dFRleHQsCisgICAgaXNYTUwsCisgICAgdG9rZW5pemUsCisgICAgY29tcGlsZSwKKyAgICBzZWxl
Y3QsCisgICAgb3V0ZXJtb3N0Q29udGV4dCwKKyAgICBzb3J0SW5wdXQsCisgICAgaGFzRHVwbGlj
YXRlLAorCisgICAgLy8gTG9jYWwgZG9jdW1lbnQgdmFycworICAgIHNldERvY3VtZW50LAorICAg
IGRvY3VtZW50LAorICAgIGRvY0VsZW0sCisgICAgZG9jdW1lbnRJc0hUTUwsCisgICAgcmJ1Z2d5
UVNBLAorICAgIHJidWdneU1hdGNoZXMsCisgICAgbWF0Y2hlcywKKyAgICBjb250YWlucywKKwor
ICAgIC8vIEluc3RhbmNlLXNwZWNpZmljIGRhdGEKKyAgICBleHBhbmRvID0gInNpenpsZSIgKyAx
ICogbmV3IERhdGUoKSwKKyAgICBwcmVmZXJyZWREb2MgPSB3aW5kb3cuZG9jdW1lbnQsCisgICAg
ZGlycnVucyA9IDAsCisgICAgZG9uZSA9IDAsCisgICAgY2xhc3NDYWNoZSA9IGNyZWF0ZUNhY2hl
KCksCisgICAgdG9rZW5DYWNoZSA9IGNyZWF0ZUNhY2hlKCksCisgICAgY29tcGlsZXJDYWNoZSA9
IGNyZWF0ZUNhY2hlKCksCisgICAgc29ydE9yZGVyID0gZnVuY3Rpb24oIGEsIGIgKSB7CisgICAg
ICAgIGlmICggYSA9PT0gYiApIHsKKyAgICAgICAgICAgIGhhc0R1cGxpY2F0ZSA9IHRydWU7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfSwKKworICAgIC8vIEluc3RhbmNlIG1l
dGhvZHMKKyAgICBoYXNPd24gPSAoe30pLmhhc093blByb3BlcnR5LAorICAgIGFyciA9IFtdLAor
ICAgIHBvcCA9IGFyci5wb3AsCisgICAgcHVzaF9uYXRpdmUgPSBhcnIucHVzaCwKKyAgICBwdXNo
ID0gYXJyLnB1c2gsCisgICAgc2xpY2UgPSBhcnIuc2xpY2UsCisgICAgLy8gVXNlIGEgc3RyaXBw
ZWQtZG93biBpbmRleE9mIGFzIGl0J3MgZmFzdGVyIHRoYW4gbmF0aXZlCisgICAgLy8gaHR0cHM6
Ly9qc3BlcmYuY29tL3Rob3ItaW5kZXhvZi12cy1mb3IvNQorICAgIGluZGV4T2YgPSBmdW5jdGlv
biggbGlzdCwgZWxlbSApIHsKKyAgICAgICAgdmFyIGkgPSAwLAorICAgICAgICAgICAgbGVuID0g
bGlzdC5sZW5ndGg7CisgICAgICAgIGZvciAoIDsgaSA8IGxlbjsgaSsrICkgeworICAgICAgICAg
ICAgaWYgKCBsaXN0W2ldID09PSBlbGVtICkgeworICAgICAgICAgICAgICAgIHJldHVybiBpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9LAorCisg
ICAgYm9vbGVhbnMgPSAiY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8
Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGlzbWFwfGxvb3B8bXVsdGlwbGV8b3Blbnxy
ZWFkb25seXxyZXF1aXJlZHxzY29wZWQiLAorCisgICAgLy8gUmVndWxhciBleHByZXNzaW9ucwor
CisgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1zZWxlY3RvcnMvI3doaXRlc3BhY2UK
KyAgICB3aGl0ZXNwYWNlID0gIltcXHgyMFxcdFxcclxcblxcZl0iLAorCisgICAgLy8gaHR0cDov
L3d3dy53My5vcmcvVFIvQ1NTMjEvc3luZGF0YS5odG1sI3ZhbHVlLWRlZi1pZGVudGlmaWVyCisg
ICAgaWRlbnRpZmllciA9ICIoPzpcXFxcLnxbXFx3LV18W15cMC1cXHhhMF0pKyIsCisKKyAgICAv
LyBBdHRyaWJ1dGUgc2VsZWN0b3JzOiBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2F0
dHJpYnV0ZS1zZWxlY3RvcnMKKyAgICBhdHRyaWJ1dGVzID0gIlxcWyIgKyB3aGl0ZXNwYWNlICsg
IiooIiArIGlkZW50aWZpZXIgKyAiKSg/OiIgKyB3aGl0ZXNwYWNlICsKKyAgICAgICAgLy8gT3Bl
cmF0b3IgKGNhcHR1cmUgMikKKyAgICAgICAgIiooWypeJHwhfl0/PSkiICsgd2hpdGVzcGFjZSAr
CisgICAgICAgIC8vICJBdHRyaWJ1dGUgdmFsdWVzIG11c3QgYmUgQ1NTIGlkZW50aWZpZXJzIFtj
YXB0dXJlIDVdIG9yIHN0cmluZ3MgW2NhcHR1cmUgMyBvciBjYXB0dXJlIDRdIgorICAgICAgICAi
Kig/OicoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwifCgi
ICsgaWRlbnRpZmllciArICIpKXwpIiArIHdoaXRlc3BhY2UgKworICAgICAgICAiKlxcXSIsCisK
KyAgICBwc2V1ZG9zID0gIjooIiArIGlkZW50aWZpZXIgKyAiKSg/OlxcKCgiICsKKyAgICAgICAg
Ly8gVG8gcmVkdWNlIHRoZSBudW1iZXIgb2Ygc2VsZWN0b3JzIG5lZWRpbmcgdG9rZW5pemUgaW4g
dGhlIHByZUZpbHRlciwgcHJlZmVyIGFyZ3VtZW50czoKKyAgICAgICAgLy8gMS4gcXVvdGVkIChj
YXB0dXJlIDM7IGNhcHR1cmUgNCBvciBjYXB0dXJlIDUpCisgICAgICAgICIoJygoPzpcXFxcLnxb
XlxcXFwnXSkqKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCIpfCIgKworICAgICAgICAvLyAy
LiBzaW1wbGUgKGNhcHR1cmUgNikKKyAgICAgICAgIigoPzpcXFxcLnxbXlxcXFwoKVtcXF1dfCIg
KyBhdHRyaWJ1dGVzICsgIikqKXwiICsKKyAgICAgICAgLy8gMy4gYW55dGhpbmcgZWxzZSAoY2Fw
dHVyZSAyKQorICAgICAgICAiLioiICsKKyAgICAgICAgIilcXCl8KSIsCisKKyAgICAvLyBMZWFk
aW5nIGFuZCBub24tZXNjYXBlZCB0cmFpbGluZyB3aGl0ZXNwYWNlLCBjYXB0dXJpbmcgc29tZSBu
b24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHByZWNlZGluZyB0aGUgbGF0dGVyCisgICAgcndoaXRl
c3BhY2UgPSBuZXcgUmVnRXhwKCB3aGl0ZXNwYWNlICsgIisiLCAiZyIgKSwKKyAgICBydHJpbSA9
IG5ldyBSZWdFeHAoICJeIiArIHdoaXRlc3BhY2UgKyAiK3woKD86XnxbXlxcXFxdKSg/OlxcXFwu
KSopIiArIHdoaXRlc3BhY2UgKyAiKyQiLCAiZyIgKSwKKworICAgIHJjb21tYSA9IG5ldyBSZWdF
eHAoICJeIiArIHdoaXRlc3BhY2UgKyAiKiwiICsgd2hpdGVzcGFjZSArICIqIiApLAorICAgIHJj
b21iaW5hdG9ycyA9IG5ldyBSZWdFeHAoICJeIiArIHdoaXRlc3BhY2UgKyAiKihbPit+XXwiICsg
d2hpdGVzcGFjZSArICIpIiArIHdoaXRlc3BhY2UgKyAiKiIgKSwKKworICAgIHJhdHRyaWJ1dGVR
dW90ZXMgPSBuZXcgUmVnRXhwKCAiPSIgKyB3aGl0ZXNwYWNlICsgIiooW15cXF0nXCJdKj8pIiAr
IHdoaXRlc3BhY2UgKyAiKlxcXSIsICJnIiApLAorCisgICAgcnBzZXVkbyA9IG5ldyBSZWdFeHAo
IHBzZXVkb3MgKSwKKyAgICByaWRlbnRpZmllciA9IG5ldyBSZWdFeHAoICJeIiArIGlkZW50aWZp
ZXIgKyAiJCIgKSwKKworICAgIG1hdGNoRXhwciA9IHsKKyAgICAgICAgIklEIjogbmV3IFJlZ0V4
cCggIl4jKCIgKyBpZGVudGlmaWVyICsgIikiICksCisgICAgICAgICJDTEFTUyI6IG5ldyBSZWdF
eHAoICJeXFwuKCIgKyBpZGVudGlmaWVyICsgIikiICksCisgICAgICAgICJUQUciOiBuZXcgUmVn
RXhwKCAiXigiICsgaWRlbnRpZmllciArICJ8WypdKSIgKSwKKyAgICAgICAgIkFUVFIiOiBuZXcg
UmVnRXhwKCAiXiIgKyBhdHRyaWJ1dGVzICksCisgICAgICAgICJQU0VVRE8iOiBuZXcgUmVnRXhw
KCAiXiIgKyBwc2V1ZG9zICksCisgICAgICAgICJDSElMRCI6IG5ldyBSZWdFeHAoICJeOihvbmx5
fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXCgiICsgd2hpdGVz
cGFjZSArCisgICAgICAgICAgICAiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIgKyB3aGl0
ZXNwYWNlICsgIiooPzooWystXXwpIiArIHdoaXRlc3BhY2UgKworICAgICAgICAgICAgIiooXFxk
Kyl8KSkiICsgd2hpdGVzcGFjZSArICIqXFwpfCkiLCAiaSIgKSwKKyAgICAgICAgImJvb2wiOiBu
ZXcgUmVnRXhwKCAiXig/OiIgKyBib29sZWFucyArICIpJCIsICJpIiApLAorICAgICAgICAvLyBG
b3IgdXNlIGluIGxpYnJhcmllcyBpbXBsZW1lbnRpbmcgLmlzKCkKKyAgICAgICAgLy8gV2UgdXNl
IHRoaXMgZm9yIFBPUyBtYXRjaGluZyBpbiBgc2VsZWN0YAorICAgICAgICAibmVlZHNDb250ZXh0
IjogbmV3IFJlZ0V4cCggIl4iICsgd2hpdGVzcGFjZSArICIqWz4rfl18OihldmVufG9kZHxlcXxn
dHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXCgiICsKKyAgICAgICAgICAgIHdoaXRlc3BhY2UgKyAi
KigoPzotXFxkKT9cXGQqKSIgKyB3aGl0ZXNwYWNlICsgIipcXCl8KSg/PVteLV18JCkiLCAiaSIg
KQorICAgIH0sCisKKyAgICByaW5wdXRzID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0
dG9uKSQvaSwKKyAgICByaGVhZGVyID0gL15oXGQkL2ksCisKKyAgICBybmF0aXZlID0gL15bXntd
K1x7XHMqXFtuYXRpdmUgXHcvLAorCisgICAgLy8gRWFzaWx5LXBhcnNlYWJsZS9yZXRyaWV2YWJs
ZSBJRCBvciBUQUcgb3IgQ0xBU1Mgc2VsZWN0b3JzCisgICAgcnF1aWNrRXhwciA9IC9eKD86Iyhb
XHctXSspfChcdyspfFwuKFtcdy1dKykpJC8sCisKKyAgICByc2libGluZyA9IC9bK35dLywKKwor
ICAgIC8vIENTUyBlc2NhcGVzCisgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEvc3lu
ZGF0YS5odG1sI2VzY2FwZWQtY2hhcmFjdGVycworICAgIHJ1bmVzY2FwZSA9IG5ldyBSZWdFeHAo
ICJcXFxcKFtcXGRhLWZdezEsNn0iICsgd2hpdGVzcGFjZSArICI/fCgiICsgd2hpdGVzcGFjZSAr
ICIpfC4pIiwgImlnIiApLAorICAgIGZ1bmVzY2FwZSA9IGZ1bmN0aW9uKCBfLCBlc2NhcGVkLCBl
c2NhcGVkV2hpdGVzcGFjZSApIHsKKyAgICAgICAgdmFyIGhpZ2ggPSAiMHgiICsgZXNjYXBlZCAt
IDB4MTAwMDA7CisgICAgICAgIC8vIE5hTiBtZWFucyBub24tY29kZXBvaW50CisgICAgICAgIC8v
IFN1cHBvcnQ6IEZpcmVmb3g8MjQKKyAgICAgICAgLy8gV29ya2Fyb3VuZCBlcnJvbmVvdXMgbnVt
ZXJpYyBpbnRlcnByZXRhdGlvbiBvZiArIjB4IgorICAgICAgICByZXR1cm4gaGlnaCAhPT0gaGln
aCB8fCBlc2NhcGVkV2hpdGVzcGFjZSA/CisgICAgICAgICAgICBlc2NhcGVkIDoKKyAgICAgICAg
ICAgIGhpZ2ggPCAwID8KKyAgICAgICAgICAgICAgICAvLyBCTVAgY29kZXBvaW50CisgICAgICAg
ICAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSggaGlnaCArIDB4MTAwMDAgKSA6CisgICAgICAg
ICAgICAgICAgLy8gU3VwcGxlbWVudGFsIFBsYW5lIGNvZGVwb2ludCAoc3Vycm9nYXRlIHBhaXIp
CisgICAgICAgICAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSggaGlnaCA+PiAxMCB8IDB4RDgw
MCwgaGlnaCAmIDB4M0ZGIHwgMHhEQzAwICk7CisgICAgfSwKKworICAgIC8vIENTUyBzdHJpbmcv
aWRlbnRpZmllciBzZXJpYWxpemF0aW9uCisgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3Jn
L2Nzc29tLyNjb21tb24tc2VyaWFsaXppbmctaWRpb21zCisgICAgcmNzc2VzY2FwZSA9IC8oW1ww
LVx4MWZceDdmXXxeLT9cZCl8Xi0kfFteXDAtXHgxZlx4N2YtXHVGRkZGXHctXS9nLAorICAgIGZj
c3Nlc2NhcGUgPSBmdW5jdGlvbiggY2gsIGFzQ29kZVBvaW50ICkgeworICAgICAgICBpZiAoIGFz
Q29kZVBvaW50ICkgeworCisgICAgICAgICAgICAvLyBVKzAwMDAgTlVMTCBiZWNvbWVzIFUrRkZG
RCBSRVBMQUNFTUVOVCBDSEFSQUNURVIKKyAgICAgICAgICAgIGlmICggY2ggPT09ICJcMCIgKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuICJcdUZGRkQiOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAvLyBDb250cm9sIGNoYXJhY3RlcnMgYW5kIChkZXBlbmRlbnQgdXBvbiBwb3NpdGlv
bikgbnVtYmVycyBnZXQgZXNjYXBlZCBhcyBjb2RlIHBvaW50cworICAgICAgICAgICAgcmV0dXJu
IGNoLnNsaWNlKCAwLCAtMSApICsgIlxcIiArIGNoLmNoYXJDb2RlQXQoIGNoLmxlbmd0aCAtIDEg
KS50b1N0cmluZyggMTYgKSArICIgIjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE90aGVyIHBv
dGVudGlhbGx5LXNwZWNpYWwgQVNDSUkgY2hhcmFjdGVycyBnZXQgYmFja3NsYXNoLWVzY2FwZWQK
KyAgICAgICAgcmV0dXJuICJcXCIgKyBjaDsKKyAgICB9LAorCisgICAgLy8gVXNlZCBmb3IgaWZy
YW1lcworICAgIC8vIFNlZSBzZXREb2N1bWVudCgpCisgICAgLy8gUmVtb3ZpbmcgdGhlIGZ1bmN0
aW9uIHdyYXBwZXIgY2F1c2VzIGEgIlBlcm1pc3Npb24gRGVuaWVkIgorICAgIC8vIGVycm9yIGlu
IElFCisgICAgdW5sb2FkSGFuZGxlciA9IGZ1bmN0aW9uKCkgeworICAgICAgICBzZXREb2N1bWVu
dCgpOworICAgIH0sCisKKyAgICBkaXNhYmxlZEFuY2VzdG9yID0gYWRkQ29tYmluYXRvcigKKyAg
ICAgICAgZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICByZXR1cm4gZWxlbS5kaXNhYmxl
ZCA9PT0gdHJ1ZSAmJiAoImZvcm0iIGluIGVsZW0gfHwgImxhYmVsIiBpbiBlbGVtKTsKKyAgICAg
ICAgfSwKKyAgICAgICAgeyBkaXI6ICJwYXJlbnROb2RlIiwgbmV4dDogImxlZ2VuZCIgfQorICAg
ICk7CisKKy8vIE9wdGltaXplIGZvciBwdXNoLmFwcGx5KCBfLCBOb2RlTGlzdCApCit0cnkgewor
ICAgIHB1c2guYXBwbHkoCisgICAgICAgIChhcnIgPSBzbGljZS5jYWxsKCBwcmVmZXJyZWREb2Mu
Y2hpbGROb2RlcyApKSwKKyAgICAgICAgcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMKKyAgICApOwor
ICAgIC8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4wCisgICAgLy8gRGV0ZWN0IHNpbGVudGx5IGZhaWxp
bmcgcHVzaC5hcHBseQorICAgIGFyclsgcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMubGVuZ3RoIF0u
bm9kZVR5cGU7Cit9IGNhdGNoICggZSApIHsKKyAgICBwdXNoID0geyBhcHBseTogYXJyLmxlbmd0
aCA/CisKKyAgICAgICAgLy8gTGV2ZXJhZ2Ugc2xpY2UgaWYgcG9zc2libGUKKyAgICAgICAgZnVu
Y3Rpb24oIHRhcmdldCwgZWxzICkgeworICAgICAgICAgICAgcHVzaF9uYXRpdmUuYXBwbHkoIHRh
cmdldCwgc2xpY2UuY2FsbChlbHMpICk7CisgICAgICAgIH0gOgorCisgICAgICAgIC8vIFN1cHBv
cnQ6IElFPDkKKyAgICAgICAgLy8gT3RoZXJ3aXNlIGFwcGVuZCBkaXJlY3RseQorICAgICAgICBm
dW5jdGlvbiggdGFyZ2V0LCBlbHMgKSB7CisgICAgICAgICAgICB2YXIgaiA9IHRhcmdldC5sZW5n
dGgsCisgICAgICAgICAgICAgICAgaSA9IDA7CisgICAgICAgICAgICAvLyBDYW4ndCB0cnVzdCBO
b2RlTGlzdC5sZW5ndGgKKyAgICAgICAgICAgIHdoaWxlICggKHRhcmdldFtqKytdID0gZWxzW2kr
K10pICkge30KKyAgICAgICAgICAgIHRhcmdldC5sZW5ndGggPSBqIC0gMTsKKyAgICAgICAgfQor
ICAgIH07Cit9CisKK2Z1bmN0aW9uIFNpenpsZSggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMs
IHNlZWQgKSB7CisgICAgdmFyIG0sIGksIGVsZW0sIG5pZCwgbWF0Y2gsIGdyb3VwcywgbmV3U2Vs
ZWN0b3IsCisgICAgICAgIG5ld0NvbnRleHQgPSBjb250ZXh0ICYmIGNvbnRleHQub3duZXJEb2N1
bWVudCwKKworICAgICAgICAvLyBub2RlVHlwZSBkZWZhdWx0cyB0byA5LCBzaW5jZSBjb250ZXh0
IGRlZmF1bHRzIHRvIGRvY3VtZW50CisgICAgICAgIG5vZGVUeXBlID0gY29udGV4dCA/IGNvbnRl
eHQubm9kZVR5cGUgOiA5OworCisgICAgcmVzdWx0cyA9IHJlc3VsdHMgfHwgW107CisKKyAgICAv
LyBSZXR1cm4gZWFybHkgZnJvbSBjYWxscyB3aXRoIGludmFsaWQgc2VsZWN0b3Igb3IgY29udGV4
dAorICAgIGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSAic3RyaW5nIiB8fCAhc2VsZWN0b3IgfHwK
KyAgICAgICAgbm9kZVR5cGUgIT09IDEgJiYgbm9kZVR5cGUgIT09IDkgJiYgbm9kZVR5cGUgIT09
IDExICkgeworCisgICAgICAgIHJldHVybiByZXN1bHRzOworICAgIH0KKworICAgIC8vIFRyeSB0
byBzaG9ydGN1dCBmaW5kIG9wZXJhdGlvbnMgKGFzIG9wcG9zZWQgdG8gZmlsdGVycykgaW4gSFRN
TCBkb2N1bWVudHMKKyAgICBpZiAoICFzZWVkICkgeworCisgICAgICAgIGlmICggKCBjb250ZXh0
ID8gY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgOiBwcmVmZXJyZWREb2MgKSAhPT0g
ZG9jdW1lbnQgKSB7CisgICAgICAgICAgICBzZXREb2N1bWVudCggY29udGV4dCApOworICAgICAg
ICB9CisgICAgICAgIGNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50OworCisgICAgICAgIGlm
ICggZG9jdW1lbnRJc0hUTUwgKSB7CisKKyAgICAgICAgICAgIC8vIElmIHRoZSBzZWxlY3RvciBp
cyBzdWZmaWNpZW50bHkgc2ltcGxlLCB0cnkgdXNpbmcgYSAiZ2V0KkJ5KiIgRE9NIG1ldGhvZAor
ICAgICAgICAgICAgLy8gKGV4Y2VwdGluZyBEb2N1bWVudEZyYWdtZW50IGNvbnRleHQsIHdoZXJl
IHRoZSBtZXRob2RzIGRvbid0IGV4aXN0KQorICAgICAgICAgICAgaWYgKCBub2RlVHlwZSAhPT0g
MTEgJiYgKG1hdGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApKSApIHsKKworICAgICAg
ICAgICAgICAgIC8vIElEIHNlbGVjdG9yCisgICAgICAgICAgICAgICAgaWYgKCAobSA9IG1hdGNo
WzFdKSApIHsKKworICAgICAgICAgICAgICAgICAgICAvLyBEb2N1bWVudCBjb250ZXh0CisgICAg
ICAgICAgICAgICAgICAgIGlmICggbm9kZVR5cGUgPT09IDkgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIChlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggbSApKSApIHsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IElFLCBPcGVyYSwgV2Via2l0
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogaWRlbnRpZnkgdmVyc2lvbnMK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnZXRFbGVtZW50QnlJZCBjYW4gbWF0Y2gg
ZWxlbWVudHMgYnkgbmFtZSBpbnN0ZWFkIG9mIElECisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBlbGVtLmlkID09PSBtICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHRzLnB1c2goIGVsZW0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdHM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0czsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICAvLyBFbGVtZW50IGNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogSUUsIE9wZXJhLCBXZWJraXQKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IGlkZW50aWZ5IHZlcnNpb25zCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBnZXRFbGVtZW50QnlJZCBjYW4gbWF0Y2ggZWxlbWVudHMgYnkg
bmFtZSBpbnN0ZWFkIG9mIElECisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG5ld0NvbnRl
eHQgJiYgKGVsZW0gPSBuZXdDb250ZXh0LmdldEVsZW1lbnRCeUlkKCBtICkpICYmCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGFpbnMoIGNvbnRleHQsIGVsZW0gKSAmJgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVsZW0uaWQgPT09IG0gKSB7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHRzLnB1c2goIGVsZW0gKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0czsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gVHlwZSBzZWxlY3RvcgorICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoIG1hdGNoWzJdICkgeworICAgICAgICAgICAgICAgICAg
ICBwdXNoLmFwcGx5KCByZXN1bHRzLCBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBzZWxl
Y3RvciApICk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOworCisgICAgICAg
ICAgICAgICAgLy8gQ2xhc3Mgc2VsZWN0b3IKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCAo
bSA9IG1hdGNoWzNdKSAmJiBzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiYKKyAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICkgeworCisgICAg
ICAgICAgICAgICAgICAgIHB1c2guYXBwbHkoIHJlc3VsdHMsIGNvbnRleHQuZ2V0RWxlbWVudHNC
eUNsYXNzTmFtZSggbSApICk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVGFrZSBh
ZHZhbnRhZ2Ugb2YgcXVlcnlTZWxlY3RvckFsbAorICAgICAgICAgICAgaWYgKCBzdXBwb3J0LnFz
YSAmJgorICAgICAgICAgICAgICAgICFjb21waWxlckNhY2hlWyBzZWxlY3RvciArICIgIiBdICYm
CisgICAgICAgICAgICAgICAgKCFyYnVnZ3lRU0EgfHwgIXJidWdneVFTQS50ZXN0KCBzZWxlY3Rv
ciApKSApIHsKKworICAgICAgICAgICAgICAgIGlmICggbm9kZVR5cGUgIT09IDEgKSB7CisgICAg
ICAgICAgICAgICAgICAgIG5ld0NvbnRleHQgPSBjb250ZXh0OworICAgICAgICAgICAgICAgICAg
ICBuZXdTZWxlY3RvciA9IHNlbGVjdG9yOworCisgICAgICAgICAgICAgICAgLy8gcVNBIGxvb2tz
IG91dHNpZGUgRWxlbWVudCBjb250ZXh0LCB3aGljaCBpcyBub3Qgd2hhdCB3ZSB3YW50CisgICAg
ICAgICAgICAgICAgLy8gVGhhbmtzIHRvIEFuZHJldyBEdXBvbnQgZm9yIHRoaXMgd29ya2Fyb3Vu
ZCB0ZWNobmlxdWUKKyAgICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBJRSA8PTgKKyAgICAgICAg
ICAgICAgICAvLyBFeGNsdWRlIG9iamVjdCBlbGVtZW50cworICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoIGNvbnRleHQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gIm9iamVjdCIgKSB7CisK
KyAgICAgICAgICAgICAgICAgICAgLy8gQ2FwdHVyZSB0aGUgY29udGV4dCBJRCwgc2V0dGluZyBp
dCBmaXJzdCBpZiBuZWNlc3NhcnkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAobmlkID0gY29u
dGV4dC5nZXRBdHRyaWJ1dGUoICJpZCIgKSkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBu
aWQgPSBuaWQucmVwbGFjZSggcmNzc2VzY2FwZSwgZmNzc2VzY2FwZSApOworICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5zZXRBdHRy
aWJ1dGUoICJpZCIsIChuaWQgPSBleHBhbmRvKSApOworICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgLy8gUHJlZml4IGV2ZXJ5IHNlbGVjdG9yIGluIHRoZSBsaXN0
CisgICAgICAgICAgICAgICAgICAgIGdyb3VwcyA9IHRva2VuaXplKCBzZWxlY3RvciApOworICAg
ICAgICAgICAgICAgICAgICBpID0gZ3JvdXBzLmxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAg
d2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBncm91cHNbaV0gPSAiIyIg
KyBuaWQgKyAiICIgKyB0b1NlbGVjdG9yKCBncm91cHNbaV0gKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBuZXdTZWxlY3RvciA9IGdyb3Vwcy5qb2luKCAiLCIg
KTsKKworICAgICAgICAgICAgICAgICAgICAvLyBFeHBhbmQgY29udGV4dCBmb3Igc2libGluZyBz
ZWxlY3RvcnMKKyAgICAgICAgICAgICAgICAgICAgbmV3Q29udGV4dCA9IHJzaWJsaW5nLnRlc3Qo
IHNlbGVjdG9yICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8CisgICAg
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0OworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIGlmICggbmV3U2VsZWN0b3IgKSB7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoLmFwcGx5KCByZXN1bHRzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5ld0NvbnRleHQucXVlcnlTZWxlY3RvckFsbCggbmV3U2VsZWN0
b3IgKQorICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiByZXN1bHRzOworICAgICAgICAgICAgICAgICAgICB9IGNhdGNoICggcXNhRXJyb3Ig
KSB7CisgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIG5pZCA9PT0gZXhwYW5kbyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LnJlbW92ZUF0dHJpYnV0ZSggImlkIiApOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gQWxsIG90aGVycworICAgIHJldHVybiBz
ZWxlY3QoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltLCAiJDEiICksIGNvbnRleHQsIHJlc3VsdHMs
IHNlZWQgKTsKK30KKworLyoqCisgKiBDcmVhdGUga2V5LXZhbHVlIGNhY2hlcyBvZiBsaW1pdGVk
IHNpemUKKyAqIEByZXR1cm5zIHtmdW5jdGlvbihzdHJpbmcsIG9iamVjdCl9IFJldHVybnMgdGhl
IE9iamVjdCBkYXRhIGFmdGVyIHN0b3JpbmcgaXQgb24gaXRzZWxmIHdpdGgKKyAqICBwcm9wZXJ0
eSBuYW1lIHRoZSAoc3BhY2Utc3VmZml4ZWQpIHN0cmluZyBhbmQgKGlmIHRoZSBjYWNoZSBpcyBs
YXJnZXIgdGhhbiBFeHByLmNhY2hlTGVuZ3RoKQorICogIGRlbGV0aW5nIHRoZSBvbGRlc3QgZW50
cnkKKyAqLworZnVuY3Rpb24gY3JlYXRlQ2FjaGUoKSB7CisgICAgdmFyIGtleXMgPSBbXTsKKwor
ICAgIGZ1bmN0aW9uIGNhY2hlKCBrZXksIHZhbHVlICkgeworICAgICAgICAvLyBVc2UgKGtleSAr
ICIgIikgdG8gYXZvaWQgY29sbGlzaW9uIHdpdGggbmF0aXZlIHByb3RvdHlwZSBwcm9wZXJ0aWVz
IChzZWUgSXNzdWUgIzE1NykKKyAgICAgICAgaWYgKCBrZXlzLnB1c2goIGtleSArICIgIiApID4g
RXhwci5jYWNoZUxlbmd0aCApIHsKKyAgICAgICAgICAgIC8vIE9ubHkga2VlcCB0aGUgbW9zdCBy
ZWNlbnQgZW50cmllcworICAgICAgICAgICAgZGVsZXRlIGNhY2hlWyBrZXlzLnNoaWZ0KCkgXTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gKGNhY2hlWyBrZXkgKyAiICIgXSA9IHZhbHVlKTsK
KyAgICB9CisgICAgcmV0dXJuIGNhY2hlOworfQorCisvKioKKyAqIE1hcmsgYSBmdW5jdGlvbiBm
b3Igc3BlY2lhbCB1c2UgYnkgU2l6emxlCisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVu
Y3Rpb24gdG8gbWFyaworICovCitmdW5jdGlvbiBtYXJrRnVuY3Rpb24oIGZuICkgeworICAgIGZu
WyBleHBhbmRvIF0gPSB0cnVlOworICAgIHJldHVybiBmbjsKK30KKworLyoqCisgKiBTdXBwb3J0
IHRlc3RpbmcgdXNpbmcgYW4gZWxlbWVudAorICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gUGFzc2Vk
IHRoZSBjcmVhdGVkIGVsZW1lbnQgYW5kIHJldHVybnMgYSBib29sZWFuIHJlc3VsdAorICovCitm
dW5jdGlvbiBhc3NlcnQoIGZuICkgeworICAgIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImZpZWxkc2V0Iik7CisKKyAgICB0cnkgeworICAgICAgICByZXR1cm4gISFmbiggZWwgKTsK
KyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGZpbmFsbHkg
eworICAgICAgICAvLyBSZW1vdmUgZnJvbSBpdHMgcGFyZW50IGJ5IGRlZmF1bHQKKyAgICAgICAg
aWYgKCBlbC5wYXJlbnROb2RlICkgeworICAgICAgICAgICAgZWwucGFyZW50Tm9kZS5yZW1vdmVD
aGlsZCggZWwgKTsKKyAgICAgICAgfQorICAgICAgICAvLyByZWxlYXNlIG1lbW9yeSBpbiBJRQor
ICAgICAgICBlbCA9IG51bGw7CisgICAgfQorfQorCisvKioKKyAqIEFkZHMgdGhlIHNhbWUgaGFu
ZGxlciBmb3IgYWxsIG9mIHRoZSBzcGVjaWZpZWQgYXR0cnMKKyAqIEBwYXJhbSB7U3RyaW5nfSBh
dHRycyBQaXBlLXNlcGFyYXRlZCBsaXN0IG9mIGF0dHJpYnV0ZXMKKyAqIEBwYXJhbSB7RnVuY3Rp
b259IGhhbmRsZXIgVGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgYXBwbGllZAorICovCitmdW5jdGlv
biBhZGRIYW5kbGUoIGF0dHJzLCBoYW5kbGVyICkgeworICAgIHZhciBhcnIgPSBhdHRycy5zcGxp
dCgifCIpLAorICAgICAgICBpID0gYXJyLmxlbmd0aDsKKworICAgIHdoaWxlICggaS0tICkgewor
ICAgICAgICBFeHByLmF0dHJIYW5kbGVbIGFycltpXSBdID0gaGFuZGxlcjsKKyAgICB9Cit9CisK
Ky8qKgorICogQ2hlY2tzIGRvY3VtZW50IG9yZGVyIG9mIHR3byBzaWJsaW5ncworICogQHBhcmFt
IHtFbGVtZW50fSBhCisgKiBAcGFyYW0ge0VsZW1lbnR9IGIKKyAqIEByZXR1cm5zIHtOdW1iZXJ9
IFJldHVybnMgbGVzcyB0aGFuIDAgaWYgYSBwcmVjZWRlcyBiLCBncmVhdGVyIHRoYW4gMCBpZiBh
IGZvbGxvd3MgYgorICovCitmdW5jdGlvbiBzaWJsaW5nQ2hlY2soIGEsIGIgKSB7CisgICAgdmFy
IGN1ciA9IGIgJiYgYSwKKyAgICAgICAgZGlmZiA9IGN1ciAmJiBhLm5vZGVUeXBlID09PSAxICYm
IGIubm9kZVR5cGUgPT09IDEgJiYKKyAgICAgICAgICAgIGEuc291cmNlSW5kZXggLSBiLnNvdXJj
ZUluZGV4OworCisgICAgLy8gVXNlIElFIHNvdXJjZUluZGV4IGlmIGF2YWlsYWJsZSBvbiBib3Ro
IG5vZGVzCisgICAgaWYgKCBkaWZmICkgeworICAgICAgICByZXR1cm4gZGlmZjsKKyAgICB9CisK
KyAgICAvLyBDaGVjayBpZiBiIGZvbGxvd3MgYQorICAgIGlmICggY3VyICkgeworICAgICAgICB3
aGlsZSAoIChjdXIgPSBjdXIubmV4dFNpYmxpbmcpICkgeworICAgICAgICAgICAgaWYgKCBjdXIg
PT09IGIgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGEgPyAxIDogLTE7Cit9CisKKy8qKgorICogUmV0
dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBpbnB1dCB0eXBlcworICogQHBh
cmFtIHtTdHJpbmd9IHR5cGUKKyAqLworZnVuY3Rpb24gY3JlYXRlSW5wdXRQc2V1ZG8oIHR5cGUg
KSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICB2YXIgbmFtZSA9IGVs
ZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgcmV0dXJuIG5hbWUgPT09ICJpbnB1
dCIgJiYgZWxlbS50eXBlID09PSB0eXBlOworICAgIH07Cit9CisKKy8qKgorICogUmV0dXJucyBh
IGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBidXR0b25zCisgKiBAcGFyYW0ge1N0cmlu
Z30gdHlwZQorICovCitmdW5jdGlvbiBjcmVhdGVCdXR0b25Qc2V1ZG8oIHR5cGUgKSB7CisgICAg
cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICB2YXIgbmFtZSA9IGVsZW0ubm9kZU5h
bWUudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgcmV0dXJuIChuYW1lID09PSAiaW5wdXQiIHx8IG5h
bWUgPT09ICJidXR0b24iKSAmJiBlbGVtLnR5cGUgPT09IHR5cGU7CisgICAgfTsKK30KKworLyoq
CisgKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIDplbmFibGVkLzpk
aXNhYmxlZAorICogQHBhcmFtIHtCb29sZWFufSBkaXNhYmxlZCB0cnVlIGZvciA6ZGlzYWJsZWQ7
IGZhbHNlIGZvciA6ZW5hYmxlZAorICovCitmdW5jdGlvbiBjcmVhdGVEaXNhYmxlZFBzZXVkbygg
ZGlzYWJsZWQgKSB7CisKKyAgICAvLyBLbm93biA6ZGlzYWJsZWQgZmFsc2UgcG9zaXRpdmVzOiBm
aWVsZHNldFtkaXNhYmxlZF0gPiBsZWdlbmQ6bnRoLW9mLXR5cGUobisyKSA6Y2FuLWRpc2FibGUK
KyAgICByZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7CisKKyAgICAgICAgLy8gT25seSBjZXJ0YWlu
IGVsZW1lbnRzIGNhbiBtYXRjaCA6ZW5hYmxlZCBvciA6ZGlzYWJsZWQKKyAgICAgICAgLy8gaHR0
cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjc2VsZWN0
b3ItZW5hYmxlZAorICAgICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRp
cGFnZS9zY3JpcHRpbmcuaHRtbCNzZWxlY3Rvci1kaXNhYmxlZAorICAgICAgICBpZiAoICJmb3Jt
IiBpbiBlbGVtICkgeworCisgICAgICAgICAgICAvLyBDaGVjayBmb3IgaW5oZXJpdGVkIGRpc2Fi
bGVkbmVzcyBvbiByZWxldmFudCBub24tZGlzYWJsZWQgZWxlbWVudHM6CisgICAgICAgICAgICAv
LyAqIGxpc3RlZCBmb3JtLWFzc29jaWF0ZWQgZWxlbWVudHMgaW4gYSBkaXNhYmxlZCBmaWVsZHNl
dAorICAgICAgICAgICAgLy8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFn
ZS9mb3Jtcy5odG1sI2NhdGVnb3J5LWxpc3RlZAorICAgICAgICAgICAgLy8gICBodHRwczovL2h0
bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NvbmNlcHQtZmUtZGlzYWJs
ZWQKKyAgICAgICAgICAgIC8vICogb3B0aW9uIGVsZW1lbnRzIGluIGEgZGlzYWJsZWQgb3B0Z3Jv
dXAKKyAgICAgICAgICAgIC8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBh
Z2UvZm9ybXMuaHRtbCNjb25jZXB0LW9wdGlvbi1kaXNhYmxlZAorICAgICAgICAgICAgLy8gQWxs
IHN1Y2ggZWxlbWVudHMgaGF2ZSBhICJmb3JtIiBwcm9wZXJ0eS4KKyAgICAgICAgICAgIGlmICgg
ZWxlbS5wYXJlbnROb2RlICYmIGVsZW0uZGlzYWJsZWQgPT09IGZhbHNlICkgeworCisgICAgICAg
ICAgICAgICAgLy8gT3B0aW9uIGVsZW1lbnRzIGRlZmVyIHRvIGEgcGFyZW50IG9wdGdyb3VwIGlm
IHByZXNlbnQKKyAgICAgICAgICAgICAgICBpZiAoICJsYWJlbCIgaW4gZWxlbSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCAibGFiZWwiIGluIGVsZW0ucGFyZW50Tm9kZSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLnBhcmVudE5vZGUuZGlzYWJsZWQgPT09IGRp
c2FibGVkOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGRpc2FibGVkOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDog
SUUgNiAtIDExCisgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBpc0Rpc2FibGVkIHNob3J0Y3V0
IHByb3BlcnR5IHRvIGNoZWNrIGZvciBkaXNhYmxlZCBmaWVsZHNldCBhbmNlc3RvcnMKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZWxlbS5pc0Rpc2FibGVkID09PSBkaXNhYmxlZCB8fAorCisgICAg
ICAgICAgICAgICAgICAgIC8vIFdoZXJlIHRoZXJlIGlzIG5vIGlzRGlzYWJsZWQsIGNoZWNrIG1h
bnVhbGx5CisgICAgICAgICAgICAgICAgICAgIC8qIGpzaGludCAtVzAxOCAqLworICAgICAgICAg
ICAgICAgICAgICBlbGVtLmlzRGlzYWJsZWQgIT09ICFkaXNhYmxlZCAmJgorICAgICAgICAgICAg
ICAgICAgICAgICAgZGlzYWJsZWRBbmNlc3RvciggZWxlbSApID09PSBkaXNhYmxlZDsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGRpc2FibGVk
OworCisgICAgICAgIC8vIFRyeSB0byB3aW5ub3cgb3V0IGVsZW1lbnRzIHRoYXQgY2FuJ3QgYmUg
ZGlzYWJsZWQgYmVmb3JlIHRydXN0aW5nIHRoZSBkaXNhYmxlZCBwcm9wZXJ0eS4KKyAgICAgICAg
Ly8gU29tZSB2aWN0aW1zIGdldCBjYXVnaHQgaW4gb3VyIG5ldCAobGFiZWwsIGxlZ2VuZCwgbWVu
dSwgdHJhY2spLCBidXQgaXQgc2hvdWxkbid0CisgICAgICAgIC8vIGV2ZW4gZXhpc3Qgb24gdGhl
bSwgbGV0IGFsb25lIGhhdmUgYSBib29sZWFuIHZhbHVlLgorICAgICAgICB9IGVsc2UgaWYgKCAi
bGFiZWwiIGluIGVsZW0gKSB7CisgICAgICAgICAgICByZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0g
ZGlzYWJsZWQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBSZW1haW5pbmcgZWxlbWVudHMgYXJl
IG5laXRoZXIgOmVuYWJsZWQgbm9yIDpkaXNhYmxlZAorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfTsKK30KKworLyoqCisgKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3Mg
Zm9yIHBvc2l0aW9uYWxzCisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbgorICovCitmdW5jdGlvbiBj
cmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmbiApIHsKKyAgICByZXR1cm4gbWFya0Z1bmN0aW9uKGZ1
bmN0aW9uKCBhcmd1bWVudCApIHsKKyAgICAgICAgYXJndW1lbnQgPSArYXJndW1lbnQ7CisgICAg
ICAgIHJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7CisgICAg
ICAgICAgICB2YXIgaiwKKyAgICAgICAgICAgICAgICBtYXRjaEluZGV4ZXMgPSBmbiggW10sIHNl
ZWQubGVuZ3RoLCBhcmd1bWVudCApLAorICAgICAgICAgICAgICAgIGkgPSBtYXRjaEluZGV4ZXMu
bGVuZ3RoOworCisgICAgICAgICAgICAvLyBNYXRjaCBlbGVtZW50cyBmb3VuZCBhdCB0aGUgc3Bl
Y2lmaWVkIGluZGV4ZXMKKyAgICAgICAgICAgIHdoaWxlICggaS0tICkgeworICAgICAgICAgICAg
ICAgIGlmICggc2VlZFsgKGogPSBtYXRjaEluZGV4ZXNbaV0pIF0gKSB7CisgICAgICAgICAgICAg
ICAgICAgIHNlZWRbal0gPSAhKG1hdGNoZXNbal0gPSBzZWVkW2pdKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0pOworfQorCisvKioKKyAqIENo
ZWNrcyBhIG5vZGUgZm9yIHZhbGlkaXR5IGFzIGEgU2l6emxlIGNvbnRleHQKKyAqIEBwYXJhbSB7
RWxlbWVudHxPYmplY3Q9fSBjb250ZXh0CisgKiBAcmV0dXJucyB7RWxlbWVudHxPYmplY3R8Qm9v
bGVhbn0gVGhlIGlucHV0IG5vZGUgaWYgYWNjZXB0YWJsZSwgb3RoZXJ3aXNlIGEgZmFsc3kgdmFs
dWUKKyAqLworZnVuY3Rpb24gdGVzdENvbnRleHQoIGNvbnRleHQgKSB7CisgICAgcmV0dXJuIGNv
bnRleHQgJiYgdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09ICJ1bmRlZmlu
ZWQiICYmIGNvbnRleHQ7Cit9CisKKy8vIEV4cG9zZSBzdXBwb3J0IHZhcnMgZm9yIGNvbnZlbmll
bmNlCitzdXBwb3J0ID0gU2l6emxlLnN1cHBvcnQgPSB7fTsKKworLyoqCisgKiBEZXRlY3RzIFhN
TCBub2RlcworICogQHBhcmFtIHtFbGVtZW50fE9iamVjdH0gZWxlbSBBbiBlbGVtZW50IG9yIGEg
ZG9jdW1lbnQKKyAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmZiBlbGVtIGlzIGEgbm9uLUhU
TUwgWE1MIG5vZGUKKyAqLworaXNYTUwgPSBTaXp6bGUuaXNYTUwgPSBmdW5jdGlvbiggZWxlbSAp
IHsKKyAgICAvLyBkb2N1bWVudEVsZW1lbnQgaXMgdmVyaWZpZWQgZm9yIGNhc2VzIHdoZXJlIGl0
IGRvZXNuJ3QgeWV0IGV4aXN0CisgICAgLy8gKHN1Y2ggYXMgbG9hZGluZyBpZnJhbWVzIGluIElF
IC0gIzQ4MzMpCisgICAgdmFyIGRvY3VtZW50RWxlbWVudCA9IGVsZW0gJiYgKGVsZW0ub3duZXJE
b2N1bWVudCB8fCBlbGVtKS5kb2N1bWVudEVsZW1lbnQ7CisgICAgcmV0dXJuIGRvY3VtZW50RWxl
bWVudCA/IGRvY3VtZW50RWxlbWVudC5ub2RlTmFtZSAhPT0gIkhUTUwiIDogZmFsc2U7Cit9Owor
CisvKioKKyAqIFNldHMgZG9jdW1lbnQtcmVsYXRlZCB2YXJpYWJsZXMgb25jZSBiYXNlZCBvbiB0
aGUgY3VycmVudCBkb2N1bWVudAorICogQHBhcmFtIHtFbGVtZW50fE9iamVjdH0gW2RvY10gQW4g
ZWxlbWVudCBvciBkb2N1bWVudCBvYmplY3QgdG8gdXNlIHRvIHNldCB0aGUgZG9jdW1lbnQKKyAq
IEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGN1cnJlbnQgZG9jdW1lbnQKKyAqLworc2V0
RG9jdW1lbnQgPSBTaXp6bGUuc2V0RG9jdW1lbnQgPSBmdW5jdGlvbiggbm9kZSApIHsKKyAgICB2
YXIgaGFzQ29tcGFyZSwgc3ViV2luZG93LAorICAgICAgICBkb2MgPSBub2RlID8gbm9kZS5vd25l
ckRvY3VtZW50IHx8IG5vZGUgOiBwcmVmZXJyZWREb2M7CisKKyAgICAvLyBSZXR1cm4gZWFybHkg
aWYgZG9jIGlzIGludmFsaWQgb3IgYWxyZWFkeSBzZWxlY3RlZAorICAgIGlmICggZG9jID09PSBk
b2N1bWVudCB8fCBkb2Mubm9kZVR5cGUgIT09IDkgfHwgIWRvYy5kb2N1bWVudEVsZW1lbnQgKSB7
CisgICAgICAgIHJldHVybiBkb2N1bWVudDsKKyAgICB9CisKKyAgICAvLyBVcGRhdGUgZ2xvYmFs
IHZhcmlhYmxlcworICAgIGRvY3VtZW50ID0gZG9jOworICAgIGRvY0VsZW0gPSBkb2N1bWVudC5k
b2N1bWVudEVsZW1lbnQ7CisgICAgZG9jdW1lbnRJc0hUTUwgPSAhaXNYTUwoIGRvY3VtZW50ICk7
CisKKyAgICAvLyBTdXBwb3J0OiBJRSA5LTExLCBFZGdlCisgICAgLy8gQWNjZXNzaW5nIGlmcmFt
ZSBkb2N1bWVudHMgYWZ0ZXIgdW5sb2FkIHRocm93cyAicGVybWlzc2lvbiBkZW5pZWQiIGVycm9y
cyAoalF1ZXJ5ICMxMzkzNikKKyAgICBpZiAoIHByZWZlcnJlZERvYyAhPT0gZG9jdW1lbnQgJiYK
KyAgICAgICAgKHN1YldpbmRvdyA9IGRvY3VtZW50LmRlZmF1bHRWaWV3KSAmJiBzdWJXaW5kb3cu
dG9wICE9PSBzdWJXaW5kb3cgKSB7CisKKyAgICAgICAgLy8gU3VwcG9ydDogSUUgMTEsIEVkZ2UK
KyAgICAgICAgaWYgKCBzdWJXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lciApIHsKKyAgICAgICAgICAg
IHN1YldpbmRvdy5hZGRFdmVudExpc3RlbmVyKCAidW5sb2FkIiwgdW5sb2FkSGFuZGxlciwgZmFs
c2UgKTsKKworICAgICAgICAvLyBTdXBwb3J0OiBJRSA5IC0gMTAgb25seQorICAgICAgICB9IGVs
c2UgaWYgKCBzdWJXaW5kb3cuYXR0YWNoRXZlbnQgKSB7CisgICAgICAgICAgICBzdWJXaW5kb3cu
YXR0YWNoRXZlbnQoICJvbnVubG9hZCIsIHVubG9hZEhhbmRsZXIgKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8qIEF0dHJpYnV0ZXMKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyAgICAvLyBT
dXBwb3J0OiBJRTw4CisgICAgLy8gVmVyaWZ5IHRoYXQgZ2V0QXR0cmlidXRlIHJlYWxseSByZXR1
cm5zIGF0dHJpYnV0ZXMgYW5kIG5vdCBwcm9wZXJ0aWVzCisgICAgLy8gKGV4Y2VwdGluZyBJRTgg
Ym9vbGVhbnMpCisgICAgc3VwcG9ydC5hdHRyaWJ1dGVzID0gYXNzZXJ0KGZ1bmN0aW9uKCBlbCAp
IHsKKyAgICAgICAgZWwuY2xhc3NOYW1lID0gImkiOworICAgICAgICByZXR1cm4gIWVsLmdldEF0
dHJpYnV0ZSgiY2xhc3NOYW1lIik7CisgICAgfSk7CisKKyAgICAvKiBnZXRFbGVtZW50KHMpQnkq
CisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisgICAgLy8gQ2hlY2sgaWYgZ2V0RWxlbWVudHNCeVRh
Z05hbWUoIioiKSByZXR1cm5zIG9ubHkgZWxlbWVudHMKKyAgICBzdXBwb3J0LmdldEVsZW1lbnRz
QnlUYWdOYW1lID0gYXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHsKKyAgICAgICAgZWwuYXBwZW5kQ2hp
bGQoIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoIiIpICk7CisgICAgICAgIHJldHVybiAhZWwuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGg7CisgICAgfSk7CisKKyAgICAvLyBTdXBwb3J0
OiBJRTw5CisgICAgc3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lID0gcm5hdGl2ZS50ZXN0
KCBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICk7CisKKyAgICAvLyBTdXBwb3J0OiBJ
RTwxMAorICAgIC8vIENoZWNrIGlmIGdldEVsZW1lbnRCeUlkIHJldHVybnMgZWxlbWVudHMgYnkg
bmFtZQorICAgIC8vIFRoZSBicm9rZW4gZ2V0RWxlbWVudEJ5SWQgbWV0aG9kcyBkb24ndCBwaWNr
IHVwIHByb2dyYW1tYXRpY2FsbHktc2V0IG5hbWVzLAorICAgIC8vIHNvIHVzZSBhIHJvdW5kYWJv
dXQgZ2V0RWxlbWVudHNCeU5hbWUgdGVzdAorICAgIHN1cHBvcnQuZ2V0QnlJZCA9IGFzc2VydChm
dW5jdGlvbiggZWwgKSB7CisgICAgICAgIGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGVsICkuaWQgPSBl
eHBhbmRvOworICAgICAgICByZXR1cm4gIWRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lIHx8ICFk
b2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSggZXhwYW5kbyApLmxlbmd0aDsKKyAgICB9KTsKKwor
ICAgIC8vIElEIGZpbHRlciBhbmQgZmluZAorICAgIGlmICggc3VwcG9ydC5nZXRCeUlkICkgewor
ICAgICAgICBFeHByLmZpbHRlclsiSUQiXSA9IGZ1bmN0aW9uKCBpZCApIHsKKyAgICAgICAgICAg
IHZhciBhdHRySWQgPSBpZC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApOworICAgICAg
ICAgICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAgIHJldHVybiBl
bGVtLmdldEF0dHJpYnV0ZSgiaWQiKSA9PT0gYXR0cklkOworICAgICAgICAgICAgfTsKKyAgICAg
ICAgfTsKKyAgICAgICAgRXhwci5maW5kWyJJRCJdID0gZnVuY3Rpb24oIGlkLCBjb250ZXh0ICkg
eworICAgICAgICAgICAgaWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gInVu
ZGVmaW5lZCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7CisgICAgICAgICAgICAgICAgdmFyIGVsZW0g
PSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApOworICAgICAgICAgICAgICAgIHJldHVybiBl
bGVtID8gWyBlbGVtIF0gOiBbXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9IGVs
c2UgeworICAgICAgICBFeHByLmZpbHRlclsiSUQiXSA9ICBmdW5jdGlvbiggaWQgKSB7CisgICAg
ICAgICAgICB2YXIgYXR0cklkID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTsK
KyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICB2
YXIgbm9kZSA9IHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZU5vZGUgIT09ICJ1bmRlZmluZWQiICYm
CisgICAgICAgICAgICAgICAgICAgIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlID09PSBhdHRySWQ7CisgICAgICAg
ICAgICB9OworICAgICAgICB9OworCisgICAgICAgIC8vIFN1cHBvcnQ6IElFIDYgLSA3IG9ubHkK
KyAgICAgICAgLy8gZ2V0RWxlbWVudEJ5SWQgaXMgbm90IHJlbGlhYmxlIGFzIGEgZmluZCBzaG9y
dGN1dAorICAgICAgICBFeHByLmZpbmRbIklEIl0gPSBmdW5jdGlvbiggaWQsIGNvbnRleHQgKSB7
CisgICAgICAgICAgICBpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSAidW5k
ZWZpbmVkIiAmJiBkb2N1bWVudElzSFRNTCApIHsKKyAgICAgICAgICAgICAgICB2YXIgbm9kZSwg
aSwgZWxlbXMsCisgICAgICAgICAgICAgICAgICAgIGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRC
eUlkKCBpZCApOworCisgICAgICAgICAgICAgICAgaWYgKCBlbGVtICkgeworCisgICAgICAgICAg
ICAgICAgICAgIC8vIFZlcmlmeSB0aGUgaWQgYXR0cmlidXRlCisgICAgICAgICAgICAgICAgICAg
IG5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoImlkIik7CisgICAgICAgICAgICAgICAgICAg
IGlmICggbm9kZSAmJiBub2RlLnZhbHVlID09PSBpZCApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBbIGVsZW0gXTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgIC8vIEZhbGwgYmFjayBvbiBnZXRFbGVtZW50c0J5TmFtZQorICAgICAgICAgICAg
ICAgICAgICBlbGVtcyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeU5hbWUoIGlkICk7CisgICAgICAg
ICAgICAgICAgICAgIGkgPSAwOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIChlbGVtID0g
ZWxlbXNbaSsrXSkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gZWxlbS5nZXRB
dHRyaWJ1dGVOb2RlKCJpZCIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBub2RlICYm
IG5vZGUudmFsdWUgPT09IGlkICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBbIGVsZW0gXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBbXTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisKKyAgICAvLyBUYWcKKyAgICBFeHByLmZp
bmRbIlRBRyJdID0gc3VwcG9ydC5nZXRFbGVtZW50c0J5VGFnTmFtZSA/CisgICAgICAgIGZ1bmN0
aW9uKCB0YWcsIGNvbnRleHQgKSB7CisgICAgICAgICAgICBpZiAoIHR5cGVvZiBjb250ZXh0Lmdl
dEVsZW1lbnRzQnlUYWdOYW1lICE9PSAidW5kZWZpbmVkIiApIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7CisKKyAgICAgICAgICAg
IC8vIERvY3VtZW50RnJhZ21lbnQgbm9kZXMgZG9uJ3QgaGF2ZSBnRUJUTgorICAgICAgICAgICAg
fSBlbHNlIGlmICggc3VwcG9ydC5xc2EgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRl
eHQucXVlcnlTZWxlY3RvckFsbCggdGFnICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gOgor
CisgICAgICAgIGZ1bmN0aW9uKCB0YWcsIGNvbnRleHQgKSB7CisgICAgICAgICAgICB2YXIgZWxl
bSwKKyAgICAgICAgICAgICAgICB0bXAgPSBbXSwKKyAgICAgICAgICAgICAgICBpID0gMCwKKyAg
ICAgICAgICAgICAgICAvLyBCeSBoYXBweSBjb2luY2lkZW5jZSwgYSAoYnJva2VuKSBnRUJUTiBh
cHBlYXJzIG9uIERvY3VtZW50RnJhZ21lbnQgbm9kZXMgdG9vCisgICAgICAgICAgICAgICAgcmVz
dWx0cyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApOworCisgICAgICAgICAg
ICAvLyBGaWx0ZXIgb3V0IHBvc3NpYmxlIGNvbW1lbnRzCisgICAgICAgICAgICBpZiAoIHRhZyA9
PT0gIioiICkgeworICAgICAgICAgICAgICAgIHdoaWxlICggKGVsZW0gPSByZXN1bHRzW2krK10p
ICkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0bXAucHVzaCggZWxlbSApOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIHRtcDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXN1bHRzOworICAgICAgICB9Owor
CisgICAgLy8gQ2xhc3MKKyAgICBFeHByLmZpbmRbIkNMQVNTIl0gPSBzdXBwb3J0LmdldEVsZW1l
bnRzQnlDbGFzc05hbWUgJiYgZnVuY3Rpb24oIGNsYXNzTmFtZSwgY29udGV4dCApIHsKKyAgICAg
ICAgaWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICE9PSAidW5kZWZp
bmVkIiAmJiBkb2N1bWVudElzSFRNTCApIHsKKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0Lmdl
dEVsZW1lbnRzQnlDbGFzc05hbWUoIGNsYXNzTmFtZSApOworICAgICAgICB9CisgICAgfTsKKwor
ICAgIC8qIFFTQS9tYXRjaGVzU2VsZWN0b3IKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyAgICAv
LyBRU0EgYW5kIG1hdGNoZXNTZWxlY3RvciBzdXBwb3J0CisKKyAgICAvLyBtYXRjaGVzU2VsZWN0
b3IoOmFjdGl2ZSkgcmVwb3J0cyBmYWxzZSB3aGVuIHRydWUgKElFOS9PcGVyYSAxMS41KQorICAg
IHJidWdneU1hdGNoZXMgPSBbXTsKKworICAgIC8vIHFTYSg6Zm9jdXMpIHJlcG9ydHMgZmFsc2Ug
d2hlbiB0cnVlIChDaHJvbWUgMjEpCisgICAgLy8gV2UgYWxsb3cgdGhpcyBiZWNhdXNlIG9mIGEg
YnVnIGluIElFOC85IHRoYXQgdGhyb3dzIGFuIGVycm9yCisgICAgLy8gd2hlbmV2ZXIgYGRvY3Vt
ZW50LmFjdGl2ZUVsZW1lbnRgIGlzIGFjY2Vzc2VkIG9uIGFuIGlmcmFtZQorICAgIC8vIFNvLCB3
ZSBhbGxvdyA6Zm9jdXMgdG8gcGFzcyB0aHJvdWdoIFFTQSBhbGwgdGhlIHRpbWUgdG8gYXZvaWQg
dGhlIElFIGVycm9yCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8x
MzM3OAorICAgIHJidWdneVFTQSA9IFtdOworCisgICAgaWYgKCAoc3VwcG9ydC5xc2EgPSBybmF0
aXZlLnRlc3QoIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwgKSkgKSB7CisgICAgICAgIC8vIEJ1
aWxkIFFTQSByZWdleAorICAgICAgICAvLyBSZWdleCBzdHJhdGVneSBhZG9wdGVkIGZyb20gRGll
Z28gUGVyaW5pCisgICAgICAgIGFzc2VydChmdW5jdGlvbiggZWwgKSB7CisgICAgICAgICAgICAv
LyBTZWxlY3QgaXMgc2V0IHRvIGVtcHR5IHN0cmluZyBvbiBwdXJwb3NlCisgICAgICAgICAgICAv
LyBUaGlzIGlzIHRvIHRlc3QgSUUncyB0cmVhdG1lbnQgb2Ygbm90IGV4cGxpY2l0bHkKKyAgICAg
ICAgICAgIC8vIHNldHRpbmcgYSBib29sZWFuIGNvbnRlbnQgYXR0cmlidXRlLAorICAgICAgICAg
ICAgLy8gc2luY2UgaXRzIHByZXNlbmNlIHNob3VsZCBiZSBlbm91Z2gKKyAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMjM1OQorICAgICAgICAgICAgZG9jRWxl
bS5hcHBlbmRDaGlsZCggZWwgKS5pbm5lckhUTUwgPSAiPGEgaWQ9JyIgKyBleHBhbmRvICsgIic+
PC9hPiIgKworICAgICAgICAgICAgICAgICI8c2VsZWN0IGlkPSciICsgZXhwYW5kbyArICItXHJc
XCcgbXNhbGxvd2NhcHR1cmU9Jyc+IiArCisgICAgICAgICAgICAgICAgIjxvcHRpb24gc2VsZWN0
ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+IjsKKworICAgICAgICAgICAgLy8gU3VwcG9ydDogSUU4
LCBPcGVyYSAxMS0xMi4xNgorICAgICAgICAgICAgLy8gTm90aGluZyBzaG91bGQgYmUgc2VsZWN0
ZWQgd2hlbiBlbXB0eSBzdHJpbmdzIGZvbGxvdyBePSBvciAkPSBvciAqPQorICAgICAgICAgICAg
Ly8gVGhlIHRlc3QgYXR0cmlidXRlIG11c3QgYmUgdW5rbm93biBpbiBPcGVyYSBidXQgInNhZmUi
IGZvciBXaW5SVAorICAgICAgICAgICAgLy8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4t
dXMvbGlicmFyeS9pZS9oaDQ2NTM4OC5hc3B4I2F0dHJpYnV0ZV9zZWN0aW9uCisgICAgICAgICAg
ICBpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIlttc2FsbG93Y2FwdHVyZV49JyddIikubGVuZ3Ro
ICkgeworICAgICAgICAgICAgICAgIHJidWdneVFTQS5wdXNoKCAiWypeJF09IiArIHdoaXRlc3Bh
Y2UgKyAiKig/OicnfFwiXCIpIiApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBT
dXBwb3J0OiBJRTgKKyAgICAgICAgICAgIC8vIEJvb2xlYW4gYXR0cmlidXRlcyBhbmQgInZhbHVl
IiBhcmUgbm90IHRyZWF0ZWQgY29ycmVjdGx5CisgICAgICAgICAgICBpZiAoICFlbC5xdWVyeVNl
bGVjdG9yQWxsKCJbc2VsZWN0ZWRdIikubGVuZ3RoICkgeworICAgICAgICAgICAgICAgIHJidWdn
eVFTQS5wdXNoKCAiXFxbIiArIHdoaXRlc3BhY2UgKyAiKig/OnZhbHVlfCIgKyBib29sZWFucyAr
ICIpIiApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTdXBwb3J0OiBDaHJvbWU8
MjksIEFuZHJvaWQ8NC40LCBTYWZhcmk8Ny4wKywgaU9TPDcuMCssIFBoYW50b21KUzwxLjkuOCsK
KyAgICAgICAgICAgIGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoICJbaWR+PSIgKyBleHBhbmRv
ICsgIi1dIiApLmxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICByYnVnZ3lRU0EucHVzaCgifj0i
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gV2Via2l0L09wZXJhIC0gOmNoZWNr
ZWQgc2hvdWxkIHJldHVybiBzZWxlY3RlZCBvcHRpb24gZWxlbWVudHMKKyAgICAgICAgICAgIC8v
IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5LyNj
aGVja2VkCisgICAgICAgICAgICAvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgYW5kIHdpbGwgbm90
IHNlZSBsYXRlciB0ZXN0cworICAgICAgICAgICAgaWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCgi
OmNoZWNrZWQiKS5sZW5ndGggKSB7CisgICAgICAgICAgICAgICAgcmJ1Z2d5UVNBLnB1c2goIjpj
aGVja2VkIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFN1cHBvcnQ6IFNhZmFy
aSA4KywgaU9TIDgrCisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTM2ODUxCisgICAgICAgICAgICAvLyBJbi1wYWdlIGBzZWxlY3RvciNpZCBz
aWJsaW5nLWNvbWJpbmF0b3Igc2VsZWN0b3JgIGZhaWxzCisgICAgICAgICAgICBpZiAoICFlbC5x
dWVyeVNlbGVjdG9yQWxsKCAiYSMiICsgZXhwYW5kbyArICIrKiIgKS5sZW5ndGggKSB7CisgICAg
ICAgICAgICAgICAgcmJ1Z2d5UVNBLnB1c2goIi4jLitbK35dIik7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0pOworCisgICAgICAgIGFzc2VydChmdW5jdGlvbiggZWwgKSB7CisgICAgICAgICAg
ICBlbC5pbm5lckhUTUwgPSAiPGEgaHJlZj0nJyBkaXNhYmxlZD0nZGlzYWJsZWQnPjwvYT4iICsK
KyAgICAgICAgICAgICAgICAiPHNlbGVjdCBkaXNhYmxlZD0nZGlzYWJsZWQnPjxvcHRpb24vPjwv
c2VsZWN0PiI7CisKKyAgICAgICAgICAgIC8vIFN1cHBvcnQ6IFdpbmRvd3MgOCBOYXRpdmUgQXBw
cworICAgICAgICAgICAgLy8gVGhlIHR5cGUgYW5kIG5hbWUgYXR0cmlidXRlcyBhcmUgcmVzdHJp
Y3RlZCBkdXJpbmcgLmlubmVySFRNTCBhc3NpZ25tZW50CisgICAgICAgICAgICB2YXIgaW5wdXQg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOworICAgICAgICAgICAgaW5wdXQuc2V0
QXR0cmlidXRlKCAidHlwZSIsICJoaWRkZW4iICk7CisgICAgICAgICAgICBlbC5hcHBlbmRDaGls
ZCggaW5wdXQgKS5zZXRBdHRyaWJ1dGUoICJuYW1lIiwgIkQiICk7CisKKyAgICAgICAgICAgIC8v
IFN1cHBvcnQ6IElFOAorICAgICAgICAgICAgLy8gRW5mb3JjZSBjYXNlLXNlbnNpdGl2aXR5IG9m
IG5hbWUgYXR0cmlidXRlCisgICAgICAgICAgICBpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIltu
YW1lPWRdIikubGVuZ3RoICkgeworICAgICAgICAgICAgICAgIHJidWdneVFTQS5wdXNoKCAibmFt
ZSIgKyB3aGl0ZXNwYWNlICsgIipbKl4kfCF+XT89IiApOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAvLyBGRiAzLjUgLSA6ZW5hYmxlZC86ZGlzYWJsZWQgYW5kIGhpZGRlbiBlbGVtZW50
cyAoaGlkZGVuIGVsZW1lbnRzIGFyZSBzdGlsbCBlbmFibGVkKQorICAgICAgICAgICAgLy8gSUU4
IHRocm93cyBlcnJvciBoZXJlIGFuZCB3aWxsIG5vdCBzZWUgbGF0ZXIgdGVzdHMKKyAgICAgICAg
ICAgIGlmICggZWwucXVlcnlTZWxlY3RvckFsbCgiOmVuYWJsZWQiKS5sZW5ndGggIT09IDIgKSB7
CisgICAgICAgICAgICAgICAgcmJ1Z2d5UVNBLnB1c2goICI6ZW5hYmxlZCIsICI6ZGlzYWJsZWQi
ICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFN1cHBvcnQ6IElFOS0xMSsKKyAg
ICAgICAgICAgIC8vIElFJ3MgOmRpc2FibGVkIHNlbGVjdG9yIGRvZXMgbm90IHBpY2sgdXAgdGhl
IGNoaWxkcmVuIG9mIGRpc2FibGVkIGZpZWxkc2V0cworICAgICAgICAgICAgZG9jRWxlbS5hcHBl
bmRDaGlsZCggZWwgKS5kaXNhYmxlZCA9IHRydWU7CisgICAgICAgICAgICBpZiAoIGVsLnF1ZXJ5
U2VsZWN0b3JBbGwoIjpkaXNhYmxlZCIpLmxlbmd0aCAhPT0gMiApIHsKKyAgICAgICAgICAgICAg
ICByYnVnZ3lRU0EucHVzaCggIjplbmFibGVkIiwgIjpkaXNhYmxlZCIgKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLy8gT3BlcmEgMTAtMTEgZG9lcyBub3QgdGhyb3cgb24gcG9zdC1j
b21tYSBpbnZhbGlkIHBzZXVkb3MKKyAgICAgICAgICAgIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIios
OngiKTsKKyAgICAgICAgICAgIHJidWdneVFTQS5wdXNoKCIsLio6Iik7CisgICAgICAgIH0pOwor
ICAgIH0KKworICAgIGlmICggKHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yID0gcm5hdGl2ZS50ZXN0
KCAobWF0Y2hlcyA9IGRvY0VsZW0ubWF0Y2hlcyB8fAorICAgICAgICBkb2NFbGVtLndlYmtpdE1h
dGNoZXNTZWxlY3RvciB8fAorICAgICAgICBkb2NFbGVtLm1vek1hdGNoZXNTZWxlY3RvciB8fAor
ICAgICAgICBkb2NFbGVtLm9NYXRjaGVzU2VsZWN0b3IgfHwKKyAgICAgICAgZG9jRWxlbS5tc01h
dGNoZXNTZWxlY3RvcikgKSkgKSB7CisKKyAgICAgICAgYXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHsK
KyAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGRvIG1hdGNo
ZXNTZWxlY3RvcgorICAgICAgICAgICAgLy8gb24gYSBkaXNjb25uZWN0ZWQgbm9kZSAoSUUgOSkK
KyAgICAgICAgICAgIHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggPSBtYXRjaGVzLmNhbGwoIGVs
LCAiKiIgKTsKKworICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgZmFpbCB3aXRoIGFuIGV4Y2Vw
dGlvbgorICAgICAgICAgICAgLy8gR2Vja28gZG9lcyBub3QgZXJyb3IsIHJldHVybnMgZmFsc2Ug
aW5zdGVhZAorICAgICAgICAgICAgbWF0Y2hlcy5jYWxsKCBlbCwgIltzIT0nJ106eCIgKTsKKyAg
ICAgICAgICAgIHJidWdneU1hdGNoZXMucHVzaCggIiE9IiwgcHNldWRvcyApOworICAgICAgICB9
KTsKKyAgICB9CisKKyAgICByYnVnZ3lRU0EgPSByYnVnZ3lRU0EubGVuZ3RoICYmIG5ldyBSZWdF
eHAoIHJidWdneVFTQS5qb2luKCJ8IikgKTsKKyAgICByYnVnZ3lNYXRjaGVzID0gcmJ1Z2d5TWF0
Y2hlcy5sZW5ndGggJiYgbmV3IFJlZ0V4cCggcmJ1Z2d5TWF0Y2hlcy5qb2luKCJ8IikgKTsKKwor
ICAgIC8qIENvbnRhaW5zCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgIGhhc0NvbXBhcmUgPSBy
bmF0aXZlLnRlc3QoIGRvY0VsZW0uY29tcGFyZURvY3VtZW50UG9zaXRpb24gKTsKKworICAgIC8v
IEVsZW1lbnQgY29udGFpbnMgYW5vdGhlcgorICAgIC8vIFB1cnBvc2VmdWxseSBzZWxmLWV4Y2x1
c2l2ZQorICAgIC8vIEFzIGluLCBhbiBlbGVtZW50IGRvZXMgbm90IGNvbnRhaW4gaXRzZWxmCisg
ICAgY29udGFpbnMgPSBoYXNDb21wYXJlIHx8IHJuYXRpdmUudGVzdCggZG9jRWxlbS5jb250YWlu
cyApID8KKyAgICAgICAgZnVuY3Rpb24oIGEsIGIgKSB7CisgICAgICAgICAgICB2YXIgYWRvd24g
PSBhLm5vZGVUeXBlID09PSA5ID8gYS5kb2N1bWVudEVsZW1lbnQgOiBhLAorICAgICAgICAgICAg
ICAgIGJ1cCA9IGIgJiYgYi5wYXJlbnROb2RlOworICAgICAgICAgICAgcmV0dXJuIGEgPT09IGJ1
cCB8fCAhISggYnVwICYmIGJ1cC5ub2RlVHlwZSA9PT0gMSAmJiAoCisgICAgICAgICAgICAgICAg
YWRvd24uY29udGFpbnMgPworICAgICAgICAgICAgICAgICAgICBhZG93bi5jb250YWlucyggYnVw
ICkgOgorICAgICAgICAgICAgICAgICAgICBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICYmIGEu
Y29tcGFyZURvY3VtZW50UG9zaXRpb24oIGJ1cCApICYgMTYKKyAgICAgICAgICAgICkpOworICAg
ICAgICB9IDoKKyAgICAgICAgZnVuY3Rpb24oIGEsIGIgKSB7CisgICAgICAgICAgICBpZiAoIGIg
KSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKCAoYiA9IGIucGFyZW50Tm9kZSkgKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmICggYiA9PT0gYSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9OworCisg
ICAgLyogU29ydGluZworICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworICAgIC8vIERvY3VtZW50IG9y
ZGVyIHNvcnRpbmcKKyAgICBzb3J0T3JkZXIgPSBoYXNDb21wYXJlID8KKyAgICBmdW5jdGlvbigg
YSwgYiApIHsKKworICAgICAgICAvLyBGbGFnIGZvciBkdXBsaWNhdGUgcmVtb3ZhbAorICAgICAg
ICBpZiAoIGEgPT09IGIgKSB7CisgICAgICAgICAgICBoYXNEdXBsaWNhdGUgPSB0cnVlOworICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICAvLyBTb3J0IG9uIG1ldGhv
ZCBleGlzdGVuY2UgaWYgb25seSBvbmUgaW5wdXQgaGFzIGNvbXBhcmVEb2N1bWVudFBvc2l0aW9u
CisgICAgICAgIHZhciBjb21wYXJlID0gIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gLSAhYi5j
b21wYXJlRG9jdW1lbnRQb3NpdGlvbjsKKyAgICAgICAgaWYgKCBjb21wYXJlICkgeworICAgICAg
ICAgICAgcmV0dXJuIGNvbXBhcmU7CisgICAgICAgIH0KKworICAgICAgICAvLyBDYWxjdWxhdGUg
cG9zaXRpb24gaWYgYm90aCBpbnB1dHMgYmVsb25nIHRvIHRoZSBzYW1lIGRvY3VtZW50CisgICAg
ICAgIGNvbXBhcmUgPSAoIGEub3duZXJEb2N1bWVudCB8fCBhICkgPT09ICggYi5vd25lckRvY3Vt
ZW50IHx8IGIgKSA/CisgICAgICAgICAgICBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBiICkg
OgorCisgICAgICAgICAgICAvLyBPdGhlcndpc2Ugd2Uga25vdyB0aGV5IGFyZSBkaXNjb25uZWN0
ZWQKKyAgICAgICAgICAgIDE7CisKKyAgICAgICAgLy8gRGlzY29ubmVjdGVkIG5vZGVzCisgICAg
ICAgIGlmICggY29tcGFyZSAmIDEgfHwKKyAgICAgICAgICAgICghc3VwcG9ydC5zb3J0RGV0YWNo
ZWQgJiYgYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYSApID09PSBjb21wYXJlKSApIHsKKwor
ICAgICAgICAgICAgLy8gQ2hvb3NlIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgaXMgcmVsYXRlZCB0
byBvdXIgcHJlZmVycmVkIGRvY3VtZW50CisgICAgICAgICAgICBpZiAoIGEgPT09IGRvY3VtZW50
IHx8IGEub3duZXJEb2N1bWVudCA9PT0gcHJlZmVycmVkRG9jICYmIGNvbnRhaW5zKHByZWZlcnJl
ZERvYywgYSkgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKCBiID09PSBkb2N1bWVudCB8fCBiLm93bmVyRG9jdW1lbnQgPT09IHBy
ZWZlcnJlZERvYyAmJiBjb250YWlucyhwcmVmZXJyZWREb2MsIGIpICkgeworICAgICAgICAgICAg
ICAgIHJldHVybiAxOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBNYWludGFpbiBv
cmlnaW5hbCBvcmRlcgorICAgICAgICAgICAgcmV0dXJuIHNvcnRJbnB1dCA/CisgICAgICAgICAg
ICAgICAgKCBpbmRleE9mKCBzb3J0SW5wdXQsIGEgKSAtIGluZGV4T2YoIHNvcnRJbnB1dCwgYiAp
ICkgOgorICAgICAgICAgICAgICAgIDA7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gY29t
cGFyZSAmIDQgPyAtMSA6IDE7CisgICAgfSA6CisgICAgZnVuY3Rpb24oIGEsIGIgKSB7CisgICAg
ICAgIC8vIEV4aXQgZWFybHkgaWYgdGhlIG5vZGVzIGFyZSBpZGVudGljYWwKKyAgICAgICAgaWYg
KCBhID09PSBiICkgeworICAgICAgICAgICAgaGFzRHVwbGljYXRlID0gdHJ1ZTsKKyAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGN1ciwKKyAgICAgICAgICAg
IGkgPSAwLAorICAgICAgICAgICAgYXVwID0gYS5wYXJlbnROb2RlLAorICAgICAgICAgICAgYnVw
ID0gYi5wYXJlbnROb2RlLAorICAgICAgICAgICAgYXAgPSBbIGEgXSwKKyAgICAgICAgICAgIGJw
ID0gWyBiIF07CisKKyAgICAgICAgLy8gUGFyZW50bGVzcyBub2RlcyBhcmUgZWl0aGVyIGRvY3Vt
ZW50cyBvciBkaXNjb25uZWN0ZWQKKyAgICAgICAgaWYgKCAhYXVwIHx8ICFidXAgKSB7CisgICAg
ICAgICAgICByZXR1cm4gYSA9PT0gZG9jdW1lbnQgPyAtMSA6CisgICAgICAgICAgICAgICAgYiA9
PT0gZG9jdW1lbnQgPyAxIDoKKyAgICAgICAgICAgICAgICBhdXAgPyAtMSA6CisgICAgICAgICAg
ICAgICAgYnVwID8gMSA6CisgICAgICAgICAgICAgICAgc29ydElucHV0ID8KKyAgICAgICAgICAg
ICAgICAoIGluZGV4T2YoIHNvcnRJbnB1dCwgYSApIC0gaW5kZXhPZiggc29ydElucHV0LCBiICkg
KSA6CisgICAgICAgICAgICAgICAgMDsKKworICAgICAgICAvLyBJZiB0aGUgbm9kZXMgYXJlIHNp
YmxpbmdzLCB3ZSBjYW4gZG8gYSBxdWljayBjaGVjaworICAgICAgICB9IGVsc2UgaWYgKCBhdXAg
PT09IGJ1cCApIHsKKyAgICAgICAgICAgIHJldHVybiBzaWJsaW5nQ2hlY2soIGEsIGIgKTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIE90aGVyd2lzZSB3ZSBuZWVkIGZ1bGwgbGlzdHMgb2YgdGhl
aXIgYW5jZXN0b3JzIGZvciBjb21wYXJpc29uCisgICAgICAgIGN1ciA9IGE7CisgICAgICAgIHdo
aWxlICggKGN1ciA9IGN1ci5wYXJlbnROb2RlKSApIHsKKyAgICAgICAgICAgIGFwLnVuc2hpZnQo
IGN1ciApOworICAgICAgICB9CisgICAgICAgIGN1ciA9IGI7CisgICAgICAgIHdoaWxlICggKGN1
ciA9IGN1ci5wYXJlbnROb2RlKSApIHsKKyAgICAgICAgICAgIGJwLnVuc2hpZnQoIGN1ciApOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gV2FsayBkb3duIHRoZSB0cmVlIGxvb2tpbmcgZm9yIGEg
ZGlzY3JlcGFuY3kKKyAgICAgICAgd2hpbGUgKCBhcFtpXSA9PT0gYnBbaV0gKSB7CisgICAgICAg
ICAgICBpKys7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gaSA/CisgICAgICAgICAgICAv
LyBEbyBhIHNpYmxpbmcgY2hlY2sgaWYgdGhlIG5vZGVzIGhhdmUgYSBjb21tb24gYW5jZXN0b3IK
KyAgICAgICAgICAgIHNpYmxpbmdDaGVjayggYXBbaV0sIGJwW2ldICkgOgorCisgICAgICAgICAg
ICAvLyBPdGhlcndpc2Ugbm9kZXMgaW4gb3VyIGRvY3VtZW50IHNvcnQgZmlyc3QKKyAgICAgICAg
ICAgIGFwW2ldID09PSBwcmVmZXJyZWREb2MgPyAtMSA6CisgICAgICAgICAgICBicFtpXSA9PT0g
cHJlZmVycmVkRG9jID8gMSA6CisgICAgICAgICAgICAwOworICAgIH07CisKKyAgICByZXR1cm4g
ZG9jdW1lbnQ7Cit9OworCitTaXp6bGUubWF0Y2hlcyA9IGZ1bmN0aW9uKCBleHByLCBlbGVtZW50
cyApIHsKKyAgICByZXR1cm4gU2l6emxlKCBleHByLCBudWxsLCBudWxsLCBlbGVtZW50cyApOwor
fTsKKworU2l6emxlLm1hdGNoZXNTZWxlY3RvciA9IGZ1bmN0aW9uKCBlbGVtLCBleHByICkgewor
ICAgIC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZAorICAgIGlmICggKCBlbGVtLm93bmVy
RG9jdW1lbnQgfHwgZWxlbSApICE9PSBkb2N1bWVudCApIHsKKyAgICAgICAgc2V0RG9jdW1lbnQo
IGVsZW0gKTsKKyAgICB9CisKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCBhdHRyaWJ1dGUgc2VsZWN0
b3JzIGFyZSBxdW90ZWQKKyAgICBleHByID0gZXhwci5yZXBsYWNlKCByYXR0cmlidXRlUXVvdGVz
LCAiPSckMSddIiApOworCisgICAgaWYgKCBzdXBwb3J0Lm1hdGNoZXNTZWxlY3RvciAmJiBkb2N1
bWVudElzSFRNTCAmJgorICAgICAgICAhY29tcGlsZXJDYWNoZVsgZXhwciArICIgIiBdICYmCisg
ICAgICAgICggIXJidWdneU1hdGNoZXMgfHwgIXJidWdneU1hdGNoZXMudGVzdCggZXhwciApICkg
JiYKKyAgICAgICAgKCAhcmJ1Z2d5UVNBICAgICB8fCAhcmJ1Z2d5UVNBLnRlc3QoIGV4cHIgKSAp
ICkgeworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB2YXIgcmV0ID0gbWF0Y2hlcy5jYWxs
KCBlbGVtLCBleHByICk7CisKKyAgICAgICAgICAgIC8vIElFIDkncyBtYXRjaGVzU2VsZWN0b3Ig
cmV0dXJucyBmYWxzZSBvbiBkaXNjb25uZWN0ZWQgbm9kZXMKKyAgICAgICAgICAgIGlmICggcmV0
IHx8IHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggfHwKKyAgICAgICAgICAgICAgICAgICAgLy8g
QXMgd2VsbCwgZGlzY29ubmVjdGVkIG5vZGVzIGFyZSBzYWlkIHRvIGJlIGluIGEgZG9jdW1lbnQK
KyAgICAgICAgICAgICAgICAgICAgLy8gZnJhZ21lbnQgaW4gSUUgOQorICAgICAgICAgICAgICAg
ICAgICBlbGVtLmRvY3VtZW50ICYmIGVsZW0uZG9jdW1lbnQubm9kZVR5cGUgIT09IDExICkgewor
ICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0
Y2ggKGUpIHt9CisgICAgfQorCisgICAgcmV0dXJuIFNpenpsZSggZXhwciwgZG9jdW1lbnQsIG51
bGwsIFsgZWxlbSBdICkubGVuZ3RoID4gMDsKK307CisKK1NpenpsZS5jb250YWlucyA9IGZ1bmN0
aW9uKCBjb250ZXh0LCBlbGVtICkgeworICAgIC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRl
ZAorICAgIGlmICggKCBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCApICE9PSBkb2N1
bWVudCApIHsKKyAgICAgICAgc2V0RG9jdW1lbnQoIGNvbnRleHQgKTsKKyAgICB9CisgICAgcmV0
dXJuIGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICk7Cit9OworCitTaXp6bGUuYXR0ciA9IGZ1bmN0
aW9uKCBlbGVtLCBuYW1lICkgeworICAgIC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZAor
ICAgIGlmICggKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSApICE9PSBkb2N1bWVudCApIHsK
KyAgICAgICAgc2V0RG9jdW1lbnQoIGVsZW0gKTsKKyAgICB9CisKKyAgICB2YXIgZm4gPSBFeHBy
LmF0dHJIYW5kbGVbIG5hbWUudG9Mb3dlckNhc2UoKSBdLAorICAgICAgICAvLyBEb24ndCBnZXQg
Zm9vbGVkIGJ5IE9iamVjdC5wcm90b3R5cGUgcHJvcGVydGllcyAoalF1ZXJ5ICMxMzgwNykKKyAg
ICAgICAgdmFsID0gZm4gJiYgaGFzT3duLmNhbGwoIEV4cHIuYXR0ckhhbmRsZSwgbmFtZS50b0xv
d2VyQ2FzZSgpICkgPworICAgICAgICAgICAgZm4oIGVsZW0sIG5hbWUsICFkb2N1bWVudElzSFRN
TCApIDoKKyAgICAgICAgICAgIHVuZGVmaW5lZDsKKworICAgIHJldHVybiB2YWwgIT09IHVuZGVm
aW5lZCA/CisgICAgICAgIHZhbCA6CisgICAgICAgIHN1cHBvcnQuYXR0cmlidXRlcyB8fCAhZG9j
dW1lbnRJc0hUTUwgPworICAgICAgICAgICAgZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKSA6Cisg
ICAgICAgICAgICAodmFsID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpKSAmJiB2YWwuc3Bl
Y2lmaWVkID8KKyAgICAgICAgICAgICAgICB2YWwudmFsdWUgOgorICAgICAgICAgICAgICAgIG51
bGw7Cit9OworCitTaXp6bGUuZXNjYXBlID0gZnVuY3Rpb24oIHNlbCApIHsKKyAgICByZXR1cm4g
KHNlbCArICIiKS5yZXBsYWNlKCByY3NzZXNjYXBlLCBmY3NzZXNjYXBlICk7Cit9OworCitTaXp6
bGUuZXJyb3IgPSBmdW5jdGlvbiggbXNnICkgeworICAgIHRocm93IG5ldyBFcnJvciggIlN5bnRh
eCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIgKyBtc2cgKTsKK307CisKKy8qKgor
ICogRG9jdW1lbnQgc29ydGluZyBhbmQgcmVtb3ZpbmcgZHVwbGljYXRlcworICogQHBhcmFtIHtB
cnJheUxpa2V9IHJlc3VsdHMKKyAqLworU2l6emxlLnVuaXF1ZVNvcnQgPSBmdW5jdGlvbiggcmVz
dWx0cyApIHsKKyAgICB2YXIgZWxlbSwKKyAgICAgICAgZHVwbGljYXRlcyA9IFtdLAorICAgICAg
ICBqID0gMCwKKyAgICAgICAgaSA9IDA7CisKKyAgICAvLyBVbmxlc3Mgd2UgKmtub3cqIHdlIGNh
biBkZXRlY3QgZHVwbGljYXRlcywgYXNzdW1lIHRoZWlyIHByZXNlbmNlCisgICAgaGFzRHVwbGlj
YXRlID0gIXN1cHBvcnQuZGV0ZWN0RHVwbGljYXRlczsKKyAgICBzb3J0SW5wdXQgPSAhc3VwcG9y
dC5zb3J0U3RhYmxlICYmIHJlc3VsdHMuc2xpY2UoIDAgKTsKKyAgICByZXN1bHRzLnNvcnQoIHNv
cnRPcmRlciApOworCisgICAgaWYgKCBoYXNEdXBsaWNhdGUgKSB7CisgICAgICAgIHdoaWxlICgg
KGVsZW0gPSByZXN1bHRzW2krK10pICkgeworICAgICAgICAgICAgaWYgKCBlbGVtID09PSByZXN1
bHRzWyBpIF0gKSB7CisgICAgICAgICAgICAgICAgaiA9IGR1cGxpY2F0ZXMucHVzaCggaSApOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHdoaWxlICggai0tICkgeworICAgICAg
ICAgICAgcmVzdWx0cy5zcGxpY2UoIGR1cGxpY2F0ZXNbIGogXSwgMSApOworICAgICAgICB9Cisg
ICAgfQorCisgICAgLy8gQ2xlYXIgaW5wdXQgYWZ0ZXIgc29ydGluZyB0byByZWxlYXNlIG9iamVj
dHMKKyAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9zaXp6bGUvcHVsbC8yMjUK
KyAgICBzb3J0SW5wdXQgPSBudWxsOworCisgICAgcmV0dXJuIHJlc3VsdHM7Cit9OworCisvKioK
KyAqIFV0aWxpdHkgZnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgdGhlIHRleHQgdmFsdWUgb2YgYW4g
YXJyYXkgb2YgRE9NIG5vZGVzCisgKiBAcGFyYW0ge0FycmF5fEVsZW1lbnR9IGVsZW0KKyAqLwor
Z2V0VGV4dCA9IFNpenpsZS5nZXRUZXh0ID0gZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgdmFyIG5v
ZGUsCisgICAgICAgIHJldCA9ICIiLAorICAgICAgICBpID0gMCwKKyAgICAgICAgbm9kZVR5cGUg
PSBlbGVtLm5vZGVUeXBlOworCisgICAgaWYgKCAhbm9kZVR5cGUgKSB7CisgICAgICAgIC8vIElm
IG5vIG5vZGVUeXBlLCB0aGlzIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFycmF5CisgICAgICAgIHdo
aWxlICggKG5vZGUgPSBlbGVtW2krK10pICkgeworICAgICAgICAgICAgLy8gRG8gbm90IHRyYXZl
cnNlIGNvbW1lbnQgbm9kZXMKKyAgICAgICAgICAgIHJldCArPSBnZXRUZXh0KCBub2RlICk7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMSB8fCBub2RlVHlwZSA9PT0g
OSB8fCBub2RlVHlwZSA9PT0gMTEgKSB7CisgICAgICAgIC8vIFVzZSB0ZXh0Q29udGVudCBmb3Ig
ZWxlbWVudHMKKyAgICAgICAgLy8gaW5uZXJUZXh0IHVzYWdlIHJlbW92ZWQgZm9yIGNvbnNpc3Rl
bmN5IG9mIG5ldyBsaW5lcyAoalF1ZXJ5ICMxMTE1MykKKyAgICAgICAgaWYgKCB0eXBlb2YgZWxl
bS50ZXh0Q29udGVudCA9PT0gInN0cmluZyIgKSB7CisgICAgICAgICAgICByZXR1cm4gZWxlbS50
ZXh0Q29udGVudDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFRyYXZlcnNlIGl0
cyBjaGlsZHJlbgorICAgICAgICAgICAgZm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxl
bTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7CisgICAgICAgICAgICAgICAgcmV0ICs9IGdl
dFRleHQoIGVsZW0gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAo
IG5vZGVUeXBlID09PSAzIHx8IG5vZGVUeXBlID09PSA0ICkgeworICAgICAgICByZXR1cm4gZWxl
bS5ub2RlVmFsdWU7CisgICAgfQorICAgIC8vIERvIG5vdCBpbmNsdWRlIGNvbW1lbnQgb3IgcHJv
Y2Vzc2luZyBpbnN0cnVjdGlvbiBub2RlcworCisgICAgcmV0dXJuIHJldDsKK307CisKK0V4cHIg
PSBTaXp6bGUuc2VsZWN0b3JzID0geworCisgICAgLy8gQ2FuIGJlIGFkanVzdGVkIGJ5IHRoZSB1
c2VyCisgICAgY2FjaGVMZW5ndGg6IDUwLAorCisgICAgY3JlYXRlUHNldWRvOiBtYXJrRnVuY3Rp
b24sCisKKyAgICBtYXRjaDogbWF0Y2hFeHByLAorCisgICAgYXR0ckhhbmRsZToge30sCisKKyAg
ICBmaW5kOiB7fSwKKworICAgIHJlbGF0aXZlOiB7CisgICAgICAgICI+IjogeyBkaXI6ICJwYXJl
bnROb2RlIiwgZmlyc3Q6IHRydWUgfSwKKyAgICAgICAgIiAiOiB7IGRpcjogInBhcmVudE5vZGUi
IH0sCisgICAgICAgICIrIjogeyBkaXI6ICJwcmV2aW91c1NpYmxpbmciLCBmaXJzdDogdHJ1ZSB9
LAorICAgICAgICAifiI6IHsgZGlyOiAicHJldmlvdXNTaWJsaW5nIiB9CisgICAgfSwKKworICAg
IHByZUZpbHRlcjogeworICAgICAgICAiQVRUUiI6IGZ1bmN0aW9uKCBtYXRjaCApIHsKKyAgICAg
ICAgICAgIG1hdGNoWzFdID0gbWF0Y2hbMV0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUg
KTsKKworICAgICAgICAgICAgLy8gTW92ZSB0aGUgZ2l2ZW4gdmFsdWUgdG8gbWF0Y2hbM10gd2hl
dGhlciBxdW90ZWQgb3IgdW5xdW90ZWQKKyAgICAgICAgICAgIG1hdGNoWzNdID0gKCBtYXRjaFsz
XSB8fCBtYXRjaFs0XSB8fCBtYXRjaFs1XSB8fCAiIiApLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVu
ZXNjYXBlICk7CisKKyAgICAgICAgICAgIGlmICggbWF0Y2hbMl0gPT09ICJ+PSIgKSB7CisgICAg
ICAgICAgICAgICAgbWF0Y2hbM10gPSAiICIgKyBtYXRjaFszXSArICIgIjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgcmV0dXJuIG1hdGNoLnNsaWNlKCAwLCA0ICk7CisgICAgICAgIH0s
CisKKyAgICAgICAgIkNISUxEIjogZnVuY3Rpb24oIG1hdGNoICkgeworICAgICAgICAgICAgLyog
bWF0Y2hlcyBmcm9tIG1hdGNoRXhwclsiQ0hJTEQiXQorICAgICAgICAgICAgICAgIDEgdHlwZSAo
b25seXxudGh8Li4uKQorICAgICAgICAgICAgICAgIDIgd2hhdCAoY2hpbGR8b2YtdHlwZSkKKyAg
ICAgICAgICAgICAgICAzIGFyZ3VtZW50IChldmVufG9kZHxcZCp8XGQqbihbKy1dXGQrKT98Li4u
KQorICAgICAgICAgICAgICAgIDQgeG4tY29tcG9uZW50IG9mIHhuK3kgYXJndW1lbnQgKFsrLV0/
XGQqbnwpCisgICAgICAgICAgICAgICAgNSBzaWduIG9mIHhuLWNvbXBvbmVudAorICAgICAgICAg
ICAgICAgIDYgeCBvZiB4bi1jb21wb25lbnQKKyAgICAgICAgICAgICAgICA3IHNpZ24gb2YgeS1j
b21wb25lbnQKKyAgICAgICAgICAgICAgICA4IHkgb2YgeS1jb21wb25lbnQKKyAgICAgICAgICAg
ICovCisgICAgICAgICAgICBtYXRjaFsxXSA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7CisKKyAg
ICAgICAgICAgIGlmICggbWF0Y2hbMV0uc2xpY2UoIDAsIDMgKSA9PT0gIm50aCIgKSB7CisgICAg
ICAgICAgICAgICAgLy8gbnRoLSogcmVxdWlyZXMgYXJndW1lbnQKKyAgICAgICAgICAgICAgICBp
ZiAoICFtYXRjaFszXSApIHsKKyAgICAgICAgICAgICAgICAgICAgU2l6emxlLmVycm9yKCBtYXRj
aFswXSApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIG51bWVyaWMg
eCBhbmQgeSBwYXJhbWV0ZXJzIGZvciBFeHByLmZpbHRlci5DSElMRAorICAgICAgICAgICAgICAg
IC8vIHJlbWVtYmVyIHRoYXQgZmFsc2UvdHJ1ZSBjYXN0IHJlc3BlY3RpdmVseSB0byAwLzEKKyAg
ICAgICAgICAgICAgICBtYXRjaFs0XSA9ICsoIG1hdGNoWzRdID8gbWF0Y2hbNV0gKyAobWF0Y2hb
Nl0gfHwgMSkgOiAyICogKCBtYXRjaFszXSA9PT0gImV2ZW4iIHx8IG1hdGNoWzNdID09PSAib2Rk
IiApICk7CisgICAgICAgICAgICAgICAgbWF0Y2hbNV0gPSArKCAoIG1hdGNoWzddICsgbWF0Y2hb
OF0gKSB8fCBtYXRjaFszXSA9PT0gIm9kZCIgKTsKKworICAgICAgICAgICAgLy8gb3RoZXIgdHlw
ZXMgcHJvaGliaXQgYXJndW1lbnRzCisgICAgICAgICAgICB9IGVsc2UgaWYgKCBtYXRjaFszXSAp
IHsKKyAgICAgICAgICAgICAgICBTaXp6bGUuZXJyb3IoIG1hdGNoWzBdICk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHJldHVybiBtYXRjaDsKKyAgICAgICAgfSwKKworICAgICAgICAi
UFNFVURPIjogZnVuY3Rpb24oIG1hdGNoICkgeworICAgICAgICAgICAgdmFyIGV4Y2VzcywKKyAg
ICAgICAgICAgICAgICB1bnF1b3RlZCA9ICFtYXRjaFs2XSAmJiBtYXRjaFsyXTsKKworICAgICAg
ICAgICAgaWYgKCBtYXRjaEV4cHJbIkNISUxEIl0udGVzdCggbWF0Y2hbMF0gKSApIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8g
QWNjZXB0IHF1b3RlZCBhcmd1bWVudHMgYXMtaXMKKyAgICAgICAgICAgIGlmICggbWF0Y2hbM10g
KSB7CisgICAgICAgICAgICAgICAgbWF0Y2hbMl0gPSBtYXRjaFs0XSB8fCBtYXRjaFs1XSB8fCAi
IjsKKworICAgICAgICAgICAgLy8gU3RyaXAgZXhjZXNzIGNoYXJhY3RlcnMgZnJvbSB1bnF1b3Rl
ZCBhcmd1bWVudHMKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIHVucXVvdGVkICYmIHJwc2V1ZG8u
dGVzdCggdW5xdW90ZWQgKSAmJgorICAgICAgICAgICAgICAgIC8vIEdldCBleGNlc3MgZnJvbSB0
b2tlbml6ZSAocmVjdXJzaXZlbHkpCisgICAgICAgICAgICAgICAgKGV4Y2VzcyA9IHRva2VuaXpl
KCB1bnF1b3RlZCwgdHJ1ZSApKSAmJgorICAgICAgICAgICAgICAgIC8vIGFkdmFuY2UgdG8gdGhl
IG5leHQgY2xvc2luZyBwYXJlbnRoZXNpcworICAgICAgICAgICAgICAgIChleGNlc3MgPSB1bnF1
b3RlZC5pbmRleE9mKCAiKSIsIHVucXVvdGVkLmxlbmd0aCAtIGV4Y2VzcyApIC0gdW5xdW90ZWQu
bGVuZ3RoKSApIHsKKworICAgICAgICAgICAgICAgIC8vIGV4Y2VzcyBpcyBhIG5lZ2F0aXZlIGlu
ZGV4CisgICAgICAgICAgICAgICAgbWF0Y2hbMF0gPSBtYXRjaFswXS5zbGljZSggMCwgZXhjZXNz
ICk7CisgICAgICAgICAgICAgICAgbWF0Y2hbMl0gPSB1bnF1b3RlZC5zbGljZSggMCwgZXhjZXNz
ICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFJldHVybiBvbmx5IGNhcHR1cmVz
IG5lZWRlZCBieSB0aGUgcHNldWRvIGZpbHRlciBtZXRob2QgKHR5cGUgYW5kIGFyZ3VtZW50KQor
ICAgICAgICAgICAgcmV0dXJuIG1hdGNoLnNsaWNlKCAwLCAzICk7CisgICAgICAgIH0KKyAgICB9
LAorCisgICAgZmlsdGVyOiB7CisKKyAgICAgICAgIlRBRyI6IGZ1bmN0aW9uKCBub2RlTmFtZVNl
bGVjdG9yICkgeworICAgICAgICAgICAgdmFyIG5vZGVOYW1lID0gbm9kZU5hbWVTZWxlY3Rvci5y
ZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7CisgICAgICAgICAg
ICByZXR1cm4gbm9kZU5hbWVTZWxlY3RvciA9PT0gIioiID8KKyAgICAgICAgICAgICAgICBmdW5j
dGlvbigpIHsgcmV0dXJuIHRydWU7IH0gOgorICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCBlbGVt
ICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5v
ZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5vZGVOYW1lOworICAgICAgICAgICAgICAgIH07Cisg
ICAgICAgIH0sCisKKyAgICAgICAgIkNMQVNTIjogZnVuY3Rpb24oIGNsYXNzTmFtZSApIHsKKyAg
ICAgICAgICAgIHZhciBwYXR0ZXJuID0gY2xhc3NDYWNoZVsgY2xhc3NOYW1lICsgIiAiIF07CisK
KyAgICAgICAgICAgIHJldHVybiBwYXR0ZXJuIHx8CisgICAgICAgICAgICAgICAgKHBhdHRlcm4g
PSBuZXcgUmVnRXhwKCAiKF58IiArIHdoaXRlc3BhY2UgKyAiKSIgKyBjbGFzc05hbWUgKyAiKCIg
KyB3aGl0ZXNwYWNlICsgInwkKSIgKSkgJiYKKyAgICAgICAgICAgICAgICBjbGFzc0NhY2hlKCBj
bGFzc05hbWUsIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
cGF0dGVybi50ZXN0KCB0eXBlb2YgZWxlbS5jbGFzc05hbWUgPT09ICJzdHJpbmciICYmIGVsZW0u
Y2xhc3NOYW1lIHx8IHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSAhPT0gInVuZGVmaW5lZCIgJiYg
ZWxlbS5nZXRBdHRyaWJ1dGUoImNsYXNzIikgfHwgIiIgKTsKKyAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgfSwKKworICAgICAgICAiQVRUUiI6IGZ1bmN0aW9uKCBuYW1lLCBvcGVyYXRvciwg
Y2hlY2sgKSB7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAg
ICAgICAgICAgdmFyIHJlc3VsdCA9IFNpenpsZS5hdHRyKCBlbGVtLCBuYW1lICk7CisKKyAgICAg
ICAgICAgICAgICBpZiAoIHJlc3VsdCA9PSBudWxsICkgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gb3BlcmF0b3IgPT09ICIhPSI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGlmICggIW9wZXJhdG9yICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gIiI7CisKKyAg
ICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0b3IgPT09ICI9IiA/IHJlc3VsdCA9PT0gY2hlY2sg
OgorICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciA9PT0gIiE9IiA/IHJlc3VsdCAhPT0gY2hl
Y2sgOgorICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciA9PT0gIl49IiA/IGNoZWNrICYmIHJl
c3VsdC5pbmRleE9mKCBjaGVjayApID09PSAwIDoKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0
b3IgPT09ICIqPSIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDoKKyAg
ICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPT09ICIkPSIgPyBjaGVjayAmJiByZXN1bHQuc2xp
Y2UoIC1jaGVjay5sZW5ndGggKSA9PT0gY2hlY2sgOgorICAgICAgICAgICAgICAgICAgICBvcGVy
YXRvciA9PT0gIn49IiA/ICggIiAiICsgcmVzdWx0LnJlcGxhY2UoIHJ3aGl0ZXNwYWNlLCAiICIg
KSArICIgIiApLmluZGV4T2YoIGNoZWNrICkgPiAtMSA6CisgICAgICAgICAgICAgICAgICAgIG9w
ZXJhdG9yID09PSAifD0iID8gcmVzdWx0ID09PSBjaGVjayB8fCByZXN1bHQuc2xpY2UoIDAsIGNo
ZWNrLmxlbmd0aCArIDEgKSA9PT0gY2hlY2sgKyAiLSIgOgorICAgICAgICAgICAgICAgICAgICBm
YWxzZTsKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgIkNISUxEIjogZnVu
Y3Rpb24oIHR5cGUsIHdoYXQsIGFyZ3VtZW50LCBmaXJzdCwgbGFzdCApIHsKKyAgICAgICAgICAg
IHZhciBzaW1wbGUgPSB0eXBlLnNsaWNlKCAwLCAzICkgIT09ICJudGgiLAorICAgICAgICAgICAg
ICAgIGZvcndhcmQgPSB0eXBlLnNsaWNlKCAtNCApICE9PSAibGFzdCIsCisgICAgICAgICAgICAg
ICAgb2ZUeXBlID0gd2hhdCA9PT0gIm9mLXR5cGUiOworCisgICAgICAgICAgICByZXR1cm4gZmly
c3QgPT09IDEgJiYgbGFzdCA9PT0gMCA/CisKKyAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dCBm
b3IgOm50aC0qKG4pCisgICAgICAgICAgICAgICAgZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAhIWVsZW0ucGFyZW50Tm9kZTsKKyAgICAgICAgICAgICAgICB9
IDoKKworICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHZhciBjYWNoZSwgdW5pcXVlQ2FjaGUsIG91dGVyQ2FjaGUsIG5v
ZGUsIG5vZGVJbmRleCwgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICBkaXIgPSBzaW1w
bGUgIT09IGZvcndhcmQgPyAibmV4dFNpYmxpbmciIDogInByZXZpb3VzU2libGluZyIsCisgICAg
ICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICBuYW1lID0gb2ZUeXBlICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2Uo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZUNhY2hlID0gIXhtbCAmJiAhb2ZUeXBlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgZGlmZiA9IGZhbHNlOworCisgICAgICAgICAgICAgICAg
ICAgIGlmICggcGFyZW50ICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyA6KGZpcnN0
fGxhc3R8b25seSktKGNoaWxkfG9mLXR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IHNpbXBsZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGRpciApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGVsZW07CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggKG5vZGUgPSBub2RlWyBkaXIgXSkgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG9mVHlwZSA/CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2Fz
ZSgpID09PSBuYW1lIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlLm5vZGVUeXBlID09PSAxICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFJldmVyc2UgZGlyZWN0aW9uIGZvciA6b25seS0qIChpZiB3ZSBo
YXZlbid0IHlldCBkb25lIHNvKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFy
dCA9IGRpciA9IHR5cGUgPT09ICJvbmx5IiAmJiAhc3RhcnQgJiYgIm5leHRTaWJsaW5nIjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXJ0ID0gWyBmb3J3YXJkID8gcGFyZW50LmZpcnN0Q2hpbGQgOiBwYXJlbnQu
bGFzdENoaWxkIF07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vbi14bWwgOm50aC1j
aGlsZCguLi4pIHN0b3JlcyBjYWNoZSBkYXRhIG9uIGBwYXJlbnRgCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIGZvcndhcmQgJiYgdXNlQ2FjaGUgKSB7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBTZWVrIGBlbGVtYCBmcm9tIGEgcHJldmlvdXNseS1jYWNoZWQgaW5kZXgK
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC4uLmluIGEgZ3ppcC1mcmllbmRseSB3
YXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gcGFyZW50OworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHwgKG5vZGVb
IGV4cGFuZG8gXSA9IHt9KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN1cHBv
cnQ6IElFIDw5IG9ubHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZlbmQgYWdh
aW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSB8
fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3V0ZXJDYWNoZVsgbm9kZS51bmlx
dWVJRCBdID0ge30pOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUgPSB1bmlx
dWVDYWNoZVsgdHlwZSBdIHx8IFtdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJ
bmRleCA9IGNhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVbIDEgXTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkaWZmID0gbm9kZUluZGV4ICYmIGNhY2hlWyAyIF07CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGVJbmRleCAmJiBwYXJlbnQuY2hpbGROb2Rl
c1sgbm9kZUluZGV4IF07CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIChu
b2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fAorCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIHNlZWtpbmcgYGVsZW1gIGZyb20g
dGhlIHN0YXJ0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkaWZmID0gbm9kZUlu
ZGV4ID0gMCkgfHwgc3RhcnQucG9wKCkpICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFdoZW4gZm91bmQsIGNhY2hlIGluZGV4ZXMgb24gYHBhcmVudGAgYW5kIGJyZWFr
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbm9kZS5ub2RlVHlwZSA9PT0g
MSAmJiArK2RpZmYgJiYgbm9kZSA9PT0gZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuaXF1ZUNhY2hlWyB0eXBlIF0gPSBbIGRpcnJ1bnMsIG5vZGVJbmRleCwg
ZGlmZiBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gVXNlIHByZXZpb3VzbHktY2FjaGVkIGVsZW1lbnQgaW5kZXggaWYgYXZh
aWxhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB1c2VDYWNoZSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLi4uaW4gYSBnemlwLWZyaWVuZGx5IHdh
eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gZWxlbTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fCAo
bm9kZVsgZXhwYW5kbyBdID0ge30pOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFN1cHBvcnQ6IElFIDw5IG9ubHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsg
bm9kZS51bmlxdWVJRCBdIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
b3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30pOworCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhY2hlID0gdW5pcXVlQ2FjaGVbIHR5cGUgXSB8fCBbXTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ID0gY2FjaGVbIDAgXSA9PT0gZGlycnVu
cyAmJiBjYWNoZVsgMSBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmID0g
bm9kZUluZGV4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIHhtbCA6bnRoLWNoaWxkKC4uLikKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBvciA6bnRoLWxhc3QtY2hpbGQoLi4uKSBvciA6bnRoKC1sYXN0KT8tb2Yt
dHlwZSguLi4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkaWZmID09PSBmYWxz
ZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBzYW1lIGxv
b3AgYXMgYWJvdmUgdG8gc2VlayBgZWxlbWAgZnJvbSB0aGUgc3RhcnQKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2hpbGUgKCAobm9kZSA9ICsrbm9kZUluZGV4ICYmIG5vZGUgJiYg
bm9kZVsgZGlyIF0gfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkaWZm
ID0gbm9kZUluZGV4ID0gMCkgfHwgc3RhcnQucG9wKCkpICkgeworCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoICggb2ZUeXBlID8KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUg
OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUubm9kZVR5cGUg
PT09IDEgKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrZGlm
ZiApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhY2hl
IHRoZSBpbmRleCBvZiBlYWNoIGVuY291bnRlcmVkIGVsZW1lbnQKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHVzZUNhY2hlICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBd
IHx8IChub2RlWyBleHBhbmRvIF0gPSB7fSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogSUUgPDkgb25seQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0
cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0g
fHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvdXRl
ckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5pcXVlQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgZGlm
ZiBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbm9kZSA9PT0gZWxlbSApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbmNvcnBvcmF0ZSB0aGUgb2Zmc2V0LCB0aGVu
IGNoZWNrIGFnYWluc3QgY3ljbGUgc2l6ZQorICAgICAgICAgICAgICAgICAgICAgICAgZGlmZiAt
PSBsYXN0OworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRpZmYgPT09IGZpcnN0IHx8
ICggZGlmZiAlIGZpcnN0ID09PSAwICYmIGRpZmYgLyBmaXJzdCA+PSAwICk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgICJQ
U0VVRE8iOiBmdW5jdGlvbiggcHNldWRvLCBhcmd1bWVudCApIHsKKyAgICAgICAgICAgIC8vIHBz
ZXVkby1jbGFzcyBuYW1lcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZQorICAgICAgICAgICAgLy8gaHR0
cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNwc2V1ZG8tY2xhc3NlcworICAgICAgICAgICAg
Ly8gUHJpb3JpdGl6ZSBieSBjYXNlIHNlbnNpdGl2aXR5IGluIGNhc2UgY3VzdG9tIHBzZXVkb3Mg
YXJlIGFkZGVkIHdpdGggdXBwZXJjYXNlIGxldHRlcnMKKyAgICAgICAgICAgIC8vIFJlbWVtYmVy
IHRoYXQgc2V0RmlsdGVycyBpbmhlcml0cyBmcm9tIHBzZXVkb3MKKyAgICAgICAgICAgIHZhciBh
cmdzLAorICAgICAgICAgICAgICAgIGZuID0gRXhwci5wc2V1ZG9zWyBwc2V1ZG8gXSB8fCBFeHBy
LnNldEZpbHRlcnNbIHBzZXVkby50b0xvd2VyQ2FzZSgpIF0gfHwKKyAgICAgICAgICAgICAgICAg
ICAgU2l6emxlLmVycm9yKCAidW5zdXBwb3J0ZWQgcHNldWRvOiAiICsgcHNldWRvICk7CisKKyAg
ICAgICAgICAgIC8vIFRoZSB1c2VyIG1heSB1c2UgY3JlYXRlUHNldWRvIHRvIGluZGljYXRlIHRo
YXQKKyAgICAgICAgICAgIC8vIGFyZ3VtZW50cyBhcmUgbmVlZGVkIHRvIGNyZWF0ZSB0aGUgZmls
dGVyIGZ1bmN0aW9uCisgICAgICAgICAgICAvLyBqdXN0IGFzIFNpenpsZSBkb2VzCisgICAgICAg
ICAgICBpZiAoIGZuWyBleHBhbmRvIF0gKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZuKCBh
cmd1bWVudCApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBCdXQgbWFpbnRhaW4g
c3VwcG9ydCBmb3Igb2xkIHNpZ25hdHVyZXMKKyAgICAgICAgICAgIGlmICggZm4ubGVuZ3RoID4g
MSApIHsKKyAgICAgICAgICAgICAgICBhcmdzID0gWyBwc2V1ZG8sIHBzZXVkbywgIiIsIGFyZ3Vt
ZW50IF07CisgICAgICAgICAgICAgICAgcmV0dXJuIEV4cHIuc2V0RmlsdGVycy5oYXNPd25Qcm9w
ZXJ0eSggcHNldWRvLnRvTG93ZXJDYXNlKCkgKSA/CisgICAgICAgICAgICAgICAgICAgIG1hcmtG
dW5jdGlvbihmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBpZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZCA9IGZuKCBz
ZWVkLCBhcmd1bWVudCApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBtYXRjaGVk
Lmxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggaS0tICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlkeCA9IGluZGV4T2YoIHNlZWQsIG1hdGNoZWRbaV0gKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWVkWyBpZHggXSA9ICEoIG1hdGNoZXNbIGlk
eCBdID0gbWF0Y2hlZFtpXSApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB9KSA6CisgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCBlbGVtICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuKCBlbGVtLCAwLCBhcmdzICk7CisgICAg
ICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBm
bjsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBwc2V1ZG9zOiB7CisgICAgICAgIC8vIFBvdGVu
dGlhbGx5IGNvbXBsZXggcHNldWRvcworICAgICAgICAibm90IjogbWFya0Z1bmN0aW9uKGZ1bmN0
aW9uKCBzZWxlY3RvciApIHsKKyAgICAgICAgICAgIC8vIFRyaW0gdGhlIHNlbGVjdG9yIHBhc3Nl
ZCB0byBjb21waWxlCisgICAgICAgICAgICAvLyB0byBhdm9pZCB0cmVhdGluZyBsZWFkaW5nIGFu
ZCB0cmFpbGluZworICAgICAgICAgICAgLy8gc3BhY2VzIGFzIGNvbWJpbmF0b3JzCisgICAgICAg
ICAgICB2YXIgaW5wdXQgPSBbXSwKKyAgICAgICAgICAgICAgICByZXN1bHRzID0gW10sCisgICAg
ICAgICAgICAgICAgbWF0Y2hlciA9IGNvbXBpbGUoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltLCAi
JDEiICkgKTsKKworICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXJbIGV4cGFuZG8gXSA/CisgICAg
ICAgICAgICAgICAgbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzLCBjb250ZXh0
LCB4bWwgKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtLAorICAgICAgICAgICAgICAg
ICAgICAgICAgdW5tYXRjaGVkID0gbWF0Y2hlciggc2VlZCwgbnVsbCwgeG1sLCBbXSApLAorICAg
ICAgICAgICAgICAgICAgICAgICAgaSA9IHNlZWQubGVuZ3RoOworCisgICAgICAgICAgICAgICAg
ICAgIC8vIE1hdGNoIGVsZW1lbnRzIHVubWF0Y2hlZCBieSBgbWF0Y2hlcmAKKyAgICAgICAgICAg
ICAgICAgICAgd2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIChl
bGVtID0gdW5tYXRjaGVkW2ldKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWVk
W2ldID0gIShtYXRjaGVzW2ldID0gZWxlbSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KSA6CisgICAgICAgICAgICAg
ICAgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHsKKyAgICAgICAgICAgICAgICAgICAg
aW5wdXRbMF0gPSBlbGVtOworICAgICAgICAgICAgICAgICAgICBtYXRjaGVyKCBpbnB1dCwgbnVs
bCwgeG1sLCByZXN1bHRzICk7CisgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IGtlZXAgdGhl
IGVsZW1lbnQgKGlzc3VlICMyOTkpCisgICAgICAgICAgICAgICAgICAgIGlucHV0WzBdID0gbnVs
bDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFyZXN1bHRzLnBvcCgpOworICAgICAgICAg
ICAgICAgIH07CisgICAgICAgIH0pLAorCisgICAgICAgICJoYXMiOiBtYXJrRnVuY3Rpb24oZnVu
Y3Rpb24oIHNlbGVjdG9yICkgeworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkg
eworICAgICAgICAgICAgICAgIHJldHVybiBTaXp6bGUoIHNlbGVjdG9yLCBlbGVtICkubGVuZ3Ro
ID4gMDsKKyAgICAgICAgICAgIH07CisgICAgICAgIH0pLAorCisgICAgICAgICJjb250YWlucyI6
IG1hcmtGdW5jdGlvbihmdW5jdGlvbiggdGV4dCApIHsKKyAgICAgICAgICAgIHRleHQgPSB0ZXh0
LnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7CisgICAgICAgICAgICByZXR1cm4gZnVu
Y3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICggZWxlbS50ZXh0Q29udGVu
dCB8fCBlbGVtLmlubmVyVGV4dCB8fCBnZXRUZXh0KCBlbGVtICkgKS5pbmRleE9mKCB0ZXh0ICkg
PiAtMTsKKyAgICAgICAgICAgIH07CisgICAgICAgIH0pLAorCisgICAgICAgIC8vICJXaGV0aGVy
IGFuIGVsZW1lbnQgaXMgcmVwcmVzZW50ZWQgYnkgYSA6bGFuZygpIHNlbGVjdG9yCisgICAgICAg
IC8vIGlzIGJhc2VkIHNvbGVseSBvbiB0aGUgZWxlbWVudCdzIGxhbmd1YWdlIHZhbHVlCisgICAg
ICAgIC8vIGJlaW5nIGVxdWFsIHRvIHRoZSBpZGVudGlmaWVyIEMsCisgICAgICAgIC8vIG9yIGJl
Z2lubmluZyB3aXRoIHRoZSBpZGVudGlmaWVyIEMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgIi0i
LgorICAgICAgICAvLyBUaGUgbWF0Y2hpbmcgb2YgQyBhZ2FpbnN0IHRoZSBlbGVtZW50J3MgbGFu
Z3VhZ2UgdmFsdWUgaXMgcGVyZm9ybWVkIGNhc2UtaW5zZW5zaXRpdmVseS4KKyAgICAgICAgLy8g
VGhlIGlkZW50aWZpZXIgQyBkb2VzIG5vdCBoYXZlIHRvIGJlIGEgdmFsaWQgbGFuZ3VhZ2UgbmFt
ZS4iCisgICAgICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jbGFuZy1wc2V1
ZG8KKyAgICAgICAgImxhbmciOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBsYW5nICkgeworICAg
ICAgICAgICAgLy8gbGFuZyB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgaWRlbnRpZmllcgorICAgICAg
ICAgICAgaWYgKCAhcmlkZW50aWZpZXIudGVzdChsYW5nIHx8ICIiKSApIHsKKyAgICAgICAgICAg
ICAgICBTaXp6bGUuZXJyb3IoICJ1bnN1cHBvcnRlZCBsYW5nOiAiICsgbGFuZyApOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgbGFuZyA9IGxhbmcucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5l
c2NhcGUgKS50b0xvd2VyQ2FzZSgpOworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVt
ICkgeworICAgICAgICAgICAgICAgIHZhciBlbGVtTGFuZzsKKyAgICAgICAgICAgICAgICBkbyB7
CisgICAgICAgICAgICAgICAgICAgIGlmICggKGVsZW1MYW5nID0gZG9jdW1lbnRJc0hUTUwgPwor
ICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5sYW5nIDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW0uZ2V0QXR0cmlidXRlKCJ4bWw6bGFuZyIpIHx8IGVsZW0uZ2V0QXR0cmlidXRlKCJs
YW5nIikpICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtTGFuZyA9IGVsZW1MYW5n
LnRvTG93ZXJDYXNlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbUxhbmcg
PT09IGxhbmcgfHwgZWxlbUxhbmcuaW5kZXhPZiggbGFuZyArICItIiApID09PSAwOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSB3aGlsZSAoIChlbGVtID0gZWxlbS5w
YXJlbnROb2RlKSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgfTsKKyAgICAgICAgfSksCisKKyAgICAgICAgLy8gTWlz
Y2VsbGFuZW91cworICAgICAgICAidGFyZ2V0IjogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAg
ICAgICB2YXIgaGFzaCA9IHdpbmRvdy5sb2NhdGlvbiAmJiB3aW5kb3cubG9jYXRpb24uaGFzaDsK
KyAgICAgICAgICAgIHJldHVybiBoYXNoICYmIGhhc2guc2xpY2UoIDEgKSA9PT0gZWxlbS5pZDsK
KyAgICAgICAgfSwKKworICAgICAgICAicm9vdCI6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAg
ICAgICAgcmV0dXJuIGVsZW0gPT09IGRvY0VsZW07CisgICAgICAgIH0sCisKKyAgICAgICAgImZv
Y3VzIjogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICByZXR1cm4gZWxlbSA9PT0gZG9j
dW1lbnQuYWN0aXZlRWxlbWVudCAmJiAoIWRvY3VtZW50Lmhhc0ZvY3VzIHx8IGRvY3VtZW50Lmhh
c0ZvY3VzKCkpICYmICEhKGVsZW0udHlwZSB8fCBlbGVtLmhyZWYgfHwgfmVsZW0udGFiSW5kZXgp
OworICAgICAgICB9LAorCisgICAgICAgIC8vIEJvb2xlYW4gcHJvcGVydGllcworICAgICAgICAi
ZW5hYmxlZCI6IGNyZWF0ZURpc2FibGVkUHNldWRvKCBmYWxzZSApLAorICAgICAgICAiZGlzYWJs
ZWQiOiBjcmVhdGVEaXNhYmxlZFBzZXVkbyggdHJ1ZSApLAorCisgICAgICAgICJjaGVja2VkIjog
ZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAvLyBJbiBDU1MzLCA6Y2hlY2tlZCBzaG91
bGQgcmV0dXJuIGJvdGggY2hlY2tlZCBhbmQgc2VsZWN0ZWQgZWxlbWVudHMKKyAgICAgICAgICAg
IC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5
LyNjaGVja2VkCisgICAgICAgICAgICB2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93
ZXJDYXNlKCk7CisgICAgICAgICAgICByZXR1cm4gKG5vZGVOYW1lID09PSAiaW5wdXQiICYmICEh
ZWxlbS5jaGVja2VkKSB8fCAobm9kZU5hbWUgPT09ICJvcHRpb24iICYmICEhZWxlbS5zZWxlY3Rl
ZCk7CisgICAgICAgIH0sCisKKyAgICAgICAgInNlbGVjdGVkIjogZnVuY3Rpb24oIGVsZW0gKSB7
CisgICAgICAgICAgICAvLyBBY2Nlc3NpbmcgdGhpcyBwcm9wZXJ0eSBtYWtlcyBzZWxlY3RlZC1i
eS1kZWZhdWx0CisgICAgICAgICAgICAvLyBvcHRpb25zIGluIFNhZmFyaSB3b3JrIHByb3Blcmx5
CisgICAgICAgICAgICBpZiAoIGVsZW0ucGFyZW50Tm9kZSApIHsKKyAgICAgICAgICAgICAgICBl
bGVtLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgcmV0dXJuIGVsZW0uc2VsZWN0ZWQgPT09IHRydWU7CisgICAgICAgIH0sCisKKyAgICAgICAg
Ly8gQ29udGVudHMKKyAgICAgICAgImVtcHR5IjogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAg
ICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2VtcHR5LXBzZXVkbworICAg
ICAgICAgICAgLy8gOmVtcHR5IGlzIG5lZ2F0ZWQgYnkgZWxlbWVudCAoMSkgb3IgY29udGVudCBu
b2RlcyAodGV4dDogMzsgY2RhdGE6IDQ7IGVudGl0eSByZWY6IDUpLAorICAgICAgICAgICAgLy8g
ICBidXQgbm90IGJ5IG90aGVycyAoY29tbWVudDogODsgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbjog
NzsgZXRjLikKKyAgICAgICAgICAgIC8vIG5vZGVUeXBlIDwgNiB3b3JrcyBiZWNhdXNlIGF0dHJp
YnV0ZXMgKDIpIGRvIG5vdCBhcHBlYXIgYXMgY2hpbGRyZW4KKyAgICAgICAgICAgIGZvciAoIGVs
ZW0gPSBlbGVtLmZpcnN0Q2hpbGQ7IGVsZW07IGVsZW0gPSBlbGVtLm5leHRTaWJsaW5nICkgewor
ICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA8IDYgKSB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSwKKworICAgICAgICAicGFyZW50Ijog
ZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICByZXR1cm4gIUV4cHIucHNldWRvc1siZW1w
dHkiXSggZWxlbSApOworICAgICAgICB9LAorCisgICAgICAgIC8vIEVsZW1lbnQvaW5wdXQgdHlw
ZXMKKyAgICAgICAgImhlYWRlciI6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgcmV0
dXJuIHJoZWFkZXIudGVzdCggZWxlbS5ub2RlTmFtZSApOworICAgICAgICB9LAorCisgICAgICAg
ICJpbnB1dCI6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgcmV0dXJuIHJpbnB1dHMu
dGVzdCggZWxlbS5ub2RlTmFtZSApOworICAgICAgICB9LAorCisgICAgICAgICJidXR0b24iOiBm
dW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50
b0xvd2VyQ2FzZSgpOworICAgICAgICAgICAgcmV0dXJuIG5hbWUgPT09ICJpbnB1dCIgJiYgZWxl
bS50eXBlID09PSAiYnV0dG9uIiB8fCBuYW1lID09PSAiYnV0dG9uIjsKKyAgICAgICAgfSwKKwor
ICAgICAgICAidGV4dCI6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgdmFyIGF0dHI7
CisgICAgICAgICAgICByZXR1cm4gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAiaW5w
dXQiICYmCisgICAgICAgICAgICAgICAgZWxlbS50eXBlID09PSAidGV4dCIgJiYKKworICAgICAg
ICAgICAgICAgIC8vIFN1cHBvcnQ6IElFPDgKKyAgICAgICAgICAgICAgICAvLyBOZXcgSFRNTDUg
YXR0cmlidXRlIHZhbHVlcyAoZS5nLiwgInNlYXJjaCIpIGFwcGVhciB3aXRoIGVsZW0udHlwZSA9
PT0gInRleHQiCisgICAgICAgICAgICAgICAgKCAoYXR0ciA9IGVsZW0uZ2V0QXR0cmlidXRlKCJ0
eXBlIikpID09IG51bGwgfHwgYXR0ci50b0xvd2VyQ2FzZSgpID09PSAidGV4dCIgKTsKKyAgICAg
ICAgfSwKKworICAgICAgICAvLyBQb3NpdGlvbi1pbi1jb2xsZWN0aW9uCisgICAgICAgICJmaXJz
dCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oKSB7CisgICAgICAgICAgICByZXR1
cm4gWyAwIF07CisgICAgICAgIH0pLAorCisgICAgICAgICJsYXN0IjogY3JlYXRlUG9zaXRpb25h
bFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7CisgICAgICAgICAgICBy
ZXR1cm4gWyBsZW5ndGggLSAxIF07CisgICAgICAgIH0pLAorCisgICAgICAgICJlcSI6IGNyZWF0
ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVu
dCApIHsKKyAgICAgICAgICAgIHJldHVybiBbIGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVu
Z3RoIDogYXJndW1lbnQgXTsKKyAgICAgICAgfSksCisKKyAgICAgICAgImV2ZW4iOiBjcmVhdGVQ
b3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHsKKyAgICAg
ICAgICAgIHZhciBpID0gMDsKKyAgICAgICAgICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAy
ICkgeworICAgICAgICAgICAgICAgIG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hJbmRleGVzOworICAgICAgICB9KSwKKworICAg
ICAgICAib2RkIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVz
LCBsZW5ndGggKSB7CisgICAgICAgICAgICB2YXIgaSA9IDE7CisgICAgICAgICAgICBmb3IgKCA7
IGkgPCBsZW5ndGg7IGkgKz0gMiApIHsKKyAgICAgICAgICAgICAgICBtYXRjaEluZGV4ZXMucHVz
aCggaSApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG1hdGNoSW5kZXhlczsK
KyAgICAgICAgfSksCisKKyAgICAgICAgImx0IjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5j
dGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkgeworICAgICAgICAgICAgdmFy
IGkgPSBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50OworICAgICAg
ICAgICAgZm9yICggOyAtLWkgPj0gMDsgKSB7CisgICAgICAgICAgICAgICAgbWF0Y2hJbmRleGVz
LnB1c2goIGkgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBtYXRjaEluZGV4
ZXM7CisgICAgICAgIH0pLAorCisgICAgICAgICJndCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8o
ZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHsKKyAgICAgICAgICAg
IHZhciBpID0gYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudDsKKyAg
ICAgICAgICAgIGZvciAoIDsgKytpIDwgbGVuZ3RoOyApIHsKKyAgICAgICAgICAgICAgICBtYXRj
aEluZGV4ZXMucHVzaCggaSApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG1h
dGNoSW5kZXhlczsKKyAgICAgICAgfSkKKyAgICB9Cit9OworCitFeHByLnBzZXVkb3NbIm50aCJd
ID0gRXhwci5wc2V1ZG9zWyJlcSJdOworCisvLyBBZGQgYnV0dG9uL2lucHV0IHR5cGUgcHNldWRv
cworZm9yICggaSBpbiB7IHJhZGlvOiB0cnVlLCBjaGVja2JveDogdHJ1ZSwgZmlsZTogdHJ1ZSwg
cGFzc3dvcmQ6IHRydWUsIGltYWdlOiB0cnVlIH0gKSB7CisgICAgRXhwci5wc2V1ZG9zWyBpIF0g
PSBjcmVhdGVJbnB1dFBzZXVkbyggaSApOworfQorZm9yICggaSBpbiB7IHN1Ym1pdDogdHJ1ZSwg
cmVzZXQ6IHRydWUgfSApIHsKKyAgICBFeHByLnBzZXVkb3NbIGkgXSA9IGNyZWF0ZUJ1dHRvblBz
ZXVkbyggaSApOworfQorCisvLyBFYXN5IEFQSSBmb3IgY3JlYXRpbmcgbmV3IHNldEZpbHRlcnMK
K2Z1bmN0aW9uIHNldEZpbHRlcnMoKSB7fQorc2V0RmlsdGVycy5wcm90b3R5cGUgPSBFeHByLmZp
bHRlcnMgPSBFeHByLnBzZXVkb3M7CitFeHByLnNldEZpbHRlcnMgPSBuZXcgc2V0RmlsdGVycygp
OworCit0b2tlbml6ZSA9IFNpenpsZS50b2tlbml6ZSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgcGFy
c2VPbmx5ICkgeworICAgIHZhciBtYXRjaGVkLCBtYXRjaCwgdG9rZW5zLCB0eXBlLAorICAgICAg
ICBzb0ZhciwgZ3JvdXBzLCBwcmVGaWx0ZXJzLAorICAgICAgICBjYWNoZWQgPSB0b2tlbkNhY2hl
WyBzZWxlY3RvciArICIgIiBdOworCisgICAgaWYgKCBjYWNoZWQgKSB7CisgICAgICAgIHJldHVy
biBwYXJzZU9ubHkgPyAwIDogY2FjaGVkLnNsaWNlKCAwICk7CisgICAgfQorCisgICAgc29GYXIg
PSBzZWxlY3RvcjsKKyAgICBncm91cHMgPSBbXTsKKyAgICBwcmVGaWx0ZXJzID0gRXhwci5wcmVG
aWx0ZXI7CisKKyAgICB3aGlsZSAoIHNvRmFyICkgeworCisgICAgICAgIC8vIENvbW1hIGFuZCBm
aXJzdCBydW4KKyAgICAgICAgaWYgKCAhbWF0Y2hlZCB8fCAobWF0Y2ggPSByY29tbWEuZXhlYygg
c29GYXIgKSkgKSB7CisgICAgICAgICAgICBpZiAoIG1hdGNoICkgeworICAgICAgICAgICAgICAg
IC8vIERvbid0IGNvbnN1bWUgdHJhaWxpbmcgY29tbWFzIGFzIHZhbGlkCisgICAgICAgICAgICAg
ICAgc29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hbMF0ubGVuZ3RoICkgfHwgc29GYXI7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBncm91cHMucHVzaCggKHRva2VucyA9IFtdKSApOworICAg
ICAgICB9CisKKyAgICAgICAgbWF0Y2hlZCA9IGZhbHNlOworCisgICAgICAgIC8vIENvbWJpbmF0
b3JzCisgICAgICAgIGlmICggKG1hdGNoID0gcmNvbWJpbmF0b3JzLmV4ZWMoIHNvRmFyICkpICkg
eworICAgICAgICAgICAgbWF0Y2hlZCA9IG1hdGNoLnNoaWZ0KCk7CisgICAgICAgICAgICB0b2tl
bnMucHVzaCh7CisgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoZWQsCisgICAgICAgICAgICAg
ICAgLy8gQ2FzdCBkZXNjZW5kYW50IGNvbWJpbmF0b3JzIHRvIHNwYWNlCisgICAgICAgICAgICAg
ICAgdHlwZTogbWF0Y2hbMF0ucmVwbGFjZSggcnRyaW0sICIgIiApCisgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBGaWx0ZXJzCisgICAgICAgIGZvciAoIHR5cGUgaW4gRXhwci5m
aWx0ZXIgKSB7CisgICAgICAgICAgICBpZiAoIChtYXRjaCA9IG1hdGNoRXhwclsgdHlwZSBdLmV4
ZWMoIHNvRmFyICkpICYmICghcHJlRmlsdGVyc1sgdHlwZSBdIHx8CisgICAgICAgICAgICAgICAg
KG1hdGNoID0gcHJlRmlsdGVyc1sgdHlwZSBdKCBtYXRjaCApKSkgKSB7CisgICAgICAgICAgICAg
ICAgbWF0Y2hlZCA9IG1hdGNoLnNoaWZ0KCk7CisgICAgICAgICAgICAgICAgdG9rZW5zLnB1c2go
eworICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hlZCwKKyAgICAgICAgICAgICAgICAg
ICAgdHlwZTogdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hlczogbWF0Y2gKKyAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRj
aGVkLmxlbmd0aCApOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCAh
bWF0Y2hlZCApIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAg
Ly8gUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGludmFsaWQgZXhjZXNzCisgICAgLy8gaWYgd2Un
cmUganVzdCBwYXJzaW5nCisgICAgLy8gT3RoZXJ3aXNlLCB0aHJvdyBhbiBlcnJvciBvciByZXR1
cm4gdG9rZW5zCisgICAgcmV0dXJuIHBhcnNlT25seSA/CisgICAgICAgIHNvRmFyLmxlbmd0aCA6
CisgICAgICAgIHNvRmFyID8KKyAgICAgICAgICAgIFNpenpsZS5lcnJvciggc2VsZWN0b3IgKSA6
CisgICAgICAgICAgICAvLyBDYWNoZSB0aGUgdG9rZW5zCisgICAgICAgICAgICB0b2tlbkNhY2hl
KCBzZWxlY3RvciwgZ3JvdXBzICkuc2xpY2UoIDAgKTsKK307CisKK2Z1bmN0aW9uIHRvU2VsZWN0
b3IoIHRva2VucyApIHsKKyAgICB2YXIgaSA9IDAsCisgICAgICAgIGxlbiA9IHRva2Vucy5sZW5n
dGgsCisgICAgICAgIHNlbGVjdG9yID0gIiI7CisgICAgZm9yICggOyBpIDwgbGVuOyBpKysgKSB7
CisgICAgICAgIHNlbGVjdG9yICs9IHRva2Vuc1tpXS52YWx1ZTsKKyAgICB9CisgICAgcmV0dXJu
IHNlbGVjdG9yOworfQorCitmdW5jdGlvbiBhZGRDb21iaW5hdG9yKCBtYXRjaGVyLCBjb21iaW5h
dG9yLCBiYXNlICkgeworICAgIHZhciBkaXIgPSBjb21iaW5hdG9yLmRpciwKKyAgICAgICAgc2tp
cCA9IGNvbWJpbmF0b3IubmV4dCwKKyAgICAgICAga2V5ID0gc2tpcCB8fCBkaXIsCisgICAgICAg
IGNoZWNrTm9uRWxlbWVudHMgPSBiYXNlICYmIGtleSA9PT0gInBhcmVudE5vZGUiLAorICAgICAg
ICBkb25lTmFtZSA9IGRvbmUrKzsKKworICAgIHJldHVybiBjb21iaW5hdG9yLmZpcnN0ID8KKyAg
ICAgICAgLy8gQ2hlY2sgYWdhaW5zdCBjbG9zZXN0IGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50
CisgICAgICAgIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7CisgICAgICAgICAgICB3
aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkgeworICAgICAgICAgICAgICAgIGlmICggZWxl
bS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
IDoKKworICAgICAgICAvLyBDaGVjayBhZ2FpbnN0IGFsbCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxl
bWVudHMKKyAgICAgICAgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHsKKyAgICAgICAg
ICAgIHZhciBvbGRDYWNoZSwgdW5pcXVlQ2FjaGUsIG91dGVyQ2FjaGUsCisgICAgICAgICAgICAg
ICAgbmV3Q2FjaGUgPSBbIGRpcnJ1bnMsIGRvbmVOYW1lIF07CisKKyAgICAgICAgICAgIC8vIFdl
IGNhbid0IHNldCBhcmJpdHJhcnkgZGF0YSBvbiBYTUwgbm9kZXMsIHNvIHRoZXkgZG9uJ3QgYmVu
ZWZpdCBmcm9tIGNvbWJpbmF0b3IgY2FjaGluZworICAgICAgICAgICAgaWYgKCB4bWwgKSB7Cisg
ICAgICAgICAgICAgICAgd2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRpciBdKSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQs
IHhtbCApICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAoIChl
bGVtID0gZWxlbVsgZGlyIF0pICkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9k
ZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG91dGVyQ2FjaGUgPSBlbGVtWyBleHBhbmRvIF0gfHwgKGVsZW1bIGV4cGFuZG8gXSA9IHt9
KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogSUUgPDkgb25seQorICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGll
cyAoalF1ZXJ5IGdoLTE3MDkpCisgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWVDYWNoZSA9
IG91dGVyQ2FjaGVbIGVsZW0udW5pcXVlSUQgXSB8fCAob3V0ZXJDYWNoZVsgZWxlbS51bmlxdWVJ
RCBdID0ge30pOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNraXAgJiYgc2tpcCA9
PT0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVsZW0gPSBlbGVtWyBkaXIgXSB8fCBlbGVtOworICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmICggKG9sZENhY2hlID0gdW5pcXVlQ2FjaGVbIGtleSBdKSAmJgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9sZENhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgb2xkQ2Fj
aGVbIDEgXSA9PT0gZG9uZU5hbWUgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBBc3NpZ24gdG8gbmV3Q2FjaGUgc28gcmVzdWx0cyBiYWNrLXByb3BhZ2F0ZSB0byBwcmV2aW91
cyBlbGVtZW50cworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAobmV3Q2FjaGVb
IDIgXSA9IG9sZENhY2hlWyAyIF0pOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXVzZSBuZXdjYWNoZSBzbyByZXN1bHRz
IGJhY2stcHJvcGFnYXRlIHRvIHByZXZpb3VzIGVsZW1lbnRzCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5pcXVlQ2FjaGVbIGtleSBdID0gbmV3Q2FjaGU7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBBIG1hdGNoIG1lYW5zIHdlJ3JlIGRvbmU7IGEgZmFpbCBtZWFucyB3
ZSBoYXZlIHRvIGtlZXAgY2hlY2tpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IChuZXdDYWNoZVsgMiBdID0gbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkpICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH07Cit9CisKK2Z1bmN0aW9uIGVsZW1lbnRNYXRjaGVyKCBt
YXRjaGVycyApIHsKKyAgICByZXR1cm4gbWF0Y2hlcnMubGVuZ3RoID4gMSA/CisgICAgICAgIGZ1
bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7CisgICAgICAgICAgICB2YXIgaSA9IG1hdGNo
ZXJzLmxlbmd0aDsKKyAgICAgICAgICAgIHdoaWxlICggaS0tICkgeworICAgICAgICAgICAgICAg
IGlmICggIW1hdGNoZXJzW2ldKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9IDoKKyAgICAgICAgbWF0Y2hlcnNb
MF07Cit9CisKK2Z1bmN0aW9uIG11bHRpcGxlQ29udGV4dHMoIHNlbGVjdG9yLCBjb250ZXh0cywg
cmVzdWx0cyApIHsKKyAgICB2YXIgaSA9IDAsCisgICAgICAgIGxlbiA9IGNvbnRleHRzLmxlbmd0
aDsKKyAgICBmb3IgKCA7IGkgPCBsZW47IGkrKyApIHsKKyAgICAgICAgU2l6emxlKCBzZWxlY3Rv
ciwgY29udGV4dHNbaV0sIHJlc3VsdHMgKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdHM7Cit9
CisKK2Z1bmN0aW9uIGNvbmRlbnNlKCB1bm1hdGNoZWQsIG1hcCwgZmlsdGVyLCBjb250ZXh0LCB4
bWwgKSB7CisgICAgdmFyIGVsZW0sCisgICAgICAgIG5ld1VubWF0Y2hlZCA9IFtdLAorICAgICAg
ICBpID0gMCwKKyAgICAgICAgbGVuID0gdW5tYXRjaGVkLmxlbmd0aCwKKyAgICAgICAgbWFwcGVk
ID0gbWFwICE9IG51bGw7CisKKyAgICBmb3IgKCA7IGkgPCBsZW47IGkrKyApIHsKKyAgICAgICAg
aWYgKCAoZWxlbSA9IHVubWF0Y2hlZFtpXSkgKSB7CisgICAgICAgICAgICBpZiAoICFmaWx0ZXIg
fHwgZmlsdGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHsKKyAgICAgICAgICAgICAgICBuZXdV
bm1hdGNoZWQucHVzaCggZWxlbSApOworICAgICAgICAgICAgICAgIGlmICggbWFwcGVkICkgewor
ICAgICAgICAgICAgICAgICAgICBtYXAucHVzaCggaSApOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBuZXdVbm1hdGNoZWQ7
Cit9CisKK2Z1bmN0aW9uIHNldE1hdGNoZXIoIHByZUZpbHRlciwgc2VsZWN0b3IsIG1hdGNoZXIs
IHBvc3RGaWx0ZXIsIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciApIHsKKyAgICBpZiAoIHBvc3RG
aWx0ZXIgJiYgIXBvc3RGaWx0ZXJbIGV4cGFuZG8gXSApIHsKKyAgICAgICAgcG9zdEZpbHRlciA9
IHNldE1hdGNoZXIoIHBvc3RGaWx0ZXIgKTsKKyAgICB9CisgICAgaWYgKCBwb3N0RmluZGVyICYm
ICFwb3N0RmluZGVyWyBleHBhbmRvIF0gKSB7CisgICAgICAgIHBvc3RGaW5kZXIgPSBzZXRNYXRj
aGVyKCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKTsKKyAgICB9CisgICAgcmV0dXJuIG1hcmtG
dW5jdGlvbihmdW5jdGlvbiggc2VlZCwgcmVzdWx0cywgY29udGV4dCwgeG1sICkgeworICAgICAg
ICB2YXIgdGVtcCwgaSwgZWxlbSwKKyAgICAgICAgICAgIHByZU1hcCA9IFtdLAorICAgICAgICAg
ICAgcG9zdE1hcCA9IFtdLAorICAgICAgICAgICAgcHJlZXhpc3RpbmcgPSByZXN1bHRzLmxlbmd0
aCwKKworICAgICAgICAgICAgLy8gR2V0IGluaXRpYWwgZWxlbWVudHMgZnJvbSBzZWVkIG9yIGNv
bnRleHQKKyAgICAgICAgICAgIGVsZW1zID0gc2VlZCB8fCBtdWx0aXBsZUNvbnRleHRzKCBzZWxl
Y3RvciB8fCAiKiIsIGNvbnRleHQubm9kZVR5cGUgPyBbIGNvbnRleHQgXSA6IGNvbnRleHQsIFtd
ICksCisKKyAgICAgICAgICAgIC8vIFByZWZpbHRlciB0byBnZXQgbWF0Y2hlciBpbnB1dCwgcHJl
c2VydmluZyBhIG1hcCBmb3Igc2VlZC1yZXN1bHRzIHN5bmNocm9uaXphdGlvbgorICAgICAgICAg
ICAgbWF0Y2hlckluID0gcHJlRmlsdGVyICYmICggc2VlZCB8fCAhc2VsZWN0b3IgKSA/CisgICAg
ICAgICAgICAgICAgY29uZGVuc2UoIGVsZW1zLCBwcmVNYXAsIHByZUZpbHRlciwgY29udGV4dCwg
eG1sICkgOgorICAgICAgICAgICAgICAgIGVsZW1zLAorCisgICAgICAgICAgICBtYXRjaGVyT3V0
ID0gbWF0Y2hlciA/CisgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIHBvc3RGaW5kZXIs
IG9yIGZpbHRlcmVkIHNlZWQsIG9yIG5vbi1zZWVkIHBvc3RGaWx0ZXIgb3IgcHJlZXhpc3Rpbmcg
cmVzdWx0cywKKyAgICAgICAgICAgICAgICBwb3N0RmluZGVyIHx8ICggc2VlZCA/IHByZUZpbHRl
ciA6IHByZWV4aXN0aW5nIHx8IHBvc3RGaWx0ZXIgKSA/CisKKyAgICAgICAgICAgICAgICAgICAg
Ly8gLi4uaW50ZXJtZWRpYXRlIHByb2Nlc3NpbmcgaXMgbmVjZXNzYXJ5CisgICAgICAgICAgICAg
ICAgICAgIFtdIDoKKworICAgICAgICAgICAgICAgICAgICAvLyAuLi5vdGhlcndpc2UgdXNlIHJl
c3VsdHMgZGlyZWN0bHkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA6CisgICAgICAgICAg
ICAgICAgbWF0Y2hlckluOworCisgICAgICAgIC8vIEZpbmQgcHJpbWFyeSBtYXRjaGVzCisgICAg
ICAgIGlmICggbWF0Y2hlciApIHsKKyAgICAgICAgICAgIG1hdGNoZXIoIG1hdGNoZXJJbiwgbWF0
Y2hlck91dCwgY29udGV4dCwgeG1sICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBBcHBseSBw
b3N0RmlsdGVyCisgICAgICAgIGlmICggcG9zdEZpbHRlciApIHsKKyAgICAgICAgICAgIHRlbXAg
PSBjb25kZW5zZSggbWF0Y2hlck91dCwgcG9zdE1hcCApOworICAgICAgICAgICAgcG9zdEZpbHRl
ciggdGVtcCwgW10sIGNvbnRleHQsIHhtbCApOworCisgICAgICAgICAgICAvLyBVbi1tYXRjaCBm
YWlsaW5nIGVsZW1lbnRzIGJ5IG1vdmluZyB0aGVtIGJhY2sgdG8gbWF0Y2hlckluCisgICAgICAg
ICAgICBpID0gdGVtcC5sZW5ndGg7CisgICAgICAgICAgICB3aGlsZSAoIGktLSApIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIChlbGVtID0gdGVtcFtpXSkgKSB7CisgICAgICAgICAgICAgICAgICAg
IG1hdGNoZXJPdXRbIHBvc3RNYXBbaV0gXSA9ICEobWF0Y2hlckluWyBwb3N0TWFwW2ldIF0gPSBl
bGVtKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoIHNlZWQgKSB7CisgICAgICAgICAgICBpZiAoIHBvc3RGaW5kZXIgfHwgcHJlRmls
dGVyICkgeworICAgICAgICAgICAgICAgIGlmICggcG9zdEZpbmRlciApIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gR2V0IHRoZSBmaW5hbCBtYXRjaGVyT3V0IGJ5IGNvbmRlbnNpbmcgdGhpcyBp
bnRlcm1lZGlhdGUgaW50byBwb3N0RmluZGVyIGNvbnRleHRzCisgICAgICAgICAgICAgICAgICAg
IHRlbXAgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAgaSA9IG1hdGNoZXJPdXQubGVuZ3RoOwor
ICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGktLSApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggKGVsZW0gPSBtYXRjaGVyT3V0W2ldKSApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBSZXN0b3JlIG1hdGNoZXJJbiBzaW5jZSBlbGVtIGlzIG5vdCB5ZXQgYSBmaW5h
bCBtYXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAucHVzaCggKG1hdGNoZXJJ
bltpXSA9IGVsZW0pICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcG9zdEZpbmRlciggbnVsbCwgKG1hdGNoZXJP
dXQgPSBbXSksIHRlbXAsIHhtbCApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIC8vIE1vdmUgbWF0Y2hlZCBlbGVtZW50cyBmcm9tIHNlZWQgdG8gcmVzdWx0cyB0byBrZWVw
IHRoZW0gc3luY2hyb25pemVkCisgICAgICAgICAgICAgICAgaSA9IG1hdGNoZXJPdXQubGVuZ3Ro
OworICAgICAgICAgICAgICAgIHdoaWxlICggaS0tICkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoIChlbGVtID0gbWF0Y2hlck91dFtpXSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICh0
ZW1wID0gcG9zdEZpbmRlciA/IGluZGV4T2YoIHNlZWQsIGVsZW0gKSA6IHByZU1hcFtpXSkgPiAt
MSApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgc2VlZFt0ZW1wXSA9ICEocmVzdWx0c1t0
ZW1wXSA9IGVsZW0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgIC8vIEFkZCBlbGVtZW50cyB0byByZXN1bHRzLCB0aHJv
dWdoIHBvc3RGaW5kZXIgaWYgZGVmaW5lZAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
bWF0Y2hlck91dCA9IGNvbmRlbnNlKAorICAgICAgICAgICAgICAgIG1hdGNoZXJPdXQgPT09IHJl
c3VsdHMgPworICAgICAgICAgICAgICAgICAgICBtYXRjaGVyT3V0LnNwbGljZSggcHJlZXhpc3Rp
bmcsIG1hdGNoZXJPdXQubGVuZ3RoICkgOgorICAgICAgICAgICAgICAgICAgICBtYXRjaGVyT3V0
CisgICAgICAgICAgICApOworICAgICAgICAgICAgaWYgKCBwb3N0RmluZGVyICkgeworICAgICAg
ICAgICAgICAgIHBvc3RGaW5kZXIoIG51bGwsIHJlc3VsdHMsIG1hdGNoZXJPdXQsIHhtbCApOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwdXNoLmFwcGx5KCByZXN1bHRz
LCBtYXRjaGVyT3V0ICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KTsKK30KKwor
ZnVuY3Rpb24gbWF0Y2hlckZyb21Ub2tlbnMoIHRva2VucyApIHsKKyAgICB2YXIgY2hlY2tDb250
ZXh0LCBtYXRjaGVyLCBqLAorICAgICAgICBsZW4gPSB0b2tlbnMubGVuZ3RoLAorICAgICAgICBs
ZWFkaW5nUmVsYXRpdmUgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbMF0udHlwZSBdLAorICAgICAg
ICBpbXBsaWNpdFJlbGF0aXZlID0gbGVhZGluZ1JlbGF0aXZlIHx8IEV4cHIucmVsYXRpdmVbIiAi
XSwKKyAgICAgICAgaSA9IGxlYWRpbmdSZWxhdGl2ZSA/IDEgOiAwLAorCisgICAgICAgIC8vIFRo
ZSBmb3VuZGF0aW9uYWwgbWF0Y2hlciBlbnN1cmVzIHRoYXQgZWxlbWVudHMgYXJlIHJlYWNoYWJs
ZSBmcm9tIHRvcC1sZXZlbCBjb250ZXh0KHMpCisgICAgICAgIG1hdGNoQ29udGV4dCA9IGFkZENv
bWJpbmF0b3IoIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgcmV0dXJuIGVsZW0gPT09
IGNoZWNrQ29udGV4dDsKKyAgICAgICAgfSwgaW1wbGljaXRSZWxhdGl2ZSwgdHJ1ZSApLAorICAg
ICAgICBtYXRjaEFueUNvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHsK
KyAgICAgICAgICAgIHJldHVybiBpbmRleE9mKCBjaGVja0NvbnRleHQsIGVsZW0gKSA+IC0xOwor
ICAgICAgICB9LCBpbXBsaWNpdFJlbGF0aXZlLCB0cnVlICksCisgICAgICAgIG1hdGNoZXJzID0g
WyBmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkgeworICAgICAgICAgICAgdmFyIHJldCA9
ICggIWxlYWRpbmdSZWxhdGl2ZSAmJiAoIHhtbCB8fCBjb250ZXh0ICE9PSBvdXRlcm1vc3RDb250
ZXh0ICkgKSB8fCAoCisgICAgICAgICAgICAgICAgKGNoZWNrQ29udGV4dCA9IGNvbnRleHQpLm5v
ZGVUeXBlID8KKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hDb250ZXh0KCBlbGVtLCBjb250ZXh0
LCB4bWwgKSA6CisgICAgICAgICAgICAgICAgICAgIG1hdGNoQW55Q29udGV4dCggZWxlbSwgY29u
dGV4dCwgeG1sICkgKTsKKyAgICAgICAgICAgIC8vIEF2b2lkIGhhbmdpbmcgb250byBlbGVtZW50
IChpc3N1ZSAjMjk5KQorICAgICAgICAgICAgY2hlY2tDb250ZXh0ID0gbnVsbDsKKyAgICAgICAg
ICAgIHJldHVybiByZXQ7CisgICAgICAgIH0gXTsKKworICAgIGZvciAoIDsgaSA8IGxlbjsgaSsr
ICkgeworICAgICAgICBpZiAoIChtYXRjaGVyID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zW2ldLnR5
cGUgXSkgKSB7CisgICAgICAgICAgICBtYXRjaGVycyA9IFsgYWRkQ29tYmluYXRvcihlbGVtZW50
TWF0Y2hlciggbWF0Y2hlcnMgKSwgbWF0Y2hlcikgXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIG1hdGNoZXIgPSBFeHByLmZpbHRlclsgdG9rZW5zW2ldLnR5cGUgXS5hcHBseSggbnVs
bCwgdG9rZW5zW2ldLm1hdGNoZXMgKTsKKworICAgICAgICAgICAgLy8gUmV0dXJuIHNwZWNpYWwg
dXBvbiBzZWVpbmcgYSBwb3NpdGlvbmFsIG1hdGNoZXIKKyAgICAgICAgICAgIGlmICggbWF0Y2hl
clsgZXhwYW5kbyBdICkgeworICAgICAgICAgICAgICAgIC8vIEZpbmQgdGhlIG5leHQgcmVsYXRp
dmUgb3BlcmF0b3IgKGlmIGFueSkgZm9yIHByb3BlciBoYW5kbGluZworICAgICAgICAgICAgICAg
IGogPSArK2k7CisgICAgICAgICAgICAgICAgZm9yICggOyBqIDwgbGVuOyBqKysgKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmICggRXhwci5yZWxhdGl2ZVsgdG9rZW5zW2pdLnR5cGUgXSApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBzZXRNYXRjaGVyKAorICAg
ICAgICAgICAgICAgICAgICBpID4gMSAmJiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSwKKyAg
ICAgICAgICAgICAgICAgICAgaSA+IDEgJiYgdG9TZWxlY3RvcigKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIElmIHRoZSBwcmVjZWRpbmcgdG9rZW4gd2FzIGEgZGVzY2VuZGFudCBjb21iaW5h
dG9yLCBpbnNlcnQgYW4gaW1wbGljaXQgYW55LWVsZW1lbnQgYCpgCisgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbnMuc2xpY2UoIDAsIGkgLSAxICkuY29uY2F0KHsgdmFsdWU6IHRva2Vuc1sg
aSAtIDIgXS50eXBlID09PSAiICIgPyAiKiIgOiAiIiB9KQorICAgICAgICAgICAgICAgICAgICAp
LnJlcGxhY2UoIHJ0cmltLCAiJDEiICksCisgICAgICAgICAgICAgICAgICAgIG1hdGNoZXIsCisg
ICAgICAgICAgICAgICAgICAgIGkgPCBqICYmIG1hdGNoZXJGcm9tVG9rZW5zKCB0b2tlbnMuc2xp
Y2UoIGksIGogKSApLAorICAgICAgICAgICAgICAgICAgICBqIDwgbGVuICYmIG1hdGNoZXJGcm9t
VG9rZW5zKCAodG9rZW5zID0gdG9rZW5zLnNsaWNlKCBqICkpICksCisgICAgICAgICAgICAgICAg
ICAgIGogPCBsZW4gJiYgdG9TZWxlY3RvciggdG9rZW5zICkKKyAgICAgICAgICAgICAgICApOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgbWF0Y2hlcnMucHVzaCggbWF0Y2hlciApOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApOwor
fQorCitmdW5jdGlvbiBtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMoIGVsZW1lbnRNYXRjaGVycywg
c2V0TWF0Y2hlcnMgKSB7CisgICAgdmFyIGJ5U2V0ID0gc2V0TWF0Y2hlcnMubGVuZ3RoID4gMCwK
KyAgICAgICAgYnlFbGVtZW50ID0gZWxlbWVudE1hdGNoZXJzLmxlbmd0aCA+IDAsCisgICAgICAg
IHN1cGVyTWF0Y2hlciA9IGZ1bmN0aW9uKCBzZWVkLCBjb250ZXh0LCB4bWwsIHJlc3VsdHMsIG91
dGVybW9zdCApIHsKKyAgICAgICAgICAgIHZhciBlbGVtLCBqLCBtYXRjaGVyLAorICAgICAgICAg
ICAgICAgIG1hdGNoZWRDb3VudCA9IDAsCisgICAgICAgICAgICAgICAgaSA9ICIwIiwKKyAgICAg
ICAgICAgICAgICB1bm1hdGNoZWQgPSBzZWVkICYmIFtdLAorICAgICAgICAgICAgICAgIHNldE1h
dGNoZWQgPSBbXSwKKyAgICAgICAgICAgICAgICBjb250ZXh0QmFja3VwID0gb3V0ZXJtb3N0Q29u
dGV4dCwKKyAgICAgICAgICAgICAgICAvLyBXZSBtdXN0IGFsd2F5cyBoYXZlIGVpdGhlciBzZWVk
IGVsZW1lbnRzIG9yIG91dGVybW9zdCBjb250ZXh0CisgICAgICAgICAgICAgICAgZWxlbXMgPSBz
ZWVkIHx8IGJ5RWxlbWVudCAmJiBFeHByLmZpbmRbIlRBRyJdKCAiKiIsIG91dGVybW9zdCApLAor
ICAgICAgICAgICAgICAgIC8vIFVzZSBpbnRlZ2VyIGRpcnJ1bnMgaWZmIHRoaXMgaXMgdGhlIG91
dGVybW9zdCBtYXRjaGVyCisgICAgICAgICAgICAgICAgZGlycnVuc1VuaXF1ZSA9IChkaXJydW5z
ICs9IGNvbnRleHRCYWNrdXAgPT0gbnVsbCA/IDEgOiBNYXRoLnJhbmRvbSgpIHx8IDAuMSksCisg
ICAgICAgICAgICAgICAgbGVuID0gZWxlbXMubGVuZ3RoOworCisgICAgICAgICAgICBpZiAoIG91
dGVybW9zdCApIHsKKyAgICAgICAgICAgICAgICBvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dCA9
PT0gZG9jdW1lbnQgfHwgY29udGV4dCB8fCBvdXRlcm1vc3Q7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEFkZCBlbGVtZW50cyBwYXNzaW5nIGVsZW1lbnRNYXRjaGVycyBkaXJlY3Rs
eSB0byByZXN1bHRzCisgICAgICAgICAgICAvLyBTdXBwb3J0OiBJRTw5LCBTYWZhcmkKKyAgICAg
ICAgICAgIC8vIFRvbGVyYXRlIE5vZGVMaXN0IHByb3BlcnRpZXMgKElFOiAibGVuZ3RoIjsgU2Fm
YXJpOiA8bnVtYmVyPikgbWF0Y2hpbmcgZWxlbWVudHMgYnkgaWQKKyAgICAgICAgICAgIGZvciAo
IDsgaSAhPT0gbGVuICYmIChlbGVtID0gZWxlbXNbaV0pICE9IG51bGw7IGkrKyApIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIGJ5RWxlbWVudCAmJiBlbGVtICkgeworICAgICAgICAgICAgICAgICAg
ICBqID0gMDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAhY29udGV4dCAmJiBlbGVtLm93bmVy
RG9jdW1lbnQgIT09IGRvY3VtZW50ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgc2V0RG9j
dW1lbnQoIGVsZW0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHhtbCA9ICFkb2N1bWVudElz
SFRNTDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB3aGlsZSAo
IChtYXRjaGVyID0gZWxlbWVudE1hdGNoZXJzW2orK10pICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0IHx8IGRvY3VtZW50LCB4bWwpICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCggZWxlbSApOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICggb3V0ZXJtb3N0
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGlycnVucyA9IGRpcnJ1bnNVbmlxdWU7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAvLyBUcmFjayB1bm1hdGNoZWQgZWxlbWVudHMgZm9yIHNldCBmaWx0ZXJzCisgICAgICAgICAg
ICAgICAgaWYgKCBieVNldCApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhleSB3aWxsIGhh
dmUgZ29uZSB0aHJvdWdoIGFsbCBwb3NzaWJsZSBtYXRjaGVycworICAgICAgICAgICAgICAgICAg
ICBpZiAoIChlbGVtID0gIW1hdGNoZXIgJiYgZWxlbSkgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBtYXRjaGVkQ291bnQtLTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgIC8vIExlbmd0aGVuIHRoZSBhcnJheSBmb3IgZXZlcnkgZWxlbWVudCwgbWF0Y2hl
ZCBvciBub3QKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBzZWVkICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgdW5tYXRjaGVkLnB1c2goIGVsZW0gKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gYGlg
IGlzIG5vdyB0aGUgY291bnQgb2YgZWxlbWVudHMgdmlzaXRlZCBhYm92ZSwgYW5kIGFkZGluZyBp
dCB0byBgbWF0Y2hlZENvdW50YAorICAgICAgICAgICAgLy8gbWFrZXMgdGhlIGxhdHRlciBub25u
ZWdhdGl2ZS4KKyAgICAgICAgICAgIG1hdGNoZWRDb3VudCArPSBpOworCisgICAgICAgICAgICAv
LyBBcHBseSBzZXQgZmlsdGVycyB0byB1bm1hdGNoZWQgZWxlbWVudHMKKyAgICAgICAgICAgIC8v
IE5PVEU6IFRoaXMgY2FuIGJlIHNraXBwZWQgaWYgdGhlcmUgYXJlIG5vIHVubWF0Y2hlZCBlbGVt
ZW50cyAoaS5lLiwgYG1hdGNoZWRDb3VudGAKKyAgICAgICAgICAgIC8vIGVxdWFscyBgaWApLCB1
bmxlc3Mgd2UgZGlkbid0IHZpc2l0IF9hbnlfIGVsZW1lbnRzIGluIHRoZSBhYm92ZSBsb29wIGJl
Y2F1c2Ugd2UgaGF2ZQorICAgICAgICAgICAgLy8gbm8gZWxlbWVudCBtYXRjaGVycyBhbmQgbm8g
c2VlZC4KKyAgICAgICAgICAgIC8vIEluY3JlbWVudGluZyBhbiBpbml0aWFsbHktc3RyaW5nICIw
IiBgaWAgYWxsb3dzIGBpYCB0byByZW1haW4gYSBzdHJpbmcgb25seSBpbiB0aGF0CisgICAgICAg
ICAgICAvLyBjYXNlLCB3aGljaCB3aWxsIHJlc3VsdCBpbiBhICIwMCIgYG1hdGNoZWRDb3VudGAg
dGhhdCBkaWZmZXJzIGZyb20gYGlgIGJ1dCBpcyBhbHNvCisgICAgICAgICAgICAvLyBudW1lcmlj
YWxseSB6ZXJvLgorICAgICAgICAgICAgaWYgKCBieVNldCAmJiBpICE9PSBtYXRjaGVkQ291bnQg
KSB7CisgICAgICAgICAgICAgICAgaiA9IDA7CisgICAgICAgICAgICAgICAgd2hpbGUgKCAobWF0
Y2hlciA9IHNldE1hdGNoZXJzW2orK10pICkgeworICAgICAgICAgICAgICAgICAgICBtYXRjaGVy
KCB1bm1hdGNoZWQsIHNldE1hdGNoZWQsIGNvbnRleHQsIHhtbCApOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIGlmICggc2VlZCApIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gUmVpbnRlZ3JhdGUgZWxlbWVudCBtYXRjaGVzIHRvIGVsaW1pbmF0ZSB0aGUgbmVlZCBmb3Ig
c29ydGluZworICAgICAgICAgICAgICAgICAgICBpZiAoIG1hdGNoZWRDb3VudCA+IDAgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGktLSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoICEodW5tYXRjaGVkW2ldIHx8IHNldE1hdGNoZWRbaV0pICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNYXRjaGVkW2ldID0gcG9wLmNhbGwoIHJl
c3VsdHMgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAv
LyBEaXNjYXJkIGluZGV4IHBsYWNlaG9sZGVyIHZhbHVlcyB0byBnZXQgb25seSBhY3R1YWwgbWF0
Y2hlcworICAgICAgICAgICAgICAgICAgICBzZXRNYXRjaGVkID0gY29uZGVuc2UoIHNldE1hdGNo
ZWQgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBBZGQgbWF0Y2hl
cyB0byByZXN1bHRzCisgICAgICAgICAgICAgICAgcHVzaC5hcHBseSggcmVzdWx0cywgc2V0TWF0
Y2hlZCApOworCisgICAgICAgICAgICAgICAgLy8gU2VlZGxlc3Mgc2V0IG1hdGNoZXMgc3VjY2Vl
ZGluZyBtdWx0aXBsZSBzdWNjZXNzZnVsIG1hdGNoZXJzIHN0aXB1bGF0ZSBzb3J0aW5nCisgICAg
ICAgICAgICAgICAgaWYgKCBvdXRlcm1vc3QgJiYgIXNlZWQgJiYgc2V0TWF0Y2hlZC5sZW5ndGgg
PiAwICYmCisgICAgICAgICAgICAgICAgICAgICggbWF0Y2hlZENvdW50ICsgc2V0TWF0Y2hlcnMu
bGVuZ3RoICkgPiAxICkgeworCisgICAgICAgICAgICAgICAgICAgIFNpenpsZS51bmlxdWVTb3J0
KCByZXN1bHRzICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBPdmVycmlkZSBtYW5pcHVsYXRpb24gb2YgZ2xvYmFscyBieSBuZXN0ZWQgbWF0Y2hl
cnMKKyAgICAgICAgICAgIGlmICggb3V0ZXJtb3N0ICkgeworICAgICAgICAgICAgICAgIGRpcnJ1
bnMgPSBkaXJydW5zVW5pcXVlOworICAgICAgICAgICAgICAgIG91dGVybW9zdENvbnRleHQgPSBj
b250ZXh0QmFja3VwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gdW5tYXRj
aGVkOworICAgICAgICB9OworCisgICAgcmV0dXJuIGJ5U2V0ID8KKyAgICAgICAgbWFya0Z1bmN0
aW9uKCBzdXBlck1hdGNoZXIgKSA6CisgICAgICAgIHN1cGVyTWF0Y2hlcjsKK30KKworY29tcGls
ZSA9IFNpenpsZS5jb21waWxlID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBtYXRjaCAvKiBJbnRlcm5h
bCBVc2UgT25seSAqLyApIHsKKyAgICB2YXIgaSwKKyAgICAgICAgc2V0TWF0Y2hlcnMgPSBbXSwK
KyAgICAgICAgZWxlbWVudE1hdGNoZXJzID0gW10sCisgICAgICAgIGNhY2hlZCA9IGNvbXBpbGVy
Q2FjaGVbIHNlbGVjdG9yICsgIiAiIF07CisKKyAgICBpZiAoICFjYWNoZWQgKSB7CisgICAgICAg
IC8vIEdlbmVyYXRlIGEgZnVuY3Rpb24gb2YgcmVjdXJzaXZlIGZ1bmN0aW9ucyB0aGF0IGNhbiBi
ZSB1c2VkIHRvIGNoZWNrIGVhY2ggZWxlbWVudAorICAgICAgICBpZiAoICFtYXRjaCApIHsKKyAg
ICAgICAgICAgIG1hdGNoID0gdG9rZW5pemUoIHNlbGVjdG9yICk7CisgICAgICAgIH0KKyAgICAg
ICAgaSA9IG1hdGNoLmxlbmd0aDsKKyAgICAgICAgd2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAg
ICBjYWNoZWQgPSBtYXRjaGVyRnJvbVRva2VucyggbWF0Y2hbaV0gKTsKKyAgICAgICAgICAgIGlm
ICggY2FjaGVkWyBleHBhbmRvIF0gKSB7CisgICAgICAgICAgICAgICAgc2V0TWF0Y2hlcnMucHVz
aCggY2FjaGVkICk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVsZW1l
bnRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIC8vIENhY2hlIHRoZSBjb21waWxlZCBmdW5jdGlvbgorICAgICAgICBjYWNoZWQgPSBj
b21waWxlckNhY2hlKCBzZWxlY3RvciwgbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50
TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkgKTsKKworICAgICAgICAvLyBTYXZlIHNlbGVjdG9yIGFu
ZCB0b2tlbml6YXRpb24KKyAgICAgICAgY2FjaGVkLnNlbGVjdG9yID0gc2VsZWN0b3I7CisgICAg
fQorICAgIHJldHVybiBjYWNoZWQ7Cit9OworCisvKioKKyAqIEEgbG93LWxldmVsIHNlbGVjdGlv
biBmdW5jdGlvbiB0aGF0IHdvcmtzIHdpdGggU2l6emxlJ3MgY29tcGlsZWQKKyAqICBzZWxlY3Rv
ciBmdW5jdGlvbnMKKyAqIEBwYXJhbSB7U3RyaW5nfEZ1bmN0aW9ufSBzZWxlY3RvciBBIHNlbGVj
dG9yIG9yIGEgcHJlLWNvbXBpbGVkCisgKiAgc2VsZWN0b3IgZnVuY3Rpb24gYnVpbHQgd2l0aCBT
aXp6bGUuY29tcGlsZQorICogQHBhcmFtIHtFbGVtZW50fSBjb250ZXh0CisgKiBAcGFyYW0ge0Fy
cmF5fSBbcmVzdWx0c10KKyAqIEBwYXJhbSB7QXJyYXl9IFtzZWVkXSBBIHNldCBvZiBlbGVtZW50
cyB0byBtYXRjaCBhZ2FpbnN0CisgKi8KK3NlbGVjdCA9IFNpenpsZS5zZWxlY3QgPSBmdW5jdGlv
biggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7CisgICAgdmFyIGksIHRva2Vu
cywgdG9rZW4sIHR5cGUsIGZpbmQsCisgICAgICAgIGNvbXBpbGVkID0gdHlwZW9mIHNlbGVjdG9y
ID09PSAiZnVuY3Rpb24iICYmIHNlbGVjdG9yLAorICAgICAgICBtYXRjaCA9ICFzZWVkICYmIHRv
a2VuaXplKCAoc2VsZWN0b3IgPSBjb21waWxlZC5zZWxlY3RvciB8fCBzZWxlY3RvcikgKTsKKwor
ICAgIHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdOworCisgICAgLy8gVHJ5IHRvIG1pbmltaXplIG9w
ZXJhdGlvbnMgaWYgdGhlcmUgaXMgb25seSBvbmUgc2VsZWN0b3IgaW4gdGhlIGxpc3QgYW5kIG5v
IHNlZWQKKyAgICAvLyAodGhlIGxhdHRlciBvZiB3aGljaCBndWFyYW50ZWVzIHVzIGNvbnRleHQp
CisgICAgaWYgKCBtYXRjaC5sZW5ndGggPT09IDEgKSB7CisKKyAgICAgICAgLy8gUmVkdWNlIGNv
bnRleHQgaWYgdGhlIGxlYWRpbmcgY29tcG91bmQgc2VsZWN0b3IgaXMgYW4gSUQKKyAgICAgICAg
dG9rZW5zID0gbWF0Y2hbMF0gPSBtYXRjaFswXS5zbGljZSggMCApOworICAgICAgICBpZiAoIHRv
a2Vucy5sZW5ndGggPiAyICYmICh0b2tlbiA9IHRva2Vuc1swXSkudHlwZSA9PT0gIklEIiAmJgor
ICAgICAgICAgICAgICAgIGNvbnRleHQubm9kZVR5cGUgPT09IDkgJiYgZG9jdW1lbnRJc0hUTUwg
JiYgRXhwci5yZWxhdGl2ZVsgdG9rZW5zWzFdLnR5cGUgXSApIHsKKworICAgICAgICAgICAgY29u
dGV4dCA9ICggRXhwci5maW5kWyJJRCJdKCB0b2tlbi5tYXRjaGVzWzBdLnJlcGxhY2UocnVuZXNj
YXBlLCBmdW5lc2NhcGUpLCBjb250ZXh0ICkgfHwgW10gKVswXTsKKyAgICAgICAgICAgIGlmICgg
IWNvbnRleHQgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisKKyAgICAgICAg
ICAgIC8vIFByZWNvbXBpbGVkIG1hdGNoZXJzIHdpbGwgc3RpbGwgdmVyaWZ5IGFuY2VzdHJ5LCBz
byBzdGVwIHVwIGEgbGV2ZWwKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIGNvbXBpbGVkICkgewor
ICAgICAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0LnBhcmVudE5vZGU7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3Iuc2xpY2UoIHRva2Vucy5zaGlm
dCgpLnZhbHVlLmxlbmd0aCApOworICAgICAgICB9CisKKyAgICAgICAgLy8gRmV0Y2ggYSBzZWVk
IHNldCBmb3IgcmlnaHQtdG8tbGVmdCBtYXRjaGluZworICAgICAgICBpID0gbWF0Y2hFeHByWyJu
ZWVkc0NvbnRleHQiXS50ZXN0KCBzZWxlY3RvciApID8gMCA6IHRva2Vucy5sZW5ndGg7CisgICAg
ICAgIHdoaWxlICggaS0tICkgeworICAgICAgICAgICAgdG9rZW4gPSB0b2tlbnNbaV07CisKKyAg
ICAgICAgICAgIC8vIEFib3J0IGlmIHdlIGhpdCBhIGNvbWJpbmF0b3IKKyAgICAgICAgICAgIGlm
ICggRXhwci5yZWxhdGl2ZVsgKHR5cGUgPSB0b2tlbi50eXBlKSBdICkgeworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCAoZmluZCA9IEV4cHIu
ZmluZFsgdHlwZSBdKSApIHsKKyAgICAgICAgICAgICAgICAvLyBTZWFyY2gsIGV4cGFuZGluZyBj
b250ZXh0IGZvciBsZWFkaW5nIHNpYmxpbmcgY29tYmluYXRvcnMKKyAgICAgICAgICAgICAgICBp
ZiAoIChzZWVkID0gZmluZCgKKyAgICAgICAgICAgICAgICAgICAgdG9rZW4ubWF0Y2hlc1swXS5y
ZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLAorICAgICAgICAgICAgICAgICAgICByc2li
bGluZy50ZXN0KCB0b2tlbnNbMF0udHlwZSApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVu
dE5vZGUgKSB8fCBjb250ZXh0CisgICAgICAgICAgICAgICAgKSkgKSB7CisKKyAgICAgICAgICAg
ICAgICAgICAgLy8gSWYgc2VlZCBpcyBlbXB0eSBvciBubyB0b2tlbnMgcmVtYWluLCB3ZSBjYW4g
cmV0dXJuIGVhcmx5CisgICAgICAgICAgICAgICAgICAgIHRva2Vucy5zcGxpY2UoIGksIDEgKTsK
KyAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgPSBzZWVkLmxlbmd0aCAmJiB0b1NlbGVjdG9y
KCB0b2tlbnMgKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAhc2VsZWN0b3IgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBwdXNoLmFwcGx5KCByZXN1bHRzLCBzZWVkICk7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIENvbXBpbGUgYW5kIGV4ZWN1dGUgYSBm
aWx0ZXJpbmcgZnVuY3Rpb24gaWYgb25lIGlzIG5vdCBwcm92aWRlZAorICAgIC8vIFByb3ZpZGUg
YG1hdGNoYCB0byBhdm9pZCByZXRva2VuaXphdGlvbiBpZiB3ZSBtb2RpZmllZCB0aGUgc2VsZWN0
b3IgYWJvdmUKKyAgICAoIGNvbXBpbGVkIHx8IGNvbXBpbGUoIHNlbGVjdG9yLCBtYXRjaCApICko
CisgICAgICAgIHNlZWQsCisgICAgICAgIGNvbnRleHQsCisgICAgICAgICFkb2N1bWVudElzSFRN
TCwKKyAgICAgICAgcmVzdWx0cywKKyAgICAgICAgIWNvbnRleHQgfHwgcnNpYmxpbmcudGVzdCgg
c2VsZWN0b3IgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHwgY29udGV4
dAorICAgICk7CisgICAgcmV0dXJuIHJlc3VsdHM7Cit9OworCisvLyBPbmUtdGltZSBhc3NpZ25t
ZW50cworCisvLyBTb3J0IHN0YWJpbGl0eQorc3VwcG9ydC5zb3J0U3RhYmxlID0gZXhwYW5kby5z
cGxpdCgiIikuc29ydCggc29ydE9yZGVyICkuam9pbigiIikgPT09IGV4cGFuZG87CisKKy8vIFN1
cHBvcnQ6IENocm9tZSAxNC0zNSsKKy8vIEFsd2F5cyBhc3N1bWUgZHVwbGljYXRlcyBpZiB0aGV5
IGFyZW4ndCBwYXNzZWQgdG8gdGhlIGNvbXBhcmlzb24gZnVuY3Rpb24KK3N1cHBvcnQuZGV0ZWN0
RHVwbGljYXRlcyA9ICEhaGFzRHVwbGljYXRlOworCisvLyBJbml0aWFsaXplIGFnYWluc3QgdGhl
IGRlZmF1bHQgZG9jdW1lbnQKK3NldERvY3VtZW50KCk7CisKKy8vIFN1cHBvcnQ6IFdlYmtpdDw1
MzcuMzIgLSBTYWZhcmkgNi4wLjMvQ2hyb21lIDI1IChmaXhlZCBpbiBDaHJvbWUgMjcpCisvLyBE
ZXRhY2hlZCBub2RlcyBjb25mb3VuZGluZ2x5IGZvbGxvdyAqZWFjaCBvdGhlcioKK3N1cHBvcnQu
c29ydERldGFjaGVkID0gYXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHsKKyAgICAvLyBTaG91bGQgcmV0
dXJuIDEsIGJ1dCByZXR1cm5zIDQgKGZvbGxvd2luZykKKyAgICByZXR1cm4gZWwuY29tcGFyZURv
Y3VtZW50UG9zaXRpb24oIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImZpZWxkc2V0IikgKSAmIDE7
Cit9KTsKKworLy8gU3VwcG9ydDogSUU8OAorLy8gUHJldmVudCBhdHRyaWJ1dGUvcHJvcGVydHkg
ImludGVycG9sYXRpb24iCisvLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJy
YXJ5L21zNTM2NDI5JTI4VlMuODUlMjkuYXNweAoraWYgKCAhYXNzZXJ0KGZ1bmN0aW9uKCBlbCAp
IHsKKyAgICBlbC5pbm5lckhUTUwgPSAiPGEgaHJlZj0nIyc+PC9hPiI7CisgICAgcmV0dXJuIGVs
LmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVmIikgPT09ICIjIiA7Cit9KSApIHsKKyAgICBh
ZGRIYW5kbGUoICJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoIiwgZnVuY3Rpb24oIGVsZW0sIG5hbWUs
IGlzWE1MICkgeworICAgICAgICBpZiAoICFpc1hNTCApIHsKKyAgICAgICAgICAgIHJldHVybiBl
bGVtLmdldEF0dHJpYnV0ZSggbmFtZSwgbmFtZS50b0xvd2VyQ2FzZSgpID09PSAidHlwZSIgPyAx
IDogMiApOworICAgICAgICB9CisgICAgfSk7Cit9CisKKy8vIFN1cHBvcnQ6IElFPDkKKy8vIFVz
ZSBkZWZhdWx0VmFsdWUgaW4gcGxhY2Ugb2YgZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpCitpZiAoICFz
dXBwb3J0LmF0dHJpYnV0ZXMgfHwgIWFzc2VydChmdW5jdGlvbiggZWwgKSB7CisgICAgZWwuaW5u
ZXJIVE1MID0gIjxpbnB1dC8+IjsKKyAgICBlbC5maXJzdENoaWxkLnNldEF0dHJpYnV0ZSggInZh
bHVlIiwgIiIgKTsKKyAgICByZXR1cm4gZWwuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoICJ2YWx1
ZSIgKSA9PT0gIiI7Cit9KSApIHsKKyAgICBhZGRIYW5kbGUoICJ2YWx1ZSIsIGZ1bmN0aW9uKCBl
bGVtLCBuYW1lLCBpc1hNTCApIHsKKyAgICAgICAgaWYgKCAhaXNYTUwgJiYgZWxlbS5ub2RlTmFt
ZS50b0xvd2VyQ2FzZSgpID09PSAiaW5wdXQiICkgeworICAgICAgICAgICAgcmV0dXJuIGVsZW0u
ZGVmYXVsdFZhbHVlOworICAgICAgICB9CisgICAgfSk7Cit9CisKKy8vIFN1cHBvcnQ6IElFPDkK
Ky8vIFVzZSBnZXRBdHRyaWJ1dGVOb2RlIHRvIGZldGNoIGJvb2xlYW5zIHdoZW4gZ2V0QXR0cmli
dXRlIGxpZXMKK2lmICggIWFzc2VydChmdW5jdGlvbiggZWwgKSB7CisgICAgcmV0dXJuIGVsLmdl
dEF0dHJpYnV0ZSgiZGlzYWJsZWQiKSA9PSBudWxsOworfSkgKSB7CisgICAgYWRkSGFuZGxlKCBi
b29sZWFucywgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkgeworICAgICAgICB2YXIgdmFs
OworICAgICAgICBpZiAoICFpc1hNTCApIHsKKyAgICAgICAgICAgIHJldHVybiBlbGVtWyBuYW1l
IF0gPT09IHRydWUgPyBuYW1lLnRvTG93ZXJDYXNlKCkgOgorICAgICAgICAgICAgICAgICAgICAo
dmFsID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICkpICYmIHZhbC5zcGVjaWZpZWQgPwor
ICAgICAgICAgICAgICAgICAgICB2YWwudmFsdWUgOgorICAgICAgICAgICAgICAgIG51bGw7Cisg
ICAgICAgIH0KKyAgICB9KTsKK30KKworcmV0dXJuIFNpenpsZTsKKworfSkoIHdpbmRvdyApOwor
CisKKworalF1ZXJ5LmZpbmQgPSBTaXp6bGU7CitqUXVlcnkuZXhwciA9IFNpenpsZS5zZWxlY3Rv
cnM7CisKKy8vIERlcHJlY2F0ZWQKK2pRdWVyeS5leHByWyAiOiIgXSA9IGpRdWVyeS5leHByLnBz
ZXVkb3M7CitqUXVlcnkudW5pcXVlU29ydCA9IGpRdWVyeS51bmlxdWUgPSBTaXp6bGUudW5pcXVl
U29ydDsKK2pRdWVyeS50ZXh0ID0gU2l6emxlLmdldFRleHQ7CitqUXVlcnkuaXNYTUxEb2MgPSBT
aXp6bGUuaXNYTUw7CitqUXVlcnkuY29udGFpbnMgPSBTaXp6bGUuY29udGFpbnM7CitqUXVlcnku
ZXNjYXBlU2VsZWN0b3IgPSBTaXp6bGUuZXNjYXBlOworCisKKworCit2YXIgZGlyID0gZnVuY3Rp
b24oIGVsZW0sIGRpciwgdW50aWwgKSB7CisgICAgdmFyIG1hdGNoZWQgPSBbXSwKKyAgICAgICAg
dHJ1bmNhdGUgPSB1bnRpbCAhPT0gdW5kZWZpbmVkOworCisgICAgd2hpbGUgKCAoIGVsZW0gPSBl
bGVtWyBkaXIgXSApICYmIGVsZW0ubm9kZVR5cGUgIT09IDkgKSB7CisgICAgICAgIGlmICggZWxl
bS5ub2RlVHlwZSA9PT0gMSApIHsKKyAgICAgICAgICAgIGlmICggdHJ1bmNhdGUgJiYgalF1ZXJ5
KCBlbGVtICkuaXMoIHVudGlsICkgKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBtYXRjaGVkLnB1c2goIGVsZW0gKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICByZXR1cm4gbWF0Y2hlZDsKK307CisKKwordmFyIHNpYmxpbmdzID0gZnVuY3Rpb24o
IG4sIGVsZW0gKSB7CisgICAgdmFyIG1hdGNoZWQgPSBbXTsKKworICAgIGZvciAoIDsgbjsgbiA9
IG4ubmV4dFNpYmxpbmcgKSB7CisgICAgICAgIGlmICggbi5ub2RlVHlwZSA9PT0gMSAmJiBuICE9
PSBlbGVtICkgeworICAgICAgICAgICAgbWF0Y2hlZC5wdXNoKCBuICk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gbWF0Y2hlZDsKK307CisKKwordmFyIHJuZWVkc0NvbnRleHQgPSBq
UXVlcnkuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQ7CisKK3ZhciByc2luZ2xlVGFnID0gKCAvXjwo
W2Etel1bXlwvXDA+Olx4MjBcdFxyXG5cZl0qKVtceDIwXHRcclxuXGZdKlwvPz4oPzo8XC9cMT58
KSQvaSApOworCisKKwordmFyIHJpc1NpbXBsZSA9IC9eLlteOiNcW1wuLF0qJC87CisKKy8vIElt
cGxlbWVudCB0aGUgaWRlbnRpY2FsIGZ1bmN0aW9uYWxpdHkgZm9yIGZpbHRlciBhbmQgbm90Citm
dW5jdGlvbiB3aW5ub3coIGVsZW1lbnRzLCBxdWFsaWZpZXIsIG5vdCApIHsKKyAgICBpZiAoIGpR
dWVyeS5pc0Z1bmN0aW9uKCBxdWFsaWZpZXIgKSApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5n
cmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7CisgICAgICAgICAgICByZXR1cm4g
ISFxdWFsaWZpZXIuY2FsbCggZWxlbSwgaSwgZWxlbSApICE9PSBub3Q7CisgICAgICAgIH0gKTsK
KyAgICB9CisKKyAgICAvLyBTaW5nbGUgZWxlbWVudAorICAgIGlmICggcXVhbGlmaWVyLm5vZGVU
eXBlICkgeworICAgICAgICByZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbigg
ZWxlbSApIHsKKyAgICAgICAgICAgIHJldHVybiAoIGVsZW0gPT09IHF1YWxpZmllciApICE9PSBu
b3Q7CisgICAgICAgIH0gKTsKKyAgICB9CisKKyAgICAvLyBBcnJheWxpa2Ugb2YgZWxlbWVudHMg
KGpRdWVyeSwgYXJndW1lbnRzLCBBcnJheSkKKyAgICBpZiAoIHR5cGVvZiBxdWFsaWZpZXIgIT09
ICJzdHJpbmciICkgeworICAgICAgICByZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5j
dGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIHJldHVybiAoIGluZGV4T2YuY2FsbCggcXVhbGlm
aWVyLCBlbGVtICkgPiAtMSApICE9PSBub3Q7CisgICAgICAgIH0gKTsKKyAgICB9CisKKyAgICAv
LyBTaW1wbGUgc2VsZWN0b3IgdGhhdCBjYW4gYmUgZmlsdGVyZWQgZGlyZWN0bHksIHJlbW92aW5n
IG5vbi1FbGVtZW50cworICAgIGlmICggcmlzU2ltcGxlLnRlc3QoIHF1YWxpZmllciApICkgewor
ICAgICAgICByZXR1cm4galF1ZXJ5LmZpbHRlciggcXVhbGlmaWVyLCBlbGVtZW50cywgbm90ICk7
CisgICAgfQorCisgICAgLy8gQ29tcGxleCBzZWxlY3RvciwgY29tcGFyZSB0aGUgdHdvIHNldHMs
IHJlbW92aW5nIG5vbi1FbGVtZW50cworICAgIHF1YWxpZmllciA9IGpRdWVyeS5maWx0ZXIoIHF1
YWxpZmllciwgZWxlbWVudHMgKTsKKyAgICByZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBm
dW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgcmV0dXJuICggaW5kZXhPZi5jYWxsKCBxdWFsaWZp
ZXIsIGVsZW0gKSA+IC0xICkgIT09IG5vdCAmJiBlbGVtLm5vZGVUeXBlID09PSAxOworICAgIH0g
KTsKK30KKworalF1ZXJ5LmZpbHRlciA9IGZ1bmN0aW9uKCBleHByLCBlbGVtcywgbm90ICkgewor
ICAgIHZhciBlbGVtID0gZWxlbXNbIDAgXTsKKworICAgIGlmICggbm90ICkgeworICAgICAgICBl
eHByID0gIjpub3QoIiArIGV4cHIgKyAiKSI7CisgICAgfQorCisgICAgaWYgKCBlbGVtcy5sZW5n
dGggPT09IDEgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVy
eS5maW5kLm1hdGNoZXNTZWxlY3RvciggZWxlbSwgZXhwciApID8gWyBlbGVtIF0gOiBbXTsKKyAg
ICB9CisKKyAgICByZXR1cm4galF1ZXJ5LmZpbmQubWF0Y2hlcyggZXhwciwgalF1ZXJ5LmdyZXAo
IGVsZW1zLCBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgcmV0dXJuIGVsZW0ubm9kZVR5cGUg
PT09IDE7CisgICAgfSApICk7Cit9OworCitqUXVlcnkuZm4uZXh0ZW5kKCB7CisgICAgZmluZDog
ZnVuY3Rpb24oIHNlbGVjdG9yICkgeworICAgICAgICB2YXIgaSwgcmV0LAorICAgICAgICAgICAg
bGVuID0gdGhpcy5sZW5ndGgsCisgICAgICAgICAgICBzZWxmID0gdGhpczsKKworICAgICAgICBp
ZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gInN0cmluZyIgKSB7CisgICAgICAgICAgICByZXR1cm4g
dGhpcy5wdXNoU3RhY2soIGpRdWVyeSggc2VsZWN0b3IgKS5maWx0ZXIoIGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmICggalF1ZXJ5LmNvbnRhaW5zKCBzZWxmWyBpIF0sIHRoaXMgKSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSApICk7CisgICAgICAgIH0KKworICAg
ICAgICByZXQgPSB0aGlzLnB1c2hTdGFjayggW10gKTsKKworICAgICAgICBmb3IgKCBpID0gMDsg
aSA8IGxlbjsgaSsrICkgeworICAgICAgICAgICAgalF1ZXJ5LmZpbmQoIHNlbGVjdG9yLCBzZWxm
WyBpIF0sIHJldCApOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGxlbiA+IDEgPyBqUXVl
cnkudW5pcXVlU29ydCggcmV0ICkgOiByZXQ7CisgICAgfSwKKyAgICBmaWx0ZXI6IGZ1bmN0aW9u
KCBzZWxlY3RvciApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3coIHRo
aXMsIHNlbGVjdG9yIHx8IFtdLCBmYWxzZSApICk7CisgICAgfSwKKyAgICBub3Q6IGZ1bmN0aW9u
KCBzZWxlY3RvciApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3coIHRo
aXMsIHNlbGVjdG9yIHx8IFtdLCB0cnVlICkgKTsKKyAgICB9LAorICAgIGlzOiBmdW5jdGlvbigg
c2VsZWN0b3IgKSB7CisgICAgICAgIHJldHVybiAhIXdpbm5vdygKKyAgICAgICAgICAgIHRoaXMs
CisKKyAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBwb3NpdGlvbmFsL3JlbGF0aXZlIHNlbGVj
dG9yLCBjaGVjayBtZW1iZXJzaGlwIGluIHRoZSByZXR1cm5lZCBzZXQKKyAgICAgICAgICAgIC8v
IHNvICQoInA6Zmlyc3QiKS5pcygicDpsYXN0Iikgd29uJ3QgcmV0dXJuIHRydWUgZm9yIGEgZG9j
IHdpdGggdHdvICJwIi4KKyAgICAgICAgICAgIHR5cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIg
JiYgcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApID8KKyAgICAgICAgICAgICAgICBqUXVl
cnkoIHNlbGVjdG9yICkgOgorICAgICAgICAgICAgICAgIHNlbGVjdG9yIHx8IFtdLAorICAgICAg
ICAgICAgZmFsc2UKKyAgICAgICAgKS5sZW5ndGg7CisgICAgfQorfSApOworCisKKy8vIEluaXRp
YWxpemUgYSBqUXVlcnkgb2JqZWN0CisKKworLy8gQSBjZW50cmFsIHJlZmVyZW5jZSB0byB0aGUg
cm9vdCBqUXVlcnkoZG9jdW1lbnQpCit2YXIgcm9vdGpRdWVyeSwKKworICAgIC8vIEEgc2ltcGxl
IHdheSB0byBjaGVjayBmb3IgSFRNTCBzdHJpbmdzCisgICAgLy8gUHJpb3JpdGl6ZSAjaWQgb3Zl
ciA8dGFnPiB0byBhdm9pZCBYU1MgdmlhIGxvY2F0aW9uLmhhc2ggKCM5NTIxKQorICAgIC8vIFN0
cmljdCBIVE1MIHJlY29nbml0aW9uICgjMTEyOTA6IG11c3Qgc3RhcnQgd2l0aCA8KQorICAgIC8v
IFNob3J0Y3V0IHNpbXBsZSAjaWQgY2FzZSBmb3Igc3BlZWQKKyAgICBycXVpY2tFeHByID0gL14o
PzpccyooPFtcd1xXXSs+KVtePl0qfCMoW1x3LV0rKSkkLywKKworICAgIGluaXQgPSBqUXVlcnku
Zm4uaW5pdCA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcm9vdCApIHsKKyAgICAgICAg
dmFyIG1hdGNoLCBlbGVtOworCisgICAgICAgIC8vIEhBTkRMRTogJCgiIiksICQobnVsbCksICQo
dW5kZWZpbmVkKSwgJChmYWxzZSkKKyAgICAgICAgaWYgKCAhc2VsZWN0b3IgKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE1ldGhvZCBpbml0KCkg
YWNjZXB0cyBhbiBhbHRlcm5hdGUgcm9vdGpRdWVyeQorICAgICAgICAvLyBzbyBtaWdyYXRlIGNh
biBzdXBwb3J0IGpRdWVyeS5zdWIgKGdoLTIxMDEpCisgICAgICAgIHJvb3QgPSByb290IHx8IHJv
b3RqUXVlcnk7CisKKyAgICAgICAgLy8gSGFuZGxlIEhUTUwgc3RyaW5ncworICAgICAgICBpZiAo
IHR5cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIgKSB7CisgICAgICAgICAgICBpZiAoIHNlbGVj
dG9yWyAwIF0gPT09ICI8IiAmJgorICAgICAgICAgICAgICAgIHNlbGVjdG9yWyBzZWxlY3Rvci5s
ZW5ndGggLSAxIF0gPT09ICI+IiAmJgorICAgICAgICAgICAgICAgIHNlbGVjdG9yLmxlbmd0aCA+
PSAzICkgeworCisgICAgICAgICAgICAgICAgLy8gQXNzdW1lIHRoYXQgc3RyaW5ncyB0aGF0IHN0
YXJ0IGFuZCBlbmQgd2l0aCA8PiBhcmUgSFRNTCBhbmQgc2tpcCB0aGUgcmVnZXggY2hlY2sKKyAg
ICAgICAgICAgICAgICBtYXRjaCA9IFsgbnVsbCwgc2VsZWN0b3IsIG51bGwgXTsKKworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtYXRjaCA9IHJxdWlja0V4cHIuZXhlYygg
c2VsZWN0b3IgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTWF0Y2ggaHRtbCBv
ciBtYWtlIHN1cmUgbm8gY29udGV4dCBpcyBzcGVjaWZpZWQgZm9yICNpZAorICAgICAgICAgICAg
aWYgKCBtYXRjaCAmJiAoIG1hdGNoWyAxIF0gfHwgIWNvbnRleHQgKSApIHsKKworICAgICAgICAg
ICAgICAgIC8vIEhBTkRMRTogJChodG1sKSAtPiAkKGFycmF5KQorICAgICAgICAgICAgICAgIGlm
ICggbWF0Y2hbIDEgXSApIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHQg
aW5zdGFuY2VvZiBqUXVlcnkgPyBjb250ZXh0WyAwIF0gOiBjb250ZXh0OworCisgICAgICAgICAg
ICAgICAgICAgIC8vIE9wdGlvbiB0byBydW4gc2NyaXB0cyBpcyB0cnVlIGZvciBiYWNrLWNvbXBh
dAorICAgICAgICAgICAgICAgICAgICAvLyBJbnRlbnRpb25hbGx5IGxldCB0aGUgZXJyb3IgYmUg
dGhyb3duIGlmIHBhcnNlSFRNTCBpcyBub3QgcHJlc2VudAorICAgICAgICAgICAgICAgICAgICBq
UXVlcnkubWVyZ2UoIHRoaXMsIGpRdWVyeS5wYXJzZUhUTUwoCisgICAgICAgICAgICAgICAgICAg
ICAgICBtYXRjaFsgMSBdLAorICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCAmJiBjb250
ZXh0Lm5vZGVUeXBlID8gY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgOiBkb2N1bWVu
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRydWUKKyAgICAgICAgICAgICAgICAgICAgKSAp
OworCisgICAgICAgICAgICAgICAgICAgIC8vIEhBTkRMRTogJChodG1sLCBwcm9wcykKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCByc2luZ2xlVGFnLnRlc3QoIG1hdGNoWyAxIF0gKSAmJiBqUXVl
cnkuaXNQbGFpbk9iamVjdCggY29udGV4dCApICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yICggbWF0Y2ggaW4gY29udGV4dCApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFByb3BlcnRpZXMgb2YgY29udGV4dCBhcmUgY2FsbGVkIGFzIG1ldGhvZHMgaWYgcG9zc2li
bGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB0
aGlzWyBtYXRjaCBdICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNb
IG1hdGNoIF0oIGNvbnRleHRbIG1hdGNoIF0gKTsKKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIC4uLmFuZCBvdGhlcndpc2Ugc2V0IGFzIGF0dHJpYnV0ZXMKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLmF0dHIoIG1hdGNoLCBjb250ZXh0WyBtYXRjaCBdICk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisKKyAgICAgICAgICAgICAg
ICAvLyBIQU5ETEU6ICQoI2lkKQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggbWF0Y2hbIDIgXSApOwor
CisgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbSApIHsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gSW5qZWN0IHRoZSBlbGVtZW50IGRpcmVjdGx5IGludG8gdGhlIGpRdWVyeSBvYmpl
Y3QKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbIDAgXSA9IGVsZW07CisgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLmxlbmd0aCA9IDE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAvLyBIQU5ETEU6ICQoZXhwciwgJCguLi4pKQorICAgICAgICAgICAgfSBlbHNlIGlm
ICggIWNvbnRleHQgfHwgY29udGV4dC5qcXVlcnkgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
ICggY29udGV4dCB8fCByb290ICkuZmluZCggc2VsZWN0b3IgKTsKKworICAgICAgICAgICAgLy8g
SEFORExFOiAkKGV4cHIsIGNvbnRleHQpCisgICAgICAgICAgICAvLyAod2hpY2ggaXMganVzdCBl
cXVpdmFsZW50IHRvOiAkKGNvbnRleHQpLmZpbmQoZXhwcikKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IoIGNvbnRleHQgKS5maW5k
KCBzZWxlY3RvciApOworICAgICAgICAgICAgfQorCisgICAgICAgIC8vIEhBTkRMRTogJChET01F
bGVtZW50KQorICAgICAgICB9IGVsc2UgaWYgKCBzZWxlY3Rvci5ub2RlVHlwZSApIHsKKyAgICAg
ICAgICAgIHRoaXNbIDAgXSA9IHNlbGVjdG9yOworICAgICAgICAgICAgdGhpcy5sZW5ndGggPSAx
OworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisKKyAgICAgICAgLy8gSEFORExFOiAkKGZ1bmN0
aW9uKQorICAgICAgICAvLyBTaG9ydGN1dCBmb3IgZG9jdW1lbnQgcmVhZHkKKyAgICAgICAgfSBl
bHNlIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHNlbGVjdG9yICkgKSB7CisgICAgICAgICAgICBy
ZXR1cm4gcm9vdC5yZWFkeSAhPT0gdW5kZWZpbmVkID8KKyAgICAgICAgICAgICAgICByb290LnJl
YWR5KCBzZWxlY3RvciApIDoKKworICAgICAgICAgICAgICAgIC8vIEV4ZWN1dGUgaW1tZWRpYXRl
bHkgaWYgcmVhZHkgaXMgbm90IHByZXNlbnQKKyAgICAgICAgICAgICAgICBzZWxlY3RvciggalF1
ZXJ5ICk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4galF1ZXJ5Lm1ha2VBcnJheSggc2Vs
ZWN0b3IsIHRoaXMgKTsKKyAgICB9OworCisvLyBHaXZlIHRoZSBpbml0IGZ1bmN0aW9uIHRoZSBq
UXVlcnkgcHJvdG90eXBlIGZvciBsYXRlciBpbnN0YW50aWF0aW9uCitpbml0LnByb3RvdHlwZSA9
IGpRdWVyeS5mbjsKKworLy8gSW5pdGlhbGl6ZSBjZW50cmFsIHJlZmVyZW5jZQorcm9vdGpRdWVy
eSA9IGpRdWVyeSggZG9jdW1lbnQgKTsKKworCit2YXIgcnBhcmVudHNwcmV2ID0gL14oPzpwYXJl
bnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sCisKKyAgICAvLyBNZXRob2RzIGd1YXJhbnRlZWQgdG8g
cHJvZHVjZSBhIHVuaXF1ZSBzZXQgd2hlbiBzdGFydGluZyBmcm9tIGEgdW5pcXVlIHNldAorICAg
IGd1YXJhbnRlZWRVbmlxdWUgPSB7CisgICAgICAgIGNoaWxkcmVuOiB0cnVlLAorICAgICAgICBj
b250ZW50czogdHJ1ZSwKKyAgICAgICAgbmV4dDogdHJ1ZSwKKyAgICAgICAgcHJldjogdHJ1ZQor
ICAgIH07CisKK2pRdWVyeS5mbi5leHRlbmQoIHsKKyAgICBoYXM6IGZ1bmN0aW9uKCB0YXJnZXQg
KSB7CisgICAgICAgIHZhciB0YXJnZXRzID0galF1ZXJ5KCB0YXJnZXQsIHRoaXMgKSwKKyAgICAg
ICAgICAgIGwgPSB0YXJnZXRzLmxlbmd0aDsKKworICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXIo
IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdmFyIGkgPSAwOworICAgICAgICAgICAgZm9yICgg
OyBpIDwgbDsgaSsrICkgeworICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmNvbnRhaW5zKCB0
aGlzLCB0YXJnZXRzWyBpIF0gKSApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9ICk7CisgICAgfSwK
KworICAgIGNsb3Nlc3Q6IGZ1bmN0aW9uKCBzZWxlY3RvcnMsIGNvbnRleHQgKSB7CisgICAgICAg
IHZhciBjdXIsCisgICAgICAgICAgICBpID0gMCwKKyAgICAgICAgICAgIGwgPSB0aGlzLmxlbmd0
aCwKKyAgICAgICAgICAgIG1hdGNoZWQgPSBbXSwKKyAgICAgICAgICAgIHRhcmdldHMgPSB0eXBl
b2Ygc2VsZWN0b3JzICE9PSAic3RyaW5nIiAmJiBqUXVlcnkoIHNlbGVjdG9ycyApOworCisgICAg
ICAgIC8vIFBvc2l0aW9uYWwgc2VsZWN0b3JzIG5ldmVyIG1hdGNoLCBzaW5jZSB0aGVyZSdzIG5v
IF9zZWxlY3Rpb25fIGNvbnRleHQKKyAgICAgICAgaWYgKCAhcm5lZWRzQ29udGV4dC50ZXN0KCBz
ZWxlY3RvcnMgKSApIHsKKyAgICAgICAgICAgIGZvciAoIDsgaSA8IGw7IGkrKyApIHsKKyAgICAg
ICAgICAgICAgICBmb3IgKCBjdXIgPSB0aGlzWyBpIF07IGN1ciAmJiBjdXIgIT09IGNvbnRleHQ7
IGN1ciA9IGN1ci5wYXJlbnROb2RlICkgeworCisgICAgICAgICAgICAgICAgICAgIC8vIEFsd2F5
cyBza2lwIGRvY3VtZW50IGZyYWdtZW50cworICAgICAgICAgICAgICAgICAgICBpZiAoIGN1ci5u
b2RlVHlwZSA8IDExICYmICggdGFyZ2V0cyA/CisgICAgICAgICAgICAgICAgICAgICAgICB0YXJn
ZXRzLmluZGV4KCBjdXIgKSA+IC0xIDoKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9u
J3QgcGFzcyBub24tZWxlbWVudHMgdG8gU2l6emxlCisgICAgICAgICAgICAgICAgICAgICAgICBj
dXIubm9kZVR5cGUgPT09IDEgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnku
ZmluZC5tYXRjaGVzU2VsZWN0b3IoIGN1ciwgc2VsZWN0b3JzICkgKSApIHsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgbWF0Y2hlZC5wdXNoKCBjdXIgKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBt
YXRjaGVkLmxlbmd0aCA+IDEgPyBqUXVlcnkudW5pcXVlU29ydCggbWF0Y2hlZCApIDogbWF0Y2hl
ZCApOworICAgIH0sCisKKyAgICAvLyBEZXRlcm1pbmUgdGhlIHBvc2l0aW9uIG9mIGFuIGVsZW1l
bnQgd2l0aGluIHRoZSBzZXQKKyAgICBpbmRleDogZnVuY3Rpb24oIGVsZW0gKSB7CisKKyAgICAg
ICAgLy8gTm8gYXJndW1lbnQsIHJldHVybiBpbmRleCBpbiBwYXJlbnQKKyAgICAgICAgaWYgKCAh
ZWxlbSApIHsKKyAgICAgICAgICAgIHJldHVybiAoIHRoaXNbIDAgXSAmJiB0aGlzWyAwIF0ucGFy
ZW50Tm9kZSApID8gdGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGggOiAtMTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIEluZGV4IGluIHNlbGVjdG9yCisgICAgICAgIGlmICggdHlwZW9mIGVs
ZW0gPT09ICJzdHJpbmciICkgeworICAgICAgICAgICAgcmV0dXJuIGluZGV4T2YuY2FsbCggalF1
ZXJ5KCBlbGVtICksIHRoaXNbIDAgXSApOworICAgICAgICB9CisKKyAgICAgICAgLy8gTG9jYXRl
IHRoZSBwb3NpdGlvbiBvZiB0aGUgZGVzaXJlZCBlbGVtZW50CisgICAgICAgIHJldHVybiBpbmRl
eE9mLmNhbGwoIHRoaXMsCisKKyAgICAgICAgICAgIC8vIElmIGl0IHJlY2VpdmVzIGEgalF1ZXJ5
IG9iamVjdCwgdGhlIGZpcnN0IGVsZW1lbnQgaXMgdXNlZAorICAgICAgICAgICAgZWxlbS5qcXVl
cnkgPyBlbGVtWyAwIF0gOiBlbGVtCisgICAgICAgICk7CisgICAgfSwKKworICAgIGFkZDogZnVu
Y3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkgeworICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3Rh
Y2soCisgICAgICAgICAgICBqUXVlcnkudW5pcXVlU29ydCgKKyAgICAgICAgICAgICAgICBqUXVl
cnkubWVyZ2UoIHRoaXMuZ2V0KCksIGpRdWVyeSggc2VsZWN0b3IsIGNvbnRleHQgKSApCisgICAg
ICAgICAgICApCisgICAgICAgICk7CisgICAgfSwKKworICAgIGFkZEJhY2s6IGZ1bmN0aW9uKCBz
ZWxlY3RvciApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuYWRkKCBzZWxlY3RvciA9PSBudWxsID8K
KyAgICAgICAgICAgIHRoaXMucHJldk9iamVjdCA6IHRoaXMucHJldk9iamVjdC5maWx0ZXIoIHNl
bGVjdG9yICkKKyAgICAgICAgKTsKKyAgICB9Cit9ICk7CisKK2Z1bmN0aW9uIHNpYmxpbmcoIGN1
ciwgZGlyICkgeworICAgIHdoaWxlICggKCBjdXIgPSBjdXJbIGRpciBdICkgJiYgY3VyLm5vZGVU
eXBlICE9PSAxICkge30KKyAgICByZXR1cm4gY3VyOworfQorCitqUXVlcnkuZWFjaCggeworICAg
IHBhcmVudDogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgIHZhciBwYXJlbnQgPSBlbGVtLnBh
cmVudE5vZGU7CisgICAgICAgIHJldHVybiBwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlICE9PSAx
MSA/IHBhcmVudCA6IG51bGw7CisgICAgfSwKKyAgICBwYXJlbnRzOiBmdW5jdGlvbiggZWxlbSAp
IHsKKyAgICAgICAgcmV0dXJuIGRpciggZWxlbSwgInBhcmVudE5vZGUiICk7CisgICAgfSwKKyAg
ICBwYXJlbnRzVW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHsKKyAgICAgICAgcmV0
dXJuIGRpciggZWxlbSwgInBhcmVudE5vZGUiLCB1bnRpbCApOworICAgIH0sCisgICAgbmV4dDog
ZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgIHJldHVybiBzaWJsaW5nKCBlbGVtLCAibmV4dFNp
YmxpbmciICk7CisgICAgfSwKKyAgICBwcmV2OiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAg
cmV0dXJuIHNpYmxpbmcoIGVsZW0sICJwcmV2aW91c1NpYmxpbmciICk7CisgICAgfSwKKyAgICBu
ZXh0QWxsOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgcmV0dXJuIGRpciggZWxlbSwgIm5l
eHRTaWJsaW5nIiApOworICAgIH0sCisgICAgcHJldkFsbDogZnVuY3Rpb24oIGVsZW0gKSB7Cisg
ICAgICAgIHJldHVybiBkaXIoIGVsZW0sICJwcmV2aW91c1NpYmxpbmciICk7CisgICAgfSwKKyAg
ICBuZXh0VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHsKKyAgICAgICAgcmV0dXJu
IGRpciggZWxlbSwgIm5leHRTaWJsaW5nIiwgdW50aWwgKTsKKyAgICB9LAorICAgIHByZXZVbnRp
bDogZnVuY3Rpb24oIGVsZW0sIGksIHVudGlsICkgeworICAgICAgICByZXR1cm4gZGlyKCBlbGVt
LCAicHJldmlvdXNTaWJsaW5nIiwgdW50aWwgKTsKKyAgICB9LAorICAgIHNpYmxpbmdzOiBmdW5j
dGlvbiggZWxlbSApIHsKKyAgICAgICAgcmV0dXJuIHNpYmxpbmdzKCAoIGVsZW0ucGFyZW50Tm9k
ZSB8fCB7fSApLmZpcnN0Q2hpbGQsIGVsZW0gKTsKKyAgICB9LAorICAgIGNoaWxkcmVuOiBmdW5j
dGlvbiggZWxlbSApIHsKKyAgICAgICAgcmV0dXJuIHNpYmxpbmdzKCBlbGVtLmZpcnN0Q2hpbGQg
KTsKKyAgICB9LAorICAgIGNvbnRlbnRzOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgcmV0
dXJuIGVsZW0uY29udGVudERvY3VtZW50IHx8IGpRdWVyeS5tZXJnZSggW10sIGVsZW0uY2hpbGRO
b2RlcyApOworICAgIH0KK30sIGZ1bmN0aW9uKCBuYW1lLCBmbiApIHsKKyAgICBqUXVlcnkuZm5b
IG5hbWUgXSA9IGZ1bmN0aW9uKCB1bnRpbCwgc2VsZWN0b3IgKSB7CisgICAgICAgIHZhciBtYXRj
aGVkID0galF1ZXJ5Lm1hcCggdGhpcywgZm4sIHVudGlsICk7CisKKyAgICAgICAgaWYgKCBuYW1l
LnNsaWNlKCAtNSApICE9PSAiVW50aWwiICkgeworICAgICAgICAgICAgc2VsZWN0b3IgPSB1bnRp
bDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggc2VsZWN0b3IgJiYgdHlwZW9mIHNlbGVjdG9y
ID09PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgIG1hdGNoZWQgPSBqUXVlcnkuZmlsdGVyKCBz
ZWxlY3RvciwgbWF0Y2hlZCApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCB0aGlzLmxlbmd0
aCA+IDEgKSB7CisKKyAgICAgICAgICAgIC8vIFJlbW92ZSBkdXBsaWNhdGVzCisgICAgICAgICAg
ICBpZiAoICFndWFyYW50ZWVkVW5pcXVlWyBuYW1lIF0gKSB7CisgICAgICAgICAgICAgICAgalF1
ZXJ5LnVuaXF1ZVNvcnQoIG1hdGNoZWQgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ly8gUmV2ZXJzZSBvcmRlciBmb3IgcGFyZW50cyogYW5kIHByZXYtZGVyaXZhdGl2ZXMKKyAgICAg
ICAgICAgIGlmICggcnBhcmVudHNwcmV2LnRlc3QoIG5hbWUgKSApIHsKKyAgICAgICAgICAgICAg
ICBtYXRjaGVkLnJldmVyc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiB0aGlzLnB1c2hTdGFjayggbWF0Y2hlZCApOworICAgIH07Cit9ICk7Cit2YXIgcm5v
dGh0bWx3aGl0ZSA9ICggL1teXHgyMFx0XHJcblxmXSsvZyApOworCisKKworLy8gQ29udmVydCBT
dHJpbmctZm9ybWF0dGVkIG9wdGlvbnMgaW50byBPYmplY3QtZm9ybWF0dGVkIG9uZXMKK2Z1bmN0
aW9uIGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSB7CisgICAgdmFyIG9iamVjdCA9IHt9OworICAg
IGpRdWVyeS5lYWNoKCBvcHRpb25zLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW10sIGZ1bmN0
aW9uKCBfLCBmbGFnICkgeworICAgICAgICBvYmplY3RbIGZsYWcgXSA9IHRydWU7CisgICAgfSAp
OworICAgIHJldHVybiBvYmplY3Q7Cit9CisKKy8qCisgKiBDcmVhdGUgYSBjYWxsYmFjayBsaXN0
IHVzaW5nIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoKKyAqCisgKiAgb3B0aW9uczogYW4gb3B0
aW9uYWwgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgb3B0aW9ucyB0aGF0IHdpbGwgY2hhbmdlIGhv
dworICogICAgICAgICAgdGhlIGNhbGxiYWNrIGxpc3QgYmVoYXZlcyBvciBhIG1vcmUgdHJhZGl0
aW9uYWwgb3B0aW9uIG9iamVjdAorICoKKyAqIEJ5IGRlZmF1bHQgYSBjYWxsYmFjayBsaXN0IHdp
bGwgYWN0IGxpa2UgYW4gZXZlbnQgY2FsbGJhY2sgbGlzdCBhbmQgY2FuIGJlCisgKiAiZmlyZWQi
IG11bHRpcGxlIHRpbWVzLgorICoKKyAqIFBvc3NpYmxlIG9wdGlvbnM6CisgKgorICogIG9uY2U6
ICAgICAgICAgICB3aWxsIGVuc3VyZSB0aGUgY2FsbGJhY2sgbGlzdCBjYW4gb25seSBiZSBmaXJl
ZCBvbmNlIChsaWtlIGEgRGVmZXJyZWQpCisgKgorICogIG1lbW9yeTogICAgICAgICB3aWxsIGtl
ZXAgdHJhY2sgb2YgcHJldmlvdXMgdmFsdWVzIGFuZCB3aWxsIGNhbGwgYW55IGNhbGxiYWNrIGFk
ZGVkCisgKiAgICAgICAgICAgICAgICAgIGFmdGVyIHRoZSBsaXN0IGhhcyBiZWVuIGZpcmVkIHJp
Z2h0IGF3YXkgd2l0aCB0aGUgbGF0ZXN0ICJtZW1vcml6ZWQiCisgKiAgICAgICAgICAgICAgICAg
IHZhbHVlcyAobGlrZSBhIERlZmVycmVkKQorICoKKyAqICB1bmlxdWU6ICAgICAgICAgd2lsbCBl
bnN1cmUgYSBjYWxsYmFjayBjYW4gb25seSBiZSBhZGRlZCBvbmNlIChubyBkdXBsaWNhdGUgaW4g
dGhlIGxpc3QpCisgKgorICogIHN0b3BPbkZhbHNlOiAgICBpbnRlcnJ1cHQgY2FsbGluZ3Mgd2hl
biBhIGNhbGxiYWNrIHJldHVybnMgZmFsc2UKKyAqCisgKi8KK2pRdWVyeS5DYWxsYmFja3MgPSBm
dW5jdGlvbiggb3B0aW9ucyApIHsKKworICAgIC8vIENvbnZlcnQgb3B0aW9ucyBmcm9tIFN0cmlu
Zy1mb3JtYXR0ZWQgdG8gT2JqZWN0LWZvcm1hdHRlZCBpZiBuZWVkZWQKKyAgICAvLyAod2UgY2hl
Y2sgaW4gY2FjaGUgZmlyc3QpCisgICAgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb25zID09PSAic3Ry
aW5nIiA/CisgICAgICAgIGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSA6CisgICAgICAgIGpRdWVy
eS5leHRlbmQoIHt9LCBvcHRpb25zICk7CisKKyAgICB2YXIgLy8gRmxhZyB0byBrbm93IGlmIGxp
c3QgaXMgY3VycmVudGx5IGZpcmluZworICAgICAgICBmaXJpbmcsCisKKyAgICAgICAgLy8gTGFz
dCBmaXJlIHZhbHVlIGZvciBub24tZm9yZ2V0dGFibGUgbGlzdHMKKyAgICAgICAgbWVtb3J5LAor
CisgICAgICAgIC8vIEZsYWcgdG8ga25vdyBpZiBsaXN0IHdhcyBhbHJlYWR5IGZpcmVkCisgICAg
ICAgIGZpcmVkLAorCisgICAgICAgIC8vIEZsYWcgdG8gcHJldmVudCBmaXJpbmcKKyAgICAgICAg
bG9ja2VkLAorCisgICAgICAgIC8vIEFjdHVhbCBjYWxsYmFjayBsaXN0CisgICAgICAgIGxpc3Qg
PSBbXSwKKworICAgICAgICAvLyBRdWV1ZSBvZiBleGVjdXRpb24gZGF0YSBmb3IgcmVwZWF0YWJs
ZSBsaXN0cworICAgICAgICBxdWV1ZSA9IFtdLAorCisgICAgICAgIC8vIEluZGV4IG9mIGN1cnJl
bnRseSBmaXJpbmcgY2FsbGJhY2sgKG1vZGlmaWVkIGJ5IGFkZC9yZW1vdmUgYXMgbmVlZGVkKQor
ICAgICAgICBmaXJpbmdJbmRleCA9IC0xLAorCisgICAgICAgIC8vIEZpcmUgY2FsbGJhY2tzCisg
ICAgICAgIGZpcmUgPSBmdW5jdGlvbigpIHsKKworICAgICAgICAgICAgLy8gRW5mb3JjZSBzaW5n
bGUtZmlyaW5nCisgICAgICAgICAgICBsb2NrZWQgPSBvcHRpb25zLm9uY2U7CisKKyAgICAgICAg
ICAgIC8vIEV4ZWN1dGUgY2FsbGJhY2tzIGZvciBhbGwgcGVuZGluZyBleGVjdXRpb25zLAorICAg
ICAgICAgICAgLy8gcmVzcGVjdGluZyBmaXJpbmdJbmRleCBvdmVycmlkZXMgYW5kIHJ1bnRpbWUg
Y2hhbmdlcworICAgICAgICAgICAgZmlyZWQgPSBmaXJpbmcgPSB0cnVlOworICAgICAgICAgICAg
Zm9yICggOyBxdWV1ZS5sZW5ndGg7IGZpcmluZ0luZGV4ID0gLTEgKSB7CisgICAgICAgICAgICAg
ICAgbWVtb3J5ID0gcXVldWUuc2hpZnQoKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoICsrZmly
aW5nSW5kZXggPCBsaXN0Lmxlbmd0aCApIHsKKworICAgICAgICAgICAgICAgICAgICAvLyBSdW4g
Y2FsbGJhY2sgYW5kIGNoZWNrIGZvciBlYXJseSB0ZXJtaW5hdGlvbgorICAgICAgICAgICAgICAg
ICAgICBpZiAoIGxpc3RbIGZpcmluZ0luZGV4IF0uYXBwbHkoIG1lbW9yeVsgMCBdLCBtZW1vcnlb
IDEgXSApID09PSBmYWxzZSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zdG9w
T25GYWxzZSApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSnVtcCB0byBlbmQgYW5k
IGZvcmdldCB0aGUgZGF0YSBzbyAuYWRkIGRvZXNuJ3QgcmUtZmlyZQorICAgICAgICAgICAgICAg
ICAgICAgICAgZmlyaW5nSW5kZXggPSBsaXN0Lmxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1lbW9yeSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBGb3JnZXQgdGhlIGRhdGEgaWYg
d2UncmUgZG9uZSB3aXRoIGl0CisgICAgICAgICAgICBpZiAoICFvcHRpb25zLm1lbW9yeSApIHsK
KyAgICAgICAgICAgICAgICBtZW1vcnkgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZmlyaW5nID0gZmFsc2U7CisKKyAgICAgICAgICAgIC8vIENsZWFuIHVwIGlmIHdlJ3Jl
IGRvbmUgZmlyaW5nIGZvciBnb29kCisgICAgICAgICAgICBpZiAoIGxvY2tlZCApIHsKKworICAg
ICAgICAgICAgICAgIC8vIEtlZXAgYW4gZW1wdHkgbGlzdCBpZiB3ZSBoYXZlIGRhdGEgZm9yIGZ1
dHVyZSBhZGQgY2FsbHMKKyAgICAgICAgICAgICAgICBpZiAoIG1lbW9yeSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgbGlzdCA9IFtdOworCisgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB0
aGlzIG9iamVjdCBpcyBzcGVudAorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIGxpc3QgPSAiIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0sCisKKyAgICAgICAgLy8gQWN0dWFsIENhbGxiYWNrcyBvYmplY3QKKyAgICAgICAg
c2VsZiA9IHsKKworICAgICAgICAgICAgLy8gQWRkIGEgY2FsbGJhY2sgb3IgYSBjb2xsZWN0aW9u
IG9mIGNhbGxiYWNrcyB0byB0aGUgbGlzdAorICAgICAgICAgICAgYWRkOiBmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgICAgICBpZiAoIGxpc3QgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgLy8g
SWYgd2UgaGF2ZSBtZW1vcnkgZnJvbSBhIHBhc3QgcnVuLCB3ZSBzaG91bGQgZmlyZSBhZnRlciBh
ZGRpbmcKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBtZW1vcnkgJiYgIWZpcmluZyApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZpcmluZ0luZGV4ID0gbGlzdC5sZW5ndGggLSAxOworICAg
ICAgICAgICAgICAgICAgICAgICAgcXVldWUucHVzaCggbWVtb3J5ICk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAoIGZ1bmN0aW9uIGFkZCggYXJncyApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5lYWNoKCBhcmdzLCBmdW5jdGlvbiggXywg
YXJnICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rp
b24oIGFyZyApICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFvcHRp
b25zLnVuaXF1ZSB8fCAhc2VsZi5oYXMoIGFyZyApICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbGlzdC5wdXNoKCBhcmcgKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGFyZyAm
JiBhcmcubGVuZ3RoICYmIGpRdWVyeS50eXBlKCBhcmcgKSAhPT0gInN0cmluZyIgKSB7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5zcGVjdCByZWN1cnNpdmVseQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQoIGFyZyApOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gKTsKKyAgICAgICAgICAg
ICAgICAgICAgfSApKCBhcmd1bWVudHMgKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIG1l
bW9yeSAmJiAhZmlyaW5nICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZmlyZSgpOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzOworICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgLy8gUmVtb3ZlIGEgY2Fs
bGJhY2sgZnJvbSB0aGUgbGlzdAorICAgICAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgICAgICBqUXVlcnkuZWFjaCggYXJndW1lbnRzLCBmdW5jdGlvbiggXywgYXJnICkg
eworICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXg7CisgICAgICAgICAgICAgICAgICAgIHdo
aWxlICggKCBpbmRleCA9IGpRdWVyeS5pbkFycmF5KCBhcmcsIGxpc3QsIGluZGV4ICkgKSA+IC0x
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgbGlzdC5zcGxpY2UoIGluZGV4LCAxICk7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBmaXJpbmcgaW5kZXhlcworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBpbmRleCA8PSBmaXJpbmdJbmRleCApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmaXJpbmdJbmRleC0tOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSApOworICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgLy8g
Q2hlY2sgaWYgYSBnaXZlbiBjYWxsYmFjayBpcyBpbiB0aGUgbGlzdC4KKyAgICAgICAgICAgIC8v
IElmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCByZXR1cm4gd2hldGhlciBvciBub3QgbGlzdCBoYXMg
Y2FsbGJhY2tzIGF0dGFjaGVkLgorICAgICAgICAgICAgaGFzOiBmdW5jdGlvbiggZm4gKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZuID8KKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Lmlu
QXJyYXkoIGZuLCBsaXN0ICkgPiAtMSA6CisgICAgICAgICAgICAgICAgICAgIGxpc3QubGVuZ3Ro
ID4gMDsKKyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIC8vIFJlbW92ZSBhbGwgY2FsbGJh
Y2tzIGZyb20gdGhlIGxpc3QKKyAgICAgICAgICAgIGVtcHR5OiBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIGxpc3QgKSB7CisgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBbXTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAg
ICAgICB9LAorCisgICAgICAgICAgICAvLyBEaXNhYmxlIC5maXJlIGFuZCAuYWRkCisgICAgICAg
ICAgICAvLyBBYm9ydCBhbnkgY3VycmVudC9wZW5kaW5nIGV4ZWN1dGlvbnMKKyAgICAgICAgICAg
IC8vIENsZWFyIGFsbCBjYWxsYmFja3MgYW5kIHZhbHVlcworICAgICAgICAgICAgZGlzYWJsZTog
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgbG9ja2VkID0gcXVldWUgPSBbXTsKKyAgICAg
ICAgICAgICAgICBsaXN0ID0gbWVtb3J5ID0gIiI7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXM7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgZGlzYWJsZWQ6IGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgICAgIHJldHVybiAhbGlzdDsKKyAgICAgICAgICAgIH0sCisKKyAgICAgICAg
ICAgIC8vIERpc2FibGUgLmZpcmUKKyAgICAgICAgICAgIC8vIEFsc28gZGlzYWJsZSAuYWRkIHVu
bGVzcyB3ZSBoYXZlIG1lbW9yeSAoc2luY2UgaXQgd291bGQgaGF2ZSBubyBlZmZlY3QpCisgICAg
ICAgICAgICAvLyBBYm9ydCBhbnkgcGVuZGluZyBleGVjdXRpb25zCisgICAgICAgICAgICBsb2Nr
OiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBsb2NrZWQgPSBxdWV1ZSA9IFtdOworICAg
ICAgICAgICAgICAgIGlmICggIW1lbW9yeSAmJiAhZmlyaW5nICkgeworICAgICAgICAgICAgICAg
ICAgICBsaXN0ID0gbWVtb3J5ID0gIiI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGxvY2tlZDogZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEhbG9ja2VkOworICAgICAgICAgICAg
fSwKKworICAgICAgICAgICAgLy8gQ2FsbCBhbGwgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGNv
bnRleHQgYW5kIGFyZ3VtZW50cworICAgICAgICAgICAgZmlyZVdpdGg6IGZ1bmN0aW9uKCBjb250
ZXh0LCBhcmdzICkgeworICAgICAgICAgICAgICAgIGlmICggIWxvY2tlZCApIHsKKyAgICAgICAg
ICAgICAgICAgICAgYXJncyA9IGFyZ3MgfHwgW107CisgICAgICAgICAgICAgICAgICAgIGFyZ3Mg
PSBbIGNvbnRleHQsIGFyZ3Muc2xpY2UgPyBhcmdzLnNsaWNlKCkgOiBhcmdzIF07CisgICAgICAg
ICAgICAgICAgICAgIHF1ZXVlLnB1c2goIGFyZ3MgKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCAhZmlyaW5nICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZmlyZSgpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzOworICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgLy8gQ2FsbCBhbGwgdGhlIGNhbGxi
YWNrcyB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMKKyAgICAgICAgICAgIGZpcmU6IGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgICAgIHNlbGYuZmlyZVdpdGgoIHRoaXMsIGFyZ3VtZW50cyApOwor
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgfSwKKworICAgICAgICAg
ICAgLy8gVG8ga25vdyBpZiB0aGUgY2FsbGJhY2tzIGhhdmUgYWxyZWFkeSBiZWVuIGNhbGxlZCBh
dCBsZWFzdCBvbmNlCisgICAgICAgICAgICBmaXJlZDogZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuICEhZmlyZWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICBy
ZXR1cm4gc2VsZjsKK307CisKKworZnVuY3Rpb24gSWRlbnRpdHkoIHYgKSB7CisgICAgcmV0dXJu
IHY7Cit9CitmdW5jdGlvbiBUaHJvd2VyKCBleCApIHsKKyAgICB0aHJvdyBleDsKK30KKworZnVu
Y3Rpb24gYWRvcHRWYWx1ZSggdmFsdWUsIHJlc29sdmUsIHJlamVjdCApIHsKKyAgICB2YXIgbWV0
aG9kOworCisgICAgdHJ5IHsKKworICAgICAgICAvLyBDaGVjayBmb3IgcHJvbWlzZSBhc3BlY3Qg
Zmlyc3QgdG8gcHJpdmlsZWdlIHN5bmNocm9ub3VzIGJlaGF2aW9yCisgICAgICAgIGlmICggdmFs
dWUgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oICggbWV0aG9kID0gdmFsdWUucHJvbWlzZSApICkgKSB7
CisgICAgICAgICAgICBtZXRob2QuY2FsbCggdmFsdWUgKS5kb25lKCByZXNvbHZlICkuZmFpbCgg
cmVqZWN0ICk7CisKKyAgICAgICAgLy8gT3RoZXIgdGhlbmFibGVzCisgICAgICAgIH0gZWxzZSBp
ZiAoIHZhbHVlICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCAoIG1ldGhvZCA9IHZhbHVlLnRoZW4gKSAp
ICkgeworICAgICAgICAgICAgbWV0aG9kLmNhbGwoIHZhbHVlLCByZXNvbHZlLCByZWplY3QgKTsK
KworICAgICAgICAvLyBPdGhlciBub24tdGhlbmFibGVzCisgICAgICAgIH0gZWxzZSB7CisKKyAg
ICAgICAgICAgIC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIG9ubHkKKyAgICAgICAgICAgIC8vIFN0
cmljdCBtb2RlIGZ1bmN0aW9ucyBpbnZva2VkIHdpdGhvdXQgLmNhbGwvLmFwcGx5IGdldCBnbG9i
YWwtb2JqZWN0IGNvbnRleHQKKyAgICAgICAgICAgIHJlc29sdmUuY2FsbCggdW5kZWZpbmVkLCB2
YWx1ZSApOworICAgICAgICB9CisKKyAgICAvLyBGb3IgUHJvbWlzZXMvQSssIGNvbnZlcnQgZXhj
ZXB0aW9ucyBpbnRvIHJlamVjdGlvbnMKKyAgICAvLyBTaW5jZSBqUXVlcnkud2hlbiBkb2Vzbid0
IHVud3JhcCB0aGVuYWJsZXMsIHdlIGNhbiBza2lwIHRoZSBleHRyYSBjaGVja3MgYXBwZWFyaW5n
IGluCisgICAgLy8gRGVmZXJyZWQjdGhlbiB0byBjb25kaXRpb25hbGx5IHN1cHByZXNzIHJlamVj
dGlvbi4KKyAgICB9IGNhdGNoICggdmFsdWUgKSB7CisKKyAgICAgICAgLy8gU3VwcG9ydDogQW5k
cm9pZCA0LjAgb25seQorICAgICAgICAvLyBTdHJpY3QgbW9kZSBmdW5jdGlvbnMgaW52b2tlZCB3
aXRob3V0IC5jYWxsLy5hcHBseSBnZXQgZ2xvYmFsLW9iamVjdCBjb250ZXh0CisgICAgICAgIHJl
amVjdC5jYWxsKCB1bmRlZmluZWQsIHZhbHVlICk7CisgICAgfQorfQorCitqUXVlcnkuZXh0ZW5k
KCB7CisKKyAgICBEZWZlcnJlZDogZnVuY3Rpb24oIGZ1bmMgKSB7CisgICAgICAgIHZhciB0dXBs
ZXMgPSBbCisKKyAgICAgICAgICAgICAgICAvLyBhY3Rpb24sIGFkZCBsaXN0ZW5lciwgY2FsbGJh
Y2tzLAorICAgICAgICAgICAgICAgIC8vIC4uLiAudGhlbiBoYW5kbGVycywgYXJndW1lbnQgaW5k
ZXgsIFtmaW5hbCBzdGF0ZV0KKyAgICAgICAgICAgICAgICBbICJub3RpZnkiLCAicHJvZ3Jlc3Mi
LCBqUXVlcnkuQ2FsbGJhY2tzKCAibWVtb3J5IiApLAorICAgICAgICAgICAgICAgICAgICBqUXVl
cnkuQ2FsbGJhY2tzKCAibWVtb3J5IiApLCAyIF0sCisgICAgICAgICAgICAgICAgWyAicmVzb2x2
ZSIsICJkb25lIiwgalF1ZXJ5LkNhbGxiYWNrcyggIm9uY2UgbWVtb3J5IiApLAorICAgICAgICAg
ICAgICAgICAgICBqUXVlcnkuQ2FsbGJhY2tzKCAib25jZSBtZW1vcnkiICksIDAsICJyZXNvbHZl
ZCIgXSwKKyAgICAgICAgICAgICAgICBbICJyZWplY3QiLCAiZmFpbCIsIGpRdWVyeS5DYWxsYmFj
a3MoICJvbmNlIG1lbW9yeSIgKSwKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LkNhbGxiYWNr
cyggIm9uY2UgbWVtb3J5IiApLCAxLCAicmVqZWN0ZWQiIF0KKyAgICAgICAgICAgIF0sCisgICAg
ICAgICAgICBzdGF0ZSA9ICJwZW5kaW5nIiwKKyAgICAgICAgICAgIHByb21pc2UgPSB7CisgICAg
ICAgICAgICAgICAgc3RhdGU6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gc3RhdGU7CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBhbHdheXM6IGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5kb25lKCBhcmd1bWVudHMg
KS5mYWlsKCBhcmd1bWVudHMgKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAiY2F0Y2giOiBmdW5jdGlvbiggZm4g
KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oIG51bGwsIGZuICk7
CisgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgIC8vIEtlZXAgcGlwZSBmb3Ig
YmFjay1jb21wYXQKKyAgICAgICAgICAgICAgICBwaXBlOiBmdW5jdGlvbiggLyogZm5Eb25lLCBm
bkZhaWwsIGZuUHJvZ3Jlc3MgKi8gKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBmbnMgPSBh
cmd1bWVudHM7CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5EZWZlcnJlZCgg
ZnVuY3Rpb24oIG5ld0RlZmVyICkgeworICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmVh
Y2goIHR1cGxlcywgZnVuY3Rpb24oIGksIHR1cGxlICkgeworCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gTWFwIHR1cGxlcyAocHJvZ3Jlc3MsIGRvbmUsIGZhaWwpIHRvIGFyZ3VtZW50
cyAoZG9uZSwgZmFpbCwgcHJvZ3Jlc3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IGZuID0galF1ZXJ5LmlzRnVuY3Rpb24oIGZuc1sgdHVwbGVbIDQgXSBdICkgJiYgZm5zWyB0dXBs
ZVsgNCBdIF07CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkZWZlcnJlZC5wcm9n
cmVzcyhmdW5jdGlvbigpIHsgYmluZCB0byBuZXdEZWZlciBvciBuZXdEZWZlci5ub3RpZnkgfSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkZWZlcnJlZC5kb25lKGZ1bmN0aW9uKCkg
eyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLnJlc29sdmUgfSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBkZWZlcnJlZC5mYWlsKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0Rl
ZmVyIG9yIG5ld0RlZmVyLnJlamVjdCB9KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZmVycmVkWyB0dXBsZVsgMSBdIF0oIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgcmV0dXJuZWQgPSBmbiAmJiBmbi5hcHBseSggdGhpcywgYXJndW1lbnRz
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmV0dXJuZWQgJiYgalF1
ZXJ5LmlzRnVuY3Rpb24oIHJldHVybmVkLnByb21pc2UgKSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybmVkLnByb21pc2UoKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC5wcm9ncmVzcyggbmV3RGVmZXIubm90aWZ5ICkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZG9uZSggbmV3RGVmZXIucmVzb2x2
ZSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZhaWwoIG5ld0Rl
ZmVyLnJlamVjdCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RGVmZXJbIHR1cGxlWyAwIF0g
KyAiV2l0aCIgXSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuID8gWyByZXR1cm5l
ZCBdIDogYXJndW1lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSApOworICAgICAgICAgICAgICAgICAgICAgICAgfSApOworICAgICAgICAgICAgICAg
ICAgICAgICAgZm5zID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgfSApLnByb21pc2UoKTsK
KyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHRoZW46IGZ1bmN0aW9uKCBvbkZ1
bGZpbGxlZCwgb25SZWplY3RlZCwgb25Qcm9ncmVzcyApIHsKKyAgICAgICAgICAgICAgICAgICAg
dmFyIG1heERlcHRoID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZSgg
ZGVwdGgsIGRlZmVycmVkLCBoYW5kbGVyLCBzcGVjaWFsICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciB0aGF0ID0gdGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFy
Z3VtZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlnaHRUaHJvdyA9IGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJldHVy
bmVkLCB0aGVuOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdXBw
b3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuMworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNTkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSBkb3VibGUtcmVzb2x1
dGlvbiBhdHRlbXB0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBk
ZXB0aCA8IG1heERlcHRoICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWQgPSBoYW5kbGVyLmFwcGx5
KCB0aGF0LCBhcmdzICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjEKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTQ4Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJldHVybmVkID09PSBkZWZl
cnJlZC5wcm9taXNlKCkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGhyb3cgbmV3IFR5cGVFcnJvciggIlRoZW5hYmxlIHNlbGYtcmVzb2x1dGlvbiIgKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbnMgMi4zLjMu
MSwgMy41CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL3By
b21pc2VzYXBsdXMuY29tLyNwb2ludC01NAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNzUKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJldHJpZXZlIGB0aGVuYCBvbmx5IG9uY2UKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4gPSByZXR1cm5lZCAmJgorCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogUHJvbWlz
ZXMvQSsgc2VjdGlvbiAyLjMuNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTY0CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT25seSBjaGVjayBvYmplY3RzIGFuZCBmdW5j
dGlvbnMgZm9yIHRoZW5hYmlsaXR5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKCB0eXBlb2YgcmV0dXJuZWQgPT09ICJvYmplY3QiIHx8CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiByZXR1cm5lZCA9PT0gImZ1bmN0aW9u
IiApICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWQu
dGhlbjsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIGEg
cmV0dXJuZWQgdGhlbmFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggalF1ZXJ5LmlzRnVuY3Rpb24oIHRoZW4gKSApIHsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFNwZWNpYWwgcHJvY2Vzc29ycyAobm90aWZ5KSBqdXN0IHdh
aXQgZm9yIHJlc29sdXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIHNwZWNpYWwgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRoZW4uY2FsbCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSwgc3BlY2lh
bCApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVz
b2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBUaHJvd2VyLCBzcGVjaWFsICkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIE5vcm1hbCBwcm9jZXNzb3JzIChyZXNvbHZlKSBhbHNv
IGhvb2sgaW50byBwcm9ncmVzcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gLi4uYW5kIGRpc3JlZ2FyZCBvbGRlciByZXNvbHV0aW9uIHZhbHVlcworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhEZXB0aCsrOworCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4uY2FsbCgKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmVkLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSggbWF4RGVw
dGgsIGRlZmVycmVkLCBJZGVudGl0eSwgc3BlY2lhbCApLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBU
aHJvd2VyLCBzcGVjaWFsICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm5v
dGlmeVdpdGggKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIGFsbCBvdGhlciByZXR1cm5lZCB2
YWx1ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IHN1YnN0aXR1dGUg
aGFuZGxlcnMgcGFzcyBvbiBjb250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gYW5kIG11bHRpcGxlIHZhbHVlcyAobm9uLXNwZWMgYmVoYXZpb3IpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBoYW5kbGVyICE9PSBJZGVu
dGl0eSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhh
dCA9IHVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXJncyA9IFsgcmV0dXJuZWQgXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQ
cm9jZXNzIHRoZSB2YWx1ZShzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIERlZmF1bHQgcHJvY2VzcyBpcyByZXNvbHZlCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKCBzcGVjaWFsIHx8IGRlZmVycmVkLnJlc29sdmVXaXRoICkoIHRo
YXQsIGFyZ3MgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBPbmx5IG5vcm1hbCBwcm9jZXNzb3JzIChyZXNvbHZlKSBjYXRjaCBhbmQgcmVq
ZWN0IGV4Y2VwdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2VzcyA9
IHNwZWNpYWwgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlnaHRUaHJv
dyA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWdodFRocm93KCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoIGUgKSB7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuRGVmZXJyZWQu
ZXhjZXB0aW9uSG9vayApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rKCBlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3Muc3RhY2tUcmFj
ZSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogUHJv
bWlzZXMvQSsgc2VjdGlvbiAyLjMuMy4zLjQuMQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC02MQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZ25vcmUgcG9z
dC1yZXNvbHV0aW9uIGV4Y2VwdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBkZXB0aCArIDEgPj0gbWF4RGVwdGggKSB7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgc3Vic3RpdHV0ZSBo
YW5kbGVycyBwYXNzIG9uIGNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGFuZCBtdWx0aXBsZSB2YWx1ZXMgKG5vbi1zcGVjIGJlaGF2aW9y
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBo
YW5kbGVyICE9PSBUaHJvd2VyICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRoYXQgPSB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IFsgZSBdOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZWplY3RXaXRoKCB0
aGF0LCBhcmdzICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMy4zLjEKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01Nwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlLXJlc29sdmUgcHJvbWlzZXMgaW1tZWRp
YXRlbHkgdG8gZG9kZ2UgZmFsc2UgcmVqZWN0aW9uIGZyb20KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBzdWJzZXF1ZW50IGVycm9ycworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggZGVwdGggKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3Mo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIENhbGwgYW4gb3B0aW9uYWwgaG9vayB0byByZWNvcmQgdGhl
IHN0YWNrLCBpbiBjYXNlIG9mIGV4Y2VwdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBzaW5jZSBpdCdzIG90aGVyd2lzZSBsb3N0IHdoZW4gZXhlY3V0aW9uIGdvZXMgYXN5
bmMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuRGVmZXJyZWQu
Z2V0U3RhY2tIb29rICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJv
Y2Vzcy5zdGFja1RyYWNlID0galF1ZXJ5LkRlZmVycmVkLmdldFN0YWNrSG9vaygpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdpbmRvdy5zZXRUaW1lb3V0KCBwcm9jZXNzICk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuRGVmZXJyZWQoIGZ1bmN0aW9u
KCBuZXdEZWZlciApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJvZ3Jlc3NfaGFu
ZGxlcnMuYWRkKCAuLi4gKQorICAgICAgICAgICAgICAgICAgICAgICAgdHVwbGVzWyAwIF1bIDMg
XS5hZGQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bmV3RGVmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5pc0Z1bmN0
aW9uKCBvblByb2dyZXNzICkgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b25Qcm9ncmVzcyA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZGVudGl0
eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RGVmZXIubm90aWZ5V2l0aAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgICAgICk7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5hZGQoIC4u
LiApCisgICAgICAgICAgICAgICAgICAgICAgICB0dXBsZXNbIDEgXVsgMyBdLmFkZCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdEZWZlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmlzRnVuY3Rpb24oIG9uRnVsZmls
bGVkICkgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25GdWxmaWxsZWQg
OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWRlbnRpdHkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgICAgICApOworCisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyByZWplY3RlZF9oYW5kbGVycy5hZGQoIC4uLiApCisgICAg
ICAgICAgICAgICAgICAgICAgICB0dXBsZXNbIDIgXVsgMyBdLmFkZCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXNvbHZlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdEZWZlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmlzRnVuY3Rpb24oIG9uUmVqZWN0ZWQgKSA/Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblJlamVjdGVkIDoKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRocm93ZXIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICApCisgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAg
ICB9ICkucHJvbWlzZSgpOworICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAv
LyBHZXQgYSBwcm9taXNlIGZvciB0aGlzIGRlZmVycmVkCisgICAgICAgICAgICAgICAgLy8gSWYg
b2JqIGlzIHByb3ZpZGVkLCB0aGUgcHJvbWlzZSBhc3BlY3QgaXMgYWRkZWQgdG8gdGhlIG9iamVj
dAorICAgICAgICAgICAgICAgIHByb21pc2U6IGZ1bmN0aW9uKCBvYmogKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBvYmogIT0gbnVsbCA/IGpRdWVyeS5leHRlbmQoIG9iaiwgcHJvbWlz
ZSApIDogcHJvbWlzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAg
ICAgICAgZGVmZXJyZWQgPSB7fTsKKworICAgICAgICAvLyBBZGQgbGlzdC1zcGVjaWZpYyBtZXRo
b2RzCisgICAgICAgIGpRdWVyeS5lYWNoKCB0dXBsZXMsIGZ1bmN0aW9uKCBpLCB0dXBsZSApIHsK
KyAgICAgICAgICAgIHZhciBsaXN0ID0gdHVwbGVbIDIgXSwKKyAgICAgICAgICAgICAgICBzdGF0
ZVN0cmluZyA9IHR1cGxlWyA1IF07CisKKyAgICAgICAgICAgIC8vIHByb21pc2UucHJvZ3Jlc3Mg
PSBsaXN0LmFkZAorICAgICAgICAgICAgLy8gcHJvbWlzZS5kb25lID0gbGlzdC5hZGQKKyAgICAg
ICAgICAgIC8vIHByb21pc2UuZmFpbCA9IGxpc3QuYWRkCisgICAgICAgICAgICBwcm9taXNlWyB0
dXBsZVsgMSBdIF0gPSBsaXN0LmFkZDsKKworICAgICAgICAgICAgLy8gSGFuZGxlIHN0YXRlCisg
ICAgICAgICAgICBpZiAoIHN0YXRlU3RyaW5nICkgeworICAgICAgICAgICAgICAgIGxpc3QuYWRk
KAorICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gc3RhdGUgPSAicmVzb2x2ZWQiIChpLmUuLCBmdWxmaWxsZWQpCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBzdGF0ZSA9ICJyZWplY3RlZCIKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRlID0gc3RhdGVTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgIH0sCisKKyAgICAg
ICAgICAgICAgICAgICAgLy8gcmVqZWN0ZWRfY2FsbGJhY2tzLmRpc2FibGUKKyAgICAgICAgICAg
ICAgICAgICAgLy8gZnVsZmlsbGVkX2NhbGxiYWNrcy5kaXNhYmxlCisgICAgICAgICAgICAgICAg
ICAgIHR1cGxlc1sgMyAtIGkgXVsgMiBdLmRpc2FibGUsCisKKyAgICAgICAgICAgICAgICAgICAg
Ly8gcHJvZ3Jlc3NfY2FsbGJhY2tzLmxvY2sKKyAgICAgICAgICAgICAgICAgICAgdHVwbGVzWyAw
IF1bIDIgXS5sb2NrCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgLy8gcHJvZ3Jlc3NfaGFuZGxlcnMuZmlyZQorICAgICAgICAgICAgLy8gZnVsZmlsbGVk
X2hhbmRsZXJzLmZpcmUKKyAgICAgICAgICAgIC8vIHJlamVjdGVkX2hhbmRsZXJzLmZpcmUKKyAg
ICAgICAgICAgIGxpc3QuYWRkKCB0dXBsZVsgMyBdLmZpcmUgKTsKKworICAgICAgICAgICAgLy8g
ZGVmZXJyZWQubm90aWZ5ID0gZnVuY3Rpb24oKSB7IGRlZmVycmVkLm5vdGlmeVdpdGgoLi4uKSB9
CisgICAgICAgICAgICAvLyBkZWZlcnJlZC5yZXNvbHZlID0gZnVuY3Rpb24oKSB7IGRlZmVycmVk
LnJlc29sdmVXaXRoKC4uLikgfQorICAgICAgICAgICAgLy8gZGVmZXJyZWQucmVqZWN0ID0gZnVu
Y3Rpb24oKSB7IGRlZmVycmVkLnJlamVjdFdpdGgoLi4uKSB9CisgICAgICAgICAgICBkZWZlcnJl
ZFsgdHVwbGVbIDAgXSBdID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZGVmZXJyZWRb
IHR1cGxlWyAwIF0gKyAiV2l0aCIgXSggdGhpcyA9PT0gZGVmZXJyZWQgPyB1bmRlZmluZWQgOiB0
aGlzLCBhcmd1bWVudHMgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAg
ICAgIH07CisKKyAgICAgICAgICAgIC8vIGRlZmVycmVkLm5vdGlmeVdpdGggPSBsaXN0LmZpcmVX
aXRoCisgICAgICAgICAgICAvLyBkZWZlcnJlZC5yZXNvbHZlV2l0aCA9IGxpc3QuZmlyZVdpdGgK
KyAgICAgICAgICAgIC8vIGRlZmVycmVkLnJlamVjdFdpdGggPSBsaXN0LmZpcmVXaXRoCisgICAg
ICAgICAgICBkZWZlcnJlZFsgdHVwbGVbIDAgXSArICJXaXRoIiBdID0gbGlzdC5maXJlV2l0aDsK
KyAgICAgICAgfSApOworCisgICAgICAgIC8vIE1ha2UgdGhlIGRlZmVycmVkIGEgcHJvbWlzZQor
ICAgICAgICBwcm9taXNlLnByb21pc2UoIGRlZmVycmVkICk7CisKKyAgICAgICAgLy8gQ2FsbCBn
aXZlbiBmdW5jIGlmIGFueQorICAgICAgICBpZiAoIGZ1bmMgKSB7CisgICAgICAgICAgICBmdW5j
LmNhbGwoIGRlZmVycmVkLCBkZWZlcnJlZCApOworICAgICAgICB9CisKKyAgICAgICAgLy8gQWxs
IGRvbmUhCisgICAgICAgIHJldHVybiBkZWZlcnJlZDsKKyAgICB9LAorCisgICAgLy8gRGVmZXJy
ZWQgaGVscGVyCisgICAgd2hlbjogZnVuY3Rpb24oIHNpbmdsZVZhbHVlICkgeworICAgICAgICB2
YXIKKworICAgICAgICAgICAgLy8gY291bnQgb2YgdW5jb21wbGV0ZWQgc3Vib3JkaW5hdGVzCisg
ICAgICAgICAgICByZW1haW5pbmcgPSBhcmd1bWVudHMubGVuZ3RoLAorCisgICAgICAgICAgICAv
LyBjb3VudCBvZiB1bnByb2Nlc3NlZCBhcmd1bWVudHMKKyAgICAgICAgICAgIGkgPSByZW1haW5p
bmcsCisKKyAgICAgICAgICAgIC8vIHN1Ym9yZGluYXRlIGZ1bGZpbGxtZW50IGRhdGEKKyAgICAg
ICAgICAgIHJlc29sdmVDb250ZXh0cyA9IEFycmF5KCBpICksCisgICAgICAgICAgICByZXNvbHZl
VmFsdWVzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzICksCisKKyAgICAgICAgICAgIC8vIHRoZSBt
YXN0ZXIgRGVmZXJyZWQKKyAgICAgICAgICAgIG1hc3RlciA9IGpRdWVyeS5EZWZlcnJlZCgpLAor
CisgICAgICAgICAgICAvLyBzdWJvcmRpbmF0ZSBjYWxsYmFjayBmYWN0b3J5CisgICAgICAgICAg
ICB1cGRhdGVGdW5jID0gZnVuY3Rpb24oIGkgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZ1
bmN0aW9uKCB2YWx1ZSApIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNvbnRleHRzWyBp
IF0gPSB0aGlzOworICAgICAgICAgICAgICAgICAgICByZXNvbHZlVmFsdWVzWyBpIF0gPSBhcmd1
bWVudHMubGVuZ3RoID4gMSA/IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApIDogdmFsdWU7CisgICAg
ICAgICAgICAgICAgICAgIGlmICggISggLS1yZW1haW5pbmcgKSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1hc3Rlci5yZXNvbHZlV2l0aCggcmVzb2x2ZUNvbnRleHRzLCByZXNvbHZlVmFs
dWVzICk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9OworICAgICAg
ICAgICAgfTsKKworICAgICAgICAvLyBTaW5nbGUtIGFuZCBlbXB0eSBhcmd1bWVudHMgYXJlIGFk
b3B0ZWQgbGlrZSBQcm9taXNlLnJlc29sdmUKKyAgICAgICAgaWYgKCByZW1haW5pbmcgPD0gMSAp
IHsKKyAgICAgICAgICAgIGFkb3B0VmFsdWUoIHNpbmdsZVZhbHVlLCBtYXN0ZXIuZG9uZSggdXBk
YXRlRnVuYyggaSApICkucmVzb2x2ZSwgbWFzdGVyLnJlamVjdCApOworCisgICAgICAgICAgICAv
LyBVc2UgLnRoZW4oKSB0byB1bndyYXAgc2Vjb25kYXJ5IHRoZW5hYmxlcyAoY2YuIGdoLTMwMDAp
CisgICAgICAgICAgICBpZiAoIG1hc3Rlci5zdGF0ZSgpID09PSAicGVuZGluZyIgfHwKKyAgICAg
ICAgICAgICAgICBqUXVlcnkuaXNGdW5jdGlvbiggcmVzb2x2ZVZhbHVlc1sgaSBdICYmIHJlc29s
dmVWYWx1ZXNbIGkgXS50aGVuICkgKSB7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFzdGVy
LnRoZW4oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIE11bHRpcGxl
IGFyZ3VtZW50cyBhcmUgYWdncmVnYXRlZCBsaWtlIFByb21pc2UuYWxsIGFycmF5IGVsZW1lbnRz
CisgICAgICAgIHdoaWxlICggaS0tICkgeworICAgICAgICAgICAgYWRvcHRWYWx1ZSggcmVzb2x2
ZVZhbHVlc1sgaSBdLCB1cGRhdGVGdW5jKCBpICksIG1hc3Rlci5yZWplY3QgKTsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiBtYXN0ZXIucHJvbWlzZSgpOworICAgIH0KK30gKTsKKworCisv
LyBUaGVzZSB1c3VhbGx5IGluZGljYXRlIGEgcHJvZ3JhbW1lciBtaXN0YWtlIGR1cmluZyBkZXZl
bG9wbWVudCwKKy8vIHdhcm4gYWJvdXQgdGhlbSBBU0FQIHJhdGhlciB0aGFuIHN3YWxsb3dpbmcg
dGhlbSBieSBkZWZhdWx0LgordmFyIHJlcnJvck5hbWVzID0gL14oRXZhbHxJbnRlcm5hbHxSYW5n
ZXxSZWZlcmVuY2V8U3ludGF4fFR5cGV8VVJJKUVycm9yJC87CisKK2pRdWVyeS5EZWZlcnJlZC5l
eGNlcHRpb25Ib29rID0gZnVuY3Rpb24oIGVycm9yLCBzdGFjayApIHsKKworICAgIC8vIFN1cHBv
cnQ6IElFIDggLSA5IG9ubHkKKyAgICAvLyBDb25zb2xlIGV4aXN0cyB3aGVuIGRldiB0b29scyBh
cmUgb3Blbiwgd2hpY2ggY2FuIGhhcHBlbiBhdCBhbnkgdGltZQorICAgIGlmICggd2luZG93LmNv
bnNvbGUgJiYgd2luZG93LmNvbnNvbGUud2FybiAmJiBlcnJvciAmJiByZXJyb3JOYW1lcy50ZXN0
KCBlcnJvci5uYW1lICkgKSB7CisgICAgICAgIHdpbmRvdy5jb25zb2xlLndhcm4oICJqUXVlcnku
RGVmZXJyZWQgZXhjZXB0aW9uOiAiICsgZXJyb3IubWVzc2FnZSwgZXJyb3Iuc3RhY2ssIHN0YWNr
ICk7CisgICAgfQorfTsKKworCisKKworalF1ZXJ5LnJlYWR5RXhjZXB0aW9uID0gZnVuY3Rpb24o
IGVycm9yICkgeworICAgIHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHsKKyAgICAgICAg
dGhyb3cgZXJyb3I7CisgICAgfSApOworfTsKKworCisKKworLy8gVGhlIGRlZmVycmVkIHVzZWQg
b24gRE9NIHJlYWR5Cit2YXIgcmVhZHlMaXN0ID0galF1ZXJ5LkRlZmVycmVkKCk7CisKK2pRdWVy
eS5mbi5yZWFkeSA9IGZ1bmN0aW9uKCBmbiApIHsKKworICAgIHJlYWR5TGlzdAorICAgICAgICAu
dGhlbiggZm4gKQorCisgICAgICAgIC8vIFdyYXAgalF1ZXJ5LnJlYWR5RXhjZXB0aW9uIGluIGEg
ZnVuY3Rpb24gc28gdGhhdCB0aGUgbG9va3VwCisgICAgICAgIC8vIGhhcHBlbnMgYXQgdGhlIHRp
bWUgb2YgZXJyb3IgaGFuZGxpbmcgaW5zdGVhZCBvZiBjYWxsYmFjaworICAgICAgICAvLyByZWdp
c3RyYXRpb24uCisgICAgICAgIC5jYXRjaCggZnVuY3Rpb24oIGVycm9yICkgeworICAgICAgICAg
ICAgalF1ZXJ5LnJlYWR5RXhjZXB0aW9uKCBlcnJvciApOworICAgICAgICB9ICk7CisKKyAgICBy
ZXR1cm4gdGhpczsKK307CisKK2pRdWVyeS5leHRlbmQoIHsKKworICAgIC8vIElzIHRoZSBET00g
cmVhZHkgdG8gYmUgdXNlZD8gU2V0IHRvIHRydWUgb25jZSBpdCBvY2N1cnMuCisgICAgaXNSZWFk
eTogZmFsc2UsCisKKyAgICAvLyBBIGNvdW50ZXIgdG8gdHJhY2sgaG93IG1hbnkgaXRlbXMgdG8g
d2FpdCBmb3IgYmVmb3JlCisgICAgLy8gdGhlIHJlYWR5IGV2ZW50IGZpcmVzLiBTZWUgIzY3ODEK
KyAgICByZWFkeVdhaXQ6IDEsCisKKyAgICAvLyBIb2xkIChvciByZWxlYXNlKSB0aGUgcmVhZHkg
ZXZlbnQKKyAgICBob2xkUmVhZHk6IGZ1bmN0aW9uKCBob2xkICkgeworICAgICAgICBpZiAoIGhv
bGQgKSB7CisgICAgICAgICAgICBqUXVlcnkucmVhZHlXYWl0Kys7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBqUXVlcnkucmVhZHkoIHRydWUgKTsKKyAgICAgICAgfQorICAgIH0sCisK
KyAgICAvLyBIYW5kbGUgd2hlbiB0aGUgRE9NIGlzIHJlYWR5CisgICAgcmVhZHk6IGZ1bmN0aW9u
KCB3YWl0ICkgeworCisgICAgICAgIC8vIEFib3J0IGlmIHRoZXJlIGFyZSBwZW5kaW5nIGhvbGRz
IG9yIHdlJ3JlIGFscmVhZHkgcmVhZHkKKyAgICAgICAgaWYgKCB3YWl0ID09PSB0cnVlID8gLS1q
UXVlcnkucmVhZHlXYWl0IDogalF1ZXJ5LmlzUmVhZHkgKSB7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICAvLyBSZW1lbWJlciB0aGF0IHRoZSBET00gaXMgcmVhZHkK
KyAgICAgICAgalF1ZXJ5LmlzUmVhZHkgPSB0cnVlOworCisgICAgICAgIC8vIElmIGEgbm9ybWFs
IERPTSBSZWFkeSBldmVudCBmaXJlZCwgZGVjcmVtZW50LCBhbmQgd2FpdCBpZiBuZWVkIGJlCisg
ICAgICAgIGlmICggd2FpdCAhPT0gdHJ1ZSAmJiAtLWpRdWVyeS5yZWFkeVdhaXQgPiAwICkgewor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgdGhlcmUgYXJl
IGZ1bmN0aW9ucyBib3VuZCwgdG8gZXhlY3V0ZQorICAgICAgICByZWFkeUxpc3QucmVzb2x2ZVdp
dGgoIGRvY3VtZW50LCBbIGpRdWVyeSBdICk7CisgICAgfQorfSApOworCitqUXVlcnkucmVhZHku
dGhlbiA9IHJlYWR5TGlzdC50aGVuOworCisvLyBUaGUgcmVhZHkgZXZlbnQgaGFuZGxlciBhbmQg
c2VsZiBjbGVhbnVwIG1ldGhvZAorZnVuY3Rpb24gY29tcGxldGVkKCkgeworICAgIGRvY3VtZW50
LnJlbW92ZUV2ZW50TGlzdGVuZXIoICJET01Db250ZW50TG9hZGVkIiwgY29tcGxldGVkICk7Cisg
ICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoICJsb2FkIiwgY29tcGxldGVkICk7CisgICAg
alF1ZXJ5LnJlYWR5KCk7Cit9CisKKy8vIENhdGNoIGNhc2VzIHdoZXJlICQoZG9jdW1lbnQpLnJl
YWR5KCkgaXMgY2FsbGVkCisvLyBhZnRlciB0aGUgYnJvd3NlciBldmVudCBoYXMgYWxyZWFkeSBv
Y2N1cnJlZC4KKy8vIFN1cHBvcnQ6IElFIDw9OSAtIDEwIG9ubHkKKy8vIE9sZGVyIElFIHNvbWV0
aW1lcyBzaWduYWxzICJpbnRlcmFjdGl2ZSIgdG9vIHNvb24KK2lmICggZG9jdW1lbnQucmVhZHlT
dGF0ZSA9PT0gImNvbXBsZXRlIiB8fAorICAgICggZG9jdW1lbnQucmVhZHlTdGF0ZSAhPT0gImxv
YWRpbmciICYmICFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwgKSApIHsKKworICAg
IC8vIEhhbmRsZSBpdCBhc3luY2hyb25vdXNseSB0byBhbGxvdyBzY3JpcHRzIHRoZSBvcHBvcnR1
bml0eSB0byBkZWxheSByZWFkeQorICAgIHdpbmRvdy5zZXRUaW1lb3V0KCBqUXVlcnkucmVhZHkg
KTsKKworfSBlbHNlIHsKKworICAgIC8vIFVzZSB0aGUgaGFuZHkgZXZlbnQgY2FsbGJhY2sKKyAg
ICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCAiRE9NQ29udGVudExvYWRlZCIsIGNvbXBsZXRl
ZCApOworCisgICAgLy8gQSBmYWxsYmFjayB0byB3aW5kb3cub25sb2FkLCB0aGF0IHdpbGwgYWx3
YXlzIHdvcmsKKyAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggImxvYWQiLCBjb21wbGV0ZWQg
KTsKK30KKworCisKKworLy8gTXVsdGlmdW5jdGlvbmFsIG1ldGhvZCB0byBnZXQgYW5kIHNldCB2
YWx1ZXMgb2YgYSBjb2xsZWN0aW9uCisvLyBUaGUgdmFsdWUvcyBjYW4gb3B0aW9uYWxseSBiZSBl
eGVjdXRlZCBpZiBpdCdzIGEgZnVuY3Rpb24KK3ZhciBhY2Nlc3MgPSBmdW5jdGlvbiggZWxlbXMs
IGZuLCBrZXksIHZhbHVlLCBjaGFpbmFibGUsIGVtcHR5R2V0LCByYXcgKSB7CisgICAgdmFyIGkg
PSAwLAorICAgICAgICBsZW4gPSBlbGVtcy5sZW5ndGgsCisgICAgICAgIGJ1bGsgPSBrZXkgPT0g
bnVsbDsKKworICAgIC8vIFNldHMgbWFueSB2YWx1ZXMKKyAgICBpZiAoIGpRdWVyeS50eXBlKCBr
ZXkgKSA9PT0gIm9iamVjdCIgKSB7CisgICAgICAgIGNoYWluYWJsZSA9IHRydWU7CisgICAgICAg
IGZvciAoIGkgaW4ga2V5ICkgeworICAgICAgICAgICAgYWNjZXNzKCBlbGVtcywgZm4sIGksIGtl
eVsgaSBdLCB0cnVlLCBlbXB0eUdldCwgcmF3ICk7CisgICAgICAgIH0KKworICAgIC8vIFNldHMg
b25lIHZhbHVlCisgICAgfSBlbHNlIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHsKKyAgICAg
ICAgY2hhaW5hYmxlID0gdHJ1ZTsKKworICAgICAgICBpZiAoICFqUXVlcnkuaXNGdW5jdGlvbigg
dmFsdWUgKSApIHsKKyAgICAgICAgICAgIHJhdyA9IHRydWU7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoIGJ1bGsgKSB7CisKKyAgICAgICAgICAgIC8vIEJ1bGsgb3BlcmF0aW9ucyBydW4gYWdh
aW5zdCB0aGUgZW50aXJlIHNldAorICAgICAgICAgICAgaWYgKCByYXcgKSB7CisgICAgICAgICAg
ICAgICAgZm4uY2FsbCggZWxlbXMsIHZhbHVlICk7CisgICAgICAgICAgICAgICAgZm4gPSBudWxs
OworCisgICAgICAgICAgICAvLyAuLi5leGNlcHQgd2hlbiBleGVjdXRpbmcgZnVuY3Rpb24gdmFs
dWVzCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJ1bGsgPSBmbjsKKyAg
ICAgICAgICAgICAgICBmbiA9IGZ1bmN0aW9uKCBlbGVtLCBrZXksIHZhbHVlICkgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gYnVsay5jYWxsKCBqUXVlcnkoIGVsZW0gKSwgdmFsdWUgKTsK
KyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
aWYgKCBmbiApIHsKKyAgICAgICAgICAgIGZvciAoIDsgaSA8IGxlbjsgaSsrICkgeworICAgICAg
ICAgICAgICAgIGZuKAorICAgICAgICAgICAgICAgICAgICBlbGVtc1sgaSBdLCBrZXksIHJhdyA/
CisgICAgICAgICAgICAgICAgICAgIHZhbHVlIDoKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUu
Y2FsbCggZWxlbXNbIGkgXSwgaSwgZm4oIGVsZW1zWyBpIF0sIGtleSApICkKKyAgICAgICAgICAg
ICAgICApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCBjaGFp
bmFibGUgKSB7CisgICAgICAgIHJldHVybiBlbGVtczsKKyAgICB9CisKKyAgICAvLyBHZXRzCisg
ICAgaWYgKCBidWxrICkgeworICAgICAgICByZXR1cm4gZm4uY2FsbCggZWxlbXMgKTsKKyAgICB9
CisKKyAgICByZXR1cm4gbGVuID8gZm4oIGVsZW1zWyAwIF0sIGtleSApIDogZW1wdHlHZXQ7Cit9
OwordmFyIGFjY2VwdERhdGEgPSBmdW5jdGlvbiggb3duZXIgKSB7CisKKyAgICAvLyBBY2NlcHRz
IG9ubHk6CisgICAgLy8gIC0gTm9kZQorICAgIC8vICAgIC0gTm9kZS5FTEVNRU5UX05PREUKKyAg
ICAvLyAgICAtIE5vZGUuRE9DVU1FTlRfTk9ERQorICAgIC8vICAtIE9iamVjdAorICAgIC8vICAg
IC0gQW55CisgICAgcmV0dXJuIG93bmVyLm5vZGVUeXBlID09PSAxIHx8IG93bmVyLm5vZGVUeXBl
ID09PSA5IHx8ICEoICtvd25lci5ub2RlVHlwZSApOworfTsKKworCisKKworZnVuY3Rpb24gRGF0
YSgpIHsKKyAgICB0aGlzLmV4cGFuZG8gPSBqUXVlcnkuZXhwYW5kbyArIERhdGEudWlkKys7Cit9
CisKK0RhdGEudWlkID0gMTsKKworRGF0YS5wcm90b3R5cGUgPSB7CisKKyAgICBjYWNoZTogZnVu
Y3Rpb24oIG93bmVyICkgeworCisgICAgICAgIC8vIENoZWNrIGlmIHRoZSBvd25lciBvYmplY3Qg
YWxyZWFkeSBoYXMgYSBjYWNoZQorICAgICAgICB2YXIgdmFsdWUgPSBvd25lclsgdGhpcy5leHBh
bmRvIF07CisKKyAgICAgICAgLy8gSWYgbm90LCBjcmVhdGUgb25lCisgICAgICAgIGlmICggIXZh
bHVlICkgeworICAgICAgICAgICAgdmFsdWUgPSB7fTsKKworICAgICAgICAgICAgLy8gV2UgY2Fu
IGFjY2VwdCBkYXRhIGZvciBub24tZWxlbWVudCBub2RlcyBpbiBtb2Rlcm4gYnJvd3NlcnMsCisg
ICAgICAgICAgICAvLyBidXQgd2Ugc2hvdWxkIG5vdCwgc2VlICM4MzM1LgorICAgICAgICAgICAg
Ly8gQWx3YXlzIHJldHVybiBhbiBlbXB0eSBvYmplY3QuCisgICAgICAgICAgICBpZiAoIGFjY2Vw
dERhdGEoIG93bmVyICkgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBJZiBpdCBpcyBhIG5vZGUg
dW5saWtlbHkgdG8gYmUgc3RyaW5naWZ5LWVkIG9yIGxvb3BlZCBvdmVyCisgICAgICAgICAgICAg
ICAgLy8gdXNlIHBsYWluIGFzc2lnbm1lbnQKKyAgICAgICAgICAgICAgICBpZiAoIG93bmVyLm5v
ZGVUeXBlICkgeworICAgICAgICAgICAgICAgICAgICBvd25lclsgdGhpcy5leHBhbmRvIF0gPSB2
YWx1ZTsKKworICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSBzZWN1cmUgaXQgaW4gYSBub24t
ZW51bWVyYWJsZSBwcm9wZXJ0eQorICAgICAgICAgICAgICAgIC8vIGNvbmZpZ3VyYWJsZSBtdXN0
IGJlIHRydWUgdG8gYWxsb3cgdGhlIHByb3BlcnR5IHRvIGJlCisgICAgICAgICAgICAgICAgLy8g
ZGVsZXRlZCB3aGVuIGRhdGEgaXMgcmVtb3ZlZAorICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggb3duZXIsIHRoaXMuZXhw
YW5kbywgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgICAgICAgICAgICAgICAgIH0g
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gdmFsdWU7CisgICAgfSwKKyAgICBzZXQ6IGZ1bmN0aW9uKCBvd25lciwgZGF0YSwg
dmFsdWUgKSB7CisgICAgICAgIHZhciBwcm9wLAorICAgICAgICAgICAgY2FjaGUgPSB0aGlzLmNh
Y2hlKCBvd25lciApOworCisgICAgICAgIC8vIEhhbmRsZTogWyBvd25lciwga2V5LCB2YWx1ZSBd
IGFyZ3MKKyAgICAgICAgLy8gQWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KQorICAg
ICAgICBpZiAoIHR5cGVvZiBkYXRhID09PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgIGNhY2hl
WyBqUXVlcnkuY2FtZWxDYXNlKCBkYXRhICkgXSA9IHZhbHVlOworCisgICAgICAgIC8vIEhhbmRs
ZTogWyBvd25lciwgeyBwcm9wZXJ0aWVzIH0gXSBhcmdzCisgICAgICAgIH0gZWxzZSB7CisKKyAg
ICAgICAgICAgIC8vIENvcHkgdGhlIHByb3BlcnRpZXMgb25lLWJ5LW9uZSB0byB0aGUgY2FjaGUg
b2JqZWN0CisgICAgICAgICAgICBmb3IgKCBwcm9wIGluIGRhdGEgKSB7CisgICAgICAgICAgICAg
ICAgY2FjaGVbIGpRdWVyeS5jYW1lbENhc2UoIHByb3AgKSBdID0gZGF0YVsgcHJvcCBdOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBjYWNoZTsKKyAgICB9LAorICAg
IGdldDogZnVuY3Rpb24oIG93bmVyLCBrZXkgKSB7CisgICAgICAgIHJldHVybiBrZXkgPT09IHVu
ZGVmaW5lZCA/CisgICAgICAgICAgICB0aGlzLmNhY2hlKCBvd25lciApIDoKKworICAgICAgICAg
ICAgLy8gQWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KQorICAgICAgICAgICAgb3du
ZXJbIHRoaXMuZXhwYW5kbyBdICYmIG93bmVyWyB0aGlzLmV4cGFuZG8gXVsgalF1ZXJ5LmNhbWVs
Q2FzZSgga2V5ICkgXTsKKyAgICB9LAorICAgIGFjY2VzczogZnVuY3Rpb24oIG93bmVyLCBrZXks
IHZhbHVlICkgeworCisgICAgICAgIC8vIEluIGNhc2VzIHdoZXJlIGVpdGhlcjoKKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gICAxLiBObyBrZXkgd2FzIHNwZWNpZmllZAorICAgICAgICAvLyAgIDIu
IEEgc3RyaW5nIGtleSB3YXMgc3BlY2lmaWVkLCBidXQgbm8gdmFsdWUgcHJvdmlkZWQKKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gVGFrZSB0aGUgInJlYWQiIHBhdGggYW5kIGFsbG93IHRoZSBnZXQg
bWV0aG9kIHRvIGRldGVybWluZQorICAgICAgICAvLyB3aGljaCB2YWx1ZSB0byByZXR1cm4sIHJl
c3BlY3RpdmVseSBlaXRoZXI6CisgICAgICAgIC8vCisgICAgICAgIC8vICAgMS4gVGhlIGVudGly
ZSBjYWNoZSBvYmplY3QKKyAgICAgICAgLy8gICAyLiBUaGUgZGF0YSBzdG9yZWQgYXQgdGhlIGtl
eQorICAgICAgICAvLworICAgICAgICBpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8CisgICAgICAg
ICAgICAgICAgKCAoIGtleSAmJiB0eXBlb2Yga2V5ID09PSAic3RyaW5nIiApICYmIHZhbHVlID09
PSB1bmRlZmluZWQgKSApIHsKKworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCBvd25lciwg
a2V5ICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBXaGVuIHRoZSBrZXkgaXMgbm90IGEgc3Ry
aW5nLCBvciBib3RoIGEga2V5IGFuZCB2YWx1ZQorICAgICAgICAvLyBhcmUgc3BlY2lmaWVkLCBz
ZXQgb3IgZXh0ZW5kIChleGlzdGluZyBvYmplY3RzKSB3aXRoIGVpdGhlcjoKKyAgICAgICAgLy8K
KyAgICAgICAgLy8gICAxLiBBbiBvYmplY3Qgb2YgcHJvcGVydGllcworICAgICAgICAvLyAgIDIu
IEEga2V5IGFuZCB2YWx1ZQorICAgICAgICAvLworICAgICAgICB0aGlzLnNldCggb3duZXIsIGtl
eSwgdmFsdWUgKTsKKworICAgICAgICAvLyBTaW5jZSB0aGUgInNldCIgcGF0aCBjYW4gaGF2ZSB0
d28gcG9zc2libGUgZW50cnkgcG9pbnRzCisgICAgICAgIC8vIHJldHVybiB0aGUgZXhwZWN0ZWQg
ZGF0YSBiYXNlZCBvbiB3aGljaCBwYXRoIHdhcyB0YWtlblsqXQorICAgICAgICByZXR1cm4gdmFs
dWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoga2V5OworICAgIH0sCisgICAgcmVtb3ZlOiBmdW5j
dGlvbiggb3duZXIsIGtleSApIHsKKyAgICAgICAgdmFyIGksCisgICAgICAgICAgICBjYWNoZSA9
IG93bmVyWyB0aGlzLmV4cGFuZG8gXTsKKworICAgICAgICBpZiAoIGNhY2hlID09PSB1bmRlZmlu
ZWQgKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoIGtl
eSAhPT0gdW5kZWZpbmVkICkgeworCisgICAgICAgICAgICAvLyBTdXBwb3J0IGFycmF5IG9yIHNw
YWNlIHNlcGFyYXRlZCBzdHJpbmcgb2Yga2V5cworICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNB
cnJheSgga2V5ICkgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBJZiBrZXkgaXMgYW4gYXJyYXkg
b2Yga2V5cy4uLgorICAgICAgICAgICAgICAgIC8vIFdlIGFsd2F5cyBzZXQgY2FtZWxDYXNlIGtl
eXMsIHNvIHJlbW92ZSB0aGF0LgorICAgICAgICAgICAgICAgIGtleSA9IGtleS5tYXAoIGpRdWVy
eS5jYW1lbENhc2UgKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAga2V5
ID0galF1ZXJ5LmNhbWVsQ2FzZSgga2V5ICk7CisKKyAgICAgICAgICAgICAgICAvLyBJZiBhIGtl
eSB3aXRoIHRoZSBzcGFjZXMgZXhpc3RzLCB1c2UgaXQuCisgICAgICAgICAgICAgICAgLy8gT3Ro
ZXJ3aXNlLCBjcmVhdGUgYW4gYXJyYXkgYnkgbWF0Y2hpbmcgbm9uLXdoaXRlc3BhY2UKKyAgICAg
ICAgICAgICAgICBrZXkgPSBrZXkgaW4gY2FjaGUgPworICAgICAgICAgICAgICAgICAgICBbIGtl
eSBdIDoKKyAgICAgICAgICAgICAgICAgICAgKCBrZXkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8
fCBbXSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpID0ga2V5Lmxlbmd0aDsKKwor
ICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAgICAgICAgZGVsZXRlIGNhY2hl
WyBrZXlbIGkgXSBdOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gUmVt
b3ZlIHRoZSBleHBhbmRvIGlmIHRoZXJlJ3Mgbm8gbW9yZSBkYXRhCisgICAgICAgIGlmICgga2V5
ID09PSB1bmRlZmluZWQgfHwgalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGNhY2hlICkgKSB7CisKKyAg
ICAgICAgICAgIC8vIFN1cHBvcnQ6IENocm9tZSA8PTM1IC0gNDUKKyAgICAgICAgICAgIC8vIFdl
YmtpdCAmIEJsaW5rIHBlcmZvcm1hbmNlIHN1ZmZlcnMgd2hlbiBkZWxldGluZyBwcm9wZXJ0aWVz
CisgICAgICAgICAgICAvLyBmcm9tIERPTSBub2Rlcywgc28gc2V0IHRvIHVuZGVmaW5lZCBpbnN0
ZWFkCisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0v
aXNzdWVzL2RldGFpbD9pZD0zNzg2MDcgKGJ1ZyByZXN0cmljdGVkKQorICAgICAgICAgICAgaWYg
KCBvd25lci5ub2RlVHlwZSApIHsKKyAgICAgICAgICAgICAgICBvd25lclsgdGhpcy5leHBhbmRv
IF0gPSB1bmRlZmluZWQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRl
bGV0ZSBvd25lclsgdGhpcy5leHBhbmRvIF07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9LAorICAgIGhhc0RhdGE6IGZ1bmN0aW9uKCBvd25lciApIHsKKyAgICAgICAgdmFyIGNhY2hl
ID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdOworICAgICAgICByZXR1cm4gY2FjaGUgIT09IHVuZGVm
aW5lZCAmJiAhalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGNhY2hlICk7CisgICAgfQorfTsKK3ZhciBk
YXRhUHJpdiA9IG5ldyBEYXRhKCk7CisKK3ZhciBkYXRhVXNlciA9IG5ldyBEYXRhKCk7CisKKwor
CisvLyAgSW1wbGVtZW50YXRpb24gU3VtbWFyeQorLy8KKy8vICAxLiBFbmZvcmNlIEFQSSBzdXJm
YWNlIGFuZCBzZW1hbnRpYyBjb21wYXRpYmlsaXR5IHdpdGggMS45LnggYnJhbmNoCisvLyAgMi4g
SW1wcm92ZSB0aGUgbW9kdWxlJ3MgbWFpbnRhaW5hYmlsaXR5IGJ5IHJlZHVjaW5nIHRoZSBzdG9y
YWdlCisvLyAgICAgIHBhdGhzIHRvIGEgc2luZ2xlIG1lY2hhbmlzbS4KKy8vICAzLiBVc2UgdGhl
IHNhbWUgc2luZ2xlIG1lY2hhbmlzbSB0byBzdXBwb3J0ICJwcml2YXRlIiBhbmQgInVzZXIiIGRh
dGEuCisvLyAgNC4gX05ldmVyXyBleHBvc2UgInByaXZhdGUiIGRhdGEgdG8gdXNlciBjb2RlIChU
T0RPOiBEcm9wIF9kYXRhLCBfcmVtb3ZlRGF0YSkKKy8vICA1LiBBdm9pZCBleHBvc2luZyBpbXBs
ZW1lbnRhdGlvbiBkZXRhaWxzIG9uIHVzZXIgb2JqZWN0cyAoZWcuIGV4cGFuZG8gcHJvcGVydGll
cykKKy8vICA2LiBQcm92aWRlIGEgY2xlYXIgcGF0aCBmb3IgaW1wbGVtZW50YXRpb24gdXBncmFk
ZSB0byBXZWFrTWFwIGluIDIwMTQKKwordmFyIHJicmFjZSA9IC9eKD86XHtbXHdcV10qXH18XFtb
XHdcV10qXF0pJC8sCisgICAgcm11bHRpRGFzaCA9IC9bQS1aXS9nOworCitmdW5jdGlvbiBnZXRE
YXRhKCBkYXRhICkgeworICAgIGlmICggZGF0YSA9PT0gInRydWUiICkgeworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIGRhdGEgPT09ICJmYWxzZSIgKSB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIGRhdGEgPT09ICJudWxsIiApIHsKKyAg
ICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgLy8gT25seSBjb252ZXJ0IHRvIGEgbnVt
YmVyIGlmIGl0IGRvZXNuJ3QgY2hhbmdlIHRoZSBzdHJpbmcKKyAgICBpZiAoIGRhdGEgPT09ICtk
YXRhICsgIiIgKSB7CisgICAgICAgIHJldHVybiArZGF0YTsKKyAgICB9CisKKyAgICBpZiAoIHJi
cmFjZS50ZXN0KCBkYXRhICkgKSB7CisgICAgICAgIHJldHVybiBKU09OLnBhcnNlKCBkYXRhICk7
CisgICAgfQorCisgICAgcmV0dXJuIGRhdGE7Cit9CisKK2Z1bmN0aW9uIGRhdGFBdHRyKCBlbGVt
LCBrZXksIGRhdGEgKSB7CisgICAgdmFyIG5hbWU7CisKKyAgICAvLyBJZiBub3RoaW5nIHdhcyBm
b3VuZCBpbnRlcm5hbGx5LCB0cnkgdG8gZmV0Y2ggYW55CisgICAgLy8gZGF0YSBmcm9tIHRoZSBI
VE1MNSBkYXRhLSogYXR0cmlidXRlCisgICAgaWYgKCBkYXRhID09PSB1bmRlZmluZWQgJiYgZWxl
bS5ub2RlVHlwZSA9PT0gMSApIHsKKyAgICAgICAgbmFtZSA9ICJkYXRhLSIgKyBrZXkucmVwbGFj
ZSggcm11bHRpRGFzaCwgIi0kJiIgKS50b0xvd2VyQ2FzZSgpOworICAgICAgICBkYXRhID0gZWxl
bS5nZXRBdHRyaWJ1dGUoIG5hbWUgKTsKKworICAgICAgICBpZiAoIHR5cGVvZiBkYXRhID09PSAi
c3RyaW5nIiApIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgZGF0YSA9IGdl
dERhdGEoIGRhdGEgKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKCBlICkge30KKworICAgICAgICAg
ICAgLy8gTWFrZSBzdXJlIHdlIHNldCB0aGUgZGF0YSBzbyBpdCBpc24ndCBjaGFuZ2VkIGxhdGVy
CisgICAgICAgICAgICBkYXRhVXNlci5zZXQoIGVsZW0sIGtleSwgZGF0YSApOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgZGF0YSA9IHVuZGVmaW5lZDsKKyAgICAgICAgfQorICAgIH0K
KyAgICByZXR1cm4gZGF0YTsKK30KKworalF1ZXJ5LmV4dGVuZCggeworICAgIGhhc0RhdGE6IGZ1
bmN0aW9uKCBlbGVtICkgeworICAgICAgICByZXR1cm4gZGF0YVVzZXIuaGFzRGF0YSggZWxlbSAp
IHx8IGRhdGFQcml2Lmhhc0RhdGEoIGVsZW0gKTsKKyAgICB9LAorCisgICAgZGF0YTogZnVuY3Rp
b24oIGVsZW0sIG5hbWUsIGRhdGEgKSB7CisgICAgICAgIHJldHVybiBkYXRhVXNlci5hY2Nlc3Mo
IGVsZW0sIG5hbWUsIGRhdGEgKTsKKyAgICB9LAorCisgICAgcmVtb3ZlRGF0YTogZnVuY3Rpb24o
IGVsZW0sIG5hbWUgKSB7CisgICAgICAgIGRhdGFVc2VyLnJlbW92ZSggZWxlbSwgbmFtZSApOwor
ICAgIH0sCisKKyAgICAvLyBUT0RPOiBOb3cgdGhhdCBhbGwgY2FsbHMgdG8gX2RhdGEgYW5kIF9y
ZW1vdmVEYXRhIGhhdmUgYmVlbiByZXBsYWNlZAorICAgIC8vIHdpdGggZGlyZWN0IGNhbGxzIHRv
IGRhdGFQcml2IG1ldGhvZHMsIHRoZXNlIGNhbiBiZSBkZXByZWNhdGVkLgorICAgIF9kYXRhOiBm
dW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHsKKyAgICAgICAgcmV0dXJuIGRhdGFQcml2LmFj
Y2VzcyggZWxlbSwgbmFtZSwgZGF0YSApOworICAgIH0sCisKKyAgICBfcmVtb3ZlRGF0YTogZnVu
Y3Rpb24oIGVsZW0sIG5hbWUgKSB7CisgICAgICAgIGRhdGFQcml2LnJlbW92ZSggZWxlbSwgbmFt
ZSApOworICAgIH0KK30gKTsKKworalF1ZXJ5LmZuLmV4dGVuZCggeworICAgIGRhdGE6IGZ1bmN0
aW9uKCBrZXksIHZhbHVlICkgeworICAgICAgICB2YXIgaSwgbmFtZSwgZGF0YSwKKyAgICAgICAg
ICAgIGVsZW0gPSB0aGlzWyAwIF0sCisgICAgICAgICAgICBhdHRycyA9IGVsZW0gJiYgZWxlbS5h
dHRyaWJ1dGVzOworCisgICAgICAgIC8vIEdldHMgYWxsIHZhbHVlcworICAgICAgICBpZiAoIGtl
eSA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgaWYgKCB0aGlzLmxlbmd0aCApIHsKKyAg
ICAgICAgICAgICAgICBkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtICk7CisKKyAgICAgICAgICAg
ICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgIWRhdGFQcml2LmdldCggZWxlbSwgImhh
c0RhdGFBdHRycyIgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgaSA9IGF0dHJzLmxlbmd0aDsK
KyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFN1cHBvcnQ6IElFIDExIG9ubHkKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFRoZSBhdHRycyBlbGVtZW50cyBjYW4gYmUgbnVsbCAoIzE0ODk0KQorICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBhdHRyc1sgaSBdICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5hbWUgPSBhdHRyc1sgaSBdLm5hbWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBuYW1lLmluZGV4T2YoICJkYXRhLSIgKSA9PT0gMCApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5hbWUuc2xpY2UoIDUgKSApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhQXR0ciggZWxlbSwgbmFtZSwgZGF0
YVsgbmFtZSBdICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGRhdGFQcml2LnNldCggZWxlbSwgImhhc0RhdGFBdHRycyIsIHRydWUgKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBkYXRhOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gU2V0cyBtdWx0aXBsZSB2YWx1ZXMKKyAgICAgICAgaWYgKCB0eXBl
b2Yga2V5ID09PSAib2JqZWN0IiApIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goIGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGRhdGFVc2VyLnNldCggdGhpcywga2V5ICk7Cisg
ICAgICAgICAgICB9ICk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gYWNjZXNzKCB0aGlz
LCBmdW5jdGlvbiggdmFsdWUgKSB7CisgICAgICAgICAgICB2YXIgZGF0YTsKKworICAgICAgICAg
ICAgLy8gVGhlIGNhbGxpbmcgalF1ZXJ5IG9iamVjdCAoZWxlbWVudCBtYXRjaGVzKSBpcyBub3Qg
ZW1wdHkKKyAgICAgICAgICAgIC8vIChhbmQgdGhlcmVmb3JlIGhhcyBhbiBlbGVtZW50IGFwcGVh
cnMgYXQgdGhpc1sgMCBdKSBhbmQgdGhlCisgICAgICAgICAgICAvLyBgdmFsdWVgIHBhcmFtZXRl
ciB3YXMgbm90IHVuZGVmaW5lZC4gQW4gZW1wdHkgalF1ZXJ5IG9iamVjdAorICAgICAgICAgICAg
Ly8gd2lsbCByZXN1bHQgaW4gYHVuZGVmaW5lZGAgZm9yIGVsZW0gPSB0aGlzWyAwIF0gd2hpY2gg
d2lsbAorICAgICAgICAgICAgLy8gdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFuIGF0dGVtcHQgdG8g
cmVhZCBhIGRhdGEgY2FjaGUgaXMgbWFkZS4KKyAgICAgICAgICAgIGlmICggZWxlbSAmJiB2YWx1
ZSA9PT0gdW5kZWZpbmVkICkgeworCisgICAgICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBnZXQg
ZGF0YSBmcm9tIHRoZSBjYWNoZQorICAgICAgICAgICAgICAgIC8vIFRoZSBrZXkgd2lsbCBhbHdh
eXMgYmUgY2FtZWxDYXNlZCBpbiBEYXRhCisgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFVc2Vy
LmdldCggZWxlbSwga2V5ICk7CisgICAgICAgICAgICAgICAgaWYgKCBkYXRhICE9PSB1bmRlZmlu
ZWQgKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gImRpc2NvdmVyIiB0aGUgZGF0YSBp
bgorICAgICAgICAgICAgICAgIC8vIEhUTUw1IGN1c3RvbSBkYXRhLSogYXR0cnMKKyAgICAgICAg
ICAgICAgICBkYXRhID0gZGF0YUF0dHIoIGVsZW0sIGtleSApOworICAgICAgICAgICAgICAgIGlm
ICggZGF0YSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0
YTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBXZSB0cmllZCByZWFs
bHkgaGFyZCwgYnV0IHRoZSBkYXRhIGRvZXNuJ3QgZXhpc3QuCisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTZXQgdGhlIGRhdGEuLi4KKyAg
ICAgICAgICAgIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CisKKyAgICAgICAgICAgICAgICAvLyBX
ZSBhbHdheXMgc3RvcmUgdGhlIGNhbWVsQ2FzZWQga2V5CisgICAgICAgICAgICAgICAgZGF0YVVz
ZXIuc2V0KCB0aGlzLCBrZXksIHZhbHVlICk7CisgICAgICAgICAgICB9ICk7CisgICAgICAgIH0s
IG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSwgbnVsbCwgdHJ1ZSApOworICAgIH0s
CisKKyAgICByZW1vdmVEYXRhOiBmdW5jdGlvbigga2V5ICkgeworICAgICAgICByZXR1cm4gdGhp
cy5lYWNoKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGRhdGFVc2VyLnJlbW92ZSggdGhpcywg
a2V5ICk7CisgICAgICAgIH0gKTsKKyAgICB9Cit9ICk7CisKKworalF1ZXJ5LmV4dGVuZCggewor
ICAgIHF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlwZSwgZGF0YSApIHsKKyAgICAgICAgdmFyIHF1
ZXVlOworCisgICAgICAgIGlmICggZWxlbSApIHsKKyAgICAgICAgICAgIHR5cGUgPSAoIHR5cGUg
fHwgImZ4IiApICsgInF1ZXVlIjsKKyAgICAgICAgICAgIHF1ZXVlID0gZGF0YVByaXYuZ2V0KCBl
bGVtLCB0eXBlICk7CisKKyAgICAgICAgICAgIC8vIFNwZWVkIHVwIGRlcXVldWUgYnkgZ2V0dGlu
ZyBvdXQgcXVpY2tseSBpZiB0aGlzIGlzIGp1c3QgYSBsb29rdXAKKyAgICAgICAgICAgIGlmICgg
ZGF0YSApIHsKKyAgICAgICAgICAgICAgICBpZiAoICFxdWV1ZSB8fCBqUXVlcnkuaXNBcnJheSgg
ZGF0YSApICkgeworICAgICAgICAgICAgICAgICAgICBxdWV1ZSA9IGRhdGFQcml2LmFjY2Vzcygg
ZWxlbSwgdHlwZSwgalF1ZXJ5Lm1ha2VBcnJheSggZGF0YSApICk7CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcXVldWUucHVzaCggZGF0YSApOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBxdWV1ZSB8fCBb
XTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBkZXF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlw
ZSApIHsKKyAgICAgICAgdHlwZSA9IHR5cGUgfHwgImZ4IjsKKworICAgICAgICB2YXIgcXVldWUg
PSBqUXVlcnkucXVldWUoIGVsZW0sIHR5cGUgKSwKKyAgICAgICAgICAgIHN0YXJ0TGVuZ3RoID0g
cXVldWUubGVuZ3RoLAorICAgICAgICAgICAgZm4gPSBxdWV1ZS5zaGlmdCgpLAorICAgICAgICAg
ICAgaG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sIHR5cGUgKSwKKyAgICAgICAgICAg
IG5leHQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkuZGVxdWV1ZSggZWxl
bSwgdHlwZSApOworICAgICAgICAgICAgfTsKKworICAgICAgICAvLyBJZiB0aGUgZnggcXVldWUg
aXMgZGVxdWV1ZWQsIGFsd2F5cyByZW1vdmUgdGhlIHByb2dyZXNzIHNlbnRpbmVsCisgICAgICAg
IGlmICggZm4gPT09ICJpbnByb2dyZXNzIiApIHsKKyAgICAgICAgICAgIGZuID0gcXVldWUuc2hp
ZnQoKTsKKyAgICAgICAgICAgIHN0YXJ0TGVuZ3RoLS07CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoIGZuICkgeworCisgICAgICAgICAgICAvLyBBZGQgYSBwcm9ncmVzcyBzZW50aW5lbCB0byBw
cmV2ZW50IHRoZSBmeCBxdWV1ZSBmcm9tIGJlaW5nCisgICAgICAgICAgICAvLyBhdXRvbWF0aWNh
bGx5IGRlcXVldWVkCisgICAgICAgICAgICBpZiAoIHR5cGUgPT09ICJmeCIgKSB7CisgICAgICAg
ICAgICAgICAgcXVldWUudW5zaGlmdCggImlucHJvZ3Jlc3MiICk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIENsZWFyIHVwIHRoZSBsYXN0IHF1ZXVlIHN0b3AgZnVuY3Rpb24KKyAg
ICAgICAgICAgIGRlbGV0ZSBob29rcy5zdG9wOworICAgICAgICAgICAgZm4uY2FsbCggZWxlbSwg
bmV4dCwgaG9va3MgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggIXN0YXJ0TGVuZ3RoICYm
IGhvb2tzICkgeworICAgICAgICAgICAgaG9va3MuZW1wdHkuZmlyZSgpOworICAgICAgICB9Cisg
ICAgfSwKKworICAgIC8vIE5vdCBwdWJsaWMgLSBnZW5lcmF0ZSBhIHF1ZXVlSG9va3Mgb2JqZWN0
LCBvciByZXR1cm4gdGhlIGN1cnJlbnQgb25lCisgICAgX3F1ZXVlSG9va3M6IGZ1bmN0aW9uKCBl
bGVtLCB0eXBlICkgeworICAgICAgICB2YXIga2V5ID0gdHlwZSArICJxdWV1ZUhvb2tzIjsKKyAg
ICAgICAgcmV0dXJuIGRhdGFQcml2LmdldCggZWxlbSwga2V5ICkgfHwgZGF0YVByaXYuYWNjZXNz
KCBlbGVtLCBrZXksIHsKKyAgICAgICAgICAgIGVtcHR5OiBqUXVlcnkuQ2FsbGJhY2tzKCAib25j
ZSBtZW1vcnkiICkuYWRkKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBkYXRhUHJpdi5y
ZW1vdmUoIGVsZW0sIFsgdHlwZSArICJxdWV1ZSIsIGtleSBdICk7CisgICAgICAgICAgICB9ICkK
KyAgICAgICAgfSApOworICAgIH0KK30gKTsKKworalF1ZXJ5LmZuLmV4dGVuZCggeworICAgIHF1
ZXVlOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHsKKyAgICAgICAgdmFyIHNldHRlciA9IDI7CisK
KyAgICAgICAgaWYgKCB0eXBlb2YgdHlwZSAhPT0gInN0cmluZyIgKSB7CisgICAgICAgICAgICBk
YXRhID0gdHlwZTsKKyAgICAgICAgICAgIHR5cGUgPSAiZngiOworICAgICAgICAgICAgc2V0dGVy
LS07CisgICAgICAgIH0KKworICAgICAgICBpZiAoIGFyZ3VtZW50cy5sZW5ndGggPCBzZXR0ZXIg
KSB7CisgICAgICAgICAgICByZXR1cm4galF1ZXJ5LnF1ZXVlKCB0aGlzWyAwIF0sIHR5cGUgKTsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkYXRhID09PSB1bmRlZmluZWQgPworICAgICAg
ICAgICAgdGhpcyA6CisgICAgICAgICAgICB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgICAgIHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgZGF0YSApOwor
CisgICAgICAgICAgICAgICAgLy8gRW5zdXJlIGEgaG9va3MgZm9yIHRoaXMgcXVldWUKKyAgICAg
ICAgICAgICAgICBqUXVlcnkuX3F1ZXVlSG9va3MoIHRoaXMsIHR5cGUgKTsKKworICAgICAgICAg
ICAgICAgIGlmICggdHlwZSA9PT0gImZ4IiAmJiBxdWV1ZVsgMCBdICE9PSAiaW5wcm9ncmVzcyIg
KSB7CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSApOworICAgIH0sCisgICAgZGVxdWV1ZTog
ZnVuY3Rpb24oIHR5cGUgKSB7CisgICAgICAgIHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgalF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTsKKyAgICAgICAgfSAp
OworICAgIH0sCisgICAgY2xlYXJRdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7CisgICAgICAgIHJl
dHVybiB0aGlzLnF1ZXVlKCB0eXBlIHx8ICJmeCIsIFtdICk7CisgICAgfSwKKworICAgIC8vIEdl
dCBhIHByb21pc2UgcmVzb2x2ZWQgd2hlbiBxdWV1ZXMgb2YgYSBjZXJ0YWluIHR5cGUKKyAgICAv
LyBhcmUgZW1wdGllZCAoZnggaXMgdGhlIHR5cGUgYnkgZGVmYXVsdCkKKyAgICBwcm9taXNlOiBm
dW5jdGlvbiggdHlwZSwgb2JqICkgeworICAgICAgICB2YXIgdG1wLAorICAgICAgICAgICAgY291
bnQgPSAxLAorICAgICAgICAgICAgZGVmZXIgPSBqUXVlcnkuRGVmZXJyZWQoKSwKKyAgICAgICAg
ICAgIGVsZW1lbnRzID0gdGhpcywKKyAgICAgICAgICAgIGkgPSB0aGlzLmxlbmd0aCwKKyAgICAg
ICAgICAgIHJlc29sdmUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBpZiAoICEoIC0t
Y291bnQgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgZGVmZXIucmVzb2x2ZVdpdGgoIGVsZW1l
bnRzLCBbIGVsZW1lbnRzIF0gKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Owor
CisgICAgICAgIGlmICggdHlwZW9mIHR5cGUgIT09ICJzdHJpbmciICkgeworICAgICAgICAgICAg
b2JqID0gdHlwZTsKKyAgICAgICAgICAgIHR5cGUgPSB1bmRlZmluZWQ7CisgICAgICAgIH0KKyAg
ICAgICAgdHlwZSA9IHR5cGUgfHwgImZ4IjsKKworICAgICAgICB3aGlsZSAoIGktLSApIHsKKyAg
ICAgICAgICAgIHRtcCA9IGRhdGFQcml2LmdldCggZWxlbWVudHNbIGkgXSwgdHlwZSArICJxdWV1
ZUhvb2tzIiApOworICAgICAgICAgICAgaWYgKCB0bXAgJiYgdG1wLmVtcHR5ICkgeworICAgICAg
ICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAgICAgICAgdG1wLmVtcHR5LmFkZCggcmVzb2x2
ZSApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJlc29sdmUoKTsKKyAgICAg
ICAgcmV0dXJuIGRlZmVyLnByb21pc2UoIG9iaiApOworICAgIH0KK30gKTsKK3ZhciBwbnVtID0g
KCAvWystXT8oPzpcZCpcLnwpXGQrKD86W2VFXVsrLV0/XGQrfCkvICkuc291cmNlOworCit2YXIg
cmNzc051bSA9IG5ldyBSZWdFeHAoICJeKD86KFsrLV0pPXwpKCIgKyBwbnVtICsgIikoW2EteiVd
KikkIiwgImkiICk7CisKKwordmFyIGNzc0V4cGFuZCA9IFsgIlRvcCIsICJSaWdodCIsICJCb3R0
b20iLCAiTGVmdCIgXTsKKwordmFyIGlzSGlkZGVuV2l0aGluVHJlZSA9IGZ1bmN0aW9uKCBlbGVt
LCBlbCApIHsKKworICAgICAgICAvLyBpc0hpZGRlbldpdGhpblRyZWUgbWlnaHQgYmUgY2FsbGVk
IGZyb20galF1ZXJ5I2ZpbHRlciBmdW5jdGlvbjsKKyAgICAgICAgLy8gaW4gdGhhdCBjYXNlLCBl
bGVtZW50IHdpbGwgYmUgc2Vjb25kIGFyZ3VtZW50CisgICAgICAgIGVsZW0gPSBlbCB8fCBlbGVt
OworCisgICAgICAgIC8vIElubGluZSBzdHlsZSB0cnVtcHMgYWxsCisgICAgICAgIHJldHVybiBl
bGVtLnN0eWxlLmRpc3BsYXkgPT09ICJub25lIiB8fAorICAgICAgICAgICAgZWxlbS5zdHlsZS5k
aXNwbGF5ID09PSAiIiAmJgorCisgICAgICAgICAgICAvLyBPdGhlcndpc2UsIGNoZWNrIGNvbXB1
dGVkIHN0eWxlCisgICAgICAgICAgICAvLyBTdXBwb3J0OiBGaXJlZm94IDw9NDMgLSA0NQorICAg
ICAgICAgICAgLy8gRGlzY29ubmVjdGVkIGVsZW1lbnRzIGNhbiBoYXZlIGNvbXB1dGVkIGRpc3Bs
YXk6IG5vbmUsIHNvIGZpcnN0IGNvbmZpcm0gdGhhdCBlbGVtIGlzCisgICAgICAgICAgICAvLyBp
biB0aGUgZG9jdW1lbnQuCisgICAgICAgICAgICBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJE
b2N1bWVudCwgZWxlbSApICYmCisKKyAgICAgICAgICAgIGpRdWVyeS5jc3MoIGVsZW0sICJkaXNw
bGF5IiApID09PSAibm9uZSI7CisgICAgfTsKKwordmFyIHN3YXAgPSBmdW5jdGlvbiggZWxlbSwg
b3B0aW9ucywgY2FsbGJhY2ssIGFyZ3MgKSB7CisgICAgdmFyIHJldCwgbmFtZSwKKyAgICAgICAg
b2xkID0ge307CisKKyAgICAvLyBSZW1lbWJlciB0aGUgb2xkIHZhbHVlcywgYW5kIGluc2VydCB0
aGUgbmV3IG9uZXMKKyAgICBmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7CisgICAgICAgIG9sZFsg
bmFtZSBdID0gZWxlbS5zdHlsZVsgbmFtZSBdOworICAgICAgICBlbGVtLnN0eWxlWyBuYW1lIF0g
PSBvcHRpb25zWyBuYW1lIF07CisgICAgfQorCisgICAgcmV0ID0gY2FsbGJhY2suYXBwbHkoIGVs
ZW0sIGFyZ3MgfHwgW10gKTsKKworICAgIC8vIFJldmVydCB0aGUgb2xkIHZhbHVlcworICAgIGZv
ciAoIG5hbWUgaW4gb3B0aW9ucyApIHsKKyAgICAgICAgZWxlbS5zdHlsZVsgbmFtZSBdID0gb2xk
WyBuYW1lIF07CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK307CisKKworCisKK2Z1bmN0aW9u
IGFkanVzdENTUyggZWxlbSwgcHJvcCwgdmFsdWVQYXJ0cywgdHdlZW4gKSB7CisgICAgdmFyIGFk
anVzdGVkLAorICAgICAgICBzY2FsZSA9IDEsCisgICAgICAgIG1heEl0ZXJhdGlvbnMgPSAyMCwK
KyAgICAgICAgY3VycmVudFZhbHVlID0gdHdlZW4gPworICAgICAgICAgICAgZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHR3ZWVuLmN1cigpOworICAgICAgICAgICAgfSA6Cisg
ICAgICAgICAgICBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmNz
cyggZWxlbSwgcHJvcCwgIiIgKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgIGluaXRpYWwgPSBj
dXJyZW50VmFsdWUoKSwKKyAgICAgICAgdW5pdCA9IHZhbHVlUGFydHMgJiYgdmFsdWVQYXJ0c1sg
MyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gIiIgOiAicHgiICksCisKKyAgICAg
ICAgLy8gU3RhcnRpbmcgdmFsdWUgY29tcHV0YXRpb24gaXMgcmVxdWlyZWQgZm9yIHBvdGVudGlh
bCB1bml0IG1pc21hdGNoZXMKKyAgICAgICAgaW5pdGlhbEluVW5pdCA9ICggalF1ZXJ5LmNzc051
bWJlclsgcHJvcCBdIHx8IHVuaXQgIT09ICJweCIgJiYgK2luaXRpYWwgKSAmJgorICAgICAgICAg
ICAgcmNzc051bS5leGVjKCBqUXVlcnkuY3NzKCBlbGVtLCBwcm9wICkgKTsKKworICAgIGlmICgg
aW5pdGlhbEluVW5pdCAmJiBpbml0aWFsSW5Vbml0WyAzIF0gIT09IHVuaXQgKSB7CisKKyAgICAg
ICAgLy8gVHJ1c3QgdW5pdHMgcmVwb3J0ZWQgYnkgalF1ZXJ5LmNzcworICAgICAgICB1bml0ID0g
dW5pdCB8fCBpbml0aWFsSW5Vbml0WyAzIF07CisKKyAgICAgICAgLy8gTWFrZSBzdXJlIHdlIHVw
ZGF0ZSB0aGUgdHdlZW4gcHJvcGVydGllcyBsYXRlciBvbgorICAgICAgICB2YWx1ZVBhcnRzID0g
dmFsdWVQYXJ0cyB8fCBbXTsKKworICAgICAgICAvLyBJdGVyYXRpdmVseSBhcHByb3hpbWF0ZSBm
cm9tIGEgbm9uemVybyBzdGFydGluZyBwb2ludAorICAgICAgICBpbml0aWFsSW5Vbml0ID0gK2lu
aXRpYWwgfHwgMTsKKworICAgICAgICBkbyB7CisKKyAgICAgICAgICAgIC8vIElmIHByZXZpb3Vz
IGl0ZXJhdGlvbiB6ZXJvZWQgb3V0LCBkb3VibGUgdW50aWwgd2UgZ2V0ICpzb21ldGhpbmcqLgor
ICAgICAgICAgICAgLy8gVXNlIHN0cmluZyBmb3IgZG91Ymxpbmcgc28gd2UgZG9uJ3QgYWNjaWRl
bnRhbGx5IHNlZSBzY2FsZSBhcyB1bmNoYW5nZWQgYmVsb3cKKyAgICAgICAgICAgIHNjYWxlID0g
c2NhbGUgfHwgIi41IjsKKworICAgICAgICAgICAgLy8gQWRqdXN0IGFuZCBhcHBseQorICAgICAg
ICAgICAgaW5pdGlhbEluVW5pdCA9IGluaXRpYWxJblVuaXQgLyBzY2FsZTsKKyAgICAgICAgICAg
IGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgaW5pdGlhbEluVW5pdCArIHVuaXQgKTsKKworICAg
ICAgICAvLyBVcGRhdGUgc2NhbGUsIHRvbGVyYXRpbmcgemVybyBvciBOYU4gZnJvbSB0d2Vlbi5j
dXIoKQorICAgICAgICAvLyBCcmVhayB0aGUgbG9vcCBpZiBzY2FsZSBpcyB1bmNoYW5nZWQgb3Ig
cGVyZmVjdCwgb3IgaWYgd2UndmUganVzdCBoYWQgZW5vdWdoLgorICAgICAgICB9IHdoaWxlICgK
KyAgICAgICAgICAgIHNjYWxlICE9PSAoIHNjYWxlID0gY3VycmVudFZhbHVlKCkgLyBpbml0aWFs
ICkgJiYgc2NhbGUgIT09IDEgJiYgLS1tYXhJdGVyYXRpb25zCisgICAgICAgICk7CisgICAgfQor
CisgICAgaWYgKCB2YWx1ZVBhcnRzICkgeworICAgICAgICBpbml0aWFsSW5Vbml0ID0gK2luaXRp
YWxJblVuaXQgfHwgK2luaXRpYWwgfHwgMDsKKworICAgICAgICAvLyBBcHBseSByZWxhdGl2ZSBv
ZmZzZXQgKCs9Ly09KSBpZiBzcGVjaWZpZWQKKyAgICAgICAgYWRqdXN0ZWQgPSB2YWx1ZVBhcnRz
WyAxIF0gPworICAgICAgICAgICAgaW5pdGlhbEluVW5pdCArICggdmFsdWVQYXJ0c1sgMSBdICsg
MSApICogdmFsdWVQYXJ0c1sgMiBdIDoKKyAgICAgICAgICAgICt2YWx1ZVBhcnRzWyAyIF07Cisg
ICAgICAgIGlmICggdHdlZW4gKSB7CisgICAgICAgICAgICB0d2Vlbi51bml0ID0gdW5pdDsKKyAg
ICAgICAgICAgIHR3ZWVuLnN0YXJ0ID0gaW5pdGlhbEluVW5pdDsKKyAgICAgICAgICAgIHR3ZWVu
LmVuZCA9IGFkanVzdGVkOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBhZGp1c3RlZDsK
K30KKworCit2YXIgZGVmYXVsdERpc3BsYXlNYXAgPSB7fTsKKworZnVuY3Rpb24gZ2V0RGVmYXVs
dERpc3BsYXkoIGVsZW0gKSB7CisgICAgdmFyIHRlbXAsCisgICAgICAgIGRvYyA9IGVsZW0ub3du
ZXJEb2N1bWVudCwKKyAgICAgICAgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lLAorICAgICAgICBk
aXNwbGF5ID0gZGVmYXVsdERpc3BsYXlNYXBbIG5vZGVOYW1lIF07CisKKyAgICBpZiAoIGRpc3Bs
YXkgKSB7CisgICAgICAgIHJldHVybiBkaXNwbGF5OworICAgIH0KKworICAgIHRlbXAgPSBkb2Mu
Ym9keS5hcHBlbmRDaGlsZCggZG9jLmNyZWF0ZUVsZW1lbnQoIG5vZGVOYW1lICkgKTsKKyAgICBk
aXNwbGF5ID0galF1ZXJ5LmNzcyggdGVtcCwgImRpc3BsYXkiICk7CisKKyAgICB0ZW1wLnBhcmVu
dE5vZGUucmVtb3ZlQ2hpbGQoIHRlbXAgKTsKKworICAgIGlmICggZGlzcGxheSA9PT0gIm5vbmUi
ICkgeworICAgICAgICBkaXNwbGF5ID0gImJsb2NrIjsKKyAgICB9CisgICAgZGVmYXVsdERpc3Bs
YXlNYXBbIG5vZGVOYW1lIF0gPSBkaXNwbGF5OworCisgICAgcmV0dXJuIGRpc3BsYXk7Cit9CisK
K2Z1bmN0aW9uIHNob3dIaWRlKCBlbGVtZW50cywgc2hvdyApIHsKKyAgICB2YXIgZGlzcGxheSwg
ZWxlbSwKKyAgICAgICAgdmFsdWVzID0gW10sCisgICAgICAgIGluZGV4ID0gMCwKKyAgICAgICAg
bGVuZ3RoID0gZWxlbWVudHMubGVuZ3RoOworCisgICAgLy8gRGV0ZXJtaW5lIG5ldyBkaXNwbGF5
IHZhbHVlIGZvciBlbGVtZW50cyB0aGF0IG5lZWQgdG8gY2hhbmdlCisgICAgZm9yICggOyBpbmRl
eCA8IGxlbmd0aDsgaW5kZXgrKyApIHsKKyAgICAgICAgZWxlbSA9IGVsZW1lbnRzWyBpbmRleCBd
OworICAgICAgICBpZiAoICFlbGVtLnN0eWxlICkgeworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKworICAgICAgICBkaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5OworICAgICAg
ICBpZiAoIHNob3cgKSB7CisKKyAgICAgICAgICAgIC8vIFNpbmNlIHdlIGZvcmNlIHZpc2liaWxp
dHkgdXBvbiBjYXNjYWRlLWhpZGRlbiBlbGVtZW50cywgYW4gaW1tZWRpYXRlIChhbmQgc2xvdykK
KyAgICAgICAgICAgIC8vIGNoZWNrIGlzIHJlcXVpcmVkIGluIHRoaXMgZmlyc3QgbG9vcCB1bmxl
c3Mgd2UgaGF2ZSBhIG5vbmVtcHR5IGRpc3BsYXkgdmFsdWUgKGVpdGhlcgorICAgICAgICAgICAg
Ly8gaW5saW5lIG9yIGFib3V0LXRvLWJlLXJlc3RvcmVkKQorICAgICAgICAgICAgaWYgKCBkaXNw
bGF5ID09PSAibm9uZSIgKSB7CisgICAgICAgICAgICAgICAgdmFsdWVzWyBpbmRleCBdID0gZGF0
YVByaXYuZ2V0KCBlbGVtLCAiZGlzcGxheSIgKSB8fCBudWxsOworICAgICAgICAgICAgICAgIGlm
ICggIXZhbHVlc1sgaW5kZXggXSApIHsKKyAgICAgICAgICAgICAgICAgICAgZWxlbS5zdHlsZS5k
aXNwbGF5ID0gIiI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKCBlbGVtLnN0eWxlLmRpc3BsYXkgPT09ICIiICYmIGlzSGlkZGVuV2l0aGluVHJlZSgg
ZWxlbSApICkgeworICAgICAgICAgICAgICAgIHZhbHVlc1sgaW5kZXggXSA9IGdldERlZmF1bHRE
aXNwbGF5KCBlbGVtICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBpZiAoIGRpc3BsYXkgIT09ICJub25lIiApIHsKKyAgICAgICAgICAgICAgICB2YWx1ZXNb
IGluZGV4IF0gPSAibm9uZSI7CisKKyAgICAgICAgICAgICAgICAvLyBSZW1lbWJlciB3aGF0IHdl
J3JlIG92ZXJ3cml0aW5nCisgICAgICAgICAgICAgICAgZGF0YVByaXYuc2V0KCBlbGVtLCAiZGlz
cGxheSIsIGRpc3BsYXkgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vIFNldCB0aGUgZGlzcGxheSBvZiB0aGUgZWxlbWVudHMgaW4gYSBzZWNvbmQgbG9vcCB0byBh
dm9pZCBjb25zdGFudCByZWZsb3cKKyAgICBmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3Ro
OyBpbmRleCsrICkgeworICAgICAgICBpZiAoIHZhbHVlc1sgaW5kZXggXSAhPSBudWxsICkgewor
ICAgICAgICAgICAgZWxlbWVudHNbIGluZGV4IF0uc3R5bGUuZGlzcGxheSA9IHZhbHVlc1sgaW5k
ZXggXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBlbGVtZW50czsKK30KKworalF1
ZXJ5LmZuLmV4dGVuZCggeworICAgIHNob3c6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4g
c2hvd0hpZGUoIHRoaXMsIHRydWUgKTsKKyAgICB9LAorICAgIGhpZGU6IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gc2hvd0hpZGUoIHRoaXMgKTsKKyAgICB9LAorICAgIHRvZ2dsZTogZnVu
Y3Rpb24oIHN0YXRlICkgeworICAgICAgICBpZiAoIHR5cGVvZiBzdGF0ZSA9PT0gImJvb2xlYW4i
ICkgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRlID8gdGhpcy5zaG93KCkgOiB0aGlzLmhpZGUo
KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgaWYgKCBpc0hpZGRlbldpdGhpblRyZWUoIHRoaXMgKSApIHsKKyAgICAgICAg
ICAgICAgICBqUXVlcnkoIHRoaXMgKS5zaG93KCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLmhpZGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSApOworICAgIH0KK30gKTsKK3ZhciByY2hlY2thYmxlVHlwZSA9ICggL14oPzpjaGVja2Jv
eHxyYWRpbykkL2kgKTsKKwordmFyIHJ0YWdOYW1lID0gKCAvPChbYS16XVteXC9cMD5ceDIwXHRc
clxuXGZdKykvaSApOworCit2YXIgcnNjcmlwdFR5cGUgPSAoIC9eJHxcLyg/OmphdmF8ZWNtYSlz
Y3JpcHQvaSApOworCisKKworLy8gV2UgaGF2ZSB0byBjbG9zZSB0aGVzZSB0YWdzIHRvIHN1cHBv
cnQgWEhUTUwgKCMxMzIwMCkKK3ZhciB3cmFwTWFwID0geworCisgICAgLy8gU3VwcG9ydDogSUUg
PD05IG9ubHkKKyAgICBvcHRpb246IFsgMSwgIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz4i
LCAiPC9zZWxlY3Q+IiBdLAorCisgICAgLy8gWEhUTUwgcGFyc2VycyBkbyBub3QgbWFnaWNhbGx5
IGluc2VydCBlbGVtZW50cyBpbiB0aGUKKyAgICAvLyBzYW1lIHdheSB0aGF0IHRhZyBzb3VwIHBh
cnNlcnMgZG8uIFNvIHdlIGNhbm5vdCBzaG9ydGVuCisgICAgLy8gdGhpcyBieSBvbWl0dGluZyA8
dGJvZHk+IG9yIG90aGVyIHJlcXVpcmVkIGVsZW1lbnRzLgorICAgIHRoZWFkOiBbIDEsICI8dGFi
bGU+IiwgIjwvdGFibGU+IiBdLAorICAgIGNvbDogWyAyLCAiPHRhYmxlPjxjb2xncm91cD4iLCAi
PC9jb2xncm91cD48L3RhYmxlPiIgXSwKKyAgICB0cjogWyAyLCAiPHRhYmxlPjx0Ym9keT4iLCAi
PC90Ym9keT48L3RhYmxlPiIgXSwKKyAgICB0ZDogWyAzLCAiPHRhYmxlPjx0Ym9keT48dHI+Iiwg
IjwvdHI+PC90Ym9keT48L3RhYmxlPiIgXSwKKworICAgIF9kZWZhdWx0OiBbIDAsICIiLCAiIiBd
Cit9OworCisvLyBTdXBwb3J0OiBJRSA8PTkgb25seQord3JhcE1hcC5vcHRncm91cCA9IHdyYXBN
YXAub3B0aW9uOworCit3cmFwTWFwLnRib2R5ID0gd3JhcE1hcC50Zm9vdCA9IHdyYXBNYXAuY29s
Z3JvdXAgPSB3cmFwTWFwLmNhcHRpb24gPSB3cmFwTWFwLnRoZWFkOword3JhcE1hcC50aCA9IHdy
YXBNYXAudGQ7CisKKworZnVuY3Rpb24gZ2V0QWxsKCBjb250ZXh0LCB0YWcgKSB7CisKKyAgICAv
LyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5CisgICAgLy8gVXNlIHR5cGVvZiB0byBhdm9pZCB6
ZXJvLWFyZ3VtZW50IG1ldGhvZCBpbnZvY2F0aW9uIG9uIGhvc3Qgb2JqZWN0cyAoIzE1MTUxKQor
ICAgIHZhciByZXQ7CisKKyAgICBpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdO
YW1lICE9PSAidW5kZWZpbmVkIiApIHsKKyAgICAgICAgcmV0ID0gY29udGV4dC5nZXRFbGVtZW50
c0J5VGFnTmFtZSggdGFnIHx8ICIqIiApOworCisgICAgfSBlbHNlIGlmICggdHlwZW9mIGNvbnRl
eHQucXVlcnlTZWxlY3RvckFsbCAhPT0gInVuZGVmaW5lZCIgKSB7CisgICAgICAgIHJldCA9IGNv
bnRleHQucXVlcnlTZWxlY3RvckFsbCggdGFnIHx8ICIqIiApOworCisgICAgfSBlbHNlIHsKKyAg
ICAgICAgcmV0ID0gW107CisgICAgfQorCisgICAgaWYgKCB0YWcgPT09IHVuZGVmaW5lZCB8fCB0
YWcgJiYgalF1ZXJ5Lm5vZGVOYW1lKCBjb250ZXh0LCB0YWcgKSApIHsKKyAgICAgICAgcmV0dXJu
IGpRdWVyeS5tZXJnZSggWyBjb250ZXh0IF0sIHJldCApOworICAgIH0KKworICAgIHJldHVybiBy
ZXQ7Cit9CisKKworLy8gTWFyayBzY3JpcHRzIGFzIGhhdmluZyBhbHJlYWR5IGJlZW4gZXZhbHVh
dGVkCitmdW5jdGlvbiBzZXRHbG9iYWxFdmFsKCBlbGVtcywgcmVmRWxlbWVudHMgKSB7CisgICAg
dmFyIGkgPSAwLAorICAgICAgICBsID0gZWxlbXMubGVuZ3RoOworCisgICAgZm9yICggOyBpIDwg
bDsgaSsrICkgeworICAgICAgICBkYXRhUHJpdi5zZXQoCisgICAgICAgICAgICBlbGVtc1sgaSBd
LAorICAgICAgICAgICAgImdsb2JhbEV2YWwiLAorICAgICAgICAgICAgIXJlZkVsZW1lbnRzIHx8
IGRhdGFQcml2LmdldCggcmVmRWxlbWVudHNbIGkgXSwgImdsb2JhbEV2YWwiICkKKyAgICAgICAg
KTsKKyAgICB9Cit9CisKKwordmFyIHJodG1sID0gLzx8JiM/XHcrOy87CisKK2Z1bmN0aW9uIGJ1
aWxkRnJhZ21lbnQoIGVsZW1zLCBjb250ZXh0LCBzY3JpcHRzLCBzZWxlY3Rpb24sIGlnbm9yZWQg
KSB7CisgICAgdmFyIGVsZW0sIHRtcCwgdGFnLCB3cmFwLCBjb250YWlucywgaiwKKyAgICAgICAg
ZnJhZ21lbnQgPSBjb250ZXh0LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSwKKyAgICAgICAgbm9k
ZXMgPSBbXSwKKyAgICAgICAgaSA9IDAsCisgICAgICAgIGwgPSBlbGVtcy5sZW5ndGg7CisKKyAg
ICBmb3IgKCA7IGkgPCBsOyBpKysgKSB7CisgICAgICAgIGVsZW0gPSBlbGVtc1sgaSBdOworCisg
ICAgICAgIGlmICggZWxlbSB8fCBlbGVtID09PSAwICkgeworCisgICAgICAgICAgICAvLyBBZGQg
bm9kZXMgZGlyZWN0bHkKKyAgICAgICAgICAgIGlmICggalF1ZXJ5LnR5cGUoIGVsZW0gKSA9PT0g
Im9iamVjdCIgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4w
IG9ubHksIFBoYW50b21KUyAxIG9ubHkKKyAgICAgICAgICAgICAgICAvLyBwdXNoLmFwcGx5KF8s
IGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0CisgICAgICAgICAgICAgICAgalF1
ZXJ5Lm1lcmdlKCBub2RlcywgZWxlbS5ub2RlVHlwZSA/IFsgZWxlbSBdIDogZWxlbSApOworCisg
ICAgICAgICAgICAvLyBDb252ZXJ0IG5vbi1odG1sIGludG8gYSB0ZXh0IG5vZGUKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoICFyaHRtbC50ZXN0KCBlbGVtICkgKSB7CisgICAgICAgICAgICAgICAg
bm9kZXMucHVzaCggY29udGV4dC5jcmVhdGVUZXh0Tm9kZSggZWxlbSApICk7CisKKyAgICAgICAg
ICAgIC8vIENvbnZlcnQgaHRtbCBpbnRvIERPTSBub2RlcworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICB0bXAgPSB0bXAgfHwgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGNvbnRl
eHQuY3JlYXRlRWxlbWVudCggImRpdiIgKSApOworCisgICAgICAgICAgICAgICAgLy8gRGVzZXJp
YWxpemUgYSBzdGFuZGFyZCByZXByZXNlbnRhdGlvbgorICAgICAgICAgICAgICAgIHRhZyA9ICgg
cnRhZ05hbWUuZXhlYyggZWxlbSApIHx8IFsgIiIsICIiIF0gKVsgMSBdLnRvTG93ZXJDYXNlKCk7
CisgICAgICAgICAgICAgICAgd3JhcCA9IHdyYXBNYXBbIHRhZyBdIHx8IHdyYXBNYXAuX2RlZmF1
bHQ7CisgICAgICAgICAgICAgICAgdG1wLmlubmVySFRNTCA9IHdyYXBbIDEgXSArIGpRdWVyeS5o
dG1sUHJlZmlsdGVyKCBlbGVtICkgKyB3cmFwWyAyIF07CisKKyAgICAgICAgICAgICAgICAvLyBE
ZXNjZW5kIHRocm91Z2ggd3JhcHBlcnMgdG8gdGhlIHJpZ2h0IGNvbnRlbnQKKyAgICAgICAgICAg
ICAgICBqID0gd3JhcFsgMCBdOworICAgICAgICAgICAgICAgIHdoaWxlICggai0tICkgeworICAg
ICAgICAgICAgICAgICAgICB0bXAgPSB0bXAubGFzdENoaWxkOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRv
bUpTIDEgb25seQorICAgICAgICAgICAgICAgIC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0
aHJvd3Mgb24gYW5jaWVudCBXZWJLaXQKKyAgICAgICAgICAgICAgICBqUXVlcnkubWVyZ2UoIG5v
ZGVzLCB0bXAuY2hpbGROb2RlcyApOworCisgICAgICAgICAgICAgICAgLy8gUmVtZW1iZXIgdGhl
IHRvcC1sZXZlbCBjb250YWluZXIKKyAgICAgICAgICAgICAgICB0bXAgPSBmcmFnbWVudC5maXJz
dENoaWxkOworCisgICAgICAgICAgICAgICAgLy8gRW5zdXJlIHRoZSBjcmVhdGVkIG5vZGVzIGFy
ZSBvcnBoYW5lZCAoIzEyMzkyKQorICAgICAgICAgICAgICAgIHRtcC50ZXh0Q29udGVudCA9ICIi
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gUmVtb3ZlIHdyYXBw
ZXIgZnJvbSBmcmFnbWVudAorICAgIGZyYWdtZW50LnRleHRDb250ZW50ID0gIiI7CisKKyAgICBp
ID0gMDsKKyAgICB3aGlsZSAoICggZWxlbSA9IG5vZGVzWyBpKysgXSApICkgeworCisgICAgICAg
IC8vIFNraXAgZWxlbWVudHMgYWxyZWFkeSBpbiB0aGUgY29udGV4dCBjb2xsZWN0aW9uICh0cmFj
LTQwODcpCisgICAgICAgIGlmICggc2VsZWN0aW9uICYmIGpRdWVyeS5pbkFycmF5KCBlbGVtLCBz
ZWxlY3Rpb24gKSA+IC0xICkgeworICAgICAgICAgICAgaWYgKCBpZ25vcmVkICkgeworICAgICAg
ICAgICAgICAgIGlnbm9yZWQucHVzaCggZWxlbSApOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBjb250YWlucyA9IGpRdWVyeS5jb250
YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICk7CisKKyAgICAgICAgLy8gQXBwZW5kIHRv
IGZyYWdtZW50CisgICAgICAgIHRtcCA9IGdldEFsbCggZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGVs
ZW0gKSwgInNjcmlwdCIgKTsKKworICAgICAgICAvLyBQcmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlv
biBoaXN0b3J5CisgICAgICAgIGlmICggY29udGFpbnMgKSB7CisgICAgICAgICAgICBzZXRHbG9i
YWxFdmFsKCB0bXAgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENhcHR1cmUgZXhlY3V0YWJs
ZXMKKyAgICAgICAgaWYgKCBzY3JpcHRzICkgeworICAgICAgICAgICAgaiA9IDA7CisgICAgICAg
ICAgICB3aGlsZSAoICggZWxlbSA9IHRtcFsgaisrIF0gKSApIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIHJzY3JpcHRUeXBlLnRlc3QoIGVsZW0udHlwZSB8fCAiIiApICkgeworICAgICAgICAgICAg
ICAgICAgICBzY3JpcHRzLnB1c2goIGVsZW0gKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZnJhZ21lbnQ7Cit9CisKKwor
KCBmdW5jdGlvbigpIHsKKyAgICB2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVu
dEZyYWdtZW50KCksCisgICAgICAgIGRpdiA9IGZyYWdtZW50LmFwcGVuZENoaWxkKCBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCAiZGl2IiApICksCisgICAgICAgIGlucHV0ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCggImlucHV0IiApOworCisgICAgLy8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0
LjMgb25seQorICAgIC8vIENoZWNrIHN0YXRlIGxvc3QgaWYgdGhlIG5hbWUgaXMgc2V0ICgjMTEy
MTcpCisgICAgLy8gU3VwcG9ydDogV2luZG93cyBXZWIgQXBwcyAoV1dBKQorICAgIC8vIGBuYW1l
YCBhbmQgYHR5cGVgIG11c3QgdXNlIC5zZXRBdHRyaWJ1dGUgZm9yIFdXQSAoIzE0OTAxKQorICAg
IGlucHV0LnNldEF0dHJpYnV0ZSggInR5cGUiLCAicmFkaW8iICk7CisgICAgaW5wdXQuc2V0QXR0
cmlidXRlKCAiY2hlY2tlZCIsICJjaGVja2VkIiApOworICAgIGlucHV0LnNldEF0dHJpYnV0ZSgg
Im5hbWUiLCAidCIgKTsKKworICAgIGRpdi5hcHBlbmRDaGlsZCggaW5wdXQgKTsKKworICAgIC8v
IFN1cHBvcnQ6IEFuZHJvaWQgPD00LjEgb25seQorICAgIC8vIE9sZGVyIFdlYktpdCBkb2Vzbid0
IGNsb25lIGNoZWNrZWQgc3RhdGUgY29ycmVjdGx5IGluIGZyYWdtZW50cworICAgIHN1cHBvcnQu
Y2hlY2tDbG9uZSA9IGRpdi5jbG9uZU5vZGUoIHRydWUgKS5jbG9uZU5vZGUoIHRydWUgKS5sYXN0
Q2hpbGQuY2hlY2tlZDsKKworICAgIC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seQorICAgIC8vIE1h
a2Ugc3VyZSB0ZXh0YXJlYSAoYW5kIGNoZWNrYm94KSBkZWZhdWx0VmFsdWUgaXMgcHJvcGVybHkg
Y2xvbmVkCisgICAgZGl2LmlubmVySFRNTCA9ICI8dGV4dGFyZWE+eDwvdGV4dGFyZWE+IjsKKyAg
ICBzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkID0gISFkaXYuY2xvbmVOb2RlKCB0cnVlICkubGFzdENo
aWxkLmRlZmF1bHRWYWx1ZTsKK30gKSgpOwordmFyIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50
LmRvY3VtZW50RWxlbWVudDsKKworCisKK3ZhcgorICAgIHJrZXlFdmVudCA9IC9ea2V5LywKKyAg
ICBybW91c2VFdmVudCA9IC9eKD86bW91c2V8cG9pbnRlcnxjb250ZXh0bWVudXxkcmFnfGRyb3Ap
fGNsaWNrLywKKyAgICBydHlwZW5hbWVzcGFjZSA9IC9eKFteLl0qKSg/OlwuKC4rKXwpLzsKKwor
ZnVuY3Rpb24gcmV0dXJuVHJ1ZSgpIHsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworZnVuY3Rpb24g
cmV0dXJuRmFsc2UoKSB7CisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBTdXBwb3J0OiBJRSA8
PTkgb25seQorLy8gU2VlICMxMzM5MyBmb3IgbW9yZSBpbmZvCitmdW5jdGlvbiBzYWZlQWN0aXZl
RWxlbWVudCgpIHsKKyAgICB0cnkgeworICAgICAgICByZXR1cm4gZG9jdW1lbnQuYWN0aXZlRWxl
bWVudDsKKyAgICB9IGNhdGNoICggZXJyICkgeyB9Cit9CisKK2Z1bmN0aW9uIG9uKCBlbGVtLCB0
eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuLCBvbmUgKSB7CisgICAgdmFyIG9yaWdGbiwgdHlwZTsK
KworICAgIC8vIFR5cGVzIGNhbiBiZSBhIG1hcCBvZiB0eXBlcy9oYW5kbGVycworICAgIGlmICgg
dHlwZW9mIHR5cGVzID09PSAib2JqZWN0IiApIHsKKworICAgICAgICAvLyAoIHR5cGVzLU9iamVj
dCwgc2VsZWN0b3IsIGRhdGEgKQorICAgICAgICBpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gInN0
cmluZyIgKSB7CisKKyAgICAgICAgICAgIC8vICggdHlwZXMtT2JqZWN0LCBkYXRhICkKKyAgICAg
ICAgICAgIGRhdGEgPSBkYXRhIHx8IHNlbGVjdG9yOworICAgICAgICAgICAgc2VsZWN0b3IgPSB1
bmRlZmluZWQ7CisgICAgICAgIH0KKyAgICAgICAgZm9yICggdHlwZSBpbiB0eXBlcyApIHsKKyAg
ICAgICAgICAgIG9uKCBlbGVtLCB0eXBlLCBzZWxlY3RvciwgZGF0YSwgdHlwZXNbIHR5cGUgXSwg
b25lICk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGVsZW07CisgICAgfQorCisgICAgaWYg
KCBkYXRhID09IG51bGwgJiYgZm4gPT0gbnVsbCApIHsKKworICAgICAgICAvLyAoIHR5cGVzLCBm
biApCisgICAgICAgIGZuID0gc2VsZWN0b3I7CisgICAgICAgIGRhdGEgPSBzZWxlY3RvciA9IHVu
ZGVmaW5lZDsKKyAgICB9IGVsc2UgaWYgKCBmbiA9PSBudWxsICkgeworICAgICAgICBpZiAoIHR5
cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIgKSB7CisKKyAgICAgICAgICAgIC8vICggdHlwZXMs
IHNlbGVjdG9yLCBmbiApCisgICAgICAgICAgICBmbiA9IGRhdGE7CisgICAgICAgICAgICBkYXRh
ID0gdW5kZWZpbmVkOworICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAvLyAoIHR5cGVz
LCBkYXRhLCBmbiApCisgICAgICAgICAgICBmbiA9IGRhdGE7CisgICAgICAgICAgICBkYXRhID0g
c2VsZWN0b3I7CisgICAgICAgICAgICBzZWxlY3RvciA9IHVuZGVmaW5lZDsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBpZiAoIGZuID09PSBmYWxzZSApIHsKKyAgICAgICAgZm4gPSByZXR1cm5GYWxz
ZTsKKyAgICB9IGVsc2UgaWYgKCAhZm4gKSB7CisgICAgICAgIHJldHVybiBlbGVtOworICAgIH0K
KworICAgIGlmICggb25lID09PSAxICkgeworICAgICAgICBvcmlnRm4gPSBmbjsKKyAgICAgICAg
Zm4gPSBmdW5jdGlvbiggZXZlbnQgKSB7CisKKyAgICAgICAgICAgIC8vIENhbiB1c2UgYW4gZW1w
dHkgc2V0LCBzaW5jZSBldmVudCBjb250YWlucyB0aGUgaW5mbworICAgICAgICAgICAgalF1ZXJ5
KCkub2ZmKCBldmVudCApOworICAgICAgICAgICAgcmV0dXJuIG9yaWdGbi5hcHBseSggdGhpcywg
YXJndW1lbnRzICk7CisgICAgICAgIH07CisKKyAgICAgICAgLy8gVXNlIHNhbWUgZ3VpZCBzbyBj
YWxsZXIgY2FuIHJlbW92ZSB1c2luZyBvcmlnRm4KKyAgICAgICAgZm4uZ3VpZCA9IG9yaWdGbi5n
dWlkIHx8ICggb3JpZ0ZuLmd1aWQgPSBqUXVlcnkuZ3VpZCsrICk7CisgICAgfQorICAgIHJldHVy
biBlbGVtLmVhY2goIGZ1bmN0aW9uKCkgeworICAgICAgICBqUXVlcnkuZXZlbnQuYWRkKCB0aGlz
LCB0eXBlcywgZm4sIGRhdGEsIHNlbGVjdG9yICk7CisgICAgfSApOworfQorCisvKgorICogSGVs
cGVyIGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgZXZlbnRzIC0tIG5vdCBwYXJ0IG9mIHRoZSBwdWJs
aWMgaW50ZXJmYWNlLgorICogUHJvcHMgdG8gRGVhbiBFZHdhcmRzJyBhZGRFdmVudCBsaWJyYXJ5
IGZvciBtYW55IG9mIHRoZSBpZGVhcy4KKyAqLworalF1ZXJ5LmV2ZW50ID0geworCisgICAgZ2xv
YmFsOiB7fSwKKworICAgIGFkZDogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBkYXRh
LCBzZWxlY3RvciApIHsKKworICAgICAgICB2YXIgaGFuZGxlT2JqSW4sIGV2ZW50SGFuZGxlLCB0
bXAsCisgICAgICAgICAgICBldmVudHMsIHQsIGhhbmRsZU9iaiwKKyAgICAgICAgICAgIHNwZWNp
YWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSwKKyAgICAgICAgICAgIGVs
ZW1EYXRhID0gZGF0YVByaXYuZ2V0KCBlbGVtICk7CisKKyAgICAgICAgLy8gRG9uJ3QgYXR0YWNo
IGV2ZW50cyB0byBub0RhdGEgb3IgdGV4dC9jb21tZW50IG5vZGVzIChidXQgYWxsb3cgcGxhaW4g
b2JqZWN0cykKKyAgICAgICAgaWYgKCAhZWxlbURhdGEgKSB7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICAvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYW4gb2JqZWN0IG9m
IGN1c3RvbSBkYXRhIGluIGxpZXUgb2YgdGhlIGhhbmRsZXIKKyAgICAgICAgaWYgKCBoYW5kbGVy
LmhhbmRsZXIgKSB7CisgICAgICAgICAgICBoYW5kbGVPYmpJbiA9IGhhbmRsZXI7CisgICAgICAg
ICAgICBoYW5kbGVyID0gaGFuZGxlT2JqSW4uaGFuZGxlcjsKKyAgICAgICAgICAgIHNlbGVjdG9y
ID0gaGFuZGxlT2JqSW4uc2VsZWN0b3I7CisgICAgICAgIH0KKworICAgICAgICAvLyBFbnN1cmUg
dGhhdCBpbnZhbGlkIHNlbGVjdG9ycyB0aHJvdyBleGNlcHRpb25zIGF0IGF0dGFjaCB0aW1lCisg
ICAgICAgIC8vIEV2YWx1YXRlIGFnYWluc3QgZG9jdW1lbnRFbGVtZW50IGluIGNhc2UgZWxlbSBp
cyBhIG5vbi1lbGVtZW50IG5vZGUgKGUuZy4sIGRvY3VtZW50KQorICAgICAgICBpZiAoIHNlbGVj
dG9yICkgeworICAgICAgICAgICAgalF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBkb2N1bWVu
dEVsZW1lbnQsIHNlbGVjdG9yICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBNYWtlIHN1cmUg
dGhhdCB0aGUgaGFuZGxlciBoYXMgYSB1bmlxdWUgSUQsIHVzZWQgdG8gZmluZC9yZW1vdmUgaXQg
bGF0ZXIKKyAgICAgICAgaWYgKCAhaGFuZGxlci5ndWlkICkgeworICAgICAgICAgICAgaGFuZGxl
ci5ndWlkID0galF1ZXJ5Lmd1aWQrKzsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEluaXQgdGhl
IGVsZW1lbnQncyBldmVudCBzdHJ1Y3R1cmUgYW5kIG1haW4gaGFuZGxlciwgaWYgdGhpcyBpcyB0
aGUgZmlyc3QKKyAgICAgICAgaWYgKCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHsK
KyAgICAgICAgICAgIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyA9IHt9OworICAgICAgICB9Cisg
ICAgICAgIGlmICggISggZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgKSApIHsKKyAgICAg
ICAgICAgIGV2ZW50SGFuZGxlID0gZWxlbURhdGEuaGFuZGxlID0gZnVuY3Rpb24oIGUgKSB7CisK
KyAgICAgICAgICAgICAgICAvLyBEaXNjYXJkIHRoZSBzZWNvbmQgZXZlbnQgb2YgYSBqUXVlcnku
ZXZlbnQudHJpZ2dlcigpIGFuZAorICAgICAgICAgICAgICAgIC8vIHdoZW4gYW4gZXZlbnQgaXMg
Y2FsbGVkIGFmdGVyIGEgcGFnZSBoYXMgdW5sb2FkZWQKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHlwZW9mIGpRdWVyeSAhPT0gInVuZGVmaW5lZCIgJiYgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCAh
PT0gZS50eXBlID8KKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LmRpc3BhdGNoLmFw
cGx5KCBlbGVtLCBhcmd1bWVudHMgKSA6IHVuZGVmaW5lZDsKKyAgICAgICAgICAgIH07CisgICAg
ICAgIH0KKworICAgICAgICAvLyBIYW5kbGUgbXVsdGlwbGUgZXZlbnRzIHNlcGFyYXRlZCBieSBh
IHNwYWNlCisgICAgICAgIHR5cGVzID0gKCB0eXBlcyB8fCAiIiApLm1hdGNoKCBybm90aHRtbHdo
aXRlICkgfHwgWyAiIiBdOworICAgICAgICB0ID0gdHlwZXMubGVuZ3RoOworICAgICAgICB3aGls
ZSAoIHQtLSApIHsKKyAgICAgICAgICAgIHRtcCA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVz
WyB0IF0gKSB8fCBbXTsKKyAgICAgICAgICAgIHR5cGUgPSBvcmlnVHlwZSA9IHRtcFsgMSBdOwor
ICAgICAgICAgICAgbmFtZXNwYWNlcyA9ICggdG1wWyAyIF0gfHwgIiIgKS5zcGxpdCggIi4iICku
c29ydCgpOworCisgICAgICAgICAgICAvLyBUaGVyZSAqbXVzdCogYmUgYSB0eXBlLCBubyBhdHRh
Y2hpbmcgbmFtZXNwYWNlLW9ubHkgaGFuZGxlcnMKKyAgICAgICAgICAgIGlmICggIXR5cGUgKSB7
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC8vIElmIGV2ZW50IGNoYW5nZXMgaXRzIHR5cGUsIHVzZSB0aGUgc3BlY2lhbCBldmVudCBoYW5k
bGVycyBmb3IgdGhlIGNoYW5nZWQgdHlwZQorICAgICAgICAgICAgc3BlY2lhbCA9IGpRdWVyeS5l
dmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307CisKKyAgICAgICAgICAgIC8vIElmIHNlbGVjdG9y
IGRlZmluZWQsIGRldGVybWluZSBzcGVjaWFsIGV2ZW50IGFwaSB0eXBlLCBvdGhlcndpc2UgZ2l2
ZW4gdHlwZQorICAgICAgICAgICAgdHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRl
VHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlOworCisgICAgICAgICAgICAvLyBVcGRh
dGUgc3BlY2lhbCBiYXNlZCBvbiBuZXdseSByZXNldCB0eXBlCisgICAgICAgICAgICBzcGVjaWFs
ID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTsKKworICAgICAgICAgICAgLy8g
aGFuZGxlT2JqIGlzIHBhc3NlZCB0byBhbGwgZXZlbnQgaGFuZGxlcnMKKyAgICAgICAgICAgIGhh
bmRsZU9iaiA9IGpRdWVyeS5leHRlbmQoIHsKKyAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLAor
ICAgICAgICAgICAgICAgIG9yaWdUeXBlOiBvcmlnVHlwZSwKKyAgICAgICAgICAgICAgICBkYXRh
OiBkYXRhLAorICAgICAgICAgICAgICAgIGhhbmRsZXI6IGhhbmRsZXIsCisgICAgICAgICAgICAg
ICAgZ3VpZDogaGFuZGxlci5ndWlkLAorICAgICAgICAgICAgICAgIHNlbGVjdG9yOiBzZWxlY3Rv
ciwKKyAgICAgICAgICAgICAgICBuZWVkc0NvbnRleHQ6IHNlbGVjdG9yICYmIGpRdWVyeS5leHBy
Lm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApLAorICAgICAgICAgICAgICAgIG5h
bWVzcGFjZTogbmFtZXNwYWNlcy5qb2luKCAiLiIgKQorICAgICAgICAgICAgfSwgaGFuZGxlT2Jq
SW4gKTsKKworICAgICAgICAgICAgLy8gSW5pdCB0aGUgZXZlbnQgaGFuZGxlciBxdWV1ZSBpZiB3
ZSdyZSB0aGUgZmlyc3QKKyAgICAgICAgICAgIGlmICggISggaGFuZGxlcnMgPSBldmVudHNbIHR5
cGUgXSApICkgeworICAgICAgICAgICAgICAgIGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gPSBb
XTsKKyAgICAgICAgICAgICAgICBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50ID0gMDsKKworICAgICAg
ICAgICAgICAgIC8vIE9ubHkgdXNlIGFkZEV2ZW50TGlzdGVuZXIgaWYgdGhlIHNwZWNpYWwgZXZl
bnRzIGhhbmRsZXIgcmV0dXJucyBmYWxzZQorICAgICAgICAgICAgICAgIGlmICggIXNwZWNpYWwu
c2V0dXAgfHwKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lhbC5zZXR1cC5jYWxsKCBlbGVtLCBk
YXRhLCBuYW1lc3BhY2VzLCBldmVudEhhbmRsZSApID09PSBmYWxzZSApIHsKKworICAgICAgICAg
ICAgICAgICAgICBpZiAoIGVsZW0uYWRkRXZlbnRMaXN0ZW5lciApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGVsZW0uYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgZXZlbnRIYW5kbGUgKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKCBzcGVjaWFsLmFkZCApIHsKKyAgICAgICAgICAgICAgICBzcGVjaWFs
LmFkZC5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTsKKworICAgICAgICAgICAgICAgIGlmICggIWhh
bmRsZU9iai5oYW5kbGVyLmd1aWQgKSB7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9iai5o
YW5kbGVyLmd1aWQgPSBoYW5kbGVyLmd1aWQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBBZGQgdG8gdGhlIGVsZW1lbnQncyBoYW5kbGVyIGxpc3Qs
IGRlbGVnYXRlcyBpbiBmcm9udAorICAgICAgICAgICAgaWYgKCBzZWxlY3RvciApIHsKKyAgICAg
ICAgICAgICAgICBoYW5kbGVycy5zcGxpY2UoIGhhbmRsZXJzLmRlbGVnYXRlQ291bnQrKywgMCwg
aGFuZGxlT2JqICk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGhhbmRs
ZXJzLnB1c2goIGhhbmRsZU9iaiApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBL
ZWVwIHRyYWNrIG9mIHdoaWNoIGV2ZW50cyBoYXZlIGV2ZXIgYmVlbiB1c2VkLCBmb3IgZXZlbnQg
b3B0aW1pemF0aW9uCisgICAgICAgICAgICBqUXVlcnkuZXZlbnQuZ2xvYmFsWyB0eXBlIF0gPSB0
cnVlOworICAgICAgICB9CisKKyAgICB9LAorCisgICAgLy8gRGV0YWNoIGFuIGV2ZW50IG9yIHNl
dCBvZiBldmVudHMgZnJvbSBhbiBlbGVtZW50CisgICAgcmVtb3ZlOiBmdW5jdGlvbiggZWxlbSwg
dHlwZXMsIGhhbmRsZXIsIHNlbGVjdG9yLCBtYXBwZWRUeXBlcyApIHsKKworICAgICAgICB2YXIg
aiwgb3JpZ0NvdW50LCB0bXAsCisgICAgICAgICAgICBldmVudHMsIHQsIGhhbmRsZU9iaiwKKyAg
ICAgICAgICAgIHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSwK
KyAgICAgICAgICAgIGVsZW1EYXRhID0gZGF0YVByaXYuaGFzRGF0YSggZWxlbSApICYmIGRhdGFQ
cml2LmdldCggZWxlbSApOworCisgICAgICAgIGlmICggIWVsZW1EYXRhIHx8ICEoIGV2ZW50cyA9
IGVsZW1EYXRhLmV2ZW50cyApICkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgLy8gT25jZSBmb3IgZWFjaCB0eXBlLm5hbWVzcGFjZSBpbiB0eXBlczsgdHlwZSBt
YXkgYmUgb21pdHRlZAorICAgICAgICB0eXBlcyA9ICggdHlwZXMgfHwgIiIgKS5tYXRjaCggcm5v
dGh0bWx3aGl0ZSApIHx8IFsgIiIgXTsKKyAgICAgICAgdCA9IHR5cGVzLmxlbmd0aDsKKyAgICAg
ICAgd2hpbGUgKCB0LS0gKSB7CisgICAgICAgICAgICB0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVj
KCB0eXBlc1sgdCBdICkgfHwgW107CisgICAgICAgICAgICB0eXBlID0gb3JpZ1R5cGUgPSB0bXBb
IDEgXTsKKyAgICAgICAgICAgIG5hbWVzcGFjZXMgPSAoIHRtcFsgMiBdIHx8ICIiICkuc3BsaXQo
ICIuIiApLnNvcnQoKTsKKworICAgICAgICAgICAgLy8gVW5iaW5kIGFsbCBldmVudHMgKG9uIHRo
aXMgbmFtZXNwYWNlLCBpZiBwcm92aWRlZCkgZm9yIHRoZSBlbGVtZW50CisgICAgICAgICAgICBp
ZiAoICF0eXBlICkgeworICAgICAgICAgICAgICAgIGZvciAoIHR5cGUgaW4gZXZlbnRzICkgewor
ICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICsgdHlw
ZXNbIHQgXSwgaGFuZGxlciwgc2VsZWN0b3IsIHRydWUgKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNw
ZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9OworICAgICAgICAgICAg
dHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5
cGUgKSB8fCB0eXBlOworICAgICAgICAgICAgaGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSB8fCBb
XTsKKyAgICAgICAgICAgIHRtcCA9IHRtcFsgMiBdICYmCisgICAgICAgICAgICAgICAgbmV3IFJl
Z0V4cCggIihefFxcLikiICsgbmFtZXNwYWNlcy5qb2luKCAiXFwuKD86LipcXC58KSIgKSArICIo
XFwufCQpIiApOworCisgICAgICAgICAgICAvLyBSZW1vdmUgbWF0Y2hpbmcgZXZlbnRzCisgICAg
ICAgICAgICBvcmlnQ291bnQgPSBqID0gaGFuZGxlcnMubGVuZ3RoOworICAgICAgICAgICAgd2hp
bGUgKCBqLS0gKSB7CisgICAgICAgICAgICAgICAgaGFuZGxlT2JqID0gaGFuZGxlcnNbIGogXTsK
KworICAgICAgICAgICAgICAgIGlmICggKCBtYXBwZWRUeXBlcyB8fCBvcmlnVHlwZSA9PT0gaGFu
ZGxlT2JqLm9yaWdUeXBlICkgJiYKKyAgICAgICAgICAgICAgICAgICAgKCAhaGFuZGxlciB8fCBo
YW5kbGVyLmd1aWQgPT09IGhhbmRsZU9iai5ndWlkICkgJiYKKyAgICAgICAgICAgICAgICAgICAg
KCAhdG1wIHx8IHRtcC50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSAmJgorICAgICAgICAg
ICAgICAgICAgICAoICFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gaGFuZGxlT2JqLnNlbGVjdG9y
IHx8CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvciA9PT0gIioqIiAmJiBoYW5kbGVP
Ymouc2VsZWN0b3IgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnMuc3BsaWNlKCBq
LCAxICk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBoYW5kbGVPYmouc2VsZWN0b3IgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LS07CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCBzcGVjaWFsLnJlbW92
ZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpYWwucmVtb3ZlLmNhbGwoIGVsZW0s
IGhhbmRsZU9iaiApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBSZW1vdmUgZ2VuZXJpYyBldmVudCBoYW5k
bGVyIGlmIHdlIHJlbW92ZWQgc29tZXRoaW5nIGFuZCBubyBtb3JlIGhhbmRsZXJzIGV4aXN0Cisg
ICAgICAgICAgICAvLyAoYXZvaWRzIHBvdGVudGlhbCBmb3IgZW5kbGVzcyByZWN1cnNpb24gZHVy
aW5nIHJlbW92YWwgb2Ygc3BlY2lhbCBldmVudCBoYW5kbGVycykKKyAgICAgICAgICAgIGlmICgg
b3JpZ0NvdW50ICYmICFoYW5kbGVycy5sZW5ndGggKSB7CisgICAgICAgICAgICAgICAgaWYgKCAh
c3BlY2lhbC50ZWFyZG93biB8fAorICAgICAgICAgICAgICAgICAgICBzcGVjaWFsLnRlYXJkb3du
LmNhbGwoIGVsZW0sIG5hbWVzcGFjZXMsIGVsZW1EYXRhLmhhbmRsZSApID09PSBmYWxzZSApIHsK
KworICAgICAgICAgICAgICAgICAgICBqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGVs
ZW1EYXRhLmhhbmRsZSApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGRl
bGV0ZSBldmVudHNbIHR5cGUgXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IC8vIFJlbW92ZSBkYXRhIGFuZCB0aGUgZXhwYW5kbyBpZiBpdCdzIG5vIGxvbmdlciB1c2VkCisg
ICAgICAgIGlmICggalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGV2ZW50cyApICkgeworICAgICAgICAg
ICAgZGF0YVByaXYucmVtb3ZlKCBlbGVtLCAiaGFuZGxlIGV2ZW50cyIgKTsKKyAgICAgICAgfQor
ICAgIH0sCisKKyAgICBkaXNwYXRjaDogZnVuY3Rpb24oIG5hdGl2ZUV2ZW50ICkgeworCisgICAg
ICAgIC8vIE1ha2UgYSB3cml0YWJsZSBqUXVlcnkuRXZlbnQgZnJvbSB0aGUgbmF0aXZlIGV2ZW50
IG9iamVjdAorICAgICAgICB2YXIgZXZlbnQgPSBqUXVlcnkuZXZlbnQuZml4KCBuYXRpdmVFdmVu
dCApOworCisgICAgICAgIHZhciBpLCBqLCByZXQsIG1hdGNoZWQsIGhhbmRsZU9iaiwgaGFuZGxl
clF1ZXVlLAorICAgICAgICAgICAgYXJncyA9IG5ldyBBcnJheSggYXJndW1lbnRzLmxlbmd0aCAp
LAorICAgICAgICAgICAgaGFuZGxlcnMgPSAoIGRhdGFQcml2LmdldCggdGhpcywgImV2ZW50cyIg
KSB8fCB7fSApWyBldmVudC50eXBlIF0gfHwgW10sCisgICAgICAgICAgICBzcGVjaWFsID0galF1
ZXJ5LmV2ZW50LnNwZWNpYWxbIGV2ZW50LnR5cGUgXSB8fCB7fTsKKworICAgICAgICAvLyBVc2Ug
dGhlIGZpeC1lZCBqUXVlcnkuRXZlbnQgcmF0aGVyIHRoYW4gdGhlIChyZWFkLW9ubHkpIG5hdGl2
ZSBldmVudAorICAgICAgICBhcmdzWyAwIF0gPSBldmVudDsKKworICAgICAgICBmb3IgKCBpID0g
MTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKyApIHsKKyAgICAgICAgICAgIGFyZ3NbIGkgXSA9
IGFyZ3VtZW50c1sgaSBdOworICAgICAgICB9CisKKyAgICAgICAgZXZlbnQuZGVsZWdhdGVUYXJn
ZXQgPSB0aGlzOworCisgICAgICAgIC8vIENhbGwgdGhlIHByZURpc3BhdGNoIGhvb2sgZm9yIHRo
ZSBtYXBwZWQgdHlwZSwgYW5kIGxldCBpdCBiYWlsIGlmIGRlc2lyZWQKKyAgICAgICAgaWYgKCBz
cGVjaWFsLnByZURpc3BhdGNoICYmIHNwZWNpYWwucHJlRGlzcGF0Y2guY2FsbCggdGhpcywgZXZl
bnQgKSA9PT0gZmFsc2UgKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICAvLyBEZXRlcm1pbmUgaGFuZGxlcnMKKyAgICAgICAgaGFuZGxlclF1ZXVlID0galF1ZXJ5
LmV2ZW50LmhhbmRsZXJzLmNhbGwoIHRoaXMsIGV2ZW50LCBoYW5kbGVycyApOworCisgICAgICAg
IC8vIFJ1biBkZWxlZ2F0ZXMgZmlyc3Q7IHRoZXkgbWF5IHdhbnQgdG8gc3RvcCBwcm9wYWdhdGlv
biBiZW5lYXRoIHVzCisgICAgICAgIGkgPSAwOworICAgICAgICB3aGlsZSAoICggbWF0Y2hlZCA9
IGhhbmRsZXJRdWV1ZVsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSAp
IHsKKyAgICAgICAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBtYXRjaGVkLmVsZW07CisKKyAg
ICAgICAgICAgIGogPSAwOworICAgICAgICAgICAgd2hpbGUgKCAoIGhhbmRsZU9iaiA9IG1hdGNo
ZWQuaGFuZGxlcnNbIGorKyBdICkgJiYKKyAgICAgICAgICAgICAgICAhZXZlbnQuaXNJbW1lZGlh
dGVQcm9wYWdhdGlvblN0b3BwZWQoKSApIHsKKworICAgICAgICAgICAgICAgIC8vIFRyaWdnZXJl
ZCBldmVudCBtdXN0IGVpdGhlciAxKSBoYXZlIG5vIG5hbWVzcGFjZSwgb3IgMikgaGF2ZSBuYW1l
c3BhY2UocykKKyAgICAgICAgICAgICAgICAvLyBhIHN1YnNldCBvciBlcXVhbCB0byB0aG9zZSBp
biB0aGUgYm91bmQgZXZlbnQgKGJvdGggY2FuIGhhdmUgbm8gbmFtZXNwYWNlKS4KKyAgICAgICAg
ICAgICAgICBpZiAoICFldmVudC5ybmFtZXNwYWNlIHx8IGV2ZW50LnJuYW1lc3BhY2UudGVzdCgg
aGFuZGxlT2JqLm5hbWVzcGFjZSApICkgeworCisgICAgICAgICAgICAgICAgICAgIGV2ZW50Lmhh
bmRsZU9iaiA9IGhhbmRsZU9iajsKKyAgICAgICAgICAgICAgICAgICAgZXZlbnQuZGF0YSA9IGhh
bmRsZU9iai5kYXRhOworCisgICAgICAgICAgICAgICAgICAgIHJldCA9ICggKCBqUXVlcnkuZXZl
bnQuc3BlY2lhbFsgaGFuZGxlT2JqLm9yaWdUeXBlIF0gfHwge30gKS5oYW5kbGUgfHwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGhhbmRsZU9iai5oYW5kbGVyICkuYXBwbHkoIG1hdGNoZWQuZWxl
bSwgYXJncyApOworCisgICAgICAgICAgICAgICAgICAgIGlmICggcmV0ICE9PSB1bmRlZmluZWQg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICggZXZlbnQucmVzdWx0ID0gcmV0ICkg
PT09IGZhbHNlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnRE
ZWZhdWx0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0
aW9uKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAv
LyBDYWxsIHRoZSBwb3N0RGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlCisgICAgICAg
IGlmICggc3BlY2lhbC5wb3N0RGlzcGF0Y2ggKSB7CisgICAgICAgICAgICBzcGVjaWFsLnBvc3RE
aXNwYXRjaC5jYWxsKCB0aGlzLCBldmVudCApOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IGV2ZW50LnJlc3VsdDsKKyAgICB9LAorCisgICAgaGFuZGxlcnM6IGZ1bmN0aW9uKCBldmVudCwg
aGFuZGxlcnMgKSB7CisgICAgICAgIHZhciBpLCBoYW5kbGVPYmosIHNlbCwgbWF0Y2hlZEhhbmRs
ZXJzLCBtYXRjaGVkU2VsZWN0b3JzLAorICAgICAgICAgICAgaGFuZGxlclF1ZXVlID0gW10sCisg
ICAgICAgICAgICBkZWxlZ2F0ZUNvdW50ID0gaGFuZGxlcnMuZGVsZWdhdGVDb3VudCwKKyAgICAg
ICAgICAgIGN1ciA9IGV2ZW50LnRhcmdldDsKKworICAgICAgICAvLyBGaW5kIGRlbGVnYXRlIGhh
bmRsZXJzCisgICAgICAgIGlmICggZGVsZWdhdGVDb3VudCAmJgorCisgICAgICAgICAgICAvLyBT
dXBwb3J0OiBJRSA8PTkKKyAgICAgICAgICAgIC8vIEJsYWNrLWhvbGUgU1ZHIDx1c2U+IGluc3Rh
bmNlIHRyZWVzICh0cmFjLTEzMTgwKQorICAgICAgICAgICAgY3VyLm5vZGVUeXBlICYmCisKKyAg
ICAgICAgICAgIC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00MgorICAgICAgICAgICAgLy8gU3VwcHJl
c3Mgc3BlYy12aW9sYXRpbmcgY2xpY2tzIGluZGljYXRpbmcgYSBub24tcHJpbWFyeSBwb2ludGVy
IGJ1dHRvbiAodHJhYy0zODYxKQorICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RS
L0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnQtdHlwZS1jbGljaworICAgICAgICAgICAgLy8gU3Vw
cG9ydDogSUUgMTEgb25seQorICAgICAgICAgICAgLy8gLi4uYnV0IG5vdCBhcnJvdyBrZXkgImNs
aWNrcyIgb2YgcmFkaW8gaW5wdXRzLCB3aGljaCBjYW4gaGF2ZSBgYnV0dG9uYCAtMSAoZ2gtMjM0
MykKKyAgICAgICAgICAgICEoIGV2ZW50LnR5cGUgPT09ICJjbGljayIgJiYgZXZlbnQuYnV0dG9u
ID49IDEgKSApIHsKKworICAgICAgICAgICAgZm9yICggOyBjdXIgIT09IHRoaXM7IGN1ciA9IGN1
ci5wYXJlbnROb2RlIHx8IHRoaXMgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBEb24ndCBjaGVj
ayBub24tZWxlbWVudHMgKCMxMzIwOCkKKyAgICAgICAgICAgICAgICAvLyBEb24ndCBwcm9jZXNz
IGNsaWNrcyBvbiBkaXNhYmxlZCBlbGVtZW50cyAoIzY5MTEsICM4MTY1LCAjMTEzODIsICMxMTc2
NCkKKyAgICAgICAgICAgICAgICBpZiAoIGN1ci5ub2RlVHlwZSA9PT0gMSAmJiAhKCBldmVudC50
eXBlID09PSAiY2xpY2siICYmIGN1ci5kaXNhYmxlZCA9PT0gdHJ1ZSApICkgeworICAgICAgICAg
ICAgICAgICAgICBtYXRjaGVkSGFuZGxlcnMgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAgbWF0
Y2hlZFNlbGVjdG9ycyA9IHt9OworICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8
IGRlbGVnYXRlQ291bnQ7IGkrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9i
aiA9IGhhbmRsZXJzWyBpIF07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IGNv
bmZsaWN0IHdpdGggT2JqZWN0LnByb3RvdHlwZSBwcm9wZXJ0aWVzICgjMTMyMDMpCisgICAgICAg
ICAgICAgICAgICAgICAgICBzZWwgPSBoYW5kbGVPYmouc2VsZWN0b3IgKyAiICI7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggbWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gPT09IHVuZGVm
aW5lZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkU2VsZWN0b3JzWyBz
ZWwgXSA9IGhhbmRsZU9iai5uZWVkc0NvbnRleHQgPworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqUXVlcnkoIHNlbCwgdGhpcyApLmluZGV4KCBjdXIgKSA+IC0xIDoKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmZpbmQoIHNlbCwgdGhpcywgbnVsbCwgWyBj
dXIgXSApLmxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggbWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWF0Y2hlZEhhbmRsZXJzLnB1c2goIGhhbmRsZU9iaiApOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGlmICggbWF0Y2hlZEhhbmRsZXJzLmxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGhhbmRsZXJRdWV1ZS5wdXNoKCB7IGVsZW06IGN1ciwgaGFuZGxlcnM6IG1hdGNoZWRI
YW5kbGVycyB9ICk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBBZGQgdGhlIHJlbWFpbmluZyAo
ZGlyZWN0bHktYm91bmQpIGhhbmRsZXJzCisgICAgICAgIGN1ciA9IHRoaXM7CisgICAgICAgIGlm
ICggZGVsZWdhdGVDb3VudCA8IGhhbmRsZXJzLmxlbmd0aCApIHsKKyAgICAgICAgICAgIGhhbmRs
ZXJRdWV1ZS5wdXNoKCB7IGVsZW06IGN1ciwgaGFuZGxlcnM6IGhhbmRsZXJzLnNsaWNlKCBkZWxl
Z2F0ZUNvdW50ICkgfSApOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGhhbmRsZXJRdWV1
ZTsKKyAgICB9LAorCisgICAgYWRkUHJvcDogZnVuY3Rpb24oIG5hbWUsIGhvb2sgKSB7CisgICAg
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggalF1ZXJ5LkV2ZW50LnByb3RvdHlwZSwgbmFtZSwg
eworICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZSwKKworICAgICAgICAgICAgZ2V0OiBqUXVlcnkuaXNGdW5jdGlvbiggaG9vayApID8K
KyAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCB0
aGlzLm9yaWdpbmFsRXZlbnQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGhvb2soIHRoaXMub3JpZ2luYWxFdmVudCApOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfSA6CisgICAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmICggdGhpcy5vcmlnaW5hbEV2ZW50ICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsRXZlbnRbIG5hbWUgXTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIHNldDogZnVuY3Rp
b24oIHZhbHVlICkgeworICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggdGhp
cywgbmFtZSwgeworICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAorICAgICAg
ICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCisgICAgICAgICAgICAgICAgICAgIHdy
aXRhYmxlOiB0cnVlLAorICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUKKyAgICAgICAg
ICAgICAgICB9ICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gKTsKKyAgICB9LAorCisgICAg
Zml4OiBmdW5jdGlvbiggb3JpZ2luYWxFdmVudCApIHsKKyAgICAgICAgcmV0dXJuIG9yaWdpbmFs
RXZlbnRbIGpRdWVyeS5leHBhbmRvIF0gPworICAgICAgICAgICAgb3JpZ2luYWxFdmVudCA6Cisg
ICAgICAgICAgICBuZXcgalF1ZXJ5LkV2ZW50KCBvcmlnaW5hbEV2ZW50ICk7CisgICAgfSwKKwor
ICAgIHNwZWNpYWw6IHsKKyAgICAgICAgbG9hZDogeworCisgICAgICAgICAgICAvLyBQcmV2ZW50
IHRyaWdnZXJlZCBpbWFnZS5sb2FkIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIHdpbmRvdy5sb2Fk
CisgICAgICAgICAgICBub0J1YmJsZTogdHJ1ZQorICAgICAgICB9LAorICAgICAgICBmb2N1czog
eworCisgICAgICAgICAgICAvLyBGaXJlIG5hdGl2ZSBldmVudCBpZiBwb3NzaWJsZSBzbyBibHVy
L2ZvY3VzIHNlcXVlbmNlIGlzIGNvcnJlY3QKKyAgICAgICAgICAgIHRyaWdnZXI6IGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgICAgIGlmICggdGhpcyAhPT0gc2FmZUFjdGl2ZUVsZW1lbnQoKSAm
JiB0aGlzLmZvY3VzICkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzKCk7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9LAorICAgICAgICAgICAgZGVsZWdhdGVUeXBlOiAiZm9jdXNpbiIKKyAgICAgICAgfSwK
KyAgICAgICAgYmx1cjogeworICAgICAgICAgICAgdHJpZ2dlcjogZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCB0aGlzID09PSBzYWZlQWN0aXZlRWxlbWVudCgpICYmIHRoaXMuYmx1
ciApIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5ibHVyKCk7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAg
ICAgICAgICAgZGVsZWdhdGVUeXBlOiAiZm9jdXNvdXQiCisgICAgICAgIH0sCisgICAgICAgIGNs
aWNrOiB7CisKKyAgICAgICAgICAgIC8vIEZvciBjaGVja2JveCwgZmlyZSBuYXRpdmUgZXZlbnQg
c28gY2hlY2tlZCBzdGF0ZSB3aWxsIGJlIHJpZ2h0CisgICAgICAgICAgICB0cmlnZ2VyOiBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgICAgICBpZiAoIHRoaXMudHlwZSA9PT0gImNoZWNrYm94IiAm
JiB0aGlzLmNsaWNrICYmIGpRdWVyeS5ub2RlTmFtZSggdGhpcywgImlucHV0IiApICkgeworICAg
ICAgICAgICAgICAgICAgICB0aGlzLmNsaWNrKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorCisgICAgICAgICAg
ICAvLyBGb3IgY3Jvc3MtYnJvd3NlciBjb25zaXN0ZW5jeSwgZG9uJ3QgZmlyZSBuYXRpdmUgLmNs
aWNrKCkgb24gbGlua3MKKyAgICAgICAgICAgIF9kZWZhdWx0OiBmdW5jdGlvbiggZXZlbnQgKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5ub2RlTmFtZSggZXZlbnQudGFyZ2V0LCAi
YSIgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKworICAgICAgICBiZWZvcmV1bmxvYWQ6
IHsKKyAgICAgICAgICAgIHBvc3REaXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50ICkgeworCisgICAg
ICAgICAgICAgICAgLy8gU3VwcG9ydDogRmlyZWZveCAyMCsKKyAgICAgICAgICAgICAgICAvLyBG
aXJlZm94IGRvZXNuJ3QgYWxlcnQgaWYgdGhlIHJldHVyblZhbHVlIGZpZWxkIGlzIG5vdCBzZXQu
CisgICAgICAgICAgICAgICAgaWYgKCBldmVudC5yZXN1bHQgIT09IHVuZGVmaW5lZCAmJiBldmVu
dC5vcmlnaW5hbEV2ZW50ICkgeworICAgICAgICAgICAgICAgICAgICBldmVudC5vcmlnaW5hbEV2
ZW50LnJldHVyblZhbHVlID0gZXZlbnQucmVzdWx0OworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK307CisKK2pRdWVyeS5yZW1vdmVFdmVudCA9IGZ1
bmN0aW9uKCBlbGVtLCB0eXBlLCBoYW5kbGUgKSB7CisKKyAgICAvLyBUaGlzICJpZiIgaXMgbmVl
ZGVkIGZvciBwbGFpbiBvYmplY3RzCisgICAgaWYgKCBlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIg
KSB7CisgICAgICAgIGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgaGFuZGxlICk7Cisg
ICAgfQorfTsKKworalF1ZXJ5LkV2ZW50ID0gZnVuY3Rpb24oIHNyYywgcHJvcHMgKSB7CisKKyAg
ICAvLyBBbGxvdyBpbnN0YW50aWF0aW9uIHdpdGhvdXQgdGhlICduZXcnIGtleXdvcmQKKyAgICBp
ZiAoICEoIHRoaXMgaW5zdGFuY2VvZiBqUXVlcnkuRXZlbnQgKSApIHsKKyAgICAgICAgcmV0dXJu
IG5ldyBqUXVlcnkuRXZlbnQoIHNyYywgcHJvcHMgKTsKKyAgICB9CisKKyAgICAvLyBFdmVudCBv
YmplY3QKKyAgICBpZiAoIHNyYyAmJiBzcmMudHlwZSApIHsKKyAgICAgICAgdGhpcy5vcmlnaW5h
bEV2ZW50ID0gc3JjOworICAgICAgICB0aGlzLnR5cGUgPSBzcmMudHlwZTsKKworICAgICAgICAv
LyBFdmVudHMgYnViYmxpbmcgdXAgdGhlIGRvY3VtZW50IG1heSBoYXZlIGJlZW4gbWFya2VkIGFz
IHByZXZlbnRlZAorICAgICAgICAvLyBieSBhIGhhbmRsZXIgbG93ZXIgZG93biB0aGUgdHJlZTsg
cmVmbGVjdCB0aGUgY29ycmVjdCB2YWx1ZS4KKyAgICAgICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50
ZWQgPSBzcmMuZGVmYXVsdFByZXZlbnRlZCB8fAorICAgICAgICAgICAgICAgIHNyYy5kZWZhdWx0
UHJldmVudGVkID09PSB1bmRlZmluZWQgJiYKKworICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6
IEFuZHJvaWQgPD0yLjMgb25seQorICAgICAgICAgICAgICAgIHNyYy5yZXR1cm5WYWx1ZSA9PT0g
ZmFsc2UgPworICAgICAgICAgICAgcmV0dXJuVHJ1ZSA6CisgICAgICAgICAgICByZXR1cm5GYWxz
ZTsKKworICAgICAgICAvLyBDcmVhdGUgdGFyZ2V0IHByb3BlcnRpZXMKKyAgICAgICAgLy8gU3Vw
cG9ydDogU2FmYXJpIDw9NiAtIDcgb25seQorICAgICAgICAvLyBUYXJnZXQgc2hvdWxkIG5vdCBi
ZSBhIHRleHQgbm9kZSAoIzUwNCwgIzEzMTQzKQorICAgICAgICB0aGlzLnRhcmdldCA9ICggc3Jj
LnRhcmdldCAmJiBzcmMudGFyZ2V0Lm5vZGVUeXBlID09PSAzICkgPworICAgICAgICAgICAgc3Jj
LnRhcmdldC5wYXJlbnROb2RlIDoKKyAgICAgICAgICAgIHNyYy50YXJnZXQ7CisKKyAgICAgICAg
dGhpcy5jdXJyZW50VGFyZ2V0ID0gc3JjLmN1cnJlbnRUYXJnZXQ7CisgICAgICAgIHRoaXMucmVs
YXRlZFRhcmdldCA9IHNyYy5yZWxhdGVkVGFyZ2V0OworCisgICAgLy8gRXZlbnQgdHlwZQorICAg
IH0gZWxzZSB7CisgICAgICAgIHRoaXMudHlwZSA9IHNyYzsKKyAgICB9CisKKyAgICAvLyBQdXQg
ZXhwbGljaXRseSBwcm92aWRlZCBwcm9wZXJ0aWVzIG9udG8gdGhlIGV2ZW50IG9iamVjdAorICAg
IGlmICggcHJvcHMgKSB7CisgICAgICAgIGpRdWVyeS5leHRlbmQoIHRoaXMsIHByb3BzICk7Cisg
ICAgfQorCisgICAgLy8gQ3JlYXRlIGEgdGltZXN0YW1wIGlmIGluY29taW5nIGV2ZW50IGRvZXNu
J3QgaGF2ZSBvbmUKKyAgICB0aGlzLnRpbWVTdGFtcCA9IHNyYyAmJiBzcmMudGltZVN0YW1wIHx8
IGpRdWVyeS5ub3coKTsKKworICAgIC8vIE1hcmsgaXQgYXMgZml4ZWQKKyAgICB0aGlzWyBqUXVl
cnkuZXhwYW5kbyBdID0gdHJ1ZTsKK307CisKKy8vIGpRdWVyeS5FdmVudCBpcyBiYXNlZCBvbiBE
T00zIEV2ZW50cyBhcyBzcGVjaWZpZWQgYnkgdGhlIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgQmluZGlu
ZworLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIw
MDMwMzMxL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAoralF1ZXJ5LkV2ZW50LnByb3RvdHlwZSA9
IHsKKyAgICBjb25zdHJ1Y3RvcjogalF1ZXJ5LkV2ZW50LAorICAgIGlzRGVmYXVsdFByZXZlbnRl
ZDogcmV0dXJuRmFsc2UsCisgICAgaXNQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLAor
ICAgIGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSwKKyAgICBpc1Np
bXVsYXRlZDogZmFsc2UsCisKKyAgICBwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKSB7CisgICAg
ICAgIHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50OworCisgICAgICAgIHRoaXMuaXNEZWZhdWx0
UHJldmVudGVkID0gcmV0dXJuVHJ1ZTsKKworICAgICAgICBpZiAoIGUgJiYgIXRoaXMuaXNTaW11
bGF0ZWQgKSB7CisgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgIH0KKyAg
ICB9LAorICAgIHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBlID0g
dGhpcy5vcmlnaW5hbEV2ZW50OworCisgICAgICAgIHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQg
PSByZXR1cm5UcnVlOworCisgICAgICAgIGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHsK
KyAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgICAgIH0KKyAgICB9LAorICAg
IHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBlID0g
dGhpcy5vcmlnaW5hbEV2ZW50OworCisgICAgICAgIHRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlv
blN0b3BwZWQgPSByZXR1cm5UcnVlOworCisgICAgICAgIGlmICggZSAmJiAhdGhpcy5pc1NpbXVs
YXRlZCApIHsKKyAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7CisgICAg
ICAgIH0KKworICAgICAgICB0aGlzLnN0b3BQcm9wYWdhdGlvbigpOworICAgIH0KK307CisKKy8v
IEluY2x1ZGVzIGFsbCBjb21tb24gZXZlbnQgcHJvcHMgaW5jbHVkaW5nIEtleUV2ZW50IGFuZCBN
b3VzZUV2ZW50IHNwZWNpZmljIHByb3BzCitqUXVlcnkuZWFjaCggeworICAgIGFsdEtleTogdHJ1
ZSwKKyAgICBidWJibGVzOiB0cnVlLAorICAgIGNhbmNlbGFibGU6IHRydWUsCisgICAgY2hhbmdl
ZFRvdWNoZXM6IHRydWUsCisgICAgY3RybEtleTogdHJ1ZSwKKyAgICBkZXRhaWw6IHRydWUsCisg
ICAgZXZlbnRQaGFzZTogdHJ1ZSwKKyAgICBtZXRhS2V5OiB0cnVlLAorICAgIHBhZ2VYOiB0cnVl
LAorICAgIHBhZ2VZOiB0cnVlLAorICAgIHNoaWZ0S2V5OiB0cnVlLAorICAgIHZpZXc6IHRydWUs
CisgICAgImNoYXIiOiB0cnVlLAorICAgIGNoYXJDb2RlOiB0cnVlLAorICAgIGtleTogdHJ1ZSwK
KyAgICBrZXlDb2RlOiB0cnVlLAorICAgIGJ1dHRvbjogdHJ1ZSwKKyAgICBidXR0b25zOiB0cnVl
LAorICAgIGNsaWVudFg6IHRydWUsCisgICAgY2xpZW50WTogdHJ1ZSwKKyAgICBvZmZzZXRYOiB0
cnVlLAorICAgIG9mZnNldFk6IHRydWUsCisgICAgcG9pbnRlcklkOiB0cnVlLAorICAgIHBvaW50
ZXJUeXBlOiB0cnVlLAorICAgIHNjcmVlblg6IHRydWUsCisgICAgc2NyZWVuWTogdHJ1ZSwKKyAg
ICB0YXJnZXRUb3VjaGVzOiB0cnVlLAorICAgIHRvRWxlbWVudDogdHJ1ZSwKKyAgICB0b3VjaGVz
OiB0cnVlLAorCisgICAgd2hpY2g6IGZ1bmN0aW9uKCBldmVudCApIHsKKyAgICAgICAgdmFyIGJ1
dHRvbiA9IGV2ZW50LmJ1dHRvbjsKKworICAgICAgICAvLyBBZGQgd2hpY2ggZm9yIGtleSBldmVu
dHMKKyAgICAgICAgaWYgKCBldmVudC53aGljaCA9PSBudWxsICYmIHJrZXlFdmVudC50ZXN0KCBl
dmVudC50eXBlICkgKSB7CisgICAgICAgICAgICByZXR1cm4gZXZlbnQuY2hhckNvZGUgIT0gbnVs
bCA/IGV2ZW50LmNoYXJDb2RlIDogZXZlbnQua2V5Q29kZTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIEFkZCB3aGljaCBmb3IgY2xpY2s6IDEgPT09IGxlZnQ7IDIgPT09IG1pZGRsZTsgMyA9PT0g
cmlnaHQKKyAgICAgICAgaWYgKCAhZXZlbnQud2hpY2ggJiYgYnV0dG9uICE9PSB1bmRlZmluZWQg
JiYgcm1vdXNlRXZlbnQudGVzdCggZXZlbnQudHlwZSApICkgeworICAgICAgICAgICAgaWYgKCBi
dXR0b24gJiAxICkgeworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoIGJ1dHRvbiAmIDIgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IDM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggYnV0dG9uICYgNCApIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZXZlbnQud2hpY2g7CisgICAgfQor
fSwgalF1ZXJ5LmV2ZW50LmFkZFByb3AgKTsKKworLy8gQ3JlYXRlIG1vdXNlZW50ZXIvbGVhdmUg
ZXZlbnRzIHVzaW5nIG1vdXNlb3Zlci9vdXQgYW5kIGV2ZW50LXRpbWUgY2hlY2tzCisvLyBzbyB0
aGF0IGV2ZW50IGRlbGVnYXRpb24gd29ya3MgaW4galF1ZXJ5LgorLy8gRG8gdGhlIHNhbWUgZm9y
IHBvaW50ZXJlbnRlci9wb2ludGVybGVhdmUgYW5kIHBvaW50ZXJvdmVyL3BvaW50ZXJvdXQKKy8v
CisvLyBTdXBwb3J0OiBTYWZhcmkgNyBvbmx5CisvLyBTYWZhcmkgc2VuZHMgbW91c2VlbnRlciB0
b28gb2Z0ZW47IHNlZToKKy8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9p
c3N1ZXMvZGV0YWlsP2lkPTQ3MDI1OAorLy8gZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYnVn
IChpdCBleGlzdGVkIGluIG9sZGVyIENocm9tZSB2ZXJzaW9ucyBhcyB3ZWxsKS4KK2pRdWVyeS5l
YWNoKCB7CisgICAgbW91c2VlbnRlcjogIm1vdXNlb3ZlciIsCisgICAgbW91c2VsZWF2ZTogIm1v
dXNlb3V0IiwKKyAgICBwb2ludGVyZW50ZXI6ICJwb2ludGVyb3ZlciIsCisgICAgcG9pbnRlcmxl
YXZlOiAicG9pbnRlcm91dCIKK30sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7CisgICAgalF1ZXJ5
LmV2ZW50LnNwZWNpYWxbIG9yaWcgXSA9IHsKKyAgICAgICAgZGVsZWdhdGVUeXBlOiBmaXgsCisg
ICAgICAgIGJpbmRUeXBlOiBmaXgsCisKKyAgICAgICAgaGFuZGxlOiBmdW5jdGlvbiggZXZlbnQg
KSB7CisgICAgICAgICAgICB2YXIgcmV0LAorICAgICAgICAgICAgICAgIHRhcmdldCA9IHRoaXMs
CisgICAgICAgICAgICAgICAgcmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQsCisgICAgICAg
ICAgICAgICAgaGFuZGxlT2JqID0gZXZlbnQuaGFuZGxlT2JqOworCisgICAgICAgICAgICAvLyBG
b3IgbW91c2VlbnRlci9sZWF2ZSBjYWxsIHRoZSBoYW5kbGVyIGlmIHJlbGF0ZWQgaXMgb3V0c2lk
ZSB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgLy8gTkI6IE5vIHJlbGF0ZWRUYXJnZXQgaWYgdGhl
IG1vdXNlIGxlZnQvZW50ZXJlZCB0aGUgYnJvd3NlciB3aW5kb3cKKyAgICAgICAgICAgIGlmICgg
IXJlbGF0ZWQgfHwgKCByZWxhdGVkICE9PSB0YXJnZXQgJiYgIWpRdWVyeS5jb250YWlucyggdGFy
Z2V0LCByZWxhdGVkICkgKSApIHsKKyAgICAgICAgICAgICAgICBldmVudC50eXBlID0gaGFuZGxl
T2JqLm9yaWdUeXBlOworICAgICAgICAgICAgICAgIHJldCA9IGhhbmRsZU9iai5oYW5kbGVyLmFw
cGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKKyAgICAgICAgICAgICAgICBldmVudC50eXBlID0gZml4
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQorICAg
IH07Cit9ICk7CisKK2pRdWVyeS5mbi5leHRlbmQoIHsKKworICAgIG9uOiBmdW5jdGlvbiggdHlw
ZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApIHsKKyAgICAgICAgcmV0dXJuIG9uKCB0aGlzLCB0eXBl
cywgc2VsZWN0b3IsIGRhdGEsIGZuICk7CisgICAgfSwKKyAgICBvbmU6IGZ1bmN0aW9uKCB0eXBl
cywgc2VsZWN0b3IsIGRhdGEsIGZuICkgeworICAgICAgICByZXR1cm4gb24oIHRoaXMsIHR5cGVz
LCBzZWxlY3RvciwgZGF0YSwgZm4sIDEgKTsKKyAgICB9LAorICAgIG9mZjogZnVuY3Rpb24oIHR5
cGVzLCBzZWxlY3RvciwgZm4gKSB7CisgICAgICAgIHZhciBoYW5kbGVPYmosIHR5cGU7CisgICAg
ICAgIGlmICggdHlwZXMgJiYgdHlwZXMucHJldmVudERlZmF1bHQgJiYgdHlwZXMuaGFuZGxlT2Jq
ICkgeworCisgICAgICAgICAgICAvLyAoIGV2ZW50ICkgIGRpc3BhdGNoZWQgalF1ZXJ5LkV2ZW50
CisgICAgICAgICAgICBoYW5kbGVPYmogPSB0eXBlcy5oYW5kbGVPYmo7CisgICAgICAgICAgICBq
UXVlcnkoIHR5cGVzLmRlbGVnYXRlVGFyZ2V0ICkub2ZmKAorICAgICAgICAgICAgICAgIGhhbmRs
ZU9iai5uYW1lc3BhY2UgPworICAgICAgICAgICAgICAgICAgICBoYW5kbGVPYmoub3JpZ1R5cGUg
KyAiLiIgKyBoYW5kbGVPYmoubmFtZXNwYWNlIDoKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxl
T2JqLm9yaWdUeXBlLAorICAgICAgICAgICAgICAgIGhhbmRsZU9iai5zZWxlY3RvciwKKyAgICAg
ICAgICAgICAgICBoYW5kbGVPYmouaGFuZGxlcgorICAgICAgICAgICAgKTsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIGlmICggdHlwZW9mIHR5cGVzID09PSAi
b2JqZWN0IiApIHsKKworICAgICAgICAgICAgLy8gKCB0eXBlcy1vYmplY3QgWywgc2VsZWN0b3Jd
ICkKKyAgICAgICAgICAgIGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5vZmYoIHR5cGUsIHNlbGVjdG9yLCB0eXBlc1sgdHlwZSBdICk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorICAgICAgICBpZiAoIHNlbGVj
dG9yID09PSBmYWxzZSB8fCB0eXBlb2Ygc2VsZWN0b3IgPT09ICJmdW5jdGlvbiIgKSB7CisKKyAg
ICAgICAgICAgIC8vICggdHlwZXMgWywgZm5dICkKKyAgICAgICAgICAgIGZuID0gc2VsZWN0b3I7
CisgICAgICAgICAgICBzZWxlY3RvciA9IHVuZGVmaW5lZDsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoIGZuID09PSBmYWxzZSApIHsKKyAgICAgICAgICAgIGZuID0gcmV0dXJuRmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICBqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCB0eXBlcywgZm4sIHNlbGVjdG9yICk7CisgICAg
ICAgIH0gKTsKKyAgICB9Cit9ICk7CisKKwordmFyCisKKyAgICAvKiBlc2xpbnQtZGlzYWJsZSBt
YXgtbGVuICovCisKKyAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2VzbGludC9lc2xpbnQv
aXNzdWVzLzMyMjkKKyAgICByeGh0bWxUYWcgPSAvPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGlt
Z3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbYS16XVteXC9cMD5ceDIwXHRcclxuXGZdKilbXj5d
KilcLz4vZ2ksCisKKyAgICAvKiBlc2xpbnQtZW5hYmxlICovCisKKyAgICAvLyBTdXBwb3J0OiBJ
RSA8PTEwIC0gMTEsIEVkZ2UgMTIgLSAxMworICAgIC8vIEluIElFL0VkZ2UgdXNpbmcgcmVnZXgg
Z3JvdXBzIGhlcmUgY2F1c2VzIHNldmVyZSBzbG93ZG93bnMuCisgICAgLy8gU2VlIGh0dHBzOi8v
Y29ubmVjdC5taWNyb3NvZnQuY29tL0lFL2ZlZWRiYWNrL2RldGFpbHMvMTczNjUxMi8KKyAgICBy
bm9Jbm5lcmh0bWwgPSAvPHNjcmlwdHw8c3R5bGV8PGxpbmsvaSwKKworICAgIC8vIGNoZWNrZWQ9
ImNoZWNrZWQiIG9yIGNoZWNrZWQKKyAgICByY2hlY2tlZCA9IC9jaGVja2VkXHMqKD86W149XXw9
XHMqLmNoZWNrZWQuKS9pLAorICAgIHJzY3JpcHRUeXBlTWFza2VkID0gL150cnVlXC8oLiopLywK
KyAgICByY2xlYW5TY3JpcHQgPSAvXlxzKjwhKD86XFtDREFUQVxbfC0tKXwoPzpcXVxdfC0tKT5c
cyokL2c7CisKK2Z1bmN0aW9uIG1hbmlwdWxhdGlvblRhcmdldCggZWxlbSwgY29udGVudCApIHsK
KyAgICBpZiAoIGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgInRhYmxlIiApICYmCisgICAgICAgIGpR
dWVyeS5ub2RlTmFtZSggY29udGVudC5ub2RlVHlwZSAhPT0gMTEgPyBjb250ZW50IDogY29udGVu
dC5maXJzdENoaWxkLCAidHIiICkgKSB7CisKKyAgICAgICAgcmV0dXJuIGVsZW0uZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoICJ0Ym9keSIgKVsgMCBdIHx8IGVsZW07CisgICAgfQorCisgICAgcmV0dXJu
IGVsZW07Cit9CisKKy8vIFJlcGxhY2UvcmVzdG9yZSB0aGUgdHlwZSBhdHRyaWJ1dGUgb2Ygc2Ny
aXB0IGVsZW1lbnRzIGZvciBzYWZlIERPTSBtYW5pcHVsYXRpb24KK2Z1bmN0aW9uIGRpc2FibGVT
Y3JpcHQoIGVsZW0gKSB7CisgICAgZWxlbS50eXBlID0gKCBlbGVtLmdldEF0dHJpYnV0ZSggInR5
cGUiICkgIT09IG51bGwgKSArICIvIiArIGVsZW0udHlwZTsKKyAgICByZXR1cm4gZWxlbTsKK30K
K2Z1bmN0aW9uIHJlc3RvcmVTY3JpcHQoIGVsZW0gKSB7CisgICAgdmFyIG1hdGNoID0gcnNjcmlw
dFR5cGVNYXNrZWQuZXhlYyggZWxlbS50eXBlICk7CisKKyAgICBpZiAoIG1hdGNoICkgeworICAg
ICAgICBlbGVtLnR5cGUgPSBtYXRjaFsgMSBdOworICAgIH0gZWxzZSB7CisgICAgICAgIGVsZW0u
cmVtb3ZlQXR0cmlidXRlKCAidHlwZSIgKTsKKyAgICB9CisKKyAgICByZXR1cm4gZWxlbTsKK30K
KworZnVuY3Rpb24gY2xvbmVDb3B5RXZlbnQoIHNyYywgZGVzdCApIHsKKyAgICB2YXIgaSwgbCwg
dHlwZSwgcGRhdGFPbGQsIHBkYXRhQ3VyLCB1ZGF0YU9sZCwgdWRhdGFDdXIsIGV2ZW50czsKKwor
ICAgIGlmICggZGVzdC5ub2RlVHlwZSAhPT0gMSApIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIC8vIDEuIENvcHkgcHJpdmF0ZSBkYXRhOiBldmVudHMsIGhhbmRsZXJzLCBldGMuCisg
ICAgaWYgKCBkYXRhUHJpdi5oYXNEYXRhKCBzcmMgKSApIHsKKyAgICAgICAgcGRhdGFPbGQgPSBk
YXRhUHJpdi5hY2Nlc3MoIHNyYyApOworICAgICAgICBwZGF0YUN1ciA9IGRhdGFQcml2LnNldCgg
ZGVzdCwgcGRhdGFPbGQgKTsKKyAgICAgICAgZXZlbnRzID0gcGRhdGFPbGQuZXZlbnRzOworCisg
ICAgICAgIGlmICggZXZlbnRzICkgeworICAgICAgICAgICAgZGVsZXRlIHBkYXRhQ3VyLmhhbmRs
ZTsKKyAgICAgICAgICAgIHBkYXRhQ3VyLmV2ZW50cyA9IHt9OworCisgICAgICAgICAgICBmb3Ig
KCB0eXBlIGluIGV2ZW50cyApIHsKKyAgICAgICAgICAgICAgICBmb3IgKCBpID0gMCwgbCA9IGV2
ZW50c1sgdHlwZSBdLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKKyAgICAgICAgICAgICAgICAgICAg
alF1ZXJ5LmV2ZW50LmFkZCggZGVzdCwgdHlwZSwgZXZlbnRzWyB0eXBlIF1bIGkgXSApOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8v
IDIuIENvcHkgdXNlciBkYXRhCisgICAgaWYgKCBkYXRhVXNlci5oYXNEYXRhKCBzcmMgKSApIHsK
KyAgICAgICAgdWRhdGFPbGQgPSBkYXRhVXNlci5hY2Nlc3MoIHNyYyApOworICAgICAgICB1ZGF0
YUN1ciA9IGpRdWVyeS5leHRlbmQoIHt9LCB1ZGF0YU9sZCApOworCisgICAgICAgIGRhdGFVc2Vy
LnNldCggZGVzdCwgdWRhdGFDdXIgKTsKKyAgICB9Cit9CisKKy8vIEZpeCBJRSBidWdzLCBzZWUg
c3VwcG9ydCB0ZXN0cworZnVuY3Rpb24gZml4SW5wdXQoIHNyYywgZGVzdCApIHsKKyAgICB2YXIg
bm9kZU5hbWUgPSBkZXN0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7CisKKyAgICAvLyBGYWlscyB0
byBwZXJzaXN0IHRoZSBjaGVja2VkIHN0YXRlIG9mIGEgY2xvbmVkIGNoZWNrYm94IG9yIHJhZGlv
IGJ1dHRvbi4KKyAgICBpZiAoIG5vZGVOYW1lID09PSAiaW5wdXQiICYmIHJjaGVja2FibGVUeXBl
LnRlc3QoIHNyYy50eXBlICkgKSB7CisgICAgICAgIGRlc3QuY2hlY2tlZCA9IHNyYy5jaGVja2Vk
OworCisgICAgLy8gRmFpbHMgdG8gcmV0dXJuIHRoZSBzZWxlY3RlZCBvcHRpb24gdG8gdGhlIGRl
ZmF1bHQgc2VsZWN0ZWQgc3RhdGUgd2hlbiBjbG9uaW5nIG9wdGlvbnMKKyAgICB9IGVsc2UgaWYg
KCBub2RlTmFtZSA9PT0gImlucHV0IiB8fCBub2RlTmFtZSA9PT0gInRleHRhcmVhIiApIHsKKyAg
ICAgICAgZGVzdC5kZWZhdWx0VmFsdWUgPSBzcmMuZGVmYXVsdFZhbHVlOworICAgIH0KK30KKwor
ZnVuY3Rpb24gZG9tTWFuaXAoIGNvbGxlY3Rpb24sIGFyZ3MsIGNhbGxiYWNrLCBpZ25vcmVkICkg
eworCisgICAgLy8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5cworICAgIGFyZ3MgPSBjb25jYXQu
YXBwbHkoIFtdLCBhcmdzICk7CisKKyAgICB2YXIgZnJhZ21lbnQsIGZpcnN0LCBzY3JpcHRzLCBo
YXNTY3JpcHRzLCBub2RlLCBkb2MsCisgICAgICAgIGkgPSAwLAorICAgICAgICBsID0gY29sbGVj
dGlvbi5sZW5ndGgsCisgICAgICAgIGlOb0Nsb25lID0gbCAtIDEsCisgICAgICAgIHZhbHVlID0g
YXJnc1sgMCBdLAorICAgICAgICBpc0Z1bmN0aW9uID0galF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVl
ICk7CisKKyAgICAvLyBXZSBjYW4ndCBjbG9uZU5vZGUgZnJhZ21lbnRzIHRoYXQgY29udGFpbiBj
aGVja2VkLCBpbiBXZWJLaXQKKyAgICBpZiAoIGlzRnVuY3Rpb24gfHwKKyAgICAgICAgICAgICgg
bCA+IDEgJiYgdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiAmJgorICAgICAgICAgICAgICAgICFz
dXBwb3J0LmNoZWNrQ2xvbmUgJiYgcmNoZWNrZWQudGVzdCggdmFsdWUgKSApICkgeworICAgICAg
ICByZXR1cm4gY29sbGVjdGlvbi5lYWNoKCBmdW5jdGlvbiggaW5kZXggKSB7CisgICAgICAgICAg
ICB2YXIgc2VsZiA9IGNvbGxlY3Rpb24uZXEoIGluZGV4ICk7CisgICAgICAgICAgICBpZiAoIGlz
RnVuY3Rpb24gKSB7CisgICAgICAgICAgICAgICAgYXJnc1sgMCBdID0gdmFsdWUuY2FsbCggdGhp
cywgaW5kZXgsIHNlbGYuaHRtbCgpICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkb21N
YW5pcCggc2VsZiwgYXJncywgY2FsbGJhY2ssIGlnbm9yZWQgKTsKKyAgICAgICAgfSApOworICAg
IH0KKworICAgIGlmICggbCApIHsKKyAgICAgICAgZnJhZ21lbnQgPSBidWlsZEZyYWdtZW50KCBh
cmdzLCBjb2xsZWN0aW9uWyAwIF0ub3duZXJEb2N1bWVudCwgZmFsc2UsIGNvbGxlY3Rpb24sIGln
bm9yZWQgKTsKKyAgICAgICAgZmlyc3QgPSBmcmFnbWVudC5maXJzdENoaWxkOworCisgICAgICAg
IGlmICggZnJhZ21lbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDEgKSB7CisgICAgICAgICAgICBm
cmFnbWVudCA9IGZpcnN0OworICAgICAgICB9CisKKyAgICAgICAgLy8gUmVxdWlyZSBlaXRoZXIg
bmV3IGNvbnRlbnQgb3IgYW4gaW50ZXJlc3QgaW4gaWdub3JlZCBlbGVtZW50cyB0byBpbnZva2Ug
dGhlIGNhbGxiYWNrCisgICAgICAgIGlmICggZmlyc3QgfHwgaWdub3JlZCApIHsKKyAgICAgICAg
ICAgIHNjcmlwdHMgPSBqUXVlcnkubWFwKCBnZXRBbGwoIGZyYWdtZW50LCAic2NyaXB0IiApLCBk
aXNhYmxlU2NyaXB0ICk7CisgICAgICAgICAgICBoYXNTY3JpcHRzID0gc2NyaXB0cy5sZW5ndGg7
CisKKyAgICAgICAgICAgIC8vIFVzZSB0aGUgb3JpZ2luYWwgZnJhZ21lbnQgZm9yIHRoZSBsYXN0
IGl0ZW0KKyAgICAgICAgICAgIC8vIGluc3RlYWQgb2YgdGhlIGZpcnN0IGJlY2F1c2UgaXQgY2Fu
IGVuZCB1cAorICAgICAgICAgICAgLy8gYmVpbmcgZW1wdGllZCBpbmNvcnJlY3RseSBpbiBjZXJ0
YWluIHNpdHVhdGlvbnMgKCM4MDcwKS4KKyAgICAgICAgICAgIGZvciAoIDsgaSA8IGw7IGkrKyAp
IHsKKyAgICAgICAgICAgICAgICBub2RlID0gZnJhZ21lbnQ7CisKKyAgICAgICAgICAgICAgICBp
ZiAoIGkgIT09IGlOb0Nsb25lICkgeworICAgICAgICAgICAgICAgICAgICBub2RlID0galF1ZXJ5
LmNsb25lKCBub2RlLCB0cnVlLCB0cnVlICk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gS2Vl
cCByZWZlcmVuY2VzIHRvIGNsb25lZCBzY3JpcHRzIGZvciBsYXRlciByZXN0b3JhdGlvbgorICAg
ICAgICAgICAgICAgICAgICBpZiAoIGhhc1NjcmlwdHMgKSB7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seQor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93
cyBvbiBhbmNpZW50IFdlYktpdAorICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Lm1lcmdl
KCBzY3JpcHRzLCBnZXRBbGwoIG5vZGUsICJzY3JpcHQiICkgKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwo
IGNvbGxlY3Rpb25bIGkgXSwgbm9kZSwgaSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoIGhhc1NjcmlwdHMgKSB7CisgICAgICAgICAgICAgICAgZG9jID0gc2NyaXB0c1sgc2Ny
aXB0cy5sZW5ndGggLSAxIF0ub3duZXJEb2N1bWVudDsKKworICAgICAgICAgICAgICAgIC8vIFJl
ZW5hYmxlIHNjcmlwdHMKKyAgICAgICAgICAgICAgICBqUXVlcnkubWFwKCBzY3JpcHRzLCByZXN0
b3JlU2NyaXB0ICk7CisKKyAgICAgICAgICAgICAgICAvLyBFdmFsdWF0ZSBleGVjdXRhYmxlIHNj
cmlwdHMgb24gZmlyc3QgZG9jdW1lbnQgaW5zZXJ0aW9uCisgICAgICAgICAgICAgICAgZm9yICgg
aSA9IDA7IGkgPCBoYXNTY3JpcHRzOyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUg
PSBzY3JpcHRzWyBpIF07CisgICAgICAgICAgICAgICAgICAgIGlmICggcnNjcmlwdFR5cGUudGVz
dCggbm9kZS50eXBlIHx8ICIiICkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICFkYXRhUHJp
di5hY2Nlc3MoIG5vZGUsICJnbG9iYWxFdmFsIiApICYmCisgICAgICAgICAgICAgICAgICAgICAg
ICBqUXVlcnkuY29udGFpbnMoIGRvYywgbm9kZSApICkgeworCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIG5vZGUuc3JjICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
T3B0aW9uYWwgQUpBWCBkZXBlbmRlbmN5LCBidXQgd29uJ3QgcnVuIHNjcmlwdHMgaWYgbm90IHBy
ZXNlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5fZXZhbFVybCAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Ll9ldmFsVXJsKCBub2Rl
LnNyYyApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE9NRXZhbCggbm9k
ZS50ZXh0Q29udGVudC5yZXBsYWNlKCByY2xlYW5TY3JpcHQsICIiICksIGRvYyApOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGNvbGxl
Y3Rpb247Cit9CisKK2Z1bmN0aW9uIHJlbW92ZSggZWxlbSwgc2VsZWN0b3IsIGtlZXBEYXRhICkg
eworICAgIHZhciBub2RlLAorICAgICAgICBub2RlcyA9IHNlbGVjdG9yID8galF1ZXJ5LmZpbHRl
ciggc2VsZWN0b3IsIGVsZW0gKSA6IGVsZW0sCisgICAgICAgIGkgPSAwOworCisgICAgZm9yICgg
OyAoIG5vZGUgPSBub2Rlc1sgaSBdICkgIT0gbnVsbDsgaSsrICkgeworICAgICAgICBpZiAoICFr
ZWVwRGF0YSAmJiBub2RlLm5vZGVUeXBlID09PSAxICkgeworICAgICAgICAgICAgalF1ZXJ5LmNs
ZWFuRGF0YSggZ2V0QWxsKCBub2RlICkgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggbm9k
ZS5wYXJlbnROb2RlICkgeworICAgICAgICAgICAgaWYgKCBrZWVwRGF0YSAmJiBqUXVlcnkuY29u
dGFpbnMoIG5vZGUub3duZXJEb2N1bWVudCwgbm9kZSApICkgeworICAgICAgICAgICAgICAgIHNl
dEdsb2JhbEV2YWwoIGdldEFsbCggbm9kZSwgInNjcmlwdCIgKSApOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBub2RlICk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gZWxlbTsKK30KKworalF1ZXJ5LmV4dGVuZCggeworICAg
IGh0bWxQcmVmaWx0ZXI6IGZ1bmN0aW9uKCBodG1sICkgeworICAgICAgICByZXR1cm4gaHRtbC5y
ZXBsYWNlKCByeGh0bWxUYWcsICI8JDE+PC8kMj4iICk7CisgICAgfSwKKworICAgIGNsb25lOiBm
dW5jdGlvbiggZWxlbSwgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7CisgICAg
ICAgIHZhciBpLCBsLCBzcmNFbGVtZW50cywgZGVzdEVsZW1lbnRzLAorICAgICAgICAgICAgY2xv
bmUgPSBlbGVtLmNsb25lTm9kZSggdHJ1ZSApLAorICAgICAgICAgICAgaW5QYWdlID0galF1ZXJ5
LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKTsKKworICAgICAgICAvLyBGaXgg
SUUgY2xvbmluZyBpc3N1ZXMKKyAgICAgICAgaWYgKCAhc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCAm
JiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgZWxlbS5ub2RlVHlwZSA9PT0gMTEgKSAmJgorICAg
ICAgICAgICAgICAgICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHsKKworICAgICAgICAgICAg
Ly8gV2UgZXNjaGV3IFNpenpsZSBoZXJlIGZvciBwZXJmb3JtYW5jZSByZWFzb25zOiBodHRwczov
L2pzcGVyZi5jb20vZ2V0YWxsLXZzLXNpenpsZS8yCisgICAgICAgICAgICBkZXN0RWxlbWVudHMg
PSBnZXRBbGwoIGNsb25lICk7CisgICAgICAgICAgICBzcmNFbGVtZW50cyA9IGdldEFsbCggZWxl
bSApOworCisgICAgICAgICAgICBmb3IgKCBpID0gMCwgbCA9IHNyY0VsZW1lbnRzLmxlbmd0aDsg
aSA8IGw7IGkrKyApIHsKKyAgICAgICAgICAgICAgICBmaXhJbnB1dCggc3JjRWxlbWVudHNbIGkg
XSwgZGVzdEVsZW1lbnRzWyBpIF0gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIC8vIENvcHkgdGhlIGV2ZW50cyBmcm9tIHRoZSBvcmlnaW5hbCB0byB0aGUgY2xvbmUKKyAg
ICAgICAgaWYgKCBkYXRhQW5kRXZlbnRzICkgeworICAgICAgICAgICAgaWYgKCBkZWVwRGF0YUFu
ZEV2ZW50cyApIHsKKyAgICAgICAgICAgICAgICBzcmNFbGVtZW50cyA9IHNyY0VsZW1lbnRzIHx8
IGdldEFsbCggZWxlbSApOworICAgICAgICAgICAgICAgIGRlc3RFbGVtZW50cyA9IGRlc3RFbGVt
ZW50cyB8fCBnZXRBbGwoIGNsb25lICk7CisKKyAgICAgICAgICAgICAgICBmb3IgKCBpID0gMCwg
bCA9IHNyY0VsZW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKKyAgICAgICAgICAgICAgICAg
ICAgY2xvbmVDb3B5RXZlbnQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBjbG9uZUNvcHlFdmVudCggZWxlbSwgY2xvbmUgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIC8vIFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3RvcnkKKyAgICAg
ICAgZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSwgInNjcmlwdCIgKTsKKyAgICAgICAgaWYg
KCBkZXN0RWxlbWVudHMubGVuZ3RoID4gMCApIHsKKyAgICAgICAgICAgIHNldEdsb2JhbEV2YWwo
IGRlc3RFbGVtZW50cywgIWluUGFnZSAmJiBnZXRBbGwoIGVsZW0sICJzY3JpcHQiICkgKTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIFJldHVybiB0aGUgY2xvbmVkIHNldAorICAgICAgICByZXR1
cm4gY2xvbmU7CisgICAgfSwKKworICAgIGNsZWFuRGF0YTogZnVuY3Rpb24oIGVsZW1zICkgewor
ICAgICAgICB2YXIgZGF0YSwgZWxlbSwgdHlwZSwKKyAgICAgICAgICAgIHNwZWNpYWwgPSBqUXVl
cnkuZXZlbnQuc3BlY2lhbCwKKyAgICAgICAgICAgIGkgPSAwOworCisgICAgICAgIGZvciAoIDsg
KCBlbGVtID0gZWxlbXNbIGkgXSApICE9PSB1bmRlZmluZWQ7IGkrKyApIHsKKyAgICAgICAgICAg
IGlmICggYWNjZXB0RGF0YSggZWxlbSApICkgeworICAgICAgICAgICAgICAgIGlmICggKCBkYXRh
ID0gZWxlbVsgZGF0YVByaXYuZXhwYW5kbyBdICkgKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
ICggZGF0YS5ldmVudHMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB0eXBlIGlu
IGRhdGEuZXZlbnRzICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc3BlY2lh
bFsgdHlwZSBdICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZl
bnQucmVtb3ZlKCBlbGVtLCB0eXBlICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBUaGlzIGlzIGEgc2hvcnRjdXQgdG8gYXZvaWQgalF1ZXJ5LmV2ZW50LnJlbW92ZSdzIG92ZXJo
ZWFkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBkYXRhLmhh
bmRsZSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8v
IFN1cHBvcnQ6IENocm9tZSA8PTM1IC0gNDUrCisgICAgICAgICAgICAgICAgICAgIC8vIEFzc2ln
biB1bmRlZmluZWQgaW5zdGVhZCBvZiB1c2luZyBkZWxldGUsIHNlZSBEYXRhI3JlbW92ZQorICAg
ICAgICAgICAgICAgICAgICBlbGVtWyBkYXRhUHJpdi5leHBhbmRvIF0gPSB1bmRlZmluZWQ7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICggZWxlbVsgZGF0YVVzZXIuZXhw
YW5kbyBdICkgeworCisgICAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IENocm9tZSA8PTM1
IC0gNDUrCisgICAgICAgICAgICAgICAgICAgIC8vIEFzc2lnbiB1bmRlZmluZWQgaW5zdGVhZCBv
ZiB1c2luZyBkZWxldGUsIHNlZSBEYXRhI3JlbW92ZQorICAgICAgICAgICAgICAgICAgICBlbGVt
WyBkYXRhVXNlci5leHBhbmRvIF0gPSB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfSApOworCitqUXVlcnkuZm4uZXh0ZW5kKCB7
CisgICAgZGV0YWNoOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CisgICAgICAgIHJldHVybiByZW1v
dmUoIHRoaXMsIHNlbGVjdG9yLCB0cnVlICk7CisgICAgfSwKKworICAgIHJlbW92ZTogZnVuY3Rp
b24oIHNlbGVjdG9yICkgeworICAgICAgICByZXR1cm4gcmVtb3ZlKCB0aGlzLCBzZWxlY3RvciAp
OworICAgIH0sCisKKyAgICB0ZXh0OiBmdW5jdGlvbiggdmFsdWUgKSB7CisgICAgICAgIHJldHVy
biBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHsKKyAgICAgICAgICAgIHJldHVybiB2
YWx1ZSA9PT0gdW5kZWZpbmVkID8KKyAgICAgICAgICAgICAgICBqUXVlcnkudGV4dCggdGhpcyAp
IDoKKyAgICAgICAgICAgICAgICB0aGlzLmVtcHR5KCkuZWFjaCggZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBl
ID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy50ZXh0Q29udGVudCA9IHZhbHVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfSApOworICAgICAgICB9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0
aCApOworICAgIH0sCisKKyAgICBhcHBlbmQ6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4g
ZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAg
ICBpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhp
cy5ub2RlVHlwZSA9PT0gOSApIHsKKyAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gbWFuaXB1
bGF0aW9uVGFyZ2V0KCB0aGlzLCBlbGVtICk7CisgICAgICAgICAgICAgICAgdGFyZ2V0LmFwcGVu
ZENoaWxkKCBlbGVtICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gKTsKKyAgICB9LAorCisg
ICAgcHJlcGVuZDogZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBkb21NYW5pcCggdGhpcywg
YXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIGlmICggdGhpcy5ub2Rl
VHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5
ICkgeworICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRo
aXMsIGVsZW0gKTsKKyAgICAgICAgICAgICAgICB0YXJnZXQuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0
YXJnZXQuZmlyc3RDaGlsZCApOworICAgICAgICAgICAgfQorICAgICAgICB9ICk7CisgICAgfSwK
KworICAgIGJlZm9yZTogZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBkb21NYW5pcCggdGhp
cywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIGlmICggdGhpcy5w
YXJlbnROb2RlICkgeworICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZv
cmUoIGVsZW0sIHRoaXMgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSApOworICAgIH0sCisK
KyAgICBhZnRlcjogZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBkb21NYW5pcCggdGhpcywg
YXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIGlmICggdGhpcy5wYXJl
bnROb2RlICkgeworICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUo
IGVsZW0sIHRoaXMubmV4dFNpYmxpbmcgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSApOwor
ICAgIH0sCisKKyAgICBlbXB0eTogZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBlbGVtLAorICAg
ICAgICAgICAgaSA9IDA7CisKKyAgICAgICAgZm9yICggOyAoIGVsZW0gPSB0aGlzWyBpIF0gKSAh
PSBudWxsOyBpKysgKSB7CisgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7
CisKKyAgICAgICAgICAgICAgICAvLyBQcmV2ZW50IG1lbW9yeSBsZWFrcworICAgICAgICAgICAg
ICAgIGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFsc2UgKSApOworCisgICAgICAg
ICAgICAgICAgLy8gUmVtb3ZlIGFueSByZW1haW5pbmcgbm9kZXMKKyAgICAgICAgICAgICAgICBl
bGVtLnRleHRDb250ZW50ID0gIiI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgY2xvbmU6IGZ1bmN0aW9uKCBkYXRhQW5kRXZl
bnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHsKKyAgICAgICAgZGF0YUFuZEV2ZW50cyA9IGRhdGFB
bmRFdmVudHMgPT0gbnVsbCA/IGZhbHNlIDogZGF0YUFuZEV2ZW50czsKKyAgICAgICAgZGVlcERh
dGFBbmRFdmVudHMgPSBkZWVwRGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZGF0YUFuZEV2ZW50cyA6
IGRlZXBEYXRhQW5kRXZlbnRzOworCisgICAgICAgIHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmNsb25lKCB0aGlzLCBkYXRhQW5kRXZlbnRz
LCBkZWVwRGF0YUFuZEV2ZW50cyApOworICAgICAgICB9ICk7CisgICAgfSwKKworICAgIGh0bWw6
IGZ1bmN0aW9uKCB2YWx1ZSApIHsKKyAgICAgICAgcmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rp
b24oIHZhbHVlICkgeworICAgICAgICAgICAgdmFyIGVsZW0gPSB0aGlzWyAwIF0gfHwge30sCisg
ICAgICAgICAgICAgICAgaSA9IDAsCisgICAgICAgICAgICAgICAgbCA9IHRoaXMubGVuZ3RoOwor
CisgICAgICAgICAgICBpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgJiYgZWxlbS5ub2RlVHlwZSA9
PT0gMSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5pbm5lckhUTUw7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gdGFrZSBhIHNob3J0Y3V0IGFu
ZCBqdXN0IHVzZSBpbm5lckhUTUwKKyAgICAgICAgICAgIGlmICggdHlwZW9mIHZhbHVlID09PSAi
c3RyaW5nIiAmJiAhcm5vSW5uZXJodG1sLnRlc3QoIHZhbHVlICkgJiYKKyAgICAgICAgICAgICAg
ICAhd3JhcE1hcFsgKCBydGFnTmFtZS5leGVjKCB2YWx1ZSApIHx8IFsgIiIsICIiIF0gKVsgMSBd
LnRvTG93ZXJDYXNlKCkgXSApIHsKKworICAgICAgICAgICAgICAgIHZhbHVlID0galF1ZXJ5Lmh0
bWxQcmVmaWx0ZXIoIHZhbHVlICk7CisKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAg
ICAgICAgICAgICBmb3IgKCA7IGkgPCBsOyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBlbGVtID0gdGhpc1sgaSBdIHx8IHt9OworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBS
ZW1vdmUgZWxlbWVudCBub2RlcyBhbmQgcHJldmVudCBtZW1vcnkgbGVha3MKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmlubmVySFRNTCA9IHZhbHVlOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgZWxlbSA9IDA7CisKKyAgICAgICAgICAgICAgICAvLyBJZiB1c2luZyBpbm5l
ckhUTUwgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdXNlIHRoZSBmYWxsYmFjayBtZXRob2QKKyAgICAg
ICAgICAgICAgICB9IGNhdGNoICggZSApIHt9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmICggZWxlbSApIHsKKyAgICAgICAgICAgICAgICB0aGlzLmVtcHR5KCkuYXBwZW5kKCB2YWx1
ZSApOworICAgICAgICAgICAgfQorICAgICAgICB9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxl
bmd0aCApOworICAgIH0sCisKKyAgICByZXBsYWNlV2l0aDogZnVuY3Rpb24oKSB7CisgICAgICAg
IHZhciBpZ25vcmVkID0gW107CisKKyAgICAgICAgLy8gTWFrZSB0aGUgY2hhbmdlcywgcmVwbGFj
aW5nIGVhY2ggbm9uLWlnbm9yZWQgY29udGV4dCBlbGVtZW50IHdpdGggdGhlIG5ldyBjb250ZW50
CisgICAgICAgIHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxl
bSApIHsKKyAgICAgICAgICAgIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7CisKKyAgICAg
ICAgICAgIGlmICggalF1ZXJ5LmluQXJyYXkoIHRoaXMsIGlnbm9yZWQgKSA8IDAgKSB7CisgICAg
ICAgICAgICAgICAgalF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCB0aGlzICkgKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIHBhcmVudCApIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50LnJlcGxh
Y2VDaGlsZCggZWxlbSwgdGhpcyApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAvLyBGb3JjZSBjYWxsYmFjayBpbnZvY2F0aW9uCisgICAgICAgIH0sIGlnbm9y
ZWQgKTsKKyAgICB9Cit9ICk7CisKK2pRdWVyeS5lYWNoKCB7CisgICAgYXBwZW5kVG86ICJhcHBl
bmQiLAorICAgIHByZXBlbmRUbzogInByZXBlbmQiLAorICAgIGluc2VydEJlZm9yZTogImJlZm9y
ZSIsCisgICAgaW5zZXJ0QWZ0ZXI6ICJhZnRlciIsCisgICAgcmVwbGFjZUFsbDogInJlcGxhY2VX
aXRoIgorfSwgZnVuY3Rpb24oIG5hbWUsIG9yaWdpbmFsICkgeworICAgIGpRdWVyeS5mblsgbmFt
ZSBdID0gZnVuY3Rpb24oIHNlbGVjdG9yICkgeworICAgICAgICB2YXIgZWxlbXMsCisgICAgICAg
ICAgICByZXQgPSBbXSwKKyAgICAgICAgICAgIGluc2VydCA9IGpRdWVyeSggc2VsZWN0b3IgKSwK
KyAgICAgICAgICAgIGxhc3QgPSBpbnNlcnQubGVuZ3RoIC0gMSwKKyAgICAgICAgICAgIGkgPSAw
OworCisgICAgICAgIGZvciAoIDsgaSA8PSBsYXN0OyBpKysgKSB7CisgICAgICAgICAgICBlbGVt
cyA9IGkgPT09IGxhc3QgPyB0aGlzIDogdGhpcy5jbG9uZSggdHJ1ZSApOworICAgICAgICAgICAg
alF1ZXJ5KCBpbnNlcnRbIGkgXSApWyBvcmlnaW5hbCBdKCBlbGVtcyApOworCisgICAgICAgICAg
ICAvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHkKKyAgICAg
ICAgICAgIC8vIC5nZXQoKSBiZWNhdXNlIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mg
b24gYW5jaWVudCBXZWJLaXQKKyAgICAgICAgICAgIHB1c2guYXBwbHkoIHJldCwgZWxlbXMuZ2V0
KCkgKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggcmV0ICk7
CisgICAgfTsKK30gKTsKK3ZhciBybWFyZ2luID0gKCAvXm1hcmdpbi8gKTsKKwordmFyIHJudW1u
b25weCA9IG5ldyBSZWdFeHAoICJeKCIgKyBwbnVtICsgIikoPyFweClbYS16JV0rJCIsICJpIiAp
OworCit2YXIgZ2V0U3R5bGVzID0gZnVuY3Rpb24oIGVsZW0gKSB7CisKKyAgICAgICAgLy8gU3Vw
cG9ydDogSUUgPD0xMSBvbmx5LCBGaXJlZm94IDw9MzAgKCMxNTA5OCwgIzE0MTUwKQorICAgICAg
ICAvLyBJRSB0aHJvd3Mgb24gZWxlbWVudHMgY3JlYXRlZCBpbiBwb3B1cHMKKyAgICAgICAgLy8g
RkYgbWVhbndoaWxlIHRocm93cyBvbiBmcmFtZSBlbGVtZW50cyB0aHJvdWdoICJkZWZhdWx0Vmll
dy5nZXRDb21wdXRlZFN0eWxlIgorICAgICAgICB2YXIgdmlldyA9IGVsZW0ub3duZXJEb2N1bWVu
dC5kZWZhdWx0VmlldzsKKworICAgICAgICBpZiAoICF2aWV3IHx8ICF2aWV3Lm9wZW5lciApIHsK
KyAgICAgICAgICAgIHZpZXcgPSB3aW5kb3c7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
dmlldy5nZXRDb21wdXRlZFN0eWxlKCBlbGVtICk7CisgICAgfTsKKworCisKKyggZnVuY3Rpb24o
KSB7CisKKyAgICAvLyBFeGVjdXRpbmcgYm90aCBwaXhlbFBvc2l0aW9uICYgYm94U2l6aW5nUmVs
aWFibGUgdGVzdHMgcmVxdWlyZSBvbmx5IG9uZSBsYXlvdXQKKyAgICAvLyBzbyB0aGV5J3JlIGV4
ZWN1dGVkIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSB0aGUgc2Vjb25kIGNvbXB1dGF0aW9uLgor
ICAgIGZ1bmN0aW9uIGNvbXB1dGVTdHlsZVRlc3RzKCkgeworCisgICAgICAgIC8vIFRoaXMgaXMg
YSBzaW5nbGV0b24sIHdlIG5lZWQgdG8gZXhlY3V0ZSBpdCBvbmx5IG9uY2UKKyAgICAgICAgaWYg
KCAhZGl2ICkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZGl2
LnN0eWxlLmNzc1RleHQgPQorICAgICAgICAgICAgImJveC1zaXppbmc6Ym9yZGVyLWJveDsiICsK
KyAgICAgICAgICAgICJwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrOyIgKworICAgICAg
ICAgICAgIm1hcmdpbjphdXRvO2JvcmRlcjoxcHg7cGFkZGluZzoxcHg7IiArCisgICAgICAgICAg
ICAidG9wOjElO3dpZHRoOjUwJSI7CisgICAgICAgIGRpdi5pbm5lckhUTUwgPSAiIjsKKyAgICAg
ICAgZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKCBjb250YWluZXIgKTsKKworICAgICAgICB2
YXIgZGl2U3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggZGl2ICk7CisgICAgICAgIHBp
eGVsUG9zaXRpb25WYWwgPSBkaXZTdHlsZS50b3AgIT09ICIxJSI7CisKKyAgICAgICAgLy8gU3Vw
cG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seSwgRmlyZWZveCA8PTMgLSA0NAorICAgICAgICBy
ZWxpYWJsZU1hcmdpbkxlZnRWYWwgPSBkaXZTdHlsZS5tYXJnaW5MZWZ0ID09PSAiMnB4IjsKKyAg
ICAgICAgYm94U2l6aW5nUmVsaWFibGVWYWwgPSBkaXZTdHlsZS53aWR0aCA9PT0gIjRweCI7CisK
KyAgICAgICAgLy8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seQorICAgICAgICAvLyBT
b21lIHN0eWxlcyBjb21lIGJhY2sgd2l0aCBwZXJjZW50YWdlIHZhbHVlcywgZXZlbiB0aG91Z2gg
dGhleSBzaG91bGRuJ3QKKyAgICAgICAgZGl2LnN0eWxlLm1hcmdpblJpZ2h0ID0gIjUwJSI7Cisg
ICAgICAgIHBpeGVsTWFyZ2luUmlnaHRWYWwgPSBkaXZTdHlsZS5tYXJnaW5SaWdodCA9PT0gIjRw
eCI7CisKKyAgICAgICAgZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKCBjb250YWluZXIgKTsK
KworICAgICAgICAvLyBOdWxsaWZ5IHRoZSBkaXYgc28gaXQgd291bGRuJ3QgYmUgc3RvcmVkIGlu
IHRoZSBtZW1vcnkgYW5kCisgICAgICAgIC8vIGl0IHdpbGwgYWxzbyBiZSBhIHNpZ24gdGhhdCBj
aGVja3MgYWxyZWFkeSBwZXJmb3JtZWQKKyAgICAgICAgZGl2ID0gbnVsbDsKKyAgICB9CisKKyAg
ICB2YXIgcGl4ZWxQb3NpdGlvblZhbCwgYm94U2l6aW5nUmVsaWFibGVWYWwsIHBpeGVsTWFyZ2lu
UmlnaHRWYWwsIHJlbGlhYmxlTWFyZ2luTGVmdFZhbCwKKyAgICAgICAgY29udGFpbmVyID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCggImRpdiIgKSwKKyAgICAgICAgZGl2ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCggImRpdiIgKTsKKworICAgIC8vIEZpbmlzaCBlYXJseSBpbiBsaW1pdGVkIChu
b24tYnJvd3NlcikgZW52aXJvbm1lbnRzCisgICAgaWYgKCAhZGl2LnN0eWxlICkgeworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seQorICAg
IC8vIFN0eWxlIG9mIGNsb25lZCBlbGVtZW50IGFmZmVjdHMgc291cmNlIGVsZW1lbnQgY2xvbmVk
ICgjODkwOCkKKyAgICBkaXYuc3R5bGUuYmFja2dyb3VuZENsaXAgPSAiY29udGVudC1ib3giOwor
ICAgIGRpdi5jbG9uZU5vZGUoIHRydWUgKS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9ICIiOworICAg
IHN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlID0gZGl2LnN0eWxlLmJhY2tncm91bmRDbGlwID09PSAi
Y29udGVudC1ib3giOworCisgICAgY29udGFpbmVyLnN0eWxlLmNzc1RleHQgPSAiYm9yZGVyOjA7
d2lkdGg6OHB4O2hlaWdodDowO3RvcDowO2xlZnQ6LTk5OTlweDsiICsKKyAgICAgICAgInBhZGRp
bmc6MDttYXJnaW4tdG9wOjFweDtwb3NpdGlvbjphYnNvbHV0ZSI7CisgICAgY29udGFpbmVyLmFw
cGVuZENoaWxkKCBkaXYgKTsKKworICAgIGpRdWVyeS5leHRlbmQoIHN1cHBvcnQsIHsKKyAgICAg
ICAgcGl4ZWxQb3NpdGlvbjogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBjb21wdXRlU3R5bGVU
ZXN0cygpOworICAgICAgICAgICAgcmV0dXJuIHBpeGVsUG9zaXRpb25WYWw7CisgICAgICAgIH0s
CisgICAgICAgIGJveFNpemluZ1JlbGlhYmxlOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGNv
bXB1dGVTdHlsZVRlc3RzKCk7CisgICAgICAgICAgICByZXR1cm4gYm94U2l6aW5nUmVsaWFibGVW
YWw7CisgICAgICAgIH0sCisgICAgICAgIHBpeGVsTWFyZ2luUmlnaHQ6IGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgY29tcHV0ZVN0eWxlVGVzdHMoKTsKKyAgICAgICAgICAgIHJldHVybiBwaXhl
bE1hcmdpblJpZ2h0VmFsOworICAgICAgICB9LAorICAgICAgICByZWxpYWJsZU1hcmdpbkxlZnQ6
IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgY29tcHV0ZVN0eWxlVGVzdHMoKTsKKyAgICAgICAg
ICAgIHJldHVybiByZWxpYWJsZU1hcmdpbkxlZnRWYWw7CisgICAgICAgIH0KKyAgICB9ICk7Cit9
ICkoKTsKKworCitmdW5jdGlvbiBjdXJDU1MoIGVsZW0sIG5hbWUsIGNvbXB1dGVkICkgeworICAg
IHZhciB3aWR0aCwgbWluV2lkdGgsIG1heFdpZHRoLCByZXQsCisgICAgICAgIHN0eWxlID0gZWxl
bS5zdHlsZTsKKworICAgIGNvbXB1dGVkID0gY29tcHV0ZWQgfHwgZ2V0U3R5bGVzKCBlbGVtICk7
CisKKyAgICAvLyBTdXBwb3J0OiBJRSA8PTkgb25seQorICAgIC8vIGdldFByb3BlcnR5VmFsdWUg
aXMgb25seSBuZWVkZWQgZm9yIC5jc3MoJ2ZpbHRlcicpICgjMTI1MzcpCisgICAgaWYgKCBjb21w
dXRlZCApIHsKKyAgICAgICAgcmV0ID0gY29tcHV0ZWQuZ2V0UHJvcGVydHlWYWx1ZSggbmFtZSAp
IHx8IGNvbXB1dGVkWyBuYW1lIF07CisKKyAgICAgICAgaWYgKCByZXQgPT09ICIiICYmICFqUXVl
cnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApICkgeworICAgICAgICAgICAg
cmV0ID0galF1ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lICk7CisgICAgICAgIH0KKworICAgICAgICAv
LyBBIHRyaWJ1dGUgdG8gdGhlICJhd2Vzb21lIGhhY2sgYnkgRGVhbiBFZHdhcmRzIgorICAgICAg
ICAvLyBBbmRyb2lkIEJyb3dzZXIgcmV0dXJucyBwZXJjZW50YWdlIGZvciBzb21lIHZhbHVlcywK
KyAgICAgICAgLy8gYnV0IHdpZHRoIHNlZW1zIHRvIGJlIHJlbGlhYmx5IHBpeGVscy4KKyAgICAg
ICAgLy8gVGhpcyBpcyBhZ2FpbnN0IHRoZSBDU1NPTSBkcmFmdCBzcGVjOgorICAgICAgICAvLyBo
dHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3Nzb20vI3Jlc29sdmVkLXZhbHVlcworICAgICAgICBp
ZiAoICFzdXBwb3J0LnBpeGVsTWFyZ2luUmlnaHQoKSAmJiBybnVtbm9ucHgudGVzdCggcmV0ICkg
JiYgcm1hcmdpbi50ZXN0KCBuYW1lICkgKSB7CisKKyAgICAgICAgICAgIC8vIFJlbWVtYmVyIHRo
ZSBvcmlnaW5hbCB2YWx1ZXMKKyAgICAgICAgICAgIHdpZHRoID0gc3R5bGUud2lkdGg7CisgICAg
ICAgICAgICBtaW5XaWR0aCA9IHN0eWxlLm1pbldpZHRoOworICAgICAgICAgICAgbWF4V2lkdGgg
PSBzdHlsZS5tYXhXaWR0aDsKKworICAgICAgICAgICAgLy8gUHV0IGluIHRoZSBuZXcgdmFsdWVz
IHRvIGdldCBhIGNvbXB1dGVkIHZhbHVlIG91dAorICAgICAgICAgICAgc3R5bGUubWluV2lkdGgg
PSBzdHlsZS5tYXhXaWR0aCA9IHN0eWxlLndpZHRoID0gcmV0OworICAgICAgICAgICAgcmV0ID0g
Y29tcHV0ZWQud2lkdGg7CisKKyAgICAgICAgICAgIC8vIFJldmVydCB0aGUgY2hhbmdlZCB2YWx1
ZXMKKyAgICAgICAgICAgIHN0eWxlLndpZHRoID0gd2lkdGg7CisgICAgICAgICAgICBzdHlsZS5t
aW5XaWR0aCA9IG1pbldpZHRoOworICAgICAgICAgICAgc3R5bGUubWF4V2lkdGggPSBtYXhXaWR0
aDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXQgIT09IHVuZGVmaW5lZCA/CisK
KyAgICAgICAgLy8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seQorICAgICAgICAvLyBJRSByZXR1
cm5zIHpJbmRleCB2YWx1ZSBhcyBhbiBpbnRlZ2VyLgorICAgICAgICByZXQgKyAiIiA6CisgICAg
ICAgIHJldDsKK30KKworCitmdW5jdGlvbiBhZGRHZXRIb29rSWYoIGNvbmRpdGlvbkZuLCBob29r
Rm4gKSB7CisKKyAgICAvLyBEZWZpbmUgdGhlIGhvb2ssIHdlJ2xsIGNoZWNrIG9uIHRoZSBmaXJz
dCBydW4gaWYgaXQncyByZWFsbHkgbmVlZGVkLgorICAgIHJldHVybiB7CisgICAgICAgIGdldDog
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBpZiAoIGNvbmRpdGlvbkZuKCkgKSB7CisKKyAgICAg
ICAgICAgICAgICAvLyBIb29rIG5vdCBuZWVkZWQgKG9yIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHVz
ZSBpdCBkdWUKKyAgICAgICAgICAgICAgICAvLyB0byBtaXNzaW5nIGRlcGVuZGVuY3kpLCByZW1v
dmUgaXQuCisgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuZ2V0OworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSG9vayBuZWVkZWQ7IHJl
ZGVmaW5lIGl0IHNvIHRoYXQgdGhlIHN1cHBvcnQgdGVzdCBpcyBub3QgZXhlY3V0ZWQgYWdhaW4u
CisgICAgICAgICAgICByZXR1cm4gKCB0aGlzLmdldCA9IGhvb2tGbiApLmFwcGx5KCB0aGlzLCBh
cmd1bWVudHMgKTsKKyAgICAgICAgfQorICAgIH07Cit9CisKKwordmFyCisKKyAgICAvLyBTd2Fw
cGFibGUgaWYgZGlzcGxheSBpcyBub25lIG9yIHN0YXJ0cyB3aXRoIHRhYmxlCisgICAgLy8gZXhj
ZXB0ICJ0YWJsZSIsICJ0YWJsZS1jZWxsIiwgb3IgInRhYmxlLWNhcHRpb24iCisgICAgLy8gU2Vl
IGhlcmUgZm9yIGRpc3BsYXkgdmFsdWVzOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9l
bi1VUy9kb2NzL0NTUy9kaXNwbGF5CisgICAgcmRpc3BsYXlzd2FwID0gL14obm9uZXx0YWJsZSg/
IS1jW2VhXSkuKykvLAorICAgIGNzc1Nob3cgPSB7IHBvc2l0aW9uOiAiYWJzb2x1dGUiLCB2aXNp
YmlsaXR5OiAiaGlkZGVuIiwgZGlzcGxheTogImJsb2NrIiB9LAorICAgIGNzc05vcm1hbFRyYW5z
Zm9ybSA9IHsKKyAgICAgICAgbGV0dGVyU3BhY2luZzogIjAiLAorICAgICAgICBmb250V2VpZ2h0
OiAiNDAwIgorICAgIH0sCisKKyAgICBjc3NQcmVmaXhlcyA9IFsgIldlYmtpdCIsICJNb3oiLCAi
bXMiIF0sCisgICAgZW1wdHlTdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJkaXYiICku
c3R5bGU7CisKKy8vIFJldHVybiBhIGNzcyBwcm9wZXJ0eSBtYXBwZWQgdG8gYSBwb3RlbnRpYWxs
eSB2ZW5kb3IgcHJlZml4ZWQgcHJvcGVydHkKK2Z1bmN0aW9uIHZlbmRvclByb3BOYW1lKCBuYW1l
ICkgeworCisgICAgLy8gU2hvcnRjdXQgZm9yIG5hbWVzIHRoYXQgYXJlIG5vdCB2ZW5kb3IgcHJl
Zml4ZWQKKyAgICBpZiAoIG5hbWUgaW4gZW1wdHlTdHlsZSApIHsKKyAgICAgICAgcmV0dXJuIG5h
bWU7CisgICAgfQorCisgICAgLy8gQ2hlY2sgZm9yIHZlbmRvciBwcmVmaXhlZCBuYW1lcworICAg
IHZhciBjYXBOYW1lID0gbmFtZVsgMCBdLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKCAxICks
CisgICAgICAgIGkgPSBjc3NQcmVmaXhlcy5sZW5ndGg7CisKKyAgICB3aGlsZSAoIGktLSApIHsK
KyAgICAgICAgbmFtZSA9IGNzc1ByZWZpeGVzWyBpIF0gKyBjYXBOYW1lOworICAgICAgICBpZiAo
IG5hbWUgaW4gZW1wdHlTdHlsZSApIHsKKyAgICAgICAgICAgIHJldHVybiBuYW1lOworICAgICAg
ICB9CisgICAgfQorfQorCitmdW5jdGlvbiBzZXRQb3NpdGl2ZU51bWJlciggZWxlbSwgdmFsdWUs
IHN1YnRyYWN0ICkgeworCisgICAgLy8gQW55IHJlbGF0aXZlICgrLy0pIHZhbHVlcyBoYXZlIGFs
cmVhZHkgYmVlbgorICAgIC8vIG5vcm1hbGl6ZWQgYXQgdGhpcyBwb2ludAorICAgIHZhciBtYXRj
aGVzID0gcmNzc051bS5leGVjKCB2YWx1ZSApOworICAgIHJldHVybiBtYXRjaGVzID8KKworICAg
ICAgICAvLyBHdWFyZCBhZ2FpbnN0IHVuZGVmaW5lZCAic3VidHJhY3QiLCBlLmcuLCB3aGVuIHVz
ZWQgYXMgaW4gY3NzSG9va3MKKyAgICAgICAgTWF0aC5tYXgoIDAsIG1hdGNoZXNbIDIgXSAtICgg
c3VidHJhY3QgfHwgMCApICkgKyAoIG1hdGNoZXNbIDMgXSB8fCAicHgiICkgOgorICAgICAgICB2
YWx1ZTsKK30KKworZnVuY3Rpb24gYXVnbWVudFdpZHRoT3JIZWlnaHQoIGVsZW0sIG5hbWUsIGV4
dHJhLCBpc0JvcmRlckJveCwgc3R5bGVzICkgeworICAgIHZhciBpLAorICAgICAgICB2YWwgPSAw
OworCisgICAgLy8gSWYgd2UgYWxyZWFkeSBoYXZlIHRoZSByaWdodCBtZWFzdXJlbWVudCwgYXZv
aWQgYXVnbWVudGF0aW9uCisgICAgaWYgKCBleHRyYSA9PT0gKCBpc0JvcmRlckJveCA/ICJib3Jk
ZXIiIDogImNvbnRlbnQiICkgKSB7CisgICAgICAgIGkgPSA0OworCisgICAgLy8gT3RoZXJ3aXNl
IGluaXRpYWxpemUgZm9yIGhvcml6b250YWwgb3IgdmVydGljYWwgcHJvcGVydGllcworICAgIH0g
ZWxzZSB7CisgICAgICAgIGkgPSBuYW1lID09PSAid2lkdGgiID8gMSA6IDA7CisgICAgfQorCisg
ICAgZm9yICggOyBpIDwgNDsgaSArPSAyICkgeworCisgICAgICAgIC8vIEJvdGggYm94IG1vZGVs
cyBleGNsdWRlIG1hcmdpbiwgc28gYWRkIGl0IGlmIHdlIHdhbnQgaXQKKyAgICAgICAgaWYgKCBl
eHRyYSA9PT0gIm1hcmdpbiIgKSB7CisgICAgICAgICAgICB2YWwgKz0galF1ZXJ5LmNzcyggZWxl
bSwgZXh0cmEgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoIGlzQm9yZGVyQm94ICkgeworCisgICAgICAgICAgICAvLyBib3JkZXItYm94
IGluY2x1ZGVzIHBhZGRpbmcsIHNvIHJlbW92ZSBpdCBpZiB3ZSB3YW50IGNvbnRlbnQKKyAgICAg
ICAgICAgIGlmICggZXh0cmEgPT09ICJjb250ZW50IiApIHsKKyAgICAgICAgICAgICAgICB2YWwg
LT0galF1ZXJ5LmNzcyggZWxlbSwgInBhZGRpbmciICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0
eWxlcyApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCBl
eHRyYSBpc24ndCBib3JkZXIgbm9yIG1hcmdpbiwgc28gcmVtb3ZlIGJvcmRlcgorICAgICAgICAg
ICAgaWYgKCBleHRyYSAhPT0gIm1hcmdpbiIgKSB7CisgICAgICAgICAgICAgICAgdmFsIC09IGpR
dWVyeS5jc3MoIGVsZW0sICJib3JkZXIiICsgY3NzRXhwYW5kWyBpIF0gKyAiV2lkdGgiLCB0cnVl
LCBzdHlsZXMgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKworICAgICAgICAg
ICAgLy8gQXQgdGhpcyBwb2ludCwgZXh0cmEgaXNuJ3QgY29udGVudCwgc28gYWRkIHBhZGRpbmcK
KyAgICAgICAgICAgIHZhbCArPSBqUXVlcnkuY3NzKCBlbGVtLCAicGFkZGluZyIgKyBjc3NFeHBh
bmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7CisKKyAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQs
IGV4dHJhIGlzbid0IGNvbnRlbnQgbm9yIHBhZGRpbmcsIHNvIGFkZCBib3JkZXIKKyAgICAgICAg
ICAgIGlmICggZXh0cmEgIT09ICJwYWRkaW5nIiApIHsKKyAgICAgICAgICAgICAgICB2YWwgKz0g
alF1ZXJ5LmNzcyggZWxlbSwgImJvcmRlciIgKyBjc3NFeHBhbmRbIGkgXSArICJXaWR0aCIsIHRy
dWUsIHN0eWxlcyApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIHZhbDsKK30KKworZnVuY3Rpb24gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgbmFtZSwgZXh0
cmEgKSB7CisKKyAgICAvLyBTdGFydCB3aXRoIG9mZnNldCBwcm9wZXJ0eSwgd2hpY2ggaXMgZXF1
aXZhbGVudCB0byB0aGUgYm9yZGVyLWJveCB2YWx1ZQorICAgIHZhciB2YWwsCisgICAgICAgIHZh
bHVlSXNCb3JkZXJCb3ggPSB0cnVlLAorICAgICAgICBzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0g
KSwKKyAgICAgICAgaXNCb3JkZXJCb3ggPSBqUXVlcnkuY3NzKCBlbGVtLCAiYm94U2l6aW5nIiwg
ZmFsc2UsIHN0eWxlcyApID09PSAiYm9yZGVyLWJveCI7CisKKyAgICAvLyBTdXBwb3J0OiBJRSA8
PTExIG9ubHkKKyAgICAvLyBSdW5uaW5nIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBvbiBhIGRpc2Nv
bm5lY3RlZCBub2RlCisgICAgLy8gaW4gSUUgdGhyb3dzIGFuIGVycm9yLgorICAgIGlmICggZWxl
bS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApIHsKKyAgICAgICAgdmFsID0gZWxlbS5nZXRCb3Vu
ZGluZ0NsaWVudFJlY3QoKVsgbmFtZSBdOworICAgIH0KKworICAgIC8vIFNvbWUgbm9uLWh0bWwg
ZWxlbWVudHMgcmV0dXJuIHVuZGVmaW5lZCBmb3Igb2Zmc2V0V2lkdGgsIHNvIGNoZWNrIGZvciBu
dWxsL3VuZGVmaW5lZAorICAgIC8vIHN2ZyAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcv
c2hvd19idWcuY2dpP2lkPTY0OTI4NQorICAgIC8vIE1hdGhNTCAtIGh0dHBzOi8vYnVnemlsbGEu
bW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MTY2OAorICAgIGlmICggdmFsIDw9IDAgfHwg
dmFsID09IG51bGwgKSB7CisKKyAgICAgICAgLy8gRmFsbCBiYWNrIHRvIGNvbXB1dGVkIHRoZW4g
dW5jb21wdXRlZCBjc3MgaWYgbmVjZXNzYXJ5CisgICAgICAgIHZhbCA9IGN1ckNTUyggZWxlbSwg
bmFtZSwgc3R5bGVzICk7CisgICAgICAgIGlmICggdmFsIDwgMCB8fCB2YWwgPT0gbnVsbCApIHsK
KyAgICAgICAgICAgIHZhbCA9IGVsZW0uc3R5bGVbIG5hbWUgXTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIENvbXB1dGVkIHVuaXQgaXMgbm90IHBpeGVscy4gU3RvcCBoZXJlIGFuZCByZXR1cm4u
CisgICAgICAgIGlmICggcm51bW5vbnB4LnRlc3QoIHZhbCApICkgeworICAgICAgICAgICAgcmV0
dXJuIHZhbDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENoZWNrIGZvciBzdHlsZSBpbiBjYXNl
IGEgYnJvd3NlciB3aGljaCByZXR1cm5zIHVucmVsaWFibGUgdmFsdWVzCisgICAgICAgIC8vIGZv
ciBnZXRDb21wdXRlZFN0eWxlIHNpbGVudGx5IGZhbGxzIGJhY2sgdG8gdGhlIHJlbGlhYmxlIGVs
ZW0uc3R5bGUKKyAgICAgICAgdmFsdWVJc0JvcmRlckJveCA9IGlzQm9yZGVyQm94ICYmCisgICAg
ICAgICAgICAoIHN1cHBvcnQuYm94U2l6aW5nUmVsaWFibGUoKSB8fCB2YWwgPT09IGVsZW0uc3R5
bGVbIG5hbWUgXSApOworCisgICAgICAgIC8vIE5vcm1hbGl6ZSAiIiwgYXV0bywgYW5kIHByZXBh
cmUgZm9yIGV4dHJhCisgICAgICAgIHZhbCA9IHBhcnNlRmxvYXQoIHZhbCApIHx8IDA7CisgICAg
fQorCisgICAgLy8gVXNlIHRoZSBhY3RpdmUgYm94LXNpemluZyBtb2RlbCB0byBhZGQvc3VidHJh
Y3QgaXJyZWxldmFudCBzdHlsZXMKKyAgICByZXR1cm4gKCB2YWwgKworICAgICAgICBhdWdtZW50
V2lkdGhPckhlaWdodCgKKyAgICAgICAgICAgIGVsZW0sCisgICAgICAgICAgICBuYW1lLAorICAg
ICAgICAgICAgZXh0cmEgfHwgKCBpc0JvcmRlckJveCA/ICJib3JkZXIiIDogImNvbnRlbnQiICks
CisgICAgICAgICAgICB2YWx1ZUlzQm9yZGVyQm94LAorICAgICAgICAgICAgc3R5bGVzCisgICAg
ICAgICkKKyAgICApICsgInB4IjsKK30KKworalF1ZXJ5LmV4dGVuZCggeworCisgICAgLy8gQWRk
IGluIHN0eWxlIHByb3BlcnR5IGhvb2tzIGZvciBvdmVycmlkaW5nIHRoZSBkZWZhdWx0CisgICAg
Ly8gYmVoYXZpb3Igb2YgZ2V0dGluZyBhbmQgc2V0dGluZyBhIHN0eWxlIHByb3BlcnR5CisgICAg
Y3NzSG9va3M6IHsKKyAgICAgICAgb3BhY2l0eTogeworICAgICAgICAgICAgZ2V0OiBmdW5jdGlv
biggZWxlbSwgY29tcHV0ZWQgKSB7CisgICAgICAgICAgICAgICAgaWYgKCBjb21wdXRlZCApIHsK
KworICAgICAgICAgICAgICAgICAgICAvLyBXZSBzaG91bGQgYWx3YXlzIGdldCBhIG51bWJlciBi
YWNrIGZyb20gb3BhY2l0eQorICAgICAgICAgICAgICAgICAgICB2YXIgcmV0ID0gY3VyQ1NTKCBl
bGVtLCAib3BhY2l0eSIgKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldCA9PT0gIiIg
PyAiMSIgOiByZXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfSwKKworICAgIC8vIERvbid0IGF1dG9tYXRpY2FsbHkgYWRkICJweCIgdG8gdGhlc2Ug
cG9zc2libHktdW5pdGxlc3MgcHJvcGVydGllcworICAgIGNzc051bWJlcjogeworICAgICAgICAi
YW5pbWF0aW9uSXRlcmF0aW9uQ291bnQiOiB0cnVlLAorICAgICAgICAiY29sdW1uQ291bnQiOiB0
cnVlLAorICAgICAgICAiZmlsbE9wYWNpdHkiOiB0cnVlLAorICAgICAgICAiZmxleEdyb3ciOiB0
cnVlLAorICAgICAgICAiZmxleFNocmluayI6IHRydWUsCisgICAgICAgICJmb250V2VpZ2h0Ijog
dHJ1ZSwKKyAgICAgICAgImxpbmVIZWlnaHQiOiB0cnVlLAorICAgICAgICAib3BhY2l0eSI6IHRy
dWUsCisgICAgICAgICJvcmRlciI6IHRydWUsCisgICAgICAgICJvcnBoYW5zIjogdHJ1ZSwKKyAg
ICAgICAgIndpZG93cyI6IHRydWUsCisgICAgICAgICJ6SW5kZXgiOiB0cnVlLAorICAgICAgICAi
em9vbSI6IHRydWUKKyAgICB9LAorCisgICAgLy8gQWRkIGluIHByb3BlcnRpZXMgd2hvc2UgbmFt
ZXMgeW91IHdpc2ggdG8gZml4IGJlZm9yZQorICAgIC8vIHNldHRpbmcgb3IgZ2V0dGluZyB0aGUg
dmFsdWUKKyAgICBjc3NQcm9wczogeworICAgICAgICAiZmxvYXQiOiAiY3NzRmxvYXQiCisgICAg
fSwKKworICAgIC8vIEdldCBhbmQgc2V0IHRoZSBzdHlsZSBwcm9wZXJ0eSBvbiBhIERPTSBOb2Rl
CisgICAgc3R5bGU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSwgZXh0cmEgKSB7CisKKyAg
ICAgICAgLy8gRG9uJ3Qgc2V0IHN0eWxlcyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzCisgICAg
ICAgIGlmICggIWVsZW0gfHwgZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09
PSA4IHx8ICFlbGVtLnN0eWxlICkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBu
YW1lCisgICAgICAgIHZhciByZXQsIHR5cGUsIGhvb2tzLAorICAgICAgICAgICAgb3JpZ05hbWUg
PSBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lICksCisgICAgICAgICAgICBzdHlsZSA9IGVsZW0uc3R5
bGU7CisKKyAgICAgICAgbmFtZSA9IGpRdWVyeS5jc3NQcm9wc1sgb3JpZ05hbWUgXSB8fAorICAg
ICAgICAgICAgKCBqUXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0gPSB2ZW5kb3JQcm9wTmFtZSgg
b3JpZ05hbWUgKSB8fCBvcmlnTmFtZSApOworCisgICAgICAgIC8vIEdldHMgaG9vayBmb3IgdGhl
IHByZWZpeGVkIHZlcnNpb24sIHRoZW4gdW5wcmVmaXhlZCB2ZXJzaW9uCisgICAgICAgIGhvb2tz
ID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBd
OworCisgICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIHNldHRpbmcgYSB2YWx1ZQorICAgICAgICBp
ZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICB0eXBlID0gdHlwZW9mIHZh
bHVlOworCisgICAgICAgICAgICAvLyBDb252ZXJ0ICIrPSIgb3IgIi09IiB0byByZWxhdGl2ZSBu
dW1iZXJzICgjNzM0NSkKKyAgICAgICAgICAgIGlmICggdHlwZSA9PT0gInN0cmluZyIgJiYgKCBy
ZXQgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICkgKSAmJiByZXRbIDEgXSApIHsKKyAgICAgICAgICAg
ICAgICB2YWx1ZSA9IGFkanVzdENTUyggZWxlbSwgbmFtZSwgcmV0ICk7CisKKyAgICAgICAgICAg
ICAgICAvLyBGaXhlcyBidWcgIzkyMzcKKyAgICAgICAgICAgICAgICB0eXBlID0gIm51bWJlciI7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IG51bGwgYW5k
IE5hTiB2YWx1ZXMgYXJlbid0IHNldCAoIzcxMTYpCisgICAgICAgICAgICBpZiAoIHZhbHVlID09
IG51bGwgfHwgdmFsdWUgIT09IHZhbHVlICkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSWYgYSBudW1iZXIgd2FzIHBhc3NlZCBpbiwg
YWRkIHRoZSB1bml0IChleGNlcHQgZm9yIGNlcnRhaW4gQ1NTIHByb3BlcnRpZXMpCisgICAgICAg
ICAgICBpZiAoIHR5cGUgPT09ICJudW1iZXIiICkgeworICAgICAgICAgICAgICAgIHZhbHVlICs9
IHJldCAmJiByZXRbIDMgXSB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIG9yaWdOYW1lIF0gPyAiIiA6
ICJweCIgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gYmFja2dyb3VuZC0qIHBy
b3BzIGFmZmVjdCBvcmlnaW5hbCBjbG9uZSdzIHZhbHVlcworICAgICAgICAgICAgaWYgKCAhc3Vw
cG9ydC5jbGVhckNsb25lU3R5bGUgJiYgdmFsdWUgPT09ICIiICYmIG5hbWUuaW5kZXhPZiggImJh
Y2tncm91bmQiICkgPT09IDAgKSB7CisgICAgICAgICAgICAgICAgc3R5bGVbIG5hbWUgXSA9ICJp
bmhlcml0IjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSWYgYSBob29rIHdhcyBw
cm92aWRlZCwgdXNlIHRoYXQgdmFsdWUsIG90aGVyd2lzZSBqdXN0IHNldCB0aGUgc3BlY2lmaWVk
IHZhbHVlCisgICAgICAgICAgICBpZiAoICFob29rcyB8fCAhKCAic2V0IiBpbiBob29rcyApIHx8
CisgICAgICAgICAgICAgICAgKCB2YWx1ZSA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIGV4dHJh
ICkgKSAhPT0gdW5kZWZpbmVkICkgeworCisgICAgICAgICAgICAgICAgc3R5bGVbIG5hbWUgXSA9
IHZhbHVlOworICAgICAgICAgICAgfQorCisgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAg
IC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBub24tY29tcHV0ZWQgdmFsdWUgZnJv
bSB0aGVyZQorICAgICAgICAgICAgaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29rcyAmJgorICAg
ICAgICAgICAgICAgICggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBmYWxzZSwgZXh0cmEgKSApICE9
PSB1bmRlZmluZWQgKSB7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBPdGhlcndpc2UganVzdCBnZXQgdGhlIHZhbHVlIGZyb20g
dGhlIHN0eWxlIG9iamVjdAorICAgICAgICAgICAgcmV0dXJuIHN0eWxlWyBuYW1lIF07CisgICAg
ICAgIH0KKyAgICB9LAorCisgICAgY3NzOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZXh0cmEsIHN0
eWxlcyApIHsKKyAgICAgICAgdmFyIHZhbCwgbnVtLCBob29rcywKKyAgICAgICAgICAgIG9yaWdO
YW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggbmFtZSApOworCisgICAgICAgIC8vIE1ha2Ugc3VyZSB0
aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZQorICAgICAgICBuYW1lID0galF1
ZXJ5LmNzc1Byb3BzWyBvcmlnTmFtZSBdIHx8CisgICAgICAgICAgICAoIGpRdWVyeS5jc3NQcm9w
c1sgb3JpZ05hbWUgXSA9IHZlbmRvclByb3BOYW1lKCBvcmlnTmFtZSApIHx8IG9yaWdOYW1lICk7
CisKKyAgICAgICAgLy8gVHJ5IHByZWZpeGVkIG5hbWUgZm9sbG93ZWQgYnkgdGhlIHVucHJlZml4
ZWQgbmFtZQorICAgICAgICBob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdIHx8IGpRdWVy
eS5jc3NIb29rc1sgb3JpZ05hbWUgXTsKKworICAgICAgICAvLyBJZiBhIGhvb2sgd2FzIHByb3Zp
ZGVkIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZQorICAgICAgICBpZiAoIGhvb2tz
ICYmICJnZXQiIGluIGhvb2tzICkgeworICAgICAgICAgICAgdmFsID0gaG9va3MuZ2V0KCBlbGVt
LCB0cnVlLCBleHRyYSApOworICAgICAgICB9CisKKyAgICAgICAgLy8gT3RoZXJ3aXNlLCBpZiBh
IHdheSB0byBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGV4aXN0cywgdXNlIHRoYXQKKyAgICAgICAg
aWYgKCB2YWwgPT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIHZhbCA9IGN1ckNTUyggZWxl
bSwgbmFtZSwgc3R5bGVzICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBDb252ZXJ0ICJub3Jt
YWwiIHRvIGNvbXB1dGVkIHZhbHVlCisgICAgICAgIGlmICggdmFsID09PSAibm9ybWFsIiAmJiBu
YW1lIGluIGNzc05vcm1hbFRyYW5zZm9ybSApIHsKKyAgICAgICAgICAgIHZhbCA9IGNzc05vcm1h
bFRyYW5zZm9ybVsgbmFtZSBdOworICAgICAgICB9CisKKyAgICAgICAgLy8gTWFrZSBudW1lcmlj
IGlmIGZvcmNlZCBvciBhIHF1YWxpZmllciB3YXMgcHJvdmlkZWQgYW5kIHZhbCBsb29rcyBudW1l
cmljCisgICAgICAgIGlmICggZXh0cmEgPT09ICIiIHx8IGV4dHJhICkgeworICAgICAgICAgICAg
bnVtID0gcGFyc2VGbG9hdCggdmFsICk7CisgICAgICAgICAgICByZXR1cm4gZXh0cmEgPT09IHRy
dWUgfHwgaXNGaW5pdGUoIG51bSApID8gbnVtIHx8IDAgOiB2YWw7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHZhbDsKKyAgICB9Cit9ICk7CisKK2pRdWVyeS5lYWNoKCBbICJoZWlnaHQiLCAi
d2lkdGgiIF0sIGZ1bmN0aW9uKCBpLCBuYW1lICkgeworICAgIGpRdWVyeS5jc3NIb29rc1sgbmFt
ZSBdID0geworICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCwgZXh0cmEgKSB7
CisgICAgICAgICAgICBpZiAoIGNvbXB1dGVkICkgeworCisgICAgICAgICAgICAgICAgLy8gQ2Vy
dGFpbiBlbGVtZW50cyBjYW4gaGF2ZSBkaW1lbnNpb24gaW5mbyBpZiB3ZSBpbnZpc2libHkgc2hv
dyB0aGVtCisgICAgICAgICAgICAgICAgLy8gYnV0IGl0IG11c3QgaGF2ZSBhIGN1cnJlbnQgZGlz
cGxheSBzdHlsZSB0aGF0IHdvdWxkIGJlbmVmaXQKKyAgICAgICAgICAgICAgICByZXR1cm4gcmRp
c3BsYXlzd2FwLnRlc3QoIGpRdWVyeS5jc3MoIGVsZW0sICJkaXNwbGF5IiApICkgJiYKKworICAg
ICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBTYWZhcmkgOCsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gVGFibGUgY29sdW1ucyBpbiBTYWZhcmkgaGF2ZSBub24temVybyBvZmZzZXRXaWR0aCAm
IHplcm8KKyAgICAgICAgICAgICAgICAgICAgLy8gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lk
dGggdW5sZXNzIGRpc3BsYXkgaXMgY2hhbmdlZC4KKyAgICAgICAgICAgICAgICAgICAgLy8gU3Vw
cG9ydDogSUUgPD0xMSBvbmx5CisgICAgICAgICAgICAgICAgICAgIC8vIFJ1bm5pbmcgZ2V0Qm91
bmRpbmdDbGllbnRSZWN0IG9uIGEgZGlzY29ubmVjdGVkIG5vZGUKKyAgICAgICAgICAgICAgICAg
ICAgLy8gaW4gSUUgdGhyb3dzIGFuIGVycm9yLgorICAgICAgICAgICAgICAgICAgICAoICFlbGVt
LmdldENsaWVudFJlY3RzKCkubGVuZ3RoIHx8ICFlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgp
LndpZHRoICkgPworICAgICAgICAgICAgICAgICAgICAgICAgc3dhcCggZWxlbSwgY3NzU2hvdywg
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldFdpZHRo
T3JIZWlnaHQoIGVsZW0sIG5hbWUsIGV4dHJhICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9
ICkgOgorICAgICAgICAgICAgICAgICAgICAgICAgZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgbmFt
ZSwgZXh0cmEgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKworICAgICAgICBzZXQ6IGZ1
bmN0aW9uKCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSB7CisgICAgICAgICAgICB2YXIgbWF0Y2hlcywK
KyAgICAgICAgICAgICAgICBzdHlsZXMgPSBleHRyYSAmJiBnZXRTdHlsZXMoIGVsZW0gKSwKKyAg
ICAgICAgICAgICAgICBzdWJ0cmFjdCA9IGV4dHJhICYmIGF1Z21lbnRXaWR0aE9ySGVpZ2h0KAor
ICAgICAgICAgICAgICAgICAgICBlbGVtLAorICAgICAgICAgICAgICAgICAgICBuYW1lLAorICAg
ICAgICAgICAgICAgICAgICBleHRyYSwKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmNzcygg
ZWxlbSwgImJveFNpemluZyIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gImJvcmRlci1ib3giLAorICAg
ICAgICAgICAgICAgICAgICBzdHlsZXMKKyAgICAgICAgICAgICAgICApOworCisgICAgICAgICAg
ICAvLyBDb252ZXJ0IHRvIHBpeGVscyBpZiB2YWx1ZSBhZGp1c3RtZW50IGlzIG5lZWRlZAorICAg
ICAgICAgICAgaWYgKCBzdWJ0cmFjdCAmJiAoIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWMoIHZhbHVl
ICkgKSAmJgorICAgICAgICAgICAgICAgICggbWF0Y2hlc1sgMyBdIHx8ICJweCIgKSAhPT0gInB4
IiApIHsKKworICAgICAgICAgICAgICAgIGVsZW0uc3R5bGVbIG5hbWUgXSA9IHZhbHVlOworICAg
ICAgICAgICAgICAgIHZhbHVlID0galF1ZXJ5LmNzcyggZWxlbSwgbmFtZSApOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICByZXR1cm4gc2V0UG9zaXRpdmVOdW1iZXIoIGVsZW0sIHZhbHVl
LCBzdWJ0cmFjdCApOworICAgICAgICB9CisgICAgfTsKK30gKTsKKworalF1ZXJ5LmNzc0hvb2tz
Lm1hcmdpbkxlZnQgPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucmVsaWFibGVNYXJnaW5MZWZ0LAor
ICAgIGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHsKKyAgICAgICAgaWYgKCBjb21wdXRlZCAp
IHsKKyAgICAgICAgICAgIHJldHVybiAoIHBhcnNlRmxvYXQoIGN1ckNTUyggZWxlbSwgIm1hcmdp
bkxlZnQiICkgKSB8fAorICAgICAgICAgICAgICAgIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0
KCkubGVmdCAtCisgICAgICAgICAgICAgICAgICAgIHN3YXAoIGVsZW0sIHsgbWFyZ2luTGVmdDog
MCB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLmdl
dEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7CisgICAgICAgICAgICAgICAgICAgIH0gKQorICAg
ICAgICAgICAgICAgICkgKyAicHgiOworICAgICAgICB9CisgICAgfQorKTsKKworLy8gVGhlc2Ug
aG9va3MgYXJlIHVzZWQgYnkgYW5pbWF0ZSB0byBleHBhbmQgcHJvcGVydGllcworalF1ZXJ5LmVh
Y2goIHsKKyAgICBtYXJnaW46ICIiLAorICAgIHBhZGRpbmc6ICIiLAorICAgIGJvcmRlcjogIldp
ZHRoIgorfSwgZnVuY3Rpb24oIHByZWZpeCwgc3VmZml4ICkgeworICAgIGpRdWVyeS5jc3NIb29r
c1sgcHJlZml4ICsgc3VmZml4IF0gPSB7CisgICAgICAgIGV4cGFuZDogZnVuY3Rpb24oIHZhbHVl
ICkgeworICAgICAgICAgICAgdmFyIGkgPSAwLAorICAgICAgICAgICAgICAgIGV4cGFuZGVkID0g
e30sCisKKyAgICAgICAgICAgICAgICAvLyBBc3N1bWVzIGEgc2luZ2xlIG51bWJlciBpZiBub3Qg
YSBzdHJpbmcKKyAgICAgICAgICAgICAgICBwYXJ0cyA9IHR5cGVvZiB2YWx1ZSA9PT0gInN0cmlu
ZyIgPyB2YWx1ZS5zcGxpdCggIiAiICkgOiBbIHZhbHVlIF07CisKKyAgICAgICAgICAgIGZvciAo
IDsgaSA8IDQ7IGkrKyApIHsKKyAgICAgICAgICAgICAgICBleHBhbmRlZFsgcHJlZml4ICsgY3Nz
RXhwYW5kWyBpIF0gKyBzdWZmaXggXSA9CisgICAgICAgICAgICAgICAgICAgIHBhcnRzWyBpIF0g
fHwgcGFydHNbIGkgLSAyIF0gfHwgcGFydHNbIDAgXTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgcmV0dXJuIGV4cGFuZGVkOworICAgICAgICB9CisgICAgfTsKKworICAgIGlmICggIXJt
YXJnaW4udGVzdCggcHJlZml4ICkgKSB7CisgICAgICAgIGpRdWVyeS5jc3NIb29rc1sgcHJlZml4
ICsgc3VmZml4IF0uc2V0ID0gc2V0UG9zaXRpdmVOdW1iZXI7CisgICAgfQorfSApOworCitqUXVl
cnkuZm4uZXh0ZW5kKCB7CisgICAgY3NzOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7CisgICAg
ICAgIHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHsK
KyAgICAgICAgICAgIHZhciBzdHlsZXMsIGxlbiwKKyAgICAgICAgICAgICAgICBtYXAgPSB7fSwK
KyAgICAgICAgICAgICAgICBpID0gMDsKKworICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNBcnJh
eSggbmFtZSApICkgeworICAgICAgICAgICAgICAgIHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSAp
OworICAgICAgICAgICAgICAgIGxlbiA9IG5hbWUubGVuZ3RoOworCisgICAgICAgICAgICAgICAg
Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgIG1hcFsgbmFtZVsg
aSBdIF0gPSBqUXVlcnkuY3NzKCBlbGVtLCBuYW1lWyBpIF0sIGZhbHNlLCBzdHlsZXMgKTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFwOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/CisgICAgICAg
ICAgICAgICAgalF1ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lLCB2YWx1ZSApIDoKKyAgICAgICAgICAg
ICAgICBqUXVlcnkuY3NzKCBlbGVtLCBuYW1lICk7CisgICAgICAgIH0sIG5hbWUsIHZhbHVlLCBh
cmd1bWVudHMubGVuZ3RoID4gMSApOworICAgIH0KK30gKTsKKworCitmdW5jdGlvbiBUd2Vlbigg
ZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKSB7CisgICAgcmV0dXJuIG5ldyBUd2Vl
bi5wcm90b3R5cGUuaW5pdCggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKTsKK30K
K2pRdWVyeS5Ud2VlbiA9IFR3ZWVuOworCitUd2Vlbi5wcm90b3R5cGUgPSB7CisgICAgY29uc3Ry
dWN0b3I6IFR3ZWVuLAorICAgIGluaXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBl
bmQsIGVhc2luZywgdW5pdCApIHsKKyAgICAgICAgdGhpcy5lbGVtID0gZWxlbTsKKyAgICAgICAg
dGhpcy5wcm9wID0gcHJvcDsKKyAgICAgICAgdGhpcy5lYXNpbmcgPSBlYXNpbmcgfHwgalF1ZXJ5
LmVhc2luZy5fZGVmYXVsdDsKKyAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9uczsKKyAgICAg
ICAgdGhpcy5zdGFydCA9IHRoaXMubm93ID0gdGhpcy5jdXIoKTsKKyAgICAgICAgdGhpcy5lbmQg
PSBlbmQ7CisgICAgICAgIHRoaXMudW5pdCA9IHVuaXQgfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBw
cm9wIF0gPyAiIiA6ICJweCIgKTsKKyAgICB9LAorICAgIGN1cjogZnVuY3Rpb24oKSB7CisgICAg
ICAgIHZhciBob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07CisKKyAgICAgICAg
cmV0dXJuIGhvb2tzICYmIGhvb2tzLmdldCA/CisgICAgICAgICAgICBob29rcy5nZXQoIHRoaXMg
KSA6CisgICAgICAgICAgICBUd2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KCB0aGlzICk7Cisg
ICAgfSwKKyAgICBydW46IGZ1bmN0aW9uKCBwZXJjZW50ICkgeworICAgICAgICB2YXIgZWFzZWQs
CisgICAgICAgICAgICBob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07CisKKyAg
ICAgICAgaWYgKCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKSB7CisgICAgICAgICAgICB0aGlzLnBv
cyA9IGVhc2VkID0galF1ZXJ5LmVhc2luZ1sgdGhpcy5lYXNpbmcgXSgKKyAgICAgICAgICAgICAg
ICBwZXJjZW50LCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKiBwZXJjZW50LCAwLCAxLCB0aGlzLm9w
dGlvbnMuZHVyYXRpb24KKyAgICAgICAgICAgICk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICB0aGlzLnBvcyA9IGVhc2VkID0gcGVyY2VudDsKKyAgICAgICAgfQorICAgICAgICB0aGlz
Lm5vdyA9ICggdGhpcy5lbmQgLSB0aGlzLnN0YXJ0ICkgKiBlYXNlZCArIHRoaXMuc3RhcnQ7CisK
KyAgICAgICAgaWYgKCB0aGlzLm9wdGlvbnMuc3RlcCApIHsKKyAgICAgICAgICAgIHRoaXMub3B0
aW9ucy5zdGVwLmNhbGwoIHRoaXMuZWxlbSwgdGhpcy5ub3csIHRoaXMgKTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmICggaG9va3MgJiYgaG9va3Muc2V0ICkgeworICAgICAgICAgICAgaG9va3Mu
c2V0KCB0aGlzICk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBUd2Vlbi5wcm9wSG9v
a3MuX2RlZmF1bHQuc2V0KCB0aGlzICk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7
CisgICAgfQorfTsKKworVHdlZW4ucHJvdG90eXBlLmluaXQucHJvdG90eXBlID0gVHdlZW4ucHJv
dG90eXBlOworCitUd2Vlbi5wcm9wSG9va3MgPSB7CisgICAgX2RlZmF1bHQ6IHsKKyAgICAgICAg
Z2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7CisgICAgICAgICAgICB2YXIgcmVzdWx0OworCisgICAg
ICAgICAgICAvLyBVc2UgYSBwcm9wZXJ0eSBvbiB0aGUgZWxlbWVudCBkaXJlY3RseSB3aGVuIGl0
IGlzIG5vdCBhIERPTSBlbGVtZW50LAorICAgICAgICAgICAgLy8gb3Igd2hlbiB0aGVyZSBpcyBu
byBtYXRjaGluZyBzdHlsZSBwcm9wZXJ0eSB0aGF0IGV4aXN0cy4KKyAgICAgICAgICAgIGlmICgg
dHdlZW4uZWxlbS5ub2RlVHlwZSAhPT0gMSB8fAorICAgICAgICAgICAgICAgIHR3ZWVuLmVsZW1b
IHR3ZWVuLnByb3AgXSAhPSBudWxsICYmIHR3ZWVuLmVsZW0uc3R5bGVbIHR3ZWVuLnByb3AgXSA9
PSBudWxsICkgeworICAgICAgICAgICAgICAgIHJldHVybiB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9w
IF07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFBhc3NpbmcgYW4gZW1wdHkgc3Ry
aW5nIGFzIGEgM3JkIHBhcmFtZXRlciB0byAuY3NzIHdpbGwgYXV0b21hdGljYWxseQorICAgICAg
ICAgICAgLy8gYXR0ZW1wdCBhIHBhcnNlRmxvYXQgYW5kIGZhbGxiYWNrIHRvIGEgc3RyaW5nIGlm
IHRoZSBwYXJzZSBmYWlscy4KKyAgICAgICAgICAgIC8vIFNpbXBsZSB2YWx1ZXMgc3VjaCBhcyAi
MTBweCIgYXJlIHBhcnNlZCB0byBGbG9hdDsKKyAgICAgICAgICAgIC8vIGNvbXBsZXggdmFsdWVz
IHN1Y2ggYXMgInJvdGF0ZSgxcmFkKSIgYXJlIHJldHVybmVkIGFzLWlzLgorICAgICAgICAgICAg
cmVzdWx0ID0galF1ZXJ5LmNzcyggdHdlZW4uZWxlbSwgdHdlZW4ucHJvcCwgIiIgKTsKKworICAg
ICAgICAgICAgLy8gRW1wdHkgc3RyaW5ncywgbnVsbCwgdW5kZWZpbmVkIGFuZCAiYXV0byIgYXJl
IGNvbnZlcnRlZCB0byAwLgorICAgICAgICAgICAgcmV0dXJuICFyZXN1bHQgfHwgcmVzdWx0ID09
PSAiYXV0byIgPyAwIDogcmVzdWx0OworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9u
KCB0d2VlbiApIHsKKworICAgICAgICAgICAgLy8gVXNlIHN0ZXAgaG9vayBmb3IgYmFjayBjb21w
YXQuCisgICAgICAgICAgICAvLyBVc2UgY3NzSG9vayBpZiBpdHMgdGhlcmUuCisgICAgICAgICAg
ICAvLyBVc2UgLnN0eWxlIGlmIGF2YWlsYWJsZSBhbmQgdXNlIHBsYWluIHByb3BlcnRpZXMgd2hl
cmUgYXZhaWxhYmxlLgorICAgICAgICAgICAgaWYgKCBqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJv
cCBdICkgeworICAgICAgICAgICAgICAgIGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0oIHR3
ZWVuICk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlID09PSAx
ICYmCisgICAgICAgICAgICAgICAgKCB0d2Vlbi5lbGVtLnN0eWxlWyBqUXVlcnkuY3NzUHJvcHNb
IHR3ZWVuLnByb3AgXSBdICE9IG51bGwgfHwKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmNz
c0hvb2tzWyB0d2Vlbi5wcm9wIF0gKSApIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkuc3R5bGUo
IHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIHR3ZWVuLm5vdyArIHR3ZWVuLnVuaXQgKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBd
ID0gdHdlZW4ubm93OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfTsKKworLy8g
U3VwcG9ydDogSUUgPD05IG9ubHkKKy8vIFBhbmljIGJhc2VkIGFwcHJvYWNoIHRvIHNldHRpbmcg
dGhpbmdzIG9uIGRpc2Nvbm5lY3RlZCBub2RlcworVHdlZW4ucHJvcEhvb2tzLnNjcm9sbFRvcCA9
IFR3ZWVuLnByb3BIb29rcy5zY3JvbGxMZWZ0ID0geworICAgIHNldDogZnVuY3Rpb24oIHR3ZWVu
ICkgeworICAgICAgICBpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgJiYgdHdlZW4uZWxlbS5wYXJl
bnROb2RlICkgeworICAgICAgICAgICAgdHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4u
bm93OworICAgICAgICB9CisgICAgfQorfTsKKworalF1ZXJ5LmVhc2luZyA9IHsKKyAgICBsaW5l
YXI6IGZ1bmN0aW9uKCBwICkgeworICAgICAgICByZXR1cm4gcDsKKyAgICB9LAorICAgIHN3aW5n
OiBmdW5jdGlvbiggcCApIHsKKyAgICAgICAgcmV0dXJuIDAuNSAtIE1hdGguY29zKCBwICogTWF0
aC5QSSApIC8gMjsKKyAgICB9LAorICAgIF9kZWZhdWx0OiAic3dpbmciCit9OworCitqUXVlcnku
ZnggPSBUd2Vlbi5wcm90b3R5cGUuaW5pdDsKKworLy8gQmFjayBjb21wYXQgPDEuOCBleHRlbnNp
b24gcG9pbnQKK2pRdWVyeS5meC5zdGVwID0ge307CisKKworCisKK3ZhcgorICAgIGZ4Tm93LCB0
aW1lcklkLAorICAgIHJmeHR5cGVzID0gL14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLAorICAgIHJy
dW4gPSAvcXVldWVIb29rcyQvOworCitmdW5jdGlvbiByYWYoKSB7CisgICAgaWYgKCB0aW1lcklk
ICkgeworICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCByYWYgKTsKKyAgICAg
ICAgalF1ZXJ5LmZ4LnRpY2soKTsKKyAgICB9Cit9CisKKy8vIEFuaW1hdGlvbnMgY3JlYXRlZCBz
eW5jaHJvbm91c2x5IHdpbGwgcnVuIHN5bmNocm9ub3VzbHkKK2Z1bmN0aW9uIGNyZWF0ZUZ4Tm93
KCkgeworICAgIHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHsKKyAgICAgICAgZnhOb3cg
PSB1bmRlZmluZWQ7CisgICAgfSApOworICAgIHJldHVybiAoIGZ4Tm93ID0galF1ZXJ5Lm5vdygp
ICk7Cit9CisKKy8vIEdlbmVyYXRlIHBhcmFtZXRlcnMgdG8gY3JlYXRlIGEgc3RhbmRhcmQgYW5p
bWF0aW9uCitmdW5jdGlvbiBnZW5GeCggdHlwZSwgaW5jbHVkZVdpZHRoICkgeworICAgIHZhciB3
aGljaCwKKyAgICAgICAgaSA9IDAsCisgICAgICAgIGF0dHJzID0geyBoZWlnaHQ6IHR5cGUgfTsK
KworICAgIC8vIElmIHdlIGluY2x1ZGUgd2lkdGgsIHN0ZXAgdmFsdWUgaXMgMSB0byBkbyBhbGwg
Y3NzRXhwYW5kIHZhbHVlcywKKyAgICAvLyBvdGhlcndpc2Ugc3RlcCB2YWx1ZSBpcyAyIHRvIHNr
aXAgb3ZlciBMZWZ0IGFuZCBSaWdodAorICAgIGluY2x1ZGVXaWR0aCA9IGluY2x1ZGVXaWR0aCA/
IDEgOiAwOworICAgIGZvciAoIDsgaSA8IDQ7IGkgKz0gMiAtIGluY2x1ZGVXaWR0aCApIHsKKyAg
ICAgICAgd2hpY2ggPSBjc3NFeHBhbmRbIGkgXTsKKyAgICAgICAgYXR0cnNbICJtYXJnaW4iICsg
d2hpY2ggXSA9IGF0dHJzWyAicGFkZGluZyIgKyB3aGljaCBdID0gdHlwZTsKKyAgICB9CisKKyAg
ICBpZiAoIGluY2x1ZGVXaWR0aCApIHsKKyAgICAgICAgYXR0cnMub3BhY2l0eSA9IGF0dHJzLndp
ZHRoID0gdHlwZTsKKyAgICB9CisKKyAgICByZXR1cm4gYXR0cnM7Cit9CisKK2Z1bmN0aW9uIGNy
ZWF0ZVR3ZWVuKCB2YWx1ZSwgcHJvcCwgYW5pbWF0aW9uICkgeworICAgIHZhciB0d2VlbiwKKyAg
ICAgICAgY29sbGVjdGlvbiA9ICggQW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gfHwgW10gKS5j
b25jYXQoIEFuaW1hdGlvbi50d2VlbmVyc1sgIioiIF0gKSwKKyAgICAgICAgaW5kZXggPSAwLAor
ICAgICAgICBsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aDsKKyAgICBmb3IgKCA7IGluZGV4IDwg
bGVuZ3RoOyBpbmRleCsrICkgeworICAgICAgICBpZiAoICggdHdlZW4gPSBjb2xsZWN0aW9uWyBp
bmRleCBdLmNhbGwoIGFuaW1hdGlvbiwgcHJvcCwgdmFsdWUgKSApICkgeworCisgICAgICAgICAg
ICAvLyBXZSdyZSBkb25lIHdpdGggdGhpcyBwcm9wZXJ0eQorICAgICAgICAgICAgcmV0dXJuIHR3
ZWVuOworICAgICAgICB9CisgICAgfQorfQorCitmdW5jdGlvbiBkZWZhdWx0UHJlZmlsdGVyKCBl
bGVtLCBwcm9wcywgb3B0cyApIHsKKyAgICB2YXIgcHJvcCwgdmFsdWUsIHRvZ2dsZSwgaG9va3Ms
IG9sZGZpcmUsIHByb3BUd2VlbiwgcmVzdG9yZURpc3BsYXksIGRpc3BsYXksCisgICAgICAgIGlz
Qm94ID0gIndpZHRoIiBpbiBwcm9wcyB8fCAiaGVpZ2h0IiBpbiBwcm9wcywKKyAgICAgICAgYW5p
bSA9IHRoaXMsCisgICAgICAgIG9yaWcgPSB7fSwKKyAgICAgICAgc3R5bGUgPSBlbGVtLnN0eWxl
LAorICAgICAgICBoaWRkZW4gPSBlbGVtLm5vZGVUeXBlICYmIGlzSGlkZGVuV2l0aGluVHJlZSgg
ZWxlbSApLAorICAgICAgICBkYXRhU2hvdyA9IGRhdGFQcml2LmdldCggZWxlbSwgImZ4c2hvdyIg
KTsKKworICAgIC8vIFF1ZXVlLXNraXBwaW5nIGFuaW1hdGlvbnMgaGlqYWNrIHRoZSBmeCBob29r
cworICAgIGlmICggIW9wdHMucXVldWUgKSB7CisgICAgICAgIGhvb2tzID0galF1ZXJ5Ll9xdWV1
ZUhvb2tzKCBlbGVtLCAiZngiICk7CisgICAgICAgIGlmICggaG9va3MudW5xdWV1ZWQgPT0gbnVs
bCApIHsKKyAgICAgICAgICAgIGhvb2tzLnVucXVldWVkID0gMDsKKyAgICAgICAgICAgIG9sZGZp
cmUgPSBob29rcy5lbXB0eS5maXJlOworICAgICAgICAgICAgaG9va3MuZW1wdHkuZmlyZSA9IGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGlmICggIWhvb2tzLnVucXVldWVkICkgeworICAg
ICAgICAgICAgICAgICAgICBvbGRmaXJlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfTsKKyAgICAgICAgfQorICAgICAgICBob29rcy51bnF1ZXVlZCsrOworCisgICAgICAgIGFu
aW0uYWx3YXlzKCBmdW5jdGlvbigpIHsKKworICAgICAgICAgICAgLy8gRW5zdXJlIHRoZSBjb21w
bGV0ZSBoYW5kbGVyIGlzIGNhbGxlZCBiZWZvcmUgdGhpcyBjb21wbGV0ZXMKKyAgICAgICAgICAg
IGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBob29rcy51bnF1ZXVl
ZC0tOworICAgICAgICAgICAgICAgIGlmICggIWpRdWVyeS5xdWV1ZSggZWxlbSwgImZ4IiApLmxl
bmd0aCApIHsKKyAgICAgICAgICAgICAgICAgICAgaG9va3MuZW1wdHkuZmlyZSgpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gKTsKKyAgICAgICAgfSApOworICAgIH0KKworICAg
IC8vIERldGVjdCBzaG93L2hpZGUgYW5pbWF0aW9ucworICAgIGZvciAoIHByb3AgaW4gcHJvcHMg
KSB7CisgICAgICAgIHZhbHVlID0gcHJvcHNbIHByb3AgXTsKKyAgICAgICAgaWYgKCByZnh0eXBl
cy50ZXN0KCB2YWx1ZSApICkgeworICAgICAgICAgICAgZGVsZXRlIHByb3BzWyBwcm9wIF07Cisg
ICAgICAgICAgICB0b2dnbGUgPSB0b2dnbGUgfHwgdmFsdWUgPT09ICJ0b2dnbGUiOworICAgICAg
ICAgICAgaWYgKCB2YWx1ZSA9PT0gKCBoaWRkZW4gPyAiaGlkZSIgOiAic2hvdyIgKSApIHsKKwor
ICAgICAgICAgICAgICAgIC8vIFByZXRlbmQgdG8gYmUgaGlkZGVuIGlmIHRoaXMgaXMgYSAic2hv
dyIgYW5kCisgICAgICAgICAgICAgICAgLy8gdGhlcmUgaXMgc3RpbGwgZGF0YSBmcm9tIGEgc3Rv
cHBlZCBzaG93L2hpZGUKKyAgICAgICAgICAgICAgICBpZiAoIHZhbHVlID09PSAic2hvdyIgJiYg
ZGF0YVNob3cgJiYgZGF0YVNob3dbIHByb3AgXSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAg
ICAgICAgICAgICBoaWRkZW4gPSB0cnVlOworCisgICAgICAgICAgICAgICAgLy8gSWdub3JlIGFs
bCBvdGhlciBuby1vcCBzaG93L2hpZGUgZGF0YQorICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG9yaWdbIHByb3AgXSA9IGRhdGFTaG93ICYmIGRhdGFTaG93WyBw
cm9wIF0gfHwgalF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wICk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAvLyBCYWlsIG91dCBpZiB0aGlzIGlzIGEgbm8tb3AgbGlrZSAuaGlkZSgpLmhpZGUoKQor
ICAgIHByb3BUd2VlbiA9ICFqUXVlcnkuaXNFbXB0eU9iamVjdCggcHJvcHMgKTsKKyAgICBpZiAo
ICFwcm9wVHdlZW4gJiYgalF1ZXJ5LmlzRW1wdHlPYmplY3QoIG9yaWcgKSApIHsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIFJlc3RyaWN0ICJvdmVyZmxvdyIgYW5kICJkaXNwbGF5
IiBzdHlsZXMgZHVyaW5nIGJveCBhbmltYXRpb25zCisgICAgaWYgKCBpc0JveCAmJiBlbGVtLm5v
ZGVUeXBlID09PSAxICkgeworCisgICAgICAgIC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExLCBFZGdl
IDEyIC0gMTMKKyAgICAgICAgLy8gUmVjb3JkIGFsbCAzIG92ZXJmbG93IGF0dHJpYnV0ZXMgYmVj
YXVzZSBJRSBkb2VzIG5vdCBpbmZlciB0aGUgc2hvcnRoYW5kCisgICAgICAgIC8vIGZyb20gaWRl
bnRpY2FsbHktdmFsdWVkIG92ZXJmbG93WCBhbmQgb3ZlcmZsb3dZCisgICAgICAgIG9wdHMub3Zl
cmZsb3cgPSBbIHN0eWxlLm92ZXJmbG93LCBzdHlsZS5vdmVyZmxvd1gsIHN0eWxlLm92ZXJmbG93
WSBdOworCisgICAgICAgIC8vIElkZW50aWZ5IGEgZGlzcGxheSB0eXBlLCBwcmVmZXJyaW5nIG9s
ZCBzaG93L2hpZGUgZGF0YSBvdmVyIHRoZSBDU1MgY2FzY2FkZQorICAgICAgICByZXN0b3JlRGlz
cGxheSA9IGRhdGFTaG93ICYmIGRhdGFTaG93LmRpc3BsYXk7CisgICAgICAgIGlmICggcmVzdG9y
ZURpc3BsYXkgPT0gbnVsbCApIHsKKyAgICAgICAgICAgIHJlc3RvcmVEaXNwbGF5ID0gZGF0YVBy
aXYuZ2V0KCBlbGVtLCAiZGlzcGxheSIgKTsKKyAgICAgICAgfQorICAgICAgICBkaXNwbGF5ID0g
alF1ZXJ5LmNzcyggZWxlbSwgImRpc3BsYXkiICk7CisgICAgICAgIGlmICggZGlzcGxheSA9PT0g
Im5vbmUiICkgeworICAgICAgICAgICAgaWYgKCByZXN0b3JlRGlzcGxheSApIHsKKyAgICAgICAg
ICAgICAgICBkaXNwbGF5ID0gcmVzdG9yZURpc3BsYXk7CisgICAgICAgICAgICB9IGVsc2Ugewor
CisgICAgICAgICAgICAgICAgLy8gR2V0IG5vbmVtcHR5IHZhbHVlKHMpIGJ5IHRlbXBvcmFyaWx5
IGZvcmNpbmcgdmlzaWJpbGl0eQorICAgICAgICAgICAgICAgIHNob3dIaWRlKCBbIGVsZW0gXSwg
dHJ1ZSApOworICAgICAgICAgICAgICAgIHJlc3RvcmVEaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNw
bGF5IHx8IHJlc3RvcmVEaXNwbGF5OworICAgICAgICAgICAgICAgIGRpc3BsYXkgPSBqUXVlcnku
Y3NzKCBlbGVtLCAiZGlzcGxheSIgKTsKKyAgICAgICAgICAgICAgICBzaG93SGlkZSggWyBlbGVt
IF0gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEFuaW1hdGUgaW5s
aW5lIGVsZW1lbnRzIGFzIGlubGluZS1ibG9jaworICAgICAgICBpZiAoIGRpc3BsYXkgPT09ICJp
bmxpbmUiIHx8IGRpc3BsYXkgPT09ICJpbmxpbmUtYmxvY2siICYmIHJlc3RvcmVEaXNwbGF5ICE9
IG51bGwgKSB7CisgICAgICAgICAgICBpZiAoIGpRdWVyeS5jc3MoIGVsZW0sICJmbG9hdCIgKSA9
PT0gIm5vbmUiICkgeworCisgICAgICAgICAgICAgICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwg
ZGlzcGxheSB2YWx1ZSBhdCB0aGUgZW5kIG9mIHB1cmUgc2hvdy9oaWRlIGFuaW1hdGlvbnMKKyAg
ICAgICAgICAgICAgICBpZiAoICFwcm9wVHdlZW4gKSB7CisgICAgICAgICAgICAgICAgICAgIGFu
aW0uZG9uZSggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS5kaXNw
bGF5ID0gcmVzdG9yZURpc3BsYXk7CisgICAgICAgICAgICAgICAgICAgIH0gKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCByZXN0b3JlRGlzcGxheSA9PSBudWxsICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgZGlzcGxheSA9IHN0eWxlLmRpc3BsYXk7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXN0b3JlRGlzcGxheSA9IGRpc3BsYXkgPT09ICJub25lIiA/ICIiIDogZGlzcGxheTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBzdHlsZS5kaXNwbGF5ID0gImlubGluZS1ibG9jayI7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBpZiAoIG9wdHMub3ZlcmZsb3cgKSB7CisgICAgICAgIHN0eWxlLm92
ZXJmbG93ID0gImhpZGRlbiI7CisgICAgICAgIGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgIHN0eWxlLm92ZXJmbG93ID0gb3B0cy5vdmVyZmxvd1sgMCBdOworICAgICAgICAg
ICAgc3R5bGUub3ZlcmZsb3dYID0gb3B0cy5vdmVyZmxvd1sgMSBdOworICAgICAgICAgICAgc3R5
bGUub3ZlcmZsb3dZID0gb3B0cy5vdmVyZmxvd1sgMiBdOworICAgICAgICB9ICk7CisgICAgfQor
CisgICAgLy8gSW1wbGVtZW50IHNob3cvaGlkZSBhbmltYXRpb25zCisgICAgcHJvcFR3ZWVuID0g
ZmFsc2U7CisgICAgZm9yICggcHJvcCBpbiBvcmlnICkgeworCisgICAgICAgIC8vIEdlbmVyYWwg
c2hvdy9oaWRlIHNldHVwIGZvciB0aGlzIGVsZW1lbnQgYW5pbWF0aW9uCisgICAgICAgIGlmICgg
IXByb3BUd2VlbiApIHsKKyAgICAgICAgICAgIGlmICggZGF0YVNob3cgKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCAiaGlkZGVuIiBpbiBkYXRhU2hvdyApIHsKKyAgICAgICAgICAgICAgICAgICAg
aGlkZGVuID0gZGF0YVNob3cuaGlkZGVuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGF0YVNob3cgPSBkYXRhUHJpdi5hY2Nlc3MoIGVs
ZW0sICJmeHNob3ciLCB7IGRpc3BsYXk6IHJlc3RvcmVEaXNwbGF5IH0gKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLy8gU3RvcmUgaGlkZGVuL3Zpc2libGUgZm9yIHRvZ2dsZSBzbyBg
LnN0b3AoKS50b2dnbGUoKWAgInJldmVyc2VzIgorICAgICAgICAgICAgaWYgKCB0b2dnbGUgKSB7
CisgICAgICAgICAgICAgICAgZGF0YVNob3cuaGlkZGVuID0gIWhpZGRlbjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLy8gU2hvdyBlbGVtZW50cyBiZWZvcmUgYW5pbWF0aW5nIHRoZW0K
KyAgICAgICAgICAgIGlmICggaGlkZGVuICkgeworICAgICAgICAgICAgICAgIHNob3dIaWRlKCBb
IGVsZW0gXSwgdHJ1ZSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBlc2xpbnQt
ZGlzYWJsZSBuby1sb29wLWZ1bmMgKi8KKworICAgICAgICAgICAgYW5pbS5kb25lKCBmdW5jdGlv
bigpIHsKKworICAgICAgICAgICAgLyogZXNsaW50LWVuYWJsZSBuby1sb29wLWZ1bmMgKi8KKwor
ICAgICAgICAgICAgICAgIC8vIFRoZSBmaW5hbCBzdGVwIG9mIGEgImhpZGUiIGFuaW1hdGlvbiBp
cyBhY3R1YWxseSBoaWRpbmcgdGhlIGVsZW1lbnQKKyAgICAgICAgICAgICAgICBpZiAoICFoaWRk
ZW4gKSB7CisgICAgICAgICAgICAgICAgICAgIHNob3dIaWRlKCBbIGVsZW0gXSApOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkYXRhUHJpdi5yZW1vdmUoIGVsZW0sICJmeHNo
b3ciICk7CisgICAgICAgICAgICAgICAgZm9yICggcHJvcCBpbiBvcmlnICkgeworICAgICAgICAg
ICAgICAgICAgICBqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIG9yaWdbIHByb3AgXSApOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gKTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IFBlci1wcm9wZXJ0eSBzZXR1cAorICAgICAgICBwcm9wVHdlZW4gPSBjcmVhdGVUd2VlbiggaGlk
ZGVuID8gZGF0YVNob3dbIHByb3AgXSA6IDAsIHByb3AsIGFuaW0gKTsKKyAgICAgICAgaWYgKCAh
KCBwcm9wIGluIGRhdGFTaG93ICkgKSB7CisgICAgICAgICAgICBkYXRhU2hvd1sgcHJvcCBdID0g
cHJvcFR3ZWVuLnN0YXJ0OworICAgICAgICAgICAgaWYgKCBoaWRkZW4gKSB7CisgICAgICAgICAg
ICAgICAgcHJvcFR3ZWVuLmVuZCA9IHByb3BUd2Vlbi5zdGFydDsKKyAgICAgICAgICAgICAgICBw
cm9wVHdlZW4uc3RhcnQgPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQor
CitmdW5jdGlvbiBwcm9wRmlsdGVyKCBwcm9wcywgc3BlY2lhbEVhc2luZyApIHsKKyAgICB2YXIg
aW5kZXgsIG5hbWUsIGVhc2luZywgdmFsdWUsIGhvb2tzOworCisgICAgLy8gY2FtZWxDYXNlLCBz
cGVjaWFsRWFzaW5nIGFuZCBleHBhbmQgY3NzSG9vayBwYXNzCisgICAgZm9yICggaW5kZXggaW4g
cHJvcHMgKSB7CisgICAgICAgIG5hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBpbmRleCApOworICAg
ICAgICBlYXNpbmcgPSBzcGVjaWFsRWFzaW5nWyBuYW1lIF07CisgICAgICAgIHZhbHVlID0gcHJv
cHNbIGluZGV4IF07CisgICAgICAgIGlmICggalF1ZXJ5LmlzQXJyYXkoIHZhbHVlICkgKSB7Cisg
ICAgICAgICAgICBlYXNpbmcgPSB2YWx1ZVsgMSBdOworICAgICAgICAgICAgdmFsdWUgPSBwcm9w
c1sgaW5kZXggXSA9IHZhbHVlWyAwIF07CisgICAgICAgIH0KKworICAgICAgICBpZiAoIGluZGV4
ICE9PSBuYW1lICkgeworICAgICAgICAgICAgcHJvcHNbIG5hbWUgXSA9IHZhbHVlOworICAgICAg
ICAgICAgZGVsZXRlIHByb3BzWyBpbmRleCBdOworICAgICAgICB9CisKKyAgICAgICAgaG9va3Mg
PSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXTsKKyAgICAgICAgaWYgKCBob29rcyAmJiAiZXhwYW5k
IiBpbiBob29rcyApIHsKKyAgICAgICAgICAgIHZhbHVlID0gaG9va3MuZXhwYW5kKCB2YWx1ZSAp
OworICAgICAgICAgICAgZGVsZXRlIHByb3BzWyBuYW1lIF07CisKKyAgICAgICAgICAgIC8vIE5v
dCBxdWl0ZSAkLmV4dGVuZCwgdGhpcyB3b24ndCBvdmVyd3JpdGUgZXhpc3Rpbmcga2V5cy4KKyAg
ICAgICAgICAgIC8vIFJldXNpbmcgJ2luZGV4JyBiZWNhdXNlIHdlIGhhdmUgdGhlIGNvcnJlY3Qg
Im5hbWUiCisgICAgICAgICAgICBmb3IgKCBpbmRleCBpbiB2YWx1ZSApIHsKKyAgICAgICAgICAg
ICAgICBpZiAoICEoIGluZGV4IGluIHByb3BzICkgKSB7CisgICAgICAgICAgICAgICAgICAgIHBy
b3BzWyBpbmRleCBdID0gdmFsdWVbIGluZGV4IF07CisgICAgICAgICAgICAgICAgICAgIHNwZWNp
YWxFYXNpbmdbIGluZGV4IF0gPSBlYXNpbmc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3BlY2lhbEVhc2luZ1sgbmFtZSBd
ID0gZWFzaW5nOworICAgICAgICB9CisgICAgfQorfQorCitmdW5jdGlvbiBBbmltYXRpb24oIGVs
ZW0sIHByb3BlcnRpZXMsIG9wdGlvbnMgKSB7CisgICAgdmFyIHJlc3VsdCwKKyAgICAgICAgc3Rv
cHBlZCwKKyAgICAgICAgaW5kZXggPSAwLAorICAgICAgICBsZW5ndGggPSBBbmltYXRpb24ucHJl
ZmlsdGVycy5sZW5ndGgsCisgICAgICAgIGRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCkuYWx3
YXlzKCBmdW5jdGlvbigpIHsKKworICAgICAgICAgICAgLy8gRG9uJ3QgbWF0Y2ggZWxlbSBpbiB0
aGUgOmFuaW1hdGVkIHNlbGVjdG9yCisgICAgICAgICAgICBkZWxldGUgdGljay5lbGVtOworICAg
ICAgICB9ICksCisgICAgICAgIHRpY2sgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGlmICgg
c3RvcHBlZCApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICB2YXIgY3VycmVudFRpbWUgPSBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLAor
ICAgICAgICAgICAgICAgIHJlbWFpbmluZyA9IE1hdGgubWF4KCAwLCBhbmltYXRpb24uc3RhcnRU
aW1lICsgYW5pbWF0aW9uLmR1cmF0aW9uIC0gY3VycmVudFRpbWUgKSwKKworICAgICAgICAgICAg
ICAgIC8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zIG9ubHkKKyAgICAgICAgICAgICAgICAvLyBBcmNo
YWljIGNyYXNoIGJ1ZyB3b24ndCBhbGxvdyB1cyB0byB1c2UgYDEgLSAoIDAuNSB8fCAwIClgICgj
MTI0OTcpCisgICAgICAgICAgICAgICAgdGVtcCA9IHJlbWFpbmluZyAvIGFuaW1hdGlvbi5kdXJh
dGlvbiB8fCAwLAorICAgICAgICAgICAgICAgIHBlcmNlbnQgPSAxIC0gdGVtcCwKKyAgICAgICAg
ICAgICAgICBpbmRleCA9IDAsCisgICAgICAgICAgICAgICAgbGVuZ3RoID0gYW5pbWF0aW9uLnR3
ZWVucy5sZW5ndGg7CisKKyAgICAgICAgICAgIGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4
KysgKSB7CisgICAgICAgICAgICAgICAgYW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5ydW4oIHBl
cmNlbnQgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVmZXJyZWQubm90aWZ5V2l0
aCggZWxlbSwgWyBhbmltYXRpb24sIHBlcmNlbnQsIHJlbWFpbmluZyBdICk7CisKKyAgICAgICAg
ICAgIGlmICggcGVyY2VudCA8IDEgJiYgbGVuZ3RoICkgeworICAgICAgICAgICAgICAgIHJldHVy
biByZW1haW5pbmc7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRlZmVy
cmVkLnJlc29sdmVXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiBdICk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICBhbmltYXRp
b24gPSBkZWZlcnJlZC5wcm9taXNlKCB7CisgICAgICAgICAgICBlbGVtOiBlbGVtLAorICAgICAg
ICAgICAgcHJvcHM6IGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wZXJ0aWVzICksCisgICAgICAgICAg
ICBvcHRzOiBqUXVlcnkuZXh0ZW5kKCB0cnVlLCB7CisgICAgICAgICAgICAgICAgc3BlY2lhbEVh
c2luZzoge30sCisgICAgICAgICAgICAgICAgZWFzaW5nOiBqUXVlcnkuZWFzaW5nLl9kZWZhdWx0
CisgICAgICAgICAgICB9LCBvcHRpb25zICksCisgICAgICAgICAgICBvcmlnaW5hbFByb3BlcnRp
ZXM6IHByb3BlcnRpZXMsCisgICAgICAgICAgICBvcmlnaW5hbE9wdGlvbnM6IG9wdGlvbnMsCisg
ICAgICAgICAgICBzdGFydFRpbWU6IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCksCisgICAgICAgICAg
ICBkdXJhdGlvbjogb3B0aW9ucy5kdXJhdGlvbiwKKyAgICAgICAgICAgIHR3ZWVuczogW10sCisg
ICAgICAgICAgICBjcmVhdGVUd2VlbjogZnVuY3Rpb24oIHByb3AsIGVuZCApIHsKKyAgICAgICAg
ICAgICAgICB2YXIgdHdlZW4gPSBqUXVlcnkuVHdlZW4oIGVsZW0sIGFuaW1hdGlvbi5vcHRzLCBw
cm9wLCBlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24ub3B0cy5zcGVjaWFs
RWFzaW5nWyBwcm9wIF0gfHwgYW5pbWF0aW9uLm9wdHMuZWFzaW5nICk7CisgICAgICAgICAgICAg
ICAgYW5pbWF0aW9uLnR3ZWVucy5wdXNoKCB0d2VlbiApOworICAgICAgICAgICAgICAgIHJldHVy
biB0d2VlbjsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBzdG9wOiBmdW5jdGlvbiggZ290
b0VuZCApIHsKKyAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSAwLAorCisgICAgICAgICAgICAg
ICAgICAgIC8vIElmIHdlIGFyZSBnb2luZyB0byB0aGUgZW5kLCB3ZSB3YW50IHRvIHJ1biBhbGwg
dGhlIHR3ZWVucworICAgICAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2Ugd2Ugc2tpcCB0aGlz
IHBhcnQKKyAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gZ290b0VuZCA/IGFuaW1hdGlvbi50
d2VlbnMubGVuZ3RoIDogMDsKKyAgICAgICAgICAgICAgICBpZiAoIHN0b3BwZWQgKSB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBzdG9wcGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKCA7IGluZGV4IDwg
bGVuZ3RoOyBpbmRleCsrICkgeworICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24udHdlZW5z
WyBpbmRleCBdLnJ1biggMSApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IC8vIFJlc29sdmUgd2hlbiB3ZSBwbGF5ZWQgdGhlIGxhc3QgZnJhbWU7IG90aGVyd2lzZSwgcmVq
ZWN0CisgICAgICAgICAgICAgICAgaWYgKCBnb3RvRW5kICkgeworICAgICAgICAgICAgICAgICAg
ICBkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgMSwgMCBdICk7CisgICAg
ICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmVXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwg
Z290b0VuZCBdICk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgZGVmZXJyZWQucmVqZWN0V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSApLAorICAgICAgICBwcm9wcyA9IGFuaW1hdGlvbi5wcm9wczsKKwor
ICAgIHByb3BGaWx0ZXIoIHByb3BzLCBhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nICk7CisK
KyAgICBmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkgeworICAgICAgICByZXN1bHQg
PSBBbmltYXRpb24ucHJlZmlsdGVyc1sgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIGVsZW0sIHBy
b3BzLCBhbmltYXRpb24ub3B0cyApOworICAgICAgICBpZiAoIHJlc3VsdCApIHsKKyAgICAgICAg
ICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHJlc3VsdC5zdG9wICkgKSB7CisgICAgICAgICAg
ICAgICAgalF1ZXJ5Ll9xdWV1ZUhvb2tzKCBhbmltYXRpb24uZWxlbSwgYW5pbWF0aW9uLm9wdHMu
cXVldWUgKS5zdG9wID0KKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnByb3h5KCByZXN1bHQu
c3RvcCwgcmVzdWx0ICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICB9CisgICAgfQorCisgICAgalF1ZXJ5Lm1hcCggcHJvcHMsIGNyZWF0ZVR3ZWVu
LCBhbmltYXRpb24gKTsKKworICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGFuaW1hdGlvbi5v
cHRzLnN0YXJ0ICkgKSB7CisgICAgICAgIGFuaW1hdGlvbi5vcHRzLnN0YXJ0LmNhbGwoIGVsZW0s
IGFuaW1hdGlvbiApOworICAgIH0KKworICAgIGpRdWVyeS5meC50aW1lcigKKyAgICAgICAgalF1
ZXJ5LmV4dGVuZCggdGljaywgeworICAgICAgICAgICAgZWxlbTogZWxlbSwKKyAgICAgICAgICAg
IGFuaW06IGFuaW1hdGlvbiwKKyAgICAgICAgICAgIHF1ZXVlOiBhbmltYXRpb24ub3B0cy5xdWV1
ZQorICAgICAgICB9ICkKKyAgICApOworCisgICAgLy8gYXR0YWNoIGNhbGxiYWNrcyBmcm9tIG9w
dGlvbnMKKyAgICByZXR1cm4gYW5pbWF0aW9uLnByb2dyZXNzKCBhbmltYXRpb24ub3B0cy5wcm9n
cmVzcyApCisgICAgICAgIC5kb25lKCBhbmltYXRpb24ub3B0cy5kb25lLCBhbmltYXRpb24ub3B0
cy5jb21wbGV0ZSApCisgICAgICAgIC5mYWlsKCBhbmltYXRpb24ub3B0cy5mYWlsICkKKyAgICAg
ICAgLmFsd2F5cyggYW5pbWF0aW9uLm9wdHMuYWx3YXlzICk7Cit9CisKK2pRdWVyeS5BbmltYXRp
b24gPSBqUXVlcnkuZXh0ZW5kKCBBbmltYXRpb24sIHsKKworICAgIHR3ZWVuZXJzOiB7CisgICAg
ICAgICIqIjogWyBmdW5jdGlvbiggcHJvcCwgdmFsdWUgKSB7CisgICAgICAgICAgICB2YXIgdHdl
ZW4gPSB0aGlzLmNyZWF0ZVR3ZWVuKCBwcm9wLCB2YWx1ZSApOworICAgICAgICAgICAgYWRqdXN0
Q1NTKCB0d2Vlbi5lbGVtLCBwcm9wLCByY3NzTnVtLmV4ZWMoIHZhbHVlICksIHR3ZWVuICk7Cisg
ICAgICAgICAgICByZXR1cm4gdHdlZW47CisgICAgICAgIH0gXQorICAgIH0sCisKKyAgICB0d2Vl
bmVyOiBmdW5jdGlvbiggcHJvcHMsIGNhbGxiYWNrICkgeworICAgICAgICBpZiAoIGpRdWVyeS5p
c0Z1bmN0aW9uKCBwcm9wcyApICkgeworICAgICAgICAgICAgY2FsbGJhY2sgPSBwcm9wczsKKyAg
ICAgICAgICAgIHByb3BzID0gWyAiKiIgXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHByb3BzID0gcHJvcHMubWF0Y2goIHJub3RodG1sd2hpdGUgKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHZhciBwcm9wLAorICAgICAgICAgICAgaW5kZXggPSAwLAorICAgICAgICAgICAgbGVuZ3Ro
ID0gcHJvcHMubGVuZ3RoOworCisgICAgICAgIGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4
KysgKSB7CisgICAgICAgICAgICBwcm9wID0gcHJvcHNbIGluZGV4IF07CisgICAgICAgICAgICBB
bmltYXRpb24udHdlZW5lcnNbIHByb3AgXSA9IEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8
IFtdOworICAgICAgICAgICAgQW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0udW5zaGlmdCggY2Fs
bGJhY2sgKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBwcmVmaWx0ZXJzOiBbIGRlZmF1bHRQ
cmVmaWx0ZXIgXSwKKworICAgIHByZWZpbHRlcjogZnVuY3Rpb24oIGNhbGxiYWNrLCBwcmVwZW5k
ICkgeworICAgICAgICBpZiAoIHByZXBlbmQgKSB7CisgICAgICAgICAgICBBbmltYXRpb24ucHJl
ZmlsdGVycy51bnNoaWZ0KCBjYWxsYmFjayApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgQW5pbWF0aW9uLnByZWZpbHRlcnMucHVzaCggY2FsbGJhY2sgKTsKKyAgICAgICAgfQorICAg
IH0KK30gKTsKKworalF1ZXJ5LnNwZWVkID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGZuICkg
eworICAgIHZhciBvcHQgPSBzcGVlZCAmJiB0eXBlb2Ygc3BlZWQgPT09ICJvYmplY3QiID8galF1
ZXJ5LmV4dGVuZCgge30sIHNwZWVkICkgOiB7CisgICAgICAgIGNvbXBsZXRlOiBmbiB8fCAhZm4g
JiYgZWFzaW5nIHx8CisgICAgICAgICAgICBqUXVlcnkuaXNGdW5jdGlvbiggc3BlZWQgKSAmJiBz
cGVlZCwKKyAgICAgICAgZHVyYXRpb246IHNwZWVkLAorICAgICAgICBlYXNpbmc6IGZuICYmIGVh
c2luZyB8fCBlYXNpbmcgJiYgIWpRdWVyeS5pc0Z1bmN0aW9uKCBlYXNpbmcgKSAmJiBlYXNpbmcK
KyAgICB9OworCisgICAgLy8gR28gdG8gdGhlIGVuZCBzdGF0ZSBpZiBmeCBhcmUgb2ZmIG9yIGlm
IGRvY3VtZW50IGlzIGhpZGRlbgorICAgIGlmICggalF1ZXJ5LmZ4Lm9mZiB8fCBkb2N1bWVudC5o
aWRkZW4gKSB7CisgICAgICAgIG9wdC5kdXJhdGlvbiA9IDA7CisKKyAgICB9IGVsc2UgeworICAg
ICAgICBpZiAoIHR5cGVvZiBvcHQuZHVyYXRpb24gIT09ICJudW1iZXIiICkgeworICAgICAgICAg
ICAgaWYgKCBvcHQuZHVyYXRpb24gaW4galF1ZXJ5LmZ4LnNwZWVkcyApIHsKKyAgICAgICAgICAg
ICAgICBvcHQuZHVyYXRpb24gPSBqUXVlcnkuZnguc3BlZWRzWyBvcHQuZHVyYXRpb24gXTsKKwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBvcHQuZHVyYXRpb24gPSBqUXVl
cnkuZnguc3BlZWRzLl9kZWZhdWx0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgLy8gTm9ybWFsaXplIG9wdC5xdWV1ZSAtIHRydWUvdW5kZWZpbmVkL251bGwgLT4gImZ4
IgorICAgIGlmICggb3B0LnF1ZXVlID09IG51bGwgfHwgb3B0LnF1ZXVlID09PSB0cnVlICkgewor
ICAgICAgICBvcHQucXVldWUgPSAiZngiOworICAgIH0KKworICAgIC8vIFF1ZXVlaW5nCisgICAg
b3B0Lm9sZCA9IG9wdC5jb21wbGV0ZTsKKworICAgIG9wdC5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkg
eworICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBvcHQub2xkICkgKSB7CisgICAgICAg
ICAgICBvcHQub2xkLmNhbGwoIHRoaXMgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggb3B0
LnF1ZXVlICkgeworICAgICAgICAgICAgalF1ZXJ5LmRlcXVldWUoIHRoaXMsIG9wdC5xdWV1ZSAp
OworICAgICAgICB9CisgICAgfTsKKworICAgIHJldHVybiBvcHQ7Cit9OworCitqUXVlcnkuZm4u
ZXh0ZW5kKCB7CisgICAgZmFkZVRvOiBmdW5jdGlvbiggc3BlZWQsIHRvLCBlYXNpbmcsIGNhbGxi
YWNrICkgeworCisgICAgICAgIC8vIFNob3cgYW55IGhpZGRlbiBlbGVtZW50cyBhZnRlciBzZXR0
aW5nIG9wYWNpdHkgdG8gMAorICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXIoIGlzSGlkZGVuV2l0
aGluVHJlZSApLmNzcyggIm9wYWNpdHkiLCAwICkuc2hvdygpCisKKyAgICAgICAgICAgIC8vIEFu
aW1hdGUgdG8gdGhlIHZhbHVlIHNwZWNpZmllZAorICAgICAgICAgICAgLmVuZCgpLmFuaW1hdGUo
IHsgb3BhY2l0eTogdG8gfSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTsKKyAgICB9LAorICAg
IGFuaW1hdGU6IGZ1bmN0aW9uKCBwcm9wLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHsKKyAg
ICAgICAgdmFyIGVtcHR5ID0galF1ZXJ5LmlzRW1wdHlPYmplY3QoIHByb3AgKSwKKyAgICAgICAg
ICAgIG9wdGFsbCA9IGpRdWVyeS5zcGVlZCggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSwKKyAg
ICAgICAgICAgIGRvQW5pbWF0aW9uID0gZnVuY3Rpb24oKSB7CisKKyAgICAgICAgICAgICAgICAv
LyBPcGVyYXRlIG9uIGEgY29weSBvZiBwcm9wIHNvIHBlci1wcm9wZXJ0eSBlYXNpbmcgd29uJ3Qg
YmUgbG9zdAorICAgICAgICAgICAgICAgIHZhciBhbmltID0gQW5pbWF0aW9uKCB0aGlzLCBqUXVl
cnkuZXh0ZW5kKCB7fSwgcHJvcCApLCBvcHRhbGwgKTsKKworICAgICAgICAgICAgICAgIC8vIEVt
cHR5IGFuaW1hdGlvbnMsIG9yIGZpbmlzaGluZyByZXNvbHZlcyBpbW1lZGlhdGVseQorICAgICAg
ICAgICAgICAgIGlmICggZW1wdHkgfHwgZGF0YVByaXYuZ2V0KCB0aGlzLCAiZmluaXNoIiApICkg
eworICAgICAgICAgICAgICAgICAgICBhbmltLnN0b3AoIHRydWUgKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9OworICAgICAgICAgICAgZG9BbmltYXRpb24uZmluaXNoID0gZG9B
bmltYXRpb247CisKKyAgICAgICAgcmV0dXJuIGVtcHR5IHx8IG9wdGFsbC5xdWV1ZSA9PT0gZmFs
c2UgPworICAgICAgICAgICAgdGhpcy5lYWNoKCBkb0FuaW1hdGlvbiApIDoKKyAgICAgICAgICAg
IHRoaXMucXVldWUoIG9wdGFsbC5xdWV1ZSwgZG9BbmltYXRpb24gKTsKKyAgICB9LAorICAgIHN0
b3A6IGZ1bmN0aW9uKCB0eXBlLCBjbGVhclF1ZXVlLCBnb3RvRW5kICkgeworICAgICAgICB2YXIg
c3RvcFF1ZXVlID0gZnVuY3Rpb24oIGhvb2tzICkgeworICAgICAgICAgICAgdmFyIHN0b3AgPSBo
b29rcy5zdG9wOworICAgICAgICAgICAgZGVsZXRlIGhvb2tzLnN0b3A7CisgICAgICAgICAgICBz
dG9wKCBnb3RvRW5kICk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKCB0eXBlb2YgdHlwZSAh
PT0gInN0cmluZyIgKSB7CisgICAgICAgICAgICBnb3RvRW5kID0gY2xlYXJRdWV1ZTsKKyAgICAg
ICAgICAgIGNsZWFyUXVldWUgPSB0eXBlOworICAgICAgICAgICAgdHlwZSA9IHVuZGVmaW5lZDsK
KyAgICAgICAgfQorICAgICAgICBpZiAoIGNsZWFyUXVldWUgJiYgdHlwZSAhPT0gZmFsc2UgKSB7
CisgICAgICAgICAgICB0aGlzLnF1ZXVlKCB0eXBlIHx8ICJmeCIsIFtdICk7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZh
ciBkZXF1ZXVlID0gdHJ1ZSwKKyAgICAgICAgICAgICAgICBpbmRleCA9IHR5cGUgIT0gbnVsbCAm
JiB0eXBlICsgInF1ZXVlSG9va3MiLAorICAgICAgICAgICAgICAgIHRpbWVycyA9IGpRdWVyeS50
aW1lcnMsCisgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFQcml2LmdldCggdGhpcyApOworCisg
ICAgICAgICAgICBpZiAoIGluZGV4ICkgeworICAgICAgICAgICAgICAgIGlmICggZGF0YVsgaW5k
ZXggXSAmJiBkYXRhWyBpbmRleCBdLnN0b3AgKSB7CisgICAgICAgICAgICAgICAgICAgIHN0b3BR
dWV1ZSggZGF0YVsgaW5kZXggXSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgZm9yICggaW5kZXggaW4gZGF0YSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCAmJiBy
cnVuLnRlc3QoIGluZGV4ICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdG9wUXVldWUo
IGRhdGFbIGluZGV4IF0gKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICggaW5kZXggPSB0aW1lcnMubGVu
Z3RoOyBpbmRleC0tOyApIHsKKyAgICAgICAgICAgICAgICBpZiAoIHRpbWVyc1sgaW5kZXggXS5l
bGVtID09PSB0aGlzICYmCisgICAgICAgICAgICAgICAgICAgICggdHlwZSA9PSBudWxsIHx8IHRp
bWVyc1sgaW5kZXggXS5xdWV1ZSA9PT0gdHlwZSApICkgeworCisgICAgICAgICAgICAgICAgICAg
IHRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIGdvdG9FbmQgKTsKKyAgICAgICAgICAgICAgICAg
ICAgZGVxdWV1ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB0aW1lcnMuc3BsaWNlKCBp
bmRleCwgMSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLy8gU3RhcnQgdGhlIG5leHQgaW4gdGhlIHF1ZXVlIGlmIHRoZSBsYXN0IHN0ZXAgd2Fzbid0
IGZvcmNlZC4KKyAgICAgICAgICAgIC8vIFRpbWVycyBjdXJyZW50bHkgd2lsbCBjYWxsIHRoZWly
IGNvbXBsZXRlIGNhbGxiYWNrcywgd2hpY2gKKyAgICAgICAgICAgIC8vIHdpbGwgZGVxdWV1ZSBi
dXQgb25seSBpZiB0aGV5IHdlcmUgZ290b0VuZC4KKyAgICAgICAgICAgIGlmICggZGVxdWV1ZSB8
fCAhZ290b0VuZCApIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlw
ZSApOworICAgICAgICAgICAgfQorICAgICAgICB9ICk7CisgICAgfSwKKyAgICBmaW5pc2g6IGZ1
bmN0aW9uKCB0eXBlICkgeworICAgICAgICBpZiAoIHR5cGUgIT09IGZhbHNlICkgeworICAgICAg
ICAgICAgdHlwZSA9IHR5cGUgfHwgImZ4IjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhp
cy5lYWNoKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciBpbmRleCwKKyAgICAgICAgICAg
ICAgICBkYXRhID0gZGF0YVByaXYuZ2V0KCB0aGlzICksCisgICAgICAgICAgICAgICAgcXVldWUg
PSBkYXRhWyB0eXBlICsgInF1ZXVlIiBdLAorICAgICAgICAgICAgICAgIGhvb2tzID0gZGF0YVsg
dHlwZSArICJxdWV1ZUhvb2tzIiBdLAorICAgICAgICAgICAgICAgIHRpbWVycyA9IGpRdWVyeS50
aW1lcnMsCisgICAgICAgICAgICAgICAgbGVuZ3RoID0gcXVldWUgPyBxdWV1ZS5sZW5ndGggOiAw
OworCisgICAgICAgICAgICAvLyBFbmFibGUgZmluaXNoaW5nIGZsYWcgb24gcHJpdmF0ZSBkYXRh
CisgICAgICAgICAgICBkYXRhLmZpbmlzaCA9IHRydWU7CisKKyAgICAgICAgICAgIC8vIEVtcHR5
IHRoZSBxdWV1ZSBmaXJzdAorICAgICAgICAgICAgalF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBb
XSApOworCisgICAgICAgICAgICBpZiAoIGhvb2tzICYmIGhvb2tzLnN0b3AgKSB7CisgICAgICAg
ICAgICAgICAgaG9va3Muc3RvcC5jYWxsKCB0aGlzLCB0cnVlICk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIExvb2sgZm9yIGFueSBhY3RpdmUgYW5pbWF0aW9ucywgYW5kIGZpbmlz
aCB0aGVtCisgICAgICAgICAgICBmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07
ICkgeworICAgICAgICAgICAgICAgIGlmICggdGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRoaXMg
JiYgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlICkgeworICAgICAgICAgICAgICAgICAg
ICB0aW1lcnNbIGluZGV4IF0uYW5pbS5zdG9wKCB0cnVlICk7CisgICAgICAgICAgICAgICAgICAg
IHRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBMb29rIGZvciBhbnkgYW5pbWF0aW9ucyBpbiB0aGUgb2xk
IHF1ZXVlIGFuZCBmaW5pc2ggdGhlbQorICAgICAgICAgICAgZm9yICggaW5kZXggPSAwOyBpbmRl
eCA8IGxlbmd0aDsgaW5kZXgrKyApIHsKKyAgICAgICAgICAgICAgICBpZiAoIHF1ZXVlWyBpbmRl
eCBdICYmIHF1ZXVlWyBpbmRleCBdLmZpbmlzaCApIHsKKyAgICAgICAgICAgICAgICAgICAgcXVl
dWVbIGluZGV4IF0uZmluaXNoLmNhbGwoIHRoaXMgKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFR1cm4gb2ZmIGZpbmlzaGluZyBmbGFnCisgICAg
ICAgICAgICBkZWxldGUgZGF0YS5maW5pc2g7CisgICAgICAgIH0gKTsKKyAgICB9Cit9ICk7CisK
K2pRdWVyeS5lYWNoKCBbICJ0b2dnbGUiLCAic2hvdyIsICJoaWRlIiBdLCBmdW5jdGlvbiggaSwg
bmFtZSApIHsKKyAgICB2YXIgY3NzRm4gPSBqUXVlcnkuZm5bIG5hbWUgXTsKKyAgICBqUXVlcnku
Zm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHsKKyAgICAg
ICAgcmV0dXJuIHNwZWVkID09IG51bGwgfHwgdHlwZW9mIHNwZWVkID09PSAiYm9vbGVhbiIgPwor
ICAgICAgICAgICAgY3NzRm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApIDoKKyAgICAgICAgICAg
IHRoaXMuYW5pbWF0ZSggZ2VuRngoIG5hbWUsIHRydWUgKSwgc3BlZWQsIGVhc2luZywgY2FsbGJh
Y2sgKTsKKyAgICB9OworfSApOworCisvLyBHZW5lcmF0ZSBzaG9ydGN1dHMgZm9yIGN1c3RvbSBh
bmltYXRpb25zCitqUXVlcnkuZWFjaCggeworICAgIHNsaWRlRG93bjogZ2VuRngoICJzaG93IiAp
LAorICAgIHNsaWRlVXA6IGdlbkZ4KCAiaGlkZSIgKSwKKyAgICBzbGlkZVRvZ2dsZTogZ2VuRngo
ICJ0b2dnbGUiICksCisgICAgZmFkZUluOiB7IG9wYWNpdHk6ICJzaG93IiB9LAorICAgIGZhZGVP
dXQ6IHsgb3BhY2l0eTogImhpZGUiIH0sCisgICAgZmFkZVRvZ2dsZTogeyBvcGFjaXR5OiAidG9n
Z2xlIiB9Cit9LCBmdW5jdGlvbiggbmFtZSwgcHJvcHMgKSB7CisgICAgalF1ZXJ5LmZuWyBuYW1l
IF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7CisgICAgICAgIHJldHVy
biB0aGlzLmFuaW1hdGUoIHByb3BzLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApOworICAgIH07
Cit9ICk7CisKK2pRdWVyeS50aW1lcnMgPSBbXTsKK2pRdWVyeS5meC50aWNrID0gZnVuY3Rpb24o
KSB7CisgICAgdmFyIHRpbWVyLAorICAgICAgICBpID0gMCwKKyAgICAgICAgdGltZXJzID0galF1
ZXJ5LnRpbWVyczsKKworICAgIGZ4Tm93ID0galF1ZXJ5Lm5vdygpOworCisgICAgZm9yICggOyBp
IDwgdGltZXJzLmxlbmd0aDsgaSsrICkgeworICAgICAgICB0aW1lciA9IHRpbWVyc1sgaSBdOwor
CisgICAgICAgIC8vIENoZWNrcyB0aGUgdGltZXIgaGFzIG5vdCBhbHJlYWR5IGJlZW4gcmVtb3Zl
ZAorICAgICAgICBpZiAoICF0aW1lcigpICYmIHRpbWVyc1sgaSBdID09PSB0aW1lciApIHsKKyAg
ICAgICAgICAgIHRpbWVycy5zcGxpY2UoIGktLSwgMSApOworICAgICAgICB9CisgICAgfQorCisg
ICAgaWYgKCAhdGltZXJzLmxlbmd0aCApIHsKKyAgICAgICAgalF1ZXJ5LmZ4LnN0b3AoKTsKKyAg
ICB9CisgICAgZnhOb3cgPSB1bmRlZmluZWQ7Cit9OworCitqUXVlcnkuZngudGltZXIgPSBmdW5j
dGlvbiggdGltZXIgKSB7CisgICAgalF1ZXJ5LnRpbWVycy5wdXNoKCB0aW1lciApOworICAgIGlm
ICggdGltZXIoKSApIHsKKyAgICAgICAgalF1ZXJ5LmZ4LnN0YXJ0KCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgalF1ZXJ5LnRpbWVycy5wb3AoKTsKKyAgICB9Cit9OworCitqUXVlcnkuZnguaW50
ZXJ2YWwgPSAxMzsKK2pRdWVyeS5meC5zdGFydCA9IGZ1bmN0aW9uKCkgeworICAgIGlmICggIXRp
bWVySWQgKSB7CisgICAgICAgIHRpbWVySWQgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1l
ID8KKyAgICAgICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoIHJhZiApIDoKKyAg
ICAgICAgICAgIHdpbmRvdy5zZXRJbnRlcnZhbCggalF1ZXJ5LmZ4LnRpY2ssIGpRdWVyeS5meC5p
bnRlcnZhbCApOworICAgIH0KK307CisKK2pRdWVyeS5meC5zdG9wID0gZnVuY3Rpb24oKSB7Cisg
ICAgaWYgKCB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUgKSB7CisgICAgICAgIHdpbmRvdy5j
YW5jZWxBbmltYXRpb25GcmFtZSggdGltZXJJZCApOworICAgIH0gZWxzZSB7CisgICAgICAgIHdp
bmRvdy5jbGVhckludGVydmFsKCB0aW1lcklkICk7CisgICAgfQorCisgICAgdGltZXJJZCA9IG51
bGw7Cit9OworCitqUXVlcnkuZnguc3BlZWRzID0geworICAgIHNsb3c6IDYwMCwKKyAgICBmYXN0
OiAyMDAsCisKKyAgICAvLyBEZWZhdWx0IHNwZWVkCisgICAgX2RlZmF1bHQ6IDQwMAorfTsKKwor
CisvLyBCYXNlZCBvZmYgb2YgdGhlIHBsdWdpbiBieSBDbGludCBIZWxmZXJzLCB3aXRoIHBlcm1p
c3Npb24uCisvLyBodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxMDAzMjQwMTQ3NDcvaHR0
cDovL2JsaW5kc2lnbmFscy5jb20vaW5kZXgucGhwLzIwMDkvMDcvanF1ZXJ5LWRlbGF5LworalF1
ZXJ5LmZuLmRlbGF5ID0gZnVuY3Rpb24oIHRpbWUsIHR5cGUgKSB7CisgICAgdGltZSA9IGpRdWVy
eS5meCA/IGpRdWVyeS5meC5zcGVlZHNbIHRpbWUgXSB8fCB0aW1lIDogdGltZTsKKyAgICB0eXBl
ID0gdHlwZSB8fCAiZngiOworCisgICAgcmV0dXJuIHRoaXMucXVldWUoIHR5cGUsIGZ1bmN0aW9u
KCBuZXh0LCBob29rcyApIHsKKyAgICAgICAgdmFyIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91
dCggbmV4dCwgdGltZSApOworICAgICAgICBob29rcy5zdG9wID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KCB0aW1lb3V0ICk7CisgICAgICAgIH07CisgICAg
fSApOworfTsKKworCisoIGZ1bmN0aW9uKCkgeworICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoICJpbnB1dCIgKSwKKyAgICAgICAgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCggInNlbGVjdCIgKSwKKyAgICAgICAgb3B0ID0gc2VsZWN0LmFwcGVuZENoaWxkKCBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCAib3B0aW9uIiApICk7CisKKyAgICBpbnB1dC50eXBlID0g
ImNoZWNrYm94IjsKKworICAgIC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjMgb25seQorICAgIC8v
IERlZmF1bHQgdmFsdWUgZm9yIGEgY2hlY2tib3ggc2hvdWxkIGJlICJvbiIKKyAgICBzdXBwb3J0
LmNoZWNrT24gPSBpbnB1dC52YWx1ZSAhPT0gIiI7CisKKyAgICAvLyBTdXBwb3J0OiBJRSA8PTEx
IG9ubHkKKyAgICAvLyBNdXN0IGFjY2VzcyBzZWxlY3RlZEluZGV4IHRvIG1ha2UgZGVmYXVsdCBv
cHRpb25zIHNlbGVjdAorICAgIHN1cHBvcnQub3B0U2VsZWN0ZWQgPSBvcHQuc2VsZWN0ZWQ7CisK
KyAgICAvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHkKKyAgICAvLyBBbiBpbnB1dCBsb3NlcyBpdHMg
dmFsdWUgYWZ0ZXIgYmVjb21pbmcgYSByYWRpbworICAgIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCggImlucHV0IiApOworICAgIGlucHV0LnZhbHVlID0gInQiOworICAgIGlucHV0LnR5
cGUgPSAicmFkaW8iOworICAgIHN1cHBvcnQucmFkaW9WYWx1ZSA9IGlucHV0LnZhbHVlID09PSAi
dCI7Cit9ICkoKTsKKworCit2YXIgYm9vbEhvb2ssCisgICAgYXR0ckhhbmRsZSA9IGpRdWVyeS5l
eHByLmF0dHJIYW5kbGU7CisKK2pRdWVyeS5mbi5leHRlbmQoIHsKKyAgICBhdHRyOiBmdW5jdGlv
biggbmFtZSwgdmFsdWUgKSB7CisgICAgICAgIHJldHVybiBhY2Nlc3MoIHRoaXMsIGpRdWVyeS5h
dHRyLCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTsKKyAgICB9LAorCisgICAg
cmVtb3ZlQXR0cjogZnVuY3Rpb24oIG5hbWUgKSB7CisgICAgICAgIHJldHVybiB0aGlzLmVhY2go
IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZUF0dHIoIHRoaXMsIG5hbWUg
KTsKKyAgICAgICAgfSApOworICAgIH0KK30gKTsKKworalF1ZXJ5LmV4dGVuZCggeworICAgIGF0
dHI6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHsKKyAgICAgICAgdmFyIHJldCwgaG9v
a3MsCisgICAgICAgICAgICBuVHlwZSA9IGVsZW0ubm9kZVR5cGU7CisKKyAgICAgICAgLy8gRG9u
J3QgZ2V0L3NldCBhdHRyaWJ1dGVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2Rl
cworICAgICAgICBpZiAoIG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAy
ICkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gRmFsbGJh
Y2sgdG8gcHJvcCB3aGVuIGF0dHJpYnV0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQKKyAgICAgICAgaWYg
KCB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUgPT09ICJ1bmRlZmluZWQiICkgeworICAgICAgICAg
ICAgcmV0dXJuIGpRdWVyeS5wcm9wKCBlbGVtLCBuYW1lLCB2YWx1ZSApOworICAgICAgICB9CisK
KyAgICAgICAgLy8gQXR0cmlidXRlIGhvb2tzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBsb3dlcmNh
c2UgdmVyc2lvbgorICAgICAgICAvLyBHcmFiIG5lY2Vzc2FyeSBob29rIGlmIG9uZSBpcyBkZWZp
bmVkCisgICAgICAgIGlmICggblR5cGUgIT09IDEgfHwgIWpRdWVyeS5pc1hNTERvYyggZWxlbSAp
ICkgeworICAgICAgICAgICAgaG9va3MgPSBqUXVlcnkuYXR0ckhvb2tzWyBuYW1lLnRvTG93ZXJD
YXNlKCkgXSB8fAorICAgICAgICAgICAgICAgICggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC50ZXN0
KCBuYW1lICkgPyBib29sSG9vayA6IHVuZGVmaW5lZCApOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgaWYgKCB2YWx1ZSA9PT0g
bnVsbCApIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkucmVtb3ZlQXR0ciggZWxlbSwgbmFtZSAp
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKCBob29rcyAmJiAic2V0IiBpbiBob29rcyAmJgorICAgICAgICAgICAgICAgICggcmV0ID0g
aG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApICkgIT09IHVuZGVmaW5lZCApIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbGVt
LnNldEF0dHJpYnV0ZSggbmFtZSwgdmFsdWUgKyAiIiApOworICAgICAgICAgICAgcmV0dXJuIHZh
bHVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29rcyAm
JiAoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApICkgIT09IG51bGwgKSB7CisgICAgICAg
ICAgICByZXR1cm4gcmV0OworICAgICAgICB9CisKKyAgICAgICAgcmV0ID0galF1ZXJ5LmZpbmQu
YXR0ciggZWxlbSwgbmFtZSApOworCisgICAgICAgIC8vIE5vbi1leGlzdGVudCBhdHRyaWJ1dGVz
IHJldHVybiBudWxsLCB3ZSBub3JtYWxpemUgdG8gdW5kZWZpbmVkCisgICAgICAgIHJldHVybiBy
ZXQgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IHJldDsKKyAgICB9LAorCisgICAgYXR0ckhvb2tzOiB7
CisgICAgICAgIHR5cGU6IHsKKyAgICAgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVl
ICkgeworICAgICAgICAgICAgICAgIGlmICggIXN1cHBvcnQucmFkaW9WYWx1ZSAmJiB2YWx1ZSA9
PT0gInJhZGlvIiAmJgorICAgICAgICAgICAgICAgICAgICBqUXVlcnkubm9kZU5hbWUoIGVsZW0s
ICJpbnB1dCIgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHZhbCA9IGVsZW0udmFsdWU7
CisgICAgICAgICAgICAgICAgICAgIGVsZW0uc2V0QXR0cmlidXRlKCAidHlwZSIsIHZhbHVlICk7
CisgICAgICAgICAgICAgICAgICAgIGlmICggdmFsICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgZWxlbS52YWx1ZSA9IHZhbDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfSwKKworICAgIHJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1
ZSApIHsKKyAgICAgICAgdmFyIG5hbWUsCisgICAgICAgICAgICBpID0gMCwKKworICAgICAgICAg
ICAgLy8gQXR0cmlidXRlIG5hbWVzIGNhbiBjb250YWluIG5vbi1IVE1MIHdoaXRlc3BhY2UgY2hh
cmFjdGVycworICAgICAgICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0
aXBhZ2Uvc3ludGF4Lmh0bWwjYXR0cmlidXRlcy0yCisgICAgICAgICAgICBhdHRyTmFtZXMgPSB2
YWx1ZSAmJiB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApOworCisgICAgICAgIGlmICggYXR0
ck5hbWVzICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7CisgICAgICAgICAgICB3aGlsZSAoICgg
bmFtZSA9IGF0dHJOYW1lc1sgaSsrIF0gKSApIHsKKyAgICAgICAgICAgICAgICBlbGVtLnJlbW92
ZUF0dHJpYnV0ZSggbmFtZSApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfSAp
OworCisvLyBIb29rcyBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzCitib29sSG9vayA9IHsKKyAgICBz
ZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgbmFtZSApIHsKKyAgICAgICAgaWYgKCB2YWx1ZSA9
PT0gZmFsc2UgKSB7CisKKyAgICAgICAgICAgIC8vIFJlbW92ZSBib29sZWFuIGF0dHJpYnV0ZXMg
d2hlbiBzZXQgdG8gZmFsc2UKKyAgICAgICAgICAgIGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBu
YW1lICk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZSgg
bmFtZSwgbmFtZSApOworICAgICAgICB9CisgICAgICAgIHJldHVybiBuYW1lOworICAgIH0KK307
CisKK2pRdWVyeS5lYWNoKCBqUXVlcnkuZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCggL1x3
Ky9nICksIGZ1bmN0aW9uKCBpLCBuYW1lICkgeworICAgIHZhciBnZXR0ZXIgPSBhdHRySGFuZGxl
WyBuYW1lIF0gfHwgalF1ZXJ5LmZpbmQuYXR0cjsKKworICAgIGF0dHJIYW5kbGVbIG5hbWUgXSA9
IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHsKKyAgICAgICAgdmFyIHJldCwgaGFuZGxl
LAorICAgICAgICAgICAgbG93ZXJjYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTsKKworICAg
ICAgICBpZiAoICFpc1hNTCApIHsKKworICAgICAgICAgICAgLy8gQXZvaWQgYW4gaW5maW5pdGUg
bG9vcCBieSB0ZW1wb3JhcmlseSByZW1vdmluZyB0aGlzIGZ1bmN0aW9uIGZyb20gdGhlIGdldHRl
cgorICAgICAgICAgICAgaGFuZGxlID0gYXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdOworICAg
ICAgICAgICAgYXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdID0gcmV0OworICAgICAgICAgICAg
cmV0ID0gZ2V0dGVyKCBlbGVtLCBuYW1lLCBpc1hNTCApICE9IG51bGwgPworICAgICAgICAgICAg
ICAgIGxvd2VyY2FzZU5hbWUgOgorICAgICAgICAgICAgICAgIG51bGw7CisgICAgICAgICAgICBh
dHRySGFuZGxlWyBsb3dlcmNhc2VOYW1lIF0gPSBoYW5kbGU7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHJldDsKKyAgICB9OworfSApOworCisKKworCit2YXIgcmZvY3VzYWJsZSA9IC9eKD86
aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksCisgICAgcmNsaWNrYWJsZSA9IC9eKD86
YXxhcmVhKSQvaTsKKworalF1ZXJ5LmZuLmV4dGVuZCggeworICAgIHByb3A6IGZ1bmN0aW9uKCBu
YW1lLCB2YWx1ZSApIHsKKyAgICAgICAgcmV0dXJuIGFjY2VzcyggdGhpcywgalF1ZXJ5LnByb3As
IG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApOworICAgIH0sCisKKyAgICByZW1v
dmVQcm9wOiBmdW5jdGlvbiggbmFtZSApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZWFjaCggZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICBkZWxldGUgdGhpc1sgalF1ZXJ5LnByb3BGaXhbIG5hbWUg
XSB8fCBuYW1lIF07CisgICAgICAgIH0gKTsKKyAgICB9Cit9ICk7CisKK2pRdWVyeS5leHRlbmQo
IHsKKyAgICBwcm9wOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7CisgICAgICAgIHZh
ciByZXQsIGhvb2tzLAorICAgICAgICAgICAgblR5cGUgPSBlbGVtLm5vZGVUeXBlOworCisgICAg
ICAgIC8vIERvbid0IGdldC9zZXQgcHJvcGVydGllcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRy
aWJ1dGUgbm9kZXMKKyAgICAgICAgaWYgKCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBu
VHlwZSA9PT0gMiApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGlmICggblR5cGUgIT09IDEgfHwgIWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkgeworCisgICAg
ICAgICAgICAvLyBGaXggbmFtZSBhbmQgYXR0YWNoIGhvb2tzCisgICAgICAgICAgICBuYW1lID0g
alF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lOworICAgICAgICAgICAgaG9va3MgPSBqUXVl
cnkucHJvcEhvb2tzWyBuYW1lIF07CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHZhbHVlICE9
PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICBpZiAoIGhvb2tzICYmICJzZXQiIGluIGhvb2tz
ICYmCisgICAgICAgICAgICAgICAgKCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1l
ICkgKSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiAoIGVsZW1bIG5hbWUgXSA9IHZhbHVlICk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tzICYmICgg
cmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkgKSAhPT0gbnVsbCApIHsKKyAgICAgICAgICAg
IHJldHVybiByZXQ7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZWxlbVsgbmFtZSBdOwor
ICAgIH0sCisKKyAgICBwcm9wSG9va3M6IHsKKyAgICAgICAgdGFiSW5kZXg6IHsKKyAgICAgICAg
ICAgIGdldDogZnVuY3Rpb24oIGVsZW0gKSB7CisKKyAgICAgICAgICAgICAgICAvLyBTdXBwb3J0
OiBJRSA8PTkgLSAxMSBvbmx5CisgICAgICAgICAgICAgICAgLy8gZWxlbS50YWJJbmRleCBkb2Vz
bid0IGFsd2F5cyByZXR1cm4gdGhlCisgICAgICAgICAgICAgICAgLy8gY29ycmVjdCB2YWx1ZSB3
aGVuIGl0IGhhc24ndCBiZWVuIGV4cGxpY2l0bHkgc2V0CisgICAgICAgICAgICAgICAgLy8gaHR0
cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTQxMTE2MjMzMzQ3L2h0dHA6Ly9mbHVpZHByb2pl
Y3Qub3JnL2Jsb2cvMjAwOC8wMS8wOS9nZXR0aW5nLXNldHRpbmctYW5kLXJlbW92aW5nLXRhYmlu
ZGV4LXZhbHVlcy13aXRoLWphdmFzY3JpcHQvCisgICAgICAgICAgICAgICAgLy8gVXNlIHByb3Bl
ciBhdHRyaWJ1dGUgcmV0cmlldmFsKCMxMjA3MikKKyAgICAgICAgICAgICAgICB2YXIgdGFiaW5k
ZXggPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCAidGFiaW5kZXgiICk7CisKKyAgICAgICAgICAg
ICAgICBpZiAoIHRhYmluZGV4ICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJ
bnQoIHRhYmluZGV4LCAxMCApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IGlmICgKKyAgICAgICAgICAgICAgICAgICAgcmZvY3VzYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1l
ICkgfHwKKyAgICAgICAgICAgICAgICAgICAgcmNsaWNrYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1l
ICkgJiYKKyAgICAgICAgICAgICAgICAgICAgZWxlbS5ocmVmCisgICAgICAgICAgICAgICAgKSB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0s
CisKKyAgICBwcm9wRml4OiB7CisgICAgICAgICJmb3IiOiAiaHRtbEZvciIsCisgICAgICAgICJj
bGFzcyI6ICJjbGFzc05hbWUiCisgICAgfQorfSApOworCisvLyBTdXBwb3J0OiBJRSA8PTExIG9u
bHkKKy8vIEFjY2Vzc2luZyB0aGUgc2VsZWN0ZWRJbmRleCBwcm9wZXJ0eQorLy8gZm9yY2VzIHRo
ZSBicm93c2VyIHRvIHJlc3BlY3Qgc2V0dGluZyBzZWxlY3RlZAorLy8gb24gdGhlIG9wdGlvbgor
Ly8gVGhlIGdldHRlciBlbnN1cmVzIGEgZGVmYXVsdCBvcHRpb24gaXMgc2VsZWN0ZWQKKy8vIHdo
ZW4gaW4gYW4gb3B0Z3JvdXAKKy8vIGVzbGludCBydWxlICJuby11bnVzZWQtZXhwcmVzc2lvbnMi
IGlzIGRpc2FibGVkIGZvciB0aGlzIGNvZGUKKy8vIHNpbmNlIGl0IGNvbnNpZGVycyBzdWNoIGFj
Y2Vzc2lvbnMgbm9vcAoraWYgKCAhc3VwcG9ydC5vcHRTZWxlY3RlZCApIHsKKyAgICBqUXVlcnku
cHJvcEhvb2tzLnNlbGVjdGVkID0geworICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgewor
CisgICAgICAgICAgICAvKiBlc2xpbnQgbm8tdW51c2VkLWV4cHJlc3Npb25zOiAib2ZmIiAqLwor
CisgICAgICAgICAgICB2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlOworICAgICAgICAgICAg
aWYgKCBwYXJlbnQgJiYgcGFyZW50LnBhcmVudE5vZGUgKSB7CisgICAgICAgICAgICAgICAgcGFy
ZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJldHVybiBudWxsOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtICkg
eworCisgICAgICAgICAgICAvKiBlc2xpbnQgbm8tdW51c2VkLWV4cHJlc3Npb25zOiAib2ZmIiAq
LworCisgICAgICAgICAgICB2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlOworICAgICAgICAg
ICAgaWYgKCBwYXJlbnQgKSB7CisgICAgICAgICAgICAgICAgcGFyZW50LnNlbGVjdGVkSW5kZXg7
CisKKyAgICAgICAgICAgICAgICBpZiAoIHBhcmVudC5wYXJlbnROb2RlICkgeworICAgICAgICAg
ICAgICAgICAgICBwYXJlbnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4OworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07Cit9CisKK2pRdWVyeS5lYWNo
KCBbCisgICAgInRhYkluZGV4IiwKKyAgICAicmVhZE9ubHkiLAorICAgICJtYXhMZW5ndGgiLAor
ICAgICJjZWxsU3BhY2luZyIsCisgICAgImNlbGxQYWRkaW5nIiwKKyAgICAicm93U3BhbiIsCisg
ICAgImNvbFNwYW4iLAorICAgICJ1c2VNYXAiLAorICAgICJmcmFtZUJvcmRlciIsCisgICAgImNv
bnRlbnRFZGl0YWJsZSIKK10sIGZ1bmN0aW9uKCkgeworICAgIGpRdWVyeS5wcm9wRml4WyB0aGlz
LnRvTG93ZXJDYXNlKCkgXSA9IHRoaXM7Cit9ICk7CisKKworCisKKyAgICAvLyBTdHJpcCBhbmQg
Y29sbGFwc2Ugd2hpdGVzcGFjZSBhY2NvcmRpbmcgdG8gSFRNTCBzcGVjCisgICAgLy8gaHR0cHM6
Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvaW5mcmFzdHJ1Y3R1cmUuaHRtbCNzdHJp
cC1hbmQtY29sbGFwc2Utd2hpdGVzcGFjZQorICAgIGZ1bmN0aW9uIHN0cmlwQW5kQ29sbGFwc2Uo
IHZhbHVlICkgeworICAgICAgICB2YXIgdG9rZW5zID0gdmFsdWUubWF0Y2goIHJub3RodG1sd2hp
dGUgKSB8fCBbXTsKKyAgICAgICAgcmV0dXJuIHRva2Vucy5qb2luKCAiICIgKTsKKyAgICB9CisK
KworZnVuY3Rpb24gZ2V0Q2xhc3MoIGVsZW0gKSB7CisgICAgcmV0dXJuIGVsZW0uZ2V0QXR0cmli
dXRlICYmIGVsZW0uZ2V0QXR0cmlidXRlKCAiY2xhc3MiICkgfHwgIiI7Cit9CisKK2pRdWVyeS5m
bi5leHRlbmQoIHsKKyAgICBhZGRDbGFzczogZnVuY3Rpb24oIHZhbHVlICkgeworICAgICAgICB2
YXIgY2xhc3NlcywgZWxlbSwgY3VyLCBjdXJWYWx1ZSwgY2xhenosIGosIGZpbmFsVmFsdWUsCisg
ICAgICAgICAgICBpID0gMDsKKworICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1
ZSApICkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGogKSB7Cisg
ICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkuYWRkQ2xhc3MoIHZhbHVlLmNhbGwoIHRoaXMs
IGosIGdldENsYXNzKCB0aGlzICkgKSApOworICAgICAgICAgICAgfSApOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKCB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciICYmIHZhbHVlICkgeworICAg
ICAgICAgICAgY2xhc3NlcyA9IHZhbHVlLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW107CisK
KyAgICAgICAgICAgIHdoaWxlICggKCBlbGVtID0gdGhpc1sgaSsrIF0gKSApIHsKKyAgICAgICAg
ICAgICAgICBjdXJWYWx1ZSA9IGdldENsYXNzKCBlbGVtICk7CisgICAgICAgICAgICAgICAgY3Vy
ID0gZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAoICIgIiArIHN0cmlwQW5kQ29sbGFwc2UoIGN1clZh
bHVlICkgKyAiICIgKTsKKworICAgICAgICAgICAgICAgIGlmICggY3VyICkgeworICAgICAgICAg
ICAgICAgICAgICBqID0gMDsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCAoIGNsYXp6ID0g
Y2xhc3Nlc1sgaisrIF0gKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY3VyLmlu
ZGV4T2YoICIgIiArIGNsYXp6ICsgIiAiICkgPCAwICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGN1ciArPSBjbGF6eiArICIgIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgYXNzaWdu
IGlmIGRpZmZlcmVudCB0byBhdm9pZCB1bm5lZWRlZCByZW5kZXJpbmcuCisgICAgICAgICAgICAg
ICAgICAgIGZpbmFsVmFsdWUgPSBzdHJpcEFuZENvbGxhcHNlKCBjdXIgKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCBjdXJWYWx1ZSAhPT0gZmluYWxWYWx1ZSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGVsZW0uc2V0QXR0cmlidXRlKCAiY2xhc3MiLCBmaW5hbFZhbHVlICk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgcmVtb3ZlQ2xhc3M6
IGZ1bmN0aW9uKCB2YWx1ZSApIHsKKyAgICAgICAgdmFyIGNsYXNzZXMsIGVsZW0sIGN1ciwgY3Vy
VmFsdWUsIGNsYXp6LCBqLCBmaW5hbFZhbHVlLAorICAgICAgICAgICAgaSA9IDA7CisKKyAgICAg
ICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkgeworICAgICAgICAgICAgICAgIGpRdWVyeSggdGhp
cyApLnJlbW92ZUNsYXNzKCB2YWx1ZS5jYWxsKCB0aGlzLCBqLCBnZXRDbGFzcyggdGhpcyApICkg
KTsKKyAgICAgICAgICAgIH0gKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggIWFyZ3VtZW50
cy5sZW5ndGggKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5hdHRyKCAiY2xhc3MiLCAiIiAp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciICYm
IHZhbHVlICkgeworICAgICAgICAgICAgY2xhc3NlcyA9IHZhbHVlLm1hdGNoKCBybm90aHRtbHdo
aXRlICkgfHwgW107CisKKyAgICAgICAgICAgIHdoaWxlICggKCBlbGVtID0gdGhpc1sgaSsrIF0g
KSApIHsKKyAgICAgICAgICAgICAgICBjdXJWYWx1ZSA9IGdldENsYXNzKCBlbGVtICk7CisKKyAg
ICAgICAgICAgICAgICAvLyBUaGlzIGV4cHJlc3Npb24gaXMgaGVyZSBmb3IgYmV0dGVyIGNvbXBy
ZXNzaWJpbGl0eSAoc2VlIGFkZENsYXNzKQorICAgICAgICAgICAgICAgIGN1ciA9IGVsZW0ubm9k
ZVR5cGUgPT09IDEgJiYgKCAiICIgKyBzdHJpcEFuZENvbGxhcHNlKCBjdXJWYWx1ZSApICsgIiAi
ICk7CisKKyAgICAgICAgICAgICAgICBpZiAoIGN1ciApIHsKKyAgICAgICAgICAgICAgICAgICAg
aiA9IDA7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlICggKCBjbGF6eiA9IGNsYXNzZXNbIGor
KyBdICkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSAqYWxsKiBpbnN0
YW5jZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggY3VyLmluZGV4T2YoICIgIiAr
IGNsYXp6ICsgIiAiICkgPiAtMSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXIg
PSBjdXIucmVwbGFjZSggIiAiICsgY2xhenogKyAiICIsICIgIiApOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
Ly8gT25seSBhc3NpZ24gaWYgZGlmZmVyZW50IHRvIGF2b2lkIHVubmVlZGVkIHJlbmRlcmluZy4K
KyAgICAgICAgICAgICAgICAgICAgZmluYWxWYWx1ZSA9IHN0cmlwQW5kQ29sbGFwc2UoIGN1ciAp
OworICAgICAgICAgICAgICAgICAgICBpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoICJjbGFzcyIsIGZpbmFs
VmFsdWUgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0sCisKKyAg
ICB0b2dnbGVDbGFzczogZnVuY3Rpb24oIHZhbHVlLCBzdGF0ZVZhbCApIHsKKyAgICAgICAgdmFy
IHR5cGUgPSB0eXBlb2YgdmFsdWU7CisKKyAgICAgICAgaWYgKCB0eXBlb2Ygc3RhdGVWYWwgPT09
ICJib29sZWFuIiAmJiB0eXBlID09PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgIHJldHVybiBz
dGF0ZVZhbCA/IHRoaXMuYWRkQ2xhc3MoIHZhbHVlICkgOiB0aGlzLnJlbW92ZUNsYXNzKCB2YWx1
ZSApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUg
KSApIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkgeworICAg
ICAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLnRvZ2dsZUNsYXNzKAorICAgICAgICAgICAgICAg
ICAgICB2YWx1ZS5jYWxsKCB0aGlzLCBpLCBnZXRDbGFzcyggdGhpcyApLCBzdGF0ZVZhbCApLAor
ICAgICAgICAgICAgICAgICAgICBzdGF0ZVZhbAorICAgICAgICAgICAgICAgICk7CisgICAgICAg
ICAgICB9ICk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgIHZhciBjbGFzc05hbWUsIGksIHNlbGYsIGNsYXNzTmFtZXM7CisK
KyAgICAgICAgICAgIGlmICggdHlwZSA9PT0gInN0cmluZyIgKSB7CisKKyAgICAgICAgICAgICAg
ICAvLyBUb2dnbGUgaW5kaXZpZHVhbCBjbGFzcyBuYW1lcworICAgICAgICAgICAgICAgIGkgPSAw
OworICAgICAgICAgICAgICAgIHNlbGYgPSBqUXVlcnkoIHRoaXMgKTsKKyAgICAgICAgICAgICAg
ICBjbGFzc05hbWVzID0gdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTsKKworICAg
ICAgICAgICAgICAgIHdoaWxlICggKCBjbGFzc05hbWUgPSBjbGFzc05hbWVzWyBpKysgXSApICkg
eworCisgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGVhY2ggY2xhc3NOYW1lIGdpdmVuLCBz
cGFjZSBzZXBhcmF0ZWQgbGlzdAorICAgICAgICAgICAgICAgICAgICBpZiAoIHNlbGYuaGFzQ2xh
c3MoIGNsYXNzTmFtZSApICkgeworICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZW1vdmVD
bGFzcyggY2xhc3NOYW1lICk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmLmFkZENsYXNzKCBjbGFzc05hbWUgKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVG9nZ2xlIHdo
b2xlIGNsYXNzIG5hbWUKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIHZhbHVlID09PSB1bmRlZmlu
ZWQgfHwgdHlwZSA9PT0gImJvb2xlYW4iICkgeworICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA9
IGdldENsYXNzKCB0aGlzICk7CisgICAgICAgICAgICAgICAgaWYgKCBjbGFzc05hbWUgKSB7CisK
KyAgICAgICAgICAgICAgICAgICAgLy8gU3RvcmUgY2xhc3NOYW1lIGlmIHNldAorICAgICAgICAg
ICAgICAgICAgICBkYXRhUHJpdi5zZXQoIHRoaXMsICJfX2NsYXNzTmFtZV9fIiwgY2xhc3NOYW1l
ICk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGVsZW1l
bnQgaGFzIGEgY2xhc3MgbmFtZSBvciBpZiB3ZSdyZSBwYXNzZWQgYGZhbHNlYCwKKyAgICAgICAg
ICAgICAgICAvLyB0aGVuIHJlbW92ZSB0aGUgd2hvbGUgY2xhc3NuYW1lIChpZiB0aGVyZSB3YXMg
b25lLCB0aGUgYWJvdmUgc2F2ZWQgaXQpLgorICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSBi
cmluZyBiYWNrIHdoYXRldmVyIHdhcyBwcmV2aW91c2x5IHNhdmVkIChpZiBhbnl0aGluZyksCisg
ICAgICAgICAgICAgICAgLy8gZmFsbGluZyBiYWNrIHRvIHRoZSBlbXB0eSBzdHJpbmcgaWYgbm90
aGluZyB3YXMgc3RvcmVkLgorICAgICAgICAgICAgICAgIGlmICggdGhpcy5zZXRBdHRyaWJ1dGUg
KSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCAiY2xhc3MiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lIHx8IHZhbHVlID09PSBmYWxzZSA/CisgICAg
ICAgICAgICAgICAgICAgICAgICAiIiA6CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUHJp
di5nZXQoIHRoaXMsICJfX2NsYXNzTmFtZV9fIiApIHx8ICIiCisgICAgICAgICAgICAgICAgICAg
ICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9ICk7CisgICAg
fSwKKworICAgIGhhc0NsYXNzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CisgICAgICAgIHZhciBj
bGFzc05hbWUsIGVsZW0sCisgICAgICAgICAgICBpID0gMDsKKworICAgICAgICBjbGFzc05hbWUg
PSAiICIgKyBzZWxlY3RvciArICIgIjsKKyAgICAgICAgd2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBp
KysgXSApICkgeworICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmCisgICAg
ICAgICAgICAgICAgKCAiICIgKyBzdHJpcEFuZENvbGxhcHNlKCBnZXRDbGFzcyggZWxlbSApICkg
KyAiICIgKS5pbmRleE9mKCBjbGFzc05hbWUgKSA+IC0xICkgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9Cit9ICk7CisKKworCisKK3ZhciBycmV0dXJuID0gL1xyL2c7CisKK2pR
dWVyeS5mbi5leHRlbmQoIHsKKyAgICB2YWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKKyAgICAgICAg
dmFyIGhvb2tzLCByZXQsIGlzRnVuY3Rpb24sCisgICAgICAgICAgICBlbGVtID0gdGhpc1sgMCBd
OworCisgICAgICAgIGlmICggIWFyZ3VtZW50cy5sZW5ndGggKSB7CisgICAgICAgICAgICBpZiAo
IGVsZW0gKSB7CisgICAgICAgICAgICAgICAgaG9va3MgPSBqUXVlcnkudmFsSG9va3NbIGVsZW0u
dHlwZSBdIHx8CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS52YWxIb29rc1sgZWxlbS5ub2Rl
TmFtZS50b0xvd2VyQ2FzZSgpIF07CisKKyAgICAgICAgICAgICAgICBpZiAoIGhvb2tzICYmCisg
ICAgICAgICAgICAgICAgICAgICJnZXQiIGluIGhvb2tzICYmCisgICAgICAgICAgICAgICAgICAg
ICggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCAidmFsdWUiICkgKSAhPT0gdW5kZWZpbmVkCisgICAg
ICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0ID0gZWxlbS52YWx1ZTsKKworICAgICAg
ICAgICAgICAgIC8vIEhhbmRsZSBtb3N0IGNvbW1vbiBzdHJpbmcgY2FzZXMKKyAgICAgICAgICAg
ICAgICBpZiAoIHR5cGVvZiByZXQgPT09ICJzdHJpbmciICkgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcmV0LnJlcGxhY2UoIHJyZXR1cm4sICIiICk7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgLy8gSGFuZGxlIGNhc2VzIHdoZXJlIHZhbHVlIGlzIG51bGwvdW5k
ZWYgb3IgbnVtYmVyCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldCA9PSBudWxsID8gIiIgOiBy
ZXQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlzRnVuY3Rpb24gPSBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKTsKKworICAgICAg
ICByZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHsKKyAgICAgICAgICAgIHZhciB2YWw7
CisKKyAgICAgICAgICAgIGlmICggdGhpcy5ub2RlVHlwZSAhPT0gMSApIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggaXNGdW5jdGlv
biApIHsKKyAgICAgICAgICAgICAgICB2YWwgPSB2YWx1ZS5jYWxsKCB0aGlzLCBpLCBqUXVlcnko
IHRoaXMgKS52YWwoKSApOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2
YWwgPSB2YWx1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVHJlYXQgbnVsbC91
bmRlZmluZWQgYXMgIiI7IGNvbnZlcnQgbnVtYmVycyB0byBzdHJpbmcKKyAgICAgICAgICAgIGlm
ICggdmFsID09IG51bGwgKSB7CisgICAgICAgICAgICAgICAgdmFsID0gIiI7CisKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoIHR5cGVvZiB2YWwgPT09ICJudW1iZXIiICkgeworICAgICAgICAgICAg
ICAgIHZhbCArPSAiIjsKKworICAgICAgICAgICAgfSBlbHNlIGlmICggalF1ZXJ5LmlzQXJyYXko
IHZhbCApICkgeworICAgICAgICAgICAgICAgIHZhbCA9IGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rp
b24oIHZhbHVlICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/
ICIiIDogdmFsdWUgKyAiIjsKKyAgICAgICAgICAgICAgICB9ICk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGhvb2tzID0galF1ZXJ5LnZhbEhvb2tzWyB0aGlzLnR5cGUgXSB8fCBqUXVl
cnkudmFsSG9va3NbIHRoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdOworCisgICAgICAgICAg
ICAvLyBJZiBzZXQgcmV0dXJucyB1bmRlZmluZWQsIGZhbGwgYmFjayB0byBub3JtYWwgc2V0dGlu
ZworICAgICAgICAgICAgaWYgKCAhaG9va3MgfHwgISggInNldCIgaW4gaG9va3MgKSB8fCBob29r
cy5zZXQoIHRoaXMsIHZhbCwgInZhbHVlIiApID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAg
ICAgICAgdGhpcy52YWx1ZSA9IHZhbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSApOworICAg
IH0KK30gKTsKKworalF1ZXJ5LmV4dGVuZCggeworICAgIHZhbEhvb2tzOiB7CisgICAgICAgIG9w
dGlvbjogeworICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKKworICAgICAgICAg
ICAgICAgIHZhciB2YWwgPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCAidmFsdWUiICk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHZhbCAhPSBudWxsID8KKyAgICAgICAgICAgICAgICAgICAgdmFs
IDoKKworICAgICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBJRSA8PTEwIC0gMTEgb25seQor
ICAgICAgICAgICAgICAgICAgICAvLyBvcHRpb24udGV4dCB0aHJvd3MgZXhjZXB0aW9ucyAoIzE0
Njg2LCAjMTQ4NTgpCisgICAgICAgICAgICAgICAgICAgIC8vIFN0cmlwIGFuZCBjb2xsYXBzZSB3
aGl0ZXNwYWNlCisgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3
Zy5vcmcvI3N0cmlwLWFuZC1jb2xsYXBzZS13aGl0ZXNwYWNlCisgICAgICAgICAgICAgICAgICAg
IHN0cmlwQW5kQ29sbGFwc2UoIGpRdWVyeS50ZXh0KCBlbGVtICkgKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSwKKyAgICAgICAgc2VsZWN0OiB7CisgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9u
KCBlbGVtICkgeworICAgICAgICAgICAgICAgIHZhciB2YWx1ZSwgb3B0aW9uLCBpLAorICAgICAg
ICAgICAgICAgICAgICBvcHRpb25zID0gZWxlbS5vcHRpb25zLAorICAgICAgICAgICAgICAgICAg
ICBpbmRleCA9IGVsZW0uc2VsZWN0ZWRJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgb25lID0g
ZWxlbS50eXBlID09PSAic2VsZWN0LW9uZSIsCisgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9
IG9uZSA/IG51bGwgOiBbXSwKKyAgICAgICAgICAgICAgICAgICAgbWF4ID0gb25lID8gaW5kZXgg
KyAxIDogb3B0aW9ucy5sZW5ndGg7CisKKyAgICAgICAgICAgICAgICBpZiAoIGluZGV4IDwgMCAp
IHsKKyAgICAgICAgICAgICAgICAgICAgaSA9IG1heDsKKworICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIGkgPSBvbmUgPyBpbmRleCA6IDA7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gTG9vcCB0aHJvdWdoIGFsbCB0aGUgc2VsZWN0
ZWQgb3B0aW9ucworICAgICAgICAgICAgICAgIGZvciAoIDsgaSA8IG1heDsgaSsrICkgeworICAg
ICAgICAgICAgICAgICAgICBvcHRpb24gPSBvcHRpb25zWyBpIF07CisKKyAgICAgICAgICAgICAg
ICAgICAgLy8gU3VwcG9ydDogSUUgPD05IG9ubHkKKyAgICAgICAgICAgICAgICAgICAgLy8gSUU4
LTkgZG9lc24ndCB1cGRhdGUgc2VsZWN0ZWQgYWZ0ZXIgZm9ybSByZXNldCAoIzI1NTEpCisgICAg
ICAgICAgICAgICAgICAgIGlmICggKCBvcHRpb24uc2VsZWN0ZWQgfHwgaSA9PT0gaW5kZXggKSAm
JgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgcmV0dXJuIG9wdGlvbnMg
dGhhdCBhcmUgZGlzYWJsZWQgb3IgaW4gYSBkaXNhYmxlZCBvcHRncm91cAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICFvcHRpb24uZGlzYWJsZWQgJiYKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoICFvcHRpb24ucGFyZW50Tm9kZS5kaXNhYmxlZCB8fAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAhalF1ZXJ5Lm5vZGVOYW1lKCBvcHRpb24ucGFyZW50Tm9kZSwgIm9w
dGdyb3VwIiApICkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgc3Bl
Y2lmaWMgdmFsdWUgZm9yIHRoZSBvcHRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVl
ID0galF1ZXJ5KCBvcHRpb24gKS52YWwoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
V2UgZG9uJ3QgbmVlZCBhbiBhcnJheSBmb3Igb25lIHNlbGVjdHMKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggb25lICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2
YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gTXVsdGktU2VsZWN0cyByZXR1cm4gYW4gYXJyYXkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbHVlcy5wdXNoKCB2YWx1ZSApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlczsKKyAgICAgICAgICAg
IH0sCisKKyAgICAgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgeworICAgICAg
ICAgICAgICAgIHZhciBvcHRpb25TZXQsIG9wdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgb3B0
aW9ucyA9IGVsZW0ub3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0galF1ZXJ5
Lm1ha2VBcnJheSggdmFsdWUgKSwKKyAgICAgICAgICAgICAgICAgICAgaSA9IG9wdGlvbnMubGVu
Z3RoOworCisgICAgICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAgICAgICAg
ICAgIG9wdGlvbiA9IG9wdGlvbnNbIGkgXTsKKworICAgICAgICAgICAgICAgICAgICAvKiBlc2xp
bnQtZGlzYWJsZSBuby1jb25kLWFzc2lnbiAqLworCisgICAgICAgICAgICAgICAgICAgIGlmICgg
b3B0aW9uLnNlbGVjdGVkID0KKyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5pbkFycmF5
KCBqUXVlcnkudmFsSG9va3Mub3B0aW9uLmdldCggb3B0aW9uICksIHZhbHVlcyApID4gLTEKKyAg
ICAgICAgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25TZXQg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLyog
ZXNsaW50LWVuYWJsZSBuby1jb25kLWFzc2lnbiAqLworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIC8vIEZvcmNlIGJyb3dzZXJzIHRvIGJlaGF2ZSBjb25zaXN0ZW50bHkgd2hl
biBub24tbWF0Y2hpbmcgdmFsdWUgaXMgc2V0CisgICAgICAgICAgICAgICAgaWYgKCAhb3B0aW9u
U2V0ICkgeworICAgICAgICAgICAgICAgICAgICBlbGVtLnNlbGVjdGVkSW5kZXggPSAtMTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlczsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KK30gKTsKKworLy8gUmFkaW9zIGFuZCBjaGVja2JveGVz
IGdldHRlci9zZXR0ZXIKK2pRdWVyeS5lYWNoKCBbICJyYWRpbyIsICJjaGVja2JveCIgXSwgZnVu
Y3Rpb24oKSB7CisgICAgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0gPSB7CisgICAgICAgIHNldDog
ZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgeworICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNBcnJh
eSggdmFsdWUgKSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKCBlbGVtLmNoZWNrZWQgPSBq
UXVlcnkuaW5BcnJheSggalF1ZXJ5KCBlbGVtICkudmFsKCksIHZhbHVlICkgPiAtMSApOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICBpZiAoICFzdXBwb3J0LmNoZWNrT24g
KSB7CisgICAgICAgIGpRdWVyeS52YWxIb29rc1sgdGhpcyBdLmdldCA9IGZ1bmN0aW9uKCBlbGVt
ICkgeworICAgICAgICAgICAgcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCAidmFsdWUiICkgPT09
IG51bGwgPyAib24iIDogZWxlbS52YWx1ZTsKKyAgICAgICAgfTsKKyAgICB9Cit9ICk7CisKKwor
CisKKy8vIFJldHVybiBqUXVlcnkgZm9yIGF0dHJpYnV0ZXMtb25seSBpbmNsdXNpb24KKworCit2
YXIgcmZvY3VzTW9ycGggPSAvXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC87CisKK2pR
dWVyeS5leHRlbmQoIGpRdWVyeS5ldmVudCwgeworCisgICAgdHJpZ2dlcjogZnVuY3Rpb24oIGV2
ZW50LCBkYXRhLCBlbGVtLCBvbmx5SGFuZGxlcnMgKSB7CisKKyAgICAgICAgdmFyIGksIGN1ciwg
dG1wLCBidWJibGVUeXBlLCBvbnR5cGUsIGhhbmRsZSwgc3BlY2lhbCwKKyAgICAgICAgICAgIGV2
ZW50UGF0aCA9IFsgZWxlbSB8fCBkb2N1bWVudCBdLAorICAgICAgICAgICAgdHlwZSA9IGhhc093
bi5jYWxsKCBldmVudCwgInR5cGUiICkgPyBldmVudC50eXBlIDogZXZlbnQsCisgICAgICAgICAg
ICBuYW1lc3BhY2VzID0gaGFzT3duLmNhbGwoIGV2ZW50LCAibmFtZXNwYWNlIiApID8gZXZlbnQu
bmFtZXNwYWNlLnNwbGl0KCAiLiIgKSA6IFtdOworCisgICAgICAgIGN1ciA9IHRtcCA9IGVsZW0g
PSBlbGVtIHx8IGRvY3VtZW50OworCisgICAgICAgIC8vIERvbid0IGRvIGV2ZW50cyBvbiB0ZXh0
IGFuZCBjb21tZW50IG5vZGVzCisgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBl
bGVtLm5vZGVUeXBlID09PSA4ICkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgLy8gZm9jdXMvYmx1ciBtb3JwaHMgdG8gZm9jdXNpbi9vdXQ7IGVuc3VyZSB3ZSdy
ZSBub3QgZmlyaW5nIHRoZW0gcmlnaHQgbm93CisgICAgICAgIGlmICggcmZvY3VzTW9ycGgudGVz
dCggdHlwZSArIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgKSApIHsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggdHlwZS5pbmRleE9mKCAiLiIgKSA+IC0xICkg
eworCisgICAgICAgICAgICAvLyBOYW1lc3BhY2VkIHRyaWdnZXI7IGNyZWF0ZSBhIHJlZ2V4cCB0
byBtYXRjaCBldmVudCB0eXBlIGluIGhhbmRsZSgpCisgICAgICAgICAgICBuYW1lc3BhY2VzID0g
dHlwZS5zcGxpdCggIi4iICk7CisgICAgICAgICAgICB0eXBlID0gbmFtZXNwYWNlcy5zaGlmdCgp
OworICAgICAgICAgICAgbmFtZXNwYWNlcy5zb3J0KCk7CisgICAgICAgIH0KKyAgICAgICAgb250
eXBlID0gdHlwZS5pbmRleE9mKCAiOiIgKSA8IDAgJiYgIm9uIiArIHR5cGU7CisKKyAgICAgICAg
Ly8gQ2FsbGVyIGNhbiBwYXNzIGluIGEgalF1ZXJ5LkV2ZW50IG9iamVjdCwgT2JqZWN0LCBvciBq
dXN0IGFuIGV2ZW50IHR5cGUgc3RyaW5nCisgICAgICAgIGV2ZW50ID0gZXZlbnRbIGpRdWVyeS5l
eHBhbmRvIF0gPworICAgICAgICAgICAgZXZlbnQgOgorICAgICAgICAgICAgbmV3IGpRdWVyeS5F
dmVudCggdHlwZSwgdHlwZW9mIGV2ZW50ID09PSAib2JqZWN0IiAmJiBldmVudCApOworCisgICAg
ICAgIC8vIFRyaWdnZXIgYml0bWFzazogJiAxIGZvciBuYXRpdmUgaGFuZGxlcnM7ICYgMiBmb3Ig
alF1ZXJ5IChhbHdheXMgdHJ1ZSkKKyAgICAgICAgZXZlbnQuaXNUcmlnZ2VyID0gb25seUhhbmRs
ZXJzID8gMiA6IDM7CisgICAgICAgIGV2ZW50Lm5hbWVzcGFjZSA9IG5hbWVzcGFjZXMuam9pbigg
Ii4iICk7CisgICAgICAgIGV2ZW50LnJuYW1lc3BhY2UgPSBldmVudC5uYW1lc3BhY2UgPworICAg
ICAgICAgICAgbmV3IFJlZ0V4cCggIihefFxcLikiICsgbmFtZXNwYWNlcy5qb2luKCAiXFwuKD86
LipcXC58KSIgKSArICIoXFwufCQpIiApIDoKKyAgICAgICAgICAgIG51bGw7CisKKyAgICAgICAg
Ly8gQ2xlYW4gdXAgdGhlIGV2ZW50IGluIGNhc2UgaXQgaXMgYmVpbmcgcmV1c2VkCisgICAgICAg
IGV2ZW50LnJlc3VsdCA9IHVuZGVmaW5lZDsKKyAgICAgICAgaWYgKCAhZXZlbnQudGFyZ2V0ICkg
eworICAgICAgICAgICAgZXZlbnQudGFyZ2V0ID0gZWxlbTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIENsb25lIGFueSBpbmNvbWluZyBkYXRhIGFuZCBwcmVwZW5kIHRoZSBldmVudCwgY3JlYXRp
bmcgdGhlIGhhbmRsZXIgYXJnIGxpc3QKKyAgICAgICAgZGF0YSA9IGRhdGEgPT0gbnVsbCA/Cisg
ICAgICAgICAgICBbIGV2ZW50IF0gOgorICAgICAgICAgICAgalF1ZXJ5Lm1ha2VBcnJheSggZGF0
YSwgWyBldmVudCBdICk7CisKKyAgICAgICAgLy8gQWxsb3cgc3BlY2lhbCBldmVudHMgdG8gZHJh
dyBvdXRzaWRlIHRoZSBsaW5lcworICAgICAgICBzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNp
YWxbIHR5cGUgXSB8fCB7fTsKKyAgICAgICAgaWYgKCAhb25seUhhbmRsZXJzICYmIHNwZWNpYWwu
dHJpZ2dlciAmJiBzcGVjaWFsLnRyaWdnZXIuYXBwbHkoIGVsZW0sIGRhdGEgKSA9PT0gZmFsc2Ug
KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBEZXRlcm1p
bmUgZXZlbnQgcHJvcGFnYXRpb24gcGF0aCBpbiBhZHZhbmNlLCBwZXIgVzNDIGV2ZW50cyBzcGVj
ICgjOTk1MSkKKyAgICAgICAgLy8gQnViYmxlIHVwIHRvIGRvY3VtZW50LCB0aGVuIHRvIHdpbmRv
dzsgd2F0Y2ggZm9yIGEgZ2xvYmFsIG93bmVyRG9jdW1lbnQgdmFyICgjOTcyNCkKKyAgICAgICAg
aWYgKCAhb25seUhhbmRsZXJzICYmICFzcGVjaWFsLm5vQnViYmxlICYmICFqUXVlcnkuaXNXaW5k
b3coIGVsZW0gKSApIHsKKworICAgICAgICAgICAgYnViYmxlVHlwZSA9IHNwZWNpYWwuZGVsZWdh
dGVUeXBlIHx8IHR5cGU7CisgICAgICAgICAgICBpZiAoICFyZm9jdXNNb3JwaC50ZXN0KCBidWJi
bGVUeXBlICsgdHlwZSApICkgeworICAgICAgICAgICAgICAgIGN1ciA9IGN1ci5wYXJlbnROb2Rl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICggOyBjdXI7IGN1ciA9IGN1ci5wYXJl
bnROb2RlICkgeworICAgICAgICAgICAgICAgIGV2ZW50UGF0aC5wdXNoKCBjdXIgKTsKKyAgICAg
ICAgICAgICAgICB0bXAgPSBjdXI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE9u
bHkgYWRkIHdpbmRvdyBpZiB3ZSBnb3QgdG8gZG9jdW1lbnQgKGUuZy4sIG5vdCBwbGFpbiBvYmog
b3IgZGV0YWNoZWQgRE9NKQorICAgICAgICAgICAgaWYgKCB0bXAgPT09ICggZWxlbS5vd25lckRv
Y3VtZW50IHx8IGRvY3VtZW50ICkgKSB7CisgICAgICAgICAgICAgICAgZXZlbnRQYXRoLnB1c2go
IHRtcC5kZWZhdWx0VmlldyB8fCB0bXAucGFyZW50V2luZG93IHx8IHdpbmRvdyApOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gRmlyZSBoYW5kbGVycyBvbiB0aGUgZXZl
bnQgcGF0aAorICAgICAgICBpID0gMDsKKyAgICAgICAgd2hpbGUgKCAoIGN1ciA9IGV2ZW50UGF0
aFsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHsKKworICAgICAg
ICAgICAgZXZlbnQudHlwZSA9IGkgPiAxID8KKyAgICAgICAgICAgICAgICBidWJibGVUeXBlIDoK
KyAgICAgICAgICAgICAgICBzcGVjaWFsLmJpbmRUeXBlIHx8IHR5cGU7CisKKyAgICAgICAgICAg
IC8vIGpRdWVyeSBoYW5kbGVyCisgICAgICAgICAgICBoYW5kbGUgPSAoIGRhdGFQcml2LmdldCgg
Y3VyLCAiZXZlbnRzIiApIHx8IHt9IClbIGV2ZW50LnR5cGUgXSAmJgorICAgICAgICAgICAgICAg
IGRhdGFQcml2LmdldCggY3VyLCAiaGFuZGxlIiApOworICAgICAgICAgICAgaWYgKCBoYW5kbGUg
KSB7CisgICAgICAgICAgICAgICAgaGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gTmF0aXZlIGhhbmRsZXIKKyAgICAgICAgICAgIGhhbmRs
ZSA9IG9udHlwZSAmJiBjdXJbIG9udHlwZSBdOworICAgICAgICAgICAgaWYgKCBoYW5kbGUgJiYg
aGFuZGxlLmFwcGx5ICYmIGFjY2VwdERhdGEoIGN1ciApICkgeworICAgICAgICAgICAgICAgIGV2
ZW50LnJlc3VsdCA9IGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICk7CisgICAgICAgICAgICAgICAg
aWYgKCBldmVudC5yZXN1bHQgPT09IGZhbHNlICkgeworICAgICAgICAgICAgICAgICAgICBldmVu
dC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBldmVudC50eXBlID0gdHlwZTsKKworICAgICAgICAvLyBJZiBub2Jv
ZHkgcHJldmVudGVkIHRoZSBkZWZhdWx0IGFjdGlvbiwgZG8gaXQgbm93CisgICAgICAgIGlmICgg
IW9ubHlIYW5kbGVycyAmJiAhZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgKSB7CisKKyAgICAg
ICAgICAgIGlmICggKCAhc3BlY2lhbC5fZGVmYXVsdCB8fAorICAgICAgICAgICAgICAgIHNwZWNp
YWwuX2RlZmF1bHQuYXBwbHkoIGV2ZW50UGF0aC5wb3AoKSwgZGF0YSApID09PSBmYWxzZSApICYm
CisgICAgICAgICAgICAgICAgYWNjZXB0RGF0YSggZWxlbSApICkgeworCisgICAgICAgICAgICAg
ICAgLy8gQ2FsbCBhIG5hdGl2ZSBET00gbWV0aG9kIG9uIHRoZSB0YXJnZXQgd2l0aCB0aGUgc2Ft
ZSBuYW1lIGFzIHRoZSBldmVudC4KKyAgICAgICAgICAgICAgICAvLyBEb24ndCBkbyBkZWZhdWx0
IGFjdGlvbnMgb24gd2luZG93LCB0aGF0J3Mgd2hlcmUgZ2xvYmFsIHZhcmlhYmxlcyBiZSAoIzYx
NzApCisgICAgICAgICAgICAgICAgaWYgKCBvbnR5cGUgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIGVs
ZW1bIHR5cGUgXSApICYmICFqUXVlcnkuaXNXaW5kb3coIGVsZW0gKSApIHsKKworICAgICAgICAg
ICAgICAgICAgICAvLyBEb24ndCByZS10cmlnZ2VyIGFuIG9uRk9PIGV2ZW50IHdoZW4gd2UgY2Fs
bCBpdHMgRk9PKCkgbWV0aG9kCisgICAgICAgICAgICAgICAgICAgIHRtcCA9IGVsZW1bIG9udHlw
ZSBdOworCisgICAgICAgICAgICAgICAgICAgIGlmICggdG1wICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgZWxlbVsgb250eXBlIF0gPSBudWxsOworICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgLy8gUHJldmVudCByZS10cmlnZ2VyaW5nIG9mIHRoZSBzYW1l
IGV2ZW50LCBzaW5jZSB3ZSBhbHJlYWR5IGJ1YmJsZWQgaXQgYWJvdmUKKyAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHR5cGU7CisgICAgICAgICAgICAgICAgICAg
IGVsZW1bIHR5cGUgXSgpOworICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dl
cmVkID0gdW5kZWZpbmVkOworCisgICAgICAgICAgICAgICAgICAgIGlmICggdG1wICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgZWxlbVsgb250eXBlIF0gPSB0bXA7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gZXZlbnQucmVzdWx0OworICAgIH0sCisKKyAgICAvLyBQaWdneWJhY2sg
b24gYSBkb25vciBldmVudCB0byBzaW11bGF0ZSBhIGRpZmZlcmVudCBvbmUKKyAgICAvLyBVc2Vk
IG9ubHkgZm9yIGBmb2N1cyhpbiB8IG91dClgIGV2ZW50cworICAgIHNpbXVsYXRlOiBmdW5jdGlv
biggdHlwZSwgZWxlbSwgZXZlbnQgKSB7CisgICAgICAgIHZhciBlID0galF1ZXJ5LmV4dGVuZCgK
KyAgICAgICAgICAgIG5ldyBqUXVlcnkuRXZlbnQoKSwKKyAgICAgICAgICAgIGV2ZW50LAorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsCisgICAgICAgICAgICAgICAg
aXNTaW11bGF0ZWQ6IHRydWUKKyAgICAgICAgICAgIH0KKyAgICAgICAgKTsKKworICAgICAgICBq
UXVlcnkuZXZlbnQudHJpZ2dlciggZSwgbnVsbCwgZWxlbSApOworICAgIH0KKworfSApOworCitq
UXVlcnkuZm4uZXh0ZW5kKCB7CisKKyAgICB0cmlnZ2VyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSAp
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBq
UXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgdGhpcyApOworICAgICAgICB9ICk7Cisg
ICAgfSwKKyAgICB0cmlnZ2VySGFuZGxlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7CisgICAg
ICAgIHZhciBlbGVtID0gdGhpc1sgMCBdOworICAgICAgICBpZiAoIGVsZW0gKSB7CisgICAgICAg
ICAgICByZXR1cm4galF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIGVsZW0sIHRydWUg
KTsKKyAgICAgICAgfQorICAgIH0KK30gKTsKKworCitqUXVlcnkuZWFjaCggKCAiYmx1ciBmb2N1
cyBmb2N1c2luIGZvY3Vzb3V0IHJlc2l6ZSBzY3JvbGwgY2xpY2sgZGJsY2xpY2sgIiArCisgICAg
Im1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRl
ciBtb3VzZWxlYXZlICIgKworICAgICJjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXBy
ZXNzIGtleXVwIGNvbnRleHRtZW51IiApLnNwbGl0KCAiICIgKSwKKyAgICBmdW5jdGlvbiggaSwg
bmFtZSApIHsKKworICAgIC8vIEhhbmRsZSBldmVudCBiaW5kaW5nCisgICAgalF1ZXJ5LmZuWyBu
YW1lIF0gPSBmdW5jdGlvbiggZGF0YSwgZm4gKSB7CisgICAgICAgIHJldHVybiBhcmd1bWVudHMu
bGVuZ3RoID4gMCA/CisgICAgICAgICAgICB0aGlzLm9uKCBuYW1lLCBudWxsLCBkYXRhLCBmbiAp
IDoKKyAgICAgICAgICAgIHRoaXMudHJpZ2dlciggbmFtZSApOworICAgIH07Cit9ICk7CisKK2pR
dWVyeS5mbi5leHRlbmQoIHsKKyAgICBob3ZlcjogZnVuY3Rpb24oIGZuT3ZlciwgZm5PdXQgKSB7
CisgICAgICAgIHJldHVybiB0aGlzLm1vdXNlZW50ZXIoIGZuT3ZlciApLm1vdXNlbGVhdmUoIGZu
T3V0IHx8IGZuT3ZlciApOworICAgIH0KK30gKTsKKworCisKKworc3VwcG9ydC5mb2N1c2luID0g
Im9uZm9jdXNpbiIgaW4gd2luZG93OworCisKKy8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00NAorLy8g
RmlyZWZveCBkb2Vzbid0IGhhdmUgZm9jdXMoaW4gfCBvdXQpIGV2ZW50cworLy8gUmVsYXRlZCB0
aWNrZXQgLSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02ODc3
ODcKKy8vCisvLyBTdXBwb3J0OiBDaHJvbWUgPD00OCAtIDQ5LCBTYWZhcmkgPD05LjAgLSA5LjEK
Ky8vIGZvY3VzKGluIHwgb3V0KSBldmVudHMgZmlyZSBhZnRlciBmb2N1cyAmIGJsdXIgZXZlbnRz
LAorLy8gd2hpY2ggaXMgc3BlYyB2aW9sYXRpb24gLSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00t
TGV2ZWwtMy1FdmVudHMvI2V2ZW50cy1mb2N1c2V2ZW50LWV2ZW50LW9yZGVyCisvLyBSZWxhdGVk
IHRpY2tldCAtIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0
YWlsP2lkPTQ0OTg1NworaWYgKCAhc3VwcG9ydC5mb2N1c2luICkgeworICAgIGpRdWVyeS5lYWNo
KCB7IGZvY3VzOiAiZm9jdXNpbiIsIGJsdXI6ICJmb2N1c291dCIgfSwgZnVuY3Rpb24oIG9yaWcs
IGZpeCApIHsKKworICAgICAgICAvLyBBdHRhY2ggYSBzaW5nbGUgY2FwdHVyaW5nIGhhbmRsZXIg
b24gdGhlIGRvY3VtZW50IHdoaWxlIHNvbWVvbmUgd2FudHMgZm9jdXNpbi9mb2N1c291dAorICAg
ICAgICB2YXIgaGFuZGxlciA9IGZ1bmN0aW9uKCBldmVudCApIHsKKyAgICAgICAgICAgIGpRdWVy
eS5ldmVudC5zaW11bGF0ZSggZml4LCBldmVudC50YXJnZXQsIGpRdWVyeS5ldmVudC5maXgoIGV2
ZW50ICkgKTsKKyAgICAgICAgfTsKKworICAgICAgICBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZml4
IF0gPSB7CisgICAgICAgICAgICBzZXR1cDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAg
dmFyIGRvYyA9IHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzLAorICAgICAgICAgICAgICAgICAg
ICBhdHRhY2hlcyA9IGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXggKTsKKworICAgICAgICAgICAg
ICAgIGlmICggIWF0dGFjaGVzICkgeworICAgICAgICAgICAgICAgICAgICBkb2MuYWRkRXZlbnRM
aXN0ZW5lciggb3JpZywgaGFuZGxlciwgdHJ1ZSApOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4LCAoIGF0dGFjaGVzIHx8IDAgKSAr
IDEgKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB0ZWFyZG93bjogZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICAgICAgdmFyIGRvYyA9IHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzLAor
ICAgICAgICAgICAgICAgICAgICBhdHRhY2hlcyA9IGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXgg
KSAtIDE7CisKKyAgICAgICAgICAgICAgICBpZiAoICFhdHRhY2hlcyApIHsKKyAgICAgICAgICAg
ICAgICAgICAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoIG9yaWcsIGhhbmRsZXIsIHRydWUgKTsK
KyAgICAgICAgICAgICAgICAgICAgZGF0YVByaXYucmVtb3ZlKCBkb2MsIGZpeCApOworCisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YVByaXYuYWNjZXNz
KCBkb2MsIGZpeCwgYXR0YWNoZXMgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH07CisgICAgfSApOworfQordmFyIGxvY2F0aW9uID0gd2luZG93LmxvY2F0aW9u
OworCit2YXIgbm9uY2UgPSBqUXVlcnkubm93KCk7CisKK3ZhciBycXVlcnkgPSAoIC9cPy8gKTsK
KworCisKKy8vIENyb3NzLWJyb3dzZXIgeG1sIHBhcnNpbmcKK2pRdWVyeS5wYXJzZVhNTCA9IGZ1
bmN0aW9uKCBkYXRhICkgeworICAgIHZhciB4bWw7CisgICAgaWYgKCAhZGF0YSB8fCB0eXBlb2Yg
ZGF0YSAhPT0gInN0cmluZyIgKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAg
IC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5CisgICAgLy8gSUUgdGhyb3dzIG9uIHBhcnNlRnJv
bVN0cmluZyB3aXRoIGludmFsaWQgaW5wdXQuCisgICAgdHJ5IHsKKyAgICAgICAgeG1sID0gKCBu
ZXcgd2luZG93LkRPTVBhcnNlcigpICkucGFyc2VGcm9tU3RyaW5nKCBkYXRhLCAidGV4dC94bWwi
ICk7CisgICAgfSBjYXRjaCAoIGUgKSB7CisgICAgICAgIHhtbCA9IHVuZGVmaW5lZDsKKyAgICB9
CisKKyAgICBpZiAoICF4bWwgfHwgeG1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKCAicGFyc2VyZXJy
b3IiICkubGVuZ3RoICkgeworICAgICAgICBqUXVlcnkuZXJyb3IoICJJbnZhbGlkIFhNTDogIiAr
IGRhdGEgKTsKKyAgICB9CisgICAgcmV0dXJuIHhtbDsKK307CisKKwordmFyCisgICAgcmJyYWNr
ZXQgPSAvXFtcXSQvLAorICAgIHJDUkxGID0gL1xyP1xuL2csCisgICAgcnN1Ym1pdHRlclR5cGVz
ID0gL14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLAorICAgIHJzdWJtaXR0
YWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTsKKworZnVuY3Rpb24g
YnVpbGRQYXJhbXMoIHByZWZpeCwgb2JqLCB0cmFkaXRpb25hbCwgYWRkICkgeworICAgIHZhciBu
YW1lOworCisgICAgaWYgKCBqUXVlcnkuaXNBcnJheSggb2JqICkgKSB7CisKKyAgICAgICAgLy8g
U2VyaWFsaXplIGFycmF5IGl0ZW0uCisgICAgICAgIGpRdWVyeS5lYWNoKCBvYmosIGZ1bmN0aW9u
KCBpLCB2ICkgeworICAgICAgICAgICAgaWYgKCB0cmFkaXRpb25hbCB8fCByYnJhY2tldC50ZXN0
KCBwcmVmaXggKSApIHsKKworICAgICAgICAgICAgICAgIC8vIFRyZWF0IGVhY2ggYXJyYXkgaXRl
bSBhcyBhIHNjYWxhci4KKyAgICAgICAgICAgICAgICBhZGQoIHByZWZpeCwgdiApOworCisgICAg
ICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAgICAgLy8gSXRlbSBpcyBub24tc2NhbGFy
IChhcnJheSBvciBvYmplY3QpLCBlbmNvZGUgaXRzIG51bWVyaWMgaW5kZXguCisgICAgICAgICAg
ICAgICAgYnVpbGRQYXJhbXMoCisgICAgICAgICAgICAgICAgICAgIHByZWZpeCArICJbIiArICgg
dHlwZW9mIHYgPT09ICJvYmplY3QiICYmIHYgIT0gbnVsbCA/IGkgOiAiIiApICsgIl0iLAorICAg
ICAgICAgICAgICAgICAgICB2LAorICAgICAgICAgICAgICAgICAgICB0cmFkaXRpb25hbCwKKyAg
ICAgICAgICAgICAgICAgICAgYWRkCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSApOworCisgICAgfSBlbHNlIGlmICggIXRyYWRpdGlvbmFsICYmIGpRdWVyeS50
eXBlKCBvYmogKSA9PT0gIm9iamVjdCIgKSB7CisKKyAgICAgICAgLy8gU2VyaWFsaXplIG9iamVj
dCBpdGVtLgorICAgICAgICBmb3IgKCBuYW1lIGluIG9iaiApIHsKKyAgICAgICAgICAgIGJ1aWxk
UGFyYW1zKCBwcmVmaXggKyAiWyIgKyBuYW1lICsgIl0iLCBvYmpbIG5hbWUgXSwgdHJhZGl0aW9u
YWwsIGFkZCApOworICAgICAgICB9CisKKyAgICB9IGVsc2UgeworCisgICAgICAgIC8vIFNlcmlh
bGl6ZSBzY2FsYXIgaXRlbS4KKyAgICAgICAgYWRkKCBwcmVmaXgsIG9iaiApOworICAgIH0KK30K
KworLy8gU2VyaWFsaXplIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMgb3IgYSBzZXQgb2YKKy8v
IGtleS92YWx1ZXMgaW50byBhIHF1ZXJ5IHN0cmluZworalF1ZXJ5LnBhcmFtID0gZnVuY3Rpb24o
IGEsIHRyYWRpdGlvbmFsICkgeworICAgIHZhciBwcmVmaXgsCisgICAgICAgIHMgPSBbXSwKKyAg
ICAgICAgYWRkID0gZnVuY3Rpb24oIGtleSwgdmFsdWVPckZ1bmN0aW9uICkgeworCisgICAgICAg
ICAgICAvLyBJZiB2YWx1ZSBpcyBhIGZ1bmN0aW9uLCBpbnZva2UgaXQgYW5kIHVzZSBpdHMgcmV0
dXJuIHZhbHVlCisgICAgICAgICAgICB2YXIgdmFsdWUgPSBqUXVlcnkuaXNGdW5jdGlvbiggdmFs
dWVPckZ1bmN0aW9uICkgPworICAgICAgICAgICAgICAgIHZhbHVlT3JGdW5jdGlvbigpIDoKKyAg
ICAgICAgICAgICAgICB2YWx1ZU9yRnVuY3Rpb247CisKKyAgICAgICAgICAgIHNbIHMubGVuZ3Ro
IF0gPSBlbmNvZGVVUklDb21wb25lbnQoIGtleSApICsgIj0iICsKKyAgICAgICAgICAgICAgICBl
bmNvZGVVUklDb21wb25lbnQoIHZhbHVlID09IG51bGwgPyAiIiA6IHZhbHVlICk7CisgICAgICAg
IH07CisKKyAgICAvLyBJZiBhbiBhcnJheSB3YXMgcGFzc2VkIGluLCBhc3N1bWUgdGhhdCBpdCBp
cyBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzLgorICAgIGlmICggalF1ZXJ5LmlzQXJyYXkoIGEg
KSB8fCAoIGEuanF1ZXJ5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggYSApICkgKSB7CisKKyAg
ICAgICAgLy8gU2VyaWFsaXplIHRoZSBmb3JtIGVsZW1lbnRzCisgICAgICAgIGpRdWVyeS5lYWNo
KCBhLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGFkZCggdGhpcy5uYW1lLCB0aGlzLnZhbHVl
ICk7CisgICAgICAgIH0gKTsKKworICAgIH0gZWxzZSB7CisKKyAgICAgICAgLy8gSWYgdHJhZGl0
aW9uYWwsIGVuY29kZSB0aGUgIm9sZCIgd2F5ICh0aGUgd2F5IDEuMy4yIG9yIG9sZGVyCisgICAg
ICAgIC8vIGRpZCBpdCksIG90aGVyd2lzZSBlbmNvZGUgcGFyYW1zIHJlY3Vyc2l2ZWx5LgorICAg
ICAgICBmb3IgKCBwcmVmaXggaW4gYSApIHsKKyAgICAgICAgICAgIGJ1aWxkUGFyYW1zKCBwcmVm
aXgsIGFbIHByZWZpeCBdLCB0cmFkaXRpb25hbCwgYWRkICk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdGluZyBzZXJpYWxpemF0aW9uCisgICAgcmV0dXJuIHMu
am9pbiggIiYiICk7Cit9OworCitqUXVlcnkuZm4uZXh0ZW5kKCB7CisgICAgc2VyaWFsaXplOiBm
dW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5wYXJhbSggdGhpcy5zZXJpYWxpemVB
cnJheSgpICk7CisgICAgfSwKKyAgICBzZXJpYWxpemVBcnJheTogZnVuY3Rpb24oKSB7CisgICAg
ICAgIHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7CisKKyAgICAgICAgICAgIC8vIENhbiBh
ZGQgcHJvcEhvb2sgZm9yICJlbGVtZW50cyIgdG8gZmlsdGVyIG9yIGFkZCBmb3JtIGVsZW1lbnRz
CisgICAgICAgICAgICB2YXIgZWxlbWVudHMgPSBqUXVlcnkucHJvcCggdGhpcywgImVsZW1lbnRz
IiApOworICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRzID8galF1ZXJ5Lm1ha2VBcnJheSggZWxl
bWVudHMgKSA6IHRoaXM7CisgICAgICAgIH0gKQorICAgICAgICAuZmlsdGVyKCBmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgIHZhciB0eXBlID0gdGhpcy50eXBlOworCisgICAgICAgICAgICAvLyBV
c2UgLmlzKCAiOmRpc2FibGVkIiApIHNvIHRoYXQgZmllbGRzZXRbZGlzYWJsZWRdIHdvcmtzCisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5uYW1lICYmICFqUXVlcnkoIHRoaXMgKS5pcyggIjpkaXNh
YmxlZCIgKSAmJgorICAgICAgICAgICAgICAgIHJzdWJtaXR0YWJsZS50ZXN0KCB0aGlzLm5vZGVO
YW1lICkgJiYgIXJzdWJtaXR0ZXJUeXBlcy50ZXN0KCB0eXBlICkgJiYKKyAgICAgICAgICAgICAg
ICAoIHRoaXMuY2hlY2tlZCB8fCAhcmNoZWNrYWJsZVR5cGUudGVzdCggdHlwZSApICk7CisgICAg
ICAgIH0gKQorICAgICAgICAubWFwKCBmdW5jdGlvbiggaSwgZWxlbSApIHsKKyAgICAgICAgICAg
IHZhciB2YWwgPSBqUXVlcnkoIHRoaXMgKS52YWwoKTsKKworICAgICAgICAgICAgaWYgKCB2YWwg
PT0gbnVsbCApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNBcnJheSggdmFsICkgKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbCApIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2Uo
IHJDUkxGLCAiXHJcbiIgKSB9OworICAgICAgICAgICAgICAgIH0gKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgcmV0dXJuIHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxh
Y2UoIHJDUkxGLCAiXHJcbiIgKSB9OworICAgICAgICB9ICkuZ2V0KCk7CisgICAgfQorfSApOwor
CisKK3ZhcgorICAgIHIyMCA9IC8lMjAvZywKKyAgICByaGFzaCA9IC8jLiokLywKKyAgICByYW50
aUNhY2hlID0gLyhbPyZdKV89W14mXSovLAorICAgIHJoZWFkZXJzID0gL14oLio/KTpbIFx0XSoo
W15cclxuXSopJC9tZywKKworICAgIC8vICM3NjUzLCAjODEyNSwgIzgxNTI6IGxvY2FsIHByb3Rv
Y29sIGRldGVjdGlvbgorICAgIHJsb2NhbFByb3RvY29sID0gL14oPzphYm91dHxhcHB8YXBwLXN0
b3JhZ2V8ListZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8sCisgICAgcm5vQ29udGVudCA9
IC9eKD86R0VUfEhFQUQpJC8sCisgICAgcnByb3RvY29sID0gL15cL1wvLywKKworICAgIC8qIFBy
ZWZpbHRlcnMKKyAgICAgKiAxKSBUaGV5IGFyZSB1c2VmdWwgdG8gaW50cm9kdWNlIGN1c3RvbSBk
YXRhVHlwZXMgKHNlZSBhamF4L2pzb25wLmpzIGZvciBhbiBleGFtcGxlKQorICAgICAqIDIpIFRo
ZXNlIGFyZSBjYWxsZWQ6CisgICAgICogICAgLSBCRUZPUkUgYXNraW5nIGZvciBhIHRyYW5zcG9y
dAorICAgICAqICAgIC0gQUZURVIgcGFyYW0gc2VyaWFsaXphdGlvbiAocy5kYXRhIGlzIGEgc3Ry
aW5nIGlmIHMucHJvY2Vzc0RhdGEgaXMgdHJ1ZSkKKyAgICAgKiAzKSBrZXkgaXMgdGhlIGRhdGFU
eXBlCisgICAgICogNCkgdGhlIGNhdGNoYWxsIHN5bWJvbCAiKiIgY2FuIGJlIHVzZWQKKyAgICAg
KiA1KSBleGVjdXRpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhF
TiBjb250aW51ZSBkb3duIHRvICIqIiBpZiBuZWVkZWQKKyAgICAgKi8KKyAgICBwcmVmaWx0ZXJz
ID0ge30sCisKKyAgICAvKiBUcmFuc3BvcnRzIGJpbmRpbmdzCisgICAgICogMSkga2V5IGlzIHRo
ZSBkYXRhVHlwZQorICAgICAqIDIpIHRoZSBjYXRjaGFsbCBzeW1ib2wgIioiIGNhbiBiZSB1c2Vk
CisgICAgICogMykgc2VsZWN0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUg
YW5kIFRIRU4gZ28gdG8gIioiIGlmIG5lZWRlZAorICAgICAqLworICAgIHRyYW5zcG9ydHMgPSB7
fSwKKworICAgIC8vIEF2b2lkIGNvbW1lbnQtcHJvbG9nIGNoYXIgc2VxdWVuY2UgKCMxMDA5OCk7
IG11c3QgYXBwZWFzZSBsaW50IGFuZCBldmFkZSBjb21wcmVzc2lvbgorICAgIGFsbFR5cGVzID0g
IiovIi5jb25jYXQoICIqIiApLAorCisgICAgLy8gQW5jaG9yIHRhZyBmb3IgcGFyc2luZyB0aGUg
ZG9jdW1lbnQgb3JpZ2luCisgICAgb3JpZ2luQW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCggImEiICk7CisgICAgb3JpZ2luQW5jaG9yLmhyZWYgPSBsb2NhdGlvbi5ocmVmOworCisvLyBC
YXNlICJjb25zdHJ1Y3RvciIgZm9yIGpRdWVyeS5hamF4UHJlZmlsdGVyIGFuZCBqUXVlcnkuYWph
eFRyYW5zcG9ydAorZnVuY3Rpb24gYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1
cmUgKSB7CisKKyAgICAvLyBkYXRhVHlwZUV4cHJlc3Npb24gaXMgb3B0aW9uYWwgYW5kIGRlZmF1
bHRzIHRvICIqIgorICAgIHJldHVybiBmdW5jdGlvbiggZGF0YVR5cGVFeHByZXNzaW9uLCBmdW5j
ICkgeworCisgICAgICAgIGlmICggdHlwZW9mIGRhdGFUeXBlRXhwcmVzc2lvbiAhPT0gInN0cmlu
ZyIgKSB7CisgICAgICAgICAgICBmdW5jID0gZGF0YVR5cGVFeHByZXNzaW9uOworICAgICAgICAg
ICAgZGF0YVR5cGVFeHByZXNzaW9uID0gIioiOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGRh
dGFUeXBlLAorICAgICAgICAgICAgaSA9IDAsCisgICAgICAgICAgICBkYXRhVHlwZXMgPSBkYXRh
VHlwZUV4cHJlc3Npb24udG9Mb3dlckNhc2UoKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtd
OworCisgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGZ1bmMgKSApIHsKKworICAgICAg
ICAgICAgLy8gRm9yIGVhY2ggZGF0YVR5cGUgaW4gdGhlIGRhdGFUeXBlRXhwcmVzc2lvbgorICAg
ICAgICAgICAgd2hpbGUgKCAoIGRhdGFUeXBlID0gZGF0YVR5cGVzWyBpKysgXSApICkgeworCisg
ICAgICAgICAgICAgICAgLy8gUHJlcGVuZCBpZiByZXF1ZXN0ZWQKKyAgICAgICAgICAgICAgICBp
ZiAoIGRhdGFUeXBlWyAwIF0gPT09ICIrIiApIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YVR5
cGUgPSBkYXRhVHlwZS5zbGljZSggMSApIHx8ICIqIjsKKyAgICAgICAgICAgICAgICAgICAgKCBz
dHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10gKS51bnNo
aWZ0KCBmdW5jICk7CisKKyAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UgYXBwZW5kCisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgKCBzdHJ1Y3R1cmVbIGRh
dGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10gKS5wdXNoKCBmdW5jICk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKK30KKwor
Ly8gQmFzZSBpbnNwZWN0aW9uIGZ1bmN0aW9uIGZvciBwcmVmaWx0ZXJzIGFuZCB0cmFuc3BvcnRz
CitmdW5jdGlvbiBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlLCBvcHRp
b25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSICkgeworCisgICAgdmFyIGluc3BlY3RlZCA9IHt9
LAorICAgICAgICBzZWVraW5nVHJhbnNwb3J0ID0gKCBzdHJ1Y3R1cmUgPT09IHRyYW5zcG9ydHMg
KTsKKworICAgIGZ1bmN0aW9uIGluc3BlY3QoIGRhdGFUeXBlICkgeworICAgICAgICB2YXIgc2Vs
ZWN0ZWQ7CisgICAgICAgIGluc3BlY3RlZFsgZGF0YVR5cGUgXSA9IHRydWU7CisgICAgICAgIGpR
dWVyeS5lYWNoKCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10sIGZ1bmN0aW9uKCBfLCBwcmVm
aWx0ZXJPckZhY3RvcnkgKSB7CisgICAgICAgICAgICB2YXIgZGF0YVR5cGVPclRyYW5zcG9ydCA9
IHByZWZpbHRlck9yRmFjdG9yeSggb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApOwor
ICAgICAgICAgICAgaWYgKCB0eXBlb2YgZGF0YVR5cGVPclRyYW5zcG9ydCA9PT0gInN0cmluZyIg
JiYKKyAgICAgICAgICAgICAgICAhc2Vla2luZ1RyYW5zcG9ydCAmJiAhaW5zcGVjdGVkWyBkYXRh
VHlwZU9yVHJhbnNwb3J0IF0gKSB7CisKKyAgICAgICAgICAgICAgICBvcHRpb25zLmRhdGFUeXBl
cy51bnNoaWZ0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7CisgICAgICAgICAgICAgICAgaW5zcGVj
dCggZGF0YVR5cGVPclRyYW5zcG9ydCApOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAoIHNlZWtpbmdUcmFuc3BvcnQgKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuICEoIHNlbGVjdGVkID0gZGF0YVR5cGVPclRyYW5zcG9ydCApOworICAgICAg
ICAgICAgfQorICAgICAgICB9ICk7CisgICAgICAgIHJldHVybiBzZWxlY3RlZDsKKyAgICB9CisK
KyAgICByZXR1cm4gaW5zcGVjdCggb3B0aW9ucy5kYXRhVHlwZXNbIDAgXSApIHx8ICFpbnNwZWN0
ZWRbICIqIiBdICYmIGluc3BlY3QoICIqIiApOworfQorCisvLyBBIHNwZWNpYWwgZXh0ZW5kIGZv
ciBhamF4IG9wdGlvbnMKKy8vIHRoYXQgdGFrZXMgImZsYXQiIG9wdGlvbnMgKG5vdCB0byBiZSBk
ZWVwIGV4dGVuZGVkKQorLy8gRml4ZXMgIzk4ODcKK2Z1bmN0aW9uIGFqYXhFeHRlbmQoIHRhcmdl
dCwgc3JjICkgeworICAgIHZhciBrZXksIGRlZXAsCisgICAgICAgIGZsYXRPcHRpb25zID0galF1
ZXJ5LmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9ucyB8fCB7fTsKKworICAgIGZvciAoIGtleSBpbiBz
cmMgKSB7CisgICAgICAgIGlmICggc3JjWyBrZXkgXSAhPT0gdW5kZWZpbmVkICkgeworICAgICAg
ICAgICAgKCBmbGF0T3B0aW9uc1sga2V5IF0gPyB0YXJnZXQgOiAoIGRlZXAgfHwgKCBkZWVwID0g
e30gKSApIClbIGtleSBdID0gc3JjWyBrZXkgXTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAo
IGRlZXAgKSB7CisgICAgICAgIGpRdWVyeS5leHRlbmQoIHRydWUsIHRhcmdldCwgZGVlcCApOwor
ICAgIH0KKworICAgIHJldHVybiB0YXJnZXQ7Cit9CisKKy8qIEhhbmRsZXMgcmVzcG9uc2VzIHRv
IGFuIGFqYXggcmVxdWVzdDoKKyAqIC0gZmluZHMgdGhlIHJpZ2h0IGRhdGFUeXBlIChtZWRpYXRl
cyBiZXR3ZWVuIGNvbnRlbnQtdHlwZSBhbmQgZXhwZWN0ZWQgZGF0YVR5cGUpCisgKiAtIHJldHVy
bnMgdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2UKKyAqLworZnVuY3Rpb24gYWpheEhhbmRsZVJl
c3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApIHsKKworICAgIHZhciBjdCwgdHlwZSwgZmlu
YWxEYXRhVHlwZSwgZmlyc3REYXRhVHlwZSwKKyAgICAgICAgY29udGVudHMgPSBzLmNvbnRlbnRz
LAorICAgICAgICBkYXRhVHlwZXMgPSBzLmRhdGFUeXBlczsKKworICAgIC8vIFJlbW92ZSBhdXRv
IGRhdGFUeXBlIGFuZCBnZXQgY29udGVudC10eXBlIGluIHRoZSBwcm9jZXNzCisgICAgd2hpbGUg
KCBkYXRhVHlwZXNbIDAgXSA9PT0gIioiICkgeworICAgICAgICBkYXRhVHlwZXMuc2hpZnQoKTsK
KyAgICAgICAgaWYgKCBjdCA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgY3QgPSBzLm1p
bWVUeXBlIHx8IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCAiQ29udGVudC1UeXBlIiApOworICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gQ2hlY2sgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEga25v
d24gY29udGVudC10eXBlCisgICAgaWYgKCBjdCApIHsKKyAgICAgICAgZm9yICggdHlwZSBpbiBj
b250ZW50cyApIHsKKyAgICAgICAgICAgIGlmICggY29udGVudHNbIHR5cGUgXSAmJiBjb250ZW50
c1sgdHlwZSBdLnRlc3QoIGN0ICkgKSB7CisgICAgICAgICAgICAgICAgZGF0YVR5cGVzLnVuc2hp
ZnQoIHR5cGUgKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGEgcmVzcG9uc2Ug
Zm9yIHRoZSBleHBlY3RlZCBkYXRhVHlwZQorICAgIGlmICggZGF0YVR5cGVzWyAwIF0gaW4gcmVz
cG9uc2VzICkgeworICAgICAgICBmaW5hbERhdGFUeXBlID0gZGF0YVR5cGVzWyAwIF07CisgICAg
fSBlbHNlIHsKKworICAgICAgICAvLyBUcnkgY29udmVydGlibGUgZGF0YVR5cGVzCisgICAgICAg
IGZvciAoIHR5cGUgaW4gcmVzcG9uc2VzICkgeworICAgICAgICAgICAgaWYgKCAhZGF0YVR5cGVz
WyAwIF0gfHwgcy5jb252ZXJ0ZXJzWyB0eXBlICsgIiAiICsgZGF0YVR5cGVzWyAwIF0gXSApIHsK
KyAgICAgICAgICAgICAgICBmaW5hbERhdGFUeXBlID0gdHlwZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICggIWZpcnN0RGF0YVR5cGUgKSB7
CisgICAgICAgICAgICAgICAgZmlyc3REYXRhVHlwZSA9IHR5cGU7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBPciBqdXN0IHVzZSBmaXJzdCBvbmUKKyAgICAgICAgZmlu
YWxEYXRhVHlwZSA9IGZpbmFsRGF0YVR5cGUgfHwgZmlyc3REYXRhVHlwZTsKKyAgICB9CisKKyAg
ICAvLyBJZiB3ZSBmb3VuZCBhIGRhdGFUeXBlCisgICAgLy8gV2UgYWRkIHRoZSBkYXRhVHlwZSB0
byB0aGUgbGlzdCBpZiBuZWVkZWQKKyAgICAvLyBhbmQgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5n
IHJlc3BvbnNlCisgICAgaWYgKCBmaW5hbERhdGFUeXBlICkgeworICAgICAgICBpZiAoIGZpbmFs
RGF0YVR5cGUgIT09IGRhdGFUeXBlc1sgMCBdICkgeworICAgICAgICAgICAgZGF0YVR5cGVzLnVu
c2hpZnQoIGZpbmFsRGF0YVR5cGUgKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzcG9u
c2VzWyBmaW5hbERhdGFUeXBlIF07CisgICAgfQorfQorCisvKiBDaGFpbiBjb252ZXJzaW9ucyBn
aXZlbiB0aGUgcmVxdWVzdCBhbmQgdGhlIG9yaWdpbmFsIHJlc3BvbnNlCisgKiBBbHNvIHNldHMg
dGhlIHJlc3BvbnNlWFhYIGZpZWxkcyBvbiB0aGUganFYSFIgaW5zdGFuY2UKKyAqLworZnVuY3Rp
b24gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNlLCBqcVhIUiwgaXNTdWNjZXNzICkgeworICAgIHZh
ciBjb252MiwgY3VycmVudCwgY29udiwgdG1wLCBwcmV2LAorICAgICAgICBjb252ZXJ0ZXJzID0g
e30sCisKKyAgICAgICAgLy8gV29yayB3aXRoIGEgY29weSBvZiBkYXRhVHlwZXMgaW4gY2FzZSB3
ZSBuZWVkIHRvIG1vZGlmeSBpdCBmb3IgY29udmVyc2lvbgorICAgICAgICBkYXRhVHlwZXMgPSBz
LmRhdGFUeXBlcy5zbGljZSgpOworCisgICAgLy8gQ3JlYXRlIGNvbnZlcnRlcnMgbWFwIHdpdGgg
bG93ZXJjYXNlZCBrZXlzCisgICAgaWYgKCBkYXRhVHlwZXNbIDEgXSApIHsKKyAgICAgICAgZm9y
ICggY29udiBpbiBzLmNvbnZlcnRlcnMgKSB7CisgICAgICAgICAgICBjb252ZXJ0ZXJzWyBjb252
LnRvTG93ZXJDYXNlKCkgXSA9IHMuY29udmVydGVyc1sgY29udiBdOworICAgICAgICB9CisgICAg
fQorCisgICAgY3VycmVudCA9IGRhdGFUeXBlcy5zaGlmdCgpOworCisgICAgLy8gQ29udmVydCB0
byBlYWNoIHNlcXVlbnRpYWwgZGF0YVR5cGUKKyAgICB3aGlsZSAoIGN1cnJlbnQgKSB7CisKKyAg
ICAgICAgaWYgKCBzLnJlc3BvbnNlRmllbGRzWyBjdXJyZW50IF0gKSB7CisgICAgICAgICAgICBq
cVhIUlsgcy5yZXNwb25zZUZpZWxkc1sgY3VycmVudCBdIF0gPSByZXNwb25zZTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIEFwcGx5IHRoZSBkYXRhRmlsdGVyIGlmIHByb3ZpZGVkCisgICAgICAg
IGlmICggIXByZXYgJiYgaXNTdWNjZXNzICYmIHMuZGF0YUZpbHRlciApIHsKKyAgICAgICAgICAg
IHJlc3BvbnNlID0gcy5kYXRhRmlsdGVyKCByZXNwb25zZSwgcy5kYXRhVHlwZSApOworICAgICAg
ICB9CisKKyAgICAgICAgcHJldiA9IGN1cnJlbnQ7CisgICAgICAgIGN1cnJlbnQgPSBkYXRhVHlw
ZXMuc2hpZnQoKTsKKworICAgICAgICBpZiAoIGN1cnJlbnQgKSB7CisKKyAgICAgICAgICAgIC8v
IFRoZXJlJ3Mgb25seSB3b3JrIHRvIGRvIGlmIGN1cnJlbnQgZGF0YVR5cGUgaXMgbm9uLWF1dG8K
KyAgICAgICAgICAgIGlmICggY3VycmVudCA9PT0gIioiICkgeworCisgICAgICAgICAgICAgICAg
Y3VycmVudCA9IHByZXY7CisKKyAgICAgICAgICAgIC8vIENvbnZlcnQgcmVzcG9uc2UgaWYgcHJl
diBkYXRhVHlwZSBpcyBub24tYXV0byBhbmQgZGlmZmVycyBmcm9tIGN1cnJlbnQKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoIHByZXYgIT09ICIqIiAmJiBwcmV2ICE9PSBjdXJyZW50ICkgeworCisg
ICAgICAgICAgICAgICAgLy8gU2VlayBhIGRpcmVjdCBjb252ZXJ0ZXIKKyAgICAgICAgICAgICAg
ICBjb252ID0gY29udmVydGVyc1sgcHJldiArICIgIiArIGN1cnJlbnQgXSB8fCBjb252ZXJ0ZXJz
WyAiKiAiICsgY3VycmVudCBdOworCisgICAgICAgICAgICAgICAgLy8gSWYgbm9uZSBmb3VuZCwg
c2VlayBhIHBhaXIKKyAgICAgICAgICAgICAgICBpZiAoICFjb252ICkgeworICAgICAgICAgICAg
ICAgICAgICBmb3IgKCBjb252MiBpbiBjb252ZXJ0ZXJzICkgeworCisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBJZiBjb252MiBvdXRwdXRzIGN1cnJlbnQKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRtcCA9IGNvbnYyLnNwbGl0KCAiICIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggdG1wWyAxIF0gPT09IGN1cnJlbnQgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBJZiBwcmV2IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYWNjZXB0ZWQgaW5wdXQKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb252ID0gY29udmVydGVyc1sgcHJldiArICIgIiArIHRtcFsg
MCBdIF0gfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydGVyc1sgIiog
IiArIHRtcFsgMCBdIF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjb252ICkg
eworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbmRlbnNlIGVxdWl2YWxl
bmNlIGNvbnZlcnRlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjb252
ID09PSB0cnVlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udiA9
IGNvbnZlcnRlcnNbIGNvbnYyIF07CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gT3RoZXJ3aXNlLCBpbnNlcnQgdGhlIGludGVybWVkaWF0ZSBkYXRhVHlwZQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBjb252ZXJ0ZXJzWyBjb252MiBdICE9
PSB0cnVlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9
IHRtcFsgMCBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGVz
LnVuc2hpZnQoIHRtcFsgMSBdICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gQXBwbHkgY29u
dmVydGVyIChpZiBub3QgYW4gZXF1aXZhbGVuY2UpCisgICAgICAgICAgICAgICAgaWYgKCBjb252
ICE9PSB0cnVlICkgeworCisgICAgICAgICAgICAgICAgICAgIC8vIFVubGVzcyBlcnJvcnMgYXJl
IGFsbG93ZWQgdG8gYnViYmxlLCBjYXRjaCBhbmQgcmV0dXJuIHRoZW0KKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCBjb252ICYmIHMudGhyb3dzICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
cmVzcG9uc2UgPSBjb252KCByZXNwb25zZSApOworICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9IGNhdGNoICggZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTogInBhcnNlcmVycm9yIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGNvbnYgPyBlIDogIk5vIGNvbnZl
cnNpb24gZnJvbSAiICsgcHJldiArICIgdG8gIiArIGN1cnJlbnQKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIHsgc3RhdGU6ICJzdWNjZXNzIiwgZGF0YTogcmVzcG9uc2UgfTsKK30K
KworalF1ZXJ5LmV4dGVuZCggeworCisgICAgLy8gQ291bnRlciBmb3IgaG9sZGluZyB0aGUgbnVt
YmVyIG9mIGFjdGl2ZSBxdWVyaWVzCisgICAgYWN0aXZlOiAwLAorCisgICAgLy8gTGFzdC1Nb2Rp
ZmllZCBoZWFkZXIgY2FjaGUgZm9yIG5leHQgcmVxdWVzdAorICAgIGxhc3RNb2RpZmllZDoge30s
CisgICAgZXRhZzoge30sCisKKyAgICBhamF4U2V0dGluZ3M6IHsKKyAgICAgICAgdXJsOiBsb2Nh
dGlvbi5ocmVmLAorICAgICAgICB0eXBlOiAiR0VUIiwKKyAgICAgICAgaXNMb2NhbDogcmxvY2Fs
UHJvdG9jb2wudGVzdCggbG9jYXRpb24ucHJvdG9jb2wgKSwKKyAgICAgICAgZ2xvYmFsOiB0cnVl
LAorICAgICAgICBwcm9jZXNzRGF0YTogdHJ1ZSwKKyAgICAgICAgYXN5bmM6IHRydWUsCisgICAg
ICAgIGNvbnRlbnRUeXBlOiAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFy
c2V0PVVURi04IiwKKworICAgICAgICAvKgorICAgICAgICB0aW1lb3V0OiAwLAorICAgICAgICBk
YXRhOiBudWxsLAorICAgICAgICBkYXRhVHlwZTogbnVsbCwKKyAgICAgICAgdXNlcm5hbWU6IG51
bGwsCisgICAgICAgIHBhc3N3b3JkOiBudWxsLAorICAgICAgICBjYWNoZTogbnVsbCwKKyAgICAg
ICAgdGhyb3dzOiBmYWxzZSwKKyAgICAgICAgdHJhZGl0aW9uYWw6IGZhbHNlLAorICAgICAgICBo
ZWFkZXJzOiB7fSwKKyAgICAgICAgKi8KKworICAgICAgICBhY2NlcHRzOiB7CisgICAgICAgICAg
ICAiKiI6IGFsbFR5cGVzLAorICAgICAgICAgICAgdGV4dDogInRleHQvcGxhaW4iLAorICAgICAg
ICAgICAgaHRtbDogInRleHQvaHRtbCIsCisgICAgICAgICAgICB4bWw6ICJhcHBsaWNhdGlvbi94
bWwsIHRleHQveG1sIiwKKyAgICAgICAgICAgIGpzb246ICJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0
L2phdmFzY3JpcHQiCisgICAgICAgIH0sCisKKyAgICAgICAgY29udGVudHM6IHsKKyAgICAgICAg
ICAgIHhtbDogL1xieG1sXGIvLAorICAgICAgICAgICAgaHRtbDogL1xiaHRtbC8sCisgICAgICAg
ICAgICBqc29uOiAvXGJqc29uXGIvCisgICAgICAgIH0sCisKKyAgICAgICAgcmVzcG9uc2VGaWVs
ZHM6IHsKKyAgICAgICAgICAgIHhtbDogInJlc3BvbnNlWE1MIiwKKyAgICAgICAgICAgIHRleHQ6
ICJyZXNwb25zZVRleHQiLAorICAgICAgICAgICAganNvbjogInJlc3BvbnNlSlNPTiIKKyAgICAg
ICAgfSwKKworICAgICAgICAvLyBEYXRhIGNvbnZlcnRlcnMKKyAgICAgICAgLy8gS2V5cyBzZXBh
cmF0ZSBzb3VyY2UgKG9yIGNhdGNoYWxsICIqIikgYW5kIGRlc3RpbmF0aW9uIHR5cGVzIHdpdGgg
YSBzaW5nbGUgc3BhY2UKKyAgICAgICAgY29udmVydGVyczogeworCisgICAgICAgICAgICAvLyBD
b252ZXJ0IGFueXRoaW5nIHRvIHRleHQKKyAgICAgICAgICAgICIqIHRleHQiOiBTdHJpbmcsCisK
KyAgICAgICAgICAgIC8vIFRleHQgdG8gaHRtbCAodHJ1ZSA9IG5vIHRyYW5zZm9ybWF0aW9uKQor
ICAgICAgICAgICAgInRleHQgaHRtbCI6IHRydWUsCisKKyAgICAgICAgICAgIC8vIEV2YWx1YXRl
IHRleHQgYXMgYSBqc29uIGV4cHJlc3Npb24KKyAgICAgICAgICAgICJ0ZXh0IGpzb24iOiBKU09O
LnBhcnNlLAorCisgICAgICAgICAgICAvLyBQYXJzZSB0ZXh0IGFzIHhtbAorICAgICAgICAgICAg
InRleHQgeG1sIjogalF1ZXJ5LnBhcnNlWE1MCisgICAgICAgIH0sCisKKyAgICAgICAgLy8gRm9y
IG9wdGlvbnMgdGhhdCBzaG91bGRuJ3QgYmUgZGVlcCBleHRlbmRlZDoKKyAgICAgICAgLy8geW91
IGNhbiBhZGQgeW91ciBvd24gY3VzdG9tIG9wdGlvbnMgaGVyZSBpZgorICAgICAgICAvLyBhbmQg
d2hlbiB5b3UgY3JlYXRlIG9uZSB0aGF0IHNob3VsZG4ndCBiZQorICAgICAgICAvLyBkZWVwIGV4
dGVuZGVkIChzZWUgYWpheEV4dGVuZCkKKyAgICAgICAgZmxhdE9wdGlvbnM6IHsKKyAgICAgICAg
ICAgIHVybDogdHJ1ZSwKKyAgICAgICAgICAgIGNvbnRleHQ6IHRydWUKKyAgICAgICAgfQorICAg
IH0sCisKKyAgICAvLyBDcmVhdGVzIGEgZnVsbCBmbGVkZ2VkIHNldHRpbmdzIG9iamVjdCBpbnRv
IHRhcmdldAorICAgIC8vIHdpdGggYm90aCBhamF4U2V0dGluZ3MgYW5kIHNldHRpbmdzIGZpZWxk
cy4KKyAgICAvLyBJZiB0YXJnZXQgaXMgb21pdHRlZCwgd3JpdGVzIGludG8gYWpheFNldHRpbmdz
LgorICAgIGFqYXhTZXR1cDogZnVuY3Rpb24oIHRhcmdldCwgc2V0dGluZ3MgKSB7CisgICAgICAg
IHJldHVybiBzZXR0aW5ncyA/CisKKyAgICAgICAgICAgIC8vIEJ1aWxkaW5nIGEgc2V0dGluZ3Mg
b2JqZWN0CisgICAgICAgICAgICBhamF4RXh0ZW5kKCBhamF4RXh0ZW5kKCB0YXJnZXQsIGpRdWVy
eS5hamF4U2V0dGluZ3MgKSwgc2V0dGluZ3MgKSA6CisKKyAgICAgICAgICAgIC8vIEV4dGVuZGlu
ZyBhamF4U2V0dGluZ3MKKyAgICAgICAgICAgIGFqYXhFeHRlbmQoIGpRdWVyeS5hamF4U2V0dGlu
Z3MsIHRhcmdldCApOworICAgIH0sCisKKyAgICBhamF4UHJlZmlsdGVyOiBhZGRUb1ByZWZpbHRl
cnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMgKSwKKyAgICBhamF4VHJhbnNwb3J0OiBhZGRUb1By
ZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMgKSwKKworICAgIC8vIE1haW4gbWV0aG9k
CisgICAgYWpheDogZnVuY3Rpb24oIHVybCwgb3B0aW9ucyApIHsKKworICAgICAgICAvLyBJZiB1
cmwgaXMgYW4gb2JqZWN0LCBzaW11bGF0ZSBwcmUtMS41IHNpZ25hdHVyZQorICAgICAgICBpZiAo
IHR5cGVvZiB1cmwgPT09ICJvYmplY3QiICkgeworICAgICAgICAgICAgb3B0aW9ucyA9IHVybDsK
KyAgICAgICAgICAgIHVybCA9IHVuZGVmaW5lZDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZv
cmNlIG9wdGlvbnMgdG8gYmUgYW4gb2JqZWN0CisgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8
IHt9OworCisgICAgICAgIHZhciB0cmFuc3BvcnQsCisKKyAgICAgICAgICAgIC8vIFVSTCB3aXRo
b3V0IGFudGktY2FjaGUgcGFyYW0KKyAgICAgICAgICAgIGNhY2hlVVJMLAorCisgICAgICAgICAg
ICAvLyBSZXNwb25zZSBoZWFkZXJzCisgICAgICAgICAgICByZXNwb25zZUhlYWRlcnNTdHJpbmcs
CisgICAgICAgICAgICByZXNwb25zZUhlYWRlcnMsCisKKyAgICAgICAgICAgIC8vIHRpbWVvdXQg
aGFuZGxlCisgICAgICAgICAgICB0aW1lb3V0VGltZXIsCisKKyAgICAgICAgICAgIC8vIFVybCBj
bGVhbnVwIHZhcgorICAgICAgICAgICAgdXJsQW5jaG9yLAorCisgICAgICAgICAgICAvLyBSZXF1
ZXN0IHN0YXRlIChiZWNvbWVzIGZhbHNlIHVwb24gc2VuZCBhbmQgdHJ1ZSB1cG9uIGNvbXBsZXRp
b24pCisgICAgICAgICAgICBjb21wbGV0ZWQsCisKKyAgICAgICAgICAgIC8vIFRvIGtub3cgaWYg
Z2xvYmFsIGV2ZW50cyBhcmUgdG8gYmUgZGlzcGF0Y2hlZAorICAgICAgICAgICAgZmlyZUdsb2Jh
bHMsCisKKyAgICAgICAgICAgIC8vIExvb3AgdmFyaWFibGUKKyAgICAgICAgICAgIGksCisKKyAg
ICAgICAgICAgIC8vIHVuY2FjaGVkIHBhcnQgb2YgdGhlIHVybAorICAgICAgICAgICAgdW5jYWNo
ZWQsCisKKyAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgZmluYWwgb3B0aW9ucyBvYmplY3QKKyAg
ICAgICAgICAgIHMgPSBqUXVlcnkuYWpheFNldHVwKCB7fSwgb3B0aW9ucyApLAorCisgICAgICAg
ICAgICAvLyBDYWxsYmFja3MgY29udGV4dAorICAgICAgICAgICAgY2FsbGJhY2tDb250ZXh0ID0g
cy5jb250ZXh0IHx8IHMsCisKKyAgICAgICAgICAgIC8vIENvbnRleHQgZm9yIGdsb2JhbCBldmVu
dHMgaXMgY2FsbGJhY2tDb250ZXh0IGlmIGl0IGlzIGEgRE9NIG5vZGUgb3IgalF1ZXJ5IGNvbGxl
Y3Rpb24KKyAgICAgICAgICAgIGdsb2JhbEV2ZW50Q29udGV4dCA9IHMuY29udGV4dCAmJgorICAg
ICAgICAgICAgICAgICggY2FsbGJhY2tDb250ZXh0Lm5vZGVUeXBlIHx8IGNhbGxiYWNrQ29udGV4
dC5qcXVlcnkgKSA/CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeSggY2FsbGJhY2tDb250ZXh0
ICkgOgorICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQsCisKKyAgICAgICAgICAgIC8v
IERlZmVycmVkcworICAgICAgICAgICAgZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKSwKKyAg
ICAgICAgICAgIGNvbXBsZXRlRGVmZXJyZWQgPSBqUXVlcnkuQ2FsbGJhY2tzKCAib25jZSBtZW1v
cnkiICksCisKKyAgICAgICAgICAgIC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzCisgICAg
ICAgICAgICBzdGF0dXNDb2RlID0gcy5zdGF0dXNDb2RlIHx8IHt9LAorCisgICAgICAgICAgICAv
LyBIZWFkZXJzICh0aGV5IGFyZSBzZW50IGFsbCBhdCBvbmNlKQorICAgICAgICAgICAgcmVxdWVz
dEhlYWRlcnMgPSB7fSwKKyAgICAgICAgICAgIHJlcXVlc3RIZWFkZXJzTmFtZXMgPSB7fSwKKwor
ICAgICAgICAgICAgLy8gRGVmYXVsdCBhYm9ydCBtZXNzYWdlCisgICAgICAgICAgICBzdHJBYm9y
dCA9ICJjYW5jZWxlZCIsCisKKyAgICAgICAgICAgIC8vIEZha2UgeGhyCisgICAgICAgICAgICBq
cVhIUiA9IHsKKyAgICAgICAgICAgICAgICByZWFkeVN0YXRlOiAwLAorCisgICAgICAgICAgICAg
ICAgLy8gQnVpbGRzIGhlYWRlcnMgaGFzaHRhYmxlIGlmIG5lZWRlZAorICAgICAgICAgICAgICAg
IGdldFJlc3BvbnNlSGVhZGVyOiBmdW5jdGlvbigga2V5ICkgeworICAgICAgICAgICAgICAgICAg
ICB2YXIgbWF0Y2g7CisgICAgICAgICAgICAgICAgICAgIGlmICggY29tcGxldGVkICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCAhcmVzcG9uc2VIZWFkZXJzICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVycyA9IHt9OworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdoaWxlICggKCBtYXRjaCA9IHJoZWFkZXJzLmV4ZWMoIHJlc3BvbnNlSGVh
ZGVyc1N0cmluZyApICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Bv
bnNlSGVhZGVyc1sgbWF0Y2hbIDEgXS50b0xvd2VyQ2FzZSgpIF0gPSBtYXRjaFsgMiBdOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gcmVzcG9uc2VIZWFkZXJzWyBrZXkudG9Mb3dl
ckNhc2UoKSBdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBtYXRjaCA9PSBudWxsID8gbnVsbCA6IG1hdGNoOworICAgICAgICAgICAgICAgIH0sCisK
KyAgICAgICAgICAgICAgICAvLyBSYXcgc3RyaW5nCisgICAgICAgICAgICAgICAgZ2V0QWxsUmVz
cG9uc2VIZWFkZXJzOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNv
bXBsZXRlZCA/IHJlc3BvbnNlSGVhZGVyc1N0cmluZyA6IG51bGw7CisgICAgICAgICAgICAgICAg
fSwKKworICAgICAgICAgICAgICAgIC8vIENhY2hlcyB0aGUgaGVhZGVyCisgICAgICAgICAgICAg
ICAgc2V0UmVxdWVzdEhlYWRlcjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoIGNvbXBsZXRlZCA9PSBudWxsICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgbmFtZSA9IHJlcXVlc3RIZWFkZXJzTmFtZXNbIG5hbWUudG9Mb3dlckNhc2UoKSBdID0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SGVhZGVyc05hbWVzWyBuYW1lLnRv
TG93ZXJDYXNlKCkgXSB8fCBuYW1lOworICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEhl
YWRlcnNbIG5hbWUgXSA9IHZhbHVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAg
ICAgICAvLyBPdmVycmlkZXMgcmVzcG9uc2UgY29udGVudC10eXBlIGhlYWRlcgorICAgICAgICAg
ICAgICAgIG92ZXJyaWRlTWltZVR5cGU6IGZ1bmN0aW9uKCB0eXBlICkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoIGNvbXBsZXRlZCA9PSBudWxsICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcy5taW1lVHlwZSA9IHR5cGU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAg
ICAgIC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzCisgICAgICAgICAgICAgICAgc3RhdHVz
Q29kZTogZnVuY3Rpb24oIG1hcCApIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGU7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICggbWFwICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBjb21wbGV0ZWQgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFeGVj
dXRlIHRoZSBhcHByb3ByaWF0ZSBjYWxsYmFja3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqcVhIUi5hbHdheXMoIG1hcFsganFYSFIuc3RhdHVzIF0gKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMYXp5LWFk
ZCB0aGUgbmV3IGNhbGxiYWNrcyBpbiBhIHdheSB0aGF0IHByZXNlcnZlcyBvbGQgb25lcworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGNvZGUgaW4gbWFwICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNDb2RlWyBjb2RlIF0gPSBbIHN0YXR1c0NvZGVb
IGNvZGUgXSwgbWFwWyBjb2RlIF0gXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAg
ICAgICAgIC8vIENhbmNlbCB0aGUgcmVxdWVzdAorICAgICAgICAgICAgICAgIGFib3J0OiBmdW5j
dGlvbiggc3RhdHVzVGV4dCApIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGZpbmFsVGV4dCA9
IHN0YXR1c1RleHQgfHwgc3RyQWJvcnQ7CisgICAgICAgICAgICAgICAgICAgIGlmICggdHJhbnNw
b3J0ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0LmFib3J0KCBmaW5hbFRl
eHQgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkb25lKCAw
LCBmaW5hbFRleHQgKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfTsKKworICAgICAgICAvLyBBdHRhY2ggZGVmZXJyZWRz
CisgICAgICAgIGRlZmVycmVkLnByb21pc2UoIGpxWEhSICk7CisKKyAgICAgICAgLy8gQWRkIHBy
b3RvY29sIGlmIG5vdCBwcm92aWRlZCAocHJlZmlsdGVycyBtaWdodCBleHBlY3QgaXQpCisgICAg
ICAgIC8vIEhhbmRsZSBmYWxzeSB1cmwgaW4gdGhlIHNldHRpbmdzIG9iamVjdCAoIzEwMDkzOiBj
b25zaXN0ZW5jeSB3aXRoIG9sZCBzaWduYXR1cmUpCisgICAgICAgIC8vIFdlIGFsc28gdXNlIHRo
ZSB1cmwgcGFyYW1ldGVyIGlmIGF2YWlsYWJsZQorICAgICAgICBzLnVybCA9ICggKCB1cmwgfHwg
cy51cmwgfHwgbG9jYXRpb24uaHJlZiApICsgIiIgKQorICAgICAgICAgICAgLnJlcGxhY2UoIHJw
cm90b2NvbCwgbG9jYXRpb24ucHJvdG9jb2wgKyAiLy8iICk7CisKKyAgICAgICAgLy8gQWxpYXMg
bWV0aG9kIG9wdGlvbiB0byB0eXBlIGFzIHBlciB0aWNrZXQgIzEyMDA0CisgICAgICAgIHMudHlw
ZSA9IG9wdGlvbnMubWV0aG9kIHx8IG9wdGlvbnMudHlwZSB8fCBzLm1ldGhvZCB8fCBzLnR5cGU7
CisKKyAgICAgICAgLy8gRXh0cmFjdCBkYXRhVHlwZXMgbGlzdAorICAgICAgICBzLmRhdGFUeXBl
cyA9ICggcy5kYXRhVHlwZSB8fCAiKiIgKS50b0xvd2VyQ2FzZSgpLm1hdGNoKCBybm90aHRtbHdo
aXRlICkgfHwgWyAiIiBdOworCisgICAgICAgIC8vIEEgY3Jvc3MtZG9tYWluIHJlcXVlc3QgaXMg
aW4gb3JkZXIgd2hlbiB0aGUgb3JpZ2luIGRvZXNuJ3QgbWF0Y2ggdGhlIGN1cnJlbnQgb3JpZ2lu
LgorICAgICAgICBpZiAoIHMuY3Jvc3NEb21haW4gPT0gbnVsbCApIHsKKyAgICAgICAgICAgIHVy
bEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJhIiApOworCisgICAgICAgICAgICAv
LyBTdXBwb3J0OiBJRSA8PTggLSAxMSwgRWRnZSAxMiAtIDEzCisgICAgICAgICAgICAvLyBJRSB0
aHJvd3MgZXhjZXB0aW9uIG9uIGFjY2Vzc2luZyB0aGUgaHJlZiBwcm9wZXJ0eSBpZiB1cmwgaXMg
bWFsZm9ybWVkLAorICAgICAgICAgICAgLy8gZS5nLiBodHRwOi8vZXhhbXBsZS5jb206ODB4Lwor
ICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICB1cmxBbmNob3IuaHJlZiA9IHMudXJs
OworCisgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogSUUgPD04IC0gMTEgb25seQorICAgICAg
ICAgICAgICAgIC8vIEFuY2hvcidzIGhvc3QgcHJvcGVydHkgaXNuJ3QgY29ycmVjdGx5IHNldCB3
aGVuIHMudXJsIGlzIHJlbGF0aXZlCisgICAgICAgICAgICAgICAgdXJsQW5jaG9yLmhyZWYgPSB1
cmxBbmNob3IuaHJlZjsKKyAgICAgICAgICAgICAgICBzLmNyb3NzRG9tYWluID0gb3JpZ2luQW5j
aG9yLnByb3RvY29sICsgIi8vIiArIG9yaWdpbkFuY2hvci5ob3N0ICE9PQorICAgICAgICAgICAg
ICAgICAgICB1cmxBbmNob3IucHJvdG9jb2wgKyAiLy8iICsgdXJsQW5jaG9yLmhvc3Q7CisgICAg
ICAgICAgICB9IGNhdGNoICggZSApIHsKKworICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlz
IGFuIGVycm9yIHBhcnNpbmcgdGhlIFVSTCwgYXNzdW1lIGl0IGlzIGNyb3NzRG9tYWluLAorICAg
ICAgICAgICAgICAgIC8vIGl0IGNhbiBiZSByZWplY3RlZCBieSB0aGUgdHJhbnNwb3J0IGlmIGl0
IGlzIGludmFsaWQKKyAgICAgICAgICAgICAgICBzLmNyb3NzRG9tYWluID0gdHJ1ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIENvbnZlcnQgZGF0YSBpZiBub3QgYWxy
ZWFkeSBhIHN0cmluZworICAgICAgICBpZiAoIHMuZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmIHR5
cGVvZiBzLmRhdGEgIT09ICJzdHJpbmciICkgeworICAgICAgICAgICAgcy5kYXRhID0galF1ZXJ5
LnBhcmFtKCBzLmRhdGEsIHMudHJhZGl0aW9uYWwgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IEFwcGx5IHByZWZpbHRlcnMKKyAgICAgICAgaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMo
IHByZWZpbHRlcnMsIHMsIG9wdGlvbnMsIGpxWEhSICk7CisKKyAgICAgICAgLy8gSWYgcmVxdWVz
dCB3YXMgYWJvcnRlZCBpbnNpZGUgYSBwcmVmaWx0ZXIsIHN0b3AgdGhlcmUKKyAgICAgICAgaWYg
KCBjb21wbGV0ZWQgKSB7CisgICAgICAgICAgICByZXR1cm4ganFYSFI7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBXZSBjYW4gZmlyZSBnbG9iYWwgZXZlbnRzIGFzIG9mIG5vdyBpZiBhc2tlZCB0
bworICAgICAgICAvLyBEb24ndCBmaXJlIGV2ZW50cyBpZiBqUXVlcnkuZXZlbnQgaXMgdW5kZWZp
bmVkIGluIGFuIEFNRC11c2FnZSBzY2VuYXJpbyAoIzE1MTE4KQorICAgICAgICBmaXJlR2xvYmFs
cyA9IGpRdWVyeS5ldmVudCAmJiBzLmdsb2JhbDsKKworICAgICAgICAvLyBXYXRjaCBmb3IgYSBu
ZXcgc2V0IG9mIHJlcXVlc3RzCisgICAgICAgIGlmICggZmlyZUdsb2JhbHMgJiYgalF1ZXJ5LmFj
dGl2ZSsrID09PSAwICkgeworICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoICJhamF4
U3RhcnQiICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBVcHBlcmNhc2UgdGhlIHR5cGUKKyAg
ICAgICAgcy50eXBlID0gcy50eXBlLnRvVXBwZXJDYXNlKCk7CisKKyAgICAgICAgLy8gRGV0ZXJt
aW5lIGlmIHJlcXVlc3QgaGFzIGNvbnRlbnQKKyAgICAgICAgcy5oYXNDb250ZW50ID0gIXJub0Nv
bnRlbnQudGVzdCggcy50eXBlICk7CisKKyAgICAgICAgLy8gU2F2ZSB0aGUgVVJMIGluIGNhc2Ug
d2UncmUgdG95aW5nIHdpdGggdGhlIElmLU1vZGlmaWVkLVNpbmNlCisgICAgICAgIC8vIGFuZC9v
ciBJZi1Ob25lLU1hdGNoIGhlYWRlciBsYXRlciBvbgorICAgICAgICAvLyBSZW1vdmUgaGFzaCB0
byBzaW1wbGlmeSB1cmwgbWFuaXB1bGF0aW9uCisgICAgICAgIGNhY2hlVVJMID0gcy51cmwucmVw
bGFjZSggcmhhc2gsICIiICk7CisKKyAgICAgICAgLy8gTW9yZSBvcHRpb25zIGhhbmRsaW5nIGZv
ciByZXF1ZXN0cyB3aXRoIG5vIGNvbnRlbnQKKyAgICAgICAgaWYgKCAhcy5oYXNDb250ZW50ICkg
eworCisgICAgICAgICAgICAvLyBSZW1lbWJlciB0aGUgaGFzaCBzbyB3ZSBjYW4gcHV0IGl0IGJh
Y2sKKyAgICAgICAgICAgIHVuY2FjaGVkID0gcy51cmwuc2xpY2UoIGNhY2hlVVJMLmxlbmd0aCAp
OworCisgICAgICAgICAgICAvLyBJZiBkYXRhIGlzIGF2YWlsYWJsZSwgYXBwZW5kIGRhdGEgdG8g
dXJsCisgICAgICAgICAgICBpZiAoIHMuZGF0YSApIHsKKyAgICAgICAgICAgICAgICBjYWNoZVVS
TCArPSAoIHJxdWVyeS50ZXN0KCBjYWNoZVVSTCApID8gIiYiIDogIj8iICkgKyBzLmRhdGE7CisK
KyAgICAgICAgICAgICAgICAvLyAjOTY4MjogcmVtb3ZlIGRhdGEgc28gdGhhdCBpdCdzIG5vdCB1
c2VkIGluIGFuIGV2ZW50dWFsIHJldHJ5CisgICAgICAgICAgICAgICAgZGVsZXRlIHMuZGF0YTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQWRkIG9yIHVwZGF0ZSBhbnRpLWNhY2hl
IHBhcmFtIGlmIG5lZWRlZAorICAgICAgICAgICAgaWYgKCBzLmNhY2hlID09PSBmYWxzZSApIHsK
KyAgICAgICAgICAgICAgICBjYWNoZVVSTCA9IGNhY2hlVVJMLnJlcGxhY2UoIHJhbnRpQ2FjaGUs
ICIkMSIgKTsKKyAgICAgICAgICAgICAgICB1bmNhY2hlZCA9ICggcnF1ZXJ5LnRlc3QoIGNhY2hl
VVJMICkgPyAiJiIgOiAiPyIgKSArICJfPSIgKyAoIG5vbmNlKysgKSArIHVuY2FjaGVkOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBQdXQgaGFzaCBhbmQgYW50aS1jYWNoZSBvbiB0
aGUgVVJMIHRoYXQgd2lsbCBiZSByZXF1ZXN0ZWQgKGdoLTE3MzIpCisgICAgICAgICAgICBzLnVy
bCA9IGNhY2hlVVJMICsgdW5jYWNoZWQ7CisKKyAgICAgICAgLy8gQ2hhbmdlICclMjAnIHRvICcr
JyBpZiB0aGlzIGlzIGVuY29kZWQgZm9ybSBib2R5IGNvbnRlbnQgKGdoLTI2NTgpCisgICAgICAg
IH0gZWxzZSBpZiAoIHMuZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmCisgICAgICAgICAgICAoIHMu
Y29udGVudFR5cGUgfHwgIiIgKS5pbmRleE9mKCAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxl
bmNvZGVkIiApID09PSAwICkgeworICAgICAgICAgICAgcy5kYXRhID0gcy5kYXRhLnJlcGxhY2Uo
IHIyMCwgIisiICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBTZXQgdGhlIElmLU1vZGlmaWVk
LVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2Rl
LgorICAgICAgICBpZiAoIHMuaWZNb2RpZmllZCApIHsKKyAgICAgICAgICAgIGlmICggalF1ZXJ5
Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSApIHsKKyAgICAgICAgICAgICAgICBqcVhIUi5zZXRS
ZXF1ZXN0SGVhZGVyKCAiSWYtTW9kaWZpZWQtU2luY2UiLCBqUXVlcnkubGFzdE1vZGlmaWVkWyBj
YWNoZVVSTCBdICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIGpRdWVyeS5ldGFn
WyBjYWNoZVVSTCBdICkgeworICAgICAgICAgICAgICAgIGpxWEhSLnNldFJlcXVlc3RIZWFkZXIo
ICJJZi1Ob25lLU1hdGNoIiwgalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFNldCB0aGUgY29ycmVjdCBoZWFkZXIsIGlmIGRh
dGEgaXMgYmVpbmcgc2VudAorICAgICAgICBpZiAoIHMuZGF0YSAmJiBzLmhhc0NvbnRlbnQgJiYg
cy5jb250ZW50VHlwZSAhPT0gZmFsc2UgfHwgb3B0aW9ucy5jb250ZW50VHlwZSApIHsKKyAgICAg
ICAgICAgIGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoICJDb250ZW50LVR5cGUiLCBzLmNvbnRlbnRU
eXBlICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBTZXQgdGhlIEFjY2VwdHMgaGVhZGVyIGZv
ciB0aGUgc2VydmVyLCBkZXBlbmRpbmcgb24gdGhlIGRhdGFUeXBlCisgICAgICAgIGpxWEhSLnNl
dFJlcXVlc3RIZWFkZXIoCisgICAgICAgICAgICAiQWNjZXB0IiwKKyAgICAgICAgICAgIHMuZGF0
YVR5cGVzWyAwIF0gJiYgcy5hY2NlcHRzWyBzLmRhdGFUeXBlc1sgMCBdIF0gPworICAgICAgICAg
ICAgICAgIHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbIDAgXSBdICsKKyAgICAgICAgICAgICAgICAg
ICAgKCBzLmRhdGFUeXBlc1sgMCBdICE9PSAiKiIgPyAiLCAiICsgYWxsVHlwZXMgKyAiOyBxPTAu
MDEiIDogIiIgKSA6CisgICAgICAgICAgICAgICAgcy5hY2NlcHRzWyAiKiIgXQorICAgICAgICAp
OworCisgICAgICAgIC8vIENoZWNrIGZvciBoZWFkZXJzIG9wdGlvbgorICAgICAgICBmb3IgKCBp
IGluIHMuaGVhZGVycyApIHsKKyAgICAgICAgICAgIGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIGks
IHMuaGVhZGVyc1sgaSBdICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBBbGxvdyBjdXN0b20g
aGVhZGVycy9taW1ldHlwZXMgYW5kIGVhcmx5IGFib3J0CisgICAgICAgIGlmICggcy5iZWZvcmVT
ZW5kICYmCisgICAgICAgICAgICAoIHMuYmVmb3JlU2VuZC5jYWxsKCBjYWxsYmFja0NvbnRleHQs
IGpxWEhSLCBzICkgPT09IGZhbHNlIHx8IGNvbXBsZXRlZCApICkgeworCisgICAgICAgICAgICAv
LyBBYm9ydCBpZiBub3QgZG9uZSBhbHJlYWR5IGFuZCByZXR1cm4KKyAgICAgICAgICAgIHJldHVy
biBqcVhIUi5hYm9ydCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gQWJvcnRpbmcgaXMgbm8g
bG9uZ2VyIGEgY2FuY2VsbGF0aW9uCisgICAgICAgIHN0ckFib3J0ID0gImFib3J0IjsKKworICAg
ICAgICAvLyBJbnN0YWxsIGNhbGxiYWNrcyBvbiBkZWZlcnJlZHMKKyAgICAgICAgY29tcGxldGVE
ZWZlcnJlZC5hZGQoIHMuY29tcGxldGUgKTsKKyAgICAgICAganFYSFIuZG9uZSggcy5zdWNjZXNz
ICk7CisgICAgICAgIGpxWEhSLmZhaWwoIHMuZXJyb3IgKTsKKworICAgICAgICAvLyBHZXQgdHJh
bnNwb3J0CisgICAgICAgIHRyYW5zcG9ydCA9IGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRz
KCB0cmFuc3BvcnRzLCBzLCBvcHRpb25zLCBqcVhIUiApOworCisgICAgICAgIC8vIElmIG5vIHRy
YW5zcG9ydCwgd2UgYXV0by1hYm9ydAorICAgICAgICBpZiAoICF0cmFuc3BvcnQgKSB7CisgICAg
ICAgICAgICBkb25lKCAtMSwgIk5vIFRyYW5zcG9ydCIgKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGpxWEhSLnJlYWR5U3RhdGUgPSAxOworCisgICAgICAgICAgICAvLyBTZW5kIGds
b2JhbCBldmVudAorICAgICAgICAgICAgaWYgKCBmaXJlR2xvYmFscyApIHsKKyAgICAgICAgICAg
ICAgICBnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggImFqYXhTZW5kIiwgWyBqcVhIUiwgcyBd
ICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0
ZWQgaW5zaWRlIGFqYXhTZW5kLCBzdG9wIHRoZXJlCisgICAgICAgICAgICBpZiAoIGNvbXBsZXRl
ZCApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4ganFYSFI7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIFRpbWVvdXQKKyAgICAgICAgICAgIGlmICggcy5hc3luYyAmJiBzLnRpbWVv
dXQgPiAwICkgeworICAgICAgICAgICAgICAgIHRpbWVvdXRUaW1lciA9IHdpbmRvdy5zZXRUaW1l
b3V0KCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAganFYSFIuYWJvcnQoICJ0aW1l
b3V0IiApOworICAgICAgICAgICAgICAgIH0sIHMudGltZW91dCApOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGNvbXBsZXRlZCA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgIHRyYW5zcG9ydC5zZW5kKCByZXF1ZXN0SGVhZGVycywgZG9uZSApOwor
ICAgICAgICAgICAgfSBjYXRjaCAoIGUgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBSZXRocm93
IHBvc3QtY29tcGxldGlvbiBleGNlcHRpb25zCisgICAgICAgICAgICAgICAgaWYgKCBjb21wbGV0
ZWQgKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgLy8gUHJvcGFnYXRlIG90aGVycyBhcyByZXN1bHRzCisgICAgICAg
ICAgICAgICAgZG9uZSggLTEsIGUgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIC8vIENhbGxiYWNrIGZvciB3aGVuIGV2ZXJ5dGhpbmcgaXMgZG9uZQorICAgICAgICBmdW5j
dGlvbiBkb25lKCBzdGF0dXMsIG5hdGl2ZVN0YXR1c1RleHQsIHJlc3BvbnNlcywgaGVhZGVycyAp
IHsKKyAgICAgICAgICAgIHZhciBpc1N1Y2Nlc3MsIHN1Y2Nlc3MsIGVycm9yLCByZXNwb25zZSwg
bW9kaWZpZWQsCisgICAgICAgICAgICAgICAgc3RhdHVzVGV4dCA9IG5hdGl2ZVN0YXR1c1RleHQ7
CisKKyAgICAgICAgICAgIC8vIElnbm9yZSByZXBlYXQgaW52b2NhdGlvbnMKKyAgICAgICAgICAg
IGlmICggY29tcGxldGVkICkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgY29tcGxldGVkID0gdHJ1ZTsKKworICAgICAgICAgICAgLy8gQ2xl
YXIgdGltZW91dCBpZiBpdCBleGlzdHMKKyAgICAgICAgICAgIGlmICggdGltZW91dFRpbWVyICkg
eworICAgICAgICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQoIHRpbWVvdXRUaW1lciApOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBEZXJlZmVyZW5jZSB0cmFuc3BvcnQgZm9y
IGVhcmx5IGdhcmJhZ2UgY29sbGVjdGlvbgorICAgICAgICAgICAgLy8gKG5vIG1hdHRlciBob3cg
bG9uZyB0aGUganFYSFIgb2JqZWN0IHdpbGwgYmUgdXNlZCkKKyAgICAgICAgICAgIHRyYW5zcG9y
dCA9IHVuZGVmaW5lZDsKKworICAgICAgICAgICAgLy8gQ2FjaGUgcmVzcG9uc2UgaGVhZGVycwor
ICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzU3RyaW5nID0gaGVhZGVycyB8fCAiIjsKKworICAg
ICAgICAgICAgLy8gU2V0IHJlYWR5U3RhdGUKKyAgICAgICAgICAgIGpxWEhSLnJlYWR5U3RhdGUg
PSBzdGF0dXMgPiAwID8gNCA6IDA7CisKKyAgICAgICAgICAgIC8vIERldGVybWluZSBpZiBzdWNj
ZXNzZnVsCisgICAgICAgICAgICBpc1N1Y2Nlc3MgPSBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8
IDMwMCB8fCBzdGF0dXMgPT09IDMwNDsKKworICAgICAgICAgICAgLy8gR2V0IHJlc3BvbnNlIGRh
dGEKKyAgICAgICAgICAgIGlmICggcmVzcG9uc2VzICkgeworICAgICAgICAgICAgICAgIHJlc3Bv
bnNlID0gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAvLyBDb252ZXJ0IG5vIG1hdHRlciB3aGF0ICh0aGF0IHdh
eSByZXNwb25zZVhYWCBmaWVsZHMgYXJlIGFsd2F5cyBzZXQpCisgICAgICAgICAgICByZXNwb25z
ZSA9IGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSwganFYSFIsIGlzU3VjY2VzcyApOworCisgICAg
ICAgICAgICAvLyBJZiBzdWNjZXNzZnVsLCBoYW5kbGUgdHlwZSBjaGFpbmluZworICAgICAgICAg
ICAgaWYgKCBpc1N1Y2Nlc3MgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIElmLU1v
ZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmll
ZCBtb2RlLgorICAgICAgICAgICAgICAgIGlmICggcy5pZk1vZGlmaWVkICkgeworICAgICAgICAg
ICAgICAgICAgICBtb2RpZmllZCA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCAiTGFzdC1Nb2Rp
ZmllZCIgKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBtb2RpZmllZCApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gPSBtb2RpZmll
ZDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtb2RpZmllZCA9
IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCAiZXRhZyIgKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCBtb2RpZmllZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldGFnWyBj
YWNoZVVSTCBdID0gbW9kaWZpZWQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBpZiBubyBjb250ZW50CisgICAgICAgICAgICAg
ICAgaWYgKCBzdGF0dXMgPT09IDIwNCB8fCBzLnR5cGUgPT09ICJIRUFEIiApIHsKKyAgICAgICAg
ICAgICAgICAgICAgc3RhdHVzVGV4dCA9ICJub2NvbnRlbnQiOworCisgICAgICAgICAgICAgICAg
Ly8gaWYgbm90IG1vZGlmaWVkCisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggc3RhdHVzID09
PSAzMDQgKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1c1RleHQgPSAibm90bW9kaWZpZWQi
OworCisgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBkYXRhLCBsZXQncyBjb252ZXJ0IGl0
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4
dCA9IHJlc3BvbnNlLnN0YXRlOworICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gcmVzcG9u
c2UuZGF0YTsKKyAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSByZXNwb25zZS5lcnJvcjsKKyAg
ICAgICAgICAgICAgICAgICAgaXNTdWNjZXNzID0gIWVycm9yOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IGVycm9y
IGZyb20gc3RhdHVzVGV4dCBhbmQgbm9ybWFsaXplIGZvciBub24tYWJvcnRzCisgICAgICAgICAg
ICAgICAgZXJyb3IgPSBzdGF0dXNUZXh0OworICAgICAgICAgICAgICAgIGlmICggc3RhdHVzIHx8
ICFzdGF0dXNUZXh0ICkgeworICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0ID0gImVycm9y
IjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBzdGF0dXMgPCAwICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdHVzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gU2V0IGRhdGEgZm9yIHRo
ZSBmYWtlIHhociBvYmplY3QKKyAgICAgICAgICAgIGpxWEhSLnN0YXR1cyA9IHN0YXR1czsKKyAg
ICAgICAgICAgIGpxWEhSLnN0YXR1c1RleHQgPSAoIG5hdGl2ZVN0YXR1c1RleHQgfHwgc3RhdHVz
VGV4dCApICsgIiI7CisKKyAgICAgICAgICAgIC8vIFN1Y2Nlc3MvRXJyb3IKKyAgICAgICAgICAg
IGlmICggaXNTdWNjZXNzICkgeworICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmVXaXRo
KCBjYWxsYmFja0NvbnRleHQsIFsgc3VjY2Vzcywgc3RhdHVzVGV4dCwganFYSFIgXSApOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZWplY3RXaXRoKCBj
YWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1RleHQsIGVycm9yIF0gKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3MKKyAgICAg
ICAgICAgIGpxWEhSLnN0YXR1c0NvZGUoIHN0YXR1c0NvZGUgKTsKKyAgICAgICAgICAgIHN0YXR1
c0NvZGUgPSB1bmRlZmluZWQ7CisKKyAgICAgICAgICAgIGlmICggZmlyZUdsb2JhbHMgKSB7Cisg
ICAgICAgICAgICAgICAgZ2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIGlzU3VjY2VzcyA/ICJh
amF4U3VjY2VzcyIgOiAiYWpheEVycm9yIiwKKyAgICAgICAgICAgICAgICAgICAgWyBqcVhIUiwg
cywgaXNTdWNjZXNzID8gc3VjY2VzcyA6IGVycm9yIF0gKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLy8gQ29tcGxldGUKKyAgICAgICAgICAgIGNvbXBsZXRlRGVmZXJyZWQuZmlyZVdp
dGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCBdICk7CisKKyAgICAgICAg
ICAgIGlmICggZmlyZUdsb2JhbHMgKSB7CisgICAgICAgICAgICAgICAgZ2xvYmFsRXZlbnRDb250
ZXh0LnRyaWdnZXIoICJhamF4Q29tcGxldGUiLCBbIGpxWEhSLCBzIF0gKTsKKworICAgICAgICAg
ICAgICAgIC8vIEhhbmRsZSB0aGUgZ2xvYmFsIEFKQVggY291bnRlcgorICAgICAgICAgICAgICAg
IGlmICggISggLS1qUXVlcnkuYWN0aXZlICkgKSB7CisgICAgICAgICAgICAgICAgICAgIGpRdWVy
eS5ldmVudC50cmlnZ2VyKCAiYWpheFN0b3AiICk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGpxWEhSOworICAgIH0sCisKKyAg
ICBnZXRKU09OOiBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjayApIHsKKyAgICAgICAgcmV0
dXJuIGpRdWVyeS5nZXQoIHVybCwgZGF0YSwgY2FsbGJhY2ssICJqc29uIiApOworICAgIH0sCisK
KyAgICBnZXRTY3JpcHQ6IGZ1bmN0aW9uKCB1cmwsIGNhbGxiYWNrICkgeworICAgICAgICByZXR1
cm4galF1ZXJ5LmdldCggdXJsLCB1bmRlZmluZWQsIGNhbGxiYWNrLCAic2NyaXB0IiApOworICAg
IH0KK30gKTsKKworalF1ZXJ5LmVhY2goIFsgImdldCIsICJwb3N0IiBdLCBmdW5jdGlvbiggaSwg
bWV0aG9kICkgeworICAgIGpRdWVyeVsgbWV0aG9kIF0gPSBmdW5jdGlvbiggdXJsLCBkYXRhLCBj
YWxsYmFjaywgdHlwZSApIHsKKworICAgICAgICAvLyBTaGlmdCBhcmd1bWVudHMgaWYgZGF0YSBh
cmd1bWVudCB3YXMgb21pdHRlZAorICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBkYXRh
ICkgKSB7CisgICAgICAgICAgICB0eXBlID0gdHlwZSB8fCBjYWxsYmFjazsKKyAgICAgICAgICAg
IGNhbGxiYWNrID0gZGF0YTsKKyAgICAgICAgICAgIGRhdGEgPSB1bmRlZmluZWQ7CisgICAgICAg
IH0KKworICAgICAgICAvLyBUaGUgdXJsIGNhbiBiZSBhbiBvcHRpb25zIG9iamVjdCAod2hpY2gg
dGhlbiBtdXN0IGhhdmUgLnVybCkKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5hamF4KCBqUXVlcnku
ZXh0ZW5kKCB7CisgICAgICAgICAgICB1cmw6IHVybCwKKyAgICAgICAgICAgIHR5cGU6IG1ldGhv
ZCwKKyAgICAgICAgICAgIGRhdGFUeXBlOiB0eXBlLAorICAgICAgICAgICAgZGF0YTogZGF0YSwK
KyAgICAgICAgICAgIHN1Y2Nlc3M6IGNhbGxiYWNrCisgICAgICAgIH0sIGpRdWVyeS5pc1BsYWlu
T2JqZWN0KCB1cmwgKSAmJiB1cmwgKSApOworICAgIH07Cit9ICk7CisKKworalF1ZXJ5Ll9ldmFs
VXJsID0gZnVuY3Rpb24oIHVybCApIHsKKyAgICByZXR1cm4galF1ZXJ5LmFqYXgoIHsKKyAgICAg
ICAgdXJsOiB1cmwsCisKKyAgICAgICAgLy8gTWFrZSB0aGlzIGV4cGxpY2l0LCBzaW5jZSB1c2Vy
IGNhbiBvdmVycmlkZSB0aGlzIHRocm91Z2ggYWpheFNldHVwICgjMTEyNjQpCisgICAgICAgIHR5
cGU6ICJHRVQiLAorICAgICAgICBkYXRhVHlwZTogInNjcmlwdCIsCisgICAgICAgIGNhY2hlOiB0
cnVlLAorICAgICAgICBhc3luYzogZmFsc2UsCisgICAgICAgIGdsb2JhbDogZmFsc2UsCisgICAg
ICAgICJ0aHJvd3MiOiB0cnVlCisgICAgfSApOworfTsKKworCitqUXVlcnkuZm4uZXh0ZW5kKCB7
CisgICAgd3JhcEFsbDogZnVuY3Rpb24oIGh0bWwgKSB7CisgICAgICAgIHZhciB3cmFwOworCisg
ICAgICAgIGlmICggdGhpc1sgMCBdICkgeworICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5j
dGlvbiggaHRtbCApICkgeworICAgICAgICAgICAgICAgIGh0bWwgPSBodG1sLmNhbGwoIHRoaXNb
IDAgXSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBUaGUgZWxlbWVudHMgdG8g
d3JhcCB0aGUgdGFyZ2V0IGFyb3VuZAorICAgICAgICAgICAgd3JhcCA9IGpRdWVyeSggaHRtbCwg
dGhpc1sgMCBdLm93bmVyRG9jdW1lbnQgKS5lcSggMCApLmNsb25lKCB0cnVlICk7CisKKyAgICAg
ICAgICAgIGlmICggdGhpc1sgMCBdLnBhcmVudE5vZGUgKSB7CisgICAgICAgICAgICAgICAgd3Jh
cC5pbnNlcnRCZWZvcmUoIHRoaXNbIDAgXSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICB3cmFwLm1hcCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIGVsZW0gPSB0aGlz
OworCisgICAgICAgICAgICAgICAgd2hpbGUgKCBlbGVtLmZpcnN0RWxlbWVudENoaWxkICkgewor
ICAgICAgICAgICAgICAgICAgICBlbGVtID0gZWxlbS5maXJzdEVsZW1lbnRDaGlsZDsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxlbTsKKyAgICAgICAgICAg
IH0gKS5hcHBlbmQoIHRoaXMgKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0aGlzOwor
ICAgIH0sCisKKyAgICB3cmFwSW5uZXI6IGZ1bmN0aW9uKCBodG1sICkgeworICAgICAgICBpZiAo
IGpRdWVyeS5pc0Z1bmN0aW9uKCBodG1sICkgKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5l
YWNoKCBmdW5jdGlvbiggaSApIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkoIHRoaXMgKS53cmFw
SW5uZXIoIGh0bWwuY2FsbCggdGhpcywgaSApICk7CisgICAgICAgICAgICB9ICk7CisgICAgICAg
IH0KKworICAgICAgICByZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
IHZhciBzZWxmID0galF1ZXJ5KCB0aGlzICksCisgICAgICAgICAgICAgICAgY29udGVudHMgPSBz
ZWxmLmNvbnRlbnRzKCk7CisKKyAgICAgICAgICAgIGlmICggY29udGVudHMubGVuZ3RoICkgewor
ICAgICAgICAgICAgICAgIGNvbnRlbnRzLndyYXBBbGwoIGh0bWwgKTsKKworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzZWxmLmFwcGVuZCggaHRtbCApOworICAgICAgICAg
ICAgfQorICAgICAgICB9ICk7CisgICAgfSwKKworICAgIHdyYXA6IGZ1bmN0aW9uKCBodG1sICkg
eworICAgICAgICB2YXIgaXNGdW5jdGlvbiA9IGpRdWVyeS5pc0Z1bmN0aW9uKCBodG1sICk7CisK
KyAgICAgICAgcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7CisgICAgICAgICAgICBq
UXVlcnkoIHRoaXMgKS53cmFwQWxsKCBpc0Z1bmN0aW9uID8gaHRtbC5jYWxsKCB0aGlzLCBpICkg
OiBodG1sICk7CisgICAgICAgIH0gKTsKKyAgICB9LAorCisgICAgdW53cmFwOiBmdW5jdGlvbigg
c2VsZWN0b3IgKSB7CisgICAgICAgIHRoaXMucGFyZW50KCBzZWxlY3RvciApLm5vdCggImJvZHki
ICkuZWFjaCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBqUXVlcnkoIHRoaXMgKS5yZXBsYWNl
V2l0aCggdGhpcy5jaGlsZE5vZGVzICk7CisgICAgICAgIH0gKTsKKyAgICAgICAgcmV0dXJuIHRo
aXM7CisgICAgfQorfSApOworCisKK2pRdWVyeS5leHByLnBzZXVkb3MuaGlkZGVuID0gZnVuY3Rp
b24oIGVsZW0gKSB7CisgICAgcmV0dXJuICFqUXVlcnkuZXhwci5wc2V1ZG9zLnZpc2libGUoIGVs
ZW0gKTsKK307CitqUXVlcnkuZXhwci5wc2V1ZG9zLnZpc2libGUgPSBmdW5jdGlvbiggZWxlbSAp
IHsKKyAgICByZXR1cm4gISEoIGVsZW0ub2Zmc2V0V2lkdGggfHwgZWxlbS5vZmZzZXRIZWlnaHQg
fHwgZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApOworfTsKKworCisKKworalF1ZXJ5LmFq
YXhTZXR0aW5ncy54aHIgPSBmdW5jdGlvbigpIHsKKyAgICB0cnkgeworICAgICAgICByZXR1cm4g
bmV3IHdpbmRvdy5YTUxIdHRwUmVxdWVzdCgpOworICAgIH0gY2F0Y2ggKCBlICkge30KK307CisK
K3ZhciB4aHJTdWNjZXNzU3RhdHVzID0geworCisgICAgICAgIC8vIEZpbGUgcHJvdG9jb2wgYWx3
YXlzIHlpZWxkcyBzdGF0dXMgY29kZSAwLCBhc3N1bWUgMjAwCisgICAgICAgIDA6IDIwMCwKKwor
ICAgICAgICAvLyBTdXBwb3J0OiBJRSA8PTkgb25seQorICAgICAgICAvLyAjMTQ1MDogc29tZXRp
bWVzIElFIHJldHVybnMgMTIyMyB3aGVuIGl0IHNob3VsZCBiZSAyMDQKKyAgICAgICAgMTIyMzog
MjA0CisgICAgfSwKKyAgICB4aHJTdXBwb3J0ZWQgPSBqUXVlcnkuYWpheFNldHRpbmdzLnhocigp
OworCitzdXBwb3J0LmNvcnMgPSAhIXhoclN1cHBvcnRlZCAmJiAoICJ3aXRoQ3JlZGVudGlhbHMi
IGluIHhoclN1cHBvcnRlZCApOworc3VwcG9ydC5hamF4ID0geGhyU3VwcG9ydGVkID0gISF4aHJT
dXBwb3J0ZWQ7CisKK2pRdWVyeS5hamF4VHJhbnNwb3J0KCBmdW5jdGlvbiggb3B0aW9ucyApIHsK
KyAgICB2YXIgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2s7CisKKyAgICAvLyBDcm9zcyBkb21haW4g
b25seSBhbGxvd2VkIGlmIHN1cHBvcnRlZCB0aHJvdWdoIFhNTEh0dHBSZXF1ZXN0CisgICAgaWYg
KCBzdXBwb3J0LmNvcnMgfHwgeGhyU3VwcG9ydGVkICYmICFvcHRpb25zLmNyb3NzRG9tYWluICkg
eworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgc2VuZDogZnVuY3Rpb24oIGhlYWRlcnMs
IGNvbXBsZXRlICkgeworICAgICAgICAgICAgICAgIHZhciBpLAorICAgICAgICAgICAgICAgICAg
ICB4aHIgPSBvcHRpb25zLnhocigpOworCisgICAgICAgICAgICAgICAgeGhyLm9wZW4oCisgICAg
ICAgICAgICAgICAgICAgIG9wdGlvbnMudHlwZSwKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9u
cy51cmwsCisgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuYXN5bmMsCisgICAgICAgICAgICAg
ICAgICAgIG9wdGlvbnMudXNlcm5hbWUsCisgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucGFz
c3dvcmQKKyAgICAgICAgICAgICAgICApOworCisgICAgICAgICAgICAgICAgLy8gQXBwbHkgY3Vz
dG9tIGZpZWxkcyBpZiBwcm92aWRlZAorICAgICAgICAgICAgICAgIGlmICggb3B0aW9ucy54aHJG
aWVsZHMgKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoIGkgaW4gb3B0aW9ucy54aHJGaWVs
ZHMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB4aHJbIGkgXSA9IG9wdGlvbnMueGhyRmll
bGRzWyBpIF07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAvLyBPdmVycmlkZSBtaW1lIHR5cGUgaWYgbmVlZGVkCisgICAgICAgICAg
ICAgICAgaWYgKCBvcHRpb25zLm1pbWVUeXBlICYmIHhoci5vdmVycmlkZU1pbWVUeXBlICkgewor
ICAgICAgICAgICAgICAgICAgICB4aHIub3ZlcnJpZGVNaW1lVHlwZSggb3B0aW9ucy5taW1lVHlw
ZSApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFgtUmVxdWVzdGVk
LVdpdGggaGVhZGVyCisgICAgICAgICAgICAgICAgLy8gRm9yIGNyb3NzLWRvbWFpbiByZXF1ZXN0
cywgc2VlaW5nIGFzIGNvbmRpdGlvbnMgZm9yIGEgcHJlZmxpZ2h0IGFyZQorICAgICAgICAgICAg
ICAgIC8vIGFraW4gdG8gYSBqaWdzYXcgcHV6emxlLCB3ZSBzaW1wbHkgbmV2ZXIgc2V0IGl0IHRv
IGJlIHN1cmUuCisgICAgICAgICAgICAgICAgLy8gKGl0IGNhbiBhbHdheXMgYmUgc2V0IG9uIGEg
cGVyLXJlcXVlc3QgYmFzaXMgb3IgZXZlbiB1c2luZyBhamF4U2V0dXApCisgICAgICAgICAgICAg
ICAgLy8gRm9yIHNhbWUtZG9tYWluIHJlcXVlc3RzLCB3b24ndCBjaGFuZ2UgaGVhZGVyIGlmIGFs
cmVhZHkgcHJvdmlkZWQuCisgICAgICAgICAgICAgICAgaWYgKCAhb3B0aW9ucy5jcm9zc0RvbWFp
biAmJiAhaGVhZGVyc1sgIlgtUmVxdWVzdGVkLVdpdGgiIF0gKSB7CisgICAgICAgICAgICAgICAg
ICAgIGhlYWRlcnNbICJYLVJlcXVlc3RlZC1XaXRoIiBdID0gIlhNTEh0dHBSZXF1ZXN0IjsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBTZXQgaGVhZGVycworICAgICAg
ICAgICAgICAgIGZvciAoIGkgaW4gaGVhZGVycyApIHsKKyAgICAgICAgICAgICAgICAgICAgeGhy
LnNldFJlcXVlc3RIZWFkZXIoIGksIGhlYWRlcnNbIGkgXSApOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIC8vIENhbGxiYWNrCisgICAgICAgICAgICAgICAgY2FsbGJhY2sg
PSBmdW5jdGlvbiggdHlwZSApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjYWxsYmFjayApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGVycm9yQ2FsbGJhY2sgPSB4aHIub25sb2Fk
ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSB4aHIub25h
Ym9ydCA9IHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsOworCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCB0eXBlID09PSAiYWJvcnQiICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB4aHIuYWJvcnQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKCB0eXBlID09PSAiZXJyb3IiICkgeworCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIE9uIGEgbWFudWFsIG5hdGl2ZSBhYm9ydCwgSUU5IHRocm93cworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlcnJvcnMgb24gYW55IHByb3BlcnR5IGFjY2Vz
cyB0aGF0IGlzIG5vdCByZWFkeVN0YXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggdHlwZW9mIHhoci5zdGF0dXMgIT09ICJudW1iZXIiICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29tcGxldGUoIDAsICJlcnJvciIgKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbXBsZXRlKAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gRmlsZTogcHJvdG9jb2wgYWx3YXlzIHlpZWxkcyBzdGF0dXMgMDsgc2VlICM4NjA1
LCAjMTQyMDcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIuc3Rh
dHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoci5zdGF0dXNU
ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGUoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB4aHJTdWNjZXNzU3RhdHVzWyB4aHIuc3RhdHVzIF0g
fHwgeGhyLnN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoci5z
dGF0dXNUZXh0LAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdXBw
b3J0OiBJRSA8PTkgb25seQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
SUU5IGhhcyBubyBYSFIyIGJ1dCB0aHJvd3Mgb24gYmluYXJ5ICh0cmFjLTExNDI2KQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9yIFhIUjIgbm9uLXRleHQsIGxldCB0
aGUgY2FsbGVyIGhhbmRsZSBpdCAoZ2gtMjQ5OCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICggeGhyLnJlc3BvbnNlVHlwZSB8fCAidGV4dCIgKSAhPT0gInRleHQiICB8fAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHhoci5yZXNwb25zZVRl
eHQgIT09ICJzdHJpbmciID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7IGJpbmFyeTogeGhyLnJlc3BvbnNlIH0gOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsgdGV4dDogeGhyLnJlc3BvbnNlVGV4dCB9LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9OworICAg
ICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICAvLyBMaXN0ZW4gdG8gZXZlbnRzCisg
ICAgICAgICAgICAgICAgeGhyLm9ubG9hZCA9IGNhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAg
ZXJyb3JDYWxsYmFjayA9IHhoci5vbmVycm9yID0gY2FsbGJhY2soICJlcnJvciIgKTsKKworICAg
ICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IElFIDkgb25seQorICAgICAgICAgICAgICAgIC8vIFVz
ZSBvbnJlYWR5c3RhdGVjaGFuZ2UgdG8gcmVwbGFjZSBvbmFib3J0CisgICAgICAgICAgICAgICAg
Ly8gdG8gaGFuZGxlIHVuY2F1Z2h0IGFib3J0cworICAgICAgICAgICAgICAgIGlmICggeGhyLm9u
YWJvcnQgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICAgICAgeGhyLm9uYWJvcnQg
PSBlcnJvckNhbGxiYWNrOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gQ2hlY2sgcmVhZHlTdGF0ZSBiZWZvcmUgdGltZW91dCBhcyBpdCBj
aGFuZ2VzCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHhoci5yZWFkeVN0YXRlID09PSA0
ICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWxsb3cgb25lcnJvciB0byBi
ZSBjYWxsZWQgZmlyc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnV0IHRoYXQg
d2lsbCBub3QgaGFuZGxlIGEgbmF0aXZlIGFib3J0CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gQWxzbywgc2F2ZSBlcnJvckNhbGxiYWNrIHRvIGEgdmFyaWFibGUKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBhcyB4aHIub25lcnJvciBjYW5ub3QgYmUgYWNjZXNzZWQKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY2FsbGJhY2sgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBhYm9ydCBj
YWxsYmFjaworICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2soICJhYm9ydCIgKTsK
KworICAgICAgICAgICAgICAgIHRyeSB7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gRG8gc2Vu
ZCB0aGUgcmVxdWVzdCAodGhpcyBtYXkgcmFpc2UgYW4gZXhjZXB0aW9uKQorICAgICAgICAgICAg
ICAgICAgICB4aHIuc2VuZCggb3B0aW9ucy5oYXNDb250ZW50ICYmIG9wdGlvbnMuZGF0YSB8fCBu
dWxsICk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoIGUgKSB7CisKKyAgICAgICAgICAgICAg
ICAgICAgLy8gIzE0NjgzOiBPbmx5IHJldGhyb3cgaWYgdGhpcyBoYXNuJ3QgYmVlbiBub3RpZmll
ZCBhcyBhbiBlcnJvciB5ZXQKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBjYWxsYmFjayApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICBhYm9ydDog
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgaWYgKCBjYWxsYmFjayApIHsKKyAgICAgICAg
ICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH07CisgICAgfQorfSApOworCisKKworCisvLyBQcmV2ZW50IGF1dG8tZXhlY3V0
aW9uIG9mIHNjcmlwdHMgd2hlbiBubyBleHBsaWNpdCBkYXRhVHlwZSB3YXMgcHJvdmlkZWQgKFNl
ZSBnaC0yNDMyKQoralF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIGZ1bmN0aW9uKCBzICkgeworICAgIGlm
ICggcy5jcm9zc0RvbWFpbiApIHsKKyAgICAgICAgcy5jb250ZW50cy5zY3JpcHQgPSBmYWxzZTsK
KyAgICB9Cit9ICk7CisKKy8vIEluc3RhbGwgc2NyaXB0IGRhdGFUeXBlCitqUXVlcnkuYWpheFNl
dHVwKCB7CisgICAgYWNjZXB0czogeworICAgICAgICBzY3JpcHQ6ICJ0ZXh0L2phdmFzY3JpcHQs
IGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsICIgKworICAgICAgICAgICAgImFwcGxpY2F0aW9uL2Vj
bWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCIKKyAgICB9LAorICAgIGNvbnRlbnRz
OiB7CisgICAgICAgIHNjcmlwdDogL1xiKD86amF2YXxlY21hKXNjcmlwdFxiLworICAgIH0sCisg
ICAgY29udmVydGVyczogeworICAgICAgICAidGV4dCBzY3JpcHQiOiBmdW5jdGlvbiggdGV4dCAp
IHsKKyAgICAgICAgICAgIGpRdWVyeS5nbG9iYWxFdmFsKCB0ZXh0ICk7CisgICAgICAgICAgICBy
ZXR1cm4gdGV4dDsKKyAgICAgICAgfQorICAgIH0KK30gKTsKKworLy8gSGFuZGxlIGNhY2hlJ3Mg
c3BlY2lhbCBjYXNlIGFuZCBjcm9zc0RvbWFpbgoralF1ZXJ5LmFqYXhQcmVmaWx0ZXIoICJzY3Jp
cHQiLCBmdW5jdGlvbiggcyApIHsKKyAgICBpZiAoIHMuY2FjaGUgPT09IHVuZGVmaW5lZCApIHsK
KyAgICAgICAgcy5jYWNoZSA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoIHMuY3Jvc3NEb21haW4g
KSB7CisgICAgICAgIHMudHlwZSA9ICJHRVQiOworICAgIH0KK30gKTsKKworLy8gQmluZCBzY3Jp
cHQgdGFnIGhhY2sgdHJhbnNwb3J0CitqUXVlcnkuYWpheFRyYW5zcG9ydCggInNjcmlwdCIsIGZ1
bmN0aW9uKCBzICkgeworCisgICAgLy8gVGhpcyB0cmFuc3BvcnQgb25seSBkZWFscyB3aXRoIGNy
b3NzIGRvbWFpbiByZXF1ZXN0cworICAgIGlmICggcy5jcm9zc0RvbWFpbiApIHsKKyAgICAgICAg
dmFyIHNjcmlwdCwgY2FsbGJhY2s7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBzZW5k
OiBmdW5jdGlvbiggXywgY29tcGxldGUgKSB7CisgICAgICAgICAgICAgICAgc2NyaXB0ID0galF1
ZXJ5KCAiPHNjcmlwdD4iICkucHJvcCggeworICAgICAgICAgICAgICAgICAgICBjaGFyc2V0OiBz
LnNjcmlwdENoYXJzZXQsCisgICAgICAgICAgICAgICAgICAgIHNyYzogcy51cmwKKyAgICAgICAg
ICAgICAgICB9ICkub24oCisgICAgICAgICAgICAgICAgICAgICJsb2FkIGVycm9yIiwKKyAgICAg
ICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiggZXZ0ICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgc2NyaXB0LnJlbW92ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgY2Fs
bGJhY2sgPSBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBldnQgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGUoIGV2dC50eXBlID09PSAiZXJyb3IiID8g
NDA0IDogMjAwLCBldnQudHlwZSApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKTsKKworICAgICAgICAgICAgICAgIC8v
IFVzZSBuYXRpdmUgRE9NIG1hbmlwdWxhdGlvbiB0byBhdm9pZCBvdXIgZG9tTWFuaXAgQUpBWCB0
cmlja2VyeQorICAgICAgICAgICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoIHNjcmlw
dFsgMCBdICk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgYWJvcnQ6IGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgICAgIGlmICggY2FsbGJhY2sgKSB7CisgICAgICAgICAgICAgICAgICAg
IGNhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
OworICAgIH0KK30gKTsKKworCisKKwordmFyIG9sZENhbGxiYWNrcyA9IFtdLAorICAgIHJqc29u
cCA9IC8oPSlcPyg/PSZ8JCl8XD9cPy87CisKKy8vIERlZmF1bHQganNvbnAgc2V0dGluZ3MKK2pR
dWVyeS5hamF4U2V0dXAoIHsKKyAgICBqc29ucDogImNhbGxiYWNrIiwKKyAgICBqc29ucENhbGxi
YWNrOiBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGNhbGxiYWNrID0gb2xkQ2FsbGJhY2tzLnBv
cCgpIHx8ICggalF1ZXJ5LmV4cGFuZG8gKyAiXyIgKyAoIG5vbmNlKysgKSApOworICAgICAgICB0
aGlzWyBjYWxsYmFjayBdID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGNhbGxiYWNrOworICAgIH0K
K30gKTsKKworLy8gRGV0ZWN0LCBub3JtYWxpemUgb3B0aW9ucyBhbmQgaW5zdGFsbCBjYWxsYmFj
a3MgZm9yIGpzb25wIHJlcXVlc3RzCitqUXVlcnkuYWpheFByZWZpbHRlciggImpzb24ganNvbnAi
LCBmdW5jdGlvbiggcywgb3JpZ2luYWxTZXR0aW5ncywganFYSFIgKSB7CisKKyAgICB2YXIgY2Fs
bGJhY2tOYW1lLCBvdmVyd3JpdHRlbiwgcmVzcG9uc2VDb250YWluZXIsCisgICAgICAgIGpzb25Q
cm9wID0gcy5qc29ucCAhPT0gZmFsc2UgJiYgKCByanNvbnAudGVzdCggcy51cmwgKSA/CisgICAg
ICAgICAgICAidXJsIiA6CisgICAgICAgICAgICB0eXBlb2Ygcy5kYXRhID09PSAic3RyaW5nIiAm
JgorICAgICAgICAgICAgICAgICggcy5jb250ZW50VHlwZSB8fCAiIiApCisgICAgICAgICAgICAg
ICAgICAgIC5pbmRleE9mKCAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiApID09
PSAwICYmCisgICAgICAgICAgICAgICAgcmpzb25wLnRlc3QoIHMuZGF0YSApICYmICJkYXRhIgor
ICAgICAgICApOworCisgICAgLy8gSGFuZGxlIGlmZiB0aGUgZXhwZWN0ZWQgZGF0YSB0eXBlIGlz
ICJqc29ucCIgb3Igd2UgaGF2ZSBhIHBhcmFtZXRlciB0byBzZXQKKyAgICBpZiAoIGpzb25Qcm9w
IHx8IHMuZGF0YVR5cGVzWyAwIF0gPT09ICJqc29ucCIgKSB7CisKKyAgICAgICAgLy8gR2V0IGNh
bGxiYWNrIG5hbWUsIHJlbWVtYmVyaW5nIHByZWV4aXN0aW5nIHZhbHVlIGFzc29jaWF0ZWQgd2l0
aCBpdAorICAgICAgICBjYWxsYmFja05hbWUgPSBzLmpzb25wQ2FsbGJhY2sgPSBqUXVlcnkuaXNG
dW5jdGlvbiggcy5qc29ucENhbGxiYWNrICkgPworICAgICAgICAgICAgcy5qc29ucENhbGxiYWNr
KCkgOgorICAgICAgICAgICAgcy5qc29ucENhbGxiYWNrOworCisgICAgICAgIC8vIEluc2VydCBj
YWxsYmFjayBpbnRvIHVybCBvciBmb3JtIGRhdGEKKyAgICAgICAgaWYgKCBqc29uUHJvcCApIHsK
KyAgICAgICAgICAgIHNbIGpzb25Qcm9wIF0gPSBzWyBqc29uUHJvcCBdLnJlcGxhY2UoIHJqc29u
cCwgIiQxIiArIGNhbGxiYWNrTmFtZSApOworICAgICAgICB9IGVsc2UgaWYgKCBzLmpzb25wICE9
PSBmYWxzZSApIHsKKyAgICAgICAgICAgIHMudXJsICs9ICggcnF1ZXJ5LnRlc3QoIHMudXJsICkg
PyAiJiIgOiAiPyIgKSArIHMuanNvbnAgKyAiPSIgKyBjYWxsYmFja05hbWU7CisgICAgICAgIH0K
KworICAgICAgICAvLyBVc2UgZGF0YSBjb252ZXJ0ZXIgdG8gcmV0cmlldmUganNvbiBhZnRlciBz
Y3JpcHQgZXhlY3V0aW9uCisgICAgICAgIHMuY29udmVydGVyc1sgInNjcmlwdCBqc29uIiBdID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBpZiAoICFyZXNwb25zZUNvbnRhaW5lciApIHsKKyAg
ICAgICAgICAgICAgICBqUXVlcnkuZXJyb3IoIGNhbGxiYWNrTmFtZSArICIgd2FzIG5vdCBjYWxs
ZWQiICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2VDb250YWlu
ZXJbIDAgXTsKKyAgICAgICAgfTsKKworICAgICAgICAvLyBGb3JjZSBqc29uIGRhdGFUeXBlCisg
ICAgICAgIHMuZGF0YVR5cGVzWyAwIF0gPSAianNvbiI7CisKKyAgICAgICAgLy8gSW5zdGFsbCBj
YWxsYmFjaworICAgICAgICBvdmVyd3JpdHRlbiA9IHdpbmRvd1sgY2FsbGJhY2tOYW1lIF07Cisg
ICAgICAgIHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
IHJlc3BvbnNlQ29udGFpbmVyID0gYXJndW1lbnRzOworICAgICAgICB9OworCisgICAgICAgIC8v
IENsZWFuLXVwIGZ1bmN0aW9uIChmaXJlcyBhZnRlciBjb252ZXJ0ZXJzKQorICAgICAgICBqcVhI
Ui5hbHdheXMoIGZ1bmN0aW9uKCkgeworCisgICAgICAgICAgICAvLyBJZiBwcmV2aW91cyB2YWx1
ZSBkaWRuJ3QgZXhpc3QgLSByZW1vdmUgaXQKKyAgICAgICAgICAgIGlmICggb3ZlcndyaXR0ZW4g
PT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkoIHdpbmRvdyApLnJlbW92
ZVByb3AoIGNhbGxiYWNrTmFtZSApOworCisgICAgICAgICAgICAvLyBPdGhlcndpc2UgcmVzdG9y
ZSBwcmVleGlzdGluZyB2YWx1ZQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICB3aW5kb3dbIGNhbGxiYWNrTmFtZSBdID0gb3ZlcndyaXR0ZW47CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIFNhdmUgYmFjayBhcyBmcmVlCisgICAgICAgICAgICBpZiAoIHNbIGNh
bGxiYWNrTmFtZSBdICkgeworCisgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgcmUt
dXNpbmcgdGhlIG9wdGlvbnMgZG9lc24ndCBzY3JldyB0aGluZ3MgYXJvdW5kCisgICAgICAgICAg
ICAgICAgcy5qc29ucENhbGxiYWNrID0gb3JpZ2luYWxTZXR0aW5ncy5qc29ucENhbGxiYWNrOwor
CisgICAgICAgICAgICAgICAgLy8gU2F2ZSB0aGUgY2FsbGJhY2sgbmFtZSBmb3IgZnV0dXJlIHVz
ZQorICAgICAgICAgICAgICAgIG9sZENhbGxiYWNrcy5wdXNoKCBjYWxsYmFja05hbWUgKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ2FsbCBpZiBpdCB3YXMgYSBmdW5jdGlvbiBh
bmQgd2UgaGF2ZSBhIHJlc3BvbnNlCisgICAgICAgICAgICBpZiAoIHJlc3BvbnNlQ29udGFpbmVy
ICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBvdmVyd3JpdHRlbiApICkgeworICAgICAgICAgICAgICAg
IG92ZXJ3cml0dGVuKCByZXNwb25zZUNvbnRhaW5lclsgMCBdICk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHJlc3BvbnNlQ29udGFpbmVyID0gb3ZlcndyaXR0ZW4gPSB1bmRlZmluZWQ7
CisgICAgICAgIH0gKTsKKworICAgICAgICAvLyBEZWxlZ2F0ZSB0byBzY3JpcHQKKyAgICAgICAg
cmV0dXJuICJzY3JpcHQiOworICAgIH0KK30gKTsKKworCisKKworLy8gU3VwcG9ydDogU2FmYXJp
IDggb25seQorLy8gSW4gU2FmYXJpIDggZG9jdW1lbnRzIGNyZWF0ZWQgdmlhIGRvY3VtZW50Lmlt
cGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudAorLy8gY29sbGFwc2Ugc2libGluZyBmb3Jt
czogdGhlIHNlY29uZCBvbmUgYmVjb21lcyBhIGNoaWxkIG9mIHRoZSBmaXJzdCBvbmUuCisvLyBC
ZWNhdXNlIG9mIHRoYXQsIHRoaXMgc2VjdXJpdHkgbWVhc3VyZSBoYXMgdG8gYmUgZGlzYWJsZWQg
aW4gU2FmYXJpIDguCisvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM3MzM3CitzdXBwb3J0LmNyZWF0ZUhUTUxEb2N1bWVudCA9ICggZnVuY3Rpb24oKSB7CisgICAg
dmFyIGJvZHkgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoICIi
ICkuYm9keTsKKyAgICBib2R5LmlubmVySFRNTCA9ICI8Zm9ybT48L2Zvcm0+PGZvcm0+PC9mb3Jt
PiI7CisgICAgcmV0dXJuIGJvZHkuY2hpbGROb2Rlcy5sZW5ndGggPT09IDI7Cit9ICkoKTsKKwor
CisvLyBBcmd1bWVudCAiZGF0YSIgc2hvdWxkIGJlIHN0cmluZyBvZiBodG1sCisvLyBjb250ZXh0
IChvcHRpb25hbCk6IElmIHNwZWNpZmllZCwgdGhlIGZyYWdtZW50IHdpbGwgYmUgY3JlYXRlZCBp
biB0aGlzIGNvbnRleHQsCisvLyBkZWZhdWx0cyB0byBkb2N1bWVudAorLy8ga2VlcFNjcmlwdHMg
KG9wdGlvbmFsKTogSWYgdHJ1ZSwgd2lsbCBpbmNsdWRlIHNjcmlwdHMgcGFzc2VkIGluIHRoZSBo
dG1sIHN0cmluZworalF1ZXJ5LnBhcnNlSFRNTCA9IGZ1bmN0aW9uKCBkYXRhLCBjb250ZXh0LCBr
ZWVwU2NyaXB0cyApIHsKKyAgICBpZiAoIHR5cGVvZiBkYXRhICE9PSAic3RyaW5nIiApIHsKKyAg
ICAgICAgcmV0dXJuIFtdOworICAgIH0KKyAgICBpZiAoIHR5cGVvZiBjb250ZXh0ID09PSAiYm9v
bGVhbiIgKSB7CisgICAgICAgIGtlZXBTY3JpcHRzID0gY29udGV4dDsKKyAgICAgICAgY29udGV4
dCA9IGZhbHNlOworICAgIH0KKworICAgIHZhciBiYXNlLCBwYXJzZWQsIHNjcmlwdHM7CisKKyAg
ICBpZiAoICFjb250ZXh0ICkgeworCisgICAgICAgIC8vIFN0b3Agc2NyaXB0cyBvciBpbmxpbmUg
ZXZlbnQgaGFuZGxlcnMgZnJvbSBiZWluZyBleGVjdXRlZCBpbW1lZGlhdGVseQorICAgICAgICAv
LyBieSB1c2luZyBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbgorICAgICAgICBpZiAoIHN1cHBvcnQu
Y3JlYXRlSFRNTERvY3VtZW50ICkgeworICAgICAgICAgICAgY29udGV4dCA9IGRvY3VtZW50Lmlt
cGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCggIiIgKTsKKworICAgICAgICAgICAgLy8g
U2V0IHRoZSBiYXNlIGhyZWYgZm9yIHRoZSBjcmVhdGVkIGRvY3VtZW50CisgICAgICAgICAgICAv
LyBzbyBhbnkgcGFyc2VkIGVsZW1lbnRzIHdpdGggVVJMcworICAgICAgICAgICAgLy8gYXJlIGJh
c2VkIG9uIHRoZSBkb2N1bWVudCdzIFVSTCAoZ2gtMjk2NSkKKyAgICAgICAgICAgIGJhc2UgPSBj
b250ZXh0LmNyZWF0ZUVsZW1lbnQoICJiYXNlIiApOworICAgICAgICAgICAgYmFzZS5ocmVmID0g
ZG9jdW1lbnQubG9jYXRpb24uaHJlZjsKKyAgICAgICAgICAgIGNvbnRleHQuaGVhZC5hcHBlbmRD
aGlsZCggYmFzZSApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY29udGV4dCA9IGRv
Y3VtZW50OworICAgICAgICB9CisgICAgfQorCisgICAgcGFyc2VkID0gcnNpbmdsZVRhZy5leGVj
KCBkYXRhICk7CisgICAgc2NyaXB0cyA9ICFrZWVwU2NyaXB0cyAmJiBbXTsKKworICAgIC8vIFNp
bmdsZSB0YWcKKyAgICBpZiAoIHBhcnNlZCApIHsKKyAgICAgICAgcmV0dXJuIFsgY29udGV4dC5j
cmVhdGVFbGVtZW50KCBwYXJzZWRbIDEgXSApIF07CisgICAgfQorCisgICAgcGFyc2VkID0gYnVp
bGRGcmFnbWVudCggWyBkYXRhIF0sIGNvbnRleHQsIHNjcmlwdHMgKTsKKworICAgIGlmICggc2Ny
aXB0cyAmJiBzY3JpcHRzLmxlbmd0aCApIHsKKyAgICAgICAgalF1ZXJ5KCBzY3JpcHRzICkucmVt
b3ZlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGpRdWVyeS5tZXJnZSggW10sIHBhcnNlZC5jaGls
ZE5vZGVzICk7Cit9OworCisKKy8qKgorICogTG9hZCBhIHVybCBpbnRvIGEgcGFnZQorICovCitq
UXVlcnkuZm4ubG9hZCA9IGZ1bmN0aW9uKCB1cmwsIHBhcmFtcywgY2FsbGJhY2sgKSB7CisgICAg
dmFyIHNlbGVjdG9yLCB0eXBlLCByZXNwb25zZSwKKyAgICAgICAgc2VsZiA9IHRoaXMsCisgICAg
ICAgIG9mZiA9IHVybC5pbmRleE9mKCAiICIgKTsKKworICAgIGlmICggb2ZmID4gLTEgKSB7Cisg
ICAgICAgIHNlbGVjdG9yID0gc3RyaXBBbmRDb2xsYXBzZSggdXJsLnNsaWNlKCBvZmYgKSApOwor
ICAgICAgICB1cmwgPSB1cmwuc2xpY2UoIDAsIG9mZiApOworICAgIH0KKworICAgIC8vIElmIGl0
J3MgYSBmdW5jdGlvbgorICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHBhcmFtcyApICkgewor
CisgICAgICAgIC8vIFdlIGFzc3VtZSB0aGF0IGl0J3MgdGhlIGNhbGxiYWNrCisgICAgICAgIGNh
bGxiYWNrID0gcGFyYW1zOworICAgICAgICBwYXJhbXMgPSB1bmRlZmluZWQ7CisKKyAgICAvLyBP
dGhlcndpc2UsIGJ1aWxkIGEgcGFyYW0gc3RyaW5nCisgICAgfSBlbHNlIGlmICggcGFyYW1zICYm
IHR5cGVvZiBwYXJhbXMgPT09ICJvYmplY3QiICkgeworICAgICAgICB0eXBlID0gIlBPU1QiOwor
ICAgIH0KKworICAgIC8vIElmIHdlIGhhdmUgZWxlbWVudHMgdG8gbW9kaWZ5LCBtYWtlIHRoZSBy
ZXF1ZXN0CisgICAgaWYgKCBzZWxmLmxlbmd0aCA+IDAgKSB7CisgICAgICAgIGpRdWVyeS5hamF4
KCB7CisgICAgICAgICAgICB1cmw6IHVybCwKKworICAgICAgICAgICAgLy8gSWYgInR5cGUiIHZh
cmlhYmxlIGlzIHVuZGVmaW5lZCwgdGhlbiAiR0VUIiBtZXRob2Qgd2lsbCBiZSB1c2VkLgorICAg
ICAgICAgICAgLy8gTWFrZSB2YWx1ZSBvZiB0aGlzIGZpZWxkIGV4cGxpY2l0IHNpbmNlCisgICAg
ICAgICAgICAvLyB1c2VyIGNhbiBvdmVycmlkZSBpdCB0aHJvdWdoIGFqYXhTZXR1cCBtZXRob2QK
KyAgICAgICAgICAgIHR5cGU6IHR5cGUgfHwgIkdFVCIsCisgICAgICAgICAgICBkYXRhVHlwZTog
Imh0bWwiLAorICAgICAgICAgICAgZGF0YTogcGFyYW1zCisgICAgICAgIH0gKS5kb25lKCBmdW5j
dGlvbiggcmVzcG9uc2VUZXh0ICkgeworCisgICAgICAgICAgICAvLyBTYXZlIHJlc3BvbnNlIGZv
ciB1c2UgaW4gY29tcGxldGUgY2FsbGJhY2sKKyAgICAgICAgICAgIHJlc3BvbnNlID0gYXJndW1l
bnRzOworCisgICAgICAgICAgICBzZWxmLmh0bWwoIHNlbGVjdG9yID8KKworICAgICAgICAgICAg
ICAgIC8vIElmIGEgc2VsZWN0b3Igd2FzIHNwZWNpZmllZCwgbG9jYXRlIHRoZSByaWdodCBlbGVt
ZW50cyBpbiBhIGR1bW15IGRpdgorICAgICAgICAgICAgICAgIC8vIEV4Y2x1ZGUgc2NyaXB0cyB0
byBhdm9pZCBJRSAnUGVybWlzc2lvbiBEZW5pZWQnIGVycm9ycworICAgICAgICAgICAgICAgIGpR
dWVyeSggIjxkaXY+IiApLmFwcGVuZCggalF1ZXJ5LnBhcnNlSFRNTCggcmVzcG9uc2VUZXh0ICkg
KS5maW5kKCBzZWxlY3RvciApIDoKKworICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSB1c2Ug
dGhlIGZ1bGwgcmVzdWx0CisgICAgICAgICAgICAgICAgcmVzcG9uc2VUZXh0ICk7CisKKyAgICAg
ICAgLy8gSWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMsIHRoaXMgZnVuY3Rpb24gZ2V0cyAiZGF0YSIs
ICJzdGF0dXMiLCAianFYSFIiCisgICAgICAgIC8vIGJ1dCB0aGV5IGFyZSBpZ25vcmVkIGJlY2F1
c2UgcmVzcG9uc2Ugd2FzIHNldCBhYm92ZS4KKyAgICAgICAgLy8gSWYgaXQgZmFpbHMsIHRoaXMg
ZnVuY3Rpb24gZ2V0cyAianFYSFIiLCAic3RhdHVzIiwgImVycm9yIgorICAgICAgICB9ICkuYWx3
YXlzKCBjYWxsYmFjayAmJiBmdW5jdGlvbigganFYSFIsIHN0YXR1cyApIHsKKyAgICAgICAgICAg
IHNlbGYuZWFjaCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHko
IHRoaXMsIHJlc3BvbnNlIHx8IFsganFYSFIucmVzcG9uc2VUZXh0LCBzdGF0dXMsIGpxWEhSIF0g
KTsKKyAgICAgICAgICAgIH0gKTsKKyAgICAgICAgfSApOworICAgIH0KKworICAgIHJldHVybiB0
aGlzOworfTsKKworCisKKworLy8gQXR0YWNoIGEgYnVuY2ggb2YgZnVuY3Rpb25zIGZvciBoYW5k
bGluZyBjb21tb24gQUpBWCBldmVudHMKK2pRdWVyeS5lYWNoKCBbCisgICAgImFqYXhTdGFydCIs
CisgICAgImFqYXhTdG9wIiwKKyAgICAiYWpheENvbXBsZXRlIiwKKyAgICAiYWpheEVycm9yIiwK
KyAgICAiYWpheFN1Y2Nlc3MiLAorICAgICJhamF4U2VuZCIKK10sIGZ1bmN0aW9uKCBpLCB0eXBl
ICkgeworICAgIGpRdWVyeS5mblsgdHlwZSBdID0gZnVuY3Rpb24oIGZuICkgeworICAgICAgICBy
ZXR1cm4gdGhpcy5vbiggdHlwZSwgZm4gKTsKKyAgICB9OworfSApOworCisKKworCitqUXVlcnku
ZXhwci5wc2V1ZG9zLmFuaW1hdGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgcmV0dXJuIGpR
dWVyeS5ncmVwKCBqUXVlcnkudGltZXJzLCBmdW5jdGlvbiggZm4gKSB7CisgICAgICAgIHJldHVy
biBlbGVtID09PSBmbi5lbGVtOworICAgIH0gKS5sZW5ndGg7Cit9OworCisKKworCisvKioKKyAq
IEdldHMgYSB3aW5kb3cgZnJvbSBhbiBlbGVtZW50CisgKi8KK2Z1bmN0aW9uIGdldFdpbmRvdygg
ZWxlbSApIHsKKyAgICByZXR1cm4galF1ZXJ5LmlzV2luZG93KCBlbGVtICkgPyBlbGVtIDogZWxl
bS5ub2RlVHlwZSA9PT0gOSAmJiBlbGVtLmRlZmF1bHRWaWV3OworfQorCitqUXVlcnkub2Zmc2V0
ID0geworICAgIHNldE9mZnNldDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGkgKSB7CisgICAg
ICAgIHZhciBjdXJQb3NpdGlvbiwgY3VyTGVmdCwgY3VyQ1NTVG9wLCBjdXJUb3AsIGN1ck9mZnNl
dCwgY3VyQ1NTTGVmdCwgY2FsY3VsYXRlUG9zaXRpb24sCisgICAgICAgICAgICBwb3NpdGlvbiA9
IGpRdWVyeS5jc3MoIGVsZW0sICJwb3NpdGlvbiIgKSwKKyAgICAgICAgICAgIGN1ckVsZW0gPSBq
UXVlcnkoIGVsZW0gKSwKKyAgICAgICAgICAgIHByb3BzID0ge307CisKKyAgICAgICAgLy8gU2V0
IHBvc2l0aW9uIGZpcnN0LCBpbi1jYXNlIHRvcC9sZWZ0IGFyZSBzZXQgZXZlbiBvbiBzdGF0aWMg
ZWxlbQorICAgICAgICBpZiAoIHBvc2l0aW9uID09PSAic3RhdGljIiApIHsKKyAgICAgICAgICAg
IGVsZW0uc3R5bGUucG9zaXRpb24gPSAicmVsYXRpdmUiOworICAgICAgICB9CisKKyAgICAgICAg
Y3VyT2Zmc2V0ID0gY3VyRWxlbS5vZmZzZXQoKTsKKyAgICAgICAgY3VyQ1NTVG9wID0galF1ZXJ5
LmNzcyggZWxlbSwgInRvcCIgKTsKKyAgICAgICAgY3VyQ1NTTGVmdCA9IGpRdWVyeS5jc3MoIGVs
ZW0sICJsZWZ0IiApOworICAgICAgICBjYWxjdWxhdGVQb3NpdGlvbiA9ICggcG9zaXRpb24gPT09
ICJhYnNvbHV0ZSIgfHwgcG9zaXRpb24gPT09ICJmaXhlZCIgKSAmJgorICAgICAgICAgICAgKCBj
dXJDU1NUb3AgKyBjdXJDU1NMZWZ0ICkuaW5kZXhPZiggImF1dG8iICkgPiAtMTsKKworICAgICAg
ICAvLyBOZWVkIHRvIGJlIGFibGUgdG8gY2FsY3VsYXRlIHBvc2l0aW9uIGlmIGVpdGhlcgorICAg
ICAgICAvLyB0b3Agb3IgbGVmdCBpcyBhdXRvIGFuZCBwb3NpdGlvbiBpcyBlaXRoZXIgYWJzb2x1
dGUgb3IgZml4ZWQKKyAgICAgICAgaWYgKCBjYWxjdWxhdGVQb3NpdGlvbiApIHsKKyAgICAgICAg
ICAgIGN1clBvc2l0aW9uID0gY3VyRWxlbS5wb3NpdGlvbigpOworICAgICAgICAgICAgY3VyVG9w
ID0gY3VyUG9zaXRpb24udG9wOworICAgICAgICAgICAgY3VyTGVmdCA9IGN1clBvc2l0aW9uLmxl
ZnQ7CisKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGN1clRvcCA9IHBhcnNlRmxvYXQo
IGN1ckNTU1RvcCApIHx8IDA7CisgICAgICAgICAgICBjdXJMZWZ0ID0gcGFyc2VGbG9hdCggY3Vy
Q1NTTGVmdCApIHx8IDA7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0
aW9uKCBvcHRpb25zICkgKSB7CisKKyAgICAgICAgICAgIC8vIFVzZSBqUXVlcnkuZXh0ZW5kIGhl
cmUgdG8gYWxsb3cgbW9kaWZpY2F0aW9uIG9mIGNvb3JkaW5hdGVzIGFyZ3VtZW50IChnaC0xODQ4
KQorICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMuY2FsbCggZWxlbSwgaSwgalF1ZXJ5LmV4
dGVuZCgge30sIGN1ck9mZnNldCApICk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIG9wdGlv
bnMudG9wICE9IG51bGwgKSB7CisgICAgICAgICAgICBwcm9wcy50b3AgPSAoIG9wdGlvbnMudG9w
IC0gY3VyT2Zmc2V0LnRvcCApICsgY3VyVG9wOworICAgICAgICB9CisgICAgICAgIGlmICggb3B0
aW9ucy5sZWZ0ICE9IG51bGwgKSB7CisgICAgICAgICAgICBwcm9wcy5sZWZ0ID0gKCBvcHRpb25z
LmxlZnQgLSBjdXJPZmZzZXQubGVmdCApICsgY3VyTGVmdDsKKyAgICAgICAgfQorCisgICAgICAg
IGlmICggInVzaW5nIiBpbiBvcHRpb25zICkgeworICAgICAgICAgICAgb3B0aW9ucy51c2luZy5j
YWxsKCBlbGVtLCBwcm9wcyApOworCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjdXJF
bGVtLmNzcyggcHJvcHMgKTsKKyAgICAgICAgfQorICAgIH0KK307CisKK2pRdWVyeS5mbi5leHRl
bmQoIHsKKyAgICBvZmZzZXQ6IGZ1bmN0aW9uKCBvcHRpb25zICkgeworCisgICAgICAgIC8vIFBy
ZXNlcnZlIGNoYWluaW5nIGZvciBzZXR0ZXIKKyAgICAgICAgaWYgKCBhcmd1bWVudHMubGVuZ3Ro
ICkgeworICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/CisgICAgICAg
ICAgICAgICAgdGhpcyA6CisgICAgICAgICAgICAgICAgdGhpcy5lYWNoKCBmdW5jdGlvbiggaSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Lm9mZnNldC5zZXRPZmZzZXQoIHRoaXMsIG9w
dGlvbnMsIGkgKTsKKyAgICAgICAgICAgICAgICB9ICk7CisgICAgICAgIH0KKworICAgICAgICB2
YXIgZG9jRWxlbSwgd2luLCByZWN0LCBkb2MsCisgICAgICAgICAgICBlbGVtID0gdGhpc1sgMCBd
OworCisgICAgICAgIGlmICggIWVsZW0gKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICAvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHkKKyAgICAgICAgLy8gUnVubmlu
ZyBnZXRCb3VuZGluZ0NsaWVudFJlY3Qgb24gYQorICAgICAgICAvLyBkaXNjb25uZWN0ZWQgbm9k
ZSBpbiBJRSB0aHJvd3MgYW4gZXJyb3IKKyAgICAgICAgaWYgKCAhZWxlbS5nZXRDbGllbnRSZWN0
cygpLmxlbmd0aCApIHsKKyAgICAgICAgICAgIHJldHVybiB7IHRvcDogMCwgbGVmdDogMCB9Owor
ICAgICAgICB9CisKKyAgICAgICAgcmVjdCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7
CisKKyAgICAgICAgLy8gTWFrZSBzdXJlIGVsZW1lbnQgaXMgbm90IGhpZGRlbiAoZGlzcGxheTog
bm9uZSkKKyAgICAgICAgaWYgKCByZWN0LndpZHRoIHx8IHJlY3QuaGVpZ2h0ICkgeworICAgICAg
ICAgICAgZG9jID0gZWxlbS5vd25lckRvY3VtZW50OworICAgICAgICAgICAgd2luID0gZ2V0V2lu
ZG93KCBkb2MgKTsKKyAgICAgICAgICAgIGRvY0VsZW0gPSBkb2MuZG9jdW1lbnRFbGVtZW50Owor
CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHRvcDogcmVjdC50b3AgKyB3
aW4ucGFnZVlPZmZzZXQgLSBkb2NFbGVtLmNsaWVudFRvcCwKKyAgICAgICAgICAgICAgICBsZWZ0
OiByZWN0LmxlZnQgKyB3aW4ucGFnZVhPZmZzZXQgLSBkb2NFbGVtLmNsaWVudExlZnQKKyAgICAg
ICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICAvLyBSZXR1cm4gemVyb3MgZm9yIGRpc2Nv
bm5lY3RlZCBhbmQgaGlkZGVuIGVsZW1lbnRzIChnaC0yMzEwKQorICAgICAgICByZXR1cm4gcmVj
dDsKKyAgICB9LAorCisgICAgcG9zaXRpb246IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoICF0
aGlzWyAwIF0gKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB2
YXIgb2Zmc2V0UGFyZW50LCBvZmZzZXQsCisgICAgICAgICAgICBlbGVtID0gdGhpc1sgMCBdLAor
ICAgICAgICAgICAgcGFyZW50T2Zmc2V0ID0geyB0b3A6IDAsIGxlZnQ6IDAgfTsKKworICAgICAg
ICAvLyBGaXhlZCBlbGVtZW50cyBhcmUgb2Zmc2V0IGZyb20gd2luZG93IChwYXJlbnRPZmZzZXQg
PSB7dG9wOjAsIGxlZnQ6IDB9LAorICAgICAgICAvLyBiZWNhdXNlIGl0IGlzIGl0cyBvbmx5IG9m
ZnNldCBwYXJlbnQKKyAgICAgICAgaWYgKCBqUXVlcnkuY3NzKCBlbGVtLCAicG9zaXRpb24iICkg
PT09ICJmaXhlZCIgKSB7CisKKyAgICAgICAgICAgIC8vIEFzc3VtZSBnZXRCb3VuZGluZ0NsaWVu
dFJlY3QgaXMgdGhlcmUgd2hlbiBjb21wdXRlZCBwb3NpdGlvbiBpcyBmaXhlZAorICAgICAgICAg
ICAgb2Zmc2V0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKworICAgICAgICB9IGVs
c2UgeworCisgICAgICAgICAgICAvLyBHZXQgKnJlYWwqIG9mZnNldFBhcmVudAorICAgICAgICAg
ICAgb2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQoKTsKKworICAgICAgICAgICAgLy8g
R2V0IGNvcnJlY3Qgb2Zmc2V0cworICAgICAgICAgICAgb2Zmc2V0ID0gdGhpcy5vZmZzZXQoKTsK
KyAgICAgICAgICAgIGlmICggIWpRdWVyeS5ub2RlTmFtZSggb2Zmc2V0UGFyZW50WyAwIF0sICJo
dG1sIiApICkgeworICAgICAgICAgICAgICAgIHBhcmVudE9mZnNldCA9IG9mZnNldFBhcmVudC5v
ZmZzZXQoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQWRkIG9mZnNldFBhcmVu
dCBib3JkZXJzCisgICAgICAgICAgICBwYXJlbnRPZmZzZXQgPSB7CisgICAgICAgICAgICAgICAg
dG9wOiBwYXJlbnRPZmZzZXQudG9wICsgalF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50WyAwIF0sICJi
b3JkZXJUb3BXaWR0aCIsIHRydWUgKSwKKyAgICAgICAgICAgICAgICBsZWZ0OiBwYXJlbnRPZmZz
ZXQubGVmdCArIGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudFsgMCBdLCAiYm9yZGVyTGVmdFdpZHRo
IiwgdHJ1ZSApCisgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgLy8gU3VidHJh
Y3QgcGFyZW50IG9mZnNldHMgYW5kIGVsZW1lbnQgbWFyZ2lucworICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgdG9wOiBvZmZzZXQudG9wIC0gcGFyZW50T2Zmc2V0LnRvcCAtIGpRdWVyeS5j
c3MoIGVsZW0sICJtYXJnaW5Ub3AiLCB0cnVlICksCisgICAgICAgICAgICBsZWZ0OiBvZmZzZXQu
bGVmdCAtIHBhcmVudE9mZnNldC5sZWZ0IC0galF1ZXJ5LmNzcyggZWxlbSwgIm1hcmdpbkxlZnQi
LCB0cnVlICkKKyAgICAgICAgfTsKKyAgICB9LAorCisgICAgLy8gVGhpcyBtZXRob2Qgd2lsbCBy
ZXR1cm4gZG9jdW1lbnRFbGVtZW50IGluIHRoZSBmb2xsb3dpbmcgY2FzZXM6CisgICAgLy8gMSkg
Rm9yIHRoZSBlbGVtZW50IGluc2lkZSB0aGUgaWZyYW1lIHdpdGhvdXQgb2Zmc2V0UGFyZW50LCB0
aGlzIG1ldGhvZCB3aWxsIHJldHVybgorICAgIC8vICAgIGRvY3VtZW50RWxlbWVudCBvZiB0aGUg
cGFyZW50IHdpbmRvdworICAgIC8vIDIpIEZvciB0aGUgaGlkZGVuIG9yIGRldGFjaGVkIGVsZW1l
bnQKKyAgICAvLyAzKSBGb3IgYm9keSBvciBodG1sIGVsZW1lbnQsIGkuZS4gaW4gY2FzZSBvZiB0
aGUgaHRtbCBub2RlIC0gaXQgd2lsbCByZXR1cm4gaXRzZWxmCisgICAgLy8KKyAgICAvLyBidXQg
dGhvc2UgZXhjZXB0aW9ucyB3ZXJlIG5ldmVyIHByZXNlbnRlZCBhcyBhIHJlYWwgbGlmZSB1c2Ut
Y2FzZXMKKyAgICAvLyBhbmQgbWlnaHQgYmUgY29uc2lkZXJlZCBhcyBtb3JlIHByZWZlcmFibGUg
cmVzdWx0cy4KKyAgICAvLworICAgIC8vIFRoaXMgbG9naWMsIGhvd2V2ZXIsIGlzIG5vdCBndWFy
YW50ZWVkIGFuZCBjYW4gY2hhbmdlIGF0IGFueSBwb2ludCBpbiB0aGUgZnV0dXJlCisgICAgb2Zm
c2V0UGFyZW50OiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMubWFwKCBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgIHZhciBvZmZzZXRQYXJlbnQgPSB0aGlzLm9mZnNldFBhcmVudDsK
KworICAgICAgICAgICAgd2hpbGUgKCBvZmZzZXRQYXJlbnQgJiYgalF1ZXJ5LmNzcyggb2Zmc2V0
UGFyZW50LCAicG9zaXRpb24iICkgPT09ICJzdGF0aWMiICkgeworICAgICAgICAgICAgICAgIG9m
ZnNldFBhcmVudCA9IG9mZnNldFBhcmVudC5vZmZzZXRQYXJlbnQ7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZG9jdW1lbnRFbGVtZW50OworICAg
ICAgICB9ICk7CisgICAgfQorfSApOworCisvLyBDcmVhdGUgc2Nyb2xsTGVmdCBhbmQgc2Nyb2xs
VG9wIG1ldGhvZHMKK2pRdWVyeS5lYWNoKCB7IHNjcm9sbExlZnQ6ICJwYWdlWE9mZnNldCIsIHNj
cm9sbFRvcDogInBhZ2VZT2Zmc2V0IiB9LCBmdW5jdGlvbiggbWV0aG9kLCBwcm9wICkgeworICAg
IHZhciB0b3AgPSAicGFnZVlPZmZzZXQiID09PSBwcm9wOworCisgICAgalF1ZXJ5LmZuWyBtZXRo
b2QgXSA9IGZ1bmN0aW9uKCB2YWwgKSB7CisgICAgICAgIHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1
bmN0aW9uKCBlbGVtLCBtZXRob2QsIHZhbCApIHsKKyAgICAgICAgICAgIHZhciB3aW4gPSBnZXRX
aW5kb3coIGVsZW0gKTsKKworICAgICAgICAgICAgaWYgKCB2YWwgPT09IHVuZGVmaW5lZCApIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gd2luID8gd2luWyBwcm9wIF0gOiBlbGVtWyBtZXRob2Qg
XTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCB3aW4gKSB7CisgICAgICAgICAg
ICAgICAgd2luLnNjcm9sbFRvKAorICAgICAgICAgICAgICAgICAgICAhdG9wID8gdmFsIDogd2lu
LnBhZ2VYT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICB0b3AgPyB2YWwgOiB3aW4ucGFnZVlP
ZmZzZXQKKyAgICAgICAgICAgICAgICApOworCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIGVsZW1bIG1ldGhvZCBdID0gdmFsOworICAgICAgICAgICAgfQorICAgICAgICB9
LCBtZXRob2QsIHZhbCwgYXJndW1lbnRzLmxlbmd0aCApOworICAgIH07Cit9ICk7CisKKy8vIFN1
cHBvcnQ6IFNhZmFyaSA8PTcgLSA5LjEsIENocm9tZSA8PTM3IC0gNDkKKy8vIEFkZCB0aGUgdG9w
L2xlZnQgY3NzSG9va3MgdXNpbmcgalF1ZXJ5LmZuLnBvc2l0aW9uCisvLyBXZWJraXQgYnVnOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkwODQKKy8vIEJsaW5rIGJ1
ZzogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9
NTg5MzQ3CisvLyBnZXRDb21wdXRlZFN0eWxlIHJldHVybnMgcGVyY2VudCB3aGVuIHNwZWNpZmll
ZCBmb3IgdG9wL2xlZnQvYm90dG9tL3JpZ2h0OworLy8gcmF0aGVyIHRoYW4gbWFrZSB0aGUgY3Nz
IG1vZHVsZSBkZXBlbmQgb24gdGhlIG9mZnNldCBtb2R1bGUsIGp1c3QgY2hlY2sgZm9yIGl0IGhl
cmUKK2pRdWVyeS5lYWNoKCBbICJ0b3AiLCAibGVmdCIgXSwgZnVuY3Rpb24oIGksIHByb3AgKSB7
CisgICAgalF1ZXJ5LmNzc0hvb2tzWyBwcm9wIF0gPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucGl4
ZWxQb3NpdGlvbiwKKyAgICAgICAgZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkgeworICAgICAg
ICAgICAgaWYgKCBjb21wdXRlZCApIHsKKyAgICAgICAgICAgICAgICBjb21wdXRlZCA9IGN1ckNT
UyggZWxlbSwgcHJvcCApOworCisgICAgICAgICAgICAgICAgLy8gSWYgY3VyQ1NTIHJldHVybnMg
cGVyY2VudGFnZSwgZmFsbGJhY2sgdG8gb2Zmc2V0CisgICAgICAgICAgICAgICAgcmV0dXJuIHJu
dW1ub25weC50ZXN0KCBjb21wdXRlZCApID8KKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCBl
bGVtICkucG9zaXRpb24oKVsgcHJvcCBdICsgInB4IiA6CisgICAgICAgICAgICAgICAgICAgIGNv
bXB1dGVkOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgKTsKK30gKTsKKworCisvLyBD
cmVhdGUgaW5uZXJIZWlnaHQsIGlubmVyV2lkdGgsIGhlaWdodCwgd2lkdGgsIG91dGVySGVpZ2h0
IGFuZCBvdXRlcldpZHRoIG1ldGhvZHMKK2pRdWVyeS5lYWNoKCB7IEhlaWdodDogImhlaWdodCIs
IFdpZHRoOiAid2lkdGgiIH0sIGZ1bmN0aW9uKCBuYW1lLCB0eXBlICkgeworICAgIGpRdWVyeS5l
YWNoKCB7IHBhZGRpbmc6ICJpbm5lciIgKyBuYW1lLCBjb250ZW50OiB0eXBlLCAiIjogIm91dGVy
IiArIG5hbWUgfSwKKyAgICAgICAgZnVuY3Rpb24oIGRlZmF1bHRFeHRyYSwgZnVuY05hbWUgKSB7
CisKKyAgICAgICAgLy8gTWFyZ2luIGlzIG9ubHkgZm9yIG91dGVySGVpZ2h0LCBvdXRlcldpZHRo
CisgICAgICAgIGpRdWVyeS5mblsgZnVuY05hbWUgXSA9IGZ1bmN0aW9uKCBtYXJnaW4sIHZhbHVl
ICkgeworICAgICAgICAgICAgdmFyIGNoYWluYWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggJiYgKCBk
ZWZhdWx0RXh0cmEgfHwgdHlwZW9mIG1hcmdpbiAhPT0gImJvb2xlYW4iICksCisgICAgICAgICAg
ICAgICAgZXh0cmEgPSBkZWZhdWx0RXh0cmEgfHwgKCBtYXJnaW4gPT09IHRydWUgfHwgdmFsdWUg
PT09IHRydWUgPyAibWFyZ2luIiA6ICJib3JkZXIiICk7CisKKyAgICAgICAgICAgIHJldHVybiBh
Y2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCB2YWx1ZSApIHsKKyAgICAgICAgICAg
ICAgICB2YXIgZG9jOworCisgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNXaW5kb3coIGVs
ZW0gKSApIHsKKworICAgICAgICAgICAgICAgICAgICAvLyAkKCB3aW5kb3cgKS5vdXRlcldpZHRo
L0hlaWdodCByZXR1cm4gdy9oIGluY2x1ZGluZyBzY3JvbGxiYXJzIChnaC0xNzI5KQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZnVuY05hbWUuaW5kZXhPZiggIm91dGVyIiApID09PSAwID8K
KyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1bICJpbm5lciIgKyBuYW1lIF0gOgorICAgICAg
ICAgICAgICAgICAgICAgICAgZWxlbS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbICJjbGllbnQi
ICsgbmFtZSBdOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIEdldCBk
b2N1bWVudCB3aWR0aCBvciBoZWlnaHQKKyAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5
cGUgPT09IDkgKSB7CisgICAgICAgICAgICAgICAgICAgIGRvYyA9IGVsZW0uZG9jdW1lbnRFbGVt
ZW50OworCisgICAgICAgICAgICAgICAgICAgIC8vIEVpdGhlciBzY3JvbGxbV2lkdGgvSGVpZ2h0
XSBvciBvZmZzZXRbV2lkdGgvSGVpZ2h0XSBvciBjbGllbnRbV2lkdGgvSGVpZ2h0XSwKKyAgICAg
ICAgICAgICAgICAgICAgLy8gd2hpY2hldmVyIGlzIGdyZWF0ZXN0CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBNYXRoLm1heCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uYm9keVsg
InNjcm9sbCIgKyBuYW1lIF0sIGRvY1sgInNjcm9sbCIgKyBuYW1lIF0sCisgICAgICAgICAgICAg
ICAgICAgICAgICBlbGVtLmJvZHlbICJvZmZzZXQiICsgbmFtZSBdLCBkb2NbICJvZmZzZXQiICsg
bmFtZSBdLAorICAgICAgICAgICAgICAgICAgICAgICAgZG9jWyAiY2xpZW50IiArIG5hbWUgXQor
ICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8KKworICAgICAgICAgICAgICAgICAgICAv
LyBHZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50LCByZXF1ZXN0aW5nIGJ1dCBub3Qg
Zm9yY2luZyBwYXJzZUZsb2F0CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5jc3MoIGVsZW0s
IHR5cGUsIGV4dHJhICkgOgorCisgICAgICAgICAgICAgICAgICAgIC8vIFNldCB3aWR0aCBvciBo
ZWlnaHQgb24gdGhlIGVsZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnN0eWxlKCBl
bGVtLCB0eXBlLCB2YWx1ZSwgZXh0cmEgKTsKKyAgICAgICAgICAgIH0sIHR5cGUsIGNoYWluYWJs
ZSA/IG1hcmdpbiA6IHVuZGVmaW5lZCwgY2hhaW5hYmxlICk7CisgICAgICAgIH07CisgICAgfSAp
OworfSApOworCisKK2pRdWVyeS5mbi5leHRlbmQoIHsKKworICAgIGJpbmQ6IGZ1bmN0aW9uKCB0
eXBlcywgZGF0YSwgZm4gKSB7CisgICAgICAgIHJldHVybiB0aGlzLm9uKCB0eXBlcywgbnVsbCwg
ZGF0YSwgZm4gKTsKKyAgICB9LAorICAgIHVuYmluZDogZnVuY3Rpb24oIHR5cGVzLCBmbiApIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMub2ZmKCB0eXBlcywgbnVsbCwgZm4gKTsKKyAgICB9LAorCisg
ICAgZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGRhdGEsIGZuICkgeworICAg
ICAgICByZXR1cm4gdGhpcy5vbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApOworICAgIH0s
CisgICAgdW5kZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZm4gKSB7CisKKyAg
ICAgICAgLy8gKCBuYW1lc3BhY2UgKSBvciAoIHNlbGVjdG9yLCB0eXBlcyBbLCBmbl0gKQorICAg
ICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/CisgICAgICAgICAgICB0aGlzLm9m
Ziggc2VsZWN0b3IsICIqKiIgKSA6CisgICAgICAgICAgICB0aGlzLm9mZiggdHlwZXMsIHNlbGVj
dG9yIHx8ICIqKiIsIGZuICk7CisgICAgfQorfSApOworCitqUXVlcnkucGFyc2VKU09OID0gSlNP
Ti5wYXJzZTsKKworCisKKworLy8gUmVnaXN0ZXIgYXMgYSBuYW1lZCBBTUQgbW9kdWxlLCBzaW5j
ZSBqUXVlcnkgY2FuIGJlIGNvbmNhdGVuYXRlZCB3aXRoIG90aGVyCisvLyBmaWxlcyB0aGF0IG1h
eSB1c2UgZGVmaW5lLCBidXQgbm90IHZpYSBhIHByb3BlciBjb25jYXRlbmF0aW9uIHNjcmlwdCB0
aGF0CisvLyB1bmRlcnN0YW5kcyBhbm9ueW1vdXMgQU1EIG1vZHVsZXMuIEEgbmFtZWQgQU1EIGlz
IHNhZmVzdCBhbmQgbW9zdCByb2J1c3QKKy8vIHdheSB0byByZWdpc3Rlci4gTG93ZXJjYXNlIGpx
dWVyeSBpcyB1c2VkIGJlY2F1c2UgQU1EIG1vZHVsZSBuYW1lcyBhcmUKKy8vIGRlcml2ZWQgZnJv
bSBmaWxlIG5hbWVzLCBhbmQgalF1ZXJ5IGlzIG5vcm1hbGx5IGRlbGl2ZXJlZCBpbiBhIGxvd2Vy
Y2FzZQorLy8gZmlsZSBuYW1lLiBEbyB0aGlzIGFmdGVyIGNyZWF0aW5nIHRoZSBnbG9iYWwgc28g
dGhhdCBpZiBhbiBBTUQgbW9kdWxlIHdhbnRzCisvLyB0byBjYWxsIG5vQ29uZmxpY3QgdG8gaGlk
ZSB0aGlzIHZlcnNpb24gb2YgalF1ZXJ5LCBpdCB3aWxsIHdvcmsuCisKKy8vIE5vdGUgdGhhdCBm
b3IgbWF4aW11bSBwb3J0YWJpbGl0eSwgbGlicmFyaWVzIHRoYXQgYXJlIG5vdCBqUXVlcnkgc2hv
dWxkCisvLyBkZWNsYXJlIHRoZW1zZWx2ZXMgYXMgYW5vbnltb3VzIG1vZHVsZXMsIGFuZCBhdm9p
ZCBzZXR0aW5nIGEgZ2xvYmFsIGlmIGFuCisvLyBBTUQgbG9hZGVyIGlzIHByZXNlbnQuIGpRdWVy
eSBpcyBhIHNwZWNpYWwgY2FzZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZQorLy8gaHR0cHM6
Ly9naXRodWIuY29tL2pyYnVya2UvcmVxdWlyZWpzL3dpa2kvVXBkYXRpbmctZXhpc3RpbmctbGli
cmFyaWVzI3dpa2ktYW5vbgorCitpZiAoIHR5cGVvZiBkZWZpbmUgPT09ICJmdW5jdGlvbiIgJiYg
ZGVmaW5lLmFtZCApIHsKKyAgICBkZWZpbmUoICJqcXVlcnkiLCBbXSwgZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHJldHVybiBqUXVlcnk7CisgICAgfSApOworfQorCisKKworCit2YXIKKworICAgIC8v
IE1hcCBvdmVyIGpRdWVyeSBpbiBjYXNlIG9mIG92ZXJ3cml0ZQorICAgIF9qUXVlcnkgPSB3aW5k
b3cualF1ZXJ5LAorCisgICAgLy8gTWFwIG92ZXIgdGhlICQgaW4gY2FzZSBvZiBvdmVyd3JpdGUK
KyAgICBfJCA9IHdpbmRvdy4kOworCitqUXVlcnkubm9Db25mbGljdCA9IGZ1bmN0aW9uKCBkZWVw
ICkgeworICAgIGlmICggd2luZG93LiQgPT09IGpRdWVyeSApIHsKKyAgICAgICAgd2luZG93LiQg
PSBfJDsKKyAgICB9CisKKyAgICBpZiAoIGRlZXAgJiYgd2luZG93LmpRdWVyeSA9PT0galF1ZXJ5
ICkgeworICAgICAgICB3aW5kb3cualF1ZXJ5ID0gX2pRdWVyeTsKKyAgICB9CisKKyAgICByZXR1
cm4galF1ZXJ5OworfTsKKworLy8gRXhwb3NlIGpRdWVyeSBhbmQgJCBpZGVudGlmaWVycywgZXZl
biBpbiBBTUQKKy8vICgjNzEwMiNjb21tZW50OjEwLCBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5
L2pxdWVyeS9wdWxsLzU1NykKKy8vIGFuZCBDb21tb25KUyBmb3IgYnJvd3NlciBlbXVsYXRvcnMg
KCMxMzU2NikKK2lmICggIW5vR2xvYmFsICkgeworICAgIHdpbmRvdy5qUXVlcnkgPSB3aW5kb3cu
JCA9IGpRdWVyeTsKK30KKworCisKKworCityZXR1cm4galF1ZXJ5OworfSApOwpkaWZmIC0tZ2l0
IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvanF1ZXJ5L25vZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvaW5kZXgu
Y3NzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5L25vZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvaW5k
ZXguY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjE3ZWExODAxNjEyMTI2ZjFkYjY1Y2UwNTY4ZjJhMDIzNzNiOTNi
NTUKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9qcXVlcnkvbm9kZV9tb2R1bGVzL3Rv
ZG9tdmMtYXBwLWNzcy9pbmRleC5jc3MKQEAgLTAsMCArMSwzNzggQEAKK2h0bWwsCitib2R5IHsK
KyAgICBtYXJnaW46IDA7CisgICAgcGFkZGluZzogMDsKK30KKworYnV0dG9uIHsKKyAgICBtYXJn
aW46IDA7CisgICAgcGFkZGluZzogMDsKKyAgICBib3JkZXI6IDA7CisgICAgYmFja2dyb3VuZDog
bm9uZTsKKyAgICBmb250LXNpemU6IDEwMCU7CisgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5l
OworICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OworICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0Owor
ICAgIGNvbG9yOiBpbmhlcml0OworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKKyAgICBh
cHBlYXJhbmNlOiBub25lOworICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2Vk
OworICAgIC1tb3otZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOworICAgIGZvbnQtc21vb3Ro
aW5nOiBhbnRpYWxpYXNlZDsKK30KKworYm9keSB7CisgICAgZm9udDogMTRweCAnSGVsdmV0aWNh
IE5ldWUnLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOworICAgIGxpbmUtaGVpZ2h0OiAx
LjRlbTsKKyAgICBiYWNrZ3JvdW5kOiAjZjVmNWY1OworICAgIGNvbG9yOiAjNGQ0ZDRkOworICAg
IG1pbi13aWR0aDogMjMwcHg7CisgICAgbWF4LXdpZHRoOiA1NTBweDsKKyAgICBtYXJnaW46IDAg
YXV0bzsKKyAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKKyAgICAtbW96
LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKKyAgICBmb250LXNtb290aGluZzogYW50aWFs
aWFzZWQ7CisgICAgZm9udC13ZWlnaHQ6IDMwMDsKK30KKworYnV0dG9uLAoraW5wdXRbdHlwZT0i
Y2hlY2tib3giXSB7CisgICAgb3V0bGluZTogbm9uZTsKK30KKworLmhpZGRlbiB7CisgICAgZGlz
cGxheTogbm9uZTsKK30KKworI3RvZG9hcHAgeworICAgIGJhY2tncm91bmQ6ICNmZmY7CisgICAg
bWFyZ2luOiAxMzBweCAwIDQwcHggMDsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgYm94
LXNoYWRvdzogMCAycHggNHB4IDAgcmdiYSgwLCAwLCAwLCAwLjIpLAorICAgICAgICAgICAgICAg
IDAgMjVweCA1MHB4IDAgcmdiYSgwLCAwLCAwLCAwLjEpOworfQorCisjdG9kb2FwcCBpbnB1dDo6
LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7CisgICAgZm9udC1zdHlsZTogaXRhbGljOworICAg
IGZvbnQtd2VpZ2h0OiAzMDA7CisgICAgY29sb3I6ICNlNmU2ZTY7Cit9CisKKyN0b2RvYXBwIGlu
cHV0OjotbW96LXBsYWNlaG9sZGVyIHsKKyAgICBmb250LXN0eWxlOiBpdGFsaWM7CisgICAgZm9u
dC13ZWlnaHQ6IDMwMDsKKyAgICBjb2xvcjogI2U2ZTZlNjsKK30KKworI3RvZG9hcHAgaW5wdXQ6
OmlucHV0LXBsYWNlaG9sZGVyIHsKKyAgICBmb250LXN0eWxlOiBpdGFsaWM7CisgICAgZm9udC13
ZWlnaHQ6IDMwMDsKKyAgICBjb2xvcjogI2U2ZTZlNjsKK30KKworI3RvZG9hcHAgaDEgeworICAg
IHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IC0xNTVweDsKKyAgICB3aWR0aDogMTAwJTsK
KyAgICBmb250LXNpemU6IDEwMHB4OworICAgIGZvbnQtd2VpZ2h0OiAxMDA7CisgICAgdGV4dC1h
bGlnbjogY2VudGVyOworICAgIGNvbG9yOiByZ2JhKDE3NSwgNDcsIDQ3LCAwLjE1KTsKKyAgICAt
d2Via2l0LXRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7CisgICAgLW1vei10ZXh0
LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5OworICAgIHRleHQtcmVuZGVyaW5nOiBvcHRp
bWl6ZUxlZ2liaWxpdHk7Cit9CisKKyNuZXctdG9kbywKKy5lZGl0IHsKKyAgICBwb3NpdGlvbjog
cmVsYXRpdmU7CisgICAgbWFyZ2luOiAwOworICAgIHdpZHRoOiAxMDAlOworICAgIGZvbnQtc2l6
ZTogMjRweDsKKyAgICBmb250LWZhbWlseTogaW5oZXJpdDsKKyAgICBmb250LXdlaWdodDogaW5o
ZXJpdDsKKyAgICBsaW5lLWhlaWdodDogMS40ZW07CisgICAgYm9yZGVyOiAwOworICAgIG91dGxp
bmU6IG5vbmU7CisgICAgY29sb3I6IGluaGVyaXQ7CisgICAgcGFkZGluZzogNnB4OworICAgIGJv
cmRlcjogMXB4IHNvbGlkICM5OTk7CisgICAgYm94LXNoYWRvdzogaW5zZXQgMCAtMXB4IDVweCAw
IHJnYmEoMCwgMCwgMCwgMC4yKTsKKyAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OworICAgIC13
ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOworICAgIC1tb3otZm9udC1zbW9vdGhp
bmc6IGFudGlhbGlhc2VkOworICAgIGZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKK30KKwor
I25ldy10b2RvIHsKKyAgICBwYWRkaW5nOiAxNnB4IDE2cHggMTZweCA2MHB4OworICAgIGJvcmRl
cjogbm9uZTsKKyAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMDAzKTsKKyAgICBib3gt
c2hhZG93OiBpbnNldCAwIC0ycHggMXB4IHJnYmEoMCwwLDAsMC4wMyk7Cit9CisKKyNtYWluIHsK
KyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgei1pbmRleDogMjsKKyAgICBib3JkZXItdG9w
OiAxcHggc29saWQgI2U2ZTZlNjsKK30KKworbGFiZWxbZm9yPSd0b2dnbGUtYWxsJ10geworICAg
IGRpc3BsYXk6IG5vbmU7Cit9CisKKyN0b2dnbGUtYWxsIHsKKyAgICBwb3NpdGlvbjogYWJzb2x1
dGU7CisgICAgdG9wOiAtNTVweDsKKyAgICBsZWZ0OiAtMTJweDsKKyAgICB3aWR0aDogNjBweDsK
KyAgICBoZWlnaHQ6IDM0cHg7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgIGJvcmRlcjog
bm9uZTsgLyogTW9iaWxlIFNhZmFyaSAqLworfQorCisjdG9nZ2xlLWFsbDpiZWZvcmUgeworICAg
IGNvbnRlbnQ6ICfina8nOworICAgIGZvbnQtc2l6ZTogMjJweDsKKyAgICBjb2xvcjogI2U2ZTZl
NjsKKyAgICBwYWRkaW5nOiAxMHB4IDI3cHggMTBweCAyN3B4OworfQorCisjdG9nZ2xlLWFsbDpj
aGVja2VkOmJlZm9yZSB7CisgICAgY29sb3I6ICM3MzczNzM7Cit9CisKKyN0b2RvLWxpc3Qgewor
ICAgIG1hcmdpbjogMDsKKyAgICBwYWRkaW5nOiAwOworICAgIGxpc3Qtc3R5bGU6IG5vbmU7Cit9
CisKKyN0b2RvLWxpc3QgbGkgeworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBmb250LXNp
emU6IDI0cHg7CisgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZGVkZWQ7Cit9CisKKyN0
b2RvLWxpc3QgbGk6bGFzdC1jaGlsZCB7CisgICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKK30KKwor
I3RvZG8tbGlzdCBsaS5lZGl0aW5nIHsKKyAgICBib3JkZXItYm90dG9tOiBub25lOworICAgIHBh
ZGRpbmc6IDA7Cit9CisKKyN0b2RvLWxpc3QgbGkuZWRpdGluZyAuZWRpdCB7CisgICAgZGlzcGxh
eTogYmxvY2s7CisgICAgd2lkdGg6IDUwNnB4OworICAgIHBhZGRpbmc6IDEzcHggMTdweCAxMnB4
IDE3cHg7CisgICAgbWFyZ2luOiAwIDAgMCA0M3B4OworfQorCisjdG9kby1saXN0IGxpLmVkaXRp
bmcgLnZpZXcgeworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisKKyN0b2RvLWxpc3QgbGkgLnRvZ2ds
ZSB7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgIHdpZHRoOiA0MHB4OworICAgIC8qIGF1
dG8sIHNpbmNlIG5vbi1XZWJLaXQgYnJvd3NlcnMgZG9lc24ndCBzdXBwb3J0IGlucHV0IHN0eWxp
bmcgKi8KKyAgICBoZWlnaHQ6IGF1dG87CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHRv
cDogMDsKKyAgICBib3R0b206IDA7CisgICAgbWFyZ2luOiBhdXRvIDA7CisgICAgYm9yZGVyOiBu
b25lOyAvKiBNb2JpbGUgU2FmYXJpICovCisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwor
ICAgIGFwcGVhcmFuY2U6IG5vbmU7Cit9CisKKyN0b2RvLWxpc3QgbGkgLnRvZ2dsZTphZnRlciB7
CisgICAgY29udGVudDogdXJsKCdkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPSJo
dHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiB2aWV3Qm94
PSItMTAgLTE4IDEwMCAxMzUiPjxjaXJjbGUgY3g9IjUwIiBjeT0iNTAiIHI9IjUwIiBmaWxsPSJu
b25lIiBzdHJva2U9IiNlZGVkZWQiIHN0cm9rZS13aWR0aD0iMyIvPjwvc3ZnPicpOworfQorCisj
dG9kby1saXN0IGxpIC50b2dnbGU6Y2hlY2tlZDphZnRlciB7CisgICAgY29udGVudDogdXJsKCdk
YXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAw
L3N2ZyIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiB2aWV3Qm94PSItMTAgLTE4IDEwMCAxMzUiPjxj
aXJjbGUgY3g9IjUwIiBjeT0iNTAiIHI9IjUwIiBmaWxsPSJub25lIiBzdHJva2U9IiNiZGRhZDUi
IHN0cm9rZS13aWR0aD0iMyIvPjxwYXRoIGZpbGw9IiM1ZGMyYWYiIGQ9Ik03MiAyNUw0MiA3MSAy
NyA1NmwtNCA0IDIwIDIwIDM0LTUyeiIvPjwvc3ZnPicpOworfQorCisjdG9kby1saXN0IGxpIGxh
YmVsIHsKKyAgICB3aGl0ZS1zcGFjZTogcHJlOworICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7
CisgICAgcGFkZGluZzogMTVweCA2MHB4IDE1cHggMTVweDsKKyAgICBtYXJnaW4tbGVmdDogNDVw
eDsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBsaW5lLWhlaWdodDogMS4yOworICAgIHRyYW5z
aXRpb246IGNvbG9yIDAuNHM7Cit9CisKKyN0b2RvLWxpc3QgbGkuY29tcGxldGVkIGxhYmVsIHsK
KyAgICBjb2xvcjogI2Q5ZDlkOTsKKyAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsK
K30KKworI3RvZG8tbGlzdCBsaSAuZGVzdHJveSB7CisgICAgZGlzcGxheTogbm9uZTsKKyAgICBw
b3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAwOworICAgIHJpZ2h0OiAxMHB4OworICAgIGJv
dHRvbTogMDsKKyAgICB3aWR0aDogNDBweDsKKyAgICBoZWlnaHQ6IDQwcHg7CisgICAgbWFyZ2lu
OiBhdXRvIDA7CisgICAgZm9udC1zaXplOiAzMHB4OworICAgIGNvbG9yOiAjY2M5YTlhOworICAg
IG1hcmdpbi1ib3R0b206IDExcHg7CisgICAgdHJhbnNpdGlvbjogY29sb3IgMC4ycyBlYXNlLW91
dDsKK30KKworI3RvZG8tbGlzdCBsaSAuZGVzdHJveTpob3ZlciB7CisgICAgY29sb3I6ICNhZjVi
NWU7Cit9CisKKyN0b2RvLWxpc3QgbGkgLmRlc3Ryb3k6YWZ0ZXIgeworICAgIGNvbnRlbnQ6ICfD
lyc7Cit9CisKKyN0b2RvLWxpc3QgbGk6aG92ZXIgLmRlc3Ryb3kgeworICAgIGRpc3BsYXk6IGJs
b2NrOworfQorCisjdG9kby1saXN0IGxpIC5lZGl0IHsKKyAgICBkaXNwbGF5OiBub25lOworfQor
CisjdG9kby1saXN0IGxpLmVkaXRpbmc6bGFzdC1jaGlsZCB7CisgICAgbWFyZ2luLWJvdHRvbTog
LTFweDsKK30KKworI2Zvb3RlciB7CisgICAgY29sb3I6ICM3Nzc7CisgICAgcGFkZGluZzogMTBw
eCAxNXB4OworICAgIGhlaWdodDogMjBweDsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAg
Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNlNmU2ZTY7Cit9CisKKyNmb290ZXI6YmVmb3JlIHsKKyAg
ICBjb250ZW50OiAnJzsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgcmlnaHQ6IDA7Cisg
ICAgYm90dG9tOiAwOworICAgIGxlZnQ6IDA7CisgICAgaGVpZ2h0OiA1MHB4OworICAgIG92ZXJm
bG93OiBoaWRkZW47CisgICAgYm94LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4y
KSwKKyAgICAgICAgICAgICAgICAwIDhweCAwIC0zcHggI2Y2ZjZmNiwKKyAgICAgICAgICAgICAg
ICAwIDlweCAxcHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksCisgICAgICAgICAgICAgICAgMCAx
NnB4IDAgLTZweCAjZjZmNmY2LAorICAgICAgICAgICAgICAgIDAgMTdweCAycHggLTZweCByZ2Jh
KDAsIDAsIDAsIDAuMik7Cit9CisKKyN0b2RvLWNvdW50IHsKKyAgICBmbG9hdDogbGVmdDsKKyAg
ICB0ZXh0LWFsaWduOiBsZWZ0OworfQorCisjdG9kby1jb3VudCBzdHJvbmcgeworICAgIGZvbnQt
d2VpZ2h0OiAzMDA7Cit9CisKKyNmaWx0ZXJzIHsKKyAgICBtYXJnaW46IDA7CisgICAgcGFkZGlu
ZzogMDsKKyAgICBsaXN0LXN0eWxlOiBub25lOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAg
ICByaWdodDogMDsKKyAgICBsZWZ0OiAwOworfQorCisjZmlsdGVycyBsaSB7CisgICAgZGlzcGxh
eTogaW5saW5lOworfQorCisjZmlsdGVycyBsaSBhIHsKKyAgICBjb2xvcjogaW5oZXJpdDsKKyAg
ICBtYXJnaW46IDNweDsKKyAgICBwYWRkaW5nOiAzcHggN3B4OworICAgIHRleHQtZGVjb3JhdGlv
bjogbm9uZTsKKyAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKKyAgICBib3JkZXIt
cmFkaXVzOiAzcHg7Cit9CisKKyNmaWx0ZXJzIGxpIGEuc2VsZWN0ZWQsCisjZmlsdGVycyBsaSBh
OmhvdmVyIHsKKyAgICBib3JkZXItY29sb3I6IHJnYmEoMTc1LCA0NywgNDcsIDAuMSk7Cit9CisK
KyNmaWx0ZXJzIGxpIGEuc2VsZWN0ZWQgeworICAgIGJvcmRlci1jb2xvcjogcmdiYSgxNzUsIDQ3
LCA0NywgMC4yKTsKK30KKworI2NsZWFyLWNvbXBsZXRlZCwKK2h0bWwgI2NsZWFyLWNvbXBsZXRl
ZDphY3RpdmUgeworICAgIGZsb2F0OiByaWdodDsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cisg
ICAgbGluZS1oZWlnaHQ6IDIwcHg7CisgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgIGN1
cnNvcjogcG9pbnRlcjsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cit9CisKKyNjbGVhci1jb21w
bGV0ZWQ6aG92ZXIgeworICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCisjaW5m
byB7CisgICAgbWFyZ2luOiA2NXB4IGF1dG8gMDsKKyAgICBjb2xvcjogI2JmYmZiZjsKKyAgICBm
b250LXNpemU6IDEwcHg7CisgICAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwg
MjU1LCAwLjUpOworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKworI2luZm8gcCB7CisgICAg
bGluZS1oZWlnaHQ6IDE7Cit9CisKKyNpbmZvIGEgeworICAgIGNvbG9yOiBpbmhlcml0OworICAg
IHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICBmb250LXdlaWdodDogNDAwOworfQorCisjaW5m
byBhOmhvdmVyIHsKKyAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKworLyoKKyAg
ICBIYWNrIHRvIHJlbW92ZSBiYWNrZ3JvdW5kIGZyb20gTW9iaWxlIFNhZmFyaS4KKyAgICBDYW4n
dCB1c2UgaXQgZ2xvYmFsbHkgc2luY2UgaXQgZGVzdHJveXMgY2hlY2tib3hlcyBpbiBGaXJlZm94
CisqLworQG1lZGlhIHNjcmVlbiBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzow
KSB7CisgICAgI3RvZ2dsZS1hbGwsCisgICAgI3RvZG8tbGlzdCBsaSAudG9nZ2xlIHsKKyAgICAg
ICAgYmFja2dyb3VuZDogbm9uZTsKKyAgICB9CisKKyAgICAjdG9kby1saXN0IGxpIC50b2dnbGUg
eworICAgICAgICBoZWlnaHQ6IDQwcHg7CisgICAgfQorCisgICAgI3RvZ2dsZS1hbGwgeworICAg
ICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKKyAgICAgICAgdHJhbnNmb3Jt
OiByb3RhdGUoOTBkZWcpOworICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CisgICAg
ICAgIGFwcGVhcmFuY2U6IG5vbmU7CisgICAgfQorfQorCitAbWVkaWEgKG1heC13aWR0aDogNDMw
cHgpIHsKKyAgICAjZm9vdGVyIHsKKyAgICAgICAgaGVpZ2h0OiA1MHB4OworICAgIH0KKworICAg
ICNmaWx0ZXJzIHsKKyAgICAgICAgYm90dG9tOiAxMHB4OworICAgIH0KK30KZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL2pxdWVyeS9ub2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL3BhY2thZ2Uu
anNvbiBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL2pxdWVyeS9ub2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL3Bh
Y2thZ2UuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NTBlZmE2M2Y4ZjE5NDhlNDRiOGI1ZjhiMDdmNzE1MjM2
NzY3OGM1Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5L25vZGVfbW9kdWxl
cy90b2RvbXZjLWFwcC1jc3MvcGFja2FnZS5qc29uCkBAIC0wLDAgKzEsMTAzIEBACit7CisgICJf
YXJncyI6IFsKKyAgICBbCisgICAgICB7CisgICAgICAgICJyYXciOiAidG9kb212Yy1hcHAtY3Nz
QH4xLjAuMSIsCisgICAgICAgICJzY29wZSI6IG51bGwsCisgICAgICAgICJlc2NhcGVkTmFtZSI6
ICJ0b2RvbXZjLWFwcC1jc3MiLAorICAgICAgICAibmFtZSI6ICJ0b2RvbXZjLWFwcC1jc3MiLAor
ICAgICAgICAicmF3U3BlYyI6ICJ+MS4wLjEiLAorICAgICAgICAic3BlYyI6ICI+PTEuMC4xIDwx
LjEuMCIsCisgICAgICAgICJ0eXBlIjogInJhbmdlIgorICAgICAgfSwKKyAgICAgICIvVXNlcnMv
YWRkeW8vcHJvamVjdHMvc3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL2pxdWVyeSIKKyAgICBdCisgIF0sCisgICJfZnJvbSI6ICJ0b2RvbXZjLWFwcC1j
c3NAPj0xLjAuMSA8MS4xLjAiLAorICAiX2lkIjogInRvZG9tdmMtYXBwLWNzc0AxLjAuNCIsCisg
ICJfaW5DYWNoZSI6IHRydWUsCisgICJfbG9jYXRpb24iOiAiL3RvZG9tdmMtYXBwLWNzcyIsCisg
ICJfbm9kZVZlcnNpb24iOiAiMC4xMi4wIiwKKyAgIl9ucG1Vc2VyIjogeworICAgICJuYW1lIjog
InNpbmRyZXNvcmh1cyIsCisgICAgImVtYWlsIjogInNpbmRyZXNvcmh1c0BnbWFpbC5jb20iCisg
IH0sCisgICJfbnBtVmVyc2lvbiI6ICIyLjUuMSIsCisgICJfcGhhbnRvbUNoaWxkcmVuIjoge30s
CisgICJfcmVxdWVzdGVkIjogeworICAgICJyYXciOiAidG9kb212Yy1hcHAtY3NzQH4xLjAuMSIs
CisgICAgInNjb3BlIjogbnVsbCwKKyAgICAiZXNjYXBlZE5hbWUiOiAidG9kb212Yy1hcHAtY3Nz
IiwKKyAgICAibmFtZSI6ICJ0b2RvbXZjLWFwcC1jc3MiLAorICAgICJyYXdTcGVjIjogIn4xLjAu
MSIsCisgICAgInNwZWMiOiAiPj0xLjAuMSA8MS4xLjAiLAorICAgICJ0eXBlIjogInJhbmdlIgor
ICB9LAorICAiX3JlcXVpcmVkQnkiOiBbCisgICAgIi8iCisgIF0sCisgICJfcmVzb2x2ZWQiOiAi
aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdG9kb212Yy1hcHAtY3NzLy0vdG9kb212Yy1hcHAt
Y3NzLTEuMC40LnRneiIsCisgICJfc2hhc3VtIjogImQyNTI5Mjc5YTZkYTViZWZiMDZiNTVjMGMz
MjRjNWZjZmQ5NGQ2NTYiLAorICAiX3Nocmlua3dyYXAiOiBudWxsLAorICAiX3NwZWMiOiAidG9k
b212Yy1hcHAtY3NzQH4xLjAuMSIsCisgICJfd2hlcmUiOiAiL1VzZXJzL2FkZHlvL3Byb2plY3Rz
L3NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9qcXVl
cnkiLAorICAiYXV0aG9yIjogeworICAgICJuYW1lIjogIlNpbmRyZSBTb3JodXMiLAorICAgICJl
bWFpbCI6ICJzaW5kcmVzb3JodXNAZ21haWwuY29tIiwKKyAgICAidXJsIjogInNpbmRyZXNvcmh1
cy5jb20iCisgIH0sCisgICJidWdzIjogeworICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29t
L3Rhc3RlanMvdG9kb212Yy1hcHAtY3NzL2lzc3VlcyIKKyAgfSwKKyAgImRlcGVuZGVuY2llcyI6
IHt9LAorICAiZGVzY3JpcHRpb24iOiAiQ1NTIGZvciBUb2RvTVZDIGFwcHMiLAorICAiZGV2RGVw
ZW5kZW5jaWVzIjoge30sCisgICJkaXJlY3RvcmllcyI6IHt9LAorICAiZGlzdCI6IHsKKyAgICAi
c2hhc3VtIjogImQyNTI5Mjc5YTZkYTViZWZiMDZiNTVjMGMzMjRjNWZjZmQ5NGQ2NTYiLAorICAg
ICJ0YXJiYWxsIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RvZG9tdmMtYXBwLWNzcy8t
L3RvZG9tdmMtYXBwLWNzcy0xLjAuNC50Z3oiCisgIH0sCisgICJmaWxlcyI6IFsKKyAgICAiaW5k
ZXguY3NzIgorICBdLAorICAiZ2l0SGVhZCI6ICIxZTRlMzg4ODRhMzUxOTNlYWYxODA4YTViYTQ0
NDIxODMyODY3MTg0IiwKKyAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS90YXN0ZWpz
L3RvZG9tdmMtYXBwLWNzcyIsCisgICJrZXl3b3JkcyI6IFsKKyAgICAidG9kb212YyIsCisgICAg
InRhc3RlanMiLAorICAgICJhcHAiLAorICAgICJ0b2RvIiwKKyAgICAidGVtcGxhdGUiLAorICAg
ICJjc3MiLAorICAgICJzdHlsZSIsCisgICAgInN0eWxlc2hlZXQiCisgIF0sCisgICJsaWNlbnNl
IjogIkNDLUJZLTQuMCIsCisgICJtYWludGFpbmVycyI6IFsKKyAgICB7CisgICAgICAibmFtZSI6
ICJzaW5kcmVzb3JodXMiLAorICAgICAgImVtYWlsIjogInNpbmRyZXNvcmh1c0BnbWFpbC5jb20i
CisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJhZGR5b3NtYW5pIiwKKyAgICAgICJlbWFp
bCI6ICJhZGR5b3NtYW5pQGdtYWlsLmNvbSIKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjog
InBhc3N5IiwKKyAgICAgICJlbWFpbCI6ICJwaGFydGlnQHJkcmVpLm5ldCIKKyAgICB9LAorICAg
IHsKKyAgICAgICJuYW1lIjogInN0ZXBoZW5wbHVzcGx1cyIsCisgICAgICAiZW1haWwiOiAic2F3
Y2h1a0BnbWFpbC5jb20iCisgICAgfQorICBdLAorICAibmFtZSI6ICJ0b2RvbXZjLWFwcC1jc3Mi
LAorICAib3B0aW9uYWxEZXBlbmRlbmNpZXMiOiB7fSwKKyAgInJlYWRtZSI6ICJFUlJPUjogTm8g
UkVBRE1FIGRhdGEgZm91bmQhIiwKKyAgInJlcG9zaXRvcnkiOiB7CisgICAgInR5cGUiOiAiZ2l0
IiwKKyAgICAidXJsIjogImdpdCtodHRwczovL2dpdGh1Yi5jb20vdGFzdGVqcy90b2RvbXZjLWFw
cC1jc3MuZ2l0IgorICB9LAorICAic2NyaXB0cyI6IHt9LAorICAidmVyc2lvbiI6ICIxLjAuNCIK
K30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2pxdWVyeS9ub2RlX21vZHVsZXMvdG9kb212Yy1h
cHAtY3NzL3JlYWRtZS5tZCBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2pxdWVyeS9ub2RlX21vZHVsZXMvdG9kb212
Yy1hcHAtY3NzL3JlYWRtZS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZGRiZWJmMDI0YzA0YWViNjAyMGNhZjEz
MWEyZWQwMzE4OTA4MGE1Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5L25v
ZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvcmVhZG1lLm1kCkBAIC0wLDAgKzEsMjggQEAKKyMg
dG9kb212Yy1hcHAtY3NzCisKKz4gQ1NTIGZvciBUb2RvTVZDIGFwcHMKKworIVtdKHNjcmVlbnNo
b3QucG5nKQorCisKKyMjIEluc3RhbGwKKworCitgYGAKKyQgbnBtIGluc3RhbGwgLS1zYXZlIHRv
ZG9tdmMtYXBwLWNzcworYGBgCisKKworIyMgR2V0dGluZyBzdGFydGVkCisKK2BgYGh0bWwKKzxs
aW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ibm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9p
bmRleC5jc3MiPgorYGBgCisKK1NlZSB0aGUgW1RvZG9NVkMgYXBwIHRlbXBsYXRlXShodHRwczov
L2dpdGh1Yi5jb20vdGFzdGVqcy90b2RvbXZjLWFwcC10ZW1wbGF0ZSkuCisKKworCisjIyBMaWNl
bnNlCisKKzxhIHJlbD0ibGljZW5zZSIgaHJlZj0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcv
bGljZW5zZXMvYnkvNC4wL2RlZWQuZW5fVVMiPjxpbWcgYWx0PSJDcmVhdGl2ZSBDb21tb25zIExp
Y2Vuc2UiIHN0eWxlPSJib3JkZXItd2lkdGg6MCIgc3JjPSJodHRwOi8vaS5jcmVhdGl2ZWNvbW1v
bnMub3JnL2wvYnkvNC4wLzgweDE1LnBuZyIgLz48L2E+PGJyIC8+VGhpcyA8c3BhbiB4bWxuczpk
Y3Q9Imh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy8iIGhyZWY9Imh0dHA6Ly9wdXJsLm9yZy9kYy9k
Y21pdHlwZS9JbnRlcmFjdGl2ZVJlc291cmNlIiByZWw9ImRjdDp0eXBlIj53b3JrPC9zcGFuPiBi
eSA8YSB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIiBocmVmPSJodHRw
Oi8vc2luZHJlc29yaHVzLmNvbSIgcHJvcGVydHk9ImNjOmF0dHJpYnV0aW9uTmFtZSIgcmVsPSJj
YzphdHRyaWJ1dGlvblVSTCI+U2luZHJlIFNvcmh1czwvYT4gaXMgbGljZW5zZWQgdW5kZXIgYSA8
YSByZWw9ImxpY2Vuc2UiIGhyZWY9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2Vz
L2J5LzQuMC9kZWVkLmVuX1VTIj5DcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uIDQuMCBJbnRl
cm5hdGlvbmFsIExpY2Vuc2U8L2E+LgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5L25v
ZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmNzcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2pxdWVyeS9u
b2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFzZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGQyNWQzYzg0
YWM2YzZhZWYyNmI5NjgzYTJiYzEwYzYxZjk2MGM4ZgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL2pxdWVyeS9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFzZS5jc3MKQEAgLTAs
MCArMSwxNDEgQEAKK2hyIHsKKyAgICBtYXJnaW46IDIwcHggMDsKKyAgICBib3JkZXI6IDA7Cisg
ICAgYm9yZGVyLXRvcDogMXB4IGRhc2hlZCAjYzVjNWM1OworICAgIGJvcmRlci1ib3R0b206IDFw
eCBkYXNoZWQgI2Y3ZjdmNzsKK30KKworLmxlYXJuIGEgeworICAgIGZvbnQtd2VpZ2h0OiBub3Jt
YWw7CisgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgIGNvbG9yOiAjYjgzZjQ1OworfQor
CisubGVhcm4gYTpob3ZlciB7CisgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgICAg
Y29sb3I6ICM3ODdlN2U7Cit9CisKKy5sZWFybiBoMywKKy5sZWFybiBoNCwKKy5sZWFybiBoNSB7
CisgICAgbWFyZ2luOiAxMHB4IDA7CisgICAgZm9udC13ZWlnaHQ6IDUwMDsKKyAgICBsaW5lLWhl
aWdodDogMS4yOworICAgIGNvbG9yOiAjMDAwOworfQorCisubGVhcm4gaDMgeworICAgIGZvbnQt
c2l6ZTogMjRweDsKK30KKworLmxlYXJuIGg0IHsKKyAgICBmb250LXNpemU6IDE4cHg7Cit9CisK
Ky5sZWFybiBoNSB7CisgICAgbWFyZ2luLWJvdHRvbTogMDsKKyAgICBmb250LXNpemU6IDE0cHg7
Cit9CisKKy5sZWFybiB1bCB7CisgICAgcGFkZGluZzogMDsKKyAgICBtYXJnaW46IDAgMCAzMHB4
IDI1cHg7Cit9CisKKy5sZWFybiBsaSB7CisgICAgbGluZS1oZWlnaHQ6IDIwcHg7Cit9CisKKy5s
ZWFybiBwIHsKKyAgICBmb250LXNpemU6IDE1cHg7CisgICAgZm9udC13ZWlnaHQ6IDMwMDsKKyAg
ICBsaW5lLWhlaWdodDogMS4zOworICAgIG1hcmdpbi10b3A6IDA7CisgICAgbWFyZ2luLWJvdHRv
bTogMDsKK30KKworI2lzc3VlLWNvdW50IHsKKyAgICBkaXNwbGF5OiBub25lOworfQorCisucXVv
dGUgeworICAgIGJvcmRlcjogbm9uZTsKKyAgICBtYXJnaW46IDIwcHggMCA2MHB4IDA7Cit9CisK
Ky5xdW90ZSBwIHsKKyAgICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKKy5xdW90ZSBwOmJlZm9y
ZSB7CisgICAgY29udGVudDogJ+KAnCc7CisgICAgZm9udC1zaXplOiA1MHB4OworICAgIG9wYWNp
dHk6IC4xNTsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAtMjBweDsKKyAgICBs
ZWZ0OiAzcHg7Cit9CisKKy5xdW90ZSBwOmFmdGVyIHsKKyAgICBjb250ZW50OiAn4oCdJzsKKyAg
ICBmb250LXNpemU6IDUwcHg7CisgICAgb3BhY2l0eTogLjE1OworICAgIHBvc2l0aW9uOiBhYnNv
bHV0ZTsKKyAgICBib3R0b206IC00MnB4OworICAgIHJpZ2h0OiAzcHg7Cit9CisKKy5xdW90ZSBm
b290ZXIgeworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICBib3R0b206IC00MHB4OworICAg
IHJpZ2h0OiAwOworfQorCisucXVvdGUgZm9vdGVyIGltZyB7CisgICAgYm9yZGVyLXJhZGl1czog
M3B4OworfQorCisucXVvdGUgZm9vdGVyIGEgeworICAgIG1hcmdpbi1sZWZ0OiA1cHg7CisgICAg
dmVydGljYWwtYWxpZ246IG1pZGRsZTsKK30KKworLnNwZWVjaC1idWJibGUgeworICAgIHBvc2l0
aW9uOiByZWxhdGl2ZTsKKyAgICBwYWRkaW5nOiAxMHB4OworICAgIGJhY2tncm91bmQ6IHJnYmEo
MCwgMCwgMCwgLjA0KTsKKyAgICBib3JkZXItcmFkaXVzOiA1cHg7Cit9CisKKy5zcGVlY2gtYnVi
YmxlOmFmdGVyIHsKKyAgICBjb250ZW50OiAnJzsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7Cisg
ICAgdG9wOiAxMDAlOworICAgIHJpZ2h0OiAzMHB4OworICAgIGJvcmRlcjogMTNweCBzb2xpZCB0
cmFuc3BhcmVudDsKKyAgICBib3JkZXItdG9wLWNvbG9yOiByZ2JhKDAsIDAsIDAsIC4wNCk7Cit9
CisKKy5sZWFybi1iYXIgPiAubGVhcm4geworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB3
aWR0aDogMjcycHg7CisgICAgdG9wOiA4cHg7CisgICAgbGVmdDogLTMwMHB4OworICAgIHBhZGRp
bmc6IDEwcHg7CisgICAgYm9yZGVyLXJhZGl1czogNXB4OworICAgIGJhY2tncm91bmQtY29sb3I6
IHJnYmEoMjU1LCAyNTUsIDI1NSwgLjYpOworICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IGxlZnQ7
CisgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogNTAwbXM7Cit9CisKK0BtZWRpYSAobWluLXdpZHRo
OiA4OTlweCkgeworICAgIC5sZWFybi1iYXIgeworICAgICAgICB3aWR0aDogYXV0bzsKKyAgICAg
ICAgcGFkZGluZy1sZWZ0OiAzMDBweDsKKyAgICB9CisKKyAgICAubGVhcm4tYmFyID4gLmxlYXJu
IHsKKyAgICAgICAgbGVmdDogOHB4OworICAgIH0KK30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L2pxdWVyeS9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFzZS5qcyBiL1BlcmZvcm1hbmNl
VGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L2pxdWVyeS9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFzZS5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44
MWUwMDZiYzUwMmRkYzRjNzRmNDdiZDEzYTgzOTIyNzdmODMwZGI4Ci0tLSAvZGV2L251bGwKKysr
IGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvanF1ZXJ5L25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmpz
CkBAIC0wLDAgKzEsMjQ5IEBACisvKiBnbG9iYWwgXyAqLworKGZ1bmN0aW9uICgpIHsKKyAgICAn
dXNlIHN0cmljdCc7CisKKyAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovCisgICAgLy8gVW5k
ZXJzY29yZSdzIFRlbXBsYXRlIE1vZHVsZQorICAgIC8vIENvdXJ0ZXN5IG9mIHVuZGVyc2NvcmVq
cy5vcmcKKyAgICB2YXIgXyA9IChmdW5jdGlvbiAoXykgeworICAgICAgICBfLmRlZmF1bHRzID0g
ZnVuY3Rpb24gKG9iamVjdCkgeworICAgICAgICAgICAgaWYgKCFvYmplY3QpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gb2JqZWN0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh2
YXIgYXJnc0luZGV4ID0gMSwgYXJnc0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7IGFyZ3NJbmRl
eCA8IGFyZ3NMZW5ndGg7IGFyZ3NJbmRleCsrKSB7CisgICAgICAgICAgICAgICAgdmFyIGl0ZXJh
YmxlID0gYXJndW1lbnRzW2FyZ3NJbmRleF07CisgICAgICAgICAgICAgICAgaWYgKGl0ZXJhYmxl
KSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBpdGVyYWJsZSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdFtrZXldID09IG51bGwpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvYmplY3Rba2V5XSA9IGl0ZXJhYmxlW2tleV07CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gb2JqZWN0OworICAgICAgICB9
CisKKyAgICAgICAgLy8gQnkgZGVmYXVsdCwgVW5kZXJzY29yZSB1c2VzIEVSQi1zdHlsZSB0ZW1w
bGF0ZSBkZWxpbWl0ZXJzLCBjaGFuZ2UgdGhlCisgICAgICAgIC8vIGZvbGxvd2luZyB0ZW1wbGF0
ZSBzZXR0aW5ncyB0byB1c2UgYWx0ZXJuYXRpdmUgZGVsaW1pdGVycy4KKyAgICAgICAgXy50ZW1w
bGF0ZVNldHRpbmdzID0geworICAgICAgICAgICAgZXZhbHVhdGUgICAgOiAvPCUoW1xzXFNdKz8p
JT4vZywKKyAgICAgICAgICAgIGludGVycG9sYXRlIDogLzwlPShbXHNcU10rPyklPi9nLAorICAg
ICAgICAgICAgZXNjYXBlICAgICAgOiAvPCUtKFtcc1xTXSs/KSU+L2cKKyAgICAgICAgfTsKKwor
ICAgICAgICAvLyBXaGVuIGN1c3RvbWl6aW5nIGB0ZW1wbGF0ZVNldHRpbmdzYCwgaWYgeW91IGRv
bid0IHdhbnQgdG8gZGVmaW5lIGFuCisgICAgICAgIC8vIGludGVycG9sYXRpb24sIGV2YWx1YXRp
b24gb3IgZXNjYXBpbmcgcmVnZXgsIHdlIG5lZWQgb25lIHRoYXQgaXMKKyAgICAgICAgLy8gZ3Vh
cmFudGVlZCBub3QgdG8gbWF0Y2guCisgICAgICAgIHZhciBub01hdGNoID0gLyguKV4vOworCisg
ICAgICAgIC8vIENlcnRhaW4gY2hhcmFjdGVycyBuZWVkIHRvIGJlIGVzY2FwZWQgc28gdGhhdCB0
aGV5IGNhbiBiZSBwdXQgaW50byBhCisgICAgICAgIC8vIHN0cmluZyBsaXRlcmFsLgorICAgICAg
ICB2YXIgZXNjYXBlcyA9IHsKKyAgICAgICAgICAgICInIjogICAgICAiJyIsCisgICAgICAgICAg
ICAnXFwnOiAgICAgJ1xcJywKKyAgICAgICAgICAgICdccic6ICAgICAncicsCisgICAgICAgICAg
ICAnXG4nOiAgICAgJ24nLAorICAgICAgICAgICAgJ1x0JzogICAgICd0JywKKyAgICAgICAgICAg
ICdcdTIwMjgnOiAndTIwMjgnLAorICAgICAgICAgICAgJ1x1MjAyOSc6ICd1MjAyOScKKyAgICAg
ICAgfTsKKworICAgICAgICB2YXIgZXNjYXBlciA9IC9cXHwnfFxyfFxufFx0fFx1MjAyOHxcdTIw
MjkvZzsKKworICAgICAgICAvLyBKYXZhU2NyaXB0IG1pY3JvLXRlbXBsYXRpbmcsIHNpbWlsYXIg
dG8gSm9obiBSZXNpZydzIGltcGxlbWVudGF0aW9uLgorICAgICAgICAvLyBVbmRlcnNjb3JlIHRl
bXBsYXRpbmcgaGFuZGxlcyBhcmJpdHJhcnkgZGVsaW1pdGVycywgcHJlc2VydmVzIHdoaXRlc3Bh
Y2UsCisgICAgICAgIC8vIGFuZCBjb3JyZWN0bHkgZXNjYXBlcyBxdW90ZXMgd2l0aGluIGludGVy
cG9sYXRlZCBjb2RlLgorICAgICAgICBfLnRlbXBsYXRlID0gZnVuY3Rpb24odGV4dCwgZGF0YSwg
c2V0dGluZ3MpIHsKKyAgICAgICAgICAgIHZhciByZW5kZXI7CisgICAgICAgICAgICBzZXR0aW5n
cyA9IF8uZGVmYXVsdHMoe30sIHNldHRpbmdzLCBfLnRlbXBsYXRlU2V0dGluZ3MpOworCisgICAg
ICAgICAgICAvLyBDb21iaW5lIGRlbGltaXRlcnMgaW50byBvbmUgcmVndWxhciBleHByZXNzaW9u
IHZpYSBhbHRlcm5hdGlvbi4KKyAgICAgICAgICAgIHZhciBtYXRjaGVyID0gbmV3IFJlZ0V4cChb
CisgICAgICAgICAgICAgICAgKHNldHRpbmdzLmVzY2FwZSB8fCBub01hdGNoKS5zb3VyY2UsCisg
ICAgICAgICAgICAgICAgKHNldHRpbmdzLmludGVycG9sYXRlIHx8IG5vTWF0Y2gpLnNvdXJjZSwK
KyAgICAgICAgICAgICAgICAoc2V0dGluZ3MuZXZhbHVhdGUgfHwgbm9NYXRjaCkuc291cmNlCisg
ICAgICAgICAgICBdLmpvaW4oJ3wnKSArICd8JCcsICdnJyk7CisKKyAgICAgICAgICAgIC8vIENv
bXBpbGUgdGhlIHRlbXBsYXRlIHNvdXJjZSwgZXNjYXBpbmcgc3RyaW5nIGxpdGVyYWxzIGFwcHJv
cHJpYXRlbHkuCisgICAgICAgICAgICB2YXIgaW5kZXggPSAwOworICAgICAgICAgICAgdmFyIHNv
dXJjZSA9ICJfX3ArPSciOworICAgICAgICAgICAgdGV4dC5yZXBsYWNlKG1hdGNoZXIsIGZ1bmN0
aW9uKG1hdGNoLCBlc2NhcGUsIGludGVycG9sYXRlLCBldmFsdWF0ZSwgb2Zmc2V0KSB7CisgICAg
ICAgICAgICAgICAgc291cmNlICs9IHRleHQuc2xpY2UoaW5kZXgsIG9mZnNldCkKKyAgICAgICAg
ICAgICAgICAgICAgLnJlcGxhY2UoZXNjYXBlciwgZnVuY3Rpb24obWF0Y2gpIHsgcmV0dXJuICdc
XCcgKyBlc2NhcGVzW21hdGNoXTsgfSk7CisKKyAgICAgICAgICAgICAgICBpZiAoZXNjYXBlKSB7
CisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSAiJytcbigoX190PSgiICsgZXNjYXBlICsg
IikpPT1udWxsPycnOl8uZXNjYXBlKF9fdCkpK1xuJyI7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmIChpbnRlcnBvbGF0ZSkgeworICAgICAgICAgICAgICAgICAgICBzb3Vy
Y2UgKz0gIicrXG4oKF9fdD0oIiArIGludGVycG9sYXRlICsgIikpPT1udWxsPycnOl9fdCkrXG4n
IjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGV2YWx1YXRlKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSAiJztcbiIgKyBldmFsdWF0ZSArICJcbl9fcCs9
JyI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGluZGV4ID0gb2Zmc2V0ICsg
bWF0Y2gubGVuZ3RoOworICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDsKKyAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgc291cmNlICs9ICInO1xuIjsKKworICAgICAgICAgICAgLy8gSWYg
YSB2YXJpYWJsZSBpcyBub3Qgc3BlY2lmaWVkLCBwbGFjZSBkYXRhIHZhbHVlcyBpbiBsb2NhbCBz
Y29wZS4KKyAgICAgICAgICAgIGlmICghc2V0dGluZ3MudmFyaWFibGUpIHNvdXJjZSA9ICd3aXRo
KG9ianx8e30pe1xuJyArIHNvdXJjZSArICd9XG4nOworCisgICAgICAgICAgICBzb3VyY2UgPSAi
dmFyIF9fdCxfX3A9JycsX19qPUFycmF5LnByb3RvdHlwZS5qb2luLCIgKworICAgICAgICAgICAg
ICAgICJwcmludD1mdW5jdGlvbigpe19fcCs9X19qLmNhbGwoYXJndW1lbnRzLCcnKTt9O1xuIiAr
CisgICAgICAgICAgICAgICAgc291cmNlICsgInJldHVybiBfX3A7XG4iOworCisgICAgICAgICAg
ICB0cnkgeworICAgICAgICAgICAgICAgIHJlbmRlciA9IG5ldyBGdW5jdGlvbihzZXR0aW5ncy52
YXJpYWJsZSB8fCAnb2JqJywgJ18nLCBzb3VyY2UpOworICAgICAgICAgICAgfSBjYXRjaCAoZSkg
eworICAgICAgICAgICAgICAgIGUuc291cmNlID0gc291cmNlOworICAgICAgICAgICAgICAgIHRo
cm93IGU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChkYXRhKSByZXR1cm4gcmVu
ZGVyKGRhdGEsIF8pOworICAgICAgICAgICAgdmFyIHRlbXBsYXRlID0gZnVuY3Rpb24oZGF0YSkg
eworICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXIuY2FsbCh0aGlzLCBkYXRhLCBfKTsKKyAg
ICAgICAgICAgIH07CisKKyAgICAgICAgICAgIC8vIFByb3ZpZGUgdGhlIGNvbXBpbGVkIGZ1bmN0
aW9uIHNvdXJjZSBhcyBhIGNvbnZlbmllbmNlIGZvciBwcmVjb21waWxhdGlvbi4KKyAgICAgICAg
ICAgIHRlbXBsYXRlLnNvdXJjZSA9ICdmdW5jdGlvbignICsgKHNldHRpbmdzLnZhcmlhYmxlIHx8
ICdvYmonKSArICcpe1xuJyArIHNvdXJjZSArICd9JzsKKworICAgICAgICAgICAgcmV0dXJuIHRl
bXBsYXRlOworICAgICAgICB9OworCisgICAgICAgIHJldHVybiBfOworICAgIH0pKHt9KTsKKwor
ICAgIGlmIChsb2NhdGlvbi5ob3N0bmFtZSA9PT0gJ3RvZG9tdmMuY29tJykgeworICAgICAgICAo
ZnVuY3Rpb24oaSxzLG8sZyxyLGEsbSl7aVsnR29vZ2xlQW5hbHl0aWNzT2JqZWN0J109cjtpW3Jd
PWlbcl18fGZ1bmN0aW9uKCl7CisgICAgICAgIChpW3JdLnE9aVtyXS5xfHxbXSkucHVzaChhcmd1
bWVudHMpfSxpW3JdLmw9MSpuZXcgRGF0ZSgpO2E9cy5jcmVhdGVFbGVtZW50KG8pLAorICAgICAg
ICBtPXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUobylbMF07YS5hc3luYz0xO2Euc3JjPWc7bS5wYXJl
bnROb2RlLmluc2VydEJlZm9yZShhLG0pCisgICAgICAgIH0pKHdpbmRvdyxkb2N1bWVudCwnc2Ny
aXB0JywnaHR0cHM6Ly93d3cuZ29vZ2xlLWFuYWx5dGljcy5jb20vYW5hbHl0aWNzLmpzJywnZ2En
KTsKKyAgICAgICAgZ2EoJ2NyZWF0ZScsICdVQS0zMTA4MTA2Mi0xJywgJ2F1dG8nKTsKKyAgICAg
ICAgZ2EoJ3NlbmQnLCAncGFnZXZpZXcnKTsKKyAgICB9CisgICAgLyoganNoaW50IGlnbm9yZTpl
bmQgKi8KKworICAgIGZ1bmN0aW9uIHJlZGlyZWN0KCkgeworICAgICAgICBpZiAobG9jYXRpb24u
aG9zdG5hbWUgPT09ICd0YXN0ZWpzLmdpdGh1Yi5pbycpIHsKKyAgICAgICAgICAgIGxvY2F0aW9u
LmhyZWYgPSBsb2NhdGlvbi5ocmVmLnJlcGxhY2UoJ3Rhc3RlanMuZ2l0aHViLmlvL3RvZG9tdmMn
LCAndG9kb212Yy5jb20nKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbmRS
b290KCkgeworICAgICAgICB2YXIgYmFzZSA9IGxvY2F0aW9uLmhyZWYuaW5kZXhPZignZXhhbXBs
ZXMvJyk7CisgICAgICAgIHJldHVybiBsb2NhdGlvbi5ocmVmLnN1YnN0cigwLCBiYXNlKTsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBnZXRGaWxlKGZpbGUsIGNhbGxiYWNrKSB7CisgICAgICAgIGlm
ICghbG9jYXRpb24uaG9zdCkgeworICAgICAgICAgICAgcmV0dXJuIGNvbnNvbGUuaW5mbygnTWlz
cyB0aGUgaW5mbyBiYXI/IFJ1biBUb2RvTVZDIGZyb20gYSBzZXJ2ZXIgdG8gYXZvaWQgYSBjcm9z
cy1vcmlnaW4gZXJyb3IuJyk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgeGhyID0gbmV3IFhN
TEh0dHBSZXF1ZXN0KCk7CisKKyAgICAgICAgeGhyLm9wZW4oJ0dFVCcsIGZpbmRSb290KCkgKyBm
aWxlLCB0cnVlKTsKKyAgICAgICAgeGhyLnNlbmQoKTsKKworICAgICAgICB4aHIub25sb2FkID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCAmJiBjYWxs
YmFjaykgeworICAgICAgICAgICAgICAgIGNhbGxiYWNrKHhoci5yZXNwb25zZVRleHQpOworICAg
ICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKworICAgIGZ1bmN0aW9uIExlYXJuKGxlYXJu
SlNPTiwgY29uZmlnKSB7CisgICAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBMZWFybikpIHsK
KyAgICAgICAgICAgIHJldHVybiBuZXcgTGVhcm4obGVhcm5KU09OLCBjb25maWcpOworICAgICAg
ICB9CisKKyAgICAgICAgdmFyIHRlbXBsYXRlLCBmcmFtZXdvcms7CisKKyAgICAgICAgaWYgKHR5
cGVvZiBsZWFybkpTT04gIT09ICdvYmplY3QnKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAg
ICAgICAgICAgIGxlYXJuSlNPTiA9IEpTT04ucGFyc2UobGVhcm5KU09OKTsKKyAgICAgICAgICAg
IH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoY29uZmlnKSB7CisgICAgICAgICAgICB0ZW1wbGF0ZSA9
IGNvbmZpZy50ZW1wbGF0ZTsKKyAgICAgICAgICAgIGZyYW1ld29yayA9IGNvbmZpZy5mcmFtZXdv
cms7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXRlbXBsYXRlICYmIGxlYXJuSlNPTi50ZW1w
bGF0ZXMpIHsKKyAgICAgICAgICAgIHRlbXBsYXRlID0gbGVhcm5KU09OLnRlbXBsYXRlcy50b2Rv
bXZjOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFmcmFtZXdvcmsgJiYgZG9jdW1lbnQucXVl
cnlTZWxlY3RvcignW2RhdGEtZnJhbWV3b3JrXScpKSB7CisgICAgICAgICAgICBmcmFtZXdvcmsg
PSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1mcmFtZXdvcmtdJykuZGF0YXNldC5mcmFt
ZXdvcms7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLnRlbXBsYXRlID0gdGVtcGxhdGU7CisK
KyAgICAgICAgaWYgKGxlYXJuSlNPTi5iYWNrZW5kKSB7CisgICAgICAgICAgICB0aGlzLmZyYW1l
d29ya0pTT04gPSBsZWFybkpTT04uYmFja2VuZDsKKyAgICAgICAgICAgIHRoaXMuZnJhbWV3b3Jr
SlNPTi5pc3N1ZUxhYmVsID0gZnJhbWV3b3JrOworICAgICAgICAgICAgdGhpcy5hcHBlbmQoewor
ICAgICAgICAgICAgICAgIGJhY2tlbmQ6IHRydWUKKyAgICAgICAgICAgIH0pOworICAgICAgICB9
IGVsc2UgaWYgKGxlYXJuSlNPTltmcmFtZXdvcmtdKSB7CisgICAgICAgICAgICB0aGlzLmZyYW1l
d29ya0pTT04gPSBsZWFybkpTT05bZnJhbWV3b3JrXTsKKyAgICAgICAgICAgIHRoaXMuZnJhbWV3
b3JrSlNPTi5pc3N1ZUxhYmVsID0gZnJhbWV3b3JrOworICAgICAgICAgICAgdGhpcy5hcHBlbmQo
KTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuZmV0Y2hJc3N1ZUNvdW50KCk7CisgICAgfQor
CisgICAgTGVhcm4ucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIChvcHRzKSB7CisgICAgICAg
IHZhciBhc2lkZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2FzaWRlJyk7CisgICAgICAgIGFz
aWRlLmlubmVySFRNTCA9IF8udGVtcGxhdGUodGhpcy50ZW1wbGF0ZSwgdGhpcy5mcmFtZXdvcmtK
U09OKTsKKyAgICAgICAgYXNpZGUuY2xhc3NOYW1lID0gJ2xlYXJuJzsKKworICAgICAgICBpZiAo
b3B0cyAmJiBvcHRzLmJhY2tlbmQpIHsKKyAgICAgICAgICAgIC8vIFJlbW92ZSBkZW1vIGxpbmsK
KyAgICAgICAgICAgIHZhciBzb3VyY2VMaW5rcyA9IGFzaWRlLnF1ZXJ5U2VsZWN0b3IoJy5zb3Vy
Y2UtbGlua3MnKTsKKyAgICAgICAgICAgIHZhciBoZWFkaW5nID0gc291cmNlTGlua3MuZmlyc3RF
bGVtZW50Q2hpbGQ7CisgICAgICAgICAgICB2YXIgc291cmNlTGluayA9IHNvdXJjZUxpbmtzLmxh
c3RFbGVtZW50Q2hpbGQ7CisgICAgICAgICAgICAvLyBDb3JyZWN0IGxpbmsgcGF0aAorICAgICAg
ICAgICAgdmFyIGhyZWYgPSBzb3VyY2VMaW5rLmdldEF0dHJpYnV0ZSgnaHJlZicpOworICAgICAg
ICAgICAgc291cmNlTGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmLnN1YnN0cihocmVmLmxh
c3RJbmRleE9mKCdodHRwJykpKTsKKyAgICAgICAgICAgIHNvdXJjZUxpbmtzLmlubmVySFRNTCA9
IGhlYWRpbmcub3V0ZXJIVE1MICsgc291cmNlTGluay5vdXRlckhUTUw7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAvLyBMb2NhbGl6ZSBkZW1vIGxpbmtzCisgICAgICAgICAgICB2YXIg
ZGVtb0xpbmtzID0gYXNpZGUucXVlcnlTZWxlY3RvckFsbCgnLmRlbW8tbGluaycpOworICAgICAg
ICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChkZW1vTGlua3MsIGZ1bmN0aW9uIChk
ZW1vTGluaykgeworICAgICAgICAgICAgICAgIGlmIChkZW1vTGluay5nZXRBdHRyaWJ1dGUoJ2hy
ZWYnKS5zdWJzdHIoMCwgNCkgIT09ICdodHRwJykgeworICAgICAgICAgICAgICAgICAgICBkZW1v
TGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBmaW5kUm9vdCgpICsgZGVtb0xpbmsuZ2V0QXR0cmli
dXRlKCdocmVmJykpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAg
ICB9CisKKyAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc05hbWUgPSAoZG9jdW1lbnQuYm9keS5j
bGFzc05hbWUgKyAnIGxlYXJuLWJhcicpLnRyaW0oKTsKKyAgICAgICAgZG9jdW1lbnQuYm9keS5p
bnNlcnRBZGphY2VudEhUTUwoJ2FmdGVyQmVnaW4nLCBhc2lkZS5vdXRlckhUTUwpOworICAgIH07
CisKKyAgICBMZWFybi5wcm90b3R5cGUuZmV0Y2hJc3N1ZUNvdW50ID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICB2YXIgaXNzdWVMaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lzc3VlLWNv
dW50LWxpbmsnKTsKKyAgICAgICAgaWYgKGlzc3VlTGluaykgeworICAgICAgICAgICAgdmFyIHVy
bCA9IGlzc3VlTGluay5ocmVmLnJlcGxhY2UoJ2h0dHBzOi8vZ2l0aHViLmNvbScsICdodHRwczov
L2FwaS5naXRodWIuY29tL3JlcG9zJyk7CisgICAgICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0
dHBSZXF1ZXN0KCk7CisgICAgICAgICAgICB4aHIub3BlbignR0VUJywgdXJsLCB0cnVlKTsKKyAg
ICAgICAgICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAgICAgIHZh
ciBwYXJzZWRSZXNwb25zZSA9IEpTT04ucGFyc2UoZS50YXJnZXQucmVzcG9uc2VUZXh0KTsKKyAg
ICAgICAgICAgICAgICBpZiAocGFyc2VkUmVzcG9uc2UgaW5zdGFuY2VvZiBBcnJheSkgeworICAg
ICAgICAgICAgICAgICAgICB2YXIgY291bnQgPSBwYXJzZWRSZXNwb25zZS5sZW5ndGg7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChjb3VudCAhPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaXNzdWVMaW5rLmlubmVySFRNTCA9ICdUaGlzIGFwcCBoYXMgJyArIGNvdW50ICsgJyBvcGVu
IGlzc3Vlcyc7CisgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnaXNzdWUtY291bnQnKS5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZSc7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICAgICAg
eGhyLnNlbmQoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICByZWRpcmVjdCgpOworICAgIGdl
dEZpbGUoJ2xlYXJuLmpzb24nLCBMZWFybik7Cit9KSgpOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvanF1ZXJ5L25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9wYWNrYWdlLmpzb24gYi9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9qcXVlcnkvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL3BhY2thZ2UuanNvbgpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi41NTI1ZDQzMmQxZTExNDU3NGViODQxMDVkYmViMmQwMjNjNjViN2U3Ci0tLSAv
ZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5L25vZGVfbW9kdWxlcy90b2RvbXZjLWNv
bW1vbi9wYWNrYWdlLmpzb24KQEAgLTAsMCArMSwxMDQgQEAKK3sKKyAgIl9hcmdzIjogWworICAg
IFsKKyAgICAgIHsKKyAgICAgICAgInJhdyI6ICJ0b2RvbXZjLWNvbW1vbkB+MS4wLjEiLAorICAg
ICAgICAic2NvcGUiOiBudWxsLAorICAgICAgICAiZXNjYXBlZE5hbWUiOiAidG9kb212Yy1jb21t
b24iLAorICAgICAgICAibmFtZSI6ICJ0b2RvbXZjLWNvbW1vbiIsCisgICAgICAgICJyYXdTcGVj
IjogIn4xLjAuMSIsCisgICAgICAgICJzcGVjIjogIj49MS4wLjEgPDEuMS4wIiwKKyAgICAgICAg
InR5cGUiOiAicmFuZ2UiCisgICAgICB9LAorICAgICAgIi9Vc2Vycy9hZGR5by9wcm9qZWN0cy9z
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5
IgorICAgIF0KKyAgXSwKKyAgIl9mcm9tIjogInRvZG9tdmMtY29tbW9uQD49MS4wLjEgPDEuMS4w
IiwKKyAgIl9pZCI6ICJ0b2RvbXZjLWNvbW1vbkAxLjAuMyIsCisgICJfaW5DYWNoZSI6IHRydWUs
CisgICJfbG9jYXRpb24iOiAiL3RvZG9tdmMtY29tbW9uIiwKKyAgIl9ub2RlVmVyc2lvbiI6ICI3
LjEuMCIsCisgICJfbnBtT3BlcmF0aW9uYWxJbnRlcm5hbCI6IHsKKyAgICAiaG9zdCI6ICJwYWNr
YWdlcy0xOC1lYXN0LmludGVybmFsLm5wbWpzLmNvbSIsCisgICAgInRtcCI6ICJ0bXAvdG9kb212
Yy1jb21tb24tMS4wLjMudGd6XzE0NzkyNzYzNjEyMjdfMC41MTEyNDg4MDEzNjkyMiIKKyAgfSwK
KyAgIl9ucG1Vc2VyIjogeworICAgICJuYW1lIjogInNpbmRyZXNvcmh1cyIsCisgICAgImVtYWls
IjogInNpbmRyZXNvcmh1c0BnbWFpbC5jb20iCisgIH0sCisgICJfbnBtVmVyc2lvbiI6ICIzLjEw
LjkiLAorICAiX3BoYW50b21DaGlsZHJlbiI6IHt9LAorICAiX3JlcXVlc3RlZCI6IHsKKyAgICAi
cmF3IjogInRvZG9tdmMtY29tbW9uQH4xLjAuMSIsCisgICAgInNjb3BlIjogbnVsbCwKKyAgICAi
ZXNjYXBlZE5hbWUiOiAidG9kb212Yy1jb21tb24iLAorICAgICJuYW1lIjogInRvZG9tdmMtY29t
bW9uIiwKKyAgICAicmF3U3BlYyI6ICJ+MS4wLjEiLAorICAgICJzcGVjIjogIj49MS4wLjEgPDEu
MS4wIiwKKyAgICAidHlwZSI6ICJyYW5nZSIKKyAgfSwKKyAgIl9yZXF1aXJlZEJ5IjogWworICAg
ICIvIgorICBdLAorICAiX3Jlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Rv
ZG9tdmMtY29tbW9uLy0vdG9kb212Yy1jb21tb24tMS4wLjMudGd6IiwKKyAgIl9zaGFzdW0iOiAi
Y2JhMTg2ODEwOWNhYTQwMWI5MDhlYmY3Nzc5NGNjMTAxNGI3NDg3MyIsCisgICJfc2hyaW5rd3Jh
cCI6IG51bGwsCisgICJfc3BlYyI6ICJ0b2RvbXZjLWNvbW1vbkB+MS4wLjEiLAorICAiX3doZXJl
IjogIi9Vc2Vycy9hZGR5by9wcm9qZWN0cy9zcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5IiwKKyAgImF1dGhvciI6IHsKKyAgICAibmFtZSI6
ICJUYXN0ZUpTIgorICB9LAorICAiYnVncyI6IHsKKyAgICAidXJsIjogImh0dHBzOi8vZ2l0aHVi
LmNvbS90YXN0ZWpzL3RvZG9tdmMtY29tbW9uL2lzc3VlcyIKKyAgfSwKKyAgImRlcGVuZGVuY2ll
cyI6IHt9LAorICAiZGVzY3JpcHRpb24iOiAiQ29tbW9uIFRvZG9NVkMgdXRpbGl0aWVzIHVzZWQg
Ynkgb3VyIGFwcHMiLAorICAiZGV2RGVwZW5kZW5jaWVzIjoge30sCisgICJkaXJlY3RvcmllcyI6
IHt9LAorICAiZGlzdCI6IHsKKyAgICAic2hhc3VtIjogImNiYTE4NjgxMDljYWE0MDFiOTA4ZWJm
Nzc3OTRjYzEwMTRiNzQ4NzMiLAorICAgICJ0YXJiYWxsIjogImh0dHBzOi8vcmVnaXN0cnkubnBt
anMub3JnL3RvZG9tdmMtY29tbW9uLy0vdG9kb212Yy1jb21tb24tMS4wLjMudGd6IgorICB9LAor
ICAiZmlsZXMiOiBbCisgICAgImJhc2UuanMiLAorICAgICJiYXNlLmNzcyIKKyAgXSwKKyAgImdp
dEhlYWQiOiAiZTc0MjViYWZiOTU2MWQ3NjZiNzY5ODQ0ODEwZTA0OTY3MzRmZmU4YyIsCisgICJo
b21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vdGFzdGVqcy90b2RvbXZjLWNvbW1vbiNyZWFk
bWUiLAorICAia2V5d29yZHMiOiBbCisgICAgInRvZG9tdmMiLAorICAgICJ0YXN0ZWpzIiwKKyAg
ICAidXRpbCIsCisgICAgInV0aWxpdGllcyIKKyAgXSwKKyAgImxpY2Vuc2UiOiAiTUlUIiwKKyAg
Im1haW4iOiAiYmFzZS5qcyIsCisgICJtYWludGFpbmVycyI6IFsKKyAgICB7CisgICAgICAibmFt
ZSI6ICJzaW5kcmVzb3JodXMiLAorICAgICAgImVtYWlsIjogInNpbmRyZXNvcmh1c0BnbWFpbC5j
b20iCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJhZGR5b3NtYW5pIiwKKyAgICAgICJl
bWFpbCI6ICJhZGR5b3NtYW5pQGdtYWlsLmNvbSIKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1l
IjogInBhc3N5IiwKKyAgICAgICJlbWFpbCI6ICJwaGFydGlnQHJkcmVpLm5ldCIKKyAgICB9LAor
ICAgIHsKKyAgICAgICJuYW1lIjogInN0ZXBoZW5wbHVzcGx1cyIsCisgICAgICAiZW1haWwiOiAi
c2F3Y2h1a0BnbWFpbC5jb20iCisgICAgfQorICBdLAorICAibmFtZSI6ICJ0b2RvbXZjLWNvbW1v
biIsCisgICJvcHRpb25hbERlcGVuZGVuY2llcyI6IHt9LAorICAicmVhZG1lIjogIkVSUk9SOiBO
byBSRUFETUUgZGF0YSBmb3VuZCEiLAorICAicmVwb3NpdG9yeSI6IHsKKyAgICAidHlwZSI6ICJn
aXQiLAorICAgICJ1cmwiOiAiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS90YXN0ZWpzL3RvZG9tdmMt
Y29tbW9uLmdpdCIKKyAgfSwKKyAgInNjcmlwdHMiOiB7fSwKKyAgInN0eWxlIjogImJhc2UuY3Nz
IiwKKyAgInZlcnNpb24iOiAiMS4wLjMiCit9CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9qcXVl
cnkvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL3JlYWRtZS5tZCBiL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2px
dWVyeS9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vcmVhZG1lLm1kCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdh
NWRlNTExOGYzZmM3NzU4ZThkZGMwYTY4Njg3NDljZWU5Y2FmOTUKLS0tIC9kZXYvbnVsbAorKysg
Yi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9qcXVlcnkvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL3JlYWRtZS5t
ZApAQCAtMCwwICsxLDE1IEBACisjIHRvZG9tdmMtY29tbW9uCisKKz4gQ29tbW9uIFRvZG9NVkMg
dXRpbGl0aWVzIHVzZWQgYnkgb3VyIGFwcHMKKworCisjIyBJbnN0YWxsCisKK2BgYAorJCBucG0g
aW5zdGFsbCAtLXNhdmUgdG9kb212Yy1jb21tb24KK2BgYAorCisKKyMjIExpY2Vuc2UKKworTUlU
IMKpIFtUYXN0ZUpTXShodHRwOi8vdGFzdGVqcy5jb20pCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9qcXVlcnkvcGFja2FnZS5qc29uIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5L3BhY2thZ2UuanNvbgpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4wOTdjODVmYzNhNTYyYzAyYzM3Nzg5NjBiZjViODEwZGY4MWRmNzU1Ci0tLSAv
ZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5L3BhY2thZ2UuanNvbgpAQCAtMCwwICsx
LDEwIEBACit7CisgICJwcml2YXRlIjogdHJ1ZSwKKyAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAi
ZGlyZWN0b3IiOiAifjEuMi4yIiwKKyAgICAiaGFuZGxlYmFycyI6ICJeNC4wLjYiLAorICAgICJq
cXVlcnkiOiAiXjMuMS4xIiwKKyAgICAidG9kb212Yy1hcHAtY3NzIjogIn4xLjAuMSIsCisgICAg
InRvZG9tdmMtY29tbW9uIjogIn4xLjAuMSIKKyAgfQorfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvanF1ZXJ5L3JlYWRtZS5tZCBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2pxdWVyeS9yZWFkbWUubWQKaW5kZXgg
NjM3NDY5MGIyMzNhZTZkZDA4ZDg1Mjk4NTdiYzkzMmVmZmQzNDY0ZS4uZGFiNmNmMGU2MjBjMmU2
ZDI4NjhlZDY0NGI5ZWNiZjYzMGJlOTI4NiAxMDA2NDQKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvanF1ZXJ5
L3JlYWRtZS5tZAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9qcXVlcnkvcmVhZG1lLm1kCkBAIC0xMSwxMCAr
MTEsMTAgQEAgVGhlIFtqUXVlcnkgd2Vic2l0ZV0oaHR0cDovL2pxdWVyeS5jb20pIGlzIGEgZ3Jl
YXQgcmVzb3VyY2UgZm9yIGdldHRpbmcgc3RhcnRlZC4KIAogSGVyZSBhcmUgc29tZSBsaW5rcyB5
b3UgbWF5IGZpbmQgaGVscGZ1bDoKIAotKiBbSG93IGpRdWVyeSBXb3Jrc10oaHR0cDovL2xlYXJu
LmpxdWVyeS5jb20vYWJvdXQtanF1ZXJ5L2hvdy1qcXVlcnktd29ya3MpCisqIFtMZWFybmluZyBD
ZW50ZXJdKGh0dHA6Ly9sZWFybi5qcXVlcnkuY29tLykKICogW0FQSSBSZWZlcmVuY2VdKGh0dHA6
Ly9hcGkuanF1ZXJ5LmNvbSkKICogW1BsdWdpbnNdKGh0dHA6Ly9wbHVnaW5zLmpxdWVyeS5jb20p
Ci0qIFtCcm93ZXIgU3VwcG9ydF0oaHR0cDovL2pxdWVyeS5jb20vYnJvd3Nlci1zdXBwb3J0KQor
KiBbQnJvd3NlciBTdXBwb3J0XShodHRwOi8vanF1ZXJ5LmNvbS9icm93c2VyLXN1cHBvcnQpCiAq
IFtCbG9nXShodHRwOi8vYmxvZy5qcXVlcnkuY29tKQogCiBBcnRpY2xlcyBhbmQgZ3VpZGVzIGZy
b20gdGhlIGNvbW11bml0eToK
</data>

          </attachment>
      

    </bug>

</bugzilla>